pax_global_header00006660000000000000000000000064135415353650014524gustar00rootroot0000000000000052 comment=001321a50886e31af33602bdaadaa9e4d74d0ab3 miller-5.6.2/000077500000000000000000000000001354153536500130225ustar00rootroot00000000000000miller-5.6.2/.gitattributes000066400000000000000000000006451354153536500157220ustar00rootroot00000000000000# Autodetect text files and perform LF normalization .gitattributes text eol=lf setup text eol=lf out binary *.txt text eol=lf *.html text eol=lf *.c text eol=lf *.h text eol=lf *.sh text eol=lf *.rb text eol=lf *.csv text eol=lf *.dat text eol=lf *.dkvp text eol=lf *.json text eol=lf *.nidx text eol=lf *.pprint text eol=lf *.tsv text eol=lf *.csv-crlf binary *.pprint-crlf binary *.dkvp-crlf binary *.bin binary miller-5.6.2/.gitignore000066400000000000000000000020611354153536500150110ustar00rootroot00000000000000autom4te.cache mlr mlrd mlrg mlrp test-argparse test-byte-readers test-line-readers test-dsl-stack test-join-bucket-keeper test-json-parser test-lrec test-rval-evaluators test-mlhmmv test-mlrregex test-mlrutil test-multiple-containers test-parse-trie test-peek-file-reader test-string-builder test_rval_evaluators test_argparse test_byte_readers test_line_readers test_join_bucket_keeper test_json_parser test_lrec test_mlhmmv test_mlrregex test_mlrutil test_multiple_containers test_parse_trie test_peek_file_reader test_string_builder output-regtest termcvt a.out *.dSYM catc catc0 catm gmon.out *.o *.pyc .swp .swo .*.swp .*.swo c/parsing/lemon c/parsing/mlr_dsl_lexer.c c/parsing/mlr_dsl_lexer.h c/parsing/mlr_dsl_parse.c c/parsing/mlr_dsl_parse.h c/parsing/mlr_dsl_parse.out c/reg_test/output c/output/out tags *.la *.lo *.log *.trs *~ .deps/ .libs/ Makefile config.h config.log config.status libtool stamp-h1 ap getl lemon_prepared lrim mlr-[0-9.]*.tar.* c/jkopush c/run_mlr c/mlr_expect_fail c/run_mlr_for_auxents c/push2 push2 data/.gitignore doc/jkopush doc/push2 miller-5.6.2/.travis.yml000066400000000000000000000011251354153536500151320ustar00rootroot00000000000000language: c # Use newer travis container-based infrastructure sudo: false # Install flex dependency addons: apt: packages: - flex - autoconf - libtool # Build using gcc and clang since it is supported # Note: 'clang -fsanitize=address' is not the right way to get an ASAN build. # This needs work. compiler: - gcc os: - linux - osx before_script: df -h && autoreconf -fiv script: ./configure && make && make check && make distcheck && make CC=$CC -C c -f Makefile.no-autoconfig after_failure: wc -l c/reg_test/test-suite.log && cat c/reg_test/test-suite.log miller-5.6.2/LICENSE.txt000066400000000000000000000027251354153536500146530ustar00rootroot00000000000000Copyright (c) 2015- John Kerl All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright holder or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. I am providing code in this repository to you under an open-source license. Because this is my personal repository, the license you receive to my code is from me and not from my employer (Facebook). miller-5.6.2/Makefile.am000066400000000000000000000001531354153536500150550ustar00rootroot00000000000000# not GPL, thus no COPYING file AUTOMAKE_OPTIONS=foreign EXTRA_DIST= LICENSE.txt README.md SUBDIRS=c doc miller-5.6.2/Makefile.in000066400000000000000000000622411354153536500150740ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/autotools/ar-lib $(top_srcdir)/autotools/compile \ $(top_srcdir)/autotools/config.guess \ $(top_srcdir)/autotools/config.sub \ $(top_srcdir)/autotools/install-sh \ $(top_srcdir)/autotools/ltmain.sh \ $(top_srcdir)/autotools/missing autotools/ar-lib \ autotools/compile autotools/config.guess autotools/config.sub \ autotools/install-sh autotools/ltmain.sh autotools/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # not GPL, thus no COPYING file AUTOMAKE_OPTIONS = foreign EXTRA_DIST = LICENSE.txt README.md SUBDIRS = c doc all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/Makefile.no-autoconfig000066400000000000000000000022471354153536500172360ustar00rootroot00000000000000# ================================================================ # NOTE: This makefile is not intended to be used in a packaging system -- # rather, Miller uses autconfig for that. This makefile is intended for users # who prefer (for whatever reason) to bypass autoconfig. Please also see # http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig # ================================================================ MANDIR ?= /usr/share/man DESTDIR ?= all: c manpage devall: c install doc # TODO: the install target exists to put most-recent mlr executable in the # path to be picked up by the mlr-execs in the docs dir. better would be to # export PATH here with ./c at its head. c: .always make -C c -f Makefile.no-autoconfig top doc: .always cd doc && poki install: .always make -C c -f Makefile.no-autoconfig install install -d -m 0755 $(DESTDIR)/$(MANDIR) install -m 0644 doc/miller.1 $(DESTDIR)/$(MANDIR) clean: .always make -C c -f Makefile.no-autoconfig clean .PHONY: manpage # OSX: # * brew install asciidoc # * export XML_CATALOG_FILES=/usr/local/etc/xml/catalog manpage: doc/miller.1.txt ( cd doc && a2x -d manpage -f manpage miller.1.txt ) .always: @true miller-5.6.2/README-RPM.md000066400000000000000000000054021354153536500147360ustar00rootroot00000000000000## Instructions to make Miller source/binary RPMs for the RPM-experienced Grab `mlr.spec` and go to town. ## Instructions to make Miller source/binary RPMs for the RPM-inexperienced ### One-time setup Change `3.3.2` to desired version. Release-package example: https://github.com/johnkerl/miller/releases/download/v3.3.2/mlr-3.3.2.tar.gz ``` cd mkdir ~/rpmbuild mkdir ~/rpmbuild/SPECS mkdir ~/rpmbuild/SOURCES cp /your/path/to/miller/clone/mlr.spec ~/rpmbuild/SPECS cp /your/path/to/mlr-3.3.2.tar.gz ~/rpmbuild/SOURCES cd ~/rpmbuild/SPECS ``` You may need to do ``` sudo yum install rpmbuild ``` ### Linting If you have changed the `mlr.spec` file: ``` rpmlint mlr.spec ``` You may need to do ``` sudo yum install rpmlint ``` ### Build source-RPM only ``` rpmbuild -bs mlr.spec Wrote: /your/home/dir/rpmbuild/SRPMS/mlr-3.3.2-1.el6.src.rpm ``` ``` rpm -qpl ../SRPMS/mlr-3.3.2-1.el6.src.rpm mlr-3.3.2.tar.gz mlr.spec ``` ``` rpm -qpi ../SRPMS/mlr-3.3.2-1.el6.src.rpm Name : mlr Relocations: (not relocatable) Version : 3.3.2 Vendor: (none) Release : 1.el6 Build Date: Sun 07 Feb 2016 09:43:39 PM EST Install Date: (not installed) Build Host: host.name.goes.here Group : Applications/Text Source RPM: (none) Size : 774430 License: BSD2 Signature : (none) URL : http://johnkerl.org/miller/doc Summary : Name-indexed data processing tool Description : Miller (mlr) allows name-indexed data such as CSV and JSON files to be processed with functions equivalent to sed, awk, cut, join, sort etc. It can convert between formats, preserves headers when sorting or reversing, and streams data where possible so its memory requirements stay small. It works well with pipes and can feed "tail -f". ``` ### Build source and binary RPMs ``` rpmbuild -ba mlr.spec ``` ``` rpm -qpl ../RPMS/x86_64//mlr-3.3.2-1.el6.x86_64.rpm /usr/bin/mlr /usr/share/man/man1/mlr.1.gz ``` ``` sudo rpm -ivh ../RPMS/x86_64/mlr-3.3.2-1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:mlr ########################################### [100%] ``` ``` /usr/bin/mlr --version Miller 3.3.2 man -M /usr/share/man mlr ``` and check the version in the DESCRIPTION section. ### Some handy references * https://github.com/bonzini/grep/blob/master/grep.spec * http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html * http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html * http://www.tldp.org/HOWTO/RPM-HOWTO/build.html * http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap3sec20.html * https://fedoraproject.org/wiki/How_to_create_a_GNU_Hello_RPM_package miller-5.6.2/README.md000066400000000000000000000204301354153536500143000ustar00rootroot00000000000000**Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON.** [![Linux build status](https://travis-ci.org/johnkerl/miller.svg?branch=master)](https://travis-ci.org/johnkerl/miller) [![Windows build status](https://ci.appveyor.com/api/projects/status/github/johnkerl/miller?branch=master&svg=true)](https://ci.appveyor.com/project/johnkerl/miller) [![License](http://img.shields.io/badge/license-BSD2-blue.svg)](https://github.com/johnkerl/miller/blob/master/LICENSE.txt) [![Docs](https://img.shields.io/badge/docs-here-yellow.svg)](http://johnkerl.org/miller/doc) [![Ubuntu](https://img.shields.io/badge/distros-ubuntu-db4923.svg)](https://launchpad.net/ubuntu/+source/miller) [![Ubuntu 16.04 LTS](https://img.shields.io/badge/distros-ubuntu1604lts-db4923.svg)](https://launchpad.net/ubuntu/xenial/+package/miller) [![Fedora](https://img.shields.io/badge/distros-fedora-173b70.svg)](https://apps.fedoraproject.org/packages/miller) [![Debian](https://img.shields.io/badge/distros-debian-c70036.svg)](https://packages.debian.org/stable/miller) [![Gentoo](https://img.shields.io/badge/distros-gentoo-4e4371.svg)](https://packages.gentoo.org/packages/sys-apps/miller) [![NetBSD](https://img.shields.io/badge/distros-netbsd-f26711.svg)](http://pkgsrc.se/textproc/miller) [![FreeBSD](https://img.shields.io/badge/distros-freebsd-8c0707.svg)](https://www.freshports.org/textproc/miller/) [![Pro-Linux](https://img.shields.io/badge/distros-prolinux-3a679d.svg)](http://www.pro-linux.de/cgi-bin/DBApp/check.cgi?ShowApp..20427.100) [![Arch Linux](https://img.shields.io/badge/distros-archlinux-1792d0.svg)](https://aur.archlinux.org/packages/miller-git) [![Homebrew/MacOSX](https://img.shields.io/badge/distros-macosxbrew-ba832b.svg)](https://github.com/Homebrew/homebrew-core/search?utf8=%E2%9C%93&q=miller) With Miller, you get to use named fields without needing to count positional indices, using familiar formats such as CSV, TSV, JSON, and positionally-indexed. For example, suppose you have a CSV data file like this: ``` county,tiv_2011,tiv_2012,line,construction SEMINOLE,22890.55,20848.71,Residential,Wood MIAMI DADE,1158674.85,1076001.08,Residential,Masonry PALM BEACH,1174081.5,1856589.17,Residential,Masonry MIAMI DADE,2850980.31,2650932.72,Commercial,Reinforced Masonry HIGHLANDS,23006.41,19757.91,Residential,Wood HIGHLANDS,49155.16,47362.96,Residential,Wood DUVAL,1731888.18,2785551.63,Residential,Masonry ST. JOHNS,29589.12,35207.53,Residential,Wood ``` Then, on the fly, you can add new fields which are functions of existing fields, drop fields, sort, aggregate statistically, pretty-print, and more: ``` $ mlr --icsv --opprint --barred \ put '$tiv_delta = $tiv_2012 - $tiv_2011; unset $tiv_2011, $tiv_2012' \ then sort -nr tiv_delta flins.csv +------------+-------------+----------------+ | county | line | tiv_delta | +------------+-------------+----------------+ | Duval | Residential | 1053663.450000 | | Palm Beach | Residential | 682507.670000 | | St. Johns | Residential | 5618.410000 | | Highlands | Residential | -1792.200000 | | Seminole | Residential | -2041.840000 | | Highlands | Residential | -3248.500000 | | Miami Dade | Residential | -82673.770000 | | Miami Dade | Commercial | -200047.590000 | +------------+-------------+----------------+ ``` This is something the Unix toolkit always could have done, and arguably always should have done. It operates on **key-value-pair data** while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller's natural data structure is the insertion-ordered hash map. This encompasses a **variety of data formats**, including but not limited to the familiar **CSV**, **TSV**, and **JSON**. (Miller can handle **positionally-indexed data** as a special case.) For a few more examples please see [Miller in 10 minutes](http://johnkerl.org/miller/doc/10-min.html). Features: * Miller is **multi-purpose**: it's useful for **data cleaning**, **data reduction**, **statistical reporting**, **devops**, **system administration**, **log-file processing**, **format conversion**, and **database-query post-processing**. * You can use Miller to snarf and munge **log-file data**, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing. * Miller complements **data-analysis tools** such as **R**, **pandas**, etc.: you can use Miller to **clean** and **prepare** your data. While you can do **basic statistics** entirely in Miller, its streaming-data feature and single-pass algorithms enable you to **reduce very large data sets**. * Miller complements SQL **databases**: you can slice, dice, and reformat data on the client side on its way into or out of a database. You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry. * Miller also goes beyond the classic Unix tools by stepping fully into our modern, **no-SQL** world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved. * Miller is **streaming**: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (`sort`, `tac`, `stats1`), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system’s available RAM, and you can use Miller in **tail -f** contexts. * Miller is **pipe-friendly** and interoperates with the Unix toolkit * Miller's I/O formats include **tabular pretty-printing**, **positionally indexed** (Unix-toolkit style), CSV, JSON, and others * Miller does **conversion** between formats * Miller's **processing is format-aware**: e.g. CSV `sort` and `tac` keep header lines first * Miller has high-throughput **performance** on par with the Unix toolkit * Not unlike `jq` (http://stedolan.github.io/jq/) for JSON, Miller is written in portable, modern C, with **zero runtime dependencies**. You can download or compile a single binary, `scp` it to a faraway machine, and expect it to work. Documentation links: * [**Full documentation for latest release**](http://johnkerl.org/miller/doc) * [Head docs](http://johnkerl.org/miller-releases/miller-head/doc/index.html) match [head code](https://github.com/johnkerl/miller); [release-specific docs](http://johnkerl.org/miller/doc/release-docs.html) match [release-specific code](https://github.com/johnkerl/miller/tags). * [Miller's license is two-clause BSD](https://github.com/johnkerl/miller/blob/master/LICENSE.txt). * [Build information including dependencies](http://johnkerl.org/miller/doc/build.html) * [Notes about issue-labeling in the Github repo](https://github.com/johnkerl/miller/wiki/Issue-labeling) * [Active issues](https://github.com/johnkerl/miller/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) More examples: ``` % mlr --csv cut -f hostname,uptime mydata.csv % mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv % mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat % grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group % mlr join -j account_id -f accounts.dat then group-by account_name balances.dat % mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json % mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* % mlr stats2 -a linreg-pca -f u,v -g shape data/* % mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* % mlr --from estimates.tbl put ' for (k,v in $*) { if (isnumeric(v) && k =~ "^[t-z].*$") { $sum += v; $count += 1 } } $mean = $sum / $count # no assignment if count unset ' % mlr --from infile.dat put -f analyze.mlr % mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' % mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' % mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' % mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' ``` miller-5.6.2/aclocal.m4000066400000000000000000001274651354153536500147010ustar00rootroot00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) miller-5.6.2/appveyor.yml000066400000000000000000000017301354153536500154130ustar00rootroot00000000000000install: - set PATH=C:\msys64\usr\bin;%PATH% - bash -lc "pacman --needed --noconfirm -Syu" - bash -lc "pacman --needed --noconfirm -Sy" - bash -lc "pacman --noconfirm -S base-devel" - bash -lc "pacman --noconfirm -S msys2-devel" - bash -lc "pacman --noconfirm -S mingw-w64-x86_64-toolchain" - bash -lc "pacman --noconfirm -S mingw-w64-x86_64-pcre" - bash -lc "pacman --noconfirm -S msys2-runtime" build_script: - bash -lc "cd $APPVEYOR_BUILD_FOLDER; pwd" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; ls -l" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; which gcc" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; gcc --version" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; pacman -Q" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; cat msys2-build.sh" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; bash -x msys2-build.sh" - bash -lc "cd $APPVEYOR_BUILD_FOLDER; cp /usr/bin/msys-2.0.dll ." artifacts: - path: ./c/mlr.exe name: Miller executable - path: ./msys-2.0.dll name: MSYS2 DLL miller-5.6.2/autotools/000077500000000000000000000000001354153536500150535ustar00rootroot00000000000000miller-5.6.2/autotools/ar-lib000077500000000000000000000133021354153536500161460ustar00rootroot00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2017 Free Software Foundation, Inc. # Written by Peter Rosin . # # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <. # # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: miller-5.6.2/autotools/config.guess000077500000000000000000001263731354153536500174070ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # This file 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ "$HP_ARCH" = hppa2.0w ] then eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: miller-5.6.2/autotools/config.sub000077500000000000000000001064501354153536500170440ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # This file 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 . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo "$1" | sed 's/-[^-]*$//'` if [ "$basic_machine" != "$1" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4*) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac echo "$basic_machine$os" exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: miller-5.6.2/autotools/depcomp000077500000000000000000000560171354153536500164410ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: miller-5.6.2/autotools/install-sh000077500000000000000000000354631354153536500170720ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: miller-5.6.2/autotools/ltmain.sh000066400000000000000000011714741354153536500167120ustar00rootroot00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # 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. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES 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 . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # 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 . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: miller-5.6.2/autotools/missing000077500000000000000000000153301354153536500164540ustar00rootroot00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: miller-5.6.2/autotools/test-driver000077500000000000000000000110401354153536500172450ustar00rootroot00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 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 2, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: miller-5.6.2/c/000077500000000000000000000000001354153536500132445ustar00rootroot00000000000000miller-5.6.2/c/.gitignore000066400000000000000000000001671354153536500152400ustar00rootroot00000000000000x y s tt tt-000-3.1.0 tt-001-rslls tti gcm.txt reg_test/runex reg_test/runv timings.txt tbin-1 tbin-2 tbin-3 stars.txt miller-5.6.2/c/.vimrc000066400000000000000000000001561354153536500143670ustar00rootroot00000000000000map \r :w:!bake install map \f :w:!bake map \v :w:!bake mlr set tw=120 set ts=4 miller-5.6.2/c/Makefile.am000066400000000000000000000035711354153536500153060ustar00rootroot00000000000000SUBDIRS= lib cli stream input dsl mapping containers output parsing auxents experimental . unit_test reg_test AM_CPPFLAGS= -I${srcdir} AM_CFLAGS= -Wall -std=gnu99 bin_PROGRAMS= mlr noinst_PROGRAMS= mlrg \ mlrp mlr_SOURCES= mlrmain.c mlr_LDFLAGS= -static mlr_LDADD= \ cli/libcli.la \ containers/libcontainers.la \ stream/libstream.la \ input/libinput.la \ dsl/libdsl.la \ mapping/libmapping.la \ output/liboutput.la \ lib/libmlr.la \ parsing/libdsl.la \ auxents/libauxents.la \ -lm # Resulting link line: # /bin/sh ../libtool --tag=CC --mode=link # gcc # -Wall -std=gnu99 # -g -O2 # <<>> <------------------------------------- # -o mlr # mlrmain.o # cli/libcli.la # containers/libcontainers.la # stream/libstream.la # input/libinput.la # dsl/libdsl.la # mapping/libmapping.la # output/liboutput.la # lib/libmlr.la # parsing/libdsl.la # auxents/libauxents.la # <<>> <------------------------------------- # Other executable variants # Debug version: mlrg_CFLAGS= -g ${AM_CFLAGS} mlrg_LDFLAGS= ${mlr_LDFLAGS} mlrg_LDADD= ${mlr_LDADD} mlrg_SOURCES= ${mlr_SOURCES} # Profile version. Usage: # * make mlrp # * mlrp {arguments> # * gprof mlrp gmon.out > myfile.txt # Note: works on Linux; not on OSX. On FreeBSD it sounds like it'll need an # extra -lc on the link line. mlrp_CFLAGS= -g -pg ${AM_CFLAGS} mlrp_LDFLAGS= ${mlr_LDFLAGS} mlrp_LDADD= ${mlr_LDADD} mlrp_SOURCES= ${mlr_SOURCES} # ================================================================ # Run this after unit-test expected output has changed, and is verified to be # OK. (Example: after adding new test cases in test/run.) regtest-copy: cp output/out reg_test/expected # ================================================================ perfclean profclean: @rm -vf gmon.out perf.data perf.data.old miller-5.6.2/c/Makefile.in000066400000000000000000000743521354153536500153240ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = mlr$(EXEEXT) noinst_PROGRAMS = mlrg$(EXEEXT) mlrp$(EXEEXT) subdir = c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_mlr_OBJECTS = mlrmain.$(OBJEXT) mlr_OBJECTS = $(am_mlr_OBJECTS) mlr_DEPENDENCIES = cli/libcli.la containers/libcontainers.la \ stream/libstream.la input/libinput.la dsl/libdsl.la \ mapping/libmapping.la output/liboutput.la lib/libmlr.la \ parsing/libdsl.la auxents/libauxents.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = mlr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(mlr_LDFLAGS) $(LDFLAGS) -o $@ am__objects_1 = mlrg-mlrmain.$(OBJEXT) am_mlrg_OBJECTS = $(am__objects_1) mlrg_OBJECTS = $(am_mlrg_OBJECTS) am__DEPENDENCIES_1 = cli/libcli.la containers/libcontainers.la \ stream/libstream.la input/libinput.la dsl/libdsl.la \ mapping/libmapping.la output/liboutput.la lib/libmlr.la \ parsing/libdsl.la auxents/libauxents.la mlrg_DEPENDENCIES = $(am__DEPENDENCIES_1) mlrg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mlrg_CFLAGS) $(CFLAGS) \ $(mlrg_LDFLAGS) $(LDFLAGS) -o $@ am__objects_2 = mlrp-mlrmain.$(OBJEXT) am_mlrp_OBJECTS = $(am__objects_2) mlrp_OBJECTS = $(am_mlrp_OBJECTS) mlrp_DEPENDENCIES = $(am__DEPENDENCIES_1) mlrp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mlrp_CFLAGS) $(CFLAGS) \ $(mlrp_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(mlr_SOURCES) $(mlrg_SOURCES) $(mlrp_SOURCES) DIST_SOURCES = $(mlr_SOURCES) $(mlrg_SOURCES) $(mlrp_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = lib cli stream input dsl mapping containers output parsing auxents experimental . unit_test reg_test AM_CPPFLAGS = -I${srcdir} AM_CFLAGS = -Wall -std=gnu99 mlr_SOURCES = mlrmain.c mlr_LDFLAGS = -static mlr_LDADD = \ cli/libcli.la \ containers/libcontainers.la \ stream/libstream.la \ input/libinput.la \ dsl/libdsl.la \ mapping/libmapping.la \ output/liboutput.la \ lib/libmlr.la \ parsing/libdsl.la \ auxents/libauxents.la \ -lm # Resulting link line: # /bin/sh ../libtool --tag=CC --mode=link # gcc # -Wall -std=gnu99 # -g -O2 # <<>> <------------------------------------- # -o mlr # mlrmain.o # cli/libcli.la # containers/libcontainers.la # stream/libstream.la # input/libinput.la # dsl/libdsl.la # mapping/libmapping.la # output/liboutput.la # lib/libmlr.la # parsing/libdsl.la # auxents/libauxents.la # <<>> <------------------------------------- # Other executable variants # Debug version: mlrg_CFLAGS = -g ${AM_CFLAGS} mlrg_LDFLAGS = ${mlr_LDFLAGS} mlrg_LDADD = ${mlr_LDADD} mlrg_SOURCES = ${mlr_SOURCES} # Profile version. Usage: # * make mlrp # * mlrp {arguments> # * gprof mlrp gmon.out > myfile.txt # Note: works on Linux; not on OSX. On FreeBSD it sounds like it'll need an # extra -lc on the link line. mlrp_CFLAGS = -g -pg ${AM_CFLAGS} mlrp_LDFLAGS = ${mlr_LDFLAGS} mlrp_LDADD = ${mlr_LDADD} mlrp_SOURCES = ${mlr_SOURCES} all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mlr$(EXEEXT): $(mlr_OBJECTS) $(mlr_DEPENDENCIES) $(EXTRA_mlr_DEPENDENCIES) @rm -f mlr$(EXEEXT) $(AM_V_CCLD)$(mlr_LINK) $(mlr_OBJECTS) $(mlr_LDADD) $(LIBS) mlrg$(EXEEXT): $(mlrg_OBJECTS) $(mlrg_DEPENDENCIES) $(EXTRA_mlrg_DEPENDENCIES) @rm -f mlrg$(EXEEXT) $(AM_V_CCLD)$(mlrg_LINK) $(mlrg_OBJECTS) $(mlrg_LDADD) $(LIBS) mlrp$(EXEEXT): $(mlrp_OBJECTS) $(mlrp_DEPENDENCIES) $(EXTRA_mlrp_DEPENDENCIES) @rm -f mlrp$(EXEEXT) $(AM_V_CCLD)$(mlrp_LINK) $(mlrp_OBJECTS) $(mlrp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrg-mlrmain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrmain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrp-mlrmain.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mlrg-mlrmain.o: mlrmain.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrg_CFLAGS) $(CFLAGS) -MT mlrg-mlrmain.o -MD -MP -MF $(DEPDIR)/mlrg-mlrmain.Tpo -c -o mlrg-mlrmain.o `test -f 'mlrmain.c' || echo '$(srcdir)/'`mlrmain.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mlrg-mlrmain.Tpo $(DEPDIR)/mlrg-mlrmain.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlrmain.c' object='mlrg-mlrmain.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrg_CFLAGS) $(CFLAGS) -c -o mlrg-mlrmain.o `test -f 'mlrmain.c' || echo '$(srcdir)/'`mlrmain.c mlrg-mlrmain.obj: mlrmain.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrg_CFLAGS) $(CFLAGS) -MT mlrg-mlrmain.obj -MD -MP -MF $(DEPDIR)/mlrg-mlrmain.Tpo -c -o mlrg-mlrmain.obj `if test -f 'mlrmain.c'; then $(CYGPATH_W) 'mlrmain.c'; else $(CYGPATH_W) '$(srcdir)/mlrmain.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mlrg-mlrmain.Tpo $(DEPDIR)/mlrg-mlrmain.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlrmain.c' object='mlrg-mlrmain.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrg_CFLAGS) $(CFLAGS) -c -o mlrg-mlrmain.obj `if test -f 'mlrmain.c'; then $(CYGPATH_W) 'mlrmain.c'; else $(CYGPATH_W) '$(srcdir)/mlrmain.c'; fi` mlrp-mlrmain.o: mlrmain.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrp_CFLAGS) $(CFLAGS) -MT mlrp-mlrmain.o -MD -MP -MF $(DEPDIR)/mlrp-mlrmain.Tpo -c -o mlrp-mlrmain.o `test -f 'mlrmain.c' || echo '$(srcdir)/'`mlrmain.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mlrp-mlrmain.Tpo $(DEPDIR)/mlrp-mlrmain.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlrmain.c' object='mlrp-mlrmain.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrp_CFLAGS) $(CFLAGS) -c -o mlrp-mlrmain.o `test -f 'mlrmain.c' || echo '$(srcdir)/'`mlrmain.c mlrp-mlrmain.obj: mlrmain.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrp_CFLAGS) $(CFLAGS) -MT mlrp-mlrmain.obj -MD -MP -MF $(DEPDIR)/mlrp-mlrmain.Tpo -c -o mlrp-mlrmain.obj `if test -f 'mlrmain.c'; then $(CYGPATH_W) 'mlrmain.c'; else $(CYGPATH_W) '$(srcdir)/mlrmain.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mlrp-mlrmain.Tpo $(DEPDIR)/mlrp-mlrmain.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlrmain.c' object='mlrp-mlrmain.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrp_CFLAGS) $(CFLAGS) -c -o mlrp-mlrmain.obj `if test -f 'mlrmain.c'; then $(CYGPATH_W) 'mlrmain.c'; else $(CYGPATH_W) '$(srcdir)/mlrmain.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # ================================================================ # Run this after unit-test expected output has changed, and is verified to be # OK. (Example: after adding new test cases in test/run.) regtest-copy: cp output/out reg_test/expected # ================================================================ perfclean profclean: @rm -vf gmon.out perf.data perf.data.old # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/Makefile.no-autoconfig000066400000000000000000000361521354153536500174620ustar00rootroot00000000000000# ================================================================ # NOTE: This makefile is not intended to be used in a packaging system -- # rather, Miller uses autconfig for that. This makefile is intended for users # who prefer (for whatever reason) to bypass autoconfig. Please also see # http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig # ================================================================ # ================================================================ # Travis does "export CC=gcc", "export CC=clang" so we can pick those up via # "make -e" in ../.travis.yml. Note that "CC?=gcc", without make -e, results # in CC being expanded to cc on my OSX laptop, which is not OK. Hence make -e. CC=gcc CFLAGS=-std=gnu99 IFLAGS=-I. -I.. WFLAGS=-Wall -Werror # Worth exploring ... but needs handling for unused parameters in functions which comply with interfaces. # Best option I'm aware of is to replace "void foo(int bar) {...}" with "void foo(int) {...}" throughout. # WFLAGS=-Wall -Wextra -Werror # WFLAGS=-Wall -Wextra -pedantic-errors -Werror # WFLAGS=-Wall -Wextra -pedantic-errors -Werror=unused-variable LFLAGS=-lm # You can do make -e INSTALLDIR=/path/to/somewhere/else/bin INSTALLDIR=/usr/local/bin CCOPT=$(CC) $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3 CCDEBUG=$(CC) -g $(CFLAGS) $(IFLAGS) $(WFLAGS) CCASAN=clang -fsanitize=address -g $(CFLAGS) $(IFLAGS) $(WFLAGS) # clang ASAN. Use -O1 for debug mode to (among other things) disable inlining. #CCOPT=clang -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) #CCDEBUG=clang -g -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) # ---------------------------------------------------------------- # Miller source except DSL NON_DSL_SRCS = \ *.c \ cli/*.c \ lib/*.c \ containers/*.c \ auxents/*.c \ stream/*.c \ input/*.c \ dsl/*.c \ mapping/*.c \ output/*.c # DSL DSL_OBJS = \ ./parsing/mlr_dsl_parse.o \ ./parsing/mlr_dsl_lexer.o \ ./parsing/mlr_dsl_wrapper.o # Unit-test code TEST_ARGPARSE_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_builder.c \ cli/argparse.c \ containers/slls.c \ containers/sllv.c \ lib/string_array.c \ unit_test/test_argparse.c TEST_BYTE_READERS_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrescape.c \ lib/mlr_test_util.c \ lib/mlr_globals.c \ lib/string_builder.c \ input/string_byte_reader.c \ input/stdio_byte_reader.c \ input/mmap_byte_reader.c \ unit_test/test_byte_readers.c TEST_LINE_READERS_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrescape.c \ lib/context.c \ lib/mlr_test_util.c \ lib/mlr_globals.c \ lib/string_builder.c \ input/line_readers.c \ unit_test/test_line_readers.c TEST_PEEK_FILE_READER_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlr_test_util.c \ lib/mlr_globals.c \ lib/string_builder.c \ input/string_byte_reader.c \ input/peek_file_reader.c \ unit_test/test_peek_file_reader.c TEST_LREC_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/context.c \ lib/mlrdatetime.c \ lib/mlrescape.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_builder.c \ lib/string_array.c \ lib/mlrval.c \ lib/mvfuncs.c \ containers/hss.c \ containers/lrec.c \ containers/header_keeper.c \ containers/sllv.c \ containers/slls.c \ containers/rslls.c \ containers/lhmsv.c \ containers/lhmslv.c \ containers/sllmv.c \ containers/mlhmmv.c \ input/line_readers.c \ input/file_reader_mmap.c \ input/file_reader_stdio.c \ input/file_ingestor_stdio.c \ input/lrec_reader_mmap_csvlite.c \ input/lrec_reader_stdio_csvlite.c \ input/lrec_reader_mmap_dkvp.c \ input/lrec_reader_stdio_dkvp.c \ input/lrec_reader_mmap_nidx.c \ input/lrec_reader_stdio_nidx.c \ input/lrec_reader_mmap_xtab.c \ input/lrec_reader_stdio_xtab.c \ input/lrec_reader_mmap_json.c \ input/lrec_reader_stdio_json.c \ input/mlr_json_adapter.c \ input/json_parser.c \ unit_test/test_lrec.c TEST_MULTIPLE_CONTAINERS_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/context.c \ lib/mlrdatetime.c \ lib/mlrescape.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_builder.c \ containers/lrec.c \ containers/header_keeper.c \ containers/sllv.c \ containers/slls.c \ containers/rslls.c \ lib/string_array.c \ containers/hss.c \ lib/mlrval.c \ lib/mvfuncs.c \ containers/lhmsi.c \ containers/lhmsll.c \ containers/lhmss.c \ containers/lhmsv.c \ containers/lhms2v.c \ containers/lhmslv.c \ containers/lhmsmv.c \ containers/loop_stack.c \ containers/percentile_keeper.c \ containers/top_keeper.c \ containers/dheap.c \ input/line_readers.c \ input/file_reader_mmap.c \ input/file_reader_stdio.c \ input/file_ingestor_stdio.c \ input/lrec_reader_mmap_csvlite.c \ input/lrec_reader_stdio_csvlite.c \ input/lrec_reader_mmap_dkvp.c \ input/lrec_reader_stdio_dkvp.c \ input/lrec_reader_mmap_nidx.c \ input/lrec_reader_stdio_nidx.c \ input/lrec_reader_mmap_xtab.c \ input/lrec_reader_stdio_xtab.c \ input/lrec_reader_mmap_json.c \ input/lrec_reader_stdio_json.c \ input/mlr_json_adapter.c \ input/json_parser.c \ unit_test/test_multiple_containers.c TEST_MLHMMV_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrdatetime.c \ lib/string_builder.c \ lib/string_array.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/mlrval.c \ lib/mvfuncs.c \ containers/hss.c \ containers/mlhmmv.c \ containers/sllmv.c \ containers/sllv.c \ containers/slls.c \ containers/lrec.c \ unit_test/test_mlhmmv.c TEST_MLRUTIL_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/string_builder.c \ unit_test/test_mlrutil.c TEST_MLRREGEX_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrregex.c \ lib/string_builder.c \ lib/string_array.c \ unit_test/test_mlrregex.c TEST_STRING_BUILDER_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlr_globals.c \ lib/string_builder.c \ unit_test/test_string_builder.c TEST_PARSE_TRIE_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlr_globals.c \ lib/string_builder.c \ containers/parse_trie.c \ unit_test/test_parse_trie.c TEST_RVAL_EVALUATORS_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrdatetime.c \ lib/mlrregex.c \ lib/mlrmath.c \ lib/string_builder.c \ lib/string_array.c \ lib/mlrval.c \ lib/mvfuncs.c \ containers/xvfuncs.c \ containers/sllv.c \ containers/slls.c \ containers/sllmv.c \ containers/lrec.c \ containers/lhmsv.c \ containers/lhmsi.c \ containers/lhmsll.c \ containers/mlhmmv.c \ containers/lhmsmv.c \ containers/lhmss.c \ containers/hss.c \ containers/mixutil.c \ containers/loop_stack.c \ containers/local_stack.c \ containers/type_decl.c \ dsl/mlr_dsl_ast.c \ dsl/function_manager.c \ dsl/keylist_evaluators.c \ dsl/rval_expr_evaluators.c \ dsl/rxval_expr_evaluators.c \ dsl/rval_func_evaluators.c \ dsl/rxval_func_evaluators.c \ dsl/rval_list_evaluators.c \ dsl/mlr_dsl_stack_allocate.c \ dsl/mlr_dsl_blocked_ast.c \ dsl/mlr_dsl_cst.c \ dsl/mlr_dsl_cst_condish_statements.c \ dsl/mlr_dsl_cst_for_map_statements.c \ dsl/mlr_dsl_cst_for_srec_statements.c \ dsl/mlr_dsl_cst_func_subr.c \ dsl/mlr_dsl_cst_keywords.c \ dsl/mlr_dsl_cst_loop_control_statements.c \ dsl/mlr_dsl_cst_map_assignment_statements.c \ dsl/mlr_dsl_cst_output_statements.c \ dsl/mlr_dsl_cst_return_statements.c \ dsl/mlr_dsl_cst_scalar_assignment_statements.c \ dsl/mlr_dsl_cst_statements.c \ dsl/mlr_dsl_cst_triple_for_statements.c \ dsl/mlr_dsl_cst_unset_statements.c \ output/lrec_writer_csv.c \ output/lrec_writer_csvlite.c \ output/lrec_writer_dkvp.c \ output/lrec_writer_json.c \ output/lrec_writer_markdown.c \ output/lrec_writer_nidx.c \ output/lrec_writer_pprint.c \ output/lrec_writer_xtab.c \ output/lrec_writers.c \ output/multi_lrec_writer.c \ output/multi_out.c \ unit_test/test_rval_evaluators.c TEST_JOIN_BUCKET_KEEPER_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/mlrescape.c \ lib/mlr_globals.c \ lib/string_builder.c \ lib/mlrregex.c \ lib/context.c \ lib/string_array.c \ containers/parse_trie.c \ containers/lrec.c \ containers/sllv.c \ containers/rslls.c \ containers/slls.c \ containers/lhmslv.c \ containers/lhmss.c \ containers/hss.c \ containers/mixutil.c \ containers/header_keeper.c \ containers/join_bucket_keeper.c \ input/mmap_byte_reader.c \ input/stdio_byte_reader.c \ input/line_readers.c \ input/lrec_reader_gen.c \ input/lrec_reader_in_memory.c \ input/lrec_readers.c \ input/lrec_reader_mmap_csv.c \ input/lrec_reader_stdio_csv.c \ input/lrec_reader_mmap_csvlite.c \ input/lrec_reader_stdio_csvlite.c \ input/lrec_reader_mmap_dkvp.c \ input/lrec_reader_stdio_dkvp.c \ input/lrec_reader_mmap_nidx.c \ input/lrec_reader_stdio_nidx.c \ input/lrec_reader_mmap_xtab.c \ input/lrec_reader_stdio_xtab.c \ input/lrec_reader_mmap_json.c \ input/lrec_reader_stdio_json.c \ input/mlr_json_adapter.c \ input/json_parser.c \ input/file_reader_mmap.c \ input/file_reader_stdio.c \ input/file_ingestor_stdio.c \ input/peek_file_reader.c \ unit_test/test_join_bucket_keeper.c EXPERIMENTAL_READER_SRCS = \ lib/mlrutil.c \ lib/mlrdatetime.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ lib/context.c \ lib/mlrescape.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_array.c \ lib/string_builder.c \ input/stdio_byte_reader.c \ input/file_reader_mmap.c \ input/line_readers.c \ containers/parse_trie.c \ experimental/getlines.c EXPERIMENTAL_JSON_VG_MEM_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/nlnet_timegm.c \ lib/netbsd_strptime.c \ lib/mtrand.c \ input/json_parser.c \ experimental/json_vg_mem.c # ================================================================ # User-make: creates the executable and runs unit & regression tests # This is the default target for anyone pulling the repo and trying to # build it to be able to use it. It just needs flex and the C compiler. #top: mlr tests # xxx temp: top: mlr mlrg tests install: mlr tests mkdir -p $(INSTALLDIR) cp mlr $(INSTALLDIR) installhome: mlr tests mkdir -p $(HOME)/bin cp mlr $(HOME)/bin # ================================================================ tags: .always ctags -R . mlr: .always parsing $(CCOPT) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr # On x86_64/Centos I had to first do # sudo yum install glibc-devel glibc-static mlr.static: .always parsing $(CCOPT) -static $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr.static parsing: .always make -C parsing -f Makefile.no-autoconfig mlr_dsl_parse.o make -C parsing -f Makefile.no-autoconfig mlr_dsl_lexer.o make -C parsing -f Makefile.no-autoconfig mlr_dsl_wrapper.o two: mlr mlrg # ---------------------------------------------------------------- # Other executable variants # Debug version mlrg: .always parsing $(CCDEBUG) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrg # Debug version with local-stack verbosity mlrt: .always parsing $(CCDEBUG) -DLOCAL_STACK_TRACE_ENABLE -DLOCAL_STACK_BOUNDS_CHECK_ENABLE \ $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrt # Profile version. Usage: # * make mlrp # * mlrp {arguments> # * gprof mlrp gmon.out > myfile.txt # Note: works on Linux; not on OSX. mlrp: .always parsing $(CCDEBUG) -g -pg $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrp # ASAN version mlra: .always parsing $(CCASAN) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlra # ================================================================ tests: unit-test reg-test unit-test: test-mlrutil test-mlrregex test-argparse test-line-readers test-byte-readers test-peek-file-reader test-parse-trie test-lrec test-multiple-containers test-mlhmmv test-string-builder test-rval-evaluators test-join-bucket-keeper ./test-mlrutil ./test-mlrregex ./test-argparse ./test-line-readers ./test-byte-readers ./test-peek-file-reader ./test-parse-trie ./test-lrec ./test-multiple-containers ./test-mlhmmv ./test-string-builder ./test-rval-evaluators ./test-join-bucket-keeper @echo @echo DONE reg-test: ./reg_test/run ./reg_test/run --no-mmap # ---------------------------------------------------------------- # Run this after unit-test expected output has changed, and is verified to be # OK. (Example: after adding new test cases in test/run.) regtest-copy taters: cp output-regtest/out reg_test/expected regtest-copy-dev: cp output-regtest/out-dev reg_test/expected # ---------------------------------------------------------------- # Unit-test executables test-argparse: .always $(CCDEBUG) $(TEST_ARGPARSE_SRCS) $(LFLAGS) -o test-argparse test-byte-readers: .always $(CCDEBUG) $(TEST_BYTE_READERS_SRCS) $(LFLAGS) -o test-byte-readers test-line-readers: .always $(CCDEBUG) $(TEST_LINE_READERS_SRCS) $(LFLAGS) -o test-line-readers test-peek-file-reader: .always $(CCDEBUG) $(TEST_PEEK_FILE_READER_SRCS) $(LFLAGS) -o test-peek-file-reader test-lrec: .always $(CCDEBUG) $(TEST_LREC_SRCS) $(LFLAGS) -o test-lrec -lm test-multiple-containers: .always $(CCDEBUG) $(TEST_MULTIPLE_CONTAINERS_SRCS) $(LFLAGS) -o test-multiple-containers -lm test-mlhmmv: .always $(CCDEBUG) $(TEST_MLHMMV_SRCS) $(LFLAGS) -o test-mlhmmv -lm test-mlrutil: .always $(CCDEBUG) $(TEST_MLRUTIL_SRCS) $(LFLAGS) -o test-mlrutil -lm test-mlrregex: .always $(CCDEBUG) $(TEST_MLRREGEX_SRCS) $(LFLAGS) -o test-mlrregex test-string-builder: .always $(CCDEBUG) $(TEST_STRING_BUILDER_SRCS) $(LFLAGS) -o test-string-builder test-parse-trie: .always $(CCDEBUG) $(TEST_PARSE_TRIE_SRCS) $(LFLAGS) -o test-parse-trie test-rval-evaluators: .always $(CCDEBUG) $(TEST_RVAL_EVALUATORS_SRCS) $(LFLAGS) -o test-rval-evaluators -lm test-join-bucket-keeper: .always $(CCDEBUG) $(TEST_JOIN_BUCKET_KEEPER_SRCS) $(LFLAGS) -o test-join-bucket-keeper -lm # ---------------------------------------------------------------- # Standalone mains getl: .always $(CCOPT) $(EXPERIMENTAL_READER_SRCS) $(LFLAGS) -o getl json-vg-mem: .always $(CCDEBUG) $(EXPERIMENTAL_JSON_VG_MEM_SRCS) $(LFLAGS) -o json-vg-mem # ================================================================ # BSD can't handle rm -v, alas clean: @rm -f mlr mlrd mlrg mlrp tester @make -C parsing -f Makefile.no-autoconfig clean perfclean profclean: @rm -f gmon.out perf.data perf.data.old .always: @true miller-5.6.2/c/Makefile.windows000066400000000000000000000340751354153536500164060ustar00rootroot00000000000000# ================================================================ # NOTE: This makefile is not intended to be used in a packaging system -- # rather, Miller uses autconfig for that. This makefile is intended for users # who prefer (for whatever reason) to bypass autoconfig. Please also see # http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig # ================================================================ # ================================================================ # Travis does "export CC=gcc", "export CC=clang" so we can pick those up via # "make -e" in ../.travis.yml. Note that "CC?=gcc", without make -e, results # in CC being expanded to cc on my OSX laptop, which is not OK. Hence make -e. CC=gcc CFLAGS=-std=gnu99 IFLAGS=-I. -I.. WFLAGS=-Wall # Worth exploring ... but needs handling for unused parameters in functions which comply with interfaces. # Best option I'm aware of is to replace "void foo(int bar) {...}" with "void foo(int) {...}" throughout. # WFLAGS=-Wall -Wextra -Werror # WFLAGS=-Wall -Wextra -pedantic-errors -Werror # WFLAGS=-Wall -Wextra -pedantic-errors -Werror=unused-variable LFLAGS=-lm -lpcreposix # You can do make -e INSTALLDIR=/path/to/somewhere/else/bin INSTALLDIR=/usr/local/bin CCOPT=$(CC) $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3 CCDEBUG=$(CC) -g $(CFLAGS) $(IFLAGS) $(WFLAGS) # clang ASAN. Use -O1 for debug mode to (among other things) disable inlining. #CCOPT=clang -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) #CCDEBUG=clang -g -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) # ---------------------------------------------------------------- # Miller source except DSL NON_DSL_SRCS = \ *.c \ cli/*.c \ lib/*.c \ containers/*.c \ aux/*.c \ stream/*.c \ input/*.c \ dsl/*.c \ mapping/*.c \ output/*.c # DSL DSL_OBJS = \ ./parsing/mlr_dsl_parse.o \ ./parsing/mlr_dsl_lexer.o \ ./parsing/mlr_dsl_wrapper.o # Unit-test code TEST_ARGPARSE_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_builder.c \ cli/argparse.c \ containers/slls.c \ containers/sllv.c \ lib/string_array.c \ unit_test/test_argparse.c TEST_BYTE_READERS_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrescape.c \ lib/mlr_test_util.c \ lib/mlr_globals.c \ lib/string_builder.c \ input/string_byte_reader.c \ input/stdio_byte_reader.c \ input/mmap_byte_reader.c \ unit_test/test_byte_readers.c TEST_LINE_READERS_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrescape.c \ lib/context.c \ lib/mlr_test_util.c \ lib/mlr_globals.c \ lib/string_builder.c \ input/line_readers.c \ unit_test/test_line_readers.c TEST_PEEK_FILE_READER_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlr_test_util.c \ lib/mlr_globals.c \ lib/string_builder.c \ input/string_byte_reader.c \ input/peek_file_reader.c \ unit_test/test_peek_file_reader.c TEST_LREC_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/context.c \ lib/mlrdatetime.c \ lib/mlrescape.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_builder.c \ lib/string_array.c \ containers/mlrval.c \ containers/mvfuncs.c \ containers/lrec.c \ containers/header_keeper.c \ containers/sllv.c \ containers/slls.c \ containers/rslls.c \ containers/lhmsv.c \ containers/lhmslv.c \ containers/sllmv.c \ containers/mlhmmv.c \ input/line_readers.c \ input/file_reader_mmap.c \ input/file_reader_stdio.c \ input/file_ingestor_stdio.c \ input/lrec_reader_mmap_csvlite.c \ input/lrec_reader_stdio_csvlite.c \ input/lrec_reader_mmap_dkvp.c \ input/lrec_reader_stdio_dkvp.c \ input/lrec_reader_mmap_nidx.c \ input/lrec_reader_stdio_nidx.c \ input/lrec_reader_mmap_xtab.c \ input/lrec_reader_stdio_xtab.c \ input/lrec_reader_mmap_json.c \ input/lrec_reader_stdio_json.c \ input/mlr_json_adapter.c \ input/json_parser.c \ unit_test/test_lrec.c TEST_MULTIPLE_CONTAINERS_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/context.c \ lib/mlrdatetime.c \ lib/mlrescape.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_builder.c \ containers/lrec.c \ containers/header_keeper.c \ containers/sllv.c \ containers/slls.c \ containers/rslls.c \ lib/string_array.c \ containers/hss.c \ containers/mlrval.c \ containers/mvfuncs.c \ containers/lhmsi.c \ containers/lhmsll.c \ containers/lhmss.c \ containers/lhmsv.c \ containers/lhms2v.c \ containers/lhmslv.c \ containers/lhmsmv.c \ containers/loop_stack.c \ containers/percentile_keeper.c \ containers/top_keeper.c \ containers/dheap.c \ input/line_readers.c \ input/file_reader_mmap.c \ input/file_reader_stdio.c \ input/file_ingestor_stdio.c \ input/lrec_reader_mmap_csvlite.c \ input/lrec_reader_stdio_csvlite.c \ input/lrec_reader_mmap_dkvp.c \ input/lrec_reader_stdio_dkvp.c \ input/lrec_reader_mmap_nidx.c \ input/lrec_reader_stdio_nidx.c \ input/lrec_reader_mmap_xtab.c \ input/lrec_reader_stdio_xtab.c \ input/lrec_reader_mmap_json.c \ input/lrec_reader_stdio_json.c \ input/mlr_json_adapter.c \ input/json_parser.c \ unit_test/test_multiple_containers.c TEST_MLHMMV_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrdatetime.c \ lib/string_builder.c \ lib/string_array.c \ lib/mlrregex.c \ lib/mlr_globals.c \ containers/mlrval.c \ containers/mvfuncs.c \ containers/mlhmmv.c \ containers/sllmv.c \ containers/sllv.c \ containers/slls.c \ containers/lrec.c \ unit_test/test_mlhmmv.c TEST_MLRUTIL_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/string_builder.c \ unit_test/test_mlrutil.c TEST_MLRREGEX_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrregex.c \ lib/string_builder.c \ lib/string_array.c \ unit_test/test_mlrregex.c TEST_STRING_BUILDER_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlr_globals.c \ lib/string_builder.c \ unit_test/test_string_builder.c TEST_PARSE_TRIE_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlr_globals.c \ lib/string_builder.c \ containers/parse_trie.c \ unit_test/test_parse_trie.c TEST_RVAL_EVALUATORS_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrdatetime.c \ lib/mlrregex.c \ lib/mlrmath.c \ lib/string_builder.c \ lib/string_array.c \ containers/mlrval.c \ containers/mvfuncs.c \ containers/xvfuncs.c \ containers/sllv.c \ containers/slls.c \ containers/sllmv.c \ containers/lrec.c \ containers/lhmsv.c \ containers/lhmsi.c \ containers/lhmsll.c \ containers/mlhmmv.c \ containers/lhmsmv.c \ containers/hss.c \ containers/mixutil.c \ containers/loop_stack.c \ containers/local_stack.c \ containers/type_decl.c \ dsl/mlr_dsl_ast.c \ dsl/function_manager.c \ dsl/keylist_evaluators.c \ dsl/rval_expr_evaluators.c \ dsl/rxval_expr_evaluators.c \ dsl/rval_func_evaluators.c \ dsl/rxval_func_evaluators.c \ dsl/rval_list_evaluators.c \ dsl/mlr_dsl_stack_allocate.c \ dsl/mlr_dsl_blocked_ast.c \ dsl/mlr_dsl_cst.c \ dsl/mlr_dsl_cst_condish_statements.c \ dsl/mlr_dsl_cst_for_map_statements.c \ dsl/mlr_dsl_cst_for_srec_statements.c \ dsl/mlr_dsl_cst_func_subr.c \ dsl/mlr_dsl_cst_keywords.c \ dsl/mlr_dsl_cst_loop_control_statements.c \ dsl/mlr_dsl_cst_map_assignment_statements.c \ dsl/mlr_dsl_cst_output_statements.c \ dsl/mlr_dsl_cst_return_statements.c \ dsl/mlr_dsl_cst_scalar_assignment_statements.c \ dsl/mlr_dsl_cst_statements.c \ dsl/mlr_dsl_cst_triple_for_statements.c \ dsl/mlr_dsl_cst_unset_statements.c \ output/lrec_writer_csv.c \ output/lrec_writer_csvlite.c \ output/lrec_writer_dkvp.c \ output/lrec_writer_json.c \ output/lrec_writer_markdown.c \ output/lrec_writer_nidx.c \ output/lrec_writer_pprint.c \ output/lrec_writer_xtab.c \ output/lrec_writers.c \ output/multi_lrec_writer.c \ output/multi_out.c \ unit_test/test_rval_evaluators.c TEST_JOIN_BUCKET_KEEPER_SRCS = \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/mlrescape.c \ lib/mlr_globals.c \ lib/string_builder.c \ lib/context.c \ containers/parse_trie.c \ containers/lrec.c \ containers/sllv.c \ containers/rslls.c \ containers/slls.c \ containers/lhmslv.c \ containers/hss.c \ containers/mixutil.c \ containers/header_keeper.c \ containers/join_bucket_keeper.c \ input/mmap_byte_reader.c \ input/stdio_byte_reader.c \ input/line_readers.c \ input/lrec_reader_in_memory.c \ input/lrec_readers.c \ input/lrec_reader_mmap_csv.c \ input/lrec_reader_stdio_csv.c \ input/lrec_reader_mmap_csvlite.c \ input/lrec_reader_stdio_csvlite.c \ input/lrec_reader_mmap_dkvp.c \ input/lrec_reader_stdio_dkvp.c \ input/lrec_reader_mmap_nidx.c \ input/lrec_reader_stdio_nidx.c \ input/lrec_reader_mmap_xtab.c \ input/lrec_reader_stdio_xtab.c \ input/lrec_reader_mmap_json.c \ input/lrec_reader_stdio_json.c \ input/mlr_json_adapter.c \ input/json_parser.c \ input/file_reader_mmap.c \ input/file_reader_stdio.c \ input/file_ingestor_stdio.c \ input/peek_file_reader.c \ unit_test/test_join_bucket_keeper.c EXPERIMENTAL_READER_SRCS = \ lib/mlrutil.c \ lib/mlrdatetime.c \ lib/mlr_arch.c \ lib/mtrand.c \ lib/context.c \ lib/mlrescape.c \ lib/mlrregex.c \ lib/mlr_globals.c \ lib/string_array.c \ lib/string_builder.c \ input/stdio_byte_reader.c \ input/file_reader_mmap.c \ input/line_readers.c \ containers/parse_trie.c \ experimental/getlines.c EXPERIMENTAL_JSON_VG_MEM_SRCS = \ lib/mlr_globals.c \ lib/mlrutil.c \ lib/mlr_arch.c \ lib/mtrand.c \ input/json_parser.c \ experimental/json_vg_mem.c # ================================================================ # User-make: creates the executable and runs unit & regression tests # This is the default target for anyone pulling the repo and trying to # build it to be able to use it. It just needs flex and the C compiler. #top: mlr tests # xxx temp: top: mlr mlrg tests install: mlr tests cp mlr $(INSTALLDIR) installhome: mlr tests cp mlr $(HOME)/bin # ================================================================ tags: .always ctags -R . mlr: .always parsing $(CCOPT) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr # On x86_64/Centos I had to first do # sudo yum install glibc-devel glibc-static mlr.static: .always parsing $(CCOPT) -static $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr.static parsing: .always make -C parsing -f Makefile.no-autoconfig mlr_dsl_parse.o make -C parsing -f Makefile.no-autoconfig mlr_dsl_lexer.o make -C parsing -f Makefile.no-autoconfig mlr_dsl_wrapper.o two: mlr mlrg # ---------------------------------------------------------------- # Other executable variants # Debug version mlrg: .always parsing $(CCDEBUG) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrg # Debug version with local-stack verbosity mlrt: .always parsing $(CCDEBUG) -DLOCAL_STACK_TRACE_ENABLE -DLOCAL_STACK_BOUNDS_CHECK_ENABLE \ $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrt # Profile version. Usage: # * make mlrp # * mlrp {arguments> # * gprof mlrp gmon.out > myfile.txt # Note: works on Linux; not on OSX. mlrp: .always parsing $(CCDEBUG) -g -pg $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrp # ================================================================ tests: unit-test reg-test unit-test: test-mlrutil test-mlrregex test-argparse test-line-readers test-byte-readers test-peek-file-reader test-parse-trie test-lrec test-multiple-containers test-mlhmmv test-string-builder test-rval-evaluators test-join-bucket-keeper ./test-mlrutil ./test-mlrregex ./test-argparse ./test-line-readers ./test-byte-readers ./test-peek-file-reader ./test-parse-trie ./test-lrec ./test-multiple-containers ./test-mlhmmv ./test-string-builder ./test-rval-evaluators ./test-join-bucket-keeper @echo @echo DONE reg-test: ./reg_test/run # ---------------------------------------------------------------- # Run this after unit-test expected output has changed, and is verified to be # OK. (Example: after adding new test cases in test/run.) regtest-copy taters: cp output-regtest/out reg_test/expected regtest-copy-dev: cp output-regtest/out-dev reg_test/expected # ---------------------------------------------------------------- # Unit-test executables test-argparse: .always $(CCDEBUG) $(TEST_ARGPARSE_SRCS) $(LFLAGS) -o test-argparse test-byte-readers: .always $(CCDEBUG) $(TEST_BYTE_READERS_SRCS) $(LFLAGS) -o test-byte-readers test-line-readers: .always $(CCDEBUG) $(TEST_LINE_READERS_SRCS) $(LFLAGS) -o test-line-readers test-peek-file-reader: .always $(CCDEBUG) $(TEST_PEEK_FILE_READER_SRCS) $(LFLAGS) -o test-peek-file-reader test-lrec: .always $(CCDEBUG) $(TEST_LREC_SRCS) $(LFLAGS) -o test-lrec -lm test-multiple-containers: .always $(CCDEBUG) $(TEST_MULTIPLE_CONTAINERS_SRCS) $(LFLAGS) -o test-multiple-containers -lm test-mlhmmv: .always $(CCDEBUG) $(TEST_MLHMMV_SRCS) $(LFLAGS) -o test-mlhmmv -lm test-mlrutil: .always $(CCDEBUG) $(TEST_MLRUTIL_SRCS) $(LFLAGS) -o test-mlrutil -lm test-mlrregex: .always $(CCDEBUG) $(TEST_MLRREGEX_SRCS) $(LFLAGS) -o test-mlrregex test-string-builder: .always $(CCDEBUG) $(TEST_STRING_BUILDER_SRCS) $(LFLAGS) -o test-string-builder test-parse-trie: .always $(CCDEBUG) $(TEST_PARSE_TRIE_SRCS) $(LFLAGS) -o test-parse-trie test-rval-evaluators: .always $(CCDEBUG) $(TEST_RVAL_EVALUATORS_SRCS) $(LFLAGS) -o test-rval-evaluators -lm test-join-bucket-keeper: .always $(CCDEBUG) $(TEST_JOIN_BUCKET_KEEPER_SRCS) $(LFLAGS) -o test-join-bucket-keeper -lm # ---------------------------------------------------------------- # Standalone mains getl: .always $(CCOPT) $(EXPERIMENTAL_READER_SRCS) $(LFLAGS) -o getl json-vg-mem: .always $(CCDEBUG) $(EXPERIMENTAL_JSON_VG_MEM_SRCS) $(LFLAGS) -o json-vg-mem # ================================================================ # BSD can't handle rm -v, alas clean: @rm -f mlr mlrd mlrg mlrp tester @make -C parsing -f Makefile.no-autoconfig clean perfclean profclean: @rm -f gmon.out perf.data perf.data.old .always: @true miller-5.6.2/c/README.md000066400000000000000000000113151354153536500145240ustar00rootroot00000000000000# Data flow Miller data flow is records produced by a record-reader in `input/`, followed by one or more mappers in `mapping/`, written by a record-writer in `output/`, controlled by logic in `stream/`. Argument parsing for initial stream setup is in `cli/`. # Container names The user-visible concept of *stream record* (or *srec*) is implemented in the `lrec_t` (*linked-record type*) data structure. The user-visible concept of *out-of-stream variables* is implemented using the `mlhmmv_t` (multi-level hashmap of mlrvals) structure. Source-code comments and names within the code refer to `srec`/`lrec` and `oosvar`/`mlhmmv` depending on the context. While those two data structures contain user-visible data structures, others are used in Miller's implementation: `slls` and `sllv` are singly-linked lists of string and void-star respectively; `lhmss` is a linked hashmap from string to string; `lhmsi` is a linked hashmap from string to int; and so on. # Memory management Miller is streaming and as near stateless as possible. For most Miller functions, you can ingest a 20GB file with 4GB RAM, no problem. For example, `mlr cat` of a DKVP file retains no data in memory from one line to another; `mlr cat` of a CSV file retains only the field names from the header line. The `stats1` and `stats2` commands retain only aggregation state (e.g. count and sum over specified fields needed to compute mean of specified fields). The `mlr tac` and `mlr sort` commands, obviously, need to consume and retain all input records before emitting any output records. Miller classes are in general modular, following a constructor/destructor model with minimal dependencies between classes. As a general rule, void-star payloads (`sllv`, `lhmslv`) must be freed by the callee (which has access to the data type) whereas non-void-star payloads (`slls`, `hss`) are freed by the container class. One complication is for free-flags in `lrec` and `slls`: the idea is that an entire line is mallocked and presented by the record reader; then individual fields are split out and populated into linked list or records. To reduce the amount of strduping there, free-flags are used to track which fields should be freed by the destructor and which are freed elsewhere. The `header_keeper` object is an elaboration on this theme: suppose there is a CSV file with header line `a,b,c` and data lines `1,2,3`, then `4,5,6`, then `7,8,9`. Then the keys `a`, `b`, and `c` are shared between all three records; they are retained in a single `header_keeper` object. A bigger complication to the otherwise modular nature of Miller is its *baton-passing memory-management model*. Namely, one class may be responsible for freeing memory allocated by another class. For example, using `mlr cat`: The record-reader produces records and returns pointers to them. The record-mapper is just a pass-through; it returns the record-pointers it receives. The record-writer formats the records to stdout and does not return them, so it is responsible for freeing them. Similarly, `mlr cut -x` and any other mappers which modify record objects without creating new ones. By contrast,`stats1` et al. produce their own records; they free what they do not pass on. # Null-lrec conventions Record-readers return a null lrec-pointer to signify end of input stream. Each mapper takes an lrec-pointer as input and returns a linked list of lrec-pointer. Null-lrec is input to mappers to signify end of stream: e.g. `sort` or `tac` should use this as a signal to deliver the sorted/reversed list of rows. When a mapper has no output before end of stream (e.g. `sort` or `tac` while accumulating inputs) it returns a null lrec-pointer which is treated as synonymous with returning an empty list. At end of stream, a mapper returns a linked list of records ending in a null lrec-pointer. A null lrec-pointer at end of stream is passed to lrec writers so that they may produce final output (e.g. pretty-print which produces no output until end of stream). # Performance optimizations The initial implementation of Miller used `lhmss` (insertion-ordered string-to-string hash map) for record objects. Keys and values were strduped out of file-input lines. Each of the following produced from 5 to 30 percent performance gains: * The `lrec` object is a hashless map suited to low access-to-creation ratio. See detailed comments in https://github.com/johnkerl/miller/blob/master/c/containers/lrec.h. * Free-flags as discussed above removed additional occurrences of string copies. * Using `mmap` to read files gets rid of double passes on record parsing (one to find end of line, and another to separate fields) as well as most use of `malloc`. Note however that standard input cannot be mmapped, so both record-reader options are retained. miller-5.6.2/c/asanmk000077500000000000000000000001271354153536500144440ustar00rootroot00000000000000#!/bin/bash export CC='clang -fsanitize=address' make -ef Makefile.no-autoconfig "$@" miller-5.6.2/c/auxents/000077500000000000000000000000001354153536500147335ustar00rootroot00000000000000miller-5.6.2/c/auxents/Makefile.am000066400000000000000000000002661354153536500167730ustar00rootroot00000000000000noinst_LTLIBRARIES= libauxents.la libauxents_la_SOURCES= aux_entries.c \ aux_entries.h libauxents_la_LIBADD= ../lib/libmlr.la AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/auxents/Makefile.in000066400000000000000000000424071354153536500170070ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/auxents ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libauxents_la_DEPENDENCIES = ../lib/libmlr.la am_libauxents_la_OBJECTS = aux_entries.lo libauxents_la_OBJECTS = $(am_libauxents_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libauxents_la_SOURCES) DIST_SOURCES = $(libauxents_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libauxents.la libauxents_la_SOURCES = aux_entries.c \ aux_entries.h libauxents_la_LIBADD = ../lib/libmlr.la AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/auxents/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/auxents/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libauxents.la: $(libauxents_la_OBJECTS) $(libauxents_la_DEPENDENCIES) $(EXTRA_libauxents_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libauxents_la_OBJECTS) $(libauxents_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aux_entries.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/auxents/aux_entries.c000066400000000000000000000373031354153536500174330ustar00rootroot00000000000000#include #include #include #include #include "lib/mlr_globals.h" #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/netbsd_strptime.h" #include "input/line_readers.h" // ---------------------------------------------------------------- static int aux_list_main(int argc, char** argv); static int lecat_main(int argc, char** argv); static int termcvt_main(int argc, char** argv); static int hex_main(int argc, char** argv); static int unhex_main(int argc, char** argv); static int netbsd_strptime_main(int argc, char** argv); static int lecat_stream(FILE* input_stream, int do_color); static void hex_dump_fp(FILE *in_fp, FILE *out_fp, int do_raw); static void unhex_fp(FILE *in_fp, FILE *out_fp); static void aux_list_usage(char* argv0, char* argv1, FILE* o, int exit_code); static void lecat_usage(char* argv0, char* argv1, FILE* o, int exit_code); static void termcvt_usage(char* argv0, char* argv1, FILE* o, int exit_code); static void hex_usage(char* argv0, char* argv1, FILE* o, int exit_code); static void unhex_usage(char* argv0, char* argv1, FILE* o, int exit_code); static void netbsd_strptime_usage(char* argv0, char* argv1, FILE* o, int exit_code); // ---------------------------------------------------------------- typedef int aux_main_t(int argc, char**argv); typedef void aux_usage_t( char* argv0, char* argv1, FILE* o, int exit_code); typedef struct _aux_lookup_entry_t { char* name; aux_main_t* pmain; aux_usage_t* pusage; } aux_lookup_entry_t; static aux_lookup_entry_t aux_lookup_table[] = { { "aux-list", aux_list_main, aux_list_usage }, { "lecat", lecat_main, lecat_usage }, { "termcvt", termcvt_main, termcvt_usage }, { "hex", hex_main, hex_usage }, { "unhex", unhex_main, unhex_usage }, { "netbsd-strptime", netbsd_strptime_main, netbsd_strptime_usage }, }; static int aux_lookup_table_size = sizeof(aux_lookup_table) / sizeof(aux_lookup_table[0]); // ================================================================ void do_aux_entries(int argc, char** argv) { if (argc < 2) { return; } for (int i = 0; i < aux_lookup_table_size; i++) { if (streq(argv[1], aux_lookup_table[i].name)) { exit(aux_lookup_table[i].pmain(argc, argv)); } } // else return to mlrmain for the rest of Miller. } void show_aux_entries(FILE* fp) { fprintf(fp, "Available subcommands:\n"); for (int i = 0; i < aux_lookup_table_size; i++) { fprintf(fp, " %s\n", aux_lookup_table[i].name); } fprintf(fp, "For more information, please invoke %s {subcommand} --help\n", MLR_GLOBALS.bargv0); } // ---------------------------------------------------------------- static void aux_list_usage(char* argv0, char* argv1, FILE* o, int exit_code) { fprintf(o, "Usage: %s %s [options]\n", argv0, argv1); fprintf(o, "Options:\n"); fprintf(o, "-h or --help: print this message\n"); exit(exit_code); } int aux_list_main(int argc, char** argv) { show_aux_entries(stdout); return 0; } // ---------------------------------------------------------------- static void lecat_usage(char* argv0, char* argv1, FILE* o, int exit_code) { fprintf(o, "Usage: %s %s [options] {zero or more file names}\n", argv0, argv1); fprintf(o, "Simply echoes input, but flags CR characters in red and LF characters in green.\n"); fprintf(o, "If zero file names are supplied, standard input is read.\n"); fprintf(o, "Options:\n"); fprintf(o, "--mono: don't try to colorize the output\n"); fprintf(o, "-h or --help: print this message\n"); exit(exit_code); } static int lecat_main(int argc, char** argv) { int ok = 1; int do_color = TRUE; if (argc >= 3) { if (streq(argv[2], "-h") || streq(argv[2], "--help")) { lecat_usage(argv[0], argv[1], stdout, 0); } } // 'mlr' and 'lecat' are already argv[0] and argv[1]. int argb = 2; if (argc >= 3 && argv[argb][0] == '-') { if (streq(argv[argb], "--mono")) { do_color = FALSE; argb++; } else { fprintf(stderr, "%s %s: unrecognized option \"%s\".\n", argv[0], argv[1], argv[argb]); return 1; } } if (argb == argc) { ok = ok && lecat_stream(stdin, do_color); } else { for (int argi = argb; argi < argc; argi++) { char* file_name = argv[argi]; FILE* input_stream = fopen(file_name, "r"); if (input_stream == NULL) { perror(file_name); exit(1); } ok = lecat_stream(input_stream, do_color); fclose(input_stream); } } return ok ? 0 : 1; } static int lecat_stream(FILE* input_stream, int do_color) { while (1) { int c = fgetc(input_stream); if (c == EOF) break; if (c == '\r') { if (do_color) printf("\033[31;01m"); // xterm red printf("[CR]"); if (do_color) printf("\033[0m"); } else if (c == '\n') { if (do_color) printf("\033[32;01m"); // xterm green printf("[LF]\n"); if (do_color) printf("\033[0m"); } else { putchar(c); } } return 1; } // ================================================================ static int termcvt_stream(FILE* input_stream, FILE* output_stream, char* inend, char* outend) { size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; int inend_length = strlen(inend); while (1) { char* line = mlr_alloc_read_line_multiple_delimiter(input_stream, inend, inend_length, &line_length); if (line == NULL) { break; } fputs(line, output_stream); fputs(outend, output_stream); free(line); } return 1; } // ---------------------------------------------------------------- static void termcvt_usage(char* argv0, char* argv1, FILE* o, int exit_code) { fprintf(o, "Usage: %s %s [option] {zero or more file names}\n", argv0, argv1); fprintf(o, "Option (exactly one is required):\n"); fprintf(o, "--cr2crlf\n"); fprintf(o, "--lf2crlf\n"); fprintf(o, "--crlf2cr\n"); fprintf(o, "--crlf2lf\n"); fprintf(o, "--cr2lf\n"); fprintf(o, "--lf2cr\n"); fprintf(o, "-I in-place processing (default is to write to stdout)\n"); fprintf(o, "-h or --help: print this message\n"); fprintf(o, "Zero file names means read from standard input.\n"); fprintf(o, "Output is always to standard output; files are not written in-place.\n"); exit(exit_code); } // ---------------------------------------------------------------- static int termcvt_main(int argc, char** argv) { int ok = 1; char* inend = "\n"; char* outend = "\n"; int do_in_place = FALSE; // argv[0] is 'mlr' // argv[1] is 'termcvt' // argv[2] is '--some-option' // argv[3] and above are filenames if (argc < 2) termcvt_usage(argv[0], argv[1], stderr, 1); int argi; for (argi = 2; argi < argc; argi++) { char* opt = argv[argi]; if (opt[0] != '-') break; if (streq(opt, "-h") || streq(opt, "--help")) { termcvt_usage(argv[0], argv[1], stdout, 0); } else if (streq(opt, "-I")) { do_in_place = TRUE; } else if (streq(opt, "--cr2crlf")) { inend = "\r"; outend = "\r\n"; } else if (streq(opt, "--lf2crlf")) { inend = "\n"; outend = "\r\n"; } else if (streq(opt, "--crlf2cr")) { inend = "\r\n"; outend = "\r"; } else if (streq(opt, "--lf2cr")) { inend = "\n"; outend = "\r"; } else if (streq(opt, "--crlf2lf")) { inend = "\r\n"; outend = "\n"; } else if (streq(opt, "--cr2lf")) { inend = "\r"; outend = "\n"; } else { termcvt_usage(argv[0], argv[1], stdout, 0); } } int nfiles = argc - argi; if (nfiles == 0) { ok = ok && termcvt_stream(stdin, stdout, inend, outend); } else if (do_in_place) { for (; argi < argc; argi++) { char* file_name = argv[argi]; char* temp_name = alloc_suffixed_temp_file_name(file_name); FILE* input_stream = fopen(file_name, "r"); FILE* output_stream = fopen(temp_name, "wb"); if (input_stream == NULL) { perror("fopen"); fprintf(stderr, "%s: Could not open \"%s\" for read.\n", MLR_GLOBALS.bargv0, file_name); exit(1); } if (output_stream == NULL) { perror("fopen"); fprintf(stderr, "%s: Could not open \"%s\" for write.\n", MLR_GLOBALS.bargv0, temp_name); exit(1); } ok = termcvt_stream(input_stream, output_stream, inend, outend); fclose(input_stream); fclose(output_stream); int rc = rename(temp_name, file_name); if (rc != 0) { perror("rename"); fprintf(stderr, "%s: Could not rename \"%s\" to \"%s\".\n", MLR_GLOBALS.bargv0, temp_name, file_name); exit(1); } free(temp_name); } } else { for (; argi < argc; argi++) { char* file_name = argv[argi]; FILE* input_stream = fopen(file_name, "r"); if (input_stream == NULL) { perror(file_name); exit(1); } ok = termcvt_stream(input_stream, stdout, inend, outend); fclose(input_stream); } } return ok ? 0 : 1; } // ================================================================ // Copyright (c) 1998 John Kerl. // ================================================================ // This is a simple hex dump with hex offsets to the left, hex data in the // middle, and ASCII at the right. This is a subset of the functionality of // Unix od; I wrote it in my NT days. // // Example: // // $ d2h $(jot 0 128) | unhex | hex // 00000000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |................| // 00000010: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |................| // 00000020: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&'()*+,-./| // 00000030: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |0123456789:;<=>?| // 00000040: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFGHIJKLMNO| // 00000050: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVWXYZ[\]^_| // 00000060: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefghijklmno| // 00000070: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvwxyz{|}~.| // ================================================================ #define LINE_LENGTH_MAX 8192 // ---------------------------------------------------------------- static void hex_usage(char* argv0, char* argv1, FILE* o, int exit_code) { fprintf(o, "Usage: %s %s [options] {zero or more file names}\n", argv0, argv1); fprintf(o, "Simple hex-dump.\n"); fprintf(o, "If zero file names are supplied, standard input is read.\n"); fprintf(o, "Options:\n"); fprintf(o, "-r: print only raw hex without leading offset indicators or trailing ASCII dump.\n"); fprintf(o, "-h or --help: print this message\n"); exit(exit_code); } //---------------------------------------------------------------------- // 'mlr' and 'hex' are already argv[0] and argv[1]. static int hex_main(int argc, char **argv) { char * filename; FILE * in_fp; FILE * out_fp; int do_raw = 0; int argi = 2; if (argc >= 3) { if (streq(argv[2], "-r")) { do_raw = 1; argi++; } else if (streq(argv[2], "-h") || streq(argv[2], "--help")) { hex_usage(argv[0], argv[1], stdout, 0); } } int num_file_names = argc - argi; if (num_file_names == 0) { #ifdef WINDOWS setmode(fileno(stdin), O_BINARY); #endif //WINDOWS hex_dump_fp(stdin, stdout, do_raw); } else { for ( ; argi < argc; argi++) { if (!do_raw) { if (num_file_names > 1) printf("%s:\n", argv[argi]); } filename = argv[argi]; in_fp = fopen(filename, "rb"); out_fp = stdout; if (in_fp == NULL) { fprintf(stderr, "Couldn't open \"%s\"; skipping.\n", filename); } else { hex_dump_fp(in_fp, out_fp, do_raw); fclose(in_fp); if (out_fp != stdout) fclose(out_fp); } if (!do_raw) { if (num_file_names > 1) printf("\n"); } } } return 0; } // ---------------------------------------------------------------- static void hex_dump_fp(FILE *in_fp, FILE *out_fp, int do_raw) { const int bytes_per_clump = 4; const int clumps_per_line = 4; const int buffer_size = bytes_per_clump * clumps_per_line; unsigned char buf[buffer_size]; long num_bytes_read; long num_bytes_total = 0; int byteno; while ((num_bytes_read=fread(buf, sizeof(unsigned char), buffer_size, in_fp)) > 0) { if (!do_raw) { printf("%08lx: ", num_bytes_total); } for (byteno = 0; byteno < num_bytes_read; byteno++) { unsigned int temp = buf[byteno]; printf("%02x ", temp); if ((byteno % bytes_per_clump) == (bytes_per_clump - 1)) { if ((byteno > 0) && (byteno < buffer_size-1)) printf(" "); } } for (byteno = num_bytes_read; byteno < buffer_size; byteno++) { printf(" "); if ((byteno % bytes_per_clump) == (bytes_per_clump - 1)) { if ((byteno > 0) && (byteno < buffer_size-1)) printf(" "); } } if (!do_raw) { printf("|"); for (byteno = 0; byteno < num_bytes_read; byteno++) { unsigned char temp = buf[byteno]; if (!isprint(temp)) temp = '.'; printf("%c", temp); } printf("|"); } printf("\n"); num_bytes_total += num_bytes_read; } } // ---------------------------------------------------------------- static void unhex_usage(char* argv0, char* argv1, FILE* o, int exit_code) { fprintf(o, "Usage: %s %s [option] {zero or more file names}\n", argv0, argv1); fprintf(o, "Options:\n"); fprintf(o, "-h or --help: print this message\n"); fprintf(o, "Zero file names means read from standard input.\n"); fprintf(o, "Output is always to standard output; files are not written in-place.\n"); exit(exit_code); } // ---------------------------------------------------------------- int unhex_main(int argc, char ** argv) { // 'mlr' and 'unhex' are already argv[0] and argv[1]. if (argc >= 3) { if (streq(argv[2], "-h") || streq(argv[2], "--help")) { unhex_usage(argv[0], argv[1], stdout, 0); } } int exit_code = 0; if (argc == 2) { unhex_fp(stdin, stdout); } else { for (int argi = 2; argi < argc; argi++) { char* filename = argv[argi]; FILE* infp = fopen(filename, "rb"); if (infp == NULL) { fprintf(stderr, "%s %s: Couldn't open \"%s\"; skipping.\n", argv[0], argv[1], filename); exit_code = 1; } else { unhex_fp(infp, stdout); fclose(infp); } } } return exit_code; } // ---------------------------------------------------------------- static void unhex_fp(FILE *infp, FILE *outfp) { unsigned char byte; unsigned temp; int count; while ((count=fscanf(infp, "%x", &temp)) > 0) { byte = temp; fwrite (&byte, sizeof(byte), 1, outfp); } } // ================================================================ static void netbsd_strptime_usage(char* argv0, char* argv1, FILE* o, int exit_code) { fprintf(o, "Usage: %s %s {string value} {format}\n", argv0, argv1); fprintf(o, "Standalone driver for replacement strptime for MSYS2.\n"); fprintf(o, "Example string value: 2012-03-04T05:06:07Z\n"); fprintf(o, "Example format: %%Y-%%m-%%dT%%H:%%M:%%SZ\n"); exit(exit_code); } //---------------------------------------------------------------------- #define MYBUFLEN 256 static int netbsd_strptime_main(int argc, char **argv) { // 'mlr' and 'netbsd_strptime' are already argv[0] and argv[1]. if (streq(argv[2], "-h") || streq(argv[2], "--help") || (argc != 4)) { netbsd_strptime_usage(argv[0], argv[1], stdout, 0); } struct tm tm; char* strptime_input = argv[2]; char* format = argv[3]; memset(&tm, 0, sizeof(tm)); char* strptime_output = netbsd_strptime(strptime_input, format, &tm); if (strptime_output == NULL) { printf("Could not strptime(\"%s\", \"%s\").\n", strptime_input, format); } else { printf("strptime: %s ->\n", strptime_input); printf(" tm_sec = %d\n", tm.tm_sec); printf(" tm_min = %d\n", tm.tm_min); printf(" tm_hour = %d\n", tm.tm_hour); printf(" tm_mday = %d\n", tm.tm_mday); printf(" tm_mon = %d\n", tm.tm_mon); printf(" tm_year = %d\n", tm.tm_year); printf(" tm_wday = %d\n", tm.tm_wday); printf(" tm_yday = %d\n", tm.tm_yday); printf(" tm_isdst = %d\n", tm.tm_isdst); printf(" remainder = \"%s\"\n", strptime_output); } return 0; } miller-5.6.2/c/auxents/aux_entries.h000066400000000000000000000006411354153536500174330ustar00rootroot00000000000000#ifndef AUX_ENTRIES_H #define AUX_ENTRIES_H // Handles 'mlr lecat' and any other one-off tool things which don't go through the record-streaming logic. // If the argument after the basename (i.e. argv[1]) is recognized then this function doesn't return, // invoking the code for that argument instead and exiting. void do_aux_entries(int argc, char** argv); void show_aux_entries(FILE* fp); #endif // AUX_ENTRIES_H miller-5.6.2/c/camake000077500000000000000000000005501354153536500144130ustar00rootroot00000000000000#!/bin/bash export CCOPT="clang -fsanitize=address -std=gnu99 -I. -I.. -Wall -Werror -O3 -lm" export CCDEBUG="clang -fsanitize=address -std=gnu99 -I. -I.. -Wall -Werror -g -lm" export DSLCC="clang" export DSLCFLAGS="-I.. -Wall -O2 -fsanitize=address" make -e -f Makefile.no-autoconfig -C parsing clean make -e -f Makefile.no-autoconfig mlr mlrg miller-5.6.2/c/cli/000077500000000000000000000000001354153536500140135ustar00rootroot00000000000000miller-5.6.2/c/cli/Makefile.am000066400000000000000000000006331354153536500160510ustar00rootroot00000000000000noinst_LTLIBRARIES= libcli.la libcli_la_SOURCES= \ argparse.c \ argparse.h \ comment_handling.h \ json_array_ingest.h \ mlrcli.c \ mlrcli.h \ quoting.h # TODO: causes circular dependency #noinst_PROGRAMS= ap #ap_CPPFLAGS= -D__AP_MAIN__ ${AM_CPPFLAGS} #ap_LDADD= ../containers/libcontainers.la ../lib/libmlr.la #ap_SOURCES= argparse.c AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/cli/Makefile.in000066400000000000000000000427441354153536500160730ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/cli ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcli_la_LIBADD = am_libcli_la_OBJECTS = argparse.lo mlrcli.lo libcli_la_OBJECTS = $(am_libcli_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcli_la_SOURCES) DIST_SOURCES = $(libcli_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libcli.la libcli_la_SOURCES = \ argparse.c \ argparse.h \ comment_handling.h \ json_array_ingest.h \ mlrcli.c \ mlrcli.h \ quoting.h # TODO: causes circular dependency #noinst_PROGRAMS= ap #ap_CPPFLAGS= -D__AP_MAIN__ ${AM_CPPFLAGS} #ap_LDADD= ../containers/libcontainers.la ../lib/libmlr.la #ap_SOURCES= argparse.c AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/cli/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/cli/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcli.la: $(libcli_la_OBJECTS) $(libcli_la_DEPENDENCIES) $(EXTRA_libcli_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcli_la_OBJECTS) $(libcli_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argparse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrcli.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/cli/README.md000066400000000000000000000003421354153536500152710ustar00rootroot00000000000000# Miller command-line interface mlrcli.h/c bags up all command-line options I use argparse.h/c in place of getopt in order not to depend on GNU-isms, yet, elsewhere in Miller I readily depend on GNU-isms such as getdelim(). miller-5.6.2/c/cli/argparse.c000066400000000000000000000147611354153536500157740ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "cli/argparse.h" // ================================================================ typedef enum _ap_flag_t { AP_INT_VALUE_FLAG, AP_INT_FLAG, AP_LONG_LONG_FLAG, AP_DOUBLE_FLAG, AP_STRING_FLAG, AP_STRING_BUILD_LIST_FLAG, AP_STRING_LIST_FLAG, AP_STRING_ARRAY_FLAG } ap_flag_t; typedef struct _ap_flag_def_t { char* flag_name; ap_flag_t type; int intval; void* pval; int count; // 1 for bool flags; 2 for the rest } ap_flag_def_t; static ap_flag_def_t* ap_find(ap_state_t* pstate, char* flag_name) { for (sllve_t* pe = pstate->pflag_defs->phead; pe != NULL; pe = pe->pnext) { ap_flag_def_t* pdef = pe->pvvalue; if (streq(pdef->flag_name, flag_name)) return pdef; } return NULL; } static ap_flag_def_t* ap_flag_def_alloc(char* flag_name, ap_flag_t ap_type, int intval, void* pval, int count) { ap_flag_def_t* pdef = mlr_malloc_or_die(sizeof(ap_flag_def_t)); pdef->flag_name = flag_name; pdef->type = ap_type; pdef->intval = intval; pdef->pval = pval; pdef->count = count; return pdef; } // ================================================================ ap_state_t* ap_alloc() { ap_state_t* pstate = mlr_malloc_or_die(sizeof(ap_state_t)); pstate->pflag_defs = sllv_alloc(); return pstate; } void ap_free(ap_state_t* pstate) { if (pstate == NULL) return; for (sllve_t* pe = pstate->pflag_defs->phead; pe != NULL; pe = pe->pnext) { ap_flag_def_t* pdef = pe->pvvalue; // Linked-lists are pointed to by mappers and freed by their free // methods. If any mappers miss on that contract, we can find out by // using valgrind --leak-check=full (e.g. reg_test/run --valgrind). // //if (pdef->type == AP_STRING_LIST_FLAG && pdef->pval != NULL) { // slls_t** pplist = pdef->pval; // slls_free(*pplist); //} free(pdef); } sllv_free(pstate->pflag_defs); free(pstate); } // ---------------------------------------------------------------- void ap_define_true_flag(ap_state_t* pstate, char* flag_name, int* pintval) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_VALUE_FLAG, TRUE, pintval, 1)); } void ap_define_false_flag(ap_state_t* pstate, char* flag_name, int* pintval) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_VALUE_FLAG, FALSE, pintval, 1)); } void ap_define_int_value_flag(ap_state_t* pstate, char* flag_name, int intval, int* pintval) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_VALUE_FLAG, intval, pintval, 1)); } void ap_define_int_flag(ap_state_t* pstate, char* flag_name, int* pintval) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_FLAG, 0, pintval, 2)); } void ap_define_long_long_flag(ap_state_t* pstate, char* flag_name, long long* pintval) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_LONG_LONG_FLAG, 0, pintval, 2)); } void ap_define_float_flag(ap_state_t* pstate, char* flag_name, double* pdoubleval) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_DOUBLE_FLAG, 0, pdoubleval, 2)); } void ap_define_string_flag(ap_state_t* pstate, char* flag_name, char** pstring) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_FLAG, 0, pstring, 2)); } void ap_define_string_build_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_BUILD_LIST_FLAG, 0, pplist, 2)); } void ap_define_string_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_LIST_FLAG, 0, pplist, 2)); } void ap_define_string_array_flag(ap_state_t* pstate, char* flag_name, string_array_t** pparray) { sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_ARRAY_FLAG, 0, pparray, 2)); } // ---------------------------------------------------------------- int ap_parse(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv) { return ap_parse_aux(pstate, verb, pargi, argc, argv, TRUE); } int ap_parse_aux(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv, int error_on_unrecognized) { int argi = *pargi; int ok = TRUE; while (argi < argc) { if (argv[argi][0] != '-') { break; } if (streq(argv[argi], "-h") || streq(argv[argi], "--help")) { ok = FALSE; break; } ap_flag_def_t* pdef = ap_find(pstate, argv[argi]); if (pdef == NULL) { if (error_on_unrecognized) ok = FALSE; break; } if ((argc-argi) < pdef->count) { fprintf(stderr, "%s %s: option %s requires an argument.\n", argv[0], verb, argv[argi]); fprintf(stderr, "\n"); ok = FALSE; break; } if (pdef->type == AP_INT_VALUE_FLAG) { *(int *)pdef->pval = pdef->intval; } else if (pdef->type == AP_INT_FLAG) { if (sscanf(argv[argi+1], "%d", (int *)pdef->pval) != 1) { fprintf(stderr, "%s %s: couldn't parse \"%s\" after \"%s\" as integer.\n", argv[0], verb, argv[argi+1], argv[argi]); fprintf(stderr, "\n"); } } else if (pdef->type == AP_LONG_LONG_FLAG) { if (sscanf(argv[argi+1], "%lld", (long long *)pdef->pval) != 1) { fprintf(stderr, "%s %s: couldn't parse \"%s\" after \"%s\" as integer.\n", argv[0], verb, argv[argi+1], argv[argi]); fprintf(stderr, "\n"); } } else if (pdef->type == AP_DOUBLE_FLAG) { if (!mlr_try_float_from_string(argv[argi+1], (double *)pdef->pval)) { fprintf(stderr, "%s %s: couldn't parse \"%s\" after \"%s\" as double.\n", argv[0], verb, argv[argi+1], argv[argi]); fprintf(stderr, "\n"); } } else if (pdef->type == AP_STRING_FLAG) { char** pstring = pdef->pval; *pstring = argv[argi+1]; pdef->pval = pstring; } else if (pdef->type == AP_STRING_BUILD_LIST_FLAG) { slls_t** pplist = pdef->pval; if (*pplist == NULL) { *pplist = slls_alloc(); } slls_append_no_free(*pplist, argv[argi+1]); pdef->pval = pplist; } else if (pdef->type == AP_STRING_LIST_FLAG) { slls_t** pplist = pdef->pval; if (*pplist != NULL) slls_free(*pplist); *pplist = slls_from_line(argv[argi+1], ',', FALSE); pdef->pval = pplist; } else if (pdef->type == AP_STRING_ARRAY_FLAG) { string_array_t** pparray = pdef->pval; if (*pparray != NULL) string_array_free(*pparray); *pparray = string_array_from_line(argv[argi+1], ','); pdef->pval = pparray; } else { ok = FALSE; fprintf(stderr, "argparse.c: internal coding error: flag-def type %x not recognized.\n", pdef->type); fprintf(stderr, "\n"); break; } argi += pdef->count; } *pargi = argi; return ok; } miller-5.6.2/c/cli/argparse.h000066400000000000000000000030351354153536500157710ustar00rootroot00000000000000// ================================================================ // Argument-parsing library, with non-getopt semantics. // ================================================================ #ifndef ARGPARSE_H #define ARGPARSE_H #include "containers/slls.h" #include "containers/sllv.h" #include "lib/string_array.h" typedef struct _ap_state_t { sllv_t* pflag_defs; } ap_state_t; ap_state_t* ap_alloc(); void ap_free(ap_state_t* pstate); void ap_define_true_flag(ap_state_t* pstate, char* flag_name, int* pintval); void ap_define_false_flag(ap_state_t* pstate, char* flag_name, int* pintval); void ap_define_int_value_flag(ap_state_t* pstate, char* flag_name, int value, int* pintval); void ap_define_int_flag(ap_state_t* pstate, char* flag_name, int* pintval); void ap_define_long_long_flag(ap_state_t* pstate, char* flag_name, long long* pintval); void ap_define_float_flag(ap_state_t* pstate, char* flag_name, double* pdoubleval); void ap_define_string_flag(ap_state_t* pstate, char* flag_name, char** pstring); void ap_define_string_build_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist); void ap_define_string_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist); void ap_define_string_array_flag(ap_state_t* pstate, char* flag_name, string_array_t** pparray); int ap_parse(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv); int ap_parse_aux(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv, int error_on_unrecognized); #endif // ARGPARSE_H miller-5.6.2/c/cli/comment_handling.h000066400000000000000000000003021354153536500174650ustar00rootroot00000000000000#ifndef COMMENT_HANDLING_H #define COMMENT_HANDLING_H typedef enum _comment_handling_t { PASS_COMMENTS, SKIP_COMMENTS, COMMENTS_ARE_DATA, } comment_handling_t; #endif // COMMENT_HANDLING_H miller-5.6.2/c/cli/json_array_ingest.h000066400000000000000000000004011354153536500176770ustar00rootroot00000000000000#ifndef JSON_ARRAY_INGEST_H #define JSON_ARRAY_INGEST_H typedef enum _json_array_ingest_t { JSON_ARRAY_INGEST_UNSPECIFIED, JSON_ARRAY_INGEST_FATAL, JSON_ARRAY_INGEST_SKIP, JSON_ARRAY_INGEST_AS_MAP, } json_array_ingest_t; #endif // JSON_ARRAY_INGEST_H miller-5.6.2/c/cli/mlrcli.c000066400000000000000000002566301354153536500154550ustar00rootroot00000000000000#include #include #include #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/mtrand.h" #include "containers/slls.h" #include "containers/lhmss.h" #include "containers/lhmsll.h" #include "input/lrec_readers.h" #include "dsl/function_manager.h" #include "dsl/mlr_dsl_cst.h" #include "mapping/mappers.h" #include "output/lrec_writers.h" #include "cli/mlrcli.h" #include "cli/quoting.h" #include "cli/argparse.h" #include "auxents/aux_entries.h" #ifdef HAVE_CONFIG_H #include "config.h" #define VERSION_STRING PACKAGE_VERSION #else #include "mlrvers.h" #define VERSION_STRING MLR_VERSION #endif // ---------------------------------------------------------------- #define DEFAULT_OFMT "%lf" #define DEFAULT_OQUOTING QUOTE_MINIMAL #define DEFAULT_JSON_FLATTEN_SEPARATOR ":" #define DEFAULT_OOSVAR_FLATTEN_SEPARATOR ":" #define DEFAULT_COMMENT_STRING "#" #define DEFAULT_MAX_FILE_SIZE_FOR_MMAP (4LL*1024LL*1024LL*1024LL) // ASCII 1f and 1e #define ASV_FS "\x1f" #define ASV_RS "\x1e" #define ASV_FS_FOR_HELP "0x1f" #define ASV_RS_FOR_HELP "0x1e" // Unicode code points U+241F and U+241E, encoded as UTF-8. #define USV_FS "\xe2\x90\x9f" #define USV_RS "\xe2\x90\x9e" #define USV_FS_FOR_HELP "U+241F (UTF-8 0xe2909f)" #define USV_RS_FOR_HELP "U+241E (UTF-8 0xe2909e)" // ---------------------------------------------------------------- static mapper_setup_t* mapper_lookup_table[] = { &mapper_altkv_setup, &mapper_bar_setup, &mapper_bootstrap_setup, &mapper_cat_setup, &mapper_check_setup, &mapper_clean_whitespace_setup, &mapper_count_distinct_setup, &mapper_count_similar_setup, &mapper_cut_setup, &mapper_decimate_setup, &mapper_fill_down_setup, &mapper_filter_setup, &mapper_format_values_setup, &mapper_fraction_setup, &mapper_grep_setup, &mapper_group_by_setup, &mapper_group_like_setup, &mapper_having_fields_setup, &mapper_head_setup, &mapper_histogram_setup, &mapper_join_setup, &mapper_label_setup, &mapper_least_frequent_setup, &mapper_merge_fields_setup, &mapper_most_frequent_setup, &mapper_nest_setup, &mapper_nothing_setup, &mapper_put_setup, &mapper_regularize_setup, &mapper_remove_empty_columns_setup, &mapper_rename_setup, &mapper_reorder_setup, &mapper_repeat_setup, &mapper_reshape_setup, &mapper_sample_setup, &mapper_sec2gmt_setup, &mapper_sec2gmtdate_setup, &mapper_seqgen_setup, &mapper_shuffle_setup, &mapper_skip_trivial_records_setup, &mapper_sort_setup, // xxx temp for 5.4.0 -- will continue work after // &mapper_sort_within_records_setup, &mapper_stats1_setup, &mapper_stats2_setup, &mapper_step_setup, &mapper_tac_setup, &mapper_tail_setup, &mapper_tee_setup, &mapper_top_setup, &mapper_uniq_setup, &mapper_unsparsify_setup, }; static int mapper_lookup_table_length = sizeof(mapper_lookup_table) / sizeof(mapper_lookup_table[0]); // ---------------------------------------------------------------- static lhmss_t* get_desc_to_chars_map(); static lhmsll_t* get_default_repeat_ifses(); static lhmsll_t* get_default_repeat_ipses(); static lhmss_t* get_default_fses(); static lhmss_t* get_default_pses(); static lhmss_t* get_default_rses(); static void free_opt_singletons(); static char* rebackslash(char* sep); static void main_usage_long(FILE* o, char* argv0); static void main_usage_short(FILE* o, char* argv0); static void main_usage_synopsis(FILE* o, char* argv0); static void main_usage_examples(FILE* o, char* argv0, char* leader); static void list_all_verbs_raw(FILE* o); static void list_all_verbs(FILE* o, char* leader); static void main_usage_help_options(FILE* o, char* argv0); static void main_usage_functions(FILE* o, char* argv0, char* leader); static void main_usage_data_format_examples(FILE* o, char* argv0); static void main_usage_data_format_options(FILE* o, char* argv0); static void main_usage_comments_in_data(FILE* o, char* argv0); static void main_usage_format_conversion_keystroke_saver_options(FILE* o, char* argv0); static void main_usage_compressed_data_options(FILE* o, char* argv0); static void main_usage_separator_options(FILE* o, char* argv0); static void main_usage_csv_options(FILE* o, char* argv0); static void main_usage_double_quoting(FILE* o, char* argv0); static void main_usage_numerical_formatting(FILE* o, char* argv0); static void main_usage_other_options(FILE* o, char* argv0); static void main_usage_then_chaining(FILE* o, char* argv0); static void main_usage_auxents(FILE* o, char* argv0); static void main_usage_see_also(FILE* o, char* argv0); static void print_type_arithmetic_info(FILE* o, char* argv0); static void usage_all_verbs(char* argv0); static void usage_unrecognized_verb(char* argv0, char* arg); static void check_arg_count(char** argv, int argi, int argc, int n); static mapper_setup_t* look_up_mapper_setup(char* verb); static int handle_terminal_usage(char** argv, int argc, int argi); static char* lhmss_get_or_die(lhmss_t* pmap, char* key); static int lhmsll_get_or_die(lhmsll_t* pmap, char* key); // ---------------------------------------------------------------- cli_opts_t* parse_command_line(int argc, char** argv, sllv_t** ppmapper_list) { cli_opts_t* popts = mlr_malloc_or_die(sizeof(cli_opts_t)); cli_opts_init(popts); int no_input = FALSE; int have_rand_seed = FALSE; unsigned rand_seed = 0; int argi = 1; for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { if (argv[argi][0] != '-') { break; // No more flag options to process } else if (handle_terminal_usage(argv, argc, argi)) { exit(0); } else if (cli_handle_reader_options(argv, argc, &argi, &popts->reader_opts)) { // handled } else if (cli_handle_writer_options(argv, argc, &argi, &popts->writer_opts)) { // handled } else if (cli_handle_reader_writer_options(argv, argc, &argi, &popts->reader_opts, &popts->writer_opts)) { // handled } else if (streq(argv[argi], "-I")) { popts->do_in_place = TRUE; argi += 1; } else if (streq(argv[argi], "-n")) { no_input = TRUE; argi += 1; } else if (streq(argv[argi], "--from")) { check_arg_count(argv, argi, argc, 2); slls_append(popts->filenames, argv[argi+1], NO_FREE); argi += 2; } else if (streq(argv[argi], "--ofmt")) { check_arg_count(argv, argi, argc, 2); popts->ofmt = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--nr-progress-mod")) { check_arg_count(argv, argi, argc, 2); if (sscanf(argv[argi+1], "%lld", &popts->nr_progress_mod) != 1) { fprintf(stderr, "%s: --nr-progress-mod argument must be a positive integer; got \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); main_usage_short(stderr, MLR_GLOBALS.bargv0); exit(1); } if (popts->nr_progress_mod <= 0) { fprintf(stderr, "%s: --nr-progress-mod argument must be a positive integer; got \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); main_usage_short(stderr, MLR_GLOBALS.bargv0); exit(1); } argi += 2; } else if (streq(argv[argi], "--seed")) { check_arg_count(argv, argi, argc, 2); if (sscanf(argv[argi+1], "0x%x", &rand_seed) == 1) { have_rand_seed = TRUE; } else if (sscanf(argv[argi+1], "%u", &rand_seed) == 1) { have_rand_seed = TRUE; } else { fprintf(stderr, "%s: --seed argument must be a decimal or hexadecimal integer; got \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); main_usage_short(stderr, MLR_GLOBALS.bargv0); exit(1); } argi += 2; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else { usage_unrecognized_verb(MLR_GLOBALS.bargv0, argv[argi]); } } cli_apply_defaults(popts); lhmss_t* default_rses = get_default_rses(); lhmss_t* default_fses = get_default_fses(); lhmss_t* default_pses = get_default_pses(); lhmsll_t* default_repeat_ifses = get_default_repeat_ifses(); lhmsll_t* default_repeat_ipses = get_default_repeat_ipses(); if (popts->reader_opts.irs == NULL) popts->reader_opts.irs = lhmss_get_or_die(default_rses, popts->reader_opts.ifile_fmt); if (popts->reader_opts.ifs == NULL) popts->reader_opts.ifs = lhmss_get_or_die(default_fses, popts->reader_opts.ifile_fmt); if (popts->reader_opts.ips == NULL) popts->reader_opts.ips = lhmss_get_or_die(default_pses, popts->reader_opts.ifile_fmt); if (popts->reader_opts.allow_repeat_ifs == NEITHER_TRUE_NOR_FALSE) popts->reader_opts.allow_repeat_ifs = lhmsll_get_or_die(default_repeat_ifses, popts->reader_opts.ifile_fmt); if (popts->reader_opts.allow_repeat_ips == NEITHER_TRUE_NOR_FALSE) popts->reader_opts.allow_repeat_ips = lhmsll_get_or_die(default_repeat_ipses, popts->reader_opts.ifile_fmt); if (popts->writer_opts.ors == NULL) popts->writer_opts.ors = lhmss_get_or_die(default_rses, popts->writer_opts.ofile_fmt); if (popts->writer_opts.ofs == NULL) popts->writer_opts.ofs = lhmss_get_or_die(default_fses, popts->writer_opts.ofile_fmt); if (popts->writer_opts.ops == NULL) popts->writer_opts.ops = lhmss_get_or_die(default_pses, popts->writer_opts.ofile_fmt); if (streq(popts->writer_opts.ofile_fmt, "pprint") && strlen(popts->writer_opts.ofs) != 1) { fprintf(stderr, "%s: OFS for PPRINT format must be single-character; got \"%s\".\n", MLR_GLOBALS.bargv0, popts->writer_opts.ofs); return NULL; } // Construct the mapper list for single use, e.g. the normal streaming case wherein the // mappers operate on all input files. Also retain information needed to construct them // for each input file, for in-place mode. popts->mapper_argb = argi; popts->original_argv = argv; popts->non_in_place_argv = copy_argv(argv); popts->argc = argc; *ppmapper_list = cli_parse_mappers(popts->non_in_place_argv, &argi, argc, popts, &no_input); for ( ; argi < argc; argi++) { slls_append(popts->filenames, argv[argi], NO_FREE); } // Check for use of mmap. It's about 20% faster than stdio (due to fewer data copies // -- lrecs can be pointer-backed by mmap memory) but we can't use it in all situations. if (no_input) { slls_free(popts->filenames); popts->filenames = NULL; } else if (popts->filenames->length == 0) { // No filenames means read from standard input, and standard input cannot be mmapped. popts->reader_opts.use_mmap_for_read = FALSE; } else if (popts->filenames->length > 10) { // https://github.com/johnkerl/miller/issues/256: too many small files is as bad as one big one // (for which see immediately below). popts->reader_opts.use_mmap_for_read = FALSE; } else if (popts->reader_opts.use_mmap_for_read == TRUE) { // https://github.com/johnkerl/miller/issues/160: don't use mmap for large files. // // If any input files don't exist, don't error out just yet ... it's possible that the user // is doing some complex put-with-tee or somesuch which will create the input file by the // time it's needed. In that case we of course can't know the size yet, so avoid mmap there // to be safe. int all_exist_and_are_small_enough = TRUE; for (sllse_t* pe = popts->filenames->phead; pe != NULL; pe = pe->pnext) { ssize_t file_size = get_file_size(pe->value); if (file_size == (ssize_t)(-1) || file_size >= popts->reader_opts.max_file_size_for_mmap) { all_exist_and_are_small_enough = FALSE; break; } } if (!all_exist_and_are_small_enough) { popts->reader_opts.use_mmap_for_read = FALSE; } } if (popts->do_in_place && (popts->filenames == NULL || popts->filenames->length == 0)) { fprintf(stderr, "%s: -I option (in-place operation) requires input files.\n", MLR_GLOBALS.bargv0); exit(1); } if (have_rand_seed) { mtrand_init(rand_seed); } else { mtrand_init_default(); } return popts; } // ---------------------------------------------------------------- // Returns a list of mappers, from the starting point in argv given by *pargi. Bumps *pargi to // point to remaining post-mapper-setup args, i.e. filenames. sllv_t* cli_parse_mappers(char** argv, int* pargi, int argc, cli_opts_t* popts, int* pno_input) { sllv_t* pmapper_list = sllv_alloc(); int argi = *pargi; // Allow then-chains to start with an initial 'then': 'mlr verb1 then verb2 then verb3' or // 'mlr then verb1 then verb2 then verb3'. Particuarly useful in backslashy scripting contexts. if ((argc - argi) >= 1 && streq(argv[argi], "then")) { argi++; } if ((argc - argi) < 1) { fprintf(stderr, "%s: no verb supplied.\n", MLR_GLOBALS.bargv0); main_usage_short(stderr, MLR_GLOBALS.bargv0); exit(1); } // Note that the command-line parsers can operate destructively on argv, e.g. verbs // which take comma-delimited field names splitting on commas. For this reason we // need to duplicate argv on each in-place run within the streamer module. But before // that ever happens, here we run through the verb-parsers once to find out where it // is on the command line that the verbs and their arguments end and the filenames // begin. while (TRUE) { check_arg_count(argv, argi, argc, 1); char* verb = argv[argi]; mapper_setup_t* pmapper_setup = look_up_mapper_setup(verb); if (pmapper_setup == NULL) { fprintf(stderr, "%s: verb \"%s\" not found. Please use \"%s --help\" for a list.\n", MLR_GLOBALS.bargv0, verb, MLR_GLOBALS.bargv0); exit(1); } if ((argc - argi) >= 2) { if (streq(argv[argi+1], "-h") || streq(argv[argi+1], "--help")) { pmapper_setup->pusage_func(stdout, MLR_GLOBALS.bargv0, verb); exit(0); } } // It's up to the parse func to print its usage on CLI-parse failure. // Also note: this assumes main reader/writer opts are all parsed // *before* mapper parse-CLI methods are invoked. mapper_t* pmapper = pmapper_setup->pparse_func(&argi, argc, argv, &popts->reader_opts, &popts->writer_opts); if (pmapper == NULL) { exit(1); } if (pmapper_setup->ignores_input && pmapper_list->length == 0) { // e.g. then-chain starts with seqgen *pno_input = TRUE; } sllv_append(pmapper_list, pmapper); if (argi >= argc || !streq(argv[argi], "then")) break; argi++; } *pargi = argi; return pmapper_list; } // ---------------------------------------------------------------- void cli_opts_free(cli_opts_t* popts) { if (popts == NULL) return; slls_free(popts->filenames); free_argv_copy(popts->non_in_place_argv); free(popts); free_opt_singletons(); } // ---------------------------------------------------------------- static lhmss_t* singleton_pdesc_to_chars_map = NULL; static lhmss_t* get_desc_to_chars_map() { if (singleton_pdesc_to_chars_map == NULL) { singleton_pdesc_to_chars_map = lhmss_alloc(); lhmss_put(singleton_pdesc_to_chars_map, "cr", "\r", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "crcr", "\r\r", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "newline", "\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "lf", "\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "lflf", "\n\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "crlf", "\r\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "crlfcrlf", "\r\n\r\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "tab", "\t", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "space", " ", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "comma", ",", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "newline", "\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "pipe", "|", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "slash", "/", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "colon", ":", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "semicolon", ";", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "equals", "=", NO_FREE); } return singleton_pdesc_to_chars_map; } // Always strdup so the caller can unconditionally free our return value char* cli_sep_from_arg(char* arg) { char* chars = lhmss_get(get_desc_to_chars_map(), arg); if (chars != NULL) // E.g. crlf return mlr_strdup_or_die(chars); else // E.g. '\r\n' return mlr_alloc_unbackslash(arg); } // ---------------------------------------------------------------- static lhmss_t* singleton_default_rses = NULL; static lhmss_t* singleton_default_fses = NULL; static lhmss_t* singleton_default_pses = NULL; static lhmsll_t* singleton_default_repeat_ifses = NULL; static lhmsll_t* singleton_default_repeat_ipses = NULL; static lhmss_t* get_default_rses() { if (singleton_default_rses == NULL) { singleton_default_rses = lhmss_alloc(); lhmss_put(singleton_default_rses, "gen", "N/A", NO_FREE); lhmss_put(singleton_default_rses, "dkvp", "auto", NO_FREE); lhmss_put(singleton_default_rses, "json", "auto", NO_FREE); lhmss_put(singleton_default_rses, "nidx", "auto", NO_FREE); lhmss_put(singleton_default_rses, "csv", "auto", NO_FREE); lhmss_put(singleton_default_rses, "csvlite", "auto", NO_FREE); lhmss_put(singleton_default_rses, "markdown", "auto", NO_FREE); lhmss_put(singleton_default_rses, "pprint", "auto", NO_FREE); lhmss_put(singleton_default_rses, "xtab", "(N/A)", NO_FREE); } return singleton_default_rses; } static lhmss_t* get_default_fses() { if (singleton_default_fses == NULL) { singleton_default_fses = lhmss_alloc(); lhmss_put(singleton_default_fses, "gen", "(N/A)", NO_FREE); lhmss_put(singleton_default_fses, "dkvp", ",", NO_FREE); lhmss_put(singleton_default_fses, "json", "(N/A)", NO_FREE); lhmss_put(singleton_default_fses, "nidx", " ", NO_FREE); lhmss_put(singleton_default_fses, "csv", ",", NO_FREE); lhmss_put(singleton_default_fses, "csvlite", ",", NO_FREE); lhmss_put(singleton_default_fses, "markdown", "(N/A)", NO_FREE); lhmss_put(singleton_default_fses, "pprint", " ", NO_FREE); lhmss_put(singleton_default_fses, "xtab", "auto", NO_FREE); } return singleton_default_fses; } static lhmss_t* get_default_pses() { if (singleton_default_pses == NULL) { singleton_default_pses = lhmss_alloc(); lhmss_put(singleton_default_pses, "gen", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "dkvp", "=", NO_FREE); lhmss_put(singleton_default_pses, "json", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "nidx", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "csv", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "csvlite", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "markdown", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "pprint", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "xtab", " ", NO_FREE); } return singleton_default_pses; } static lhmsll_t* get_default_repeat_ifses() { if (singleton_default_repeat_ifses == NULL) { singleton_default_repeat_ifses = lhmsll_alloc(); lhmsll_put(singleton_default_repeat_ifses, "gen", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "dkvp", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "json", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "csv", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "csvlite", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "markdown", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "nidx", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "xtab", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ifses, "pprint", TRUE, NO_FREE); } return singleton_default_repeat_ifses; } static lhmsll_t* get_default_repeat_ipses() { if (singleton_default_repeat_ipses == NULL) { singleton_default_repeat_ipses = lhmsll_alloc(); lhmsll_put(singleton_default_repeat_ipses, "gen", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "dkvp", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "json", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "csv", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "csvlite", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "markdown", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "nidx", FALSE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "xtab", TRUE, NO_FREE); lhmsll_put(singleton_default_repeat_ipses, "pprint", FALSE, NO_FREE); } return singleton_default_repeat_ipses; } static void free_opt_singletons() { lhmss_free(singleton_pdesc_to_chars_map); lhmss_free(singleton_default_rses); lhmss_free(singleton_default_fses); lhmss_free(singleton_default_pses); lhmsll_free(singleton_default_repeat_ifses); lhmsll_free(singleton_default_repeat_ipses); } // For displaying the default separators in on-line help static char* rebackslash(char* sep) { if (streq(sep, "\r")) return "\\r"; else if (streq(sep, "\n")) return "\\n"; else if (streq(sep, "\r\n")) return "\\r\\n"; else if (streq(sep, "\t")) return "\\t"; else if (streq(sep, " ")) return "space"; else return sep; } // ---------------------------------------------------------------- static void main_usage_short(FILE* fp, char* argv0) { fprintf(stderr, "Please run \"%s --help\" for detailed usage information.\n", argv0); exit(1); } // ---------------------------------------------------------------- // The main_usage_long() function is split out into subroutines in support of the // manpage autogenerator. static void main_usage_long(FILE* o, char* argv0) { main_usage_synopsis(o, argv0); fprintf(o, "\n"); fprintf(o, "Command-line-syntax examples:\n"); main_usage_examples(o, argv0, " "); fprintf(o, "\n"); fprintf(o, "Data-format examples:\n"); main_usage_data_format_examples(o, argv0); fprintf(o, "\n"); fprintf(o, "Help options:\n"); main_usage_help_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Verbs:\n"); list_all_verbs(o, " "); fprintf(o, "\n"); fprintf(o, "Functions for the filter and put verbs:\n"); main_usage_functions(o, argv0, " "); fprintf(o, "\n"); fprintf(o, "Data-format options, for input, output, or both:\n"); main_usage_data_format_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Comments in data:\n"); main_usage_comments_in_data(o, argv0); fprintf(o, "\n"); fprintf(o, "Format-conversion keystroke-saver options, for input, output, or both:\n"); main_usage_format_conversion_keystroke_saver_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Compressed-data options:\n"); main_usage_compressed_data_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Separator options, for input, output, or both:\n"); main_usage_separator_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Relevant to CSV/CSV-lite input only:\n"); main_usage_csv_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Double-quoting for CSV output:\n"); main_usage_double_quoting(o, argv0); fprintf(o, "\n"); fprintf(o, "Numerical formatting:\n"); main_usage_numerical_formatting(o, argv0); fprintf(o, "\n"); fprintf(o, "Other options:\n"); main_usage_other_options(o, argv0); fprintf(o, "\n"); fprintf(o, "Then-chaining:\n"); main_usage_then_chaining(o, argv0); fprintf(o, "\n"); fprintf(o, "Auxiliary commands:\n"); main_usage_auxents(o, argv0); fprintf(o, "\n"); main_usage_see_also(o, argv0); } static void main_usage_synopsis(FILE* o, char* argv0) { fprintf(o, "Usage: %s [I/O options] {verb} [verb-dependent options ...] {zero or more file names}\n", argv0); } static void main_usage_examples(FILE* o, char* argv0, char* leader) { fprintf(o, "%s%s --csv cut -f hostname,uptime mydata.csv\n", leader, argv0); fprintf(o, "%s%s --tsv --rs lf filter '$status != \"down\" && $upsec >= 10000' *.tsv\n", leader, argv0); fprintf(o, "%s%s --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat\n", leader, argv0); fprintf(o, "%sgrep -v '^#' /etc/group | %s --ifs : --nidx --opprint label group,pass,gid,member then sort -f group\n", leader, argv0); fprintf(o, "%s%s join -j account_id -f accounts.dat then group-by account_name balances.dat\n", leader, argv0); fprintf(o, "%s%s --json put '$attr = sub($attr, \"([0-9]+)_([0-9]+)_.*\", \"\\1:\\2\")' data/*.json\n", leader, argv0); fprintf(o, "%s%s stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*\n", leader, argv0); fprintf(o, "%s%s stats2 -a linreg-pca -f u,v -g shape data/*\n", leader, argv0); fprintf(o, "%s%s put -q '@sum[$a][$b] += $x; end {emit @sum, \"a\", \"b\"}' data/*\n", leader, argv0); fprintf(o, "%s%s --from estimates.tbl put '\n", leader, argv0); fprintf(o, " for (k,v in $*) {\n"); fprintf(o, " if (is_numeric(v) && k =~ \"^[t-z].*$\") {\n"); fprintf(o, " $sum += v; $count += 1\n"); fprintf(o, " }\n"); fprintf(o, " }\n"); fprintf(o, " $mean = $sum / $count # no assignment if count unset'\n"); fprintf(o, "%s%s --from infile.dat put -f analyze.mlr\n", leader, argv0); fprintf(o, "%s%s --from infile.dat put 'tee > \"./taps/data-\".$a.\"-\".$b, $*'\n", leader, argv0); fprintf(o, "%s%s --from infile.dat put 'tee | \"gzip > ./taps/data-\".$a.\"-\".$b.\".gz\", $*'\n", leader, argv0); fprintf(o, "%s%s --from infile.dat put -q '@v=$*; dump | \"jq .[]\"'\n", leader, argv0); fprintf(o, "%s%s --from infile.dat put '(NR %% 1000 == 0) { print > stderr, \"Checkpoint \".NR}'\n", leader, argv0); } static void list_all_verbs_raw(FILE* o) { for (int i = 0; i < mapper_lookup_table_length; i++) { fprintf(o, "%s\n", mapper_lookup_table[i]->verb); } } static void list_all_verbs(FILE* o, char* leader) { char* separator = " "; int leaderlen = strlen(leader); int separatorlen = strlen(separator); int linelen = leaderlen; int j = 0; for (int i = 0; i < mapper_lookup_table_length; i++) { char* verb = mapper_lookup_table[i]->verb; int verblen = strlen(verb); linelen += separatorlen + verblen; if (linelen >= 80) { fprintf(o, "\n"); linelen = leaderlen + separatorlen + verblen; j = 0; } if (j == 0) fprintf(o, "%s", leader); fprintf(o, "%s%s", separator, verb); j++; } fprintf(o, "\n"); } static void main_usage_help_options(FILE* o, char* argv0) { fprintf(o, " -h or --help Show this message.\n"); fprintf(o, " --version Show the software version.\n"); fprintf(o, " {verb name} --help Show verb-specific help.\n"); fprintf(o, " --help-all-verbs Show help on all verbs.\n"); fprintf(o, " -l or --list-all-verbs List only verb names.\n"); fprintf(o, " -L List only verb names, one per line.\n"); fprintf(o, " -f or --help-all-functions Show help on all built-in functions.\n"); fprintf(o, " -F Show a bare listing of built-in functions by name.\n"); fprintf(o, " -k or --help-all-keywords Show help on all keywords.\n"); fprintf(o, " -K Show a bare listing of keywords by name.\n"); } static void main_usage_functions(FILE* o, char* argv0, char* leader) { fmgr_t* pfmgr = fmgr_alloc(); fmgr_list_functions(pfmgr, o, leader); fmgr_free(pfmgr, NULL); fprintf(o, "\n"); fprintf(o, "Please use \"%s --help-function {function name}\" for function-specific help.\n", argv0); } static void main_usage_data_format_examples(FILE* o, char* argv0) { fprintf(o, " DKVP: delimited key-value pairs (Miller default format)\n" " +---------------------+\n" " | apple=1,bat=2,cog=3 | Record 1: \"apple\" => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" " | dish=7,egg=8,flint | Record 2: \"dish\" => \"7\", \"egg\" => \"8\", \"3\" => \"flint\"\n" " +---------------------+\n" "\n" " NIDX: implicitly numerically indexed (Unix-toolkit style)\n" " +---------------------+\n" " | the quick brown | Record 1: \"1\" => \"the\", \"2\" => \"quick\", \"3\" => \"brown\"\n" " | fox jumped | Record 2: \"1\" => \"fox\", \"2\" => \"jumped\"\n" " +---------------------+\n" "\n" " CSV/CSV-lite: comma-separated values with separate header line\n" " +---------------------+\n" " | apple,bat,cog |\n" " | 1,2,3 | Record 1: \"apple => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" " | 4,5,6 | Record 2: \"apple\" => \"4\", \"bat\" => \"5\", \"cog\" => \"6\"\n" " +---------------------+\n" "\n" " Tabular JSON: nested objects are supported, although arrays within them are not:\n" " +---------------------+\n" " | { |\n" " | \"apple\": 1, | Record 1: \"apple\" => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" " | \"bat\": 2, |\n" " | \"cog\": 3 |\n" " | } |\n" " | { |\n" " | \"dish\": { | Record 2: \"dish:egg\" => \"7\", \"dish:flint\" => \"8\", \"garlic\" => \"\"\n" " | \"egg\": 7, |\n" " | \"flint\": 8 |\n" " | }, |\n" " | \"garlic\": \"\" |\n" " | } |\n" " +---------------------+\n" "\n" " PPRINT: pretty-printed tabular\n" " +---------------------+\n" " | apple bat cog |\n" " | 1 2 3 | Record 1: \"apple => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" " | 4 5 6 | Record 2: \"apple\" => \"4\", \"bat\" => \"5\", \"cog\" => \"6\"\n" " +---------------------+\n" "\n" " XTAB: pretty-printed transposed tabular\n" " +---------------------+\n" " | apple 1 | Record 1: \"apple\" => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" " | bat 2 |\n" " | cog 3 |\n" " | |\n" " | dish 7 | Record 2: \"dish\" => \"7\", \"egg\" => \"8\"\n" " | egg 8 |\n" " +---------------------+\n" "\n" " Markdown tabular (supported for output only):\n" " +-----------------------+\n" " | | apple | bat | cog | |\n" " | | --- | --- | --- | |\n" " | | 1 | 2 | 3 | | Record 1: \"apple => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" " | | 4 | 5 | 6 | | Record 2: \"apple\" => \"4\", \"bat\" => \"5\", \"cog\" => \"6\"\n" " +-----------------------+\n"); } static void main_usage_data_format_options(FILE* o, char* argv0) { fprintf(o, " --idkvp --odkvp --dkvp Delimited key-value pairs, e.g \"a=1,b=2\"\n"); fprintf(o, " (this is Miller's default format).\n"); fprintf(o, "\n"); fprintf(o, " --inidx --onidx --nidx Implicitly-integer-indexed fields\n"); fprintf(o, " (Unix-toolkit style).\n"); fprintf(o, " -T Synonymous with \"--nidx --fs tab\".\n"); fprintf(o, "\n"); fprintf(o, " --icsv --ocsv --csv Comma-separated value (or tab-separated\n"); fprintf(o, " with --fs tab, etc.)\n"); fprintf(o, "\n"); fprintf(o, " --itsv --otsv --tsv Keystroke-savers for \"--icsv --ifs tab\",\n"); fprintf(o, " \"--ocsv --ofs tab\", \"--csv --fs tab\".\n"); fprintf(o, " --iasv --oasv --asv Similar but using ASCII FS %s and RS %s\n", ASV_FS_FOR_HELP, ASV_RS_FOR_HELP); fprintf(o, " --iusv --ousv --usv Similar but using Unicode FS %s\n", USV_FS_FOR_HELP); fprintf(o, " and RS %s\n", USV_RS_FOR_HELP); fprintf(o, "\n"); fprintf(o, " --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated\n"); fprintf(o, " with --fs tab, etc.). The 'lite' CSV does not handle\n"); fprintf(o, " RFC-CSV double-quoting rules; is slightly faster;\n"); fprintf(o, " and handles heterogeneity in the input stream via\n"); fprintf(o, " empty newline followed by new header line. See also\n"); fprintf(o, " http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc.\n"); fprintf(o, "\n"); fprintf(o, " --itsvlite --otsvlite --tsvlite Keystroke-savers for \"--icsvlite --ifs tab\",\n"); fprintf(o, " \"--ocsvlite --ofs tab\", \"--csvlite --fs tab\".\n"); fprintf(o, " -t Synonymous with --tsvlite.\n"); fprintf(o, " --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS %s and RS %s\n", ASV_FS_FOR_HELP, ASV_RS_FOR_HELP); fprintf(o, " --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS %s\n", USV_FS_FOR_HELP); fprintf(o, " and RS %s\n", USV_RS_FOR_HELP); fprintf(o, "\n"); fprintf(o, " --ipprint --opprint --pprint Pretty-printed tabular (produces no\n"); fprintf(o, " output until all input is in).\n"); fprintf(o, " --right Right-justifies all fields for PPRINT output.\n"); fprintf(o, " --barred Prints a border around PPRINT output\n"); fprintf(o, " (only available for output).\n"); fprintf(o, "\n"); fprintf(o, " --omd Markdown-tabular (only available for output).\n"); fprintf(o, "\n"); fprintf(o, " --ixtab --oxtab --xtab Pretty-printed vertical-tabular.\n"); fprintf(o, " --xvright Right-justifies values for XTAB format.\n"); fprintf(o, "\n"); fprintf(o, " --ijson --ojson --json JSON tabular: sequence or list of one-level\n"); fprintf(o, " maps: {...}{...} or [{...},{...}].\n"); fprintf(o, " --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input\n"); fprintf(o, " --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed\n"); fprintf(o, " --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or\n"); fprintf(o, " to be treated as errors. Please use the jq tool for full\n"); fprintf(o, " JSON (pre)processing.\n"); fprintf(o, " --jvstack Put one key-value pair per line for JSON\n"); fprintf(o, " output.\n"); fprintf(o, " --jlistwrap Wrap JSON output in outermost [ ].\n"); fprintf(o, " --jknquoteint Do not quote non-string map keys in JSON output.\n"); fprintf(o, " --jvquoteall Quote map values in JSON output, even if they're\n"); fprintf(o, " numeric.\n"); fprintf(o, " --jflatsep {string} Separator for flattening multi-level JSON keys,\n"); fprintf(o, " e.g. '{\"a\":{\"b\":3}}' becomes a:b => 3 for\n"); fprintf(o, " non-JSON formats. Defaults to %s.\n", DEFAULT_JSON_FLATTEN_SEPARATOR); fprintf(o, "\n"); fprintf(o, " -p is a keystroke-saver for --nidx --fs space --repifs\n"); fprintf(o, "\n"); fprintf(o, " --mmap --no-mmap --mmap-below {n} Use mmap for files whenever possible, never, or\n"); fprintf(o, " for files less than n bytes in size. Default is for\n"); fprintf(o, " files less than %lld bytes in size.\n", DEFAULT_MAX_FILE_SIZE_FOR_MMAP); fprintf(o, " 'Whenever possible' means always except for when reading\n"); fprintf(o, " standard input which is not mmappable. If you don't know\n"); fprintf(o, " what this means, don't worry about it -- it's a minor\n"); fprintf(o, " performance optimization.\n"); fprintf(o, "\n"); fprintf(o, " Examples: --csv for CSV-formatted input and output; --idkvp --opprint for\n"); fprintf(o, " DKVP-formatted input and pretty-printed output.\n"); fprintf(o, "\n"); fprintf(o, " Please use --iformat1 --oformat2 rather than --format1 --oformat2.\n"); fprintf(o, " The latter sets up input and output flags for format1, not all of which\n"); fprintf(o, " are overridden in all cases by setting output format to format2.\n"); } static void main_usage_comments_in_data(FILE* o, char* argv0) { fprintf(o, " --skip-comments Ignore commented lines (prefixed by \"%s\")\n", DEFAULT_COMMENT_STRING); fprintf(o, " within the input.\n"); fprintf(o, " --skip-comments-with {string} Ignore commented lines within input, with\n"); fprintf(o, " specified prefix.\n"); fprintf(o, " --pass-comments Immediately print commented lines (prefixed by \"%s\")\n", DEFAULT_COMMENT_STRING); fprintf(o, " within the input.\n"); fprintf(o, " --pass-comments-with {string} Immediately print commented lines within input, with\n"); fprintf(o, " specified prefix.\n"); fprintf(o, "Notes:\n"); fprintf(o, "* Comments are only honored at the start of a line.\n"); fprintf(o, "* In the absence of any of the above four options, comments are data like\n"); fprintf(o, " any other text.\n"); fprintf(o, "* When pass-comments is used, comment lines are written to standard output\n"); fprintf(o, " immediately upon being read; they are not part of the record stream.\n"); fprintf(o, " Results may be counterintuitive. A suggestion is to place comments at the\n"); fprintf(o, " start of data files.\n"); } static void main_usage_format_conversion_keystroke_saver_options(FILE* o, char* argv0) { fprintf(o, "As keystroke-savers for format-conversion you may use the following:\n"); fprintf(o, " --c2t --c2d --c2n --c2j --c2x --c2p --c2m\n"); fprintf(o, " --t2c --t2d --t2n --t2j --t2x --t2p --t2m\n"); fprintf(o, " --d2c --d2t --d2n --d2j --d2x --d2p --d2m\n"); fprintf(o, " --n2c --n2t --n2d --n2j --n2x --n2p --n2m\n"); fprintf(o, " --j2c --j2t --j2d --j2n --j2x --j2p --j2m\n"); fprintf(o, " --x2c --x2t --x2d --x2n --x2j --x2p --x2m\n"); fprintf(o, " --p2c --p2t --p2d --p2n --p2j --p2x --p2m\n"); fprintf(o, "The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,\n"); fprintf(o, "PPRINT, and markdown, respectively. Note that markdown format is available for\n"); fprintf(o, "output only.\n"); } static void main_usage_compressed_data_options(FILE* o, char* argv0) { fprintf(o, " --prepipe {command} This allows Miller to handle compressed inputs. You can do\n"); fprintf(o, " without this for single input files, e.g. \"gunzip < myfile.csv.gz | %s ...\".\n", argv0); fprintf(o, " However, when multiple input files are present, between-file separations are\n"); fprintf(o, " lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can\n"); fprintf(o, " specify an action to be taken on each input file. This pre-pipe command must\n"); fprintf(o, " be able to read from standard input; it will be invoked with\n"); fprintf(o, " {command} < {filename}.\n"); fprintf(o, " Examples:\n"); fprintf(o, " %s --prepipe 'gunzip'\n", argv0); fprintf(o, " %s --prepipe 'zcat -cf'\n", argv0); fprintf(o, " %s --prepipe 'xz -cd'\n", argv0); fprintf(o, " %s --prepipe cat\n", argv0); fprintf(o, " Note that this feature is quite general and is not limited to decompression\n"); fprintf(o, " utilities. You can use it to apply per-file filters of your choice.\n"); fprintf(o, " For output compression (or other) utilities, simply pipe the output:\n"); fprintf(o, " %s ... | {your compression command}\n", argv0); } static void main_usage_separator_options(FILE* o, char* argv0) { fprintf(o, " --rs --irs --ors Record separators, e.g. 'lf' or '\\r\\n'\n"); fprintf(o, " --fs --ifs --ofs --repifs Field separators, e.g. comma\n"); fprintf(o, " --ps --ips --ops Pair separators, e.g. equals sign\n"); fprintf(o, "\n"); fprintf(o, " Notes about line endings:\n"); fprintf(o, " * Default line endings (--irs and --ors) are \"auto\" which means autodetect from\n"); fprintf(o, " the input file format, as long as the input file(s) have lines ending in either\n"); fprintf(o, " LF (also known as linefeed, '\\n', 0x0a, Unix-style) or CRLF (also known as\n"); fprintf(o, " carriage-return/linefeed pairs, '\\r\\n', 0x0d 0x0a, Windows style).\n"); fprintf(o, " * If both irs and ors are auto (which is the default) then LF input will lead to LF\n"); fprintf(o, " output and CRLF input will lead to CRLF output, regardless of the platform you're\n"); fprintf(o, " running on.\n"); fprintf(o, " * The line-ending autodetector triggers on the first line ending detected in the input\n"); fprintf(o, " stream. E.g. if you specify a CRLF-terminated file on the command line followed by an\n"); fprintf(o, " LF-terminated file then autodetected line endings will be CRLF.\n"); fprintf(o, " * If you use --ors {something else} with (default or explicitly specified) --irs auto\n"); fprintf(o, " then line endings are autodetected on input and set to what you specify on output.\n"); fprintf(o, " * If you use --irs {something else} with (default or explicitly specified) --ors auto\n"); fprintf(o, " then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.\n"); fprintf(o, "\n"); fprintf(o, " Notes about all other separators:\n"); fprintf(o, " * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats\n"); fprintf(o, " do key-value pairs appear juxtaposed.\n"); fprintf(o, " * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines;\n"); fprintf(o, " XTAB records are separated by two or more consecutive IFS/OFS -- i.e.\n"); fprintf(o, " a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs\n"); fprintf(o, " auto for XTAB format. (XTAB's default IFS/OFS are \"auto\".)\n"); fprintf(o, " * OFS must be single-character for PPRINT format. This is because it is used\n"); fprintf(o, " with repetition for alignment; multi-character separators would make\n"); fprintf(o, " alignment impossible.\n"); fprintf(o, " * OPS may be multi-character for XTAB format, in which case alignment is\n"); fprintf(o, " disabled.\n"); fprintf(o, " * TSV is simply CSV using tab as field separator (\"--fs tab\").\n"); fprintf(o, " * FS/PS are ignored for markdown format; RS is used.\n"); fprintf(o, " * All FS and PS options are ignored for JSON format, since they are not relevant\n"); fprintf(o, " to the JSON format.\n"); fprintf(o, " * You can specify separators in any of the following ways, shown by example:\n"); fprintf(o, " - Type them out, quoting as necessary for shell escapes, e.g.\n"); fprintf(o, " \"--fs '|' --ips :\"\n"); fprintf(o, " - C-style escape sequences, e.g. \"--rs '\\r\\n' --fs '\\t'\".\n"); fprintf(o, " - To avoid backslashing, you can use any of the following names:\n"); fprintf(o, " "); lhmss_t* pmap = get_desc_to_chars_map(); for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { fprintf(o, " %s", pe->key); } fprintf(o, "\n"); fprintf(o, " * Default separators by format:\n"); fprintf(o, " %-12s %-8s %-8s %s\n", "File format", "RS", "FS", "PS"); lhmss_t* default_rses = get_default_rses(); lhmss_t* default_fses = get_default_fses(); lhmss_t* default_pses = get_default_pses(); for (lhmsse_t* pe = default_rses->phead; pe != NULL; pe = pe->pnext) { char* filefmt = pe->key; char* rs = pe->value; char* fs = lhmss_get(default_fses, filefmt); char* ps = lhmss_get(default_pses, filefmt); fprintf(o, " %-12s %-8s %-8s %s\n", filefmt, rebackslash(rs), rebackslash(fs), rebackslash(ps)); } } static void main_usage_csv_options(FILE* o, char* argv0) { fprintf(o, " --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1\n"); fprintf(o, " of input files. Tip: combine with \"label\" to recreate\n"); fprintf(o, " missing headers.\n"); fprintf(o, " --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line,\n"); fprintf(o, " fill remaining keys with empty string. If a data line has more\n"); fprintf(o, " fields than the header line, use integer field labels as in\n"); fprintf(o, " the implicit-header case.\n"); fprintf(o, " --headerless-csv-output Print only CSV data lines.\n"); fprintf(o, " -N Keystroke-saver for --implicit-csv-header --headerless-csv-output.\n"); } static void main_usage_double_quoting(FILE* o, char* argv0) { fprintf(o, " --quote-all Wrap all fields in double quotes\n"); fprintf(o, " --quote-none Do not wrap any fields in double quotes, even if they have\n"); fprintf(o, " OFS or ORS in them\n"); fprintf(o, " --quote-minimal Wrap fields in double quotes only if they have OFS or ORS\n"); fprintf(o, " in them (default)\n"); fprintf(o, " --quote-numeric Wrap fields in double quotes only if they have numbers\n"); fprintf(o, " in them\n"); fprintf(o, " --quote-original Wrap fields in double quotes if and only if they were\n"); fprintf(o, " quoted on input. This isn't sticky for computed fields:\n"); fprintf(o, " e.g. if fields a and b were quoted on input and you do\n"); fprintf(o, " \"put '$c = $a . $b'\" then field c won't inherit a or b's\n"); fprintf(o, " was-quoted-on-input flag.\n"); } static void main_usage_numerical_formatting(FILE* o, char* argv0) { fprintf(o, " --ofmt {format} E.g. %%.18lf, %%.0lf. Please use sprintf-style codes for\n"); fprintf(o, " double-precision. Applies to verbs which compute new\n"); fprintf(o, " values, e.g. put, stats1, stats2. See also the fmtnum\n"); fprintf(o, " function within mlr put (mlr --help-all-functions).\n"); fprintf(o, " Defaults to %s.\n", DEFAULT_OFMT); } static void main_usage_other_options(FILE* o, char* argv0) { fprintf(o, " --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter\n"); fprintf(o, " urand()/urandint()/urand32().\n"); fprintf(o, " --nr-progress-mod {m}, with m a positive integer: print filename and record\n"); fprintf(o, " count to stderr every m input records.\n"); fprintf(o, " --from {filename} Use this to specify an input file before the verb(s),\n"); fprintf(o, " rather than after. May be used more than once. Example:\n"); fprintf(o, " \"%s --from a.dat --from b.dat cat\" is the same as\n", argv0); fprintf(o, " \"%s cat a.dat b.dat\".\n", argv0); fprintf(o, " -n Process no input files, nor standard input either. Useful\n"); fprintf(o, " for %s put with begin/end statements only. (Same as --from\n", argv0); fprintf(o, " /dev/null.) Also useful in \"%s -n put -v '...'\" for\n", argv0); fprintf(o, " analyzing abstract syntax trees (if that's your thing).\n"); fprintf(o, " -I Process files in-place. For each file name on the command\n"); fprintf(o, " line, output is written to a temp file in the same\n"); fprintf(o, " directory, which is then renamed over the original. Each\n"); fprintf(o, " file is processed in isolation: if the output format is\n"); fprintf(o, " CSV, CSV headers will be present in each output file;\n"); fprintf(o, " statistics are only over each file's own records; and so on.\n"); } static void main_usage_then_chaining(FILE* o, char* argv0) { fprintf(o, "Output of one verb may be chained as input to another using \"then\", e.g.\n"); fprintf(o, " %s stats1 -a min,mean,max -f flag,u,v -g color then sort -f color\n", argv0); } static void main_usage_auxents(FILE* o, char* argv0) { fprintf(o, "Miller has a few otherwise-standalone executables packaged within it.\n"); fprintf(o, "They do not participate in any other parts of Miller.\n"); show_aux_entries(o); } static void main_usage_see_also(FILE* o, char* argv0) { fprintf(o, "For more information please see http://johnkerl.org/miller/doc and/or\n"); fprintf(o, "http://github.com/johnkerl/miller."); fprintf(o, " This is Miller version %s.\n", VERSION_STRING); } static void print_type_arithmetic_info(FILE* o, char* argv0) { for (int i = -2; i < MT_DIM; i++) { mv_t a = (mv_t) {.type = i, .free_flags = NO_FREE, .u.intv = 0}; if (i == -2) printf("%-6s |", "(+)"); else if (i == -1) printf("%-6s +", "------"); else printf("%-6s |", mt_describe_type_simple(a.type)); for (int j = 0; j < MT_DIM; j++) { mv_t b = (mv_t) {.type = j, .free_flags = NO_FREE, .u.intv = 0}; if (i == -2) { printf(" %-6s", mt_describe_type_simple(b.type)); } else if (i == -1) { printf(" %-6s", "------"); } else { mv_t c = x_xx_plus_func(&a, &b); printf(" %-6s", mt_describe_type_simple(c.type)); } } fprintf(o, "\n"); } } // ---------------------------------------------------------------- static void usage_all_verbs(char* argv0) { char* separator = "================================================================"; for (int i = 0; i < mapper_lookup_table_length; i++) { fprintf(stdout, "%s\n", separator); mapper_lookup_table[i]->pusage_func(stdout, argv0, mapper_lookup_table[i]->verb); fprintf(stdout, "\n"); } fprintf(stdout, "%s\n", separator); exit(0); } static void usage_unrecognized_verb(char* argv0, char* arg) { fprintf(stderr, "%s: option \"%s\" not recognized.\n", argv0, arg); fprintf(stderr, "Please run \"%s --help\" for usage information.\n", argv0); exit(1); } static void check_arg_count(char** argv, int argi, int argc, int n) { if ((argc - argi) < n) { fprintf(stderr, "%s: option \"%s\" missing argument(s).\n", MLR_GLOBALS.bargv0, argv[argi]); main_usage_short(stderr, MLR_GLOBALS.bargv0); exit(1); } } static mapper_setup_t* look_up_mapper_setup(char* verb) { mapper_setup_t* pmapper_setup = NULL; for (int i = 0; i < mapper_lookup_table_length; i++) { if (streq(mapper_lookup_table[i]->verb, verb)) return mapper_lookup_table[i]; } return pmapper_setup; } // ---------------------------------------------------------------- void cli_opts_init(cli_opts_t* popts) { memset(popts, 0, sizeof(*popts)); cli_reader_opts_init(&popts->reader_opts); cli_writer_opts_init(&popts->writer_opts); popts->mapper_argb = 0; popts->filenames = slls_alloc(); popts->ofmt = NULL; popts->nr_progress_mod = 0LL; popts->do_in_place = FALSE; } void cli_reader_opts_init(cli_reader_opts_t* preader_opts) { preader_opts->ifile_fmt = NULL; preader_opts->irs = NULL; preader_opts->ifs = NULL; preader_opts->ips = NULL; preader_opts->input_json_flatten_separator = NULL; preader_opts->json_array_ingest = JSON_ARRAY_INGEST_UNSPECIFIED; preader_opts->allow_repeat_ifs = NEITHER_TRUE_NOR_FALSE; preader_opts->allow_repeat_ips = NEITHER_TRUE_NOR_FALSE; preader_opts->use_implicit_csv_header = NEITHER_TRUE_NOR_FALSE; preader_opts->allow_ragged_csv_input = NEITHER_TRUE_NOR_FALSE; preader_opts->use_mmap_for_read = NEITHER_TRUE_NOR_FALSE; preader_opts->prepipe = NULL; preader_opts->comment_handling = COMMENTS_ARE_DATA; preader_opts->comment_string = NULL; preader_opts->max_file_size_for_mmap = DEFAULT_MAX_FILE_SIZE_FOR_MMAP; // xxx temp preader_opts->generator_opts.field_name = "i"; preader_opts->generator_opts.start = 0LL; preader_opts->generator_opts.stop = 100LL; preader_opts->generator_opts.step = 1LL; } void cli_writer_opts_init(cli_writer_opts_t* pwriter_opts) { pwriter_opts->ofile_fmt = NULL; pwriter_opts->ors = NULL; pwriter_opts->ofs = NULL; pwriter_opts->ops = NULL; pwriter_opts->headerless_csv_output = NEITHER_TRUE_NOR_FALSE; pwriter_opts->right_justify_xtab_value = NEITHER_TRUE_NOR_FALSE; pwriter_opts->right_align_pprint = NEITHER_TRUE_NOR_FALSE; pwriter_opts->pprint_barred = NEITHER_TRUE_NOR_FALSE; pwriter_opts->stack_json_output_vertically = NEITHER_TRUE_NOR_FALSE; pwriter_opts->wrap_json_output_in_outer_list = NEITHER_TRUE_NOR_FALSE; pwriter_opts->json_quote_int_keys = NEITHER_TRUE_NOR_FALSE; pwriter_opts->json_quote_non_string_values = NEITHER_TRUE_NOR_FALSE; pwriter_opts->output_json_flatten_separator = NULL; pwriter_opts->oosvar_flatten_separator = NULL; pwriter_opts->oquoting = QUOTE_UNSPECIFIED; } void cli_apply_defaults(cli_opts_t* popts) { cli_apply_reader_defaults(&popts->reader_opts); cli_apply_writer_defaults(&popts->writer_opts); if (popts->ofmt == NULL) popts->ofmt = DEFAULT_OFMT; } void cli_apply_reader_defaults(cli_reader_opts_t* preader_opts) { if (preader_opts->ifile_fmt == NULL) preader_opts->ifile_fmt = "dkvp"; if (preader_opts->json_array_ingest == JSON_ARRAY_INGEST_UNSPECIFIED) preader_opts->json_array_ingest = JSON_ARRAY_INGEST_AS_MAP; if (preader_opts->use_implicit_csv_header == NEITHER_TRUE_NOR_FALSE) preader_opts->use_implicit_csv_header = FALSE; if (preader_opts->allow_ragged_csv_input == NEITHER_TRUE_NOR_FALSE) preader_opts->allow_ragged_csv_input = FALSE; if (preader_opts->use_mmap_for_read == NEITHER_TRUE_NOR_FALSE) #if MLR_ARCH_MMAP_ENABLED preader_opts->use_mmap_for_read = TRUE; #else preader_opts->use_mmap_for_read = FALSE; #endif if (preader_opts->input_json_flatten_separator == NULL) preader_opts->input_json_flatten_separator = DEFAULT_JSON_FLATTEN_SEPARATOR; } void cli_apply_writer_defaults(cli_writer_opts_t* pwriter_opts) { if (pwriter_opts->ofile_fmt == NULL) pwriter_opts->ofile_fmt = "dkvp"; if (pwriter_opts->headerless_csv_output == NEITHER_TRUE_NOR_FALSE) pwriter_opts->headerless_csv_output = FALSE; if (pwriter_opts->right_justify_xtab_value == NEITHER_TRUE_NOR_FALSE) pwriter_opts->right_justify_xtab_value = FALSE; if (pwriter_opts->right_align_pprint == NEITHER_TRUE_NOR_FALSE) pwriter_opts->right_align_pprint = FALSE; if (pwriter_opts->pprint_barred == NEITHER_TRUE_NOR_FALSE) pwriter_opts->pprint_barred = FALSE; if (pwriter_opts->stack_json_output_vertically == NEITHER_TRUE_NOR_FALSE) pwriter_opts->stack_json_output_vertically = FALSE; if (pwriter_opts->wrap_json_output_in_outer_list == NEITHER_TRUE_NOR_FALSE) pwriter_opts->wrap_json_output_in_outer_list = FALSE; if (pwriter_opts->json_quote_int_keys == NEITHER_TRUE_NOR_FALSE) pwriter_opts->json_quote_int_keys = TRUE; if (pwriter_opts->json_quote_non_string_values == NEITHER_TRUE_NOR_FALSE) pwriter_opts->json_quote_non_string_values = FALSE; if (pwriter_opts->output_json_flatten_separator == NULL) pwriter_opts->output_json_flatten_separator = DEFAULT_JSON_FLATTEN_SEPARATOR; if (pwriter_opts->oosvar_flatten_separator == NULL) pwriter_opts->oosvar_flatten_separator = DEFAULT_OOSVAR_FLATTEN_SEPARATOR; if (pwriter_opts->oquoting == QUOTE_UNSPECIFIED) pwriter_opts->oquoting = DEFAULT_OQUOTING; } // ---------------------------------------------------------------- // For mapper join which has its own input-format overrides. // // Mainly this just takes the main-opts flag whenever the join-opts flag was not // specified by the user. But it's a bit more complex when main and join input // formats are different. Example: main input format is CSV, for which IPS is // "(N/A)", and join input format is DKVP. Then we should not use "(N/A)" // for DKVP IPS. However if main input format were DKVP with IPS set to ":", // then we should take that. // // The logic is: // // * If the join input format was unspecified, take all unspecified values from // main opts. // // * If the join input format was specified and is the same as main input // format, take unspecified values from main opts. // // * If the join input format was specified and is not the same as main input // format, take unspecified values from defaults for the join input format. void cli_merge_reader_opts(cli_reader_opts_t* pfunc_opts, cli_reader_opts_t* pmain_opts) { if (pfunc_opts->ifile_fmt == NULL) { pfunc_opts->ifile_fmt = pmain_opts->ifile_fmt; } if (streq(pfunc_opts->ifile_fmt, pmain_opts->ifile_fmt)) { if (pfunc_opts->irs == NULL) pfunc_opts->irs = pmain_opts->irs; if (pfunc_opts->ifs == NULL) pfunc_opts->ifs = pmain_opts->ifs; if (pfunc_opts->ips == NULL) pfunc_opts->ips = pmain_opts->ips; if (pfunc_opts->allow_repeat_ifs == NEITHER_TRUE_NOR_FALSE) pfunc_opts->allow_repeat_ifs = pmain_opts->allow_repeat_ifs; if (pfunc_opts->allow_repeat_ips == NEITHER_TRUE_NOR_FALSE) pfunc_opts->allow_repeat_ips = pmain_opts->allow_repeat_ips; } else { if (pfunc_opts->irs == NULL) pfunc_opts->irs = lhmss_get_or_die(get_default_rses(), pfunc_opts->ifile_fmt); if (pfunc_opts->ifs == NULL) pfunc_opts->ifs = lhmss_get_or_die(get_default_fses(), pfunc_opts->ifile_fmt); if (pfunc_opts->ips == NULL) pfunc_opts->ips = lhmss_get_or_die(get_default_pses(), pfunc_opts->ifile_fmt); if (pfunc_opts->allow_repeat_ifs == NEITHER_TRUE_NOR_FALSE) pfunc_opts->allow_repeat_ifs = lhmsll_get_or_die(get_default_repeat_ifses(), pfunc_opts->ifile_fmt); if (pfunc_opts->allow_repeat_ips == NEITHER_TRUE_NOR_FALSE) pfunc_opts->allow_repeat_ips = lhmsll_get_or_die(get_default_repeat_ipses(), pfunc_opts->ifile_fmt); } if (pfunc_opts->json_array_ingest == JSON_ARRAY_INGEST_UNSPECIFIED) pfunc_opts->json_array_ingest = pmain_opts->json_array_ingest; if (pfunc_opts->use_implicit_csv_header == NEITHER_TRUE_NOR_FALSE) pfunc_opts->use_implicit_csv_header = pmain_opts->use_implicit_csv_header; if (pfunc_opts->allow_ragged_csv_input == NEITHER_TRUE_NOR_FALSE) pfunc_opts->allow_ragged_csv_input = pmain_opts->allow_ragged_csv_input; if (pfunc_opts->use_mmap_for_read == NEITHER_TRUE_NOR_FALSE) pfunc_opts->use_mmap_for_read = pmain_opts->use_mmap_for_read; if (pfunc_opts->input_json_flatten_separator == NULL) pfunc_opts->input_json_flatten_separator = pmain_opts->input_json_flatten_separator; } // Similar to cli_merge_reader_opts but for mapper tee & mapper put which have their // own output-format overrides. void cli_merge_writer_opts(cli_writer_opts_t* pfunc_opts, cli_writer_opts_t* pmain_opts) { if (pfunc_opts->ofile_fmt == NULL) { pfunc_opts->ofile_fmt = pmain_opts->ofile_fmt; } if (streq(pfunc_opts->ofile_fmt, pmain_opts->ofile_fmt)) { if (pfunc_opts->ors == NULL) pfunc_opts->ors = pmain_opts->ors; if (pfunc_opts->ofs == NULL) pfunc_opts->ofs = pmain_opts->ofs; if (pfunc_opts->ops == NULL) pfunc_opts->ops = pmain_opts->ops; } else { if (pfunc_opts->ors == NULL) pfunc_opts->ors = lhmss_get_or_die(get_default_rses(), pfunc_opts->ofile_fmt); if (pfunc_opts->ofs == NULL) pfunc_opts->ofs = lhmss_get_or_die(get_default_fses(), pfunc_opts->ofile_fmt); if (pfunc_opts->ops == NULL) pfunc_opts->ops = lhmss_get_or_die(get_default_pses(), pfunc_opts->ofile_fmt); } if (pfunc_opts->headerless_csv_output == NEITHER_TRUE_NOR_FALSE) pfunc_opts->headerless_csv_output = pmain_opts->headerless_csv_output; if (pfunc_opts->right_justify_xtab_value == NEITHER_TRUE_NOR_FALSE) pfunc_opts->right_justify_xtab_value = pmain_opts->right_justify_xtab_value; if (pfunc_opts->right_align_pprint == NEITHER_TRUE_NOR_FALSE) pfunc_opts->right_align_pprint = pmain_opts->right_align_pprint; if (pfunc_opts->pprint_barred == NEITHER_TRUE_NOR_FALSE) pfunc_opts->pprint_barred = pmain_opts->pprint_barred; if (pfunc_opts->stack_json_output_vertically == NEITHER_TRUE_NOR_FALSE) pfunc_opts->stack_json_output_vertically = pmain_opts->stack_json_output_vertically; if (pfunc_opts->wrap_json_output_in_outer_list == NEITHER_TRUE_NOR_FALSE) pfunc_opts->wrap_json_output_in_outer_list = pmain_opts->wrap_json_output_in_outer_list; if (pfunc_opts->json_quote_int_keys == NEITHER_TRUE_NOR_FALSE) pfunc_opts->json_quote_int_keys = pmain_opts->json_quote_int_keys; if (pfunc_opts->json_quote_non_string_values == NEITHER_TRUE_NOR_FALSE) pfunc_opts->json_quote_non_string_values = pmain_opts->json_quote_non_string_values; if (pfunc_opts->output_json_flatten_separator == NULL) pfunc_opts->output_json_flatten_separator = pmain_opts->output_json_flatten_separator; if (pfunc_opts->oosvar_flatten_separator == NULL) pfunc_opts->oosvar_flatten_separator = pmain_opts->oosvar_flatten_separator; if (pfunc_opts->oquoting == QUOTE_UNSPECIFIED) pfunc_opts->oquoting = pmain_opts->oquoting; } // ---------------------------------------------------------------- static int handle_terminal_usage(char** argv, int argc, int argi) { if (streq(argv[argi], "--version")) { printf("Miller %s\n", VERSION_STRING); return TRUE; } else if (streq(argv[argi], "-h")) { main_usage_long(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--help")) { main_usage_long(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--print-type-arithmetic-info")) { print_type_arithmetic_info(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--help-all-verbs")) { usage_all_verbs(MLR_GLOBALS.bargv0); } else if (streq(argv[argi], "--list-all-verbs") || streq(argv[argi], "-l")) { list_all_verbs(stdout, ""); return TRUE; } else if (streq(argv[argi], "--list-all-verbs-raw") || streq(argv[argi], "-L")) { list_all_verbs_raw(stdout); return TRUE; } else if (streq(argv[argi], "--list-all-functions-raw") || streq(argv[argi], "-F")) { fmgr_t* pfmgr = fmgr_alloc(); fmgr_list_all_functions_raw(pfmgr, stdout); fmgr_free(pfmgr, NULL); return TRUE; } else if (streq(argv[argi], "--help-all-functions") || streq(argv[argi], "-f")) { fmgr_t* pfmgr = fmgr_alloc(); fmgr_function_usage(pfmgr, stdout, NULL); fmgr_free(pfmgr, NULL); return TRUE; } else if (streq(argv[argi], "--help-function") || streq(argv[argi], "--hf")) { check_arg_count(argv, argi, argc, 2); fmgr_t* pfmgr = fmgr_alloc(); fmgr_function_usage(pfmgr, stdout, argv[argi+1]); fmgr_free(pfmgr, NULL); return TRUE; } else if (streq(argv[argi], "--list-all-keywords-raw") || streq(argv[argi], "-K")) { mlr_dsl_list_all_keywords_raw(stdout); return TRUE; } else if (streq(argv[argi], "--help-all-keywords") || streq(argv[argi], "-k")) { mlr_dsl_keyword_usage(stdout, NULL); return TRUE; } else if (streq(argv[argi], "--help-keyword") || streq(argv[argi], "--hk")) { check_arg_count(argv, argi, argc, 2); mlr_dsl_keyword_usage(stdout, argv[argi+1]); return TRUE; // main-usage subsections, individually accessible for the benefit of // the manpage-autogenerator } else if (streq(argv[argi], "--usage-synopsis")) { main_usage_synopsis(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-examples")) { main_usage_examples(stdout, MLR_GLOBALS.bargv0, ""); return TRUE; } else if (streq(argv[argi], "--usage-list-all-verbs")) { list_all_verbs(stdout, ""); return TRUE; } else if (streq(argv[argi], "--usage-help-options")) { main_usage_help_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-functions")) { main_usage_functions(stdout, MLR_GLOBALS.bargv0, ""); return TRUE; } else if (streq(argv[argi], "--usage-data-format-examples")) { main_usage_data_format_examples(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-data-format-options")) { main_usage_data_format_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-comments-in-data")) { main_usage_comments_in_data(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-format-conversion-keystroke-saver-options")) { main_usage_format_conversion_keystroke_saver_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-compressed-data-options")) { main_usage_compressed_data_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-separator-options")) { main_usage_separator_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-csv-options")) { main_usage_csv_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-double-quoting")) { main_usage_double_quoting(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-numerical-formatting")) { main_usage_numerical_formatting(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-other-options")) { main_usage_other_options(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-then-chaining")) { main_usage_then_chaining(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-auxents")) { main_usage_auxents(stdout, MLR_GLOBALS.bargv0); return TRUE; } else if (streq(argv[argi], "--usage-see-also")) { main_usage_see_also(stdout, MLR_GLOBALS.bargv0); return TRUE; } return FALSE; } // Returns TRUE if the current flag was handled. int cli_handle_reader_options(char** argv, int argc, int *pargi, cli_reader_opts_t* preader_opts) { int argi = *pargi; int oargi = argi; if (streq(argv[argi], "--irs")) { check_arg_count(argv, argi, argc, 2); preader_opts->irs = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--ifs")) { check_arg_count(argv, argi, argc, 2); preader_opts->ifs = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--repifs")) { preader_opts->allow_repeat_ifs = TRUE; argi += 1; } else if (streq(argv[argi], "--json-fatal-arrays-on-input")) { preader_opts->json_array_ingest = JSON_ARRAY_INGEST_FATAL; argi += 1; } else if (streq(argv[argi], "--json-skip-arrays-on-input")) { preader_opts->json_array_ingest = JSON_ARRAY_INGEST_SKIP; argi += 1; } else if (streq(argv[argi], "--json-map-arrays-on-input")) { preader_opts->json_array_ingest = JSON_ARRAY_INGEST_AS_MAP; argi += 1; } else if (streq(argv[argi], "--implicit-csv-header")) { preader_opts->use_implicit_csv_header = TRUE; argi += 1; } else if (streq(argv[argi], "--allow-ragged-csv-input") || streq(argv[argi], "--ragged")) { preader_opts->allow_ragged_csv_input = TRUE; argi += 1; } else if (streq(argv[argi], "--ips")) { check_arg_count(argv, argi, argc, 2); preader_opts->ips = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "-i")) { check_arg_count(argv, argi, argc, 2); if (!lhmss_has_key(get_default_rses(), argv[argi+1])) { fprintf(stderr, "%s: unrecognized input format \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); exit(1); } preader_opts->ifile_fmt = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--igen")) { // xxx temp preader_opts->ifile_fmt = "gen"; argi += 1; } else if (streq(argv[argi], "--gen-start")) { // xxx temp preader_opts->ifile_fmt = "gen"; check_arg_count(argv, argi, argc, 2); if (sscanf(argv[argi+1], "%lld", &preader_opts->generator_opts.start) != 1) { fprintf(stderr, "%s: could not scan \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); } argi += 2; } else if (streq(argv[argi], "--gen-stop")) { // xxx temp preader_opts->ifile_fmt = "gen"; check_arg_count(argv, argi, argc, 2); if (sscanf(argv[argi+1], "%lld", &preader_opts->generator_opts.stop) != 1) { fprintf(stderr, "%s: could not scan \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); } argi += 2; } else if (streq(argv[argi], "--gen-step")) { // xxx temp preader_opts->ifile_fmt = "gen"; check_arg_count(argv, argi, argc, 2); if (sscanf(argv[argi+1], "%lld", &preader_opts->generator_opts.step) != 1) { fprintf(stderr, "%s: could not scan \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); } argi += 2; } else if (streq(argv[argi], "--icsv")) { preader_opts->ifile_fmt = "csv"; argi += 1; } else if (streq(argv[argi], "--icsvlite")) { preader_opts->ifile_fmt = "csvlite"; argi += 1; } else if (streq(argv[argi], "--itsv")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; argi += 1; } else if (streq(argv[argi], "--itsvlite")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = "\t"; argi += 1; } else if (streq(argv[argi], "--iasv")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = ASV_FS; preader_opts->irs = ASV_RS; argi += 1; } else if (streq(argv[argi], "--iasvlite")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = ASV_FS; preader_opts->irs = ASV_RS; argi += 1; } else if (streq(argv[argi], "--iusv")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = USV_FS; preader_opts->irs = USV_RS; argi += 1; } else if (streq(argv[argi], "--iusvlite")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = USV_FS; preader_opts->irs = USV_RS; argi += 1; } else if (streq(argv[argi], "--idkvp")) { preader_opts->ifile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--ijson")) { preader_opts->ifile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--inidx")) { preader_opts->ifile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--ixtab")) { preader_opts->ifile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--ipprint")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; argi += 1; } else if (streq(argv[argi], "--mmap")) { preader_opts->use_mmap_for_read = TRUE; argi += 1; } else if (streq(argv[argi], "--no-mmap")) { preader_opts->use_mmap_for_read = FALSE; argi += 1; } else if (streq(argv[argi], "--mmap-below")) { check_arg_count(argv, argi, argc, 2); preader_opts->use_mmap_for_read = TRUE; long long llmax; if (sscanf(argv[argi+1], "%lld", &llmax) != 1) { fprintf(stderr, "%s: could not scan \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); } preader_opts->max_file_size_for_mmap = llmax; argi += 2; } else if (streq(argv[argi], "--prepipe")) { check_arg_count(argv, argi, argc, 2); preader_opts->prepipe = argv[argi+1]; preader_opts->use_mmap_for_read = FALSE; argi += 2; } else if (streq(argv[argi], "--skip-comments")) { preader_opts->comment_string = DEFAULT_COMMENT_STRING; preader_opts->comment_handling = SKIP_COMMENTS; argi += 1; } else if (streq(argv[argi], "--skip-comments-with")) { check_arg_count(argv, argi, argc, 2); preader_opts->comment_string = argv[argi+1]; preader_opts->comment_handling = SKIP_COMMENTS; argi += 2; } else if (streq(argv[argi], "--pass-comments")) { preader_opts->comment_string = DEFAULT_COMMENT_STRING; preader_opts->comment_handling = PASS_COMMENTS; argi += 1; } else if (streq(argv[argi], "--pass-comments-with")) { check_arg_count(argv, argi, argc, 2); preader_opts->comment_string = argv[argi+1]; preader_opts->comment_handling = PASS_COMMENTS; argi += 2; } *pargi = argi; return argi != oargi; } // Returns TRUE if the current flag was handled. int cli_handle_writer_options(char** argv, int argc, int *pargi, cli_writer_opts_t* pwriter_opts) { int argi = *pargi; int oargi = argi; if (streq(argv[argi], "--ors")) { check_arg_count(argv, argi, argc, 2); pwriter_opts->ors = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--ofs")) { check_arg_count(argv, argi, argc, 2); pwriter_opts->ofs = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--headerless-csv-output")) { pwriter_opts->headerless_csv_output = TRUE; argi += 1; } else if (streq(argv[argi], "--ops")) { check_arg_count(argv, argi, argc, 2); pwriter_opts->ops = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--xvright")) { pwriter_opts->right_justify_xtab_value = TRUE; argi += 1; } else if (streq(argv[argi], "--jvstack")) { pwriter_opts->stack_json_output_vertically = TRUE; argi += 1; } else if (streq(argv[argi], "--jlistwrap")) { pwriter_opts->wrap_json_output_in_outer_list = TRUE; argi += 1; } else if (streq(argv[argi], "--jknquoteint")) { pwriter_opts->json_quote_int_keys = FALSE; argi += 1; } else if (streq(argv[argi], "--jquoteall")) { pwriter_opts->json_quote_non_string_values = TRUE; argi += 1; } else if (streq(argv[argi], "--jvquoteall")) { pwriter_opts->json_quote_non_string_values = TRUE; argi += 1; } else if (streq(argv[argi], "--vflatsep")) { check_arg_count(argv, argi, argc, 2); pwriter_opts->oosvar_flatten_separator = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "-o")) { check_arg_count(argv, argi, argc, 2); if (!lhmss_has_key(get_default_rses(), argv[argi+1])) { fprintf(stderr, "%s: unrecognized output format \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); exit(1); } pwriter_opts->ofile_fmt = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--ocsv")) { pwriter_opts->ofile_fmt = "csv"; argi += 1; } else if (streq(argv[argi], "--ocsvlite")) { pwriter_opts->ofile_fmt = "csvlite"; argi += 1; } else if (streq(argv[argi], "--otsv")) { pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--otsvlite")) { pwriter_opts->ofile_fmt = "csvlite"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--oasv")) { pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ofs = ASV_FS; pwriter_opts->ors = ASV_RS; argi += 1; } else if (streq(argv[argi], "--oasvlite")) { pwriter_opts->ofile_fmt = "csvlite"; pwriter_opts->ofs = ASV_FS; pwriter_opts->ors = ASV_RS; argi += 1; } else if (streq(argv[argi], "--ousv")) { pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ofs = USV_FS; pwriter_opts->ors = USV_RS; argi += 1; } else if (streq(argv[argi], "--ousvlite")) { pwriter_opts->ofile_fmt = "csvlite"; pwriter_opts->ofs = USV_FS; pwriter_opts->ors = USV_RS; argi += 1; } else if (streq(argv[argi], "--omd")) { pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--odkvp")) { pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--ojson")) { pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--onidx")) { pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--oxtab")) { pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--opprint")) { pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--right")) { pwriter_opts->right_align_pprint = TRUE; argi += 1; } else if (streq(argv[argi], "--barred")) { pwriter_opts->pprint_barred = TRUE; argi += 1; } else if (streq(argv[argi], "--quote-all")) { pwriter_opts->oquoting = QUOTE_ALL; argi += 1; } else if (streq(argv[argi], "--quote-none")) { pwriter_opts->oquoting = QUOTE_NONE; argi += 1; } else if (streq(argv[argi], "--quote-minimal")) { pwriter_opts->oquoting = QUOTE_MINIMAL; argi += 1; } else if (streq(argv[argi], "--quote-numeric")) { pwriter_opts->oquoting = QUOTE_NUMERIC; argi += 1; } else if (streq(argv[argi], "--quote-original")) { pwriter_opts->oquoting = QUOTE_ORIGINAL; argi += 1; } *pargi = argi; return argi != oargi; } // Returns TRUE if the current flag was handled. int cli_handle_reader_writer_options(char** argv, int argc, int *pargi, cli_reader_opts_t* preader_opts, cli_writer_opts_t* pwriter_opts) { int argi = *pargi; int oargi = argi; if (streq(argv[argi], "--rs")) { check_arg_count(argv, argi, argc, 2); preader_opts->irs = cli_sep_from_arg(argv[argi+1]); pwriter_opts->ors = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--fs")) { check_arg_count(argv, argi, argc, 2); preader_opts->ifs = cli_sep_from_arg(argv[argi+1]); pwriter_opts->ofs = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "-p")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "nidx"; preader_opts->ifs = " "; pwriter_opts->ofs = " "; preader_opts->allow_repeat_ifs = TRUE; argi += 1; } else if (streq(argv[argi], "--ps")) { check_arg_count(argv, argi, argc, 2); preader_opts->ips = cli_sep_from_arg(argv[argi+1]); pwriter_opts->ops = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--jflatsep")) { check_arg_count(argv, argi, argc, 2); preader_opts->input_json_flatten_separator = cli_sep_from_arg(argv[argi+1]); pwriter_opts->output_json_flatten_separator = cli_sep_from_arg(argv[argi+1]); argi += 2; } else if (streq(argv[argi], "--io")) { check_arg_count(argv, argi, argc, 2); if (!lhmss_has_key(get_default_rses(), argv[argi+1])) { fprintf(stderr, "%s: unrecognized I/O format \"%s\".\n", MLR_GLOBALS.bargv0, argv[argi+1]); exit(1); } preader_opts->ifile_fmt = argv[argi+1]; pwriter_opts->ofile_fmt = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--csv")) { preader_opts->ifile_fmt = "csv"; pwriter_opts->ofile_fmt = "csv"; argi += 1; } else if (streq(argv[argi], "--csvlite")) { preader_opts->ifile_fmt = "csvlite"; pwriter_opts->ofile_fmt = "csvlite"; argi += 1; } else if (streq(argv[argi], "--tsv")) { preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csv"; preader_opts->ifs = "\t"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--tsvlite") || streq(argv[argi], "-t")) { preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csvlite"; preader_opts->ifs = "\t"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--asv")) { preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csv"; preader_opts->ifs = ASV_FS; pwriter_opts->ofs = ASV_FS; preader_opts->irs = ASV_RS; pwriter_opts->ors = ASV_RS; argi += 1; } else if (streq(argv[argi], "--asvlite")) { preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csvlite"; preader_opts->ifs = ASV_FS; pwriter_opts->ofs = ASV_FS; preader_opts->irs = ASV_RS; pwriter_opts->ors = ASV_RS; argi += 1; } else if (streq(argv[argi], "--usv")) { preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csv"; preader_opts->ifs = USV_FS; pwriter_opts->ofs = USV_FS; preader_opts->irs = USV_RS; pwriter_opts->ors = USV_RS; argi += 1; } else if (streq(argv[argi], "--usvlite")) { preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csvlite"; preader_opts->ifs = USV_FS; pwriter_opts->ofs = USV_FS; preader_opts->irs = USV_RS; pwriter_opts->ors = USV_RS; argi += 1; } else if (streq(argv[argi], "--dkvp")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--json")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--nidx")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "-T")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "nidx"; preader_opts->ifs = "\t"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--xtab")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--pprint")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--c2t")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--c2d")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--c2n")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--c2j")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--c2p")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--c2x")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--c2m")) { preader_opts->ifile_fmt = "csv"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--t2c")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; argi += 1; } else if (streq(argv[argi], "--t2d")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--t2n")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--t2j")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--t2p")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--t2x")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--t2m")) { preader_opts->ifile_fmt = "csv"; preader_opts->ifs = "\t"; preader_opts->irs = "auto"; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--d2c")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; argi += 1; } else if (streq(argv[argi], "--d2t")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--d2n")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--d2j")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--d2p")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--d2x")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--d2m")) { preader_opts->ifile_fmt = "dkvp"; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--n2c")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; argi += 1; } else if (streq(argv[argi], "--n2t")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--n2d")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--n2j")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--n2p")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--n2x")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--n2m")) { preader_opts->ifile_fmt = "nidx"; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--j2c")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; argi += 1; } else if (streq(argv[argi], "--j2t")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--j2d")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--j2n")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--j2p")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--j2x")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--j2m")) { preader_opts->ifile_fmt = "json"; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--p2c")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; argi += 1; } else if (streq(argv[argi], "--p2t")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--p2d")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--p2n")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--p2j")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--p2x")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "xtab"; argi += 1; } else if (streq(argv[argi], "--p2m")) { preader_opts->ifile_fmt = "csvlite"; preader_opts->ifs = " "; preader_opts->allow_repeat_ifs = TRUE; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "--x2c")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; argi += 1; } else if (streq(argv[argi], "--x2t")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "csv"; pwriter_opts->ors = "auto"; pwriter_opts->ofs = "\t"; argi += 1; } else if (streq(argv[argi], "--x2d")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "dkvp"; argi += 1; } else if (streq(argv[argi], "--x2n")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "nidx"; argi += 1; } else if (streq(argv[argi], "--x2j")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "json"; argi += 1; } else if (streq(argv[argi], "--x2p")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "pprint"; argi += 1; } else if (streq(argv[argi], "--x2m")) { preader_opts->ifile_fmt = "xtab"; pwriter_opts->ofile_fmt = "markdown"; argi += 1; } else if (streq(argv[argi], "-N")) { preader_opts->use_implicit_csv_header = TRUE; pwriter_opts->headerless_csv_output = TRUE; argi += 1; } *pargi = argi; return argi != oargi; } // ---------------------------------------------------------------- static char* lhmss_get_or_die(lhmss_t* pmap, char* key) { char* value = lhmss_get(pmap, key); MLR_INTERNAL_CODING_ERROR_IF(value == NULL); return value; } // ---------------------------------------------------------------- static int lhmsll_get_or_die(lhmsll_t* pmap, char* key) { MLR_INTERNAL_CODING_ERROR_UNLESS(lhmsll_has_key(pmap, key)); return lhmsll_get(pmap, key); } miller-5.6.2/c/cli/mlrcli.h000066400000000000000000000104001354153536500154410ustar00rootroot00000000000000// ================================================================ // Miller command-line parsing // ================================================================ #ifndef MLRCLI_H #define MLRCLI_H #include "lib/context.h" #include "containers/slls.h" #include "containers/sllv.h" #include "cli/quoting.h" #include "cli/comment_handling.h" #include "cli/json_array_ingest.h" #include "containers/lhmsll.h" #include "containers/lhmss.h" #include // ---------------------------------------------------------------- typedef struct _genereator_opts_t { char* field_name; // xxx to do: convert to mv_t long long start; long long stop; long long step; } generator_opts_t; typedef struct _cli_reader_opts_t { char* ifile_fmt; char* irs; char* ifs; char* ips; char* input_json_flatten_separator; json_array_ingest_t json_array_ingest; int allow_repeat_ifs; int allow_repeat_ips; int use_implicit_csv_header; int allow_ragged_csv_input; int use_mmap_for_read; // Command for popen on input, e.g. "zcat -cf <". Can be null in which case // files are read directly rather than through a pipe. char* prepipe; comment_handling_t comment_handling; char* comment_string; // https://github.com/johnkerl/miller/issues/160 ssize_t max_file_size_for_mmap; // Fake internal-data-generator 'reader' generator_opts_t generator_opts; } cli_reader_opts_t; // ---------------------------------------------------------------- typedef struct _cli_writer_opts_t { char* ofile_fmt; char* ors; char* ofs; char* ops; int headerless_csv_output; int right_justify_xtab_value; int right_align_pprint; int pprint_barred; int stack_json_output_vertically; int wrap_json_output_in_outer_list; int json_quote_int_keys; int json_quote_non_string_values; char* output_json_flatten_separator; char* oosvar_flatten_separator; quoting_t oquoting; } cli_writer_opts_t; // ---------------------------------------------------------------- typedef struct _cli_opts_t { cli_reader_opts_t reader_opts; cli_writer_opts_t writer_opts; // These are used to construct the mapper list. In particular, for in-place mode // they're reconstructed for each file. We make copies since each pass through a // CLI-parser operates destructively, principally by running strtok over // comma-delimited field-name lists. char** original_argv; char** non_in_place_argv; int argc; int mapper_argb; slls_t* filenames; char* ofmt; long long nr_progress_mod; int do_in_place; } cli_opts_t; // ---------------------------------------------------------------- cli_opts_t* parse_command_line(int argc, char** argv, sllv_t** ppmapper_list); // See stream.c. The idea is that the mapper-chain is constructed once for normal stream-over-all-files // mode, but per-file for in-place mode. sllv_t* cli_parse_mappers(char** argv, int* pargi, int argc, cli_opts_t* popts, int* pno_input); int cli_handle_reader_options(char** argv, int argc, int *pargi, cli_reader_opts_t* preader_opts); int cli_handle_writer_options(char** argv, int argc, int *pargi, cli_writer_opts_t* pwriter_opts); int cli_handle_reader_writer_options(char** argv, int argc, int *pargi, cli_reader_opts_t* preader_opts, cli_writer_opts_t* pwriter_opts); void cli_opts_init(cli_opts_t* popts); void cli_reader_opts_init(cli_reader_opts_t* preader_opts); void cli_writer_opts_init(cli_writer_opts_t* pwriter_opts); void cli_apply_defaults(cli_opts_t* popts); void cli_apply_reader_defaults(cli_reader_opts_t* preader_opts); void cli_apply_writer_defaults(cli_writer_opts_t* pwriter_opts); // For mapper join which has its separate input-format overrides: void cli_merge_reader_opts(cli_reader_opts_t* pfunc_opts, cli_reader_opts_t* pmain_opts); // For mapper tee & mapper put which have their separate output-format overrides: void cli_merge_writer_opts(cli_writer_opts_t* pfunc_opts, cli_writer_opts_t* pmain_opts); // Stream context is for lrec-writer drain on tee et al. when using aggregated // output. E.g. pretty-print output has column widths which are only computable // after all output records have been retained. The free methods are used as // drain triggers. void cli_opts_free(cli_opts_t* popts); // The caller can unconditionally free the return value char* cli_sep_from_arg(char* arg); #endif // MLRCLI_H miller-5.6.2/c/cli/quoting.h000066400000000000000000000002771354153536500156600ustar00rootroot00000000000000#ifndef QUOTING_H #define QUOTING_H typedef enum _quoting_t { QUOTE_ALL, QUOTE_NONE, QUOTE_MINIMAL, QUOTE_NUMERIC, QUOTE_ORIGINAL, QUOTE_UNSPECIFIED, } quoting_t; #endif // QUOTING_H miller-5.6.2/c/cmake000077500000000000000000000005251354153536500142540ustar00rootroot00000000000000#!/bin/bash export CCOPT="clang -std=gnu99 -I. -I.. -Wall -Werror -O3 -lm" export CCDEBUG="clang -std=gnu99 -I. -I.. -Wall -Werror -g -lm" export DSLCC="clang" #export DSLCFLAGS="-I.. -Wall -O2" export DSLCFLAGS="-I.. -Wall -O2 -g" make -e -f Makefile.no-autoconfig -C parsing clean make -e -f Makefile.no-autoconfig mlr mlrg miller-5.6.2/c/containers/000077500000000000000000000000001354153536500154115ustar00rootroot00000000000000miller-5.6.2/c/containers/Makefile.am000066400000000000000000000017671354153536500174600ustar00rootroot00000000000000noinst_LTLIBRARIES= libcontainers.la libcontainers_la_SOURCES= \ boxed_xval.h \ dheap.c \ dheap.h \ dvector.c \ dvector.h \ header_keeper.c \ header_keeper.h \ hss.c \ hss.h \ join_bucket_keeper.c \ join_bucket_keeper.h \ lhms2v.c \ lhms2v.h \ lhmsi.c \ lhmsi.h \ lhmsll.c \ lhmsll.h \ lhmslv.c \ lhmslv.h \ lhmsmv.c \ lhmsmv.h \ lhmss.c \ lhmss.h \ lhmsv.c \ lhmsv.h \ local_stack.c \ local_stack.h \ loop_stack.c \ loop_stack.h \ lrec.c \ lrec.h \ mixutil.c \ mixutil.h \ mlhmmv.c \ mlhmmv.h \ parse_trie.c \ parse_trie.h \ percentile_keeper.c \ percentile_keeper.h \ rslls.c \ rslls.h \ sllmv.c \ sllmv.h \ slls.c \ slls.h \ sllv.c \ sllv.h \ top_keeper.c \ top_keeper.h \ type_decl.c \ type_decl.h \ xvfuncs.c \ xvfuncs.h libcontainers_la_LIBADD= \ ../lib/libmlr.la \ ../mapping/libmapping.la AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/containers/Makefile.in000066400000000000000000000503141354153536500174610ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/containers ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcontainers_la_DEPENDENCIES = ../lib/libmlr.la \ ../mapping/libmapping.la am_libcontainers_la_OBJECTS = dheap.lo dvector.lo header_keeper.lo \ hss.lo join_bucket_keeper.lo lhms2v.lo lhmsi.lo lhmsll.lo \ lhmslv.lo lhmsmv.lo lhmss.lo lhmsv.lo local_stack.lo \ loop_stack.lo lrec.lo mixutil.lo mlhmmv.lo parse_trie.lo \ percentile_keeper.lo rslls.lo sllmv.lo slls.lo sllv.lo \ top_keeper.lo type_decl.lo xvfuncs.lo libcontainers_la_OBJECTS = $(am_libcontainers_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcontainers_la_SOURCES) DIST_SOURCES = $(libcontainers_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libcontainers.la libcontainers_la_SOURCES = \ boxed_xval.h \ dheap.c \ dheap.h \ dvector.c \ dvector.h \ header_keeper.c \ header_keeper.h \ hss.c \ hss.h \ join_bucket_keeper.c \ join_bucket_keeper.h \ lhms2v.c \ lhms2v.h \ lhmsi.c \ lhmsi.h \ lhmsll.c \ lhmsll.h \ lhmslv.c \ lhmslv.h \ lhmsmv.c \ lhmsmv.h \ lhmss.c \ lhmss.h \ lhmsv.c \ lhmsv.h \ local_stack.c \ local_stack.h \ loop_stack.c \ loop_stack.h \ lrec.c \ lrec.h \ mixutil.c \ mixutil.h \ mlhmmv.c \ mlhmmv.h \ parse_trie.c \ parse_trie.h \ percentile_keeper.c \ percentile_keeper.h \ rslls.c \ rslls.h \ sllmv.c \ sllmv.h \ slls.c \ slls.h \ sllv.c \ sllv.h \ top_keeper.c \ top_keeper.h \ type_decl.c \ type_decl.h \ xvfuncs.c \ xvfuncs.h libcontainers_la_LIBADD = \ ../lib/libmlr.la \ ../mapping/libmapping.la AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/containers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/containers/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcontainers.la: $(libcontainers_la_OBJECTS) $(libcontainers_la_DEPENDENCIES) $(EXTRA_libcontainers_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcontainers_la_OBJECTS) $(libcontainers_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dheap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header_keeper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join_bucket_keeper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhms2v.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsll.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmslv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsmv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmss.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local_stack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop_stack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lrec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mixutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlhmmv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_trie.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/percentile_keeper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rslls.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sllmv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slls.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sllv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/top_keeper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type_decl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xvfuncs.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/containers/README.md000066400000000000000000000005021354153536500166650ustar00rootroot00000000000000# Miller containers These are generally very standard and simple programming-exercise kinds of things. There is some duplication of simple hash-map logic by key and value types: this is plain C with no templates or generics and I didn't want to do preprocessor tricks to reduce line count at the expense of code clarity. miller-5.6.2/c/containers/boxed_xval.h000066400000000000000000000026201354153536500177150ustar00rootroot00000000000000// ================================================================ // This is for map-valued contexts: LHS/RHS of assignments, // UDF/subroutine arguments, and UDF return values. // The is_ephemeral flag is TRUE for map-literals, function return values, and // data copied out of srecs. It is FALSE when the pointer is into an existing // data structure's memory (e.g. oosvars or locals). // ================================================================ #ifndef BOXED_XVAL_H #define BOXED_XVAL_H #include "../lib/mlrval.h" #include "../containers/mlhmmv.h" // ---------------------------------------------------------------- typedef struct _boxed_xval_t { mlhmmv_xvalue_t xval; char is_ephemeral; } boxed_xval_t; // ---------------------------------------------------------------- static inline boxed_xval_t box_ephemeral_val(mv_t val) { return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(val), .is_ephemeral = TRUE, }; } static inline boxed_xval_t box_non_ephemeral_val(mv_t val) { return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(val), .is_ephemeral = FALSE, }; } static inline boxed_xval_t box_ephemeral_xval(mlhmmv_xvalue_t xval) { return (boxed_xval_t) { .xval = xval, .is_ephemeral = TRUE, }; } static inline boxed_xval_t box_non_ephemeral_xval(mlhmmv_xvalue_t xval) { return (boxed_xval_t) { .xval = xval, .is_ephemeral = FALSE, }; } #endif // BOXED_XVAL_H miller-5.6.2/c/containers/dheap.c000066400000000000000000000152341354153536500166430ustar00rootroot00000000000000// ================================================================ // Zero-indexed max-heap of double. // John Kerl // 2012-06-02 // ================================================================ #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/dheap.h" // ---------------------------------------------------------------- // 1-up: left child 2*i // right child 2*i+1 // parent i/2 // 0-up: left child 2*i+1 // right child 2*i+2 // parent (i-1)/2 // Why: Example of 1-up i=10 l=20 r=21; 0-up i=9 l=19 r=20. // Or: 0-up i |-> 1-up i+1 |-> 1-up 2*i+2 |-> 0-up 2*i+1. // And likewise for right child & parent. static inline int dheap_left_child_index(int i, int n) { int li = 2*i+1; if (li >= n) return -1; else return li; } static inline int dheap_right_child_index(int i, int n) { int ri = 2*i+2; if (ri >= n) return -1; else return ri; } static inline int dheap_parent_index(int i, int n) { if (i == 0) return -1; else return (i-1)/2; } static inline void ptr_swap(double *pa, double *pb) { double temp = *pa; *pa = *pb; *pb = temp; } // ================================================================ dheap_t *dheap_alloc() { dheap_t *pdheap = mlr_malloc_or_die(sizeof(dheap_t)); pdheap->n = 0; pdheap->alloc_size = DHEAP_INIT_ALLOC_SIZE; pdheap->elements = mlr_malloc_or_die(pdheap->alloc_size*sizeof(double)); pdheap->is_malloced = 1; return pdheap; } // ---------------------------------------------------------------- dheap_t *dheap_from_array(double *array, int n) { dheap_t *pdheap = mlr_malloc_or_die(sizeof(dheap_t)); pdheap->n = 0; pdheap->alloc_size = n; pdheap->elements = array; pdheap->is_malloced = 0; return pdheap; } // ---------------------------------------------------------------- void dheap_free(dheap_t *pdheap) { if (pdheap == NULL) return; if (pdheap->elements != NULL) if (pdheap->is_malloced) free(pdheap->elements); pdheap->n = 0; pdheap->alloc_size = 0; pdheap->elements = NULL; free(pdheap); } // ================================================================ static void dheap_print_aux(dheap_t *pdheap, int i, int depth) { if (i >= pdheap->n) return; int w; printf("[%04d] ", i); for (w = 0; w < depth; w++) printf(" "); printf("%.8lf\n", pdheap->elements[i]); int li = dheap_left_child_index (i, pdheap->n); int ri = dheap_right_child_index(i, pdheap->n); if (li != -1) dheap_print_aux(pdheap, li, depth+1); if (ri != -1) dheap_print_aux(pdheap, ri, depth+1); } void dheap_print(dheap_t *pdheap) { printf("BEGIN DHEAP (n=%d):\n", pdheap->n); dheap_print_aux(pdheap, 0, 0); printf("END DHEAP\n"); } // ---------------------------------------------------------------- // 1 // 2 3 // 4 5 6 7 // 8 9 10 11 12 13 14 15 static int dheap_check_aux(dheap_t *pdheap, int i, char *file, int line) { int n = pdheap->n; double *pe = pdheap->elements; if (i >= n) return TRUE; int li = dheap_left_child_index (i, pdheap->n); int ri = dheap_right_child_index(i, pdheap->n); if (li != -1) { if (pe[i] < pe[li]) { fprintf(stderr, "dheap check fail %s:%d pe[%d]=%lf < pe[%d]=%lf\n", file, line, i, pe[i], li, pe[li]); return FALSE; } dheap_check_aux(pdheap, li, file, line); } if (ri != -1) { if (pe[i] < pe[ri]) { fprintf(stderr, "dheap check fail %s:%d pe[%d]=%lf < pe[%d]=%lf\n", file, line, i, pe[i], ri, pe[ri]); return FALSE; } dheap_check_aux(pdheap, ri, file, line); } return TRUE; } int dheap_check(dheap_t *pdheap, char *file, int line) { return dheap_check_aux(pdheap, 1, file, line); } // ---------------------------------------------------------------- static void dheap_bubble_up(dheap_t *pdheap, int i) { int pi = dheap_parent_index(i, pdheap->n); if (pi == -1) return; double *pe = pdheap->elements; if (pe[pi] < pe[i]) { ptr_swap(&pe[pi], &pe[i]); dheap_bubble_up(pdheap, pi); } } // ---------------------------------------------------------------- // 1 // 2 3 // 4 5 6 7 // 8 9 10 11 12 (n=13) void dheap_add(dheap_t *pdheap, double v) { if (pdheap->n >= pdheap->alloc_size) { if (!pdheap->is_malloced) { fprintf(stderr, "extension of non-malloced dheap!\n"); exit(1); } pdheap->alloc_size *= 2; pdheap->elements = (double *)mlr_realloc_or_die(pdheap->elements, pdheap->alloc_size*sizeof(double)); } pdheap->elements[pdheap->n++] = v; dheap_bubble_up(pdheap, pdheap->n-1); } // ---------------------------------------------------------------- // 1. Replace the root of the dheap with the last element on the last level. // 2. Compare the new root with its children; if they are in the correct order, // stop. // 3. If not, swap the element with one of its children and return to the // previous step. (Swap with its smaller child in a min-dheap and its larger // child in a max-dheap.) static void dheap_bubble_down(dheap_t *pdheap, int i) { int li = dheap_left_child_index(i, pdheap->n); if (li == -1) { // We add left to right, so this means left and right are both nil. return; } int ri = dheap_right_child_index(i, pdheap->n); double *pe = pdheap->elements; if (ri == -1) { // Right is nil, left is non-nil. if (pe[li] > pe[i]) { ptr_swap(&pe[li], &pe[i]); dheap_bubble_down(pdheap, li); } return; } // Now left and right are both non-nil. // // P 3 // L R 9 7 // a b c d 1 2 4 6 // // Cases: double *L = &pe[li]; double *P = &pe[i]; double *R = &pe[ri]; if (*L <= *P) { if (*R <= *P) { // 1. L <= R <= P: done. // 2. R <= L <= P: done. return; } else if (*P <= *R) { // 3. L <= P <= R: swap P&R; bubble down R. ptr_swap(R, P); dheap_bubble_down(pdheap, ri); } } else if (*R <= *P && *P <= *L) { // 4. R <= P <= L: swap P&L; bubble down L. ptr_swap(L, P); dheap_bubble_down(pdheap, li); } else if (*P <= *R && *R <= *L) { // 5. P <= R <= L: swap P&L; bubble down L. ptr_swap(L, P); dheap_bubble_down(pdheap, li); } else if (P <= L && L <= R) { // 6. P <= L <= R: swap P&R; bubble down R. ptr_swap(R, P); dheap_bubble_down(pdheap, ri); } } double dheap_remove(dheap_t *pdheap) { if (pdheap->n <= 0) { fprintf(stderr, "remove from empty dheap!\n"); exit(1); } double rv = pdheap->elements[0]; pdheap->elements[0] = pdheap->elements[pdheap->n-1]; pdheap->n--; dheap_bubble_down(pdheap, 0); return rv; } void dheap_sort(double *array, int n) { dheap_t *pdheap = dheap_from_array(array, n); int i; for (i = 0; i < n; i++) dheap_add(pdheap, pdheap->elements[i]); for (i = n-1; i >= 0; i--) pdheap->elements[i] = dheap_remove(pdheap); dheap_free(pdheap); } miller-5.6.2/c/containers/dheap.h000066400000000000000000000013161354153536500166440ustar00rootroot00000000000000// ================================================================ // Zero-indexed max-heap of doubles. // John Kerl // 2012-06-02 // ================================================================ #ifndef DHEAP_H #define DHEAP_H #define DHEAP_INIT_ALLOC_SIZE 1024 // Power of two typedef struct _dheap_t { int n; int alloc_size; char is_malloced; double *elements; } dheap_t; dheap_t *dheap_alloc(); dheap_t *dheap_from_array(double *array, int n); void dheap_free(dheap_t *pheap); void dheap_add(dheap_t *pdheap, double v); double dheap_remove(dheap_t *pdheap); // For debug void dheap_print(dheap_t *pdheap); // For unit test int dheap_check(dheap_t *pdheap, char *file, int line); #endif // DHEAP_H miller-5.6.2/c/containers/dvector.c000066400000000000000000000020441354153536500172230ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/dvector.h" // ---------------------------------------------------------------- dvector_t* dvector_alloc(unsigned long long initial_capacity) { unsigned long long capacity = initial_capacity; dvector_t* pdvector = mlr_malloc_or_die(sizeof(dvector_t)); pdvector->data = mlr_malloc_or_die(capacity*sizeof(double)); pdvector->size = 0; pdvector->capacity = capacity; return pdvector; } // ---------------------------------------------------------------- void dvector_free(dvector_t* pdvector) { if (pdvector == NULL) return; free(pdvector->data); pdvector->data = NULL; pdvector->size = 0; pdvector->capacity = 0; free(pdvector); } void dvector_append(dvector_t* pdvector, double value) { if (pdvector->size >= pdvector->capacity) { pdvector->capacity = (unsigned long long)(pdvector->capacity * 2); pdvector->data = (double*)mlr_realloc_or_die(pdvector->data, pdvector->capacity*sizeof(double)); } pdvector->data[pdvector->size++] = value; } miller-5.6.2/c/containers/dvector.h000066400000000000000000000005121354153536500172260ustar00rootroot00000000000000#ifndef DVECTOR_H #define DVECTOR_H typedef struct _dvector_t { double* data; unsigned long long size; unsigned long long capacity; } dvector_t; dvector_t* dvector_alloc(unsigned long long initial_capacity); void dvector_free(dvector_t* pdvector); void dvector_append(dvector_t* pdvector, double value); #endif // DVECTOR_H miller-5.6.2/c/containers/header_keeper.c000066400000000000000000000007731354153536500203470ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "containers/header_keeper.h" header_keeper_t* header_keeper_alloc(char* line, slls_t* pkeys) { header_keeper_t* pheader_keeper = mlr_malloc_or_die(sizeof(header_keeper_t)); pheader_keeper->line = line; pheader_keeper->pkeys = pkeys; return pheader_keeper; } void header_keeper_free(header_keeper_t* pheader_keeper) { if (pheader_keeper == NULL) return; free(pheader_keeper->line); slls_free(pheader_keeper->pkeys); free(pheader_keeper); } miller-5.6.2/c/containers/header_keeper.h000066400000000000000000000010361354153536500203450ustar00rootroot00000000000000// ================================================================ // Retains field names from CSV header lines across record reads. // See also c/README.md. // ================================================================ #ifndef HEADER_KEEPER_H #define HEADER_KEEPER_H #include "containers/slls.h" typedef struct _header_keeper_t { char* line; slls_t* pkeys; } header_keeper_t; header_keeper_t* header_keeper_alloc(char* line, slls_t* pkeys); void header_keeper_free(header_keeper_t* pheader_keeper); #endif // HEADER_KEEPER_H miller-5.6.2/c/containers/hss.c000066400000000000000000000145511354153536500163600ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-valued hash set with linear probing for // collisions. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/hss.h" // ---------------------------------------------------------------- #define INITIAL_ARRAY_LENGTH 128 #define LOAD_FACTOR 0.7 #define OCCUPIED 444 #define DELETED 555 #define EMPTY 666 // ================================================================ static void hsse_clear(hsse_t *pentry) { pentry->key = NULL; pentry->state = EMPTY; pentry->ideal_index = -1; } // ---------------------------------------------------------------- static hsse_t* hss_make_alloc_array(int length) { hsse_t* array = (hsse_t*)mlr_malloc_or_die(sizeof(hsse_t) * length); for (int i = 0; i < length; i++) hsse_clear(&array[i]); return array; } static void hss_init(hss_t *pset, int length) { pset->num_occupied = 0; pset->num_freed = 0; pset->array_length = length; pset->array = hss_make_alloc_array(length); } hss_t* hss_alloc() { hss_t* pset = mlr_malloc_or_die(sizeof(hss_t)); hss_init(pset, INITIAL_ARRAY_LENGTH); return pset; } void hss_free(hss_t* pset) { if (pset == NULL) return; free(pset->array); pset->array = NULL; pset->num_occupied = 0; pset->num_freed = 0; pset->array_length = 0; free(pset); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int hss_find_index_for_key(hss_t* pset, char* key, int* pideal_index) { int hash = mlr_string_hash_func(key); int index = mlr_canonical_mod(hash, pset->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { hsse_t* pe = &pset->array[index]; if (pe->state == OCCUPIED) { char* ekey = pe->key; // Existing key found in chain. if (streq(key, ekey)) return index; } else if (pe->state == EMPTY) { return index; } // If the current entry has been freed, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pset->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pset->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); } // ---------------------------------------------------------------- static void hss_enlarge(hss_t* pset); void hss_add(hss_t* pset, char* key) { if ((pset->num_occupied + pset->num_freed) >= (pset->array_length*LOAD_FACTOR)) hss_enlarge(pset); int ideal_index = 0; int index = hss_find_index_for_key(pset, key, &ideal_index); hsse_t* pe = &pset->array[index]; if (pe->state == OCCUPIED) { // Existing key found in chain. Chaining already handled by hss_find_index_for_key. return; } else if (pe->state == EMPTY) { // End of chain. pe->key = key; pe->state = OCCUPIED; pe->ideal_index = ideal_index; pset->num_occupied++; } else { fprintf(stderr, "hss_find_index_for_key did not find end of chain.\n"); exit(1); } } // ---------------------------------------------------------------- static void hss_enlarge(hss_t* pset) { int old_array_length = pset->array_length; hsse_t* old_array = pset->array; hss_init(pset, pset->array_length*2); for (int index = 0; index < old_array_length; index++) { hsse_t e = old_array[index]; if (e.state == OCCUPIED) hss_add(pset, e.key); } free(old_array); } // ---------------------------------------------------------------- int hss_has(hss_t* pset, char* key) { int ideal_index = 0; int index = hss_find_index_for_key(pset, key, &ideal_index); hsse_t* pe = &pset->array[index]; if (pe->state == OCCUPIED) return TRUE; else if (pe->state == EMPTY) return FALSE; else { fprintf(stderr, "hss_find_index_for_key did not find end of chain.\n"); exit(1); } } // ---------------------------------------------------------------- void hss_remove(hss_t* pset, char* key) { int ideal_index = 0; int index = hss_find_index_for_key(pset, key, &ideal_index); hsse_t* pe = &pset->array[index]; if (pe->state == OCCUPIED) { pe->key = NULL; pe->state = DELETED; pe->ideal_index = -1; pset->num_freed++; pset->num_occupied--; } else if (pe->state == EMPTY) { } else { fprintf(stderr, "hss_find_index_for_key did not find end of chain.\n"); exit(1); } } // ---------------------------------------------------------------- void hss_clear(hss_t* pset) { for (int i = 0; i < pset->array_length; i++) { hsse_clear(&pset->array[i]); } pset->num_occupied = 0; pset->num_freed = 0; } int hss_size(hss_t* pset) { return pset->num_occupied; } // ---------------------------------------------------------------- int hss_check_counts(hss_t* pset) { int nocc = 0; int ndel = 0; for (int index = 0; index < pset->array_length; index++) { hsse_t* pe = &pset->array[index]; if (pe->state == OCCUPIED) nocc++; else if (pe->state == DELETED) ndel++; } if (nocc != pset->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d.\n", nocc, pset->num_occupied); return FALSE; } if (ndel != pset->num_freed) { fprintf(stderr, "freed-count mismatch: actual %d != cached %d.\n", ndel, pset->num_freed); return FALSE; } return TRUE; } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "freed"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void hss_print(hss_t* pset) { for (int index = 0; index < pset->array_length; index++) { hsse_t* pe = &pset->array[index]; const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s |\n", get_state_name(pe->state), index, pe->ideal_index, key_string); } } miller-5.6.2/c/containers/hss.h000066400000000000000000000021461354153536500163620ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-valued hash set with linear probing for // collisions. // // Notes: // * null key is not supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef HSS_H #define HSS_H // ---------------------------------------------------------------- typedef struct _hsse_t { char* key; int state; int ideal_index; } hsse_t; // ---------------------------------------------------------------- typedef struct _hss_t { int num_occupied; int num_freed; int array_length; hsse_t* array; } hss_t; // ---------------------------------------------------------------- hss_t* hss_alloc(); void hss_free(hss_t* pset); void hss_add(hss_t* pset, char* key); int hss_has(hss_t* pset, char* key); void hss_remove(hss_t* pset, char* key); void hss_clear(hss_t* pset); int hss_size(hss_t* pset); // Unit-test hook int hss_check_counts(hss_t* pset); #endif // HSS_H miller-5.6.2/c/containers/join_bucket_keeper.c000066400000000000000000000437271354153536500214210ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/context.h" #include "containers/mixutil.h" #include "containers/join_bucket_keeper.h" #include "input/lrec_readers.h" // ================================================================ // JOIN_BUCKET_KEEPER // // This data structure supports Miller's sorted (double-streaming) join. It is // perhaps best explained by first comparing with the unsorted (half-streaming) // case. // // In both cases, we have left and right join keys. Suppose the left file has // data with field name "L" to be joined with right-file(s) data with field // name "R". For the unsorted case (see mapper_join.c) the entire left file is // first loaded into buckets of record-lists, one for each distinct value of L. // E.g. given the following: // // +-----+-----+ // | L | R | // + --- + --- + // | a | a | // | c | b | // | a | f | // | b | | // | c | | // | d | | // | a | | // +-----+-----+ // // the left file is bucketed as // // +-----+ +-----+ +-----+ +-----+ // | L | | L | | L | | L | // + --- + + --- + + --- + + --- + // | a | | c | | b | | d | // | a | | c | +-----+ +-----+ // | a | + --- + // + --- + // // Then the right file is processed one record at a time (hence // "half-streaming"). The pairings are easy: // * the right record with R=a is paired with the L=a bucket, // * the right record with R=b is paired with the L=b bucket, // * the right record with R=f is unpaired, and // * the left records with L=c and L=d are unpaired. // // ---------------------------------------------------------------- // Now for the sorted (doubly-streaming) case. Here we require that the left // and right files be already sorted (lexically ascending) by the join fields. // Then the example inputs look like this: // // +-----+-----+ // | L | R | // + --- + --- + // | a | a | // | a | b | // | a | f | // | b | | // | c | | // | c | | // | d | | // +-----+-----+ // // The right file is still read one record at a time. It's the job of this // join_bucket_keeper class to keep track of the left-file buckets, one bucket // at a time. This includes all records with same values for the join // field(s), e.g. the three L=a records, as well as a "peek" record which is // either the next record with a different join value (e.g. the L=b record), or // an end-of-file indicator. // // If a right-file record has join field matching the current left-file bucket, // then it's paired with all records in that bucket. Otherwise the // join_bucket_keeper needs to either stay with the current bucket or advance // to the next one, depending whether the current right-file record's // join-field values compare lexically with the the left-file bucket's // join-field values. // // Examples: // // +-----------+-----------+-----------+-----------+-----------+-----------+ // | L R | L R | L R | L R | L R | L R | // + --- --- + --- --- + --- --- + --- --- + --- --- + --- --- + // | a | a | e | a | e e | e e | // | b | e | e | e e | e | e e | // | e | e | e | e | e | e | // | e | e | f | e | f | g g | // | e | f | g | g | g | g | // | g | g | g | g | g | | // | g | g | h | | | | // +-----------+-----------+-----------+-----------+-----------+-----------+ // // In all these examples, the join_bucket_keeper goes through these steps: // * bucket is empty, peek rec has L=e // * bucket is L=e records, peek rec has L=g // * bucket is L=g records, peek rec is null (due to EOF) // * bucket is empty, peek rec is null (due to EOF) // // Example 1: // * left-bucket is empty and left-peek has L=e // * right record has R=a; join_bucket_keeper does not advance // * right record has R=b; join_bucket_keeper does not advance // * right end of file; all left records are unpaired. // // Example 2: // * left-bucket is empty and left-peek has L=e // * right record has R=a; join_bucket_keeper does not advance // * right record has R=f; left records with L=e are unpaired. // * etc. // // ================================================================ // ---------------------------------------------------------------- #define LEFT_STATE_0_PREFILL 0 #define LEFT_STATE_1_FULL 1 #define LEFT_STATE_2_LAST_BUCKET 2 #define LEFT_STATE_3_EOF 3 // ---------------------------------------------------------------- // (0) pre-fill: Lv == null, peek == null, leof = false // (1) midstream: Lv != null, peek != null, leof = false // (2) last bucket: Lv != null, peek == null, leof = true // (3) leof: Lv == null, peek == null, leof = true // ---------------------------------------------------------------- // Private methods static int join_bucket_keeper_get_state(join_bucket_keeper_t* pkeeper); static void join_bucket_keeper_initial_fill(join_bucket_keeper_t* pkeeper, sllv_t** pprecords_left_unpaired); static void join_bucket_keeper_advance_to(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); static void join_bucket_keeper_fill(join_bucket_keeper_t* pkeeper, sllv_t** pprecords_left_unpaired); static void join_bucket_keeper_drain(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); static char* describe_state(int state); // ---------------------------------------------------------------- join_bucket_keeper_t* join_bucket_keeper_alloc( char* prepipe, char* left_file_name, cli_reader_opts_t* popts, slls_t* pleft_field_names ) { lrec_reader_t* plrec_reader = lrec_reader_alloc(popts); return join_bucket_keeper_alloc_from_reader(plrec_reader, prepipe, left_file_name, pleft_field_names); } // ---------------------------------------------------------------- join_bucket_keeper_t* join_bucket_keeper_alloc_from_reader( lrec_reader_t* plrec_reader, char* prepipe, char* left_file_name, slls_t* pleft_field_names) { join_bucket_keeper_t* pkeeper = mlr_malloc_or_die(sizeof(join_bucket_keeper_t)); void* pvhandle = plrec_reader->popen_func(plrec_reader->pvstate, prepipe, left_file_name); plrec_reader->psof_func(plrec_reader->pvstate, pvhandle); context_t* pctx = mlr_malloc_or_die(sizeof(context_t)); context_init_from_first_file_name(pctx, left_file_name); pkeeper->plrec_reader = plrec_reader; pkeeper->pvhandle = pvhandle; pkeeper->pctx = pctx; pkeeper->pleft_field_names = pleft_field_names; pkeeper->pbucket = mlr_malloc_or_die(sizeof(join_bucket_t)); pkeeper->pbucket->precords = sllv_alloc(); pkeeper->pbucket->pleft_field_values = NULL; pkeeper->pbucket->was_paired = FALSE; pkeeper->prec_peek = NULL; pkeeper->leof = FALSE; pkeeper->state = LEFT_STATE_0_PREFILL; return pkeeper; } // ---------------------------------------------------------------- void join_bucket_keeper_free(join_bucket_keeper_t* pkeeper, char* prepipe) { if (pkeeper == NULL) return; slls_free(pkeeper->pbucket->pleft_field_values); sllv_free(pkeeper->pbucket->precords); free(pkeeper->pbucket); pkeeper->plrec_reader->pclose_func(pkeeper->plrec_reader->pvstate, pkeeper->pvhandle, prepipe); pkeeper->plrec_reader->pfree_func(pkeeper->plrec_reader); lrec_free(pkeeper->prec_peek); free(pkeeper->pctx); free(pkeeper); } // ---------------------------------------------------------------- void join_bucket_keeper_emit(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) { *pprecords_paired = NULL; *pprecords_left_unpaired = NULL; int cmp = 0; if (pkeeper->state == LEFT_STATE_0_PREFILL) { join_bucket_keeper_initial_fill(pkeeper, pprecords_left_unpaired); pkeeper->state = join_bucket_keeper_get_state(pkeeper); } if (pright_field_values != NULL) { // Not right EOF if (pkeeper->state == LEFT_STATE_1_FULL || pkeeper->state == LEFT_STATE_2_LAST_BUCKET) { cmp = slls_compare_lexically(pkeeper->pbucket->pleft_field_values, pright_field_values); if (cmp < 0) { // Advance left until match or left EOF. join_bucket_keeper_advance_to(pkeeper, pright_field_values, pprecords_paired, pprecords_left_unpaired); } else if (cmp == 0) { pkeeper->pbucket->was_paired = TRUE; *pprecords_paired = pkeeper->pbucket->precords; } else { // No match and no need to advance left; return null lists. } } else if (pkeeper->state != LEFT_STATE_3_EOF) { fprintf(stderr, "%s: internal coding error: failed transition from prefill state.\n", MLR_GLOBALS.bargv0); exit(1); } } else { // Right EOF: return the final left-unpaireds. join_bucket_keeper_drain(pkeeper, pright_field_values, pprecords_paired, pprecords_left_unpaired); } pkeeper->state = join_bucket_keeper_get_state(pkeeper); } // ---------------------------------------------------------------- static int join_bucket_keeper_get_state(join_bucket_keeper_t* pkeeper) { if (pkeeper->pbucket->pleft_field_values == NULL) { if (pkeeper->leof) return LEFT_STATE_3_EOF; else return LEFT_STATE_0_PREFILL; } else { if (pkeeper->prec_peek == NULL) return LEFT_STATE_2_LAST_BUCKET; else return LEFT_STATE_1_FULL; } } static void join_bucket_keeper_initial_fill(join_bucket_keeper_t* pkeeper, sllv_t** pprecords_left_unpaired) { while (TRUE) { // Skip over records not having the join keys. These go straight to the // left-unpaired list. pkeeper->prec_peek = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, pkeeper->pvhandle, pkeeper->pctx); if (pkeeper->prec_peek == NULL) { break; } if (record_has_all_keys(pkeeper->prec_peek, pkeeper->pleft_field_names)) { break; } else { if (*pprecords_left_unpaired == NULL) *pprecords_left_unpaired = sllv_alloc(); sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); } } if (pkeeper->prec_peek == NULL) { pkeeper->leof = TRUE; return; } join_bucket_keeper_fill(pkeeper, pprecords_left_unpaired); } // Preconditions: // * prec_peek != NULL // * prec_peek has the join keys static void join_bucket_keeper_fill(join_bucket_keeper_t* pkeeper, sllv_t** pprecords_left_unpaired) { slls_t* pleft_field_values = mlr_reference_selected_values_from_record(pkeeper->prec_peek, pkeeper->pleft_field_names); if (pleft_field_values == NULL) { fprintf(stderr, "%s: internal coding error: peek record should have had join keys.\n", MLR_GLOBALS.bargv0); exit(1); } pkeeper->pbucket->pleft_field_values = slls_copy(pleft_field_values); slls_free(pleft_field_values); sllv_append(pkeeper->pbucket->precords, pkeeper->prec_peek); pkeeper->pbucket->was_paired = FALSE; pkeeper->prec_peek = NULL; while (TRUE) { // Skip over records not having the join keys. These go straight to the // left-unpaired list. pkeeper->prec_peek = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, pkeeper->pvhandle, pkeeper->pctx); if (pkeeper->prec_peek == NULL) { pkeeper->leof = TRUE; break; } if (record_has_all_keys(pkeeper->prec_peek, pkeeper->pleft_field_names)) { int cmp = slls_lrec_compare_lexically( pkeeper->pbucket->pleft_field_values, pkeeper->prec_peek, pkeeper->pleft_field_names); if (cmp != 0) { break; } sllv_append(pkeeper->pbucket->precords, pkeeper->prec_peek); } else { if (*pprecords_left_unpaired == NULL) *pprecords_left_unpaired = sllv_alloc(); sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); } pkeeper->prec_peek = NULL; } } // Pre-conditions: // * pkeeper->pleft_field_values < pright_field_values. // * currently in state 1 or 2 so there is a bucket but there may or may not be a peek-record // * current bucket was/wasn't paired on previous emits but is not paired on this emit. // Actions: // * if bucket was never paired, return it to the caller; else discard. // * consume left input stream, feeding into unpaired, for as long as leftvals < rightvals && !eof. // * if there is leftrec with vals == rightvals: parallel initial_fill. // else, mimic initial_fill. static void join_bucket_keeper_advance_to(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) { if (pkeeper->pbucket->was_paired) { while (pkeeper->pbucket->precords->phead) lrec_free(sllv_pop(pkeeper->pbucket->precords)); sllv_free(pkeeper->pbucket->precords); pkeeper->pbucket->precords = NULL; } else { if (*pprecords_left_unpaired == NULL) { *pprecords_left_unpaired = pkeeper->pbucket->precords; } else { sllv_transfer(*pprecords_left_unpaired, pkeeper->pbucket->precords); } } pkeeper->pbucket->precords = sllv_alloc(); if (pkeeper->pbucket->pleft_field_values != NULL) { slls_free(pkeeper->pbucket->pleft_field_values); pkeeper->pbucket->pleft_field_values = NULL; } pkeeper->pbucket->was_paired = FALSE; if (pkeeper->prec_peek == NULL) { // left EOF return; } // Need a double condition here ... the peek record is either het or hom. // (Or, change that: -> ensure elsewhere the peek record is hom.) // The former is destined for lunp and shouldn't be lexcmped. The latter // should be. int cmp = lrec_slls_compare_lexically(pkeeper->prec_peek, pkeeper->pleft_field_names, pright_field_values); if (cmp < 0) { // keep seeking & filling the bucket until = or >; this may or may not end up being a match. if (*pprecords_left_unpaired == NULL) *pprecords_left_unpaired = sllv_alloc(); while (TRUE) { sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); pkeeper->prec_peek = NULL; while (TRUE) { // Skip over records not having the join keys. These go straight to the // left-unpaired list. pkeeper->prec_peek = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, pkeeper->pvhandle, pkeeper->pctx); if (pkeeper->prec_peek == NULL) break; if (record_has_all_keys(pkeeper->prec_peek, pkeeper->pleft_field_names)) { break; } else { if (*pprecords_left_unpaired == NULL) *pprecords_left_unpaired = sllv_alloc(); sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); } } if (pkeeper->prec_peek == NULL) { pkeeper->leof = TRUE; break; } cmp = lrec_slls_compare_lexically(pkeeper->prec_peek, pkeeper->pleft_field_names, pright_field_values); if (cmp >= 0) break; } } if (cmp == 0) { join_bucket_keeper_fill(pkeeper, pprecords_left_unpaired); pkeeper->pbucket->was_paired = TRUE; *pprecords_paired = pkeeper->pbucket->precords; } else if (cmp > 0) { join_bucket_keeper_fill(pkeeper, pprecords_left_unpaired); } } static void join_bucket_keeper_drain(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) { // 1. Any records already in pkeeper->pbucket->precords (current bucket) if (pkeeper->pbucket->was_paired) { if (*pprecords_left_unpaired == NULL) *pprecords_left_unpaired = sllv_alloc(); } else { if (*pprecords_left_unpaired == NULL) { *pprecords_left_unpaired = pkeeper->pbucket->precords; } else { sllv_transfer(*pprecords_left_unpaired, pkeeper->pbucket->precords); sllv_free(pkeeper->pbucket->precords); } } // 2. Peek-record, if any if (pkeeper->prec_peek != NULL) { sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); pkeeper->prec_peek = NULL; } // 3. Remainder of left input stream while (TRUE) { lrec_t* prec = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, pkeeper->pvhandle, pkeeper->pctx); if (prec == NULL) break; sllv_append(*pprecords_left_unpaired, prec); } pkeeper->pbucket->precords = NULL; } // ---------------------------------------------------------------- void join_bucket_keeper_print(join_bucket_keeper_t* pkeeper) { printf("pbucket at %p:\n", pkeeper); printf(" pvhandle = %p\n", pkeeper->pvhandle); context_print(pkeeper->pctx, " "); printf(" pleft_field_names = "); slls_print(pkeeper->pleft_field_names); printf("\n"); join_bucket_print(pkeeper->pbucket, " "); printf(" prec_peek = "); if (pkeeper->prec_peek == NULL) { printf("null\n"); } else { lrec_print(pkeeper->prec_peek); } printf(" leof = %d\n", pkeeper->leof); printf(" state = %s\n", describe_state(pkeeper->state)); } void join_bucket_keeper_print_aux(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) { join_bucket_keeper_print(pkeeper); printf(" pright_field_values = "); slls_print(pright_field_values); printf("\n"); printf(" precords_paired =\n"); lrec_print_list_with_prefix(*pprecords_paired, " "); printf("\n"); printf(" precords_left_unpaired =\n"); lrec_print_list_with_prefix(*pprecords_left_unpaired, " "); printf("\n"); } void join_bucket_print(join_bucket_t* pbucket, char* indent) { printf("%spbucket at %p:\n", indent, pbucket); printf("%s pleft_field_values = ", indent); slls_print(pbucket->pleft_field_values); printf("\n"); if (pbucket->precords == NULL) { printf("%s precords:\n", indent); printf("%s (null)\n", indent); } else { printf("%s precords (length=%llu):\n", indent, pbucket->precords->length); lrec_print_list_with_prefix(pbucket->precords, " "); } printf("%s was_paired = %d\n", indent, pbucket->was_paired); } static char* describe_state(int state) { switch (state) { case LEFT_STATE_0_PREFILL: return "LEFT_STATE_0_PREFILL"; case LEFT_STATE_1_FULL: return "LEFT_STATE_1_FULL"; case LEFT_STATE_2_LAST_BUCKET: return "LEFT_STATE_2_LAST_BUCKET"; case LEFT_STATE_3_EOF: return "LEFT_STATE_3_EOF"; default: return "???"; } } miller-5.6.2/c/containers/join_bucket_keeper.h000066400000000000000000000037731354153536500214230ustar00rootroot00000000000000// ================================================================ // Data structures for mlr join, sorted case. Please see descriptive // comments at the top of join_bucket_keeper.h. // ================================================================ #ifndef JOIN_BUCKET_KEEPER_H #define JOIN_BUCKET_KEEPER_H #include "lib/context.h" #include "cli/mlrcli.h" #include "containers/lrec.h" #include "containers/slls.h" #include "containers/sllv.h" #include "input/lrec_reader.h" // ---------------------------------------------------------------- typedef struct _join_bucket_t { slls_t* pleft_field_values; sllv_t* precords; int was_paired; } join_bucket_t; typedef struct _join_bucket_keeper_t { lrec_reader_t* plrec_reader; void* pvhandle; context_t* pctx; slls_t* pleft_field_names; join_bucket_t* pbucket; lrec_t* prec_peek; int leof; int state; } join_bucket_keeper_t; // ---------------------------------------------------------------- join_bucket_keeper_t* join_bucket_keeper_alloc( char* prepipe, char* left_file_name, cli_reader_opts_t* popts, slls_t* pleft_field_names); join_bucket_keeper_t* join_bucket_keeper_alloc_from_reader( lrec_reader_t* plrec_reader, char* prepipe, char* left_file_name, slls_t* pleft_field_names); void join_bucket_keeper_free(join_bucket_keeper_t* pkeeper, char* prepipe); // *pprecords_paired should not be freed by the caller. // *pprecords_left_unpaired should be freed by the caller. void join_bucket_keeper_emit( join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); void join_bucket_print(join_bucket_t* pbucket, char* indent); void join_bucket_keeper_print(join_bucket_keeper_t* pkeeper); void join_bucket_keeper_print_aux(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); #endif // JOIN_BUCKET_KEEPER_H miller-5.6.2/c/containers/lhms2v.c000066400000000000000000000215121354153536500167710ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-list-to-void-star linked hash map with // linear probing for collisions. // // John Kerl 2014-12-22 // // Notes: // * null key is not supported. // * null value is not supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhms2v.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 16 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void* lhms2v_put_no_enlarge(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags); static void lhms2v_enlarge(lhms2v_t* pmap); // ================================================================ static void lhms2v_init(lhms2v_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhms2ve_t*)mlr_malloc_or_die(sizeof(lhms2ve_t) * length); // Don't do lhms2ve_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhms2ve_state_t*)mlr_malloc_or_die(sizeof(lhms2ve_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhms2v_t* lhms2v_alloc() { lhms2v_t* pmap = mlr_malloc_or_die(sizeof(lhms2v_t)); lhms2v_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } // void-star payloads should first be freed by the caller. void lhms2v_free(lhms2v_t* pmap) { if (pmap == NULL) return; for (lhms2ve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) { free(pe->key1); free(pe->key2); } } free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhms2v_find_index_for_key(lhms2v_t* pmap, char* key1, char* key2, int* pideal_index) { int hash = mlr_string_pair_hash_func(key1, key2); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; int done = 0; while (!done) { lhms2ve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { char* ekey1 = pe->key1; char* ekey2 = pe->key2; // Existing key found in chain. if (streq(key1, ekey1) && streq(key2, ekey2)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been deleted, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- void* lhms2v_put(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhms2v_enlarge(pmap); return lhms2v_put_no_enlarge(pmap, key1, key2, pvvalue, free_flags); } static void* lhms2v_put_no_enlarge(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags) { int ideal_index = 0; int index = lhms2v_find_index_for_key(pmap, key1, key2, &ideal_index); lhms2ve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. pe->pvvalue = pvvalue; } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key1 = key1; pe->key2 = key2; pe->pvvalue = pvvalue; pe->free_flags = free_flags; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhms2v_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } return pvvalue; } // ---------------------------------------------------------------- void* lhms2v_get(lhms2v_t* pmap, char* key1, char* key2) { int ideal_index = 0; int index = lhms2v_find_index_for_key(pmap, key1, key2, &ideal_index); lhms2ve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe->pvvalue; else if (pmap->states[index] == EMPTY) return NULL; else { fprintf(stderr, "%s: lhms2v_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhms2v_has_key(lhms2v_t* pmap, char* key1, char* key2) { int ideal_index = 0; int index = lhms2v_find_index_for_key(pmap, key1, key2, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhms2v_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhms2v_size(lhms2v_t* pmap) { return pmap->num_occupied; } // ---------------------------------------------------------------- static void lhms2v_enlarge(lhms2v_t* pmap) { lhms2ve_t* old_entries = pmap->entries; lhms2ve_state_t* old_states = pmap->states; lhms2ve_t* old_head = pmap->phead; lhms2v_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhms2ve_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhms2v_put_no_enlarge(pmap, pe->key1, pe->key2, pe->pvvalue, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- int lhms2v_check_counts(lhms2v_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "deleted-count mismatch: actual %d != cached %d\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "deleted"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void lhms2v_print(lhms2v_t* pmap) { for (int index = 0; index < pmap->array_length; index++) { lhms2ve_t* pe = &pmap->entries[index]; const char* key1_string = (pe == NULL) ? "none" : pe->key1 == NULL ? "null" : pe->key1; const char* key2_string = (pe == NULL) ? "none" : pe->key2 == NULL ? "null" : pe->key2; const char* value_string = (pe == NULL) ? "none" : pe->pvvalue == NULL ? "null" : pe->pvvalue; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key1: %12s | key2: %12s | pvvalue: %12s |\n", get_state_name(pmap->states[index]), index, pe->ideal_index, key1_string, key2_string, value_string); } printf("+\n"); printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); printf("+\n"); for (lhms2ve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key1_string = (pe == NULL) ? "none" : pe->key1 == NULL ? "null" : pe->key1; const char* key2_string = (pe == NULL) ? "none" : pe->key2 == NULL ? "null" : pe->key2; const char* value_string = (pe == NULL) ? "none" : pe->pvvalue == NULL ? "null" : pe->pvvalue; printf( "| prev: %p curr: %p next: %p | nidx: %6d | key1: %12s | key2: %12s | pvvalue: %12s |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key1_string, key2_string, value_string); } } miller-5.6.2/c/containers/lhms2v.h000066400000000000000000000027641354153536500170060ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-pair-to-void-star linked hash map with // linear probing for collisions. // // John Kerl 2014-12-22 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMS2V_H #define LHMS2V_H #include "lib/free_flags.h" // ---------------------------------------------------------------- typedef struct _lhms2ve_t { int ideal_index; char* key1; char* key2; void* pvvalue; char free_flags; struct _lhms2ve_t *pprev; struct _lhms2ve_t *pnext; } lhms2ve_t; typedef unsigned char lhms2ve_state_t; // ---------------------------------------------------------------- typedef struct _lhms2v_t { int num_occupied; int num_freed; int array_length; lhms2ve_t* entries; lhms2ve_state_t* states; lhms2ve_t* phead; lhms2ve_t* ptail; } lhms2v_t; lhms2v_t* lhms2v_alloc(); void lhms2v_free(lhms2v_t* pmap); void* lhms2v_put(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags); void* lhms2v_get(lhms2v_t* pmap, char* key1, char* key2); int lhms2v_has_key(lhms2v_t* pmap, char* key1, char* key2); int lhms2v_size(lhms2v_t* pmap); // Unit-test hook int lhms2v_check_counts(lhms2v_t* pmap); #endif // LHMS2V_H miller-5.6.2/c/containers/lhmsi.c000066400000000000000000000223671354153536500167030ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-string linked hash map with linear // probing for collisions. // // Keys are not strduped. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhmsi.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 16 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void lhmsi_put_no_enlarge(lhmsi_t* pmap, char* key, int value, char free_flags); static void lhmsi_enlarge(lhmsi_t* pmap); // ================================================================ static void lhmsi_init(lhmsi_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhmsie_t*)mlr_malloc_or_die(sizeof(lhmsie_t) * length); // Don't do lhmsie_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhmsie_state_t*)mlr_malloc_or_die(sizeof(lhmsie_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhmsi_t* lhmsi_alloc() { lhmsi_t* pmap = mlr_malloc_or_die(sizeof(lhmsi_t)); lhmsi_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } lhmsi_t* lhmsi_copy(lhmsi_t* pmap) { lhmsi_t* pnew = lhmsi_alloc(); for (lhmsie_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) lhmsi_put(pnew, mlr_strdup_or_die(pe->key), pe->value, FREE_ENTRY_KEY); return pnew; } void lhmsi_free(lhmsi_t* pmap) { if (pmap == NULL) return; for (lhmsie_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); } free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhmsi_find_index_for_key(lhmsi_t* pmap, char* key, int* pideal_index) { int hash = mlr_string_hash_func(key); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { lhmsie_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { char* ekey = pe->key; // Existing key found in chain. if (streq(key, ekey)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been deleted, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); } // ---------------------------------------------------------------- void lhmsi_put(lhmsi_t* pmap, char* key, int value, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhmsi_enlarge(pmap); lhmsi_put_no_enlarge(pmap, key, value, free_flags); } static void lhmsi_put_no_enlarge(lhmsi_t* pmap, char* key, int value, char free_flags) { int ideal_index = 0; int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); lhmsie_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. pe->value = value; } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key = key; pe->value = value; pe->free_flags = free_flags; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsi_get(lhmsi_t* pmap, char* key) { int ideal_index = 0; int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); lhmsie_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe->value; else if (pmap->states[index] == EMPTY) return -999; // caller must do lhmsi_has_key to check validity else { fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsi_test_and_get(lhmsi_t* pmap, char* key, int* pval) { int ideal_index = 0; int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); lhmsie_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { *pval = pe->value; return TRUE; } else if (pmap->states[index] == EMPTY) { return FALSE; } else { fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } lhmsie_t* lhmsi_get_entry(lhmsi_t* pmap, char* key) { int ideal_index = 0; int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); lhmsie_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe; else if (pmap->states[index] == EMPTY) return NULL; else { fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsi_has_key(lhmsi_t* pmap, char* key) { int ideal_index = 0; int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- void lhmsi_rename(lhmsi_t* pmap, char* old_key, char* new_key) { fprintf(stderr, "rename is not supported in the hashed-record impl.\n"); exit(1); } // ---------------------------------------------------------------- static void lhmsi_enlarge(lhmsi_t* pmap) { lhmsie_t* old_entries = pmap->entries; lhmsie_state_t* old_states = pmap->states; lhmsie_t* old_head = pmap->phead; lhmsi_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhmsie_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhmsi_put_no_enlarge(pmap, pe->key, pe->value, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- int lhmsi_check_counts(lhmsi_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d.\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "deleted-count mismatch: actual %d != cached %d.\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "deleted"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void lhmsi_print(lhmsi_t* pmap) { for (int index = 0; index < pmap->array_length; index++) { lhmsie_t* pe = &pmap->entries[index]; const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | value: %8d |\n", get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, pe->value); } printf("+\n"); printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); printf("+\n"); for (lhmsie_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %8d |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key_string, pe->value); } } miller-5.6.2/c/containers/lhmsi.h000066400000000000000000000030631354153536500167000ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-int linked hash map with linear // probing for collisions. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMSI_H #define LHMSI_H // ---------------------------------------------------------------- typedef struct _lhmsie_t { int ideal_index; char* key; int value; char free_flags; struct _lhmsie_t *pprev; struct _lhmsie_t *pnext; } lhmsie_t; typedef unsigned char lhmsie_state_t; typedef struct _lhmsi_t { int num_occupied; int num_freed; int array_length; lhmsie_t* entries; lhmsie_state_t* states; lhmsie_t* phead; lhmsie_t* ptail; } lhmsi_t; // ---------------------------------------------------------------- lhmsi_t* lhmsi_alloc(); lhmsi_t* lhmsi_copy(lhmsi_t* pmap); void lhmsi_free(lhmsi_t* pmap); void lhmsi_put(lhmsi_t* pmap, char* key, int value, char free_flags); int lhmsi_get(lhmsi_t* pmap, char* key); // caller must do lhmsi_has_key to check validity int lhmsi_test_and_get(lhmsi_t* pmap, char* key, int* pval); // *pval undefined if return is FALSE lhmsie_t* lhmsi_get_entry(lhmsi_t* pmap, char* key); int lhmsi_has_key(lhmsi_t* pmap, char* key); // Unit-test hook int lhmsi_check_counts(lhmsi_t* pmap); #endif // LHMSI_H miller-5.6.2/c/containers/lhmsll.c000066400000000000000000000234531354153536500170570ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-string linked hash map with linear // probing for collisions. // // Keys are not strduped. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhmsll.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 16 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void lhmsll_put_no_enlarge(lhmsll_t* pmap, char* key, int value, char free_flags); static void lhmsll_enlarge(lhmsll_t* pmap); // ================================================================ static void lhmsll_init(lhmsll_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhmslle_t*)mlr_malloc_or_die(sizeof(lhmslle_t) * length); // Don't do lhmslle_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhmslle_state_t*)mlr_malloc_or_die(sizeof(lhmslle_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhmsll_t* lhmsll_alloc() { lhmsll_t* pmap = mlr_malloc_or_die(sizeof(lhmsll_t)); lhmsll_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } lhmsll_t* lhmsll_copy(lhmsll_t* pmap) { lhmsll_t* pnew = lhmsll_alloc(); for (lhmslle_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) lhmsll_put(pnew, mlr_strdup_or_die(pe->key), pe->value, FREE_ENTRY_KEY); return pnew; } void lhmsll_free(lhmsll_t* pmap) { if (pmap == NULL) return; for (lhmslle_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); } free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhmsll_find_index_for_key(lhmsll_t* pmap, char* key, int* pideal_index) { int hash = mlr_string_hash_func(key); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { lhmslle_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { char* ekey = pe->key; // Existing key found in chain. if (streq(key, ekey)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been deleted, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- void lhmsll_put(lhmsll_t* pmap, char* key, int value, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhmsll_enlarge(pmap); lhmsll_put_no_enlarge(pmap, key, value, free_flags); } static void lhmsll_put_no_enlarge(lhmsll_t* pmap, char* key, int value, char free_flags) { int ideal_index = 0; int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); lhmslle_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. pe->value = value; } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key = key; pe->value = value; pe->free_flags = free_flags; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- long long lhmsll_get(lhmsll_t* pmap, char* key) { int ideal_index = 0; int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); lhmslle_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe->value; else if (pmap->states[index] == EMPTY) return -999; // caller must do lhmsll_has_key to check validity else { fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsll_test_and_get(lhmsll_t* pmap, char* key, long long* pval) { int ideal_index = 0; int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); lhmslle_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { *pval = pe->value; return TRUE; } else if (pmap->states[index] == EMPTY) { return FALSE; } else { fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } int lhmsll_test_and_increment(lhmsll_t* pmap, char* key) { int ideal_index = 0; int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); lhmslle_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { pe->value++; return TRUE; } else if (pmap->states[index] == EMPTY) { return FALSE; } else { fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } lhmslle_t* lhmsll_get_entry(lhmsll_t* pmap, char* key) { int ideal_index = 0; int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); lhmslle_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe; else if (pmap->states[index] == EMPTY) return NULL; else { fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsll_has_key(lhmsll_t* pmap, char* key) { int ideal_index = 0; int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- void lhmsll_rename(lhmsll_t* pmap, char* old_key, char* new_key) { fprintf(stderr, "rename is not supported in the hashed-record impl.\n"); exit(1); } // ---------------------------------------------------------------- static void lhmsll_enlarge(lhmsll_t* pmap) { lhmslle_t* old_entries = pmap->entries; lhmslle_state_t* old_states = pmap->states; lhmslle_t* old_head = pmap->phead; lhmsll_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhmslle_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhmsll_put_no_enlarge(pmap, pe->key, pe->value, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- int lhmsll_check_counts(lhmsll_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d.\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "deleted-count mismatch: actual %d != cached %d.\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "deleted"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void lhmsll_print(lhmsll_t* pmap) { for (int index = 0; index < pmap->array_length; index++) { lhmslle_t* pe = &pmap->entries[index]; const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | value: %8lld |\n", get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, pe->value); } printf("+\n"); printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); printf("+\n"); for (lhmslle_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %8lld |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key_string, pe->value); } } miller-5.6.2/c/containers/lhmsll.h000066400000000000000000000033221354153536500170550ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-int linked hash map with linear // probing for collisions. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMSLL_H #define LHMSLL_H // ---------------------------------------------------------------- typedef struct _lhmslle_t { int ideal_index; char* key; long long value; char free_flags; struct _lhmslle_t *pprev; struct _lhmslle_t *pnext; } lhmslle_t; typedef unsigned char lhmslle_state_t; typedef struct _lhmsll_t { int num_occupied; int num_freed; int array_length; lhmslle_t* entries; lhmslle_state_t* states; lhmslle_t* phead; lhmslle_t* ptail; } lhmsll_t; // ---------------------------------------------------------------- lhmsll_t* lhmsll_alloc(); lhmsll_t* lhmsll_copy(lhmsll_t* pmap); void lhmsll_free(lhmsll_t* pmap); void lhmsll_put(lhmsll_t* pmap, char* key, int value, char free_flags); long long lhmsll_get(lhmsll_t* pmap, char* key); // caller must do lhmsll_has_key to check validity int lhmsll_test_and_get(lhmsll_t* pmap, char* key, long long* pval); // *pval undefined if return is FALSE int lhmsll_test_and_increment(lhmsll_t* pmap, char* key); // increments value only if mapping exists lhmslle_t* lhmsll_get_entry(lhmsll_t* pmap, char* key); int lhmsll_has_key(lhmsll_t* pmap, char* key); // Unit-test hook int lhmsll_check_counts(lhmsll_t* pmap); #endif // LHMSLL_H miller-5.6.2/c/containers/lhmslv.c000066400000000000000000000206021354153536500170620ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-list-to-void-star linked hash map with // linear probing for collisions. // // John Kerl 2014-12-22 // // Notes: // * null key is not supported. // * null value is not supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhmslv.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 16 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void* lhmslv_put_no_enlarge(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags); static void lhmslv_enlarge(lhmslv_t* pmap); // ================================================================ static void lhmslv_init(lhmslv_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhmslve_t*)mlr_malloc_or_die(sizeof(lhmslve_t) * length); // Don't do lhmslve_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhmslve_state_t*)mlr_malloc_or_die(sizeof(lhmslve_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhmslv_t* lhmslv_alloc() { lhmslv_t* pmap = mlr_malloc_or_die(sizeof(lhmslv_t)); lhmslv_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } // void-star payloads should first be freed by the caller. void lhmslv_free(lhmslv_t* pmap) { if (pmap == NULL) return; for (lhmslve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) if (pe->free_flags & FREE_ENTRY_KEY) slls_free(pe->key); free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhmslv_find_index_for_key(lhmslv_t* pmap, slls_t* key, int* pideal_index) { int hash = slls_hash_func(key); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { lhmslve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { slls_t* ekey = pe->key; // Existing key found in chain. if (slls_equals(key, ekey)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been freed, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- void* lhmslv_put(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhmslv_enlarge(pmap); return lhmslv_put_no_enlarge(pmap, key, pvvalue, free_flags); } static void* lhmslv_put_no_enlarge(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags) { int ideal_index = 0; int index = lhmslv_find_index_for_key(pmap, key, &ideal_index); lhmslve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. pe->pvvalue = pvvalue; } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key = key; pe->free_flags = free_flags; pe->pvvalue = pvvalue; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhmslv_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } return pvvalue; } // ---------------------------------------------------------------- void* lhmslv_get(lhmslv_t* pmap, slls_t* key) { int ideal_index = 0; int index = lhmslv_find_index_for_key(pmap, key, &ideal_index); lhmslve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe->pvvalue; else if (pmap->states[index] == EMPTY) return NULL; else { fprintf(stderr, "%s: lhmslv_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmslv_has_key(lhmslv_t* pmap, slls_t* key) { int ideal_index = 0; int index = lhmslv_find_index_for_key(pmap, key, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhmslv_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmslv_size(lhmslv_t* pmap) { return pmap->num_occupied; } // ---------------------------------------------------------------- static void lhmslv_enlarge(lhmslv_t* pmap) { lhmslve_t* old_entries = pmap->entries; lhmslve_state_t* old_states = pmap->states; lhmslve_t* old_head = pmap->phead; lhmslv_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhmslve_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhmslv_put_no_enlarge(pmap, pe->key, pe->pvvalue, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- int lhmslv_check_counts(lhmslv_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "freed-count mismatch: actual %d != cached %d\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "freed"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void lhmslv_print(lhmslv_t* pmap) { for (int index = 0; index < pmap->array_length; index++) { lhmslve_t* pe = &pmap->entries[index]; const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : slls_join(pe->key, ","); const char* value_string = (pe == NULL) ? "none" : pe->pvvalue == NULL ? "null" : pe->pvvalue; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | pvvalue: %12s |\n", get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, value_string); } printf("+\n"); printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); printf("+\n"); for (lhmslve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : slls_join(pe->key, ","); const char* value_string = (pe == NULL) ? "none" : pe->pvvalue == NULL ? "null" : pe->pvvalue; printf( "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | pvvalue: %12s |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key_string, value_string); } } miller-5.6.2/c/containers/lhmslv.h000066400000000000000000000027131354153536500170720ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-list-to-void-star linked hash map with // linear probing for collisions. // // John Kerl 2014-12-22 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMSLV_H #define LHMSLV_H #include "containers/slls.h" // ---------------------------------------------------------------- typedef struct _lhmslve_t { int ideal_index; slls_t* key; void* pvvalue; char free_flags; struct _lhmslve_t *pprev; struct _lhmslve_t *pnext; } lhmslve_t; typedef unsigned char lhmslve_state_t; // ---------------------------------------------------------------- typedef struct _lhmslv_t { int num_occupied; int num_freed; int array_length; lhmslve_t* entries; lhmslve_state_t* states; lhmslve_t* phead; lhmslve_t* ptail; } lhmslv_t; lhmslv_t* lhmslv_alloc(); void lhmslv_free(lhmslv_t* pmap); void* lhmslv_put(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags); void* lhmslv_get(lhmslv_t* pmap, slls_t* key); int lhmslv_has_key(lhmslv_t* pmap, slls_t* key); int lhmslv_size(lhmslv_t* pmap); // Unit-test hook int lhmslv_check_counts(lhmslv_t* pmap); #endif // LHMSLV_H miller-5.6.2/c/containers/lhmsmv.c000066400000000000000000000211351354153536500170650ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-mlrval linked hash map with linear // probing for collisions. // // Keys and values are not strduped. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhmsmv.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 32 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void lhmsmv_put_no_enlarge(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags); static void lhmsmv_enlarge(lhmsmv_t* pmap); static void lhmsmv_init(lhmsmv_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhmsmve_t*)mlr_malloc_or_die(sizeof(lhmsmve_t) * length); // Don't do a memset of all entries at init time, since this has a drastic // effect on the time needed to construct an empty map (and Miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhmsmve_state_t*)mlr_malloc_or_die(sizeof(lhmsmve_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhmsmv_t* lhmsmv_alloc() { lhmsmv_t* pmap = mlr_malloc_or_die(sizeof(lhmsmv_t)); lhmsmv_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } // ---------------------------------------------------------------- lhmsmv_t* lhmsmv_copy(lhmsmv_t* pold) { lhmsmv_t* pnew = lhmsmv_alloc(); for (lhmsmve_t* pe = pold->phead; pe != NULL; pe = pe->pnext) { char* nkey = mlr_strdup_or_die(pe->key); mv_t nval = mv_copy(&pe->value); lhmsmv_put(pnew, nkey, &nval, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } return pnew; } // ---------------------------------------------------------------- void lhmsmv_clear(lhmsmv_t* pmap) { if (pmap == NULL) return; for (lhmsmve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); if (pe->free_flags & FREE_ENTRY_VALUE) mv_free(&pe->value); } pmap->num_occupied = 0; pmap->num_freed = 0; memset(pmap->states, EMPTY, pmap->array_length); pmap->phead = NULL; pmap->ptail = NULL; } // ---------------------------------------------------------------- void lhmsmv_free(lhmsmv_t* pmap) { if (pmap == NULL) return; for (lhmsmve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); if (pe->free_flags & FREE_ENTRY_VALUE) mv_free(&pe->value); } free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhmsmv_find_index_for_key(lhmsmv_t* pmap, char* key, int* pideal_index) { int hash = mlr_string_hash_func(key); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { lhmsmve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { char* ekey = pe->key; // Existing key found in chain. if (streq(key, ekey)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been freed, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- void lhmsmv_put(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhmsmv_enlarge(pmap); lhmsmv_put_no_enlarge(pmap, key, pvalue, free_flags); } static void lhmsmv_put_no_enlarge(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags) { int ideal_index = 0; int index = lhmsmv_find_index_for_key(pmap, key, &ideal_index); lhmsmve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. if (pe->free_flags & FREE_ENTRY_VALUE) mv_free(&pe->value); pe->value = *pvalue; if (free_flags & FREE_ENTRY_VALUE) pe->free_flags |= FREE_ENTRY_VALUE; else pe->free_flags &= ~FREE_ENTRY_VALUE; // The caller asked us to free the key when we were done but another copy of the // key is already present. So free now what they passed in. if (free_flags & FREE_ENTRY_KEY) free(key); } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key = key; pe->value = *pvalue; pe->free_flags = free_flags; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhmsmv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- mv_t* lhmsmv_get(lhmsmv_t* pmap, char* key) { int ideal_index = 0; int index = lhmsmv_find_index_for_key(pmap, key, &ideal_index); lhmsmve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { return &pe->value; } else if (pmap->states[index] == EMPTY) { return NULL; } else { fprintf(stderr, "%s: lhmsmv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsmv_has_key(lhmsmv_t* pmap, char* key) { int ideal_index = 0; int index = lhmsmv_find_index_for_key(pmap, key, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhmsmv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- static void lhmsmv_enlarge(lhmsmv_t* pmap) { lhmsmve_t* old_entries = pmap->entries; lhmsmve_state_t* old_states = pmap->states; lhmsmve_t* old_head = pmap->phead; lhmsmv_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhmsmve_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhmsmv_put_no_enlarge(pmap, pe->key, &pe->value, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- void lhmsmv_dump(lhmsmv_t* pmap) { for (lhmsmve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; char* value_string = mv_alloc_format_val(&pe->value); printf("| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %12s |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key_string, value_string); } } // ---------------------------------------------------------------- int lhmsmv_check_counts(lhmsmv_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d.\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "deleted-count mismatch: actual %d != cached %d.\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } miller-5.6.2/c/containers/lhmsmv.h000066400000000000000000000027771354153536500171050ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-mlrval linked hash map with linear // probing for collisions. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMSMV_H #define LHMSMV_H #include "containers/sllv.h" #include "lib/mlrval.h" // ---------------------------------------------------------------- typedef struct _lhmsmve_t { int ideal_index; char free_flags; char* key; mv_t value; struct _lhmsmve_t *pprev; struct _lhmsmve_t *pnext; } lhmsmve_t; typedef unsigned char lhmsmve_state_t; typedef struct _lhmsmv_t { int num_occupied; int num_freed; int array_length; lhmsmve_t* entries; lhmsmve_state_t* states; lhmsmve_t* phead; lhmsmve_t* ptail; } lhmsmv_t; // ---------------------------------------------------------------- lhmsmv_t* lhmsmv_alloc(); lhmsmv_t* lhmsmv_copy(lhmsmv_t* pmap); void lhmsmv_clear(lhmsmv_t* pmap); void lhmsmv_free(lhmsmv_t* pmap); void lhmsmv_put(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags); mv_t* lhmsmv_get(lhmsmv_t* pmap, char* key); int lhmsmv_has_key(lhmsmv_t* pmap, char* key); void lhmsmv_dump(lhmsmv_t* pmap); int lhmsmv_check_counts(lhmsmv_t* pmap); #endif // LHMSMV_H miller-5.6.2/c/containers/lhmss.c000066400000000000000000000214301354153536500167030ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-string linked hash map with linear // probing for collisions. // // Keys and values are not strduped. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhmss.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 16 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void lhmss_put_no_enlarge(lhmss_t* pmap, char* key, char* value, char free_flags); static void lhmss_enlarge(lhmss_t* pmap); static void lhmss_init(lhmss_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhmsse_t*)mlr_malloc_or_die(sizeof(lhmsse_t) * length); // Don't do lhmsse_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhmsse_state_t*)mlr_malloc_or_die(sizeof(lhmsse_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhmss_t* lhmss_alloc() { lhmss_t* pmap = mlr_malloc_or_die(sizeof(lhmss_t)); lhmss_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } lhmss_t* lhmss_copy(lhmss_t* pmap) { lhmss_t* pnew = lhmss_alloc(); for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) lhmss_put(pnew, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); return pnew; } void lhmss_free(lhmss_t* pmap) { if (pmap == NULL) return; for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); if (pe->free_flags & FREE_ENTRY_VALUE) free(pe->value); } free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhmss_find_index_for_key(lhmss_t* pmap, char* key, int* pideal_index) { int hash = mlr_string_hash_func(key); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { lhmsse_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { char* ekey = pe->key; // Existing key found in chain. if (streq(key, ekey)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been freed, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- void lhmss_put(lhmss_t* pmap, char* key, char* value, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhmss_enlarge(pmap); lhmss_put_no_enlarge(pmap, key, value, free_flags); } static void lhmss_put_no_enlarge(lhmss_t* pmap, char* key, char* value, char free_flags) { int ideal_index = 0; int index = lhmss_find_index_for_key(pmap, key, &ideal_index); lhmsse_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. if (pe->free_flags & FREE_ENTRY_KEY) free(key); if (pe->free_flags & FREE_ENTRY_VALUE) free(pe->value); pe->value = value; if (free_flags & FREE_ENTRY_VALUE) pe->free_flags |= FREE_ENTRY_VALUE; else pe->free_flags &= ~FREE_ENTRY_VALUE; } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key = key; pe->value = value; pe->free_flags = free_flags; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhmss_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- char* lhmss_get(lhmss_t* pmap, char* key) { int ideal_index = 0; int index = lhmss_find_index_for_key(pmap, key, &ideal_index); lhmsse_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { return pe->value; } else if (pmap->states[index] == EMPTY) { return NULL; } else { fprintf(stderr, "%s: lhmss_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmss_has_key(lhmss_t* pmap, char* key) { int ideal_index = 0; int index = lhmss_find_index_for_key(pmap, key, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhmss_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- void lhmss_rename(lhmss_t* pmap, char* old_key, char* new_key) { fprintf(stderr, "rename is not supported in the hashed-record impl.\n"); exit(1); } // ---------------------------------------------------------------- static void lhmss_enlarge(lhmss_t* pmap) { lhmsse_t* old_entries = pmap->entries; lhmsse_state_t* old_states = pmap->states; lhmsse_t* old_head = pmap->phead; lhmss_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhmsse_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhmss_put_no_enlarge(pmap, pe->key, pe->value, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "freed"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void lhmss_dump(lhmss_t* pmap) { for (int index = 0; index < pmap->array_length; index++) { lhmsse_t* pe = &pmap->entries[index]; const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; const char* value_string = (pe == NULL) ? "none" : pe->value == NULL ? "null" : pe->value; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | value: %12s |\n", get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, value_string); } printf("+\n"); printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); printf("+\n"); for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; const char* value_string = (pe == NULL) ? "none" : pe->value == NULL ? "null" : pe->value; printf( "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %12s |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key_string, value_string); } } // ---------------------------------------------------------------- int lhmss_check_counts(lhmss_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d.\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "deleted-count mismatch: actual %d != cached %d.\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } miller-5.6.2/c/containers/lhmss.h000066400000000000000000000027621354153536500167170ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-string linked hash map with linear // probing for collisions. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMSS_H #define LHMSS_H #include "containers/sllv.h" // ---------------------------------------------------------------- typedef struct _lhmsse_t { int ideal_index; char free_flags; char* key; char* value; struct _lhmsse_t *pprev; struct _lhmsse_t *pnext; } lhmsse_t; typedef unsigned char lhmsse_state_t; typedef struct _lhmss_t { int num_occupied; int num_freed; int array_length; lhmsse_t* entries; lhmsse_state_t* states; lhmsse_t* phead; lhmsse_t* ptail; } lhmss_t; // ---------------------------------------------------------------- lhmss_t* lhmss_alloc(); lhmss_t* lhmss_copy(lhmss_t* pmap); void lhmss_free(lhmss_t* pmap); void lhmss_put(lhmss_t* pmap, char* key, char* value, char free_flags); char* lhmss_get(lhmss_t* pmap, char* key); int lhmss_has_key(lhmss_t* pmap, char* key); void lhmss_rename(lhmss_t* pmap, char* old_key, char* new_key); void lhmss_dump(lhmss_t* pmap); // Unit-test hook int lhmss_check_counts(lhmss_t* pmap); #endif // LHMSS_H miller-5.6.2/c/containers/lhmsv.c000066400000000000000000000204561354153536500167150ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-void linked hash map with linear // probing for collisions. // // Keys are not strduped; memory management of the void* values is left to the // caller. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is not supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lhmsv.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- // Allow compile-time override, e.g using gcc -D. #ifndef INITIAL_ARRAY_LENGTH #define INITIAL_ARRAY_LENGTH 16 #endif #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif // ---------------------------------------------------------------- #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ---------------------------------------------------------------- static void lhmsv_put_no_enlarge(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags); static void lhmsv_enlarge(lhmsv_t* pmap); static void lhmsv_init(lhmsv_t *pmap, int length) { pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = length; pmap->entries = (lhmsve_t*)mlr_malloc_or_die(sizeof(lhmsve_t) * length); // Don't do lhmsve_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. pmap->states = (lhmsve_state_t*)mlr_malloc_or_die(sizeof(lhmsve_state_t) * length); memset(pmap->states, EMPTY, length); pmap->phead = NULL; pmap->ptail = NULL; } lhmsv_t* lhmsv_alloc() { lhmsv_t* pmap = mlr_malloc_or_die(sizeof(lhmsv_t)); lhmsv_init(pmap, INITIAL_ARRAY_LENGTH); return pmap; } // ---------------------------------------------------------------- void lhmsv_free(lhmsv_t* pmap) { if (pmap == NULL) return; for (lhmsve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); } free(pmap->entries); free(pmap->states); pmap->entries = NULL; pmap->num_occupied = 0; pmap->num_freed = 0; pmap->array_length = 0; free(pmap); } void lhmsv_clear(lhmsv_t* pmap) { if (pmap == NULL) return; for (lhmsve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); } pmap->num_occupied = 0; pmap->num_freed = 0; memset(pmap->states, EMPTY, pmap->array_length); pmap->phead = NULL; pmap->ptail = NULL; } // ---------------------------------------------------------------- // Used by get() and remove(). // Returns >=0 for where the key is *or* should go (end of chain). static int lhmsv_find_index_for_key(lhmsv_t* pmap, char* key, int* pideal_index) { int hash = mlr_string_hash_func(key); int index = mlr_canonical_mod(hash, pmap->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { lhmsve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { char* ekey = pe->key; // Existing key found in chain. if (streq(key, ekey)) return index; } else if (pmap->states[index] == EMPTY) { return index; } // If the current entry has been deleted, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= pmap->array_length) { fprintf(stderr, "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= pmap->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- void lhmsv_put(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags) { if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) lhmsv_enlarge(pmap); lhmsv_put_no_enlarge(pmap, key, pvvalue, free_flags); } static void lhmsv_put_no_enlarge(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags) { int ideal_index = 0; int index = lhmsv_find_index_for_key(pmap, key, &ideal_index); lhmsve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) { // Existing key found in chain; put value. pe->pvvalue = pvvalue; } else if (pmap->states[index] == EMPTY) { // End of chain. pe->ideal_index = ideal_index; pe->key = key; pe->pvvalue = pvvalue; pe->free_flags = free_flags; pmap->states[index] = OCCUPIED; if (pmap->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; pmap->phead = pe; pmap->ptail = pe; } else { pe->pprev = pmap->ptail; pe->pnext = NULL; pmap->ptail->pnext = pe; pmap->ptail = pe; } pmap->num_occupied++; } else { fprintf(stderr, "%s: lhmsv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- void* lhmsv_get(lhmsv_t* pmap, char* key) { int ideal_index = 0; int index = lhmsv_find_index_for_key(pmap, key, &ideal_index); lhmsve_t* pe = &pmap->entries[index]; if (pmap->states[index] == OCCUPIED) return pe->pvvalue; else if (pmap->states[index] == EMPTY) return NULL; else { fprintf(stderr, "%s: lhmsv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- int lhmsv_has_key(lhmsv_t* pmap, char* key) { int ideal_index = 0; int index = lhmsv_find_index_for_key(pmap, key, &ideal_index); if (pmap->states[index] == OCCUPIED) return TRUE; else if (pmap->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: lhmsv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- static void lhmsv_enlarge(lhmsv_t* pmap) { lhmsve_t* old_entries = pmap->entries; lhmsve_state_t* old_states = pmap->states; lhmsve_t* old_head = pmap->phead; lhmsv_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); for (lhmsve_t* pe = old_head; pe != NULL; pe = pe->pnext) { lhmsv_put_no_enlarge(pmap, pe->key, pe->pvvalue, pe->free_flags); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- int lhmsv_check_counts(lhmsv_t* pmap) { int nocc = 0; int ndel = 0; for (int index = 0; index < pmap->array_length; index++) { if (pmap->states[index] == OCCUPIED) nocc++; else if (pmap->states[index] == DELETED) ndel++; } if (nocc != pmap->num_occupied) { fprintf(stderr, "occupancy-count mismatch: actual %d != cached %d.\n", nocc, pmap->num_occupied); return FALSE; } if (ndel != pmap->num_freed) { fprintf(stderr, "deleted-count mismatch: actual %d != cached %d.\n", ndel, pmap->num_freed); return FALSE; } return TRUE; } // ---------------------------------------------------------------- static char* get_state_name(int state) { switch(state) { case OCCUPIED: return "occupied"; break; case DELETED: return "deleted"; break; case EMPTY: return "empty"; break; default: return "?????"; break; } } void lhmsv_print(lhmsv_t* pmap) { for (int index = 0; index < pmap->array_length; index++) { lhmsve_t* pe = &pmap->entries[index]; const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | pvvalue: %p |\n", get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, pe->pvvalue); } printf("+\n"); printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); printf("+\n"); for (lhmsve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; printf( "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | pvvalue: %p |\n", pe->pprev, pe, pe->pnext, pe->ideal_index, key_string, pe->pvvalue); } } miller-5.6.2/c/containers/lhmsv.h000066400000000000000000000026551354153536500167230ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) string-to-void linked hash map with linear // probing for collisions. // // John Kerl 2012-08-13 // // Notes: // * null key is not supported. // * null value is supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef LHMSV_H #define LHMSV_H #include "containers/sllv.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- typedef struct _lhmsve_t { int ideal_index; char* key; void* pvvalue; char free_flags; struct _lhmsve_t *pprev; struct _lhmsve_t *pnext; } lhmsve_t; typedef unsigned char lhmsve_state_t; typedef struct _lhmsv_t { int num_occupied; int num_freed; int array_length; lhmsve_t* entries; lhmsve_state_t* states; lhmsve_t* phead; lhmsve_t* ptail; } lhmsv_t; // ---------------------------------------------------------------- lhmsv_t* lhmsv_alloc(); void lhmsv_free(lhmsv_t* pmap); void lhmsv_clear(lhmsv_t* pmap); void lhmsv_put(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags); void* lhmsv_get(lhmsv_t* pmap, char* key); int lhmsv_has_key(lhmsv_t* pmap, char* key); // Unit-test hook int lhmsv_check_counts(lhmsv_t* pmap); #endif // LHMSV_H miller-5.6.2/c/containers/local_stack.c000066400000000000000000000324511354153536500200410ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/local_stack.h" // ================================================================ static local_stack_frame_t* _local_stack_alloc(int size, int ephemeral) { local_stack_frame_t* pframe = mlr_malloc_or_die(sizeof(local_stack_frame_t)); pframe->in_use = FALSE; pframe->ephemeral = ephemeral; pframe->size = size; pframe->subframe_base = 0; pframe->pvars = mlr_malloc_or_die(size * sizeof(local_stack_frame_entry_t)); for (int i = 0; i < size; i++) { local_stack_frame_entry_t* pentry = &pframe->pvars[i]; pentry->xvalue = mlhmmv_xvalue_wrap_terminal(mv_absent()); pentry->name = NULL; // Any type can be written here, unless otherwise specified by a typed definition pentry->type_mask = TYPE_MASK_ANY; } return pframe; } // ---------------------------------------------------------------- local_stack_frame_t* local_stack_frame_alloc(int size) { return _local_stack_alloc(size, FALSE); } // ---------------------------------------------------------------- void local_stack_frame_free(local_stack_frame_t* pframe) { if (pframe == NULL) return; for (int i = 0; i < pframe->size; i++) { mlhmmv_xvalue_free(&pframe->pvars[i].xvalue); } free(pframe->pvars); free(pframe); } // ---------------------------------------------------------------- local_stack_frame_t* local_stack_frame_enter(local_stack_frame_t* pframe) { if (!pframe->in_use) { pframe->in_use = TRUE; LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME NON-EPH ENTER %p %d\n", pframe, pframe->size)); return pframe; } else { local_stack_frame_t* prv = _local_stack_alloc(pframe->size, TRUE); LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME EPH ENTER %p/%p %d\n", pframe, prv, pframe->size)); prv->in_use = TRUE; return prv; } } // ---------------------------------------------------------------- void local_stack_frame_exit (local_stack_frame_t* pframe) { MLR_INTERNAL_CODING_ERROR_UNLESS(mlhmmv_xvalue_is_absent_and_nonterminal(&pframe->pvars[0].xvalue)); if (!pframe->ephemeral) { pframe->in_use = FALSE; LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME NON-EPH EXIT %p %d\n", pframe, pframe->size)); } else { local_stack_frame_free(pframe); LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME EPH EXIT %p %d\n", pframe, pframe->size)); } } // ================================================================ local_stack_t* local_stack_alloc() { local_stack_t* pstack = mlr_malloc_or_die(sizeof(local_stack_t)); pstack->pframes = sllv_alloc(); return pstack; } // ---------------------------------------------------------------- void local_stack_free(local_stack_t* pstack) { if (pstack == NULL) return; for (sllve_t* pe = pstack->pframes->phead; pe != NULL; pe = pe->pnext) { local_stack_frame_free(pe->pvvalue); } sllv_free(pstack->pframes); free(pstack); } // ---------------------------------------------------------------- void local_stack_push(local_stack_t* pstack, local_stack_frame_t* pframe) { sllv_push(pstack->pframes, pframe); } local_stack_frame_t* local_stack_pop(local_stack_t* pstack) { return sllv_pop(pstack->pframes); } // ---------------------------------------------------------------- mv_t local_stack_frame_ref_terminal_from_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; mlhmmv_xvalue_t* pbase_xval = &pentry->xvalue; if (!(TYPE_MASK_MAP & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_read(pentry); } #ifdef LOCAL_STACK_TRACE_ENABLE if (pbase_xval == NULL) { printf("VALUE IS NULL\n"); } else if (pbase_xval->is_terminal) { char* s = mv_alloc_format_val(&pbase_xval->terminal_mlrval); printf("VALUE IS %s\n", s); free(s); } else if (pbase_xval->pnext_level == NULL) { LOCAL_STACK_TRACE(printf("VALUE IS EMPTY\n")); } else { printf("VALUE IS:\n"); printf("PTR IS %p\n", pbase_xval->pnext_level); mlhmmv_level_print_stacked(pbase_xval->pnext_level, 0, TRUE, TRUE, "", stdout); } #endif // xxx this is a mess; clean it up. int error = 0; // Maybe null mlhmmv_xvalue_t* pxval; if (pmvkeys == NULL || pmvkeys->length == 0) { pxval = pbase_xval; } else { if (pbase_xval->is_terminal) { return mv_absent(); } else { pxval = mlhmmv_level_look_up_and_ref_xvalue(pbase_xval->pnext_level, pmvkeys, &error); } } if (pxval != NULL && pxval->is_terminal) { return pxval->terminal_mlrval; } else { return mv_absent(); } } // ---------------------------------------------------------------- mlhmmv_xvalue_t* local_stack_frame_ref_extended_from_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; if (!(TYPE_MASK_MAP & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_read(pentry); } #ifdef LOCAL_STACK_TRACE_ENABLE if (pmvalue == NULL) { printf("VALUE IS NULL\n"); } else if (pmvalue->is_terminal) { char* s = mv_alloc_format_val(&pmvalue->terminal_mlrval); printf("VALUE IS %s\n", s); free(s); } else if (pmvalue->pnext_level == NULL) { LOCAL_STACK_TRACE(printf("VALUE IS EMPTY\n")); } else { printf("VALUE IS:\n"); printf("PTR IS %p\n", pmvalue->pnext_level); mlhmmv_level_print_stacked(pmvalue->pnext_level, 0, TRUE, TRUE, "", stdout); } #endif if (pmvkeys == NULL) { // base-level access return pmvalue; } else { int error = 0; // Maybe null return mlhmmv_level_look_up_and_ref_xvalue(pmvalue->pnext_level, pmvkeys, &error); } } // ---------------------------------------------------------------- void local_stack_frame_define_terminal(local_stack_frame_t* pframe, char* variable_name, int vardef_frame_relative_index, int type_mask, mv_t val) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "DEFINE", TRUE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; pentry->name = variable_name; // no strdup, for performance -- caller must ensure extent pentry->type_mask = type_mask; if (!(type_mask_from_mv(&val) & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &val); } mlhmmv_xvalue_free(&pentry->xvalue); if (mv_is_absent(&val)) { mv_free(&val); // xxx doc ownership semantics at header file } else { pentry->xvalue = mlhmmv_xvalue_wrap_terminal(val); // xxx deep-copy? } } // ---------------------------------------------------------------- void local_stack_frame_define_extended(local_stack_frame_t* pframe, char* variable_name, int vardef_frame_relative_index, int type_mask, mlhmmv_xvalue_t xval) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; pentry->name = variable_name; // no strdup, for performance -- caller must ensure extent pentry->type_mask = type_mask; if (xval.is_terminal) { if (!(type_mask_from_mv(&xval.terminal_mlrval) & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); } } else { if (!(TYPE_MASK_MAP & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); } } if (!mlhmmv_xvalue_is_absent_and_nonterminal(&xval)) { mlhmmv_xvalue_free(&pentry->xvalue); pentry->xvalue = xval; } } // ---------------------------------------------------------------- void local_stack_frame_assign_terminal_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys, mv_t terminal_value) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; if (!(TYPE_MASK_MAP & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &terminal_value); } mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; if (pmvalue->is_terminal) { mv_free(&pmvalue->terminal_mlrval); *pmvalue = mlhmmv_xvalue_alloc_empty_map(); } mlhmmv_level_put_terminal(pmvalue->pnext_level, pmvkeys->phead, &terminal_value); LOCAL_STACK_TRACE(printf("VALUE IS:\n")); LOCAL_STACK_TRACE(mlhmmv_level_print_stacked(pmvalue->pnext_level, 0, TRUE, TRUE, "", stdout)); } // ---------------------------------------------------------------- void local_stack_frame_assign_extended_nonindexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, mlhmmv_xvalue_t xval) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; if (xval.is_terminal) { if (!(type_mask_from_mv(&xval.terminal_mlrval) & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); } } else { if (!(TYPE_MASK_MAP & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); } } mlhmmv_xvalue_free(&pentry->xvalue); pentry->xvalue = xval; } // ---------------------------------------------------------------- void local_stack_frame_assign_extended_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys, mlhmmv_xvalue_t new_value) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; if (!(TYPE_MASK_MAP & pentry->type_mask)) { local_stack_frame_throw_type_xmismatch_for_write(pentry, &new_value); } mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; if (pmvalue->is_terminal) { mv_free(&pmvalue->terminal_mlrval); *pmvalue = mlhmmv_xvalue_alloc_empty_map(); } mlhmmv_level_put_xvalue(pmvalue->pnext_level, pmvkeys->phead, &new_value); LOCAL_STACK_TRACE(printf("VALUE IS:\n")); LOCAL_STACK_TRACE(mlhmmv_level_print_stacked(pmvalue->pnext_level, 0, TRUE, TRUE, "", stdout)); } // ---------------------------------------------------------------- static int local_stack_bounds_check_announce_first_call = TRUE; void local_stack_bounds_check(local_stack_frame_t* pframe, char* op, int set, int vardef_frame_relative_index) { if (local_stack_bounds_check_announce_first_call) { fprintf(stderr, "%s: local-stack bounds-checking is enabled\n", MLR_GLOBALS.bargv0); local_stack_bounds_check_announce_first_call = FALSE; } if (vardef_frame_relative_index < 0) { fprintf(stderr, "OP=%s FRAME=%p IDX=%d/%d STACK UNDERFLOW\n", op, pframe, vardef_frame_relative_index, pframe->size); exit(1); } if (set && vardef_frame_relative_index == 0) { fprintf(stderr, "OP=%s FRAME=%p IDX=%d/%d ABSENT WRITE\n", op, pframe, vardef_frame_relative_index, pframe->size); exit(1); } if (vardef_frame_relative_index >= pframe->size) { fprintf(stderr, "OP=%s FRAME=%p IDX=%d/%d STACK OVERFLOW\n", op, pframe, vardef_frame_relative_index, pframe->size); exit(1); } } // ---------------------------------------------------------------- void local_stack_frame_throw_type_mismatch_for_write(local_stack_frame_entry_t* pentry, mv_t* pval) { MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); char* sval = mv_alloc_format_val_quoting_strings(pval); fprintf(stderr, "%s: %s type assertion for variable %s unmet by value %s with type %s.\n", MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name, sval, mt_describe_type_simple(pval->type)); free(sval); exit(1); } void local_stack_frame_throw_type_xmismatch_for_write(local_stack_frame_entry_t* pentry, mlhmmv_xvalue_t* pxval) { MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); char* sval = mv_alloc_format_val_quoting_strings(&pxval->terminal_mlrval); // xxx temp -- maybe not terminal fprintf(stderr, "%s: %s type assertion for variable %s unmet by value %s with type %s.\n", MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name, sval, mlhmmv_xvalue_describe_type_simple(pxval)); free(sval); exit(1); } // ---------------------------------------------------------------- void local_stack_frame_throw_type_mismatch_for_read(local_stack_frame_entry_t* pentry) { MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); fprintf(stderr, "%s: %s type assertion for variable %s unmet on read.\n", MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name); exit(1); } void local_stack_frame_throw_type_xmismatch_for_read(local_stack_frame_entry_t* pentry) { MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); fprintf(stderr, "%s: %s type assertion for variable %s unmet on read.\n", MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name); exit(1); } miller-5.6.2/c/containers/local_stack.h000066400000000000000000000222201354153536500200370ustar00rootroot00000000000000#ifndef LOCAL_STACK_H #define LOCAL_STACK_H #include "lib/mlrval.h" #include "containers/type_decl.h" #include "containers/sllv.h" #include "containers/mlhmmv.h" // ================================================================ // Bound & scoped variables for use in for-loops, function bodies, and // subroutine bodies. Indices of local variables, and max-depth for top-level // statement blocks, are compted by the stack-allocator which marks up the AST // before the CST is built from it. // // A convention shared between the stack-allocator and this data structure is // that slot 0 is an absent-null which is used for reads of undefined (or // as-yet-undefined) local variables. // // Values assigned to a local-stack variable are owned by this container. // They will be freed: // * On overwrite, e.g. on 'x = oldval' then 'x = newval' the oldval // will be freed on the newval assignment, and // * At stack-frame exit. // For this reason values assigned to locals may be passed in by reference // if they are ephemeral, i.e. if it is desired for this container to free // them. Otherwise, values should be copied before being passed in. // ================================================================ // ================================================================ typedef struct _local_stack_frame_entry_t { char* name; // For type-check error messages. Not strduped; the caller must ensure extent. mlhmmv_xvalue_t xvalue; int type_mask; } local_stack_frame_entry_t; typedef struct _local_stack_frame_t { int in_use; int ephemeral; int size; int subframe_base; local_stack_frame_entry_t* pvars; } local_stack_frame_t; // ---------------------------------------------------------------- // A stack is allocated for a top-level statement block: begin, end, or main, or // user-defined function/subroutine. (The latter two may be called recursively // in which case the in_use flag notes the need to allocate a new stack.) local_stack_frame_t* local_stack_frame_alloc(int size); void local_stack_frame_free(local_stack_frame_t* pframe); // ================================================================ //#define LOCAL_STACK_TRACE_ENABLE //#define LOCAL_STACK_BOUNDS_CHECK_ENABLE void local_stack_bounds_check(local_stack_frame_t* pframe, char* op, int set, int vardef_frame_relative_index); #ifdef LOCAL_STACK_BOUNDS_CHECK_ENABLE #define LOCAL_STACK_BOUNDS_CHECK(pframe, op, set, vardef_frame_relative_index) \ local_stack_bounds_check((pframe), (op), (set), (vardef_frame_relative_index)) #else #define LOCAL_STACK_BOUNDS_CHECK(pframe, op, set, vardef_frame_relative_index) #endif #ifdef LOCAL_STACK_TRACE_ENABLE #define LOCAL_STACK_TRACE(p) p #else #define LOCAL_STACK_TRACE(p) #endif // These are unconditional. With the single added character 'X' they can be // used to focus verbosity at specific callsites for dev/debug. #define LOCAL_STACK_BOUNDS_CHECKX(pframe, op, set, vardef_frame_relative_index) \ local_stack_bounds_check((pframe), (op), (set), (vardef_frame_relative_index)) #define LOCAL_STACK_TRACEX(p) p // ---------------------------------------------------------------- // Sets/clears the in-use flag for top-level statement blocks, and verifies the // contract for absent-null at slot 0. // For non-recursive functions/subroutines the enter method sets the in-use flag // and returns its argument; the exit method clears that flag. For recursively // invoked functions/subroutines the enter method returns another stack of the // same size, and the exit method frees that. // // The reason we don't simply always allocate is that begin/main/end statements // are never recursive, and most functions and subroutines are not recursive, so // most of the time there will be a single frame for each. We allocate that once // at startup, reuse it on every record, and free it at exit -- rather than // allocating and freeing frames on every record. local_stack_frame_t* local_stack_frame_enter(local_stack_frame_t* pframe); void local_stack_frame_exit(local_stack_frame_t* pframe); void local_stack_frame_throw_type_mismatch_for_write(local_stack_frame_entry_t* pentry, mv_t* pval); void local_stack_frame_throw_type_xmismatch_for_write(local_stack_frame_entry_t* pentry, mlhmmv_xvalue_t* pxval); void local_stack_frame_throw_type_mismatch_for_read(local_stack_frame_entry_t* pentry); void local_stack_frame_throw_type_xmismatch_for_read(local_stack_frame_entry_t* pentry); // ---------------------------------------------------------------- static inline mv_t local_stack_frame_get_terminal_from_nonindexed(local_stack_frame_t* pframe, // move to reference semantics int vardef_frame_relative_index) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; mlhmmv_xvalue_t* pvalue = &pentry->xvalue; if (pvalue != NULL && pvalue->is_terminal) { return pvalue->terminal_mlrval; } else { return mv_absent(); } } // ---------------------------------------------------------------- static inline void local_stack_frame_assign_terminal_nonindexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, mv_t val) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; if (!(type_mask_from_mv(&val) & pentry->type_mask)) { local_stack_frame_throw_type_mismatch_for_write(pentry, &val); } mlhmmv_xvalue_free(&pentry->xvalue); pentry->xvalue = mlhmmv_xvalue_wrap_terminal(val); // xxx deep-copy? } // ---------------------------------------------------------------- static inline mlhmmv_xvalue_t* local_stack_frame_ref_extended_from_nonindexed(local_stack_frame_t* pframe, int vardef_frame_relative_index) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; return pmvalue; } // ---------------------------------------------------------------- mv_t local_stack_frame_ref_terminal_from_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys); mlhmmv_xvalue_t* local_stack_frame_ref_extended_from_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys); void local_stack_frame_define_terminal(local_stack_frame_t* pframe, char* variable_name, int vardef_frame_relative_index, int type_mask, mv_t val); void local_stack_frame_define_extended(local_stack_frame_t* pframe, char* variable_name, int vardef_frame_relative_index, int type_mask, mlhmmv_xvalue_t xval); void local_stack_frame_assign_extended_nonindexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, mlhmmv_xvalue_t xval); void local_stack_frame_assign_terminal_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys, mv_t terminal_value); void local_stack_frame_assign_extended_indexed(local_stack_frame_t* pframe, int vardef_frame_relative_index, sllmv_t* pmvkeys, mlhmmv_xvalue_t terminal_value); // ---------------------------------------------------------------- // Frames are entered/exited for each curly-braced statement block, including // the top-level block itself as well as ifs/fors/whiles. static inline void local_stack_subframe_enter(local_stack_frame_t* pframe, int count) { LOCAL_STACK_TRACE(printf("LOCAL STACK SUBFRAME %p ENTER %d->%d\n", pframe, pframe->subframe_base, pframe->subframe_base+count)); local_stack_frame_entry_t* psubframe = &pframe->pvars[pframe->subframe_base]; for (int i = 0; i < count; i++) { LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p CLEAR %d\n", pframe, pframe->subframe_base+i)); LOCAL_STACK_BOUNDS_CHECK(pframe, "CLEAR", FALSE, pframe->subframe_base+i); local_stack_frame_entry_t* pentry = &psubframe[i]; mlhmmv_xvalue_reset(&pentry->xvalue); pentry->type_mask = TYPE_MASK_ANY; } pframe->subframe_base += count; } // ---------------------------------------------------------------- static inline void local_stack_subframe_exit(local_stack_frame_t* pframe, int count) { LOCAL_STACK_TRACE(printf("LOCAL STACK SUBFRAME %p EXIT %d->%d\n", pframe, pframe->subframe_base, pframe->subframe_base-count)); pframe->subframe_base -= count; local_stack_frame_entry_t* psubframe = &pframe->pvars[pframe->subframe_base]; for (int i = 0; i < count; i++) { local_stack_frame_entry_t* pentry = &psubframe[i]; mlhmmv_xvalue_free(&pentry->xvalue); } } // ================================================================ typedef struct _local_stack_t { sllv_t* pframes; } local_stack_t; local_stack_t* local_stack_alloc(); void local_stack_free(local_stack_t* pstack); void local_stack_push(local_stack_t* pstack, local_stack_frame_t* pframe); local_stack_frame_t* local_stack_pop(local_stack_t* pstack); static inline local_stack_frame_t* local_stack_get_top_frame(local_stack_t* pstack) { return pstack->pframes->phead->pvvalue; } #endif // LOCAL_STACK_H miller-5.6.2/c/containers/loop_stack.c000066400000000000000000000062511354153536500177170ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "loop_stack.h" #define INITIAL_SIZE 32 // Example states: // num_allocated = 4 num_allocated = 4 num_allocated = 4 num_allocated = 4 // num_used = 1 num_used = 2 num_used = 3 num_used = 4 // num_used_minus_one = 0 num_used_minus_one = 1 num_used_minus_one = 2 num_used_minus_one = 3 // // +---+ +---+ +---+ +---+ // | 2 | 0 <--- top | 2 | 0 | 2 | 0 | 2 | 0 // +---+ +---+ +---+ +---+ // |///| 1 | 0 | 1 <--- top | 0 | 1 | 0 | // +---+ +---+ +---+ +---+ // |///| 2 |///| 2 | 4 | 2 <--- top | 4 | // +---+ +---+ +---+ +---+ // |///| 3 |///| 3 |///| 3 | 6 | 3 <--- top // +---+ +---+ +---+ +---+ // ---------------------------------------------------------------- loop_stack_t* loop_stack_alloc() { loop_stack_t* pstack = mlr_malloc_or_die(sizeof(loop_stack_t)); // Guard zone of one. As noted in the header file, set/get are intentionally not bounds-checked. // If set is called without push, or after final pop, we can at least not corrupt other code. pstack->num_used_minus_one = 0; pstack->num_allocated = INITIAL_SIZE; pstack->pframes = mlr_malloc_or_die(pstack->num_allocated * sizeof(int)); memset(pstack->pframes, 0, pstack->num_allocated * sizeof(int)); return pstack; } // ---------------------------------------------------------------- void loop_stack_free(loop_stack_t* pstack) { if (pstack == NULL) return; free(pstack->pframes); free(pstack); } // ---------------------------------------------------------------- void loop_stack_push(loop_stack_t* pstack) { if (pstack->num_used_minus_one >= pstack->num_allocated - 1) { pstack->num_allocated += INITIAL_SIZE; pstack->pframes = mlr_realloc_or_die(pstack->pframes, pstack->num_allocated * sizeof(int)); } pstack->num_used_minus_one++; pstack->pframes[pstack->num_used_minus_one] = 0; } // ---------------------------------------------------------------- int loop_stack_pop(loop_stack_t* pstack) { MLR_INTERNAL_CODING_ERROR_IF(pstack->num_used_minus_one <= 0); int rv = pstack->pframes[pstack->num_used_minus_one]; pstack->num_used_minus_one--; return rv; } // ---------------------------------------------------------------- // Not bounds-checked, as noted in the header file. void loop_stack_set(loop_stack_t* pstack, int bits) { pstack->pframes[pstack->num_used_minus_one] |= bits; } void loop_stack_clear(loop_stack_t* pstack, int bits) { pstack->pframes[pstack->num_used_minus_one] &= ~bits; } // ---------------------------------------------------------------- // Not bounds-checked, as noted in the header file. int loop_stack_get(loop_stack_t* pstack) { return pstack->pframes[pstack->num_used_minus_one]; } miller-5.6.2/c/containers/loop_stack.h000066400000000000000000000021171354153536500177210ustar00rootroot00000000000000// Holds broken/continued flags for loops (for-srec, for-oosvar, while, do-while). #ifndef LOOP_STACK_H #define LOOP_STACK_H #define LOOP_BROKEN 0x8000 #define LOOP_CONTINUED 0x0100 typedef struct _loop_stack_t { int num_used_minus_one; int num_allocated; int* pframes; } loop_stack_t; loop_stack_t* loop_stack_alloc(); void loop_stack_free(loop_stack_t* pstack); // To be used on entry to loop handler. void loop_stack_push(loop_stack_t* pstack); // To be used on exit from loop handler. int loop_stack_pop(loop_stack_t* pstack); // To be used by break/continue handler. // NOTE: For efficiency the stack is **NOT** bounds-checked here. E.g. if set is done before a push, // or after an emptying pop, behavior is unspecified. void loop_stack_set(loop_stack_t* pstack, int bits); void loop_stack_clear(loop_stack_t* pstack, int bits); // To be used by loop handler. // NOTE: For efficiency the stack is **NOT** bounds-checked here. E.g. if set is done before a push, // or after an emptying pop, behavior is unspecified. int loop_stack_get(loop_stack_t* pstack); #endif // LOOP_STACK_H miller-5.6.2/c/containers/lrec.c000066400000000000000000000446221354153536500165120ustar00rootroot00000000000000#include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/string_builder.h" #include "containers/hss.h" #include "containers/slls.h" #include "containers/lrec.h" #define SB_ALLOC_LENGTH 256 static lrece_t* lrec_find_entry(lrec_t* prec, char* key); static void lrec_link_at_head(lrec_t* prec, lrece_t* pe); static void lrec_link_at_tail(lrec_t* prec, lrece_t* pe); static void lrec_unbacked_free(lrec_t* prec); static void lrec_free_single_line_backing(lrec_t* prec); static void lrec_free_csv_backing(lrec_t* prec); static void lrec_free_multiline_backing(lrec_t* prec); // ---------------------------------------------------------------- lrec_t* lrec_unbacked_alloc() { lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); memset(prec, 0, sizeof(lrec_t)); prec->pfree_backing_func = lrec_unbacked_free; return prec; } lrec_t* lrec_dkvp_alloc(char* line) { lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); memset(prec, 0, sizeof(lrec_t)); prec->psingle_line = line; prec->pfree_backing_func = lrec_free_single_line_backing; return prec; } lrec_t* lrec_nidx_alloc(char* line) { lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); memset(prec, 0, sizeof(lrec_t)); prec->psingle_line = line; prec->pfree_backing_func = lrec_free_single_line_backing; return prec; } lrec_t* lrec_csvlite_alloc(char* data_line) { lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); memset(prec, 0, sizeof(lrec_t)); prec->psingle_line = data_line; prec->pfree_backing_func = lrec_free_csv_backing; return prec; } lrec_t* lrec_csv_alloc(char* data_line) { lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); memset(prec, 0, sizeof(lrec_t)); prec->psingle_line = data_line; prec->pfree_backing_func = lrec_free_csv_backing; return prec; } lrec_t* lrec_xtab_alloc(slls_t* pxtab_lines) { lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); memset(prec, 0, sizeof(lrec_t)); prec->pxtab_lines = pxtab_lines; prec->pfree_backing_func = lrec_free_multiline_backing; return prec; } // ---------------------------------------------------------------- static void lrec_free_contents(lrec_t* prec) { for (lrece_t* pe = prec->phead; pe != NULL; /*pe = pe->pnext*/) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); if (pe->free_flags & FREE_ENTRY_VALUE) free(pe->value); lrece_t* ope = pe; pe = pe->pnext; free(ope); } prec->pfree_backing_func(prec); } // ---------------------------------------------------------------- void lrec_clear(lrec_t* prec) { if (prec == NULL) return; lrec_free_contents(prec); memset(prec, 0, sizeof(lrec_t)); prec->pfree_backing_func = lrec_unbacked_free; } // ---------------------------------------------------------------- void lrec_free(lrec_t* prec) { if (prec == NULL) return; lrec_free_contents(prec); free(prec); } // ---------------------------------------------------------------- lrec_t* lrec_copy(lrec_t* pinrec) { lrec_t* poutrec = lrec_unbacked_alloc(); for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { lrec_put(poutrec, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } return poutrec; } // ---------------------------------------------------------------- void lrec_put(lrec_t* prec, char* key, char* value, char free_flags) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } if (free_flags & FREE_ENTRY_KEY) free(key); pe->value = value; if (free_flags & FREE_ENTRY_VALUE) pe->free_flags |= FREE_ENTRY_VALUE; else pe->free_flags &= ~FREE_ENTRY_VALUE; } else { pe = mlr_malloc_or_die(sizeof(lrece_t)); pe->key = key; pe->value = value; pe->free_flags = free_flags; pe->quote_flags = 0; if (prec->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; prec->phead = pe; prec->ptail = pe; } else { pe->pprev = prec->ptail; pe->pnext = NULL; prec->ptail->pnext = pe; prec->ptail = pe; } prec->field_count++; } } void lrec_put_ext(lrec_t* prec, char* key, char* value, char free_flags, char quote_flags) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } if (free_flags & FREE_ENTRY_KEY) free(key); pe->value = value; if (free_flags & FREE_ENTRY_VALUE) pe->free_flags |= FREE_ENTRY_VALUE; else pe->free_flags &= ~FREE_ENTRY_VALUE; } else { pe = mlr_malloc_or_die(sizeof(lrece_t)); pe->key = key; pe->value = value; pe->free_flags = free_flags; pe->quote_flags = quote_flags; if (prec->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; prec->phead = pe; prec->ptail = pe; } else { pe->pprev = prec->ptail; pe->pnext = NULL; prec->ptail->pnext = pe; prec->ptail = pe; } prec->field_count++; } } void lrec_prepend(lrec_t* prec, char* key, char* value, char free_flags) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } pe->value = value; pe->free_flags &= ~FREE_ENTRY_VALUE; if (free_flags & FREE_ENTRY_VALUE) pe->free_flags |= FREE_ENTRY_VALUE; } else { pe = mlr_malloc_or_die(sizeof(lrece_t)); pe->key = key; pe->value = value; pe->free_flags = free_flags; pe->quote_flags = 0; if (prec->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; prec->phead = pe; prec->ptail = pe; } else { pe->pnext = prec->phead; pe->pprev = NULL; prec->phead->pprev = pe; prec->phead = pe; } prec->field_count++; } } lrece_t* lrec_put_after(lrec_t* prec, lrece_t* pd, char* key, char* value, char free_flags) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { // Overwrite if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } pe->value = value; pe->free_flags &= ~FREE_ENTRY_VALUE; if (free_flags & FREE_ENTRY_VALUE) pe->free_flags |= FREE_ENTRY_VALUE; } else { // Insert after specified entry pe = mlr_malloc_or_die(sizeof(lrece_t)); pe->key = key; pe->value = value; pe->free_flags = free_flags; pe->quote_flags = 0; if (pd->pnext == NULL) { // Append at end of list pd->pnext = pe; pe->pprev = pd; pe->pnext = NULL; prec->ptail = pe; } else { lrece_t* pf = pd->pnext; pd->pnext = pe; pf->pprev = pe; pe->pprev = pd; pe->pnext = pf; } prec->field_count++; } return pe; } // ---------------------------------------------------------------- char* lrec_get(lrec_t* prec, char* key) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { return pe->value; } else { return NULL; } } char* lrec_get_pff(lrec_t* prec, char* key, char** ppfree_flags) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { *ppfree_flags = &pe->free_flags; return pe->value; } else { *ppfree_flags = NULL; return NULL; } } char* lrec_get_ext(lrec_t* prec, char* key, lrece_t** ppentry) { lrece_t* pe = lrec_find_entry(prec, key); if (pe != NULL) { *ppentry = pe; return pe->value; } else { *ppentry = NULL;; return NULL; } } // ---------------------------------------------------------------- lrece_t* lrec_get_pair_by_position(lrec_t* prec, int position) { // 1-up not 0-up if (position <= 0 || position > prec->field_count) { return NULL; } int sought_index = position - 1; int found_index = 0; lrece_t* pe = NULL; for ( found_index = 0, pe = prec->phead; pe != NULL; found_index++, pe = pe->pnext ) { if (found_index == sought_index) { return pe; } } fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } char* lrec_get_key_by_position(lrec_t* prec, int position) { // 1-up not 0-up lrece_t* pe = lrec_get_pair_by_position(prec, position); if (pe == NULL) { return NULL; } else { return pe->key; } } char* lrec_get_value_by_position(lrec_t* prec, int position) { // 1-up not 0-up lrece_t* pe = lrec_get_pair_by_position(prec, position); if (pe == NULL) { return NULL; } else { return pe->value; } } // ---------------------------------------------------------------- void lrec_remove(lrec_t* prec, char* key) { lrece_t* pe = lrec_find_entry(prec, key); if (pe == NULL) return; lrec_unlink(prec, pe); if (pe->free_flags & FREE_ENTRY_KEY) { free(pe->key); } if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } free(pe); } // ---------------------------------------------------------------- void lrec_remove_by_position(lrec_t* prec, int position) { // 1-up not 0-up lrece_t* pe = lrec_get_pair_by_position(prec, position); if (pe == NULL) return; lrec_unlink(prec, pe); if (pe->free_flags & FREE_ENTRY_KEY) { free(pe->key); } if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } free(pe); } // Before: // "x" => "3" // "y" => "4" <-- pold // "z" => "5" <-- pnew // // Rename y to z // // After: // "x" => "3" // "z" => "4" // void lrec_rename(lrec_t* prec, char* old_key, char* new_key, int new_needs_freeing) { lrece_t* pold = lrec_find_entry(prec, old_key); if (pold != NULL) { lrece_t* pnew = lrec_find_entry(prec, new_key); if (pnew == NULL) { // E.g. rename "x" to "y" when "y" is not present if (pold->free_flags & FREE_ENTRY_KEY) { free(pold->key); pold->key = new_key; if (!new_needs_freeing) pold->free_flags &= ~FREE_ENTRY_KEY; } else { pold->key = new_key; if (new_needs_freeing) pold->free_flags |= FREE_ENTRY_KEY; } } else { // E.g. rename "x" to "y" when "y" is already present if (pnew->free_flags & FREE_ENTRY_VALUE) { free(pnew->value); } if (pold->free_flags & FREE_ENTRY_KEY) { free(pold->key); pold->free_flags &= ~FREE_ENTRY_KEY; } pold->key = new_key; if (new_needs_freeing) pold->free_flags |= FREE_ENTRY_KEY; else pold->free_flags &= ~FREE_ENTRY_KEY; lrec_unlink(prec, pnew); free(pnew); } } } // Cases: // 1. Rename field at position 3 from "x" to "y when "y" does not exist elsewhere in the srec // 2. Rename field at position 3 from "x" to "y when "y" does exist elsewhere in the srec // Note: position is 1-up not 0-up void lrec_rename_at_position(lrec_t* prec, int position, char* new_key, int new_needs_freeing){ lrece_t* pe = lrec_get_pair_by_position(prec, position); if (pe == NULL) { if (new_needs_freeing) { free(new_key); } return; } lrece_t* pother = lrec_find_entry(prec, new_key); if (pe->free_flags & FREE_ENTRY_KEY) { free(pe->key); } pe->key = new_key; if (new_needs_freeing) { pe->free_flags |= FREE_ENTRY_KEY; } else { pe->free_flags &= ~FREE_ENTRY_KEY; } if (pother != NULL) { lrec_unlink(prec, pother); free(pother); } } // ---------------------------------------------------------------- void lrec_move_to_head(lrec_t* prec, char* key) { lrece_t* pe = lrec_find_entry(prec, key); if (pe == NULL) return; lrec_unlink(prec, pe); lrec_link_at_head(prec, pe); } void lrec_move_to_tail(lrec_t* prec, char* key) { lrece_t* pe = lrec_find_entry(prec, key); if (pe == NULL) return; lrec_unlink(prec, pe); lrec_link_at_tail(prec, pe); } // ---------------------------------------------------------------- // Simply rename the first (at most) n positions where n is the length of pnames. // // Possible complications: // // * pnames itself contains duplicates -- we require this as invariant-check from the caller since (for performance) // we don't want to check this on every record processed. // // * pnames has length less than the current record and one of the new names becomes a clash with an existing name. // Example: // - Input record has names "a,b,c,d,e". // - pnames is "d,x,f" // - We then construct the invalid "d,x,f,d,e" -- we need to detect and unset the second 'd' field. void lrec_label(lrec_t* prec, slls_t* pnames_as_list, hss_t* pnames_as_set) { lrece_t* pe = prec->phead; sllse_t* pn = pnames_as_list->phead; // Process the labels list for ( ; pe != NULL && pn != NULL; pe = pe->pnext, pn = pn->pnext) { char* new_name = pn->value; if (pe->free_flags & FREE_ENTRY_KEY) { free(pe->key); } pe->key = mlr_strdup_or_die(new_name);; pe->free_flags |= FREE_ENTRY_KEY; } // Process the remaining fields in the record beyond those affected by the new-labels list for ( ; pe != NULL; ) { char* name = pe->key; if (hss_has(pnames_as_set, name)) { lrece_t* pnext = pe->pnext; if (pe->free_flags & FREE_ENTRY_KEY) { free(pe->key); } if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->value); } lrec_unlink(prec, pe); free(pe); pe = pnext; } else { pe = pe->pnext; } } } // ---------------------------------------------------------------- void lrece_update_value(lrece_t* pe, char* new_value, int new_needs_freeing) { if (pe == NULL) { return; } if (pe->free_flags & FREE_ENTRY_VALUE) { free(pe->key); } pe->value = new_value; if (new_needs_freeing) pe->free_flags |= FREE_ENTRY_VALUE; else pe->free_flags &= ~FREE_ENTRY_VALUE; } // ---------------------------------------------------------------- void lrec_unlink(lrec_t* prec, lrece_t* pe) { if (pe == prec->phead) { if (pe == prec->ptail) { prec->phead = NULL; prec->ptail = NULL; } else { prec->phead = pe->pnext; pe->pnext->pprev = NULL; } } else { pe->pprev->pnext = pe->pnext; if (pe == prec->ptail) { prec->ptail = pe->pprev; } else { pe->pnext->pprev = pe->pprev; } } prec->field_count--; } void lrec_unlink_and_free(lrec_t* prec, lrece_t* pe) { if (pe->free_flags & FREE_ENTRY_KEY) free(pe->key); if (pe->free_flags & FREE_ENTRY_VALUE) free(pe->value); lrec_unlink(prec, pe); free(pe); } // ---------------------------------------------------------------- static void lrec_link_at_head(lrec_t* prec, lrece_t* pe) { if (prec->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; prec->phead = pe; prec->ptail = pe; } else { // [b,c,d] + a pe->pprev = NULL; pe->pnext = prec->phead; prec->phead->pprev = pe; prec->phead = pe; } prec->field_count++; } static void lrec_link_at_tail(lrec_t* prec, lrece_t* pe) { if (prec->phead == NULL) { pe->pprev = NULL; pe->pnext = NULL; prec->phead = pe; prec->ptail = pe; } else { pe->pprev = prec->ptail; pe->pnext = NULL; prec->ptail->pnext = pe; prec->ptail = pe; } prec->field_count++; } // ---------------------------------------------------------------- void lrec_dump(lrec_t* prec) { lrec_dump_fp(prec, stdout); } void lrec_dump_fp(lrec_t* prec, FILE* fp) { if (prec == NULL) { fprintf(fp, "NULL\n"); return; } fprintf(fp, "field_count = %d\n", prec->field_count); fprintf(fp, "| phead: %16p | ptail %16p\n", prec->phead, prec->ptail); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { const char* key_string = (pe == NULL) ? "none" : pe->key == NULL ? "null" : pe->key; const char* value_string = (pe == NULL) ? "none" : pe->value == NULL ? "null" : pe->value; fprintf(fp, "| prev: %16p curr: %16p next: %16p | key: %12s | value: %12s |\n", pe->pprev, pe, pe->pnext, key_string, value_string); } } void lrec_dump_titled(char* msg, lrec_t* prec) { printf("%s:\n", msg); lrec_dump(prec); printf("\n"); } void lrec_pointer_dump(lrec_t* prec) { printf("prec %p\n", prec); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { printf(" pe %p k %p v %p\n", pe, pe->key, pe->value); } } // ---------------------------------------------------------------- static void lrec_unbacked_free(lrec_t* prec) { } static void lrec_free_single_line_backing(lrec_t* prec) { free(prec->psingle_line); } static void lrec_free_csv_backing(lrec_t* prec) { free(prec->psingle_line); } static void lrec_free_multiline_backing(lrec_t* prec) { slls_free(prec->pxtab_lines); } // ================================================================ // ---------------------------------------------------------------- // Note on efficiency: // // I was imagining/hoping that strcmp has additional optimizations (e.g. // hand-coded in assembly), so I don't *want* to re-implement it (i.e. I // probably can't outperform it). // // But actual experiments show I get about a 1-2% performance gain doing it // myself (on my particular system). static lrece_t* lrec_find_entry(lrec_t* prec, char* key) { #if 1 for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { char* pa = pe->key; char* pb = key; while (*pa && *pb && (*pa == *pb)) { pa++; pb++; } if (*pa == 0 && *pb == 0) return pe; } return NULL; #else for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) if (streq(pe->key, key)) return pe; return NULL; #endif } // ---------------------------------------------------------------- lrec_t* lrec_literal_1(char* k1, char* v1) { lrec_t* prec = lrec_unbacked_alloc(); lrec_put(prec, k1, v1, NO_FREE); return prec; } lrec_t* lrec_literal_2(char* k1, char* v1, char* k2, char* v2) { lrec_t* prec = lrec_unbacked_alloc(); lrec_put(prec, k1, v1, NO_FREE); lrec_put(prec, k2, v2, NO_FREE); return prec; } lrec_t* lrec_literal_3(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3) { lrec_t* prec = lrec_unbacked_alloc(); lrec_put(prec, k1, v1, NO_FREE); lrec_put(prec, k2, v2, NO_FREE); lrec_put(prec, k3, v3, NO_FREE); return prec; } lrec_t* lrec_literal_4(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3, char* k4, char* v4) { lrec_t* prec = lrec_unbacked_alloc(); lrec_put(prec, k1, v1, NO_FREE); lrec_put(prec, k2, v2, NO_FREE); lrec_put(prec, k3, v3, NO_FREE); lrec_put(prec, k4, v4, NO_FREE); return prec; } void lrec_print(lrec_t* prec) { FILE* output_stream = stdout; char ors = '\n'; char ofs = ','; char ops = '='; if (prec == NULL) { fputs("NULL", output_stream); fputc(ors, output_stream); return; } int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputc(ofs, output_stream); fputs(pe->key, output_stream); fputc(ops, output_stream); fputs(pe->value, output_stream); nf++; } fputc(ors, output_stream); } char* lrec_sprint(lrec_t* prec, char* ors, char* ofs, char* ops) { string_builder_t* psb = sb_alloc(SB_ALLOC_LENGTH); if (prec == NULL) { sb_append_string(psb, "NULL"); } else { int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) sb_append_string(psb, ofs); sb_append_string(psb, pe->key); sb_append_string(psb, ops); sb_append_string(psb, pe->value); nf++; } sb_append_string(psb, ors); } char* rv = sb_finish(psb); sb_free(psb); return rv; } miller-5.6.2/c/containers/lrec.h000066400000000000000000000202641354153536500165130ustar00rootroot00000000000000// ================================================================ // This is a hashless implementation of insertion-ordered key-value pairs for // Miller's fundamental record data structure. It implements the same // interface as the hashed version (see lhmss.h). // // Design: // // * It keeps a doubly-linked list of key-value pairs. // * No hash functions are computed when the map is written to or read from. // * Gets are implemented by sequential scan through the list: given a key, // the key-value pairs are scanned through until a match is (or is not) found. // * Performance improvement of 10-15% percent over lhmss is found (for test data). // // Motivation: // // * The use case for records in Miller is that *all* fields are read from // strings & written to strings (split/join), while only *some* fields are // operated on. // // * Meanwhile there are few repeated accesses to a given record: the // access-to-construct ratio is quite low for Miller data records. Miller // instantiates thousands, millions, billions of records (depending on the // input data) but accesses each record only once per mapping operation. // (This is in contrast to accumulator hashmaps which are repeatedly accessed // during a stats run.) // // * The hashed impl computes hashsums for *all* fields whether operated on or not, // for the benefit of the *few* fields looked up during the mapping operation. // // * The hashless impl only keeps string pointers. Lookups are done at runtime // doing prefix search on the key names. Assuming field names are distinct, // this is just a few char-ptr accesses which (in experiments) turn out to // offer about a 10-15% performance improvement. // // * Added benefit: the field-rename operation (preserving field order) becomes // trivial. // // Notes: // * null key is not supported. // * null value is supported. // ================================================================ #ifndef LREC_H #define LREC_H #include "lib/free_flags.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/hss.h" #include "containers/header_keeper.h" #define FIELD_QUOTED_ON_INPUT 0x02 struct _lrec_t; // forward reference typedef struct _lrec_t lrec_t; typedef void lrec_free_func_t(lrec_t* prec); // ---------------------------------------------------------------- typedef struct _lrece_t { char* key; char* value; // These indicate whether the key/value should be freed on lrec_free(). // Affirmative example: key/value is strdup of something. // Negative example: key/value are pointers into a line the memory // management of which is separately managed. // Another negative example: key/value is a string literal, e.g. "". char free_flags; char quote_flags; struct _lrece_t *pprev; struct _lrece_t *pnext; } lrece_t; struct _lrec_t { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int field_count; lrece_t* phead; lrece_t* ptail; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // See comments above free_flags. Used to track a mallocked pointer to be // freed at lrec_free(). // E.g. for NIDX, DKVP, and CSV formats (header handled separately in the // latter case). char* psingle_line; // For XTAB format. slls_t* pxtab_lines; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Format-dependent virtual-function pointer: lrec_free_func_t* pfree_backing_func; }; // ---------------------------------------------------------------- lrec_t* lrec_unbacked_alloc(); lrec_t* lrec_dkvp_alloc(char* line); lrec_t* lrec_nidx_alloc(char* line); lrec_t* lrec_csvlite_alloc(char* data_line); lrec_t* lrec_csv_alloc(char* data_line); lrec_t* lrec_xtab_alloc(slls_t* pxtab_lines); void lrec_clear(lrec_t* prec); void lrec_free(lrec_t* prec); lrec_t* lrec_copy(lrec_t* pinrec); // The only difference between lrec_put and lrec_prepend is that the latter // adds to the end of the record, while the former adds to the beginning. // // For both, the key/value respectively will be freed by lrec_free if the // corresponding bits are set in the free_flags. // // * If a string literal or other non-allocated pointer (e.g. mmapped memory // from a file reader) is passed in, the free flag should not be set. // // * If dynamically allocated pointers are passed in, then either: // // o The respective free_flag(s) should be set and the caller should be sure // not to also free (else, there will be heap corruption due to // double-free), or // // o The respective free_flag(s) should not be set and the caller should // free the memory (else, there will be a memory leak). void lrec_put(lrec_t* prec, char* key, char* value, char free_flags); void lrec_put_ext(lrec_t* prec, char* key, char* value, char free_flags, char quote_flags); // Like lrec_put: if key is present, modify value. But if not, add new field at start of record, not at end. void lrec_prepend(lrec_t* prec, char* key, char* value, char free_flags); // Like lrec_put: if key is present, modify value. But if not, add new field after specified entry, not at end. // Returns a pointer to the added/modified node. lrece_t* lrec_put_after(lrec_t* prec, lrece_t* pd, char* key, char* value, char free_flags); char* lrec_get(lrec_t* prec, char* key); lrece_t* lrec_get_pair_by_position(lrec_t* prec, int position); // 1-up not 0-up char* lrec_get_key_by_position(lrec_t* prec, int position); // 1-up not 0-up char* lrec_get_value_by_position(lrec_t* prec, int position); // 1-up not 0-up // This returns a pointer to the lrec's free-flags so that the caller can do ownership-transfer // of about-to-be-removed key-value pairs. char* lrec_get_pff(lrec_t* prec, char* key, char** ppfree_flags); // This returns a pointer to the entry so the caller can update it directly without needing // to do another field-scan on subsequent lrec_put etc. This is a performance optimization; // it also allows mlr nest --explode to do explode-in-place rather than explode-at-end. char* lrec_get_ext(lrec_t* prec, char* key, lrece_t** ppentry); void lrec_remove(lrec_t* prec, char* key); void lrec_remove_by_position(lrec_t* prec, int position); // 1-up not 0-up void lrec_rename(lrec_t* prec, char* old_key, char* new_key, int new_needs_freeing); void lrec_rename_at_position(lrec_t* prec, int position, char* new_key, int new_needs_freeing); // 1-up not 0-up void lrec_move_to_head(lrec_t* prec, char* key); void lrec_move_to_tail(lrec_t* prec, char* key); // Renames the first n fields where n is the length of pnames. // The hash-set argument is for efficient dedupe. // Assumes as a precondition that pnames_as_list has no duplicates. // If the new labels include any field names existing later on in the record, those are unset. // For example, input record "a=1,b=2,c=3,d=4,e=5" with labels "d,x,f" results in output record "d=1,x=2,f=3,e=5". void lrec_label(lrec_t* prec, slls_t* pnames_as_list, hss_t* pnames_as_set); void lrece_update_value(lrece_t* pe, char* new_value, int new_needs_freeing); // For lrec-internal use: void lrec_unlink(lrec_t* prec, lrece_t* pe); // May be used for removing fields from a record while iterating over it: void lrec_unlink_and_free(lrec_t* prec, lrece_t* pe); void lrec_print(lrec_t* prec); void lrec_dump(lrec_t* prec); void lrec_dump_fp(lrec_t* prec, FILE* fp); void lrec_dump_titled(char* msg, lrec_t* prec); void lrec_pointer_dump(lrec_t* prec); // The caller should free the return value char* lrec_sprint(lrec_t* prec, char* ors, char* ofs, char* ops); // NIDX data are keyed by one-up field index which is not explicitly contained // in the file, e.g. line "a b c" splits to an lrec with "{"1" => "a", "2" => // "b", "3" => "c"}. This function creates the keys, avoiding redundant memory // allocation for most-used keys such as "1", "2", ... up to 100 or so. In case // of large idx, free_flags & FREE_ENTRY_KEY will indicate that the key // was dynamically allocated. char* low_int_to_string(int idx, char* pfree_flags); // For unit-test. lrec_t* lrec_literal_1(char* k1, char* v1); lrec_t* lrec_literal_2(char* k1, char* v1, char* k2, char* v2); lrec_t* lrec_literal_3(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3); lrec_t* lrec_literal_4(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3, char* k4, char* v4); #endif // LREC_H miller-5.6.2/c/containers/mixutil.c000066400000000000000000000131271354153536500172540ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/mixutil.h" // ---------------------------------------------------------------- // Makes a list with values pointing to the lrec's keys. slls_free() will // respect that and not corrupt the lrec. However, the slls values will be // invalid after the lrec is freed. slls_t* mlr_reference_keys_from_record(lrec_t* prec) { slls_t* plist = slls_alloc(); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { slls_append_no_free(plist, pe->key); } return plist; } slls_t* mlr_copy_keys_from_record(lrec_t* prec) { slls_t* plist = slls_alloc(); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { slls_append_with_free(plist, mlr_strdup_or_die(pe->key)); } return plist; } slls_t* mlr_reference_values_from_record(lrec_t* prec) { slls_t* plist = slls_alloc(); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { slls_append_no_free(plist, pe->value); } return plist; } slls_t* mlr_reference_keys_from_record_except(lrec_t* prec, lrece_t* px) { slls_t* plist = slls_alloc(); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (pe != px) slls_append_no_free(plist, pe->key); } return plist; } slls_t* mlr_reference_values_from_record_except(lrec_t* prec, lrece_t* px) { slls_t* plist = slls_alloc(); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (pe != px) slls_append_no_free(plist, pe->value); } return plist; } // ---------------------------------------------------------------- // Makes a list with values pointing into the lrec's values. slls_free() will // respect that and not corrupt the lrec. However, the slls values will be // invalid after the lrec is freed. slls_t* mlr_reference_selected_values_from_record(lrec_t* prec, slls_t* pselected_field_names) { slls_t* pvalue_list = slls_alloc(); for (sllse_t* pe = pselected_field_names->phead; pe != NULL; pe = pe->pnext) { char* selected_field_name = pe->value; char* value = lrec_get(prec, selected_field_name); if (value == NULL) { slls_free(pvalue_list); return NULL; } else { slls_append_no_free(pvalue_list, value); } } return pvalue_list; } // Makes an array with values pointing into the lrec's values. // string_array_free() will respect that and not corrupt the lrec. However, // the array's values will be invalid after the lrec is freed. void mlr_reference_values_from_record_into_string_array(lrec_t* prec, string_array_t* pselected_field_names, string_array_t* pvalues) { MLR_INTERNAL_CODING_ERROR_IF(pselected_field_names->length != pvalues->length); pvalues->strings_need_freeing = FALSE; for (int i = 0; i < pselected_field_names->length; i++) { char* selected_field_name = pselected_field_names->strings[i]; if (selected_field_name == NULL) { pvalues->strings[i] = NULL; } else { pvalues->strings[i] = lrec_get(prec, selected_field_name); } } } int record_has_all_keys(lrec_t* prec, slls_t* pselected_field_names) { for (sllse_t* pe = pselected_field_names->phead; pe != NULL; pe = pe->pnext) { char* selected_field_name = pe->value; char* value = lrec_get(prec, selected_field_name); if (value == NULL) return FALSE; } return TRUE; } // ---------------------------------------------------------------- lhmss_t* mlr_reference_key_value_pairs_from_regex_names(lrec_t* prec, regex_t* pregexes, int num_regexes, int invert_matches) { lhmss_t* pmap = lhmss_alloc(); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { int matches_any = FALSE; for (int i = 0; i < num_regexes; i++) { regex_t* pregex = &pregexes[i]; if (regmatch_or_die(pregex, pe->key, 0, NULL)) { matches_any = TRUE; break; } } if (matches_any ^ invert_matches) { lhmss_put(pmap, pe->key, pe->value, NO_FREE); } } return pmap; } // ---------------------------------------------------------------- hss_t* hss_from_slls(slls_t* plist) { hss_t* pset = hss_alloc(); for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) hss_add(pset, pe->value); return pset; } // ---------------------------------------------------------------- void lrec_print_list(sllv_t* plist) { for (sllve_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { lrec_print(pe->pvvalue); } } void lrec_print_list_with_prefix(sllv_t* plist, char* prefix) { if (plist == NULL) { printf("%s NULL", prefix); } else { for (sllve_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { printf("%s", prefix); lrec_print(pe->pvvalue); } } } // ---------------------------------------------------------------- int slls_lrec_compare_lexically( slls_t* plist, lrec_t* prec, slls_t* pkeys) { sllse_t* pe = plist->phead; sllse_t* pf = pkeys->phead; while (TRUE) { if (pe == NULL && pf == NULL) return 0; if (pe == NULL) return 1; if (pf == NULL) return -1; char* precval = lrec_get(prec, pf->value); if (precval == NULL) { return -1; } else { int rc = strcmp(pe->value, precval); if (rc != 0) return rc; } pe = pe->pnext; pf = pf->pnext; } } // ---------------------------------------------------------------- int lrec_slls_compare_lexically( lrec_t* prec, slls_t* pkeys, slls_t* plist) { return -slls_lrec_compare_lexically(plist, prec, pkeys); } // ---------------------------------------------------------------- int lrec_keys_equal_list( lrec_t* prec, slls_t* plist) { lrece_t* pe = prec->phead; sllse_t* pf = plist->phead; while (TRUE) { if (pe == NULL && pf == NULL) return TRUE; if (pe == NULL || pf == NULL) return FALSE; if (!streq(pe->key, pf->value)) return FALSE; pe = pe->pnext; pf = pf->pnext; } } miller-5.6.2/c/containers/mixutil.h000066400000000000000000000045301354153536500172570ustar00rootroot00000000000000// ================================================================ // Functions involving more than one container type // ================================================================ #ifndef MIXUTIL_H #define MIXUTIL_H #include "containers/lrec.h" #include "containers/slls.h" #include "containers/hss.h" #include "containers/lhmss.h" #include "lib/string_array.h" #include "lib/mlrregex.h" // Makes a list with values pointing to the lrec's keys. slls_free() will respect that and not corrupt the lrec. // However, the slls values will be invalid after the lrec is freed. slls_t* mlr_reference_keys_from_record(lrec_t* prec); // Makes a list with values pointing to the lrec's values. slls_free() will respect that and not corrupt the lrec. // However, the slls values will be invalid after the lrec is freed. slls_t* mlr_reference_values_from_record(lrec_t* prec); slls_t* mlr_reference_keys_from_record_except(lrec_t* prec, lrece_t* px); slls_t* mlr_reference_values_from_record_except(lrec_t* prec, lrece_t* px); // Copies data; no referencing concerns. slls_t* mlr_copy_keys_from_record(lrec_t* prec); // Makes a list with values pointing into the lrec's values. slls_free() will // respect that and not corrupt the lrec. However, the slls values will be // invalid after the lrec is freed. slls_t* mlr_reference_selected_values_from_record(lrec_t* prec, slls_t* pselected_field_names); void mlr_reference_values_from_record_into_string_array(lrec_t* prec, string_array_t* pselected_field_names, string_array_t* pvalues); int record_has_all_keys(lrec_t* prec, slls_t* pselected_field_names); lhmss_t* mlr_reference_key_value_pairs_from_regex_names(lrec_t* prec, regex_t* pregexes, int num_regexes, int invert_matches); // Copies data; no referencing concerns. hss_t* hss_from_slls(slls_t* plist); // Prints a list of lrecs using lrec_print. void lrec_print_list(sllv_t* plist); void lrec_print_list_with_prefix(sllv_t* plist, char* prefix); // Same as // slls_t* prec_values = mlr_reference_selected_values_from_record(prec, pkeys); // return slls_compare_lexically(plist, prec_values); // but without the unnecessary copy. int slls_lrec_compare_lexically( slls_t* plist, lrec_t* prec, slls_t* pkeys); int lrec_slls_compare_lexically( lrec_t* prec, slls_t* pkeys, slls_t* plist); int lrec_keys_equal_list( lrec_t* prec, slls_t* plist); #endif // MIXUTIL_H miller-5.6.2/c/containers/mlhmmv.c000066400000000000000000001566031354153536500170700ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) multi-level hash map, with linear probing for collisions. // All keys, and terminal-level values, are mlrvals. // // Notes: // * null key is not supported. // * null value is not supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/mlhmmv.h" #include "lib/mvfuncs.h" // ================================================================ // Allow compile-time override, e.g using gcc -D. #ifndef LOAD_FACTOR #define LOAD_FACTOR 0.7 #endif #ifndef ENLARGEMENT_FACTOR #define ENLARGEMENT_FACTOR 2 #endif #define OCCUPIED 0xa4 #define DELETED 0xb8 #define EMPTY 0xce // ================================================================ static int mlhmmv_hash_func(mv_t* plevel_key); static void json_decimal_print (FILE* ostream, char* s, double parsed); static void json_print_string_escaped(FILE* ostream, char* s); // ---------------------------------------------------------------- static void mlhmmv_level_init(mlhmmv_level_t *plevel, int length); // ---------------------------------------------------------------- static int mlhmmv_level_find_index_for_key(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pideal_index); static mlhmmv_level_entry_t* mlhmmv_level_look_up_and_ref_entry( mlhmmv_level_t* plevel, sllmve_t* prestkeys, int* perror); static mlhmmv_level_entry_t* mlhmmv_level_get_next_level_entry(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pindex); static mlhmmv_xvalue_t* mlhmmv_level_get_next_level_xvalue(mlhmmv_level_t* plevel, mv_t* plevel_key); static mlhmmv_level_t* mlhmmv_level_ref_or_create(mlhmmv_level_t* plevel, sllmve_t* prest_keys); static mlhmmv_level_t* mlhmmv_level_get_or_create_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys); static void mlhmmv_level_enlarge(mlhmmv_level_t* plevel); static void mlhmmv_level_move(mlhmmv_level_t* plevel, mv_t* plevel_key, mlhmmv_xvalue_t* plevel_value); static void mlhmmv_level_put_xvalue_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mlhmmv_xvalue_t* pvalue); static void mlhmmv_level_put_terminal_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value); static void mlhmmv_level_to_lrecs_across_records( mlhmmv_level_t* plevel, char* prefix, sllmve_t* prestnames, lrec_t* ptemplate, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator); static void mlhmmv_level_to_lrec_within_record( mlhmmv_level_t* plevel, char* prefix, lrec_t* poutrec, int do_full_prefixing, char* flatten_separator); static void mlhhmv_levels_to_lrecs_lashed_across_records( mlhmmv_level_t** plevels, char** prefixes, int num_levels, sllmve_t* prestnames, lrec_t* ptemplate, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator); static void mlhhmv_levels_to_lrecs_lashed_within_records( mlhmmv_level_t** pplevels, char** prefixes, int num_levels, lrec_t* poutrec, int do_full_prefixing, char* flatten_separator); static void mlhmmv_level_print_single_line(mlhmmv_level_t* plevel, int depth, int do_final_comma, int quote_keys_always, int quote_values_always, FILE* ostream); // ---------------------------------------------------------------- static void mlhmmv_root_put_xvalue(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mlhmmv_xvalue_t* pvalue); // ================================================================ typedef int mlhmmv_typed_hash_func(mv_t* pa); static int mlhmmv_string_hash_func(mv_t* pa) { return mlr_string_hash_func(pa->u.strv); } static int mlhmmv_int_hash_func(mv_t* pa) { return pa->u.intv; } static int mlhmmv_other_hash_func(mv_t* pa) { fprintf(stderr, "%s: map keys must be of type %s or %s; got %s.\n", MLR_GLOBALS.bargv0, mt_describe_type(MT_STRING), mt_describe_type(MT_INT), mt_describe_type(pa->type)); exit(1); } static mlhmmv_typed_hash_func* mlhmmv_hash_func_dispositions[MT_DIM] = { /*ERROR*/ mlhmmv_other_hash_func, /*ABSENT*/ mlhmmv_other_hash_func, /*EMPTY*/ mlhmmv_other_hash_func, /*STRING*/ mlhmmv_string_hash_func, /*INT*/ mlhmmv_int_hash_func, /*FLOAT*/ mlhmmv_other_hash_func, /*BOOL*/ mlhmmv_other_hash_func, }; static int mlhmmv_hash_func(mv_t* pa) { return mlhmmv_hash_func_dispositions[pa->type](pa); } // ================================================================ void mlhmmv_print_terminal(mv_t* pmv, int quote_keys_always, int quote_values_always, FILE* ostream) { char* level_value_string = mv_alloc_format_val(pmv); if (quote_values_always) { json_print_string_escaped(ostream, level_value_string); } else if (pmv->type == MT_STRING) { double parsed; if (mlr_try_float_from_string(level_value_string, &parsed)) { json_decimal_print(ostream, level_value_string, parsed); } else if (streq(level_value_string, "true") || streq(level_value_string, "false")) { fprintf(ostream, "%s", level_value_string); } else { json_print_string_escaped(ostream, level_value_string); } } else { fprintf(ostream, "%s", level_value_string); } free(level_value_string); } // 0.123 is valid JSON; .123 is not. Meanwhile Miller is a format-converter tool // so if there is perfectly legitimate CSV/DKVP/etc. data to be JSON-formatted, // we make it JSON-compliant. // // Precondition: the caller has already checked that the string represents a number. static void json_decimal_print(FILE* ostream, char* s, double parsed) { if (s[0] == '.') { fprintf(ostream, "0%s", s); } else if (s[0] == '-' && s[1] == '.') { fprintf(ostream, "-0.%s", &s[2]); } else { fprintf(ostream, "%s", s); } } static void json_print_string_escaped(FILE* ostream, char* s) { fputc('"', ostream); for (char* p = s; *p; p++) { char c = *p; switch (c) { case '"': fputc('\\', ostream); fputc('"', ostream); break; case '\\': fputc('\\', ostream); fputc('\\', ostream); break; case '\n': fputc('\\', ostream); fputc('n', ostream); break; case '\r': fputc('\\', ostream); fputc('r', ostream); break; case '\t': fputc('\\', ostream); fputc('t', ostream); break; case '\b': fputc('\\', ostream); fputc('b', ostream); break; case '\f': fputc('\\', ostream); fputc('f', ostream); break; default: fputc(c, ostream); break; } } fputc('"', ostream); } // ================================================================ mlhmmv_xvalue_t mlhmmv_xvalue_alloc_empty_map() { mlhmmv_xvalue_t xval = (mlhmmv_xvalue_t) { .is_terminal = FALSE, .terminal_mlrval= mv_absent(), .pnext_level = mlhmmv_level_alloc() }; return xval; } // ---------------------------------------------------------------- void mlhmmv_xvalue_reset(mlhmmv_xvalue_t* pxvalue) { pxvalue->is_terminal = TRUE; pxvalue->terminal_mlrval = mv_absent(); pxvalue->pnext_level = NULL; } // ---------------------------------------------------------------- mlhmmv_xvalue_t mlhmmv_xvalue_copy(mlhmmv_xvalue_t* pvalue) { if (pvalue->is_terminal) { return (mlhmmv_xvalue_t) { .is_terminal = TRUE, .terminal_mlrval = mv_copy(&pvalue->terminal_mlrval), .pnext_level = NULL, }; } else { mlhmmv_level_t* psrc_level = pvalue->pnext_level; mlhmmv_level_t* pdst_level = mlr_malloc_or_die(sizeof(mlhmmv_level_t)); mlhmmv_level_init(pdst_level, MLHMMV_INITIAL_ARRAY_LENGTH); for ( mlhmmv_level_entry_t* psubentry = psrc_level->phead; psubentry != NULL; psubentry = psubentry->pnext) { mlhmmv_xvalue_t next_value = mlhmmv_xvalue_copy(&psubentry->level_xvalue); mlhmmv_level_put_xvalue_singly_keyed(pdst_level, &psubentry->level_key, &next_value); } return (mlhmmv_xvalue_t) { .is_terminal = FALSE, .terminal_mlrval = mv_absent(), .pnext_level = pdst_level, }; } } // ---------------------------------------------------------------- void mlhmmv_xvalue_free(mlhmmv_xvalue_t* pxvalue) { if (pxvalue->is_terminal) { mv_free(&pxvalue->terminal_mlrval); } else if (pxvalue->pnext_level != NULL) { mlhmmv_level_free(pxvalue->pnext_level); pxvalue->pnext_level = NULL; } } // ---------------------------------------------------------------- char* mlhmmv_xvalue_describe_type_simple(mlhmmv_xvalue_t* pxvalue) { if (pxvalue->is_terminal) { return mt_describe_type_simple(pxvalue->terminal_mlrval.type); } else { return "map"; } } sllv_t* mlhmmv_xvalue_copy_keys_indexed(mlhmmv_xvalue_t* pmvalue, sllmv_t* pmvkeys) { // xxx code dedupe int error; if (pmvkeys == NULL || pmvkeys->length == 0) { return mlhmmv_xvalue_copy_keys_nonindexed(pmvalue); } else if (pmvalue->is_terminal) { // xxx copy this check up to oosvar case too return sllv_alloc(); } else { mlhmmv_level_entry_t* pfromentry = mlhmmv_level_look_up_and_ref_entry(pmvalue->pnext_level, pmvkeys->phead, &error); if (pfromentry != NULL) { return mlhmmv_xvalue_copy_keys_nonindexed(&pfromentry->level_xvalue); } else { return sllv_alloc(); } } } sllv_t* mlhmmv_xvalue_copy_keys_nonindexed(mlhmmv_xvalue_t* pvalue) { sllv_t* pkeys = sllv_alloc(); if (!pvalue->is_terminal) { mlhmmv_level_t* pnext_level = pvalue->pnext_level; for (mlhmmv_level_entry_t* pe = pnext_level->phead; pe != NULL; pe = pe->pnext) { mv_t* p = mv_alloc_copy(&pe->level_key); sllv_append(pkeys, p); } } return pkeys; } // ---------------------------------------------------------------- void mlhmmv_xvalues_to_lrecs_lashed(mlhmmv_xvalue_t** ptop_values, int num_submaps, mv_t* pbasenames, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) { // First is primary and rest are lashed to it (lookups with same keys as primary). if (ptop_values[0] == NULL) { // No such entry in the mlhmmv results in no output records } else if (ptop_values[0]->is_terminal && mv_is_present(&ptop_values[0]->terminal_mlrval)) { lrec_t* poutrec = lrec_unbacked_alloc(); for (int i = 0; i < num_submaps; i++) { // E.g. '@v = 3' at the top level of the mlhmmv. if (ptop_values[i]->is_terminal && mv_is_present(&ptop_values[i]->terminal_mlrval)) { lrec_put(poutrec, mv_alloc_format_val(&pbasenames[i]), mv_alloc_format_val(&ptop_values[i]->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } sllv_append(poutrecs, poutrec); } else { // E.g. '@v = {...}' at the top level of the map, where the map is an oosvar // submap keyed by oosvar-name 'v', or a localvar value, or a map literal. This // needs to be flattened down to an lrec which is a list of key-value pairs. We // recursively invoke mlhhmv_levels_to_lrecs_lashed_across_records for each of the // name-list entries, one map level deeper each call, then from there invoke // mlhhmv_levels_to_lrecs_lashed_within_records on any remaining map levels. lrec_t* ptemplate = lrec_unbacked_alloc(); mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_submaps * sizeof(mlhmmv_level_t*)); char** oosvar_names = mlr_malloc_or_die(num_submaps * sizeof(char*)); for (int i = 0; i < num_submaps; i++) { if (ptop_values[i] == NULL || ptop_values[i]->is_terminal) { ppnext_levels[i] = NULL; oosvar_names[i] = NULL; } else { ppnext_levels[i] = ptop_values[i]->pnext_level; oosvar_names[i] = mv_alloc_format_val(&pbasenames[i]); } } mlhhmv_levels_to_lrecs_lashed_across_records(ppnext_levels, oosvar_names, num_submaps, pnames->phead, ptemplate, poutrecs, do_full_prefixing, flatten_separator); for (int i = 0; i < num_submaps; i++) { free(oosvar_names[i]); } free(oosvar_names); free(ppnext_levels); lrec_free(ptemplate); } } // ================================================================ mlhmmv_level_t* mlhmmv_level_alloc() { mlhmmv_level_t* plevel = mlr_malloc_or_die(sizeof(mlhmmv_level_t)); mlhmmv_level_init(plevel, MLHMMV_INITIAL_ARRAY_LENGTH); return plevel; } // ---------------------------------------------------------------- static void mlhmmv_level_init(mlhmmv_level_t *plevel, int length) { plevel->num_occupied = 0; plevel->num_freed = 0; plevel->array_length = length; plevel->entries = (mlhmmv_level_entry_t*)mlr_malloc_or_die(sizeof(mlhmmv_level_entry_t) * length); // Don't do mlhmmv_level_entry_clear() of all entries at init time, since this has a // drastic effect on the time needed to construct an empty map (and miller // constructs an awful lot of those). The attributes there are don't-cares // if the corresponding entry state is EMPTY. They are set on put, and // mutated on remove. plevel->states = (mlhmmv_level_entry_state_t*)mlr_malloc_or_die(sizeof(mlhmmv_level_entry_state_t) * length); memset(plevel->states, EMPTY, length); plevel->phead = NULL; plevel->ptail = NULL; } // ---------------------------------------------------------------- void mlhmmv_level_free(mlhmmv_level_t* plevel) { for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { mv_free(&pentry->level_key); if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); } else { mlhmmv_level_free(pentry->level_xvalue.pnext_level); } } free(plevel->entries); free(plevel->states); plevel->entries = NULL; plevel->num_occupied = 0; plevel->num_freed = 0; plevel->array_length = 0; free(plevel); } // ---------------------------------------------------------------- void mlhmmv_level_clear(mlhmmv_level_t* plevel) { if (plevel->phead == NULL) return; for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); } else { mlhmmv_level_free(pentry->level_xvalue.pnext_level); } mv_free(&pentry->level_key); } plevel->num_occupied = 0; plevel->num_freed = 0; plevel->phead = NULL; plevel->ptail = NULL; memset(plevel->states, EMPTY, plevel->array_length); } // ---------------------------------------------------------------- int mlhmmv_level_has_key(mlhmmv_level_t* plevel, mv_t* plevel_key) { int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); if (plevel->states[index] == OCCUPIED) return TRUE; else if (plevel->states[index] == EMPTY) return FALSE; else { fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- // Returns >=0 for where the key is *or* should go (end of chain). static int mlhmmv_level_find_index_for_key(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pideal_index) { int hash = mlhmmv_hash_func(plevel_key); int index = mlr_canonical_mod(hash, plevel->array_length); *pideal_index = index; int num_tries = 0; while (TRUE) { mlhmmv_level_entry_t* pentry = &plevel->entries[index]; if (plevel->states[index] == OCCUPIED) { mv_t* ekey = &pentry->level_key; // Existing key found in chain. if (mv_equals_si(plevel_key, ekey)) return index; } else if (plevel->states[index] == EMPTY) { return index; } // If the current entry has been freed, i.e. previously occupied, // the sought index may be further down the chain. So we must // continue looking. if (++num_tries >= plevel->array_length) { fprintf(stderr, "%s: Coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); exit(1); } // Linear probing. if (++index >= plevel->array_length) index = 0; } MLR_INTERNAL_CODING_ERROR(); return -1; // not reached } // ---------------------------------------------------------------- static mlhmmv_level_entry_t* mlhmmv_level_look_up_and_ref_entry(mlhmmv_level_t* plevel, sllmve_t* prestkeys, int* perror) { if (perror) *perror = MLHMMV_ERROR_NONE; if (prestkeys == NULL) { if (perror) *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; return NULL; } mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_get_next_level_entry(plevel, &prestkeys->value, NULL); while (prestkeys->pnext != NULL) { if (plevel_entry == NULL) { return NULL; } if (plevel_entry->level_xvalue.is_terminal) { if (perror) *perror = MLHMMV_ERROR_KEYLIST_TOO_DEEP; return NULL; } plevel = plevel_entry->level_xvalue.pnext_level; prestkeys = prestkeys->pnext; plevel_entry = mlhmmv_level_get_next_level_entry(plevel_entry->level_xvalue.pnext_level, &prestkeys->value, NULL); } return plevel_entry; } // ---------------------------------------------------------------- static mlhmmv_level_entry_t* mlhmmv_level_get_next_level_entry(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pindex) { int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); mlhmmv_level_entry_t* pentry = &plevel->entries[index]; if (pindex != NULL) *pindex = index; if (plevel->states[index] == OCCUPIED) return pentry; else if (plevel->states[index] == EMPTY) return NULL; else { fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- static mlhmmv_xvalue_t* mlhmmv_level_get_next_level_xvalue(mlhmmv_level_t* plevel, mv_t* plevel_key) { if (plevel == NULL) return NULL; mlhmmv_level_entry_t* pentry = mlhmmv_level_get_next_level_entry(plevel, plevel_key, NULL); if (pentry == NULL) return NULL; else return &pentry->level_xvalue; } // ---------------------------------------------------------------- mv_t* mlhmmv_level_look_up_and_ref_terminal(mlhmmv_level_t* plevel, sllmv_t* pmvkeys, int* perror) { mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_look_up_and_ref_entry(plevel, pmvkeys->phead, perror); if (plevel_entry == NULL) { return NULL; } if (!plevel_entry->level_xvalue.is_terminal) { *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; return NULL; } return &plevel_entry->level_xvalue.terminal_mlrval; } // ---------------------------------------------------------------- mlhmmv_xvalue_t* mlhmmv_level_look_up_and_ref_xvalue(mlhmmv_level_t* pstart_level, sllmv_t* pmvkeys, int* perror) { *perror = MLHMMV_ERROR_NONE; sllmve_t* prest_keys = pmvkeys->phead; if (prest_keys == NULL) { *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; return NULL; } mlhmmv_level_t* plevel = pstart_level; if (plevel == NULL) { return NULL; } mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_get_next_level_entry(plevel, &prest_keys->value, NULL); while (prest_keys->pnext != NULL) { if (plevel_entry == NULL) { return NULL; } else { plevel = plevel_entry->level_xvalue.pnext_level; prest_keys = prest_keys->pnext; if (plevel == NULL) return NULL; plevel_entry = mlhmmv_level_get_next_level_entry(plevel, &prest_keys->value, NULL); } } if (plevel_entry == NULL) { *perror = MLHMMV_ERROR_KEYLIST_TOO_DEEP; return NULL; } return &plevel_entry->level_xvalue; } // ---------------------------------------------------------------- static mlhmmv_level_t* mlhmmv_level_ref_or_create(mlhmmv_level_t* plevel, sllmve_t* prest_keys) { if ((plevel->num_occupied + plevel->num_freed) >= (plevel->array_length * LOAD_FACTOR)) mlhmmv_level_enlarge(plevel); return mlhmmv_level_get_or_create_no_enlarge(plevel, prest_keys); } // ---------------------------------------------------------------- static mlhmmv_level_t* mlhmmv_level_get_or_create_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys) { mv_t* plevel_key = &prest_keys->value; int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); mlhmmv_level_entry_t* pentry = &plevel->entries[index]; if (plevel->states[index] == EMPTY) { // End of chain. plevel->states[index] = OCCUPIED; plevel->num_occupied++; pentry->ideal_index = ideal_index; pentry->level_key = mv_copy(plevel_key); pentry->level_xvalue.is_terminal = FALSE; pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); if (plevel->phead == NULL) { // First entry at this level pentry->pprev = NULL; pentry->pnext = NULL; plevel->phead = pentry; plevel->ptail = pentry; } else { // Subsequent entry at this level pentry->pprev = plevel->ptail; pentry->pnext = NULL; plevel->ptail->pnext = pentry; plevel->ptail = pentry; } if (prest_keys->pnext != NULL) { // RECURSE return mlhmmv_level_ref_or_create(pentry->level_xvalue.pnext_level, prest_keys->pnext); } else { return pentry->level_xvalue.pnext_level; } } else if (plevel->states[index] == OCCUPIED) { // Existing key found in chain if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); pentry->level_xvalue.is_terminal = FALSE; pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); } if (prest_keys->pnext == NULL) { return pentry->level_xvalue.pnext_level; } else { // RECURSE return mlhmmv_level_ref_or_create(pentry->level_xvalue.pnext_level, prest_keys->pnext); } } else { fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- mlhmmv_level_t* mlhmmv_level_put_empty_map(mlhmmv_level_t* plevel, mv_t* pkey) { int error; mv_t absent = mv_absent(); sllmve_t e = { .value = *pkey, .free_flags = 0, .pnext = NULL }; mlhmmv_level_put_terminal(plevel, &e, &absent); // xxx optimize to avoid 2nd lookup sllmv_t s = { .phead = &e, .ptail = &e, .length = 1 }; mlhmmv_xvalue_t* pxval = mlhmmv_level_look_up_and_ref_xvalue(plevel, &s, &error); *pxval = mlhmmv_xvalue_alloc_empty_map(); return pxval->pnext_level; } // ---------------------------------------------------------------- static void mlhmmv_level_enlarge(mlhmmv_level_t* plevel) { mlhmmv_level_entry_t* old_entries = plevel->entries; mlhmmv_level_entry_state_t* old_states = plevel->states; mlhmmv_level_entry_t* old_head = plevel->phead; mlhmmv_level_init(plevel, plevel->array_length*ENLARGEMENT_FACTOR); for (mlhmmv_level_entry_t* pentry = old_head; pentry != NULL; pentry = pentry->pnext) { mlhmmv_level_move(plevel, &pentry->level_key, &pentry->level_xvalue); } free(old_entries); free(old_states); } // ---------------------------------------------------------------- // This is done only on map-level enlargement. // Example: // * level = map["a"], rest_keys = [2, "c"] , terminal_value = 4. // rest_keys = ["e", "f"] , terminal_value = 7. // rest_keys = [6] , terminal_value = "g". // // which is to say for the purposes of this routine // // * level = map["a"], level_key = 2, level_xvalue = non-terminal ["c"] => terminal_value = 4. // level_key = "e", level_xvalue = non-terminal ["f"] => terminal_value = 7. // level_key = 6, level_xvalue = terminal_value = "g". static void mlhmmv_level_move(mlhmmv_level_t* plevel, mv_t* plevel_key, mlhmmv_xvalue_t* plevel_value) { int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); mlhmmv_level_entry_t* pentry = &plevel->entries[index]; if (plevel->states[index] == OCCUPIED) { // Existing key found in chain; put value. pentry->level_xvalue = *plevel_value; } else if (plevel->states[index] == EMPTY) { // End of chain. pentry->ideal_index = ideal_index; pentry->level_key = *plevel_key; // For the put API, we copy data passed in. But for internal enlarges, we just need to move pointers around. pentry->level_xvalue = *plevel_value; plevel->states[index] = OCCUPIED; if (plevel->phead == NULL) { pentry->pprev = NULL; pentry->pnext = NULL; plevel->phead = pentry; plevel->ptail = pentry; } else { pentry->pprev = plevel->ptail; pentry->pnext = NULL; plevel->ptail->pnext = pentry; plevel->ptail = pentry; } plevel->num_occupied++; } else { fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- void mlhmmv_level_put_xvalue(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mlhmmv_xvalue_t* pvalue) { // xxx 'copy' into name if ((plevel->num_occupied + plevel->num_freed) >= (plevel->array_length * LOAD_FACTOR)) mlhmmv_level_enlarge(plevel); mlhmmv_level_put_xvalue_no_enlarge(plevel, prest_keys, pvalue); } void mlhmmv_level_put_xvalue_singly_keyed(mlhmmv_level_t* plevel, mv_t* pkey, mlhmmv_xvalue_t* pvalue) { sllmve_t e = { .value = *pkey, .free_flags = 0, .pnext = NULL }; mlhmmv_level_put_xvalue(plevel, &e, pvalue); } // ---------------------------------------------------------------- static void mlhmmv_level_put_xvalue_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mlhmmv_xvalue_t* pvalue) { mv_t* plevel_key = &prest_keys->value; int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); mlhmmv_level_entry_t* pentry = &plevel->entries[index]; if (plevel->states[index] == EMPTY) { // End of chain. pentry->ideal_index = ideal_index; pentry->level_key = mv_copy(plevel_key); // (xxx weird & needs explaining) key is copied ... if (prest_keys->pnext == NULL) { pentry->level_xvalue = *pvalue; // (xxx weird & needs explaining) ... but the value is not copied } else { pentry->level_xvalue.is_terminal = FALSE; pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); } plevel->states[index] = OCCUPIED; if (plevel->phead == NULL) { // First entry at this level pentry->pprev = NULL; pentry->pnext = NULL; plevel->phead = pentry; plevel->ptail = pentry; } else { // Subsequent entry at this level pentry->pprev = plevel->ptail; pentry->pnext = NULL; plevel->ptail->pnext = pentry; plevel->ptail = pentry; } plevel->num_occupied++; if (prest_keys->pnext != NULL) { // RECURSE mlhmmv_level_put_xvalue(pentry->level_xvalue.pnext_level, prest_keys->pnext, pvalue); } } else if (plevel->states[index] == OCCUPIED) { // Existing key found in chain if (prest_keys->pnext == NULL) { // Place the terminal at this level if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); } else { mlhmmv_level_free(pentry->level_xvalue.pnext_level); } pentry->level_xvalue = *pvalue; } else { // The terminal will be placed at a deeper level if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); pentry->level_xvalue.is_terminal = FALSE; pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); } // RECURSE mlhmmv_level_put_xvalue(pentry->level_xvalue.pnext_level, prest_keys->pnext, pvalue); } } else { fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- // Example on recursive calls: // * level = map, rest_keys = ["a", 2, "c"] , terminal value = 4. // * level = map["a"], rest_keys = [2, "c"] , terminal value = 4. // * level = map["a"][2], rest_keys = ["c"] , terminal value = 4. void mlhmmv_level_put_terminal(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value) { if ((plevel->num_occupied + plevel->num_freed) >= (plevel->array_length * LOAD_FACTOR)) mlhmmv_level_enlarge(plevel); mlhmmv_level_put_terminal_no_enlarge(plevel, prest_keys, pterminal_value); } void mlhmmv_level_put_terminal_singly_keyed(mlhmmv_level_t* plevel, mv_t* pkey, mv_t* pterminal_value) { sllmve_t e = { .value = *pkey, .free_flags = 0, .pnext = NULL }; mlhmmv_level_put_terminal(plevel, &e, pterminal_value); } // ---------------------------------------------------------------- static void mlhmmv_level_put_terminal_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value) { mv_t* plevel_key = &prest_keys->value; int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); mlhmmv_level_entry_t* pentry = &plevel->entries[index]; if (plevel->states[index] == EMPTY) { // End of chain. pentry->ideal_index = ideal_index; pentry->level_key = mv_copy(plevel_key); // <------------------------- copy key if (prest_keys->pnext == NULL) { pentry->level_xvalue.is_terminal = TRUE; pentry->level_xvalue.terminal_mlrval = mv_copy(pterminal_value); // <--------------- copy value } else { pentry->level_xvalue.is_terminal = FALSE; pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); } plevel->states[index] = OCCUPIED; if (plevel->phead == NULL) { // First entry at this level pentry->pprev = NULL; pentry->pnext = NULL; plevel->phead = pentry; plevel->ptail = pentry; } else { // Subsequent entry at this level pentry->pprev = plevel->ptail; pentry->pnext = NULL; plevel->ptail->pnext = pentry; plevel->ptail = pentry; } plevel->num_occupied++; if (prest_keys->pnext != NULL) { // RECURSE mlhmmv_level_put_terminal(pentry->level_xvalue.pnext_level, prest_keys->pnext, pterminal_value); } } else if (plevel->states[index] == OCCUPIED) { // Existing key found in chain if (prest_keys->pnext == NULL) { // Place the terminal at this level if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); } else { mlhmmv_level_free(pentry->level_xvalue.pnext_level); } pentry->level_xvalue.is_terminal = TRUE; pentry->level_xvalue.terminal_mlrval = mv_copy(pterminal_value); // <--------------- copy value } else { // The terminal will be placed at a deeper level if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); pentry->level_xvalue.is_terminal = FALSE; pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); } // RECURSE mlhmmv_level_put_terminal(pentry->level_xvalue.pnext_level, prest_keys->pnext, pterminal_value); } } else { fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); exit(1); } } // ---------------------------------------------------------------- void mlhmmv_level_to_lrecs(mlhmmv_level_t* plevel, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) { mv_t* pfirstkey = &pkeys->phead->value; mlhmmv_level_entry_t* ptop_entry = mlhmmv_level_look_up_and_ref_entry(plevel, pkeys->phead, NULL); if (ptop_entry == NULL) { // No such entry in the mlhmmv results in no output records } else if (ptop_entry->level_xvalue.is_terminal) { // E.g. '@v = 3' at the top level of the mlhmmv. lrec_t* poutrec = lrec_unbacked_alloc(); lrec_put(poutrec, mv_alloc_format_val(pfirstkey), mv_alloc_format_val(&ptop_entry->level_xvalue.terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } else { // E.g. '@v = {...}' at the top level of the mlhmmv: the map value keyed by oosvar-name 'v' is itself a hashmap. // This needs to be flattened down to an lrec which is a list of key-value pairs. We recursively invoke // mlhmmv_level_to_lrecs_across_records for each of the name-list entries, one map level deeper each call, then // from there invoke mlhmmv_level_to_lrec_within_record on any remaining map levels. lrec_t* ptemplate = lrec_unbacked_alloc(); char* oosvar_name = mv_alloc_format_val(pfirstkey); mlhmmv_level_to_lrecs_across_records(ptop_entry->level_xvalue.pnext_level, oosvar_name, pnames->phead, ptemplate, poutrecs, do_full_prefixing, flatten_separator); free(oosvar_name); lrec_free(ptemplate); } } // ---------------------------------------------------------------- static void mlhmmv_level_to_lrecs_across_records( mlhmmv_level_t* plevel, char* prefix, sllmve_t* prestnames, lrec_t* ptemplate, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) { if (prestnames != NULL) { // If there is a namelist entry, pull it out to its own field on the output lrecs. for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { mlhmmv_xvalue_t* plevel_value = &pe->level_xvalue; lrec_t* pnextrec = lrec_copy(ptemplate); lrec_put(pnextrec, mv_alloc_format_val(&prestnames->value), mv_alloc_format_val(&pe->level_key), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); if (plevel_value->is_terminal) { lrec_put(pnextrec, mlr_strdup_or_die(prefix), mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); sllv_append(poutrecs, pnextrec); } else { mlhmmv_level_to_lrecs_across_records(pe->level_xvalue.pnext_level, prefix, prestnames->pnext, pnextrec, poutrecs, do_full_prefixing, flatten_separator); lrec_free(pnextrec); } } } else { // If there are no more remaining namelist entries, flatten remaining map levels using the join separator // (default ":") and use them to create lrec values. lrec_t* pnextrec = lrec_copy(ptemplate); int emit = TRUE; for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { mlhmmv_xvalue_t* plevel_value = &pe->level_xvalue; if (plevel_value->is_terminal) { char* temp = mv_alloc_format_val(&pe->level_key); char* next_prefix = do_full_prefixing ? mlr_paste_3_strings(prefix, flatten_separator, temp) : mlr_strdup_or_die(temp); free(temp); lrec_put(pnextrec, next_prefix, mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } else if (do_full_prefixing) { char* temp = mv_alloc_format_val(&pe->level_key); char* next_prefix = mlr_paste_3_strings(prefix, flatten_separator, temp); free(temp); mlhmmv_level_to_lrec_within_record(plevel_value->pnext_level, next_prefix, pnextrec, do_full_prefixing, flatten_separator); free(next_prefix); } else { mlhmmv_level_to_lrecs_across_records(pe->level_xvalue.pnext_level, prefix, NULL, pnextrec, poutrecs, do_full_prefixing, flatten_separator); emit = FALSE; } } if (emit) sllv_append(poutrecs, pnextrec); else lrec_free(pnextrec); } } // ---------------------------------------------------------------- static void mlhmmv_level_to_lrec_within_record( mlhmmv_level_t* plevel, char* prefix, lrec_t* poutrec, int do_full_prefixing, char* flatten_separator) { for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { mlhmmv_xvalue_t* plevel_value = &pe->level_xvalue; char* temp = mv_alloc_format_val(&pe->level_key); char* next_prefix = do_full_prefixing ? mlr_paste_3_strings(prefix, flatten_separator, temp) : mlr_strdup_or_die(temp); free(temp); if (plevel_value->is_terminal) { lrec_put(poutrec, next_prefix, mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } else { mlhmmv_level_to_lrec_within_record(plevel_value->pnext_level, next_prefix, poutrec, do_full_prefixing, flatten_separator); free(next_prefix); } } } // ---------------------------------------------------------------- static void mlhhmv_levels_to_lrecs_lashed_across_records( mlhmmv_level_t** pplevels, char** prefixes, int num_levels, sllmve_t* prestnames, lrec_t* ptemplate, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) { if (prestnames != NULL) { // If there is a namelist entry, pull it out to its own field on the output lrecs. // First is iterated over and the rest are lashed (lookups with same keys as primary). if (pplevels[0] != NULL) { for (mlhmmv_level_entry_t* pe = pplevels[0]->phead; pe != NULL; pe = pe->pnext) { mlhmmv_xvalue_t* pfirst_level_value = &pe->level_xvalue; lrec_t* pnextrec = lrec_copy(ptemplate); lrec_put(pnextrec, mv_alloc_format_val(&prestnames->value), mv_alloc_format_val(&pe->level_key), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); if (pfirst_level_value->is_terminal) { for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value != NULL && plevel_value->is_terminal) { lrec_put(pnextrec, mlr_strdup_or_die(prefixes[i]), mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } sllv_append(poutrecs, pnextrec); } else { mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value == NULL || plevel_value->is_terminal) { ppnext_levels[i] = NULL; } else { ppnext_levels[i] = plevel_value->pnext_level; } } mlhhmv_levels_to_lrecs_lashed_across_records(ppnext_levels, prefixes, num_levels, prestnames->pnext, pnextrec, poutrecs, do_full_prefixing, flatten_separator); free(ppnext_levels); lrec_free(pnextrec); } } } } else if (pplevels[0] != NULL) { // If there are no more remaining namelist entries, flatten remaining map levels using the join separator // (default ":") and use them to create lrec values. lrec_t* pnextrec = lrec_copy(ptemplate); int emit = TRUE; for (mlhmmv_level_entry_t* pe = pplevels[0]->phead; pe != NULL; pe = pe->pnext) { if (pe->level_xvalue.is_terminal) { char* temp = mv_alloc_format_val(&pe->level_key); for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value != NULL && plevel_value->is_terminal) { char* name = do_full_prefixing ? mlr_paste_3_strings(prefixes[i], flatten_separator, temp) : mlr_strdup_or_die(temp); lrec_put(pnextrec, name, mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } free(temp); } else if (do_full_prefixing) { char* temp = mv_alloc_format_val(&pe->level_key); mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); char** next_prefixes = mlr_malloc_or_die(num_levels * sizeof(char*)); for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value != NULL && !plevel_value->is_terminal) { ppnext_levels[i] = plevel_value->pnext_level; next_prefixes[i] = mlr_paste_3_strings(prefixes[i], flatten_separator, temp); } else { ppnext_levels[i] = NULL; next_prefixes[i] = NULL; } } mlhhmv_levels_to_lrecs_lashed_within_records(ppnext_levels, next_prefixes, num_levels, pnextrec, do_full_prefixing, flatten_separator); for (int i = 0; i < num_levels; i++) { free(next_prefixes[i]); } free(next_prefixes); free(ppnext_levels); free(temp); } else { mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value->is_terminal) { ppnext_levels[i] = NULL; } else { ppnext_levels[i] = plevel_value->pnext_level; } } mlhhmv_levels_to_lrecs_lashed_across_records(ppnext_levels, prefixes, num_levels, NULL, pnextrec, poutrecs, do_full_prefixing, flatten_separator); free(ppnext_levels); emit = FALSE; } } if (emit) sllv_append(poutrecs, pnextrec); else lrec_free(pnextrec); } } // ---------------------------------------------------------------- static void mlhhmv_levels_to_lrecs_lashed_within_records( mlhmmv_level_t** pplevels, char** prefixes, int num_levels, lrec_t* poutrec, int do_full_prefixing, char* flatten_separator) { for (mlhmmv_level_entry_t* pe = pplevels[0]->phead; pe != NULL; pe = pe->pnext) { mlhmmv_xvalue_t* pfirst_level_value = &pe->level_xvalue; char* temp = mv_alloc_format_val(&pe->level_key); if (pfirst_level_value->is_terminal) { for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value != NULL && plevel_value->is_terminal) { char* name = do_full_prefixing ? mlr_paste_3_strings(prefixes[i], flatten_separator, temp) : mlr_strdup_or_die(temp); lrec_put(poutrec, name, mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } } else { mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); char** next_prefixes = mlr_malloc_or_die(num_levels * sizeof(char*)); for (int i = 0; i < num_levels; i++) { mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); if (plevel_value->is_terminal) { ppnext_levels[i] = NULL; next_prefixes[i] = NULL; } else { ppnext_levels[i] = plevel_value->pnext_level; next_prefixes[i] = do_full_prefixing ? mlr_paste_3_strings(prefixes[i], flatten_separator, temp) : mlr_strdup_or_die(temp); } } mlhhmv_levels_to_lrecs_lashed_within_records(ppnext_levels, next_prefixes, num_levels, poutrec, do_full_prefixing, flatten_separator); for (int i = 0; i < num_levels; i++) { free(next_prefixes[i]); } free(next_prefixes); free(ppnext_levels); } free(temp); } } // ---------------------------------------------------------------- void mlhmmv_level_print_stacked(mlhmmv_level_t* plevel, int depth, int do_final_comma, int quote_keys_always, int quote_values_always, char* line_indent, char* line_term, FILE* ostream) { if (plevel == NULL) { return; } static char* leader = " "; // Top-level opening brace goes on a line by itself; subsequents on the same line after the level key. if (depth == 0) fprintf(ostream, "%s{%s", line_indent, line_term); for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { fprintf(ostream, "%s", line_indent); for (int i = 0; i <= depth; i++) fprintf(ostream, "%s", leader); char* level_key_string = mv_alloc_format_val(&pentry->level_key); if (quote_keys_always || mv_is_string_or_empty(&pentry->level_key)) { json_print_string_escaped(ostream, level_key_string); } else { fputs(level_key_string, ostream); } free(level_key_string); fprintf(ostream, ": "); if (pentry->level_xvalue.is_terminal) { mlhmmv_print_terminal(&pentry->level_xvalue.terminal_mlrval, quote_keys_always, quote_values_always, ostream); if (pentry->pnext != NULL) fprintf(ostream, ",%s", line_term); else fprintf(ostream, "%s", line_term); } else { fprintf(ostream, "%s{%s", line_indent, line_term); mlhmmv_level_print_stacked(pentry->level_xvalue.pnext_level, depth + 1, pentry->pnext != NULL, quote_keys_always, quote_values_always, line_indent, line_term, ostream); } } for (int i = 0; i < depth; i++) fprintf(ostream, "%s", leader); if (do_final_comma) fprintf(ostream, "%s},%s", line_indent, line_term); else fprintf(ostream, "%s}%s", line_indent, line_term); } // ---------------------------------------------------------------- static void mlhmmv_level_print_single_line(mlhmmv_level_t* plevel, int depth, int do_final_comma, int quote_keys_always, int quote_values_always, FILE* ostream) { // Top-level opening brace goes on a line by itself; subsequents on the same line after the level key. if (depth == 0) fprintf(ostream, "{ "); for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { char* level_key_string = mv_alloc_format_val(&pentry->level_key); if (quote_keys_always || mv_is_string_or_empty(&pentry->level_key)) { json_print_string_escaped(ostream, level_key_string); } else { fputs(level_key_string, ostream); } free(level_key_string); fprintf(ostream, ": "); if (pentry->level_xvalue.is_terminal) { char* level_value_string = mv_alloc_format_val(&pentry->level_xvalue.terminal_mlrval); if (quote_values_always) { json_print_string_escaped(ostream,level_value_string); } else if (pentry->level_xvalue.terminal_mlrval.type == MT_STRING) { double parsed; if (mlr_try_float_from_string(level_value_string, &parsed)) { json_decimal_print(ostream, level_value_string, parsed); } else if (streq(level_value_string, "true") || streq(level_value_string, "false")) { fprintf(ostream, "%s", level_value_string); } else { json_print_string_escaped(ostream,level_value_string); } } else { fprintf(ostream, "%s", level_value_string); } free(level_value_string); if (pentry->pnext != NULL) fprintf(ostream, ", "); } else { fprintf(ostream, "{"); mlhmmv_level_print_single_line(pentry->level_xvalue.pnext_level, depth + 1, pentry->pnext != NULL, quote_keys_always, quote_values_always, ostream); } } if (do_final_comma) fprintf(ostream, " },"); else fprintf(ostream, " }"); } // ---------------------------------------------------------------- void mlhmmv_level_remove(mlhmmv_level_t* plevel, sllmve_t* prestkeys) { if (plevel == NULL) // nonesuch return; if (prestkeys == NULL) // restkeys too short return; int index = -1; mlhmmv_level_entry_t* pentry = mlhmmv_level_get_next_level_entry(plevel, &prestkeys->value, &index); if (pentry == NULL) return; if (prestkeys->pnext != NULL) { // Keep recursing until end of restkeys. if (pentry->level_xvalue.is_terminal) // restkeys too long return; mlhmmv_level_remove(pentry->level_xvalue.pnext_level, prestkeys->pnext); } else { // 1. Excise the node and its descendants from the storage tree if (plevel->states[index] != OCCUPIED) { fprintf(stderr, "%s: mlhmmv_root_remove: did not find end of chain.\n", MLR_GLOBALS.bargv0); exit(1); } mv_free(&pentry->level_key); pentry->ideal_index = -1; plevel->states[index] = DELETED; if (pentry == plevel->phead) { if (pentry == plevel->ptail) { plevel->phead = NULL; plevel->ptail = NULL; } else { plevel->phead = pentry->pnext; pentry->pnext->pprev = NULL; } } else if (pentry == plevel->ptail) { plevel->ptail = pentry->pprev; pentry->pprev->pnext = NULL; } else { pentry->pprev->pnext = pentry->pnext; pentry->pnext->pprev = pentry->pprev; } plevel->num_freed++; plevel->num_occupied--; // 2. Free the memory for the node and its descendants if (pentry->level_xvalue.is_terminal) { mv_free(&pentry->level_xvalue.terminal_mlrval); } else { mlhmmv_level_free(pentry->level_xvalue.pnext_level); } } } // ================================================================ mlhmmv_root_t* mlhmmv_root_alloc() { mlhmmv_root_t* pmap = mlr_malloc_or_die(sizeof(mlhmmv_root_t)); pmap->root_xvalue = mlhmmv_xvalue_alloc_empty_map(); return pmap; } // ---------------------------------------------------------------- void mlhmmv_root_free(mlhmmv_root_t* pmap) { if (pmap == NULL) return; mlhmmv_level_free(pmap->root_xvalue.pnext_level); free(pmap); } // ---------------------------------------------------------------- void mlhmmv_root_clear(mlhmmv_root_t* pmap) { mlhmmv_level_clear(pmap->root_xvalue.pnext_level); } // ---------------------------------------------------------------- mv_t* mlhmmv_root_look_up_and_ref_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, int* perror) { mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_look_up_and_ref_entry(pmap->root_xvalue.pnext_level, pmvkeys->phead, perror); if (plevel_entry == NULL) { return NULL; } if (!plevel_entry->level_xvalue.is_terminal) { *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; return NULL; } return &plevel_entry->level_xvalue.terminal_mlrval; } // ---------------------------------------------------------------- // Example on recursive calls: // * level = map, rest_keys = ["a", 2, "c"] // * level = map["a"], rest_keys = [2, "c"] // * level = map["a"][2], rest_keys = ["c"] mlhmmv_level_t* mlhmmv_root_look_up_or_create_then_ref_level(mlhmmv_root_t* pmap, sllmv_t* pmvkeys) { return mlhmmv_level_ref_or_create(pmap->root_xvalue.pnext_level, pmvkeys->phead); } // ---------------------------------------------------------------- // Example: keys = ["a", 2, "c"] and value = 4. void mlhmmv_root_put_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mv_t* pterminal_value) { mlhmmv_level_put_terminal(pmap->root_xvalue.pnext_level, pmvkeys->phead, pterminal_value); } // ---------------------------------------------------------------- static void mlhmmv_root_put_xvalue(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mlhmmv_xvalue_t* pvalue) { mlhmmv_level_put_xvalue(pmap->root_xvalue.pnext_level, pmvkeys->phead, pvalue); } // ---------------------------------------------------------------- void mlhmmv_root_copy_submap(mlhmmv_root_t* pmap, sllmv_t* ptokeys, sllmv_t* pfromkeys) { int error = 0; mlhmmv_level_entry_t* pfromentry = mlhmmv_level_look_up_and_ref_entry(pmap->root_xvalue.pnext_level, pfromkeys->phead, &error); if (pfromentry != NULL) { mlhmmv_xvalue_t submap = mlhmmv_xvalue_copy(&pfromentry->level_xvalue); mlhmmv_root_put_xvalue(pmap, ptokeys, &submap); } } // ---------------------------------------------------------------- sllv_t* mlhmmv_root_copy_keys_from_submap(mlhmmv_root_t* pmap, sllmv_t* pmvkeys) { int error; if (pmvkeys->length == 0) { mlhmmv_xvalue_t root_value = (mlhmmv_xvalue_t) { .is_terminal = FALSE, .terminal_mlrval = mv_absent(), .pnext_level = pmap->root_xvalue.pnext_level, }; return mlhmmv_xvalue_copy_keys_nonindexed(&root_value); } else { mlhmmv_level_entry_t* pfromentry = mlhmmv_level_look_up_and_ref_entry( pmap->root_xvalue.pnext_level, pmvkeys->phead, &error); if (pfromentry != NULL) { return mlhmmv_xvalue_copy_keys_nonindexed(&pfromentry->level_xvalue); } else { return sllv_alloc(); } } } // ---------------------------------------------------------------- // Removes entries from a specified level downward, unsetting any maps which become empty as a result. For example, if // e.g. a=>b=>c=>4 and the c level is to be removed, then all up-nodes are emptied out & should be pruned. // * If restkeys too long (e.g. 'unset $a["b"]["c"]' with data "a":"b":3): do nothing. // * If restkeys just right: (e.g. 'unset $a["b"]' with data "a":"b":3) remove the terminal mlrval. // * If restkeys is too short: (e.g. 'unset $a["b"]' with data "a":"b":"c":4): remove the level and all below. void mlhmmv_root_remove(mlhmmv_root_t* pmap, sllmv_t* prestkeys) { if (prestkeys == NULL) { return; } else if (prestkeys->phead == NULL) { mlhmmv_level_free(pmap->root_xvalue.pnext_level); pmap->root_xvalue.pnext_level = mlhmmv_level_alloc(); return; } else { mlhmmv_level_remove(pmap->root_xvalue.pnext_level, prestkeys->phead); } } // ---------------------------------------------------------------- // For 'emit all' and 'emitp all'. void mlhmmv_root_all_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) { for (mlhmmv_level_entry_t* pentry = pmap->root_xvalue.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { sllmv_t* pkey = sllmv_single_no_free(&pentry->level_key); mlhmmv_root_partial_to_lrecs(pmap, pkey, pnames, poutrecs, do_full_prefixing, flatten_separator); sllmv_free(pkey); } } // ---------------------------------------------------------------- // For 'emit' and 'emitp': the latter has do_full_prefixing == TRUE. These allocate lrecs, appended to the poutrecs // list. // * pmap is the base-level oosvar multi-level hashmap. // * pkeys specify the level in the mlhmmv at which to produce data. // * pnames is used to pull subsequent-level keys out into separate fields. // * In case pnames isn't long enough to reach a terminal mlrval level in the mlhmmv, // do_full_prefixing specifies whether to concatenate nested mlhmmv keys into single lrec keys. // // Examples: // * pkeys reaches a terminal level: // // $ mlr --opprint put -q '@sum += $x; end { emit @sum }' ../data/small // sum // 4.536294 // * pkeys reaches terminal levels: // // $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' ../data/small // a b sum // pan pan 0.346790 // pan wye 0.502626 // eks pan 0.758680 // eks wye 0.381399 // eks zee 0.611784 // wye wye 0.204603 // wye pan 0.573289 // zee pan 0.527126 // zee wye 0.598554 // hat wye 0.031442 // * pkeys reaches non-terminal levels: non-prefixed: // // $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' ../data/small // a pan wye // pan 0.346790 0.502626 // // a pan wye zee // eks 0.758680 0.381399 0.611784 // // a wye pan // wye 0.204603 0.573289 // // a pan wye // zee 0.527126 0.598554 // // a wye // hat 0.031442 // * pkeys reaches non-terminal levels: prefixed: // // $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' ../data/small // a sum:pan sum:wye // pan 0.346790 0.502626 // // a sum:pan sum:wye sum:zee // eks 0.758680 0.381399 0.611784 // // a sum:wye sum:pan // wye 0.204603 0.573289 // // a sum:pan sum:wye // zee 0.527126 0.598554 // // a sum:wye // hat 0.031442 void mlhmmv_root_partial_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) { // There should be at least the oosvar basename, e.g. '@a[b][c]' or '@a[b]' or '@a' but not '@'. MLR_INTERNAL_CODING_ERROR_IF(pkeys == NULL); MLR_INTERNAL_CODING_ERROR_IF(pkeys->phead == NULL); mlhmmv_level_to_lrecs(pmap->root_xvalue.pnext_level, pkeys, pnames, poutrecs, do_full_prefixing, flatten_separator); } // ---------------------------------------------------------------- // This is simply JSON. Example output: // { // "0": { // "fghij": { // "0": 17 // } // }, // "3": 4, // "abcde": { // "-6": 7 // } // } void mlhmmv_root_print_json_stacked(mlhmmv_root_t* pmap, int quote_keys_always, int quote_values_always, char* line_indent, char* line_term, FILE* ostream) { mlhmmv_level_print_stacked(pmap->root_xvalue.pnext_level, 0, FALSE, quote_keys_always, quote_values_always, line_indent, line_term, ostream); } // ---------------------------------------------------------------- void mlhmmv_root_print_json_single_lines(mlhmmv_root_t* pmap, int quote_keys_always, int quote_values_always, char* line_term, FILE* ostream) { mlhmmv_level_print_single_line(pmap->root_xvalue.pnext_level, 0, FALSE, quote_keys_always, quote_values_always, ostream); fprintf(ostream, "%s", line_term); } // Used for emit of localvars. Puts the xvalue in a single-key-value-pair map // keyed by the specified name. The xvalue is referenced, not copied. mlhmmv_root_t* mlhmmv_wrap_name_and_xvalue(mv_t* pname, mlhmmv_xvalue_t* pxval) { mlhmmv_root_t* pmap = mlhmmv_root_alloc(); mlhmmv_level_put_xvalue_singly_keyed(pmap->root_xvalue.pnext_level, pname, pxval); return pmap; } // Used for takedown of the temporary map returned by mlhmmv_wrap_name_and_xvalue. Since the xvalue there // is referenced, not copied, mlhmmv_xvalue_free would prematurely free the xvalue. This method releases // the xvalue so that the remaining, map-internal structures can be freed correctly. void mlhmmv_unwrap_name_and_xvalue(mlhmmv_root_t* pmap) { mlhmmv_level_t* plevel = pmap->root_xvalue.pnext_level; mlhmmv_level_entry_t* pentry = plevel->phead; mv_free(&pentry->level_key); plevel->phead = NULL; plevel->ptail = NULL; plevel->num_occupied = 0; mlhmmv_root_free(pmap); } miller-5.6.2/c/containers/mlhmmv.h000066400000000000000000000255221354153536500170700ustar00rootroot00000000000000// ================================================================ // Array-only (open addressing) multi-level hash map, with linear probing for collisions. // All keys, and terminal-level values, are mlrvals. All data passed into the put method // are copied; no pointers in this data structure reference anything external. // // Notes: // * null key is not supported. // * null value is not supported. // // See also: // * http://en.wikipedia.org/wiki/Hash_table // * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html // ================================================================ #ifndef MLHMMV_H #define MLHMMV_H #include "lib/mlrval.h" #include "containers/sllmv.h" #include "containers/sllv.h" #include "containers/lrec.h" #define MLHMMV_ERROR_NONE 0x0000 #define MLHMMV_ERROR_KEYLIST_TOO_DEEP 0xdeef #define MLHMMV_ERROR_KEYLIST_TOO_SHALLOW 0x58a1 // This is made visible here in the API so the unit-tester can be sure to exercise the resize logic. #define MLHMMV_INITIAL_ARRAY_LENGTH 16 // ---------------------------------------------------------------- void mlhmmv_print_terminal(mv_t* pmv, int quote_keys_always, int quote_values_always, FILE* ostream); // ---------------------------------------------------------------- struct _mlhmmv_level_t; // forward reference // The 'x' is for extended: this can hold a scalar or a map. typedef struct _mlhmmv_xvalue_t { struct _mlhmmv_level_t* pnext_level; mv_t terminal_mlrval; char is_terminal; } mlhmmv_xvalue_t; void mlhmmv_xvalue_reset(mlhmmv_xvalue_t* pxvalue); mlhmmv_xvalue_t mlhmmv_xvalue_alloc_empty_map(); mlhmmv_xvalue_t mlhmmv_xvalue_copy(mlhmmv_xvalue_t* pxvalue); void mlhmmv_xvalue_free(mlhmmv_xvalue_t* pxvalue); char* mlhmmv_xvalue_describe_type_simple(mlhmmv_xvalue_t* pxvalue); static inline int mlhmmv_xvalue_is_absent_and_nonterminal(mlhmmv_xvalue_t* pxvalue) { return (pxvalue->is_terminal && mv_is_absent(&pxvalue->terminal_mlrval)); } static inline int mlhmmv_xvalue_is_present_and_nonterminal(mlhmmv_xvalue_t* pxvalue) { return (pxvalue->is_terminal && mv_is_present(&pxvalue->terminal_mlrval)); } // Used by for-loops over map-valued local variables sllv_t* mlhmmv_xvalue_copy_keys_indexed (mlhmmv_xvalue_t* pxvalue, sllmv_t* pmvkeys); sllv_t* mlhmmv_xvalue_copy_keys_nonindexed(mlhmmv_xvalue_t* pxvalue); void mlhmmv_xvalues_to_lrecs_lashed( mlhmmv_xvalue_t** ptop_values, int num_submaps, mv_t* pbasenames, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator); // ---------------------------------------------------------------- typedef struct _mlhmmv_level_entry_t { int ideal_index; mv_t level_key; mlhmmv_xvalue_t level_xvalue; // terminal mlrval, or another hashmap struct _mlhmmv_level_entry_t *pprev; struct _mlhmmv_level_entry_t *pnext; } mlhmmv_level_entry_t; typedef unsigned char mlhmmv_level_entry_state_t; // Store a mlrval into the mlhmmv_xvalue without copying, implicitly transferring // ownership of the mlrval's free_flags. This means the mlrval will be freed // when the mlhmmv_xvalue is freed, so the caller should make a copy first if // necessary. // // This is a hot path for non-map local-variable assignments. static inline mlhmmv_xvalue_t mlhmmv_xvalue_wrap_terminal(mv_t val) { return (mlhmmv_xvalue_t) {.is_terminal = TRUE, .terminal_mlrval = val, .pnext_level = NULL}; } // ---------------------------------------------------------------- typedef struct _mlhmmv_level_t { int num_occupied; int num_freed; int array_length; mlhmmv_level_entry_t* entries; mlhmmv_level_entry_state_t* states; mlhmmv_level_entry_t* phead; mlhmmv_level_entry_t* ptail; } mlhmmv_level_t; mlhmmv_level_t* mlhmmv_level_alloc(); void mlhmmv_level_free(mlhmmv_level_t* plevel); void mlhmmv_level_clear(mlhmmv_level_t* plevel); void mlhmmv_level_remove(mlhmmv_level_t* plevel, sllmve_t* prestkeys); int mlhmmv_level_has_key(mlhmmv_level_t* plevel, mv_t* plevel_key); mv_t* mlhmmv_level_look_up_and_ref_terminal( mlhmmv_level_t* plevel, sllmv_t* pmvkeys, int* perror); mlhmmv_xvalue_t* mlhmmv_level_look_up_and_ref_xvalue( mlhmmv_level_t* plevel, sllmv_t* pmvkeys, int* perror); mlhmmv_level_t* mlhmmv_level_put_empty_map( mlhmmv_level_t* plevel, mv_t* pkey); void mlhmmv_level_put_xvalue( mlhmmv_level_t* plevel, sllmve_t* prest_keys, mlhmmv_xvalue_t* pvalue); void mlhmmv_level_put_xvalue_singly_keyed( mlhmmv_level_t* plevel, mv_t* pkey, mlhmmv_xvalue_t* pvalue); void mlhmmv_level_put_terminal( mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value); void mlhmmv_level_put_terminal_singly_keyed( mlhmmv_level_t* plevel, mv_t* pkey, mv_t* pterminal_value); void mlhmmv_level_to_lrecs( mlhmmv_level_t* plevel, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator); void mlhmmv_level_print_stacked( mlhmmv_level_t* plevel, int depth, int do_final_comma, int quote_keys_always, int quote_values_always, char* line_indent, char* line_term, FILE* ostream); // ---------------------------------------------------------------- typedef struct _mlhmmv_root_t { mlhmmv_xvalue_t root_xvalue; } mlhmmv_root_t; mlhmmv_root_t* mlhmmv_root_alloc(); void mlhmmv_root_free(mlhmmv_root_t* pmap); void mlhmmv_root_clear(mlhmmv_root_t* pmap); // If the return value is non-null, error will be MLHMMV_ERROR_NONE. If the // return value is null, the error will be MLHMMV_ERROR_KEYLIST_TOO_DEEP or // MLHMMV_ERROR_KEYLIST_TOO_SHALLOW, or MLHMMV_ERROR_NONE if the keylist matches // map depth but the entry is not found. // // Note: this returns a pointer to the map's data, not to a copy. // The caller shouldn't free it, or modify it. mv_t* mlhmmv_root_look_up_and_ref_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, int* perror); // These are an optimization for assignment from full srec, e.g. '@records[$key1][$key2] = $*'. // Using mlhmmv_root_look_up_or_create_then_ref_level, the CST logic can get or create the @records[$key1][$key2] // level of the mlhmmv, then copy values there. mlhmmv_level_t* mlhmmv_root_look_up_or_create_then_ref_level(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); void mlhmmv_root_put_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mv_t* pterminal_value); // For for-loop-over-oosvar, wherein we need to copy the submap before iterating over it // (since the iteration may modify it). If the keys don't index a submap, then the return // value has is_terminal = TRUE and pnext_level = NULL. mlhmmv_xvalue_t mlhmmv_root_copy_xvalue(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); // Used by for-loops over oosvars. Return value is an array of ephemeral mlrvals. sllv_t* mlhmmv_root_copy_keys_from_submap(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); // Unset value/submap from a specified level onward, also unsetting any maps which become empty as a result. // Examples: // { // "a" : { "x" : 1, "y" : 2 }, // "b" : { "x" : 3, "y" : 4 }, // } // with pmvkeys = ["a"] leaves // { // "b" : { "x" : 3, "y" : 4 }, // } // but with pmvkeys = ["a", "y"] leaves // { // "a" : { "x" : 1 }, // "b" : { "x" : 3, "y" : 4 }, // } // and with pmvkeys = [] leaves // { // } // Now if ["a","x"] is removed from // { // "a" : { "x" : 1 }, // "b" : { "x" : 3, "y" : 4 }, // } // then // { // "b" : { "x" : 3, "y" : 4 }, // } // is left: unsetting "a":"x" leaves the map at "a" so this is unset as well. void mlhmmv_root_remove(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); // For 'emit' and 'emitp' in the DSL. These allocate lrecs, appended to the poutrecs list. // * pmap is the base-level oosvar multi-level hashmap. // * pkeys specify the level in the mlhmmv at which to produce data. // * pnames is used to pull subsequent-level keys out into separate fields. // * In case pnames isn't long enough to reach a terminal mlrval level in the mlhmmv, // do_full_prefixing specifies whether to concatenate nested mlhmmv keys into single lrec keys. // // Examples: // * pkeys reaches a terminal level: // // $ mlr --opprint put -q '@sum += $x; end { emit @sum }' ../data/small // sum // 4.536294 // * pkeys reaches terminal levels: // // $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' ../data/small // a b sum // pan pan 0.346790 // pan wye 0.502626 // eks pan 0.758680 // eks wye 0.381399 // eks zee 0.611784 // wye wye 0.204603 // wye pan 0.573289 // zee pan 0.527126 // zee wye 0.598554 // hat wye 0.031442 // * pkeys reaches non-terminal levels: non-prefixed: // // $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' ../data/small // a pan wye // pan 0.346790 0.502626 // // a pan wye zee // eks 0.758680 0.381399 0.611784 // // a wye pan // wye 0.204603 0.573289 // // a pan wye // zee 0.527126 0.598554 // // a wye // hat 0.031442 // * pkeys reaches non-terminal levels: prefixed: // // $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' ../data/small // a sum:pan sum:wye // pan 0.346790 0.502626 // // a sum:pan sum:wye sum:zee // eks 0.758680 0.381399 0.611784 // // a sum:wye sum:pan // wye 0.204603 0.573289 // // a sum:pan sum:wye // zee 0.527126 0.598554 // // a sum:wye // hat 0.031442 // For 'emit all' and 'emitp all' in the DSL void mlhmmv_root_all_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator); // For 'emit' and 'emitp' in the DSL void mlhmmv_root_partial_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator); // For 'dump' in the DSL; also used by the lrec-to-JSON writer. void mlhmmv_root_print_json_stacked(mlhmmv_root_t* pmap, int quote_keys_always, int quote_values_always, char* line_indent, char* line_term, FILE* ostream); void mlhmmv_root_print_json_single_lines(mlhmmv_root_t* pmap, int quote_keys_always, int quote_values_always, char* line_term, FILE* ostream); // Used for emit of localvars. Puts the xvalue in a single-key-value-pair map // keyed by the specified name. The xvalue is referenced, not copied. mlhmmv_root_t* mlhmmv_wrap_name_and_xvalue(mv_t* pname, mlhmmv_xvalue_t* pxval); // Used for takedown of the temporary map returned by mlhmmv_wrap_name_and_xvalue. Since the xvalue there // is referenced, not copied, mlhmmv_xvalue_free would prematurely free the xvalue. This method releases // the xvalue so that the remaining, map-internal structures can be freed correctly. void mlhmmv_unwrap_name_and_xvalue(mlhmmv_root_t* pmap); #endif // MLHMMV_H miller-5.6.2/c/containers/parse_trie.c000066400000000000000000000053371354153536500177220ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/parse_trie.h" static parse_trie_node_t* parse_trie_node_alloc(char c); static void parse_trie_print_aux(parse_trie_node_t* pnode, int depth); static void parse_trie_add_string_aux(parse_trie_node_t* pnode, char* string, int stridx, int len); // ---------------------------------------------------------------- parse_trie_t* parse_trie_alloc() { parse_trie_t* ptrie = mlr_malloc_or_die(sizeof(parse_trie_t)); ptrie->past = parse_trie_node_alloc(0); ptrie->maxlen = 0; return ptrie; } static parse_trie_node_t* parse_trie_node_alloc(char c) { parse_trie_node_t* pnode = mlr_malloc_or_die(sizeof(parse_trie_node_t)); for (int i = 0; i < 256; i++) pnode->pnexts[i] = NULL; pnode->c = c; pnode->stridx = -1; pnode->strlen = -1; return pnode; } // ---------------------------------------------------------------- static void parse_trie_free_node_descendants(parse_trie_node_t* pnode) { for (int i = 0; i < 256; i++) { parse_trie_node_t* pnext = pnode->pnexts[i]; if (pnext != NULL) { parse_trie_free_node_descendants(pnext); free(pnext); } } } void parse_trie_free(parse_trie_t* ptrie) { parse_trie_free_node_descendants(ptrie->past); free(ptrie->past); free(ptrie); } // ---------------------------------------------------------------- void parse_trie_print(parse_trie_t* ptrie) { parse_trie_node_t* pnode = ptrie->past; printf("PARSE TRIE DUMP START\n"); if (pnode != NULL) { parse_trie_print_aux(pnode, 0); } printf("PARSE TRIE DUMP END\n"); } static void parse_trie_print_aux(parse_trie_node_t* pnode, int depth) { for (int i = 0; i < depth; i++) printf(" "); printf("c=%c[%02x],stridx=%d,strlen=%d\n", isprint((unsigned char)pnode->c) ? pnode->c : '?', (unsigned)pnode->c, pnode->stridx, pnode->strlen); for (int i = 0; i < 256; i++) { parse_trie_node_t* pnext = pnode->pnexts[i]; if (pnext != NULL) parse_trie_print_aux(pnext, depth+1); } } // ---------------------------------------------------------------- void parse_trie_add_string(parse_trie_t* ptrie, char* string, int stridx) { int len = strlen(string); parse_trie_add_string_aux(ptrie->past, string, stridx, strlen(string)); if (len > ptrie->maxlen) ptrie->maxlen = len; } static void parse_trie_add_string_aux(parse_trie_node_t* pnode, char* string, int stridx, int len) { char c = string[0]; if (c == 0) { pnode->stridx = stridx; pnode->strlen = len; } else { parse_trie_node_t* pnext = pnode->pnexts[(unsigned char)c]; if (pnext == NULL) { pnext = parse_trie_node_alloc(c); pnext->c = c; pnext->stridx = -1; pnext->strlen = -1; pnode->pnexts[(unsigned char)c] = pnext; } parse_trie_add_string_aux(pnext, &string[1], stridx, len); } } miller-5.6.2/c/containers/parse_trie.h000066400000000000000000000060751354153536500177270ustar00rootroot00000000000000#ifndef PARSE_TRIE_H #define PARSE_TRIE_H // ---------------------------------------------------------------- // This is for parsing of Miller RFC-CSV data, not for parsing of DSL // expressions for the put and filter verbs. This is used instead of flex or // lemon since such parsers, by design, must read to end of input to complete // parsing. Here, by contrast, we want to split the input stream by delimiters, // identifying one record at a time. This is so that data may be processed in a // streaming manner rather than an ingest-all manner. struct _parse_trie_node_t; typedef struct _parse_trie_node_t { struct _parse_trie_node_t* pnexts[256]; char c; // current character at this node int stridx; // which string was stored ending here; -1 if not end of string. int strlen; // length of string stored ending here; -1 if not end of string. } parse_trie_node_t; typedef struct _parse_trie_t { parse_trie_node_t* past; int maxlen; } parse_trie_t; // ---------------------------------------------------------------- parse_trie_t* parse_trie_alloc(); void parse_trie_free(parse_trie_t* ptrie); void parse_trie_print(parse_trie_t* ptrie); void parse_trie_add_string(parse_trie_t* ptrie, char* string, int stridx); // ---------------------------------------------------------------- // Example input: // * string 0 is "a" // * string 1 is "aa" // * buf is "aaabc" // Output: // * return value is TRUE // * stridx is 1 since longest match is "aa" // * matchlen is 2 since "aa" has length 2 // This does a longest-prefix match: input data "\"\nabcdefg" is matched // against "\"\n" rather than against "\"". // We assume that enough data has been peeked into the ring buffer for the // parse-trie's maxlen. There is no check here. This function is called on // every single character of RFC-CSV input data so the error-checking would be // inefficient here, as well as misplaced. // The start of buffer (sob), buflen, and mask attributes are nominally // presented from a ring_buffer object. static inline int parse_trie_ring_match(parse_trie_t* ptrie, char* buf, int sob, int buflen, int mask, int* pstridx, int* pmatchlen) { parse_trie_node_t* pnode = ptrie->past; parse_trie_node_t* pnext; parse_trie_node_t* pterm = NULL; for (int i = 0; i < buflen; i++) { char c = buf[(sob+i)&mask]; pnext = pnode->pnexts[(unsigned char) c]; if (pnext == NULL) break; if (pnext->strlen > 0) { pterm = pnext; } pnode = pnext; } if (pterm == NULL) { return FALSE; } else { *pstridx = pterm->stridx; *pmatchlen = pterm->strlen; return TRUE; } } static inline int parse_trie_match(parse_trie_t* ptrie, char* p, char* e, int* pstridx, int* pmatchlen) { parse_trie_node_t* pnode = ptrie->past; parse_trie_node_t* pnext; parse_trie_node_t* pterm = NULL; for ( ; p < e; p++) { char c = *p; pnext = pnode->pnexts[(unsigned char) c]; if (pnext == NULL) break; if (pnext->strlen > 0) { pterm = pnext; } pnode = pnext; } if (pterm == NULL) { return FALSE; } else { *pstridx = pterm->stridx; *pmatchlen = pterm->strlen; return TRUE; } } #endif // PARSE_TRIE_H miller-5.6.2/c/containers/percentile_keeper.c000066400000000000000000000313201354153536500212410ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/percentile_keeper.h" #include "lib/mvfuncs.h" #define INITIAL_CAPACITY 10000 #define GROWTH_FACTOR 2.0 // ---------------------------------------------------------------- percentile_keeper_t* percentile_keeper_alloc() { unsigned long long capacity = INITIAL_CAPACITY; percentile_keeper_t* ppercentile_keeper = mlr_malloc_or_die(sizeof(percentile_keeper_t)); ppercentile_keeper->data = mlr_malloc_or_die(capacity*sizeof(mv_t)); ppercentile_keeper->size = 0LL; ppercentile_keeper->capacity = capacity; ppercentile_keeper->sorted = FALSE; return ppercentile_keeper; } // ---------------------------------------------------------------- void percentile_keeper_free(percentile_keeper_t* ppercentile_keeper) { if (ppercentile_keeper == NULL) return; for (unsigned long long i = 0; i < ppercentile_keeper->size; i++) { mv_free(&ppercentile_keeper->data[i]); } free(ppercentile_keeper->data); ppercentile_keeper->data = NULL; ppercentile_keeper->size = 0LL; ppercentile_keeper->capacity = 0LL; free(ppercentile_keeper); } // ---------------------------------------------------------------- void percentile_keeper_ingest(percentile_keeper_t* ppercentile_keeper, mv_t value) { if (ppercentile_keeper->size >= ppercentile_keeper->capacity) { ppercentile_keeper->capacity = (unsigned long long)(ppercentile_keeper->capacity * GROWTH_FACTOR); ppercentile_keeper->data = (mv_t*)mlr_realloc_or_die(ppercentile_keeper->data, ppercentile_keeper->capacity*sizeof(mv_t)); } ppercentile_keeper->data[ppercentile_keeper->size++] = value; ppercentile_keeper->sorted = FALSE; } // ================================================================ // Non-interpolated percentiles (see also https://en.wikipedia.org/wiki/Percentile) // ---------------------------------------------------------------- // OPTION 1: int index = p*n/100.0; // // x // 0 // 20 // 40 // 60 // 80 // 100 // // x_p00 0 x_p10 0 x_p20 20 x_p30 20 x_p40 40 x_p50 60 x_p60 60 x_p70 80 x_p80 80 x_p90 100 x_p100 100 // x_p01 0 x_p11 0 x_p21 20 x_p31 20 x_p41 40 x_p51 60 x_p61 60 x_p71 80 x_p81 80 x_p91 100 // x_p02 0 x_p12 0 x_p22 20 x_p32 20 x_p42 40 x_p52 60 x_p62 60 x_p72 80 x_p82 80 x_p92 100 // x_p03 0 x_p13 0 x_p23 20 x_p33 20 x_p43 40 x_p53 60 x_p63 60 x_p73 80 x_p83 80 x_p93 100 // x_p04 0 x_p14 0 x_p24 20 x_p34 40 x_p44 40 x_p54 60 x_p64 60 x_p74 80 x_p84 100 x_p94 100 // x_p05 0 x_p15 0 x_p25 20 x_p35 40 x_p45 40 x_p55 60 x_p65 60 x_p75 80 x_p85 100 x_p95 100 // x_p06 0 x_p16 0 x_p26 20 x_p36 40 x_p46 40 x_p56 60 x_p66 60 x_p76 80 x_p86 100 x_p96 100 // x_p07 0 x_p17 20 x_p27 20 x_p37 40 x_p47 40 x_p57 60 x_p67 80 x_p77 80 x_p87 100 x_p97 100 // x_p08 0 x_p18 20 x_p28 20 x_p38 40 x_p48 40 x_p58 60 x_p68 80 x_p78 80 x_p88 100 x_p98 100 // x_p09 0 x_p19 20 x_p29 20 x_p39 40 x_p49 40 x_p59 60 x_p69 80 x_p79 80 x_p89 100 x_p99 100 // // x // 0 // 25 // 50 // 75 // 100 // // x_p00 0 x_p10 0 x_p20 25 x_p30 25 x_p40 50 x_p50 50 x_p60 75 x_p70 75 x_p80 100 x_p90 100 x_p100 100 // x_p01 0 x_p11 0 x_p21 25 x_p31 25 x_p41 50 x_p51 50 x_p61 75 x_p71 75 x_p81 100 x_p91 100 // x_p02 0 x_p12 0 x_p22 25 x_p32 25 x_p42 50 x_p52 50 x_p62 75 x_p72 75 x_p82 100 x_p92 100 // x_p03 0 x_p13 0 x_p23 25 x_p33 25 x_p43 50 x_p53 50 x_p63 75 x_p73 75 x_p83 100 x_p93 100 // x_p04 0 x_p14 0 x_p24 25 x_p34 25 x_p44 50 x_p54 50 x_p64 75 x_p74 75 x_p84 100 x_p94 100 // x_p05 0 x_p15 0 x_p25 25 x_p35 25 x_p45 50 x_p55 50 x_p65 75 x_p75 75 x_p85 100 x_p95 100 // x_p06 0 x_p16 0 x_p26 25 x_p36 25 x_p46 50 x_p56 50 x_p66 75 x_p76 75 x_p86 100 x_p96 100 // x_p07 0 x_p17 0 x_p27 25 x_p37 25 x_p47 50 x_p57 50 x_p67 75 x_p77 75 x_p87 100 x_p97 100 // x_p08 0 x_p18 0 x_p28 25 x_p38 25 x_p48 50 x_p58 50 x_p68 75 x_p78 75 x_p88 100 x_p98 100 // x_p09 0 x_p19 0 x_p29 25 x_p39 25 x_p49 50 x_p59 50 x_p69 75 x_p79 75 x_p89 100 x_p99 100 // // ---------------------------------------------------------------- // OPTION 2: int index = p*(n-1)/100.0; // // x // 0 // 20 // 40 // 60 // 80 // 100 // // x_p00 0 x_p10 0 x_p20 20 x_p30 20 x_p40 40 x_p50 40 x_p60 60 x_p70 60 x_p80 80 x_p90 80 x_p100 100 // x_p01 0 x_p11 0 x_p21 20 x_p31 20 x_p41 40 x_p51 40 x_p61 60 x_p71 60 x_p81 80 x_p91 80 // x_p02 0 x_p12 0 x_p22 20 x_p32 20 x_p42 40 x_p52 40 x_p62 60 x_p72 60 x_p82 80 x_p92 80 // x_p03 0 x_p13 0 x_p23 20 x_p33 20 x_p43 40 x_p53 40 x_p63 60 x_p73 60 x_p83 80 x_p93 80 // x_p04 0 x_p14 0 x_p24 20 x_p34 20 x_p44 40 x_p54 40 x_p64 60 x_p74 60 x_p84 80 x_p94 80 // x_p05 0 x_p15 0 x_p25 20 x_p35 20 x_p45 40 x_p55 40 x_p65 60 x_p75 60 x_p85 80 x_p95 80 // x_p06 0 x_p16 0 x_p26 20 x_p36 20 x_p46 40 x_p56 40 x_p66 60 x_p76 60 x_p86 80 x_p96 80 // x_p07 0 x_p17 0 x_p27 20 x_p37 20 x_p47 40 x_p57 40 x_p67 60 x_p77 60 x_p87 80 x_p97 80 // x_p08 0 x_p18 0 x_p28 20 x_p38 20 x_p48 40 x_p58 40 x_p68 60 x_p78 60 x_p88 80 x_p98 80 // x_p09 0 x_p19 0 x_p29 20 x_p39 20 x_p49 40 x_p59 40 x_p69 60 x_p79 60 x_p89 80 x_p99 80 // // x // 0 // 25 // 50 // 75 // 100 // // x_p00 0 x_p10 0 x_p20 0 x_p30 25 x_p40 25 x_p50 50 x_p60 50 x_p70 50 x_p80 75 x_p90 75 x_p100 100 // x_p01 0 x_p11 0 x_p21 0 x_p31 25 x_p41 25 x_p51 50 x_p61 50 x_p71 50 x_p81 75 x_p91 75 // x_p02 0 x_p12 0 x_p22 0 x_p32 25 x_p42 25 x_p52 50 x_p62 50 x_p72 50 x_p82 75 x_p92 75 // x_p03 0 x_p13 0 x_p23 0 x_p33 25 x_p43 25 x_p53 50 x_p63 50 x_p73 50 x_p83 75 x_p93 75 // x_p04 0 x_p14 0 x_p24 0 x_p34 25 x_p44 25 x_p54 50 x_p64 50 x_p74 50 x_p84 75 x_p94 75 // x_p05 0 x_p15 0 x_p25 25 x_p35 25 x_p45 25 x_p55 50 x_p65 50 x_p75 75 x_p85 75 x_p95 75 // x_p06 0 x_p16 0 x_p26 25 x_p36 25 x_p46 25 x_p56 50 x_p66 50 x_p76 75 x_p86 75 x_p96 75 // x_p07 0 x_p17 0 x_p27 25 x_p37 25 x_p47 25 x_p57 50 x_p67 50 x_p77 75 x_p87 75 x_p97 75 // x_p08 0 x_p18 0 x_p28 25 x_p38 25 x_p48 25 x_p58 50 x_p68 50 x_p78 75 x_p88 75 x_p98 75 // x_p09 0 x_p19 0 x_p29 25 x_p39 25 x_p49 25 x_p59 50 x_p69 50 x_p79 75 x_p89 75 x_p99 75 // // ---------------------------------------------------------------- // OPTION 3: int index = (int)ceil(p*(n-1)/100.0); // // x // 0 // 20 // 40 // 60 // 80 // 100 // // x_p00 0 x_p10 20 x_p20 20 x_p30 40 x_p40 40 x_p50 60 x_p60 60 x_p70 80 x_p80 80 x_p90 100 x_p100 100 // x_p01 20 x_p11 20 x_p21 40 x_p31 40 x_p41 60 x_p51 60 x_p61 80 x_p71 80 x_p81 100 x_p91 100 // x_p02 20 x_p12 20 x_p22 40 x_p32 40 x_p42 60 x_p52 60 x_p62 80 x_p72 80 x_p82 100 x_p92 100 // x_p03 20 x_p13 20 x_p23 40 x_p33 40 x_p43 60 x_p53 60 x_p63 80 x_p73 80 x_p83 100 x_p93 100 // x_p04 20 x_p14 20 x_p24 40 x_p34 40 x_p44 60 x_p54 60 x_p64 80 x_p74 80 x_p84 100 x_p94 100 // x_p05 20 x_p15 20 x_p25 40 x_p35 40 x_p45 60 x_p55 60 x_p65 80 x_p75 80 x_p85 100 x_p95 100 // x_p06 20 x_p16 20 x_p26 40 x_p36 40 x_p46 60 x_p56 60 x_p66 80 x_p76 80 x_p86 100 x_p96 100 // x_p07 20 x_p17 20 x_p27 40 x_p37 40 x_p47 60 x_p57 60 x_p67 80 x_p77 80 x_p87 100 x_p97 100 // x_p08 20 x_p18 20 x_p28 40 x_p38 40 x_p48 60 x_p58 60 x_p68 80 x_p78 80 x_p88 100 x_p98 100 // x_p09 20 x_p19 20 x_p29 40 x_p39 40 x_p49 60 x_p59 60 x_p69 80 x_p79 80 x_p89 100 x_p99 100 // // x // 0 // 25 // 50 // 75 // 100 // // x_p00 0 x_p10 25 x_p20 25 x_p30 50 x_p40 50 x_p50 50 x_p60 75 x_p70 75 x_p80 100 x_p90 100 x_p100 100 // x_p01 25 x_p11 25 x_p21 25 x_p31 50 x_p41 50 x_p51 75 x_p61 75 x_p71 75 x_p81 100 x_p91 100 // x_p02 25 x_p12 25 x_p22 25 x_p32 50 x_p42 50 x_p52 75 x_p62 75 x_p72 75 x_p82 100 x_p92 100 // x_p03 25 x_p13 25 x_p23 25 x_p33 50 x_p43 50 x_p53 75 x_p63 75 x_p73 75 x_p83 100 x_p93 100 // x_p04 25 x_p14 25 x_p24 25 x_p34 50 x_p44 50 x_p54 75 x_p64 75 x_p74 75 x_p84 100 x_p94 100 // x_p05 25 x_p15 25 x_p25 25 x_p35 50 x_p45 50 x_p55 75 x_p65 75 x_p75 75 x_p85 100 x_p95 100 // x_p06 25 x_p16 25 x_p26 50 x_p36 50 x_p46 50 x_p56 75 x_p66 75 x_p76 100 x_p86 100 x_p96 100 // x_p07 25 x_p17 25 x_p27 50 x_p37 50 x_p47 50 x_p57 75 x_p67 75 x_p77 100 x_p87 100 x_p97 100 // x_p08 25 x_p18 25 x_p28 50 x_p38 50 x_p48 50 x_p58 75 x_p68 75 x_p78 100 x_p88 100 x_p98 100 // x_p09 25 x_p19 25 x_p29 50 x_p39 50 x_p49 50 x_p59 75 x_p69 75 x_p79 100 x_p89 100 x_p99 100 // // ---------------------------------------------------------------- // OPTION 4: int index = (int)ceil(-0.5 + p*(n-1)/100.0); // // x // 0 // 20 // 40 // 60 // 80 // 100 // // x_p00 0 x_p10 0 x_p20 20 x_p30 20 x_p40 40 x_p50 40 x_p60 60 x_p70 60 x_p80 80 x_p90 80 x_p100 100 // x_p01 0 x_p11 20 x_p21 20 x_p31 40 x_p41 40 x_p51 60 x_p61 60 x_p71 80 x_p81 80 x_p91 100 // x_p02 0 x_p12 20 x_p22 20 x_p32 40 x_p42 40 x_p52 60 x_p62 60 x_p72 80 x_p82 80 x_p92 100 // x_p03 0 x_p13 20 x_p23 20 x_p33 40 x_p43 40 x_p53 60 x_p63 60 x_p73 80 x_p83 80 x_p93 100 // x_p04 0 x_p14 20 x_p24 20 x_p34 40 x_p44 40 x_p54 60 x_p64 60 x_p74 80 x_p84 80 x_p94 100 // x_p05 0 x_p15 20 x_p25 20 x_p35 40 x_p45 40 x_p55 60 x_p65 60 x_p75 80 x_p85 80 x_p95 100 // x_p06 0 x_p16 20 x_p26 20 x_p36 40 x_p46 40 x_p56 60 x_p66 60 x_p76 80 x_p86 80 x_p96 100 // x_p07 0 x_p17 20 x_p27 20 x_p37 40 x_p47 40 x_p57 60 x_p67 60 x_p77 80 x_p87 80 x_p97 100 // x_p08 0 x_p18 20 x_p28 20 x_p38 40 x_p48 40 x_p58 60 x_p68 60 x_p78 80 x_p88 80 x_p98 100 // x_p09 0 x_p19 20 x_p29 20 x_p39 40 x_p49 40 x_p59 60 x_p69 60 x_p79 80 x_p89 80 x_p99 100 // // x // 0 // 25 // 50 // 75 // 100 // // x_p00 0 x_p10 0 x_p20 25 x_p30 25 x_p40 50 x_p50 50 x_p60 50 x_p70 75 x_p80 75 x_p90 100 x_p100 100 // x_p01 0 x_p11 0 x_p21 25 x_p31 25 x_p41 50 x_p51 50 x_p61 50 x_p71 75 x_p81 75 x_p91 100 // x_p02 0 x_p12 0 x_p22 25 x_p32 25 x_p42 50 x_p52 50 x_p62 50 x_p72 75 x_p82 75 x_p92 100 // x_p03 0 x_p13 25 x_p23 25 x_p33 25 x_p43 50 x_p53 50 x_p63 75 x_p73 75 x_p83 75 x_p93 100 // x_p04 0 x_p14 25 x_p24 25 x_p34 25 x_p44 50 x_p54 50 x_p64 75 x_p74 75 x_p84 75 x_p94 100 // x_p05 0 x_p15 25 x_p25 25 x_p35 25 x_p45 50 x_p55 50 x_p65 75 x_p75 75 x_p85 75 x_p95 100 // x_p06 0 x_p16 25 x_p26 25 x_p36 25 x_p46 50 x_p56 50 x_p66 75 x_p76 75 x_p86 75 x_p96 100 // x_p07 0 x_p17 25 x_p27 25 x_p37 25 x_p47 50 x_p57 50 x_p67 75 x_p77 75 x_p87 75 x_p97 100 // x_p08 0 x_p18 25 x_p28 25 x_p38 50 x_p48 50 x_p58 50 x_p68 75 x_p78 75 x_p88 100 x_p98 100 // x_p09 0 x_p19 25 x_p29 25 x_p39 50 x_p49 50 x_p59 50 x_p69 75 x_p79 75 x_p89 100 x_p99 100 // // ---------------------------------------------------------------- // CONCLUSION: // * I like option 2 for its simplicity ... // * ... but option 1 matches R's quantile with type=1. // * (Note that Miller's interpolated percentiles match match R's quantile with type=7) // ---------------------------------------------------------------- static unsigned long long compute_index_non_interpolated(unsigned long long n, double p) { long long index = p*n/100.0; //unsigned long long index = p*(n-1)/100.0; //unsigned long long index = (unsigned long long)ceil(p*(n-1)/100.0); //unsigned long long index = (unsigned long long)ceil(-0.5 + p*(n-1)/100.0); if (index >= n) index = n-1; if (index < 0) index = 0; return (unsigned long long)index; } static mv_t get_percentile_linearly_interpolated(mv_t* array, unsigned long long n, double p) { double findex = (p/100.0)*(n-1); if (findex < 0) findex = 0; unsigned long long iindex = (unsigned long long)floor(findex); if (iindex >= n-1) { return array[iindex]; } else { // array[iindex] + frac * (array[iindex+1] - array[iindex]); mv_t frac = mv_from_float(findex - iindex); mv_t* pa = &array[iindex]; mv_t* pb = &array[iindex+1]; mv_t diff = x_xx_minus_func(pb, pa); mv_t prod = x_xx_times_func(&frac, &diff); mv_t rv = x_xx_plus_func(pa, &prod); return rv; } } // ---------------------------------------------------------------- mv_t percentile_keeper_emit_non_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile) { if (ppercentile_keeper->size == 0) { return mv_absent(); } if (!ppercentile_keeper->sorted) { qsort(ppercentile_keeper->data, ppercentile_keeper->size, sizeof(mv_t), mv_xx_comparator); ppercentile_keeper->sorted = TRUE; } return ppercentile_keeper->data[compute_index_non_interpolated(ppercentile_keeper->size, percentile)]; } mv_t percentile_keeper_emit_linearly_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile) { if (ppercentile_keeper->size == 0) { return mv_absent(); } if (!ppercentile_keeper->sorted) { qsort(ppercentile_keeper->data, ppercentile_keeper->size, sizeof(mv_t), mv_xx_comparator); ppercentile_keeper->sorted = TRUE; } return get_percentile_linearly_interpolated(ppercentile_keeper->data, ppercentile_keeper->size, percentile); } // ---------------------------------------------------------------- void percentile_keeper_print(percentile_keeper_t* ppercentile_keeper) { printf("percentile_keeper dump:\n"); for (unsigned long long i = 0; i < ppercentile_keeper->size; i++) { mv_t* pa = &ppercentile_keeper->data[i]; if (pa->type == MT_FLOAT) printf("[%02llu] %.8lf\n", i, ppercentile_keeper->data[i].u.fltv); else printf("[%02llu] %8lld\n", i, ppercentile_keeper->data[i].u.intv); } } miller-5.6.2/c/containers/percentile_keeper.h000066400000000000000000000020151354153536500212450ustar00rootroot00000000000000// ================================================================ // For mlr stats1 percentiles // ================================================================ #ifndef PERCENTILE_KEEPER_H #define PERCENTILE_KEEPER_H #include "lib/mlrval.h" typedef struct _percentile_keeper_t { mv_t* data; unsigned long long size; unsigned long long capacity; int sorted; } percentile_keeper_t; percentile_keeper_t* percentile_keeper_alloc(); void percentile_keeper_free(percentile_keeper_t* ppercentile_keeper); void percentile_keeper_ingest(percentile_keeper_t* ppercentile_keeper, mv_t value); typedef mv_t percentile_keeper_emitter_t(percentile_keeper_t* ppercentile_keeper, double percentile); mv_t percentile_keeper_emit_non_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile); mv_t percentile_keeper_emit_linearly_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile); // For debug/test void percentile_keeper_print(percentile_keeper_t* ppercentile_keeper); #endif // PERCENTILE_KEEPER_H miller-5.6.2/c/containers/rslls.c000066400000000000000000000045451354153536500167240ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/rslls.h" // ---------------------------------------------------------------- rslls_t* rslls_alloc() { rslls_t* plist = mlr_malloc_or_die(sizeof(rslls_t)); plist->phead = NULL; plist->ptail = NULL; plist->length = 0; return plist; } // ---------------------------------------------------------------- void rslls_reset(rslls_t* plist) { if (plist == NULL) return; if (plist->phead == NULL) return; rsllse_t* pnode = plist->phead; while (pnode != NULL) { if (pnode->free_flag & FREE_ENTRY_VALUE) free(pnode->value); pnode->value = NULL; pnode = pnode->pnext; } plist->ptail = plist->phead; plist->length = 0; } // ---------------------------------------------------------------- void rslls_free(rslls_t* plist) { if (plist == NULL) return; rsllse_t* pnode = plist->phead; while (pnode != NULL) { rsllse_t* pdel = pnode; pnode = pnode->pnext; if (pdel->free_flag & FREE_ENTRY_VALUE) free(pdel->value); free(pdel); } plist->phead = NULL; plist->ptail = 0; plist->length = 0; free(plist); } // ---------------------------------------------------------------- void rslls_append(rslls_t* plist, char* value, char free_flag, char quote_flag) { if (plist->ptail == NULL) { // First add on new list rsllse_t* pnode = mlr_malloc_or_die(sizeof(rsllse_t)); pnode->value = value; pnode->free_flag = free_flag; pnode->quote_flag = quote_flag; pnode->pnext = NULL; plist->phead = pnode; plist->ptail = pnode; } else if (plist->ptail->value == NULL) { // Subsequent add on reused list plist->ptail->value = value; plist->ptail->free_flag = free_flag; plist->ptail->quote_flag = quote_flag; if (plist->ptail->pnext != NULL) plist->ptail = plist->ptail->pnext; } else { // Append at end of list rsllse_t* pnode = mlr_malloc_or_die(sizeof(rsllse_t)); pnode->value = value; pnode->free_flag = free_flag; pnode->quote_flag = quote_flag; pnode->pnext = NULL; plist->ptail->pnext = pnode; plist->ptail = pnode; } plist->length++; } void rslls_print(rslls_t* plist) { if (plist == NULL) { printf("NULL"); } else { unsigned long long i = 0; for (rsllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext, i++) { if (i > 0) printf(","); if (pe->value == NULL) printf("NULL"); else printf("%s", pe->value); } } } miller-5.6.2/c/containers/rslls.h000066400000000000000000000033401354153536500167210ustar00rootroot00000000000000// ================================================================ // Reusable singly linked list of string, with tail for append. // // Unlike slls which frees all memory on the destructor, this rslls class is // designed to be reusable: there is a reset method which doesn't free all node // structures. The context is the CSV-reader which extends a singly linked // list for every data line. Now, all CSV lines have nominally the same number // of fields (say N), so using slls, the CSV reader would be allocating and // freeing N nodes on every line. Mingled in with other mallocs and frees, this // results in needless heap fragmentation. Here, by contrast, as a performance // optimization, the CSV reader can keep and reuse the nodes of a list, only // changing the value-pointers on each CSV line. // // This means that while an slls iteration looks like // // for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { // ... // } // // an rslls iteration must also check length: // // unsigned long long i = 0; // for (rsllse_t* pe = plist->phead; i < plist->length && pe != NULL; pe = pe->pnext, i++) { // ... // } // // ================================================================ #ifndef RSLLS_H #define RSLLS_H #include #include "lib/free_flags.h" typedef struct _rsllse_t { char* value; char free_flag; char quote_flag; struct _rsllse_t *pnext; } rsllse_t; typedef struct _rslls_t { rsllse_t *phead; rsllse_t *ptail; unsigned long long length; } rslls_t; rslls_t* rslls_alloc(); void rslls_reset(rslls_t* plist); void rslls_free(rslls_t* plist); void rslls_append(rslls_t* plist, char* value, char free_flag, char quote_flag); void rslls_print(rslls_t* plist); #endif // RSLLS_H miller-5.6.2/c/containers/sllmv.c000066400000000000000000000074511354153536500167210ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "containers/sllmv.h" // ---------------------------------------------------------------- sllmv_t* sllmv_alloc() { sllmv_t* plist = mlr_malloc_or_die(sizeof(sllmv_t)); plist->phead = NULL; plist->ptail = NULL; plist->length = 0; return plist; } // ---------------------------------------------------------------- void sllmv_free(sllmv_t* plist) { if (plist == NULL) return; sllmve_t* pnode = plist->phead; while (pnode != NULL) { sllmve_t* pdel = pnode; pnode = pnode->pnext; if (pdel->free_flags & FREE_ENTRY_VALUE) mv_free(&pdel->value); free(pdel); } plist->phead = NULL; plist->ptail = 0; plist->length = 0; free(plist); } // ---------------------------------------------------------------- // Mlrvals are small structs and we do struct assignment from argument // to list storage. For all but string mlrvals, this is a copy. // For string mlrvals, it is pointer assignment without string duplication. // This is intentional (for performance); callees are advised. static void sllmv_append(sllmv_t* plist, mv_t* pvalue, char free_flags) { sllmve_t* pnode = mlr_malloc_or_die(sizeof(sllmve_t)); pnode->value = *pvalue; // struct assignment pnode->free_flags = free_flags; if (plist->ptail == NULL) { pnode->pnext = NULL; plist->phead = pnode; plist->ptail = pnode; } else { pnode->pnext = NULL; plist->ptail->pnext = pnode; plist->ptail = pnode; } plist->length++; } void sllmv_append_with_free(sllmv_t* plist, mv_t* pvalue) { sllmv_append(plist, pvalue, FREE_ENTRY_VALUE); } void sllmv_append_no_free(sllmv_t* plist, mv_t* pvalue) { sllmv_append(plist, pvalue, NO_FREE); } static void sllmv_prepend(sllmv_t* plist, mv_t* pvalue, char free_flags) { sllmve_t* pnode = mlr_malloc_or_die(sizeof(sllmve_t)); pnode->value = *pvalue; // struct assignment pnode->free_flags = free_flags; pnode->value = *pvalue; // struct assignment if (plist->ptail == NULL) { pnode->pnext = NULL; plist->phead = pnode; plist->ptail = pnode; } else { pnode->pnext = plist->phead; plist->phead = pnode; } plist->length++; } void sllmv_prepend_with_free(sllmv_t* plist, mv_t* pvalue) { sllmv_prepend(plist, pvalue, FREE_ENTRY_VALUE); } void sllmv_prepend_no_free(sllmv_t* plist, mv_t* pvalue) { sllmv_prepend(plist, pvalue, NO_FREE); } // ---------------------------------------------------------------- sllmv_t* sllmv_single_no_free(mv_t* pvalue) { sllmv_t* psllmv = sllmv_alloc(); sllmv_append_no_free(psllmv, pvalue); return psllmv; } sllmv_t* sllmv_single_with_free(mv_t* pvalue) { sllmv_t* psllmv = sllmv_alloc(); sllmv_append_with_free(psllmv, pvalue); return psllmv; } sllmv_t* sllmv_double_with_free(mv_t* pvalue1, mv_t* pvalue2) { sllmv_t* psllmv = sllmv_alloc(); sllmv_append_with_free(psllmv, pvalue1); sllmv_append_with_free(psllmv, pvalue2); return psllmv; } sllmv_t* sllmv_triple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3) { sllmv_t* psllmv = sllmv_alloc(); sllmv_append_with_free(psllmv, pvalue1); sllmv_append_with_free(psllmv, pvalue2); sllmv_append_with_free(psllmv, pvalue3); return psllmv; } sllmv_t* sllmv_quadruple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3, mv_t* pvalue4) { sllmv_t* psllmv = sllmv_alloc(); sllmv_append_with_free(psllmv, pvalue1); sllmv_append_with_free(psllmv, pvalue2); sllmv_append_with_free(psllmv, pvalue3); sllmv_append_with_free(psllmv, pvalue4); return psllmv; } // ---------------------------------------------------------------- void sllmv_print(sllmv_t* plist) { sllmve_tail_print(plist->phead); } void sllmve_tail_print(sllmve_t* pnode) { printf("["); int i = 0; for (sllmve_t* pe = pnode; pe != NULL; pe = pe->pnext, i++) { char* string = mv_alloc_format_val(&pe->value); if (i > 0) printf(", "); printf(" "); printf("%s", string); free(string); } printf("]\n"); } miller-5.6.2/c/containers/sllmv.h000066400000000000000000000025631354153536500167250ustar00rootroot00000000000000// ================================================================ // Singly-linked list of mlrval, with tail for append. // Strings inside mlrvals are referenced, not copied. // ================================================================ #ifndef SLLMV_H #define SLLMV_H #include "../lib/mlrval.h" #include "../lib/free_flags.h" // ---------------------------------------------------------------- typedef struct _sllmve_t { mv_t value; char free_flags; struct _sllmve_t *pnext; } sllmve_t; typedef struct _sllmv_t { sllmve_t *phead; sllmve_t *ptail; int length; } sllmv_t; // ---------------------------------------------------------------- sllmv_t* sllmv_alloc(); void sllmv_free(sllmv_t* plist); void sllmv_prepend_with_free(sllmv_t* plist, mv_t* pvalue); void sllmv_prepend_no_free(sllmv_t* plist, mv_t* pvalue); void sllmv_append_with_free(sllmv_t* plist, mv_t* pvalue); void sllmv_append_no_free(sllmv_t* plist, mv_t* pvalue); sllmv_t* sllmv_single_no_free(mv_t* pvalue); sllmv_t* sllmv_single_with_free(mv_t* pvalue); sllmv_t* sllmv_double_with_free(mv_t* pvalue1, mv_t* pvalue2); sllmv_t* sllmv_triple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3); sllmv_t* sllmv_quadruple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3, mv_t* pvalue4); void sllmv_print(sllmv_t* plist); void sllmve_tail_print(sllmve_t* pnode); #endif // SLLMV_H miller-5.6.2/c/containers/slls.c000066400000000000000000000140771354153536500165430ustar00rootroot00000000000000#include #include #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "containers/slls.h" // ---------------------------------------------------------------- slls_t* slls_alloc() { slls_t* plist = mlr_malloc_or_die(sizeof(slls_t)); plist->phead = NULL; plist->ptail = NULL; plist->length = 0; return plist; } // ---------------------------------------------------------------- int slls_size(slls_t* plist) { return plist->length; } // ---------------------------------------------------------------- slls_t* slls_copy(slls_t* pold) { slls_t* pnew = slls_alloc(); for (sllse_t* pe = pold->phead; pe != NULL; pe = pe->pnext) slls_append_with_free(pnew, mlr_strdup_or_die(pe->value)); return pnew; } // ---------------------------------------------------------------- void slls_free(slls_t* plist) { if (plist == NULL) return; sllse_t* pnode = plist->phead; while (pnode != NULL) { sllse_t* pdel = pnode; pnode = pnode->pnext; if (pdel->free_flag & FREE_ENTRY_VALUE) free(pdel->value); free(pdel); } plist->phead = NULL; plist->ptail = 0; plist->length = 0; free(plist); } // ---------------------------------------------------------------- slls_t* slls_single_with_free(char* value) { slls_t* pslls = slls_alloc(); slls_append_with_free(pslls, value); return pslls; } // ---------------------------------------------------------------- slls_t* slls_single_no_free(char* value) { slls_t* pslls = slls_alloc(); slls_append_no_free(pslls, value); return pslls; } // ---------------------------------------------------------------- void slls_append(slls_t* plist, char* value, char free_flag) { sllse_t* pnode = mlr_malloc_or_die(sizeof(sllse_t)); pnode->value = value; pnode->free_flag = free_flag; if (plist->ptail == NULL) { pnode->pnext = NULL; plist->phead = pnode; plist->ptail = pnode; } else { pnode->pnext = NULL; plist->ptail->pnext = pnode; plist->ptail = pnode; } plist->length++; } void slls_append_with_free(slls_t* plist, char* value) { slls_append(plist, value, FREE_ENTRY_VALUE); } void slls_append_no_free(slls_t* plist, char* value) { slls_append(plist, value, 0); } // ---------------------------------------------------------------- int slls_equals(slls_t* pa, slls_t* pb) { if (pa->length != pb->length) return FALSE; sllse_t* pea = pa->phead; sllse_t* peb = pb->phead; for ( ; pea != NULL && peb != NULL; pea = pea->pnext, peb = peb->pnext) { if (!streq(pea->value, peb->value)) return FALSE; } return TRUE; } // ---------------------------------------------------------------- slls_t* slls_from_line(char* line, char ifs, int allow_repeat_ifs) { slls_t* plist = slls_alloc(); if (*line == 0) // empty string splits to empty list return plist; char seps[2] = {ifs, 0}; char* sep = &seps[0]; int seplen = 1; char* walker = line; char* piece; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { slls_append_no_free(plist, piece); } return plist; } // ---------------------------------------------------------------- // This is inefficient and intended only for debug use. char* slls_join(slls_t* plist, char* ofs) { unsigned long long len = 0; for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) len += strlen(pe->value) + 1; // include space for ofs and null-terminator char* output = mlr_malloc_or_die(len); *output = 0; for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { strcat(output, pe->value); if (pe->pnext != NULL) { strcat(output, ofs); } } return output; } void slls_print(slls_t* plist) { if (plist == NULL) { printf("NULL"); } else { unsigned long long i = 0; for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext, i++) { if (i > 0) printf(","); printf("%s", pe->value); } } } void slls_print_quoted(slls_t* plist) { if (plist == NULL) { printf("NULL"); } else { unsigned long long i = 0; for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext, i++) { if (i > 0) printf(" "); printf("\"%s\"", pe->value); } } } // ---------------------------------------------------------------- void slls_reverse(slls_t* plist) { if (plist->phead == NULL) return; sllse_t* pnewhead = NULL; sllse_t* pnewtail = plist->phead; sllse_t* p = plist->phead; sllse_t* q = p->pnext; while (1) { p->pnext = pnewhead; pnewhead = p; if (q == NULL) break; p = q; q = p->pnext; } plist->phead = pnewhead; plist->ptail = pnewtail; } // ---------------------------------------------------------------- int slls_hash_func(slls_t *plist) { unsigned long hash = 5381; int c; for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { char* str = pe->value; while ((c = *str++) != 0) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ // So that ["ab","c"] doesn't hash to the same as ["a","bc"]: hash = ((hash << 5) + hash) + ','; } return (int)hash; } // ---------------------------------------------------------------- int slls_compare_lexically(slls_t* pa, slls_t* pb) { sllse_t* pe = pa->phead; sllse_t* pf = pb->phead; while (TRUE) { if (pe == NULL && pf == NULL) return 0; if (pe == NULL) return 1; if (pf == NULL) return -1; int rc = strcmp(pe->value, pf->value); if (rc != 0) return rc; pe = pe->pnext; pf = pf->pnext; } } // ---------------------------------------------------------------- static int sllse_vcmp(const void* pva, const void* pvb) { const sllse_t** pa = (const sllse_t**)pva; const sllse_t** pb = (const sllse_t**)pvb; return strcmp((*pa)->value, (*pb)->value); } void slls_sort(slls_t* plist) { if (plist->length < 2) return; unsigned long long i; sllse_t* pe; // Copy to array sllse_t** node_array = mlr_malloc_or_die(sizeof(sllse_t*) * plist->length); for (i = 0, pe = plist->phead; pe != NULL; i++, pe = pe->pnext) node_array[i] = pe; // Sort the array qsort(node_array, plist->length, sizeof(sllse_t*), sllse_vcmp); // Copy back plist->phead = node_array[0]; plist->ptail = node_array[plist->length - 1]; for (i = 1; i < plist->length; i++) { node_array[i-1]->pnext = node_array[i]; } plist->ptail->pnext = NULL; free(node_array); } miller-5.6.2/c/containers/slls.h000066400000000000000000000024171354153536500165430ustar00rootroot00000000000000// ================================================================ // Singly linked list of string, with tail for append. // ================================================================ #ifndef SLLS_H #define SLLS_H #include #include "lib/free_flags.h" typedef struct _sllse_t { char* value; char free_flag; struct _sllse_t *pnext; } sllse_t; typedef struct _slls_t { sllse_t *phead; sllse_t *ptail; unsigned long long length; } slls_t; slls_t* slls_alloc(); int slls_size(slls_t* plist); slls_t* slls_copy(slls_t* pold); void slls_free(slls_t* plist); slls_t* slls_single_with_free(char* value); slls_t* slls_single_no_free(char* value); void slls_append_with_free(slls_t* plist, char* value); void slls_append_no_free(slls_t* plist, char* value); void slls_append(slls_t* plist, char* value, char free_flag); int slls_equals(slls_t* pa, slls_t* pb); slls_t* slls_from_line(char* line, char ifs, int allow_repeat_ifs); void slls_reverse(slls_t* plist); int slls_hash_func(slls_t *plist); int slls_compare_lexically(slls_t* pa, slls_t* pb); void slls_sort(slls_t* plist); // Debug routines: char* slls_join(slls_t* plist, char* ofs); void slls_print(slls_t* plist); void slls_print_quoted(slls_t* plist); #endif // SLLS_H miller-5.6.2/c/containers/sllv.c000066400000000000000000000056101354153536500165370ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "containers/sllv.h" // ---------------------------------------------------------------- sllv_t* sllv_alloc() { sllv_t* plist = mlr_malloc_or_die(sizeof(sllv_t)); plist->phead = NULL; plist->ptail = NULL; plist->length = 0; return plist; } // ---------------------------------------------------------------- void sllv_free(sllv_t* plist) { if (plist == NULL) return; sllve_t* pnode = plist->phead; while (pnode != NULL) { sllve_t* pdel = pnode; pnode = pnode->pnext; free(pdel); } plist->phead = NULL; plist->ptail = 0; plist->length = 0; free(plist); } // ---------------------------------------------------------------- sllv_t* sllv_single(void* pvvalue) { sllv_t* psllv = sllv_alloc(); sllv_append(psllv, pvvalue); return psllv; } // ---------------------------------------------------------------- void sllv_append(sllv_t* plist, void* pvvalue) { sllve_t* pnode = mlr_malloc_or_die(sizeof(sllve_t)); pnode->pvvalue = pvvalue; if (plist->ptail == NULL) { pnode->pnext = NULL; plist->phead = pnode; plist->ptail = pnode; } else { pnode->pnext = NULL; plist->ptail->pnext = pnode; plist->ptail = pnode; } plist->length++; } // ---------------------------------------------------------------- void sllv_push(sllv_t* plist, void* pvvalue) { sllve_t* pnode = mlr_malloc_or_die(sizeof(sllve_t)); pnode->pvvalue = pvvalue; if (plist->ptail == NULL) { pnode->pnext = NULL; plist->phead = pnode; plist->ptail = pnode; } else { pnode->pnext = plist->phead; plist->phead = pnode; } plist->length++; } // ---------------------------------------------------------------- void* sllv_pop(sllv_t* plist) { // Zero entries in list if (plist->phead == NULL) return NULL; void* pval = plist->phead->pvvalue; // One entry in list if (plist->phead->pnext == NULL) { free(plist->phead); plist->phead = NULL; plist->ptail = NULL; plist->length = 0; } // Two or more entries in list else { sllve_t* pnext = plist->phead->pnext; free(plist->phead); plist->phead = pnext; plist->length--; } return pval; } // ---------------------------------------------------------------- void sllv_reverse(sllv_t* plist) { if (plist->phead == NULL) return; sllve_t* pnewhead = NULL; sllve_t* pnewtail = plist->phead; sllve_t* p = plist->phead; sllve_t* q = p->pnext; while (1) { p->pnext = pnewhead; pnewhead = p; if (q == NULL) break; p = q; q = p->pnext; } plist->phead = pnewhead; plist->ptail = pnewtail; } void sllv_transfer(sllv_t* pthis, sllv_t* pthat) { if (pthat == NULL) return; if (pthis->phead == NULL) { pthis->phead = pthat->phead; pthis->ptail = pthat->ptail; pthis->length = pthat->length; } else if (pthat->phead != NULL) { pthis->ptail->pnext = pthat->phead; pthis->ptail = pthat->ptail; pthis->length += pthat->length; } pthat->phead = NULL; pthat->ptail = NULL; pthat->length = 0; } miller-5.6.2/c/containers/sllv.h000066400000000000000000000015311354153536500165420ustar00rootroot00000000000000// ================================================================ // Singly-linked list of void-star, with tail for append. // ================================================================ #ifndef SLLV_H #define SLLV_H typedef struct _sllve_t { void* pvvalue; struct _sllve_t *pnext; } sllve_t; typedef struct _sllv_t { sllve_t *phead; sllve_t *ptail; unsigned long long length; } sllv_t; sllv_t* sllv_alloc(); void sllv_free(sllv_t* plist); sllv_t* sllv_single(void* pvvalue); void sllv_append(sllv_t* plist, void* pvvalue); // Add at tail void sllv_push(sllv_t* plist, void* pvvalue); // Add at head void* sllv_pop(sllv_t* plist); void sllv_reverse(sllv_t* plist); // Move all records from pthat to end of pthis. Upon return, pthat is the empty // list. void sllv_transfer(sllv_t* pthis, sllv_t* pthat); #endif // SLLV_H miller-5.6.2/c/containers/top_keeper.c000066400000000000000000000066201354153536500177160ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/top_keeper.h" #include "lib/mvfuncs.h" // ---------------------------------------------------------------- top_keeper_t* top_keeper_alloc(int capacity) { top_keeper_t* ptop_keeper = mlr_malloc_or_die(sizeof(top_keeper_t)); ptop_keeper->top_values = mlr_malloc_or_die(capacity*sizeof(mv_t)); ptop_keeper->top_precords = mlr_malloc_or_die(capacity*sizeof(lrec_t*)); ptop_keeper->size = 0; ptop_keeper->capacity = capacity; return ptop_keeper; } // ---------------------------------------------------------------- void top_keeper_free(top_keeper_t* ptop_keeper) { if (ptop_keeper == NULL) return; free(ptop_keeper->top_values); free(ptop_keeper->top_precords); ptop_keeper->top_values = NULL; ptop_keeper->top_precords = NULL; ptop_keeper->size = 0; ptop_keeper->capacity = 0; free(ptop_keeper); } // ---------------------------------------------------------------- // Cases: // 1. array size < capacity // * find destidx // * if destidx == size // put it there // else // shift down & insert // increment size // // 2. array size == capacity // * find destidx // * if destidx == size // discard // else // shift down & insert // capacity = 10, size = 6, destidx = 3 capacity = 10, size = 10, destidx = 3 // [0 #] [0 #] [0 #] [0 #] // [1 #] [1 #] [1 #] [1 #] // [2 #] [2 #] [2 #] [2 #] // [3 #]* [3 X] [3 #]* [3 X] // [4 #] [4 #] [4 #] [4 #] // [5 #] [5 #] [5 #] [5 #] // [6 ] [6 #] [6 #] [6 #] // [7 ] [7 ] [7 #] [7 #] // [8 ] [8 ] [8 #] [8 #] // [9 ] [9 ] [9 #] [9 #] // Our caller, mapper_top, feeds us records. We keep them or free them. void top_keeper_add(top_keeper_t* ptop_keeper, mv_t value, lrec_t* prec) { int destidx = mlr_bsearch_mv_n_for_insert(ptop_keeper->top_values, ptop_keeper->size, &value); if (ptop_keeper->size < ptop_keeper->capacity) { for (int i = ptop_keeper->size-1; i >= destidx; i--) { ptop_keeper->top_values[i+1] = ptop_keeper->top_values[i]; ptop_keeper->top_precords[i+1] = ptop_keeper->top_precords[i]; } ptop_keeper->top_values[destidx] = value; ptop_keeper->top_precords[destidx] = prec; ptop_keeper->size++; } else { if (destidx >= ptop_keeper->capacity) { lrec_free(prec); return; } lrec_free(ptop_keeper->top_precords[ptop_keeper->size-1]); for (int i = ptop_keeper->size-2; i >= destidx; i--) { ptop_keeper->top_values[i+1] = ptop_keeper->top_values[i]; ptop_keeper->top_precords[i+1] = ptop_keeper->top_precords[i]; } ptop_keeper->top_values[destidx] = value; ptop_keeper->top_precords[destidx] = prec; } } // ---------------------------------------------------------------- void top_keeper_print(top_keeper_t* ptop_keeper) { printf("top_keeper dump:\n"); for (int i = 0; i < ptop_keeper->size; i++) { mv_t* pvalue = &ptop_keeper->top_values[i]; if (pvalue->type == MT_FLOAT) printf("[%02d] %.8lf\n", i, pvalue->u.fltv); else printf("[%02d] %lld\n", i, pvalue->u.intv); } for (int i = ptop_keeper->size; i < ptop_keeper->capacity; i++) printf("[%02d] ---\n", i); } miller-5.6.2/c/containers/top_keeper.h000066400000000000000000000012501354153536500177150ustar00rootroot00000000000000// ================================================================ // Data structure for mlr top: just a decorated array. // ================================================================ #ifndef TOP_KEEPER_H #define TOP_KEEPER_H #include "lib/mlrval.h" #include "containers/lrec.h" typedef struct _top_keeper_t { mv_t* top_values; lrec_t** top_precords; int size; int capacity; } top_keeper_t; top_keeper_t* top_keeper_alloc(int capacity); void top_keeper_free(top_keeper_t* ptop_keeper); void top_keeper_add(top_keeper_t* ptop_keeper, mv_t value, lrec_t* prec); // For debug/test void top_keeper_print(top_keeper_t* ptop_keeper); #endif // TOP_KEEPER_H miller-5.6.2/c/containers/type_decl.c000066400000000000000000000033031354153536500175240ustar00rootroot00000000000000#include "containers/type_decl.h" // ---------------------------------------------------------------- char* type_mask_to_desc(int type_mask) { switch(type_mask) { case TYPE_MASK_ERROR: return "error"; break; case TYPE_MASK_ANY: return "any"; break; case TYPE_MASK_ABSENT: return "absent"; break; case TYPE_MASK_EMPTY: return "empty"; break; case TYPE_MASK_STRING: return "string"; break; case TYPE_MASK_INT: return "int"; break; case TYPE_MASK_FLOAT: return "float"; break; case TYPE_MASK_BOOLEAN: return "boolean"; break; case TYPE_MASK_NUMERIC: return "numeric"; break; case TYPE_MASK_MAP: return "map"; break; default: return "???"; break; } } // ---------------------------------------------------------------- int type_mask_from_name(char* name) { if (streq(name, "error")) { return TYPE_MASK_ERROR; } else if (streq(name, "absent")) { return TYPE_MASK_ABSENT; } else if (streq(name, "empty")) { return TYPE_MASK_EMPTY; } else if (streq(name, "string")) { return TYPE_MASK_STRING; } else if (streq(name, "str")) { return TYPE_MASK_STRING; } else if (streq(name, "int")) { return TYPE_MASK_INT; } else if (streq(name, "float")) { return TYPE_MASK_FLOAT; } else if (streq(name, "numeric")) { return TYPE_MASK_NUMERIC; } else if (streq(name, "num")) { return TYPE_MASK_NUMERIC; } else if (streq(name, "boolean")) { return TYPE_MASK_BOOLEAN; } else if (streq(name, "map")) { return TYPE_MASK_MAP; } else if (streq(name, "var")) { return TYPE_MASK_ANY; } else if (streq(name, "any")) { return TYPE_MASK_ANY; } else { MLR_INTERNAL_CODING_ERROR(); return 0; // not reached } } miller-5.6.2/c/containers/type_decl.h000066400000000000000000000016531354153536500175370ustar00rootroot00000000000000#ifndef TYPE_DECL_H #define TYPE_DECL_H #include "../lib/mlrval.h" // ---------------------------------------------------------------- // These use the MT defines from mlrval.h, except that map-types (mlhmmv.h) // are outside of mlrval.h. #define TYPE_MASK_ERROR (1 << MT_ERROR) #define TYPE_MASK_ABSENT (1 << MT_ABSENT) #define TYPE_MASK_EMPTY (1 << MT_EMPTY) #define TYPE_MASK_STRING ((1 << MT_STRING) | (1 << MT_EMPTY)) #define TYPE_MASK_INT (1 << MT_INT) #define TYPE_MASK_FLOAT (1 << MT_FLOAT) #define TYPE_MASK_NUMERIC (TYPE_MASK_INT | TYPE_MASK_FLOAT) #define TYPE_MASK_BOOLEAN (1 << MT_BOOLEAN) #define TYPE_MASK_MAP (1 << MT_DIM) #define TYPE_MASK_ANY (~0) // ---------------------------------------------------------------- char* type_mask_to_desc(int type_mask); static inline int type_mask_from_mv(mv_t* pmv) { return 1 << pmv->type; } int type_mask_from_name(char* name); #endif // TYPE_DECL_H miller-5.6.2/c/containers/xvfuncs.c000066400000000000000000000365371354153536500172670ustar00rootroot00000000000000#include "../lib/mlr_arch.h" #include "../lib/string_builder.h" #include "../lib/free_flags.h" #include "../containers/xvfuncs.h" // ---------------------------------------------------------------- boxed_xval_t b_xx_haskey_xfunc(boxed_xval_t* pmapval, boxed_xval_t* pkeyval) { boxed_xval_t rv; if (pmapval->xval.is_terminal) { rv = box_ephemeral_val(mv_from_bool(FALSE)); } else if (!pkeyval->xval.is_terminal) { rv = box_ephemeral_val(mv_from_bool(FALSE)); } else { rv = box_ephemeral_val( mv_from_bool( mlhmmv_level_has_key(pmapval->xval.pnext_level, &pkeyval->xval.terminal_mlrval) ) ); } if (pmapval->is_ephemeral) mlhmmv_xvalue_free(&pmapval->xval); if (pkeyval->is_ephemeral) mlhmmv_xvalue_free(&pkeyval->xval); return rv; } // ---------------------------------------------------------------- boxed_xval_t i_x_length_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv; if (pbxval1->xval.is_terminal) { rv = box_ephemeral_val( mv_from_int(1) ); } else { rv = box_ephemeral_val( mv_from_int( pbxval1->xval.pnext_level->num_occupied ) ); } if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } // ---------------------------------------------------------------- static int depth_aux(mlhmmv_xvalue_t* pxval) { if (pxval->is_terminal) { return 0; } else { int max = 0; for (mlhmmv_level_entry_t* pe = pxval->pnext_level->phead; pe != NULL; pe = pe->pnext) { int curr = depth_aux(&pe->level_xvalue); max = (curr > max) ? curr : max; } return 1 + max; } } boxed_xval_t i_x_depth_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = box_ephemeral_val( mv_from_int( depth_aux(&pbxval1->xval) ) ); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } // ---------------------------------------------------------------- static int leafcount_aux(mlhmmv_xvalue_t* pxval) { if (pxval->is_terminal) { return 1; } else { int sum = 0; for (mlhmmv_level_entry_t* pe = pxval->pnext_level->phead; pe != NULL; pe = pe->pnext) { sum += leafcount_aux(&pe->level_xvalue); } return sum; } } boxed_xval_t i_x_leafcount_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = box_ephemeral_val( mv_from_int( leafcount_aux(&pbxval1->xval) ) ); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } // ---------------------------------------------------------------- boxed_xval_t variadic_mapsum_xfunc(boxed_xval_t* pbxvals, int nxvals) { // xxx to-do optmization: transfer arg 1 if it's ephemeral mlhmmv_xvalue_t sum = mlhmmv_xvalue_alloc_empty_map(); for (int i = 0; i < nxvals; i++) { if (pbxvals[i].xval.is_terminal) continue; mlhmmv_level_t* plevel = pbxvals[i].xval.pnext_level; for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { // xxx do refs/copies correctly mlhmmv_xvalue_t xval_copy = mlhmmv_xvalue_copy(&pe->level_xvalue); sllmve_t e = (sllmve_t) { .value = pe->level_key, .free_flags = 0, .pnext = NULL }; mlhmmv_level_put_xvalue(sum.pnext_level, &e, &xval_copy); } } boxed_xval_t rv = box_ephemeral_xval(sum); for (int i = 0; i < nxvals; i++) { if (pbxvals[i].is_ephemeral) mlhmmv_xvalue_free(&pbxvals[i].xval); } return rv; } // ---------------------------------------------------------------- boxed_xval_t variadic_mapdiff_xfunc(boxed_xval_t* pbxvals, int nxvals) { mlhmmv_xvalue_t diff = mlhmmv_xvalue_alloc_empty_map(); if (nxvals == 0) { return box_ephemeral_xval(diff); } // xxx to-do optmization: transfer arg 1 if it's ephemeral // xxx methodize int i = 0; if (!pbxvals[i].xval.is_terminal) { mlhmmv_level_t* plevel = pbxvals[i].xval.pnext_level; for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { // xxx do refs/copies correctly mlhmmv_xvalue_t xval_copy = mlhmmv_xvalue_copy(&pe->level_xvalue); sllmve_t e = (sllmve_t) { .value = pe->level_key, .free_flags = 0, .pnext = NULL }; mlhmmv_level_put_xvalue(diff.pnext_level, &e, &xval_copy); } if (pbxvals[i].is_ephemeral) mlhmmv_xvalue_free(&pbxvals[i].xval); } for (i = 1; i < nxvals; i++) { if (!pbxvals[i].xval.is_terminal) { mlhmmv_level_t* plevel = pbxvals[i].xval.pnext_level; for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { sllmve_t e = (sllmve_t) { .value = pe->level_key, .free_flags = 0, .pnext = NULL }; mlhmmv_level_remove(diff.pnext_level, &e); } } if (pbxvals[i].is_ephemeral) mlhmmv_xvalue_free(&pbxvals[i].xval); } return box_ephemeral_xval(diff); } // ---------------------------------------------------------------- // Precondition (validated before we're called): there is at least one argument // which is the map to be unkeyed. boxed_xval_t variadic_mapexcept_xfunc( boxed_xval_t* pbxvals, int nxvals) { MLR_INTERNAL_CODING_ERROR_IF(nxvals < 1); boxed_xval_t* pinbxval = &pbxvals[0]; boxed_xval_t outbxval = box_ephemeral_xval(mlhmmv_xvalue_copy(&pinbxval->xval)); if (pinbxval->xval.is_terminal) { // non-map return outbxval; } mlhmmv_level_t* poutlevel = outbxval.xval.pnext_level; for (int i = 1; i < nxvals; i++) { if (pbxvals[i].xval.is_terminal) { mv_t* pkey = &pbxvals[i].xval.terminal_mlrval; sllmve_t e = (sllmve_t) { .value = *pkey, .free_flags = 0, .pnext = NULL }; mlhmmv_level_remove(poutlevel, &e); } if (pbxvals[i].is_ephemeral) mlhmmv_xvalue_free(&pbxvals[i].xval); } return outbxval; } // ---------------------------------------------------------------- // Precondition (validated before we're called): there is at least one argument // which is the map to be unkeyed. boxed_xval_t variadic_mapselect_xfunc( boxed_xval_t* pbxvals, int nxvals) { MLR_INTERNAL_CODING_ERROR_IF(nxvals < 1); boxed_xval_t* pinbxval = &pbxvals[0]; boxed_xval_t outbxval = box_ephemeral_xval(mlhmmv_xvalue_alloc_empty_map()); if (pinbxval->xval.is_terminal) { // non-map return outbxval; } mlhmmv_level_t* pinlevel = pinbxval->xval.pnext_level; mlhmmv_level_t* poutlevel = outbxval.xval.pnext_level; for (int i = 1; i < nxvals; i++) { if (pbxvals[i].xval.is_terminal) { mv_t* pkey = &pbxvals[i].xval.terminal_mlrval; sllmv_t* pkeylist = sllmv_single_no_free(pkey); int unused = 0; mlhmmv_xvalue_t* pval = mlhmmv_level_look_up_and_ref_xvalue(pinlevel, pkeylist, &unused); if (pval != NULL) { mlhmmv_xvalue_t copyval = mlhmmv_xvalue_copy(pval); // mlhmmv_level_put_xvalue copies key not value mlhmmv_level_put_xvalue(poutlevel, pkeylist->phead, ©val); } sllmv_free(pkeylist); } if (pbxvals[i].is_ephemeral) mlhmmv_xvalue_free(&pbxvals[i].xval); } return outbxval; } // ---------------------------------------------------------------- // Precondition: the caller has ensured that both arguments are string-valued terminals. boxed_xval_t m_ss_splitnv_xfunc(boxed_xval_t* pstringval, boxed_xval_t* psepval) { mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); char* sep = psepval->xval.terminal_mlrval.u.strv; int seplen = strlen(sep); int i = 1; char* walker = input; char* piece; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { mv_t key = mv_from_int(i); mv_t val = mv_ref_type_infer_string_or_float_or_int(piece); mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); i++; } free(input); if (pstringval->is_ephemeral) mlhmmv_xvalue_free(&pstringval->xval); if (psepval->is_ephemeral) mlhmmv_xvalue_free(&psepval->xval); return box_ephemeral_xval(map); } // ---------------------------------------------------------------- // Precondition: the caller has ensured that both arguments are string-valued terminals. boxed_xval_t m_ss_splitnvx_xfunc(boxed_xval_t* pstringval, boxed_xval_t* psepval) { mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); char* sep = psepval->xval.terminal_mlrval.u.strv; int seplen = strlen(sep); int i = 1; char* walker = input; char* piece; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { mv_t key = mv_from_int(i); // xxx do not ref here mv_t val = mv_ref_type_infer_string(piece); // xxx make clear the copy/ref semantics for mlhmmv put with scalar value. // at the moment this does an mv_copy. mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); i++; } free(input); if (pstringval->is_ephemeral) mlhmmv_xvalue_free(&pstringval->xval); if (psepval->is_ephemeral) mlhmmv_xvalue_free(&psepval->xval); return box_ephemeral_xval(map); } // ---------------------------------------------------------------- // Precondition: the caller has ensured that all arguments are string-valued terminals. boxed_xval_t m_sss_splitkv_xfunc(boxed_xval_t* pstringval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval) { mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); char* listsep = plistsepval->xval.terminal_mlrval.u.strv; char* pairsep = ppairsepval->xval.terminal_mlrval.u.strv; int listseplen = strlen(listsep); int pairseplen = strlen(pairsep); int i = 1; char* walker = input; char* piece; while ((piece = mlr_strmsep(&walker, listsep, listseplen)) != NULL) { char* pair = piece; char* left = mlr_strmsep(&pair, pairsep, pairseplen); if (pair == NULL) { mv_t key = mv_from_int(i); mv_t val = mv_ref_type_infer_string_or_float_or_int(left); mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); } else { char* right = mlr_strmsep(&pair, pairsep, pairseplen); mv_t key = mv_from_string(left, NO_FREE); mv_t val = mv_ref_type_infer_string_or_float_or_int(right); mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); } i++; } free(input); if (pstringval->is_ephemeral) mlhmmv_xvalue_free(&pstringval->xval); if (ppairsepval->is_ephemeral) mlhmmv_xvalue_free(&ppairsepval->xval); if (plistsepval->is_ephemeral) mlhmmv_xvalue_free(&plistsepval->xval); return box_ephemeral_xval(map); } // ---------------------------------------------------------------- // Precondition: the caller has ensured that all arguments are string-valued terminals. boxed_xval_t m_sss_splitkvx_xfunc(boxed_xval_t* pstringval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval) { mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); char* listsep = plistsepval->xval.terminal_mlrval.u.strv; char* pairsep = ppairsepval->xval.terminal_mlrval.u.strv; int listseplen = strlen(listsep); int pairseplen = strlen(pairsep); int i = 1; char* walker = input; char* piece; while ((piece = mlr_strmsep(&walker, listsep, listseplen)) != NULL) { char* pair = piece; char* left = mlr_strmsep(&pair, pairsep, pairseplen); if (pair == NULL) { mv_t key = mv_from_int(i); mv_t val = mv_ref_type_infer_string(left); mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); } else { char* right = mlr_strmsep(&pair, pairsep, pairseplen); mv_t key = mv_from_string(left, NO_FREE); mv_t val = mv_ref_type_infer_string(right); mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); } i++; } free(input); if (pstringval->is_ephemeral) mlhmmv_xvalue_free(&pstringval->xval); if (ppairsepval->is_ephemeral) mlhmmv_xvalue_free(&ppairsepval->xval); if (plistsepval->is_ephemeral) mlhmmv_xvalue_free(&plistsepval->xval); return box_ephemeral_xval(map); } // ---------------------------------------------------------------- #define SB_JOIN_ALLOC_SIZE 128 // ---------------------------------------------------------------- // Precondition: the caller has ensured that the separator is a string-valued terminal. boxed_xval_t s_ms_joink_xfunc(boxed_xval_t* pmapval, boxed_xval_t* psepval) { if (pmapval->xval.is_terminal) { return box_ephemeral_val(mv_absent()); } string_builder_t* psb = sb_alloc(SB_JOIN_ALLOC_SIZE); for (mlhmmv_level_entry_t* pentry = pmapval->xval.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { // The string_builder object will copy the string so we can point into source string space, // without a copy here, when possible. char free_flags = 0; char* sval = mv_maybe_alloc_format_val(&pentry->level_key, &free_flags); sb_append_string(psb, sval); if (free_flags) free(sval); if (pentry->pnext != NULL) { sb_append_string(psb, psepval->xval.terminal_mlrval.u.strv); } } char* sretval = sb_finish(psb); sb_free(psb); if (pmapval->is_ephemeral) mlhmmv_xvalue_free(&pmapval->xval); if (psepval->is_ephemeral) mlhmmv_xvalue_free(&psepval->xval); return box_ephemeral_val( mv_from_string(sretval, FREE_ENTRY_VALUE) ); } // ---------------------------------------------------------------- // Precondition: the caller has ensured that the separator is a string-valued terminal. boxed_xval_t s_ms_joinv_xfunc(boxed_xval_t* pmapval, boxed_xval_t* psepval) { if (pmapval->xval.is_terminal) { return box_ephemeral_val(mv_absent()); } string_builder_t* psb = sb_alloc(SB_JOIN_ALLOC_SIZE); for (mlhmmv_level_entry_t* pentry = pmapval->xval.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { if (pentry->level_xvalue.is_terminal) { // The string_builder object will copy the string so we can point into source string space, // without a copy here, when possible. char free_flags = 0; char* sval = mv_maybe_alloc_format_val(&pentry->level_xvalue.terminal_mlrval, &free_flags); sb_append_string(psb, sval); if (free_flags) free(sval); if (pentry->pnext != NULL) { sb_append_string(psb, psepval->xval.terminal_mlrval.u.strv); } } } char* sretval = sb_finish(psb); sb_free(psb); if (pmapval->is_ephemeral) mlhmmv_xvalue_free(&pmapval->xval); if (psepval->is_ephemeral) mlhmmv_xvalue_free(&psepval->xval); return box_ephemeral_val( mv_from_string(sretval, FREE_ENTRY_VALUE) ); } // ---------------------------------------------------------------- // Precondition: the caller has ensured that the separators are string-valued terminals. boxed_xval_t s_mss_joinkv_xfunc(boxed_xval_t* pmapval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval) { if (pmapval->xval.is_terminal) { return box_ephemeral_val(mv_absent()); } string_builder_t* psb = sb_alloc(SB_JOIN_ALLOC_SIZE); for (mlhmmv_level_entry_t* pentry = pmapval->xval.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { if (pentry->level_xvalue.is_terminal) { // The string_builder object will copy the string so we can point into source string space, // without a copy here, when possible. char kfree_flags = 0; char* skval = mv_maybe_alloc_format_val(&pentry->level_key, &kfree_flags); sb_append_string(psb, skval); if (kfree_flags) free(skval); sb_append_string(psb, ppairsepval->xval.terminal_mlrval.u.strv); char vfree_flags = 0; char* svval = mv_maybe_alloc_format_val(&pentry->level_xvalue.terminal_mlrval, &vfree_flags); sb_append_string(psb, svval); if (vfree_flags) free(svval); if (pentry->pnext != NULL) { sb_append_string(psb, plistsepval->xval.terminal_mlrval.u.strv); } } } char* sretval = sb_finish(psb); sb_free(psb); if (pmapval->is_ephemeral) mlhmmv_xvalue_free(&pmapval->xval); if (ppairsepval->is_ephemeral) mlhmmv_xvalue_free(&ppairsepval->xval); if (plistsepval->is_ephemeral) mlhmmv_xvalue_free(&plistsepval->xval); return box_ephemeral_val( mv_from_string(sretval, FREE_ENTRY_VALUE) ); } miller-5.6.2/c/containers/xvfuncs.h000066400000000000000000000237501354153536500172650ustar00rootroot00000000000000#ifndef XVFUNCS_H #define XVFUNCS_H // ================================================================ // Functions on extended values, namely, scalars and maps. // // NOTE ON EPHEMERALITY OF MAPS: // // Most functions here free their inputs. E.g. for string concatenation, the // output which is returned is the concatenation of the two inputs which are // freed. This is true for functions on scalars as well as functions on maps // (the latter in this header file). // // However, maps are treated differently from scalars in that some maps are // referenced, rather than copied, within the concrete syntax tree. E.g. in // 'mapsum({3:4},@v)', the map literal {3:4} is ephemeral to the expression and // must be freed during evaluation, but the @v part is referenced to the @v data // structure and is only copied on write. The boxed_xval_t's is_ephemeral flag // tracks the difference between the two cases. // ================================================================ #include "../lib/mlrutil.h" #include "../containers/mlhmmv.h" #include "../containers/boxed_xval.h" // ---------------------------------------------------------------- typedef boxed_xval_t xv_variadic_func_t( boxed_xval_t* pbxvals, int nxvals); typedef boxed_xval_t xv_zary_func_t(); typedef boxed_xval_t xv_unary_func_t( boxed_xval_t* pbxval1); typedef boxed_xval_t xv_binary_func_t( boxed_xval_t* pbxval1, boxed_xval_t* pbxval2); typedef boxed_xval_t xv_ternary_func_t( boxed_xval_t* pbxval1, boxed_xval_t* pbxval2, boxed_xval_t* pbxval3); // ---------------------------------------------------------------- // Most functions here free their inputs. E.g. for string concatenation, the // output which is returned is the concatenation of the two inputs which are // freed. For another example, is_string frees its input and returns the boolean // value of the result. These functions, by contrast, only return a boolean for // the outcome of the test but do not free the inputs. The intended usage is for // type-assertion checks. E.g. in '$b = asserting_string($a)', if $a is a // string it is assigned to $b, else an error is thrown. static inline boxed_xval_t b_x_is_present_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( !pbxval1->xval.is_terminal || mv_is_present(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_absent_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_absent(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_map_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( !pbxval1->xval.is_terminal ) ); } static inline boxed_xval_t b_x_is_not_map_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal ) ); } static inline boxed_xval_t b_x_is_numeric_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_numeric(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_int_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_int(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_float_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_float(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_boolean_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_boolean(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_string_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_string(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_null_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_null(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_not_null_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( !(pbxval1->xval.is_terminal && mv_is_null(&pbxval1->xval.terminal_mlrval)) ) ); } static inline boxed_xval_t b_x_is_empty_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( pbxval1->xval.is_terminal && mv_is_empty(&pbxval1->xval.terminal_mlrval) ) ); } static inline boxed_xval_t b_x_is_not_empty_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( !(pbxval1->xval.is_terminal && mv_is_empty(&pbxval1->xval.terminal_mlrval)) ) ); } static inline boxed_xval_t b_x_is_empty_map_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( !pbxval1->xval.is_terminal && pbxval1->xval.pnext_level->num_occupied == 0 ) ); } static inline boxed_xval_t b_x_is_nonempty_map_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_bool( !pbxval1->xval.is_terminal && pbxval1->xval.pnext_level->num_occupied != 0 ) ); } static inline boxed_xval_t s_x_typeof_no_free_xfunc(boxed_xval_t* pbxval1) { return box_ephemeral_val( mv_from_string( mlhmmv_xvalue_describe_type_simple(&pbxval1->xval), NO_FREE ) ); } // ---------------------------------------------------------------- static inline boxed_xval_t b_x_is_present_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_present_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_absent_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_absent_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_map_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_map_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_not_map_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_not_map_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_numeric_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_numeric_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_int_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_int_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_float_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_float_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_boolean_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_boolean_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_string_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_string_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_null_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_null_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_not_null_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_not_null_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_empty_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_empty_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_not_empty_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_not_empty_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_empty_map_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_empty_map_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t b_x_is_nonempty_map_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = b_x_is_nonempty_map_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } static inline boxed_xval_t s_x_typeof_xfunc(boxed_xval_t* pbxval1) { boxed_xval_t rv = s_x_typeof_no_free_xfunc(pbxval1); if (pbxval1->is_ephemeral) mlhmmv_xvalue_free(&pbxval1->xval); return rv; } // ---------------------------------------------------------------- boxed_xval_t b_xx_haskey_xfunc( boxed_xval_t* pmapval, boxed_xval_t* pkeyval); boxed_xval_t i_x_length_xfunc( boxed_xval_t* pbxval1); boxed_xval_t i_x_depth_xfunc( boxed_xval_t* pbxval1); boxed_xval_t i_x_leafcount_xfunc( boxed_xval_t* pbxval1); boxed_xval_t variadic_mapsum_xfunc( boxed_xval_t* pbxvals, int nxvals); boxed_xval_t variadic_mapdiff_xfunc( boxed_xval_t* pbxvals, int nxvals); boxed_xval_t variadic_mapexcept_xfunc( boxed_xval_t* pbxvals, int nxvals); boxed_xval_t variadic_mapselect_xfunc( boxed_xval_t* pbxvals, int nxvals); boxed_xval_t m_ss_splitnv_xfunc( boxed_xval_t* pstringval, boxed_xval_t* psepval); boxed_xval_t m_ss_splitnvx_xfunc( boxed_xval_t* pstringval, boxed_xval_t* psepval); boxed_xval_t m_sss_splitkv_xfunc( boxed_xval_t* pstringval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval); boxed_xval_t m_sss_splitkvx_xfunc( boxed_xval_t* pstringval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval); boxed_xval_t s_ms_joink_xfunc( boxed_xval_t* pmapval, boxed_xval_t* psepval); boxed_xval_t s_ms_joinv_xfunc( boxed_xval_t* pmapval, boxed_xval_t* psepval); boxed_xval_t s_mss_joinkv_xfunc( boxed_xval_t* pmapval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval); #endif // XVFUNCS_H miller-5.6.2/c/csv-rfc.txt000066400000000000000000000056101354153536500153520ustar00rootroot00000000000000================================================================ Offlineable (subway-tunnelable) excerpt from https://tools.ietf.org/html/rfc4180 ================================================================ Definition of the CSV Format While there are various specifications and implementations for the CSV format (for ex. [4], [5], [6] and [7]), there is no formal specification in existence, which allows for a wide variety of interpretations of CSV files. This section documents the format that seems to be followed by most implementations: 1. Each record is located on a separate line, delimited by a line break (CRLF). For example: aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF 2. The last record in the file may or may not have an ending line break. For example: aaa,bbb,ccc CRLF zzz,yyy,xxx 3. There maybe an optional header line appearing as the first line of the file with the same format as normal record lines. This header will contain names corresponding to the fields in the file and should contain the same number of fields as the records in the rest of the file (the presence or absence of the header line should be indicated via the optional "header" parameter of this MIME type). For example: field_name,field_name,field_name CRLF aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF 4. Within the header and each record, there may be one or more fields, separated by commas. Each line should contain the same number of fields throughout the file. Spaces are considered part of a field and should not be ignored. The last field in the record must not be followed by a comma. For example: aaa,bbb,ccc 5. Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then double quotes may not appear inside the fields. For example: "aaa","bbb","ccc" CRLF zzz,yyy,xxx 6. Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes. For example: "aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx 7. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote. For example: "aaa","b""bb","ccc" The ABNF grammar [2] appears as follows: file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escaped) escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE non-escaped = *TEXTDATA COMMA = %x2C CR = %x0D ;as per section 6.1 of RFC 2234 [2] DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2] LF = %x0A ;as per section 6.1 of RFC 2234 [2] CRLF = CR LF ;as per section 6.1 of RFC 2234 [2] TEXTDATA = %x20-21 / %x23-2B / %x2D-7E miller-5.6.2/c/draft-release-notes.md000066400000000000000000000042131354153536500174320ustar00rootroot00000000000000# Title here ## Features: * The new [**system DSL function**](http://johnkerl.org/miller/doc/reference-dsl.html#system) allows you to run arbitrary shell commands and store them in field values. Some example usages are documented [**here**](http://johnkerl.org/miller/doc/data-sharing.html#Running_shell_commands). * There is now support for [**ASV and USV file formats**](http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/ASV/USV/etc.). * The new [**format-values**](http://johnkerl.org/miller/doc/reference-verbs.html#format-values) verb allows you to apply numerical formatting across all record values. ## Documentation: * The new [**DKVP I/O in Python**](http://johnkerl.org/miller/doc/data-sharing.html#DKVP_I/O_in_Python) sample code now works for Python 2 as well as Python 3. * There is a new cookbook entry on [**doing multiple joins**](http://johnkerl.org/miller/doc/cookbook.html#Doing_multiple_joins). ## Bugfixes: * The [**toupper**](http://johnkerl.org/miller/doc/reference-dsl.html#toupper), [**tolower**](http://johnkerl.org/miller/doc/reference-dsl.html#tolower), and [**capitalize**](http://johnkerl.org/miller/doc/reference-dsl.html#capitalize) DSL functions are now UTF-8 aware, thanks to @sheredom's marvelous https://github.com/sheredom/utf8.h. The [**internationalization page**]((http://johnkerl.org/miller/doc/internationalization.html) has also been expanded. * https://github.com/johnkerl/miller/issues/250 fixes a bug using [**in-place mode**](https://johnkerl.org/miller/doc/reference.html#In-place_mode) in conjunction with verbs (such as [**rename**](http://johnkerl.org/miller/doc/reference-dsl.html#rename) or [**sort**](http://johnkerl.org/miller/doc/reference-dsl.html#sort)) which take field-name lists as arguments. * https://github.com/johnkerl/miller/issues/253 fixes a bug in the [**label**](http://johnkerl.org/miller/doc/reference-verbs.html#label) when one or more names are common between old and new. * https://github.com/johnkerl/miller/issues/251 fixes a corner-case bug when (a) input is CSV; (b) the last field ends with a comma and no newline; (c) input is from standard input and/or --no-mmap is supplied. miller-5.6.2/c/dsl/000077500000000000000000000000001354153536500140265ustar00rootroot00000000000000miller-5.6.2/c/dsl/Makefile.am000066400000000000000000000027601354153536500160670ustar00rootroot00000000000000noinst_LTLIBRARIES= libdsl.la libdsl_la_SOURCES= \ context_flags.h \ function_manager.c \ function_manager.h \ keylist_evaluators.c \ keylist_evaluators.h \ mlr_dsl_ast.c \ mlr_dsl_ast.h \ mlr_dsl_blocked_ast.c \ mlr_dsl_blocked_ast.h \ mlr_dsl_cst.c \ mlr_dsl_cst.h \ mlr_dsl_cst_condish_statements.c \ mlr_dsl_cst_for_map_statements.c \ mlr_dsl_cst_for_srec_statements.c \ mlr_dsl_cst_func_subr.c \ mlr_dsl_cst_keywords.c \ mlr_dsl_cst_loop_control_statements.c \ mlr_dsl_cst_map_assignment_statements.c \ mlr_dsl_cst_output_statements.c \ mlr_dsl_cst_return_statements.c \ mlr_dsl_cst_scalar_assignment_statements.c \ mlr_dsl_cst_statements.c \ mlr_dsl_cst_triple_for_statements.c \ mlr_dsl_cst_unset_statements.c \ mlr_dsl_stack_allocate.c \ return_state.h \ rval_evaluator.h \ rval_evaluators.h \ rval_expr_evaluators.c \ rval_func_evaluators.c \ rval_list_evaluators.c \ rxval_evaluator.h \ rxval_evaluators.h \ rxval_expr_evaluators.c \ rxval_func_evaluators.c \ type_inference.h \ variables.h libdsl_la_LIBADD= ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la # TODO: replace the interesting content with unit tests; jettison the rest # TODO: Does not build #noinst_PROGRAMS= evl #evl_SOURCES= rval_evaluators.c #evl_LDADD= libdsl.la ../containers/libcontainers.la ../lib/libmlr.la #evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/dsl/Makefile.in000066400000000000000000000524061354153536500161020ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/dsl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libdsl_la_DEPENDENCIES = ../lib/libmlr.la ../cli/libcli.la \ ../input/libinput.la am_libdsl_la_OBJECTS = function_manager.lo keylist_evaluators.lo \ mlr_dsl_ast.lo mlr_dsl_blocked_ast.lo mlr_dsl_cst.lo \ mlr_dsl_cst_condish_statements.lo \ mlr_dsl_cst_for_map_statements.lo \ mlr_dsl_cst_for_srec_statements.lo mlr_dsl_cst_func_subr.lo \ mlr_dsl_cst_keywords.lo mlr_dsl_cst_loop_control_statements.lo \ mlr_dsl_cst_map_assignment_statements.lo \ mlr_dsl_cst_output_statements.lo \ mlr_dsl_cst_return_statements.lo \ mlr_dsl_cst_scalar_assignment_statements.lo \ mlr_dsl_cst_statements.lo mlr_dsl_cst_triple_for_statements.lo \ mlr_dsl_cst_unset_statements.lo mlr_dsl_stack_allocate.lo \ rval_expr_evaluators.lo rval_func_evaluators.lo \ rval_list_evaluators.lo rxval_expr_evaluators.lo \ rxval_func_evaluators.lo libdsl_la_OBJECTS = $(am_libdsl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libdsl_la_SOURCES) DIST_SOURCES = $(libdsl_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libdsl.la libdsl_la_SOURCES = \ context_flags.h \ function_manager.c \ function_manager.h \ keylist_evaluators.c \ keylist_evaluators.h \ mlr_dsl_ast.c \ mlr_dsl_ast.h \ mlr_dsl_blocked_ast.c \ mlr_dsl_blocked_ast.h \ mlr_dsl_cst.c \ mlr_dsl_cst.h \ mlr_dsl_cst_condish_statements.c \ mlr_dsl_cst_for_map_statements.c \ mlr_dsl_cst_for_srec_statements.c \ mlr_dsl_cst_func_subr.c \ mlr_dsl_cst_keywords.c \ mlr_dsl_cst_loop_control_statements.c \ mlr_dsl_cst_map_assignment_statements.c \ mlr_dsl_cst_output_statements.c \ mlr_dsl_cst_return_statements.c \ mlr_dsl_cst_scalar_assignment_statements.c \ mlr_dsl_cst_statements.c \ mlr_dsl_cst_triple_for_statements.c \ mlr_dsl_cst_unset_statements.c \ mlr_dsl_stack_allocate.c \ return_state.h \ rval_evaluator.h \ rval_evaluators.h \ rval_expr_evaluators.c \ rval_func_evaluators.c \ rval_list_evaluators.c \ rxval_evaluator.h \ rxval_evaluators.h \ rxval_expr_evaluators.c \ rxval_func_evaluators.c \ type_inference.h \ variables.h libdsl_la_LIBADD = ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la # TODO: replace the interesting content with unit tests; jettison the rest # TODO: Does not build #noinst_PROGRAMS= evl #evl_SOURCES= rval_evaluators.c #evl_LDADD= libdsl.la ../containers/libcontainers.la ../lib/libmlr.la #evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/dsl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/dsl/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdsl.la: $(libdsl_la_OBJECTS) $(libdsl_la_DEPENDENCIES) $(EXTRA_libdsl_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libdsl_la_OBJECTS) $(libdsl_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/function_manager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keylist_evaluators.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_ast.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_blocked_ast.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_condish_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_for_map_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_for_srec_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_func_subr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_keywords.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_loop_control_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_map_assignment_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_output_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_return_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_scalar_assignment_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_triple_for_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_unset_statements.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_stack_allocate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rval_expr_evaluators.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rval_func_evaluators.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rval_list_evaluators.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rxval_expr_evaluators.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rxval_func_evaluators.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/dsl/context_flags.h000066400000000000000000000021111354153536500170320ustar00rootroot00000000000000#ifndef CONTEXT_FLAGS_H #define CONTEXT_FLAGS_H // The grammar permits certain statements which are syntactically invalid, (a) because it's awkward to handle // there, and (b) because we get far better control over error messages here (vs. 'syntax error'). // The following flags are used as the CST is built from the AST for CST-build-time validation. #define IN_BREAKABLE 0x00000200 // break/continue are only OK (recursively) inside for/while/do-while #define IN_BEGIN_OR_END 0x00000400 // $stuff is not OK (recursively) inside begin/end #define IN_FUNC_DEF 0x00000800 // locals only valid in func/subr; no srec assignments in functions #define IN_SUBR_DEF 0x00001000 // locals only valid in func/subr #define IN_MLR_FILTER 0x00002000 // Anywhere within mlr filter, the 'filter' keyword is invalid #define IN_MLR_FINAL_FILTER 0x00004000 // mlr filter's final statement must be a bare boolean #define IN_TRIPLE_FOR_CONTINUE 0x00004000 // Final statement of triple-for continuation statements must be a bare boolean #endif // CONTEXT_FLAGS_H miller-5.6.2/c/dsl/function_manager.c000066400000000000000000002356451354153536500175300ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "dsl/function_manager.h" #include "dsl/context_flags.h" #include "dsl/rval_evaluators.h" #include "dsl/rxval_evaluators.h" // ---------------------------------------------------------------- typedef enum _func_class_t { FUNC_CLASS_ARITHMETIC, FUNC_CLASS_MATH, FUNC_CLASS_BOOLEAN, FUNC_CLASS_STRING, FUNC_CLASS_CONVERSION, FUNC_CLASS_TYPING, FUNC_CLASS_MAPS, FUNC_CLASS_TIME } func_class_t; typedef enum _arity_check_t { ARITY_CHECK_PASS, ARITY_CHECK_FAIL, ARITY_CHECK_NO_SUCH } arity_check_t; typedef struct _function_lookup_t { func_class_t function_class; char* function_name; int arity; // for variadic, this is minimum arity int variadic; char* usage_string; } function_lookup_t; // This is shared between all instances static function_lookup_t FUNCTION_LOOKUP_TABLE[]; // ---------------------------------------------------------------- // See also comments in rval_evaluators.h // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static void fmgr_check_arity_with_report(fmgr_t* pfmgr, char* function_name, int user_provided_arity, int* pvariadic); static rval_evaluator_t* fmgr_alloc_evaluator_from_variadic_func_name( char* function_name, rval_evaluator_t** pargs, int nargs); static rval_evaluator_t* fmgr_alloc_evaluator_from_zary_func_name( char* function_name); static rval_evaluator_t* fmgr_alloc_evaluator_from_unary_func_name( char* function_name, rval_evaluator_t* parg1); static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_func_name( char* function_name, rval_evaluator_t* parg1, rval_evaluator_t* parg2); static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_regex_arg2_func_name( char* function_name, rval_evaluator_t* parg1, char* regex_string, int ignore_case); static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_func_name( char* function_name, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name( char* function_name, rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // For rval functions, we pass rval_evaluator_t* (CST); for rxval functions, we pass // mlr_dsl_ast_node_t* (AST). It's easy to construct the former from the latter, of // course. The difference is that we look up map-enabled functions by name first, // then non-map-enabled functions by name second. // // * AST nodes are passed to try to look up a map-enabled function given a function name. // * If those exist, they construct CST structures and return. // * But if not, we look up a non-map-enabled function for the same function name. // * If that doesn't exist either, then it's a fatal error. So we go ahead and // construct an rval_evaluator_t* CST structure from the AST node simply to // save keystrokes, passing that to the function-lookup routines. // // It would simpler to always construct CST structures before looking up // function names, but the only problem is that it's hard to unconstruct CST // structures in case the name lookup fails. (The function-manager // as-yet-unresolved-name list points into them, whenever function arguments // themselves include function calls). Namely, the following scenario is to be // avoided: // // * Construct rxval_evaluator_t* CST structure. // * Look up map-enabled function with a given name. // * That doesn't exist. // * Now the rxval_evaluator_t* can't be torn down since the fmgr points into it. static rxval_evaluator_t* fmgr_alloc_xevaluator_from_variadic_func_name( char* function_name, sllv_t* parg_nodes, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); static rxval_evaluator_t* fmgr_alloc_xevaluator_from_unary_func_name( char* function_name, mlr_dsl_ast_node_t* parg1, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); static rxval_evaluator_t* fmgr_alloc_xevaluator_from_binary_func_name( char* function_name, mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* pargs2, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); static rxval_evaluator_t* fmgr_alloc_xevaluator_from_ternary_func_name( char* function_name, mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* pargs2, mlr_dsl_ast_node_t* pargs3, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static void resolve_func_callsite(fmgr_t* pfmgr, rval_evaluator_t* pev); static void resolve_func_xcallsite(fmgr_t* pfmgr, rxval_evaluator_t* pxev); static rxval_evaluator_t* fmgr_alloc_xeval_wrapping_eval(rval_evaluator_t* pevaluator); static rval_evaluator_t* fmgr_alloc_eval_wrapping_xeval(rxval_evaluator_t* pxevaluator); // ---------------------------------------------------------------- fmgr_t* fmgr_alloc() { fmgr_t* pfmgr = mlr_malloc_or_die(sizeof(fmgr_t)); pfmgr->function_lookup_table = &FUNCTION_LOOKUP_TABLE[0]; pfmgr->built_in_function_names = hss_alloc(); for (int i = 0; ; i++) { function_lookup_t* plookup = &pfmgr->function_lookup_table[i]; char* fname = plookup->function_name; if (fname == NULL) break; hss_add(pfmgr->built_in_function_names, fname); } pfmgr->pudf_names_to_defsite_states = lhmsv_alloc(); pfmgr->pfunc_callsite_evaluators_to_resolve = sllv_alloc(); pfmgr->pfunc_callsite_xevaluators_to_resolve = sllv_alloc(); return pfmgr; } // ---------------------------------------------------------------- void fmgr_free(fmgr_t* pfmgr, context_t* pctx) { if (pfmgr == NULL) return; for (lhmsve_t* pe = pfmgr->pudf_names_to_defsite_states->phead; pe != NULL; pe = pe->pnext) { udf_defsite_state_t * pdefsite_state = pe->pvvalue; free(pdefsite_state->name); pdefsite_state->pfree_func(pdefsite_state->pvstate, pctx); free(pdefsite_state); } lhmsv_free(pfmgr->pudf_names_to_defsite_states); sllv_free(pfmgr->pfunc_callsite_evaluators_to_resolve); sllv_free(pfmgr->pfunc_callsite_xevaluators_to_resolve); hss_free(pfmgr->built_in_function_names); free(pfmgr); } // ---------------------------------------------------------------- void fmgr_install_udf(fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state) { if (hss_has(pfmgr->built_in_function_names, pdefsite_state->name)) { fprintf(stderr, "%s: function named \"%s\" must not override a built-in function of the same name.\n", MLR_GLOBALS.bargv0, pdefsite_state->name); exit(1); } if (lhmsv_get(pfmgr->pudf_names_to_defsite_states, pdefsite_state->name)) { fprintf(stderr, "%s: function named \"%s\" has already been defined.\n", MLR_GLOBALS.bargv0, pdefsite_state->name); exit(1); } lhmsv_put(pfmgr->pudf_names_to_defsite_states, mlr_strdup_or_die(pdefsite_state->name), pdefsite_state, FREE_ENTRY_KEY); } // ================================================================ static function_lookup_t FUNCTION_LOOKUP_TABLE[] = { {FUNC_CLASS_ARITHMETIC, "+", 2,0, "Addition."}, {FUNC_CLASS_ARITHMETIC, "+", 1,0, "Unary plus."}, {FUNC_CLASS_ARITHMETIC, "-", 2,0, "Subtraction."}, {FUNC_CLASS_ARITHMETIC, "-", 1,0, "Unary minus."}, {FUNC_CLASS_ARITHMETIC, "*", 2,0, "Multiplication."}, {FUNC_CLASS_ARITHMETIC, "/", 2,0, "Division."}, {FUNC_CLASS_ARITHMETIC, "//", 2,0, "Integer division: rounds to negative (pythonic)."}, {FUNC_CLASS_ARITHMETIC, ".+", 2,0, "Addition, with integer-to-integer overflow"}, {FUNC_CLASS_ARITHMETIC, ".+", 1,0, "Unary plus, with integer-to-integer overflow."}, {FUNC_CLASS_ARITHMETIC, ".-", 2,0, "Subtraction, with integer-to-integer overflow."}, {FUNC_CLASS_ARITHMETIC, ".-", 1,0, "Unary minus, with integer-to-integer overflow."}, {FUNC_CLASS_ARITHMETIC, ".*", 2,0, "Multiplication, with integer-to-integer overflow."}, {FUNC_CLASS_ARITHMETIC, "./", 2,0, "Division, with integer-to-integer overflow."}, {FUNC_CLASS_ARITHMETIC, ".//", 2,0, "Integer division: rounds to negative (pythonic), with integer-to-integer overflow."}, {FUNC_CLASS_ARITHMETIC, "%", 2,0, "Remainder; never negative-valued (pythonic)."}, {FUNC_CLASS_ARITHMETIC, "**", 2,0, "Exponentiation; same as pow, but as an infix\noperator."}, {FUNC_CLASS_ARITHMETIC, "|", 2,0, "Bitwise OR."}, {FUNC_CLASS_ARITHMETIC, "^", 2,0, "Bitwise XOR."}, {FUNC_CLASS_ARITHMETIC, "&", 2,0, "Bitwise AND."}, {FUNC_CLASS_ARITHMETIC, "~", 1,0, "Bitwise NOT. Beware '$y=~$x' since =~ is the\nregex-match operator: try '$y = ~$x'."}, {FUNC_CLASS_ARITHMETIC, "<<", 2,0, "Bitwise left-shift."}, {FUNC_CLASS_ARITHMETIC, ">>", 2,0, "Bitwise right-shift."}, {FUNC_CLASS_ARITHMETIC, "bitcount", 1,0, "Count of 1-bits"}, {FUNC_CLASS_BOOLEAN, "==", 2,0, "String/numeric equality. Mixing number and string\nresults in string compare."}, {FUNC_CLASS_BOOLEAN, "!=", 2,0, "String/numeric inequality. Mixing number and string\nresults in string compare."}, {FUNC_CLASS_BOOLEAN, "=~", 2,0, "String (left-hand side) matches regex (right-hand\n" "side), e.g. '$name =~ \"^a.*b$\"'."}, {FUNC_CLASS_BOOLEAN, "!=~", 2,0, "String (left-hand side) does not match regex\n" "(right-hand side), e.g. '$name !=~ \"^a.*b$\"'."}, {FUNC_CLASS_BOOLEAN, ">", 2,0, "String/numeric greater-than. Mixing number and string\n" "results in string compare."}, {FUNC_CLASS_BOOLEAN, ">=", 2,0, "String/numeric greater-than-or-equals. Mixing number\n" "and string results in string compare."}, {FUNC_CLASS_BOOLEAN, "<", 2,0, "String/numeric less-than. Mixing number and string\n" "results in string compare."}, {FUNC_CLASS_BOOLEAN, "<=", 2,0, "String/numeric less-than-or-equals. Mixing number\n" "and string results in string compare."}, {FUNC_CLASS_BOOLEAN, "&&", 2,0, "Logical AND."}, {FUNC_CLASS_BOOLEAN, "||", 2,0, "Logical OR."}, {FUNC_CLASS_BOOLEAN, "^^", 2,0, "Logical XOR."}, {FUNC_CLASS_BOOLEAN, "!", 1,0, "Logical negation."}, {FUNC_CLASS_BOOLEAN, "? :", 3,0, "Ternary operator."}, {FUNC_CLASS_STRING, ".", 2,0, "String concatenation."}, {FUNC_CLASS_STRING, "gsub", 3,0, "Example: '$name=gsub($name, \"old\", \"new\")'\n(replace all)."}, {FUNC_CLASS_STRING, "regextract", 2,0, "Example: '$name=regextract($name, \"[A-Z]{3}[0-9]{2}\")'\n."}, {FUNC_CLASS_STRING, "regextract_or_else", 3,0, "Example: '$name=regextract_or_else($name, \"[A-Z]{3}[0-9]{2}\", \"default\")'\n."}, {FUNC_CLASS_STRING, "strlen", 1,0, "String length."}, {FUNC_CLASS_STRING, "sub", 3,0, "Example: '$name=sub($name, \"old\", \"new\")'\n(replace once)."}, {FUNC_CLASS_STRING, "ssub", 3,0, "Like sub but does no regexing. No characters are special."}, {FUNC_CLASS_STRING, "substr", 3,0, "substr(s,m,n) gives substring of s from 0-up position m to n \n" "inclusive. Negative indices -len .. -1 alias to 0 .. len-1."}, {FUNC_CLASS_STRING, "tolower", 1,0, "Convert string to lowercase."}, {FUNC_CLASS_STRING, "toupper", 1,0, "Convert string to uppercase."}, {FUNC_CLASS_STRING, "capitalize", 1,0, "Convert string's first character to uppercase."}, {FUNC_CLASS_STRING, "lstrip", 1,0, "Strip leading whitespace from string."}, {FUNC_CLASS_STRING, "rstrip", 1,0, "Strip trailing whitespace from string."}, {FUNC_CLASS_STRING, "strip", 1,0, "Strip leading and trailing whitespace from string."}, {FUNC_CLASS_STRING, "collapse_whitespace", 1,0, "Strip repeated whitespace from string."}, {FUNC_CLASS_STRING, "clean_whitespace", 1,0, "Same as collapse_whitespace and strip."}, {FUNC_CLASS_STRING, "system", 1,0, "Run command string, yielding its stdout minus final carriage return."}, {FUNC_CLASS_MATH, "abs", 1,0, "Absolute value."}, {FUNC_CLASS_MATH, "acos", 1,0, "Inverse trigonometric cosine."}, {FUNC_CLASS_MATH, "acosh", 1,0, "Inverse hyperbolic cosine."}, {FUNC_CLASS_MATH, "asin", 1,0, "Inverse trigonometric sine."}, {FUNC_CLASS_MATH, "asinh", 1,0, "Inverse hyperbolic sine."}, {FUNC_CLASS_MATH, "atan", 1,0, "One-argument arctangent."}, {FUNC_CLASS_MATH, "atan2", 2,0, "Two-argument arctangent."}, {FUNC_CLASS_MATH, "atanh", 1,0, "Inverse hyperbolic tangent."}, {FUNC_CLASS_MATH, "cbrt", 1,0, "Cube root."}, {FUNC_CLASS_MATH, "ceil", 1,0, "Ceiling: nearest integer at or above."}, {FUNC_CLASS_MATH, "cos", 1,0, "Trigonometric cosine."}, {FUNC_CLASS_MATH, "cosh", 1,0, "Hyperbolic cosine."}, {FUNC_CLASS_MATH, "erf", 1,0, "Error function."}, {FUNC_CLASS_MATH, "erfc", 1,0, "Complementary error function."}, {FUNC_CLASS_MATH, "exp", 1,0, "Exponential function e**x."}, {FUNC_CLASS_MATH, "expm1", 1,0, "e**x - 1."}, {FUNC_CLASS_MATH, "floor", 1,0, "Floor: nearest integer at or below."}, // See also http://johnkerl.org/doc/randuv.pdf for more about urand() -> other distributions {FUNC_CLASS_MATH, "invqnorm", 1,0, "Inverse of normal cumulative distribution\n" "function. Note that invqorm(urand()) is normally distributed."}, {FUNC_CLASS_MATH, "log", 1,0, "Natural (base-e) logarithm."}, {FUNC_CLASS_MATH, "log10", 1,0, "Base-10 logarithm."}, {FUNC_CLASS_MATH, "log1p", 1,0, "log(1-x)."}, {FUNC_CLASS_MATH, "logifit", 3,0, "Given m and b from logistic regression, compute\nfit: $yhat=logifit($x,$m,$b)."}, {FUNC_CLASS_MATH, "madd", 3,0, "a + b mod m (integers)"}, {FUNC_CLASS_MATH, "max", 0,1, "max of n numbers; null loses"}, {FUNC_CLASS_MATH, "mexp", 3,0, "a ** b mod m (integers)"}, {FUNC_CLASS_MATH, "min", 0,1, "Min of n numbers; null loses"}, {FUNC_CLASS_MATH, "mmul", 3,0, "a * b mod m (integers)"}, {FUNC_CLASS_MATH, "msub", 3,0, "a - b mod m (integers)"}, {FUNC_CLASS_MATH, "pow", 2,0, "Exponentiation; same as **."}, {FUNC_CLASS_MATH, "qnorm", 1,0, "Normal cumulative distribution function."}, {FUNC_CLASS_MATH, "round", 1,0, "Round to nearest integer."}, {FUNC_CLASS_MATH, "roundm", 2,0, "Round to nearest multiple of m: roundm($x,$m) is\nthe same as round($x/$m)*$m"}, {FUNC_CLASS_MATH, "sgn", 1,0, "+1 for positive input, 0 for zero input, -1 for\nnegative input."}, {FUNC_CLASS_MATH, "sin", 1,0, "Trigonometric sine."}, {FUNC_CLASS_MATH, "sinh", 1,0, "Hyperbolic sine."}, {FUNC_CLASS_MATH, "sqrt", 1,0, "Square root."}, {FUNC_CLASS_MATH, "tan", 1,0, "Trigonometric tangent."}, {FUNC_CLASS_MATH, "tanh", 1,0, "Hyperbolic tangent."}, {FUNC_CLASS_MATH, "urand", 0,0, "Floating-point numbers uniformly distributed on the unit interval.\n" "Int-valued example: '$n=floor(20+urand()*11)'." }, {FUNC_CLASS_MATH, "urandrange", 2,0, "Floating-point numbers uniformly distributed on the interval [a, b)." }, {FUNC_CLASS_MATH, "urand32", 0,0, "Integer uniformly distributed 0 and 2**32-1\n" "inclusive." }, {FUNC_CLASS_MATH, "urandint", 2,0, "Integer uniformly distributed between inclusive\ninteger endpoints." }, {FUNC_CLASS_TIME, "dhms2fsec", 1,0, "Recovers floating-point seconds as in\n" "dhms2fsec(\"5d18h53m20.250000s\") = 500000.250000"}, {FUNC_CLASS_TIME, "dhms2sec", 1,0, "Recovers integer seconds as in\ndhms2sec(\"5d18h53m20s\") = 500000"}, {FUNC_CLASS_TIME, "fsec2dhms", 1,0, "Formats floating-point seconds as in\nfsec2dhms(500000.25) = \"5d18h53m20.250000s\""}, {FUNC_CLASS_TIME, "fsec2hms", 1,0, "Formats floating-point seconds as in\nfsec2hms(5000.25) = \"01:23:20.250000\""}, {FUNC_CLASS_TIME, "gmt2sec", 1,0, "Parses GMT timestamp as integer seconds since\nthe epoch."}, {FUNC_CLASS_TIME, "localtime2sec", 1,0, "Parses local timestamp as integer seconds since\n" "the epoch. Consults $TZ environment variable."}, {FUNC_CLASS_TIME, "hms2fsec", 1,0, "Recovers floating-point seconds as in\nhms2fsec(\"01:23:20.250000\") = 5000.250000"}, {FUNC_CLASS_TIME, "hms2sec", 1,0, "Recovers integer seconds as in\nhms2sec(\"01:23:20\") = 5000"}, {FUNC_CLASS_TIME, "sec2dhms", 1,0, "Formats integer seconds as in sec2dhms(500000)\n= \"5d18h53m20s\""}, {FUNC_CLASS_TIME, "sec2gmt", 1,0, "Formats seconds since epoch (integer part)\n" "as GMT timestamp, e.g. sec2gmt(1440768801.7) = \"2015-08-28T13:33:21Z\".\n" "Leaves non-numbers as-is."}, {FUNC_CLASS_TIME, "sec2gmt", 2,0, "Formats seconds since epoch as GMT timestamp with n\n" "decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = \"2015-08-28T13:33:21.7Z\".\n" "Leaves non-numbers as-is."}, {FUNC_CLASS_TIME, "sec2gmtdate", 1,0, "Formats seconds since epoch (integer part)\n" "as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = \"2015-08-28\".\n" "Leaves non-numbers as-is."}, {FUNC_CLASS_TIME, "sec2localtime", 1,0, "Formats seconds since epoch (integer part)\n" "as local timestamp, e.g. sec2localtime(1440768801.7) = \"2015-08-28T13:33:21Z\".\n" "Consults $TZ environment variable. Leaves non-numbers as-is."}, {FUNC_CLASS_TIME, "sec2localtime", 2,0, "Formats seconds since epoch as local timestamp with n\n" "decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = \"2015-08-28T13:33:21.7Z\".\n" "Consults $TZ environment variable. Leaves non-numbers as-is."}, {FUNC_CLASS_TIME, "sec2localdate", 1,0, "Formats seconds since epoch (integer part)\n" "as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = \"2015-08-28\".\n" "Consults $TZ environment variable. Leaves non-numbers as-is."}, {FUNC_CLASS_TIME, "sec2hms", 1,0, "Formats integer seconds as in\n" "sec2hms(5000) = \"01:23:20\""}, {FUNC_CLASS_TIME, "strftime", 2,0, "Formats seconds since the epoch as timestamp, e.g.\n" "strftime(1440768801.7,\"%Y-%m-%dT%H:%M:%SZ\") = \"2015-08-28T13:33:21Z\", and\n" "strftime(1440768801.7,\"%Y-%m-%dT%H:%M:%3SZ\") = \"2015-08-28T13:33:21.700Z\".\n" "Format strings are as in the C library (please see \"man strftime\" on your system),\n" "with the Miller-specific addition of \"%1S\" through \"%9S\" which format the seconds\n" "with 1 through 9 decimal places, respectively. (\"%S\" uses no decimal places.)\n" "See also strftime_local."}, {FUNC_CLASS_TIME, "strftime_local", 2,0, "Like strftime but consults the $TZ environment variable to get local time zone."}, {FUNC_CLASS_TIME, "strptime", 2,0, "Parses timestamp as floating-point seconds since the epoch,\n" "e.g. strptime(\"2015-08-28T13:33:21Z\",\"%Y-%m-%dT%H:%M:%SZ\") = 1440768801.000000,\n" "and strptime(\"2015-08-28T13:33:21.345Z\",\"%Y-%m-%dT%H:%M:%SZ\") = 1440768801.345000.\n" "See also strptime_local."}, {FUNC_CLASS_TIME, "strptime_local", 2,0, "Like strptime, but consults $TZ environment variable to find and use local timezone."}, {FUNC_CLASS_TIME, "systime", 0,0, "Floating-point seconds since the epoch,\n" "e.g. 1440768801.748936." }, {FUNC_CLASS_TYPING, "is_absent", 1,0, "False if field is present in input, false otherwise"}, {FUNC_CLASS_TYPING, "is_bool", 1,0, "True if field is present with boolean value. Synonymous with is_boolean."}, {FUNC_CLASS_TYPING, "is_boolean", 1,0, "True if field is present with boolean value. Synonymous with is_bool."}, {FUNC_CLASS_TYPING, "is_empty", 1,0, "True if field is present in input with empty string value, false otherwise."}, {FUNC_CLASS_TYPING, "is_empty_map", 1,0, "True if argument is a map which is empty."}, {FUNC_CLASS_TYPING, "is_float", 1,0, "True if field is present with value inferred to be float"}, {FUNC_CLASS_TYPING, "is_int", 1,0, "True if field is present with value inferred to be int "}, {FUNC_CLASS_TYPING, "is_map", 1,0, "True if argument is a map."}, {FUNC_CLASS_TYPING, "is_nonempty_map", 1,0, "True if argument is a map which is non-empty."}, {FUNC_CLASS_TYPING, "is_not_empty", 1,0, "False if field is present in input with empty value, true otherwise"}, {FUNC_CLASS_TYPING, "is_not_map", 1,0, "True if argument is not a map."}, {FUNC_CLASS_TYPING, "is_not_null", 1,0, "False if argument is null (empty or absent), true otherwise."}, {FUNC_CLASS_TYPING, "is_null", 1,0, "True if argument is null (empty or absent), false otherwise."}, {FUNC_CLASS_TYPING, "is_numeric", 1,0, "True if field is present with value inferred to be int or float"}, {FUNC_CLASS_TYPING, "is_present", 1,0, "True if field is present in input, false otherwise."}, {FUNC_CLASS_TYPING, "is_string", 1,0, "True if field is present with string (including empty-string) value"}, {FUNC_CLASS_TYPING, "asserting_absent", 1,0, "Returns argument if it is absent in the input data, else\n" "throws an error."}, {FUNC_CLASS_TYPING, "asserting_bool", 1,0, "Returns argument if it is present with boolean value, else\n" "throws an error."}, {FUNC_CLASS_TYPING, "asserting_boolean", 1,0, "Returns argument if it is present with boolean value, else\n" "throws an error."}, {FUNC_CLASS_TYPING, "asserting_empty", 1,0, "Returns argument if it is present in input with empty value,\n" "else throws an error."}, {FUNC_CLASS_TYPING, "asserting_empty_map", 1,0, "Returns argument if it is a map with empty value, else\n" "throws an error."}, {FUNC_CLASS_TYPING, "asserting_float", 1,0, "Returns argument if it is present with float value, else\n" "throws an error."}, {FUNC_CLASS_TYPING, "asserting_int", 1,0, "Returns argument if it is present with int value, else\n" "throws an error."}, {FUNC_CLASS_TYPING, "asserting_map", 1,0, "Returns argument if it is a map, else throws an error."}, {FUNC_CLASS_TYPING, "asserting_nonempty_map", 1,0, "Returns argument if it is a non-empty map, else throws\n" "an error."}, {FUNC_CLASS_TYPING, "asserting_not_empty", 1,0, "Returns argument if it is present in input with non-empty\n" "value, else throws an error."}, {FUNC_CLASS_TYPING, "asserting_not_map", 1,0, "Returns argument if it is not a map, else throws an error."}, {FUNC_CLASS_TYPING, "asserting_not_null", 1,0, "Returns argument if it is non-null (non-empty and non-absent),\n" "else throws an error."}, {FUNC_CLASS_TYPING, "asserting_null", 1,0, "Returns argument if it is null (empty or absent), else throws\n" "an error."}, {FUNC_CLASS_TYPING, "asserting_numeric", 1,0, "Returns argument if it is present with int or float value,\n" "else throws an error."}, {FUNC_CLASS_TYPING, "asserting_present", 1,0, "Returns argument if it is present in input, else throws\n" "an error."}, {FUNC_CLASS_TYPING, "asserting_string", 1,0, "Returns argument if it is present with string (including\n" "empty-string) value, else throws an error."}, {FUNC_CLASS_CONVERSION, "boolean", 1,0, "Convert int/float/bool/string to boolean."}, {FUNC_CLASS_CONVERSION, "float", 1,0, "Convert int/float/bool/string to float."}, {FUNC_CLASS_CONVERSION, "fmtnum", 2,0, "Convert int/float/bool to string using\n" "printf-style format string, e.g. '$s = fmtnum($n, \"%06lld\")'. WARNING: Miller numbers\n" "are all long long or double. If you use formats like %d or %f, behavior is undefined."}, {FUNC_CLASS_CONVERSION, "hexfmt", 1,0, "Convert int to string, e.g. 255 to \"0xff\"."}, {FUNC_CLASS_CONVERSION, "int", 1,0, "Convert int/float/bool/string to int."}, {FUNC_CLASS_CONVERSION, "string", 1,0, "Convert int/float/bool/string to string."}, {FUNC_CLASS_CONVERSION, "typeof", 1,0, "Convert argument to type of argument (e.g.\n" "MT_STRING). For debug."}, {FUNC_CLASS_MAPS, "depth", 1,0, "Prints maximum depth of hashmap: ''. Scalars have depth 0."}, {FUNC_CLASS_MAPS, "haskey", 2,0, "True/false if map has/hasn't key, e.g. 'haskey($*, \"a\")' or\n" "'haskey(mymap, mykey)'. Error if 1st argument is not a map."}, {FUNC_CLASS_MAPS, "joink", 2,0, "Makes string from map keys. E.g. 'joink($*, \",\")'."}, {FUNC_CLASS_MAPS, "joinkv", 3,0, "Makes string from map key-value pairs. E.g. 'joinkv(@v[2], \"=\", \",\")'"}, {FUNC_CLASS_MAPS, "joinv", 2,0, "Makes string from map keys. E.g. 'joinv(mymap, \",\")'."}, {FUNC_CLASS_MAPS, "leafcount", 1,0, "Counts total number of terminal values in hashmap. For single-level maps,\n" "same as length."}, {FUNC_CLASS_MAPS, "length", 1,0, "Counts number of top-level entries in hashmap. Scalars have length 1."}, {FUNC_CLASS_MAPS, "mapdiff", 0,1, "With 0 args, returns empty map. With 1 arg, returns copy of arg.\n" "With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed."}, {FUNC_CLASS_MAPS, "mapexcept", 1,1, "Returns a map with keys from remaining arguments, if any, unset.\n" "E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'."}, {FUNC_CLASS_MAPS, "mapselect", 1,1, "Returns a map with only keys from remaining arguments set.\n" "E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'."}, {FUNC_CLASS_MAPS, "mapsum", 0,1, "With 0 args, returns empty map. With >= 1 arg, returns a map with\n" "key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'."}, {FUNC_CLASS_MAPS, "splitkv", 3,0, "Splits string by separators into map with type inference.\n" "E.g. 'splitkv(\"a=1,b=2,c=3\", \"=\", \",\")' gives '{\"a\" : 1, \"b\" : 2, \"c\" : 3}'."}, {FUNC_CLASS_MAPS, "splitkvx", 3,0, "Splits string by separators into map without type inference (keys and\n" "values are strings). E.g. 'splitkv(\"a=1,b=2,c=3\", \"=\", \",\")' gives\n" "'{\"a\" : \"1\", \"b\" : \"2\", \"c\" : \"3\"}'."}, {FUNC_CLASS_MAPS, "splitnv", 2,0, "Splits string by separator into integer-indexed map with type inference.\n" "E.g. 'splitnv(\"a,b,c\" , \",\")' gives '{1 : \"a\", 2 : \"b\", 3 : \"c\"}'."}, {FUNC_CLASS_MAPS, "splitnvx", 2,0, "Splits string by separator into integer-indexed map without type\n" "inference (values are strings). E.g. 'splitnv(\"4,5,6\" , \",\")' gives '{1 : \"4\", 2 : \"5\", 3 : \"6\"}'."}, {0, NULL, -1 , -1, NULL}, // table terminator }; // ---------------------------------------------------------------- static arity_check_t check_arity(function_lookup_t lookup_table[], char* function_name, int user_provided_arity, int *parity, int* pvariadic) { *parity = -1; *pvariadic = FALSE; int found_function_name = FALSE; for (int i = 0; ; i++) { function_lookup_t* plookup = &lookup_table[i]; if (plookup->function_name == NULL) break; if (streq(function_name, plookup->function_name)) { found_function_name = TRUE; *parity = plookup->arity; if (plookup->variadic) { *pvariadic = TRUE; if (user_provided_arity < plookup->arity) { return ARITY_CHECK_FAIL; } return ARITY_CHECK_PASS; } if (user_provided_arity == plookup->arity) { return ARITY_CHECK_PASS; } } } if (found_function_name) { return ARITY_CHECK_FAIL; } else { return ARITY_CHECK_NO_SUCH; } } static void fmgr_check_arity_with_report(fmgr_t* pfmgr, char* function_name, int user_provided_arity, int* pvariadic) { int arity = -1; arity_check_t result = check_arity(pfmgr->function_lookup_table, function_name, user_provided_arity, &arity, pvariadic); if (result == ARITY_CHECK_NO_SUCH) { fprintf(stderr, "%s: Function name \"%s\" not found.\n", MLR_GLOBALS.bargv0, function_name); exit(1); } if (result == ARITY_CHECK_FAIL) { // More flexibly, I'd have a list of arities supported by each // function. But this is overkill: there are unary and binary minus and sec2gmt, // and everything else has a single arity. if (streq(function_name, "-") || streq(function_name, "sec2gmt") || streq(function_name, "sec2localtime")) { fprintf(stderr, "%s: Function named \"%s\" takes one argument or two; got %d.\n", MLR_GLOBALS.bargv0, function_name, user_provided_arity); } else if (*pvariadic) { fprintf(stderr, "%s: Function named \"%s\" takes at least %d argument%s; got %d.\n", MLR_GLOBALS.bargv0, function_name, arity, (arity == 1) ? "" : "s", user_provided_arity); } else { fprintf(stderr, "%s: Function named \"%s\" takes %d argument%s; got %d.\n", MLR_GLOBALS.bargv0, function_name, arity, (arity == 1) ? "" : "s", user_provided_arity); } exit(1); } } static char* function_class_to_desc(func_class_t function_class) { switch(function_class) { case FUNC_CLASS_ARITHMETIC: return "arithmetic"; break; case FUNC_CLASS_MATH: return "math"; break; case FUNC_CLASS_BOOLEAN: return "boolean"; break; case FUNC_CLASS_STRING: return "string"; break; case FUNC_CLASS_CONVERSION: return "conversion"; break; case FUNC_CLASS_TYPING: return "typing"; break; case FUNC_CLASS_MAPS: return "maps"; break; case FUNC_CLASS_TIME: return "time"; break; default: return "???"; break; } } void fmgr_list_functions(fmgr_t* pfmgr, FILE* output_stream, char* leader) { char* separator = " "; int leaderlen = strlen(leader); int separatorlen = strlen(separator); int linelen = leaderlen; int j = 0; for (int i = 0; ; i++) { function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; char* fname = plookup->function_name; if (fname == NULL) break; int fnamelen = strlen(fname); linelen += separatorlen + fnamelen; if (linelen >= 80) { fprintf(output_stream, "\n"); linelen = 0; linelen = leaderlen + separatorlen + fnamelen; j = 0; } if (j == 0) fprintf(output_stream, "%s", leader); fprintf(output_stream, "%s%s", separator, fname); j++; } fprintf(output_stream, "\n"); } // Pass function_name == NULL to get usage for all functions. void fmgr_function_usage(fmgr_t* pfmgr, FILE* output_stream, char* function_name) { int found = FALSE; char* nfmt = "%s (class=%s #args=%d): %s\n"; char* vfmt = "%s (class=%s variadic): %s\n"; int num_printed = 0; // > 1 matches e.g. for - and sec2gmt for (int i = 0; ; i++) { function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; if (plookup->function_name == NULL) // end of table break; if (function_name == NULL || streq(function_name, plookup->function_name)) { if (++num_printed > 1) fprintf(output_stream, "\n"); if (plookup->variadic) { fprintf(output_stream, vfmt, plookup->function_name, function_class_to_desc(plookup->function_class), plookup->usage_string); } else { fprintf(output_stream, nfmt, plookup->function_name, function_class_to_desc(plookup->function_class), plookup->arity, plookup->usage_string); } found = TRUE; } if (function_name == NULL) fprintf(output_stream, "\n"); } if (!found) fprintf(output_stream, "%s: no such function.\n", function_name); if (function_name == NULL) { fprintf(output_stream, "To set the seed for urand, you may specify decimal or hexadecimal 32-bit\n"); fprintf(output_stream, "numbers of the form \"%s --seed 123456789\" or \"%s --seed 0xcafefeed\".\n", MLR_GLOBALS.bargv0, MLR_GLOBALS.bargv0); fprintf(output_stream, "Miller's built-in variables are NF, NR, FNR, FILENUM, and FILENAME (awk-like)\n"); fprintf(output_stream, "along with the mathematical constants M_PI and M_E.\n"); } } void fmgr_list_all_functions_raw(fmgr_t* pfmgr, FILE* output_stream) { for (int i = 0; ; i++) { function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; if (plookup->function_name == NULL) // end of table break; printf("%s\n", plookup->function_name); } } // ================================================================ typedef struct _udf_callsite_state_t { int arity; rxval_evaluator_t** pevals; boxed_xval_t* args; udf_defsite_state_t* pdefsite_state; } udf_callsite_state_t; // ---------------------------------------------------------------- static udf_callsite_state_t* udf_callsite_state_alloc( fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state, mlr_dsl_ast_node_t* pnode, int arity, int type_inferencing, int context_flags) { udf_callsite_state_t* pstate = mlr_malloc_or_die(sizeof(udf_callsite_state_t)); pstate->arity = pnode->pchildren->length; pstate->pevals = mlr_malloc_or_die(pstate->arity * sizeof(rxval_evaluator_t*)); int i = 0; for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* parg_node = pe->pvvalue; pstate->pevals[i] = rxval_evaluator_alloc_from_ast(parg_node, pfmgr, type_inferencing, context_flags); } pstate->args = mlr_malloc_or_die(pstate->arity * sizeof(boxed_xval_t)); for (i = 0; i < pstate->arity; i++) { // Ownership will be transferred to local-stack which will be responsible for freeing. pstate->args[i] = box_ephemeral_val(mv_absent()); } pstate->pdefsite_state = pdefsite_state; return pstate; } // ---------------------------------------------------------------- static void udf_callsite_state_eval_args(udf_callsite_state_t* pstate, variables_t* pvars) { for (int i = 0; i < pstate->arity; i++) { pstate->args[i] = pstate->pevals[i]->pprocess_func(pstate->pevals[i]->pvstate, pvars); } } // ---------------------------------------------------------------- static void udf_callsite_state_free(udf_callsite_state_t* pstate) { for (int i = 0; i < pstate->arity; i++) { rxval_evaluator_t* pxev = pstate->pevals[i]; pxev->pfree_func(pxev); } free(pstate->pevals); free(pstate->args); free(pstate); } // ---------------------------------------------------------------- static mv_t rval_evaluator_udf_callsite_process(void* pvstate, variables_t* pvars) { udf_callsite_state_t* pstate = pvstate; udf_callsite_state_eval_args(pstate, pvars); // Functions returning map values in a scalar context get their return values treated as // absent-null. (E.g. f() returns a map and g() returns an int and the statement is '$x // = f() + g()'.) Non-scalar-context return values are handled separately (not here). boxed_xval_t retval = pstate->pdefsite_state->pprocess_func( pstate->pdefsite_state->pvstate, pstate->arity, pstate->args, pvars); if (retval.xval.is_terminal) { return retval.xval.terminal_mlrval; } else { if (retval.is_ephemeral) { mlhmmv_xvalue_free(&retval.xval); } return mv_absent(); } } static boxed_xval_t rxval_evaluator_udf_xcallsite_process(void* pvstate, variables_t* pvars) { udf_callsite_state_t* pstate = pvstate; udf_callsite_state_eval_args(pstate, pvars); return pstate->pdefsite_state->pprocess_func( pstate->pdefsite_state->pvstate, pstate->arity, pstate->args, pvars); } static void rval_evaluator_udf_callsite_free(rval_evaluator_t* pevaluator) { udf_callsite_state_t* pstate = pevaluator->pvstate; udf_callsite_state_free(pstate); free(pevaluator); } static void rxval_evaluator_udf_xcallsite_free(rxval_evaluator_t* pxevaluator) { udf_callsite_state_t* pstate = pxevaluator->pvstate; udf_callsite_state_free(pstate); free(pxevaluator); } static rval_evaluator_t* fmgr_alloc_from_udf_callsite(fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state, mlr_dsl_ast_node_t* pnode, char* function_name, int arity, int type_inferencing, int context_flags) { rval_evaluator_t* pudf_callsite_evaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); udf_callsite_state_t* pstate = udf_callsite_state_alloc(pfmgr, pdefsite_state, pnode, arity, type_inferencing, context_flags); pudf_callsite_evaluator->pvstate = pstate; pudf_callsite_evaluator->pprocess_func = rval_evaluator_udf_callsite_process; pudf_callsite_evaluator->pfree_func = rval_evaluator_udf_callsite_free; return pudf_callsite_evaluator; } static rxval_evaluator_t* fmgr_alloc_from_udf_xcallsite(fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state, mlr_dsl_ast_node_t* pnode, char* function_name, int arity, int type_inferencing, int context_flags) { rxval_evaluator_t* pudf_xcallsite_evaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); udf_callsite_state_t* pstate = udf_callsite_state_alloc(pfmgr, pdefsite_state, pnode, arity, type_inferencing, context_flags); pudf_xcallsite_evaluator->pvstate = pstate; pudf_xcallsite_evaluator->pprocess_func = rxval_evaluator_udf_xcallsite_process; pudf_xcallsite_evaluator->pfree_func = rxval_evaluator_udf_xcallsite_free; return pudf_xcallsite_evaluator; } // ================================================================ typedef struct _unresolved_func_callsite_state_t { char* function_name; int arity; int type_inferencing; int context_flags; mlr_dsl_ast_node_t* pnode; } unresolved_func_callsite_state_t; static unresolved_func_callsite_state_t* unresolved_callsite_alloc(char* function_name, int arity, int type_inferencing, int context_flags, mlr_dsl_ast_node_t* pnode) { unresolved_func_callsite_state_t* pstate = mlr_malloc_or_die(sizeof(unresolved_func_callsite_state_t)); pstate->function_name = mlr_strdup_or_die(function_name); pstate->arity = arity; pstate->type_inferencing = type_inferencing; pstate->context_flags = context_flags; pstate->pnode = pnode; return pstate; } static void unresolved_callsite_free(unresolved_func_callsite_state_t* pstate) { if (pstate == NULL) return; free(pstate->function_name); free(pstate); } // ---------------------------------------------------------------- static mv_t provisional_call_func(void* pvstate, variables_t* pvars) { unresolved_func_callsite_state_t* pstate = pvstate; fprintf(stderr, "%s: internal coding error: unresolved scalar-return-value callsite \"%s\".\n", MLR_GLOBALS.bargv0, pstate->function_name); exit(1); } static void provisional_call_free(rval_evaluator_t* pevaluator) { unresolved_func_callsite_state_t* pstate = pevaluator->pvstate; unresolved_callsite_free(pstate); free(pevaluator); } rval_evaluator_t* fmgr_alloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { char* function_name = pnode->text; int user_provided_arity = pnode->pchildren->length; unresolved_func_callsite_state_t* pstate = unresolved_callsite_alloc(function_name, user_provided_arity, type_inferencing, context_flags, pnode); rval_evaluator_t* pev = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pev->pvstate = pstate; pev->pprocess_func = provisional_call_func; pev->pfree_func = provisional_call_free; // Remember this callsite to a function which may or may not have been defined yet. // Then later we can resolve them to point to UDF bodies which have been defined. fmgr_mark_callsite_to_resolve(pfmgr, pev); return pev; } // ---------------------------------------------------------------- static boxed_xval_t provisional_xcall_func(void* pvstate, variables_t* pvars) { unresolved_func_callsite_state_t* pstate = pvstate; fprintf(stderr, "%s: internal coding error: unresolved map-return-value callsite \"%s\".\n", MLR_GLOBALS.bargv0, pstate->function_name); exit(1); } static void provisional_xcall_free(rxval_evaluator_t* pxevaluator) { unresolved_func_callsite_state_t* pstate = pxevaluator->pvstate; unresolved_callsite_free(pstate); free(pxevaluator); } rxval_evaluator_t* fmgr_xalloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { char* function_name = pnode->text; int user_provided_arity = pnode->pchildren->length; unresolved_func_callsite_state_t* pstate = unresolved_callsite_alloc(function_name, user_provided_arity, type_inferencing, context_flags, pnode); rxval_evaluator_t* pxev = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxev->pvstate = pstate; pxev->pprocess_func = provisional_xcall_func; pxev->pfree_func = provisional_xcall_free; // Remember this callsite to a function which may or may not have been defined yet. // Then later we can resolve them to point to UDF bodies which have been defined. fmgr_mark_xcallsite_to_resolve(pfmgr, pxev); return pxev; } // ---------------------------------------------------------------- void fmgr_mark_callsite_to_resolve(fmgr_t* pfmgr, rval_evaluator_t* pev) { sllv_append(pfmgr->pfunc_callsite_evaluators_to_resolve, pev); } void fmgr_mark_xcallsite_to_resolve(fmgr_t* pfmgr, rxval_evaluator_t* pxev) { sllv_append(pfmgr->pfunc_callsite_xevaluators_to_resolve, pxev); } // ---------------------------------------------------------------- // Resolving a callsite involves treewalking the AST which may find more callsites to // resolve. E.g. in '$y = f(g($x))', f is initially unresolved (f and/or g perhaps as yet // undefined as of when the callsite is parsed), then at resolution time for f, its // argument 'g($x)' is encountered, initially unresolved, then resolved. // Hence the outer loop. void fmgr_resolve_func_callsites(fmgr_t* pfmgr) { while (TRUE) { int did = FALSE; while (pfmgr->pfunc_callsite_xevaluators_to_resolve->phead != NULL) { did = TRUE; rxval_evaluator_t* pxev = sllv_pop(pfmgr->pfunc_callsite_xevaluators_to_resolve); unresolved_func_callsite_state_t* ptemp_state = pxev->pvstate; resolve_func_xcallsite(pfmgr, pxev); unresolved_callsite_free(ptemp_state); } while (pfmgr->pfunc_callsite_evaluators_to_resolve->phead != NULL) { did = TRUE; rval_evaluator_t* pev = sllv_pop(pfmgr->pfunc_callsite_evaluators_to_resolve); unresolved_func_callsite_state_t* ptemp_state = pev->pvstate; resolve_func_callsite(pfmgr, pev); unresolved_callsite_free(ptemp_state); } if (!did) { break; } } } // ---------------------------------------------------------------- static rval_evaluator_t* construct_udf_callsite_evaluator( fmgr_t* pfmgr, unresolved_func_callsite_state_t* pcallsite) { char* function_name = pcallsite->function_name; int user_provided_arity = pcallsite->arity; int type_inferencing = pcallsite->type_inferencing; int context_flags = pcallsite->context_flags; mlr_dsl_ast_node_t* pnode = pcallsite->pnode; udf_defsite_state_t* pudf_defsite_state = lhmsv_get(pfmgr->pudf_names_to_defsite_states, pcallsite->function_name); if (pudf_defsite_state != NULL) { int udf_arity = pudf_defsite_state->arity; if (user_provided_arity != udf_arity) { fprintf(stderr, "Function named \"%s\" takes %d argument%s; got %d.\n", function_name, udf_arity, (udf_arity == 1) ? "" : "s", user_provided_arity); exit(1); } return fmgr_alloc_from_udf_callsite(pfmgr, pudf_defsite_state, pnode, function_name, user_provided_arity, type_inferencing, context_flags); } else { return NULL; } } static rxval_evaluator_t* construct_udf_defsite_xevaluator( fmgr_t* pfmgr, unresolved_func_callsite_state_t* pcallsite) { char* function_name = pcallsite->function_name; int user_provided_arity = pcallsite->arity; int type_inferencing = pcallsite->type_inferencing; int context_flags = pcallsite->context_flags; mlr_dsl_ast_node_t* pnode = pcallsite->pnode; udf_defsite_state_t* pudf_defsite_state = lhmsv_get(pfmgr->pudf_names_to_defsite_states, pcallsite->function_name); if (pudf_defsite_state != NULL) { int udf_arity = pudf_defsite_state->arity; if (user_provided_arity != udf_arity) { fprintf(stderr, "Function named \"%s\" takes %d argument%s; got %d.\n", function_name, udf_arity, (udf_arity == 1) ? "" : "s", user_provided_arity); exit(1); } return fmgr_alloc_from_udf_xcallsite(pfmgr, pudf_defsite_state, pnode, function_name, user_provided_arity, type_inferencing, context_flags); } else { return NULL; } } // ---------------------------------------------------------------- static rval_evaluator_t* construct_builtin_function_callsite_evaluator( fmgr_t* pfmgr, unresolved_func_callsite_state_t* pcallsite) { char* function_name = pcallsite->function_name; int user_provided_arity = pcallsite->arity; int type_inferencing = pcallsite->type_inferencing; int context_flags = pcallsite->context_flags; mlr_dsl_ast_node_t* pnode = pcallsite->pnode; int variadic = FALSE; fmgr_check_arity_with_report(pfmgr, function_name, user_provided_arity, &variadic); rval_evaluator_t* pevaluator = NULL; if (variadic) { int nargs = pnode->pchildren->length; rval_evaluator_t** pargs = mlr_malloc_or_die(nargs * sizeof(rval_evaluator_t*)); int i = 0; for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pargs[i] = rval_evaluator_alloc_from_ast(pchild, pfmgr, type_inferencing, context_flags); } pevaluator = fmgr_alloc_evaluator_from_variadic_func_name(function_name, pargs, nargs); } else if (user_provided_arity == 0) { pevaluator = fmgr_alloc_evaluator_from_zary_func_name(function_name); } else if (user_provided_arity == 1) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_unary_func_name(function_name, parg1); } else if (user_provided_arity == 2) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; int type2 = parg2_node->type; int is_regexy = streq(function_name, "=~") || streq(function_name, "!=~") || streq(function_name, "regextract"); if (is_regexy && type2 == MD_AST_NODE_TYPE_STRING_LITERAL) { rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_binary_regex_arg2_func_name(function_name, parg1, parg2_node->text, FALSE); } else if (is_regexy && type2 == MD_AST_NODE_TYPE_REGEXI) { rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_binary_regex_arg2_func_name(function_name, parg1, parg2_node->text, TYPE_INFER_STRING_FLOAT_INT); } else { // regexes can still be applied here, e.g. if the 2nd argument is a non-terminal AST: however // the regexes will be compiled record-by-record rather than once at alloc time, which will // be slower. rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rval_evaluator_t* parg2 = rval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_binary_func_name(function_name, parg1, parg2); } } else if (user_provided_arity == 3) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* parg3_node = pnode->pchildren->phead->pnext->pnext->pvvalue; int type2 = parg2_node->type; int is_regexy = streq(function_name, "sub") || streq(function_name, "gsub") || streq(function_name, "regextract_or_else"); if (is_regexy && type2 == MD_AST_NODE_TYPE_STRING_LITERAL) { // sub/gsub-regex special case: rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rval_evaluator_t* parg3 = rval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name(function_name, parg1, parg2_node->text, FALSE, parg3); } else if (is_regexy && type2 == MD_AST_NODE_TYPE_REGEXI) { // sub/gsub-regex special case: rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rval_evaluator_t* parg3 = rval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name(function_name, parg1, parg2_node->text, TYPE_INFER_STRING_FLOAT_INT, parg3); } else { // regexes can still be applied here, e.g. if the 2nd argument is a non-terminal AST: however // the regexes will be compiled record-by-record rather than once at alloc time, which will // be slower. rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rval_evaluator_t* parg2 = rval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); rval_evaluator_t* parg3 = rval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); pevaluator = fmgr_alloc_evaluator_from_ternary_func_name(function_name, parg1, parg2, parg3); } } else { fprintf(stderr, "Miller: internal coding error: arity for function name \"%s\" misdetected.\n", function_name); exit(1); } return pevaluator; } // ---------------------------------------------------------------- // At callsites, arguments can be scalars or maps; return values can be scalars // or maps. At the user level, a function take map input and produce scalar // output or vice versa. As of this writing, though, *internally* functions // go from scalars to scalar or maps to map. This wrapper wraps scalar input // to functions which know about maps. typedef struct _xeval_wrapping_eval_state_t { rval_evaluator_t* pevaluator; } xeval_wrapping_eval_state_t; static boxed_xval_t xeval_wrapping_eval_func(void* pvstate, variables_t* pvars) { xeval_wrapping_eval_state_t* pstate = pvstate; rval_evaluator_t* pevaluator = pstate->pevaluator; mv_t val = pevaluator->pprocess_func(pevaluator->pvstate, pvars); return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(val), .is_ephemeral = TRUE, // xxx verify reference semantics for RHS evaluators! }; } static void xeval_wrapping_eval_free(rxval_evaluator_t* pxevaluator) { xeval_wrapping_eval_state_t* pstate = pxevaluator->pvstate; pstate->pevaluator->pfree_func(pstate->pevaluator); free(pstate); free(pxevaluator); } static rxval_evaluator_t* fmgr_alloc_xeval_wrapping_eval(rval_evaluator_t* pevaluator) { rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); xeval_wrapping_eval_state_t* pstate = mlr_malloc_or_die(sizeof(xeval_wrapping_eval_state_t)); pstate->pevaluator = pevaluator; pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = xeval_wrapping_eval_func; pxevaluator->pfree_func = xeval_wrapping_eval_free; return pxevaluator; } // ---------------------------------------------------------------- // At callsites, arguments can be scalars or maps; return values can be scalars // or maps. At the user level, a function take map input and produce scalar // output or vice versa. As of this writing, though, *internally* functions go // from scalars to scalar or maps to map. This wrapper wraps maybe-map input to // functions which do not know about maps. typedef struct _eval_wrapping_xeval_state_t { rxval_evaluator_t* pxevaluator; } eval_wrapping_xeval_state_t; static mv_t eval_wrapping_xeval_func(void* pvstate, variables_t* pvars) { eval_wrapping_xeval_state_t* pstate = pvstate; rxval_evaluator_t* pxevaluator = pstate->pxevaluator; boxed_xval_t bxval = pxevaluator->pprocess_func(pxevaluator->pvstate, pvars); if (bxval.xval.is_terminal) { if (bxval.is_ephemeral) { return bxval.xval.terminal_mlrval; } else { return mv_copy(&bxval.xval.terminal_mlrval); } } else { if (bxval.is_ephemeral) { mlhmmv_xvalue_free(&bxval.xval); } return mv_error(); } } static void eval_wrapping_xeval_free(rval_evaluator_t* pevaluator) { eval_wrapping_xeval_state_t* pstate = pevaluator->pvstate; pstate->pxevaluator->pfree_func(pstate->pxevaluator); free(pstate); free(pevaluator); } static rval_evaluator_t* fmgr_alloc_eval_wrapping_xeval(rxval_evaluator_t* pxevaluator) { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); eval_wrapping_xeval_state_t* pstate = mlr_malloc_or_die(sizeof(eval_wrapping_xeval_state_t)); pstate->pxevaluator = pxevaluator; pevaluator->pvstate = pstate; pevaluator->pprocess_func = eval_wrapping_xeval_func; pevaluator->pfree_func = eval_wrapping_xeval_free; return pevaluator; } // ================================================================ static rval_evaluator_t* fmgr_alloc_evaluator_from_variadic_func_name(char* fnnm, rval_evaluator_t** pargs, int nargs) { if (streq(fnnm, "min")) { return rval_evaluator_alloc_from_variadic_func(variadic_min_func, pargs, nargs); } else if (streq(fnnm, "max")) { return rval_evaluator_alloc_from_variadic_func(variadic_max_func, pargs, nargs); } else return NULL; } // ================================================================ static rval_evaluator_t* fmgr_alloc_evaluator_from_zary_func_name(char* function_name) { if (streq(function_name, "urand")) { return rval_evaluator_alloc_from_x_z_func(f_z_urand_func); } else if (streq(function_name, "urand32")) { return rval_evaluator_alloc_from_x_z_func(i_z_urand32_func); } else if (streq(function_name, "systime")) { return rval_evaluator_alloc_from_x_z_func(f_z_systime_func); } else { return NULL; } } // ================================================================ static rval_evaluator_t* fmgr_alloc_evaluator_from_unary_func_name(char* fnnm, rval_evaluator_t* parg1) { if (streq(fnnm, "!")) { return rval_evaluator_alloc_from_b_b_func(b_b_not_func, parg1); } else if (streq(fnnm, "+")) { return rval_evaluator_alloc_from_x_x_func(x_x_upos_func, parg1); } else if (streq(fnnm, "-")) { return rval_evaluator_alloc_from_x_x_func(x_x_uneg_func, parg1); } else if (streq(fnnm, ".+")) { return rval_evaluator_alloc_from_x_x_func(x_x_upos_func, parg1); } else if (streq(fnnm, ".-")) { return rval_evaluator_alloc_from_x_x_func(x_x_uneg_func, parg1); } else if (streq(fnnm, "abs")) { return rval_evaluator_alloc_from_x_x_func(x_x_abs_func, parg1); } else if (streq(fnnm, "acos")) { return rval_evaluator_alloc_from_f_f_func(f_f_acos_func, parg1); } else if (streq(fnnm, "acosh")) { return rval_evaluator_alloc_from_f_f_func(f_f_acosh_func, parg1); } else if (streq(fnnm, "asin")) { return rval_evaluator_alloc_from_f_f_func(f_f_asin_func, parg1); } else if (streq(fnnm, "asinh")) { return rval_evaluator_alloc_from_f_f_func(f_f_asinh_func, parg1); } else if (streq(fnnm, "atan")) { return rval_evaluator_alloc_from_f_f_func(f_f_atan_func, parg1); } else if (streq(fnnm, "atanh")) { return rval_evaluator_alloc_from_f_f_func(f_f_atanh_func, parg1); } else if (streq(fnnm, "bitcount")) { return rval_evaluator_alloc_from_i_i_func(i_i_bitcount_func, parg1); } else if (streq(fnnm, "boolean")) { return rval_evaluator_alloc_from_x_x_func(b_x_boolean_func, parg1); } else if (streq(fnnm, "cbrt")) { return rval_evaluator_alloc_from_f_f_func(f_f_cbrt_func, parg1); } else if (streq(fnnm, "ceil")) { return rval_evaluator_alloc_from_x_x_func(x_x_ceil_func, parg1); } else if (streq(fnnm, "cos")) { return rval_evaluator_alloc_from_f_f_func(f_f_cos_func, parg1); } else if (streq(fnnm, "cosh")) { return rval_evaluator_alloc_from_f_f_func(f_f_cosh_func, parg1); } else if (streq(fnnm, "dhms2fsec")) { return rval_evaluator_alloc_from_f_s_func(f_s_dhms2fsec_func, parg1); } else if (streq(fnnm, "dhms2sec")) { return rval_evaluator_alloc_from_f_s_func(i_s_dhms2sec_func, parg1); } else if (streq(fnnm, "erf")) { return rval_evaluator_alloc_from_f_f_func(f_f_erf_func, parg1); } else if (streq(fnnm, "erfc")) { return rval_evaluator_alloc_from_f_f_func(f_f_erfc_func, parg1); } else if (streq(fnnm, "exp")) { return rval_evaluator_alloc_from_f_f_func(f_f_exp_func, parg1); } else if (streq(fnnm, "expm1")) { return rval_evaluator_alloc_from_f_f_func(f_f_expm1_func, parg1); } else if (streq(fnnm, "float")) { return rval_evaluator_alloc_from_x_x_func(f_x_float_func, parg1); } else if (streq(fnnm, "floor")) { return rval_evaluator_alloc_from_x_x_func(x_x_floor_func, parg1); } else if (streq(fnnm, "fsec2dhms")) { return rval_evaluator_alloc_from_s_f_func(s_f_fsec2dhms_func, parg1); } else if (streq(fnnm, "fsec2hms")) { return rval_evaluator_alloc_from_s_f_func(s_f_fsec2hms_func, parg1); } else if (streq(fnnm, "gmt2sec")) { return rval_evaluator_alloc_from_i_s_func(i_s_gmt2sec_func, parg1); } else if (streq(fnnm, "localtime2sec")) { return rval_evaluator_alloc_from_i_s_func(i_s_localtime2sec_func, parg1); } else if (streq(fnnm, "hexfmt")) { return rval_evaluator_alloc_from_x_x_func(s_x_hexfmt_func, parg1); } else if (streq(fnnm, "hms2fsec")) { return rval_evaluator_alloc_from_f_s_func(f_s_hms2fsec_func, parg1); } else if (streq(fnnm, "hms2sec")) { return rval_evaluator_alloc_from_f_s_func(i_s_hms2sec_func, parg1); } else if (streq(fnnm, "int")) { return rval_evaluator_alloc_from_x_x_func(i_x_int_func, parg1); } else if (streq(fnnm, "invqnorm")) { return rval_evaluator_alloc_from_f_f_func(f_f_invqnorm_func, parg1); } else if (streq(fnnm, "log")) { return rval_evaluator_alloc_from_f_f_func(f_f_log_func, parg1); } else if (streq(fnnm, "log10")) { return rval_evaluator_alloc_from_f_f_func(f_f_log10_func, parg1); } else if (streq(fnnm, "log1p")) { return rval_evaluator_alloc_from_f_f_func(f_f_log1p_func, parg1); } else if (streq(fnnm, "qnorm")) { return rval_evaluator_alloc_from_f_f_func(f_f_qnorm_func, parg1); } else if (streq(fnnm, "round")) { return rval_evaluator_alloc_from_x_x_func(x_x_round_func, parg1); } else if (streq(fnnm, "sec2dhms")) { return rval_evaluator_alloc_from_s_i_func(s_i_sec2dhms_func, parg1); } else if (streq(fnnm, "sec2gmt")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2gmt_func, parg1); } else if (streq(fnnm, "sec2gmtdate")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2gmtdate_func, parg1); } else if (streq(fnnm, "sec2localtime")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2localtime_func, parg1); } else if (streq(fnnm, "sec2localdate")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2localdate_func, parg1); } else if (streq(fnnm, "sec2hms")) { return rval_evaluator_alloc_from_s_i_func(s_i_sec2hms_func, parg1); } else if (streq(fnnm, "sgn")) { return rval_evaluator_alloc_from_x_x_func(x_x_sgn_func, parg1); } else if (streq(fnnm, "sin")) { return rval_evaluator_alloc_from_f_f_func(f_f_sin_func, parg1); } else if (streq(fnnm, "sinh")) { return rval_evaluator_alloc_from_f_f_func(f_f_sinh_func, parg1); } else if (streq(fnnm, "sqrt")) { return rval_evaluator_alloc_from_f_f_func(f_f_sqrt_func, parg1); } else if (streq(fnnm, "string")) { return rval_evaluator_alloc_from_x_x_func(s_x_string_func, parg1); } else if (streq(fnnm, "strlen")) { return rval_evaluator_alloc_from_i_s_func(i_s_strlen_func, parg1); } else if (streq(fnnm, "tan")) { return rval_evaluator_alloc_from_f_f_func(f_f_tan_func, parg1); } else if (streq(fnnm, "tanh")) { return rval_evaluator_alloc_from_f_f_func(f_f_tanh_func, parg1); } else if (streq(fnnm, "tolower")) { return rval_evaluator_alloc_from_s_s_func(s_s_tolower_func, parg1); } else if (streq(fnnm, "toupper")) { return rval_evaluator_alloc_from_s_s_func(s_s_toupper_func, parg1); } else if (streq(fnnm, "capitalize")) { return rval_evaluator_alloc_from_s_s_func(s_s_capitalize_func, parg1); } else if (streq(fnnm, "system")) { return rval_evaluator_alloc_from_s_s_func(s_s_system_func, parg1); } else if (streq(fnnm, "lstrip")) { return rval_evaluator_alloc_from_s_s_func(s_s_lstrip_func, parg1); } else if (streq(fnnm, "rstrip")) { return rval_evaluator_alloc_from_s_s_func(s_s_rstrip_func, parg1); } else if (streq(fnnm, "strip")) { return rval_evaluator_alloc_from_s_s_func(s_s_strip_func, parg1); } else if (streq(fnnm, "collapse_whitespace")) { return rval_evaluator_alloc_from_s_s_func(s_s_collapse_whitespace_func, parg1); } else if (streq(fnnm, "clean_whitespace")) { return rval_evaluator_alloc_from_s_s_func(s_s_clean_whitespace_func, parg1); } else if (streq(fnnm, "~")) { return rval_evaluator_alloc_from_i_i_func(i_i_bitwise_not_func, parg1); } else return NULL; } // ================================================================ static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_func_name(char* fnnm, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { if (streq(fnnm, "&&")) { return rval_evaluator_alloc_from_b_bb_and_func(parg1, parg2); } else if (streq(fnnm, "||")) { return rval_evaluator_alloc_from_b_bb_or_func (parg1, parg2); } else if (streq(fnnm, "^^")) { return rval_evaluator_alloc_from_b_bb_xor_func(parg1, parg2); } else if (streq(fnnm, "=~")) { return rval_evaluator_alloc_from_x_ssc_func( matches_no_precomp_func, parg1, parg2); } else if (streq(fnnm, "regextract")) { return rval_evaluator_alloc_from_x_ss_func( regextract_no_precomp_func, parg1, parg2); } else if (streq(fnnm, "!=~")) { return rval_evaluator_alloc_from_x_ssc_func(does_not_match_no_precomp_func, parg1, parg2); } else if (streq(fnnm, "==")) { return rval_evaluator_alloc_from_x_xx_func(eq_op_func, parg1, parg2); } else if (streq(fnnm, "!=")) { return rval_evaluator_alloc_from_x_xx_func(ne_op_func, parg1, parg2); } else if (streq(fnnm, ">")) { return rval_evaluator_alloc_from_x_xx_func(gt_op_func, parg1, parg2); } else if (streq(fnnm, ">=")) { return rval_evaluator_alloc_from_x_xx_func(ge_op_func, parg1, parg2); } else if (streq(fnnm, "<")) { return rval_evaluator_alloc_from_x_xx_func(lt_op_func, parg1, parg2); } else if (streq(fnnm, "<=")) { return rval_evaluator_alloc_from_x_xx_func(le_op_func, parg1, parg2); } else if (streq(fnnm, ".")) { return rval_evaluator_alloc_from_x_xx_func(s_xx_dot_func, parg1, parg2); } else if (streq(fnnm, "+")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_plus_func, parg1, parg2); } else if (streq(fnnm, "-")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_minus_func, parg1, parg2); } else if (streq(fnnm, "*")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, parg1, parg2); } else if (streq(fnnm, "/")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_divide_func, parg1, parg2); } else if (streq(fnnm, "//")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_int_divide_func, parg1, parg2); } else if (streq(fnnm, ".+")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_oplus_func, parg1, parg2); } else if (streq(fnnm, ".-")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_ominus_func, parg1, parg2); } else if (streq(fnnm, ".*")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_otimes_func, parg1, parg2); } else if (streq(fnnm, "./")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_odivide_func, parg1, parg2); } else if (streq(fnnm, ".//")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_int_odivide_func, parg1, parg2); } else if (streq(fnnm, "%")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_mod_func, parg1, parg2); } else if (streq(fnnm, "**")) { return rval_evaluator_alloc_from_f_ff_func(f_ff_pow_func, parg1, parg2); } else if (streq(fnnm, "pow")) { return rval_evaluator_alloc_from_f_ff_func(f_ff_pow_func, parg1, parg2); } else if (streq(fnnm, "atan2")){ return rval_evaluator_alloc_from_f_ff_func(f_ff_atan2_func, parg1, parg2); } else if (streq(fnnm, "roundm")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_roundm_func, parg1, parg2); } else if (streq(fnnm, "fmtnum")) { return rval_evaluator_alloc_from_s_xs_func(s_xs_fmtnum_func, parg1, parg2); } else if (streq(fnnm, "urandint")) { return rval_evaluator_alloc_from_i_ii_func(i_ii_urandint_func, parg1, parg2); } else if (streq(fnnm, "sec2gmt")) { return rval_evaluator_alloc_from_x_xi_func(s_xi_sec2gmt_func, parg1, parg2); } else if (streq(fnnm, "sec2localtime")) { return rval_evaluator_alloc_from_x_xi_func(s_xi_sec2localtime_func, parg1, parg2); } else if (streq(fnnm, "&")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_band_func, parg1, parg2); } else if (streq(fnnm, "|")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_bor_func, parg1, parg2); } else if (streq(fnnm, "^")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_bxor_func, parg1, parg2); } else if (streq(fnnm, "<<")) { return rval_evaluator_alloc_from_i_ii_func(i_ii_bitwise_lsh_func, parg1, parg2); } else if (streq(fnnm, ">>")) { return rval_evaluator_alloc_from_i_ii_func(i_ii_bitwise_rsh_func, parg1, parg2); } else if (streq(fnnm, "strftime")) { return rval_evaluator_alloc_from_x_ns_func(s_ns_strftime_func, parg1, parg2); } else if (streq(fnnm, "strftime_local")) { return rval_evaluator_alloc_from_x_ns_func(s_ns_strftime_local_func, parg1, parg2); } else if (streq(fnnm, "strptime")) { return rval_evaluator_alloc_from_x_ss_func(i_ss_strptime_func, parg1, parg2); } else if (streq(fnnm, "strptime_local")) { return rval_evaluator_alloc_from_x_ss_func(i_ss_strptime_local_func, parg1, parg2); } else if (streq(fnnm, "urandrange")) { return rval_evaluator_alloc_from_f_ff_func(f_ff_urandrange_func, parg1, parg2); } else { return NULL; } } static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_regex_arg2_func_name(char* fnnm, rval_evaluator_t* parg1, char* regex_string, int ignore_case) { if (streq(fnnm, "=~")) { return rval_evaluator_alloc_from_x_sr_func(matches_precomp_func, parg1, regex_string, ignore_case); } else if (streq(fnnm, "!=~")) { return rval_evaluator_alloc_from_x_sr_func(does_not_match_precomp_func, parg1, regex_string, ignore_case); } else if (streq(fnnm, "regextract")) { return rval_evaluator_alloc_from_x_se_func(regextract_precomp_func, parg1, regex_string, ignore_case); } else { return NULL; } } // ================================================================ static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_func_name(char* fnnm, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) { if (streq(fnnm, "sub")) { return rval_evaluator_alloc_from_s_sss_func(sub_no_precomp_func, parg1, parg2, parg3); } else if (streq(fnnm, "gsub")) { return rval_evaluator_alloc_from_s_sss_func(gsub_no_precomp_func, parg1, parg2, parg3); } else if (streq(fnnm, "ssub")) { return rval_evaluator_alloc_from_s_sss_func(s_sss_ssub_func, parg1, parg2, parg3); } else if (streq(fnnm, "regextract_or_else")) { return rval_evaluator_alloc_from_s_sss_func(regextract_or_else_no_precomp_func, parg1, parg2, parg3); } else if (streq(fnnm, "logifit")) { return rval_evaluator_alloc_from_f_fff_func(f_fff_logifit_func, parg1, parg2, parg3); } else if (streq(fnnm, "madd")) { return rval_evaluator_alloc_from_i_iii_func(i_iii_modadd_func, parg1, parg2, parg3); } else if (streq(fnnm, "msub")) { return rval_evaluator_alloc_from_i_iii_func(i_iii_modsub_func, parg1, parg2, parg3); } else if (streq(fnnm, "mmul")) { return rval_evaluator_alloc_from_i_iii_func(i_iii_modmul_func, parg1, parg2, parg3); } else if (streq(fnnm, "mexp")) { return rval_evaluator_alloc_from_i_iii_func(i_iii_modexp_func, parg1, parg2, parg3); } else if (streq(fnnm, "substr")) { return rval_evaluator_alloc_from_s_sii_func(s_sii_substr_func, parg1, parg2, parg3); } else if (streq(fnnm, "? :")) { return rval_evaluator_alloc_from_ternop(parg1, parg2, parg3); } else { return NULL; } } static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name(char* fnnm, rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3) { if (streq(fnnm, "sub")) { return rval_evaluator_alloc_from_x_srs_func(sub_precomp_func, parg1, regex_string, ignore_case, parg3); } else if (streq(fnnm, "gsub")) { return rval_evaluator_alloc_from_x_srs_func(gsub_precomp_func, parg1, regex_string, ignore_case, parg3); } else if (streq(fnnm, "regextract_or_else")) { return rval_evaluator_alloc_from_x_ses_func(regextract_or_else_precomp_func, parg1, regex_string, ignore_case, parg3); } else { return NULL; } } // ================================================================ static rxval_evaluator_t* construct_builtin_function_callsite_xevaluator( fmgr_t* pfmgr, unresolved_func_callsite_state_t* pcallsite) { char* function_name = pcallsite->function_name; int user_provided_arity = pcallsite->arity; int type_inferencing = pcallsite->type_inferencing; int context_flags = pcallsite->context_flags; mlr_dsl_ast_node_t* pnode = pcallsite->pnode; int variadic = FALSE; fmgr_check_arity_with_report(pfmgr, function_name, user_provided_arity, &variadic); rxval_evaluator_t* pxevaluator = NULL; if (variadic) { pxevaluator = fmgr_alloc_xevaluator_from_variadic_func_name(function_name, pnode->pchildren, pfmgr, type_inferencing, context_flags); } else if (user_provided_arity == 1) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; pxevaluator = fmgr_alloc_xevaluator_from_unary_func_name(function_name, parg1_node, pfmgr, type_inferencing, context_flags); } else if (user_provided_arity == 2) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; pxevaluator = fmgr_alloc_xevaluator_from_binary_func_name(function_name, parg1_node, parg2_node, pfmgr, type_inferencing, context_flags); } else if (user_provided_arity == 3) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* parg3_node = pnode->pchildren->phead->pnext->pnext->pvvalue; pxevaluator = fmgr_alloc_xevaluator_from_ternary_func_name(function_name, parg1_node, parg2_node, parg3_node, pfmgr, type_inferencing, context_flags); } return pxevaluator; } // ---------------------------------------------------------------- static rxval_evaluator_t* fmgr_alloc_xevaluator_from_variadic_func_name( char* function_name, sllv_t* parg_nodes, fmgr_t* pfmgr, int type_inferencing, int context_flags) { if (streq(function_name, "mapsum")) { return rxval_evaluator_alloc_from_variadic_func(variadic_mapsum_xfunc, parg_nodes, pfmgr, type_inferencing, context_flags); } else if (streq(function_name, "mapdiff")) { return rxval_evaluator_alloc_from_variadic_func(variadic_mapdiff_xfunc, parg_nodes, pfmgr, type_inferencing, context_flags); } else if (streq(function_name, "mapexcept")) { return rxval_evaluator_alloc_from_variadic_func(variadic_mapexcept_xfunc, parg_nodes, pfmgr, type_inferencing, context_flags); } else if (streq(function_name, "mapselect")) { return rxval_evaluator_alloc_from_variadic_func(variadic_mapselect_xfunc, parg_nodes, pfmgr, type_inferencing, context_flags); } else { return NULL; } } // ---------------------------------------------------------------- static rxval_evaluator_t* fmgr_alloc_xevaluator_from_unary_func_name(char* fnnm, mlr_dsl_ast_node_t* parg1, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/) { if (streq(fnnm, "asserting_absent")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_absent_no_free_xfunc, parg1, pf, ti, cf, "absent"); } else if (streq(fnnm, "asserting_bool")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_boolean_no_free_xfunc, parg1, pf, ti, cf, "boolean"); } else if (streq(fnnm, "asserting_boolean")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_boolean_no_free_xfunc, parg1, pf, ti, cf, "boolean"); } else if (streq(fnnm, "asserting_empty")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_empty_no_free_xfunc, parg1, pf, ti, cf, "empty"); } else if (streq(fnnm, "asserting_empty_map")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_empty_map_no_free_xfunc, parg1, pf, ti, cf, "empty_map"); } else if (streq(fnnm, "asserting_float")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_float_no_free_xfunc, parg1, pf, ti, cf, "float"); } else if (streq(fnnm, "asserting_int")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_int_no_free_xfunc, parg1, pf, ti, cf, "int"); } else if (streq(fnnm, "asserting_map")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_map_no_free_xfunc, parg1, pf, ti, cf, "map"); } else if (streq(fnnm, "asserting_nonempty_map")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_nonempty_map_no_free_xfunc, parg1, pf, ti, cf, "nonempty_map"); } else if (streq(fnnm, "asserting_not_empty")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_not_empty_no_free_xfunc, parg1, pf, ti, cf, "not_empty"); } else if (streq(fnnm, "asserting_not_map")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_not_map_no_free_xfunc, parg1, pf, ti, cf, "not_map"); } else if (streq(fnnm, "asserting_not_null")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_not_null_no_free_xfunc, parg1, pf, ti, cf, "not_null"); } else if (streq(fnnm, "asserting_null")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_null_no_free_xfunc, parg1, pf, ti, cf, "null"); } else if (streq(fnnm, "asserting_numeric")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_numeric_no_free_xfunc, parg1, pf, ti, cf, "numeric"); } else if (streq(fnnm, "asserting_present")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_present_no_free_xfunc, parg1, pf, ti, cf, "present"); } else if (streq(fnnm, "asserting_string")) { return rxval_evaluator_alloc_from_A_x_func(b_x_is_string_no_free_xfunc, parg1, pf, ti, cf, "string"); } else if (streq(fnnm, "is_absent")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_absent_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_bool")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_boolean_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_boolean")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_boolean_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_empty")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_empty_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_empty_map")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_empty_map_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_float")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_float_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_int")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_int_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_map")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_map_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_nonempty_map")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_nonempty_map_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_not_empty")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_not_empty_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_not_map")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_not_map_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_not_null")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_not_null_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_null")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_null_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_numeric")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_numeric_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_present")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_present_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "is_string")) { return rxval_evaluator_alloc_from_x_x_func(b_x_is_string_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "typeof")) { return rxval_evaluator_alloc_from_x_x_func(s_x_typeof_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "length")) { return rxval_evaluator_alloc_from_x_x_func(i_x_length_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "depth")) { return rxval_evaluator_alloc_from_x_x_func(i_x_depth_xfunc, parg1, pf, ti, cf); } else if (streq(fnnm, "leafcount")) { return rxval_evaluator_alloc_from_x_x_func(i_x_leafcount_xfunc, parg1, pf, ti, cf); } else { return NULL; } } // ---------------------------------------------------------------- static rxval_evaluator_t* fmgr_alloc_xevaluator_from_binary_func_name(char* fnnm, mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* parg2, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/) { if (streq(fnnm, "haskey")) { return rxval_evaluator_alloc_from_x_mx_func(b_xx_haskey_xfunc, parg1, parg2, pf, ti, cf); } else if (streq(fnnm, "splitnv")) { return rxval_evaluator_alloc_from_x_ss_func(m_ss_splitnv_xfunc, parg1, parg2, pf, ti, cf); } else if (streq(fnnm, "splitnvx")) { return rxval_evaluator_alloc_from_x_ss_func(m_ss_splitnvx_xfunc, parg1, parg2, pf, ti, cf); } else if (streq(fnnm, "joink")) { return rxval_evaluator_alloc_from_x_ms_func(s_ms_joink_xfunc, parg1, parg2, pf, ti, cf); } else if (streq(fnnm, "joinv")) { return rxval_evaluator_alloc_from_x_ms_func(s_ms_joinv_xfunc, parg1, parg2, pf, ti, cf); } else { return NULL; } } // ---------------------------------------------------------------- static rxval_evaluator_t* fmgr_alloc_xevaluator_from_ternary_func_name(char* fnnm, mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* parg2, mlr_dsl_ast_node_t* parg3, fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/) { if (streq(fnnm, "joinkv")) { return rxval_evaluator_alloc_from_x_mss_func(s_mss_joinkv_xfunc, parg1, parg2, parg3, pf, ti, cf); } else if (streq(fnnm, "splitkv")) { return rxval_evaluator_alloc_from_x_sss_func(m_sss_splitkv_xfunc, parg1, parg2, parg3, pf, ti, cf); } else if (streq(fnnm, "splitkvx")) { return rxval_evaluator_alloc_from_x_sss_func(m_sss_splitkvx_xfunc, parg1, parg2, parg3, pf, ti, cf); } else { return NULL; } } // ================================================================ // Return value is in scalar context. static void resolve_func_callsite(fmgr_t* pfmgr, rval_evaluator_t* pev) { unresolved_func_callsite_state_t* pcallsite = pev->pvstate; rval_evaluator_t* pevaluator = construct_udf_callsite_evaluator(pfmgr, pcallsite); if (pevaluator != NULL) { // Struct assignment into the callsite space *pev = *pevaluator; free(pevaluator); return; } // Really there are map-in,map-out, map-in,scalar-out, and // scalar-in,scalar-out: and actually even more subtle, e.g. the join // functions take a mix of map and string arguments. What we have // internally are builtin function evaluators (scalars only) and builtin // function xevaluators (at least one argument, and/or retval, is a map). rxval_evaluator_t* pxevaluator = construct_builtin_function_callsite_xevaluator(pfmgr, pcallsite); if (pxevaluator != NULL) { pevaluator = fmgr_alloc_eval_wrapping_xeval(pxevaluator); *pev = *pevaluator; free(pevaluator); return; } pevaluator = construct_builtin_function_callsite_evaluator(pfmgr, pcallsite); if (pevaluator != NULL) { *pev = *pevaluator; free(pevaluator); return; } fprintf(stderr, "Miller: unrecognized function name \"%s\".\n", pcallsite->function_name); exit(1); } // ---------------------------------------------------------------- // Return value is in map context. static void resolve_func_xcallsite(fmgr_t* pfmgr, rxval_evaluator_t* pxev) { unresolved_func_callsite_state_t* pcallsite = pxev->pvstate; rxval_evaluator_t* pxevaluator = construct_udf_defsite_xevaluator(pfmgr, pcallsite); if (pxevaluator != NULL) { // Struct assignment into the callsite space *pxev = *pxevaluator; free(pxevaluator); return; } pxevaluator = construct_builtin_function_callsite_xevaluator(pfmgr, pcallsite); if (pxevaluator != NULL) { *pxev = *pxevaluator; free(pxevaluator); return; } rval_evaluator_t* pevaluator = construct_builtin_function_callsite_evaluator(pfmgr, pcallsite); pxevaluator = fmgr_alloc_xeval_wrapping_eval(pevaluator); if (pxevaluator != NULL) { *pxev = *pxevaluator; free(pxevaluator); return; } fprintf(stderr, "Miller: unrecognized function name \"%s\".\n", pcallsite->function_name); exit(1); } miller-5.6.2/c/dsl/function_manager.h000066400000000000000000000057031354153536500175230ustar00rootroot00000000000000#ifndef FUNCTION_MANAGER_H #define FUNCTION_MANAGER_H #include "lib/context.h" #include "lib/mlrval.h" #include "containers/lhmsv.h" #include "containers/hss.h" #include "dsl/mlr_dsl_ast.h" #include "dsl/rval_evaluator.h" #include "dsl/rxval_evaluator.h" #include "dsl/type_inference.h" // ---------------------------------------------------------------- // Things a user-defined function (however it is implemented) needs in order to // be called: pvstate is its own state (whatever that is), and it defines its // own process and free functions implementing this interface. typedef boxed_xval_t udf_defsite_process_func_t(void* pvstate, int arity, boxed_xval_t* pargs, variables_t* pvars); typedef void udf_defsite_free_func_t(void* pvstate, context_t* pctx); typedef struct _udf_defsite_state_t { void* pvstate; char* name; int arity; udf_defsite_process_func_t* pprocess_func; udf_defsite_free_func_t* pfree_func; } udf_defsite_state_t; // ---------------------------------------------------------------- // Holds built-in functions as well as user-defined functions struct _function_lookup_t; // Private to the .c file typedef struct _fmgr_t { struct _function_lookup_t * function_lookup_table; // Built-ins hss_t* built_in_function_names; // Built-ins lhmsv_t* pudf_names_to_defsite_states; // UDF bodies // Function callsites, used to bootstrap (e.g. function f calls function g before the latter // has been defined). sllv_t* pfunc_callsite_evaluators_to_resolve; // return value in scalar context sllv_t* pfunc_callsite_xevaluators_to_resolve; // return value in map context } fmgr_t; // ---------------------------------------------------------------- fmgr_t* fmgr_alloc(); void fmgr_free(fmgr_t* pfmgr, context_t* pctx); void fmgr_install_udf(fmgr_t* pfmgr, udf_defsite_state_t* pdefsitate_state); // Callsites as defined by AST nodes, with scalar-context return values rval_evaluator_t* fmgr_alloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); // Callsites as defined by AST nodes, with map-context return values rxval_evaluator_t* fmgr_xalloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); void fmgr_mark_callsite_to_resolve(fmgr_t* pfmgr, rval_evaluator_t* pev); void fmgr_mark_xcallsite_to_resolve(fmgr_t* pfmgr, rxval_evaluator_t* pxev); // Update all function callsites to point to UDF bodies, once all the latter have been defined. void fmgr_resolve_func_callsites(fmgr_t* pfmgr); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void fmgr_list_functions(fmgr_t* pfmgr, FILE* output_stream, char* leader); // Pass function_name == NULL to get usage for all functions: void fmgr_function_usage(fmgr_t* pfmgr, FILE* output_stream, char* function_name); void fmgr_list_all_functions_raw(fmgr_t* pfmgr, FILE* output_stream); #endif // FUNCTION_MANAGER_H miller-5.6.2/c/dsl/keylist_evaluators.c000066400000000000000000000055361354153536500201340ustar00rootroot00000000000000#include "keylist_evaluators.h" #include "rval_evaluators.h" // ---------------------------------------------------------------- // Example ASTs, with and without indexing on the left-hand-side oosvar name: // $ mlr -n put -v '@x[1]["2"][$3][@4]=5' // AST ROOT: // text="list", type=statement_list: // text="=", type=oosvar_assignment: // text="oosvar_keylist", type=oosvar_keylist: // text="x", type=string_literal. // text="1", type=numeric_literal. // text="2", type=numeric_literal. // text="3", type=field_name. // text="oosvar_keylist", type=oosvar_keylist: // text="4", type=string_literal. // text="5", type=numeric_literal. // // $ mlr -n put -v '@x = $y' // AST ROOT: // text="list", type=statement_list: // text="=", type=oosvar_assignment: // text="oosvar_keylist", type=oosvar_keylist: // text="x", type=string_literal. // text="y", type=field_name. // // $ mlr -n put -q -v 'emit @v, "a", "b", "c"' // AST ROOT: // text="list", type=statement_list: // text="emit", type=emit: // text="emit", type=emit: // text="oosvar_keylist", type=oosvar_keylist: // text="v", type=string_literal. // text="emit_namelist", type=emit: // text="a", type=numeric_literal. // text="b", type=numeric_literal. // text="c", type=numeric_literal. // text="stream", type=stream: // // $ mlr -n put -q -v 'emit @v[1][2], "a", "b","c"' // AST ROOT: // text="list", type=statement_list: // text="emit", type=emit: // text="emit", type=emit: // text="oosvar_keylist", type=oosvar_keylist: // text="v", type=string_literal. // text="1", type=numeric_literal. // text="2", type=numeric_literal. // text="emit_namelist", type=emit: // text="a", type=numeric_literal. // text="b", type=numeric_literal. // text="c", type=numeric_literal. // text="stream", type=stream: // pnode is input; pkeylist_evaluators is appended to. sllv_t* allocate_keylist_evaluators_from_ast_node( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { sllv_t* pkeylist_evaluators = sllv_alloc(); if (pnode->pchildren != NULL) { // Non-indexed localvars have no child nodes in the AST. for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); } else { sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pfmgr, type_inferencing, context_flags)); } } } return pkeylist_evaluators; } miller-5.6.2/c/dsl/keylist_evaluators.h000066400000000000000000000005571354153536500201370ustar00rootroot00000000000000#ifndef KEYLIST_EVALUATORS_H #define KEYLIST_EVALUATORS_H #include "containers/sllv.h" #include "dsl/mlr_dsl_ast.h" #include "dsl/function_manager.h" sllv_t* allocate_keylist_evaluators_from_ast_node( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags); #endif // KEYLIST_EVALUATORS_H miller-5.6.2/c/dsl/mlr_dsl_ast.c000066400000000000000000000513661354153536500165100ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "dsl/mlr_dsl_ast.h" // ---------------------------------------------------------------- mlr_dsl_ast_t* mlr_dsl_ast_alloc() { mlr_dsl_ast_t* past = mlr_malloc_or_die(sizeof(mlr_dsl_ast_t)); past->proot = NULL; return past; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc(char* text, mlr_dsl_ast_node_type_t type) { mlr_dsl_ast_node_t* pnode = (mlr_dsl_ast_node_t*)mlr_malloc_or_die( sizeof(mlr_dsl_ast_node_t)); pnode->text = mlr_strdup_or_die(text); pnode->type = type; pnode->pchildren = NULL; pnode->vardef_subframe_relative_index = MD_UNUSED_INDEX; pnode->vardef_subframe_index = MD_UNUSED_INDEX; pnode->vardef_frame_relative_index = MD_UNUSED_INDEX; pnode->subframe_var_count = MD_UNUSED_INDEX; pnode->max_subframe_depth = MD_UNUSED_INDEX; pnode->max_var_depth = MD_UNUSED_INDEX; return pnode; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_copy(mlr_dsl_ast_node_t* pother) { mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(pother->text, pother->type); return pnode; } // ---------------------------------------------------------------- // This is used within the Lemon parser before bind-stack allocation is done. // It does not copy the indices at each node: text and type. mlr_dsl_ast_node_t* mlr_dsl_ast_tree_copy(mlr_dsl_ast_node_t* pold) { mlr_dsl_ast_node_t* pnew = mlr_dsl_ast_node_copy(pold); if (pold->pchildren != NULL) { pnew->pchildren = sllv_alloc(); for (sllve_t* pe = pold->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; sllv_append(pnew->pchildren, mlr_dsl_ast_tree_copy(pchild)); } } return pnew; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_zary(char* text, mlr_dsl_ast_node_type_t type) { mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); return pnode; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_unary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa) { mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); return pnode; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_binary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) { mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); sllv_append(pnode->pchildren, pb); return pnode; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_ternary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc) { mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); sllv_append(pnode->pchildren, pb); sllv_append(pnode->pchildren, pc); return pnode; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_quaternary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc, mlr_dsl_ast_node_t* pd) { mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); sllv_append(pnode->pchildren, pb); sllv_append(pnode->pchildren, pc); sllv_append(pnode->pchildren, pd); return pnode; } // ---------------------------------------------------------------- mlr_dsl_ast_node_t* mlr_dsl_ast_node_prepend_arg( mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) { if (pa->pchildren == NULL) pa->pchildren = sllv_alloc(); sllv_push(pa->pchildren, pb); return pa; } mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg( mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) { if (pa->pchildren == NULL) pa->pchildren = sllv_alloc(); sllv_append(pa->pchildren, pb); return pa; } mlr_dsl_ast_node_t* mlr_dsl_ast_node_set_function_name( mlr_dsl_ast_node_t* pa, char* name) { free(pa->text); pa->text = mlr_strdup_or_die(name); return pa; } // ---------------------------------------------------------------- void mlr_dsl_ast_node_replace_text(mlr_dsl_ast_node_t* pa, char* text) { if (pa->text != NULL) { free(pa->text); } pa->text = mlr_strdup_or_die(text); } // ---------------------------------------------------------------- int mlr_dsl_ast_node_type_to_type_mask(mlr_dsl_ast_node_type_t type) { switch(type) { case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return TYPE_MASK_ANY; case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: return TYPE_MASK_NUMERIC; case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: return TYPE_MASK_INT; case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return TYPE_MASK_FLOAT; case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return TYPE_MASK_BOOLEAN; case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return TYPE_MASK_STRING; case MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION: return TYPE_MASK_ANY; case MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION: return TYPE_MASK_NUMERIC; case MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION: return TYPE_MASK_INT; case MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION: return TYPE_MASK_FLOAT; case MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION: return TYPE_MASK_BOOLEAN; case MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION: return TYPE_MASK_STRING; case MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION: return TYPE_MASK_MAP; default: MLR_INTERNAL_CODING_ERROR(); return 0; // not reached } } // ---------------------------------------------------------------- int mlr_dsl_ast_node_cannot_be_bare_boolean(mlr_dsl_ast_node_t* pnode) { switch (pnode->type) { case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: case MD_AST_NODE_TYPE_FIELD_NAME: case MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME: case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME: case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: case MD_AST_NODE_TYPE_NON_SIGIL_NAME: case MD_AST_NODE_TYPE_OPERATOR: case MD_AST_NODE_TYPE_ENV: case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return FALSE; break; default: return TRUE; break; } } // ---------------------------------------------------------------- void mlr_dsl_ast_print(mlr_dsl_ast_t* past) { printf("AST ROOT:\n"); if (past->proot == NULL) { printf("(null)\n"); } else { mlr_dsl_ast_node_print(past->proot); } } // ---------------------------------------------------------------- static void mlr_dsl_ast_node_print_aux(mlr_dsl_ast_node_t* pnode, int level, FILE* o) { if (pnode == NULL) return; for (int i = 0; i < level; i++) fprintf(o, " "); fprintf(o, "text=\"%s\", type=%s%s", pnode->text, mlr_dsl_ast_node_describe_type(pnode->type), (pnode->pchildren != NULL) ? ":" : "."); if (pnode->vardef_subframe_relative_index != MD_UNUSED_INDEX) fprintf(o, " vardef_subframe_relative_index=%d", pnode->vardef_subframe_relative_index); if (pnode->vardef_subframe_index != MD_UNUSED_INDEX) fprintf(o, " vardef_subframe_index=%d", pnode->vardef_subframe_index); if (pnode->vardef_frame_relative_index != MD_UNUSED_INDEX) fprintf(o, " vardef_frame_relative_index=%d", pnode->vardef_frame_relative_index); if (pnode->subframe_var_count != MD_UNUSED_INDEX) fprintf(o, " subframe_var_count=%d", pnode->subframe_var_count); if (pnode->max_subframe_depth != MD_UNUSED_INDEX) fprintf(o, " max_subframe_depth=%d", pnode->max_subframe_depth); if (pnode->max_var_depth != MD_UNUSED_INDEX) fprintf(o, " max_var_depth=%d", pnode->max_var_depth); fprintf(o, "\n"); if (pnode->pchildren != NULL) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_print_aux(pe->pvvalue, level + 1, o); } } } void mlr_dsl_ast_node_print(mlr_dsl_ast_node_t* pnode) { mlr_dsl_ast_node_print_aux(pnode, 0, stdout); } void mlr_dsl_ast_node_fprint(mlr_dsl_ast_node_t* pnode, FILE* o) { mlr_dsl_ast_node_print_aux(pnode, 0, o); } // ---------------------------------------------------------------- static void mlr_dsl_ast_node_pretty_fprint_aux(mlr_dsl_ast_node_t* pnode, FILE* o) { if (pnode == NULL) return; if (pnode->pchildren != NULL) { fprintf(o, "("); } if (pnode->type == MD_AST_NODE_TYPE_STRING_LITERAL || pnode->type == MD_AST_NODE_TYPE_REGEXI) { fprintf(o, "\"%s\"", pnode->text); } else { fprintf(o, "%s", pnode->text); } if (pnode->pchildren != NULL) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { fprintf(o, " "); mlr_dsl_ast_node_pretty_fprint_aux(pe->pvvalue, o); } fprintf(o, ")"); } } void mlr_dsl_ast_node_pretty_fprint(mlr_dsl_ast_node_t* pnode, FILE* o) { mlr_dsl_ast_node_pretty_fprint_aux(pnode, o); fprintf(o, "\n"); } // ---------------------------------------------------------------- char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) { switch(type) { case MD_AST_NODE_TYPE_STATEMENT_BLOCK: return "STATEMENT_BLOCK"; break; case MD_AST_NODE_TYPE_STATEMENT_LIST: return "STATEMENT_LIST"; break; case MD_AST_NODE_TYPE_FUNC_DEF: return "FUNC_DEF"; break; case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return "FUNCTION_CALLSITE"; break; case MD_AST_NODE_TYPE_SUBR_DEF: return "SUBR_DEF"; break; case MD_AST_NODE_TYPE_SUBR_CALLSITE: return "SUBR_CALLSITE"; break; case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return "UNTYPED_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: return "NUMERIC_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: return "INT_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return "FLOAT_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return "BOOLEAN_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return "STRING_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return "MAP_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION: return "UNTYPED_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION: return "NUMERIC_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION: return "INT_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION: return "FLOAT_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION: return "BOOLEAN_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION: return "STRING_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION: return "MAP_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_RETURN_VALUE: return "RETURN_VALUE"; break; case MD_AST_NODE_TYPE_RETURN_VOID: return "RETURN_VOID"; break; case MD_AST_NODE_TYPE_BEGIN: return "BEGIN"; break; case MD_AST_NODE_TYPE_END: return "END"; break; case MD_AST_NODE_TYPE_STRING_LITERAL: return "STRING_LITERAL"; break; case MD_AST_NODE_TYPE_NUMERIC_LITERAL: return "NUMERIC_LITERAL"; break; case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return "BOOLEAN_LITERAL"; break; case MD_AST_NODE_TYPE_MAP_LITERAL: return "MAP_LITERAL"; break; case MD_AST_NODE_TYPE_MAP_LITERAL_PAIR: return "MAP_LITERAL_PAIR"; break; case MD_AST_NODE_TYPE_MAP_LITERAL_KEY: return "MAP_LITERAL_KEY"; break; case MD_AST_NODE_TYPE_MAP_LITERAL_VALUE: return "MAP_LITERAL_VALUE"; break; case MD_AST_NODE_TYPE_REGEXI: return "REGEXI"; break; case MD_AST_NODE_TYPE_FIELD_NAME: return "FIELD_NAME"; break; case MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME: return "INDIRECT_FIELD_NAME"; break; case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME: return "POSITIONAL_SREC_NAME"; break; case MD_AST_NODE_TYPE_FULL_SREC: return "FULL_SREC"; break; case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: return "OOSVAR_KEYLIST"; break; case MD_AST_NODE_TYPE_FULL_OOSVAR: return "FULL_OOSVAR"; break; case MD_AST_NODE_TYPE_NON_SIGIL_NAME: return "NON_SIGIL_NAME"; break; case MD_AST_NODE_TYPE_OPERATOR: return "OPERATOR"; break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return "NONINDEXED_LOCAL_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return "INDEXED_LOCAL_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "SREC_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: return "INDIRECT_SREC_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT: return "POSITIONAL_SREC_NAME_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "OOSVAR_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "OOSVAR_FROM_FULL_SREC_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT: return "FULL_OOSVAR_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: return "FULL_SREC_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_ENV_ASSIGNMENT: return "ENV_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "CONTEXT_VARIABLE"; break; case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "STRIPPED_AWAY"; break; case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: return "CONDITIONAL_BLOCK"; break; case MD_AST_NODE_TYPE_FILTER: return "FILTER"; break; case MD_AST_NODE_TYPE_UNSET: return "UNSET"; break; case MD_AST_NODE_TYPE_PIPE: return "PIPE"; break; case MD_AST_NODE_TYPE_FILE_WRITE: return "FILE_WRITE"; break; case MD_AST_NODE_TYPE_FILE_APPEND: return "FILE_APPEND"; break; case MD_AST_NODE_TYPE_TEE: return "TEE"; break; case MD_AST_NODE_TYPE_EMITF: return "EMITF"; break; case MD_AST_NODE_TYPE_EMITP: return "EMITP"; break; case MD_AST_NODE_TYPE_EMIT: return "EMIT"; break; case MD_AST_NODE_TYPE_EMITP_LASHED: return "EMITP_LASHED"; break; case MD_AST_NODE_TYPE_EMIT_LASHED: return "EMIT_LASHED"; break; case MD_AST_NODE_TYPE_DUMP: return "DUMP"; break; case MD_AST_NODE_TYPE_EDUMP: return "EDUMP"; break; case MD_AST_NODE_TYPE_PRINT: return "PRINT"; break; case MD_AST_NODE_TYPE_PRINTN: return "PRINTN"; break; case MD_AST_NODE_TYPE_EPRINT: return "EPRINT"; break; case MD_AST_NODE_TYPE_EPRINTN: return "EPRINTN"; break; case MD_AST_NODE_TYPE_STDOUT: return "STDOUT"; break; case MD_AST_NODE_TYPE_STDERR: return "STDERR"; break; case MD_AST_NODE_TYPE_STREAM: return "STREAM"; break; case MD_AST_NODE_TYPE_ALL: return "ALL"; break; case MD_AST_NODE_TYPE_ENV: return "ENV"; break; case MD_AST_NODE_TYPE_WHILE: return "WHILE"; break; case MD_AST_NODE_TYPE_DO_WHILE: return "DO_WHILE"; break; case MD_AST_NODE_TYPE_FOR_SREC: return "FOR_SREC"; break; case MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY: return "FOR_SREC_KEY_ONLY"; break; case MD_AST_NODE_TYPE_FOR_OOSVAR: return "FOR_OOSVAR"; break; case MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY: return "FOR_OOSVAR_KEY_ONLY"; break; case MD_AST_NODE_TYPE_FOR_LOCAL_MAP: return "FOR_LOCAL_MAP"; break; case MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY: return "FOR_LOCAL_MAP_KEY_ONLY"; break; case MD_AST_NODE_TYPE_FOR_MAP_LITERAL: return "FOR_MAP_LITERAL"; break; case MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY: return "FOR_MAP_LITERAL_KEY_ONLY"; break; case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL: return "FOR_FUNC_RETVAL"; break; case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY: return "FOR_FUNC_RETVAL_KEY_ONLY"; break; case MD_AST_NODE_TYPE_FOR_VARIABLES: return "FOR_VARIABLES"; break; case MD_AST_NODE_TYPE_TRIPLE_FOR: return "TRIPLE_FOR"; break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return "NONINDEXED_LOCAL_VARIABLE"; break; case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: return "INDEXED_LOCAL_VARIABLE"; break; case MD_AST_NODE_TYPE_IN: return "IN"; break; case MD_AST_NODE_TYPE_BREAK: return "BREAK"; break; case MD_AST_NODE_TYPE_CONTINUE: return "CONTINUE"; break; case MD_AST_NODE_TYPE_IF_HEAD: return "IF_HEAD"; break; case MD_AST_NODE_TYPE_IF_ITEM: return "IF_ITEM"; break; default: return "UNRECOGNIZED_AST_NODE_TYPE"; } } // ---------------------------------------------------------------- void mlr_dsl_ast_free(mlr_dsl_ast_t* past) { mlr_dsl_ast_node_free(past->proot); free(past); } // ---------------------------------------------------------------- void mlr_dsl_ast_node_free(mlr_dsl_ast_node_t* pnode) { if (pnode->pchildren) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; mlr_dsl_ast_node_free(pchild); } sllv_free(pnode->pchildren); } free(pnode->text); free(pnode); } miller-5.6.2/c/dsl/mlr_dsl_ast.h000066400000000000000000000155421354153536500165110ustar00rootroot00000000000000// ================================================================ // Miller abstract syntax tree for put and filter. // ================================================================ #ifndef MLR_DSL_AST_H #define MLR_DSL_AST_H #include "../containers/sllv.h" #include "../containers/type_decl.h" // ---------------------------------------------------------------- typedef enum _mlr_dsl_ast_node_type_t { MD_AST_NODE_TYPE_STATEMENT_BLOCK, MD_AST_NODE_TYPE_STATEMENT_LIST, MD_AST_NODE_TYPE_FUNC_DEF, MD_AST_NODE_TYPE_SUBR_DEF, MD_AST_NODE_TYPE_FUNCTION_CALLSITE, MD_AST_NODE_TYPE_SUBR_CALLSITE, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION, MD_AST_NODE_TYPE_RETURN_VALUE, MD_AST_NODE_TYPE_RETURN_VOID, MD_AST_NODE_TYPE_BEGIN, MD_AST_NODE_TYPE_END, MD_AST_NODE_TYPE_STRING_LITERAL, MD_AST_NODE_TYPE_NUMERIC_LITERAL, MD_AST_NODE_TYPE_BOOLEAN_LITERAL, MD_AST_NODE_TYPE_MAP_LITERAL, MD_AST_NODE_TYPE_MAP_LITERAL_PAIR, MD_AST_NODE_TYPE_MAP_LITERAL_KEY, MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, MD_AST_NODE_TYPE_REGEXI, MD_AST_NODE_TYPE_FIELD_NAME, // E.g. value = $x MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, // E.g. value = $[@x] MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, // E.g. key = $[[3]] MD_AST_NODE_TYPE_FULL_SREC, MD_AST_NODE_TYPE_OOSVAR_KEYLIST, MD_AST_NODE_TYPE_FULL_OOSVAR, MD_AST_NODE_TYPE_NON_SIGIL_NAME, MD_AST_NODE_TYPE_OPERATOR, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, // E.g. $[@y] = newvalue MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT, // E.g. $[[3]] = newkey MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_ENV_ASSIGNMENT, MD_AST_NODE_TYPE_CONTEXT_VARIABLE, MD_AST_NODE_TYPE_ENV, MD_AST_NODE_TYPE_STRIPPED_AWAY, MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, MD_AST_NODE_TYPE_FILTER, MD_AST_NODE_TYPE_UNSET, MD_AST_NODE_TYPE_PIPE, MD_AST_NODE_TYPE_FILE_WRITE, MD_AST_NODE_TYPE_FILE_APPEND, MD_AST_NODE_TYPE_TEE, MD_AST_NODE_TYPE_EMITF, MD_AST_NODE_TYPE_EMITP, MD_AST_NODE_TYPE_EMIT, MD_AST_NODE_TYPE_EMITP_LASHED, MD_AST_NODE_TYPE_EMIT_LASHED, MD_AST_NODE_TYPE_DUMP, MD_AST_NODE_TYPE_EDUMP, MD_AST_NODE_TYPE_PRINT, MD_AST_NODE_TYPE_PRINTN, MD_AST_NODE_TYPE_EPRINT, MD_AST_NODE_TYPE_EPRINTN, MD_AST_NODE_TYPE_STDOUT, MD_AST_NODE_TYPE_STDERR, MD_AST_NODE_TYPE_STREAM, MD_AST_NODE_TYPE_ALL, MD_AST_NODE_TYPE_NOP, // only for parser internals; should not be in the AST returned by the parser MD_AST_NODE_TYPE_WHILE, MD_AST_NODE_TYPE_DO_WHILE, MD_AST_NODE_TYPE_FOR_SREC, MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY, MD_AST_NODE_TYPE_FOR_OOSVAR, MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY, MD_AST_NODE_TYPE_FOR_LOCAL_MAP, MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY, MD_AST_NODE_TYPE_FOR_MAP_LITERAL, MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY, MD_AST_NODE_TYPE_FOR_FUNC_RETVAL, MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY, MD_AST_NODE_TYPE_FOR_VARIABLES, MD_AST_NODE_TYPE_TRIPLE_FOR, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE, MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE, MD_AST_NODE_TYPE_IN, MD_AST_NODE_TYPE_BREAK, MD_AST_NODE_TYPE_CONTINUE, MD_AST_NODE_TYPE_IF_HEAD, MD_AST_NODE_TYPE_IF_ITEM, } mlr_dsl_ast_node_type_t; #define MD_UNUSED_INDEX -1000000000 typedef struct _mlr_dsl_ast_node_t { char* text; mlr_dsl_ast_node_type_t type; sllv_t* pchildren; // For bind-stack allocation only in local-var nodes: unused for any other node types. int vardef_subframe_relative_index; // pass 1 output: which index in subframe int vardef_subframe_index; // pass 1 output: which subframe the variable is defined in int vardef_frame_relative_index; // pass 2 output: index relative to full stack frame // For bind-stack allocation only in statement-block nodes: unused for any other node types. int subframe_var_count; int max_subframe_depth; int max_var_depth; } mlr_dsl_ast_node_t; typedef struct _mlr_dsl_ast_t { mlr_dsl_ast_node_t* proot; } mlr_dsl_ast_t; // ---------------------------------------------------------------- mlr_dsl_ast_t* mlr_dsl_ast_alloc(); mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc(char* text, mlr_dsl_ast_node_type_t type); mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_zary(char* text, mlr_dsl_ast_node_type_t type); mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_unary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa); mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_binary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_ternary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc); mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_quaternary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc, mlr_dsl_ast_node_t* pd); mlr_dsl_ast_node_t* mlr_dsl_ast_node_copy(mlr_dsl_ast_node_t* pother); // These are so the parser can expand '$x += 1' to '$x = $x + 1', etc. mlr_dsl_ast_node_t* mlr_dsl_ast_tree_copy(mlr_dsl_ast_node_t* pother); // See comments in mlr_dsl_parse.y for this seemingly awkward syntax wherein // we change the function name after having set it up. This is a consequence of // bottom-up DSL parsing. mlr_dsl_ast_node_t* mlr_dsl_ast_node_prepend_arg(mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg(mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); mlr_dsl_ast_node_t* mlr_dsl_ast_node_set_function_name(mlr_dsl_ast_node_t* pa, char* name); void mlr_dsl_ast_node_replace_text(mlr_dsl_ast_node_t* pa, char* text); int mlr_dsl_ast_node_type_to_type_mask(mlr_dsl_ast_node_type_t type); int mlr_dsl_ast_node_cannot_be_bare_boolean(mlr_dsl_ast_node_t* pnode); void mlr_dsl_ast_print(mlr_dsl_ast_t* past); void mlr_dsl_ast_node_print(mlr_dsl_ast_node_t* pnode); void mlr_dsl_ast_node_fprint(mlr_dsl_ast_node_t* pnode, FILE* o); void mlr_dsl_ast_node_pretty_fprint(mlr_dsl_ast_node_t* pnode, FILE* o); char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type); void mlr_dsl_ast_node_free(mlr_dsl_ast_node_t* pnode); void mlr_dsl_ast_free(mlr_dsl_ast_t* past); #endif // MLR_DSL_AST_H miller-5.6.2/c/dsl/mlr_dsl_blocked_ast.c000066400000000000000000000043441354153536500201650ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "dsl/mlr_dsl_blocked_ast.h" // ---------------------------------------------------------------- blocked_ast_t* blocked_ast_alloc(mlr_dsl_ast_t* past) { blocked_ast_t* paast = mlr_malloc_or_die(sizeof(blocked_ast_t)); paast->pfunc_defs = sllv_alloc(); paast->psubr_defs = sllv_alloc(); paast->pbegin_blocks = sllv_alloc(); paast->pmain_block = mlr_dsl_ast_node_alloc_zary("main_block", MD_AST_NODE_TYPE_STATEMENT_BLOCK); paast->pend_blocks = sllv_alloc(); if (past->proot->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK) { fprintf(stderr, "%s: internal coding error detected in file %s at line %d:\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); fprintf(stderr, "expected root node type %s but found %s.\n", mlr_dsl_ast_node_describe_type(MD_AST_NODE_TYPE_STATEMENT_BLOCK), mlr_dsl_ast_node_describe_type(past->proot->type)); exit(1); } sllv_t* pnodelist = past->proot->pchildren; while (pnodelist->phead) { mlr_dsl_ast_node_t* pnode = sllv_pop(pnodelist); switch (pnode->type) { case MD_AST_NODE_TYPE_FUNC_DEF: sllv_append(paast->pfunc_defs, pnode); break; case MD_AST_NODE_TYPE_SUBR_DEF: sllv_append(paast->psubr_defs, pnode); break; case MD_AST_NODE_TYPE_BEGIN: sllv_append(paast->pbegin_blocks, pnode); break; case MD_AST_NODE_TYPE_END: sllv_append(paast->pend_blocks, pnode); break; default: sllv_append(paast->pmain_block->pchildren, pnode); break; } } return paast; } // ---------------------------------------------------------------- void blocked_ast_free(blocked_ast_t* paast) { for (sllve_t* pe = paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_free(pe->pvvalue); for (sllve_t* pe = paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_free(pe->pvvalue); for (sllve_t* pe = paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_free(pe->pvvalue); mlr_dsl_ast_node_free(paast->pmain_block); for (sllve_t* pe = paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_free(pe->pvvalue); sllv_free(paast->pfunc_defs); sllv_free(paast->psubr_defs); sllv_free(paast->pbegin_blocks); sllv_free(paast->pend_blocks); free(paast); } miller-5.6.2/c/dsl/mlr_dsl_blocked_ast.h000066400000000000000000000015701354153536500201700ustar00rootroot00000000000000#ifndef MLR_DSL_BLOCKED_AST_H #define MLR_DSL_BLOCKED_AST_H #include "dsl/mlr_dsl_ast.h" #include "containers/sllv.h" // ================================================================ // The Lemon parser produces a single raw abstract syntax tree. This container // simply has the subtrees organized by top-level statement blocks. This is just // a minor reorganization but it makes stack allocation and CST-builds simpler. // ================================================================ typedef struct _blocked_ast_t { sllv_t* pfunc_defs; sllv_t* psubr_defs; sllv_t* pbegin_blocks; mlr_dsl_ast_node_t* pmain_block; sllv_t* pend_blocks; } blocked_ast_t; // This strips nodes off the raw AST and transfers them to the block-structured AST. blocked_ast_t* blocked_ast_alloc(mlr_dsl_ast_t* past); void blocked_ast_free(blocked_ast_t* paast); #endif // MLR_DSL_BLOCKED_AST_H miller-5.6.2/c/dsl/mlr_dsl_cst.c000066400000000000000000000250001354153536500164740ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/hss.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ // The Lemon parser in parsing/mlr_dsl_parse.y builds up an abstract syntax tree // specifically for the CST builder here. // // For clearer visuals on what the ASTs look like: // * See parsing/mlr_dsl_parse.y // * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out // * Do "mlr -n put -v 'your expression goes here'" // ================================================================ static mlr_dsl_ast_node_t* get_list_for_block(mlr_dsl_ast_node_t* pnode); mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags); static void mlr_dsl_cst_resolve_subr_callsites(mlr_dsl_cst_t* pcst); // ---------------------------------------------------------------- // Main entry point for AST-to-CST for mlr put and mlr filter. // // Example AST (using put -v): // // $ mlr -n put -v '#begin{@a=1;@b=2};$m=2;$n=4;end{@y=5;@z=6}' // AST ROOT: // text="list", type=statement_list: // text="begin", type=begin: // text="list", type=statement_list: // text="=", type=oosvar_assignment: // text="oosvar_keylist", type=oosvar_keylist: // text="a", type=string_literal. // text="1", type=numeric_literal. // text="=", type=oosvar_assignment: // text="oosvar_keylist", type=oosvar_keylist: // text="b", type=string_literal. // text="2", type=numeric_literal. // text="=", type=srec_assignment: // text="m", type=field_name. // text="2", type=numeric_literal. // text="=", type=srec_assignment: // text="n", type=field_name. // text="4", type=numeric_literal. // text="end", type=end: // text="list", type=statement_list: // text="=", type=oosvar_assignment: // text="oosvar_keylist", type=oosvar_keylist: // text="y", type=string_literal. // text="5", type=numeric_literal. // text="=", type=oosvar_assignment: // text="oosvar_keylist", type=oosvar_keylist: // text="z", type=string_literal. // text="6", type=numeric_literal. mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_stack_allocation, int type_inferencing, int flush_every_record, int do_final_filter, int negate_final_filter) // for mlr filter { int context_flags = do_final_filter ? IN_MLR_FILTER : 0; // The root node is not populated on empty-string input to the parser. if (past->proot == NULL) { if (do_final_filter) { fprintf(stderr, "%s: filter statement must not be empty.\n", MLR_GLOBALS.bargv0); exit(1); } past->proot = mlr_dsl_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); } mlr_dsl_cst_t* pcst = mlr_malloc_or_die(sizeof(mlr_dsl_cst_t)); pcst->paast = blocked_ast_alloc(past); // Assign local-variable names to indices within frame-stack. blocked_ast_allocate_locals(pcst->paast, trace_stack_allocation); pcst->pfmgr = fmgr_alloc(); pcst->psubr_defsites = lhmsv_alloc(); pcst->psubr_callsite_statements_to_resolve = sllv_alloc(); pcst->flush_every_record = flush_every_record; if (print_ast) { printf("\n"); printf("BLOCKED AST:\n"); } for (sllve_t* pe = pcst->paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pnode = pe->pvvalue; if (print_ast) { printf("\n"); printf("FUNCTION DEFINITION:\n"); mlr_dsl_ast_node_print(pnode); } udf_defsite_state_t* pudf_defsite_state = mlr_dsl_cst_alloc_udf(pcst, pnode, type_inferencing, context_flags); fmgr_install_udf(pcst->pfmgr, pudf_defsite_state); } for (sllve_t* pe = pcst->paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pnode = pe->pvvalue; if (print_ast) { printf("\n"); printf("SUBROUTINE DEFINITION:\n"); mlr_dsl_ast_node_print(pnode); } subr_defsite_t* psubr_defsite = mlr_dsl_cst_alloc_subroutine(pcst, pnode, type_inferencing, context_flags); if (lhmsv_get(pcst->psubr_defsites, psubr_defsite->name)) { fprintf(stderr, "%s: subroutine named \"%s\" has already been defined.\n", MLR_GLOBALS.bargv0, psubr_defsite->name); exit(1); } lhmsv_put(pcst->psubr_defsites, psubr_defsite->name, psubr_defsite, NO_FREE); } pcst->pbegin_blocks = sllv_alloc(); for (sllve_t* pe = pcst->paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pnode = pe->pvvalue; if (print_ast) { printf("\n"); printf("BEGIN-BLOCK:\n"); mlr_dsl_ast_node_print(pnode); } MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->subframe_var_count); for (sllve_t* pf = pnode->pchildren->phead; pf != NULL; pf = pf->pnext) { mlr_dsl_ast_node_t* plistnode = get_list_for_block(pnode); for (sllve_t* pg = plistnode->pchildren->phead; pg != NULL; pg = pg->pnext) { mlr_dsl_ast_node_t* pchild = pg->pvvalue; sllv_append(pblock->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pchild, type_inferencing, context_flags | IN_BEGIN_OR_END)); } } sllv_append(pcst->pbegin_blocks, pblock); } pcst->pend_blocks = sllv_alloc(); for (sllve_t* pe = pcst->paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pnode = pe->pvvalue; if (print_ast) { printf("\n"); printf("END-BLOCK:\n"); mlr_dsl_ast_node_print(pnode); } MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->subframe_var_count); for (sllve_t* pf = pnode->pchildren->phead; pf != NULL; pf = pf->pnext) { mlr_dsl_ast_node_t* plistnode = get_list_for_block(pnode); for (sllve_t* pg = plistnode->pchildren->phead; pg != NULL; pg = pg->pnext) { mlr_dsl_ast_node_t* pchild = pg->pvvalue; sllv_append(pblock->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pchild, type_inferencing, context_flags | IN_BEGIN_OR_END)); } } sllv_append(pcst->pend_blocks, pblock); } if (print_ast) { printf("\n"); printf("MAIN BLOCK:\n"); mlr_dsl_ast_node_print(pcst->paast->pmain_block); } MLR_INTERNAL_CODING_ERROR_IF(pcst->paast->pmain_block->max_var_depth == MD_UNUSED_INDEX); MLR_INTERNAL_CODING_ERROR_IF(pcst->paast->pmain_block->subframe_var_count == MD_UNUSED_INDEX); pcst->pmain_block = cst_top_level_statement_block_alloc(pcst->paast->pmain_block->max_var_depth, pcst->paast->pmain_block->subframe_var_count); for (sllve_t* pe = pcst->paast->pmain_block->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pnode = pe->pvvalue; // The last statement of mlr filter must be a bare boolean. if (do_final_filter && pe->pnext == NULL) { sllv_append(pcst->pmain_block->pblock->pstatements, mlr_dsl_cst_alloc_final_filter_statement( pcst, pnode, negate_final_filter, type_inferencing, context_flags | IN_MLR_FINAL_FILTER)); } else { sllv_append(pcst->pmain_block->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pnode, type_inferencing, context_flags)); } } if (print_ast) { printf("\n"); } // Now that all subroutine/function definitions have been done, resolve // their callsites whose locations we stashed during the CST build. (Without // this delayed resolution, there could be no recursion, and subroutines // could call one another only in the reverse order of their definition. // E.g. if 's' is defined and then 't', then t could call s but s could not // call t [subroutine not defined yet], and neither could call itself.) // // This object-binding step is not a full pass through the CST since we've // maintained pointers into callsites which we can now directly poke. fmgr_resolve_func_callsites(pcst->pfmgr); mlr_dsl_cst_resolve_subr_callsites(pcst); return pcst; } // ---------------------------------------------------------------- void mlr_dsl_cst_free(mlr_dsl_cst_t* pcst, context_t* pctx) { if (pcst == NULL) return; if (pcst->pbegin_blocks != NULL) { for (sllve_t* pe = pcst->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { cst_top_level_statement_block_free(pe->pvvalue, pctx); } sllv_free(pcst->pbegin_blocks); } cst_top_level_statement_block_free(pcst->pmain_block, pctx); if (pcst->pend_blocks != NULL) { for (sllve_t* pe = pcst->pend_blocks->phead; pe != NULL; pe = pe->pnext) { cst_top_level_statement_block_free(pe->pvvalue, pctx); } sllv_free(pcst->pend_blocks); } fmgr_free(pcst->pfmgr, pctx); // Void-star payloads already popped and freed during symbol-resolution phase of CST alloc sllv_free(pcst->psubr_callsite_statements_to_resolve); if (pcst->psubr_defsites != NULL) { for (lhmsve_t* pe = pcst->psubr_defsites->phead; pe != NULL; pe = pe->pnext) { subr_defsite_t* psubr_defsite = pe->pvvalue; mlr_dsl_cst_free_subroutine(psubr_defsite, pctx); } lhmsv_free(pcst->psubr_defsites); } blocked_ast_free(pcst->paast); free(pcst); } // ---------------------------------------------------------------- // For begin, end, cond: there must be one child node, of type list. static mlr_dsl_ast_node_t* get_list_for_block(mlr_dsl_ast_node_t* pnode) { MLR_INTERNAL_CODING_ERROR_IF(pnode->pchildren->phead == NULL); MLR_INTERNAL_CODING_ERROR_IF(pnode->pchildren->phead->pnext != NULL); mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; if (pleft->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK) { fprintf(stderr, "%s: internal coding error detected in file %s at line %d:\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); fprintf(stderr, "expected node type %s but found %s.\n", mlr_dsl_ast_node_describe_type(MD_AST_NODE_TYPE_STATEMENT_BLOCK), mlr_dsl_ast_node_describe_type(pleft->type)); exit(1); } return pleft; } // ---------------------------------------------------------------- static void mlr_dsl_cst_resolve_subr_callsites(mlr_dsl_cst_t* pcst) { while (pcst->psubr_callsite_statements_to_resolve->phead != NULL) { mlr_dsl_cst_statement_t* pstatement = sllv_pop(pcst->psubr_callsite_statements_to_resolve); mlr_dsl_cst_resolve_subr_callsite(pcst, pstatement); } } miller-5.6.2/c/dsl/mlr_dsl_cst.h000066400000000000000000000377151354153536500165210ustar00rootroot00000000000000#ifndef MLR_DSL_CST_H #define MLR_DSL_CST_H #include "cli/mlrcli.h" #include "lib/context.h" #include "containers/lhmsmv.h" #include "containers/local_stack.h" #include "containers/loop_stack.h" #include "containers/type_decl.h" #include "dsl/mlr_dsl_ast.h" #include "dsl/mlr_dsl_blocked_ast.h" #include "dsl/rval_evaluators.h" #include "dsl/rxval_evaluators.h" #include "dsl/function_manager.h" #include "output/multi_out.h" #include "output/multi_lrec_writer.h" // ================================================================ // Concrete syntax tree (CST) derived from an abstract syntax tree (AST). // // Statements are of the form: // // * Assignment of mlrval (i.e. result of expression evaluation, e.g. $name or f($x,$y)) to oosvar (out-of-stream // variables, prefixed with @ sigil) // // * Assignment to srec (in-stream records, with field names prefixed with $ sigil) // // * Copying full srec ($* syntax) to/from an oosvar // // * Oosvar-to-oosvar assignments (recursively if RHS is non-terminal) // // * pattern-action statements: boolean expression with curly-braced statements which are executed only // when the boolean evaluates to true. // // * bare-boolean statements: no-ops unless they have side effects: namely, the matches/does-not-match // operators =~ and !=~ setting regex captures \1, \2, etc. // // * emit statements: these place oosvar key-value pairs into the output stream. These can be of the following forms: // // o 'emit @a; emit @b' which produce separate records such as a=3 and b=4 // // o 'emitf @a, @b' which produce records such as a=3,b=4 // // o For nested maps, 'emit @c, "x", "y"' in which case the first two map levels are pulled out and named "x" and "y" // in separate fields. See containers/mlhmmv.h for more information. // // Further, these statements are organized into three groups: // // * begin: executed once, before the first input record is read. // * main: executed for each input record. // * end: executed once, after the last input record is read. // // The exceptions being, of course, assignment to/from srec is disallowed for begin/end statements since those occur // before/after stream processing, respectively. // ================================================================ // ---------------------------------------------------------------- // dsl/mlr_dsl_stack_allocate.c // Two-pass stack allocator which operates on the block-structured AST // before the CST is build (mlr_dsl_stack_allocate.c). void blocked_ast_allocate_locals(blocked_ast_t* paast, int trace); // ---------------------------------------------------------------- // Forward references for virtual-function prototypes struct _mlr_dsl_cst_t; struct _mlr_dsl_cst_statement_t; struct _subr_defsite_t; // Parameter bag to reduce parameter-marshaling typedef struct _cst_outputs_t { int* pshould_emit_rec; sllv_t* poutrecs; char* oosvar_flatten_separator; cli_writer_opts_t* pwriter_opts; } cst_outputs_t; // ---------------------------------------------------------------- typedef struct _cst_statement_block_t { int subframe_var_count; sllv_t* pstatements; } cst_statement_block_t; cst_statement_block_t* cst_statement_block_alloc(int subframe_var_count); void cst_statement_block_free(cst_statement_block_t* pblock, context_t* pctx); // ---------------------------------------------------------------- typedef struct _cst_top_level_statement_block_t { local_stack_frame_t* pframe; int max_var_depth; cst_statement_block_t* pblock; } cst_top_level_statement_block_t; cst_top_level_statement_block_t* cst_top_level_statement_block_alloc(int max_var_depth, int subframe_var_count); void cst_top_level_statement_block_free(cst_top_level_statement_block_t* pblock, context_t* pctx); // ---------------------------------------------------------------- // Generic handler for a statement. // Handler for statement lists: begin/main/end; cond/if/for/while/do-while. typedef void mlr_dsl_cst_block_handler_t( cst_statement_block_t* pblock, variables_t* pvars, cst_outputs_t* pcst_outputs); // ---------------------------------------------------------------- // mlr_dsl_cst_statement_t is a base class extended by all manner of subclasses. // The following are for their method pointers. typedef struct _mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_allocator_t( struct _mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); typedef void mlr_dsl_cst_statement_handler_t( struct _mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs); typedef void mlr_dsl_cst_statement_freer_t( struct _mlr_dsl_cst_statement_t* pstatement, context_t* pctx); // ---------------------------------------------------------------- // MLR_DSL_CST_STATEMENT OBJECT typedef struct _mlr_dsl_cst_statement_t { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Common to most or all statement types: // For trace-mode. mlr_dsl_ast_node_t* past_node; // Function-pointer for the handler of the given statement type, e.g. srec-assignment, while-loop, etc. mlr_dsl_cst_statement_handler_t* pstatement_handler; // Subclass destructor. It should free whatever's in the pvstate but it should not // free the pstatement itself. mlr_dsl_cst_statement_freer_t* pstatement_freer; // The reason for this being a function pointer is that there are two variants of // statement-list handlers: one for inside loop bodies which has to check // break/continue flags after each statement, and another for outside loop bodies // which doesn't need to check those. (This is a micro-optimization.) For bodyless // statements (e.g. assignment) this is null. cst_statement_block_t* pblock; mlr_dsl_cst_block_handler_t* pblock_handler; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Specific to each statement type: void* pvstate; } mlr_dsl_cst_statement_t; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // For use by the statement-subclass constructors mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc( mlr_dsl_ast_node_t* past_node, mlr_dsl_cst_statement_handler_t* pstatement_handler, mlr_dsl_cst_statement_freer_t* pstatement_freer, void* pvstate); mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc_with_block( mlr_dsl_ast_node_t* past_node, mlr_dsl_cst_statement_handler_t* pstatement_handler, cst_statement_block_t* pblock, mlr_dsl_cst_block_handler_t* pblock_handler, mlr_dsl_cst_statement_freer_t* pstatement_freer, void* pvstate); // ---------------------------------------------------------------- // MLR_DSL_CST OBJECT typedef struct _mlr_dsl_cst_t { sllv_t* pbegin_blocks; cst_top_level_statement_block_t* pmain_block; sllv_t* pend_blocks; // Function manager for built-in functions as well as user-defined functions (which are CST-specific). fmgr_t* pfmgr; // Subroutine bodies lhmsv_t* psubr_defsites; // Subroutine callsites, used to bootstrap (e.g. subroutine f calls subroutine g before the latter // has been defined). sllv_t* psubr_callsite_statements_to_resolve; // fflush on emit/tee/print/dump int flush_every_record; // The CST object retains the AST pointer (in order to reuse its strings etc. with minimal copying) // and will free the AST in the CST destructor. blocked_ast_t* paast; } mlr_dsl_cst_t; // ---------------------------------------------------------------- // CONSTRUCTORS/DESTRUCTORS/METHODS // Notes: // * do_final_filter is FALSE for mlr put, TRUE for mlr filter. // * negate_final_filter is TRUE for mlr filter -x. // * The CST object strips nodes off the raw AST, constructed by the Lemon parser, in order // to do analysis on it. Nonetheless the caller should free what's left. mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_stack_allocation, int type_inferencing, int flush_every_record, int do_final_filter, int negate_final_filter); mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags); void mlr_dsl_cst_free(mlr_dsl_cst_t* pcst, context_t* pctx); void mlr_dsl_cst_statement_free(mlr_dsl_cst_statement_t* pstatement, context_t* pctx); // Top-level entry point, e.g. from mapper_put. void mlr_dsl_cst_handle_top_level_statement_blocks( sllv_t* ptop_level_blocks, // block bodies for begins, main, ends variables_t* pvars, cst_outputs_t* pcst_outputs); void mlr_dsl_cst_handle_top_level_statement_block( cst_top_level_statement_block_t* ptop_level_block, variables_t* pvars, cst_outputs_t* pcst_outputs); // Recursive entry point: block bodies for begin, main, end; cond, if, for, while. void mlr_dsl_cst_handle_statement_block( cst_statement_block_t* pblock, variables_t* pvars, cst_outputs_t* pcst_outputs); void mlr_dsl_cst_handle_statement_block_with_break_continue( cst_statement_block_t* pblock, variables_t* pvars, cst_outputs_t* pcst_outputs); // Statement lists which are not curly-braced bodies: start/continuation/update statements for triple-for. void mlr_dsl_cst_handle_statement_list( sllv_t* pstatements, variables_t* pvars, cst_outputs_t* pcst_outputs); // ================================================================ // dsl/mlr_dsl_cst_func_subr.c // ---------------------------------------------------------------- // cst_udf_state_t is data needed to execute the body of a user-defined function which is implemented by CST statements. // udf_defsite_state_t is data needed for any user-defined function (no matter how implemented). typedef struct _cst_udf_state_t { char* name; int arity; char** parameter_names; int* parameter_type_masks; cst_top_level_statement_block_t* ptop_level_block; char* return_value_type_name; int return_value_type_mask; } cst_udf_state_t; udf_defsite_state_t* mlr_dsl_cst_alloc_udf( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); void mlr_dsl_cst_free_udf(cst_udf_state_t* pstate, context_t* pctx); // ---------------------------------------------------------------- typedef struct _subr_callsite_t { char* name; int arity; int type_inferencing; int context_flags; } subr_callsite_t; typedef struct _subr_defsite_t { char* name; int arity; char** parameter_names; int* parameter_type_masks; cst_top_level_statement_block_t* ptop_level_block; } subr_defsite_t; subr_defsite_t* mlr_dsl_cst_alloc_subroutine( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); void mlr_dsl_cst_free_subroutine(subr_defsite_t* psubr_defsite, context_t* pctx); // Invoked directly from the CST statement handler for a subroutine callsite. // (Functions, by contrast, are invoked by callback from the right-hand-site-evaluator logic // -- hence no execute-function method here.) void mlr_dsl_cst_execute_subroutine(subr_defsite_t* pstate, variables_t* pvars, cst_outputs_t* pcst_outputs, int callsite_arity, boxed_xval_t* args); // ================================================================ // For on-line help / manpage // dsl/mlr_dsl_cst_keywords.c void mlr_dsl_list_all_keywords_raw(FILE* output_stream); // Pass function_name == NULL to get usage for all keywords: void mlr_dsl_keyword_usage(FILE* output_stream, char* keyword); // ================================================================ // Specific CST-statement subclasses // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_condish_statements.c mlr_dsl_cst_statement_allocator_t alloc_conditional_block; mlr_dsl_cst_statement_allocator_t alloc_if_head; mlr_dsl_cst_statement_allocator_t alloc_while; mlr_dsl_cst_statement_allocator_t alloc_do_while; mlr_dsl_cst_statement_allocator_t alloc_bare_boolean; mlr_dsl_cst_statement_t* alloc_filter( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags); mlr_dsl_cst_statement_t* alloc_final_filter( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_terminal_assignment_statements.c mlr_dsl_cst_statement_allocator_t alloc_srec_assignment; mlr_dsl_cst_statement_allocator_t alloc_indirect_srec_assignment; mlr_dsl_cst_statement_allocator_t alloc_positional_srec_name_assignment; mlr_dsl_cst_statement_allocator_t alloc_env_assignment; // dsl/mlr_dsl_cst_map_assignment_statements.c mlr_dsl_cst_statement_allocator_t alloc_full_srec_assignment; mlr_dsl_cst_statement_t* alloc_local_variable_definition( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, int type_mask); mlr_dsl_cst_statement_allocator_t alloc_nonindexed_local_variable_assignment; mlr_dsl_cst_statement_allocator_t alloc_indexed_local_variable_assignment; mlr_dsl_cst_statement_allocator_t alloc_oosvar_assignment; mlr_dsl_cst_statement_allocator_t alloc_full_oosvar_assignment; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_unset_statements.c mlr_dsl_cst_statement_allocator_t alloc_unset; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_for_srec_statements.c mlr_dsl_cst_statement_allocator_t alloc_for_srec; mlr_dsl_cst_statement_allocator_t alloc_for_srec_key_only; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_for_map_statements.c mlr_dsl_cst_statement_allocator_t alloc_for_map; mlr_dsl_cst_statement_allocator_t alloc_for_map_key_only; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_triple_for_statements.c mlr_dsl_cst_statement_allocator_t alloc_triple_for; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_loop_control_statements.c mlr_dsl_cst_statement_allocator_t alloc_break; mlr_dsl_cst_statement_allocator_t alloc_continue; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_return_statements.c mlr_dsl_cst_statement_allocator_t alloc_return_void; // For subroutines mlr_dsl_cst_statement_allocator_t alloc_return_value; // For UDFs // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_output_statements.c mlr_dsl_cst_statement_t* alloc_print( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, char* print_terminator); mlr_dsl_cst_statement_allocator_t alloc_tee; mlr_dsl_cst_statement_allocator_t alloc_emitf; mlr_dsl_cst_statement_t* alloc_emit( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, int do_full_prefixing); mlr_dsl_cst_statement_t* alloc_emit_lashed( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, int do_full_prefixing); mlr_dsl_cst_statement_allocator_t alloc_dump; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // dsl/mlr_dsl_cst_func_subr.c // When we allocate a callsite we can do so before the callee has been defined. // Hence the two-step process, with the second step being an object-binding step. mlr_dsl_cst_statement_allocator_t alloc_subr_callsite_statement; void mlr_dsl_cst_resolve_subr_callsite(mlr_dsl_cst_t* pcst, mlr_dsl_cst_statement_t* pstatement); #endif // MLR_DSL_CST_H miller-5.6.2/c/dsl/mlr_dsl_cst_condish_statements.c000066400000000000000000000511241354153536500224600ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ typedef struct _conditional_block_state_t { rval_evaluator_t* pexpression_evaluator; } conditional_block_state_t; static mlr_dsl_cst_statement_freer_t free_conditional_block; static mlr_dsl_cst_statement_handler_t handle_conditional_block; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_conditional_block(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { conditional_block_state_t* pstate = mlr_malloc_or_die(sizeof(conditional_block_state_t)); pstate->pexpression_evaluator = NULL; // Right node is a list of statements to be executed if the left evaluates to true. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( pleft, pcst->pfmgr, type_inferencing, context_flags); MLR_INTERNAL_CODING_ERROR_IF(pright->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pright->subframe_var_count); for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags); sllv_append(pblock->pstatements, pchild_statement); } mlr_dsl_cst_block_handler_t* pblock_handler = (context_flags & IN_BREAKABLE) ? mlr_dsl_cst_handle_statement_block_with_break_continue : mlr_dsl_cst_handle_statement_block; return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_conditional_block, pblock, pblock_handler, free_conditional_block, pstate); } // ---------------------------------------------------------------- static void free_conditional_block(mlr_dsl_cst_statement_t* pstatement, context_t* _) { conditional_block_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_conditional_block( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { conditional_block_state_t* pstate = pstatement->pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) { mv_set_boolean_strict(&val); if (val.u.boolv) { pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); } } local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } // ================================================================ typedef struct _if_head_state_t { sllv_t* pif_chain_statements; } if_head_state_t; typedef struct _if_item_state_t { rval_evaluator_t* pexpression_evaluator; } if_item_state_t; static mlr_dsl_cst_statement_handler_t handle_if_head; static mlr_dsl_cst_statement_freer_t free_if_head; static mlr_dsl_cst_statement_freer_t free_if_item; static mlr_dsl_cst_statement_t* alloc_if_item( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pitemnode, mlr_dsl_ast_node_t* pexprnode, mlr_dsl_ast_node_t* plistnode, int type_inferencing, int context_flags); // ---------------------------------------------------------------- // Example parser-input: // // if (NR == 9) { // $x = 10; // $x = 11 // } elif (NR == 12) { // $x = 13; // $x = 14 // } else { // $x = 15; // $x = 16 // }; // // Corresponding parser-output AST: // if_head (if_head): // if (if_item): // == (operator): // NR (context_variable). // 9 (numeric_literal). // list (statement_list): // = (srec_assignment): // x (field_name). // 10 (numeric_literal). // = (srec_assignment): // x (field_name). // 11 (numeric_literal). // elif (if_item): // == (operator): // NR (context_variable). // 12 (numeric_literal). // list (statement_list): // = (srec_assignment): // x (field_name). // 13 (numeric_literal). // = (srec_assignment): // x (field_name). // 14 (numeric_literal). // else (if_item): // list (statement_list): // = (srec_assignment): // x (field_name). // 15 (numeric_literal). // = (srec_assignment): // x (field_name). // 16 (numeric_literal). mlr_dsl_cst_statement_t* alloc_if_head(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { if_head_state_t* pstate = mlr_malloc_or_die(sizeof(if_head_state_t)); pstate->pif_chain_statements = sllv_alloc(); for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { // For if and elif: // * Left subnode is the AST for the boolean expression. // * Right subnode is a list of statements to be executed if the left evaluates to true. // For else: // * Sole subnode is a list of statements to be executed. mlr_dsl_ast_node_t* pitemnode = pe->pvvalue; mlr_dsl_ast_node_t* pexprnode = NULL; mlr_dsl_ast_node_t* plistnode = NULL; if (pitemnode->pchildren->length == 2) { pexprnode = pitemnode->pchildren->phead->pvvalue; plistnode = pitemnode->pchildren->phead->pnext->pvvalue; } else { pexprnode = NULL; plistnode = pitemnode->pchildren->phead->pvvalue; } sllv_append(pstate->pif_chain_statements, alloc_if_item(pcst, pitemnode, pexprnode, plistnode, type_inferencing, context_flags) ); } mlr_dsl_cst_block_handler_t* pblock_handler = (context_flags & IN_BREAKABLE) ? mlr_dsl_cst_handle_statement_block_with_break_continue : mlr_dsl_cst_handle_statement_block; return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_if_head, NULL, pblock_handler, free_if_head, pstate); } static mlr_dsl_cst_statement_t* alloc_if_item(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pitemnode, mlr_dsl_ast_node_t* pexprnode, mlr_dsl_ast_node_t* plistnode, int type_inferencing, int context_flags) { if_item_state_t* pstate = mlr_malloc_or_die(sizeof(if_item_state_t)); MLR_INTERNAL_CODING_ERROR_IF(plistnode->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(plistnode->subframe_var_count); for (sllve_t* pe = plistnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags); sllv_append(pblock->pstatements, pchild_statement); } pstate->pexpression_evaluator = pexprnode != NULL ? rval_evaluator_alloc_from_ast(pexprnode, pcst->pfmgr, type_inferencing, context_flags) // if-statement or elif-statement : rval_evaluator_alloc_from_boolean(TRUE); // else-statement return mlr_dsl_cst_statement_valloc_with_block( pitemnode, NULL, // handled by the containing if-head evaluator pblock, NULL, // handled by the containing if-head evaluator free_if_item, pstate); } // ---------------------------------------------------------------- static void free_if_head(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { if_head_state_t* pstate = pstatement->pvstate; if (pstate->pif_chain_statements != NULL) { for (sllve_t* pe = pstate->pif_chain_statements->phead; pe != NULL; pe = pe->pnext) mlr_dsl_cst_statement_free(pe->pvvalue, pctx); sllv_free(pstate->pif_chain_statements); } free(pstate); } static void free_if_item(mlr_dsl_cst_statement_t* pstatement, context_t* _) { if_item_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_if_head( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { if_head_state_t* pstate = pstatement->pvstate; for (sllve_t* pe = pstate->pif_chain_statements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pitem_statement = pe->pvvalue; if_item_state_t* pitem_state = pitem_statement->pvstate; rval_evaluator_t* pexpression_evaluator = pitem_state->pexpression_evaluator; mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) { mv_set_boolean_strict(&val); if (val.u.boolv) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pitem_statement->pblock->subframe_var_count); pstatement->pblock_handler(pitem_statement->pblock, pvars, pcst_outputs); local_stack_subframe_exit(pframe, pitem_statement->pblock->subframe_var_count); break; } } } } // ================================================================ typedef struct _while_state_t { rval_evaluator_t* pexpression_evaluator; } while_state_t; static mlr_dsl_cst_statement_handler_t handle_while; static mlr_dsl_cst_statement_freer_t free_while; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_while(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { while_state_t* pstate = mlr_malloc_or_die(sizeof(while_state_t)); pstate->pexpression_evaluator = NULL; // Left child node is the AST for the boolean expression. // Right child node is the list of statements in the body. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(pright->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pright->subframe_var_count); for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags); sllv_append(pblock->pstatements, pchild_statement); } pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( pleft, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_while, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_while, pstate); } // ---------------------------------------------------------------- static void free_while(mlr_dsl_cst_statement_t* pstatement, context_t* _) { while_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_while( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { while_state_t* pstate = pstatement->pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; while (TRUE) { mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) { mv_set_boolean_strict(&val); if (val.u.boolv) { pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); break; } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } } else { break; } } else { break; } } loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } // ================================================================ typedef struct _do_while_state_t { rval_evaluator_t* pexpression_evaluator; } do_while_state_t; static mlr_dsl_cst_statement_handler_t handle_do_while; static mlr_dsl_cst_statement_freer_t free_do_while; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_do_while(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { do_while_state_t* pstate = mlr_malloc_or_die(sizeof(do_while_state_t)); pstate->pexpression_evaluator = NULL; // Left child node is the list of statements in the body. // Right child node is the AST for the boolean expression. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(pleft->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pright->subframe_var_count); for (sllve_t* pe = pleft->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags); sllv_append(pblock->pstatements, pchild_statement); } pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( pright, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_do_while, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_do_while, pstate); } // ---------------------------------------------------------------- static void free_do_while(mlr_dsl_cst_statement_t* pstatement, context_t* _) { do_while_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_do_while( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { do_while_state_t* pstate = pstatement->pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; while (TRUE) { pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); break; } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); // don't skip the boolean test } mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) { mv_set_boolean_strict(&val); if (!val.u.boolv) { break; } } else { break; } } loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } // ================================================================ typedef struct _bare_boolean_state_t { rval_evaluator_t* pexpression_evaluator; } bare_boolean_state_t; static mlr_dsl_cst_statement_handler_t handle_bare_boolean; static mlr_dsl_cst_statement_freer_t free_bare_boolean; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_bare_boolean(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { bare_boolean_state_t* pstate = mlr_malloc_or_die(sizeof(bare_boolean_state_t)); pstate->pexpression_evaluator = NULL; pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( pnode, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, handle_bare_boolean, free_bare_boolean, pstate); } // ---------------------------------------------------------------- static void free_bare_boolean(mlr_dsl_cst_statement_t* pstatement, context_t* _) { bare_boolean_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_bare_boolean( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { bare_boolean_state_t* pstate = pstatement->pvstate; rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) mv_set_boolean_strict(&val); } // ================================================================ typedef struct _filter_state_t { rval_evaluator_t* pexpression_evaluator; } filter_state_t; static mlr_dsl_cst_statement_handler_t handle_filter; static mlr_dsl_cst_statement_freer_t free_filter; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_filter( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { filter_state_t* pstate = mlr_malloc_or_die(sizeof(filter_state_t)); mlr_dsl_ast_node_t* pchild = pnode->pchildren->phead->pvvalue; pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( pchild, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, handle_filter, free_filter, pstate); } // ---------------------------------------------------------------- static void free_filter(mlr_dsl_cst_statement_t* pstatement, context_t* _) { filter_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_filter( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { filter_state_t* pstate = pstatement->pvstate; rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) { mv_set_boolean_strict(&val); *pcst_outputs->pshould_emit_rec = val.u.boolv; } else { *pcst_outputs->pshould_emit_rec = FALSE; } } // ================================================================ typedef struct _final_filter_state_t { rval_evaluator_t* pexpression_evaluator; int negate_final_filter; } final_filter_state_t; static mlr_dsl_cst_statement_handler_t handle_final_filter; static mlr_dsl_cst_statement_freer_t free_final_filter; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_final_filter( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags) { final_filter_state_t* pstate = mlr_malloc_or_die(sizeof(final_filter_state_t)); pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( pnode, pcst->pfmgr, type_inferencing, context_flags); pstate->negate_final_filter = negate_final_filter; return mlr_dsl_cst_statement_valloc( pnode, handle_final_filter, free_final_filter, pstate); } // ---------------------------------------------------------------- static void free_final_filter(mlr_dsl_cst_statement_t* pstatement, context_t* _) { final_filter_state_t* pstate = pstatement->pvstate; pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_final_filter( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { final_filter_state_t* pstate = pstatement->pvstate; rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); if (mv_is_non_null(&val)) { mv_set_boolean_strict(&val); *pcst_outputs->pshould_emit_rec = val.u.boolv ^ pstate->negate_final_filter; } else { *pcst_outputs->pshould_emit_rec = FALSE; } } miller-5.6.2/c/dsl/mlr_dsl_cst_for_map_statements.c000066400000000000000000000350731354153536500224610ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" static void handle_for_map_aux( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs, mlhmmv_xvalue_t* psubmap, char** prest_for_k_variable_names, int* prest_for_k_frame_relative_indices, int* prest_for_k_type_masks, int prest_for_k_count); // ================================================================ typedef struct _for_map_state_t { char** k_variable_names; int* k_frame_relative_indices; int* k_type_masks; int k_count; char* v_variable_name; int v_frame_relative_index; int v_type_mask; rxval_evaluator_t* ptarget_xevaluator; } for_map_state_t; static mlr_dsl_cst_statement_handler_t handle_for_map; static mlr_dsl_cst_statement_freer_t free_for_map; // ---------------------------------------------------------------- // $ mlr -n put -v 'for((k1,k2,k3),v in @a["4"][$5]) { $6 = 7; $8 = 9}' // AST ROOT: // text="block", type=STATEMENT_BLOCK: // text="for", type=FOR_OOSVAR: // text="key_and_value_variables", type=FOR_VARIABLES: // text="key_variables", type=FOR_VARIABLES: // text="k1", type=UNTYPED_LOCAL_DEFINITION. // text="k2", type=UNTYPED_LOCAL_DEFINITION. // text="k3", type=UNTYPED_LOCAL_DEFINITION. // text="v", type=UNTYPED_LOCAL_DEFINITION. // text="oosvar_keylist", type=OOSVAR_KEYLIST: // text="a", type=STRING_LITERAL. // text="4", type=STRING_LITERAL. // text="5", type=FIELD_NAME. // text="for_loop_oosvar_block", type=STATEMENT_BLOCK: // text="=", type=SREC_ASSIGNMENT: // text="6", type=FIELD_NAME. // text="7", type=NUMERIC_LITERAL. // text="=", type=SREC_ASSIGNMENT: // text="8", type=FIELD_NAME. // text="9", type=NUMERIC_LITERAL. mlr_dsl_cst_statement_t* alloc_for_map(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { for_map_state_t* pstate = mlr_malloc_or_die(sizeof(for_map_state_t)); pstate->k_variable_names = NULL; pstate->k_frame_relative_indices = NULL; pstate->k_type_masks = NULL; pstate->k_count = 0; pstate->v_variable_name = NULL; pstate->v_frame_relative_index = MD_UNUSED_INDEX; pstate->v_type_mask = 0; pstate->ptarget_xevaluator = NULL; // Left child node is list of bound variables. // - Left subnode is namelist for key boundvars. // - Right subnode is name for value boundvar. // Middle child node is keylist for basepoint in the oosvar mlhmmv. // Right child node is the list of statements in the body. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* psubleft = pleft->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* psubright = pleft->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pmiddle = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pnext->pvvalue; pstate->k_variable_names = mlr_malloc_or_die(sizeof(char*) * psubleft->pchildren->length); pstate->k_frame_relative_indices = mlr_malloc_or_die(sizeof(int) * psubleft->pchildren->length); pstate->k_type_masks = mlr_malloc_or_die(sizeof(int) * psubleft->pchildren->length); pstate->k_count = 0; for (sllve_t* pe = psubleft->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pnamenode = pe->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(pnamenode->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->k_variable_names[pstate->k_count] = pnamenode->text; pstate->k_frame_relative_indices[pstate->k_count] = pnamenode->vardef_frame_relative_index; pstate->k_type_masks[pstate->k_count] = mlr_dsl_ast_node_type_to_type_mask(pnamenode->type); pstate->k_count++; } pstate->v_variable_name = psubright->text; MLR_INTERNAL_CODING_ERROR_IF(psubright->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->v_frame_relative_index = psubright->vardef_frame_relative_index; pstate->v_type_mask = mlr_dsl_ast_node_type_to_type_mask(psubright->type); pstate->ptarget_xevaluator = rxval_evaluator_alloc_from_ast( pmiddle, pcst->pfmgr, type_inferencing, context_flags); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags)); } return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_for_map, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_for_map, pstate); } // ---------------------------------------------------------------- static void free_for_map(mlr_dsl_cst_statement_t* pstatement, context_t* _) { for_map_state_t* pstate = pstatement->pvstate; free(pstate->k_variable_names); free(pstate->k_frame_relative_indices); free(pstate->k_type_masks); pstate->ptarget_xevaluator->pfree_func(pstate->ptarget_xevaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_for_map( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { for_map_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; // Evaluate the keylist: e.g. in 'for (k,v in @a[$3][x]) { ... }', find the values of $3 // and x for the current record and stack frame. The keylist bindings are outside the scope // of the for-loop, while the k is bound within the for-loop. boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); if (!boxed_xval.xval.is_terminal) { // is a map // Copy the map for the very likely case that it is being updated inside the for-loop. // But ephemerals (map-literals, function return values) aren't named and so can't // be modified and so don't need to be copied. mlhmmv_xvalue_t* pmap = &boxed_xval.xval; mlhmmv_xvalue_t copy; if (!boxed_xval.is_ephemeral) { copy = mlhmmv_xvalue_copy(&boxed_xval.xval); pmap = © } local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); if (!pmap->is_terminal && pmap->pnext_level != NULL) { // Recurse over the for-k-names, e.g. ["k1", "k2"], on each call descending one level // deeper into the map. Note there must be at least one k-name so we are assuming // the for-loop within handle_for_map_aux was gone through once & thus // mlr_dsl_cst_handle_statement_block_with_break_continue was called through there. handle_for_map_aux(pstatement, pvars, pcst_outputs, pmap, pstate->k_variable_names, pstate->k_frame_relative_indices, pstate->k_type_masks, pstate->k_count); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); } if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } } if (!boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(©); } loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } static void handle_for_map_aux( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs, mlhmmv_xvalue_t* psubmap, char** prest_for_k_variable_names, int* prest_for_k_frame_relative_indices, int* prest_for_k_type_masks, int prest_for_k_count) { for_map_state_t* pstate = pstatement->pvstate; if (prest_for_k_count > 0) { // Keep recursing over remaining k-names if (psubmap->is_terminal) { // The submap was too shallow for the user-specified k-names; there are no terminals here. } else { // Loop over keys at this submap level: for (mlhmmv_level_entry_t* pe = psubmap->pnext_level->phead; pe != NULL; pe = pe->pnext) { // Bind the k-name to the entry-key mlrval: local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); // xxx note copy/ref semantics local_stack_frame_define_terminal(pframe, prest_for_k_variable_names[0], prest_for_k_frame_relative_indices[0], prest_for_k_type_masks[0], mv_copy(&pe->level_key)); // Recurse into the next-level submap: handle_for_map_aux(pstatement, pvars, pcst_outputs, &pe->level_xvalue, &prest_for_k_variable_names[1], &prest_for_k_frame_relative_indices[1], &prest_for_k_type_masks[1], prest_for_k_count - 1); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { // Bit cleared in recursive caller return; } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } } } } else { // End of recursion: k-names have all been used up // Bind the v-name to the terminal mlrval: local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); // xxx note copy/ref semantics local_stack_frame_define_extended(pframe, pstate->v_variable_name, pstate->v_frame_relative_index, pstate->v_type_mask, mlhmmv_xvalue_copy(psubmap)); // Execute the loop-body statements: pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); } } // ================================================================ typedef struct _for_map_key_only_state_t { char* k_variable_name; int k_frame_relative_index; int k_type_mask; rxval_evaluator_t* ptarget_xevaluator; } for_map_key_only_state_t; static mlr_dsl_cst_statement_handler_t handle_for_map_key_only; static mlr_dsl_cst_statement_freer_t free_for_map_key_only; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_for_map_key_only(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { for_map_key_only_state_t* pstate = mlr_malloc_or_die(sizeof(for_map_key_only_state_t)); pstate->k_variable_name = NULL; pstate->k_frame_relative_index = MD_UNUSED_INDEX; pstate->k_type_mask = 0; pstate->ptarget_xevaluator = NULL; // Left child node is single bound variable // Middle child node is keylist for basepoint in the oosvar mlhmmv. // Right child node is the list of statements in the body. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pmiddle = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(pleft->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->k_variable_name = pleft->text; pstate->k_frame_relative_index = pleft->vardef_frame_relative_index; pstate->k_type_mask = mlr_dsl_ast_node_type_to_type_mask(pleft->type); pstate->ptarget_xevaluator = rxval_evaluator_alloc_from_ast( pmiddle, pcst->pfmgr, type_inferencing, context_flags); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags)); } return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_for_map_key_only, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_for_map_key_only, pstate); } // ---------------------------------------------------------------- static void free_for_map_key_only(mlr_dsl_cst_statement_t* pstatement, context_t* _) { for_map_key_only_state_t* pstate = pstatement->pvstate; pstate->ptarget_xevaluator->pfree_func(pstate->ptarget_xevaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_for_map_key_only( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { for_map_key_only_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; // Evaluate the keylist: e.g. in 'for (k in @a[$3][x]) { ... }', find the values of $3 // and x for the current record and stack frame. The keylist bindings are outside the scope // of the for-loop, while the k is bound within the for-loop. boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); if (!boxed_xval.xval.is_terminal) { // is a map // Copy the map for the very likely case that it is being updated inside the for-loop. // But ephemerals (map-literals, function return values) aren't named and so can't // be modified and so don't need to be copied. mlhmmv_xvalue_t* pmap = &boxed_xval.xval; mlhmmv_xvalue_t copy; if (!boxed_xval.is_ephemeral) { copy = mlhmmv_xvalue_copy(&boxed_xval.xval); pmap = © } local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); sllv_t* pkeys = mlhmmv_xvalue_copy_keys_nonindexed(pmap); for (sllve_t* pe = pkeys->phead; pe != NULL; pe = pe->pnext) { // Bind the k-name to the current key: local_stack_frame_define_terminal(pframe, pstate->k_variable_name, pstate->k_frame_relative_index, pstate->k_type_mask, mv_copy(pe->pvvalue)); // Execute the loop-body statements: pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); } if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } mv_free(pe->pvvalue); free(pe->pvvalue); } sllv_free(pkeys); if (!boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(©); } loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } miller-5.6.2/c/dsl/mlr_dsl_cst_for_srec_statements.c000066400000000000000000000257031354153536500226370ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ---------------------------------------------------------------- static mlr_dsl_cst_statement_freer_t free_for_srec; static mlr_dsl_cst_statement_handler_t handle_for_srec; // The variable names are used only for type-decl exceptions. Otherwise the // names are replaced with frame-relative indices by the stack allocator. typedef struct _for_srec_state_t { char* k_variable_name; int k_frame_relative_index; int k_type_mask; char* v_variable_name; int v_frame_relative_index; int v_type_mask; type_inferenced_srec_field_copy_getter_t* ptype_inferenced_srec_field_copy_getter; } for_srec_state_t; // ---------------------------------------------------------------- // $ mlr -n put -v 'for (k,v in $*) { $x=1; $y=2 }' // AST ROOT: // text="block", type=STATEMENT_BLOCK: // text="for", type=FOR_SREC: // text="variables", type=FOR_VARIABLES: // text="k", type=UNTYPED_LOCAL_DEFINITION. // text="v", type=UNTYPED_LOCAL_DEFINITION. // text="for_full_srec_block", type=STATEMENT_BLOCK: // text="=", type=SREC_ASSIGNMENT: // text="x", type=FIELD_NAME. // text="1", type=NUMERIC_LITERAL. // text="=", type=SREC_ASSIGNMENT: // text="y", type=FIELD_NAME. // text="2", type=NUMERIC_LITERAL. mlr_dsl_cst_statement_t* alloc_for_srec(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { for_srec_state_t* pstate = mlr_malloc_or_die(sizeof(for_srec_state_t)); pstate->k_variable_name = NULL; pstate->k_frame_relative_index = 0; pstate->k_type_mask = TYPE_MASK_ANY; pstate->v_variable_name = NULL; pstate->v_frame_relative_index = 0; pstate->v_type_mask = TYPE_MASK_ANY; pstate-> ptype_inferenced_srec_field_copy_getter = NULL; // Left child node is list of bound variables. // Right child node is the list of statements in the body. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pknode = pleft->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pvnode = pleft->pchildren->phead->pnext->pvvalue; if (streq(pknode->text, pvnode->text)) { fprintf(stderr, "%s: duplicate for-loop boundvars \"%s\" and \"%s\".\n", MLR_GLOBALS.bargv0, pknode->text, pvnode->text); exit(1); } pstate->k_variable_name = mlr_strdup_or_die(pknode->text); pstate->v_variable_name = mlr_strdup_or_die(pvnode->text); MLR_INTERNAL_CODING_ERROR_IF(pknode->vardef_frame_relative_index == MD_UNUSED_INDEX); MLR_INTERNAL_CODING_ERROR_IF(pvnode->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->k_frame_relative_index = pknode->vardef_frame_relative_index; pstate->v_frame_relative_index = pvnode->vardef_frame_relative_index; pstate->k_type_mask = mlr_dsl_ast_node_type_to_type_mask(pknode->type); pstate->v_type_mask = mlr_dsl_ast_node_type_to_type_mask(pvnode->type); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags)); } pstate->ptype_inferenced_srec_field_copy_getter = (type_inferencing == TYPE_INFER_STRING_ONLY) ? get_copy_srec_value_string_only_aux : (type_inferencing == TYPE_INFER_STRING_FLOAT) ? get_copy_srec_value_string_float_aux : (type_inferencing == TYPE_INFER_STRING_FLOAT_INT) ? get_copy_srec_value_string_float_int_aux : NULL; MLR_INTERNAL_CODING_ERROR_IF(pstate->ptype_inferenced_srec_field_copy_getter == NULL); return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_for_srec, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_for_srec, pstate); } // ---------------------------------------------------------------- static void free_for_srec(mlr_dsl_cst_statement_t* pstatement, context_t* _) { for_srec_state_t* pstate = pstatement->pvstate; free(pstate->k_variable_name); free(pstate->v_variable_name); free(pstate); } // ---------------------------------------------------------------- static void handle_for_srec( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { for_srec_state_t* pstate = pstatement->pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); // Copy the lrec for the very likely case that it is being updated inside the for-loop. lrec_t* pcopyrec = lrec_copy(pvars->pinrec); lhmsmv_t* pcopyoverlay = lhmsmv_copy(pvars->ptyped_overlay); for (lrece_t* pe = pcopyrec->phead; pe != NULL; pe = pe->pnext) { mv_t mvkey = mv_from_string_no_free(pe->key); mv_t mvval = pstate->ptype_inferenced_srec_field_copy_getter(pe, pcopyoverlay); local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_frame_define_terminal(pframe, pstate->k_variable_name, pstate->k_frame_relative_index, pstate->k_type_mask, mvkey); local_stack_frame_define_terminal(pframe, pstate->v_variable_name, pstate->v_frame_relative_index, pstate->v_type_mask, mvval); pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); break; } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } } lhmsmv_free(pcopyoverlay); lrec_free(pcopyrec); loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } // ---------------------------------------------------------------- static mlr_dsl_cst_statement_freer_t free_for_srec_key_only; static mlr_dsl_cst_statement_handler_t handle_for_srec_key_only; // The variable names are used only for type-decl exceptions. Otherwise the // names are replaced with frame-relative indices by the stack allocator. typedef struct _for_srec_key_only_state_t { char* k_variable_name; int k_frame_relative_index; int k_type_mask; type_inferenced_srec_field_copy_getter_t* ptype_inferenced_srec_field_copy_getter; } for_srec_key_only_state_t; // ---------------------------------------------------------------- // $ mlr -n put -v 'for (k in $*) { $x=1; $y=2 }' // // AST ROOT: // text="block", type=STATEMENT_BLOCK: // text="for", type=FOR_SREC_KEY_ONLY: // text="variables", type=FOR_VARIABLES: // text="k", type=UNTYPED_LOCAL_DEFINITION. // text="for_full_srec_block", type=STATEMENT_BLOCK: // text="=", type=SREC_ASSIGNMENT: // text="x", type=FIELD_NAME. // text="1", type=NUMERIC_LITERAL. // text="=", type=SREC_ASSIGNMENT: // text="y", type=FIELD_NAME. // text="2", type=NUMERIC_LITERAL. mlr_dsl_cst_statement_t* alloc_for_srec_key_only(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { for_srec_key_only_state_t* pstate = mlr_malloc_or_die(sizeof(for_srec_key_only_state_t)); pstate->k_variable_name = NULL; pstate->k_frame_relative_index = 0; pstate->k_type_mask = TYPE_MASK_ANY; pstate-> ptype_inferenced_srec_field_copy_getter = NULL; // Left child node is list of bound variables. // Right child node is the list of statements in the body. mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pknode = pleft->pchildren->phead->pvvalue; pstate->k_variable_name = mlr_strdup_or_die(pknode->text); MLR_INTERNAL_CODING_ERROR_IF(pknode->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->k_frame_relative_index = pknode->vardef_frame_relative_index; pstate->k_type_mask = mlr_dsl_ast_node_type_to_type_mask(pknode->type); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags)); } pstate->ptype_inferenced_srec_field_copy_getter = (type_inferencing == TYPE_INFER_STRING_ONLY) ? get_copy_srec_value_string_only_aux : (type_inferencing == TYPE_INFER_STRING_FLOAT) ? get_copy_srec_value_string_float_aux : (type_inferencing == TYPE_INFER_STRING_FLOAT_INT) ? get_copy_srec_value_string_float_int_aux : NULL; MLR_INTERNAL_CODING_ERROR_IF(pstate->ptype_inferenced_srec_field_copy_getter == NULL); return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_for_srec_key_only, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_for_srec_key_only, pstate); } // ---------------------------------------------------------------- static void free_for_srec_key_only(mlr_dsl_cst_statement_t* pstatement, context_t* _) { for_srec_key_only_state_t* pstate = pstatement->pvstate; free(pstate->k_variable_name); free(pstate); } // ---------------------------------------------------------------- static void handle_for_srec_key_only( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { for_srec_key_only_state_t* pstate = pstatement->pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); // Copy the lrec for the very likely case that it is being updated inside the for-loop. lrec_t* pcopyrec = lrec_copy(pvars->pinrec); lhmsmv_t* pcopyoverlay = lhmsmv_copy(pvars->ptyped_overlay); for (lrece_t* pe = pcopyrec->phead; pe != NULL; pe = pe->pnext) { mv_t mvkey = mv_from_string_no_free(pe->key); local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_frame_define_terminal(pframe, pstate->k_variable_name, pstate->k_frame_relative_index, pstate->k_type_mask, mvkey); pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); break; } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } } lhmsmv_free(pcopyoverlay); lrec_free(pcopyrec); loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } miller-5.6.2/c/dsl/mlr_dsl_cst_func_subr.c000066400000000000000000000472341354153536500205570ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/hss.h" #include "mlr_dsl_cst.h" #include "context_flags.h" static boxed_xval_t cst_udf_process_callback(void* pvstate, int arity, boxed_xval_t* args, variables_t* pvars); static void cst_udf_free_callback(void* pvstate, context_t* pctx); static void cst_udf_type_check_return_value(cst_udf_state_t* pstate, mlhmmv_xvalue_t* pretval); // ---------------------------------------------------------------- // $ cat def //mlr --from s put -v ' // def f(x,y,z) { // var a = 1; // $x = 2; // return a + y * 2; // } //' // $ def // AST ROOT: // text="list", type=statement_list: // text="f", type=def: // text="f", type=non_sigil_name: // text="x", type=non_sigil_name. // text="y", type=non_sigil_name. // text="z", type=non_sigil_name. // text="list", type=statement_list: // text="var", type=return: // text="a", type=non_sigil_name. // text="1", type=numeric_literal. // text="=", type=srec_assignment: // text="x", type=field_name. // text="2", type=numeric_literal. // text="return", type=return: // text="+", type=operator: // text="a", type=local_variable. // text="*", type=operator: // text="y", type=local_variable. // text="2", type=numeric_literal. udf_defsite_state_t* mlr_dsl_cst_alloc_udf(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { mlr_dsl_ast_node_t* pparameters_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pbody_node = pnode->pchildren->phead->pnext->pvvalue; cst_udf_state_t* pcst_udf_state = mlr_malloc_or_die(sizeof(cst_udf_state_t)); if (pnode->pchildren->length == 3) { mlr_dsl_ast_node_t* pmask_node = pnode->pchildren->phead->pnext->pnext->pvvalue; // E.g. 'func f(int x): int { return x*2 + 1 }' pcst_udf_state->return_value_type_name = pmask_node->text; pcst_udf_state->return_value_type_mask = type_mask_from_name(pmask_node->text); } else { // E.g. 'func f(int x) { return x*2 + 1 }' pcst_udf_state->return_value_type_name = "any"; pcst_udf_state->return_value_type_mask = TYPE_MASK_ANY; } pcst_udf_state->name = mlr_strdup_or_die(pnode->text); pcst_udf_state->arity = pparameters_node->pchildren->length; pcst_udf_state->parameter_names = mlr_malloc_or_die(pcst_udf_state->arity * sizeof(char*)); pcst_udf_state->parameter_type_masks = mlr_malloc_or_die(pcst_udf_state->arity * sizeof(int)); int ok = TRUE; hss_t* pnameset = hss_alloc(); int i = 0; for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; if (hss_has(pnameset, pparameter_node->text)) { fprintf(stderr, "%s: duplicate parameter name \"%s\" in function \"%s\".\n", MLR_GLOBALS.bargv0, pparameter_node->text, pnode->text); ok = FALSE; } hss_add(pnameset, pparameter_node->text); pcst_udf_state->parameter_names[i] = mlr_strdup_or_die(pparameter_node->text); pcst_udf_state->parameter_type_masks[i] = mlr_dsl_ast_node_type_to_type_mask(pparameter_node->type); } hss_free(pnameset); if (!ok) { fprintf(stderr, "Parameter names: "); for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; fprintf(stderr, "\"%s\"", pparameter_node->text); if (pe->pnext != NULL) fprintf(stderr, ", "); } fprintf(stderr, ".\n"); exit(1); } MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); pcst_udf_state->ptop_level_block = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->subframe_var_count); for (sllve_t* pe = pbody_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; if (pbody_ast_node->type == MD_AST_NODE_TYPE_RETURN_VOID) { fprintf(stderr, "%s: return statements within user-defined functions must return a value.\n", MLR_GLOBALS.bargv0); exit(1); } sllv_append(pcst_udf_state->ptop_level_block->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags | IN_FUNC_DEF)); } // Callback struct for the function manager to invoke the new function: udf_defsite_state_t* pdefsite_state = mlr_malloc_or_die(sizeof(udf_defsite_state_t)); pdefsite_state->pvstate = pcst_udf_state; pdefsite_state->name = mlr_strdup_or_die(pnode->text); pdefsite_state->arity = pcst_udf_state->arity; pdefsite_state->pprocess_func = cst_udf_process_callback; pdefsite_state->pfree_func = cst_udf_free_callback; return pdefsite_state; } void mlr_dsl_cst_free_udf(cst_udf_state_t* pstate, context_t* pctx) { if (pstate == NULL) return; free(pstate->name); for (int i = 0; i < pstate->arity; i++) free(pstate->parameter_names[i]); free(pstate->parameter_names); free(pstate->parameter_type_masks); cst_top_level_statement_block_free(pstate->ptop_level_block, pctx); free(pstate); } // ---------------------------------------------------------------- // Callback function for the function manager to invoke into here static boxed_xval_t cst_udf_process_callback(void* pvstate, int arity, boxed_xval_t* args, variables_t* pvars) { cst_udf_state_t* pstate = pvstate; cst_top_level_statement_block_t* ptop_level_block = pstate->ptop_level_block; boxed_xval_t retval = box_ephemeral_val(mv_absent()); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Push stack and bind parameters to arguments local_stack_frame_t* pframe = local_stack_frame_enter(ptop_level_block->pframe); local_stack_push(pvars->plocal_stack, pframe); local_stack_subframe_enter(pframe, ptop_level_block->pblock->subframe_var_count); for (int i = 0; i < arity; i++) { // Absent-null is by convention at slot 0 of the frame, and arguments are next. // Hence starting the loop at 1. if (args[i].is_ephemeral) { local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, pstate->parameter_type_masks[i], args[i].xval); } else { local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, pstate->parameter_type_masks[i], mlhmmv_xvalue_copy(&args[i].xval)); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Compute the function value cst_outputs_t* pcst_outputs = NULL; // Functions only produce output via their return values if (pvars->trace_execution) { fprintf(stdout, "TRACE ENTER FUNC %s\n", pstate->name); for (sllve_t* pe = ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; fprintf(stdout, "TRACE "); mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) != 0) { break; } if (pvars->return_state.returned) { retval = pvars->return_state.retval; if (pstate->return_value_type_mask != TYPE_MASK_ANY) { cst_udf_type_check_return_value(pstate, &retval.xval); } pvars->return_state.retval = box_ephemeral_val(mv_absent()); pvars->return_state.returned = FALSE; break; } } fprintf(stdout, "TRACE EXIT FUNC %s\n", pstate->name); } else { for (sllve_t* pe = ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) != 0) { break; } if (pvars->return_state.returned) { retval = pvars->return_state.retval; if (pstate->return_value_type_mask != TYPE_MASK_ANY) { cst_udf_type_check_return_value(pstate, &retval.xval); } pvars->return_state.retval = box_ephemeral_val(mv_absent()); pvars->return_state.returned = FALSE; break; } } } if (!pvars->return_state.returned) { if (pstate->return_value_type_mask != TYPE_MASK_ANY) { cst_udf_type_check_return_value(pstate, &retval.xval); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Pop stack local_stack_subframe_exit(pframe, ptop_level_block->pblock->subframe_var_count); local_stack_frame_exit(local_stack_pop(pvars->plocal_stack)); return retval; } static void cst_udf_type_check_return_value(cst_udf_state_t* pstate, mlhmmv_xvalue_t* pretval) { int ok = TRUE; if (pretval->is_terminal) { if (!(type_mask_from_mv(&pretval->terminal_mlrval) & pstate->return_value_type_mask)) { ok = FALSE; } } else { if (!(TYPE_MASK_MAP & pstate->return_value_type_mask)) { ok = FALSE; } } if (!ok) { fprintf(stderr, "%s: function %s returned type %s, not matching typedecl %s.\n", MLR_GLOBALS.bargv0, pstate->name, mlhmmv_xvalue_describe_type_simple(pretval), pstate->return_value_type_name); exit(1); } } // ---------------------------------------------------------------- // Callback function for the function manager to invoke into here static void cst_udf_free_callback(void* pvstate, context_t* pctx) { cst_udf_state_t* pstate = pvstate; mlr_dsl_cst_free_udf(pstate, pctx); } // ================================================================ typedef struct _subr_callsite_statement_state_t { rxval_evaluator_t** subr_callsite_argument_evaluators; boxed_xval_t* subr_callsite_arguments; subr_callsite_t* psubr_callsite; subr_defsite_t* psubr_defsite; } subr_callsite_statement_state_t; static mlr_dsl_cst_statement_handler_t handle_subr_callsite_statement; static mlr_dsl_cst_statement_freer_t free_subr_callsite_statement; static subr_callsite_t* subr_callsite_alloc(char* name, int arity, int type_inferencing, int context_flags); static void subr_callsite_free(subr_callsite_t* psubr_callsite); // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_subr_callsite_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { subr_callsite_statement_state_t* pstate = mlr_malloc_or_die(sizeof(subr_callsite_statement_state_t)); pstate->subr_callsite_argument_evaluators = NULL; pstate->subr_callsite_arguments = NULL; pstate->psubr_callsite = NULL; pstate->psubr_defsite = NULL; mlr_dsl_ast_node_t* pname_node = pnode->pchildren->phead->pvvalue; int callsite_arity = pname_node->pchildren->length; pstate->psubr_callsite = subr_callsite_alloc(pname_node->text, callsite_arity, type_inferencing, context_flags); pstate->subr_callsite_argument_evaluators = mlr_malloc_or_die(callsite_arity * sizeof(rxval_evaluator_t*)); pstate->subr_callsite_arguments = mlr_malloc_or_die(callsite_arity * sizeof(boxed_xval_t)); int i = 0; for (sllve_t* pe = pname_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pargument_node = pe->pvvalue; pstate->subr_callsite_argument_evaluators[i] = rxval_evaluator_alloc_from_ast(pargument_node, pcst->pfmgr, type_inferencing, context_flags); } mlr_dsl_cst_statement_t* pstatement = mlr_dsl_cst_statement_valloc( pnode, handle_subr_callsite_statement, free_subr_callsite_statement, pstate); // Remember this callsite to be resolved later, after all subroutine definitions have been done. sllv_append(pcst->psubr_callsite_statements_to_resolve, pstatement); return pstatement; } // ---------------------------------------------------------------- void mlr_dsl_cst_resolve_subr_callsite(mlr_dsl_cst_t* pcst, mlr_dsl_cst_statement_t* pstatement) { subr_callsite_statement_state_t* pstate = pstatement->pvstate; subr_callsite_t* psubr_callsite = pstate->psubr_callsite; subr_defsite_t* psubr_defsite = lhmsv_get(pcst->psubr_defsites, psubr_callsite->name); if (psubr_defsite == NULL) { fprintf(stderr, "%s: subroutine \"%s\" not found.\n", MLR_GLOBALS.bargv0, psubr_callsite->name); exit(1); } if (psubr_defsite->arity != psubr_callsite->arity) { fprintf(stderr, "%s: subroutine \"%s\" expects argument count %d but argument count %d was provided.\n", MLR_GLOBALS.bargv0, psubr_callsite->name, psubr_defsite->arity, psubr_callsite->arity); exit(1); } pstate->psubr_defsite = psubr_defsite; } // ---------------------------------------------------------------- static void handle_subr_callsite_statement( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { subr_callsite_statement_state_t* pstate = pstatement->pvstate; for (int i = 0; i < pstate->psubr_callsite->arity; i++) { rxval_evaluator_t* pev = pstate->subr_callsite_argument_evaluators[i]; pstate->subr_callsite_arguments[i] = pev->pprocess_func(pev->pvstate, pvars); } mlr_dsl_cst_execute_subroutine(pstate->psubr_defsite, pvars, pcst_outputs, pstate->psubr_callsite->arity, pstate->subr_callsite_arguments); } // ---------------------------------------------------------------- static void free_subr_callsite_statement(mlr_dsl_cst_statement_t* pstatement, context_t* _) { subr_callsite_statement_state_t* pstate = pstatement->pvstate; if (pstate->subr_callsite_argument_evaluators != NULL) { for (int i = 0; i < pstate->psubr_callsite->arity; i++) { rxval_evaluator_t* phandler = pstate->subr_callsite_argument_evaluators[i]; phandler->pfree_func(phandler); } free(pstate->subr_callsite_argument_evaluators); } if (pstate->subr_callsite_arguments != NULL) { // mv_frees are done by the local-stack container which owns the mlrvals it contains free(pstate->subr_callsite_arguments); } subr_callsite_free(pstate->psubr_callsite); free(pstate); } // ---------------------------------------------------------------- static subr_callsite_t* subr_callsite_alloc(char* name, int arity, int type_inferencing, int context_flags) { subr_callsite_t* psubr_callsite = mlr_malloc_or_die(sizeof(subr_callsite_t)); psubr_callsite->name = mlr_strdup_or_die(name); psubr_callsite->arity = arity; psubr_callsite->type_inferencing = type_inferencing; psubr_callsite->context_flags = context_flags; return psubr_callsite; } static void subr_callsite_free(subr_callsite_t* psubr_callsite) { if (psubr_callsite == NULL) return; free(psubr_callsite->name); free(psubr_callsite); } // ================================================================ subr_defsite_t* mlr_dsl_cst_alloc_subroutine(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, // xxx rename? int type_inferencing, int context_flags) { mlr_dsl_ast_node_t* pparameters_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pbody_node = pnode->pchildren->phead->pnext->pvvalue; int arity = pparameters_node->pchildren->length; subr_defsite_t* pstate = mlr_malloc_or_die(sizeof(subr_defsite_t)); pstate->name = mlr_strdup_or_die(pparameters_node->text); pstate->arity = arity; pstate->parameter_names = mlr_malloc_or_die(arity * sizeof(char*)); pstate->parameter_type_masks = mlr_malloc_or_die(arity * sizeof(int)); int ok = TRUE; hss_t* pnameset = hss_alloc(); int i = 0; for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; if (hss_has(pnameset, pparameter_node->text)) { fprintf(stderr, "%s: duplicate parameter name \"%s\" in subroutine \"%s\".\n", MLR_GLOBALS.bargv0, pparameter_node->text, pnode->text); ok = FALSE; } hss_add(pnameset, pparameter_node->text); pstate->parameter_names[i] = mlr_strdup_or_die(pparameter_node->text); pstate->parameter_type_masks[i] = mlr_dsl_ast_node_type_to_type_mask(pparameter_node->type); } hss_free(pnameset); if (!ok) { fprintf(stderr, "Parameter names: "); for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; fprintf(stderr, "\"%s\"", pparameter_node->text); if (pe->pnext != NULL) fprintf(stderr, ", "); } fprintf(stderr, ".\n"); exit(1); } MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); pstate->ptop_level_block = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->subframe_var_count); for (sllve_t* pe = pbody_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; if (pbody_ast_node->type == MD_AST_NODE_TYPE_RETURN_VALUE) { fprintf(stderr, "%s: return statements within user-defined subroutines must not return a value.\n", MLR_GLOBALS.bargv0); exit(1); } mlr_dsl_cst_statement_t* pstatement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags | IN_SUBR_DEF); sllv_append(pstate->ptop_level_block->pblock->pstatements, pstatement); } return pstate; } // ---------------------------------------------------------------- void mlr_dsl_cst_free_subroutine(subr_defsite_t* pstate, context_t* pctx) { if (pstate == NULL) return; free(pstate->name); for (int i = 0; i < pstate->arity; i++) free(pstate->parameter_names[i]); free(pstate->parameter_names); free(pstate->parameter_type_masks); cst_top_level_statement_block_free(pstate->ptop_level_block, pctx); free(pstate); } // ---------------------------------------------------------------- void mlr_dsl_cst_execute_subroutine(subr_defsite_t* pstate, variables_t* pvars, cst_outputs_t* pcst_outputs, int callsite_arity, boxed_xval_t* args) { cst_top_level_statement_block_t* ptop_level_block = pstate->ptop_level_block; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Push stack and bind parameters to arguments local_stack_frame_t* pframe = local_stack_frame_enter(ptop_level_block->pframe); local_stack_push(pvars->plocal_stack, pframe); local_stack_subframe_enter(pframe, ptop_level_block->pblock->subframe_var_count); for (int i = 0; i < pstate->arity; i++) { // Absent-null is by convention at slot 0 of the frame, and arguments are next. // Hence starting the loop at 1. if (args[i].is_ephemeral) { local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, pstate->parameter_type_masks[i], args[i].xval); } else { local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, pstate->parameter_type_masks[i], mlhmmv_xvalue_copy(&args[i].xval)); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Execute the subroutine body if (pvars->trace_execution) { fprintf(stdout, "TRACE ENTER SUBR %s\n", pstate->name); for (sllve_t* pe = pstate->ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; fprintf(stdout, "TRACE "); mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) != 0) { break; } if (pvars->return_state.returned) { pvars->return_state.returned = FALSE; break; } } fprintf(stdout, "TRACE EXIT SUBR %s\n", pstate->name); } else { for (sllve_t* pe = pstate->ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) != 0) { break; } if (pvars->return_state.returned) { pvars->return_state.returned = FALSE; break; } } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Pop stack local_stack_subframe_exit(pframe, ptop_level_block->pblock->subframe_var_count); local_stack_frame_exit(local_stack_pop(pvars->plocal_stack)); } miller-5.6.2/c/dsl/mlr_dsl_cst_keywords.c000066400000000000000000000652351354153536500204410ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/hss.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ---------------------------------------------------------------- typedef void keyword_usage_func_t(FILE* ostream); static keyword_usage_func_t mlr_dsl_ENV_keyword_usage; static keyword_usage_func_t mlr_dsl_FILENAME_keyword_usage; static keyword_usage_func_t mlr_dsl_FILENUM_keyword_usage; static keyword_usage_func_t mlr_dsl_FNR_keyword_usage; static keyword_usage_func_t mlr_dsl_IFS_keyword_usage; static keyword_usage_func_t mlr_dsl_IPS_keyword_usage; static keyword_usage_func_t mlr_dsl_IRS_keyword_usage; static keyword_usage_func_t mlr_dsl_M_E_keyword_usage; static keyword_usage_func_t mlr_dsl_M_PI_keyword_usage; static keyword_usage_func_t mlr_dsl_NF_keyword_usage; static keyword_usage_func_t mlr_dsl_NR_keyword_usage; static keyword_usage_func_t mlr_dsl_OFS_keyword_usage; static keyword_usage_func_t mlr_dsl_OPS_keyword_usage; static keyword_usage_func_t mlr_dsl_ORS_keyword_usage; static keyword_usage_func_t mlr_dsl_all_keyword_usage; static keyword_usage_func_t mlr_dsl_begin_keyword_usage; static keyword_usage_func_t mlr_dsl_bool_keyword_usage; static keyword_usage_func_t mlr_dsl_break_keyword_usage; static keyword_usage_func_t mlr_dsl_call_keyword_usage; static keyword_usage_func_t mlr_dsl_continue_keyword_usage; static keyword_usage_func_t mlr_dsl_do_keyword_usage; static keyword_usage_func_t mlr_dsl_dump_keyword_usage; static keyword_usage_func_t mlr_dsl_edump_keyword_usage; static keyword_usage_func_t mlr_dsl_elif_keyword_usage; static keyword_usage_func_t mlr_dsl_else_keyword_usage; static keyword_usage_func_t mlr_dsl_emit_keyword_usage; static keyword_usage_func_t mlr_dsl_emitf_keyword_usage; static keyword_usage_func_t mlr_dsl_emitp_keyword_usage; static keyword_usage_func_t mlr_dsl_end_keyword_usage; static keyword_usage_func_t mlr_dsl_eprint_keyword_usage; static keyword_usage_func_t mlr_dsl_eprintn_keyword_usage; static keyword_usage_func_t mlr_dsl_false_keyword_usage; static keyword_usage_func_t mlr_dsl_filter_keyword_usage; static keyword_usage_func_t mlr_dsl_float_keyword_usage; static keyword_usage_func_t mlr_dsl_for_keyword_usage; static keyword_usage_func_t mlr_dsl_func_keyword_usage; static keyword_usage_func_t mlr_dsl_if_keyword_usage; static keyword_usage_func_t mlr_dsl_in_keyword_usage; static keyword_usage_func_t mlr_dsl_int_keyword_usage; static keyword_usage_func_t mlr_dsl_map_keyword_usage; static keyword_usage_func_t mlr_dsl_num_keyword_usage; static keyword_usage_func_t mlr_dsl_print_keyword_usage; static keyword_usage_func_t mlr_dsl_printn_keyword_usage; static keyword_usage_func_t mlr_dsl_return_keyword_usage; static keyword_usage_func_t mlr_dsl_stderr_keyword_usage; static keyword_usage_func_t mlr_dsl_stdout_keyword_usage; static keyword_usage_func_t mlr_dsl_str_keyword_usage; static keyword_usage_func_t mlr_dsl_subr_keyword_usage; static keyword_usage_func_t mlr_dsl_tee_keyword_usage; static keyword_usage_func_t mlr_dsl_true_keyword_usage; static keyword_usage_func_t mlr_dsl_unset_keyword_usage; static keyword_usage_func_t mlr_dsl_var_keyword_usage; static keyword_usage_func_t mlr_dsl_while_keyword_usage; // ---------------------------------------------------------------- typedef struct _keyword_usage_entry_t { char* name; keyword_usage_func_t* pusage_func; } keyword_usage_entry_t; static keyword_usage_entry_t KEYWORD_USAGE_TABLE[] = { { "all", mlr_dsl_all_keyword_usage }, { "begin", mlr_dsl_begin_keyword_usage }, { "bool", mlr_dsl_bool_keyword_usage }, { "break", mlr_dsl_break_keyword_usage }, { "call", mlr_dsl_call_keyword_usage }, { "continue", mlr_dsl_continue_keyword_usage }, { "do", mlr_dsl_do_keyword_usage }, { "dump", mlr_dsl_dump_keyword_usage }, { "edump", mlr_dsl_edump_keyword_usage }, { "elif", mlr_dsl_elif_keyword_usage }, { "else", mlr_dsl_else_keyword_usage }, { "emit", mlr_dsl_emit_keyword_usage }, { "emitf", mlr_dsl_emitf_keyword_usage }, { "emitp", mlr_dsl_emitp_keyword_usage }, { "end", mlr_dsl_end_keyword_usage }, { "eprint", mlr_dsl_eprint_keyword_usage }, { "eprintn", mlr_dsl_eprintn_keyword_usage }, { "false", mlr_dsl_false_keyword_usage }, { "filter", mlr_dsl_filter_keyword_usage }, { "float", mlr_dsl_float_keyword_usage }, { "for", mlr_dsl_for_keyword_usage }, { "func", mlr_dsl_func_keyword_usage }, { "if", mlr_dsl_if_keyword_usage }, { "in", mlr_dsl_in_keyword_usage }, { "int", mlr_dsl_int_keyword_usage }, { "map", mlr_dsl_map_keyword_usage }, { "num", mlr_dsl_num_keyword_usage }, { "print", mlr_dsl_print_keyword_usage }, { "printn", mlr_dsl_printn_keyword_usage }, { "return", mlr_dsl_return_keyword_usage }, { "stderr", mlr_dsl_stderr_keyword_usage }, { "stdout", mlr_dsl_stdout_keyword_usage }, { "str", mlr_dsl_str_keyword_usage }, { "subr", mlr_dsl_subr_keyword_usage }, { "tee", mlr_dsl_tee_keyword_usage }, { "true", mlr_dsl_true_keyword_usage }, { "unset", mlr_dsl_unset_keyword_usage }, { "var", mlr_dsl_var_keyword_usage }, { "while", mlr_dsl_while_keyword_usage }, { "ENV", mlr_dsl_ENV_keyword_usage }, { "FILENAME", mlr_dsl_FILENAME_keyword_usage }, { "FILENUM", mlr_dsl_FILENUM_keyword_usage }, { "FNR", mlr_dsl_FNR_keyword_usage }, { "IFS", mlr_dsl_IFS_keyword_usage }, { "IPS", mlr_dsl_IPS_keyword_usage }, { "IRS", mlr_dsl_IRS_keyword_usage }, { "M_E", mlr_dsl_M_E_keyword_usage }, { "M_PI", mlr_dsl_M_PI_keyword_usage }, { "NF", mlr_dsl_NF_keyword_usage }, { "NR", mlr_dsl_NR_keyword_usage }, { "OFS", mlr_dsl_OFS_keyword_usage }, { "OPS", mlr_dsl_OPS_keyword_usage }, { "ORS", mlr_dsl_ORS_keyword_usage }, }; static int KEYWORD_USAGE_TABLE_SIZE = sizeof(KEYWORD_USAGE_TABLE)/sizeof(KEYWORD_USAGE_TABLE[0]); // ================================================================ // Pass function_name == NULL to get usage for all keywords. // Note keywords are defined in parsing/mlr_dsl_lexer.l. void mlr_dsl_keyword_usage(FILE* ostream, char* keyword) { if (keyword == NULL) { for (int i = 0; i < KEYWORD_USAGE_TABLE_SIZE; i++) { if (i > 0) { fprintf(ostream, "\n"); } KEYWORD_USAGE_TABLE[i].pusage_func(ostream); } } else { int found = FALSE; for (int i = 0; i < KEYWORD_USAGE_TABLE_SIZE; i++) { if (streq(keyword, KEYWORD_USAGE_TABLE[i].name)) { KEYWORD_USAGE_TABLE[i].pusage_func(ostream); found = TRUE; break; } } if (!found) { fprintf(ostream, "%s: unrecognized keyword \"%s\".\n", MLR_GLOBALS.bargv0, keyword); } } } void mlr_dsl_list_all_keywords_raw(FILE* ostream) { for (int i = 0; i < KEYWORD_USAGE_TABLE_SIZE; i++) { printf("%s\n", KEYWORD_USAGE_TABLE[i].name); } } // ---------------------------------------------------------------- static void mlr_dsl_all_keyword_usage(FILE* ostream) { fprintf(ostream, "all: used in \"emit\", \"emitp\", and \"unset\" as a synonym for @*\n" ); } static void mlr_dsl_begin_keyword_usage(FILE* ostream) { fprintf(ostream, "begin: defines a block of statements to be executed before input records\n" "are ingested. The body statements must be wrapped in curly braces.\n" "Example: 'begin { @count = 0 }'\n" ); } static void mlr_dsl_bool_keyword_usage(FILE* ostream) { fprintf(ostream, "bool: declares a boolean local variable in the current curly-braced scope.\n" "Type-checking happens at assignment: 'bool b = 1' is an error.\n" ); } static void mlr_dsl_break_keyword_usage(FILE* ostream) { fprintf(ostream, "break: causes execution to continue after the body of the current\n" "for/while/do-while loop.\n" ); } static void mlr_dsl_call_keyword_usage(FILE* ostream) { fprintf(ostream, "call: used for invoking a user-defined subroutine.\n" "Example: 'subr s(k,v) { print k . \" is \" . v} call s(\"a\", $a)'\n" ); } static void mlr_dsl_continue_keyword_usage(FILE* ostream) { fprintf(ostream, "continue: causes execution to skip the remaining statements in the body of\n" "the current for/while/do-while loop. For-loop increments are still applied.\n" ); } static void mlr_dsl_do_keyword_usage(FILE* ostream) { fprintf(ostream, "do: with \"while\", introduces a do-while loop. The body statements must be wrapped\n" "in curly braces.\n" ); } static void mlr_dsl_dump_keyword_usage(FILE* ostream) { fprintf(ostream, "dump: prints all currently defined out-of-stream variables immediately\n" " to stdout as JSON.\n" "\n" " With >, >>, or |, the data do not become part of the output record stream but\n" " are instead redirected.\n" "\n" " The > and >> are for write and append, as in the shell, but (as with awk) the\n" " file-overwrite for > is on first write, not per record. The | is for piping to\n" " a process which will process the data. There will be one open file for each\n" " distinct file name (for > and >>) or one subordinate process for each distinct\n" " value of the piped-to command (for |). Output-formatting flags are taken from\n" " the main command line.\n" "\n" " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'\n" " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > \"mytap.dat\"}'\n" " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> \"mytap.dat\"}'\n" " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | \"jq .[]\"}'\n"); } static void mlr_dsl_edump_keyword_usage(FILE* ostream) { fprintf(ostream, "edump: prints all currently defined out-of-stream variables immediately\n" " to stderr as JSON.\n" "\n" " Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }'\n"); } static void mlr_dsl_elif_keyword_usage(FILE* ostream) { fprintf(ostream, "elif: the way Miller spells \"else if\". The body statements must be wrapped\n" "in curly braces.\n" ); } static void mlr_dsl_else_keyword_usage(FILE* ostream) { fprintf(ostream, "else: terminates an if/elif/elif chain. The body statements must be wrapped\n" "in curly braces.\n" ); } static void mlr_dsl_emit_keyword_usage(FILE* ostream) { fprintf(ostream, "emit: inserts an out-of-stream variable into the output record stream. Hashmap\n" " indices present in the data but not slotted by emit arguments are not output.\n" "\n" " With >, >>, or |, the data do not become part of the output record stream but\n" " are instead redirected.\n" "\n" " The > and >> are for write and append, as in the shell, but (as with awk) the\n" " file-overwrite for > is on first write, not per record. The | is for piping to\n" " a process which will process the data. There will be one open file for each\n" " distinct file name (for > and >>) or one subordinate process for each distinct\n" " value of the piped-to command (for |). Output-formatting flags are taken from\n" " the main command line.\n" "\n" " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" " etc., to control the format of the output if the output is redirected. See also %s -h.\n" "\n" " Example: mlr --from f.dat put 'emit > \"/tmp/data-\".$a, $*'\n" " Example: mlr --from f.dat put 'emit > \"/tmp/data-\".$a, mapexcept($*, \"a\")'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'\n" " Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > \"tap-\".$a.$b.\".dat\", @sums'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > \"mytap.dat\", @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> \"mytap.dat\", @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | \"gzip > mytap.dat.gz\", @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | \"grep somepattern\", @*, \"index1\", \"index2\"'\n" "\n" " Please see http://johnkerl.org/miller/doc for more information.\n", MLR_GLOBALS.bargv0); } static void mlr_dsl_emitf_keyword_usage(FILE* ostream) { fprintf(ostream, "emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the\n" " output record stream.\n" "\n" " With >, >>, or |, the data do not become part of the output record stream but\n" " are instead redirected.\n" "\n" " The > and >> are for write and append, as in the shell, but (as with awk) the\n" " file-overwrite for > is on first write, not per record. The | is for piping to\n" " a process which will process the data. There will be one open file for each\n" " distinct file name (for > and >>) or one subordinate process for each distinct\n" " value of the piped-to command (for |). Output-formatting flags are taken from\n" " the main command line.\n" "\n" " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" " etc., to control the format of the output if the output is redirected. See also %s -h.\n" "\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'\n" " Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > \"tap-\".$i.\".dat\", @a'\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > \"mytap.dat\", @a, @b, @c'\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> \"mytap.dat\", @a, @b, @c'\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | \"grep somepattern\", @a, @b, @c'\n" " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | \"grep somepattern > mytap.dat\", @a, @b, @c'\n" "\n" " Please see http://johnkerl.org/miller/doc for more information.\n", MLR_GLOBALS.bargv0); } static void mlr_dsl_emitp_keyword_usage(FILE* ostream) { fprintf(ostream, "emitp: inserts an out-of-stream variable into the output record stream.\n" " Hashmap indices present in the data but not slotted by emitp arguments are\n" " output concatenated with \":\".\n" "\n" " With >, >>, or |, the data do not become part of the output record stream but\n" " are instead redirected.\n" "\n" " The > and >> are for write and append, as in the shell, but (as with awk) the\n" " file-overwrite for > is on first write, not per record. The | is for piping to\n" " a process which will process the data. There will be one open file for each\n" " distinct file name (for > and >>) or one subordinate process for each distinct\n" " value of the piped-to command (for |). Output-formatting flags are taken from\n" " the main command line.\n" "\n" " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" " etc., to control the format of the output if the output is redirected. See also %s -h.\n" "\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'\n" " Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > \"tap-\".$a.$b.\".dat\", @sums'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > \"mytap.dat\", @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> \"mytap.dat\", @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | \"gzip > mytap.dat.gz\", @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, \"index1\", \"index2\"'\n" " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | \"grep somepattern\", @*, \"index1\", \"index2\"'\n" "\n" " Please see http://johnkerl.org/miller/doc for more information.\n", MLR_GLOBALS.bargv0); } static void mlr_dsl_end_keyword_usage(FILE* ostream) { fprintf(ostream, "end: defines a block of statements to be executed after input records\n" "are ingested. The body statements must be wrapped in curly braces.\n" "Example: 'end { emit @count }'\n" "Example: 'end { eprint \"Final count is \" . @count }'\n" ); } static void mlr_dsl_eprint_keyword_usage(FILE* ostream) { fprintf(ostream, "eprint: prints expression immediately to stderr.\n" " Example: mlr --from f.dat put -q 'eprint \"The sum of x and y is \".($x+$y)'\n" " Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . \" => \" . v }'\n" " Example: mlr --from f.dat put '(NR %% 1000 == 0) { eprint \"Checkpoint \".NR}'\n"); } static void mlr_dsl_eprintn_keyword_usage(FILE* ostream) { fprintf(ostream, "eprintn: prints expression immediately to stderr, without trailing newline.\n" " Example: mlr --from f.dat put -q 'eprintn \"The sum of x and y is \".($x+$y); eprint \"\"'\n"); } static void mlr_dsl_false_keyword_usage(FILE* ostream) { fprintf(ostream, "false: the boolean literal value.\n" ); } static void mlr_dsl_filter_keyword_usage(FILE* ostream) { fprintf(ostream, "filter: includes/excludes the record in the output record stream.\n" "\n" " Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)'\n" "\n" " Instead of put with 'filter false' you can simply use put -q. The following\n" " uses the input record to accumulate data but only prints the running sum\n" " without printing the input record:\n" "\n" " Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum'\n"); } static void mlr_dsl_float_keyword_usage(FILE* ostream) { fprintf(ostream, "float: declares a floating-point local variable in the current curly-braced scope.\n" "Type-checking happens at assignment: 'float x = 0' is an error.\n" ); } static void mlr_dsl_for_keyword_usage(FILE* ostream) { fprintf(ostream, "for: defines a for-loop using one of three styles. The body statements must\n" "be wrapped in curly braces.\n" "For-loop over stream record:\n" " Example: 'for (k, v in $*) { ... }'\n" "For-loop over out-of-stream variables:\n" " Example: 'for (k, v in @counts) { ... }'\n" " Example: 'for ((k1, k2), v in @counts) { ... }'\n" " Example: 'for ((k1, k2, k3), v in @*) { ... }'\n" "C-style for-loop:\n" " Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }'\n" ); } static void mlr_dsl_func_keyword_usage(FILE* ostream) { fprintf(ostream, "func: used for defining a user-defined function.\n" "Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)'\n" ); } static void mlr_dsl_if_keyword_usage(FILE* ostream) { fprintf(ostream, "if: starts an if/elif/elif chain. The body statements must be wrapped\n" "in curly braces.\n" ); } static void mlr_dsl_in_keyword_usage(FILE* ostream) { fprintf(ostream, "in: used in for-loops over stream records or out-of-stream variables.\n"); } static void mlr_dsl_int_keyword_usage(FILE* ostream) { fprintf(ostream, "int: declares an integer local variable in the current curly-braced scope.\n" "Type-checking happens at assignment: 'int x = 0.0' is an error.\n" ); } static void mlr_dsl_map_keyword_usage(FILE* ostream) { fprintf(ostream, "map: declares an map-valued local variable in the current curly-braced scope.\n" "Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is\n" "always OK. map b = a is OK or not depending on whether a is a map.\n" ); } static void mlr_dsl_num_keyword_usage(FILE* ostream) { fprintf(ostream, "num: declares an int/float local variable in the current curly-braced scope.\n" "Type-checking happens at assignment: 'num b = true' is an error.\n" ); } static void mlr_dsl_print_keyword_usage(FILE* ostream) { fprintf(ostream, "print: prints expression immediately to stdout.\n" " Example: mlr --from f.dat put -q 'print \"The sum of x and y is \".($x+$y)'\n" " Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . \" => \" . v }'\n" " Example: mlr --from f.dat put '(NR %% 1000 == 0) { print > stderr, \"Checkpoint \".NR}'\n"); } static void mlr_dsl_printn_keyword_usage(FILE* ostream) { fprintf(ostream, "printn: prints expression immediately to stdout, without trailing newline.\n" " Example: mlr --from f.dat put -q 'printn \".\"; end { print \"\" }'\n"); } static void mlr_dsl_return_keyword_usage(FILE* ostream) { fprintf(ostream, "return: specifies the return value from a user-defined function.\n" "Omitted return statements (including via if-branches) result in an absent-null\n" "return value, which in turns results in a skipped assignment to an LHS.\n" ); } static void mlr_dsl_stderr_keyword_usage(FILE* ostream) { fprintf(ostream, "stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename\n" " to print to standard error.\n"); } static void mlr_dsl_stdout_keyword_usage(FILE* ostream) { fprintf(ostream, "stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename\n" " to print to standard output.\n"); } static void mlr_dsl_str_keyword_usage(FILE* ostream) { fprintf(ostream, "str: declares a string local variable in the current curly-braced scope.\n" "Type-checking happens at assignment.\n" ); } static void mlr_dsl_subr_keyword_usage(FILE* ostream) { fprintf(ostream, "subr: used for defining a subroutine.\n" "Example: 'subr s(k,v) { print k . \" is \" . v} call s(\"a\", $a)'\n" ); } static void mlr_dsl_tee_keyword_usage(FILE* ostream) { fprintf(ostream, "tee: prints the current record to specified file.\n" " This is an immediate print to the specified file (except for pprint format\n" " which of course waits until the end of the input stream to format all output).\n" "\n" " The > and >> are for write and append, as in the shell, but (as with awk) the\n" " file-overwrite for > is on first write, not per record. The | is for piping to\n" " a process which will process the data. There will be one open file for each\n" " distinct file name (for > and >>) or one subordinate process for each distinct\n" " value of the piped-to command (for |). Output-formatting flags are taken from\n" " the main command line.\n" "\n" " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" " etc., to control the format of the output. See also %s -h.\n" "\n" " emit with redirect and tee with redirect are identical, except tee can only\n" " output $*.\n" "\n" " Example: mlr --from f.dat put 'tee > \"/tmp/data-\".$a, $*'\n" " Example: mlr --from f.dat put 'tee >> \"/tmp/data-\".$a.$b, $*'\n" " Example: mlr --from f.dat put 'tee > stderr, $*'\n" " Example: mlr --from f.dat put -q 'tee | \"tr \[a-z\\] \[A-Z\\]\", $*'\n" " Example: mlr --from f.dat put -q 'tee | \"tr \[a-z\\] \[A-Z\\] > /tmp/data-\".$a, $*'\n" " Example: mlr --from f.dat put -q 'tee | \"gzip > /tmp/data-\".$a.\".gz\", $*'\n" " Example: mlr --from f.dat put -q --ojson 'tee | \"gzip > /tmp/data-\".$a.\".gz\", $*'\n", MLR_GLOBALS.bargv0); } static void mlr_dsl_true_keyword_usage(FILE* ostream) { fprintf(ostream, "true: the boolean literal value.\n" ); } static void mlr_dsl_unset_keyword_usage(FILE* ostream) { fprintf(ostream, "unset: clears field(s) from the current record, or an out-of-stream or local variable.\n" "\n" " Example: mlr --from f.dat put 'unset $x'\n" " Example: mlr --from f.dat put 'unset $*'\n" " Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ \"a.*\") { unset $[k] } }'\n" " Example: mlr --from f.dat put '...; unset @sums'\n" " Example: mlr --from f.dat put '...; unset @sums[\"green\"]'\n" " Example: mlr --from f.dat put '...; unset @*'\n"); } static void mlr_dsl_var_keyword_usage(FILE* ostream) { fprintf(ostream, "var: declares an untyped local variable in the current curly-braced scope.\n" "Examples: 'var a=1', 'var xyz=\"\"'\n" ); } static void mlr_dsl_while_keyword_usage(FILE* ostream) { fprintf(ostream, "while: introduces a while loop, or with \"do\", introduces a do-while loop.\n" "The body statements must be wrapped in curly braces.\n" ); } static void mlr_dsl_ENV_keyword_usage(FILE *ostream) { fprintf(ostream, "ENV: access to environment variables by name, e.g. '$home = ENV[\"HOME\"]'\n" ); } static void mlr_dsl_FILENAME_keyword_usage(FILE *ostream) { fprintf(ostream, "FILENAME: evaluates to the name of the current file being processed.\n" ); } static void mlr_dsl_FILENUM_keyword_usage(FILE *ostream) { fprintf(ostream, "FILENUM: evaluates to the number of the current file being processed,\n" "starting with 1.\n" ); } static void mlr_dsl_FNR_keyword_usage(FILE *ostream) { fprintf(ostream, "FNR: evaluates to the number of the current record within the current file\n" "being processed, starting with 1. Resets at the start of each file.\n" ); } static void mlr_dsl_IFS_keyword_usage(FILE *ostream) { fprintf(ostream, "IFS: evaluates to the input field separator from the command line.\n" ); } static void mlr_dsl_IPS_keyword_usage(FILE *ostream) { fprintf(ostream, "IPS: evaluates to the input pair separator from the command line.\n" ); } static void mlr_dsl_IRS_keyword_usage(FILE *ostream) { fprintf(ostream, "IRS: evaluates to the input record separator from the command line,\n" "or to LF or CRLF from the input data if in autodetect mode (which is\n" "the default).\n" ); } static void mlr_dsl_M_E_keyword_usage(FILE *ostream) { fprintf(ostream, "M_E: the mathematical constant e.\n" ); } static void mlr_dsl_M_PI_keyword_usage(FILE *ostream) { fprintf(ostream, "M_PI: the mathematical constant pi.\n" ); } static void mlr_dsl_NF_keyword_usage(FILE *ostream) { fprintf(ostream, "NF: evaluates to the number of fields in the current record.\n" ); } static void mlr_dsl_NR_keyword_usage(FILE *ostream) { fprintf(ostream, "NR: evaluates to the number of the current record over all files\n" "being processed, starting with 1. Does not reset at the start of each file.\n" ); } static void mlr_dsl_OFS_keyword_usage(FILE *ostream) { fprintf(ostream, "OFS: evaluates to the output field separator from the command line.\n" ); } static void mlr_dsl_OPS_keyword_usage(FILE *ostream) { fprintf(ostream, "OPS: evaluates to the output pair separator from the command line.\n" ); } static void mlr_dsl_ORS_keyword_usage(FILE *ostream) { fprintf(ostream, "ORS: evaluates to the output record separator from the command line,\n" "or to LF or CRLF from the input data if in autodetect mode (which is\n" "the default).\n" ); } miller-5.6.2/c/dsl/mlr_dsl_cst_loop_control_statements.c000066400000000000000000000033161354153536500235420ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ static mlr_dsl_cst_statement_freer_t free_break; static mlr_dsl_cst_statement_handler_t handle_break; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_break(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { return mlr_dsl_cst_statement_valloc( pnode, handle_break, free_break, NULL); } static void free_break(mlr_dsl_cst_statement_t* pstatement, context_t* _) { } // ---------------------------------------------------------------- static void handle_break( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { loop_stack_set(pvars->ploop_stack, LOOP_BROKEN); } // ================================================================ static mlr_dsl_cst_statement_handler_t handle_continue; static mlr_dsl_cst_statement_freer_t free_continue; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_continue(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { return mlr_dsl_cst_statement_valloc( pnode, handle_continue, free_continue, NULL); } // ---------------------------------------------------------------- static void handle_continue( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { loop_stack_set(pvars->ploop_stack, LOOP_CONTINUED); } static void free_continue(mlr_dsl_cst_statement_t* pstatement, context_t* _) { } miller-5.6.2/c/dsl/mlr_dsl_cst_map_assignment_statements.c000066400000000000000000000516321354153536500240420ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "keylist_evaluators.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ typedef struct _full_srec_assignment_state_t { rxval_evaluator_t* prhs_xevaluator; } full_srec_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_full_srec_assignment_nop; static mlr_dsl_cst_statement_handler_t handle_full_srec_assignment; static mlr_dsl_cst_statement_freer_t free_full_srec_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_full_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { full_srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof( full_srec_assignment_state_t)); mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_FULL_SREC); mlr_dsl_cst_statement_handler_t* phandler = handle_full_srec_assignment; if (prhs_node->type == MD_AST_NODE_TYPE_FULL_SREC) { // '$* = $*' is a syntactically acceptable no-op pstate->prhs_xevaluator = NULL; phandler = handle_full_srec_assignment_nop; } else { pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( prhs_node, pcst->pfmgr, type_inferencing, context_flags); phandler = handle_full_srec_assignment; } return mlr_dsl_cst_statement_valloc( pnode, phandler, free_full_srec_assignment, pstate); } // ---------------------------------------------------------------- static void free_full_srec_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { full_srec_assignment_state_t* pstate = pstatement->pvstate; if (pstate->prhs_xevaluator != NULL) { pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); } free(pstate); } // ---------------------------------------------------------------- static void handle_full_srec_assignment_nop( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { } // ---------------------------------------------------------------- static void handle_full_srec_assignment( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { full_srec_assignment_state_t* pstate = pstatement->pvstate; lrec_t* poutrec = lrec_unbacked_alloc(); // pinrec might be part of the RHS. lhmsmv_t* pout_typed_overlay = lhmsmv_alloc(); rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); if (!boxed_xval.xval.is_terminal) { for (mlhmmv_level_entry_t* pe = boxed_xval.xval.pnext_level->phead; pe != NULL; pe = pe->pnext) { mv_t* pkey = &pe->level_key; mlhmmv_xvalue_t* pval = &pe->level_xvalue; if (pval->is_terminal) { // xxx else collapse-down using json separator? char* skey = mv_alloc_format_val(pkey); // xxx if we're going to transfer here *and* free below, this needs a nullptr poke // at the copy-from site //mv_t val = boxed_xval.is_ephemeral ? pval->terminal_mlrval : mv_copy(&pval->terminal_mlrval); mv_t val = mv_copy(&pval->terminal_mlrval); // Write typed mlrval output to the typed overlay rather than into the lrec // (which holds only string values). // // The rval_evaluator reads the overlay in preference to the lrec. E.g. if the // input had "x"=>"abc","y"=>"def" but a previous statement had set "y"=>7.4 and // "z"=>"ghi", then an expression right-hand side referring to $y would get the // floating-point value 7.4. So we don't need to lrec_put the value here, and // moreover should not for two reasons: (1) there is a performance hit of doing // throwaway number-to-string formatting -- it's better to do it once at the // end; (2) having the string values doubly owned by the typed overlay and the // lrec would result in double frees, or awkward bookkeeping. However, the NR // variable evaluator reads prec->field_count, so we need to put something here. // And putting something statically allocated minimizes copying/freeing. lhmsmv_put(pout_typed_overlay, mlr_strdup_or_die(skey), &val, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); lrec_put(poutrec, skey, "bug", FREE_ENTRY_KEY); } } if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } else { mlhmmv_xvalue_free(&boxed_xval.xval); } lrec_free(pvars->pinrec); lhmsmv_free(pvars->ptyped_overlay); pvars->pinrec = poutrec; pvars->ptyped_overlay = pout_typed_overlay; } // ================================================================ typedef struct _local_variable_definition_state_t { char* lhs_variable_name; int lhs_frame_relative_index; int lhs_type_mask; rxval_evaluator_t* prhs_xevaluator; } local_variable_definition_state_t; static mlr_dsl_cst_statement_handler_t handle_local_variable_definition_from_xval; static mlr_dsl_cst_statement_freer_t free_local_variable_definition; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_local_variable_definition( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, int type_mask) { local_variable_definition_state_t* pstate = mlr_malloc_or_die( sizeof(local_variable_definition_state_t)); pstate->lhs_variable_name = NULL; pstate->lhs_frame_relative_index = MD_UNUSED_INDEX; pstate->lhs_type_mask = 0; pstate->prhs_xevaluator = NULL; mlr_dsl_ast_node_t* pname_node = pnode->pchildren->phead->pvvalue; pstate->lhs_variable_name = pname_node->text; MLR_INTERNAL_CODING_ERROR_IF(pname_node->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->lhs_frame_relative_index = pname_node->vardef_frame_relative_index; pstate->lhs_type_mask = type_mask; mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( prhs_node, pcst->pfmgr, type_inferencing, context_flags); pstatement_handler = handle_local_variable_definition_from_xval; return mlr_dsl_cst_statement_valloc( pnode, pstatement_handler, free_local_variable_definition, pstate); } // ---------------------------------------------------------------- static void free_local_variable_definition(mlr_dsl_cst_statement_t* pstatement, context_t* _) { local_variable_definition_state_t* pstate = pstatement->pvstate; pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_local_variable_definition_from_xval( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { local_variable_definition_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); if (boxed_xval.is_ephemeral) { local_stack_frame_define_extended(pframe, pstate->lhs_variable_name, pstate->lhs_frame_relative_index, pstate->lhs_type_mask, boxed_xval.xval); } else { local_stack_frame_define_extended(pframe, pstate->lhs_variable_name, pstate->lhs_frame_relative_index, pstate->lhs_type_mask, mlhmmv_xvalue_copy(&boxed_xval.xval)); } } // ================================================================ typedef struct _nonindexed_local_variable_assignment_state_t { char* lhs_variable_name; // For error messages only: stack-index is computed by stack-allocator: int lhs_frame_relative_index; rxval_evaluator_t* prhs_xevaluator; } nonindexed_local_variable_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_nonindexed_local_variable_assignment_from_xval; static mlr_dsl_cst_statement_freer_t free_nonindexed_local_variable_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_nonindexed_local_variable_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { nonindexed_local_variable_assignment_state_t* pstate = mlr_malloc_or_die(sizeof( nonindexed_local_variable_assignment_state_t)); pstate->lhs_variable_name = NULL; pstate->lhs_frame_relative_index = MD_UNUSED_INDEX; pstate->prhs_xevaluator = NULL; MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE); MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren != NULL); pstate->lhs_variable_name = plhs_node->text; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->lhs_frame_relative_index = plhs_node->vardef_frame_relative_index; mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( prhs_node, pcst->pfmgr, type_inferencing, context_flags); pstatement_handler = handle_nonindexed_local_variable_assignment_from_xval; return mlr_dsl_cst_statement_valloc( pnode, pstatement_handler, free_nonindexed_local_variable_assignment, pstate); } // ---------------------------------------------------------------- static void free_nonindexed_local_variable_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { nonindexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; if (pstate->prhs_xevaluator != NULL) { pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); } free(pstate); } // ---------------------------------------------------------------- static void handle_nonindexed_local_variable_assignment_from_xval( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { nonindexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); if (!boxed_xval.xval.is_terminal || mv_is_present(&boxed_xval.xval.terminal_mlrval)) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); if (boxed_xval.is_ephemeral) { local_stack_frame_assign_extended_nonindexed(pframe, pstate->lhs_frame_relative_index, boxed_xval.xval); } else { local_stack_frame_assign_extended_nonindexed(pframe, pstate->lhs_frame_relative_index, mlhmmv_xvalue_copy(&boxed_xval.xval)); } } } // ================================================================ typedef struct _indexed_local_variable_assignment_state_t { char* lhs_variable_name; // For error messages only: stack-index is computed by stack-allocator: int lhs_frame_relative_index; sllv_t* plhs_keylist_evaluators; rxval_evaluator_t* prhs_xevaluator; } indexed_local_variable_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_indexed_local_variable_assignment_from_xval; static mlr_dsl_cst_statement_freer_t free_indexed_local_variable_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_indexed_local_variable_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { indexed_local_variable_assignment_state_t* pstate = mlr_malloc_or_die(sizeof( indexed_local_variable_assignment_state_t)); pstate->lhs_variable_name = NULL; pstate->lhs_frame_relative_index = MD_UNUSED_INDEX; pstate->prhs_xevaluator = NULL; mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE); MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren == NULL); pstate->lhs_variable_name = plhs_node->text; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->lhs_frame_relative_index = plhs_node->vardef_frame_relative_index; pstate->plhs_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( plhs_node, pcst->pfmgr, type_inferencing, context_flags); mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( prhs_node, pcst->pfmgr, type_inferencing, context_flags); pstatement_handler = handle_indexed_local_variable_assignment_from_xval; return mlr_dsl_cst_statement_valloc( pnode, pstatement_handler, free_indexed_local_variable_assignment, pstate); } // ---------------------------------------------------------------- static void free_indexed_local_variable_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { indexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; for (sllve_t* pe = pstate->plhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* pev = pe->pvvalue; pev->pfree_func(pev); } sllv_free(pstate->plhs_keylist_evaluators); pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_indexed_local_variable_assignment_from_xval( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { indexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; int lhs_keys_all_non_null_or_error; sllmv_t* pmvkeys = evaluate_list(pstate->plhs_keylist_evaluators, pvars, &lhs_keys_all_non_null_or_error); if (lhs_keys_all_non_null_or_error) { rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); if (!boxed_xval.xval.is_terminal || mv_is_present(&boxed_xval.xval.terminal_mlrval)) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); if (boxed_xval.is_ephemeral) { local_stack_frame_assign_extended_indexed(pframe, pstate->lhs_frame_relative_index, pmvkeys, boxed_xval.xval); } else { local_stack_frame_assign_extended_indexed(pframe, pstate->lhs_frame_relative_index, pmvkeys, mlhmmv_xvalue_copy(&boxed_xval.xval)); } } } sllmv_free(pmvkeys); } // ================================================================ typedef struct _oosvar_assignment_state_t { sllv_t* plhs_keylist_evaluators; rxval_evaluator_t* prhs_xevaluator; } oosvar_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_oosvar_assignment_from_xval; static mlr_dsl_cst_statement_freer_t free_oosvar_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_oosvar_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { oosvar_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(oosvar_assignment_state_t)); pstate->plhs_keylist_evaluators = NULL; pstate->prhs_xevaluator = NULL; mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_OOSVAR_KEYLIST); pstate->plhs_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( plhs_node, pcst->pfmgr, type_inferencing, context_flags); mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( prhs_node, pcst->pfmgr, type_inferencing, context_flags); pstatement_handler = handle_oosvar_assignment_from_xval; return mlr_dsl_cst_statement_valloc( pnode, pstatement_handler, free_oosvar_assignment, pstate); } // ---------------------------------------------------------------- static void free_oosvar_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { oosvar_assignment_state_t* pstate = pstatement->pvstate; for (sllve_t* pe = pstate->plhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* pev = pe->pvvalue; pev->pfree_func(pev); } sllv_free(pstate->plhs_keylist_evaluators); if (pstate->prhs_xevaluator != NULL) { pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); } free(pstate); } // ---------------------------------------------------------------- static void handle_oosvar_assignment_from_xval( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { oosvar_assignment_state_t* pstate = pstatement->pvstate; int lhs_all_non_null_or_error = TRUE; sllmv_t* plhskeys = evaluate_list(pstate->plhs_keylist_evaluators, pvars, &lhs_all_non_null_or_error); if (lhs_all_non_null_or_error) { rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); if (!boxed_xval.xval.is_terminal || mv_is_present(&boxed_xval.xval.terminal_mlrval)) { if (boxed_xval.is_ephemeral) { mlhmmv_level_put_xvalue(pvars->poosvars->root_xvalue.pnext_level, plhskeys->phead, &boxed_xval.xval); } else { mlhmmv_xvalue_t copy_xval = mlhmmv_xvalue_copy(&boxed_xval.xval); mlhmmv_level_put_xvalue(pvars->poosvars->root_xvalue.pnext_level, plhskeys->phead, ©_xval); } } } sllmv_free(plhskeys); } // ================================================================ typedef struct _full_oosvar_assignment_state_t { rxval_evaluator_t* prhs_xevaluator; } full_oosvar_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_full_oosvar_assignment_from_xval; static mlr_dsl_cst_statement_handler_t handle_full_oosvar_assignment_nop; static mlr_dsl_cst_statement_freer_t free_full_oosvar_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_full_oosvar_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { full_oosvar_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(full_oosvar_assignment_state_t)); pstate->prhs_xevaluator = NULL; mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_UNLESS(plhs_node->type == MD_AST_NODE_TYPE_FULL_OOSVAR); mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; if (prhs_node->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { pstatement_handler = handle_full_oosvar_assignment_nop; } else { pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( prhs_node, pcst->pfmgr, type_inferencing, context_flags); pstatement_handler = handle_full_oosvar_assignment_from_xval; } return mlr_dsl_cst_statement_valloc( pnode, pstatement_handler, free_full_oosvar_assignment, pstate); } // ---------------------------------------------------------------- static void free_full_oosvar_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { full_oosvar_assignment_state_t* pstate = pstatement->pvstate; if (pstate->prhs_xevaluator != NULL) { pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); } free(pstate); } // ---------------------------------------------------------------- static void handle_full_oosvar_assignment_from_xval( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { full_oosvar_assignment_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); if (boxed_xval.xval.is_terminal) { mlhmmv_root_clear(pvars->poosvars); mlhmmv_xvalue_free(&boxed_xval.xval); } else { if (boxed_xval.is_ephemeral) { mlhmmv_level_free(pvars->poosvars->root_xvalue.pnext_level); pvars->poosvars->root_xvalue.pnext_level = boxed_xval.xval.pnext_level; } else { mlhmmv_xvalue_t copy = mlhmmv_xvalue_copy(&boxed_xval.xval); mlhmmv_root_clear(pvars->poosvars); for (mlhmmv_level_entry_t* pe = copy.pnext_level->phead; pe != NULL; pe = pe->pnext) { // xxx comment: value transfer not copy. mlhmmv_level_put_xvalue_singly_keyed(pvars->poosvars->root_xvalue.pnext_level, &pe->level_key, &pe->level_xvalue); pe->level_xvalue.terminal_mlrval = mv_absent(); pe->level_xvalue.pnext_level = NULL; pe->level_xvalue.is_terminal = TRUE; } mlhmmv_xvalue_free(©); } } } // ---------------------------------------------------------------- // @* = @* static void handle_full_oosvar_assignment_nop( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { } miller-5.6.2/c/dsl/mlr_dsl_cst_output_statements.c000066400000000000000000001451621354153536500223770ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "keylist_evaluators.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ---------------------------------------------------------------- static file_output_mode_t file_output_mode_from_ast_node_type(mlr_dsl_ast_node_type_t mlr_dsl_ast_node_type) { switch(mlr_dsl_ast_node_type) { case MD_AST_NODE_TYPE_FILE_APPEND: return MODE_APPEND; case MD_AST_NODE_TYPE_PIPE: return MODE_PIPE; case MD_AST_NODE_TYPE_FILE_WRITE: return MODE_WRITE; default: MLR_INTERNAL_CODING_ERROR(); return MODE_WRITE; // not reached } } // ================================================================ typedef struct _print_state_t { rxval_evaluator_t* prhs_xevaluator; FILE* stdfp; file_output_mode_t file_output_mode; rval_evaluator_t* poutput_filename_evaluator; int flush_every_record; multi_out_t* pmulti_out; char* print_terminator; } print_state_t; static mlr_dsl_cst_statement_handler_t handle_print; static mlr_dsl_cst_statement_freer_t free_print; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_print( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, char* print_terminator) { print_state_t* pstate = mlr_malloc_or_die(sizeof(print_state_t)); pstate->prhs_xevaluator = NULL; pstate->stdfp = NULL; pstate->poutput_filename_evaluator = NULL; pstate->pmulti_out = NULL; MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); mlr_dsl_ast_node_t* pvalue_node = pnode->pchildren->phead->pvvalue; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast(pvalue_node, pcst->pfmgr, type_inferencing, context_flags); pstate->print_terminator = print_terminator; mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren->phead->pvvalue; if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) { pstate->stdfp = stdout; } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { pstate->stdfp = stderr; } else { pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, type_inferencing, context_flags); pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); pstate->pmulti_out = multi_out_alloc(); } pstate->flush_every_record = pcst->flush_every_record; return mlr_dsl_cst_statement_valloc( pnode, handle_print, free_print, pstate); } // ---------------------------------------------------------------- static void free_print(mlr_dsl_cst_statement_t* pstatement, context_t* _) { print_state_t* pstate = pstatement->pvstate; if (pstate->prhs_xevaluator != NULL) { pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); } if (pstate->poutput_filename_evaluator != NULL) { pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); } if (pstate->pmulti_out != NULL) { multi_out_close(pstate->pmulti_out); multi_out_free(pstate->pmulti_out); } free(pstate); } // ---------------------------------------------------------------- static void handle_print( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { print_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t bxval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); char sfree_flags = NO_FREE; char* sval = "{is-a-map}"; if (bxval.xval.is_terminal) { sval = mv_alloc_format_val(&bxval.xval.terminal_mlrval); sfree_flags = FREE_ENTRY_VALUE; } rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; if (poutput_filename_evaluator == NULL) { fprintf(pstate->stdfp, "%s%s", sval, pstate->print_terminator); if (pstate->flush_every_record) fflush(pstate->stdfp); } else { mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); char fn_free_flags; char* filename = mv_format_val(&filename_mv, &fn_free_flags); FILE* outfp = multi_out_get(pstate->pmulti_out, filename, pstate->file_output_mode); fprintf(outfp, "%s%s", sval, pstate->print_terminator); if (pstate->flush_every_record) fflush(outfp); if (fn_free_flags) free(filename); mv_free(&filename_mv); } if (sfree_flags) { free(sval); } if (bxval.is_ephemeral) { mlhmmv_xvalue_free(&bxval.xval); } } // ================================================================ typedef struct _tee_state_t { FILE* stdfp; file_output_mode_t file_output_mode; rval_evaluator_t* poutput_filename_evaluator; int flush_every_record; lrec_writer_t* psingle_lrec_writer; multi_lrec_writer_t* pmulti_lrec_writer; } tee_state_t; static mlr_dsl_cst_statement_handler_t handle_tee_to_stdfp; static mlr_dsl_cst_statement_handler_t handle_tee_to_file; static mlr_dsl_cst_statement_freer_t free_tee; static lrec_t* handle_tee_common( tee_state_t* pstate, variables_t* pvars, cst_outputs_t* pcst_outputs); // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_tee(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { tee_state_t* pstate = mlr_malloc_or_die(sizeof(tee_state_t)); pstate->stdfp = NULL; pstate->poutput_filename_evaluator = NULL; pstate->psingle_lrec_writer = NULL; pstate->pmulti_lrec_writer = NULL; mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren->phead->pvvalue; pstate->flush_every_record = pcst->flush_every_record; if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; return mlr_dsl_cst_statement_valloc( pnode, handle_tee_to_stdfp, free_tee, pstate); } else { pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, type_inferencing, context_flags); pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); return mlr_dsl_cst_statement_valloc( pnode, handle_tee_to_file, free_tee, pstate); } } // ---------------------------------------------------------------- static void free_tee(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { tee_state_t* pstate = pstatement->pvstate; if (pstate->poutput_filename_evaluator != NULL) { pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); } if (pstate->psingle_lrec_writer != NULL) { pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); } if (pstate->pmulti_lrec_writer != NULL) { multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); } free(pstate); } // ---------------------------------------------------------------- static void handle_tee_to_stdfp( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { tee_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->psingle_lrec_writer == NULL) pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); lrec_t* pcopy = handle_tee_common(pstate, pvars, pcst_outputs); // The writer frees the lrec pstate->psingle_lrec_writer->pprocess_func(pstate->psingle_lrec_writer->pvstate, pstate->stdfp, pcopy, pvars->pctx); if (pstate->flush_every_record) fflush(pstate->stdfp); } // ---------------------------------------------------------------- static void handle_tee_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { tee_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->pmulti_lrec_writer == NULL) pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); lrec_t* pcopy = handle_tee_common(pstate, pvars, pcst_outputs); char fn_free_flags = 0; char* filename = mv_format_val(&filename_mv, &fn_free_flags); // The writer frees the lrec multi_lrec_writer_output_srec(pstate->pmulti_lrec_writer, pcopy, filename, pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); if (fn_free_flags) free(filename); mv_free(&filename_mv); } // ---------------------------------------------------------------- static lrec_t* handle_tee_common( tee_state_t* pstate, variables_t* pvars, cst_outputs_t* pcst_outputs) { lrec_t* pcopy = lrec_copy(pvars->pinrec); // Write the output fields from the typed overlay back to the lrec. for (lhmsmve_t* pe = pvars->ptyped_overlay->phead; pe != NULL; pe = pe->pnext) { char* output_field_name = pe->key; mv_t* pval = &pe->value; // Ownership transfer from mv_t to lrec. if (pval->type == MT_STRING || pval->type == MT_EMPTY) { lrec_put(pcopy, output_field_name, mlr_strdup_or_die(pval->u.strv), FREE_ENTRY_VALUE); } else { char free_flags = NO_FREE; char* string = mv_format_val(pval, &free_flags); lrec_put(pcopy, output_field_name, string, free_flags); } } return pcopy; } // ================================================================ // Most statements have one item, except emit and emitf. struct _emitf_item_t; typedef void emitf_item_handler_t( struct _emitf_item_t* pemitf_item, variables_t* pvars, cst_outputs_t* pcst_outputs); typedef struct _emitf_item_t { char* srec_field_name; rval_evaluator_t* parg_evaluator; } emitf_item_t; static emitf_item_t* alloc_emitf_item(char* srec_field_name, rval_evaluator_t* parg_evaluator); static void free_emitf_item(emitf_item_t* pemitf_item); // ---------------------------------------------------------------- typedef struct _emitf_state_t { FILE* stdfp; file_output_mode_t file_output_mode; rval_evaluator_t* poutput_filename_evaluator; int flush_every_record; lrec_writer_t* psingle_lrec_writer; multi_lrec_writer_t* pmulti_lrec_writer; sllv_t* pemitf_items; } emitf_state_t; static mlr_dsl_cst_statement_handler_t handle_emitf; static mlr_dsl_cst_statement_freer_t free_emitf; static void handle_emitf( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_emitf_to_stdfp( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_emitf_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_emitf_common( emitf_state_t* pstate, variables_t* pvars, sllv_t* poutrecs); // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_emitf(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { emitf_state_t* pstate = mlr_malloc_or_die(sizeof(emitf_state_t)); pstate->stdfp = NULL; pstate->poutput_filename_evaluator = NULL; pstate->psingle_lrec_writer = NULL; pstate->pmulti_lrec_writer = NULL; pstate->pemitf_items = NULL; mlr_dsl_ast_node_t* pnamesnode = pnode->pchildren->phead->pvvalue; // Loop over oosvar names to emit in e.g. 'emitf @a, @b, @c'. pstate->pemitf_items = sllv_alloc(); for (sllve_t* pe = pnamesnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pwalker = pe->pvvalue; char* name = NULL; switch(pwalker->type) { case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: name = ((mlr_dsl_ast_node_t*)(pwalker->pchildren->phead->pvvalue))->text; break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: name = pwalker->text; break; case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: name = pwalker->text; break; default: MLR_INTERNAL_CODING_ERROR(); break; } sllv_append(pstate->pemitf_items, alloc_emitf_item( name, rval_evaluator_alloc_from_ast(pwalker, pcst->pfmgr, type_inferencing, context_flags))); } mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren == NULL ? NULL : poutput_node->pchildren->phead == NULL ? NULL : poutput_node->pchildren->phead->pvvalue; mlr_dsl_cst_statement_handler_t* phandler = NULL; if (poutput_node->type == MD_AST_NODE_TYPE_STREAM) { phandler = handle_emitf; } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; phandler = handle_emitf_to_stdfp; } else { pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, type_inferencing, context_flags); pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); phandler = handle_emitf_to_file; } pstate->flush_every_record = pcst->flush_every_record; return mlr_dsl_cst_statement_valloc( pnode, phandler, free_emitf, pstate); } static emitf_item_t* alloc_emitf_item(char* srec_field_name, rval_evaluator_t* parg_evaluator) { emitf_item_t* pemitf_item = mlr_malloc_or_die(sizeof(emitf_item_t)); pemitf_item->srec_field_name = srec_field_name; pemitf_item->parg_evaluator = parg_evaluator; return pemitf_item; } static void free_emitf_item(emitf_item_t* pemitf_item) { pemitf_item->parg_evaluator->pfree_func(pemitf_item->parg_evaluator); free(pemitf_item); } static void free_emitf(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { emitf_state_t* pstate = pstatement->pvstate; if (pstate->poutput_filename_evaluator != NULL) { pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); } if (pstate->psingle_lrec_writer != NULL) { pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); } if (pstate->pmulti_lrec_writer != NULL) { multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); } if (pstate->pemitf_items != NULL) { for (sllve_t* pe = pstate->pemitf_items->phead; pe != NULL; pe = pe->pnext) free_emitf_item(pe->pvvalue); sllv_free(pstate->pemitf_items); } free(pstate); } // ---------------------------------------------------------------- static void handle_emitf( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emitf_state_t* pstate = pstatement->pvstate; handle_emitf_common(pstate, pvars, pcst_outputs->poutrecs); } static void handle_emitf_to_stdfp( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emitf_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->psingle_lrec_writer == NULL) pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); sllv_t* poutrecs = sllv_alloc(); handle_emitf_common(pstate, pvars, poutrecs); lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); if (pstate->flush_every_record) fflush(pstate->stdfp); sllv_free(poutrecs); } static void handle_emitf_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emitf_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->pmulti_lrec_writer == NULL) pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); sllv_t* poutrecs = sllv_alloc(); handle_emitf_common(pstate, pvars, poutrecs); char fn_free_flags = 0; char* filename = mv_format_val(&filename_mv, &fn_free_flags); multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); sllv_free(poutrecs); if (fn_free_flags) free(filename); mv_free(&filename_mv); } static void handle_emitf_common( emitf_state_t* pstate, variables_t* pvars, sllv_t* poutrecs) { lrec_t* prec_to_emit = lrec_unbacked_alloc(); for (sllve_t* pf = pstate->pemitf_items->phead; pf != NULL; pf = pf->pnext) { emitf_item_t* pemitf_item = pf->pvvalue; char* srec_field_name = pemitf_item->srec_field_name; rval_evaluator_t* parg_evaluator = pemitf_item->parg_evaluator; // This is overkill ... the grammar allows only for oosvar names as args to emit. So we could bypass // that and just hashmap-get keyed by srec_field_name here. mv_t val = parg_evaluator->pprocess_func(parg_evaluator->pvstate, pvars); if (val.type == MT_STRING) { // Ownership transfer from (newly created) mlrval to (newly created) lrec. lrec_put(prec_to_emit, srec_field_name, val.u.strv, val.free_flags); } else { char free_flags = NO_FREE; char* string = mv_format_val(&val, &free_flags); lrec_put(prec_to_emit, srec_field_name, string, free_flags); } } sllv_append(poutrecs, prec_to_emit); } // ================================================================ struct _emit_state_t; // Forward reference typedef void record_emitter_t( struct _emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator); typedef struct _emit_state_t { rval_evaluator_t* poutput_filename_evaluator; FILE* stdfp; file_output_mode_t file_output_mode; sllv_t* pemit_namelist_evaluators; int do_full_prefixing; record_emitter_t* precord_emitter; // For map literals rxval_evaluator_t* prhs_xevaluator; // For local variables char* localvar_name; int localvar_frame_relative_index; // For oosvars and localvars: indices ["a", 1, $2] in 'for (k,v in @a[1][$2]) {...}'. sllv_t* pemit_keylist_evaluators; lrec_writer_t* psingle_lrec_writer; // emit/tee to stdout/stderr multi_lrec_writer_t* pmulti_lrec_writer; // emit-to-file int flush_every_record; } emit_state_t; static mlr_dsl_cst_statement_handler_t handle_emit; static mlr_dsl_cst_statement_handler_t handle_emit_to_stdfp; static mlr_dsl_cst_statement_handler_t handle_emit_to_file; static void record_emitter_from_oosvar( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator); static void record_emitter_from_local_variable( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator); static void record_emitter_from_full_srec( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator); static void record_emitter_from_ephemeral_map( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator); static mlr_dsl_cst_statement_handler_t handle_emit_all; static mlr_dsl_cst_statement_handler_t handle_emit_all_to_stdfp; static mlr_dsl_cst_statement_handler_t handle_emit_all_to_file; static mlr_dsl_cst_statement_freer_t free_emit; // ---------------------------------------------------------------- // $ mlr -n put -v 'emit @a[2][3], "x", "y", "z"' // AST ROOT: // text="list", type=statement_list: // text="emit", type=emit: // text="emit", type=emit: // text="oosvar_keylist", type=oosvar_keylist: // text="a", type=string_literal. // text="2", type=numeric_literal. // text="3", type=numeric_literal. // text="emit_namelist", type=emit: // text="x", type=numeric_literal. // text="y", type=numeric_literal. // text="z", type=numeric_literal. // text="stream", type=stream: // // $ mlr -n put -v 'emit all, "x", "y", "z"' // AST ROOT: // text="list", type=statement_list: // text="emit", type=emit: // text="emit", type=emit: // text="all", type=all. // text="emit_namelist", type=emit: // text="x", type=numeric_literal. // text="y", type=numeric_literal. // text="z", type=numeric_literal. // text="stream", type=stream: mlr_dsl_cst_statement_t* alloc_emit( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, int do_full_prefixing) { emit_state_t* pstate = mlr_malloc_or_die(sizeof(emit_state_t)); pstate->poutput_filename_evaluator = NULL; pstate->stdfp = NULL; pstate->precord_emitter = NULL; pstate->prhs_xevaluator = NULL; pstate->localvar_name = NULL; pstate->localvar_frame_relative_index = MD_UNUSED_INDEX; pstate->pemit_namelist_evaluators = NULL; pstate->pemit_keylist_evaluators = NULL; pstate->psingle_lrec_writer = NULL; pstate->pmulti_lrec_writer = NULL; mlr_dsl_ast_node_t* pemit_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pkeylist_node = pemit_node->pchildren->phead->pvvalue; // Name note: difference between keylist and namelist: in emit @a[$b]["c"], "d", @e, // the keylist is ["a", $b, "c"] and the namelist is ["d", @e]. // xxx why not rxval_evaluator here?? int output_all = FALSE; // The grammar allows only 'emit all', not 'emit @x, all, $y'. // So if 'all' appears at all, it's the only name. if (pkeylist_node->type == MD_AST_NODE_TYPE_ALL || pkeylist_node->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { output_all = TRUE; pstate->precord_emitter = record_emitter_from_oosvar; } else if (pkeylist_node->type == MD_AST_NODE_TYPE_OOSVAR_KEYLIST) { pstate->pemit_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); pstate->precord_emitter = record_emitter_from_oosvar; } else if (pkeylist_node->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { pstate->precord_emitter = record_emitter_from_local_variable; MLR_INTERNAL_CODING_ERROR_IF(pkeylist_node->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->localvar_name = pkeylist_node->text; pstate->localvar_frame_relative_index = pkeylist_node->vardef_frame_relative_index; pstate->pemit_keylist_evaluators = sllv_alloc(); } else if (pkeylist_node->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { pstate->precord_emitter = record_emitter_from_local_variable; MLR_INTERNAL_CODING_ERROR_IF(pkeylist_node->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->localvar_name = pkeylist_node->text; pstate->localvar_frame_relative_index = pkeylist_node->vardef_frame_relative_index; pstate->pemit_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); } else if (pkeylist_node->type == MD_AST_NODE_TYPE_FULL_SREC) { pstate->precord_emitter = record_emitter_from_full_srec; } else if (pkeylist_node->type == MD_AST_NODE_TYPE_FUNCTION_CALLSITE) { pstate->precord_emitter = record_emitter_from_ephemeral_map; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); } else if (pkeylist_node->type == MD_AST_NODE_TYPE_MAP_LITERAL) { pstate->precord_emitter = record_emitter_from_ephemeral_map; pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); } else { MLR_INTERNAL_CODING_ERROR(); } pstate->pemit_namelist_evaluators = sllv_alloc(); if (pemit_node->pchildren->length == 2) { mlr_dsl_ast_node_t* pnamelist_node = pemit_node->pchildren->phead->pnext->pvvalue; for (sllve_t* pe = pnamelist_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; sllv_append(pstate->pemit_namelist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pcst->pfmgr, type_inferencing, context_flags)); } } mlr_dsl_cst_statement_handler_t* phandler = NULL; pstate->do_full_prefixing = do_full_prefixing; mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren == NULL ? NULL : poutput_node->pchildren->phead == NULL ? NULL : poutput_node->pchildren->phead->pvvalue; if (poutput_node->type == MD_AST_NODE_TYPE_STREAM) { phandler = output_all ? handle_emit_all : handle_emit; } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { phandler = output_all ? handle_emit_all_to_stdfp : handle_emit_to_stdfp; pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; } else { pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, type_inferencing, context_flags); pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); phandler = output_all ? handle_emit_all_to_file : handle_emit_to_file; } pstate->flush_every_record = pcst->flush_every_record; return mlr_dsl_cst_statement_valloc( pnode, phandler, free_emit, pstate); } // ---------------------------------------------------------------- static void free_emit(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { emit_state_t* pstate = pstatement->pvstate; if (pstate->poutput_filename_evaluator != NULL) { pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); } if (pstate->prhs_xevaluator != NULL) { pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); } if (pstate->pemit_namelist_evaluators != NULL) { for (sllve_t* pe = pstate->pemit_namelist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* phandler = pe->pvvalue; phandler->pfree_func(phandler); } sllv_free(pstate->pemit_namelist_evaluators); } if (pstate->pemit_keylist_evaluators != NULL) { for (sllve_t* pe = pstate->pemit_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* phandler = pe->pvvalue; phandler->pfree_func(phandler); } sllv_free(pstate->pemit_keylist_evaluators); } if (pstate->psingle_lrec_writer != NULL) { pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); } if (pstate->pmulti_lrec_writer != NULL) { multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); } free(pstate); } // ---------------------------------------------------------------- static void handle_emit( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_state_t* pstate = pstatement->pvstate; pstate->precord_emitter(pstate, pvars, pcst_outputs->poutrecs, pcst_outputs->oosvar_flatten_separator); } // ---------------------------------------------------------------- static void handle_emit_to_stdfp( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_state_t* pstate = pstatement->pvstate; sllv_t* poutrecs = sllv_alloc(); pstate->precord_emitter(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->psingle_lrec_writer == NULL) pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); if (pstate->flush_every_record) fflush(pstate->stdfp); sllv_free(poutrecs); } // ---------------------------------------------------------------- static void handle_emit_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->pmulti_lrec_writer == NULL) pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); sllv_t* poutrecs = sllv_alloc(); pstate->precord_emitter(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); char fn_free_flags = 0; char* filename = mv_format_val(&filename_mv, &fn_free_flags); multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); sllv_free(poutrecs); if (fn_free_flags) free(filename); mv_free(&filename_mv); } // ---------------------------------------------------------------- static void record_emitter_from_oosvar( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator) { int keys_all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(pstate->pemit_keylist_evaluators, pvars, &keys_all_non_null_or_error); if (keys_all_non_null_or_error) { int names_all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &names_all_non_null_or_error); if (names_all_non_null_or_error) { mlhmmv_root_partial_to_lrecs(pvars->poosvars, pmvkeys, pmvnames, poutrecs, pstate->do_full_prefixing, oosvar_flatten_separator); } sllmv_free(pmvnames); } sllmv_free(pmvkeys); } static void record_emitter_from_local_variable( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator) { int keys_all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(pstate->pemit_keylist_evaluators, pvars, &keys_all_non_null_or_error); mv_t name = mv_from_string(pstate->localvar_name, NO_FREE); sllmv_prepend_no_free(pmvkeys, &name); if (keys_all_non_null_or_error) { int names_all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &names_all_non_null_or_error); if (names_all_non_null_or_error) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); mlhmmv_xvalue_t* pmval = local_stack_frame_ref_extended_from_indexed(pframe, pstate->localvar_frame_relative_index, NULL); if (pmval != NULL) { // Temporarily wrap the localvar in a parent map whose single key is the variable name. mlhmmv_root_t* pmap = mlhmmv_wrap_name_and_xvalue(&name, pmval); mlhmmv_root_partial_to_lrecs(pmap, pmvkeys, pmvnames, poutrecs, pstate->do_full_prefixing, oosvar_flatten_separator); mlhmmv_unwrap_name_and_xvalue(pmap); } } sllmv_free(pmvnames); } sllmv_free(pmvkeys); } static void record_emitter_from_full_srec( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator) { sllv_append(poutrecs, lrec_copy(pvars->pinrec)); } static void record_emitter_from_ephemeral_map( emit_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator) { rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); sllmv_t* pmvkeys = sllmv_alloc(); if (!boxed_xval.xval.is_terminal) { int names_all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &names_all_non_null_or_error); if (names_all_non_null_or_error) { mv_t name = mv_from_string("_", NO_FREE); sllmv_prepend_no_free(pmvkeys, &name); // Temporarily wrap the localvar in a parent map whose single key is the variable name. mlhmmv_root_t* pmap = mlhmmv_wrap_name_and_xvalue(&name, &boxed_xval.xval); mlhmmv_root_partial_to_lrecs(pmap, pmvkeys, pmvnames, poutrecs, pstate->do_full_prefixing, oosvar_flatten_separator); mlhmmv_unwrap_name_and_xvalue(pmap); } sllmv_free(pmvnames); } if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } sllmv_free(pmvkeys); } // ---------------------------------------------------------------- static void handle_emit_all( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_state_t* pstate = pstatement->pvstate; int all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { mlhmmv_root_all_to_lrecs(pvars->poosvars, pmvnames, pcst_outputs->poutrecs, pstate->do_full_prefixing, pcst_outputs->oosvar_flatten_separator); } sllmv_free(pmvnames); } // ---------------------------------------------------------------- static void handle_emit_all_to_stdfp( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->psingle_lrec_writer == NULL) pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); sllv_t* poutrecs = sllv_alloc(); int all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { mlhmmv_root_all_to_lrecs(pvars->poosvars, pmvnames, poutrecs, pstate->do_full_prefixing, pcst_outputs->oosvar_flatten_separator); } sllmv_free(pmvnames); lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); if (pstate->flush_every_record) fflush(pstate->stdfp); sllv_free(poutrecs); } // ---------------------------------------------------------------- static void handle_emit_all_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->pmulti_lrec_writer == NULL) pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); sllv_t* poutrecs = sllv_alloc(); rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); int all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { mlhmmv_root_all_to_lrecs(pvars->poosvars, pmvnames, poutrecs, pstate->do_full_prefixing, pcst_outputs->oosvar_flatten_separator); } char fn_free_flags = 0; char* filename = mv_format_val(&filename_mv, &fn_free_flags); multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); sllv_free(poutrecs); if (fn_free_flags) free(filename); mv_free(&filename_mv); sllmv_free(pmvnames); } // ================================================================ struct _emit_lashed_item_t; // Forward reference typedef struct _emit_lashed_item_t { rval_evaluator_t* pbasename_evaluator; rxval_evaluator_t* pitem_xevaluator; } emit_lashed_item_t; static emit_lashed_item_t* emit_lashed_item_alloc( rval_evaluator_t* pbasename_evaluator, rxval_evaluator_t* pitem_xevaluator) { emit_lashed_item_t* pitem = mlr_malloc_or_die(sizeof(emit_lashed_item_t)); pitem->pbasename_evaluator = pbasename_evaluator; pitem->pitem_xevaluator = pitem_xevaluator; return pitem; } static void emit_lashed_item_free(emit_lashed_item_t* pitem) { pitem->pbasename_evaluator->pfree_func(pitem->pbasename_evaluator); pitem->pitem_xevaluator->pfree_func(pitem->pitem_xevaluator); free(pitem); } // ---------------------------------------------------------------- typedef struct _emit_lashed_state_t { int num_emit_lashed_items; emit_lashed_item_t** ppitems; sllv_t* pemit_namelist_evaluators; // Used per-call but allocated once in the constructor: mv_t* pbasenames; boxed_xval_t* pboxed_xvals; mlhmmv_xvalue_t** ptop_values; rval_evaluator_t* poutput_filename_evaluator; FILE* stdfp; file_output_mode_t file_output_mode; lrec_writer_t* psingle_lrec_writer; // emit/tee to stdout/stderr multi_lrec_writer_t* pmulti_lrec_writer; // emit-to-file int do_full_prefixing; int flush_every_record; } emit_lashed_state_t; static mlr_dsl_cst_statement_handler_t handle_emit_lashed; static mlr_dsl_cst_statement_handler_t handle_emit_lashed_to_stdfp; static mlr_dsl_cst_statement_handler_t handle_emit_lashed_to_file; static void handle_emit_lashed_common( emit_lashed_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator); static void free_emit_lashed(mlr_dsl_cst_statement_t* pstatement, context_t* pctx); // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_emit_lashed(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags, int do_full_prefixing) { emit_lashed_state_t* pstate = mlr_malloc_or_die(sizeof(emit_lashed_state_t)); pstate->num_emit_lashed_items = 0; pstate->ppitems = NULL; pstate->pemit_namelist_evaluators = NULL; pstate->poutput_filename_evaluator = NULL; pstate->stdfp = NULL; pstate->psingle_lrec_writer = NULL; pstate->pmulti_lrec_writer = NULL; mlr_dsl_ast_node_t* pemit_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pkeylists_node = pemit_node->pchildren->phead->pvvalue; pstate->num_emit_lashed_items = pkeylists_node->pchildren->length; pstate->ppitems = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(emit_lashed_item_t*)); int i = 0; for (sllve_t* pe = pkeylists_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pkeylist_node = pe->pvvalue; rval_evaluator_t* pbasename_evaluator = NULL; switch (pkeylist_node->type) { case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: pbasename_evaluator = rval_evaluator_alloc_from_string(pkeylist_node->text); break; case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: pbasename_evaluator = rval_evaluator_alloc_from_string( ((mlr_dsl_ast_node_t*)pkeylist_node->pchildren->phead->pvvalue)->text); break; default: pbasename_evaluator = rval_evaluator_alloc_from_string("_"); break; } rxval_evaluator_t* pitem_xevaluator = rxval_evaluator_alloc_from_ast( pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); pstate->ppitems[i] = emit_lashed_item_alloc(pbasename_evaluator, pitem_xevaluator); } sllv_t* pemit_namelist_evaluators = sllv_alloc(); if (pemit_node->pchildren->length == 2) { mlr_dsl_ast_node_t* pnamelist_node = pemit_node->pchildren->phead->pnext->pvvalue; for (sllve_t* pe = pnamelist_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; sllv_append(pemit_namelist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pcst->pfmgr, type_inferencing, context_flags)); } } pstate->pemit_namelist_evaluators = pemit_namelist_evaluators; pstate->pbasenames = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(mv_t)); pstate->pboxed_xvals = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(boxed_xval_t)); pstate->ptop_values = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(mlhmmv_level_entry_t*)); mlr_dsl_cst_statement_handler_t* phandler = NULL; pstate->do_full_prefixing = do_full_prefixing; mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren == NULL ? NULL : poutput_node->pchildren->phead == NULL ? NULL : poutput_node->pchildren->phead->pvvalue; if (poutput_node->type == MD_AST_NODE_TYPE_STREAM) { phandler = handle_emit_lashed; } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { phandler = handle_emit_lashed_to_stdfp; pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; } else { pstate->poutput_filename_evaluator = NULL; pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, type_inferencing, context_flags); pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); phandler = handle_emit_lashed_to_file; } pstate->flush_every_record = pcst->flush_every_record; return mlr_dsl_cst_statement_valloc( pnode, phandler, free_emit_lashed, pstate); } // ---------------------------------------------------------------- static void free_emit_lashed(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { emit_lashed_state_t* pstate = pstatement->pvstate; if (pstate->ppitems != NULL) { for (int i = 0; i < pstate->num_emit_lashed_items; i++) { emit_lashed_item_free(pstate->ppitems[i]); } free(pstate->ppitems); } if (pstate->poutput_filename_evaluator != NULL) { pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); } if (pstate->pemit_namelist_evaluators != NULL) { for (sllve_t* pe = pstate->pemit_namelist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* phandler = pe->pvvalue; phandler->pfree_func(phandler); } sllv_free(pstate->pemit_namelist_evaluators); } free(pstate->pbasenames); free(pstate->pboxed_xvals); free(pstate->ptop_values); if (pstate->psingle_lrec_writer != NULL) { pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); } if (pstate->pmulti_lrec_writer != NULL) { multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); } free(pstate); } // ---------------------------------------------------------------- static void handle_emit_lashed( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_lashed_state_t* pstate = pstatement->pvstate; handle_emit_lashed_common(pstate, pvars, pcst_outputs->poutrecs, pcst_outputs->oosvar_flatten_separator); } static void handle_emit_lashed_to_stdfp( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_lashed_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->psingle_lrec_writer == NULL) pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); sllv_t* poutrecs = sllv_alloc(); handle_emit_lashed_common(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); if (pstate->flush_every_record) fflush(pstate->stdfp); sllv_free(poutrecs); } // ---------------------------------------------------------------- static void handle_emit_lashed_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { emit_lashed_state_t* pstate = pstatement->pvstate; // The opts aren't complete at alloc time so we need to handle them on first use. if (pstate->pmulti_lrec_writer == NULL) pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); sllv_t* poutrecs = sllv_alloc(); handle_emit_lashed_common(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); char fn_free_flags = 0; char* filename = mv_format_val(&filename_mv, &fn_free_flags); multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); sllv_free(poutrecs); if (fn_free_flags) free(filename); mv_free(&filename_mv); } // ---------------------------------------------------------------- static void handle_emit_lashed_common( emit_lashed_state_t* pstate, variables_t* pvars, sllv_t* poutrecs, char* oosvar_flatten_separator) { for (int i = 0; i < pstate->num_emit_lashed_items; i++) { rval_evaluator_t* pev = pstate->ppitems[i]->pbasename_evaluator; pstate->pbasenames[i] = pev->pprocess_func(pev->pvstate, pvars); } int names_all_non_null_or_error = TRUE; sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &names_all_non_null_or_error); if (names_all_non_null_or_error) { for (int i = 0; i < pstate->num_emit_lashed_items; i++) { emit_lashed_item_t* pitem = pstate->ppitems[i]; pstate->pboxed_xvals[i] = pitem->pitem_xevaluator->pprocess_func( pitem->pitem_xevaluator->pvstate, pvars); pstate->ptop_values[i] = &pstate->pboxed_xvals[i].xval; } mlhmmv_xvalues_to_lrecs_lashed(pstate->ptop_values, pstate->num_emit_lashed_items, pstate->pbasenames, pmvnames, poutrecs, pstate->do_full_prefixing, oosvar_flatten_separator); for (int i = 0; i < pstate->num_emit_lashed_items; i++) { if (pstate->pboxed_xvals[i].is_ephemeral) { mlhmmv_xvalue_free(&pstate->pboxed_xvals[i].xval); } } } sllmv_free(pmvnames); for (int i = 0; i < pstate->num_emit_lashed_items; i++) { mv_free(&pstate->pbasenames[i]); } } // ================================================================ struct _dump_state_t; // forward reference typedef struct _dump_state_t { rxval_evaluator_t* ptarget_xevaluator; FILE* stdfp; file_output_mode_t file_output_mode; rval_evaluator_t* poutput_filename_evaluator; int flush_every_record; multi_out_t* pmulti_out; } dump_state_t; static mlr_dsl_cst_statement_handler_t handle_dump; static mlr_dsl_cst_statement_handler_t handle_dump_to_file; static mlr_dsl_cst_statement_freer_t free_dump; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { dump_state_t* pstate = mlr_malloc_or_die(sizeof(dump_state_t)); pstate->ptarget_xevaluator = NULL; pstate->stdfp = NULL; pstate->poutput_filename_evaluator = NULL; pstate->pmulti_out = NULL; pstate->flush_every_record = pcst->flush_every_record; mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren->phead->pvvalue; mlr_dsl_cst_statement_handler_t* phandler = NULL; MLR_INTERNAL_CODING_ERROR_UNLESS(pnode->pchildren->length == 2); mlr_dsl_ast_node_t* ptarget_node = pnode->pchildren->phead->pnext->pvvalue; pstate->ptarget_xevaluator = rxval_evaluator_alloc_from_ast( ptarget_node, pcst->pfmgr, type_inferencing, context_flags); if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) { phandler = handle_dump; pstate->stdfp = stdout; } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { phandler = handle_dump; pstate->stdfp = stderr; } else { pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, type_inferencing, context_flags); pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); pstate->pmulti_out = multi_out_alloc(); phandler = handle_dump_to_file; } return mlr_dsl_cst_statement_valloc( pnode, phandler, free_dump, pstate); } // ---------------------------------------------------------------- static void free_dump(mlr_dsl_cst_statement_t* pstatement, context_t* _) { dump_state_t* pstate = pstatement->pvstate; if (pstate->ptarget_xevaluator != NULL) { pstate->ptarget_xevaluator->pfree_func(pstate->ptarget_xevaluator); } if (pstate->poutput_filename_evaluator != NULL) { pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); } if (pstate->pmulti_out != NULL) { multi_out_close(pstate->pmulti_out); multi_out_free(pstate->pmulti_out); } free(pstate); } // ---------------------------------------------------------------- static void handle_dump( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { dump_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); if (boxed_xval.xval.is_terminal) { mlhmmv_print_terminal(&boxed_xval.xval.terminal_mlrval, pvars->json_quote_int_keys, pvars->json_quote_non_string_values, pstate->stdfp); fprintf(pstate->stdfp, "\n"); } else { mlhmmv_level_print_stacked(boxed_xval.xval.pnext_level, 0, FALSE, pvars->json_quote_int_keys, pvars->json_quote_non_string_values, "", pvars->pctx->auto_line_term, pstate->stdfp); } if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } // ---------------------------------------------------------------- static void handle_dump_to_file( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { dump_state_t* pstate = pstatement->pvstate; rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); char fn_free_flags; char* filename = mv_format_val(&filename_mv, &fn_free_flags); FILE* outfp = multi_out_get(pstate->pmulti_out, filename, pstate->file_output_mode); rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); if (boxed_xval.xval.is_terminal) { mlhmmv_print_terminal(&boxed_xval.xval.terminal_mlrval, pvars->json_quote_int_keys, pvars->json_quote_non_string_values, outfp); fprintf(outfp, "\n"); } else if (boxed_xval.xval.pnext_level != NULL) { mlhmmv_level_print_stacked(boxed_xval.xval.pnext_level, 0, FALSE, pvars->json_quote_int_keys, pvars->json_quote_non_string_values, "", pvars->pctx->auto_line_term, outfp); } if (pstate->flush_every_record) fflush(outfp); if (fn_free_flags) free(filename); mv_free(&filename_mv); if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } miller-5.6.2/c/dsl/mlr_dsl_cst_return_statements.c000066400000000000000000000047741354153536500223610ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ static void handle_return_void( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { pvars->return_state.returned = TRUE; } static void free_return_void(mlr_dsl_cst_statement_t* pstatement, context_t* _) { } mlr_dsl_cst_statement_t* alloc_return_void(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { return mlr_dsl_cst_statement_valloc( pnode, handle_return_void, free_return_void, NULL); } // ================================================================ typedef struct _return_value_state_t { rxval_evaluator_t* preturn_value_xevaluator; } return_value_state_t; // ---------------------------------------------------------------- static void return_value_func( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { return_value_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* pxev = pstate->preturn_value_xevaluator; boxed_xval_t retval = pxev->pprocess_func(pxev->pvstate, pvars); // Copy even if referenced since we are returning: otherwise the referent can be freed // by stack-frame exit before the caller can copy it. if (retval.is_ephemeral) { pvars->return_state.retval = retval; } else { pvars->return_state.retval = box_ephemeral_xval(mlhmmv_xvalue_copy(&retval.xval)); } pvars->return_state.returned = TRUE; } // ---------------------------------------------------------------- static void return_value_free(mlr_dsl_cst_statement_t* pstatement, context_t* _) { return_value_state_t* pstate = pstatement->pvstate; rxval_evaluator_t* pxev = pstate->preturn_value_xevaluator; pxev->pfree_func(pxev); free(pstate); } // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_return_value( mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pvvalue; return_value_state_t* pstate = mlr_malloc_or_die(sizeof(return_value_state_t)); pstate->preturn_value_xevaluator = rxval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, return_value_func, return_value_free, pstate); } miller-5.6.2/c/dsl/mlr_dsl_cst_scalar_assignment_statements.c000066400000000000000000000321301354153536500245220ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ typedef struct _srec_assignment_state_t { char* srec_lhs_field_name; rval_evaluator_t* prhs_evaluator; } srec_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_srec_assignment; static mlr_dsl_cst_statement_freer_t free_srec_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(srec_assignment_state_t)); pstate->prhs_evaluator = NULL; MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_FIELD_NAME); MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren != NULL); pstate->srec_lhs_field_name = plhs_node->text; pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, handle_srec_assignment, free_srec_assignment, pstate); } // ---------------------------------------------------------------- static void free_srec_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { srec_assignment_state_t* pstate = pstatement->pvstate; pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_srec_assignment( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { srec_assignment_state_t* pstate = pstatement->pvstate; char* srec_lhs_field_name = pstate->srec_lhs_field_name; rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; mv_t val = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); // Write typed mlrval output to the typed overlay rather than into the lrec (which holds only // string values). // // The rval_evaluator reads the overlay in preference to the lrec. E.g. if the input had // "x"=>"abc","y"=>"def" but the previous pass through this loop set "y"=>7.4 and "z"=>"ghi" then an // expression right-hand side referring to $y would get the floating-point value 7.4. So we don't need // to do lrec_put here, and moreover should not for two reasons: (1) there is a performance hit of doing // throwaway number-to-string formatting -- it's better to do it once at the end; (2) having the string // values doubly owned by the typed overlay and the lrec would result in double frees, or awkward // bookkeeping. However, the NR variable evaluator reads prec->field_count, so we need to put something // here. And putting something statically allocated minimizes copying/freeing. if (mv_is_present(&val)) { lhmsmv_put(pvars->ptyped_overlay, srec_lhs_field_name, &val, FREE_ENTRY_VALUE); lrec_put(pvars->pinrec, srec_lhs_field_name, "bug", NO_FREE); } else { mv_free(&val); } } // ================================================================ typedef struct _indirect_srec_assignment_state_t { rval_evaluator_t* plhs_evaluator; rval_evaluator_t* prhs_evaluator; } indirect_srec_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_indirect_srec_assignment; static mlr_dsl_cst_statement_freer_t free_indirect_srec_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_indirect_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { indirect_srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(indirect_srec_assignment_state_t)); pstate->prhs_evaluator = NULL; MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; pstate->plhs_evaluator = rval_evaluator_alloc_from_ast(plhs_node, pcst->pfmgr, type_inferencing, context_flags); pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, handle_indirect_srec_assignment, free_indirect_srec_assignment, pstate); } // ---------------------------------------------------------------- static void free_indirect_srec_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { indirect_srec_assignment_state_t* pstate = pstatement->pvstate; pstate->plhs_evaluator->pfree_func(pstate->plhs_evaluator); pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_indirect_srec_assignment( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { indirect_srec_assignment_state_t* pstate = pstatement->pvstate; rval_evaluator_t* plhs_evaluator = pstate->plhs_evaluator; rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; mv_t lval = plhs_evaluator->pprocess_func(plhs_evaluator->pvstate, pvars); if (mv_is_absent(&lval)) { return; } mv_t rval = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); char free_flags; char* srec_lhs_field_name = mv_format_val(&lval, &free_flags); // Write typed mlrval output to the typed overlay rather than into the lrec (which holds only // string values). // // The rval_evaluator reads the overlay in preference to the lrec. E.g. if the input had // "x"=>"abc","y"=>"def" but the previous pass through this loop set "y"=>7.4 and "z"=>"ghi" then an // expression right-hand side referring to $y would get the floating-point value 7.4. So we don't need // to do lrec_put here, and moreover should not for two reasons: (1) there is a performance hit of doing // throwaway number-to-string formatting -- it's better to do it once at the end; (2) having the string // values doubly owned by the typed overlay and the lrec would result in double frees, or awkward // bookkeeping. However, the NR variable evaluator reads prec->field_count, so we need to put something // here. And putting something statically allocated minimizes copying/freeing. if (mv_is_present(&rval)) { lhmsmv_put(pvars->ptyped_overlay, mlr_strdup_or_die(srec_lhs_field_name), &rval, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); lrec_put(pvars->pinrec, mlr_strdup_or_die(srec_lhs_field_name), "bug", FREE_ENTRY_KEY | FREE_ENTRY_KEY); } else { // xxx re-examine after push mv_free(&rval); } if (free_flags) { free(srec_lhs_field_name); } } // ================================================================ typedef struct _positional_srec_name_assignment_state_t { rval_evaluator_t* plhs_evaluator; rval_evaluator_t* prhs_evaluator; } positional_srec_name_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_positional_srec_name_assignment; static mlr_dsl_cst_statement_freer_t free_positional_srec_name_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_positional_srec_name_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { positional_srec_name_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(positional_srec_name_assignment_state_t)); pstate->prhs_evaluator = NULL; MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; pstate->plhs_evaluator = rval_evaluator_alloc_from_ast(plhs_node, pcst->pfmgr, type_inferencing, context_flags); pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, handle_positional_srec_name_assignment, free_positional_srec_name_assignment, pstate); } // ---------------------------------------------------------------- static void free_positional_srec_name_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { positional_srec_name_assignment_state_t* pstate = pstatement->pvstate; pstate->plhs_evaluator->pfree_func(pstate->plhs_evaluator); pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_positional_srec_name_assignment( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { positional_srec_name_assignment_state_t* pstate = pstatement->pvstate; rval_evaluator_t* plhs_evaluator = pstate->plhs_evaluator; rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; mv_t lval = plhs_evaluator->pprocess_func(plhs_evaluator->pvstate, pvars); mv_t rval = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); if (mv_is_absent(&lval)) { return; } if (!mv_is_int(&lval)) { char free_flags = NO_FREE; char* text = mv_maybe_alloc_format_val(&lval, &free_flags); fprintf(stderr, "%s: positional names must be integers; got \"%s\".\n", MLR_GLOBALS.bargv0, text); if (free_flags) free(text); exit(1); } if (mv_is_absent(&rval)) { return; } if (!mv_is_string(&rval)) { char free_flags = NO_FREE; char* text = mv_maybe_alloc_format_val(&rval, &free_flags); fprintf(stderr, "%s: new positional names must be strings; got [%s].\n", MLR_GLOBALS.bargv0, text); if (free_flags) free(text); exit(1); } int srec_lhs_field_position = lval.u.intv; // xxx elsewhere (lrec logic: prohibit empty-string name -- ? char* new_name = rval.u.strv; // Before: srec is 'a=1,b=2,c=3' // Assignment: '$[[3]] = "X"' // After: srec is 'a=1,b=2,X=3' if (mv_is_present(&rval)) { // xxx fix the lhmsmv_unset of old name on the same separate commit for fixing the unset bug char* old_name = lrec_get_key_by_position(pvars->pinrec, srec_lhs_field_position); if (old_name != NULL) { mv_t* poverlay = lhmsmv_get(pvars->ptyped_overlay, old_name); if (poverlay != NULL) { mv_t copy = mv_copy(poverlay); lhmsmv_put(pvars->ptyped_overlay, mlr_strdup_or_die(new_name), ©, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } lrec_rename_at_position(pvars->pinrec, srec_lhs_field_position, mlr_strdup_or_die(new_name), TRUE); mv_free(&rval); } } // ================================================================ typedef struct _env_assignment_state_t { rval_evaluator_t* plhs_evaluator; rval_evaluator_t* prhs_evaluator; } env_assignment_state_t; static mlr_dsl_cst_statement_handler_t handle_env_assignment; static mlr_dsl_cst_statement_freer_t free_env_assignment; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_env_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { env_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(env_assignment_state_t)); MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_ENV); MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren == NULL); MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren->length != 2); mlr_dsl_ast_node_t* pnamenode = plhs_node->pchildren->phead->pnext->pvvalue; pstate->plhs_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pcst->pfmgr, type_inferencing, context_flags); pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); return mlr_dsl_cst_statement_valloc( pnode, handle_env_assignment, free_env_assignment, pstate); } // ---------------------------------------------------------------- static void free_env_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { env_assignment_state_t* pstate = pstatement->pvstate; pstate->plhs_evaluator->pfree_func(pstate->plhs_evaluator); pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); free(pstate); } // ---------------------------------------------------------------- static void handle_env_assignment( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { env_assignment_state_t* pstate = pstatement->pvstate; rval_evaluator_t* plhs_evaluator = pstate->plhs_evaluator; rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; mv_t lval = plhs_evaluator->pprocess_func(plhs_evaluator->pvstate, pvars); mv_t rval = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); if (mv_is_present(&lval) && mv_is_present(&rval)) { mlr_arch_setenv( mlr_strdup_or_die(mv_alloc_format_val(&lval)), mlr_strdup_or_die(mv_alloc_format_val(&rval))); } mv_free(&lval); mv_free(&rval); } miller-5.6.2/c/dsl/mlr_dsl_cst_statements.c000066400000000000000000000561461354153536500207620ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ // The Lemon parser in parsing/mlr_dsl_parse.y builds up an abstract syntax tree // specifically for the CST builder here. // // For clearer visuals on what the ASTs look like: // * See parsing/mlr_dsl_parse.y // * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out // * Do "mlr -n put -v 'your expression goes here'" // ================================================================ // ================================================================ cst_statement_block_t* cst_statement_block_alloc(int subframe_var_count) { cst_statement_block_t* pblock = mlr_malloc_or_die(sizeof(cst_statement_block_t)); pblock->subframe_var_count = subframe_var_count; pblock->pstatements = sllv_alloc(); return pblock; } // ---------------------------------------------------------------- void cst_statement_block_free(cst_statement_block_t* pblock, context_t* pctx) { if (pblock == NULL) return; for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_free(pe->pvvalue, pctx); } sllv_free(pblock->pstatements); free(pblock); } // ================================================================ // ALLOCATORS // ================================================================ cst_top_level_statement_block_t* cst_top_level_statement_block_alloc(int max_var_depth, int subframe_var_count) { cst_top_level_statement_block_t* ptop_level_block = mlr_malloc_or_die(sizeof(cst_top_level_statement_block_t)); ptop_level_block->max_var_depth = max_var_depth; ptop_level_block->pframe = local_stack_frame_alloc(max_var_depth); ptop_level_block->pblock = cst_statement_block_alloc(subframe_var_count); return ptop_level_block; } // ---------------------------------------------------------------- void cst_top_level_statement_block_free(cst_top_level_statement_block_t* ptop_level_block, context_t* pctx) { if (ptop_level_block == NULL) return; local_stack_frame_free(ptop_level_block->pframe); cst_statement_block_free(ptop_level_block->pblock, pctx); free(ptop_level_block); } // ================================================================ // The parser accepts many things that are invalid, e.g. // * begin{end{}} -- begin/end not at top level // * begin{$x=1} -- references to stream records at begin/end // * break/continue outside of for/while/do-while // * $x=x -- boundvars outside of for-loop variable bindings // // All of the above are enforced here by the CST builder, which takes the parser's output AST as // input. This is done (a) to keep the parser from being overly complex, and (b) so we can get much // more informative error messages in C than in Lemon ('syntax error'). // // In this file we set up left-hand sides for assignments, as well as right-hand sides for emit and // unset. Most right-hand sides are set up in rval_expr_evaluators.c so the context_flags are // passed through to there as well. mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { switch(pnode->type) { case MD_AST_NODE_TYPE_FUNC_DEF: fprintf(stderr, "%s: func statements are only valid at top level.\n", MLR_GLOBALS.bargv0); exit(1); break; case MD_AST_NODE_TYPE_SUBR_DEF: fprintf(stderr, "%s: subr statements are only valid at top level.\n", MLR_GLOBALS.bargv0); exit(1); break; case MD_AST_NODE_TYPE_BEGIN: fprintf(stderr, "%s: begin statements are only valid at top level.\n", MLR_GLOBALS.bargv0); exit(1); break; case MD_AST_NODE_TYPE_END: fprintf(stderr, "%s: end statements are only valid at top level.\n", MLR_GLOBALS.bargv0); exit(1); break; case MD_AST_NODE_TYPE_RETURN_VALUE: if (!(context_flags & IN_FUNC_DEF)) { fprintf(stderr, "%s: return-value statements are only valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_return_value(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_RETURN_VOID: if (!(context_flags & IN_SUBR_DEF)) { fprintf(stderr, "%s: return-void statements are only valid within subr blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_return_void(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_SUBR_CALLSITE: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: subroutine calls are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_subr_callsite_statement(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: return alloc_conditional_block(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_IF_HEAD: return alloc_if_head(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_WHILE: return alloc_while(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_DO_WHILE: return alloc_do_while(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_SREC: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_for_srec(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_for_srec_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_OOSVAR: return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY: return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_LOCAL_MAP: return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY: return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_MAP_LITERAL: return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY: return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL: return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY: return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_TRIPLE_FOR: return alloc_triple_for(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); break; case MD_AST_NODE_TYPE_BREAK: if (!(context_flags & IN_BREAKABLE)) { fprintf(stderr, "%s: break statements are only valid within for, while, or do-while.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_break(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_CONTINUE: if (!(context_flags & IN_BREAKABLE)) { fprintf(stderr, "%s: break statements are only valid within for, while, or do-while.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_continue(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_ANY); case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_NUMERIC); break; case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_INT); break; case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_FLOAT); break; case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_BOOLEAN); break; case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_STRING); break; case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_MAP); break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return alloc_nonindexed_local_variable_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return alloc_indexed_local_variable_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_srec_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_indirect_srec_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_positional_srec_name_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return alloc_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: assignments from $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT: return alloc_full_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: assignments from $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_full_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_full_srec_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_ENV_ASSIGNMENT: return alloc_env_assignment(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_UNSET: return alloc_unset(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_TEE: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: tee statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_tee(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_EMITF: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: emitf statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_emitf(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_EMITP: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: emitp statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_emit(pcst, pnode, type_inferencing, context_flags, TRUE); break; case MD_AST_NODE_TYPE_EMIT: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: emit statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_emit(pcst, pnode, type_inferencing, context_flags, FALSE); break; case MD_AST_NODE_TYPE_EMITP_LASHED: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: emitp statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_emit_lashed(pcst, pnode, type_inferencing, context_flags, TRUE); break; case MD_AST_NODE_TYPE_EMIT_LASHED: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: emit statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_emit_lashed(pcst, pnode, type_inferencing, context_flags, FALSE); break; case MD_AST_NODE_TYPE_FILTER: if (context_flags & IN_FUNC_DEF) { fprintf(stderr, "%s: filter statements are not valid within func blocks.\n", MLR_GLOBALS.bargv0); exit(1); } if (context_flags & IN_MLR_FILTER) { fprintf(stderr, "%s filter: expressions must not also contain the \"filter\" keyword.\n", MLR_GLOBALS.bargv0); exit(1); } return alloc_filter(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_DUMP: return alloc_dump(pcst, pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_PRINT: return alloc_print(pcst, pnode, type_inferencing, context_flags, "\n"); break; case MD_AST_NODE_TYPE_PRINTN: return alloc_print(pcst, pnode, type_inferencing, context_flags, ""); break; default: return alloc_bare_boolean(pcst, pnode, type_inferencing, context_flags); break; } } // ---------------------------------------------------------------- // mlr put and mlr filter are almost entirely the same code. The key difference is that the final // statement for the latter must be a bare boolean expression. mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags) { switch(pnode->type) { case MD_AST_NODE_TYPE_FILTER: fprintf(stderr, "%s filter: expressions must not also contain the \"filter\" keyword.\n", MLR_GLOBALS.bargv0); exit(1); break; case MD_AST_NODE_TYPE_FUNC_DEF: case MD_AST_NODE_TYPE_SUBR_DEF: case MD_AST_NODE_TYPE_BEGIN: case MD_AST_NODE_TYPE_END: case MD_AST_NODE_TYPE_RETURN_VALUE: case MD_AST_NODE_TYPE_RETURN_VOID: case MD_AST_NODE_TYPE_SUBR_CALLSITE: case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: case MD_AST_NODE_TYPE_IF_HEAD: case MD_AST_NODE_TYPE_WHILE: case MD_AST_NODE_TYPE_DO_WHILE: case MD_AST_NODE_TYPE_FOR_SREC: case MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY: case MD_AST_NODE_TYPE_FOR_OOSVAR: case MD_AST_NODE_TYPE_TRIPLE_FOR: case MD_AST_NODE_TYPE_BREAK: case MD_AST_NODE_TYPE_CONTINUE: case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT: case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: case MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT: case MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: case MD_AST_NODE_TYPE_UNSET: case MD_AST_NODE_TYPE_TEE: case MD_AST_NODE_TYPE_EMITF: case MD_AST_NODE_TYPE_EMITP: case MD_AST_NODE_TYPE_EMIT: case MD_AST_NODE_TYPE_EMITP_LASHED: case MD_AST_NODE_TYPE_EMIT_LASHED: case MD_AST_NODE_TYPE_DUMP: case MD_AST_NODE_TYPE_PRINT: case MD_AST_NODE_TYPE_PRINTN: fprintf(stderr, "%s: filter expressions must end in a final boolean statement.\n", MLR_GLOBALS.bargv0); exit(1); break; default: return alloc_final_filter(pcst, pnode, negate_final_filter, type_inferencing, context_flags); break; } } // ---------------------------------------------------------------- // For used by constructors of subclasses of mlr_dsl_cst_statement_t. mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc( mlr_dsl_ast_node_t* past_node, mlr_dsl_cst_statement_handler_t* pstatement_handler, mlr_dsl_cst_statement_freer_t* pstatement_freer, void* pvstate) { mlr_dsl_cst_statement_t* pstatement = mlr_malloc_or_die(sizeof(mlr_dsl_cst_statement_t)); pstatement->past_node = past_node; pstatement->pstatement_handler = pstatement_handler; pstatement->pblock = NULL; pstatement->pblock_handler = NULL; pstatement->pstatement_freer = pstatement_freer; pstatement->pvstate = pvstate; return pstatement; } mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc_with_block( mlr_dsl_ast_node_t* past_node, mlr_dsl_cst_statement_handler_t* pstatement_handler, cst_statement_block_t* pblock, mlr_dsl_cst_block_handler_t* pblock_handler, mlr_dsl_cst_statement_freer_t* pstatement_freer, void* pvstate) { mlr_dsl_cst_statement_t* pstatement = mlr_malloc_or_die(sizeof(mlr_dsl_cst_statement_t)); pstatement->past_node = past_node; pstatement->pstatement_handler = pstatement_handler; pstatement->pblock = pblock; pstatement->pblock_handler = pblock_handler; pstatement->pstatement_freer = pstatement_freer; pstatement->pvstate = pvstate; return pstatement; } // ---------------------------------------------------------------- void mlr_dsl_cst_statement_free(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { if (pstatement->pstatement_freer != NULL) { pstatement->pstatement_freer(pstatement, pctx); } cst_statement_block_free(pstatement->pblock, pctx); free(pstatement); } // ================================================================ // Top-level entry point for statement-handling, e.g. from mapper_put. void mlr_dsl_cst_handle_top_level_statement_blocks( sllv_t* ptop_level_blocks, // block bodies for begins, main, ends variables_t* pvars, cst_outputs_t* pcst_outputs) { for (sllve_t* pe = ptop_level_blocks->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_handle_top_level_statement_block(pe->pvvalue, pvars, pcst_outputs); } } void mlr_dsl_cst_handle_top_level_statement_block( cst_top_level_statement_block_t* ptop_level_block, variables_t* pvars, cst_outputs_t* pcst_outputs) { local_stack_push(pvars->plocal_stack, local_stack_frame_enter(ptop_level_block->pframe)); local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, ptop_level_block->pblock->subframe_var_count); mlr_dsl_cst_handle_statement_block(ptop_level_block->pblock, pvars, pcst_outputs); local_stack_subframe_exit(pframe, ptop_level_block->pblock->subframe_var_count); local_stack_frame_exit(local_stack_pop(pvars->plocal_stack)); } // ================================================================ // HANDLERS // ================================================================ // This is for statement lists not recursively contained within a loop body -- including the // main/begin/end statements. Since there is no containing loop body, there is no need to check // for break or continue flags after each statement. void mlr_dsl_cst_handle_statement_block( cst_statement_block_t* pblock, variables_t* pvars, cst_outputs_t* pcst_outputs) { if (pvars->trace_execution) { for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; fprintf(stdout, "TRACE "); mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. if (pvars->return_state.returned) { break; } } } else { for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. if (pvars->return_state.returned) { break; } } } } // This is for statement lists recursively contained within a loop body. // It checks for break or continue flags after each statement. void mlr_dsl_cst_handle_statement_block_with_break_continue( cst_statement_block_t* pblock, variables_t* pvars, cst_outputs_t* pcst_outputs) { if (pvars->trace_execution) { for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; fprintf(stdout, "TRACE "); mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) != 0) { break; } // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. if (pvars->return_state.returned) { break; } } } else { for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) != 0) { break; } // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. if (pvars->return_state.returned) { break; } } } } // Triple-for start/continuation/update statement lists void mlr_dsl_cst_handle_statement_list( sllv_t* pstatements, variables_t* pvars, cst_outputs_t* pcst_outputs) { if (pvars->trace_execution) { for (sllve_t* pe = pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; fprintf(stdout, "TRACE "); mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); } } else { for (sllve_t* pe = pstatements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); } } } miller-5.6.2/c/dsl/mlr_dsl_cst_triple_for_statements.c000066400000000000000000000150741354153536500232020ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mlr_dsl_cst.h" #include "context_flags.h" static mlr_dsl_cst_statement_handler_t handle_triple_for; static mlr_dsl_cst_statement_freer_t free_triple_for; typedef struct _triple_for_state_t { sllv_t* ptriple_for_start_statements; sllv_t* ptriple_for_pre_continuation_statements; rval_evaluator_t* ptriple_for_continuation_evaluator; sllv_t* ptriple_for_update_statements; } triple_for_state_t; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_triple_for(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { mlr_dsl_ast_node_t* pstart_statements_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pcontinuation_statements_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pupdate_statements_node = pnode->pchildren->phead->pnext->pnext->pvvalue; mlr_dsl_ast_node_t* pbody_statements_node = pnode->pchildren->phead->pnext->pnext->pnext->pvvalue; triple_for_state_t* pstate = mlr_malloc_or_die(sizeof(triple_for_state_t)); pstate->ptriple_for_start_statements = sllv_alloc(); for (sllve_t* pe = pstart_statements_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pstate->ptriple_for_start_statements, mlr_dsl_cst_alloc_statement( pcst, pbody_ast_node, type_inferencing, context_flags & ~IN_BREAKABLE)); } // Continuation statements are split into the final boolean, and the statements before (if any). pstate->ptriple_for_pre_continuation_statements = sllv_alloc(); // Empty continuation for triple-for is an implicit TRUE. if (pcontinuation_statements_node->pchildren->length == 0) { pstate->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_boolean(TRUE); } else { for ( sllve_t* pe = pcontinuation_statements_node->pchildren->phead; pe != NULL && pe->pnext != NULL; pe = pe->pnext ) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pstate->ptriple_for_pre_continuation_statements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags & ~IN_BREAKABLE)); } mlr_dsl_ast_node_t* pfinal_continuation_statement_node = pcontinuation_statements_node->pchildren->ptail->pvvalue; if (mlr_dsl_ast_node_cannot_be_bare_boolean(pfinal_continuation_statement_node)) { fprintf(stderr, "%s: the final triple-for continutation statement must be a bare boolean.\n", MLR_GLOBALS.bargv0); exit(1); } pstate->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_ast( pfinal_continuation_statement_node, pcst->pfmgr, type_inferencing, (context_flags & ~IN_BREAKABLE) | IN_TRIPLE_FOR_CONTINUE); } pstate->ptriple_for_update_statements = sllv_alloc(); for (sllve_t* pe = pupdate_statements_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pstate->ptriple_for_update_statements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags & ~IN_BREAKABLE)); } MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); for (sllve_t* pe = pbody_statements_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags)); } return mlr_dsl_cst_statement_valloc_with_block( pnode, handle_triple_for, pblock, mlr_dsl_cst_handle_statement_block_with_break_continue, free_triple_for, pstate); } static void free_triple_for(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { triple_for_state_t* pstate = pstatement->pvstate; if (pstate->ptriple_for_start_statements != NULL) { for (sllve_t* pe = pstate->ptriple_for_start_statements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* ps = pe->pvvalue; mlr_dsl_cst_statement_free(ps, pctx); } sllv_free(pstate->ptriple_for_start_statements); } if (pstate->ptriple_for_pre_continuation_statements != NULL) { for (sllve_t* pe = pstate->ptriple_for_pre_continuation_statements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* ps = pe->pvvalue; mlr_dsl_cst_statement_free(ps, pctx); } sllv_free(pstate->ptriple_for_pre_continuation_statements); } if (pstate->ptriple_for_continuation_evaluator != NULL) { pstate->ptriple_for_continuation_evaluator->pfree_func(pstate->ptriple_for_continuation_evaluator); } if (pstate->ptriple_for_update_statements != NULL) { for (sllve_t* pe = pstate->ptriple_for_update_statements->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_cst_statement_t* ps = pe->pvvalue; mlr_dsl_cst_statement_free(ps, pctx); } sllv_free(pstate->ptriple_for_update_statements); } free(pstate); } // ---------------------------------------------------------------- static void handle_triple_for( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); loop_stack_push(pvars->ploop_stack); triple_for_state_t* pstate = pstatement->pvstate; // Start statements mlr_dsl_cst_handle_statement_list(pstate->ptriple_for_start_statements, pvars, pcst_outputs); while (TRUE) { // Continuation statements: // * all but the last one are simply executed ... mlr_dsl_cst_handle_statement_list(pstate->ptriple_for_pre_continuation_statements, pvars, pcst_outputs); // * ... and the last one is used to determine continuation: rval_evaluator_t* pev = pstate->ptriple_for_continuation_evaluator; mv_t val = pev->pprocess_func(pev->pvstate, pvars); if (mv_is_non_null(&val)) mv_set_boolean_strict(&val); if (!val.u.boolv) break; // Body statements mlr_dsl_cst_handle_statement_block_with_break_continue(pstatement->pblock, pvars, pcst_outputs); if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); break; } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); } // Update statements mlr_dsl_cst_handle_statement_list(pstate->ptriple_for_update_statements, pvars, pcst_outputs); } loop_stack_pop(pvars->ploop_stack); local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); } miller-5.6.2/c/dsl/mlr_dsl_cst_unset_statements.c000066400000000000000000000266211354153536500221730ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "keylist_evaluators.h" #include "mlr_dsl_cst.h" #include "context_flags.h" // ================================================================ // Most statements have one item, except emit and unset. struct _unset_item_t; typedef void unset_item_handler_t( struct _unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); typedef struct _unset_item_t { unset_item_handler_t* punset_item_handler; int local_variable_frame_relative_index; char* srec_field_name; sllv_t* pkeylist_evaluators; rval_evaluator_t* psrec_field_name_evaluator; } unset_item_t; static unset_item_t* alloc_blank_unset_item(); static void free_unset_item(unset_item_t* punset_item); static void handle_unset_nonindexed_local_variable( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_unset_indexed_local_variable( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_unset_oosvar( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_unset_full_srec( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_unset_srec_field_name( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_unset_indirect_srec_field_name( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); static void handle_unset_positional_srec_field_name( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs); // ================================================================ typedef struct _unset_state_t { sllv_t* punset_items; } unset_state_t; static mlr_dsl_cst_statement_handler_t handle_unset; static mlr_dsl_cst_statement_freer_t free_unset; static mlr_dsl_cst_statement_handler_t handle_unset; static mlr_dsl_cst_statement_handler_t handle_unset_all; // ---------------------------------------------------------------- mlr_dsl_cst_statement_t* alloc_unset(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, int type_inferencing, int context_flags) { unset_state_t* pstate = mlr_malloc_or_die(sizeof(unset_state_t)); pstate->punset_items = sllv_alloc(); mlr_dsl_cst_statement_handler_t* pstatement_handler = handle_unset; for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; if (pchild->type == MD_AST_NODE_TYPE_ALL || pchild->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { // The grammar allows only 'unset all', not 'unset @x, all, $y'. // So if 'all' appears at all, it's the only name. Likewise with '@*'. pstatement_handler = handle_unset_all; } else if (pchild->type == MD_AST_NODE_TYPE_FULL_SREC) { if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: unset of $-variables is not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_full_srec; sllv_append(pstate->punset_items, punset_item); } else if (pchild->type == MD_AST_NODE_TYPE_FIELD_NAME) { if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: unset of $-variables is not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_srec_field_name; punset_item->srec_field_name = pchild->text; sllv_append(pstate->punset_items, punset_item); } else if (pchild->type == MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME) { if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: unset of $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_indirect_srec_field_name; punset_item->psrec_field_name_evaluator = rval_evaluator_alloc_from_ast( pchild->pchildren->phead->pvvalue, pcst->pfmgr, type_inferencing, context_flags); sllv_append(pstate->punset_items, punset_item); } else if (pchild->type == MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME) { if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: unset of $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_positional_srec_field_name; punset_item->psrec_field_name_evaluator = rval_evaluator_alloc_from_ast( pchild->pchildren->phead->pvvalue, pcst->pfmgr, type_inferencing, context_flags); sllv_append(pstate->punset_items, punset_item); } else if (pchild->type == MD_AST_NODE_TYPE_OOSVAR_KEYLIST) { unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_oosvar; punset_item->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( pchild, pcst->pfmgr, type_inferencing, context_flags); sllv_append(pstate->punset_items, punset_item); } else if (pchild->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { MLR_INTERNAL_CODING_ERROR_IF(pchild->vardef_frame_relative_index == MD_UNUSED_INDEX); unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_nonindexed_local_variable; punset_item->local_variable_frame_relative_index = pchild->vardef_frame_relative_index; sllv_append(pstate->punset_items, punset_item); } else if (pchild->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { MLR_INTERNAL_CODING_ERROR_IF(pchild->vardef_frame_relative_index == MD_UNUSED_INDEX); unset_item_t* punset_item = alloc_blank_unset_item(); punset_item->punset_item_handler = handle_unset_indexed_local_variable; punset_item->local_variable_frame_relative_index = pchild->vardef_frame_relative_index; punset_item->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( pchild, pcst->pfmgr, type_inferencing, context_flags); sllv_append(pstate->punset_items, punset_item); } else { MLR_INTERNAL_CODING_ERROR(); } } return mlr_dsl_cst_statement_valloc( pnode, pstatement_handler, free_unset, pstate); } // ---------------------------------------------------------------- static void free_unset(mlr_dsl_cst_statement_t* pstatement, context_t* _) { unset_state_t* pstate = pstatement->pvstate; for (sllve_t* pe = pstate->punset_items->phead; pe != NULL; pe = pe->pnext) { free_unset_item(pe->pvvalue); } sllv_free(pstate->punset_items); free(pstate); } // ---------------------------------------------------------------- static void handle_unset( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { unset_state_t* pstate = pstatement->pvstate; for (sllve_t* pf = pstate->punset_items->phead; pf != NULL; pf = pf->pnext) { unset_item_t* punset_item = pf->pvvalue; punset_item->punset_item_handler(punset_item, pvars, pcst_outputs); } } static void handle_unset_all( mlr_dsl_cst_statement_t* pstatement, variables_t* pvars, cst_outputs_t* pcst_outputs) { sllmv_t* pempty = sllmv_alloc(); mlhmmv_root_remove(pvars->poosvars, pempty); sllmv_free(pempty); } // ---------------------------------------------------------------- static unset_item_t* alloc_blank_unset_item() { unset_item_t* punset_item = mlr_malloc_or_die(sizeof(unset_item_t)); punset_item->punset_item_handler = NULL; punset_item->local_variable_frame_relative_index = MD_UNUSED_INDEX; punset_item->srec_field_name = NULL; punset_item->pkeylist_evaluators = NULL; punset_item->psrec_field_name_evaluator = NULL; return punset_item; } static void free_unset_item(unset_item_t* punset_item) { if (punset_item->pkeylist_evaluators != NULL) { for (sllve_t* pe = punset_item->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* phandler = pe->pvvalue; phandler->pfree_func(phandler); } sllv_free(punset_item->pkeylist_evaluators); } if (punset_item->psrec_field_name_evaluator != NULL) { punset_item->psrec_field_name_evaluator->pfree_func(punset_item->psrec_field_name_evaluator); } free(punset_item); } static void handle_unset_nonindexed_local_variable( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_frame_assign_terminal_nonindexed(pframe, punset_item->local_variable_frame_relative_index, mv_absent()); } // As with oosvars, unset removes the key. E.g. if 'v = { 1:2, 3:4 }' then // 'unset v[1]' results in 'v = { 3:4 }'. static void handle_unset_indexed_local_variable( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { int all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(punset_item->pkeylist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); // 'unset nonesuch[someindex]' requires the existence check first: else we'd be poking data // into the absent-value stack-frame-index-0 slot. mlhmmv_xvalue_t* pxval = local_stack_frame_ref_extended_from_indexed(pframe, punset_item->local_variable_frame_relative_index, NULL); if (pxval != NULL) { mlhmmv_level_remove(pxval->pnext_level, pmvkeys->phead); } } sllmv_free(pmvkeys); } static void handle_unset_oosvar( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { int all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(punset_item->pkeylist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) mlhmmv_root_remove(pvars->poosvars, pmvkeys); sllmv_free(pmvkeys); } static void handle_unset_full_srec( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { lrec_clear(pvars->pinrec); } static void handle_unset_srec_field_name( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { lrec_remove(pvars->pinrec, punset_item->srec_field_name); } static void handle_unset_indirect_srec_field_name( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { rval_evaluator_t* pevaluator = punset_item->psrec_field_name_evaluator; mv_t nameval = pevaluator->pprocess_func(pevaluator->pvstate, pvars); char free_flags = NO_FREE; char* field_name = mv_maybe_alloc_format_val(&nameval, &free_flags); lrec_remove(pvars->pinrec, field_name); if (free_flags & FREE_ENTRY_VALUE) free(field_name); mv_free(&nameval); } static void handle_unset_positional_srec_field_name( unset_item_t* punset_item, variables_t* pvars, cst_outputs_t* pcst_outputs) { rval_evaluator_t* pevaluator = punset_item->psrec_field_name_evaluator; mv_t nameval = pevaluator->pprocess_func(pevaluator->pvstate, pvars); if (!mv_is_int(&nameval)) { char free_flags = NO_FREE; char* text = mv_maybe_alloc_format_val(&nameval, &free_flags); fprintf(stderr, "%s: positional names must be integers; got \"%s\".\n", MLR_GLOBALS.bargv0, text); if (free_flags) free(text); exit(1); } // xxx typed overlay too!! int field_position = nameval.u.intv; lrec_remove_by_position(pvars->pinrec, field_position); mv_free(&nameval); } miller-5.6.2/c/dsl/mlr_dsl_stack_allocate.c000066400000000000000000001213711354153536500206640ustar00rootroot00000000000000#include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/free_flags.h" #include "containers/lhmsi.h" #include "dsl/mlr_dsl_blocked_ast.h" #include "dsl/context_flags.h" // ================================================================ // This is a two-pass stack allocator for the Miller DSL. // // ---------------------------------------------------------------- // CONTEXT: // // In the initial Miller implementation of local variables (e.g. for-loop // indices or frame-local variables), I used a hashmap from string name to // mlrval at each level. This was very easy to code and it worked, but it had // the property that every local-variable read or write involved a hashmap // lookup to locate each local variable on the stack. For compute-intensive // work this resulted in 80% or more of the compute time being used for the // hashmap accesses. It doesn't make sense to always be asking "where is // variable 'a'"? at runtime (maybe ten million times doing hash-map lookups) // since this can be figured out ahead of time. // // The Miller DSL allows for recursive functions and subroutines, but within // those, stack layout is knowable at parse time. // // ---------------------------------------------------------------- // TERMINOLOGY // // * A top-level statement block starts with 'begin', 'end', 'func', 'subr', // or is the remaining collection of statements outside of any of those which // is called the 'main' statement block. // // * A stack frame is all the locals for a top-level statement block including // anything local to a scoped block within the top-level block. For example, // locals may be defined within if/while/do-while blocks. Also, variables can // be local to a triple-for, e.g. 'for (var i = 0; i < 10; i += 1) { ... }'. // As well, locals are bound to variables in for-loops over stream records // or out-of-stream variables: 'for (k, v in $*) { ... }' or // 'for ((k1, k2), v in @*) { ... }'. Lastly, function arguments are local // to the function/subroutine definition site. // // * A subframe is the locals defined within any of the above: locals // defined within an if/while/for/etc. block. Or, the locals defined // in the top-level block have their own subframe. // // ---------------------------------------------------------------- // CONVENTION: Local variables are bound to indices within the stack frame, but, // local variable may be read before they are defined. Slot 0 of each frame is // an absent-null which is reserved for this purpose. // // ---------------------------------------------------------------- // EXAMPLE: // // # ---- FUNC TOP-LEVEL SUBFRAME 0: defcount 7 {absent-RHS,a,b,c,i,j,y} // # Absent-null-RHS is at slot 0 of top level. // func f(a, b, c) { # Args define locals 1,2,3 at current level. // var i = 24; # Explicitly define local 4 at current level. // j = 25; # Implicitly define local 5 at current level. // # // # ---- IF-STATEMENT SUBFRAME 1: defcount 1 {k} // if (a == 26) { # Read of local 1, found at top level (subframe 0). // var k = 27; # Explicitly define local 0 at this level. // j = 28; # LHS is local 5, found at top level. // # // # Note that the 'if' and the 'else' are both at subframe // # depth 1, while each defines a different number of locals. // # For this function the max variable depth is 9: // # 7 at top level plus 1 = 8 if the if is taken, // # 7 at top level plus 2 = 9 if the else is taken, // # // } else { # ---- ELSE-STATEMENT SUBFRAME 1: defcount 2 {n, u} // n = b; # Implicitly define local 0 at this level. // var u = 4; # Implicitly define local 1 at this level. // } # // # // y = 7; # LHS is local 6 at current level. // i = z; # LHS is local 4 at current level; // # RHS is unresolved -> slot 0 at current level. // } # // // Notes: // // * Pass 1 computes frame-relative indices and subframe-level counts, // as in the example, for each local variable. // // * Pass 2 computes absolute indices for each local variable. These // aren't computable in pass 1 due to the example 'y = 7' assignment // above: the number of local variables in an upper level can change // after the invocation of a child level, so the total frame size is not // known until all AST nodes in the top-level block have been visited. // // * Pass 2 also computes the max depth, counting number of variables, so // that for each top-level block we can allocate an array of mlrvals which // will be reused on every invocation. (For recursive function calls an entire // frame be dynamically allocated.) // // * Slot 0 of the top level is reserved for an absent-null for unresolved // names on reads. // // * The tree-traversal order is done correctly so that if a variable is read // before it is defined, then read again after it is defined, then the first // read gets absent-null and the second gets the defined value. // ================================================================ // ================================================================ // Pass-1 stack-frame container: simply a hashmap from name to position on the // frame relative to the curly-braced statement block (top-level, for-loop, // if-statement, else-statement, etc.). typedef struct _stkalc_subframe_t { int var_count; lhmsi_t* pnames_to_indices; } stkalc_subframe_t; // ---------------------------------------------------------------- // Pass-1 stack-frame methods static stkalc_subframe_t* stkalc_subframe_alloc(); static void stkalc_subframe_free(stkalc_subframe_t* pframe); static int stkalc_subframe_test_and_get(stkalc_subframe_t* pframe, char* name, int* pvalue); static int stkalc_subframe_get(stkalc_subframe_t* pframe, char* name); static int stkalc_subframe_add(stkalc_subframe_t* pframe, char* name); // ================================================================ // Pass-1 frame-group container: a linked list with current frame at the head // and top-level frame at the tail. Within a given top-level block there is a // tree of curly-braced statement blocks, e.g. a function-definition might have // an if-statement, else-if, else-if, else, each with its own frame. But during // pass 1 we only maintain a list from the current frame being analyzed up to // its parents; sibling branches are not simultaneously stored in this data // structure. typedef struct _stkalc_subframe_group_t { sllv_t* plist; } stkalc_subframe_group_t; // ---------------------------------------------------------------- // Pass-1 stack-frame-group methods static stkalc_subframe_group_t* stkalc_subframe_group_alloc(stkalc_subframe_t* pframe, int trace); static void stkalc_subframe_group_free(stkalc_subframe_group_t* pframe_group); static void stkalc_subframe_group_push(stkalc_subframe_group_t* pframe_group, stkalc_subframe_t* pframe); static stkalc_subframe_t* stkalc_subframe_group_pop(stkalc_subframe_group_t* pframe_group); // Pass-1 stack-frame-group node-mutator methods: given an AST node containing a // local-variable usage they assign a subframe-relative index and a subframe-depth // counter (how many frames deep into the top-level statement block the node // is). static void stkalc_subframe_group_mutate_node_for_define(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, char* desc, int trace); static void stkalc_subframe_group_mutate_node_for_write(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, char* desc, int trace); static void stkalc_subframe_group_mutate_node_for_read(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, char* desc, int trace); // ================================================================ // Pass-1 helper methods for the main entry point to this file. static void pass_1_for_func_subr_block(mlr_dsl_ast_node_t* pnode, int trace); static void pass_1_for_begin_end_block(mlr_dsl_ast_node_t* pnode, int trace); static void pass_1_for_main_block(mlr_dsl_ast_node_t* pnode, int trace); static void pass_1_for_statement_block(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_statement_list(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_local_definition(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_local_assignment(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_local_read(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_srec_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_srec_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_map_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_map_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_triple_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); static void pass_1_for_non_terminal_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace); // Pass-2 helper methods for the main entry point to this file. static void pass_2_for_top_level_block(mlr_dsl_ast_node_t* pnode, int trace); static void pass_2_for_node(mlr_dsl_ast_node_t* pnode, int subframe_depth, int var_count_below_subframe, int var_count_at_subframe, int* pmax_var_depth, int* subframe_var_count_belows, int max_subframe_depth, int trace); // ================================================================ // Utility methods static void leader_print(int depth); // ================================================================ // Main entry point for the bind-stack allocator void blocked_ast_allocate_locals(blocked_ast_t* paast, int trace) { // Pass 1 for (sllve_t* pe = paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) { pass_1_for_func_subr_block(pe->pvvalue, trace); } for (sllve_t* pe = paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) { pass_1_for_func_subr_block(pe->pvvalue, trace); } for (sllve_t* pe = paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { pass_1_for_begin_end_block(pe->pvvalue, trace); } { pass_1_for_main_block(paast->pmain_block, trace); } for (sllve_t* pe = paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) { pass_1_for_begin_end_block(pe->pvvalue, trace); } // Pass 2 for (sllve_t* pe = paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) { pass_2_for_top_level_block(pe->pvvalue, trace); } for (sllve_t* pe = paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) { pass_2_for_top_level_block(pe->pvvalue, trace); } for (sllve_t* pe = paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { pass_2_for_top_level_block(pe->pvvalue, trace); } { pass_2_for_top_level_block(paast->pmain_block, trace); } for (sllve_t* pe = paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) { pass_2_for_top_level_block(pe->pvvalue, trace); } } // ---------------------------------------------------------------- static void pass_1_for_func_subr_block(mlr_dsl_ast_node_t* pnode, int trace) { if (trace) { printf("\n"); printf("ALLOCATING RELATIVE (PASS-1) LOCALS FOR DEFINITION BLOCK [%s]\n", pnode->text); } MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_SUBR_DEF && pnode->type != MD_AST_NODE_TYPE_FUNC_DEF); stkalc_subframe_t* pframe = stkalc_subframe_alloc(); stkalc_subframe_group_t* pframe_group = stkalc_subframe_group_alloc(pframe, trace); int max_subframe_depth = 1; mlr_dsl_ast_node_t* pdef_name_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* plist_node = pnode->pchildren->phead->pnext->pvvalue; for (sllve_t* pe = pdef_name_node->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; stkalc_subframe_group_mutate_node_for_define(pframe_group, pparameter_node, "PARAMETER", trace); } pass_1_for_statement_block(plist_node, pframe_group, &max_subframe_depth, trace); pnode->subframe_var_count = pframe->var_count; pnode->max_subframe_depth = max_subframe_depth; if (trace) { printf("BLOCK %s subframe_var_count=%d max_subframe_depth=%d\n", pnode->text, pnode->subframe_var_count, pnode->max_subframe_depth); } stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); stkalc_subframe_group_free(pframe_group); } // ---------------------------------------------------------------- static void pass_1_for_begin_end_block(mlr_dsl_ast_node_t* pnode, int trace) { if (trace) { printf("\n"); printf("ALLOCATING RELATIVE (PASS-1) LOCALS FOR %s BLOCK\n", pnode->text); } MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_BEGIN && pnode->type != MD_AST_NODE_TYPE_END); stkalc_subframe_t* pframe = stkalc_subframe_alloc(); stkalc_subframe_group_t* pframe_group = stkalc_subframe_group_alloc(pframe, trace); int max_subframe_depth = 1; pass_1_for_statement_block(pnode->pchildren->phead->pvvalue, pframe_group, &max_subframe_depth, trace); pnode->subframe_var_count = pframe->var_count; pnode->max_subframe_depth = max_subframe_depth; if (trace) { printf("BLOCK %s subframe_var_count=%d max_subframe_depth=%d\n", pnode->text, pnode->subframe_var_count, pnode->max_subframe_depth); } stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); stkalc_subframe_group_free(pframe_group); } // ---------------------------------------------------------------- static void pass_1_for_main_block(mlr_dsl_ast_node_t* pnode, int trace) { if (trace) { printf("\n"); printf("ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK\n"); } MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK); stkalc_subframe_t* pframe = stkalc_subframe_alloc(); stkalc_subframe_group_t* pframe_group = stkalc_subframe_group_alloc(pframe, trace); int max_subframe_depth = 1; pass_1_for_statement_block(pnode, pframe_group, &max_subframe_depth, trace); pnode->subframe_var_count = pframe->var_count; pnode->max_subframe_depth = max_subframe_depth; if (trace) { printf("BLOCK %s subframe_var_count=%d max_subframe_depth=%d\n", pnode->text, pnode->subframe_var_count, pnode->max_subframe_depth); } stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); stkalc_subframe_group_free(pframe_group); } // ---------------------------------------------------------------- // Curly-braced bodies of if/while/for/etc. static void pass_1_for_statement_block(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK); for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } // Non-curly-braced triple-for starts/continuations/updates statement lists. static void pass_1_for_statement_list(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_STATEMENT_LIST); for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } // ---------------------------------------------------------------- static void pass_1_for_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { if (pnode->type == MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION) { // LHS pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT) { // LHS pass_1_for_local_assignment(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT) { // LHS pass_1_for_local_assignment(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { // RHS pass_1_for_local_read(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { // RHS pass_1_for_local_read(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_SREC) { pass_1_for_srec_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY) { pass_1_for_srec_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY) { pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_OOSVAR) { pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY) { pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP) { pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY) { pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_MAP_LITERAL) { pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY) { pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_FUNC_RETVAL) { pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY) { pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP) { pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->type == MD_AST_NODE_TYPE_TRIPLE_FOR) { pass_1_for_triple_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); } else if (pnode->pchildren != NULL) { pass_1_for_non_terminal_node(pnode, pframe_group, pmax_subframe_depth, trace); } } // ---------------------------------------------------------------- static void pass_1_for_local_definition(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { mlr_dsl_ast_node_t* pnamenode = pnode->pchildren->phead->pvvalue; // RHS must exist for non-map types ('int x = 3', not 'int x') but must not for map types // ('map x', not 'map x = {}'). if (pnode->pchildren->phead->pnext) { mlr_dsl_ast_node_t* pvaluenode = pnode->pchildren->phead->pnext->pvvalue; pass_1_for_node(pvaluenode, pframe_group, pmax_subframe_depth, trace); } // Do the LHS after the RHS, in case 'var nonesuch = nonesuch' stkalc_subframe_group_mutate_node_for_define(pframe_group, pnamenode, "DEFINE", trace); } // ---------------------------------------------------------------- static void pass_1_for_local_assignment(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { mlr_dsl_ast_node_t* pnamenode = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pvaluenode = pnode->pchildren->phead->pnext->pvvalue; pass_1_for_node(pvaluenode, pframe_group, pmax_subframe_depth, trace); // Do the LHS after the RHS, in case 'var nonesuch = nonesuch' stkalc_subframe_group_mutate_node_for_write(pframe_group, pnamenode, "WRITE", trace); if (pnamenode->pchildren != NULL) { // E.g. a[i][j]: variable is being written to; i and j are being read from. for (sllve_t* pe = pnamenode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } } // ---------------------------------------------------------------- static void pass_1_for_local_read(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { stkalc_subframe_group_mutate_node_for_read(pframe_group, pnode, "READ", trace); if (pnode->pchildren != NULL) { // E.g. a[i][j]: variable is being written to; i and j are being read from. for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } } // ---------------------------------------------------------------- // for (k,v in $*) { ... }: the k and v are scoped to the curly-brace block. static void pass_1_for_srec_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { if (trace) { leader_print(pframe_group->plist->length); printf("PUSH SUBFRAME %s\n", pnode->text); } stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); stkalc_subframe_group_push(pframe_group, pnext_subframe); if (*pmax_subframe_depth < pframe_group->plist->length) *pmax_subframe_depth = pframe_group->plist->length; mlr_dsl_ast_node_t* pvarsnode = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pknode = pvarsnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pvnode = pvarsnode->pchildren->phead->pnext->pvvalue; stkalc_subframe_group_mutate_node_for_define(pframe_group, pknode, "FOR-BIND", trace); stkalc_subframe_group_mutate_node_for_define(pframe_group, pvnode, "FOR-BIND", trace); pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); pnode->subframe_var_count = pnext_subframe->var_count; stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); if (trace) { leader_print(pframe_group->plist->length); printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); } } // ---------------------------------------------------------------- // for (k in $*) { ... }: k is scoped to the curly-brace block. static void pass_1_for_srec_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { if (trace) { leader_print(pframe_group->plist->length); printf("PUSH SUBFRAME %s\n", pnode->text); } stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); stkalc_subframe_group_push(pframe_group, pnext_subframe); if (*pmax_subframe_depth < pframe_group->plist->length) *pmax_subframe_depth = pframe_group->plist->length; mlr_dsl_ast_node_t* pvarsnode = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pknode = pvarsnode->pchildren->phead->pvvalue; stkalc_subframe_group_mutate_node_for_define(pframe_group, pknode, "FOR-BIND", trace); pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); pnode->subframe_var_count = pnext_subframe->var_count; stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); if (trace) { leader_print(pframe_group->plist->length); printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); } } // ---------------------------------------------------------------- static void pass_1_for_map_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { mlr_dsl_ast_node_t* pkeynode = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pkeylistnode = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pnext->pvvalue; // The keylistnode is outside the block binding. In particular if there // are any localvar reads in there, they shouldn't read from forloop // boundvars. // // Example: 'for(a in @b[c][d]) { var e = a}': the c and d // should be obtained from the enclosing scope. if (pkeylistnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { // For-local-map: e.g. 'for(a in b[c][d])'. pass_1_for_node(pkeylistnode, pframe_group, pmax_subframe_depth, trace); } if (pkeylistnode->pchildren != NULL) { for (sllve_t* pe = pkeylistnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } if (trace) { leader_print(pframe_group->plist->length); printf("PUSH SUBFRAME %s\n", pnode->text); } stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); stkalc_subframe_group_push(pframe_group, pnext_subframe); if (*pmax_subframe_depth < pframe_group->plist->length) *pmax_subframe_depth = pframe_group->plist->length; stkalc_subframe_group_mutate_node_for_define(pframe_group, pkeynode, "FOR-BIND", trace); pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); pnode->subframe_var_count = pnext_subframe->var_count; stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); if (trace) { leader_print(pframe_group->plist->length); printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); } } // ---------------------------------------------------------------- static void pass_1_for_map_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { mlr_dsl_ast_node_t* pvarsnode = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pkeylistnode = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pnext->pvvalue; mlr_dsl_ast_node_t* pkeysnode = pvarsnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pvalnode = pvarsnode->pchildren->phead->pnext->pvvalue; // The keylistnode is outside the block binding. In particular if there // are any localvar reads in there, they shouldn't read from forloop // boundvars. // // Example: 'for(k, v in @a[b][c]) { var d = k; var e = v }': the b and c // should be obtained from the enclosing scope. if (pkeylistnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { // For-local-map: e.g. 'for(a,b in c[d][e])'. pass_1_for_node(pkeylistnode, pframe_group, pmax_subframe_depth, trace); } if (pkeylistnode->pchildren == NULL) { pass_1_for_node(pkeylistnode, pframe_group, pmax_subframe_depth, trace); } else { for (sllve_t* pe = pkeylistnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } if (trace) { leader_print(pframe_group->plist->length); printf("PUSH SUBFRAME %s\n", pnode->text); } stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); stkalc_subframe_group_push(pframe_group, pnext_subframe); if (*pmax_subframe_depth < pframe_group->plist->length) *pmax_subframe_depth = pframe_group->plist->length; for (sllve_t* pe = pkeysnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; stkalc_subframe_group_mutate_node_for_define(pframe_group, pkeynode, "FOR-BIND", trace); } stkalc_subframe_group_mutate_node_for_define(pframe_group, pvalnode, "FOR-BIND", trace); pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); pnode->subframe_var_count = pnext_subframe->var_count; stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); if (trace) { leader_print(pframe_group->plist->length); printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); } } // ---------------------------------------------------------------- static void pass_1_for_triple_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { mlr_dsl_ast_node_t* pstarts_node = pnode->pchildren->phead->pvvalue; mlr_dsl_ast_node_t* pcontinuations_node = pnode->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pupdates_node = pnode->pchildren->phead->pnext->pnext->pvvalue; mlr_dsl_ast_node_t* pblock_node = pnode->pchildren->phead->pnext->pnext->pnext->pvvalue; if (trace) { leader_print(pframe_group->plist->length); printf("PUSH SUBFRAME %s\n", pnode->text); } stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); stkalc_subframe_group_push(pframe_group, pnext_subframe); if (*pmax_subframe_depth < pframe_group->plist->length) *pmax_subframe_depth = pframe_group->plist->length; pass_1_for_statement_list(pstarts_node, pframe_group, pmax_subframe_depth, trace); pass_1_for_statement_list(pcontinuations_node, pframe_group, pmax_subframe_depth, trace); pass_1_for_statement_list(pupdates_node, pframe_group, pmax_subframe_depth, trace); pass_1_for_statement_block(pblock_node, pframe_group, pmax_subframe_depth, trace); pnode->subframe_var_count = pnext_subframe->var_count; stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); if (trace) { leader_print(pframe_group->plist->length); printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); } } // ---------------------------------------------------------------- static void pass_1_for_non_terminal_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, int* pmax_subframe_depth, int trace) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; if (pchild->type == MD_AST_NODE_TYPE_STATEMENT_BLOCK) { if (trace) { leader_print(pframe_group->plist->length); printf("PUSH SUBFRAME %s\n", pchild->text); } stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); stkalc_subframe_group_push(pframe_group, pnext_subframe); if (*pmax_subframe_depth < pframe_group->plist->length) *pmax_subframe_depth = pframe_group->plist->length; pass_1_for_statement_block(pchild, pframe_group, pmax_subframe_depth, trace); pchild->subframe_var_count = pnext_subframe->var_count; stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); if (trace) { leader_print(pframe_group->plist->length); printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pchild->subframe_var_count); } } else { pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); } } } // ================================================================ static stkalc_subframe_t* stkalc_subframe_alloc() { stkalc_subframe_t* pframe = mlr_malloc_or_die(sizeof(stkalc_subframe_t)); pframe->var_count = 0; pframe->pnames_to_indices = lhmsi_alloc(); return pframe; } static void stkalc_subframe_free(stkalc_subframe_t* pframe) { if (pframe == NULL) return; lhmsi_free(pframe->pnames_to_indices); free(pframe); } static int stkalc_subframe_test_and_get(stkalc_subframe_t* pframe, char* name, int* pvalue) { return lhmsi_test_and_get(pframe->pnames_to_indices, name, pvalue); } static int stkalc_subframe_get(stkalc_subframe_t* pframe, char* name) { return lhmsi_get(pframe->pnames_to_indices, name); } static int stkalc_subframe_add(stkalc_subframe_t* pframe, char* name) { int rv = pframe->var_count; lhmsi_put(pframe->pnames_to_indices, name, pframe->var_count, NO_FREE); pframe->var_count++; return rv; } // ================================================================ static stkalc_subframe_group_t* stkalc_subframe_group_alloc(stkalc_subframe_t* pframe, int trace) { stkalc_subframe_group_t* pframe_group = mlr_malloc_or_die(sizeof(stkalc_subframe_group_t)); pframe_group->plist = sllv_alloc(); sllv_push(pframe_group->plist, pframe); stkalc_subframe_add(pframe, ""); if (trace) { leader_print(pframe_group->plist->length); printf("ADD FOR ABSENT s @ %du%d\n", 0, 0); } return pframe_group; } static void stkalc_subframe_group_free(stkalc_subframe_group_t* pframe_group) { if (pframe_group == NULL) return; while (pframe_group->plist->phead != NULL) { stkalc_subframe_free(sllv_pop(pframe_group->plist)); } sllv_free(pframe_group->plist); free(pframe_group); } static void stkalc_subframe_group_push(stkalc_subframe_group_t* pframe_group, stkalc_subframe_t* pframe) { sllv_push(pframe_group->plist, pframe); } static stkalc_subframe_t* stkalc_subframe_group_pop(stkalc_subframe_group_t* pframe_group) { return sllv_pop(pframe_group->plist); } // 'var x = 1' always applies to the current subframe. static void stkalc_subframe_group_mutate_node_for_define(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, char* desc, int trace) { stkalc_subframe_t* pframe = pframe_group->plist->phead->pvvalue; pnode->vardef_subframe_index = pframe_group->plist->length - 1; if (stkalc_subframe_test_and_get(pframe, pnode->text, &pnode->vardef_subframe_relative_index)) { fprintf(stderr, "%s: redefinition of variable %s in the same scope.\n", MLR_GLOBALS.bargv0, pnode->text); exit(1); } else { pnode->vardef_subframe_relative_index = stkalc_subframe_add(pframe, pnode->text); } if (trace) { leader_print(pframe_group->plist->length); printf("ADD %s %s @ %ds%d\n", desc, pnode->text, pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); } } // 'x = 1' is one of two things: (1) already defined in a higher subframe and // referenced in the current subframe; (2) not defined in a higher subframe, in // which case it is hereby defined in the current subframe. static void stkalc_subframe_group_mutate_node_for_write(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, char* desc, int trace) { char* op = "REUSE"; int found = FALSE; // Search for definitions in current & higher subframes. pnode->vardef_subframe_index = pframe_group->plist->length - 1; for (sllve_t* pe = pframe_group->plist->phead; pe != NULL; pe = pe->pnext, pnode->vardef_subframe_index--) { stkalc_subframe_t* pframe = pe->pvvalue; if (stkalc_subframe_test_and_get(pframe, pnode->text, &pnode->vardef_subframe_relative_index)) { found = TRUE; break; } } // If not found, define locally. xxx or: here is where we would disallow implicit definitions. if (!found) { pnode->vardef_subframe_index = pframe_group->plist->length - 1; stkalc_subframe_t* pframe = pframe_group->plist->phead->pvvalue; pnode->vardef_subframe_relative_index = stkalc_subframe_add(pframe, pnode->text); op = "ADD"; } if (trace) { leader_print(pframe_group->plist->length); printf("%s %s %s @ %ds%d\n", op, desc, pnode->text, pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); } } // The right-hand side of '$a = b' is one of two things: (1) already defined in a higher // subframe and referenced in the current subframe; (2) not defined in a higher subframe, // in which case the RHS evaluates to absent-null. An absent-null is always kept at index // 0 in the frame. This is an important assumption to be tracked across modules, including // here as well as the CST-node handlers. It's tested in the test-dsl-stack-allocation.mlr // regtest case. static void stkalc_subframe_group_mutate_node_for_read(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, char* desc, int trace) { char* op = "PRESENT"; int found = FALSE; // Search for definitions in current & higher subframes. pnode->vardef_subframe_index = pframe_group->plist->length - 1; for (sllve_t* pe = pframe_group->plist->phead; pe != NULL; pe = pe->pnext, pnode->vardef_subframe_index--) { stkalc_subframe_t* pframe = pe->pvvalue; if (stkalc_subframe_test_and_get(pframe, pnode->text, &pnode->vardef_subframe_relative_index)) { found = TRUE; break; } } // Absent-null is indexed in this stack allocator by the "" variable name. if (!found) { stkalc_subframe_t* plast = pframe_group->plist->ptail->pvvalue; pnode->vardef_subframe_relative_index = stkalc_subframe_get(plast, ""); pnode->vardef_subframe_index = 0; op = "ABSENT"; } if (trace) { leader_print(pframe_group->plist->length); printf("%s %s %s @ %ds%d\n", desc, pnode->text, op, pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); } } // ================================================================ static void pass_2_for_top_level_block(mlr_dsl_ast_node_t* pnode, int trace) { int subframe_depth = 0; int var_count_below_subframe = 0; int var_count_at_subframe = 0; int max_var_depth = 0; int max_subframe_depth = pnode->max_subframe_depth; MLR_INTERNAL_CODING_ERROR_IF(max_subframe_depth == MD_UNUSED_INDEX); int* subframe_var_count_belows = mlr_malloc_or_die(max_subframe_depth * sizeof(int)); for (int i = 0; i < pnode->max_subframe_depth; i++) subframe_var_count_belows[i] = MD_UNUSED_INDEX; if (trace) { printf("\n"); printf("ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [%s]\n", pnode->text); } pass_2_for_node(pnode, subframe_depth, var_count_below_subframe, var_count_at_subframe, &max_var_depth, subframe_var_count_belows, max_subframe_depth, trace); pnode->max_var_depth = max_var_depth; free(subframe_var_count_belows); } // ---------------------------------------------------------------- static void pass_2_for_node(mlr_dsl_ast_node_t* pnode, int subframe_depth, int var_count_below_subframe, int var_count_at_subframe, int* pmax_var_depth, int* subframe_var_count_belows, int max_subframe_depth, int trace) { if (pnode->subframe_var_count != MD_UNUSED_INDEX) { var_count_below_subframe += var_count_at_subframe; var_count_at_subframe = pnode->subframe_var_count; int depth = var_count_below_subframe + var_count_at_subframe; if (depth > *pmax_var_depth) { *pmax_var_depth = depth; } subframe_var_count_belows[subframe_depth] = var_count_below_subframe; if (trace) { leader_print(subframe_depth); printf("SUBFRAME [%s] var_count_below=%d var_count_at=%d max_var_depth_so_far=%d subframe_depth=%d\n", pnode->text, var_count_below_subframe, var_count_at_subframe, *pmax_var_depth, subframe_depth); } subframe_depth++; } if (pnode->vardef_subframe_relative_index != MD_UNUSED_INDEX) { MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_subframe_index < 0); MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_subframe_index >= max_subframe_depth); pnode->vardef_frame_relative_index = subframe_var_count_belows[pnode->vardef_subframe_index] + pnode->vardef_subframe_relative_index; if (trace) { leader_print(subframe_depth); printf("NODE %s %ds%d (", pnode->text, pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); for (int i = 0; i < subframe_depth; i++) { if (i > 0) printf(","); printf("%d:%d", i, subframe_var_count_belows[i]); } printf(") -> %d\n", pnode->vardef_frame_relative_index); } MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index < 0); MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index > *pmax_var_depth); } if (pnode->pchildren != NULL) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pchild = pe->pvvalue; pass_2_for_node(pchild, subframe_depth, var_count_below_subframe, var_count_at_subframe, pmax_var_depth, subframe_var_count_belows, max_subframe_depth, trace); } } if (pnode->subframe_var_count != MD_UNUSED_INDEX) { subframe_depth--; subframe_var_count_belows[subframe_depth] = MD_UNUSED_INDEX; } } // ================================================================ const char* STKALC_TRACE_LEADER = " "; static void leader_print(int depth) { for (int i = 0; i < depth; i++) printf("%s", STKALC_TRACE_LEADER); } miller-5.6.2/c/dsl/return_state.h000066400000000000000000000003011354153536500167100ustar00rootroot00000000000000#ifndef RETURN_STATE_H #define RETURN_STATE_H #include "containers/mlhmmv.h" typedef struct _return_state_t { boxed_xval_t retval; int returned; } return_state_t; #endif // RETURN_STATE_H miller-5.6.2/c/dsl/rval_evaluator.h000066400000000000000000000027421354153536500172320ustar00rootroot00000000000000// ================================================================ // These evaluate right-hand-side values (rvals) and return mlrvals (mv_t). // This is for scalar-valued contexts: almost all expressions except for rxval // contexts. // // Values propagating up through the concrete syntax tree are always dynamically // allocated: e.g. in '$c = $a . $b' the $a and $b are copied out as ephemerals; // in the concat function their concatenation is computed and the ephemeral // input arguments are freed; then the result is stored in field $c. // // (This is distinct from rxvals which are copy-on-write: // expression-intermediate values are not always ephemeral.) // ================================================================ #ifndef RVAL_EVALUATOR_H #define RVAL_EVALUATOR_H #include "lib/context.h" #include "containers/lrec.h" #include "containers/lhmsmv.h" #include "containers/mlhmmv.h" #include "lib/mvfuncs.h" #include "containers/boxed_xval.h" #include "containers/local_stack.h" #include "containers/loop_stack.h" #include "lib/string_array.h" #include "dsl/variables.h" struct _rval_evaluator_t; // forward reference for method declarations typedef mv_t rval_evaluator_process_func_t(void* pvstate, variables_t* pvars); typedef void rval_evaluator_free_func_t(struct _rval_evaluator_t*); typedef struct _rval_evaluator_t { void* pvstate; rval_evaluator_process_func_t* pprocess_func; rval_evaluator_free_func_t* pfree_func; } rval_evaluator_t; #endif // RVAL_EVALUATOR_H miller-5.6.2/c/dsl/rval_evaluators.h000066400000000000000000000245471354153536500174240ustar00rootroot00000000000000// ================================================================ // NOTES: // // * Code here evaluates right-hand-side values (rvals) and return mlrvals (mv_t). // // * This is used by mlr filter and mlr put. // // * Comparison to mlrval.c: the latter is functions from mlrval(s) to mlrval; // in this file we have the higher-level notion of evaluating lrec objects, // using mlrval.c to do so. // // * Functions prototyped here evaluate right-hand-side values (rvals) and // return mlrvals (mv_t). This is for scalar-valued contexts: almost all // expressions except for rxval contexts. // // Values propagating up through the concrete syntax tree are always // dynamically allocated: e.g. in '$c = $a . $b' the $a and $b are copied out // as ephemerals; in the concat function their concatenation is computed and // the ephemeral input arguments are freed; then the result is stored in field // $c. // // This is distinct from rxvals which are copy-on-write: // expression-intermediate values are not always ephemeral. // // * There are two kinds of lrec-evaluators here: those with _x_ in their names // which accept various types of mlrval, with disposition-matrices in // mlrval.c functions, and those with _i_/_f_/_b_/_s_ (int, float, boolean, // string) which either type-check or type-coerce their arguments, invoking // type-specific functions in mlrval.c. Those with _n_ take int or float // and also use disposition matrices. In all cases it's the job of // rval_evaluators.c to invoke functions here with mlrvals of the correct // type(s). See also comments in lib/mlrval.h. // // ================================================================ #ifndef RVAL_EVALUATORS_H #define RVAL_EVALUATORS_H #include #include "lib/mvfuncs.h" #include "containers/xvfuncs.h" #include "dsl/mlr_dsl_ast.h" #include "dsl/rval_evaluator.h" #include "dsl/function_manager.h" // ================================================================ // rval_expr_evaluators.c // ================================================================ // Topmost function: rval_evaluator_t* rval_evaluator_alloc_from_ast( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); // Next level: rval_evaluator_t* rval_evaluator_alloc_from_field_name(char* field_name, int type_inferencing); rval_evaluator_t* rval_evaluator_alloc_from_indirect_field_name(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags); rval_evaluator_t* rval_evaluator_alloc_from_positional_srec_field_name(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags); rval_evaluator_t* rval_evaluator_alloc_from_oosvar_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags); rval_evaluator_t* rval_evaluator_alloc_from_local_map_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags); // This is used for evaluating strings and numbers in literal expressions, e.g. '$x = "abc"' // or '$x = "left_\1". The values are subject to replacement with regex captures. See comments // in mapper_put for more information. // // Compare rval_evaluator_alloc_from_string which doesn't do regex replacement: it is intended for // oosvar names on expression left-hand sides (outside of this file). rval_evaluator_t* rval_evaluator_alloc_from_string_literal(char* string); rval_evaluator_t* rval_evaluator_alloc_from_numeric_literal(char* string); rval_evaluator_t* rval_evaluator_alloc_from_boolean_literal(char* string); // This is intended only for oosvar names on expression left-hand sides. // Compare rval_evaluator_alloc_from_numeric_literal. rval_evaluator_t* rval_evaluator_alloc_from_string(char* string); rval_evaluator_t* rval_evaluator_alloc_from_boolean(int boolval); rval_evaluator_t* rval_evaluator_alloc_from_environment(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags); rval_evaluator_t* rval_evaluator_alloc_from_NF(); rval_evaluator_t* rval_evaluator_alloc_from_NR(); rval_evaluator_t* rval_evaluator_alloc_from_FNR(); rval_evaluator_t* rval_evaluator_alloc_from_FILENAME(); rval_evaluator_t* rval_evaluator_alloc_from_FILENUM(); rval_evaluator_t* rval_evaluator_alloc_from_PI(); rval_evaluator_t* rval_evaluator_alloc_from_E(); rval_evaluator_t* rval_evaluator_alloc_from_IPS(); rval_evaluator_t* rval_evaluator_alloc_from_IFS(); rval_evaluator_t* rval_evaluator_alloc_from_IRS(); rval_evaluator_t* rval_evaluator_alloc_from_OPS(); rval_evaluator_t* rval_evaluator_alloc_from_OFS(); rval_evaluator_t* rval_evaluator_alloc_from_ORS(); rval_evaluator_t* rval_evaluator_alloc_from_context_variable(char* variable_name); rval_evaluator_t* rval_evaluator_alloc_from_local_variable(int vardef_frame_relative_index); // For unit test: rval_evaluator_t* rval_evaluator_alloc_from_mlrval(mv_t* pval); // ================================================================ // rval_func_evaluators.c // ================================================================ // These have some shared code that would otherwise be duplicated per-function in lib/mvfuncs.c. rval_evaluator_t* rval_evaluator_alloc_from_variadic_func(mv_variadic_func_t* pfunc, rval_evaluator_t** pargs, int nargs); rval_evaluator_t* rval_evaluator_alloc_from_b_b_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_b_bb_and_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_b_bb_or_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_b_bb_xor_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_z_func(mv_zary_func_t* pfunc); rval_evaluator_t* rval_evaluator_alloc_from_f_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_x_n_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_i_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_f_ff_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_xx_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_xx_nullable_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_f_fff_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); rval_evaluator_t* rval_evaluator_alloc_from_i_ii_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_i_iii_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); rval_evaluator_t* rval_evaluator_alloc_from_s_sii_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); rval_evaluator_t* rval_evaluator_alloc_from_ternop(rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); rval_evaluator_t* rval_evaluator_alloc_from_s_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_s_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_s_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_f_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_i_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_x_x_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); rval_evaluator_t* rval_evaluator_alloc_from_x_xi_func( mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_ns_func( mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_ss_func( mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_ssc_func( mv_binary_arg3_capture_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_x_sr_func( mv_binary_arg2_regex_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case); rval_evaluator_t* rval_evaluator_alloc_from_x_se_func( mv_binary_arg2_regextract_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case); rval_evaluator_t* rval_evaluator_alloc_from_s_xs_func( mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2); rval_evaluator_t* rval_evaluator_alloc_from_s_sss_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); rval_evaluator_t* rval_evaluator_alloc_from_x_srs_func(mv_ternary_arg2_regex_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3); rval_evaluator_t* rval_evaluator_alloc_from_x_ses_func(mv_ternary_arg2_regextract_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3); // ================================================================ // rval_list_evaluators.c // ================================================================ // Nominally for oosvar multikeys. sllmv_t* evaluate_list(sllv_t* pevaluators, variables_t* pvars, int* pall_non_null_or_error); // ---------------------------------------------------------------- // Type-inferenced srec-field getters for the expression-evaluators, as well as for boundvars in srec for-loops. // For RHS evaluation: mv_t get_srec_value_string_only(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay); mv_t get_srec_value_string_float(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay); mv_t get_srec_value_string_float_int(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay); // For boundvars in for-srec: typedef mv_t type_inferenced_srec_field_copy_getter_t(lrece_t* pentry, lhmsmv_t* ptyped_overlay); mv_t get_copy_srec_value_string_only_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay); mv_t get_copy_srec_value_string_float_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay); mv_t get_copy_srec_value_string_float_int_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay); #endif // RVAL_EVALUATORS_H miller-5.6.2/c/dsl/rval_expr_evaluators.c000066400000000000000000001263241354153536500204510ustar00rootroot00000000000000#include #include #include #include // for tolower(), toupper() #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mtrand.h" #include "mapping/mapper.h" #include "dsl/rval_evaluators.h" #include "dsl/function_manager.h" #include "dsl/context_flags.h" // ================================================================ // See comments in rval_evaluators.h // ================================================================ // ================================================================ // The grammar permits certain statements which are syntactically invalid, (a) because it's awkward to handle // there, and (b) because we get far better control over error messages here (vs. 'syntax error'). // The context flags are used as the CST is built from the AST, for CST-build-time validation. // This semantic analysis isn't a separate pass through the AST or CST since it's done while the // CST is being constructed. rval_evaluator_t* rval_evaluator_alloc_from_ast(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (pnode->pchildren == NULL) { // leaf node switch(pnode->type) { case MD_AST_NODE_TYPE_FIELD_NAME: if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return rval_evaluator_alloc_from_field_name(pnode->text, type_inferencing); break; case MD_AST_NODE_TYPE_STRING_LITERAL: // In input data such as echo x=3,y=4 | mlr put '$z=$x+$y', the 3 and 4 are strings // which need parsing as integers. But in DSL expression literals such as 'put $z = "3" + 4' // the "3" should not. return rval_evaluator_alloc_from_string_literal(pnode->text); break; case MD_AST_NODE_TYPE_NUMERIC_LITERAL: // In input data such as echo x=3,y=4 | mlr put '$z=$x+$y', the 3 and 4 are strings // which need parsing as integers. But in DSL expression literals such as 'put $z = "3" + 4' // the "3" should not. return rval_evaluator_alloc_from_numeric_literal(pnode->text); break; case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return rval_evaluator_alloc_from_boolean_literal(pnode->text); break; case MD_AST_NODE_TYPE_REGEXI: return rval_evaluator_alloc_from_string_literal(pnode->text); break; case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return rval_evaluator_alloc_from_context_variable(pnode->text); break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return rval_evaluator_alloc_from_local_variable(pnode->vardef_frame_relative_index); break; case MD_AST_NODE_TYPE_FULL_SREC: fprintf(stderr, "%s: $* is not valid within scalar contexts.\n", MLR_GLOBALS.bargv0); exit(1); case MD_AST_NODE_TYPE_FULL_OOSVAR: fprintf(stderr, "%s: @* is not valid within scalar contexts.\n", MLR_GLOBALS.bargv0); exit(1); case MD_AST_NODE_TYPE_MAP_LITERAL: fprintf(stderr, "%s: map-literals are not valid within scalar contexts.\n", MLR_GLOBALS.bargv0); exit(1); default: MLR_INTERNAL_CODING_ERROR(); return NULL; // not reached break; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if (pnode->type == MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME) { if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return rval_evaluator_alloc_from_indirect_field_name(pnode->pchildren->phead->pvvalue, pfmgr, type_inferencing, context_flags); } else if (pnode->type == MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME) { if (context_flags & IN_BEGIN_OR_END) { fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", MLR_GLOBALS.bargv0); exit(1); } return rval_evaluator_alloc_from_positional_srec_field_name(pnode->pchildren->phead->pvvalue, pfmgr, type_inferencing, context_flags); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_KEYLIST) { return rval_evaluator_alloc_from_oosvar_keylist(pnode, pfmgr, type_inferencing, context_flags); } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { return rval_evaluator_alloc_from_local_map_keylist(pnode, pfmgr, type_inferencing, context_flags); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if (pnode->type == MD_AST_NODE_TYPE_ENV) { return rval_evaluator_alloc_from_environment(pnode, pfmgr, type_inferencing, context_flags); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if ((pnode->type == MD_AST_NODE_TYPE_FUNCTION_CALLSITE) || (pnode->type == MD_AST_NODE_TYPE_OPERATOR)) { return fmgr_alloc_provisional_from_operator_or_function_call(pfmgr, pnode, type_inferencing, context_flags); } else if (pnode->type == MD_AST_NODE_TYPE_FULL_SREC) { fprintf(stderr, "%s: $* is not valid within scalar contexts.\n", MLR_GLOBALS.bargv0); exit(1); } else if (pnode->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { fprintf(stderr, "%s: @* is not valid within scalar contexts.\n", MLR_GLOBALS.bargv0); exit(1); } else if (pnode->type == MD_AST_NODE_TYPE_MAP_LITERAL) { fprintf(stderr, "%s: map-literals are not valid within scalar contexts.\n", MLR_GLOBALS.bargv0); exit(1); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // This is the fall-through which typically gets hit when you update the AST-producing grammar but // haven't yet implemented the CST handler for it. } else { MLR_INTERNAL_CODING_ERROR(); return NULL; // not reached } } // ================================================================ typedef struct _rval_evaluator_field_name_state_t { char* field_name; } rval_evaluator_field_name_state_t; static mv_t rval_evaluator_field_name_func_string_only(void* pvstate, variables_t* pvars) { rval_evaluator_field_name_state_t* pstate = pvstate; return get_srec_value_string_only(pstate->field_name, pvars->pinrec, pvars->ptyped_overlay); } static mv_t rval_evaluator_field_name_func_string_float(void* pvstate, variables_t* pvars) { rval_evaluator_field_name_state_t* pstate = pvstate; return get_srec_value_string_float(pstate->field_name, pvars->pinrec, pvars->ptyped_overlay); } static mv_t rval_evaluator_field_name_func_string_float_int(void* pvstate, variables_t* pvars) { rval_evaluator_field_name_state_t* pstate = pvstate; return get_srec_value_string_float_int(pstate->field_name, pvars->pinrec, pvars->ptyped_overlay); } static void rval_evaluator_field_name_free(rval_evaluator_t* pevaluator) { rval_evaluator_field_name_state_t* pstate = pevaluator->pvstate; free(pstate->field_name); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_field_name(char* field_name, int type_inferencing) { rval_evaluator_field_name_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_field_name_state_t)); pstate->field_name = mlr_strdup_or_die(field_name); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = NULL; switch (type_inferencing) { case TYPE_INFER_STRING_ONLY: pevaluator->pprocess_func = rval_evaluator_field_name_func_string_only; break; case TYPE_INFER_STRING_FLOAT: pevaluator->pprocess_func = rval_evaluator_field_name_func_string_float; break; case TYPE_INFER_STRING_FLOAT_INT: pevaluator->pprocess_func = rval_evaluator_field_name_func_string_float_int; break; default: MLR_INTERNAL_CODING_ERROR(); break; } pevaluator->pfree_func = rval_evaluator_field_name_free; return pevaluator; } // ================================================================ typedef struct _rval_evaluator_indirect_field_name_state_t { rval_evaluator_t* pname_evaluator; } rval_evaluator_indirect_field_name_state_t; static mv_t rval_evaluator_indirect_field_name_func_string_only(void* pvstate, variables_t* pvars) { rval_evaluator_indirect_field_name_state_t* pstate = pvstate; mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); if (mv_is_null(&mvname)) { mv_free(&mvname); return mv_absent(); } char free_flags = NO_FREE; char* indirect_field_name = mv_maybe_alloc_format_val(&mvname, &free_flags); mv_t rv = get_srec_value_string_only(indirect_field_name, pvars->pinrec, pvars->ptyped_overlay); if (free_flags & FREE_ENTRY_VALUE) free(indirect_field_name); mv_free(&mvname); return rv; } static mv_t rval_evaluator_indirect_field_name_func_string_float(void* pvstate, variables_t* pvars) { rval_evaluator_indirect_field_name_state_t* pstate = pvstate; mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); if (mv_is_null(&mvname)) { mv_free(&mvname); return mv_absent(); } char free_flags = NO_FREE; char* indirect_field_name = mv_maybe_alloc_format_val(&mvname, &free_flags); mv_t rv = get_srec_value_string_float(indirect_field_name, pvars->pinrec, pvars->ptyped_overlay); if (free_flags & FREE_ENTRY_VALUE) free(indirect_field_name); mv_free(&mvname); return rv; } static mv_t rval_evaluator_indirect_field_name_func_string_float_int(void* pvstate, variables_t* pvars) { rval_evaluator_indirect_field_name_state_t* pstate = pvstate; mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); if (mv_is_null(&mvname)) { mv_free(&mvname); return mv_absent(); } char free_flags = NO_FREE; char* indirect_field_name = mv_maybe_alloc_format_val(&mvname, &free_flags); mv_t rv = get_srec_value_string_float_int(indirect_field_name, pvars->pinrec, pvars->ptyped_overlay); if (free_flags & FREE_ENTRY_VALUE) free(indirect_field_name); mv_free(&mvname); return rv; } static void rval_evaluator_indirect_field_name_free(rval_evaluator_t* pevaluator) { rval_evaluator_indirect_field_name_state_t* pstate = pevaluator->pvstate; pstate->pname_evaluator->pfree_func(pstate->pname_evaluator); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_indirect_field_name(mlr_dsl_ast_node_t* pnamenode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rval_evaluator_indirect_field_name_state_t* pstate = mlr_malloc_or_die( sizeof(rval_evaluator_indirect_field_name_state_t)); pstate->pname_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pfmgr, type_inferencing, context_flags); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = NULL; switch (type_inferencing) { case TYPE_INFER_STRING_ONLY: pevaluator->pprocess_func = rval_evaluator_indirect_field_name_func_string_only; break; case TYPE_INFER_STRING_FLOAT: pevaluator->pprocess_func = rval_evaluator_indirect_field_name_func_string_float; break; case TYPE_INFER_STRING_FLOAT_INT: pevaluator->pprocess_func = rval_evaluator_indirect_field_name_func_string_float_int; break; default: MLR_INTERNAL_CODING_ERROR(); break; } pevaluator->pfree_func = rval_evaluator_indirect_field_name_free; return pevaluator; } // ================================================================ typedef struct _rval_evaluator_positional_field_name_state_t { rval_evaluator_t* pname_evaluator; } rval_evaluator_positional_field_name_state_t; static mv_t rval_evaluator_positional_field_name_func(void* pvstate, variables_t* pvars) { rval_evaluator_positional_field_name_state_t* pstate = pvstate; mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); if (mv_is_null(&mvname)) { mv_free(&mvname); return mv_absent(); } if (!mv_is_int(&mvname)) { char free_flags = NO_FREE; char* text = mv_maybe_alloc_format_val(&mvname, &free_flags); fprintf(stderr, "%s: positional names must be integers; got \"%s\".\n", MLR_GLOBALS.bargv0, text); if (free_flags) free(text); exit(1); } int positional_field_name = mvname.u.intv; char* key = lrec_get_key_by_position(pvars->pinrec, positional_field_name); mv_t rv = mv_absent(); if (key != NULL) { rv = mv_from_string_with_free(mlr_strdup_or_die(key)); } mv_free(&mvname); return rv; } static void rval_evaluator_positional_field_name_free(rval_evaluator_t* pevaluator) { rval_evaluator_positional_field_name_state_t* pstate = pevaluator->pvstate; pstate->pname_evaluator->pfree_func(pstate->pname_evaluator); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_positional_srec_field_name(mlr_dsl_ast_node_t* pnamenode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rval_evaluator_positional_field_name_state_t* pstate = mlr_malloc_or_die( sizeof(rval_evaluator_positional_field_name_state_t)); pstate->pname_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pfmgr, type_inferencing, context_flags); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_positional_field_name_func; pevaluator->pfree_func = rval_evaluator_positional_field_name_free; return pevaluator; } // ================================================================ typedef struct _rval_evaluator_oosvar_keylist_state_t { sllv_t* poosvar_rhs_keylist_evaluators; } rval_evaluator_oosvar_keylist_state_t; mv_t rval_evaluator_oosvar_keylist_func(void* pvstate, variables_t* pvars) { rval_evaluator_oosvar_keylist_state_t* pstate = pvstate; int all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(pstate->poosvar_rhs_keylist_evaluators, pvars, &all_non_null_or_error); mv_t rv = mv_absent(); if (all_non_null_or_error) { int error = 0; mv_t* pval = mlhmmv_root_look_up_and_ref_terminal(pvars->poosvars, pmvkeys, &error); if (pval != NULL) { if (pval->type == MT_STRING && *pval->u.strv == 0) rv = mv_empty(); else rv = mv_copy(pval); } } sllmv_free(pmvkeys); return rv; } static void rval_evaluator_oosvar_keylist_free(rval_evaluator_t* pevaluator) { rval_evaluator_oosvar_keylist_state_t* pstate = pevaluator->pvstate; for (sllve_t* pe = pstate->poosvar_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* pevaluator = pe->pvvalue; pevaluator->pfree_func(pevaluator); } sllv_free(pstate->poosvar_rhs_keylist_evaluators); free(pstate); free(pevaluator); } // Example AST: // // $ mlr -n put -v '$y = @x[1]["two"][$3+4][@5]' // list (statement_list): // = (srec_assignment): // y (field_name). // oosvar_keylist (oosvar_keylist): // x (string_literal). // 1 (numeric_literal). // two (numeric_literal). // + (operator): // 3 (field_name). // 4 (numeric_literal). // oosvar_keylist (oosvar_keylist): // 5 (string_literal). rval_evaluator_t* rval_evaluator_alloc_from_oosvar_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rval_evaluator_oosvar_keylist_state_t* pstate = mlr_malloc_or_die( sizeof(rval_evaluator_oosvar_keylist_state_t)); sllv_t* pkeylist_evaluators = sllv_alloc(); for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); } else { sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pfmgr, type_inferencing, context_flags)); } } pstate->poosvar_rhs_keylist_evaluators = pkeylist_evaluators; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = NULL; pevaluator->pprocess_func = rval_evaluator_oosvar_keylist_func; pevaluator->pfree_func = rval_evaluator_oosvar_keylist_free; return pevaluator; } // ================================================================ typedef struct _rval_evaluator_local_map_keylist_state_t { int vardef_frame_relative_index; sllv_t* plocal_map_rhs_keylist_evaluators; } rval_evaluator_local_map_keylist_state_t; mv_t rval_evaluator_local_map_keylist_func(void* pvstate, variables_t* pvars) { rval_evaluator_local_map_keylist_state_t* pstate = pvstate; int all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(pstate->plocal_map_rhs_keylist_evaluators, pvars, &all_non_null_or_error); mv_t rv = mv_absent(); if (all_non_null_or_error) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); mv_t val = local_stack_frame_ref_terminal_from_indexed(pframe, pstate->vardef_frame_relative_index, pmvkeys); if (val.type == MT_STRING && *val.u.strv == 0) rv = mv_empty(); else rv = mv_copy(&val); } sllmv_free(pmvkeys); return rv; } static void rval_evaluator_local_map_keylist_free(rval_evaluator_t* pevaluator) { rval_evaluator_local_map_keylist_state_t* pstate = pevaluator->pvstate; for (sllve_t* pe = pstate->plocal_map_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* pevaluator = pe->pvvalue; pevaluator->pfree_func(pevaluator); } sllv_free(pstate->plocal_map_rhs_keylist_evaluators); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_local_map_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rval_evaluator_local_map_keylist_state_t* pstate = mlr_malloc_or_die( sizeof(rval_evaluator_local_map_keylist_state_t)); MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->vardef_frame_relative_index = pnode->vardef_frame_relative_index; sllv_t* pkeylist_evaluators = sllv_alloc(); for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); } else { sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pfmgr, type_inferencing, context_flags)); } } pstate->plocal_map_rhs_keylist_evaluators = pkeylist_evaluators; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = NULL; pevaluator->pprocess_func = rval_evaluator_local_map_keylist_func; pevaluator->pfree_func = rval_evaluator_local_map_keylist_free; return pevaluator; } // ================================================================ // This is used for evaluating numbers in literal expressions, e.g. '$x = 4' typedef struct _rval_evaluator_numeric_literal_state_t { mv_t literal; } rval_evaluator_numeric_literal_state_t; mv_t rval_evaluator_non_string_literal_func(void* pvstate, variables_t* pvars) { rval_evaluator_numeric_literal_state_t* pstate = pvstate; return pstate->literal; } mv_t rval_evaluator_string_literal_func(void* pvstate, variables_t* pvars) { rval_evaluator_numeric_literal_state_t* pstate = pvstate; char* input = pstate->literal.u.strv; if (pvars->ppregex_captures == NULL || *pvars->ppregex_captures == NULL) { return mv_from_string_no_free(input); } else { int was_allocated = FALSE; char* output = interpolate_regex_captures(input, *pvars->ppregex_captures, &was_allocated); if (was_allocated) return mv_from_string_with_free(output); else return mv_from_string_no_free(output); } } static void rval_evaluator_numeric_literal_free(rval_evaluator_t* pevaluator) { rval_evaluator_numeric_literal_state_t* pstate = pevaluator->pvstate; mv_free(&pstate->literal); free(pstate); free(pevaluator); } // How to handle echo a=1,b=2.0 | mlr put {flag} '$s = $a; $t = $b; $u = 3; $v = 4.0', where {flag} is -S, -F, or // neither: // * (no flag) TYPE_INFER_STRING_FLOAT_INT: a and s = int 1, b and t = float 2.0, u = int 3, v = float 4.0 // * (-F flag) TYPE_INFER_STRING_FLOAT: a and s = float 1.0, b and t = float 2.0, u = int 3, v = float 4.0 // * (-S flag) TYPE_INFER_STRING_ONLY: a and s = string "1", b and t = string "2.0", u = int 3, v = float 4.0 // The -S/-F flags for put/filter are for type inferencing in record data, not in literal expressions. rval_evaluator_t* rval_evaluator_alloc_from_numeric_literal(char* string) { rval_evaluator_numeric_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_numeric_literal_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); if (string == NULL) { pstate->literal = mv_absent(); pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; } else { long long intv; double fltv; pevaluator->pprocess_func = NULL; if (mlr_try_int_from_string(string, &intv)) { pstate->literal = mv_from_int(intv); pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; } else if (mlr_try_float_from_string(string, &fltv)) { pstate->literal = mv_from_float(fltv); pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; } else { pstate->literal = mv_from_string_no_free(string); pevaluator->pprocess_func = rval_evaluator_string_literal_func; } } pevaluator->pfree_func = rval_evaluator_numeric_literal_free; pevaluator->pvstate = pstate; return pevaluator; } // ================================================================ // This is used for evaluating strings and numbers in literal expressions, e.g. '$x = "abc"' // or '$x = "left_\1". The values are subject to replacement with regex captures. See comments // in mapper_put for more information. // // Compare rval_evaluator_alloc_from_string which doesn't do regex replacement: it is intended for // oosvar names on expression left-hand sides (outside of this file). typedef struct _rval_evaluator_string_literal_state_t { mv_t literal; } rval_evaluator_string_literal_state_t; static void rval_evaluator_string_literal_free(rval_evaluator_t* pevaluator) { rval_evaluator_string_literal_state_t* pstate = pevaluator->pvstate; mv_free(&pstate->literal); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_string_literal(char* string) { rval_evaluator_string_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_string_literal_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); if (string == NULL) { pstate->literal = mv_absent(); pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; } else { pstate->literal = mv_from_string_no_free(string); pevaluator->pprocess_func = rval_evaluator_string_literal_func; } pevaluator->pfree_func = rval_evaluator_string_literal_free; pevaluator->pvstate = pstate; return pevaluator; } // ================================================================ // This is intended only for oosvar names on expression left-hand sides (outside of this file). // Compare rval_evaluator_alloc_from_string_literal. typedef struct _rval_evaluator_string_state_t { char* string; } rval_evaluator_string_state_t; mv_t rval_evaluator_string_func(void* pvstate, variables_t* pvars) { rval_evaluator_string_state_t* pstate = pvstate; return mv_from_string_no_free(pstate->string); } static void rval_evaluator_string_free(rval_evaluator_t* pevaluator) { rval_evaluator_string_state_t* pstate = pevaluator->pvstate; free(pstate->string); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_string(char* string) { rval_evaluator_string_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_string_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pstate->string = mlr_strdup_or_die(string); pevaluator->pprocess_func = rval_evaluator_string_func; pevaluator->pfree_func = rval_evaluator_string_free; pevaluator->pvstate = pstate; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_boolean_literal_state_t { mv_t literal; } rval_evaluator_boolean_literal_state_t; mv_t rval_evaluator_boolean_literal_func(void* pvstate, variables_t* pvars) { rval_evaluator_boolean_literal_state_t* pstate = pvstate; return pstate->literal; } static void rval_evaluator_boolean_literal_free(rval_evaluator_t* pevaluator) { rval_evaluator_boolean_literal_state_t* pstate = pevaluator->pvstate; mv_free(&pstate->literal); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_boolean_literal(char* string) { rval_evaluator_boolean_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_boolean_literal_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); if (streq(string, "true")) { pstate->literal = mv_from_true(); } else if (streq(string, "false")) { pstate->literal = mv_from_false(); } else { MLR_INTERNAL_CODING_ERROR(); } pevaluator->pprocess_func = rval_evaluator_boolean_literal_func; pevaluator->pfree_func = rval_evaluator_boolean_literal_free; pevaluator->pvstate = pstate; return pevaluator; } rval_evaluator_t* rval_evaluator_alloc_from_boolean(int boolval) { rval_evaluator_boolean_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_boolean_literal_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pstate->literal = mv_from_bool(boolval); pevaluator->pprocess_func = rval_evaluator_boolean_literal_func; pevaluator->pfree_func = rval_evaluator_boolean_literal_free; pevaluator->pvstate = pstate; return pevaluator; } // ================================================================ // Example: // $ mlr put -v '$y=ENV["X"]' ... // AST BEGIN STATEMENTS (0): // AST MAIN STATEMENTS (1): // = (srec_assignment): // y (field_name). // env (env): // ENV (env). // X (numeric_literal). // AST END STATEMENTS (0): // ---------------------------------------------------------------- typedef struct _rval_evaluator_environment_state_t { rval_evaluator_t* pname_evaluator; } rval_evaluator_environment_state_t; mv_t rval_evaluator_environment_func(void* pvstate, variables_t* pvars) { rval_evaluator_environment_state_t* pstate = pvstate; mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); if (mv_is_null(&mvname)) { return mv_absent(); } char free_flags; char* strname = mv_format_val(&mvname, &free_flags); char* strvalue = getenv(strname); if (strvalue == NULL) { mv_free(&mvname); if (free_flags & FREE_ENTRY_VALUE) free(strname); return mv_empty(); } mv_t rv = mv_from_string(strvalue, NO_FREE); mv_free(&mvname); if (free_flags & FREE_ENTRY_VALUE) free(strname); return rv; } static void rval_evaluator_environment_free(rval_evaluator_t* pevaluator) { rval_evaluator_environment_state_t* pstate = pevaluator->pvstate; pstate->pname_evaluator->pfree_func(pstate->pname_evaluator); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_environment(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rval_evaluator_environment_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_environment_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); mlr_dsl_ast_node_t* pnamenode = pnode->pchildren->phead->pnext->pvvalue; pstate->pname_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pfmgr, type_inferencing, context_flags); pevaluator->pprocess_func = rval_evaluator_environment_func; pevaluator->pfree_func = rval_evaluator_environment_free; pevaluator->pvstate = pstate; return pevaluator; } // ================================================================ mv_t rval_evaluator_NF_func(void* pvstate, variables_t* pvars) { return mv_from_int(pvars->pinrec->field_count); } static void rval_evaluator_NF_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_NF() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_NF_func; pevaluator->pfree_func = rval_evaluator_NF_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_NR_func(void* pvstate, variables_t* pvars) { return mv_from_int(pvars->pctx->nr); } static void rval_evaluator_NR_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_NR() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_NR_func; pevaluator->pfree_func = rval_evaluator_NR_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_FNR_func(void* pvstate, variables_t* pvars) { return mv_from_int(pvars->pctx->fnr); } static void rval_evaluator_FNR_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_FNR() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_FNR_func; pevaluator->pfree_func = rval_evaluator_FNR_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_FILENAME_func(void* pvstate, variables_t* pvars) { return mv_from_string_no_free(pvars->pctx->filename); } static void rval_evaluator_FILENAME_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_FILENAME() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_FILENAME_func; pevaluator->pfree_func = rval_evaluator_FILENAME_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_FILENUM_func(void* pvstate, variables_t* pvars) { return mv_from_int(pvars->pctx->filenum); } static void rval_evaluator_FILENUM_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_FILENUM() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_FILENUM_func; pevaluator->pfree_func = rval_evaluator_FILENUM_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_PI_func(void* pvstate, variables_t* pvars) { return mv_from_float(M_PI); } static void rval_evaluator_PI_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_M_PI() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_PI_func; pevaluator->pfree_func = rval_evaluator_PI_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_E_func(void* pvstate, variables_t* pvars) { return mv_from_float(M_E); } static void rval_evaluator_E_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_M_E() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_E_func; pevaluator->pfree_func = rval_evaluator_E_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_IPS_func(void* pvstate, variables_t* pvars) { return mv_from_string_no_free(pvars->pctx->ips); } static void rval_evaluator_IPS_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_IPS() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_IPS_func; pevaluator->pfree_func = rval_evaluator_IPS_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_IFS_func(void* pvstate, variables_t* pvars) { return mv_from_string_no_free(pvars->pctx->ifs); } static void rval_evaluator_IFS_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_IFS() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_IFS_func; pevaluator->pfree_func = rval_evaluator_IFS_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_IRS_func(void* pvstate, variables_t* pvars) { context_t* pctx = pvars->pctx; return mv_from_string_no_free( pctx->auto_line_term_detected ? pctx->auto_line_term : pctx->irs ); } static void rval_evaluator_IRS_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_IRS() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_IRS_func; pevaluator->pfree_func = rval_evaluator_IRS_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_OPS_func(void* pvstate, variables_t* pvars) { return mv_from_string_no_free(pvars->pctx->ops); } static void rval_evaluator_OPS_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_OPS() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_OPS_func; pevaluator->pfree_func = rval_evaluator_OPS_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_OFS_func(void* pvstate, variables_t* pvars) { return mv_from_string_no_free(pvars->pctx->ofs); } static void rval_evaluator_OFS_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_OFS() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_OFS_func; pevaluator->pfree_func = rval_evaluator_OFS_free; return pevaluator; } // ---------------------------------------------------------------- mv_t rval_evaluator_ORS_func(void* pvstate, variables_t* pvars) { context_t* pctx = pvars->pctx; return mv_from_string_no_free( pctx->auto_line_term_detected ? pctx->auto_line_term : pctx->ors ); } static void rval_evaluator_ORS_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_ORS() { rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = NULL; pevaluator->pprocess_func = rval_evaluator_ORS_func; pevaluator->pfree_func = rval_evaluator_ORS_free; return pevaluator; } // ================================================================ rval_evaluator_t* rval_evaluator_alloc_from_context_variable(char* variable_name) { if (streq(variable_name, "NF")) { return rval_evaluator_alloc_from_NF(); } else if (streq(variable_name, "NR")) { return rval_evaluator_alloc_from_NR(); } else if (streq(variable_name, "FNR")) { return rval_evaluator_alloc_from_FNR(); } else if (streq(variable_name, "FILENAME")) { return rval_evaluator_alloc_from_FILENAME(); } else if (streq(variable_name, "FILENUM")) { return rval_evaluator_alloc_from_FILENUM(); } else if (streq(variable_name, "M_PI")) { return rval_evaluator_alloc_from_M_PI(); } else if (streq(variable_name, "M_E")) { return rval_evaluator_alloc_from_M_E(); } else if (streq(variable_name, "IPS")) { return rval_evaluator_alloc_from_IPS(); } else if (streq(variable_name, "IFS")) { return rval_evaluator_alloc_from_IFS(); } else if (streq(variable_name, "IRS")) { return rval_evaluator_alloc_from_IRS(); } else if (streq(variable_name, "OPS")) { return rval_evaluator_alloc_from_OPS(); } else if (streq(variable_name, "OFS")) { return rval_evaluator_alloc_from_OFS(); } else if (streq(variable_name, "ORS")) { return rval_evaluator_alloc_from_ORS(); } else { return NULL; } } // ================================================================ typedef struct _rval_evaluator_from_local_variable_state_t { int vardef_frame_relative_index; } rval_evaluator_from_local_variable_state_t; mv_t rval_evaluator_from_local_variable_func(void* pvstate, variables_t* pvars) { rval_evaluator_from_local_variable_state_t* pstate = pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); mv_t val = local_stack_frame_get_terminal_from_nonindexed(pframe, pstate->vardef_frame_relative_index); return mv_copy(&val); } static void rval_evaluator_from_local_variable_free(rval_evaluator_t* pevaluator) { rval_evaluator_from_local_variable_state_t* pstate = pevaluator->pvstate; free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_local_variable(int vardef_frame_relative_index) { rval_evaluator_from_local_variable_state_t* pstate = mlr_malloc_or_die( sizeof(rval_evaluator_from_local_variable_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); MLR_INTERNAL_CODING_ERROR_IF(vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->vardef_frame_relative_index = vardef_frame_relative_index; pevaluator->pprocess_func = rval_evaluator_from_local_variable_func; pevaluator->pfree_func = rval_evaluator_from_local_variable_free; pevaluator->pvstate = pstate; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_mv_state_t { mv_t literal; } rval_evaluator_mv_state_t; mv_t rval_evaluator_mv_process(void* pvstate, variables_t* pvars) { rval_evaluator_mv_state_t* pstate = pvstate; return mv_copy(&pstate->literal); } static void rval_evaluator_mv_free(rval_evaluator_t* pevaluator) { rval_evaluator_mv_state_t* pstate = pevaluator->pvstate; mv_free(&pstate->literal); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_mlrval(mv_t* pval) { rval_evaluator_mv_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_mv_state_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pstate->literal = mv_copy(pval); pevaluator->pprocess_func = rval_evaluator_mv_process; pevaluator->pfree_func = rval_evaluator_mv_free; pevaluator->pvstate = pstate; return pevaluator; } // ================================================================ // Type-inferenced srec-field getters // ---------------------------------------------------------------- mv_t get_srec_value_string_only(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay) { // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. mv_t* poverlay = lhmsmv_get(ptyped_overlay, field_name); mv_t rv; if (poverlay != NULL) { // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy // a value here to feed into that. Otherwise the typed-overlay map would have its contents // freed out from underneath it by the evaluator functions. rv = mv_copy(poverlay); } else { rv = mv_ref_type_infer_string(lrec_get(pinrec, field_name)); rv = mv_copy(&rv); } return rv; } // ---------------------------------------------------------------- mv_t get_srec_value_string_float(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay) { // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. mv_t* poverlay = lhmsmv_get(ptyped_overlay, field_name); mv_t rv; if (poverlay != NULL) { // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy // a value here to feed into that. Otherwise the typed-overlay map would have its contents // freed out from underneath it by the evaluator functions. rv = mv_copy(poverlay); } else { rv = mv_ref_type_infer_string_or_float(lrec_get(pinrec, field_name)); rv = mv_copy(&rv); } return rv; } // ---------------------------------------------------------------- mv_t get_srec_value_string_float_int(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay) { // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. mv_t* poverlay = lhmsmv_get(ptyped_overlay, field_name); mv_t rv; if (poverlay != NULL) { // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy // a value here to feed into that. Otherwise the typed-overlay map would have its contents // freed out from underneath it by the evaluator functions. rv = mv_copy(poverlay); } else { rv = mv_ref_type_infer_string_or_float_or_int(lrec_get(pinrec, field_name)); rv = mv_copy(&rv); } return rv; } // ---------------------------------------------------------------- mv_t get_copy_srec_value_string_only_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay) { // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. mv_t* poverlay = lhmsmv_get(ptyped_overlay, pentry->key); mv_t rv; if (poverlay != NULL) { // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy // a value here to feed into that. Otherwise the typed-overlay map would have its contents // freed out from underneath it by the evaluator functions. rv = mv_copy(poverlay); } else { if (pentry->value == NULL) { rv = mv_absent(); } else if (*pentry->value == 0) { rv = mv_empty(); } else { rv = mv_from_string_with_free(mlr_strdup_or_die(pentry->value)); } } return rv; } // ---------------------------------------------------------------- mv_t get_copy_srec_value_string_float_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay) { // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. mv_t* poverlay = lhmsmv_get(ptyped_overlay, pentry->key); mv_t rv; if (poverlay != NULL) { // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy // a value here to feed into that. Otherwise the typed-overlay map would have its contents // freed out from underneath it by the evaluator functions. rv = mv_copy(poverlay); } else { if (pentry->value == NULL) { rv = mv_absent(); } else if (*pentry->value == 0) { rv = mv_empty(); } else { double fltv; if (mlr_try_float_from_string(pentry->value, &fltv)) { rv = mv_from_float(fltv); } else { rv = mv_from_string_with_free(mlr_strdup_or_die(pentry->value)); } } } return rv; } // ---------------------------------------------------------------- mv_t get_copy_srec_value_string_float_int_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay) { // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. mv_t* poverlay = lhmsmv_get(ptyped_overlay, pentry->key); mv_t rv; if (poverlay != NULL) { // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy // a value here to feed into that. Otherwise the typed-overlay map would have its contents // freed out from underneath it by the evaluator functions. rv = mv_copy(poverlay); } else { if (pentry->value == NULL) { rv = mv_absent(); } else if (*pentry->value == 0) { rv = mv_empty(); } else { long long intv; double fltv; if (mlr_try_int_from_string(pentry->value, &intv)) { rv = mv_from_int(intv); } else if (mlr_try_float_from_string(pentry->value, &fltv)) { rv = mv_from_float(fltv); } else { rv = mv_from_string_with_free(mlr_strdup_or_die(pentry->value)); } } } return rv; } miller-5.6.2/c/dsl/rval_func_evaluators.c000066400000000000000000001357001354153536500204240ustar00rootroot00000000000000#include #include #include #include // for tolower(), toupper() #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mtrand.h" #include "mapping/mapper.h" #include "dsl/context_flags.h" #include "dsl/rval_evaluators.h" // ---------------------------------------------------------------- typedef struct _rval_evaluator_variadic_state_t { mv_variadic_func_t* pfunc; rval_evaluator_t** pargs; mv_t* pmvs; int nargs; } rval_evaluator_variadic_state_t; static mv_t rval_evaluator_variadic_func(void* pvstate, variables_t* pvars) { rval_evaluator_variadic_state_t* pstate = pvstate; int nargs = pstate->nargs; for (int i = 0; i < nargs; i++) { rval_evaluator_t* parg = pstate->pargs[i]; mv_t* pmv = &pstate->pmvs[i]; *pmv = parg->pprocess_func(parg->pvstate, pvars); } return pstate->pfunc(pstate->pmvs, nargs); } static void rval_evaluator_variadic_free(rval_evaluator_t* pevaluator) { rval_evaluator_variadic_state_t* pstate = pevaluator->pvstate; for (int i = 0; i < pstate->nargs; i++) pstate->pargs[i]->pfree_func(pstate->pargs[i]); free(pstate->pargs); // contents already mv_freed by evaluator chains at process time free(pstate->pmvs); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_variadic_func(mv_variadic_func_t* pfunc, rval_evaluator_t** pargs, int nargs) { rval_evaluator_variadic_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_variadic_state_t)); pstate->pfunc = pfunc; pstate->pargs = pargs; pstate->nargs = nargs; pstate->pmvs = mlr_malloc_or_die(nargs * sizeof(mv_t)); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_variadic_func; pevaluator->pfree_func = rval_evaluator_variadic_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_b_b_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_b_b_state_t; static mv_t rval_evaluator_b_b_func(void* pvstate, variables_t* pvars) { rval_evaluator_b_b_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type != MT_BOOLEAN) return mv_error(); return pstate->pfunc(&val1); } static void rval_evaluator_b_b_free(rval_evaluator_t* pevaluator) { rval_evaluator_b_b_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_b_b_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_b_b_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_b_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_b_b_func; pevaluator->pfree_func = rval_evaluator_b_b_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_b_bb_state_t { rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_b_bb_state_t; // This is different from most of the lrec-evaluator functions in that it does short-circuiting: // since is logical AND, the LHS is not evaluated if the RHS is false. static mv_t rval_evaluator_b_bb_and_func(void* pvstate, variables_t* pvars) { rval_evaluator_b_bb_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type == MT_BOOLEAN) { if (val1.u.boolv == FALSE) return val1; } else if (val1.type != MT_ABSENT) { return mv_error(); } mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val2); if (val2.type == MT_BOOLEAN) { return val2; } else if (val2.type == MT_ABSENT) { return val1; } else { return mv_error(); } } // This is different from most of the lrec-evaluator functions in that it does short-circuiting: // since is logical OR, the LHS is not evaluated if the RHS is true. static mv_t rval_evaluator_b_bb_or_func(void* pvstate, variables_t* pvars) { rval_evaluator_b_bb_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type == MT_BOOLEAN) { if (val1.u.boolv == TRUE) return val1; } else if (val1.type != MT_ABSENT) { return mv_error(); } mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val2); if (val2.type == MT_BOOLEAN) { return val2; } else if (val2.type == MT_ABSENT) { return val1; } else { return mv_error(); } } static mv_t rval_evaluator_b_bb_xor_func(void* pvstate, variables_t* pvars) { rval_evaluator_b_bb_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type != MT_BOOLEAN && val1.type != MT_ABSENT) { return mv_error(); } mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val2); if (val2.type == MT_BOOLEAN) { if (val1.type == MT_BOOLEAN) return mv_from_bool(val1.u.boolv ^ val2.u.boolv); else return val2; } else if (val2.type == MT_ABSENT) { return val1; } else { return mv_error(); } } static void rval_evaluator_b_bb_free(rval_evaluator_t* pevaluator) { rval_evaluator_b_bb_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_b_bb_and_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_b_bb_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_bb_state_t)); pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_b_bb_and_func; pevaluator->pfree_func = rval_evaluator_b_bb_free; return pevaluator; } rval_evaluator_t* rval_evaluator_alloc_from_b_bb_or_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_b_bb_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_bb_state_t)); pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_b_bb_or_func; pevaluator->pfree_func = rval_evaluator_b_bb_free; return pevaluator; } rval_evaluator_t* rval_evaluator_alloc_from_b_bb_xor_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_b_bb_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_bb_state_t)); pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_b_bb_xor_func; pevaluator->pfree_func = rval_evaluator_b_bb_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_z_state_t { mv_zary_func_t* pfunc; } rval_evaluator_x_z_state_t; static mv_t rval_evaluator_x_z_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_z_state_t* pstate = pvstate; return pstate->pfunc(); } static void rval_evaluator_x_z_free(rval_evaluator_t* pevaluator) { free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_z_func(mv_zary_func_t* pfunc) { rval_evaluator_x_z_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_z_state_t)); pstate->pfunc = pfunc; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_z_func; pevaluator->pfree_func = rval_evaluator_x_z_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_f_f_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_f_f_state_t; static mv_t rval_evaluator_f_f_func(void* pvstate, variables_t* pvars) { rval_evaluator_f_f_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_float_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type != MT_FLOAT) return mv_error(); return pstate->pfunc(&val1); } static void rval_evaluator_f_f_free(rval_evaluator_t* pevaluator) { rval_evaluator_f_f_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_f_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_f_f_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_f_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_f_f_func; pevaluator->pfree_func = rval_evaluator_f_f_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_n_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_x_n_state_t; static mv_t rval_evaluator_x_n_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_n_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_number_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); return pstate->pfunc(&val1); } static void rval_evaluator_x_n_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_n_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_n_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_x_n_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_n_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_n_func; pevaluator->pfree_func = rval_evaluator_x_n_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_i_i_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_i_i_state_t; static mv_t rval_evaluator_i_i_func(void* pvstate, variables_t* pvars) { rval_evaluator_i_i_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_int_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); return pstate->pfunc(&val1); } static void rval_evaluator_i_i_free(rval_evaluator_t* pevaluator) { rval_evaluator_i_i_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_i_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_i_i_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_i_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_i_i_func; pevaluator->pfree_func = rval_evaluator_i_i_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_f_ff_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_f_ff_state_t; static mv_t rval_evaluator_f_ff_func(void* pvstate, variables_t* pvars) { rval_evaluator_f_ff_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_float_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); mv_set_float_nullable(&val2); NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); return pstate->pfunc(&val1, &val2); } static void rval_evaluator_f_ff_free(rval_evaluator_t* pevaluator) { rval_evaluator_f_ff_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_f_ff_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_f_ff_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_ff_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_f_ff_func; pevaluator->pfree_func = rval_evaluator_f_ff_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_xx_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_x_xx_state_t; static mv_t rval_evaluator_x_xx_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_xx_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); // nullities handled by full disposition matrices return pstate->pfunc(&val1, &val2); } static void rval_evaluator_x_xx_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_xx_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_xx_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_x_xx_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_xx_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_xx_func; pevaluator->pfree_func = rval_evaluator_x_xx_free; return pevaluator; } // ---------------------------------------------------------------- // This is for min/max which can return non-null when one argument is null -- // in comparison to other functions which return null if *any* argument is // null. typedef struct _rval_evaluator_x_xx_nullable_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_x_xx_nullable_state_t; static mv_t rval_evaluator_x_xx_nullable_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_xx_nullable_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_number_nullable(&val1); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); mv_set_number_nullable(&val2); return pstate->pfunc(&val1, &val2); } static void rval_evaluator_x_xx_nullable_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_xx_nullable_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_xx_nullable_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_x_xx_nullable_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_xx_nullable_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_xx_nullable_func; pevaluator->pfree_func = rval_evaluator_x_xx_nullable_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_f_fff_state_t { mv_ternary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; rval_evaluator_t* parg3; } rval_evaluator_f_fff_state_t; static mv_t rval_evaluator_f_fff_func(void* pvstate, variables_t* pvars) { rval_evaluator_f_fff_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_float_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); mv_set_float_nullable(&val2); NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); mv_set_float_nullable(&val3); NULL_OR_ERROR_OUT_FOR_NUMBERS(val3); return pstate->pfunc(&val1, &val2, &val3); } static void rval_evaluator_f_fff_free(rval_evaluator_t* pevaluator) { rval_evaluator_f_fff_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_f_fff_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) { rval_evaluator_f_fff_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_fff_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_f_fff_func; pevaluator->pfree_func = rval_evaluator_f_fff_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_i_ii_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_i_ii_state_t; static mv_t rval_evaluator_i_ii_func(void* pvstate, variables_t* pvars) { rval_evaluator_i_ii_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_int_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type != MT_INT) return mv_error(); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); mv_set_int_nullable(&val2); NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); if (val2.type != MT_INT) return mv_error(); return pstate->pfunc(&val1, &val2); } static void rval_evaluator_i_ii_free(rval_evaluator_t* pevaluator) { rval_evaluator_i_ii_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_i_ii_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_i_ii_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_ii_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_i_ii_func; pevaluator->pfree_func = rval_evaluator_i_ii_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_i_iii_state_t { mv_ternary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; rval_evaluator_t* parg3; } rval_evaluator_i_iii_state_t; static mv_t rval_evaluator_i_iii_func(void* pvstate, variables_t* pvars) { rval_evaluator_i_iii_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_int_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); if (val1.type != MT_INT) return mv_error(); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); mv_set_int_nullable(&val2); NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); if (val2.type != MT_INT) return mv_error(); mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); mv_set_int_nullable(&val3); NULL_OR_ERROR_OUT_FOR_NUMBERS(val3); if (val3.type != MT_INT) return mv_error(); return pstate->pfunc(&val1, &val2, &val3); } static void rval_evaluator_i_iii_free(rval_evaluator_t* pevaluator) { rval_evaluator_i_iii_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_i_iii_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) { rval_evaluator_i_iii_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_iii_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_i_iii_func; pevaluator->pfree_func = rval_evaluator_i_iii_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_ternop_state_t { rval_evaluator_t* parg1; rval_evaluator_t* parg2; rval_evaluator_t* parg3; } rval_evaluator_ternop_state_t; static mv_t rval_evaluator_ternop_func(void* pvstate, variables_t* pvars) { rval_evaluator_ternop_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); mv_set_boolean_strict(&val1); return val1.u.boolv ? pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars) : pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); } static void rval_evaluator_ternop_free(rval_evaluator_t* pevaluator) { rval_evaluator_ternop_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_ternop(rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) { rval_evaluator_ternop_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_ternop_state_t)); pstate->parg1 = parg1; pstate->parg2 = parg2; pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_ternop_func; pevaluator->pfree_func = rval_evaluator_ternop_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_s_s_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_s_s_state_t; static mv_t rval_evaluator_s_s_func(void* pvstate, variables_t* pvars) { rval_evaluator_s_s_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); return pstate->pfunc(&val1); } static void rval_evaluator_s_s_free(rval_evaluator_t* pevaluator) { rval_evaluator_s_s_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_s_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_s_s_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_s_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_s_s_func; pevaluator->pfree_func = rval_evaluator_s_s_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_s_sii_state_t { mv_ternary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; rval_evaluator_t* parg3; } rval_evaluator_s_sii_state_t; static mv_t rval_evaluator_s_sii_func(void* pvstate, variables_t* pvars) { rval_evaluator_s_sii_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); mv_set_int_nullable(&val2); NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); mv_set_int_nullable(&val3); NULL_OR_ERROR_OUT_FOR_NUMBERS(val3); return pstate->pfunc(&val1, &val2, &val3); } static void rval_evaluator_s_sii_free(rval_evaluator_t* pevaluator) { rval_evaluator_s_sii_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_s_sii_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) { rval_evaluator_s_sii_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_sii_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_s_sii_func; pevaluator->pfree_func = rval_evaluator_s_sii_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_s_f_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_s_f_state_t; static mv_t rval_evaluator_s_f_func(void* pvstate, variables_t* pvars) { rval_evaluator_s_f_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_float_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); return pstate->pfunc(&val1); } static void rval_evaluator_s_f_free(rval_evaluator_t* pevaluator) { rval_evaluator_s_f_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_s_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_s_f_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_f_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_s_f_func; pevaluator->pfree_func = rval_evaluator_s_f_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_s_i_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_s_i_state_t; static mv_t rval_evaluator_s_i_func(void* pvstate, variables_t* pvars) { rval_evaluator_s_i_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_int_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); return pstate->pfunc(&val1); } static void rval_evaluator_s_i_free(rval_evaluator_t* pevaluator) { rval_evaluator_s_i_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_s_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_s_i_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_i_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_s_i_func; pevaluator->pfree_func = rval_evaluator_s_i_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_f_s_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_f_s_state_t; static mv_t rval_evaluator_f_s_func(void* pvstate, variables_t* pvars) { rval_evaluator_f_s_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); return pstate->pfunc(&val1); } static void rval_evaluator_f_s_free(rval_evaluator_t* pevaluator) { rval_evaluator_f_s_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_f_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_f_s_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_s_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_f_s_func; pevaluator->pfree_func = rval_evaluator_f_s_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_i_s_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_i_s_state_t; static mv_t rval_evaluator_i_s_func(void* pvstate, variables_t* pvars) { rval_evaluator_i_s_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); return pstate->pfunc(&val1); } static void rval_evaluator_i_s_free(rval_evaluator_t* pevaluator) { rval_evaluator_i_s_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_i_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_i_s_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_s_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_i_s_func; pevaluator->pfree_func = rval_evaluator_i_s_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_x_state_t { mv_unary_func_t* pfunc; rval_evaluator_t* parg1; } rval_evaluator_x_x_state_t; static mv_t rval_evaluator_x_x_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_x_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); // nullity handled by full disposition matrices return pstate->pfunc(&val1); } static void rval_evaluator_x_x_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_x_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_x_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { rval_evaluator_x_x_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_x_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_x_func; pevaluator->pfree_func = rval_evaluator_x_x_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_xi_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_x_xi_state_t; static mv_t rval_evaluator_x_xi_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_xi_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); if (val2.type != MT_INT) { return mv_error(); } // nullity of 1st argument handled by full disposition matrices return pstate->pfunc(&val1, &val2); } static void rval_evaluator_x_xi_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_xi_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_xi_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_x_xi_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_xi_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_xi_func; pevaluator->pfree_func = rval_evaluator_x_xi_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_ns_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_x_ns_state_t; static mv_t rval_evaluator_x_ns_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_ns_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_set_number_nullable(&val1); NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val2); if (!mv_is_string_or_empty(&val2)) { mv_free(&val1); return mv_error(); } return pstate->pfunc(&val1, &val2); } static void rval_evaluator_x_ns_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_ns_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_ns_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_x_ns_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ns_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_ns_func; pevaluator->pfree_func = rval_evaluator_x_ns_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_ss_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_x_ss_state_t; static mv_t rval_evaluator_x_ss_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_ss_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val2); if (!mv_is_string_or_empty(&val2)) return mv_error(); return pstate->pfunc(&val1, &val2); } static void rval_evaluator_x_ss_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_ss_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_ss_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_x_ss_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ss_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_ss_func; pevaluator->pfree_func = rval_evaluator_x_ss_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_ssc_state_t { mv_binary_arg3_capture_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_x_ssc_state_t; static mv_t rval_evaluator_x_ssc_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_ssc_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val2); if (!mv_is_string_or_empty(&val2)) return mv_error(); return pstate->pfunc(&val1, &val2, pvars->ppregex_captures); } static void rval_evaluator_x_ssc_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_ssc_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_ssc_func(mv_binary_arg3_capture_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_x_ssc_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ssc_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_ssc_func; pevaluator->pfree_func = rval_evaluator_x_ssc_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_sr_state_t { mv_binary_arg2_regex_func_t* pfunc; rval_evaluator_t* parg1; regex_t regex; string_builder_t* psb; } rval_evaluator_x_sr_state_t; static mv_t rval_evaluator_x_sr_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_sr_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); return pstate->pfunc(&val1, &pstate->regex, pstate->psb, pvars->ppregex_captures); } static void rval_evaluator_x_sr_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_sr_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); regfree(&pstate->regex); sb_free(pstate->psb); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_sr_func(mv_binary_arg2_regex_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case) { rval_evaluator_x_sr_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_sr_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; int cflags = ignore_case ? REG_ICASE : 0; regcomp_or_die(&pstate->regex, regex_string, cflags); pstate->psb = sb_alloc(MV_SB_ALLOC_LENGTH); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_sr_func; pevaluator->pfree_func = rval_evaluator_x_sr_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_se_state_t { mv_binary_arg2_regextract_func_t* pfunc; rval_evaluator_t* parg1; regex_t regex; } rval_evaluator_x_se_state_t; static mv_t rval_evaluator_x_se_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_se_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); return pstate->pfunc(&val1, &pstate->regex); } static void rval_evaluator_x_se_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_se_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); regfree(&pstate->regex); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_se_func(mv_binary_arg2_regextract_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case) { rval_evaluator_x_se_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_se_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; int cflags = ignore_case ? REG_ICASE : 0; regcomp_or_die(&pstate->regex, regex_string, cflags); rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_se_func; pevaluator->pfree_func = rval_evaluator_x_se_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_s_xs_state_t { mv_binary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; } rval_evaluator_s_xs_state_t; static mv_t rval_evaluator_s_xs_func(void* pvstate, variables_t* pvars) { rval_evaluator_s_xs_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val2); if (!mv_is_string_or_empty(&val2)) return mv_error(); return pstate->pfunc(&val1, &val2); } static void rval_evaluator_s_xs_free(rval_evaluator_t* pevaluator) { rval_evaluator_s_xs_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_s_xs_func(mv_binary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2) { rval_evaluator_s_xs_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_xs_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_s_xs_func; pevaluator->pfree_func = rval_evaluator_s_xs_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_s_sss_state_t { mv_ternary_func_t* pfunc; rval_evaluator_t* parg1; rval_evaluator_t* parg2; rval_evaluator_t* parg3; } rval_evaluator_s_sss_state_t; static mv_t rval_evaluator_s_sss_func(void* pvstate, variables_t* pvars) { rval_evaluator_s_sss_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val2); if (!mv_is_string_or_empty(&val2)) { mv_free(&val1); return mv_error(); } mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val3); if (!mv_is_string_or_empty(&val3)) { mv_free(&val1); mv_free(&val2); return mv_error(); } return pstate->pfunc(&val1, &val2, &val3); } static void rval_evaluator_s_sss_free(rval_evaluator_t* pevaluator) { rval_evaluator_s_sss_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_s_sss_func(mv_ternary_func_t* pfunc, rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) { rval_evaluator_s_sss_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_sss_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; pstate->parg2 = parg2; pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_s_sss_func; pevaluator->pfree_func = rval_evaluator_s_sss_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_srs_state_t { mv_ternary_arg2_regex_func_t* pfunc; rval_evaluator_t* parg1; regex_t regex; rval_evaluator_t* parg3; string_builder_t* psb; } rval_evaluator_x_srs_state_t; static mv_t rval_evaluator_x_srs_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_srs_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val3); if (!mv_is_string_or_empty(&val3)) { mv_free(&val3); return mv_error(); } return pstate->pfunc(&val1, &pstate->regex, pstate->psb, &val3); } static void rval_evaluator_x_srs_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_srs_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); regfree(&pstate->regex); pstate->parg3->pfree_func(pstate->parg3); sb_free(pstate->psb); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_srs_func(mv_ternary_arg2_regex_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3) { rval_evaluator_x_srs_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_srs_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; int cflags = ignore_case ? REG_ICASE : 0; regcomp_or_die(&pstate->regex, regex_string, cflags); pstate->psb = sb_alloc(MV_SB_ALLOC_LENGTH); pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_srs_func; pevaluator->pfree_func = rval_evaluator_x_srs_free; return pevaluator; } // ---------------------------------------------------------------- typedef struct _rval_evaluator_x_ses_state_t { mv_ternary_arg2_regextract_func_t* pfunc; rval_evaluator_t* parg1; regex_t regex; rval_evaluator_t* parg3; } rval_evaluator_x_ses_state_t; static mv_t rval_evaluator_x_ses_func(void* pvstate, variables_t* pvars) { rval_evaluator_x_ses_state_t* pstate = pvstate; mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val1); if (!mv_is_string_or_empty(&val1)) return mv_error(); mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); NULL_OR_ERROR_OUT_FOR_STRINGS(val3); if (!mv_is_string_or_empty(&val3)) { mv_free(&val3); return mv_error(); } return pstate->pfunc(&val1, &pstate->regex, &val3); } static void rval_evaluator_x_ses_free(rval_evaluator_t* pevaluator) { rval_evaluator_x_ses_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); regfree(&pstate->regex); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pevaluator); } rval_evaluator_t* rval_evaluator_alloc_from_x_ses_func(mv_ternary_arg2_regextract_func_t* pfunc, rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3) { rval_evaluator_x_ses_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ses_state_t)); pstate->pfunc = pfunc; pstate->parg1 = parg1; int cflags = ignore_case ? REG_ICASE : 0; regcomp_or_die(&pstate->regex, regex_string, cflags); pstate->parg3 = parg3; rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rval_evaluator_x_ses_func; pevaluator->pfree_func = rval_evaluator_x_ses_free; return pevaluator; } miller-5.6.2/c/dsl/rval_list_evaluators.c000066400000000000000000000020341354153536500204350ustar00rootroot00000000000000#include #include #include #include // for tolower(), toupper() #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mtrand.h" #include "mapping/mapper.h" #include "dsl/rval_evaluators.h" // ================================================================ // See comments in rval_evaluators.h // ================================================================ sllmv_t* evaluate_list(sllv_t* pevaluators, variables_t* pvars, int* pall_non_null_or_error) { sllmv_t* pmvs = sllmv_alloc(); int all_non_null_or_error = TRUE; for (sllve_t* pe = pevaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* pevaluator = pe->pvvalue; mv_t mv = pevaluator->pprocess_func(pevaluator->pvstate, pvars); if (mv_is_null_or_error(&mv)) { all_non_null_or_error = FALSE; break; } // Don't free the mlrval since its memory will be managed by the sllmv. sllmv_append_with_free(pmvs, &mv); } *pall_non_null_or_error = all_non_null_or_error; return pmvs; } miller-5.6.2/c/dsl/rxval_evaluator.h000066400000000000000000000035671354153536500174300ustar00rootroot00000000000000// ================================================================ // These evaluate right-hand-side extended values (rxvals) and return the same. // // For scalar (non-extended) right-hand side values, everything is ephemeral as // it propagates up through the concrete syntax tree: e.g. in '$c = $a . $b' the // $a and $b are copied out as ephemerals; in the concat function their // concatenation is computed and the ephemeral input arguments are freed; then // the result is stored in field $c. // // But for extended values (here) everything is copy-on-write: // expression-intermediate values are not always ephemeral. This is due to the // size of the data involved. We can do dump or emit of a nested hashmap stored // in an oosvar or local without copying it; we can do mapdiff of two map-valued // variables while not modifying or copying either argument. // // The boxed_xval_t decorates mlhmmv_value_t (extended value) with an // is_ephemeral flag. The mlhmmv_value_t in turn has a map or a scalar. // ================================================================ #ifndef RXVAL_EVALUATOR_H #define RXVAL_EVALUATOR_H #include "lib/context.h" #include "containers/lrec.h" #include "containers/lhmsmv.h" #include "containers/mlhmmv.h" #include "lib/mvfuncs.h" #include "containers/boxed_xval.h" #include "containers/local_stack.h" #include "containers/loop_stack.h" #include "lib/string_array.h" // ---------------------------------------------------------------- struct _rxval_evaluator_t; // forward reference for method declarations typedef boxed_xval_t rxval_evaluator_process_func_t(void* pvstate, variables_t* pvars); typedef void rxval_evaluator_free_func_t(struct _rxval_evaluator_t*); typedef struct _rxval_evaluator_t { void* pvstate; rxval_evaluator_process_func_t* pprocess_func; rxval_evaluator_free_func_t* pfree_func; } rxval_evaluator_t; #endif // RXVAL_EVALUATOR_H miller-5.6.2/c/dsl/rxval_evaluators.h000066400000000000000000000122141354153536500176000ustar00rootroot00000000000000// ================================================================ // These evaluate right-hand-side extended values (rxvals) and return the same. // // For scalar (non-extended) right-hand side values, everything is ephemeral as // it propagates up through the concrete syntax tree: e.g. in '$c = $a . $b' the // $a and $b are copied out as ephemerals; in the concat function their // concatenation is computed and the ephemeral input arguments are freed; then // the result is stored in field $c. // // But for extended values (here) everything is copy-on-write: // expression-intermediate values are not always ephemeral. This is due to the // size of the data involved. We can do dump or emit of a nested hashmap stored // in an oosvar or local without copying it; we can do mapdiff of two map-valued // variables while not modifying or copying either argument. // // The boxed_xval_t decorates mlhmmv_value_t (extended value) with an // is_ephemeral flag. The mlhmmv_value_t in turn has a map or a scalar. // ================================================================ #ifndef RXVAL_EVALUATORS_H #define RXVAL_EVALUATORS_H #include #include "lib/mvfuncs.h" #include "containers/xvfuncs.h" #include "dsl/mlr_dsl_ast.h" #include "dsl/rval_evaluator.h" #include "dsl/rxval_evaluator.h" #include "dsl/function_manager.h" // ================================================================ // rxval_expr_evaluators.c // ---------------------------------------------------------------- // Topmost functions: rxval_evaluator_t* rxval_evaluator_alloc_from_ast( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); // Next level: rxval_evaluator_t* rxval_evaluator_alloc_from_map_literal( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_function_callsite( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_nonindexed_local_variable( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_indexed_local_variable( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_oosvar_keylist( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_full_oosvar( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_full_srec( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_wrapping_rval( mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); // ================================================================ // rxval_func_evaluators.c rxval_evaluator_t* rxval_evaluator_alloc_from_variadic_func( xv_variadic_func_t* pfunc, sllv_t* parg_nodes, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_x_func( xv_unary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_m_func( xv_unary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_mx_func( xv_binary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_ms_func( xv_binary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_ss_func( xv_binary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_mss_func( xv_ternary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, mlr_dsl_ast_node_t* parg3_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_x_sss_func( xv_ternary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, mlr_dsl_ast_node_t* parg3_node, fmgr_t* pfmgr, int type_inferencing, int context_flags); rxval_evaluator_t* rxval_evaluator_alloc_from_A_x_func( xv_unary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, fmgr_t* pfmgr, int type_inferencing, int context_flags, char* desc); #endif // RXVAL_EVALUATORS_H miller-5.6.2/c/dsl/rxval_expr_evaluators.c000066400000000000000000000533001354153536500206320ustar00rootroot00000000000000#include #include #include #include // for tolower(), toupper() #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mtrand.h" #include "dsl/context_flags.h" #include "dsl/keylist_evaluators.h" #include "dsl/rval_evaluators.h" #include "dsl/rxval_evaluators.h" #include "dsl/function_manager.h" #include "mapping/mapper.h" // ================================================================ // See comments in rval_evaluators.h // ================================================================ // ---------------------------------------------------------------- rxval_evaluator_t* rxval_evaluator_alloc_from_ast(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { switch(pnode->type) { case MD_AST_NODE_TYPE_MAP_LITERAL: return rxval_evaluator_alloc_from_map_literal( pnode, pfmgr, type_inferencing, context_flags); return NULL; break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return rxval_evaluator_alloc_from_nonindexed_local_variable( pnode, pfmgr, type_inferencing, context_flags); return NULL; break; case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: return rxval_evaluator_alloc_from_indexed_local_variable( pnode, pfmgr, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: return rxval_evaluator_alloc_from_oosvar_keylist( pnode, pfmgr, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_FULL_OOSVAR: return rxval_evaluator_alloc_from_full_oosvar( pnode, pfmgr, type_inferencing, context_flags); return NULL; break; case MD_AST_NODE_TYPE_FULL_SREC: return rxval_evaluator_alloc_from_full_srec( pnode, pfmgr, type_inferencing, context_flags); return NULL; break; case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return fmgr_xalloc_provisional_from_operator_or_function_call(pfmgr, pnode, type_inferencing, context_flags); break; default: return rxval_evaluator_alloc_wrapping_rval(pnode, pfmgr, type_inferencing, context_flags); break; } } // ================================================================ // Map-literal input: // // { // "a" : 1, // "b" : { // "x" : 7, // "y" : 8, // }, // "c" : 3, // } // // Map-literal AST: // // $ mlr --from s put -v -q 'm={"a":NR,"b":{"x":999},"c":3};dump m' // text="block", type=STATEMENT_BLOCK: // text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: // text="m", type=NONINDEXED_LOCAL_VARIABLE. // text="map_literal", type=MAP_LITERAL: // text="mappair", type=MAP_LITERAL_PAIR: // text="mapkey", type=MAP_LITERAL: // text="a", type=STRING_LITERAL. // text="mapval", type=MAP_LITERAL: // text="NR", type=CONTEXT_VARIABLE. // text="mappair", type=MAP_LITERAL_PAIR: // text="mapkey", type=MAP_LITERAL: // text="b", type=STRING_LITERAL. // text="mapval", type=MAP_LITERAL: // text="map_literal", type=MAP_LITERAL: // text="mappair", type=MAP_LITERAL_PAIR: // text="mapkey", type=MAP_LITERAL: // text="x", type=STRING_LITERAL. // text="mapval", type=MAP_LITERAL: // text="999", type=NUMERIC_LITERAL. // text="mappair", type=MAP_LITERAL_PAIR: // text="mapkey", type=MAP_LITERAL: // text="c", type=STRING_LITERAL. // text="mapval", type=MAP_LITERAL: // text="3", type=NUMERIC_LITERAL. // text="dump", type=DUMP: // text=">", type=FILE_WRITE: // text="stdout", type=STDOUT: // text="m", type=NONINDEXED_LOCAL_VARIABLE. // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - typedef struct _map_literal_list_evaluator_t { sllv_t* pkvpair_evaluators; } map_literal_list_evaluator_t; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - typedef struct _map_literal_kvpair_evaluator_t { rval_evaluator_t* pkey_evaluator; int is_terminal; rxval_evaluator_t* pxval_evaluator; map_literal_list_evaluator_t* plist_evaluator; } map_literal_kvpair_evaluator_t; // ---------------------------------------------------------------- static map_literal_list_evaluator_t* allocate_map_literal_evaluator_from_ast( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { map_literal_list_evaluator_t* plist_evaluator = mlr_malloc_or_die( sizeof(map_literal_list_evaluator_t)); plist_evaluator->pkvpair_evaluators = sllv_alloc(); MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_MAP_LITERAL); for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { map_literal_kvpair_evaluator_t* pkvpair = mlr_malloc_or_die( sizeof(map_literal_kvpair_evaluator_t)); *pkvpair = (map_literal_kvpair_evaluator_t) { .pkey_evaluator = NULL, .is_terminal = TRUE, .pxval_evaluator = NULL, .plist_evaluator = NULL, }; mlr_dsl_ast_node_t* pchild = pe->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(pchild->type != MD_AST_NODE_TYPE_MAP_LITERAL_PAIR); mlr_dsl_ast_node_t* pleft = pchild->pchildren->phead->pvvalue; MLR_INTERNAL_CODING_ERROR_IF(pleft->type != MD_AST_NODE_TYPE_MAP_LITERAL_KEY); mlr_dsl_ast_node_t* pkeynode = pleft->pchildren->phead->pvvalue; pkvpair->pkey_evaluator = rval_evaluator_alloc_from_ast(pkeynode, pfmgr, type_inferencing, context_flags); mlr_dsl_ast_node_t* pright = pchild->pchildren->phead->pnext->pvvalue; mlr_dsl_ast_node_t* pvalnode = pright->pchildren->phead->pvvalue; if (pright->type == MD_AST_NODE_TYPE_MAP_LITERAL_VALUE) { pkvpair->pxval_evaluator = rxval_evaluator_alloc_from_ast(pvalnode, pfmgr, type_inferencing, context_flags); } else if (pright->type == MD_AST_NODE_TYPE_MAP_LITERAL) { pkvpair->is_terminal = FALSE; pkvpair->plist_evaluator = allocate_map_literal_evaluator_from_ast( pvalnode, pfmgr, type_inferencing, context_flags); } else { MLR_INTERNAL_CODING_ERROR(); } sllv_append(plist_evaluator->pkvpair_evaluators, pkvpair); } return plist_evaluator; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - typedef struct _rxval_evaluator_from_map_literal_state_t { map_literal_list_evaluator_t* proot_list_evaluator; } rxval_evaluator_from_map_literal_state_t; static void rxval_evaluator_from_map_literal_aux( rxval_evaluator_from_map_literal_state_t* pstate, map_literal_list_evaluator_t* plist_evaluator, mlhmmv_level_t* plevel, variables_t* pvars) { for (sllve_t* pe = plist_evaluator->pkvpair_evaluators->phead; pe != NULL; pe = pe->pnext) { map_literal_kvpair_evaluator_t* pkvpair = pe->pvvalue; // mlhmmv_level_put_terminal will copy keys and values mv_t mvkey = pkvpair->pkey_evaluator->pprocess_func(pkvpair->pkey_evaluator->pvstate, pvars); if (pkvpair->is_terminal) { boxed_xval_t boxed_xval = pkvpair->pxval_evaluator->pprocess_func( pkvpair->pxval_evaluator->pvstate, pvars); if (boxed_xval.is_ephemeral) { mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, &boxed_xval.xval); } else { mlhmmv_xvalue_t copy_xval = mlhmmv_xvalue_copy(&boxed_xval.xval); mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, ©_xval); } } else { mlhmmv_level_t* pnext_level = mlhmmv_level_put_empty_map(plevel, &mvkey); rxval_evaluator_from_map_literal_aux(pstate, pkvpair->plist_evaluator, pnext_level, pvars); } mv_free(&mvkey); } } static boxed_xval_t rxval_evaluator_from_map_literal_func(void* pvstate, variables_t* pvars) { rxval_evaluator_from_map_literal_state_t* pstate = pvstate; mlhmmv_xvalue_t xval = mlhmmv_xvalue_alloc_empty_map(); rxval_evaluator_from_map_literal_aux(pstate, pstate->proot_list_evaluator, xval.pnext_level, pvars); return (boxed_xval_t) { .xval = xval, .is_ephemeral = TRUE, }; } static void rxval_evaluator_from_map_literal_free_aux(map_literal_list_evaluator_t* plist_evaluator) { for (sllve_t* pe = plist_evaluator->pkvpair_evaluators->phead; pe != NULL; pe = pe->pnext) { map_literal_kvpair_evaluator_t* pkvpair_evaluator = pe->pvvalue; if (pkvpair_evaluator->pkey_evaluator != NULL) { pkvpair_evaluator->pkey_evaluator->pfree_func(pkvpair_evaluator->pkey_evaluator); } if (pkvpair_evaluator->pxval_evaluator != NULL) { pkvpair_evaluator->pxval_evaluator->pfree_func(pkvpair_evaluator->pxval_evaluator); } if (pkvpair_evaluator->plist_evaluator != NULL) { rxval_evaluator_from_map_literal_free_aux(pkvpair_evaluator->plist_evaluator); } free(pkvpair_evaluator); } sllv_free(plist_evaluator->pkvpair_evaluators); free(plist_evaluator); } static void rxval_evaluator_from_map_literal_free(rxval_evaluator_t* prxval_evaluator) { rxval_evaluator_from_map_literal_state_t* pstate = prxval_evaluator->pvstate; rxval_evaluator_from_map_literal_free_aux(pstate->proot_list_evaluator); free(pstate); free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_map_literal(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_from_map_literal_state_t* pstate = mlr_malloc_or_die( sizeof(rxval_evaluator_from_map_literal_state_t)); pstate->proot_list_evaluator = allocate_map_literal_evaluator_from_ast( pnode, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pvstate = pstate; prxval_evaluator->pprocess_func = rxval_evaluator_from_map_literal_func; prxval_evaluator->pfree_func = rxval_evaluator_from_map_literal_free; return prxval_evaluator; } // ================================================================ typedef struct _rxval_evaluator_from_nonindexed_local_variable_state_t { int vardef_frame_relative_index; } rxval_evaluator_from_nonindexed_local_variable_state_t; static boxed_xval_t rxval_evaluator_from_nonindexed_local_variable_func(void* pvstate, variables_t* pvars) { rxval_evaluator_from_nonindexed_local_variable_state_t* pstate = pvstate; local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); mlhmmv_xvalue_t* pxval = local_stack_frame_ref_extended_from_nonindexed( pframe, pstate->vardef_frame_relative_index); if (pxval == NULL) { return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), .is_ephemeral = FALSE, }; } else { return (boxed_xval_t) { .xval = *pxval, .is_ephemeral = FALSE, }; } } static void rxval_evaluator_from_nonindexed_local_variable_free(rxval_evaluator_t* prxval_evaluator) { rxval_evaluator_from_nonindexed_local_variable_state_t* pstate = prxval_evaluator->pvstate; free(pstate); free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_nonindexed_local_variable( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_from_nonindexed_local_variable_state_t* pstate = mlr_malloc_or_die( sizeof(rxval_evaluator_from_nonindexed_local_variable_state_t)); MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->vardef_frame_relative_index = pnode->vardef_frame_relative_index; rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pvstate = pstate; prxval_evaluator->pprocess_func = rxval_evaluator_from_nonindexed_local_variable_func; prxval_evaluator->pfree_func = rxval_evaluator_from_nonindexed_local_variable_free; return prxval_evaluator; } // ================================================================ typedef struct _rxval_evaluator_from_indexed_local_variable_state_t { int vardef_frame_relative_index; sllv_t* pkeylist_evaluators; } rxval_evaluator_from_indexed_local_variable_state_t; static boxed_xval_t rxval_evaluator_from_indexed_local_variable_func(void* pvstate, variables_t* pvars) { rxval_evaluator_from_indexed_local_variable_state_t* pstate = pvstate; int all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(pstate->pkeylist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); mlhmmv_xvalue_t* pxval = local_stack_frame_ref_extended_from_indexed( pframe, pstate->vardef_frame_relative_index, pmvkeys); sllmv_free(pmvkeys); if (pxval == NULL) { return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), .is_ephemeral = FALSE, }; } else { return (boxed_xval_t) { .xval = *pxval, .is_ephemeral = FALSE, }; } } else { sllmv_free(pmvkeys); return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), .is_ephemeral = TRUE, }; } } static void rxval_evaluator_from_indexed_local_variable_free(rxval_evaluator_t* prxval_evaluator) { rxval_evaluator_from_indexed_local_variable_state_t* pstate = prxval_evaluator->pvstate; for (sllve_t* pe = pstate->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* prval_evaluator = pe->pvvalue; prval_evaluator->pfree_func(prval_evaluator); } sllv_free(pstate->pkeylist_evaluators); free(pstate); free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_indexed_local_variable( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_from_indexed_local_variable_state_t* pstate = mlr_malloc_or_die( sizeof(rxval_evaluator_from_indexed_local_variable_state_t)); MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index == MD_UNUSED_INDEX); pstate->vardef_frame_relative_index = pnode->vardef_frame_relative_index; pstate->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( pnode, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pvstate = pstate; prxval_evaluator->pprocess_func = rxval_evaluator_from_indexed_local_variable_func; prxval_evaluator->pfree_func = rxval_evaluator_from_indexed_local_variable_free; return prxval_evaluator; } // ================================================================ typedef struct _rxval_evaluator_from_oosvar_keylist_state_t { sllv_t* pkeylist_evaluators; } rxval_evaluator_from_oosvar_keylist_state_t; static boxed_xval_t rxval_evaluator_from_oosvar_keylist_func(void* pvstate, variables_t* pvars) { rxval_evaluator_from_oosvar_keylist_state_t* pstate = pvstate; int all_non_null_or_error = TRUE; sllmv_t* pmvkeys = evaluate_list(pstate->pkeylist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { int lookup_error = FALSE; mlhmmv_xvalue_t* pxval = pmvkeys->phead == NULL ? &pvars->poosvars->root_xvalue : mlhmmv_level_look_up_and_ref_xvalue(pvars->poosvars->root_xvalue.pnext_level, pmvkeys, &lookup_error); sllmv_free(pmvkeys); if (pxval != NULL) { return (boxed_xval_t) { .xval = *pxval, .is_ephemeral = FALSE, }; } else { return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), .is_ephemeral = TRUE, }; } } else { sllmv_free(pmvkeys); return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), .is_ephemeral = TRUE, }; } } static void rxval_evaluator_from_oosvar_keylist_free(rxval_evaluator_t* prxval_evaluator) { rxval_evaluator_from_oosvar_keylist_state_t* pstate = prxval_evaluator->pvstate; for (sllve_t* pe = pstate->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { rval_evaluator_t* prval_evaluator = pe->pvvalue; prval_evaluator->pfree_func(prval_evaluator); } sllv_free(pstate->pkeylist_evaluators); free(pstate); free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_oosvar_keylist( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_from_oosvar_keylist_state_t* pstate = mlr_malloc_or_die( sizeof(rxval_evaluator_from_oosvar_keylist_state_t)); pstate->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( pnode, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pvstate = pstate; prxval_evaluator->pprocess_func = rxval_evaluator_from_oosvar_keylist_func; prxval_evaluator->pfree_func = rxval_evaluator_from_oosvar_keylist_free; return prxval_evaluator; } // ================================================================ static boxed_xval_t rxval_evaluator_from_full_oosvar_func(void* pvstate, variables_t* pvars) { return (boxed_xval_t) { .is_ephemeral = FALSE, .xval = pvars->poosvars->root_xvalue, }; } static void rxval_evaluator_from_full_oosvar_free(rxval_evaluator_t* prxval_evaluator) { free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_full_oosvar( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pprocess_func = rxval_evaluator_from_full_oosvar_func; prxval_evaluator->pfree_func = rxval_evaluator_from_full_oosvar_free; return prxval_evaluator; } // ================================================================ static boxed_xval_t rxval_evaluator_from_full_srec_func(void* pvstate, variables_t* pvars) { boxed_xval_t boxed_xval = box_ephemeral_xval(mlhmmv_xvalue_alloc_empty_map()); for (lrece_t* pe = pvars->pinrec->phead; pe != NULL; pe = pe->pnext) { // mlhmmv_level_put_terminal will copy mv keys and values so we needn't (and shouldn't) // duplicate them here. mv_t k = mv_from_string(pe->key, NO_FREE); mv_t* pomv = lhmsmv_get(pvars->ptyped_overlay, pe->key); if (pomv != NULL) { mlhmmv_level_put_terminal_singly_keyed(boxed_xval.xval.pnext_level, &k, pomv); } else { mv_t v = mv_from_string(pe->value, NO_FREE); // mlhmmv_level_put_terminal will copy mlhmmv_level_put_terminal_singly_keyed(boxed_xval.xval.pnext_level, &k, &v); } } return boxed_xval; } static void rxval_evaluator_from_full_srec_free(rxval_evaluator_t* prxval_evaluator) { free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_full_srec( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pprocess_func = rxval_evaluator_from_full_srec_func; prxval_evaluator->pfree_func = rxval_evaluator_from_full_srec_free; return prxval_evaluator; } // ================================================================ // xxx code dup w/ function_manager.c // ================================================================ typedef struct _rxval_evaluator_from_function_callsite_state_t { rval_evaluator_t* prval_evaluator; } rxval_evaluator_from_function_callsite_state_t; static boxed_xval_t rxval_evaluator_from_function_callsite_func(void* pvstate, variables_t* pvars) { rxval_evaluator_from_function_callsite_state_t* pstate = pvstate; rval_evaluator_t* prval_evaluator = pstate->prval_evaluator; mv_t val = prval_evaluator->pprocess_func(prval_evaluator->pvstate, pvars); return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(val), .is_ephemeral = FALSE, // verify reference semantics for RHS evaluators! }; } static void rxval_evaluator_from_function_callsite_free(rxval_evaluator_t* prxval_evaluator) { rxval_evaluator_from_function_callsite_state_t* pstate = prxval_evaluator->pvstate; pstate->prval_evaluator->pfree_func(pstate->prval_evaluator); free(pstate); free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_function_callsite( mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_from_function_callsite_state_t* pstate = mlr_malloc_or_die( sizeof(rxval_evaluator_from_function_callsite_state_t)); pstate->prval_evaluator = rval_evaluator_alloc_from_ast(pnode, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pvstate = pstate; prxval_evaluator->pprocess_func = rxval_evaluator_from_function_callsite_func; prxval_evaluator->pfree_func = rxval_evaluator_from_function_callsite_free; return prxval_evaluator; } // ================================================================ typedef struct _rxval_evaluator_wrapping_rval_state_t { rval_evaluator_t* prval_evaluator; } rxval_evaluator_wrapping_rval_state_t; static boxed_xval_t rxval_evaluator_wrapping_rval_func(void* pvstate, variables_t* pvars) { rxval_evaluator_wrapping_rval_state_t* pstate = pvstate; rval_evaluator_t* prval_evaluator = pstate->prval_evaluator; mv_t val = prval_evaluator->pprocess_func(prval_evaluator->pvstate, pvars); return (boxed_xval_t) { .xval = mlhmmv_xvalue_wrap_terminal(val), .is_ephemeral = TRUE, // verify reference semantics for RHS evaluators! }; } static void rxval_evaluator_wrapping_rval_free(rxval_evaluator_t* prxval_evaluator) { rxval_evaluator_wrapping_rval_state_t* pstate = prxval_evaluator->pvstate; pstate->prval_evaluator->pfree_func(pstate->prval_evaluator); free(pstate); free(prxval_evaluator); } rxval_evaluator_t* rxval_evaluator_alloc_wrapping_rval(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_wrapping_rval_state_t* pstate = mlr_malloc_or_die( sizeof(rxval_evaluator_wrapping_rval_state_t)); pstate->prval_evaluator = rval_evaluator_alloc_from_ast(pnode, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); prxval_evaluator->pvstate = pstate; prxval_evaluator->pprocess_func = rxval_evaluator_wrapping_rval_func; prxval_evaluator->pfree_func = rxval_evaluator_wrapping_rval_free; return prxval_evaluator; } miller-5.6.2/c/dsl/rxval_func_evaluators.c000066400000000000000000000460421354153536500206140ustar00rootroot00000000000000#include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mtrand.h" #include "mapping/mapper.h" #include "dsl/context_flags.h" #include "dsl/rxval_evaluators.h" // ---------------------------------------------------------------- typedef struct _rxval_evaluator_variadic_state_t { xv_variadic_func_t* pfunc; rxval_evaluator_t** pargs; boxed_xval_t* pbxvals; int nargs; } rxval_evaluator_variadic_state_t; static boxed_xval_t rxval_evaluator_variadic_func(void* pvstate, variables_t* pvars) { rxval_evaluator_variadic_state_t* pstate = pvstate; int nargs = pstate->nargs; for (int i = 0; i < nargs; i++) { rxval_evaluator_t* parg = pstate->pargs[i]; boxed_xval_t* pbxval = &pstate->pbxvals[i]; *pbxval = parg->pprocess_func(parg->pvstate, pvars); } boxed_xval_t bxrv = pstate->pfunc(pstate->pbxvals, nargs); for (int i = 0; i < nargs; i++) { boxed_xval_t* pbxval = &pstate->pbxvals[i]; if (pbxval->is_ephemeral) { mlhmmv_xvalue_free(&pbxval->xval); } } return bxrv; } static void rxval_evaluator_variadic_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_variadic_state_t* pstate = pxevaluator->pvstate; for (int i = 0; i < pstate->nargs; i++) pstate->pargs[i]->pfree_func(pstate->pargs[i]); free(pstate->pargs); for (int i = 0; i < pstate->nargs; i++) { if (pstate->pbxvals[i].is_ephemeral) { mlhmmv_xvalue_free(&pstate->pbxvals[i].xval); } } free(pstate->pbxvals); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_variadic_func( xv_variadic_func_t* pfunc, sllv_t* parg_nodes, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_variadic_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_variadic_state_t)); pstate->pfunc = pfunc; int nargs = parg_nodes->length; rxval_evaluator_t** pargs = mlr_malloc_or_die(nargs * sizeof(rxval_evaluator_t*)); int i = 0; for (sllve_t* pe = parg_nodes->phead; pe != NULL; pe = pe->pnext, i++) { mlr_dsl_ast_node_t* pnode = pe->pvvalue; pargs[i] = rxval_evaluator_alloc_from_ast(pnode, pfmgr, type_inferencing, context_flags); } pstate->pargs = pargs; pstate->nargs = nargs; pstate->pbxvals = mlr_malloc_or_die(nargs * sizeof(boxed_xval_t)); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_variadic_func; pxevaluator->pfree_func = rxval_evaluator_variadic_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_x_state_t { xv_unary_func_t* pfunc; rxval_evaluator_t* parg1; } rxval_evaluator_x_x_state_t; static boxed_xval_t rxval_evaluator_x_x_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_x_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t bxrv = pstate->pfunc(&bxval1); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } return bxrv; } static void rxval_evaluator_x_x_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_x_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_x_func( xv_unary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_x_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_x_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_x_func; pxevaluator->pfree_func = rxval_evaluator_x_x_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_m_state_t { xv_unary_func_t* pfunc; rxval_evaluator_t* parg1; } rxval_evaluator_x_m_state_t; static boxed_xval_t rxval_evaluator_x_m_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_m_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); if (bxval1.xval.is_terminal) { return box_ephemeral_val(mv_error()); } boxed_xval_t bxrv = pstate->pfunc(&bxval1); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } return bxrv; } static void rxval_evaluator_x_m_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_m_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_m_func( xv_unary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_m_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_m_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_m_func; pxevaluator->pfree_func = rxval_evaluator_x_m_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_mx_state_t { xv_binary_func_t* pfunc; rxval_evaluator_t* parg1; rxval_evaluator_t* parg2; } rxval_evaluator_x_mx_state_t; static boxed_xval_t rxval_evaluator_x_mx_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_mx_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); if (bxval1.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!bxval2.xval.is_terminal) { return box_ephemeral_val(mv_error()); } boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } if (bxval2.is_ephemeral) { mlhmmv_xvalue_free(&bxval2.xval); } return bxrv; } static void rxval_evaluator_x_mx_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_mx_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_mx_func( xv_binary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_mx_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_mx_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_mx_func; pxevaluator->pfree_func = rxval_evaluator_x_mx_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_ms_state_t { xv_binary_func_t* pfunc; rxval_evaluator_t* parg1; rxval_evaluator_t* parg2; } rxval_evaluator_x_ms_state_t; static boxed_xval_t rxval_evaluator_x_ms_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_ms_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); if (bxval1.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!bxval2.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { mv_free(&bxval2.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } if (bxval2.is_ephemeral) { mlhmmv_xvalue_free(&bxval2.xval); } return bxrv; } static void rxval_evaluator_x_ms_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_ms_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_ms_func( xv_binary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_ms_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_ms_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_ms_func; pxevaluator->pfree_func = rxval_evaluator_x_ms_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_ss_state_t { xv_binary_func_t* pfunc; rxval_evaluator_t* parg1; rxval_evaluator_t* parg2; } rxval_evaluator_x_ss_state_t; static boxed_xval_t rxval_evaluator_x_ss_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_ss_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); if (!bxval1.xval.is_terminal) { mv_free(&bxval1.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval1.xval.terminal_mlrval)) { mv_free(&bxval1.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } if (!bxval2.xval.is_terminal) { mv_free(&bxval2.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { mv_free(&bxval2.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } if (bxval2.is_ephemeral) { mlhmmv_xvalue_free(&bxval2.xval); } return bxrv; } static void rxval_evaluator_x_ss_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_ss_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_ss_func( xv_binary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_ss_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_ss_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_ss_func; pxevaluator->pfree_func = rxval_evaluator_x_ss_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_mss_state_t { xv_ternary_func_t* pfunc; rxval_evaluator_t* parg1; rxval_evaluator_t* parg2; rxval_evaluator_t* parg3; } rxval_evaluator_x_mss_state_t; static boxed_xval_t rxval_evaluator_x_mss_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_mss_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); boxed_xval_t bxval3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); if (bxval1.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!bxval2.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { mv_free(&bxval2.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } if (!bxval3.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval3.xval.terminal_mlrval)) { mv_free(&bxval3.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2, &bxval3); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } if (bxval2.is_ephemeral) { mlhmmv_xvalue_free(&bxval2.xval); } return bxrv; } static void rxval_evaluator_x_mss_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_mss_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_mss_func( xv_ternary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, mlr_dsl_ast_node_t* parg3_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_mss_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_mss_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); pstate->parg3 = rxval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_mss_func; pxevaluator->pfree_func = rxval_evaluator_x_mss_free; return pxevaluator; } // ---------------------------------------------------------------- typedef struct _rxval_evaluator_x_sss_state_t { xv_ternary_func_t* pfunc; rxval_evaluator_t* parg1; rxval_evaluator_t* parg2; rxval_evaluator_t* parg3; } rxval_evaluator_x_sss_state_t; static boxed_xval_t rxval_evaluator_x_sss_func(void* pvstate, variables_t* pvars) { rxval_evaluator_x_sss_state_t* pstate = pvstate; boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); boxed_xval_t bxval3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); if (!bxval1.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval1.xval.terminal_mlrval)) { mv_free(&bxval1.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } if (!bxval2.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { mv_free(&bxval2.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } if (!bxval3.xval.is_terminal) { return box_ephemeral_val(mv_error()); } if (!mv_is_string_or_empty(&bxval3.xval.terminal_mlrval)) { mv_free(&bxval3.xval.terminal_mlrval); return box_ephemeral_val(mv_error()); } boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2, &bxval3); if (bxval1.is_ephemeral) { mlhmmv_xvalue_free(&bxval1.xval); } if (bxval2.is_ephemeral) { mlhmmv_xvalue_free(&bxval2.xval); } if (bxval3.is_ephemeral) { mlhmmv_xvalue_free(&bxval3.xval); } return bxrv; } static void rxval_evaluator_x_sss_free(rxval_evaluator_t* pxevaluator) { rxval_evaluator_x_sss_state_t* pstate = pxevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); pstate->parg2->pfree_func(pstate->parg2); pstate->parg3->pfree_func(pstate->parg3); free(pstate); free(pxevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_x_sss_func( xv_ternary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, mlr_dsl_ast_node_t* parg2_node, mlr_dsl_ast_node_t* parg3_node, fmgr_t* pfmgr, int type_inferencing, int context_flags) { rxval_evaluator_x_sss_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_sss_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); pstate->parg3 = rxval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pxevaluator->pvstate = pstate; pxevaluator->pprocess_func = rxval_evaluator_x_sss_func; pxevaluator->pfree_func = rxval_evaluator_x_sss_free; return pxevaluator; } // ---------------------------------------------------------------- // Does type-check assertion on the argument and returns it unmodified if the // test passes. Else throws an error. typedef struct _rxval_evaluator_A_x_state_t { xv_unary_func_t* pfunc; rxval_evaluator_t* parg1; char* desc; } rxval_evaluator_A_x_state_t; static boxed_xval_t rxval_evaluator_A_x_func(void* pvstate, variables_t* pvars) { rxval_evaluator_A_x_state_t* pstate = pvstate; boxed_xval_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); boxed_xval_t ok = pstate->pfunc(&val1); if (!ok.xval.terminal_mlrval.u.boolv) { fprintf(stderr, "%s: %s type-assertion failed at NR=%lld FNR=%lld FILENAME=%s\n", MLR_GLOBALS.bargv0, pstate->desc, pvars->pctx->nr, pvars->pctx->fnr, pvars->pctx->filename); exit(1); } return val1; } static void rxval_evaluator_A_x_free(rxval_evaluator_t* pevaluator) { rxval_evaluator_A_x_state_t* pstate = pevaluator->pvstate; pstate->parg1->pfree_func(pstate->parg1); free(pstate->desc); free(pstate); free(pevaluator); } rxval_evaluator_t* rxval_evaluator_alloc_from_A_x_func( xv_unary_func_t* pfunc, mlr_dsl_ast_node_t* parg1_node, fmgr_t* pfmgr, int type_inferencing, int context_flags, char* desc) { rxval_evaluator_A_x_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_A_x_state_t)); pstate->pfunc = pfunc; pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pstate->desc = mlr_strdup_or_die(desc); rxval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); pevaluator->pvstate = pstate; pevaluator->pprocess_func = rxval_evaluator_A_x_func; pevaluator->pfree_func = rxval_evaluator_A_x_free; return pevaluator; } miller-5.6.2/c/dsl/type_inference.h000066400000000000000000000011071354153536500171750ustar00rootroot00000000000000#ifndef TYPE_INFERENCE_H #define TYPE_INFERENCE_H // Intentionally not an enum #define TYPE_INFER_STRING_FLOAT_INT 0xce08 #define TYPE_INFER_STRING_FLOAT 0xce09 #define TYPE_INFER_STRING_ONLY 0xce0a static inline char* type_inferencing_to_string(int ti) { switch(ti) { case TYPE_INFER_STRING_FLOAT_INT: return "TYPE_INFER_STRING_FLOAT_INT"; break; case TYPE_INFER_STRING_FLOAT: return "TYPE_INFER_STRING_FLOAT"; break; case TYPE_INFER_STRING_ONLY: return "TYPE_INFER_STRING_ONLY"; break; default: return "???"; break; } } #endif // TYPE_INFERENCE_H miller-5.6.2/c/dsl/variables.h000066400000000000000000000041241354153536500161500ustar00rootroot00000000000000// ================================================================ // Record state is in multiple parts: // // * The lrec is read for input fields; output fields are written to the typed-overlay map. It is up to the // caller to format the typed-overlay field values as strings and write them into the lrec. // // * Typed-overlay values are read in favor to the lrec: e.g. if the lrec has "x"=>"abc" and the typed overlay // has "x"=>3.7 then the evaluators will be presented with 3.7 for the value of the field named "x". // // * The =~ and !=~ operators populate the regex-captures array from \1, \2, etc. in the regex; the from-literal // evaluator interpolates those into output. Example: // // o echo x=abc_def | mlr put '$name =~ "(.*)_(.*)"; $left = "\1"; $right = "\2"' // // o The =~ resizes the regex-captures array to length 3 (1-up length 2), then copies "abc" to index 1 // and "def" to index 2. // // o The second expression writes "left"=>"abc" to the typed-overlay map; the third expression writes "right"=>"def" // to the typed-overlay map. The \1 and \2 get "abc" and "def" interpolated from the regex-captures array. // // o It is up to mapper_put to write "left"=>"abc" and "right"=>"def" into the lrec. // // See also the comments above mapper_put.c for more information about left-hand sides (lvals). // ================================================================ #ifndef VARIABLES_H #define VARIABLES_H #include "containers/lrec.h" #include "containers/lhmsmv.h" #include "lib/string_array.h" #include "containers/mlhmmv.h" #include "lib/context.h" #include "containers/local_stack.h" #include "dsl/return_state.h" // Context for DSL evaluation typedef struct _variables_t { lrec_t* pinrec; lhmsmv_t* ptyped_overlay; string_array_t** ppregex_captures; mlhmmv_root_t* poosvars; context_t* pctx; local_stack_t* plocal_stack; loop_stack_t* ploop_stack; return_state_t return_state; int trace_execution; int json_quote_int_keys; int json_quote_non_string_values; } variables_t; #endif // VARIABLES_H miller-5.6.2/c/experimental/000077500000000000000000000000001354153536500157415ustar00rootroot00000000000000miller-5.6.2/c/experimental/Makefile.am000066400000000000000000000004011354153536500177700ustar00rootroot00000000000000# TODO: replace the interesting content with unit tests; jettison the rest noinst_PROGRAMS= getl AM_CFLAGS= -std=gnu99 AM_CPPFLAGS= -I${srcdir}/../ getl_SOURCES= getlines.c getl_LDADD= ../lib/libmlr.la ../input/libinput.la ../containers/libcontainers.la miller-5.6.2/c/experimental/Makefile.in000066400000000000000000000423041354153536500200110ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = getl$(EXEEXT) subdir = c/experimental ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_getl_OBJECTS = getlines.$(OBJEXT) getl_OBJECTS = $(am_getl_OBJECTS) getl_DEPENDENCIES = ../lib/libmlr.la ../input/libinput.la \ ../containers/libcontainers.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(getl_SOURCES) DIST_SOURCES = $(getl_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = -std=gnu99 AM_CPPFLAGS = -I${srcdir}/../ getl_SOURCES = getlines.c getl_LDADD = ../lib/libmlr.la ../input/libinput.la ../containers/libcontainers.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/experimental/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/experimental/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list getl$(EXEEXT): $(getl_OBJECTS) $(getl_DEPENDENCIES) $(EXTRA_getl_DEPENDENCIES) @rm -f getl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(getl_OBJECTS) $(getl_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getlines.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/experimental/bld000066400000000000000000000011141354153536500164220ustar00rootroot00000000000000 754 a.out p 2017-04-09T00:51:09.9Z %Y-%m-%dT%H:%M:%SZ 755 fg 756 gcc -I.. strx.c ../lib/mlrutil.c ../lib/mlr_globals.c ../lib/string_builder.c ../lib/mtrand.c ../lib/mlr_arch.c 757 a.out p 2017-04-09T00:51:09.9Z %Y-%m-%dT%H:%M:%SZ 758 fg 759 gcc -I.. strx.c ../lib/mlrutil.c ../lib/mlr_globals.c ../lib/string_builder.c ../lib/mtrand.c ../lib/mlr_arch.c 760 a.out p 2017-04-09T00:51:09.9Z %Y-%m-%dT%H:%M:%SZ 761 fg 762 gcc -I.. strx.c ../lib/mlrutil.c ../lib/mlr_globals.c ../lib/string_builder.c ../lib/mtrand.c ../lib/mlr_arch.c 763 h > bld miller-5.6.2/c/experimental/coprog.c000066400000000000000000000017361354153536500174050ustar00rootroot00000000000000#include #include int main(int argc, char** argv) { char* cmd = argv[1]; FILE* pfp = popen(cmd, "r+"); if (pfp == NULL) { perror("popen"); exit(1); } if (setlinebuf(pfp) < 0) { perror("setlinebuf"); exit(1); } char* line1 = NULL; size_t linecap1 = 0; ssize_t linelen1; while ((linelen1 = getline(&line1, &linecap1, stdin)) > 0) { if (linelen1 > 0 && line1[linelen1-1] == '\n') { line1[linelen1-1] = 0; linelen1--; } printf("ILINE: %s\n", line1); int rc2 = fprintf(pfp, "%s\n", line1); if (rc2 < 0) { perror("fprintf"); exit(1); } if (fflush(pfp) < 0) { perror("fflush"); exit(1); } char* line2 = NULL; size_t linecap2 = 0; ssize_t linelen2; linelen2 = getline(&line2, &linecap2, pfp); if (linelen2 <= 0) { perror("pipe read"); exit(1); } if (linelen2 > 0 && line2[linelen2-1] == '\n') { line2[linelen2-1] = 0; linelen2--; } printf("PLINE: %s\n", line2); } fclose(pfp); return 0; } miller-5.6.2/c/experimental/fltres.c000066400000000000000000000006231354153536500174050ustar00rootroot00000000000000#include static void show(long long i) { double d = (double) i; long long j = (long long) d; printf("%016llx %lld %lf %016llx\n", i, i, d, j); } int main() { show(0x7ffffffffffff9ff); show(0x7ffffffffffffa00); show(0x7ffffffffffffbff); show(0x7ffffffffffffc00); show(0x7ffffffffffffdff); show(0x7ffffffffffffe00); show(0x7ffffffffffffffe); show(0x7fffffffffffffff); return 0; } miller-5.6.2/c/experimental/getlines.c000066400000000000000000000363251354153536500177300ustar00rootroot00000000000000#include #include #include "lib/mlr_globals.h" #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlrdatetime.h" #include "input/file_reader_stdio.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" #include "lib/string_builder.h" #include "input/byte_readers.h" #include "input/line_readers.h" #include "input/peek_file_reader.h" #include "containers/parse_trie.h" #define PEEK_BUF_LEN 32 #define STRING_BUILDER_INIT_SIZE 1024 #define FIXED_LINE_LEN 1024 // ================================================================ static FILE* fopen_or_die(char* filename) { FILE* fp = fopen(filename, "r"); if (fp == NULL) { perror("fopen"); fprintf(stderr, "Couldn't open \"%s\" for read; exiting.\n", filename); exit(1); } return fp; } // ================================================================ static int read_file_mlr_alloc_read_line_single_delimiter_no_autodetect(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); int bc = 0; size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; while (1) { char* line = mlr_alloc_read_line_single_delimiter( fp, '\n', &line_length, FALSE, NULL); if (line == NULL) break; bc += strlen(line); if (do_write) { fputs(line, stdout); fputc('\n', stdout); } free(line); } fclose(fp); return bc; } // ================================================================ static int read_file_mlr_alloc_read_line_single_delimiter_with_autodetect(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); int bc = 0; size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; context_t ctx; context_init_from_first_file_name(&ctx, "fake-file-name"); while (1) { char* line = mlr_alloc_read_line_single_delimiter( fp, '\n', &line_length, TRUE, &ctx); if (line == NULL) break; bc += strlen(line); if (do_write) { fputs(line, stdout); fputc('\n', stdout); } free(line); } fclose(fp); return bc; } // ================================================================ static int read_file_mlr_alloc_read_line_multiple_delimiter(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); int bc = 0; size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; while (1) { char* line = mlr_alloc_read_line_multiple_delimiter(fp, "\n", 1, &line_length); if (line == NULL) break; bc += strlen(line); if (do_write) { fputs(line, stdout); fputc('\n', stdout); } free(line); } fclose(fp); return bc; } // ================================================================ static char* read_line_fgetc(FILE* fp, char* irs) { char* line = mlr_malloc_or_die(FIXED_LINE_LEN); char* p = line; while (TRUE) { int c = fgetc(fp); if (c == EOF) { if (p == line) { return NULL; } else { *(p++) = 0; return line; } } else if (c == irs[0]) { *(p++) = 0; return line; } else { *(p++) = c; } } } static int read_file_fgetc_fixed_len(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); char* irs = "\n"; int bc = 0; while (TRUE) { char* line = read_line_fgetc(fp, irs); if (line == NULL) break; if (do_write) { fputs(line, stdout); fputc('\n', stdout); } bc += strlen(line); free(line); } fclose(fp); return bc; } // ================================================================ static char* read_line_getc_unlocked(FILE* fp, char* irs) { char* line = mlr_malloc_or_die(FIXED_LINE_LEN); char* p = line; while (TRUE) { int i = mlr_arch_getc(fp); char c = i; if (i == EOF) { if (p == line) { return NULL; } else { *(p++) = 0; return line; } } else if (c == irs[0]) { *(p++) = 0; return line; } else { *(p++) = c; } } } static int read_file_getc_unlocked_fixed_len(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); char* irs = "\n"; int bc = 0; while (TRUE) { char* line = read_line_getc_unlocked(fp, irs); if (line == NULL) break; if (do_write) { fputs(line, stdout); fputc('\n', stdout); } bc += strlen(line); free(line); } fclose(fp); return bc; } // ================================================================ static char* read_line_getc_unlocked_psb(FILE* fp, string_builder_t* psb, char* irs) { while (TRUE) { int c = mlr_arch_getc(fp); if (c == EOF) { if (sb_is_empty(psb)) return NULL; else return sb_finish(psb); } else if (c == irs[0]) { return sb_finish(psb); } else { sb_append_char(psb, c); } } } static int read_file_getc_unlocked_psb(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); char* irs = "\n"; int bc = 0; while (TRUE) { char* line = read_line_getc_unlocked_psb(fp, psb, irs); if (line == NULL) break; if (do_write) { fputs(line, stdout); fputc('\n', stdout); } bc += strlen(line); free(line); } sb_free(psb); fclose(fp); return bc; } // ================================================================ static char* read_line_fgetc_psb(FILE* fp, string_builder_t* psb, char* irs) { while (TRUE) { int c = fgetc(fp); if (c == EOF) { if (sb_is_empty(psb)) return NULL; else return sb_finish(psb); } else if (c == irs[0]) { return sb_finish(psb); } else { sb_append_char(psb, c); } } } static int read_file_fgetc_psb(char* filename, int do_write) { FILE* fp = fopen_or_die(filename); string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); char* irs = "\n"; int bc = 0; while (TRUE) { char* line = read_line_fgetc_psb(fp, psb, irs); if (line == NULL) break; if (do_write) { fputs(line, stdout); fputc('\n', stdout); } bc += strlen(line); free(line); } sb_free(psb); fclose(fp); return bc; } // ================================================================ static char* read_line_mmap_psb(file_reader_mmap_state_t* ph, string_builder_t* psb, char* irs) { char *p = ph->sol; while (TRUE) { if (p == ph->eof) { ph->sol = p; if (sb_is_empty(psb)) return NULL; else return sb_finish(psb); } else if (*p == irs[0]) { ph->sol = p+1; return sb_finish(psb); } else { sb_append_char(psb, *p); p++; } } } static int read_file_mmap_psb(char* filename, int do_write) { file_reader_mmap_state_t* ph = file_reader_mmap_open(NULL, filename); string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); char* irs = "\n"; int bc = 0; while (TRUE) { char* line = read_line_mmap_psb(ph, psb, irs); if (line == NULL) break; if (do_write) { fputs(line, stdout); fputc('\n', stdout); } bc += strlen(line); } sb_free(psb); file_reader_mmap_close(ph, NULL); return bc; } // ================================================================ #define IRS_TOKEN 11 #define EOF_TOKEN 22 #define IRSEOF_TOKEN 33 static char* read_line_pfr_psb(peek_file_reader_t* pfr, string_builder_t* psb, parse_trie_t* ptrie) { int rc, stridx, matchlen; while (TRUE) { pfr_buffer_by(pfr, ptrie->maxlen); rc = parse_trie_ring_match(ptrie, pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, &stridx, &matchlen); if (rc) { pfr_advance_by(pfr, matchlen); switch(stridx) { case IRS_TOKEN: return sb_finish(psb); break; case IRSEOF_TOKEN: return sb_finish(psb); break; case EOF_TOKEN: return NULL; break; } } else { sb_append_char(psb, pfr_read_char(pfr)); } } } static int read_file_pfr_psb(char* filename, int do_write) { byte_reader_t* pbr = stdio_byte_reader_alloc(); string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); pbr->popen_func(pbr, NULL, filename); peek_file_reader_t* pfr = pfr_alloc(pbr, PEEK_BUF_LEN); parse_trie_t* ptrie = parse_trie_alloc(); parse_trie_add_string(ptrie, "\n", IRS_TOKEN); parse_trie_add_string(ptrie, "\xff", EOF_TOKEN); parse_trie_add_string(ptrie, "\n\xff", IRSEOF_TOKEN); int bc = 0; while (TRUE) { char* line = read_line_pfr_psb(pfr, psb, ptrie); if (line == NULL) break; if (do_write) { fputs(line, stdout); fputc('\n', stdout); } bc += strlen(line); free(line); } sb_free(psb); pbr->pclose_func(pbr, NULL); return bc; } // ================================================================ static void usage(char* argv0) { fprintf(stderr, "Usage: %s {filename}\n", argv0); exit(1); } int main(int argc, char** argv) { int nreps = 1; int do_write = 0; if (argc != 2 && argc != 3 && argc != 4) usage(argv[0]); char* filename = argv[1]; if (argc >= 3) (void)sscanf(argv[2], "%d", &nreps); if (argc >= 4) (void)sscanf(argv[3], "%d", &do_write); double s, e, t; int bc; for (int i = 0; i < nreps; i++) { s = get_systime(); bc = read_file_mlr_alloc_read_line_single_delimiter_no_autodetect(filename, do_write); e = get_systime(); t = e - s; printf("type=single_delim_no_auto,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_mlr_alloc_read_line_single_delimiter_with_autodetect(filename, do_write); e = get_systime(); t = e - s; printf("type=single_delim_with_auto,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_mlr_alloc_read_line_multiple_delimiter(filename, do_write); e = get_systime(); t = e - s; printf("type=multiple_delim,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_fgetc_fixed_len(filename, do_write); e = get_systime(); t = e - s; printf("type=fgetc_fixed_len,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_getc_unlocked_fixed_len(filename, do_write); e = get_systime(); t = e - s; printf("type=getc_unlocked_fixed_len,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_getc_unlocked_psb(filename, do_write); e = get_systime(); t = e - s; printf("type=getc_unlocked_psb,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_fgetc_psb(filename, do_write); e = get_systime(); t = e - s; printf("type=fgetc_psb,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_mmap_psb(filename, do_write); e = get_systime(); t = e - s; printf("type=mmap_psb,t=%.6lf,n=%d\n", t, bc); fflush(stdout); s = get_systime(); bc = read_file_pfr_psb(filename, do_write); e = get_systime(); t = e - s; printf("type=pfr_psb,t=%.6lf,n=%d\n", t, bc); fflush(stdout); } return 0; } // ================================================================ // $ ./getl ../data/big.csv 5|tee x // $ mlr --opprint cat then sort -n t x // type t n type t n // getdelim 0.118618 55888899 getdelim 0.118057 55888899 // getdelim 0.121467 55888899 getdelim 0.118727 55888899 // getdelim 0.121943 55888899 getdelim 0.119609 55888899 // getdelim 0.124756 55888899 getdelim 0.122506 55888899 // getdelim 0.127039 55888899 getdelim 0.123099 55888899 // getc_unlocked_fixed_len 0.167563 55888899 getc_unlocked_fixed_len 0.168109 55888899 // getc_unlocked_fixed_len 0.167803 55888899 getc_unlocked_fixed_len 0.168392 55888899 // getc_unlocked_fixed_len 0.168808 55888899 getc_unlocked_fixed_len 0.169387 55888899 // getc_unlocked_fixed_len 0.168980 55888899 getc_unlocked_fixed_len 0.178484 55888899 // getc_unlocked_fixed_len 0.176187 55888899 getc_unlocked_fixed_len 0.182793 55888899 // getc_unlocked_psb 0.238986 55888899 getc_unlocked_psb 0.293240 55888899 // getc_unlocked_psb 0.241325 55888899 getc_unlocked_psb 0.298449 55888899 // getc_unlocked_psb 0.246466 55888899 getc_unlocked_psb 0.298508 55888899 // getc_unlocked_psb 0.247592 55888899 getc_unlocked_psb 0.301125 55888899 // getc_unlocked_psb 0.248112 55888899 mmap_psb 0.313239 55888899 // mmap_psb 0.250021 55888899 mmap_psb 0.315061 55888899 // mmap_psb 0.254118 55888899 mmap_psb 0.315517 55888899 // mmap_psb 0.257428 55888899 mmap_psb 0.316790 55888899 // mmap_psb 0.261807 55888899 mmap_psb 0.320654 55888899 // mmap_psb 0.264367 55888899 getc_unlocked_psb 0.326494 55888899 // pfr_psb 0.760035 55888900 pfr_psb 0.417141 55888899 // pfr_psb 0.765121 55888900 pfr_psb 0.439269 55888899 // pfr_psb 0.768731 55888900 pfr_psb 0.439342 55888899 // pfr_psb 0.771937 55888900 pfr_psb 0.447218 55888899 // pfr_psb 0.780460 55888900 pfr_psb 0.453839 55888899 // fgetc_fixed_len 2.516459 55888899 fgetc_psb 2.476543 55888899 // fgetc_fixed_len 2.522877 55888899 fgetc_psb 2.477130 55888899 // fgetc_fixed_len 2.587373 55888899 fgetc_psb 2.484007 55888899 // fgetc_psb 2.590090 55888899 fgetc_psb 2.484495 55888899 // fgetc_psb 2.590536 55888899 fgetc_fixed_len 2.493730 55888899 // fgetc_fixed_len 2.608356 55888899 fgetc_fixed_len 2.528333 55888899 // fgetc_psb 2.623930 55888899 fgetc_fixed_len 2.533535 55888899 // fgetc_fixed_len 2.624310 55888899 fgetc_fixed_len 2.555377 55888899 // fgetc_psb 2.637269 55888899 fgetc_fixed_len 2.736391 55888899 // fgetc_psb 2.743828 55888899 // $ mlr --opprint cat then stats1 -a min,max,stddev,mean -f t -g type then sort -n t_mean x // type t_min t_max t_stddev t_mean // getdelim 0.118618 0.127039 0.003232 0.122765 // getc_unlocked_fixed_len 0.167563 0.176187 0.003585 0.169868 // getc_unlocked_psb 0.238986 0.248112 0.004091 0.244496 // mmap_psb 0.250021 0.264367 0.005768 0.257548 // pfr_psb 0.760035 0.780460 0.007667 0.769257 // fgetc_fixed_len 2.516459 2.624310 0.049478 2.571875 // fgetc_psb 2.590090 2.680364 0.037489 2.624438 // type t_min t_max t_stddev t_mean // getdelim 0.118057 0.123099 0.002271 0.120400 // getc_unlocked_fixed_len 0.168109 0.182793 0.006768 0.173433 // getc_unlocked_psb 0.293240 0.326494 0.013134 0.303563 // mmap_psb 0.313239 0.320654 0.002771 0.316252 // pfr_psb 0.417141 0.453839 0.013830 0.439362 // fgetc_psb 2.476543 2.743828 0.117803 2.533201 // fgetc_fixed_len 2.493730 2.736391 0.095892 2.569473 // ---------------------------------------------------------------- // Analysis: // * getdelim is good; fatal flaw is single-char line-terminator // o maybe i could cobble up a line-stacked iterator which // consumes usually 1, sometimes (double-quote case) multiple // delim lines to make up the data for a given record // * as before, maybe a 5-10% improvement mmap over stdio. // worth doing as a second-level refinement. // * getc_unlocked vs. fgetc, no-brainer for this single-threaded code. // * string-builder is a little than fixed-length malloc, as expected // -- it's adding value. // ! peek_file_reader is where the optimization opportunities are miller-5.6.2/c/experimental/json_vg_mem.c000066400000000000000000000056111354153536500204130ustar00rootroot00000000000000// ================================================================ // For use with valgrind --leak-check=full // ================================================================ #include #include #include #include // ---------------------------------------------------------------- static void parse(char* pinput) { json_char* json_input = (json_char*)pinput; json_value_t* parsed_top_level_json; json_char error_buf[JSON_ERROR_MAX]; json_char* item_start = json_input; size_t length = strlen(pinput); while (TRUE) { parsed_top_level_json = json_parse(item_start, length, error_buf, &item_start); if (parsed_top_level_json == NULL) { fprintf(stderr, "Unable to parse JSON data: %s\n", error_buf); exit(1); } printf("\n"); printf("----------------------------------------------------------------\n"); printf("INPUT:\n"); printf("%s\n", pinput); printf("\n"); printf("OUTPUT:\n"); json_print_recursive(parsed_top_level_json); json_free_value(parsed_top_level_json); if (item_start == NULL) break; if (*item_start == 0) break; length -= (item_start - json_input); json_input = item_start; } } // ---------------------------------------------------------------- int main(int argc, char** argv) { parse("3"); parse("[3]"); parse("[[3]]"); parse("{\"a\":3}"); parse("[{\"a\":3},{\"b\":4}]"); parse( "{\n" " \"z\": {\n" " \"pan\": {\n" " \"1\": 0.726803,\n" " \"0\": 0.952618\n" " },\n" " \"eks\": {\n" " \"0\": 0.134189,\n" " \"1\": 0.187885\n" " },\n" " \"wye\": {\n" " \"1\": 0.863624\n" " },\n" " \"zee\": {\n" " \"0\": 0.976181\n" " },\n" " \"hat\": {\n" " \"1\": 0.749551\n" " }\n" " }\n" "}\n" ); parse( "[\n" "{ \"a\": \"pan\", \"b\": \"pan\", \"i\": 1, \"x\": 0.3467901443380824, \"y\": 0.7268028627434533 }\n" ",{ \"a\": \"eks\", \"b\": \"pan\", \"i\": 2, \"x\": 0.7586799647899636, \"y\": 0.5221511083334797 }\n" ",{ \"a\": \"wye\", \"b\": \"wye\", \"i\": 3, \"x\": 0.20460330576630303, \"y\": 0.33831852551664776 }\n" ",{ \"a\": \"eks\", \"b\": \"wye\", \"i\": 4, \"x\": 0.38139939387114097, \"y\": 0.13418874328430463 }\n" ",{ \"a\": \"wye\", \"b\": \"pan\", \"i\": 5, \"x\": 0.5732889198020006, \"y\": 0.8636244699032729 }\n" ",{ \"a\": \"zee\", \"b\": \"pan\", \"i\": 6, \"x\": 0.5271261600918548, \"y\": 0.49322128674835697 }\n" ",{ \"a\": \"eks\", \"b\": \"zee\", \"i\": 7, \"x\": 0.6117840605678454, \"y\": 0.1878849191181694 }\n" ",{ \"a\": \"zee\", \"b\": \"wye\", \"i\": 8, \"x\": 0.5985540091064224, \"y\": 0.976181385699006 }\n" ",{ \"a\": \"hat\", \"b\": \"wye\", \"i\": 9, \"x\": 0.03144187646093577, \"y\": 0.7495507603507059 }\n" ",{ \"a\": \"pan\", \"b\": \"wye\", \"i\": 10, \"x\": 0.5026260055412137, \"y\": 0.9526183602969864 }\n" "]\n" ); return 0; } miller-5.6.2/c/experimental/regexes.c000066400000000000000000000043311354153536500175500ustar00rootroot00000000000000#include #include #include #include #include // Example: // $ a.out 'a.*b(cd).*(f).[hz](i)' 'abcdefghij' // rc=0 // pmatch[0].rm_so= 0 pmatch[0].rm_eo= 9 // pmatch[1].rm_so= 2 pmatch[1].rm_eo= 4 // pmatch[2].rm_so= 5 pmatch[2].rm_eo= 6 // pmatch[3].rm_so= 8 pmatch[3].rm_eo= 9 // pmatch[4].rm_so= -1 pmatch[4].rm_eo= -1 // pmatch[5].rm_so= -1 pmatch[5].rm_eo= -1 // pmatch[6].rm_so= -1 pmatch[6].rm_eo= -1 // pmatch[7].rm_so= -1 pmatch[7].rm_eo= -1 // pmatch[8].rm_so= -1 pmatch[8].rm_eo= -1 // pmatch[9].rm_so= -1 pmatch[9].rm_eo= -1 static void usage(char* argv0, FILE* o, int exit_code) { fprintf(o, "Usage: %s {string} {regex}\n", argv0); exit(exit_code); } int main(int argc, char** argv) { if (argc >= 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { usage(argv[0], stdout, 0); } if (argc != 3) { usage(argv[0], stderr, 1); } regex_t reg; char* sstr = argv[1]; char* sregex = argv[2]; int cflags = REG_EXTENDED; const size_t nmatchmax = 10; regmatch_t pmatch[nmatchmax]; int eflags = 0; int rc; rc = regcomp(®, sregex, cflags); if (rc != 0) { size_t nbytes = regerror(rc, ®, NULL, 0); char* errbuf = malloc(nbytes); (void)regerror(rc, ®, errbuf, nbytes); printf("regcomp failure: %s\n", errbuf); exit(1); } rc = regexec(®, sstr, nmatchmax, pmatch, eflags); printf("rc=%d\n", rc); int len = strlen(sstr); if (rc == 0) { for (int i = 0; i < nmatchmax; i++) { if (pmatch[i].rm_so == -1) break; printf("pmatch[%i].rm_so=%4lld pmatch[%d].rm_eo=%4lld\n", i, (long long)pmatch[i].rm_so, i, (long long)pmatch[i].rm_eo); printf(" "); for (int j = 0; j < len; j++) { fputc(sstr[j], stdout); } printf("\n"); printf(" "); for (int j = 0; j < len; j++) { if (j >= pmatch[i].rm_so && j < pmatch[i].rm_eo) fputc('^', stdout); else fputc('.', stdout); } printf("\n"); } } else if (rc == REG_NOMATCH) { printf("no match\n"); } else { size_t nbytes = regerror(rc, ®, NULL, 0); char* errbuf = malloc(nbytes); (void)regerror(rc, ®, errbuf, nbytes); printf("regexec failure: %s\n", errbuf); exit(1); } regfree(®); return 0; } miller-5.6.2/c/experimental/strx.c000066400000000000000000000202371354153536500171110ustar00rootroot00000000000000#include #include #include #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlr_arch.h" #include "lib/string_builder.h" #define MYBUFLEN 256 // ---------------------------------------------------------------- static int f(char* float_string, char* format_string) { double fseconds; if (sscanf(float_string, "%lf", &fseconds) != 1) { fprintf(stderr, "!dbl b04k!\n"); return 1; } time_t iseconds = (time_t) fseconds; double fracsec = fseconds - iseconds; struct tm tm = *gmtime(&iseconds); // xxx see if %nS is a substring // if not then do it like always (w/ malloc) // if so: // * copy subformats left & right of the %nS // * strftime each // * myself format the middle // * sb_append char* middle_format = NULL; char* right_subformat = NULL; for (char* p = format_string; *p; p++) { if (p[0] == '%' && p[1] >= '1' && p[1] <= '9' && p[2] == 'S') { middle_format = p; right_subformat = &p[3]; break; } } if (middle_format == NULL) { char* output_string = mlr_malloc_or_die(MYBUFLEN); int written_length = strftime(output_string, MYBUFLEN, format_string, &tm); if (written_length > MYBUFLEN || written_length == 0) { fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", float_string, format_string); return 1; } else { printf("%s %s -> %s\n", float_string, format_string, output_string); } free(output_string); } else { int left_subformat_length = middle_format - format_string; char* left_subformat = mlr_malloc_or_die(left_subformat_length + 1); memcpy(left_subformat, format_string, left_subformat_length); left_subformat[left_subformat_length] = 0; char left_formatted[MYBUFLEN]; char right_formatted[MYBUFLEN]; if (*left_subformat == 0) { *left_formatted = 0; } else { int written_length = strftime(left_formatted, MYBUFLEN, left_subformat, &tm); printf("LEFT SUBFORMAT \"%s\"\n", left_subformat); if (written_length > MYBUFLEN || written_length == 0) { fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", float_string, left_subformat); return 1; } } free(left_subformat); char middle_int_formatted[16]; char* middle_int_format = "%S"; printf("MIDDLI SUBFORMAT \"%s\"\n", middle_int_format); int written_length = strftime(middle_int_formatted, sizeof(middle_int_formatted), middle_int_format, &tm); if (written_length > MYBUFLEN || written_length == 0) { fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", float_string, middle_int_format); return 1; } char middle_sprintf_format[] = "%.xlf"; char middle_fractional_formatted[16]; middle_sprintf_format[2] = middle_format[1]; printf("MIDDLE_SPRINTF_FORMAT \"%s\"\n", middle_sprintf_format); sprintf(middle_fractional_formatted, middle_sprintf_format, fracsec); if (*right_subformat == 0) { *right_formatted = 0; } else { printf("RIGHT SUBFORMAT \"%s\"\n", right_subformat); int written_length = strftime(right_formatted, MYBUFLEN, right_subformat, &tm); if (written_length > MYBUFLEN || written_length == 0) { fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", float_string, right_subformat); return 1; } } string_builder_t* psb = sb_alloc(32); sb_append_string(psb, left_formatted); sb_append_string(psb, middle_int_formatted); sb_append_string(psb, &middle_fractional_formatted[1]); // xxx comment sb_append_string(psb, right_formatted); char* output_string = sb_finish(psb); sb_free(psb); printf("LEFT OUT \"%s\"\n", left_formatted); printf("MIDDLI OUT \"%s\"\n", middle_int_formatted); printf("MIDDLF OUT \"%s\"\n", middle_fractional_formatted); printf("RIGHT OUT \"%s\"\n", right_formatted); printf("%s %s -> %s\n", float_string, format_string, output_string); free(output_string); } return 0; } // ---------------------------------------------------------------- static int p(char* time_string, char* format_string) { struct tm tm; memset(&tm, 0, sizeof(tm)); // xxx cmt try the non-floating-point-seconds case first and return quickly if so. char* strptime_retval = mlr_arch_strptime(time_string, format_string, &tm); if (strptime_retval != NULL) { if (*strptime_retval != 0) { // xxx extraneous fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } time_t iseconds = mlr_arch_timegmlocal(&tm); printf("%s, %s -> %u, \"%s\"\n", time_string, format_string, (unsigned)iseconds, strptime_retval); return 0; } char* pS = strstr(format_string, "%S"); if (pS == NULL) { // Couldn't have been because of floating-point-seconds stuff. No reason to try any harder. fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } // xxx // Input is "2017-04-09T00:51:09.123456 TZBLAHBLAH" // with format "%Y-%m-%dT%H:%M:%S TZBLAHBLAH" // 1. Copy the format up to the %S but with nothing else after. This is temporary to help us locate // the fractional-seconds part of the input string. // Example temporary format: "%Y-%m-%dT%H:%M:%S" int truncated_format_string_length = pS - format_string + 2; char* truncated_format_string = mlr_malloc_or_die(truncated_format_string_length + 1); memcpy(truncated_format_string, format_string, truncated_format_string_length); truncated_format_string[truncated_format_string_length] = 0; printf("ORIGINAL FORMAT \"%s\"\n", format_string); printf("TRUNCATED FORMAT \"%s\"\n", truncated_format_string); // 2. strptime using that truncated format and ignore the tm. Only look at the string return value. // Example return value: ".123456 TZBLAHBLAH" strptime_retval = mlr_arch_strptime(time_string, truncated_format_string, &tm); if (strptime_retval == NULL) { fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } printf("STRPTIME TEMP RETVAL \"%s\"\n", strptime_retval); // 3. strtod the return value to find the fractional-seconds part, and whatever's after. // Example fractional-seconds part: ".123456" // Example stuff after: " TZBLAHBLAH" char* stuff_after = NULL; double fractional_seconds = strtod(strptime_retval, &stuff_after); printf("FRACTIONAL SECONDS %.6lf\n", fractional_seconds); printf("STUFF AFTER \"%s\"\n", stuff_after); // 4. Make a copy of the input string with the fractional seconds elided. // Example: "2017-04-09T00:51:09 TZBLAHBLAH" char* elided_fraction_input = mlr_malloc_or_die(strlen(time_string) + 1); int input_length_to_fractional_seconds = strptime_retval - time_string; memcpy(elided_fraction_input, time_string, input_length_to_fractional_seconds); strcpy(&elided_fraction_input[input_length_to_fractional_seconds], stuff_after); printf("ELIDE \"%s\"\n", elided_fraction_input); // 5. strptime the elided-fraction input string using the original format string. Get the tm. memset(&tm, 0, sizeof(tm)); strptime_retval = mlr_arch_strptime(elided_fraction_input, format_string, &tm); if (strptime_retval == NULL) { fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } printf("STRPTIME ELIDE RETVAL \"%s\"\n", strptime_retval); // 6. Convert the tm to a time_t (seconds since the epoch) and then add the fractional seceonds. time_t iseconds = mlr_arch_timegmlocal(&tm); printf("ISECONDS %u\n", (unsigned)iseconds); double fseconds = iseconds + fractional_seconds; printf("FSECONDS %.6lf\n", fseconds); printf("%s %s -> %.6lf\n", time_string, format_string, fseconds); return 0; } //---------------------------------------------------------------------- int main(int argc, char **argv) { if (argc != 4) { fprintf(stderr, "c!=4 b04k!\n"); exit(1); } if (!strcmp(argv[1], "f")) { return f(argv[2], argv[3]); } else if (!strcmp(argv[1], "p")) { return p(argv[2], argv[3]); } else { fprintf(stderr, "f/p b04k!\n"); exit(1); } return 0; } miller-5.6.2/c/experimental/ttmx.c000066400000000000000000000004141354153536500171000ustar00rootroot00000000000000#include #include #include char * strptimex(const char *buf, const char *fmt, struct tm *tm); int main(void) { struct tm tm; char* foo = strptimex("2017-01-09T11:47:48Z", "%Y-%m-%dT%H:%M:%SZ", &tm); printf("[%s]\n", foo); return 0; } miller-5.6.2/c/input/000077500000000000000000000000001354153536500144035ustar00rootroot00000000000000miller-5.6.2/c/input/Makefile.am000066400000000000000000000021021354153536500164320ustar00rootroot00000000000000noinst_LTLIBRARIES= libinput.la libinput_la_SOURCES= \ byte_reader.h \ byte_readers.h \ file_reader_mmap.c \ file_reader_mmap.h \ file_reader_stdio.c \ file_reader_stdio.h \ file_ingestor_stdio.c \ file_ingestor_stdio.h \ json_parser.c \ json_parser.h \ mlr_json_adapter.c \ mlr_json_adapter.h \ line_readers.c \ line_readers.h \ lrec_reader.h \ lrec_reader_gen.c \ lrec_reader_in_memory.c \ lrec_reader_mmap_csv.c \ lrec_reader_mmap_csvlite.c \ lrec_reader_mmap_dkvp.c \ lrec_reader_mmap_json.c \ lrec_reader_mmap_nidx.c \ lrec_reader_mmap_xtab.c \ lrec_reader_stdio_csv.c \ lrec_reader_stdio_csvlite.c \ lrec_reader_stdio_dkvp.c \ lrec_reader_stdio_json.c \ lrec_reader_stdio_nidx.c \ lrec_reader_stdio_xtab.c \ lrec_readers.c \ lrec_readers.h \ mmap_byte_reader.c \ peek_file_reader.c \ peek_file_reader.h \ stdio_byte_reader.c \ string_byte_reader.c libinput_la_LIBADD= ../lib/libmlr.la libinput_la_CPPFLAGS= -I${srcdir}/../ AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/input/Makefile.in000066400000000000000000001453061354153536500164610ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/input ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libinput_la_DEPENDENCIES = ../lib/libmlr.la am_libinput_la_OBJECTS = libinput_la-file_reader_mmap.lo \ libinput_la-file_reader_stdio.lo \ libinput_la-file_ingestor_stdio.lo libinput_la-json_parser.lo \ libinput_la-mlr_json_adapter.lo libinput_la-line_readers.lo \ libinput_la-lrec_reader_gen.lo \ libinput_la-lrec_reader_in_memory.lo \ libinput_la-lrec_reader_mmap_csv.lo \ libinput_la-lrec_reader_mmap_csvlite.lo \ libinput_la-lrec_reader_mmap_dkvp.lo \ libinput_la-lrec_reader_mmap_json.lo \ libinput_la-lrec_reader_mmap_nidx.lo \ libinput_la-lrec_reader_mmap_xtab.lo \ libinput_la-lrec_reader_stdio_csv.lo \ libinput_la-lrec_reader_stdio_csvlite.lo \ libinput_la-lrec_reader_stdio_dkvp.lo \ libinput_la-lrec_reader_stdio_json.lo \ libinput_la-lrec_reader_stdio_nidx.lo \ libinput_la-lrec_reader_stdio_xtab.lo \ libinput_la-lrec_readers.lo libinput_la-mmap_byte_reader.lo \ libinput_la-peek_file_reader.lo \ libinput_la-stdio_byte_reader.lo \ libinput_la-string_byte_reader.lo libinput_la_OBJECTS = $(am_libinput_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libinput_la_SOURCES) DIST_SOURCES = $(libinput_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libinput.la libinput_la_SOURCES = \ byte_reader.h \ byte_readers.h \ file_reader_mmap.c \ file_reader_mmap.h \ file_reader_stdio.c \ file_reader_stdio.h \ file_ingestor_stdio.c \ file_ingestor_stdio.h \ json_parser.c \ json_parser.h \ mlr_json_adapter.c \ mlr_json_adapter.h \ line_readers.c \ line_readers.h \ lrec_reader.h \ lrec_reader_gen.c \ lrec_reader_in_memory.c \ lrec_reader_mmap_csv.c \ lrec_reader_mmap_csvlite.c \ lrec_reader_mmap_dkvp.c \ lrec_reader_mmap_json.c \ lrec_reader_mmap_nidx.c \ lrec_reader_mmap_xtab.c \ lrec_reader_stdio_csv.c \ lrec_reader_stdio_csvlite.c \ lrec_reader_stdio_dkvp.c \ lrec_reader_stdio_json.c \ lrec_reader_stdio_nidx.c \ lrec_reader_stdio_xtab.c \ lrec_readers.c \ lrec_readers.h \ mmap_byte_reader.c \ peek_file_reader.c \ peek_file_reader.h \ stdio_byte_reader.c \ string_byte_reader.c libinput_la_LIBADD = ../lib/libmlr.la libinput_la_CPPFLAGS = -I${srcdir}/../ AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/input/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/input/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libinput.la: $(libinput_la_OBJECTS) $(libinput_la_DEPENDENCIES) $(EXTRA_libinput_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libinput_la_OBJECTS) $(libinput_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-file_ingestor_stdio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-file_reader_mmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-file_reader_stdio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-json_parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-line_readers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_gen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_in_memory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_mmap_csv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_mmap_csvlite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_mmap_dkvp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_mmap_json.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_mmap_nidx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_mmap_xtab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_json.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_readers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-mlr_json_adapter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-mmap_byte_reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-peek_file_reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-stdio_byte_reader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-string_byte_reader.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libinput_la-file_reader_mmap.lo: file_reader_mmap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-file_reader_mmap.lo -MD -MP -MF $(DEPDIR)/libinput_la-file_reader_mmap.Tpo -c -o libinput_la-file_reader_mmap.lo `test -f 'file_reader_mmap.c' || echo '$(srcdir)/'`file_reader_mmap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-file_reader_mmap.Tpo $(DEPDIR)/libinput_la-file_reader_mmap.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_reader_mmap.c' object='libinput_la-file_reader_mmap.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-file_reader_mmap.lo `test -f 'file_reader_mmap.c' || echo '$(srcdir)/'`file_reader_mmap.c libinput_la-file_reader_stdio.lo: file_reader_stdio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-file_reader_stdio.lo -MD -MP -MF $(DEPDIR)/libinput_la-file_reader_stdio.Tpo -c -o libinput_la-file_reader_stdio.lo `test -f 'file_reader_stdio.c' || echo '$(srcdir)/'`file_reader_stdio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-file_reader_stdio.Tpo $(DEPDIR)/libinput_la-file_reader_stdio.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_reader_stdio.c' object='libinput_la-file_reader_stdio.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-file_reader_stdio.lo `test -f 'file_reader_stdio.c' || echo '$(srcdir)/'`file_reader_stdio.c libinput_la-file_ingestor_stdio.lo: file_ingestor_stdio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-file_ingestor_stdio.lo -MD -MP -MF $(DEPDIR)/libinput_la-file_ingestor_stdio.Tpo -c -o libinput_la-file_ingestor_stdio.lo `test -f 'file_ingestor_stdio.c' || echo '$(srcdir)/'`file_ingestor_stdio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-file_ingestor_stdio.Tpo $(DEPDIR)/libinput_la-file_ingestor_stdio.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_ingestor_stdio.c' object='libinput_la-file_ingestor_stdio.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-file_ingestor_stdio.lo `test -f 'file_ingestor_stdio.c' || echo '$(srcdir)/'`file_ingestor_stdio.c libinput_la-json_parser.lo: json_parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-json_parser.lo -MD -MP -MF $(DEPDIR)/libinput_la-json_parser.Tpo -c -o libinput_la-json_parser.lo `test -f 'json_parser.c' || echo '$(srcdir)/'`json_parser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-json_parser.Tpo $(DEPDIR)/libinput_la-json_parser.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='json_parser.c' object='libinput_la-json_parser.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-json_parser.lo `test -f 'json_parser.c' || echo '$(srcdir)/'`json_parser.c libinput_la-mlr_json_adapter.lo: mlr_json_adapter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-mlr_json_adapter.lo -MD -MP -MF $(DEPDIR)/libinput_la-mlr_json_adapter.Tpo -c -o libinput_la-mlr_json_adapter.lo `test -f 'mlr_json_adapter.c' || echo '$(srcdir)/'`mlr_json_adapter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-mlr_json_adapter.Tpo $(DEPDIR)/libinput_la-mlr_json_adapter.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlr_json_adapter.c' object='libinput_la-mlr_json_adapter.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-mlr_json_adapter.lo `test -f 'mlr_json_adapter.c' || echo '$(srcdir)/'`mlr_json_adapter.c libinput_la-line_readers.lo: line_readers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-line_readers.lo -MD -MP -MF $(DEPDIR)/libinput_la-line_readers.Tpo -c -o libinput_la-line_readers.lo `test -f 'line_readers.c' || echo '$(srcdir)/'`line_readers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-line_readers.Tpo $(DEPDIR)/libinput_la-line_readers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='line_readers.c' object='libinput_la-line_readers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-line_readers.lo `test -f 'line_readers.c' || echo '$(srcdir)/'`line_readers.c libinput_la-lrec_reader_gen.lo: lrec_reader_gen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_gen.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_gen.Tpo -c -o libinput_la-lrec_reader_gen.lo `test -f 'lrec_reader_gen.c' || echo '$(srcdir)/'`lrec_reader_gen.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_gen.Tpo $(DEPDIR)/libinput_la-lrec_reader_gen.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_gen.c' object='libinput_la-lrec_reader_gen.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_gen.lo `test -f 'lrec_reader_gen.c' || echo '$(srcdir)/'`lrec_reader_gen.c libinput_la-lrec_reader_in_memory.lo: lrec_reader_in_memory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_in_memory.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_in_memory.Tpo -c -o libinput_la-lrec_reader_in_memory.lo `test -f 'lrec_reader_in_memory.c' || echo '$(srcdir)/'`lrec_reader_in_memory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_in_memory.Tpo $(DEPDIR)/libinput_la-lrec_reader_in_memory.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_in_memory.c' object='libinput_la-lrec_reader_in_memory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_in_memory.lo `test -f 'lrec_reader_in_memory.c' || echo '$(srcdir)/'`lrec_reader_in_memory.c libinput_la-lrec_reader_mmap_csv.lo: lrec_reader_mmap_csv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_mmap_csv.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_mmap_csv.Tpo -c -o libinput_la-lrec_reader_mmap_csv.lo `test -f 'lrec_reader_mmap_csv.c' || echo '$(srcdir)/'`lrec_reader_mmap_csv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_mmap_csv.Tpo $(DEPDIR)/libinput_la-lrec_reader_mmap_csv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_mmap_csv.c' object='libinput_la-lrec_reader_mmap_csv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_mmap_csv.lo `test -f 'lrec_reader_mmap_csv.c' || echo '$(srcdir)/'`lrec_reader_mmap_csv.c libinput_la-lrec_reader_mmap_csvlite.lo: lrec_reader_mmap_csvlite.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_mmap_csvlite.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_mmap_csvlite.Tpo -c -o libinput_la-lrec_reader_mmap_csvlite.lo `test -f 'lrec_reader_mmap_csvlite.c' || echo '$(srcdir)/'`lrec_reader_mmap_csvlite.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_mmap_csvlite.Tpo $(DEPDIR)/libinput_la-lrec_reader_mmap_csvlite.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_mmap_csvlite.c' object='libinput_la-lrec_reader_mmap_csvlite.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_mmap_csvlite.lo `test -f 'lrec_reader_mmap_csvlite.c' || echo '$(srcdir)/'`lrec_reader_mmap_csvlite.c libinput_la-lrec_reader_mmap_dkvp.lo: lrec_reader_mmap_dkvp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_mmap_dkvp.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_mmap_dkvp.Tpo -c -o libinput_la-lrec_reader_mmap_dkvp.lo `test -f 'lrec_reader_mmap_dkvp.c' || echo '$(srcdir)/'`lrec_reader_mmap_dkvp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_mmap_dkvp.Tpo $(DEPDIR)/libinput_la-lrec_reader_mmap_dkvp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_mmap_dkvp.c' object='libinput_la-lrec_reader_mmap_dkvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_mmap_dkvp.lo `test -f 'lrec_reader_mmap_dkvp.c' || echo '$(srcdir)/'`lrec_reader_mmap_dkvp.c libinput_la-lrec_reader_mmap_json.lo: lrec_reader_mmap_json.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_mmap_json.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_mmap_json.Tpo -c -o libinput_la-lrec_reader_mmap_json.lo `test -f 'lrec_reader_mmap_json.c' || echo '$(srcdir)/'`lrec_reader_mmap_json.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_mmap_json.Tpo $(DEPDIR)/libinput_la-lrec_reader_mmap_json.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_mmap_json.c' object='libinput_la-lrec_reader_mmap_json.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_mmap_json.lo `test -f 'lrec_reader_mmap_json.c' || echo '$(srcdir)/'`lrec_reader_mmap_json.c libinput_la-lrec_reader_mmap_nidx.lo: lrec_reader_mmap_nidx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_mmap_nidx.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_mmap_nidx.Tpo -c -o libinput_la-lrec_reader_mmap_nidx.lo `test -f 'lrec_reader_mmap_nidx.c' || echo '$(srcdir)/'`lrec_reader_mmap_nidx.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_mmap_nidx.Tpo $(DEPDIR)/libinput_la-lrec_reader_mmap_nidx.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_mmap_nidx.c' object='libinput_la-lrec_reader_mmap_nidx.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_mmap_nidx.lo `test -f 'lrec_reader_mmap_nidx.c' || echo '$(srcdir)/'`lrec_reader_mmap_nidx.c libinput_la-lrec_reader_mmap_xtab.lo: lrec_reader_mmap_xtab.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_mmap_xtab.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_mmap_xtab.Tpo -c -o libinput_la-lrec_reader_mmap_xtab.lo `test -f 'lrec_reader_mmap_xtab.c' || echo '$(srcdir)/'`lrec_reader_mmap_xtab.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_mmap_xtab.Tpo $(DEPDIR)/libinput_la-lrec_reader_mmap_xtab.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_mmap_xtab.c' object='libinput_la-lrec_reader_mmap_xtab.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_mmap_xtab.lo `test -f 'lrec_reader_mmap_xtab.c' || echo '$(srcdir)/'`lrec_reader_mmap_xtab.c libinput_la-lrec_reader_stdio_csv.lo: lrec_reader_stdio_csv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_csv.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Tpo -c -o libinput_la-lrec_reader_stdio_csv.lo `test -f 'lrec_reader_stdio_csv.c' || echo '$(srcdir)/'`lrec_reader_stdio_csv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_csv.c' object='libinput_la-lrec_reader_stdio_csv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_csv.lo `test -f 'lrec_reader_stdio_csv.c' || echo '$(srcdir)/'`lrec_reader_stdio_csv.c libinput_la-lrec_reader_stdio_csvlite.lo: lrec_reader_stdio_csvlite.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_csvlite.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Tpo -c -o libinput_la-lrec_reader_stdio_csvlite.lo `test -f 'lrec_reader_stdio_csvlite.c' || echo '$(srcdir)/'`lrec_reader_stdio_csvlite.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_csvlite.c' object='libinput_la-lrec_reader_stdio_csvlite.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_csvlite.lo `test -f 'lrec_reader_stdio_csvlite.c' || echo '$(srcdir)/'`lrec_reader_stdio_csvlite.c libinput_la-lrec_reader_stdio_dkvp.lo: lrec_reader_stdio_dkvp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_dkvp.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Tpo -c -o libinput_la-lrec_reader_stdio_dkvp.lo `test -f 'lrec_reader_stdio_dkvp.c' || echo '$(srcdir)/'`lrec_reader_stdio_dkvp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_dkvp.c' object='libinput_la-lrec_reader_stdio_dkvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_dkvp.lo `test -f 'lrec_reader_stdio_dkvp.c' || echo '$(srcdir)/'`lrec_reader_stdio_dkvp.c libinput_la-lrec_reader_stdio_json.lo: lrec_reader_stdio_json.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_json.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_json.Tpo -c -o libinput_la-lrec_reader_stdio_json.lo `test -f 'lrec_reader_stdio_json.c' || echo '$(srcdir)/'`lrec_reader_stdio_json.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_json.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_json.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_json.c' object='libinput_la-lrec_reader_stdio_json.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_json.lo `test -f 'lrec_reader_stdio_json.c' || echo '$(srcdir)/'`lrec_reader_stdio_json.c libinput_la-lrec_reader_stdio_nidx.lo: lrec_reader_stdio_nidx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_nidx.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Tpo -c -o libinput_la-lrec_reader_stdio_nidx.lo `test -f 'lrec_reader_stdio_nidx.c' || echo '$(srcdir)/'`lrec_reader_stdio_nidx.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_nidx.c' object='libinput_la-lrec_reader_stdio_nidx.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_nidx.lo `test -f 'lrec_reader_stdio_nidx.c' || echo '$(srcdir)/'`lrec_reader_stdio_nidx.c libinput_la-lrec_reader_stdio_xtab.lo: lrec_reader_stdio_xtab.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_xtab.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Tpo -c -o libinput_la-lrec_reader_stdio_xtab.lo `test -f 'lrec_reader_stdio_xtab.c' || echo '$(srcdir)/'`lrec_reader_stdio_xtab.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_xtab.c' object='libinput_la-lrec_reader_stdio_xtab.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_xtab.lo `test -f 'lrec_reader_stdio_xtab.c' || echo '$(srcdir)/'`lrec_reader_stdio_xtab.c libinput_la-lrec_readers.lo: lrec_readers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_readers.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_readers.Tpo -c -o libinput_la-lrec_readers.lo `test -f 'lrec_readers.c' || echo '$(srcdir)/'`lrec_readers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_readers.Tpo $(DEPDIR)/libinput_la-lrec_readers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_readers.c' object='libinput_la-lrec_readers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_readers.lo `test -f 'lrec_readers.c' || echo '$(srcdir)/'`lrec_readers.c libinput_la-mmap_byte_reader.lo: mmap_byte_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-mmap_byte_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-mmap_byte_reader.Tpo -c -o libinput_la-mmap_byte_reader.lo `test -f 'mmap_byte_reader.c' || echo '$(srcdir)/'`mmap_byte_reader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-mmap_byte_reader.Tpo $(DEPDIR)/libinput_la-mmap_byte_reader.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap_byte_reader.c' object='libinput_la-mmap_byte_reader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-mmap_byte_reader.lo `test -f 'mmap_byte_reader.c' || echo '$(srcdir)/'`mmap_byte_reader.c libinput_la-peek_file_reader.lo: peek_file_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-peek_file_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-peek_file_reader.Tpo -c -o libinput_la-peek_file_reader.lo `test -f 'peek_file_reader.c' || echo '$(srcdir)/'`peek_file_reader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-peek_file_reader.Tpo $(DEPDIR)/libinput_la-peek_file_reader.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='peek_file_reader.c' object='libinput_la-peek_file_reader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-peek_file_reader.lo `test -f 'peek_file_reader.c' || echo '$(srcdir)/'`peek_file_reader.c libinput_la-stdio_byte_reader.lo: stdio_byte_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-stdio_byte_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-stdio_byte_reader.Tpo -c -o libinput_la-stdio_byte_reader.lo `test -f 'stdio_byte_reader.c' || echo '$(srcdir)/'`stdio_byte_reader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-stdio_byte_reader.Tpo $(DEPDIR)/libinput_la-stdio_byte_reader.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio_byte_reader.c' object='libinput_la-stdio_byte_reader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-stdio_byte_reader.lo `test -f 'stdio_byte_reader.c' || echo '$(srcdir)/'`stdio_byte_reader.c libinput_la-string_byte_reader.lo: string_byte_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-string_byte_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-string_byte_reader.Tpo -c -o libinput_la-string_byte_reader.lo `test -f 'string_byte_reader.c' || echo '$(srcdir)/'`string_byte_reader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-string_byte_reader.Tpo $(DEPDIR)/libinput_la-string_byte_reader.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='string_byte_reader.c' object='libinput_la-string_byte_reader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-string_byte_reader.lo `test -f 'string_byte_reader.c' || echo '$(srcdir)/'`string_byte_reader.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/input/README.md000066400000000000000000000047251354153536500156720ustar00rootroot00000000000000# Miller file/record input These are readers for Miller file formats, stdio and mmap versions. The stdio and mmap record parsers are similar but not identical, due to inversion of processing order: getting an entire mallocked line and then splitting it by separators in the former case, versus splitting while discovering end of line in the latter case. The code duplication could be largely removed by having the mmap readers find end-of-lines, then split up the lines -- however that requires two passes through input strings and for performance I want just a single pass. While there are separate record-writers for CSV and pretty-print, there is just a common record-reader: pretty-print is CSV with field separator being a space, and `allow_repeat_ifs` set to true. Idea of `header_keeper` objects for CSV: each `header_keeper` object retains the input-line backing and the `slls_t` for a CSV header line which is used by one or more CSV data lines. Meanwhile some mappers (e.g. `sort`, `tac`) retain input records from the entire data stream, which may include header-schema changes in the input stream. This means we need to keep headers intact as long as any lrecs are pointing to them. One option is reference-counting which I experimented with; it was messy and error-prone. The approach used here is to keep a hash map from header-schema to `header_keeper` object. The current `pheader_keeper` is a pointer into one of those. Then when the reader is freed, all its header-keepers are freed. There is some code duplication involving single-character and multi-character IRS, IFS, and IPS. While single-character is a special case of multi-character, keeping separate implementations for single-character and multi-character versions is worthwhile for performance. The difference is betweeen `*p == ifs` and `streqn(p, ifs, ifslen)`: even with function inlining, the latter is more expensive than the former in the single-character case. Example timing info for a million-line file is as follows: ``` TIME IN SECONDS 0.945 -- mlr --irs lf --ifs , --ips = check ../data/big.dkvp2 TIME IN SECONDS 1.139 -- mlr --irs crlf --ifs , --ips = check ../data/big.dkvp2 TIME IN SECONDS 1.291 -- mlr --irs lf --ifs /, --ips =: check ../data/big.dkvp2 TIME IN SECONDS 1.443 -- mlr --irs crlf --ifs /, --ips =: check ../data/big.dkvp2 ``` i.e. (even when averaged over multiple runs) performance improvements of 20-30% are obtained by special-casing single-character-separator code: this is worth doing. miller-5.6.2/c/input/byte_reader.h000066400000000000000000000022001354153536500170330ustar00rootroot00000000000000#ifndef BYTE_READER_H #define BYTE_READER_H struct _byte_reader_t; // Abstract byte source for input. Impls are stdio from file/stdin, mmapped // file, and string-backed (for unit test). // pvstate will nominally hold FILE*, mmap fd and pointers, string-backing, etc. // The open function should return TRUE on success and FALSE on failure. // For the string reader, the char* argument is the backing string itself. typedef int byte_reader_open_func_t(struct _byte_reader_t* pbr, char* prepipe, char* filename); // The reader function should return a character, as an int. Reads past end of // file should keep returning EOF, even if called multiple times. typedef int byte_reader_read_func_t(struct _byte_reader_t* pbr); // The close function should close file pointers/descriptors, as well as any // necessary heap-frees. typedef void byte_reader_close_func_t(struct _byte_reader_t* pbr, char* prepipe); typedef struct _byte_reader_t { void* pvstate; byte_reader_open_func_t* popen_func; byte_reader_read_func_t* pread_func; byte_reader_close_func_t* pclose_func; } byte_reader_t; #endif // BYTE_READER_H miller-5.6.2/c/input/byte_readers.h000066400000000000000000000005721354153536500172300ustar00rootroot00000000000000#ifndef BYTE_READERS_H #define BYTE_READERS_H #include "input/byte_reader.h" byte_reader_t* string_byte_reader_alloc(); byte_reader_t* stdio_byte_reader_alloc(); byte_reader_t* mmap_byte_reader_alloc(); void string_byte_reader_free(byte_reader_t* pbr); void stdio_byte_reader_free(byte_reader_t* pbr); void mmap_byte_reader_free(byte_reader_t* pbr); #endif // BYTE_READERS_H miller-5.6.2/c/input/file_ingestor_stdio.c000066400000000000000000000045151354153536500206070ustar00rootroot00000000000000#include #include #include #include #include #include #include "lib/mlrutil.h" #include "lib/mlrescape.h" #include "lib/mlr_globals.h" #include "file_ingestor_stdio.h" // ---------------------------------------------------------------- void* file_ingestor_stdio_vopen(void* pvstate, char* prepipe, char* filename) { char* file_contents_buffer = NULL; size_t file_size = 0; if (prepipe == NULL) { if (streq(filename, "-")) { file_contents_buffer = read_fp_into_memory(stdin, &file_size); if (file_contents_buffer == NULL) { fprintf(stderr, "%s: Couldn't open standard input for read.\n", MLR_GLOBALS.bargv0); exit(1); } } else { file_contents_buffer = read_file_into_memory(filename, &file_size); if (file_contents_buffer == NULL) { fprintf(stderr, "%s: Couldn't open \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); exit(1); } } } else { char* escaped_filename = alloc_file_name_escaped_for_popen(filename); char* command = mlr_malloc_or_die(strlen(prepipe) + 3 + strlen(escaped_filename) + 1); if (streq(filename, "-")) sprintf(command, "%s", prepipe); else sprintf(command, "%s < %s", prepipe, escaped_filename); FILE* input_stream = popen(command, "r"); if (input_stream == NULL) { fprintf(stderr, "%s: Couldn't popen \"%s\" for read.\n", MLR_GLOBALS.bargv0, command); perror(command); exit(1); } file_contents_buffer = read_fp_into_memory(input_stream, &file_size); if (file_contents_buffer == NULL) { fprintf(stderr, "%s: Couldn't open popen output for read: \"%s\".\n", MLR_GLOBALS.bargv0, command); exit(1); } pclose(input_stream); free(escaped_filename); free(command); } file_ingestor_stdio_state_t* pstate = mlr_malloc_or_die(sizeof(file_ingestor_stdio_state_t)); pstate->sof = file_contents_buffer; pstate->eof = &file_contents_buffer[file_size]; return pstate; } // ---------------------------------------------------------------- void file_ingestor_stdio_nop_vclose(void* pvstate, void* pvhandle, char* prepipe) { } // ---------------------------------------------------------------- void file_ingestor_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe) { char* file_contents_buffer = pvhandle; free(file_contents_buffer); file_ingestor_stdio_state_t* pstate = pvstate; free(pstate); } miller-5.6.2/c/input/file_ingestor_stdio.h000066400000000000000000000022341354153536500206100ustar00rootroot00000000000000// ================================================================ // Abstraction layer for stdio file-read logic, when ingesting entirely into memory. // ================================================================ #ifndef FILE_INGESTOR_STDIO_H #define FILE_INGESTOR_STDIO_H typedef struct _file_ingestor_stdio_state_t { char* sof; char* eof; } file_ingestor_stdio_state_t; // The vclose method frees memory. The nop flavor does not. The latter is used by the JSON-input // lrec reader: lrecs have keys/values pointing into parsed-JSON structures which in turn have // values pointing to the ingested-file buffer. This is done for the sake of performance, to reduce // data-copies. But it also means we can't free ingested files after ingesting their contents into // lrecs, since the lrecs in question might be retained after the input-file closes. Example: mlr // sort on multiple files. void* file_ingestor_stdio_vopen(void* pvstate, char* prepipe, char* file_name); void file_ingestor_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe); void file_ingestor_stdio_nop_vclose(void* pvstate, void* pvhandle, char* prepipe); #endif // FILE_INGESTOR_STDIO_H miller-5.6.2/c/input/file_reader_mmap.c000066400000000000000000000056651354153536500200360ustar00rootroot00000000000000#include #include #include #include #include #include #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "file_reader_mmap.h" #if MLR_ARCH_MMAP_ENABLED static char empty_buf[1] = { 0 }; #endif // ---------------------------------------------------------------- file_reader_mmap_state_t* file_reader_mmap_open(char* prepipe, char* file_name) { #if MLR_ARCH_MMAP_ENABLED // popen is a stdio construct, not an mmap construct, and it can't be supported here. if (prepipe != NULL) { fprintf(stderr, "%s: coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } file_reader_mmap_state_t* pstate = mlr_malloc_or_die(sizeof(file_reader_mmap_state_t)); pstate->fd = open(file_name, O_RDONLY); if (pstate->fd < 0) { perror("open"); fprintf(stderr, "%s: could not open \"%s\"\n", MLR_GLOBALS.bargv0, file_name); exit(1); } struct stat stat; if (fstat(pstate->fd, &stat) < 0) { perror("fstat"); fprintf(stderr, "%s: could not fstat \"%s\"\n", MLR_GLOBALS.bargv0, file_name); exit(1); } if (stat.st_size == 0) { // mmap doesn't allow us to map zero-length files but zero-length files do exist. pstate->sol = &empty_buf[0]; } else { pstate->sol = mmap(NULL, (size_t)stat.st_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, pstate->fd, (off_t)0); if (pstate->sol == MAP_FAILED) { perror("mmap"); fprintf(stderr, "%s: could not mmap \"%s\"\n", MLR_GLOBALS.bargv0, file_name); exit(1); } } pstate->eof = pstate->sol + stat.st_size; // POSIX semantics: the mmap itself increments a reference count to the file, in addition to the // open. We close the file but keep the mmap reference until a subsequent munmap. if (close(pstate->fd) < 0) { perror("close"); exit(1); } return pstate; #else fprintf(stderr, "%s: mmap is unsupported on this architecture.\n", MLR_GLOBALS.bargv0); exit(1); return NULL; #endif } // ---------------------------------------------------------------- // Here we intentionally do not munmap. // // This method is used by various lrec readers, where lrecs are instantiated with keys/values // pointing into mmapped file-contents buffers. This is done for the sake of performance, to reduce // data-copies. But it also means we can't unmap files after ingesting lrecs, since the lrecs in // question might be retained after the input-file closes. Example: mlr sort on multiple files. void file_reader_mmap_close(file_reader_mmap_state_t* pstate, char* prepipe) { free(pstate); } // ---------------------------------------------------------------- void* file_reader_mmap_vopen(void* pvstate, char* prepipe, char* file_name) { return file_reader_mmap_open(prepipe, file_name); } // ---------------------------------------------------------------- void file_reader_mmap_vclose(void* pvstate, void* pvhandle, char* prepipe) { file_reader_mmap_close(pvhandle, prepipe); } miller-5.6.2/c/input/file_reader_mmap.h000066400000000000000000000012641354153536500200320ustar00rootroot00000000000000// ================================================================ // Abstraction layer for mmapped file-read logic. // ================================================================ #ifndef FILE_READER_MMAP_H #define FILE_READER_MMAP_H typedef struct _file_reader_mmap_state_t { char* sol; char* eof; int fd; } file_reader_mmap_state_t; file_reader_mmap_state_t* file_reader_mmap_open(char* prepipe, char* file_name); void file_reader_mmap_close(file_reader_mmap_state_t* pstate, char* prepipe); void* file_reader_mmap_vopen(void* pvstate, char* prepipe, char* file_name); void file_reader_mmap_vclose(void* pvstate, void* pvhandle, char* prepipe); #endif // FILE_READER_MMAP_H miller-5.6.2/c/input/file_reader_stdio.c000066400000000000000000000027731354153536500202230ustar00rootroot00000000000000#include #include #include #include #include #include #include "lib/mlrutil.h" #include "lib/mlrescape.h" #include "lib/mlr_globals.h" #include "file_reader_stdio.h" // ---------------------------------------------------------------- void* file_reader_stdio_vopen(void* pvstate, char* prepipe, char* filename) { FILE* input_stream = stdin; if (prepipe == NULL) { if (!streq(filename, "-")) { input_stream = fopen(filename, "r"); if (input_stream == NULL) { fprintf(stderr, "%s: Couldn't open \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); perror(filename); exit(1); } } } else { char* escaped_filename = alloc_file_name_escaped_for_popen(filename); char* command = mlr_malloc_or_die(strlen(prepipe) + 3 + strlen(escaped_filename) + 1); if (streq(filename, "-")) sprintf(command, "%s", prepipe); else sprintf(command, "%s < %s", prepipe, escaped_filename); input_stream = popen(command, "r"); if (input_stream == NULL) { fprintf(stderr, "%s: Couldn't popen \"%s\" for read.\n", MLR_GLOBALS.bargv0, command); perror(command); exit(1); } free(escaped_filename); free(command); } return input_stream; } // ---------------------------------------------------------------- void file_reader_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe) { FILE* input_stream = pvhandle; if (prepipe == NULL) { if (input_stream != stdin) fclose(input_stream); } else { pclose(input_stream); } } miller-5.6.2/c/input/file_reader_stdio.h000066400000000000000000000006541354153536500202240ustar00rootroot00000000000000// ================================================================ // Abstraction layer for stdio file-read logic. // ================================================================ #ifndef FILE_READER_STDIO_H #define FILE_READER_STDIO_H void* file_reader_stdio_vopen(void* pvstate, char* prepipe, char* file_name); void file_reader_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe); #endif // FILE_READER_STDIO_H miller-5.6.2/c/input/json_parser.c000066400000000000000000000624571354153536500171120ustar00rootroot00000000000000// ================================================================ // Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. // https://github.com/udp/json-parser // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE. // ================================================================ // Miller to-do items: // 1. Modify the data structures so sval & length are shared between boolean, integer, & double. // 2. Just append a byte-range (start to end pointer) rather than making repeated per-character calls // to these functions. #include "lib/mlrutil.h" #include "json_parser.h" const struct _json_value_t json_value_none; #include #include #include #include typedef unsigned int json_uchar; static unsigned char hex_value(json_char c) { if (isdigit(c)) return c - '0'; switch (c) { case 'a': case 'A': return 0x0A; case 'b': case 'B': return 0x0B; case 'c': case 'C': return 0x0C; case 'd': case 'D': return 0x0D; case 'e': case 'E': return 0x0E; case 'f': case 'F': return 0x0F; default: return 0xFF; } } // ---------------------------------------------------------------- typedef struct _json_state_{ unsigned long used_memory; unsigned int uint_max; unsigned long ulong_max; int first_pass; const json_char * ptr; unsigned int cur_line, cur_col; } json_parser_state_t; // ---------------------------------------------------------------- static void * default_alloc(size_t size, int zero) { void* ptr = mlr_malloc_or_die(size); if (zero) memset(ptr, 0, size); return ptr; } // ---------------------------------------------------------------- static void * json_alloc(json_parser_state_t * pstate, unsigned long size, int zero) { if ((pstate->ulong_max - pstate->used_memory) < size) return 0; return default_alloc(size, zero); } // ---------------------------------------------------------------- static int new_value( json_parser_state_t * pstate, json_value_t ** ptop, json_value_t ** proot, json_value_t ** palloc, json_type_t type) { json_value_t * pvalue; int values_size; if (!pstate->first_pass) { pvalue = *ptop = *palloc; *palloc = (*palloc)->_reserved.next_alloc; if (!*proot) *proot = pvalue; switch (pvalue->type) { case JSON_ARRAY: if (pvalue->u.array.length == 0) break; if (! (pvalue->u.array.values = (json_value_t **) json_alloc (pstate, pvalue->u.array.length * sizeof(json_value_t *), 0)) ) { return 0; } pvalue->u.array.length = 0; break; case JSON_OBJECT: if (pvalue->u.object.length == 0) break; values_size = sizeof(*pvalue->u.object.p.values) * pvalue->u.object.length; if (! (pvalue->u.object.p.values = (json_object_entry_t *) json_alloc (pstate, values_size + ((unsigned long) pvalue->u.object.p.values), 0)) ) { return 0; } pvalue->_reserved.p.pobject_mem = (*(char **) &pvalue->u.object.p.mem) + values_size; pvalue->u.object.length = 0; break; case JSON_STRING: if (! (pvalue->u.string.ptr = (json_char *) json_alloc (pstate, (pvalue->u.string.length + 1) * sizeof (json_char), 0)) ) { return 0; } pvalue->u.string.length = 0; break; case JSON_BOOLEAN: if (! (pvalue->u.boolean.sval = (json_char *) json_alloc (pstate, (pvalue->u.boolean.length + 1) * sizeof (json_char), 1)) ) { return 0; } pvalue->u.boolean.length = 0; break; case JSON_INTEGER: if (! (pvalue->u.integer.sval = (json_char *) json_alloc (pstate, (pvalue->u.integer.length + 1) * sizeof (json_char), 1)) ) { return 0; } pvalue->u.integer.length = 0; break; case JSON_DOUBLE: if (! (pvalue->u.dbl.sval = (json_char *) json_alloc (pstate, (pvalue->u.dbl.length + 1) * sizeof (json_char), 1)) ) { return 0; } pvalue->u.dbl.length = 0; break; default: break; } return 1; } if (! (pvalue = (json_value_t *) json_alloc(pstate, sizeof (json_value_t), 1))) { return 0; } if (!*proot) *proot = pvalue; pvalue->type = type; pvalue->parent = *ptop; pvalue->line = pstate->cur_line; pvalue->col = pstate->cur_col; if (*palloc) (*palloc)->_reserved.next_alloc = pvalue; *palloc = *ptop = pvalue; return 1; } // ---------------------------------------------------------------- #define WHITESPACE \ case '\n': ++state.cur_line; state.cur_col = 0; \ case ' ': case '\t': case '\r' #define STRING_ADD(b) \ do { if (!state.first_pass) string[string_length] = b; ++string_length; } while (0); static inline void boolean_sval_add(json_parser_state_t* pstate, json_value_t* ptop, char b) { if (!pstate->first_pass) { ptop->u.boolean.sval[ptop->u.boolean.length++] = b; } else { ptop->u.boolean.length++; } } static inline void integer_sval_add(json_parser_state_t* pstate, json_value_t* ptop, char b) { if (!pstate->first_pass) { ptop->u.integer.sval[ptop->u.integer.length++] = b; } else { ptop->u.integer.length++; } } static inline void dbl_sval_add(json_parser_state_t* pstate, json_value_t* ptop, char b) { if (!pstate->first_pass) { ptop->u.dbl.sval[ptop->u.dbl.length++] = b; } else { ptop->u.dbl.length++; } } static inline void boolean_sval_end(json_parser_state_t* pstate, json_value_t* ptop) { if (!pstate->first_pass) { ptop->u.boolean.sval[ptop->u.boolean.length] = 0; } } static inline void integer_sval_end(json_parser_state_t* pstate, json_value_t* ptop) { if (!pstate->first_pass) { ptop->u.integer.sval[ptop->u.integer.length] = 0; } } static inline void dbl_sval_end(json_parser_state_t* pstate, json_value_t* ptop) { if (!pstate->first_pass) { ptop->u.dbl.sval[ptop->u.dbl.length] = 0; } } #define LINE_AND_COL \ state.cur_line, state.cur_col static const long FLAG_NEXT = 1 << 0, FLAG_REPROC = 1 << 1, FLAG_NEED_COMMA = 1 << 2, FLAG_SEEK_VALUE = 1 << 3, FLAG_ESCAPED = 1 << 4, FLAG_IN_STRING = 1 << 5, FLAG_NEED_COLON = 1 << 6, FLAG_DONE = 1 << 7, FLAG_NUM_NEGATIVE = 1 << 8, FLAG_NUM_ZERO = 1 << 9, FLAG_NUM_E = 1 << 10, FLAG_NUM_E_GOT_SIGN = 1 << 11, FLAG_NUM_E_NEGATIVE = 1 << 12; // ================================================================ json_value_t * json_parse( const json_char * json, size_t length, char * error_buf, json_char** ppend_of_item) { json_char error[JSON_ERROR_MAX]; const json_char * end; json_value_t * ptop, * proot, * palloc = 0; json_parser_state_t state = { 0 }; long flags; long num_digits = 0, num_e = 0; json_int_t num_fraction = 0; *ppend_of_item = NULL; // Skip UTF-8 BOM if (length >= 3 && ((unsigned char) json[0]) == 0xEF && ((unsigned char) json[1]) == 0xBB && ((unsigned char) json[2]) == 0xBF) { json += 3; length -= 3; } error[0] = '\0'; end = (json + length); memset(&state.uint_max, 0xFF, sizeof(state.uint_max)); memset(&state.ulong_max, 0xFF, sizeof(state.ulong_max)); state.uint_max -= 8; /* limit of how much can be added before next check */ state.ulong_max -= 8; for (state.first_pass = 1; state.first_pass >= 0; --state.first_pass) { json_uchar uchar; unsigned char uc_b1, uc_b2, uc_b3, uc_b4; json_char * string = 0; unsigned int string_length = 0; ptop = proot = 0; flags = FLAG_SEEK_VALUE; state.cur_line = 1; for (state.ptr = json ;; ++state.ptr) { json_char* pb = (json_char*)((state.ptr == end) ? NULL : state.ptr); json_char b = (state.ptr == end) ? 0 : *state.ptr; if (flags & FLAG_IN_STRING) { if (!b) { sprintf(error, "Unexpected EOF in string at line %d column %d.", LINE_AND_COL); goto e_failed; } if (string_length > state.uint_max) goto e_overflow; if (flags & FLAG_ESCAPED) { flags &= ~ FLAG_ESCAPED; switch (b) { case 'b': STRING_ADD('\b'); break; case 'f': STRING_ADD('\f'); break; case 'n': STRING_ADD('\n'); break; case 'r': STRING_ADD('\r'); break; case 't': STRING_ADD('\t'); break; case 'u': if (end - state.ptr < 4 || (uc_b1 = hex_value (*++state.ptr)) == 0xFF || (uc_b2 = hex_value (*++state.ptr)) == 0xFF || (uc_b3 = hex_value (*++state.ptr)) == 0xFF || (uc_b4 = hex_value (*++state.ptr)) == 0xFF) { sprintf(error, "Invalid character value `%c` at line %d column %d.", b, LINE_AND_COL); goto e_failed; } uc_b1 = (uc_b1 << 4) | uc_b2; uc_b2 = (uc_b3 << 4) | uc_b4; uchar = (uc_b1 << 8) | uc_b2; if ((uchar & 0xF800) == 0xD800) { json_uchar uchar2; if (end - state.ptr < 6 || (*++state.ptr) != '\\' || (*++state.ptr) != 'u' || (uc_b1 = hex_value (*++state.ptr)) == 0xFF || (uc_b2 = hex_value (*++state.ptr)) == 0xFF || (uc_b3 = hex_value (*++state.ptr)) == 0xFF || (uc_b4 = hex_value (*++state.ptr)) == 0xFF) { sprintf(error, "Invalid character value `%c` at line %d column %d.", b, LINE_AND_COL); goto e_failed; } uc_b1 = (uc_b1 << 4) | uc_b2; uc_b2 = (uc_b3 << 4) | uc_b4; uchar2 = (uc_b1 << 8) | uc_b2; uchar = 0x010000 | ((uchar & 0x3FF) << 10) | (uchar2 & 0x3FF); } if (sizeof(json_char) >= sizeof(json_uchar) || (uchar <= 0x7F)) { STRING_ADD((json_char) uchar); break; } if (uchar <= 0x7FF) { if (state.first_pass) { string_length += 2; } else { string[string_length ++] = 0xC0 | (uchar >> 6); string[string_length ++] = 0x80 | (uchar & 0x3F); } break; } if (uchar <= 0xFFFF) { if (state.first_pass) { string_length += 3; } else { string[string_length ++] = 0xE0 | (uchar >> 12); string[string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); string[string_length ++] = 0x80 | (uchar & 0x3F); } break; } if (state.first_pass) { string_length += 4; } else { string[string_length ++] = 0xF0 | (uchar >> 18); string[string_length ++] = 0x80 | ((uchar >> 12) & 0x3F); string[string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); string[string_length ++] = 0x80 | (uchar & 0x3F); } break; default: STRING_ADD(b); } continue; } if (b == '\\') { flags |= FLAG_ESCAPED; continue; } if (b == '"') { if (!state.first_pass) string[string_length] = 0; flags &= ~ FLAG_IN_STRING; string = 0; switch (ptop->type) { case JSON_STRING: ptop->u.string.length = string_length; flags |= FLAG_NEXT; break; case JSON_OBJECT: if (state.first_pass) { (*(json_char **) &ptop->u.object.p.mem) += string_length + 1; } else { ptop->u.object.p.values[ptop->u.object.length].name = (json_char *) ptop->_reserved.p.pobject_mem; ptop->u.object.p.values[ptop->u.object.length].name_length = string_length; (*(json_char **) &ptop->_reserved.p.pobject_mem) += string_length + 1; } flags |= FLAG_SEEK_VALUE | FLAG_NEED_COLON; continue; default: break; } } else { STRING_ADD(b); continue; } } if (flags & FLAG_DONE) { if (!b) break; *ppend_of_item = pb + 1; break; switch (b) { WHITESPACE: continue; default: sprintf(error, "Line %d column %d: Trailing text: `%c`", state.cur_line, state.cur_col, b); goto e_failed; } } if (flags & FLAG_SEEK_VALUE) { switch (b) { WHITESPACE: continue; case ']': if (ptop && ptop->type == JSON_ARRAY) { flags = (flags & ~ (FLAG_NEED_COMMA | FLAG_SEEK_VALUE)) | FLAG_NEXT; } else { sprintf (error, "Line %d column %d: Unexpected ]", LINE_AND_COL); goto e_failed; } break; default: if (flags & FLAG_NEED_COMMA) { if (b == ',') { flags &= ~ FLAG_NEED_COMMA; continue; } else { sprintf(error, "Line %d column %d: Expected , before %c", state.cur_line, state.cur_col, b); goto e_failed; } } if (flags & FLAG_NEED_COLON) { if (b == ':') { flags &= ~ FLAG_NEED_COLON; continue; } else { sprintf(error, "Line %d column %d: Expected : before %c", state.cur_line, state.cur_col, b); goto e_failed; } } flags &= ~ FLAG_SEEK_VALUE; switch (b) { case '{': if (!new_value(&state, &ptop, &proot, &palloc, JSON_OBJECT)) goto e_alloc_failure; continue; case '[': if (!new_value(&state, &ptop, &proot, &palloc, JSON_ARRAY)) goto e_alloc_failure; flags |= FLAG_SEEK_VALUE; continue; case '"': if (!new_value(&state, &ptop, &proot, &palloc, JSON_STRING)) goto e_alloc_failure; flags |= FLAG_IN_STRING; string = ptop->u.string.ptr; string_length = 0; continue; case 't': if ((end - state.ptr) < 3 || *(++state.ptr) != 'r' || *(++state.ptr) != 'u' || *(++state.ptr) != 'e') { goto e_unknown_value; } if (!new_value(&state, &ptop, &proot, &palloc, JSON_BOOLEAN)) goto e_alloc_failure; boolean_sval_add(&state, ptop, 't'); boolean_sval_add(&state, ptop, 'r'); boolean_sval_add(&state, ptop, 'u'); boolean_sval_add(&state, ptop, 'e'); boolean_sval_end(&state, ptop); flags |= FLAG_NEXT; break; case 'f': if ((end - state.ptr) < 4 || *(++state.ptr) != 'a' || *(++state.ptr) != 'l' || *(++state.ptr) != 's' || *(++state.ptr) != 'e') { goto e_unknown_value; } if (!new_value(&state, &ptop, &proot, &palloc, JSON_BOOLEAN)) goto e_alloc_failure; boolean_sval_add(&state, ptop, 'f'); boolean_sval_add(&state, ptop, 'a'); boolean_sval_add(&state, ptop, 'l'); boolean_sval_add(&state, ptop, 's'); boolean_sval_add(&state, ptop, 'e'); boolean_sval_end(&state, ptop); flags |= FLAG_NEXT; break; case 'n': if ((end - state.ptr) < 3 || *(++state.ptr) != 'u' || *(++state.ptr) != 'l' || *(++state.ptr) != 'l') { goto e_unknown_value; } if (!new_value(&state, &ptop, &proot, &palloc, JSON_NULL)) goto e_alloc_failure; flags |= FLAG_NEXT; break; default: if (isdigit (b) || b == '-') { // Start of new number if (!new_value(&state, &ptop, &proot, &palloc, JSON_INTEGER)) goto e_alloc_failure; if (!state.first_pass) { while (isdigit(b) || b == '+' || b == '-' || b == 'e' || b == 'E' || b == '.') { switch (ptop->type) { case JSON_INTEGER: integer_sval_add(&state, ptop, b); break; case JSON_DOUBLE: dbl_sval_add(&state, ptop, b); break; default: break; } if ((++state.ptr) == end) { switch (ptop->type) { case JSON_INTEGER: integer_sval_end(&state, ptop); break; case JSON_DOUBLE: dbl_sval_end(&state, ptop); break; default: break; } b = 0; break; } b = *state.ptr; } flags |= FLAG_NEXT | FLAG_REPROC; break; } flags &= ~ (FLAG_NUM_NEGATIVE | FLAG_NUM_E | FLAG_NUM_E_GOT_SIGN | FLAG_NUM_E_NEGATIVE | FLAG_NUM_ZERO); num_digits = 0; num_fraction = 0; num_e = 0; if (b != '-') { flags |= FLAG_REPROC; break; } flags |= FLAG_NUM_NEGATIVE; continue; } else { sprintf(error, "Line %d column %d: Unexpected `0x%02x` when seeking value", LINE_AND_COL, (unsigned)b); goto e_failed; } } } } else { switch (ptop->type) { case JSON_OBJECT: switch (b) { WHITESPACE: continue; case '"': if (flags & FLAG_NEED_COMMA) { sprintf(error, "Line %d column %d: Expected , before \"", LINE_AND_COL); goto e_failed; } flags |= FLAG_IN_STRING; string = (json_char *) ptop->_reserved.p.pobject_mem; string_length = 0; break; case '}': flags = (flags & ~ FLAG_NEED_COMMA) | FLAG_NEXT; break; case ',': if (flags & FLAG_NEED_COMMA) { flags &= ~ FLAG_NEED_COMMA; break; } default: sprintf(error, "Line %d column %d: Unexpected `%c` in object", LINE_AND_COL, b); goto e_failed; } break; case JSON_INTEGER: case JSON_DOUBLE: if (isdigit(b)) { ++num_digits; if (ptop->type == JSON_INTEGER || flags & FLAG_NUM_E) { if (! (flags & FLAG_NUM_E)) { if (flags & FLAG_NUM_ZERO) { sprintf(error, "Line %d column %d: Unexpected `0` before `%c`", LINE_AND_COL, b); goto e_failed; } if (num_digits == 1 && b == '0') flags |= FLAG_NUM_ZERO; } else { flags |= FLAG_NUM_E_GOT_SIGN; num_e = (num_e * 10) + (b - '0'); continue; } integer_sval_add(&state, ptop, b); continue; } integer_sval_add(&state, ptop, b); num_fraction = (num_fraction * 10) + (b - '0'); continue; } if (b == '+' || b == '-') { if ( (flags & FLAG_NUM_E) && !(flags & FLAG_NUM_E_GOT_SIGN)) { flags |= FLAG_NUM_E_GOT_SIGN; if (b == '-') flags |= FLAG_NUM_E_NEGATIVE; continue; } } else if (b == '.' && ptop->type == JSON_INTEGER) { if (!num_digits) { sprintf (error, "Line %d column %d: Expected digit before `.`", LINE_AND_COL); goto e_failed; } ptop->type = JSON_DOUBLE; ptop->u.dbl.length = ptop->u.integer.length; ptop->u.dbl.sval = ptop->u.integer.sval; dbl_sval_add(&state, ptop, b); num_digits = 0; continue; } if (! (flags & FLAG_NUM_E)) { if (ptop->type == JSON_DOUBLE) { if (!num_digits) { sprintf(error, "Line %d column %d: Expected digit after `.`", LINE_AND_COL); goto e_failed; } } if (b == 'e' || b == 'E') { flags |= FLAG_NUM_E; if (ptop->type == JSON_INTEGER) { ptop->type = JSON_DOUBLE; ptop->u.dbl.length = ptop->u.integer.length; ptop->u.dbl.sval = ptop->u.integer.sval; dbl_sval_add(&state, ptop, b); } num_digits = 0; flags &= ~ FLAG_NUM_ZERO; continue; } } else { if (!num_digits) { sprintf(error, "Line %d column %d: Expected digit after `e`", LINE_AND_COL); goto e_failed; } } flags |= FLAG_NEXT | FLAG_REPROC; break; default: break; } } if (flags & FLAG_REPROC) { flags &= ~ FLAG_REPROC; --state.ptr; } if (flags & FLAG_NEXT) { flags = (flags & ~ FLAG_NEXT) | FLAG_NEED_COMMA; if (!ptop->parent) { /* root value done */ flags |= FLAG_DONE; continue; } if (ptop->parent->type == JSON_ARRAY) flags |= FLAG_SEEK_VALUE; if (!state.first_pass) { json_value_t * parent = ptop->parent; switch (parent->type) { case JSON_OBJECT: parent->u.object.p.values[parent->u.object.length].pvalue = ptop; break; case JSON_ARRAY: parent->u.array.values[parent->u.array.length] = ptop; break; default: break; } } if ((++ptop->parent->u.array.length) > state.uint_max) goto e_overflow; ptop = ptop->parent; continue; } } palloc = proot; } return proot; e_unknown_value: sprintf(error, "Line %d column %d: Unknown value", LINE_AND_COL); goto e_failed; e_alloc_failure: strcpy(error, "Memory allocation failure"); goto e_failed; e_overflow: sprintf(error, "Line %d column %d: Too long (caught overflow)", LINE_AND_COL); goto e_failed; e_failed: if (error_buf) { if (*error) strcpy(error_buf, error); else strcpy(error_buf, "Unknown error"); } if (state.first_pass) palloc = proot; while (palloc) { ptop = palloc->_reserved.next_alloc; free(palloc); palloc = ptop; } if (!state.first_pass) json_free_value(proot); return 0; } json_value_t * json_parse_for_unit_test( const json_char * json, json_char** ppend_of_item) { json_char error_buf[JSON_ERROR_MAX]; return json_parse(json, strlen(json), error_buf, ppend_of_item); } // ---------------------------------------------------------------- void json_free_value(json_value_t * pvalue) { json_value_t * cur_value; if (!pvalue) return; pvalue->parent = 0; while (pvalue) { switch (pvalue->type) { case JSON_ARRAY: if (!pvalue->u.array.length) { free(pvalue->u.array.values); break; } pvalue = pvalue->u.array.values[--pvalue->u.array.length]; continue; case JSON_OBJECT: if (!pvalue->u.object.length) { free(pvalue->u.object.p.values); break; } pvalue = pvalue->u.object.p.values[--pvalue->u.object.length].pvalue; continue; case JSON_STRING: free(pvalue->u.string.ptr); break; case JSON_BOOLEAN: free(pvalue->u.boolean.sval); break; case JSON_INTEGER: free(pvalue->u.integer.sval); break; case JSON_DOUBLE: free(pvalue->u.dbl.sval); break; default: break; } cur_value = pvalue; pvalue = pvalue->parent; free(cur_value); } } // ---------------------------------------------------------------- char* json_describe_type(json_type_t type) { switch(type) { case JSON_NONE: return "JSON_NONE"; break; case JSON_OBJECT: return "JSON_OBJECT"; break; case JSON_ARRAY: return "JSON_ARRAY"; break; case JSON_INTEGER: return "JSON_INTEGER"; break; case JSON_DOUBLE: return "JSON_DOUBLE"; break; case JSON_STRING: return "JSON_STRING"; break; case JSON_BOOLEAN: return "JSON_BOOLEAN"; break; case JSON_NULL: return "JSON_NULL"; break; default: return "???"; break; } } // ---------------------------------------------------------------- const char* leader = " "; static void leader_print(int depth) { for (int i = 0; i < depth; i++) printf("%s", leader); } static void json_print_non_recursive_aux(json_value_t* pvalue, int depth) { leader_print(depth); if (pvalue == NULL) { printf("pvalue=NULL\n"); return; } printf("type=%s", json_describe_type(pvalue->type)); switch(pvalue->type) { case JSON_NONE: break; case JSON_OBJECT: printf(",length=%d", pvalue->u.object.length); break; case JSON_ARRAY: printf(",length=%d", pvalue->u.object.length); break; case JSON_INTEGER: printf(",length=%d", pvalue->u.integer.length); printf(",sval=\"%s\"", pvalue->u.integer.sval); break; case JSON_DOUBLE: printf(",length=%d", pvalue->u.dbl.length); printf(",sval=\"%s\"", pvalue->u.dbl.sval); break; case JSON_STRING: printf(",length=%d", pvalue->u.string.length); printf(",ptr=\"%s\"", pvalue->u.string.ptr); break; case JSON_BOOLEAN: printf(",length=%d", pvalue->u.boolean.length); printf(",sval=\"%s\"", pvalue->u.boolean.sval); break; case JSON_NULL: break; } printf("\n"); } static void json_print_recursive_aux(json_value_t* pvalue, int depth) { json_print_non_recursive_aux(pvalue, depth); if (pvalue == NULL) return; if (pvalue->type == JSON_OBJECT) { for (int i = 0; i < pvalue->u.object.length; i++) { leader_print(depth+1); printf("key=\"%s\"\n", pvalue->u.object.p.values[i].name); json_print_recursive_aux(pvalue->u.object.p.values[i].pvalue, depth+1); } } else if (pvalue->type == JSON_ARRAY) { for (int i = 0; i < pvalue->u.array.length; i++) { leader_print(depth+1); printf("index=%d\n", i); json_print_recursive_aux(pvalue->u.array.values[i], depth+1); } } } // ---------------------------------------------------------------- void json_print_non_recursive(json_value_t* pvalue) { json_print_non_recursive_aux(pvalue, 0); } void json_print_recursive(json_value_t* pvalue) { json_print_recursive_aux(pvalue, 0); } miller-5.6.2/c/input/json_parser.h000066400000000000000000000100351354153536500171000ustar00rootroot00000000000000// ================================================================ // Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. // https://github.com/udp/json-parser // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE. // ================================================================ #ifndef JSON_PARSER_H #define JSON_PARSER_H #ifndef json_char #define json_char char #endif #ifndef json_int_t #ifndef _MSC_VER #include #define json_int_t int64_t #else #define json_int_t __int64 #endif #endif #include // ---------------------------------------------------------------- typedef enum { JSON_NONE, JSON_OBJECT, JSON_ARRAY, JSON_INTEGER, JSON_DOUBLE, JSON_STRING, JSON_BOOLEAN, JSON_NULL } json_type_t; extern const struct _json_value_t json_value_none; typedef struct _json_object_entry_t { json_char * name; unsigned int name_length; struct _json_value_t * pvalue; } json_object_entry_t; typedef struct _json_value_t { struct _json_value_t * parent; json_type_t type; union { struct { unsigned int length; union { json_object_entry_t * values; char* mem; } p; } object; struct { unsigned int length; struct _json_value_t ** values; } array; // For Miller we want floating-point numbers to be preserved as-is, with however many decimal places // the user's input does or does not have, until/unless we do any math which modifies values. struct { unsigned int length; char* sval; } boolean; struct { unsigned int length; char* sval; } integer; struct { unsigned int length; char* sval; } dbl; struct { unsigned int length; json_char * ptr; /* null-terminated */ } string; } u; union { struct _json_value_t * next_alloc; union { void * pvobject_mem; char * pobject_mem; } p; } _reserved; // Location of the value in the source JSON unsigned int line, col; } json_value_t; #define JSON_ERROR_MAX 128 // The end-of-item returned pointer enables us to handle input of the form // // { "a" : 1 } // { "b" : 2 } // { "c" : 3 } // // in addition to // // [ // { "a" : 1 } // { "b" : 2 } // { "c" : 3 } // ] // // This is in line with what jq can handle. In this case, json_parse will return // once for each top-level item and will give us back a pointer to the start of // the rest of the input stream, so we can call json_parse on the rest until it is // all exhausted. json_value_t * json_parse( const json_char * json, size_t length, char * error_buf, json_char** ppend_of_item); json_value_t * json_parse_for_unit_test( const json_char * json, json_char** ppend_of_item); void json_free_value(json_value_t *); char* json_describe_type(json_type_t type); void json_print_non_recursive(json_value_t* pvalue); void json_print_recursive(json_value_t* pvalue); #endif // JSON_PARSER_H miller-5.6.2/c/input/line_readers.c000066400000000000000000000134551354153536500172130ustar00rootroot00000000000000#include #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "input/line_readers.h" // ---------------------------------------------------------------- char* mlr_alloc_read_line_single_delimiter( FILE* fp, int delimiter, size_t* pold_then_new_strlen, int do_auto_line_term, context_t* pctx) { size_t linecap = power_of_two_above(*pold_then_new_strlen + 1); // +1 for null-terminator char* restrict line = mlr_malloc_or_die(linecap); char* restrict p = line; int reached_eof = FALSE; int c; int nread = 0; while (TRUE) { size_t offset = p - line; if (offset >= linecap) { linecap = linecap << 1; line = mlr_realloc_or_die(line, linecap); p = line + offset; } c = mlr_arch_getc(fp); if (c == EOF) { *p = 0; reached_eof = TRUE; break; } else if (c == delimiter) { nread++; *p = 0; break; } else { nread++; *(p++) = c; } } if (do_auto_line_term) { char* q = p - 1; if (q >= line && *q == '\r') { *q = 0; context_set_autodetected_crlf(pctx); p = q; } else { context_set_autodetected_lf(pctx); } } // linelen excludes line-ending characters. // nread includes line-ending characters. int linelen = p - line; if (nread == 0 && reached_eof) { free(line); line = NULL; linelen = 0; } *pold_then_new_strlen = linelen; return line; } // ---------------------------------------------------------------- char* mlr_alloc_read_line_multiple_delimiter( FILE* fp, char* delimiter, int delimiter_length, size_t* pold_then_new_strlen) { size_t linecap = power_of_two_above(*pold_then_new_strlen + 1); // +1 for null-terminator char* line = mlr_malloc_or_die(linecap); char* p = line; // points to null-terminator in (chomped) output string char* q = line; // points to end of line in (non-chomped) data read from file int reached_eof = FALSE; int c; int nread = 0; int dlm1 = delimiter_length - 1; char delimend = delimiter[dlm1]; while (TRUE) { size_t offset = q - line; if (offset >= linecap-1) { linecap = linecap << 1; line = mlr_realloc_or_die(line, linecap); q = line + offset; } c = mlr_arch_getc(fp); if (c == EOF) { *q = 0; reached_eof = TRUE; p = q; break; } else if (c == delimend) { // For efficiency, do a single-character test to see if we've seen // the last character in the line-ending sequence. If we have, then // strcmp back to see if we've seen the entire line-ending sequence. // // This function exists separately from in order to avoid the performance // penalty of this strcmp. nread++; *(q++) = c; p = q - delimiter_length; if (q - line >= delimiter_length && memcmp(p, delimiter, delimiter_length) == 0) { *p = 0; break; } } else { nread++; *(q++) = c; } } // linelen excludes line-ending characters. // nread includes line-ending characters. int linelen = p - line; if (nread == 0 && reached_eof) { free(line); line = NULL; linelen = 0; } *pold_then_new_strlen = linelen; return line; } // ---------------------------------------------------------------- char* mlr_alloc_read_line_single_delimiter_stripping_comments( FILE* fp, int delimiter, size_t* pold_then_new_strlen, int do_auto_line_term, comment_handling_t comment_handling, char* comment_string, context_t* pctx) { return mlr_alloc_read_line_single_delimiter_stripping_comments_aux( fp, delimiter, pold_then_new_strlen, do_auto_line_term, comment_handling, comment_string, NULL, pctx); } char* mlr_alloc_read_line_single_delimiter_stripping_comments_aux( FILE* fp, int delimiter, size_t* pold_then_new_strlen, int do_auto_line_term, comment_handling_t comment_handling, char* comment_string, int* pnum_lines_comment_skipped, context_t* pctx) { if (pnum_lines_comment_skipped != NULL) *pnum_lines_comment_skipped = 0; while (TRUE) { char* line = mlr_alloc_read_line_single_delimiter( fp, delimiter, pold_then_new_strlen, do_auto_line_term, pctx); if (line == NULL) { return line; } else if (string_starts_with(line, comment_string)) { if (pnum_lines_comment_skipped != NULL) (*pnum_lines_comment_skipped)++; if (comment_handling == PASS_COMMENTS) { fputs(line, stdout); if (do_auto_line_term) { fputs(pctx->auto_line_term, stdout); } else { fputc(delimiter, stdout); } fflush(stdout); } free(line); } else { return line; } } } // ---------------------------------------------------------------- char* mlr_alloc_read_line_multiple_delimiter_stripping_comments( FILE* fp, char* delimiter, int delimiter_length, size_t* pold_then_new_strlen, comment_handling_t comment_handling, char* comment_string) { return mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux( fp, delimiter, delimiter_length, pold_then_new_strlen, comment_handling, comment_string, NULL); } // ---------------------------------------------------------------- char* mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux( FILE* fp, char* delimiter, int delimiter_length, size_t* pold_then_new_strlen, comment_handling_t comment_handling, char* comment_string, int* pnum_lines_comment_skipped) { if (pnum_lines_comment_skipped != NULL) *pnum_lines_comment_skipped = 0; while (TRUE) { char* line = mlr_alloc_read_line_multiple_delimiter( fp, delimiter, delimiter_length, pold_then_new_strlen); if (line == NULL) { return line; } else if (string_starts_with(line, comment_string)) { if (pnum_lines_comment_skipped != NULL) (*pnum_lines_comment_skipped)++; if (comment_handling == PASS_COMMENTS) { fputs(line, stdout); fputs(delimiter, stdout); fflush(stdout); } free(line); } else { return line; } } } miller-5.6.2/c/input/line_readers.h000066400000000000000000000045311354153536500172130ustar00rootroot00000000000000#ifndef LINE_READERS_H #define LINE_READERS_H #include #include "cli/comment_handling.h" #include "lib/context.h" // Notes: // * The caller should free the return value. // * The line-terminator is not returned as part of the string. // * Null is returned at EOF. // * Simiar to getdelim but customized for Miller: in particular, support for autodetected line endings (LF/CRLF). // Also, exists on Windows MSYS2 where there isn't a getdelim. // * Line-length reuses previous length for initial buffer-size allocation. Pass MLR_ALLOC_READ_LINE_INITIAL_SIZE // on first call. On subsequent calls, buffer-size allocations will adapt to the file's line-lengths. #define MLR_ALLOC_READ_LINE_INITIAL_SIZE 128 char* mlr_alloc_read_line_single_delimiter( FILE* fp, int delimiter, size_t* pold_then_new_strlen, int do_auto_line_term, context_t* pctx); char* mlr_alloc_read_line_multiple_delimiter( FILE* fp, char* delimiter, int delimiter_length, size_t* pold_then_new_strlen); char* mlr_alloc_read_line_single_delimiter_stripping_comments( FILE* fp, int delimiter, size_t* pold_then_new_strlen, int do_auto_line_term, comment_handling_t comment_handling, char* comment_string, context_t* pctx); char* mlr_alloc_read_line_single_delimiter_stripping_comments_aux( FILE* fp, int delimiter, size_t* pold_then_new_strlen, int do_auto_line_term, comment_handling_t comment_handling, char* comment_string, int* pnum_lines_comment_skipped, // Lets caller track line numbers context_t* pctx); char* mlr_alloc_read_line_multiple_delimiter_stripping_comments( FILE* fp, char* delimiter, int delimiter_length, size_t* pold_then_new_strlen, comment_handling_t comment_handling, char* comment_string); char* mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux( FILE* fp, char* delimiter, int delimiter_length, size_t* pold_then_new_strlen, comment_handling_t comment_handling, char* comment_string, int* pnum_lines_comment_skipped); // Lets caller track line numbers #endif // LINE_READERS_H miller-5.6.2/c/input/lrec_reader.h000066400000000000000000000020711354153536500170230ustar00rootroot00000000000000#ifndef LREC_READER_H #define LREC_READER_H #include #include "lib/context.h" #include "containers/lrec.h" #include "input/file_reader_mmap.h" struct _lrec_reader_t; // forward reference for method declarations // The void* pvhandle is either FILE* for stdio readers or file_reader_mmap_state_t* for mmap readers. typedef void* lrec_reader_open_func_t(void* pvstate, char* prepipe, char* filename); typedef void lrec_reader_close_func_t(void* pvstate, void* pvhandle, char* prepipe); typedef lrec_t* lrec_reader_process_func_t(void* pvstate, void* pvhandle, context_t* pctx); typedef void lrec_reader_sof_func_t(void* pvstate, void* pvhandle); typedef void lrec_reader_free_func_t(struct _lrec_reader_t* preader); typedef struct _lrec_reader_t { void* pvstate; lrec_reader_open_func_t* popen_func; lrec_reader_close_func_t* pclose_func; lrec_reader_process_func_t* pprocess_func; lrec_reader_sof_func_t* psof_func; lrec_reader_free_func_t* pfree_func; // virtual destructor } lrec_reader_t; #endif // LREC_READER_H miller-5.6.2/c/input/lrec_reader_gen.c000066400000000000000000000050011354153536500176430ustar00rootroot00000000000000#include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_gen_state_t { char* field_name; unsigned long long start; unsigned long long stop; unsigned long long step; unsigned long long current_value; } lrec_reader_gen_state_t; static void lrec_reader_gen_free(lrec_reader_t* preader); static void* lrec_reader_gen_open(void* pvstate, char* prepipe, char* filename); static void lrec_reader_gen_close(void* pvstate, void* pvhandle, char* prepipe); static void lrec_reader_gen_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_gen_process(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_gen_alloc(char* field_name, unsigned long long start, unsigned long long stop, unsigned long long step) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_gen_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_gen_state_t)); pstate->field_name = field_name; pstate->start = start; pstate->stop = stop; pstate->step = step; pstate->current_value = start; plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = lrec_reader_gen_open; plrec_reader->pclose_func = lrec_reader_gen_close; plrec_reader->pprocess_func = lrec_reader_gen_process; plrec_reader->psof_func = lrec_reader_gen_sof; plrec_reader->pfree_func = lrec_reader_gen_free; return plrec_reader; } static void* lrec_reader_gen_open(void* pvstate, char* prepipe, char* filename) { return NULL; } static void lrec_reader_gen_close(void* pvstate, void* pvhandle, char* prepipe) { } static void lrec_reader_gen_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } static void lrec_reader_gen_sof(void* pvstate, void* pvhandle) { lrec_reader_gen_state_t* pstate = pvstate; pstate->current_value = pstate->start; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_gen_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_gen_state_t* pstate = pvstate; if (pstate->current_value > pstate->stop) { return NULL; } lrec_t* prec = lrec_unbacked_alloc(); char* key = pstate->field_name; char* value = mlr_alloc_string_from_ll(pstate->current_value); pstate->current_value += pstate->step; lrec_put(prec, key, value, FREE_ENTRY_VALUE); return prec; } miller-5.6.2/c/input/lrec_reader_in_memory.c000066400000000000000000000047241354153536500211030ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "input/file_reader_stdio.h" #include "input/lrec_readers.h" #include "containers/sllv.h" // lrec_reader_t impl for unit-test. typedef struct _lrec_reader_in_memory_state_t { sllv_t* precords; } lrec_reader_in_memory_state_t; static void lrec_reader_in_memory_free(lrec_reader_t* preader); static void lrec_reader_in_memory_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_in_memory_process(void* pvstate, void* pvhandle, context_t* pctx); static void* lrec_reader_in_memory_vopen(void* pvstate, char* prepipe, char* filename); static void lrec_reader_in_memory_vclose(void* pvstate, void* pvhandle, char* prepipe); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_in_memory_alloc(sllv_t* precords) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_in_memory_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_in_memory_state_t)); pstate->precords = precords; plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = lrec_reader_in_memory_vopen; plrec_reader->pclose_func = lrec_reader_in_memory_vclose; plrec_reader->pprocess_func = lrec_reader_in_memory_process; plrec_reader->psof_func = lrec_reader_in_memory_sof; plrec_reader->pfree_func = lrec_reader_in_memory_free; return plrec_reader; } static void lrec_reader_in_memory_free(lrec_reader_t* preader) { lrec_reader_in_memory_state_t* pstate = preader->pvstate; sllv_free(pstate->precords); free(pstate); free(preader); } // No-op for stateless readers such as this one. static void lrec_reader_in_memory_sof(void* pvstate, void* pvhandle) { } // ---------------------------------------------------------------- static lrec_t* lrec_reader_in_memory_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_in_memory_state_t* pstate = pvstate; if (pstate->precords->phead == NULL) return NULL; else return sllv_pop(pstate->precords); } static void* lrec_reader_in_memory_vopen(void* pvstate, char* prepipe, char* filename) { // popen is a stdio construct, not an mmap construct, and it can't be supported here. if (prepipe != NULL) { fprintf(stderr, "%s: coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } return NULL; } static void lrec_reader_in_memory_vclose(void* pvstate, void* pvhandle, char* prepipe) { } miller-5.6.2/c/input/lrec_reader_mmap_csv.c000066400000000000000000000465351354153536500207200ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/string_builder.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" #include "input/peek_file_reader.h" #include "containers/rslls.h" #include "containers/lhmslv.h" #include "containers/parse_trie.h" // Idea of pheader_keepers: each header_keeper object retains the input-line backing // and the slls_t for a CSV header line which is used by one or more CSV data // lines. Meanwhile some mappers retain input records from the entire data // stream, including header-schema changes in the input stream. This means we // need to keep headers intact as long as any lrecs are pointing to them. One // option is reference-counting which I experimented with; it was messy and // error-prone. The approach used here is to keep a hash map from header-schema // to header_keeper object. The current pheader_keeper is a pointer into one of // those. Then when the reader is freed, all the header-keepers are freed. // ---------------------------------------------------------------- #define STRING_BUILDER_INIT_SIZE 1024 #define IRS_TOKEN 0x2001 #define IFS_TOKEN 0x2002 #define DQUOTE_TOKEN 0x2003 #define DQUOTE_IRS_TOKEN 0x2004 #define DQUOTE_IRS2_TOKEN 0x2005 // alternate line-ending for autodetect LF/CRLF #define DQUOTE_IFS_TOKEN 0x2006 #define DQUOTE_DQUOTE_TOKEN 0x2007 // ---------------------------------------------------------------- typedef struct _lrec_reader_mmap_csv_state_t { // Input line number is not the same as the record-counter in context_t, // which counts records. long long ilno; char* eof; char* irs; char* ifs_eof; char* ifs; char* dquote; char* dquote_irs; char* dquote_irs2; char* dquote_ifs; char* dquote_eof; char* dquote_dquote; int do_auto_line_term; comment_handling_t comment_handling; char* comment_string; int comment_string_length; int dquotelen; rslls_t* pfields; string_builder_t* psb; parse_trie_t* pno_dquote_parse_trie; parse_trie_t* pdquote_parse_trie; int expect_header_line_next; int use_implicit_csv_header; int allow_ragged_csv_input; header_keeper_t* pheader_keeper; lhmslv_t* pheader_keepers; } lrec_reader_mmap_csv_state_t; static void lrec_reader_mmap_csv_free(lrec_reader_t* preader); static void lrec_reader_mmap_csv_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_mmap_csv_process(void* pvstate, void* pvhandle, context_t* pctx); static int lrec_reader_mmap_csv_get_fields(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pfields, file_reader_mmap_state_t* phandle, context_t* pctx); static lrec_t* paste_indices_and_data(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx); static lrec_t* paste_header_and_data_ragged(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx); static lrec_t* paste_header_and_data_rectangular(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_mmap_csv_alloc(char* irs, char* ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_mmap_csv_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_mmap_csv_state_t)); pstate->ilno = 0LL; pstate->do_auto_line_term = FALSE; if (streq(irs, "auto")) { pstate->do_auto_line_term = TRUE; irs = "\n"; } pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; pstate->comment_string_length = comment_string == NULL ? 0 : strlen(comment_string); pstate->eof = "\xff"; pstate->irs = irs; pstate->ifs = ifs; pstate->ifs_eof = mlr_paste_2_strings(pstate->ifs, "\xff"); pstate->dquote = "\""; pstate->dquote_ifs = mlr_paste_2_strings("\"", pstate->ifs); pstate->dquote_eof = "\"\xff"; pstate->dquote_dquote = "\"\""; pstate->dquotelen = strlen(pstate->dquote); pstate->pno_dquote_parse_trie = parse_trie_alloc(); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->irs, IRS_TOKEN); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->ifs, IFS_TOKEN); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->dquote, DQUOTE_TOKEN); pstate->pdquote_parse_trie = parse_trie_alloc(); if (pstate->do_auto_line_term) { pstate->dquote_irs = mlr_paste_2_strings("\"", "\n"); pstate->dquote_irs2 = mlr_paste_2_strings("\"", "\r\n"); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs2, DQUOTE_IRS2_TOKEN); } else { pstate->dquote_irs = mlr_paste_2_strings("\"", pstate->irs); pstate->dquote_irs2 = NULL; parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); } parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_ifs, DQUOTE_IFS_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_dquote, DQUOTE_DQUOTE_TOKEN); pstate->pfields = rslls_alloc(); pstate->psb = sb_alloc(STRING_BUILDER_INIT_SIZE); pstate->expect_header_line_next = use_implicit_csv_header ? FALSE : TRUE; pstate->use_implicit_csv_header = use_implicit_csv_header; pstate->allow_ragged_csv_input = allow_ragged_csv_input; pstate->pheader_keeper = NULL; pstate->pheader_keepers = lhmslv_alloc(); plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_mmap_vopen; plrec_reader->pclose_func = file_reader_mmap_vclose; plrec_reader->pprocess_func = lrec_reader_mmap_csv_process; plrec_reader->psof_func = lrec_reader_mmap_csv_sof; plrec_reader->pfree_func = lrec_reader_mmap_csv_free; return plrec_reader; } // ---------------------------------------------------------------- static void lrec_reader_mmap_csv_free(lrec_reader_t* preader) { lrec_reader_mmap_csv_state_t* pstate = preader->pvstate; for (lhmslve_t* pe = pstate->pheader_keepers->phead; pe != NULL; pe = pe->pnext) { header_keeper_t* pheader_keeper = pe->pvvalue; header_keeper_free(pheader_keeper); } lhmslv_free(pstate->pheader_keepers); parse_trie_free(pstate->pno_dquote_parse_trie); parse_trie_free(pstate->pdquote_parse_trie); rslls_free(pstate->pfields); sb_free(pstate->psb); free(pstate->ifs_eof); free(pstate->dquote_irs); free(pstate->dquote_irs2); free(pstate->dquote_ifs); free(pstate); free(preader); } // ---------------------------------------------------------------- static void lrec_reader_mmap_csv_sof(void* pvstate, void* pvhandle) { lrec_reader_mmap_csv_state_t* pstate = pvstate; pstate->ilno = 0LL; pstate->expect_header_line_next = pstate->use_implicit_csv_header ? FALSE : TRUE; // Strip UTF-8 BOM if any file_reader_mmap_state_t* phandle = pvhandle; if ((phandle->eof - phandle->sol) >= 3) { if (memcmp(phandle->sol, "\xef\xbb\xbf", 3) == 0) { phandle->sol += 3; } } } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_csv_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_mmap_csv_state_t* pstate = pvstate; file_reader_mmap_state_t* phandle = pvhandle; // Ingest the next header line, if expected if (pstate->expect_header_line_next) { while (TRUE) { if (!lrec_reader_mmap_csv_get_fields(pstate, pstate->pfields, phandle, pctx)) return NULL; pstate->ilno++; // We check for comments here rather than within the parser since it's important // for users to be able to comment out lines containing double-quoted newlines. if (pstate->comment_string != NULL && pstate->pfields->phead != NULL) { if (streqn(pstate->pfields->phead->value, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) { int i = 0; for ( rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { if (i > 0) fputs(pstate->ifs, stdout); fputs(pe->value, stdout); } if (pstate->do_auto_line_term) { fputs(pctx->auto_line_term, stdout); } else { fputs(pstate->irs, stdout); } } rslls_reset(pstate->pfields); continue; } } slls_t* pheader_fields = slls_alloc(); int i = 0; for (rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { if (*pe->value == 0) { fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } // Transfer pointer-free responsibility from the rslls to the // header fields in the header keeper slls_append(pheader_fields, pe->value, pe->free_flag); pe->free_flag = 0; } rslls_reset(pstate->pfields); pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); if (pstate->pheader_keeper == NULL) { pstate->pheader_keeper = header_keeper_alloc(NULL, pheader_fields); lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, NO_FREE); // freed by header-keeper } else { // Re-use the header-keeper in the header cache slls_free(pheader_fields); } pstate->expect_header_line_next = FALSE; break; } } // Ingest the next data line, if expected while (TRUE) { int rc = lrec_reader_mmap_csv_get_fields(pstate, pstate->pfields, phandle, pctx); pstate->ilno++; if (rc == FALSE) // EOF return NULL; // We check for comments here rather than within the parser since it's important // for users to be able to comment out lines containing double-quoted newlines. if (pstate->comment_string != NULL && pstate->pfields->phead != NULL) { if (streqn(pstate->pfields->phead->value, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) { int i = 0; for ( rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { if (i > 0) fputs(pstate->ifs, stdout); fputs(pe->value, stdout); } if (pstate->do_auto_line_term) { fputs(pctx->auto_line_term, stdout); } else { fputs(pstate->irs, stdout); } } rslls_reset(pstate->pfields); continue; } } lrec_t* prec = pstate->use_implicit_csv_header ? paste_indices_and_data(pstate, pstate->pfields, pctx) : pstate->allow_ragged_csv_input ? paste_header_and_data_ragged(pstate, pstate->pfields, pctx) : paste_header_and_data_rectangular(pstate, pstate->pfields, pctx); rslls_reset(pstate->pfields); return prec; } } static int lrec_reader_mmap_csv_get_fields(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pfields, file_reader_mmap_state_t* phandle, context_t* pctx) { int rc, token = 0, matchlen = 0, record_done = FALSE, field_done = FALSE; string_builder_t* psb = pstate->psb; if (phandle->sol >= phandle->eof) return FALSE; char* p = phandle->sol; char* e = p; // loop over fields in record record_done = FALSE; while (!record_done) { // Assumption is dquote is "\"" if (*e != pstate->dquote[0]) { // start of non-quoted field // Loop over characters in field field_done = FALSE; while (!field_done) { MLR_INTERNAL_CODING_ERROR_IF(e > phandle->eof); rc = parse_trie_match(pstate->pno_dquote_parse_trie, e, phandle->eof, &token, &matchlen); if (rc) { switch(token) { case IFS_TOKEN: // end of field *e = 0; rslls_append(pfields, p, NO_FREE, 0); p = e + matchlen; field_done = TRUE; break; case IRS_TOKEN: // end of record *e = 0; if (pstate->do_auto_line_term) { if (e > p && e[-1] == '\r') { e[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } rslls_append(pfields, p, NO_FREE, 0); p = e + matchlen; field_done = TRUE; record_done = TRUE; break; case DQUOTE_TOKEN: // CSV syntax error: fields containing quotes must be fully wrapped in quotes fprintf(stderr, "%s: syntax error: unwrapped double quote at line %lld.\n", MLR_GLOBALS.bargv0, pstate->ilno); exit(1); break; default: fprintf(stderr, "%s: internal coding error: unexpected token %d at line %lld.\n", MLR_GLOBALS.bargv0, token, pstate->ilno); exit(1); break; } e += matchlen; } else if (e >= phandle->eof) { // We read to end of file without seeing end of line. We can't always zero-poke a null character to // terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's // our copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking // at EOF is one byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(p, phandle->eof - p); rslls_append(pfields, copy, FREE_ENTRY_VALUE, 0); p = e + matchlen; field_done = TRUE; record_done = TRUE; break; } else { e++; } } } else { // start of quoted field e += pstate->dquotelen; p = e; // loop over characters in field field_done = FALSE; int contiguous = TRUE; // If there are no embedded double-double quotes, then the field value is a contiguous // array of bytes between the start and end double-quotes (non-inclusive). E.g. "ab,c" // has contents ab,c. In that case we can point the rslls at that range of bytes // with no data-copying. However, if there are embedded double-double quotes, then // we use the string-build logic to build up a dynamically allocated string. E.g. // "ab""c" becomes ab"c. while (!field_done) { if (e >= phandle->eof) { fprintf(stderr, "%s: unmatched double quote at line %lld.\n", MLR_GLOBALS.bargv0, pstate->ilno); exit(1); } rc = parse_trie_match(pstate->pdquote_parse_trie, e, phandle->eof, &token, &matchlen); if (rc) { switch(token) { case DQUOTE_IFS_TOKEN: // end of field *e = 0; if (contiguous) rslls_append(pfields, p, NO_FREE, FIELD_QUOTED_ON_INPUT); else rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); p = e + matchlen; field_done = TRUE; break; case DQUOTE_IRS_TOKEN: // end of record case DQUOTE_IRS2_TOKEN: // end of record *e = 0; if (pstate->do_auto_line_term) { if (e > p && e[-1] == '\r') { e[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } if (contiguous) rslls_append(pfields, p, NO_FREE, FIELD_QUOTED_ON_INPUT); else rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); p = e + matchlen; field_done = TRUE; record_done = TRUE; break; case DQUOTE_DQUOTE_TOKEN: // RFC-4180 CSV: "" inside a dquoted field is an escape for " if (contiguous) { // not anymore it isn't sb_append_char_range(psb, p, e); contiguous = FALSE; } else { sb_append_char(psb, pstate->dquote[0]); } break; default: fprintf(stderr, "%s: internal coding error: unexpected token %d at line %lld.\n", MLR_GLOBALS.bargv0, token, pstate->ilno); exit(1); break; } e += matchlen; } else { if (!contiguous) sb_append_char(psb, *e); e++; } } } } phandle->sol = e; return TRUE; } // ---------------------------------------------------------------- static lrec_t* paste_indices_and_data(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx) { int idx = 0; lrec_t* prec = lrec_unbacked_alloc(); for (rsllse_t* pd = pdata_fields->phead; idx < pdata_fields->length && pd != NULL; pd = pd->pnext) { idx++; char key_free_flags = 0; char* key = low_int_to_string(idx, &key_free_flags); char value_free_flags = pd->free_flag; // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, key, pd->value, key_free_flags | value_free_flags, pd->quote_flag); pd->free_flag = 0; } return prec; } // ---------------------------------------------------------------- static lrec_t* paste_header_and_data_ragged(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx) { lrec_t* prec = lrec_unbacked_alloc(); sllse_t* ph = pstate->pheader_keeper->pkeys->phead; rsllse_t* pd = pdata_fields->phead; int idx = 0; int hlen = pstate->pheader_keeper->pkeys->length; int dlen = pdata_fields->length; // Process fields up to minimum of header length and data length // Note that pd->pnext can be non-null due to pointer-reuse semantics of rslls, // so use list-length attributes for end-of-list check. for (idx = 0; idx < hlen && idx < dlen; idx++, ph = ph->pnext, pd = pd->pnext) { // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, ph->value, pd->value, pd->free_flag, pd->quote_flag); pd->free_flag = 0; } if (hlen > dlen) { // Header is longer. Empty-fill the remaining data fields. // E.g. if the input looks like // a,b,c,d <-- header // 1,2 <-- data // then put c="", d="". for ( ; idx < hlen; idx++, ph = ph->pnext) { lrec_put_ext(prec, ph->value, "", NO_FREE, 0); } } else { // Data is longer. Use positional indices to label the remaining data fields. for ( ; idx < dlen; idx++, pd = pd->pnext) { char key_free_flags = 0; char* key = low_int_to_string(idx+1, &key_free_flags); char value_free_flags = pd->free_flag; // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, key, pd->value, key_free_flags | value_free_flags, pd->quote_flag); pd->free_flag = 0; } } return prec; } // ---------------------------------------------------------------- static lrec_t* paste_header_and_data_rectangular(lrec_reader_mmap_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx) { if (pstate->pheader_keeper->pkeys->length != pdata_fields->length) { fprintf(stderr, "%s: Header/data length mismatch (%llu != %llu) at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pstate->pheader_keeper->pkeys->length, pdata_fields->length, pctx->filename, pstate->ilno); exit(1); } lrec_t* prec = lrec_unbacked_alloc(); sllse_t* ph = pstate->pheader_keeper->pkeys->phead; rsllse_t* pd = pdata_fields->phead; for ( ; ph != NULL && pd != NULL; ph = ph->pnext, pd = pd->pnext) { // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, ph->value, pd->value, pd->free_flag, pd->quote_flag); pd->free_flag = 0; } return prec; } miller-5.6.2/c/input/lrec_reader_mmap_csvlite.c000066400000000000000000000645771354153536500216040ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" // ---------------------------------------------------------------- // Multi-file cases: // // a,a a,b c d // -- FILE1: -- FILE1: -- FILE1: -- FILE1: // a,b,c a,b,c a,b,c a,b,c // 1,2,3 1,2,3 1,2,3 1,2,3 // 4,5,6 4,5,6 4,5,6 4,5,6 // -- FILE2: -- FILE2: // a,b,c d,e,f,g a,b,c d,e,f // 7,8,9 3,4,5,6 7,8,9 3,4,5 // --OUTPUT: --OUTPUT: --OUTPUT: --OUTPUT: // a,b,c a,b,c a,b,c a,b,c // 1,2,3 1,2,3 1,2,3 1,2,3 // 4,5,6 4,5,6 4,5,6 4,5,6 // 7,8,9 7,8,9 // d,e,f,g d,e,f // 3,4,5,6 3,4,5 // ---------------------------------------------------------------- typedef struct _lrec_reader_mmap_csvlite_state_t { long long ifnr; long long ilno; // Line-level, not record-level as in context_t char* irs; char* ifs; int irslen; int ifslen; int allow_repeat_ifs; int do_auto_line_term; int use_implicit_csv_header; int allow_ragged_csv_input; comment_handling_t comment_handling; char* comment_string; int comment_string_length; int expect_header_line_next; header_keeper_t* pheader_keeper; lhmslv_t* pheader_keepers; } lrec_reader_mmap_csvlite_state_t; static void lrec_reader_mmap_csvlite_free(lrec_reader_t* preader); static void lrec_reader_mmap_csvlite_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_mmap_csvlite_process_single_seps(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_csvlite_process_multi_seps(void* pvstate, void* pvhandle, context_t* pctx); static slls_t* lrec_reader_mmap_csvlite_get_header_single_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx); static slls_t* lrec_reader_mmap_csvlite_get_header_multi_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate); static lrec_t* lrec_reader_mmap_csvlite_get_record_single_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza); static lrec_t* lrec_reader_mmap_csvlite_get_record_multi_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza); static lrec_t* lrec_reader_mmap_csvlite_get_record_single_seps_implicit_header(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza); static lrec_t* lrec_reader_mmap_csvlite_get_record_multi_seps_implicit_header(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza); static int handle_comment_line_single_irs( file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, char irs); static int handle_comment_line_multi_irs( file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_mmap_csvlite_alloc(char* irs, char* ifs, int allow_repeat_ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_mmap_csvlite_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_mmap_csvlite_state_t)); pstate->ifnr = 0LL; pstate->irs = irs; pstate->ifs = ifs; pstate->irslen = strlen(irs); pstate->ifslen = strlen(ifs); pstate->allow_repeat_ifs = allow_repeat_ifs; pstate->do_auto_line_term = FALSE; pstate->use_implicit_csv_header = use_implicit_csv_header; pstate->allow_ragged_csv_input = allow_ragged_csv_input; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; pstate->comment_string_length = comment_string == NULL ? 0 : strlen(comment_string); pstate->expect_header_line_next = use_implicit_csv_header ? FALSE : TRUE; pstate->pheader_keeper = NULL; pstate->pheader_keepers = lhmslv_alloc(); plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_mmap_vopen; plrec_reader->pclose_func = file_reader_mmap_vclose; if (streq(irs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->do_auto_line_term = TRUE; pstate->irs = "\n"; pstate->irslen = 1; plrec_reader->pprocess_func = (pstate->ifslen == 1) ? lrec_reader_mmap_csvlite_process_single_seps : lrec_reader_mmap_csvlite_process_multi_seps; } else { plrec_reader->pprocess_func = (pstate->irslen == 1 && pstate->ifslen == 1) ? lrec_reader_mmap_csvlite_process_single_seps : lrec_reader_mmap_csvlite_process_multi_seps; } plrec_reader->psof_func = lrec_reader_mmap_csvlite_sof; plrec_reader->pfree_func = lrec_reader_mmap_csvlite_free; return plrec_reader; } // ---------------------------------------------------------------- static void lrec_reader_mmap_csvlite_free(lrec_reader_t* preader) { lrec_reader_mmap_csvlite_state_t* pstate = preader->pvstate; for (lhmslve_t* pe = pstate->pheader_keepers->phead; pe != NULL; pe = pe->pnext) { header_keeper_t* pheader_keeper = pe->pvvalue; header_keeper_free(pheader_keeper); } lhmslv_free(pstate->pheader_keepers); free(pstate); free(preader); } static void lrec_reader_mmap_csvlite_sof(void* pvstate, void* pvhandle) { lrec_reader_mmap_csvlite_state_t* pstate = pvstate; pstate->ifnr = 0LL; pstate->ilno = 0LL; pstate->expect_header_line_next = pstate->use_implicit_csv_header ? FALSE : TRUE; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_csvlite_process_single_seps(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_csvlite_state_t* pstate = pvstate; while (TRUE) { if (pstate->expect_header_line_next) { slls_t* pheader_fields = lrec_reader_mmap_csvlite_get_header_single_seps(phandle, pstate, pctx); if (pheader_fields == NULL) { // EOF return NULL; } for (sllse_t* pe = pheader_fields->phead; pe != NULL; pe = pe->pnext) { if (*pe->value == 0) { fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); if (pstate->pheader_keeper == NULL) { pstate->pheader_keeper = header_keeper_alloc(NULL, pheader_fields); lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, NO_FREE); // freed by header-keeper } else { // Re-use the header-keeper in the header cache slls_free(pheader_fields); } pstate->expect_header_line_next = FALSE; } int end_of_stanza = FALSE; lrec_t* prec = pstate->use_implicit_csv_header ? lrec_reader_mmap_csvlite_get_record_single_seps_implicit_header(phandle, pstate, pctx, pstate->pheader_keeper, &end_of_stanza) : lrec_reader_mmap_csvlite_get_record_single_seps(phandle, pstate, pctx, pstate->pheader_keeper, &end_of_stanza); if (end_of_stanza) { pstate->expect_header_line_next = TRUE; } else if (prec == NULL) { // EOF return NULL; } else { return prec; } } } static lrec_t* lrec_reader_mmap_csvlite_process_multi_seps(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_csvlite_state_t* pstate = pvstate; while (TRUE) { if (pstate->expect_header_line_next) { slls_t* pheader_fields = lrec_reader_mmap_csvlite_get_header_multi_seps(phandle, pstate); if (pheader_fields == NULL) // EOF return NULL; for (sllse_t* pe = pheader_fields->phead; pe != NULL; pe = pe->pnext) { if (*pe->value == 0) { fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); if (pstate->pheader_keeper == NULL) { pstate->pheader_keeper = header_keeper_alloc(NULL, pheader_fields); lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, NO_FREE); // freed by header-keeper } else { // Re-use the header-keeper in the header cache slls_free(pheader_fields); } pstate->expect_header_line_next = FALSE; } int end_of_stanza = FALSE; lrec_t* prec = pstate->use_implicit_csv_header ? lrec_reader_mmap_csvlite_get_record_multi_seps_implicit_header(phandle, pstate, pctx, pstate->pheader_keeper, &end_of_stanza) : lrec_reader_mmap_csvlite_get_record_multi_seps(phandle, pstate, pctx, pstate->pheader_keeper, &end_of_stanza); if (end_of_stanza) { pstate->expect_header_line_next = TRUE; } else if (prec == NULL) { // EOF return NULL; } else { return prec; } } } // ---------------------------------------------------------------- static slls_t* lrec_reader_mmap_csvlite_get_header_single_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx) { char irs = pstate->irs[0]; char ifs = pstate->ifs[0]; int allow_repeat_ifs = pstate->allow_repeat_ifs; slls_t* pheader_names = slls_alloc(); // Skip blank/comment lines and seek to header line while (TRUE) { if (phandle->sol < phandle->eof && *phandle->sol == irs) { phandle->sol++; pstate->ilno++; continue; } if (pstate->comment_string != NULL && handle_comment_line_single_irs(phandle, pstate, irs)) { continue; } break; } char* p = phandle->sol; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* osol = p; char* header_name = p; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { *p = 0; if (pstate->do_auto_line_term) { if (p > phandle->sol && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; pstate->ilno++; break; } else if (*p == ifs) { *p = 0; slls_append_no_free(pheader_names, header_name); p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } header_name = p; } else { p++; } } if (allow_repeat_ifs && *header_name == 0) { // OK } else if (p == osol) { // OK } else { slls_append_no_free(pheader_names, header_name); } return pheader_names; } static slls_t* lrec_reader_mmap_csvlite_get_header_multi_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate) { char* irs = pstate->irs; char* ifs = pstate->ifs; int irslen = pstate->irslen; int ifslen = pstate->ifslen; int allow_repeat_ifs = pstate->allow_repeat_ifs; // Skip blank/comment lines and seek to header line while (TRUE) { if ((phandle->eof - phandle->sol) >= irslen && streqn(phandle->sol, irs, irslen)) { phandle->sol += irslen; pstate->ilno++; continue; } if (pstate->comment_string != NULL && handle_comment_line_multi_irs(phandle, pstate)) { continue; } break; } slls_t* pheader_names = slls_alloc(); // Parse the header line char* p = phandle->sol; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* osol = p; char* header_name = p; for ( ; p < phandle->eof && *p; ) { if (streqn(p, irs, irslen)) { *p = 0; phandle->sol = p + irslen; pstate->ilno++; break; } else if (streqn(p, ifs, ifslen)) { *p = 0; slls_append_no_free(pheader_names, header_name); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } header_name = p; } else { p++; } } if (allow_repeat_ifs && *header_name == 0) { // OK } else if (p == osol) { // OK } else { slls_append_no_free(pheader_names, header_name); } return pheader_names; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_csvlite_get_record_single_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza) { char irs = pstate->irs[0]; char ifs = pstate->ifs[0]; int allow_repeat_ifs = pstate->allow_repeat_ifs; // Skip comment lines if (pstate->comment_string != NULL) { while (handle_comment_line_single_irs(phandle, pstate, irs)) ; } if (phandle->sol >= phandle->eof) return NULL; char* line = phandle->sol; lrec_t* prec = lrec_unbacked_alloc(); sllse_t* pe = pheader_keeper->pkeys->phead; char* p = line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char* value = p; int saw_rs = FALSE; int idx = 0; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { if (p == line) { *pend_of_stanza = TRUE; lrec_free(prec); return NULL; } *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; pstate->ilno++; saw_rs = TRUE; break; } else if (*p == ifs) { *p = 0; idx++; if (pe == NULL) { // Data line has more fields than the header line did if (pstate->allow_ragged_csv_input) { char free_flags = NO_FREE; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } else { key = pe->value; pe = pe->pnext; lrec_put(prec, key, value, NO_FREE); } p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (allow_repeat_ifs && *value == 0) return prec; char free_flags = NO_FREE; if (pe == NULL) { // Data line has more fields than the header line did if (pstate->allow_ragged_csv_input) { idx++; key = low_int_to_string(idx, &free_flags); } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } else { key = pe->value; } if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, NO_FREE); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } if (pe != NULL && pe->pnext != NULL) { // Header line has more fields than the data line did if (pstate->allow_ragged_csv_input) { for (pe = pe->pnext ; pe != NULL; pe = pe->pnext) { key = pe->value; lrec_put(prec, key, "", NO_FREE); } } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } return prec; } static lrec_t* lrec_reader_mmap_csvlite_get_record_multi_seps(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza) { // Skip comment lines if (pstate->comment_string != NULL) { while (handle_comment_line_multi_irs(phandle, pstate)) ; } if (phandle->sol >= phandle->eof) return NULL; char* irs = pstate->irs; char* ifs = pstate->ifs; int irslen = pstate->irslen; int ifslen = pstate->ifslen; int allow_repeat_ifs = pstate->allow_repeat_ifs; lrec_t* prec = lrec_unbacked_alloc(); char* line = phandle->sol; sllse_t* pe = pheader_keeper->pkeys->phead; char* p = line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; int saw_rs = FALSE; int idx = 0; for ( ; p < phandle->eof && *p; ) { if (streqn(p, irs, irslen)) { if (p == line) { *pend_of_stanza = TRUE; lrec_free(prec); return NULL; } *p = 0; phandle->sol = p + irslen; pstate->ilno++; saw_rs = TRUE; break; } else if (streqn(p, ifs, ifslen)) { *p = 0; idx++; if (pe == NULL) { // Data line has more fields than the header line did if (pstate->allow_ragged_csv_input) { char free_flags = NO_FREE; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } key = pe->value; pe = pe->pnext; lrec_put(prec, key, value, NO_FREE); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (allow_repeat_ifs && *value == 0) return prec; char free_flags = NO_FREE; if (pe == NULL) { // Data line has more fields than the header line did if (pstate->allow_ragged_csv_input) { idx++; key = low_int_to_string(idx, &free_flags); } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } else { key = pe->value; } if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, NO_FREE); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } if (pe != NULL && pe->pnext != NULL) { // Header line has more fields than the data line did if (pstate->allow_ragged_csv_input) { for (pe = pe->pnext ; pe != NULL; pe = pe->pnext) { key = pe->value; lrec_put(prec, key, "", NO_FREE); } } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } return prec; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_csvlite_get_record_single_seps_implicit_header(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza) { char irs = pstate->irs[0]; char ifs = pstate->ifs[0]; int allow_repeat_ifs = pstate->allow_repeat_ifs; // Skip comment lines if (pstate->comment_string != NULL) { while (handle_comment_line_single_irs(phandle, pstate, irs)) ; } if (phandle->sol >= phandle->eof) return NULL; lrec_t* prec = lrec_unbacked_alloc(); char* line = phandle->sol; char* p = line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char* value = p; char free_flags = NO_FREE; int idx = 0; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { if (p == line) { *pend_of_stanza = TRUE; lrec_free(prec); return NULL; } *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; pstate->ilno++; saw_rs = TRUE; break; } else if (*p == ifs) { *p = 0; key = low_int_to_string(++idx, &free_flags); lrec_put(prec, key, value, free_flags); p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (allow_repeat_ifs && *value == 0) return prec; key = low_int_to_string(++idx, &free_flags); if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, free_flags); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, free_flags|FREE_ENTRY_VALUE); } return prec; } static lrec_t* lrec_reader_mmap_csvlite_get_record_multi_seps_implicit_header(file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, context_t* pctx, header_keeper_t* pheader_keeper, int* pend_of_stanza) { // Skip comment lines if (pstate->comment_string != NULL) { while (handle_comment_line_multi_irs(phandle, pstate)) ; } if (phandle->sol >= phandle->eof) return NULL; char* irs = pstate->irs; char* ifs = pstate->ifs; int irslen = pstate->irslen; int ifslen = pstate->ifslen; int allow_repeat_ifs = pstate->allow_repeat_ifs; lrec_t* prec = lrec_unbacked_alloc(); char* line = phandle->sol; char* p = line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; char free_flags; int idx = 0; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (streqn(p, irs, irslen)) { if (p == line) { *pend_of_stanza = TRUE; lrec_free(prec); return NULL; } *p = 0; phandle->sol = p + irslen; pstate->ilno++; saw_rs = TRUE; break; } else if (streqn(p, ifs, ifslen)) { *p = 0; key = low_int_to_string(++idx, &free_flags); lrec_put(prec, key, value, free_flags); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (allow_repeat_ifs && *value == 0) return prec; key = low_int_to_string(++idx, &free_flags); if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, free_flags); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, free_flags|FREE_ENTRY_VALUE); } return prec; } // ---------------------------------------------------------------- static int handle_comment_line_single_irs( file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate, char irs) { if ((phandle->eof - phandle->sol) >= pstate->comment_string_length && streqn(phandle->sol, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->comment_string_length; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->comment_string_length; while (phandle->sol < phandle->eof && *phandle->sol != irs) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } if (phandle->sol < phandle->eof && *phandle->sol == irs) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } pstate->ilno++; return TRUE; } else { return FALSE; } } // ---------------------------------------------------------------- static int handle_comment_line_multi_irs( file_reader_mmap_state_t* phandle, lrec_reader_mmap_csvlite_state_t* pstate) { if ((phandle->eof - phandle->sol) >= pstate->comment_string_length && streqn(phandle->sol, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->comment_string_length; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->comment_string_length; while ((phandle->eof - phandle->sol >= pstate->irslen) && !streqn(phandle->sol, pstate->irs, pstate->irslen)) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } if ((phandle->eof - phandle->sol >= pstate->irslen) && streqn(phandle->sol, pstate->irs, pstate->irslen)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->irslen; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->irslen; } pstate->ilno++; return TRUE; } else { return FALSE; } } miller-5.6.2/c/input/lrec_reader_mmap_dkvp.c000066400000000000000000000526501354153536500210640ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_mmap_dkvp_state_t { char* irs; char* ifs; char* ips; int irslen; int ifslen; int ipslen; int allow_repeat_ifs; int do_auto_line_term; comment_handling_t comment_handling; char* comment_string; int comment_string_length; } lrec_reader_mmap_dkvp_state_t; static void lrec_reader_mmap_dkvp_free(lrec_reader_t* preader); static void lrec_reader_mmap_dkvp_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_mmap_dkvp_process_single_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_dkvp_process_single_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_dkvp_process_multi_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_dkvp_process_multi_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_parse_mmap_dkvp_single_irs_single_others(file_reader_mmap_state_t *phandle, char irs, char ifs, char ips, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_dkvp_single_irs_multi_others(file_reader_mmap_state_t *phandle, char irs, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_dkvp_multi_irs_single_others(file_reader_mmap_state_t *phandle, char ifs, char ips, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_dkvp_multi_irs_multi_others(file_reader_mmap_state_t *phandle, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx); static void skip_over_comment_lines_single_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_dkvp_state_t* pstate, char irs); static void skip_over_comment_lines_multi_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_dkvp_state_t* pstate, char* irs, int irslen); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_mmap_dkvp_alloc(char* irs, char* ifs, char* ips, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_mmap_dkvp_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_mmap_dkvp_state_t)); pstate->irs = irs; pstate->ifs = ifs; pstate->ips = ips; pstate->irslen = strlen(irs); pstate->ifslen = strlen(ifs); pstate->ipslen = strlen(ips); pstate->allow_repeat_ifs = allow_repeat_ifs; pstate->do_auto_line_term = FALSE; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; pstate->comment_string_length = comment_string == NULL ? 0 : strlen(comment_string); plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_mmap_vopen; plrec_reader->pclose_func = file_reader_mmap_vclose; if (streq(irs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->do_auto_line_term = TRUE; pstate->irs = "\n"; pstate->irslen = 1; plrec_reader->pprocess_func = (pstate->ifslen == 1 && pstate->ipslen == 1) ? lrec_reader_mmap_dkvp_process_single_irs_single_others : lrec_reader_mmap_dkvp_process_single_irs_multi_others; } else if (pstate->irslen == 1) { plrec_reader->pprocess_func = (pstate->ifslen == 1 && pstate->ipslen == 1) ? lrec_reader_mmap_dkvp_process_single_irs_single_others : lrec_reader_mmap_dkvp_process_single_irs_multi_others; } else { plrec_reader->pprocess_func = (pstate->ifslen == 1 && pstate->ipslen == 1) ? lrec_reader_mmap_dkvp_process_multi_irs_single_others : lrec_reader_mmap_dkvp_process_multi_irs_multi_others; } plrec_reader->psof_func = lrec_reader_mmap_dkvp_sof; plrec_reader->pfree_func = lrec_reader_mmap_dkvp_free; return plrec_reader; } static void lrec_reader_mmap_dkvp_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } // No-op for stateless readers such as this one. static void lrec_reader_mmap_dkvp_sof(void* pvstate, void* pvhandle) { } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_dkvp_process_single_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_dkvp_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_dkvp_single_irs_single_others(phandle, pstate->irs[0], pstate->ifs[0], pstate->ips[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_dkvp_process_single_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_dkvp_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_dkvp_single_irs_multi_others(phandle, pstate->irs[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_dkvp_process_multi_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_dkvp_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_dkvp_multi_irs_single_others(phandle, pstate->ifs[0], pstate->ips[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_dkvp_process_multi_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_dkvp_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_dkvp_multi_irs_multi_others(phandle, pstate, pctx); } // ---------------------------------------------------------------- static lrec_t* lrec_parse_mmap_dkvp_single_irs_single_others(file_reader_mmap_state_t *phandle, char irs, char ifs, char ips, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx) { if (pstate->comment_string != NULL) skip_over_comment_lines_single_irs(phandle, pstate, irs); if (phandle->sol >= phandle->eof) return NULL; char* line = phandle->sol; lrec_t* prec = lrec_unbacked_alloc(); int idx = 0; char* p = line; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } char* key = p; char* value = p; int saw_ps = FALSE; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; saw_rs = TRUE; break; } else if (*p == ifs) { saw_ps = FALSE; *p = 0; idx++; if (*key == 0 || value <= key) { // E.g the pair has no equals sign: "a" rather than "a=1" or // "a=". Here we use the positional index as the key. This way // DKVP is a generalization of NIDX. char free_flags = NO_FREE; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } p++; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } key = p; value = p; } else if (*p == ips && !saw_ps) { *p = 0; p++; value = p; saw_ps = TRUE; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *key == 0 && *value == 0) return prec; // There are two ways out of that loop: saw IRS, or saw end of file. if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); else lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { if (value >= phandle->eof) lrec_put(prec, key, "", NO_FREE); else lrec_put(prec, key, value, NO_FREE); } } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) { lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, low_int_to_string(idx, &free_flags), copy, free_flags | FREE_ENTRY_VALUE); } } else { if (value >= phandle->eof) { lrec_put(prec, key, "", NO_FREE); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } } } return prec; } static lrec_t* lrec_parse_mmap_dkvp_multi_irs_single_others(file_reader_mmap_state_t *phandle, char ifs, char ips, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx) { if (pstate->comment_string != NULL) skip_over_comment_lines_multi_irs(phandle, pstate, pstate->irs, pstate->irslen); if (phandle->sol >= phandle->eof) return NULL; char* line = phandle->sol; lrec_t* prec = lrec_unbacked_alloc(); int idx = 0; char* p = line; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } char* key = p; char* value = p; int saw_ps = FALSE; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (streqn(p, pstate->irs, pstate->irslen)) { *p = 0; phandle->sol = p + pstate->irslen; saw_rs = TRUE; break; } else if (*p == ifs) { saw_ps = FALSE; *p = 0; idx++; if (*key == 0 || value <= key) { // E.g the pair has no equals sign: "a" rather than "a=1" or // "a=". Here we use the positional index as the key. This way // DKVP is a generalization of NIDX. char free_flags = NO_FREE; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } p++; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } key = p; value = p; } else if (*p == ips && !saw_ps) { *p = 0; p++; value = p; saw_ps = TRUE; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *key == 0 && *value == 0) return prec; // There are two ways out of that loop: saw IRS, or saw end of file. if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); else lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { if (value >= phandle->eof) lrec_put(prec, key, "", NO_FREE); else lrec_put(prec, key, value, NO_FREE); } } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) { lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, low_int_to_string(idx, &free_flags), copy, free_flags | FREE_ENTRY_VALUE); } } else { if (value >= phandle->eof) { lrec_put(prec, key, "", NO_FREE); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } } } return prec; } static lrec_t* lrec_parse_mmap_dkvp_single_irs_multi_others(file_reader_mmap_state_t *phandle, char irs, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx) { if (pstate->comment_string != NULL) skip_over_comment_lines_single_irs(phandle, pstate, irs); if (phandle->sol >= phandle->eof) return NULL; char* line = phandle->sol; lrec_t* prec = lrec_unbacked_alloc(); int idx = 0; char* p = line; if (pstate->allow_repeat_ifs) { while (streqn(p, pstate->ifs, pstate->ifslen)) p += pstate->ifslen; } char* key = p; char* value = p; int saw_ps = FALSE; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; saw_rs = TRUE; break; } else if (streqn(p, pstate->ifs, pstate->ifslen)) { saw_ps = FALSE; *p = 0; idx++; if (*key == 0 || value <= key) { // E.g the pair has no equals sign: "a" rather than "a=1" or // "a=". Here we use the positional index as the key. This way // DKVP is a generalization of NIDX. char free_flags = NO_FREE; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } p += pstate->ifslen; if (pstate->allow_repeat_ifs) { while (streqn(p, pstate->ifs, pstate->ifslen)) p += pstate->ifslen; } key = p; value = p; } else if (streqn(p, pstate->ips, pstate->ipslen) && !saw_ps) { *p = 0; p += pstate->ipslen; value = p; saw_ps = TRUE; } else { p++; } } *p = 0; if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *key == 0 && *value == 0) return prec; // There are two ways out of that loop: saw IRS, or saw end of file. if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); else lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { if (value >= phandle->eof) lrec_put(prec, key, "", NO_FREE); else lrec_put(prec, key, value, NO_FREE); } } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) { lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, low_int_to_string(idx, &free_flags), copy, free_flags | FREE_ENTRY_VALUE); } } else { if (value >= phandle->eof) { lrec_put(prec, key, "", NO_FREE); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } } } return prec; } static lrec_t* lrec_parse_mmap_dkvp_multi_irs_multi_others(file_reader_mmap_state_t *phandle, lrec_reader_mmap_dkvp_state_t* pstate, context_t* pctx) { if (pstate->comment_string != NULL) skip_over_comment_lines_multi_irs(phandle, pstate, pstate->irs, pstate->irslen); if (phandle->sol >= phandle->eof) return NULL; char* line = phandle->sol; lrec_t* prec = lrec_unbacked_alloc(); int idx = 0; char* p = line; if (pstate->allow_repeat_ifs) { while (streqn(p, pstate->ifs, pstate->ifslen)) p += pstate->ifslen; } char* key = p; char* value = p; int saw_ps = FALSE; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (streqn(p, pstate->irs, pstate->irslen)) { *p = 0; phandle->sol = p + pstate->irslen; saw_rs = TRUE; break; } else if (streqn(p, pstate->ifs, pstate->ifslen)) { saw_ps = FALSE; *p = 0; idx++; if (*key == 0 || value <= key) { // E.g the pair has no equals sign: "a" rather than "a=1" or // "a=". Here we use the positional index as the key. This way // DKVP is a generalization of NIDX. char free_flags = NO_FREE; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } p += pstate->ifslen; if (pstate->allow_repeat_ifs) { while (streqn(p, pstate->ifs, pstate->ifslen)) p += pstate->ifslen; } key = p; value = p; } else if (streqn(p, pstate->ips, pstate->ipslen) && !saw_ps) { *p = 0; p += pstate->ipslen; value = p; saw_ps = TRUE; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *key == 0 && *value == 0) return prec; // There are two ways out of that loop: saw IRS, or saw end of file. if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); else lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { if (value >= phandle->eof) lrec_put(prec, key, "", NO_FREE); else lrec_put(prec, key, value, NO_FREE); } } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. if (*key == 0 || value <= key) { char free_flags = NO_FREE; if (value >= phandle->eof) { lrec_put(prec, low_int_to_string(idx, &free_flags), "", free_flags); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, low_int_to_string(idx, &free_flags), copy, free_flags | FREE_ENTRY_VALUE); } } else { if (value >= phandle->eof) { lrec_put(prec, key, "", NO_FREE); } else { char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } } } return prec; } // ---------------------------------------------------------------- static void skip_over_comment_lines_single_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_dkvp_state_t* pstate, char irs) { while ((phandle->eof - phandle->sol) >= pstate->comment_string_length && streqn(phandle->sol, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->comment_string_length; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->comment_string_length; while (phandle->sol < phandle->eof && *phandle->sol != irs) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } if (phandle->sol < phandle->eof && *phandle->sol == irs) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } } } static void skip_over_comment_lines_multi_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_dkvp_state_t* pstate, char* irs, int irslen) { while ((phandle->eof - phandle->sol) >= pstate->comment_string_length && streqn(phandle->sol, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->comment_string_length; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->comment_string_length; while ((phandle->eof - phandle->sol) >= irslen && !streqn(phandle->sol, irs, irslen)) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } if ((phandle->eof - phandle->sol) >= irslen && streqn(phandle->sol, irs, irslen)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < irslen; i++) fputc(phandle->sol[i], stdout); phandle->sol += irslen; } } } miller-5.6.2/c/input/lrec_reader_mmap_json.c000066400000000000000000000207621354153536500210700ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ // ================================================================ // Unlike other Miller record-readers, there is no streaming for JSON input: no // records are processed until EOF is seen. See also // https://github.com/johnkerl/miller/issues/99. // ================================================================ #include #include #include "cli/json_array_ingest.h" #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" #include "input/json_parser.h" #include "input/mlr_json_adapter.h" typedef struct _lrec_reader_mmap_json_state_t { // The list of top-level JSON objects is backed by the file contents. The records are in turn // backed by the top-level JSON objects. This means the latter should not be freed while // the records are in used. (This is done to reduce data copies, for performance: we can // manipulate pointers to strings rather than copying strings.) // // In particular, in the multifile-input case, we need to keep *all* parsed JSON (and // not free one file's data when we proceed to the next) since records with pointers // into the parsed JSON may still be in use -- e.g. mlr sort. sllv_t* ptop_level_json_objects; sllv_t* precords; char* input_json_flatten_separator; json_array_ingest_t json_array_ingest; char* specified_line_term; int do_auto_line_term; char* detected_line_term; comment_handling_t comment_handling; char* comment_string; } lrec_reader_mmap_json_state_t; static void lrec_reader_mmap_json_free(lrec_reader_t* preader); static void lrec_reader_mmap_json_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_mmap_json_process(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_mmap_json_alloc(char* input_json_flatten_separator, json_array_ingest_t json_array_ingest, char* line_term, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_mmap_json_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_mmap_json_state_t)); pstate->ptop_level_json_objects = sllv_alloc(); pstate->precords = sllv_alloc(); pstate->input_json_flatten_separator = input_json_flatten_separator; pstate->json_array_ingest = json_array_ingest; pstate->specified_line_term = line_term; pstate->do_auto_line_term = FALSE; pstate->detected_line_term = "\n"; // xxx adapt to MLR_GLOBALS/ctx-const for Windows port pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; if (streq(line_term, "auto")) { pstate->do_auto_line_term = TRUE; } plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_mmap_vopen; plrec_reader->pclose_func = file_reader_mmap_vclose; plrec_reader->pprocess_func = lrec_reader_mmap_json_process; plrec_reader->psof_func = lrec_reader_mmap_json_sof; plrec_reader->pfree_func = lrec_reader_mmap_json_free; return plrec_reader; } static void lrec_reader_mmap_json_free(lrec_reader_t* preader) { lrec_reader_mmap_json_state_t* pstate = preader->pvstate; for (sllve_t* pe = pstate->ptop_level_json_objects->phead; pe != NULL; pe = pe->pnext) { json_value_t* top_level_json_object = pe->pvvalue; json_free_value(top_level_json_object); } sllv_free(pstate->ptop_level_json_objects); pstate->ptop_level_json_objects = NULL; for (sllve_t* pf = pstate->precords->phead; pf != NULL; pf = pf->pnext) { lrec_t* prec = pf->pvvalue; lrec_free(prec); } sllv_free(pstate->precords); pstate->precords = NULL; free(pstate); free(preader); } // The mmap-JSON lrec-reader is non-streaming: we ingest all records here in the start-of-file hook. // Then in the process method we pop one lrec off the list at a time, until they are all exhausted. // This is in contrast to other Miller lrec-readers. // // It would be possible to extend the streaming framework to also have an end-of-file hook // which we could use here to free parsed-JSON data. However, we simply leverage the start-of-file // hook for the *next* file (if any) or the free method (if not): these free parsed-JSON structures // from the previous file (if any). static void lrec_reader_mmap_json_sof(void* pvstate, void* pvhandle) { lrec_reader_mmap_json_state_t* pstate = pvstate; file_reader_mmap_state_t* phandle = pvhandle; json_char* json_input = (json_char*)phandle->sol; json_value_t* parsed_top_level_json; json_char error_buf[JSON_ERROR_MAX]; // This enables us to handle input of the form // // { "a" : 1 } // { "b" : 2 } // { "c" : 3 } // // in addition to // // [ // { "a" : 1 } // { "b" : 2 } // { "c" : 3 } // ] // // This is in line with what jq can handle. In this case, json_parse will return // once for each top-level item and will give us back a pointer to the start of // the rest of the input stream, so we can call json_parse on the rest until it is // all exhausted. json_char* item_start = json_input; int length = phandle->eof - phandle->sol; char* detected_line_term = NULL; while (TRUE) { // Find the first line-ending sequence (if any): LF or CRLF. if (pstate->do_auto_line_term) { if (detected_line_term == NULL) { for (char* p = phandle->sol; p < phandle->eof; p++) { if (p[0] == '\n') { if (p > phandle->sol && p[-1] == '\r') { detected_line_term = "\r\n"; } else { detected_line_term = "\n"; } break; } } } } // Skip comments. For JSON, we ingest the entire blob, this is a matter of finding and iterating over lines. // Miller data comments must be at start of line. if (pstate->comment_handling != COMMENTS_ARE_DATA) { char* line_term = pstate->specified_line_term; if (pstate->do_auto_line_term && detected_line_term != NULL) line_term = detected_line_term; mlr_json_strip_comments(item_start, item_start + length, pstate->comment_handling, pstate->comment_string, line_term); } // Trim trailing whitespace. char* item_end = item_start + length; mlr_json_end_strip(item_start, &item_end); length = item_end - item_start; if (length == 0) break; parsed_top_level_json = json_parse(item_start, length, error_buf, &item_start); if (parsed_top_level_json == NULL) { fprintf(stderr, "%s: Unable to parse JSON data: %s\n", MLR_GLOBALS.bargv0, error_buf); exit(1); } sllv_append(pstate->ptop_level_json_objects, parsed_top_level_json); // The lrecs have their string pointers pointing into the parsed-JSON objects (for // efficiency) so it's important we not free the latter until our free method. if (!reference_json_objects_as_lrecs(pstate->precords, parsed_top_level_json, pstate->input_json_flatten_separator, pstate->json_array_ingest)) { fprintf(stderr, "%s: Unable to parse JSON data.\n", MLR_GLOBALS.bargv0); exit(1); } if (item_start == NULL) break; if (*item_start == 0) break; length -= (item_start - json_input); json_input = item_start; // json_parse goes up to the '\r' or '\n' (whichever is found first) on the first // parse, then keeps going from there on the next. E.g. in the CRLF case it // consumes the CR at the end of the first read and consumes the LF at the start // of the second, and so on. After the very last parse, we need to here consume // the final '\n' which is (by itself) a parse error. if (length == 1 && *(char*)json_input == '\n') { break; } } if (detected_line_term != NULL) { pstate->detected_line_term = detected_line_term; } } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_json_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_mmap_json_state_t* pstate = pvstate; if (pstate->do_auto_line_term) { context_set_autodetected_line_term(pctx, pstate->detected_line_term); } return sllv_pop(pstate->precords); } miller-5.6.2/c/input/lrec_reader_mmap_nidx.c000066400000000000000000000377131354153536500210650ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include "cli/comment_handling.h" #include "lib/mlrutil.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_mmap_nidx_state_t { char* irs; char* ifs; int irslen; int ifslen; int allow_repeat_ifs; int do_auto_line_term; comment_handling_t comment_handling; char* comment_string; int comment_string_length; } lrec_reader_mmap_nidx_state_t; static void lrec_reader_mmap_nidx_free(lrec_reader_t* preader); static void lrec_reader_mmap_nidx_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_mmap_nidx_process_single_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_nidx_process_single_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_nidx_process_multi_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_nidx_process_multi_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_parse_mmap_nidx_single_irs_single_ifs(file_reader_mmap_state_t *phandle, char irs, char ifs, lrec_reader_mmap_nidx_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_nidx_single_irs_multi_ifs(file_reader_mmap_state_t *phandle, char irs, lrec_reader_mmap_nidx_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_nidx_multi_irs_single_ifs(file_reader_mmap_state_t *phandle, char ifs, lrec_reader_mmap_nidx_state_t* pstate); static lrec_t* lrec_parse_mmap_nidx_multi_irs_multi_ifs(file_reader_mmap_state_t *phandle, lrec_reader_mmap_nidx_state_t* pstate); static void skip_over_comment_lines_single_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_nidx_state_t* pstate, char irs); static void skip_over_comment_lines_multi_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_nidx_state_t* pstate, char* irs, int irslen); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_mmap_nidx_alloc(char* irs, char* ifs, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_mmap_nidx_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_mmap_nidx_state_t)); pstate->irs = irs; pstate->ifs = ifs; pstate->irslen = strlen(pstate->irs); pstate->ifslen = strlen(pstate->ifs); pstate->allow_repeat_ifs = allow_repeat_ifs; pstate->do_auto_line_term = FALSE; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; pstate->comment_string_length = comment_string == NULL ? 0 : strlen(comment_string); plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_mmap_vopen; plrec_reader->pclose_func = file_reader_mmap_vclose; if (streq(irs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->do_auto_line_term = TRUE; pstate->irs = "\n"; pstate->irslen = 1; plrec_reader->pprocess_func = (pstate->ifslen == 1) ? lrec_reader_mmap_nidx_process_single_irs_single_ifs : lrec_reader_mmap_nidx_process_single_irs_multi_ifs; } else if (pstate->irslen == 1) { plrec_reader->pprocess_func = (pstate->ifslen == 1) ? lrec_reader_mmap_nidx_process_single_irs_single_ifs : lrec_reader_mmap_nidx_process_single_irs_multi_ifs; } else { plrec_reader->pprocess_func = (pstate->ifslen == 1) ? lrec_reader_mmap_nidx_process_multi_irs_single_ifs : lrec_reader_mmap_nidx_process_multi_irs_multi_ifs; } plrec_reader->psof_func = lrec_reader_mmap_nidx_sof; plrec_reader->pfree_func = lrec_reader_mmap_nidx_free; return plrec_reader; } static void lrec_reader_mmap_nidx_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } // No-op for stateless readers such as this one. static void lrec_reader_mmap_nidx_sof(void* pvstate, void* pvhandle) { } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_nidx_process_single_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_nidx_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_nidx_single_irs_single_ifs(phandle, pstate->irs[0], pstate->ifs[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_nidx_process_single_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_nidx_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_nidx_single_irs_multi_ifs(phandle, pstate->irs[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_nidx_process_multi_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_nidx_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_nidx_multi_irs_single_ifs(phandle, pstate->ifs[0], pstate); } static lrec_t* lrec_reader_mmap_nidx_process_multi_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_nidx_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_nidx_multi_irs_multi_ifs(phandle, pstate); } // ---------------------------------------------------------------- static lrec_t* lrec_parse_mmap_nidx_single_irs_single_ifs(file_reader_mmap_state_t *phandle, char irs, char ifs, lrec_reader_mmap_nidx_state_t* pstate, context_t* pctx) { if (pstate->comment_string != NULL) skip_over_comment_lines_single_irs(phandle, pstate, irs); if (phandle->sol >= phandle->eof) return NULL; char* line = phandle->sol; lrec_t* prec = lrec_unbacked_alloc(); int idx = 0; char free_flags = NO_FREE; char* p = line; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char* value = p; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; saw_rs = TRUE; break; } else if (*p == ifs) { *p = 0; idx++; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); p++; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *value == 0) return prec; key = low_int_to_string(idx, &free_flags); if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, free_flags); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, free_flags|FREE_ENTRY_VALUE); } return prec; } static lrec_t* lrec_parse_mmap_nidx_single_irs_multi_ifs(file_reader_mmap_state_t *phandle, char irs, lrec_reader_mmap_nidx_state_t* pstate, context_t* pctx) { if (pstate->comment_string != NULL) skip_over_comment_lines_single_irs(phandle, pstate, irs); lrec_t* prec = lrec_unbacked_alloc(); char* ifs = pstate->ifs; int ifslen = pstate->ifslen; char* line = phandle->sol; int idx = 0; char free_flags = NO_FREE; char* p = line; if (pstate->allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (*p == irs) { *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; saw_rs = TRUE; break; } else if (streqn(p, ifs, ifslen)) { *p = 0; idx++; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); p += ifslen; if (pstate->allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *value == 0) return prec; key = low_int_to_string(idx, &free_flags); if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, free_flags); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, free_flags|FREE_ENTRY_VALUE); } return prec; } static lrec_t* lrec_parse_mmap_nidx_multi_irs_single_ifs(file_reader_mmap_state_t *phandle, char ifs, lrec_reader_mmap_nidx_state_t* pstate) { if (pstate->comment_string != NULL) skip_over_comment_lines_multi_irs(phandle, pstate, pstate->irs, pstate->irslen); lrec_t* prec = lrec_unbacked_alloc(); char* line = phandle->sol; int idx = 0; char free_flags = NO_FREE; char* p = line; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char* value = p; int saw_rs = FALSE; char* irs = pstate->irs; int irslen = pstate->irslen; for ( ; p < phandle->eof && *p; ) { if (streqn(p, irs, irslen)) { *p = 0; phandle->sol = p + irslen; saw_rs = TRUE; break; } else if (*p == ifs) { *p = 0; idx++; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); p++; if (pstate->allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *value == 0) return prec; key = low_int_to_string(idx, &free_flags); if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, free_flags); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, free_flags|FREE_ENTRY_VALUE); } return prec; } static lrec_t* lrec_parse_mmap_nidx_multi_irs_multi_ifs(file_reader_mmap_state_t *phandle, lrec_reader_mmap_nidx_state_t* pstate) { if (pstate->comment_string != NULL) skip_over_comment_lines_multi_irs(phandle, pstate, pstate->irs, pstate->irslen); lrec_t* prec = lrec_unbacked_alloc(); char* line = phandle->sol; int idx = 0; char free_flags = NO_FREE; char* ifs = pstate->ifs; int ifslen = pstate->ifslen; char* irs = pstate->irs; int irslen = pstate->irslen; char* p = line; if (pstate->allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; int saw_rs = FALSE; for ( ; p < phandle->eof && *p; ) { if (streqn(p, irs, irslen)) { *p = 0; phandle->sol = p + irslen; saw_rs = TRUE; break; } else if (streqn(p, ifs, ifslen)) { *p = 0; idx++; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); p += ifslen; if (pstate->allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; idx++; if (pstate->allow_repeat_ifs && *value == 0) return prec; key = low_int_to_string(idx, &free_flags); if (saw_rs) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate the // C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, free_flags); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null character // to terminate the C string: if the file size is not a multiple of the OS page size it'll work (it's our // copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at EOF is one // byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, free_flags|FREE_ENTRY_VALUE); } return prec; } // ---------------------------------------------------------------- static void skip_over_comment_lines_single_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_nidx_state_t* pstate, char irs) { while ((phandle->eof - phandle->sol) >= pstate->comment_string_length && streqn(phandle->sol, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->comment_string_length; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->comment_string_length; while (phandle->sol < phandle->eof && *phandle->sol != irs) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } if (phandle->sol < phandle->eof && *phandle->sol == irs) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } } } static void skip_over_comment_lines_multi_irs( file_reader_mmap_state_t *phandle, lrec_reader_mmap_nidx_state_t* pstate, char* irs, int irslen) { while ((phandle->eof - phandle->sol) >= pstate->comment_string_length && streqn(phandle->sol, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < pstate->comment_string_length; i++) fputc(phandle->sol[i], stdout); phandle->sol += pstate->comment_string_length; while ((phandle->eof - phandle->sol) >= irslen && !streqn(phandle->sol, irs, irslen)) { if (pstate->comment_handling == PASS_COMMENTS) fputc(*phandle->sol, stdout); phandle->sol++; } if ((phandle->eof - phandle->sol) >= irslen && streqn(phandle->sol, irs, irslen)) { if (pstate->comment_handling == PASS_COMMENTS) for (int i = 0; i < irslen; i++) fputc(phandle->sol[i], stdout); phandle->sol += irslen; } } } miller-5.6.2/c/input/lrec_reader_mmap_xtab.c000066400000000000000000000370111354153536500210500ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "input/file_reader_mmap.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_mmap_xtab_state_t { char* ifs; char* ips; int ifslen; int ipslen; int allow_repeat_ips; int do_auto_line_term; } lrec_reader_mmap_xtab_state_t; static void lrec_reader_mmap_xtab_free(lrec_reader_t* preader); static void lrec_reader_mmap_xtab_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_mmap_xtab_process_single_ifs_single_ips(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_xtab_process_single_ifs_multi_ips(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_xtab_process_multi_ifs_single_ips(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_mmap_xtab_process_multi_ifs_multi_ips(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_parse_mmap_xtab_single_ifs_single_ips(file_reader_mmap_state_t* phandle, char ifs, char ips, lrec_reader_mmap_xtab_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_xtab_single_ifs_multi_ips(file_reader_mmap_state_t* phandle, char ifs, lrec_reader_mmap_xtab_state_t* pstate, context_t* pctx); static lrec_t* lrec_parse_mmap_xtab_multi_ifs_single_ips(file_reader_mmap_state_t* phandle, char ips, lrec_reader_mmap_xtab_state_t* pstate); static lrec_t* lrec_parse_mmap_xtab_multi_ifs_multi_ips(file_reader_mmap_state_t* phandle, lrec_reader_mmap_xtab_state_t* pstate); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_mmap_xtab_alloc(char* ifs, char* ips, int allow_repeat_ips, comment_handling_t comment_handling, char* comment_string) { // lrec_reader_alloc should have shunted away from us in this case. // (Interleaving blank-line handling, line-term autodetect, and comment-handling all in // the byte-at-a-time logic turned out to be a mess in this file. In the stdio implementation, // by constrast, it falls out rather easily.) if (comment_string != NULL) { fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_mmap_xtab_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_mmap_xtab_state_t)); pstate->ifs = ifs; pstate->ips = ips; pstate->ifslen = strlen(pstate->ifs); pstate->ipslen = strlen(pstate->ips); pstate->allow_repeat_ips = allow_repeat_ips; pstate->do_auto_line_term = FALSE; plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_mmap_vopen; plrec_reader->pclose_func = file_reader_mmap_vclose; if (streq(ifs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->do_auto_line_term = TRUE; pstate->ifs = "\n"; pstate->ifslen = 1; plrec_reader->pprocess_func = (pstate->ipslen == 1) ? lrec_reader_mmap_xtab_process_single_ifs_single_ips : lrec_reader_mmap_xtab_process_single_ifs_multi_ips; } else if (pstate->ifslen == 1) { plrec_reader->pprocess_func = (pstate->ipslen == 1) ? lrec_reader_mmap_xtab_process_single_ifs_single_ips : lrec_reader_mmap_xtab_process_single_ifs_multi_ips; } else { plrec_reader->pprocess_func = (pstate->ipslen == 1) ? lrec_reader_mmap_xtab_process_multi_ifs_single_ips : lrec_reader_mmap_xtab_process_multi_ifs_multi_ips; } plrec_reader->psof_func = lrec_reader_mmap_xtab_sof; plrec_reader->pfree_func = lrec_reader_mmap_xtab_free; return plrec_reader; } // ---------------------------------------------------------------- static void lrec_reader_mmap_xtab_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } static void lrec_reader_mmap_xtab_sof(void* pvstate, void* pvhandle) { } // ---------------------------------------------------------------- static lrec_t* lrec_reader_mmap_xtab_process_single_ifs_single_ips(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_xtab_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_xtab_single_ifs_single_ips(phandle, pstate->ifs[0], pstate->ips[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_xtab_process_single_ifs_multi_ips(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_xtab_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_xtab_single_ifs_multi_ips(phandle, pstate->ifs[0], pstate, pctx); } static lrec_t* lrec_reader_mmap_xtab_process_multi_ifs_single_ips(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_xtab_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_xtab_multi_ifs_single_ips(phandle, pstate->ips[0], pstate); } static lrec_t* lrec_reader_mmap_xtab_process_multi_ifs_multi_ips(void* pvstate, void* pvhandle, context_t* pctx) { file_reader_mmap_state_t* phandle = pvhandle; lrec_reader_mmap_xtab_state_t* pstate = pvstate; if (phandle->sol >= phandle->eof) return NULL; else return lrec_parse_mmap_xtab_multi_ifs_multi_ips(phandle, pstate); } // ---------------------------------------------------------------- static lrec_t* lrec_parse_mmap_xtab_single_ifs_single_ips(file_reader_mmap_state_t* phandle, char ifs, char ips, lrec_reader_mmap_xtab_state_t* pstate, context_t* pctx) { if (pstate->do_auto_line_term) { // Skip over otherwise empty LF-only or CRLF-only lines. while (phandle->sol < phandle->eof) { if (*phandle->sol == '\n') { context_set_autodetected_lf(pctx); phandle->sol += 1; } else if (*phandle->sol == '\r') { char* q = phandle->sol + 1; if (q < phandle->eof && *q == '\n') { context_set_autodetected_crlf(pctx); phandle->sol += 2; } else { phandle->sol += 1; } } else { break; } } } else { // Skip over otherwise empty IFS-only lines while (phandle->sol < phandle->eof && *phandle->sol == ifs) { phandle->sol++; } } if (phandle->sol >= phandle->eof) return NULL; lrec_t* prec = lrec_unbacked_alloc(); // Loop over fields, one per line while (TRUE) { if (phandle->sol >= phandle->eof) break; char* line = phandle->sol; char* key = line; char* value = ""; char* p; // Construct one field int saw_eol = FALSE; for (p = line; p < phandle->eof && *p; ) { if (*p == ifs) { *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; saw_eol = TRUE; break; } else if (*p == ips) { key = line; *p = 0; p++; if (pstate->allow_repeat_ips) { while (*p == ips) p++; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (saw_eol) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate // the C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, NO_FREE); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null // character to terminate the C string: if the file size is not a multiple of the OS page size it'll work // (it's our copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at // EOF is one byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } if (phandle->sol >= phandle->eof) break; if (pstate->do_auto_line_term) { char* p = phandle->sol; char* q = phandle->sol + 1; if (*p == '\n') break; if (q < phandle->eof && *p == '\r' && *q == '\n') break; } else { if (*phandle->sol == ifs) break; } } if (prec->field_count == 0) { lrec_free(prec); return NULL; } else { return prec; } } static lrec_t* lrec_parse_mmap_xtab_single_ifs_multi_ips(file_reader_mmap_state_t* phandle, char ifs, lrec_reader_mmap_xtab_state_t* pstate, context_t* pctx) { if (pstate->do_auto_line_term) { // Skip over otherwise empty LF-only or CRLF-only lines. while (phandle->sol < phandle->eof) { if (*phandle->sol == '\n') { context_set_autodetected_lf(pctx); phandle->sol += 1; } else if (*phandle->sol == '\r') { char* q = phandle->sol + 1; if (q < phandle->eof && *q == '\n') { context_set_autodetected_crlf(pctx); phandle->sol += 2; } else { phandle->sol += 1; } } else { break; } } } else { // Skip over otherwise empty IFS-only lines. while (phandle->sol < phandle->eof && *phandle->sol == ifs) phandle->sol++; } if (phandle->sol >= phandle->eof) return NULL; char* ips = pstate->ips; int ipslen = pstate->ipslen; lrec_t* prec = lrec_unbacked_alloc(); // Loop over fields, one per line while (TRUE) { if (phandle->sol >= phandle->eof) break; char* line = phandle->sol; char* key = line; char* value = ""; char* p; // Construct one field int saw_eol = FALSE; for (p = line; p < phandle->eof && *p; ) { if (*p == ifs) { *p = 0; if (pstate->do_auto_line_term) { if (p > line && p[-1] == '\r') { p[-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } phandle->sol = p+1; saw_eol = TRUE; break; } else if (streqn(p, ips, ipslen)) { key = line; *p = 0; p += ipslen; if (pstate->allow_repeat_ips) { while (streqn(p, ips, ipslen)) p += ipslen; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (saw_eol) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate // the C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, NO_FREE); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null // character to terminate the C string: if the file size is not a multiple of the OS page size it'll work // (it's our copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at // EOF is one byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } if (phandle->sol >= phandle->eof || *phandle->sol == ifs) break; } if (prec->field_count == 0) { lrec_free(prec); return NULL; } else { return prec; } } static lrec_t* lrec_parse_mmap_xtab_multi_ifs_single_ips(file_reader_mmap_state_t* phandle, char ips, lrec_reader_mmap_xtab_state_t* pstate) { char* ifs = pstate->ifs; int ifslen = pstate->ifslen; // Skip blank lines while (phandle->eof - phandle->sol >= ifslen && streqn(phandle->sol, ifs, ifslen)) { phandle->sol += ifslen; } if (phandle->sol >= phandle->eof) return NULL; lrec_t* prec = lrec_unbacked_alloc(); // Loop over fields, one per line while (TRUE) { if (phandle->sol >= phandle->eof) break; char* line = phandle->sol; char* key = line; char* value = ""; char* p; // Construct one field int saw_eol = FALSE; for (p = line; p < phandle->eof && *p; ) { if (streqn(p, ifs, ifslen)) { *p = 0; phandle->sol = p + ifslen; saw_eol = TRUE; break; } else if (*p == ips) { key = line; *p = 0; p++; if (pstate->allow_repeat_ips) { while (*p == ips) p++; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (saw_eol) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate // the C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, NO_FREE); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null // character to terminate the C string: if the file size is not a multiple of the OS page size it'll work // (it's our copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at // EOF is one byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } if (phandle->sol >= phandle->eof || streqn(phandle->sol, ifs, ifslen)) break; } if (prec->field_count == 0) { lrec_free(prec); return NULL; } else { return prec; } } static lrec_t* lrec_parse_mmap_xtab_multi_ifs_multi_ips(file_reader_mmap_state_t* phandle, lrec_reader_mmap_xtab_state_t* pstate) { char* ips = pstate->ips; int ipslen = pstate->ipslen; char* ifs = pstate->ifs; int ifslen = pstate->ifslen; // Skip blank lines while (phandle->eof - phandle->sol >= ifslen && streqn(phandle->sol, ifs, ifslen)) { phandle->sol += ifslen; } if (phandle->sol >= phandle->eof) return NULL; lrec_t* prec = lrec_unbacked_alloc(); // Loop over fields, one per line while (TRUE) { if (phandle->sol >= phandle->eof) break; char* line = phandle->sol; char* key = line; char* value = ""; char* p; // Construct one field int saw_eol = FALSE; for (p = line; p < phandle->eof && *p; ) { if (streqn(p, ifs, ifslen)) { *p = 0; phandle->sol = p + ifslen; saw_eol = TRUE; break; } else if (streqn(p, ips, ipslen)) { key = line; *p = 0; p += ipslen; if (pstate->allow_repeat_ips) { while (streqn(p, ips, ipslen)) p += ipslen; } value = p; } else { p++; } } if (p >= phandle->eof) phandle->sol = p+1; if (saw_eol) { // Easy and simple case: we read until end of line. We zero-poked the irs to a null character to terminate // the C string so it's OK to retain a pointer to that. lrec_put(prec, key, value, NO_FREE); } else { // Messier case: we read to end of file without seeing end of line. We can't always zero-poke a null // character to terminate the C string: if the file size is not a multiple of the OS page size it'll work // (it's our copy-on-write memory). But if the file size is a multiple of the page size, then zero-poking at // EOF is one byte past the page and that will segv us. char* copy = mlr_alloc_string_from_char_range(value, phandle->eof - value); lrec_put(prec, key, copy, FREE_ENTRY_VALUE); } if (phandle->sol >= phandle->eof || streqn(phandle->sol, ifs, ifslen)) break; } if (prec->field_count == 0) { lrec_free(prec); return NULL; } else { return prec; } } miller-5.6.2/c/input/lrec_reader_stdio_csv.c000066400000000000000000000550631354153536500211040ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/string_builder.h" #include "input/file_reader_stdio.h" #include "input/byte_readers.h" #include "input/lrec_readers.h" #include "input/peek_file_reader.h" #include "containers/rslls.h" #include "containers/lhmslv.h" #include "containers/parse_trie.h" // Idea of pheader_keepers: each header_keeper object retains the input-line backing // and the slls_t for a CSV header line which is used by one or more CSV data // lines. Meanwhile some mappers retain input records from the entire data // stream, including header-schema changes in the input stream. This means we // need to keep headers intact as long as any lrecs are pointing to them. One // option is reference-counting which I experimented with; it was messy and // error-prone. The approach used here is to keep a hash map from header-schema // to header_keeper object. The current pheader_keeper is a pointer into one of // those. Then when the reader is freed, all the header-keepers are freed. // ---------------------------------------------------------------- #define STRING_BUILDER_INIT_SIZE 1024 #define EOF_TOKEN 0x2000 #define IRS_TOKEN 0x2001 #define IFS_EOF_TOKEN 0x2002 #define IFS_TOKEN 0x2003 #define DQUOTE_TOKEN 0x2004 #define DQUOTE_IRS_TOKEN 0x2005 #define DQUOTE_IRS2_TOKEN 0x2006 // alternate line-ending for autodetect LF/CRLF #define DQUOTE_IFS_TOKEN 0x2007 #define DQUOTE_EOF_TOKEN 0x2008 #define DQUOTE_DQUOTE_TOKEN 0x2009 #define UTF8_BOM_TOKEN 0x200b #define UTF8_BOM "\xef\xbb\xbf" #define UTF8_BOM_LENGTH 3 //#define DEBUG_PARSER // ---------------------------------------------------------------- typedef struct _lrec_reader_stdio_csv_state_t { // Input line number is not the same as the record-counter in context_t, // which counts records. long long ilno; char* eof; char* irs; char* ifs_eof; char* ifs; int do_auto_line_term; comment_handling_t comment_handling; char* comment_string; int comment_string_length; char* dquote; char* dquote_irs; char* dquote_irs2; char* dquote_ifs; char* dquote_eof; char* dquote_dquote; int dquotelen; rslls_t* pfields; string_builder_t* psb; byte_reader_t* pbr; peek_file_reader_t* pfr; parse_trie_t* putf8_bom_parse_trie; parse_trie_t* pno_dquote_parse_trie; parse_trie_t* pdquote_parse_trie; int expect_header_line_next; int use_implicit_csv_header; int allow_ragged_csv_input; header_keeper_t* pheader_keeper; lhmslv_t* pheader_keepers; } lrec_reader_stdio_csv_state_t; static void lrec_reader_stdio_csv_free(lrec_reader_t* preader); static void lrec_reader_stdio_csv_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_stdio_csv_process(void* pvstate, void* pvhandle, context_t* pctx); static int lrec_reader_stdio_csv_get_fields(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pfields, context_t* pctx, int is_header); static lrec_t* paste_indices_and_data(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx); static lrec_t* paste_header_and_data_ragged(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx); static lrec_t* paste_header_and_data_rectangular(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx); static void* lrec_reader_stdio_csv_open(void* pvstate, char* prepipe, char* filename); static void lrec_reader_stdio_csv_close(void* pvstate, void* pvhandle, char* prepipe); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_stdio_csv_alloc(char* irs, char* ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_stdio_csv_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_csv_state_t)); pstate->ilno = 0LL; pstate->do_auto_line_term = FALSE; if (streq(irs, "auto")) { irs = "\n"; pstate->do_auto_line_term = TRUE; } pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; pstate->comment_string_length = comment_string == NULL ? 0 : strlen(comment_string); pstate->eof = "\xff"; pstate->irs = irs; pstate->ifs = ifs; pstate->ifs_eof = mlr_paste_2_strings(pstate->ifs, "\xff"); pstate->dquote = "\""; pstate->dquote_ifs = mlr_paste_2_strings("\"", pstate->ifs); pstate->dquote_eof = "\"\xff"; pstate->dquote_dquote = "\"\""; pstate->dquotelen = strlen(pstate->dquote); // Parse trie for UTF-8 BOM pstate->putf8_bom_parse_trie = parse_trie_alloc(); parse_trie_add_string(pstate->putf8_bom_parse_trie, UTF8_BOM, UTF8_BOM_TOKEN); // Parse trie for non-double-quoted fields pstate->pno_dquote_parse_trie = parse_trie_alloc(); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->eof, EOF_TOKEN); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->irs, IRS_TOKEN); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->ifs_eof, IFS_EOF_TOKEN); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->ifs, IFS_TOKEN); parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->dquote, DQUOTE_TOKEN); // Parse trie for double-quoted fields pstate->pdquote_parse_trie = parse_trie_alloc(); if (pstate->do_auto_line_term) { pstate->dquote_irs = mlr_paste_2_strings("\"", "\n"); pstate->dquote_irs2 = mlr_paste_2_strings("\"", "\r\n"); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs2, DQUOTE_IRS2_TOKEN); } else { pstate->dquote_irs = mlr_paste_2_strings("\"", pstate->irs); pstate->dquote_irs2 = NULL; parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); } parse_trie_add_string(pstate->pdquote_parse_trie, pstate->eof, EOF_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_ifs, DQUOTE_IFS_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_eof, DQUOTE_EOF_TOKEN); parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_dquote, DQUOTE_DQUOTE_TOKEN); pstate->pfields = rslls_alloc(); pstate->psb = sb_alloc(STRING_BUILDER_INIT_SIZE); pstate->pbr = stdio_byte_reader_alloc(); pstate->pfr = pfr_alloc(pstate->pbr, mlr_imax3( pstate->putf8_bom_parse_trie->maxlen, pstate->pno_dquote_parse_trie->maxlen, pstate->pdquote_parse_trie->maxlen)); pstate->expect_header_line_next = use_implicit_csv_header ? FALSE : TRUE; pstate->use_implicit_csv_header = use_implicit_csv_header; pstate->allow_ragged_csv_input = allow_ragged_csv_input; pstate->pheader_keeper = NULL; pstate->pheader_keepers = lhmslv_alloc(); plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = lrec_reader_stdio_csv_open; plrec_reader->pclose_func = lrec_reader_stdio_csv_close; plrec_reader->pprocess_func = lrec_reader_stdio_csv_process; plrec_reader->psof_func = lrec_reader_stdio_csv_sof; plrec_reader->pfree_func = lrec_reader_stdio_csv_free; return plrec_reader; } // ---------------------------------------------------------------- static void lrec_reader_stdio_csv_free(lrec_reader_t* preader) { lrec_reader_stdio_csv_state_t* pstate = preader->pvstate; for (lhmslve_t* pe = pstate->pheader_keepers->phead; pe != NULL; pe = pe->pnext) { header_keeper_t* pheader_keeper = pe->pvvalue; header_keeper_free(pheader_keeper); } lhmslv_free(pstate->pheader_keepers); pfr_free(pstate->pfr); parse_trie_free(pstate->putf8_bom_parse_trie); parse_trie_free(pstate->pno_dquote_parse_trie); parse_trie_free(pstate->pdquote_parse_trie); rslls_free(pstate->pfields); stdio_byte_reader_free(pstate->pbr); sb_free(pstate->psb); free(pstate->ifs_eof); free(pstate->dquote_irs); free(pstate->dquote_irs2); free(pstate->dquote_ifs); free(pstate); free(preader); } // ---------------------------------------------------------------- static void lrec_reader_stdio_csv_sof(void* pvstate, void* pvhandle) { lrec_reader_stdio_csv_state_t* pstate = pvstate; pstate->ilno = 0LL; pstate->expect_header_line_next = pstate->use_implicit_csv_header ? FALSE : TRUE; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_csv_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_csv_state_t* pstate = pvstate; // Ingest the next header line, if expected if (pstate->expect_header_line_next) { while (TRUE) { if (!lrec_reader_stdio_csv_get_fields(pstate, pstate->pfields, pctx, TRUE)) return NULL; pstate->ilno++; // We check for comments here rather than within the parser since it's important // for users to be able to comment out lines containing double-quoted newlines. if (pstate->comment_string != NULL && pstate->pfields->phead != NULL) { if (streqn(pstate->pfields->phead->value, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) { int i = 0; for ( rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { if (i > 0) fputs(pstate->ifs, stdout); fputs(pe->value, stdout); } if (pstate->do_auto_line_term) { fputs(pctx->auto_line_term, stdout); } else { fputs(pstate->irs, stdout); } } rslls_reset(pstate->pfields); continue; } } slls_t* pheader_fields = slls_alloc(); int i = 0; for (rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { if (*pe->value == 0) { fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } // Transfer pointer-free responsibility from the rslls to the // header fields in the header keeper slls_append(pheader_fields, pe->value, pe->free_flag); pe->free_flag = 0; } rslls_reset(pstate->pfields); pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); if (pstate->pheader_keeper == NULL) { pstate->pheader_keeper = header_keeper_alloc(NULL, pheader_fields); lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, NO_FREE); // freed by header-keeper } else { // Re-use the header-keeper in the header cache slls_free(pheader_fields); } pstate->expect_header_line_next = FALSE; break; } } // Ingest the next data line, if expected while (TRUE) { int rc = lrec_reader_stdio_csv_get_fields(pstate, pstate->pfields, pctx, FALSE); pstate->ilno++; if (rc == FALSE) // EOF return NULL; // We check for comments here rather than within the parser since it's important // for users to be able to comment out lines containing double-quoted newlines. if (pstate->comment_string != NULL && pstate->pfields->phead != NULL) { if (streqn(pstate->pfields->phead->value, pstate->comment_string, pstate->comment_string_length)) { if (pstate->comment_handling == PASS_COMMENTS) { int i = 0; for ( rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { if (i > 0) fputs(pstate->ifs, stdout); fputs(pe->value, stdout); } if (pstate->do_auto_line_term) { fputs(pctx->auto_line_term, stdout); } else { fputs(pstate->irs, stdout); } } rslls_reset(pstate->pfields); continue; } } lrec_t* prec = pstate->use_implicit_csv_header ? paste_indices_and_data(pstate, pstate->pfields, pctx) : pstate->allow_ragged_csv_input ? paste_header_and_data_ragged(pstate, pstate->pfields, pctx) : paste_header_and_data_rectangular(pstate, pstate->pfields, pctx); rslls_reset(pstate->pfields); return prec; } } static int lrec_reader_stdio_csv_get_fields(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pfields, context_t* pctx, int is_header) { int rc, token = 0, matchlen = 0, record_done = FALSE, field_done = FALSE; #ifdef DEBUG_PARSER char c = 0; #endif peek_file_reader_t* pfr = pstate->pfr; string_builder_t* psb = pstate->psb; char* field = NULL; int field_length = 0; if (pfr_peek_char(pfr) == (char)EOF) // char defaults to unsigned on some platforms return FALSE; // Strip the UTF-8 BOM, if any. This is MUCH simpler for mmap, and for stdio on files. For mmap // we can test the first 3 bytes, then skip past them or not. For stdio on files we can fread // the first 3 bytes, then rewind the fp if they're not the UTF-8 BOM. But for stdio on stdin // (which is the primary reason we support stdio in Miller), we cannot rewind: stdin is not // rewindable. if (is_header) { pfr_buffer_by(pfr, UTF8_BOM_LENGTH); int rc = parse_trie_ring_match(pstate->putf8_bom_parse_trie, pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, &token, &matchlen); #ifdef DEBUG_PARSER if (rc) { printf("BOMRC=%d token=0x%04x matchlen=%d\n", rc, token, matchlen); } #endif if (rc == TRUE && token == UTF8_BOM_TOKEN) { pfr_advance_by(pfr, matchlen); } } // Loop over fields in record record_done = FALSE; while (!record_done) { // Assumption is dquote is "\"" if (pfr_peek_char(pfr) != pstate->dquote[0]) { // NOT DOUBLE-QUOTED // Loop over characters in field field_done = FALSE; while (!field_done) { pfr_buffer_by(pfr, pstate->pno_dquote_parse_trie->maxlen); rc = parse_trie_ring_match(pstate->pno_dquote_parse_trie, pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, &token, &matchlen); #ifdef DEBUG_PARSER pfr_print(pfr); #endif if (rc) { #ifdef DEBUG_PARSER printf("DQ=0 RC=%d token=0x%04x matchlen=%d\n", rc, token, matchlen); #endif switch(token) { case EOF_TOKEN: // end of record rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, 0); field_done = TRUE; record_done = TRUE; break; case IFS_EOF_TOKEN: // end of record, last field is empty rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, 0); rslls_append(pfields, "", NO_FREE, 0); field_done = TRUE; record_done = TRUE; break; case IFS_TOKEN: // end of field rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, 0); field_done = TRUE; break; case IRS_TOKEN: // end of record field = sb_finish_with_length(psb, &field_length); // The line-ending '\n' wonlt be included in the field buffer. if (pstate->do_auto_line_term) { if (field_length > 0 && field[field_length-1] == '\r') { field[field_length-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } rslls_append(pfields, field, FREE_ENTRY_VALUE, 0); field_done = TRUE; record_done = TRUE; break; case DQUOTE_TOKEN: // CSV syntax error: fields containing quotes must be fully wrapped in quotes fprintf(stderr, "%s: syntax error: unwrapped double quote at line %lld.\n", MLR_GLOBALS.bargv0, pstate->ilno); exit(1); break; default: fprintf(stderr, "%s: internal coding error: unexpected token %d at line %lld.\n", MLR_GLOBALS.bargv0, token, pstate->ilno); exit(1); break; } pfr_advance_by(pfr, matchlen); } else { #ifdef DEBUG_PARSER c = pfr_read_char(pfr); printf("CHAR=%c [%02x]\n", isprint((unsigned char)c) ? c : ' ', (unsigned)c); sb_append_char(psb, c); #else sb_append_char(psb, pfr_read_char(pfr)); #endif } } } else { // DOUBLE-QUOTED pfr_advance_by(pfr, pstate->dquotelen); // loop over characters in field field_done = FALSE; char* field = NULL; int field_length = 0; while (!field_done) { pfr_buffer_by(pfr, pstate->pdquote_parse_trie->maxlen); rc = parse_trie_ring_match(pstate->pdquote_parse_trie, pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, &token, &matchlen); #ifdef DEBUG_PARSER pfr_print(pfr); #endif if (rc) { #ifdef DEBUG_PARSER printf("DQ=1 RC=%d token=0x%04x matchlen=%d\n", rc, token, matchlen); #endif switch(token) { case EOF_TOKEN: // end of record fprintf(stderr, "%s: unmatched double quote at line %lld.\n", MLR_GLOBALS.bargv0, pstate->ilno); exit(1); break; case DQUOTE_EOF_TOKEN: // end of record rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); field_done = TRUE; record_done = TRUE; break; case DQUOTE_IFS_TOKEN: // end of field rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); field_done = TRUE; break; case DQUOTE_IRS_TOKEN: // end of record case DQUOTE_IRS2_TOKEN: // end of record field = sb_finish_with_length(psb, &field_length); // The line-ending '\n' won't be included in the field buffer. if (pstate->do_auto_line_term) { if (field_length > 0 && field[field_length-1] == '\r') { field[field_length-1] = 0; context_set_autodetected_crlf(pctx); } else { context_set_autodetected_lf(pctx); } } rslls_append(pfields, field, FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); field_done = TRUE; record_done = TRUE; break; case DQUOTE_DQUOTE_TOKEN: // RFC-4180 CSV: "" inside a dquoted field is an escape for " #ifdef DEBUG_PARSER c = pstate->dquote[0]; printf("CHAR=%c [%02x]\n", isprint((unsigned char)c) ? c : ' ', (unsigned)c); sb_append_char(psb, c); #else sb_append_char(psb, pstate->dquote[0]); #endif break; default: fprintf(stderr, "%s: internal coding error: unexpected token %d at line %lld.\n", MLR_GLOBALS.bargv0, token, pstate->ilno); exit(1); break; } pfr_advance_by(pfr, matchlen); } else { #ifdef DEBUG_PARSER c = pfr_read_char(pfr); printf("CHAR=%c [%02x]\n", isprint((unsigned char)c) ? c : ' ', (unsigned)c); sb_append_char(psb, c); #else sb_append_char(psb, pfr_read_char(pfr)); #endif } } } } return TRUE; } // ---------------------------------------------------------------- static lrec_t* paste_indices_and_data(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx) { lrec_t* prec = lrec_unbacked_alloc(); int idx = 0; for (rsllse_t* pd = pdata_fields->phead; pd != NULL; pd = pd->pnext) { idx++; char key_free_flags = 0; char* key = low_int_to_string(idx, &key_free_flags); char value_free_flags = pd->free_flag; // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, key, pd->value, key_free_flags | value_free_flags, pd->quote_flag); pd->free_flag = 0; } return prec; } // ---------------------------------------------------------------- static lrec_t* paste_header_and_data_ragged(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx) { lrec_t* prec = lrec_unbacked_alloc(); sllse_t* ph = pstate->pheader_keeper->pkeys->phead; rsllse_t* pd = pdata_fields->phead; int idx = 0; int hlen = pstate->pheader_keeper->pkeys->length; int dlen = pdata_fields->length; // Process fields up to minimum of header length and data length // Note that pd->pnext can be non-null due to pointer-reuse semantics of rslls, // so use list-length attributes for end-of-list check. for (idx = 0; idx < hlen && idx < dlen; idx++, ph = ph->pnext, pd = pd->pnext) { // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, ph->value, pd->value, pd->free_flag, pd->quote_flag); pd->free_flag = 0; } if (hlen > dlen) { // Header is longer. Empty-fill the remaining data fields. // E.g. if the input looks like // a,b,c,d <-- header // 1,2 <-- data // then put c="", d="". for ( ; idx < hlen; idx++, ph = ph->pnext) { lrec_put_ext(prec, ph->value, "", NO_FREE, 0); } } else { // Data is longer. Use positional indices to label the remaining data fields. for ( ; idx < dlen; idx++, pd = pd->pnext) { char key_free_flags = 0; char* key = low_int_to_string(idx+1, &key_free_flags); char value_free_flags = pd->free_flag; // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, key, pd->value, key_free_flags | value_free_flags, pd->quote_flag); pd->free_flag = 0; } } return prec; } // ---------------------------------------------------------------- static lrec_t* paste_header_and_data_rectangular(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, context_t* pctx) { if (pstate->pheader_keeper->pkeys->length != pdata_fields->length) { fprintf(stderr, "%s: Header/data length mismatch (%llu != %llu) at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pstate->pheader_keeper->pkeys->length, pdata_fields->length, pctx->filename, pstate->ilno); exit(1); } lrec_t* prec = lrec_unbacked_alloc(); sllse_t* ph = pstate->pheader_keeper->pkeys->phead; rsllse_t* pd = pdata_fields->phead; for ( ; ph != NULL && pd != NULL; ph = ph->pnext, pd = pd->pnext) { // Transfer pointer-free responsibility from the rslls to the lrec object lrec_put_ext(prec, ph->value, pd->value, pd->free_flag, pd->quote_flag); pd->free_flag = 0; } return prec; } // ---------------------------------------------------------------- static void* lrec_reader_stdio_csv_open(void* pvstate, char* prepipe, char* filename) { lrec_reader_stdio_csv_state_t* pstate = pvstate; pstate->pfr->pbr->popen_func(pstate->pfr->pbr, prepipe, filename); pfr_reset(pstate->pfr); // Different from the other readers, we keep the file handle within the // byte_reader object. return NULL; } static void lrec_reader_stdio_csv_close(void* pvstate, void* pvhandle, char* prepipe) { lrec_reader_stdio_csv_state_t* pstate = pvstate; pstate->pfr->pbr->pclose_func(pstate->pfr->pbr, prepipe); } miller-5.6.2/c/input/lrec_reader_stdio_csvlite.c000066400000000000000000000425631354153536500217630ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "input/file_reader_stdio.h" #include "input/line_readers.h" #include "input/lrec_readers.h" // Idea of pheader_keepers: each header_keeper object retains the input-line backing // and the slls_t for a CSV header line which is used by one or more CSV data // lines. Meanwhile some mappers retain input records from the entire data // stream, including header-schema changes in the input stream. This means we // need to keep headers intact as long as any lrecs are pointing to them. One // option is reference-counting which I experimented with; it was messy and // error-prone. The approach used here is to keep a hash map from header-schema // to header_keeper object. The current pheader_keeper is a pointer into one of // those. Then when the reader is freed, all the header-keepers are freed. // Multi-file cases: // // a,a a,b c d // -- FILE1: -- FILE1: -- FILE1: -- FILE1: // a,b,c a,b,c a,b,c a,b,c // 1,2,3 1,2,3 1,2,3 1,2,3 // 4,5,6 4,5,6 4,5,6 4,5,6 // -- FILE2: -- FILE2: // a,b,c d,e,f,g a,b,c d,e,f // 7,8,9 3,4,5,6 7,8,9 3,4,5 // --OUTPUT: --OUTPUT: --OUTPUT: --OUTPUT: // a,b,c a,b,c a,b,c a,b,c // 1,2,3 1,2,3 1,2,3 1,2,3 // 4,5,6 4,5,6 4,5,6 4,5,6 // 7,8,9 7,8,9 // d,e,f,g d,e,f // 3,4,5,6 3,4,5 typedef struct _lrec_reader_stdio_csvlite_state_t { long long ifnr; long long ilno; // Line-level, not record-level as in context_t char* irs; char* ifs; int irslen; int ifslen; int allow_repeat_ifs; int do_auto_line_term; int use_implicit_csv_header; int allow_ragged_csv_input; size_t line_length; comment_handling_t comment_handling; char* comment_string; int expect_header_line_next; header_keeper_t* pheader_keeper; lhmslv_t* pheader_keepers; } lrec_reader_stdio_csvlite_state_t; static void lrec_reader_stdio_csvlite_free(lrec_reader_t* preader); static void lrec_reader_stdio_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_stdio_csvlite_process(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_stdio_csvlite_alloc(char* irs, char* ifs, int allow_repeat_ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_stdio_csvlite_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_csvlite_state_t)); pstate->ifnr = 0LL; pstate->irs = irs; pstate->ifs = ifs; pstate->irslen = strlen(irs); pstate->ifslen = strlen(ifs); pstate->allow_repeat_ifs = allow_repeat_ifs; pstate->do_auto_line_term = FALSE; pstate->use_implicit_csv_header = use_implicit_csv_header; pstate->allow_ragged_csv_input = allow_ragged_csv_input; // This is used to track nominal line length over the file read. Bootstrap with a default length. pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; pstate->expect_header_line_next = use_implicit_csv_header ? FALSE : TRUE; pstate->pheader_keeper = NULL; pstate->pheader_keepers = lhmslv_alloc(); plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_stdio_vopen; plrec_reader->pclose_func = file_reader_stdio_vclose; if (streq(irs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->irs = "\n"; pstate->irslen = 1; pstate->do_auto_line_term = TRUE; } plrec_reader->pprocess_func = lrec_reader_stdio_csvlite_process; plrec_reader->psof_func = lrec_reader_stdio_sof; plrec_reader->pfree_func = lrec_reader_stdio_csvlite_free; return plrec_reader; } // ---------------------------------------------------------------- static void lrec_reader_stdio_csvlite_free(lrec_reader_t* preader) { lrec_reader_stdio_csvlite_state_t* pstate = preader->pvstate; for (lhmslve_t* pe = pstate->pheader_keepers->phead; pe != NULL; pe = pe->pnext) { header_keeper_t* pheader_keeper = pe->pvvalue; header_keeper_free(pheader_keeper); } lhmslv_free(pstate->pheader_keepers); free(pstate); free(preader); } // ---------------------------------------------------------------- static void lrec_reader_stdio_sof(void* pvstate, void* pvhandle) { lrec_reader_stdio_csvlite_state_t* pstate = pvstate; pstate->ifnr = 0LL; pstate->ilno = 0LL; pstate->expect_header_line_next = pstate->use_implicit_csv_header ? FALSE : TRUE; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_csvlite_process(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_csvlite_state_t* pstate = pvstate; while (TRUE) { if (pstate->expect_header_line_next) { while (TRUE) { char* hline = NULL; if (pstate->comment_handling == COMMENTS_ARE_DATA) { if (pstate->irslen == 1) hline = mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, pstate->do_auto_line_term, pctx); else hline = mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, &pstate->line_length); if (hline != NULL) pstate->ilno++; } else { int num_lines_comment_skipped = 0; if (pstate->irslen == 1) hline = mlr_alloc_read_line_single_delimiter_stripping_comments_aux(input_stream, pstate->irs[0], &pstate->line_length, pstate->do_auto_line_term, pstate->comment_handling, pstate->comment_string, &num_lines_comment_skipped, pctx); else hline = mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux(input_stream, pstate->irs, pstate->irslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string, &num_lines_comment_skipped); pstate->ilno += num_lines_comment_skipped; if (hline != NULL) pstate->ilno++; } if (hline == NULL) // EOF return NULL; slls_t* pheader_fields = (pstate->ifslen == 1) ? split_csvlite_header_line_single_ifs(hline, pstate->ifs[0], pstate->allow_repeat_ifs) : split_csvlite_header_line_multi_ifs(hline, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); if (pheader_fields->length == 0) { pstate->expect_header_line_next = TRUE; if (pstate->pheader_keeper != NULL) { pstate->pheader_keeper = NULL; } } else { for (sllse_t* pe = pheader_fields->phead; pe != NULL; pe = pe->pnext) { if (*pe->value == 0) { fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); exit(1); } } pstate->expect_header_line_next = FALSE; pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); if (pstate->pheader_keeper == NULL) { pstate->pheader_keeper = header_keeper_alloc(hline, pheader_fields); lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, NO_FREE); // freed by header-keeper } else { // Re-use the header-keeper in the header cache slls_free(pheader_fields); free(hline); } break; } } } char* line = NULL; if (pstate->comment_handling == COMMENTS_ARE_DATA) { if (pstate->irslen == 1) line = mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, pstate->do_auto_line_term, pctx); else line = mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, &pstate->line_length); } else { if (pstate->irslen == 1) line = mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, pstate->do_auto_line_term, pstate->comment_handling, pstate->comment_string, pctx); else line = mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string); } if (line == NULL) // EOF return NULL; pstate->ilno++; if (!*line) { if (pstate->pheader_keeper != NULL) { pstate->pheader_keeper = NULL; pstate->expect_header_line_next = TRUE; free(line); continue; } } else { pstate->ifnr++; if (pstate->ifslen == 1) { return pstate->use_implicit_csv_header ? lrec_parse_stdio_csvlite_data_line_single_ifs_implicit_header( pstate->pheader_keeper, pctx->filename, pstate->ilno, line, pstate->ifs[0], pstate->allow_repeat_ifs) : lrec_parse_stdio_csvlite_data_line_single_ifs(pstate->pheader_keeper, pctx->filename, pstate->ilno, line, pstate->ifs[0], pstate->allow_repeat_ifs, pstate->allow_ragged_csv_input); } else { return pstate->use_implicit_csv_header ? lrec_parse_stdio_csvlite_data_line_multi_ifs_implicit_header( pstate->pheader_keeper, pctx->filename, pstate->ilno, line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs) : lrec_parse_stdio_csvlite_data_line_multi_ifs(pstate->pheader_keeper, pctx->filename, pstate->ilno, line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs, pstate->allow_ragged_csv_input); } } } } // ---------------------------------------------------------------- slls_t* split_csvlite_header_line_single_ifs(char* line, char ifs, int allow_repeat_ifs) { slls_t* plist = slls_alloc(); if (*line == 0) // empty string splits to empty list return plist; char* p = line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* start = p; for ( ; *p; p++) { if (*p == ifs) { *p = 0; p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } slls_append_no_free(plist, start); start = p; } } if (allow_repeat_ifs && *start == 0) { ; // OK } else { slls_append_no_free(plist, start); } return plist; } slls_t* split_csvlite_header_line_multi_ifs(char* line, char* ifs, int ifslen, int allow_repeat_ifs) { slls_t* plist = slls_alloc(); if (*line == 0) // empty string splits to empty list return plist; char* p = line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* start = p; for ( ; *p; p++) { if (streqn(p, ifs, ifslen)) { *p = 0; p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } slls_append_no_free(plist, start); start = p; } } if (allow_repeat_ifs && *start == 0) { ; // OK } else { slls_append_no_free(plist, start); } return plist; } // ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char ifs, int allow_repeat_ifs, int allow_ragged_csv_input) { lrec_t* prec = lrec_csvlite_alloc(data_line); char* p = data_line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char* value = p; int idx = 0; sllse_t* pe = pheader_keeper->pkeys->phead; for ( ; *p; ) { if (*p == ifs) { *p = 0; idx++; if (pe == NULL) { // Data line has more fields than the header line did if (allow_ragged_csv_input) { char free_flags = NO_FREE; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } else{ fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, filename, ilno); exit(1); } } else { key = pe->value; pe = pe->pnext; lrec_put(prec, key, value, NO_FREE); } p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } if (allow_repeat_ifs && *value == 0) { ; // OK } else if (pe == NULL) { // Data line has more fields than the header line did if (allow_ragged_csv_input) { idx++; char free_flags = NO_FREE; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } else{ fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, filename, ilno); exit(1); } } else { key = pe->value; lrec_put(prec, key, value, NO_FREE); if (pe->pnext != NULL) { // Header line has more fields than the data line did if (allow_ragged_csv_input) { for (pe = pe->pnext ; pe != NULL; pe = pe->pnext) { key = pe->value; lrec_put(prec, key, "", NO_FREE); } } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, filename, ilno); exit(1); } } } return prec; } lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char* ifs, int ifslen, int allow_repeat_ifs, int allow_ragged_csv_input) { lrec_t* prec = lrec_csvlite_alloc(data_line); char* p = data_line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; int idx = 0; sllse_t* pe = pheader_keeper->pkeys->phead; for ( ; *p; ) { if (streqn(p, ifs, ifslen)) { *p = 0; idx++; if (pe == NULL) { // Data line has more fields than the header line did if (allow_ragged_csv_input) { char free_flags = NO_FREE; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } else{ fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, filename, ilno); exit(1); } } key = pe->value; pe = pe->pnext; lrec_put(prec, key, value, NO_FREE); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } if (allow_repeat_ifs && *value == 0) { ; // OK } else if (pe == NULL) { // Data line has more fields than the header line did if (allow_ragged_csv_input) { char free_flags = NO_FREE; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } else{ fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, filename, ilno); exit(1); } } else { key = pe->value; lrec_put(prec, key, value, NO_FREE); if (pe->pnext != NULL) { // Header line has more fields than the data line did if (allow_ragged_csv_input) { for (pe = pe->pnext ; pe != NULL; pe = pe->pnext) { key = pe->value; lrec_put(prec, key, "", NO_FREE); } } else { fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", MLR_GLOBALS.bargv0, filename, ilno); exit(1); } } } return prec; } // ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char ifs, int allow_repeat_ifs) { lrec_t* prec = lrec_csvlite_alloc(data_line); char* p = data_line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char free_flags = NO_FREE; char* value = p; int idx = 0; for ( ; *p; ) { if (*p == ifs) { *p = 0; key = low_int_to_string(++idx, &free_flags); lrec_put(prec, key, value, free_flags); p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } if (allow_repeat_ifs && *value == 0) { ; // OK } else { key = low_int_to_string(++idx, &free_flags); lrec_put(prec, key, value, NO_FREE); lrec_put(prec, key, value, free_flags); } return prec; } lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char* ifs, int ifslen, int allow_repeat_ifs) { lrec_t* prec = lrec_csvlite_alloc(data_line); char* p = data_line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; char free_flags; int idx = 0; for ( ; *p; ) { if (streqn(p, ifs, ifslen)) { *p = 0; key = low_int_to_string(++idx, &free_flags); lrec_put(prec, key, value, free_flags); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } if (allow_repeat_ifs && *value == 0) { ; // OK } else { key = low_int_to_string(++idx, &free_flags); lrec_put(prec, key, value, free_flags); } return prec; } miller-5.6.2/c/input/lrec_reader_stdio_dkvp.c000066400000000000000000000274421354153536500212550ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "input/file_reader_stdio.h" #include "input/line_readers.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_stdio_dkvp_state_t { char* irs; char* ifs; char* ips; int irslen; int ifslen; int ipslen; int allow_repeat_ifs; comment_handling_t comment_handling; char* comment_string; size_t line_length; } lrec_reader_stdio_dkvp_state_t; static void lrec_reader_stdio_dkvp_free(lrec_reader_t* preader); static void lrec_reader_stdio_dkvp_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_stdio_dkvp_alloc(char* irs, char* ifs, char* ips, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_stdio_dkvp_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_dkvp_state_t)); pstate->irs = irs; pstate->ifs = ifs; pstate->ips = ips; pstate->irslen = strlen(irs); pstate->ifslen = strlen(ifs); pstate->ipslen = strlen(ips); pstate->allow_repeat_ifs = allow_repeat_ifs; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; // This is used to track nominal line length over the file read. Bootstrap with a default length. pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_stdio_vopen; plrec_reader->pclose_func = file_reader_stdio_vclose; if (streq(irs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->irs = "\n"; pstate->irslen = 1; plrec_reader->pprocess_func = (pstate->ifslen == 1 && pstate->ipslen == 1) ? lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term : lrec_reader_stdio_dkvp_process_single_irs_multi_others_auto_line_term; } else if (pstate->irslen == 1) { plrec_reader->pprocess_func = (pstate->ifslen == 1) ? &lrec_reader_stdio_dkvp_process_single_irs_single_others : &lrec_reader_stdio_dkvp_process_single_irs_multi_others; } else { plrec_reader->pprocess_func = (pstate->ifslen == 1) ? &lrec_reader_stdio_dkvp_process_multi_irs_single_others : &lrec_reader_stdio_dkvp_process_multi_irs_multi_others; } plrec_reader->psof_func = lrec_reader_stdio_dkvp_sof; plrec_reader->pfree_func = lrec_reader_stdio_dkvp_free; return plrec_reader; } static void lrec_reader_stdio_dkvp_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } // No-op for stateless readers such as this one. static void lrec_reader_stdio_dkvp_sof(void* pvstate, void* pvhandle) { } // ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term( void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_dkvp_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) { return NULL; } else { return lrec_parse_stdio_dkvp_single_sep(line, pstate->ifs[0], pstate->ips[0], pstate->allow_repeat_ifs); } } static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others_auto_line_term( void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_dkvp_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) { return NULL; } else { return lrec_parse_stdio_dkvp_multi_sep(line, pstate->ifs, pstate->ips, pstate->ifslen, pstate->ipslen, pstate->allow_repeat_ifs); } } static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_dkvp_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) return NULL; else return lrec_parse_stdio_dkvp_single_sep(line, pstate->ifs[0], pstate->ips[0], pstate->allow_repeat_ifs); } static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_dkvp_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) return NULL; else return lrec_parse_stdio_dkvp_multi_sep(line, pstate->ifs, pstate->ips, pstate->ifslen, pstate->ipslen, pstate->allow_repeat_ifs); } static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_dkvp_state_t* pstate = pvstate; FILE* input_stream = pvhandle; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, &pstate->line_length) : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string); if (line == NULL) return NULL; else return lrec_parse_stdio_dkvp_single_sep(line, pstate->ifs[0], pstate->ips[0], pstate->allow_repeat_ifs); } static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_dkvp_state_t* pstate = pvstate; FILE* input_stream = pvhandle; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, &pstate->line_length) : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string); if (line == NULL) return NULL; else return lrec_parse_stdio_dkvp_multi_sep(line, pstate->ifs, pstate->ips, pstate->ifslen, pstate->ipslen, pstate->allow_repeat_ifs); } // ---------------------------------------------------------------- // "abc=def,ghi=jkl" // P F P // S S S // "abc" "def" "ghi" "jkl" // I couldn't find a performance gain using stdlib index(3) ... *maybe* even a // fraction of a percent *slower*. lrec_t* lrec_parse_stdio_dkvp_single_sep(char* line, char ifs, char ips, int allow_repeat_ifs) { lrec_t* prec = lrec_dkvp_alloc(line); // It would be easier to split the line on field separator (e.g. ","), then // split each key-value pair on pair separator (e.g. "="). But, that // requires two passes through the data. Here we do it in one pass. int idx = 0; char* p = line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* key = p; char* value = p; int saw_ps = FALSE; for ( ; *p; ) { if (*p == ifs) { saw_ps = FALSE; *p = 0; idx++; if (*key == 0 || value <= key) { // E.g the pair has no equals sign: "a" rather than "a=1" or // "a=". Here we use the positional index as the key. This way // DKVP is a generalization of NIDX. char free_flags = 0; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } key = p; value = p; } else if (*p == ips && !saw_ps) { *p = 0; p++; value = p; saw_ps = TRUE; } else { p++; } } idx++; if (allow_repeat_ifs && *key == 0 && *value == 0) { ; // OK } else { if (*key == 0 || value <= key) { char free_flags = 0; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } } return prec; } lrec_t* lrec_parse_stdio_dkvp_multi_sep(char* line, char* ifs, char* ips, int ifslen, int ipslen, int allow_repeat_ifs) { lrec_t* prec = lrec_dkvp_alloc(line); // It would be easier to split the line on field separator (e.g. ","), then // split each key-value pair on pair separator (e.g. "="). But, that // requires two passes through the data. Here we do it in one pass. int idx = 0; char* p = line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = p; char* value = p; int saw_ps = FALSE; for ( ; *p; ) { if (streqn(p, ifs, ifslen)) { saw_ps = FALSE; *p = 0; idx++; if (*key == 0 || value <= key) { // E.g the pair has no equals sign: "a" rather than "a=1" or // "a=". Here we use the positional index as the key. This way // DKVP is a generalization of NIDX. char free_flags = 0; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } key = p; value = p; } else if (streqn(p, ips, ipslen) && !saw_ps) { *p = 0; p += ipslen; value = p; saw_ps = TRUE; } else { p++; } } idx++; if (allow_repeat_ifs && *key == 0 && *value == 0) { ; // OK } else { if (*key == 0 || value <= key) { char free_flags = 0; lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); } else { lrec_put(prec, key, value, NO_FREE); } } return prec; } miller-5.6.2/c/input/lrec_reader_stdio_json.c000066400000000000000000000205711354153536500212560ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ // ================================================================ // This has at present a lot of code duplication with lrec_reader_mmap_json. // This is because we read the entire input file into memory and get a pointer // to it, which is a lot like mmap. At some future point we may implement a // streaming JSON parser at which point the two files would diverge. // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "input/file_ingestor_stdio.h" #include "input/lrec_readers.h" #include "input/json_parser.h" #include "input/mlr_json_adapter.h" typedef struct _lrec_reader_stdio_json_state_t { // The list of top-level JSON objects is backed by the file contents. The records are in turn // backed by the top-level JSON objects. This means the latter should not be freed while // the records are in used. (This is done to reduce data copies, for performance: we can // manipulate pointers to strings rather than copying strings.) // // In particular, in the multifile-input case, we need to keep *all* parsed JSON (and // not free one file's data when we proceed to the next) since records with pointers // into the parsed JSON may still be in use -- e.g. mlr sort. sllv_t* ptop_level_json_objects; sllv_t* precords; char* input_json_flatten_separator; json_array_ingest_t json_array_ingest; char* specified_line_term; int do_auto_line_term; char* detected_line_term; comment_handling_t comment_handling; char* comment_string; } lrec_reader_stdio_json_state_t; static void lrec_reader_stdio_json_free(lrec_reader_t* preader); static void lrec_reader_stdio_json_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_stdio_json_process(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_stdio_json_alloc(char* input_json_flatten_separator, json_array_ingest_t json_array_ingest, char* line_term, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_stdio_json_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_json_state_t)); pstate->ptop_level_json_objects = sllv_alloc(); pstate->precords = sllv_alloc(); pstate->input_json_flatten_separator = input_json_flatten_separator; pstate->json_array_ingest = json_array_ingest; pstate->specified_line_term = line_term; pstate->do_auto_line_term = FALSE; pstate->detected_line_term = "\n"; // xxx adapt to MLR_GLOBALS/ctx-const for Windows port pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; if (streq(line_term, "auto")) { pstate->do_auto_line_term = TRUE; } plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_ingestor_stdio_vopen; plrec_reader->pclose_func = file_ingestor_stdio_nop_vclose; plrec_reader->pprocess_func = lrec_reader_stdio_json_process; plrec_reader->psof_func = lrec_reader_stdio_json_sof; plrec_reader->pfree_func = lrec_reader_stdio_json_free; return plrec_reader; } static void lrec_reader_stdio_json_free(lrec_reader_t* preader) { lrec_reader_stdio_json_state_t* pstate = preader->pvstate; for (sllve_t* pe = pstate->ptop_level_json_objects->phead; pe != NULL; pe = pe->pnext) { json_value_t* top_level_json_object = pe->pvvalue; json_free_value(top_level_json_object); } sllv_free(pstate->ptop_level_json_objects); for (sllve_t* pf = pstate->precords->phead; pf != NULL; pf = pf->pnext) { lrec_t* prec = pf->pvvalue; lrec_free(prec); } sllv_free(pstate->precords); pstate->precords = NULL; free(pstate); free(preader); } // The stdio-JSON lrec-reader is non-streaming: we ingest all records here in the start-of-file hook. // Then in the process method we pop one lrec off the list at a time, until they are all exhausted. // This is in contrast to other Miller lrec-readers. // // It would be possible to extend the streaming framework to also have an end-of-file hook // which we could use here to free parsed-JSON data. However, we simply leverage the start-of-file // hook for the *next* file (if any) or the free method (if not): these free parsed-JSON structures // from the previous file (if any). static void lrec_reader_stdio_json_sof(void* pvstate, void* pvhandle) { lrec_reader_stdio_json_state_t* pstate = pvstate; file_ingestor_stdio_state_t* phandle = pvhandle; json_char* json_input = (json_char*)phandle->sof; json_value_t* parsed_top_level_json; json_char error_buf[JSON_ERROR_MAX]; // This enables us to handle input of the form // // { "a" : 1 } // { "b" : 2 } // { "c" : 3 } // // in addition to // // [ // { "a" : 1 } // { "b" : 2 } // { "c" : 3 } // ] // // This is in line with what jq can handle. In this case, json_parse will return // once for each top-level item and will give us back a pointer to the start of // the rest of the input stream, so we can call json_parse on the rest until it is // all exhausted. json_char* item_start = json_input; int length = phandle->eof - phandle->sof; char* detected_line_term = NULL; if (pstate->do_auto_line_term) { // Find the first line-ending sequence (if any): LF or CRLF. for (char* p = phandle->sof; p < phandle->eof; p++) { if (p[0] == '\n') { if (p > phandle->sof && p[-1] == '\r') { detected_line_term = "\r\n"; } else { detected_line_term = "\n"; } break; } } } // Skip comments. For JSON, we ingest the entire blob, this is a matter of finding and iterating over lines. // Miller data comments must be at start of line. if (pstate->comment_handling != COMMENTS_ARE_DATA) { char* line_term = pstate->specified_line_term; if (pstate->do_auto_line_term && detected_line_term != NULL) line_term = detected_line_term; mlr_json_strip_comments(phandle->sof, phandle->eof, pstate->comment_handling, pstate->comment_string, line_term); } mlr_json_end_strip(phandle->sof, &phandle->eof); length = phandle->eof - phandle->sof; if (length > 0) { while (TRUE) { parsed_top_level_json = json_parse(item_start, length, error_buf, &item_start); if (parsed_top_level_json == NULL) { fprintf(stderr, "%s: Unable to parse JSON data: %s\n", MLR_GLOBALS.bargv0, error_buf); exit(1); } // The lrecs have their string pointers pointing into the parsed-JSON objects (for // efficiency) so it's important we not free the latter until our free method. if (!reference_json_objects_as_lrecs(pstate->precords, parsed_top_level_json, pstate->input_json_flatten_separator, pstate->json_array_ingest)) { fprintf(stderr, "%s: Unable to parse JSON data.\n", MLR_GLOBALS.bargv0); exit(1); } if (item_start == NULL) break; if (*item_start == 0) break; length -= (item_start - json_input); json_input = item_start; // json_parse goes up to the '\r' or '\n' (whichever is found first) on the first // parse, then keeps going from there on the next. E.g. in the CRLF case it // consumes the CR at the end of the first read and consumes the LF at the start // of the second, and so on. After the very last parse, we need to here consume // the final '\n' which is (by itself) a parse error. if (length == 1 && *(char*)json_input == '\n') { break; } } } if (detected_line_term != NULL) { pstate->detected_line_term = detected_line_term; } } // ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_json_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_json_state_t* pstate = pvstate; if (pstate->do_auto_line_term) { context_set_autodetected_line_term(pctx, pstate->detected_line_term); } return sllv_pop(pstate->precords); } miller-5.6.2/c/input/lrec_reader_stdio_nidx.c000066400000000000000000000234451354153536500212520ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include "cli/comment_handling.h" #include "lib/mlrutil.h" #include "input/file_reader_stdio.h" #include "input/line_readers.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_stdio_nidx_state_t { char* irs; char* ifs; int irslen; int ifslen; int allow_repeat_ifs; comment_handling_t comment_handling; char* comment_string; size_t line_length; } lrec_reader_stdio_nidx_state_t; static void lrec_reader_stdio_nidx_free(lrec_reader_t* preader); static void lrec_reader_stdio_nidx_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx); static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_stdio_nidx_alloc(char* irs, char* ifs, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_stdio_nidx_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_nidx_state_t)); pstate->irs = irs; pstate->ifs = ifs; pstate->irslen = strlen(irs); pstate->ifslen = strlen(ifs); pstate->allow_repeat_ifs = allow_repeat_ifs; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; // This is used to track nominal line length over the file read. Bootstrap with a default length. pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_stdio_vopen; plrec_reader->pclose_func = file_reader_stdio_vclose; if (streq(irs, "auto")) { // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In // either case the final character is "\n". Then for autodetect we // simply check if there's a character in the line before the '\n', and // if that is '\r'. pstate->irs = "\n"; pstate->irslen = 1; plrec_reader->pprocess_func = (pstate->ifslen == 1) ? lrec_reader_stdio_nidx_process_single_irs_single_ifs_auto_line_term : lrec_reader_stdio_nidx_process_single_irs_multi_ifs_auto_line_term; } else if (pstate->irslen == 1) { plrec_reader->pprocess_func = (pstate->ifslen == 1) ? &lrec_reader_stdio_nidx_process_single_irs_single_ifs : &lrec_reader_stdio_nidx_process_single_irs_multi_ifs; } else { plrec_reader->pprocess_func = (pstate->ifslen == 1) ? &lrec_reader_stdio_nidx_process_multi_irs_single_ifs : &lrec_reader_stdio_nidx_process_multi_irs_multi_ifs; } plrec_reader->psof_func = lrec_reader_stdio_nidx_sof; plrec_reader->pfree_func = lrec_reader_stdio_nidx_free; return plrec_reader; } static void lrec_reader_stdio_nidx_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } // No-op for stateless readers such as this one. static void lrec_reader_stdio_nidx_sof(void* pvstate, void* pvhandle) { } // ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_nidx_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) { return NULL; } else { return lrec_parse_stdio_nidx_single_sep(line, pstate->ifs[0], pstate->allow_repeat_ifs); } } static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_nidx_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) { return NULL; } else { return lrec_parse_stdio_nidx_multi_sep(line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); } } static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_nidx_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) return NULL; else return lrec_parse_stdio_nidx_single_sep(line, pstate->ifs[0], pstate->allow_repeat_ifs); } static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_nidx_state_t* pstate = pvstate; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pctx) : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); if (line == NULL) return NULL; else return lrec_parse_stdio_nidx_multi_sep(line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); } static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_nidx_state_t* pstate = pvstate; FILE* input_stream = pvhandle; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, &pstate->line_length) : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string); if (line == NULL) return NULL; else return lrec_parse_stdio_nidx_single_sep(line, pstate->ifs[0], pstate->allow_repeat_ifs); } static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_nidx_state_t* pstate = pvstate; FILE* input_stream = pvhandle; char* line = pstate->comment_handling == COMMENTS_ARE_DATA ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, &pstate->line_length) : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string); if (line == NULL) return NULL; else return lrec_parse_stdio_nidx_multi_sep(line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); } // ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_nidx_single_sep(char* line, char ifs, int allow_repeat_ifs) { lrec_t* prec = lrec_nidx_alloc(line); int idx = 0; char free_flags = 0; char* p = line; if (allow_repeat_ifs) { while (*p == ifs) p++; } char* key = NULL; char* value = p; for ( ; *p; ) { if (*p == ifs) { *p = 0; idx++; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } idx++; if (allow_repeat_ifs && *value == 0) { ; // OK } else { key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } return prec; } // ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_nidx_multi_sep(char* line, char* ifs, int ifslen, int allow_repeat_ifs) { lrec_t* prec = lrec_nidx_alloc(line); int idx = 0; char free_flags = 0; char* p = line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; for ( ; *p; ) { if (streqn(p, ifs, ifslen)) { *p = 0; idx++; key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } idx++; if (allow_repeat_ifs && *value == 0) { ; // OK } else { key = low_int_to_string(idx, &free_flags); lrec_put(prec, key, value, free_flags); } return prec; } miller-5.6.2/c/input/lrec_reader_stdio_xtab.c000066400000000000000000000137361354153536500212500ustar00rootroot00000000000000// ================================================================ // Note: there are multiple process methods with a lot of code duplication. // This is intentional. Much of Miller's measured processing time is in the // lrec-reader process methods. This is code which needs to execute on every // byte of input and even moving a single runtime if-statement into a // function-pointer assignment at alloc time can have noticeable effects on // performance (5-10% in some cases). // ================================================================ #include #include #include "cli/comment_handling.h" #include "lib/mlrutil.h" #include "input/file_reader_stdio.h" #include "input/line_readers.h" #include "input/lrec_readers.h" typedef struct _lrec_reader_stdio_xtab_state_t { char* ifs; char* ips; int ifslen; int ipslen; int allow_repeat_ips; int do_auto_line_term; int at_eof; comment_handling_t comment_handling; char* comment_string; size_t line_length; } lrec_reader_stdio_xtab_state_t; static void lrec_reader_stdio_xtab_free(lrec_reader_t* preader); static void lrec_reader_stdio_xtab_sof(void* pvstate, void* pvhandle); static lrec_t* lrec_reader_stdio_xtab_process(void* pvstate, void* pvhandle, context_t* pctx); // ---------------------------------------------------------------- lrec_reader_t* lrec_reader_stdio_xtab_alloc(char* ifs, char* ips, int allow_repeat_ips, comment_handling_t comment_handling, char* comment_string) { lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); lrec_reader_stdio_xtab_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_xtab_state_t)); pstate->ifs = ifs; pstate->ips = ips; pstate->ifslen = strlen(ifs); pstate->ipslen = strlen(ips); pstate->allow_repeat_ips = allow_repeat_ips; pstate->do_auto_line_term = FALSE; pstate->at_eof = FALSE; pstate->comment_handling = comment_handling; pstate->comment_string = comment_string; // This is used to track nominal line length over the file read. Bootstrap with a default length. pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; if (streq(ifs, "auto")) { pstate->do_auto_line_term = TRUE; pstate->ifs = "\n"; pstate->ifslen = 1; } plrec_reader->pvstate = (void*)pstate; plrec_reader->popen_func = file_reader_stdio_vopen; plrec_reader->pclose_func = file_reader_stdio_vclose; plrec_reader->pprocess_func = lrec_reader_stdio_xtab_process; plrec_reader->psof_func = lrec_reader_stdio_xtab_sof; plrec_reader->pfree_func = lrec_reader_stdio_xtab_free; return plrec_reader; } static void lrec_reader_stdio_xtab_free(lrec_reader_t* preader) { free(preader->pvstate); free(preader); } static void lrec_reader_stdio_xtab_sof(void* pvstate, void* pvhandle) { lrec_reader_stdio_xtab_state_t* pstate = pvstate; pstate->at_eof = FALSE; } // ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_xtab_process(void* pvstate, void* pvhandle, context_t* pctx) { FILE* input_stream = pvhandle; lrec_reader_stdio_xtab_state_t* pstate = pvstate; if (pstate->at_eof) return NULL; slls_t* pxtab_lines = slls_alloc(); while (TRUE) { char* line = NULL; if (pstate->comment_handling == COMMENTS_ARE_DATA) { if (pstate->ifslen == 1) line = mlr_alloc_read_line_single_delimiter(input_stream, pstate->ifs[0], &pstate->line_length, pstate->do_auto_line_term, pctx); else line = mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->ifs, pstate->ifslen, &pstate->line_length); } else { if (pstate->ifslen == 1) line = mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->ifs[0], &pstate->line_length, pstate->do_auto_line_term, pstate->comment_handling, pstate->comment_string, pctx); else line = mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->ifs, pstate->ifslen, &pstate->line_length, pstate->comment_handling, pstate->comment_string); } if (line == NULL) { // EOF // EOF or blank line terminates the stanza. pstate->at_eof = TRUE; if (pxtab_lines->length == 0) { slls_free(pxtab_lines); return NULL; } else { return (pstate->ipslen == 1) ? lrec_parse_stdio_xtab_single_ips(pxtab_lines, pstate->ips[0], pstate->allow_repeat_ips) : lrec_parse_stdio_xtab_multi_ips(pxtab_lines, pstate->ips, pstate->ipslen, pstate->allow_repeat_ips); } } else if (*line == '\0') { free(line); if (pxtab_lines->length > 0) { return (pstate->ipslen == 1) ? lrec_parse_stdio_xtab_single_ips(pxtab_lines, pstate->ips[0], pstate->allow_repeat_ips) : lrec_parse_stdio_xtab_multi_ips(pxtab_lines, pstate->ips, pstate->ipslen, pstate->allow_repeat_ips); } } else { slls_append_with_free(pxtab_lines, line); } } } // ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_xtab_single_ips(slls_t* pxtab_lines, char ips, int allow_repeat_ips) { lrec_t* prec = lrec_xtab_alloc(pxtab_lines); for (sllse_t* pe = pxtab_lines->phead; pe != NULL; pe = pe->pnext) { char* line = pe->value; char* p = line; char* key = p; while (*p != 0 && *p != ips) p++; if (*p == 0) { lrec_put(prec, key, "", NO_FREE); } else { while (*p != 0 && *p == ips) { *p = 0; p++; } lrec_put(prec, key, p, NO_FREE); } } return prec; } lrec_t* lrec_parse_stdio_xtab_multi_ips(slls_t* pxtab_lines, char* ips, int ipslen, int allow_repeat_ips) { lrec_t* prec = lrec_xtab_alloc(pxtab_lines); for (sllse_t* pe = pxtab_lines->phead; pe != NULL; pe = pe->pnext) { char* line = pe->value; char* p = line; char* key = p; while (*p != 0 && !streqn(p, ips, ipslen)) p++; // Advance by only 1 in case of subsequent match if (*p == 0) { lrec_put(prec, key, "", NO_FREE); } else { while (*p != 0 && streqn(p, ips, ipslen)) { *p = 0; p += ipslen; } lrec_put(prec, key, p, NO_FREE); } } return prec; } miller-5.6.2/c/input/lrec_readers.c000066400000000000000000000064151354153536500172070ustar00rootroot00000000000000#include "cli/comment_handling.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "input/lrec_readers.h" #include "input/byte_readers.h" lrec_reader_t* lrec_reader_alloc(cli_reader_opts_t* popts) { if (streq(popts->ifile_fmt, "gen")) { generator_opts_t* pgopts = &popts->generator_opts; return lrec_reader_gen_alloc(pgopts->field_name, pgopts->start, pgopts->stop, pgopts->step); } else if (streq(popts->ifile_fmt, "dkvp")) { if (popts->use_mmap_for_read) return lrec_reader_mmap_dkvp_alloc(popts->irs, popts->ifs, popts->ips, popts->allow_repeat_ifs, popts->comment_handling, popts->comment_string); else return lrec_reader_stdio_dkvp_alloc(popts->irs, popts->ifs, popts->ips, popts->allow_repeat_ifs, popts->comment_handling, popts->comment_string); } else if (streq(popts->ifile_fmt, "csv")) { if (popts->use_mmap_for_read) return lrec_reader_mmap_csv_alloc(popts->irs, popts->ifs, popts->use_implicit_csv_header, popts->allow_ragged_csv_input, popts->comment_handling, popts->comment_string); else return lrec_reader_stdio_csv_alloc(popts->irs, popts->ifs, popts->use_implicit_csv_header, popts->allow_ragged_csv_input, popts->comment_handling, popts->comment_string); } else if (streq(popts->ifile_fmt, "csvlite")) { if (popts->use_mmap_for_read) return lrec_reader_mmap_csvlite_alloc(popts->irs, popts->ifs, popts->allow_repeat_ifs, popts->use_implicit_csv_header, popts->allow_ragged_csv_input, popts->comment_handling, popts->comment_string); else return lrec_reader_stdio_csvlite_alloc(popts->irs, popts->ifs, popts->allow_repeat_ifs, popts->use_implicit_csv_header, popts->allow_ragged_csv_input, popts->comment_handling, popts->comment_string); } else if (streq(popts->ifile_fmt, "nidx")) { if (popts->use_mmap_for_read) return lrec_reader_mmap_nidx_alloc(popts->irs, popts->ifs, popts->allow_repeat_ifs, popts->comment_handling, popts->comment_string); else return lrec_reader_stdio_nidx_alloc(popts->irs, popts->ifs, popts->allow_repeat_ifs, popts->comment_handling, popts->comment_string); } else if (streq(popts->ifile_fmt, "xtab")) { // Use stdio-xtab for comment handling; not supported in the mmap-xtab reader. if (popts->use_mmap_for_read && popts->comment_string == NULL) return lrec_reader_mmap_xtab_alloc(popts->ifs, popts->ips, popts->allow_repeat_ips, popts->comment_handling, popts->comment_string); else return lrec_reader_stdio_xtab_alloc(popts->ifs, popts->ips, popts->allow_repeat_ips, popts->comment_handling, popts->comment_string); } else if (streq(popts->ifile_fmt, "json")) { if (popts->use_mmap_for_read) return lrec_reader_mmap_json_alloc(popts->input_json_flatten_separator, popts->json_array_ingest, popts->irs, popts->comment_handling, popts->comment_string); else return lrec_reader_stdio_json_alloc(popts->input_json_flatten_separator, popts->json_array_ingest, popts->irs, popts->comment_handling, popts->comment_string); } else { return NULL; } } lrec_reader_t* lrec_reader_alloc_or_die(cli_reader_opts_t* popts) { lrec_reader_t* plrec_reader = lrec_reader_alloc(popts); if (plrec_reader == NULL) { fprintf(stderr, "%s: unrecognized input-file format \"%s\".\n", MLR_GLOBALS.bargv0, popts->ifile_fmt); exit(1); } return plrec_reader; } miller-5.6.2/c/input/lrec_readers.h000066400000000000000000000105521354153536500172110ustar00rootroot00000000000000#ifndef LREC_READERS_H #define LREC_READERS_H #include "cli/mlrcli.h" #include "cli/comment_handling.h" #include "input/lrec_reader.h" // ---------------------------------------------------------------- // Primary entry points lrec_reader_t* lrec_reader_alloc(cli_reader_opts_t* popts); lrec_reader_t* lrec_reader_alloc_or_die(cli_reader_opts_t* popts); lrec_reader_t* lrec_reader_gen_alloc(char* field_name, unsigned long long start, unsigned long long stop, unsigned long long step); lrec_reader_t* lrec_reader_stdio_csvlite_alloc(char* irs, char* ifs, int allow_repeat_ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_stdio_csv_alloc(char* irs, char* ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_stdio_dkvp_alloc(char* irs, char* ifs, char* ips, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_stdio_nidx_alloc(char* irs, char* ifs, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_stdio_xtab_alloc(char* ifs, char* ips, int allow_repeat_ips, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_stdio_json_alloc(char* input_json_flatten_separator, json_array_ingest_t json_array_ingest, char* line_term, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_mmap_csv_alloc(char* irs, char* ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_mmap_csvlite_alloc(char* irs, char* ifs, int allow_repeat_ifs, int use_implicit_csv_header, int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_mmap_dkvp_alloc(char* irs, char* ifs, char* ips, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_mmap_nidx_alloc(char* irs, char* ifs, int allow_repeat_ifs, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_mmap_xtab_alloc(char* ifs, char* ips, int allow_repeat_ips, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_mmap_json_alloc(char* input_json_flatten_separator, json_array_ingest_t json_array_ingest, char* line_term, comment_handling_t comment_handling, char* comment_string); lrec_reader_t* lrec_reader_in_memory_alloc(sllv_t* precords); // ---------------------------------------------------------------- // These entry points are made public for unit test lrec_t* lrec_parse_stdio_nidx_single_sep(char* line, char ifs, int allow_repeat_ifs); lrec_t* lrec_parse_stdio_nidx_multi_sep(char* line, char* ifs, int ifslen, int allow_repeat_ifs); lrec_t* lrec_parse_stdio_dkvp_single_sep(char* line, char ifs, char ips, int allow_repeat_ifs); lrec_t* lrec_parse_stdio_dkvp_multi_sep(char* line, char* ifs, char* ips, int ifslen, int ipslen, int allow_repeat_ifs); slls_t* split_csv_header_line(char* line, char ifs, int allow_repeat_ifs); slls_t* split_csvlite_header_line_single_ifs(char* line, char ifs, int allow_repeat_ifs); slls_t* split_csvlite_header_line_multi_ifs(char* line, char* ifs, int ifslen, int allow_repeat_ifs); lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char ifs, int allow_repeat_ifs, int allow_ragged_csv_input); lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char* ifs, int ifslen, int allow_repeat_ifs, int allow_ragged_csv_input); lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char ifs, int allow_repeat_ifs); lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, char* data_line, char* ifs, int ifslen, int allow_repeat_ifs); lrec_t* lrec_parse_stdio_xtab_single_ips(slls_t* pxtab_lines, char ips, int allow_repeat_ips); lrec_t* lrec_parse_stdio_xtab_multi_ips(slls_t* pxtab_lines, char* ips, int ipslen, int allow_repeat_ips); #endif // LREC_READERS_H miller-5.6.2/c/input/mlr_json_adapter.c000066400000000000000000000244751354153536500201060ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "cli/json_array_ingest.h" #include "input/mlr_json_adapter.h" static lrec_t* validate_millerable_object(json_value_t* pjson_object, char* flatten_sep, json_array_ingest_t json_array_ingest); static int populate_from_nested_object(lrec_t* prec, json_value_t* pjson_object, char* prefix, char* flatten_sep, json_array_ingest_t json_array_ingest); static int populate_from_nested_array(lrec_t* prec, json_value_t* pjson_array, char* prefix, char* flatten_sep, json_array_ingest_t json_array_ingest); // ---------------------------------------------------------------- int reference_json_objects_as_lrecs(sllv_t* precords, json_value_t* ptop_level_json, char* flatten_sep, json_array_ingest_t json_array_ingest) { if (ptop_level_json->type == JSON_ARRAY) { int n = ptop_level_json->u.array.length; for (int i = 0; i < n; i++) { json_value_t* pnext_level_json = ptop_level_json->u.array.values[i]; if (pnext_level_json->type != JSON_OBJECT) { fprintf(stderr, "%s: found non-object (type %s) within top-level array. This is valid but unmillerable JSON.\n", MLR_GLOBALS.bargv0, json_describe_type(ptop_level_json->type)); return FALSE; } lrec_t* prec = validate_millerable_object(pnext_level_json, flatten_sep, json_array_ingest); if (prec == NULL) return FALSE; sllv_append(precords, prec); } } else if (ptop_level_json->type == JSON_OBJECT) { lrec_t* prec = validate_millerable_object(ptop_level_json, flatten_sep, json_array_ingest); if (prec == NULL) return FALSE; sllv_append(precords, prec); } else { fprintf(stderr, "%s: found non-terminal (type %s) at top level. This is valid but unmillerable JSON.\n", MLR_GLOBALS.bargv0, json_describe_type(ptop_level_json->type)); return FALSE; } return TRUE; } // ---------------------------------------------------------------- // Returns NULL if the JSON object is not millerable, else returns a new lrec with string pointers // backed by the JSON object. // // Precondition: the JSON value is assumed to have already been checked to be of type JSON_OBJECT. lrec_t* validate_millerable_object(json_value_t* pjson, char* flatten_sep, json_array_ingest_t json_array_ingest) { lrec_t* prec = lrec_unbacked_alloc(); int n = pjson->u.array.length; for (int i = 0; i < n; i++) { json_object_entry_t* pobject_entry = &pjson->u.object.p.values[i]; char* key = (char*)pobject_entry->name; char* prefix = NULL; json_value_t* pjson_value = pobject_entry->pvalue; switch (pjson_value->type) { case JSON_NONE: lrec_put(prec, key, "", NO_FREE); break; case JSON_NULL: lrec_put(prec, key, "", NO_FREE); break; case JSON_OBJECT: // This could be made more efficient ... the string length is in the json_value_t. prefix = mlr_paste_2_strings(key, flatten_sep); if (!populate_from_nested_object(prec, pjson_value, prefix, flatten_sep, json_array_ingest)) return NULL; free(prefix); break; case JSON_ARRAY: switch (json_array_ingest) { case JSON_ARRAY_INGEST_FATAL: fprintf(stderr, "%s: found array item within JSON object. This is valid but unmillerable JSON.\n" "Use --json-skip-arrays-on-input to exclude these from input without fataling.\n" "Or, --json-map-arrays-on-input to convert them to integer-indexed maps.\n", MLR_GLOBALS.bargv0); return NULL; break; case JSON_ARRAY_INGEST_AS_MAP: prefix = mlr_paste_2_strings(key, flatten_sep); if (!populate_from_nested_array(prec, pjson_value, prefix, flatten_sep, json_array_ingest)) { free(prefix); return NULL; } free(prefix); break; // xxx other cases! default: break; } break; case JSON_STRING: lrec_put(prec, key, pjson_value->u.string.ptr, NO_FREE); break; case JSON_BOOLEAN: lrec_put(prec, key, pjson_value->u.boolean.sval, NO_FREE); break; case JSON_INTEGER: lrec_put(prec, key, pjson_value->u.integer.sval, NO_FREE); break; case JSON_DOUBLE: lrec_put(prec, key, pjson_value->u.dbl.sval, NO_FREE); break; default: MLR_INTERNAL_CODING_ERROR(); break; } } return prec; } // ---------------------------------------------------------------- // Example: the JSON object has { "a": { "b" : 1, "c" : 2 } }. Then we add "a:b" => "1" and "a:c" => "2" // to the lrec. static int populate_from_nested_object(lrec_t* prec, json_value_t* pjson_object, char* prefix, char* flatten_sep, json_array_ingest_t json_array_ingest) { int n = pjson_object->u.object.length; for (int i = 0; i < n; i++) { json_object_entry_t* pobject_entry = &pjson_object->u.object.p.values[i]; char* json_key = (char*)pobject_entry->name; json_value_t* pjson_value = pobject_entry->pvalue; char* lrec_key = mlr_paste_2_strings(prefix, json_key); char* next_prefix = NULL; switch (pjson_value->type) { case JSON_NONE: lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); break; case JSON_NULL: lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); break; case JSON_STRING: lrec_put(prec, lrec_key, pjson_value->u.string.ptr, FREE_ENTRY_KEY); break; case JSON_BOOLEAN: lrec_put(prec, lrec_key, pjson_value->u.boolean.sval, FREE_ENTRY_KEY); break; case JSON_OBJECT: next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); if (!populate_from_nested_object(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) return FALSE; free(next_prefix); free(lrec_key); break; case JSON_ARRAY: switch (json_array_ingest) { case JSON_ARRAY_INGEST_FATAL: fprintf(stderr, "%s: found array item within JSON object. This is valid but unmillerable JSON.\n" "Use --json-skip-arrays-on-input to exclude these from input without fataling.\n" "Or, --json-map-arrays-on-input to convert them to integer-indexed maps.\n", MLR_GLOBALS.bargv0); free(lrec_key); return FALSE; break; case JSON_ARRAY_INGEST_AS_MAP: next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); if (!populate_from_nested_array(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) { free(next_prefix); free(lrec_key); return FALSE; } free(next_prefix); free(lrec_key); break; // xxx other cases! default: free(lrec_key); break; } break; case JSON_INTEGER: lrec_put(prec, lrec_key, pjson_value->u.integer.sval, FREE_ENTRY_KEY); break; case JSON_DOUBLE: lrec_put(prec, lrec_key, pjson_value->u.dbl.sval, FREE_ENTRY_KEY); break; default: MLR_INTERNAL_CODING_ERROR(); break; } } return TRUE; } static int populate_from_nested_array(lrec_t* prec, json_value_t* pjson_array, char* prefix, char* flatten_sep, json_array_ingest_t json_array_ingest) { int n = pjson_array->u.array.length; for (int i = 0; i < n; i++) { json_value_t* pjson_value = pjson_array->u.array.values[i]; char free_flags = NO_FREE; char* json_key = low_int_to_string(i, &free_flags); char* lrec_key = mlr_paste_2_strings(prefix, json_key); if (free_flags) free(json_key); char* next_prefix = NULL; switch (pjson_value->type) { case JSON_NONE: lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); break; case JSON_NULL: lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); break; case JSON_STRING: lrec_put(prec, lrec_key, pjson_value->u.string.ptr, FREE_ENTRY_KEY); break; case JSON_BOOLEAN: lrec_put(prec, lrec_key, pjson_value->u.boolean.sval, FREE_ENTRY_KEY); break; case JSON_OBJECT: next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); if (!populate_from_nested_object(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) return FALSE; free(next_prefix); free(lrec_key); break; case JSON_ARRAY: switch (json_array_ingest) { case JSON_ARRAY_INGEST_FATAL: fprintf(stderr, "%s: found array item within JSON object. This is valid but unmillerable JSON.\n" "Use --json-skip-arrays-on-input to exclude these from input without fataling.\n" "Or, --json-map-arrays-on-input to convert them to integer-indexed maps.\n", MLR_GLOBALS.bargv0); return FALSE; break; case JSON_ARRAY_INGEST_AS_MAP: next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); if (!populate_from_nested_array(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) { free(lrec_key); free(next_prefix); return FALSE; } free(lrec_key); free(next_prefix); break; // xxx other cases! default: free(lrec_key); break; } break; case JSON_INTEGER: lrec_put(prec, lrec_key, pjson_value->u.integer.sval, FREE_ENTRY_KEY); break; case JSON_DOUBLE: lrec_put(prec, lrec_key, pjson_value->u.dbl.sval, FREE_ENTRY_KEY); break; default: MLR_INTERNAL_CODING_ERROR(); break; } } return TRUE; } // ---------------------------------------------------------------- // * The buffer is an entire JSON blob, e.g. contents from stdio read or mmap; peof-psof is the file size so peof is one // byte *after* the last valid file byte. // * The buffer is not assumed to be null-terminated. // * Any lines beginning with comment_string are modified by poking space characters up to line_term. void mlr_json_strip_comments(char* psof, char* peof, comment_handling_t comment_handling, char* comment_string, char* line_term) { int comment_string_len = strlen(comment_string); int line_term_len = strlen(line_term); int at_line_start = TRUE; for (char* p = psof; p < peof; /* increment in loop */) { if (streqn(p, line_term, line_term_len)) { p += line_term_len; at_line_start = TRUE; } else if (at_line_start && streqn(p, comment_string, comment_string_len)) { // Fill with spaces to end of line while (p < peof && !streqn(p, line_term, line_term_len)) { if (comment_handling == PASS_COMMENTS) fputc(*p, stdout); *p = ' '; p++; } if (comment_handling == PASS_COMMENTS) fputs(line_term, stdout); at_line_start = TRUE; } else { at_line_start = FALSE; p++; } } } // ---------------------------------------------------------------- // I'm using a 3rd-party JSON parser and it's easy to strip all trailing whitespace // than tweak the parser to handle those. // // peof is one past the last valid byte. // pend is the last valid byte. void mlr_json_end_strip(char* psof, char** ppeof) { char* pend = *ppeof - 1; while (pend >= psof && (*pend == ' ' || *pend == '\t' || *pend == '\r' || *pend == '\n')) { pend--; } *ppeof = pend + 1; } miller-5.6.2/c/input/mlr_json_adapter.h000066400000000000000000000030051354153536500200750ustar00rootroot00000000000000#ifndef MLR_JSON_ADAPTER_H #define MLR_JSON_ADAPTER_H #include "cli/comment_handling.h" #include "input/json_parser.h" #include "containers/lrec.h" // Given parsed JSON, constructs a list of lrecs with string values pointing into the parsed JSON. // This is done for efficiency, to avoid data copying. It also means the parsed JSON should not be // freed until the lrecs are freed. // // Default behavior on arrays is to fatal. There is a command-line option to skip them. Miller // doesn't have an array object in its DSL, only maps, and converting JSON arrays to int-keyed maps // poses problems of irreversibility. (Namely, 'mlr --json cat foo.json' when foo.json contains // arrays would result in output differing from input.) int reference_json_objects_as_lrecs(sllv_t* precords, json_value_t* ptop_level_json, char* flatten_sep, json_array_ingest_t json_array_ingest); // * The buffer is an entire JSON blob, e.g. contents from stdio read or mmap; peof-psof is the file size so peof is one // byte *after* the last valid file byte. // * The buffer is not assumed to be null-terminated. // * Any lines beginning with comment_string are modified by poking space characters up to line_term. void mlr_json_strip_comments(char* psof, char* peof, comment_handling_t comment_handling, char* comment_string, char* line_term); // I'm using a 3rd-party JSON parser and it's easy to strip all trailing whitespace // than tweak the parser to handle those. void mlr_json_end_strip(char* psof, char** ppeof); #endif // MLR_JSON_ADAPTER_H miller-5.6.2/c/input/mmap_byte_reader.c000066400000000000000000000063561354153536500200600ustar00rootroot00000000000000#include #include #include #include #include "lib/mlr_arch.h" #include "input/byte_readers.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #if MLR_ARCH_MMAP_ENABLED static char empty_buf[1] = { 0 }; #endif typedef struct _mmap_byte_reader_state_t { char* filename; int fd; char* sof; char* p; char* eof; } mmap_byte_reader_state_t; static int mmap_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* filename); static int mmap_byte_reader_read_func(struct _byte_reader_t* pbr); static void mmap_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe); // ---------------------------------------------------------------- byte_reader_t* mmap_byte_reader_alloc() { byte_reader_t* pbr = mlr_malloc_or_die(sizeof(byte_reader_t)); pbr->pvstate = NULL; pbr->popen_func = mmap_byte_reader_open_func; pbr->pread_func = mmap_byte_reader_read_func; pbr->pclose_func = mmap_byte_reader_close_func; return pbr; } void mmap_byte_reader_free(byte_reader_t* pbr) { mmap_byte_reader_state_t* pstate = pbr->pvstate; if (pstate != NULL) { free(pstate->filename); // null-ok semantics } free(pbr); } // ---------------------------------------------------------------- static int mmap_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* filename) { #if MLR_ARCH_MMAP_ENABLED // popen is a stdio construct, not an mmap construct, and it can't be supported here. if (prepipe != NULL) { fprintf(stderr, "%s: coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } mmap_byte_reader_state_t* pstate = mlr_malloc_or_die(sizeof(mmap_byte_reader_state_t)); pstate->filename = mlr_strdup_or_die(filename); pstate->fd = open(filename, O_RDONLY); if (pstate->fd < 0) { perror("open"); fprintf(stderr, "%s: Couldn't open \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); exit(1); } struct stat stat; if (fstat(pstate->fd, &stat) < 0) { perror("fstat"); fprintf(stderr, "%s: could not fstat \"%s\"\n", MLR_GLOBALS.bargv0, filename); exit(1); } if (stat.st_size == 0) { // mmap doesn't allow us to map zero-length files but zero-length files do exist. pstate->sof = &empty_buf[0]; } else { pstate->sof = mmap(NULL, (size_t)stat.st_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, pstate->fd, (off_t)0); if (pstate->sof == MAP_FAILED) { perror("mmap"); fprintf(stderr, "%s: could not mmap \"%s\"\n", MLR_GLOBALS.bargv0, filename); exit(1); } } pstate->eof = pstate->sof + stat.st_size; pstate->p = pstate->sof; pbr->pvstate = pstate; return TRUE; #else fprintf(stderr, "%s: mmap is unsupported on this architecture.\n", MLR_GLOBALS.bargv0); exit(1); return TRUE; #endif } static int mmap_byte_reader_read_func(struct _byte_reader_t* pbr) { mmap_byte_reader_state_t* pstate = pbr->pvstate; if (pstate->p >= pstate->eof) { return EOF; } else { int c = *pstate->p; pstate->p++; return c; } } static void mmap_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe) { mmap_byte_reader_state_t* pstate = pbr->pvstate; if (close(pstate->fd) < 0) { perror("close"); fprintf(stderr, "%s: close error on file \"%s\".\n", MLR_GLOBALS.bargv0, pstate->filename); exit(1); } } miller-5.6.2/c/input/peek_file_reader.c000066400000000000000000000015721354153536500200210ustar00rootroot00000000000000#include #include #include "input/peek_file_reader.h" // ---------------------------------------------------------------- void pfr_print(peek_file_reader_t* pfr) { printf("======================== pfr at %p\n", pfr); printf(" peekbuflen = %d\n", pfr->peekbuflen); printf(" npeeked = %d\n", pfr->npeeked); int sob = pfr->sob; int eob = (pfr->sob + pfr->npeeked) & pfr->peekbuflenmask; for (int i = 0; i < pfr->peekbuflen; i++) { char c = pfr->peekbuf[i]; char* sdesc = (i == sob) ? "START" : ""; char* edesc = (i == eob) ? "END" : ""; char* occdesc = ""; if (sob <= eob) { if (sob <= i && i < eob) occdesc = "OCC"; } else { if (i < eob || sob <= i) occdesc = "OCC"; } printf(" %-5s %-5s %-3s i=%2d c=%c [%02x]\n", sdesc, edesc, occdesc, i, isprint((unsigned char)c) ? c : ' ', c); } printf("------------------------\n"); } miller-5.6.2/c/input/peek_file_reader.h000066400000000000000000000057351354153536500200330ustar00rootroot00000000000000#ifndef PEEK_FILE_READER_H #define PEEK_FILE_READER_H #include #include "lib/mlrutil.h" #include "lib/mlrmath.h" #include "lib/mlr_globals.h" #include "input/byte_reader.h" // This is a ring-buffered peekahead file/string reader. // Note: Throughout Miller as a general rule I treat struct attributes as if // they were private attributes. However, for performance, parse_trie_ring_match // accesses this ring buffer directly. typedef struct _peek_file_reader_t { byte_reader_t* pbr; int peekbuflen; int peekbuflenmask; char* peekbuf; int sob; // start of ring-buffer int npeeked; } peek_file_reader_t; // ---------------------------------------------------------------- static inline peek_file_reader_t* pfr_alloc(byte_reader_t* pbr, int maxnpeek) { peek_file_reader_t* pfr = mlr_malloc_or_die(sizeof(peek_file_reader_t)); pfr->pbr = pbr; pfr->peekbuflen = power_of_two_above(maxnpeek); pfr->peekbuflenmask = pfr->peekbuflen - 1; // The peek-buffer doesn't contain null-terminated C strings, but we // nonetheless null-terminate the buffer with an extra never-touched byte // so that print statements in the debugger, etc. will be nice. pfr->peekbuf = mlr_malloc_or_die(pfr->peekbuflen + 1); memset(pfr->peekbuf, 0, pfr->peekbuflen + 1); pfr->sob = 0; pfr->npeeked = 0; return pfr; } // ---------------------------------------------------------------- static inline void pfr_free(peek_file_reader_t* pfr) { if (pfr == NULL) return; free(pfr->peekbuf); free(pfr); } // ---------------------------------------------------------------- static inline void pfr_reset(peek_file_reader_t* pfr) { memset(pfr->peekbuf, 0, pfr->peekbuflen); pfr->sob = 0; pfr->npeeked = 0; } // ---------------------------------------------------------------- static inline char pfr_peek_char(peek_file_reader_t* pfr) { if (pfr->npeeked < 1) { pfr->peekbuf[pfr->sob] = pfr->pbr->pread_func(pfr->pbr); pfr->npeeked++; } return pfr->peekbuf[pfr->sob]; } // ---------------------------------------------------------------- static inline char pfr_read_char(peek_file_reader_t* pfr) { if (pfr->npeeked < 1) { return pfr->pbr->pread_func(pfr->pbr); } else { char c = pfr->peekbuf[pfr->sob]; pfr->sob = (pfr->sob + 1) & pfr->peekbuflenmask; pfr->npeeked--; return c; } } // ---------------------------------------------------------------- static inline void pfr_buffer_by(peek_file_reader_t* pfr, int len) { while (pfr->npeeked < len) { pfr->peekbuf[(pfr->sob + pfr->npeeked++) & pfr->peekbuflenmask] = pfr->pbr->pread_func(pfr->pbr); } } // ---------------------------------------------------------------- static inline void pfr_advance_by(peek_file_reader_t* pfr, int len) { MLR_INTERNAL_CODING_ERROR_IF(len > pfr->npeeked); pfr->sob = (pfr->sob + len) & pfr->peekbuflenmask; pfr->npeeked -= len; } // ---------------------------------------------------------------- void pfr_print(peek_file_reader_t* pfr); #endif // PEEK_FILE_READER_H miller-5.6.2/c/input/stdio_byte_reader.c000066400000000000000000000055521354153536500202450ustar00rootroot00000000000000#include #include #include "input/byte_readers.h" #include "lib/mlr_globals.h" #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlrescape.h" typedef struct _stdio_byte_reader_state_t { char* filename; FILE* fp; } stdio_byte_reader_state_t; static int stdio_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* filename); static int stdio_byte_reader_read_func(struct _byte_reader_t* pbr); static void stdio_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe); // ---------------------------------------------------------------- byte_reader_t* stdio_byte_reader_alloc() { byte_reader_t* pbr = mlr_malloc_or_die(sizeof(byte_reader_t)); pbr->pvstate = NULL; pbr->popen_func = stdio_byte_reader_open_func; pbr->pread_func = stdio_byte_reader_read_func; pbr->pclose_func = stdio_byte_reader_close_func; return pbr; } void stdio_byte_reader_free(byte_reader_t* pbr) { stdio_byte_reader_state_t* pstate = pbr->pvstate; if (pstate != NULL) { free(pstate->filename); // null-ok semantics } free(pbr); } // ---------------------------------------------------------------- static int stdio_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* filename) { stdio_byte_reader_state_t* pstate = mlr_malloc_or_die(sizeof(stdio_byte_reader_state_t)); pstate->filename = mlr_strdup_or_die(filename); if (prepipe == NULL) { if (streq(pstate->filename, "-")) { pstate->fp = stdin; } else { pstate->fp = fopen(filename, "r"); if (pstate->fp == NULL) { perror("fopen"); fprintf(stderr, "%s: Couldn't fopen \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); exit(1); } } } else { char* escaped_filename = alloc_file_name_escaped_for_popen(filename); char* command = mlr_malloc_or_die(strlen(prepipe) + 3 + strlen(escaped_filename) + 1); if (streq(filename, "-")) sprintf(command, "%s", prepipe); else sprintf(command, "%s < %s", prepipe, escaped_filename); pstate->fp = popen(command, "r"); if (pstate->fp == NULL) { fprintf(stderr, "%s: Couldn't popen \"%s\" for read.\n", MLR_GLOBALS.bargv0, command); perror(command); exit(1); } free(escaped_filename); free(command); } pbr->pvstate = pstate; return TRUE; } static int stdio_byte_reader_read_func(struct _byte_reader_t* pbr) { stdio_byte_reader_state_t* pstate = pbr->pvstate; int c = mlr_arch_getc(pstate->fp); if (c == EOF && ferror(pstate->fp)) { perror("fread"); fprintf(stderr, "%s: Read error on file \"%s\".\n", MLR_GLOBALS.bargv0, pstate->filename); exit(1); } return c; } static void stdio_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe) { stdio_byte_reader_state_t* pstate = pbr->pvstate; if (prepipe == NULL) { if (pstate->fp != stdin) fclose(pstate->fp); } else { pclose(pstate->fp); } free(pstate->filename); free(pstate); pbr->pvstate = NULL; } miller-5.6.2/c/input/string_byte_reader.c000066400000000000000000000036161354153536500204300ustar00rootroot00000000000000#include // For definition of EOF #include "input/byte_readers.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" typedef struct _string_byte_reader_state_t { char* backing; char* p; char* pend; } string_byte_reader_state_t; static int string_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* backing); static int string_byte_reader_read_func(struct _byte_reader_t* pbr); static void string_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe); // ---------------------------------------------------------------- byte_reader_t* string_byte_reader_alloc() { byte_reader_t* pbr = mlr_malloc_or_die(sizeof(byte_reader_t)); pbr->pvstate = NULL; pbr->popen_func = string_byte_reader_open_func; pbr->pread_func = string_byte_reader_read_func; pbr->pclose_func = string_byte_reader_close_func; return pbr; } void string_byte_reader_free(byte_reader_t* pbr) { free(pbr); } // ---------------------------------------------------------------- static int string_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* backing) { // popen is a stdio construct, not an mmap construct, and it can't be supported here. if (prepipe != NULL) { fprintf(stderr, "%s: coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } string_byte_reader_state_t* pstate = mlr_malloc_or_die(sizeof(string_byte_reader_state_t)); pstate->backing = backing; pstate->p = pstate->backing; pstate->pend = pstate->backing + strlen(pstate->backing); pbr->pvstate = pstate; return TRUE; } static int string_byte_reader_read_func(struct _byte_reader_t* pbr) { string_byte_reader_state_t* pstate = pbr->pvstate; if (pstate->p < pstate->pend) { return *(pstate->p++); } else { return EOF; } } static void string_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe) { pbr->pvstate = NULL; } miller-5.6.2/c/lib/000077500000000000000000000000001354153536500140125ustar00rootroot00000000000000miller-5.6.2/c/lib/Makefile.am000066400000000000000000000013601354153536500160460ustar00rootroot00000000000000noinst_LTLIBRARIES= libmlr.la libmlr_la_SOURCES= free_flags.h \ minunit.h \ mlr_arch.c \ mlr_arch.h \ mlr_globals.c \ mlr_globals.h \ mlrdatetime.c \ mlrdatetime.h \ mlrescape.c \ mlrescape.h \ mlrmath.c \ mlrmath.h \ mlrstat.c \ mlrstat.h \ mlrregex.c \ mlrregex.h \ mlrtimezone.h \ mlrutil.c \ mlrutil.h \ mlrval.c \ mlrval.h \ mvfuncs.c \ mvfuncs.h \ netbsd_strptime.c \ netbsd_strptime.h \ nlnet_timegm.c \ nlnet_timegm.h \ context.c \ context.h \ mtrand.c \ mtrand.h \ string_array.c \ string_array.h \ string_builder.c \ string_builder.h \ mlr_test_util.c \ mlr_test_util.h \ utf8.h AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/lib/Makefile.in000066400000000000000000000461641354153536500160720ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmlr_la_LIBADD = am_libmlr_la_OBJECTS = mlr_arch.lo mlr_globals.lo mlrdatetime.lo \ mlrescape.lo mlrmath.lo mlrstat.lo mlrregex.lo mlrutil.lo \ mlrval.lo mvfuncs.lo netbsd_strptime.lo nlnet_timegm.lo \ context.lo mtrand.lo string_array.lo string_builder.lo \ mlr_test_util.lo libmlr_la_OBJECTS = $(am_libmlr_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmlr_la_SOURCES) DIST_SOURCES = $(libmlr_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libmlr.la libmlr_la_SOURCES = free_flags.h \ minunit.h \ mlr_arch.c \ mlr_arch.h \ mlr_globals.c \ mlr_globals.h \ mlrdatetime.c \ mlrdatetime.h \ mlrescape.c \ mlrescape.h \ mlrmath.c \ mlrmath.h \ mlrstat.c \ mlrstat.h \ mlrregex.c \ mlrregex.h \ mlrtimezone.h \ mlrutil.c \ mlrutil.h \ mlrval.c \ mlrval.h \ mvfuncs.c \ mvfuncs.h \ netbsd_strptime.c \ netbsd_strptime.h \ nlnet_timegm.c \ nlnet_timegm.h \ context.c \ context.h \ mtrand.c \ mtrand.h \ string_array.c \ string_array.h \ string_builder.c \ string_builder.h \ mlr_test_util.c \ mlr_test_util.h \ utf8.h AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmlr.la: $(libmlr_la_OBJECTS) $(libmlr_la_DEPENDENCIES) $(EXTRA_libmlr_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmlr_la_OBJECTS) $(libmlr_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_arch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_globals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_test_util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrdatetime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrescape.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrmath.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrregex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrstat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrutil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtrand.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvfuncs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netbsd_strptime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlnet_timegm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_array.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_builder.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/lib/context.c000066400000000000000000000050721354153536500156460ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "lib/context.h" #include "cli/mlrcli.h" // ---------------------------------------------------------------- void context_init_from_first_file_name(context_t* pctx, char* first_file_name) { memset(pctx, 0, sizeof(context_t)); pctx->nr = 0; pctx->fnr = 0; pctx->filenum = 1; pctx->filename = first_file_name; // Line-termination is by default autodetected from input, and the first output // record is produced after the first is read ... except when there *are* no inputs, // e.g. with 'mlr seqgen' or 'mlr put' with (perhaps looped) emit statements. For // those cases, where there is no file input from which to autodetect, we default // the line-termination to the platform-specific default. pctx->auto_line_term = "\n"; // xxx default to "\r\n" on Windows pctx->auto_line_term_detected = FALSE; } // ---------------------------------------------------------------- void context_init_from_opts(context_t* pctx, void* pvopts) { cli_opts_t* popts = pvopts; pctx->nr = 0; pctx->fnr = 0; pctx->filenum = 0; pctx->filename = NULL; pctx->force_eof = 0; pctx->ips = popts->reader_opts.ips; pctx->ifs = popts->reader_opts.ifs; pctx->irs = popts->reader_opts.irs; pctx->ops = popts->writer_opts.ops; pctx->ofs = popts->writer_opts.ofs; pctx->ors = popts->writer_opts.ors; pctx->auto_line_term = "\n"; // xxx Windows default "\r\n"; libify pctx->auto_line_term_detected = FALSE; } // ---------------------------------------------------------------- void context_set_autodetected_crlf(context_t* pctx) { if (!pctx->auto_line_term_detected) { pctx->auto_line_term = "\r\n"; pctx->auto_line_term_detected = TRUE; } } void context_set_autodetected_lf(context_t* pctx) { if (!pctx->auto_line_term_detected) { pctx->auto_line_term = "\n"; pctx->auto_line_term_detected = TRUE; } } void context_set_autodetected_line_term(context_t* pctx, char* line_term) { if (!pctx->auto_line_term_detected) { pctx->auto_line_term = line_term; pctx->auto_line_term_detected = TRUE; } } // ---------------------------------------------------------------- void context_print(context_t* pctx, char* indent) { printf("%spctx at %p:\n", indent, pctx); printf("%s nr = %lld\n", indent, pctx->nr); printf("%s fnr = %lld\n", indent, pctx->fnr); printf("%s filenum = %d\n", indent, pctx->filenum); if (pctx->filename == NULL) { printf("%s filename = null\n", indent); } else { printf("%s filename = \"%s\"\n", indent, pctx->filename); } } miller-5.6.2/c/lib/context.h000066400000000000000000000020101354153536500156400ustar00rootroot00000000000000#ifndef CONTEXT_H #define CONTEXT_H // File-level context for Miller's NR, FNR, FILENAME, and FILENUM variables, as // well as for error messages typedef struct _context_t { long long nr; long long fnr; int filenum; char* filename; int force_eof; // e.g. mlr head char* ips; char* ifs; char* irs; char* ops; char* ofs; char* ors; // For autodetect between LF and CRLF line endings: the lrec reader // (when in --auto mode) can place here the line ending which was // encountered on the first record read. char* auto_line_term; int auto_line_term_detected; } context_t; void context_init_from_first_file_name(context_t* pctx, char* first_file_name); void context_init_from_opts(context_t* pctx, void* pvopts); void context_set_autodetected_crlf(context_t* pctx); void context_set_autodetected_lf(context_t* pctx); void context_set_autodetected_line_term(context_t* pctx, char* line_term); void context_print(context_t* pctx, char* indent); #endif // CONTEXT_H miller-5.6.2/c/lib/free_flags.h000066400000000000000000000007561354153536500162700ustar00rootroot00000000000000#ifndef FREE_FLAGS_H #define FREE_FLAGS_H // For use by various data structures including slls_t and lrec_t. Some // keys/values are dynamically allocated and should be freed the container's // destructor, and some should not. Examples of the former include strduped // keys/values; examples of the latter include data from string literals, or // from mmapped file-input data. #define NO_FREE 0x00 #define FREE_ENTRY_KEY 0x40 #define FREE_ENTRY_VALUE 0x04 #endif // FREE_FLAGS_H miller-5.6.2/c/lib/minunit.h000066400000000000000000000017721354153536500156550ustar00rootroot00000000000000// ================================================================ // http://www.jera.com/techinfo/jtns/jtn002.html // MinUnit license: // "You may use the code in this tech note for any purpose, with the understanding that it comes with NO WARRANTY." // ================================================================ #ifndef MINUNIT_H #define MINUNIT_H #define MU_STRINGIFY_2(x) #x #define MU_STRINGIFY_1(x) MU_STRINGIFY_2(x) #define mu_assert_lf(test) mu_assert(__FILE__ " line " MU_STRINGIFY_1(__LINE__), test) #define mu_assert(message, test) do { assertions_run++; if (!(test)) {assertions_failed++; return message;} } while (0) #define mu_run_test(test) do { \ char *message = test(); \ tests_run++; \ if (message) { \ tests_failed++; \ printf("Failure at %s\n", message); \ printf("from file %s line %d\n", __FILE__, __LINE__); \ return message; \ } \ } while (0) extern int tests_run; extern int tests_failed; extern int assertions_run; extern int assertions_failed; #endif // MINUNIT_H miller-5.6.2/c/lib/mlr_arch.c000066400000000000000000000036141354153536500157510ustar00rootroot00000000000000#include #include #include #include "mlr_globals.h" #include "mlr_arch.h" #include "mlrutil.h" #include "netbsd_strptime.h" #include "nlnet_timegm.h" // For some Linux distros, in spite of including time.h: char *strptime(const char *s, const char *format, struct tm *ptm); // ---------------------------------------------------------------- int mlr_arch_setenv(const char *name, const char *value) { #ifdef MLR_ON_MSYS2 fprintf(stderr, "%s: setenv is not supported on this architecture.\n", MLR_GLOBALS.bargv0); exit(1); #else return setenv(name, value, 1 /*overwrite*/); #endif } // ---------------------------------------------------------------- int mlr_arch_unsetenv(const char *name) { #ifdef MLR_ON_MSYS2 fprintf(stderr, "%s: unsetenv is not supported on this architecture.\n", MLR_GLOBALS.bargv0); exit(1); #else return unsetenv(name); #endif } // ---------------------------------------------------------------- char *mlr_arch_strptime(const char *s, const char *format, struct tm *ptm) { #ifdef MLR_ON_MSYS2 return netbsd_strptime(s, format, ptm); #else return strptime(s, format, ptm); #endif } // ---------------------------------------------------------------- // See the GNU timegm manpage -- this is what it does. time_t mlr_arch_timegmlocal(struct tm* ptm, timezone_handling_t timezone_handling) { #ifdef MLR_ON_MSYS2 // Crap, we're offering limited Windows support :( if (timezone_handling != TIMEZONE_HANDLING_GMT) { fprintf(stderr, "%s: Local timezone is not handled for output.\n", MLR_GLOBALS.bargv0); exit(1); } return nlnet_timegm(ptm); #else time_t ret; if (timezone_handling == TIMEZONE_HANDLING_GMT) { char* tz = getenv("TZ"); mlr_arch_setenv("TZ", "GMT0"); tzset(); ret = mktime(ptm); if (tz) { mlr_arch_setenv("TZ", tz); } else { mlr_arch_unsetenv("TZ"); } tzset(); } else { ret = mktime(ptm); } return ret; #endif } miller-5.6.2/c/lib/mlr_arch.h000066400000000000000000000026451354153536500157610ustar00rootroot00000000000000#ifndef MLR_ARCH_H #define MLR_ARCH_H #include #include #include "mlrtimezone.h" // ================================================================ // Miller compiles without ifdefs on Linux, BSDs, and MacOSX -- but // the situation is more complex for Windows (using MSYS2 in particular). // The idea of mlr_arch is to confine all platform-specific code here. // ================================================================ #undef MLR_ON_MSYS2 // sedded to #define in appveyor setup // ---------------------------------------------------------------- // Miller is single-threaded and the file-locking in getc is simply an unneeded // performance hit, so we intentionally call getc_unlocked(). But for MSYS2 // (Windows port), there exists no such. #ifdef MLR_ON_MSYS2 #define mlr_arch_getc(stream) getc(stream) #else #define mlr_arch_getc(stream) getc_unlocked(stream) #endif // ---------------------------------------------------------------- #ifdef MLR_ON_MSYS2 #define MLR_ARCH_MMAP_ENABLED 0 #else #define MLR_ARCH_MMAP_ENABLED 1 #include #endif // ---------------------------------------------------------------- int mlr_arch_setenv(const char *name, const char *value); int mlr_arch_unsetenv(const char *name); char *mlr_arch_strptime(const char *s, const char *format, struct tm *ptm); time_t mlr_arch_timegmlocal(struct tm* ptm, timezone_handling_t timezone_handling); #endif // MLR_ARCH_H miller-5.6.2/c/lib/mlr_globals.c000066400000000000000000000004111354153536500164470ustar00rootroot00000000000000#include #include #include "lib/mlr_globals.h" mlr_globals_t MLR_GLOBALS = { .bargv0 = "mlr-globals-uninit", .ofmt = NULL }; void mlr_global_init(char* argv0, char* ofmt) { MLR_GLOBALS.bargv0 = basename(argv0); MLR_GLOBALS.ofmt = ofmt; } miller-5.6.2/c/lib/mlr_globals.h000066400000000000000000000003711354153536500164610ustar00rootroot00000000000000#ifndef MLR_GLOBALS_H #define MLR_GLOBALS_H typedef struct _mlr_globals_t { char* bargv0; // basename of argv0 char* ofmt; } mlr_globals_t; extern mlr_globals_t MLR_GLOBALS; void mlr_global_init(char* argv0, char* ofmt); #endif // MLR_GLOBALS_H miller-5.6.2/c/lib/mlr_test_util.c000066400000000000000000000015701354153536500170470ustar00rootroot00000000000000#include #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" // ---------------------------------------------------------------- char* write_temp_file_or_die(char* contents) { // This template will be overwritten by mkstemp char* path = mlr_strdup_or_die("/tmp/mlr.ut.XXXXXXXX"); int fd = mkstemp(path); FILE* fp = fdopen(fd, "w"); int len = strlen(contents); int rc = fwrite(contents, 1, len, fp); if (rc != len) { perror("fwrite"); fprintf(stderr, "%s: fwrite (%d) to \"%s\" failed.\n", MLR_GLOBALS.bargv0, len, path); exit(1); } fclose(fp); return path; } // ---------------------------------------------------------------- void unlink_file_or_die(char* path) { int rc = unlink(path); if (rc != 0) { perror("unlink"); fprintf(stderr, "unlink of \"%s\" failed.\n", path); exit(1); } } miller-5.6.2/c/lib/mlr_test_util.h000066400000000000000000000003051354153536500170470ustar00rootroot00000000000000#ifndef MLR_TEST_UTIL_H #define MLR_TEST_UTIL_H // Returns the name of the temp file char* write_temp_file_or_die(char* contents); void unlink_file_or_die(char* path); #endif // MLR_TEST_UTIL_H miller-5.6.2/c/lib/mlrdatetime.c000066400000000000000000000306201354153536500164660ustar00rootroot00000000000000#include #include #include #include #include #include #include "lib/mlr_globals.h" #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlrdatetime.h" #include "lib/string_builder.h" // NZ since this isn't counting the null terminator. #define NZBUFLEN 63 // ---------------------------------------------------------------- // seconds since the epoch double get_systime() { struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; (void)gettimeofday(&tv, NULL); return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6; } // ---------------------------------------------------------------- // The essential idea is that we use the library function gmtime to get a struct tm, then strftime // to produce a formatted string. The only complication is that we support "%1S" through "%9S" for // formatting the seconds with a desired number of decimal places. char* mlr_alloc_time_string_from_seconds(double seconds_since_the_epoch, char* format_string, timezone_handling_t timezone_handling) { // 1. Split out the integer seconds since the epoch, which the stdlib can handle, and // the fractional part, which it cannot. time_t iseconds = (time_t) seconds_since_the_epoch; double fracsec = seconds_since_the_epoch - iseconds; struct tm tm; switch(timezone_handling) { case TIMEZONE_HANDLING_GMT: tm = *gmtime(&iseconds); // No gmtime_r on Windows so just use gmtime. break; case TIMEZONE_HANDLING_LOCAL: tm = *localtime(&iseconds); // No gmtime_r on Windows so just use gmtime. break; default: fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); break; } // 2. See if "%nS" (for n in 1..9) is a substring of the format string. char* middle_nS_format = NULL; char* right_subformat = NULL; int n = 0; // Save off n for round-up handling below. for (char* p = format_string; *p; p++) { // We can't use strstr since we're searching for a pattern, and regexes are overkill. // Here we rely on left-to-right evaluation of the boolean expressions, with non-evaluation // of a subexpression if a subexpression to its left is false (this keeps us from reading // past end of input string). if (p[0] == '%' && p[1] >= '1' && p[1] <= '9' && p[2] == 'S') { middle_nS_format = p; right_subformat = &p[3]; n = p[1] - '0'; break; } } // 3. If "%nS" (for n in 1..9) is not a substring of the format string, just use strftime. if (middle_nS_format == NULL) { char* output_string = mlr_malloc_or_die(NZBUFLEN+1); int written_length = strftime(output_string, NZBUFLEN, format_string, &tm); if (written_length > NZBUFLEN || written_length == 0) { fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); exit(1); } return output_string; } // Now we know "%nS" (for n in 1..9) is a substring of the format string. Idea is to // copy the subformats to the left and right of the %nS part and format them both using // strftime, and format the middle part ourselves using sprintf. Then concatenate all // those pieces. // 5. Find the left-of-%nS subformat, and format the input using that. int left_subformat_length = middle_nS_format - format_string; char* left_subformat = mlr_malloc_or_die(left_subformat_length + 1); memcpy(left_subformat, format_string, left_subformat_length); left_subformat[left_subformat_length] = 0; char left_formatted[NZBUFLEN+1]; if (*left_subformat == 0) { // There's nothing to the left of %nS. strftime will error on empty format string, so we can // just map empty format to empty result ourselves. *left_formatted = 0; } else { int written_length = strftime(left_formatted, NZBUFLEN, left_subformat, &tm); if (written_length > NZBUFLEN || written_length == 0) { fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); exit(1); } } free(left_subformat); // 6. There are two parts in the middle: the integer part which strftime can populate // from the struct tm, using %S format, and the fractional-seconds part which we sprintf. // First do the int part. char middle_int_formatted[NZBUFLEN+1]; char* middle_int_format = "%S"; int written_length = strftime(middle_int_formatted, NZBUFLEN, middle_int_format, &tm); if (written_length > NZBUFLEN || written_length == 0) { fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); exit(1); } // 7. Do the fractional-seconds part. One key point is that sprintf always writes a leading zero, // e.g. .123456 becomes "0.123456". We'll take off the leading zero later. char middle_sprintf_format[] = "%.xlf"; char middle_fractional_formatted[16]; // "%6S" maps to "%.6lf" and so on. We found the middle_nS_format by searching for "%nS" for // n in 1..9 so sprintf-format subscript 2 is the same as strftime format subscript 1. middle_sprintf_format[2] = middle_nS_format[1]; sprintf(middle_fractional_formatted, middle_sprintf_format, fracsec); // 8. Format the right-of-%nS part, also using strftime. char right_formatted[NZBUFLEN]; if (*right_subformat == 0) { // There's nothing to the right of %nS. strftime will error on empty format string, so we can // just map empty format to empty result ourselves. *right_formatted = 0; } else { int written_length = strftime(right_formatted, NZBUFLEN, right_subformat, &tm); if (written_length > NZBUFLEN || written_length == 0) { fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); exit(1); } } // 9. Concatenate the output. For string_builder, the size argument is just an initial size; // it can realloc beyond that initial estimate if necessary. string_builder_t* psb = sb_alloc(NZBUFLEN+1); sb_append_string(psb, left_formatted); sb_append_string(psb, middle_int_formatted); // When the input has fractional seconds like 0.999999 and the format is shorter than that, // e.g. "%3S", there can be round-up to 1.0 on the sprintf. if (middle_fractional_formatted[0] == '1') { sb_append_char(psb, '.'); for (int i = 0; i < n; i++) sb_append_char(psb, '9'); } else if (middle_fractional_formatted[0] == '0') { sb_append_string(psb, &middle_fractional_formatted[1]); } else { MLR_INTERNAL_CODING_ERROR(); } sb_append_string(psb, right_formatted); char* output_string = sb_finish(psb); sb_free(psb); return output_string; } // ---------------------------------------------------------------- // Miller supports fractional seconds in the input string, but strptime doesn't. So we have // to play some tricks, inspired in part by some ideas on StackOverflow. Special shout-out // to @tinkerware on Github for the push in the right direction! :) double mlr_seconds_from_time_string(char* time_string, char* format_string, timezone_handling_t timezone_handling) { struct tm tm; // 1. Just try strptime on the input as-is and return quickly if it's OK. memset(&tm, 0, sizeof(tm)); char* strptime_retval = mlr_arch_strptime(time_string, format_string, &tm); if (strptime_retval != NULL) { if (*strptime_retval != 0) { // Extraneous stuff in the input not matching the format fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } // printf("TIME_STRING %s\n", time_string); // printf("FORMAT_STRING %s\n", time_string); // printf("tm_year =%d\n", tm.tm_year); // printf("tm_mon =%d\n", tm.tm_mon); // printf("tm_mday =%d\n", tm.tm_mday); // printf("tm_wday =%d\n", tm.tm_wday); // printf("tm_yday =%d\n", tm.tm_yday); // printf("tm_hour =%d\n", tm.tm_hour); // printf("tm_min =%d\n", tm.tm_min); // printf("tm_sec =%d\n", tm.tm_sec); // printf("tm_isdst =%d\n", tm.tm_isdst); return (double)mlr_arch_timegmlocal(&tm, timezone_handling); } // 2. Now either there's floating-point seconds in the input, or something else is wrong. // First look for "%S" in the format string, for two reasons: (a) if there isn't "%S" // then something else is wrong; (b) if there is, we'll need that to split the format // string. char* pS = strstr(format_string, "%S"); if (pS == NULL) { // strptime failure couldn't have been because of floating-point-seconds stuff. No // reason to try any harder. fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } // There's "%S" in the format string, and the input has fractional seconds matching that // and no other problems, or there's something else wrong. // // Running example as we work through the rest: // * Input is "2017-04-09T00:51:09.123456 TZBLAHBLAH" // * Format is "%Y-%m-%dT%H:%M:%S TZBLAHBLAH" // 3. Copy the format up to the %S but with nothing else after. This is temporary to help us locate // the fractional-seconds part of the input string. // Example temporary format: "%Y-%m-%dT%H:%M:%S" int truncated_format_string_length = pS - format_string + 2; // 2 for the "%S" char* truncated_format_string = mlr_malloc_or_die(truncated_format_string_length + 1); memcpy(truncated_format_string, format_string, truncated_format_string_length); truncated_format_string[truncated_format_string_length] = 0; // 4. strptime using that truncated format and ignore the tm. Only look at the string return value. // Example return value: ".123456 TZBLAHBLAH" strptime_retval = mlr_arch_strptime(time_string, truncated_format_string, &tm); if (strptime_retval == NULL) { fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } free(truncated_format_string); // 5. strtod the return value to find the fractional-seconds part, and whatever's after. // Example fractional-seconds part: ".123456" // Example stuff after: " TZBLAHBLAH" char* stuff_after = NULL; double fractional_seconds; if (strptime_retval[0] == '.' && !isdigit(strptime_retval[1])) { // If they had just a decimal point with no digits after, e.g. "10." seconds rather than "10.0", // that's OK, but strtod won't parse that as double. fractional_seconds = 0.0; stuff_after = &strptime_retval[1]; } else { fractional_seconds = strtod(strptime_retval, &stuff_after); if (stuff_after == strptime_retval) { // Non-parseable fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } } // 6. Make a copy of the input string with the fractional seconds elided. // Example: "2017-04-09T00:51:09 TZBLAHBLAH" char* elided_fraction_input = mlr_malloc_or_die(strlen(time_string) + 1); int input_length_up_to_fractional_seconds = strptime_retval - time_string; memcpy(elided_fraction_input, time_string, input_length_up_to_fractional_seconds); strcpy(&elided_fraction_input[input_length_up_to_fractional_seconds], stuff_after); // 7. strptime the elided-fraction input string using the original format string. (This is like // the input never had fractional seconds in the first place.) Get the tm parsed from that. memset(&tm, 0, sizeof(tm)); strptime_retval = mlr_arch_strptime(elided_fraction_input, format_string, &tm); if (strptime_retval == NULL) { fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } if (*strptime_retval != 0) { // Extraneous stuff in the input not matching the format fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); exit(1); } free(elided_fraction_input); // 8. Convert the tm to a time_t (seconds since the epoch) and then add the fractional seconds. return mlr_arch_timegmlocal(&tm, timezone_handling) + fractional_seconds; } miller-5.6.2/c/lib/mlrdatetime.h000066400000000000000000000011461354153536500164740ustar00rootroot00000000000000#ifndef MLRDATETIME_H #define MLRDATETIME_H #include #include #include #include #include "mlrtimezone.h" // Seconds since the epoch. double get_systime(); // These use the gmtime/timegm and strftime/strptime standard-library functions, with the addition // of support for floating-point seconds since the epoch. char* mlr_alloc_time_string_from_seconds(double seconds_since_the_epoch, char* format, timezone_handling_t timezone_handling); double mlr_seconds_from_time_string(char* string, char* format, timezone_handling_t timezone_handling); #endif // MLRDATETIME_H miller-5.6.2/c/lib/mlrescape.c000066400000000000000000000013001354153536500161230ustar00rootroot00000000000000#include "lib/mlrescape.h" #include "lib/mlrutil.h" #include "lib/string_builder.h" // Avoids shell-injection cases by replacing single-quote with backslash single-quote, // then wrapping the entire result in initial and final single-quote. char* alloc_file_name_escaped_for_popen(char* filename) { string_builder_t* psb = sb_alloc(strlen(filename)); sb_append_char(psb, '\''); for (char* p = filename; *p; p++) { char c = *p; if (c == '\'') { sb_append_char(psb, '\''); sb_append_char(psb, '\\'); sb_append_char(psb, '\''); sb_append_char(psb, '\''); } else { sb_append_char(psb, c); } } sb_append_char(psb, '\''); char* rv = sb_finish(psb); sb_free(psb); return rv; } miller-5.6.2/c/lib/mlrescape.h000066400000000000000000000004261354153536500161400ustar00rootroot00000000000000#ifndef MLRESCAPE_H #define MLRESCAPE_H // Avoids shell-injection cases by replacing single-quote with backslash single-quote, // then wrapping the entire result in initial and final single-quote. char* alloc_file_name_escaped_for_popen(char* filename); #endif // MLRESCAPE_H miller-5.6.2/c/lib/mlrmath.c000066400000000000000000000252061354153536500156270ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "lib/mlrmath.h" #include "lib/mlr_globals.h" #define JACOBI_TOLERANCE 1e-12 #define JACOBI_MAXITER 20 static void matmul2(double C[2][2], double A[2][2], double B[2][2]); static void matmul2t(double C[2][2], double A[2][2], double B[2][2]); // ---------------------------------------------------------------- // Jacobi real-symmetric eigensolver. Loosely adapted from Numerical Recipes. // // Note: this is coded for n=2 (to implement PCA linear regression on 2 // variables) but the algorithm is quite general. Changing from 2 to n is a // matter of updating the top and bottom of the function: function signature to // take double** matrix, double* eigenvector_1, double* eigenvector_2, and n; // create copy-matrix and make-identity matrix functions; free temp matrices at // the end; etc. void mlr_get_real_symmetric_eigensystem( double matrix[2][2], // Input double *peigenvalue_1, // Output: dominant eigenvalue double *peigenvalue_2, // Output: less-dominant eigenvalue double eigenvector_1[2], // Output: corresponding to dominant eigenvalue double eigenvector_2[2]) // Output: corresponding to less-dominant eigenvalue { double L[2][2] = { { matrix[0][0], matrix[0][1] }, { matrix[1][0], matrix[1][1] } }; double V[2][2] = { { 1.0, 0.0 }, { 0.0, 1.0 }, }; double P[2][2], PT_A[2][2]; int n = 2; int found = 0; for (int iter = 0; iter < JACOBI_MAXITER; iter++) { double sum = 0.0; for (int i = 1; i < n; i++) for (int j = 0; j < i; j++) sum += fabs(L[i][j]); if (fabs(sum*sum) < JACOBI_TOLERANCE) { found = 1; break; } for (int p = 0; p < n; p++) { for (int q = p+1; q < n; q++) { double numer = L[p][p] - L[q][q]; double denom = L[p][q] + L[q][p]; if (fabs(denom) < JACOBI_TOLERANCE) continue; double theta = numer / denom; int sign_theta = (theta < 0) ? -1 : 1; double t = sign_theta / (fabs(theta) + sqrt(theta*theta + 1)); double c = 1.0 / sqrt(t*t + 1); double s = t * c; for (int pi = 0; pi < n; pi++) for (int pj = 0; pj < n; pj++) P[pi][pj] = (pi == pj) ? 1.0 : 0.0; P[p][p] = c; P[p][q] = -s; P[q][p] = s; P[q][q] = c; // L = P.transpose() * L * P // V = V * P matmul2t(PT_A, P, L); matmul2(L, PT_A, P); matmul2(V, V, P); } } } if (!found) { fprintf(stderr, "Jacobi eigensolver: max iterations (%d) exceeded. Non-symmetric input?\n", JACOBI_MAXITER); exit(1); } double eigenvalue_1 = L[0][0]; double eigenvalue_2 = L[1][1]; double abs1 = fabs(eigenvalue_1); double abs2 = fabs(eigenvalue_2); if (abs1 > abs2) { *peigenvalue_1 = eigenvalue_1; *peigenvalue_2 = eigenvalue_2; eigenvector_1[0] = V[0][0]; // Column 0 of V eigenvector_1[1] = V[1][0]; eigenvector_2[0] = V[0][1]; // Column 1 of V eigenvector_2[1] = V[1][1]; } else { *peigenvalue_1 = eigenvalue_2; *peigenvalue_2 = eigenvalue_1; eigenvector_1[0] = V[0][1]; eigenvector_1[1] = V[1][1]; eigenvector_2[0] = V[0][0]; eigenvector_2[1] = V[1][0]; } } static void matmul2( double C[2][2], // Output double A[2][2], // Input double B[2][2]) // Input { double T[2][2]; int n = 2; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { double sum = 0.0; for (int k = 0; k < n; k++) sum += A[i][k] * B[k][j]; T[i][j] = sum; } } for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = T[i][j]; } static void matmul2t( double C[2][2], // Output double A[2][2], // Input double B[2][2]) // Input { double T[2][2]; int n = 2; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { double sum = 0.0; for (int k = 0; k < n; k++) sum += A[k][i] * B[k][j]; T[i][j] = sum; } } for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) C[i][j] = T[i][j]; } // ---------------------------------------------------------------- // Normal cumulative distribution function, expressed in terms of erfc library // function (which is awkward, but exists). double qnorm(double x) { return 0.5 * erfc(-x * M_SQRT1_2); } // ---------------------------------------------------------------- // This is a tangent-following method not unlike Newton-Raphson: // * We can compute qnorm(y) = integral from -infinity to y of (1/sqrt(2pi)) exp(-t^2/2) dt. // * We can compute derivative of qnorm(y) = (1/sqrt(2pi)) exp(-y^2/2). // * We cannot explicitly compute invqnorm(y). // * If dx/dy = (1/sqrt(2pi)) exp(-y^2/2) then dy/dx = sqrt(2pi) exp(y^2/2). // // This means we *can* compute the derivative of invqnorm even though we // can't compute the function itself. So the essence of the method is to // follow the tangent line to form successive approximations: we have known function input x // and unknown function output y and initial guess y0. At each step we find the intersection // of the tangent line at y_n with the vertical line at x, to find y_{n+1}. Specificall: // // * Even though we can't compute y = q^-1(x) we can compute x = q(y). // * Start with initial guess for y (y0 = 0.0 or y0 = x both are OK). // * Find x = q(y). Since q (and therefore q^-1) are 1-1, we're done if qnorm(invqnorm(x)) is small. // * Else iterate: using point-slope form, (y_{n+1} - y_n) / (x_{n+1} - x_n) = m = sqrt(2pi) exp(y_n^2/2). // Here x_2 = x (the input) and x_1 = q(y_1). // * Solve for y_{n+1} and repeat. #define INVQNORM_TOL 1e-9 #define INVQNORM_MAXITER 30 double invqnorm(double x) { // Initial approximation is linear. Starting with y0 = 0.0 works just as well. double y0 = x - 0.5; if (x <= 0.0) return 0.0; if (x >= 1.0) return 0.0; double y = y0; int niter = 0; while (1) { double backx = qnorm(y); double err = fabs(x - backx); if (err < INVQNORM_TOL) break; if (niter > INVQNORM_MAXITER) { fprintf(stderr, "%s: internal coding error: max iterations %d exceeded in invqnorm.\n", MLR_GLOBALS.bargv0, INVQNORM_MAXITER); exit(1); } double m = sqrt(2*M_PI) * exp(y*y/2.0); double delta_y = m * (x - backx); y += delta_y; niter++; } return y; } // ================================================================ // Logisitic regression // // Real-valued x_0 .. x_{N-1} // 0/1-valued y_0 .. y_{N-1} // Model p(x_i == 1) as // p(x, m, b) = 1 / (1 + exp(-m*x-b) // which is the same as // log(p/(1-p)) = m*x + b // then // p(x, m, b) = 1 / (1 + exp(-m*x-b) // = exp(m*x+b) / (1 + exp(m*x+b) // and // 1-p = exp(-m*x-b) / (1 + exp(-m*x-b) // = 1 / (1 + exp(m*x+b) // Note for reference just below that // dp/dm = -1 / [1 + exp(-m*x-b)]**2 * (-x) * exp(-m*x-b) // = [x exp(-m*x-b)) ] / [1 + exp(-m*x-b)]**2 // = x * p * (1-p) // and // dp/db = -1 / [1 + exp(-m*x-b)]**2 * (-1) * exp(-m*x-b) // = [exp(-m*x-b)) ] / [1 + exp(-m*x-b)]**2 // = p * (1-p) // Write p_i for p(x_i, m, b) // // Maximum-likelihood equation: // L(m, b) = prod_{i=0}^{N-1} [ p_i**y_i * (1-p_i)**(1-y_i) ] // // Log-likelihood equation: // ell(m, b) = sum{i=0}^{N-1} [ y_i log(p_i) + (1-y_i) log(1-p_i) ] // = sum{i=0}^{N-1} [ log(1-p_i) + y_i log(p_i/(1-p_i)) ] // = sum{i=0}^{N-1} [ log(1-p_i) + y_i*(m*x_i+b) ] // Differentiate with respect to parameters: // // d ell/dm = sum{i=0}^{N-1} [ -1/(1-p_i) dp_i/dm + x_i*y_i ] // = sum{i=0}^{N-1} [ -1/(1-p_i) x_i*p_i*(1-p_i) + x_i*y_i ] // = sum{i=0}^{N-1} [ x_i(y_i-p_i) ] // // d ell/db = sum{i=0}^{N-1} [ -1/(1-p_i) dp_i/db + y_i ] // = sum{i=0}^{N-1} [ -1/(1-p_i) p_i*(1-p_i) + y_i ] // = sum{i=0}^{N-1} [ y_i - p_i ] // // // d2ell/dm2 = sum{i=0}^{N-1} [ -x_i dp_i/dm ] // = sum{i=0}^{N-1} [ -x_i**2 * p_i * (1-p_i) ] // // d2ell/dmdb = sum{i=0}^{N-1} [ -x_i dp_i/db ] // = sum{i=0}^{N-1} [ -x_i * p_i * (1-p_i) ] // // d2ell/dbdm = sum{i=0}^{N-1} [ -dp_i/dm ] // = sum{i=0}^{N-1} [ -x_i * p_i * (1-p_i) ] // // d2ell/db2 = sum{i=0}^{N-1} [ -dp_i/db ] // = sum{i=0}^{N-1} [ -p_i * (1-p_i) ] // // Newton-Raphson to minimize ell(m, b): // * Pick m0, b0 // * [m_{j+1], b_{j+1}] = H^{-1} grad ell(m_j, b_j) // * grad ell = // [ d ell/dm ] // [ d ell/db ] // * H = Hessian of ell = Jacobian of grad ell = // [ d2ell/dm2 d2ell/dmdb ] // [ d2ell/dmdb d2ell/db2 ] // p(x,m,b) for logistic regression: static double lrp(double x, double m, double b) { return 1.0 / (1.0 + exp(-m*x-b)); } // 1 - p(x,m,b) for logistic regression: static double lrq(double x, double m, double b) { return 1.0 / (1.0 + exp(m*x+b)); } // Supporting routine for mlr_logistic_regression(): static void mlr_logistic_regression_aux(double* xs, double* ys, int n, double* pm, double* pb, double m0, double b0, double tol, int maxits) { int its = 0; int done = FALSE; double m = m0; double b = b0; while (!done) { // Compute derivatives double dldm = 0.0; double dldb = 0.0; double d2ldm2 = 0.0; double d2ldmdb = 0.0; double d2ldb2 = 0.0; double ell0 = 0.0; for (int i = 0; i < n; i++) { double xi = xs[i]; double yi = ys[i]; double pi = lrp(xi, m0, b0); double qi = lrq(xi, m0, b0); dldm += xi*(yi - pi); dldb += yi - pi; double piqi = pi * qi; double xipiqi = xi*piqi; double xi2piqi = xi*xipiqi; d2ldm2 -= xi2piqi; d2ldmdb -= xipiqi; d2ldb2 -= piqi; ell0 += log(qi) + yi * (m0 * xi + b0); } // Form the Hessian double ha = d2ldm2; double hb = d2ldmdb; double hc = d2ldmdb; double hd = d2ldb2; // Invert the Hessian double D = ha*hd - hb*hc; double Hinva = hd/D; double Hinvb = -hb/D; double Hinvc = -hc/D; double Hinvd = ha/D; // Compute H^-1 times grad ell double Hinvgradm = Hinva*dldm + Hinvb*dldb; double Hinvgradb = Hinvc*dldm + Hinvd*dldb; // Update [m,b] m = m0 - Hinvgradm; b = b0 - Hinvgradb; double ell = 0.0; for (int i = 0; i < n; i++) { double xi = xs[i]; double yi = ys[i]; double qi = lrq(xi, m, b); ell += log(qi) + yi * (m0 * xi + b0); } // Check for convergence double dell = fmax(ell, ell0); double err = (dell == 0.0) ? 0.0 : fabs(ell - ell0) / dell; #if 0 printf("its=%d,m=%e,b=%e,dm=%e,db=%e,ell=%e\n", its, m0, b0, -Hinvgradm, -Hinvgradb, ell); #endif if (err < tol) done = TRUE; if (++its > maxits) { fprintf(stderr, "mlr_logistic_regression: Newton-Raphson convergence failed after %d iterations. m=%e, b=%e.\n", its, m, b); exit(1); } m0 = m; b0 = b; } *pm = m; *pb = b; } void mlr_logistic_regression(double* xs, double* ys, int n, double* pm, double* pb) { double m0 = -0.001; double b0 = 0.002; double tol = 1e-9; int maxits = 100; mlr_logistic_regression_aux(xs, ys, n, pm, pb, m0, b0, tol, maxits); } miller-5.6.2/c/lib/mlrmath.h000066400000000000000000000010531354153536500156260ustar00rootroot00000000000000#ifndef MLRMATH_H #define MLRMATH_H void mlr_get_real_symmetric_eigensystem( double matrix[2][2], // Input double* peigenvalue_1, // Output: dominant eigenvalue double* peigenvalue_2, // Output: less-dominant eigenvalue double eigenvector_1[2], // Output: corresponding to dominant eigenvalue double eigenvector_2[2]); // Output: corresponding to less-dominant eigenvalue double qnorm(double x); double invqnorm(double x); void mlr_logistic_regression(double* xs, double* ys, int n, double* pm, double* pb); #endif // MLRMATH_H miller-5.6.2/c/lib/mlrregex.c000066400000000000000000000226441354153536500160130ustar00rootroot00000000000000#include #include #include #include #include #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mlr_globals.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- // Succeeds or aborts the process. cflag REG_EXTENDED is already included. // // Reason for the double-backslashing routine: Miller DSL literals are unbackslashed, e.g. the // two-character sequence "\t" is converted to a tab character, and users need to type "\\t" to get // a backslash followed by a t. Well and good, but the system regex library handles backslashes not // quite as I want. Namely, without double-backslashing, // // echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' // // (note: not echo -e, but just plain echo) outputs // // a\TABb // // while // // echo 'x=a\tb' | mlr put '$x=sub($x,"\\\\t","TAB")' // // outputs // // aTABb // // Using double-backslashing, backslashes can be escaped as the regex library requires, before I call regcomp: // // echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' // // outputs // // aTABb // // as desired. regex_t* regcomp_or_die(regex_t* pregex, char* regex_string, int cflags) { cflags |= REG_EXTENDED; char* doubly_backslashed = mlr_alloc_double_backslash(regex_string); int rc = regcomp(pregex, doubly_backslashed, cflags); free(doubly_backslashed); if (rc != 0) { size_t nbytes = regerror(rc, pregex, NULL, 0); char* errbuf = malloc(nbytes); (void)regerror(rc, pregex, errbuf, nbytes); fprintf(stderr, "%s: could not compile regex \"%s\" : %s\n", MLR_GLOBALS.bargv0, regex_string, errbuf); exit(1); } return pregex; } // Always uses cflags with REG_EXTENDED. // If the regex_string is of the form a.*b, compiles it using cflags without REG_ICASE. // If the regex_string is of the form "a.*b", compiles a.*b using cflags without REG_ICASE. // If the regex_string is of the form "a.*b"i, compiles a.*b using cflags with REG_ICASE. regex_t* regcomp_or_die_quoted(regex_t* pregex, char* orig_regex_string, int cflags) { cflags |= REG_EXTENDED; if (string_starts_with(orig_regex_string, "\"")) { char* regex_string = mlr_strdup_or_die(orig_regex_string); int len = 0; if (string_ends_with(regex_string, "\"", &len)) { regex_string[len-1] = 0; } else if (string_ends_with(regex_string, "\"i", &len)) { regex_string[len-2] = 0; cflags |= REG_ICASE; } else { fprintf(stderr, "%s: imbalanced double-quote in regex [%s].\n", MLR_GLOBALS.bargv0, regex_string); exit(1); } regcomp_or_die(pregex, regex_string+1, cflags); free(regex_string); } else { regcomp_or_die(pregex, orig_regex_string, cflags); } return pregex; } // Returns TRUE for match, FALSE for no match, and aborts the process if // regexec returns anything else. int regmatch_or_die(const regex_t* pregex, const char* restrict match_string, size_t nmatchmax, regmatch_t pmatch[restrict]) { int rc = regexec(pregex, match_string, nmatchmax, pmatch, 0); if (rc == 0) { return TRUE; } else if (rc == REG_NOMATCH) { return FALSE; } else { size_t nbytes = regerror(rc, pregex, NULL, 0); char* errbuf = malloc(nbytes); (void)regerror(rc, pregex, errbuf, nbytes); printf("regexec failure: %s\n", errbuf); exit(1); } } // Capture-group example: // sed: $ echo '<>'|sed 's/ab\(.\)d\(..\)g/AYEBEE\1DEE\2GEE/' gives <> // mlr: echo 'x=<>' | mlr put '$x = sub($x, "ab(.)d(..)g", "AYEBEE\1DEE\2GEE")' x=<> char* regex_sub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, int* pmatched, int *pall_captured) { const size_t nmatchmax = 10; // Capture-groups \1 through \9 supported, along with entire-string match \0 regmatch_t matches[nmatchmax]; if (pall_captured) *pall_captured = TRUE; *pmatched = regmatch_or_die(pregex, input, nmatchmax, matches); if (!*pmatched) { return mlr_strdup_or_die(input); } else { sb_append_chars(psb, input, 0, matches[0].rm_so-1); char* p = replacement; while (*p) { if (p[0] == '\\' && isdigit(p[1])) { int idx = p[1] - '0'; regmatch_t* pmatch = &matches[idx]; if (pmatch->rm_so == -1) { if (pall_captured) *pall_captured = FALSE; sb_append_chars(psb, p, 0, 1); } else { sb_append_chars(psb, input, matches[idx].rm_so, matches[idx].rm_eo-1); } p += 2; } else { sb_append_char(psb, *p); p++; } } sb_append_chars(psb, input, matches[0].rm_eo, strlen(input)); return sb_finish(psb); } } char* regex_gsub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, int *pmatched, int* pall_captured, char* pfree_flags) { const size_t nmatchmax = 10; regmatch_t matches[nmatchmax]; *pmatched = FALSE; *pall_captured = TRUE; *pfree_flags = NO_FREE; int match_start = 0; char* current_input = input; while (TRUE) { int matched = regmatch_or_die(pregex, ¤t_input[match_start], nmatchmax, matches); if (!matched) { if (input == current_input) { *pfree_flags = FREE_ENTRY_VALUE; return mlr_strdup_or_die(current_input); } else { return current_input; } } *pmatched = TRUE; sb_append_chars(psb, current_input, 0, match_start + matches[0].rm_so-1); char* p = replacement; int len1 = psb->used_length; while (*p) { if (p[0] == '\\' && isdigit(p[1])) { int idx = p[1] - '0'; regmatch_t* pmatch = &matches[idx]; if (pmatch->rm_so == -1) { *pall_captured = FALSE; sb_append_chars(psb, p, 0, 1); } else { sb_append_chars(psb, ¤t_input[match_start], matches[idx].rm_so, matches[idx].rm_eo-1); } p += 2; } else { sb_append_char(psb, *p); p++; } } int replen = psb->used_length - len1; sb_append_chars(psb, current_input, match_start + matches[0].rm_eo, strlen(current_input)); char* next_input = sb_finish(psb); if (*pfree_flags & FREE_ENTRY_VALUE) free(current_input); current_input = next_input; *pfree_flags = FREE_ENTRY_VALUE; match_start += matches[0].rm_so + replen; } } // ---------------------------------------------------------------- char* regextract(char* input, regex_t* pregex) { const size_t nmatchmax = 1; regmatch_t matches[nmatchmax]; int matched = regmatch_or_die(pregex, input, nmatchmax, matches); if (!matched) { return NULL; } regmatch_t* pmatch = &matches[0]; int len = pmatch->rm_eo - pmatch->rm_so; return mlr_alloc_string_from_char_range(&input[pmatch->rm_so], len); } // ---------------------------------------------------------------- char* regextract_or_else(char* input, regex_t* pregex, char* default_value) { const size_t nmatchmax = 1; regmatch_t matches[nmatchmax]; int matched = regmatch_or_die(pregex, input, nmatchmax, matches); if (!matched) { return mlr_strdup_or_die(default_value); } regmatch_t* pmatch = &matches[0]; int len = pmatch->rm_eo - pmatch->rm_so; return mlr_alloc_string_from_char_range(&input[pmatch->rm_so], len); } // ---------------------------------------------------------------- // Slot 0 is the entire matched input string. // Slots 1 and up are substring matches for parenthesized capture expressions (if any). // Example regex "a(.*)e" with input string "abcde": slot 1 points to "bcd" and match_count = 2. // Slot 2 has rm_so == -1. // (If all allocated slots have matches then there is no slot with -1's.) // Input "abcde" // Regex "a(.*)e" // matches[0].rm_so = 0, matches[0].rm_eo = 5 // matches[1].rm_so = 1, matches[1].rm_eo = 4 // matches[2].rm_so = -1, matches[2].rm_eo = -1 // // pregex_captures->length = 2 // pregex_captures->strings[0] = "abcde" // pregex_captures->strings[1] = "bcd" // // Note that even if there is no match, a non-null zero-length regex-captures array is returned (by reference). // This is important: see the comments in mapper_put for details. void save_regex_captures(string_array_t** ppregex_captures, char* input, regmatch_t matches[], int nmatchmax) { int match_count = nmatchmax; // In fully occupied case, there will be no slots with -1's for (int i = 0; i < nmatchmax; i++) { if (matches[i].rm_so == -1) { match_count = i; break; } } if (*ppregex_captures != NULL) string_array_realloc(*ppregex_captures, match_count); else *ppregex_captures = string_array_alloc(match_count); string_array_t* pregex_captures = *ppregex_captures; if (match_count >= 1) { for (int i = 0; i < match_count; i++) { int len = matches[i].rm_eo - matches[i].rm_so; pregex_captures->strings[i] = mlr_alloc_string_from_char_range(&input[matches[i].rm_so], len); } pregex_captures->strings_need_freeing = TRUE; } } // ---------------------------------------------------------------- // Using the above example: // Input "abcde" // Regex "a(.*)e" // // pregex_captures->length = 2 // pregex_captures->strings[0] = "abcde" // pregex_captures->strings[1] = "bcd" // // "\0" should be replaced with "abcde". // "\1" should be replaced with "bcd". // "\2" through "\9" should be replaced with "". char* interpolate_regex_captures(char* input, string_array_t* pregex_captures, int* pwas_allocated) { *pwas_allocated = FALSE; string_builder_t* psb = sb_alloc(32); char* p = input; while (*p) { if (p[0] == '\\' && isdigit(p[1])) { *pwas_allocated = TRUE; int idx = p[1] - '0'; if (idx < pregex_captures->length) sb_append_string(psb, pregex_captures->strings[idx]); p += 2; } else { sb_append_char(psb, *p); p++; } } if (*pwas_allocated) { char* output = sb_finish(psb); sb_free(psb); return output; } else { sb_free(psb); return input; } } miller-5.6.2/c/lib/mlrregex.h000066400000000000000000000060011354153536500160050ustar00rootroot00000000000000#ifndef MLRREGEX_H #define MLRREGEX_H #include #include #include #include #include #include "mlrutil.h" #include "string_builder.h" #include "string_array.h" // Succeeds or aborts the process. cflag REG_EXTENDED is already included. // Returns its first argument (after compilation). regex_t* regcomp_or_die(regex_t* pregex, char* regex_string, int cflags); // Always uses cflags with REG_EXTENDED. // If the regex_string is of the form a.*b, compiles it using cflags without REG_ICASE. // If the regex_string is of the form "a.*b", compiles a.*b using cflags without REG_ICASE. // If the regex_string is of the form "a.*b"i, compiles a.*b using cflags with REG_ICASE. regex_t* regcomp_or_die_quoted(regex_t* pregex, char* regex_string, int cflags); // Returns TRUE for match, FALSE for no match, and aborts the process if // regexec returns anything else. int regmatch_or_die(const regex_t* pregex, const char* restrict match_string, size_t nmatchmax, regmatch_t pmatch[restrict]); // The return value is dynamically allocated even if there is no match, i.e. when output // equals input. The by-reference all-captured flag is true on return if all \1, etc. // were satisfiable by parenthesized capture groups. char* regex_sub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, int* pmatched, int* pall_captured); char* regex_gsub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, int* pmatched, int* pall_captured, char *pfree_flags); // The return value is dynamically allocated if there is a match, else it returns null. char* regextract(char* input, regex_t* pregex); char* regextract_or_else(char* input, regex_t* pregex, char* default_value); // The regex library gives us an array of match pointers into the input string. This function strdups them // out into separate storage, to implement "\0", "\1", "\2", etc. regex-captures for the =~ and !=~ operators. // If the regex-captures array is null, it is allocated; otherwise it is resized. If the input regex does not // match the regex, then the regex-captures array will be non-null but will have length 0. void save_regex_captures(string_array_t** ppregex_captures, char* input, regmatch_t matches[], int nmatchmax); // Given an array of regex-captures and an input string, interpolates the matches. E.g. if capture 1 is "abc" // and capture 2 is "def" and the input is "hello \1 goodbye \2", then the output is a newly allocated string // with value "hello abc goodbye def". The was-allocated flag is an output flag: if true upon return, there was // something modified and the returnv value should be freed; if false, nothing was modified and the input string was // returned as the function value. // // To avoid performance regressions in non-match cases, this function quickly returns if the regex-captures array is // NULL. See comments in mapper_put.c for more information. char* interpolate_regex_captures(char* input, string_array_t* pregex_captures, int* pwas_allocated); #endif // MLRREGEX_H miller-5.6.2/c/lib/mlrstat.c000066400000000000000000000164521354153536500156540ustar00rootroot00000000000000#include #include "lib/mlrstat.h" // ================================================================ // These are intended for streaming (i.e. single-pass) applications. Otherwise // the formulas look different (and are more intuitive). // ================================================================ // ---------------------------------------------------------------- // Univariate linear regression // ---------------------------------------------------------------- // There are N (xi, yi) pairs. // // minimize E = sum (yi - m xi - b)^2 // // Set the two partial derivatives to zero and solve for m and b: // // DE/Dm = sum 2 (yi - m xi - b) (-xi) = 0 // DE/Db = sum 2 (yi - m xi - b) (-1) = 0 // // sum (yi - m xi - b) (xi) = 0 // sum (yi - m xi - b) = 0 // // sum (xi yi - m xi^2 - b xi) = 0 // sum (yi - m xi - b) = 0 // // m sum(xi^2) + b sum(xi) = sum(xi yi) // m sum(xi) + b N = sum(yi) // // [ sum(xi^2) sum(xi) ] [ m ] = [ sum(xi yi) ] // [ sum(xi) N ] [ b ] = [ sum(yi) ] // // [ m ] = [ sum(xi^2) sum(xi) ]^-1 [ sum(xi yi) ] // [ b ] [ sum(xi) N ] [ sum(yi) ] // // = [ N -sum(xi) ] [ sum(xi yi) ] * 1/D // [ -sum(xi) sum(xi^2)] [ sum(yi) ] // // where // // D = N sum(xi^2) - sum(xi)^2. // // So // // N sum(xi yi) - sum(xi) sum(yi) // m = -------------------------------- // D // // -sum(xi)sum(xi yi) + sum(xi^2) sum(yi) // b = ---------------------------------------- // D // // ---------------------------------------------------------------- void mlr_get_linear_regression_ols(unsigned long long n, double sumx, double sumx2, double sumxy, double sumy, double* pm, double* pb) { double D = n * sumx2 - sumx*sumx; double m = (n * sumxy - sumx * sumy) / D; double b = (-sumx * sumxy + sumx2 * sumy) / D; *pm = m; *pb = b; } // We would need a second pass through the data to compute the error-bars given // the data and the m and the b. // // # Young 1962, pp. 122-124. Compute sample variance of linear // # approximations, then variances of m and b. // var_z = 0.0 // for i in range(0, N): // var_z += (m * xs[i] + b - ys[i])**2 // var_z /= N // // var_m = (N * var_z) / D // var_b = (var_z * sumx2) / D // // output = [m, b, math.sqrt(var_m), math.sqrt(var_b)] // ---------------------------------------------------------------- double mlr_get_var(unsigned long long n, double sum, double sum2) { double mean = sum / n; double numerator = sum2 - mean*(2.0*sum - n*mean); if (numerator < 0.0) // round-off error numerator = 0.0; double denominator = n - 1LL; return numerator / denominator; } // ---------------------------------------------------------------- // Unbiased estimator: // (1/n) sum{(xi-mean)**3} // ----------------------------- // [(1/(n-1)) sum{(xi-mean)**2}]**1.5 // mean = sumx / n; n mean = sumx // sum{(xi-mean)^3} // = sum{xi^3 - 3 mean xi^2 + 3 mean^2 xi - mean^3} // = sum{xi^3} - 3 mean sum{xi^2} + 3 mean^2 sum{xi} - n mean^3 // = sumx3 - 3 mean sumx2 + 3 mean^2 sumx - n mean^3 // = sumx3 - 3 mean sumx2 + 3n mean^3 - n mean^3 // = sumx3 - 3 mean sumx2 + 2n mean^3 // = sumx3 - mean*(3 sumx2 + 2n mean^2) // sum{(xi-mean)^2} // = sum{xi^2 - 2 mean xi + mean^2} // = sum{xi^2} - 2 mean sum{xi} + n mean^2 // = sumx2 - 2 mean sumx + n mean^2 // = sumx2 - 2 n mean^2 + n mean^2 // = sumx2 - n mean^2 double mlr_get_skewness(unsigned long long n, double sumx, double sumx2, double sumx3) { double mean = sumx / n; double numerator = sumx3 - mean*(3*sumx2 - 2*n*mean*mean); numerator = numerator / n; double denominator = (sumx2 - n*mean*mean) / (n-1); denominator = pow(denominator, 1.5); return numerator / denominator; } // Unbiased: // (1/n) sum{(x-mean)**4} // ----------------------- - 3 // [(1/n) sum{(x-mean)**2}]**2 // sum{(xi-mean)^4} // = sum{xi^4 - 4 mean xi^3 + 6 mean^2 xi^2 - 4 mean^3 xi + mean^4} // = sum{xi^4} - 4 mean sum{xi^3} + 6 mean^2 sum{xi^2} - 4 mean^3 sum{xi} + n mean^4 // = sum{xi^4} - 4 mean sum{xi^3} + 6 mean^2 sum{xi^2} - 4 n mean^4 + n mean^4 // = sum{xi^4} - 4 mean sum{xi^3} + 6 mean^2 sum{xi^2} - 3 n mean^4 // = sum{xi^4} - mean*(4 sum{xi^3} - 6 mean sum{xi^2} + 3 n mean^3) // = sumx4 - mean*(4 sumx3 - 6 mean sumx2 + 3 n mean^3) // = sumx4 - mean*(4 sumx3 - mean*(6 sumx2 - 3 n mean^2)) double mlr_get_kurtosis(unsigned long long n, double sumx, double sumx2, double sumx3, double sumx4) { double mean = sumx / n; double numerator = sumx4 - mean*(4*sumx3 - mean*(6*sumx2 - 3*n*mean*mean)); numerator = numerator / n; double denominator = (sumx2 - n*mean*mean) / n; denominator = denominator * denominator; return numerator / denominator - 3.0; } // ---------------------------------------------------------------- // Non-streaming implementation: // // def find_sample_covariance(xs, ys): // n = len(xs) // mean_x = find_mean(xs) // mean_y = find_mean(ys) // // sum = 0.0 // for k in range(0, n): // sum += (xs[k] - mean_x) * (ys[k] - mean_y) // // return sum / (n-1.0) double mlr_get_cov(unsigned long long n, double sumx, double sumy, double sumxy) { double meanx = sumx / n; double meany = sumy / n; double numerator = sumxy - meanx*sumy - meany*sumx + n*meanx*meany; double denominator = n - 1; return numerator / denominator; } // ---------------------------------------------------------------- void mlr_get_cov_matrix(unsigned long long n, double sumx, double sumx2, double sumy, double sumy2, double sumxy, double Q[2][2]) { double denominator = n - 1; Q[0][0] = (sumx2 - sumx*sumx/n) / denominator; Q[0][1] = (sumxy - sumx*sumy/n) / denominator; Q[1][0] = Q[0][1]; Q[1][1] = (sumy2 - sumy*sumy/n) / denominator; } // ---------------------------------------------------------------- // Principal component analysis can be used for linear regression: // // * Compute the covariance matrix for the x's and y's. // // * Find its eigenvalues and eigenvectors of the cov. (This is real-symmetric // so Jacobi iteration is simple and fine.) // // * The principal eigenvector points in the direction of the fit. // // * The covariance matrix is computed on zero-mean data so the intercept // is zero. The fit equation is of the form (y - nu) = m*(x - mu) where mu // and nu are x and y means, respectively. // // * If the fit is perfect then the 2nd eigenvalue will be zero; if the fit is // good then the 2nd eigenvalue will be smaller; if the fit is bad then // they'll be about the same. I use 1 - |lambda2|/|lambda1| as an indication // of quality of the fit. // // Standard ("ordinary least-squares") linear regression is appropriate when // the errors are thought to be all in the y's. PCA ("total least-squares") is // appropriate when the x's and the y's are thought to both have errors. void mlr_get_linear_regression_pca( // Inputs: double eigenvalue_1, double eigenvalue_2, double eigenvector_1[2], double eigenvector_2[2], double x_mean, double y_mean, // Outputs: double* pm, double* pb, double* pquality) { double abs_1 = fabs(eigenvalue_1); double abs_2 = fabs(eigenvalue_2); double quality = 1.0; if (abs_1 == 0.0) quality = 0.0; else if (abs_2 > 0.0) quality = 1.0 - abs_2 / abs_1; double a0 = eigenvector_1[0]; double a1 = eigenvector_1[1]; double m = a1 / a0; double b = y_mean - m * x_mean; *pm = m; *pb = b; *pquality = quality; } miller-5.6.2/c/lib/mlrstat.h000066400000000000000000000017121354153536500156520ustar00rootroot00000000000000#ifndef MLRSTAT_H #define MLRSTAT_H void mlr_get_linear_regression_ols(unsigned long long n, double sumx, double sumx2, double sumxy, double sumy, double* pm, double* pb); double mlr_get_var(unsigned long long n, double sum, double sum2); double mlr_get_cov(unsigned long long n, double sumx, double sumy, double sumxy); double mlr_get_skewness(unsigned long long n, double sumx, double sumx2, double sumx3); double mlr_get_kurtosis(unsigned long long n, double sumx, double sumx2, double sumx3, double sumx4); void mlr_get_cov_matrix(unsigned long long n, double sumx, double sumx2, double sumy, double sumy2, double sumxy, double Q[2][2]); void mlr_get_linear_regression_pca( // Inputs: double eigenvalue_1, double eigenvalue_2, double eigenvector_1[2], double eigenvector_2[2], double x_mean, double y_mean, // Outputs, with quality 1 being a tight fit and quality 0 being a loose one. double* pm, double* pb, double* pquality); #endif // MLRSTAT_H miller-5.6.2/c/lib/mlrtimezone.h000066400000000000000000000002621354153536500165300ustar00rootroot00000000000000#ifndef MLRTIMEZONE_H #define MLRTIMEZONE_H typedef enum _timezone_handling_t { TIMEZONE_HANDLING_GMT, TIMEZONE_HANDLING_LOCAL } timezone_handling_t; #endif // MLRTIMEZONE_H miller-5.6.2/c/lib/mlrutil.c000066400000000000000000000375041354153536500156570ustar00rootroot00000000000000#include #include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/free_flags.h" // ---------------------------------------------------------------- void mlr_internal_coding_error(char* file, int line) { fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, file, line); exit(1); } void mlr_internal_coding_error_if(int v, char* file, int line) { if (v) { mlr_internal_coding_error(file, line); } } void mlr_internal_coding_error_unless(int v, char* file, int line) { if (!v) { mlr_internal_coding_error(file, line); } } // ---------------------------------------------------------------- char* mlr_strmsep(char **pstring, const char *sep, int seplen) { char* string = *pstring; if (string == NULL) { return NULL; } char* pnext = strstr(string, sep); if (pnext == NULL) { *pstring = NULL; return string; } else { *pnext = 0; *pstring = pnext + seplen; return string; } } // ---------------------------------------------------------------- int mlr_bsearch_double_for_insert(double* array, int size, double value) { int lo = 0; int hi = size-1; int mid = (hi+lo)/2; int newmid; if (size == 0) return 0; if (value > array[0]) return 0; if (value < array[hi]) return size; while (lo < hi) { double a = array[mid]; if (value == a) { return mid; } else if (value > a) { hi = mid; newmid = (hi+lo)/2; } else { lo = mid; newmid = (hi+lo)/2; } if (mid == newmid) { if (value >= array[lo]) return lo; else if (value >= array[hi]) return hi; else return hi+1; } mid = newmid; } return lo; } // ---------------------------------------------------------------- void* mlr_malloc_or_die(size_t size) { void* p = malloc(size); if (p == NULL) { fprintf(stderr, "malloc(%llu) failed.\n", (unsigned long long)size); exit(1); } #ifdef MLR_MALLOC_TRACE fprintf(stderr, "MALLOC size=%llu,p=%p\n", (unsigned long long)size, p); #endif return p; } // ---------------------------------------------------------------- void* mlr_realloc_or_die(void *optr, size_t size) { void* nptr = realloc(optr, size); if (nptr == NULL) { fprintf(stderr, "realloc(%llu) failed.\n", (unsigned long long)size); exit(1); } #ifdef MLR_MALLOC_TRACE fprintf(stderr, "REALLOC size=%llu,p=%p\n", (unsigned long long)size, nptr); #endif return nptr; } // ---------------------------------------------------------------- char * mlr_strdup_quoted_or_die(const char *s1) { int len = strlen(s1); char* s2 = mlr_malloc_or_die(len+3); s2[0] = '"'; strcpy(&s2[1], s1); s2[len+1] = '"'; s2[len+2] = 0; return s2; } // ---------------------------------------------------------------- // The caller should free the return value from each of these. char* mlr_alloc_string_from_double(double value, char* fmt) { int n = snprintf(NULL, 0, fmt, value); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, value); return string; } char* mlr_alloc_string_from_ull(unsigned long long value) { int n = snprintf(NULL, 0, "%llu", value); char* string = mlr_malloc_or_die(n+1); sprintf(string, "%llu", value); return string; } char* mlr_alloc_string_from_ll(long long value) { int n = snprintf(NULL, 0, "%lld", value); char* string = mlr_malloc_or_die(n+1); sprintf(string, "%lld", value); return string; } char* mlr_alloc_string_from_ll_and_format(long long value, char* fmt) { int n = snprintf(NULL, 0, fmt, value); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, value); return string; } char* mlr_alloc_string_from_int(int value) { int n = snprintf(NULL, 0, "%d", value); char* string = mlr_malloc_or_die(n+1); sprintf(string, "%d", value); return string; } char* mlr_alloc_string_from_char_range(char* start, int num_bytes) { char* string = mlr_malloc_or_die(num_bytes+1); memcpy(string, start, num_bytes); string[num_bytes] = 0; return string; } char* mlr_alloc_hexfmt_from_ll(long long value) { int n = snprintf(NULL, 0, "0x%llx", (unsigned long long)value); char* string = mlr_malloc_or_die(n+1); sprintf(string, "0x%llx", value); return string; } char* mlr_alloc_string_from_string_and_format(char* old_value, char* fmt) { int n = snprintf(NULL, 0, fmt, old_value); char* new_value = mlr_malloc_or_die(n+1); sprintf(new_value, fmt, old_value); return new_value; } double mlr_double_from_string_or_die(char* string) { double d; if (!mlr_try_float_from_string(string, &d)) { fprintf(stderr, "%s: couldn't parse \"%s\" as number.\n", MLR_GLOBALS.bargv0, string); exit(1); } return d; } // E.g. "300" is a number; "300ms" is not. int mlr_try_float_from_string(char* string, double* pval) { int num_bytes_scanned; int rc = sscanf(string, "%lf%n", pval, &num_bytes_scanned); if (rc != 1) return 0; if (string[num_bytes_scanned] != 0) // scanned to end of string? return 0; return 1; } long long mlr_int_from_string_or_die(char* string) { long long i; if (!mlr_try_int_from_string(string, &i)) { fprintf(stderr, "Couldn't parse \"%s\" as number.\n", string); exit(1); } return i; } // E.g. "300" is a number; "300ms" is not. int mlr_try_int_from_string(char* string, long long* pval) { int num_bytes_scanned, rc; // sscanf with %li / %lli doesn't scan correctly when the high bit is set // on hex input; it just returns max signed. So we need to special-case hex // input. if (string[0] == '0' && (string[1] == 'x' || string[1] == 'X')) { rc = sscanf(string, "%llx%n", pval, &num_bytes_scanned); } else { rc = sscanf(string, "%lli%n", pval, &num_bytes_scanned); } if (rc != 1) return 0; if (string[num_bytes_scanned] != 0) // scanned to end of string? return 0; return 1; } // ---------------------------------------------------------------- static char* low_int_to_string_data[] = { "0", "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" }; char* low_int_to_string(int idx, char* pfree_flags) { if ((0 <= idx) && (idx <= 100)) { *pfree_flags = 0; return low_int_to_string_data[idx]; } else { char buf[32]; sprintf(buf, "%d", idx); *pfree_flags = FREE_ENTRY_KEY; return mlr_strdup_or_die(buf); } } // ---------------------------------------------------------------- char* mlr_paste_2_strings(char* s1, char* s2) { int n1 = strlen(s1); int n2 = strlen(s2); char* s = mlr_malloc_or_die(n1+n2+1); strcpy(s, s1); strcat(s, s2); return s; } char* mlr_paste_3_strings(char* s1, char* s2, char* s3) { int n1 = strlen(s1); int n2 = strlen(s2); int n3 = strlen(s3); char* s = mlr_malloc_or_die(n1+n2+n3+1); strcpy(s, s1); strcat(s, s2); strcat(s, s3); return s; } char* mlr_paste_4_strings(char* s1, char* s2, char* s3, char* s4) { int n1 = strlen(s1); int n2 = strlen(s2); int n3 = strlen(s3); int n4 = strlen(s4); char* s = mlr_malloc_or_die(n1+n2+n3+n4+1); strcpy(s, s1); strcat(s, s2); strcat(s, s3); strcat(s, s4); return s; } char* mlr_paste_5_strings(char* s1, char* s2, char* s3, char* s4, char* s5) { int n1 = strlen(s1); int n2 = strlen(s2); int n3 = strlen(s3); int n4 = strlen(s4); int n5 = strlen(s5); char* s = mlr_malloc_or_die(n1+n2+n3+n4+n5+1); strcpy(s, s1); strcat(s, s2); strcat(s, s3); strcat(s, s4); strcat(s, s5); return s; } // ---------------------------------------------------------------- // This is djb2. int mlr_string_hash_func(char *str) { unsigned long hash = 5381; int c; while ((c = *str++) != 0) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ return (int)hash; } int mlr_string_pair_hash_func(char* str1, char* str2) { unsigned long hash = 5381; int c; while ((c = *str1++) != 0) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ while ((c = *str2++) != 0) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ return (int)hash; } // ---------------------------------------------------------------- // 0x00-0x7f (MSB is 0) are ASCII and printable. // 0x80-0xbf (MSBs are 10) are continuation characters and don't add to printable length. // 0xc0-0xfe (MSBs are 11) are leading characters and do add to printable length. // (0xff, incidentally, is never a valid UTF-8 byte). int strlen_for_utf8_display(char* str) { int len = 0; for (char* p = str; *p; p++) { if ((*p & 0xc0) != 0x80) len++; } return len; } // ---------------------------------------------------------------- // These are for low-volume, call-at-startup applications. If they get used // record-by-record they should be replaced with pointer-walking logic which // avoids the unnecessary expense of calling strlen. int string_starts_with(char* string, char* prefix) { int prefixlen = strlen(prefix); return !strncmp(string, prefix, prefixlen); } int string_ends_with(char* string, char* suffix, int* pstringlen) { int stringlen = strlen(string); int suffixlen = strlen(suffix); if (pstringlen != NULL) *pstringlen = stringlen; if (stringlen < suffixlen) return FALSE; return !strcmp(&string[stringlen-suffixlen], suffix); } // ---------------------------------------------------------------- int mlr_imax2(int a, int b) { if (a >= b) return a; else return b; } // ---------------------------------------------------------------- int mlr_imax3(int a, int b, int c) { return mlr_imax2(a, mlr_imax2(b, c)); } // ---------------------------------------------------------------- int power_of_two_above(int n) { n |= (n >> 1); n |= (n >> 2); n |= (n >> 4); n |= (n >> 8); n |= (n >> 16); return(n+1); } // ---------------------------------------------------------------- static int is_backslash_octal(char* input, int* pcode) { if (strlen(input) < 4) return FALSE; if (input[0] != '\\') return FALSE; if (input[1] < '0' || input[1] > '7') return FALSE; if (input[2] < '0' || input[2] > '7') return FALSE; if (input[3] < '0' || input[3] > '7') return FALSE; *pcode = (input[1] - '0') * 64 + (input[2] - '0') * 8 + (input[3] - '0'); return TRUE; } static int is_backslash_hex(char* input, int* pcode) { if (strlen(input) < 4) return FALSE; if (input[0] != '\\') return FALSE; if (input[1] != 'x') return FALSE; if (!isxdigit(input[2])) return FALSE; if (!isxdigit(input[3])) return FALSE; char buf[3]; buf[0] = input[2]; buf[1] = input[3]; buf[2] = 0; if (sscanf(buf, "%x", pcode) != 1) { fprintf(stderr, "Miller: internal coding error detected in file %s at line %d.\n", __FILE__, __LINE__); exit(1); } return TRUE; } char* mlr_alloc_unbackslash(char* input) { // Do the strdup even if there's nothing to expand, so the caller can unconditionally // free what we return. char* output = mlr_strdup_or_die(input); char* pi = input; char* po = output; int code = 0; while (*pi) { // https://en.wikipedia.org/wiki/Escape_sequences_in_C if (streqn(pi, "\\a", 2)) { pi += 2; *(po++) = '\a'; } else if (streqn(pi, "\\b", 2)) { pi += 2; *(po++) = '\b'; } else if (streqn(pi, "\\f", 2)) { pi += 2; *(po++) = '\f'; } else if (streqn(pi, "\\n", 2)) { pi += 2; *(po++) = '\n'; } else if (streqn(pi, "\\r", 2)) { pi += 2; *(po++) = '\r'; } else if (streqn(pi, "\\t", 2)) { pi += 2; *(po++) = '\t'; } else if (streqn(pi, "\\v", 2)) { pi += 2; *(po++) = '\v'; } else if (streqn(pi, "\\\\", 2)) { pi += 2; *(po++) = '\\'; } else if (streqn(pi, "\\'", 2)) { pi += 2; *(po++) = '\''; } else if (streqn(pi, "\\\"", 2)) { pi += 2; *(po++) = '"'; } else if (streqn(pi, "\\?", 2)) { pi += 2; *(po++) = '?'; } else if (is_backslash_octal(pi, &code)) { pi += 4; *(po++) = code; } else if (is_backslash_hex(pi, &code)) { pi += 4; *(po++) = code; } else { *po = *pi; pi++; po++; } } *po = 0; return output; } // Does a strdup even if there's nothing to expand, so the caller can unconditionally // free what we return. char* mlr_alloc_double_backslash(char* input) { char *p, *q; int input_length = 0; int num_backslashes = 0; for (p = input; *p; p++) { input_length++; if (*p == '\\') { if (p[1] != '.') { num_backslashes++; } } } char* output = mlr_malloc_or_die(input_length + num_backslashes + 1); for (p = input, q = output; *p; p++) { if (*p == '\\') { if (p[1] != '.') { *(q++) = *p; } *(q++) = *p; } else { *(q++) = *p; } } *q = 0; return output; } // ---------------------------------------------------------------- // Returns -1 on error ssize_t get_file_size(char* filename) { struct stat statbuf; if (stat(filename, &statbuf) < 0) { return (ssize_t)(-1); } else { return statbuf.st_size; } } // ---------------------------------------------------------------- char* read_file_into_memory(char* filename, size_t* psize) { struct stat statbuf; if (stat(filename, &statbuf) < 0) { perror("stat"); fprintf(stderr, "%s: could not stat \"%s\"\n", MLR_GLOBALS.bargv0, filename); exit(1); } char* buffer = mlr_malloc_or_die(statbuf.st_size + 1); FILE* fp = fopen(filename, "r"); if (fp == NULL) { perror("fopen"); fprintf(stderr, "%s: could not fopen \"%s\"\n", MLR_GLOBALS.bargv0, filename); free(buffer); return NULL; } size_t rc = fread(buffer, 1, statbuf.st_size, fp); if (rc != statbuf.st_size) { fprintf(stderr, "Unable to read content of %s\n", filename); perror("fread"); fprintf(stderr, "%s: could not fread \"%s\"\n", MLR_GLOBALS.bargv0, filename); fclose(fp); free(buffer); return NULL; } fclose(fp); buffer[statbuf.st_size] = 0; if (psize) *psize = statbuf.st_size; return buffer; } // ---------------------------------------------------------------- #define INITIAL_ALLOC_SIZE 16384 #define BLOCK_SIZE 16384 char* read_fp_into_memory(FILE* fp, size_t* psize) { size_t file_size = 0; size_t alloc_size = INITIAL_ALLOC_SIZE; char* buffer = mlr_malloc_or_die(alloc_size); while (TRUE) { if (file_size + BLOCK_SIZE > alloc_size) { alloc_size *= 2; buffer = mlr_realloc_or_die(buffer, alloc_size); } size_t block_num_bytes_read = fread(&buffer[file_size], 1, BLOCK_SIZE, fp); if (block_num_bytes_read == 0) { if (feof(fp)) break; perror("fread"); fprintf(stderr, "%s: stdio/popen fread failed\n", MLR_GLOBALS.bargv0); free(buffer); *psize = 0; return NULL; } file_size += block_num_bytes_read; } *psize = file_size; return buffer; } // ---------------------------------------------------------------- char* alloc_suffixed_temp_file_name(char* filename) { const int suffix_length = 6; static char bag[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; const static int bag_length = sizeof(bag) - 1; char* output = mlr_malloc_or_die(strlen(filename) + 2 + suffix_length); int rand_start_index = sprintf(output, "%s.", filename); char* rand_start_ptr = &output[rand_start_index]; int i = 0; for ( ; i < suffix_length; i++) { rand_start_ptr[i] = bag[get_mtrand_int32() % bag_length]; } rand_start_ptr[i] = 0; return output; } // ---------------------------------------------------------------- // The convention for argv-style arrays is that they're null-terminated. // So we loop through once to find the length. char** copy_argv(char** argv) { int length = 0; int argi; for (argi = 0; argv[argi]; argi++) { length++; } char** copy = mlr_malloc_or_die((length + 1) * sizeof(char*)); for (argi = 0; argv[argi]; argi++) { copy[argi] = mlr_strdup_or_die(argv[argi]); } copy[length] = 0; return copy; } void free_argv_copy(char** copy) { for (int argi = 0; copy[argi]; argi++) { free(copy[argi]); } free(copy); } miller-5.6.2/c/lib/mlrutil.h000066400000000000000000000133721354153536500156610ustar00rootroot00000000000000#ifndef MLRUTIL_H #define MLRUTIL_H #include #include #include #include #include "mtrand.h" #define TRUE 1 #define FALSE 0 #define NEITHER_TRUE_NOR_FALSE -1 //#define MLR_MALLOC_TRACE // ---------------------------------------------------------------- #define MLR_INTERNAL_CODING_ERROR() mlr_internal_coding_error(__FILE__, __LINE__) #define MLR_INTERNAL_CODING_ERROR_IF(v) mlr_internal_coding_error_if(v, __FILE__, __LINE__) #define MLR_INTERNAL_CODING_ERROR_UNLESS(v) mlr_internal_coding_error_unless(v, __FILE__, __LINE__) void mlr_internal_coding_error(char* file, int line); void mlr_internal_coding_error_if(int v, char* file, int line); void mlr_internal_coding_error_unless(int v, char* file, int line); // ---------------------------------------------------------------- //int mlr_canonical_mod(int a, int n); static inline int mlr_canonical_mod(int a, int n) { int r = a % n; if (r >= 0) return r; else return r+n; } // ---------------------------------------------------------------- // strcmp computes signs; we don't need that -- only equality or inequality. static inline int streq(char* a, char* b) { #if 0 // performance comparison return !strcmp(a, b); #else while (*a && *b) { if (*a != *b) return FALSE; a++; b++; } if (*a || *b) return FALSE; return TRUE; #endif } // strncmp computes signs; we don't need that -- only equality or inequality. static inline int streqn(char* a, char* b, int n) { #if 0 // performance comparison return !strncmp(a, b, n); #else while (n > 0 && *a && *b) { if (n-- <= 0) { return TRUE; } if (*a != *b) { return FALSE; } a++; b++; } if (n == 0) return TRUE; if (*a || *b) { return FALSE; } return TRUE; #endif } // ---------------------------------------------------------------- // Like strsep but the sep argument is a multi-character delimiter, // not a set of single-character delimiters. char* mlr_strmsep(char **pstring, const char *sep, int seplen); // ---------------------------------------------------------------- int mlr_bsearch_double_for_insert(double* array, int size, double value); void* mlr_malloc_or_die(size_t size); void* mlr_realloc_or_die(void *ptr, size_t size); static inline char * mlr_strdup_or_die(const char *s1) { char* s2 = strdup(s1); if (s2 == NULL) { fprintf(stderr, "malloc/strdup failed\n"); exit(1); } #ifdef MLR_MALLOC_TRACE fprintf(stderr, "STRDUP size=%d,p=%p\n", (int)strlen(s2), s2); #endif return s2; } char * mlr_strdup_quoted_or_die(const char *s1); // The caller should free the return values from each of these. char* mlr_alloc_string_from_double(double value, char* fmt); char* mlr_alloc_string_from_ull(unsigned long long value); char* mlr_alloc_string_from_ll(long long value); char* mlr_alloc_string_from_ll_and_format(long long value, char* fmt); char* mlr_alloc_string_from_int(int value); char* mlr_alloc_string_from_string_and_format(char* value, char* fmt); // The input doesn't include the null-terminator; the output does. char* mlr_alloc_string_from_char_range(char* start, int num_bytes); char* mlr_alloc_hexfmt_from_ll(long long value); double mlr_double_from_string_or_die(char* string); long long mlr_int_from_string_or_die(char* string); int mlr_try_float_from_string(char* string, double* pval); int mlr_try_int_from_string(char* string, long long* pval); // For small integers (as of this writing, 0 .. 100) returns a static string representation. // For other values, returns a dynamically allocated string representation. char* low_int_to_string(int idx, char* pfree_flags); // Inefficient and intended for call-rarely use. The caller should free the return values. char* mlr_paste_2_strings(char* s1, char* s2); char* mlr_paste_3_strings(char* s1, char* s2, char* s3); char* mlr_paste_4_strings(char* s1, char* s2, char* s3, char* s4); char* mlr_paste_5_strings(char* s1, char* s2, char* s3, char* s4, char* s5); int mlr_string_hash_func(char *str); int mlr_string_pair_hash_func(char* str1, char* str2); int strlen_for_utf8_display(char* str); int string_starts_with(char* string, char* prefix); // If pstrlen is non-null, after return it will contain strlen(string) for // convenience of the caller. int string_ends_with(char* string, char* suffix, int* pstringlen); int mlr_imax2(int a, int b); int mlr_imax3(int a, int b, int c); int power_of_two_above(int n); // The caller should free the return value. Maps two-character sequences such as // "\t", "\n", "\\" to single characters such as tab, newline, backslash, etc. char* mlr_alloc_unbackslash(char* input); // Miller DSL literals are unbackslashed: e.g. the two-character sequence "\t" is converted to a tab character, and // users need to type "\\t" to get a backslash followed by a t. Well and good, but the system regex library handles // backslashes not quite as I want. Namely, without this function, // // echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' // // (note: not echo -e, but just plain echo) outputs // // a\TABb // // while // // echo 'x=a\tb' | mlr put '$x=sub($x,"\\\\t","TAB")' // // outputs // // aTABb // // Using this function, backslashes can be escaped as the regex library requires, before I call regcomp: // // echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' // // outputs // // aTABb // // as desired. char* mlr_alloc_double_backslash(char* input); // Returns -1 on error ssize_t get_file_size(char* filename); // The caller should free the return value. char* read_file_into_memory(char* filename, size_t* psize); // The caller should free the return value. char* read_fp_into_memory(FILE* fp, size_t* psize); // Returns a copy of the filename with random characters attached to the end. char* alloc_suffixed_temp_file_name(char* filename); char** copy_argv(char** argv); void free_argv_copy(char** argv); #endif // MLRUTIL_H miller-5.6.2/c/lib/mlrval.c000066400000000000000000000227221354153536500154600ustar00rootroot00000000000000#include #include #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mlrval.h" // ================================================================ // See important notes at the top of mlrval.h. // ================================================================ // ---------------------------------------------------------------- char* mt_describe_type(int type) { switch (type) { case MT_ERROR: return "MT_ERROR"; break; case MT_ABSENT: return "MT_ABSENT"; break; case MT_EMPTY: return "MT_EMPTY"; break; case MT_STRING: return "MT_STRING"; break; case MT_INT: return "MT_INT"; break; case MT_FLOAT: return "MT_FLOAT"; break; case MT_BOOLEAN: return "MT_BOOLEAN"; break; default: return "???"; break; } } char* mt_describe_type_simple(int type) { switch (type) { case MT_ERROR: return "error"; break; case MT_ABSENT: return "absent"; break; case MT_EMPTY: return "empty"; break; case MT_STRING: return "string"; break; case MT_INT: return "int"; break; case MT_FLOAT: return "float"; break; case MT_BOOLEAN: return "bool"; break; default: return "???"; break; } } // ---------------------------------------------------------------- // See comments in header file char* mv_alloc_format_val(mv_t* pval) { switch(pval->type) { case MT_ABSENT: case MT_EMPTY: return mlr_strdup_or_die(""); break; case MT_ERROR: return mlr_strdup_or_die("(error)"); break; case MT_STRING: return mlr_strdup_or_die(pval->u.strv); break; case MT_BOOLEAN: return mlr_strdup_or_die(pval->u.boolv ? "true" : "false"); break; case MT_FLOAT: return mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); break; case MT_INT: return mlr_alloc_string_from_ll(pval->u.intv); break; default: return mlr_strdup_or_die("???"); break; } } char* mv_alloc_format_val_quoting_strings(mv_t* pval) { switch(pval->type) { case MT_ABSENT: case MT_EMPTY: return mlr_strdup_quoted_or_die(""); break; case MT_ERROR: return mlr_strdup_or_die("(error)"); break; case MT_STRING: return mlr_strdup_quoted_or_die(pval->u.strv); break; case MT_BOOLEAN: return mlr_strdup_or_die(pval->u.boolv ? "true" : "false"); break; case MT_FLOAT: return mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); break; case MT_INT: return mlr_alloc_string_from_ll(pval->u.intv); break; default: return mlr_strdup_or_die("???"); break; } } // ---------------------------------------------------------------- // See comments in header file char* mv_maybe_alloc_format_val(mv_t* pval, char* pfree_flags) { switch(pval->type) { case MT_ABSENT: case MT_EMPTY: *pfree_flags = NO_FREE; return ""; break; case MT_ERROR: *pfree_flags = NO_FREE; return "(error)"; break; case MT_STRING: *pfree_flags = NO_FREE; return pval->u.strv; break; case MT_BOOLEAN: *pfree_flags = NO_FREE; return pval->u.boolv ? "true" : "false"; break; case MT_FLOAT: *pfree_flags = FREE_ENTRY_VALUE; return mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); break; case MT_INT: *pfree_flags = FREE_ENTRY_VALUE; return mlr_alloc_string_from_ll(pval->u.intv); break; default: *pfree_flags = NO_FREE; return "???"; break; } } // ---------------------------------------------------------------- // See comments in header file char* mv_format_val(mv_t* pval, char* pfree_flags) { char* rv = NULL; switch(pval->type) { case MT_ABSENT: case MT_EMPTY: *pfree_flags = NO_FREE; rv = ""; break; case MT_ERROR: *pfree_flags = NO_FREE; rv = "(error)"; break; case MT_STRING: // Ownership transfer to the caller *pfree_flags = pval->free_flags; rv = pval->u.strv; *pval = mv_empty(); break; case MT_BOOLEAN: *pfree_flags = NO_FREE; rv = pval->u.boolv ? "true" : "false"; break; case MT_FLOAT: *pfree_flags = FREE_ENTRY_VALUE; rv = mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); break; case MT_INT: *pfree_flags = FREE_ENTRY_VALUE; rv = mlr_alloc_string_from_ll(pval->u.intv); break; default: *pfree_flags = NO_FREE; rv = "???"; break; } return rv; } // ---------------------------------------------------------------- // See comments in header file char* mv_describe_val(mv_t val) { char* stype = mt_describe_type(val.type); char* strv = mv_alloc_format_val(&val); char* desc = mlr_malloc_or_die(strlen(stype) + strlen(strv) + 4); sprintf(desc, "[%s] %s", stype, strv); free(strv); return desc; } // ---------------------------------------------------------------- void mv_set_boolean_strict(mv_t* pval) { if (pval->type != MT_BOOLEAN) { char* desc = mt_describe_type(pval->type); fprintf(stderr, "Expression does not evaluate to boolean: got %s.\n", desc); exit(1); } } // ---------------------------------------------------------------- void mv_set_float_strict(mv_t* pval) { double fltv = 0.0; mv_t nval = mv_error(); switch (pval->type) { case MT_ABSENT: case MT_EMPTY: break; case MT_ERROR: break; case MT_FLOAT: break; case MT_STRING: if (!mlr_try_float_from_string(pval->u.strv, &fltv)) { // keep nval = mv_error() } else { nval = mv_from_float(fltv); } mv_free(pval); *pval = nval; break; case MT_INT: pval ->type = MT_FLOAT; pval->u.fltv = (double)pval->u.intv; break; case MT_BOOLEAN: pval->type = MT_ERROR; pval->u.intv = 0LL; break; default: MLR_INTERNAL_CODING_ERROR(); break; } } // ---------------------------------------------------------------- void mv_set_float_nullable(mv_t* pval) { double fltv = 0.0; mv_t nval = mv_error(); switch (pval->type) { case MT_ABSENT: case MT_EMPTY: break; case MT_ERROR: break; case MT_FLOAT: break; case MT_INT: pval ->type = MT_FLOAT; pval->u.fltv = (double)pval->u.intv; break; case MT_BOOLEAN: pval->type = MT_ERROR; pval->u.intv = 0; break; case MT_STRING: if (*pval->u.strv == '\0') { nval = mv_empty(); } else if (!mlr_try_float_from_string(pval->u.strv, &fltv)) { // keep nval = mv_error() } else { nval = mv_from_float(fltv); } mv_free(pval); *pval = nval; break; default: MLR_INTERNAL_CODING_ERROR(); break; } } // ---------------------------------------------------------------- void mv_set_int_nullable(mv_t* pval) { long long intv = 0LL; mv_t nval = mv_error(); switch (pval->type) { case MT_ABSENT: case MT_EMPTY: break; case MT_ERROR: break; case MT_INT: break; case MT_FLOAT: pval ->type = MT_INT; pval->u.intv = (long long)pval->u.fltv; break; case MT_BOOLEAN: pval->type = MT_ERROR; pval->u.intv = 0; break; case MT_STRING: if (*pval->u.strv == '\0') { nval = mv_empty(); } else if (!mlr_try_int_from_string(pval->u.strv, &intv)) { // keep nval = mv_error() } else { nval = mv_from_int(intv); } mv_free(pval); *pval = nval; break; default: MLR_INTERNAL_CODING_ERROR(); break; } } // ---------------------------------------------------------------- void mv_set_number_nullable(mv_t* pval) { mv_t nval = mv_empty(); switch (pval->type) { case MT_ABSENT: case MT_EMPTY: break; case MT_ERROR: break; case MT_INT: break; case MT_FLOAT: break; case MT_BOOLEAN: pval->type = MT_ERROR; pval->u.intv = 0; break; case MT_STRING: nval = mv_scan_number_nullable(pval->u.strv); mv_free(pval); *pval = nval; break; default: MLR_INTERNAL_CODING_ERROR(); break; } } mv_t mv_scan_number_nullable(char* string) { double fltv = 0.0; long long intv = 0LL; mv_t rv = mv_empty(); if (*string == '\0') { // keep rv = mv_empty(); } else if (mlr_try_int_from_string(string, &intv)) { rv = mv_from_int(intv); } else if (mlr_try_float_from_string(string, &fltv)) { rv = mv_from_float(fltv); } else { rv = mv_error(); } return rv; } mv_t mv_scan_number_or_die(char* string) { mv_t rv = mv_scan_number_nullable(string); if (!mv_is_numeric(&rv)) { fprintf(stderr, "%s: couldn't parse \"%s\" as number.\n", MLR_GLOBALS.bargv0, string); exit(1); } return rv; } // ---------------------------------------------------------------- mv_t mv_ref_type_infer_string(char* string) { if (string == NULL) { return mv_absent(); } else if (*string == 0) { return mv_empty(); } else { return mv_from_string(string, NO_FREE); } } mv_t mv_ref_type_infer_string_or_float(char* string) { if (string == NULL) { return mv_absent(); } else if (*string == 0) { return mv_empty(); } else { double fltv; if (mlr_try_float_from_string(string, &fltv)) { return mv_from_float(fltv); } else { return mv_from_string(string, NO_FREE); } } } mv_t mv_ref_type_infer_string_or_float_or_int(char* string) { if (string == NULL) { return mv_absent(); } else if (*string == 0) { return mv_empty(); } else { long long intv; double fltv; if (mlr_try_int_from_string(string, &intv)) { return mv_from_int(intv); } else if (mlr_try_float_from_string(string, &fltv)) { return mv_from_float(fltv); } else { return mv_from_string(string, NO_FREE); } } } mv_t mv_copy_type_infer_string_or_float_or_int(char* string) { if (string == NULL) { return mv_absent(); } else if (*string == 0) { return mv_empty(); } else { long long intv; double fltv; if (mlr_try_int_from_string(string, &intv)) { return mv_from_int(intv); } else if (mlr_try_float_from_string(string, &fltv)) { return mv_from_float(fltv); } else { return mv_from_string(mlr_strdup_or_die(string), FREE_ENTRY_VALUE); } } } miller-5.6.2/c/lib/mlrval.h000066400000000000000000000246721354153536500154730ustar00rootroot00000000000000#ifndef MLRVAL_H #define MLRVAL_H #include #include #include #include "../lib/mlrutil.h" #include "../lib/mlrregex.h" #include "../lib/free_flags.h" // ================================================================ // MT for Miller type -- highly abbreviated here since these are // spelled out a lot in rval_evaluators.c. // // ================================================================ // NOTE: mlrval functions invalidate their arguments. In particular, dynamically // allocated strings input to these functions will either be freed, or will // have their ownership transferred to the output mlrval. // // This is because the primary purpose of mlrvals is for evaluation of abstract // syntax trees defined by the DSL for put and filter. Example AST: // // $ mlr put -v '$z = $x . $y . "sum"' /dev/null // = (operator): // z (field_name). // . (operator): // . (operator): // x (field_name). // y (field_name). // sum (literal). // // * Given an lrec with fields named "x" and "y", there will be pointers to x // and y's field values from the input-data stream -- either to mmapped data // from a file, or pointers into dynamically allocated lines from stdio. // // * The from-field-name mlrvals for x and y values will point into lrec memory // but will have their own free-flags unset (since freeing of lrec memory is // the job of the lrec instance). // // * The dot operator will do any necessary freeing of the x and y mlrval // strings -- none in this case since they are direct references to field // values. The output of $x . $y, by contrast, will be dynamically // allocated. // // * The "sum" literal string is a pointer ultimately into argv[]. // The from-literal mlrval will not have its free-flag set. // // * The concatenation of $x . $y and "sum" will dynamically allocated. // The $x . $y input string will be freed; the "sum" string won't be // since it wasn't owned by the from-literal mlrval. // // * The result of this outer concatenation will be stored in the $z field of // the current record, with ownership for the dynamically allocated string // transferred to the lrec instance. // // There is also some use of mlrvals in mixed float/int handling inside various // mappers (e.g. stats1). There the use is much simpler: accumulation of // numeric quantities, ultimately formatted as a string for output. // // ================================================================ // // Many functions here use the naming convention x_yz_name or x_: // // * The first letter indicates return type. // // * The letters between the underscores indicate argument types, and their count indicates arity. // // * The following abbreviations apply: // o a: MT_ABSENT // o v: MT_EMPTY (v for void; e is for error) // o e: MT_ERROR // o b: MT_BOOLEAN // o f: MT_FLOAT // o i: MT_INT // o s: MT_STRING // o r: regular expression // o n: Numeric, i.e. MT_INT or MT_FLOAT // o x: any of the above. // o z: used for zero-argument functions, e.g. f_z_urand takes no arguments and returns MT_FLOAT. // // * If a function takes arguments of type x then that indicates it has a disposition vector/matrix // (or switch statements, or if-else statements) allowing it to handle various types. // // * If it takes arguments of type n then that indicates it is up to the caller to pass only numeric types. // // * If it takes arguments of type s then that indicates it is up to the caller to pass only strings. // // ================================================================ // Among other things, these defines are used in mlrval.c to index disposition matrices. // So, if the numeric values are changed, all the matrices must be as well. // Two kinds of null: absent (key not present in a record) and void (key present with empty value). // Note void is an acceptable string (empty string) but not an acceptable number. // Void-valued mlrvals have u.strv = "". #define MT_ERROR 0 // E.g. error encountered in one eval & it propagates up the AST. #define MT_ABSENT 1 // No such key, e.g. $z in 'x=,y=2' #define MT_EMPTY 2 // Empty value, e.g. $x in 'x=,y=2' #define MT_STRING 3 #define MT_INT 4 #define MT_FLOAT 5 #define MT_BOOLEAN 6 #define MT_DIM 7 typedef struct _mv_t { union { char* strv; // MT_STRING and MT_EMPTY long long intv; // MT_INT, and == 0 for MT_ABSENT and MT_ERROR double fltv; // MT_FLOAT int boolv; // MT_BOOLEAN } u; unsigned char type; char free_flags; } mv_t; // ---------------------------------------------------------------- #define NULL_OR_ERROR_OUT_FOR_STRINGS(val) { \ if ((val).type < MT_EMPTY) \ return val; \ } #define NULL_OR_ERROR_OUT_FOR_NUMBERS(val) { \ if ((val).type <= MT_EMPTY) \ return val; \ } #define EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val) { \ if ((val).type == MT_ERROR || (val).type == MT_EMPTY) \ return val; \ } // ---------------------------------------------------------------- // CONSTRUCTORS static inline mv_t mv_from_float(double d) { return (mv_t) {.type = MT_FLOAT, .free_flags = NO_FREE, .u.fltv = d}; } static inline mv_t mv_from_int(long long i) { return (mv_t) {.type = MT_INT, .free_flags = NO_FREE, .u.intv = i}; } static inline mv_t mv_from_bool(int b) { return (mv_t) {.type = MT_BOOLEAN, .free_flags = NO_FREE, .u.boolv = b}; } static inline mv_t mv_from_true() { return (mv_t) {.type = MT_BOOLEAN, .free_flags = NO_FREE, .u.boolv = TRUE}; } static inline mv_t mv_from_false() { return (mv_t) {.type = MT_BOOLEAN, .free_flags = NO_FREE, .u.boolv = FALSE}; } static inline mv_t mv_from_string_with_free(char* s) { return (mv_t) {.type = MT_STRING, .free_flags = FREE_ENTRY_VALUE, .u.strv = s}; } static inline mv_t mv_from_string_no_free(char* s) { return (mv_t) {.type = MT_STRING, .free_flags = NO_FREE, .u.strv = s}; } static inline mv_t mv_from_string(char* s, char free_flags) { return (mv_t) {.type = MT_STRING, .free_flags = free_flags, .u.strv = s}; } static inline mv_t mv_absent() { return (mv_t) {.type = MT_ABSENT, .free_flags = NO_FREE, .u.intv = 0}; } static inline mv_t mv_empty() { return (mv_t) {.type = MT_EMPTY, .free_flags = NO_FREE, .u.strv = ""}; } static inline mv_t mv_error() { return (mv_t) {.type = MT_ERROR, .free_flags = NO_FREE, .u.intv = 0}; } static inline mv_t mv_copy(mv_t* pval) { if (pval->type == MT_STRING) { return mv_from_string_with_free(mlr_strdup_or_die(pval->u.strv)); } else { return *pval; } } static inline mv_t* mv_alloc_copy(mv_t* pold) { mv_t* pnew = mlr_malloc_or_die(sizeof(mv_t)); *pnew = mv_copy(pold); return pnew; } // ---------------------------------------------------------------- // DESTRUCTOR static inline void mv_free(mv_t* pval) { if ((pval->type) == MT_STRING && (pval->free_flags & FREE_ENTRY_VALUE)) { free(pval->u.strv); pval->u.strv = NULL; } pval->type = MT_ABSENT; } // ---------------------------------------------------------------- // For stack-clear: set to ABSENT, freeing previous value if necessary static inline void mv_reset(mv_t* pval) { if ((pval->type) == MT_STRING && (pval->free_flags & FREE_ENTRY_VALUE)) { free(pval->u.strv); } *pval = mv_absent(); } // ---------------------------------------------------------------- // TYPE-TESTERS static inline int mv_is_string_or_empty(mv_t* pval) { return pval->type == MT_STRING || pval->type == MT_EMPTY; } static inline int mv_is_numeric(mv_t* pval) { return pval->type == MT_INT || pval->type == MT_FLOAT; } static inline int mv_is_int(mv_t* pval) { return pval->type == MT_INT; } static inline int mv_is_float(mv_t* pval) { return pval->type == MT_FLOAT; } static inline int mv_is_boolean(mv_t* pval) { return pval->type == MT_BOOLEAN; } static inline int mv_is_string(mv_t* pval) { return pval->type == MT_STRING || pval->type == MT_EMPTY; } static inline int mv_is_error(mv_t* pval) { return pval->type == MT_ERROR; } static inline int mv_is_absent(mv_t* pval) { return pval->type == MT_ABSENT; } static inline int mv_is_present(mv_t* pval) { return pval->type != MT_ABSENT; } static inline int mv_is_empty(mv_t* pval) { return pval->type == MT_EMPTY || (pval->type == MT_STRING && *pval->u.strv == 0); } static inline int mv_is_not_empty(mv_t* pval) { return pval->type != MT_EMPTY; } static inline int mv_is_null(mv_t* pval) { return mv_is_absent(pval) || mv_is_empty(pval); } static inline int mv_is_null_or_error(mv_t* pval) { return mv_is_null(pval) || pval->type == MT_EMPTY; } static inline int mv_is_non_null(mv_t* pval) { return !mv_is_null(pval); } // ---------------------------------------------------------------- // AUXILIARY METHODS char* mt_describe_type(int type); char* mt_describe_type_simple(int type); // Allocates memory which the caller must free; does not modify the mlrval. // Returns no reference to the mlrval's data. Suitable for getting data out of // a mlrval which might be about to be freed. char* mv_alloc_format_val(mv_t* pval); char* mv_alloc_format_val_quoting_strings(mv_t* pval); // Returns a reference to the mlrval's data if the mlrval is MT_STRING. // Does not modify the mlrval. Suitable only for read-only string-formatting // of the mlrval while it still exists and hasn't been freed yet. char* mv_maybe_alloc_format_val(mv_t* pval, char* pfree_flags); // If the mlrval is MT_STRING, returns that and invalidates the argument. // This is suitable for baton-pass-out (end of evaluation chain). char* mv_format_val(mv_t* pval, char* pfree_flags); // Output string includes type and value information (e.g. for debug). // The caller must free the return value. char* mv_describe_val(mv_t val); void mv_set_boolean_strict(mv_t* pval); void mv_set_float_strict(mv_t* pval); void mv_set_float_nullable(mv_t* pval); void mv_set_int_nullable(mv_t* pval); // int or float: void mv_set_number_nullable(mv_t* pval); mv_t mv_scan_number_nullable(char* string); mv_t mv_scan_number_or_die(char* string); // Each of the following three // Type-inferencing for the following three functions, respectively: // "x" => "x", "3" => "3" // "x" => "x", "3" => 3.0 // "x" => "x", "3" => 3 // In common to all three: // * Null string -> mv_absent // * Empty string -> mv_empty // * Non-numeric -> string-valued mlrval with storage pointing // to the char* (no copy is done). mv_t mv_ref_type_infer_string(char* string); mv_t mv_ref_type_infer_string_or_float(char* string); mv_t mv_ref_type_infer_string_or_float_or_int(char* string); mv_t mv_copy_type_infer_string_or_float_or_int(char* string); // strdups if retval is MT_STRING #endif // MLRVAL_H miller-5.6.2/c/lib/mtrand.c000066400000000000000000000132531354153536500154470ustar00rootroot00000000000000// A C-program for MT19937, with initialization improved 2002/1/26. // Coded by Takuji Nishimura and Makoto Matsumoto. // // Before using, initialize the state by using mtrand_init(seed) // or mtrand_init_from_array(init_key, key_length). // // Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // 3. The names of its contributors may not be used to endorse or promote // products derived from this software without specific prior written // permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // // Any feedback is very welcome. // http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html // email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) // Real versions are due to Isaku Wada, added 2002-01-09. #include #include #include #include "lib/mtrand.h" // ---------------------------------------------------------------- // Period parameters #define N 624 #define M 397 #define MATRIX_A 0x9908b0df // constant vector a #define UPPER_MASK 0x80000000 // most significant w-r bits #define LOWER_MASK 0x7fffffff // least significant r bits static unsigned mt[N]; // the array for the state vector static int mti=N+1; // mti==N+1 means mt[N] is not initialized // ---------------------------------------------------------------- void mtrand_init_default() { struct timeval tv; (void)gettimeofday(&tv, NULL); mtrand_init((unsigned)tv.tv_sec ^ (unsigned)tv.tv_usec ^ (unsigned)getpid()); } // ---------------------------------------------------------------- // Initializes mt[N] with a seed. void mtrand_init(unsigned s) { mt[0]= s & 0xffffffff; for (mti=1; mti> 30)) + mti); // See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. In the previous // versions, MSBs of the seed affect only MSBs of the array mt[]. // 2002/01/09 modified by Makoto Matsumoto mt[mti] &= 0xffffffff; // for >32 bit machines } } // ---------------------------------------------------------------- // Initialize by an array with array-length: // init_key is the array for initializing keys; // key_length is its length. void mtrand_init_from_array(unsigned init_key[], int key_length) { int i, j, k; mtrand_init(19650218); i=1; j=0; k = (N>key_length ? N : key_length); for (; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525)) + init_key[j] + j; // non linear mt[i] &= 0xffffffff; // for WORDSIZE > 32 machines i++; j++; if (i>=N) { mt[0] = mt[N-1]; i=1; } if (j>=key_length) j=0; } for (k=N-1; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941)) - i; // non linear mt[i] &= 0xffffffff; // for WORDSIZE > 32 machines i++; if (i>=N) { mt[0] = mt[N-1]; i=1; } } mt[0] = 0x80000000; // MSB is 1, ensuring non-zero initial array } // ---------------------------------------------------------------- // Generates a uniformly distributed 32-bit integer. unsigned get_mtrand_int32(void) { unsigned y; static unsigned mag01[2]={0x0, MATRIX_A}; // mag01[x] = x * MATRIX_A for x=0,1 if (mti >= N) { // Generate N words at one time int kk; if (mti == N+1) // If mtrand_init() has not been called, mtrand_init(5489); // a default initial seed is used. for (kk=0;kk> 1) ^ mag01[y & 1]; } for (;kk> 1) ^ mag01[y & 1]; } y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 1]; mti = 0; } y = mt[mti++]; // Tempering y ^= (y >> 11); y ^= (y << 7) & 0x9d2c5680; y ^= (y << 15) & 0xefc60000; y ^= (y >> 18); return y; } // ---------------------------------------------------------------- // Generates a uniformly distributed 31-bit integer. int get_mtrand_int31(void) { return (int)(get_mtrand_int32()>>1); } // ---------------------------------------------------------------- // Generates a random number on [0,1)-real-interval. double get_mtrand_float(void) { return get_mtrand_int32()*(1.0/4294967296.0); // divided by 2^32 } // ---------------------------------------------------------------- // Generates a random number on [0,1) with 53-bit resolution. double get_mtrand_double(void) { unsigned a = get_mtrand_int32() >> 5; unsigned b = get_mtrand_int32() >> 6; return (a*67108864.0+b) * (1.0/9007199254740992.0); } miller-5.6.2/c/lib/mtrand.h000066400000000000000000000005041354153536500154470ustar00rootroot00000000000000#ifndef MTRAND_H #define MTRAND_H void mtrand_init_default(); void mtrand_init(unsigned s); void mtrand_init_from_array(unsigned init_key[], int key_length); unsigned get_mtrand_int32(void); int get_mtrand_int31(void); double get_mtrand_float(void); double get_mtrand_double(void); #endif // MTRAND_H miller-5.6.2/c/lib/mvfuncs.c000066400000000000000000002540001354153536500156400ustar00rootroot00000000000000#include #include #include #include #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrdatetime.h" #include "lib/mlrregex.h" #include "lib/mvfuncs.h" #include "lib/utf8.h" #include "lib/string_builder.h" // ================================================================ // See important notes at the top of mlrval.h. // ================================================================ typedef int mv_i_nn_comparator_func_t(mv_t* pa, mv_t* pb); typedef int mv_i_xx_comparator_func_t(const mv_t* pa, const mv_t* pb); // ---------------------------------------------------------------- // Keystroke-savers for disposition matrices: static mv_t _a(mv_t* pa, mv_t* pb) { return mv_absent(); } static mv_t _emt(mv_t* pa, mv_t* pb) { return mv_empty(); } static mv_t _err(mv_t* pa, mv_t* pb) { return mv_error(); } static mv_t _0(mv_t* pa) { return *pa; } static mv_t _1(mv_t* pa, mv_t* pb) { return *pa; } static mv_t _2(mv_t* pa, mv_t* pb) { return *pb; } static mv_t _1f(mv_t* pa, mv_t* pb) { mv_free(pb); return *pa; } static mv_t _2f(mv_t* pa, mv_t* pb) { mv_free(pa); return *pb; } static mv_t _s1(mv_t* pa, mv_t* pb) { return s_x_string_func(pa); } static mv_t _s2(mv_t* pa, mv_t* pb) { return s_x_string_func(pb); } static mv_t _f0(mv_t* pa, mv_t* pb) { return mv_from_float(0.0); } static mv_t _i0(mv_t* pa, mv_t* pb) { return mv_from_int(0LL); } static mv_t _a1(mv_t* pa) { return mv_absent(); } static mv_t _emt1(mv_t* pa) { return mv_empty(); } static mv_t _err1(mv_t* pa) { return mv_error(); } // ---------------------------------------------------------------- static mv_t dot_strings(char* string1, char* string2) { int len1 = strlen(string1); int len2 = strlen(string2); int len3 = len1 + len2 + 1; // for the null-terminator byte char* string3 = mlr_malloc_or_die(len3); strcpy(&string3[0], string1); strcpy(&string3[len1], string2); return mv_from_string_with_free(string3); } mv_t dot_s_ss(mv_t* pval1, mv_t* pval2) { mv_t rv = dot_strings(pval1->u.strv, pval2->u.strv); mv_free(pval1); mv_free(pval2); return rv; } mv_t dot_s_xs(mv_t* pval1, mv_t* pval2) { mv_t sval1 = s_x_string_func(pval1); mv_free(pval1); mv_t rv = dot_strings(sval1.u.strv, pval2->u.strv); mv_free(&sval1); mv_free(pval2); return rv; } mv_t dot_s_sx(mv_t* pval1, mv_t* pval2) { mv_t sval2 = s_x_string_func(pval2); mv_free(pval2); mv_t rv = dot_strings(pval1->u.strv, sval2.u.strv); mv_free(pval1); mv_free(&sval2); return rv; } mv_t dot_s_xx(mv_t* pval1, mv_t* pval2) { mv_t sval1 = s_x_string_func(pval1); mv_t sval2 = s_x_string_func(pval2); mv_t rv = dot_strings(sval1.u.strv, sval2.u.strv); mv_free(&sval1); mv_free(&sval2); return rv; } static mv_binary_func_t* dot_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _emt, _2, _s2, _s2, _s2}, /*EMPTY*/ {_err, _emt, _emt, _2, _s2, _s2, _s2}, /*STRING*/ {_err, _1, _1, dot_s_ss, dot_s_sx, dot_s_sx, dot_s_sx}, /*INT*/ {_err, _s1, _s1, dot_s_xs, dot_s_xx, dot_s_xx, dot_s_xx}, /*FLOAT*/ {_err, _s1, _s1, dot_s_xs, dot_s_xx, dot_s_xx, dot_s_xx}, /*BOOL*/ {_err, _s1, _s1, dot_s_xs, dot_s_xx, dot_s_xx, dot_s_xx}, }; mv_t s_xx_dot_func(mv_t* pval1, mv_t* pval2) { return (dot_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- mv_t sub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { regex_t regex; string_builder_t *psb = sb_alloc(MV_SB_ALLOC_LENGTH); mv_t rv = sub_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0), psb, pval3); sb_free(psb); regfree(®ex); mv_free(pval2); return rv; } // ---------------------------------------------------------------- // Example: // * pval1->u.strv = "hello" // * regex = "l+" // * pval3->u.strv = "yyy" // // * len1 = 2 = length of "he" // * olen2 = 2 = length of "ll" // * nlen2 = 3 = length of "yyy" // * len3 = 1 = length of "o" // * len4 = 6 = 2+3+1 mv_t sub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3) { int matched = FALSE; int all_captured = FALSE; char* input = pval1->u.strv; char* output = regex_sub(input, pregex, psb, pval3->u.strv, &matched, &all_captured); mv_free(pval1); mv_free(pval3); return mv_from_string_with_free(output); } // ---------------------------------------------------------------- // Example: // * pval1->u.strv = "hello" // * regex = "l+" // * pval3->u.strv = "yyy" // // * len1 = 2 = length of "he" // * olen2 = 2 = length of "ll" // * nlen2 = 3 = length of "yyy" // * len3 = 1 = length of "o" // * len4 = 6 = 2+3+1 mv_t gsub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { regex_t regex; string_builder_t *psb = sb_alloc(MV_SB_ALLOC_LENGTH); mv_t rv = gsub_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0), psb, pval3); sb_free(psb); regfree(®ex); mv_free(pval2); return rv; } mv_t gsub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3) { int matched = FALSE; int all_captured = FALSE; char* input = pval1->u.strv; char free_flags = NO_FREE; char* output = regex_gsub(input, pregex, psb, pval3->u.strv, &matched, &all_captured, &free_flags); mv_free(pval1); mv_free(pval3); return mv_from_string(output, free_flags); } // ---------------------------------------------------------------- mv_t regextract_no_precomp_func(mv_t* pval1, mv_t* pval2) { regex_t regex; mv_t rv = regextract_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0)); regfree(®ex); mv_free(pval2); return rv; } // ---------------------------------------------------------------- mv_t regextract_precomp_func(mv_t* pval1, regex_t* pregex) { char* input = pval1->u.strv; char* output = regextract(input, pregex); mv_free(pval1); if (output == NULL) { return mv_absent(); } else { return mv_from_string_with_free(output); } } // ---------------------------------------------------------------- mv_t regextract_or_else_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { regex_t regex; mv_t rv = regextract_or_else_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0), pval3); regfree(®ex); mv_free(pval2); return rv; } // ---------------------------------------------------------------- mv_t regextract_or_else_precomp_func(mv_t* pval1, regex_t* pregex, mv_t* pval3) { char* input = pval1->u.strv; char* default_value = pval3->u.strv; char* output = regextract_or_else(input, pregex, default_value); mv_free(pval1); mv_free(pval3); return mv_from_string_with_free(output); } // ---------------------------------------------------------------- // String-substitution with no regexes or special characters. // It is assumed that all inputs have already been checked to be strings. mv_t s_sss_ssub_func(mv_t* pmvinput, mv_t* pmvold, mv_t* pmvnew) { char* pinput = pmvinput->u.strv; char* pold = pmvold->u.strv; char* pnew = pmvnew->u.strv; char* pmatch = strstr(pinput, pold); if (pmatch == NULL) { mv_free(pmvold); mv_free(pmvnew); return *pmvinput; } else { // Example: // input: aaaaOOObbbbb // old: OOO // new: NNNNN // Output length: strlen(aaaa) + strlen(NNNNN) + strlen(bbbbb) // Compute lengths int input_length = strlen(pinput); int old_length = strlen(pold); int new_length = strlen(pnew); int output_length = input_length - old_length + new_length + 1; int pre_length = pmatch - pinput; // the "aaaa" part int post_length = input_length - pre_length - old_length; // the "bbbbb" part // Allocate output char* poutput = mlr_malloc_or_die(output_length); char* p = poutput; // Populate output strncpy(p, pinput, pre_length); p += pre_length; strcpy(p, pnew); p += new_length; strcpy(p, &pinput[pre_length + old_length]); p += post_length; *p = 0; mv_free(pmvinput); mv_free(pmvold); mv_free(pmvnew); return mv_from_string(poutput, FREE_ENTRY_VALUE); } } // ---------------------------------------------------------------- // https://en.wikipedia.org/wiki/Hamming_weight static const unsigned long long _m1 = 0x5555555555555555; static const unsigned long long _m2 = 0x3333333333333333; static const unsigned long long _m4 = 0x0f0f0f0f0f0f0f0f; static const unsigned long long _m8 = 0x00ff00ff00ff00ff; static const unsigned long long _m16 = 0x0000ffff0000ffff; static const unsigned long long _m32 = 0x00000000ffffffff; mv_t i_i_bitcount_func(mv_t* pval1) { unsigned long long a = pval1->u.intv; a = (a & _m1 ) + ((a >> 1) & _m1 ); a = (a & _m2 ) + ((a >> 2) & _m2 ); a = (a & _m4 ) + ((a >> 4) & _m4 ); a = (a & _m8 ) + ((a >> 8) & _m8 ); a = (a & _m16) + ((a >> 16) & _m16); a = (a & _m32) + ((a >> 32) & _m32); return mv_from_int((long long)a); } // ---------------------------------------------------------------- mv_t i_iii_modadd_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { long long m = pval3->u.intv; if (m <= 0LL) return mv_error(); long long a = pval1->u.intv % m; if (a < 0LL) a += m; // crazy C-language mod operator long long b = pval2->u.intv % m; if (b < 0LL) b += m; long long c = (a + b) % m; return mv_from_int(c); } mv_t i_iii_modsub_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { long long m = pval3->u.intv; if (m <= 0LL) return mv_error(); long long a = pval1->u.intv % m; if (a < 0LL) a += m; // crazy C-language mod operator long long b = pval2->u.intv % m; if (b < 0LL) b += m; long long c = (a - b) % m; if (c < 0LL) c += m; return mv_from_int(c); } mv_t i_iii_modmul_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { long long m = pval3->u.intv; if (m <= 0LL) return mv_error(); long long a = pval1->u.intv % m; if (a < 0LL) a += m; // crazy C-language mod operator long long b = pval2->u.intv % m; if (b < 0LL) b += m; long long c = (a * b) % m; return mv_from_int(c); } mv_t i_iii_modexp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { long long m = pval3->u.intv; if (m <= 0LL) return mv_error(); long long a = pval1->u.intv % m; if (a < 0LL) a += m; // crazy C-language mod operator long long e = pval2->u.intv; long long c = 1LL; if (e == 1LL) { c = a; } else if (e == 0LL) { c = 1LL; } else if (e > 0) { long long ap = a; c = 1LL; unsigned long long u = (unsigned long long)e; // repeated-squaring algorithm while (u != 0) { if ((u & 1LL) == 1LL) { c = (c * ap) % m; } u >>= 1; ap = (ap * ap) % m; } } else { return mv_error(); } return mv_from_int(c); } // ---------------------------------------------------------------- mv_t i_s_strlen_func(mv_t* pval1) { mv_t rv = mv_from_int(strlen_for_utf8_display(pval1->u.strv)); mv_free(pval1); return rv; } mv_t s_x_typeof_func(mv_t* pval1) { mv_t rv = mv_from_string(mt_describe_type(pval1->type), NO_FREE); mv_free(pval1); return rv; } // ---------------------------------------------------------------- mv_t s_s_tolower_func(mv_t* pval1) { char* string = mlr_strdup_or_die(pval1->u.strv); #if 0 // ASCII only for (char* c = string; *c; c++) *c = tolower((unsigned char)*c); #else // UTF-8 utf8lwr(string); #endif mv_free(pval1); pval1->u.strv = NULL; return mv_from_string_with_free(string); } mv_t s_s_toupper_func(mv_t* pval1) { char* string = mlr_strdup_or_die(pval1->u.strv); #if 0 // ASCII only for (char* c = string; *c; c++) *c = toupper((unsigned char)*c); #else // UTF-8 utf8upr(string); #endif mv_free(pval1); pval1->u.strv = NULL; return mv_from_string_with_free(string); } mv_t s_s_capitalize_func(mv_t* pval1) { char* string = mlr_strdup_or_die(pval1->u.strv); if (*string) { #if 0 // ASCII *string = toupper((unsigned char)*string); #else // UTF-8 utf8upr1(string); #endif } mv_free(pval1); pval1->u.strv = NULL; return mv_from_string_with_free(string); } mv_t s_s_system_func(mv_t* pval1) { char* cmd = pval1->u.strv; mv_t retval = mv_from_string_no_free("error-running-system-command"); string_builder_t* psb = sb_alloc(100); char buffer[128]; FILE* pipe = popen(cmd, "r"); if (pipe != NULL) { while (fgets(buffer, sizeof buffer, pipe) != NULL) { sb_append_string(psb, buffer); } pclose(pipe); char* output_string = sb_finish(psb); // xxx make a windows-friendly lib func for chomp int len = strlen(output_string); if (len > 0) { if (output_string[len-1] == '\n') { output_string[len-1] = 0; } } retval = mv_from_string_with_free(output_string); } sb_free(psb); mv_free(pval1); pval1->u.strv = NULL; return retval; } // ---------------------------------------------------------------- mv_t s_s_lstrip_func(mv_t* pval1) { if (!isspace(pval1->u.strv[0])) { return *pval1; } else { char* p = pval1->u.strv; while (isspace(*p)) { p++; } return mv_from_string(mlr_strdup_or_die(p), FREE_ENTRY_VALUE); } } mv_t s_s_rstrip_func(mv_t* pval1) { char* start = pval1->u.strv; int oldlen = strlen(start); char* last_non_space = &start[oldlen-1]; while ((start <= last_non_space) && isspace(*last_non_space)) last_non_space--; if (last_non_space < start) { mv_free(pval1); return mv_empty(); } else { int newlen = (last_non_space - start) + 1; char* retval = mlr_malloc_or_die(newlen + 1); memcpy(retval, start, newlen); retval[newlen] = 0; mv_free(pval1); return mv_from_string(retval, FREE_ENTRY_VALUE); } } mv_t s_s_strip_func(mv_t* pval1) { mv_t temp = s_s_rstrip_func(pval1); return s_s_lstrip_func(&temp); } mv_t s_s_collapse_whitespace_func(mv_t* pval1) { int len = strlen(pval1->u.strv); char* retval = mlr_malloc_or_die(len+1); char* pdst = retval; int last_was_space = FALSE; for (char* psrc = pval1->u.strv; *psrc; psrc++) { int current_is_space = isspace(*psrc); if (last_was_space && current_is_space) { } else { *pdst = *psrc; pdst++; } last_was_space = current_is_space; } *pdst = 0; mv_free(pval1); return mv_from_string(retval, FREE_ENTRY_VALUE); } mv_t s_s_clean_whitespace_func(mv_t* pval1) { mv_t temp = s_s_collapse_whitespace_func(pval1); return s_s_strip_func(&temp); } // ---------------------------------------------------------------- // Precondition: psec is either int or float. mv_t time_string_from_seconds(mv_t* psec, char* format, timezone_handling_t timezone_handling) { double seconds_since_the_epoch = 0.0; if (psec->type == MT_FLOAT) { if (isinf(psec->u.fltv) || isnan(psec->u.fltv)) { return mv_error(); } seconds_since_the_epoch = psec->u.fltv; } else { seconds_since_the_epoch = psec->u.intv; } char* string = mlr_alloc_time_string_from_seconds(seconds_since_the_epoch, format, timezone_handling); return mv_from_string_with_free(string); } // ---------------------------------------------------------------- static mv_t sec2gmt_s_n(mv_t* pa) { return time_string_from_seconds(pa, ISO8601_TIME_FORMAT, TIMEZONE_HANDLING_GMT); } static mv_unary_func_t* sec2gmt_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _0, /*INT*/ sec2gmt_s_n, /*FLOAT*/ sec2gmt_s_n, /*BOOL*/ _0, }; mv_t s_x_sec2gmt_func(mv_t* pval1) { return (sec2gmt_dispositions[pval1->type])(pval1); } // Precondition: val2 is already asserted int static mv_t sec2gmt_s_ni(mv_t* pa, mv_t* pb) { switch (pb->u.intv) { case 1: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_1, TIMEZONE_HANDLING_GMT); break; case 2: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_2, TIMEZONE_HANDLING_GMT); break; case 3: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_3, TIMEZONE_HANDLING_GMT); break; case 4: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_4, TIMEZONE_HANDLING_GMT); break; case 5: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_5, TIMEZONE_HANDLING_GMT); break; case 6: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_6, TIMEZONE_HANDLING_GMT); break; case 7: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_7, TIMEZONE_HANDLING_GMT); break; case 8: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_8, TIMEZONE_HANDLING_GMT); break; case 9: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_9, TIMEZONE_HANDLING_GMT); break; default: return mv_error(); } } static mv_binary_func_t* sec2gmtn_dispositions[MT_DIM] = { /*ERROR*/ _err, /*ABSENT*/ _a, /*EMPTY*/ _emt, /*STRING*/ _1, /*INT*/ sec2gmt_s_ni, /*FLOAT*/ sec2gmt_s_ni, /*BOOL*/ _1, }; mv_t s_xi_sec2gmt_func(mv_t* pval1, mv_t* pval2) { return (sec2gmtn_dispositions[pval1->type])(pval1, pval2); } // ---------------------------------------------------------------- static mv_t sec2gmtdate_s_n(mv_t* pa) { return time_string_from_seconds(pa, ISO8601_DATE_FORMAT, TIMEZONE_HANDLING_GMT); } static mv_unary_func_t* sec2gmtdate_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _0, /*INT*/ sec2gmtdate_s_n, /*FLOAT*/ sec2gmtdate_s_n, /*BOOL*/ _0, }; mv_t s_x_sec2gmtdate_func(mv_t* pval1) { return (sec2gmtdate_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t sec2localtime_s_n(mv_t* pa) { return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT, TIMEZONE_HANDLING_LOCAL); } static mv_unary_func_t* sec2localtime_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _0, /*INT*/ sec2localtime_s_n, /*FLOAT*/ sec2localtime_s_n, /*BOOL*/ _0, }; mv_t s_x_sec2localtime_func(mv_t* pval1) { return (sec2localtime_dispositions[pval1->type])(pval1); } // Precondition: val2 is already asserted int static mv_t sec2localtime_s_ni(mv_t* pa, mv_t* pb) { switch (pb->u.intv) { case 1: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_1, TIMEZONE_HANDLING_LOCAL); break; case 2: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_2, TIMEZONE_HANDLING_LOCAL); break; case 3: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_3, TIMEZONE_HANDLING_LOCAL); break; case 4: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_4, TIMEZONE_HANDLING_LOCAL); break; case 5: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_5, TIMEZONE_HANDLING_LOCAL); break; case 6: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_6, TIMEZONE_HANDLING_LOCAL); break; case 7: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_7, TIMEZONE_HANDLING_LOCAL); break; case 8: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_8, TIMEZONE_HANDLING_LOCAL); break; case 9: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_9, TIMEZONE_HANDLING_LOCAL); break; default: return mv_error(); } } static mv_binary_func_t* sec2localn_dispositions[MT_DIM] = { /*ERROR*/ _err, /*ABSENT*/ _a, /*EMPTY*/ _emt, /*STRING*/ _1, /*INT*/ sec2localtime_s_ni, /*FLOAT*/ sec2localtime_s_ni, /*BOOL*/ _1, }; mv_t s_xi_sec2localtime_func(mv_t* pval1, mv_t* pval2) { return (sec2localn_dispositions[pval1->type])(pval1, pval2); } // ---------------------------------------------------------------- static mv_t sec2localdate_s_n(mv_t* pa) { return time_string_from_seconds(pa, ISO8601_DATE_FORMAT, TIMEZONE_HANDLING_LOCAL); } static mv_unary_func_t* sec2localdate_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _0, /*INT*/ sec2localdate_s_n, /*FLOAT*/ sec2localdate_s_n, /*BOOL*/ _0, }; mv_t s_x_sec2localdate_func(mv_t* pval1) { return (sec2localdate_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- mv_t s_ns_strftime_func(mv_t* pval1, mv_t* pval2) { mv_t rv = time_string_from_seconds(pval1, pval2->u.strv, TIMEZONE_HANDLING_GMT); mv_free(pval2); return rv; } // ---------------------------------------------------------------- mv_t s_ns_strftime_local_func(mv_t* pval1, mv_t* pval2) { mv_t rv = time_string_from_seconds(pval1, pval2->u.strv, TIMEZONE_HANDLING_LOCAL); mv_free(pval2); return rv; } // ---------------------------------------------------------------- static mv_t seconds_from_time_string(char* string, char* format, timezone_handling_t timezone_handling) { if (*string == '\0') { return mv_empty(); } else { return mv_from_float(mlr_seconds_from_time_string(string, format, timezone_handling)); } } mv_t i_s_gmt2sec_func(mv_t* pval1) { mv_t rv = seconds_from_time_string(pval1->u.strv, ISO8601_TIME_FORMAT, TIMEZONE_HANDLING_GMT); mv_free(pval1); return rv; } mv_t i_s_localtime2sec_func(mv_t* pval1) { mv_t rv = seconds_from_time_string(pval1->u.strv, ISO8601_LOCAL_TIME_FORMAT, TIMEZONE_HANDLING_LOCAL); mv_free(pval1); return rv; } mv_t i_ss_strptime_func(mv_t* pval1, mv_t* pval2) { mv_t rv = seconds_from_time_string(pval1->u.strv, pval2->u.strv, TIMEZONE_HANDLING_GMT); mv_free(pval1); mv_free(pval2); return rv; } mv_t i_ss_strptime_local_func(mv_t* pval1, mv_t* pval2) { mv_t rv = seconds_from_time_string(pval1->u.strv, pval2->u.strv, TIMEZONE_HANDLING_LOCAL); mv_free(pval1); mv_free(pval2); return rv; } // ---------------------------------------------------------------- static void split_ull_to_hms(long long u, long long* ph, long long* pm, long long* ps) { long long h = 0LL, m = 0LL, s = 0LL; long long sign = 1LL; if (u < 0LL) { u = -u; sign = -1LL; } s = u % 60LL; u = u / 60LL; if (u == 0LL) { s = s * sign; } else { m = u % 60LL; u = u / 60LL; if (u == 0LL) { m = m * sign; } else { h = u * sign; } } *ph = h; *pm = m; *ps = s; } static void split_ull_to_dhms(long long u, long long* pd, long long* ph, long long* pm, long long* ps) { long long d = 0LL, h = 0LL, m = 0LL, s = 0LL; long long sign = 1LL; if (u < 0LL) { u = -u; sign = -1LL; } s = u % 60LL; u = u / 60LL; if (u == 0LL) { s = s * sign; } else { m = u % 60LL; u = u / 60LL; if (u == 0LL) { m = m * sign; } else { h = u % 24LL; u = u / 24LL; if (u == 0LL) { h = h * sign; } else { d = u * sign; } } } *pd = d; *ph = h; *pm = m; *ps = s; } mv_t s_i_sec2hms_func(mv_t* pval1) { long long u = pval1->u.intv; long long h, m, s; char* fmt = "%02lld:%02lld:%02lld"; if (u < 0) { u = -u; fmt = "-%02lld:%02lld:%02lld"; } split_ull_to_hms(u, &h, &m, &s); int n = snprintf(NULL, 0, fmt, h, m, s); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, h, m, s); return mv_from_string_with_free(string); } mv_t s_f_fsec2hms_func(mv_t* pval1) { double v = fabs(pval1->u.fltv); long long h, m, s; char* fmt = "%lld:%02lld:%09.6lf"; long long u = (long long)trunc(v); double f = v - u; if (pval1->u.fltv < 0.0) { fmt = "-%02lld:%02lld:%09.6lf"; } split_ull_to_hms(u, &h, &m, &s); int n = snprintf(NULL, 0, fmt, h, m, s+f); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, h, m, s+f); return mv_from_string_with_free(string); } mv_t s_i_sec2dhms_func(mv_t* pval1) { long long u = pval1->u.intv; long long d, h, m, s; split_ull_to_dhms(u, &d, &h, &m, &s); if (d != 0.0) { char* fmt = "%lldd%02lldh%02lldm%02llds"; int n = snprintf(NULL, 0, fmt, d, h, m, s); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, d, h, m, s); return mv_from_string_with_free(string); } else if (h != 0.0) { char* fmt = "%lldh%02lldm%02llds"; int n = snprintf(NULL, 0, fmt, h, m, s); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, h, m, s); return mv_from_string_with_free(string); } else if (m != 0.0) { char* fmt = "%lldm%02llds"; int n = snprintf(NULL, 0, fmt, m, s); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, m, s); return mv_from_string_with_free(string); } else { char* fmt = "%llds"; int n = snprintf(NULL, 0, fmt, s); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, s); return mv_from_string_with_free(string); } } mv_t s_f_fsec2dhms_func(mv_t* pval1) { double v = fabs(pval1->u.fltv); long long sign = pval1->u.fltv < 0.0 ? -1LL : 1LL; long long d, h, m, s; long long u = (long long)trunc(v); double f = v - u; split_ull_to_dhms(u, &d, &h, &m, &s); if (d != 0.0) { d = sign * d; char* fmt = "%lldd%02lldh%02lldm%09.6lfs"; int n = snprintf(NULL, 0, fmt, d, h, m, s+f); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, d, h, m, s+f); return mv_from_string_with_free(string); } else if (h != 0.0) { h = sign * h; char* fmt = "%lldh%02lldm%09.6lfs"; int n = snprintf(NULL, 0, fmt, h, m, s+f); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, h, m, s+f); return mv_from_string_with_free(string); } else if (m != 0.0) { m = sign * m; char* fmt = "%lldm%09.6lfs"; int n = snprintf(NULL, 0, fmt, m, s+f); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, m, s+f); return mv_from_string_with_free(string); } else { s = sign * s; f = sign * f; char* fmt = "%.6lfs"; int n = snprintf(NULL, 0, fmt, s+f); char* string = mlr_malloc_or_die(n+1); sprintf(string, fmt, s+f); return mv_from_string_with_free(string); } } // ---------------------------------------------------------------- mv_t i_s_hms2sec_func(mv_t* pval1) { long long h = 0LL, m = 0LL, s = 0LL; long long sec = 0LL; char* p = pval1->u.strv; long long sign = 1LL; if (*p == '-') { p++; sign = -1LL; } if (sscanf(p, "%lld:%lld:%lld", &h, &m, &s) == 3) { if (h >= 0LL) sec = 3600LL*h + 60LL*m + s; else sec = -(-3600LL*h + 60LL*m + s); } else if (sscanf(p, "%lld:%lld", &m, &s) == 2) { if (m >= 0LL) sec = 60LL*m + s; else sec = -(-60LL*m + s); } else if (sscanf(p, "%lld", &s) == 1) { sec = s; } else { mv_free(pval1); return mv_error(); } mv_free(pval1); return mv_from_int(sec * sign); } mv_t f_s_hms2fsec_func(mv_t* pval1) { long long h = 0LL, m = 0LL; double s = 0.0; double sec = 0.0; char* p = pval1->u.strv; double sign = 1.0; if (*p == '-') { p++; sign = -1.0; } if (sscanf(p, "%lld:%lld:%lf", &h, &m, &s) == 3) { sec = 3600*h + 60*m + s; } else if (sscanf(p, "%lld:%lf", &m, &s) == 2) { sec = 60*m + s; } else if (sscanf(p, "%lf", &s) == 2) { sec = s; } else { mv_free(pval1); return mv_error(); } mv_free(pval1); return mv_from_float(sec * sign); } mv_t i_s_dhms2sec_func(mv_t* pval1) { long long d = 0LL, h = 0LL, m = 0LL, s = 0LL; long long sec = 0LL; char* p = pval1->u.strv; long long sign = 1LL; if (*p == '-') { p++; sign = -1LL; } if (sscanf(p, "%lldd%lldh%lldm%llds", &d, &h, &m, &s) == 4) { sec = 86400*d + 3600*h + 60*m + s; } else if (sscanf(p, "%lldh%lldm%llds", &h, &m, &s) == 3) { sec = 3600*h + 60*m + s; } else if (sscanf(p, "%lldm%llds", &m, &s) == 2) { sec = 60*m + s; } else if (sscanf(p, "%llds", &s) == 1) { sec = s; } else { mv_free(pval1); return mv_error(); } mv_free(pval1); return mv_from_int(sec * sign); } mv_t f_s_dhms2fsec_func(mv_t* pval1) { long long d = 0LL, h = 0LL, m = 0LL; double s = 0.0; double sec = 0.0; char* p = pval1->u.strv; long long sign = 1.0; if (*p == '-') { p++; sign = -1.0; } if (sscanf(p, "%lldd%lldh%lldm%lfs", &d, &h, &m, &s) == 4) { sec = 86400*d + 3600*h + 60*m + s; } else if (sscanf(p, "%lldh%lldm%lfs", &h, &m, &s) == 3) { sec = 3600*h + 60*m + s; } else if (sscanf(p, "%lldm%lfs", &m, &s) == 2) { sec = 60*m + s; } else if (sscanf(p, "%lfs", &s) == 1) { sec = s; } else { mv_free(pval1); return mv_error(); } mv_free(pval1); return mv_from_float(sec * sign); } // ================================================================ static mv_t plus_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a + b); } static mv_t plus_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a + b); } static mv_t plus_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a + b); } // Adds & subtracts overflow by at most one bit so it suffices to check // sign-changes. static mv_t plus_n_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; long long c = a + b; int overflowed = FALSE; if (a > 0LL) { if (b > 0LL && c < 0LL) overflowed = TRUE; } else if (a < 0LL) { if (b < 0LL && c > 0LL) overflowed = TRUE; } if (overflowed) { return mv_from_float((double)a + (double)b); } else { return mv_from_int(c); } } static mv_binary_func_t* plus_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _2, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, plus_n_ii, plus_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, plus_f_fi, plus_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_plus_func(mv_t* pval1, mv_t* pval2) { return (plus_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t minus_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a - b); } static mv_t minus_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a - b); } static mv_t minus_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a - b); } // Adds & subtracts overflow by at most one bit so it suffices to check // sign-changes. static mv_t minus_n_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; long long c = a - b; int overflowed = FALSE; if (a > 0LL) { if (b < 0LL && c < 0LL) overflowed = TRUE; } else if (a < 0LL) { if (b > 0LL && c > 0LL) overflowed = TRUE; } if (overflowed) { return mv_from_float((double)a + (double)b); } else { return mv_from_int(c); } } static mv_binary_func_t* minus_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _2, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, minus_n_ii, minus_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, minus_f_fi, minus_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_minus_func(mv_t* pval1, mv_t* pval2) { return (minus_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t times_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a * b); } static mv_t times_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a * b); } static mv_t times_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a * b); } // Unlike adds & subtracts which overflow by at most one bit, multiplies can // overflow by a word size. Thus detecting sign-changes does not suffice to // detect overflow. Instead we test whether the floating-point product exceeds // the representable integer range. Now 64-bit integers have 64-bit precision // while IEEE-doubles have only 52-bit mantissas -- so, 53 bits including // implicit leading one. // // The following experiment explicitly demonstrates the resolution at this range: // // 64-bit integer 64-bit integer Casted to double Back to 64-bit // in hex in decimal integer // 0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800 // 0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800 // 0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00 // 0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00 // 0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00 // 0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000 // 0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000 // 0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000 // // That is, we cannot check an integer product to see if it is greater than // 2**63-1 (or is less than -2**63) using integer arithmetic (it may have // already overflowed) *or* using double-precision (granularity). Instead we // check if the absolute value of the product exceeds the largest representable // double less than 2**63. (An alterative would be to do all integer multiplies // using handcrafted multi-word 128-bit arithmetic). static mv_t times_n_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; double d = (double)a * (double)b; if (fabs(d) > 9223372036854774784.0) { return mv_from_float(d); } else { return mv_from_int(a * b); } } static mv_binary_func_t* times_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _2, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, times_n_ii, times_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, times_f_fi, times_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_times_func(mv_t* pval1, mv_t* pval2) { return (times_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t divide_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a / b); } static mv_t divide_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a / b); } static mv_t divide_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a / b); } static mv_t divide_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; if (b == 0LL) { // Compute inf/nan as with floats rather than fatal runtime FPE on integer divide by zero return mv_from_float((double)a / (double)b); } long long r = a % b; // Pythonic division, not C division. if (r == 0LL) { return mv_from_int(a / b); } else { return mv_from_float((double)a / (double)b); } } static mv_binary_func_t* divide_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _i0, _f0, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, divide_i_ii, divide_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, divide_f_fi, divide_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_divide_func(mv_t* pval1, mv_t* pval2) { return (divide_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t idiv_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(floor(a / b)); } static mv_t idiv_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(floor(a / b)); } static mv_t idiv_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(floor(a / b)); } static mv_t idiv_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; if (b == 0LL) { // Compute inf/nan as with floats rather than fatal runtime FPE on integer divide by zero return mv_from_float((double)a / (double)b); } // Pythonic division, not C division. long long q = a / b; long long r = a % b; if (a < 0) { if (b > 0) { if (r != 0) q--; } } else { if (b < 0) { if (r != 0) q--; } } return mv_from_int(q); } static mv_binary_func_t* idiv_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _i0, _f0, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, idiv_i_ii, idiv_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, idiv_f_fi, idiv_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_int_divide_func(mv_t* pval1, mv_t* pval2) { return (idiv_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ================================================================ static mv_t oplus_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a + b); } static mv_t oplus_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a + b); } static mv_t oplus_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a + b); } static mv_t oplus_n_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; long long c = a + b; return mv_from_int(c); } static mv_binary_func_t* oplus_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _2, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, oplus_n_ii, oplus_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, oplus_f_fi, oplus_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_oplus_func(mv_t* pval1, mv_t* pval2) { return (oplus_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t ominus_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a - b); } static mv_t ominus_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a - b); } static mv_t ominus_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a - b); } static mv_t ominus_n_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; long long c = a - b; return mv_from_int(c); } static mv_binary_func_t* ominus_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _2, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, ominus_n_ii, ominus_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, ominus_f_fi, ominus_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_ominus_func(mv_t* pval1, mv_t* pval2) { return (ominus_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t otimes_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a * b); } static mv_t otimes_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a * b); } static mv_t otimes_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a * b); } static mv_t otimes_n_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; return mv_from_int(a * b); } static mv_binary_func_t* otimes_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _2, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, otimes_n_ii, otimes_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, otimes_f_fi, otimes_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_otimes_func(mv_t* pval1, mv_t* pval2) { return (otimes_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t odivide_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a / b); } static mv_t odivide_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a / b); } static mv_t odivide_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a / b); } static mv_t odivide_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; return mv_from_int(a / b); } static mv_binary_func_t* odivide_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _i0, _f0, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, odivide_i_ii, odivide_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, odivide_f_fi, odivide_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_odivide_func(mv_t* pval1, mv_t* pval2) { return (odivide_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t oidiv_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(floor(a / b)); } static mv_t oidiv_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(floor(a / b)); } static mv_t oidiv_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(floor(a / b)); } static mv_t oidiv_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; // Pythonic division, not C division. long long q = a / b; long long r = a % b; if (a < 0) { if (b > 0) { if (r != 0) q--; } } else { if (b < 0) { if (r != 0) q--; } } return mv_from_int(q); } static mv_binary_func_t* oidiv_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _i0, _f0, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, oidiv_i_ii, oidiv_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, oidiv_f_fi, oidiv_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_int_odivide_func(mv_t* pval1, mv_t* pval2) { return (oidiv_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ================================================================ static mv_t mod_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(a - b * floor(a / b)); } static mv_t mod_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(a - b * floor(a / b)); } static mv_t mod_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(a - b * floor(a / b)); } static mv_t mod_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; if (b == 0LL) { // Compute inf/nan as with floats rather than fatal runtime FPE on integer divide by zero return mv_from_float((double)a / (double)b); } long long u = a % b; // Pythonic division, not C division. if (a >= 0LL) { if (b < 0LL) { u += b; } } else { if (b >= 0LL) { u += b; } } return mv_from_int(u); } static mv_binary_func_t* mod_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _i0, _f0, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, mod_i_ii, mod_f_if, _err}, /*FLOAT*/ {_err, _1, _emt, _err, mod_f_fi, mod_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_mod_func(mv_t* pval1, mv_t* pval2) { return (mod_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t upos_i_i(mv_t* pa) { return *pa; } static mv_t upos_f_f(mv_t* pa) { return *pa; } static mv_unary_func_t* upos_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ upos_i_i, /*FLOAT*/ upos_f_f, /*BOOL*/ _err1, }; mv_t x_x_upos_func(mv_t* pval1) { return (upos_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t uneg_i_i(mv_t* pa) { return mv_from_int(-pa->u.intv); } static mv_t uneg_f_f(mv_t* pa) { return mv_from_float(-pa->u.fltv); } static mv_unary_func_t* uneg_disnegitions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ uneg_i_i, /*FLOAT*/ uneg_f_f, /*BOOL*/ _err1, }; mv_t x_x_uneg_func(mv_t* pval1) { return (uneg_disnegitions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t abs_n_f(mv_t* pa) { return mv_from_float(fabs(pa->u.fltv)); } static mv_t abs_n_i(mv_t* pa) { return mv_from_int(pa->u.intv < 0LL ? -pa->u.intv : pa->u.intv); } static mv_unary_func_t* abs_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ abs_n_i, /*FLOAT*/ abs_n_f, /*BOOL*/ _err1, }; mv_t x_x_abs_func(mv_t* pval1) { return (abs_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t sgn_n_f(mv_t* pa) { if (pa->u.fltv > 0.0) return mv_from_float(1.0); if (pa->u.fltv < 0.0) return mv_from_float(-1.0); return mv_from_float(0.0); } static mv_t sgn_n_i(mv_t* pa) { if (pa->u.intv > 0LL) return mv_from_int(1LL); if (pa->u.intv < 0LL) return mv_from_int(-1LL); return mv_from_int(0LL); } static mv_unary_func_t* sgn_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ sgn_n_i, /*FLOAT*/ sgn_n_f, /*BOOL*/ _err1, }; mv_t x_x_sgn_func(mv_t* pval1) { return (sgn_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t ceil_n_f(mv_t* pa) { return mv_from_float(ceil(pa->u.fltv)); } static mv_t ceil_n_i(mv_t* pa) { return mv_from_int(pa->u.intv); } static mv_unary_func_t* ceil_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ ceil_n_i, /*FLOAT*/ ceil_n_f, /*BOOL*/ _err1, }; mv_t x_x_ceil_func(mv_t* pval1) { return (ceil_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t floor_n_f(mv_t* pa) { return mv_from_float(floor(pa->u.fltv)); } static mv_t floor_n_i(mv_t* pa) { return mv_from_int(pa->u.intv); } static mv_unary_func_t* floor_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ floor_n_i, /*FLOAT*/ floor_n_f, /*BOOL*/ _err1, }; mv_t x_x_floor_func(mv_t* pval1) { return (floor_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t round_n_f(mv_t* pa) { return mv_from_float(round(pa->u.fltv)); } static mv_t round_n_i(mv_t* pa) { return mv_from_int(pa->u.intv); } static mv_unary_func_t* round_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ _err1, /*INT*/ round_n_i, /*FLOAT*/ round_n_f, /*BOOL*/ _err1, }; mv_t x_x_round_func(mv_t* pval1) { return (round_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t roundm_f_ff(mv_t* pa, mv_t* pb) { double x = pa->u.fltv; double m = pb->u.fltv; return mv_from_float(round(x / m) * m); } static mv_t roundm_f_fi(mv_t* pa, mv_t* pb) { double x = pa->u.fltv; double m = (double)pb->u.intv; return mv_from_float(round(x / m) * m); } static mv_t roundm_f_if(mv_t* pa, mv_t* pb) { double x = (double)pa->u.intv; double m = pb->u.fltv; return mv_from_float(round(x / m) * m); } static mv_t roundm_i_ii(mv_t* pa, mv_t* pb) { long long x = pa->u.intv; long long m = pb->u.intv; return mv_from_int((x / m) * m); } static mv_binary_func_t* roundm_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _a, _err, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _err, _err, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _a, _err, _err, roundm_i_ii, roundm_f_if, _err}, /*FLOAT*/ {_err, _err, _err, _err, roundm_f_fi, roundm_f_ff, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_roundm_func(mv_t* pval1, mv_t* pval2) { return (roundm_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t min_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(fmin(a, b)); } static mv_t min_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(fmin(a, b)); } static mv_t min_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(fmin(a, b)); } static mv_t min_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; return mv_from_int(a < b ? a : b); } static mv_t min_b_bb(mv_t* pa, mv_t* pb) { int a = pa->u.boolv; int b = pb->u.boolv; return mv_from_bool(a < b ? a : b); } static mv_t min_s_ss(mv_t* pa, mv_t* pb) { char* a = pa->u.strv; char* b = pb->u.strv; int c = strcmp(a, b); if (c <= 0) { mv_free(pb); return *pa; } else { mv_free(pa); return *pb; } } // Sort rules (same for min, max, and comparator): // * NUMERICS < BOOL < STRINGS < ERROR < ABSENT // * error == error (singleton type) // * absent == absent (singleton type) // * string compares on strings // * numeric compares on numbers // * false < true // Exceptions for min & max: // * absent-null always loses // * empty-null always loses against numbers static mv_binary_func_t* min_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _2, _2f, _2, _2, _2}, /*EMPTY*/ {_err, _1, _emt, _emt, _2, _2, _2}, /*STRING*/ {_err, _1f, _emt, min_s_ss, _2f, _2f, _2f}, /*INT*/ {_err, _1, _1, _1f, min_i_ii, min_f_if, _1}, /*FLOAT*/ {_err, _1, _1, _1f, min_f_fi, min_f_ff, _1}, /*BOOL*/ {_err, _1, _1, _1f, _2, _2, min_b_bb}, }; mv_t x_xx_min_func(mv_t* pval1, mv_t* pval2) { return (min_dispositions[pval1->type][pval2->type])(pval1,pval2); } mv_t variadic_min_func(mv_t* pvals, int nvals) { if (nvals == 0) { return mv_empty(); } else { mv_t rv = pvals[0]; for (int i = 1; i < nvals; i++) { rv = x_xx_min_func(&rv, &pvals[i]); // Disposition-matrix entries for min all free their non-return arguments } return rv; } } // ---------------------------------------------------------------- static mv_t max_f_ff(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = pb->u.fltv; return mv_from_float(fmax(a, b)); } static mv_t max_f_fi(mv_t* pa, mv_t* pb) { double a = pa->u.fltv; double b = (double)pb->u.intv; return mv_from_float(fmax(a, b)); } static mv_t max_f_if(mv_t* pa, mv_t* pb) { double a = (double)pa->u.intv; double b = pb->u.fltv; return mv_from_float(fmax(a, b)); } static mv_t max_i_ii(mv_t* pa, mv_t* pb) { long long a = pa->u.intv; long long b = pb->u.intv; return mv_from_int(a > b ? a : b); } static mv_t max_b_bb(mv_t* pa, mv_t* pb) { int a = pa->u.boolv; int b = pb->u.boolv; return mv_from_bool(a > b ? a : b); } static mv_t max_s_ss(mv_t* pa, mv_t* pb) { char* a = pa->u.strv; char* b = pb->u.strv; int c = strcmp(a, b); if (c >= 0) { mv_free(pb); return *pa; } else { mv_free(pa); return *pb; } } // Sort rules (same for min, max, and comparator): // * NUMERICS < BOOL < STRINGS < ERROR < ABSENT // * error == error (singleton type) // * absent == absent (singleton type) // * string compares on strings // * numeric compares on numbers // * false < true // Exceptions for min & max: // * absent-null always loses // * empty-null always loses against numbers static mv_binary_func_t* max_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _2, _2f, _2, _2, _2}, /*EMPTY*/ {_err, _1, _emt, _2f, _2, _2, _2}, /*STRING*/ {_err, _1f, _1f, max_s_ss, _1f, _1f, _1f}, /*INT*/ {_err, _1, _1, _2f, max_i_ii, max_f_if, _2}, /*FLOAT*/ {_err, _1, _1, _2f, max_f_fi, max_f_ff, _2}, /*BOOL*/ {_err, _1, _1, _2f, _1, _1, max_b_bb}, }; mv_t x_xx_max_func(mv_t* pval1, mv_t* pval2) { return (max_dispositions[pval1->type][pval2->type])(pval1,pval2); } mv_t variadic_max_func(mv_t* pvals, int nvals) { if (nvals == 0) { return mv_empty(); } else { mv_t rv = pvals[0]; for (int i = 1; i < nvals; i++) { rv = x_xx_max_func(&rv, &pvals[i]); // Disposition-matrix entries for max all free their non-return arguments } return rv; } } // ---------------------------------------------------------------- static mv_t int_i_b(mv_t* pa) { return mv_from_int(pa->u.boolv ? 1 : 0); } static mv_t int_i_f(mv_t* pa) { return mv_from_int((long long)round(pa->u.fltv)); } static mv_t int_i_i(mv_t* pa) { return mv_from_int(pa->u.intv); } static mv_t int_i_s(mv_t* pa) { if (*pa->u.strv == '\0') { mv_free(pa); return mv_empty(); } mv_t retval = mv_from_int(0LL); if (!mlr_try_int_from_string(pa->u.strv, &retval.u.intv)) { mv_free(pa); return mv_error(); } mv_free(pa); return retval; } static mv_unary_func_t* int_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ int_i_s, /*INT*/ int_i_i, /*FLOAT*/ int_i_f, /*BOOL*/ int_i_b, }; mv_t i_x_int_func(mv_t* pval1) { return (int_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t float_f_b(mv_t* pa) { return mv_from_float(pa->u.boolv ? 1.0 : 0.0); } static mv_t float_f_f(mv_t* pa) { return mv_from_float(pa->u.fltv); } static mv_t float_f_i(mv_t* pa) { return mv_from_float((double)pa->u.intv); } static mv_t float_f_s(mv_t* pa) { if (*pa->u.strv == '\0') { mv_free(pa); return mv_empty(); } mv_t retval = mv_from_float(0.0); if (!mlr_try_float_from_string(pa->u.strv, &retval.u.fltv)) { mv_free(pa); return mv_error(); } mv_free(pa); return retval; } static mv_unary_func_t* float_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ float_f_s, /*INT*/ float_f_i, /*FLOAT*/ float_f_f, /*BOOL*/ float_f_b, }; mv_t f_x_float_func(mv_t* pval1) { return (float_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t band_i_ii(mv_t* pa, mv_t* pb) { return mv_from_int(pa->u.intv & pb->u.intv); } static mv_binary_func_t* band_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _err, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, band_i_ii, _err, _err}, /*FLOAT*/ {_err, _err, _emt, _err, _err, _err, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_band_func(mv_t* pval1, mv_t* pval2) { return (band_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t bor_i_ii(mv_t* pa, mv_t* pb) { return mv_from_int(pa->u.intv | pb->u.intv); } static mv_binary_func_t* bor_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _err, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, bor_i_ii, _err, _err}, /*FLOAT*/ {_err, _err, _emt, _err, _err, _err, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_bor_func(mv_t* pval1, mv_t* pval2) { return (bor_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t bxor_i_ii(mv_t* pa, mv_t* pb) { return mv_from_int(pa->u.intv ^ pb->u.intv); } static mv_binary_func_t* bxor_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _err, _2, _err, _err}, /*EMPTY*/ {_err, _a, _emt, _err, _emt, _emt, _err}, /*STRING*/ {_err, _err, _err, _err, _err, _err, _err}, /*INT*/ {_err, _1, _emt, _err, bxor_i_ii, _err, _err}, /*FLOAT*/ {_err, _err, _emt, _err, _err, _err, _err}, /*BOOL*/ {_err, _err, _err, _err, _err, _err, _err}, }; mv_t x_xx_bxor_func(mv_t* pval1, mv_t* pval2) { return (bxor_dispositions[pval1->type][pval2->type])(pval1,pval2); } // ---------------------------------------------------------------- static mv_t boolean_b_b(mv_t* pa) { return mv_from_bool(pa->u.boolv); } static mv_t boolean_b_f(mv_t* pa) { return mv_from_bool((pa->u.fltv == 0.0) ? FALSE : TRUE); } static mv_t boolean_b_i(mv_t* pa) { return mv_from_bool((pa->u.intv == 0LL) ? FALSE : TRUE); } static mv_t boolean_b_s(mv_t* pa) { return mv_from_bool((streq(pa->u.strv, "true") || streq(pa->u.strv, "TRUE")) ? TRUE : FALSE);} static mv_unary_func_t* boolean_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ boolean_b_s, /*INT*/ boolean_b_i, /*FLOAT*/ boolean_b_f, /*BOOL*/ boolean_b_b, }; mv_t b_x_boolean_func(mv_t* pval1) { return (boolean_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t string_s_b(mv_t* pa) { return mv_from_string_no_free(pa->u.boolv?"true":"false"); } static mv_t string_s_f(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_string_from_double(pa->u.fltv, MLR_GLOBALS.ofmt)); } static mv_t string_s_i(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_string_from_ll(pa->u.intv)); } static mv_t string_s_s(mv_t* pa) { char free_flags = pa->free_flags; pa->free_flags = NO_FREE; return mv_from_string(pa->u.strv, free_flags); } static mv_unary_func_t* string_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ string_s_s, /*INT*/ string_s_i, /*FLOAT*/ string_s_f, /*BOOL*/ string_s_b, }; mv_t s_x_string_func(mv_t* pval1) { return (string_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- mv_t s_sii_substr_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { int m = pval2->u.intv; // inclusive lower; -len..-1 alias to 0..len-1 int n = pval3->u.intv; // inclusive upper; -len..-1 alias to 0..len-1 int len = strlen(pval1->u.strv); mv_t rv; if (m < 0) m = len + m; if (n < 0) n = len + n; if (m < 0 || m >= len || n < 0 || n >= len || n < m) { rv = mv_from_string("", 0); } else { int olen = n - m + 1; char* p = mlr_malloc_or_die(olen + 1); strncpy(p, &pval1->u.strv[m], olen); p[olen] = 0; rv = mv_from_string(p, FREE_ENTRY_VALUE); } mv_free(pval1); mv_free(pval2); mv_free(pval3); return rv; } // ---------------------------------------------------------------- static mv_t hexfmt_s_b(mv_t* pa) { return mv_from_string_no_free(pa->u.boolv?"0x1":"0x0"); } static mv_t hexfmt_s_f(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_hexfmt_from_ll((long long)pa->u.fltv)); } static mv_t hexfmt_s_i(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_hexfmt_from_ll(pa->u.intv)); } static mv_t hexfmt_s_s(mv_t* pa) { char free_flags = pa->free_flags; pa->free_flags = NO_FREE; return mv_from_string(pa->u.strv, free_flags); } static mv_unary_func_t* hexfmt_dispositions[MT_DIM] = { /*ERROR*/ _err1, /*ABSENT*/ _a1, /*EMPTY*/ _emt1, /*STRING*/ hexfmt_s_s, /*INT*/ hexfmt_s_i, /*FLOAT*/ hexfmt_s_f, /*BOOL*/ hexfmt_s_b, }; mv_t s_x_hexfmt_func(mv_t* pval1) { return (hexfmt_dispositions[pval1->type])(pval1); } // ---------------------------------------------------------------- static mv_t fmtnum_s_bs(mv_t* pa, mv_t* pfmt) { return mv_from_string_no_free(pa->u.boolv?"0x1":"0x0"); } static mv_t fmtnum_s_ds(mv_t* pa, mv_t* pfmt) { mv_t rv = mv_from_string_with_free(mlr_alloc_string_from_double(pa->u.fltv, pfmt->u.strv)); mv_free(pfmt); return rv; } static mv_t fmtnum_s_is(mv_t* pa, mv_t* pfmt) { mv_t rv = mv_from_string_with_free(mlr_alloc_string_from_ll_and_format(pa->u.intv, pfmt->u.strv)); mv_free(pfmt); return rv; } static mv_binary_func_t* fmtnum_dispositions[MT_DIM] = { /*ERROR*/ _err, /*ABSENT*/ _a, /*EMPTY*/ _emt, /*STRING*/ _err, /*INT*/ fmtnum_s_is, /*FLOAT*/ fmtnum_s_ds, /*BOOL*/ fmtnum_s_bs, }; mv_t s_xs_fmtnum_func(mv_t* pval1, mv_t* pval2) { return (fmtnum_dispositions[pval1->type])(pval1, pval2); } // ---------------------------------------------------------------- static mv_t eq_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv == pb->u.intv); } static mv_t ne_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv != pb->u.intv); } static mv_t gt_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv > pb->u.intv); } static mv_t ge_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv >= pb->u.intv); } static mv_t lt_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv < pb->u.intv); } static mv_t le_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv <= pb->u.intv); } static mv_t eq_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv == pb->u.fltv); } static mv_t ne_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv != pb->u.fltv); } static mv_t gt_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv > pb->u.fltv); } static mv_t ge_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv >= pb->u.fltv); } static mv_t lt_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv < pb->u.fltv); } static mv_t le_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv <= pb->u.fltv); } static mv_t eq_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv == pb->u.intv); } static mv_t ne_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv != pb->u.intv); } static mv_t gt_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv > pb->u.intv); } static mv_t ge_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv >= pb->u.intv); } static mv_t lt_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv < pb->u.intv); } static mv_t le_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv <= pb->u.intv); } static mv_t eq_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv == pb->u.fltv); } static mv_t ne_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv != pb->u.fltv); } static mv_t gt_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv > pb->u.fltv); } static mv_t ge_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv >= pb->u.fltv); } static mv_t lt_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv < pb->u.fltv); } static mv_t le_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv <= pb->u.fltv); } static mv_t eq_b_xs(mv_t* pa, mv_t* pb) { char free_flags; char* sa = mv_format_val(pa, &free_flags); mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) == 0); if (free_flags & FREE_ENTRY_VALUE) free(sa); mv_free(pa); mv_free(pb); return rv; } static mv_t ne_b_xs(mv_t* pa, mv_t* pb) { char free_flags; char* sa = mv_format_val(pa, &free_flags); mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) != 0); if (free_flags & FREE_ENTRY_VALUE) free(sa); mv_free(pa); mv_free(pb); return rv; } static mv_t gt_b_xs(mv_t* pa, mv_t* pb) { char free_flags; char* sa = mv_format_val(pa, &free_flags); mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) > 0); if (free_flags & FREE_ENTRY_VALUE) free(sa); mv_free(pa); mv_free(pb); return rv; } static mv_t ge_b_xs(mv_t* pa, mv_t* pb) { char free_flags; char* sa = mv_format_val(pa, &free_flags); mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) >= 0); if (free_flags & FREE_ENTRY_VALUE) free(sa); mv_free(pa); mv_free(pb); return rv; } static mv_t lt_b_xs(mv_t* pa, mv_t* pb) { char free_flags; char* sa = mv_format_val(pa, &free_flags); mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) < 0); if (free_flags & FREE_ENTRY_VALUE) free(sa); mv_free(pa); mv_free(pb); return rv; } static mv_t le_b_xs(mv_t* pa, mv_t* pb) { char free_flags; char* sa = mv_format_val(pa, &free_flags); mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) <= 0); if (free_flags & FREE_ENTRY_VALUE) free(sa); mv_free(pa); mv_free(pb); return rv; } static mv_t eq_b_sx(mv_t* pa, mv_t* pb) { char free_flags; char* sb = mv_format_val(pb, &free_flags); mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) == 0); if (free_flags & FREE_ENTRY_VALUE) free(sb); mv_free(pa); mv_free(pb); return rv; } static mv_t ne_b_sx(mv_t* pa, mv_t* pb) { char free_flags; char* sb = mv_format_val(pb, &free_flags); mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) != 0); if (free_flags & FREE_ENTRY_VALUE) free(sb); mv_free(pa); mv_free(pb); return rv; } static mv_t gt_b_sx(mv_t* pa, mv_t* pb) { char free_flags; char* sb = mv_format_val(pb, &free_flags); mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) > 0); if (free_flags & FREE_ENTRY_VALUE) free(sb); mv_free(pa); mv_free(pb); return rv; } static mv_t ge_b_sx(mv_t* pa, mv_t* pb) { char free_flags; char* sb = mv_format_val(pb, &free_flags); mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) >= 0); if (free_flags & FREE_ENTRY_VALUE) free(sb); mv_free(pa); mv_free(pb); return rv; } static mv_t lt_b_sx(mv_t* pa, mv_t* pb) { char free_flags; char* sb = mv_format_val(pb, &free_flags); mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) < 0); if (free_flags & FREE_ENTRY_VALUE) free(sb); mv_free(pa); mv_free(pb); return rv; } static mv_t le_b_sx(mv_t* pa, mv_t* pb) { char free_flags; char* sb = mv_format_val(pb, &free_flags); mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) <= 0); if (free_flags & FREE_ENTRY_VALUE) free(sb); mv_free(pa); mv_free(pb); return rv; } static mv_t eq_b_ss(mv_t*pa, mv_t*pb) { mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) == 0); mv_free(pa); mv_free(pb); return rv; } static mv_t ne_b_ss(mv_t*pa, mv_t*pb) { mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) != 0); mv_free(pa); mv_free(pb); return rv; } static mv_t gt_b_ss(mv_t*pa, mv_t*pb) { mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) > 0); mv_free(pa); mv_free(pb); return rv; } static mv_t ge_b_ss(mv_t*pa, mv_t*pb) { mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) >= 0); mv_free(pa); mv_free(pb); return rv; } static mv_t lt_b_ss(mv_t*pa, mv_t*pb) { mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) < 0); mv_free(pa); mv_free(pb); return rv; } static mv_t le_b_ss(mv_t*pa, mv_t*pb) { mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) <= 0); mv_free(pa); mv_free(pb); return rv; } static mv_binary_func_t* eq_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _a, _a, _a, _a}, /*EMPTY*/ {_err, _a, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _err}, /*STRING*/ {_err, _a, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _err}, /*INT*/ {_err, _a, eq_b_xs, eq_b_xs, eq_b_ii, eq_b_if, _err}, /*FLOAT*/ {_err, _a, eq_b_xs, eq_b_xs, eq_b_fi, eq_b_ff, _err}, /*BOOL*/ {_err, _err, _a, _err, _err, _err, _err}, }; static mv_binary_func_t* ne_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _a, _a, _a, _a}, /*EMPTY*/ {_err, _a, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _err}, /*STRING*/ {_err, _a, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _err}, /*INT*/ {_err, _a, ne_b_xs, ne_b_xs, ne_b_ii, ne_b_if, _err}, /*FLOAT*/ {_err, _a, ne_b_xs, ne_b_xs, ne_b_fi, ne_b_ff, _err}, /*BOOL*/ {_err, _err, _a, _err, _err, _err, _err}, }; static mv_binary_func_t* gt_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _a, _a, _a, _a}, /*EMPTY*/ {_err, _a, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _err}, /*STRING*/ {_err, _a, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _err}, /*INT*/ {_err, _a, gt_b_xs, gt_b_xs, gt_b_ii, gt_b_if, _err}, /*FLOAT*/ {_err, _a, gt_b_xs, gt_b_xs, gt_b_fi, gt_b_ff, _err}, /*BOOL*/ {_err, _err, _a, _err, _err, _err, _err}, }; static mv_binary_func_t* ge_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _a, _a, _a, _a}, /*EMPTY*/ {_err, _a, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _err}, /*STRING*/ {_err, _a, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _err}, /*INT*/ {_err, _a, ge_b_xs, ge_b_xs, ge_b_ii, ge_b_if, _err}, /*FLOAT*/ {_err, _a, ge_b_xs, ge_b_xs, ge_b_fi, ge_b_ff, _err}, /*BOOL*/ {_err, _err, _a, _err, _err, _err, _err}, }; static mv_binary_func_t* lt_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _a, _a, _a, _a}, /*EMPTY*/ {_err, _a, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _err}, /*STRING*/ {_err, _a, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _err}, /*INT*/ {_err, _a, lt_b_xs, lt_b_xs, lt_b_ii, lt_b_if, _err}, /*FLOAT*/ {_err, _a, lt_b_xs, lt_b_xs, lt_b_fi, lt_b_ff, _err}, /*BOOL*/ {_err, _err, _a, _err, _err, _err, _err}, }; static mv_binary_func_t* le_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {_err, _err, _err, _err, _err, _err, _err}, /*ABSENT*/ {_err, _a, _a, _a, _a, _a, _a}, /*EMPTY*/ {_err, _a, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _err}, /*STRING*/ {_err, _a, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _err}, /*INT*/ {_err, _a, le_b_xs, le_b_xs, le_b_ii, le_b_if, _err}, /*FLOAT*/ {_err, _a, le_b_xs, le_b_xs, le_b_fi, le_b_ff, _err}, /*BOOL*/ {_err, _err, _a, _err, _err, _err, _err}, }; mv_t eq_op_func(mv_t* pval1, mv_t* pval2) { return (eq_dispositions[pval1->type][pval2->type])(pval1, pval2); } mv_t ne_op_func(mv_t* pval1, mv_t* pval2) { return (ne_dispositions[pval1->type][pval2->type])(pval1, pval2); } mv_t gt_op_func(mv_t* pval1, mv_t* pval2) { return (gt_dispositions[pval1->type][pval2->type])(pval1, pval2); } mv_t ge_op_func(mv_t* pval1, mv_t* pval2) { return (ge_dispositions[pval1->type][pval2->type])(pval1, pval2); } mv_t lt_op_func(mv_t* pval1, mv_t* pval2) { return (lt_dispositions[pval1->type][pval2->type])(pval1, pval2); } mv_t le_op_func(mv_t* pval1, mv_t* pval2) { return (le_dispositions[pval1->type][pval2->type])(pval1, pval2); } // ---------------------------------------------------------------- int mv_equals_si(mv_t* pa, mv_t* pb) { if (pa->type == MT_INT) { return (pb->type == MT_INT) ? pa->u.intv == pb->u.intv : FALSE; } else { return (pb->type == MT_STRING) ? streq(pa->u.strv, pb->u.strv) : FALSE; } } // ---------------------------------------------------------------- static int eq_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv == pb->u.intv; } static int ne_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv != pb->u.intv; } static int gt_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv > pb->u.intv; } static int ge_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv >= pb->u.intv; } static int lt_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv < pb->u.intv; } static int le_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv <= pb->u.intv; } static int eq_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv == pb->u.fltv; } static int ne_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv != pb->u.fltv; } static int gt_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv > pb->u.fltv; } static int ge_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv >= pb->u.fltv; } static int lt_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv < pb->u.fltv; } static int le_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv <= pb->u.fltv; } static int eq_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv == pb->u.intv; } static int ne_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv != pb->u.intv; } static int gt_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv > pb->u.intv; } static int ge_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv >= pb->u.intv; } static int lt_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv < pb->u.intv; } static int le_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv <= pb->u.intv; } static int eq_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv == pb->u.fltv; } static int ne_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv != pb->u.fltv; } static int gt_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv > pb->u.fltv; } static int ge_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv >= pb->u.fltv; } static int lt_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv < pb->u.fltv; } static int le_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv <= pb->u.fltv; } static mv_i_nn_comparator_func_t* ieq_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, eq_i_ii, eq_i_if, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, eq_i_fi, eq_i_ff, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; static mv_i_nn_comparator_func_t* ine_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, ne_i_ii, ne_i_if, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, ne_i_fi, ne_i_ff, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; static mv_i_nn_comparator_func_t* igt_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, gt_i_ii, gt_i_if, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, gt_i_fi, gt_i_ff, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; static mv_i_nn_comparator_func_t* ige_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, ge_i_ii, ge_i_if, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, ge_i_fi, ge_i_ff, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; static mv_i_nn_comparator_func_t* ilt_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, lt_i_ii, lt_i_if, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, lt_i_fi, lt_i_ff, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; static mv_i_nn_comparator_func_t* ile_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, le_i_ii, le_i_if, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, le_i_fi, le_i_ff, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; int mv_i_nn_eq(mv_t* pval1, mv_t* pval2) { return (ieq_dispositions[pval1->type][pval2->type])(pval1, pval2); } int mv_i_nn_ne(mv_t* pval1, mv_t* pval2) { return (ine_dispositions[pval1->type][pval2->type])(pval1, pval2); } int mv_i_nn_gt(mv_t* pval1, mv_t* pval2) { return (igt_dispositions[pval1->type][pval2->type])(pval1, pval2); } int mv_i_nn_ge(mv_t* pval1, mv_t* pval2) { return (ige_dispositions[pval1->type][pval2->type])(pval1, pval2); } int mv_i_nn_lt(mv_t* pval1, mv_t* pval2) { return (ilt_dispositions[pval1->type][pval2->type])(pval1, pval2); } int mv_i_nn_le(mv_t* pval1, mv_t* pval2) { return (ile_dispositions[pval1->type][pval2->type])(pval1, pval2); } // ---------------------------------------------------------------- // For unit-test keystroke-saving int mveq(mv_t* pval1, mv_t* pval2) { mv_t cmp = eq_op_func(pval1, pval2); MLR_INTERNAL_CODING_ERROR_UNLESS(cmp.type == MT_BOOLEAN); return cmp.u.boolv; } int mvne(mv_t* pval1, mv_t* pval2) { return !mveq(pval1, pval2); } int mveqcopy(mv_t* pval1, mv_t* pval2) { mv_t c1 = mv_copy(pval1); mv_t c2 = mv_copy(pval2); return mveq(&c1, &c2); } int mvnecopy(mv_t* pval1, mv_t* pval2) { mv_t c1 = mv_copy(pval1); mv_t c2 = mv_copy(pval2); return mvne(&c1, &c2); } // ---------------------------------------------------------------- // arg2 evaluates to string via compound expression; regexes compiled on each call. mv_t matches_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures) { char* s1 = pval1->u.strv; char* s2 = pval2->u.strv; regex_t regex; char* sstr = s1; char* sregex = s2; regcomp_or_die(®ex, sregex, REG_NOSUB); const size_t nmatchmax = 10; // Capture-groups \1 through \9 supported, along with entire-string match regmatch_t matches[nmatchmax]; if (regmatch_or_die(®ex, sstr, nmatchmax, matches)) { if (ppregex_captures != NULL && *ppregex_captures != NULL) save_regex_captures(ppregex_captures, pval1->u.strv, matches, nmatchmax); regfree(®ex); mv_free(pval1); mv_free(pval2); return mv_from_true(); } else { regfree(®ex); mv_free(pval1); mv_free(pval2); return mv_from_false(); } } mv_t does_not_match_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures) { mv_t rv = matches_no_precomp_func(pval1, pval2, ppregex_captures); rv.u.boolv = !rv.u.boolv; return rv; } // ---------------------------------------------------------------- // arg2 is a string, compiled to regex only once at alloc time mv_t matches_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures) { const size_t nmatchmax = 10; // Capture-groups \1 through \9 supported, along with entire-string match regmatch_t matches[nmatchmax]; if (regmatch_or_die(pregex, pval1->u.strv, nmatchmax, matches)) { if (ppregex_captures != NULL) save_regex_captures(ppregex_captures, pval1->u.strv, matches, nmatchmax); mv_free(pval1); return mv_from_true(); } else { // See comments in mapper_put.c. Setting this array to length 0 (i.e. zero matches) signals to the // lrec-evaluator's from-literal function that we *are* in a regex-match context but there are *no* matches to // be interpolated. if (ppregex_captures != NULL) { if (*ppregex_captures != NULL) string_array_realloc(*ppregex_captures, 0); else *ppregex_captures = string_array_alloc(0); } mv_free(pval1); return mv_from_false(); } } mv_t does_not_match_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures) { mv_t rv = matches_precomp_func(pval1, pregex, psb, ppregex_captures); rv.u.boolv = !rv.u.boolv; return rv; } // ---------------------------------------------------------------- static int mv_ff_cmp(const mv_t* pa, const mv_t* pb) { double d = pa->u.fltv - pb->u.fltv; return (d < 0) ? -1 : (d > 0) ? 1 : 0; } static int mv_fi_cmp(const mv_t* pa, const mv_t* pb) { double d = pa->u.fltv - pb->u.intv; return (d < 0) ? -1 : (d > 0) ? 1 : 0; } static int mv_if_cmp(const mv_t* pa, const mv_t* pb) { double d = pa->u.intv - pb->u.fltv; return (d < 0) ? -1 : (d > 0) ? 1 : 0; } static int mv_ii_cmp(const mv_t* pa, const mv_t* pb) { long long d = pa->u.intv - pb->u.intv; return (d < 0) ? -1 : (d > 0) ? 1 : 0; } // We assume mv_t's coming into percentile keeper are int or double -- in particular, non-null. static mv_i_xx_comparator_func_t* mv_nn_comparator_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, /*INT*/ {NULL, NULL, NULL, NULL, mv_ii_cmp, mv_if_cmp, NULL}, /*FLOAT*/ {NULL, NULL, NULL, NULL, mv_fi_cmp, mv_ff_cmp, NULL}, /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, }; int mv_nn_comparator(const void* pva, const void* pvb) { const mv_t* pa = pva; const mv_t* pb = pvb; return mv_nn_comparator_dispositions[pa->type][pb->type](pa, pb); } // ---------------------------------------------------------------- // For general qsorting of mv_t's static int mv_cmp_eq(const mv_t* pa, const mv_t* pb) { return 0; } static int mv_cmp_lt(const mv_t* pa, const mv_t* pb) { return -1; } static int mv_cmp_gt(const mv_t* pa, const mv_t* pb) { return 1; } static int mv_bb_comparator(const mv_t* pa, const mv_t* pb) { int d = pa->u.boolv - pb->u.boolv; return (d < 0) ? -1 : (d > 0) ? 1 : 0; } static int mv_ss_cmp(const mv_t* pa, const mv_t* pb) { return strcmp(pa->u.strv, pb->u.strv); } // Sort rules (same for min, max, and comparator): // * NUMERICS < BOOL < STRINGS < ERROR < ABSENT // * error == error (singleton type) // * absent == absent (singleton type) // * string compares on strings // * numeric compares on numbers // * false < true static mv_i_xx_comparator_func_t* mv_xx_comparator_dispositions[MT_DIM][MT_DIM] = { // ERROR ABSENT EMPTY STRING INT FLOAT BOOL /*ERROR*/ {mv_cmp_eq, mv_cmp_lt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, /*ABSENT*/ {mv_cmp_gt, mv_cmp_eq, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, /*EMPTY*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_eq, mv_ss_cmp, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, /*STRING*/ {mv_cmp_lt, mv_cmp_lt, mv_ss_cmp, mv_ss_cmp, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, /*INT*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_ii_cmp, mv_if_cmp, mv_cmp_lt}, /*FLOAT*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_fi_cmp, mv_ff_cmp, mv_cmp_lt}, /*BOOL*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_gt, mv_cmp_gt, mv_bb_comparator}, }; int mv_xx_comparator(const void* pva, const void* pvb) { const mv_t* pa = pva; const mv_t* pb = pvb; return mv_xx_comparator_dispositions[pa->type][pb->type](pa, pb); } // ---------------------------------------------------------------- int mlr_bsearch_mv_n_for_insert(mv_t* array, int size, mv_t* pvalue) { int lo = 0; int hi = size-1; int mid = (hi+lo)/2; int newmid; if (size == 0) return 0; if (mv_i_nn_gt(pvalue, &array[0])) return 0; if (mv_i_nn_lt(pvalue, &array[hi])) return size; while (lo < hi) { mv_t* pa = &array[mid]; if (mv_i_nn_eq(pvalue, pa)) { return mid; } else if (mv_i_nn_gt(pvalue, pa)) { hi = mid; newmid = (hi+lo)/2; } else { lo = mid; newmid = (hi+lo)/2; } if (mid == newmid) { if (mv_i_nn_ge(pvalue, &array[lo])) return lo; else if (mv_i_nn_ge(pvalue, &array[hi])) return hi; else return hi+1; } mid = newmid; } return lo; } miller-5.6.2/c/lib/mvfuncs.h000066400000000000000000000323041354153536500156460ustar00rootroot00000000000000#ifndef MVFUNCS_H #define MVFUNCS_H // ================================================================ // Functions involving mlrvals: primarily for the DSL but also for // stats1/stats2, etc. // ================================================================ #include "../lib/mlrmath.h" #include "../lib/mlrutil.h" #include "../lib/mlrdatetime.h" #include "../lib/mtrand.h" #include "../lib/string_builder.h" #include "../lib/string_array.h" #include "../lib/mlrval.h" #define MV_SB_ALLOC_LENGTH 32 #define ISO8601_TIME_FORMAT "%Y-%m-%dT%H:%M:%SZ" #define ISO8601_TIME_FORMAT_1 "%Y-%m-%dT%H:%M:%1SZ" #define ISO8601_TIME_FORMAT_2 "%Y-%m-%dT%H:%M:%2SZ" #define ISO8601_TIME_FORMAT_3 "%Y-%m-%dT%H:%M:%3SZ" #define ISO8601_TIME_FORMAT_4 "%Y-%m-%dT%H:%M:%4SZ" #define ISO8601_TIME_FORMAT_5 "%Y-%m-%dT%H:%M:%5SZ" #define ISO8601_TIME_FORMAT_6 "%Y-%m-%dT%H:%M:%6SZ" #define ISO8601_TIME_FORMAT_7 "%Y-%m-%dT%H:%M:%7SZ" #define ISO8601_TIME_FORMAT_8 "%Y-%m-%dT%H:%M:%8SZ" #define ISO8601_TIME_FORMAT_9 "%Y-%m-%dT%H:%M:%9SZ" #define ISO8601_DATE_FORMAT "%Y-%m-%d" #define ISO8601_LOCAL_TIME_FORMAT "%Y-%m-%d %H:%M:%S" #define ISO8601_LOCAL_TIME_FORMAT_1 "%Y-%m-%d %H:%M:%1S" #define ISO8601_LOCAL_TIME_FORMAT_2 "%Y-%m-%d %H:%M:%2S" #define ISO8601_LOCAL_TIME_FORMAT_3 "%Y-%m-%d %H:%M:%3S" #define ISO8601_LOCAL_TIME_FORMAT_4 "%Y-%m-%d %H:%M:%4S" #define ISO8601_LOCAL_TIME_FORMAT_5 "%Y-%m-%d %H:%M:%5S" #define ISO8601_LOCAL_TIME_FORMAT_6 "%Y-%m-%d %H:%M:%6S" #define ISO8601_LOCAL_TIME_FORMAT_7 "%Y-%m-%d %H:%M:%7S" #define ISO8601_LOCAL_TIME_FORMAT_8 "%Y-%m-%d %H:%M:%8S" #define ISO8601_LOCAL_TIME_FORMAT_9 "%Y-%m-%d %H:%M:%9S" // ---------------------------------------------------------------- typedef mv_t mv_variadic_func_t(mv_t* pvals, int nvals); typedef mv_t mv_zary_func_t(); typedef mv_t mv_unary_func_t(mv_t* pval1); typedef mv_t mv_binary_func_t(mv_t* pval1, mv_t* pval2); typedef mv_t mv_binary_arg3_capture_func_t(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures); typedef mv_t mv_binary_arg2_regex_func_t(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures); typedef mv_t mv_binary_arg2_regextract_func_t(mv_t* pval1, regex_t* pregex); typedef mv_t mv_ternary_func_t(mv_t* pval1, mv_t* pval2, mv_t* pval3); typedef mv_t mv_ternary_arg2_regex_func_t(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3); typedef mv_t mv_ternary_arg2_regextract_func_t(mv_t* pval1, regex_t* pregex, mv_t* pval3); // ---------------------------------------------------------------- static inline mv_t b_b_not_func(mv_t* pval1) { return mv_from_bool(!pval1->u.boolv); } static inline mv_t b_bb_or_func(mv_t* pval1, mv_t* pval2) { return mv_from_bool(pval1->u.boolv || pval2->u.boolv); } static inline mv_t b_bb_and_func(mv_t* pval1, mv_t* pval2) { return mv_from_bool(pval1->u.boolv && pval2->u.boolv); } static inline mv_t b_bb_xor_func(mv_t* pval1, mv_t* pval2) { return mv_from_bool(pval1->u.boolv ^ pval2->u.boolv); } // ---------------------------------------------------------------- static inline mv_t f_z_urand_func() { return mv_from_float(get_mtrand_double()); // mtrand.h } static inline mv_t i_z_urand32_func() { return mv_from_float(get_mtrand_int32()); // mtrand.h } static inline mv_t f_z_systime_func() { return mv_from_float(get_systime()); // mlrutil.h } // ---------------------------------------------------------------- static inline mv_t f_f_acos_func(mv_t* pval1) {return mv_from_float( acos (pval1->u.fltv));} static inline mv_t f_f_acosh_func(mv_t* pval1) {return mv_from_float( acosh (pval1->u.fltv));} static inline mv_t f_f_asin_func(mv_t* pval1) {return mv_from_float( asin (pval1->u.fltv));} static inline mv_t f_f_asinh_func(mv_t* pval1) {return mv_from_float( asinh (pval1->u.fltv));} static inline mv_t f_f_atan_func(mv_t* pval1) {return mv_from_float( atan (pval1->u.fltv));} static inline mv_t f_f_atanh_func(mv_t* pval1) {return mv_from_float( atanh (pval1->u.fltv));} static inline mv_t f_f_cbrt_func(mv_t* pval1) {return mv_from_float( cbrt (pval1->u.fltv));} static inline mv_t f_f_cos_func(mv_t* pval1) {return mv_from_float( cos (pval1->u.fltv));} static inline mv_t f_f_cosh_func(mv_t* pval1) {return mv_from_float( cosh (pval1->u.fltv));} static inline mv_t f_f_erf_func(mv_t* pval1) {return mv_from_float( erf (pval1->u.fltv));} static inline mv_t f_f_erfc_func(mv_t* pval1) {return mv_from_float( erfc (pval1->u.fltv));} static inline mv_t f_f_exp_func(mv_t* pval1) {return mv_from_float( exp (pval1->u.fltv));} static inline mv_t f_f_expm1_func(mv_t* pval1) {return mv_from_float( expm1 (pval1->u.fltv));} static inline mv_t f_f_invqnorm_func(mv_t* pval1) {return mv_from_float( invqnorm (pval1->u.fltv));} static inline mv_t f_f_log10_func(mv_t* pval1) {return mv_from_float( log10 (pval1->u.fltv));} static inline mv_t f_f_log1p_func(mv_t* pval1) {return mv_from_float( log1p (pval1->u.fltv));} static inline mv_t f_f_log_func(mv_t* pval1) {return mv_from_float( log (pval1->u.fltv));} static inline mv_t f_f_qnorm_func(mv_t* pval1) {return mv_from_float( qnorm (pval1->u.fltv));} static inline mv_t f_f_sin_func(mv_t* pval1) {return mv_from_float( sin (pval1->u.fltv));} static inline mv_t f_f_sinh_func(mv_t* pval1) {return mv_from_float( sinh (pval1->u.fltv));} static inline mv_t f_f_sqrt_func(mv_t* pval1) {return mv_from_float( sqrt (pval1->u.fltv));} static inline mv_t f_f_tan_func(mv_t* pval1) {return mv_from_float( tan (pval1->u.fltv));} static inline mv_t f_f_tanh_func(mv_t* pval1) {return mv_from_float( tanh (pval1->u.fltv));} static inline mv_t f_ff_pow_func(mv_t* pval1, mv_t* pval2) { return mv_from_float(pow(pval1->u.fltv, pval2->u.fltv)); } // These four overflow from 64-bit ints to double. This is for general use. mv_t x_xx_plus_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_minus_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_times_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_divide_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_int_divide_func(mv_t* pval1, mv_t* pval2); // These four intentionally overflow 64-bit ints. This is for use-cases where // people want that, e.g. 64-bit integer math. mv_t x_xx_oplus_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_ominus_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_otimes_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_odivide_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_int_odivide_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_mod_func(mv_t* pval1, mv_t* pval2); mv_t x_x_upos_func(mv_t* pval1); mv_t x_x_uneg_func(mv_t* pval1); // Bitwise mv_t x_xx_bxor_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_band_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_bor_func(mv_t* pval1, mv_t* pval2); mv_t x_x_abs_func(mv_t* pval1); mv_t x_x_ceil_func(mv_t* pval1); mv_t x_x_floor_func(mv_t* pval1); mv_t x_x_round_func(mv_t* pval1); mv_t x_x_sgn_func(mv_t* pval1); mv_t variadic_min_func(mv_t* pvals, int nvals); mv_t variadic_max_func(mv_t* pvals, int nvals); mv_t x_xx_min_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_max_func(mv_t* pval1, mv_t* pval2); mv_t x_xx_roundm_func(mv_t* pval1, mv_t* pval2); mv_t i_x_int_func(mv_t* pval1); mv_t f_x_float_func(mv_t* pval1); mv_t b_x_boolean_func(mv_t* pval1); mv_t s_x_string_func(mv_t* pval1); mv_t s_sii_substr_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t s_x_hexfmt_func(mv_t* pval1); mv_t s_xs_fmtnum_func(mv_t* pval1, mv_t* pval2); // ---------------------------------------------------------------- static inline mv_t f_ff_atan2_func(mv_t* pval1, mv_t* pval2) { return mv_from_float(atan2(pval1->u.fltv, pval2->u.fltv)); } static inline mv_t f_fff_logifit_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { double x = pval1->u.fltv; double m = pval2->u.fltv; double b = pval3->u.fltv; return mv_from_float(1.0 / (1.0 + exp(-m*x-b))); } static inline mv_t i_ii_urandint_func(mv_t* pval1, mv_t* pval2) { long long a = pval1->u.intv; long long b = pval2->u.intv; long long lo, hi; if (a <= b) { lo = a; hi = b + 1; } else { lo = b; hi = a + 1; } long long u = lo + (hi - lo) * get_mtrand_double(); return mv_from_int(u); } static inline mv_t f_ff_urandrange_func(mv_t* pval1, mv_t* pval2) { double lo = pval1->u.fltv; double hi = pval2->u.fltv; double u = lo + (hi - lo) * get_mtrand_double(); return mv_from_float(u); } static inline mv_t i_ii_bitwise_lsh_func(mv_t* pval1, mv_t* pval2) { return mv_from_int(pval1->u.intv << pval2->u.intv); } static inline mv_t i_ii_bitwise_rsh_func(mv_t* pval1, mv_t* pval2) { return mv_from_int(pval1->u.intv >> pval2->u.intv); } static inline mv_t i_i_bitwise_not_func(mv_t* pval1) { return mv_from_int(~pval1->u.intv); } mv_t i_i_bitcount_func(mv_t* pval1); mv_t i_iii_modadd_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t i_iii_modsub_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t i_iii_modmul_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t i_iii_modexp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); // ---------------------------------------------------------------- mv_t i_s_strlen_func(mv_t* pval1); mv_t s_x_typeof_func(mv_t* pval1); mv_t s_s_tolower_func(mv_t* pval1); mv_t s_s_toupper_func(mv_t* pval1); mv_t s_s_capitalize_func(mv_t* pval1); mv_t s_s_lstrip_func(mv_t* pval1); mv_t s_s_rstrip_func(mv_t* pval1); mv_t s_s_strip_func(mv_t* pval1); mv_t s_s_collapse_whitespace_func(mv_t* pval1); mv_t s_s_clean_whitespace_func(mv_t* pval1); mv_t s_s_system_func(mv_t* pval1); mv_t s_xx_dot_func(mv_t* pval1, mv_t* pval2); mv_t sub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t sub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3); mv_t gsub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t gsub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3); mv_t regextract_no_precomp_func(mv_t* pval1, mv_t* pval2); mv_t regextract_precomp_func(mv_t* pval1, regex_t* pregex); mv_t regextract_or_else_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); mv_t regextract_or_else_precomp_func(mv_t* pval1, regex_t* pregex, mv_t* pval3); // String-substitution with no regexes or special characters. mv_t s_sss_ssub_func(mv_t* pstring, mv_t* pold, mv_t* pnew); // ---------------------------------------------------------------- mv_t s_x_sec2gmt_func(mv_t* pval1); mv_t s_xi_sec2gmt_func(mv_t* pval1, mv_t* pval2); mv_t s_x_sec2gmtdate_func(mv_t* pval1); mv_t s_x_sec2localtime_func(mv_t* pval1); mv_t s_xi_sec2localtime_func(mv_t* pval1, mv_t* pval2); mv_t s_x_sec2localdate_func(mv_t* pval1); mv_t i_s_gmt2sec_func(mv_t* pval1); mv_t i_s_localtime2sec_func(mv_t* pval1); mv_t s_ns_strftime_func(mv_t* pval1, mv_t* pval2); mv_t s_ns_strftime_local_func(mv_t* pval1, mv_t* pval2); mv_t i_ss_strptime_func(mv_t* pval1, mv_t* pval2); mv_t i_ss_strptime_local_func(mv_t* pval1, mv_t* pval2); mv_t s_i_sec2hms_func(mv_t* pval1); mv_t s_f_fsec2hms_func(mv_t* pval1); mv_t s_i_sec2dhms_func(mv_t* pval1); mv_t s_f_fsec2dhms_func(mv_t* pval1); mv_t i_s_hms2sec_func(mv_t* pval1); mv_t f_s_hms2fsec_func(mv_t* pval1); mv_t i_s_dhms2sec_func(mv_t* pval1); mv_t f_s_dhms2fsec_func(mv_t* pval1); mv_t time_string_from_seconds(mv_t* psec, char* format, timezone_handling_t timezone_handling); // ---------------------------------------------------------------- // arg2 evaluates to string via compound expression; regexes compiled on each call mv_t matches_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures); mv_t does_not_match_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures); // arg2 is a string, compiled to regex only once at alloc time mv_t matches_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures); mv_t does_not_match_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures); // For filter/put DSL: mv_t eq_op_func(mv_t* pval1, mv_t* pval2); mv_t ne_op_func(mv_t* pval1, mv_t* pval2); mv_t gt_op_func(mv_t* pval1, mv_t* pval2); mv_t ge_op_func(mv_t* pval1, mv_t* pval2); mv_t lt_op_func(mv_t* pval1, mv_t* pval2); mv_t le_op_func(mv_t* pval1, mv_t* pval2); // Assumes inputs are MT_STRING or MT_INT. Nominally intended for mlhmmv which uses only string/int mlrvals. int mv_equals_si(mv_t* pa, mv_t* pb); // For non-DSL comparison of mlrvals: int mv_i_nn_eq(mv_t* pval1, mv_t* pval2); int mv_i_nn_ne(mv_t* pval1, mv_t* pval2); int mv_i_nn_gt(mv_t* pval1, mv_t* pval2); int mv_i_nn_ge(mv_t* pval1, mv_t* pval2); int mv_i_nn_lt(mv_t* pval1, mv_t* pval2); int mv_i_nn_le(mv_t* pval1, mv_t* pval2); // For unit-test keystroke-saving: int mveq(mv_t* pval1, mv_t* pval2); int mvne(mv_t* pval1, mv_t* pval2); int mveqcopy(mv_t* pval1, mv_t* pval2); int mvnecopy(mv_t* pval1, mv_t* pval2); // ---------------------------------------------------------------- // For qsort of numeric mlrvals. int mv_nn_comparator(const void* pva, const void* pvb); // For qsort of arbitrary mlrvals. Sort rules: // * Across types: // NUMERICS < BOOL < STRINGS < ERROR < ABSENT // * Within types: // o numeric compares on numbers // o false < true // o string compares on strings // o error == error (this is a singleton type) // o absent == absent (this is a singleton type) int mv_xx_comparator(const void* pva, const void* pvb); int mlr_bsearch_mv_n_for_insert(mv_t* array, int size, mv_t* pvalue); #endif // MVFUNCS_H miller-5.6.2/c/lib/netbsd_strptime.c000066400000000000000000000232361354153536500173720ustar00rootroot00000000000000// $Id$ // $NetBSD: strptime.c,v 1.18 1999/04/29 02:58:30 tv Exp $ // ================================================================ // Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. // All rights reserved. // // This code was contributed to The NetBSD Foundation by Klaus Klein. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // 3. All advertising materials mentioning features or use of this software // must display the following acknowledgement: // This product includes software developed by the NetBSD // Foundation, Inc. and its contributors. // 4. Neither the name of The NetBSD Foundation nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS // ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // ================================================================ #include "string.h" #include "ctype.h" #include "time.h" // ---------------------------------------------------------------- #define TM_YEAR_BASE 1900 // We do not implement alternate representations. However, we always // check whether a given modifier is allowed for a certain conversion. #define ALT_E 0x01 #define ALT_O 0x02 #define LEGAL_ALT(x) { if (alt_format & ~(x)) return (0); } // ---------------------------------------------------------------- static int conv_num(const char **, int *, int, int); // ---------------------------------------------------------------- static const char *day[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; static const char *abday[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static const char *mon[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; static const char *abmon[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; static const char *am_pm[2] = { "AM", "PM" }; // ================================================================ char* netbsd_strptime(const char *buf, const char *fmt, struct tm *tm) { char c; const char *bp; size_t len = 0; int alt_format, i, split_year = 0; bp = buf; while ((c = *fmt) != '\0') { // Clear `alternate' modifier prior to new conversion. alt_format = 0; // Eat up white-space. if (isspace(c)) { while (isspace(*bp)) bp++; fmt++; continue; } if ((c = *fmt++) != '%') goto literal; again: switch (c = *fmt++) { case '%': // "%%" is converted to "%". literal: if (c != *bp++) return (0); break; // "Alternative" modifiers. Just set the appropriate flag // and start over again. case 'E': // "%E?" alternative conversion modifier. LEGAL_ALT(0); alt_format |= ALT_E; goto again; case 'O': // "%O?" alternative conversion modifier. LEGAL_ALT(0); alt_format |= ALT_O; goto again; // "Complex" conversion rules, implemented through recursion. case 'c': // Date and time, using the locale's format. LEGAL_ALT(ALT_E); if (!(bp = netbsd_strptime(bp, "%x %X", tm))) return (0); break; case 'D': // The date as "%m/%d/%y". LEGAL_ALT(0); if (!(bp = netbsd_strptime(bp, "%m/%d/%y", tm))) return (0); break; case 'R': // The time as "%H:%M". LEGAL_ALT(0); if (!(bp = netbsd_strptime(bp, "%H:%M", tm))) return (0); break; case 'r': // The time in 12-hour clock representation. LEGAL_ALT(0); if (!(bp = netbsd_strptime(bp, "%I:%M:%S %p", tm))) return (0); break; case 'T': // The time as "%H:%M:%S". LEGAL_ALT(0); if (!(bp = netbsd_strptime(bp, "%H:%M:%S", tm))) return (0); break; case 'X': // The time, using the locale's format. LEGAL_ALT(ALT_E); if (!(bp = netbsd_strptime(bp, "%H:%M:%S", tm))) return (0); break; case 'x': // The date, using the locale's format. LEGAL_ALT(ALT_E); if (!(bp = netbsd_strptime(bp, "%m/%d/%y", tm))) return (0); break; // "Elementary" conversion rules. case 'A': // The day of week, using the locale's form. case 'a': LEGAL_ALT(0); for (i = 0; i < 7; i++) { // Full name. len = strlen(day[i]); if (strncasecmp(day[i], bp, len) == 0) break; // Abbreviated name. len = strlen(abday[i]); if (strncasecmp(abday[i], bp, len) == 0) break; } // Nothing matched. if (i == 7) return (0); tm->tm_wday = i; bp += len; break; case 'B': // The month, using the locale's form. case 'b': case 'h': LEGAL_ALT(0); for (i = 0; i < 12; i++) { // Full name. len = strlen(mon[i]); if (strncasecmp(mon[i], bp, len) == 0) break; // Abbreviated name. len = strlen(abmon[i]); if (strncasecmp(abmon[i], bp, len) == 0) break; } // Nothing matched. if (i == 12) return (0); tm->tm_mon = i; bp += len; break; case 'C': // The century number. LEGAL_ALT(ALT_E); if (!(conv_num(&bp, &i, 0, 99))) return (0); if (split_year) { tm->tm_year = (tm->tm_year % 100) + (i * 100); } else { tm->tm_year = i * 100; split_year = 1; } break; case 'd': // The day of month. case 'e': LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &tm->tm_mday, 1, 31))) return (0); break; case 'k': // The hour (24-hour clock representation). LEGAL_ALT(0); // FALLTHROUGH case 'H': LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &tm->tm_hour, 0, 23))) return (0); break; case 'l': // The hour (12-hour clock representation). LEGAL_ALT(0); // FALLTHROUGH case 'I': LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &tm->tm_hour, 1, 12))) return (0); if (tm->tm_hour == 12) tm->tm_hour = 0; break; case 'j': // The day of year. LEGAL_ALT(0); if (!(conv_num(&bp, &i, 1, 366))) return (0); tm->tm_yday = i - 1; break; case 'M': // The minute. LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &tm->tm_min, 0, 59))) return (0); break; case 'm': // The month. LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &i, 1, 12))) return (0); tm->tm_mon = i - 1; break; case 'p': // The locale's equivalent of AM/PM. LEGAL_ALT(0); // AM? if (strcasecmp(am_pm[0], bp) == 0) { if (tm->tm_hour > 11) return (0); bp += strlen(am_pm[0]); break; } // PM? else if (strcasecmp(am_pm[1], bp) == 0) { if (tm->tm_hour > 11) return (0); tm->tm_hour += 12; bp += strlen(am_pm[1]); break; } // Nothing matched. return (0); case 'S': // The seconds. LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &tm->tm_sec, 0, 61))) return (0); break; case 'U': // The week of year, beginning on sunday. case 'W': // The week of year, beginning on monday. LEGAL_ALT(ALT_O); // XXX This is bogus, as we can not assume any valid // information present in the tm structure at this // point to calculate a real value, so just check the // range for now. if (!(conv_num(&bp, &i, 0, 53))) return (0); break; case 'w': // The day of week, beginning on sunday. LEGAL_ALT(ALT_O); if (!(conv_num(&bp, &tm->tm_wday, 0, 6))) return (0); break; case 'Y': // The year. LEGAL_ALT(ALT_E); if (!(conv_num(&bp, &i, 0, 9999))) return (0); tm->tm_year = i - TM_YEAR_BASE; break; case 'y': // The year within 100 years of the epoch. LEGAL_ALT(ALT_E | ALT_O); if (!(conv_num(&bp, &i, 0, 99))) return (0); if (split_year) { tm->tm_year = ((tm->tm_year / 100) * 100) + i; break; } split_year = 1; if (i <= 68) tm->tm_year = i + 2000 - TM_YEAR_BASE; else tm->tm_year = i + 1900 - TM_YEAR_BASE; break; // Miscellaneous conversions. case 'n': // Any kind of white-space. case 't': LEGAL_ALT(0); while (isspace(*bp)) bp++; break; default: // Unknown/unsupported conversion. return (0); } } // LINTED functional specification return ((char *)bp); } // ---------------------------------------------------------------- static int conv_num(const char **buf, int *dest, int llim, int ulim) { int result = 0; // The limit also determines the number of valid digits. int rulim = ulim; if (**buf < '0' || **buf > '9') return (0); do { result *= 10; result += *(*buf)++ - '0'; rulim /= 10; } while ((result * 10 <= ulim) && rulim && **buf >= '0' && **buf <= '9'); if (result < llim || result > ulim) return (0); *dest = result; return (1); } miller-5.6.2/c/lib/netbsd_strptime.h000066400000000000000000000002541354153536500173720ustar00rootroot00000000000000#ifndef NETBSD_STRPTIME_H #define NETBSD_STRPTIME_H #include char* netbsd_strptime(const char *buf, const char *fmt, struct tm *tm); #endif // NETBSD_STRPTIME_H miller-5.6.2/c/lib/nlnet_timegm.c000066400000000000000000000046661354153536500166540ustar00rootroot00000000000000/* * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include /* Number of days per month (except for February in leap years). */ static const int monoff[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; static int is_leap_year(int year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); } static int leap_days(int y1, int y2) { --y1; --y2; return (y2/4 - y1/4) - (y2/100 - y1/100) + (y2/400 - y1/400); } /* * Code adapted from Python 2.4.1 sources (Lib/calendar.py). */ time_t nlnet_timegm(const struct tm *tm) { int year; time_t days; time_t hours; time_t minutes; time_t seconds; year = 1900 + tm->tm_year; days = 365 * (year - 1970) + leap_days(1970, year); days += monoff[tm->tm_mon]; if (tm->tm_mon > 1 && is_leap_year(year)) ++days; days += tm->tm_mday - 1; hours = days * 24 + tm->tm_hour; minutes = hours * 60 + tm->tm_min; seconds = minutes * 60 + tm->tm_sec; return seconds; } miller-5.6.2/c/lib/nlnet_timegm.h000066400000000000000000000032661354153536500166540ustar00rootroot00000000000000/* * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef NLNET_TIMEGM_H #define NLNET_TIMEGM_H #include time_t nlnet_timegm(const struct tm *tm); #endif // NLNET_TIMEGM_H miller-5.6.2/c/lib/string_array.c000066400000000000000000000030731354153536500166650ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "string_array.h" string_array_t* string_array_alloc(int length) { string_array_t* parray = mlr_malloc_or_die(sizeof(string_array_t)); parray->length = length; parray->strings_need_freeing = FALSE; parray->strings = mlr_malloc_or_die(length * sizeof(char*)); for (int i = 0; i < length; i++) parray->strings[i] = NULL; return parray; } void string_array_free(string_array_t* parray) { if (parray == NULL) return; if (parray->strings_need_freeing) { for (int i = 0; i < parray->length; i++) free(parray->strings[i]); } free(parray->strings); free(parray); } void string_array_realloc(string_array_t* parray, int new_length) { if (parray->strings_need_freeing) for (int i = 0; i < parray->length; i++) free(parray->strings[i]); if (new_length > parray->length) // else re-use parray->strings = mlr_realloc_or_die(parray->strings, new_length * sizeof(char*)); parray->length = new_length; for (int i = 0; i < parray->length; i++) parray->strings[i] = NULL; parray->strings_need_freeing = FALSE; } string_array_t* string_array_from_line(char* line, char ifs) { if (*line == 0) // empty string splits to empty array return string_array_alloc(0); int num_commas = 0; for (char* p = line; *p; p++) if (*p == ifs) num_commas++; string_array_t* parray = string_array_alloc(num_commas + 1); char* start = line; int i = 0; for (char* p = line; *p; p++) { if (*p == ifs) { *p = 0; p++; parray->strings[i++] = start; start = p; } } parray->strings[i++] = start; return parray; } miller-5.6.2/c/lib/string_array.h000066400000000000000000000007461354153536500166760ustar00rootroot00000000000000#ifndef STRING_ARRAY_H #define STRING_ARRAY_H // Container class for keeping an array of strings, some of which may be null. typedef struct _string_array_t { int length; int strings_need_freeing; char** strings; } string_array_t; string_array_t* string_array_alloc(int length); void string_array_free(string_array_t* parray); void string_array_realloc(string_array_t* parray, int new_length); string_array_t* string_array_from_line(char* line, char ifs); #endif // STRING_ARRAY_H miller-5.6.2/c/lib/string_builder.c000066400000000000000000000050741354153536500172000ustar00rootroot00000000000000#include #include #include "string_builder.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" // To avoid heap fragmentation, round alloc lengths up to a round number. #define BLOCK_SIZE 32 #define BLOCK_LENGTH_MASK (BLOCK_SIZE-1) #define BLOCK_LENGTH_NMASK (~(BLOCK_SIZE-1)) // ---------------------------------------------------------------- string_builder_t* sb_alloc(int alloc_length) { string_builder_t* psb = mlr_malloc_or_die(sizeof(string_builder_t)); sb_init(psb, alloc_length); return psb; } // ---------------------------------------------------------------- void sb_free(string_builder_t* psb) { if (psb == NULL) return; free(psb->buffer); free(psb); } // ---------------------------------------------------------------- void sb_init(string_builder_t* psb, int alloc_length) { if (alloc_length < 1) { fprintf(stderr, "%s: string_builder alloc_length must be >= 1; got %d.\n", MLR_GLOBALS.bargv0, alloc_length); exit(1); } psb->used_length = 0; psb->alloc_length = alloc_length; psb->buffer = mlr_malloc_or_die(alloc_length); } // ---------------------------------------------------------------- void sb_append_string(string_builder_t* psb, char* s) { for (char* p = s; *p; p++) sb_append_char(psb, *p); } // ---------------------------------------------------------------- int sb_is_empty(string_builder_t* psb) { return psb->used_length == 0; } // ---------------------------------------------------------------- // Keep and reuse the internal buffer. Allocate to the caller only // the size needed. char* sb_finish(string_builder_t* psb) { sb_append_char(psb, '\0'); int alloc_length = (psb->used_length + BLOCK_LENGTH_MASK) & BLOCK_LENGTH_NMASK; char* rv = mlr_malloc_or_die(alloc_length); memcpy(rv, psb->buffer, psb->used_length); psb->used_length = 0; return rv; } char* sb_finish_with_length(string_builder_t* psb, int* pline_length) { sb_append_char(psb, '\0'); int alloc_length = (psb->used_length + BLOCK_LENGTH_MASK) & BLOCK_LENGTH_NMASK; char* rv = mlr_malloc_or_die(alloc_length); memcpy(rv, psb->buffer, psb->used_length); // Line length doesn't include null terminator; used length does. *pline_length = psb->used_length - 1; psb->used_length = 0; return rv; } // ---------------------------------------------------------------- void _sb_enlarge(string_builder_t* psb) { int new_alloc_length = psb->alloc_length * 2; char* new_buffer = mlr_malloc_or_die(new_alloc_length); memcpy(new_buffer, psb->buffer, psb->used_length); free(psb->buffer); psb->alloc_length = new_alloc_length; psb->buffer = new_buffer; } miller-5.6.2/c/lib/string_builder.h000066400000000000000000000021501354153536500171750ustar00rootroot00000000000000#ifndef STRING_BUILDER_H #define STRING_BUILDER_H typedef struct _string_builder_t { int used_length; int alloc_length; char* buffer; } string_builder_t; string_builder_t* sb_alloc(int alloc_length); void sb_free(string_builder_t* psb); void sb_init(string_builder_t* psb, int alloc_length); void _sb_enlarge(string_builder_t* psb); // private method static inline void sb_append_char(string_builder_t* psb, char c) { if (psb->used_length >= psb->alloc_length) _sb_enlarge(psb); psb->buffer[psb->used_length++] = c; } static inline void sb_append_chars(string_builder_t* psb, char* s, int so, int eo) { char* p = s+so; char* e = s+eo; while (p <= e) sb_append_char(psb, *(p++)); } static inline void sb_append_char_range(string_builder_t* psb, char* b, char* e) { char* p = b; while (p <= e) sb_append_char(psb, *(p++)); } void sb_append_string(string_builder_t* psb, char* s); int sb_is_empty(string_builder_t* psb); // The caller should free() the return value: char* sb_finish(string_builder_t* psb); char* sb_finish_with_length(string_builder_t* psb, int* pline_length); #endif // STRING_BUILDER_H miller-5.6.2/c/lib/utf8.h000066400000000000000000001113311354153536500150510ustar00rootroot00000000000000// The latest version of this library is available on GitHub; // https://github.com/sheredom/utf8.h // This is free and unencumbered software released into the public domain. // // Anyone is free to copy, modify, publish, use, compile, sell, or // distribute this software, either in source code form or as a compiled // binary, for any purpose, commercial or non-commercial, and by any // means. // // In jurisdictions that recognize copyright laws, the author or authors // of this software dedicate any and all copyright interest in the // software to the public domain. We make this dedication for the benefit // of the public at large and to the detriment of our heirs and // successors. We intend this dedication to be an overt act of // relinquishment in perpetuity of all present and future rights to this // software under copyright law. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR // OTHER DEALINGS IN THE SOFTWARE. // // For more information, please refer to #ifndef SHEREDOM_UTF8_H_INCLUDED #define SHEREDOM_UTF8_H_INCLUDED #if defined(_MSC_VER) #pragma warning(push) // disable 'bytes padding added after construct' warning #pragma warning(disable : 4820) #endif #include #include #if defined(_MSC_VER) #pragma warning(pop) #endif #if defined(_MSC_VER) typedef __int32 utf8_int32_t; #else #include typedef int32_t utf8_int32_t; #endif #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wold-style-cast" #pragma clang diagnostic ignored "-Wcast-qual" #endif #ifdef __cplusplus extern "C" { #endif #if defined(__clang__) || defined(__GNUC__) #define utf8_nonnull __attribute__((nonnull)) #define utf8_pure __attribute__((pure)) #define utf8_restrict __restrict__ #define utf8_weak __attribute__((weak)) #elif defined(_MSC_VER) #define utf8_nonnull #define utf8_pure #define utf8_restrict __restrict #define utf8_weak __inline #else #error Non clang, non gcc, non MSVC compiler found! #endif #ifdef __cplusplus #define utf8_null NULL #else #define utf8_null 0 #endif // Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > // src2 respectively, case insensitive. utf8_nonnull utf8_pure utf8_weak int utf8casecmp(const void *src1, const void *src2); // Append the utf8 string src onto the utf8 string dst. utf8_nonnull utf8_weak void *utf8cat(void *utf8_restrict dst, const void *utf8_restrict src); // Find the first match of the utf8 codepoint chr in the utf8 string src. utf8_nonnull utf8_pure utf8_weak void *utf8chr(const void *src, utf8_int32_t chr); // Return less than 0, 0, greater than 0 if src1 < src2, // src1 == src2, src1 > src2 respectively. utf8_nonnull utf8_pure utf8_weak int utf8cmp(const void *src1, const void *src2); // Copy the utf8 string src onto the memory allocated in dst. utf8_nonnull utf8_weak void *utf8cpy(void *utf8_restrict dst, const void *utf8_restrict src); // Number of utf8 codepoints in the utf8 string src that consists entirely // of utf8 codepoints not from the utf8 string reject. utf8_nonnull utf8_pure utf8_weak size_t utf8cspn(const void *src, const void *reject); // Duplicate the utf8 string src by getting its size, malloc'ing a new buffer // copying over the data, and returning that. Or 0 if malloc failed. utf8_nonnull utf8_weak void *utf8dup(const void *src); // Number of utf8 codepoints in the utf8 string str, // excluding the null terminating byte. utf8_nonnull utf8_pure utf8_weak size_t utf8len(const void *str); // Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > // src2 respectively, case insensitive. Checking at most n bytes of each utf8 // string. utf8_nonnull utf8_pure utf8_weak int utf8ncasecmp(const void *src1, const void *src2, size_t n); // Append the utf8 string src onto the utf8 string dst, // writing at most n+1 bytes. Can produce an invalid utf8 // string if n falls partway through a utf8 codepoint. utf8_nonnull utf8_weak void *utf8ncat(void *utf8_restrict dst, const void *utf8_restrict src, size_t n); // Return less than 0, 0, greater than 0 if src1 < src2, // src1 == src2, src1 > src2 respectively. Checking at most n // bytes of each utf8 string. utf8_nonnull utf8_pure utf8_weak int utf8ncmp(const void *src1, const void *src2, size_t n); // Copy the utf8 string src onto the memory allocated in dst. // Copies at most n bytes. If there is no terminating null byte in // the first n bytes of src, the string placed into dst will not be // null-terminated. If the size (in bytes) of src is less than n, // extra null terminating bytes are appended to dst such that at // total of n bytes are written. Can produce an invalid utf8 // string if n falls partway through a utf8 codepoint. utf8_nonnull utf8_weak void *utf8ncpy(void *utf8_restrict dst, const void *utf8_restrict src, size_t n); // Similar to utf8dup, except that at most n bytes of src are copied. If src is // longer than n, only n bytes are copied and a null byte is added. // // Returns a new string if successful, 0 otherwise utf8_nonnull utf8_weak void *utf8ndup(const void *src, size_t n); // Locates the first occurence in the utf8 string str of any byte in the // utf8 string accept, or 0 if no match was found. utf8_nonnull utf8_pure utf8_weak void *utf8pbrk(const void *str, const void *accept); // Find the last match of the utf8 codepoint chr in the utf8 string src. utf8_nonnull utf8_pure utf8_weak void *utf8rchr(const void *src, int chr); // Number of bytes in the utf8 string str, // including the null terminating byte. utf8_nonnull utf8_pure utf8_weak size_t utf8size(const void *str); // Number of utf8 codepoints in the utf8 string src that consists entirely // of utf8 codepoints from the utf8 string accept. utf8_nonnull utf8_pure utf8_weak size_t utf8spn(const void *src, const void *accept); // The position of the utf8 string needle in the utf8 string haystack. utf8_nonnull utf8_pure utf8_weak void *utf8str(const void *haystack, const void *needle); // The position of the utf8 string needle in the utf8 string haystack, case // insensitive. utf8_nonnull utf8_pure utf8_weak void *utf8casestr(const void *haystack, const void *needle); // Return 0 on success, or the position of the invalid // utf8 codepoint on failure. utf8_nonnull utf8_pure utf8_weak void *utf8valid(const void *str); // Sets out_codepoint to the next utf8 codepoint in str, and returns the address // of the utf8 codepoint after the current one in str. utf8_nonnull utf8_weak void * utf8codepoint(const void *utf8_restrict str, utf8_int32_t *utf8_restrict out_codepoint); // Returns the size of the given codepoint in bytes. utf8_weak size_t utf8codepointsize(utf8_int32_t chr); // Write a codepoint to the given string, and return the address to the next // place after the written codepoint. Pass how many bytes left in the buffer to // n. If there is not enough space for the codepoint, this function returns // null. utf8_nonnull utf8_weak void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n); // Returns 1 if the given character is lowercase, or 0 if it is not. utf8_weak int utf8islower(utf8_int32_t chr); // Returns 1 if the given character is uppercase, or 0 if it is not. utf8_weak int utf8isupper(utf8_int32_t chr); // Transform the given string into all lowercase codepoints. utf8_nonnull utf8_weak void utf8lwr(void *utf8_restrict str); // Transform the given string into all uppercase codepoints. utf8_nonnull utf8_weak void utf8upr(void *utf8_restrict str); // Transform the first codepoint (if any) of the given string into uppercase. utf8_nonnull utf8_weak void utf8upr1(void *utf8_restrict str); // Make a codepoint lower case if possible. utf8_weak utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); // Make a codepoint upper case if possible. utf8_weak utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); #undef utf8_weak #undef utf8_pure #undef utf8_nonnull int utf8casecmp(const void *src1, const void *src2) { utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; for (;;) { src1 = utf8codepoint(src1, &src1_cp); src2 = utf8codepoint(src2, &src2_cp); // Take a copy of src1 & src2 src1_orig_cp = src1_cp; src2_orig_cp = src2_cp; // Lower the srcs if required src1_cp = utf8lwrcodepoint(src1_cp); src2_cp = utf8lwrcodepoint(src2_cp); // Check if the lowered codepoints match if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { return 0; } else if (src1_cp == src2_cp) { continue; } // If they don't match, then we return which of the original's are less if (src1_orig_cp < src2_orig_cp) { return -1; } else if (src1_orig_cp > src2_orig_cp) { return 1; } } } void *utf8cat(void *utf8_restrict dst, const void *utf8_restrict src) { char *d = (char *)dst; const char *s = (const char *)src; // find the null terminating byte in dst while ('\0' != *d) { d++; } // overwriting the null terminating byte in dst, append src byte-by-byte while ('\0' != *s) { *d++ = *s++; } // write out a new null terminating byte into dst *d = '\0'; return dst; } void *utf8chr(const void *src, utf8_int32_t chr) { char c[5] = {'\0', '\0', '\0', '\0', '\0'}; if (0 == chr) { // being asked to return position of null terminating byte, so // just run s to the end, and return! const char *s = (const char *)src; while ('\0' != *s) { s++; } return (void *)s; } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { // 1-byte/7-bit ascii // (0b0xxxxxxx) c[0] = (char)chr; } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { // 2-byte/11-bit utf8 code point // (0b110xxxxx 0b10xxxxxx) c[0] = 0xc0 | (char)(chr >> 6); c[1] = 0x80 | (char)(chr & 0x3f); } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { // 3-byte/16-bit utf8 code point // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) c[0] = 0xe0 | (char)(chr >> 12); c[1] = 0x80 | (char)((chr >> 6) & 0x3f); c[2] = 0x80 | (char)(chr & 0x3f); } else { // if (0 == ((int)0xffe00000 & chr)) { // 4-byte/21-bit utf8 code point // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) c[0] = 0xf0 | (char)(chr >> 18); c[1] = 0x80 | (char)((chr >> 12) & 0x3f); c[2] = 0x80 | (char)((chr >> 6) & 0x3f); c[3] = 0x80 | (char)(chr & 0x3f); } // we've made c into a 2 utf8 codepoint string, one for the chr we are // seeking, another for the null terminating byte. Now use utf8str to // search return utf8str(src, c); } int utf8cmp(const void *src1, const void *src2) { const unsigned char *s1 = (const unsigned char *)src1; const unsigned char *s2 = (const unsigned char *)src2; while (('\0' != *s1) || ('\0' != *s2)) { if (*s1 < *s2) { return -1; } else if (*s1 > *s2) { return 1; } s1++; s2++; } // both utf8 strings matched return 0; } int utf8coll(const void *src1, const void *src2); void *utf8cpy(void *utf8_restrict dst, const void *utf8_restrict src) { char *d = (char *)dst; const char *s = (const char *)src; // overwriting anything previously in dst, write byte-by-byte // from src while ('\0' != *s) { *d++ = *s++; } // append null terminating byte *d = '\0'; return dst; } size_t utf8cspn(const void *src, const void *reject) { const char *s = (const char *)src; size_t chars = 0; while ('\0' != *s) { const char *r = (const char *)reject; size_t offset = 0; while ('\0' != *r) { // checking that if *r is the start of a utf8 codepoint // (it is not 0b10xxxxxx) and we have successfully matched // a previous character (0 < offset) - we found a match if ((0x80 != (0xc0 & *r)) && (0 < offset)) { return chars; } else { if (*r == s[offset]) { // part of a utf8 codepoint matched, so move our checking // onwards to the next byte offset++; r++; } else { // r could be in the middle of an unmatching utf8 code point, // so we need to march it on to the next character beginning, do { r++; } while (0x80 == (0xc0 & *r)); // reset offset too as we found a mismatch offset = 0; } } } // the current utf8 codepoint in src did not match reject, but src // could have been partway through a utf8 codepoint, so we need to // march it onto the next utf8 codepoint starting byte do { s++; } while ((0x80 == (0xc0 & *s))); chars++; } return chars; } size_t utf8size(const void *str); void *utf8dup(const void *src) { const char *s = (const char *)src; char *n = utf8_null; // figure out how many bytes (including the terminator) we need to copy first size_t bytes = utf8size(src); n = (char *)malloc(bytes); if (utf8_null == n) { // out of memory so we bail return utf8_null; } else { bytes = 0; // copy src byte-by-byte into our new utf8 string while ('\0' != s[bytes]) { n[bytes] = s[bytes]; bytes++; } // append null terminating byte n[bytes] = '\0'; return n; } } void *utf8fry(const void *str); size_t utf8len(const void *str) { const unsigned char *s = (const unsigned char *)str; size_t length = 0; while ('\0' != *s) { if (0xf0 == (0xf8 & *s)) { // 4-byte utf8 code point (began with 0b11110xxx) s += 4; } else if (0xe0 == (0xf0 & *s)) { // 3-byte utf8 code point (began with 0b1110xxxx) s += 3; } else if (0xc0 == (0xe0 & *s)) { // 2-byte utf8 code point (began with 0b110xxxxx) s += 2; } else { // if (0x00 == (0x80 & *s)) { // 1-byte ascii (began with 0b0xxxxxxx) s += 1; } // no matter the bytes we marched s forward by, it was // only 1 utf8 codepoint length++; } return length; } int utf8ncasecmp(const void *src1, const void *src2, size_t n) { utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; do { const unsigned char *const s1 = (const unsigned char *)src1; const unsigned char *const s2 = (const unsigned char *)src2; // first check that we have enough bytes left in n to contain an entire // codepoint if (0 == n) { return 0; } if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { const utf8_int32_t c1 = (0xe0 & *s1); const utf8_int32_t c2 = (0xe0 & *s2); if (c1 < c2) { return -1; } else if (c1 > c2) { return 1; } else { return 0; } } if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { const utf8_int32_t c1 = (0xf0 & *s1); const utf8_int32_t c2 = (0xf0 & *s2); if (c1 < c2) { return -1; } else if (c1 > c2) { return 1; } else { return 0; } } if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { const utf8_int32_t c1 = (0xf8 & *s1); const utf8_int32_t c2 = (0xf8 & *s2); if (c1 < c2) { return -1; } else if (c1 > c2) { return 1; } else { return 0; } } src1 = utf8codepoint(src1, &src1_cp); src2 = utf8codepoint(src2, &src2_cp); n -= utf8codepointsize(src1_cp); // Take a copy of src1 & src2 src1_orig_cp = src1_cp; src2_orig_cp = src2_cp; // Lower srcs if required src1_cp = utf8lwrcodepoint(src1_cp); src2_cp = utf8lwrcodepoint(src2_cp); // Check if the lowered codepoints match if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { return 0; } else if (src1_cp == src2_cp) { continue; } // If they don't match, then we return which of the original's are less if (src1_orig_cp < src2_orig_cp) { return -1; } else if (src1_orig_cp > src2_orig_cp) { return 1; } } while (0 < n); // both utf8 strings matched return 0; } void *utf8ncat(void *utf8_restrict dst, const void *utf8_restrict src, size_t n) { char *d = (char *)dst; const char *s = (const char *)src; // find the null terminating byte in dst while ('\0' != *d) { d++; } // overwriting the null terminating byte in dst, append src byte-by-byte // stopping if we run out of space do { *d++ = *s++; } while (('\0' != *s) && (0 != --n)); // write out a new null terminating byte into dst *d = '\0'; return dst; } int utf8ncmp(const void *src1, const void *src2, size_t n) { const unsigned char *s1 = (const unsigned char *)src1; const unsigned char *s2 = (const unsigned char *)src2; while ((0 != n--) && (('\0' != *s1) || ('\0' != *s2))) { if (*s1 < *s2) { return -1; } else if (*s1 > *s2) { return 1; } s1++; s2++; } // both utf8 strings matched return 0; } void *utf8ncpy(void *utf8_restrict dst, const void *utf8_restrict src, size_t n) { char *d = (char *)dst; const char *s = (const char *)src; size_t index; // overwriting anything previously in dst, write byte-by-byte // from src for (index = 0; index < n; index++) { d[index] = s[index]; if ('\0' == s[index]) { break; } } // append null terminating byte for (; index < n; index++) { d[index] = 0; } return dst; } void *utf8ndup(const void *src, size_t n) { const char *s = (const char *)src; char *c = utf8_null; size_t bytes = 0; // Find the end of the string or stop when n is reached while ('\0' != s[bytes] && bytes < n) { bytes++; } // In case bytes is actually less than n, we need to set it // to be used later in the copy byte by byte. n = bytes; c = (char *)malloc(bytes + 1); if (utf8_null == c) { // out of memory so we bail return utf8_null; } bytes = 0; // copy src byte-by-byte into our new utf8 string while ('\0' != s[bytes] && bytes < n) { c[bytes] = s[bytes]; bytes++; } // append null terminating byte c[bytes] = '\0'; return c; } void *utf8rchr(const void *src, int chr) { const char *s = (const char *)src; const char *match = utf8_null; char c[5] = {'\0', '\0', '\0', '\0', '\0'}; if (0 == chr) { // being asked to return position of null terminating byte, so // just run s to the end, and return! while ('\0' != *s) { s++; } return (void *)s; } else if (0 == ((int)0xffffff80 & chr)) { // 1-byte/7-bit ascii // (0b0xxxxxxx) c[0] = (char)chr; } else if (0 == ((int)0xfffff800 & chr)) { // 2-byte/11-bit utf8 code point // (0b110xxxxx 0b10xxxxxx) c[0] = 0xc0 | (char)(chr >> 6); c[1] = 0x80 | (char)(chr & 0x3f); } else if (0 == ((int)0xffff0000 & chr)) { // 3-byte/16-bit utf8 code point // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) c[0] = 0xe0 | (char)(chr >> 12); c[1] = 0x80 | (char)((chr >> 6) & 0x3f); c[2] = 0x80 | (char)(chr & 0x3f); } else { // if (0 == ((int)0xffe00000 & chr)) { // 4-byte/21-bit utf8 code point // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) c[0] = 0xf0 | (char)(chr >> 18); c[1] = 0x80 | (char)((chr >> 12) & 0x3f); c[2] = 0x80 | (char)((chr >> 6) & 0x3f); c[3] = 0x80 | (char)(chr & 0x3f); } // we've created a 2 utf8 codepoint string in c that is // the utf8 character asked for by chr, and a null // terminating byte while ('\0' != *s) { size_t offset = 0; while (s[offset] == c[offset]) { offset++; } if ('\0' == c[offset]) { // we found a matching utf8 code point match = s; s += offset; } else { s += offset; // need to march s along to next utf8 codepoint start // (the next byte that doesn't match 0b10xxxxxx) if ('\0' != *s) { do { s++; } while (0x80 == (0xc0 & *s)); } } } // return the last match we found (or 0 if no match was found) return (void *)match; } void *utf8pbrk(const void *str, const void *accept) { const char *s = (const char *)str; while ('\0' != *s) { const char *a = (const char *)accept; size_t offset = 0; while ('\0' != *a) { // checking that if *a is the start of a utf8 codepoint // (it is not 0b10xxxxxx) and we have successfully matched // a previous character (0 < offset) - we found a match if ((0x80 != (0xc0 & *a)) && (0 < offset)) { return (void *)s; } else { if (*a == s[offset]) { // part of a utf8 codepoint matched, so move our checking // onwards to the next byte offset++; a++; } else { // r could be in the middle of an unmatching utf8 code point, // so we need to march it on to the next character beginning, do { a++; } while (0x80 == (0xc0 & *a)); // reset offset too as we found a mismatch offset = 0; } } } // we found a match on the last utf8 codepoint if (0 < offset) { return (void *)s; } // the current utf8 codepoint in src did not match accept, but src // could have been partway through a utf8 codepoint, so we need to // march it onto the next utf8 codepoint starting byte do { s++; } while ((0x80 == (0xc0 & *s))); } return utf8_null; } size_t utf8size(const void *str) { const char *s = (const char *)str; size_t size = 0; while ('\0' != s[size]) { size++; } // we are including the null terminating byte in the size calculation size++; return size; } size_t utf8spn(const void *src, const void *accept) { const char *s = (const char *)src; size_t chars = 0; while ('\0' != *s) { const char *a = (const char *)accept; size_t offset = 0; while ('\0' != *a) { // checking that if *r is the start of a utf8 codepoint // (it is not 0b10xxxxxx) and we have successfully matched // a previous character (0 < offset) - we found a match if ((0x80 != (0xc0 & *a)) && (0 < offset)) { // found a match, so increment the number of utf8 codepoints // that have matched and stop checking whether any other utf8 // codepoints in a match chars++; s += offset; break; } else { if (*a == s[offset]) { offset++; a++; } else { // a could be in the middle of an unmatching utf8 codepoint, // so we need to march it on to the next character beginning, do { a++; } while (0x80 == (0xc0 & *a)); // reset offset too as we found a mismatch offset = 0; } } } // if a got to its terminating null byte, then we didn't find a match. // Return the current number of matched utf8 codepoints if ('\0' == *a) { return chars; } } return chars; } void *utf8str(const void *haystack, const void *needle) { const char *h = (const char *)haystack; utf8_int32_t throwaway_codepoint; // if needle has no utf8 codepoints before the null terminating // byte then return haystack if ('\0' == *((const char *)needle)) { return (void *)haystack; } while ('\0' != *h) { const char *maybeMatch = h; const char *n = (const char *)needle; while (*h == *n && (*h != '\0' && *n != '\0')) { n++; h++; } if ('\0' == *n) { // we found the whole utf8 string for needle in haystack at // maybeMatch, so return it return (void *)maybeMatch; } else { // h could be in the middle of an unmatching utf8 codepoint, // so we need to march it on to the next character beginning // starting from the current character h = (const char*)utf8codepoint(maybeMatch, &throwaway_codepoint); } } // no match return utf8_null; } void *utf8casestr(const void *haystack, const void *needle) { const void *h = haystack; // if needle has no utf8 codepoints before the null terminating // byte then return haystack if ('\0' == *((const char *)needle)) { return (void *)haystack; } for (;;) { const void *maybeMatch = h; const void *n = needle; utf8_int32_t h_cp, n_cp; // Get the next code point and track it const void *nextH = h = utf8codepoint(h, &h_cp); n = utf8codepoint(n, &n_cp); while ((0 != h_cp) && (0 != n_cp)) { h_cp = utf8lwrcodepoint(h_cp); n_cp = utf8lwrcodepoint(n_cp); // if we find a mismatch, bail out! if (h_cp != n_cp) { break; } h = utf8codepoint(h, &h_cp); n = utf8codepoint(n, &n_cp); } if (0 == n_cp) { // we found the whole utf8 string for needle in haystack at // maybeMatch, so return it return (void *)maybeMatch; } if (0 == h_cp) { // no match return utf8_null; } // Roll back to the next code point in the haystack to test h = nextH; } } void *utf8valid(const void *str) { const char *s = (const char *)str; while ('\0' != *s) { if (0xf0 == (0xf8 & *s)) { // ensure each of the 3 following bytes in this 4-byte // utf8 codepoint began with 0b10xxxxxx if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2])) || (0x80 != (0xc0 & s[3]))) { return (void *)s; } // ensure that our utf8 codepoint ended after 4 bytes if (0x80 == (0xc0 & s[4])) { return (void *)s; } // ensure that the top 5 bits of this 4-byte utf8 // codepoint were not 0, as then we could have used // one of the smaller encodings if ((0 == (0x07 & s[0])) && (0 == (0x30 & s[1]))) { return (void *)s; } // 4-byte utf8 code point (began with 0b11110xxx) s += 4; } else if (0xe0 == (0xf0 & *s)) { // ensure each of the 2 following bytes in this 3-byte // utf8 codepoint began with 0b10xxxxxx if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2]))) { return (void *)s; } // ensure that our utf8 codepoint ended after 3 bytes if (0x80 == (0xc0 & s[3])) { return (void *)s; } // ensure that the top 5 bits of this 3-byte utf8 // codepoint were not 0, as then we could have used // one of the smaller encodings if ((0 == (0x0f & s[0])) && (0 == (0x20 & s[1]))) { return (void *)s; } // 3-byte utf8 code point (began with 0b1110xxxx) s += 3; } else if (0xc0 == (0xe0 & *s)) { // ensure the 1 following byte in this 2-byte // utf8 codepoint began with 0b10xxxxxx if (0x80 != (0xc0 & s[1])) { return (void *)s; } // ensure that our utf8 codepoint ended after 2 bytes if (0x80 == (0xc0 & s[2])) { return (void *)s; } // ensure that the top 4 bits of this 2-byte utf8 // codepoint were not 0, as then we could have used // one of the smaller encodings if (0 == (0x1e & s[0])) { return (void *)s; } // 2-byte utf8 code point (began with 0b110xxxxx) s += 2; } else if (0x00 == (0x80 & *s)) { // 1-byte ascii (began with 0b0xxxxxxx) s += 1; } else { // we have an invalid 0b1xxxxxxx utf8 code point entry return (void *)s; } } return utf8_null; } void *utf8codepoint(const void *utf8_restrict str, utf8_int32_t *utf8_restrict out_codepoint) { const char *s = (const char *)str; if (0xf0 == (0xf8 & s[0])) { // 4 byte utf8 codepoint *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | ((0x3f & s[2]) << 6) | (0x3f & s[3]); s += 4; } else if (0xe0 == (0xf0 & s[0])) { // 3 byte utf8 codepoint *out_codepoint = ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); s += 3; } else if (0xc0 == (0xe0 & s[0])) { // 2 byte utf8 codepoint *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); s += 2; } else { // 1 byte utf8 codepoint otherwise *out_codepoint = s[0]; s += 1; } return (void *)s; } size_t utf8codepointsize(utf8_int32_t chr) { if (0 == ((utf8_int32_t)0xffffff80 & chr)) { return 1; } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { return 2; } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { return 3; } else { // if (0 == ((int)0xffe00000 & chr)) { return 4; } } void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n) { char *s = (char *)str; if (0 == ((utf8_int32_t)0xffffff80 & chr)) { // 1-byte/7-bit ascii // (0b0xxxxxxx) if (n < 1) { return utf8_null; } s[0] = (char)chr; s += 1; } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { // 2-byte/11-bit utf8 code point // (0b110xxxxx 0b10xxxxxx) if (n < 2) { return utf8_null; } s[0] = 0xc0 | (char)(chr >> 6); s[1] = 0x80 | (char)(chr & 0x3f); s += 2; } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { // 3-byte/16-bit utf8 code point // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) if (n < 3) { return utf8_null; } s[0] = 0xe0 | (char)(chr >> 12); s[1] = 0x80 | (char)((chr >> 6) & 0x3f); s[2] = 0x80 | (char)(chr & 0x3f); s += 3; } else { // if (0 == ((int)0xffe00000 & chr)) { // 4-byte/21-bit utf8 code point // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) if (n < 4) { return utf8_null; } s[0] = 0xf0 | (char)(chr >> 18); s[1] = 0x80 | (char)((chr >> 12) & 0x3f); s[2] = 0x80 | (char)((chr >> 6) & 0x3f); s[3] = 0x80 | (char)(chr & 0x3f); s += 4; } return s; } int utf8islower(utf8_int32_t chr) { return chr != utf8uprcodepoint(chr); } int utf8isupper(utf8_int32_t chr) { return chr != utf8lwrcodepoint(chr); } void utf8lwr(void *utf8_restrict str) { void *p, *pn; utf8_int32_t cp; p = (char *)str; pn = utf8codepoint(p, &cp); while (cp != 0) { const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); const size_t size = utf8codepointsize(lwr_cp); if (lwr_cp != cp) { utf8catcodepoint(p, lwr_cp, size); } p = pn; pn = utf8codepoint(p, &cp); } } void utf8upr(void *utf8_restrict str) { void *p, *pn; utf8_int32_t cp; p = (char *)str; pn = utf8codepoint(p, &cp); while (cp != 0) { const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); const size_t size = utf8codepointsize(lwr_cp); if (lwr_cp != cp) { utf8catcodepoint(p, lwr_cp, size); } p = pn; pn = utf8codepoint(p, &cp); } } void utf8upr1(void *utf8_restrict str) { void *p, *pn; utf8_int32_t cp; p = (char *)str; pn = utf8codepoint(p, &cp); if (cp != 0) { const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); const size_t size = utf8codepointsize(lwr_cp); if (lwr_cp != cp) { utf8catcodepoint(p, lwr_cp, size); } p = pn; pn = utf8codepoint(p, &cp); } } utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) { if (((0x0041 <= cp) && (0x005a >= cp)) || ((0x00c0 <= cp) && (0x00d6 >= cp)) || ((0x00d8 <= cp) && (0x00de >= cp)) || ((0x0391 <= cp) && (0x03a1 >= cp)) || ((0x03a3 <= cp) && (0x03ab >= cp))) { cp += 32; } else if (((0x0100 <= cp) && (0x012f >= cp)) || ((0x0132 <= cp) && (0x0137 >= cp)) || ((0x014a <= cp) && (0x0177 >= cp)) || ((0x0182 <= cp) && (0x0185 >= cp)) || ((0x01a0 <= cp) && (0x01a5 >= cp)) || ((0x01de <= cp) && (0x01ef >= cp)) || ((0x01f8 <= cp) && (0x021f >= cp)) || ((0x0222 <= cp) && (0x0233 >= cp)) || ((0x0246 <= cp) && (0x024f >= cp)) || ((0x03d8 <= cp) && (0x03ef >= cp))) { cp |= 0x1; } else if (((0x0139 <= cp) && (0x0148 >= cp)) || ((0x0179 <= cp) && (0x017e >= cp)) || ((0x01af <= cp) && (0x01b0 >= cp)) || ((0x01b3 <= cp) && (0x01b6 >= cp)) || ((0x01cd <= cp) && (0x01dc >= cp))) { cp += 1; cp &= ~0x1; } else { switch (cp) { default: break; case 0x0178: cp = 0x00ff; break; case 0x0243: cp = 0x0180; break; case 0x018e: cp = 0x01dd; break; case 0x023d: cp = 0x019a; break; case 0x0220: cp = 0x019e; break; case 0x01b7: cp = 0x0292; break; case 0x01c4: cp = 0x01c6; break; case 0x01c7: cp = 0x01c9; break; case 0x01ca: cp = 0x01cc; break; case 0x01f1: cp = 0x01f3; break; case 0x01f7: cp = 0x01bf; break; case 0x0187: cp = 0x0188; break; case 0x018b: cp = 0x018c; break; case 0x0191: cp = 0x0192; break; case 0x0198: cp = 0x0199; break; case 0x01a7: cp = 0x01a8; break; case 0x01ac: cp = 0x01ad; break; case 0x01af: cp = 0x01b0; break; case 0x01b8: cp = 0x01b9; break; case 0x01bc: cp = 0x01bd; break; case 0x01f4: cp = 0x01f5; break; case 0x023b: cp = 0x023c; break; case 0x0241: cp = 0x0242; break; case 0x03fd: cp = 0x037b; break; case 0x03fe: cp = 0x037c; break; case 0x03ff: cp = 0x037d; break; case 0x037f: cp = 0x03f3; break; case 0x0386: cp = 0x03ac; break; case 0x0388: cp = 0x03ad; break; case 0x0389: cp = 0x03ae; break; case 0x038a: cp = 0x03af; break; case 0x038c: cp = 0x03cc; break; case 0x038e: cp = 0x03cd; break; case 0x038f: cp = 0x03ce; break; case 0x0370: cp = 0x0371; break; case 0x0372: cp = 0x0373; break; case 0x0376: cp = 0x0377; break; case 0x03f4: cp = 0x03d1; break; case 0x03cf: cp = 0x03d7; break; case 0x03f9: cp = 0x03f2; break; case 0x03f7: cp = 0x03f8; break; case 0x03fa: cp = 0x03fb; break; }; } return cp; } utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) { if (((0x0061 <= cp) && (0x007a >= cp)) || ((0x00e0 <= cp) && (0x00f6 >= cp)) || ((0x00f8 <= cp) && (0x00fe >= cp)) || ((0x03b1 <= cp) && (0x03c1 >= cp)) || ((0x03c3 <= cp) && (0x03cb >= cp))) { cp -= 32; } else if (((0x0100 <= cp) && (0x012f >= cp)) || ((0x0132 <= cp) && (0x0137 >= cp)) || ((0x014a <= cp) && (0x0177 >= cp)) || ((0x0182 <= cp) && (0x0185 >= cp)) || ((0x01a0 <= cp) && (0x01a5 >= cp)) || ((0x01de <= cp) && (0x01ef >= cp)) || ((0x01f8 <= cp) && (0x021f >= cp)) || ((0x0222 <= cp) && (0x0233 >= cp)) || ((0x0246 <= cp) && (0x024f >= cp)) || ((0x03d8 <= cp) && (0x03ef >= cp))) { cp &= ~0x1; } else if (((0x0139 <= cp) && (0x0148 >= cp)) || ((0x0179 <= cp) && (0x017e >= cp)) || ((0x01af <= cp) && (0x01b0 >= cp)) || ((0x01b3 <= cp) && (0x01b6 >= cp)) || ((0x01cd <= cp) && (0x01dc >= cp))) { cp -= 1; cp |= 0x1; } else { switch (cp) { default: break; case 0x00ff: cp = 0x0178; break; case 0x0180: cp = 0x0243; break; case 0x01dd: cp = 0x018e; break; case 0x019a: cp = 0x023d; break; case 0x019e: cp = 0x0220; break; case 0x0292: cp = 0x01b7; break; case 0x01c6: cp = 0x01c4; break; case 0x01c9: cp = 0x01c7; break; case 0x01cc: cp = 0x01ca; break; case 0x01f3: cp = 0x01f1; break; case 0x01bf: cp = 0x01f7; break; case 0x0188: cp = 0x0187; break; case 0x018c: cp = 0x018b; break; case 0x0192: cp = 0x0191; break; case 0x0199: cp = 0x0198; break; case 0x01a8: cp = 0x01a7; break; case 0x01ad: cp = 0x01ac; break; case 0x01b0: cp = 0x01af; break; case 0x01b9: cp = 0x01b8; break; case 0x01bd: cp = 0x01bc; break; case 0x01f5: cp = 0x01f4; break; case 0x023c: cp = 0x023b; break; case 0x0242: cp = 0x0241; break; case 0x037b: cp = 0x03fd; break; case 0x037c: cp = 0x03fe; break; case 0x037d: cp = 0x03ff; break; case 0x03f3: cp = 0x037f; break; case 0x03ac: cp = 0x0386; break; case 0x03ad: cp = 0x0388; break; case 0x03ae: cp = 0x0389; break; case 0x03af: cp = 0x038a; break; case 0x03cc: cp = 0x038c; break; case 0x03cd: cp = 0x038e; break; case 0x03ce: cp = 0x038f; break; case 0x0371: cp = 0x0370; break; case 0x0373: cp = 0x0372; break; case 0x0377: cp = 0x0376; break; case 0x03d1: cp = 0x03f4; break; case 0x03d7: cp = 0x03cf; break; case 0x03f2: cp = 0x03f9; break; case 0x03f8: cp = 0x03f7; break; case 0x03fb: cp = 0x03fa; break; }; } return cp; } #undef utf8_restrict #undef utf8_null #ifdef __cplusplus } // extern "C" #endif #if defined(__clang__) #pragma clang diagnostic pop #endif #endif // SHEREDOM_UTF8_H_INCLUDED miller-5.6.2/c/mapping/000077500000000000000000000000001354153536500146775ustar00rootroot00000000000000miller-5.6.2/c/mapping/Makefile.am000066400000000000000000000031711354153536500167350ustar00rootroot00000000000000noinst_LTLIBRARIES= libmapping.la libmapping_la_SOURCES= \ mapper.h \ mapper_altkv.c \ mapper_bar.c \ mapper_bootstrap.c \ mapper_cat.c \ mapper_check.c \ mapper_clean_whitespace.c \ mapper_count_similar.c \ mapper_cut.c \ mapper_decimate.c \ mapper_fill_down.c \ mapper_grep.c \ mapper_group_like.c \ mapper_having_fields.c \ mapper_head.c \ mapper_histogram.c \ mapper_join.c \ mapper_label.c \ mapper_merge_fields.c \ mapper_most_or_least_frequent.c \ mapper_nest.c \ mapper_nothing.c \ mapper_format_values.c \ mapper_fraction.c \ mapper_put_or_filter.c \ mapper_regularize.c \ mapper_remove_empty_columns.c \ mapper_rename.c \ mapper_reorder.c \ mapper_repeat.c \ mapper_reshape.c \ mapper_sample.c \ mapper_sec2gmt.c \ mapper_sec2gmtdate.c \ mapper_seqgen.c \ mapper_shuffle.c \ mapper_skip_trivial_records.c \ mapper_sort.c \ mapper_sort_within_records.c \ mapper_stats1.c \ mapper_stats2.c \ mapper_step.c \ mapper_tac.c \ mapper_tail.c \ mapper_tee.c \ mapper_top.c \ mapper_uniq.c \ mapper_unsparsify.c \ mappers.c \ mappers.h \ stats1_accumulators.c \ stats1_accumulators.h libmapping_la_LIBADD= ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la # TODO: replace the interesting content with unit tests; jettison the rest # TODO: Does not build #noinst_PROGRAMS= evl #evl_SOURCES= rval_evaluators.c #evl_LDADD= libmapping.la ../containers/libcontainers.la ../lib/libmlr.la #evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 miller-5.6.2/c/mapping/Makefile.in000066400000000000000000000567041354153536500167600ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/mapping ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmapping_la_DEPENDENCIES = ../lib/libmlr.la ../cli/libcli.la \ ../input/libinput.la am_libmapping_la_OBJECTS = mapper_altkv.lo mapper_bar.lo \ mapper_bootstrap.lo mapper_cat.lo mapper_check.lo \ mapper_clean_whitespace.lo mapper_count_similar.lo \ mapper_cut.lo mapper_decimate.lo mapper_fill_down.lo \ mapper_grep.lo mapper_group_like.lo mapper_having_fields.lo \ mapper_head.lo mapper_histogram.lo mapper_join.lo \ mapper_label.lo mapper_merge_fields.lo \ mapper_most_or_least_frequent.lo mapper_nest.lo \ mapper_nothing.lo mapper_format_values.lo mapper_fraction.lo \ mapper_put_or_filter.lo mapper_regularize.lo \ mapper_remove_empty_columns.lo mapper_rename.lo \ mapper_reorder.lo mapper_repeat.lo mapper_reshape.lo \ mapper_sample.lo mapper_sec2gmt.lo mapper_sec2gmtdate.lo \ mapper_seqgen.lo mapper_shuffle.lo \ mapper_skip_trivial_records.lo mapper_sort.lo \ mapper_sort_within_records.lo mapper_stats1.lo \ mapper_stats2.lo mapper_step.lo mapper_tac.lo mapper_tail.lo \ mapper_tee.lo mapper_top.lo mapper_uniq.lo \ mapper_unsparsify.lo mappers.lo stats1_accumulators.lo libmapping_la_OBJECTS = $(am_libmapping_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmapping_la_SOURCES) DIST_SOURCES = $(libmapping_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libmapping.la libmapping_la_SOURCES = \ mapper.h \ mapper_altkv.c \ mapper_bar.c \ mapper_bootstrap.c \ mapper_cat.c \ mapper_check.c \ mapper_clean_whitespace.c \ mapper_count_similar.c \ mapper_cut.c \ mapper_decimate.c \ mapper_fill_down.c \ mapper_grep.c \ mapper_group_like.c \ mapper_having_fields.c \ mapper_head.c \ mapper_histogram.c \ mapper_join.c \ mapper_label.c \ mapper_merge_fields.c \ mapper_most_or_least_frequent.c \ mapper_nest.c \ mapper_nothing.c \ mapper_format_values.c \ mapper_fraction.c \ mapper_put_or_filter.c \ mapper_regularize.c \ mapper_remove_empty_columns.c \ mapper_rename.c \ mapper_reorder.c \ mapper_repeat.c \ mapper_reshape.c \ mapper_sample.c \ mapper_sec2gmt.c \ mapper_sec2gmtdate.c \ mapper_seqgen.c \ mapper_shuffle.c \ mapper_skip_trivial_records.c \ mapper_sort.c \ mapper_sort_within_records.c \ mapper_stats1.c \ mapper_stats2.c \ mapper_step.c \ mapper_tac.c \ mapper_tail.c \ mapper_tee.c \ mapper_top.c \ mapper_uniq.c \ mapper_unsparsify.c \ mappers.c \ mappers.h \ stats1_accumulators.c \ stats1_accumulators.h libmapping_la_LIBADD = ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la # TODO: replace the interesting content with unit tests; jettison the rest # TODO: Does not build #noinst_PROGRAMS= evl #evl_SOURCES= rval_evaluators.c #evl_LDADD= libmapping.la ../containers/libcontainers.la ../lib/libmlr.la #evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} AM_CPPFLAGS = -I${srcdir}/../ AM_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/mapping/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/mapping/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmapping.la: $(libmapping_la_OBJECTS) $(libmapping_la_DEPENDENCIES) $(EXTRA_libmapping_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmapping_la_OBJECTS) $(libmapping_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_altkv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_bar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_bootstrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_cat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_check.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_clean_whitespace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_count_similar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_cut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_decimate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_fill_down.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_format_values.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_fraction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_grep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_group_like.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_having_fields.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_head.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_histogram.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_join.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_label.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_merge_fields.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_most_or_least_frequent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_nest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_nothing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_put_or_filter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_regularize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_remove_empty_columns.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_rename.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_reorder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_repeat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_reshape.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sample.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sec2gmt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sec2gmtdate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_seqgen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_shuffle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_skip_trivial_records.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sort.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sort_within_records.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_stats1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_stats2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_step.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_tac.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_tail.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_tee.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_top.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_uniq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_unsparsify.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mappers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stats1_accumulators.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/mapping/README.md000066400000000000000000000003001354153536500161470ustar00rootroot00000000000000# Miller data transforms These are straightforward implementations for most mappers other than `put` and `filter`. See also the memory-management section of the parent directory's README.md. miller-5.6.2/c/mapping/mapper.h000066400000000000000000000024421354153536500163360ustar00rootroot00000000000000#ifndef MAPPER_H #define MAPPER_H #include #include "lib/context.h" #include "cli/mlrcli.h" #include "containers/lrec.h" #include "containers/sllv.h" // See ../README.md for memory-management conventions. // ---------------------------------------------------------------- // Data plane: struct _mapper_t; // forward reference for method declarations // Returns linked list of records (lrec_t*). typedef sllv_t* mapper_process_func_t(lrec_t* pinrec, context_t* pctx, void* pvstate); typedef void mapper_free_func_t(struct _mapper_t* pmapper, context_t* pctx); typedef struct _mapper_t { void* pvstate; mapper_process_func_t* pprocess_func; mapper_free_func_t* pfree_func; // virtual destructor } mapper_t; // ---------------------------------------------------------------- // Control plane: typedef void mapper_usage_func_t(FILE* o, char* argv0, char* verb); typedef mapper_t* mapper_parse_cli_func_t(int* pargi, int argc, char** argv, cli_reader_opts_t* pmain_reader_opts, cli_writer_opts_t* pmain_writer_opts); typedef struct _mapper_setup_t { char* verb; mapper_usage_func_t* pusage_func; mapper_parse_cli_func_t* pparse_func; int ignores_input; // most don't; data-generators like seqgen do } mapper_setup_t; #endif // MAPPER_H miller-5.6.2/c/mapping/mapper_altkv.c000066400000000000000000000062601354153536500175340ustar00rootroot00000000000000#include #include "cli/argparse.h" #include "lib/mlrutil.h" #include "lib/mtrand.h" #include "containers/sllv.h" #include "mapping/mappers.h" typedef struct _mapper_altkv_state_t { ap_state_t* pargp; } mapper_altkv_state_t; static void mapper_altkv_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_altkv_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_altkv_alloc(ap_state_t* pargp); static void mapper_altkv_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_altkv_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_altkv_setup = { .verb = "altkv", .pusage_func = mapper_altkv_usage, .pparse_func = mapper_altkv_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_altkv_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [no options]\n", argv0, verb); fprintf(o, "Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs.\n"); } static mapper_t* mapper_altkv_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_altkv_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pstate = ap_alloc(); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_altkv_usage(stderr, argv[0], verb); return NULL; } mapper_t* pmapper = mapper_altkv_alloc(pstate); return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_altkv_alloc(ap_state_t* pargp) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_altkv_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_altkv_state_t)); pstate->pargp = pargp; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_altkv_process; pmapper->pfree_func = mapper_altkv_free; return pmapper; } static void mapper_altkv_free(mapper_t* pmapper, context_t* _) { mapper_altkv_state_t* pstate = pmapper->pvstate; // Free the container ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_altkv_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) { // End of input stream: emit null. return sllv_single(NULL); } lrec_t* poutrec = lrec_unbacked_alloc(); int output_field_number = 1; for (lrece_t* pe = pinrec->phead; pe != NULL; /* increment in loop */) { if (pe->pnext == NULL) { // Odd-numbered field count char* key = mlr_alloc_string_from_int(output_field_number); char* value = mlr_strdup_or_die(pe->value); lrec_put(poutrec, key, value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } else { char* key = mlr_strdup_or_die(pe->value); char* value = mlr_strdup_or_die(pe->pnext->value); lrec_put(poutrec, key, value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } output_field_number++; pe = pe->pnext; if (pe == NULL) {// Odd-numbered field count break; } pe = pe->pnext; } return sllv_single(poutrec); } miller-5.6.2/c/mapping/mapper_bar.c000066400000000000000000000222231354153536500171540ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/string_builder.h" #include "containers/lrec.h" #include "lib/string_array.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_bar_state_t { ap_state_t* pargp; string_array_t* pfield_names; char fill_char; char oob_char; char blank_char; double lo; double hi; int width; char** bars; sllv_t* precords; // only for auto mode } mapper_bar_state_t; static void mapper_bar_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_bar_alloc(ap_state_t* pargp, string_array_t* pfield_names, char fill_char, char oob_char, char blank_char, double lo, double hi, int width, int do_auto); static void mapper_bar_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_bar_process_no_auto(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_bar_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate); #define DEFAULT_FILL_CHAR '*' #define DEFAULT_OOB_CHAR '#' #define DEFAULT_BLANK_CHAR '.' #define DEFAULT_LO 0.0 #define DEFAULT_HI 100.0 #define DEFAULT_WIDTH 40 #define SB_ALLOC_LENGTH 128 // ---------------------------------------------------------------- mapper_setup_t mapper_bar_setup = { .verb = "bar", .pusage_func = mapper_bar_usage, .pparse_func = mapper_bar_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_bar_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Replaces a numeric field with a number of asterisks, allowing for cheesy\n"); fprintf(o, "bar plots. These align best with --opprint or --oxtab output format.\n"); fprintf(o, "Options:\n"); fprintf(o, "-f {a,b,c} Field names to convert to bars.\n"); fprintf(o, "-c {character} Fill character: default '%c'.\n", DEFAULT_FILL_CHAR); fprintf(o, "-x {character} Out-of-bounds character: default '%c'.\n", DEFAULT_OOB_CHAR); fprintf(o, "-b {character} Blank character: default '%c'.\n", DEFAULT_BLANK_CHAR); fprintf(o, "--lo {lo} Lower-limit value for min-width bar: default '%lf'.\n", DEFAULT_LO); fprintf(o, "--hi {hi} Upper-limit value for max-width bar: default '%lf'.\n", DEFAULT_HI); fprintf(o, "-w {n} Bar-field width: default '%d'.\n", DEFAULT_WIDTH); fprintf(o, "--auto Automatically computes limits, ignoring --lo and --hi.\n"); fprintf(o, " Holds all records in memory before producing any output.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { string_array_t* pfield_names = NULL; char* fill_string = NULL; char* oob_string = NULL; char* blank_string = NULL; double lo = DEFAULT_LO; double hi = DEFAULT_HI; int width = DEFAULT_WIDTH; int do_auto = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_array_flag(pstate, "-f", &pfield_names); ap_define_string_flag(pstate, "-c", &fill_string); ap_define_string_flag(pstate, "-x", &oob_string); ap_define_string_flag(pstate, "-b", &blank_string); ap_define_float_flag(pstate, "--lo", &lo); ap_define_float_flag(pstate, "--hi", &hi); ap_define_int_flag(pstate, "-w", &width); ap_define_true_flag(pstate, "--auto", &do_auto); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_bar_usage(stderr, argv[0], verb); return NULL; } if (pfield_names == NULL) { mapper_bar_usage(stderr, argv[0], verb); return NULL; } char fill_char = DEFAULT_FILL_CHAR; char oob_char = DEFAULT_OOB_CHAR; char blank_char = DEFAULT_BLANK_CHAR; if (fill_string != NULL) { if (strlen(fill_string) != 1) { mapper_bar_usage(stderr, argv[0], verb); return NULL; } fill_char = fill_string[0]; } if (oob_string != NULL) { if (strlen(oob_string) != 1) { mapper_bar_usage(stderr, argv[0], verb); return NULL; } oob_char = oob_string[0]; } if (blank_string != NULL) { if (strlen(blank_string) != 1) { mapper_bar_usage(stderr, argv[0], verb); return NULL; } blank_char = blank_string[0]; } return mapper_bar_alloc(pstate, pfield_names, fill_char, oob_char, blank_char, lo, hi, width, do_auto); } // ---------------------------------------------------------------- static mapper_t* mapper_bar_alloc(ap_state_t* pargp, string_array_t* pfield_names, char fill_char, char oob_char, char blank_char, double lo, double hi, int width, int do_auto) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_bar_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_bar_state_t)); pstate->pargp = pargp; pstate->pfield_names = pfield_names; pstate->fill_char = fill_char; pstate->oob_char = oob_char; pstate->blank_char = blank_char; pstate->lo = lo; pstate->hi = hi; pstate->width = width; pstate->bars = mlr_malloc_or_die((pstate->width + 1) * sizeof(char*)); for (int i = 0; i <= pstate->width; i++) { pstate->bars[i] = mlr_malloc_or_die(pstate->width + 1); char* bar = pstate->bars[i]; memset(bar, pstate->blank_char, pstate->width); bar[pstate->width] = 0; if (i == 0) { bar[0] = pstate->oob_char; } else if (i < pstate->width) { memset(bar, pstate->fill_char, i); } else { memset(bar, pstate->fill_char, pstate->width); bar[pstate->width-1] = pstate->oob_char; } pstate->bars[i] = bar; } pstate->precords = do_auto ? sllv_alloc() : NULL; pmapper->pprocess_func = do_auto ? mapper_bar_process_auto : mapper_bar_process_no_auto; pmapper->pvstate = (void*)pstate; pmapper->pfree_func = mapper_bar_free; return pmapper; } static void mapper_bar_free(mapper_t* pmapper, context_t* _) { mapper_bar_state_t* pstate = (mapper_bar_state_t*)pmapper->pvstate; string_array_free(pstate->pfield_names); for (int i = 0; i <= pstate->width; i++) free(pstate->bars[i]); free(pstate->bars); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_bar_process_no_auto(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of stream return sllv_single(NULL); mapper_bar_state_t* pstate = (mapper_bar_state_t*)pvstate; int n = pstate->pfield_names->length; for (int i = 0; i < n; i++) { char* name = pstate->pfield_names->strings[i]; char* sval = lrec_get(pinrec, name); if (sval == NULL) continue; double dval = mlr_double_from_string_or_die(sval); int idx = (int)(pstate->width * (dval - pstate->lo) / (pstate->hi - pstate->lo)); if (idx < 0) idx = 0; if (idx > pstate->width) idx = pstate->width; lrec_put(pinrec, name, pstate->bars[idx], NO_FREE); } return sllv_single(pinrec); } // ---------------------------------------------------------------- static sllv_t* mapper_bar_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_bar_state_t* pstate = (mapper_bar_state_t*)pvstate; if (pinrec != NULL) { // not end of stream sllv_append(pstate->precords, pinrec); return NULL; } // end of stream int n = pstate->pfield_names->length; string_builder_t* psb = sb_alloc(SB_ALLOC_LENGTH); // Loop over field names to be barred for (int i = 0; i < n; i++) { char* name = pstate->pfield_names->strings[i]; double lo = 0.0; double hi = 0.0; // First pass computes lo and hi from the data int j = 0; for (sllve_t* pe = pstate->precords->phead; pe != NULL; pe = pe->pnext, j++) { lrec_t* prec = pe->pvvalue; char* sval = lrec_get(prec, name); if (sval == NULL) continue; double dval = mlr_double_from_string_or_die(sval); if (j == 0 || dval < lo) lo = dval; if (j == 0 || dval > hi) hi = dval; } // Second pass applies the bars. There is some redundant computation // which could be hoisted out of the loop for performance ... but this // verb computes data solely for visual inspection and I take the // nominal use case to be tens or hundreds of records. So, optimization // isn't worth the effort here. char* slo = mlr_alloc_string_from_double(lo, "%g"); char* shi = mlr_alloc_string_from_double(hi, "%g"); for (sllve_t* pe = pstate->precords->phead; pe != NULL; pe = pe->pnext) { lrec_t* prec = pe->pvvalue; char* sval = lrec_get(prec, name); if (sval == NULL) continue; double dval = mlr_double_from_string_or_die(sval); int idx = (int)(pstate->width * (dval - lo) / (hi - lo)); if (idx < 0) idx = 0; if (idx > pstate->width) idx = pstate->width; sb_append_string(psb, "["); sb_append_string(psb, slo); sb_append_string(psb, "]"); sb_append_string(psb, pstate->bars[idx]); sb_append_string(psb, "["); sb_append_string(psb, shi); sb_append_string(psb, "]"); lrec_put(prec, name, sb_finish(psb), FREE_ENTRY_VALUE); } free(slo); free(shi); } sb_free(psb); sllv_append(pstate->precords, NULL); return pstate->precords; } miller-5.6.2/c/mapping/mapper_bootstrap.c000066400000000000000000000126111354153536500204250ustar00rootroot00000000000000#include #include "cli/argparse.h" #include "lib/mlrutil.h" #include "lib/mtrand.h" #include "containers/sllv.h" #include "mapping/mappers.h" #define NOUT_EQUALS_NIN -1 typedef struct _mapper_bootstrap_state_t { ap_state_t* pargp; int nout; sllv_t* records; } mapper_bootstrap_state_t; static void mapper_bootstrap_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_bootstrap_alloc(int nout, ap_state_t* pargp); static void mapper_bootstrap_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_bootstrap_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_bootstrap_setup = { .verb = "bootstrap", .pusage_func = mapper_bootstrap_usage, .pparse_func = mapper_bootstrap_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_bootstrap_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Emits an n-sample, with replacement, of the input records.\n"); fprintf(o, "Options:\n"); fprintf(o, "-n {number} Number of samples to output. Defaults to number of input records.\n"); fprintf(o, " Must be non-negative.\n"); fprintf(o, "See also %s sample and %s shuffle.\n", argv0, argv0); } static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int nout = NOUT_EQUALS_NIN; if ((argc - *pargi) < 1) { mapper_bootstrap_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pstate = ap_alloc(); ap_define_int_flag(pstate, "-n", &nout); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_bootstrap_usage(stderr, argv[0], verb); return NULL; } if (nout != NOUT_EQUALS_NIN && nout < 0) { mapper_bootstrap_usage(stderr, argv[0], verb); return NULL; } mapper_t* pmapper = mapper_bootstrap_alloc(nout, pstate); return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_bootstrap_alloc(int nout, ap_state_t* pargp) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_bootstrap_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_bootstrap_state_t)); pstate->nout = nout; pstate->pargp = pargp; pstate->records = sllv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_bootstrap_process; pmapper->pfree_func = mapper_bootstrap_free; return pmapper; } static void mapper_bootstrap_free(mapper_t* pmapper, context_t* _) { mapper_bootstrap_state_t* pstate = pmapper->pvstate; // Free the container sllv_free(pstate->records); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_bootstrap_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_bootstrap_state_t* pstate = pvstate; if (pinrec != NULL) { // Not end of input stream: consume an input record. // The caller will free the outrecs sllv_append(pstate->records, pinrec); return NULL; } // This is entirely straightforward except for memory management. The // Miller contract to respect is that each routine frees records or passes // them on. This means lrec-writers will free lrecs they receive, after // writing them. This also means we must free lrecs we don't pass on. // // Given nin input records, we produce nout output records, but sampling with replacement. // The memory-management criteria above mean: // * If an input lrec is not output at all, we must free it. // * If an input lrec is output once, we pass it on through and let the write free it. // * If an input lrec is output more than once, it would get double-freed (which is not OK) // so for all repetitions past the first we must make a copy. // A used_flags[] array allows us to handle all of this. sllv_t* poutrecs = sllv_alloc(); int nin = pstate->records->length; int nout = (pstate->nout == NOUT_EQUALS_NIN) ? nin : pstate->nout; if (nin == 0) { sllv_append(poutrecs, NULL); return poutrecs; } // Make an array of pointers into the input list. Mark each lrec as not yet output. lrec_t** record_array = mlr_malloc_or_die(nin * sizeof(lrec_t**)); char* used_flags = mlr_malloc_or_die(nin * sizeof(char)); sllve_t* pe = pstate->records->phead; for (int i = 0; i < nin; i++, pe = pe->pnext) { record_array[i] = pe->pvvalue; used_flags[i] = FALSE; } // Do the sample-with-replacment, reading from random indices in the input // array and appending to the output list. for (int i = 0; i < nout; i++) { int index = nin * get_mtrand_double(); if (index >= nin) index = nin - 1; lrec_t* prec = record_array[index]; if (used_flags[index]) { // Copy for repeated output. prec = lrec_copy(prec); } else { // First output of this record; remember it. used_flags[index] = TRUE; } sllv_append(poutrecs, prec); } // Free non-output records pe = pstate->records->phead; for (int i = 0; i < nin; i++, pe = pe->pnext) if (!used_flags[i]) lrec_free(record_array[i]); free(used_flags); // Free the temp array free(record_array); // Null-terminate the output list to signify end of stream. sllv_append(poutrecs, NULL); return poutrecs; } miller-5.6.2/c/mapping/mapper_cat.c000066400000000000000000000151471354153536500171660ustar00rootroot00000000000000#include "cli/argparse.h" #include "mapping/mappers.h" #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" typedef struct _mapper_cat_state_t { ap_state_t* pargp; int verbose; char* counter_field_name; unsigned long long counter; slls_t* pgroup_by_field_names; lhmslv_t* pcounters_by_group; } mapper_cat_state_t; #define DEFAULT_COUNTER_FIELD_NAME "n" static void mapper_cat_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_cat_alloc(ap_state_t* pargp, int do_counters, int verbose, char* counter_field_name, slls_t* pgroup_by_field_names); static void mapper_cat_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_cat_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_catn_process_ungrouped(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_catn_process_grouped(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_cat_setup = { .verb = "cat", .pusage_func = mapper_cat_usage, .pparse_func = mapper_cat_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { char* default_counter_field_name = DEFAULT_COUNTER_FIELD_NAME; char* counter_field_name = NULL; int do_counters = FALSE; int verbose = FALSE; slls_t* pgroup_by_field_names = slls_alloc(); if ((argc - *pargi) < 1) { mapper_cat_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-n", &do_counters); ap_define_true_flag(pstate, "-v", &verbose); ap_define_string_flag(pstate, "-N", &counter_field_name); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_cat_usage(stderr, argv[0], verb); return NULL; } if (counter_field_name != NULL) { do_counters = TRUE; } else if (do_counters) { counter_field_name = default_counter_field_name; } mapper_t* pmapper = mapper_cat_alloc(pstate, do_counters, verbose, counter_field_name, pgroup_by_field_names); return pmapper; } static void mapper_cat_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Passes input records directly to output. Most useful for format conversion.\n"); fprintf(o, "Options:\n"); fprintf(o, "-n Prepend field \"%s\" to each record with record-counter starting at 1\n", DEFAULT_COUNTER_FIELD_NAME); fprintf(o, "-g {comma-separated field name(s)} When used with -n/-N, writes record-counters\n"); fprintf(o, " keyed by specified field name(s).\n"); fprintf(o, "-v Write a low-level record-structure dump to stderr.\n"); fprintf(o, "-N {name} Prepend field {name} to each record with record-counter starting at 1\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_cat_alloc(ap_state_t* pargp, int do_counters, int verbose, char* counter_field_name, slls_t* pgroup_by_field_names) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_cat_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_cat_state_t)); pstate->pargp = pargp; pstate->verbose = verbose; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->counter_field_name = counter_field_name; pstate->counter = 0LL; pstate->pcounters_by_group = lhmslv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = NULL; if (do_counters) { if (pgroup_by_field_names->length == 0) { pmapper->pprocess_func = mapper_catn_process_ungrouped; } else { pmapper->pprocess_func = mapper_catn_process_grouped; } } else { pmapper->pprocess_func = mapper_cat_process; } pmapper->pfree_func = mapper_cat_free; return pmapper; } static void mapper_cat_free(mapper_t* pmapper, context_t* _) { mapper_cat_state_t* pstate = pmapper->pvstate; slls_free(pstate->pgroup_by_field_names); for (lhmslve_t* pe = pstate->pcounters_by_group->phead; pe != NULL; pe = pe->pnext) { free(pe->pvvalue); } lhmslv_free(pstate->pcounters_by_group); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_cat_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_cat_state_t* pstate = (mapper_cat_state_t*)pvstate; if (pstate->verbose) { lrec_dump_fp(pinrec, stderr); } if (pinrec != NULL) return sllv_single(pinrec); else return sllv_single(NULL); } // ---------------------------------------------------------------- static sllv_t* mapper_catn_process_ungrouped(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_cat_state_t* pstate = (mapper_cat_state_t*)pvstate; if (pstate->verbose) { lrec_dump_fp(pinrec, stderr); } if (pinrec != NULL) { char* counter_field_value = mlr_alloc_string_from_ull(++pstate->counter); lrec_prepend(pinrec, pstate->counter_field_name, counter_field_value, FREE_ENTRY_VALUE); return sllv_single(pinrec); } else { return sllv_single(NULL); } } // ---------------------------------------------------------------- static sllv_t* mapper_catn_process_grouped(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_cat_state_t* pstate = (mapper_cat_state_t*)pvstate; if (pstate->verbose) { lrec_dump_fp(pinrec, stderr); } if (pinrec != NULL) { unsigned long long counter = 0LL; slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { // Treat as unkeyed counter = ++pstate->counter; } else { unsigned long long* pcount_for_group = lhmslv_get(pstate->pcounters_by_group, pgroup_by_field_values); if (pcount_for_group == NULL) { pcount_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount_for_group = 0LL; lhmslv_put(pstate->pcounters_by_group, slls_copy(pgroup_by_field_values), pcount_for_group, FREE_ENTRY_KEY); } slls_free(pgroup_by_field_values); (*pcount_for_group)++; counter = *pcount_for_group; } char* counter_field_value = mlr_alloc_string_from_ull(counter); lrec_prepend(pinrec, pstate->counter_field_name, counter_field_value, FREE_ENTRY_VALUE); return sllv_single(pinrec); } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_check.c000066400000000000000000000036021354153536500174650ustar00rootroot00000000000000#include "mapping/mappers.h" #include "lib/mlrutil.h" #include "containers/sllv.h" static void mapper_check_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_check_alloc(); static void mapper_check_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_check_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_check_setup = { .verb = "check", .pusage_func = mapper_check_usage, .pparse_func = mapper_check_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_check_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s\n", argv0, verb); fprintf(o, "Consumes records without printing any output.\n"); fprintf(o, "Useful for doing a well-formatted check on input data.\n"); } static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_check_usage(stderr, argv[0], argv[*pargi]); return NULL; } mapper_t* pmapper = mapper_check_alloc(); *pargi += 1; return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_check_alloc() { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); pmapper->pvstate = NULL; pmapper->pprocess_func = mapper_check_process; pmapper->pfree_func = mapper_check_free; return pmapper; } static void mapper_check_free(mapper_t* pmapper, context_t* _) { free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_check_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { lrec_free(pinrec); return sllv_single(NULL); } miller-5.6.2/c/mapping/mapper_clean_whitespace.c000066400000000000000000000144241354153536500217120ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mvfuncs.h" #include "containers/sllv.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define RENAME_SB_ALLOC_LENGTH 16 typedef struct _mapper_clean_whitespace_state_t { ap_state_t* pargp; int do_keys; int do_values; } mapper_clean_whitespace_state_t; static void mapper_clean_whitespace_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_clean_whitespace_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_clean_whitespace_alloc(ap_state_t* pargp, int do_keys, int do_values); static void mapper_clean_whitespace_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_clean_whitespace_kvprocess(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_clean_whitespace_kprocess(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_clean_whitespace_vprocess(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_clean_whitespace_setup = { .verb = "clean-whitespace", .pusage_func = mapper_clean_whitespace_usage, .pparse_func = mapper_clean_whitespace_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_clean_whitespace_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {old1,new1,old2,new2,...}\n", argv0, verb); fprintf(o, "For each record, for each field in the record, whitespace-cleans the keys and\n"); fprintf(o, "values. Whitespace-cleaning entails stripping leading and trailing whitespace,\n"); fprintf(o, "and replacing multiple whitespace with singles. For finer-grained control,\n"); fprintf(o, "please see the DSL functions lstrip, rstrip, strip, collapse_whitespace,\n"); fprintf(o, "and clean_whitespace.\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "-k|--keys-only Do not touch values.\n"); fprintf(o, "-v|--values-only Do not touch keys.\n"); fprintf(o, "It is an error to specify -k as well as -v.\n"); } static mapper_t* mapper_clean_whitespace_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int kflag = FALSE; int vflag = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-k", &kflag); ap_define_true_flag(pstate, "--keys-only", &kflag); ap_define_true_flag(pstate, "-v", &vflag); ap_define_true_flag(pstate, "--values-only", &vflag); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_clean_whitespace_usage(stderr, argv[0], verb); return NULL; } int do_keys = TRUE; int do_values = TRUE; if (kflag && vflag) { mapper_clean_whitespace_usage(stderr, argv[0], verb); return NULL; } else if (kflag) { do_values = FALSE; } else if (vflag) { do_keys = FALSE; } return mapper_clean_whitespace_alloc(pstate, do_keys, do_values); } // ---------------------------------------------------------------- static mapper_t* mapper_clean_whitespace_alloc(ap_state_t* pargp, int do_keys, int do_values) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_clean_whitespace_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_clean_whitespace_state_t)); pstate->pargp = pargp; if (do_keys && do_values) { pmapper->pprocess_func = mapper_clean_whitespace_kvprocess; } else if (do_keys) { pmapper->pprocess_func = mapper_clean_whitespace_kprocess; } else if (do_values) { pmapper->pprocess_func = mapper_clean_whitespace_vprocess; } pmapper->pfree_func = mapper_clean_whitespace_free; pmapper->pvstate = (void*)pstate; return pmapper; } static void mapper_clean_whitespace_free(mapper_t* pmapper, context_t* _) { mapper_clean_whitespace_state_t* pstate = pmapper->pvstate; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_clean_whitespace_kvprocess(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { lrec_t* poutrec = lrec_unbacked_alloc(); for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { mv_t old_key = mv_from_string_with_free(mlr_strdup_or_die(pe->key)); mv_t old_value = mv_from_string_with_free(mlr_strdup_or_die(pe->value)); mv_t new_key = s_s_clean_whitespace_func(&old_key); mv_t new_value = s_s_clean_whitespace_func(&old_value); char free_flags = 0; if (new_key.free_flags & FREE_ENTRY_VALUE) free_flags |= FREE_ENTRY_KEY; if (new_value.free_flags & FREE_ENTRY_VALUE) free_flags |= FREE_ENTRY_VALUE; lrec_put(poutrec, new_key.u.strv, new_value.u.strv, free_flags); } lrec_free(pinrec); return sllv_single(poutrec); } else { return sllv_single(NULL); } } // ---------------------------------------------------------------- static sllv_t* mapper_clean_whitespace_kprocess(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { lrec_t* poutrec = lrec_unbacked_alloc(); for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { mv_t old_key = mv_from_string_with_free(mlr_strdup_or_die(pe->key)); mv_t value = mv_from_string_with_free(mlr_strdup_or_die(pe->value)); mv_t new_key = s_s_clean_whitespace_func(&old_key); char free_flags = FREE_ENTRY_VALUE; if (new_key.free_flags & FREE_ENTRY_VALUE) free_flags |= FREE_ENTRY_KEY; lrec_put(poutrec, new_key.u.strv, value.u.strv, free_flags); } lrec_free(pinrec); return sllv_single(poutrec); } else { return sllv_single(NULL); } } // ---------------------------------------------------------------- static sllv_t* mapper_clean_whitespace_vprocess(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { lrec_t* poutrec = lrec_unbacked_alloc(); for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { mv_t key = mv_from_string_with_free(mlr_strdup_or_die(pe->key)); mv_t old_value = mv_from_string_with_free(mlr_strdup_or_die(pe->value)); mv_t new_value = s_s_clean_whitespace_func(&old_value); char free_flags = FREE_ENTRY_KEY; if (new_value.free_flags & FREE_ENTRY_VALUE) free_flags |= FREE_ENTRY_VALUE; lrec_put(poutrec, key.u.strv, new_value.u.strv, free_flags); } lrec_free(pinrec); return sllv_single(poutrec); } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_count_similar.c000066400000000000000000000144001354153536500212560ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/lhmsll.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define DEFAULT_OUTPUT_FIELD_NAME "count" typedef struct _mapper_count_similar_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; lhmslv_t* pcounts_by_group; lhmslv_t* precord_lists_by_group; char* output_field_name; } mapper_count_similar_state_t; static void mapper_count_similar_usage( FILE* o, char* argv0, char* verb); static mapper_t* mapper_count_similar_parse_cli( int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_count_similar_alloc( ap_state_t* pargp, slls_t* pgroup_by_field_names, char* output_field_name); static void mapper_count_similar_free( mapper_t* pmapper, context_t* _); static sllv_t* mapper_count_similar_process( lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_count_similar_setup = { .verb = "count-similar", .pusage_func = mapper_count_similar_usage, .pparse_func = mapper_count_similar_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_count_similar_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Ingests all records, then emits each record augmented by a count of \n"); fprintf(o, "the number of other records having the same group-by field values.\n"); fprintf(o, "Options:\n"); fprintf(o, "-g {d,e,f} Group-by-field names for counts.\n"); fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); } static mapper_t* mapper_count_similar_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pgroup_by_field_names = NULL; char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_string_flag(pstate, "-o", &output_field_name); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_count_similar_usage(stderr, argv[0], verb); return NULL; } if (pgroup_by_field_names == NULL) { mapper_count_similar_usage(stderr, argv[0], verb); return NULL; } return mapper_count_similar_alloc(pstate, pgroup_by_field_names, output_field_name); } // ---------------------------------------------------------------- static mapper_t* mapper_count_similar_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, char* output_field_name) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_count_similar_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_count_similar_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->pcounts_by_group = lhmslv_alloc(); pstate->precord_lists_by_group = lhmslv_alloc(); pstate->output_field_name = output_field_name; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_count_similar_process; pmapper->pfree_func = mapper_count_similar_free; return pmapper; } static void mapper_count_similar_free(mapper_t* pmapper, context_t* _) { mapper_count_similar_state_t* pstate = pmapper->pvstate; slls_free(pstate->pgroup_by_field_names); // lhmslv_free will free the keys: we only need to free the void-star values. for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { unsigned long long* pcount = pa->pvvalue; free(pcount); } lhmslv_free(pstate->pcounts_by_group); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { sllv_t* precord_list_for_group = pa->pvvalue; // outrecs were freed by caller of mapper_tail_process. Here, just free // the sllv container itself. sllv_free(precord_list_for_group); } lhmslv_free(pstate->precord_lists_by_group); pstate->pgroup_by_field_names = NULL; pstate->pcounts_by_group = NULL; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_count_similar_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_count_similar_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { lrec_free(pinrec); return NULL; } unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount == NULL) { pcount = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount = 1LL; lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); } else { (*pcount)++; } sllv_t* precord_list_for_group = lhmslv_get(pstate->precord_lists_by_group, pgroup_by_field_values); if (precord_list_for_group == NULL) { precord_list_for_group = sllv_alloc(); lhmslv_put(pstate->precord_lists_by_group, slls_copy(pgroup_by_field_values), precord_list_for_group, FREE_ENTRY_KEY); } sllv_append(precord_list_for_group, pinrec); slls_free(pgroup_by_field_values); return NULL; } else { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pa->key); if (pcount == NULL) { fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } sllv_t* precord_list_for_group = pa->pvvalue; while (precord_list_for_group->phead != NULL) { lrec_t* poutrec = sllv_pop(precord_list_for_group); char* scount = mlr_alloc_string_from_ll(*pcount); lrec_put(poutrec, pstate->output_field_name, scount, FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } } sllv_append(poutrecs, NULL); return poutrecs; } } miller-5.6.2/c/mapping/mapper_cut.c000066400000000000000000000166301354153536500172100ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "containers/hss.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_cut_state_t { ap_state_t* pargp; slls_t* pfield_name_list; hss_t* pfield_name_set; regex_t* regexes; int nregex; int do_arg_order; int do_complement; } mapper_cut_state_t; static void mapper_cut_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_cut_alloc(ap_state_t* pargp, slls_t* pfield_name_list, int do_arg_order, int do_complement, int do_regexes); static void mapper_cut_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_cut_process_no_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_cut_process_with_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_cut_setup = { .verb = "cut", .pusage_func = mapper_cut_usage, .pparse_func = mapper_cut_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_cut_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Passes through input records with specified fields included/excluded.\n"); fprintf(o, "-f {a,b,c} Field names to include for cut.\n"); fprintf(o, "-o Retain fields in the order specified here in the argument list.\n"); fprintf(o, " Default is to retain them in the order found in the input data.\n"); fprintf(o, "-x|--complement Exclude, rather than include, field names specified by -f.\n"); fprintf(o, "-r Treat field names as regular expressions. \"ab\", \"a.*b\" will\n"); fprintf(o, " match any field name containing the substring \"ab\" or matching\n"); fprintf(o, " \"a.*b\", respectively; anchors of the form \"^ab$\", \"^a.*b$\" may\n"); fprintf(o, " be used. The -o flag is ignored when -r is present.\n"); fprintf(o, "Examples:\n"); fprintf(o, " %s %s -f hostname,status\n", argv0, verb); fprintf(o, " %s %s -x -f hostname,status\n", argv0, verb); fprintf(o, " %s %s -r -f '^status$,sda[0-9]'\n", argv0, verb); fprintf(o, " %s %s -r -f '^status$,\"sda[0-9]\"'\n", argv0, verb); fprintf(o, " %s %s -r -f '^status$,\"sda[0-9]\"i' (this is case-insensitive)\n", argv0, verb); } // ---------------------------------------------------------------- static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pfield_name_list = NULL; int do_arg_order = FALSE; int do_complement = FALSE; int do_regexes = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pfield_name_list); ap_define_true_flag(pstate, "-o", &do_arg_order); ap_define_true_flag(pstate, "-x", &do_complement); ap_define_true_flag(pstate, "--complement", &do_complement); ap_define_true_flag(pstate, "-r", &do_regexes); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_cut_usage(stderr, argv[0], verb); return NULL; } if (pfield_name_list == NULL) { mapper_cut_usage(stderr, argv[0], verb); return NULL; } return mapper_cut_alloc(pstate, pfield_name_list, do_arg_order, do_complement, do_regexes); } // ---------------------------------------------------------------- static mapper_t* mapper_cut_alloc(ap_state_t* pargp, slls_t* pfield_name_list, int do_arg_order, int do_complement, int do_regexes) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_cut_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_cut_state_t)); pstate->pargp = pargp; if (!do_regexes) { pstate->pfield_name_list = pfield_name_list; slls_reverse(pstate->pfield_name_list); pstate->pfield_name_set = hss_from_slls(pfield_name_list); pstate->nregex = 0; pstate->regexes = NULL; pmapper->pprocess_func = mapper_cut_process_no_regexes; } else { pstate->pfield_name_list = NULL; pstate->pfield_name_set = NULL; pstate->nregex = pfield_name_list->length; pstate->regexes = mlr_malloc_or_die(pstate->nregex * sizeof(regex_t)); int i = 0; for (sllse_t* pe = pfield_name_list->phead; pe != NULL; pe = pe->pnext, i++) { // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. // Strip off the leading " and trailing " or "i. regcomp_or_die_quoted(&pstate->regexes[i], pe->value, REG_NOSUB); } slls_free(pfield_name_list); pmapper->pprocess_func = mapper_cut_process_with_regexes; } pstate->do_arg_order = do_arg_order; pstate->do_complement = do_complement; pmapper->pvstate = (void*)pstate; pmapper->pfree_func = mapper_cut_free; return pmapper; } static void mapper_cut_free(mapper_t* pmapper, context_t* _) { mapper_cut_state_t* pstate = pmapper->pvstate; slls_free(pstate->pfield_name_list); hss_free(pstate->pfield_name_set); for (int i = 0; i < pstate->nregex; i++) regfree(&pstate->regexes[i]); free(pstate->regexes); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_cut_process_no_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_cut_state_t* pstate = (mapper_cut_state_t*)pvstate; if (!pstate->do_complement) { // Loop over the record and free the fields not in the // to-be-retained set, being careful about the fact that we're // modifying what we're looping over. for (lrece_t* pe = pinrec->phead; pe != NULL; /* next in loop */) { if (!hss_has(pstate->pfield_name_set, pe->key)) { lrece_t* pf = pe->pnext; lrec_remove(pinrec, pe->key); pe = pf; } else { pe = pe->pnext; } } if (pstate->do_arg_order) { // OK since the field-name list was reversed at construction time. for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) { char* field_name = pe->value; lrec_move_to_head(pinrec, field_name); } } return sllv_single(pinrec); } else { for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) { char* field_name = pe->value; lrec_remove(pinrec, field_name); } return sllv_single(pinrec); } } else { return sllv_single(NULL); } } // ---------------------------------------------------------------- static sllv_t* mapper_cut_process_with_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_cut_state_t* pstate = (mapper_cut_state_t*)pvstate; // Loop over the record and free the fields to be discarded, being // careful about the fact that we're modifying what we're looping over. for (lrece_t* pe = pinrec->phead; pe != NULL; /* next in loop */) { int matches_any = FALSE; for (int i = 0; i < pstate->nregex; i++) { if (regmatch_or_die(&pstate->regexes[i], pe->key, 0, NULL)) { matches_any = TRUE; break; } } if (matches_any ^ pstate->do_complement) { pe = pe->pnext; } else { lrece_t* pf = pe->pnext; lrec_remove(pinrec, pe->key); pe = pf; } } return sllv_single(pinrec); } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_decimate.c000066400000000000000000000117031354153536500201640ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_decimate_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; unsigned long long decimate_count; unsigned long long remainder_for_keep; lhmslv_t* pcounts_by_group; } mapper_decimate_state_t; static void mapper_decimate_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_decimate_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long decimate_count, int keep_last); static void mapper_decimate_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_decimate_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_decimate_setup = { .verb = "decimate", .pusage_func = mapper_decimate_usage, .pparse_func = mapper_decimate_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_decimate_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-n {count} Decimation factor; default 10\n"); fprintf(o, "-b Decimate by printing first of every n.\n"); fprintf(o, "-e Decimate by printing last of every n (default).\n"); fprintf(o, "-g {a,b,c} Optional group-by-field names for decimate counts\n"); fprintf(o, "Passes through one of every n records, optionally by category.\n"); } static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int decimate_count = 10; int keep_last = TRUE; slls_t* pgroup_by_field_names = slls_alloc(); char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_int_flag(pstate, "-n", &decimate_count); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_false_flag(pstate, "-b", &keep_last); ap_define_true_flag(pstate, "-e", &keep_last); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_decimate_usage(stderr, argv[0], verb); return NULL; } return mapper_decimate_alloc(pstate, pgroup_by_field_names, decimate_count, keep_last); } // ---------------------------------------------------------------- static mapper_t* mapper_decimate_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long decimate_count, int keep_last) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_decimate_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_decimate_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->decimate_count = decimate_count; pstate->remainder_for_keep = keep_last ? decimate_count - 1 : 0; pstate->pcounts_by_group = lhmslv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_decimate_process; pmapper->pfree_func = mapper_decimate_free; return pmapper; } static void mapper_decimate_free(mapper_t* pmapper, context_t* _) { mapper_decimate_state_t* pstate = pmapper->pvstate; if (pstate->pgroup_by_field_names != NULL) slls_free(pstate->pgroup_by_field_names); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { unsigned long long* pcount_for_group = pa->pvvalue; free(pcount_for_group); } lhmslv_free(pstate->pcounts_by_group); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_decimate_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_decimate_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { return NULL; } else { unsigned long long* pcount_for_group = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount_for_group == NULL) { pcount_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount_for_group = 0LL; lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount_for_group, FREE_ENTRY_KEY); } unsigned long long remainder = *pcount_for_group % pstate->decimate_count; if (remainder == pstate->remainder_for_keep) { (*pcount_for_group)++; slls_free(pgroup_by_field_values); return sllv_single(pinrec); } else { (*pcount_for_group)++; lrec_free(pinrec); slls_free(pgroup_by_field_values); return NULL; } } } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_fill_down.c000066400000000000000000000107421354153536500203700ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmss.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_fill_down_state_t { ap_state_t* pargp; slls_t* pfill_down_field_names; lhmss_t* plast_non_null_values; int only_if_absent; } mapper_fill_down_state_t; static void mapper_fill_down_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_fill_down_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_fill_down_alloc(ap_state_t* pargp, slls_t* pfill_down_field_names, int only_if_absent); static void mapper_fill_down_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_fill_down_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_fill_down_setup = { .verb = "fill-down", .pusage_func = mapper_fill_down_usage, .pparse_func = mapper_fill_down_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_fill_down_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-f {a,b,c} Field names for fill-down\n"); fprintf(o, "-a|--only-if-absent Field names for fill-down\n"); fprintf(o, "If a given record has a missing value for a given field, fill that from\n"); fprintf(o, "the corresponding value from a previous record, if any.\n"); fprintf(o, "By default, a 'missing' field either is absent, or has the empty-string value.\n"); fprintf(o, "With -a, a field is 'missing' only if it is absent.\n"); } static mapper_t* mapper_fill_down_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pfill_down_field_names = NULL; int only_if_absent = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pfill_down_field_names); ap_define_true_flag(pstate, "-a", &only_if_absent); ap_define_true_flag(pstate, "--only-if-absent", &only_if_absent); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_fill_down_usage(stderr, argv[0], verb); return NULL; } if (pfill_down_field_names == NULL) { mapper_fill_down_usage(stderr, argv[0], verb); return NULL; } return mapper_fill_down_alloc(pstate, pfill_down_field_names, only_if_absent); } // ---------------------------------------------------------------- static mapper_t* mapper_fill_down_alloc(ap_state_t* pargp, slls_t* pfill_down_field_names, int only_if_absent) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_fill_down_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_fill_down_state_t)); pstate->pargp = pargp; pstate->pfill_down_field_names = pfill_down_field_names; pstate->plast_non_null_values = lhmss_alloc(); pstate->only_if_absent = only_if_absent; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_fill_down_process; pmapper->pfree_func = mapper_fill_down_free; return pmapper; } static void mapper_fill_down_free(mapper_t* pmapper, context_t* _) { mapper_fill_down_state_t* pstate = pmapper->pvstate; slls_free(pstate->pfill_down_field_names); lhmss_free(pstate->plast_non_null_values); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_fill_down_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_fill_down_state_t* pstate = pvstate; if (pinrec == NULL) { // end of record stream return sllv_single(NULL); } for (sllse_t* pe = pstate->pfill_down_field_names->phead; pe != NULL; pe = pe->pnext) { char* pkey = pe->value; char* pvalue = lrec_get(pinrec, pkey); int present = (pstate->only_if_absent) ? (pvalue != NULL) : (pvalue != NULL && *pvalue); if (present) { // Remember it for a subsequent record lacking this field lhmss_put(pstate->plast_non_null_values, mlr_strdup_or_die(pkey), mlr_strdup_or_die(pvalue), FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } else { // Reuse previously seen value, if any char* prev = lhmss_get(pstate->plast_non_null_values, pkey); if (prev != NULL) { lrec_put(pinrec, mlr_strdup_or_die(pkey), mlr_strdup_or_die(prev), FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } } } return sllv_single(pinrec); } miller-5.6.2/c/mapping/mapper_format_values.c000066400000000000000000000150331354153536500212600ustar00rootroot00000000000000#include "cli/argparse.h" #include "mapping/mappers.h" #include "lib/mlrutil.h" #include "containers/lrec.h" typedef struct _mapper_format_values_state_t { ap_state_t* pargp; char* string_format; char* int_format; char* float_format; int coerce_int_to_float; } mapper_format_values_state_t; #define DEFAULT_STRING_FORMAT "%s" #define DEFAULT_INT_FORMAT "%lld" #define DEFAULT_FLOAT_FORMAT "%lf" static void mapper_format_values_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_format_values_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_format_values_alloc(ap_state_t* pargp, char* string_format, char* int_format, char* float_format, int coerce_int_to_float); static void mapper_format_values_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_format_values_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_format_values_setup = { .verb = "format-values", .pusage_func = mapper_format_values_usage, .pparse_func = mapper_format_values_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static mapper_t* mapper_format_values_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { char* string_format = DEFAULT_STRING_FORMAT; char* int_format = DEFAULT_INT_FORMAT; char* float_format = DEFAULT_FLOAT_FORMAT; int coerce_int_to_float = FALSE; if ((argc - *pargi) < 1) { mapper_format_values_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pstate = ap_alloc(); ap_define_string_flag(pstate, "-s", &string_format); ap_define_string_flag(pstate, "-i", &int_format); ap_define_string_flag(pstate, "-f", &float_format); ap_define_true_flag(pstate, "-n", &coerce_int_to_float); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_format_values_usage(stderr, argv[0], verb); return NULL; } mapper_t* pmapper = mapper_format_values_alloc(pstate, string_format, int_format, float_format, coerce_int_to_float); return pmapper; } static void mapper_format_values_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Applies format strings to all field values, depending on autodetected type.\n"); fprintf(o, "* If a field value is detected to be integer, applies integer format.\n"); fprintf(o, "* Else, if a field value is detected to be float, applies float format.\n"); fprintf(o, "* Else, applies string format.\n"); fprintf(o, "\n"); fprintf(o, "Note: this is a low-keystroke way to apply formatting to many fields. To get\n"); fprintf(o, "finer control, please see the fmtnum function within the mlr put DSL.\n"); fprintf(o, "\n"); fprintf(o, "Note: this verb lets you apply arbitrary format strings, which can produce\n"); fprintf(o, "undefined behavior and/or program crashes. See your system's \"man printf\".\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "-i {integer format} Defaults to \"%s\".\n", DEFAULT_INT_FORMAT); fprintf(o, " Examples: \"%%06lld\", \"%%08llx\".\n"); fprintf(o, " Note that Miller integers are long long so you must use\n"); fprintf(o, " formats which apply to long long, e.g. with ll in them.\n"); fprintf(o, " Undefined behavior results otherwise.\n"); fprintf(o, "-f {float format} Defaults to \"%s\".\n", DEFAULT_FLOAT_FORMAT); fprintf(o, " Examples: \"%%8.3lf\", \"%%.6le\".\n"); fprintf(o, " Note that Miller floats are double-precision so you must\n"); fprintf(o, " use formats which apply to double, e.g. with l[efg] in them.\n"); fprintf(o, " Undefined behavior results otherwise.\n"); fprintf(o, "-s {string format} Defaults to \"%s\".\n", DEFAULT_STRING_FORMAT); fprintf(o, " Examples: \"_%%s\", \"%%08s\".\n"); fprintf(o, " Note that you must use formats which apply to string, e.g.\n"); fprintf(o, " with s in them. Undefined behavior results otherwise.\n"); fprintf(o, "-n Coerce field values autodetected as int to float, and then\n"); fprintf(o, " apply the float format.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_format_values_alloc(ap_state_t* pargp, char* string_format, char* int_format, char* float_format, int coerce_int_to_float) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_format_values_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_format_values_state_t)); pstate->pargp = pargp; pstate->string_format = string_format; pstate->int_format = int_format; pstate->float_format = float_format; pstate->coerce_int_to_float = coerce_int_to_float; pmapper->pvstate = pstate; pmapper->pprocess_func = NULL; pmapper->pprocess_func = mapper_format_values_process; pmapper->pfree_func = mapper_format_values_free; return pmapper; } static void mapper_format_values_free(mapper_t* pmapper, context_t* _) { mapper_format_values_state_t* pstate = pmapper->pvstate; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_format_values_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_format_values_state_t* pstate = (mapper_format_values_state_t*)pvstate; if (pinrec == NULL) { // end of record stream return sllv_single(NULL); } for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { long long int_value; double float_value; char* string_value = pe->value; int is_int = mlr_try_int_from_string(string_value, &int_value); int is_float = mlr_try_float_from_string(string_value, &float_value); if (is_int) { if (pstate->coerce_int_to_float) { lrece_update_value(pe, mlr_alloc_string_from_double((double)int_value, pstate->float_format), TRUE); } else { lrece_update_value(pe, mlr_alloc_string_from_ll_and_format(int_value, pstate->int_format), TRUE); } } else if (is_float) { lrece_update_value(pe, mlr_alloc_string_from_double(float_value, pstate->float_format), TRUE); } else { lrece_update_value(pe, mlr_alloc_string_from_string_and_format(string_value, pstate->string_format), TRUE ); } } return sllv_single(pinrec); } miller-5.6.2/c/mapping/mapper_fraction.c000066400000000000000000000236451354153536500202260ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsmv.h" #include "containers/mixutil.h" #include "lib/mvfuncs.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_fraction_state_t { ap_state_t* pargp; slls_t* pfraction_field_names; slls_t* pgroup_by_field_names; sllv_t* precords; // Two-level map: lhmslv_t -> lhmsv. Group-by field names are the first keyset; // the fraction field names are keys into the second. lhmslv_t* psums; lhmslv_t* pcumus; int do_cumu; char* output_field_name_suffix; // "_fraction" or "_percent" mv_t multiplier; // 1.0 for fraction or 100.0 for percent mv_t zero; } mapper_fraction_state_t; static void mapper_fraction_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_fraction_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_fraction_alloc(ap_state_t* pargp, slls_t* pfraction_field_names, slls_t* pgroup_by_field_names, int do_percents, int do_cumu); static void mapper_fraction_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_fraction_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_fraction_setup = { .verb = "fraction", .pusage_func = mapper_fraction_usage, .pparse_func = mapper_fraction_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_fraction_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "For each record's value in specified fields, computes the ratio of that\n"); fprintf(o, "value to the sum of values in that field over all input records.\n"); fprintf(o, "E.g. with input records x=1 x=2 x=3 and x=4, emits output records\n"); fprintf(o, "x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4\n"); fprintf(o, "\n"); fprintf(o, "Note: this is internally a two-pass algorithm: on the first pass it retains\n"); fprintf(o, "input records and accumulates sums; on the second pass it computes quotients\n"); fprintf(o, "and emits output records. This means it produces no output until all input is read.\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "-f {a,b,c} Field name(s) for fraction calculation\n"); fprintf(o, "-g {d,e,f} Optional group-by-field name(s) for fraction counts\n"); fprintf(o, "-p Produce percents [0..100], not fractions [0..1]. Output field names\n"); fprintf(o, " end with \"_percent\" rather than \"_fraction\"\n"); fprintf(o, "-c Produce cumulative distributions, i.e. running sums: each output\n"); fprintf(o, " value folds in the sum of the previous for the specified group\n"); fprintf(o, " E.g. with input records x=1 x=2 x=3 and x=4, emits output records\n"); fprintf(o, " x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3\n"); fprintf(o, " x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0\n"); } static mapper_t* mapper_fraction_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pfraction_field_names = slls_alloc(); slls_t* pgroup_by_field_names = slls_alloc(); int do_percents = FALSE; int do_cumu = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pfraction_field_names); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_true_flag(pstate, "-p", &do_percents); ap_define_true_flag(pstate, "-c", &do_cumu); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_fraction_usage(stderr, argv[0], verb); return NULL; } if (pfraction_field_names->length == 0) { mapper_fraction_usage(stderr, argv[0], verb); return NULL; } return mapper_fraction_alloc(pstate, pfraction_field_names, pgroup_by_field_names, do_percents, do_cumu); } // ---------------------------------------------------------------- static mapper_t* mapper_fraction_alloc(ap_state_t* pargp, slls_t* pfraction_field_names, slls_t* pgroup_by_field_names, int do_percents, int do_cumu) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_fraction_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_fraction_state_t)); pstate->pargp = pargp; pstate->pfraction_field_names = pfraction_field_names; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->precords = sllv_alloc(); pstate->psums = lhmslv_alloc(); pstate->pcumus = lhmslv_alloc(); if (do_percents) { pstate->multiplier = mv_from_int(100); pstate->output_field_name_suffix = do_cumu ? "_cumulative_percent" : "_percent"; } else { pstate->multiplier = mv_from_int(1); pstate->output_field_name_suffix = do_cumu ? "_cumulative_fraction" : "_fraction"; } pstate->do_cumu = do_cumu; pstate->zero = mv_from_int(0); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_fraction_process; pmapper->pfree_func = mapper_fraction_free; return pmapper; } static void mapper_fraction_free(mapper_t* pmapper, context_t* _) { mapper_fraction_state_t* pstate = pmapper->pvstate; if (pstate->pfraction_field_names != NULL) slls_free(pstate->pfraction_field_names); if (pstate->pgroup_by_field_names != NULL) slls_free(pstate->pgroup_by_field_names); // The process method will have emptied out the list. We just need to free the container. sllv_free(pstate->precords); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->psums->phead; pa != NULL; pa = pa->pnext) { lhmsmv_t* psums_for_group = pa->pvvalue; lhmsmv_free(psums_for_group); } lhmslv_free(pstate->psums); for (lhmslve_t* pa = pstate->pcumus->phead; pa != NULL; pa = pa->pnext) { lhmsmv_t* psums_for_group = pa->pvvalue; lhmsmv_free(psums_for_group); } lhmslv_free(pstate->pcumus); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_fraction_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_fraction_state_t* pstate = pvstate; if (pinrec != NULL) { // Not end of stream; pass 1 // Append records into a single output list (so that this verb is order-preserving). sllv_append(pstate->precords, pinrec); // Accumulate sums of fraction-field values grouped by group-by field names slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { lhmsmv_t* psums_for_group = lhmslv_get(pstate->psums, pgroup_by_field_values); lhmsmv_t* pcumus_for_group = NULL; if (psums_for_group == NULL) { psums_for_group = lhmsmv_alloc(); lhmslv_put(pstate->psums, slls_copy(pgroup_by_field_values), psums_for_group, FREE_ENTRY_KEY); pcumus_for_group = lhmsmv_alloc(); lhmslv_put(pstate->pcumus, slls_copy(pgroup_by_field_values), pcumus_for_group, FREE_ENTRY_KEY); } for (sllse_t* pf = pstate->pfraction_field_names->phead; pf != NULL; pf = pf->pnext) { char* fraction_field_name = pf->value; char* lrec_string_value = lrec_get(pinrec, fraction_field_name); if (lrec_string_value != NULL) { mv_t lrec_num_value = mv_scan_number_or_die(lrec_string_value); mv_t* psum = lhmsmv_get(psums_for_group, fraction_field_name); if (psum == NULL) { // First value for group lhmsmv_put(psums_for_group, fraction_field_name, &lrec_num_value, FREE_ENTRY_VALUE); lhmsmv_put(pcumus_for_group, fraction_field_name, &pstate->zero, FREE_ENTRY_VALUE); } else { *psum = x_xx_plus_func(psum, &lrec_num_value); } } } slls_free(pgroup_by_field_values); } return NULL; } else { // End of stream; pass 2 sllv_t* poutrecs = sllv_alloc(); // Iterate over the retained records, decorating them with fraction fields. while (pstate->precords->phead != NULL) { lrec_t* poutrec = sllv_pop(pstate->precords); slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(poutrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { lhmsmv_t* psums_for_group = lhmslv_get(pstate->psums, pgroup_by_field_values); lhmsmv_t* pcumus_for_group = lhmslv_get(pstate->pcumus, pgroup_by_field_values); MLR_INTERNAL_CODING_ERROR_IF(psums_for_group == NULL); // should have populated on pass 1 for (sllse_t* pf = pstate->pfraction_field_names->phead; pf != NULL; pf = pf->pnext) { char* fraction_field_name = pf->value; char* lrec_string_value = lrec_get(poutrec, fraction_field_name); if (lrec_string_value != NULL) { mv_t lrec_num_value = mv_scan_number_or_die(lrec_string_value); mv_t numerator; mv_t* pcumu = NULL; if (pstate->do_cumu) { pcumu = lhmsmv_get(pcumus_for_group, fraction_field_name); numerator = x_xx_plus_func(&lrec_num_value, pcumu); } else { numerator = lrec_num_value; } mv_t* pdenominator = lhmsmv_get(psums_for_group, fraction_field_name); mv_t output_value = mv_i_nn_ne(&lrec_num_value, &pstate->zero) ? x_xx_divide_func(&numerator, pdenominator) : mv_error(); output_value = x_xx_times_func(&output_value, &pstate->multiplier); lrec_put(poutrec, mlr_paste_2_strings(fraction_field_name, pstate->output_field_name_suffix), mv_alloc_format_val(&output_value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); if (pstate->do_cumu) { *pcumu = x_xx_plus_func(pcumu, &lrec_num_value); } } } slls_free(pgroup_by_field_values); } sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); return poutrecs; } } miller-5.6.2/c/mapping/mapper_grep.c000066400000000000000000000114031354153536500173430ustar00rootroot00000000000000#include "cli/argparse.h" #include "cli/mlrcli.h" #include "mapping/mappers.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "containers/sllv.h" typedef struct _mapper_grep_state_t { ap_state_t* pargp; int exclude; regex_t regex; cli_writer_opts_t* pwriter_opts; } mapper_grep_state_t; static void mapper_grep_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_grep_alloc(ap_state_t* pargp, char* regex_string, int exclude, int ignore_case, cli_writer_opts_t* pwriter_opts); static void mapper_grep_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_grep_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_grep_setup = { .verb = "grep", .pusage_func = mapper_grep_usage, .pparse_func = mapper_grep_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* pwriter_opts) { char* regex_string = NULL; int exclude = FALSE; int ignore_case = FALSE; if ((argc - *pargi) < 1) { mapper_grep_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-v", &exclude); ap_define_true_flag(pstate, "-i", &ignore_case); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_grep_usage(stderr, argv[0], verb); return NULL; } if ((argc - *pargi) < 1) { mapper_grep_usage(stderr, argv[0], verb); return NULL; } regex_string = argv[(*pargi)++]; mapper_t* pmapper = mapper_grep_alloc(pstate, regex_string, exclude, ignore_case, pwriter_opts); return pmapper; } static void mapper_grep_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {regular expression}\n", argv0, verb); fprintf(o, "Passes through records which match {regex}.\n"); fprintf(o, "Options:\n"); fprintf(o, "-i Use case-insensitive search.\n"); fprintf(o, "-v Invert: pass through records which do not match the regex.\n"); fprintf(o, "Note that \"%s filter\" is more powerful, but requires you to know field names.\n", argv0); fprintf(o, "By contrast, \"%s %s\" allows you to regex-match the entire record. It does\n", argv0, verb); fprintf(o, "this by formatting each record in memory as DKVP, using command-line-specified\n"); fprintf(o, "ORS/OFS/OPS, and matching the resulting line against the regex specified\n"); fprintf(o, "here. In particular, the regex is not applied to the input stream: if you\n"); fprintf(o, "have CSV with header line \"x,y,z\" and data line \"1,2,3\" then the regex will\n"); fprintf(o, "be matched, not against either of these lines, but against the DKVP line\n"); fprintf(o, "\"x=1,y=2,z=3\". Furthermore, not all the options to system grep are supported,\n"); fprintf(o, "and this command is intended to be merely a keystroke-saver. To get all the\n"); fprintf(o, "features of system grep, you can do\n"); fprintf(o, " \"%s --odkvp ... | grep ... | %s --idkvp ...\"\n", argv0, argv0); } // ---------------------------------------------------------------- static mapper_t* mapper_grep_alloc(ap_state_t* pargp, char* regex_string, int exclude, int ignore_case, cli_writer_opts_t* pwriter_opts) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_grep_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_grep_state_t)); pstate->pargp = pargp; int cflags = REG_NOSUB; if (ignore_case) cflags |= REG_ICASE; regcomp_or_die_quoted(&pstate->regex, regex_string, cflags); pstate->exclude = exclude; pstate->pwriter_opts = pwriter_opts; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_grep_process; pmapper->pfree_func = mapper_grep_free; return pmapper; } static void mapper_grep_free(mapper_t* pmapper, context_t* _) { mapper_grep_state_t* pstate = pmapper->pvstate; regfree(&pstate->regex); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_grep_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of input stream return sllv_single(NULL); mapper_grep_state_t* pstate = (mapper_grep_state_t*)pvstate; char* line = lrec_sprint(pinrec, pstate->pwriter_opts->ors, pstate->pwriter_opts->ofs, pstate->pwriter_opts->ops); int matches = regmatch_or_die(&pstate->regex, line, 0, NULL); sllv_t* poutrecs = NULL; if (matches ^ pstate->exclude) { poutrecs = sllv_single(pinrec); } else { lrec_free(pinrec); } free(line); return poutrecs; } miller-5.6.2/c/mapping/mapper_group_like.c000066400000000000000000000066361354153536500205620ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" typedef struct _mapper_group_like_state_t { // map from list of string to list of record lhmslv_t* precords_by_key_field_names; } mapper_group_like_state_t; static void mapper_group_like_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_group_like_alloc(); static void mapper_group_like_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_group_like_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_group_like_setup = { .verb = "group-like", .pusage_func = mapper_group_like_usage, .pparse_func = mapper_group_like_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_group_like_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s\n", argv0, verb); fprintf(o, "Outputs records in batches having identical field names.\n"); } static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_group_like_usage(stderr, argv[0], argv[*pargi]); return NULL; } mapper_t* pmapper = mapper_group_like_alloc(); *pargi += 1; return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_group_like_alloc() { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_group_like_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_group_like_state_t)); pstate->precords_by_key_field_names = lhmslv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_group_like_process; pmapper->pfree_func = mapper_group_like_free; return pmapper; } static void mapper_group_like_free(mapper_t* pmapper, context_t* _) { mapper_group_like_state_t* pstate = pmapper->pvstate; // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->precords_by_key_field_names->phead; pa != NULL; pa = pa->pnext) { sllv_t* plist = pa->pvvalue; sllv_free(plist); } lhmslv_free(pstate->precords_by_key_field_names); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_group_like_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_group_like_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pkey_field_names = mlr_reference_keys_from_record(pinrec); sllv_t* plist = lhmslv_get(pstate->precords_by_key_field_names, pkey_field_names); if (plist == NULL) { plist = sllv_alloc(); sllv_append(plist, pinrec); lhmslv_put(pstate->precords_by_key_field_names, slls_copy(pkey_field_names), plist, FREE_ENTRY_KEY); } else { sllv_append(plist, pinrec); } slls_free(pkey_field_names); return NULL; } else { sllv_t* poutput = sllv_alloc(); for (lhmslve_t* pe = pstate->precords_by_key_field_names->phead; pe != NULL; pe = pe->pnext) { sllv_t* plist = pe->pvvalue; sllv_transfer(poutput, plist); } sllv_append(poutput, NULL); return poutput; } } miller-5.6.2/c/mapping/mapper_having_fields.c000066400000000000000000000237011354153536500212140ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "containers/hss.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef enum _criterion_t { HAVING_FIELDS_UNSPECIFIED, HAVING_FIELDS_AT_LEAST, HAVING_FIELDS_WHICH_ARE, HAVING_FIELDS_AT_MOST, HAVING_ALL_FIELDS_MATCHING, HAVING_ANY_FIELDS_MATCHING, HAVING_NO_FIELDS_MATCHING } criterion_t; typedef struct _mapper_having_fields_state_t { slls_t* pfield_names; hss_t* pfield_name_set; regex_t regex; } mapper_having_fields_state_t; static void mapper_having_fields_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_having_fields_alloc(slls_t* pfield_names, char* regex_string, criterion_t criterion); static void mapper_having_fields_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_having_fields_at_least_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_having_fields_which_are_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_having_fields_at_most_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_having_all_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_having_any_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_having_no_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_having_fields_setup = { .verb = "having-fields", .pusage_func = mapper_having_fields_usage, .pparse_func = mapper_having_fields_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_having_fields_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Conditionally passes through records depending on each record's field names.\n"); fprintf(o, "Options:\n"); fprintf(o, " --at-least {comma-separated names}\n"); fprintf(o, " --which-are {comma-separated names}\n"); fprintf(o, " --at-most {comma-separated names}\n"); fprintf(o, " --all-matching {regular expression}\n"); fprintf(o, " --any-matching {regular expression}\n"); fprintf(o, " --none-matching {regular expression}\n"); fprintf(o, "Examples:\n"); fprintf(o, " %s %s --which-are amount,status,owner\n", argv0, verb); fprintf(o, " %s %s --any-matching 'sda[0-9]'\n", argv0, verb); fprintf(o, " %s %s --any-matching '\"sda[0-9]\"'\n", argv0, verb); fprintf(o, " %s %s --any-matching '\"sda[0-9]\"i' (this is case-insensitive)\n", argv0, verb); } // ---------------------------------------------------------------- static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pfield_names = NULL; char* regex_string = NULL; criterion_t criterion = HAVING_FIELDS_UNSPECIFIED; char* verb = argv[(*pargi)++]; int argi = *pargi; while (argi < argc && argv[argi][0] == '-') { if (streq(argv[argi], "--at-least")) { criterion = HAVING_FIELDS_AT_LEAST; if (pfield_names != NULL) slls_free(pfield_names); pfield_names = slls_from_line(argv[argi+1], ',', FALSE); regex_string = NULL; } else if (streq(argv[argi], "--which-are")) { criterion = HAVING_FIELDS_WHICH_ARE; if (pfield_names != NULL) slls_free(pfield_names); pfield_names = slls_from_line(argv[argi+1], ',', FALSE); regex_string = NULL; } else if (streq(argv[argi], "--at-most")) { criterion = HAVING_FIELDS_AT_MOST; if (pfield_names != NULL) slls_free(pfield_names); pfield_names = slls_from_line(argv[argi+1], ',', FALSE); regex_string = NULL; } else if (streq(argv[argi], "--all-matching")) { criterion = HAVING_ALL_FIELDS_MATCHING; if (pfield_names != NULL) { slls_free(pfield_names); pfield_names = NULL; } regex_string = argv[argi+1]; } else if (streq(argv[argi], "--any-matching")) { criterion = HAVING_ANY_FIELDS_MATCHING; if (pfield_names != NULL) { slls_free(pfield_names); pfield_names = NULL; } regex_string = argv[argi+1]; } else if (streq(argv[argi], "--none-matching")) { criterion = HAVING_NO_FIELDS_MATCHING; if (pfield_names != NULL) { slls_free(pfield_names); pfield_names = NULL; } regex_string = argv[argi+1]; } else { mapper_having_fields_usage(stderr, argv[0], verb); return NULL; } if (argc - argi < 2) { mapper_having_fields_usage(stderr, argv[0], verb); return NULL; } argi += 2; } if (pfield_names == NULL && regex_string == NULL) { mapper_having_fields_usage(stderr, argv[0], verb); return NULL; } if (criterion == FALSE) { mapper_having_fields_usage(stderr, argv[0], verb); return NULL; } *pargi = argi; return mapper_having_fields_alloc(pfield_names, regex_string, criterion); } // ---------------------------------------------------------------- static mapper_t* mapper_having_fields_alloc(slls_t* pfield_names, char* regex_string, criterion_t criterion) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_having_fields_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_having_fields_state_t)); pmapper->pvstate = (void*)pstate; if (regex_string != NULL) { pstate->pfield_names = NULL; pstate->pfield_name_set = hss_alloc(); // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. // Strip off the leading " and trailing " or "i. regcomp_or_die_quoted(&pstate->regex, regex_string, REG_NOSUB); if (criterion == HAVING_ALL_FIELDS_MATCHING) pmapper->pprocess_func = mapper_having_all_fields_matching_process; else if (criterion == HAVING_ANY_FIELDS_MATCHING) pmapper->pprocess_func = mapper_having_any_fields_matching_process; else if (criterion == HAVING_NO_FIELDS_MATCHING) pmapper->pprocess_func = mapper_having_no_fields_matching_process; pmapper->pfree_func = mapper_having_fields_free; } else { pstate->pfield_names = pfield_names; pstate->pfield_name_set = hss_alloc(); regcomp_or_die(&pstate->regex, ".", 0); for (sllse_t* pe = pfield_names->phead; pe != NULL; pe = pe->pnext) hss_add(pstate->pfield_name_set, pe->value); if (criterion == HAVING_FIELDS_AT_LEAST) pmapper->pprocess_func = mapper_having_fields_at_least_process; else if (criterion == HAVING_FIELDS_WHICH_ARE) pmapper->pprocess_func = mapper_having_fields_which_are_process; else if (criterion == HAVING_FIELDS_AT_MOST) pmapper->pprocess_func = mapper_having_fields_at_most_process; pmapper->pfree_func = mapper_having_fields_free; } return pmapper; } static void mapper_having_fields_free(mapper_t* pmapper, context_t* _) { mapper_having_fields_state_t* pstate = pmapper->pvstate; if (pstate->pfield_names != NULL) slls_free(pstate->pfield_names); if (pstate->pfield_name_set != NULL) hss_free(pstate->pfield_name_set); regfree(&pstate->regex); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_having_fields_at_least_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) return sllv_single(NULL); mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; int num_found = 0; for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (hss_has(pstate->pfield_name_set, pe->key)) { num_found++; if (num_found == pstate->pfield_name_set->num_occupied) return sllv_single(pinrec); } } lrec_free(pinrec); return NULL; } static sllv_t* mapper_having_fields_which_are_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) return sllv_single(NULL); mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; if (pinrec->field_count != pstate->pfield_name_set->num_occupied) { lrec_free(pinrec); return NULL; } for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (!hss_has(pstate->pfield_name_set, pe->key)) { lrec_free(pinrec); return NULL; } } return sllv_single(pinrec); } static sllv_t* mapper_having_fields_at_most_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) return sllv_single(NULL); mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (!hss_has(pstate->pfield_name_set, pe->key)) { lrec_free(pinrec); return NULL; } } return sllv_single(pinrec); } // ---------------------------------------------------------------- static sllv_t* mapper_having_all_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) return sllv_single(NULL); mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (!regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { lrec_free(pinrec); return NULL; } } return sllv_single(pinrec); } static sllv_t* mapper_having_any_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) return sllv_single(NULL); mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { return sllv_single(pinrec); } } lrec_free(pinrec); return NULL; } static sllv_t* mapper_having_no_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) return sllv_single(NULL); mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { lrec_free(pinrec); return NULL; } } return sllv_single(pinrec); } miller-5.6.2/c/mapping/mapper_head.c000066400000000000000000000122071354153536500173120ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_head_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; unsigned long long head_count; unsigned long long unkeyed_record_count; lhmslv_t* pcounts_by_group; } mapper_head_state_t; static void mapper_head_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_head_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long head_count); static void mapper_head_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_head_process_unkeyed(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_head_process_keyed(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_head_setup = { .verb = "head", .pusage_func = mapper_head_usage, .pparse_func = mapper_head_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_head_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-n {count} Head count to print; default 10\n"); fprintf(o, "-g {a,b,c} Optional group-by-field names for head counts\n"); fprintf(o, "Passes through the first n records, optionally by category.\n"); fprintf(o, "Without -g, ceases consuming more input (i.e. is fast) when n\n"); fprintf(o, "records have been read.\n"); } static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int head_count = 10; slls_t* pgroup_by_field_names = slls_alloc(); char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_int_flag(pstate, "-n", &head_count); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_head_usage(stderr, argv[0], verb); return NULL; } return mapper_head_alloc(pstate, pgroup_by_field_names, head_count); } // ---------------------------------------------------------------- static mapper_t* mapper_head_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long head_count) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_head_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_head_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->head_count = head_count; pstate->unkeyed_record_count = 0LL; pstate->pcounts_by_group = lhmslv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = pgroup_by_field_names->length == 0 ? mapper_head_process_unkeyed : mapper_head_process_keyed; pmapper->pfree_func = mapper_head_free; return pmapper; } static void mapper_head_free(mapper_t* pmapper, context_t* _) { mapper_head_state_t* pstate = pmapper->pvstate; if (pstate->pgroup_by_field_names != NULL) slls_free(pstate->pgroup_by_field_names); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { unsigned long long* pcount_for_group = pa->pvvalue; free(pcount_for_group); } lhmslv_free(pstate->pcounts_by_group); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_head_process_unkeyed(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_head_state_t* pstate = pvstate; if (pinrec != NULL) { pstate->unkeyed_record_count++; if (pstate->unkeyed_record_count <= pstate->head_count) { return sllv_single(pinrec); } else { pctx->force_eof = TRUE; lrec_free(pinrec); return NULL; } } else { return sllv_single(NULL); } } // ---------------------------------------------------------------- static sllv_t* mapper_head_process_keyed(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_head_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { lrec_free(pinrec); return NULL; } else { unsigned long long* pcount_for_group = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount_for_group == NULL) { pcount_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount_for_group = 0LL; lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount_for_group, FREE_ENTRY_KEY); } slls_free(pgroup_by_field_values); (*pcount_for_group)++; if (*pcount_for_group <= pstate->head_count) { return sllv_single(pinrec); } else { lrec_free(pinrec); return NULL; } } } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_histogram.c000066400000000000000000000305311354153536500204060ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/dvector.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define DVECTOR_INITIAL_SIZE 1024 typedef struct _mapper_histogram_state_t { ap_state_t* pargp; slls_t* value_field_names; double lo; int nbins; double hi; double mul; lhmsv_t* pcounts_by_field; lhmsv_t* pvectors_by_field; // For auto-mode char* output_prefix; } mapper_histogram_state_t; static void mapper_histogram_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_histogram_alloc(ap_state_t* pargp, slls_t* value_field_names, double lo, int nbins, double hi, int do_auto, char* output_prefix); static void mapper_histogram_free(mapper_t* pmapper, context_t* _); static void mapper_histogram_ingest(lrec_t* pinrec, mapper_histogram_state_t* pstate); static sllv_t* mapper_histogram_emit(mapper_histogram_state_t* pstate); static sllv_t* mapper_histogram_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static void mapper_histogram_ingest_auto(lrec_t* pinrec, mapper_histogram_state_t* pstate); static sllv_t* mapper_histogram_emit_auto(mapper_histogram_state_t* pstate); static sllv_t* mapper_histogram_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_histogram_setup = { .verb = "histogram", .pusage_func = mapper_histogram_usage, .pparse_func = mapper_histogram_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_histogram_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-f {a,b,c} Value-field names for histogram counts\n"); fprintf(o, "--lo {lo} Histogram low value\n"); fprintf(o, "--hi {hi} Histogram high value\n"); fprintf(o, "--nbins {n} Number of histogram bins\n"); fprintf(o, "--auto Automatically computes limits, ignoring --lo and --hi.\n"); fprintf(o, " Holds all values in memory before producing any output.\n"); fprintf(o, "-o {prefix} Prefix for output field name. Default: no prefix.\n"); fprintf(o, "Just a histogram. Input values < lo or > hi are not counted.\n"); } static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* value_field_names = NULL; double lo = 0.0; double hi = 0.0; int nbins = 0; int do_auto = FALSE; char* output_prefix = NULL; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &value_field_names); ap_define_float_flag(pstate, "--lo", &lo); ap_define_float_flag(pstate, "--hi", &hi); ap_define_int_flag(pstate, "--nbins", &nbins); ap_define_true_flag(pstate, "--auto", &do_auto); ap_define_string_flag(pstate, "-o", &output_prefix); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_histogram_usage(stderr, argv[0], verb); return NULL; } if (value_field_names == NULL) { mapper_histogram_usage(stderr, argv[0], verb); return NULL; } if (nbins == 0) { mapper_histogram_usage(stderr, argv[0], verb); return NULL; } if (lo == hi && !do_auto) { mapper_histogram_usage(stderr, argv[0], verb); return NULL; } return mapper_histogram_alloc(pstate, value_field_names, lo, nbins, hi, do_auto, output_prefix); } // ---------------------------------------------------------------- static mapper_t* mapper_histogram_alloc(ap_state_t* pargp, slls_t* value_field_names, double lo, int nbins, double hi, int do_auto, char* output_prefix) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_histogram_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_histogram_state_t)); pstate->pargp = pargp; pstate->value_field_names = value_field_names; pstate->nbins = nbins; pstate->pcounts_by_field = lhmsv_alloc(); for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; unsigned long long* pcounts = mlr_malloc_or_die(nbins * sizeof(unsigned long long)); for (int i = 0; i < nbins; i++) pcounts[i] = 0LL; lhmsv_put(pstate->pcounts_by_field, value_field_name, pcounts, NO_FREE); } if (do_auto) { pstate->pvectors_by_field = lhmsv_alloc(); for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; dvector_t* pvector = dvector_alloc(DVECTOR_INITIAL_SIZE); lhmsv_put(pstate->pvectors_by_field, value_field_name, pvector, NO_FREE); } } else { pstate->pvectors_by_field = NULL; pstate->lo = lo; pstate->hi = hi; pstate->mul = nbins / (hi - lo); } pstate->output_prefix = output_prefix; pmapper->pvstate = pstate; pmapper->pprocess_func = do_auto ? mapper_histogram_process_auto : mapper_histogram_process; pmapper->pfree_func = mapper_histogram_free; return pmapper; } static void mapper_histogram_free(mapper_t* pmapper, context_t* _) { mapper_histogram_state_t* pstate = pmapper->pvstate; slls_free(pstate->value_field_names); if (pstate->pcounts_by_field != NULL) { for (lhmsve_t* pe = pstate->pcounts_by_field->phead; pe != NULL; pe = pe->pnext) { unsigned long long* pcounts = pe->pvvalue; free(pcounts); } lhmsv_free(pstate->pcounts_by_field); } if (pstate->pvectors_by_field != NULL) { for (lhmsve_t* pe = pstate->pvectors_by_field->phead; pe != NULL; pe = pe->pnext) { dvector_t* pvector = pe->pvvalue; dvector_free(pvector); } lhmsv_free(pstate->pvectors_by_field); } ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_histogram_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_histogram_state_t* pstate = pvstate; if (pinrec != NULL) { mapper_histogram_ingest(pinrec, pstate); lrec_free(pinrec); return NULL; } else { return mapper_histogram_emit(pstate); } } static void mapper_histogram_ingest(lrec_t* pinrec, mapper_histogram_state_t* pstate) { for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; char* strv = lrec_get(pinrec, value_field_name); unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); if (strv != NULL) { double val = mlr_double_from_string_or_die(strv); if ((val >= pstate->lo) && (val < pstate->hi)) { int idx = (int)((val-pstate->lo) * pstate->mul); pcounts[idx]++; } else if (val == pstate->hi) { int idx = pstate->nbins - 1; pcounts[idx]++; } } } } static sllv_t* mapper_histogram_emit(mapper_histogram_state_t* pstate) { sllv_t* poutrecs = sllv_alloc(); lhmss_t* pcount_field_names = lhmss_alloc(); for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; char* count_field_name = (pstate->output_prefix == NULL) ? mlr_paste_3_strings(value_field_name, "_", "count") : mlr_paste_4_strings(pstate->output_prefix, value_field_name, "_", "count"); lhmss_put(pcount_field_names, mlr_strdup_or_die(value_field_name), count_field_name, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } for (int i = 0; i < pstate->nbins; i++) { lrec_t* poutrec = lrec_unbacked_alloc(); char* value = mlr_alloc_string_from_double(pstate->lo + i / pstate->mul, MLR_GLOBALS.ofmt); if (pstate->output_prefix == NULL) { lrec_put(poutrec, "bin_lo", value, FREE_ENTRY_VALUE); } else { lrec_put(poutrec, mlr_paste_2_strings(pstate->output_prefix, "bin_lo"), value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } value = mlr_alloc_string_from_double(pstate->lo + (i+1) / pstate->mul, MLR_GLOBALS.ofmt); if (pstate->output_prefix == NULL) { lrec_put(poutrec, "bin_hi", value, FREE_ENTRY_VALUE); } else { lrec_put(poutrec, mlr_paste_2_strings(pstate->output_prefix, "bin_hi"), value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); char* count_field_name = lhmss_get(pcount_field_names, value_field_name); value = mlr_alloc_string_from_ull(pcounts[i]); lrec_put(poutrec, mlr_strdup_or_die(count_field_name), value, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } sllv_append(poutrecs, poutrec); } lhmss_free(pcount_field_names); sllv_append(poutrecs, NULL); return poutrecs; } // ---------------------------------------------------------------- static sllv_t* mapper_histogram_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_histogram_state_t* pstate = pvstate; if (pinrec != NULL) { mapper_histogram_ingest_auto(pinrec, pstate); lrec_free(pinrec); return NULL; } else { return mapper_histogram_emit_auto(pstate); } } static void mapper_histogram_ingest_auto(lrec_t* pinrec, mapper_histogram_state_t* pstate) { for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; char* strv = lrec_get(pinrec, value_field_name); dvector_t* pvector = lhmsv_get(pstate->pvectors_by_field, value_field_name); if (strv != NULL) { dvector_append(pvector, mlr_double_from_string_or_die(strv)); } } } static sllv_t* mapper_histogram_emit_auto(mapper_histogram_state_t* pstate) { int have_lo_hi = FALSE; double lo = 0.0, hi = 1.0; int nbins = pstate->nbins; // Limits pass for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; dvector_t* pvector = lhmsv_get(pstate->pvectors_by_field, value_field_name); int n = pvector->size; for (int i = 0; i < n; i++) { double val = pvector->data[i]; if (have_lo_hi) { if (lo > val) lo = val; if (hi < val) hi = val; } else { lo = val; hi = val; have_lo_hi = TRUE; } } } // Binning pass double mul = nbins / (hi - lo); for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; dvector_t* pvector = lhmsv_get(pstate->pvectors_by_field, value_field_name); unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); int n = pvector->size; for (int i = 0; i < n; i++) { double val = pvector->data[i]; if ((val >= lo) && (val < hi)) { int idx = (int)((val-lo) * mul); pcounts[idx]++; } else if (val == hi) { int idx = nbins - 1; pcounts[idx]++; } } } // Emission pass sllv_t* poutrecs = sllv_alloc(); lhmss_t* pcount_field_names = lhmss_alloc(); for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; char* count_field_name = (pstate->output_prefix == NULL) ? mlr_paste_3_strings(value_field_name, "_", "count") : mlr_paste_4_strings(pstate->output_prefix, value_field_name, "_", "count"); lhmss_put(pcount_field_names, mlr_strdup_or_die(value_field_name), count_field_name, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } for (int i = 0; i < nbins; i++) { lrec_t* poutrec = lrec_unbacked_alloc(); char* value = mlr_alloc_string_from_double(lo + i / mul, MLR_GLOBALS.ofmt); if (pstate->output_prefix == NULL) { lrec_put(poutrec, "bin_lo", value, FREE_ENTRY_VALUE); } else { lrec_put(poutrec, mlr_paste_2_strings(pstate->output_prefix, "bin_lo"), value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } value = mlr_alloc_string_from_double(lo + (i+1) / mul, MLR_GLOBALS.ofmt); lrec_put(poutrec, "bin_hi", value, FREE_ENTRY_VALUE); for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->value; unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); char* count_field_name = lhmss_get(pcount_field_names, value_field_name); value = mlr_alloc_string_from_ull(pcounts[i]); lrec_put(poutrec, mlr_strdup_or_die(count_field_name), value, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); lhmss_free(pcount_field_names); return poutrecs; } miller-5.6.2/c/mapping/mapper_join.c000066400000000000000000000526121354153536500173540ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" #include "containers/join_bucket_keeper.h" #include "mapping/mappers.h" #include "input/lrec_readers.h" // ---------------------------------------------------------------- typedef struct _mapper_join_opts_t { char* left_prefix; char* right_prefix; slls_t* poutput_join_field_names; slls_t* pleft_join_field_names; slls_t* pright_join_field_names; char* output_join_field_names_cli_backing; char* left_join_field_names_cli_backing; char* right_join_field_names_cli_backing; int allow_unsorted_input; int emit_pairables; int emit_left_unpairables; int emit_right_unpairables; char* prepipe; char* left_file_name; // These allow the joiner to have its own different format/delimiter for // the left-file: cli_reader_opts_t reader_opts; } mapper_join_opts_t; typedef struct _mapper_join_state_t { mapper_join_opts_t* popts; hss_t* pleft_field_name_set; hss_t* pright_field_name_set; // For sorted input join_bucket_keeper_t* pjoin_bucket_keeper; // For unsorted input lhmslv_t* pleft_buckets_by_join_field_values; sllv_t* pleft_unpaired_records; } mapper_join_state_t; // ---------------------------------------------------------------- static void mapper_join_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_join_alloc(mapper_join_opts_t* popts); static void mapper_join_free(mapper_t* pmapper, context_t* _); static void ingest_left_file(mapper_join_state_t* pstate); static void mapper_join_form_pairs(sllv_t* pleft_records, lrec_t* pright_rec, mapper_join_state_t* pstate, sllv_t* pout_recs); static sllv_t* mapper_join_process_sorted(lrec_t* pright_rec, context_t* pctx, void* pvstate); static sllv_t* mapper_join_process_unsorted(lrec_t* pright_rec, context_t* pctx, void* pvstate); mapper_setup_t mapper_join_setup = { .verb = "join", .pusage_func = mapper_join_usage, .pparse_func = mapper_join_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_join_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Joins records from specified left file name with records from all file names\n"); fprintf(o, "at the end of the Miller argument list.\n"); fprintf(o, "Functionality is essentially the same as the system \"join\" command, but for\n"); fprintf(o, "record streams.\n"); fprintf(o, "Options:\n"); fprintf(o, " -f {left file name}\n"); fprintf(o, " -j {a,b,c} Comma-separated join-field names for output\n"); fprintf(o, " -l {a,b,c} Comma-separated join-field names for left input file;\n"); fprintf(o, " defaults to -j values if omitted.\n"); fprintf(o, " -r {a,b,c} Comma-separated join-field names for right input file(s);\n"); fprintf(o, " defaults to -j values if omitted.\n"); fprintf(o, " --lp {text} Additional prefix for non-join output field names from\n"); fprintf(o, " the left file\n"); fprintf(o, " --rp {text} Additional prefix for non-join output field names from\n"); fprintf(o, " the right file(s)\n"); fprintf(o, " --np Do not emit paired records\n"); fprintf(o, " --ul Emit unpaired records from the left file\n"); fprintf(o, " --ur Emit unpaired records from the right file(s)\n"); fprintf(o, " -s|--sorted-input Require sorted input: records must be sorted\n"); fprintf(o, " lexically by their join-field names, else not all records will\n"); fprintf(o, " be paired. The only likely use case for this is with a left\n"); fprintf(o, " file which is too big to fit into system memory otherwise.\n"); fprintf(o, " -u Enable unsorted input. (This is the default even without -u.)\n"); fprintf(o, " In this case, the entire left file will be loaded into memory.\n"); fprintf(o, " --prepipe {command} As in main input options; see %s --help for details.\n", MLR_GLOBALS.bargv0); fprintf(o, " If you wish to use a prepipe command for the main input as well\n"); fprintf(o, " as here, it must be specified there as well as here.\n"); fprintf(o, "File-format options default to those for the right file names on the Miller\n"); fprintf(o, "argument list, but may be overridden for the left file as follows. Please see\n"); fprintf(o, "the main \"%s --help\" for more information on syntax for these arguments.\n", argv0); fprintf(o, " -i {one of csv,dkvp,nidx,pprint,xtab}\n"); fprintf(o, " --irs {record-separator character}\n"); fprintf(o, " --ifs {field-separator character}\n"); fprintf(o, " --ips {pair-separator character}\n"); fprintf(o, " --repifs\n"); fprintf(o, " --repips\n"); fprintf(o, " --mmap\n"); fprintf(o, " --no-mmap\n"); fprintf(o, "Please use \"%s --usage-separator-options\" for information on specifying separators.\n", argv0); fprintf(o, "Please see http://johnkerl.org/miller/doc/reference.html for more information\n"); fprintf(o, "including examples.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* pmain_reader_opts, cli_writer_opts_t* __) { mapper_join_opts_t* popts = mlr_malloc_or_die(sizeof(mapper_join_opts_t)); cli_reader_opts_init(&popts->reader_opts); popts->left_prefix = NULL; popts->right_prefix = NULL; popts->prepipe = NULL; popts->left_file_name = NULL; popts->poutput_join_field_names = NULL; popts->pleft_join_field_names = NULL; popts->pright_join_field_names = NULL; popts->output_join_field_names_cli_backing = NULL; popts->left_join_field_names_cli_backing = NULL; popts->right_join_field_names_cli_backing = NULL; popts->emit_pairables = TRUE; popts->emit_left_unpairables = FALSE; popts->emit_right_unpairables = FALSE; popts->allow_unsorted_input = TRUE; int argi = *pargi; char* verb = argv[argi++]; for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { if (argv[argi][0] != '-') { break; // No more flag options to process } else if (cli_handle_reader_options(argv, argc, &argi, &popts->reader_opts)) { // handled } else if (streq(argv[argi], "--prepipe")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->prepipe = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "-f")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->left_file_name = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "-j")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->output_join_field_names_cli_backing = mlr_strdup_or_die(argv[argi+1]); popts->poutput_join_field_names = slls_from_line(popts->output_join_field_names_cli_backing, ',', FALSE); argi += 2; } else if (streq(argv[argi], "-l")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->left_join_field_names_cli_backing = mlr_strdup_or_die(argv[argi+1]); popts->pleft_join_field_names = slls_from_line(popts->left_join_field_names_cli_backing, ',', FALSE); argi += 2; } else if (streq(argv[argi], "-r")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->right_join_field_names_cli_backing = mlr_strdup_or_die(argv[argi+1]); popts->pright_join_field_names = slls_from_line(popts->right_join_field_names_cli_backing, ',', FALSE); argi += 2; } else if (streq(argv[argi], "--lp")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->left_prefix = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--rp")) { if ((argc - argi) < 2) { mapper_join_usage(stderr, argv[0], verb); return NULL; } popts->right_prefix = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--np")) { popts->emit_pairables = FALSE; argi += 1; } else if (streq(argv[argi], "--ul")) { popts->emit_left_unpairables = TRUE; argi += 1; } else if (streq(argv[argi], "--ur")) { popts->emit_right_unpairables = TRUE; argi += 1; } else if (streq(argv[argi], "-u")) { popts->allow_unsorted_input = TRUE; argi += 1; } else if (streq(argv[argi], "--sorted-input") || streq(argv[argi], "-s")) { popts->allow_unsorted_input = FALSE; argi += 1; } else { mapper_join_usage(stderr, argv[0], verb); return NULL; } } cli_merge_reader_opts(&popts->reader_opts, pmain_reader_opts); // popen is a stdio construct, not an mmap construct, and it can't be supported here. if (popts->prepipe != NULL) popts->reader_opts.use_mmap_for_read = FALSE; if (popts->left_file_name == NULL) { fprintf(stderr, "%s %s: need left file name\n", MLR_GLOBALS.bargv0, verb); mapper_join_usage(stderr, argv[0], verb); return NULL; } if (!popts->emit_pairables && !popts->emit_left_unpairables && !popts->emit_right_unpairables) { fprintf(stderr, "%s %s: all emit flags are unset; no output is possible.\n", MLR_GLOBALS.bargv0, verb); mapper_join_usage(stderr, argv[0], verb); return NULL; } if (popts->poutput_join_field_names == NULL) { fprintf(stderr, "%s %s: need output field names\n", MLR_GLOBALS.bargv0, verb); mapper_join_usage(stderr, argv[0], verb); return NULL; } if (popts->pleft_join_field_names == NULL) { popts->pleft_join_field_names = slls_copy(popts->poutput_join_field_names); } if (popts->pright_join_field_names == NULL) { popts->pright_join_field_names = slls_copy(popts->poutput_join_field_names); } int llen = popts->pleft_join_field_names->length; int rlen = popts->pright_join_field_names->length; int olen = popts->poutput_join_field_names->length; if (llen != rlen || llen != olen) { fprintf(stderr, "%s %s: must have equal left,right,output field-name lists; got lengths %d,%d,%d.\n", MLR_GLOBALS.bargv0, verb, llen, rlen, olen); exit(1); } *pargi = argi; return mapper_join_alloc(popts); } // ---------------------------------------------------------------- static mapper_t* mapper_join_alloc(mapper_join_opts_t* popts) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_join_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_join_state_t)); pstate->popts = popts; pstate->pleft_field_name_set = hss_from_slls(popts->pleft_join_field_names); pstate->pright_field_name_set = hss_from_slls(popts->pright_join_field_names); pstate->pjoin_bucket_keeper = join_bucket_keeper_alloc( popts->prepipe, popts->left_file_name, &popts->reader_opts, popts->pleft_join_field_names); pstate->pleft_buckets_by_join_field_values = NULL; pstate->pleft_unpaired_records = NULL; pmapper->pvstate = (void*)pstate; if (popts->allow_unsorted_input) { pmapper->pprocess_func = mapper_join_process_unsorted; } else { pmapper->pprocess_func = mapper_join_process_sorted; } pmapper->pfree_func = mapper_join_free; return pmapper; } // ---------------------------------------------------------------- static void mapper_join_free(mapper_t* pmapper, context_t* _) { mapper_join_state_t* pstate = pmapper->pvstate; if (pstate->pleft_buckets_by_join_field_values != NULL) { for (lhmslve_t* pe = pstate->pleft_buckets_by_join_field_values->phead; pe != NULL; pe = pe->pnext) { join_bucket_t* pbucket = pe->pvvalue; slls_free(pbucket->pleft_field_values); if (pbucket->precords) while (pbucket->precords->phead) lrec_free(sllv_pop(pbucket->precords)); sllv_free(pbucket->precords); free(pbucket); } lhmslv_free(pstate->pleft_buckets_by_join_field_values); } // The void-star payload, which is lrec_t*'s, should have been sllv_transferred out. // Misses should be detected by valgrind --leak-check=full, e.g. reg_test/run --valgrind. sllv_free(pstate->pleft_unpaired_records); join_bucket_keeper_free(pstate->pjoin_bucket_keeper, pstate->popts->prepipe); slls_free(pstate->popts->poutput_join_field_names); slls_free(pstate->popts->pleft_join_field_names); slls_free(pstate->popts->pright_join_field_names); free(pstate->popts->output_join_field_names_cli_backing); free(pstate->popts->left_join_field_names_cli_backing); free(pstate->popts->right_join_field_names_cli_backing); hss_free(pstate->pleft_field_name_set); hss_free(pstate->pright_field_name_set); free(pstate->popts); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_join_process_sorted(lrec_t* pright_rec, context_t* pctx, void* pvstate) { mapper_join_state_t* pstate = (mapper_join_state_t*)pvstate; join_bucket_keeper_t* pkeeper = pstate->pjoin_bucket_keeper; // keystroke-saver sllv_t* pleft_records = NULL; sllv_t* pbucket_left_unpaired = NULL; sllv_t* pout_recs = sllv_alloc(); if (pright_rec == NULL) { // End of input record stream join_bucket_keeper_emit(pkeeper, NULL, &pleft_records, &pbucket_left_unpaired); if (pstate->popts->emit_left_unpairables) { sllv_transfer(pout_recs, pbucket_left_unpaired); } else { if (pbucket_left_unpaired) while (pbucket_left_unpaired->phead) lrec_free(sllv_pop(pbucket_left_unpaired)); } // pleft_records are not caller-owned; we don't free them. sllv_free(pbucket_left_unpaired); sllv_append(pout_recs, NULL); return pout_recs; } int produced_right = FALSE; slls_t* pright_field_values = mlr_reference_selected_values_from_record(pright_rec, pstate->popts->pright_join_field_names); if (pright_field_values != NULL) { join_bucket_keeper_emit(pkeeper, pright_field_values, &pleft_records, &pbucket_left_unpaired); slls_free(pright_field_values); } if (pstate->popts->emit_left_unpairables) { if (pbucket_left_unpaired != NULL && pbucket_left_unpaired->length > 0) { sllv_transfer(pout_recs, pbucket_left_unpaired); } } if (pstate->popts->emit_right_unpairables) { if (pleft_records == NULL || pleft_records->length == 0) { sllv_append(pout_recs, pright_rec); produced_right = TRUE; } } if (pstate->popts->emit_pairables && pleft_records != NULL) { mapper_join_form_pairs(pleft_records, pright_rec, pstate, pout_recs); } if (!produced_right) lrec_free(pright_rec); // pleft_records are not caller-owned; we don't free them. if (pbucket_left_unpaired) while (pbucket_left_unpaired->phead) lrec_free(sllv_pop(pbucket_left_unpaired)); sllv_free(pbucket_left_unpaired); return pout_recs; } // ---------------------------------------------------------------- static sllv_t* mapper_join_process_unsorted(lrec_t* pright_rec, context_t* pctx, void* pvstate) { mapper_join_state_t* pstate = (mapper_join_state_t*)pvstate; if (pstate->pleft_unpaired_records == NULL) // First call pstate->pleft_unpaired_records = sllv_alloc(); // This can't be done in the CLI-parser since it requires information which // isn't known until after the CLI-parser is called. if (pstate->pleft_buckets_by_join_field_values == NULL) // First call ingest_left_file(pstate); if (pright_rec == NULL) { // End of input record stream if (pstate->popts->emit_left_unpairables) { sllv_t* poutrecs = sllv_alloc(); if (pstate->pleft_buckets_by_join_field_values != NULL) { // E.g. empty right input for (lhmslve_t* pe = pstate->pleft_buckets_by_join_field_values->phead; pe != NULL; pe = pe->pnext) { join_bucket_t* pbucket = pe->pvvalue; if (!pbucket->was_paired) { sllv_transfer(poutrecs, pbucket->precords); } } } sllv_transfer(poutrecs, pstate->pleft_unpaired_records); sllv_append(poutrecs, NULL); return poutrecs; } else { while (pstate->pleft_unpaired_records->phead) { lrec_t* prec = sllv_pop(pstate->pleft_unpaired_records); lrec_free(prec); } return sllv_single(NULL); } } slls_t* pright_field_values = mlr_reference_selected_values_from_record(pright_rec, pstate->popts->pright_join_field_names); if (pright_field_values != NULL) { join_bucket_t* pleft_bucket = lhmslv_get(pstate->pleft_buckets_by_join_field_values, pright_field_values); slls_free(pright_field_values); if (pleft_bucket == NULL) { if (pstate->popts->emit_right_unpairables) { return sllv_single(pright_rec); } else { lrec_free(pright_rec); return NULL; } } else if (pstate->popts->emit_pairables) { sllv_t* pout_recs = sllv_alloc(); pleft_bucket->was_paired = TRUE; mapper_join_form_pairs(pleft_bucket->precords, pright_rec, pstate, pout_recs); lrec_free(pright_rec); return pout_recs; } else { pleft_bucket->was_paired = TRUE; lrec_free(pright_rec); return NULL; } } else { if (pstate->popts->emit_right_unpairables) { return sllv_single(pright_rec); } else { lrec_free(pright_rec); return NULL; } } } // ---------------------------------------------------------------- // This could be optimized in several ways: // * Store the prefix length instead of computing its strlen inside // mlr_paste_2_strings // * Don't do the if-statement on each call: prefix is null or non-null // at the time the mapper is constructed. Use a function pointer. static inline char* compose_keys(char* prefix, char* key) { if (prefix == NULL) return mlr_strdup_or_die(key); else return mlr_paste_2_strings(prefix, key); } static void mapper_join_form_pairs(sllv_t* pleft_records, lrec_t* pright_rec, mapper_join_state_t* pstate, sllv_t* pout_recs) { for (sllve_t* pe = pleft_records->phead; pe != NULL; pe = pe->pnext) { lrec_t* pleft_rec = pe->pvvalue; lrec_t* pout_rec = lrec_unbacked_alloc(); // add the joined-on fields sllse_t* pg = pstate->popts->pleft_join_field_names->phead; sllse_t* ph = pstate->popts->pright_join_field_names->phead; sllse_t* pi = pstate->popts->poutput_join_field_names->phead; for ( ; pg != NULL && ph != NULL && pi != NULL; pg = pg->pnext, ph = ph->pnext, pi = pi->pnext) { char* v = lrec_get(pleft_rec, pg->value); if (v != NULL) { lrec_put(pout_rec, pi->value, mlr_strdup_or_die(v), FREE_ENTRY_VALUE); } } // add the left-record fields not already added for (lrece_t* pl = pleft_rec->phead; pl != NULL; pl = pl->pnext) { if (!hss_has(pstate->pleft_field_name_set, pl->key)) { lrec_put(pout_rec, compose_keys(pstate->popts->left_prefix, pl->key), mlr_strdup_or_die(pl->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } // add the right-record fields not already added for (lrece_t* pr = pright_rec->phead; pr != NULL; pr = pr->pnext) { if (!hss_has(pstate->pright_field_name_set, pr->key)) { lrec_put(pout_rec, compose_keys(pstate->popts->right_prefix, pr->key), mlr_strdup_or_die(pr->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } sllv_append(pout_recs, pout_rec); } } // ---------------------------------------------------------------- static void ingest_left_file(mapper_join_state_t* pstate) { mapper_join_opts_t* popts = pstate->popts; lrec_reader_t* plrec_reader = lrec_reader_alloc(&popts->reader_opts); void* pvhandle = plrec_reader->popen_func(plrec_reader->pvstate, pstate->popts->prepipe, pstate->popts->left_file_name); plrec_reader->psof_func(plrec_reader->pvstate, pvhandle); context_t ctx = { .nr = 0, .fnr = 0, .filenum = 1, .filename = pstate->popts->left_file_name, .force_eof = FALSE, .ips = NULL, .ifs = NULL, .irs = NULL, .ops = NULL, .ofs = NULL, .ors = NULL, .auto_line_term = NULL, }; context_t* pctx = &ctx; pstate->pleft_buckets_by_join_field_values = lhmslv_alloc(); while (TRUE) { lrec_t* pleft_rec = plrec_reader->pprocess_func(plrec_reader->pvstate, pvhandle, pctx); if (pleft_rec == NULL) break; // Mmapped input records are backed by their storage, i.e. they contain pointers into // mmaped file data. After the lrec reader is freed they will be invalid. So in this // ingestor we need to copy. lrec_t* pleft_copy = lrec_copy(pleft_rec); slls_t* pleft_field_values = mlr_reference_selected_values_from_record(pleft_copy, pstate->popts->pleft_join_field_names); if (pleft_field_values != NULL) { join_bucket_t* pbucket = lhmslv_get(pstate->pleft_buckets_by_join_field_values, pleft_field_values); if (pbucket == NULL) { // New key-field-value: new bucket and hash-map entry slls_t* pkey_field_values_copy = slls_copy(pleft_field_values); join_bucket_t* pbucket = mlr_malloc_or_die(sizeof(join_bucket_t)); pbucket->precords = sllv_alloc(); pbucket->was_paired = FALSE; pbucket->pleft_field_values = slls_copy(pleft_field_values); lhmslv_put(pstate->pleft_buckets_by_join_field_values, pkey_field_values_copy, pbucket, FREE_ENTRY_KEY); sllv_append(pbucket->precords, pleft_copy); } else { // Previously seen key-field-value: append record to bucket sllv_append(pbucket->precords, pleft_copy); } slls_free(pleft_field_values); } else { sllv_append(pstate->pleft_unpaired_records, pleft_copy); } lrec_free(pleft_rec); } plrec_reader->pclose_func(plrec_reader->pvstate, pvhandle, pstate->popts->prepipe); plrec_reader->pfree_func(plrec_reader); } miller-5.6.2/c/mapping/mapper_label.c000066400000000000000000000071741354153536500174770ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/hss.h" #include "containers/slls.h" #include "containers/sllv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" typedef struct _mapper_label_state_t { slls_t* pnames_as_list; hss_t* pnames_as_set; // needed for efficient deduplication } mapper_label_state_t; static void mapper_label_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_label_alloc(slls_t* pnames_as_list, hss_t* pnames_as_set); static void mapper_label_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_label_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_label_setup = { .verb = "label", .pusage_func = mapper_label_usage, .pparse_func = mapper_label_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_label_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s {new1,new2,new3,...}\n", argv0, verb); fprintf(o, "Given n comma-separated names, renames the first n fields of each record to\n"); fprintf(o, "have the respective name. (Fields past the nth are left with their original\n"); fprintf(o, "names.) Particularly useful with --inidx or --implicit-csv-header, to give\n"); fprintf(o, "useful names to otherwise integer-indexed fields.\n"); fprintf(o, "Examples:\n"); fprintf(o, " \"echo 'a b c d' | %s --inidx --odkvp cat\" gives \"1=a,2=b,3=c,4=d\"\n", argv0); fprintf(o, " \"echo 'a b c d' | %s --inidx --odkvp %s s,t\" gives \"s=a,t=b,3=c,4=d\"\n", argv0, verb); } static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int argi = *pargi; if ((argc - argi) < 2) { mapper_label_usage(stderr, argv[0], argv[argi]); return NULL; } char* verb = argv[argi]; char* names_as_string = argv[argi+1]; slls_t* pnames_as_list = slls_from_line(names_as_string, ',', FALSE); hss_t* pnames_as_set = hss_from_slls(pnames_as_list); if (slls_size(pnames_as_list) != hss_size(pnames_as_set)) { fprintf(stderr, "%s %s: labels must be unique; got \"%s\"\n", MLR_GLOBALS.bargv0, verb, names_as_string); exit(1); } *pargi += 2; return mapper_label_alloc(pnames_as_list, pnames_as_set); } // ---------------------------------------------------------------- static mapper_t* mapper_label_alloc(slls_t* pnames_as_list, hss_t* pnames_as_set) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_label_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_label_state_t)); pstate->pnames_as_list = pnames_as_list; pstate->pnames_as_set = pnames_as_set; pmapper->pvstate = (void*)pstate; pmapper->pprocess_func = mapper_label_process; pmapper->pfree_func = mapper_label_free; return pmapper; } static void mapper_label_free(mapper_t* pmapper, context_t* _) { mapper_label_state_t* pstate = pmapper->pvstate; if (pstate->pnames_as_list != NULL) slls_free(pstate->pnames_as_list); if (pstate->pnames_as_set != NULL) hss_free(pstate->pnames_as_set); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_label_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_label_state_t* pstate = (mapper_label_state_t*)pvstate; lrec_label(pinrec, pstate->pnames_as_list, pstate->pnames_as_set); return sllv_single(pinrec); } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_merge_fields.c000066400000000000000000000505611354153536500210430ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/mlr_globals.h" #include "lib/mlrstat.h" #include "cli/argparse.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "lib/mlrval.h" #include "mapping/mappers.h" #include "mapping/stats1_accumulators.h" typedef enum _merge_by_t { MERGE_BY_NAME_LIST, MERGE_BY_NAME_REGEX, MERGE_BY_COLLAPSING, MERGE_UNSPECIFIED } merge_by_t; #define SB_ALLOC_LENGTH 32 // ================================================================ struct _merge_fields_t; // forward reference for method definitions typedef void merge_fields_dingest_func_t(void* pvstate, double val); typedef void merge_fields_ningest_func_t(void* pvstate, mv_t* pval); typedef void merge_fields_emit_func_t(void* pvstate, char* value_field_name, char* merge_fields_name, lrec_t* poutrec); typedef void merge_fields_free_func_t(struct _merge_fields_t* pmerge_fields); typedef struct _merge_fields_t { void* pvstate; merge_fields_dingest_func_t* pdingest_func; merge_fields_ningest_func_t* pningest_func; merge_fields_emit_func_t* pemit_func; merge_fields_free_func_t* pfree_func; // virtual destructor } merge_fields_t; typedef merge_fields_t* merge_fields_alloc_func_t(char* value_field_name, char* merge_fields_name, int allow_int_float); typedef struct _mapper_merge_fields_state_t { slls_t* paccumulator_names; slls_t* pvalue_field_names; sllv_t* pvalue_field_regexes; char* output_field_basename; int allow_int_float; int do_interpolated_percentiles; int keep_input_fields; string_builder_t* psb; } mapper_merge_fields_state_t; // ---------------------------------------------------------------- static void mapper_merge_fields_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_merge_fields_alloc(slls_t* paccumulator_names, merge_by_t do_which, slls_t* pvalue_field_names, char* output_field_basename, int allow_int_float, int do_interpolated_percentiles, int keep_input_fields); static void mapper_merge_fields_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_merge_fields_process_by_name_list(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_merge_fields_process_by_name_regex(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_merge_fields_process_by_collapsing(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_merge_fields_setup = { .verb = "merge-fields", .pusage_func = mapper_merge_fields_usage, .pparse_func = mapper_merge_fields_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_merge_fields_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Computes univariate statistics for each input record, accumulated across\n"); fprintf(o, "specified fields.\n"); fprintf(o, "Options:\n"); fprintf(o, "-a {sum,count,...} Names of accumulators. One or more of:\n"); for (int i = 0; i < stats1_acc_lookup_table_length; i++) { fprintf(o, " %-9s %s\n", stats1_acc_lookup_table[i].name, stats1_acc_lookup_table[i].desc); } fprintf(o, "-f {a,b,c} Value-field names on which to compute statistics. Requires -o.\n"); fprintf(o, "-r {a,b,c} Regular expressions for value-field names on which to compute\n"); fprintf(o, " statistics. Requires -o.\n"); fprintf(o, "-c {a,b,c} Substrings for collapse mode. All fields which have the same names\n"); fprintf(o, " after removing substrings will be accumulated together. Please see\n"); fprintf(o, " examples below.\n"); fprintf(o, "-i Use interpolated percentiles, like R's type=7; default like type=1.\n"); fprintf(o, " Not sensical for string-valued fields.\n"); fprintf(o, "-o {name} Output field basename for -f/-r.\n"); fprintf(o, "-k Keep the input fields which contributed to the output statistics;\n"); fprintf(o, " the default is to omit them.\n"); fprintf(o, "-F Computes integerable things (e.g. count) in floating point.\n"); fprintf(o, "\n"); fprintf(o, "String-valued data make sense unless arithmetic on them is required,\n"); fprintf(o, "e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,\n"); fprintf(o, "numbers are less than strings.\n"); fprintf(o, "\n"); fprintf(o, "Example input data: \"a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8\".\n"); fprintf(o, "Example: %s %s -a sum,count -f a_in_x,a_out_x -o foo\n", argv0, verb); fprintf(o, " produces \"b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2\" since \"a_in_x,a_out_x\" are\n"); fprintf(o, " summed over.\n"); fprintf(o, "Example: %s %s -a sum,count -r in_,out_ -o bar\n", argv0, verb); fprintf(o, " produces \"bar_sum=15,bar_count=4\" since all four fields are summed over.\n"); fprintf(o, "Example: %s %s -a sum,count -c in_,out_\n", argv0, verb); fprintf(o, " produces \"a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1\"\n"); fprintf(o, " since \"a_in_x\" and \"a_out_x\" both collapse to \"a_x\", \"b_in_y\" collapses to\n"); fprintf(o, " \"b_y\", and \"b_out_x\" collapses to \"b_x\".\n"); } static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* paccumulator_names = NULL; slls_t* pvalue_field_names = NULL; char* output_field_basename = NULL; int allow_int_float = TRUE; int do_interpolated_percentiles = FALSE; int keep_input_fields = FALSE; merge_by_t do_which = MERGE_UNSPECIFIED; char* verb = argv[(*pargi)++]; int argi = *pargi; while (argi < argc && argv[argi][0] == '-') { if (streq(argv[argi], "-a")) { if (argc - argi < 2) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } if (paccumulator_names != NULL) slls_free(paccumulator_names); paccumulator_names = slls_from_line(argv[argi+1], ',', FALSE); argi += 2; } else if (streq(argv[argi], "-f")) { if (argc - argi < 2) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } if (pvalue_field_names != NULL) slls_free(pvalue_field_names); pvalue_field_names = slls_from_line(argv[argi+1], ',', FALSE); do_which = MERGE_BY_NAME_LIST; argi += 2; } else if (streq(argv[argi], "-r")) { if (argc - argi < 2) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } if (pvalue_field_names != NULL) slls_free(pvalue_field_names); pvalue_field_names = slls_from_line(argv[argi+1], ',', FALSE); do_which = MERGE_BY_NAME_REGEX; argi += 2; } else if (streq(argv[argi], "-c")) { if (argc - argi < 2) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } if (pvalue_field_names != NULL) { slls_free(pvalue_field_names); pvalue_field_names = NULL; } pvalue_field_names = slls_from_line(argv[argi+1], ',', FALSE); do_which = MERGE_BY_COLLAPSING; argi += 2; } else if (streq(argv[argi], "-o")) { if (argc - argi < 2) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } output_field_basename = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "-k")) { keep_input_fields = TRUE; argi += 1; } else if (streq(argv[argi], "-F")) { allow_int_float = FALSE; argi += 1; } else if (streq(argv[argi], "-i")) { do_interpolated_percentiles = TRUE; argi += 1; } else { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } } if (paccumulator_names == NULL) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } if (pvalue_field_names == NULL) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } if (output_field_basename == NULL) { if (do_which == MERGE_BY_NAME_LIST || do_which == MERGE_BY_NAME_REGEX) { mapper_merge_fields_usage(stderr, argv[0], verb); return NULL; } } *pargi = argi; return mapper_merge_fields_alloc(paccumulator_names, do_which, pvalue_field_names, output_field_basename, allow_int_float, do_interpolated_percentiles, keep_input_fields); } // ---------------------------------------------------------------- static mapper_t* mapper_merge_fields_alloc(slls_t* paccumulator_names, merge_by_t do_which, slls_t* pvalue_field_names, char* output_field_basename, int allow_int_float, int do_interpolated_percentiles, int keep_input_fields) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_merge_fields_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_merge_fields_state_t)); pstate->paccumulator_names = paccumulator_names; pstate->pvalue_field_names = pvalue_field_names; pstate->pvalue_field_regexes = sllv_alloc(); for (sllse_t* pa = pvalue_field_names->phead; pa != NULL; pa = pa->pnext) { char* value_field_name = pa->value; regex_t* pvalue_field_regex = mlr_malloc_or_die(sizeof(regex_t)); regcomp_or_die(pvalue_field_regex, value_field_name, 0); sllv_append(pstate->pvalue_field_regexes, pvalue_field_regex); } pstate->output_field_basename = output_field_basename; pstate->allow_int_float = allow_int_float; pstate->do_interpolated_percentiles = do_interpolated_percentiles; pstate->keep_input_fields = keep_input_fields; pstate->psb = sb_alloc(SB_ALLOC_LENGTH); pmapper->pvstate = pstate; pmapper->pprocess_func = (do_which == MERGE_BY_NAME_LIST) ? mapper_merge_fields_process_by_name_list : (do_which == MERGE_BY_NAME_REGEX) ? mapper_merge_fields_process_by_name_regex : mapper_merge_fields_process_by_collapsing; pmapper->pfree_func = mapper_merge_fields_free; return pmapper; } static void mapper_merge_fields_free(mapper_t* pmapper, context_t* _) { mapper_merge_fields_state_t* pstate = pmapper->pvstate; slls_free(pstate->paccumulator_names); slls_free(pstate->pvalue_field_names); for (sllve_t* pa = pstate->pvalue_field_regexes->phead; pa != NULL; pa = pa->pnext) { regex_t* pvalue_field_regex = pa->pvvalue; regfree(pvalue_field_regex); free(pvalue_field_regex); } sllv_free(pstate->pvalue_field_regexes); sb_free(pstate->psb); free(pstate); free(pmapper); } // ================================================================ static sllv_t* mapper_merge_fields_process_by_name_list(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of input stream return NULL; mapper_merge_fields_state_t* pstate = pvstate; // For percentiles there is one unique accumulator given (for example) five distinct // names p0,p25,p50,p75,p100. The input accumulators are unique: only one // percentile-keeper. There are multiple output accumulators: each references the same // underlying percentile-keeper but with distinct parameters. lhmsv_t* pinaccs = lhmsv_alloc(); lhmsv_t* poutaccs = lhmsv_alloc(); make_stats1_accs(pstate->output_field_basename, pstate->paccumulator_names, pstate->allow_int_float, pstate->do_interpolated_percentiles, pinaccs, poutaccs); for (sllse_t* pb = pstate->pvalue_field_names->phead; pb != NULL; pb = pb->pnext) { char* field_name = pb->value; char* value_field_sval = lrec_get(pinrec, field_name); if (value_field_sval == NULL) // Key not present continue; if (*value_field_sval == 0) { // Key present with null value if (!pstate->keep_input_fields) lrec_remove(pinrec, field_name); continue; } int have_dval = FALSE; int have_nval = FALSE; double value_field_dval = -999.0; mv_t value_field_nval = mv_absent(); for (lhmsve_t* pc = pinaccs->phead; pc != NULL; pc = pc->pnext) { stats1_acc_t* pacc = pc->pvvalue; if (pacc->pdingest_func != NULL) { if (!have_dval) { value_field_dval = mlr_double_from_string_or_die(value_field_sval); have_dval = TRUE; } pacc->pdingest_func(pacc->pvstate, value_field_dval); } if (pacc->pningest_func != NULL) { if (!have_nval) { value_field_nval = pstate->allow_int_float ? mv_scan_number_or_die(value_field_sval) : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); have_nval = TRUE; } pacc->pningest_func(pacc->pvstate, &value_field_nval); } if (pacc->psingest_func != NULL) { pacc->psingest_func(pacc->pvstate, value_field_sval); } } if (!pstate->keep_input_fields) lrec_remove(pinrec, field_name); } for (lhmsve_t* pz = poutaccs->phead; pz != NULL; pz = pz->pnext) { char* acc_name = pz->key; stats1_acc_t* pacc = pz->pvvalue; pacc->pemit_func(pacc->pvstate, pstate->output_field_basename, acc_name, TRUE, pinrec); pacc->pfree_func(pacc); } lhmsv_free(pinaccs); lhmsv_free(poutaccs); return sllv_single(pinrec); } // ---------------------------------------------------------------- static sllv_t* mapper_merge_fields_process_by_name_regex(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of input stream return NULL; mapper_merge_fields_state_t* pstate = pvstate; // For percentiles there is one unique accumulator given (for example) five distinct // names p0,p25,p50,p75,p100. The input accumulators are unique: only one // percentile-keeper. There are multiple output accumulators: each references the same // underlying percentile-keeper but with distinct parameters. lhmsv_t* pinaccs = lhmsv_alloc(); lhmsv_t* poutaccs = lhmsv_alloc(); make_stats1_accs(pstate->output_field_basename, pstate->paccumulator_names, pstate->allow_int_float, pstate->do_interpolated_percentiles, pinaccs, poutaccs); for (lrece_t* pb = pinrec->phead; pb != NULL; /* increment inside loop */ ) { char* field_name = pb->key; int matched = FALSE; for (sllve_t* pc = pstate->pvalue_field_regexes->phead; pc != NULL && !matched; pc = pc->pnext) { regex_t* pvalue_field_regex = pc->pvvalue; matched = regmatch_or_die(pvalue_field_regex, field_name, 0, NULL); if (matched) { char* value_field_sval = lrec_get(pinrec, field_name); if (value_field_sval != NULL) { // Key not present int have_dval = FALSE; int have_nval = FALSE; double value_field_dval = -999.0; mv_t value_field_nval = mv_absent(); if (*value_field_sval != 0) { // Key present with null value for (lhmsve_t* pd = pinaccs->phead; pd != NULL; pd = pd->pnext) { stats1_acc_t* pacc = pd->pvvalue; if (pacc->pdingest_func != NULL) { if (!have_dval) { value_field_dval = mlr_double_from_string_or_die(value_field_sval); have_dval = TRUE; } pacc->pdingest_func(pacc->pvstate, value_field_dval); } if (pacc->pningest_func != NULL) { if (!have_nval) { value_field_nval = pstate->allow_int_float ? mv_scan_number_or_die(value_field_sval) : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); have_nval = TRUE; } pacc->pningest_func(pacc->pvstate, &value_field_nval); } if (pacc->psingest_func != NULL) { pacc->psingest_func(pacc->pvstate, value_field_sval); } } } if (!pstate->keep_input_fields) { // We are modifying the lrec while iterating over it. lrece_t* pnext = pb->pnext; lrec_unlink_and_free(pinrec, pb); pb = pnext; } else { pb = pb->pnext; } } else { pb = pb->pnext; } } } if (!matched) pb = pb->pnext; } for (lhmsve_t* pz = poutaccs->phead; pz != NULL; pz = pz->pnext) { char* acc_name = pz->key; stats1_acc_t* pacc = pz->pvvalue; pacc->pemit_func(pacc->pvstate, pstate->output_field_basename, acc_name, TRUE, pinrec); pacc->pfree_func(pacc); } lhmsv_free(pinaccs); lhmsv_free(poutaccs); return sllv_single(pinrec); } // ---------------------------------------------------------------- // mlr merge -c in_,out_ -a sum // a_in_x 1 a_sum_x 3 // a_out_x 2 b_sum_y 4 // b_in_y 4 b_sum_x 8 // b_out_x 8 static sllv_t* mapper_merge_fields_process_by_collapsing(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of input stream return NULL; mapper_merge_fields_state_t* pstate = pvstate; // For percentiles there is one unique accumulator given (for example) five distinct // names p0,p25,p50,p75,p100. The input accumulators are unique: only one // percentile-keeper. There are multiple output accumulators: each references the same // underlying percentile-keeper but with distinct parameters. lhmsv_t* short_names_to_in_acc_maps = lhmsv_alloc(); lhmsv_t* short_names_to_out_acc_maps = lhmsv_alloc(); for (lrece_t* pa = pinrec->phead; pa != NULL; /* increment inside loop */ ) { char* field_name = pa->key; int matched = FALSE; for (sllve_t* pb = pstate->pvalue_field_regexes->phead; pb != NULL && !matched; pb = pb->pnext) { regex_t* pvalue_field_regex = pb->pvvalue; char* short_name = regex_sub(field_name, pvalue_field_regex, pstate->psb, "", &matched, NULL); if (matched) { lhmsv_t* in_acc_map_for_short_name = lhmsv_get(short_names_to_in_acc_maps, short_name); lhmsv_t* out_acc_map_for_short_name = lhmsv_get(short_names_to_out_acc_maps, short_name); if (out_acc_map_for_short_name == NULL) { // First such in_acc_map_for_short_name = lhmsv_alloc(); out_acc_map_for_short_name = lhmsv_alloc(); make_stats1_accs(short_name, pstate->paccumulator_names, pstate->allow_int_float, pstate->do_interpolated_percentiles, in_acc_map_for_short_name, out_acc_map_for_short_name); lhmsv_put(short_names_to_in_acc_maps, mlr_strdup_or_die(short_name), in_acc_map_for_short_name, FREE_ENTRY_KEY); lhmsv_put(short_names_to_out_acc_maps, mlr_strdup_or_die(short_name), out_acc_map_for_short_name, FREE_ENTRY_KEY); } char* value_field_sval = lrec_get(pinrec, field_name); if (value_field_sval != NULL) { // Key present if (*value_field_sval != 0) { // Key present with non-null value for (lhmsve_t* pd = in_acc_map_for_short_name->phead; pd != NULL; pd = pd->pnext) { stats1_acc_t* pacc = pd->pvvalue; int have_dval = FALSE; int have_nval = FALSE; double value_field_dval = -999.0; mv_t value_field_nval = mv_absent(); if (pacc->pdingest_func != NULL) { if (!have_dval) { value_field_dval = mlr_double_from_string_or_die(value_field_sval); have_dval = TRUE; } pacc->pdingest_func(pacc->pvstate, value_field_dval); } if (pacc->pningest_func != NULL) { if (!have_nval) { value_field_nval = pstate->allow_int_float ? mv_scan_number_or_die(value_field_sval) : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); have_nval = TRUE; } pacc->pningest_func(pacc->pvstate, &value_field_nval); } if (pacc->psingest_func != NULL) { pacc->psingest_func(pacc->pvstate, value_field_sval); } } } if (!pstate->keep_input_fields) { // We are modifying the lrec while iterating over it. lrece_t* pnext = pa->pnext; lrec_unlink_and_free(pinrec, pa); pa = pnext; } else { pa = pa->pnext; } } else { pa = pa->pnext; } free(short_name); } else { free(short_name); } } if (!matched) pa = pa->pnext; } for (lhmsve_t* pe = short_names_to_out_acc_maps->phead; pe != NULL; pe = pe->pnext) { char* short_name = pe->key; lhmsv_t* out_acc_map_for_short_name = pe->pvvalue; for (lhmsve_t* pf = out_acc_map_for_short_name->phead; pf != NULL; pf = pf->pnext) { char* acc_name = pf->key; stats1_acc_t* pacc = pf->pvvalue; pacc->pemit_func(pacc->pvstate, short_name, acc_name, TRUE, pinrec); } } for (lhmsve_t* pe = short_names_to_out_acc_maps->phead; pe != NULL; pe = pe->pnext) { lhmsv_t* out_acc_map_for_short_name = pe->pvvalue; for (lhmsve_t* pf = out_acc_map_for_short_name->phead; pf != NULL; pf = pf->pnext) { stats1_acc_t* pacc = pf->pvvalue; pacc->pfree_func(pacc); } lhmsv_free(out_acc_map_for_short_name); } for (lhmsve_t* pe = short_names_to_in_acc_maps->phead; pe != NULL; pe = pe->pnext) { lhmsv_t* in_acc_map_for_short_name = pe->pvvalue; lhmsv_free(in_acc_map_for_short_name); } lhmsv_free(short_names_to_in_acc_maps); lhmsv_free(short_names_to_out_acc_maps); return sllv_single(pinrec); } miller-5.6.2/c/mapping/mapper_most_or_least_frequent.c000066400000000000000000000224231354153536500231750ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define DEFAULT_MAX_OUTPUT_LENGTH 10LL #define DEFAULT_OUTPUT_FIELD_NAME "count" typedef struct _mapper_most_or_least_frequent_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; lhmslv_t* pcounts_by_group; long long max_output_length; int descending; int show_counts; char* output_field_name; } mapper_most_or_least_frequent_state_t; static void mapper_most_frequent_usage(FILE* o, char* argv0, char* verb); static void mapper_least_frequent_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_most_frequent_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_least_frequent_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_most_or_least_frequent_parse_cli(int* pargi, int argc, char** argv, int descending); static mapper_t* mapper_most_or_least_frequent_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, long long max_output_length, int descending, int show_counts, char* output_field_name); static void mapper_most_or_least_frequent_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_most_or_least_frequent_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // qsort callbacks static int descending_vcmp(const void* pva, const void* pvb); static int ascending_vcmp(const void* pva, const void* pvb); typedef struct _sort_pair_t { slls_t* pgroup_by_field_values; long long count; // signed, not unsigned, for sort-cmp callback } sort_pair_t; // ---------------------------------------------------------------- mapper_setup_t mapper_most_frequent_setup = { .verb = "most-frequent", .pusage_func = mapper_most_frequent_usage, .pparse_func = mapper_most_frequent_parse_cli, .ignores_input = FALSE, }; mapper_setup_t mapper_least_frequent_setup = { .verb = "least-frequent", .pusage_func = mapper_least_frequent_usage, .pparse_func = mapper_least_frequent_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_most_frequent_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Shows the most frequently occurring distinct values for specified field names.\n"); fprintf(o, "The first entry is the statistical mode; the remaining are runners-up.\n"); fprintf(o, "Options:\n"); fprintf(o, "-f {one or more comma-separated field names}. Required flag.\n"); fprintf(o, "-n {count}. Optional flag defaulting to %lld.\n", DEFAULT_MAX_OUTPUT_LENGTH); fprintf(o, "-b Suppress counts; show only field values.\n"); fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); fprintf(o, "See also \"%s %s\".\n", argv0, "least-frequent"); } static void mapper_least_frequent_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Shows the least frequently occurring distinct values for specified field names.\n"); fprintf(o, "The first entry is the statistical anti-mode; the remaining are runners-up.\n"); fprintf(o, "Options:\n"); fprintf(o, "-f {one or more comma-separated field names}. Required flag.\n"); fprintf(o, "-n {count}. Optional flag defaulting to %lld.\n", DEFAULT_MAX_OUTPUT_LENGTH); fprintf(o, "-b Suppress counts; show only field values.\n"); fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); fprintf(o, "See also \"%s %s\".\n", argv0, "most-frequent"); } static mapper_t* mapper_most_frequent_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { return mapper_most_or_least_frequent_parse_cli(pargi, argc, argv, TRUE); } static mapper_t* mapper_least_frequent_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { return mapper_most_or_least_frequent_parse_cli(pargi, argc, argv, FALSE); } static mapper_t* mapper_most_or_least_frequent_parse_cli(int* pargi, int argc, char** argv, int descending) { slls_t* pgroup_by_field_names = NULL; long long max_output_length = DEFAULT_MAX_OUTPUT_LENGTH; int show_counts = TRUE; char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pgroup_by_field_names); ap_define_long_long_flag(pstate, "-n", &max_output_length); ap_define_false_flag(pstate, "-b", &show_counts); ap_define_string_flag(pstate, "-o", &output_field_name); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_most_frequent_usage(stderr, argv[0], verb); return NULL; } if (pgroup_by_field_names == NULL) { mapper_most_frequent_usage(stderr, argv[0], verb); return NULL; } return mapper_most_or_least_frequent_alloc(pstate, pgroup_by_field_names, max_output_length, descending, show_counts, output_field_name); } // ---------------------------------------------------------------- static mapper_t* mapper_most_or_least_frequent_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, long long max_output_length, int descending, int show_counts, char* output_field_name) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_most_or_least_frequent_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_most_or_least_frequent_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->pcounts_by_group = lhmslv_alloc(); pstate->max_output_length = max_output_length; pstate->descending = descending; pstate->show_counts = show_counts; pstate->output_field_name = output_field_name; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_most_or_least_frequent_process; pmapper->pfree_func = mapper_most_or_least_frequent_free; return pmapper; } static void mapper_most_or_least_frequent_free(mapper_t* pmapper, context_t* _) { mapper_most_or_least_frequent_state_t* pstate = pmapper->pvstate; slls_free(pstate->pgroup_by_field_names); // lhmslv_free will free the keys: we only need to free the void-star values. for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { unsigned long long* pcount = pa->pvvalue; free(pcount); } lhmslv_free(pstate->pcounts_by_group); pstate->pgroup_by_field_names = NULL; pstate->pcounts_by_group = NULL; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_most_or_least_frequent_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_most_or_least_frequent_state_t* pstate = pvstate; if (pinrec != NULL) { // Not end of input record stream slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount == NULL) { pcount = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount = 1LL; lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); } else { (*pcount)++; } slls_free(pgroup_by_field_values); } lrec_free(pinrec); return NULL; } else { // End of input record stream // Copy keys and counters from hashmap to array for sorting int input_length = pstate->pcounts_by_group->num_occupied; sort_pair_t* sort_pairs = mlr_malloc_or_die(input_length * sizeof(sort_pair_t)); int i = 0; for (lhmslve_t* pe = pstate->pcounts_by_group->phead; pe != NULL; pe = pe->pnext) { sort_pairs[i].pgroup_by_field_values = pe->key; sort_pairs[i].count = *(long long *)pe->pvvalue; i++; } // Sort by count qsort(sort_pairs, input_length, sizeof(sort_pair_t), pstate->descending ? descending_vcmp : ascending_vcmp); // Emit top n sllv_t* poutrecs = sllv_alloc(); int output_length = (input_length < pstate->max_output_length) ? input_length : pstate->max_output_length; for (i = 0; i < output_length; i++) { lrec_t* poutrec = lrec_unbacked_alloc(); slls_t* pgroup_by_field_values = sort_pairs[i].pgroup_by_field_values; sllse_t* pb = pstate->pgroup_by_field_names->phead; sllse_t* pc = pgroup_by_field_values->phead; for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { lrec_put(poutrec, pb->value, pc->value, NO_FREE); } if (pstate->show_counts) { lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(sort_pairs[i].count), FREE_ENTRY_VALUE); } sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); free(sort_pairs); return poutrecs; } } static int descending_vcmp(const void* pva, const void* pvb) { const sort_pair_t* pa = pva; const sort_pair_t* pb = pvb; return pb->count - pa->count; } static int ascending_vcmp(const void* pva, const void* pvb) { const sort_pair_t* pa = pva; const sort_pair_t* pb = pvb; return pa->count - pb->count; } miller-5.6.2/c/mapping/mapper_nest.c000066400000000000000000000440751354153536500173720ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/string_builder.h" #include "containers/lhmss.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" // ================================================================ #define SB_ALLOC_LENGTH 128 typedef struct _mapper_nest_state_t { ap_state_t* pargp; char* field_name; char* nested_fs; char* nested_ps; int nested_ps_length; lhmslv_t* other_keys_to_other_values_to_buckets; string_builder_t* psb; regex_t regex; } mapper_nest_state_t; typedef struct _nest_bucket_t { lrec_t* prepresentative; sllv_t* pairs; } nest_bucket_t; static void mapper_nest_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_nest_alloc(ap_state_t* pargp, char* argv0, char* field_name, char* nested_fs, char* nested_ps, int do_explode, int do_pairs, int do_across_fields); static void mapper_nest_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_nest_explode_values_across_fields (lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_nest_implode_values_across_fields (lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_nest_explode_values_across_records (lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_nest_implode_values_across_records (lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_nest_explode_pairs_across_fields (lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_nest_explode_pairs_across_records (lrec_t* pinrec, context_t* pctx, void* pvstate); static nest_bucket_t* nest_bucket_alloc(lrec_t* prepresentative); static void nest_bucket_free(nest_bucket_t* pbucket); // ---------------------------------------------------------------- mapper_setup_t mapper_nest_setup = { .verb = "nest", .pusage_func = mapper_nest_usage, .pparse_func = mapper_nest_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_nest_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Explodes specified field values into separate fields/records, or reverses this.\n"); fprintf(o, "Options:\n"); fprintf(o, " --explode,--implode One is required.\n"); fprintf(o, " --values,--pairs One is required.\n"); fprintf(o, " --across-records,--across-fields One is required.\n"); fprintf(o, " -f {field name} Required.\n"); fprintf(o, " --nested-fs {string} Defaults to \";\". Field separator for nested values.\n"); fprintf(o, " --nested-ps {string} Defaults to \":\". Pair separator for nested key-value pairs.\n"); fprintf(o, " --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string}\n"); fprintf(o, " --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string}\n"); fprintf(o, "Please use \"%s --usage-separator-options\" for information on specifying separators.\n", argv0); fprintf(o, "\n"); fprintf(o, "Examples:\n"); fprintf(o, "\n"); fprintf(o, " %s %s --explode --values --across-records -f x\n", argv0, verb); fprintf(o, " with input record \"x=a;b;c,y=d\" produces output records\n"); fprintf(o, " \"x=a,y=d\"\n"); fprintf(o, " \"x=b,y=d\"\n"); fprintf(o, " \"x=c,y=d\"\n"); fprintf(o, " Use --implode to do the reverse.\n"); fprintf(o, "\n"); fprintf(o, " %s %s --explode --values --across-fields -f x\n", argv0, verb); fprintf(o, " with input record \"x=a;b;c,y=d\" produces output records\n"); fprintf(o, " \"x_1=a,x_2=b,x_3=c,y=d\"\n"); fprintf(o, " Use --implode to do the reverse.\n"); fprintf(o, "\n"); fprintf(o, " %s %s --explode --pairs --across-records -f x\n", argv0, verb); fprintf(o, " with input record \"x=a:1;b:2;c:3,y=d\" produces output records\n"); fprintf(o, " \"a=1,y=d\"\n"); fprintf(o, " \"b=2,y=d\"\n"); fprintf(o, " \"c=3,y=d\"\n"); fprintf(o, "\n"); fprintf(o, " %s %s --explode --pairs --across-fields -f x\n", argv0, verb); fprintf(o, " with input record \"x=a:1;b:2;c:3,y=d\" produces output records\n"); fprintf(o, " \"a=1,b=2,c=3,y=d\"\n"); fprintf(o, "\n"); fprintf(o, "Notes:\n"); fprintf(o, "* With --pairs, --implode doesn't make sense since the original field name has\n"); fprintf(o, " been lost.\n"); fprintf(o, "* The combination \"--implode --values --across-records\" is non-streaming:\n"); fprintf(o, " no output records are produced until all input records have been read. In\n"); fprintf(o, " particular, this means it won't work in tail -f contexts. But all other flag\n"); fprintf(o, " combinations result in streaming (tail -f friendly) data processing.\n"); fprintf(o, "* It's up to you to ensure that the nested-fs is distinct from your data's IFS:\n"); fprintf(o, " e.g. by default the former is semicolon and the latter is comma.\n"); fprintf(o, "See also %s reshape.\n", argv0); } static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { char* field_name = NULL; char* nested_fs = ";"; char* nested_ps = ":"; char* vfs = NULL; char* ivfs = NULL; int do_explode = NEITHER_TRUE_NOR_FALSE; int do_pairs = NEITHER_TRUE_NOR_FALSE; int do_across_fields = NEITHER_TRUE_NOR_FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_flag(pstate, "-f", &field_name); ap_define_string_flag(pstate, "--nested-fs", &nested_fs); ap_define_string_flag(pstate, "--nested-ps", &nested_ps); ap_define_true_flag(pstate, "--explode", &do_explode); ap_define_false_flag(pstate, "--implode", &do_explode); ap_define_true_flag(pstate, "--pairs", &do_pairs); ap_define_false_flag(pstate, "--values", &do_pairs); ap_define_true_flag(pstate, "--across-fields", &do_across_fields); ap_define_false_flag(pstate, "--across-records", &do_across_fields); ap_define_string_flag(pstate, "--evar", &vfs); ap_define_string_flag(pstate, "--ivar", &ivfs); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_nest_usage(stderr, argv[0], verb); return NULL; } if (vfs != NULL) { do_explode = TRUE; do_pairs = FALSE; do_across_fields = FALSE; nested_fs = vfs; } if (ivfs != NULL) { do_explode = FALSE; do_pairs = FALSE; do_across_fields = FALSE; nested_fs = ivfs; } if (field_name == NULL) { mapper_nest_usage(stderr, argv[0], verb); return NULL; } if (do_explode == NEITHER_TRUE_NOR_FALSE) { mapper_nest_usage(stderr, argv[0], verb); return NULL; } if (do_pairs == NEITHER_TRUE_NOR_FALSE) { mapper_nest_usage(stderr, argv[0], verb); return NULL; } if (do_across_fields == NEITHER_TRUE_NOR_FALSE) { mapper_nest_usage(stderr, argv[0], verb); return NULL; } if (do_pairs == TRUE && do_explode == FALSE) { mapper_nest_usage(stderr, argv[0], verb); return NULL; } return mapper_nest_alloc(pstate, argv[0], field_name, nested_fs, nested_ps, do_explode, do_pairs, do_across_fields); } // ---------------------------------------------------------------- static mapper_t* mapper_nest_alloc(ap_state_t* pargp, char* argv0, char* field_name, char* nested_fs, char* nested_ps, int do_explode, int do_pairs, int do_across_fields) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_nest_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_nest_state_t)); pstate->pargp = pargp; pstate->field_name = field_name; pstate->nested_fs = cli_sep_from_arg(nested_fs); pstate->nested_ps = cli_sep_from_arg(nested_ps); pstate->nested_ps_length = strlen(pstate->nested_ps); if (do_explode) { if (do_pairs) { pmapper->pprocess_func = do_across_fields ? mapper_nest_explode_pairs_across_fields : mapper_nest_explode_pairs_across_records; } else { pmapper->pprocess_func = do_across_fields ? mapper_nest_explode_values_across_fields : mapper_nest_explode_values_across_records; } } else { if (do_pairs) { // Should have been caught in CLI-parser. MLR_INTERNAL_CODING_ERROR(); } else { pmapper->pprocess_func = do_across_fields ? mapper_nest_implode_values_across_fields : mapper_nest_implode_values_across_records; } } pstate->other_keys_to_other_values_to_buckets = lhmslv_alloc(); pstate->psb = sb_alloc(SB_ALLOC_LENGTH); char* pattern = mlr_malloc_or_die(strlen(field_name) + 12); sprintf(pattern, "^%s_[0-9]+$", field_name); regcomp_or_die(&pstate->regex, pattern, REG_NOSUB); free(pattern); pmapper->pfree_func = mapper_nest_free; pmapper->pvstate = (void*)pstate; return pmapper; } static void mapper_nest_free(mapper_t* pmapper, context_t* _) { mapper_nest_state_t* pstate = pmapper->pvstate; if (pstate->other_keys_to_other_values_to_buckets != NULL) { for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { lhmslv_t* other_values_to_buckets = pe->pvvalue; for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { nest_bucket_t* pbucket = pf->pvvalue; nest_bucket_free(pbucket); } lhmslv_free(other_values_to_buckets); } lhmslv_free(pstate->other_keys_to_other_values_to_buckets); } sb_free(pstate->psb); free(pstate->nested_fs); free(pstate->nested_ps); regfree(&pstate->regex); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ================================================================ static sllv_t* mapper_nest_explode_values_across_fields(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of input stream return sllv_single(NULL); mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; lrece_t* pentry = NULL; char* field_value = lrec_get_ext(pinrec, pstate->field_name, &pentry); if (field_value == NULL) { return sllv_single(pinrec); } lrece_t* porig = pentry; char* sep = pstate->nested_fs; int seplen = strlen(sep); int i = 1; char* walker = field_value; char* piece = NULL; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { char istring_free_flags; char* istring = low_int_to_string(i, &istring_free_flags); char* new_key = mlr_paste_3_strings(pstate->field_name, "_", istring); if (istring_free_flags & FREE_ENTRY_KEY) free(istring); pentry = lrec_put_after(pinrec, pentry, new_key, mlr_strdup_or_die(piece), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); i++; } lrec_unlink_and_free(pinrec, porig); return sllv_single(pinrec);; } // ---------------------------------------------------------------- static sllv_t* mapper_nest_implode_values_across_fields(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; if (pinrec == NULL) // end of input stream return sllv_single(NULL); lrece_t* pprev = NULL; int field_count = 0; for (lrece_t* pe = pinrec->phead; pe != NULL; /* increment in loop */) { if (regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { if (field_count > 0) sb_append_string(pstate->psb, pstate->nested_fs); sb_append_string(pstate->psb, pe->value); field_count++; // Keep the location so we can implode in-place. if (pprev == NULL) pprev = pe->pprev; lrece_t* pnext = pe->pnext; lrec_unlink_and_free(pinrec, pe); pe = pnext; } else { pe = pe->pnext; } } if (field_count > 0) { if (pprev == NULL) // No record before the unlinked one, i.e. list-head. lrec_prepend(pinrec, pstate->field_name, sb_finish(pstate->psb), FREE_ENTRY_VALUE); else lrec_put_after(pinrec, pprev, pstate->field_name, sb_finish(pstate->psb), FREE_ENTRY_VALUE); } return sllv_single(pinrec); } // ---------------------------------------------------------------- static sllv_t* mapper_nest_explode_values_across_records(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of input stream return sllv_single(NULL); mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; char* field_value = lrec_get(pinrec, pstate->field_name); if (field_value == NULL) { return sllv_single(pinrec); } sllv_t* poutrecs = sllv_alloc(); char* sep = pstate->nested_fs; int seplen = strlen(sep); char* walker = field_value; char* piece = NULL; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { lrec_t* poutrec = lrec_copy(pinrec); lrec_put(poutrec, pstate->field_name, mlr_strdup_or_die(piece), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } lrec_free(pinrec); return poutrecs; } // ---------------------------------------------------------------- static sllv_t* mapper_nest_implode_values_across_records(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; if (pinrec != NULL) { // Not end of input stream lrece_t* px = NULL; char* field_value = lrec_get_ext(pinrec, pstate->field_name, &px); if (field_value == NULL) return sllv_single(pinrec); char* field_value_copy = mlr_strdup_or_die(field_value); // Don't lrec_remove pstate->field_name so we can implode in-place at the end. slls_t* other_keys = mlr_reference_keys_from_record_except(pinrec, px); lhmslv_t* other_values_to_buckets = lhmslv_get(pstate->other_keys_to_other_values_to_buckets, other_keys); if (other_values_to_buckets == NULL) { other_values_to_buckets = lhmslv_alloc(); lhmslv_put(pstate->other_keys_to_other_values_to_buckets, slls_copy(other_keys), other_values_to_buckets, FREE_ENTRY_KEY); } slls_t* other_values = mlr_reference_values_from_record_except(pinrec, px); nest_bucket_t* pbucket = lhmslv_get(other_values_to_buckets, other_values); if (pbucket == NULL) { pbucket = nest_bucket_alloc(pinrec); lhmslv_put(other_values_to_buckets, slls_copy(other_values), pbucket, FREE_ENTRY_KEY); } else { lrec_free(pinrec); } lrec_t* pair = lrec_unbacked_alloc(); lrec_put(pair, pstate->field_name, field_value_copy, FREE_ENTRY_VALUE); sllv_append(pbucket->pairs, pair); slls_free(other_values); slls_free(other_keys); return NULL; } else { // end of input stream sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { lhmslv_t* other_values_to_buckets = pe->pvvalue; for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { nest_bucket_t* pbucket = pf->pvvalue; lrec_t* poutrec = pbucket->prepresentative; pbucket->prepresentative = NULL; // ownership transfer for (sllve_t* pg = pbucket->pairs->phead; pg != NULL; pg = pg->pnext) { lrec_t* pr = pg->pvvalue; sb_append_string(pstate->psb, pr->phead->value); if (pg->pnext != NULL) sb_append_string(pstate->psb, pstate->nested_fs); } // pstate->field_name was already present so we'll overwrite it in-place here. lrec_put(poutrec, pstate->field_name, sb_finish(pstate->psb), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } } sllv_append(poutrecs, NULL); return poutrecs; } } // ---------------------------------------------------------------- static sllv_t* mapper_nest_explode_pairs_across_fields(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of input stream return sllv_single(NULL); mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; lrece_t* pentry = NULL; char* field_value = lrec_get_ext(pinrec, pstate->field_name, &pentry); if (field_value == NULL) { return sllv_single(pinrec); } lrece_t* porig = pentry; char* sep = pstate->nested_fs; int seplen = strlen(sep); char* walker = field_value; char* piece = NULL; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { char* found_sep = strstr(piece, pstate->nested_ps); if (found_sep != NULL) { // there is a pair *found_sep = 0; pentry = lrec_put_after(pinrec, pentry, mlr_strdup_or_die(piece), mlr_strdup_or_die(found_sep + pstate->nested_ps_length), FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } else { // there is not a pair pentry = lrec_put_after(pinrec, pentry, pstate->field_name, mlr_strdup_or_die(piece), FREE_ENTRY_VALUE); } } lrec_unlink_and_free(pinrec, porig); return sllv_single(pinrec); } // ---------------------------------------------------------------- static sllv_t* mapper_nest_explode_pairs_across_records(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of input stream return sllv_single(NULL); mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; char* field_value = lrec_get(pinrec, pstate->field_name); if (field_value == NULL) { return sllv_single(pinrec); } sllv_t* poutrecs = sllv_alloc(); char* sep = pstate->nested_fs; int seplen = strlen(sep); char* walker = field_value; char* piece = NULL; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { char* found_sep = strstr(piece, pstate->nested_ps); lrec_t* poutrec = lrec_copy(pinrec); lrece_t* pe = NULL; (void)lrec_get_ext(poutrec, pstate->field_name, &pe); // Put the new field where the old one was -- unless there's already a field with the new // name in which case replace its value. if (found_sep != NULL) { // there is a pair *found_sep = 0; lrec_put_after(poutrec, pe, mlr_strdup_or_die(piece), mlr_strdup_or_die(found_sep + pstate->nested_ps_length), FREE_ENTRY_KEY | FREE_ENTRY_VALUE); } else { // there is not a pair lrec_put_after(poutrec, pe, pstate->field_name, mlr_strdup_or_die(piece), FREE_ENTRY_VALUE); } lrec_unlink_and_free(poutrec, pe); sllv_append(poutrecs, poutrec); } lrec_free(pinrec); return poutrecs; } // ---------------------------------------------------------------- static nest_bucket_t* nest_bucket_alloc(lrec_t* prepresentative) { nest_bucket_t* pbucket = mlr_malloc_or_die(sizeof(nest_bucket_t)); pbucket->prepresentative = prepresentative; pbucket->pairs = sllv_alloc(); return pbucket; } static void nest_bucket_free(nest_bucket_t* pbucket) { lrec_free(pbucket->prepresentative); for (sllve_t* pe = pbucket->pairs->phead; pe != NULL; pe = pe->pnext) { lrec_t* pair = pe->pvvalue; lrec_free(pair); } sllv_free(pbucket->pairs); free(pbucket); } miller-5.6.2/c/mapping/mapper_nothing.c000066400000000000000000000040621354153536500200570ustar00rootroot00000000000000#include "cli/argparse.h" #include "mapping/mappers.h" #include "lib/mlrutil.h" #include "containers/sllv.h" static void mapper_nothing_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_nothing_alloc(); static void mapper_nothing_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_nothing_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_nothing_setup = { .verb = "nothing", .pusage_func = mapper_nothing_usage, .pparse_func = mapper_nothing_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_nothing_usage(stderr, argv[0], argv[*pargi]); return NULL; } *pargi += 1; mapper_t* pmapper = mapper_nothing_alloc(); return pmapper; } static void mapper_nothing_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Drops all input records. Useful for testing, or after tee/print/etc. have\n"); fprintf(o, "produced other output.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_nothing_alloc(ap_state_t* pargp, int do_counters, char* counter_field_name) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); pmapper->pvstate = NULL; pmapper->pprocess_func = mapper_nothing_process; pmapper->pfree_func = mapper_nothing_free; return pmapper; } static void mapper_nothing_free(mapper_t* pmapper, context_t* _) { free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_nothing_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { lrec_free(pinrec); return NULL; } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_put_or_filter.c000066400000000000000000000651371354153536500213000ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/string_builder.h" #include "cli/mlrcli.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "containers/lhmsv.h" #include "containers/mlhmmv.h" #include "parsing/mlr_dsl_wrapper.h" #include "dsl/rval_evaluators.h" #include "dsl/mlr_dsl_cst.h" #include "mapping/mappers.h" #define DEFAULT_OOSVAR_FLATTEN_SEPARATOR ":" // ---------------------------------------------------------------- typedef struct _mapper_put_or_filter_state_t { char* mlr_dsl_expression; mlr_dsl_ast_t* past; mlr_dsl_cst_t* pcst; int at_begin; mlhmmv_root_t* poosvars; int trace_execution; char* oosvar_flatten_separator; int flush_every_record; cli_writer_opts_t* pwriter_opts; local_stack_t* plocal_stack; loop_stack_t* ploop_stack; int put_output_disabled; // mlr put -q int do_final_filter; // mlr filter int negate_final_filter; // mlr filter -x } mapper_put_or_filter_state_t; typedef struct _expression_info_t { char* filename; char* expression; } expression_info_t; // ---------------------------------------------------------------- static void mapper_put_or_filter_usage(FILE* o, char* argv0, char* verb); static void mapper_put_usage(FILE* o, char* argv0, char* verb); static void mapper_filter_usage(FILE* o, char* argv0, char* verb); static void shared_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* shared_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_put_or_filter_alloc( char* mlr_dsl_expression, int print_ast, int trace_stack_allocation, int trace_execution, mlr_dsl_ast_t* past, int put_output_disabled, // mlr put -q int do_final_filter, // mlr filter int negate_final_filter, // mlr filter -x int type_inferencing, char* oosvar_flatten_separator, int flush_every_record, cli_writer_opts_t* pwriter_opts, cli_writer_opts_t* pmain_writer_opts); static void mapper_put_or_filter_free(mapper_t* pmapper, context_t* pctx); static sllv_t* mapper_put_or_filter_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_put_setup = { .verb = "put", .pusage_func = mapper_put_usage, .pparse_func = mapper_put_parse_cli, .ignores_input = FALSE, }; mapper_setup_t mapper_filter_setup = { .verb = "filter", .pusage_func = mapper_filter_usage, .pparse_func = mapper_filter_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_put_or_filter_usage(FILE* o, char* argv0, char* verb) { if (streq(verb, "filter")) { mapper_filter_usage(o, argv0, verb); } else if (streq(verb, "put")) { mapper_put_usage(o, argv0, verb); } else { fprintf(stderr, "%s: internal coding error detected at file %s line %d.\n", MLR_GLOBALS.bargv0, __FILE__, __LINE__); exit(1); } } // ---------------------------------------------------------------- static void mapper_put_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {expression}\n", argv0, verb); fprintf(o, "Adds/updates specified field(s). Expressions are semicolon-separated and must\n"); fprintf(o, "either be assignments, or evaluate to boolean. Booleans with following\n"); fprintf(o, "statements in curly braces control whether those statements are executed;\n"); fprintf(o, "booleans without following curly braces do nothing except side effects (e.g.\n"); fprintf(o, "regex-captures into \\1, \\2, etc.).\n"); fprintf(o, "\n"); shared_usage(o, argv0, verb); fprintf(o, "\n"); fprintf(o, "Examples:\n"); fprintf(o, " %s %s '$y = log10($x); $z = sqrt($y)'\n", argv0, verb); fprintf(o, " %s %s '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0\n", argv0, verb); fprintf(o, " %s %s '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements\n", argv0, verb); fprintf(o, " %s %s '$a =~ \"([a-z]+)_([0-9]+); $b = \"left_\\1\"; $c = \"right_\\2\"'\n", argv0, verb); fprintf(o, " %s %s '$a =~ \"([a-z]+)_([0-9]+) { $b = \"left_\\1\"; $c = \"right_\\2\" }'\n", argv0, verb); fprintf(o, " %s %s '$filename = FILENAME'\n", argv0, verb); fprintf(o, " %s %s '$colored_shape = $color . \"_\" . $shape'\n", argv0, verb); fprintf(o, " %s %s '$y = cos($theta); $z = atan2($y, $x)'\n", argv0, verb); fprintf(o, " %s %s '$name = sub($name, \"http.*com\"i, \"\")'\n", argv0, verb); fprintf(o, " %s %s -q '@sum += $x; end {emit @sum}'\n", argv0, verb); fprintf(o, " %s %s -q '@sum[$a] += $x; end {emit @sum, \"a\"}'\n", argv0, verb); fprintf(o, " %s %s -q '@sum[$a][$b] += $x; end {emit @sum, \"a\", \"b\"}'\n", argv0, verb); fprintf(o, " %s %s -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}'\n", argv0, verb); fprintf(o, " %s %s -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}'\n", argv0, verb); fprintf(o, " %s %s '\n", argv0, verb); fprintf(o, " $x = 1;\n"); fprintf(o, " #$y = 2;\n"); fprintf(o, " $z = 3\n"); fprintf(o, " '\n"); fprintf(o, "\n"); fprintf(o, "Please see also '%s -k' for examples using redirected output.\n", argv0); fprintf(o, "\n"); fprintf(o, "Please see http://johnkerl.org/miller/doc/reference.html for more information\n"); fprintf(o, "including function list. Or \"%s -f\".\n", argv0); fprintf(o, "Please see in particular:\n"); fprintf(o, " http://www.johnkerl.org/miller/doc/reference.html#put\n"); } // ---------------------------------------------------------------- static void mapper_filter_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {expression}\n", argv0, verb); fprintf(o, "Prints records for which {expression} evaluates to true.\n"); fprintf(o, "If there are multiple semicolon-delimited expressions, all of them are\n"); fprintf(o, "evaluated and the last one is used as the filter criterion.\n"); fprintf(o, "\n"); shared_usage(o, argv0, verb); fprintf(o, "\n"); fprintf(o, "Examples:\n"); fprintf(o, " %s %s 'log10($count) > 4.0'\n", argv0, verb); fprintf(o, " %s %s 'FNR == 2 (second record in each file)'\n", argv0, verb); fprintf(o, " %s %s 'urand() < 0.001' (subsampling)\n", argv0, verb); fprintf(o, " %s %s '$color != \"blue\" && $value > 4.2'\n", argv0, verb); fprintf(o, " %s %s '($x<.5 && $y<.5) || ($x>.5 && $y>.5)'\n", argv0, verb); fprintf(o, " %s %s '($name =~ \"^sys.*east$\") || ($name =~ \"^dev.[0-9]+\"i)'\n", argv0, verb); fprintf(o, " %s %s '$ab = $a+$b; $cd = $c+$d; $ab != $cd'\n", argv0, verb); fprintf(o, " %s %s '\n", argv0, verb); fprintf(o, " NR == 1 ||\n"); fprintf(o, " #NR == 2 ||\n"); fprintf(o, " NR == 3\n"); fprintf(o, " '\n"); fprintf(o, "\n"); fprintf(o, "Please see http://johnkerl.org/miller/doc/reference.html for more information\n"); fprintf(o, "including function list. Or \"%s -f\". Please also also \"%s grep\" which is\n", argv0, argv0); fprintf(o, "useful when you don't yet know which field name(s) you're looking for.\n"); } static void shared_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Conversion options:\n"); fprintf(o, "-S: Keeps field values as strings with no type inference to int or float.\n"); fprintf(o, "-F: Keeps field values as strings or floats with no inference to int.\n"); fprintf(o, "All field values are type-inferred to int/float/string unless this behavior is\n"); fprintf(o, "suppressed with -S or -F.\n"); fprintf(o, "\n"); fprintf(o, "Output/formatting options:\n"); fprintf(o, "--oflatsep {string}: Separator to use when flattening multi-level @-variables\n"); fprintf(o, " to output records for emit. Default \"%s\".\n", DEFAULT_OOSVAR_FLATTEN_SEPARATOR); fprintf(o, "--jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.\n"); fprintf(o, "--jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.\n"); fprintf(o, "Any of the output-format command-line flags (see %s -h). Example: using\n", MLR_GLOBALS.bargv0); fprintf(o, " %s --icsv --opprint ... then put --ojson 'tee > \"mytap-\".$a.\".dat\", $*' then ...\n", MLR_GLOBALS.bargv0); fprintf(o, "the input is CSV, the output is pretty-print tabular, but the tee-file output\n"); fprintf(o, "is written in JSON format.\n"); fprintf(o, "--no-fflush: for emit, tee, print, and dump, don't call fflush() after every\n"); fprintf(o, " record.\n"); fprintf(o, "\n"); fprintf(o, "Expression-specification options:\n"); fprintf(o, "-f {filename}: the DSL expression is taken from the specified file rather\n"); fprintf(o, " than from the command line. Outer single quotes wrapping the expression\n"); fprintf(o, " should not be placed in the file. If -f is specified more than once,\n"); fprintf(o, " all input files specified using -f are concatenated to produce the expression.\n"); fprintf(o, " (For example, you can define functions in one file and call them from another.)\n"); fprintf(o, "-e {expression}: You can use this after -f to add an expression. Example use\n"); fprintf(o, " case: define functions/subroutines in a file you specify with -f, then call\n"); fprintf(o, " them with an expression you specify with -e.\n"); fprintf(o, "(If you mix -e and -f then the expressions are evaluated in the order encountered.\n"); fprintf(o, "Since the expression pieces are simply concatenated, please be sure to use intervening\n"); fprintf(o, "semicolons to separate expressions.)\n"); fprintf(o, "\n"); fprintf(o, "Tracing options:\n"); fprintf(o, "-v: Prints the expressions's AST (abstract syntax tree), which gives\n"); fprintf(o, " full transparency on the precedence and associativity rules of\n"); fprintf(o, " Miller's grammar, to stdout.\n"); fprintf(o, "-a: Prints a low-level stack-allocation trace to stdout.\n"); fprintf(o, "-t: Prints a low-level parser trace to stderr.\n"); fprintf(o, "-T: Prints a every statement to stderr as it is executed.\n"); fprintf(o, "\n"); fprintf(o, "Other options:\n"); if (streq(verb, "put")) { fprintf(o, "-q: Does not include the modified record in the output stream. Useful for when\n"); fprintf(o, " all desired output is in begin and/or end blocks.\n"); } if (streq(verb, "filter")) { fprintf(o, "-x: Prints records for which {expression} evaluates to false.\n"); } fprintf(o, "\n"); fprintf(o, "Please use a dollar sign for field names and double-quotes for string\n"); fprintf(o, "literals. If field names have special characters such as \".\" then you might\n"); fprintf(o, "use braces, e.g. '${field.name}'. Miller built-in variables are\n"); fprintf(o, "NF NR FNR FILENUM FILENAME M_PI M_E, and ENV[\"namegoeshere\"] to access environment\n"); fprintf(o, "variables. The environment-variable name may be an expression, e.g. a field\n"); fprintf(o, "value.\n"); fprintf(o, "\n"); fprintf(o, "Use # to comment to end of line.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) { return shared_parse_cli(pargi, argc, argv, _, pmain_writer_opts); } static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) { return shared_parse_cli(pargi, argc, argv, _, pmain_writer_opts); } static mapper_t* shared_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) { sllv_t* expression_infos = sllv_alloc(); char* mlr_dsl_expression = NULL; int put_output_disabled = FALSE; int do_final_filter = FALSE; int negate_final_filter = FALSE; int type_inferencing = TYPE_INFER_STRING_FLOAT_INT; int print_ast = FALSE; int trace_stack_allocation = FALSE; int trace_parse = FALSE; int trace_execution = FALSE; char* oosvar_flatten_separator = DEFAULT_OOSVAR_FLATTEN_SEPARATOR; int flush_every_record = TRUE; cli_writer_opts_t* pwriter_opts = mlr_malloc_or_die(sizeof(cli_writer_opts_t)); cli_writer_opts_init(pwriter_opts); int argi = *pargi; if ((argc - argi) < 1) { mapper_put_or_filter_usage(stderr, argv[0], argv[argi]); return NULL; } char* verb = argv[argi++]; if (streq(verb, "filter")) do_final_filter = TRUE; cli_writer_opts_init(pwriter_opts); for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { if (argv[argi][0] != '-') { break; // No more flag options to process } else if (cli_handle_writer_options(argv, argc, &argi, pwriter_opts)) { // handled } else if (streq(argv[argi], "-f")) { if ((argc - argi) < 2) { mapper_put_or_filter_usage(stderr, argv[0], verb); return NULL; } expression_info_t* pexpression_info = mlr_malloc_or_die(sizeof(expression_info_t)); pexpression_info->filename = argv[argi+1]; pexpression_info->expression = NULL; sllv_append(expression_infos, pexpression_info); argi += 2; } else if (streq(argv[argi], "-e")) { if ((argc - argi) < 2) { mapper_put_or_filter_usage(stderr, argv[0], verb); return NULL; } expression_info_t* pexpression_info = mlr_malloc_or_die(sizeof(expression_info_t)); pexpression_info->filename = NULL; pexpression_info->expression = argv[argi+1]; sllv_append(expression_infos, pexpression_info); argi += 2; } else if (streq(argv[argi], "-v")) { print_ast = TRUE; argi += 1; } else if (streq(argv[argi], "-a")) { trace_stack_allocation = TRUE; argi += 1; } else if (streq(argv[argi], "-t")) { trace_parse = TRUE; argi += 1; } else if (streq(argv[argi], "-T")) { trace_execution = TRUE; argi += 1; } else if (streq(argv[argi], "-q") && streq(verb, "put")) { put_output_disabled = TRUE; argi += 1; } else if (streq(argv[argi], "-x") && streq(verb, "filter")) { negate_final_filter = TRUE; argi += 1; } else if (streq(argv[argi], "-S")) { type_inferencing = TYPE_INFER_STRING_ONLY; argi += 1; } else if (streq(argv[argi], "-F")) { type_inferencing = TYPE_INFER_STRING_FLOAT; argi += 1; } else if (streq(argv[argi], "--oflatsep")) { if ((argc - argi) < 2) { mapper_put_or_filter_usage(stderr, argv[0], verb); return NULL; } oosvar_flatten_separator = argv[argi+1]; argi += 2; } else if (streq(argv[argi], "--no-fflush") || streq(argv[argi], "--no-flush")) { flush_every_record = FALSE; argi += 1; } else { mapper_put_or_filter_usage(stderr, argv[0], verb); return NULL; } } if (expression_infos->length == 0) { if ((argc - argi) < 1) { mapper_put_or_filter_usage(stderr, argv[0], verb); return NULL; } mlr_dsl_expression = mlr_strdup_or_die(argv[argi++]); } else { string_builder_t *psb = sb_alloc(1024); for (sllve_t* pe = expression_infos->phead; pe != NULL; pe = pe->pnext) { expression_info_t* pexpression_info = pe->pvvalue; if (pexpression_info->filename != NULL) { char* mlr_dsl_expression_piece = read_file_into_memory(pexpression_info->filename, NULL); sb_append_string(psb, mlr_dsl_expression_piece); free(mlr_dsl_expression_piece); } else { sb_append_string(psb, pexpression_info->expression); } free(pexpression_info); } mlr_dsl_expression = sb_finish(psb); sb_free(psb); } sllv_free(expression_infos); // On Linux, '$x=4' is correct; single-quotes inhibit shell-variable expansion which is desired // since Miller variables also start with $. In either case, the shell removes the outermost // quotes before passing the string to us. On Windows, though, double-quotes are the right // thing and are removed for us, while single-quotes are passed through to us. if (mlr_dsl_expression[0] == '\'') { int len = strlen(mlr_dsl_expression); if (len >= 2 && mlr_dsl_expression[len-1] == '\'') { mlr_dsl_expression[0] = ' '; mlr_dsl_expression[len-1] = 0; } } mlr_dsl_ast_t* past = mlr_dsl_parse(mlr_dsl_expression, trace_parse); if (past == NULL) { fprintf(stderr, "%s %s: syntax error on DSL parse of '%s'\n", MLR_GLOBALS.bargv0, verb, mlr_dsl_expression); return NULL; } // For just dev-testing the parser, you can do // mlr put -v 'expression goes here' /dev/null if (print_ast) { printf("RAW AST:\n"); printf("\n"); mlr_dsl_ast_print(past); } *pargi = argi; return mapper_put_or_filter_alloc(mlr_dsl_expression, print_ast, trace_stack_allocation, trace_execution, past, put_output_disabled, do_final_filter, negate_final_filter, type_inferencing, oosvar_flatten_separator, flush_every_record, pwriter_opts, pmain_writer_opts); } // ---------------------------------------------------------------- static mapper_t* mapper_put_or_filter_alloc( char* mlr_dsl_expression, int print_ast, int trace_stack_allocation, int trace_execution, mlr_dsl_ast_t* past, int put_output_disabled, // mlr put -q int do_final_filter, // mlr filter int negate_final_filter, // mlr filter -x int type_inferencing, char* oosvar_flatten_separator, int flush_every_record, cli_writer_opts_t* pwriter_opts, cli_writer_opts_t* pmain_writer_opts) { mapper_put_or_filter_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_put_or_filter_state_t)); // Retain the string contents along with any in-pointers from the AST/CST pstate->mlr_dsl_expression = mlr_dsl_expression; pstate->past = past; pstate->pcst = mlr_dsl_cst_alloc(past, print_ast, trace_stack_allocation, type_inferencing, flush_every_record, do_final_filter, negate_final_filter); pstate->at_begin = TRUE; pstate->put_output_disabled = put_output_disabled; pstate->poosvars = mlhmmv_root_alloc(); pstate->trace_execution = trace_execution; pstate->oosvar_flatten_separator = oosvar_flatten_separator; pstate->flush_every_record = flush_every_record; pstate->plocal_stack = local_stack_alloc(); pstate->ploop_stack = loop_stack_alloc(); pstate->pwriter_opts = pwriter_opts; cli_merge_writer_opts(pstate->pwriter_opts, pmain_writer_opts); mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); pmapper->pvstate = (void*)pstate; pmapper->pprocess_func = mapper_put_or_filter_process; pmapper->pfree_func = mapper_put_or_filter_free; return pmapper; } static void mapper_put_or_filter_free(mapper_t* pmapper, context_t* pctx) { mapper_put_or_filter_state_t* pstate = pmapper->pvstate; free(pstate->mlr_dsl_expression); mlhmmv_root_free(pstate->poosvars); local_stack_free(pstate->plocal_stack); loop_stack_free(pstate->ploop_stack); mlr_dsl_cst_free(pstate->pcst, pctx); // Free what's left of the stripped AST after the CST reorganized it. mlr_dsl_ast_free(pstate->past); free(pstate->pwriter_opts); free(pstate); free(pmapper); } // ---------------------------------------------------------------- // The typed-overlay holds intermediate values such as in // // echo x=1 | mlr put '$y = string($x); $z = $y . $y' // // because otherwise // * lrecs store insertion-ordered maps of string to string (since this is ultimately file I/O); // * types are inferred at entry to put; // * x=1 would be inferred to int; string($x) would be string; written back to the // lrec, y would be "1" which would be re-inferred to int. // // So the typed overlay allows us to remember that y is string "1" not integer 1. // // But this raises the question: why stop here? Why not have lrecs be insertion-ordered maps from // string to mlrval? Then we could preserve types for the duration of each lrec, not just for // the duration of the put operation. Reasons: // * The compare_lexically operation would suffer a performance regression; // * Worse, all lhmslv group-by operations (used by many Miller verbs) would likewise suffer a performance regression. // // ---------------------------------------------------------------- // The regex-capture string-array holds copies of regex matches, e.g. in // // echo name=abc_def | mlr put '$name =~ "(.*)_(.*)"; $left = "\1"; $right = "\2"' // // produces a record with left=abc and right=def. // // There is an important trick here with the length of the string-array: // // * It is set here to null. // // * It is passed by reference to the lrec-evaluator tree. In particular, the matches and does-not-match functions // (which implement the =~ and !=~ operators) allocate it (or resize it, as necessary) and populate it. // // * If the matches/does-not-match functions are entered, even with no matches, the regex-captures string-array // will be resized to have length 0. // // * When the lrec-evaluator's from-literal function is invoked, the interpolate_regex_captures function can quickly // check to see if the regex-captures array is null and thereby know that a time-consuming scan for \1, \2, \3, etc. // does not need to be done. On the other hand, if the regex-captures array is non-null and has length // zero, then \0 .. \9 should all be replaced with the empty string. // // ---------------------------------------------------------------- // The oosvars multi-level hashmap contains out-of-stream variables which can be written/read/output // in begin{}/end{} blocks, and/or per record. // // ---------------------------------------------------------------- // The context_t contains information about record-number, file-number, file-name, etc. from // which the current stream-record was obtained. // ---------------------------------------------------------------- static sllv_t* mapper_put_or_filter_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_put_or_filter_state_t* pstate = (mapper_put_or_filter_state_t*)pvstate; sllv_t* poutrecs = sllv_alloc(); int should_emit_rec = TRUE; if (pstate->at_begin) { string_array_t* pregex_captures = NULL; // May be set to non-null on evaluation variables_t variables = (variables_t) { .pinrec = NULL, .ptyped_overlay = NULL, .poosvars = pstate->poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .plocal_stack = pstate->plocal_stack, .ploop_stack = pstate->ploop_stack, .return_state = { .returned = FALSE, .retval = box_ephemeral_val(mv_absent()), }, .trace_execution = pstate->trace_execution, .json_quote_int_keys = pstate->pwriter_opts->json_quote_int_keys, .json_quote_non_string_values = pstate->pwriter_opts->json_quote_non_string_values, }; cst_outputs_t cst_outputs = (cst_outputs_t) { .pshould_emit_rec = &should_emit_rec, .poutrecs = poutrecs, .oosvar_flatten_separator = pstate->oosvar_flatten_separator, .pwriter_opts = pstate->pwriter_opts, }; string_array_free(pregex_captures); mlr_dsl_cst_handle_top_level_statement_blocks(pstate->pcst->pbegin_blocks, &variables, &cst_outputs); pstate->at_begin = FALSE; } if (pinrec == NULL) { // End of input stream string_array_t* pregex_captures = NULL; // May be set to non-null on evaluation variables_t variables = (variables_t) { .pinrec = NULL, .ptyped_overlay = NULL, .poosvars = pstate->poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .plocal_stack = pstate->plocal_stack, .ploop_stack = pstate->ploop_stack, .return_state = { .returned = FALSE, .retval = box_ephemeral_val(mv_absent()), }, .trace_execution = pstate->trace_execution, .json_quote_int_keys = pstate->pwriter_opts->json_quote_int_keys, .json_quote_non_string_values = pstate->pwriter_opts->json_quote_non_string_values, }; cst_outputs_t cst_outputs = (cst_outputs_t) { .pshould_emit_rec = &should_emit_rec, .poutrecs = poutrecs, .oosvar_flatten_separator = pstate->oosvar_flatten_separator, .pwriter_opts = pstate->pwriter_opts, }; mlr_dsl_cst_handle_top_level_statement_blocks(pstate->pcst->pend_blocks, &variables, &cst_outputs); string_array_free(pregex_captures); sllv_append(poutrecs, NULL); return poutrecs; } lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); string_array_t* pregex_captures = NULL; // May be set to non-null on evaluation should_emit_rec = TRUE; variables_t variables = (variables_t) { .pinrec = pinrec, // Note variables.pinrec pointer can update on '$* = ...' .ptyped_overlay = ptyped_overlay, .poosvars = pstate->poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .plocal_stack = pstate->plocal_stack, .ploop_stack = pstate->ploop_stack, .return_state = { .returned = FALSE, .retval = box_ephemeral_val(mv_absent()), }, .trace_execution = pstate->trace_execution, .json_quote_int_keys = pstate->pwriter_opts->json_quote_int_keys, .json_quote_non_string_values = pstate->pwriter_opts->json_quote_non_string_values, }; cst_outputs_t cst_outputs = (cst_outputs_t) { .pshould_emit_rec = &should_emit_rec, .poutrecs = poutrecs, .oosvar_flatten_separator = pstate->oosvar_flatten_separator, .pwriter_opts = pstate->pwriter_opts, }; mlr_dsl_cst_handle_top_level_statement_block(pstate->pcst->pmain_block, &variables, &cst_outputs); if (should_emit_rec && !pstate->put_output_disabled) { // Write the output fields from the typed overlay back to the lrec. for (lhmsmve_t* pe = variables.ptyped_overlay->phead; pe != NULL; pe = pe->pnext) { char* output_field_name = pe->key; mv_t* pval = &pe->value; // Ownership transfer from mv_t to lrec. if (pval->type == MT_STRING) { lrec_put(variables.pinrec, output_field_name, pval->u.strv, pval->free_flags); } else { char free_flags = NO_FREE; char* string = mv_format_val(pval, &free_flags); lrec_put(variables.pinrec, output_field_name, string, pval->free_flags | free_flags); } pval->free_flags = NO_FREE; } } lhmsmv_free(variables.ptyped_overlay); string_array_free(pregex_captures); // Note variables.pinrec pointer can update on '$* = ...' if (should_emit_rec && !pstate->put_output_disabled) { sllv_append(poutrecs, variables.pinrec); } else { lrec_free(variables.pinrec); } return poutrecs; } miller-5.6.2/c/mapping/mapper_regularize.c000066400000000000000000000072371354153536500205710ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "containers/lhmslv.h" #include "containers/sllv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" typedef struct _mapper_regularize_state_t { lhmslv_t* psorted_to_original; } mapper_regularize_state_t; static void mapper_regularize_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_regularize_alloc(); static void mapper_regularize_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_regularize_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_regularize_setup = { .verb = "regularize", .pusage_func = mapper_regularize_usage, .pparse_func = mapper_regularize_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_regularize_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s\n", argv0, verb); fprintf(o, "For records seen earlier in the data stream with same field names in\n"); fprintf(o, "a different order, outputs them with field names in the previously\n"); fprintf(o, "encountered order.\n"); fprintf(o, "Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8\n"); fprintf(o, "output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8\n"); } static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { *pargi += 1; return mapper_regularize_alloc(); } // ---------------------------------------------------------------- static mapper_t* mapper_regularize_alloc() { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_regularize_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_regularize_state_t)); pstate->psorted_to_original = lhmslv_alloc(); pmapper->pvstate = (void*)pstate; pmapper->pprocess_func = mapper_regularize_process; pmapper->pfree_func = mapper_regularize_free; return pmapper; } static void mapper_regularize_free(mapper_t* pmapper, context_t* _) { mapper_regularize_state_t* pstate = pmapper->pvstate; // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pe = pstate->psorted_to_original->phead; pe != NULL; pe = pe->pnext) { slls_free(pe->pvvalue); } lhmslv_free(pstate->psorted_to_original); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_regularize_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_regularize_state_t* pstate = (mapper_regularize_state_t*)pvstate; slls_t* current_sorted_field_names = mlr_reference_keys_from_record(pinrec); slls_sort(current_sorted_field_names); slls_t* previous_sorted_field_names = lhmslv_get(pstate->psorted_to_original, current_sorted_field_names); if (previous_sorted_field_names == NULL) { previous_sorted_field_names = slls_copy(current_sorted_field_names); lhmslv_put(pstate->psorted_to_original, previous_sorted_field_names, mlr_copy_keys_from_record(pinrec), FREE_ENTRY_KEY); slls_free(current_sorted_field_names); return sllv_single(pinrec); } else { lrec_t* poutrec = lrec_unbacked_alloc(); for (sllse_t* pe = previous_sorted_field_names->phead; pe != NULL; pe = pe->pnext) { lrec_put(poutrec, pe->value, mlr_strdup_or_die(lrec_get(pinrec, pe->value)), FREE_ENTRY_VALUE); } lrec_free(pinrec); slls_free(current_sorted_field_names); return sllv_single(poutrec); } } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_remove_empty_columns.c000066400000000000000000000070701354153536500226660ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmsi.h" #include "mapping/mappers.h" typedef struct _mapper_remove_empty_columns_state_t { sllv_t* precords; lhmsi_t* pnames_with_nonempty_values; } mapper_remove_empty_columns_state_t; static void mapper_remove_empty_columns_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_remove_empty_columns_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_remove_empty_columns_alloc(); static void mapper_remove_empty_columns_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_remove_empty_columns_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_remove_empty_columns_setup = { .verb = "remove-empty-columns", .pusage_func = mapper_remove_empty_columns_usage, .pparse_func = mapper_remove_empty_columns_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_remove_empty_columns_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s\n", argv0, verb); fprintf(o, "Omits fields which are empty on every input row. Non-streaming.\n"); } static mapper_t* mapper_remove_empty_columns_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_remove_empty_columns_usage(stderr, argv[0], argv[*pargi]); return NULL; } mapper_t* pmapper = mapper_remove_empty_columns_alloc(); *pargi += 1; return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_remove_empty_columns_alloc() { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_remove_empty_columns_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_remove_empty_columns_state_t)); pstate->precords = sllv_alloc(); pstate->pnames_with_nonempty_values = lhmsi_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_remove_empty_columns_process; pmapper->pfree_func = mapper_remove_empty_columns_free; return pmapper; } static void mapper_remove_empty_columns_free(mapper_t* pmapper, context_t* _) { mapper_remove_empty_columns_state_t* pstate = pmapper->pvstate; // Free the container sllv_free(pstate->precords); lhmsi_free(pstate->pnames_with_nonempty_values); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_remove_empty_columns_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_remove_empty_columns_state_t* pstate = pvstate; if (pinrec != NULL) { // The caller will free the outrecs sllv_append(pstate->precords, pinrec); for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (pe->value[0] != 0) { if (!lhmsi_has_key(pstate->pnames_with_nonempty_values, pe->key)) { lhmsi_put(pstate->pnames_with_nonempty_values, mlr_strdup_or_die(pe->key), 1, FREE_ENTRY_KEY); } } } return NULL; } else { for (sllve_t* pe = pstate->precords->phead; pe != NULL; pe = pe->pnext) { lrec_t* prec = pe->pvvalue; lrece_t* pf = prec->phead; while (pf != NULL) { if (lhmsi_has_key(pstate->pnames_with_nonempty_values, pf->key)) { pf = pf->pnext; } else { lrece_t* pnext = pf->pnext; lrec_unlink_and_free(prec, pf); pf = pnext; } } } sllv_append(pstate->precords, NULL); sllv_t* retval = pstate->precords; pstate->precords = sllv_alloc(); return retval; } } miller-5.6.2/c/mapping/mapper_rename.c000066400000000000000000000171241354153536500176630ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/string_builder.h" #include "containers/lhmss.h" #include "containers/sllv.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define RENAME_SB_ALLOC_LENGTH 16 typedef struct _regex_pair_t { regex_t regex; char* replacement; } regex_pair_t; typedef struct _mapper_rename_state_t { ap_state_t* pargp; lhmss_t* pold_to_new; sllv_t* pregex_pairs; string_builder_t* psb; int do_gsub; } mapper_rename_state_t; static void mapper_rename_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_rename_alloc(ap_state_t* pargp, lhmss_t* pold_to_new, int do_regexes, int do_gsub); static void mapper_rename_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_rename_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_rename_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_rename_setup = { .verb = "rename", .pusage_func = mapper_rename_usage, .pparse_func = mapper_rename_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_rename_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {old1,new1,old2,new2,...}\n", argv0, verb); fprintf(o, "Renames specified fields.\n"); fprintf(o, "Options:\n"); fprintf(o, "-r Treat old field names as regular expressions. \"ab\", \"a.*b\"\n"); fprintf(o, " will match any field name containing the substring \"ab\" or\n"); fprintf(o, " matching \"a.*b\", respectively; anchors of the form \"^ab$\",\n"); fprintf(o, " \"^a.*b$\" may be used. New field names may be plain strings,\n"); fprintf(o, " or may contain capture groups of the form \"\\1\" through\n"); fprintf(o, " \"\\9\". Wrapping the regex in double quotes is optional, but\n"); fprintf(o, " is required if you wish to follow it with 'i' to indicate\n"); fprintf(o, " case-insensitivity.\n"); fprintf(o, "-g Do global replacement within each field name rather than\n"); fprintf(o, " first-match replacement.\n"); fprintf(o, "Examples:\n"); fprintf(o, "%s %s old_name,new_name'\n", argv0, verb); fprintf(o, "%s %s old_name_1,new_name_1,old_name_2,new_name_2'\n", argv0, verb); fprintf(o, "%s %s -r 'Date_[0-9]+,Date,' Rename all such fields to be \"Date\"\n", argv0, verb); fprintf(o, "%s %s -r '\"Date_[0-9]+\",Date' Same\n", argv0, verb); fprintf(o, "%s %s -r 'Date_([0-9]+).*,\\1' Rename all such fields to be of the form 20151015\n", argv0, verb); fprintf(o, "%s %s -r '\"name\"i,Name' Rename \"name\", \"Name\", \"NAME\", etc. to \"Name\"\n", argv0, verb); } static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int do_regexes = FALSE; int do_gsub = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-r", &do_regexes); ap_define_true_flag(pstate, "-g", &do_gsub); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_rename_usage(stderr, argv[0], verb); return NULL; } if ((argc - *pargi) < 1) { mapper_rename_usage(stderr, argv[0], verb); return NULL; } if (do_gsub) do_regexes = TRUE; slls_t* pnames = slls_from_line(argv[*pargi], ',', FALSE); if ((pnames->length % 2) != 0) { fprintf(stderr, "%s %s: name-list must have even length; got \"%s\".\n", MLR_GLOBALS.bargv0, verb, argv[*pargi]); mapper_rename_usage(stderr, argv[0], verb); return NULL; } lhmss_t* pold_to_new = lhmss_alloc(); for (sllse_t* pe = pnames->phead; pe != NULL; pe = pe->pnext->pnext) { lhmss_put(pold_to_new, mlr_strdup_or_die(pe->value), mlr_strdup_or_die(pe->pnext->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } slls_free(pnames); *pargi += 1; return mapper_rename_alloc(pstate, pold_to_new, do_regexes, do_gsub); } // ---------------------------------------------------------------- static mapper_t* mapper_rename_alloc(ap_state_t* pargp, lhmss_t* pold_to_new, int do_regexes, int do_gsub) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_rename_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_rename_state_t)); pstate->pargp = pargp; if (do_regexes) { pmapper->pprocess_func = mapper_rename_regex_process; pstate->pold_to_new = pold_to_new; pstate->pregex_pairs = sllv_alloc(); for (lhmsse_t* pe = pold_to_new->phead; pe != NULL; pe = pe->pnext) { char* regex_string = pe->key; char* replacement = pe->value; regex_pair_t* ppair = mlr_malloc_or_die(sizeof(regex_pair_t)); regcomp_or_die_quoted(&ppair->regex, regex_string, 0); ppair->replacement = replacement; sllv_append(pstate->pregex_pairs, ppair); } pstate->psb = sb_alloc(RENAME_SB_ALLOC_LENGTH); pstate->do_gsub = do_gsub; } else { pmapper->pprocess_func = mapper_rename_process; pstate->pold_to_new = pold_to_new; pstate->pregex_pairs = NULL; pstate->psb = NULL; pstate->do_gsub = FALSE; } pmapper->pfree_func = mapper_rename_free; pmapper->pvstate = (void*)pstate; return pmapper; } static void mapper_rename_free(mapper_t* pmapper, context_t* _) { mapper_rename_state_t* pstate = pmapper->pvstate; lhmss_free(pstate->pold_to_new); if (pstate->pregex_pairs != NULL) { for (sllve_t* pe = pstate->pregex_pairs->phead; pe != NULL; pe = pe->pnext) { regex_pair_t* ppair = pe->pvvalue; regfree(&ppair->regex); // replacement is in pthe old_to_new list, already freed free(ppair); } sllv_free(pstate->pregex_pairs); } sb_free(pstate->psb); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_rename_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_rename_state_t* pstate = (mapper_rename_state_t*)pvstate; for (lhmsse_t* pe = pstate->pold_to_new->phead; pe != NULL; pe = pe->pnext) { char* old_name = pe->key; char* new_name = pe->value; if (lrec_get(pinrec, old_name) != NULL) { lrec_rename(pinrec, old_name, new_name, FALSE); } } return sllv_single(pinrec); } else { return sllv_single(NULL); } } static sllv_t* mapper_rename_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_rename_state_t* pstate = (mapper_rename_state_t*)pvstate; for (sllve_t* pe = pstate->pregex_pairs->phead; pe != NULL; pe = pe->pnext) { regex_pair_t* ppair = pe->pvvalue; regex_t* pregex = &ppair->regex; char* replacement = ppair->replacement; for (lrece_t* pf = pinrec->phead; pf != NULL; pf = pf->pnext) { int matched = FALSE; int all_captured = FALSE; char* old_name = pf->key; if (pstate->do_gsub) { char free_flags = NO_FREE; char* new_name = regex_gsub(old_name, pregex, pstate->psb, replacement, &matched, &all_captured, &free_flags); int new_needs_freeing = FALSE; if (free_flags & FREE_ENTRY_VALUE) new_needs_freeing = TRUE; if (matched) lrec_rename(pinrec, old_name, new_name, new_needs_freeing); } else { char* new_name = regex_sub(old_name, pregex, pstate->psb, replacement, &matched, &all_captured); if (matched) { lrec_rename(pinrec, old_name, new_name, TRUE); } else { free(new_name); } } } } return sllv_single(pinrec); } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_reorder.c000066400000000000000000000075541354153536500200640ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "containers/hss.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_reorder_state_t { ap_state_t* pargp; slls_t* pfield_name_list; int put_at_end; } mapper_reorder_state_t; static void mapper_reorder_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_reorder_alloc(ap_state_t* pargp, slls_t* pfield_name_list, int put_at_end); static void mapper_reorder_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_reorder_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_reorder_setup = { .verb = "reorder", .pusage_func = mapper_reorder_usage, .pparse_func = mapper_reorder_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_reorder_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-f {a,b,c} Field names to reorder.\n"); fprintf(o, "-e Put specified field names at record end: default is to put\n"); fprintf(o, " them at record start.\n"); fprintf(o, "Examples:\n"); fprintf(o, "%s %s -f a,b sends input record \"d=4,b=2,a=1,c=3\" to \"a=1,b=2,d=4,c=3\".\n", argv0, verb); fprintf(o, "%s %s -e -f a,b sends input record \"d=4,b=2,a=1,c=3\" to \"d=4,c=3,a=1,b=2\".\n", argv0, verb); } // ---------------------------------------------------------------- static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pfield_name_list = NULL; int put_at_end = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pfield_name_list); ap_define_true_flag(pstate, "-e", &put_at_end); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_reorder_usage(stderr, argv[0], verb); return NULL; } if (pfield_name_list == NULL) { mapper_reorder_usage(stderr, argv[0], verb); return NULL; } return mapper_reorder_alloc(pstate, pfield_name_list, put_at_end); } // ---------------------------------------------------------------- static mapper_t* mapper_reorder_alloc(ap_state_t* pargp, slls_t* pfield_name_list, int put_at_end) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_reorder_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_reorder_state_t)); pstate->pargp = pargp; pstate->pfield_name_list = pfield_name_list; pstate->put_at_end = put_at_end; if (!put_at_end) slls_reverse(pstate->pfield_name_list); pmapper->pvstate = (void*)pstate; pmapper->pprocess_func = mapper_reorder_process; pmapper->pfree_func = mapper_reorder_free; return pmapper; } static void mapper_reorder_free(mapper_t* pmapper, context_t* _) { mapper_reorder_state_t* pstate = pmapper->pvstate; if (pstate->pfield_name_list != NULL) slls_free(pstate->pfield_name_list); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_reorder_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_reorder_state_t* pstate = (mapper_reorder_state_t*)pvstate; if (pinrec != NULL) { if (!pstate->put_at_end) { // OK since the field-name list was reversed at construction time. for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) lrec_move_to_head(pinrec, pe->value); } else { for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) lrec_move_to_tail(pinrec, pe->value); } return sllv_single(pinrec); } else { return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_repeat.c000066400000000000000000000143221354153536500176710ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef enum _repeat_type_t { BY_COUNT, BY_FIELD_NAME, } repeat_type_t; typedef struct _mapper_repeat_state_t { ap_state_t* pargp; char* repeat_count_field_name; long long repeat_count; } mapper_repeat_state_t; static void mapper_repeat_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_repeat_alloc(ap_state_t* pargp, long long repeat_count, char* repeat_count_field_name); static void mapper_repeat_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_repeat_process_nop(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_repeat_process_by_positive_count(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_repeat_process_by_field_name(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_repeat_setup = { .verb = "repeat", .pusage_func = mapper_repeat_usage, .pparse_func = mapper_repeat_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_repeat_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Copies input records to output records multiple times.\n"); fprintf(o, "Options must be exactly one of the following:\n"); fprintf(o, " -n {repeat count} Repeat each input record this many times.\n"); fprintf(o, " -f {field name} Same, but take the repeat count from the specified\n"); fprintf(o, " field name of each input record.\n"); fprintf(o, "Example:\n"); fprintf(o, " echo x=0 | %s %s -n 4 then put '$x=urand()'\n", argv0, verb); fprintf(o, "produces:\n"); fprintf(o, " x=0.488189\n"); fprintf(o, " x=0.484973\n"); fprintf(o, " x=0.704983\n"); fprintf(o, " x=0.147311\n"); fprintf(o, "Example:\n"); fprintf(o, " echo a=1,b=2,c=3 | %s %s -f b\n", argv0, verb); fprintf(o, "produces:\n"); fprintf(o, " a=1,b=2,c=3\n"); fprintf(o, " a=1,b=2,c=3\n"); fprintf(o, "Example:\n"); fprintf(o, " echo a=1,b=2,c=3 | %s %s -f c\n", argv0, verb); fprintf(o, "produces:\n"); fprintf(o, " a=1,b=2,c=3\n"); fprintf(o, " a=1,b=2,c=3\n"); fprintf(o, " a=1,b=2,c=3\n"); } static const long long UNINIT_REPEAT_COUNT = -123457689LL; static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { long long repeat_count = UNINIT_REPEAT_COUNT; char* repeat_count_field_name = NULL; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_flag(pstate, "-f", &repeat_count_field_name); ap_define_long_long_flag(pstate, "-n", &repeat_count); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_repeat_usage(stderr, argv[0], verb); return NULL; } if (repeat_count == UNINIT_REPEAT_COUNT && repeat_count_field_name == NULL) { mapper_repeat_usage(stderr, argv[0], verb); return NULL; } if (repeat_count != UNINIT_REPEAT_COUNT && repeat_count_field_name != NULL) { mapper_repeat_usage(stderr, argv[0], verb); return NULL; } return mapper_repeat_alloc(pstate, repeat_count, repeat_count_field_name); } // ---------------------------------------------------------------- static mapper_t* mapper_repeat_alloc(ap_state_t* pargp, long long repeat_count, char* repeat_count_field_name) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_repeat_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_repeat_state_t)); pstate->pargp = pargp; pstate->repeat_count = repeat_count; pstate->repeat_count_field_name = repeat_count_field_name; pmapper->pvstate = pstate; if (repeat_count_field_name != NULL) pmapper->pprocess_func = mapper_repeat_process_by_field_name; else if (repeat_count >= 1LL) pmapper->pprocess_func = mapper_repeat_process_by_positive_count; else pmapper->pprocess_func = mapper_repeat_process_nop; pmapper->pfree_func = mapper_repeat_free; return pmapper; } static void mapper_repeat_free(mapper_t* pmapper, context_t* _) { mapper_repeat_state_t* pstate = pmapper->pvstate; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_repeat_process_nop(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of record stream return sllv_single(NULL); else return NULL; } // ---------------------------------------------------------------- static sllv_t* mapper_repeat_process_by_positive_count(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_repeat_state_t* pstate = pvstate; if (pinrec == NULL) // End of record stream return sllv_single(NULL); sllv_t* poutrecs = sllv_alloc(); // The input record can be baton-passed once to the output without multiple frees. // After that, we must copy it. sllv_append(poutrecs, pinrec); for (long long i = 1; i < pstate->repeat_count; i++) { sllv_append(poutrecs, lrec_copy(pinrec)); } return poutrecs; } // ---------------------------------------------------------------- static sllv_t* mapper_repeat_process_by_field_name(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_repeat_state_t* pstate = pvstate; if (pinrec == NULL) // End of record stream return sllv_single(NULL); char* repeat_count_field_svalue = lrec_get(pinrec, pstate->repeat_count_field_name); if (repeat_count_field_svalue == NULL) { lrec_free(pinrec); return NULL; } long long repeat_count; int ok = mlr_try_int_from_string(repeat_count_field_svalue, &repeat_count); if (!ok || repeat_count <= 0) { lrec_free(pinrec); return NULL; } sllv_t* poutrecs = sllv_alloc(); // The input record can be baton-passed once to the output without multiple frees. // After that, we must copy it. sllv_append(poutrecs, pinrec); for (long long i = 1; i < repeat_count; i++) { sllv_append(poutrecs, lrec_copy(pinrec)); } return poutrecs; } miller-5.6.2/c/mapping/mapper_reshape.c000066400000000000000000000411441354153536500200420ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlrregex.h" #include "lib/string_builder.h" #include "containers/lhmss.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" // ================================================================ // WIDE: // time X Y Z // 1 2009-01-01 0.65473572 2.4520609 -1.46570942 // 2 2009-01-02 -0.89248112 0.2154713 -2.05357735 // 3 2009-01-03 0.98012375 1.3179287 4.64248357 // 4 2009-01-04 0.35397376 3.3765645 -0.25237774 // 5 2009-01-05 2.19357813 1.3477511 0.09719105 // LONG: // time item price // 1 2009-01-01 X 0.65473572 // 2 2009-01-02 X -0.89248112 // 3 2009-01-03 X 0.98012375 // 4 2009-01-04 X 0.35397376 // 5 2009-01-05 X 2.19357813 // 6 2009-01-01 Y 2.45206093 // 7 2009-01-02 Y 0.21547134 // 8 2009-01-03 Y 1.31792866 // 9 2009-01-04 Y 3.37656453 // 10 2009-01-05 Y 1.34775108 // 11 2009-01-01 Z -1.46570942 // 12 2009-01-02 Z -2.05357735 // 13 2009-01-03 Z 4.64248357 // 14 2009-01-04 Z -0.25237774 // 15 2009-01-05 Z 0.09719105 // ================================================================ typedef struct _mapper_reshape_state_t { ap_state_t* pargp; // for wide-to-long: slls_t* input_field_names; sllv_t* input_field_regexes; char* output_key_field_name; char* output_value_field_name; // for long-to-wide: char* split_out_key_field_name; char* split_out_value_field_name; lhmslv_t* other_keys_to_other_values_to_buckets; } mapper_reshape_state_t; typedef struct _reshape_bucket_t { lrec_t* prepresentative; lhmss_t* pairs; } reshape_bucket_t; static void mapper_reshape_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_reshape_alloc( ap_state_t* pargp, slls_t* input_field_names, slls_t* input_field_regex_strings, char* output_key_field_name, char* output_value_field_name, char* split_out_key_field_name, char* split_out_value_field_name); static void mapper_reshape_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_reshape_wide_to_long_no_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_reshape_wide_to_long_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_reshape_long_to_wide_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static reshape_bucket_t* reshape_bucket_alloc(lrec_t* prepresentative); static void reshape_bucket_free(reshape_bucket_t* pbucket); // ---------------------------------------------------------------- mapper_setup_t mapper_reshape_setup = { .verb = "reshape", .pusage_func = mapper_reshape_usage, .pparse_func = mapper_reshape_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_reshape_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Wide-to-long options:\n"); fprintf(o, " -i {input field names} -o {key-field name,value-field name}\n"); fprintf(o, " -r {input field regexes} -o {key-field name,value-field name}\n"); fprintf(o, " These pivot/reshape the input data such that the input fields are removed\n"); fprintf(o, " and separate records are emitted for each key/value pair.\n"); fprintf(o, " Note: this works with tail -f and produces output records for each input\n"); fprintf(o, " record seen.\n"); fprintf(o, "Long-to-wide options:\n"); fprintf(o, " -s {key-field name,value-field name}\n"); fprintf(o, " These pivot/reshape the input data to undo the wide-to-long operation.\n"); fprintf(o, " Note: this does not work with tail -f; it produces output records only after\n"); fprintf(o, " all input records have been read.\n"); fprintf(o, "\n"); fprintf(o, "Examples:\n"); fprintf(o, "\n"); fprintf(o, " Input file \"wide.txt\":\n"); fprintf(o, " time X Y\n"); fprintf(o, " 2009-01-01 0.65473572 2.4520609\n"); fprintf(o, " 2009-01-02 -0.89248112 0.2154713\n"); fprintf(o, " 2009-01-03 0.98012375 1.3179287\n"); fprintf(o, "\n"); fprintf(o, " %s --pprint %s -i X,Y -o item,value wide.txt\n", argv0, verb); fprintf(o, " time item value\n"); fprintf(o, " 2009-01-01 X 0.65473572\n"); fprintf(o, " 2009-01-01 Y 2.4520609\n"); fprintf(o, " 2009-01-02 X -0.89248112\n"); fprintf(o, " 2009-01-02 Y 0.2154713\n"); fprintf(o, " 2009-01-03 X 0.98012375\n"); fprintf(o, " 2009-01-03 Y 1.3179287\n"); fprintf(o, "\n"); fprintf(o, " %s --pprint %s -r '[A-Z]' -o item,value wide.txt\n", argv0, verb); fprintf(o, " time item value\n"); fprintf(o, " 2009-01-01 X 0.65473572\n"); fprintf(o, " 2009-01-01 Y 2.4520609\n"); fprintf(o, " 2009-01-02 X -0.89248112\n"); fprintf(o, " 2009-01-02 Y 0.2154713\n"); fprintf(o, " 2009-01-03 X 0.98012375\n"); fprintf(o, " 2009-01-03 Y 1.3179287\n"); fprintf(o, "\n"); fprintf(o, " Input file \"long.txt\":\n"); fprintf(o, " time item value\n"); fprintf(o, " 2009-01-01 X 0.65473572\n"); fprintf(o, " 2009-01-01 Y 2.4520609\n"); fprintf(o, " 2009-01-02 X -0.89248112\n"); fprintf(o, " 2009-01-02 Y 0.2154713\n"); fprintf(o, " 2009-01-03 X 0.98012375\n"); fprintf(o, " 2009-01-03 Y 1.3179287\n"); fprintf(o, "\n"); fprintf(o, " %s --pprint %s -s item,value long.txt\n", argv0, verb); fprintf(o, " time X Y\n"); fprintf(o, " 2009-01-01 0.65473572 2.4520609\n"); fprintf(o, " 2009-01-02 -0.89248112 0.2154713\n"); fprintf(o, " 2009-01-03 0.98012375 1.3179287\n"); fprintf(o, "See also %s nest.\n", argv0); } static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* input_field_names = NULL; slls_t* input_field_regex_strings = NULL; slls_t* output_field_names = NULL; slls_t* split_out_field_names = NULL; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-i", &input_field_names); ap_define_string_list_flag(pstate, "-r", &input_field_regex_strings); ap_define_string_list_flag(pstate, "-o", &output_field_names); ap_define_string_list_flag(pstate, "-s", &split_out_field_names); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_reshape_usage(stderr, argv[0], verb); return NULL; } char* output_key_field_name = NULL; char* output_value_field_name = NULL; char* split_out_key_field_name = NULL; char* split_out_value_field_name = NULL; if (split_out_field_names == NULL) { // wide to long if (input_field_names == NULL && input_field_regex_strings == NULL) { mapper_reshape_usage(stderr, argv[0], verb); return NULL; } if (output_field_names == NULL) { mapper_reshape_usage(stderr, argv[0], verb); return NULL; } if (output_field_names->length != 2) { mapper_reshape_usage(stderr, argv[0], verb); return NULL; } output_key_field_name = mlr_strdup_or_die(output_field_names->phead->value); output_value_field_name = mlr_strdup_or_die(output_field_names->phead->pnext->value); slls_free(output_field_names); } else { // long to wide if (split_out_field_names->length != 2) { mapper_reshape_usage(stderr, argv[0], verb); return NULL; } split_out_key_field_name = mlr_strdup_or_die(split_out_field_names->phead->value); split_out_value_field_name = mlr_strdup_or_die(split_out_field_names->phead->pnext->value); slls_free(split_out_field_names); } return mapper_reshape_alloc(pstate, input_field_names, input_field_regex_strings, output_key_field_name, output_value_field_name, split_out_key_field_name, split_out_value_field_name); } // ---------------------------------------------------------------- static mapper_t* mapper_reshape_alloc( ap_state_t* pargp, slls_t* input_field_names, slls_t* input_field_regex_strings, char* output_key_field_name, char* output_value_field_name, char* split_out_key_field_name, char* split_out_value_field_name) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_reshape_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_reshape_state_t)); pstate->pargp = pargp; pstate->input_field_names = input_field_names; pstate->output_key_field_name = output_key_field_name; pstate->output_value_field_name = output_value_field_name; pstate->split_out_key_field_name = split_out_key_field_name; pstate->split_out_value_field_name = split_out_value_field_name; if (input_field_regex_strings == NULL) { pstate->input_field_regexes = NULL; } else { pstate->input_field_regexes = sllv_alloc(); for (sllse_t* pe = input_field_regex_strings->phead; pe != NULL; pe = pe->pnext) { regex_t* pregex = mlr_malloc_or_die(sizeof(regex_t)); regcomp_or_die(pregex, pe->value, 0); sllv_append(pstate->input_field_regexes, pregex); } slls_free(input_field_regex_strings); } if (split_out_key_field_name == NULL) { if (pstate->input_field_regexes == NULL) pmapper->pprocess_func = mapper_reshape_wide_to_long_no_regex_process; else pmapper->pprocess_func = mapper_reshape_wide_to_long_regex_process; pstate->other_keys_to_other_values_to_buckets = NULL; } else { pmapper->pprocess_func = mapper_reshape_long_to_wide_process; pstate->other_keys_to_other_values_to_buckets = lhmslv_alloc(); } pmapper->pfree_func = mapper_reshape_free; pmapper->pvstate = (void*)pstate; return pmapper; } static void mapper_reshape_free(mapper_t* pmapper, context_t* _) { mapper_reshape_state_t* pstate = pmapper->pvstate; slls_free(pstate->input_field_names); free(pstate->output_key_field_name); free(pstate->output_value_field_name); free(pstate->split_out_key_field_name); free(pstate->split_out_value_field_name); if (pstate->input_field_regexes != NULL) { for (sllve_t* pe = pstate->input_field_regexes->phead; pe != NULL; pe = pe->pnext) { regex_t* pregex = pe->pvvalue; regfree(pregex); free(pregex); } sllv_free(pstate->input_field_regexes); } if (pstate->other_keys_to_other_values_to_buckets != NULL) { for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { lhmslv_t* other_values_to_buckets = pe->pvvalue; for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { reshape_bucket_t* pbucket = pf->pvvalue; reshape_bucket_free(pbucket); } lhmslv_free(other_values_to_buckets); } lhmslv_free(pstate->other_keys_to_other_values_to_buckets); } ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_reshape_wide_to_long_no_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of input stream return sllv_single(NULL); mapper_reshape_state_t* pstate = (mapper_reshape_state_t*)pvstate; sllv_t* poutrecs = sllv_alloc(); lhmss_t* pairs = lhmss_alloc(); char* pfree_flags = NULL; for (sllse_t* pe = pstate->input_field_names->phead; pe != NULL; pe = pe->pnext) { char* key = pe->value; char* value = lrec_get_pff(pinrec, key, &pfree_flags); if (value != NULL) { // Ownership-transfer of the about-to-be-freed key-value pairs from lrec to lhmss lhmss_put(pairs, key, value, *pfree_flags); *pfree_flags = NO_FREE; } } // Unset the lrec keys after iterating over them, rather than during for (lhmsse_t* pf = pairs->phead; pf != NULL; pf = pf->pnext) lrec_remove(pinrec, pf->key); if (pairs->num_occupied == 0) { sllv_append(poutrecs, pinrec); } else { for (lhmsse_t* pf = pairs->phead; pf != NULL; pf = pf->pnext) { lrec_t* poutrec = lrec_copy(pinrec); lrec_put(poutrec, pstate->output_key_field_name, mlr_strdup_or_die(pf->key), FREE_ENTRY_VALUE); lrec_put(poutrec, pstate->output_value_field_name, mlr_strdup_or_die(pf->value), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } lrec_free(pinrec); } lhmss_free(pairs); return poutrecs; } // ---------------------------------------------------------------- static sllv_t* mapper_reshape_wide_to_long_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // End of input stream return sllv_single(NULL); mapper_reshape_state_t* pstate = (mapper_reshape_state_t*)pvstate; sllv_t* poutrecs = sllv_alloc(); lhmss_t* pairs = lhmss_alloc(); for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { for (sllve_t* pf = pstate->input_field_regexes->phead; pf != NULL; pf = pf->pnext) { regex_t* pregex = pf->pvvalue; if (regmatch_or_die(pregex, pe->key, 0, NULL)) { // Ownership-transfer of the about-to-be-freed key-value pairs from lrec to lhmss lhmss_put(pairs, pe->key, pe->value, pe->free_flags); pe->free_flags = NO_FREE; break; } } } // Unset the lrec keys after iterating over them, rather than during for (lhmsse_t* pg = pairs->phead; pg != NULL; pg = pg->pnext) lrec_remove(pinrec, pg->key); if (pairs->num_occupied == 0) { sllv_append(poutrecs, pinrec); } else { for (lhmsse_t* pf = pairs->phead; pf != NULL; pf = pf->pnext) { lrec_t* poutrec = lrec_copy(pinrec); lrec_put(poutrec, pstate->output_key_field_name, mlr_strdup_or_die(pf->key), FREE_ENTRY_VALUE); lrec_put(poutrec, pstate->output_value_field_name, mlr_strdup_or_die(pf->value), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } lrec_free(pinrec); } lhmss_free(pairs); return poutrecs; } // ---------------------------------------------------------------- static sllv_t* mapper_reshape_long_to_wide_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_reshape_state_t* pstate = (mapper_reshape_state_t*)pvstate; if (pinrec != NULL) { // Not end of input stream char* split_out_key_field_value = lrec_get(pinrec, pstate->split_out_key_field_name); char* split_out_value_field_value = lrec_get(pinrec, pstate-> split_out_value_field_name); if (split_out_key_field_value == NULL || split_out_value_field_value == NULL) return sllv_single(pinrec); split_out_key_field_value = mlr_strdup_or_die(split_out_key_field_value); split_out_value_field_value = mlr_strdup_or_die(split_out_value_field_value); lrec_remove(pinrec, pstate->split_out_key_field_name); lrec_remove(pinrec, pstate->split_out_value_field_name); slls_t* other_keys = mlr_reference_keys_from_record(pinrec); lhmslv_t* other_values_to_buckets = lhmslv_get(pstate->other_keys_to_other_values_to_buckets, other_keys); if (other_values_to_buckets == NULL) { other_values_to_buckets = lhmslv_alloc(); lhmslv_put(pstate->other_keys_to_other_values_to_buckets, slls_copy(other_keys), other_values_to_buckets, FREE_ENTRY_KEY); } slls_t* other_values = mlr_reference_values_from_record(pinrec); reshape_bucket_t* pbucket = lhmslv_get(other_values_to_buckets, other_values); if (pbucket == NULL) { pbucket = reshape_bucket_alloc(pinrec); lhmslv_put(other_values_to_buckets, slls_copy(other_values), pbucket, FREE_ENTRY_KEY); } else { lrec_free(pinrec); } lhmss_put(pbucket->pairs, split_out_key_field_value, split_out_value_field_value, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); slls_free(other_values); slls_free(other_keys); return NULL; } else { // end of input stream sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { lhmslv_t* other_values_to_buckets = pe->pvvalue; for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { reshape_bucket_t* pbucket = pf->pvvalue; lrec_t* poutrec = pbucket->prepresentative; pbucket->prepresentative = NULL; // ownership transfer for (lhmsse_t* pg = pbucket->pairs->phead; pg != NULL; pg = pg->pnext) { // Strings in these lrecs are backed by our multi-level hashmaps which aren't freed by our free // method until shutdown time (in particular, after all outrecs are emitted). lrec_put(poutrec, pg->key, pg->value, NO_FREE); } sllv_append(poutrecs, poutrec); } } sllv_append(poutrecs, NULL); return poutrecs; } } // ---------------------------------------------------------------- static reshape_bucket_t* reshape_bucket_alloc(lrec_t* prepresentative) { reshape_bucket_t* pbucket = mlr_malloc_or_die(sizeof(reshape_bucket_t)); pbucket->prepresentative = prepresentative; pbucket->pairs = lhmss_alloc(); return pbucket; } static void reshape_bucket_free(reshape_bucket_t* pbucket) { lrec_free(pbucket->prepresentative); lhmss_free(pbucket->pairs); free(pbucket); } miller-5.6.2/c/mapping/mapper_sample.c000066400000000000000000000144221354153536500176730ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mtrand.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" // ---------------------------------------------------------------- typedef struct _sample_bucket_t { int nalloc; int nused; lrec_t** plrecs; } sample_bucket_t; sample_bucket_t* sample_bucket_alloc(int nalloc); void sample_bucket_free(sample_bucket_t* pbucket); void sample_bucket_handle(sample_bucket_t* pbucket, lrec_t* prec, int record_number); // ---------------------------------------------------------------- typedef struct _mapper_sample_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; unsigned long long sample_count; lhmslv_t* pbuckets_by_group; } mapper_sample_state_t; static void mapper_sample_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_sample_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long sample_count); static void mapper_sample_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_sample_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_sample_setup = { .verb = "sample", .pusage_func = mapper_sample_usage, .pparse_func = mapper_sample_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_sample_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Reservoir sampling (subsampling without replacement), optionally by category.\n"); fprintf(o, "-k {count} Required: number of records to output, total, or by group if using -g.\n"); fprintf(o, "-g {a,b,c} Optional: group-by-field names for samples.\n"); fprintf(o, "See also %s bootstrap and %s shuffle.\n", argv0, argv0); } static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int sample_count = -1; slls_t* pgroup_by_field_names = slls_alloc(); char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_int_flag(pstate, "-k", &sample_count); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_sample_usage(stderr, argv[0], verb); return NULL; } if (sample_count == -1) { mapper_sample_usage(stderr, argv[0], verb); return NULL; } return mapper_sample_alloc(pstate, pgroup_by_field_names, sample_count); } // ---------------------------------------------------------------- static mapper_t* mapper_sample_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long sample_count) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_sample_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sample_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->sample_count = sample_count; pstate->pbuckets_by_group = lhmslv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_sample_process; pmapper->pfree_func = mapper_sample_free; return pmapper; } static void mapper_sample_free(mapper_t* pmapper, context_t* _) { mapper_sample_state_t* pstate = pmapper->pvstate; if (pstate->pgroup_by_field_names != NULL) slls_free(pstate->pgroup_by_field_names); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->pbuckets_by_group->phead; pa != NULL; pa = pa->pnext) { sample_bucket_t* pbucket = pa->pvvalue; sample_bucket_free(pbucket); } lhmslv_free(pstate->pbuckets_by_group); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_sample_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_sample_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { sample_bucket_t* pbucket = lhmslv_get(pstate->pbuckets_by_group, pgroup_by_field_values); if (pbucket == NULL) { pbucket = sample_bucket_alloc(pstate->sample_count); lhmslv_put(pstate->pbuckets_by_group, slls_copy(pgroup_by_field_values), pbucket, FREE_ENTRY_KEY); } sample_bucket_handle(pbucket, pinrec, pctx->nr); slls_free(pgroup_by_field_values); } else { lrec_free(pinrec); } return NULL; } else { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->pbuckets_by_group->phead; pa != NULL; pa = pa->pnext) { sample_bucket_t* pbucket = pa->pvvalue; for (int i = 0; i < pbucket->nused; i++) { sllv_append(poutrecs, pbucket->plrecs[i]); pbucket->plrecs[i] = NULL; } pbucket->nused = 0; } sllv_append(poutrecs, NULL); return poutrecs; } } // ---------------------------------------------------------------- sample_bucket_t* sample_bucket_alloc(int nalloc) { sample_bucket_t* pbucket = mlr_malloc_or_die(sizeof(sample_bucket_t)); pbucket->nalloc = nalloc; pbucket->nused = 0; pbucket->plrecs = mlr_malloc_or_die(nalloc * sizeof(lrec_t*)); return pbucket; } void sample_bucket_free(sample_bucket_t* pbucket) { for (int i = 0; i < pbucket->nused; i++) lrec_free(pbucket->plrecs[i]); free(pbucket->plrecs); free(pbucket); } // This is the reservoir-sampling algorithm. // Here we retain a pointer to an input record (if retained in the sample) or // free it (if not retained in the sample). void sample_bucket_handle(sample_bucket_t* pbucket, lrec_t* prec, int record_number) { if (pbucket->nused < pbucket->nalloc) { // Always accept new entries until the bucket is full pbucket->plrecs[pbucket->nused++] = prec; } else { int r = get_mtrand_int31() % record_number; if (r < pbucket->nalloc) { lrec_free(pbucket->plrecs[r]); pbucket->plrecs[r] = prec; } else { lrec_free(prec); } } } miller-5.6.2/c/mapping/mapper_sec2gmt.c000066400000000000000000000124031354153536500177530ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "containers/lrec.h" #include "lib/mvfuncs.h" #include "containers/slls.h" #include "containers/mixutil.h" #include "cli/argparse.h" #include "mapping/mappers.h" typedef struct _mapper_sec2gmt_state_t { slls_t* pfield_names; char* format_string; } mapper_sec2gmt_state_t; static void mapper_sec2gmt_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_sec2gmt_alloc(slls_t* pfield_names, int num_decimal_places); static void mapper_sec2gmt_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_sec2gmt_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_sec2gmt_setup = { .verb = "sec2gmt", .pusage_func = mapper_sec2gmt_usage, .pparse_func = mapper_sec2gmt_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_sec2gmt_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {comma-separated list of field names}\n", argv0, verb); fprintf(o, "Replaces a numeric field representing seconds since the epoch with the\n"); fprintf(o, "corresponding GMT timestamp; leaves non-numbers as-is. This is nothing\n"); fprintf(o, "more than a keystroke-saver for the sec2gmt function:\n"); fprintf(o, " %s %s time1,time2\n", argv0, verb); fprintf(o, "is the same as\n"); fprintf(o, " %s put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)'\n", argv0); fprintf(o, "Options:\n"); fprintf(o, "-1 through -9: format the seconds using 1..9 decimal places, respectively.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int num_decimal_places = 0; char* verb = argv[*pargi]; if ((argc - *pargi) < 1) { mapper_sec2gmt_usage(stderr, argv[0], verb); return NULL; } *pargi += 1; ap_state_t* pstate = ap_alloc(); ap_define_int_value_flag(pstate, "-1", 1, &num_decimal_places); ap_define_int_value_flag(pstate, "-2", 2, &num_decimal_places); ap_define_int_value_flag(pstate, "-3", 3, &num_decimal_places); ap_define_int_value_flag(pstate, "-4", 4, &num_decimal_places); ap_define_int_value_flag(pstate, "-5", 5, &num_decimal_places); ap_define_int_value_flag(pstate, "-6", 6, &num_decimal_places); ap_define_int_value_flag(pstate, "-7", 7, &num_decimal_places); ap_define_int_value_flag(pstate, "-8", 8, &num_decimal_places); ap_define_int_value_flag(pstate, "-9", 9, &num_decimal_places); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_sec2gmt_usage(stderr, argv[0], verb); return NULL; } ap_free(pstate); if ((argc - *pargi) < 1) { mapper_sec2gmt_usage(stderr, argv[0], verb); return NULL; } char* field_names_string = argv[(*pargi)++]; slls_t* pfield_names = slls_from_line(field_names_string, ',', FALSE); return mapper_sec2gmt_alloc(pfield_names, num_decimal_places); } // ---------------------------------------------------------------- static mapper_t* mapper_sec2gmt_alloc(slls_t* pfield_names, int num_decimal_places) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_sec2gmt_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sec2gmt_state_t)); pstate->pfield_names = pfield_names; switch(num_decimal_places) { case 0: pstate->format_string = ISO8601_TIME_FORMAT; break; case 1: pstate->format_string = ISO8601_TIME_FORMAT_1; break; case 2: pstate->format_string = ISO8601_TIME_FORMAT_2; break; case 3: pstate->format_string = ISO8601_TIME_FORMAT_3; break; case 4: pstate->format_string = ISO8601_TIME_FORMAT_4; break; case 5: pstate->format_string = ISO8601_TIME_FORMAT_5; break; case 6: pstate->format_string = ISO8601_TIME_FORMAT_6; break; case 7: pstate->format_string = ISO8601_TIME_FORMAT_7; break; case 8: pstate->format_string = ISO8601_TIME_FORMAT_8; break; case 9: pstate->format_string = ISO8601_TIME_FORMAT_9; break; default: MLR_INTERNAL_CODING_ERROR(); break; } pmapper->pprocess_func = mapper_sec2gmt_process; pmapper->pvstate = (void*)pstate; pmapper->pfree_func = mapper_sec2gmt_free; return pmapper; } static void mapper_sec2gmt_free(mapper_t* pmapper, context_t* _) { mapper_sec2gmt_state_t* pstate = pmapper->pvstate; slls_free(pstate->pfield_names); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_sec2gmt_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of stream return sllv_single(NULL); mapper_sec2gmt_state_t* pstate = (mapper_sec2gmt_state_t*)pvstate; for (sllse_t* pe = pstate->pfield_names->phead; pe != NULL; pe = pe->pnext) { char* name = pe->value; char* sval = lrec_get(pinrec, name); if (sval == NULL) continue; if (*sval == 0) { lrec_put(pinrec, name, "", NO_FREE); } else { mv_t mval = mv_scan_number_nullable(sval); if (!mv_is_error(&mval)) { mv_t stamp = time_string_from_seconds(&mval, pstate->format_string, TIMEZONE_HANDLING_GMT); lrec_put(pinrec, name, stamp.u.strv, FREE_ENTRY_VALUE); } } } return sllv_single(pinrec); } miller-5.6.2/c/mapping/mapper_sec2gmtdate.c000066400000000000000000000071141354153536500206140ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "containers/lrec.h" #include "lib/mvfuncs.h" #include "containers/slls.h" #include "containers/mixutil.h" #include "mapping/mappers.h" typedef struct _mapper_sec2gmtdate_state_t { slls_t* pfield_names; } mapper_sec2gmtdate_state_t; static void mapper_sec2gmtdate_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_sec2gmtdate_alloc(slls_t* pfield_names); static void mapper_sec2gmtdate_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_sec2gmtdate_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_sec2gmtdate_setup = { .verb = "sec2gmtdate", .pusage_func = mapper_sec2gmtdate_usage, .pparse_func = mapper_sec2gmtdate_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_sec2gmtdate_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s {comma-separated list of field names}\n", argv0, verb); fprintf(o, "Replaces a numeric field representing seconds since the epoch with the\n"); fprintf(o, "corresponding GMT year-month-day timestamp; leaves non-numbers as-is.\n"); fprintf(o, "This is nothing more than a keystroke-saver for the sec2gmtdate function:\n"); fprintf(o, " %s %s time1,time2\n", argv0, verb); fprintf(o, "is the same as\n"); fprintf(o, " %s put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)'\n", argv0); } // ---------------------------------------------------------------- static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 2) { mapper_sec2gmtdate_usage(stderr, argv[0], argv[*pargi]); return NULL; } // verb: (*pargi)++; // field names: char* field_names_string = argv[(*pargi)++]; slls_t* pfield_names = slls_from_line(field_names_string, ',', FALSE); return mapper_sec2gmtdate_alloc(pfield_names); } // ---------------------------------------------------------------- static mapper_t* mapper_sec2gmtdate_alloc(slls_t* pfield_names) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_sec2gmtdate_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sec2gmtdate_state_t)); pstate->pfield_names = pfield_names; pmapper->pprocess_func = mapper_sec2gmtdate_process; pmapper->pvstate = (void*)pstate; pmapper->pfree_func = mapper_sec2gmtdate_free; return pmapper; } static void mapper_sec2gmtdate_free(mapper_t* pmapper, context_t* _) { mapper_sec2gmtdate_state_t* pstate = pmapper->pvstate; slls_free(pstate->pfield_names); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_sec2gmtdate_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec == NULL) // end of stream return sllv_single(NULL); mapper_sec2gmtdate_state_t* pstate = (mapper_sec2gmtdate_state_t*)pvstate; for (sllse_t* pe = pstate->pfield_names->phead; pe != NULL; pe = pe->pnext) { char* name = pe->value; char* sval = lrec_get(pinrec, name); if (sval == NULL) continue; if (*sval == 0) { lrec_put(pinrec, name, "", NO_FREE); } else { mv_t mval = mv_scan_number_nullable(sval); if (!mv_is_error(&mval)) { mv_t stamp = time_string_from_seconds(&mval, ISO8601_DATE_FORMAT, TIMEZONE_HANDLING_GMT); lrec_put(pinrec, name, stamp.u.strv, FREE_ENTRY_VALUE); } } } return sllv_single(pinrec); } miller-5.6.2/c/mapping/mapper_seqgen.c000066400000000000000000000120621354153536500176720ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "cli/argparse.h" #include "mapping/mappers.h" #include "containers/sllv.h" #include "lib/mvfuncs.h" typedef struct _mapper_seqgen_state_t { ap_state_t* pargp; char* field_name; mv_t start; mv_t stop; mv_t step; int continue_cmp; } mapper_seqgen_state_t; #define DEFAULT_FIELD_NAME "i" #define DEFAULT_START_STRING "1" #define DEFAULT_STOP_STRING "100" #define DEFAULT_STEP_STRING "1" static void mapper_seqgen_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_seqgen_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_seqgen_alloc(ap_state_t* pargp, char* field_name, mv_t start, mv_t stop, mv_t step); static void mapper_seqgen_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_seqgen_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_seqgen_setup = { .verb = "seqgen", .pusage_func = mapper_seqgen_usage, .pparse_func = mapper_seqgen_parse_cli, .ignores_input = TRUE, }; // ---------------------------------------------------------------- static mapper_t* mapper_seqgen_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { char* field_name = DEFAULT_FIELD_NAME; char* start_string = DEFAULT_START_STRING; char* stop_string = DEFAULT_STOP_STRING; char* step_string = DEFAULT_STEP_STRING; if ((argc - *pargi) < 1) { mapper_seqgen_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pstate = ap_alloc(); ap_define_string_flag(pstate, "--start", &start_string); ap_define_string_flag(pstate, "--stop", &stop_string); ap_define_string_flag(pstate, "--step", &step_string); ap_define_string_flag(pstate, "-f", &field_name); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_seqgen_usage(stderr, argv[0], verb); return NULL; } mv_t start = mv_scan_number_or_die(start_string); mv_t stop = mv_scan_number_or_die(stop_string); mv_t step = mv_scan_number_or_die(step_string); mv_t zero = mv_from_int(0); if (mveq(&step, &zero)) { if (!mveq(&start, &stop)) { fprintf(stderr, "%s %s: step must not be zero unless start == stop.\n", MLR_GLOBALS.bargv0, verb); fprintf(stderr, "Got start=%s, stop=%s, end=%s.\n", start_string, stop_string, step_string); } return NULL; } mapper_t* pmapper = mapper_seqgen_alloc(pstate, field_name, start, stop, step); return pmapper; } static void mapper_seqgen_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Produces a sequence of counters. Discards the input record stream. Produces\n"); fprintf(o, "output as specified by the following options:\n"); fprintf(o, "-f {name} Field name for counters; default \"%s\".\n", DEFAULT_FIELD_NAME); fprintf(o, "--start {number} Inclusive start value; default \"%s\".\n", DEFAULT_START_STRING); fprintf(o, "--stop {number} Inclusive stop value; default \"%s\".\n", DEFAULT_STOP_STRING); fprintf(o, "--step {number} Step value; default \"%s\".\n", DEFAULT_STEP_STRING); fprintf(o, "Start, stop, and/or step may be floating-point. Output is integer if start,\n"); fprintf(o, "stop, and step are all integers. Step may be negative. It may not be zero\n"); fprintf(o, "unless start == stop.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_seqgen_alloc(ap_state_t* pargp, char* field_name, mv_t start, mv_t stop, mv_t step) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_seqgen_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_seqgen_state_t)); pstate->pargp = pargp; pstate->field_name = field_name; pstate->start = start; pstate->stop = stop; pstate->step = step; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_seqgen_process; pmapper->pfree_func = mapper_seqgen_free; return pmapper; } static void mapper_seqgen_free(mapper_t* pmapper, context_t* _) { mapper_seqgen_state_t* pstate = pmapper->pvstate; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_seqgen_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { // Only produce data at end of input stream. Discard the input stream. if (pinrec != NULL) { pctx->force_eof = TRUE; lrec_free(pinrec); return NULL; } mapper_seqgen_state_t* pstate = pvstate; int continue_cmp = 1; mv_t zero = mv_from_int(0); if (mv_i_nn_lt(&pstate->step, &zero)) { continue_cmp = -1; } sllv_t* poutrecs = sllv_alloc(); for ( mv_t counter = pstate->start; mv_nn_comparator(&counter, &pstate->stop) != continue_cmp; counter = x_xx_plus_func(&counter, &pstate->step) ) { lrec_t* poutrec = lrec_unbacked_alloc(); lrec_put(poutrec, pstate->field_name, mv_alloc_format_val(&counter), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); return poutrecs; } miller-5.6.2/c/mapping/mapper_shuffle.c000066400000000000000000000106571354153536500200540ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mtrand.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" // ---------------------------------------------------------------- typedef struct _mapper_shuffle_state_t { ap_state_t* pargp; sllv_t* precs; } mapper_shuffle_state_t; static void mapper_shuffle_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_shuffle_alloc(ap_state_t* pargp); static void mapper_shuffle_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_shuffle_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_shuffle_setup = { .verb = "shuffle", .pusage_func = mapper_shuffle_usage, .pparse_func = mapper_shuffle_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_shuffle_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s {no options}\n", argv0, verb); fprintf(o, "Outputs records randomly permuted. No output records are produced until\n"); fprintf(o, "all input records are read.\n"); fprintf(o, "See also %s bootstrap and %s sample.\n", argv0, argv0); } static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_shuffle_usage(stderr, argv[0], verb); return NULL; } return mapper_shuffle_alloc(pstate); } // ---------------------------------------------------------------- static mapper_t* mapper_shuffle_alloc(ap_state_t* pargp) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_shuffle_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_shuffle_state_t)); pstate->pargp = pargp; pstate->precs = sllv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_shuffle_process; pmapper->pfree_func = mapper_shuffle_free; return pmapper; } static void mapper_shuffle_free(mapper_t* pmapper, context_t* _) { mapper_shuffle_state_t* pstate = pmapper->pvstate; // Records will have been freed by the emitter; here, free the list structure. sllv_free(pstate->precs); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_shuffle_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_shuffle_state_t* pstate = pvstate; // Not end of input stream: retain the record, and emit nothing until end of stream. if (pinrec != NULL) { sllv_append(pstate->precs, pinrec); return NULL; } sllv_t* poutrecs = sllv_alloc(); // Knuth shuffle: // * Initial permutation is identity. // * Make a pseudorandom permutation using pseudorandom swaps in the image map. int n = pstate->precs->length; int* images = mlr_malloc_or_die(n * sizeof(int)); for (int i = 0; i < n; i++) images[i] = i; int unused_start = 0; int num_unused = n; for (int i = 0; i < n; i++) { // Select a pseudorandom element from the pool of unused images. int u = unused_start + num_unused * get_mtrand_double(); int temp = images[u]; images[u] = images[i]; images[i] = temp; // Decrease the size of the pool by 1. (Yes, unused_start and k always have the same value. // Using two variables wastes neglible memory and makes the code easier to understand.) unused_start++; num_unused--; } // Make an array of pointers into the input list. lrec_t** record_array = mlr_malloc_or_die(n * sizeof(lrec_t**)); sllve_t* pe = pstate->precs->phead; for (int i = 0; i < n; i++, pe = pe->pnext) { record_array[i] = pe->pvvalue; } // Transfer from input array to output list. Because permutations are one-to-one maps, // all input records have ownership transferred exactly once. So, there are no // records to copy here, or free here. for (int i = 0; i < n; i++) { sllv_append(poutrecs, record_array[images[i]]); } free(record_array); free(images); // Null-terminate the output list to signify end of stream. sllv_append(poutrecs, NULL); return poutrecs; } miller-5.6.2/c/mapping/mapper_skip_trivial_records.c000066400000000000000000000063251354153536500226360ustar00rootroot00000000000000#include "cli/argparse.h" #include "mapping/mappers.h" #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" typedef struct _mapper_skip_trivial_records_state_t { ap_state_t* pargp; } mapper_skip_trivial_records_state_t; static void mapper_skip_trivial_records_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_skip_trivial_records_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_skip_trivial_records_alloc(ap_state_t* pargp); static void mapper_skip_trivial_records_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_skip_trivial_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_skip_trivial_records_setup = { .verb = "skip-trivial-records", .pusage_func = mapper_skip_trivial_records_usage, .pparse_func = mapper_skip_trivial_records_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static mapper_t* mapper_skip_trivial_records_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_skip_trivial_records_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pstate = ap_alloc(); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_skip_trivial_records_usage(stderr, argv[0], verb); return NULL; } mapper_t* pmapper = mapper_skip_trivial_records_alloc(pstate); return pmapper; } static void mapper_skip_trivial_records_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Passes through all records except:\n"); fprintf(o, "* those with zero fields;\n"); fprintf(o, "* those for which all fields have empty value.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_skip_trivial_records_alloc(ap_state_t* pargp) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_skip_trivial_records_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_skip_trivial_records_state_t)); pstate->pargp = pargp; pmapper->pvstate = pstate; pmapper->pprocess_func = NULL; pmapper->pprocess_func = mapper_skip_trivial_records_process; pmapper->pfree_func = mapper_skip_trivial_records_free; return pmapper; } static void mapper_skip_trivial_records_free(mapper_t* pmapper, context_t* _) { mapper_skip_trivial_records_state_t* pstate = pmapper->pvstate; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_skip_trivial_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { // not end of record-stream int has_any = FALSE; for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (*pe->value != 0) { has_any = TRUE; break; } } if (has_any) { return sllv_single(pinrec); } else { lrec_free(pinrec); return NULL; } } else { // end of record-stream return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_sort.c000066400000000000000000000342221354153536500174010ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" // ================================================================ // OVERVIEW // // * Suppose we are sorting records lexically ascending on field "a" and then // numerically descending on field "x". // // * CLI syntax is "mlr sort -f a -nr x". // // * We first consume all input records and for each extract the string values // of fields a and x. For each uniq combination of a-value (e.g. "red", // "green", "blue") and x-value (e.g. "1", "1.0", "2.4") -- e.g. // pairs ["red","1"], and so on -- we keep a linked list of all the records // having those sort-key values, in the order encountered. // // * For each of those unique sort-key-value combinations, we also parse the // numerical fields at this point into an array of union-string-double. // E.g. the list ["red", "1.0"] maps to the array ["red", 1.0]. // // * The pairing of parsed-value array the linked list of same-key-value records // is called a *bucket*. E.g the records // {"a":"red","b":"circle","x":"1.0","y":"3.9"} // {"a":"red","b":"square","x":"1.0","z":"5.7", "q":"even"} // would both land in the ["red","1.0"] bucket. // // * Buckets are retained in a hash map: the key is the string-list of the form // ["red","1.0"] and the value is the pairing of parsed-value array ["red",1.0] // ane linked list of records. // // * Once all the input records are ingested into this hash map, we copy the // bucket-pointers into an array and sort it: this being the pairing of // parsed-value array and linked list of records. The comparator callback for // the sort walks through the parsed-value arrays one slot at a time, // looking at the first difference, e.g. if one has "a"="red" and the other // has "a"="blue". If the first field matches then the sort moves to the // second field, and so on. // // * Recall in particular that string keys ["a":"red","x":"1"] and // ["a":"red","x":"1.0"] map to different buckets, but will sort equally. // // ================================================================ #define SORT_NUMERIC 0x80 #define SORT_DESCENDING 0x40 typedef struct _mapper_sort_state_t { // Input parameters slls_t* pkey_field_names; // Fields to sort on int* sort_params; // Lexical/numeric; ascending/descending int do_sort; // If false, just do group-by // Sort state: buckets of like records. lhmslv_t* pbuckets_by_key_field_values; sllv_t* precords_missing_sort_keys; } mapper_sort_state_t; // Each sort key is string or number; use union to save space. typedef struct _typed_sort_key_t { union { char* s; double d; } u; } typed_sort_key_t; typedef struct _sort_bucket_t { typed_sort_key_t* typed_sort_keys; sllv_t* precords; } sort_bucket_t; // ---------------------------------------------------------------- static void mapper_sort_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static void mapper_group_by_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_sort_alloc(slls_t* pkey_field_names, int* sort_params, int do_sort); static void mapper_sort_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_sort_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static typed_sort_key_t* parse_sort_keys(slls_t* pkey_field_values, int* sort_params, context_t* pctx); // qsort is non-reentrant but qsort_r isn't portable. But since Miller is // single-threaded, even if we've got one sort chained to another, only one is // active at a time. We adopt the convention that we set the sort params // right before the sort. static int* pcmp_sort_params = NULL; static int cmp_params_length = 0; static int pbucket_comparator(const void* pva, const void* pvb); // ---------------------------------------------------------------- mapper_setup_t mapper_sort_setup = { .verb = "sort", .pusage_func = mapper_sort_usage, .pparse_func = mapper_sort_parse_cli, .ignores_input = FALSE, }; mapper_setup_t mapper_group_by_setup = { .verb = "group-by", .pusage_func = mapper_group_by_usage, .pparse_func = mapper_group_by_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_sort_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s {flags}\n", argv0, verb); fprintf(o, "Flags:\n"); fprintf(o, " -f {comma-separated field names} Lexical ascending\n"); fprintf(o, " -n {comma-separated field names} Numerical ascending; nulls sort last\n"); fprintf(o, " -nf {comma-separated field names} Same as -n\n"); fprintf(o, " -r {comma-separated field names} Lexical descending\n"); fprintf(o, " -nr {comma-separated field names} Numerical descending; nulls sort first\n"); fprintf(o, "Sorts records primarily by the first specified field, secondarily by the second\n"); fprintf(o, "field, and so on. (Any records not having all specified sort keys will appear\n"); fprintf(o, "at the end of the output, in the order they were encountered, regardless of the\n"); fprintf(o, "specified sort order.) The sort is stable: records that compare equal will sort\n"); fprintf(o, "in the order they were encountered in the input record stream.\n"); fprintf(o, "\n"); fprintf(o, "Example:\n"); fprintf(o, " %s %s -f a,b -nr x,y,z\n", argv0, verb); fprintf(o, "which is the same as:\n"); fprintf(o, " %s %s -f a -f b -nr x -nr y -nr z\n", argv0, verb); } static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 3) { mapper_sort_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; slls_t* pnames = slls_alloc(); slls_t* pflags = slls_alloc(); while ((argc - *pargi) >= 1 && argv[*pargi][0] == '-') { if ((argc - *pargi) < 2) mapper_sort_usage(stderr, argv[0], verb); char* flag = argv[*pargi]; char* value = argv[*pargi+1]; *pargi += 2; if (streq(flag, "-f")) { } else if (streq(flag, "-n")) { } else if (streq(flag, "-nf")) { } else if (streq(flag, "-r")) { } else if (streq(flag, "-nr")) { } else { mapper_sort_usage(stderr, argv[0], verb); } slls_t* pnames_for_flag = slls_from_line(value, ',', FALSE); // E.g. with "-nr a,b,c", replicate the "-nr" flag three times. for (sllse_t* pe = pnames_for_flag->phead; pe != NULL; pe = pe->pnext) { slls_append_no_free(pnames, pe->value); slls_append_no_free(pflags, flag); } slls_free(pnames_for_flag); } if (pnames->length < 1) mapper_sort_usage(stderr, argv[0], verb); // Convert the list such as ["-nf","-nf","-r","-r","-r"] into an array of // bit-flags, one per sort-key field. int* opt_array = mlr_malloc_or_die(pnames->length * sizeof(int)); sllse_t* pe; int di; for (pe = pflags->phead, di = 0; pe != NULL; pe = pe->pnext, di++) { char* flag = pe->value; int opt = streq(flag, "-nf") ? SORT_NUMERIC : streq(flag, "-n") ? SORT_NUMERIC : streq(flag, "-r") ? SORT_DESCENDING : streq(flag, "-nr") ? SORT_NUMERIC|SORT_DESCENDING : 0; opt_array[di] =opt; } slls_free(pflags); return mapper_sort_alloc(pnames, opt_array, TRUE); } // ---------------------------------------------------------------- static void mapper_group_by_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s {comma-separated field names}\n", argv0, verb); fprintf(o, "Outputs records in batches having identical values at specified field names.\n"); } static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 2) { mapper_group_by_usage(stderr, argv[0], argv[*pargi]); return NULL; } slls_t* pnames = slls_from_line(argv[*pargi+1], ',', FALSE); int* opt_array = mlr_malloc_or_die(pnames->length * sizeof(int)); for (int i = 0; i < pnames->length; i++) opt_array[i] = 0; *pargi += 2; return mapper_sort_alloc(pnames, opt_array, FALSE); } // ---------------------------------------------------------------- static mapper_t* mapper_sort_alloc(slls_t* pkey_field_names, int* sort_params, int do_sort) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_sort_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sort_state_t)); pstate->pkey_field_names = pkey_field_names; pstate->sort_params = sort_params; pstate->pbuckets_by_key_field_values = lhmslv_alloc(); pstate->precords_missing_sort_keys = sllv_alloc(); pstate->do_sort = do_sort; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_sort_process; pmapper->pfree_func = mapper_sort_free; return pmapper; } // ---------------------------------------------------------------- static void mapper_sort_free(mapper_t* pmapper, context_t* _) { mapper_sort_state_t* pstate = pmapper->pvstate; if (pstate->pkey_field_names != NULL) slls_free(pstate->pkey_field_names); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->pbuckets_by_key_field_values->phead; pa != NULL; pa = pa->pnext) { sort_bucket_t* pbucket = pa->pvvalue; free(pbucket->typed_sort_keys); free(pbucket); // precords freed in emitter } lhmslv_free(pstate->pbuckets_by_key_field_values); sllv_free(pstate->precords_missing_sort_keys); free(pstate->sort_params); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_sort_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_sort_state_t* pstate = pvstate; if (pinrec != NULL) { // Consume another input record. slls_t* pkey_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pkey_field_names); if (pkey_field_values == NULL) { sllv_append(pstate->precords_missing_sort_keys, pinrec); } else { sort_bucket_t* pbucket = lhmslv_get(pstate->pbuckets_by_key_field_values, pkey_field_values); if (pbucket == NULL) { // New key-field-value: new bucket and hash-map entry slls_t* pkey_field_values_copy = slls_copy(pkey_field_values); sort_bucket_t* pbucket = mlr_malloc_or_die(sizeof(sort_bucket_t)); pbucket->typed_sort_keys = parse_sort_keys(pkey_field_values_copy, pstate->sort_params, pctx); pbucket->precords = sllv_alloc(); sllv_append(pbucket->precords, pinrec); lhmslv_put(pstate->pbuckets_by_key_field_values, pkey_field_values_copy, pbucket, FREE_ENTRY_KEY); } else { // Previously seen key-field-value: append record to bucket sllv_append(pbucket->precords, pinrec); } slls_free(pkey_field_values); } return NULL; } else if (!pstate->do_sort) { // End of input stream: do output for group-by sllv_t* poutput = sllv_alloc(); for (lhmslve_t* pe = pstate->pbuckets_by_key_field_values->phead; pe != NULL; pe = pe->pnext) { sort_bucket_t* pbucket = pe->pvvalue; sllv_transfer(poutput, pbucket->precords); sllv_free(pbucket->precords); } sllv_transfer(poutput, pstate->precords_missing_sort_keys); sllv_append(poutput, NULL); return poutput; } else { // End of input stream: sort bucket labels int num_buckets = pstate->pbuckets_by_key_field_values->num_occupied; sort_bucket_t** pbucket_array = mlr_malloc_or_die(num_buckets * sizeof(sort_bucket_t*)); // Copy bucket-pointers to an array for qsort int i = 0; for (lhmslve_t* pe = pstate->pbuckets_by_key_field_values->phead; pe != NULL; pe = pe->pnext, i++) { pbucket_array[i] = pe->pvvalue; } pcmp_sort_params = pstate->sort_params; cmp_params_length = pstate->pkey_field_names->length; qsort(pbucket_array, num_buckets, sizeof(sort_bucket_t*), pbucket_comparator); pcmp_sort_params = NULL; cmp_params_length = 0; // Emit each bucket's record sllv_t* poutput = sllv_alloc(); for (i = 0; i < num_buckets; i++) { sllv_t* plist = pbucket_array[i]->precords; sllv_transfer(poutput, plist); sllv_free(plist); } sllv_transfer(poutput, pstate->precords_missing_sort_keys); free(pbucket_array); sllv_append(poutput, NULL); // Signal end of output-record stream. return poutput; } } static int pbucket_comparator(const void* pva, const void* pvb) { // We are sorting an array of sort_bucket_t*. const sort_bucket_t** pba = (const sort_bucket_t**)pva; const sort_bucket_t** pbb = (const sort_bucket_t**)pvb; typed_sort_key_t* akeys = (*pba)->typed_sort_keys; typed_sort_key_t* bkeys = (*pbb)->typed_sort_keys; for (int i = 0; i < cmp_params_length; i++) { int sort_param = pcmp_sort_params[i]; if (sort_param & SORT_NUMERIC) { double a = akeys[i].u.d; double b = bkeys[i].u.d; if (isnan(a)) { // null input value if (!isnan(b)) { return (sort_param & SORT_DESCENDING) ? -1 : 1; } } else if (isnan(b)) { return (sort_param & SORT_DESCENDING) ? 1 : -1; } else { double d = a - b; int s = (d < 0) ? -1 : (d > 0) ? 1 : 0; if (s != 0) return (sort_param & SORT_DESCENDING) ? -s : s; } } else { int s = strcmp(akeys[i].u.s, bkeys[i].u.s); if (s != 0) return (sort_param & SORT_DESCENDING) ? -s : s; } } return 0; } // E.g. parse the list ["red","1.0"] into the array ["red",1.0]. static typed_sort_key_t* parse_sort_keys(slls_t* pkey_field_values, int* sort_params, context_t* pctx) { typed_sort_key_t* typed_sort_keys = mlr_malloc_or_die(pkey_field_values->length * sizeof(typed_sort_key_t)); int i = 0; for (sllse_t* pe = pkey_field_values->phead; pe != NULL; pe = pe->pnext, i++) { if (sort_params[i] & SORT_NUMERIC) { if (*pe->value == 0) { // null input value typed_sort_keys[i].u.d = nan(""); } else if (!mlr_try_float_from_string(pe->value, &typed_sort_keys[i].u.d)) { fprintf(stderr, "%s: couldn't parse \"%s\" as number in file \"%s\" record %lld.\n", MLR_GLOBALS.bargv0, pe->value, pctx->filename, pctx->fnr); exit(1); } } else { typed_sort_keys[i].u.s = pe->value; } } return typed_sort_keys; } miller-5.6.2/c/mapping/mapper_sort_within_records.c000066400000000000000000000234601354153536500225060ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/sllv.h" #include "containers/lhmslv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #define SORT_BY_KEY 0x10 #define SORT_BY_VALUE 0x20 #define SORT_NUMERIC 0x40 #define SORT_DESCENDING 0x80 typedef struct _mapper_sort_within_records_state_t { // Input parameters int sort_by; int sort_how; int reverse; } mapper_sort_within_records_state_t; //// Each sort key is string or number; use union to save space. //typedef struct _typed_sort_within_records_key_t { // union { // char* s; // double d; // } u; //} typed_sort_within_records_key_t; // ---------------------------------------------------------------- static void mapper_sort_within_records_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_sort_within_records_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_sort_within_records_alloc(); static void mapper_sort_within_records_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_sort_within_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate); //static typed_sort_within_records_key_t* parse_sort_within_records_keys(slls_t* pkey_field_values, int* sort_params, context_t* pctx); //// qsort is non-reentrant but qsort_r isn't portable. But since Miller is //// single-threaded, even if we've got one sort chained to another, only one is //// active at a time. We adopt the convention that we set the sort params //// right before the sort. //static int* pcmp_sort_within_records_params = NULL; //static int cmp_params_length = 0; //static int pbucket_comparator(const void* pva, const void* pvb); // ---------------------------------------------------------------- mapper_setup_t mapper_sort_within_records_setup = { .verb = "sort-within-records", .pusage_func = mapper_sort_within_records_usage, .pparse_func = mapper_sort_within_records_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_sort_within_records_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s {flags}\n", argv0, verb); fprintf(o, "Flags:\n"); fprintf(o, " -k Sort by keys\n"); fprintf(o, " -v Sort by values\n"); fprintf(o, " -n Sort numerically\n"); fprintf(o, " -f Sort lexically (default)\n"); fprintf(o, " -r Reverse sort\n"); fprintf(o, " -nk Shorthand for -n -k\n"); fprintf(o, " -nv Shorthand for -n -v\n"); fprintf(o, " -rk Shorthand for -r -k\n"); fprintf(o, " -rv Shorthand for -r -v\n"); fprintf(o, " -nrk Shorthand for -n -r -k\n"); fprintf(o, " -nrv Shorthand for -n -r -v\n"); } static mapper_t* mapper_sort_within_records_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 3) { mapper_sort_within_records_usage(stderr, argv[0], argv[*pargi]); return NULL; } //char* verb = argv[*pargi]; *pargi += 1; while ((argc - *pargi) >= 1 && argv[*pargi][0] == '-') { *pargi += 1; // xxx ap_state_t // if (streq(flag, "-f")) { // } else if (streq(flag, "-n")) { // } else if (streq(flag, "-nf")) { // } else if (streq(flag, "-r")) { // } else if (streq(flag, "-nr")) { // } else { // mapper_sort_within_records_usage(stderr, argv[0], verb); // } // slls_t* pnames_for_flag = slls_from_line(value, ',', FALSE); // // E.g. with "-nr a,b,c", replicate the "-nr" flag three times. // for (sllse_t* pe = pnames_for_flag->phead; pe != NULL; pe = pe->pnext) { // slls_append_no_free(pnames, pe->value); // slls_append_no_free(pflags, flag); // } // slls_free(pnames_for_flag); } // if (pnames->length < 1) // mapper_sort_within_records_usage(stderr, argv[0], verb); // xxx libify // Convert the list such as ["-nf","-nf","-r","-r","-r"] into an array of // bit-flags, one per sort-key field. // int* opt_array = mlr_malloc_or_die(pnames->length * sizeof(int)); // sllse_t* pe; // int di; // for (pe = pflags->phead, di = 0; pe != NULL; pe = pe->pnext, di++) { // char* flag = pe->value; // int opt = // streq(flag, "-nf") ? SORT_NUMERIC : // streq(flag, "-n") ? SORT_NUMERIC : // streq(flag, "-r") ? SORT_DESCENDING : // streq(flag, "-nr") ? SORT_NUMERIC|SORT_DESCENDING : // 0; // opt_array[di] =opt; // } // slls_free(pflags); return mapper_sort_within_records_alloc(); } // ---------------------------------------------------------------- static mapper_t* mapper_sort_within_records_alloc() { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_sort_within_records_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sort_within_records_state_t)); //pstate->sort_params = sort_params; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_sort_within_records_process; pmapper->pfree_func = mapper_sort_within_records_free; return pmapper; } // ---------------------------------------------------------------- static void mapper_sort_within_records_free(mapper_t* pmapper, context_t* _) { mapper_sort_within_records_state_t* pstate = pmapper->pvstate; free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_sort_within_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { //mapper_sort_within_records_state_t* pstate = pvstate; // xxx stub if (pinrec != NULL) return sllv_single(pinrec); else return sllv_single(NULL); // if (pinrec != NULL) { // // Consume another input record. // slls_t* pkey_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pkey_field_names); // if (pkey_field_values == NULL) { // sllv_append(pstate->precords_missing_sort_within_records_keys, pinrec); // } else { // sort_bucket_t* pbucket = lhmslv_get(pstate->pbuckets_by_key_field_values, pkey_field_values); // if (pbucket == NULL) { // New key-field-value: new bucket and hash-map entry // slls_t* pkey_field_values_copy = slls_copy(pkey_field_values); // sort_bucket_t* pbucket = mlr_malloc_or_die(sizeof(sort_bucket_t)); // pbucket->typed_sort_within_records_keys = parse_sort_within_records_keys(pkey_field_values_copy, pstate->sort_params, pctx); // pbucket->precords = sllv_alloc(); // sllv_append(pbucket->precords, pinrec); // lhmslv_put(pstate->pbuckets_by_key_field_values, pkey_field_values_copy, pbucket, // FREE_ENTRY_KEY); // } else { // Previously seen key-field-value: append record to bucket // sllv_append(pbucket->precords, pinrec); // } // slls_free(pkey_field_values); // } // return NULL; // } else { // // End of input stream: sort bucket labels // int num_buckets = pstate->pbuckets_by_key_field_values->num_occupied; // sort_bucket_t** pbucket_array = mlr_malloc_or_die(num_buckets * sizeof(sort_bucket_t*)); // // // Copy bucket-pointers to an array for qsort // int i = 0; // for (lhmslve_t* pe = pstate->pbuckets_by_key_field_values->phead; pe != NULL; pe = pe->pnext, i++) { // pbucket_array[i] = pe->pvvalue; // } // // pcmp_sort_within_records_params = pstate->sort_params; // cmp_params_length = pstate->pkey_field_names->length; // // qsort(pbucket_array, num_buckets, sizeof(sort_bucket_t*), pbucket_comparator); // // pcmp_sort_within_records_params = NULL; // cmp_params_length = 0; // // // Emit each bucket's record // sllv_t* poutput = sllv_alloc(); // for (i = 0; i < num_buckets; i++) { // sllv_t* plist = pbucket_array[i]->precords; // sllv_transfer(poutput, plist); // sllv_free(plist); // } // sllv_transfer(poutput, pstate->precords_missing_sort_within_records_keys); // free(pbucket_array); // sllv_append(poutput, NULL); // Signal end of output-record stream. // return poutput; // } } //static int pbucket_comparator(const void* pva, const void* pvb) { // // We are sorting an array of sort_bucket_t*. // const sort_bucket_t** pba = (const sort_bucket_t**)pva; // const sort_bucket_t** pbb = (const sort_bucket_t**)pvb; // typed_sort_within_records_key_t* akeys = (*pba)->typed_sort_within_records_keys; // typed_sort_within_records_key_t* bkeys = (*pbb)->typed_sort_within_records_keys; // for (int i = 0; i < cmp_params_length; i++) { // int sort_param = pcmp_sort_within_records_params[i]; // if (sort_param & SORT_NUMERIC) { // double a = akeys[i].u.d; // double b = bkeys[i].u.d; // if (isnan(a)) { // null input value // if (!isnan(b)) { // return (sort_param & SORT_DESCENDING) ? -1 : 1; // } // } else if (isnan(b)) { // return (sort_param & SORT_DESCENDING) ? 1 : -1; // } else { // double d = a - b; // int s = (d < 0) ? -1 : (d > 0) ? 1 : 0; // if (s != 0) // return (sort_param & SORT_DESCENDING) ? -s : s; // } // } else { // int s = strcmp(akeys[i].u.s, bkeys[i].u.s); // if (s != 0) // return (sort_param & SORT_DESCENDING) ? -s : s; // } // } // return 0; //} //// E.g. parse the list ["red","1.0"] into the array ["red",1.0]. //static typed_sort_within_records_key_t* parse_sort_within_records_keys(slls_t* pkey_field_values, int* sort_params, context_t* pctx) { // typed_sort_within_records_key_t* typed_sort_within_records_keys = mlr_malloc_or_die(pkey_field_values->length * sizeof(typed_sort_within_records_key_t)); // int i = 0; // for (sllse_t* pe = pkey_field_values->phead; pe != NULL; pe = pe->pnext, i++) { // if (sort_params[i] & SORT_NUMERIC) { // if (*pe->value == 0) { // null input value // typed_sort_within_records_keys[i].u.d = nan(""); // } else if (!mlr_try_float_from_string(pe->value, &typed_sort_within_records_keys[i].u.d)) { // fprintf(stderr, "%s: couldn't parse \"%s\" as number in file \"%s\" record %lld.\n", // MLR_GLOBALS.bargv0, pe->value, pctx->filename, pctx->fnr); // exit(1); // } // } else { // typed_sort_within_records_keys[i].u.s = pe->value; // } // } // return typed_sort_within_records_keys; //} miller-5.6.2/c/mapping/mapper_stats1.c000066400000000000000000000734441354153536500176420ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/string_array.h" #include "lib/mlrregex.h" #include "cli/argparse.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "lib/mlrval.h" #include "mapping/mappers.h" #include "mapping/stats1_accumulators.h" static char* fake_acc_name_for_setups = "__setup_done__"; // ---------------------------------------------------------------- struct _mapper_stats1_state_t; // forward reference typedef void group_by_ingestor_func_t(lrec_t* pinrec, struct _mapper_stats1_state_t* pstate); typedef void value_ingestor_func_t(lrec_t* pinrec, struct _mapper_stats1_state_t* pstate, lhmsv_t* pgroup_by_field_values_to_acc_fields); typedef sllv_t* emitter_func_t(struct _mapper_stats1_state_t* pstate); typedef struct _mapper_stats1_state_t { ap_state_t* pargp; slls_t* paccumulator_names; string_array_t* pvalue_field_names; // parameter string_array_t* pvalue_field_values; // scratch space used per-record slls_t* pgroup_by_field_names; // parameter group_by_ingestor_func_t* pgroup_by_ingestor; value_ingestor_func_t* pvalue_ingestor; emitter_func_t* pemitter; regex_t* value_field_regexes; int num_value_field_regexes; int invert_regex_value_field_names; regex_t* group_by_field_regexes; int num_group_by_field_regexes; int invert_regex_group_by_field_names; lhmslv_t* groups_without_group_by_regex; lhmslv_t* groups_with_group_by_regex; int do_iterative_stats; int allow_int_float; int do_interpolated_percentiles; } mapper_stats1_state_t; static void mapper_stats1_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_stats1_alloc(ap_state_t* pargp, slls_t* paccumulator_names, string_array_t* pvalue_field_names, int do_regex_value_field_names, int invert_regex_value_field_names, slls_t* pgroup_by_field_names, int do_regex_group_by_field_names, int invert_regex_group_by_field_names, int do_iterative_stats, int allow_int_float, int do_interpolated_percentiles); static void mapper_stats1_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_stats1_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static void mapper_stats1_group_by_ingest_without_regexes( lrec_t* pinrec, mapper_stats1_state_t* pstate); static void mapper_stats1_group_by_ingest_with_regexes( lrec_t* pinrec, mapper_stats1_state_t* pstate); static void mapper_stats1_value_ingest_without_regexes( lrec_t* pinrec, mapper_stats1_state_t* pstate, lhmsv_t* pgroup_by_field_values_to_acc_fields); static void mapper_stats1_value_ingest_with_regexes( lrec_t* pinrec, mapper_stats1_state_t* pstate, lhmsv_t* pgroup_by_field_values_to_acc_fields); static void mapper_stats1_ingest_name_value(lrec_t* pinrec, mapper_stats1_state_t* pstate, char* value_field_name, char* value_field_sval, lhmsv_t* pgroup_to_acc_field); static sllv_t* mapper_stats1_emit_all_without_group_by_regexes(mapper_stats1_state_t* pstate); static sllv_t* mapper_stats1_emit_all_with_group_by_regexes(mapper_stats1_state_t* pstate); static lrec_t* mapper_stats1_emit(mapper_stats1_state_t* pstate, lrec_t* poutrec, char* value_field_name, lhmsv_t* acc_field_to_acc_state_out); typedef struct _acc_map_pair_t { lhmsv_t* pin; lhmsv_t* pout; } acc_map_pair_t; // ---------------------------------------------------------------- mapper_setup_t mapper_stats1_setup = { .verb = "stats1", .pusage_func = mapper_stats1_usage, .pparse_func = mapper_stats1_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_stats1_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Computes univariate statistics for one or more given fields, accumulated across\n"); fprintf(o, "the input record stream.\n"); fprintf(o, "Options:\n"); fprintf(o, "-a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or\n"); fprintf(o, " one or more of:\n"); for (int i = 0; i < stats1_acc_lookup_table_length; i++) { fprintf(o, " %-9s %s\n", stats1_acc_lookup_table[i].name, stats1_acc_lookup_table[i].desc); } fprintf(o, "-f {a,b,c} Value-field names on which to compute statistics\n"); fprintf(o, "--fr {regex} Regex for value-field names on which to compute statistics\n"); fprintf(o, " (compute statsitics on values in all field names matching regex)\n"); fprintf(o, "--fx {regex} Inverted regex for value-field names on which to compute statistics\n"); fprintf(o, " (compute statsitics on values in all field names not matching regex)\n"); fprintf(o, "-g {d,e,f} Optional group-by-field names\n"); fprintf(o, "--gr {regex} Regex for optional group-by-field names\n"); fprintf(o, " (group by values in field names matching regex)\n"); fprintf(o, "--gx {regex} Inverted regex for optional group-by-field names\n"); fprintf(o, " (group by values in field names not matching regex)\n"); fprintf(o, "--grfx {regex} Shorthand for --gr {regex} --fx {that same regex}\n"); fprintf(o, "-i Use interpolated percentiles, like R's type=7; default like type=1.\n"); fprintf(o, " Not sensical for string-valued fields.\n"); fprintf(o, "-s Print iterative stats. Useful in tail -f contexts (in which\n"); fprintf(o, " case please avoid pprint-format output since end of input\n"); fprintf(o, " stream will never be seen).\n"); fprintf(o, "-F Computes integerable things (e.g. count) in floating point.\n"); fprintf(o, "Example: %s %s -a min,p10,p50,p90,max -f value -g size,shape\n", argv0, verb); fprintf(o, "Example: %s %s -a count,mode -f size\n", argv0, verb); fprintf(o, "Example: %s %s -a count,mode -f size -g shape\n", argv0, verb); fprintf(o, "Example: %s %s -a count,mode --fr '^[a-h].*$' -gr '^k.*$'\n", argv0, verb); fprintf(o, " This computes count and mode statistics on all field names beginning\n"); fprintf(o, " with a through h, grouped by all field names starting with k.\n"); fprintf(o, "Notes:\n"); fprintf(o, "* p50 and median are synonymous.\n"); fprintf(o, "* min and max output the same results as p0 and p100, respectively, but use\n"); fprintf(o, " less memory.\n"); fprintf(o, "* String-valued data make sense unless arithmetic on them is required,\n"); fprintf(o, " e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,\n"); fprintf(o, " numbers are less than strings.\n"); fprintf(o, "* count and mode allow text input; the rest require numeric input.\n"); fprintf(o, " In particular, 1 and 1.0 are distinct text for count and mode.\n"); fprintf(o, "* When there are mode ties, the first-encountered datum wins.\n"); } static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* paccumulator_names = NULL; string_array_t* pvalue_field_names = NULL; slls_t* pgroup_by_field_names = slls_alloc(); int do_iterative_stats = FALSE; int allow_int_float = TRUE; int do_interpolated_percentiles = FALSE; int do_regex_value_field_names = FALSE; int invert_regex_value_field_names = FALSE; int do_regex_group_by_field_names = FALSE; int invert_regex_group_by_field_names = FALSE; char* verb = argv[(*pargi)++]; int oargi = *pargi; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-a", &paccumulator_names); ap_define_string_array_flag(pstate, "-f", &pvalue_field_names); ap_define_string_array_flag(pstate, "--fr", &pvalue_field_names); ap_define_string_array_flag(pstate, "--fx", &pvalue_field_names); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_string_list_flag(pstate, "--gr", &pgroup_by_field_names); ap_define_string_list_flag(pstate, "--gx", &pgroup_by_field_names); ap_define_string_list_flag(pstate, "--grfx", &pgroup_by_field_names); ap_define_true_flag(pstate, "-s", &do_iterative_stats); ap_define_false_flag(pstate, "-F", &allow_int_float); ap_define_true_flag(pstate, "-i", &do_interpolated_percentiles); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_stats1_usage(stderr, argv[0], verb); return NULL; } int nargi = *pargi; for (int argi = oargi; argi < nargi; argi++) { if (streq(argv[argi], "--fr")) { do_regex_value_field_names = TRUE; } else if (streq(argv[argi], "--fx")) { do_regex_value_field_names = TRUE; invert_regex_value_field_names = TRUE; } else if (streq(argv[argi], "--gr")) { do_regex_group_by_field_names = TRUE; } else if (streq(argv[argi], "--gx")) { do_regex_group_by_field_names = TRUE; invert_regex_group_by_field_names = TRUE; } else if (streq(argv[argi], "--grfx")) { do_regex_group_by_field_names = TRUE; do_regex_value_field_names = TRUE; invert_regex_value_field_names = TRUE; pvalue_field_names = string_array_alloc(pgroup_by_field_names->length); int i = 0; for (sllse_t* pe = pgroup_by_field_names->phead; pe != NULL; pe = pe->pnext, i++) { pvalue_field_names->strings[i] = pe->value; i++; } } } if (paccumulator_names == NULL || pvalue_field_names == NULL) { mapper_stats1_usage(stderr, argv[0], verb); return NULL; } return mapper_stats1_alloc(pstate, paccumulator_names, pvalue_field_names, do_regex_value_field_names, invert_regex_value_field_names, pgroup_by_field_names, do_regex_group_by_field_names, invert_regex_group_by_field_names, do_iterative_stats, allow_int_float, do_interpolated_percentiles); } // ---------------------------------------------------------------- static mapper_t* mapper_stats1_alloc(ap_state_t* pargp, slls_t* paccumulator_names, string_array_t* pvalue_field_names, int do_regex_value_field_names, int invert_regex_value_field_names, slls_t* pgroup_by_field_names, int do_regex_group_by_field_names, int invert_regex_group_by_field_names, int do_iterative_stats, int allow_int_float, int do_interpolated_percentiles) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_stats1_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_stats1_state_t)); pstate->pargp = pargp; pstate->paccumulator_names = paccumulator_names; if (do_regex_value_field_names) { pstate->pvalue_field_names = NULL; pstate->pvalue_field_values = NULL; pstate->num_value_field_regexes = pvalue_field_names->length; pstate->value_field_regexes = mlr_malloc_or_die(sizeof(regex_t) * pstate->num_value_field_regexes); for (int i = 0; i < pvalue_field_names->length; i++) { // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. // Strip off the leading " and trailing " or "i. regcomp_or_die_quoted(&pstate->value_field_regexes[i], pvalue_field_names->strings[i], REG_NOSUB); } string_array_free(pvalue_field_names); pstate->invert_regex_value_field_names = invert_regex_value_field_names; pstate->pvalue_ingestor = mapper_stats1_value_ingest_with_regexes; } else { pstate->pvalue_field_names = pvalue_field_names; pstate->pvalue_field_values = string_array_alloc(pvalue_field_names->length); pstate->value_field_regexes = NULL; pstate->num_value_field_regexes = 0; pstate->invert_regex_value_field_names = FALSE; pstate->pvalue_ingestor = mapper_stats1_value_ingest_without_regexes; } if (do_regex_group_by_field_names) { pstate->pgroup_by_field_names = NULL; pstate->num_group_by_field_regexes = pgroup_by_field_names->length; pstate->group_by_field_regexes = mlr_malloc_or_die(sizeof(regex_t) * pstate->num_group_by_field_regexes); int i = 0; for (sllse_t* pe = pgroup_by_field_names->phead; pe != NULL; pe = pe->pnext, i++) { // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. // Strip off the leading " and trailing " or "i. regcomp_or_die_quoted(&pstate->group_by_field_regexes[i], pe->value, REG_NOSUB); } slls_free(pgroup_by_field_names); pstate->pgroup_by_ingestor = mapper_stats1_group_by_ingest_with_regexes; pstate->pemitter = mapper_stats1_emit_all_with_group_by_regexes; pstate->invert_regex_group_by_field_names = invert_regex_group_by_field_names; pstate->groups_without_group_by_regex = NULL; pstate->groups_with_group_by_regex = lhmslv_alloc(); } else { pstate->pgroup_by_ingestor = mapper_stats1_group_by_ingest_without_regexes; pstate->pemitter = mapper_stats1_emit_all_without_group_by_regexes; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->group_by_field_regexes = NULL; pstate->num_group_by_field_regexes = 0; pstate->invert_regex_group_by_field_names = FALSE; pstate->groups_without_group_by_regex = lhmslv_alloc(); pstate->groups_with_group_by_regex = NULL; } pstate->do_iterative_stats = do_iterative_stats; pstate->allow_int_float = allow_int_float; pstate->do_interpolated_percentiles = do_interpolated_percentiles; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_stats1_process; pmapper->pfree_func = mapper_stats1_free; return pmapper; } static void mapper_stats1_free(mapper_t* pmapper, context_t* _) { mapper_stats1_state_t* pstate = pmapper->pvstate; slls_free(pstate->paccumulator_names); string_array_free(pstate->pvalue_field_names); string_array_free(pstate->pvalue_field_values); slls_free(pstate->pgroup_by_field_names); if (pstate->value_field_regexes != NULL) { for (int i = 0; i < pstate->num_value_field_regexes; i++) regfree(&pstate->value_field_regexes[i]); free(pstate->value_field_regexes); } if (pstate->group_by_field_regexes != NULL) { for (int i = 0; i < pstate->num_group_by_field_regexes; i++) regfree(&pstate->group_by_field_regexes[i]); free(pstate->group_by_field_regexes); } // lhmslv_free and lhmsv_free will free the hashmap keys; we need to free // the void-star hashmap values. if (pstate->groups_without_group_by_regex != NULL) { for (lhmslve_t* pa = pstate->groups_without_group_by_regex->phead; pa != NULL; pa = pa->pnext) { lhmsv_t* pgroup_to_acc_field = pa->pvvalue; for (lhmsve_t* pb = pgroup_to_acc_field->phead; pb != NULL; pb = pb->pnext) { acc_map_pair_t* pacc_field_to_acc_states = pb->pvvalue; lhmsv_t* pacc_field_to_acc_state_in = pacc_field_to_acc_states->pin; lhmsv_t* pacc_field_to_acc_state_out = pacc_field_to_acc_states->pout; for (lhmsve_t* pc = pacc_field_to_acc_state_out->phead; pc != NULL; pc = pc->pnext) { if (streq(pc->key, fake_acc_name_for_setups)) continue; stats1_acc_t* pstats1_acc = pc->pvvalue; pstats1_acc->pfree_func(pstats1_acc); } lhmsv_free(pacc_field_to_acc_state_in); lhmsv_free(pacc_field_to_acc_state_out); free(pacc_field_to_acc_states); } lhmsv_free(pgroup_to_acc_field); } lhmslv_free(pstate->groups_without_group_by_regex); } if (pstate->groups_with_group_by_regex != NULL) { for (lhmslve_t* pa = pstate->groups_with_group_by_regex->phead; pa != NULL; pa = pa->pnext) { lhmslv_t* pgroups_by_names = pa->pvvalue; for (lhmslve_t* pb = pgroups_by_names->phead; pb != NULL; pb = pb->pnext) { lhmsv_t* pgroup_to_acc_field = pb->pvvalue; for (lhmsve_t* pc = pgroup_to_acc_field->phead; pc != NULL; pc = pc->pnext) { acc_map_pair_t* pacc_field_to_acc_states = pc->pvvalue; lhmsv_t* pacc_field_to_acc_state_in = pacc_field_to_acc_states->pin; lhmsv_t* pacc_field_to_acc_state_out = pacc_field_to_acc_states->pout; for (lhmsve_t* pd = pacc_field_to_acc_state_out->phead; pd != NULL; pd = pd->pnext) { if (streq(pd->key, fake_acc_name_for_setups)) continue; stats1_acc_t* pstats1_acc = pd->pvvalue; pstats1_acc->pfree_func(pstats1_acc); } lhmsv_free(pacc_field_to_acc_state_in); lhmsv_free(pacc_field_to_acc_state_out); free(pacc_field_to_acc_states); } lhmsv_free(pgroup_to_acc_field); } lhmslv_free(pgroups_by_names); } lhmslv_free(pstate->groups_with_group_by_regex); } ap_free(pstate->pargp); free(pstate); free(pmapper); } // ================================================================ // Given: accumulate count,sum on values x,y group by a,b. // Example input: Example output: // a b x y a b x_count x_sum y_count y_sum // s t 1 2 s t 2 6 2 8 // u v 3 4 u v 1 3 1 4 // s t 5 6 u w 1 7 1 9 // u w 7 9 // // Multilevel hashmap structure: // { // ["s","t"] : { <--- group-by field names // ["x"] : { <--- value field names // "count" : stats1_count_t object, // "sum" : stats1_sum_t object // }, // ["y"] : { // "count" : stats1_count_t object, // "sum" : stats1_sum_t object // }, // }, // ["u","v"] : { // ["x"] : { // "count" : stats1_count_t object, // "sum" : stats1_sum_t object // }, // ["y"] : { // "count" : stats1_count_t object, // "sum" : stats1_sum_t object // }, // }, // ["u","w"] : { // ["x"] : { // "count" : stats1_count_t object, // "sum" : stats1_sum_t object // }, // ["y"] : { // "count" : stats1_count_t object, // "sum" : stats1_sum_t object // }, // }, // } // ================================================================ // In the iterative case, add to the current record its current group's stats fields. // In the non-iterative case, produce output only at the end of the input stream. static sllv_t* mapper_stats1_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_stats1_state_t* pstate = pvstate; if (pinrec != NULL) { pstate->pgroup_by_ingestor(pinrec, pstate); if (pstate->do_iterative_stats) { // The input record is modified in this case, with new fields appended return sllv_single(pinrec); } else { lrec_free(pinrec); return NULL; } } else if (!pstate->do_iterative_stats) { return pstate->pemitter(pstate); } else { return NULL; } } // ---------------------------------------------------------------- static void mapper_stats1_group_by_ingest_without_regexes(lrec_t* pinrec, mapper_stats1_state_t* pstate) { // E.g. ["s", "t"] // To do: make value_field_values into a hashmap. Then accept partial // population on that, but retain full-population requirement on group-by. // E.g. if accumulating stats of x,y on a,b then skip record with x,y,a but // process record with x,a,b. slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { slls_free(pgroup_by_field_values); return; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lhmsv_t* pgroup_by_field_values_to_acc_fields = lhmslv_get(pstate->groups_without_group_by_regex, pgroup_by_field_values); if (pgroup_by_field_values_to_acc_fields == NULL) { pgroup_by_field_values_to_acc_fields = lhmsv_alloc(); lhmslv_put(pstate->groups_without_group_by_regex, slls_copy(pgroup_by_field_values), pgroup_by_field_values_to_acc_fields, FREE_ENTRY_KEY); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // for x=1 and y=2 pstate->pvalue_ingestor(pinrec, pstate, pgroup_by_field_values_to_acc_fields); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - slls_free(pgroup_by_field_values); } // ---------------------------------------------------------------- static void mapper_stats1_group_by_ingest_with_regexes(lrec_t* pinrec, mapper_stats1_state_t* pstate) { // E.g. {"a": "s", "b":"t"} lhmss_t* group_by_pairs = mlr_reference_key_value_pairs_from_regex_names(pinrec, pstate->group_by_field_regexes, pstate->num_group_by_field_regexes, pstate->invert_regex_group_by_field_names); slls_t* pgroup_by_field_names = slls_alloc(); for (lhmsse_t* pe = group_by_pairs->phead; pe != NULL; pe = pe->pnext) { slls_append_no_free(pgroup_by_field_names, pe->key); } slls_t* pgroup_by_field_values = slls_alloc(); for (lhmsse_t* pe = group_by_pairs->phead; pe != NULL; pe = pe->pnext) { slls_append_no_free(pgroup_by_field_values, pe->value); } // Two-level map: group-by field names -> group-by field values -> acc-field map lhmslv_t* pgroups_by_names = lhmslv_get(pstate->groups_with_group_by_regex, pgroup_by_field_names); if (pgroups_by_names == NULL) { pgroups_by_names = lhmslv_alloc(); lhmslv_put(pstate->groups_with_group_by_regex, slls_copy(pgroup_by_field_names), pgroups_by_names, FREE_ENTRY_KEY); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lhmsv_t* pgroup_by_field_values_to_acc_fields = lhmslv_get(pgroups_by_names, pgroup_by_field_values); if (pgroup_by_field_values_to_acc_fields == NULL) { pgroup_by_field_values_to_acc_fields = lhmsv_alloc(); lhmslv_put(pgroups_by_names, slls_copy(pgroup_by_field_values), pgroup_by_field_values_to_acc_fields, FREE_ENTRY_KEY); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // E.g. {"x": 1, "y": 2} pstate->pvalue_ingestor(pinrec, pstate, pgroup_by_field_values_to_acc_fields); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - slls_free(pgroup_by_field_names); slls_free(pgroup_by_field_values); lhmss_free(group_by_pairs); } // ---------------------------------------------------------------- static void mapper_stats1_value_ingest_without_regexes( lrec_t* pinrec, mapper_stats1_state_t* pstate, lhmsv_t* pgroup_by_field_values_to_acc_fields) { mlr_reference_values_from_record_into_string_array(pinrec, pstate->pvalue_field_names, pstate->pvalue_field_values); int n = pstate->pvalue_field_names->length; for (int i = 0; i < n; i++) { char* value_field_name = pstate->pvalue_field_names->strings[i]; char* value_field_sval = pstate->pvalue_field_values->strings[i]; mapper_stats1_ingest_name_value(pinrec, pstate, value_field_name, value_field_sval, pgroup_by_field_values_to_acc_fields); } } // ---------------------------------------------------------------- static void mapper_stats1_value_ingest_with_regexes( lrec_t* pinrec, mapper_stats1_state_t* pstate, lhmsv_t* pgroup_by_field_values_to_acc_fields) { lhmss_t* value_pairs = mlr_reference_key_value_pairs_from_regex_names(pinrec, pstate->value_field_regexes, pstate->num_value_field_regexes, pstate->invert_regex_value_field_names); for (lhmsse_t* pf = value_pairs->phead; pf != NULL; pf = pf->pnext) { char* value_field_name = pf->key; char* value_field_sval = pf->value; mapper_stats1_ingest_name_value(pinrec, pstate, value_field_name, value_field_sval, pgroup_by_field_values_to_acc_fields); } lhmss_free(value_pairs); } // ---------------------------------------------------------------- static void mapper_stats1_ingest_name_value(lrec_t* pinrec, mapper_stats1_state_t* pstate, char* value_field_name, char* value_field_sval, lhmsv_t* pgroup_to_acc_field) { // For percentiles there is one unique accumulator given (for example) five distinct // names p0,p25,p50,p75,p100. The input accumulators are unique: only one // percentile-keeper. There are multiple output accumulators: each references the same // underlying percentile-keeper but with distinct parameters. Hence the ->pin and ->pout maps. acc_map_pair_t* pacc_field_to_acc_states = lhmsv_get(pgroup_to_acc_field, value_field_name); if (pacc_field_to_acc_states == NULL) { pacc_field_to_acc_states = mlr_malloc_or_die(sizeof(acc_map_pair_t)); pacc_field_to_acc_states->pin = lhmsv_alloc(); pacc_field_to_acc_states->pout = lhmsv_alloc(); lhmsv_put(pgroup_to_acc_field, value_field_name, pacc_field_to_acc_states, NO_FREE); } lhmsv_t* acc_field_to_acc_state_in = pacc_field_to_acc_states->pin; lhmsv_t* acc_field_to_acc_state_out = pacc_field_to_acc_states->pout; // Look up presence of all accumulators at this level's hashmap. char* presence = lhmsv_get(acc_field_to_acc_state_in, fake_acc_name_for_setups); if (presence == NULL) { make_stats1_accs(value_field_name, pstate->paccumulator_names, pstate->allow_int_float, pstate->do_interpolated_percentiles, acc_field_to_acc_state_in, acc_field_to_acc_state_out); lhmsv_put(acc_field_to_acc_state_in, fake_acc_name_for_setups, fake_acc_name_for_setups, NO_FREE); } if (value_field_sval == NULL) // Key not present return; if (*value_field_sval == 0) // Key present with null value return; int have_dval = FALSE; int have_nval = FALSE; double value_field_dval = -999.0; mv_t value_field_nval = mv_absent(); // There isn't a one-to-one mapping between user-specified stats1_names // and internal stats1_acc_t's. Here in the ingestor we feed each datum // into a stats1_acc_t. In the emitter, we loop over the stats1_names in // user-specified order. Example: they ask for p10,mean,p90. Then there // is only one percentiles accumulator to be told about each point. In // the emitter it will be asked to produce output twice: once for the // 10th percentile & once for the 90th. for (lhmsve_t* pc = acc_field_to_acc_state_in->phead; pc != NULL; pc = pc->pnext) { char* stats1_acc_name = pc->key; if (streq(stats1_acc_name, fake_acc_name_for_setups)) continue; stats1_acc_t* pstats1_acc = pc->pvvalue; if (pstats1_acc->pdingest_func != NULL) { if (!have_dval) { value_field_dval = mlr_double_from_string_or_die(value_field_sval); have_dval = TRUE; } pstats1_acc->pdingest_func(pstats1_acc->pvstate, value_field_dval); } if (pstats1_acc->pningest_func != NULL) { if (!have_nval) { value_field_nval = pstate->allow_int_float ? mv_scan_number_or_die(value_field_sval) : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); have_nval = TRUE; } pstats1_acc->pningest_func(pstats1_acc->pvstate, &value_field_nval); } if (pstats1_acc->psingest_func != NULL) { pstats1_acc->psingest_func(pstats1_acc->pvstate, value_field_sval); } } if (pstate->do_iterative_stats) { mapper_stats1_emit(pstate, pinrec, value_field_name, acc_field_to_acc_state_out); } } // ---------------------------------------------------------------- static sllv_t* mapper_stats1_emit_all_without_group_by_regexes(mapper_stats1_state_t* pstate) { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->groups_without_group_by_regex->phead; pa != NULL; pa = pa->pnext) { slls_t* pgroup_by_field_values = pa->key; lrec_t* poutrec = lrec_unbacked_alloc(); // Add in a=s,b=t fields: sllse_t* pb = pstate->pgroup_by_field_names->phead; sllse_t* pc = pgroup_by_field_values->phead; for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { lrec_put(poutrec, pb->value, pc->value, NO_FREE); } // Add in fields such as x_sum=#, y_count=#, etc.: lhmsv_t* pgroup_to_acc_field = pa->pvvalue; // for "x", "y" for (lhmsve_t* pd = pgroup_to_acc_field->phead; pd != NULL; pd = pd->pnext) { char* value_field_name = pd->key; acc_map_pair_t* pacc_field_to_acc_states = pd->pvvalue; lhmsv_t* acc_field_to_acc_state_out = pacc_field_to_acc_states->pout; mapper_stats1_emit(pstate, poutrec, value_field_name, acc_field_to_acc_state_out); } sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); return poutrecs; } // ---------------------------------------------------------------- static sllv_t* mapper_stats1_emit_all_with_group_by_regexes(mapper_stats1_state_t* pstate) { sllv_t* poutrecs = sllv_alloc(); // Two-level map: group-by field names -> group-by field values -> acc-field map for (lhmslve_t* pa = pstate->groups_with_group_by_regex->phead; pa != NULL; pa = pa->pnext) { slls_t* pgroup_by_field_names = pa->key; lhmslv_t* pgroups_by_names = pa->pvvalue; for (lhmslve_t* pb = pgroups_by_names->phead; pb != NULL; pb = pb->pnext) { slls_t* pgroup_by_field_values = pb->key; lhmsv_t* pgroup_by_field_values_to_acc_field = pb->pvvalue; lrec_t* poutrec = lrec_unbacked_alloc(); // Add in a=s,b=t fields: sllse_t* pc = pgroup_by_field_names->phead; sllse_t* pd = pgroup_by_field_values->phead; for ( ; pc != NULL && pd != NULL; pc = pc->pnext, pd = pd->pnext) { lrec_put(poutrec, pc->value, pd->value, NO_FREE); } // Add in fields such as x_sum=#, y_count=#, etc.: // for "x", "y" for (lhmsve_t* pe = pgroup_by_field_values_to_acc_field->phead; pe != NULL; pe = pe->pnext) { char* value_field_name = pe->key; acc_map_pair_t* pacc_field_to_acc_states = pe->pvvalue; lhmsv_t* acc_field_to_acc_state_out = pacc_field_to_acc_states->pout; mapper_stats1_emit(pstate, poutrec, value_field_name, acc_field_to_acc_state_out); } sllv_append(poutrecs, poutrec); } } sllv_append(poutrecs, NULL); return poutrecs; } // ---------------------------------------------------------------- static lrec_t* mapper_stats1_emit(mapper_stats1_state_t* pstate, lrec_t* poutrec, char* value_field_name, lhmsv_t* acc_field_to_acc_state_out) { // Add in fields such as x_sum=#, y_count=#, etc.: for (sllse_t* pe = pstate->paccumulator_names->phead; pe != NULL; pe = pe->pnext) { char* stats1_acc_name = pe->value; if (streq(stats1_acc_name, fake_acc_name_for_setups)) continue; stats1_acc_t* pstats1_acc = lhmsv_get(acc_field_to_acc_state_out, stats1_acc_name); MLR_INTERNAL_CODING_ERROR_IF(pstats1_acc == NULL); pstats1_acc->pemit_func(pstats1_acc->pvstate, value_field_name, stats1_acc_name, FALSE, poutrec); } return poutrec; } miller-5.6.2/c/mapping/mapper_stats2.c000066400000000000000000001202411354153536500176270ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/mlrmath.h" #include "lib/mlrstat.h" #include "containers/sllv.h" #include "containers/slls.h" #include "lib/string_array.h" #include "containers/lhmslv.h" #include "containers/lhms2v.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "containers/dvector.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef enum _bivar_measure_t { DO_CORR, DO_COV, DO_COVX, DO_LINREG_PCA } bivar_measure_t; // ---------------------------------------------------------------- struct _stats2_acc_t; // forward reference for method definitions typedef void stats2_ingest_func_t(void* pvstate, double x, double y); typedef void stats2_emit_func_t(void* pvstate, char* name1, char* name2, lrec_t* poutrec); typedef void stats2_fit_func_t(void* pvstate, double x, double y, lrec_t* poutrec); typedef void stats2_free_func_t(struct _stats2_acc_t* pstats2_acc); typedef struct _stats2_acc_t { void* pvstate; stats2_ingest_func_t* pingest_func; stats2_emit_func_t* pemit_func; stats2_fit_func_t* pfit_func; stats2_free_func_t* pfree_func; // virtual destructor } stats2_acc_t; typedef struct _mapper_stats2_state_t { ap_state_t* pargp; slls_t* paccumulator_names; string_array_t* pvalue_field_name_pairs; slls_t* pgroup_by_field_names; lhmslv_t* acc_groups; lhmslv_t* record_groups; int do_verbose; int do_iterative_stats; int do_hold_and_fit; } mapper_stats2_state_t; typedef stats2_acc_t* stats2_alloc_func_t(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); // ---------------------------------------------------------------- static void mapper_stats2_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_stats2_alloc(ap_state_t* pargp, slls_t* paccumulator_names, string_array_t* pvalue_field_name_pairs, slls_t* pgroup_by_field_names, int do_verbose, int do_iterative_stats, int do_hold_and_fit); static void mapper_stats2_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_stats2_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static void mapper_stats2_ingest(lrec_t* pinrec, context_t* pctx, mapper_stats2_state_t* pstate); static sllv_t* mapper_stats2_emit_all(mapper_stats2_state_t* pstate); static void mapper_stats2_emit(mapper_stats2_state_t* pstate, lrec_t* pinrec, char* value_field_name_1, char* value_field_name_2, lhmsv_t* pacc_fields_to_acc_state); static sllv_t* mapper_stats2_fit_all(mapper_stats2_state_t* pstate); static stats2_acc_t* make_stats2 (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_linreg_pca_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_linreg_ols_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_r2_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_logireg_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_corr_cov_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, bivar_measure_t do_which, int do_verbose); static stats2_acc_t* stats2_corr_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_cov_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); static stats2_acc_t* stats2_covx_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); // ---------------------------------------------------------------- typedef struct _stats2_acc_lookup_t { char* name; stats2_alloc_func_t* palloc_func; char* desc; } stats2_acc_lookup_t; static stats2_acc_lookup_t stats2_acc_lookup_table[] = { {"linreg-pca", stats2_linreg_pca_alloc, "Linear regression using principal component analysis"}, {"linreg-ols", stats2_linreg_ols_alloc, "Linear regression using ordinary least squares"}, {"r2", stats2_r2_alloc, "Quality metric for linreg-ols (linreg-pca emits its own)"}, {"logireg", stats2_logireg_alloc, "Logistic regression"}, {"corr", stats2_corr_alloc, "Sample correlation"}, {"cov", stats2_cov_alloc, "Sample covariance"}, {"covx", stats2_covx_alloc, "Sample-covariance matrix"}, }; static int stats2_acc_lookup_table_length = sizeof(stats2_acc_lookup_table) / sizeof(stats2_acc_lookup_table[0]); // ---------------------------------------------------------------- mapper_setup_t mapper_stats2_setup = { .verb = "stats2", .pusage_func = mapper_stats2_usage, .pparse_func = mapper_stats2_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_stats2_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Computes bivariate statistics for one or more given field-name pairs,\n"); fprintf(o, "accumulated across the input record stream.\n"); fprintf(o, "-a {linreg-ols,corr,...} Names of accumulators: one or more of:\n"); for (int i = 0; i < stats2_acc_lookup_table_length; i++) { fprintf(o, " %-12s %s\n", stats2_acc_lookup_table[i].name, stats2_acc_lookup_table[i].desc); } fprintf(o, "-f {a,b,c,d} Value-field name-pairs on which to compute statistics.\n"); fprintf(o, " There must be an even number of names.\n"); fprintf(o, "-g {e,f,g} Optional group-by-field names.\n"); fprintf(o, "-v Print additional output for linreg-pca.\n"); fprintf(o, "-s Print iterative stats. Useful in tail -f contexts (in which\n"); fprintf(o, " case please avoid pprint-format output since end of input\n"); fprintf(o, " stream will never be seen).\n"); fprintf(o, "--fit Rather than printing regression parameters, applies them to\n"); fprintf(o, " the input data to compute new fit fields. All input records are\n"); fprintf(o, " held in memory until end of input stream. Has effect only for\n"); fprintf(o, " linreg-ols, linreg-pca, and logireg.\n"); fprintf(o, "Only one of -s or --fit may be used.\n"); fprintf(o, "Example: %s %s -a linreg-pca -f x,y\n", argv0, verb); fprintf(o, "Example: %s %s -a linreg-ols,r2 -f x,y -g size,shape\n", argv0, verb); fprintf(o, "Example: %s %s -a corr -f x,y\n", argv0, verb); } static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* paccumulator_names = NULL; string_array_t* pvalue_field_names = NULL; slls_t* pgroup_by_field_names = slls_alloc(); int do_verbose = FALSE; int do_iterative_stats = FALSE; int do_hold_and_fit = FALSE; int allow_int_float = TRUE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-a", &paccumulator_names); ap_define_string_array_flag(pstate, "-f", &pvalue_field_names); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_true_flag(pstate, "-v", &do_verbose); ap_define_true_flag(pstate, "-s", &do_iterative_stats); ap_define_true_flag(pstate, "--fit", &do_hold_and_fit); // The -F isn't used for stats2: all arithmetic here is floating-point. Yet // it is supported for step and stats1 for all applicable stats1/step // accumulators, so we accept here as well for all applicable stats2 // accumulators (i.e. none of them). ap_define_false_flag(pstate, "-F", &allow_int_float); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_stats2_usage(stderr, argv[0], verb); return NULL; } if (do_iterative_stats && do_hold_and_fit) { mapper_stats2_usage(stderr, argv[0], verb); return NULL; } if (paccumulator_names == NULL || pvalue_field_names == NULL) { mapper_stats2_usage(stderr, argv[0], verb); return NULL; } if ((pvalue_field_names->length % 2) != 0) { mapper_stats2_usage(stderr, argv[0], verb); return NULL; } return mapper_stats2_alloc(pstate, paccumulator_names, pvalue_field_names, pgroup_by_field_names, do_verbose, do_iterative_stats, do_hold_and_fit); } // ---------------------------------------------------------------- static mapper_t* mapper_stats2_alloc(ap_state_t* pargp, slls_t* paccumulator_names, string_array_t* pvalue_field_name_pairs, slls_t* pgroup_by_field_names, int do_verbose, int do_iterative_stats, int do_hold_and_fit) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_stats2_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_stats2_state_t)); pstate->pargp = pargp; pstate->paccumulator_names = paccumulator_names; pstate->pvalue_field_name_pairs = pvalue_field_name_pairs; // caller validates length is even pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->acc_groups = lhmslv_alloc(); pstate->record_groups = lhmslv_alloc(); pstate->do_verbose = do_verbose; pstate->do_iterative_stats = do_iterative_stats; pstate->do_hold_and_fit = do_hold_and_fit; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_stats2_process; pmapper->pfree_func = mapper_stats2_free; return pmapper; } static void mapper_stats2_free(mapper_t* pmapper, context_t* _) { mapper_stats2_state_t* pstate = pmapper->pvstate; slls_free(pstate->paccumulator_names); string_array_free(pstate->pvalue_field_name_pairs); slls_free(pstate->pgroup_by_field_names); // lhmslv_free and lhmsv_free will free the hashmap keys; we need to free // the void-star hashmap values. for (lhmslve_t* pa = pstate->acc_groups->phead; pa != NULL; pa = pa->pnext) { lhms2v_t* pgroup_to_acc_field = pa->pvvalue; for (lhms2ve_t* pb = pgroup_to_acc_field->phead; pb != NULL; pb = pb->pnext) { lhmsv_t* pacc_fields_to_acc_state = pb->pvvalue; for (lhmsve_t* pc = pacc_fields_to_acc_state->phead; pc != NULL; pc = pc->pnext) { stats2_acc_t* pstats2_acc = pc->pvvalue; pstats2_acc->pfree_func(pstats2_acc); } lhmsv_free(pacc_fields_to_acc_state); } lhms2v_free(pgroup_to_acc_field); } lhmslv_free(pstate->acc_groups); for (lhmslve_t* pd = pstate->record_groups->phead; pd != NULL; pd = pd->pnext) { sllv_t* plist = pd->pvvalue; sllv_free(plist); } lhmslv_free(pstate->record_groups); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ================================================================ // Given: accumulate corr,cov on values x,y group by a,b. // Example input: Example output: // a b x y a b x_corr x_cov y_corr y_cov // s t 1 2 s t 2 6 2 8 // u v 3 4 u v 1 3 1 4 // s t 5 6 u w 1 7 1 9 // u w 7 9 // // Multilevel hashmap structure: // { // ["s","t"] : { <--- group-by field names // ["x","y"] : { <--- value field names // "corr" : stats2_corr_t object, // "cov" : stats2_cov_t object // } // }, // ["u","v"] : { // ["x","y"] : { // "corr" : stats2_corr_t object, // "cov" : stats2_cov_t object // } // }, // ["u","w"] : { // ["x","y"] : { // "corr" : stats2_corr_t object, // "cov" : stats2_cov_t object // } // }, // } // ================================================================ // In the iterative case, add to the current record its current group's stats fields. // In the non-iterative case, produce output only at the end of the input stream. static sllv_t* mapper_stats2_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_stats2_state_t* pstate = pvstate; if (pinrec != NULL) { mapper_stats2_ingest(pinrec, pctx, pstate); if (pstate->do_iterative_stats) { // The input record is modified in this case, with new fields appended return sllv_single(pinrec); } else if (pstate->do_hold_and_fit) { // The input record is held by the ingestor return NULL; } else { lrec_free(pinrec); return NULL; } } else if (!pstate->do_iterative_stats) { if (!pstate->do_hold_and_fit) { return mapper_stats2_emit_all(pstate); } else { return mapper_stats2_fit_all(pstate); } } else { return NULL; } } // ---------------------------------------------------------------- static void mapper_stats2_ingest(lrec_t* pinrec, context_t* pctx, mapper_stats2_state_t* pstate) { // ["s", "t"] slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { return; } lhms2v_t* pgroup_to_acc_field = lhmslv_get(pstate->acc_groups, pgroup_by_field_values); if (pgroup_to_acc_field == NULL) { pgroup_to_acc_field = lhms2v_alloc(); lhmslv_put(pstate->acc_groups, slls_copy(pgroup_by_field_values), pgroup_to_acc_field, FREE_ENTRY_KEY); } if (pstate->do_hold_and_fit) { // Retain the input record in memory, for fitting and delivery at end of stream sllv_t* group_to_records = lhmslv_get(pstate->record_groups, pgroup_by_field_values); if (group_to_records == NULL) { group_to_records = sllv_alloc(); lhmslv_put(pstate->record_groups, slls_copy(pgroup_by_field_values), group_to_records, FREE_ENTRY_KEY); } sllv_append(group_to_records, pinrec); } // for [["x","y"]] int n = pstate->pvalue_field_name_pairs->length; for (int i = 0; i < n; i += 2) { char* value_field_name_1 = pstate->pvalue_field_name_pairs->strings[i]; char* value_field_name_2 = pstate->pvalue_field_name_pairs->strings[i+1]; lhmsv_t* pacc_fields_to_acc_state = lhms2v_get(pgroup_to_acc_field, value_field_name_1, value_field_name_2); if (pacc_fields_to_acc_state == NULL) { pacc_fields_to_acc_state = lhmsv_alloc(); lhms2v_put(pgroup_to_acc_field, value_field_name_1, value_field_name_2, pacc_fields_to_acc_state, NO_FREE); } char* sval1 = lrec_get(pinrec, value_field_name_1); char* sval2 = lrec_get(pinrec, value_field_name_2); if (sval1 == NULL) // Key not present continue; if (*sval1 == 0) // Key present with null value continue; if (sval2 == NULL) // Key not present continue; if (*sval2 == 0) // Key present with null value continue; // for ["corr", "cov"] sllse_t* pc = pstate->paccumulator_names->phead; for ( ; pc != NULL; pc = pc->pnext) { char* stats2_acc_name = pc->value; stats2_acc_t* pstats2_acc = lhmsv_get(pacc_fields_to_acc_state, stats2_acc_name); if (pstats2_acc == NULL) { pstats2_acc = make_stats2(value_field_name_1, value_field_name_2, stats2_acc_name, pstate->do_verbose); if (pstats2_acc == NULL) { fprintf(stderr, "mlr stats2: accumulator \"%s\" not found.\n", stats2_acc_name); exit(1); } lhmsv_put(pacc_fields_to_acc_state, stats2_acc_name, pstats2_acc, NO_FREE); } if (sval1 == NULL || sval2 == NULL) continue; double dval1 = mlr_double_from_string_or_die(sval1); double dval2 = mlr_double_from_string_or_die(sval2); pstats2_acc->pingest_func(pstats2_acc->pvstate, dval1, dval2); } if (pstate->do_iterative_stats) { mapper_stats2_emit(pstate, pinrec, value_field_name_1, value_field_name_2, pacc_fields_to_acc_state); } } slls_free(pgroup_by_field_values); } // ---------------------------------------------------------------- static sllv_t* mapper_stats2_emit_all(mapper_stats2_state_t* pstate) { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->acc_groups->phead; pa != NULL; pa = pa->pnext) { lrec_t* poutrec = lrec_unbacked_alloc(); // Add in a=s,b=t fields: slls_t* pgroup_by_field_values = pa->key; sllse_t* pb = pstate->pgroup_by_field_names->phead; sllse_t* pc = pgroup_by_field_values->phead; for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { lrec_put(poutrec, pb->value, pc->value, 0); } // Add in fields such as x_y_corr, etc. lhms2v_t* pgroup_to_acc_field = pa->pvvalue; // For "x","y" for (lhms2ve_t* pd = pgroup_to_acc_field->phead; pd != NULL; pd = pd->pnext) { char* value_field_name_1 = pd->key1; char* value_field_name_2 = pd->key2; lhmsv_t* pacc_fields_to_acc_state = pd->pvvalue; mapper_stats2_emit(pstate, poutrec, value_field_name_1, value_field_name_2, pacc_fields_to_acc_state); // For "corr", "linreg" for (lhmsve_t* pe = pacc_fields_to_acc_state->phead; pe != NULL; pe = pe->pnext) { stats2_acc_t* pstats2_acc = pe->pvvalue; pstats2_acc->pemit_func(pstats2_acc->pvstate, value_field_name_1, value_field_name_2, poutrec); } } sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); return poutrecs; } static void mapper_stats2_emit(mapper_stats2_state_t* pstate, lrec_t* poutrec, char* value_field_name_1, char* value_field_name_2, lhmsv_t* pacc_fields_to_acc_state) { // For "corr", "linreg" for (lhmsve_t* pe = pacc_fields_to_acc_state->phead; pe != NULL; pe = pe->pnext) { stats2_acc_t* pstats2_acc = pe->pvvalue; pstats2_acc->pemit_func(pstats2_acc->pvstate, value_field_name_1, value_field_name_2, poutrec); } } // ---------------------------------------------------------------- static sllv_t* mapper_stats2_fit_all(mapper_stats2_state_t* pstate) { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->acc_groups->phead; pa != NULL; pa = pa->pnext) { slls_t* pgroup_by_field_values = pa->key; sllv_t* precords = lhmslv_get(pstate->record_groups, pgroup_by_field_values); while (precords->phead) { lrec_t* prec = sllv_pop(precords); lhms2v_t* pgroup_to_acc_field = pa->pvvalue; // For "x","y" for (lhms2ve_t* pd = pgroup_to_acc_field->phead; pd != NULL; pd = pd->pnext) { char* value_field_name_1 = pd->key1; char* value_field_name_2 = pd->key2; lhmsv_t* pacc_fields_to_acc_state = pd->pvvalue; // For "linreg-ols", "logireg" for (lhmsve_t* pe = pacc_fields_to_acc_state->phead; pe != NULL; pe = pe->pnext) { stats2_acc_t* pstats2_acc = pe->pvvalue; if (pstats2_acc->pfit_func != NULL) { char* sx = lrec_get(prec, value_field_name_1); char* sy = lrec_get(prec, value_field_name_2); if (sx != NULL && sy != NULL) { double x = mlr_double_from_string_or_die(sx); double y = mlr_double_from_string_or_die(sy); pstats2_acc->pfit_func(pstats2_acc->pvstate, x, y, prec); } } } } sllv_append(poutrecs, prec); } } sllv_append(poutrecs, NULL); return poutrecs; } // ================================================================ // Given: accumulate corr,cov on values x,y group by a,b. // Example input: Example output: // a b x y a b x_corr x_cov y_corr y_cov // s t 1 2 s t 2 6 2 8 // u v 3 4 u v 1 3 1 4 // s t 5 6 u w 1 7 1 9 // u w 7 9 // // Multilevel hashmap structure: // { // ["s","t"] : { <--- group-by field names // ["x","y"] : { <--- value field names // "corr" : stats2_corr_t object, // "cov" : stats2_cov_t object // } // }, // ["u","v"] : { // ["x","y"] : { // "corr" : stats2_corr_t object, // "cov" : stats2_cov_t object // } // }, // ["u","w"] : { // ["x","y"] : { // "corr" : stats2_corr_t object, // "cov" : stats2_cov_t object // } // }, // } // ================================================================ // ---------------------------------------------------------------- static stats2_acc_t* make_stats2(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { for (int i = 0; i < stats2_acc_lookup_table_length; i++) if (streq(stats2_acc_name, stats2_acc_lookup_table[i].name)) return stats2_acc_lookup_table[i].palloc_func(value_field_name_1, value_field_name_2, stats2_acc_name, do_verbose); return NULL; } // ---------------------------------------------------------------- typedef struct _stats2_linreg_ols_state_t { unsigned long long count; double sumx; double sumy; double sumx2; double sumxy; char* m_output_field_name; char* b_output_field_name; char* n_output_field_name; char* fit_output_field_name; int fit_ready; double m; double b; } stats2_linreg_ols_state_t; static void stats2_linreg_ols_ingest(void* pvstate, double x, double y) { stats2_linreg_ols_state_t* pstate = pvstate; pstate->count++; pstate->sumx += x; pstate->sumy += y; pstate->sumx2 += x*x; pstate->sumxy += x*y; } static void stats2_linreg_ols_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { stats2_linreg_ols_state_t* pstate = pvstate; if (pstate->count < 2) { lrec_put(poutrec, pstate->m_output_field_name, "", NO_FREE); lrec_put(poutrec, pstate->b_output_field_name, "", NO_FREE); } else { double m, b; mlr_get_linear_regression_ols(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumxy, pstate->sumy, &m, &b); char* mval = mlr_alloc_string_from_double(m, MLR_GLOBALS.ofmt); char* bval = mlr_alloc_string_from_double(b, MLR_GLOBALS.ofmt); lrec_put(poutrec, pstate->m_output_field_name, mval, FREE_ENTRY_VALUE); lrec_put(poutrec, pstate->b_output_field_name, bval, FREE_ENTRY_VALUE); } char* nval = mlr_alloc_string_from_ll(pstate->count); lrec_put(poutrec, pstate->n_output_field_name, nval, FREE_ENTRY_VALUE); } static void stats2_linreg_ols_fit(void* pvstate, double x, double y, lrec_t* poutrec) { stats2_linreg_ols_state_t* pstate = pvstate; if (!pstate->fit_ready) { mlr_get_linear_regression_ols(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumxy, pstate->sumy, &pstate->m, &pstate->b); pstate->fit_ready = TRUE; } if (pstate->count < 2) { lrec_put(poutrec, pstate->fit_output_field_name, "", NO_FREE); } else { double yfit = pstate->m * x + pstate->b; char* sfit = mlr_alloc_string_from_double(yfit, MLR_GLOBALS.ofmt); lrec_put(poutrec, pstate->fit_output_field_name, sfit, FREE_ENTRY_VALUE); } } static void stats2_linreg_ols_free(stats2_acc_t* pstats2_acc) { stats2_linreg_ols_state_t* pstate = pstats2_acc->pvstate; free(pstate->m_output_field_name); free(pstate->b_output_field_name); free(pstate->n_output_field_name); free(pstate->fit_output_field_name); free(pstate); free(pstats2_acc); } static stats2_acc_t* stats2_linreg_ols_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); stats2_linreg_ols_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_linreg_ols_state_t)); pstate->count = 0LL; pstate->sumx = 0.0; pstate->sumy = 0.0; pstate->sumx2 = 0.0; pstate->sumxy = 0.0; pstate->m_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_m"); pstate->b_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_b"); pstate->n_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_n"); pstate->fit_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_fit"); pstate->fit_ready = FALSE; pstate->m = -999.0; pstate->b = -999.0; pstats2_acc->pvstate = (void*)pstate; pstats2_acc->pingest_func = stats2_linreg_ols_ingest; pstats2_acc->pemit_func = stats2_linreg_ols_emit; pstats2_acc->pfit_func = stats2_linreg_ols_fit; pstats2_acc->pfree_func = stats2_linreg_ols_free; return pstats2_acc; } // ---------------------------------------------------------------- #define LOGIREG_DVECTOR_INITIAL_SIZE 1024 typedef struct _stats2_logireg_state_t { dvector_t* pxs; dvector_t* pys; char* m_output_field_name; char* b_output_field_name; char* n_output_field_name; char* fit_output_field_name; int fit_ready; double m; double b; } stats2_logireg_state_t; static void stats2_logireg_ingest(void* pvstate, double x, double y) { stats2_logireg_state_t* pstate = pvstate; dvector_append(pstate->pxs, x); dvector_append(pstate->pys, y); } static void stats2_logireg_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { stats2_logireg_state_t* pstate = pvstate; if (pstate->pxs->size < 2) { lrec_put(poutrec, pstate->m_output_field_name, "", NO_FREE); lrec_put(poutrec, pstate->b_output_field_name, "", NO_FREE); } else { double m, b; mlr_logistic_regression(pstate->pxs->data, pstate->pys->data, pstate->pxs->size, &m, &b); char* mval = mlr_alloc_string_from_double(m, MLR_GLOBALS.ofmt); char* bval = mlr_alloc_string_from_double(b, MLR_GLOBALS.ofmt); lrec_put(poutrec, pstate->m_output_field_name, mval, FREE_ENTRY_VALUE); lrec_put(poutrec, pstate->b_output_field_name, bval, FREE_ENTRY_VALUE); } char* nval = mlr_alloc_string_from_ll(pstate->pxs->size); lrec_put(poutrec, pstate->n_output_field_name, nval, FREE_ENTRY_VALUE); } static void stats2_logireg_free(stats2_acc_t* pstats2_acc) { stats2_logireg_state_t* pstate = pstats2_acc->pvstate; free(pstate->m_output_field_name); free(pstate->b_output_field_name); free(pstate->n_output_field_name); free(pstate->fit_output_field_name); dvector_free(pstate->pxs); dvector_free(pstate->pys); free(pstate); free(pstats2_acc); } static void stats2_logireg_fit(void* pvstate, double x, double y, lrec_t* poutrec) { stats2_logireg_state_t* pstate = pvstate; if (!pstate->fit_ready) { mlr_logistic_regression(pstate->pxs->data, pstate->pys->data, pstate->pxs->size, &pstate->m, &pstate->b); pstate->fit_ready = TRUE; } if (pstate->pxs->size < 2) { lrec_put(poutrec, pstate->fit_output_field_name, "", NO_FREE); } else { double yfit = 1.0 / (1.0 + exp(-pstate->m*x - pstate->b)); char* fitval = mlr_alloc_string_from_double(yfit, MLR_GLOBALS.ofmt); lrec_put(poutrec, pstate->fit_output_field_name, fitval, FREE_ENTRY_VALUE); } } static stats2_acc_t* stats2_logireg_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); stats2_logireg_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_logireg_state_t)); pstate->pxs = dvector_alloc(LOGIREG_DVECTOR_INITIAL_SIZE); pstate->pys = dvector_alloc(LOGIREG_DVECTOR_INITIAL_SIZE); pstate->m_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_m"); pstate->b_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_b"); pstate->n_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_n"); pstate->fit_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_fit"); pstate->fit_ready = FALSE; pstate->m = -999.0; pstate->b = -999.0; pstats2_acc->pvstate = (void*)pstate; pstats2_acc->pingest_func = stats2_logireg_ingest; pstats2_acc->pemit_func = stats2_logireg_emit; pstats2_acc->pfit_func = stats2_logireg_fit; pstats2_acc->pfree_func = stats2_logireg_free; return pstats2_acc; } // ---------------------------------------------------------------- // http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient // Alternatively, just use sqrt(corr) as defined above. typedef struct _stats2_r2_state_t { unsigned long long count; double sumx; double sumy; double sumx2; double sumxy; double sumy2; char* r2_output_field_name; } stats2_r2_state_t; static void stats2_r2_ingest(void* pvstate, double x, double y) { stats2_r2_state_t* pstate = pvstate; pstate->count++; pstate->sumx += x; pstate->sumy += y; pstate->sumx2 += x*x; pstate->sumxy += x*y; pstate->sumy2 += y*y; } static void stats2_r2_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { stats2_r2_state_t* pstate = pvstate; if (pstate->count < 2LL) { lrec_put(poutrec, pstate->r2_output_field_name, "", NO_FREE); } else { unsigned long long n = pstate->count; double sumx = pstate->sumx; double sumy = pstate->sumy; double sumx2 = pstate->sumx2; double sumy2 = pstate->sumy2; double sumxy = pstate->sumxy; double numerator = n*sumxy - sumx*sumy; numerator = numerator * numerator; double denominator = (n*sumx2 - sumx*sumx) * (n*sumy2 - sumy*sumy); double output = numerator/denominator; char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); lrec_put(poutrec, pstate->r2_output_field_name, val, FREE_ENTRY_VALUE); } } static void stats2_r2_free(stats2_acc_t* pstats2_acc) { stats2_r2_state_t* pstate = pstats2_acc->pvstate; free(pstate->r2_output_field_name); free(pstate); free(pstats2_acc); } static stats2_acc_t* stats2_r2_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); stats2_r2_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_r2_state_t)); pstate->count = 0LL; pstate->sumx = 0.0; pstate->sumy = 0.0; pstate->sumx2 = 0.0; pstate->sumxy = 0.0; pstate->sumy2 = 0.0; pstate->r2_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_r2"); pstats2_acc->pvstate = (void*)pstate; pstats2_acc->pingest_func = stats2_r2_ingest; pstats2_acc->pemit_func = stats2_r2_emit; pstats2_acc->pfit_func = NULL; pstats2_acc->pfree_func = stats2_r2_free; return pstats2_acc; } // ---------------------------------------------------------------- // Corr(X,Y) = Cov(X,Y) / sigma_X sigma_Y. typedef struct _stats2_corr_cov_state_t { unsigned long long count; double sumx; double sumy; double sumx2; double sumxy; double sumy2; bivar_measure_t do_which; int do_verbose; char* covx_00_output_field_name; char* covx_01_output_field_name; char* covx_10_output_field_name; char* covx_11_output_field_name; char* pca_m_output_field_name; char* pca_b_output_field_name; char* pca_n_output_field_name; char* pca_q_output_field_name; char* pca_l1_output_field_name; char* pca_l2_output_field_name; char* pca_v11_output_field_name; char* pca_v12_output_field_name; char* pca_v21_output_field_name; char* pca_v22_output_field_name; char* pca_fit_output_field_name; int fit_ready; double m; double b; double q; char* corr_output_field_name; char* cov_output_field_name; } stats2_corr_cov_state_t; static void stats2_corr_cov_ingest(void* pvstate, double x, double y) { stats2_corr_cov_state_t* pstate = pvstate; pstate->count++; pstate->sumx += x; pstate->sumy += y; pstate->sumx2 += x*x; pstate->sumxy += x*y; pstate->sumy2 += y*y; } static void stats2_corr_cov_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { stats2_corr_cov_state_t* pstate = pvstate; if (pstate->do_which == DO_COVX) { char* key00 = pstate->covx_00_output_field_name; char* key01 = pstate->covx_01_output_field_name; char* key10 = pstate->covx_10_output_field_name; char* key11 = pstate->covx_11_output_field_name; if (pstate->count < 2LL) { lrec_put(poutrec, key00, "", NO_FREE); lrec_put(poutrec, key01, "", NO_FREE); lrec_put(poutrec, key10, "", NO_FREE); lrec_put(poutrec, key11, "", NO_FREE); } else { double Q[2][2]; mlr_get_cov_matrix(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumy, pstate->sumy2, pstate->sumxy, Q); char* val00 = mlr_alloc_string_from_double(Q[0][0], MLR_GLOBALS.ofmt); char* val01 = mlr_alloc_string_from_double(Q[0][1], MLR_GLOBALS.ofmt); char* val10 = mlr_alloc_string_from_double(Q[1][0], MLR_GLOBALS.ofmt); char* val11 = mlr_alloc_string_from_double(Q[1][1], MLR_GLOBALS.ofmt); lrec_put(poutrec, key00, val00, FREE_ENTRY_VALUE); lrec_put(poutrec, key01, val01, FREE_ENTRY_VALUE); lrec_put(poutrec, key10, val10, FREE_ENTRY_VALUE); lrec_put(poutrec, key11, val11, FREE_ENTRY_VALUE); } } else if (pstate->do_which == DO_LINREG_PCA) { char* keym = pstate->pca_m_output_field_name; char* keyb = pstate->pca_b_output_field_name; char* keyn = pstate->pca_n_output_field_name; char* keyq = pstate->pca_q_output_field_name; char* keyl1 = pstate->pca_l1_output_field_name; char* keyl2 = pstate->pca_l2_output_field_name; char* keyv11 = pstate->pca_v11_output_field_name; char* keyv12 = pstate->pca_v12_output_field_name; char* keyv21 = pstate->pca_v21_output_field_name; char* keyv22 = pstate->pca_v22_output_field_name; if (pstate->count < 2LL) { lrec_put(poutrec, keym, "", NO_FREE); lrec_put(poutrec, keyb, "", NO_FREE); lrec_put(poutrec, keyn, "", NO_FREE); lrec_put(poutrec, keyq, "", NO_FREE); if (pstate->do_verbose) { lrec_put(poutrec, keyl1, "", NO_FREE); lrec_put(poutrec, keyl2, "", NO_FREE); lrec_put(poutrec, keyv11, "", NO_FREE); lrec_put(poutrec, keyv12, "", NO_FREE); lrec_put(poutrec, keyv21, "", NO_FREE); lrec_put(poutrec, keyv22, "", NO_FREE); } } else { double Q[2][2]; mlr_get_cov_matrix(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumy, pstate->sumy2, pstate->sumxy, Q); double l1, l2; // Eigenvalues double v1[2], v2[2]; // Eigenvectors mlr_get_real_symmetric_eigensystem(Q, &l1, &l2, v1, v2); double x_mean = pstate->sumx / pstate->count; double y_mean = pstate->sumy / pstate->count; double m, b, q; mlr_get_linear_regression_pca(l1, l2, v1, v2, x_mean, y_mean, &m, &b, &q); lrec_put(poutrec, keym, mlr_alloc_string_from_double(m, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyb, mlr_alloc_string_from_double(b, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyn, mlr_alloc_string_from_ll(pstate->count), FREE_ENTRY_VALUE); lrec_put(poutrec, keyq, mlr_alloc_string_from_double(q, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); if (pstate->do_verbose) { lrec_put(poutrec, keyl1, mlr_alloc_string_from_double(l1, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyl2, mlr_alloc_string_from_double(l2, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyv11, mlr_alloc_string_from_double(v1[0], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyv12, mlr_alloc_string_from_double(v1[1], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyv21, mlr_alloc_string_from_double(v2[0], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); lrec_put(poutrec, keyv22, mlr_alloc_string_from_double(v2[1], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); } } } else { char* key = (pstate->do_which == DO_CORR) ? pstate->corr_output_field_name : pstate->cov_output_field_name; if (pstate->count < 2LL) { lrec_put(poutrec, key, "", NO_FREE); } else { double output = mlr_get_cov(pstate->count, pstate->sumx, pstate->sumy, pstate->sumxy); if (pstate->do_which == DO_CORR) { double sigmax = sqrt(mlr_get_var(pstate->count, pstate->sumx, pstate->sumx2)); double sigmay = sqrt(mlr_get_var(pstate->count, pstate->sumy, pstate->sumy2)); output = output / sigmax / sigmay; } char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); lrec_put(poutrec, key, val, FREE_ENTRY_VALUE); } } } static void linreg_pca_fit(void* pvstate, double x, double y, lrec_t* poutrec) { stats2_corr_cov_state_t* pstate = pvstate; if (!pstate->fit_ready) { double Q[2][2]; mlr_get_cov_matrix(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumy, pstate->sumy2, pstate->sumxy, Q); double l1, l2; // Eigenvalues double v1[2], v2[2]; // Eigenvectors mlr_get_real_symmetric_eigensystem(Q, &l1, &l2, v1, v2); double x_mean = pstate->sumx / pstate->count; double y_mean = pstate->sumy / pstate->count; mlr_get_linear_regression_pca(l1, l2, v1, v2, x_mean, y_mean, &pstate->m, &pstate->b, &pstate->q); pstate->fit_ready = TRUE; } if (pstate->count < 2LL) { lrec_put(poutrec, pstate->pca_fit_output_field_name, "", NO_FREE); } else { double yfit = pstate->m * x + pstate->b; lrec_put(poutrec, pstate->pca_fit_output_field_name, mlr_alloc_string_from_double(yfit, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); } } static void stats2_corr_cov_free(stats2_acc_t* pstats2_acc) { stats2_corr_cov_state_t* pstate = pstats2_acc->pvstate; free(pstate->covx_00_output_field_name); free(pstate->covx_01_output_field_name); free(pstate->covx_10_output_field_name); free(pstate->covx_11_output_field_name); free(pstate->pca_m_output_field_name); free(pstate->pca_b_output_field_name); free(pstate->pca_n_output_field_name); free(pstate->pca_q_output_field_name); free(pstate->pca_l1_output_field_name); free(pstate->pca_l2_output_field_name); free(pstate->pca_v11_output_field_name); free(pstate->pca_v12_output_field_name); free(pstate->pca_v21_output_field_name); free(pstate->pca_v22_output_field_name); free(pstate->pca_fit_output_field_name); free(pstate->corr_output_field_name); free(pstate->cov_output_field_name); free(pstate); free(pstats2_acc); } static stats2_acc_t* stats2_corr_cov_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, bivar_measure_t do_which, int do_verbose) { stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); stats2_corr_cov_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_corr_cov_state_t)); pstate->count = 0LL; pstate->sumx = 0.0; pstate->sumy = 0.0; pstate->sumx2 = 0.0; pstate->sumxy = 0.0; pstate->sumy2 = 0.0; pstate->do_which = do_which; pstate->do_verbose = do_verbose; char* name1 = value_field_name_1; char* name2 = value_field_name_2; pstate->covx_00_output_field_name = mlr_paste_4_strings(name1, "_", name1, "_covx"); pstate->covx_01_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_covx"); pstate->covx_10_output_field_name = mlr_paste_4_strings(name2, "_", name1, "_covx"); pstate->covx_11_output_field_name = mlr_paste_4_strings(name2, "_", name2, "_covx"); pstate->pca_m_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_m"); pstate->pca_b_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_b"); pstate->pca_n_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_n"); pstate->pca_q_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_quality"); pstate->pca_l1_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eival1"); pstate->pca_l2_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eival2"); pstate->pca_v11_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec11"); pstate->pca_v12_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec12"); pstate->pca_v21_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec21"); pstate->pca_v22_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec22"); pstate->pca_fit_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_fit"); pstate->fit_ready = FALSE; pstate->m = -999.0; pstate->b = -999.0; pstate->corr_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_corr"); pstate->cov_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_cov"); pstats2_acc->pvstate = (void*)pstate; pstats2_acc->pingest_func = stats2_corr_cov_ingest; pstats2_acc->pemit_func = stats2_corr_cov_emit; if (do_which == DO_LINREG_PCA) pstats2_acc->pfit_func = linreg_pca_fit; else pstats2_acc->pfit_func = NULL; pstats2_acc->pfree_func = stats2_corr_cov_free; return pstats2_acc; } static stats2_acc_t* stats2_corr_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_CORR, do_verbose); } static stats2_acc_t* stats2_cov_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_COV, do_verbose); } static stats2_acc_t* stats2_covx_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_COVX, do_verbose); } static stats2_acc_t* stats2_linreg_pca_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_LINREG_PCA, do_verbose); } miller-5.6.2/c/mapping/mapper_step.c000066400000000000000000000635201354153536500173700ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/sllv.h" #include "containers/slls.h" #include "lib/string_array.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "lib/mvfuncs.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define DEFAULT_STRING_ALPHA "0.5" // ---------------------------------------------------------------- struct _step_t; // forward reference for method declarations typedef void step_dprocess_func_t(void* pvstate, double fltv, lrec_t* prec); typedef void step_nprocess_func_t(void* pvstate, mv_t* pval, lrec_t* prec); typedef void step_sprocess_func_t(void* pvstate, char* strv, lrec_t* prec); typedef void step_zprocess_func_t(void* pvstate, lrec_t* prec); typedef void step_free_func_t(struct _step_t* pstep); typedef struct _step_t { void* pvstate; step_dprocess_func_t* pdprocess_func; step_nprocess_func_t* pnprocess_func; step_sprocess_func_t* psprocess_func; step_zprocess_func_t* pzprocess_func; step_free_func_t* pfree_func; } step_t; typedef step_t* step_alloc_func_t(char* input_field_name, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes); typedef struct _mapper_step_state_t { ap_state_t* pargp; slls_t* pstepper_names; string_array_t* pvalue_field_names; // parameter string_array_t* pvalue_field_values; // scratch space used per-record slls_t* pgroup_by_field_names; // parameter lhmslv_t* groups; int allow_int_float; slls_t* pstring_alphas; slls_t* pewma_suffixes; } mapper_step_state_t; // Multilevel hashmap structure: // { // ["s","t"] : { <--- group-by field names // ["x","y"] : { <--- value field names // "corr" : C stats2_corr_t object, // "cov" : C stats2_cov_t object // } // }, // ["u","v"] : { // ["x","y"] : { // "corr" : C stats2_corr_t object, // "cov" : C stats2_cov_t object // } // }, // ["u","w"] : { // ["x","y"] : { // "corr" : C stats2_corr_t object, // "cov" : C stats2_cov_t object // } // }, // } // ---------------------------------------------------------------- static void mapper_step_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_step_alloc(ap_state_t* pargp, slls_t* pstepper_names, string_array_t* pvalue_field_names, slls_t* pgroup_by_field_names, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes); static void mapper_step_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_step_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static step_t* step_delta_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); static step_t* step_shift_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); static step_t* step_from_first_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); static step_t* step_ratio_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); static step_t* step_rsum_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); static step_t* step_counter_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); static step_t* step_ewma_alloc (char* input_field_name, int unused, slls_t* pstring_alphas, slls_t* pewma_suffixes); static step_t* make_step(char* step_name, char* input_field_name, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes); typedef struct _step_lookup_t { char* name; step_alloc_func_t* palloc_func; char* desc; } step_lookup_t; static step_lookup_t step_lookup_table[] = { {"delta", step_delta_alloc, "Compute differences in field(s) between successive records"}, {"shift", step_shift_alloc, "Include value(s) in field(s) from previous record, if any"}, {"from-first", step_from_first_alloc, "Compute differences in field(s) from first record"}, {"ratio", step_ratio_alloc, "Compute ratios in field(s) between successive records"}, {"rsum", step_rsum_alloc, "Compute running sums of field(s) between successive records"}, {"counter", step_counter_alloc, "Count instances of field(s) between successive records"}, {"ewma", step_ewma_alloc, "Exponentially weighted moving average over successive records"}, }; static int step_lookup_table_length = sizeof(step_lookup_table) / sizeof(step_lookup_table[0]); // ---------------------------------------------------------------- mapper_setup_t mapper_step_setup = { .verb = "step", .pusage_func = mapper_step_usage, .pparse_func = mapper_step_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_step_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Computes values dependent on the previous record, optionally grouped\n"); fprintf(o, "by category.\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "-a {delta,rsum,...} Names of steppers: comma-separated, one or more of:\n"); for (int i = 0; i < step_lookup_table_length; i++) { fprintf(o, " %-8s %s\n", step_lookup_table[i].name, step_lookup_table[i].desc); } fprintf(o, "-f {a,b,c} Value-field names on which to compute statistics\n"); fprintf(o, "-g {d,e,f} Optional group-by-field names\n"); fprintf(o, "-F Computes integerable things (e.g. counter) in floating point.\n"); fprintf(o, "-d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no\n"); fprintf(o, " smoothing), near under under 1 is light smoothing, near over 0 is\n"); fprintf(o, " heavy smoothing. Multiple weights may be specified, e.g.\n"); fprintf(o, " \"%s %s -a ewma -f sys_load -d 0.01,0.1,0.9\". Default if omitted\n", argv0, verb); fprintf(o, " is \"-d %s\".\n", DEFAULT_STRING_ALPHA); fprintf(o, "-o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to\n"); fprintf(o, " the -d values. If supplied, the number of -o values must be the same\n"); fprintf(o, " as the number of -d values.\n"); fprintf(o, "\n"); fprintf(o, "Examples:\n"); fprintf(o, " %s %s -a rsum -f request_size\n", argv0, verb); fprintf(o, " %s %s -a delta -f request_size -g hostname\n", argv0, verb); fprintf(o, " %s %s -a ewma -d 0.1,0.9 -f x,y\n", argv0, verb); fprintf(o, " %s %s -a ewma -d 0.1,0.9 -o smooth,rough -f x,y\n", argv0, verb); fprintf(o, " %s %s -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name\n", argv0, verb); fprintf(o, "\n"); fprintf(o, "Please see http://johnkerl.org/miller/doc/reference.html#filter or\n"); fprintf(o, "https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n"); fprintf(o, "for more information on EWMA.\n"); } static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pstepper_names = NULL; string_array_t* pvalue_field_names = NULL; slls_t* pgroup_by_field_names = slls_alloc(); slls_t* pstring_alphas = slls_single_no_free(DEFAULT_STRING_ALPHA); slls_t* pewma_suffixes = NULL; int allow_int_float = TRUE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-a", &pstepper_names); ap_define_string_array_flag(pstate, "-f", &pvalue_field_names); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_string_list_flag(pstate, "-d", &pstring_alphas); ap_define_string_list_flag(pstate, "-o", &pewma_suffixes); ap_define_false_flag(pstate, "-F", &allow_int_float); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_step_usage(stderr, argv[0], verb); return NULL; } if (pstepper_names == NULL || pvalue_field_names == NULL) { mapper_step_usage(stderr, argv[0], verb); return NULL; } if (pstring_alphas != NULL && pewma_suffixes != NULL) { if (pewma_suffixes->length != pstring_alphas->length) { mapper_step_usage(stderr, argv[0], verb); return NULL; } } return mapper_step_alloc(pstate, pstepper_names, pvalue_field_names, pgroup_by_field_names, allow_int_float, pstring_alphas, pewma_suffixes); } // ---------------------------------------------------------------- static mapper_t* mapper_step_alloc(ap_state_t* pargp, slls_t* pstepper_names, string_array_t* pvalue_field_names, slls_t* pgroup_by_field_names, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_step_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_step_state_t)); pstate->pargp = pargp; pstate->pstepper_names = pstepper_names; pstate->pvalue_field_names = pvalue_field_names; pstate->pvalue_field_values = string_array_alloc(pvalue_field_names->length); pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->groups = lhmslv_alloc(); pstate->allow_int_float = allow_int_float; pstate->pstring_alphas = pstring_alphas; pstate->pewma_suffixes = pewma_suffixes; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_step_process; pmapper->pfree_func = mapper_step_free; return pmapper; } static void mapper_step_free(mapper_t* pmapper, context_t* _) { mapper_step_state_t* pstate = pmapper->pvstate; slls_free(pstate->pstepper_names); string_array_free(pstate->pvalue_field_names); string_array_free(pstate->pvalue_field_values); slls_free(pstate->pgroup_by_field_names); slls_free(pstate->pstring_alphas); slls_free(pstate->pewma_suffixes); // lhmslv_free and lhmsv_free will free the hashmap keys; we need to free // the void-star hashmap values. for (lhmslve_t* pa = pstate->groups->phead; pa != NULL; pa = pa->pnext) { lhmsv_t* pgroup_to_acc_field = pa->pvvalue; for (lhmsve_t* pb = pgroup_to_acc_field->phead; pb != NULL; pb = pb->pnext) { lhmsv_t* pacc_field_to_acc_state = pb->pvvalue; for (lhmsve_t* pc = pacc_field_to_acc_state->phead; pc != NULL; pc = pc->pnext) { step_t* pstep = pc->pvvalue; pstep->pfree_func(pstep); } lhmsv_free(pacc_field_to_acc_state); } lhmsv_free(pgroup_to_acc_field); } lhmslv_free(pstate->groups); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_step_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_step_state_t* pstate = pvstate; if (pinrec == NULL) return sllv_single(NULL); // ["s", "t"] mlr_reference_values_from_record_into_string_array(pinrec, pstate->pvalue_field_names, pstate->pvalue_field_values); slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { slls_free(pgroup_by_field_values); return sllv_single(pinrec); } lhmsv_t* pgroup_to_acc_field = lhmslv_get(pstate->groups, pgroup_by_field_values); if (pgroup_to_acc_field == NULL) { pgroup_to_acc_field = lhmsv_alloc(); lhmslv_put(pstate->groups, slls_copy(pgroup_by_field_values), pgroup_to_acc_field, FREE_ENTRY_KEY); } slls_free(pgroup_by_field_values); // for x=1 and y=2 int n = pstate->pvalue_field_names->length; for (int i = 0; i < n; i++) { char* value_field_name = pstate->pvalue_field_names->strings[i]; char* value_field_sval = pstate->pvalue_field_values->strings[i]; if (value_field_sval == NULL) // Key not present continue; int have_dval = FALSE; int have_nval = FALSE; double value_field_dval = -999.0; mv_t value_field_nval = mv_absent(); lhmsv_t* pacc_field_to_acc_state = lhmsv_get(pgroup_to_acc_field, value_field_name); if (pacc_field_to_acc_state == NULL) { pacc_field_to_acc_state = lhmsv_alloc(); lhmsv_put(pgroup_to_acc_field, value_field_name, pacc_field_to_acc_state, NO_FREE); } // for "delta", "rsum" sllse_t* pc = pstate->pstepper_names->phead; for ( ; pc != NULL; pc = pc->pnext) { char* step_name = pc->value; step_t* pstep = lhmsv_get(pacc_field_to_acc_state, step_name); if (pstep == NULL) { pstep = make_step(step_name, value_field_name, pstate->allow_int_float, pstate->pstring_alphas, pstate->pewma_suffixes); if (pstep == NULL) { fprintf(stderr, "mlr step: stepper \"%s\" not found.\n", step_name); exit(1); } lhmsv_put(pacc_field_to_acc_state, step_name, pstep, NO_FREE); } if (*value_field_sval == 0) { // Key present with null value if (pstep->pzprocess_func != NULL) { pstep->pzprocess_func(pstep->pvstate, pinrec); } } else { if (pstep->pdprocess_func != NULL) { if (!have_dval) { value_field_dval = mlr_double_from_string_or_die(value_field_sval); have_dval = TRUE; } pstep->pdprocess_func(pstep->pvstate, value_field_dval, pinrec); } if (pstep->pnprocess_func != NULL) { if (!have_nval) { value_field_nval = pstate->allow_int_float ? mv_scan_number_or_die(value_field_sval) : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); have_nval = TRUE; } pstep->pnprocess_func(pstep->pvstate, &value_field_nval, pinrec); } if (pstep->psprocess_func != NULL) { pstep->psprocess_func(pstep->pvstate, value_field_sval, pinrec); } } } } return sllv_single(pinrec); } static step_t* make_step(char* step_name, char* input_field_name, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes) { for (int i = 0; i < step_lookup_table_length; i++) if (streq(step_name, step_lookup_table[i].name)) return step_lookup_table[i].palloc_func(input_field_name, allow_int_float, pstring_alphas, pewma_suffixes); return NULL; } // ---------------------------------------------------------------- typedef struct _step_delta_state_t { mv_t prev; char* output_field_name; int allow_int_float; } step_delta_state_t; static void step_delta_nprocess(void* pvstate, mv_t* pnumv, lrec_t* prec) { step_delta_state_t* pstate = pvstate; mv_t delta; if (mv_is_null(&pstate->prev)) { delta = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); } else { delta = x_xx_minus_func(pnumv, &pstate->prev); } lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&delta), FREE_ENTRY_VALUE); pstate->prev = *pnumv; } static void step_delta_zprocess(void* pvstate, lrec_t* prec) { step_delta_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, "", NO_FREE); } static void step_delta_free(step_t* pstep) { step_delta_state_t* pstate = pstep->pvstate; free(pstate->output_field_name); free(pstate); free(pstep); } static step_t* step_delta_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_delta_state_t* pstate = mlr_malloc_or_die(sizeof(step_delta_state_t)); pstate->prev = mv_absent(); pstate->allow_int_float = allow_int_float; pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_delta"); pstep->pvstate = (void*)pstate; pstep->pdprocess_func = NULL; pstep->pnprocess_func = step_delta_nprocess; pstep->psprocess_func = NULL; pstep->pzprocess_func = step_delta_zprocess; pstep->pfree_func = step_delta_free; return pstep; } // ---------------------------------------------------------------- typedef struct _step_shift_state_t { char* prev; char* output_field_name; int allow_int_float; } step_shift_state_t; static void step_shift_sprocess(void* pvstate, char* strv, lrec_t* prec) { step_shift_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, pstate->prev, FREE_ENTRY_VALUE); pstate->prev = mlr_strdup_or_die(strv); } static void step_shift_zprocess(void* pvstate, lrec_t* prec) { step_shift_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, "", NO_FREE); } static void step_shift_free(step_t* pstep) { step_shift_state_t* pstate = pstep->pvstate; free(pstate->prev); free(pstate->output_field_name); free(pstate); free(pstep); } static step_t* step_shift_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_shift_state_t* pstate = mlr_malloc_or_die(sizeof(step_shift_state_t)); pstate->prev = mlr_strdup_or_die(""); pstate->allow_int_float = allow_int_float; pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_shift"); pstep->pvstate = (void*)pstate; pstep->pdprocess_func = NULL; pstep->pnprocess_func = NULL; pstep->psprocess_func = step_shift_sprocess; pstep->pzprocess_func = step_shift_zprocess; pstep->pfree_func = step_shift_free; return pstep; } // ---------------------------------------------------------------- typedef struct _step_from_first_state_t { mv_t first; char* output_field_name; int allow_int_float; } step_from_first_state_t; static void step_from_first_nprocess(void* pvstate, mv_t* pnumv, lrec_t* prec) { step_from_first_state_t* pstate = pvstate; mv_t from_first; if (mv_is_null(&pstate->first)) { from_first = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); pstate->first = *pnumv; } else { from_first = x_xx_minus_func(pnumv, &pstate->first); } lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&from_first), FREE_ENTRY_VALUE); } static void step_from_first_zprocess(void* pvstate, lrec_t* prec) { step_from_first_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, "", NO_FREE); } static void step_from_first_free(step_t* pstep) { step_from_first_state_t* pstate = pstep->pvstate; free(pstate->output_field_name); free(pstate); free(pstep); } static step_t* step_from_first_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_from_first_state_t* pstate = mlr_malloc_or_die(sizeof(step_from_first_state_t)); pstate->first = mv_absent(); pstate->allow_int_float = allow_int_float; pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_from_first"); pstep->pvstate = (void*)pstate; pstep->pdprocess_func = NULL; pstep->pnprocess_func = step_from_first_nprocess; pstep->psprocess_func = NULL; pstep->pzprocess_func = step_from_first_zprocess; pstep->pfree_func = step_from_first_free; return pstep; } // ---------------------------------------------------------------- typedef struct _step_ratio_state_t { double prev; int have_prev; char* output_field_name; } step_ratio_state_t; static void step_ratio_dprocess(void* pvstate, double fltv, lrec_t* prec) { step_ratio_state_t* pstate = pvstate; double ratio = 1.0; if (pstate->have_prev) { ratio = fltv / pstate->prev; } else { pstate->have_prev = TRUE; } lrec_put(prec, pstate->output_field_name, mlr_alloc_string_from_double(ratio, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); pstate->prev = fltv; } static void step_ratio_zprocess(void* pvstate, lrec_t* prec) { step_ratio_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, "", NO_FREE); } static void step_ratio_free(step_t* pstep) { step_ratio_state_t* pstate = pstep->pvstate; free(pstate->output_field_name); free(pstate); free(pstep); } static step_t* step_ratio_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_ratio_state_t* pstate = mlr_malloc_or_die(sizeof(step_ratio_state_t)); pstate->prev = -999.0; pstate->have_prev = FALSE; pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_ratio"); pstep->pvstate = (void*)pstate; pstep->pdprocess_func = step_ratio_dprocess; pstep->pnprocess_func = NULL; pstep->psprocess_func = NULL; pstep->pzprocess_func = step_ratio_zprocess; pstep->pfree_func = step_ratio_free; return pstep; } // ---------------------------------------------------------------- typedef struct _step_rsum_state_t { mv_t rsum; char* output_field_name; int allow_int_float; } step_rsum_state_t; static void step_rsum_nprocess(void* pvstate, mv_t* pnumv, lrec_t* prec) { step_rsum_state_t* pstate = pvstate; pstate->rsum = x_xx_plus_func(&pstate->rsum, pnumv); lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&pstate->rsum), FREE_ENTRY_VALUE); } static void step_rsum_zprocess(void* pvstate, lrec_t* prec) { step_rsum_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, "", NO_FREE); } static void step_rsum_free(step_t* pstep) { step_rsum_state_t* pstate = pstep->pvstate; free(pstate->output_field_name); free(pstate); free(pstep); } static step_t* step_rsum_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_rsum_state_t* pstate = mlr_malloc_or_die(sizeof(step_rsum_state_t)); pstate->allow_int_float = allow_int_float; pstate->rsum = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_rsum"); pstep->pvstate = (void*)pstate; pstep->pdprocess_func = NULL; pstep->pnprocess_func = step_rsum_nprocess; pstep->psprocess_func = NULL; pstep->pzprocess_func = step_rsum_zprocess; pstep->pfree_func = step_rsum_free; return pstep; } // ---------------------------------------------------------------- typedef struct _step_counter_state_t { mv_t counter; mv_t one; char* output_field_name; } step_counter_state_t; static void step_counter_sprocess(void* pvstate, char* strv, lrec_t* prec) { step_counter_state_t* pstate = pvstate; pstate->counter = x_xx_plus_func(&pstate->counter, &pstate->one); lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&pstate->counter), FREE_ENTRY_VALUE); } static void step_counter_zprocess(void* pvstate, lrec_t* prec) { step_counter_state_t* pstate = pvstate; lrec_put(prec, pstate->output_field_name, "", NO_FREE); } static void step_counter_free(step_t* pstep) { step_counter_state_t* pstate = pstep->pvstate; free(pstate->output_field_name); free(pstate); free(pstep); } static step_t* step_counter_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_counter_state_t* pstate = mlr_malloc_or_die(sizeof(step_counter_state_t)); pstate->counter = allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); pstate->one = allow_int_float ? mv_from_int(1LL) : mv_from_float(1.0); pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_counter"); pstep->pvstate = (void*)pstate; pstep->pdprocess_func = NULL; pstep->pnprocess_func = NULL; pstep->psprocess_func = step_counter_sprocess; pstep->pzprocess_func = step_counter_zprocess; pstep->pfree_func = step_counter_free; return pstep; } // ---------------------------------------------------------------- // https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average typedef struct _step_ewma_state_t { int num_alphas; double* alphas; double* alphacompls; double* prevs; int have_prevs; char** output_field_names; } step_ewma_state_t; static void step_ewma_dprocess(void* pvstate, double fltv, lrec_t* prec) { step_ewma_state_t* pstate = pvstate; if (!pstate->have_prevs) { for (int i = 0; i < pstate->num_alphas; i++) { lrec_put(prec, pstate->output_field_names[i], mlr_alloc_string_from_double(fltv, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); pstate->prevs[i] = fltv; } pstate->have_prevs = TRUE; } else { for (int i = 0; i < pstate->num_alphas; i++) { double curr = fltv; curr = pstate->alphas[i] * curr + pstate->alphacompls[i] * pstate->prevs[i]; lrec_put(prec, pstate->output_field_names[i], mlr_alloc_string_from_double(curr, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); pstate->prevs[i] = curr; } } } static void step_ewma_zprocess(void* pvstate, lrec_t* prec) { step_ewma_state_t* pstate = pvstate; for (int i = 0; i < pstate->num_alphas; i++) lrec_put(prec, pstate->output_field_names[i], "", NO_FREE); } static void step_ewma_free(step_t* pstep) { step_ewma_state_t* pstate = pstep->pvstate; for (int i = 0; i < pstate->num_alphas; i++) { free(pstate->output_field_names[i]); } free(pstate->alphas); free(pstate->alphacompls); free(pstate->prevs); free(pstate->output_field_names); free(pstate); free(pstep); } static step_t* step_ewma_alloc(char* input_field_name, int unused, slls_t* pstring_alphas, slls_t* pewma_suffixes) { step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); step_ewma_state_t* pstate = mlr_malloc_or_die(sizeof(step_ewma_state_t)); int n = pstring_alphas->length; pstate->num_alphas = n; pstate->alphas = mlr_malloc_or_die(n * sizeof(double)); pstate->alphacompls = mlr_malloc_or_die(n * sizeof(double)); pstate->prevs = mlr_malloc_or_die(n * sizeof(double)); pstate->have_prevs = FALSE; pstate->output_field_names = mlr_malloc_or_die(n * sizeof(char*)); slls_t* psuffixes = (pewma_suffixes == NULL) ? pstring_alphas : pewma_suffixes; sllse_t* pe = pstring_alphas->phead; sllse_t* pf = psuffixes->phead; for (int i = 0; i < n; i++, pe = pe->pnext, pf = pf->pnext) { char* string_alpha = pe->value; char* suffix = pf->value; pstate->alphas[i] = mlr_double_from_string_or_die(string_alpha); pstate->alphacompls[i] = 1.0 - pstate->alphas[i]; pstate->prevs[i] = 0.0; pstate->output_field_names[i] = mlr_paste_3_strings(input_field_name, "_ewma_", suffix); } pstate->have_prevs = FALSE; pstep->pvstate = (void*)pstate; pstep->pdprocess_func = step_ewma_dprocess; pstep->pnprocess_func = NULL; pstep->psprocess_func = NULL; pstep->pzprocess_func = step_ewma_zprocess; pstep->pfree_func = step_ewma_free; return pstep; } miller-5.6.2/c/mapping/mapper_tac.c000066400000000000000000000046211354153536500171610ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "mapping/mappers.h" typedef struct _mapper_tac_state_t { sllv_t* records; } mapper_tac_state_t; static void mapper_tac_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_tac_alloc(); static void mapper_tac_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_tac_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_tac_setup = { .verb = "tac", .pusage_func = mapper_tac_usage, .pparse_func = mapper_tac_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_tac_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s\n", argv0, verb); fprintf(o, "Prints records in reverse order from the order in which they were encountered.\n"); } static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { if ((argc - *pargi) < 1) { mapper_tac_usage(stderr, argv[0], argv[*pargi]); return NULL; } mapper_t* pmapper = mapper_tac_alloc(); *pargi += 1; return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_tac_alloc() { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_tac_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_tac_state_t)); pstate->records = sllv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_tac_process; pmapper->pfree_func = mapper_tac_free; return pmapper; } static void mapper_tac_free(mapper_t* pmapper, context_t* _) { mapper_tac_state_t* pstate = pmapper->pvstate; // Free the container sllv_free(pstate->records); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_tac_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_tac_state_t* pstate = pvstate; if (pinrec != NULL) { // The caller will free the outrecs sllv_append(pstate->records, pinrec); return NULL; } else { sllv_reverse(pstate->records); sllv_append(pstate->records, NULL); sllv_t* retval = pstate->records; pstate->records = sllv_alloc(); return retval; } } miller-5.6.2/c/mapping/mapper_tail.c000066400000000000000000000112661354153536500173460ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" typedef struct _mapper_tail_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; unsigned long long tail_count; lhmslv_t* precord_lists_by_group; } mapper_tail_state_t; static void mapper_tail_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_tail_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long tail_count); static void mapper_tail_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_tail_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_tail_setup = { .verb = "tail", .pusage_func = mapper_tail_usage, .pparse_func = mapper_tail_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_tail_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-n {count} Tail count to print; default 10\n"); fprintf(o, "-g {a,b,c} Optional group-by-field names for tail counts\n"); fprintf(o, "Passes through the last n records, optionally by category.\n"); } static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int tail_count = 10; slls_t* pgroup_by_field_names = slls_alloc(); char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_int_flag(pstate, "-n", &tail_count); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_tail_usage(stderr, argv[0], verb); return NULL; } return mapper_tail_alloc(pstate, pgroup_by_field_names, tail_count); } // ---------------------------------------------------------------- static mapper_t* mapper_tail_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long tail_count) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_tail_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_tail_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->tail_count = tail_count; pstate->precord_lists_by_group = lhmslv_alloc(); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_tail_process; pmapper->pfree_func = mapper_tail_free; return pmapper; } static void mapper_tail_free(mapper_t* pmapper, context_t* _) { mapper_tail_state_t* pstate = pmapper->pvstate; if (pstate->pgroup_by_field_names != NULL) slls_free(pstate->pgroup_by_field_names); // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { sllv_t* precord_list_for_group = pa->pvvalue; // outrecs were freed by caller of mapper_tail_process. Here, just free // the sllv container itself. sllv_free(precord_list_for_group); } lhmslv_free(pstate->precord_lists_by_group); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_tail_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_tail_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { sllv_t* precord_list_for_group = lhmslv_get(pstate->precord_lists_by_group, pgroup_by_field_values); if (precord_list_for_group == NULL) { precord_list_for_group = sllv_alloc(); lhmslv_put(pstate->precord_lists_by_group, slls_copy(pgroup_by_field_values), precord_list_for_group, FREE_ENTRY_KEY); } slls_free(pgroup_by_field_values); if (precord_list_for_group->length >= pstate->tail_count) { lrec_t* porec = sllv_pop(precord_list_for_group); lrec_free(porec); } sllv_append(precord_list_for_group, pinrec); } else { lrec_free(pinrec); } return NULL; } else { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { sllv_t* precord_list_for_group = pa->pvvalue; sllv_transfer(poutrecs, precord_list_for_group); } sllv_append(poutrecs, NULL); return poutrecs; } } miller-5.6.2/c/mapping/mapper_tee.c000066400000000000000000000131051354153536500171640ustar00rootroot00000000000000#include "cli/mlrcli.h" #include "containers/sllv.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "mapping/mappers.h" #include "output/lrec_writers.h" typedef struct _mapper_tee_state_t { char* output_file_name; FILE* output_stream; int flush_every_record; lrec_writer_t* plrec_writer; cli_writer_opts_t* pwriter_opts; } mapper_tee_state_t; #define DEFAULT_COUNTER_FIELD_NAME "n" static void mapper_tee_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_tee_alloc(int do_append, int flush_every_record, char* output_file_name, cli_writer_opts_t* pwriter_opts, cli_writer_opts_t* pmain_writer_opts); static void mapper_tee_free(mapper_t* pmapper, context_t* pctx); static sllv_t* mapper_tee_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_tee_setup = { .verb = "tee", .pusage_func = mapper_tee_usage, .pparse_func = mapper_tee_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) { int do_append = FALSE; int flush_every_record = TRUE; cli_writer_opts_t* pwriter_opts = mlr_malloc_or_die(sizeof(cli_writer_opts_t)); cli_writer_opts_init(pwriter_opts); int argi = *pargi; if ((argc - argi) < 1) { mapper_tee_usage(stderr, argv[0], argv[argi]); return NULL; } char* verb = argv[argi++]; for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { if (argv[argi][0] != '-') { break; // No more flag options to process } else if (cli_handle_writer_options(argv, argc, &argi, pwriter_opts)) { // handled } else if (streq(argv[argi], "-a")) { do_append = TRUE; argi++; } else if (streq(argv[argi], "--no-fflush") || streq(argv[argi], "--no-flush")) { flush_every_record = FALSE; argi++; } else { mapper_tee_usage(stderr, argv[0], verb); return NULL; } } if ((argc - argi) < 1) { mapper_tee_usage(stderr, argv[0], verb); return NULL; } char* output_file_name = argv[argi++]; *pargi = argi; mapper_t* pmapper = mapper_tee_alloc(do_append, flush_every_record, output_file_name, pwriter_opts, pmain_writer_opts); return pmapper; } static void mapper_tee_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options] {filename}\n", argv0, verb); fprintf(o, "Passes through input records (like %s cat) but also writes to specified output\n", MLR_GLOBALS.bargv0); fprintf(o, "file, using output-format flags from the command line (e.g. --ocsv). See also\n"); fprintf(o, "the \"tee\" keyword within %s put, which allows data-dependent filenames.\n", MLR_GLOBALS.bargv0); fprintf(o, "Options:\n"); fprintf(o, "-a: append to existing file, if any, rather than overwriting.\n"); fprintf(o, "--no-fflush: don't call fflush() after every record.\n"); fprintf(o, "Any of the output-format command-line flags (see %s -h). Example: using\n", MLR_GLOBALS.bargv0); fprintf(o, " %s --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ...\n", MLR_GLOBALS.bargv0); fprintf(o, "the input is CSV, the output is pretty-print tabular, but the tee-file output\n"); fprintf(o, "is written in JSON format.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_tee_alloc(int do_append, int flush_every_record, char* output_file_name, cli_writer_opts_t* pwriter_opts, cli_writer_opts_t* pmain_writer_opts) { FILE* fp = fopen(output_file_name, do_append ? "a" : "w"); if (fp == NULL) { perror("fopen"); fprintf(stderr, "%s: fopen error on \"%s\".\n", MLR_GLOBALS.bargv0, output_file_name); exit(1); } mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_tee_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_tee_state_t)); pstate->output_file_name = output_file_name; pstate->output_stream = fp; pstate->flush_every_record = flush_every_record; pstate->pwriter_opts = pwriter_opts; cli_merge_writer_opts(pstate->pwriter_opts, pmain_writer_opts); pstate->plrec_writer = lrec_writer_alloc_or_die(pstate->pwriter_opts); pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_tee_process; pmapper->pfree_func = mapper_tee_free; return pmapper; } static void mapper_tee_free(mapper_t* pmapper, context_t* pctx) { mapper_tee_state_t* pstate = pmapper->pvstate; pstate->plrec_writer->pfree_func(pstate->plrec_writer, pctx); free(pstate->pwriter_opts); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_tee_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_tee_state_t* pstate = (mapper_tee_state_t*)pvstate; if (pinrec != NULL) { // Copy the record since the lrec-writer will free it, and we need the original // to return as stream output. lrec_t* pcopy = lrec_copy(pinrec); pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, pcopy, pctx); if (pstate->flush_every_record) fflush(pstate->output_stream); return sllv_single(pinrec); } else { pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, NULL, pctx); if (fclose(pstate->output_stream) != 0) { perror("fclose"); fprintf(stderr, "%s: fclose error on \"%s\".\n", MLR_GLOBALS.bargv0, pstate->output_file_name); exit(1); } return sllv_single(NULL); } } miller-5.6.2/c/mapping/mapper_top.c000066400000000000000000000255031354153536500172160ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/top_keeper.h" #include "containers/mixutil.h" #include "lib/mvfuncs.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define DEFAULT_OUTPUT_FIELD_NAME "top_idx" typedef mv_t maybe_sign_flipper_t(mv_t* pval1); typedef struct _mapper_top_state_t { ap_state_t* pargp; slls_t* pvalue_field_names; slls_t* pgroup_by_field_names; int top_count; int show_full_records; int allow_int_float; maybe_sign_flipper_t* pmaybe_sign_flipper; lhmslv_t* groups; char* output_field_name; } mapper_top_state_t; static void mapper_top_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_top_alloc(ap_state_t* pargp, slls_t* pvalue_field_names, slls_t* pgroup_by_field_names, int top_count, int do_max, int show_full_records, int allow_int_float, char* output_field_name); static void mapper_top_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_top_process(lrec_t* pinrec, context_t* pctx, void* pvstate); static void mapper_top_ingest(lrec_t* pinrec, mapper_top_state_t* pstate); static sllv_t* mapper_top_emit(mapper_top_state_t* pstate, context_t* pctx); // ---------------------------------------------------------------- mapper_setup_t mapper_top_setup = { .verb = "top", .pusage_func = mapper_top_usage, .pparse_func = mapper_top_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_top_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "-f {a,b,c} Value-field names for top counts.\n"); fprintf(o, "-g {d,e,f} Optional group-by-field names for top counts.\n"); fprintf(o, "-n {count} How many records to print per category; default 1.\n"); fprintf(o, "-a Print all fields for top-value records; default is\n"); fprintf(o, " to print only value and group-by fields. Requires a single\n"); fprintf(o, " value-field name only.\n"); fprintf(o, "--min Print top smallest values; default is top largest values.\n"); fprintf(o, "-F Keep top values as floats even if they look like integers.\n"); fprintf(o, "-o {name} Field name for output indices. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); fprintf(o, "Prints the n records with smallest/largest values at specified fields,\n"); fprintf(o, "optionally by category.\n"); } static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { int top_count = 1; slls_t* pvalue_field_names = NULL; slls_t* pgroup_by_field_names = slls_alloc(); int show_full_records = FALSE; int do_max = TRUE; int allow_int_float = TRUE; char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_int_flag(pstate, "-n", &top_count); ap_define_string_list_flag(pstate, "-f", &pvalue_field_names); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_true_flag(pstate, "-a", &show_full_records); ap_define_true_flag(pstate, "--max", &do_max); ap_define_false_flag(pstate, "--min", &do_max); ap_define_false_flag(pstate, "-F", &allow_int_float); ap_define_string_flag(pstate, "-o", &output_field_name); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_top_usage(stderr, argv[0], verb); return NULL; } if (pvalue_field_names == NULL) { mapper_top_usage(stderr, argv[0], verb); return NULL; } if (pvalue_field_names->length > 1 && show_full_records) { mapper_top_usage(stderr, argv[0], verb); return NULL; } return mapper_top_alloc(pstate, pvalue_field_names, pgroup_by_field_names, top_count, do_max, show_full_records, allow_int_float, output_field_name); } // ---------------------------------------------------------------- static mapper_t* mapper_top_alloc(ap_state_t* pargp, slls_t* pvalue_field_names, slls_t* pgroup_by_field_names, int top_count, int do_max, int show_full_records, int allow_int_float, char* output_field_name) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_top_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_top_state_t)); pstate->pargp = pargp; pstate->pvalue_field_names = pvalue_field_names; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->show_full_records = show_full_records; pstate->allow_int_float = allow_int_float; pstate->top_count = top_count; pstate->pmaybe_sign_flipper = do_max ? x_x_upos_func : x_x_uneg_func; pstate->groups = lhmslv_alloc(); pstate->output_field_name = output_field_name; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_top_process; pmapper->pfree_func = mapper_top_free; return pmapper; } static void mapper_top_free(mapper_t* pmapper, context_t* _) { mapper_top_state_t* pstate = pmapper->pvstate; slls_free(pstate->pvalue_field_names); slls_free(pstate->pgroup_by_field_names); // Free the hashmap pvvalues; the lhm free methods will free the hashmap keys. for (lhmslve_t* pa = pstate->groups->phead; pa != NULL; pa = pa->pnext) { lhmsv_t* pgroup = pa->pvvalue; for (lhmsve_t* pb = pgroup->phead; pb != NULL; pb = pb->pnext) { top_keeper_t* ptop_keeper_for_group = pb->pvvalue; top_keeper_free(ptop_keeper_for_group); } lhmsv_free(pgroup); } lhmslv_free(pstate->groups); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_top_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_top_state_t* pstate = pvstate; if (pinrec != NULL) { mapper_top_ingest(pinrec, pstate); return NULL; } else { return mapper_top_emit(pstate, pctx); } } // ---------------------------------------------------------------- static void mapper_top_ingest(lrec_t* pinrec, mapper_top_state_t* pstate) { // ["s", "t"] slls_t* pvalue_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pvalue_field_names); slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); // Heterogeneous-data case -- not all sought fields were present in record if (pvalue_field_values == NULL || pgroup_by_field_values == NULL) { slls_free(pvalue_field_values); slls_free(pgroup_by_field_values); lrec_free(pinrec); return; } if (pgroup_by_field_values->length != pstate->pgroup_by_field_names->length) { slls_free(pvalue_field_values); slls_free(pgroup_by_field_values); lrec_free(pinrec); return; } lhmsv_t* group_to_acc_field = lhmslv_get(pstate->groups, pgroup_by_field_values); if (group_to_acc_field == NULL) { group_to_acc_field = lhmsv_alloc(); lhmslv_put(pstate->groups, slls_copy(pgroup_by_field_values), group_to_acc_field, FREE_ENTRY_KEY); } slls_free(pgroup_by_field_values); sllse_t* pa = pstate->pvalue_field_names->phead; sllse_t* pb = pvalue_field_values->phead; // for "x", "y" and "1", "2" for ( ; pa != NULL && pb != NULL; pa = pa->pnext, pb = pb->pnext) { char* value_field_name = pa->value; char* value_field_sval = pb->value; if (value_field_sval == NULL) { // Key not present if (pstate->show_full_records) lrec_free(pinrec); continue; } top_keeper_t* ptop_keeper_for_group = lhmsv_get(group_to_acc_field, value_field_name); if (ptop_keeper_for_group == NULL) { ptop_keeper_for_group = top_keeper_alloc(pstate->top_count); lhmsv_put(group_to_acc_field, value_field_name, ptop_keeper_for_group, NO_FREE); } if (*value_field_sval == 0) { // Key present with null value if (pstate->show_full_records) lrec_free(pinrec); continue; } mv_t value_field_nval = pstate->allow_int_float ? mv_scan_number_or_die(value_field_sval) : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); // The top-keeper object will free the record if it isn't retained, or // keep it if it is. top_keeper_add(ptop_keeper_for_group, pstate->pmaybe_sign_flipper(&value_field_nval), (pstate->show_full_records) ? pinrec : NULL); } if (!pstate->show_full_records) lrec_free(pinrec); slls_free(pvalue_field_values); } // ---------------------------------------------------------------- static sllv_t* mapper_top_emit(mapper_top_state_t* pstate, context_t* pctx) { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->groups->phead; pa != NULL; pa = pa->pnext) { // Above we required that there was only one value field in the // show-full-records case. That's for two reasons: (1) here, we print // each record at most once, which would need a change in the format // presented as output; (2) there would be double-frees in our // ingester. if (pstate->show_full_records) { lhmsv_t* group_to_acc_field = pa->pvvalue; for (lhmsve_t* pd = group_to_acc_field->phead; pd != NULL; pd = pd->pnext) { top_keeper_t* ptop_keeper_for_group = pd->pvvalue; for (int i = 0; i < ptop_keeper_for_group->size; i++) { sllv_append(poutrecs, ptop_keeper_for_group->top_precords[i]); ptop_keeper_for_group->top_precords[i] = NULL; } } } else { slls_t* pgroup_by_field_values = pa->key; for (int i = 0; i < pstate->top_count; i++) { lrec_t* poutrec = lrec_unbacked_alloc(); // Add in a=s,b=t fields: sllse_t* pb = pstate->pgroup_by_field_names->phead; sllse_t* pc = pgroup_by_field_values->phead; for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { lrec_put(poutrec, pb->value, pc->value, NO_FREE); } // Add in fields such as x_top_1=# lhmsv_t* group_to_acc_field = pa->pvvalue; // for "x", "y" for (lhmsve_t* pd = group_to_acc_field->phead; pd != NULL; pd = pd->pnext) { char* value_field_name = pd->key; top_keeper_t* ptop_keeper_for_group = pd->pvvalue; char* key = mlr_paste_2_strings(value_field_name, "_top"); if (i < ptop_keeper_for_group->size) { mv_t numv = pstate->pmaybe_sign_flipper(&ptop_keeper_for_group->top_values[i]); char* strv = mv_alloc_format_val(&numv); lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(i+1), FREE_ENTRY_VALUE); lrec_put(poutrec, key, strv, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } else { lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(i+1), FREE_ENTRY_VALUE); lrec_put(poutrec, key, "", FREE_ENTRY_KEY); } } sllv_append(poutrecs, poutrec); } } } sllv_append(poutrecs, NULL); return poutrecs; } miller-5.6.2/c/mapping/mapper_uniq.c000066400000000000000000000444141354153536500173720ustar00rootroot00000000000000#include #include #include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/lhmsll.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/lhmsll.h" #include "containers/mixutil.h" #include "mapping/mappers.h" #include "cli/argparse.h" #define DEFAULT_OUTPUT_FIELD_NAME "count" typedef struct _mapper_uniq_state_t { ap_state_t* pargp; slls_t* pgroup_by_field_names; int show_counts; int show_num_distinct_only; lhmsll_t* puniqified_record_counts; // lrec_sprintf -> counts lhmsv_t* puniqified_records; // lrec_sprintf -> records lhmslv_t* pcounts_by_group; lhmsv_t* pcounts_unlashed; // string field name -> string field value -> long long count char* output_field_name; } mapper_uniq_state_t; // ---------------------------------------------------------------- static void mapper_uniq_usage( FILE* o, char* argv0, char* verb); static mapper_t* mapper_uniq_parse_cli( int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static void mapper_count_distinct_usage( FILE* o, char* argv0, char* verb); static mapper_t* mapper_count_distinct_parse_cli( int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_uniq_alloc( ap_state_t* pargp, slls_t* pgroup_by_field_names, int do_lashed, int show_counts, int show_num_distinct_only, char* output_field_name, int uniqify_entire_records); static void mapper_uniq_free( mapper_t* pmapper, context_t* _); static sllv_t* mapper_uniq_process_uniqify_entire_records( lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_uniq_process_uniqify_entire_records_show_counts( lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_uniq_process_uniqify_entire_records_show_num_distinct_only( lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_uniq_process_unlashed( lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_uniq_process_num_distinct_only( lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_uniq_process_with_counts( lrec_t* pinrec, context_t* pctx, void* pvstate); static sllv_t* mapper_uniq_process_no_counts( lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_count_distinct_setup = { .verb = "count-distinct", .pusage_func = mapper_count_distinct_usage, .pparse_func = mapper_count_distinct_parse_cli, .ignores_input = FALSE, }; mapper_setup_t mapper_uniq_setup = { .verb = "uniq", .pusage_func = mapper_uniq_usage, .pparse_func = mapper_uniq_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_count_distinct_usage( FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Prints number of records having distinct values for specified field names.\n"); fprintf(o, "Same as uniq -c.\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "-f {a,b,c} Field names for distinct count.\n"); fprintf(o, "-n Show only the number of distinct values. Not compatible with -u.\n"); fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); fprintf(o, " Ignored with -u.\n"); fprintf(o, "-u Do unlashed counts for multiple field names. With -f a,b and\n"); fprintf(o, " without -u, computes counts for distinct combinations of a\n"); fprintf(o, " and b field values. With -f a,b and with -u, computes counts\n"); fprintf(o, " for distinct a field values and counts for distinct b field\n"); fprintf(o, " values separately.\n"); } // ---------------------------------------------------------------- static mapper_t* mapper_count_distinct_parse_cli( int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pfield_names = NULL; int show_num_distinct_only = FALSE; char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; int do_lashed = TRUE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pfield_names); ap_define_true_flag(pstate, "-n", &show_num_distinct_only); ap_define_string_flag(pstate, "-o", &output_field_name); ap_define_false_flag(pstate, "-u", &do_lashed); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_count_distinct_usage(stderr, argv[0], verb); return NULL; } if (pfield_names == NULL) { mapper_count_distinct_usage(stderr, argv[0], verb); return NULL; } if (!do_lashed && show_num_distinct_only) { mapper_count_distinct_usage(stderr, argv[0], verb); return NULL; } return mapper_uniq_alloc(pstate, pfield_names, do_lashed, TRUE, show_num_distinct_only, output_field_name, FALSE); } // ---------------------------------------------------------------- static void mapper_uniq_usage( FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Prints distinct values for specified field names. With -c, same as\n"); fprintf(o, "count-distinct. For uniq, -f is a synonym for -g.\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "-g {d,e,f} Group-by-field names for uniq counts.\n"); fprintf(o, "-c Show repeat counts in addition to unique values.\n"); fprintf(o, "-n Show only the number of distinct values.\n"); fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); fprintf(o, "-a Output each unique record only once. Incompatible with -g.\n"); fprintf(o, " With -c, produces unique records, with repeat counts for each.\n"); fprintf(o, " With -n, produces only one record which is the unique-record count.\n"); fprintf(o, " With neither -c nor -n, produces unique records.\n"); } static mapper_t* mapper_uniq_parse_cli( int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { slls_t* pgroup_by_field_names = NULL; int show_counts = FALSE; int show_num_distinct_only = FALSE; char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; int do_lashed = TRUE; int uniqify_entire_records = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pgroup_by_field_names); ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); ap_define_true_flag(pstate, "-c", &show_counts); ap_define_true_flag(pstate, "-n", &show_num_distinct_only); ap_define_string_flag(pstate, "-o", &output_field_name); ap_define_true_flag(pstate, "-a", &uniqify_entire_records); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_uniq_usage(stderr, argv[0], verb); return NULL; } if (uniqify_entire_records) { if (pgroup_by_field_names != NULL) { mapper_uniq_usage(stderr, argv[0], verb); return NULL; } if (show_counts && show_num_distinct_only) { mapper_uniq_usage(stderr, argv[0], verb); return NULL; } } else { if (pgroup_by_field_names == NULL) { mapper_uniq_usage(stderr, argv[0], verb); return NULL; } } return mapper_uniq_alloc(pstate, pgroup_by_field_names, do_lashed, show_counts, show_num_distinct_only, output_field_name, uniqify_entire_records); } // ---------------------------------------------------------------- static mapper_t* mapper_uniq_alloc( ap_state_t* pargp, slls_t* pgroup_by_field_names, int do_lashed, int show_counts, int show_num_distinct_only, char* output_field_name, int uniqify_entire_records) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_uniq_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_uniq_state_t)); pstate->pargp = pargp; pstate->pgroup_by_field_names = pgroup_by_field_names; pstate->show_counts = show_counts; pstate->show_num_distinct_only = show_num_distinct_only; pstate->puniqified_record_counts = lhmsll_alloc(); pstate->puniqified_records = lhmsv_alloc(); pstate->pcounts_by_group = lhmslv_alloc(); pstate->pcounts_unlashed = lhmsv_alloc(); pstate->output_field_name = output_field_name; pmapper->pvstate = pstate; if (uniqify_entire_records) { if (show_counts) pmapper->pprocess_func = mapper_uniq_process_uniqify_entire_records_show_counts; else if (show_num_distinct_only) pmapper->pprocess_func = mapper_uniq_process_uniqify_entire_records_show_num_distinct_only; else pmapper->pprocess_func = mapper_uniq_process_uniqify_entire_records; } else if (!do_lashed) pmapper->pprocess_func = mapper_uniq_process_unlashed; else if (show_num_distinct_only) pmapper->pprocess_func = mapper_uniq_process_num_distinct_only; else if (show_counts) pmapper->pprocess_func = mapper_uniq_process_with_counts; else pmapper->pprocess_func = mapper_uniq_process_no_counts; pmapper->pfree_func = mapper_uniq_free; return pmapper; } static void mapper_uniq_free( mapper_t* pmapper, context_t* _) { mapper_uniq_state_t* pstate = pmapper->pvstate; slls_free(pstate->pgroup_by_field_names); lhmsll_free(pstate->puniqified_record_counts); pstate->puniqified_record_counts = NULL; // lhmslv_free will free the keys: we only need to free the void-star values. for (lhmsve_t* pa = pstate->puniqified_records->phead; pa != NULL; pa = pa->pnext) { lrec_t* prec = pa->pvvalue; lrec_free(prec); } lhmsv_free(pstate->puniqified_records); pstate->puniqified_records = NULL; // lhmslv_free will free the keys: we only need to free the void-star values. for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { unsigned long long* pcount = pa->pvvalue; free(pcount); } lhmslv_free(pstate->pcounts_by_group); pstate->pcounts_by_group = NULL; for (lhmsve_t* pb = pstate->pcounts_unlashed->phead; pb != NULL; pb = pb->pnext) { lhmsll_t* pmap = pb->pvvalue; lhmsll_free(pmap); } lhmsv_free(pstate->pcounts_unlashed); pstate->pcounts_unlashed = NULL; pstate->pgroup_by_field_names = NULL; pstate->pcounts_by_group = NULL; ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- // Print each unique record only once (on first occurrence). static sllv_t* mapper_uniq_process_uniqify_entire_records( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec != NULL) { char* lrec_as_string = lrec_sprint(pinrec, "\xfc", "\xfd", "\xfe"); if (lhmsll_has_key(pstate->puniqified_record_counts, lrec_as_string)) { // have seen free(lrec_as_string); lrec_free(pinrec); return NULL; } else { lhmsll_put(pstate->puniqified_record_counts, lrec_as_string, 1LL, FREE_ENTRY_KEY); return sllv_single(pinrec); } } else { // end of record stream return sllv_single(NULL); } } // Print each unique record only once, with uniqueness counts. This means // non-streaming, with output at end of stream. static sllv_t* mapper_uniq_process_uniqify_entire_records_show_counts( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec != NULL) { char* lrec_as_string = lrec_sprint(pinrec, "\xfc", "\xfd", "\xfe"); if (lhmsll_test_and_increment(pstate->puniqified_record_counts, lrec_as_string)) { // have seen; count was just incremented free(lrec_as_string); lrec_free(pinrec); return NULL; } else { lhmsll_put(pstate->puniqified_record_counts, lrec_as_string, 1LL, FREE_ENTRY_KEY); lhmsv_put(pstate->puniqified_records, mlr_strdup_or_die(lrec_as_string), pinrec, FREE_ENTRY_KEY); return NULL; } } else { // end of record stream sllv_t* poutrecs = sllv_alloc(); for (lhmsve_t* pe = pstate->puniqified_records->phead; pe != NULL; pe = pe->pnext) { lrec_t* prec = pe->pvvalue; long long count = lhmsll_get(pstate->puniqified_record_counts, pe->key); lrec_prepend(prec, pstate->output_field_name, mlr_alloc_string_from_ll(count), FREE_ENTRY_VALUE); sllv_append(poutrecs, prec); pe->pvvalue = NULL; // transfer ownership to poutrecs } return poutrecs; } } // Print count of unique records. This means non-streaming, with output at end // of stream. static sllv_t* mapper_uniq_process_uniqify_entire_records_show_num_distinct_only( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec != NULL) { char* lrec_as_string = lrec_sprint(pinrec, "\xfc", "\xfd", "\xfe"); if (lhmsll_has_key(pstate->puniqified_record_counts, lrec_as_string)) { free(lrec_as_string); lrec_free(pinrec); return NULL; } else { lhmsll_put(pstate->puniqified_record_counts, lrec_as_string, 1LL, FREE_ENTRY_KEY); lrec_free(pinrec); return NULL; } } else { // end of record stream sllv_t* poutrecs = sllv_alloc(); lrec_t* poutrec = lrec_unbacked_alloc(); long long count = pstate->puniqified_record_counts->num_occupied; lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ll(count), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); return poutrecs; } } // ---------------------------------------------------------------- static sllv_t* mapper_uniq_process_unlashed( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec != NULL) { for (sllse_t* pe = pstate->pgroup_by_field_names->phead; pe != NULL; pe = pe->pnext) { char* field_name = pe->value; lhmsll_t* pcounts_for_field_name = lhmsv_get(pstate->pcounts_unlashed, field_name); if (pcounts_for_field_name == NULL) { pcounts_for_field_name = lhmsll_alloc(); lhmsv_put(pstate->pcounts_unlashed, field_name, pcounts_for_field_name, NO_FREE); } char* field_value = lrec_get(pinrec, field_name); if (field_value != NULL) { if (!lhmsll_test_and_increment(pcounts_for_field_name, field_value)) { lhmsll_put(pcounts_for_field_name, mlr_strdup_or_die(field_value), 1LL, FREE_ENTRY_KEY); } } } lrec_free(pinrec); return NULL; } else { sllv_t* poutrecs = sllv_alloc(); for (lhmsve_t* pe = pstate->pcounts_unlashed->phead; pe != NULL; pe = pe->pnext) { char* field_name= pe->key; lhmsll_t* pcounts_for_field_name = pe->pvvalue; for (lhmslle_t* pf = pcounts_for_field_name->phead; pf != NULL; pf = pf->pnext) { char* field_value = pf->key; lrec_t* poutrec = lrec_unbacked_alloc(); lrec_put(poutrec, "field", field_name, NO_FREE); lrec_put(poutrec, "value", field_value, NO_FREE); lrec_put(poutrec, "count", mlr_alloc_string_from_ll(pf->value), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); } } sllv_append(poutrecs, NULL); return poutrecs; } } static sllv_t* mapper_uniq_process_num_distinct_only( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount == NULL) { pcount = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount = 1LL; lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); } else { (*pcount)++; } slls_free(pgroup_by_field_values); } lrec_free(pinrec); return NULL; } else { sllv_t* poutrecs = sllv_alloc(); lrec_t* poutrec = lrec_unbacked_alloc(); int count = pstate->pcounts_by_group->num_occupied; lrec_put(poutrec, "count", mlr_alloc_string_from_int(count), FREE_ENTRY_VALUE); sllv_append(poutrecs, poutrec); sllv_append(poutrecs, NULL); return poutrecs; } } static sllv_t* mapper_uniq_process_with_counts( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values != NULL) { unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount == NULL) { pcount = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount = 1LL; lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); } else { (*pcount)++; } slls_free(pgroup_by_field_values); } lrec_free(pinrec); return NULL; } else { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { lrec_t* poutrec = lrec_unbacked_alloc(); slls_t* pgroup_by_field_values = pa->key; sllse_t* pb = pstate->pgroup_by_field_names->phead; sllse_t* pc = pgroup_by_field_values->phead; for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { lrec_put(poutrec, pb->value, pc->value, NO_FREE); } if (pstate->show_counts) { unsigned long long* pcount = pa->pvvalue; lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(*pcount), FREE_ENTRY_VALUE); } sllv_append(poutrecs, poutrec); } sllv_append(poutrecs, NULL); return poutrecs; } } static sllv_t* mapper_uniq_process_no_counts( lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_uniq_state_t* pstate = pvstate; if (pinrec == NULL) { // end of record stream return sllv_single(NULL); } slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); if (pgroup_by_field_values == NULL) { lrec_free(pinrec); return NULL; } unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); if (pcount == NULL) { pcount = mlr_malloc_or_die(sizeof(unsigned long long)); *pcount = 1LL; slls_t* pcopy = slls_copy(pgroup_by_field_values); lhmslv_put(pstate->pcounts_by_group, pcopy, pcount, FREE_ENTRY_KEY); lrec_t* poutrec = lrec_unbacked_alloc(); sllse_t* pb = pstate->pgroup_by_field_names->phead; sllse_t* pc = pcopy->phead; for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { lrec_put(poutrec, pb->value, pc->value, NO_FREE); } lrec_free(pinrec); slls_free(pgroup_by_field_values); return sllv_single(poutrec); } else { (*pcount)++; lrec_free(pinrec); slls_free(pgroup_by_field_values); return NULL; } } miller-5.6.2/c/mapping/mapper_unsparsify.c000066400000000000000000000110221354153536500206060ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "cli/argparse.h" #include "containers/lhmsi.h" #include "containers/sllv.h" #include "mapping/mappers.h" typedef struct _mapper_unsparsify_state_t { lhmsi_t* key_names; sllv_t* records; char* filler; ap_state_t* pargp; } mapper_unsparsify_state_t; static void mapper_unsparsify_usage(FILE* o, char* argv0, char* verb); static mapper_t* mapper_unsparsify_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); static mapper_t* mapper_unsparsify_alloc(ap_state_t* pargp, char* filler); static void mapper_unsparsify_free(mapper_t* pmapper, context_t* _); static sllv_t* mapper_unsparsify_process(lrec_t* pinrec, context_t* pctx, void* pvstate); // ---------------------------------------------------------------- mapper_setup_t mapper_unsparsify_setup = { .verb = "unsparsify", .pusage_func = mapper_unsparsify_usage, .pparse_func = mapper_unsparsify_parse_cli, .ignores_input = FALSE, }; // ---------------------------------------------------------------- static void mapper_unsparsify_usage(FILE* o, char* argv0, char* verb) { fprintf(o, "Usage: %s %s [options]\n", argv0, verb); fprintf(o, "Prints records with the union of field names over all input records.\n"); fprintf(o, "For field names absent in a given record but present in others, fills in\n"); fprintf(o, "a value. This verb retains all input before producing any output.\n"); fprintf(o, "\n"); fprintf(o, "Options:\n"); fprintf(o, "--fill-with {filler string} What to fill absent fields with. Defaults to\n"); fprintf(o, " the empty string.\n"); fprintf(o, "\n"); fprintf(o, "Example: if the input is two records, one being 'a=1,b=2' and the other\n"); fprintf(o, "being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and\n"); fprintf(o, "'a=,b=3,c=4'.\n"); } static mapper_t* mapper_unsparsify_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __) { char* filler = ""; if ((argc - *pargi) < 1) { mapper_unsparsify_usage(stderr, argv[0], argv[*pargi]); return NULL; } char* verb = argv[*pargi]; *pargi += 1; ap_state_t* pargp = ap_alloc(); ap_define_string_flag(pargp, "--fill-with", &filler); if (!ap_parse(pargp, verb, pargi, argc, argv)) { mapper_unsparsify_usage(stderr, argv[0], verb); return NULL; } mapper_t* pmapper = mapper_unsparsify_alloc(pargp, filler); return pmapper; } // ---------------------------------------------------------------- static mapper_t* mapper_unsparsify_alloc(ap_state_t* pargp, char* filler) { mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); mapper_unsparsify_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_unsparsify_state_t)); pstate->records = sllv_alloc(); pstate->key_names = lhmsi_alloc(); pstate->filler = filler; pstate->pargp = pargp; pmapper->pvstate = pstate; pmapper->pprocess_func = mapper_unsparsify_process; pmapper->pfree_func = mapper_unsparsify_free; return pmapper; } static void mapper_unsparsify_free(mapper_t* pmapper, context_t* _) { mapper_unsparsify_state_t* pstate = pmapper->pvstate; // Free the container sllv_free(pstate->records); lhmsi_free(pstate->key_names); ap_free(pstate->pargp); free(pstate); free(pmapper); } // ---------------------------------------------------------------- static sllv_t* mapper_unsparsify_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_unsparsify_state_t* pstate = pvstate; if (pinrec != NULL) { // Not end of stream. for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { if (!lhmsi_has_key(pstate->key_names, pe->key)) { lhmsi_put(pstate->key_names, mlr_strdup_or_die(pe->key), 1, FREE_ENTRY_KEY); } } // The caller will free the outrecs sllv_append(pstate->records, pinrec); return NULL; } else { // End of stream. sllv_t* poutrecs = sllv_alloc(); for (sllve_t* pe = pstate->records->phead; pe != NULL; pe = pe->pnext) { lrec_t* pinrec = pe->pvvalue; lrec_t* poutrec = lrec_unbacked_alloc(); for (lhmsie_t* pf = pstate->key_names->phead; pf != NULL; pf = pf->pnext) { char* key = pf->key; char* value = lrec_get(pinrec, key); if (value == NULL) { lrec_put(poutrec, mlr_strdup_or_die(key), pstate->filler, FREE_ENTRY_KEY); } else { lrec_put(poutrec, mlr_strdup_or_die(key), mlr_strdup_or_die(value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } } sllv_append(poutrecs, poutrec); // Free the void-star payload lrec_free(pinrec); } sllv_append(poutrecs, NULL); return poutrecs; } } miller-5.6.2/c/mapping/mappers.c000066400000000000000000000006241354153536500165140ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "mapping/mappers.h" // ---------------------------------------------------------------- void mapper_chain_free(sllv_t* pmapper_chain, context_t* pctx) { for (sllve_t* pe = pmapper_chain->phead; pe != NULL; pe = pe->pnext) { mapper_t* pmapper = pe->pvvalue; pmapper->pfree_func(pmapper, pctx); } sllv_free(pmapper_chain); } miller-5.6.2/c/mapping/mappers.h000066400000000000000000000050321354153536500165170ustar00rootroot00000000000000#ifndef MAPPERS_H #define MAPPERS_H #include "containers/lhmss.h" #include "containers/slls.h" #include "mapping/mapper.h" extern mapper_setup_t mapper_altkv_setup; extern mapper_setup_t mapper_bar_setup; extern mapper_setup_t mapper_bootstrap_setup; extern mapper_setup_t mapper_cat_setup; extern mapper_setup_t mapper_check_setup; extern mapper_setup_t mapper_clean_whitespace_setup; extern mapper_setup_t mapper_count_distinct_setup; extern mapper_setup_t mapper_count_similar_setup; extern mapper_setup_t mapper_cut_setup; extern mapper_setup_t mapper_decimate_setup; extern mapper_setup_t mapper_fill_down_setup; extern mapper_setup_t mapper_filter_setup; extern mapper_setup_t mapper_format_values_setup; extern mapper_setup_t mapper_fraction_setup; extern mapper_setup_t mapper_grep_setup; extern mapper_setup_t mapper_group_by_setup; extern mapper_setup_t mapper_group_like_setup; extern mapper_setup_t mapper_having_fields_setup; extern mapper_setup_t mapper_head_setup; extern mapper_setup_t mapper_histogram_setup; extern mapper_setup_t mapper_join_setup; extern mapper_setup_t mapper_label_setup; extern mapper_setup_t mapper_least_frequent_setup; extern mapper_setup_t mapper_merge_fields_setup; extern mapper_setup_t mapper_most_frequent_setup; extern mapper_setup_t mapper_nest_setup; extern mapper_setup_t mapper_nothing_setup; extern mapper_setup_t mapper_put_setup; extern mapper_setup_t mapper_regularize_setup; extern mapper_setup_t mapper_remove_empty_columns_setup; extern mapper_setup_t mapper_rename_setup; extern mapper_setup_t mapper_reorder_setup; extern mapper_setup_t mapper_repeat_setup; extern mapper_setup_t mapper_reshape_setup; extern mapper_setup_t mapper_sample_setup; extern mapper_setup_t mapper_sec2gmt_setup; extern mapper_setup_t mapper_sec2gmtdate_setup; extern mapper_setup_t mapper_seqgen_setup; extern mapper_setup_t mapper_shuffle_setup; extern mapper_setup_t mapper_skip_trivial_records_setup; extern mapper_setup_t mapper_sort_setup; // xxx temp for 5.4.0 -- will continue work after // extern mapper_setup_t mapper_sort_within_records_setup; extern mapper_setup_t mapper_stats1_setup; extern mapper_setup_t mapper_stats2_setup; extern mapper_setup_t mapper_step_setup; extern mapper_setup_t mapper_tac_setup; extern mapper_setup_t mapper_tail_setup; extern mapper_setup_t mapper_tee_setup; extern mapper_setup_t mapper_top_setup; extern mapper_setup_t mapper_uniq_setup; extern mapper_setup_t mapper_unsparsify_setup; // Construction is in mlrcli.c. void mapper_chain_free(sllv_t* pmapper_chain, context_t* pctx); #endif // MAPPERS_H miller-5.6.2/c/mapping/stats1_accumulators.c000066400000000000000000000663771354153536500210670ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/mlrstat.h" #include "containers/slls.h" #include "containers/lhmslv.h" #include "containers/lhmsv.h" #include "containers/lhmss.h" #include "containers/lhmsll.h" #include "containers/percentile_keeper.h" #include "lib/mvfuncs.h" #include "mapping/stats1_accumulators.h" // ---------------------------------------------------------------- void make_stats1_accs( char* value_field_name, // input slls_t* paccumulator_names, // input int allow_int_float, // input int do_interpolated_percentiles, // input lhmsv_t* acc_field_to_acc_state_in, // output lhmsv_t* acc_field_to_acc_state_out) // output { stats1_acc_t* ppercentile_acc = NULL; for (sllse_t* pc = paccumulator_names->phead; pc != NULL; pc = pc->pnext) { // for "sum", "count" char* stats1_acc_name = pc->value; // For percentiles there is one unique accumulator given (for example) five distinct // names p0,p25,p50,p75,p100. The input accumulators are unique: only one // percentile-keeper. There are multiple output accumulators: each references the same // underlying percentile-keeper but with distinct parameters. Hence the "_in" and "_out" maps. if (is_percentile_acc_name(stats1_acc_name)) { if (ppercentile_acc == NULL) { ppercentile_acc = stats1_percentile_alloc(value_field_name, stats1_acc_name, allow_int_float, do_interpolated_percentiles); if (ppercentile_acc == NULL) { fprintf(stderr, "%s stats1: accumulator \"%s\" not found.\n", MLR_GLOBALS.bargv0, stats1_acc_name); exit(1); } lhmsv_put(acc_field_to_acc_state_in, stats1_acc_name, ppercentile_acc, NO_FREE); } else { stats1_percentile_reuse(ppercentile_acc); } lhmsv_put(acc_field_to_acc_state_out, stats1_acc_name, ppercentile_acc, NO_FREE); } else { stats1_acc_t* pstats1_acc = make_stats1_acc(value_field_name, stats1_acc_name, allow_int_float, do_interpolated_percentiles); if (pstats1_acc == NULL) { fprintf(stderr, "%s stats1: accumulator \"%s\" not found.\n", MLR_GLOBALS.bargv0, stats1_acc_name); exit(1); } lhmsv_put(acc_field_to_acc_state_in, stats1_acc_name, pstats1_acc, NO_FREE); lhmsv_put(acc_field_to_acc_state_out, stats1_acc_name, pstats1_acc, NO_FREE); } } } stats1_acc_t* make_stats1_acc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { for (int i = 0; i < stats1_acc_lookup_table_length; i++) if (streq(stats1_acc_name, stats1_acc_lookup_table[i].name)) return stats1_acc_lookup_table[i].palloc_func(value_field_name, stats1_acc_name, allow_int_float, do_interpolated_percentiles); return NULL; } int is_percentile_acc_name(char* stats1_acc_name) { if (streq(stats1_acc_name, "median")) return TRUE; double percentile; // sscanf(stats1_acc_name, "p%lf", &percentile) allows "p74x" et al. which isn't ok. if (stats1_acc_name[0] != 'p') return FALSE; if (!mlr_try_float_from_string(&stats1_acc_name[1], &percentile)) return FALSE; if (percentile < 0.0 || percentile > 100.0) { fprintf(stderr, "%s stats1: percentile \"%s\" outside range [0,100].\n", MLR_GLOBALS.bargv0, stats1_acc_name); exit(1); } return TRUE; } // ---------------------------------------------------------------- typedef struct _stats1_count_state_t { mv_t counter; mv_t one; char* output_field_name; } stats1_count_state_t; static void stats1_count_singest(void* pvstate, char* val) { stats1_count_state_t* pstate = pvstate; pstate->counter = x_xx_plus_func(&pstate->counter, &pstate->one); } static void stats1_count_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_count_state_t* pstate = pvstate; if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->counter), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->counter), FREE_ENTRY_VALUE); } static void stats1_count_free(stats1_acc_t* pstats1_acc) { stats1_count_state_t* pstate = pstats1_acc->pvstate; free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_count_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_count_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_count_state_t)); pstate->counter = allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); pstate->one = allow_int_float ? mv_from_int(1LL) : mv_from_float(1.0); pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = stats1_count_singest; pstats1_acc->pemit_func = stats1_count_emit; pstats1_acc->pfree_func = stats1_count_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_mode_state_t { lhmsll_t* pcounts_for_value; char* output_field_name; } stats1_mode_state_t; // mode on strings: "1" and "1.0" and "1.0000" are distinct text. static void stats1_mode_singest(void* pvstate, char* val) { stats1_mode_state_t* pstate = pvstate; lhmslle_t* pe = lhmsll_get_entry(pstate->pcounts_for_value, val); if (pe == NULL) { // lhmsll does a strdup so we needn't. lhmsll_put(pstate->pcounts_for_value, mlr_strdup_or_die(val), 1, FREE_ENTRY_KEY); } else { pe->value++; } } static void stats1_mode_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_mode_state_t* pstate = pvstate; int max_count = 0; char* max_key = ""; for (lhmslle_t* pe = pstate->pcounts_for_value->phead; pe != NULL; pe = pe->pnext) { int count = pe->value; if (count > max_count) { max_key = pe->key; max_count = count; } } if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mlr_strdup_or_die(max_key), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, max_key, NO_FREE); } static void stats1_mode_free(stats1_acc_t* pstats1_acc) { stats1_mode_state_t* pstate = pstats1_acc->pvstate; lhmsll_free(pstate->pcounts_for_value); free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_mode_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_mode_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_mode_state_t)); pstate->pcounts_for_value = lhmsll_alloc(); pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = stats1_mode_singest; pstats1_acc->pemit_func = stats1_mode_emit; pstats1_acc->pfree_func = stats1_mode_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_antimode_state_t { lhmsll_t* pcounts_for_value; char* output_field_name; } stats1_antimode_state_t; // antimode on strings: "1" and "1.0" and "1.0000" are distinct text. static void stats1_antimode_singest(void* pvstate, char* val) { stats1_antimode_state_t* pstate = pvstate; lhmslle_t* pe = lhmsll_get_entry(pstate->pcounts_for_value, val); if (pe == NULL) { // lhmsll does a strdup so we needn't. lhmsll_put(pstate->pcounts_for_value, mlr_strdup_or_die(val), 1, FREE_ENTRY_KEY); } else { pe->value++; } } static void stats1_antimode_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_antimode_state_t* pstate = pvstate; int min_count = 0; int have_min_count = FALSE; char* min_key = ""; for (lhmslle_t* pe = pstate->pcounts_for_value->phead; pe != NULL; pe = pe->pnext) { int count = pe->value; if (!have_min_count || count < min_count) { min_key = pe->key; min_count = count; have_min_count = TRUE; } } if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mlr_strdup_or_die(min_key), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, min_key, NO_FREE); } static void stats1_antimode_free(stats1_acc_t* pstats1_acc) { stats1_antimode_state_t* pstate = pstats1_acc->pvstate; lhmsll_free(pstate->pcounts_for_value); free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_antimode_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_antimode_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_antimode_state_t)); pstate->pcounts_for_value = lhmsll_alloc(); pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = stats1_antimode_singest; pstats1_acc->pemit_func = stats1_antimode_emit; pstats1_acc->pfree_func = stats1_antimode_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_sum_state_t { mv_t sum; char* output_field_name; int allow_int_float; } stats1_sum_state_t; static void stats1_sum_ningest(void* pvstate, mv_t* pval) { stats1_sum_state_t* pstate = pvstate; pstate->sum = x_xx_plus_func(&pstate->sum, pval); } static void stats1_sum_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_sum_state_t* pstate = pvstate; if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->sum), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->sum), FREE_ENTRY_VALUE); } static void stats1_sum_free(stats1_acc_t* pstats1_acc) { stats1_sum_state_t* pstate = pstats1_acc->pvstate; free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_sum_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_sum_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_sum_state_t)); pstate->allow_int_float = allow_int_float; pstate->sum = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = stats1_sum_ningest; pstats1_acc->psingest_func = NULL; pstats1_acc->pemit_func = stats1_sum_emit; pstats1_acc->pfree_func = stats1_sum_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_mean_state_t { double sum; unsigned long long count; char* output_field_name; } stats1_mean_state_t; static void stats1_mean_dingest(void* pvstate, double val) { stats1_mean_state_t* pstate = pvstate; pstate->sum += val; pstate->count++; } static void stats1_mean_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_mean_state_t* pstate = pvstate; if (pstate->count == 0LL) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { double quot = pstate->sum / pstate->count; char* val = mlr_alloc_string_from_double(quot, MLR_GLOBALS.ofmt); if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); } } static void stats1_mean_free(stats1_acc_t* pstats1_acc) { stats1_mean_state_t* pstate = pstats1_acc->pvstate; free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_mean_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_mean_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_mean_state_t)); pstate->sum = 0.0; pstate->count = 0LL; pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = stats1_mean_dingest; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = NULL; pstats1_acc->pemit_func = stats1_mean_emit; pstats1_acc->pfree_func = stats1_mean_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_stddev_var_meaneb_state_t { unsigned long long count; double sumx; double sumx2; cumulant2o_t do_which; char* output_field_name; } stats1_stddev_var_meaneb_state_t; static void stats1_stddev_var_meaneb_dingest(void* pvstate, double val) { stats1_stddev_var_meaneb_state_t* pstate = pvstate; pstate->count++; pstate->sumx += val; pstate->sumx2 += val*val; } static void stats1_stddev_var_meaneb_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_stddev_var_meaneb_state_t* pstate = pvstate; if (pstate->count < 2LL) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { double output = mlr_get_var(pstate->count, pstate->sumx, pstate->sumx2); if (pstate->do_which == DO_STDDEV) output = sqrt(output); else if (pstate->do_which == DO_MEANEB) output = sqrt(output / pstate->count); char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); } } static void stats1_stddev_var_meaneb_free(stats1_acc_t* pstats1_acc) { stats1_stddev_var_meaneb_state_t* pstate = pstats1_acc->pvstate; free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_stddev_var_meaneb_alloc(char* value_field_name, char* stats1_acc_name, cumulant2o_t do_which) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_stddev_var_meaneb_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_stddev_var_meaneb_state_t)); pstate->count = 0LL; pstate->sumx = 0.0; pstate->sumx2 = 0.0; pstate->do_which = do_which; pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = stats1_stddev_var_meaneb_dingest; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = NULL; pstats1_acc->pemit_func = stats1_stddev_var_meaneb_emit; pstats1_acc->pfree_func = stats1_stddev_var_meaneb_free; return pstats1_acc; } stats1_acc_t* stats1_stddev_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { return stats1_stddev_var_meaneb_alloc(value_field_name, stats1_acc_name, DO_STDDEV); } stats1_acc_t* stats1_var_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { return stats1_stddev_var_meaneb_alloc(value_field_name, stats1_acc_name, DO_VAR); } stats1_acc_t* stats1_meaneb_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { return stats1_stddev_var_meaneb_alloc(value_field_name, stats1_acc_name, DO_MEANEB); } // ---------------------------------------------------------------- typedef struct _stats1_skewness_state_t { unsigned long long count; double sumx; double sumx2; double sumx3; char* output_field_name; } stats1_skewness_state_t; static void stats1_skewness_dingest(void* pvstate, double val) { stats1_skewness_state_t* pstate = pvstate; pstate->count++; pstate->sumx += val; pstate->sumx2 += val*val; pstate->sumx3 += val*val*val; } static void stats1_skewness_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_skewness_state_t* pstate = pvstate; if (pstate->count < 2LL) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { double output = mlr_get_skewness(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumx3); char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); } } static void stats1_skewness_free(stats1_acc_t* pstats1_acc) { stats1_skewness_state_t* pstate = pstats1_acc->pvstate; free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_skewness_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_skewness_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_skewness_state_t)); pstate->count = 0LL; pstate->sumx = 0.0; pstate->sumx2 = 0.0; pstate->sumx3 = 0.0; pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = stats1_skewness_dingest; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = NULL; pstats1_acc->pemit_func = stats1_skewness_emit; pstats1_acc->pfree_func = stats1_skewness_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_kurtosis_state_t { unsigned long long count; double sumx; double sumx2; double sumx3; double sumx4; char* output_field_name; } stats1_kurtosis_state_t; static void stats1_kurtosis_dingest(void* pvstate, double val) { stats1_kurtosis_state_t* pstate = pvstate; pstate->count++; pstate->sumx += val; pstate->sumx2 += val*val; pstate->sumx3 += val*val*val; pstate->sumx4 += val*val*val*val; } static void stats1_kurtosis_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_kurtosis_state_t* pstate = pvstate; if (pstate->count < 2LL) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { double output = mlr_get_kurtosis(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumx3, pstate->sumx4); char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); } } static void stats1_kurtosis_free(stats1_acc_t* pstats1_acc) { stats1_kurtosis_state_t* pstate = pstats1_acc->pvstate; free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_kurtosis_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_kurtosis_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_kurtosis_state_t)); pstate->count = 0LL; pstate->sumx = 0.0; pstate->sumx2 = 0.0; pstate->sumx3 = 0.0; pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = stats1_kurtosis_dingest; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = NULL; pstats1_acc->pemit_func = stats1_kurtosis_emit; pstats1_acc->pfree_func = stats1_kurtosis_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_min_state_t { mv_t min; char* output_field_name; } stats1_min_state_t; static void stats1_min_singest(void* pvstate, char* sval) { stats1_min_state_t* pstate = pvstate; mv_t val = mv_copy_type_infer_string_or_float_or_int(sval); pstate->min = x_xx_min_func(&pstate->min, &val); } static void stats1_min_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_min_state_t* pstate = pvstate; if (mv_is_null(&pstate->min)) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->min), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->min), FREE_ENTRY_VALUE); } } static void stats1_min_free(stats1_acc_t* pstats1_acc) { stats1_min_state_t* pstate = pstats1_acc->pvstate; mv_free(&pstate->min); free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_min_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_min_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_min_state_t)); pstate->min = mv_absent(); pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = stats1_min_singest; pstats1_acc->pemit_func = stats1_min_emit; pstats1_acc->pfree_func = stats1_min_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_max_state_t { mv_t max; char* output_field_name; } stats1_max_state_t; static void stats1_max_singest(void* pvstate, char* sval) { stats1_max_state_t* pstate = pvstate; mv_t val = mv_copy_type_infer_string_or_float_or_int(sval); pstate->max = x_xx_max_func(&pstate->max, &val); } static void stats1_max_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_max_state_t* pstate = pvstate; if (mv_is_null(&pstate->max)) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->max), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->max), FREE_ENTRY_VALUE); } } static void stats1_max_free(stats1_acc_t* pstats1_acc) { stats1_max_state_t* pstate = pstats1_acc->pvstate; mv_free(&pstate->max); free(pstate->output_field_name); free(pstate); free(pstats1_acc); } stats1_acc_t* stats1_max_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_max_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_max_state_t)); pstate->max = mv_absent(); pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = stats1_max_singest; pstats1_acc->pemit_func = stats1_max_emit; pstats1_acc->pfree_func = stats1_max_free; return pstats1_acc; } // ---------------------------------------------------------------- typedef struct _stats1_percentile_state_t { percentile_keeper_t* ppercentile_keeper; lhmss_t* poutput_field_names; int reference_count; percentile_keeper_emitter_t* ppercentile_keeper_emitter; } stats1_percentile_state_t; static void stats1_percentile_singest(void* pvstate, char* sval) { stats1_percentile_state_t* pstate = pvstate; mv_t val = mv_copy_type_infer_string_or_float_or_int(sval); percentile_keeper_ingest(pstate->ppercentile_keeper, val); } static void stats1_percentile_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_percentile_state_t* pstate = pvstate; double p; if (stats1_acc_name[0] == 'm') { // Pre-validated to be either p{number} or median. p = 50.0; } else { // TODO: do the sscanf once at alloc time and store the double in the state struct for a minor perf gain. (void)sscanf(stats1_acc_name, "p%lf", &p); // Assuming this was range-checked earlier on to be in [0,100]. } mv_t v = pstate->ppercentile_keeper_emitter(pstate->ppercentile_keeper, p); char* s = mv_alloc_format_val(&v); // For this type, one accumulator tracks many stats1_names, but a single value_field_name. char* output_field_name = lhmss_get(pstate->poutput_field_names, stats1_acc_name); if (output_field_name == NULL) { output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); lhmss_put(pstate->poutput_field_names, mlr_strdup_or_die(stats1_acc_name), output_field_name, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } lrec_put(poutrec, mlr_strdup_or_die(output_field_name), s, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } static void stats1_percentile_free(stats1_acc_t* pstats1_acc) { stats1_percentile_state_t* pstate = pstats1_acc->pvstate; pstate->reference_count--; if (pstate->reference_count == 0) { percentile_keeper_free(pstate->ppercentile_keeper); lhmss_free(pstate->poutput_field_names); free(pstate); free(pstats1_acc); } } stats1_acc_t* stats1_percentile_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles) { stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); stats1_percentile_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_percentile_state_t)); pstate->ppercentile_keeper = percentile_keeper_alloc(); pstate->poutput_field_names = lhmss_alloc(); pstate->reference_count = 1; pstate->ppercentile_keeper_emitter = (do_interpolated_percentiles) ? percentile_keeper_emit_linearly_interpolated : percentile_keeper_emit_non_interpolated; pstats1_acc->pvstate = (void*)pstate; pstats1_acc->pdingest_func = NULL; pstats1_acc->pningest_func = NULL; pstats1_acc->psingest_func = stats1_percentile_singest; pstats1_acc->pemit_func = stats1_percentile_emit; pstats1_acc->pfree_func = stats1_percentile_free; return pstats1_acc; } void stats1_percentile_reuse(stats1_acc_t* pstats1_acc) { stats1_percentile_state_t* pstate = pstats1_acc->pvstate; pstate->reference_count++; } miller-5.6.2/c/mapping/stats1_accumulators.h000066400000000000000000000135551354153536500210620ustar00rootroot00000000000000#ifndef STATS1_ACCUMULATORS_H #define STATS1_ACCUMULATORS_H #include "containers/lrec.h" #include "containers/slls.h" #include "containers/lhmsv.h" // ---------------------------------------------------------------- // These are used by mlr stats1 as well as mlr merge-fields. // ---------------------------------------------------------------- // Types of second-order cumulant typedef enum _cumulant2o_t { DO_STDDEV, DO_VAR, DO_MEANEB, } cumulant2o_t; // ---------------------------------------------------------------- struct _stats1_acc_t; // forward reference for method definitions typedef void stats1_dingest_func_t(void* pvstate, double val); typedef void stats1_ningest_func_t(void* pvstate, mv_t* pval); typedef void stats1_singest_func_t(void* pvstate, char* val); // For mlr stats1, there is a single alloc at start including computation of // output field name; arbitrary number of records output with that field name; // then free. There it makes sense to point the poutrec key at the output field // name in the acc state rather than copying it. For mlr merge-fields, by // contrast, the outer/inner loops are reversed: arbitrary number of records; // for each, allocate, set output field key/value, free; then, the record is // output. There it is necessary to copy the key since it will be referenced // after the accumulator is freed. typedef void stats1_emit_func_t(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec); typedef void stats1_free_func_t(struct _stats1_acc_t* pstats1_acc); typedef struct _stats1_acc_t { void* pvstate; stats1_dingest_func_t* pdingest_func; stats1_ningest_func_t* pningest_func; stats1_singest_func_t* psingest_func; stats1_emit_func_t* pemit_func; stats1_free_func_t* pfree_func; // virtual destructor } stats1_acc_t; typedef stats1_acc_t* stats1_alloc_func_t(char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles); // aif = allow_int_float // dip = do_interpolated_percentiles stats1_acc_t* stats1_count_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_mode_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_antimode_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_sum_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_mean_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_stddev_var_meaneb_alloc (char* value_field_name, char* stats1_acc_name, cumulant2o_t do_which); stats1_acc_t* stats1_stddev_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_var_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_meaneb_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_skewness_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_kurtosis_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_min_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_max_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); stats1_acc_t* stats1_percentile_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); void stats1_percentile_reuse (stats1_acc_t* pstats1_acc); // For percentiles there is one unique accumulator given (for example) five distinct // names p0,p25,p50,p75,p100. The input accumulators are unique: only one // percentile-keeper. There are multiple output accumulators: each references the same // underlying percentile-keeper but with distinct parameters. Hence the "_in" and "_out" maps. void make_stats1_accs( char* value_field_name, slls_t* paccumulator_names, int allow_int_float, int do_interpolated_percentiles, lhmsv_t* acc_field_to_acc_state_in, lhmsv_t* acc_field_to_acc_state_out); stats1_acc_t* make_stats1_acc( char* value_field_name, char* stats1_acc_name, int allow_int_float, int do_interpolated_percentiles); int is_percentile_acc_name(char* stats1_acc_name); // ---------------------------------------------------------------- // Lookups for all but percentiles, which are a special case. typedef struct _stats1_acc_lookup_t { char* name; stats1_alloc_func_t* palloc_func; char* desc; } stats1_acc_lookup_t; static stats1_acc_lookup_t stats1_acc_lookup_table[] = { {"count", stats1_count_alloc, "Count instances of fields"}, {"mode", stats1_mode_alloc, "Find most-frequently-occurring values for fields; first-found wins tie"}, {"antimode", stats1_antimode_alloc, "Find least-frequently-occurring values for fields; first-found wins tie"}, {"sum", stats1_sum_alloc, "Compute sums of specified fields"}, {"mean", stats1_mean_alloc, "Compute averages (sample means) of specified fields"}, {"stddev", stats1_stddev_alloc, "Compute sample standard deviation of specified fields"}, {"var", stats1_var_alloc, "Compute sample variance of specified fields"}, {"meaneb", stats1_meaneb_alloc, "Estimate error bars for averages (assuming no sample autocorrelation)"}, {"skewness", stats1_skewness_alloc, "Compute sample skewness of specified fields"}, {"kurtosis", stats1_kurtosis_alloc, "Compute sample kurtosis of specified fields"}, {"min", stats1_min_alloc, "Compute minimum values of specified fields"}, {"max", stats1_max_alloc, "Compute maximum values of specified fields"}, }; static int stats1_acc_lookup_table_length = sizeof(stats1_acc_lookup_table) / sizeof(stats1_acc_lookup_table[0]); #endif // STATS1_ACCUMULATORS_H miller-5.6.2/c/mlrmain.c000066400000000000000000000017461354153536500150570ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "cli/mlrcli.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "auxents/aux_entries.h" #include "input/lrec_readers.h" #include "mapping/mappers.h" #include "output/lrec_writers.h" #include "stream/stream.h" int main(int argc, char** argv) { mlr_global_init(argv[0], NULL); // 'mlr lecat' or any other non-miller-per-se toolery which is delivered (for convenience) // within the mlr executable. If argv[1] is found then this function won't return, executing // the handler instead. do_aux_entries(argc, argv); sllv_t* pmapper_list = NULL; cli_opts_t* popts = parse_command_line(argc, argv, &pmapper_list); mlr_global_init(argv[0], popts->ofmt); context_t ctx; context_init_from_opts(&ctx, popts); int ok = do_stream_chained(&ctx, pmapper_list, popts); mapper_chain_free(pmapper_list, &ctx); cli_opts_free(popts); return ok ? 0 : 1; } miller-5.6.2/c/mlrvers.h000066400000000000000000000002451354153536500151100ustar00rootroot00000000000000#ifndef MLRVERS_H #define MLRVERS_H // Manually increment on updates to https://github.com/johnkerl/miller/releases #define MLR_VERSION "v5.6.2" #endif // MLRVERS_H miller-5.6.2/c/msys2/000077500000000000000000000000001354153536500143215ustar00rootroot00000000000000miller-5.6.2/c/msys2/setup000077500000000000000000000017551354153536500154170ustar00rootroot00000000000000if [ -z "$BEEN_HERE" ]; then export PATH=.:./winstuff:$PATH export BEEN_HERE=yes fi export textdefault=$'\033[0m' export black=$'\033[30;01m' export red=$'\033[31;01m' export green=$'\033[32;01m' export yellow=$'\033[33;01m' export blue=$'\033[34;01m' export magenta=$'\033[35;01m' export cyan=$'\033[36;01m' export white=$'\033[37;01m' export bold=$'\033[1;01m' export underline=$'\033[4;01m' export notboldorunderline=$'\033[0m' export starttitle=$'\033]0;' export endtitle=$'\007' #export PS1='\u@\h:\W% ' #export PS1='\w% ' export PS1="${yellow}${bold}\w% ${textdefault}" alias lt='ls -lrt' alias ll='ls -l' alias v=vim alias h=history alias bake='make -f Makefile.no-autoconfig' export mlb=/miller/miller-git/miller export mlc=/miller/miller-git/miller/c export mld=/miller/miller-git/miller/doc alias mlb='cd $mlb; ' alias mlc='cd $mlc; ' alias mld='cd $mld; ' alias gs='git status' alias gd='git diff' alias gam='git status | grep modified | awk "{print $NF}"' alias gcm='git commit -m ' miller-5.6.2/c/oo000077500000000000000000000035131354153536500136110ustar00rootroot00000000000000run_mlr() { echo echo ................................................................ echo mlr "$@" ./mlr "$@" # ./vgrun ./mlr "$@" } run_mlr_for_auxents() { echo echo ................................................................ echo mlr "$@" ./mlr "$@" } run_cat() { echo cat "$@" echo cat "$@" >> $outfile cat "$@" >> $outfile echo >> $outfile } mlr_expect_fail() { echo echo ................................................................ echo mlr "$@" mlr "$@" status=$? if [ $status -ne 1 ]; then echo "Exit status was $status; expected 1." fi } announce() { echo echo "================================================================" echo "$@" echo } mention() { echo echo ---------------------------------------------------------------- "$@" } # ================================================================ flags="-a" # ================================================================ #vee=-v vee= # ---------------------------------------------------------------- run_mlr --opprint put '$a = $[[2]]; unset $["a"]' s run_mlr --opprint put '$[[1]] = $b; unset $[[1]]' s run_mlr --opprint put '$[[1]] = $[[2]]; unset $["a"]' s run_mlr --c2p cat input.txt run_mlr --c2p put '$[[3]] = capitalize($[[3]])' input.txt run_mlr --c2p put '$[[[3]]] = capitalize($[[[3]]])' input.txt run_mlr --c2p put '$foo = capitalize($[[3]])' input.txt run_mlr --c2p put '$foo = capitalize($[[[3]]])' input.txt run_mlr --c2p put '$[[3]] = "NEW"' input.txt run_mlr --c2p put '$[[[3]]] = "NEW"' input.txt run_mlr --opprint put '$new1=$[[1]]; $[[11]]=$[[2]]' s run_mlr --opprint put '$new1=$[[1]]; $[[2]]=$[[11]]' s run_mlr --opprint put 'unset $c' s run_mlr --opprint put 'unset $c; $c="new"' s run_mlr --opprint put '$c=$a.$b; unset $c; $c="new"' s run_mlr --opprint put '$c=$a.$b; unset $c' s miller-5.6.2/c/output/000077500000000000000000000000001354153536500146045ustar00rootroot00000000000000miller-5.6.2/c/output/Makefile.am000066400000000000000000000011461354153536500166420ustar00rootroot00000000000000noinst_LTLIBRARIES= liboutput.la liboutput_la_SOURCES= \ file_output_mode.h \ lrec_writer.h \ lrec_writer_csv.c \ lrec_writer_csvlite.c \ lrec_writer_dkvp.c \ lrec_writer_json.c \ lrec_writer_markdown.c \ lrec_writer_nidx.c \ lrec_writer_pprint.c \ lrec_writer_xtab.c \ lrec_writers.c \ lrec_writers.h \ multi_lrec_writer.c \ multi_lrec_writer.h \ multi_out.c \ multi_out.h liboutput_la_LIBADD= \ ../lib/libmlr.la \ ../containers/libcontainers.la liboutput_la_CPPFLAGS= -I${srcdir}/../ liboutput_la_CFLAGS= -std=gnu99 miller-5.6.2/c/output/Makefile.in000066400000000000000000001000131354153536500166440ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/output ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liboutput_la_DEPENDENCIES = ../lib/libmlr.la \ ../containers/libcontainers.la am_liboutput_la_OBJECTS = liboutput_la-lrec_writer_csv.lo \ liboutput_la-lrec_writer_csvlite.lo \ liboutput_la-lrec_writer_dkvp.lo \ liboutput_la-lrec_writer_json.lo \ liboutput_la-lrec_writer_markdown.lo \ liboutput_la-lrec_writer_nidx.lo \ liboutput_la-lrec_writer_pprint.lo \ liboutput_la-lrec_writer_xtab.lo liboutput_la-lrec_writers.lo \ liboutput_la-multi_lrec_writer.lo liboutput_la-multi_out.lo liboutput_la_OBJECTS = $(am_liboutput_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = liboutput_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(liboutput_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liboutput_la_SOURCES) DIST_SOURCES = $(liboutput_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = liboutput.la liboutput_la_SOURCES = \ file_output_mode.h \ lrec_writer.h \ lrec_writer_csv.c \ lrec_writer_csvlite.c \ lrec_writer_dkvp.c \ lrec_writer_json.c \ lrec_writer_markdown.c \ lrec_writer_nidx.c \ lrec_writer_pprint.c \ lrec_writer_xtab.c \ lrec_writers.c \ lrec_writers.h \ multi_lrec_writer.c \ multi_lrec_writer.h \ multi_out.c \ multi_out.h liboutput_la_LIBADD = \ ../lib/libmlr.la \ ../containers/libcontainers.la liboutput_la_CPPFLAGS = -I${srcdir}/../ liboutput_la_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/output/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/output/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liboutput.la: $(liboutput_la_OBJECTS) $(liboutput_la_DEPENDENCIES) $(EXTRA_liboutput_la_DEPENDENCIES) $(AM_V_CCLD)$(liboutput_la_LINK) $(liboutput_la_OBJECTS) $(liboutput_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_csv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_csvlite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_dkvp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_json.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_markdown.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_nidx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_pprint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_xtab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-multi_lrec_writer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-multi_out.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< liboutput_la-lrec_writer_csv.lo: lrec_writer_csv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_csv.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_csv.Tpo -c -o liboutput_la-lrec_writer_csv.lo `test -f 'lrec_writer_csv.c' || echo '$(srcdir)/'`lrec_writer_csv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_csv.Tpo $(DEPDIR)/liboutput_la-lrec_writer_csv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_csv.c' object='liboutput_la-lrec_writer_csv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_csv.lo `test -f 'lrec_writer_csv.c' || echo '$(srcdir)/'`lrec_writer_csv.c liboutput_la-lrec_writer_csvlite.lo: lrec_writer_csvlite.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_csvlite.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_csvlite.Tpo -c -o liboutput_la-lrec_writer_csvlite.lo `test -f 'lrec_writer_csvlite.c' || echo '$(srcdir)/'`lrec_writer_csvlite.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_csvlite.Tpo $(DEPDIR)/liboutput_la-lrec_writer_csvlite.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_csvlite.c' object='liboutput_la-lrec_writer_csvlite.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_csvlite.lo `test -f 'lrec_writer_csvlite.c' || echo '$(srcdir)/'`lrec_writer_csvlite.c liboutput_la-lrec_writer_dkvp.lo: lrec_writer_dkvp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_dkvp.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_dkvp.Tpo -c -o liboutput_la-lrec_writer_dkvp.lo `test -f 'lrec_writer_dkvp.c' || echo '$(srcdir)/'`lrec_writer_dkvp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_dkvp.Tpo $(DEPDIR)/liboutput_la-lrec_writer_dkvp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_dkvp.c' object='liboutput_la-lrec_writer_dkvp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_dkvp.lo `test -f 'lrec_writer_dkvp.c' || echo '$(srcdir)/'`lrec_writer_dkvp.c liboutput_la-lrec_writer_json.lo: lrec_writer_json.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_json.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_json.Tpo -c -o liboutput_la-lrec_writer_json.lo `test -f 'lrec_writer_json.c' || echo '$(srcdir)/'`lrec_writer_json.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_json.Tpo $(DEPDIR)/liboutput_la-lrec_writer_json.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_json.c' object='liboutput_la-lrec_writer_json.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_json.lo `test -f 'lrec_writer_json.c' || echo '$(srcdir)/'`lrec_writer_json.c liboutput_la-lrec_writer_markdown.lo: lrec_writer_markdown.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_markdown.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_markdown.Tpo -c -o liboutput_la-lrec_writer_markdown.lo `test -f 'lrec_writer_markdown.c' || echo '$(srcdir)/'`lrec_writer_markdown.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_markdown.Tpo $(DEPDIR)/liboutput_la-lrec_writer_markdown.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_markdown.c' object='liboutput_la-lrec_writer_markdown.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_markdown.lo `test -f 'lrec_writer_markdown.c' || echo '$(srcdir)/'`lrec_writer_markdown.c liboutput_la-lrec_writer_nidx.lo: lrec_writer_nidx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_nidx.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_nidx.Tpo -c -o liboutput_la-lrec_writer_nidx.lo `test -f 'lrec_writer_nidx.c' || echo '$(srcdir)/'`lrec_writer_nidx.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_nidx.Tpo $(DEPDIR)/liboutput_la-lrec_writer_nidx.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_nidx.c' object='liboutput_la-lrec_writer_nidx.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_nidx.lo `test -f 'lrec_writer_nidx.c' || echo '$(srcdir)/'`lrec_writer_nidx.c liboutput_la-lrec_writer_pprint.lo: lrec_writer_pprint.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_pprint.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_pprint.Tpo -c -o liboutput_la-lrec_writer_pprint.lo `test -f 'lrec_writer_pprint.c' || echo '$(srcdir)/'`lrec_writer_pprint.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_pprint.Tpo $(DEPDIR)/liboutput_la-lrec_writer_pprint.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_pprint.c' object='liboutput_la-lrec_writer_pprint.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_pprint.lo `test -f 'lrec_writer_pprint.c' || echo '$(srcdir)/'`lrec_writer_pprint.c liboutput_la-lrec_writer_xtab.lo: lrec_writer_xtab.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_xtab.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_xtab.Tpo -c -o liboutput_la-lrec_writer_xtab.lo `test -f 'lrec_writer_xtab.c' || echo '$(srcdir)/'`lrec_writer_xtab.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_xtab.Tpo $(DEPDIR)/liboutput_la-lrec_writer_xtab.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_xtab.c' object='liboutput_la-lrec_writer_xtab.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_xtab.lo `test -f 'lrec_writer_xtab.c' || echo '$(srcdir)/'`lrec_writer_xtab.c liboutput_la-lrec_writers.lo: lrec_writers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writers.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writers.Tpo -c -o liboutput_la-lrec_writers.lo `test -f 'lrec_writers.c' || echo '$(srcdir)/'`lrec_writers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writers.Tpo $(DEPDIR)/liboutput_la-lrec_writers.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writers.c' object='liboutput_la-lrec_writers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writers.lo `test -f 'lrec_writers.c' || echo '$(srcdir)/'`lrec_writers.c liboutput_la-multi_lrec_writer.lo: multi_lrec_writer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-multi_lrec_writer.lo -MD -MP -MF $(DEPDIR)/liboutput_la-multi_lrec_writer.Tpo -c -o liboutput_la-multi_lrec_writer.lo `test -f 'multi_lrec_writer.c' || echo '$(srcdir)/'`multi_lrec_writer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-multi_lrec_writer.Tpo $(DEPDIR)/liboutput_la-multi_lrec_writer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multi_lrec_writer.c' object='liboutput_la-multi_lrec_writer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-multi_lrec_writer.lo `test -f 'multi_lrec_writer.c' || echo '$(srcdir)/'`multi_lrec_writer.c liboutput_la-multi_out.lo: multi_out.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-multi_out.lo -MD -MP -MF $(DEPDIR)/liboutput_la-multi_out.Tpo -c -o liboutput_la-multi_out.lo `test -f 'multi_out.c' || echo '$(srcdir)/'`multi_out.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-multi_out.Tpo $(DEPDIR)/liboutput_la-multi_out.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multi_out.c' object='liboutput_la-multi_out.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-multi_out.lo `test -f 'multi_out.c' || echo '$(srcdir)/'`multi_out.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/output/file_output_mode.h000066400000000000000000000007641354153536500203270ustar00rootroot00000000000000#ifndef FILE_OUTPUT_MODE_H #define FILE_OUTPUT_MODE_H typedef enum _file_output_mode_t { MODE_WRITE, // fopen/fclose MODE_APPEND, // fopen/fclose MODE_PIPE, // popen/pclose } file_output_mode_t; static inline char* get_mode_string(file_output_mode_t file_output_mode) { return file_output_mode == MODE_APPEND ? "a" : "w"; } static inline char* get_mode_desc(file_output_mode_t file_output_mode) { return file_output_mode == MODE_APPEND ? "append" : "write"; } #endif // FILE_OUTPUT_MODE_H miller-5.6.2/c/output/lrec_writer.h000066400000000000000000000011201354153536500172700ustar00rootroot00000000000000#ifndef LREC_WRITER_H #define LREC_WRITER_H #include #include "containers/lrec.h" #include "lib/context.h" struct _lrec_writer_t; // forward reference for method declarations typedef void lrec_writer_process_func_t(void* pvstate, FILE* fp, lrec_t* prec, context_t* pctx); typedef void lrec_writer_free_func_t(struct _lrec_writer_t* pwriter, context_t* pctx); typedef struct _lrec_writer_t { void* pvstate; lrec_writer_process_func_t* pprocess_func; lrec_writer_free_func_t* pfree_func; // virtual destructor } lrec_writer_t; #endif // LREC_WRITER_H miller-5.6.2/c/output/lrec_writer_csv.c000066400000000000000000000163641354153536500201560ustar00rootroot00000000000000#include #include "cli/quoting.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/mixutil.h" #include "output/lrec_writers.h" typedef void quoted_output_func_t(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); static void quote_all_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); static void quote_none_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); static void quote_minimal_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); static void quote_minimal_auto_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char qf); static void quote_numeric_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); static void quote_original_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); static void csv_quote_string(FILE* fp, char* string); typedef struct _lrec_writer_csv_state_t { int onr; char *ors; char *ofs; int orslen; int ofslen; quoted_output_func_t* pquoted_output_func; long long num_header_lines_output; slls_t* plast_header_output; int headerless_csv_output; } lrec_writer_csv_state_t; // ---------------------------------------------------------------- static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); static void lrec_writer_csv_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_csv_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_csv_free(lrec_writer_t* pwriter, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_csv_alloc(char* ors, char* ofs, quoting_t oquoting, int headerless_csv_output) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_csv_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_csv_state_t)); pstate->onr = 0; pstate->ors = ors; pstate->ofs = ofs; pstate->orslen = strlen(pstate->ors); pstate->ofslen = strlen(pstate->ofs); pstate->headerless_csv_output = headerless_csv_output; switch(oquoting) { case QUOTE_ALL: pstate->pquoted_output_func = quote_all_output_func; break; case QUOTE_NONE: pstate->pquoted_output_func = quote_none_output_func; break; case QUOTE_MINIMAL: pstate->pquoted_output_func = quote_minimal_output_func; break; case QUOTE_NUMERIC: pstate->pquoted_output_func = quote_numeric_output_func; break; case QUOTE_ORIGINAL: pstate->pquoted_output_func = quote_original_output_func; break; default: MLR_INTERNAL_CODING_ERROR(); } pstate->num_header_lines_output = 0LL; pstate->plast_header_output = NULL; plrec_writer->pvstate = (void*)pstate; if (streq(ors, "auto")) { plrec_writer->pprocess_func = lrec_writer_csv_process_auto_ors; if (oquoting == QUOTE_MINIMAL) { pstate->pquoted_output_func = quote_minimal_auto_output_func; } } else { plrec_writer->pprocess_func = lrec_writer_csv_process_nonauto_ors; } plrec_writer->pfree_func = lrec_writer_csv_free; return plrec_writer; } static void lrec_writer_csv_free(lrec_writer_t* pwriter, context_t* pctx) { lrec_writer_csv_state_t* pstate = pwriter->pvstate; slls_free(pstate->plast_header_output); free(pstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_csv_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_csv_process(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_csv_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_csv_state_t* pstate = pvstate; lrec_writer_csv_process(pvstate, output_stream, prec, pstate->ors); } static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { if (prec == NULL) return; lrec_writer_csv_state_t* pstate = pvstate; char *ofs = pstate->ofs; int orslen = strlen(ors); if (pstate->plast_header_output != NULL) { if (!lrec_keys_equal_list(prec, pstate->plast_header_output)) { slls_free(pstate->plast_header_output); pstate->plast_header_output = NULL; if (pstate->num_header_lines_output > 0LL) fputs(ors, output_stream); } } if (pstate->plast_header_output == NULL) { int nf = 0; if (!pstate->headerless_csv_output) { for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputs(ofs, output_stream); pstate->pquoted_output_func(output_stream, pe->key, pstate->ors, pstate->ofs, orslen, pstate->ofslen, 0); nf++; } fputs(ors, output_stream); } pstate->plast_header_output = mlr_copy_keys_from_record(prec); pstate->num_header_lines_output++; } int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputs(ofs, output_stream); pstate->pquoted_output_func(output_stream, pe->value, pstate->ors, pstate->ofs, orslen, pstate->ofslen, pe->quote_flags); nf++; } fputs(ors, output_stream); pstate->onr++; // See ../README.md for memory-management conventions lrec_free(prec); } // ---------------------------------------------------------------- static void quote_all_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, char quote_flags) { csv_quote_string(fp, string); } static void quote_none_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, char quote_flags) { fputs(string, fp); } static void quote_minimal_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, char quote_flags) { int output_quotes = FALSE; for (char* p = string; *p; p++) { if (streqn(p, ors, orslen) || streqn(p, ofs, ofslen)) { output_quotes = TRUE; break; } if (*p == '"') { output_quotes = TRUE; break; } } if (output_quotes) { csv_quote_string(fp, string); } else { fputs(string, fp); } } static void quote_minimal_auto_output_func(FILE* fp, char* string, char* _, char* ofs, int __, int ofslen, char quote_flags) { int output_quotes = FALSE; for (char* p = string; *p; p++) { if (streqn(p, "\n", 1) || streqn(p, "\r\n", 2) || streqn(p, ofs, ofslen)) { output_quotes = TRUE; break; } if (*p == '"') { output_quotes = TRUE; break; } } if (output_quotes) { csv_quote_string(fp, string); } else { fputs(string, fp); } } static void quote_numeric_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, char quote_flags) { double temp; if (mlr_try_float_from_string(string, &temp)) { csv_quote_string(fp, string); } else { fputs(string, fp); } } static void quote_original_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, char quote_flags) { if (quote_flags & FIELD_QUOTED_ON_INPUT) { csv_quote_string(fp, string); } else { fputs(string, fp); } } // ---------------------------------------------------------------- static void csv_quote_string(FILE* fp, char* string) { fputc('"', fp); for (char* p = string; *p; p++) { if (*p == '"') fputs("\"\"", fp); else fputc(*p, fp); } fputc('"', fp); } miller-5.6.2/c/output/lrec_writer_csvlite.c000066400000000000000000000066011354153536500210250ustar00rootroot00000000000000#include #include "containers/mixutil.h" #include "lib/mlrutil.h" #include "output/lrec_writers.h" typedef struct _lrec_writer_csvlite_state_t { int onr; char* ors; char* ofs; long long num_header_lines_output; slls_t* plast_header_output; int headerless_csv_output; } lrec_writer_csvlite_state_t; static void lrec_writer_csvlite_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_csvlite_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); static void lrec_writer_csvlite_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_csvlite_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_csvlite_alloc(char* ors, char* ofs, int headerless_csv_output) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_csvlite_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_csvlite_state_t)); pstate->onr = 0; pstate->ors = ors; pstate->ofs = ofs; pstate->num_header_lines_output = 0LL; pstate->plast_header_output = NULL; pstate->headerless_csv_output = headerless_csv_output; plrec_writer->pvstate = (void*)pstate; plrec_writer->pprocess_func = streq(ors, "auto") ? lrec_writer_csvlite_process_auto_ors : lrec_writer_csvlite_process_nonauto_ors; plrec_writer->pfree_func = lrec_writer_csvlite_free; return plrec_writer; } static void lrec_writer_csvlite_free(lrec_writer_t* pwriter, context_t* pctx) { lrec_writer_csvlite_state_t* pstate = pwriter->pvstate; slls_free(pstate->plast_header_output); free(pstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_csvlite_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_csvlite_process(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_csvlite_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_csvlite_state_t* pstate = pvstate; lrec_writer_csvlite_process(pvstate, output_stream, prec, pstate->ors); } static void lrec_writer_csvlite_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { if (prec == NULL) return; lrec_writer_csvlite_state_t* pstate = pvstate; char* ofs = pstate->ofs; if (pstate->plast_header_output != NULL) { if (!lrec_keys_equal_list(prec, pstate->plast_header_output)) { slls_free(pstate->plast_header_output); pstate->plast_header_output = NULL; if (pstate->num_header_lines_output > 0LL) fputs(ors, output_stream); } } if (pstate->plast_header_output == NULL) { if (!pstate->headerless_csv_output) { int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputs(ofs, output_stream); fputs(pe->key, output_stream); nf++; } fputs(ors, output_stream); } pstate->plast_header_output = mlr_copy_keys_from_record(prec); pstate->num_header_lines_output++; } int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputs(ofs, output_stream); fputs(pe->value, output_stream); nf++; } fputs(ors, output_stream); pstate->onr++; lrec_free(prec); // end of baton-pass } miller-5.6.2/c/output/lrec_writer_dkvp.c000066400000000000000000000044611354153536500203220ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "output/lrec_writers.h" typedef struct _lrec_writer_dkvp_state_t { char* ors; char* ofs; char* ops; } lrec_writer_dkvp_state_t; static void lrec_writer_dkvp_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_dkvp_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); static void lrec_writer_dkvp_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_dkvp_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_dkvp_alloc(char* ors, char* ofs, char* ops) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_dkvp_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_dkvp_state_t)); pstate->ors = ors; pstate->ofs = ofs; pstate->ops = ops; plrec_writer->pvstate = (void*)pstate; plrec_writer->pprocess_func = streq(ors, "auto") ? lrec_writer_dkvp_process_auto_ors : lrec_writer_dkvp_process_nonauto_ors; plrec_writer->pfree_func = lrec_writer_dkvp_free; return plrec_writer; } static void lrec_writer_dkvp_free(lrec_writer_t* pwriter, context_t* pctx) { free(pwriter->pvstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_dkvp_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_dkvp_process(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_dkvp_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_dkvp_state_t* pstate = pvstate; lrec_writer_dkvp_process(pvstate, output_stream, prec, pstate->ors); } static void lrec_writer_dkvp_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { if (prec == NULL) return; lrec_writer_dkvp_state_t* pstate = pvstate; char* ofs = pstate->ofs; char* ops = pstate->ops; int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputs(ofs, output_stream); fputs(pe->key, output_stream); fputs(ops, output_stream); fputs(pe->value, output_stream); nf++; } fputs(ors, output_stream); lrec_free(prec); // end of baton-pass } miller-5.6.2/c/output/lrec_writer_json.c000066400000000000000000000142241354153536500203250ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/mlhmmv.h" #include "output/lrec_writers.h" typedef struct _lrec_writer_json_state_t { unsigned long long counter; char* output_json_flatten_separator; int json_quote_int_keys; int json_quote_non_string_values; char* line_indent; char* before_records_at_start_of_stream1; char* between_records_after_start_of_stream; char* after_records_at_end_of_stream1; char* line_term; int stack_vertically; } lrec_writer_json_state_t; static void lrec_writer_json_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_json_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* before_or_after_records, char* line_term); static void lrec_writer_json_process_auto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_json_process_auto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_json_process_nonauto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_json_process_nonauto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_json_alloc(int stack_vertically, int wrap_json_output_in_outer_list, int json_quote_int_keys, int json_quote_non_string_values, char* output_json_flatten_separator, char* line_term) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_json_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_json_state_t)); pstate->json_quote_int_keys = json_quote_int_keys; pstate->json_quote_non_string_values = json_quote_non_string_values; pstate->counter = 0; pstate->output_json_flatten_separator = output_json_flatten_separator; // xxx pending reworked JSON-output logic (not always ending in LF; needing fflush), // to be implemented someday if ever. Workaround: pipe output to "jq .". //pstate->line_indent = wrap_json_output_in_outer_list ? " " : ""; pstate->line_indent = wrap_json_output_in_outer_list ? "" : ""; pstate->before_records_at_start_of_stream1 = wrap_json_output_in_outer_list ? "[" : ""; pstate->between_records_after_start_of_stream = wrap_json_output_in_outer_list ? "," : ""; pstate->after_records_at_end_of_stream1 = wrap_json_output_in_outer_list ? "]" : ""; pstate->line_term = line_term; pstate->stack_vertically = stack_vertically; plrec_writer->pvstate = (void*)pstate; if (streq(line_term, "auto")) { plrec_writer->pprocess_func = wrap_json_output_in_outer_list ? lrec_writer_json_process_auto_line_term_wrap : lrec_writer_json_process_auto_line_term_no_wrap; } else { plrec_writer->pprocess_func = wrap_json_output_in_outer_list ? lrec_writer_json_process_nonauto_line_term_wrap : lrec_writer_json_process_nonauto_line_term_no_wrap; } plrec_writer->pfree_func = lrec_writer_json_free; return plrec_writer; } static void lrec_writer_json_free(lrec_writer_t* pwriter, context_t* pctx) { free(pwriter->pvstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_json_process_auto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_json_process(pvstate, output_stream, prec, pctx->auto_line_term, pctx->auto_line_term); } static void lrec_writer_json_process_auto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_json_process(pvstate, output_stream, prec, "", pctx->auto_line_term); } static void lrec_writer_json_process_nonauto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_json_state_t* pstate = pvstate; lrec_writer_json_process(pvstate, output_stream, prec, pstate->line_term, pstate->line_term); } static void lrec_writer_json_process_nonauto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_json_state_t* pstate = pvstate; lrec_writer_json_process(pvstate, output_stream, prec, "", pstate->line_term); } static void lrec_writer_json_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* before_or_after_records, char* line_term) { lrec_writer_json_state_t* pstate = pvstate; if (prec != NULL) { // not end of record stream if (pstate->counter++ == 0) { fputs(pstate->before_records_at_start_of_stream1, output_stream); fputs(before_or_after_records, output_stream); } else { fputs(pstate->between_records_after_start_of_stream, output_stream); } // Use the mlhmmv printer since it naturally handles Miller-to-JSON key deconcatenation: // e.g. 'a:x=1,a:y=2' maps to '{"a":{"x":1,"y":2}}'. mlhmmv_root_t* pmap = mlhmmv_root_alloc(); char* sep = pstate->output_json_flatten_separator; int seplen = strlen(sep); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { // strdup since strmsep is destructive and CSV/PPRINT header fields // are shared across multiple records char* lkey = mlr_strdup_or_die(pe->key); char* lvalue = pe->value; sllmv_t* pmvkeys = sllmv_alloc(); char* walker = lkey; char* piece = NULL; while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { mv_t mvkey = mv_from_string(piece, NO_FREE); sllmv_append_no_free(pmvkeys, &mvkey); } mv_t mvval = mv_from_string(lvalue, NO_FREE); mlhmmv_root_put_terminal(pmap, pmvkeys, &mvval); sllmv_free(pmvkeys); free(lkey); } if (pstate->stack_vertically) mlhmmv_root_print_json_stacked(pmap, pstate->json_quote_int_keys, pstate->json_quote_non_string_values, pstate->line_indent, line_term, output_stream); else mlhmmv_root_print_json_single_lines(pmap, pstate->json_quote_int_keys, pstate->json_quote_non_string_values, line_term, output_stream); mlhmmv_root_free(pmap); lrec_free(prec); // end of baton-pass } else { // end of record stream fputs(pstate->after_records_at_end_of_stream1, output_stream); fputs(before_or_after_records, output_stream); } } miller-5.6.2/c/output/lrec_writer_markdown.c000066400000000000000000000065471354153536500212070ustar00rootroot00000000000000#include #include "containers/mixutil.h" #include "lib/mlrutil.h" #include "output/lrec_writers.h" typedef struct _lrec_writer_markdown_state_t { int onr; char* ors; long long num_header_lines_output; slls_t* plast_header_output; } lrec_writer_markdown_state_t; static void lrec_writer_markdown_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_markdown_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); static void lrec_writer_markdown_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_markdown_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_markdown_alloc(char* ors) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_markdown_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_markdown_state_t)); pstate->onr = 0; pstate->ors = ors; pstate->num_header_lines_output = 0LL; pstate->plast_header_output = NULL; plrec_writer->pvstate = (void*)pstate; plrec_writer->pprocess_func = streq(ors, "auto") ? lrec_writer_markdown_process_auto_ors : lrec_writer_markdown_process_nonauto_ors; plrec_writer->pfree_func = lrec_writer_markdown_free; return plrec_writer; } static void lrec_writer_markdown_free(lrec_writer_t* pwriter, context_t* pctx) { lrec_writer_markdown_state_t* pstate = pwriter->pvstate; slls_free(pstate->plast_header_output); free(pstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_markdown_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_markdown_process(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_markdown_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_markdown_state_t* pstate = pvstate; lrec_writer_markdown_process(pvstate, output_stream, prec, pstate->ors); } static void lrec_writer_markdown_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { if (prec == NULL) return; lrec_writer_markdown_state_t* pstate = pvstate; if (pstate->plast_header_output != NULL) { if (!lrec_keys_equal_list(prec, pstate->plast_header_output)) { slls_free(pstate->plast_header_output); pstate->plast_header_output = NULL; if (pstate->num_header_lines_output > 0LL) fputs(ors, output_stream); } } if (pstate->plast_header_output == NULL) { fputc('|', output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { fputc(' ', output_stream); fputs(pe->key, output_stream); fputs(" |", output_stream); } fputs(ors, output_stream); fputc('|', output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { fputs(" --- |", output_stream); } fputs(ors, output_stream); pstate->plast_header_output = mlr_copy_keys_from_record(prec); pstate->num_header_lines_output++; } fputc('|', output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { fputc(' ', output_stream); fputs(pe->value, output_stream); fputs(" |", output_stream); } fputs(ors, output_stream); pstate->onr++; lrec_free(prec); // end of baton-pass } miller-5.6.2/c/output/lrec_writer_nidx.c000066400000000000000000000042661354153536500203230ustar00rootroot00000000000000#include #include "lib/mlrutil.h" #include "output/lrec_writers.h" typedef struct _lrec_writer_nidx_state_t { char* ors; char* ofs; } lrec_writer_nidx_state_t; static void lrec_writer_nidx_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_nidx_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); static void lrec_writer_nidx_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_nidx_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_nidx_alloc(char* ors, char* ofs) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_nidx_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_nidx_state_t)); pstate->ors = ors; pstate->ofs = ofs; plrec_writer->pvstate = (void*)pstate; plrec_writer->pprocess_func = streq(ors, "auto") ? lrec_writer_nidx_process_auto_ors : lrec_writer_nidx_process_nonauto_ors; plrec_writer->pfree_func = lrec_writer_nidx_free; return plrec_writer; } static void lrec_writer_nidx_free(lrec_writer_t* pwriter, context_t* pctx) { free(pwriter->pvstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_nidx_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_nidx_process(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_nidx_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_nidx_state_t* pstate = pvstate; lrec_writer_nidx_process(pvstate, output_stream, prec, pstate->ors); } static void lrec_writer_nidx_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { if (prec == NULL) return; lrec_writer_nidx_state_t* pstate = pvstate; char* ofs = pstate->ofs; int nf = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { if (nf > 0) fputs(ofs, output_stream); fputs(pe->value, output_stream); nf++; } fputs(ors, output_stream); lrec_free(prec); // end of baton-pass } miller-5.6.2/c/output/lrec_writer_pprint.c000066400000000000000000000237161354153536500206760ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "containers/sllv.h" #include "containers/slls.h" #include "containers/mixutil.h" #include "output/lrec_writers.h" typedef struct _lrec_writer_pprint_state_t { sllv_t* precords; slls_t* pprev_keys; int right_align; long long num_blocks_written; char* ors; char ofs; int barred; } lrec_writer_pprint_state_t; static void lrec_writer_pprint_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_pprint_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); static void lrec_writer_pprint_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_pprint_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void print_and_free_record_list(sllv_t* precords, FILE* output_stream, char* ors, char ofs, int right_align); static void print_and_free_record_list_barred(sllv_t* precords, FILE* output_stream, char* ors, char ofs, int right_align); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_pprint_alloc(char* ors, char ofs, int right_align, int barred) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_pprint_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_pprint_state_t)); pstate->precords = sllv_alloc(); pstate->pprev_keys = NULL; pstate->ors = ors; pstate->ofs = ofs; pstate->right_align = right_align; pstate->barred = barred; pstate->num_blocks_written = 0LL; plrec_writer->pvstate = pstate; plrec_writer->pprocess_func = streq(ors, "auto") ? lrec_writer_pprint_process_auto_ors : lrec_writer_pprint_process_nonauto_ors; plrec_writer->pfree_func = lrec_writer_pprint_free; return plrec_writer; } static void lrec_writer_pprint_free(lrec_writer_t* pwriter, context_t* pctx) { lrec_writer_pprint_state_t* pstate = pwriter->pvstate; if (pstate->precords != NULL) { sllv_free(pstate->precords); pstate->precords = NULL; } if (pstate->pprev_keys != NULL) { slls_free(pstate->pprev_keys); pstate->pprev_keys = NULL; } free(pstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_pprint_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_pprint_process(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_pprint_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_pprint_state_t* pstate = pvstate; lrec_writer_pprint_process(pvstate, output_stream, prec, pstate->ors); } static void lrec_writer_pprint_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { lrec_writer_pprint_state_t* pstate = pvstate; int drain = FALSE; if (prec == NULL) { drain = TRUE; } else { if (pstate->pprev_keys != NULL && !lrec_keys_equal_list(prec, pstate->pprev_keys)) { drain = TRUE; } } if (drain) { if (pstate->num_blocks_written > 0LL) // separate blocks with empty line fputs(ors, output_stream); if (pstate->barred) { print_and_free_record_list_barred(pstate->precords, output_stream, ors, pstate->ofs, pstate->right_align); } else { print_and_free_record_list(pstate->precords, output_stream, ors, pstate->ofs, pstate->right_align); } if (pstate->pprev_keys != NULL) { slls_free(pstate->pprev_keys); pstate->pprev_keys = NULL; } pstate->precords = sllv_alloc(); pstate->num_blocks_written++; } if (prec != NULL) { sllv_append(pstate->precords, prec); if (pstate->pprev_keys == NULL) pstate->pprev_keys = mlr_copy_keys_from_record(prec); } } // ---------------------------------------------------------------- static void print_and_free_record_list(sllv_t* precords, FILE* output_stream, char* ors, char ofs, int right_align) { if (precords->length == 0) { sllv_free(precords); return; } lrec_t* prec1 = precords->phead->pvvalue; int* max_widths = mlr_malloc_or_die(sizeof(int) * prec1->field_count); int j = 0; for (lrece_t* pe = prec1->phead; pe != NULL; pe = pe->pnext, j++) { max_widths[j] = strlen_for_utf8_display(pe->key); } for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext) { lrec_t* prec = pnode->pvvalue; j = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { int width = strlen_for_utf8_display(pe->value); if (width > max_widths[j]) max_widths[j] = width; } } int onr = 0; for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext, onr++) { lrec_t* prec = pnode->pvvalue; if (onr == 0) { j = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc(ofs, output_stream); } if (!right_align) { if (pe->pnext == NULL) { fprintf(output_stream, "%s", pe->key); } else { // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 fprintf(output_stream, "%s", pe->key); int d = max_widths[j] - strlen_for_utf8_display(pe->key); for (int i = 0; i < d; i++) fputc(ofs, output_stream); } } else { int d = max_widths[j] - strlen_for_utf8_display(pe->key); for (int i = 0; i < d; i++) fputc(ofs, output_stream); fprintf(output_stream, "%s", pe->key); } } fputs(ors, output_stream); } j = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc(ofs, output_stream); } char* value = pe->value; if (*value == 0) // empty string value = "-"; if (!right_align) { if (pe->pnext == NULL) { fprintf(output_stream, "%s", value); } else { fprintf(output_stream, "%s", value); int d = max_widths[j] - strlen_for_utf8_display(value); for (int i = 0; i < d; i++) fputc(ofs, output_stream); } } else { int d = max_widths[j] - strlen_for_utf8_display(value); for (int i = 0; i < d; i++) fputc(ofs, output_stream); fprintf(output_stream, "%s", value); } } fputs(ors, output_stream); lrec_free(prec); // end of baton-pass } free(max_widths); sllv_free(precords); } // ---------------------------------------------------------------- static void print_and_free_record_list_barred(sllv_t* precords, FILE* output_stream, char* ors, char ofs, int right_align) { if (precords->length == 0) { sllv_free(precords); return; } lrec_t* prec1 = precords->phead->pvvalue; int* max_widths = mlr_malloc_or_die(sizeof(int) * prec1->field_count); int j = 0; for (lrece_t* pe = prec1->phead; pe != NULL; pe = pe->pnext, j++) { max_widths[j] = strlen_for_utf8_display(pe->key); } for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext) { lrec_t* prec = pnode->pvvalue; j = 0; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { int width = strlen_for_utf8_display(pe->value); if (width > max_widths[j]) max_widths[j] = width; } } int onr = 0; for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext, onr++) { lrec_t* prec = pnode->pvvalue; if (onr == 0) { j = 0; fputc('+', output_stream); fputc('-', output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc('-', output_stream); } int d = max_widths[j]; for (int i = 0; i < d; i++) fputc('-', output_stream); fputc('-', output_stream); fputc('+', output_stream); } fputs(ors, output_stream); j = 0; fputc('|', output_stream); fputc(ofs, output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc(ofs, output_stream); } if (!right_align) { // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 fprintf(output_stream, "%s", pe->key); int d = max_widths[j] - strlen_for_utf8_display(pe->key); for (int i = 0; i < d; i++) fputc(ofs, output_stream); fputc(ofs, output_stream); fputc('|', output_stream); } else { int d = max_widths[j] - strlen_for_utf8_display(pe->key); for (int i = 0; i < d; i++) fputc(ofs, output_stream); fprintf(output_stream, "%s", pe->key); fputc(ofs, output_stream); fputc('|', output_stream); } } fputs(ors, output_stream); j = 0; fputc('+', output_stream); fputc('-', output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc('-', output_stream); } int d = max_widths[j]; for (int i = 0; i < d; i++) fputc('-', output_stream); fputc('-', output_stream); fputc('+', output_stream); } fputs(ors, output_stream); } j = 0; fputc('|', output_stream); fputc(ofs, output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc(ofs, output_stream); } char* value = pe->value; if (*value == 0) // empty string value = "-"; if (!right_align) { fprintf(output_stream, "%s", value); int d = max_widths[j] - strlen_for_utf8_display(value); for (int i = 0; i < d; i++) fputc(ofs, output_stream); fputc(ofs, output_stream); fputc('|', output_stream); } else { int d = max_widths[j] - strlen_for_utf8_display(value); for (int i = 0; i < d; i++) fputc(ofs, output_stream); fprintf(output_stream, "%s", value); fputc(ofs, output_stream); fputc('|', output_stream); } } fputs(ors, output_stream); if (pnode->pnext == NULL) { j = 0; fputc('+', output_stream); fputc('-', output_stream); for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { if (j > 0) { fputc('-', output_stream); } int d = max_widths[j]; for (int i = 0; i < d; i++) fputc('-', output_stream); fputc('-', output_stream); fputc('+', output_stream); } fputs(ors, output_stream); } lrec_free(prec); // end of baton-pass } free(max_widths); sllv_free(precords); } miller-5.6.2/c/output/lrec_writer_xtab.c000066400000000000000000000124771354153536500203220ustar00rootroot00000000000000#include #include #include "lib/mlrutil.h" #include "output/lrec_writers.h" // ---------------------------------------------------------------- // Note: If OPS is single-character then we can do alignment of the form // // ab 123 // def 4567 // // On the other hand, if it's multi-character, we won't be able to align // neatly in all cases. Yet we do allow multi-character OPS, just without // repetition: if someone wants to use OPS ": " and format data as // // ab: 123 // def: 4567 // // then they can do that. // ---------------------------------------------------------------- typedef struct _lrec_writer_xtab_state_t { char* ofs; char* ops; int opslen; long long record_count; int right_justify_value; } lrec_writer_xtab_state_t; static void lrec_writer_xtab_free(lrec_writer_t* pwriter, context_t* pctx); static void lrec_writer_xtab_process_aligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs); static void lrec_writer_xtab_process_aligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_xtab_process_aligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_xtab_process_unaligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs); static void lrec_writer_xtab_process_unaligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_xtab_process_unaligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_xtab_alloc(char* ofs, char* ops, int right_justify_value) { lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); lrec_writer_xtab_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_xtab_state_t)); pstate->ofs = ofs; pstate->ops = ops; pstate->opslen = strlen(ops); pstate->record_count = 0LL; pstate->right_justify_value = right_justify_value; plrec_writer->pvstate = pstate; if (pstate->opslen == 1) { plrec_writer->pprocess_func = streq(ofs, "auto") ? lrec_writer_xtab_process_aligned_auto_ofs : lrec_writer_xtab_process_aligned_nonauto_ofs; } else { plrec_writer->pprocess_func = streq(ofs, "auto") ? lrec_writer_xtab_process_unaligned_auto_ofs : lrec_writer_xtab_process_unaligned_nonauto_ofs; } plrec_writer->pfree_func = lrec_writer_xtab_free; return plrec_writer; } static void lrec_writer_xtab_free(lrec_writer_t* pwriter, context_t* pctx) { free(pwriter->pvstate); free(pwriter); } // ---------------------------------------------------------------- static void lrec_writer_xtab_process_aligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_xtab_process_aligned(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_xtab_process_aligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_xtab_state_t* pstate = pvstate; lrec_writer_xtab_process_aligned(pvstate, output_stream, prec, pstate->ofs); } static void lrec_writer_xtab_process_aligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs) { if (prec == NULL) return; lrec_writer_xtab_state_t* pstate = pvstate; if (pstate->record_count > 0LL) fputs(ofs, output_stream); pstate->record_count++; int max_key_width = 1; int max_value_width = 1; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { int key_width = strlen_for_utf8_display(pe->key); int value_width = strlen_for_utf8_display(pe->value); if (key_width > max_key_width) max_key_width = key_width; if (value_width > max_value_width) max_value_width = value_width; } for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 fprintf(output_stream, "%s", pe->key); int d = max_key_width - strlen_for_utf8_display(pe->key); for (int i = 0; i < d; i++) fputs(pstate->ops, output_stream); if (pstate->right_justify_value) { int d = max_value_width - strlen_for_utf8_display(pe->value); for (int i = 0; i < d; i++) fputs(pstate->ops, output_stream); } fprintf(output_stream, "%s%s%s", pstate->ops, pe->value, ofs); } lrec_free(prec); // end of baton-pass } // ---------------------------------------------------------------- static void lrec_writer_xtab_process_unaligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_xtab_process_unaligned(pvstate, output_stream, prec, pctx->auto_line_term); } static void lrec_writer_xtab_process_unaligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { lrec_writer_xtab_state_t* pstate = pvstate; lrec_writer_xtab_process_unaligned(pvstate, output_stream, prec, pstate->ofs); } static void lrec_writer_xtab_process_unaligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs) { if (prec == NULL) return; lrec_writer_xtab_state_t* pstate = pvstate; if (pstate->record_count > 0LL) fputs(ofs, output_stream); pstate->record_count++; for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 fprintf(output_stream, "%s%s%s%s", pe->key, pstate->ops, pe->value, ofs); } lrec_free(prec); // end of baton-pass } miller-5.6.2/c/output/lrec_writers.c000066400000000000000000000041411354153536500174540ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "output/lrec_writers.h" lrec_writer_t* lrec_writer_alloc(cli_writer_opts_t* popts) { if (streq(popts->ofile_fmt, "dkvp")) { return lrec_writer_dkvp_alloc(popts->ors, popts->ofs, popts->ops); } else if (streq(popts->ofile_fmt, "json")) { return lrec_writer_json_alloc(popts->stack_json_output_vertically, popts->wrap_json_output_in_outer_list, popts->json_quote_int_keys, popts->json_quote_non_string_values, popts->output_json_flatten_separator, popts->ors); } else if (streq(popts->ofile_fmt, "csv")) { return lrec_writer_csv_alloc(popts->ors, popts->ofs, popts->oquoting, popts->headerless_csv_output); } else if (streq(popts->ofile_fmt, "csvlite")) { return lrec_writer_csvlite_alloc(popts->ors, popts->ofs, popts->headerless_csv_output); } else if (streq(popts->ofile_fmt, "markdown")) { return lrec_writer_markdown_alloc(popts->ors); } else if (streq(popts->ofile_fmt, "nidx")) { return lrec_writer_nidx_alloc(popts->ors, popts->ofs); } else if (streq(popts->ofile_fmt, "xtab")) { return lrec_writer_xtab_alloc(popts->ofs, popts->ops, popts->right_justify_xtab_value); } else if (streq(popts->ofile_fmt, "pprint")) { if (strlen(popts->ofs) != 1) { fprintf(stderr, "%s: OFS for PPRINT format must be single-character; got \"%s\".\n", MLR_GLOBALS.bargv0, popts->ofs); return NULL; } else { return lrec_writer_pprint_alloc(popts->ors, popts->ofs[0], popts->right_align_pprint, popts->pprint_barred); } } else { return NULL; } } // ---------------------------------------------------------------- lrec_writer_t* lrec_writer_alloc_or_die(cli_writer_opts_t* popts) { lrec_writer_t* plrec_writer = lrec_writer_alloc(popts); MLR_INTERNAL_CODING_ERROR_IF(plrec_writer == NULL); return plrec_writer; } // ---------------------------------------------------------------- void lrec_writer_print_all(lrec_writer_t* pwriter, FILE* fp, sllv_t* poutrecs, context_t* pctx) { while (poutrecs->phead != NULL) { lrec_t* poutrec = sllv_pop(poutrecs); pwriter->pprocess_func(pwriter->pvstate, fp, poutrec, pctx); } } miller-5.6.2/c/output/lrec_writers.h000066400000000000000000000024561354153536500174700ustar00rootroot00000000000000#ifndef LREC_WRITERS_H #define LREC_WRITERS_H #include #include "cli/quoting.h" #include "cli/mlrcli.h" #include "containers/sllv.h" #include "output/lrec_writer.h" #include "lib/context.h" lrec_writer_t* lrec_writer_alloc(cli_writer_opts_t* popts); lrec_writer_t* lrec_writer_alloc_or_die(cli_writer_opts_t* popts); lrec_writer_t* lrec_writer_csv_alloc(char* ors, char* ofs, quoting_t oquoting, int headerless_csv_output); lrec_writer_t* lrec_writer_csvlite_alloc(char* ors, char* ofs, int headerless_csv_output); lrec_writer_t* lrec_writer_markdown_alloc(char* ors); lrec_writer_t* lrec_writer_dkvp_alloc(char* ors, char* ofs, char* ops); lrec_writer_t* lrec_writer_json_alloc(int stack_vertically, int wrap_json_output_in_outer_list, int json_quote_int_keys, int json_quote_non_string_values, char* output_json_flatten_separator, char* line_term); lrec_writer_t* lrec_writer_nidx_alloc(char* ors, char* ofs); lrec_writer_t* lrec_writer_pprint_alloc(char* ors, char ofs, int right_align, int barred); lrec_writer_t* lrec_writer_xtab_alloc(char* ofs, char* ops, int right_justify_value); // Pops and frees the lrecs in the argument list without sllv-freeing the list structure itself. void lrec_writer_print_all(lrec_writer_t* pwriter, FILE* fp, sllv_t* poutrecs, context_t* pctx); #endif // LREC_WRITERS_H miller-5.6.2/c/output/multi_lrec_writer.c000066400000000000000000000116311354153536500205050ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "cli/mlrcli.h" #include "output/multi_lrec_writer.h" // ---------------------------------------------------------------- multi_lrec_writer_t* multi_lrec_writer_alloc(cli_writer_opts_t* pwriter_opts) { multi_lrec_writer_t* pmlw = mlr_malloc_or_die(sizeof(multi_lrec_writer_t)); pmlw->pnames_to_lrec_writers_and_fps = lhmsv_alloc(); pmlw->pwriter_opts = pwriter_opts; return pmlw; } // ---------------------------------------------------------------- void multi_lrec_writer_free(multi_lrec_writer_t* pmlw, context_t* pctx) { if (pmlw == NULL) return; for (lhmsve_t* pe = pmlw->pnames_to_lrec_writers_and_fps->phead; pe != NULL; pe = pe->pnext) { lrec_writer_and_fp_t* pstate = pe->pvvalue; pstate->plrec_writer->pfree_func(pstate->plrec_writer, pctx); free(pstate->filename_or_command); free(pstate); } lhmsv_free(pmlw->pnames_to_lrec_writers_and_fps); free(pmlw); } // ---------------------------------------------------------------- void multi_lrec_writer_output_srec(multi_lrec_writer_t* pmlw, lrec_t* poutrec, char* filename_or_command, file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx) { lrec_writer_and_fp_t* pstate = lhmsv_get(pmlw->pnames_to_lrec_writers_and_fps, filename_or_command); if (pstate == NULL) { pstate = mlr_malloc_or_die(sizeof(lrec_writer_and_fp_t)); pstate->plrec_writer = lrec_writer_alloc(pmlw->pwriter_opts); MLR_INTERNAL_CODING_ERROR_IF(pstate->plrec_writer == NULL); pstate->filename_or_command = mlr_strdup_or_die(filename_or_command); char* mode_string = get_mode_string(file_output_mode); char* mode_desc = get_mode_desc(file_output_mode); if (file_output_mode == MODE_PIPE) { pstate->is_popen = TRUE; pstate->output_stream = popen(filename_or_command, mode_string); if (pstate->output_stream == NULL) { perror("popen"); fprintf(stderr, "%s: failed popen for %s on \"%s\".\n", MLR_GLOBALS.bargv0, mode_desc, filename_or_command); exit(1); } } else { pstate->is_popen = FALSE; pstate->output_stream = fopen(filename_or_command, mode_string); if (pstate->output_stream == NULL) { perror("fopen"); fprintf(stderr, "%s: failed fopen for %s on \"%s\".\n", MLR_GLOBALS.bargv0, mode_desc, filename_or_command); exit(1); } } lhmsv_put(pmlw->pnames_to_lrec_writers_and_fps, mlr_strdup_or_die(filename_or_command), pstate, FREE_ENTRY_KEY); } pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, poutrec, pctx); if (poutrec != NULL) { if (flush_every_record) fflush(pstate->output_stream); } else { if (pstate->is_popen) { // Sadly, pclose returns an error even on well-formed commands. For example, if the popened // command was "grep nonesuch" and the string "nonesuch" was not encountered, grep returns // non-zero and popen flags it as an error. We cannot differentiate these from genuine // failure cases so the best choice is to simply call pclose and ignore error codes. // If a piped-to command does fail then it should have some output to stderr which the // user can take advantage of. (void)pclose(pstate->output_stream); } else { if (fclose(pstate->output_stream) != 0) { perror("fclose"); fprintf(stderr, "%s: fclose error on \"%s\".\n", MLR_GLOBALS.bargv0, filename_or_command); exit(1); } } pstate->output_stream = NULL; } } void multi_lrec_writer_output_list(multi_lrec_writer_t* pmlw, sllv_t* poutrecs, char* filename_or_command, file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx) { if (poutrecs == NULL) // synonym for empty record-list return; while (poutrecs->phead) { lrec_t* poutrec = sllv_pop(poutrecs); multi_lrec_writer_output_srec(pmlw, poutrec, filename_or_command, file_output_mode, flush_every_record, pctx); } } void multi_lrec_writer_drain(multi_lrec_writer_t* pmlw, context_t* pctx) { for (lhmsve_t* pe = pmlw->pnames_to_lrec_writers_and_fps->phead; pe != NULL; pe = pe->pnext) { lrec_writer_and_fp_t* pstate = pe->pvvalue; pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, NULL, pctx); fflush(pstate->output_stream); if (pstate->is_popen) { // Sadly, pclose returns an error even on well-formed commands. For example, if the popened // command was "grep nonesuch" and the string "nonesuch" was not encountered, grep returns // non-zero and popen flags it as an error. We cannot differentiate these from genuine // failure cases so the best choice is to simply call pclose and ignore error codes. // If a piped-to command does fail then it should have some output to stderr which the // user can take advantage of. (void)pclose(pstate->output_stream); } else { if (fclose(pstate->output_stream) != 0) { perror("fclose"); fprintf(stderr, "%s: fclose error on \"%s\".\n", MLR_GLOBALS.bargv0, pstate->filename_or_command); exit(1); } } } } miller-5.6.2/c/output/multi_lrec_writer.h000066400000000000000000000025271354153536500205160ustar00rootroot00000000000000#ifndef MULTI_LREC_WRITER_H #define MULTI_LREC_WRITER_H #include #include "cli/mlrcli.h" #include "containers/lhmsv.h" #include "containers/sllv.h" #include "output/lrec_writers.h" #include "output/file_output_mode.h" #include "lib/context.h" // ---------------------------------------------------------------- // This is the value struct for the hashmap: typedef struct _lrec_writer_and_fp_t { lrec_writer_t* plrec_writer; char* filename_or_command; FILE* output_stream; int is_popen; } lrec_writer_and_fp_t; typedef struct _multi_lrec_writer_t { lhmsv_t* pnames_to_lrec_writers_and_fps; cli_writer_opts_t* pwriter_opts; } multi_lrec_writer_t; // ---------------------------------------------------------------- multi_lrec_writer_t* multi_lrec_writer_alloc(cli_writer_opts_t* pwriter_opts); void multi_lrec_writer_free(multi_lrec_writer_t* pmlw, context_t* pctx); void multi_lrec_writer_output_srec(multi_lrec_writer_t* pmlw, lrec_t* poutrec, char* filename_or_command, file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx); void multi_lrec_writer_output_list(multi_lrec_writer_t* pmlw, sllv_t* poutrecs, char* filename_or_command, file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx); void multi_lrec_writer_drain(multi_lrec_writer_t* pmlw, context_t* pctx); #endif // MULTI_LREC_WRITER_H miller-5.6.2/c/output/multi_out.c000066400000000000000000000041621354153536500167740ustar00rootroot00000000000000#include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "multi_out.h" // ---------------------------------------------------------------- multi_out_t* multi_out_alloc() { multi_out_t* pmo = mlr_malloc_or_die(sizeof(multi_out_t)); pmo->pnames_to_fps = lhmsv_alloc(); return pmo; } // ---------------------------------------------------------------- void multi_out_close(multi_out_t* pmo) { for (lhmsve_t* pe = pmo->pnames_to_fps->phead; pe != NULL; pe = pe->pnext) { fp_and_flag_t* pstate = pe->pvvalue; if (pstate->is_popen) { pclose(pstate->output_stream); } else { fclose(pstate->output_stream); } } } // ---------------------------------------------------------------- void multi_out_free(multi_out_t* pmo) { if (pmo == NULL) return; for (lhmsve_t* pe = pmo->pnames_to_fps->phead; pe != NULL; pe = pe->pnext) { fp_and_flag_t* pstate = pe->pvvalue; free(pstate); } lhmsv_free(pmo->pnames_to_fps); free(pmo); } // ---------------------------------------------------------------- FILE* multi_out_get(multi_out_t* pmo, char* filename_or_command, file_output_mode_t file_output_mode) { fp_and_flag_t* pstate = lhmsv_get(pmo->pnames_to_fps, filename_or_command); if (pstate == NULL) { pstate = mlr_malloc_or_die(sizeof(fp_and_flag_t)); char* mode_string = get_mode_string(file_output_mode); char* mode_desc = get_mode_desc(file_output_mode); if (file_output_mode == MODE_PIPE) { pstate->is_popen = TRUE; pstate->output_stream = popen(filename_or_command, mode_string); if (pstate->output_stream == NULL) { perror("popen"); fprintf(stderr, "%s: failed popen for %s of \"%s\".\n", MLR_GLOBALS.bargv0, mode_desc, filename_or_command); exit(1); } } else { pstate->is_popen = FALSE; pstate->output_stream = fopen(filename_or_command, mode_string); if (pstate->output_stream == NULL) { perror("fopen"); fprintf(stderr, "%s: failed fopen for %s of \"%s\".\n", MLR_GLOBALS.bargv0, mode_desc, filename_or_command); exit(1); } } lhmsv_put(pmo->pnames_to_fps, mlr_strdup_or_die(filename_or_command), pstate, FREE_ENTRY_KEY); } return pstate->output_stream; } miller-5.6.2/c/output/multi_out.h000066400000000000000000000013051354153536500167750ustar00rootroot00000000000000#ifndef MULTI_OUT_H #define MULTI_OUT_H #include #include "containers/lhmsv.h" #include "output/file_output_mode.h" // ---------------------------------------------------------------- // This is the value struct for the hashmap: typedef struct _fp_and_flag_t { FILE* output_stream; int is_popen; } fp_and_flag_t; typedef struct _multi_out_t { lhmsv_t* pnames_to_fps; } multi_out_t; // ---------------------------------------------------------------- multi_out_t* multi_out_alloc(); void multi_out_close(multi_out_t* pmo); void multi_out_free(multi_out_t* pmo); FILE* multi_out_get(multi_out_t* pmo, char* filename_or_command, file_output_mode_t file_output_mode); #endif // MULTI_OUT_H miller-5.6.2/c/parsing/000077500000000000000000000000001354153536500147075ustar00rootroot00000000000000miller-5.6.2/c/parsing/Makefile.am000066400000000000000000000041661354153536500167520ustar00rootroot00000000000000AM_CPPFLAGS= -I${srcdir} AM_CFLAGS= -std=gnu99 noinst_PROGRAMS= lemon lemon_SOURCES= lemon_action.c \ lemon_action.h \ lemon_assert.c \ lemon_assert.h \ lemon_config_list.c \ lemon_config_list.h \ lemon_dims.h \ lemon_error.c \ lemon_error.h \ lemon_fsm.c \ lemon_fsm.h \ lemon_main.c \ lemon_memory.c \ lemon_memory.h \ lemon_msort.c \ lemon_msort.h \ lemon_option.c \ lemon_option.h \ lemon_parse.c \ lemon_parse.h \ lemon_plink.c \ lemon_plink.h \ lemon_report.c \ lemon_report.h \ lemon_set.c \ lemon_set.h \ lemon_state_table.c \ lemon_state_table.h \ lemon_string.c \ lemon_string.h \ lemon_structs.h \ lemon_symbol.c \ lemon_symbol.h noinst_LTLIBRARIES= libdsl.la # if we don't want to distribute the generated sources, move them to a nodist_libfoo_la_SOURCES variable libdsl_la_SOURCES= mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_wrapper.c mlr_dsl_wrapper.h CLEANFILES= mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out EXTRA_DIST= lempar.c mlr_dsl_lexer.l mlr_dsl_parse.y mlr_dsl_wrapper.c: mlr_dsl_lexer.h mlr_dsl_parse.h: mlr_dsl_parse.c mlr_dsl_parse.c: mlr_dsl_parse.y lempar.c lemon ./lemon -s mlr_dsl_parse.y # lemon does not re-generate the file if it exists and is the same # this causes problems with the dependency above touch mlr_dsl_parse.h mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp sed \ -e 's/ParseTrace/mlr_dsl_ParseTrace/g' \ -e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \ -e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \ -e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \ -e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \ -e 's/yy_destructor/mlr_dsl_yy_destructor/g' \ mlr_dsl_parse.c.tmp > mlr_dsl_parse.c rm -f mlr_dsl_parse.c.tmp mlr_dsl_lexer.h: mlr_dsl_lexer.c mlr_dsl_lexer.c: mlr_dsl_lexer.l mlr_dsl_parse.h flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h ${srcdir}/mlr_dsl_lexer.l distclean-local: if [ "${srcdir}" != "." ]; then \ rm -f lempar.c mlr_dsl_parse.y; \ fi miller-5.6.2/c/parsing/Makefile.in000066400000000000000000000532601354153536500167620ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = lemon$(EXEEXT) subdir = c/parsing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = lempar.c mlr_dsl_parse.y LTLIBRARIES = $(noinst_LTLIBRARIES) libdsl_la_LIBADD = am_libdsl_la_OBJECTS = mlr_dsl_lexer.lo mlr_dsl_parse.lo \ mlr_dsl_wrapper.lo libdsl_la_OBJECTS = $(am_libdsl_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = PROGRAMS = $(noinst_PROGRAMS) am_lemon_OBJECTS = lemon_action.$(OBJEXT) lemon_assert.$(OBJEXT) \ lemon_config_list.$(OBJEXT) lemon_error.$(OBJEXT) \ lemon_fsm.$(OBJEXT) lemon_main.$(OBJEXT) \ lemon_memory.$(OBJEXT) lemon_msort.$(OBJEXT) \ lemon_option.$(OBJEXT) lemon_parse.$(OBJEXT) \ lemon_plink.$(OBJEXT) lemon_report.$(OBJEXT) \ lemon_set.$(OBJEXT) lemon_state_table.$(OBJEXT) \ lemon_string.$(OBJEXT) lemon_symbol.$(OBJEXT) lemon_OBJECTS = $(am_lemon_OBJECTS) lemon_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libdsl_la_SOURCES) $(lemon_SOURCES) DIST_SOURCES = $(libdsl_la_SOURCES) $(lemon_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/lempar.c \ $(srcdir)/mlr_dsl_parse.y $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I${srcdir} AM_CFLAGS = -std=gnu99 lemon_SOURCES = lemon_action.c \ lemon_action.h \ lemon_assert.c \ lemon_assert.h \ lemon_config_list.c \ lemon_config_list.h \ lemon_dims.h \ lemon_error.c \ lemon_error.h \ lemon_fsm.c \ lemon_fsm.h \ lemon_main.c \ lemon_memory.c \ lemon_memory.h \ lemon_msort.c \ lemon_msort.h \ lemon_option.c \ lemon_option.h \ lemon_parse.c \ lemon_parse.h \ lemon_plink.c \ lemon_plink.h \ lemon_report.c \ lemon_report.h \ lemon_set.c \ lemon_set.h \ lemon_state_table.c \ lemon_state_table.h \ lemon_string.c \ lemon_string.h \ lemon_structs.h \ lemon_symbol.c \ lemon_symbol.h noinst_LTLIBRARIES = libdsl.la # if we don't want to distribute the generated sources, move them to a nodist_libfoo_la_SOURCES variable libdsl_la_SOURCES = mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_wrapper.c mlr_dsl_wrapper.h CLEANFILES = mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out EXTRA_DIST = lempar.c mlr_dsl_lexer.l mlr_dsl_parse.y all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/parsing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/parsing/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdsl.la: $(libdsl_la_OBJECTS) $(libdsl_la_DEPENDENCIES) $(EXTRA_libdsl_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libdsl_la_OBJECTS) $(libdsl_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list lemon$(EXEEXT): $(lemon_OBJECTS) $(lemon_DEPENDENCIES) $(EXTRA_lemon_DEPENDENCIES) @rm -f lemon$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lemon_OBJECTS) $(lemon_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_action.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_assert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_config_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_error.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_fsm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_msort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_option.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_plink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_report.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_set.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_state_table.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_string.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_lexer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_parse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_wrapper.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-local \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile mlr_dsl_wrapper.c: mlr_dsl_lexer.h mlr_dsl_parse.h: mlr_dsl_parse.c mlr_dsl_parse.c: mlr_dsl_parse.y lempar.c lemon ./lemon -s mlr_dsl_parse.y # lemon does not re-generate the file if it exists and is the same # this causes problems with the dependency above touch mlr_dsl_parse.h mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp sed \ -e 's/ParseTrace/mlr_dsl_ParseTrace/g' \ -e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \ -e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \ -e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \ -e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \ -e 's/yy_destructor/mlr_dsl_yy_destructor/g' \ mlr_dsl_parse.c.tmp > mlr_dsl_parse.c rm -f mlr_dsl_parse.c.tmp mlr_dsl_lexer.h: mlr_dsl_lexer.c mlr_dsl_lexer.c: mlr_dsl_lexer.l mlr_dsl_parse.h flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h ${srcdir}/mlr_dsl_lexer.l distclean-local: if [ "${srcdir}" != "." ]; then \ rm -f lempar.c mlr_dsl_parse.y; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/parsing/Makefile.no-autoconfig000066400000000000000000000173021354153536500211210ustar00rootroot00000000000000# ================================================================ # NOTE: This makefile is not intended to be used in a packaging system -- # rather, Miller uses autconfig for that. This makefile is intended for users # who prefer (for whatever reason) to bypass autoconfig. Please also see # http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig # ================================================================ CC=gcc # We cannot use the same flags as the parent-directory makefile since # lex emits a couple of unused static functions which don't pass gcc -Wall -Werror. #DSLCFLAGS=-I.. -O3 -Wextra -Wpedantic DSLCFLAGS=-I.. -O3 -g #CC=clang #DSLCFLAGS=-I.. -Wall -O2 -fsanitize=address # ---------------------------------------------------------------- top: mlr_dsl_lexer.o mlr_dsl_parse.o mlr_dsl_wrapper.o # ---------------------------------------------------------------- mlr_dsl_wrapper.o: mlr_dsl_wrapper.c mlr_dsl_wrapper.h mlr_dsl_parse.h \ ../lib/mlrutil.h ../dsl/mlr_dsl_ast.h ../containers/sllv.h $(CC) -Wall $(DSLCFLAGS) -c -std=gnu99 mlr_dsl_wrapper.c mlr_dsl_parse.o: mlr_dsl_parse.c mlr_dsl_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 mlr_dsl_parse.c mlr_dsl_parse.c mlr_dsl_parse.h: mlr_dsl_parse.y lemon ../dsl/mlr_dsl_ast.h ../containers/sllv.h ./lemon -s mlr_dsl_parse.y mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp sed \ -e 's/ParseTrace/mlr_dsl_ParseTrace/g' \ -e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \ -e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \ -e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \ -e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \ -e 's/yy_destructor/mlr_dsl_yy_destructor/g' \ mlr_dsl_parse.c.tmp > mlr_dsl_parse.c rm -f mlr_dsl_parse.c.tmp # muldef: # ParseTrace # ParseTokenName # lemon_parser_alloc # lemon_parser_free # lemon_parser_parse_token # yy_destructor mlr_dsl_lexer.o: mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 mlr_dsl_lexer.c mlr_dsl_lexer.c mlr_dsl_lexer.h: mlr_dsl_lexer.l ../dsl/mlr_dsl_ast.h flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h mlr_dsl_lexer.l mlr_dsl: mlr_dsl_wrapper_main.c mlr_dsl_wrapper.c mlr_dsl_wrapper.h mlr_dsl_parse.h mlr_dsl_lexer.o mlr_dsl_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./../dsl/mlr_dsl_ast.h \ ../lib/mlrutil.c ../containers/sllv.c ./../dsl/mlr_dsl_ast.c $(CC) -Wall $(DSLCFLAGS) -std=gnu99 mlr_dsl_wrapper_main.c mlr_dsl_wrapper.c mlr_dsl_lexer.o mlr_dsl_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./../dsl/mlr_dsl_ast.c -o mlr_dsl # ---------------------------------------------------------------- ex0: ex0_wrapper.c ex0_wrapper.h ex0_parse.h ex0_lexer.o ex0_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./ex_ast.h \ ../lib/mlrutil.c ../containers/sllv.c ./ex_ast.h ./ex_ast.c $(CC) -Wall $(DSLCFLAGS) -std=gnu99 ex0_wrapper.c ex0_lexer.o ex0_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./ex_ast.c -o ex0 ex0_parse.o: ex0_parse.c ex0_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 ex0_parse.c ex0_parse.c ex0_parse.h: ex0_parse.y lemon ./ex_ast.h ../containers/sllv.h ./lemon -s ex0_parse.y mv ex0_parse.c ex0_parse.c.tmp sed \ -e 's/ParseTrace/ex0_ParseTrace/g' \ -e 's/ParseTokenName/ex0_ParseTokenName/g' \ -e 's/lemon_parser_alloc/ex0_lemon_parser_alloc/g' \ -e 's/lemon_parser_free/ex0_lemon_parser_free/g' \ -e 's/lemon_parser_parse_token/ex0_lemon_parser_parse_token/g' \ -e 's/yy_destructor/ex0_yy_destructor/g' \ ex0_parse.c.tmp > ex0_parse.c rm -f ex0_parse.c.tmp ex0_lexer.o: ex0_lexer.c ex0_lexer.h ex0_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 ex0_lexer.c ex0_lexer.c ex0_lexer.h: ex0_lexer.l ./ex_ast.h flex --prefix=ex0_lexer_ --outfile=ex0_lexer.c --header-file=ex0_lexer.h ex0_lexer.l # ---------------------------------------------------------------- ex1: ex1_wrapper.c ex1_wrapper.h ex1_parse.h ex1_lexer.o ex1_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./ex_ast.h \ ../lib/mlrutil.c ../containers/sllv.c ./ex_ast.h ./ex_ast.c $(CC) -Wall $(DSLCFLAGS) -std=gnu99 ex1_wrapper.c ex1_lexer.o ex1_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./ex_ast.c -o ex1 ex1_parse.o: ex1_parse.c ex1_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 ex1_parse.c ex1_parse.c ex1_parse.h: ex1_parse.y lemon ./ex_ast.h ../containers/sllv.h ./lemon -s ex1_parse.y mv ex1_parse.c ex1_parse.c.tmp sed \ -e 's/ParseTrace/ex1_ParseTrace/g' \ -e 's/ParseTokenName/ex1_ParseTokenName/g' \ -e 's/lemon_parser_alloc/ex1_lemon_parser_alloc/g' \ -e 's/lemon_parser_free/ex1_lemon_parser_free/g' \ -e 's/lemon_parser_parse_token/ex1_lemon_parser_parse_token/g' \ -e 's/yy_destructor/ex1_yy_destructor/g' \ ex1_parse.c.tmp > ex1_parse.c rm -f ex1_parse.c.tmp ex1_lexer.o: ex1_lexer.c ex1_lexer.h ex1_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 ex1_lexer.c ex1_lexer.c ex1_lexer.h: ex1_lexer.l ./ex_ast.h flex --prefix=ex1_lexer_ --outfile=ex1_lexer.c --header-file=ex1_lexer.h ex1_lexer.l # ---------------------------------------------------------------- ex2: ex2_wrapper.c ex2_wrapper.h ex2_parse.h ex2_lexer.o ex2_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./ex_ast.h \ ../lib/mlrutil.c ../containers/sllv.c ./ex_ast.h ./ex_ast.c $(CC) -Wall $(DSLCFLAGS) -std=gnu99 ex2_wrapper.c ex2_lexer.o ex2_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./ex_ast.c -o ex2 ex2_parse.o: ex2_parse.c ex2_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 ex2_parse.c ex2_parse.c ex2_parse.h: ex2_parse.y lemon ./ex_ast.h ../containers/sllv.h ./lemon -s -c ex2_parse.y mv ex2_parse.c ex2_parse.c.tmp sed \ -e 's/ParseTrace/ex2_ParseTrace/g' \ -e 's/ParseTokenName/ex2_ParseTokenName/g' \ -e 's/lemon_parser_alloc/ex2_lemon_parser_alloc/g' \ -e 's/lemon_parser_free/ex2_lemon_parser_free/g' \ -e 's/lemon_parser_parse_token/ex2_lemon_parser_parse_token/g' \ -e 's/yy_destructor/ex2_yy_destructor/g' \ ex2_parse.c.tmp > ex2_parse.c rm -f ex2_parse.c.tmp ex2_lexer.o: ex2_lexer.c ex2_lexer.h ex2_parse.h $(CC) $(DSLCFLAGS) -c -std=gnu99 ex2_lexer.c ex2_lexer.c ex2_lexer.h: ex2_lexer.l ./ex_ast.h flex --prefix=ex2_lexer_ --outfile=ex2_lexer.c --header-file=ex2_lexer.h ex2_lexer.l # ---------------------------------------------------------------- lemon: \ lemon_assert.h \ lemon_assert.c \ lemon_error.h \ lemon_error.c \ lemon_string.h \ lemon_string.c \ lemon_msort.h \ lemon_msort.c \ lemon_set.h \ lemon_set.c \ lemon_memory.h \ lemon_memory.c \ lemon_option.h \ lemon_option.c \ lemon_structs.h \ lemon_action.h \ lemon_action.c \ lemon_symbol.h \ lemon_symbol.c \ lemon_config_list.h \ lemon_config_list.c \ lemon_state_table.h \ lemon_state_table.c \ lemon_plink.h \ lemon_plink.c \ lemon_parse.h \ lemon_parse.c \ lemon_fsm.h \ lemon_fsm.c \ lemon_report.h \ lemon_report.c \ lemon_main.c $(CC) -o lemon lemon_assert.c lemon_error.c lemon_string.c \ lemon_msort.c lemon_set.c lemon_memory.c lemon_option.c lemon_action.c \ lemon_symbol.c lemon_config_list.c lemon_state_table.c lemon_plink.c \ lemon_parse.c lemon_fsm.c lemon_report.c lemon_main.c \ # ---------------------------------------------------------------- clean: rm -f *.o rm -f mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out rm -f mlr_dsl_lexer.c mlr_dsl_lexer.h rm -f ex0_parse.c ex0_parse.h ex0_parse.out rm -f ex0_lexer.c ex0_lexer.h rm -f ex0 rm -f ex1_parse.c ex1_parse.h ex1_parse.out rm -f ex1_lexer.c ex1_lexer.h rm -f ex1 rm -f ex2_parse.c ex2_parse.h ex2_parse.out rm -f ex2_lexer.c ex2_lexer.h rm -f ex2 rm -f lemon .always: @/bin/true miller-5.6.2/c/parsing/README.md000066400000000000000000000006541354153536500161730ustar00rootroot00000000000000# Miller domain-specific languages These exist for Miller's `put` and `filter` functions. The grammars are not at all profound: just parsing 101 as familiar from an introductory compilers course. I use `lex` and `lemon` rather than `lex` and `yacc`: I find Lemon far more transparent. Concrete syntax trees (CSTs) are embodied in the `lex`/`lemon` files. Abstract syntax trees (ASTs) are in the Miller `containers` directory. miller-5.6.2/c/parsing/ex0_lexer.l000066400000000000000000000022231354153536500167560ustar00rootroot00000000000000%{ #include "stdio.h" // for fileno() prototype #include "string.h" // for strdup() prototype #include "ex0_parse.h" #include "./ex_ast.h" // http://flex.sourceforge.net/manual/Extra-Data.html %} %option reentrant %option noyywrap %option extra-type="struct _ex_ast_node_t **" %% [0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { // Leading minus sign is handled via the unary-minus operator, not here. // 123 // 123. 123.4 // .234 // 1e2 // 1e-2 // 1.2e3 1.e3 // 1.2e-3 1.e-3 // .2e3 // .2e-3 1.e-3 *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } "+" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_PLUS; } "-" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MINUS; } "*" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_TIMES; } "/" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DIVIDE; } [ \t\r\n] { } . { return -1; } %% miller-5.6.2/c/parsing/ex0_parse.y000066400000000000000000000052111354153536500167660ustar00rootroot00000000000000// vim: set filetype=none: // (Lemon files have .y extensions like Yacc files but are not Yacc.) %include { #include #include #include #include "../lib/mlrutil.h" #include "./ex_ast.h" #include "../containers/sllv.h" #define DO_WRITE_APPEND // transitional pending lemon-memory issue // ================================================================ // AST: // * parens, commas, semis, line endings, whitespace are all stripped away // * variable names and literal values remain as leaf nodes of the AST // * = + - * / ** {function names} remain as non-leaf nodes of the AST // CST: See ex0_cst.c // // Note: This parser accepts many things that are invalid, e.g. // * begin{end{}} -- begin/end not at top level // * begin{$x=1} -- references to stream records at begin/end // * break/continue outside of for/while/do-while // * $x=x -- boundvars outside of for-loop variable bindings // All of the above are enforced by the CST builder, which takes this parser's output AST as input. // This is done (a) to keep this grammar from being overly complex, and (b) so we can get much more // informative error messages in C than in Lemon ('syntax error'). // // The parser hooks all build up an abstract syntax tree specifically for the CST builder. // For clearer visuals on what the ASTs look like: // * See ex0_cst.c // * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out // * Do "mlr -n put -v 'your expression goes here'" // ================================================================ } %token_type {ex_ast_node_t*} %default_type {ex_ast_node_t*} %extra_argument {ex_ast_t* past} //void token_destructor(ex_ast_node_t t) { // printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); //} //%token_destructor {token_destructor($$);} %parse_accept { } // The caller is expected to provide more context. %syntax_error { fprintf(stderr, "mlr DSL: syntax error.\n"); } // ================================================================ md_body ::= math_expr(B). { past->proot = B; } math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_PLUS(O) MD_TOKEN_NUMBER(B) . { C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); } math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_MINUS(O) MD_TOKEN_NUMBER(B) . { C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); } math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_TIMES(O) MD_TOKEN_NUMBER(B) . { C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); } math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_DIVIDE(O) MD_TOKEN_NUMBER(B) . { C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); } miller-5.6.2/c/parsing/ex0_wrapper.c000066400000000000000000000061131354153536500173100ustar00rootroot00000000000000#include #include #include "ex0_wrapper.h" #include "ex0_lexer.h" #include "ex0_parse.h" #include "../lib/mlrutil.h" #include "./ex_ast.h" #include "../containers/sllv.h" // These prototypes are copied out manually from ex0_parse.c. With some // more work I could have Lemon autogenerate these prototypes into // ex0_parse.h. void *ex0_lemon_parser_alloc(void *(*mallocProc)(size_t)); int ex0_lemon_parser_parse_token( void *pvparser, /* The parser */ int yymajor, /* The major token code number */ ex_ast_node_t* yyminor, /* The value for the token */ ex_ast_t* past); /* Optional %extra_argument parameter */ void ex0_lemon_parser_free( void *pvparser, /* The parser to be deleted */ void (*freeProc)(void*)); /* Function used to reclaim memory */ void ex0_ParseTrace(FILE *TraceFILE, char *zTracePrompt); // ---------------------------------------------------------------- // http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html // http://flex.sourceforge.net/manual/Extra-Data.html // Returns linked list of ex_ast_node_t*. static ex_ast_t* ex0_parse_inner(yyscan_t scanner, void* pvparser, ex_ast_node_t** ppnode, int trace_parse) { int lex_code; int parse_code; ex_ast_t* past = ex_ast_alloc(); if (trace_parse) ex0_ParseTrace(stderr, "[DSLTRACE] "); do { lex_code = ex0_lexer_lex(scanner); ex_ast_node_t* plexed_node = *ppnode; parse_code = ex0_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); if (parse_code == 0) { return NULL; } } while (lex_code > 0); if (-1 == lex_code) { fprintf(stderr, "The scanner encountered an error.\n"); return NULL; } parse_code = ex0_lemon_parser_parse_token(pvparser, 0, NULL, past); if (parse_code == 0) return NULL; return past; } // ---------------------------------------------------------------- // Returns linked list of ex_ast_node_t*. ex_ast_t* ex0_parse(char* string, int trace_parse) { ex_ast_node_t* pnode = NULL; yyscan_t scanner; ex0_lexer_lex_init_extra(&pnode, &scanner); void* pvparser = ex0_lemon_parser_alloc(malloc); YY_BUFFER_STATE buf = NULL; if (string == NULL) { ex0_lexer_set_in(stdin, scanner); } else { YY_BUFFER_STATE buf = ex0_lexer__scan_string(string, scanner); ex0_lexer__switch_to_buffer (buf, scanner); } ex_ast_t* past = ex0_parse_inner(scanner, pvparser, &pnode, trace_parse); if (buf != NULL) ex0_lexer__delete_buffer(buf, scanner); ex0_lexer_lex_destroy(scanner); ex0_lemon_parser_free(pvparser, free); return past; } // ---------------------------------------------------------------- void yytestcase(int ignored) { } // ---------------------------------------------------------------- int main(int argc, char** argv) { int trace_parse = FALSE; int argi = 1; if (argc >= 2 && streq(argv[1], "-t")) { argi++; trace_parse = TRUE; } if ((argc - argi) != 1) { fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); exit(1); } ex_ast_t* past = ex0_parse(argv[argi], trace_parse); if (past == NULL) { printf("syntax error\n"); } else { ex_ast_print(past); } return 0; } miller-5.6.2/c/parsing/ex0_wrapper.h000066400000000000000000000002171354153536500173140ustar00rootroot00000000000000#ifndef EX0_WRAPPER_H #define EX0_WRAPPER_H #include "ex_ast.h" ex_ast_t* ex0_parse(char* string, int trace_parse); #endif // EX0_WRAPPER_H miller-5.6.2/c/parsing/ex1_lexer.l000066400000000000000000000265741354153536500167760ustar00rootroot00000000000000%{ #include "stdio.h" // for fileno() prototype #include "string.h" // for strdup() prototype #include "ex1_parse.h" #include "./ex_ast.h" // http://flex.sourceforge.net/manual/Extra-Data.html %} %option reentrant %option noyywrap %option extra-type="struct _ex_ast_node_t **" %% ";" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_SEMICOLON; } "{" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_LBRACE; } "}" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RBRACE; } "=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); return MD_TOKEN_ASSIGN; } "filter" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FILTER); return MD_TOKEN_FILTER; } "unset" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_UNSET); return MD_TOKEN_UNSET; } "emitf" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITF); return MD_TOKEN_EMITF; } "emitp" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITP); return MD_TOKEN_EMITP; } "emit" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMIT); return MD_TOKEN_EMIT; } "dump" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DUMP); return MD_TOKEN_DUMP; } "edump" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EDUMP); return MD_TOKEN_EDUMP; } "print" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINT); return MD_TOKEN_PRINT; } "printn" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINTN); return MD_TOKEN_PRINTN; } "eprint" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINT); return MD_TOKEN_EPRINT; } "eprintn" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINTN); return MD_TOKEN_EPRINTN; } "begin" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_BEGIN; } "end" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_END; } "all" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ALL); return MD_TOKEN_ALL; } "do" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DO_WHILE); return MD_TOKEN_DO; } "while" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_WHILE); return MD_TOKEN_WHILE; } "for" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_FOR; } "in" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IN); return MD_TOKEN_IN; } "break" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BREAK); return MD_TOKEN_BREAK; } "continue" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTINUE); return MD_TOKEN_CONTINUE; } "if" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); return MD_TOKEN_IF; } "elif" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); return MD_TOKEN_ELIF; } "else" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); return MD_TOKEN_ELSE; } "?" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_QUESTION_MARK; } ":" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_COLON; } "||" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_OR; } "||=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_OR_EQUALS; } "^^" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_XOR; } "^^=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_XOR_EQUALS; } "&&" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_AND; } "&&=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_AND_EQUALS; } "=~" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MATCHES; } "!=~" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DOES_NOT_MATCH; } "==" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_EQ; } "!=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_NE; } ">" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_GT; } ">=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_GE; } "<" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LT; } "<=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LE; } "|" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_OR; } "|=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_OR_EQUALS; } "^" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_XOR; } "^=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_XOR_EQUALS; } "&" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_AND; } "&=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_AND_EQUALS; } "<<" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_LSH; } "<<=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_LSH_EQUALS; } ">>" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_RSH; } ">>=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_RSH_EQUALS; } "+" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_PLUS; } "+=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_PLUS_EQUALS; } "-" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MINUS; } "-=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MINUS_EQUALS; } "\." { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DOT; } "\.=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DOT_EQUALS; } "*" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_TIMES; } "*=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_TIMES_EQUALS; } "/" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DIVIDE; } "/=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DIVIDE_EQUALS; } "//" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_INT_DIVIDE; } "//=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_INT_DIVIDE_EQUALS; } "%" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MOD; } "%=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MOD_EQUALS; } "!" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_NOT; } "~" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_NOT; } "**" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_POW; } "**=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_POW_EQUALS; } \$\* { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_SREC); return MD_TOKEN_FULL_SREC; } \$ { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_DOLLAR_SIGN; } \$[a-zA-Z_0-9]+ { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); return MD_TOKEN_FIELD_NAME; } \$\{([^\}]|\\.)*\} { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); return MD_TOKEN_BRACED_FIELD_NAME; } @[a-zA-Z_0-9]+ { // Note: the parser depends on the at-sign being here. If this is changed, // that needs to be changed as well. *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); return MD_TOKEN_UNBRACED_OOSVAR_NAME; } @\{([^\}]|\\.)*\} { // Note: the parser depends on the percent-sign being here. If this is changed, // that needs to be changed as well. *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); return MD_TOKEN_BRACED_OOSVAR_NAME; } @ { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_AT_SIGN; } \@\* { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_OOSVAR); return MD_TOKEN_FULL_OOSVAR; } "\[" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_LEFT_BRACKET; } "\]" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RIGHT_BRACKET; } [0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { // Leading minus sign is handled via the unary-minus operator, not here. // 123 // 123. 123.4 // .234 // 1e2 // 1e-2 // 1.2e3 1.e3 // 1.2e-3 1.e-3 // .2e3 // .2e-3 1.e-3 *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } 0x[0-9a-fA-F]+ { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } \"([^\\\"]|\\.)*\" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_STRING; } \"([^\\\"]|\\.)*\"\i { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_REGEXI); return MD_TOKEN_REGEXI; } true { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); return MD_TOKEN_TRUE; } false { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); return MD_TOKEN_FALSE; } "NF" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "NR" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "FNR" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "FILENAME" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "FILENUM" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "M_PI" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "M_E" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "ENV" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ENV); return MD_TOKEN_ENV; } [a-zA-Z_][a-zA-Z_0-9]* { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NON_SIGIL_NAME); return MD_TOKEN_NON_SIGIL_NAME; } "(" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_LPAREN; } ")" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RPAREN; } "," { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_COMMA; } [ \t\r\n] { } . { return -1; } %% miller-5.6.2/c/parsing/ex1_parse.y000066400000000000000000001406461354153536500170030ustar00rootroot00000000000000// vim: set filetype=none: // (Lemon files have .y extensions like Yacc files but are not Yacc.) %include { #include #include #include #include "../lib/mlrutil.h" #include "./ex_ast.h" #include "../containers/sllv.h" #define DO_WRITE_APPEND // transitional pending lemon-memory issue // ================================================================ // AST: // * parens, commas, semis, line endings, whitespace are all stripped away // * variable names and literal values remain as leaf nodes of the AST // * = + - * / ** {function names} remain as non-leaf nodes of the AST // CST: See ex1_cst.c // // Note: This parser accepts many things that are invalid, e.g. // * begin{end{}} -- begin/end not at top level // * begin{$x=1} -- references to stream records at begin/end // * break/continue outside of for/while/do-while // * $x=x -- boundvars outside of for-loop variable bindings // All of the above are enforced by the CST builder, which takes this parser's output AST as input. // This is done (a) to keep this grammar from being overly complex, and (b) so we can get much more // informative error messages in C than in Lemon ('syntax error'). // // The parser hooks all build up an abstract syntax tree specifically for the CST builder. // For clearer visuals on what the ASTs look like: // * See ex1_cst.c // * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out // * Do "mlr -n put -v 'your expression goes here'" // ================================================================ } %token_type {ex_ast_node_t*} %default_type {ex_ast_node_t*} %extra_argument {ex_ast_t* past} //void token_destructor(ex_ast_node_t t) { // printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); //} //%token_destructor {token_destructor($$);} %parse_accept { } // The caller is expected to provide more context. %syntax_error { fprintf(stderr, "mlr DSL: syntax error.\n"); } // ================================================================ md_body ::= md_statement_list(B). { past->proot = B; } // ---------------------------------------------------------------- // Given "$a=1;$b=2;$c=3": since this is a bottom-up parser, we get first the "$a=1", then // "$a=1;$b=2", then "$a=1;$b=2;$c=3", then finally realize that's the top level, or it's embedded // within a cond-block, or for-loop body, etc. // * On the "$a=1" we make a sub-AST called "list" with child $a=1. // * On the "$b=2" we append the next argument to get "list" having children $a=1 and $b=2. // * On the "$c=3" we append the next argument to get "list" having children $a=1, $b=2, and $c=3. // // We handle statements of the form ' ; ; ' by parsing the empty spaces around the semicolons as NOP nodes. // But, the NOP nodes are immediately stripped here and are not included in the AST we return. md_statement_list(A) ::= md_statement_not_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { A = ex_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); } else { A = ex_ast_node_alloc_unary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); } } md_statement_list(A) ::= md_statement_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { A = ex_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); } else { A = ex_ast_node_alloc_unary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); } } // This could also be done with the list on the left and statement on the right. However, // curly-brace-terminated statements *end* with a semicolon; they don't start with one. So this seems // to be the right way to differentiate. md_statement_list(A) ::= md_statement_not_braced_end(B) MD_TOKEN_SEMICOLON md_statement_list(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { A = C; } else { A = ex_ast_node_prepend_arg(C, B); } } md_statement_list(A) ::= md_statement_braced_end(B) MD_SEMICOLON md_statement_list(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { A = C; } else { A = ex_ast_node_prepend_arg(C, B); } } // This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons: md_statement_not_braced_end(A) ::= . { A = ex_ast_node_alloc_zary("nop", MD_AST_NODE_TYPE_NOP); } // Begin/end (non-nestable) md_statement_braced_end(A) ::= md_begin_block(B) .{ A = B; } md_statement_braced_end(A) ::= md_end_block(B). { A = B; } // Nested control structures: md_statement_braced_end(A) ::= md_cond_block(B). md_statement_braced_end(A) ::= md_while_block(B). md_statement_braced_end(A) ::= md_for_loop_full_srec(B). md_statement_braced_end(A) ::= md_for_loop_full_oosvar(B). md_statement_braced_end(A) ::= md_for_loop_oosvar(B). md_statement_braced_end(A) ::= md_if_chain(B). // Not valid in begin/end since they refer to srecs: md_statement_not_braced_end ::= md_srec_assignment. md_statement_not_braced_end ::= md_srec_indirect_assignment. md_statement_not_braced_end ::= md_oosvar_from_full_srec_assignment. md_statement_not_braced_end ::= md_full_srec_from_oosvar_assignment. // Valid in begin/end since they don't refer to srecs (although the RHSs might): md_statement_not_braced_end ::= md_do_while_block. md_statement_not_braced_end ::= md_bare_boolean. md_statement_not_braced_end ::= md_oosvar_assignment. md_statement_not_braced_end ::= md_filter. md_statement_not_braced_end ::= md_unset. md_statement_not_braced_end ::= md_emitf. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_emitf_write. md_statement_not_braced_end ::= md_emitf_append. %endif md_statement_not_braced_end ::= md_emitp. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_emitp_write. md_statement_not_braced_end ::= md_emitp_append. %endif md_statement_not_braced_end ::= md_emit. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_emit_write. md_statement_not_braced_end ::= md_emit_append. %endif md_statement_not_braced_end ::= md_emitp_lashed. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_emitp_lashed_write. md_statement_not_braced_end ::= md_emitp_lashed_append. %endif md_statement_not_braced_end ::= md_emit_lashed. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_emit_lashed_write. md_statement_not_braced_end ::= md_emit_lashed_append. %endif md_statement_not_braced_end ::= md_dump. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_dump_write. md_statement_not_braced_end ::= md_dump_append. %endif md_statement_not_braced_end ::= md_edump. md_statement_not_braced_end ::= md_print. md_statement_not_braced_end ::= md_eprint. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_print_write. md_statement_not_braced_end ::= md_print_append. %endif md_statement_not_braced_end ::= md_printn. md_statement_not_braced_end ::= md_eprintn. %ifndef DO_WRITE_APPEND md_statement_not_braced_end ::= md_printn_write. md_statement_not_braced_end ::= md_printn_append. %endif // Valid only within for/while, but we accept them here syntactically and reject them in the AST-to-CST // conversion, where we can produce much more informative error messages: md_statement_not_braced_end(A) ::= MD_TOKEN_BREAK(O). { A = ex_ast_node_alloc(O->text, MD_AST_NODE_TYPE_BREAK); } md_statement_not_braced_end(A) ::= MD_TOKEN_CONTINUE(O). { A = ex_ast_node_alloc(O->text, MD_AST_NODE_TYPE_CONTINUE); } // ================================================================ md_begin_block(A) ::= MD_TOKEN_BEGIN(O) MD_TOKEN_LBRACE md_statement_list(B) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_BEGIN, B); } md_end_block(A) ::= MD_TOKEN_END(O) MD_TOKEN_LBRACE md_statement_list(B) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_END, B); } // ---------------------------------------------------------------- md_cond_block(A) ::= md_rhs(B) MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. { //A = ex_ast_node_prepend_arg(C, B); A = ex_ast_node_alloc_binary("cond", MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, B, C); } // ---------------------------------------------------------------- md_while_block(A) ::= MD_TOKEN_WHILE(O) MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_WHILE, B, C); } // ---------------------------------------------------------------- md_do_while_block(A) ::= MD_TOKEN_DO(O) MD_TOKEN_LBRACE md_statement_list(B) MD_TOKEN_RBRACE MD_TOKEN_WHILE MD_TOKEN_LPAREN md_rhs(C) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DO_WHILE, B, C); } // ---------------------------------------------------------------- // for(k, v in $*) { ... } md_for_loop_full_srec(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN MD_TOKEN_FULL_SREC MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(S) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_binary( F->text, MD_AST_NODE_TYPE_FOR_SREC, ex_ast_node_alloc_binary( "variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K, V ), S ); } // for(k, v in @*) { ... } md_for_loop_full_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(S) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, ex_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, ex_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), ex_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), S ); } // for((k1, k2), v in @*) { ... } // for((k1, k2, k3), v in @*) { ... } md_for_loop_full_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_oosvar_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(S) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, ex_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), ex_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), S ); } // for(k, v in @o[1][2]) { ... } md_for_loop_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_oosvar_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(S) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, ex_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, ex_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), O, S ); } // for((k1, k2), v in @o[1][2]) { ... } // for((k1, k2, k3), v in @o[1][2]) { ... } md_for_loop_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_oosvar_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_oosvar_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(S) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, ex_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), O, S ); } md_for_loop_index(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { A = ex_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NON_SIGIL_NAME); } md_for_oosvar_keylist(A) ::= MD_TOKEN_NON_SIGIL_NAME(K). { A = ex_ast_node_alloc_unary("key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K); } md_for_oosvar_keylist(A) ::= md_for_oosvar_keylist(L) MD_TOKEN_COMMA MD_TOKEN_NON_SIGIL_NAME(K). { A = ex_ast_node_append_arg(L, K); } // ---------------------------------------------------------------- // Cases: // if elif* // if elif* else md_if_chain(A) ::= md_if_elif_star(B) . { A = B; } md_if_chain(A) ::= md_if_elif_star(B) md_else_block(C). { A = ex_ast_node_append_arg(B, C); } md_if_elif_star(A) ::= md_if_block(B). { A = ex_ast_node_alloc_unary("if_head", MD_AST_NODE_TYPE_IF_HEAD, B); } md_if_elif_star(A) ::= md_if_elif_star(B) md_elif_block(C). { A = ex_ast_node_append_arg(B, C); } md_if_block(A) ::= MD_TOKEN_IF(O) MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); } md_elif_block(A) ::= MD_TOKEN_ELIF(O) MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); } md_else_block(A) ::= MD_TOKEN_ELSE(O) MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_IF_ITEM, C); } // ---------------------------------------------------------------- md_bare_boolean(A) ::= md_rhs(B). { A = B; } // ---------------------------------------------------------------- md_filter(A) ::= MD_TOKEN_FILTER(O) md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B); } // ---------------------------------------------------------------- md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C); } md_srec_indirect_assignment(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET MD_TOKEN_ASSIGN(O) md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, B, C); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); } md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); } md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_oosvar_keylist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C); } // ---------------------------------------------------------------- md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, ex_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, ex_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); } // ---------------------------------------------------------------- md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); } md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); } md_unset(A) ::= MD_TOKEN_UNSET(O) md_unset_args(B). { A = ex_ast_node_set_function_name(B, O->text); } // Need to invalidate "emit @a," -- use some non-empty-args expr. md_unset_args(A) ::= . { A = ex_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_UNSET); } md_unset_args(A) ::= md_field_name(B). { A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_indirect_field_name(B). { A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= MD_TOKEN_FULL_SREC(B). { A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_oosvar_keylist(B). { A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_field_name(C). { A = ex_ast_node_append_arg(B, C); } md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = ex_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- // Given "emitf @a,@b,@c": since this is a bottom-up parser, we get first the "@a", // then "@a,@b", then "@a,@b,@c", then finally "emit @a,@b,@c". So: // * On the "@a" we make a sub-AST called "temp @a" (although we could call it "emit"). // * On the "@b" we append the next argument to get "temp @a,@b". // * On the "@c" we append the next argument to get "temp @a,@b,@c". // * On the "emit" we change the name to get "emit @a,@b,@c". md_emitf(A) ::= MD_TOKEN_EMITF(O) md_emitf_args(B). { A = ex_ast_node_set_function_name(B, O->text); } // Need to invalidate "emit @a," -- use some non-empty-args expr. md_emitf_args(A) ::= . { A = ex_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_EMITF); } md_emitf_args(A) ::= md_oosvar_keylist(B). { A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); } md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = ex_ast_node_append_arg(B, C); } %ifndef DO_WRITE_APPEND md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { B = ex_ast_node_set_function_name(B, O->text); A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_WRITE, B, F); } md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { B = ex_ast_node_set_function_name(B, O->text); A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_APPEND, B, F); } %endif // ---------------------------------------------------------------- md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B); } md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); } md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B); } md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); } md_emitp(A) ::= MD_TOKEN_EMITP(O) md_oosvar_keylist(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B); } md_emitp(A) ::= MD_TOKEN_EMITP(O) md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); } %ifndef DO_WRITE_APPEND md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); } %endif %ifndef DO_WRITE_APPEND md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); } %endif md_emitp_namelist(A) ::= md_rhs(B). { A = ex_ast_node_alloc_unary("emitp_namelist", MD_AST_NODE_TYPE_EMITP, B); } md_emitp_namelist(A) ::= md_emitp_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); } md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); } md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); } md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); } md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_keylist(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); } md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); } %ifndef DO_WRITE_APPEND md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B). { // xxx A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); } %endif %ifndef DO_WRITE_APPEND md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_IF md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B). { // xxx A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_POW md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B). { // xxx A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B). { // xxx A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); } %endif md_emit_namelist(A) ::= md_rhs(B). { A = ex_ast_node_alloc_unary("emit_namelist", MD_AST_NODE_TYPE_EMIT, B); } md_emit_namelist(A) ::= md_emit_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B); } md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C); } %ifndef DO_WRITE_APPEND md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, F); } md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, C, F); } %endif %ifndef DO_WRITE_APPEND md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, F); } md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, C, F); } %endif md_emitp_lashed_keylists(A) ::= md_oosvar_keylist(B). { A = ex_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMITP_LASHED, B); } md_emitp_lashed_keylists(A) ::= md_emitp_lashed_keylists(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = ex_ast_node_append_arg(B, C); } md_emitp_lashed_namelist(A) ::= md_rhs(B). { A = ex_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMITP_LASHED, B); } md_emitp_lashed_namelist(A) ::= md_emitp_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B); } md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C); } %ifndef DO_WRITE_APPEND md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, F); } md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, C, F); } %endif %ifndef DO_WRITE_APPEND md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, F); } md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, C, F); } %endif md_emit_lashed_keylists(A) ::= md_oosvar_keylist(B). { A = ex_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMIT_LASHED, B); } md_emit_lashed_keylists(A) ::= md_emit_lashed_keylists(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = ex_ast_node_append_arg(B, C); } md_emit_lashed_namelist(A) ::= md_rhs(B). { A = ex_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMIT_LASHED, B); } md_emit_lashed_namelist(A) ::= md_emit_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_dump(A) ::= MD_TOKEN_DUMP(O). { A = ex_ast_node_alloc_zary(O->text, MD_AST_NODE_TYPE_DUMP); } md_edump(A) ::= MD_TOKEN_EDUMP(O). { A = ex_ast_node_alloc_zary(O->text, MD_AST_NODE_TYPE_EDUMP); } %ifndef DO_WRITE_APPEND md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_WRITE, B); } md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_APPEND, B); } %endif md_print(A) ::= MD_TOKEN_PRINT(O) md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINT, B); } md_eprint(A) ::= MD_TOKEN_EPRINT(O) md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EPRINT, B); } %ifndef DO_WRITE_APPEND md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_WRITE, C, F); } md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_APPEND, C, F); } %endif md_printn(A) ::= MD_TOKEN_PRINTN(O) md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINTN, B); } md_eprintn(A) ::= MD_TOKEN_EPRINTN(O) md_rhs(B). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EPRINTN, B); } %ifndef DO_WRITE_APPEND md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_WRITE, C, F); } md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_APPEND, C, F); } %endif // ================================================================ // Begin RHS precedence chain md_rhs(A) ::= md_ternary(B). { A = B; } md_ternary(A) ::= md_logical_or_term(B) MD_TOKEN_QUESTION_MARK md_ternary(C) MD_TOKEN_COLON md_ternary(D). { A = ex_ast_node_alloc_ternary("? :", MD_AST_NODE_TYPE_OPERATOR, B, C, D); } md_ternary(A) ::= md_logical_or_term(B). { A = B; } // ================================================================ md_logical_or_term(A) ::= md_logical_xor_term(B). { A = B; } md_logical_or_term(A) ::= md_logical_or_term(B) MD_TOKEN_LOGICAL_OR(O) md_logical_xor_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_logical_xor_term(A) ::= md_logical_and_term(B). { A = B; } md_logical_xor_term(A) ::= md_logical_xor_term(B) MD_TOKEN_LOGICAL_XOR(O) md_logical_and_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_logical_and_term(A) ::= md_eqne_term(B). { A = B; } md_logical_and_term(A) ::= md_logical_and_term(B) MD_TOKEN_LOGICAL_AND(O) md_eqne_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_eqne_term(A) ::= md_cmp_term(B). { A = B; } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_MATCHES(O) md_cmp_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_DOES_NOT_MATCH(O) md_cmp_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_EQ(O) md_cmp_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_NE(O) md_cmp_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_cmp_term(A) ::= md_bitwise_or_term(B). { A = B; } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GT(O) md_bitwise_or_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GE(O) md_bitwise_or_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LT(O) md_bitwise_or_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LE(O) md_bitwise_or_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_or_term(A) ::= md_bitwise_xor_term(B). { A = B; } md_bitwise_or_term(A) ::= md_bitwise_or_term(B) MD_TOKEN_BITWISE_OR(O) md_bitwise_xor_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_xor_term(A) ::= md_bitwise_and_term(B). { A = B; } md_bitwise_xor_term(A) ::= md_bitwise_xor_term(B) MD_TOKEN_BITWISE_XOR(O) md_bitwise_and_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_and_term(A) ::= md_bitwise_shift_term(B). { A = B; } md_bitwise_and_term(A) ::= md_bitwise_and_term(B) MD_TOKEN_BITWISE_AND(O) md_bitwise_shift_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_shift_term(A) ::= md_addsubdot_term(B). { A = B; } md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_LSH(O) md_addsubdot_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_RSH(O) md_addsubdot_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_addsubdot_term(A) ::= md_muldiv_term(B). { A = B; } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_PLUS(O) md_muldiv_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_MINUS(O) md_muldiv_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_DOT(O) md_muldiv_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_muldiv_term(A) ::= md_unary_bitwise_op_term(B). { A = B; } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_TIMES(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_DIVIDE(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_DIVIDE(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_MOD(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_unary_bitwise_op_term(A) ::= md_pow_term(B). { A = B; } md_unary_bitwise_op_term(A) ::= MD_TOKEN_PLUS(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_MINUS(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_LOGICAL_NOT(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_BITWISE_NOT(O) md_unary_bitwise_op_term(C). { A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } // ---------------------------------------------------------------- md_pow_term(A) ::= md_atom_or_fcn(B). { A = B; } md_pow_term(A) ::= md_atom_or_fcn(B) MD_TOKEN_POW(O) md_pow_term(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- // In the grammar provided to the user, field names are of the form "$x". But // within Miller internally, field names are of the form "x". We coded the // lexer to give us field names with leading "$" so we can confidently strip it // off here. md_atom_or_fcn(A) ::= md_field_name(B). { A = B; } md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). { char* dollar_name = B->text; char* no_dollar_name = &dollar_name[1]; A = ex_ast_node_alloc(no_dollar_name, B->type); } md_field_name(A) ::= MD_TOKEN_BRACED_FIELD_NAME(B). { // Replace "${field.name}" with just "field.name" char* dollar_name = B->text; char* no_dollar_name = &dollar_name[2]; int len = strlen(no_dollar_name); if (len > 0) no_dollar_name[len-1] = 0; A = ex_ast_node_alloc(no_dollar_name, B->type); } md_atom_or_fcn(A) ::= md_indirect_field_name(B). { A = B; } md_indirect_field_name(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { A = ex_ast_node_alloc_unary("indirect_field_name", MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, B); } // ---------------------------------------------------------------- md_atom_or_fcn(A) ::= md_oosvar_keylist(B). { A = B; } md_oosvar_keylist(A) ::= md_oosvar_basename(B). { A = B; } md_oosvar_keylist(A) ::= md_oosvar_keylist(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = ex_ast_node_append_arg(B, C); } // E.g. @name md_oosvar_basename(A) ::= MD_TOKEN_UNBRACED_OOSVAR_NAME(B). { char* at_name = B->text; char* no_at_name = &at_name[1]; A = ex_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, ex_ast_node_alloc(no_at_name, B->type)); } // E.g. @{name} md_oosvar_basename(A) ::= MD_TOKEN_BRACED_OOSVAR_NAME(B). { // Replace "@%{field.name}" with just "field.name" char* at_name = B->text; char* no_at_name = &at_name[2]; int len = strlen(no_at_name); if (len > 0) no_at_name[len-1] = 0; A = ex_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, ex_ast_node_alloc(no_at_name, B->type)); } // E.g. @["name"] md_oosvar_basename(A) ::= MD_TOKEN_AT_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { A = ex_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, B); } // ---------------------------------------------------------------- md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). { A = B; } md_atom_or_fcn(A) ::= MD_TOKEN_TRUE(B). { A = B; } md_atom_or_fcn(A) ::= MD_TOKEN_FALSE(B). { A = B; } md_atom_or_fcn(A) ::= md_string(B). { A = B; } md_atom_or_fcn(A) ::= md_regexi(B). { A = B; } md_atom_or_fcn(A) ::= md_local_variable(B). { A = B; } md_local_variable(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { A = ex_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE); } md_string(A) ::= MD_TOKEN_STRING(B). { char* input = B->text; char* stripped = &input[1]; int len = strlen(input); stripped[len-2] = 0; A = ex_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); } md_regexi(A) ::= MD_TOKEN_REGEXI(B). { char* input = B->text; char* stripped = &input[1]; int len = strlen(input); stripped[len-3] = 0; A = ex_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); } md_atom_or_fcn(A) ::= MD_TOKEN_CONTEXT_VARIABLE(B). { A = B; } md_atom_or_fcn(A) ::= MD_TOKEN_ENV(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = ex_ast_node_alloc_binary("env", MD_AST_NODE_TYPE_ENV, B, C); } md_atom_or_fcn(A) ::= MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN. { A = B; } // Given "f(a,b,c)": since this is a bottom-up parser, we get first the "a", // then "a,b", then "a,b,c", then finally "f(a,b,c)". So: // * On the "a" we make a function sub-AST called "anon(a)". // * On the "b" we append the next argument to get "anon(a,b)". // * On the "c" we append the next argument to get "anon(a,b,c)". // * On the "f" we change the function name to get "f(a,b,c)". md_atom_or_fcn(A) ::= MD_TOKEN_NON_SIGIL_NAME(O) MD_TOKEN_LPAREN md_fcn_args(B) MD_TOKEN_RPAREN. { A = ex_ast_node_set_function_name(B, O->text); } // Need to invalidate "f(10,)" -- use some non-empty-args expr. md_fcn_args(A) ::= . { A = ex_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME); } md_fcn_args(A) ::= md_rhs(B). { A = ex_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); } md_fcn_args(A) ::= md_fcn_args(B) MD_TOKEN_COMMA md_rhs(C). { A = ex_ast_node_append_arg(B, C); } miller-5.6.2/c/parsing/ex1_wrapper.c000066400000000000000000000061051354153536500173120ustar00rootroot00000000000000#include #include #include "ex1_wrapper.h" #include "ex1_lexer.h" #include "ex1_parse.h" #include "../lib/mlrutil.h" #include "./ex_ast.h" #include "../containers/sllv.h" // These prototypes are copied out manually from ex1_parse.c. With some // more work I could have Lemon autogenerate these prototypes into // ex1_parse.h. void *ex1_lemon_parser_alloc(void *(*mallocProc)(size_t)); int ex1_lemon_parser_parse_token( void *pvparser, /* The parser */ int yymajor, /* The major token code number */ ex_ast_node_t* yyminor, /* The value for the token */ ex_ast_t* past); /* Optional %extra_argument parameter */ void ex1_lemon_parser_free( void *pvparser, /* The parser to be deleted */ void (*freeProc)(void*)); /* Function used to reclaim memory */ void ex1_ParseTrace(FILE *TraceFILE, char *zTracePrompt); // ---------------------------------------------------------------- // http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html // http://flex.sourceforge.net/manual/Extra-Data.html // Returns linked list of ex_ast_node_t*. static ex_ast_t* ex1_parse_inner(yyscan_t scanner, void* pvparser, ex_ast_node_t** ppnode, int trace_parse) { int lex_code; int parse_code; ex_ast_t* past = ex_ast_alloc(); if (trace_parse) ex1_ParseTrace(stderr, "[DSLTRACE] "); do { lex_code = ex1_lexer_lex(scanner); ex_ast_node_t* plexed_node = *ppnode; parse_code = ex1_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); if (parse_code == 0) return NULL; } while (lex_code > 0); if (-1 == lex_code) { fprintf(stderr, "The scanner encountered an error.\n"); return NULL; } parse_code = ex1_lemon_parser_parse_token(pvparser, 0, NULL, past); if (parse_code == 0) return NULL; return past; } // ---------------------------------------------------------------- // Returns linked list of ex_ast_node_t*. ex_ast_t* ex1_parse(char* string, int trace_parse) { ex_ast_node_t* pnode = NULL; yyscan_t scanner; ex1_lexer_lex_init_extra(&pnode, &scanner); void* pvparser = ex1_lemon_parser_alloc(malloc); YY_BUFFER_STATE buf = NULL; if (string == NULL) { ex1_lexer_set_in(stdin, scanner); } else { YY_BUFFER_STATE buf = ex1_lexer__scan_string(string, scanner); ex1_lexer__switch_to_buffer (buf, scanner); } ex_ast_t* past = ex1_parse_inner(scanner, pvparser, &pnode, trace_parse); if (buf != NULL) ex1_lexer__delete_buffer(buf, scanner); ex1_lexer_lex_destroy(scanner); ex1_lemon_parser_free(pvparser, free); return past; } // ---------------------------------------------------------------- void yytestcase(int ignored) { } // ---------------------------------------------------------------- int main(int argc, char** argv) { int trace_parse = FALSE; int argi = 1; if (argc >= 2 && streq(argv[1], "-t")) { argi++; trace_parse = TRUE; } if ((argc - argi) != 1) { fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); exit(1); } ex_ast_t* past = ex1_parse(argv[argi], trace_parse); if (past == NULL) { printf("syntax error\n"); } else { ex_ast_print(past); } return 0; } miller-5.6.2/c/parsing/ex1_wrapper.h000066400000000000000000000002171354153536500173150ustar00rootroot00000000000000#ifndef EX1_WRAPPER_H #define EX1_WRAPPER_H #include "ex_ast.h" ex_ast_t* ex1_parse(char* string, int trace_parse); #endif // EX1_WRAPPER_H miller-5.6.2/c/parsing/ex2_lexer.l000066400000000000000000000023261354153536500167640ustar00rootroot00000000000000%{ #include "stdio.h" // for fileno() prototype #include "string.h" // for strdup() prototype #include "ex2_parse.h" #include "./ex_ast.h" // http://flex.sourceforge.net/manual/Extra-Data.html %} %option reentrant %option noyywrap %option extra-type="struct _ex_ast_node_t **" %% "=" { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); return MD_TOKEN_ASSIGN; } \$[a-zA-Z_0-9]+ { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); return MD_TOKEN_FIELD_NAME; } [0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { // Leading minus sign is handled via the unary-minus operator, not here. // 123 // 123. 123.4 // .234 // 1e2 // 1e-2 // 1.2e3 1.e3 // 1.2e-3 1.e-3 // .2e3 // .2e-3 1.e-3 *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } 0x[0-9a-fA-F]+ { *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } [ \t\r\n] { } . { return -1; } %% miller-5.6.2/c/parsing/ex2_parse.y000066400000000000000000000065701354153536500170010ustar00rootroot00000000000000// vim: set filetype=none: // (Lemon files have .y extensions like Yacc files but are not Yacc.) %include { #include #include #include #include "../lib/mlrutil.h" #include "./ex_ast.h" #include "../containers/sllv.h" #define DO_WRITE_APPEND // transitional pending lemon-memory issue // ================================================================ // AST: // * parens, commas, semis, line endings, whitespace are all stripped away // * variable names and literal values remain as leaf nodes of the AST // * = + - * / ** {function names} remain as non-leaf nodes of the AST // CST: See ex2_cst.c // // Note: This parser accepts many things that are invalid, e.g. // * begin{end{}} -- begin/end not at top level // * begin{$x=1} -- references to stream records at begin/end // * break/continue outside of for/while/do-while // * $x=x -- boundvars outside of for-loop variable bindings // All of the above are enforced by the CST builder, which takes this parser's output AST as input. // This is done (a) to keep this grammar from being overly complex, and (b) so we can get much more // informative error messages in C than in Lemon ('syntax error'). // // The parser hooks all build up an abstract syntax tree specifically for the CST builder. // For clearer visuals on what the ASTs look like: // * See ex2_cst.c // * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out // * Do "mlr -n put -v 'your expression goes here'" // ================================================================ } %token_type {ex_ast_node_t*} %default_type {ex_ast_node_t*} %extra_argument {ex_ast_t* past} //void token_destructor(ex_ast_node_t t) { // printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); //} //%token_destructor {token_destructor($$);} %parse_accept { } // The caller is expected to provide more context. %syntax_error { fprintf(stderr, "mlr DSL: syntax error.\n"); } // ================================================================ md_body ::= md_statement_list(B). { past->proot = B; } // ---------------------------------------------------------------- md_statement_list(A) ::= md_statement(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { A = ex_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); } else { A = ex_ast_node_alloc_unary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); } } //md_statement_list(A) ::= md_statement(B) MD_SEMICOLON md_statement_list(C). { // if (B->type == MD_AST_NODE_TYPE_NOP) { // A = C; // } else { // A = ex_ast_node_prepend_arg(C, B); // } //} md_statement_list(A) ::= md_statement_list(B) MD_SEMICOLON md_statement(C). { if (C->type == MD_AST_NODE_TYPE_NOP) { A = B; } else { A = ex_ast_node_append_arg(B, C); } } md_statement(A) ::= md_srec_assignment(B). { A = B; } // ---------------------------------------------------------------- md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C); } md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). { //char* dollar_name = B->text; //char* no_dollar_name = &dollar_name[1]; //A = ex_ast_node_alloc(no_dollar_name, B->type); A = ex_ast_node_alloc(B->text, B->type); } md_rhs(A) ::= md_atom_or_fcn(B). { A = B; } // ---------------------------------------------------------------- md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). { A = B; } miller-5.6.2/c/parsing/ex2_wrapper.c000066400000000000000000000061051354153536500173130ustar00rootroot00000000000000#include #include #include "ex2_wrapper.h" #include "ex2_lexer.h" #include "ex2_parse.h" #include "../lib/mlrutil.h" #include "./ex_ast.h" #include "../containers/sllv.h" // These prototypes are copied out manually from ex2_parse.c. With some // more work I could have Lemon autogenerate these prototypes into // ex2_parse.h. void *ex2_lemon_parser_alloc(void *(*mallocProc)(size_t)); int ex2_lemon_parser_parse_token( void *pvparser, /* The parser */ int yymajor, /* The major token code number */ ex_ast_node_t* yyminor, /* The value for the token */ ex_ast_t* past); /* Optional %extra_argument parameter */ void ex2_lemon_parser_free( void *pvparser, /* The parser to be deleted */ void (*freeProc)(void*)); /* Function used to reclaim memory */ void ex2_ParseTrace(FILE *TraceFILE, char *zTracePrompt); // ---------------------------------------------------------------- // http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html // http://flex.sourceforge.net/manual/Extra-Data.html // Returns linked list of ex_ast_node_t*. static ex_ast_t* ex2_parse_inner(yyscan_t scanner, void* pvparser, ex_ast_node_t** ppnode, int trace_parse) { int lex_code; int parse_code; ex_ast_t* past = ex_ast_alloc(); if (trace_parse) ex2_ParseTrace(stderr, "[DSLTRACE] "); do { lex_code = ex2_lexer_lex(scanner); ex_ast_node_t* plexed_node = *ppnode; parse_code = ex2_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); if (parse_code == 0) return NULL; } while (lex_code > 0); if (-1 == lex_code) { fprintf(stderr, "The scanner encountered an error.\n"); return NULL; } parse_code = ex2_lemon_parser_parse_token(pvparser, 0, NULL, past); if (parse_code == 0) return NULL; return past; } // ---------------------------------------------------------------- // Returns linked list of ex_ast_node_t*. ex_ast_t* ex2_parse(char* string, int trace_parse) { ex_ast_node_t* pnode = NULL; yyscan_t scanner; ex2_lexer_lex_init_extra(&pnode, &scanner); void* pvparser = ex2_lemon_parser_alloc(malloc); YY_BUFFER_STATE buf = NULL; if (string == NULL) { ex2_lexer_set_in(stdin, scanner); } else { YY_BUFFER_STATE buf = ex2_lexer__scan_string(string, scanner); ex2_lexer__switch_to_buffer (buf, scanner); } ex_ast_t* past = ex2_parse_inner(scanner, pvparser, &pnode, trace_parse); if (buf != NULL) ex2_lexer__delete_buffer(buf, scanner); ex2_lexer_lex_destroy(scanner); ex2_lemon_parser_free(pvparser, free); return past; } // ---------------------------------------------------------------- void yytestcase(int ignored) { } // ---------------------------------------------------------------- int main(int argc, char** argv) { int trace_parse = FALSE; int argi = 1; if (argc >= 2 && streq(argv[1], "-t")) { argi++; trace_parse = TRUE; } if ((argc - argi) != 1) { fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); exit(1); } ex_ast_t* past = ex2_parse(argv[argi], trace_parse); if (past == NULL) { printf("syntax error\n"); } else { ex_ast_print(past); } return 0; } miller-5.6.2/c/parsing/ex2_wrapper.h000066400000000000000000000002171354153536500173160ustar00rootroot00000000000000#ifndef EX2_WRAPPER_H #define EX2_WRAPPER_H #include "ex_ast.h" ex_ast_t* ex2_parse(char* string, int trace_parse); #endif // EX2_WRAPPER_H miller-5.6.2/c/parsing/ex_ast.c000066400000000000000000000266361354153536500163530ustar00rootroot00000000000000#include #include "../lib/mlrutil.h" #include "ex_ast.h" // ---------------------------------------------------------------- ex_ast_t* ex_ast_alloc() { ex_ast_t* past = mlr_malloc_or_die(sizeof(ex_ast_t)); past->proot = NULL; return past; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_alloc(char* text, ex_ast_node_type_t type) { ex_ast_node_t* pnode = (ex_ast_node_t*)mlr_malloc_or_die( sizeof(ex_ast_node_t)); pnode->text = mlr_strdup_or_die(text); pnode->type = type; pnode->pchildren = NULL; return pnode; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_copy(ex_ast_node_t* pother) { ex_ast_node_t* pnode = ex_ast_node_alloc(pother->text, pother->type); return pnode; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_tree_copy(ex_ast_node_t* pold) { ex_ast_node_t* pnew = ex_ast_node_copy(pold); if (pold->pchildren != NULL) { pnew->pchildren = sllv_alloc(); for (sllve_t* pe = pold->pchildren->phead; pe != NULL; pe = pe->pnext) { ex_ast_node_t* pchild = pe->pvvalue; sllv_append(pnew->pchildren, ex_ast_tree_copy(pchild)); } } return pnew; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_alloc_zary(char* text, ex_ast_node_type_t type) { ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); return pnode; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_alloc_unary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa) { ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); return pnode; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_alloc_binary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa, ex_ast_node_t* pb) { ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); sllv_append(pnode->pchildren, pb); return pnode; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_alloc_ternary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa, ex_ast_node_t* pb, ex_ast_node_t* pc) { ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); pnode->pchildren = sllv_alloc(); sllv_append(pnode->pchildren, pa); sllv_append(pnode->pchildren, pb); sllv_append(pnode->pchildren, pc); return pnode; } // ---------------------------------------------------------------- ex_ast_node_t* ex_ast_node_prepend_arg( ex_ast_node_t* pa, ex_ast_node_t* pb) { if (pa->pchildren == NULL) pa->pchildren = sllv_alloc(); sllv_push(pa->pchildren, pb); return pa; } ex_ast_node_t* ex_ast_node_append_arg( ex_ast_node_t* pa, ex_ast_node_t* pb) { if (pa->pchildren == NULL) pa->pchildren = sllv_alloc(); sllv_append(pa->pchildren, pb); return pa; } ex_ast_node_t* ex_ast_node_set_function_name( ex_ast_node_t* pa, char* name) { free(pa->text); pa->text = mlr_strdup_or_die(name); return pa; } // ---------------------------------------------------------------- void ex_ast_print(ex_ast_t* past) { printf("AST ROOT:\n"); if (past->proot == NULL) { printf("(null)\n"); } else { ex_ast_node_print(past->proot); } } // ---------------------------------------------------------------- static void ex_ast_node_print_aux(ex_ast_node_t* pnode, int level, FILE* o) { if (pnode == NULL) return; for (int i = 0; i < level; i++) fprintf(o, " "); fprintf(o, "text=\"%s\", type=%s%s\n", pnode->text, ex_ast_node_describe_type(pnode->type), (pnode->pchildren != NULL) ? ":" : "."); if (pnode->pchildren != NULL) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { ex_ast_node_print_aux(pe->pvvalue, level + 1, o); } } } void ex_ast_node_print(ex_ast_node_t* pnode) { ex_ast_node_print_aux(pnode, 0, stdout); } void ex_ast_node_fprint(ex_ast_node_t* pnode, FILE* o) { ex_ast_node_print_aux(pnode, 0, o); } // ---------------------------------------------------------------- char* ex_ast_node_describe_type(ex_ast_node_type_t type) { switch(type) { case MD_AST_NODE_TYPE_STATEMENT_BLOCK: return "statement_list"; break; case MD_AST_NODE_TYPE_BEGIN: return "begin"; break; case MD_AST_NODE_TYPE_END: return "end"; break; case MD_AST_NODE_TYPE_STRING_LITERAL: return "string_literal"; break; case MD_AST_NODE_TYPE_NUMERIC_LITERAL: return "numeric_literal"; break; case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return "boolean_literal"; break; case MD_AST_NODE_TYPE_REGEXI: return "regexi"; break; case MD_AST_NODE_TYPE_FIELD_NAME: return "field_name"; break; case MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME: return "indirect_field_name"; break; case MD_AST_NODE_TYPE_FULL_SREC: return "full_srec"; break; case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: return "oosvar_keylist"; break; case MD_AST_NODE_TYPE_FULL_OOSVAR: return "full_oosvar"; break; case MD_AST_NODE_TYPE_NON_SIGIL_NAME: return "non_sigil_name"; break; case MD_AST_NODE_TYPE_OPERATOR: return "operator"; break; case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "srec_assignment"; break; case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: return "indirect_srec_assignment"; break; case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "oosvar_assignment"; break; case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "oosvar_from_full_srec_assignment"; break; case MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT: return "full_srec_from_oosvar_assignment"; break; case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "context_variable"; break; case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "stripped_away"; break; case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: return "conditional_block"; break; case MD_AST_NODE_TYPE_FILTER: return "filter"; break; case MD_AST_NODE_TYPE_UNSET: return "unset"; break; case MD_AST_NODE_TYPE_EMITF: return "emitf"; break; case MD_AST_NODE_TYPE_EMITF_WRITE: return "emitf_write"; break; case MD_AST_NODE_TYPE_EMITF_APPEND: return "emitf_append"; break; case MD_AST_NODE_TYPE_EMITP: return "emitp"; break; case MD_AST_NODE_TYPE_EMITP_WRITE: return "emitp_write"; break; case MD_AST_NODE_TYPE_EMITP_APPEND: return "emitp_append"; break; case MD_AST_NODE_TYPE_EMIT: return "emit"; break; case MD_AST_NODE_TYPE_EMIT_WRITE: return "emit_write"; break; case MD_AST_NODE_TYPE_EMIT_APPEND: return "emit_append"; break; case MD_AST_NODE_TYPE_EMITP_LASHED: return "emitp_lashed"; break; case MD_AST_NODE_TYPE_EMITP_LASHED_WRITE: return "emitp_lashed_write"; break; case MD_AST_NODE_TYPE_EMITP_LASHED_APPEND: return "emitp_lashed_append"; break; case MD_AST_NODE_TYPE_EMIT_LASHED: return "emit_lashed"; break; case MD_AST_NODE_TYPE_EMIT_LASHED_WRITE: return "emit_lashed_write"; break; case MD_AST_NODE_TYPE_EMIT_LASHED_APPEND: return "emit_lashed_append"; break; case MD_AST_NODE_TYPE_DUMP: return "dump"; break; case MD_AST_NODE_TYPE_DUMP_WRITE: return "dump_write"; break; case MD_AST_NODE_TYPE_DUMP_APPEND: return "dump_append"; break; case MD_AST_NODE_TYPE_EDUMP: return "edump"; break; case MD_AST_NODE_TYPE_PRINT: return "print"; break; case MD_AST_NODE_TYPE_PRINT_WRITE: return "print_write"; break; case MD_AST_NODE_TYPE_PRINT_APPEND: return "print_append"; break; case MD_AST_NODE_TYPE_PRINTN: return "printn"; break; case MD_AST_NODE_TYPE_PRINTN_WRITE: return "printn_write"; break; case MD_AST_NODE_TYPE_PRINTN_APPEND: return "printn_append"; break; case MD_AST_NODE_TYPE_EPRINT: return "eprint"; break; case MD_AST_NODE_TYPE_EPRINTN: return "eprintn"; break; case MD_AST_NODE_TYPE_ALL: return "all"; break; case MD_AST_NODE_TYPE_ENV: return "env"; break; case MD_AST_NODE_TYPE_WHILE: return "while"; break; case MD_AST_NODE_TYPE_DO_WHILE: return "do_while"; break; case MD_AST_NODE_TYPE_FOR_SREC: return "for_srec"; break; case MD_AST_NODE_TYPE_FOR_OOSVAR: return "for_oosvar"; break; case MD_AST_NODE_TYPE_FOR_VARIABLES: return "for_variables"; break; case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return "local_variable"; break; case MD_AST_NODE_TYPE_IN: return "in"; break; case MD_AST_NODE_TYPE_BREAK: return "break"; break; case MD_AST_NODE_TYPE_CONTINUE: return "continue"; break; case MD_AST_NODE_TYPE_IF_HEAD: return "if_head"; break; case MD_AST_NODE_TYPE_IF_ITEM: return "if_item"; break; default: return "???"; } } // ---------------------------------------------------------------- void ex_ast_free(ex_ast_t* past) { ex_ast_node_free(past->proot); free(past); } // ---------------------------------------------------------------- void ex_ast_node_free(ex_ast_node_t* pnode) { if (pnode->pchildren) { for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { ex_ast_node_t* pchild = pe->pvvalue; ex_ast_node_free(pchild); } sllv_free(pnode->pchildren); } free(pnode->text); free(pnode); } miller-5.6.2/c/parsing/ex_ast.h000066400000000000000000000101461354153536500163450ustar00rootroot00000000000000// ================================================================ // Miller abstract syntax tree for put and filter. // ================================================================ #ifndef EX_AST_H #define EX_AST_H #include "../containers/sllv.h" // ---------------------------------------------------------------- typedef enum _ex_ast_node_type_t { MD_AST_NODE_TYPE_STATEMENT_BLOCK, MD_AST_NODE_TYPE_BEGIN, MD_AST_NODE_TYPE_END, MD_AST_NODE_TYPE_STRING_LITERAL, MD_AST_NODE_TYPE_NUMERIC_LITERAL, MD_AST_NODE_TYPE_BOOLEAN_LITERAL, MD_AST_NODE_TYPE_REGEXI, MD_AST_NODE_TYPE_FIELD_NAME, // E.g. $x MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, // E.g. $[@x] MD_AST_NODE_TYPE_FULL_SREC, MD_AST_NODE_TYPE_OOSVAR_KEYLIST, MD_AST_NODE_TYPE_FULL_OOSVAR, MD_AST_NODE_TYPE_NON_SIGIL_NAME, MD_AST_NODE_TYPE_OPERATOR, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, MD_AST_NODE_TYPE_CONTEXT_VARIABLE, MD_AST_NODE_TYPE_ENV, MD_AST_NODE_TYPE_STRIPPED_AWAY, MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, MD_AST_NODE_TYPE_FILTER, MD_AST_NODE_TYPE_UNSET, MD_AST_NODE_TYPE_EMITF, MD_AST_NODE_TYPE_EMITF_WRITE, MD_AST_NODE_TYPE_EMITF_APPEND, MD_AST_NODE_TYPE_EMITP, MD_AST_NODE_TYPE_EMITP_WRITE, MD_AST_NODE_TYPE_EMITP_APPEND, MD_AST_NODE_TYPE_EMIT, MD_AST_NODE_TYPE_EMIT_WRITE, MD_AST_NODE_TYPE_EMIT_APPEND, MD_AST_NODE_TYPE_EMITP_LASHED, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, MD_AST_NODE_TYPE_EMIT_LASHED, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, MD_AST_NODE_TYPE_DUMP, MD_AST_NODE_TYPE_DUMP_WRITE, MD_AST_NODE_TYPE_DUMP_APPEND, MD_AST_NODE_TYPE_EDUMP, MD_AST_NODE_TYPE_PRINT, MD_AST_NODE_TYPE_PRINT_WRITE, MD_AST_NODE_TYPE_PRINT_APPEND, MD_AST_NODE_TYPE_PRINTN, MD_AST_NODE_TYPE_PRINTN_WRITE, MD_AST_NODE_TYPE_PRINTN_APPEND, MD_AST_NODE_TYPE_EPRINT, MD_AST_NODE_TYPE_EPRINTN, MD_AST_NODE_TYPE_ALL, MD_AST_NODE_TYPE_NOP, // only for parser internals; should not be in the AST returned by the parser MD_AST_NODE_TYPE_WHILE, MD_AST_NODE_TYPE_DO_WHILE, MD_AST_NODE_TYPE_FOR_SREC, MD_AST_NODE_TYPE_FOR_OOSVAR, MD_AST_NODE_TYPE_FOR_VARIABLES, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE, MD_AST_NODE_TYPE_IN, MD_AST_NODE_TYPE_BREAK, MD_AST_NODE_TYPE_CONTINUE, MD_AST_NODE_TYPE_IF_HEAD, MD_AST_NODE_TYPE_IF_ITEM, } ex_ast_node_type_t; typedef struct _ex_ast_node_t { char* text; ex_ast_node_type_t type; sllv_t* pchildren; } ex_ast_node_t; typedef struct _ex_ast_t { ex_ast_node_t* proot; } ex_ast_t; // ---------------------------------------------------------------- ex_ast_t* ex_ast_alloc(); ex_ast_node_t* ex_ast_node_alloc(char* text, ex_ast_node_type_t type); ex_ast_node_t* ex_ast_node_alloc_zary(char* text, ex_ast_node_type_t type); ex_ast_node_t* ex_ast_node_alloc_unary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa); ex_ast_node_t* ex_ast_node_alloc_binary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa, ex_ast_node_t* pb); ex_ast_node_t* ex_ast_node_alloc_ternary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa, ex_ast_node_t* pb, ex_ast_node_t* pc); ex_ast_node_t* ex_ast_node_copy(ex_ast_node_t* pother); // These are so the parser can expand '$x += 1' to '$x = $x + 1', etc. ex_ast_node_t* ex_ast_tree_copy(ex_ast_node_t* pother); // See comments in ex_parse.y for this seemingly awkward syntax wherein // we change the function name after having set it up. This is a consequence of // bottom-up DSL parsing. ex_ast_node_t* ex_ast_node_prepend_arg(ex_ast_node_t* pa, ex_ast_node_t* pb); ex_ast_node_t* ex_ast_node_append_arg(ex_ast_node_t* pa, ex_ast_node_t* pb); ex_ast_node_t* ex_ast_node_set_function_name(ex_ast_node_t* pa, char* name); void ex_ast_print(ex_ast_t* past); void ex_ast_node_print(ex_ast_node_t* pnode); void ex_ast_node_fprint(ex_ast_node_t* pnode, FILE* o); char* ex_ast_node_describe_type(ex_ast_node_type_t type); void ex_ast_node_free(ex_ast_node_t* pnode); void ex_ast_free(ex_ast_t* past); #endif // EX_AST_H miller-5.6.2/c/parsing/lemon_action.c000066400000000000000000000126651354153536500175340ustar00rootroot00000000000000#include #include #include #include "lemon_action.h" #include "lemon_assert.h" #include "lemon_msort.h" /* ** Routines processing parser actions in the LEMON parser generator. */ /* Allocate a new parser action */ struct action *Action_new() { static struct action *freelist = 0; struct action *new; if (freelist==0) { int i; int amt = 100; freelist = (struct action *)malloc (sizeof(struct action)*amt) ; if (freelist==0) { fprintf(stderr,"Unable to allocate memory for a new parser action."); exit(1); } for (i=0; inext; return new; } /* Compare two actions */ static int actioncmp(struct action *ap1, struct action *ap2) { int rc; rc = ap1->sp->index - ap2->sp->index; if (rc==0) rc = (int)ap1->type - (int)ap2->type; if (rc==0) { assert(ap1->type==REDUCE || ap1->type==RD_RESOLVED || ap1->type==CONFLICT); assert(ap2->type==REDUCE || ap2->type==RD_RESOLVED || ap2->type==CONFLICT); rc = ap1->x.rp->index - ap2->x.rp->index; } return rc; } /* Sort parser actions */ struct action *Action_sort(struct action *ap) { ap = (struct action *)msort((char *)ap,(char **)&ap->next,actioncmp); return ap; } void Action_add( struct action **app, enum e_action type, struct symbol *sp, char *arg) { struct action *new; new = Action_new(); new->next = *app; *app = new; new->type = type; new->sp = sp; if (type==SHIFT) { new->x.stp = (struct state *)arg; } else { new->x.rp = (struct rule *)arg; } } /* Free all memory associated with the given acttab */ void acttab_free(acttab *p) { free (p->aAction); free (p->aLookahead); free (p); } /* Allocate a new acttab structure */ acttab *acttab_alloc(void) { acttab *p = malloc (sizeof(*p)) ; if (p==0) { fprintf(stderr,"Unable to allocate memory for a new acttab."); exit(1); } memset(p, 0, sizeof(*p)); return p; } /* Add a new action to the current transaction set */ void acttab_action(acttab *p, int lookahead, int action) { if (p->nLookahead>=p->nLookaheadAlloc) { p->nLookaheadAlloc += 25; p->aLookahead = realloc (p->aLookahead, sizeof(p->aLookahead[0])*p->nLookaheadAlloc) ; if (p->aLookahead==0) { fprintf(stderr,"malloc failed\n"); exit(1); } } if (p->nLookahead==0) { p->mxLookahead = lookahead; p->mnLookahead = lookahead; p->mnAction = action; } else { if (p->mxLookaheadmxLookahead = lookahead; if (p->mnLookahead>lookahead) { p->mnLookahead = lookahead; p->mnAction = action; } } p->aLookahead[p->nLookahead].lookahead = lookahead; p->aLookahead[p->nLookahead].action = action; p->nLookahead++; } /* ** Add the transaction set built up with prior calls to acttab_action() ** into the current action table. Then reset the transaction set back ** to an empty set in preparation for a new round of acttab_action() calls. ** ** Return the offset into the action table of the new transaction. */ int acttab_insert(acttab *p) { int i, j, k, n; assert (p->nLookahead>0) ; /* Make sure we have enough space to hold the expanded action table ** in the worst case. The worst case occurs if the transaction set ** must be appended to the current action table */ n = p->mxLookahead + 1; if (p->nAction + n >= p->nActionAlloc) { int oldAlloc = p->nActionAlloc; p->nActionAlloc = p->nAction + n + p->nActionAlloc + 20; p->aAction = realloc (p->aAction, sizeof(p->aAction[0])*p->nActionAlloc); if (p->aAction==0) { fprintf(stderr,"malloc failed\n"); exit(1); } for(i=oldAlloc; inActionAlloc; i++){ p->aAction[i].lookahead = -1; p->aAction[i].action = -1; } } /* Scan the existing action table looking for an offset where we can ** insert the current transaction set. Fall out of the loop when that ** offset is found. In the worst case, we fall out of the loop when ** i reaches p->nAction, which means we append the new transaction set. ** ** i is the index in p->aAction[] where p->mnLookahead is inserted. */ for(i=0; inAction+p->mnLookahead; i++){ if (p->aAction[i].lookahead<0) { for(j=0; jnLookahead; j++){ k = p->aLookahead[j].lookahead - p->mnLookahead + i; if (k<0) break; if (p->aAction[k].lookahead>=0) break; } if (jnLookahead) continue; for(j=0; jnAction; j++){ if (p->aAction[j].lookahead==j+p->mnLookahead-i) break; } if (j==p->nAction) { break; /* Fits in empty slots */ } } else if (p->aAction[i].lookahead==p->mnLookahead) { if (p->aAction[i].action!=p->mnAction) continue; for(j=0; jnLookahead; j++){ k = p->aLookahead[j].lookahead - p->mnLookahead + i; if (k<0 || k>=p->nAction) break; if (p->aLookahead[j].lookahead!=p->aAction[k].lookahead) break; if (p->aLookahead[j].action!=p->aAction[k].action) break; } if (jnLookahead) continue; n = 0; for(j=0; jnAction; j++){ if (p->aAction[j].lookahead<0) continue; if (p->aAction[j].lookahead==j+p->mnLookahead-i) n++; } if (n==p->nLookahead) { break; /* Same as a prior transaction set */ } } } /* Insert transaction set at index i. */ for(j=0; jnLookahead; j++){ k = p->aLookahead[j].lookahead - p->mnLookahead + i; p->aAction[k] = p->aLookahead[j]; if (k>=p->nAction) p->nAction = k+1; } p->nLookahead = 0; /* Return the offset that is added to the lookahead in order to get the ** index into yy_action of the action */ return i - p->mnLookahead; } miller-5.6.2/c/parsing/lemon_action.h000066400000000000000000000033221354153536500175270ustar00rootroot00000000000000#ifndef LEMON_ACTION_H #define LEMON_ACTION_H #include "lemon_structs.h" struct action *Action_new(); struct action *Action_sort(); void Action_add( struct action **app, enum e_action type, struct symbol *sp, char *arg); /* ** This module implements routines use to construct the yy_action[] table. */ /* ** The state of the yy_action table under construction is an instance of ** the following structure */ typedef struct acttab acttab; struct acttab { int nAction; /* Number of used slots in aAction[] */ int nActionAlloc; /* Slots allocated for aAction[] */ struct { int lookahead; /* Value of the lookahead token */ int action; /* Action to take on the given lookahead */ } *aAction, /* The yy_action[] table under construction */ *aLookahead; /* A single new transaction set */ int mnLookahead; /* Minimum aLookahead[].lookahead */ int mnAction; /* Action associated with mnLookahead */ int mxLookahead; /* Maximum aLookahead[].lookahead */ int nLookahead; /* Used slots in aLookahead[] */ int nLookaheadAlloc; /* Slots allocated in aLookahead[] */ }; /* Return the number of entries in the yy_action table */ #define acttab_size(X) ((X)->nAction) /* The value for the N-th entry in yy_action */ #define acttab_yyaction(X,N) ((X)->aAction[N].action) /* The value for the N-th entry in yy_lookahead */ #define acttab_yylookahead(X,N) ((X)->aAction[N].lookahead) struct acttab *acttab_alloc(void); void acttab_free(acttab *p); acttab *acttab_alloc(void); void acttab_action(acttab *p, int lookahead, int action); int acttab_insert(acttab *p); #endif // LEMON_ACTION_H miller-5.6.2/c/parsing/lemon_assert.c000066400000000000000000000003051354153536500175440ustar00rootroot00000000000000#include #include #include "lemon_assert.h" void lemon_assert(char *file, int line) { fprintf(stderr,"Assertion failed on line %d of file \"%s\"\n", line, file); exit(1); } miller-5.6.2/c/parsing/lemon_assert.h000066400000000000000000000003361354153536500175550ustar00rootroot00000000000000#ifndef LEMON_ASSERT_H #define LEMON_ASSERT_H void lemon_assert(char *file, int line); #ifndef NDEBUG # define assert(X) if(!(X))lemon_assert(__FILE__,__LINE__) #else # define assert(X) #endif #endif // LEMON_ASSERT_H miller-5.6.2/c/parsing/lemon_config_list.c000066400000000000000000000210421354153536500205440ustar00rootroot00000000000000#include #include #include #include "lemon_config_list.h" #include "lemon_assert.h" #include "lemon_error.h" #include "lemon_msort.h" #include "lemon_plink.h" #include "lemon_set.h" /* ** Routines to processing a configuration list and building a state ** in the LEMON parser generator. */ // ---------------------------------------------------------------- /* Compare two configurations */ int Configcmp(a,b) struct config *a; struct config *b; { int x; x = a->rp->index - b->rp->index; if (x==0) x = a->dot - b->dot; return x; } // ---------------------------------------------------------------- static struct config *freelist = 0; /* List of free configurations */ static struct config *current = 0; /* Top of list of configurations */ static struct config **currentend = 0; /* Last on list of configs */ static struct config *basis = 0; /* Top of list of basis configs */ static struct config **basisend = 0; /* End of list of basis configs */ /* Return a pointer to a new configuration */ static struct config *newconfig() { struct config *new; if (freelist==0) { int i; int amt = 3; freelist = (struct config *)malloc (sizeof(struct config)*amt) ; if (freelist==0) { fprintf(stderr,"Unable to allocate memory for a new configuration."); exit(1); } for(i=0; inext; return new; } /* The configuration "old" is no longer used */ static void deleteconfig(struct config *old) { old->next = freelist; freelist = old; } /* Initialized the configuration list builder */ void Configlist_init() { current = 0; currentend = ¤t; basis = 0; basisend = &basis; Configtable_init(); return; } /* Initialized the configuration list builder */ void Configlist_reset() { current = 0; currentend = ¤t; basis = 0; basisend = &basis; Configtable_clear(0); return; } /* Add another configuration to the configuration list */ struct config *Configlist_add( struct rule *rp, /* The rule */ int dot) /* Index into the RHS of the rule where the dot goes */ { struct config *cfp, model; assert (currentend!=0) ; model.rp = rp; model.dot = dot; cfp = Configtable_find(&model); if (cfp==0) { cfp = newconfig(); cfp->rp = rp; cfp->dot = dot; cfp->fws = SetNew(); cfp->stp = 0; cfp->fplp = cfp->bplp = 0; cfp->next = 0; cfp->bp = 0; *currentend = cfp; currentend = &cfp->next; Configtable_insert(cfp); } return cfp; } /* Add a basis configuration to the configuration list */ struct config *Configlist_addbasis(struct rule *rp, int dot) { struct config *cfp, model; assert (basisend!=0); assert (currentend!=0); model.rp = rp; model.dot = dot; cfp = Configtable_find(&model); if (cfp == 0) { cfp = newconfig(); cfp->rp = rp; cfp->dot = dot; cfp->fws = SetNew(); cfp->stp = 0; cfp->fplp = cfp->bplp = 0; cfp->next = 0; cfp->bp = 0; *currentend = cfp; currentend = &cfp->next; *basisend = cfp; basisend = &cfp->bp; Configtable_insert(cfp); } return cfp; } /* Compute the closure of the configuration list */ void Configlist_closure(struct lemon *lemp) { struct config *cfp, *newcfp; struct rule *rp, *newrp; struct symbol *sp, *xsp; int i, dot; assert (currentend!=0) ; for(cfp=current; cfp; cfp=cfp->next){ rp = cfp->rp; dot = cfp->dot; if (dot>=rp->nrhs) continue; sp = rp->rhs[dot]; if (sp->type==NONTERMINAL) { if (sp->rule==0 && sp!=lemp->errsym) { ErrorMsg(lemp->filename,rp->line,"Nonterminal \"%s\" has no rules.", sp->name); lemp->errorcnt++; } for(newrp=sp->rule; newrp; newrp=newrp->nextlhs){ newcfp = Configlist_add(newrp,0); for (i=dot+1; inrhs; i++) { xsp = rp->rhs[i]; if (xsp->type==TERMINAL) { SetAdd(newcfp->fws,xsp->index); break; } else { SetUnion(newcfp->fws,xsp->firstset); if (xsp->lambda==B_FALSE) break; } } if (i==rp->nrhs) Plink_add(&cfp->fplp,newcfp); } } } return; } /* Sort the configuration list */ void Configlist_sort() { current = (struct config *)msort((char *)current,(char **)&(current->next),Configcmp); currentend = 0; return; } /* Sort the basis configuration list */ void Configlist_sortbasis() { basis = (struct config *)msort((char *)current,(char **)&(current->bp),Configcmp); basisend = 0; return; } /* Return a pointer to the head of the configuration list and ** reset the list */ struct config *Configlist_return() { struct config *old; old = current; current = 0; currentend = 0; return old; } /* Return a pointer to the head of the configuration list and ** reset the list */ struct config *Configlist_basis() { struct config *old; old = basis; basis = 0; basisend = 0; return old; } /* Free all elements of the given configuration list */ void Configlist_eat(struct config *cfp) { struct config *nextcfp; for(; cfp; cfp=nextcfp){ nextcfp = cfp->next; assert (cfp->fplp==0) ; assert (cfp->bplp==0) ; if (cfp->fws) SetFree(cfp->fws); deleteconfig(cfp); } return; } // ================================================================ /* Hash a configuration */ static int confighash(struct config *a) { int h=0; h = h*571 + a->rp->index*37 + a->dot; return h; } /* There is one instance of the following structure for each ** associative array of type "x4". */ struct s_x4 { int size; /* The number of available slots. Must be a power of 2, >= 1. */ int count; /* Number of currently slots filled */ struct s_x4node *tbl; /* The data stored here */ struct s_x4node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x4". */ typedef struct s_x4node { struct config *data; /* The data */ struct s_x4node *next; /* Next entry with the same hash */ struct s_x4node **from; /* Previous link */ } x4node; /* There is only one instance of the array, which is the following */ static struct s_x4 *x4a; /* Allocate a new associative array */ void Configtable_init() { if (x4a) return; x4a = (struct s_x4*)malloc (sizeof(struct s_x4)) ; if (x4a) { x4a->size = 64; x4a->count = 0; x4a->tbl = (x4node*)malloc ( (sizeof(x4node) + sizeof(x4node*))*64) ; if (x4a->tbl==0) { free(x4a); x4a = 0; } else { int i; x4a->ht = (x4node**)&(x4a->tbl[64]); for(i=0; i<64; i++) x4a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int Configtable_insert(struct config *data) { x4node *np; int h; int ph; if (x4a==0) return 0; ph = confighash(data); h = ph & (x4a->size-1); np = x4a->ht[h]; while (np) { if (Configcmp(np->data,data)==0) { /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if (x4a->count>=x4a->size) { /* Need to make the hash table bigger */ int i,size; struct s_x4 array; array.size = size = x4a->size*2; array.count = x4a->count; array.tbl = (x4node*)malloc( (sizeof(x4node) + sizeof(x4node*))*size) ; if (array.tbl==0) return 0; /* Fail due to malloc failure */ array.ht = (x4node**)&(array.tbl[size]); for(i=0; icount; i++){ x4node *oldnp, *newnp; oldnp = &(x4a->tbl[i]); h = confighash(oldnp->data) & (size-1); newnp = &(array.tbl[i]); if (array.ht[h]) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x4a->tbl); *x4a = array; } /* Insert the new data */ h = ph & (x4a->size-1); np = &(x4a->tbl[x4a->count++]); np->data = data; if (x4a->ht[h]) x4a->ht[h]->from = &(np->next); np->next = x4a->ht[h]; x4a->ht[h] = np; np->from = &(x4a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ struct config *Configtable_find(struct config *key) { int h; x4node *np; if (x4a==0) return 0; h = confighash(key) & (x4a->size-1); np = x4a->ht[h]; while (np) { if (Configcmp(np->data,key)==0) break; np = np->next; } return np ? np->data : 0; } /* Remove all data from the table. Pass each data to the function "f" ** as it is removed. ("f" may be null to avoid this step.) */ void Configtable_clear(int(*f)(struct config *)) { int i; if (x4a==0 || x4a->count==0) return; if (f) for(i=0; icount; i++) (*f)(x4a->tbl[i].data); for(i=0; isize; i++) x4a->ht[i] = 0; x4a->count = 0; return; } miller-5.6.2/c/parsing/lemon_config_list.h000066400000000000000000000013161354153536500205530ustar00rootroot00000000000000#ifndef LEMON_CONFIG_LIST_H #define LEMON_CONFIG_LIST_H #include "lemon_structs.h" int Configcmp(struct config *, struct config *); void Configlist_init(void); struct config *Configlist_add(struct rule *, int); struct config *Configlist_addbasis(struct rule *, int); void Configlist_closure(struct lemon*); void Configlist_sort(void); void Configlist_sortbasis(void); struct config *Configlist_return(void); struct config *Configlist_basis(void); void Configlist_eat(struct config *); void Configlist_reset(void); void Configtable_init(void); int Configtable_insert(struct config *); struct config *Configtable_find(struct config *); void Configtable_clear(int(*)(struct config *)); #endif // LEMON_CONFIG_LIST_H miller-5.6.2/c/parsing/lemon_dims.h000066400000000000000000000002601354153536500172040ustar00rootroot00000000000000#ifndef LEMON_DIMS_H #define LEMON_DIMS_H #ifdef TEST #define MAXRHS 5 /* Set low to exercise exception code */ #else #define MAXRHS 2000 #endif #endif // LEMON_DIMS_H miller-5.6.2/c/parsing/lemon_error.c000066400000000000000000000040211354153536500173730ustar00rootroot00000000000000#include #include #include "lemon_error.h" /***************** From the file "error.c" *********************************/ /* ** Code for printing error message. */ /* Find a good place to break "msg" so that its length is at least "min" ** but no more than "max". Make the point as close to max as possible. */ static int findbreak(char *msg, int min, int max) { int i,spot; char c; for(i=spot=min; i<=max; i++){ c = msg[i]; if (c=='\t') msg[i] = ' '; if (c=='\n') { msg[i] = ' '; spot = i; break; } if (c==0) { spot = i; break; } if (c=='-' && i0) { sprintf(prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno); } else { sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename); } prefixsize = strlen(prefix); availablewidth = LINEWIDTH - prefixsize; /* Generate the error message */ vsprintf(errmsg,format,ap); va_end(ap); errmsgsize = strlen(errmsg); /* Remove trailing '\n's from the error message. */ while (errmsgsize>0 && errmsg[errmsgsize-1]=='\n') { errmsg[--errmsgsize] = 0; } /* Print the error message */ base = 0; while (errmsg[base]!=0) { end = restart = findbreak(&errmsg[base],0,availablewidth); restart += base; while (errmsg[restart]==' ') restart++; fprintf(stdout,"%s%.*s\n",prefix,end,&errmsg[base]); base = restart; } } miller-5.6.2/c/parsing/lemon_error.h000066400000000000000000000002161354153536500174020ustar00rootroot00000000000000#ifndef LEMON_ERROR_H #define LEMON_ERROR_H #include "stdarg.h" void ErrorMsg(const char *, int,const char *, ...); #endif // LEMON_ERROR_H miller-5.6.2/c/parsing/lemon_fsm.c000066400000000000000000000341601354153536500170360ustar00rootroot00000000000000#include #include #include #include #include #include #include "lemon_fsm.h" #include "lemon_assert.h" #include "lemon_error.h" #include "lemon_memory.h" ////#include "lemon_msort.h" //#include "lemon_option.h" //#include "lemon_structs.h" #include "lemon_action.h" ////#include "lemon_string.h" #include "lemon_set.h" //#include "lemon_report.h" #include "lemon_symbol.h" #include "lemon_plink.h" #include "lemon_config_list.h" #include "lemon_state_table.h" ////#include "lemon_fsm.h" //#include "lemon_parse.h" /* ** Routines to construct the finite state machine for the LEMON ** parser generator. */ /* Find a precedence symbol of every rule in the grammar. ** ** Those rules which have a precedence symbol coded in the input ** grammar using the "[symbol]" construct will already have the ** rp->precsym field filled. Other rules take as their precedence ** symbol the first RHS symbol with a defined precedence. If there ** are not RHS symbols with a defined precedence, the precedence ** symbol field is left blank. */ void FindRulePrecedences(struct lemon *xp) { struct rule *rp; for(rp=xp->rule; rp; rp=rp->next){ if (rp->precsym==0) { int i; for(i=0; inrhs; i++){ if (rp->rhs[i]->prec>=0) { rp->precsym = rp->rhs[i]; break; } } } } return; } /* Find all nonterminals which will generate the empty string. ** Then go back and compute the first sets of every nonterminal. ** The first set is the set of all terminal symbols which can begin ** a string generated by that nonterminal. */ void FindFirstSets(struct lemon *lemp) { int i; struct rule *rp; int progress; for (i=0; insymbol; i++) { lemp->symbols[i]->lambda = B_FALSE; } for (i=lemp->nterminal; insymbol; i++) { lemp->symbols[i]->firstset = SetNew(); } /* First compute all lambdas */ do { progress = 0; for (rp=lemp->rule; rp; rp=rp->next) { if (rp->lhs->lambda) continue; for(i=0; inrhs; i++){ if (rp->rhs[i]->lambda==B_FALSE) break; } if (i==rp->nrhs) { rp->lhs->lambda = B_TRUE; progress = 1; } } } while (progress); /* Now compute all first sets */ do { struct symbol *s1, *s2; progress = 0; for(rp=lemp->rule; rp; rp=rp->next){ s1 = rp->lhs; for(i=0; inrhs; i++){ s2 = rp->rhs[i]; if (s2->type==TERMINAL) { progress += SetAdd(s1->firstset,s2->index); break; } else if (s1==s2) { if (s1->lambda==B_FALSE) break; } else { progress += SetUnion(s1->firstset,s2->firstset); if (s2->lambda==B_FALSE) break; } } } } while (progress); return; } /* Compute all LR(0) states for the grammar. Links ** are added to between some states so that the LR(1) follow sets ** can be computed later. */ static struct state *getstate(/* struct lemon * */); /* forward reference */ void FindStates(struct lemon *lemp) { struct symbol *sp; struct rule *rp; Configlist_init(); /* Find the start symbol */ if (lemp->start) { sp = Symbol_find(lemp->start); if (sp==0) { ErrorMsg(lemp->filename,0, "The specified start symbol \"%s\" is not \ in a nonterminal of the grammar. \"%s\" will be used as the start \ symbol instead.",lemp->start,lemp->rule->lhs->name); lemp->errorcnt++; sp = lemp->rule->lhs; } } else { sp = lemp->rule->lhs; } /* Make sure the start symbol doesn't occur on the right-hand side of ** any rule. Report an error if it does. (YACC would generate a new ** start symbol in this case.) */ for(rp=lemp->rule; rp; rp=rp->next){ int i; for(i=0; inrhs; i++){ if (rp->rhs[i]==sp) { ErrorMsg(lemp->filename,0, "The start symbol \"%s\" occurs on the \ right-hand side of a rule. This will result in a parser which \ does not work properly.",sp->name); lemp->errorcnt++; } } } /* The basis configuration set for the first state ** is all rules which have the start symbol as their ** left-hand side */ for(rp=sp->rule; rp; rp=rp->nextlhs){ struct config *newcfp; newcfp = Configlist_addbasis(rp,0); SetAdd(newcfp->fws,0); } /* Compute the first state. All other states will be ** computed automatically during the computation of the first one. ** The returned pointer to the first state is not used. */ (void)getstate(lemp); return; } /* Return a pointer to a state which is described by the configuration ** list which has been built from calls to Configlist_add. */ static void buildshifts(struct lemon *, struct state *); /* Forward ref */ static struct state *getstate(struct lemon *lemp) { struct config *cfp, *bp; struct state *stp; /* Extract the sorted basis of the new state. The basis was constructed ** by prior calls to "Configlist_addbasis()". */ Configlist_sortbasis(); bp = Configlist_basis(); /* Get a state with the same basis */ stp = State_find(bp); if (stp) { /* A state with the same basis already exists! Copy all the follow-set ** propagation links from the state under construction into the ** preexisting state, then return a pointer to the preexisting state */ struct config *x, *y; for(x=bp, y=stp->bp; x && y; x=x->bp, y=y->bp){ Plink_copy(&y->bplp,x->bplp); Plink_delete(x->fplp); x->fplp = x->bplp = 0; } cfp = Configlist_return(); Configlist_eat(cfp); } else { /* This really is a new state. Construct all the details */ Configlist_closure(lemp); /* Compute the configuration closure */ Configlist_sort(); /* Sort the configuration closure */ cfp = Configlist_return(); /* Get a pointer to the config list */ stp = State_new(); /* A new state structure */ MemoryCheck(stp); stp->bp = bp; /* Remember the configuration basis */ stp->cfp = cfp; /* Remember the configuration closure */ stp->index = lemp->nstate++; /* Every state gets a sequence number */ stp->ap = 0; /* No actions, yet. */ State_insert(stp,stp->bp); /* Add to the state table */ buildshifts(lemp,stp); /* Recursively compute successor states */ } return stp; } /* Construct all successor states to the given state. A "successor" ** state is any state which can be reached by a shift action. */ static void buildshifts( struct lemon *lemp, struct state *stp) /* The state from which successors are computed */ { struct config *cfp; /* For looping thru the config closure of "stp" */ struct config *bcfp; /* For the inner loop on config closure of "stp" */ struct config *new; /* */ struct symbol *sp; /* Symbol following the dot in configuration "cfp" */ struct symbol *bsp; /* Symbol following the dot in configuration "bcfp" */ struct state *newstp; /* A pointer to a successor state */ /* Each configuration becomes complete after it contibutes to a successor ** state. Initially, all configurations are incomplete */ for(cfp=stp->cfp; cfp; cfp=cfp->next) cfp->status = INCOMPLETE; /* Loop through all configurations of the state "stp" */ for(cfp=stp->cfp; cfp; cfp=cfp->next){ if (cfp->status==COMPLETE) continue; /* Already used by inner loop */ if (cfp->dot>=cfp->rp->nrhs) continue; /* Can't shift this config */ Configlist_reset(); /* Reset the new config set */ sp = cfp->rp->rhs[cfp->dot]; /* Symbol after the dot */ /* For every configuration in the state "stp" which has the symbol "sp" ** following its dot, add the same configuration to the basis set under ** construction but with the dot shifted one symbol to the right. */ for(bcfp=cfp; bcfp; bcfp=bcfp->next){ if (bcfp->status==COMPLETE) continue; /* Already used */ if (bcfp->dot>=bcfp->rp->nrhs) continue; /* Can't shift this one */ bsp = bcfp->rp->rhs[bcfp->dot]; /* Get symbol after dot */ if (bsp!=sp) continue; /* Must be same as for "cfp" */ bcfp->status = COMPLETE; /* Mark this config as used */ new = Configlist_addbasis(bcfp->rp,bcfp->dot+1); Plink_add(&new->bplp,bcfp); } /* Get a pointer to the state described by the basis configuration set ** constructed in the preceding loop */ newstp = getstate(lemp); /* The state "newstp" is reached from the state "stp" by a shift action ** on the symbol "sp" */ Action_add(&stp->ap,SHIFT,sp,(char *)newstp); } } /* ** Construct the propagation links */ void FindLinks(struct lemon *lemp) { int i; struct config *cfp, *other; struct state *stp; struct plink *plp; /* Housekeeping detail: ** Add to every propagate link a pointer back to the state to ** which the link is attached. */ for(i=0; instate; i++){ stp = lemp->sorted[i]; for(cfp=stp->cfp; cfp; cfp=cfp->next){ cfp->stp = stp; } } /* Convert all backlinks into forward links. Only the forward ** links are used in the follow-set computation. */ for(i=0; instate; i++){ stp = lemp->sorted[i]; for(cfp=stp->cfp; cfp; cfp=cfp->next){ for(plp=cfp->bplp; plp; plp=plp->next){ other = plp->cfp; Plink_add(&other->fplp,cfp); } } } } /* Compute all followsets. ** ** A followset is the set of all symbols which can come immediately ** after a configuration. */ void FindFollowSets(struct lemon *lemp) { int i; struct config *cfp; struct plink *plp; int progress; int change; for(i=0; instate; i++){ for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){ cfp->status = INCOMPLETE; } } do { progress = 0; for (i=0; instate; i++){ for (cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next) { if (cfp->status==COMPLETE) continue; for (plp=cfp->fplp; plp; plp=plp->next) { change = SetUnion(plp->cfp->fws,cfp->fws); if (change) { plp->cfp->status = INCOMPLETE; progress = 1; } } cfp->status = COMPLETE; } } } while (progress); } static int resolve_conflict(); /* Compute the reduce actions, and resolve conflicts. */ void FindActions(struct lemon *lemp) { int i,j; struct config *cfp; struct state *stp; struct symbol *sp; struct rule *rp; /* Add all of the reduce actions ** A reduce action is added for each element of the followset of ** a configuration which has its dot at the extreme right. */ for(i=0; instate; i++){ /* Loop over all states */ stp = lemp->sorted[i]; for(cfp=stp->cfp; cfp; cfp=cfp->next){ /* Loop over all configurations */ if (cfp->rp->nrhs==cfp->dot) { /* Is dot at extreme right? */ for(j=0; jnterminal; j++){ if (SetFind(cfp->fws,j)) { /* Add a reduce action to the state "stp" which will reduce by the ** rule "cfp->rp" if the lookahead symbol is "lemp->symbols[j]" */ Action_add(&stp->ap,REDUCE,lemp->symbols[j],(char *)cfp->rp); } } } } } /* Add the accepting token */ if (lemp->start) { sp = Symbol_find(lemp->start); if (sp==0) sp = lemp->rule->lhs; } else { sp = lemp->rule->lhs; } /* Add to the first state (which is always the starting state of the ** finite state machine) an action to ACCEPT if the lookahead is the ** start nonterminal. */ Action_add(&lemp->sorted[0]->ap,ACCEPT,sp,0); /* Resolve conflicts */ for(i=0; instate; i++){ struct action *ap, *nap; struct state *stp; stp = lemp->sorted[i]; assert (stp->ap) ; stp->ap = Action_sort(stp->ap); for(ap=stp->ap; ap && ap->next; ap=ap->next){ for(nap=ap->next; nap && nap->sp==ap->sp; nap=nap->next){ /* The two actions "ap" and "nap" have the same lookahead. ** Figure out which one should be used */ lemp->nconflict += resolve_conflict(ap,nap,lemp->errsym); } } } /* Report an error for each rule that can never be reduced. */ for(rp=lemp->rule; rp; rp=rp->next) rp->canReduce = B_FALSE; for(i=0; instate; i++){ struct action *ap; for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){ if (ap->type==REDUCE) ap->x.rp->canReduce = B_TRUE; } } for(rp=lemp->rule; rp; rp=rp->next){ if (rp->canReduce) continue; ErrorMsg(lemp->filename,rp->ruleline,"This rule can not be reduced.\n"); lemp->errorcnt++; } } /* Resolve a conflict between the two given actions. If the ** conflict can't be resolve, return non-zero. ** ** NO LONGER TRUE: ** To resolve a conflict, first look to see if either action ** is on an error rule. In that case, take the action which ** is not associated with the error rule. If neither or both ** actions are associated with an error rule, then try to ** use precedence to resolve the conflict. ** ** If either action is a SHIFT, then it must be apx. This ** function won't work if apx->type==REDUCE and apy->type==SHIFT. */ static int resolve_conflict( struct action *apx, struct action *apy, struct symbol *errsym) /* The error symbol (if defined. NULL otherwise) */ { struct symbol *spx, *spy; int errcnt = 0; assert (apx->sp==apy->sp) ; /* Otherwise there would be no conflict */ if (apx->type==SHIFT && apy->type==REDUCE) { spx = apx->sp; spy = apy->x.rp->precsym; if (spy==0 || spx->prec<0 || spy->prec<0) { /* Not enough precedence information. */ apy->type = CONFLICT; errcnt++; } else if (spx->prec>spy->prec) { /* Lower precedence wins */ apy->type = RD_RESOLVED; } else if (spx->precprec) { apx->type = SH_RESOLVED; } else if (spx->prec==spy->prec && spx->assoc==RIGHT) { /* Use operator */ apy->type = RD_RESOLVED; /* associativity */ } else if (spx->prec==spy->prec && spx->assoc==LEFT) { /* to break tie */ apx->type = SH_RESOLVED; } else { assert (spx->prec==spy->prec && spx->assoc==NONE) ; apy->type = CONFLICT; errcnt++; } } else if (apx->type==REDUCE && apy->type==REDUCE) { spx = apx->x.rp->precsym; spy = apy->x.rp->precsym; if (spx==0 || spy==0 || spx->prec<0 || spy->prec<0 || spx->prec==spy->prec) { apy->type = CONFLICT; errcnt++; } else if (spx->prec>spy->prec) { apy->type = RD_RESOLVED; } else if (spx->precprec) { apx->type = RD_RESOLVED; } } else { assert ( apx->type==SH_RESOLVED || apx->type==RD_RESOLVED || apx->type==CONFLICT || apy->type==SH_RESOLVED || apy->type==RD_RESOLVED || apy->type==CONFLICT ) ; /* The REDUCE/SHIFT case cannot happen because SHIFTs come before ** REDUCEs on the list. If we reach this point it must be because ** the parser conflict had already been resolved. */ } return errcnt; } miller-5.6.2/c/parsing/lemon_fsm.h000066400000000000000000000004541354153536500170420ustar00rootroot00000000000000#ifndef LEMON_FSM_H #define LEMON_FSM_H #include "lemon_structs.h" void FindRulePrecedences(struct lemon*); void FindFirstSets(struct lemon*); void FindStates(struct lemon*); void FindLinks(struct lemon*); void FindFollowSets(struct lemon*); void FindActions(struct lemon*); #endif // LEMON_FSM_H miller-5.6.2/c/parsing/lemon_main.c000066400000000000000000000127001354153536500171710ustar00rootroot00000000000000/* ** The author of this program disclaims copyright. */ #include #include #include #include #include #include #include "lemon_dims.h" #include "lemon_option.h" #include "lemon_structs.h" #include "lemon_string.h" #include "lemon_set.h" #include "lemon_report.h" #include "lemon_symbol.h" #include "lemon_state_table.h" #include "lemon_fsm.h" #include "lemon_parse.h" // ---------------------------------------------------------------- static int nDefine = 0; /* Number of -D options on the command line */ static char **azDefine = 0; /* Name of the -D macros */ /* This routine is called with the argument to each -D command-line option. ** Add the macro defined to the azDefine array. */ static void handle_D_option(char *z) { char **paz; nDefine++; azDefine = realloc(azDefine, sizeof(azDefine[0])*nDefine); if (azDefine == 0) { fprintf(stderr,"out of memory\n"); exit(1); } paz = &azDefine[nDefine-1]; *paz = malloc (strlen(z)+1) ; if (*paz == 0) { fprintf(stderr, "out of memory\n"); exit(1); } strcpy(*paz, z); for(z=*paz; *z && *z!='='; z++){} *z = 0; } /* Lemon entry point */ int main(int argc, char **argv) { static int version = 0; static int rpflag = 0; static int basisflag = 0; static int compress = 0; static int quiet = 0; static int statistics = 0; static int mhflag = 0; static int suppress_line_directives = 0; static struct s_options options[] = { {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."}, {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."}, {OPT_FSTR, "D", (char*)handle_D_option, "Define an %ifdef macro."}, {OPT_FLAG, "g", (char*)&rpflag, "Print grammar without actions."}, {OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file"}, {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."}, {OPT_FLAG, "s", (char*)&statistics, "Print parser stats to standard output."}, {OPT_FLAG, "l", (char*)&suppress_line_directives, "Don't put #line directives in autogenned code."}, {OPT_FLAG, "x", (char*)&version, "Print the version number."}, {OPT_FLAG,0,0,0} }; int i; struct lemon lem; OptInit(argv, options, stderr); if (version) { printf("Lemon version 1.0.1\n"); exit(0); } if (OptNArgs()!=1) { fprintf(stderr,"Exactly one filename argument is required.\n"); exit(1); } lem.errorcnt = 0; /* Initialize the machine */ Strsafe_init(); Symbol_init(); State_init(); lem.argv0 = argv[0]; lem.filename = OptArg(0); lem.basisflag = basisflag; lem.has_fallback = 0; lem.nconflict = 0; lem.name = lem.include = lem.arg = lem.tokentype = lem.start = 0; lem.vartype = 0; lem.stacksize = 0; lem.error = lem.overflow = lem.failure = lem.accept = lem.tokendest = lem.tokenprefix = lem.outname = lem.extracode = 0; lem.vardest = 0; lem.tablesize = 0; Symbol_new("$"); lem.errsym = Symbol_new("error"); /* Parse the input file */ Parse(&lem, nDefine, azDefine); if (lem.errorcnt) exit(lem.errorcnt); if (lem.rule==0) { fprintf(stderr, "Empty grammar.\n"); exit(1); } /* Count and index the symbols of the grammar */ lem.nsymbol = Symbol_count(); Symbol_new("{default}"); lem.symbols = Symbol_arrayof(); for (i = 0; i <= lem.nsymbol; i++) lem.symbols[i]->index = i; qsort(lem.symbols,lem.nsymbol+1,sizeof(struct symbol*), (int(*)())Symbolcmpp); for (i = 0; i <= lem.nsymbol; i++) lem.symbols[i]->index = i; for (i = 1; isupper(lem.symbols[i]->name[0]); i++) ; lem.nterminal = i; /* Generate a reprint of the grammar, if requested on the command line */ if (rpflag) { Reprint(&lem); } else { /* Initialize the size for all follow and first sets */ SetSize(lem.nterminal); /* Find the precedence for every production rule (that has one) */ FindRulePrecedences(&lem); /* Compute the lambda-nonterminals and the first-sets for every ** nonterminal */ FindFirstSets(&lem); /* Compute all LR(0) states. Also record follow-set propagation ** links so that the follow-set can be computed later */ lem.nstate = 0; FindStates(&lem); lem.sorted = State_arrayof(); /* Tie up loose ends on the propagation links */ FindLinks(&lem); /* Compute the follow set of every reducible configuration */ FindFollowSets(&lem); /* Compute the action tables */ FindActions(&lem); /* Compress the action tables */ if (compress==0) CompressTables(&lem); /* Generate a report of the parser generated (the "y.output" file) */ if (!quiet) ReportOutput(&lem); /* Generate the source code for the parser */ ReportTable(&lem, mhflag, suppress_line_directives); /* Produce a header file for use by the scanner. (This step is ** omitted if the "-m" option is used because makeheaders will ** generate the file for us.) */ if (!mhflag) ReportHeader(&lem); } if (statistics) { printf("Parser statistics: %d terminals, %d nonterminals, %d rules\n", lem.nterminal, lem.nsymbol - lem.nterminal, lem.nrule); printf(" %d states, %d parser table entries, %d conflicts\n", lem.nstate, lem.tablesize, lem.nconflict); } if (lem.nconflict) { fprintf(stderr,"%d resolvable parsing conflicts.\n",lem.nconflict); } //exit(lem.errorcnt + lem.nconflict); // JRK 2016-05-23 // According to the manual, these conflicts are resolved by taking the first match. // This is OK for my purposes. //return (lem.errorcnt + lem.nconflict); return (lem.errorcnt); } miller-5.6.2/c/parsing/lemon_memory.c000066400000000000000000000003051354153536500175530ustar00rootroot00000000000000#include #include #include "lemon_memory.h" // Report an out-of-memory condition and abort. void memory_error() { fprintf(stderr, "Out of memory. Aborting.\n"); exit(1); } miller-5.6.2/c/parsing/lemon_memory.h000066400000000000000000000002431354153536500175610ustar00rootroot00000000000000#ifndef LEMON_MEMORY_H #define LEMON_MEMORY_H extern void memory_error(); #define MemoryCheck(X) if ((X) == 0) { \ memory_error(); \ } #endif // LEMON_MEMORY_H miller-5.6.2/c/parsing/lemon_msort.c000066400000000000000000000053211354153536500174120ustar00rootroot00000000000000#include "lemon_msort.h" /* ** A generic merge-sort program. ** ** USAGE: ** Let "ptr" be a pointer to some structure which is at the head of ** a null-terminated list. Then to sort the list call: ** ** ptr = msort(ptr,&(ptr->next),cmpfnc); ** ** In the above, "cmpfnc" is a pointer to a function which compares ** two instances of the structure and returns an integer, as in ** strcmp. The second argument is a pointer to the pointer to the ** second element of the linked list. This address is used to compute ** the offset to the "next" field within the structure. The offset to ** the "next" field must be constant for all structures in the list. ** ** The function returns a new pointer which is the head of the list ** after sorting. ** ** ALGORITHM: ** Merge-sort. */ /* ** Return a pointer to the next structure in the linked list. */ #define NEXT(A) (*(char**)(((unsigned long)A)+offset)) /* ** Inputs: ** a: A sorted, null-terminated linked list. (May be null). ** b: A sorted, null-terminated linked list. (May be null). ** cmp: A pointer to the comparison function. ** offset: Offset in the structure to the "next" field. ** ** Return Value: ** A pointer to the head of a sorted list containing the elements ** of both a and b. ** ** Side effects: ** The "next" pointers for elements in the lists a and b are ** changed. */ static char *merge( char *a, char *b, int (*cmp)(), int offset) { char *ptr, *head; if (a==0) { head = b; } else if (b==0) { head = a; } else { if ((*cmp)(a,b)<0) { ptr = a; a = NEXT(a); } else { ptr = b; b = NEXT(b); } head = ptr; while (a && b) { if ((*cmp)(a,b)<0) { NEXT(ptr) = a; ptr = a; a = NEXT(a); } else { NEXT(ptr) = b; ptr = b; b = NEXT(b); } } if (a) NEXT(ptr) = a; else NEXT(ptr) = b; } return head; } /* ** Inputs: ** list: Pointer to a singly-linked list of structures. ** next: Pointer to pointer to the second element of the list. ** cmp: A comparison function. ** ** Return Value: ** A pointer to the head of a sorted list containing the elements ** orginally in list. ** ** Side effects: ** The "next" pointers for elements in list are changed. */ #define LISTSIZE 30 char *msort(char *list, char **next, int (*cmp)()) { unsigned long offset; char *ep; char *set[LISTSIZE]; int i; offset = (unsigned long)next - (unsigned long)list; for(i=0; i #include #include #include "lemon_option.h" /************************ From the file "option.c" **************************/ static char **argv; static struct s_options *op; static FILE *errstream; #define ISOPT(X) ((X)[0]=='-'||(X)[0]=='+'||strchr((X),'=')!=0) // ---------------------------------------------------------------- // Print the command line with a caret pointing to the k-th character // of the nth field. static void errline(int n, int k, FILE *err) { int spcnt, i; spcnt = 0; if (argv[0]) fprintf(err,"%s",argv[0]); spcnt = strlen(argv[0]) + 1; for(i=1; istate = WAITING_FOR_DECL_KEYWORD; } else if (islower(x[0])) { psp->lhs = Symbol_new(x); psp->nrhs = 0; psp->lhsalias = 0; psp->state = WAITING_FOR_ARROW; } else if (x[0]=='{') { if (psp->prevrule==0) { ErrorMsg(psp->filename,psp->tokenlineno, "There is not prior rule opon which to attach the code \ fragment which begins on this line."); psp->errorcnt++; } else if (psp->prevrule->code!=0) { ErrorMsg(psp->filename,psp->tokenlineno, "Code fragment beginning on this line is not the first \ to follow the previous rule."); psp->errorcnt++; } else { psp->prevrule->line = psp->tokenlineno; psp->prevrule->code = &x[1]; } } else if (x[0]=='[') { psp->state = PRECEDENCE_MARK_1; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Token \"%s\" should be either \"%%\" or a nonterminal name.", x); psp->errorcnt++; } break; case PRECEDENCE_MARK_1: if (!isupper(x[0])) { ErrorMsg(psp->filename,psp->tokenlineno, "The precedence symbol must be a terminal."); psp->errorcnt++; } else if (psp->prevrule==0) { ErrorMsg(psp->filename,psp->tokenlineno, "There is no prior rule to assign precedence \"[%s]\".",x); psp->errorcnt++; } else if (psp->prevrule->precsym!=0) { ErrorMsg(psp->filename,psp->tokenlineno, "Precedence mark on this line is not the first \ to follow the previous rule."); psp->errorcnt++; } else { psp->prevrule->precsym = Symbol_new(x); } psp->state = PRECEDENCE_MARK_2; break; case PRECEDENCE_MARK_2: if (x[0]!=']') { ErrorMsg(psp->filename,psp->tokenlineno, "Missing \"]\" on precedence mark."); psp->errorcnt++; } psp->state = WAITING_FOR_DECL_OR_RULE; break; case WAITING_FOR_ARROW: if (x[0]==':' && x[1]==':' && x[2]=='=') { psp->state = IN_RHS; } else if (x[0]=='(') { psp->state = LHS_ALIAS_1; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Expected to see a \":\" following the LHS symbol \"%s\".", psp->lhs->name); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case LHS_ALIAS_1: if (isalpha(x[0])) { psp->lhsalias = x; psp->state = LHS_ALIAS_2; } else { ErrorMsg(psp->filename,psp->tokenlineno, "\"%s\" is not a valid alias for the LHS \"%s\"\n", x,psp->lhs->name); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case LHS_ALIAS_2: if (x[0]==')') { psp->state = LHS_ALIAS_3; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case LHS_ALIAS_3: if (x[0]==':' && x[1]==':' && x[2]=='=') { psp->state = IN_RHS; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Missing \"->\" following: \"%s(%s)\".", psp->lhs->name,psp->lhsalias); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case IN_RHS: if (x[0]=='.') { struct rule *rp; rp = (struct rule *)malloc (sizeof(struct rule) + sizeof(struct symbol*)*psp->nrhs + sizeof(char*)*psp->nrhs) ; if (rp==0) { ErrorMsg(psp->filename,psp->tokenlineno, "Can't allocate enough memory for this rule."); psp->errorcnt++; psp->prevrule = 0; } else { int i; rp->ruleline = psp->tokenlineno; rp->rhs = (struct symbol**)&rp[1]; rp->rhsalias = (char**)&(rp->rhs[psp->nrhs]); for(i=0; inrhs; i++) { rp->rhs[i] = psp->rhs[i]; rp->rhsalias[i] = psp->alias[i]; } rp->lhs = psp->lhs; rp->lhsalias = psp->lhsalias; rp->nrhs = psp->nrhs; rp->code = 0; rp->precsym = 0; rp->index = psp->gp->nrule++; rp->nextlhs = rp->lhs->rule; rp->lhs->rule = rp; rp->next = 0; if (psp->firstrule==0) { psp->firstrule = psp->lastrule = rp; } else { psp->lastrule->next = rp; psp->lastrule = rp; } psp->prevrule = rp; } psp->state = WAITING_FOR_DECL_OR_RULE; } else if (isalpha(x[0])) { if (psp->nrhs>=MAXRHS) { ErrorMsg(psp->filename,psp->tokenlineno, "Too many symbol on RHS or rule beginning at \"%s\".", x); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } else { psp->rhs[psp->nrhs] = Symbol_new(x); psp->alias[psp->nrhs] = 0; psp->nrhs++; } } else if (x[0]=='(' && psp->nrhs>0) { psp->state = RHS_ALIAS_1; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Illegal character on RHS of rule: \"%s\".",x); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case RHS_ALIAS_1: if (isalpha(x[0])) { psp->alias[psp->nrhs-1] = x; psp->state = RHS_ALIAS_2; } else { ErrorMsg(psp->filename,psp->tokenlineno, "\"%s\" is not a valid alias for the RHS symbol \"%s\"\n", x,psp->rhs[psp->nrhs-1]->name); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case RHS_ALIAS_2: if (x[0]==')') { psp->state = IN_RHS; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case WAITING_FOR_DECL_KEYWORD: if (isalpha(x[0])) { psp->declkeyword = x; psp->declargslot = 0; psp->decllnslot = 0; psp->state = WAITING_FOR_DECL_ARG; if (strcmp(x,"name")==0) { psp->declargslot = &(psp->gp->name); } else if (strcmp(x,"include")==0) { psp->declargslot = &(psp->gp->include); psp->decllnslot = &psp->gp->includeln; } else if (strcmp(x,"code")==0) { psp->declargslot = &(psp->gp->extracode); psp->decllnslot = &psp->gp->extracodeln; } else if (strcmp(x,"token_destructor")==0) { psp->declargslot = &psp->gp->tokendest; psp->decllnslot = &psp->gp->tokendestln; } else if (strcmp(x,"default_destructor")==0) { psp->declargslot = &psp->gp->vardest; psp->decllnslot = &psp->gp->vardestln; } else if (strcmp(x,"token_prefix")==0) { psp->declargslot = &psp->gp->tokenprefix; } else if (strcmp(x,"syntax_error")==0) { psp->declargslot = &(psp->gp->error); psp->decllnslot = &psp->gp->errorln; } else if (strcmp(x,"parse_accept")==0) { psp->declargslot = &(psp->gp->accept); psp->decllnslot = &psp->gp->acceptln; } else if (strcmp(x,"parse_failure")==0) { psp->declargslot = &(psp->gp->failure); psp->decllnslot = &psp->gp->failureln; } else if (strcmp(x,"stack_overflow")==0) { psp->declargslot = &(psp->gp->overflow); psp->decllnslot = &psp->gp->overflowln; } else if (strcmp(x,"extra_argument")==0) { psp->declargslot = &(psp->gp->arg); } else if (strcmp(x,"token_type")==0) { psp->declargslot = &(psp->gp->tokentype); } else if (strcmp(x,"default_type")==0) { psp->declargslot = &(psp->gp->vartype); } else if (strcmp(x,"stack_size")==0) { psp->declargslot = &(psp->gp->stacksize); } else if (strcmp(x,"start_symbol")==0) { psp->declargslot = &(psp->gp->start); } else if (strcmp(x,"left")==0) { psp->preccounter++; psp->declassoc = LEFT; psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; } else if (strcmp(x,"right")==0) { psp->preccounter++; psp->declassoc = RIGHT; psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; } else if (strcmp(x,"nonassoc")==0) { psp->preccounter++; psp->declassoc = NONE; psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; } else if (strcmp(x,"destructor")==0) { psp->state = WAITING_FOR_DESTRUCTOR_SYMBOL; } else if (strcmp(x,"type")==0) { psp->state = WAITING_FOR_DATATYPE_SYMBOL; } else if (strcmp(x,"fallback")==0) { psp->fallback = 0; psp->state = WAITING_FOR_FALLBACK_ID; } else { ErrorMsg(psp->filename,psp->tokenlineno, "Unknown declaration keyword: \"%%%s\".",x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } } else { ErrorMsg(psp->filename,psp->tokenlineno, "Illegal declaration keyword: \"%s\".",x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } break; case WAITING_FOR_DESTRUCTOR_SYMBOL: if (!isalpha(x[0])) { ErrorMsg(psp->filename,psp->tokenlineno, "Symbol name missing after %destructor keyword"); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } else { struct symbol *sp = Symbol_new(x); psp->declargslot = &sp->destructor; psp->decllnslot = &sp->destructorln; psp->state = WAITING_FOR_DECL_ARG; } break; case WAITING_FOR_DATATYPE_SYMBOL: if (!isalpha(x[0])) { ErrorMsg(psp->filename,psp->tokenlineno, "Symbol name missing after %destructor keyword"); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } else { struct symbol *sp = Symbol_new(x); psp->declargslot = &sp->datatype; psp->decllnslot = 0; psp->state = WAITING_FOR_DECL_ARG; } break; case WAITING_FOR_PRECEDENCE_SYMBOL: if (x[0]=='.') { psp->state = WAITING_FOR_DECL_OR_RULE; } else if (isupper(x[0])) { struct symbol *sp; sp = Symbol_new(x); if (sp->prec>=0) { ErrorMsg(psp->filename,psp->tokenlineno, "Symbol \"%s\" has already be given a precedence.",x); psp->errorcnt++; } else { sp->prec = psp->preccounter; sp->assoc = psp->declassoc; } } else { ErrorMsg(psp->filename,psp->tokenlineno, "Can't assign a precedence to \"%s\".",x); psp->errorcnt++; } break; case WAITING_FOR_DECL_ARG: if ((x[0]=='{' || x[0]=='\"' || isalnum(x[0]))) { if (*(psp->declargslot)!=0) { ErrorMsg(psp->filename,psp->tokenlineno, "The argument \"%s\" to declaration \"%%%s\" is not the first.", x[0]=='\"' ? &x[1] : x,psp->declkeyword); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } else { *(psp->declargslot) = (x[0]=='\"' || x[0]=='{') ? &x[1] : x; if (psp->decllnslot) *psp->decllnslot = psp->tokenlineno; psp->state = WAITING_FOR_DECL_OR_RULE; } } else { ErrorMsg(psp->filename,psp->tokenlineno, "Illegal argument to %%%s: %s",psp->declkeyword,x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } break; case WAITING_FOR_FALLBACK_ID: if (x[0]=='.') { psp->state = WAITING_FOR_DECL_OR_RULE; } else if (!isupper(x[0])) { ErrorMsg(psp->filename, psp->tokenlineno, "%%fallback argument \"%s\" should be a token", x); psp->errorcnt++; } else { struct symbol *sp = Symbol_new(x); if (psp->fallback==0) { psp->fallback = sp; } else if (sp->fallback) { ErrorMsg(psp->filename, psp->tokenlineno, "More than one fallback assigned to token %s", x); psp->errorcnt++; } else { sp->fallback = psp->fallback; psp->gp->has_fallback = 1; } } break; case RESYNC_AFTER_RULE_ERROR: /* if (x[0]=='.') psp->state = WAITING_FOR_DECL_OR_RULE; ** break; */ case RESYNC_AFTER_DECL_ERROR: if (x[0]=='.') psp->state = WAITING_FOR_DECL_OR_RULE; if (x[0]=='%') psp->state = WAITING_FOR_DECL_KEYWORD; break; } } /* Run the proprocessor over the input file text. The global variables ** azDefine[0] through azDefine[nDefine-1] contains the names of all defined ** macros. This routine looks for "%ifdef" and "%ifndef" and "%endif" and ** comments them out. Text in between is also commented out as appropriate. */ static void preprocess_input(char *z, int nDefine, char** azDefine) { int i, j, k, n; int exclude = 0; int start; int lineno = 1; int start_lineno; for (i=0; z[i]; i++) { if (z[i]=='\n') lineno++; if (z[i]!='%' || (i>0 && z[i-1]!='\n')) continue; if (strncmp(&z[i],"%endif",6)==0 && isspace(z[i+6])) { if (exclude) { exclude--; if (exclude==0) { for (j=start; jfilename; ps.errorcnt = 0; ps.state = INITIALIZE; /* Begin by reading the input file */ fp = fopen(ps.filename,"rb"); if (fp == 0) { ErrorMsg(ps.filename,0,"Can't open this file for reading."); gp->errorcnt++; return 0; } int rc = fseek(fp, 0, 2); if (rc < 0) { perror("fseek"); ErrorMsg(ps.filename,0,"fseek failure."); gp->errorcnt++; return 0; } filesize = ftell(fp); rewind(fp); filebuf = (char *)malloc (filesize+1) ; if (filebuf==0) { ErrorMsg(ps.filename,0,"Can't allocate %d of memory to hold this file.", filesize+1); gp->errorcnt++; return 0; } if (fread(filebuf,1,filesize,fp)!=filesize) { ErrorMsg(ps.filename,0,"Can't read in all %d bytes of this file.", filesize); free(filebuf); gp->errorcnt++; return 0; } fclose(fp); filebuf[filesize] = 0; /* Make an initial pass through the file to handle %ifdef and %ifndef */ preprocess_input(filebuf, nDefine, azDefine); /* Now scan the text of the input file */ lineno = 1; for(cp=filebuf; (c= *cp)!=0;) { if (c=='\n') lineno++; /* Keep track of the line number */ if (isspace(c)) { cp++; continue; } /* Skip all white space */ if (c=='/' && cp[1]=='/') { /* Skip C++ style comments */ cp+=2; while ((c= *cp)!=0 && c!='\n') cp++; continue; } if (c=='/' && cp[1]=='*') { /* Skip C style comments */ cp+=2; while ((c= *cp)!=0 && (c!='/' || cp[-1]!='*')) { if (c=='\n') lineno++; cp++; } if (c) cp++; continue; } ps.tokenstart = cp; /* Mark the beginning of the token */ ps.tokenlineno = lineno; /* Linenumber on which token begins */ if (c=='\"') { /* String literals */ cp++; while ((c= *cp)!=0 && c!='\"') { if (c=='\n') lineno++; cp++; } if (c == 0) { ErrorMsg(ps.filename,startline, "String starting on this line is not terminated before the end of the file."); ps.errorcnt++; nextcp = cp; } else { nextcp = cp+1; } } else if (c=='{') { /* A block of C code */ int level; cp++; for (level=1; (c= *cp)!=0 && (level>1 || c!='}'); cp++) { if (c=='\n') lineno++; else if (c=='{') level++; else if (c=='}') level--; else if (c=='/' && cp[1]=='*') { /* Skip comments */ int prevc; cp = &cp[2]; prevc = 0; while ((c= *cp)!=0 && (c!='/' || prevc!='*')) { if (c=='\n') lineno++; prevc = c; cp++; } } else if (c=='/' && cp[1]=='/') { /* Skip C++ style comments too */ cp = &cp[2]; while ((c= *cp)!=0 && c!='\n') cp++; if (c) lineno++; } else if (c=='\'' || c=='\"') { /* String a character literals */ int startchar, prevc; startchar = c; prevc = 0; for (cp++; (c= *cp)!=0 && (c!=startchar || prevc=='\\'); cp++) { if (c=='\n') lineno++; if (prevc=='\\') prevc = 0; else prevc = c; } } } if (c==0) { ErrorMsg(ps.filename,ps.tokenlineno, "C code starting on this line is not terminated before the end of the file."); ps.errorcnt++; nextcp = cp; } else { nextcp = cp+1; } } else if (isalnum(c)) { /* Identifiers */ while ((c= *cp)!=0 && (isalnum(c) || c=='_')) cp++; nextcp = cp; } else if (c==':' && cp[1]==':' && cp[2]=='=') { /* The operator "::=" */ cp += 3; nextcp = cp; } else { /* All other (one character) operators */ cp++; nextcp = cp; } c = *cp; *cp = 0; /* Null terminate the token */ parseonetoken(&ps); /* Parse the token */ *cp = c; /* Restore the buffer */ cp = nextcp; } free(filebuf); /* Release the buffer after parsing */ gp->rule = ps.firstrule; gp->errorcnt = ps.errorcnt; if (gp->errorcnt == 0) return 1; else return 0; } miller-5.6.2/c/parsing/lemon_parse.h000066400000000000000000000002371354153536500173660ustar00rootroot00000000000000#ifndef LEMON_PARSE_H #define LEMON_PARSE_H #include "lemon_structs.h" int Parse(struct lemon *lemp, int nDefine, char** azDefine); #endif // LEMON_PARSE_H miller-5.6.2/c/parsing/lemon_plink.c000066400000000000000000000026741354153536500173730ustar00rootroot00000000000000#include #include #include #include "lemon_plink.h" /*************************** From the file "plink.c" *********************/ /* ** Routines processing configuration follow-set propagation links ** in the LEMON parser generator. */ static struct plink *plink_freelist = 0; /* Allocate a new plink */ struct plink *Plink_new(){ struct plink *new; if (plink_freelist==0) { int i; int amt = 100; plink_freelist = (struct plink *)malloc (sizeof(struct plink)*amt) ; if (plink_freelist==0) { fprintf(stderr, "Unable to allocate memory for a new follow-set propagation link.\n"); exit(1); } for(i=0; inext; return new; } /* Add a plink to a plink list */ void Plink_add(struct plink **plpp, struct config *cfp) { struct plink *new; new = Plink_new(); new->next = *plpp; *plpp = new; new->cfp = cfp; } /* Transfer every plink on the list "from" to the list "to" */ void Plink_copy(struct plink **to, struct plink *from) { struct plink *nextpl; while (from) { nextpl = from->next; from->next = *to; *to = from; from = nextpl; } } /* Delete every plink on the list */ void Plink_delete(struct plink *plp) { struct plink *nextpl; while (plp) { nextpl = plp->next; plp->next = plink_freelist; plink_freelist = plp; plp = nextpl; } } miller-5.6.2/c/parsing/lemon_plink.h000066400000000000000000000004101354153536500173620ustar00rootroot00000000000000#ifndef LEMON_PLINK_H #define LEMON_PLINK_H #include "lemon_structs.h" struct plink *Plink_new(void); void Plink_add(struct plink **, struct config *); void Plink_copy(struct plink **, struct plink *); void Plink_delete(struct plink *); #endif // LEMON_PLINK_H miller-5.6.2/c/parsing/lemon_report.c000066400000000000000000001043121354153536500175610ustar00rootroot00000000000000#include #include #include #include #include #include "lemon_report.h" #include "lemon_error.h" #include "lemon_assert.h" #include "lemon_string.h" #include "lemon_action.h" #include "lemon_dims.h" #include "lemon_symbol.h" /* ** Procedures for generating reports and tables in the LEMON parser generator. */ /* Generate a filename with the given suffix. Space to hold the ** name comes from malloc() and must be freed by the calling ** function. */ static char *file_makename(struct lemon *lemp, char *suffix) { char *name; char *cp; name = malloc (strlen(lemp->filename) + strlen(suffix) + 5) ; if (name==0) { fprintf(stderr,"Can't allocate space for a filename.\n"); exit(1); } strcpy(name,lemp->filename); cp = strrchr(name,'.'); if (cp) *cp = 0; strcat(name,suffix); return name; } static char* capitalize(char* string) { char* p; for (p = string; *p; p++) { *p = toupper(*p); } return string; } /* Open a file with a name based on the name of the input file, ** but with a different (specified) suffix, and return a pointer ** to the stream */ static FILE *file_open(struct lemon *lemp, char *suffix, char *mode) { FILE *fp; free(lemp->outname); lemp->outname = file_makename(lemp, suffix); fp = fopen(lemp->outname,mode); if (fp==0 && *mode=='w') { fprintf(stderr,"Can't open file \"%s\".\n",lemp->outname); lemp->errorcnt++; return 0; } return fp; } /* Duplicate the input file without comments and without actions on rules */ void Reprint(struct lemon *lemp) { struct rule *rp; struct symbol *sp; int i, j, maxlen, len, ncolumns, skip; printf("// Reprint of input file \"%s\".\n// Symbols:\n",lemp->filename); maxlen = 10; for(i=0; insymbol; i++){ sp = lemp->symbols[i]; len = strlen(sp->name); if (len>maxlen) maxlen = len; } ncolumns = 76/(maxlen+5); if (ncolumns<1) ncolumns = 1; skip = (lemp->nsymbol + ncolumns - 1)/ncolumns; for(i=0; insymbol; j+=skip){ sp = lemp->symbols[j]; assert (sp->index==j) ; printf(" %3d %-*.*s",j,maxlen,maxlen,sp->name); } printf("\n"); } for(rp=lemp->rule; rp; rp=rp->next){ printf("%s",rp->lhs->name); /* if (rp->lhsalias) printf("(%s)",rp->lhsalias); */ printf(" ::="); for(i=0; inrhs; i++){ printf(" %s",rp->rhs[i]->name); /* if (rp->rhsalias[i]) printf("(%s)",rp->rhsalias[i]); */ } printf("."); if (rp->precsym) printf(" [%s]",rp->precsym->name); /* if (rp->code) printf("\n %s",rp->code); */ printf("\n"); } } void ConfigPrint(FILE *fp, struct config *cfp) { struct rule *rp; int i; rp = cfp->rp; fprintf(fp,"%s ::=",rp->lhs->name); for(i=0; i<=rp->nrhs; i++){ if (i==cfp->dot) fprintf(fp," *"); if (i==rp->nrhs) break; fprintf(fp," %s",rp->rhs[i]->name); } } /* #define TEST */ #ifdef TEST /* Print a set */ static void SetPrint(FILE *out, char *set, struct lemon *lemp) { int i; char *spacer; spacer = ""; fprintf(out,"%12s[",""); for(i=0; interminal; i++){ if (SetFind(set,i)) { fprintf(out,"%s%s",spacer,lemp->symbols[i]->name); spacer = " "; } } fprintf(out,"]\n"); } /* Print a plink chain */ static void PlinkPrint(FILE *out, struct plink *plp, char *tag) { while (plp) { fprintf(out,"%12s%s (state %2d) ","",tag,plp->cfp->stp->index); ConfigPrint(out,plp->cfp); fprintf(out,"\n"); plp = plp->next; } } #endif /* Print an action to the given file descriptor. Return FALSE if ** nothing was actually printed. */ int PrintAction(struct action *ap, FILE *fp, int indent) { int result = 1; switch (ap->type) { case SHIFT: fprintf(fp,"%*s shift %d",indent,ap->sp->name,ap->x.stp->index); break; case REDUCE: fprintf(fp,"%*s reduce %d",indent,ap->sp->name,ap->x.rp->index); break; case ACCEPT: fprintf(fp,"%*s accept",indent,ap->sp->name); break; case ERROR: fprintf(fp,"%*s error",indent,ap->sp->name); break; case CONFLICT: fprintf(fp,"%*s reduce %-3d ** Parsing conflict **", indent,ap->sp->name,ap->x.rp->index); break; case SH_RESOLVED: case RD_RESOLVED: case NOT_USED: result = 0; break; } return result; } /* Generate the "y.output" log file */ void ReportOutput(struct lemon *lemp) { int i; struct state *stp; struct config *cfp; struct action *ap; FILE *fp; fp = file_open(lemp,".out","w"); if (fp==0) return; fprintf(fp," \b"); for(i=0; instate; i++){ stp = lemp->sorted[i]; fprintf(fp,"State %d:\n",stp->index); if (lemp->basisflag) cfp=stp->bp; else cfp=stp->cfp; while (cfp) { char buf[20]; if (cfp->dot==cfp->rp->nrhs) { sprintf(buf,"(%d)",cfp->rp->index); fprintf(fp," %5s ",buf); } else { fprintf(fp," "); } ConfigPrint(fp,cfp); fprintf(fp,"\n"); #ifdef TEST SetPrint(fp,cfp->fws,lemp); PlinkPrint(fp,cfp->fplp,"To "); PlinkPrint(fp,cfp->bplp,"From"); #endif if (lemp->basisflag) cfp=cfp->bp; else cfp=cfp->next; } fprintf(fp,"\n"); for(ap=stp->ap; ap; ap=ap->next){ if (PrintAction(ap,fp,30)) fprintf(fp,"\n"); } fprintf(fp,"\n"); } fclose(fp); return; } /* Search for the file "name" which is in the same directory as ** the exacutable */ static char *pathsearch(char *argv0, char *name, int modemask) { char *pathlist; char *path,*cp; char c; #ifdef __WIN32__ cp = strrchr(argv0,'\\'); #else cp = strrchr(argv0,'/'); #endif if (cp) { c = *cp; *cp = 0; path = (char *)malloc (strlen(argv0) + strlen(name) + 2) ; if (path) sprintf(path,"%s/%s",argv0,name); *cp = c; } else { extern char *getenv(); pathlist = getenv("PATH"); if (pathlist==0) pathlist = ".:/bin:/usr/bin"; path = (char *)malloc (strlen(pathlist)+strlen(name)+2) ; if (path!=0) { while (*pathlist) { cp = strchr(pathlist,':'); if (cp==0) cp = &pathlist[strlen(pathlist)]; c = *cp; *cp = 0; sprintf(path,"%s/%s",pathlist,name); *cp = c; if (c==0) pathlist = ""; else pathlist = &cp[1]; if (access(path,modemask)==0) break; } } } return path; } /* Given an action, compute the integer value for that action ** which is to be put in the action table of the generated machine. ** Return negative if no action should be generated. */ static int compute_action(struct lemon *lemp, struct action *ap) { int act; switch (ap->type) { case SHIFT: act = ap->x.stp->index; break; case REDUCE: act = ap->x.rp->index + lemp->nstate; break; case ERROR: act = lemp->nstate + lemp->nrule; break; case ACCEPT: act = lemp->nstate + lemp->nrule + 1; break; default: act = -1; break; } return act; } #define LINESIZE 1000 /* The next cluster of routines are for reading the template file ** and writing the results to the generated parser */ /* The first function transfers data from "in" to "out" until ** a line is seen which begins with "%%". The line number is ** tracked. ** ** if name!=0, then any word that begin with "Parse" is changed to ** begin with *name instead. */ static void tplt_xfer( char *name, FILE *in, FILE *out, int *lineno) { int i, iStart; char line[LINESIZE]; while (fgets(line,LINESIZE,in) && (line[0]!='%' || line[1]!='%')) { (*lineno)++; iStart = 0; if (name) { for(i=0; line[i]; i++){ if (line[i]=='P' && strncmp(&line[i],"Parse",5)==0 && (i==0 || !isalpha(line[i-1])) ) { if (i>iStart) fprintf(out,"%.*s",i-iStart,&line[iStart]); fprintf(out,"%s",name); i += 4; iStart = i+1; } } } fprintf(out,"%s",&line[iStart]); } } /* The next function finds the template file and opens it, returning ** a pointer to the opened file. */ static FILE *tplt_open(struct lemon *lemp) { static char templatename[] = "lempar.c"; char buf[1000]; FILE *in; char *tpltname; char *cp; cp = strrchr(lemp->filename,'.'); if (cp) { sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename); } else { sprintf(buf,"%s.lt",lemp->filename); } if (access(buf,004)==0) { tpltname = buf; } else if (access(templatename,004)==0) { tpltname = templatename; } else { tpltname = pathsearch(lemp->argv0,templatename,0); } if (tpltname==0) { fprintf(stderr,"Can't find the parser driver template file \"%s\".\n", templatename); lemp->errorcnt++; return 0; } in = fopen(tpltname,"r"); if (in==0) { fprintf(stderr,"Can't open the template file \"%s\".\n",templatename); lemp->errorcnt++; return 0; } return in; } /* Print a string to the file and keep the linenumber up to date */ static void tplt_print( FILE *out, struct lemon *lemp, char *str, int strln, int *lineno, int suppress_line_directives) { if (str == 0) return; if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n",strln,lemp->filename); (*lineno)++; } while (*str) { if (*str=='\n') (*lineno)++; putc(*str,out); str++; } if (!suppress_line_directives) { fprintf(out,"\n#line %d \"%s\"\n",*lineno+2,lemp->outname); (*lineno)+=2; } return; } /* ** The following routine emits code for the destructor for the ** symbol sp */ void emit_destructor_code( FILE *out, struct symbol *sp, struct lemon *lemp, int *lineno, int suppress_line_directives) { char *cp = 0; int linecnt = 0; if (sp->type==TERMINAL) { cp = lemp->tokendest; if (cp==0) return; if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n{",lemp->tokendestln,lemp->filename); } } else if (sp->destructor) { cp = sp->destructor; if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n{",sp->destructorln,lemp->filename); } } else if (lemp->vardest) { cp = lemp->vardest; if (cp==0) return; if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n",lemp->vardestln,lemp->filename); } fprintf(out, "{"); } else { assert (0) ; /* Cannot happen */ } for(; *cp; cp++){ if (*cp=='$' && cp[1]=='$') { fprintf(out,"(yypminor->yy%d)",sp->dtnum); cp++; continue; } if (*cp=='\n') linecnt++; fputc(*cp,out); } (*lineno) += 3 + linecnt; fprintf(out,"}\n"); if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n",*lineno,lemp->outname); } return; } /* ** Return TRUE (non-zero) if the given symbol has a destructor. */ int has_destructor(struct symbol *sp, struct lemon *lemp) { int ret; if (sp->type==TERMINAL) { ret = lemp->tokendest!=0; } else { ret = lemp->vardest!=0 || sp->destructor!=0; } return ret; } /* ** Append text to a dynamically allocated string. If zText is 0 then ** reset the string to be empty again. Always return the complete text ** of the string (which is overwritten with each call). ** ** n bytes of zText are stored. If n==0 then all of zText up to the first ** \000 terminator is stored. zText can contain up to two instances of ** %d. The values of p1 and p2 are written into the first and second ** %d. ** ** If n==-1, then the previous character is overwritten. */ static char *append_str(char *zText, int n, int p1, int p2) { static char *z = 0; static int alloced = 0; static int used = 0; int i, c; char zInt[40]; if (zText==0) { used = 0; return z; } if (n<=0) { if (n<0) { used += n; assert (used>=0) ; } n = strlen(zText); } if (n+sizeof(zInt)*2+used >= alloced) { alloced = n + sizeof(zInt)*2 + used + 200; z = realloc(z, alloced); } if (z==0) return ""; while (n-- > 0) { c = *(zText++); if (c=='%' && zText[0]=='d') { sprintf(zInt, "%d", p1); p1 = p2; strcpy(&z[used], zInt); used += strlen(&z[used]); zText++; n--; } else { z[used++] = c; } } z[used] = 0; return z; } /* ** zCode is a string that is the action associated with a rule. Expand ** the symbols in this string so that the refer to elements of the parser ** stack. Return a new string stored in space obtained from malloc. */ static void translate_code(struct lemon *lemp, struct rule *rp) { char *cp, *xp; int i; char lhsused = 0; /* True if the LHS element has been used */ char used[MAXRHS]; /* True for each RHS element which is used */ for(i=0; inrhs; i++) used[i] = 0; lhsused = 0; append_str(0,0,0,0); for(cp=rp->code; *cp; cp++){ if (isalpha(*cp) && (cp==rp->code || (!isalnum(cp[-1]) && cp[-1]!='_'))) { char saved; for(xp= &cp[1]; isalnum(*xp) || *xp=='_'; xp++); saved = *xp; *xp = 0; if (rp->lhsalias && strcmp(cp,rp->lhsalias)==0) { append_str("yygotominor.yy%d",0,rp->lhs->dtnum,0); cp = xp; lhsused = 1; } else { for(i=0; inrhs; i++){ if (rp->rhsalias[i] && strcmp(cp,rp->rhsalias[i])==0) { if (cp!=rp->code && cp[-1]=='@') { /* If the argument is of the form @X then substituted ** the token number of X, not the value of X */ append_str("yymsp[%d].major",-1,i-rp->nrhs+1,0); } else { append_str("yymsp[%d].minor.yy%d",0, i-rp->nrhs+1,rp->rhs[i]->dtnum); } cp = xp; used[i] = 1; break; } } } *xp = saved; } append_str(cp, 1, 0, 0); } /* End loop */ /* Check to make sure the LHS has been used */ if (rp->lhsalias && !lhsused) { ErrorMsg(lemp->filename,rp->ruleline, "Label \"%s\" for \"%s(%s)\" is never used.", rp->lhsalias,rp->lhs->name,rp->lhsalias); lemp->errorcnt++; } /* Generate destructor code for RHS symbols which are not used in the ** reduce code */ for(i=0; inrhs; i++){ if (rp->rhsalias[i] && !used[i]) { ErrorMsg(lemp->filename,rp->ruleline, "Label %s for \"%s(%s)\" is never used.", rp->rhsalias[i],rp->rhs[i]->name,rp->rhsalias[i]); lemp->errorcnt++; } else if (rp->rhsalias[i]==0) { if (has_destructor(rp->rhs[i],lemp)) { append_str(" yy_destructor(%d,&yymsp[%d].minor);\n", 0, rp->rhs[i]->index,i-rp->nrhs+1); } else { /* No destructor defined for this term */ } } } cp = append_str(0,0,0,0); rp->code = Strsafe(cp); } /* ** Generate code which executes when the rule "rp" is reduced. Write ** the code to "out". Make sure lineno stays up-to-date. */ static void emit_code( FILE *out, struct rule *rp, struct lemon *lemp, int *lineno, int suppress_line_directives) { char *cp; int linecnt = 0; /* Generate code to do the reduce action */ if (rp->code) { if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n",rp->line,lemp->filename); } fprintf(out,"{"); fprintf(out,"%s",rp->code); for(cp=rp->code; *cp; cp++){ if (*cp=='\n') linecnt++; } /* End loop */ (*lineno) += 3 + linecnt; fprintf(out,"}\n"); if (!suppress_line_directives) { fprintf(out,"#line %d \"%s\"\n",*lineno,lemp->outname); } } /* End if (rp->code) */ return; } /* ** Print the definition of the union used for the parser's data stack. ** This union contains fields for every possible data type for tokens ** and nonterminals. In the process of computing and printing this ** union, also set the ".dtnum" field of every terminal and nonterminal ** symbol. */ void print_stack_union( FILE *out, /* The output stream */ struct lemon *lemp, /* The main info structure for this parser */ int *plineno, /* Pointer to the line number */ int mhflag) /* True if generating makeheaders output */ { int lineno = *plineno; /* The line number of the output */ char **types; /* A hash table of datatypes */ int arraysize; /* Size of the "types" array */ int maxdtlength; /* Maximum length of any ".datatype" field. */ char *stddt; /* Standardized name for a datatype */ int i,j; /* Loop counters */ unsigned hash; /* For hashing the name of a type */ char *name; /* Name of the parser */ /* Allocate and initialize types[] and allocate stddt[] */ arraysize = lemp->nsymbol * 2; types = (char**)malloc (arraysize * sizeof(char*)) ; for(i=0; ivartype) { maxdtlength = strlen(lemp->vartype); } for(i=0; insymbol; i++){ int len; struct symbol *sp = lemp->symbols[i]; if (sp->datatype==0) continue; len = strlen(sp->datatype); if (len>maxdtlength) maxdtlength = len; } stddt = (char*)malloc (maxdtlength*2 + 1) ; if (types==0 || stddt==0) { fprintf(stderr,"Out of memory.\n"); exit(1); } /* Build a hash table of datatypes. The ".dtnum" field of each symbol ** is filled in with the hash index plus 1. A ".dtnum" value of 0 is ** used for terminal symbols. If there is no %default_type defined then ** 0 is also used as the .dtnum value for nonterminals which do not specify ** a datatype using the %type directive. */ for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; char *cp; if (sp==lemp->errsym) { sp->dtnum = arraysize+1; continue; } if (sp->type!=NONTERMINAL || (sp->datatype==0 && lemp->vartype==0)) { sp->dtnum = 0; continue; } cp = sp->datatype; if (cp==0) cp = lemp->vartype; j = 0; while (isspace(*cp)) cp++; while (*cp) stddt[j++] = *cp++; while (j>0 && isspace(stddt[j-1])) j--; stddt[j] = 0; hash = 0; for(j=0; stddt[j]; j++){ hash = hash*53 + (unsigned)stddt[j]; } hash = (hash & 0x7fffffff)%arraysize; while (types[hash]) { if (strcmp(types[hash],stddt)==0) { sp->dtnum = hash + 1; break; } hash++; if (hash>=arraysize) hash = 0; } if (types[hash]==0) { sp->dtnum = hash + 1; types[hash] = (char*)malloc (strlen(stddt)+1) ; if (types[hash]==0) { fprintf(stderr,"Out of memory.\n"); exit(1); } strcpy(types[hash],stddt); } } /* Print out the definition of YYTOKENTYPE and YYMINORTYPE */ name = lemp->name ? lemp->name : "Parse"; lineno = *plineno; if (mhflag) { fprintf(out,"#if INTERFACE\n"); lineno++; } fprintf(out,"#define %sTOKENTYPE %s\n",name, lemp->tokentype?lemp->tokentype:"void*"); lineno++; if (mhflag) { fprintf(out,"#endif\n"); lineno++; } fprintf(out,"typedef union {\n"); lineno++; fprintf(out," %sTOKENTYPE yy0;\n",name); lineno++; for(i=0; ierrsym->dtnum); lineno++; free(stddt); free(types); fprintf(out,"} YYMINORTYPE;\n"); lineno++; *plineno = lineno; } /* ** Return the name of a C datatype able to represent values between ** lwr and upr, inclusive. */ static const char *minimum_size_type(int lwr, int upr){ if (lwr>=0) { if (upr<=255) { return "unsigned char"; } else if (upr<65535) { return "unsigned short int"; } else { return "unsigned int"; } } else if (lwr>=-127 && upr<=127) { return "signed char"; } else if (lwr>=-32767 && upr<32767) { return "short"; } else { return "int"; } } /* ** Each state contains a set of token transaction and a set of ** nonterminal transactions. Each of these sets makes an instance ** of the following structure. An array of these structures is used ** to order the creation of entries in the yy_action[] table. */ struct axset { struct state *stp; /* A pointer to a state */ int isTkn; /* True to use tokens. False for non-terminals */ int nAction; /* Number of actions */ }; /* ** Compare to axset structures for sorting purposes */ static int axset_compare(const void *a, const void *b){ struct axset *p1 = (struct axset*)a; struct axset *p2 = (struct axset*)b; return p2->nAction - p1->nAction; } /* Generate C source code for the parser */ /* Output in makeheaders format if mhflag==true */ void ReportTable(struct lemon *lemp, int mhflag, int suppress_line_directives) { FILE *out, *in; char line[LINESIZE]; int lineno; struct state *stp; struct action *ap; struct rule *rp; struct acttab *pActtab; int i, j, n; char *name; int mnTknOfst, mxTknOfst; int mnNtOfst, mxNtOfst; struct axset *ax; in = tplt_open(lemp); if (in==0) return; out = file_open(lemp,".c","w"); if (out==0) { fclose(in); return; } lineno = 1; tplt_xfer(lemp->name,in,out,&lineno); /* Generate the include code, if any */ tplt_print(out,lemp,lemp->include,lemp->includeln,&lineno, suppress_line_directives); if (mhflag) { char *name = file_makename(lemp, ".h"); fprintf(out,"#include \"%s\"\n", name); lineno++; free(name); } tplt_xfer(lemp->name,in,out,&lineno); /* Generate #defines for all tokens */ if (mhflag) { char *prefix; fprintf(out,"#if INTERFACE\n"); lineno++; if (lemp->tokenprefix) prefix = lemp->tokenprefix; else prefix = ""; for(i=1; interminal; i++){ fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); lineno++; } fprintf(out,"#endif\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate the defines */ fprintf(out,"#define YYCODETYPE %s\n", minimum_size_type(0, lemp->nsymbol+5)); lineno++; fprintf(out,"#define YYNOCODE %d\n",lemp->nsymbol+1); lineno++; fprintf(out,"#define YYACTIONTYPE %s\n", minimum_size_type(0, lemp->nstate+lemp->nrule+5)); lineno++; print_stack_union(out,lemp,&lineno,mhflag); if (lemp->stacksize) { if (atoi(lemp->stacksize)<=0) { ErrorMsg(lemp->filename,0, "Illegal stack size: [%s]. The stack size should be an integer constant.", lemp->stacksize); lemp->errorcnt++; lemp->stacksize = "800"; } fprintf(out,"#define YYSTACKDEPTH %s\n",lemp->stacksize); lineno++; } else { fprintf(out,"#define YYSTACKDEPTH 800\n"); lineno++; } if (mhflag) { fprintf(out,"#if INTERFACE\n"); lineno++; } name = lemp->name ? lemp->name : "Parse"; if (lemp->arg && lemp->arg[0]) { int i; i = strlen(lemp->arg); while (i>=1 && isspace(lemp->arg[i-1])) i--; while (i>=1 && (isalnum(lemp->arg[i-1]) || lemp->arg[i-1]=='_')) i--; fprintf(out,"#define %sARG_SDECL %s;\n",name,lemp->arg); lineno++; fprintf(out,"#define %sARG_PDECL ,%s\n",name,lemp->arg); lineno++; fprintf(out,"#define %sARG_FETCH %s = pparser->%s\n", name,lemp->arg,&lemp->arg[i]); lineno++; fprintf(out,"#define %sARG_STORE pparser->%s = %s\n", name,&lemp->arg[i],&lemp->arg[i]); lineno++; } else { fprintf(out,"#define %sARG_SDECL\n",name); lineno++; fprintf(out,"#define %sARG_PDECL\n",name); lineno++; fprintf(out,"#define %sARG_FETCH\n",name); lineno++; fprintf(out,"#define %sARG_STORE\n",name); lineno++; } if (mhflag) { fprintf(out,"#endif\n"); lineno++; } fprintf(out,"#define YYNSTATE %d\n",lemp->nstate); lineno++; fprintf(out,"#define YYNRULE %d\n",lemp->nrule); lineno++; fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index); lineno++; fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum); lineno++; if (lemp->has_fallback) { fprintf(out,"#define YYFALLBACK 1\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate the action table and its associates: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. */ /* Compute the actions on all states and count them up */ ax = malloc (sizeof(ax[0])*lemp->nstate*2) ; if (ax==0) { fprintf(stderr,"malloc failed\n"); exit(1); } for(i=0; instate; i++){ stp = lemp->sorted[i]; stp->nTknAct = stp->nNtAct = 0; stp->iDflt = lemp->nstate + lemp->nrule; stp->iTknOfst = NO_OFFSET; stp->iNtOfst = NO_OFFSET; for(ap=stp->ap; ap; ap=ap->next){ if (compute_action(lemp,ap)>=0) { if (ap->sp->indexnterminal) { stp->nTknAct++; } else if (ap->sp->indexnsymbol) { stp->nNtAct++; } else { stp->iDflt = compute_action(lemp, ap); } } } ax[i*2].stp = stp; ax[i*2].isTkn = 1; ax[i*2].nAction = stp->nTknAct; ax[i*2+1].stp = stp; ax[i*2+1].isTkn = 0; ax[i*2+1].nAction = stp->nNtAct; } mxTknOfst = mnTknOfst = 0; mxNtOfst = mnNtOfst = 0; /* Compute the action table. In order to try to keep the size of the ** action table to a minimum, the heuristic of placing the largest action ** sets first is used. */ qsort(ax, lemp->nstate*2, sizeof(ax[0]), axset_compare); pActtab = acttab_alloc(); for(i=0; instate*2 && ax[i].nAction>0; i++){ stp = ax[i].stp; if (ax[i].isTkn) { for(ap=stp->ap; ap; ap=ap->next){ int action; if (ap->sp->index>=lemp->nterminal) continue; action = compute_action(lemp, ap); if (action<0) continue; acttab_action(pActtab, ap->sp->index, action); } stp->iTknOfst = acttab_insert(pActtab); if (stp->iTknOfstiTknOfst; if (stp->iTknOfst>mxTknOfst) mxTknOfst = stp->iTknOfst; } else { for(ap=stp->ap; ap; ap=ap->next){ int action; if (ap->sp->indexnterminal) continue; if (ap->sp->index==lemp->nsymbol) continue; action = compute_action(lemp, ap); if (action<0) continue; acttab_action(pActtab, ap->sp->index, action); } stp->iNtOfst = acttab_insert(pActtab); if (stp->iNtOfstiNtOfst; if (stp->iNtOfst>mxNtOfst) mxNtOfst = stp->iNtOfst; } } free(ax); /* Output the yy_action table */ fprintf(out,"static YYACTIONTYPE yy_action[] = {\n"); lineno++; n = acttab_size(pActtab); for(i=j=0; insymbol + lemp->nrule + 2; if (j==0) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", action); if (j==9 || i==n-1) { fprintf(out, "\n"); lineno++; j = 0; } else { j++; } } fprintf(out, "};\n"); lineno++; /* Output the yy_lookahead table */ fprintf(out,"static YYCODETYPE yy_lookahead[] = {\n"); lineno++; for(i=j=0; insymbol; if (j==0) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", la); if (j==9 || i==n-1) { fprintf(out, "\n"); lineno++; j = 0; } else { j++; } } fprintf(out, "};\n"); lineno++; /* Output the yy_shift_ofst[] table */ fprintf(out, "#define YY_SHIFT_USE_DFLT (%d)\n", mnTknOfst-1); lineno++; fprintf(out, "static %s yy_shift_ofst[] = {\n", minimum_size_type(mnTknOfst-1, mxTknOfst)); lineno++; n = lemp->nstate; for(i=j=0; isorted[i]; ofst = stp->iTknOfst; if (ofst==NO_OFFSET) ofst = mnTknOfst - 1; if (j==0) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", ofst); if (j==9 || i==n-1) { fprintf(out, "\n"); lineno++; j = 0; } else { j++; } } fprintf(out, "};\n"); lineno++; /* Output the yy_reduce_ofst[] table */ fprintf(out, "#define YY_REDUCE_USE_DFLT (%d)\n", mnNtOfst-1); lineno++; fprintf(out, "static %s yy_reduce_ofst[] = {\n", minimum_size_type(mnNtOfst-1, mxNtOfst)); lineno++; n = lemp->nstate; for(i=j=0; isorted[i]; ofst = stp->iNtOfst; if (ofst==NO_OFFSET) ofst = mnNtOfst - 1; if (j==0) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", ofst); if (j==9 || i==n-1) { fprintf(out, "\n"); lineno++; j = 0; } else { j++; } } fprintf(out, "};\n"); lineno++; /* Output the default action table */ fprintf(out, "static YYACTIONTYPE yy_default[] = {\n"); lineno++; n = lemp->nstate; for(i=j=0; isorted[i]; if (j==0) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", stp->iDflt); if (j==9 || i==n-1) { fprintf(out, "\n"); lineno++; j = 0; } else { j++; } } fprintf(out, "};\n"); lineno++; tplt_xfer(lemp->name,in,out,&lineno); /* Generate the table of fallback tokens. */ if (lemp->has_fallback) { for(i=0; interminal; i++){ struct symbol *p = lemp->symbols[i]; if (p->fallback==0) { fprintf(out, " 0, /* %10s => nothing */\n", p->name); } else { fprintf(out, " %3d, /* %10s => %s */\n", p->fallback->index, p->name, p->fallback->name); } lineno++; } } tplt_xfer(lemp->name, in, out, &lineno); /* Generate a table containing the symbolic name of every symbol */ for(i=0; insymbol; i++){ sprintf(line,"\"%s\",",lemp->symbols[i]->name); fprintf(out," %-15s",line); if ((i&3)==3) { fprintf(out,"\n"); lineno++; } } if ((i&3)!=0) { fprintf(out,"\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate a table containing a text string that describes every ** rule in the rule set of the grammer. This information is used ** when tracing REDUCE actions. */ for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ assert (rp->index==i) ; fprintf(out," /* %3d */ \"%s ::=", i, rp->lhs->name); for(j=0; jnrhs; j++) fprintf(out," %s",rp->rhs[j]->name); fprintf(out,"\",\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes every time a symbol is popped from ** the stack while processing errors or while destroying the parser. ** (In other words, generate the %destructor actions) */ if (lemp->tokendest) { for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if (sp==0 || sp->type!=TERMINAL) continue; fprintf(out," case %d:\n",sp->index); lineno++; } for(i=0; insymbol && lemp->symbols[i]->type!=TERMINAL; i++); if (insymbol) { emit_destructor_code(out,lemp->symbols[i],lemp,&lineno, suppress_line_directives); fprintf(out," break;\n"); lineno++; } } for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if (sp==0 || sp->type==TERMINAL || sp->destructor==0) continue; fprintf(out," case %d:\n",sp->index); lineno++; /* Combine duplicate destructors into a single case */ for(j=i+1; jnsymbol; j++){ struct symbol *sp2 = lemp->symbols[j]; if (sp2 && sp2->type!=TERMINAL && sp2->destructor && sp2->dtnum==sp->dtnum && strcmp(sp->destructor,sp2->destructor)==0) { fprintf(out," case %d:\n",sp2->index); lineno++; sp2->destructor = 0; } } emit_destructor_code(out,lemp->symbols[i],lemp,&lineno, suppress_line_directives); fprintf(out," break;\n"); lineno++; } if (lemp->vardest) { struct symbol *dflt_sp = 0; for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if (sp==0 || sp->type==TERMINAL || sp->index<=0 || sp->destructor!=0) continue; fprintf(out," case %d:\n",sp->index); lineno++; dflt_sp = sp; } if (dflt_sp!=0) { emit_destructor_code(out,dflt_sp,lemp,&lineno, suppress_line_directives); fprintf(out," break;\n"); lineno++; } } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes whenever the parser stack overflows */ tplt_print(out,lemp,lemp->overflow,lemp->overflowln,&lineno, suppress_line_directives); tplt_xfer(lemp->name,in,out,&lineno); /* Generate the table of rule information ** ** Note: This code depends on the fact that rules are number ** sequentually beginning with 0. */ for(rp=lemp->rule; rp; rp=rp->next){ fprintf(out," { %d, %d },\n",rp->lhs->index,rp->nrhs); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which execution during each REDUCE action */ for(rp=lemp->rule; rp; rp=rp->next){ if (rp->code) translate_code(lemp, rp); } for(rp=lemp->rule; rp; rp=rp->next){ struct rule *rp2; if (rp->code==0) continue; fprintf(out," case %d:\n",rp->index); lineno++; for(rp2=rp->next; rp2; rp2=rp2->next){ if (rp2->code==rp->code) { fprintf(out," case %d:\n",rp2->index); lineno++; rp2->code = 0; } } emit_code(out,rp,lemp,&lineno, suppress_line_directives); fprintf(out," break;\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes if a parse fails */ tplt_print(out,lemp,lemp->failure,lemp->failureln,&lineno, suppress_line_directives); tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes when a syntax error occurs */ tplt_print(out,lemp,lemp->error,lemp->errorln,&lineno, suppress_line_directives); tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes when the parser accepts its input */ tplt_print(out,lemp,lemp->accept,lemp->acceptln,&lineno, suppress_line_directives); tplt_xfer(lemp->name,in,out,&lineno); /* Append any addition code the user desires */ tplt_print(out,lemp,lemp->extracode,lemp->extracodeln,&lineno, suppress_line_directives); fclose(in); fclose(out); return; } /* Generate a header file for the parser */ void ReportHeader(struct lemon *lemp) { FILE *out, *in; char *prefix; char line[LINESIZE]; char pattern[LINESIZE]; int i; if (lemp->tokenprefix) prefix = lemp->tokenprefix; else prefix = ""; in = file_open(lemp,".h","r"); if (in) { for(i=1; interminal && fgets(line,LINESIZE,in); i++){ sprintf(pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); if (strcmp(line,pattern)) break; } fclose(in); if (i==lemp->nterminal) { /* No change in the file. Don't rewrite it. */ return; } } out = file_open(lemp,".h","w"); if (out) { char* ident = capitalize(file_makename(lemp, "_h")); fprintf(out, "#ifndef %s\n", ident); fprintf(out, "#define %s\n", ident); fprintf(out, "\n"); for(i=1; interminal; i++){ fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); } fprintf(out, "\n"); fprintf(out, "#endif // %s\n", ident); fclose(out); } return; } /* Reduce the size of the action tables, if possible, by making use ** of defaults. ** ** In this version, we take the most frequent REDUCE action and make ** it the default. Only default a reduce if there are more than one. */ void CompressTables(struct lemon *lemp) { struct state *stp; struct action *ap, *ap2; struct rule *rp, *rp2, *rbest; int nbest, n; int i; for(i=0; instate; i++){ stp = lemp->sorted[i]; nbest = 0; rbest = 0; for(ap=stp->ap; ap; ap=ap->next){ if (ap->type!=REDUCE) continue; rp = ap->x.rp; if (rp==rbest) continue; n = 1; for(ap2=ap->next; ap2; ap2=ap2->next){ if (ap2->type!=REDUCE) continue; rp2 = ap2->x.rp; if (rp2==rbest) continue; if (rp2==rp) n++; } if (n>nbest) { nbest = n; rbest = rp; } } /* Do not make a default if the number of rules to default ** is not at least 2 */ if (nbest<2) continue; /* Combine matching REDUCE actions into a single default */ for(ap=stp->ap; ap; ap=ap->next){ if (ap->type==REDUCE && ap->x.rp==rbest) break; } assert (ap) ; ap->sp = Symbol_new("{default}"); for(ap=ap->next; ap; ap=ap->next){ if (ap->type==REDUCE && ap->x.rp==rbest) ap->type = NOT_USED; } stp->ap = Action_sort(stp->ap); } } miller-5.6.2/c/parsing/lemon_report.h000066400000000000000000000004721354153536500175700ustar00rootroot00000000000000#ifndef LEMON_REPORT_H #define LEMON_REPORT_H #include "lemon_structs.h" void Reprint(struct lemon *); void ReportOutput(struct lemon *); void ReportTable(struct lemon *, int mhflag, int suppress_line_directives); void ReportHeader(struct lemon *); void CompressTables(struct lemon *); #endif // LEMON_REPORT_H miller-5.6.2/c/parsing/lemon_set.c000066400000000000000000000016571354153536500170510ustar00rootroot00000000000000#include #include #include #include "lemon_set.h" /* ** Set manipulation routines for the LEMON parser generator. */ static int size = 0; /* Set the set size */ void SetSize(int n) { size = n+1; } /* Allocate a new set */ char *SetNew() { char *s; int i; s = (char*)malloc (size) ; if (s==0) { extern void memory_error(); memory_error(); } for(i=0; i #include #include #include "lemon_state_table.h" #include "lemon_memory.h" /* ** Code for processing tables in the LEMON parser generator. */ /* Compare two states */ static int statecmp(a,b) struct config *a; struct config *b; { int rc; for(rc=0; rc==0 && a && b; a=a->bp, b=b->bp){ rc = a->rp->index - b->rp->index; if (rc==0) rc = a->dot - b->dot; } if (rc==0) { if (a) rc = 1; if (b) rc = -1; } return rc; } /* Hash a state */ static int statehash(a) struct config *a; { unsigned h=0; while (a) { h = h*571 + (unsigned)a->rp->index*37 + (unsigned)a->dot; a = a->bp; } return (int)h; } /* Allocate a new state structure */ struct state *State_new() { struct state *new; new = (struct state *)malloc (sizeof(struct state)) ; MemoryCheck(new); return new; } /* There is one instance of the following structure for each ** associative array of type "x3". */ struct s_x3 { int size; /* The number of available slots. Must be a power of 2, >= 1. */ int count; /* Number of currently slots filled */ struct s_x3node *tbl; /* The data stored here */ struct s_x3node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x3". */ typedef struct s_x3node { struct state *data; /* The data */ struct config *key; /* The key */ struct s_x3node *next; /* Next entry with the same hash */ struct s_x3node **from; /* Previous link */ } x3node; /* There is only one instance of the array, which is the following */ static struct s_x3 *x3a; /* Allocate a new associative array */ void State_init(){ if (x3a) return; x3a = (struct s_x3*)malloc (sizeof(struct s_x3)) ; if (x3a) { x3a->size = 128; x3a->count = 0; x3a->tbl = (x3node*)malloc ( (sizeof(x3node) + sizeof(x3node*))*128) ; if (x3a->tbl==0) { free(x3a); x3a = 0; } else { int i; x3a->ht = (x3node**)&(x3a->tbl[128]); for(i=0; i<128; i++) x3a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int State_insert(struct state *data, struct config *key) { x3node *np; int h; int ph; if (x3a==0) return 0; ph = statehash(key); h = ph & (x3a->size-1); np = x3a->ht[h]; while (np) { if (statecmp(np->key,key)==0) { /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if (x3a->count>=x3a->size) { /* Need to make the hash table bigger */ int i,size; struct s_x3 array; array.size = size = x3a->size*2; array.count = x3a->count; array.tbl = (x3node*)malloc( (sizeof(x3node) + sizeof(x3node*))*size) ; if (array.tbl==0) return 0; /* Fail due to malloc failure */ array.ht = (x3node**)&(array.tbl[size]); for(i=0; icount; i++){ x3node *oldnp, *newnp; oldnp = &(x3a->tbl[i]); h = statehash(oldnp->key) & (size-1); newnp = &(array.tbl[i]); if (array.ht[h]) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->key = oldnp->key; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x3a->tbl); *x3a = array; } /* Insert the new data */ h = ph & (x3a->size-1); np = &(x3a->tbl[x3a->count++]); np->key = key; np->data = data; if (x3a->ht[h]) x3a->ht[h]->from = &(np->next); np->next = x3a->ht[h]; x3a->ht[h] = np; np->from = &(x3a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ struct state *State_find(struct config *key) { int h; x3node *np; if (x3a==0) return 0; h = statehash(key) & (x3a->size-1); np = x3a->ht[h]; while (np) { if (statecmp(np->key,key)==0) break; np = np->next; } return np ? np->data : 0; } /* Return an array of pointers to all data in the table. ** The array is obtained from malloc. Return NULL if memory allocation ** problems, or if the array is empty. */ struct state **State_arrayof() { struct state **array; int i,size; if (x3a==0) return 0; size = x3a->count; array = (struct state **)malloc (sizeof(struct state *)*size) ; if (array) { for(i=0; itbl[i].data; } return array; } miller-5.6.2/c/parsing/lemon_state_table.h000066400000000000000000000005161354153536500205430ustar00rootroot00000000000000#ifndef LEMON_STATE_TABLE_H #define LEMON_STATE_TABLE_H /* Routines to manage the state table */ #include "lemon_structs.h" struct state *State_new(); void State_init(void); int State_insert(struct state *, struct config *); struct state *State_find(struct config *); struct state **State_arrayof(); #endif // LEMON_STATE_TABLE_H miller-5.6.2/c/parsing/lemon_string.c000066400000000000000000000070721354153536500175610ustar00rootroot00000000000000#include #include #include #include "lemon_memory.h" #include "lemon_string.h" int strhash(char *x) { unsigned h = 0; while (*x) h = h*13 + *(x++); return (int)h; } // ================================================================ /* There is one instance of the following structure for each ** associative array of type "x1". */ struct s_x1 { int size; /* The number of available slots. Must be a power of 2, >= 1. */ int count; /* Number of currently slots filled */ struct s_x1node *tbl; /* The data stored here */ struct s_x1node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x1". */ typedef struct s_x1node { char *data; /* The data */ struct s_x1node *next; /* Next entry with the same hash */ struct s_x1node **from; /* Previous link */ } x1node; /* There is only one instance of the array, which is the following */ static struct s_x1 *x1a; // ================================================================ /* Works like strdup, sort of. Save a string in malloced memory, but ** keep strings in a table so that the same string is not in more ** than one place. */ char *Strsafe(char *y) { char *z; z = Strsafe_find(y); if (z==0 && (z=malloc (strlen(y)+1) )!=0) { strcpy(z,y); Strsafe_insert(z); } MemoryCheck(z); return z; } /* Allocate a new associative array */ void Strsafe_init(){ if (x1a) return; x1a = (struct s_x1*)malloc (sizeof(struct s_x1)) ; if (x1a) { x1a->size = 1024; x1a->count = 0; x1a->tbl = (x1node*)malloc ( (sizeof(x1node) + sizeof(x1node*))*1024) ; if (x1a->tbl==0) { free(x1a); x1a = 0; } else { int i; x1a->ht = (x1node**)&(x1a->tbl[1024]); for(i=0; i<1024; i++) x1a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int Strsafe_insert(char *data) { x1node *np; int h; int ph; if (x1a==0) return 0; ph = strhash(data); h = ph & (x1a->size-1); np = x1a->ht[h]; while (np) { if (strcmp(np->data,data)==0) { /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if (x1a->count>=x1a->size) { /* Need to make the hash table bigger */ int i,size; struct s_x1 array; array.size = size = x1a->size*2; array.count = x1a->count; array.tbl = (x1node*)malloc( (sizeof(x1node) + sizeof(x1node*))*size) ; if (array.tbl==0) return 0; /* Fail due to malloc failure */ array.ht = (x1node**)&(array.tbl[size]); for(i=0; icount; i++){ x1node *oldnp, *newnp; oldnp = &(x1a->tbl[i]); h = strhash(oldnp->data) & (size-1); newnp = &(array.tbl[i]); if (array.ht[h]) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x1a->tbl); *x1a = array; } /* Insert the new data */ h = ph & (x1a->size-1); np = &(x1a->tbl[x1a->count++]); np->data = data; if (x1a->ht[h]) x1a->ht[h]->from = &(np->next); np->next = x1a->ht[h]; x1a->ht[h] = np; np->from = &(x1a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ char *Strsafe_find(char *key) { int h; x1node *np; if (x1a==0) return 0; h = strhash(key) & (x1a->size-1); np = x1a->ht[h]; while (np) { if (strcmp(np->data,key)==0) break; np = np->next; } return np ? np->data : 0; } miller-5.6.2/c/parsing/lemon_string.h000066400000000000000000000003031354153536500175540ustar00rootroot00000000000000#ifndef LEMON_STRING_H #define LEMON_STRING_H int strhash(char *x); char *Strsafe(char*); void Strsafe_init(); int Strsafe_insert(char *); char *Strsafe_find(char *); #endif // LEMON_STRING_H miller-5.6.2/c/parsing/lemon_structs.h000066400000000000000000000170161354153536500177660ustar00rootroot00000000000000#ifndef LEMON_STRUCTS_H #define LEMON_STRUCTS_H typedef enum {B_FALSE=0, B_TRUE} Boolean; // Symbols (terminals and nonterminals) of the grammar are stored in the following: struct symbol { char *name; /* Name of the symbol */ int index; /* Index number for this symbol */ enum { TERMINAL, NONTERMINAL } type; /* Symbols are all either TERMINALS or NTs */ struct rule *rule; /* Linked list of rules of this (if an NT) */ struct symbol *fallback; /* fallback token in case this token doesn't parse */ int prec; /* Precedence if defined (-1 otherwise) */ enum e_assoc { LEFT, RIGHT, NONE, UNK } assoc; /* Associativity if predecence is defined */ char *firstset; /* First-set for all rules of this symbol */ Boolean lambda; /* True if NT and can generate an empty string */ char *destructor; /* Code which executes whenever this symbol is ** popped from the stack during error processing */ int destructorln; /* Line number of destructor code */ char *datatype; /* The data type of information held by this ** object. Only used if type==NONTERMINAL */ int dtnum; /* The data type number. In the parser, the value ** stack is a union. The .yy%d element of this ** union is the correct data type for this object */ }; // Each production rule in the grammar is stored in the following structure. struct rule { struct symbol *lhs; /* Left-hand side of the rule */ char *lhsalias; /* Alias for the LHS (NULL if none) */ int ruleline; /* Line number for the rule */ int nrhs; /* Number of RHS symbols */ struct symbol **rhs; /* The RHS symbols */ char **rhsalias; /* An alias for each RHS symbol (NULL if none) */ int line; /* Line number at which code begins */ char *code; /* The code executed when this rule is reduced */ struct symbol *precsym; /* Precedence symbol for this rule */ int index; /* An index number for this rule */ Boolean canReduce; /* True if this rule is ever reduced */ struct rule *nextlhs; /* Next rule with the same LHS */ struct rule *next; /* Next rule in the global list */ }; // A configuration is a production rule of the grammar together with // a mark (dot) showing how much of that rule has been processed so far. // Configurations also contain a follow-set which is a list of terminal // symbols which are allowed to immediately follow the end of the rule. // Every configuration is recorded as an instance of the following: struct config { struct rule *rp; // The rule upon which the configuration is based int dot; // The parse point char *fws; // Follow-set for this configuration only struct plink *fplp; // Follow-set forward propagation links struct plink *bplp; // Follow-set backwards propagation links struct state *stp; // Pointer to state which contains this enum { COMPLETE, // The status is used during followset and INCOMPLETE // shift computations } status; struct config *next; // Next configuration in the state struct config *bp; // The next basis configuration }; // Every shift or reduce operation is stored as one of the following struct action { struct symbol *sp; // The look-ahead symbol enum e_action { SHIFT, ACCEPT, REDUCE, ERROR, CONFLICT, // Was a reduce, but part of a conflict SH_RESOLVED, // Was a shift. Precedence resolved conflict RD_RESOLVED, // Was reduce. Precedence resolved conflict NOT_USED // Deleted by compression } type; union { struct state *stp; // The new state, if a shift struct rule *rp; // The rule, if a reduce } x; struct action *next; // Next action for this state struct action *collide; // Next action with the same hash }; // Each state of the generated parser's finite state machine // is encoded as an instance of the following structure. struct state { struct config *bp; // The basis configurations for this state struct config *cfp; // All configurations in this set int index; // Sequencial number for this state struct action *ap; // Array of actions for this state int nTknAct, nNtAct; // Number of actions on terminals and nonterminals int iTknOfst, iNtOfst; // yy_action[] offset for terminals and nonterms int iDflt; // Default action }; #define NO_OFFSET (-2147483647) // A followset propagation link indicates that the contents of one // configuration followset should be propagated to another whenever // the first changes. struct plink { struct config *cfp; // The configuration to which linked struct plink *next; // The next propagate link }; // The state vector for the entire parser generator is recorded as // follows. (LEMON uses no global variables and makes little use of // static variables. Fields in the following structure can be thought // of as being global variables in the program.) struct lemon { struct state **sorted; // Table of states sorted by state number struct rule *rule; // List of all rules int nstate; // Number of states int nrule; // Number of rules int nsymbol; // Number of terminal and nonterminal symbols int nterminal; // Number of terminal symbols struct symbol **symbols; // Sorted array of pointers to symbols int errorcnt; // Number of errors struct symbol *errsym; // The error symbol char *name; // Name of the generated parser char *arg; // Declaration of the 3th argument to parser char *tokentype; // Type of terminal symbols in the parser stack char *vartype; // The default type of non-terminal symbols char *start; // Name of the start symbol for the grammar char *stacksize; // Size of the parser stack char *include; // Code to put at the start of the C file int includeln; // Line number for start of include code char *error; // Code to execute when an error is seen int errorln; // Line number for start of error code char *overflow; // Code to execute on a stack overflow int overflowln; // Line number for start of overflow code char *failure; // Code to execute on parser failure int failureln; // Line number for start of failure code char *accept; // Code to execute when the parser excepts int acceptln; // Line number for the start of accept code char *extracode; // Code appended to the generated file int extracodeln; // Line number for the start of the extra code char *tokendest; // Code to execute to destroy token data int tokendestln; // Line number for token destroyer code char *vardest; // Code for the default non-terminal destructor int vardestln; // Line number for default non-term destructor code char *filename; // Name of the input file char *outname; // Name of the current output file char *tokenprefix; // A prefix added to token names in the .h file int nconflict; // Number of parsing conflicts int tablesize; // Size of the parse tables int basisflag; // Print only basis configurations int has_fallback; // True if any %fallback is seen in the grammer char *argv0; // Name of the program }; #endif // LEMON_STRUCTS_H miller-5.6.2/c/parsing/lemon_symbol.c000066400000000000000000000122761354153536500175620ustar00rootroot00000000000000#include #include #include #include #include "lemon_symbol.h" #include "lemon_memory.h" #include "lemon_string.h" // ================================================================ /* There is one instance of the following structure for each ** associative array of type "x2". */ struct s_x2 { int size; /* The number of available slots. Must be a power of 2, >= 1. */ int count; /* Number of currently slots filled */ struct s_x2node *tbl; /* The data stored here */ struct s_x2node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x2". */ typedef struct s_x2node { struct symbol *data; /* The data */ char *key; /* The key */ struct s_x2node *next; /* Next entry with the same hash */ struct s_x2node **from; /* Previous link */ } x2node; /* There is only one instance of the array, which is the following */ static struct s_x2 *x2a; // ================================================================ /* Return a pointer to the (terminal or nonterminal) symbol "x". ** Create a new symbol if this is the first time "x" has been seen. */ struct symbol *Symbol_new(char *x) { struct symbol *sp; sp = Symbol_find(x); if (sp==0) { sp = (struct symbol *)malloc (sizeof(struct symbol)) ; MemoryCheck(sp); sp->name = Strsafe(x); sp->type = isupper(*x) ? TERMINAL : NONTERMINAL; sp->rule = 0; sp->fallback = 0; sp->prec = -1; sp->assoc = UNK; sp->firstset = 0; sp->lambda = B_FALSE; sp->destructor = 0; sp->datatype = 0; Symbol_insert(sp,sp->name); } return sp; } /* Allocate a new associative array */ void Symbol_init(){ if (x2a) return; x2a = (struct s_x2*)malloc (sizeof(struct s_x2)) ; if (x2a) { x2a->size = 128; x2a->count = 0; x2a->tbl = (x2node*)malloc ( (sizeof(x2node) + sizeof(x2node*))*128) ; if (x2a->tbl==0) { free(x2a); x2a = 0; } else { int i; x2a->ht = (x2node**)&(x2a->tbl[128]); for(i=0; i<128; i++) x2a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int Symbol_insert(struct symbol *data, char *key) { x2node *np; int h; int ph; if (x2a==0) return 0; ph = strhash(key); h = ph & (x2a->size-1); np = x2a->ht[h]; while (np) { if (strcmp(np->key,key)==0) { /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if (x2a->count>=x2a->size) { /* Need to make the hash table bigger */ int i,size; struct s_x2 array; array.size = size = x2a->size*2; array.count = x2a->count; array.tbl = (x2node*)malloc( (sizeof(x2node) + sizeof(x2node*))*size) ; if (array.tbl==0) return 0; /* Fail due to malloc failure */ array.ht = (x2node**)&(array.tbl[size]); for(i=0; icount; i++){ x2node *oldnp, *newnp; oldnp = &(x2a->tbl[i]); h = strhash(oldnp->key) & (size-1); newnp = &(array.tbl[i]); if (array.ht[h]) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->key = oldnp->key; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x2a->tbl); *x2a = array; } /* Insert the new data */ h = ph & (x2a->size-1); np = &(x2a->tbl[x2a->count++]); np->key = key; np->data = data; if (x2a->ht[h]) x2a->ht[h]->from = &(np->next); np->next = x2a->ht[h]; x2a->ht[h] = np; np->from = &(x2a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ struct symbol *Symbol_find(char *key) { int h; x2node *np; if (x2a==0) return 0; h = strhash(key) & (x2a->size-1); np = x2a->ht[h]; while (np) { if (strcmp(np->key,key)==0) break; np = np->next; } return np ? np->data : 0; } /* Return the n-th data. Return NULL if n is out of range. */ struct symbol *Symbol_Nth(int n) { struct symbol *data; if (x2a && n>0 && n<=x2a->count) { data = x2a->tbl[n-1].data; } else { data = 0; } return data; } /* Return the size of the array */ int Symbol_count() { return x2a ? x2a->count : 0; } /* Return an array of pointers to all data in the table. ** The array is obtained from malloc. Return NULL if memory allocation ** problems, or if the array is empty. */ struct symbol **Symbol_arrayof() { struct symbol **array; int i,size; if (x2a==0) return 0; size = x2a->count; array = (struct symbol **)malloc (sizeof(struct symbol *)*size) ; if (array) { for(i=0; itbl[i].data; } return array; } /* Compare two symbols for working purposes ** ** Symbols that begin with upper case letters (terminals or tokens) ** must sort before symbols that begin with lower case letters ** (non-terminals). Other than that, the order does not matter. ** ** We find experimentally that leaving the symbols in their original ** order (the order they appeared in the grammar file) gives the ** smallest parser tables in SQLite. */ int Symbolcmpp(struct symbol **a, struct symbol **b) { int i1 = (**a).index + 10000000*((**a).name[0]>'Z'); int i2 = (**b).index + 10000000*((**b).name[0]>'Z'); return i1-i2; } miller-5.6.2/c/parsing/lemon_symbol.h000066400000000000000000000006061354153536500175610ustar00rootroot00000000000000#ifndef LEMON_SYMBOL_H #define LEMON_SYMBOL_H #include "lemon_structs.h" struct symbol *Symbol_new(char *x); void Symbol_init(); int Symbol_insert(struct symbol *data, char *key); struct symbol *Symbol_find(char *key); struct symbol *Symbol_Nth(int n); int Symbol_count(); struct symbol **Symbol_arrayof(); int Symbolcmpp(struct symbol **a, struct symbol **b); #endif // LEMON_SYMBOL_H miller-5.6.2/c/parsing/lempar.c000066400000000000000000000530441354153536500163410ustar00rootroot00000000000000/* Driver template for the LEMON parser generator. ** The author disclaims copyright to this source code. */ /* First off, code is include which follows the "include" declaration ** in the input file. */ #include %% /* Next is all token values, in a form suitable for use by makeheaders. ** This section will be null unless lemon is run with the -m switch. */ /* ** These constants (all generated automatically by the parser generator) ** specify the various kinds of tokens (terminals) that the parser ** understands. ** ** Each symbol here is a terminal symbol in the grammar. */ %% /* Make sure the INTERFACE macro is defined. */ #ifndef INTERFACE # define INTERFACE 1 #endif /* The next thing included is series of defines which control ** various aspects of the generated parser. ** YYCODETYPE is the data type used for storing terminal ** and nonterminal numbers. "unsigned char" is ** used if there are fewer than 250 terminals ** and nonterminals. "int" is used otherwise. ** YYNOCODE is a number of type YYCODETYPE which corresponds ** to no legal terminal or nonterminal number. This ** number is used to fill in empty slots of the hash ** table. ** YYFALLBACK If defined, this indicates that one or more tokens ** have fall-back values which should be used if the ** original value of the token will not parse. ** YYACTIONTYPE is the data type used for storing terminal ** and nonterminal numbers. "unsigned char" is ** used if there are fewer than 250 rules and ** states combined. "int" is used otherwise. ** ParseTOKENTYPE is the data type used for minor tokens given ** directly to the parser from the tokenizer. ** YYMINORTYPE is the data type used for all minor tokens. ** This is typically a union of many types, one of ** which is ParseTOKENTYPE. The entry in the union ** for base tokens is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. ** ParseARG_SDECL A static variable declaration for the %extra_argument ** ParseARG_PDECL A parameter declaration for the %extra_argument ** ParseARG_STORE Code to store %extra_argument into pparser ** ParseARG_FETCH Code to extract %extra_argument from pparser ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. */ %% #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) #define YY_ERROR_ACTION (YYNSTATE+YYNRULE) /* Next are that tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement ** functions that take a state number and lookahead value and return an ** action integer. ** ** Suppose the action integer is N. Then the action is determined as ** follows ** ** 0 <= N < YYNSTATE Shift N. That is, push the lookahead ** token onto the stack and goto state N. ** ** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE. ** ** N == YYNSTATE+YYNRULE A syntax error has occurred. ** ** N == YYNSTATE+YYNRULE+1 The parser accepts its input. ** ** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused ** slots in the yy_action[] table. ** ** The action table is constructed as a single large table named yy_action[]. ** Given state S and lookahead X, the action is computed as ** ** yy_action[ yy_shift_ofst[S] + X ] ** ** If the index value yy_shift_ofst[S]+X is out of range or if the value ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S] ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table ** and that yy_default[S] should be used instead. ** ** The formula above is for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of ** YY_SHIFT_USE_DFLT. ** ** The following are the tables generated in this section: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. */ %% #define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0])) /* The next table maps tokens into fallback tokens. If a construct ** like the following: ** ** %fallback ID X Y Z. ** ** appears in the grammar, then ID becomes a fallback token for X, Y, ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser ** but it does not parse, the type of the token is changed to ID and ** the parse is retried before an error is thrown. */ #ifdef YYFALLBACK static const YYCODETYPE yyFallback[] = { %% }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** ** + The state number for the parser at this level of the stack. ** ** + The value of the token stored at this level of the stack. ** (In other words, the "major" token.) ** ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. */ struct yyStackEntry { int stateno; /* The state-number */ int major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This ** is the value of the token */ }; typedef struct yyStackEntry yyStackEntry; /* The state of the parser is completely contained in an instance of ** the following structure. */ struct _lemon_parser_t { int yyidx; /* Index of top element in stack */ int yyerrcnt; /* Shifts left before out of the error */ ParseARG_SDECL /* A place to hold %extra_argument */ yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ }; typedef struct _lemon_parser_t lemon_parser_t; #ifndef NDEBUG #include static FILE *yyTraceFILE = 0; static char *yyTracePrompt = 0; #endif /* NDEBUG */ #ifndef NDEBUG /* ** Turn parser tracing on by giving a stream to which to write the trace ** and a prompt to preface each trace message. Tracing is turned off ** by making either argument NULL ** ** Inputs: **
    **
  • A FILE* to which trace output should be written. ** If NULL, then tracing is turned off. **
  • A prefix string written at the beginning of every ** line of trace output. If NULL, then tracing is ** turned off. **
** ** Outputs: ** None. */ void ParseTrace(FILE *TraceFILE, char *zTracePrompt) { yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if (yyTraceFILE==0) yyTracePrompt = 0; else if (yyTracePrompt==0) yyTraceFILE = 0; } #endif /* NDEBUG */ #ifndef NDEBUG /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *yyTokenName[] = { %% }; #endif /* NDEBUG */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *yyRuleName[] = { %% }; #endif /* NDEBUG */ /* ** This function returns the symbolic name associated with a token ** value. */ const char *ParseTokenName(int tokenType) { #ifndef NDEBUG if (tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0]))) { return yyTokenName[tokenType]; } else { return "Unknown"; } #else return ""; #endif } /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like ** malloc. ** ** Inputs: ** A pointer to the function used to allocate memory. ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls ** to Parse and lemon_parser_free. */ void *lemon_parser_alloc(void *(*mallocProc)(size_t)){ lemon_parser_t *pParser; pParser = (lemon_parser_t*)(*mallocProc) ((size_t)sizeof(lemon_parser_t)) ; if (pParser) { pParser->yyidx = -1; } return pParser; } /* The following function deletes the value associated with a ** symbol. The symbol can be either a terminal or nonterminal. ** "yymajor" is the symbol code, and "yypminor" is a pointer to ** the value. */ void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){ switch (yymajor) { /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen ** when the symbol is popped from the stack during a ** reduce or during error processing or when a parser is ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are not used ** inside the C code. */ %% default: break; /* If no destructor action specified: do nothing */ } } /* ** Pop the parser's stack once. ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. ** ** Return the major token number for the symbol popped. */ static int yy_pop_parser_stack(lemon_parser_t *pParser){ YYCODETYPE yymajor; yyStackEntry *yytos = &pParser->yystack[pParser->yyidx]; if (pParser->yyidx<0) return 0; #ifndef NDEBUG if (yyTraceFILE && pParser->yyidx>=0) { fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); } #endif yymajor = yytos->major; yy_destructor (yymajor, &yytos->minor); pParser->yyidx--; return yymajor; } /* ** Deallocate and destroy a parser. Destructors are all called for ** all stack elements before shutting the parser down. ** ** Inputs: **
    **
  • A pointer to the parser. This should be a pointer ** obtained from lemon_parser_alloc. **
  • A pointer to a function used to reclaim memory obtained ** from malloc. **
*/ void lemon_parser_free( void *pvparser, /* The parser to be deleted */ void (*freeProc)(void*)) /* Function used to reclaim memory */ { lemon_parser_t *pparser = (lemon_parser_t*)pvparser; if (pparser==0) return; while (pparser->yyidx>=0) yy_pop_parser_stack(pparser); (*freeProc)((void*)pparser); } /* ** Find the appropriate action for a parser given the terminal ** look-ahead token iLookAhead. ** ** If the look-ahead token is YYNOCODE, then check to see if the action is ** independent of the look-ahead. If it is, return the action, otherwise ** return YY_NO_ACTION. */ static int yy_find_shift_action( lemon_parser_t *pparser, /* The parser */ int iLookAhead) /* The look-ahead token */ { int i; int stateno = pparser->yystack[pparser->yyidx].stateno; /* if (pparser->yyidx<0) return YY_NO_ACTION; */ i = yy_shift_ofst[stateno]; if (i==YY_SHIFT_USE_DFLT) { return yy_default[stateno]; } if (iLookAhead==YYNOCODE) { return YY_NO_ACTION; } i += iLookAhead; if (i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead) { #ifdef YYFALLBACK int iFallback; /* Fallback token */ if (iLookAhead %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); } #endif return yy_find_shift_action(pparser, iFallback); } #endif return yy_default[stateno]; } else { return yy_action[i]; } } /* ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. ** ** If the look-ahead token is YYNOCODE, then check to see if the action is ** independent of the look-ahead. If it is, return the action, otherwise ** return YY_NO_ACTION. */ static int yy_find_reduce_action( lemon_parser_t *pparser, /* The parser */ int iLookAhead) /* The look-ahead token */ { int i; int stateno = pparser->yystack[pparser->yyidx].stateno; i = yy_reduce_ofst[stateno]; if (i==YY_REDUCE_USE_DFLT) { return yy_default[stateno]; } if (iLookAhead==YYNOCODE) { return YY_NO_ACTION; } i += iLookAhead; if (i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead) { return yy_default[stateno]; } else { return yy_action[i]; } } /* ** Perform a shift action. */ static void yy_shift( lemon_parser_t *pparser, /* The parser to be shifted */ int yyNewState, /* The new state to shift in */ int yyMajor, /* The major token to shift in */ YYMINORTYPE *yypMinor) /* Pointer ot the minor token to shift in */ { yyStackEntry *yytos; pparser->yyidx++; if (pparser->yyidx>=YYSTACKDEPTH) { ParseARG_FETCH; pparser->yyidx--; #ifndef NDEBUG if (yyTraceFILE) { fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); } #endif while (pparser->yyidx>=0) yy_pop_parser_stack(pparser); /* Here code is inserted which will execute if the parser ** stack every overflows */ %% ParseARG_STORE; /* Suppress warning about unused %extra_argument var */ return; } yytos = &pparser->yystack[pparser->yyidx]; yytos->stateno = yyNewState; yytos->major = yyMajor; yytos->minor = *yypMinor; #ifndef NDEBUG if (yyTraceFILE && pparser->yyidx>0) { int i; fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); for(i=1; i<=pparser->yyidx; i++) fprintf(yyTraceFILE," %s", yyTokenName[pparser->yystack[i].major]); fprintf(yyTraceFILE,"\n"); } #endif } /* The following table contains information about every rule that ** is used during the reduce. */ static struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ unsigned char nrhs; /* Number of right-hand side symbols in the rule */ } yyRuleInfo[] = { %% }; static void yy_accept(lemon_parser_t*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. */ static void yy_reduce( lemon_parser_t *pparser, /* The parser */ int yyruleno) /* Number of the rule by which to reduce */ { int yygoto = -999 ; /* The next state */ int yyact = -999; /* The next action */ YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ ParseARG_FETCH; yymsp = &pparser->yystack[pparser->yyidx]; #ifndef NDEBUG if (yyTraceFILE && yyruleno>=0 && yyruleno ** { ... } // User supplied code ** #line ** break; */ %% }; yygoto = yyRuleInfo[yyruleno].lhs; yysize = yyRuleInfo[yyruleno].nrhs; pparser->yyidx -= yysize; yyact = yy_find_reduce_action(pparser,yygoto); if (yyact < YYNSTATE) { yy_shift(pparser,yyact,yygoto,&yygotominor); } else if (yyact == YYNSTATE + YYNRULE + 1) { yy_accept(pparser); } } /* ** The following code executes when the parse fails */ static void yy_parse_failed(lemon_parser_t *pparser) { ParseARG_FETCH; #ifndef NDEBUG if (yyTraceFILE) { fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); } #endif while (pparser->yyidx >= 0) yy_pop_parser_stack(pparser); /* Here code is inserted which will be executed whenever the ** parser fails */ %% ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } /* ** The following code executes when a syntax error first occurs. */ static void yy_syntax_error( lemon_parser_t *pparser, /* The parser */ int yymajor, /* The major type of the error token */ YYMINORTYPE yyminor /* The minor type of the error token */ ){ ParseARG_FETCH; #define TOKEN (yyminor.yy0) %% ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } /* ** The following is executed when the parser accepts */ static void yy_accept(lemon_parser_t *pparser) { ParseARG_FETCH; #ifndef NDEBUG if (yyTraceFILE) { fprintf(yyTraceFILE,"%sAccept!\n", yyTracePrompt); } #endif while (pparser->yyidx>=0) yy_pop_parser_stack(pparser); /* Here code is inserted which will be executed whenever the ** parser accepts */ %% ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } /* The main parser program. ** The first argument is a pointer to a structure obtained from ** "lemon_parser_alloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for ** use by the action routines. ** ** Inputs: **
    **
  • A pointer to the parser (an opaque structure). **
  • The major token number. **
  • The minor token number. **
  • An option argument of a grammar-specified type. **
** ** Outputs: ** None. */ int lemon_parser_parse_token( void *pvparser, /* The parser */ int yymajor, /* The major token code number */ ParseTOKENTYPE yyminor /* The value for the token */ ParseARG_PDECL) /* Optional %extra_argument parameter */ { YYMINORTYPE yyminorunion; int yyact; /* The parser action. */ int yyendofinput; /* True if we are at the end of input */ int yyerrorhit = 0; /* True if yymajor has invoked an error */ lemon_parser_t *pparser; /* The parser */ int parse_code = 1; /* (re)initialize the parser, if necessary */ pparser = (lemon_parser_t*)pvparser; if (pparser->yyidx<0) { if (yymajor==0) return 1; pparser->yyidx = 0; pparser->yyerrcnt = -1; pparser->yystack[0].stateno = 0; pparser->yystack[0].major = 0; } yyminorunion.yy0 = yyminor; yyendofinput = (yymajor==0); ParseARG_STORE; #ifndef NDEBUG if (yyTraceFILE) { fprintf(yyTraceFILE,"%sInput %s\n", yyTracePrompt, yyTokenName[yymajor]); } #endif do { yyact = yy_find_shift_action(pparser,yymajor); if (yyactyyerrcnt--; if (yyendofinput && pparser->yyidx>=0) { yymajor = 0; } else { yymajor = YYNOCODE; } } else if (yyact < YYNSTATE + YYNRULE) { yy_reduce(pparser,yyact-YYNSTATE); } else if (yyact == YY_ERROR_ACTION) { int yymx; #ifndef NDEBUG if (yyTraceFILE) { fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); } #endif #ifdef YYERRORSYMBOL /* A syntax error has occurred. ** The response to an error depends upon whether or not the ** grammar defines an error token "ERROR". ** ** This is what we do if the grammar does define ERROR: ** ** * Call the %syntax_error function. ** ** * Begin popping the stack until we enter a state where ** it is legal to shift the error symbol, then shift ** the error symbol. ** ** * Set the error count to three. ** ** * Begin accepting and shifting new tokens. No new error ** processing will occur until three tokens have been ** shifted successfully. ** */ if (pparser->yyerrcnt<0) { yy_syntax_error(pparser, yymajor, yyminorunion); return 0; } yymx = pparser->yystack[pparser->yyidx].major; if (yymx==YYERRORSYMBOL || yyerrorhit) { #ifndef NDEBUG if (yyTraceFILE) { fprintf(yyTraceFILE,"%sDiscard input token %s\n", yyTracePrompt, yyTokenName[yymajor]); } #endif yy_destructor(yymajor,&yyminorunion); yymajor = YYNOCODE; } else { while( pparser->yyidx >= 0 && yymx != YYERRORSYMBOL && (yyact = yy_find_shift_action(pparser,YYERRORSYMBOL)) >= YYNSTATE ){ yy_pop_parser_stack(pparser); } if (pparser->yyidx < 0 || yymajor==0) { yy_destructor(yymajor,&yyminorunion); yy_parse_failed(pparser); parse_code = 0; yymajor = YYNOCODE; } else if (yymx!=YYERRORSYMBOL) { YYMINORTYPE u2; u2.YYERRSYMDT = 0; yy_shift(pparser,yyact,YYERRORSYMBOL,&u2); } } pparser->yyerrcnt = 3; yyerrorhit = 1; #else /* YYERRORSYMBOL is not defined */ /* This is what we do if the grammar does not define ERROR: ** ** * Report an error message, and throw away the input token. ** ** * If the input token is $, then fail the parse. ** ** As before, subsequent error messages are suppressed until ** three input tokens have been successfully shifted. */ if (pparser->yyerrcnt<=0) { yy_syntax_error(pparser, yymajor, yyminorunion); return 0; } pparser->yyerrcnt = 3; yy_destructor(yymajor,&yyminorunion); if (yyendofinput) { yy_parse_failed(pparser); parse_code = 0; } yymajor = YYNOCODE; #endif } else { yy_accept(pparser); yymajor = YYNOCODE; } } while (yymajor!=YYNOCODE && pparser->yyidx>=0) ; return parse_code; } miller-5.6.2/c/parsing/mlr_dsl_lexer.l000066400000000000000000000365761354153536500177400ustar00rootroot00000000000000%{ #include "stdio.h" // for fileno() prototype #include "string.h" // for strdup() prototype #include "mlr_dsl_parse.h" #include "../dsl/mlr_dsl_ast.h" // http://flex.sourceforge.net/manual/Extra-Data.html // NOTE: any new keywords defined here should also be documented // in dsl/mlr_dsl_cst.c's mlr_dsl_keyword_usage() et al. %} %option reentrant %option noyywrap %option extra-type="struct _mlr_dsl_ast_node_t **" %% ";" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_SEMICOLON; } "{" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_LBRACE; } "}" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RBRACE; } "=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); return MD_TOKEN_ASSIGN; } "filter" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FILTER); return MD_TOKEN_FILTER; } "unset" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_UNSET); return MD_TOKEN_UNSET; } "tee" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_TEE); return MD_TOKEN_TEE; } "emitf" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITF); return MD_TOKEN_EMITF; } "emitp" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITP); return MD_TOKEN_EMITP; } "emit" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMIT); return MD_TOKEN_EMIT; } "dump" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DUMP); return MD_TOKEN_DUMP; } "edump" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EDUMP); return MD_TOKEN_EDUMP; } "print" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINT); return MD_TOKEN_PRINT; } "printn" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINTN); return MD_TOKEN_PRINTN; } "eprint" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINT); return MD_TOKEN_EPRINT; } "eprintn" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINTN); return MD_TOKEN_EPRINTN; } "stdout" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STDOUT); return MD_TOKEN_STDOUT; } "stderr" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STDERR); return MD_TOKEN_STDERR; } "func" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_FUNC_DEF; } "subr" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_SUBR_DEF; } "call" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_SUBR_CALL; } "return" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RETURN; } "begin" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_BEGIN; } "end" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_END; } "all" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ALL); return MD_TOKEN_ALL; } "do" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DO_WHILE); return MD_TOKEN_DO; } "while" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_WHILE); return MD_TOKEN_WHILE; } "for" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_FOR; } "in" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IN); return MD_TOKEN_IN; } "break" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BREAK); return MD_TOKEN_BREAK; } "continue" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTINUE); return MD_TOKEN_CONTINUE; } "if" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); return MD_TOKEN_IF; } "elif" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); return MD_TOKEN_ELIF; } "else" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); return MD_TOKEN_ELSE; } "?" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_QUESTION_MARK; } ":" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_COLON; } "||" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_OR; } "||=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_OR_EQUALS; } "^^" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_XOR; } "^^=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_XOR_EQUALS; } "&&" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_AND; } "&&=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_AND_EQUALS; } "=~" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MATCHES; } "!=~" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DOES_NOT_MATCH; } "==" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_EQ; } "!=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_NE; } ">" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_GT; } ">=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_GE; } "<" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LT; } "<=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LE; } "|" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_OR; } "|=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_OR_EQUALS; } "^" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_XOR; } "^=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_XOR_EQUALS; } "&" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_AND; } "&=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_AND_EQUALS; } "<<" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_LSH; } "<<=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_LSH_EQUALS; } ">>" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_RSH; } ">>=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_RSH_EQUALS; } "+" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_PLUS; } "+=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_PLUS_EQUALS; } "-" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MINUS; } "-=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MINUS_EQUALS; } "\." { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DOT; } "\.=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DOT_EQUALS; } "*" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_TIMES; } "*=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_TIMES_EQUALS; } "/" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DIVIDE; } "/=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_DIVIDE_EQUALS; } "//" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_INT_DIVIDE; } "//=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_INT_DIVIDE_EQUALS; } "\.+" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_OPLUS; } "\.+=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_OPLUS_EQUALS; } "\.-" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_OMINUS; } "\.-=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_OMINUS_EQUALS; } "\.*" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_OTIMES; } "\.*=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_OTIMES_EQUALS; } "\./" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_ODIVIDE; } "\./=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_ODIVIDE_EQUALS; } "\.//" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_INT_ODIVIDE; } "\.//=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_INT_ODIVIDE_EQUALS; } "%" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MOD; } "%=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_MOD_EQUALS; } "!" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_LOGICAL_NOT; } "~" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_BITWISE_NOT; } "**" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_POW; } "**=" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); return MD_TOKEN_POW_EQUALS; } \$\* { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_SREC); return MD_TOKEN_FULL_SREC; } \$ { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_DOLLAR_SIGN; } \$[a-zA-Z_0-9]+ { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); return MD_TOKEN_FIELD_NAME; } \$\{([^\}]|\\.)*\} { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); return MD_TOKEN_BRACED_FIELD_NAME; } @[a-zA-Z_0-9]+ { // Note: the parser depends on the at-sign being here. If this is changed, // that needs to be changed as well. *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); return MD_TOKEN_UNBRACED_OOSVAR_NAME; } @\{([^\}]|\\.)*\} { // Note: the parser depends on the percent-sign being here. If this is changed, // that needs to be changed as well. *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); return MD_TOKEN_BRACED_OOSVAR_NAME; } @ { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_AT_SIGN; } \@\* { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_OOSVAR); return MD_TOKEN_FULL_OOSVAR; } "\[" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_LEFT_BRACKET; } "\]" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RIGHT_BRACKET; } [0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { // Leading minus sign is handled via the unary-minus operator, not here. // 123 // 123. 123.4 // .234 // 1e2 // 1e-2 // 1.2e3 1.e3 // 1.2e-3 1.e-3 // .2e3 // .2e-3 1.e-3 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } 0x[0-9a-fA-F]+ { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); return MD_TOKEN_NUMBER; } \"([^\\\"]|\\.)*\" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); return MD_TOKEN_STRING; } \"([^\\\"]|\\.)*\"\i { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_REGEXI); return MD_TOKEN_REGEXI; } "map" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_MAP; } "var" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_VAR; } "num" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION); return MD_TOKEN_NUMERIC; } "int" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION); return MD_TOKEN_INT; } "float" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION); return MD_TOKEN_FLOAT; } "bool" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION); return MD_TOKEN_BOOLEAN; } "str" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION); return MD_TOKEN_STRING; } "true" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); return MD_TOKEN_TRUE; } "false" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); return MD_TOKEN_FALSE; } "IPS" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "IFS" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "IRS" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "OPS" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "OFS" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "ORS" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "NF" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "NR" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "FNR" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "FILENAME" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "FILENUM" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "M_PI" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "M_E" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); return MD_TOKEN_CONTEXT_VARIABLE; } "ENV" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ENV); return MD_TOKEN_ENV; } [a-zA-Z_][a-zA-Z_0-9]* { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NON_SIGIL_NAME); return MD_TOKEN_NON_SIGIL_NAME; } "(" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_LPAREN; } ")" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_RPAREN; } "," { *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); return MD_TOKEN_COMMA; } #.*\n { } [ \t\r\n] { } . { return -1; } %% miller-5.6.2/c/parsing/mlr_dsl_parse.y000066400000000000000000003401301354153536500177300ustar00rootroot00000000000000// vim: set filetype=none: // (Lemon files have .y extensions like Yacc files but are not Yacc.) %include { #include #include #include #include "../lib/mlrutil.h" #include "../dsl/mlr_dsl_ast.h" #include "../containers/sllv.h" // ================================================================ // AST: // * parens, commas, semis, line endings, whitespace are all stripped away // * variable names and literal values remain as leaf nodes of the AST // * = + - * / ** {function names} remain as non-leaf nodes of the AST // CST: See mlr_dsl_cst.c // // Note: This parser accepts many things that are invalid, e.g. // // * begin{end{}} -- begin/end not at top level // * begin{$x=1} -- references to stream records at begin/end // * break/continue outside of for/while/do-while // * return outside of a function definition // * $x=x -- boundvars outside of for-loop variable bindings // // All of the above are enforced by the CST builder's semantic-analysis logic, // which takes this parser's output AST as input. This is done (a) to keep this // grammar from being overly complex, and (b) so we can get much more // informative error messages in C than in Lemon ('syntax error'). // // The parser hooks all build up an abstract syntax tree specifically for the CST builder. // For clearer visuals on what the ASTs look like: // * See mlr_dsl_cst.c // * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out // * Do "mlr -n put -v 'your expression goes here'" // ================================================================ } %token_type {mlr_dsl_ast_node_t*} %default_type {mlr_dsl_ast_node_t*} %extra_argument {mlr_dsl_ast_t* past} //void token_destructor(mlr_dsl_ast_node_t t) { // printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); //} //%token_destructor {token_destructor($$);} %parse_accept { } // The caller is expected to provide more context. %syntax_error { fprintf(stderr, "mlr DSL: syntax error at \"%s\"\n", TOKEN->text); // This is confusing and (as is) worse than nothing. // Ideally we want to show the position within the input of the syntax error. // // int n = sizeof(yyTokenName) / sizeof(yyTokenName[0]); // for (int i = 0; i < n; ++i) { // int a = yy_find_shift_action(pparser, (YYCODETYPE)i); // if (a < YYNSTATE + YYNRULE) { // fprintf(stderr, "Possible token \"%s\"\n", yyTokenName[i]); // } // } } // ================================================================ md_body ::= md_statement_block(B). { past->proot = B; } // ---------------------------------------------------------------- // Given "$a=1;$b=2;$c=3": since this is a bottom-up parser, we get first the "$a=1", then // "$a=1;$b=2", then "$a=1;$b=2;$c=3", then finally realize that's the top level, or it's embedded // within a cond-block, or for-loop body, etc. // * On the "$a=1" we make a sub-AST called "list" with child $a=1. // * On the "$b=2" we append the next argument to get "list" having children $a=1 and $b=2. // * On the "$c=3" we append the next argument to get "list" having children $a=1, $b=2, and $c=3. // // We handle statements of the form ' ; ; ' by parsing the empty spaces around the semicolons as NOP nodes. // But, the NOP nodes are immediately stripped here and are not included in the AST we return. md_statement_block(A) ::= md_statement_not_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = mlr_dsl_ast_node_alloc_zary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK); } else { A = mlr_dsl_ast_node_alloc_unary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); } } md_statement_block(A) ::= md_statement_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = mlr_dsl_ast_node_alloc_zary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK); } else { A = mlr_dsl_ast_node_alloc_unary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); } } // This could also be done with the list on the left and statement on the right. However, // curly-brace-terminated statements *end* with a semicolon; they don't start with one. So this seems // to be the right way to differentiate. md_statement_block(A) ::= md_statement_not_braced_end(B) MD_TOKEN_SEMICOLON md_statement_block(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = C; } else { A = mlr_dsl_ast_node_prepend_arg(C, B); } } md_statement_block(A) ::= md_statement_braced_end(B) md_statement_block(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = C; } else { A = mlr_dsl_ast_node_prepend_arg(C, B); } } // This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons: md_statement_not_braced_end(A) ::= . { A = mlr_dsl_ast_node_alloc_zary("nop", MD_AST_NODE_TYPE_NOP); } // Local-variable definitions at the current scope md_statement_not_braced_end(A) ::= md_untyped_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_numeric_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_int_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_float_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_boolean_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_string_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_map_local_definition(B). { A = B; } md_statement_not_braced_end(A) ::= md_nonindexed_local_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_indexed_local_assignment(B). { A = B; } // For user-defined functions md_statement_not_braced_end(A) ::= MD_TOKEN_RETURN md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); } md_statement_not_braced_end(A) ::= MD_TOKEN_RETURN md_map_literal(B). { A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); } md_statement_not_braced_end(A) ::= MD_TOKEN_RETURN MD_TOKEN_FULL_SREC(B). { A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); } md_statement_not_braced_end(A) ::= MD_TOKEN_RETURN MD_TOKEN_FULL_OOSVAR(B). { A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); } // For user-defined subroutines md_statement_not_braced_end(A) ::= MD_TOKEN_RETURN. { A = mlr_dsl_ast_node_alloc_zary("return_void", MD_AST_NODE_TYPE_RETURN_VOID); } // Begin/end md_statement_braced_end(A) ::= md_func_block(B). { A = B; } md_statement_braced_end(A) ::= md_subr_block(B). { A = B; } md_statement_braced_end(A) ::= md_begin_block(B). { A = B; } md_statement_braced_end(A) ::= md_end_block(B). { A = B; } // Nested control structures: md_statement_braced_end(A) ::= md_cond_block(B). { A = B; } md_statement_braced_end(A) ::= md_while_block(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_full_srec(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_full_srec_key_only(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_full_oosvar(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_full_oosvar_key_only(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_oosvar(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_oosvar_key_only(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_local_map(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_local_map_key_only(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_map_literal(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_map_literal_key_only(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_func_retval(B). { A = B; } md_statement_braced_end(A) ::= md_for_loop_func_retval_key_only(B). { A = B; } md_statement_braced_end(A) ::= md_triple_for(B). { A = B; } md_statement_braced_end(A) ::= md_if_chain(B). { A = B; } md_statement_not_braced_end(A) ::= MD_TOKEN_SUBR_CALL md_fcn_or_subr_call(B). { A = mlr_dsl_ast_node_alloc_unary("subr_call", MD_AST_NODE_TYPE_SUBR_CALLSITE, B); } // Not valid in begin/end since they refer to srecs: md_statement_not_braced_end(A) ::= md_srec_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_srec_indirect_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_srec_positional_name_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_srec_positional_value_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_oosvar_from_full_srec_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_full_srec_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_env_assignment(B). { A = B; } // Valid in begin/end since they don't refer to srecs (although the RHSs might): md_statement_not_braced_end(A) ::= md_do_while_block(B). { A = B; } md_statement_not_braced_end(A) ::= md_bare_boolean(B). { A = B; } md_statement_not_braced_end(A) ::= md_oosvar_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_full_oosvar_assignment(B). { A = B; } md_statement_not_braced_end(A) ::= md_filter(B). { A = B; } md_statement_not_braced_end(A) ::= md_unset(B). { A = B; } md_statement_not_braced_end(A) ::= md_tee_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_tee_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_tee_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitf(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitf_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitf_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitf_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_lashed(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_lashed_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_lashed_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_emitp_lashed_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_lashed(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_lashed_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_lashed_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_emit_lashed_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_dump(B). { A = B; } md_statement_not_braced_end(A) ::= md_dump_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_dump_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_dump_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_edump(B). { A = B; } md_statement_not_braced_end(A) ::= md_print(B). { A = B; } md_statement_not_braced_end(A) ::= md_eprint(B). { A = B; } md_statement_not_braced_end(A) ::= md_print_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_print_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_print_pipe(B). { A = B; } md_statement_not_braced_end(A) ::= md_printn(B). { A = B; } md_statement_not_braced_end(A) ::= md_eprintn(B). { A = B; } md_statement_not_braced_end(A) ::= md_printn_write(B). { A = B; } md_statement_not_braced_end(A) ::= md_printn_append(B). { A = B; } md_statement_not_braced_end(A) ::= md_printn_pipe(B). { A = B; } // Valid only within for/while, but we accept them here syntactically and reject them in the AST-to-CST // conversion, where we can produce much more informative error messages: md_statement_not_braced_end(A) ::= MD_TOKEN_BREAK(O). { A = mlr_dsl_ast_node_alloc(O->text, MD_AST_NODE_TYPE_BREAK); } md_statement_not_braced_end(A) ::= MD_TOKEN_CONTINUE(O). { A = mlr_dsl_ast_node_alloc(O->text, MD_AST_NODE_TYPE_CONTINUE); } // ================================================================ // Given "f(a,b,c)": since this is a bottom-up parser, we get first the "a", // then "a,b", then "a,b,c", then finally "f(a,b,c)". So: // * On the "a" we make a function sub-AST called "anon(a)". // * On the "b" we append the next argument to get "anon(a,b)". // * On the "c" we append the next argument to get "anon(a,b,c)". // * On the "f" we change the function name to get "f(a,b,c)". md_func_block(C) ::= MD_TOKEN_FUNC_DEF MD_TOKEN_NON_SIGIL_NAME(F) MD_TOKEN_LPAREN md_func_or_subr_parameter_list(A) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { A = mlr_dsl_ast_node_set_function_name(A, F->text); mlr_dsl_ast_node_replace_text(B, "func_block"); C = mlr_dsl_ast_node_alloc_binary(F->text, MD_AST_NODE_TYPE_FUNC_DEF, A, B); } md_func_block(C) ::= MD_TOKEN_FUNC_DEF MD_TOKEN_NON_SIGIL_NAME(F) MD_TOKEN_LPAREN md_func_or_subr_parameter_list(A) MD_TOKEN_RPAREN MD_TOKEN_COLON md_typedecl(M) MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { A = mlr_dsl_ast_node_set_function_name(A, F->text); mlr_dsl_ast_node_replace_text(B, "func_block"); C = mlr_dsl_ast_node_alloc_ternary(F->text, MD_AST_NODE_TYPE_FUNC_DEF, A, B, M); } md_subr_block(C) ::= MD_TOKEN_SUBR_DEF MD_TOKEN_NON_SIGIL_NAME(F) MD_TOKEN_LPAREN md_func_or_subr_parameter_list(A) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { A = mlr_dsl_ast_node_set_function_name(A, F->text); mlr_dsl_ast_node_replace_text(B, "subr_block"); C = mlr_dsl_ast_node_alloc_binary(F->text, MD_AST_NODE_TYPE_SUBR_DEF, A, B); } md_func_or_subr_parameter_list(A) ::= . { A = mlr_dsl_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME); } md_func_or_subr_parameter_list(A) ::= md_func_or_subr_non_empty_parameter_list(B). { A = B; } md_func_or_subr_non_empty_parameter_list(A) ::= md_func_or_subr_parameter(B). { A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); } md_func_or_subr_non_empty_parameter_list(A) ::= md_func_or_subr_parameter(B) MD_TOKEN_COMMA. { A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); } md_func_or_subr_non_empty_parameter_list(A) ::= md_func_or_subr_parameter(B) MD_TOKEN_COMMA md_func_or_subr_non_empty_parameter_list(C). { A = mlr_dsl_ast_node_prepend_arg(C, B); } md_func_or_subr_parameter(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION); } md_func_or_subr_parameter(A) ::= md_typedecl(T) MD_TOKEN_NON_SIGIL_NAME(N). { A = mlr_dsl_ast_node_alloc(N->text, T->type); } md_typedecl(A) ::= MD_TOKEN_VAR(B). { A = B; A->type = MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION; } md_typedecl(A) ::= MD_TOKEN_NUMERIC(B). { A = B; A->type = MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION; } md_typedecl(A) ::= MD_TOKEN_INT(B). { A = B; A->type = MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION; } md_typedecl(A) ::= MD_TOKEN_FLOAT(B). { A = B; A->type = MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION; } md_typedecl(A) ::= MD_TOKEN_STRING(B). { A = B; A->type = MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION; } md_typedecl(A) ::= MD_TOKEN_BOOLEAN(B). { A = B; A->type = MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION; } md_typedecl(A) ::= MD_TOKEN_MAP(B). { A = B; A->type = MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION; } // ================================================================ md_begin_block(A) ::= MD_TOKEN_BEGIN(O) MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(B, "begin_block"); A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_BEGIN, B); } md_end_block(A) ::= MD_TOKEN_END(O) MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(B, "end_block"); A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_END, B); } // ---------------------------------------------------------------- md_cond_block(A) ::= md_rhs(B) MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(C, "cond_block"); A = mlr_dsl_ast_node_alloc_binary("cond", MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, B, C); } // ---------------------------------------------------------------- md_while_block(A) ::= MD_TOKEN_WHILE(O) MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(C, "while_block"); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_WHILE, B, C); } // ---------------------------------------------------------------- md_do_while_block(A) ::= MD_TOKEN_DO(O) MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE MD_TOKEN_WHILE MD_TOKEN_LPAREN md_rhs(C) MD_TOKEN_RPAREN. { mlr_dsl_ast_node_replace_text(B, "do_while_block"); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DO_WHILE, B, C); } // ---------------------------------------------------------------- // for(k, v in $*) { ... } md_for_loop_full_srec(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN MD_TOKEN_FULL_SREC MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_full_srec_block"); A = mlr_dsl_ast_node_alloc_binary( F->text, MD_AST_NODE_TYPE_FOR_SREC, mlr_dsl_ast_node_alloc_binary( "variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K, V ), S ); } // for(k in $*) { ... } md_for_loop_full_srec_key_only(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_IN MD_TOKEN_FULL_SREC MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_full_srec_block"); A = mlr_dsl_ast_node_alloc_binary( F->text, MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY, mlr_dsl_ast_node_alloc_unary( "variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), S ); } // for(k, v in @*) { ... } md_for_loop_full_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_full_oosvar_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, mlr_dsl_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), mlr_dsl_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), S ); } // for((k1, k2), v in @*) { ... } // for((k1, k2, k3), v in @*) { ... } md_for_loop_full_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_full_oosvar_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), mlr_dsl_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), S ); } // for(k in @*) { ... } md_for_loop_full_oosvar_key_only(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_full_oosvar_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY, K, mlr_dsl_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), S ); } // for(k, v in @o[1][2]) { ... } md_for_loop_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_oosvar_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_oosvar_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, mlr_dsl_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), O, S ); } // for((k1, k2), v in @o[1][2]) { ... } // for((k1, k2, k3), v in @o[1][2]) { ... } md_for_loop_oosvar(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_oosvar_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_oosvar_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), O, S ); } md_for_loop_index(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION); } md_for_loop_index(A) ::= MD_TOKEN_NUMERIC MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION); } md_for_loop_index(A) ::= MD_TOKEN_INT MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION); } md_for_loop_index(A) ::= MD_TOKEN_FLOAT MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION); } md_for_loop_index(A) ::= MD_TOKEN_STRING MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION); } md_for_loop_index(A) ::= MD_TOKEN_BOOLEAN MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION); } md_for_map_keylist(A) ::= md_for_loop_index(K). { A = mlr_dsl_ast_node_alloc_unary("key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K); } md_for_map_keylist(A) ::= md_for_map_keylist(L) MD_TOKEN_COMMA md_for_loop_index(K). { A = mlr_dsl_ast_node_append_arg(L, K); } // for(k in @o[1][2]) { ... } md_for_loop_oosvar_key_only(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_IN md_oosvar_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_oosvar_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY, K, O, S ); } // ---------------------------------------------------------------- // for(k, v in o[1][2]) { ... } md_for_loop_local_map(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_local_map_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_local_map_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_LOCAL_MAP, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, mlr_dsl_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), O, S ); } // for((k1, k2), v in o[1][2]) { ... } // for((k1, k2, k3), v in o[1][2]) { ... } md_for_loop_local_map(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_local_map_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_local_map_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_LOCAL_MAP, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), O, S ); } // for(k in o[1][2]) { ... } md_for_loop_local_map_key_only(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_IN md_local_map_keylist(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_local_map_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY, K, O, S ); } // ---------------------------------------------------------------- // for(k, v in o[1][2]) { ... } md_for_loop_map_literal(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_map_literal(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_map_literal_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_MAP_LITERAL, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, mlr_dsl_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), O, S ); } // for((k1, k2), v in o[1][2]) { ... } // for((k1, k2, k3), v in o[1][2]) { ... } md_for_loop_map_literal(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_map_literal(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_map_literal_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_MAP_LITERAL, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), O, S ); } // for(k in o[1][2]) { ... } md_for_loop_map_literal_key_only(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_IN md_map_literal(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_map_literal_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY, K, O, S ); } // ---------------------------------------------------------------- // for(k, v in o[1][2]) { ... } md_for_loop_func_retval(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_fcn_or_subr_call(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_func_retval_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_FUNC_RETVAL, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, mlr_dsl_ast_node_alloc_unary( "key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K ), V ), O, S ); } // for((k1, k2), v in o[1][2]) { ... } // for((k1, k2, k3), v in o[1][2]) { ... } md_for_loop_func_retval(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) MD_TOKEN_IN md_fcn_or_subr_call(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_func_retval_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_FUNC_RETVAL, mlr_dsl_ast_node_alloc_binary( "key_and_value_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, L, V ), O, S ); } // for(k in o[1][2]) { ... } md_for_loop_func_retval_key_only(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_for_loop_index(K) MD_TOKEN_IN md_fcn_or_subr_call(O) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(S) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(S, "for_loop_func_retval_block"); A = mlr_dsl_ast_node_alloc_ternary( F->text, MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY, K, O, S ); } // ---------------------------------------------------------------- md_triple_for(A) ::= MD_TOKEN_FOR(F) MD_TOKEN_LPAREN md_triple_for_start(S) MD_TOKEN_SEMICOLON md_triple_for_continuation(C) MD_TOKEN_SEMICOLON md_triple_for_update(U) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(L) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(L, "triple_for_block"); A = mlr_dsl_ast_node_alloc_quaternary(F->text, MD_AST_NODE_TYPE_TRIPLE_FOR, S, C, U, L); } md_triple_for_start(A) ::= md_statement_not_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = mlr_dsl_ast_node_alloc_zary("triple_for_start_statements", MD_AST_NODE_TYPE_STATEMENT_LIST); } else { A = mlr_dsl_ast_node_alloc_unary("triple_for_start_statements", MD_AST_NODE_TYPE_STATEMENT_LIST, B); } } md_triple_for_start(A) ::= md_triple_for_start(B) MD_TOKEN_COMMA md_statement_not_braced_end(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = C; } else { A = mlr_dsl_ast_node_append_arg(B, C); } } md_triple_for_continuation(A) ::= md_statement_not_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = mlr_dsl_ast_node_alloc_zary("triple_for_continuation_statements", MD_AST_NODE_TYPE_STATEMENT_LIST); } else { A = mlr_dsl_ast_node_alloc_unary("triple_for_continuation_statements", MD_AST_NODE_TYPE_STATEMENT_LIST, B); } } md_triple_for_continuation(A) ::= md_triple_for_continuation(B) MD_TOKEN_COMMA md_statement_not_braced_end(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = C; } else { A = mlr_dsl_ast_node_append_arg(B, C); } } md_triple_for_update(A) ::= md_statement_not_braced_end(B). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = mlr_dsl_ast_node_alloc_zary("triple_for_update_statements", MD_AST_NODE_TYPE_STATEMENT_LIST); } else { A = mlr_dsl_ast_node_alloc_unary("triple_for_update_statements", MD_AST_NODE_TYPE_STATEMENT_LIST, B); } } md_triple_for_update(A) ::= md_triple_for_update(B) MD_TOKEN_COMMA md_statement_not_braced_end(C). { if (B->type == MD_AST_NODE_TYPE_NOP) { mlr_dsl_ast_node_free(B); A = C; } else { A = mlr_dsl_ast_node_append_arg(B, C); } } // ---------------------------------------------------------------- // Cases: // if elif* // if elif* else md_if_chain(A) ::= md_if_elif_star(B) . { A = B; } md_if_chain(A) ::= md_if_elif_star(B) md_else_block(C). { A = mlr_dsl_ast_node_append_arg(B, C); } md_if_elif_star(A) ::= md_if_block(B). { A = mlr_dsl_ast_node_alloc_unary("if_head", MD_AST_NODE_TYPE_IF_HEAD, B); } md_if_elif_star(A) ::= md_if_elif_star(B) md_elif_block(C). { A = mlr_dsl_ast_node_append_arg(B, C); } md_if_block(A) ::= MD_TOKEN_IF(O) MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(C, "if_block"); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); } md_elif_block(A) ::= MD_TOKEN_ELIF(O) MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(C, "elif_block"); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); } md_else_block(A) ::= MD_TOKEN_ELSE(O) MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. { mlr_dsl_ast_node_replace_text(C, "else_block"); A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_IF_ITEM, C); } // ---------------------------------------------------------------- md_bare_boolean(A) ::= md_rhs(B). { A = B; } // ---------------------------------------------------------------- md_filter(A) ::= MD_TOKEN_FILTER(O) md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B); } // ---------------------------------------------------------------- md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, N, B); } md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_SREC(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, N, B); } md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_OOSVAR(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, N, B); } md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); } md_numeric_local_definition(A) ::= MD_TOKEN_NUMERIC(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION, N, B); } md_int_local_definition(A) ::= MD_TOKEN_INT(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION, N, B); } md_float_local_definition(A) ::= MD_TOKEN_FLOAT(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION, N, B); } md_boolean_local_definition(A) ::= MD_TOKEN_BOOLEAN(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION, N, B); } md_string_local_definition(A) ::= MD_TOKEN_STRING(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION, N, B); } md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); } md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_SREC(C). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); } md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_OOSVAR(C). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); } md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); } // ---------------------------------------------------------------- md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C); } md_srec_indirect_assignment(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary( O->text, MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, B, C ); } md_srec_positional_name_assignment(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary( O->text, MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT, B, C ); } // '$[[[3]]] = "new"' is shorthand for '$[ $[[3]] ] = "new"'. // Note that '$[[3]]' is key at srec position 3 and '$[[[3]]]' is value at srec position 3. md_srec_positional_value_assignment(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary( O->text, MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, mlr_dsl_ast_node_alloc_unary( "positional_srec_field_name", MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, B ), C ); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); } md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, B, C); } md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, B, C); } md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, B, C); } md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); } md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) md_fcn_or_subr_call(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); } md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); } md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); } md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); } md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); } md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, C); } // ---------------------------------------------------------------- md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } // ---------------------------------------------------------------- md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_POW_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OINT_DIVIDE_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OMOD_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OPOW_EQUALS md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, mlr_dsl_ast_node_alloc_binary(".**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); } // ---------------------------------------------------------------- md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_ALL(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); } md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_FULL_OOSVAR(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); } md_unset(A) ::= MD_TOKEN_UNSET(O) md_unset_args(B). { A = mlr_dsl_ast_node_set_function_name(B, O->text); } // Need to invalidate "emit @a," -- use some non-empty-args expr. md_unset_args(A) ::= . { A = mlr_dsl_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_UNSET); } md_unset_args(A) ::= md_field_name(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_indirect_field_name(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_positional_srec_name(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= MD_TOKEN_FULL_SREC(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_oosvar_keylist(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_nonindexed_local_variable(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_indexed_local_variable(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); } md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_field_name(C). { A = mlr_dsl_ast_node_append_arg(B, C); } md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_tee_write(A) ::= MD_TOKEN_TEE(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_FULL_SREC(M). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_TEE, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F), M); } md_tee_append(A) ::= MD_TOKEN_TEE(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_FULL_SREC(M). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_TEE, mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F), M); } md_tee_pipe(A) ::= MD_TOKEN_TEE(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA MD_TOKEN_FULL_SREC(M). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_TEE, mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P), M); } // ---------------------------------------------------------------- // Given "emitf @a,@b,@c": since this is a bottom-up parser, we get first the "@a", // then "@a,@b", then "@a,@b,@c", then finally "emit @a,@b,@c". So: // * On the "@a" we make a sub-AST called "temp @a" (although we could call it "emit"). // * On the "@b" we append the next argument to get "temp @a,@b". // * On the "@c" we append the next argument to get "temp @a,@b,@c". // * On the "emit" we change the name to get "emit @a,@b,@c". md_emitf(A) ::= MD_TOKEN_EMITF(O) md_emitf_args(B). { B = mlr_dsl_ast_node_set_function_name(B, O->text); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } // Need to invalidate "emit @a," -- use some non-empty-args expr. md_emitf_args(A) ::= . { A = mlr_dsl_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_EMITF); } md_emitf_args(A) ::= md_oosvar_keylist(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); } md_emitf_args(A) ::= md_nonindexed_local_variable(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); } md_emitf_args(A) ::= md_indexed_local_variable(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); } md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = mlr_dsl_ast_node_append_arg(B, C); } md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_nonindexed_local_variable(C). { A = mlr_dsl_ast_node_append_arg(B, C); } md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_indexed_local_variable(C). { A = mlr_dsl_ast_node_append_arg(B, C); } md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_emitf_args(B). { B = mlr_dsl_ast_node_set_function_name(B, O->text); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_emitf_args(B). { B = mlr_dsl_ast_node_set_function_name(B, O->text); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emitf_pipe(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_emitf_args(B). { B = mlr_dsl_ast_node_set_function_name(B, O->text); A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // ---------------------------------------------------------------- md_emitp(A) ::= MD_TOKEN_EMITP(O) md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emitp(A) ::= MD_TOKEN_EMITP(O) md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emitp_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } md_emitp_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // ---------------------------------------------------------------- md_emitp_namelist(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("emitp_namelist", MD_AST_NODE_TYPE_EMITP, B); } md_emitp_namelist(A) ::= md_emitp_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // ================================================================ md_emit(A) ::= MD_TOKEN_EMIT(O) md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emit(A) ::= MD_TOKEN_EMIT(O) md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emit_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_emittable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } md_emit_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // ---------------------------------------------------------------- md_emittable(A) ::= MD_TOKEN_ALL(B). { A = B; } md_emittable(A) ::= MD_TOKEN_FULL_OOSVAR(B). { A = B; } md_emittable(A) ::= md_oosvar_keylist(B). { A = B; } md_emittable(A) ::= md_nonindexed_local_variable(B). { A = B; } md_emittable(A) ::= md_indexed_local_variable(B). { A = B; } md_emittable(A) ::= MD_TOKEN_FULL_SREC(B). { A = B; } md_emittable(A) ::= md_map_literal(B). { A = B; } md_emittable(A) ::= md_fcn_or_subr_call(B). { A = B; } // ---------------------------------------------------------------- md_emit_namelist(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("emit_namelist", MD_AST_NODE_TYPE_EMIT, B); } md_emit_namelist(A) ::= md_emit_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emitp_lashed_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } md_emitp_lashed_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emitp_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - md_emitp_lashed_keylists(A) ::= md_emittable(B). { A = mlr_dsl_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMITP_LASHED, B); } md_emitp_lashed_keylists(A) ::= md_emitp_lashed_keylists(B) MD_TOKEN_COMMA md_emittable(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - md_emitp_lashed_namelist(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMITP_LASHED, B); } md_emitp_lashed_namelist(A) ::= md_emitp_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); } md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_emit_lashed_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } md_emit_lashed_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_emit_lashed_namelist(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - md_emit_lashed_keylists(A) ::= md_emittable(B). { A = mlr_dsl_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMIT_LASHED, B); } md_emit_lashed_keylists(A) ::= md_emit_lashed_keylists(B) MD_TOKEN_COMMA md_emittable(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - md_emit_lashed_namelist(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMIT_LASHED, B); } md_emit_lashed_namelist(A) ::= md_emit_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { A = mlr_dsl_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_dump(A) ::= MD_TOKEN_DUMP(O). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT)), mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); } md_edump(A) ::= MD_TOKEN_EDUMP(O). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR)), mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); } md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_output_file(F). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F), mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); } md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_output_file(F). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F), mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); } md_dump_pipe(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_OR md_rhs(P). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P), mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); } md_dump(A) ::= MD_TOKEN_DUMP(O) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT)), B); } md_edump(A) ::= MD_TOKEN_EDUMP(O) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR)), B); } md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_output_file(F) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F), B); } md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F), B); } md_dump_pipe(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_OR md_dumpable(P) md_rhs(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P), B); } // ---------------------------------------------------------------- md_dumpable(A) ::= MD_TOKEN_ALL(B). { A = B; } md_dumpable(A) ::= MD_TOKEN_FULL_OOSVAR(B). { A = B; } md_dumpable(A) ::= MD_TOKEN_FULL_SREC(B). { A = B; } md_dumpable(A) ::= md_map_literal(B). { A = B; } md_dumpable(A) ::= md_rhs(B). { A = B; } // ---------------------------------------------------------------- // Print string md_print(A) ::= MD_TOKEN_PRINT(O) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, B, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); } md_eprint(A) ::= MD_TOKEN_EPRINT(O) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, B, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); } md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, C, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, C, mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_print_pipe(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_dumpable(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, C, mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // Print with no string (newline only) md_print(A) ::= MD_TOKEN_PRINT(O). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); } md_eprint(A) ::= MD_TOKEN_EPRINT(O). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); } md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_output_file(F). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_output_file(F). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_print_pipe(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_OR md_rhs(P). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // Printn string md_printn(A) ::= MD_TOKEN_PRINTN(O) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, B, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); } md_eprintn(A) ::= MD_TOKEN_EPRINTN(O) md_dumpable(B). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, B, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); } md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, C, mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, C, mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_printn_pipe(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_dumpable(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, C, mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // Printn with no string: produces no output but will create a zero-length // output file, so not quite a no-op. md_printn(A) ::= MD_TOKEN_PRINTN(O). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); } md_eprintn(A) ::= MD_TOKEN_EPRINTN(O). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); } md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_output_file(F). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); } md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_output_file(F). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); } md_printn_pipe(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_OR md_dumpable(P). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); } // ---------------------------------------------------------------- md_output_file(A) ::= md_rhs(F). { A = F; } md_output_file(A) ::= MD_TOKEN_STDOUT(F). { A = F; } md_output_file(A) ::= MD_TOKEN_STDERR(F). { A = F; } // ================================================================ // Begin RHS precedence chain md_rhs(A) ::= md_ternary(B). { A = B; } md_ternary(A) ::= md_logical_or_term(B) MD_TOKEN_QUESTION_MARK md_ternary(C) MD_TOKEN_COLON md_ternary(D). { A = mlr_dsl_ast_node_alloc_ternary("? :", MD_AST_NODE_TYPE_OPERATOR, B, C, D); } md_ternary(A) ::= md_logical_or_term(B). { A = B; } // ================================================================ md_logical_or_term(A) ::= md_logical_xor_term(B). { A = B; } md_logical_or_term(A) ::= md_logical_or_term(B) MD_TOKEN_LOGICAL_OR(O) md_logical_xor_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_logical_xor_term(A) ::= md_logical_and_term(B). { A = B; } md_logical_xor_term(A) ::= md_logical_xor_term(B) MD_TOKEN_LOGICAL_XOR(O) md_logical_and_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_logical_and_term(A) ::= md_eqne_term(B). { A = B; } md_logical_and_term(A) ::= md_logical_and_term(B) MD_TOKEN_LOGICAL_AND(O) md_eqne_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_eqne_term(A) ::= md_cmp_term(B). { A = B; } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_MATCHES(O) md_cmp_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_DOES_NOT_MATCH(O) md_cmp_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_EQ(O) md_cmp_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_NE(O) md_cmp_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_cmp_term(A) ::= md_bitwise_or_term(B). { A = B; } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GT(O) md_bitwise_or_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GE(O) md_bitwise_or_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LT(O) md_bitwise_or_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LE(O) md_bitwise_or_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_or_term(A) ::= md_bitwise_xor_term(B). { A = B; } md_bitwise_or_term(A) ::= md_bitwise_or_term(B) MD_TOKEN_BITWISE_OR(O) md_bitwise_xor_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_xor_term(A) ::= md_bitwise_and_term(B). { A = B; } md_bitwise_xor_term(A) ::= md_bitwise_xor_term(B) MD_TOKEN_BITWISE_XOR(O) md_bitwise_and_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_and_term(A) ::= md_bitwise_shift_term(B). { A = B; } md_bitwise_and_term(A) ::= md_bitwise_and_term(B) MD_TOKEN_BITWISE_AND(O) md_bitwise_shift_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_bitwise_shift_term(A) ::= md_addsubdot_term(B). { A = B; } md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_LSH(O) md_addsubdot_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_RSH(O) md_addsubdot_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_addsubdot_term(A) ::= md_muldiv_term(B). { A = B; } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_PLUS(O) md_muldiv_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_MINUS(O) md_muldiv_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_OPLUS(O) md_muldiv_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_OMINUS(O) md_muldiv_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_DOT(O) md_muldiv_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_muldiv_term(A) ::= md_unary_bitwise_op_term(B). { A = B; } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_TIMES(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_DIVIDE(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_DIVIDE(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_MOD(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_OTIMES(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_ODIVIDE(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_ODIVIDE(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- md_unary_bitwise_op_term(A) ::= md_pow_term(B). { A = B; } md_unary_bitwise_op_term(A) ::= MD_TOKEN_PLUS(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_MINUS(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_OPLUS(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_OMINUS(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_LOGICAL_NOT(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } md_unary_bitwise_op_term(A) ::= MD_TOKEN_BITWISE_NOT(O) md_unary_bitwise_op_term(C). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); } // ---------------------------------------------------------------- md_pow_term(A) ::= md_atom_or_fcn(B). { A = B; } md_pow_term(A) ::= md_atom_or_fcn(B) MD_TOKEN_POW(O) md_pow_term(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); } // ---------------------------------------------------------------- // In the grammar provided to the user, field names are of the form "$x". But // within Miller internally, field names are of the form "x". We coded the // lexer to give us field names with leading "$" so we can confidently strip it // off here. md_atom_or_fcn(A) ::= md_field_name(B). { A = B; } md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). { char* dollar_name = B->text; char* no_dollar_name = &dollar_name[1]; A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type); } md_field_name(A) ::= MD_TOKEN_BRACED_FIELD_NAME(B). { // Replace "${field.name}" with just "field.name" char* dollar_name = B->text; char* no_dollar_name = &dollar_name[2]; int len = strlen(no_dollar_name); if (len > 0) no_dollar_name[len-1] = 0; A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type); } md_atom_or_fcn(A) ::= md_indirect_field_name(B). { A = B; } md_indirect_field_name(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_alloc_unary("indirect_field_name", MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, B); } md_atom_or_fcn(A) ::= md_positional_srec_name(B). { A = B; } md_positional_srec_name(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_alloc_unary( "positional_srec_field_name", MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, B ); } // '$value = $[[[3]]]' is shorthand for '$value = $[ $[[3]] ]'. // Note that '$[[3]]' is key at srec position 3 and '$[[[3]]]' is value at srec position 3. md_atom_or_fcn(A) ::= md_positional_srec_value(B). { A = B; } md_positional_srec_value(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_alloc_unary( "indirect_field_name", MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, mlr_dsl_ast_node_alloc_unary( "positional_srec_field_name", MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, B ) ); } // ---------------------------------------------------------------- md_atom_or_fcn(A) ::= md_oosvar_keylist(B). { A = B; } md_oosvar_keylist(A) ::= md_oosvar_basename(B). { A = B; } md_oosvar_keylist(A) ::= md_oosvar_keylist(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_append_arg(B, C); } // E.g. @name md_oosvar_basename(A) ::= MD_TOKEN_UNBRACED_OOSVAR_NAME(B). { char* at_name = B->text; char* no_at_name = &at_name[1]; A = mlr_dsl_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, mlr_dsl_ast_node_alloc(no_at_name, B->type)); } // E.g. @{name} md_oosvar_basename(A) ::= MD_TOKEN_BRACED_OOSVAR_NAME(B). { // Replace "@%{field.name}" with just "field.name" char* at_name = B->text; char* no_at_name = &at_name[2]; int len = strlen(no_at_name); if (len > 0) no_at_name[len-1] = 0; A = mlr_dsl_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, mlr_dsl_ast_node_alloc(no_at_name, B->type)); } // E.g. @["name"] md_oosvar_basename(A) ::= MD_TOKEN_AT_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, B); } md_local_map_keylist(A) ::= md_nonindexed_local_variable(B). { A = B; } md_local_map_keylist(A) ::= md_local_map_keylist(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_append_arg(B, C); } // ---------------------------------------------------------------- md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). { A = B; } md_atom_or_fcn(A) ::= MD_TOKEN_TRUE(B). { A = B; } md_atom_or_fcn(A) ::= MD_TOKEN_FALSE(B). { A = B; } md_atom_or_fcn(A) ::= md_string(B). { A = B; } md_atom_or_fcn(A) ::= md_regexi(B). { A = B; } md_atom_or_fcn(A) ::= md_nonindexed_local_variable(B). { A = B; } md_atom_or_fcn(A) ::= md_indexed_local_variable(B). { A = B; } md_nonindexed_local_variable(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE); } md_indexed_local_variable(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_alloc_unary(B->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE, C); mlr_dsl_ast_node_free(B); } md_indexed_local_variable(A) ::= md_indexed_local_variable(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_append_arg(B, C); } md_string(A) ::= MD_TOKEN_STRING(B). { char* input = B->text; char* stripped = &input[1]; int len = strlen(input); stripped[len-2] = 0; A = mlr_dsl_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); } md_regexi(A) ::= MD_TOKEN_REGEXI(B). { char* input = B->text; char* stripped = &input[1]; int len = strlen(input); stripped[len-3] = 0; A = mlr_dsl_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); } md_atom_or_fcn(A) ::= MD_TOKEN_CONTEXT_VARIABLE(B). { A = B; } md_atom_or_fcn(A) ::= md_env_index(B). { A = B; } md_env_index(A) ::= MD_TOKEN_ENV(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { A = mlr_dsl_ast_node_alloc_binary("env", MD_AST_NODE_TYPE_ENV, B, C); } md_atom_or_fcn(A) ::= MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN. { A = B; } md_atom_or_fcn(A) ::= md_fcn_or_subr_call(B). { A = B; } // Given "f(a,b,c)": since this is a bottom-up parser, we get first the "a", // then "a,b", then "a,b,c", then finally "f(a,b,c)". So: // * On the "a" we make a function sub-AST called "anon(a)". // * On the "b" we append the next argument to get "anon(a,b)". // * On the "c" we append the next argument to get "anon(a,b,c)". // * On the "f" we change the function name to get "f(a,b,c)". md_fcn_or_subr_call(A) ::= MD_TOKEN_NON_SIGIL_NAME(O) MD_TOKEN_LPAREN md_fcn_arg_list(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_set_function_name(B, O->text); A->type = MD_AST_NODE_TYPE_FUNCTION_CALLSITE; } // For most functions it suffices to use the MD_TOKEN_NON_SIGIL_NAME pattern. But // int and float are keywords in the lexer so we need to spell those out explicitly. // (They're type-decl keywords but they're also the names of type-conversion functions.) md_fcn_or_subr_call(A) ::= MD_TOKEN_INT(O) MD_TOKEN_LPAREN md_fcn_arg_list(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_set_function_name(B, O->text); A->type = MD_AST_NODE_TYPE_FUNCTION_CALLSITE; } md_fcn_or_subr_call(A) ::= MD_TOKEN_FLOAT(O) MD_TOKEN_LPAREN md_fcn_arg_list(B) MD_TOKEN_RPAREN. { A = mlr_dsl_ast_node_set_function_name(B, O->text); A->type = MD_AST_NODE_TYPE_FUNCTION_CALLSITE; } md_fcn_arg_list(A) ::= . { A = mlr_dsl_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME); } md_fcn_arg_list(A) ::= md_fcn_non_empty_arg_list(B). { A = B; } md_fcn_non_empty_arg_list(A) ::= md_fcn_arg(B). { A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); } md_fcn_non_empty_arg_list(A) ::= md_fcn_arg(B) MD_TOKEN_COMMA. { A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); } md_fcn_non_empty_arg_list(A) ::= md_fcn_arg(B) MD_TOKEN_COMMA md_fcn_non_empty_arg_list(C). { A = mlr_dsl_ast_node_prepend_arg(C, B); } md_fcn_arg(A) ::= md_rhs(B). { A = B; } md_fcn_arg(A) ::= MD_TOKEN_FULL_SREC(B). { A = B; } md_fcn_arg(A) ::= MD_TOKEN_FULL_OOSVAR(B). { A = B; } md_fcn_arg(A) ::= md_map_literal(B). { A = B; } // ---------------------------------------------------------------- // Map-literals in Miller are JSON-ish. md_map_literal(A) ::= MD_TOKEN_LBRACE MD_TOKEN_RBRACE. { A = mlr_dsl_ast_node_alloc_zary("map_literal", MD_AST_NODE_TYPE_MAP_LITERAL); } md_map_literal(A) ::= MD_TOKEN_LBRACE md_map_literal_kv_pairs(B) MD_TOKEN_RBRACE. { A = B; } md_map_literal_kv_pairs(A) ::= md_map_literal_kv_pair(B). { A = mlr_dsl_ast_node_alloc_unary("map_literal", MD_AST_NODE_TYPE_MAP_LITERAL, B); } // Allow trailing final comma, especially for multiline map literals md_map_literal_kv_pairs(A) ::= md_map_literal_kv_pair(B) MD_TOKEN_COMMA. { A = mlr_dsl_ast_node_alloc_unary("map_literal", MD_AST_NODE_TYPE_MAP_LITERAL, B); } md_map_literal_kv_pairs(A) ::= md_map_literal_kv_pair(B) MD_TOKEN_COMMA md_map_literal_kv_pairs(C). { A = mlr_dsl_ast_node_prepend_arg(C, B); } md_map_literal_kv_pair(A) ::= md_map_literal_key(B) MD_TOKEN_COLON md_map_literal_value(C). { A = mlr_dsl_ast_node_alloc_binary("mappair", MD_AST_NODE_TYPE_MAP_LITERAL_PAIR, B, C); } md_map_literal_key(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("mapkey", MD_AST_NODE_TYPE_MAP_LITERAL_KEY, B); } md_map_literal_value(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); } md_map_literal_value(A) ::= md_map_literal(B). { A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); } md_map_literal_value(A) ::= MD_TOKEN_FULL_SREC(B). { A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); } md_map_literal_value(A) ::= MD_TOKEN_FULL_OOSVAR(B). { A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); } miller-5.6.2/c/parsing/mlr_dsl_wrapper.c000066400000000000000000000055531354153536500202570ustar00rootroot00000000000000#include #include #include "mlr_dsl_wrapper.h" #include "mlr_dsl_lexer.h" #include "mlr_dsl_parse.h" #include "../lib/mlrutil.h" #include "../dsl/mlr_dsl_ast.h" #include "../containers/sllv.h" // These prototypes are copied out manually from mlr_dsl_parse.c. With some // more work I could have Lemon autogenerate these prototypes into // mlr_dsl_parse.h. void *mlr_dsl_lemon_parser_alloc(void *(*mallocProc)(size_t)); int mlr_dsl_lemon_parser_parse_token( void *pvparser, /* The parser */ int yymajor, /* The major token code number */ mlr_dsl_ast_node_t* yyminor, /* The value for the token */ mlr_dsl_ast_t* past); /* Optional %extra_argument parameter */ void mlr_dsl_lemon_parser_free( void *pvparser, /* The parser to be deleted */ void (*freeProc)(void*)); /* Function used to reclaim memory */ void mlr_dsl_ParseTrace(FILE *TraceFILE, char *zTracePrompt); // ---------------------------------------------------------------- // http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html // http://flex.sourceforge.net/manual/Extra-Data.html // Returns linked list of mlr_dsl_ast_node_t*. static mlr_dsl_ast_t* mlr_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_dsl_ast_node_t** ppnode, int trace_parse) { int lex_code; int parse_code; mlr_dsl_ast_t* past = mlr_dsl_ast_alloc(); if (trace_parse) mlr_dsl_ParseTrace(stderr, "[DSLTRACE] "); do { lex_code = mlr_dsl_lexer_lex(scanner); if (lex_code == -1) { return NULL; } mlr_dsl_ast_node_t* plexed_node = *ppnode; parse_code = mlr_dsl_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); if (parse_code == 0) { //mlr_dsl_ast_node_print(plexed_node); return NULL; } } while (lex_code > 0); if (-1 == lex_code) { fprintf(stderr, "The scanner encountered an error.\n"); return NULL; } parse_code = mlr_dsl_lemon_parser_parse_token(pvparser, 0, NULL, past); if (parse_code == 0) return NULL; return past; } // ---------------------------------------------------------------- // Returns linked list of mlr_dsl_ast_node_t*. mlr_dsl_ast_t* mlr_dsl_parse(char* string, int trace_parse) { mlr_dsl_ast_node_t* pnode = NULL; yyscan_t scanner; mlr_dsl_lexer_lex_init_extra(&pnode, &scanner); void* pvparser = mlr_dsl_lemon_parser_alloc(malloc); YY_BUFFER_STATE buf = NULL; if (string == NULL) { mlr_dsl_lexer_set_in(stdin, scanner); } else { YY_BUFFER_STATE buf = mlr_dsl_lexer__scan_string(string, scanner); mlr_dsl_lexer__switch_to_buffer (buf, scanner); } mlr_dsl_ast_t* past = mlr_dsl_parse_inner(scanner, pvparser, &pnode, trace_parse); if (buf != NULL) mlr_dsl_lexer__delete_buffer(buf, scanner); mlr_dsl_lexer_lex_destroy(scanner); mlr_dsl_lemon_parser_free(pvparser, free); return past; } // ---------------------------------------------------------------- void yytestcase(int ignored) { } miller-5.6.2/c/parsing/mlr_dsl_wrapper.h000066400000000000000000000002601354153536500202520ustar00rootroot00000000000000#ifndef MLR_DSL_WRAPPER_H #define MLR_DSL_WRAPPER_H #include "../dsl/mlr_dsl_ast.h" mlr_dsl_ast_t* mlr_dsl_parse(char* string, int trace_parse); #endif // MLR_DSL_WRAPPER_H miller-5.6.2/c/parsing/mlr_dsl_wrapper_main.c000066400000000000000000000013001354153536500212450ustar00rootroot00000000000000#include #include #include "mlr_dsl_wrapper.h" #include "mlr_dsl_lexer.h" #include "mlr_dsl_parse.h" #include "../containers/sllv.h" #include "../lib/mlrutil.h" #include "../dsl/mlr_dsl_ast.h" // ---------------------------------------------------------------- int main(int argc, char** argv) { int trace_parse = FALSE; int argi = 1; if (argc >= 2 && streq(argv[1], "-t")) { argi++; trace_parse = TRUE; } if ((argc - argi) != 1) { fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); exit(1); } mlr_dsl_ast_t* past = mlr_dsl_parse(argv[argi], trace_parse); if (past == NULL) { printf("syntax error\n"); } else { mlr_dsl_ast_print(past); } return 0; } miller-5.6.2/c/perf-mand.txt000066400000000000000000000011631354153536500156570ustar00rootroot00000000000000$ time ruby mand.rb > /dev/null real 0m1.731s user 0m1.717s sys 0m0.012s $ time python mand.py > /dev/null real 0m3.534s user 0m3.506s sys 0m0.023s $ time a.out > /dev/null real 0m0.044s user 0m0.039s sys 0m0.003s # with old hashmap-backed bind-stack $ time mlr -n put -q -f mand.mlr > /dev/null real 0m7.258s user 0m7.237s sys 0m0.012s # with new index-precomputed local-stack (clearless) $ time mlr -n put -q -f ~/mand.mlr > /dev/null real 0m2.314s user 0m2.303s sys 0m0.007s time ruby ~/mand.rb > /dev/null time python ~/mand.py > /dev/null time ~/a.out > /dev/null time mlr -n put -q -f ~/mand.mlr > /dev/null miller-5.6.2/c/pre-travis.sh000077500000000000000000000001111354153536500156700ustar00rootroot00000000000000#!/bin/sh -e cd .. make distclean autoreconf -fiv ./configure make check miller-5.6.2/c/push2000077500000000000000000000000401354153536500142250ustar00rootroot00000000000000#!/bin/bash git push && jkopush miller-5.6.2/c/pushl000077500000000000000000000001431354153536500143230ustar00rootroot00000000000000#!/bin/bash set -u -e cd $mlb rsync -r -tlzv --delete $(pwd)/ $smith:/home/kerl/local/miller-head miller-5.6.2/c/reg_test/000077500000000000000000000000001354153536500150605ustar00rootroot00000000000000miller-5.6.2/c/reg_test/Makefile.am000066400000000000000000000001671354153536500171200ustar00rootroot00000000000000SUBDIRS= input expected EXTRA_DIST= run README.md TESTS= run # created by 'run' clean-local: rm -rf output-regtest miller-5.6.2/c/reg_test/Makefile.in000066400000000000000000000770061354153536500171370ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/reg_test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/autotools/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/autotools/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = input expected EXTRA_DIST = run README.md TESTS = run all: all-recursive .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/reg_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/reg_test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? run.log: run @p='run'; \ b='run'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-TESTS check-am clean clean-generic clean-libtool \ clean-local cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # created by 'run' clean-local: rm -rf output-regtest # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/reg_test/README.md000066400000000000000000000005701354153536500163410ustar00rootroot00000000000000There are two classes of testing for Miller: * C source-file names starting with `test_` use MinUnit to **unit-test** various subsystems of interest. These are separate executables built and run by the build framework. * `test/run` runs the main `mlr` executable with canned inputs, comparing actual to canned outputs, to **regression-test** Miller's end-to-end operation. miller-5.6.2/c/reg_test/dev000077500000000000000000000056461354153536500155770ustar00rootroot00000000000000#!/bin/sh # ================================================================ # This is similar to reg_test/run except that this one is only ever run # manually, not automatically as part of the build. It can be used to iterate on # as-yet-unreleased features (in particular, features whose definition isn't # finalized) without breaking the build. # ================================================================ set -e ourdir=`dirname $0` srcdir=$ourdir/../.. pwd=`pwd` try1=$pwd/../mlr # For autoconf builds, in-tree or out-of-tree try2=$srcdir/c/mlr # For non-autoconf builds if [ -x "$try1" ]; then path_to_mlr=$try1 elif [ -x "$try2" ]; then path_to_mlr=$try2 else echo "$0: Could not find path to mlr executable." 1>&2 echo "Try 1: $try1" 1>&2 echo "Try 2: $try2" 1>&2 exit 1 fi do_diff="true" for arg; do if [ "$1" = "--valgrind" ]; then # Leak-check the test suite. Needs 'make mlrg' first. # ../tools/clean-valg can be used to filter the output. path_to_mlr="valgrind --leak-check=full ${path_to_mlr}g" elif [ "$1" = "--nodiff" ]; then do_diff="false" fi done echo Using mlr executable $path_to_mlr indir=$ourdir/input expdir=$ourdir/expected outdir=$pwd/output-regtest reloutdir=./output-regtest outfile=$outdir/out expfile=$expdir/out mkdir -p $outdir rm -rvf $outdir mkdir -p $outdir touch $outfile echo num_passed=0 announce() { echo >> $outfile echo "================================================================" >> $outfile echo "$@" >> $outfile echo >> $outfile } mention() { echo >> $outfile echo ---------------------------------------------------------------- "$@" >> $outfile } run_mlr() { # Use just "mlr" for info messages echo mlr "$@" echo mlr "$@" >> $outfile # Use path to mlr for invoking the command $path_to_mlr "$@" >> $outfile echo >> $outfile # since set -e num_passed=`expr $num_passed + 1` } mlr_expect_fail() { # Use just "mlr" for info messages echo mlr "$@" echo mlr "$@" >> $outfile # Use path to mlr for invoking the command set +e $path_to_mlr "$@" >> $outfile 2>&1 status=$? if [ $status -ne 1 ]; then echo "Exit status was $status; expected 1." echo "Exit status was $status; expected 1." >> $outfile fi set -e echo >> $outfile test $status -eq 1 # since set -e num_passed=`expr $num_passed + 1` } # ================================================================ announce FUNC PROHIBITS mlr_expect_fail --from $indir/abixy put ' func f(x,y,z) { return $a # cannot reference srecs from functions } ' mlr_expect_fail --from $indir/abixy put ' func f(x,y,z) { return $[x] # cannot reference srecs from functions } ' run_mlr -n put '' # ================================================================ cat $outfile if [ "$do_diff" = "true" ]; then echo diff -I '^mlr ' -C5 $expfile $outfile echo diff OK # since set -e echo ALL REGRESSION TESTS PASSED echo Tests completed: $num_passed fi miller-5.6.2/c/reg_test/expected/000077500000000000000000000000001354153536500166615ustar00rootroot00000000000000miller-5.6.2/c/reg_test/expected/Makefile.am000066400000000000000000000000201354153536500207050ustar00rootroot00000000000000EXTRA_DIST= out miller-5.6.2/c/reg_test/expected/Makefile.in000066400000000000000000000274031354153536500207340ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/reg_test/expected ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/reg_test/expected/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/reg_test/expected/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/reg_test/expected/out000066400000000000000000062516451354153536500174360ustar00rootroot00000000000000 ================================================================ STATELESS MAPPERS mlr cat ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat /dev/null mlr cat -n ./reg_test/input/abixy-het n=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 n=2,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 n=3,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 n=4,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 n=5,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 n=6,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 n=7,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 n=8,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 n=9,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 n=10,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat -N counter ./reg_test/input/abixy-het counter=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 counter=2,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 counter=3,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 counter=4,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 counter=5,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 counter=6,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 counter=7,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 counter=8,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 counter=9,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 counter=10,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat -g a,b ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat -g a,b ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat -g a,b -n ./reg_test/input/abixy-het n=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 n=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 n=1,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 n=2,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 n=1,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 n=1,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 n=1,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 n=1,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 n=3,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 n=1,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat -g a,b -N counter ./reg_test/input/abixy-het counter=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 counter=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 counter=1,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 counter=2,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 counter=1,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 counter=1,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 counter=1,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 counter=1,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 counter=3,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 counter=1,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cut -f a,x ./reg_test/input/abixy a=pan,x=0.3467901443380824 a=eks,x=0.7586799647899636 a=wye,x=0.20460330576630303 a=eks,x=0.38139939387114097 a=wye,x=0.5732889198020006 a=zee,x=0.5271261600918548 a=eks,x=0.6117840605678454 a=zee,x=0.5985540091064224 a=hat,x=0.03144187646093577 a=pan,x=0.5026260055412137 mlr cut --complement -f a,x ./reg_test/input/abixy b=pan,i=1,y=0.7268028627434533 b=pan,i=2,y=0.5221511083334797 b=wye,i=3,y=0.33831852551664776 b=wye,i=4,y=0.13418874328430463 b=pan,i=5,y=0.8636244699032729 b=pan,i=6,y=0.49322128674835697 b=zee,i=7,y=0.1878849191181694 b=wye,i=8,y=0.976181385699006 b=wye,i=9,y=0.7495507603507059 b=wye,i=10,y=0.9526183602969864 mlr cut -r -f c,e ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 abcd=3 abcde=5 mlr cut -r -f "C","E" ./reg_test/input/having-fields-regex.dkvp ABC=2,DEF=12 ABCD=4 ABCDE=6 mlr cut -r -f "c"i,"e" ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 ABC=2 abcd=3 ABCD=4 abcde=5 ABCDE=6 mlr cut -r -f "C"i,"E" ./reg_test/input/having-fields-regex.dkvp abc=1 ABC=2,DEF=12 abcd=3 ABCD=4 abcde=5 ABCDE=6 mlr cut -r -x -f c,e ./reg_test/input/having-fields-regex.dkvp ABC=2,DEF=12 ghi=13 ABCD=4,GHI=14 ghi=15 ABCDE=6,GHI=16 mlr cut -r -x -f "C","E" ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 abcd=3,ghi=13 GHI=14 abcde=5,ghi=15 GHI=16 mlr cut -r -x -f "C","E"i ./reg_test/input/having-fields-regex.dkvp abc=1 abcd=3,ghi=13 GHI=14 ghi=15 GHI=16 mlr cut -r -x -f "c","e"i ./reg_test/input/having-fields-regex.dkvp ABC=2 ghi=13 ABCD=4,GHI=14 ghi=15 GHI=16 mlr --csvlite cut -r -f ^Name$,^Date_[0-9].*$ ./reg_test/input/date1.csv ./reg_test/input/date2.csv Name,Date_201505 Alice,2015-05-14 Bob,2015-05-11 Chuck,2015-05-28 Denise,2015-05-02 Name,Date_201506 Alice,2015-06-23 Denise,2015-06-17 Chuck,2015-06-19 Bob,2015-06-19 mlr having-fields --at-least a,b ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr having-fields --at-least a,c ./reg_test/input/abixy mlr having-fields --at-least a,b,i,x,y ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr having-fields --which-are a,b,i,x ./reg_test/input/abixy mlr having-fields --which-are a,b,i,x,y ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr having-fields --which-are a,b,i,y,x ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr having-fields --which-are a,b,i,x,w ./reg_test/input/abixy mlr having-fields --which-are a,b,i,x,y,z ./reg_test/input/abixy mlr having-fields --at-most a,c ./reg_test/input/abixy mlr having-fields --at-most a,b,i,x,y ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr having-fields --at-most a,b,i,x,y,z ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr having-fields --all-matching "^[a-z][a-z][a-z]$" ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 mlr having-fields --any-matching "^[a-z][a-z][a-z]$" ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 abcd=3,ghi=13 abcde=5,ghi=15 mlr having-fields --none-matching "^[a-z][a-z][a-z]$" ./reg_test/input/having-fields-regex.dkvp ABC=2,DEF=12 ABCD=4,GHI=14 ABCDE=6,GHI=16 mlr having-fields --all-matching "^[a-z][a-z][a-z]$"i ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 ABC=2,DEF=12 mlr having-fields --any-matching "^[a-z][a-z][a-z]$"i ./reg_test/input/having-fields-regex.dkvp abc=1,def=11 ABC=2,DEF=12 abcd=3,ghi=13 ABCD=4,GHI=14 abcde=5,ghi=15 ABCDE=6,GHI=16 mlr having-fields --none-matching "^[a-z][a-z][a-z]$"i ./reg_test/input/having-fields-regex.dkvp mlr rename b,BEE,x,EKS ./reg_test/input/abixy a=pan,BEE=pan,i=1,EKS=0.3467901443380824,y=0.7268028627434533 a=eks,BEE=pan,i=2,EKS=0.7586799647899636,y=0.5221511083334797 a=wye,BEE=wye,i=3,EKS=0.20460330576630303,y=0.33831852551664776 a=eks,BEE=wye,i=4,EKS=0.38139939387114097,y=0.13418874328430463 a=wye,BEE=pan,i=5,EKS=0.5732889198020006,y=0.8636244699032729 a=zee,BEE=pan,i=6,EKS=0.5271261600918548,y=0.49322128674835697 a=eks,BEE=zee,i=7,EKS=0.6117840605678454,y=0.1878849191181694 a=zee,BEE=wye,i=8,EKS=0.5985540091064224,y=0.976181385699006 a=hat,BEE=wye,i=9,EKS=0.03144187646093577,y=0.7495507603507059 a=pan,BEE=wye,i=10,EKS=0.5026260055412137,y=0.9526183602969864 mlr rename nonesuch,nonesuch,x,EKS ./reg_test/input/abixy a=pan,b=pan,i=1,EKS=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,EKS=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,EKS=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,EKS=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,EKS=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,EKS=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,EKS=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,EKS=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,EKS=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,EKS=0.5026260055412137,y=0.9526183602969864 mlr label NEW ./reg_test/input/abixy NEW=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 NEW=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 NEW=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 NEW=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 NEW=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 NEW=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 NEW=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 NEW=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 NEW=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 NEW=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr label a,NEW,c ./reg_test/input/abixy a=pan,NEW=pan,c=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,NEW=pan,c=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,NEW=wye,c=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,NEW=wye,c=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,NEW=pan,c=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,NEW=pan,c=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,NEW=zee,c=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,NEW=wye,c=8,x=0.5985540091064224,y=0.976181385699006 a=hat,NEW=wye,c=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,NEW=wye,c=10,x=0.5026260055412137,y=0.9526183602969864 mlr label 1,2,3,4,5,6,7,8 ./reg_test/input/abixy 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797 1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776 1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463 1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729 1=zee,2=pan,3=6,4=0.5271261600918548,5=0.49322128674835697 1=eks,2=zee,3=7,4=0.6117840605678454,5=0.1878849191181694 1=zee,2=wye,3=8,4=0.5985540091064224,5=0.976181385699006 1=hat,2=wye,3=9,4=0.03144187646093577,5=0.7495507603507059 1=pan,2=wye,3=10,4=0.5026260055412137,5=0.9526183602969864 mlr label d,x,f ./reg_test/input/abixy d=pan,x=pan,f=1,y=0.7268028627434533 d=eks,x=pan,f=2,y=0.5221511083334797 d=wye,x=wye,f=3,y=0.33831852551664776 d=eks,x=wye,f=4,y=0.13418874328430463 d=wye,x=pan,f=5,y=0.8636244699032729 d=zee,x=pan,f=6,y=0.49322128674835697 d=eks,x=zee,f=7,y=0.1878849191181694 d=zee,x=wye,f=8,y=0.976181385699006 d=hat,x=wye,f=9,y=0.7495507603507059 d=pan,x=wye,f=10,y=0.9526183602969864 mlr label d,x,d ./reg_test/input/abixy mlr label: labels must be unique; got "d" mlr --csvlite rename -r ^Date_[0-9].*$,Date ./reg_test/input/date1.csv ./reg_test/input/date2.csv Name,Date,Extraneous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r (.*)e(.*),EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,ExtranEEEous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,ExtranEEEous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r "(.*)e(.*)"i,EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,ExtranEEEous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,ExtranEEEous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r -g "(.*)e(.*)"i,EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,ExtranEEEous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,ExtranEEEous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r "e",EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,ExtranEEEous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,ExtranEEEous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r -g "e",EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,ExtranEEEous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,ExtranEEEous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r "e"i,EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,EEExtraneous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,EEExtraneous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr --csvlite rename -r -g "e"i,EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv NamEEE,DatEEE_201505,EEExtranEEEous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep NamEEE,DatEEE_201506,EEExtranEEEous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d mlr regularize ./reg_test/input/regularize.dkvp a=1,c=2,b=3 e=4,d=5 a=6,c=7,b=8 mlr --opprint bar -f x,y --lo 0 --hi 1 ./reg_test/input/abixy a b i x y pan pan 1 *************........................... *****************************........... eks pan 2 ******************************.......... ********************.................... wye wye 3 ********................................ *************........................... eks wye 4 ***************......................... *****................................... wye pan 5 **********************.................. **********************************...... zee pan 6 *********************................... *******************..................... eks zee 7 ************************................ *******................................. zee wye 8 ***********************................. ***************************************. hat wye 9 *....................................... *****************************........... pan wye 10 ********************.................... **************************************.. mlr --opprint bar -f x,y -c c -x x -b b --lo 0.1 --hi 0.9 -w 20 ./reg_test/input/abixy a b i x y pan pan 1 ccccccbbbbbbbbbbbbbb cccccccccccccccbbbbb eks pan 2 ccccccccccccccccbbbb ccccccccccbbbbbbbbbb wye wye 3 ccbbbbbbbbbbbbbbbbbb cccccbbbbbbbbbbbbbbb eks wye 4 cccccccbbbbbbbbbbbbb xbbbbbbbbbbbbbbbbbbb wye pan 5 cccccccccccbbbbbbbbb cccccccccccccccccccb zee pan 6 ccccccccccbbbbbbbbbb cccccccccbbbbbbbbbbb eks zee 7 ccccccccccccbbbbbbbb ccbbbbbbbbbbbbbbbbbb zee wye 8 ccccccccccccbbbbbbbb cccccccccccccccccccx hat wye 9 xbbbbbbbbbbbbbbbbbbb ccccccccccccccccbbbb pan wye 10 ccccccccccbbbbbbbbbb cccccccccccccccccccx mlr --opprint bar --auto -f x,y -w 10 ./reg_test/input/abixy a b i x y pan pan 1 [0.0314419]****......[0.75868] [0.134189]*******...[0.976181] eks pan 2 [0.0314419]*********#[0.75868] [0.134189]****......[0.976181] wye wye 3 [0.0314419]**........[0.75868] [0.134189]**........[0.976181] eks wye 4 [0.0314419]****......[0.75868] [0.134189]#.........[0.976181] wye pan 5 [0.0314419]*******...[0.75868] [0.134189]********..[0.976181] zee pan 6 [0.0314419]******....[0.75868] [0.134189]****......[0.976181] eks zee 7 [0.0314419]*******...[0.75868] [0.134189]#.........[0.976181] zee wye 8 [0.0314419]*******...[0.75868] [0.134189]*********#[0.976181] hat wye 9 [0.0314419]#.........[0.75868] [0.134189]*******...[0.976181] pan wye 10 [0.0314419]******....[0.75868] [0.134189]*********.[0.976181] mlr altkv a=b,c=d,e=f mlr altkv a=b,c=d,e=f,4=g ================================================================ TRIVIAL RETAINERS mlr group-by a ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr group-by a,b ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr group-like ./reg_test/input/het.dkvp host=jupiter host=saturn host=mars host=jupiter host=mars host=saturn df/tmp=2.43MB,uptime=32345sec df/tmp=1.34MB,uptime=234214132sec df/tmp=4.97MB,uptime=345089805sec df/tmp=0.04MB,uptime=890sec df/tmp=8.55MB,uptime=787897777sec df/tmp=9.47MB,uptime=234289080sec mlr tac ./reg_test/input/abixy a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 mlr tac /dev/null mlr --opprint unsparsify ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint unsparsify ./reg_test/input/abixy-het a b i x y aaa bbb xxx iii yyy pan pan 1 0.3467901443380824 0.7268028627434533 - - - - - eks pan 2 0.7586799647899636 0.5221511083334797 - - - - - - wye 3 0.20460330576630303 0.33831852551664776 wye - - - - eks - 4 0.38139939387114097 0.13418874328430463 - wye - - - wye pan 5 - 0.8636244699032729 - - 0.5732889198020006 - - zee pan 6 0.5271261600918548 0.49322128674835697 - - - - - eks zee - 0.6117840605678454 0.1878849191181694 - - - 7 - zee wye 8 0.5985540091064224 - - - - - 0.976181385699006 - - 9 0.03144187646093577 0.7495507603507059 hat wye - - - pan wye 10 0.5026260055412137 0.9526183602969864 - - - - - mlr --csv skip-trivial-records ./reg_test/input/trivial-records.csv a,b,c 1,2,3 4,,6 ,8,9 mlr --csv remove-empty-columns ./reg_test/input/remove-empty-columns.csv a,c,e 1,3,5 2,4,5 3,5,7 mlr format-values ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.346790,y=0.726803 a=eks,b=pan,i=2,x=0.758680,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338319 a=eks,b=wye,i=4,x=0.381399,y=0.134189 a=wye,b=pan,i=5,x=0.573289,y=0.863624 a=zee,b=pan,i=6,x=0.527126,y=0.493221 a=eks,b=zee,i=7,x=0.611784,y=0.187885 a=zee,b=wye,i=8,x=0.598554,y=0.976181 a=hat,b=wye,i=9,x=0.031442,y=0.749551 a=pan,b=wye,i=10,x=0.502626,y=0.952618 mlr format-values -n ./reg_test/input/abixy a=pan,b=pan,i=1.000000,x=0.346790,y=0.726803 a=eks,b=pan,i=2.000000,x=0.758680,y=0.522151 a=wye,b=wye,i=3.000000,x=0.204603,y=0.338319 a=eks,b=wye,i=4.000000,x=0.381399,y=0.134189 a=wye,b=pan,i=5.000000,x=0.573289,y=0.863624 a=zee,b=pan,i=6.000000,x=0.527126,y=0.493221 a=eks,b=zee,i=7.000000,x=0.611784,y=0.187885 a=zee,b=wye,i=8.000000,x=0.598554,y=0.976181 a=hat,b=wye,i=9.000000,x=0.031442,y=0.749551 a=pan,b=wye,i=10.000000,x=0.502626,y=0.952618 mlr format-values -i %08llx -f %.6le -s X%sX ./reg_test/input/abixy a=XpanX,b=XpanX,i=00000001,x=3.467901e-01,y=7.268029e-01 a=XeksX,b=XpanX,i=00000002,x=7.586800e-01,y=5.221511e-01 a=XwyeX,b=XwyeX,i=00000003,x=2.046033e-01,y=3.383185e-01 a=XeksX,b=XwyeX,i=00000004,x=3.813994e-01,y=1.341887e-01 a=XwyeX,b=XpanX,i=00000005,x=5.732889e-01,y=8.636245e-01 a=XzeeX,b=XpanX,i=00000006,x=5.271262e-01,y=4.932213e-01 a=XeksX,b=XzeeX,i=00000007,x=6.117841e-01,y=1.878849e-01 a=XzeeX,b=XwyeX,i=00000008,x=5.985540e-01,y=9.761814e-01 a=XhatX,b=XwyeX,i=00000009,x=3.144188e-02,y=7.495508e-01 a=XpanX,b=XwyeX,i=0000000a,x=5.026260e-01,y=9.526184e-01 mlr format-values -i %08llx -f %.6le -s X%sX -n ./reg_test/input/abixy a=XpanX,b=XpanX,i=1.000000e+00,x=3.467901e-01,y=7.268029e-01 a=XeksX,b=XpanX,i=2.000000e+00,x=7.586800e-01,y=5.221511e-01 a=XwyeX,b=XwyeX,i=3.000000e+00,x=2.046033e-01,y=3.383185e-01 a=XeksX,b=XwyeX,i=4.000000e+00,x=3.813994e-01,y=1.341887e-01 a=XwyeX,b=XpanX,i=5.000000e+00,x=5.732889e-01,y=8.636245e-01 a=XzeeX,b=XpanX,i=6.000000e+00,x=5.271262e-01,y=4.932213e-01 a=XeksX,b=XzeeX,i=7.000000e+00,x=6.117841e-01,y=1.878849e-01 a=XzeeX,b=XwyeX,i=8.000000e+00,x=5.985540e-01,y=9.761814e-01 a=XhatX,b=XwyeX,i=9.000000e+00,x=3.144188e-02,y=7.495508e-01 a=XpanX,b=XwyeX,i=1.000000e+01,x=5.026260e-01,y=9.526184e-01 ================================================================ HEAD/TAIL/ETC. mlr head -n 2 ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr head -n 2 -g a ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr head -n 2 -g a,b ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr then cat then head -n 2 -g a,b then tac ./reg_test/input/abixy-het a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 mlr head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 Final NR is 3 mlr head -n 2 -g a then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 a=wye,b=cat,i=3,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 a=dog,b=hat,i=4,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 a=dog,b=pan,i=5,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 a=wye,b=cat,i=6,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 a=pan,b=pan,i=8,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 a=hat,b=hat,i=9,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 a=cat,b=hat,i=12,x=0.6335445699880142,y=0.15467178563525052,x2=0.4013787221612979,xy=0.0979914699195631,y2=0.02392336127159689 a=hat,b=wye,i=13,x=0.35922068401384877,y=0.8502678133887914,x2=0.1290394998233774,xy=0.30543378552048117,y2=0.7229553544849566 Final NR is 2000 mlr cat then head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 Final NR is 3 mlr tac then head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide Final NR is 2000 a=wye,b=cat,i=2000,x=0.10887569736363611,y=0.3480524315645718,x2=0.01185391747641808,xy=0.037894451205701986,y2=0.12114049511801092 a=hat,b=dog,i=1999,x=0.010819574860139292,y=0.8983779455002124,x2=0.00011706320015415817,xy=0.009720067434037685,y2=0.8070829329611827 mlr head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide ./reg_test/input/abixy-wide ./reg_test/input/abixy-wide a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 Final NR is 3 mlr tail -n 2 ./reg_test/input/abixy-het aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr tail -n 2 -g a ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 mlr tail -n 2 -g a,b ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr top -f x,y -n 2 ./reg_test/input/abixy-het top_idx=1,x_top=0.758680,y_top=0.952618 top_idx=2,x_top=0.611784,y_top=0.749551 mlr top -f x,y -n 2 -g a ./reg_test/input/abixy-het a=pan,top_idx=1,x_top=0.502626,y_top=0.952618 a=pan,top_idx=2,x_top=0.346790,y_top=0.726803 a=eks,top_idx=1,x_top=0.758680,y_top=0.522151 a=eks,top_idx=2,x_top=0.611784,y_top=0.187885 a=zee,top_idx=1,x_top=0.527126,y_top=0.493221 a=zee,top_idx=2,x_top=,y_top= mlr top -f x,y -n 2 -g a,b ./reg_test/input/abixy-het a=pan,b=pan,top_idx=1,x_top=0.346790,y_top=0.726803 a=pan,b=pan,top_idx=2,x_top=,y_top= a=eks,b=pan,top_idx=1,x_top=0.758680,y_top=0.522151 a=eks,b=pan,top_idx=2,x_top=,y_top= a=zee,b=pan,top_idx=1,x_top=0.527126,y_top=0.493221 a=zee,b=pan,top_idx=2,x_top=,y_top= a=eks,b=zee,top_idx=1,x_top=0.611784,y_top=0.187885 a=eks,b=zee,top_idx=2,x_top=,y_top= a=pan,b=wye,top_idx=1,x_top=0.502626,y_top=0.952618 a=pan,b=wye,top_idx=2,x_top=,y_top= mlr top -f x,y -n 2 ./reg_test/input/ints.dkvp top_idx=1,x_top=9,y_top=9 top_idx=2,x_top=8,y_top=9 mlr top -f x,y -n 2 -F ./reg_test/input/ints.dkvp top_idx=1,x_top=9.000000,y_top=9.000000 top_idx=2,x_top=8.000000,y_top=9.000000 mlr top -n 4 -f x ./reg_test/input/abixy-wide top_idx=1,x_top=0.999730 top_idx=2,x_top=0.999308 top_idx=3,x_top=0.997339 top_idx=4,x_top=0.997245 mlr top -n 1 -f x,y ./reg_test/input/abixy-wide top_idx=1,x_top=0.999730,y_top=0.999522 mlr top -n 4 -f x -g a ./reg_test/input/abixy-wide a=cat,top_idx=1,x_top=0.996359 a=cat,top_idx=2,x_top=0.990588 a=cat,top_idx=3,x_top=0.990160 a=cat,top_idx=4,x_top=0.986548 a=pan,top_idx=1,x_top=0.999730 a=pan,top_idx=2,x_top=0.999308 a=pan,top_idx=3,x_top=0.996583 a=pan,top_idx=4,x_top=0.990853 a=wye,top_idx=1,x_top=0.997339 a=wye,top_idx=2,x_top=0.996525 a=wye,top_idx=3,x_top=0.995414 a=wye,top_idx=4,x_top=0.994219 a=dog,top_idx=1,x_top=0.997245 a=dog,top_idx=2,x_top=0.988581 a=dog,top_idx=3,x_top=0.980266 a=dog,top_idx=4,x_top=0.977280 a=hat,top_idx=1,x_top=0.997014 a=hat,top_idx=2,x_top=0.995705 a=hat,top_idx=3,x_top=0.992879 a=hat,top_idx=4,x_top=0.989639 mlr top -n 1 -f x,y -g a ./reg_test/input/abixy-wide a=cat,top_idx=1,x_top=0.996359,y_top=0.997929 a=pan,top_idx=1,x_top=0.999730,y_top=0.999319 a=wye,top_idx=1,x_top=0.997339,y_top=0.999450 a=dog,top_idx=1,x_top=0.997245,y_top=0.999522 a=hat,top_idx=1,x_top=0.997014,y_top=0.991400 mlr top -a -n 4 -f x ./reg_test/input/abixy-wide a=pan,b=cat,i=1943,x=0.9997301774748071,y=0.8408385083267972,x2=0.9994604277538093,xy=0.8406116311572011,y2=0.7070093970852334 a=pan,b=dog,i=552,x=0.9993077485337599,y=0.10019859749555626,x2=0.9986159762796124,xy=0.10012923486952477,y2=0.010039758940076493 a=wye,b=pan,i=568,x=0.9973387930844961,y=0.5711453274816489,x2=0.9946846681912394,xy=0.569625391586397,y2=0.32620698510412 a=dog,b=pan,i=1613,x=0.997245171384539,y=0.8188847898688517,x2=0.9944979318497786,xy=0.8166289026169553,y2=0.6705722990785534 mlr top -a -n 4 -f x -g a ./reg_test/input/abixy-wide a=cat,b=dog,i=901,x=0.9963591865818606,y=0.9423606044154952,x2=0.9927316286860669,xy=0.9389296452822133,y2=0.8880435087543374 a=cat,b=wye,i=135,x=0.9905881531288986,y=0.7789092765450115,x2=0.9812648891193222,xy=0.7715783017076895,y2=0.6066996610878732 a=cat,b=hat,i=975,x=0.9901595235021967,y=0.8592860989306361,x2=0.9804158819820973,xy=0.8508303142692202,y2=0.738372599815431 a=cat,b=dog,i=748,x=0.986548192318023,y=0.22327955924073406,x2=0.973277335765959,xy=0.2202760455505111,y2=0.04985376157473647 a=pan,b=cat,i=1943,x=0.9997301774748071,y=0.8408385083267972,x2=0.9994604277538093,xy=0.8406116311572011,y2=0.7070093970852334 a=pan,b=dog,i=552,x=0.9993077485337599,y=0.10019859749555626,x2=0.9986159762796124,xy=0.10012923486952477,y2=0.010039758940076493 a=pan,b=pan,i=756,x=0.9965826588776338,y=0.8864833103309704,x2=0.9931769959756142,xy=0.883453894460285,y2=0.7858526594953555 a=pan,b=wye,i=1876,x=0.9908531016291003,y=0.318873165751998,x2=0.9817898690080082,xy=0.3159564653116574,y2=0.10168009583670118 a=wye,b=pan,i=568,x=0.9973387930844961,y=0.5711453274816489,x2=0.9946846681912394,xy=0.569625391586397,y2=0.32620698510412 a=wye,b=dog,i=1772,x=0.9965249307670624,y=0.8078766237661098,x2=0.9930619376402985,xy=0.8050691965668507,y2=0.6526646392277285 a=wye,b=pan,i=450,x=0.9954136776717515,y=0.8564839236024028,x2=0.9908483896960015,xy=0.8525558122597992,y2=0.7335647113893665 a=wye,b=dog,i=882,x=0.9942189496990836,y=0.3298671968153588,x2=0.988471319940749,xy=0.32796021795794694,y2=0.10881236753482267 a=dog,b=pan,i=1613,x=0.997245171384539,y=0.8188847898688517,x2=0.9944979318497786,xy=0.8166289026169553,y2=0.6705722990785534 a=dog,b=hat,i=1680,x=0.9885812365291148,y=0.048768165346359305,x2=0.9772928612174336,xy=0.04821129320136021,y2=0.0023783339512498405 a=dog,b=wye,i=1331,x=0.9802656048578349,y=0.9431768957041479,x2=0.9609206560672968,xy=0.9245638701553616,y2=0.889582656590113 a=dog,b=pan,i=978,x=0.9772797759762182,y=0.5328687567382687,x2=0.9550757605321272,xy=0.5207618592099011,y2=0.2839491119077882 a=hat,b=dog,i=1894,x=0.9970136511026203,y=0.2054109087831395,x2=0.9940362204849775,xy=0.2047974801421852,y2=0.04219364144711526 a=hat,b=hat,i=818,x=0.9957052214494239,y=0.026702922142899044,x2=0.9914288880216462,xy=0.026588239005642018,y2=0.0007130460509697281 a=hat,b=hat,i=1513,x=0.9928788688650781,y=0.1805357299725343,x2=0.9858084482387971,xy=0.17925011136486105,y2=0.03259314979671582 a=hat,b=dog,i=1768,x=0.9896393441122658,y=0.5323182982465756,x2=0.9793860314149557,xy=0.5268031315356986,y2=0.2833627706481302 mlr top -n 3 -f x,y ./reg_test/input/near-ovf.dkvp top_idx=1,x_top=9223372036854775807,y_top=-9223372036854775801 top_idx=2,x_top=9223372036854775806,y_top=-9223372036854775802 top_idx=3,x_top=9223372036854775805,y_top=-9223372036854775803 mlr top -n 3 -f x,y --min ./reg_test/input/near-ovf.dkvp top_idx=1,x_top=9223372036854775801,y_top=-9223372036854775807 top_idx=2,x_top=9223372036854775802,y_top=-9223372036854775806 top_idx=3,x_top=9223372036854775803,y_top=-9223372036854775805 mlr top -F -n 3 -f x,y ./reg_test/input/near-ovf.dkvp top_idx=1,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 top_idx=2,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 top_idx=3,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 mlr top -F -n 3 -f x,y --min ./reg_test/input/near-ovf.dkvp top_idx=1,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 top_idx=2,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 top_idx=3,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 mlr --seed 12345 bootstrap ./reg_test/input/abixy-het a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 mlr --seed 12345 bootstrap -n 2 ./reg_test/input/abixy-het a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 mlr --seed 12345 bootstrap -n 20 ./reg_test/input/abixy-het a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 mlr --seed 12345 sample -k 2 ./reg_test/input/abixy-het aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr --seed 12345 sample -k 2 -g a ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 mlr --seed 12345 sample -k 2 -g a,b ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --seed 12345 shuffle ./reg_test/input/abixy-het a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 mlr --seed 23456 shuffle ./reg_test/input/abixy-het a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr --seed 34567 shuffle ./reg_test/input/abixy-het a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr uniq -g a ./reg_test/input/abixy-het a=pan a=eks a=wye a=zee mlr uniq -g a,b ./reg_test/input/abixy-het a=pan,b=pan a=eks,b=pan a=wye,b=pan a=zee,b=pan a=eks,b=zee a=zee,b=wye a=pan,b=wye mlr uniq -f a ./reg_test/input/abixy-het a=pan a=eks a=wye a=zee mlr uniq -f a,b ./reg_test/input/abixy-het a=pan,b=pan a=eks,b=pan a=wye,b=pan a=zee,b=pan a=eks,b=zee a=zee,b=wye a=pan,b=wye mlr uniq -c -g a ./reg_test/input/abixy-het a=pan,count=2 a=eks,count=3 a=wye,count=1 a=zee,count=2 mlr uniq -c -g a,b ./reg_test/input/abixy-het a=pan,b=pan,count=1 a=eks,b=pan,count=1 a=wye,b=pan,count=1 a=zee,b=pan,count=1 a=eks,b=zee,count=1 a=zee,b=wye,count=1 a=pan,b=wye,count=1 mlr count-distinct -f a ./reg_test/input/small ./reg_test/input/abixy a=pan,count=4 a=eks,count=6 a=wye,count=4 a=zee,count=4 a=hat,count=2 mlr count-distinct -f a,b ./reg_test/input/small ./reg_test/input/abixy a=pan,b=pan,count=2 a=eks,b=pan,count=2 a=wye,b=wye,count=2 a=eks,b=wye,count=2 a=wye,b=pan,count=2 a=zee,b=pan,count=2 a=eks,b=zee,count=2 a=zee,b=wye,count=2 a=hat,b=wye,count=2 a=pan,b=wye,count=2 mlr count-distinct -f a,b -u ./reg_test/input/small ./reg_test/input/abixy field=a,value=pan,count=4 field=a,value=eks,count=6 field=a,value=wye,count=4 field=a,value=zee,count=4 field=a,value=hat,count=2 field=b,value=pan,count=8 field=b,value=wye,count=10 field=b,value=zee,count=2 mlr count-distinct -f a -n ./reg_test/input/small ./reg_test/input/abixy count=5 mlr count-distinct -f a,b -n ./reg_test/input/small ./reg_test/input/abixy count=10 mlr uniq -g a -o foo ./reg_test/input/abixy-het a=pan a=eks a=wye a=zee mlr uniq -g a,b -o foo ./reg_test/input/abixy-het a=pan,b=pan a=eks,b=pan a=wye,b=pan a=zee,b=pan a=eks,b=zee a=zee,b=wye a=pan,b=wye mlr uniq -f a -o foo ./reg_test/input/abixy-het a=pan a=eks a=wye a=zee mlr uniq -f a,b -o foo ./reg_test/input/abixy-het a=pan,b=pan a=eks,b=pan a=wye,b=pan a=zee,b=pan a=eks,b=zee a=zee,b=wye a=pan,b=wye mlr uniq -c -g a -o foo ./reg_test/input/abixy-het a=pan,foo=2 a=eks,foo=3 a=wye,foo=1 a=zee,foo=2 mlr uniq -c -g a,b -o foo ./reg_test/input/abixy-het a=pan,b=pan,foo=1 a=eks,b=pan,foo=1 a=wye,b=pan,foo=1 a=zee,b=pan,foo=1 a=eks,b=zee,foo=1 a=zee,b=wye,foo=1 a=pan,b=wye,foo=1 mlr uniq -a ./reg_test/input/repeats.dkvp color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=purple,shape=square,flag=0 color=red,shape=square,flag=1 color=yellow,shape=triangle,flag=1 mlr uniq -a -c ./reg_test/input/repeats.dkvp count=17,color=red,shape=square,flag=0 count=11,color=purple,shape=triangle,flag=0 count=11,color=yellow,shape=circle,flag=1 count=6,color=red,shape=circle,flag=1 count=7,color=purple,shape=square,flag=0 count=3,color=red,shape=square,flag=1 count=2,color=yellow,shape=triangle,flag=1 mlr uniq -a -c -o foo ./reg_test/input/repeats.dkvp foo=17,color=red,shape=square,flag=0 foo=11,color=purple,shape=triangle,flag=0 foo=11,color=yellow,shape=circle,flag=1 foo=6,color=red,shape=circle,flag=1 foo=7,color=purple,shape=square,flag=0 foo=3,color=red,shape=square,flag=1 foo=2,color=yellow,shape=triangle,flag=1 mlr uniq -a -n ./reg_test/input/repeats.dkvp count=7 mlr uniq -a -n -o bar ./reg_test/input/repeats.dkvp bar=7 mlr count-distinct -f a -o foo ./reg_test/input/small ./reg_test/input/abixy a=pan,foo=4 a=eks,foo=6 a=wye,foo=4 a=zee,foo=4 a=hat,foo=2 mlr count-distinct -f a,b -o foo ./reg_test/input/small ./reg_test/input/abixy a=pan,b=pan,foo=2 a=eks,b=pan,foo=2 a=wye,b=wye,foo=2 a=eks,b=wye,foo=2 a=wye,b=pan,foo=2 a=zee,b=pan,foo=2 a=eks,b=zee,foo=2 a=zee,b=wye,foo=2 a=hat,b=wye,foo=2 a=pan,b=wye,foo=2 mlr count-distinct -f a -n -o foo ./reg_test/input/small ./reg_test/input/abixy count=5 mlr count-distinct -f a,b -n -o foo ./reg_test/input/small ./reg_test/input/abixy count=10 mlr grep pan ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr grep -v pan ./reg_test/input/abixy-het aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr decimate -n 4 ./reg_test/input/abixy a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr decimate -b -n 4 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr decimate -e -n 4 ./reg_test/input/abixy a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr decimate -g a -n 2 ./reg_test/input/abixy a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr decimate -g a -b -n 2 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr decimate -g a -e -n 2 ./reg_test/input/abixy a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ WHITESPACE-REDUCTION mlr --icsv --ojson cat ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy ", "b ": 2, " c": 3 } { "n": 3, "a": "xy ", "b ": 2, " c": 3 } { "n": 4, "a": "xy ", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": " xy", "b ": 2, " c": 3 } { "n": 7, "a": " xy", "b ": 2, " c": 3 } { "n": 8, "a": " xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": " xy ", "b ": 2, " c": 3 } { "n": 11, "a": " xy ", "b ": 2, " c": 3 } { "n": 12, "a": " xy ", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": " ", "b ": 2, " c": 3 } { "n": 15, "a": " ", "b ": 2, " c": 3 } { "n": 16, "a": " ", "b ": 2, " c": 3 } mlr --icsv --ojson put $a = lstrip($a) ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy ", "b ": 2, " c": 3 } { "n": 3, "a": "xy ", "b ": 2, " c": 3 } { "n": 4, "a": "xy ", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": "xy", "b ": 2, " c": 3 } { "n": 7, "a": "xy", "b ": 2, " c": 3 } { "n": 8, "a": "xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": "xy ", "b ": 2, " c": 3 } { "n": 11, "a": "xy ", "b ": 2, " c": 3 } { "n": 12, "a": "xy ", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": "", "b ": 2, " c": 3 } { "n": 15, "a": "", "b ": 2, " c": 3 } { "n": 16, "a": "", "b ": 2, " c": 3 } mlr --icsv --ojson put $a = rstrip($a) ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy", "b ": 2, " c": 3 } { "n": 3, "a": "xy", "b ": 2, " c": 3 } { "n": 4, "a": "xy", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": " xy", "b ": 2, " c": 3 } { "n": 7, "a": " xy", "b ": 2, " c": 3 } { "n": 8, "a": " xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": " xy", "b ": 2, " c": 3 } { "n": 11, "a": " xy", "b ": 2, " c": 3 } { "n": 12, "a": " xy", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": "", "b ": 2, " c": 3 } { "n": 15, "a": "", "b ": 2, " c": 3 } { "n": 16, "a": "", "b ": 2, " c": 3 } mlr --icsv --ojson put $a = strip($a) ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy", "b ": 2, " c": 3 } { "n": 3, "a": "xy", "b ": 2, " c": 3 } { "n": 4, "a": "xy", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": "xy", "b ": 2, " c": 3 } { "n": 7, "a": "xy", "b ": 2, " c": 3 } { "n": 8, "a": "xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": "xy", "b ": 2, " c": 3 } { "n": 11, "a": "xy", "b ": 2, " c": 3 } { "n": 12, "a": "xy", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": "", "b ": 2, " c": 3 } { "n": 15, "a": "", "b ": 2, " c": 3 } { "n": 16, "a": "", "b ": 2, " c": 3 } mlr --icsv --ojson put $a = collapse_whitespace($a) ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy ", "b ": 2, " c": 3 } { "n": 3, "a": "xy ", "b ": 2, " c": 3 } { "n": 4, "a": "xy ", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": " xy", "b ": 2, " c": 3 } { "n": 7, "a": " xy", "b ": 2, " c": 3 } { "n": 8, "a": " xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": " xy ", "b ": 2, " c": 3 } { "n": 11, "a": " xy ", "b ": 2, " c": 3 } { "n": 12, "a": " xy ", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": " ", "b ": 2, " c": 3 } { "n": 15, "a": " ", "b ": 2, " c": 3 } { "n": 16, "a": " ", "b ": 2, " c": 3 } mlr --icsv --ojson put $a = clean_whitespace($a) ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy", "b ": 2, " c": 3 } { "n": 3, "a": "xy", "b ": 2, " c": 3 } { "n": 4, "a": "xy", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": "xy", "b ": 2, " c": 3 } { "n": 7, "a": "xy", "b ": 2, " c": 3 } { "n": 8, "a": "xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": "xy", "b ": 2, " c": 3 } { "n": 11, "a": "xy", "b ": 2, " c": 3 } { "n": 12, "a": "xy", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": "", "b ": 2, " c": 3 } { "n": 15, "a": "", "b ": 2, " c": 3 } { "n": 16, "a": "", "b ": 2, " c": 3 } mlr --icsv --ojson clean-whitespace -k ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b": 2, "c": 3 } { "n": 2, "a": "xy ", "b": 2, "c": 3 } { "n": 3, "a": "xy ", "b": 2, "c": 3 } { "n": 4, "a": "xy ", "b": 2, "c": 3 } { "n": 5, "a": "xy", "b": 2, "c": 3 } { "n": 6, "a": " xy", "b": 2, "c": 3 } { "n": 7, "a": " xy", "b": 2, "c": 3 } { "n": 8, "a": " xy", "b": 2, "c": 3 } { "n": 9, "a": "xy", "b": 2, "c": 3 } { "n": 10, "a": " xy ", "b": 2, "c": 3 } { "n": 11, "a": " xy ", "b": 2, "c": 3 } { "n": 12, "a": " xy ", "b": 2, "c": 3 } { "n": 13, "a": "", "b": 2, "c": 3 } { "n": 14, "a": " ", "b": 2, "c": 3 } { "n": 15, "a": " ", "b": 2, "c": 3 } { "n": 16, "a": " ", "b": 2, "c": 3 } mlr --icsv --ojson clean-whitespace -v ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b ": 2, " c": 3 } { "n": 2, "a": "xy", "b ": 2, " c": 3 } { "n": 3, "a": "xy", "b ": 2, " c": 3 } { "n": 4, "a": "xy", "b ": 2, " c": 3 } { "n": 5, "a": "xy", "b ": 2, " c": 3 } { "n": 6, "a": "xy", "b ": 2, " c": 3 } { "n": 7, "a": "xy", "b ": 2, " c": 3 } { "n": 8, "a": "xy", "b ": 2, " c": 3 } { "n": 9, "a": "xy", "b ": 2, " c": 3 } { "n": 10, "a": "xy", "b ": 2, " c": 3 } { "n": 11, "a": "xy", "b ": 2, " c": 3 } { "n": 12, "a": "xy", "b ": 2, " c": 3 } { "n": 13, "a": "", "b ": 2, " c": 3 } { "n": 14, "a": "", "b ": 2, " c": 3 } { "n": 15, "a": "", "b ": 2, " c": 3 } { "n": 16, "a": "", "b ": 2, " c": 3 } mlr --icsv --ojson clean-whitespace ./reg_test/input/clean-whitespace.csv { "n": 1, "a": "xy", "b": 2, "c": 3 } { "n": 2, "a": "xy", "b": 2, "c": 3 } { "n": 3, "a": "xy", "b": 2, "c": 3 } { "n": 4, "a": "xy", "b": 2, "c": 3 } { "n": 5, "a": "xy", "b": 2, "c": 3 } { "n": 6, "a": "xy", "b": 2, "c": 3 } { "n": 7, "a": "xy", "b": 2, "c": 3 } { "n": 8, "a": "xy", "b": 2, "c": 3 } { "n": 9, "a": "xy", "b": 2, "c": 3 } { "n": 10, "a": "xy", "b": 2, "c": 3 } { "n": 11, "a": "xy", "b": 2, "c": 3 } { "n": 12, "a": "xy", "b": 2, "c": 3 } { "n": 13, "a": "", "b": 2, "c": 3 } { "n": 14, "a": "", "b": 2, "c": 3 } { "n": 15, "a": "", "b": 2, "c": 3 } { "n": 16, "a": "", "b": 2, "c": 3 } ================================================================ SORT mlr sort -f a ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr sort -r a ./reg_test/input/abixy a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 mlr sort -f x ./reg_test/input/abixy a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr sort -r x ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr sort -nf x ./reg_test/input/abixy a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr sort -nr x ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr sort -f a,b ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr sort -r a,b ./reg_test/input/abixy a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr sort -f x,y ./reg_test/input/abixy a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr sort -r x,y ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr sort -nf x,y ./reg_test/input/abixy a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 mlr sort -nr x,y ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr sort -f a -nr x ./reg_test/input/abixy a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 mlr sort -nr y -f a ./reg_test/input/abixy a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 mlr sort -f a -r b -nf x -nr y ./reg_test/input/abixy a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 mlr sort -f x ./reg_test/input/sort-het.dkvp x=1 x=2 x=4 a=3 mlr sort -r x ./reg_test/input/sort-het.dkvp x=4 x=2 x=1 a=3 ================================================================ JOIN mlr --opprint join -s -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y mlr --opprint join -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y mlr --opprint join -s --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y l x 4 g mlr --opprint join --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y l x 4 g mlr --opprint join -s --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y r y 5 z mlr --opprint join --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y r y 5 z mlr --opprint join -s --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y l x 4 g r y 5 z mlr --opprint join --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp o x y 1 a s 2 b t 2 c t 2 d t 2 b v 2 c v 2 d v 3 e w 3 f w 3 e x 3 f x 3 e y 3 f y r y 5 z l x 4 g mlr --opprint join -s --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp l x 4 g mlr --opprint join --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp l x 4 g mlr --opprint join -s --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp r y 5 z mlr --opprint join --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp r y 5 z mlr --opprint join -s --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp l x 4 g r y 5 z mlr --opprint join --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp r y 5 z l x 4 g mlr join -l l -r r -j j -f ./reg_test/input/joina.dkvp ./reg_test/input/joinb.dkvp j=1,x=a,y=s j=2,x=b,y=t j=2,x=c,y=t j=2,x=d,y=t j=2,x=b,y=v j=2,x=c,y=v j=2,x=d,y=v j=3,x=e,y=w j=3,x=f,y=w j=3,x=e,y=x j=3,x=f,y=x j=3,x=e,y=y j=3,x=f,y=y mlr join -l l -j r -f ./reg_test/input/joina.dkvp ./reg_test/input/joinb.dkvp r=1,x=a,y=s r=2,x=b,y=t r=2,x=c,y=t r=2,x=d,y=t r=2,x=b,y=v r=2,x=c,y=v r=2,x=d,y=v r=3,x=e,y=w r=3,x=f,y=w r=3,x=e,y=x r=3,x=f,y=x r=3,x=e,y=y r=3,x=f,y=y mlr join -r r -j l -f ./reg_test/input/joina.dkvp ./reg_test/input/joinb.dkvp l=1,x=a,y=s l=2,x=b,y=t l=2,x=c,y=t l=2,x=d,y=t l=2,x=b,y=v l=2,x=c,y=v l=2,x=d,y=v l=3,x=e,y=w l=3,x=f,y=w l=3,x=e,y=x l=3,x=f,y=x l=3,x=e,y=y l=3,x=f,y=y mlr --opprint join -s -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp mlr --opprint join -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp mlr --opprint join -s --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp mlr --opprint join --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp mlr --opprint join -s --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join -s --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join -s --np --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp mlr --opprint join --np --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp mlr --opprint join -s --np --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join --np --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join -s --np --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join --np --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp r y 1 s 2 t 2 v 3 w 3 x 3 y 5 z mlr --opprint join -s -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null mlr --opprint join -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null mlr --opprint join -s --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join -s --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null mlr --opprint join --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null mlr --opprint join -s --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join -s --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join -s --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null mlr --opprint join --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null mlr --opprint join -s --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --opprint join --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null l x 1 a 2 b 2 c 2 d 3 e 3 f 4 g mlr --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --odkvp join -j a -f ./reg_test/input/abixy-het ./reg_test/input/join-het.dkvp a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,n=123 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,n=123 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,n=123 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,n=234 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,n=234 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,n=345 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,n=456 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,n=456 mlr --odkvp join --np --ul --ur -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 aye=bee,enn=emm mlr --odkvp join --np --ul --ur -j a -f ./reg_test/input/abixy-het ./reg_test/input/join-het.dkvp aye=bee,enn=emm aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr --idkvp --oxtab join --lp left_ --rp right_ -j i -f ./reg_test/input/abixy-het ./reg_test/input/abixy-het i 1 left_a pan left_b pan left_x 0.3467901443380824 left_y 0.7268028627434533 right_a pan right_b pan right_x 0.3467901443380824 right_y 0.7268028627434533 i 2 left_a eks left_b pan left_x 0.7586799647899636 left_y 0.5221511083334797 right_a eks right_b pan right_x 0.7586799647899636 right_y 0.5221511083334797 i 3 left_aaa wye left_b wye left_x 0.20460330576630303 left_y 0.33831852551664776 right_aaa wye right_b wye right_x 0.20460330576630303 right_y 0.33831852551664776 i 4 left_a eks left_bbb wye left_x 0.38139939387114097 left_y 0.13418874328430463 right_a eks right_bbb wye right_x 0.38139939387114097 right_y 0.13418874328430463 i 5 left_a wye left_b pan left_xxx 0.5732889198020006 left_y 0.8636244699032729 right_a wye right_b pan right_xxx 0.5732889198020006 right_y 0.8636244699032729 i 6 left_a zee left_b pan left_x 0.5271261600918548 left_y 0.49322128674835697 right_a zee right_b pan right_x 0.5271261600918548 right_y 0.49322128674835697 i 8 left_a zee left_b wye left_x 0.5985540091064224 left_yyy 0.976181385699006 right_a zee right_b wye right_x 0.5985540091064224 right_yyy 0.976181385699006 i 9 left_aaa hat left_bbb wye left_x 0.03144187646093577 left_y 0.7495507603507059 right_aaa hat right_bbb wye right_x 0.03144187646093577 right_y 0.7495507603507059 i 10 left_a pan left_b wye left_x 0.5026260055412137 left_y 0.9526183602969864 right_a pan right_b wye right_x 0.5026260055412137 right_y 0.9526183602969864 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 j=1,b=11 j=1,b=12 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 j=1,b=11 j=1,b=12 j=1,b=11 j=1,b=12 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 j=1,b=11 j=1,b=12 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 j=1,b=11 j=1,b=12 j=3,b=14 j=3,b=15 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 j=1,b=11 j=1,b=12 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 j=1,b=11 j=1,b=12 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 j=1,b=11 j=1,b=12 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 j=3,b=14 j=3,b=15 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 j=3,b=14 j=3,b=15 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 j=3,b=14 j=3,b=15 j=3,b=14 j=3,b=15 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 j=3,b=14 j=3,b=15 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 j=3,b=14 j=3,b=15 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 j=3,b=14 j=3,b=15 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 j=5,b=17 j=5,b=18 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 j=5,b=17 j=5,b=18 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 x=100,b=10 x=200,b=13 l=3,b=14 l=3,b=15 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 x=100,b=10 x=200,b=13 l=3,b=14 l=3,b=15 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 x=100,b=10 x=200,b=13 x=300,b=16 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 x=100,b=10 x=200,b=13 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 x=100,b=10 x=200,b=13 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 l=5,b=17 l=5,b=18 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 x=100,b=10 x=200,b=13 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 x=100,b=10 x=200,b=13 l=3,b=14 l=3,b=15 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=3,b=14 l=3,b=15 x=400,b=19 l=5,b=17 l=5,b=18 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=3,b=14 l=3,b=15 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 x=400,b=19 l=5,b=17 l=5,b=18 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 l=5,b=17 l=5,b=18 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 l=5,b=17 l=5,b=18 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 l=5,b=17 l=5,b=18 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 x=100,b=10 x=200,b=13 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 y=111 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 y=111 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 y=111 y=222 r=2 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 y=111 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 y=111 y=222 r=4 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 y=111 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 y=111 y=222 r=6 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 y=111 r=2 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 y=111 r=2 y=222 r=2 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 y=111 r=2 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 y=111 r=2 y=222 r=4 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 y=111 r=2 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 y=111 r=2 y=222 r=6 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 y=111 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 y=111 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 y=111 y=222 r=4 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 y=111 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 y=111 y=222 r=6 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 y=111 r=4 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 y=111 r=4 y=222 r=4 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 y=111 r=4 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 y=111 r=4 y=222 r=6 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 y=111 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 y=111 y=222 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 y=111 y=222 r=6 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 y=111 r=6 y=333 mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 y=111 r=6 y=222 r=6 y=333 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 j=1,b=11 j=1,b=12 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 j=1,b=11 j=1,b=12 j=1,b=11 j=1,b=12 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 j=1,b=11 j=1,b=12 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 j=1,b=11 j=1,b=12 j=3,b=14 j=3,b=15 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 j=1,b=11 j=1,b=12 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 j=1,b=11 j=1,b=12 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 j=1,b=11 j=1,b=12 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 j=3,b=14 j=3,b=15 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 j=3,b=14 j=3,b=15 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 j=3,b=14 j=3,b=15 j=3,b=14 j=3,b=15 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 j=3,b=14 j=3,b=15 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 j=3,b=14 j=3,b=15 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 j=3,b=14 j=3,b=15 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 j=5,b=17 j=5,b=18 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 j=5,b=17 j=5,b=18 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 l=3,b=14 l=3,b=15 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 l=1,b=11 l=1,b=12 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 l=1,b=11 l=1,b=12 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 l=1,b=11 l=1,b=12 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 l=1,b=11 l=1,b=12 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 l=1,b=11 l=1,b=12 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 l=1,b=11 l=1,b=12 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 l=1,b=11 l=1,b=12 l=3,b=14 l=3,b=15 l=5,b=17 l=5,b=18 x=100,b=10 x=200,b=13 x=300,b=16 x=400,b=19 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 y=111 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 y=111 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 y=111 y=222 r=2 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 y=111 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 y=111 y=222 r=4 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 y=111 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 y=111 y=222 r=6 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 y=111 r=2 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 y=111 r=2 y=222 r=2 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 y=111 r=2 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 y=111 r=2 y=222 r=4 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 y=111 r=2 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 y=111 r=2 y=222 r=6 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 y=111 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 y=111 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 y=111 y=222 r=4 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 y=111 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 y=111 y=222 r=6 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 y=111 r=4 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 y=111 r=4 y=222 r=4 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 y=111 r=4 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 y=111 r=4 y=222 r=6 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 y=111 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 y=111 y=222 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 y=111 y=222 r=6 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 y=111 r=6 y=333 mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 y=111 r=6 y=222 r=6 y=333 ================================================================ JOIN PREPIPE mlr --prepipe cat --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --prepipe cat --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ JOIN MIXED-FORMAT mlr --json join -s -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -s -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -s -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -s -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -s -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -s -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -s -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -s -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -s -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -s -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -s -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -s -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --json join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --dkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --csvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --ijson --ojson join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --idkvp --ojson join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --icsvlite --ojson join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --ijson --ojson join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --idkvp --ojson join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --icsvlite --ojson join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --ijson --ojson join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --idkvp --ojson join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --icsvlite --ojson join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv { "x": 1, "a": 2, "b": 20 } { "x": 2, "a": 3, "b": 30 } { "x": 3, "a": 4, "b": 40 } { "x": 4, "a": 5, "b": 50 } mlr --ijson --odkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --idkvp --odkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --icsvlite --odkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --ijson --odkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --idkvp --odkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --icsvlite --odkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --ijson --odkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --idkvp --odkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --icsvlite --odkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv x=1,a=2,b=20 x=2,a=3,b=30 x=3,a=4,b=40 x=4,a=5,b=50 mlr --ijson --ocsvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --idkvp --ocsvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --icsvlite --ocsvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --ijson --ocsvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --idkvp --ocsvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --icsvlite --ocsvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --ijson --ocsvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --idkvp --ocsvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 mlr --icsvlite --ocsvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv x,a,b 1,2,20 2,3,30 3,4,40 4,5,50 ================================================================ REPEAT mlr repeat -n 5 ./reg_test/input/repeat-input.dat a=1,b=2,c=3 a=1,b=2,c=3 a=1,b=2,c=3 a=1,b=2,c=3 a=1,b=2,c=3 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 mlr repeat -f a ./reg_test/input/repeat-input.dat a=1,b=2,c=3 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 mlr repeat -f b ./reg_test/input/repeat-input.dat a=1,b=2,c=3 a=1,b=2,c=3 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 mlr repeat -f c ./reg_test/input/repeat-input.dat a=1,b=2,c=3 a=1,b=2,c=3 a=1,b=2,c=3 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=3,b=4,c=5 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=6,b=,c=7 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 a=8,x=,c=9 ================================================================ RESHAPE mlr --pprint reshape -i X,Y,Z -o item,price ./reg_test/input/reshape-wide.tbl time item price 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-01 Z -1.46570942 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-02 Z -2.05357735 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 2009-01-03 Z 4.64248357 2009-01-04 X 0.35397376 2009-01-04 Y 3.3765645 2009-01-04 Z -0.25237774 2009-01-05 X 2.19357813 2009-01-05 Y 1.3477511 2009-01-05 Z 0.09719105 mlr --pprint reshape -i X,Z -o item,price ./reg_test/input/reshape-wide.tbl time Y item price 2009-01-01 2.4520609 X 0.65473572 2009-01-01 2.4520609 Z -1.46570942 2009-01-02 0.2154713 X -0.89248112 2009-01-02 0.2154713 Z -2.05357735 2009-01-03 1.3179287 X 0.98012375 2009-01-03 1.3179287 Z 4.64248357 2009-01-04 3.3765645 X 0.35397376 2009-01-04 3.3765645 Z -0.25237774 2009-01-05 1.3477511 X 2.19357813 2009-01-05 1.3477511 Z 0.09719105 mlr --pprint reshape -r [X-Z] -o item,price ./reg_test/input/reshape-wide.tbl time item price 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-01 Z -1.46570942 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-02 Z -2.05357735 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 2009-01-03 Z 4.64248357 2009-01-04 X 0.35397376 2009-01-04 Y 3.3765645 2009-01-04 Z -0.25237774 2009-01-05 X 2.19357813 2009-01-05 Y 1.3477511 2009-01-05 Z 0.09719105 mlr --pprint reshape -r [XZ] -o item,price ./reg_test/input/reshape-wide.tbl time Y item price 2009-01-01 2.4520609 X 0.65473572 2009-01-01 2.4520609 Z -1.46570942 2009-01-02 0.2154713 X -0.89248112 2009-01-02 0.2154713 Z -2.05357735 2009-01-03 1.3179287 X 0.98012375 2009-01-03 1.3179287 Z 4.64248357 2009-01-04 3.3765645 X 0.35397376 2009-01-04 3.3765645 Z -0.25237774 2009-01-05 1.3477511 X 2.19357813 2009-01-05 1.3477511 Z 0.09719105 mlr --pprint reshape -s item,price ./reg_test/input/reshape-long.tbl time X Y Z 2009-01-01 0.65473572 2.4520609 -1.46570942 2009-01-02 -0.89248112 0.2154713 -2.05357735 2009-01-03 0.98012375 1.3179287 4.64248357 2009-01-04 0.35397376 3.3765645 -0.25237774 2009-01-05 2.19357813 1.3477511 0.09719105 mlr --pprint reshape -i X,Y,Z -o item,price then reshape -s item,price ./reg_test/input/reshape-wide.tbl time X Y Z 2009-01-01 0.65473572 2.4520609 -1.46570942 2009-01-02 -0.89248112 0.2154713 -2.05357735 2009-01-03 0.98012375 1.3179287 4.64248357 2009-01-04 0.35397376 3.3765645 -0.25237774 2009-01-05 2.19357813 1.3477511 0.09719105 mlr --pprint reshape -s item,price then reshape -i X,Y,Z -o item,price ./reg_test/input/reshape-long.tbl time item price 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-01 Z -1.46570942 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-02 Z -2.05357735 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 2009-01-03 Z 4.64248357 2009-01-04 X 0.35397376 2009-01-04 Y 3.3765645 2009-01-04 Z -0.25237774 2009-01-05 X 2.19357813 2009-01-05 Y 1.3477511 2009-01-05 Z 0.09719105 mlr reshape -i X,Y,Z -o item,price ./reg_test/input/reshape-wide-ragged.dkvp time=2009-01-01,item=X,price=0.65473572 time=2009-01-01,item=Y,price=2.4520609 time=2009-01-01,item=Z,price=-1.46570942 time=2009-01-02,item=X,price=-0.89248112 time=2009-01-02,item=Y,price=0.2154713 time=2009-01-03,item=X,price=0.98012375 time=2009-01-04 time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 mlr reshape -i X,Z -o item,price ./reg_test/input/reshape-wide-ragged.dkvp time=2009-01-01,Y=2.4520609,item=X,price=0.65473572 time=2009-01-01,Y=2.4520609,item=Z,price=-1.46570942 time=2009-01-02,Y=0.2154713,item=X,price=-0.89248112 time=2009-01-03,item=X,price=0.98012375 time=2009-01-04 time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 mlr reshape -r [X-Z] -o item,price ./reg_test/input/reshape-wide-ragged.dkvp time=2009-01-01,item=X,price=0.65473572 time=2009-01-01,item=Y,price=2.4520609 time=2009-01-01,item=Z,price=-1.46570942 time=2009-01-02,item=X,price=-0.89248112 time=2009-01-02,item=Y,price=0.2154713 time=2009-01-03,item=X,price=0.98012375 time=2009-01-04 time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 mlr reshape -r [XZ] -o item,price ./reg_test/input/reshape-wide-ragged.dkvp time=2009-01-01,Y=2.4520609,item=X,price=0.65473572 time=2009-01-01,Y=2.4520609,item=Z,price=-1.46570942 time=2009-01-02,Y=0.2154713,item=X,price=-0.89248112 time=2009-01-03,item=X,price=0.98012375 time=2009-01-04 time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 mlr reshape -s item,price ./reg_test/input/reshape-long-ragged.dkvp time=2009-01-01,item=X,value=0.65473572 time=2009-01-01,item=Y,value=2.4520609 time=2009-01-01,item=Z,value=-1.46570942 time=2009-01-02,item=X,value=-0.89248112 time=2009-01-02,item=Y,value=0.2154713 time=2009-01-03,item=X,value=0.98012375 time=2009-01-04 time=2009-01-05,U=1.3477511,V=0.09719105,item=X,value=2.19357813 mlr --json reshape -i x,y -o item,value ./reg_test/input/small-non-nested.json { "a": "pan", "b": "pan", "i": 1, "item": "x", "value": 0.3467901443380824 } { "a": "pan", "b": "pan", "i": 1, "item": "y", "value": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "item": "x", "value": 0.7586799647899636 } { "a": "eks", "b": "pan", "i": 2, "item": "y", "value": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "item": "x", "value": 0.20460330576630303 } { "a": "wye", "b": "wye", "i": 3, "item": "y", "value": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "item": "x", "value": 0.38139939387114097 } { "a": "eks", "b": "wye", "i": 4, "item": "y", "value": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "item": "x", "value": 0.5732889198020006 } { "a": "wye", "b": "pan", "i": 5, "item": "y", "value": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "item": "x", "value": 0.5271261600918548 } { "a": "zee", "b": "pan", "i": 6, "item": "y", "value": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "item": "x", "value": 0.6117840605678454 } { "a": "eks", "b": "zee", "i": 7, "item": "y", "value": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "item": "x", "value": 0.5985540091064224 } { "a": "zee", "b": "wye", "i": 8, "item": "y", "value": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "item": "x", "value": 0.03144187646093577 } { "a": "hat", "b": "wye", "i": 9, "item": "y", "value": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "item": "x", "value": 0.5026260055412137 } { "a": "pan", "b": "wye", "i": 10, "item": "y", "value": 0.9526183602969864 } ================================================================ NEST mlr cat ./reg_test/input/nest-explode.dkvp x=a:1;b:2;c:3,y=d:40 x=,y=d:50 u=100,y=d:60 x=a:4;b:5,y=d:70 mlr cat ./reg_test/input/nest-explode-vary-fs-ps.dkvp x=a=1|b=2|c=3,y=d=40 x=,y=d=50 u=100,y=d=60 x=a=4|b=5,y=d=70 mlr nest --explode --values --across-fields -f x ./reg_test/input/nest-explode.dkvp x_1=a:1,x_2=b:2,x_3=c:3,y=d:40 x_1=,y=d:50 u=100,y=d:60 x_1=a:4,x_2=b:5,y=d:70 mlr nest --explode --values --across-fields -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp x_1=a=1,x_2=b=2,x_3=c=3,y=d=40 x_1=,y=d=50 u=100,y=d=60 x_1=a=4,x_2=b=5,y=d=70 mlr nest --explode --values --across-fields -f x then nest --implode --values --across-fields -f x ./reg_test/input/nest-explode.dkvp x=a:1;b:2;c:3,y=d:40 x=,y=d:50 u=100,y=d:60 x=a:4;b:5,y=d:70 mlr nest --explode --values --across-fields -f x --nested-fs pipe --nested-ps = then nest --implode --values --across-fields -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp x=a=1|b=2|c=3,y=d=40 x=,y=d=50 u=100,y=d=60 x=a=4|b=5,y=d=70 mlr nest --explode --values --across-records -f x ./reg_test/input/nest-explode.dkvp x=a:1,y=d:40 x=b:2,y=d:40 x=c:3,y=d:40 x=,y=d:50 u=100,y=d:60 x=a:4,y=d:70 x=b:5,y=d:70 mlr nest --explode --values --across-records -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp x=a=1,y=d=40 x=b=2,y=d=40 x=c=3,y=d=40 x=,y=d=50 u=100,y=d=60 x=a=4,y=d=70 x=b=5,y=d=70 mlr nest --explode --values --across-records -f x then nest --implode --values --across-records -f x ./reg_test/input/nest-explode.dkvp u=100,y=d:60 x=a:1;b:2;c:3,y=d:40 x=,y=d:50 x=a:4;b:5,y=d:70 mlr nest --explode --values --across-records -f x --nested-fs pipe --nested-ps = then nest --implode --values --across-records -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp u=100,y=d=60 x=a=1|b=2|c=3,y=d=40 x=,y=d=50 x=a=4|b=5,y=d=70 mlr nest --explode --pairs --across-fields -f x ./reg_test/input/nest-explode.dkvp a=1,b=2,c=3,y=d:40 y=d:50 u=100,y=d:60 a=4,b=5,y=d:70 mlr nest --explode --pairs --across-fields -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp a=1,b=2,c=3,y=d=40 y=d=50 u=100,y=d=60 a=4,b=5,y=d=70 mlr nest --explode --pairs --across-records -f x ./reg_test/input/nest-explode.dkvp a=1,y=d:40 b=2,y=d:40 c=3,y=d:40 y=d:50 u=100,y=d:60 a=4,y=d:70 b=5,y=d:70 mlr nest --explode --pairs --across-records -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp a=1,y=d=40 b=2,y=d=40 c=3,y=d=40 y=d=50 u=100,y=d=60 a=4,y=d=70 b=5,y=d=70 ================================================================ FILL-DOWN mlr --csv fill-down -f a,b,c ./reg_test/input/fill-down.csv a,b,c 1,,3 4,5,6 7,5,9 mlr --csv fill-down -f a,b,c -a ./reg_test/input/fill-down.csv a,b,c 1,,3 4,5,6 7,,9 ================================================================ SEQGEN mlr seqgen --start 1 --stop 5 --step 1 i=1 i=2 i=3 i=4 i=5 mlr seqgen --start 1 --stop 5 --step 2 i=1 i=3 i=5 mlr seqgen --start 1 --stop 1 --step 1 -f a a=1 mlr seqgen --start 5 --stop 1 --step 1 -f b mlr seqgen --start 5 --stop 1 --step -1 -f c c=5 c=4 c=3 c=2 c=1 mlr seqgen --start 5 --stop 5 --step -1 -f d d=5 mlr --from ./reg_test/input/abixy cat then seqgen --start 1 --stop 5 i=1 i=2 i=3 i=4 i=5 mlr --from ./reg_test/input/abixy cat then seqgen --start 1 --stop 100 then stats1 -a count,sum,min,p50,max -f i i_count=100,i_sum=5050,i_min=1,i_p50=51,i_max=100 ================================================================ FRACTION mlr fraction -f x,y ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_fraction=0.087507,y_fraction=0.146286 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_fraction=0.191441,y_fraction=0.105095 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_fraction=0.051628,y_fraction=0.068095 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_fraction=0.096240,y_fraction=0.027009 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_fraction=0.173825 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_fraction=0.133012,y_fraction=0.099272 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_fraction=0.154374,y_fraction=0.037816 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_fraction=0.151035 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_fraction=0.007934,y_fraction=0.150865 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_fraction=0.126830,y_fraction=0.191737 mlr fraction -f x,y -g a ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_fraction=0.408269,y_fraction=0.432770 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_fraction=0.433070,y_fraction=0.618498 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_fraction=0.217711,y_fraction=0.158949 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_fraction=1.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_fraction=0.468273,y_fraction=1.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_fraction=0.349219,y_fraction=0.222553 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_fraction=0.531727 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_fraction=0.591731,y_fraction=0.567230 mlr fraction -f x,y -g a,b ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_fraction=1.000000,y_fraction=1.000000 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_fraction=1.000000,y_fraction=1.000000 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_fraction=1.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_fraction=1.000000,y_fraction=1.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_fraction=1.000000,y_fraction=1.000000 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_fraction=1.000000 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_fraction=1.000000,y_fraction=1.000000 mlr fraction -f x,y -p ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_percent=8.750687,y_percent=14.628624 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_percent=19.144058,y_percent=10.509524 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_percent=5.162832,y_percent=6.809459 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_percent=9.623995,y_percent=2.700865 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_percent=17.382482 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_percent=13.301173,y_percent=9.927243 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_percent=15.437378,y_percent=3.781628 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_percent=15.103539 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_percent=0.793385,y_percent=15.086479 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_percent=12.682952,y_percent=19.173694 mlr fraction -f x,y -g a -p ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_percent=40.826884,y_percent=43.276985 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_percent=43.307027,y_percent=61.849773 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_percent=21.771069,y_percent=15.894907 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_percent=100.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_percent=46.827347,y_percent=100.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_percent=34.921904,y_percent=22.255319 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_percent=53.172653 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_percent=59.173116,y_percent=56.723015 mlr fraction -f x,y -g a,b -p ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_percent=100.000000,y_percent=100.000000 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_percent=100.000000,y_percent=100.000000 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_percent=100.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_percent=100.000000,y_percent=100.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_percent=100.000000,y_percent=100.000000 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_percent=100.000000 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_percent=100.000000,y_percent=100.000000 mlr fraction -f x,y -c ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_fraction=0.087507,y_cumulative_fraction=0.146286 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_fraction=0.278947,y_cumulative_fraction=0.251381 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_cumulative_fraction=0.330576,y_cumulative_fraction=0.319476 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_fraction=0.426816,y_cumulative_fraction=0.346485 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_fraction=0.520310 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_fraction=0.559827,y_cumulative_fraction=0.619582 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_fraction=0.714201,y_cumulative_fraction=0.657398 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_fraction=0.865237 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_cumulative_fraction=0.873170,y_cumulative_fraction=0.808263 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 mlr fraction -f x,y -g a -c ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_fraction=0.408269,y_cumulative_fraction=0.432770 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_fraction=0.433070,y_cumulative_fraction=0.618498 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_fraction=0.650781,y_cumulative_fraction=0.777447 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_fraction=1.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_fraction=0.468273,y_cumulative_fraction=1.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_fraction=1.000000 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 mlr fraction -f x,y -g a,b -c ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_fraction=1.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_fraction=1.000000 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 mlr fraction -f x,y -p -c ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_percent=8.750687,y_cumulative_percent=14.628624 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_percent=27.894745,y_cumulative_percent=25.138148 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_cumulative_percent=33.057577,y_cumulative_percent=31.947608 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_percent=42.681572,y_cumulative_percent=34.648473 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_percent=52.030955 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_percent=55.982746,y_cumulative_percent=61.958199 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_percent=71.420124,y_cumulative_percent=65.739826 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_percent=86.523663 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_cumulative_percent=87.317048,y_cumulative_percent=80.826306 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 mlr fraction -f x,y -g a -p -c ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_percent=40.826884,y_cumulative_percent=43.276985 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_percent=43.307027,y_cumulative_percent=61.849773 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_percent=65.078096,y_cumulative_percent=77.744681 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_percent=100.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_percent=46.827347,y_cumulative_percent=100.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_percent=100.000000 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 mlr fraction -f x,y -g a,b -p -c ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_percent=100.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_percent=100.000000 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 ================================================================ STATS mlr --opprint stats1 -a mean,sum,count,min,max,antimode,mode -f i,x,y ./reg_test/input/abixy i_mean i_sum i_count i_min i_max i_antimode i_mode x_mean x_sum x_count x_min x_max x_antimode x_mode y_mean y_sum y_count y_min y_max y_antimode y_mode 5.500000 55 10 1 10 1 1 0.453629 4.536294 10 0.031442 0.758680 0.3467901443380824 0.3467901443380824 0.594454 5.944542 10 0.134189 0.976181 0.7268028627434533 0.7268028627434533 mlr --opprint stats1 -a min,p10,p50,median,antimode,mode,p90,max -f i,x,y ./reg_test/input/abixy i_min i_p10 i_p50 i_median i_antimode i_mode i_p90 i_max x_min x_p10 x_p50 x_median x_antimode x_mode x_p90 x_max y_min y_p10 y_p50 y_median y_antimode y_mode y_p90 y_max 1 2 6 6 1 1 10 10 0.031442 0.204603 0.527126 0.527126 0.3467901443380824 0.3467901443380824 0.758680 0.758680 0.134189 0.187885 0.726803 0.726803 0.7268028627434533 0.7268028627434533 0.976181 0.976181 mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y ./reg_test/input/abixy i_mean i_meaneb i_stddev x_mean x_meaneb x_stddev y_mean y_meaneb y_stddev 5.500000 0.957427 3.027650 0.453629 0.068157 0.215531 0.594454 0.096968 0.306639 mlr --oxtab stats1 -s -a mean,sum,count,min,max,antimode,mode -f i,x,y ./reg_test/input/abixy a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 i_mean 1.000000 i_sum 1 i_count 1 i_min 1 i_max 1 i_antimode 1 i_mode 1 x_mean 0.346790 x_sum 0.346790 x_count 1 x_min 0.346790 x_max 0.346790 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.726803 y_sum 0.726803 y_count 1 y_min 0.726803 y_max 0.726803 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 i_mean 1.500000 i_sum 3 i_count 2 i_min 1 i_max 2 i_antimode 1 i_mode 1 x_mean 0.552735 x_sum 1.105470 x_count 2 x_min 0.346790 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.624477 y_sum 1.248954 y_count 2 y_min 0.522151 y_max 0.726803 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 i_mean 2.000000 i_sum 6 i_count 3 i_min 1 i_max 3 i_antimode 1 i_mode 1 x_mean 0.436691 x_sum 1.310073 x_count 3 x_min 0.204603 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.529091 y_sum 1.587272 y_count 3 y_min 0.338319 y_max 0.726803 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 i_mean 2.500000 i_sum 10 i_count 4 i_min 1 i_max 4 i_antimode 1 i_mode 1 x_mean 0.422868 x_sum 1.691473 x_count 4 x_min 0.204603 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.430365 y_sum 1.721461 y_count 4 y_min 0.134189 y_max 0.726803 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 i_mean 3.000000 i_sum 15 i_count 5 i_min 1 i_max 5 i_antimode 1 i_mode 1 x_mean 0.452952 x_sum 2.264762 x_count 5 x_min 0.204603 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.517017 y_sum 2.585086 y_count 5 y_min 0.134189 y_max 0.863624 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 i_mean 3.500000 i_sum 21 i_count 6 i_min 1 i_max 6 i_antimode 1 i_mode 1 x_mean 0.465315 x_sum 2.791888 x_count 6 x_min 0.204603 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.513051 y_sum 3.078307 y_count 6 y_min 0.134189 y_max 0.863624 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 i_mean 4.000000 i_sum 28 i_count 7 i_min 1 i_max 7 i_antimode 1 i_mode 1 x_mean 0.486239 x_sum 3.403672 x_count 7 x_min 0.204603 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.466599 y_sum 3.266192 y_count 7 y_min 0.134189 y_max 0.863624 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 i_mean 4.500000 i_sum 36 i_count 8 i_min 1 i_max 8 i_antimode 1 i_mode 1 x_mean 0.500278 x_sum 4.002226 x_count 8 x_min 0.204603 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.530297 y_sum 4.242373 y_count 8 y_min 0.134189 y_max 0.976181 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 i_mean 5.000000 i_sum 45 i_count 9 i_min 1 i_max 9 i_antimode 1 i_mode 1 x_mean 0.448185 x_sum 4.033668 x_count 9 x_min 0.031442 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.554658 y_sum 4.991924 y_count 9 y_min 0.134189 y_max 0.976181 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 i_mean 5.500000 i_sum 55 i_count 10 i_min 1 i_max 10 i_antimode 1 i_mode 1 x_mean 0.453629 x_sum 4.536294 x_count 10 x_min 0.031442 x_max 0.758680 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.594454 y_sum 5.944542 y_count 10 y_min 0.134189 y_max 0.976181 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 mlr --opprint stats1 -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a ./reg_test/input/abixy a i_mean i_sum i_count i_min i_max i_antimode i_mode x_mean x_sum x_count x_min x_max x_antimode x_mode y_mean y_sum y_count y_min y_max y_antimode y_mode pan 5.500000 11 2 1 10 1 1 0.424708 0.849416 2 0.346790 0.502626 0.3467901443380824 0.3467901443380824 0.839711 1.679421 2 0.726803 0.952618 0.7268028627434533 0.7268028627434533 eks 4.333333 13 3 2 7 2 2 0.583954 1.751863 3 0.381399 0.758680 0.7586799647899636 0.7586799647899636 0.281408 0.844225 3 0.134189 0.522151 0.5221511083334797 0.5221511083334797 wye 4.000000 8 2 3 5 3 3 0.388946 0.777892 2 0.204603 0.573289 0.20460330576630303 0.20460330576630303 0.600971 1.201943 2 0.338319 0.863624 0.33831852551664776 0.33831852551664776 zee 7.000000 14 2 6 8 6 6 0.562840 1.125680 2 0.527126 0.598554 0.5271261600918548 0.5271261600918548 0.734701 1.469403 2 0.493221 0.976181 0.49322128674835697 0.49322128674835697 hat 9.000000 9 1 9 9 9 9 0.031442 0.031442 1 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.749551 0.749551 1 0.749551 0.749551 0.7495507603507059 0.7495507603507059 mlr --opprint stats1 -a min,p10,p50,median,antimode,mode,p90,max -f i,x,y -g a ./reg_test/input/abixy a i_min i_p10 i_p50 i_median i_antimode i_mode i_p90 i_max x_min x_p10 x_p50 x_median x_antimode x_mode x_p90 x_max y_min y_p10 y_p50 y_median y_antimode y_mode y_p90 y_max pan 1 1 10 10 1 1 10 10 0.346790 0.346790 0.502626 0.502626 0.3467901443380824 0.3467901443380824 0.502626 0.502626 0.726803 0.726803 0.952618 0.952618 0.7268028627434533 0.7268028627434533 0.952618 0.952618 eks 2 2 4 4 2 2 7 7 0.381399 0.381399 0.611784 0.611784 0.7586799647899636 0.7586799647899636 0.758680 0.758680 0.134189 0.134189 0.187885 0.187885 0.5221511083334797 0.5221511083334797 0.522151 0.522151 wye 3 3 5 5 3 3 5 5 0.204603 0.204603 0.573289 0.573289 0.20460330576630303 0.20460330576630303 0.573289 0.573289 0.338319 0.338319 0.863624 0.863624 0.33831852551664776 0.33831852551664776 0.863624 0.863624 zee 6 6 8 8 6 6 8 8 0.527126 0.527126 0.598554 0.598554 0.5271261600918548 0.5271261600918548 0.598554 0.598554 0.493221 0.493221 0.976181 0.976181 0.49322128674835697 0.49322128674835697 0.976181 0.976181 hat 9 9 9 9 9 9 9 9 0.031442 0.031442 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.031442 0.031442 0.749551 0.749551 0.749551 0.749551 0.7495507603507059 0.7495507603507059 0.749551 0.749551 mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y -g a ./reg_test/input/abixy a i_mean i_meaneb i_stddev x_mean x_meaneb x_stddev y_mean y_meaneb y_stddev pan 5.500000 4.500000 6.363961 0.424708 0.077918 0.110193 0.839711 0.112908 0.159676 eks 4.333333 1.452966 2.516611 0.583954 0.109797 0.190174 0.281408 0.121365 0.210211 wye 4.000000 1.000000 1.414214 0.388946 0.184343 0.260700 0.600971 0.262653 0.371447 zee 7.000000 1.000000 1.414214 0.562840 0.035714 0.050507 0.734701 0.241480 0.341504 hat 9.000000 - - 0.031442 - - 0.749551 - - mlr --oxtab stats1 -s -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a ./reg_test/input/abixy a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 i_mean 1.000000 i_sum 1 i_count 1 i_min 1 i_max 1 i_antimode 1 i_mode 1 x_mean 0.346790 x_sum 0.346790 x_count 1 x_min 0.346790 x_max 0.346790 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.726803 y_sum 0.726803 y_count 1 y_min 0.726803 y_max 0.726803 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 i_mean 2.000000 i_sum 2 i_count 1 i_min 2 i_max 2 i_antimode 2 i_mode 2 x_mean 0.758680 x_sum 0.758680 x_count 1 x_min 0.758680 x_max 0.758680 x_antimode 0.7586799647899636 x_mode 0.7586799647899636 y_mean 0.522151 y_sum 0.522151 y_count 1 y_min 0.522151 y_max 0.522151 y_antimode 0.5221511083334797 y_mode 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 i_mean 3.000000 i_sum 3 i_count 1 i_min 3 i_max 3 i_antimode 3 i_mode 3 x_mean 0.204603 x_sum 0.204603 x_count 1 x_min 0.204603 x_max 0.204603 x_antimode 0.20460330576630303 x_mode 0.20460330576630303 y_mean 0.338319 y_sum 0.338319 y_count 1 y_min 0.338319 y_max 0.338319 y_antimode 0.33831852551664776 y_mode 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 i_mean 3.000000 i_sum 6 i_count 2 i_min 2 i_max 4 i_antimode 2 i_mode 2 x_mean 0.570040 x_sum 1.140079 x_count 2 x_min 0.381399 x_max 0.758680 x_antimode 0.7586799647899636 x_mode 0.7586799647899636 y_mean 0.328170 y_sum 0.656340 y_count 2 y_min 0.134189 y_max 0.522151 y_antimode 0.5221511083334797 y_mode 0.5221511083334797 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 i_mean 4.000000 i_sum 8 i_count 2 i_min 3 i_max 5 i_antimode 3 i_mode 3 x_mean 0.388946 x_sum 0.777892 x_count 2 x_min 0.204603 x_max 0.573289 x_antimode 0.20460330576630303 x_mode 0.20460330576630303 y_mean 0.600971 y_sum 1.201943 y_count 2 y_min 0.338319 y_max 0.863624 y_antimode 0.33831852551664776 y_mode 0.33831852551664776 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 i_mean 6.000000 i_sum 6 i_count 1 i_min 6 i_max 6 i_antimode 6 i_mode 6 x_mean 0.527126 x_sum 0.527126 x_count 1 x_min 0.527126 x_max 0.527126 x_antimode 0.5271261600918548 x_mode 0.5271261600918548 y_mean 0.493221 y_sum 0.493221 y_count 1 y_min 0.493221 y_max 0.493221 y_antimode 0.49322128674835697 y_mode 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 i_mean 4.333333 i_sum 13 i_count 3 i_min 2 i_max 7 i_antimode 2 i_mode 2 x_mean 0.583954 x_sum 1.751863 x_count 3 x_min 0.381399 x_max 0.758680 x_antimode 0.7586799647899636 x_mode 0.7586799647899636 y_mean 0.281408 y_sum 0.844225 y_count 3 y_min 0.134189 y_max 0.522151 y_antimode 0.5221511083334797 y_mode 0.5221511083334797 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 i_mean 7.000000 i_sum 14 i_count 2 i_min 6 i_max 8 i_antimode 6 i_mode 6 x_mean 0.562840 x_sum 1.125680 x_count 2 x_min 0.527126 x_max 0.598554 x_antimode 0.5271261600918548 x_mode 0.5271261600918548 y_mean 0.734701 y_sum 1.469403 y_count 2 y_min 0.493221 y_max 0.976181 y_antimode 0.49322128674835697 y_mode 0.49322128674835697 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 i_mean 9.000000 i_sum 9 i_count 1 i_min 9 i_max 9 i_antimode 9 i_mode 9 x_mean 0.031442 x_sum 0.031442 x_count 1 x_min 0.031442 x_max 0.031442 x_antimode 0.03144187646093577 x_mode 0.03144187646093577 y_mean 0.749551 y_sum 0.749551 y_count 1 y_min 0.749551 y_max 0.749551 y_antimode 0.7495507603507059 y_mode 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 i_mean 5.500000 i_sum 11 i_count 2 i_min 1 i_max 10 i_antimode 1 i_mode 1 x_mean 0.424708 x_sum 0.849416 x_count 2 x_min 0.346790 x_max 0.502626 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.839711 y_sum 1.679421 y_count 2 y_min 0.726803 y_max 0.952618 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 mlr --opprint stats1 -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a,b ./reg_test/input/abixy a b i_mean i_sum i_count i_min i_max i_antimode i_mode x_mean x_sum x_count x_min x_max x_antimode x_mode y_mean y_sum y_count y_min y_max y_antimode y_mode pan pan 1.000000 1 1 1 1 1 1 0.346790 0.346790 1 0.346790 0.346790 0.3467901443380824 0.3467901443380824 0.726803 0.726803 1 0.726803 0.726803 0.7268028627434533 0.7268028627434533 eks pan 2.000000 2 1 2 2 2 2 0.758680 0.758680 1 0.758680 0.758680 0.7586799647899636 0.7586799647899636 0.522151 0.522151 1 0.522151 0.522151 0.5221511083334797 0.5221511083334797 wye wye 3.000000 3 1 3 3 3 3 0.204603 0.204603 1 0.204603 0.204603 0.20460330576630303 0.20460330576630303 0.338319 0.338319 1 0.338319 0.338319 0.33831852551664776 0.33831852551664776 eks wye 4.000000 4 1 4 4 4 4 0.381399 0.381399 1 0.381399 0.381399 0.38139939387114097 0.38139939387114097 0.134189 0.134189 1 0.134189 0.134189 0.13418874328430463 0.13418874328430463 wye pan 5.000000 5 1 5 5 5 5 0.573289 0.573289 1 0.573289 0.573289 0.5732889198020006 0.5732889198020006 0.863624 0.863624 1 0.863624 0.863624 0.8636244699032729 0.8636244699032729 zee pan 6.000000 6 1 6 6 6 6 0.527126 0.527126 1 0.527126 0.527126 0.5271261600918548 0.5271261600918548 0.493221 0.493221 1 0.493221 0.493221 0.49322128674835697 0.49322128674835697 eks zee 7.000000 7 1 7 7 7 7 0.611784 0.611784 1 0.611784 0.611784 0.6117840605678454 0.6117840605678454 0.187885 0.187885 1 0.187885 0.187885 0.1878849191181694 0.1878849191181694 zee wye 8.000000 8 1 8 8 8 8 0.598554 0.598554 1 0.598554 0.598554 0.5985540091064224 0.5985540091064224 0.976181 0.976181 1 0.976181 0.976181 0.976181385699006 0.976181385699006 hat wye 9.000000 9 1 9 9 9 9 0.031442 0.031442 1 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.749551 0.749551 1 0.749551 0.749551 0.7495507603507059 0.7495507603507059 pan wye 10.000000 10 1 10 10 10 10 0.502626 0.502626 1 0.502626 0.502626 0.5026260055412137 0.5026260055412137 0.952618 0.952618 1 0.952618 0.952618 0.9526183602969864 0.9526183602969864 mlr --opprint stats1 -a min,p10,p50,median,antimode,mode,p90,max -f i,x,y -g a,b ./reg_test/input/abixy a b i_min i_p10 i_p50 i_median i_antimode i_mode i_p90 i_max x_min x_p10 x_p50 x_median x_antimode x_mode x_p90 x_max y_min y_p10 y_p50 y_median y_antimode y_mode y_p90 y_max pan pan 1 1 1 1 1 1 1 1 0.346790 0.346790 0.346790 0.346790 0.3467901443380824 0.3467901443380824 0.346790 0.346790 0.726803 0.726803 0.726803 0.726803 0.7268028627434533 0.7268028627434533 0.726803 0.726803 eks pan 2 2 2 2 2 2 2 2 0.758680 0.758680 0.758680 0.758680 0.7586799647899636 0.7586799647899636 0.758680 0.758680 0.522151 0.522151 0.522151 0.522151 0.5221511083334797 0.5221511083334797 0.522151 0.522151 wye wye 3 3 3 3 3 3 3 3 0.204603 0.204603 0.204603 0.204603 0.20460330576630303 0.20460330576630303 0.204603 0.204603 0.338319 0.338319 0.338319 0.338319 0.33831852551664776 0.33831852551664776 0.338319 0.338319 eks wye 4 4 4 4 4 4 4 4 0.381399 0.381399 0.381399 0.381399 0.38139939387114097 0.38139939387114097 0.381399 0.381399 0.134189 0.134189 0.134189 0.134189 0.13418874328430463 0.13418874328430463 0.134189 0.134189 wye pan 5 5 5 5 5 5 5 5 0.573289 0.573289 0.573289 0.573289 0.5732889198020006 0.5732889198020006 0.573289 0.573289 0.863624 0.863624 0.863624 0.863624 0.8636244699032729 0.8636244699032729 0.863624 0.863624 zee pan 6 6 6 6 6 6 6 6 0.527126 0.527126 0.527126 0.527126 0.5271261600918548 0.5271261600918548 0.527126 0.527126 0.493221 0.493221 0.493221 0.493221 0.49322128674835697 0.49322128674835697 0.493221 0.493221 eks zee 7 7 7 7 7 7 7 7 0.611784 0.611784 0.611784 0.611784 0.6117840605678454 0.6117840605678454 0.611784 0.611784 0.187885 0.187885 0.187885 0.187885 0.1878849191181694 0.1878849191181694 0.187885 0.187885 zee wye 8 8 8 8 8 8 8 8 0.598554 0.598554 0.598554 0.598554 0.5985540091064224 0.5985540091064224 0.598554 0.598554 0.976181 0.976181 0.976181 0.976181 0.976181385699006 0.976181385699006 0.976181 0.976181 hat wye 9 9 9 9 9 9 9 9 0.031442 0.031442 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.031442 0.031442 0.749551 0.749551 0.749551 0.749551 0.7495507603507059 0.7495507603507059 0.749551 0.749551 pan wye 10 10 10 10 10 10 10 10 0.502626 0.502626 0.502626 0.502626 0.5026260055412137 0.5026260055412137 0.502626 0.502626 0.952618 0.952618 0.952618 0.952618 0.9526183602969864 0.9526183602969864 0.952618 0.952618 mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y -g a,b ./reg_test/input/abixy a b i_mean i_meaneb i_stddev x_mean x_meaneb x_stddev y_mean y_meaneb y_stddev pan pan 1.000000 - - 0.346790 - - 0.726803 - - eks pan 2.000000 - - 0.758680 - - 0.522151 - - wye wye 3.000000 - - 0.204603 - - 0.338319 - - eks wye 4.000000 - - 0.381399 - - 0.134189 - - wye pan 5.000000 - - 0.573289 - - 0.863624 - - zee pan 6.000000 - - 0.527126 - - 0.493221 - - eks zee 7.000000 - - 0.611784 - - 0.187885 - - zee wye 8.000000 - - 0.598554 - - 0.976181 - - hat wye 9.000000 - - 0.031442 - - 0.749551 - - pan wye 10.000000 - - 0.502626 - - 0.952618 - - mlr --oxtab stats1 -s -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a,b ./reg_test/input/abixy a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 i_mean 1.000000 i_sum 1 i_count 1 i_min 1 i_max 1 i_antimode 1 i_mode 1 x_mean 0.346790 x_sum 0.346790 x_count 1 x_min 0.346790 x_max 0.346790 x_antimode 0.3467901443380824 x_mode 0.3467901443380824 y_mean 0.726803 y_sum 0.726803 y_count 1 y_min 0.726803 y_max 0.726803 y_antimode 0.7268028627434533 y_mode 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 i_mean 2.000000 i_sum 2 i_count 1 i_min 2 i_max 2 i_antimode 2 i_mode 2 x_mean 0.758680 x_sum 0.758680 x_count 1 x_min 0.758680 x_max 0.758680 x_antimode 0.7586799647899636 x_mode 0.7586799647899636 y_mean 0.522151 y_sum 0.522151 y_count 1 y_min 0.522151 y_max 0.522151 y_antimode 0.5221511083334797 y_mode 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 i_mean 3.000000 i_sum 3 i_count 1 i_min 3 i_max 3 i_antimode 3 i_mode 3 x_mean 0.204603 x_sum 0.204603 x_count 1 x_min 0.204603 x_max 0.204603 x_antimode 0.20460330576630303 x_mode 0.20460330576630303 y_mean 0.338319 y_sum 0.338319 y_count 1 y_min 0.338319 y_max 0.338319 y_antimode 0.33831852551664776 y_mode 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 i_mean 4.000000 i_sum 4 i_count 1 i_min 4 i_max 4 i_antimode 4 i_mode 4 x_mean 0.381399 x_sum 0.381399 x_count 1 x_min 0.381399 x_max 0.381399 x_antimode 0.38139939387114097 x_mode 0.38139939387114097 y_mean 0.134189 y_sum 0.134189 y_count 1 y_min 0.134189 y_max 0.134189 y_antimode 0.13418874328430463 y_mode 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 i_mean 5.000000 i_sum 5 i_count 1 i_min 5 i_max 5 i_antimode 5 i_mode 5 x_mean 0.573289 x_sum 0.573289 x_count 1 x_min 0.573289 x_max 0.573289 x_antimode 0.5732889198020006 x_mode 0.5732889198020006 y_mean 0.863624 y_sum 0.863624 y_count 1 y_min 0.863624 y_max 0.863624 y_antimode 0.8636244699032729 y_mode 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 i_mean 6.000000 i_sum 6 i_count 1 i_min 6 i_max 6 i_antimode 6 i_mode 6 x_mean 0.527126 x_sum 0.527126 x_count 1 x_min 0.527126 x_max 0.527126 x_antimode 0.5271261600918548 x_mode 0.5271261600918548 y_mean 0.493221 y_sum 0.493221 y_count 1 y_min 0.493221 y_max 0.493221 y_antimode 0.49322128674835697 y_mode 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 i_mean 7.000000 i_sum 7 i_count 1 i_min 7 i_max 7 i_antimode 7 i_mode 7 x_mean 0.611784 x_sum 0.611784 x_count 1 x_min 0.611784 x_max 0.611784 x_antimode 0.6117840605678454 x_mode 0.6117840605678454 y_mean 0.187885 y_sum 0.187885 y_count 1 y_min 0.187885 y_max 0.187885 y_antimode 0.1878849191181694 y_mode 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 i_mean 8.000000 i_sum 8 i_count 1 i_min 8 i_max 8 i_antimode 8 i_mode 8 x_mean 0.598554 x_sum 0.598554 x_count 1 x_min 0.598554 x_max 0.598554 x_antimode 0.5985540091064224 x_mode 0.5985540091064224 y_mean 0.976181 y_sum 0.976181 y_count 1 y_min 0.976181 y_max 0.976181 y_antimode 0.976181385699006 y_mode 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 i_mean 9.000000 i_sum 9 i_count 1 i_min 9 i_max 9 i_antimode 9 i_mode 9 x_mean 0.031442 x_sum 0.031442 x_count 1 x_min 0.031442 x_max 0.031442 x_antimode 0.03144187646093577 x_mode 0.03144187646093577 y_mean 0.749551 y_sum 0.749551 y_count 1 y_min 0.749551 y_max 0.749551 y_antimode 0.7495507603507059 y_mode 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 i_mean 10.000000 i_sum 10 i_count 1 i_min 10 i_max 10 i_antimode 10 i_mode 10 x_mean 0.502626 x_sum 0.502626 x_count 1 x_min 0.502626 x_max 0.502626 x_antimode 0.5026260055412137 x_mode 0.5026260055412137 y_mean 0.952618 y_sum 0.952618 y_count 1 y_min 0.952618 y_max 0.952618 y_antimode 0.9526183602969864 y_mode 0.9526183602969864 mlr --oxtab stats1 -a min,p0,p50,p100,max -f x,y,z ./reg_test/input/string-numeric-ordering.dkvp x_min 1.000000 x_p0 1 x_p50 2.500000 x_p100 b x_max b y_min 1.000000 y_p0 1 y_p50 3 y_p100 4 y_max 4.000000 z_min a z_p0 a z_p50 d z_p100 f z_max f mlr --oxtab stats1 -a mean -f x ./reg_test/input/abixy-het x_mean 0.440334 mlr --oxtab stats1 -a mean -f x -g a ./reg_test/input/abixy-het a pan x_mean 0.424708 a eks x_mean 0.583954 a wye x_mean a zee x_mean 0.562840 mlr --oxtab stats1 -a p0,p50,p100 -f x,y ./reg_test/input/near-ovf.dkvp x_p0 9223372036854775801 x_p50 9223372036854775804 x_p100 9223372036854775807 y_p0 -9223372036854775807 y_p50 -9223372036854775804 y_p100 -9223372036854775801 mlr --oxtab stats1 -a p0,p50,p100 -f x,y -F ./reg_test/input/near-ovf.dkvp x_p0 9223372036854775801 x_p50 9223372036854775804 x_p100 9223372036854775807 y_p0 -9223372036854775807 y_p50 -9223372036854775804 y_p100 -9223372036854775801 mlr --opprint stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 ./reg_test/input/abixy-wide x_y_ols_m x_y_ols_b x_y_ols_n x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov 0.028351 0.487644 2000 1.332924 -0.170590 2000 0.056909 0.000791 0.028120 0.002330 0.893610 0.107060 2000 1.529534 -0.055477 2000 0.824336 0.447971 0.669306 0.045036 mlr --opprint stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 -g a,b ./reg_test/input/abixy-wide a b x_y_ols_m x_y_ols_b x_y_ols_n x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov cat pan 0.054420 0.481777 89 3.636062 -1.221602 89 0.177683 0.002504 0.050036 0.003777 0.950908 0.105754 89 1.715574 -0.081719 89 0.830612 0.435336 0.659800 0.041616 pan wye -0.145486 0.584799 78 -1.340927 1.199920 78 0.254025 0.019479 -0.139568 -0.012683 0.908151 0.126628 78 1.595150 -0.045034 78 0.824114 0.438850 0.662457 0.046203 wye cat 0.185913 0.377639 74 1.135325 -0.145894 74 0.309499 0.033002 0.181665 0.014494 0.969266 0.040602 74 1.406365 -0.081379 74 0.868480 0.561236 0.749157 0.052090 dog hat 0.100096 0.448757 88 0.810749 0.097346 88 0.189256 0.010462 0.102283 0.008036 0.919149 0.090504 88 1.425774 -0.038344 88 0.846209 0.507155 0.712148 0.045034 dog pan -0.066834 0.590647 87 -0.254112 0.688837 87 0.275316 0.005924 -0.076969 -0.005709 0.726118 0.164937 87 1.566309 -0.075073 87 0.749025 0.315011 0.561259 0.034107 pan pan 0.094932 0.461566 77 0.672369 0.189898 77 0.192719 0.009768 0.098832 0.007175 0.822261 0.123441 77 1.312543 0.003200 77 0.820351 0.465390 0.682195 0.039784 hat hat 0.043668 0.405219 88 10.170494 -5.125282 88 0.310513 0.001324 0.036392 0.003037 1.128896 0.015188 88 1.414166 -0.052514 88 0.922308 0.708725 0.841858 0.060975 wye hat 0.043018 0.496029 87 0.254879 0.395780 87 0.177794 0.002197 0.046876 0.004023 0.720402 0.165623 87 1.376136 0.002792 87 0.760716 0.353558 0.594608 0.038763 pan hat 0.120797 0.448197 67 1.597359 -0.325695 67 0.225137 0.013060 0.114278 0.008987 0.962678 0.076920 67 1.285796 -0.012566 67 0.887704 0.622353 0.788893 0.054965 cat hat 0.172391 0.464384 90 0.959329 0.086790 90 0.296109 0.030150 0.173639 0.015030 0.904257 0.133482 90 1.415658 -0.008369 90 0.841567 0.498171 0.705812 0.055626 hat wye -0.022975 0.496361 70 -1.765884 1.344268 70 0.051493 0.000514 -0.022665 -0.002000 0.971929 0.096088 70 1.989422 -0.142072 70 0.825656 0.386354 0.621574 0.040126 dog dog 0.078397 0.489236 87 0.354494 0.351041 87 0.242210 0.007619 0.087288 0.008214 0.776967 0.150999 87 1.354405 -0.006432 87 0.792265 0.408257 0.638950 0.049648 wye dog 0.116403 0.425576 76 2.367821 -0.777734 76 0.254607 0.011048 0.105109 0.007867 0.925781 0.071192 76 1.453590 -0.070509 76 0.845204 0.501559 0.708208 0.046440 wye wye -0.188354 0.613934 67 -1.433772 1.217887 67 0.316070 0.031156 -0.176512 -0.015876 0.876717 0.159179 67 2.044493 -0.118503 67 0.795455 0.325193 0.570257 0.042026 dog wye 0.029527 0.502643 79 0.496713 0.282511 79 0.073039 0.000913 0.030211 0.002391 0.904925 0.120816 79 1.609123 -0.052245 79 0.821822 0.432413 0.657581 0.042857 cat dog 0.057573 0.408644 78 0.728479 0.071114 78 0.116103 0.003442 0.058671 0.005320 0.884325 0.079999 78 1.418207 -0.040344 78 0.832998 0.479596 0.692528 0.044762 hat pan -0.154393 0.564981 85 -0.845852 0.911026 85 0.276955 0.025143 -0.158566 -0.012756 0.911165 0.104362 85 1.763740 -0.092987 85 0.814584 0.397150 0.630199 0.035622 cat wye -0.014851 0.564875 77 -0.572708 0.892322 77 0.034146 0.000224 -0.014982 -0.000966 0.878820 0.086362 77 1.447244 -0.098657 77 0.827119 0.463961 0.681147 0.041096 hat cat -0.022859 0.498539 88 -0.156242 0.565723 88 0.149344 0.000610 -0.024689 -0.002116 0.840965 0.111121 88 1.663518 -0.088942 88 0.793883 0.373515 0.611158 0.036575 dog cat 0.104057 0.428559 83 2.712382 -1.005787 83 0.250036 0.008705 0.093300 0.007122 1.080443 0.023866 83 1.653922 -0.133367 83 0.875586 0.547103 0.739664 0.050357 hat dog 0.041849 0.427228 78 0.403977 0.254919 78 0.118494 0.001918 0.043789 0.003856 0.776135 0.114930 78 1.475403 -0.036508 78 0.779056 0.372058 0.609966 0.040583 pan dog 0.119510 0.467833 73 2.492496 -0.761490 73 0.266455 0.011427 0.106896 0.009302 0.948592 0.107556 73 1.408389 -0.022846 73 0.860243 0.541263 0.735706 0.056609 cat cat 0.016257 0.425410 79 0.432946 0.225535 79 0.044275 0.000273 0.016510 0.001350 0.930954 0.072476 79 1.624993 -0.072669 79 0.830029 0.446764 0.668404 0.036267 pan cat -0.188523 0.616919 89 -0.898665 0.953923 89 0.324264 0.037036 -0.192447 -0.016206 0.781770 0.176617 89 2.020454 -0.113587 89 0.762332 0.278739 0.527958 0.032984 wye pan 0.229443 0.444446 66 1.313689 -0.098124 66 0.365811 0.046722 0.216152 0.020367 0.887659 0.145052 66 1.471906 -0.030176 66 0.827911 0.462545 0.680107 0.064496 mlr --oxtab stats2 -s -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 ./reg_test/input/abixy-wide-short a cat b pan i 1 x 0.5117389009583777 y 0.08295224980036853 x2 0.2618767027540883 xy 0.0424498931448654 y2 0.006881075746942741 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a pan b wye i 2 x 0.5225940442098578 y 0.511678736087022 x2 0.27310453504361476 xy 0.2674002600279053 y2 0.26181512896361225 x_y_ols_m 39.495240 x_y_ols_b -20.128298 x_y_ols_n 2 x_y_pca_m 39.495240 x_y_pca_b -20.128298 x_y_pca_n 2 x_y_pca_quality 1.000000 x_y_r2 1.000000 x_y_corr 1.000000 x_y_cov 0.002327 xy_y2_ols_m 1.133290 xy_y2_ols_b -0.041227 xy_y2_ols_n 2 xy_y2_pca_m 1.133290 xy_y2_pca_b -0.041227 xy_y2_pca_n 2 xy_y2_pca_quality 1.000000 xy_y2_r2 1.000000 xy_y2_corr 1.000000 xy_y2_cov 0.028674 a wye b cat i 3 x 0.8150401717873625 y 0.07989551500795256 x2 0.6642904816271734 xy 0.06511805427712146 y2 0.006383293318385972 x_y_ols_m -0.689881 x_y_ols_b 0.650125 x_y_ols_n 3 x_y_pca_m -2.057762 x_y_pca_b 1.493365 x_y_pca_n 3 x_y_pca_quality 0.725269 x_y_r2 0.228338 x_y_corr -0.477847 x_y_cov -0.020424 xy_y2_ols_m 1.184397 xy_y2_ols_b -0.056344 xy_y2_ols_n 3 xy_y2_pca_m 1.190469 xy_y2_pca_b -0.057103 xy_y2_pca_n 3 xy_y2_pca_quality 0.997884 xy_y2_r2 0.991315 xy_y2_corr 0.995648 xy_y2_cov 0.018168 a dog b hat i 4 x 0.4488733555675044 y 0.5730530513123552 x2 0.20148728933843124 xy 0.25722824606077416 y2 0.32838979961840076 x_y_ols_m -1.054065 x_y_ols_b 0.917520 x_y_ols_n 4 x_y_pca_m -2.068130 x_y_pca_b 1.500163 x_y_pca_n 4 x_y_pca_quality 0.845806 x_y_r2 0.416082 x_y_corr -0.645044 x_y_cov -0.028205 xy_y2_ols_m 1.365739 xy_y2_ols_b -0.064987 xy_y2_ols_n 4 xy_y2_pca_m 1.406929 xy_y2_pca_b -0.071497 xy_y2_pca_n 4 xy_y2_pca_quality 0.989979 xy_y2_r2 0.956155 xy_y2_corr 0.977832 xy_y2_cov 0.019937 a dog b pan i 5 x 0.2946557960430134 y 0.6850437256584863 x2 0.08682203814174191 xy 0.20185210430817294 y2 0.46928490606405937 x_y_ols_m -1.176419 x_y_ols_b 0.996592 x_y_ols_n 5 x_y_pca_m -1.681618 x_y_pca_b 1.258579 x_y_pca_n 5 x_y_pca_quality 0.899128 x_y_r2 0.607344 x_y_corr -0.779323 x_y_cov -0.042043 xy_y2_ols_m 1.565652 xy_y2_ols_b -0.046615 xy_y2_ols_n 5 xy_y2_pca_m 2.169036 xy_y2_pca_b -0.147265 xy_y2_pca_n 5 xy_y2_pca_quality 0.936719 xy_y2_r2 0.667168 xy_y2_corr 0.816804 xy_y2_cov 0.017742 a wye b cat i 6 x 0.048709182664292916 y 0.5851879044762575 x2 0.0023725844758234536 xy 0.02850402453206882 y2 0.34244488354531344 x_y_ols_m -0.752322 x_y_ols_b 0.750859 x_y_ols_n 6 x_y_pca_m -1.066519 x_y_pca_b 0.889190 x_y_pca_n 6 x_y_pca_quality 0.836548 x_y_r2 0.515958 x_y_corr -0.718302 x_y_cov -0.049192 xy_y2_ols_m 0.917730 xy_y2_ols_b 0.103935 xy_y2_ols_n 6 xy_y2_pca_m 2.512667 xy_y2_pca_b -0.125351 xy_y2_pca_n 6 xy_y2_pca_quality 0.807995 xy_y2_r2 0.286403 xy_y2_corr 0.535166 xy_y2_cov 0.011246 a dog b hat i 7 x 0.8500003149528544 y 0.2984098741712895 x2 0.7225005354199517 xy 0.25364848703063775 y2 0.08904845300292483 x_y_ols_m -0.612818 x_y_ols_b 0.707992 x_y_ols_n 7 x_y_pca_m -0.842190 x_y_pca_b 0.822403 x_y_pca_n 7 x_y_pca_quality 0.820362 x_y_r2 0.476303 x_y_corr -0.690147 x_y_cov -0.048089 xy_y2_ols_m 0.592008 xy_y2_ols_b 0.120493 xy_y2_ols_n 7 xy_y2_pca_m 3.299160 xy_y2_pca_b -0.311183 xy_y2_pca_n 7 xy_y2_pca_quality 0.722139 xy_y2_r2 0.126356 xy_y2_corr 0.355466 xy_y2_cov 0.007067 a pan b pan i 8 x 0.616507208914765 y 0.25924335982487057 x2 0.38008113864387366 xy 0.15982540019531707 y2 0.06720711961328732 x_y_ols_m -0.627947 x_y_ols_b 0.706893 x_y_ols_n 8 x_y_pca_m -0.857225 x_y_pca_b 0.824631 x_y_pca_n 8 x_y_pca_quality 0.826128 x_y_r2 0.489375 x_y_corr -0.699554 x_y_cov -0.043324 xy_y2_ols_m 0.591342 xy_y2_ols_b 0.102111 xy_y2_ols_n 8 xy_y2_pca_m 3.718931 xy_y2_pca_b -0.396750 xy_y2_pca_n 8 xy_y2_pca_quality 0.737121 xy_y2_r2 0.115022 xy_y2_corr 0.339150 xy_y2_cov 0.006050 a hat b hat i 9 x 0.33786884067769307 y 0.6036735617015514 x2 0.11415535350088835 xy 0.203962486439877 y2 0.3644217690974368 x_y_ols_m -0.661274 x_y_ols_b 0.735462 x_y_ols_n 9 x_y_pca_m -0.890432 x_y_pca_b 0.848665 x_y_pca_n 9 x_y_pca_quality 0.838021 x_y_r2 0.516776 x_y_corr -0.718871 x_y_cov -0.042188 xy_y2_ols_m 0.667659 xy_y2_ols_b 0.105305 xy_y2_ols_n 9 xy_y2_pca_m 3.726998 xy_y2_pca_b -0.397782 xy_y2_pca_n 9 xy_y2_pca_quality 0.764687 xy_y2_r2 0.134705 xy_y2_corr 0.367022 xy_y2_cov 0.006124 a wye b hat i 10 x 0.3834648944206174 y 0.4999709279216641 x2 0.14704532525301522 xy 0.19172129908885902 y2 0.24997092876684981 x_y_ols_m -0.664725 x_y_ols_b 0.738937 x_y_ols_n 10 x_y_pca_m -0.888643 x_y_pca_b 0.847077 x_y_pca_n 10 x_y_pca_quality 0.841594 x_y_r2 0.524349 x_y_corr -0.724120 x_y_cov -0.038508 xy_y2_ols_m 0.673183 xy_y2_ols_b 0.106048 xy_y2_ols_n 10 xy_y2_pca_m 3.679574 xy_y2_pca_b -0.396534 xy_y2_pca_n 10 xy_y2_pca_quality 0.765015 xy_y2_r2 0.137573 xy_y2_corr 0.370908 xy_y2_cov 0.005539 a pan b hat i 11 x 0.025474999754416028 y 0.7861954915044592 x2 0.0006489756124874967 xy 0.020028329952999087 y2 0.6181033508619382 x_y_ols_m -0.702240 x_y_ols_b 0.761330 x_y_ols_n 11 x_y_pca_m -0.861995 x_y_pca_b 0.831839 x_y_pca_n 11 x_y_pca_quality 0.884552 x_y_r2 0.623708 x_y_corr -0.789752 x_y_cov -0.049973 xy_y2_ols_m -0.038359 xy_y2_ols_b 0.260804 xy_y2_ols_n 11 xy_y2_pca_m -82.143959 xy_y2_pca_b 12.888187 xy_y2_pca_n 11 xy_y2_pca_quality 0.759203 xy_y2_r2 0.000355 xy_y2_corr -0.018828 xy_y2_cov -0.000360 a cat b hat i 12 x 0.6335445699880142 y 0.15467178563525052 x2 0.4013787221612979 xy 0.0979914699195631 y2 0.02392336127159689 x_y_ols_m -0.740466 x_y_ols_b 0.765334 x_y_ols_n 12 x_y_pca_m -0.911766 x_y_pca_b 0.843681 x_y_pca_n 12 x_y_pca_quality 0.887843 x_y_r2 0.635324 x_y_corr -0.797072 x_y_cov -0.050182 xy_y2_ols_m 0.085108 xy_y2_ols_b 0.222963 xy_y2_ols_n 12 xy_y2_pca_m 41.549828 xy_y2_pca_b -5.961259 xy_y2_pca_n 12 xy_y2_pca_quality 0.780003 xy_y2_r2 0.001597 xy_y2_corr 0.039969 xy_y2_cov 0.000747 a hat b wye i 13 x 0.35922068401384877 y 0.8502678133887914 x2 0.1290394998233774 xy 0.30543378552048117 y2 0.7229553544849566 x_y_ols_m -0.782612 x_y_ols_b 0.811286 x_y_ols_n 13 x_y_pca_m -1.047326 x_y_pca_b 0.930360 x_y_pca_n 13 x_y_pca_quality 0.861099 x_y_r2 0.571131 x_y_corr -0.755732 x_y_cov -0.049199 xy_y2_ols_m 0.659118 xy_y2_ols_b 0.166913 xy_y2_ols_n 13 xy_y2_pca_m 6.994463 xy_y2_pca_b -0.854132 xy_y2_pca_n 13 xy_y2_pca_quality 0.838549 xy_y2_r2 0.078760 xy_y2_corr 0.280642 xy_y2_cov 0.006543 a dog b dog i 14 x 0.5440047442770544 y 0.933608851612059 x2 0.2959411617959433 xy 0.5078876445760125 y2 0.8716254878083876 x_y_ols_m -0.719761 x_y_ols_b 0.821739 x_y_ols_n 14 x_y_pca_m -1.259269 x_y_pca_b 1.068052 x_y_pca_n 14 x_y_pca_quality 0.775265 x_y_r2 0.388115 x_y_corr -0.622988 x_y_cov -0.042223 xy_y2_ols_m 1.175278 xy_y2_ols_b 0.097368 xy_y2_ols_n 14 xy_y2_pca_m 3.119062 xy_y2_pca_b -0.264044 xy_y2_pca_n 14 xy_y2_pca_quality 0.866432 xy_y2_r2 0.322054 xy_y2_corr 0.567498 xy_y2_cov 0.020862 a wye b dog i 15 x 0.4689175303764642 y 0.09048353045392021 x2 0.21988365029436224 xy 0.04242931364019586 y2 0.008187269283405506 x_y_ols_m -0.725720 x_y_ols_b 0.798215 x_y_ols_n 15 x_y_pca_m -1.432456 x_y_pca_b 1.121457 x_y_pca_n 15 x_y_pca_quality 0.758098 x_y_r2 0.343569 x_y_corr -0.586148 x_y_cov -0.039539 xy_y2_ols_m 1.249777 xy_y2_ols_b 0.074959 xy_y2_ols_n 15 xy_y2_pca_m 2.985574 xy_y2_pca_b -0.231176 xy_y2_pca_n 15 xy_y2_pca_quality 0.877117 xy_y2_r2 0.362173 xy_y2_corr 0.601808 xy_y2_cov 0.022316 a pan b pan i 16 x 0.3959177828066379 y 0.6339858483805666 x2 0.15675089074252413 xy 0.25100627142161924 y2 0.4019380559468268 x_y_ols_m -0.734975 x_y_ols_b 0.810106 x_y_ols_n 16 x_y_pca_m -1.451312 x_y_pca_b 1.134988 x_y_pca_n 16 x_y_pca_quality 0.761173 x_y_r2 0.346218 x_y_corr -0.588403 x_y_cov -0.037547 xy_y2_ols_m 1.253418 xy_y2_ols_b 0.075130 xy_y2_ols_n 16 xy_y2_pca_m 2.945315 xy_y2_pca_b -0.231155 xy_y2_pca_n 16 xy_y2_pca_quality 0.877563 xy_y2_r2 0.368261 xy_y2_corr 0.606845 xy_y2_cov 0.021325 a dog b hat i 17 x 0.34033844788864975 y 0.8845934733681523 x2 0.11583025911125516 xy 0.3010611697385466 y2 0.782505613125532 x_y_ols_m -0.779408 x_y_ols_b 0.849058 x_y_ols_n 17 x_y_pca_m -1.579107 x_y_pca_b 1.206423 x_y_pca_n 17 x_y_pca_quality 0.772982 x_y_r2 0.349689 x_y_corr -0.591345 x_y_cov -0.037916 xy_y2_ols_m 1.392136 xy_y2_ols_b 0.068451 xy_y2_ols_n 17 xy_y2_pca_m 3.095298 xy_y2_pca_b -0.251899 xy_y2_pca_n 17 xy_y2_pca_quality 0.896358 xy_y2_r2 0.398830 xy_y2_corr 0.631530 xy_y2_cov 0.023385 a wye b wye i 18 x 0.6770613653962891 y 0.896307226056897 x2 0.4584120925122874 xy 0.6068549942886431 y2 0.8033666434818095 x_y_ols_m -0.628521 x_y_ols_b 0.811643 x_y_ols_n 18 x_y_pca_m -1.834767 x_y_pca_b 1.366109 x_y_pca_n 18 x_y_pca_quality 0.694668 x_y_r2 0.218178 x_y_corr -0.467095 x_y_cov -0.030628 xy_y2_ols_m 1.292066 xy_y2_ols_b 0.083495 xy_y2_ols_n 18 xy_y2_pca_m 2.354328 xy_y2_pca_b -0.141020 xy_y2_pca_n 18 xy_y2_pca_quality 0.888372 xy_y2_r2 0.477918 xy_y2_corr 0.691316 xy_y2_cov 0.033015 a dog b wye i 19 x 0.4865373244199632 y 0.44117766146315884 x2 0.23671856805373653 xy 0.2146493990021416 y2 0.1946377289741016 x_y_ols_m -0.630507 x_y_ols_b 0.809155 x_y_ols_n 19 x_y_pca_m -1.839104 x_y_pca_b 1.366411 x_y_pca_n 19 x_y_pca_quality 0.695696 x_y_r2 0.218821 x_y_corr -0.467783 x_y_cov -0.029041 xy_y2_ols_m 1.290872 xy_y2_ols_b 0.075000 xy_y2_ols_n 19 xy_y2_pca_m 2.393419 xy_y2_pca_b -0.158220 xy_y2_pca_n 19 xy_y2_pca_quality 0.887359 xy_y2_r2 0.469361 xy_y2_corr 0.685099 xy_y2_cov 0.031153 a dog b dog i 20 x 0.3223311725542929 y 0.08115611029827985 x2 0.10389738480022534 xy 0.026159144192390068 y2 0.006586314238746564 x_y_ols_m -0.548880 x_y_ols_b 0.745846 x_y_ols_n 20 x_y_pca_m -2.251324 x_y_pca_b 1.518994 x_y_pca_n 20 x_y_pca_quality 0.661764 x_y_r2 0.151247 x_y_corr -0.388905 x_y_cov -0.024479 xy_y2_ols_m 1.329401 xy_y2_ols_b 0.062098 xy_y2_ols_n 20 xy_y2_pca_m 2.337844 xy_y2_pca_b -0.141870 xy_y2_pca_n 20 xy_y2_pca_quality 0.894994 xy_y2_r2 0.499340 xy_y2_corr 0.706640 xy_y2_cov 0.032678 mlr --oxtab stats2 -s -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 -g a,b ./reg_test/input/abixy-wide-short a cat b pan i 1 x 0.5117389009583777 y 0.08295224980036853 x2 0.2618767027540883 xy 0.0424498931448654 y2 0.006881075746942741 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a pan b wye i 2 x 0.5225940442098578 y 0.511678736087022 x2 0.27310453504361476 xy 0.2674002600279053 y2 0.26181512896361225 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a wye b cat i 3 x 0.8150401717873625 y 0.07989551500795256 x2 0.6642904816271734 xy 0.06511805427712146 y2 0.006383293318385972 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a dog b hat i 4 x 0.4488733555675044 y 0.5730530513123552 x2 0.20148728933843124 xy 0.25722824606077416 y2 0.32838979961840076 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a dog b pan i 5 x 0.2946557960430134 y 0.6850437256584863 x2 0.08682203814174191 xy 0.20185210430817294 y2 0.46928490606405937 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a wye b cat i 6 x 0.048709182664292916 y 0.5851879044762575 x2 0.0023725844758234536 xy 0.02850402453206882 y2 0.34244488354531344 x_y_ols_m -0.659366 x_y_ols_b 0.617305 x_y_ols_n 2 x_y_pca_m -0.659366 x_y_pca_b 0.617305 x_y_pca_n 2 x_y_pca_quality 1.000000 x_y_r2 1.000000 x_y_corr -1.000000 x_y_cov -0.193611 xy_y2_ols_m -9.178492 xy_y2_ols_b 0.604069 xy_y2_ols_n 2 xy_y2_pca_m -9.178492 xy_y2_pca_b 0.604069 xy_y2_pca_n 2 xy_y2_pca_quality 1.000000 xy_y2_r2 1.000000 xy_y2_corr -1.000000 xy_y2_cov -0.006152 a dog b hat i 7 x 0.8500003149528544 y 0.2984098741712895 x2 0.7225005354199517 xy 0.25364848703063775 y2 0.08904845300292483 x_y_ols_m -0.684679 x_y_ols_b 0.880387 x_y_ols_n 2 x_y_pca_m -0.684679 x_y_pca_b 0.880387 x_y_pca_n 2 x_y_pca_quality 1.000000 x_y_r2 1.000000 x_y_corr -1.000000 x_y_cov -0.055083 xy_y2_ols_m 66.859625 xy_y2_ols_b -16.869794 xy_y2_ols_n 2 xy_y2_pca_m 66.859625 xy_y2_pca_b -16.869794 xy_y2_pca_n 2 xy_y2_pca_quality 1.000000 xy_y2_r2 1.000000 xy_y2_corr 1.000000 xy_y2_cov 0.000428 a pan b pan i 8 x 0.616507208914765 y 0.25924335982487057 x2 0.38008113864387366 xy 0.15982540019531707 y2 0.06720711961328732 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a hat b hat i 9 x 0.33786884067769307 y 0.6036735617015514 x2 0.11415535350088835 xy 0.203962486439877 y2 0.3644217690974368 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a wye b hat i 10 x 0.3834648944206174 y 0.4999709279216641 x2 0.14704532525301522 xy 0.19172129908885902 y2 0.24997092876684981 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a pan b hat i 11 x 0.025474999754416028 y 0.7861954915044592 x2 0.0006489756124874967 xy 0.020028329952999087 y2 0.6181033508619382 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a cat b hat i 12 x 0.6335445699880142 y 0.15467178563525052 x2 0.4013787221612979 xy 0.0979914699195631 y2 0.02392336127159689 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a hat b wye i 13 x 0.35922068401384877 y 0.8502678133887914 x2 0.1290394998233774 xy 0.30543378552048117 y2 0.7229553544849566 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a dog b dog i 14 x 0.5440047442770544 y 0.933608851612059 x2 0.2959411617959433 xy 0.5078876445760125 y2 0.8716254878083876 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a wye b dog i 15 x 0.4689175303764642 y 0.09048353045392021 x2 0.21988365029436224 xy 0.04242931364019586 y2 0.008187269283405506 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a pan b pan i 16 x 0.3959177828066379 y 0.6339858483805666 x2 0.15675089074252413 xy 0.25100627142161924 y2 0.4019380559468268 x_y_ols_m -1.698823 x_y_ols_b 1.306580 x_y_ols_n 2 x_y_pca_m -1.698823 x_y_pca_b 1.306580 x_y_pca_n 2 x_y_pca_quality 1.000000 x_y_r2 1.000000 x_y_corr -1.000000 x_y_cov -0.041332 xy_y2_ols_m 3.671065 xy_y2_ols_b -0.519522 xy_y2_ols_n 2 xy_y2_pca_m 3.671065 xy_y2_pca_b -0.519522 xy_y2_pca_n 2 xy_y2_pca_quality 1.000000 xy_y2_r2 1.000000 xy_y2_corr 1.000000 xy_y2_cov 0.015261 a dog b hat i 17 x 0.34033844788864975 y 0.8845934733681523 x2 0.11583025911125516 xy 0.3010611697385466 y2 0.782505613125532 x_y_ols_m -1.023812 x_y_ols_b 1.144767 x_y_ols_n 3 x_y_pca_m -1.098934 x_y_pca_b 1.185814 x_y_pca_n 3 x_y_pca_quality 0.967833 x_y_r2 0.878279 x_y_corr -0.937166 x_y_cov -0.073789 xy_y2_ols_m 12.826246 xy_y2_ols_b -3.071390 xy_y2_ols_n 3 xy_y2_pca_m 13.871436 xy_y2_pca_b -3.354267 xy_y2_pca_n 3 xy_y2_pca_quality 0.999579 xy_y2_r2 0.924260 xy_y2_corr 0.961385 xy_y2_cov 0.008940 a wye b wye i 18 x 0.6770613653962891 y 0.896307226056897 x2 0.4584120925122874 xy 0.6068549942886431 y2 0.8033666434818095 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a dog b wye i 19 x 0.4865373244199632 y 0.44117766146315884 x2 0.23671856805373653 xy 0.2146493990021416 y2 0.1946377289741016 x_y_ols_m x_y_ols_b x_y_ols_n 1 x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n 1 xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov a dog b dog i 20 x 0.3223311725542929 y 0.08115611029827985 x2 0.10389738480022534 xy 0.026159144192390068 y2 0.006586314238746564 x_y_ols_m 3.845532 x_y_ols_b -1.158379 x_y_ols_n 2 x_y_pca_m 3.845532 x_y_pca_b -1.158379 x_y_pca_n 2 x_y_pca_quality 1.000000 x_y_r2 1.000000 x_y_corr 1.000000 x_y_cov 0.094483 xy_y2_ols_m 1.795699 xy_y2_ols_b -0.040388 xy_y2_ols_n 2 xy_y2_pca_m 1.795699 xy_y2_pca_b -0.040388 xy_y2_pca_n 2 xy_y2_pca_quality 1.000000 xy_y2_r2 1.000000 xy_y2_corr 1.000000 xy_y2_cov 0.208357 mlr --opprint stats2 --fit -a linreg-ols,linreg-pca -f x,y,xy,y2 ./reg_test/input/abixy-wide-short a b i x y x2 xy y2 x_y_ols_fit x_y_pca_fit xy_y2_ols_fit xy_y2_pca_fit cat pan 1 0.5117389009583777 0.08295224980036853 0.2618767027540883 0.0424498931448654 0.006881075746942741 0.464963 0.366904 0.118531 -0.042629 pan wye 2 0.5225940442098578 0.511678736087022 0.27310453504361476 0.2674002600279053 0.26181512896361225 0.459005 0.342466 0.417581 0.483270 wye cat 3 0.8150401717873625 0.07989551500795256 0.6642904816271734 0.06511805427712146 0.006383293318385972 0.298487 -0.315925 0.148666 0.010366 dog hat 4 0.4488733555675044 0.5730530513123552 0.20148728933843124 0.25722824606077416 0.32838979961840076 0.499469 0.508435 0.404058 0.459490 dog pan 5 0.2946557960430134 0.6850437256584863 0.08682203814174191 0.20185210430817294 0.46928490606405937 0.584116 0.855629 0.330441 0.330029 wye cat 6 0.048709182664292916 0.5851879044762575 0.0023725844758234536 0.02850402453206882 0.34244488354531344 0.719111 1.409334 0.099992 -0.075232 dog hat 7 0.8500003149528544 0.2984098741712895 0.7225005354199517 0.25364848703063775 0.08904845300292483 0.279298 -0.394632 0.399299 0.451121 pan pan 8 0.616507208914765 0.25924335982487057 0.38008113864387366 0.15982540019531707 0.06720711961328732 0.407458 0.131037 0.274570 0.231777 hat hat 9 0.33786884067769307 0.6036735617015514 0.11415535350088835 0.203962486439877 0.3644217690974368 0.560397 0.758342 0.333246 0.334963 wye hat 10 0.3834648944206174 0.4999709279216641 0.14704532525301522 0.19172129908885902 0.24997092876684981 0.535370 0.655691 0.316973 0.306345 pan hat 11 0.025474999754416028 0.7861954915044592 0.0006489756124874967 0.020028329952999087 0.6181033508619382 0.731863 1.461642 0.088724 -0.095047 cat hat 12 0.6335445699880142 0.15467178563525052 0.4013787221612979 0.0979914699195631 0.02392336127159689 0.398106 0.092680 0.192368 0.087219 hat wye 13 0.35922068401384877 0.8502678133887914 0.1290394998233774 0.30543378552048117 0.7229553544849566 0.548677 0.710272 0.468142 0.572187 dog dog 14 0.5440047442770544 0.933608851612059 0.2959411617959433 0.5078876445760125 0.8716254878083876 0.447253 0.294263 0.737285 1.045492 wye dog 15 0.4689175303764642 0.09048353045392021 0.21988365029436224 0.04242931364019586 0.008187269283405506 0.488467 0.463309 0.118504 -0.042677 pan pan 16 0.3959177828066379 0.6339858483805666 0.15675089074252413 0.25100627142161924 0.4019380559468268 0.528535 0.627655 0.395786 0.444944 dog hat 17 0.34033844788864975 0.8845934733681523 0.11583025911125516 0.3010611697385466 0.782505613125532 0.559041 0.752782 0.462329 0.561964 wye wye 18 0.6770613653962891 0.896307226056897 0.4584120925122874 0.6068549942886431 0.8033666434818095 0.374221 -0.005290 0.868852 1.276863 dog wye 19 0.4865373244199632 0.44117766146315884 0.23671856805373653 0.2146493990021416 0.1946377289741016 0.478796 0.423641 0.347454 0.359947 dog dog 20 0.3223311725542929 0.08115611029827985 0.10389738480022534 0.026159144192390068 0.006586314238746564 0.568925 0.793322 0.096874 -0.080714 mlr --opprint stats2 --fit -a linreg-ols,linreg-pca -f x,y,xy,y2 -g a ./reg_test/input/abixy-wide-short a b i x y x2 xy y2 x_y_ols_fit x_y_pca_fit xy_y2_ols_fit xy_y2_pca_fit cat pan 1 0.5117389009583777 0.08295224980036853 0.2618767027540883 0.0424498931448654 0.006881075746942741 0.082952 0.082952 0.006881 0.006881 cat hat 12 0.6335445699880142 0.15467178563525052 0.4013787221612979 0.0979914699195631 0.02392336127159689 0.154672 0.154672 0.023923 0.023923 pan wye 2 0.5225940442098578 0.511678736087022 0.27310453504361476 0.2674002600279053 0.26181512896361225 0.445016 0.435835 0.237402 0.033364 pan pan 8 0.616507208914765 0.25924335982487057 0.38008113864387366 0.15982540019531707 0.06720711961328732 0.372165 0.356477 0.353122 0.385517 pan hat 11 0.025474999754416028 0.7861954915044592 0.0006489756124874967 0.020028329952999087 0.6181033508619382 0.830642 0.855912 0.503503 0.843152 pan pan 16 0.3959177828066379 0.6339858483805666 0.15675089074252413 0.25100627142161924 0.4019380559468268 0.543281 0.542880 0.255037 0.087031 wye cat 3 0.8150401717873625 0.07989551500795256 0.6642904816271734 0.06511805427712146 0.006383293318385972 0.337827 -0.227660 0.137066 0.112494 wye cat 6 0.048709182664292916 0.5851879044762575 0.0023725844758234536 0.02850402453206882 0.34244488354531344 0.548640 1.271347 0.093480 0.061521 wye hat 10 0.3834648944206174 0.4999709279216641 0.14704532525301522 0.19172129908885902 0.24997092876684981 0.456551 0.616537 0.287780 0.288747 wye dog 15 0.4689175303764642 0.09048353045392021 0.21988365029436224 0.04242931364019586 0.008187269283405506 0.433043 0.449384 0.110057 0.080907 wye wye 18 0.6770613653962891 0.896307226056897 0.4584120925122874 0.6068549942886431 0.8033666434818095 0.375784 0.042238 0.781971 0.866684 dog hat 4 0.4488733555675044 0.5730530513123552 0.20148728933843124 0.25722824606077416 0.32838979961840076 0.563043 0.668750 0.401991 0.406622 dog pan 5 0.2946557960430134 0.6850437256584863 0.08682203814174191 0.20185210430817294 0.46928490606405937 0.610235 1.504956 0.297579 0.255112 dog hat 7 0.8500003149528544 0.2984098741712895 0.7225005354199517 0.25364848703063775 0.08904845300292483 0.440294 -1.506261 0.395241 0.396827 dog dog 14 0.5440047442770544 0.933608851612059 0.2959411617959433 0.5078876445760125 0.8716254878083876 0.533932 0.152924 0.874610 1.092430 dog hat 17 0.34033844788864975 0.8845934733681523 0.11583025911125516 0.3010611697385466 0.782505613125532 0.596256 1.257254 0.484638 0.526549 dog wye 19 0.4865373244199632 0.44117766146315884 0.23671856805373653 0.2146493990021416 0.1946377289741016 0.551517 0.464527 0.321709 0.290125 dog dog 20 0.3223311725542929 0.08115611029827985 0.10389738480022534 0.026159144192390068 0.006586314238746564 0.601766 1.354893 -0.033690 -0.225587 hat hat 9 0.33786884067769307 0.6036735617015514 0.11415535350088835 0.203962486439877 0.3644217690974368 0.603674 0.603674 0.364422 0.364422 hat wye 13 0.35922068401384877 0.8502678133887914 0.1290394998233774 0.30543378552048117 0.7229553544849566 0.850268 0.850268 0.722955 0.722955 mlr --opprint stats2 -a logireg -f x,y ./reg_test/input/logi.dkvp x_y_logistic_m x_y_logistic_b x_y_logistic_n 0.145457 0.145449 22 mlr --opprint stats2 -a logireg -f x,y -g g ./reg_test/input/logi.dkvp g x_y_logistic_m x_y_logistic_b x_y_logistic_n red 0.145458 -0.036371 11 blue 0.145457 0.327269 11 mlr --oxtab stats2 -a cov -f x,y ./reg_test/input/abixy-het x_y_cov -0.011481 mlr --oxtab stats2 -a cov -f x,y -g a ./reg_test/input/abixy-het a pan x_y_cov 0.017595 a eks x_y_cov 0.034641 a wye a zee x_y_cov mlr --opprint step -a rsum,shift,delta,counter -f x,y ./reg_test/input/abixy a b i x y x_rsum x_shift x_delta x_counter y_rsum y_shift y_delta y_counter pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - 0 1 0.726803 - 0 1 eks pan 2 0.7586799647899636 0.5221511083334797 1.105470 0.3467901443380824 0.411890 2 1.248954 0.7268028627434533 -0.204652 2 wye wye 3 0.20460330576630303 0.33831852551664776 1.310073 0.7586799647899636 -0.554077 3 1.587272 0.5221511083334797 -0.183833 3 eks wye 4 0.38139939387114097 0.13418874328430463 1.691473 0.20460330576630303 0.176796 4 1.721461 0.33831852551664776 -0.204130 4 wye pan 5 0.5732889198020006 0.8636244699032729 2.264762 0.38139939387114097 0.191890 5 2.585086 0.13418874328430463 0.729436 5 zee pan 6 0.5271261600918548 0.49322128674835697 2.791888 0.5732889198020006 -0.046163 6 3.078307 0.8636244699032729 -0.370403 6 eks zee 7 0.6117840605678454 0.1878849191181694 3.403672 0.5271261600918548 0.084658 7 3.266192 0.49322128674835697 -0.305336 7 zee wye 8 0.5985540091064224 0.976181385699006 4.002226 0.6117840605678454 -0.013230 8 4.242373 0.1878849191181694 0.788296 8 hat wye 9 0.03144187646093577 0.7495507603507059 4.033668 0.5985540091064224 -0.567112 9 4.991924 0.976181385699006 -0.226631 9 pan wye 10 0.5026260055412137 0.9526183602969864 4.536294 0.03144187646093577 0.471184 10 5.944542 0.7495507603507059 0.203068 10 mlr --opprint step -a rsum,shift,delta,counter -f x,y -g a ./reg_test/input/abixy a b i x y x_rsum x_shift x_delta x_counter y_rsum y_shift y_delta y_counter pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - 0 1 0.726803 - 0 1 eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 - 0 1 0.522151 - 0 1 wye wye 3 0.20460330576630303 0.33831852551664776 0.204603 - 0 1 0.338319 - 0 1 eks wye 4 0.38139939387114097 0.13418874328430463 1.140079 0.7586799647899636 -0.377281 2 0.656340 0.5221511083334797 -0.387962 2 wye pan 5 0.5732889198020006 0.8636244699032729 0.777892 0.20460330576630303 0.368686 2 1.201943 0.33831852551664776 0.525306 2 zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 - 0 1 0.493221 - 0 1 eks zee 7 0.6117840605678454 0.1878849191181694 1.751863 0.38139939387114097 0.230385 3 0.844225 0.13418874328430463 0.053696 3 zee wye 8 0.5985540091064224 0.976181385699006 1.125680 0.5271261600918548 0.071428 2 1.469403 0.49322128674835697 0.482960 2 hat wye 9 0.03144187646093577 0.7495507603507059 0.031442 - 0 1 0.749551 - 0 1 pan wye 10 0.5026260055412137 0.9526183602969864 0.849416 0.3467901443380824 0.155836 2 1.679421 0.7268028627434533 0.225815 2 mlr --opprint step -a ewma -d 0.1,0.9 -f x,y -g a ./reg_test/input/abixy a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 wye wye 3 0.20460330576630303 0.33831852551664776 0.204603 0.204603 0.338319 0.338319 eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 wye pan 5 0.5732889198020006 0.8636244699032729 0.241472 0.536420 0.390849 0.811094 zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 0.541517 0.927885 hat wye 9 0.03144187646093577 0.7495507603507059 0.031442 0.031442 0.749551 0.749551 pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 mlr --opprint step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g a ./reg_test/input/abixy a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 wye wye 3 0.20460330576630303 0.33831852551664776 0.204603 0.204603 0.338319 0.338319 eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 wye pan 5 0.5732889198020006 0.8636244699032729 0.241472 0.536420 0.390849 0.811094 zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 0.541517 0.927885 hat wye 9 0.03144187646093577 0.7495507603507059 0.031442 0.031442 0.749551 0.749551 pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 mlr --odkvp step -a rsum,shift,delta,counter -f x,y ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_rsum=0.346790,x_shift=,x_delta=0,x_counter=1,y_rsum=0.726803,y_shift=,y_delta=0,y_counter=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_rsum=1.105470,x_shift=0.3467901443380824,x_delta=0.411890,x_counter=2,y_rsum=1.248954,y_shift=0.7268028627434533,y_delta=-0.204652,y_counter=2 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_rsum=1.310073,x_shift=0.7586799647899636,x_delta=-0.554077,x_counter=3,y_rsum=1.587272,y_shift=0.5221511083334797,y_delta=-0.183833,y_counter=3 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_rsum=1.691473,x_shift=0.20460330576630303,x_delta=0.176796,x_counter=4,y_rsum=1.721461,y_shift=0.33831852551664776,y_delta=-0.204130,y_counter=4 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_rsum=2.585086,y_shift=0.13418874328430463,y_delta=0.729436,y_counter=5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_rsum=2.218599,x_shift=0.38139939387114097,x_delta=0.145727,x_counter=5,y_rsum=3.078307,y_shift=0.8636244699032729,y_delta=-0.370403,y_counter=6 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_rsum=2.830383,x_shift=0.5271261600918548,x_delta=0.084658,x_counter=6,y_rsum=3.266192,y_shift=0.49322128674835697,y_delta=-0.305336,y_counter=7 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_rsum=3.428937,x_shift=0.6117840605678454,x_delta=-0.013230,x_counter=7 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_rsum=3.460379,x_shift=0.5985540091064224,x_delta=-0.567112,x_counter=8,y_rsum=4.015743,y_shift=0.1878849191181694,y_delta=0.561666,y_counter=8 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_rsum=3.963005,x_shift=0.03144187646093577,x_delta=0.471184,x_counter=9,y_rsum=4.968361,y_shift=0.7495507603507059,y_delta=0.203068,y_counter=9 mlr --odkvp step -a rsum,shift,delta,counter -f x,y -g a ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_rsum=0.346790,x_shift=,x_delta=0,x_counter=1,y_rsum=0.726803,y_shift=,y_delta=0,y_counter=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_rsum=0.758680,x_shift=,x_delta=0,x_counter=1,y_rsum=0.522151,y_shift=,y_delta=0,y_counter=1 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_rsum=1.140079,x_shift=0.7586799647899636,x_delta=-0.377281,x_counter=2,y_rsum=0.656340,y_shift=0.5221511083334797,y_delta=-0.387962,y_counter=2 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_rsum=0.863624,y_shift=,y_delta=0,y_counter=1 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_rsum=0.527126,x_shift=,x_delta=0,x_counter=1,y_rsum=0.493221,y_shift=,y_delta=0,y_counter=1 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_rsum=1.751863,x_shift=0.38139939387114097,x_delta=0.230385,x_counter=3,y_rsum=0.844225,y_shift=0.13418874328430463,y_delta=0.053696,y_counter=3 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_rsum=1.125680,x_shift=0.5271261600918548,x_delta=0.071428,x_counter=2 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_rsum=0.849416,x_shift=0.3467901443380824,x_delta=0.155836,x_counter=2,y_rsum=1.679421,y_shift=0.7268028627434533,y_delta=0.225815,y_counter=2 mlr --opprint step -a ewma -d 0.1,0.9 -f x,y -g a ./reg_test/input/abixy-het a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 aaa b i x y wye wye 3 0.20460330576630303 0.33831852551664776 a bbb i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 a b i xxx y y_ewma_0.1 y_ewma_0.9 wye pan 5 0.5732889198020006 0.8636244699032729 0.863624 0.863624 a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 a b iii x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 a b i x yyy x_ewma_0.1 x_ewma_0.9 zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 aaa bbb i x y hat wye 9 0.03144187646093577 0.7495507603507059 a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 mlr --opprint step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g a ./reg_test/input/abixy-het a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 aaa b i x y wye wye 3 0.20460330576630303 0.33831852551664776 a bbb i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 a b i xxx y y_ewma_smooth y_ewma_rough wye pan 5 0.5732889198020006 0.8636244699032729 0.863624 0.863624 a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 a b iii x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 a b i x yyy x_ewma_smooth x_ewma_rough zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 aaa bbb i x y hat wye 9 0.03144187646093577 0.7495507603507059 a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 mlr --icsvlite --opprint step -a from-first -f x ./reg_test/input/from-first.csv x g x_from_first 100 red 0 203 red 103 101 green 1 307 red 207 209 green 109 314 green 214 mlr --icsvlite --opprint step -a from-first -f x -g g ./reg_test/input/from-first.csv x g x_from_first 100 red 0 203 red 103 101 green 0 307 red 207 209 green 108 314 green 213 mlr --opprint histogram -f x,y --lo 0 --hi 1 --nbins 20 ./reg_test/input/small bin_lo bin_hi x_count y_count 0.000000 0.050000 1 0 0.050000 0.100000 0 0 0.100000 0.150000 0 1 0.150000 0.200000 0 1 0.200000 0.250000 1 0 0.250000 0.300000 0 0 0.300000 0.350000 1 1 0.350000 0.400000 1 0 0.400000 0.450000 0 0 0.450000 0.500000 0 1 0.500000 0.550000 2 1 0.550000 0.600000 2 0 0.600000 0.650000 1 0 0.650000 0.700000 0 0 0.700000 0.750000 0 2 0.750000 0.800000 1 0 0.800000 0.850000 0 0 0.850000 0.900000 0 1 0.900000 0.950000 0 0 0.950000 1.000000 0 2 mlr --opprint histogram -f x,y --lo 0 --hi 1 --nbins 20 -o foo_ ./reg_test/input/small foo_bin_lo foo_bin_hi foo_x_count foo_y_count 0.000000 0.050000 1 0 0.050000 0.100000 0 0 0.100000 0.150000 0 1 0.150000 0.200000 0 1 0.200000 0.250000 1 0 0.250000 0.300000 0 0 0.300000 0.350000 1 1 0.350000 0.400000 1 0 0.400000 0.450000 0 0 0.450000 0.500000 0 1 0.500000 0.550000 2 1 0.550000 0.600000 2 0 0.600000 0.650000 1 0 0.650000 0.700000 0 0 0.700000 0.750000 0 2 0.750000 0.800000 1 0 0.800000 0.850000 0 0 0.850000 0.900000 0 1 0.900000 0.950000 0 0 0.950000 1.000000 0 2 mlr --opprint histogram --nbins 9 --auto -f x,y ./reg_test/input/ints.dkvp bin_lo bin_hi x_count y_count 0.000000 1.000000 8 1 1.000000 2.000000 2 2 2.000000 3.000000 5 5 3.000000 4.000000 4 1 4.000000 5.000000 3 2 5.000000 6.000000 1 4 6.000000 7.000000 3 4 7.000000 8.000000 2 4 8.000000 9.000000 2 7 mlr --opprint histogram --nbins 9 --auto -f x,y -o foo_ ./reg_test/input/ints.dkvp foo_bin_lo bin_hi foo_x_count foo_y_count 0.000000 1.000000 8 1 1.000000 2.000000 2 2 2.000000 3.000000 5 5 3.000000 4.000000 4 1 4.000000 5.000000 3 2 5.000000 6.000000 1 4 6.000000 7.000000 3 4 7.000000 8.000000 2 4 8.000000 9.000000 2 7 mlr --csvlite --opprint merge-fields -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum 436 436 436 490 490 926 195 195 195 446 446 641 320 320 320 526 526 846 780 780 780 963 963 1743 220 220 220 888 888 1108 705 705 705 831 831 1536 mlr --csvlite --opprint merge-fields -k -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv a_in a_out b_in b_out a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum 436 490 446 195 436 436 436 490 490 926 195 195 195 446 446 641 526 320 963 780 320 320 320 526 526 846 780 780 780 963 963 1743 220 888 705 831 220 220 220 888 888 1108 705 705 705 831 831 1536 mlr --csvlite --opprint merge-fields -i -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum 436.000000 436 451.660000 490 490 926 195.000000 195 267.790000 446 446 641 320.000000 320 379.740000 526 526 846 780.000000 780 833.070000 963 963 1743 220.000000 220 413.720000 888 888 1108 705.000000 705 741.540000 831 831 1536 mlr --csvlite --opprint merge-fields -i -k -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv a_in a_out b_in b_out a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum 436 490 446 195 436.000000 436 451.660000 490 490 926 195.000000 195 267.790000 446 446 641 526 320 963 780 320.000000 320 379.740000 526 526 846 780.000000 780 833.070000 963 963 1743 220 888 705 831 220.000000 220 413.720000 888 888 1108 705.000000 705 741.540000 831 831 1536 mlr --csvlite --opprint merge-fields -a p0,min,p29,max,p100 -c _in,_out ./reg_test/input/merge-fields-in-out-mixed.csv a_p0 a_min a_p29 a_max a_p100 b_p0 b_min b_p29 b_max b_p100 436 436 436 abc abc 195 195 195 446 446 320 320 320 526 526 780 780 780 def def 220 220 220 888 888 705 705 705 ghi ghi jkl jkl jkl mno mno pqr pqr pqr stu stu mlr --csvlite --opprint merge-fields -k -a p0,min,p29,max,p100 -c _in,_out ./reg_test/input/merge-fields-in-out-mixed.csv a_in a_out b_in b_out a_p0 a_min a_p29 a_max a_p100 b_p0 b_min b_p29 b_max b_p100 436 abc 446 195 436 436 436 abc abc 195 195 195 446 446 526 320 def 780 320 320 320 526 526 780 780 780 def def 220 888 705 ghi 220 220 220 888 888 705 705 705 ghi ghi jkl mno pqr stu jkl jkl jkl mno mno pqr pqr pqr stu stu mlr --oxtab merge-fields -k -a p0,min,p29,max,p100,sum,count -f a_in_x,a_out_x -o foo ./reg_test/input/merge-fields-abxy.dkvp a_in_x 1 a_out_x 2 b_in_y 4 b_out_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 z 1 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_out_x 2 b_in_y 4 b_out_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_out_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 a_in_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 z 2 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_out_x 2 b_on_y 4 b_out_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_on_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_in_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 z 3 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_in_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_on_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 z 4 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 mlr --oxtab merge-fields -k -a p0,min,p29,max,p100,sum,count -r in_,out_ -o bar ./reg_test/input/merge-fields-abxy.dkvp a_in_x 1 a_out_x 2 b_in_y 4 b_out_x 8 bar_p0 1 bar_min 1 bar_p29 2 bar_max 8 bar_p100 8 bar_sum 15 bar_count 4 z 1 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_on_x 1 a_out_x 2 b_in_y 4 b_out_x 8 bar_p0 2 bar_min 2 bar_p29 2 bar_max 8 bar_p100 8 bar_sum 14 bar_count 3 a_in_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 8 bar_p100 8 bar_sum 13 bar_count 3 a_in_x 1 a_out_x 2 b_on_y 4 b_out_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 8 bar_p100 8 bar_sum 11 bar_count 3 a_in_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 4 bar_p100 4 bar_sum 7 bar_count 3 z 2 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_on_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 bar_p0 4 bar_min 4 bar_p29 4 bar_max 8 bar_p100 8 bar_sum 12 bar_count 2 a_on_x 1 a_out_x 2 b_on_y 4 b_out_x 8 bar_p0 2 bar_min 2 bar_p29 2 bar_max 8 bar_p100 8 bar_sum 10 bar_count 2 a_on_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 bar_p0 2 bar_min 2 bar_p29 2 bar_max 4 bar_p100 4 bar_sum 6 bar_count 2 a_in_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 8 bar_p100 8 bar_sum 9 bar_count 2 a_in_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 4 bar_p100 4 bar_sum 5 bar_count 2 a_in_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 2 bar_p100 2 bar_sum 3 bar_count 2 z 3 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_in_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 1 bar_p100 1 bar_sum 1 bar_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 bar_p0 2 bar_min 2 bar_p29 2 bar_max 2 bar_p100 2 bar_sum 2 bar_count 1 a_on_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 bar_p0 4 bar_min 4 bar_p29 4 bar_max 4 bar_p100 4 bar_sum 4 bar_count 1 a_on_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 bar_p0 8 bar_min 8 bar_p29 8 bar_max 8 bar_p100 8 bar_sum 8 bar_count 1 z 4 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_on_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 mlr --oxtab merge-fields -k -a p0,min,p29,max,p100,sum,count -c in_,out_ ./reg_test/input/merge-fields-abxy.dkvp a_in_x 1 a_out_x 2 b_in_y 4 b_out_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 z 1 a_on_x 1 a_out_x 2 b_in_y 4 b_out_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_out_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 z 2 a_on_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_out_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_on_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 a_in_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 z 3 a_in_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 a_on_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 a_on_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 z 4 a_on_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 mlr --oxtab merge-fields -i -k -a p0,min,p29,max,p100,sum,count -f a_in_x,a_out_x -o foo ./reg_test/input/merge-fields-abxy.dkvp a_in_x 1 a_out_x 2 b_in_y 4 b_out_x 8 foo_p0 1.000000 foo_min 1 foo_p29 1.290000 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 z 1 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_out_x 2 b_in_y 4 b_out_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_out_x 8 foo_p0 1.000000 foo_min 1 foo_p29 1.290000 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 a_in_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 foo_p0 1.000000 foo_min 1 foo_p29 1.290000 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 z 2 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_out_x 2 b_on_y 4 b_out_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_on_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_in_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 foo_p0 1.000000 foo_min 1 foo_p29 1.290000 foo_max 2 foo_p100 2 foo_sum 3 foo_count 2 z 3 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_in_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 foo_p0 1 foo_min 1 foo_p29 1 foo_max 1 foo_p100 1 foo_sum 1 foo_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 foo_p0 2 foo_min 2 foo_p29 2 foo_max 2 foo_p100 2 foo_sum 2 foo_count 1 a_on_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 z 4 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 a_on_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 foo_p0 foo_min foo_p29 foo_max foo_p100 foo_sum 0 foo_count 0 mlr --oxtab merge-fields -i -k -a p0,min,p29,max,p100,sum,count -r in_,out_ -o bar ./reg_test/input/merge-fields-abxy.dkvp a_in_x 1 a_out_x 2 b_in_y 4 b_out_x 8 bar_p0 1.000000 bar_min 1 bar_p29 1.870000 bar_max 8 bar_p100 8 bar_sum 15 bar_count 4 z 1 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_on_x 1 a_out_x 2 b_in_y 4 b_out_x 8 bar_p0 2.000000 bar_min 2 bar_p29 3.160000 bar_max 8 bar_p100 8 bar_sum 14 bar_count 3 a_in_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 bar_p0 1.000000 bar_min 1 bar_p29 2.740000 bar_max 8 bar_p100 8 bar_sum 13 bar_count 3 a_in_x 1 a_out_x 2 b_on_y 4 b_out_x 8 bar_p0 1.000000 bar_min 1 bar_p29 1.580000 bar_max 8 bar_p100 8 bar_sum 11 bar_count 3 a_in_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 bar_p0 1.000000 bar_min 1 bar_p29 1.580000 bar_max 4 bar_p100 4 bar_sum 7 bar_count 3 z 2 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_on_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 bar_p0 4.000000 bar_min 4 bar_p29 5.160000 bar_max 8 bar_p100 8 bar_sum 12 bar_count 2 a_on_x 1 a_out_x 2 b_on_y 4 b_out_x 8 bar_p0 2.000000 bar_min 2 bar_p29 3.740000 bar_max 8 bar_p100 8 bar_sum 10 bar_count 2 a_on_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 bar_p0 2.000000 bar_min 2 bar_p29 2.580000 bar_max 4 bar_p100 4 bar_sum 6 bar_count 2 a_in_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 bar_p0 1.000000 bar_min 1 bar_p29 3.030000 bar_max 8 bar_p100 8 bar_sum 9 bar_count 2 a_in_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 bar_p0 1.000000 bar_min 1 bar_p29 1.870000 bar_max 4 bar_p100 4 bar_sum 5 bar_count 2 a_in_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 bar_p0 1.000000 bar_min 1 bar_p29 1.290000 bar_max 2 bar_p100 2 bar_sum 3 bar_count 2 z 3 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_in_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 bar_p0 1 bar_min 1 bar_p29 1 bar_max 1 bar_p100 1 bar_sum 1 bar_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 bar_p0 2 bar_min 2 bar_p29 2 bar_max 2 bar_p100 2 bar_sum 2 bar_count 1 a_on_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 bar_p0 4 bar_min 4 bar_p29 4 bar_max 4 bar_p100 4 bar_sum 4 bar_count 1 a_on_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 bar_p0 8 bar_min 8 bar_p29 8 bar_max 8 bar_p100 8 bar_sum 8 bar_count 1 z 4 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 a_on_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 bar_p0 bar_min bar_p29 bar_max bar_p100 bar_sum 0 bar_count 0 mlr --oxtab merge-fields -i -k -a p0,min,p29,max,p100,sum,count -c in_,out_ ./reg_test/input/merge-fields-abxy.dkvp a_in_x 1 a_out_x 2 b_in_y 4 b_out_x 8 a_x_p0 1.000000 a_x_min 1 a_x_p29 1.290000 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 z 1 a_on_x 1 a_out_x 2 b_in_y 4 b_out_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_out_x 8 a_x_p0 1.000000 a_x_min 1 a_x_p29 1.290000 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 a_x_p0 1.000000 a_x_min 1 a_x_p29 1.290000 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 z 2 a_on_x 1 a_oot_x 2 b_in_y 4 b_out_x 8 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_out_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_on_x 1 a_out_x 2 b_in_y 4 b_oot_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 a_in_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 a_in_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 a_in_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 a_x_p0 1.000000 a_x_min 1 a_x_p29 1.290000 a_x_max 2 a_x_p100 2 a_x_sum 3 a_x_count 2 z 3 a_in_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 a_x_p0 1 a_x_min 1 a_x_p29 1 a_x_max 1 a_x_p100 1 a_x_sum 1 a_x_count 1 a_on_x 1 a_out_x 2 b_on_y 4 b_oot_x 8 a_x_p0 2 a_x_min 2 a_x_p29 2 a_x_max 2 a_x_p100 2 a_x_sum 2 a_x_count 1 a_on_x 1 a_oot_x 2 b_in_y 4 b_oot_x 8 b_y_p0 4 b_y_min 4 b_y_p29 4 b_y_max 4 b_y_p100 4 b_y_sum 4 b_y_count 1 a_on_x 1 a_oot_x 2 b_on_y 4 b_out_x 8 b_x_p0 8 b_x_min 8 b_x_p29 8 b_x_max 8 b_x_p100 8 b_x_sum 8 b_x_count 1 z 4 a_on_x 1 a_oot_x 2 b_on_y 4 b_oot_x 8 ================================================================ STATS1 WITH REGEXED FIELD NAMES mlr --from ./reg_test/input/abixy --opprint stats1 -a sum -g a,b -f i,x,y a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gr ^[a-h]$ --fr ^[i-z]$ a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 mlr --from ./reg_test/input/abixy --opprint stats1 -a sum -g a,b --fr ^[i-z]$ a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gr ^[a-h]$ -f i,x,y a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gx ^[i-z]$ --fx ^[a-h]$ a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 mlr --from ./reg_test/input/abixy --opprint stats1 -a sum -g a,b --fx ^[a-h]$ a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gx ^[i-z]$ -f i,x,y a b i_sum x_sum y_sum pan pan 1 0.346790 0.726803 eks pan 2 0.758680 0.522151 wye wye 3 0.204603 0.338319 eks wye 4 0.381399 0.134189 wye pan 5 0.573289 0.863624 zee pan 6 0.527126 0.493221 eks zee 7 0.611784 0.187885 zee wye 8 0.598554 0.976181 hat wye 9 0.031442 0.749551 pan wye 10 0.502626 0.952618 ================================================================ MOST/LEAST FREQUENT mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a -n 3 a count apple 6 bat 5 cat 4 mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 a b count apple apple 6 bat cat 5 cat bat 3 mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -b a b apple apple bat cat cat bat mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f nonesuch -n 3 mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a -n 3 a count dog 2 cat 4 bat 5 mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 a b count cat cat 1 dog dog 2 cat bat 3 mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -b a b cat cat dog dog cat bat mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f nonesuch -n 3 mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a -n 3 -o foo a foo apple 6 bat 5 cat 4 mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -o foo a b foo apple apple 6 bat cat 5 cat bat 3 mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -b -o foo a b apple apple bat cat cat bat mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f nonesuch -n 3 -o foo mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a -n 3 -o foo a foo dog 2 cat 4 bat 5 mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -o foo a b foo cat cat 1 dog dog 2 cat bat 3 mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -b -o foo a b cat cat dog dog cat bat mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f nonesuch -n 3 -o foo ================================================================ COUNT-SIMILAR mlr --opprint --from ./reg_test/input/abixy count-similar -g a a b i x y count pan pan 1 0.3467901443380824 0.7268028627434533 2 pan wye 10 0.5026260055412137 0.9526183602969864 2 eks pan 2 0.7586799647899636 0.5221511083334797 3 eks wye 4 0.38139939387114097 0.13418874328430463 3 eks zee 7 0.6117840605678454 0.1878849191181694 3 wye wye 3 0.20460330576630303 0.33831852551664776 2 wye pan 5 0.5732889198020006 0.8636244699032729 2 zee pan 6 0.5271261600918548 0.49322128674835697 2 zee wye 8 0.5985540091064224 0.976181385699006 2 hat wye 9 0.03144187646093577 0.7495507603507059 1 mlr --opprint --from ./reg_test/input/abixy count-similar -g b,i a b i x y count pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 1 wye wye 3 0.20460330576630303 0.33831852551664776 1 eks wye 4 0.38139939387114097 0.13418874328430463 1 wye pan 5 0.5732889198020006 0.8636244699032729 1 zee pan 6 0.5271261600918548 0.49322128674835697 1 eks zee 7 0.6117840605678454 0.1878849191181694 1 zee wye 8 0.5985540091064224 0.976181385699006 1 hat wye 9 0.03144187646093577 0.7495507603507059 1 pan wye 10 0.5026260055412137 0.9526183602969864 1 mlr --opprint --from ./reg_test/input/abixy count-similar -g a,b,i -o other_name_for_counter a b i x y other_name_for_counter pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 1 wye wye 3 0.20460330576630303 0.33831852551664776 1 eks wye 4 0.38139939387114097 0.13418874328430463 1 wye pan 5 0.5732889198020006 0.8636244699032729 1 zee pan 6 0.5271261600918548 0.49322128674835697 1 eks zee 7 0.6117840605678454 0.1878849191181694 1 zee wye 8 0.5985540091064224 0.976181385699006 1 hat wye 9 0.03144187646093577 0.7495507603507059 1 pan wye 10 0.5026260055412137 0.9526183602969864 1 ================================================================ NON-INTERPOLATED AND INTERPOLATED PERCENTILES mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 1 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 0 x_p18 0 x_p19 0 x_p20 0 x_p21 0 x_p22 0 x_p23 0 x_p24 0 x_p25 0 x_p26 0 x_p27 0 x_p28 0 x_p29 0 x_p30 0 x_p31 0 x_p32 0 x_p33 0 x_p34 0 x_p35 0 x_p36 0 x_p37 0 x_p38 0 x_p39 0 x_p40 0 x_p41 0 x_p42 0 x_p43 0 x_p44 0 x_p45 0 x_p46 0 x_p47 0 x_p48 0 x_p49 0 x_p50 0 x_p51 0 x_p52 0 x_p53 0 x_p54 0 x_p55 0 x_p56 0 x_p57 0 x_p58 0 x_p59 0 x_p60 0 x_p61 0 x_p62 0 x_p63 0 x_p64 0 x_p65 0 x_p66 0 x_p67 0 x_p68 0 x_p69 0 x_p70 0 x_p71 0 x_p72 0 x_p73 0 x_p74 0 x_p75 0 x_p76 0 x_p77 0 x_p78 0 x_p79 0 x_p80 0 x_p81 0 x_p82 0 x_p83 0 x_p84 0 x_p85 0 x_p86 0 x_p87 0 x_p88 0 x_p89 0 x_p90 0 x_p91 0 x_p92 0 x_p93 0 x_p94 0 x_p95 0 x_p96 0 x_p97 0 x_p98 0 x_p99 0 x_p100 0 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 2 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 0 x_p18 0 x_p19 0 x_p20 0 x_p21 0 x_p22 0 x_p23 0 x_p24 0 x_p25 0 x_p26 0 x_p27 0 x_p28 0 x_p29 0 x_p30 0 x_p31 0 x_p32 0 x_p33 0 x_p34 0 x_p35 0 x_p36 0 x_p37 0 x_p38 0 x_p39 0 x_p40 0 x_p41 0 x_p42 0 x_p43 0 x_p44 0 x_p45 0 x_p46 0 x_p47 0 x_p48 0 x_p49 0 x_p50 1 x_p51 1 x_p52 1 x_p53 1 x_p54 1 x_p55 1 x_p56 1 x_p57 1 x_p58 1 x_p59 1 x_p60 1 x_p61 1 x_p62 1 x_p63 1 x_p64 1 x_p65 1 x_p66 1 x_p67 1 x_p68 1 x_p69 1 x_p70 1 x_p71 1 x_p72 1 x_p73 1 x_p74 1 x_p75 1 x_p76 1 x_p77 1 x_p78 1 x_p79 1 x_p80 1 x_p81 1 x_p82 1 x_p83 1 x_p84 1 x_p85 1 x_p86 1 x_p87 1 x_p88 1 x_p89 1 x_p90 1 x_p91 1 x_p92 1 x_p93 1 x_p94 1 x_p95 1 x_p96 1 x_p97 1 x_p98 1 x_p99 1 x_p100 1 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 3 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 0 x_p18 0 x_p19 0 x_p20 0 x_p21 0 x_p22 0 x_p23 0 x_p24 0 x_p25 0 x_p26 0 x_p27 0 x_p28 0 x_p29 0 x_p30 0 x_p31 0 x_p32 0 x_p33 0 x_p34 1 x_p35 1 x_p36 1 x_p37 1 x_p38 1 x_p39 1 x_p40 1 x_p41 1 x_p42 1 x_p43 1 x_p44 1 x_p45 1 x_p46 1 x_p47 1 x_p48 1 x_p49 1 x_p50 1 x_p51 1 x_p52 1 x_p53 1 x_p54 1 x_p55 1 x_p56 1 x_p57 1 x_p58 1 x_p59 1 x_p60 1 x_p61 1 x_p62 1 x_p63 1 x_p64 1 x_p65 1 x_p66 1 x_p67 2 x_p68 2 x_p69 2 x_p70 2 x_p71 2 x_p72 2 x_p73 2 x_p74 2 x_p75 2 x_p76 2 x_p77 2 x_p78 2 x_p79 2 x_p80 2 x_p81 2 x_p82 2 x_p83 2 x_p84 2 x_p85 2 x_p86 2 x_p87 2 x_p88 2 x_p89 2 x_p90 2 x_p91 2 x_p92 2 x_p93 2 x_p94 2 x_p95 2 x_p96 2 x_p97 2 x_p98 2 x_p99 2 x_p100 2 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 4 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 0 x_p18 0 x_p19 0 x_p20 0 x_p21 0 x_p22 0 x_p23 0 x_p24 0 x_p25 1 x_p26 1 x_p27 1 x_p28 1 x_p29 1 x_p30 1 x_p31 1 x_p32 1 x_p33 1 x_p34 1 x_p35 1 x_p36 1 x_p37 1 x_p38 1 x_p39 1 x_p40 1 x_p41 1 x_p42 1 x_p43 1 x_p44 1 x_p45 1 x_p46 1 x_p47 1 x_p48 1 x_p49 1 x_p50 2 x_p51 2 x_p52 2 x_p53 2 x_p54 2 x_p55 2 x_p56 2 x_p57 2 x_p58 2 x_p59 2 x_p60 2 x_p61 2 x_p62 2 x_p63 2 x_p64 2 x_p65 2 x_p66 2 x_p67 2 x_p68 2 x_p69 2 x_p70 2 x_p71 2 x_p72 2 x_p73 2 x_p74 2 x_p75 3 x_p76 3 x_p77 3 x_p78 3 x_p79 3 x_p80 3 x_p81 3 x_p82 3 x_p83 3 x_p84 3 x_p85 3 x_p86 3 x_p87 3 x_p88 3 x_p89 3 x_p90 3 x_p91 3 x_p92 3 x_p93 3 x_p94 3 x_p95 3 x_p96 3 x_p97 3 x_p98 3 x_p99 3 x_p100 3 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 5 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 0 x_p18 0 x_p19 0 x_p20 1 x_p21 1 x_p22 1 x_p23 1 x_p24 1 x_p25 1 x_p26 1 x_p27 1 x_p28 1 x_p29 1 x_p30 1 x_p31 1 x_p32 1 x_p33 1 x_p34 1 x_p35 1 x_p36 1 x_p37 1 x_p38 1 x_p39 1 x_p40 2 x_p41 2 x_p42 2 x_p43 2 x_p44 2 x_p45 2 x_p46 2 x_p47 2 x_p48 2 x_p49 2 x_p50 2 x_p51 2 x_p52 2 x_p53 2 x_p54 2 x_p55 2 x_p56 2 x_p57 2 x_p58 2 x_p59 2 x_p60 3 x_p61 3 x_p62 3 x_p63 3 x_p64 3 x_p65 3 x_p66 3 x_p67 3 x_p68 3 x_p69 3 x_p70 3 x_p71 3 x_p72 3 x_p73 3 x_p74 3 x_p75 3 x_p76 3 x_p77 3 x_p78 3 x_p79 3 x_p80 4 x_p81 4 x_p82 4 x_p83 4 x_p84 4 x_p85 4 x_p86 4 x_p87 4 x_p88 4 x_p89 4 x_p90 4 x_p91 4 x_p92 4 x_p93 4 x_p94 4 x_p95 4 x_p96 4 x_p97 4 x_p98 4 x_p99 4 x_p100 4 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 6 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 1 x_p18 1 x_p19 1 x_p20 1 x_p21 1 x_p22 1 x_p23 1 x_p24 1 x_p25 1 x_p26 1 x_p27 1 x_p28 1 x_p29 1 x_p30 1 x_p31 1 x_p32 1 x_p33 1 x_p34 2 x_p35 2 x_p36 2 x_p37 2 x_p38 2 x_p39 2 x_p40 2 x_p41 2 x_p42 2 x_p43 2 x_p44 2 x_p45 2 x_p46 2 x_p47 2 x_p48 2 x_p49 2 x_p50 3 x_p51 3 x_p52 3 x_p53 3 x_p54 3 x_p55 3 x_p56 3 x_p57 3 x_p58 3 x_p59 3 x_p60 3 x_p61 3 x_p62 3 x_p63 3 x_p64 3 x_p65 3 x_p66 3 x_p67 4 x_p68 4 x_p69 4 x_p70 4 x_p71 4 x_p72 4 x_p73 4 x_p74 4 x_p75 4 x_p76 4 x_p77 4 x_p78 4 x_p79 4 x_p80 4 x_p81 4 x_p82 4 x_p83 4 x_p84 5 x_p85 5 x_p86 5 x_p87 5 x_p88 5 x_p89 5 x_p90 5 x_p91 5 x_p92 5 x_p93 5 x_p94 5 x_p95 5 x_p96 5 x_p97 5 x_p98 5 x_p99 5 x_p100 5 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 7 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 1 x_p16 1 x_p17 1 x_p18 1 x_p19 1 x_p20 1 x_p21 1 x_p22 1 x_p23 1 x_p24 1 x_p25 1 x_p26 1 x_p27 1 x_p28 1 x_p29 2 x_p30 2 x_p31 2 x_p32 2 x_p33 2 x_p34 2 x_p35 2 x_p36 2 x_p37 2 x_p38 2 x_p39 2 x_p40 2 x_p41 2 x_p42 2 x_p43 3 x_p44 3 x_p45 3 x_p46 3 x_p47 3 x_p48 3 x_p49 3 x_p50 3 x_p51 3 x_p52 3 x_p53 3 x_p54 3 x_p55 3 x_p56 3 x_p57 3 x_p58 4 x_p59 4 x_p60 4 x_p61 4 x_p62 4 x_p63 4 x_p64 4 x_p65 4 x_p66 4 x_p67 4 x_p68 4 x_p69 4 x_p70 4 x_p71 4 x_p72 5 x_p73 5 x_p74 5 x_p75 5 x_p76 5 x_p77 5 x_p78 5 x_p79 5 x_p80 5 x_p81 5 x_p82 5 x_p83 5 x_p84 5 x_p85 5 x_p86 6 x_p87 6 x_p88 6 x_p89 6 x_p90 6 x_p91 6 x_p92 6 x_p93 6 x_p94 6 x_p95 6 x_p96 6 x_p97 6 x_p98 6 x_p99 6 x_p100 6 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 8 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 1 x_p14 1 x_p15 1 x_p16 1 x_p17 1 x_p18 1 x_p19 1 x_p20 1 x_p21 1 x_p22 1 x_p23 1 x_p24 1 x_p25 2 x_p26 2 x_p27 2 x_p28 2 x_p29 2 x_p30 2 x_p31 2 x_p32 2 x_p33 2 x_p34 2 x_p35 2 x_p36 2 x_p37 2 x_p38 3 x_p39 3 x_p40 3 x_p41 3 x_p42 3 x_p43 3 x_p44 3 x_p45 3 x_p46 3 x_p47 3 x_p48 3 x_p49 3 x_p50 4 x_p51 4 x_p52 4 x_p53 4 x_p54 4 x_p55 4 x_p56 4 x_p57 4 x_p58 4 x_p59 4 x_p60 4 x_p61 4 x_p62 4 x_p63 5 x_p64 5 x_p65 5 x_p66 5 x_p67 5 x_p68 5 x_p69 5 x_p70 5 x_p71 5 x_p72 5 x_p73 5 x_p74 5 x_p75 6 x_p76 6 x_p77 6 x_p78 6 x_p79 6 x_p80 6 x_p81 6 x_p82 6 x_p83 6 x_p84 6 x_p85 6 x_p86 6 x_p87 6 x_p88 7 x_p89 7 x_p90 7 x_p91 7 x_p92 7 x_p93 7 x_p94 7 x_p95 7 x_p96 7 x_p97 7 x_p98 7 x_p99 7 x_p100 7 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 9 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 1 x_p13 1 x_p14 1 x_p15 1 x_p16 1 x_p17 1 x_p18 1 x_p19 1 x_p20 1 x_p21 1 x_p22 1 x_p23 2 x_p24 2 x_p25 2 x_p26 2 x_p27 2 x_p28 2 x_p29 2 x_p30 2 x_p31 2 x_p32 2 x_p33 2 x_p34 3 x_p35 3 x_p36 3 x_p37 3 x_p38 3 x_p39 3 x_p40 3 x_p41 3 x_p42 3 x_p43 3 x_p44 3 x_p45 4 x_p46 4 x_p47 4 x_p48 4 x_p49 4 x_p50 4 x_p51 4 x_p52 4 x_p53 4 x_p54 4 x_p55 4 x_p56 5 x_p57 5 x_p58 5 x_p59 5 x_p60 5 x_p61 5 x_p62 5 x_p63 5 x_p64 5 x_p65 5 x_p66 5 x_p67 6 x_p68 6 x_p69 6 x_p70 6 x_p71 6 x_p72 6 x_p73 6 x_p74 6 x_p75 6 x_p76 6 x_p77 6 x_p78 7 x_p79 7 x_p80 7 x_p81 7 x_p82 7 x_p83 7 x_p84 7 x_p85 7 x_p86 7 x_p87 7 x_p88 7 x_p89 8 x_p90 8 x_p91 8 x_p92 8 x_p93 8 x_p94 8 x_p95 8 x_p96 8 x_p97 8 x_p98 8 x_p99 8 x_p100 8 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 10 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 1 x_p11 1 x_p12 1 x_p13 1 x_p14 1 x_p15 1 x_p16 1 x_p17 1 x_p18 1 x_p19 1 x_p20 2 x_p21 2 x_p22 2 x_p23 2 x_p24 2 x_p25 2 x_p26 2 x_p27 2 x_p28 2 x_p29 2 x_p30 3 x_p31 3 x_p32 3 x_p33 3 x_p34 3 x_p35 3 x_p36 3 x_p37 3 x_p38 3 x_p39 3 x_p40 4 x_p41 4 x_p42 4 x_p43 4 x_p44 4 x_p45 4 x_p46 4 x_p47 4 x_p48 4 x_p49 4 x_p50 5 x_p51 5 x_p52 5 x_p53 5 x_p54 5 x_p55 5 x_p56 5 x_p57 5 x_p58 5 x_p59 5 x_p60 6 x_p61 6 x_p62 6 x_p63 6 x_p64 6 x_p65 6 x_p66 6 x_p67 6 x_p68 6 x_p69 6 x_p70 7 x_p71 7 x_p72 7 x_p73 7 x_p74 7 x_p75 7 x_p76 7 x_p77 7 x_p78 7 x_p79 7 x_p80 8 x_p81 8 x_p82 8 x_p83 8 x_p84 8 x_p85 8 x_p86 8 x_p87 8 x_p88 8 x_p89 8 x_p90 9 x_p91 9 x_p92 9 x_p93 9 x_p94 9 x_p95 9 x_p96 9 x_p97 9 x_p98 9 x_p99 9 x_p100 9 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 11 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 1 x_p11 1 x_p12 1 x_p13 1 x_p14 1 x_p15 1 x_p16 1 x_p17 1 x_p18 1 x_p19 2 x_p20 2 x_p21 2 x_p22 2 x_p23 2 x_p24 2 x_p25 2 x_p26 2 x_p27 2 x_p28 3 x_p29 3 x_p30 3 x_p31 3 x_p32 3 x_p33 3 x_p34 3 x_p35 3 x_p36 3 x_p37 4 x_p38 4 x_p39 4 x_p40 4 x_p41 4 x_p42 4 x_p43 4 x_p44 4 x_p45 4 x_p46 5 x_p47 5 x_p48 5 x_p49 5 x_p50 5 x_p51 5 x_p52 5 x_p53 5 x_p54 5 x_p55 6 x_p56 6 x_p57 6 x_p58 6 x_p59 6 x_p60 6 x_p61 6 x_p62 6 x_p63 6 x_p64 7 x_p65 7 x_p66 7 x_p67 7 x_p68 7 x_p69 7 x_p70 7 x_p71 7 x_p72 7 x_p73 8 x_p74 8 x_p75 8 x_p76 8 x_p77 8 x_p78 8 x_p79 8 x_p80 8 x_p81 8 x_p82 9 x_p83 9 x_p84 9 x_p85 9 x_p86 9 x_p87 9 x_p88 9 x_p89 9 x_p90 9 x_p91 10 x_p92 10 x_p93 10 x_p94 10 x_p95 10 x_p96 10 x_p97 10 x_p98 10 x_p99 10 x_p100 10 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 1 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0 x_p01 0 x_p02 0 x_p03 0 x_p04 0 x_p05 0 x_p06 0 x_p07 0 x_p08 0 x_p09 0 x_p10 0 x_p11 0 x_p12 0 x_p13 0 x_p14 0 x_p15 0 x_p16 0 x_p17 0 x_p18 0 x_p19 0 x_p20 0 x_p21 0 x_p22 0 x_p23 0 x_p24 0 x_p25 0 x_p26 0 x_p27 0 x_p28 0 x_p29 0 x_p30 0 x_p31 0 x_p32 0 x_p33 0 x_p34 0 x_p35 0 x_p36 0 x_p37 0 x_p38 0 x_p39 0 x_p40 0 x_p41 0 x_p42 0 x_p43 0 x_p44 0 x_p45 0 x_p46 0 x_p47 0 x_p48 0 x_p49 0 x_p50 0 x_p51 0 x_p52 0 x_p53 0 x_p54 0 x_p55 0 x_p56 0 x_p57 0 x_p58 0 x_p59 0 x_p60 0 x_p61 0 x_p62 0 x_p63 0 x_p64 0 x_p65 0 x_p66 0 x_p67 0 x_p68 0 x_p69 0 x_p70 0 x_p71 0 x_p72 0 x_p73 0 x_p74 0 x_p75 0 x_p76 0 x_p77 0 x_p78 0 x_p79 0 x_p80 0 x_p81 0 x_p82 0 x_p83 0 x_p84 0 x_p85 0 x_p86 0 x_p87 0 x_p88 0 x_p89 0 x_p90 0 x_p91 0 x_p92 0 x_p93 0 x_p94 0 x_p95 0 x_p96 0 x_p97 0 x_p98 0 x_p99 0 x_p100 0 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 2 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.010000 x_p02 0.020000 x_p03 0.030000 x_p04 0.040000 x_p05 0.050000 x_p06 0.060000 x_p07 0.070000 x_p08 0.080000 x_p09 0.090000 x_p10 0.100000 x_p11 0.110000 x_p12 0.120000 x_p13 0.130000 x_p14 0.140000 x_p15 0.150000 x_p16 0.160000 x_p17 0.170000 x_p18 0.180000 x_p19 0.190000 x_p20 0.200000 x_p21 0.210000 x_p22 0.220000 x_p23 0.230000 x_p24 0.240000 x_p25 0.250000 x_p26 0.260000 x_p27 0.270000 x_p28 0.280000 x_p29 0.290000 x_p30 0.300000 x_p31 0.310000 x_p32 0.320000 x_p33 0.330000 x_p34 0.340000 x_p35 0.350000 x_p36 0.360000 x_p37 0.370000 x_p38 0.380000 x_p39 0.390000 x_p40 0.400000 x_p41 0.410000 x_p42 0.420000 x_p43 0.430000 x_p44 0.440000 x_p45 0.450000 x_p46 0.460000 x_p47 0.470000 x_p48 0.480000 x_p49 0.490000 x_p50 0.500000 x_p51 0.510000 x_p52 0.520000 x_p53 0.530000 x_p54 0.540000 x_p55 0.550000 x_p56 0.560000 x_p57 0.570000 x_p58 0.580000 x_p59 0.590000 x_p60 0.600000 x_p61 0.610000 x_p62 0.620000 x_p63 0.630000 x_p64 0.640000 x_p65 0.650000 x_p66 0.660000 x_p67 0.670000 x_p68 0.680000 x_p69 0.690000 x_p70 0.700000 x_p71 0.710000 x_p72 0.720000 x_p73 0.730000 x_p74 0.740000 x_p75 0.750000 x_p76 0.760000 x_p77 0.770000 x_p78 0.780000 x_p79 0.790000 x_p80 0.800000 x_p81 0.810000 x_p82 0.820000 x_p83 0.830000 x_p84 0.840000 x_p85 0.850000 x_p86 0.860000 x_p87 0.870000 x_p88 0.880000 x_p89 0.890000 x_p90 0.900000 x_p91 0.910000 x_p92 0.920000 x_p93 0.930000 x_p94 0.940000 x_p95 0.950000 x_p96 0.960000 x_p97 0.970000 x_p98 0.980000 x_p99 0.990000 x_p100 1 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 3 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.020000 x_p02 0.040000 x_p03 0.060000 x_p04 0.080000 x_p05 0.100000 x_p06 0.120000 x_p07 0.140000 x_p08 0.160000 x_p09 0.180000 x_p10 0.200000 x_p11 0.220000 x_p12 0.240000 x_p13 0.260000 x_p14 0.280000 x_p15 0.300000 x_p16 0.320000 x_p17 0.340000 x_p18 0.360000 x_p19 0.380000 x_p20 0.400000 x_p21 0.420000 x_p22 0.440000 x_p23 0.460000 x_p24 0.480000 x_p25 0.500000 x_p26 0.520000 x_p27 0.540000 x_p28 0.560000 x_p29 0.580000 x_p30 0.600000 x_p31 0.620000 x_p32 0.640000 x_p33 0.660000 x_p34 0.680000 x_p35 0.700000 x_p36 0.720000 x_p37 0.740000 x_p38 0.760000 x_p39 0.780000 x_p40 0.800000 x_p41 0.820000 x_p42 0.840000 x_p43 0.860000 x_p44 0.880000 x_p45 0.900000 x_p46 0.920000 x_p47 0.940000 x_p48 0.960000 x_p49 0.980000 x_p50 1.000000 x_p51 1.020000 x_p52 1.040000 x_p53 1.060000 x_p54 1.080000 x_p55 1.100000 x_p56 1.120000 x_p57 1.140000 x_p58 1.160000 x_p59 1.180000 x_p60 1.200000 x_p61 1.220000 x_p62 1.240000 x_p63 1.260000 x_p64 1.280000 x_p65 1.300000 x_p66 1.320000 x_p67 1.340000 x_p68 1.360000 x_p69 1.380000 x_p70 1.400000 x_p71 1.420000 x_p72 1.440000 x_p73 1.460000 x_p74 1.480000 x_p75 1.500000 x_p76 1.520000 x_p77 1.540000 x_p78 1.560000 x_p79 1.580000 x_p80 1.600000 x_p81 1.620000 x_p82 1.640000 x_p83 1.660000 x_p84 1.680000 x_p85 1.700000 x_p86 1.720000 x_p87 1.740000 x_p88 1.760000 x_p89 1.780000 x_p90 1.800000 x_p91 1.820000 x_p92 1.840000 x_p93 1.860000 x_p94 1.880000 x_p95 1.900000 x_p96 1.920000 x_p97 1.940000 x_p98 1.960000 x_p99 1.980000 x_p100 2 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 4 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.030000 x_p02 0.060000 x_p03 0.090000 x_p04 0.120000 x_p05 0.150000 x_p06 0.180000 x_p07 0.210000 x_p08 0.240000 x_p09 0.270000 x_p10 0.300000 x_p11 0.330000 x_p12 0.360000 x_p13 0.390000 x_p14 0.420000 x_p15 0.450000 x_p16 0.480000 x_p17 0.510000 x_p18 0.540000 x_p19 0.570000 x_p20 0.600000 x_p21 0.630000 x_p22 0.660000 x_p23 0.690000 x_p24 0.720000 x_p25 0.750000 x_p26 0.780000 x_p27 0.810000 x_p28 0.840000 x_p29 0.870000 x_p30 0.900000 x_p31 0.930000 x_p32 0.960000 x_p33 0.990000 x_p34 1.020000 x_p35 1.050000 x_p36 1.080000 x_p37 1.110000 x_p38 1.140000 x_p39 1.170000 x_p40 1.200000 x_p41 1.230000 x_p42 1.260000 x_p43 1.290000 x_p44 1.320000 x_p45 1.350000 x_p46 1.380000 x_p47 1.410000 x_p48 1.440000 x_p49 1.470000 x_p50 1.500000 x_p51 1.530000 x_p52 1.560000 x_p53 1.590000 x_p54 1.620000 x_p55 1.650000 x_p56 1.680000 x_p57 1.710000 x_p58 1.740000 x_p59 1.770000 x_p60 1.800000 x_p61 1.830000 x_p62 1.860000 x_p63 1.890000 x_p64 1.920000 x_p65 1.950000 x_p66 1.980000 x_p67 2.010000 x_p68 2.040000 x_p69 2.070000 x_p70 2.100000 x_p71 2.130000 x_p72 2.160000 x_p73 2.190000 x_p74 2.220000 x_p75 2.250000 x_p76 2.280000 x_p77 2.310000 x_p78 2.340000 x_p79 2.370000 x_p80 2.400000 x_p81 2.430000 x_p82 2.460000 x_p83 2.490000 x_p84 2.520000 x_p85 2.550000 x_p86 2.580000 x_p87 2.610000 x_p88 2.640000 x_p89 2.670000 x_p90 2.700000 x_p91 2.730000 x_p92 2.760000 x_p93 2.790000 x_p94 2.820000 x_p95 2.850000 x_p96 2.880000 x_p97 2.910000 x_p98 2.940000 x_p99 2.970000 x_p100 3 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 5 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.040000 x_p02 0.080000 x_p03 0.120000 x_p04 0.160000 x_p05 0.200000 x_p06 0.240000 x_p07 0.280000 x_p08 0.320000 x_p09 0.360000 x_p10 0.400000 x_p11 0.440000 x_p12 0.480000 x_p13 0.520000 x_p14 0.560000 x_p15 0.600000 x_p16 0.640000 x_p17 0.680000 x_p18 0.720000 x_p19 0.760000 x_p20 0.800000 x_p21 0.840000 x_p22 0.880000 x_p23 0.920000 x_p24 0.960000 x_p25 1.000000 x_p26 1.040000 x_p27 1.080000 x_p28 1.120000 x_p29 1.160000 x_p30 1.200000 x_p31 1.240000 x_p32 1.280000 x_p33 1.320000 x_p34 1.360000 x_p35 1.400000 x_p36 1.440000 x_p37 1.480000 x_p38 1.520000 x_p39 1.560000 x_p40 1.600000 x_p41 1.640000 x_p42 1.680000 x_p43 1.720000 x_p44 1.760000 x_p45 1.800000 x_p46 1.840000 x_p47 1.880000 x_p48 1.920000 x_p49 1.960000 x_p50 2.000000 x_p51 2.040000 x_p52 2.080000 x_p53 2.120000 x_p54 2.160000 x_p55 2.200000 x_p56 2.240000 x_p57 2.280000 x_p58 2.320000 x_p59 2.360000 x_p60 2.400000 x_p61 2.440000 x_p62 2.480000 x_p63 2.520000 x_p64 2.560000 x_p65 2.600000 x_p66 2.640000 x_p67 2.680000 x_p68 2.720000 x_p69 2.760000 x_p70 2.800000 x_p71 2.840000 x_p72 2.880000 x_p73 2.920000 x_p74 2.960000 x_p75 3.000000 x_p76 3.040000 x_p77 3.080000 x_p78 3.120000 x_p79 3.160000 x_p80 3.200000 x_p81 3.240000 x_p82 3.280000 x_p83 3.320000 x_p84 3.360000 x_p85 3.400000 x_p86 3.440000 x_p87 3.480000 x_p88 3.520000 x_p89 3.560000 x_p90 3.600000 x_p91 3.640000 x_p92 3.680000 x_p93 3.720000 x_p94 3.760000 x_p95 3.800000 x_p96 3.840000 x_p97 3.880000 x_p98 3.920000 x_p99 3.960000 x_p100 4 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 6 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.050000 x_p02 0.100000 x_p03 0.150000 x_p04 0.200000 x_p05 0.250000 x_p06 0.300000 x_p07 0.350000 x_p08 0.400000 x_p09 0.450000 x_p10 0.500000 x_p11 0.550000 x_p12 0.600000 x_p13 0.650000 x_p14 0.700000 x_p15 0.750000 x_p16 0.800000 x_p17 0.850000 x_p18 0.900000 x_p19 0.950000 x_p20 1.000000 x_p21 1.050000 x_p22 1.100000 x_p23 1.150000 x_p24 1.200000 x_p25 1.250000 x_p26 1.300000 x_p27 1.350000 x_p28 1.400000 x_p29 1.450000 x_p30 1.500000 x_p31 1.550000 x_p32 1.600000 x_p33 1.650000 x_p34 1.700000 x_p35 1.750000 x_p36 1.800000 x_p37 1.850000 x_p38 1.900000 x_p39 1.950000 x_p40 2.000000 x_p41 2.050000 x_p42 2.100000 x_p43 2.150000 x_p44 2.200000 x_p45 2.250000 x_p46 2.300000 x_p47 2.350000 x_p48 2.400000 x_p49 2.450000 x_p50 2.500000 x_p51 2.550000 x_p52 2.600000 x_p53 2.650000 x_p54 2.700000 x_p55 2.750000 x_p56 2.800000 x_p57 2.850000 x_p58 2.900000 x_p59 2.950000 x_p60 3.000000 x_p61 3.050000 x_p62 3.100000 x_p63 3.150000 x_p64 3.200000 x_p65 3.250000 x_p66 3.300000 x_p67 3.350000 x_p68 3.400000 x_p69 3.450000 x_p70 3.500000 x_p71 3.550000 x_p72 3.600000 x_p73 3.650000 x_p74 3.700000 x_p75 3.750000 x_p76 3.800000 x_p77 3.850000 x_p78 3.900000 x_p79 3.950000 x_p80 4.000000 x_p81 4.050000 x_p82 4.100000 x_p83 4.150000 x_p84 4.200000 x_p85 4.250000 x_p86 4.300000 x_p87 4.350000 x_p88 4.400000 x_p89 4.450000 x_p90 4.500000 x_p91 4.550000 x_p92 4.600000 x_p93 4.650000 x_p94 4.700000 x_p95 4.750000 x_p96 4.800000 x_p97 4.850000 x_p98 4.900000 x_p99 4.950000 x_p100 5 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 7 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.060000 x_p02 0.120000 x_p03 0.180000 x_p04 0.240000 x_p05 0.300000 x_p06 0.360000 x_p07 0.420000 x_p08 0.480000 x_p09 0.540000 x_p10 0.600000 x_p11 0.660000 x_p12 0.720000 x_p13 0.780000 x_p14 0.840000 x_p15 0.900000 x_p16 0.960000 x_p17 1.020000 x_p18 1.080000 x_p19 1.140000 x_p20 1.200000 x_p21 1.260000 x_p22 1.320000 x_p23 1.380000 x_p24 1.440000 x_p25 1.500000 x_p26 1.560000 x_p27 1.620000 x_p28 1.680000 x_p29 1.740000 x_p30 1.800000 x_p31 1.860000 x_p32 1.920000 x_p33 1.980000 x_p34 2.040000 x_p35 2.100000 x_p36 2.160000 x_p37 2.220000 x_p38 2.280000 x_p39 2.340000 x_p40 2.400000 x_p41 2.460000 x_p42 2.520000 x_p43 2.580000 x_p44 2.640000 x_p45 2.700000 x_p46 2.760000 x_p47 2.820000 x_p48 2.880000 x_p49 2.940000 x_p50 3.000000 x_p51 3.060000 x_p52 3.120000 x_p53 3.180000 x_p54 3.240000 x_p55 3.300000 x_p56 3.360000 x_p57 3.420000 x_p58 3.480000 x_p59 3.540000 x_p60 3.600000 x_p61 3.660000 x_p62 3.720000 x_p63 3.780000 x_p64 3.840000 x_p65 3.900000 x_p66 3.960000 x_p67 4.020000 x_p68 4.080000 x_p69 4.140000 x_p70 4.200000 x_p71 4.260000 x_p72 4.320000 x_p73 4.380000 x_p74 4.440000 x_p75 4.500000 x_p76 4.560000 x_p77 4.620000 x_p78 4.680000 x_p79 4.740000 x_p80 4.800000 x_p81 4.860000 x_p82 4.920000 x_p83 4.980000 x_p84 5.040000 x_p85 5.100000 x_p86 5.160000 x_p87 5.220000 x_p88 5.280000 x_p89 5.340000 x_p90 5.400000 x_p91 5.460000 x_p92 5.520000 x_p93 5.580000 x_p94 5.640000 x_p95 5.700000 x_p96 5.760000 x_p97 5.820000 x_p98 5.880000 x_p99 5.940000 x_p100 6 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 8 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.070000 x_p02 0.140000 x_p03 0.210000 x_p04 0.280000 x_p05 0.350000 x_p06 0.420000 x_p07 0.490000 x_p08 0.560000 x_p09 0.630000 x_p10 0.700000 x_p11 0.770000 x_p12 0.840000 x_p13 0.910000 x_p14 0.980000 x_p15 1.050000 x_p16 1.120000 x_p17 1.190000 x_p18 1.260000 x_p19 1.330000 x_p20 1.400000 x_p21 1.470000 x_p22 1.540000 x_p23 1.610000 x_p24 1.680000 x_p25 1.750000 x_p26 1.820000 x_p27 1.890000 x_p28 1.960000 x_p29 2.030000 x_p30 2.100000 x_p31 2.170000 x_p32 2.240000 x_p33 2.310000 x_p34 2.380000 x_p35 2.450000 x_p36 2.520000 x_p37 2.590000 x_p38 2.660000 x_p39 2.730000 x_p40 2.800000 x_p41 2.870000 x_p42 2.940000 x_p43 3.010000 x_p44 3.080000 x_p45 3.150000 x_p46 3.220000 x_p47 3.290000 x_p48 3.360000 x_p49 3.430000 x_p50 3.500000 x_p51 3.570000 x_p52 3.640000 x_p53 3.710000 x_p54 3.780000 x_p55 3.850000 x_p56 3.920000 x_p57 3.990000 x_p58 4.060000 x_p59 4.130000 x_p60 4.200000 x_p61 4.270000 x_p62 4.340000 x_p63 4.410000 x_p64 4.480000 x_p65 4.550000 x_p66 4.620000 x_p67 4.690000 x_p68 4.760000 x_p69 4.830000 x_p70 4.900000 x_p71 4.970000 x_p72 5.040000 x_p73 5.110000 x_p74 5.180000 x_p75 5.250000 x_p76 5.320000 x_p77 5.390000 x_p78 5.460000 x_p79 5.530000 x_p80 5.600000 x_p81 5.670000 x_p82 5.740000 x_p83 5.810000 x_p84 5.880000 x_p85 5.950000 x_p86 6.020000 x_p87 6.090000 x_p88 6.160000 x_p89 6.230000 x_p90 6.300000 x_p91 6.370000 x_p92 6.440000 x_p93 6.510000 x_p94 6.580000 x_p95 6.650000 x_p96 6.720000 x_p97 6.790000 x_p98 6.860000 x_p99 6.930000 x_p100 7 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 9 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.080000 x_p02 0.160000 x_p03 0.240000 x_p04 0.320000 x_p05 0.400000 x_p06 0.480000 x_p07 0.560000 x_p08 0.640000 x_p09 0.720000 x_p10 0.800000 x_p11 0.880000 x_p12 0.960000 x_p13 1.040000 x_p14 1.120000 x_p15 1.200000 x_p16 1.280000 x_p17 1.360000 x_p18 1.440000 x_p19 1.520000 x_p20 1.600000 x_p21 1.680000 x_p22 1.760000 x_p23 1.840000 x_p24 1.920000 x_p25 2.000000 x_p26 2.080000 x_p27 2.160000 x_p28 2.240000 x_p29 2.320000 x_p30 2.400000 x_p31 2.480000 x_p32 2.560000 x_p33 2.640000 x_p34 2.720000 x_p35 2.800000 x_p36 2.880000 x_p37 2.960000 x_p38 3.040000 x_p39 3.120000 x_p40 3.200000 x_p41 3.280000 x_p42 3.360000 x_p43 3.440000 x_p44 3.520000 x_p45 3.600000 x_p46 3.680000 x_p47 3.760000 x_p48 3.840000 x_p49 3.920000 x_p50 4.000000 x_p51 4.080000 x_p52 4.160000 x_p53 4.240000 x_p54 4.320000 x_p55 4.400000 x_p56 4.480000 x_p57 4.560000 x_p58 4.640000 x_p59 4.720000 x_p60 4.800000 x_p61 4.880000 x_p62 4.960000 x_p63 5.040000 x_p64 5.120000 x_p65 5.200000 x_p66 5.280000 x_p67 5.360000 x_p68 5.440000 x_p69 5.520000 x_p70 5.600000 x_p71 5.680000 x_p72 5.760000 x_p73 5.840000 x_p74 5.920000 x_p75 6.000000 x_p76 6.080000 x_p77 6.160000 x_p78 6.240000 x_p79 6.320000 x_p80 6.400000 x_p81 6.480000 x_p82 6.560000 x_p83 6.640000 x_p84 6.720000 x_p85 6.800000 x_p86 6.880000 x_p87 6.960000 x_p88 7.040000 x_p89 7.120000 x_p90 7.200000 x_p91 7.280000 x_p92 7.360000 x_p93 7.440000 x_p94 7.520000 x_p95 7.600000 x_p96 7.680000 x_p97 7.760000 x_p98 7.840000 x_p99 7.920000 x_p100 8 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 10 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.090000 x_p02 0.180000 x_p03 0.270000 x_p04 0.360000 x_p05 0.450000 x_p06 0.540000 x_p07 0.630000 x_p08 0.720000 x_p09 0.810000 x_p10 0.900000 x_p11 0.990000 x_p12 1.080000 x_p13 1.170000 x_p14 1.260000 x_p15 1.350000 x_p16 1.440000 x_p17 1.530000 x_p18 1.620000 x_p19 1.710000 x_p20 1.800000 x_p21 1.890000 x_p22 1.980000 x_p23 2.070000 x_p24 2.160000 x_p25 2.250000 x_p26 2.340000 x_p27 2.430000 x_p28 2.520000 x_p29 2.610000 x_p30 2.700000 x_p31 2.790000 x_p32 2.880000 x_p33 2.970000 x_p34 3.060000 x_p35 3.150000 x_p36 3.240000 x_p37 3.330000 x_p38 3.420000 x_p39 3.510000 x_p40 3.600000 x_p41 3.690000 x_p42 3.780000 x_p43 3.870000 x_p44 3.960000 x_p45 4.050000 x_p46 4.140000 x_p47 4.230000 x_p48 4.320000 x_p49 4.410000 x_p50 4.500000 x_p51 4.590000 x_p52 4.680000 x_p53 4.770000 x_p54 4.860000 x_p55 4.950000 x_p56 5.040000 x_p57 5.130000 x_p58 5.220000 x_p59 5.310000 x_p60 5.400000 x_p61 5.490000 x_p62 5.580000 x_p63 5.670000 x_p64 5.760000 x_p65 5.850000 x_p66 5.940000 x_p67 6.030000 x_p68 6.120000 x_p69 6.210000 x_p70 6.300000 x_p71 6.390000 x_p72 6.480000 x_p73 6.570000 x_p74 6.660000 x_p75 6.750000 x_p76 6.840000 x_p77 6.930000 x_p78 7.020000 x_p79 7.110000 x_p80 7.200000 x_p81 7.290000 x_p82 7.380000 x_p83 7.470000 x_p84 7.560000 x_p85 7.650000 x_p86 7.740000 x_p87 7.830000 x_p88 7.920000 x_p89 8.010000 x_p90 8.100000 x_p91 8.190000 x_p92 8.280000 x_p93 8.370000 x_p94 8.460000 x_p95 8.550000 x_p96 8.640000 x_p97 8.730000 x_p98 8.820000 x_p99 8.910000 x_p100 9 mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 11 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 x_p00 0.000000 x_p01 0.100000 x_p02 0.200000 x_p03 0.300000 x_p04 0.400000 x_p05 0.500000 x_p06 0.600000 x_p07 0.700000 x_p08 0.800000 x_p09 0.900000 x_p10 1.000000 x_p11 1.100000 x_p12 1.200000 x_p13 1.300000 x_p14 1.400000 x_p15 1.500000 x_p16 1.600000 x_p17 1.700000 x_p18 1.800000 x_p19 1.900000 x_p20 2.000000 x_p21 2.100000 x_p22 2.200000 x_p23 2.300000 x_p24 2.400000 x_p25 2.500000 x_p26 2.600000 x_p27 2.700000 x_p28 2.800000 x_p29 2.900000 x_p30 3.000000 x_p31 3.100000 x_p32 3.200000 x_p33 3.300000 x_p34 3.400000 x_p35 3.500000 x_p36 3.600000 x_p37 3.700000 x_p38 3.800000 x_p39 3.900000 x_p40 4.000000 x_p41 4.100000 x_p42 4.200000 x_p43 4.300000 x_p44 4.400000 x_p45 4.500000 x_p46 4.600000 x_p47 4.700000 x_p48 4.800000 x_p49 4.900000 x_p50 5.000000 x_p51 5.100000 x_p52 5.200000 x_p53 5.300000 x_p54 5.400000 x_p55 5.500000 x_p56 5.600000 x_p57 5.700000 x_p58 5.800000 x_p59 5.900000 x_p60 6.000000 x_p61 6.100000 x_p62 6.200000 x_p63 6.300000 x_p64 6.400000 x_p65 6.500000 x_p66 6.600000 x_p67 6.700000 x_p68 6.800000 x_p69 6.900000 x_p70 7.000000 x_p71 7.100000 x_p72 7.200000 x_p73 7.300000 x_p74 7.400000 x_p75 7.500000 x_p76 7.600000 x_p77 7.700000 x_p78 7.800000 x_p79 7.900000 x_p80 8.000000 x_p81 8.100000 x_p82 8.200000 x_p83 8.300000 x_p84 8.400000 x_p85 8.500000 x_p86 8.600000 x_p87 8.700000 x_p88 8.800000 x_p89 8.900000 x_p90 9.000000 x_p91 9.100000 x_p92 9.200000 x_p93 9.300000 x_p94 9.400000 x_p95 9.500000 x_p96 9.600000 x_p97 9.700000 x_p98 9.800000 x_p99 9.900000 x_p100 10 ================================================================ DSL OPERATOR ASSOCIATIVITY mlr put -v $x = 1 || 2 || 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 || 2 || 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^^ 2 ^^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^^", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^^", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^^ 2 ^^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^^", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^^", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 && 2 && 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 && 2 && 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 == 2 == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 == 2 == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="==", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="==", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 != 2 != 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!=", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!=", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 != 2 != 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="!=", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="!=", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 =~ 2 =~ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="=~", type=OPERATOR: text="=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="=~", type=OPERATOR: text="=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 =~ 2 =~ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 !=~ 2 !=~ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!=~", type=OPERATOR: text="!=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!=~", type=OPERATOR: text="!=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 !=~ 2 !=~ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="!=~", type=OPERATOR: text="!=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="!=~", type=OPERATOR: text="!=~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 == 2 != 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!=", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!=", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 == 2 != 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="!=", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="!=", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 != 2 == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 != 2 == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="==", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="==", type=OPERATOR: text="!=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 < 2 < 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 < 2 < 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 <= 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 <= 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<=", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<=", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 > 2 > 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">", type=OPERATOR: text=">", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">", type=OPERATOR: text=">", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 > 2 > 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text=">", type=OPERATOR: text=">", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text=">", type=OPERATOR: text=">", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 >= 2 >= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">=", type=OPERATOR: text=">=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">=", type=OPERATOR: text=">=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 >= 2 >= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text=">=", type=OPERATOR: text=">=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text=">=", type=OPERATOR: text=">=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 < 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 < 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<=", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<=", type=OPERATOR: text="<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 <= 2 < 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 <= 2 < 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^ 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^ 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^ 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^ 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^ 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^ 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 << 2 << 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<<", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<<", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 << 2 << 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<<", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<<", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 >> 2 >> 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">>", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">>", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 >> 2 >> 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text=">>", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text=">>", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 << 2 >> 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">>", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=">>", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 << 2 >> 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text=">>", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text=">>", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 >> 2 << 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<<", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<<", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 >> 2 << 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<<", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<<", type=OPERATOR: text=">>", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 - 2 - 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 - 2 - 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + 2 - 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="-", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="-", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + 2 - 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="-", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="-", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 - 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 - 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 . 2 . 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=".", type=OPERATOR: text=".", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text=".", type=OPERATOR: text=".", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 . 2 . 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text=".", type=OPERATOR: text=".", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text=".", type=OPERATOR: text=".", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 / 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 / 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="/", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="/", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 // 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 // 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="//", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="//", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 % 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 % 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="%", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="%", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="/", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="/", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="//", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="//", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="%", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="%", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 / 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 / 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 / 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 / 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="//", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="//", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 / 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 / 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="%", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="%", type=OPERATOR: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 / 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 / 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="/", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 // 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 // 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 // 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 // 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="/", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="/", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 // 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 // 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="%", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="%", type=OPERATOR: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 // 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 // 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="//", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 % 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 % 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 % 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 % 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="/", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="/", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 % 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 % 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="//", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="//", type=OPERATOR: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 % 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 % 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="%", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="/", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 / 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="/", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="/", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="//", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 // 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="//", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="//", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="%", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 % 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="%", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="%", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = ++1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr filter -v ++1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr put -v $x = --1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr filter -v --1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="-", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr put -v $x = !!1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!", type=OPERATOR: text="!", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="!", type=OPERATOR: text="!", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr filter -v !!1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="!", type=OPERATOR: text="!", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="!", type=OPERATOR: text="!", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr put -v $x = ~~1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="~", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="~", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr filter -v ~~1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="~", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="~", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. mlr put -v $x = 1 ? 2 : 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ? 2 : 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ? 2 ? 3 : 4 : 5 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. mlr filter -v 1 ? 2 ? 3 : 4 : 5 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. mlr put -v $x = 1 ? 2 : 3 ? 4 : 5 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. mlr filter -v 1 ? 2 : 3 ? 4 : 5 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="? :", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="? :", type=OPERATOR: text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="5", type=NUMERIC_LITERAL. ================================================================ DSL OPERATOR PRECEDENCE mlr put -v $x = 1 || 2 ^^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 || 2 ^^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 || 2 && 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 || 2 && 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^^ 2 || 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^^ 2 || 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^^ 2 && 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^^ 2 && 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 && 2 || 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 && 2 || 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 && 2 ^^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^^", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^^", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 && 2 ^^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^^", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^^", type=OPERATOR: text="&&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 == 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<=", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<=", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 == 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<=", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<=", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 <= 2 == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="==", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 <= 2 == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="==", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="==", type=OPERATOR: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 <= 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="|", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="|", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 <= 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="|", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<=", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="|", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="<=", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | 2 <= 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="<=", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="<=", type=OPERATOR: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="^", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^ 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^ 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ^ 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ^ 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & 2 ^ 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="^", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & 2 << 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<<", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<<", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & 2 << 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<<", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="<<", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 << 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 << 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&", type=OPERATOR: text="<<", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + (2 * 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + (2 * 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * (2 + 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * (2 + 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = (1 + 2) * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v (1 + 2) * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = (1 * 2) + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v (1 * 2) + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + (2 ** 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + (2 ** 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** (2 + 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** (2 + 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = (1 + 2) ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v (1 + 2) ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="**", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="**", type=OPERATOR: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = (1 ** 2) + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v (1 ** 2) + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * (2 ** 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * (2 ** 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="**", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 ** (2 * 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 ** (2 * 3) /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = (1 * 2) ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="**", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v (1 * 2) ** 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="**", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="**", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = (1 ** 2) * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v (1 ** 2) * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="*", type=OPERATOR: text="**", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = -1 + 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v -1 + 2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = -1 * 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v -1 * 2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="*", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="*", type=OPERATOR: text="-", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + -2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + -2 * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * -2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * -2 + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 + 2 * -3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr filter -v 1 + 2 * -3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="*", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 * 2 + -3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr filter -v 1 * 2 + -3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="+", type=OPERATOR: text="*", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="-", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr put -v $x = ~1 | 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v ~1 | 2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = ~1 & 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v ~1 & 2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="&", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="&", type=OPERATOR: text="~", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | ~2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | ~2 & 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & ~2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & ~2 | 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 | 2 & ~3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr filter -v 1 | 2 & ~3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="&", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr put -v $x = 1 & 2 | ~3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr filter -v 1 & 2 | ~3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="|", type=OPERATOR: text="&", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="~", type=OPERATOR: text="3", type=NUMERIC_LITERAL. mlr put -v $x = $a==1 && $b == 1 && $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr filter -v $a==1 && $b == 1 && $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr put -v $x = $a==1 || $b == 1 && $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr filter -v $a==1 || $b == 1 && $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="&&", type=OPERATOR: text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr put -v $x = $a==1 || $b == 1 || $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr filter -v $a==1 || $b == 1 || $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="||", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr put -v $x = $a==1 && $b == 1 || $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="||", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr filter -v $a==1 && $b == 1 || $c == 1 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="&&", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr put -v $x = $a==1 ? $b == 2 : $c == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="? :", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr filter -v $a==1 ? $b == 2 : $c == 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="? :", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="? :", type=OPERATOR: text="==", type=OPERATOR: text="a", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="b", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="==", type=OPERATOR: text="c", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr put -v $x = true /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="true", type=BOOLEAN_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="true", type=BOOLEAN_LITERAL. mlr filter -v true /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="true", type=BOOLEAN_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="true", type=BOOLEAN_LITERAL. mlr put -v true || 1==0; $x = 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr filter -v true || 1==0 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. mlr put -v 1==0 || false; $x = 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. text="false", type=BOOLEAN_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. text="false", type=BOOLEAN_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr filter -v 1==0 || false /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. text="false", type=BOOLEAN_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="||", type=OPERATOR: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="0", type=NUMERIC_LITERAL. text="false", type=BOOLEAN_LITERAL. mlr put -v true && false; $x = 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr filter -v true && false /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. mlr put -v true && false && true; $x = 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. text="true", type=BOOLEAN_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. text="true", type=BOOLEAN_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr filter -v true && false && true /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. text="true", type=BOOLEAN_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="&&", type=OPERATOR: text="&&", type=OPERATOR: text="true", type=BOOLEAN_LITERAL. text="false", type=BOOLEAN_LITERAL. text="true", type=BOOLEAN_LITERAL. mlr put -v $y += $x + 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr put -v $y += $x * 3 /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="y", type=FIELD_NAME. text="*", type=OPERATOR: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="y", type=FIELD_NAME. text="*", type=OPERATOR: text="x", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. mlr put -v $y ||= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="||", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="||", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y ^^= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="^^", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="^^", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y &&= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="&&", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="&&", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y |= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="|", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="|", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y ^= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="^", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="^", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y &= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="&", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="&", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y <<= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="<<", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="<<", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y >>= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text=">>", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text=">>", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y += $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="+", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y -= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="-", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="-", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y .= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text=".", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text=".", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y *= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="*", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="*", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y /= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="/", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="/", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y //= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="//", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="//", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y %= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="%", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="%", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. mlr put -v $y **= $x /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="**", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="**", type=OPERATOR: text="y", type=FIELD_NAME. text="x", type=FIELD_NAME. ================================================================ DSL COMMENTS mlr --from ./reg_test/input/abixy put $s = 1; #$t = 2; $u = 3; a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,s=1,u=3 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,s=1,u=3 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,s=1,u=3 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,s=1,u=3 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,s=1,u=3 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,s=1,u=3 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,s=1,u=3 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,s=1,u=3 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,s=1,u=3 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,s=1,u=3 mlr --from ./reg_test/input/abixy filter NR == 1 || #NR == 2 || NR == 3 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 mlr --from ./reg_test/input/abixy put $s = "here is a pound#sign"; # but this is a comment #$t = 2; $u = 3; a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,s=here is a pound#sign,u=3 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,s=here is a pound#sign,u=3 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,s=here is a pound#sign,u=3 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,s=here is a pound#sign,u=3 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,s=here is a pound#sign,u=3 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,s=here is a pound#sign,u=3 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,s=here is a pound#sign,u=3 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,s=here is a pound#sign,u=3 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,s=here is a pound#sign,u=3 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,s=here is a pound#sign,u=3 ================================================================ DSL EMPTY STATEMENTS mlr -n put -v RAW AST: AST ROOT: (null) BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n filter -v mlr: filter statement must not be empty. RAW AST: AST ROOT: (null) mlr -n put -v begin {} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {;;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {;;;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {@x=1} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {@x=1;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {;@x=1} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {@x=1;@y=2} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v begin {@x=1;;@y=2} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v true {} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 mlr -n put -v true {;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 mlr -n put -v true {;;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 mlr -n put -v true {;;;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 mlr -n put -v true {@x=1} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr -n put -v true {@x=1;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr -n put -v true {;@x=1} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr -n put -v true {@x=1;@y=2} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. mlr -n put -v true {@x=1;;@y=2} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. mlr -n put -v end {} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {;;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {;;;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {@x=1} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {@x=1;} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {;@x=1} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {@x=1;@y=2} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr -n put -v end {@x=1;;@y=2} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="y", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 ================================================================ DSL CONTEXT-SPECIFIC VALIDATION ---------------------------------------------------------------- non-top-level begin/end mlr put -v begin{begin{@x=1}} mlr: begin statements are only valid at top level. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v true{begin{@x=1}} mlr: begin statements are only valid at top level. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v end{end{@x=1}} mlr: end statements are only valid at top level. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v true{end{@x=1}} mlr: end statements are only valid at top level. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="end", type=END: text="end_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. ---------------------------------------------------------------- srecs in begin/end mlr put -v begin{$x=1} mlr: assignments to $-variables are not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr put -v begin{@x=$y} mlr: statements involving $-variables are not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="y", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="y", type=FIELD_NAME. mlr put -v end{$x=1} mlr: assignments to $-variables are not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. mlr put -v end{@x=$y} mlr: statements involving $-variables are not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="y", type=FIELD_NAME. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="y", type=FIELD_NAME. mlr put -v begin{@v=$*} mlr: assignments from $-variables are not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="$*", type=FULL_SREC. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="$*", type=FULL_SREC. mlr put -v end{$*=@v} mlr: assignments to $-variables are not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v begin{unset $x} mlr: unset of $-variables is not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="x", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="x", type=FIELD_NAME. mlr put -v end{unset $x} mlr: unset of $-variables is not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="x", type=FIELD_NAME. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="x", type=FIELD_NAME. mlr put -v begin{unset $*} mlr: unset of $-variables is not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="$*", type=FULL_SREC. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="$*", type=FULL_SREC. mlr put -v end{unset $*} mlr: unset of $-variables is not valid within begin or end blocks. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="$*", type=FULL_SREC. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="$*", type=FULL_SREC. ---------------------------------------------------------------- break/continue outside loop mlr put -v break mlr: break statements are only valid within for, while, or do-while. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="break", type=BREAK. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="break", type=BREAK. mlr put -v continue mlr: break statements are only valid within for, while, or do-while. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="continue", type=CONTINUE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="continue", type=CONTINUE. ---------------------------------------------------------------- oosvars etc. in mlr filter mlr filter -v break mlr: filter expressions must end in a final boolean statement. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="break", type=BREAK. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="break", type=BREAK. mlr filter -v continue mlr: filter expressions must end in a final boolean statement. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="continue", type=CONTINUE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="continue", type=CONTINUE. ---------------------------------------------------------------- expanded filter mlr --from ./reg_test/input/abixy filter begin { @avoid = 3 } NR != @avoid a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy filter -x begin { @avoid = 3 } NR != @avoid a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 mlr --from ./reg_test/input/abixy filter func f(n) { return n - 1 } f(NR) == 5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 mlr --from ./reg_test/input/abixy filter subr s(n) { print "NR is ".n } call s(NR); false NR is 1 NR is 2 NR is 3 NR is 4 NR is 5 NR is 6 NR is 7 NR is 8 NR is 9 NR is 10 mlr --from ./reg_test/input/abixy filter int a = 5; int b = 7; a <= NR && NR <= b a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 mlr --from ./reg_test/input/abixy filter filter false mlr filter: expressions must not also contain the "filter" keyword. mlr --from ./reg_test/input/abixy filter filter false; true mlr filter: expressions must not also contain the "filter" keyword. ================================================================ DSL FUNCTIONAL TESTS mlr filter $x>.3 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr filter $x>.3; ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr filter $x>0.3 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr filter $x>0.3 && $y>0.3 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr filter $x>0.3 || $y>0.3 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr filter NR>=4 && NR <= 7 ./reg_test/input/abixy a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 mlr filter -x $x>.3 ./reg_test/input/abixy a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr filter -x $x>0.3 ./reg_test/input/abixy a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr filter -x $x>0.3 && $y>0.3 ./reg_test/input/abixy a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 mlr filter -x $x>0.3 || $y>0.3 ./reg_test/input/abixy mlr filter -x NR>=4 && NR <= 7 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr filter $nosuchfield>.3 ./reg_test/input/abixy mlr put $x2 = $x**2 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x2=0.120263 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x2=0.575595 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x2=0.041863 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x2=0.145465 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,x2=0.328660 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x2=0.277862 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,x2=0.374280 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,x2=0.358267 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x2=0.000989 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x2=0.252633 mlr put $x2 = $x**2; ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x2=0.120263 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x2=0.575595 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x2=0.041863 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x2=0.145465 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,x2=0.328660 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x2=0.277862 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,x2=0.374280 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,x2=0.358267 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x2=0.000989 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x2=0.252633 mlr put $z = -0.024*$x+0.13 ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,z=0.121677 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,z=0.111792 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,z=0.125090 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,z=0.120846 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,z=0.116241 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,z=0.117349 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,z=0.115317 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,z=0.115635 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,z=0.129245 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,z=0.117937 mlr put $c = $a . $b ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=panpan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=ekspan a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=wyewye a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=ekswye a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=wyepan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=zeepan a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=ekszee a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=zeewye a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=hatwye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=panwye mlr put $ii = $i + $i ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ii=2 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ii=4 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ii=6 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ii=8 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,ii=10 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,ii=12 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,ii=14 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,ii=16 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,ii=18 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,ii=20 mlr put $emptytest = $i + $nosuch ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,emptytest=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,emptytest=2 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,emptytest=3 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,emptytest=4 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,emptytest=5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,emptytest=6 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,emptytest=7 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,emptytest=8 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,emptytest=9 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,emptytest=10 mlr --opprint put $nr=NR;$fnr=FNR;$nf=NF;$filenum=FILENUM ./reg_test/input/abixy ./reg_test/input/abixy a b i x y nr fnr nf filenum pan pan 1 0.3467901443380824 0.7268028627434533 1 1 7 1 eks pan 2 0.7586799647899636 0.5221511083334797 2 2 7 1 wye wye 3 0.20460330576630303 0.33831852551664776 3 3 7 1 eks wye 4 0.38139939387114097 0.13418874328430463 4 4 7 1 wye pan 5 0.5732889198020006 0.8636244699032729 5 5 7 1 zee pan 6 0.5271261600918548 0.49322128674835697 6 6 7 1 eks zee 7 0.6117840605678454 0.1878849191181694 7 7 7 1 zee wye 8 0.5985540091064224 0.976181385699006 8 8 7 1 hat wye 9 0.03144187646093577 0.7495507603507059 9 9 7 1 pan wye 10 0.5026260055412137 0.9526183602969864 10 10 7 1 pan pan 1 0.3467901443380824 0.7268028627434533 11 1 7 2 eks pan 2 0.7586799647899636 0.5221511083334797 12 2 7 2 wye wye 3 0.20460330576630303 0.33831852551664776 13 3 7 2 eks wye 4 0.38139939387114097 0.13418874328430463 14 4 7 2 wye pan 5 0.5732889198020006 0.8636244699032729 15 5 7 2 zee pan 6 0.5271261600918548 0.49322128674835697 16 6 7 2 eks zee 7 0.6117840605678454 0.1878849191181694 17 7 7 2 zee wye 8 0.5985540091064224 0.976181385699006 18 8 7 2 hat wye 9 0.03144187646093577 0.7495507603507059 19 9 7 2 pan wye 10 0.5026260055412137 0.9526183602969864 20 10 7 2 mlr --opprint put $y=madd($x,10,37) then put $z=msub($x,10,37) ./reg_test/input/modarith.dat x y z -37 10 27 -36 11 28 -35 12 29 -34 13 30 -33 14 31 -32 15 32 -31 16 33 -30 17 34 -29 18 35 -28 19 36 -27 20 0 -26 21 1 -25 22 2 -24 23 3 -23 24 4 -22 25 5 -21 26 6 -20 27 7 -19 28 8 -18 29 9 -17 30 10 -16 31 11 -15 32 12 -14 33 13 -13 34 14 -12 35 15 -11 36 16 -10 0 17 -9 1 18 -8 2 19 -7 3 20 -6 4 21 -5 5 22 -4 6 23 -3 7 24 -2 8 25 -1 9 26 0 10 27 1 11 28 2 12 29 3 13 30 4 14 31 5 15 32 6 16 33 7 17 34 8 18 35 9 19 36 10 20 0 11 21 1 12 22 2 13 23 3 14 24 4 15 25 5 16 26 6 17 27 7 18 28 8 19 29 9 20 30 10 21 31 11 22 32 12 23 33 13 24 34 14 25 35 15 26 36 16 27 0 17 28 1 18 29 2 19 30 3 20 31 4 21 32 5 22 33 6 23 34 7 24 35 8 25 36 9 26 37 10 27 38 11 28 39 12 29 40 13 30 41 14 31 42 15 32 43 16 33 44 17 34 45 18 35 46 19 36 47 20 0 48 21 1 49 22 2 50 23 3 51 24 4 52 25 5 53 26 6 54 27 7 55 28 8 56 29 9 57 30 10 58 31 11 59 32 12 60 33 13 61 34 14 62 35 15 63 36 16 64 0 17 65 1 18 66 2 19 67 3 20 68 4 21 69 5 22 70 6 23 71 7 24 72 8 25 73 9 26 mlr --opprint put $y=mexp($x,35,37) then put $z=mmul($x,$y,37) ./reg_test/input/modarith.dat x y z -37 0 0 -36 1 1 -35 19 1 -34 25 1 -33 28 1 -32 15 1 -31 31 1 -30 16 1 -29 14 1 -28 33 1 -27 26 1 -26 27 1 -25 34 1 -24 20 1 -23 8 1 -22 5 1 -21 7 1 -20 24 1 -19 35 1 -18 2 1 -17 13 1 -16 30 1 -15 32 1 -14 29 1 -13 17 1 -12 3 1 -11 10 1 -10 11 1 -9 4 1 -8 23 1 -7 21 1 -6 6 1 -5 22 1 -4 9 1 -3 12 1 -2 18 1 -1 36 1 0 0 0 1 1 1 2 19 1 3 25 1 4 28 1 5 15 1 6 31 1 7 16 1 8 14 1 9 33 1 10 26 1 11 27 1 12 34 1 13 20 1 14 8 1 15 5 1 16 7 1 17 24 1 18 35 1 19 2 1 20 13 1 21 30 1 22 32 1 23 29 1 24 17 1 25 3 1 26 10 1 27 11 1 28 4 1 29 23 1 30 21 1 31 6 1 32 22 1 33 9 1 34 12 1 35 18 1 36 36 1 37 0 0 38 1 1 39 19 1 40 25 1 41 28 1 42 15 1 43 31 1 44 16 1 45 14 1 46 33 1 47 26 1 48 27 1 49 34 1 50 20 1 51 8 1 52 5 1 53 7 1 54 24 1 55 35 1 56 2 1 57 13 1 58 30 1 59 32 1 60 29 1 61 17 1 62 3 1 63 10 1 64 11 1 65 4 1 66 23 1 67 21 1 68 6 1 69 22 1 70 9 1 71 12 1 72 18 1 73 36 1 mlr put $z=min($x, $y) ./reg_test/input/minmax.dkvp x=1,y=2,z=1 x=1,y=,z=1 x=,y=,z= x=,y=2,z=2 x=3,y=2,z=2 x=3,y=,z=3 x=,y=,z= x=,y=2,z=2 mlr put $z=max($x, $y) ./reg_test/input/minmax.dkvp x=1,y=2,z=2 x=1,y=,z=1 x=,y=,z= x=,y=2,z=2 x=3,y=2,z=3 x=3,y=,z=3 x=,y=,z= x=,y=2,z=2 mlr put $o=min() x=1,y=2,z=3,o= mlr put $o=max() x=1,y=2,z=3,o= mlr put $o=min($x) x=1,y=2,z=3,o=1 mlr put $o=max($x) x=1,y=2,z=3,o=1 mlr put $o=min($x,$y) x=1,y=2,z=3,o=1 mlr put $o=max($x,$y) x=1,y=2,z=3,o=2 mlr put $o=min($x,$y,$z) x=1,y=2,z=3,o=1 mlr put $o=max($x,$y,$z) x=1,y=2,z=3,o=3 mlr put $u=min($x,$y);$v=max($x,$y) x=1,y=b,u=1,v=b mlr put $u=min($x,$y);$v=max($x,$y) x=a,y=2,u=2,v=a mlr put $u=min($x,$y);$v=max($x,$y) x=a,y=b,u=a,v=b mlr --icsvlite --oxtab put ${x+y} = ${name.x} + ${name.y}; ${x*y} = ${name.x} * ${name.y} ./reg_test/input/braced.csv name.x 1 name.y 2 z 3 x+y 3 x*y 2 name.x 4 name.y 6 z 5 x+y 10 x*y 24 mlr --icsvlite --oxtab filter ${name.y} < ${z} ./reg_test/input/braced.csv name.x 1 name.y 2 z 3 mlr --opprint put $z = $x < 0.5 ? 0 : 1 ./reg_test/input/abixy a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 0 eks pan 2 0.7586799647899636 0.5221511083334797 1 wye wye 3 0.20460330576630303 0.33831852551664776 0 eks wye 4 0.38139939387114097 0.13418874328430463 0 wye pan 5 0.5732889198020006 0.8636244699032729 1 zee pan 6 0.5271261600918548 0.49322128674835697 1 eks zee 7 0.6117840605678454 0.1878849191181694 1 zee wye 8 0.5985540091064224 0.976181385699006 1 hat wye 9 0.03144187646093577 0.7495507603507059 0 pan wye 10 0.5026260055412137 0.9526183602969864 1 mlr --csvlite filter true && true ./reg_test/input/b.csv d,e,f 5,6,7 mlr --csvlite filter true && false ./reg_test/input/b.csv mlr --csvlite filter false && true ./reg_test/input/b.csv mlr --csvlite filter false && false ./reg_test/input/b.csv mlr --csvlite filter true || true ./reg_test/input/b.csv d,e,f 5,6,7 mlr --csvlite filter true || false ./reg_test/input/b.csv d,e,f 5,6,7 mlr --csvlite filter false || true ./reg_test/input/b.csv d,e,f 5,6,7 mlr --csvlite filter false || false ./reg_test/input/b.csv mlr --csvlite filter true ^^ true ./reg_test/input/b.csv mlr --csvlite filter true ^^ false ./reg_test/input/b.csv d,e,f 5,6,7 mlr --csvlite filter false ^^ true ./reg_test/input/b.csv d,e,f 5,6,7 mlr --csvlite filter false ^^ false ./reg_test/input/b.csv mlr put $x==2 && $a =~ "....." { $y=4 } ./reg_test/input/short-circuit.dkvp x=1,a="hello" x=2,a="there",y=4 x=3,a="world" mlr put $x = ENV["X"]; $y = ENV[$name] ./reg_test/input/env-var.dkvp name=X,x=97,y=97 name=Y,x=97,y=98 x=97,y=6 mlr put $x = ENV["X"]; $y = ENV[$name] ./reg_test/input/env-var.dkvp name=X,x=,y= name=Y,x=,y= x=,y=6 mlr -n put begin{ENV["HOME"]="foobar"} end{print ENV["HOME"]} foobar mlr put $y = toupper($x) x=hello,y=HELLO mlr put $y = toupper($x) x=HELLO,y=HELLO mlr put $y = toupper($x) x=,y= mlr put $y = toupper($z) x=hello mlr put $y = tolower($x) x=hello,y=hello mlr put $y = tolower($x) x=HELLO,y=hello mlr put $y = tolower($x) x=,y= mlr put $y = tolower($z) x=hello mlr put $y = capitalize($x) x=hello,y=Hello mlr put $y = capitalize($x) x=HELLO,y=HELLO mlr put $y = capitalize($x) x=,y= mlr put $y = capitalize($z) x=hello ---------------------------------------------------------------- LHS value on first record should result in ZYX for process creation mlr --from ./reg_test/input/abixy put ENV["ZYX"]="CBA".NR; print | ENV["indir"]."/env-assign.sh" , "a is " . $a [ZYX]=[CBA1] a is pan [ZYX]=[CBA1] a is eks [ZYX]=[CBA1] a is wye [ZYX]=[CBA1] a is eks [ZYX]=[CBA1] a is wye [ZYX]=[CBA1] a is zee [ZYX]=[CBA1] a is eks [ZYX]=[CBA1] a is zee [ZYX]=[CBA1] a is hat [ZYX]=[CBA1] a is pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ POSITIONAL INDEXING mlr --opprint put $NEW = $[[3]] ./reg_test/input/abixy a b i x y NEW pan pan 1 0.3467901443380824 0.7268028627434533 i eks pan 2 0.7586799647899636 0.5221511083334797 i wye wye 3 0.20460330576630303 0.33831852551664776 i eks wye 4 0.38139939387114097 0.13418874328430463 i wye pan 5 0.5732889198020006 0.8636244699032729 i zee pan 6 0.5271261600918548 0.49322128674835697 i eks zee 7 0.6117840605678454 0.1878849191181694 i zee wye 8 0.5985540091064224 0.976181385699006 i hat wye 9 0.03144187646093577 0.7495507603507059 i pan wye 10 0.5026260055412137 0.9526183602969864 i mlr --opprint put $NEW = $[[[3]]] ./reg_test/input/abixy a b i x y NEW pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 2 wye wye 3 0.20460330576630303 0.33831852551664776 3 eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint put $NEW = $[[11]] ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $NEW = $[[[11]]] ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $[[3]] = "NEW" ./reg_test/input/abixy a b NEW x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $[[[3]]] = "NEW" ./reg_test/input/abixy a b i x y pan pan NEW 0.3467901443380824 0.7268028627434533 eks pan NEW 0.7586799647899636 0.5221511083334797 wye wye NEW 0.20460330576630303 0.33831852551664776 eks wye NEW 0.38139939387114097 0.13418874328430463 wye pan NEW 0.5732889198020006 0.8636244699032729 zee pan NEW 0.5271261600918548 0.49322128674835697 eks zee NEW 0.6117840605678454 0.1878849191181694 zee wye NEW 0.5985540091064224 0.976181385699006 hat wye NEW 0.03144187646093577 0.7495507603507059 pan wye NEW 0.5026260055412137 0.9526183602969864 mlr --opprint put $[[11]] = "NEW" ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $[[[11]]] = "NEW" ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $[[1]] = $[[2]] ./reg_test/input/abixy b i x y pan 1 0.3467901443380824 0.7268028627434533 eks 2 0.7586799647899636 0.5221511083334797 wye 3 0.20460330576630303 0.33831852551664776 eks 4 0.38139939387114097 0.13418874328430463 wye 5 0.5732889198020006 0.8636244699032729 zee 6 0.5271261600918548 0.49322128674835697 eks 7 0.6117840605678454 0.1878849191181694 zee 8 0.5985540091064224 0.976181385699006 hat 9 0.03144187646093577 0.7495507603507059 pan 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $a = $[[2]]; unset $["a"] ./reg_test/input/abixy b i x y a pan 1 0.3467901443380824 0.7268028627434533 b pan 2 0.7586799647899636 0.5221511083334797 b wye 3 0.20460330576630303 0.33831852551664776 b wye 4 0.38139939387114097 0.13418874328430463 b pan 5 0.5732889198020006 0.8636244699032729 b pan 6 0.5271261600918548 0.49322128674835697 b zee 7 0.6117840605678454 0.1878849191181694 b wye 8 0.5985540091064224 0.976181385699006 b wye 9 0.03144187646093577 0.7495507603507059 b wye 10 0.5026260055412137 0.9526183602969864 b mlr --opprint put $[[1]] = $b; unset $[[1]] ./reg_test/input/abixy b i x y pan 1 0.3467901443380824 0.7268028627434533 pan 2 0.7586799647899636 0.5221511083334797 wye 3 0.20460330576630303 0.33831852551664776 wye 4 0.38139939387114097 0.13418874328430463 pan 5 0.5732889198020006 0.8636244699032729 pan 6 0.5271261600918548 0.49322128674835697 zee 7 0.6117840605678454 0.1878849191181694 wye 8 0.5985540091064224 0.976181385699006 wye 9 0.03144187646093577 0.7495507603507059 wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put $[[1]] = $[[2]]; unset $["a"] ./reg_test/input/abixy b i x y pan 1 0.3467901443380824 0.7268028627434533 eks 2 0.7586799647899636 0.5221511083334797 wye 3 0.20460330576630303 0.33831852551664776 eks 4 0.38139939387114097 0.13418874328430463 wye 5 0.5732889198020006 0.8636244699032729 zee 6 0.5271261600918548 0.49322128674835697 eks 7 0.6117840605678454 0.1878849191181694 zee 8 0.5985540091064224 0.976181385699006 hat 9 0.03144187646093577 0.7495507603507059 pan 10 0.5026260055412137 0.9526183602969864 mlr --opprint put unset $c ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put unset $c; $c="new" ./reg_test/input/abixy a b i x y c pan pan 1 0.3467901443380824 0.7268028627434533 new eks pan 2 0.7586799647899636 0.5221511083334797 new wye wye 3 0.20460330576630303 0.33831852551664776 new eks wye 4 0.38139939387114097 0.13418874328430463 new wye pan 5 0.5732889198020006 0.8636244699032729 new zee pan 6 0.5271261600918548 0.49322128674835697 new eks zee 7 0.6117840605678454 0.1878849191181694 new zee wye 8 0.5985540091064224 0.976181385699006 new hat wye 9 0.03144187646093577 0.7495507603507059 new pan wye 10 0.5026260055412137 0.9526183602969864 new mlr --opprint put $c=$a.$b; unset $c; $c="new" ./reg_test/input/abixy a b i x y c pan pan 1 0.3467901443380824 0.7268028627434533 new eks pan 2 0.7586799647899636 0.5221511083334797 new wye wye 3 0.20460330576630303 0.33831852551664776 new eks wye 4 0.38139939387114097 0.13418874328430463 new wye pan 5 0.5732889198020006 0.8636244699032729 new zee pan 6 0.5271261600918548 0.49322128674835697 new eks zee 7 0.6117840605678454 0.1878849191181694 new zee wye 8 0.5985540091064224 0.976181385699006 new hat wye 9 0.03144187646093577 0.7495507603507059 new pan wye 10 0.5026260055412137 0.9526183602969864 new mlr --opprint put $c=$a.$b; unset $c ./reg_test/input/abixy a b i x y c pan pan 1 0.3467901443380824 0.7268028627434533 panpan eks pan 2 0.7586799647899636 0.5221511083334797 ekspan wye wye 3 0.20460330576630303 0.33831852551664776 wyewye eks wye 4 0.38139939387114097 0.13418874328430463 ekswye wye pan 5 0.5732889198020006 0.8636244699032729 wyepan zee pan 6 0.5271261600918548 0.49322128674835697 zeepan eks zee 7 0.6117840605678454 0.1878849191181694 ekszee zee wye 8 0.5985540091064224 0.976181385699006 zeewye hat wye 9 0.03144187646093577 0.7495507603507059 hatwye pan wye 10 0.5026260055412137 0.9526183602969864 panwye ================================================================ IS-PREDICATES mlr --opprint put $f=is_absent($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_absent($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_absent($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_absent($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_absent(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put @somesuch=1;$f=is_absent(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_bool($x>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_bool($y>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_bool($z>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_bool($nosuch>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_bool(@nosuch>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_bool(@somesuch>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_boolean($x>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_boolean($y>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_boolean($z>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_boolean($nosuch>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_boolean(@nosuch>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_boolean(@somesuch>1) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_empty($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - true b - - - true mlr --opprint put $f=is_empty($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - true b - 6 - false b - - - true mlr --opprint put $f=is_empty($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_empty($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_empty(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_empty_map({}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put @somesuch=1;$f=is_empty_map(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_float({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_float(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_int($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - false b - - - false mlr --opprint put $f=is_int($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - false b - 6 - true b - - - false mlr --opprint put $f=is_int($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_int($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_int(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_int($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_int({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_int(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_map($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_map($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_map($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_map($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_map(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_map($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_map({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_map({}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put @somesuch=1;$f=is_map(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_nonempty_map($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_nonempty_map($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_nonempty_map($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_nonempty_map($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_nonempty_map(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_nonempty_map($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_nonempty_map({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_nonempty_map({}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_nonempty_map(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_not_empty($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - false b - - - false mlr --opprint put $f=is_not_empty($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - false b - 6 - true b - - - false mlr --opprint put $f=is_not_empty($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_not_empty($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_empty(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_empty($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_empty({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put @somesuch=1;$f=is_not_empty(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_map($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_map($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_map($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_map($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_map(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_map($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_not_map({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_not_map({}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_not_map(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_not_null($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - false b - - - false mlr --opprint put $f=is_not_null($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - false b - 6 - true b - - - false mlr --opprint put $f=is_not_null($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_not_null($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_not_null(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_not_null(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_null($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - true b - - - true mlr --opprint put $f=is_null($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - true b - 6 - false b - - - true mlr --opprint put $f=is_null($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_null($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_null(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put @somesuch=1;$f=is_null(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_numeric($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - false b - - - false mlr --opprint put $f=is_numeric($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - false b - 6 - true b - - - false mlr --opprint put $f=is_numeric($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_numeric($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_numeric(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_numeric(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_present($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_present($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_present($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_present($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_present(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_present(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_string($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - true b - - - true mlr --opprint put $f=is_string($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - true b - 6 - false b - - - true mlr --opprint put $f=is_string($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=is_string($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=is_string(@nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put @somesuch=1;$f=is_string(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false ================================================================ ASSERTION PASS-THROUGHS mlr --opprint put $f=asserting_absent($nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_absent(@nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_absent($x) ./reg_test/input/nullvals.dkvp mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_absent($y) ./reg_test/input/nullvals.dkvp mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_absent($z) ./reg_test/input/nullvals.dkvp mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_absent(@somesuch) ./reg_test/input/nullvals.dkvp mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put foo=asserting_absent($*) ./reg_test/input/nullvals.dkvp mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put foo=asserting_absent({1:2}) ./reg_test/input/nullvals.dkvp mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - - b 3 4 - - b 5 - - - b - 6 - - b - - - - mlr --opprint put $f=asserting_empty($x) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty($y) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty($nosuch) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty(@nosuch) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty({1:2}) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_empty(@somesuch) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put foo=asserting_empty($*) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put foo=asserting_empty({1:2}) ./reg_test/input/nullvals.dkvp mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map({}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $f=asserting_empty_map($*) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map($x) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map($y) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map($z) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map($nosuch) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map(@nosuch) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_empty_map({1:2}) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_empty_map(@somesuch) ./reg_test/input/nullvals.dkvp mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_map($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $f=asserting_map({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $f=asserting_map({}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $f=asserting_map($x) ./reg_test/input/nullvals.dkvp mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_map($y) ./reg_test/input/nullvals.dkvp mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_map($z) ./reg_test/input/nullvals.dkvp mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_map($nosuch) ./reg_test/input/nullvals.dkvp mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_map(@nosuch) ./reg_test/input/nullvals.dkvp mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_map(@somesuch) ./reg_test/input/nullvals.dkvp mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_nonempty_map($*) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $f=asserting_nonempty_map({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $f=asserting_nonempty_map($x) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_nonempty_map($y) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_nonempty_map($z) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_nonempty_map($nosuch) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_nonempty_map(@nosuch) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_nonempty_map({}) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_nonempty_map(@somesuch) ./reg_test/input/nullvals.dkvp mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $*=asserting_not_empty($*) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_not_empty($nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_not_empty(@nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_not_empty({1:2}) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - (error) b 3 4 - (error) b 5 - - (error) b - 6 - (error) b - - - (error) mlr --opprint put $nosuch=asserting_not_empty($nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put @somesuch=1;$f=asserting_not_empty(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 1 b 3 4 - 1 b 5 - - 1 b - 6 - 1 b - - - 1 mlr --opprint put $*=asserting_not_empty($*) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $*=asserting_not_empty({1:2}) ./reg_test/input/nullvals.dkvp 1 2 2 2 2 2 mlr --opprint put $f=asserting_not_empty($x) ./reg_test/input/nullvals.dkvp mlr: not_empty type-assertion failed at NR=4 FNR=4 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_empty($y) ./reg_test/input/nullvals.dkvp mlr: not_empty type-assertion failed at NR=3 FNR=3 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_empty($z) ./reg_test/input/nullvals.dkvp mlr: not_empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_map($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 1 b 3 4 - 3 b 5 - - 5 b - 6 - - b - - - - mlr --opprint put $f=asserting_not_map($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 2 b 3 4 - 4 b 5 - - - b - 6 - 6 b - - - - mlr --opprint put $f=asserting_not_map($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - - b 3 4 - - b 5 - - - b - 6 - - b - - - - mlr --opprint put $f=asserting_not_map($nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_not_map(@nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put @somesuch=1;$f=asserting_not_map(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 1 b 3 4 - 1 b 5 - - 1 b - 6 - 1 b - - - 1 mlr --opprint put $f=asserting_not_map($*) ./reg_test/input/nullvals.dkvp mlr: not_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_map({1:2}) ./reg_test/input/nullvals.dkvp mlr: not_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_map({}) ./reg_test/input/nullvals.dkvp mlr: not_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_not_null(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 1 b 3 4 - 1 b 5 - - 1 b - 6 - 1 b - - - 1 mlr --opprint put $*=asserting_not_null($*) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $*=asserting_not_null({1:2}) ./reg_test/input/nullvals.dkvp 1 2 2 2 2 2 mlr --opprint put $f=asserting_not_null($x) ./reg_test/input/nullvals.dkvp mlr: not_null type-assertion failed at NR=4 FNR=4 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_null($y) ./reg_test/input/nullvals.dkvp mlr: not_null type-assertion failed at NR=3 FNR=3 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_null($z) ./reg_test/input/nullvals.dkvp mlr: not_null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_null($nosuch) ./reg_test/input/nullvals.dkvp mlr: not_null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_not_null(@nosuch) ./reg_test/input/nullvals.dkvp mlr: not_null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_null($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - - b 3 4 - - b 5 - - - b - 6 - - b - - - - mlr --opprint put $f=asserting_null($nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_null(@nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $f=asserting_null($x) ./reg_test/input/nullvals.dkvp mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_null($y) ./reg_test/input/nullvals.dkvp mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put @somesuch=1;$f=asserting_null(@somesuch) ./reg_test/input/nullvals.dkvp mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $*=asserting_null($*) ./reg_test/input/nullvals.dkvp mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $*=asserting_null({1:2}) ./reg_test/input/nullvals.dkvp mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_numeric($x) ./reg_test/input/nullvals.dkvp mlr: numeric type-assertion failed at NR=4 FNR=4 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_numeric($y) ./reg_test/input/nullvals.dkvp mlr: numeric type-assertion failed at NR=3 FNR=3 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_numeric($z) ./reg_test/input/nullvals.dkvp mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $*=asserting_numeric($*) ./reg_test/input/nullvals.dkvp mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $*=asserting_numeric({1:2}) ./reg_test/input/nullvals.dkvp mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_numeric($nosuch) ./reg_test/input/nullvals.dkvp mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_present($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 1 b 3 4 - 3 b 5 - - 5 b - 6 - - b - - - - mlr --opprint put $f=asserting_present($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 2 b 3 4 - 4 b 5 - - - b - 6 - 6 b - - - - mlr --opprint put $f=asserting_present($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - - b 3 4 - - b 5 - - - b - 6 - - b - - - - mlr --opprint put @somesuch=1;$f=asserting_present(@somesuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - 1 b 3 4 - 1 b 5 - - 1 b - 6 - 1 b - - - 1 mlr --opprint put $*=asserting_present($*) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint put $*=asserting_present({1:2}) ./reg_test/input/nullvals.dkvp 1 2 2 2 2 2 mlr --opprint put $f=asserting_present($nosuch) ./reg_test/input/nullvals.dkvp mlr: present type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_present(@nosuch) ./reg_test/input/nullvals.dkvp mlr: present type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_string($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - - b 3 4 - - b 5 - - - b - 6 - - b - - - - mlr --opprint put $*=asserting_string($*) ./reg_test/input/nullvals.dkvp mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $*=asserting_string({1:2}) ./reg_test/input/nullvals.dkvp mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_string($x) ./reg_test/input/nullvals.dkvp mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_string($y) ./reg_test/input/nullvals.dkvp mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp mlr --opprint put $f=asserting_string($nosuch) ./reg_test/input/nullvals.dkvp mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp ================================================================ DSL NULL/EMPTY HANDLING mlr put $z = $s . $s ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=hellohello x=1,y=,s=,z= x=,y=,s=hurrah,z=hurrahhurrah mlr put $z = $s == "" ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=false x=1,y=,s=,z=true x=,y=,s=hurrah,z=false mlr put $z = $s == $s ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=true x=1,y=,s=,z=true x=,y=,s=hurrah,z=true mlr put $z = is_empty($s) ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=false x=1,y=,s=,z=true x=,y=,s=hurrah,z=false mlr put $z = $x + $y ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=3 x=1,y=,s=,z= x=,y=,s=hurrah,z= mlr put $z = $y + $y ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=4 x=1,y=,s=,z= x=,y=,s=hurrah,z= mlr put $z = $x + $nosuch ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=1 x=1,y=,s=,z=1 x=,y=,s=hurrah mlr put $t = sub($s, "ell", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=hXo x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah mlr put $t = sub($s, "ell", "") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=ho x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah mlr put $t = sub($nosuch, "ell", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello x=1,y=,s= x=,y=,s=hurrah mlr put $t = gsub($s, "l", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=heXXo x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah mlr put $t = gsub($s, "l", "") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=heo x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah mlr put $t = gsub($nosuch, "l", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello x=1,y=,s= x=,y=,s=hurrah ---------------------------------------------------------------- EMIT mlr put -q @v=1; @nonesuch {emit @v} ./reg_test/input/abixy mlr put -q @v=1; @nonesuch==true {emit @v} ./reg_test/input/abixy mlr put -q @v=1; $nonesuch {emit @v} ./reg_test/input/abixy mlr put -q @v=1; $nonesuch==true {emit @v} ./reg_test/input/abixy ---------------------------------------------------------------- PLUS mlr --ofs tab put begin{}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=2 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=2 x= y= xy= a=1 y=2 xy=2 sy=2 a=1 y= a= y=2 xy=2 sy=2 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=5 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=5 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=2 sy=5 st=3 a=1 y= sy= st=3 a= y=2 xy=2 sy=5 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=2 xt=5 st=4 x=1 y= xy= xt=5 st=4 x= y=2 xy= sy=2 xt= st=4 x= y= xy= xt= st=4 a=1 y=2 xy=2 sy=2 xt=4 st=4 a=1 y= xt=4 st=4 a= y=2 xy=2 sy=2 xt=4 st=4 a= y= xt=4 st=4 x=1 b=2 xy=1 xt=5 st=4 x=1 b= xy=1 xt=5 st=4 x= b=2 xt= st=4 x= b= xt= st=4 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=5 xt=5 st=7 x=1 y= xy= sy= xt=5 st=7 x= y=2 xy= sy=5 xt= st=7 x= y= xy= sy= xt= st=7 a=1 y=2 xy=2 sy=5 xt=4 st=7 a=1 y= sy= xt=4 st=7 a= y=2 xy=2 sy=5 xt=4 st=7 a= y= sy= xt=4 st=7 x=1 b=2 xy=1 sy=3 xt=5 st=7 x=1 b= xy=1 sy=3 xt=5 st=7 x= b=2 sy=3 xt= st=7 x= b= sy=3 xt= st=7 ---------------------------------------------------------------- MINUS mlr --ofs tab put begin{}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=-1 sy=2 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=2 x= y= xy= a=1 y=2 xy=2 sy=2 a=1 y= a= y=2 xy=2 sy=2 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=-1 sy=1 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=1 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=2 sy=1 st=3 a=1 y= sy= st=3 a= y=2 xy=2 sy=1 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=-1 sy=2 xt=-3 st=4 x=1 y= xy= xt=-3 st=4 x= y=2 xy= sy=2 xt= st=4 x= y= xy= xt= st=4 a=1 y=2 xy=2 sy=2 xt=4 st=4 a=1 y= xt=4 st=4 a= y=2 xy=2 sy=2 xt=4 st=4 a= y= xt=4 st=4 x=1 b=2 xy=1 xt=-3 st=4 x=1 b= xy=1 xt=-3 st=4 x= b=2 xt= st=4 x= b= xt= st=4 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=-1 sy=1 xt=-3 st=-1 x=1 y= xy= sy= xt=-3 st=-1 x= y=2 xy= sy=1 xt= st=-1 x= y= xy= sy= xt= st=-1 a=1 y=2 xy=2 sy=1 xt=4 st=-1 a=1 y= sy= xt=4 st=-1 a= y=2 xy=2 sy=1 xt=4 st=-1 a= y= sy= xt=4 st=-1 x=1 b=2 xy=1 sy=3 xt=-3 st=-1 x=1 b= xy=1 sy=3 xt=-3 st=-1 x= b=2 sy=3 xt= st=-1 x= b= sy=3 xt= st=-1 ---------------------------------------------------------------- TIMES mlr --ofs tab put begin{}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=2 sy=2 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=2 x= y= xy= a=1 y=2 xy=2 sy=2 a=1 y= a= y=2 xy=2 sy=2 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=2 sy=6 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=6 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=2 sy=6 st=3 a=1 y= sy= st=3 a= y=2 xy=2 sy=6 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=2 sy=2 xt=4 st=4 x=1 y= xy= xt=4 st=4 x= y=2 xy= sy=2 xt= st=4 x= y= xy= xt= st=4 a=1 y=2 xy=2 sy=2 xt=4 st=4 a=1 y= xt=4 st=4 a= y=2 xy=2 sy=2 xt=4 st=4 a= y= xt=4 st=4 x=1 b=2 xy=1 xt=4 st=4 x=1 b= xy=1 xt=4 st=4 x= b=2 xt= st=4 x= b= xt= st=4 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=2 sy=6 xt=4 st=12 x=1 y= xy= sy= xt=4 st=12 x= y=2 xy= sy=6 xt= st=12 x= y= xy= sy= xt= st=12 a=1 y=2 xy=2 sy=6 xt=4 st=12 a=1 y= sy= xt=4 st=12 a= y=2 xy=2 sy=6 xt=4 st=12 a= y= sy= xt=4 st=12 x=1 b=2 xy=1 sy=3 xt=4 st=12 x=1 b= xy=1 sy=3 xt=4 st=12 x= b=2 sy=3 xt= st=12 x= b= sy=3 xt= st=12 ---------------------------------------------------------------- DIVIDE mlr --ofs tab put begin{}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0.500000 sy=0 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=0 x= y= xy= a=1 y=2 xy=0 sy=0 a=1 y= a= y=2 xy=0 sy=0 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0.500000 sy=1.500000 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=1.500000 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=0 sy=1.500000 st=3 a=1 y= sy= st=3 a= y=2 xy=0 sy=1.500000 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0.500000 sy=0 xt=0.250000 st=0 x=1 y= xy= xt=0.250000 st=0 x= y=2 xy= sy=0 xt= st=0 x= y= xy= xt= st=0 a=1 y=2 xy=0 sy=0 xt=0 st=0 a=1 y= xt=0 st=0 a= y=2 xy=0 sy=0 xt=0 st=0 a= y= xt=0 st=0 x=1 b=2 xy=1 xt=0.250000 st=0 x=1 b= xy=1 xt=0.250000 st=0 x= b=2 xt= st=0 x= b= xt= st=0 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0.500000 sy=1.500000 xt=0.250000 st=0.750000 x=1 y= xy= sy= xt=0.250000 st=0.750000 x= y=2 xy= sy=1.500000 xt= st=0.750000 x= y= xy= sy= xt= st=0.750000 a=1 y=2 xy=0 sy=1.500000 xt=0 st=0.750000 a=1 y= sy= xt=0 st=0.750000 a= y=2 xy=0 sy=1.500000 xt=0 st=0.750000 a= y= sy= xt=0 st=0.750000 x=1 b=2 xy=1 sy=3 xt=0.250000 st=0.750000 x=1 b= xy=1 sy=3 xt=0.250000 st=0.750000 x= b=2 sy=3 xt= st=0.750000 x= b= sy=3 xt= st=0.750000 ---------------------------------------------------------------- INTEGER DIVIDE mlr --ofs tab put begin{}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=0 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=0 x= y= xy= a=1 y=2 xy=0 sy=0 a=1 y= a= y=2 xy=0 sy=0 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=1 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=1 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=0 sy=1 st=3 a=1 y= sy= st=3 a= y=2 xy=0 sy=1 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=0 xt=0 st=0 x=1 y= xy= xt=0 st=0 x= y=2 xy= sy=0 xt= st=0 x= y= xy= xt= st=0 a=1 y=2 xy=0 sy=0 xt=0 st=0 a=1 y= xt=0 st=0 a= y=2 xy=0 sy=0 xt=0 st=0 a= y= xt=0 st=0 x=1 b=2 xy=1 xt=0 st=0 x=1 b= xy=1 xt=0 st=0 x= b=2 xt= st=0 x= b= xt= st=0 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=1 xt=0 st=0 x=1 y= xy= sy= xt=0 st=0 x= y=2 xy= sy=1 xt= st=0 x= y= xy= sy= xt= st=0 a=1 y=2 xy=0 sy=1 xt=0 st=0 a=1 y= sy= xt=0 st=0 a= y=2 xy=0 sy=1 xt=0 st=0 a= y= sy= xt=0 st=0 x=1 b=2 xy=1 sy=3 xt=0 st=0 x=1 b= xy=1 sy=3 xt=0 st=0 x= b=2 sy=3 xt= st=0 x= b= sy=3 xt= st=0 ---------------------------------------------------------------- REMAINDER mlr --ofs tab put begin{}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=1 sy=0 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=0 x= y= xy= a=1 y=2 xy=0 sy=0 a=1 y= a= y=2 xy=0 sy=0 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=1 sy=1 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=1 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=0 sy=1 st=3 a=1 y= sy= st=3 a= y=2 xy=0 sy=1 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=1 sy=0 xt=1 st=0 x=1 y= xy= xt=1 st=0 x= y=2 xy= sy=0 xt= st=0 x= y= xy= xt= st=0 a=1 y=2 xy=0 sy=0 xt=0 st=0 a=1 y= xt=0 st=0 a= y=2 xy=0 sy=0 xt=0 st=0 a= y= xt=0 st=0 x=1 b=2 xy=1 xt=1 st=0 x=1 b= xy=1 xt=1 st=0 x= b=2 xt= st=0 x= b= xt= st=0 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=1 sy=1 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=1 xt= st=3 x= y= xy= sy= xt= st=3 a=1 y=2 xy=0 sy=1 xt=0 st=3 a=1 y= sy= xt=0 st=3 a= y=2 xy=0 sy=1 xt=0 st=3 a= y= sy= xt=0 st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 xt= st=3 x= b= sy=3 xt= st=3 ---------------------------------------------------------------- BITWISE AND mlr --ofs tab put begin{}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=2 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=2 x= y= xy= a=1 y=2 xy=2 sy=2 a=1 y= a= y=2 xy=2 sy=2 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=2 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=2 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=2 sy=2 st=3 a=1 y= sy= st=3 a= y=2 xy=2 sy=2 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=2 xt=0 st=4 x=1 y= xy= xt=0 st=4 x= y=2 xy= sy=2 xt= st=4 x= y= xy= xt= st=4 a=1 y=2 xy=2 sy=2 xt=4 st=4 a=1 y= xt=4 st=4 a= y=2 xy=2 sy=2 xt=4 st=4 a= y= xt=4 st=4 x=1 b=2 xy=1 xt=0 st=4 x=1 b= xy=1 xt=0 st=4 x= b=2 xt= st=4 x= b= xt= st=4 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=0 sy=2 xt=0 st=0 x=1 y= xy= sy= xt=0 st=0 x= y=2 xy= sy=2 xt= st=0 x= y= xy= sy= xt= st=0 a=1 y=2 xy=2 sy=2 xt=4 st=0 a=1 y= sy= xt=4 st=0 a= y=2 xy=2 sy=2 xt=4 st=0 a= y= sy= xt=4 st=0 x=1 b=2 xy=1 sy=3 xt=0 st=0 x=1 b= xy=1 sy=3 xt=0 st=0 x= b=2 sy=3 xt= st=0 x= b= sy=3 xt= st=0 ---------------------------------------------------------------- BITWISE OR mlr --ofs tab put begin{}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=2 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=2 x= y= xy= a=1 y=2 xy=2 sy=2 a=1 y= a= y=2 xy=2 sy=2 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=3 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=3 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=2 sy=3 st=3 a=1 y= sy= st=3 a= y=2 xy=2 sy=3 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=2 xt=5 st=4 x=1 y= xy= xt=5 st=4 x= y=2 xy= sy=2 xt= st=4 x= y= xy= xt= st=4 a=1 y=2 xy=2 sy=2 xt=4 st=4 a=1 y= xt=4 st=4 a= y=2 xy=2 sy=2 xt=4 st=4 a= y= xt=4 st=4 x=1 b=2 xy=1 xt=5 st=4 x=1 b= xy=1 xt=5 st=4 x= b=2 xt= st=4 x= b= xt= st=4 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=3 xt=5 st=7 x=1 y= xy= sy= xt=5 st=7 x= y=2 xy= sy=3 xt= st=7 x= y= xy= sy= xt= st=7 a=1 y=2 xy=2 sy=3 xt=4 st=7 a=1 y= sy= xt=4 st=7 a= y=2 xy=2 sy=3 xt=4 st=7 a= y= sy= xt=4 st=7 x=1 b=2 xy=1 sy=3 xt=5 st=7 x=1 b= xy=1 sy=3 xt=5 st=7 x= b=2 sy=3 xt= st=7 x= b= sy=3 xt= st=7 ---------------------------------------------------------------- BITWISE XOR mlr --ofs tab put begin{}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=2 xt=1 x=1 y= xy= xt=1 x= y=2 xy= sy=2 x= y= xy= a=1 y=2 xy=2 sy=2 a=1 y= a= y=2 xy=2 sy=2 a= y= x=1 b=2 xy=1 xt=1 x=1 b= xy=1 xt=1 x= b=2 x= b= mlr --ofs tab put begin{@s=3}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=1 xt=1 st=3 x=1 y= xy= sy= xt=1 st=3 x= y=2 xy= sy=1 st=3 x= y= xy= sy= st=3 a=1 y=2 xy=2 sy=1 st=3 a=1 y= sy= st=3 a= y=2 xy=2 sy=1 st=3 a= y= sy= st=3 x=1 b=2 xy=1 sy=3 xt=1 st=3 x=1 b= xy=1 sy=3 xt=1 st=3 x= b=2 sy=3 st=3 x= b= sy=3 st=3 mlr --ofs tab put begin{@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=2 xt=5 st=4 x=1 y= xy= xt=5 st=4 x= y=2 xy= sy=2 xt= st=4 x= y= xy= xt= st=4 a=1 y=2 xy=2 sy=2 xt=4 st=4 a=1 y= xt=4 st=4 a= y=2 xy=2 sy=2 xt=4 st=4 a= y= xt=4 st=4 x=1 b=2 xy=1 xt=5 st=4 x=1 b= xy=1 xt=5 st=4 x= b=2 xt= st=4 x= b= xt= st=4 mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp x=1 y=2 xy=3 sy=1 xt=5 st=7 x=1 y= xy= sy= xt=5 st=7 x= y=2 xy= sy=1 xt= st=7 x= y= xy= sy= xt= st=7 a=1 y=2 xy=2 sy=1 xt=4 st=7 a=1 y= sy= xt=4 st=7 a= y=2 xy=2 sy=1 xt=4 st=7 a= y= sy= xt=4 st=7 x=1 b=2 xy=1 sy=3 xt=5 st=7 x=1 b= xy=1 sy=3 xt=5 st=7 x= b=2 sy=3 xt= st=7 x= b= sy=3 xt= st=7 ================================================================ DSL TYPE PREDICATES mlr --from ./reg_test/input/abixy --opprint put for (k, v in $*) { $[k."_type"] = typeof(v) } a b i x y a_type b_type i_type x_type y_type pan pan 1 0.3467901443380824 0.7268028627434533 string string int float float eks pan 2 0.7586799647899636 0.5221511083334797 string string int float float wye wye 3 0.20460330576630303 0.33831852551664776 string string int float float eks wye 4 0.38139939387114097 0.13418874328430463 string string int float float wye pan 5 0.5732889198020006 0.8636244699032729 string string int float float zee pan 6 0.5271261600918548 0.49322128674835697 string string int float float eks zee 7 0.6117840605678454 0.1878849191181694 string string int float float zee wye 8 0.5985540091064224 0.976181385699006 string string int float float hat wye 9 0.03144187646093577 0.7495507603507059 string string int float float pan wye 10 0.5026260055412137 0.9526183602969864 string string int float float mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_float(v)) {@float[NR][k] = v}} end{ emit @float, "NR", "k" } NR=1,k=x,float=0.346790 NR=1,k=y,float=0.726803 NR=2,k=x,float=0.758680 NR=2,k=y,float=0.522151 NR=3,k=x,float=0.204603 NR=3,k=y,float=0.338319 NR=4,k=x,float=0.381399 NR=4,k=y,float=0.134189 NR=5,k=xxx,float=0.573289 NR=5,k=y,float=0.863624 NR=6,k=x,float=0.527126 NR=6,k=y,float=0.493221 NR=7,k=x,float=0.611784 NR=7,k=y,float=0.187885 NR=8,k=x,float=0.598554 NR=8,k=yyy,float=0.976181 NR=9,k=x,float=0.031442 NR=9,k=y,float=0.749551 NR=10,k=x,float=0.502626 NR=10,k=y,float=0.952618 mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_int(v)) {@int[NR][k] = v}} end{ emit @int, "NR", "k" } NR=1,k=i,int=1 NR=2,k=i,int=2 NR=3,k=i,int=3 NR=4,k=i,int=4 NR=5,k=i,int=5 NR=6,k=i,int=6 NR=7,k=iii,int=7 NR=8,k=i,int=8 NR=9,k=i,int=9 NR=10,k=i,int=10 mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_numeric(v)) {@numeric[NR][k] = v}} end{ emit @numeric, "NR", "k" } NR=1,k=i,numeric=1 NR=1,k=x,numeric=0.346790 NR=1,k=y,numeric=0.726803 NR=2,k=i,numeric=2 NR=2,k=x,numeric=0.758680 NR=2,k=y,numeric=0.522151 NR=3,k=i,numeric=3 NR=3,k=x,numeric=0.204603 NR=3,k=y,numeric=0.338319 NR=4,k=i,numeric=4 NR=4,k=x,numeric=0.381399 NR=4,k=y,numeric=0.134189 NR=5,k=i,numeric=5 NR=5,k=xxx,numeric=0.573289 NR=5,k=y,numeric=0.863624 NR=6,k=i,numeric=6 NR=6,k=x,numeric=0.527126 NR=6,k=y,numeric=0.493221 NR=7,k=iii,numeric=7 NR=7,k=x,numeric=0.611784 NR=7,k=y,numeric=0.187885 NR=8,k=i,numeric=8 NR=8,k=x,numeric=0.598554 NR=8,k=yyy,numeric=0.976181 NR=9,k=i,numeric=9 NR=9,k=x,numeric=0.031442 NR=9,k=y,numeric=0.749551 NR=10,k=i,numeric=10 NR=10,k=x,numeric=0.502626 NR=10,k=y,numeric=0.952618 mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_string(v)) {@string[NR][k] = v}} end{ emit @string, "NR", "k" } NR=1,k=a,string=pan NR=1,k=b,string=pan NR=2,k=a,string=eks NR=2,k=b,string=pan NR=3,k=aaa,string=wye NR=3,k=b,string=wye NR=4,k=a,string=eks NR=4,k=bbb,string=wye NR=5,k=a,string=wye NR=5,k=b,string=pan NR=6,k=a,string=zee NR=6,k=b,string=pan NR=7,k=a,string=eks NR=7,k=b,string=zee NR=8,k=a,string=zee NR=8,k=b,string=wye NR=9,k=aaa,string=hat NR=9,k=bbb,string=wye NR=10,k=a,string=pan NR=10,k=b,string=wye mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_bool(v)) {@bool[NR][k] = v}} end{ emit @bool, "NR", "k" } mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_bool(NR==2)) {@bool[NR][k] = "NR==2"}} end{ emit @bool, "NR", "k" } NR=1,k=a,bool=NR==2 NR=1,k=b,bool=NR==2 NR=1,k=i,bool=NR==2 NR=1,k=x,bool=NR==2 NR=1,k=y,bool=NR==2 NR=2,k=a,bool=NR==2 NR=2,k=b,bool=NR==2 NR=2,k=i,bool=NR==2 NR=2,k=x,bool=NR==2 NR=2,k=y,bool=NR==2 NR=3,k=aaa,bool=NR==2 NR=3,k=b,bool=NR==2 NR=3,k=i,bool=NR==2 NR=3,k=x,bool=NR==2 NR=3,k=y,bool=NR==2 NR=4,k=a,bool=NR==2 NR=4,k=bbb,bool=NR==2 NR=4,k=i,bool=NR==2 NR=4,k=x,bool=NR==2 NR=4,k=y,bool=NR==2 NR=5,k=a,bool=NR==2 NR=5,k=b,bool=NR==2 NR=5,k=i,bool=NR==2 NR=5,k=xxx,bool=NR==2 NR=5,k=y,bool=NR==2 NR=6,k=a,bool=NR==2 NR=6,k=b,bool=NR==2 NR=6,k=i,bool=NR==2 NR=6,k=x,bool=NR==2 NR=6,k=y,bool=NR==2 NR=7,k=a,bool=NR==2 NR=7,k=b,bool=NR==2 NR=7,k=iii,bool=NR==2 NR=7,k=x,bool=NR==2 NR=7,k=y,bool=NR==2 NR=8,k=a,bool=NR==2 NR=8,k=b,bool=NR==2 NR=8,k=i,bool=NR==2 NR=8,k=x,bool=NR==2 NR=8,k=yyy,bool=NR==2 NR=9,k=aaa,bool=NR==2 NR=9,k=bbb,bool=NR==2 NR=9,k=i,bool=NR==2 NR=9,k=x,bool=NR==2 NR=9,k=y,bool=NR==2 NR=10,k=a,bool=NR==2 NR=10,k=b,bool=NR==2 NR=10,k=i,bool=NR==2 NR=10,k=x,bool=NR==2 NR=10,k=y,bool=NR==2 ================================================================ DSL TYPE-INFERENCE mlr --xtab put $y = $pi1 + $pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 151 mlr --xtab put -F $y = $pi1 + $pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 151.000000 mlr --xtab put -S $y = $pi1 . $pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 7576 mlr --xtab filter 999 != $pi1 + $pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 mlr --xtab filter -F 999 != $pi1 + $pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 mlr --xtab filter -S "999" != $pi1 . $pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 mlr --oxtab put $s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v); a 1 b 2.0 s 1 t 2.000000 u 3 v 4.000000 ts int tt float tu int tv float mlr --oxtab put -F $s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v); a 1 b 2.0 s 1.000000 t 2.000000 u 3 v 4.000000 ts float tt float tu int tv float mlr --oxtab put -S $s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v); a 1 b 2.0 s 1 t 2.0 u 3 v 4.000000 ts string tt string tu int tv float mlr --xtab put $y=abs($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.200000 mlr --xtab put $y=abs($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.200000 mlr --xtab put $y=abs($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=abs($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75 mlr --xtab put $y=abs($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75 mlr --xtab put $y=abs($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0 mlr --xtab put -F $y=abs($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.200000 mlr --xtab put -F $y=abs($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.200000 mlr --xtab put -F $y=abs($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put -F $y=abs($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75.000000 mlr --xtab put -F $y=abs($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75.000000 mlr --xtab put -F $y=abs($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=ceil($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 72.000000 mlr --xtab put $y=ceil($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -71.000000 mlr --xtab put $y=ceil($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=ceil($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75 mlr --xtab put $y=ceil($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -75 mlr --xtab put $y=ceil($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0 mlr --xtab put -F $y=floor($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.000000 mlr --xtab put -F $y=floor($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -72.000000 mlr --xtab put -F $y=floor($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put -F $y=floor($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75.000000 mlr --xtab put -F $y=floor($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -75.000000 mlr --xtab put -F $y=floor($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=round($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.000000 mlr --xtab put $y=round($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -71.000000 mlr --xtab put $y=round($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=round($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75 mlr --xtab put $y=round($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -75 mlr --xtab put $y=round($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0 mlr --xtab put -F $y=round($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 71.000000 mlr --xtab put -F $y=round($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -71.000000 mlr --xtab put -F $y=round($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put -F $y=round($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 75.000000 mlr --xtab put -F $y=round($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -75.000000 mlr --xtab put -F $y=round($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=sgn($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 1.000000 mlr --xtab put $y=sgn($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -1.000000 mlr --xtab put $y=sgn($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $y=sgn($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 1 mlr --xtab put $y=sgn($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -1 mlr --xtab put $y=sgn($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0 mlr --xtab put -F $y=sgn($pf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 1.000000 mlr --xtab put -F $y=sgn($nf1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -1.000000 mlr --xtab put -F $y=sgn($zf) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put -F $y=sgn($pi1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 1.000000 mlr --xtab put -F $y=sgn($ni1) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y -1.000000 mlr --xtab put -F $y=sgn($zi) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 y 0.000000 mlr --xtab put $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 73.400000 mlr --xtab put $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 76.000000 mlr --xtab put $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 73.400000 max 75.000000 mlr --xtab put $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 75 max 76 mlr --xtab put -F $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 73.400000 mlr --xtab put -F $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 76.000000 mlr --xtab put -F $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 73.400000 max 75.000000 mlr --xtab put -F $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 75.000000 max 76.000000 mlr --xtab put $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 73.400000 mlr --xtab put $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 76.000000 mlr --xtab put $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 73.400000 max 75.000000 mlr --xtab put $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 75 max 76 mlr --xtab put -F $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 73.400000 mlr --xtab put -F $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 71.200000 max 76.000000 mlr --xtab put -F $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 73.400000 max 75.000000 mlr --xtab put -F $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 min 75.000000 max 76.000000 mlr --xtab put $sum=$pf1+$pf2;$diff=$pf1-$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 144.600000 diff -2.200000 mlr --xtab put $sum=$pf1+$pi2;$diff=$pf1-$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 147.200000 diff -4.800000 mlr --xtab put $sum=$pi1+$pf2;$diff=$pi1-$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 148.400000 diff 1.600000 mlr --xtab put $sum=$pi1+$pi2;$diff=$pi1-$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 151 diff -1 mlr --xtab put -F $sum=$pf1+$pf2;$diff=$pf1-$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 144.600000 diff -2.200000 mlr --xtab put -F $sum=$pf1+$pi2;$diff=$pf1-$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 147.200000 diff -4.800000 mlr --xtab put -F $sum=$pi1+$pf2;$diff=$pi1-$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 148.400000 diff 1.600000 mlr --xtab put -F $sum=$pi1+$pi2;$diff=$pi1-$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 sum 151.000000 diff -1.000000 mlr --xtab put $prod=$pf1*$pf2;$quot=$pf1/$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5226.080000 quot 0.970027 mlr --xtab put $prod=$pf1*$pi2;$quot=$pf1/$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5411.200000 quot 0.936842 mlr --xtab put $prod=$pi1*$pf2;$quot=$pi1/$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5505.000000 quot 1.021798 mlr --xtab put $prod=$pi1*$pi2;$quot=$pi1/$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5700 quot 0.986842 mlr --xtab put -F $prod=$pf1*$pf2;$quot=$pf1/$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5226.080000 quot 0.970027 mlr --xtab put -F $prod=$pf1*$pi2;$quot=$pf1/$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5411.200000 quot 0.936842 mlr --xtab put -F $prod=$pi1*$pf2;$quot=$pi1/$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5505.000000 quot 1.021798 mlr --xtab put -F $prod=$pi1*$pi2;$quot=$pi1/$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 prod 5700.000000 quot 0.986842 mlr --xtab put $iquot=$pf1//$pf2;$mod=$pf1%$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 0.000000 mod 71.200000 mlr --xtab put $iquot=$pf1//$pi2;$mod=$pf1%$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 0.000000 mod 71.200000 mlr --xtab put $iquot=$pi1//$pf2;$mod=$pi1%$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 1.000000 mod 1.600000 mlr --xtab put $iquot=$pi1//$pi2;$mod=$pi1%$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 0 mod 75 mlr --xtab put -F $iquot=$pf1//$pf2;$mod=$pf1%$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 0.000000 mod 71.200000 mlr --xtab put -F $iquot=$pf1//$pi2;$mod=$pf1%$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 0.000000 mod 71.200000 mlr --xtab put -F $iquot=$pi1//$pf2;$mod=$pi1%$pf2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 1.000000 mod 1.600000 mlr --xtab put -F $iquot=$pi1//$pi2;$mod=$pi1%$pi2 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 iquot 0.000000 mod 75.000000 mlr --xtab put $a=roundm($pf1,10.0);$b=roundm($pf1,-10.0) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 a 70.000000 b 70.000000 mlr --xtab put $a=roundm($pf1,10) ;$b=roundm($pf1,-10) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 a 70.000000 b 70.000000 mlr --xtab put $a=roundm($pi1,10.0);$b=roundm($pi1,-10.0) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 a 80.000000 b 80.000000 mlr --xtab put $a=roundm($pi1,10) ;$b=roundm($pi1,-10) ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 a 70 b 70 mlr --oxtab put $z=$x+$y; $a=3+4; $b="3"."4"; $c="3"+4 x 3 y 4 z 7 a 7 b 34 c (error) ================================================================ DSL SCIENTIFIC NOTATION IN FIELD VALUES mlr --opprint put $y=$x+1 ./reg_test/input/scinot.dkvp x y 123 124 123. 124.000000 123.4 124.400000 .234 1.234000 1e2 101.000000 1e-2 1.010000 1.2e3 1201.000000 1.e3 1001.000000 1.2e-3 1.001200 1.e-3 1.001000 .2e3 201.000000 .2e-3 1.000200 1.e-3 1.001000 -123 -122 -123. -122.000000 -123.4 -122.400000 -.234 0.766000 -1e2 -99.000000 -1e-2 0.990000 -1.2e3 -1199.000000 -1.e3 -999.000000 -1.2e-3 0.998800 -1.e-3 0.999000 -.2e3 -199.000000 -.2e-3 0.999800 -1.e-3 0.999000 ================================================================ DSL SCIENTIFIC NOTATION IN EXPRESSION LITERALS mlr --opprint put $y = 123 + $i ./reg_test/input/scinot1.dkvp i y 1 124 mlr --opprint put $y = 123. + $i ./reg_test/input/scinot1.dkvp i y 1 124.000000 mlr --opprint put $y = 123.4 + $i ./reg_test/input/scinot1.dkvp i y 1 124.400000 mlr --opprint put $y = .234 + $i ./reg_test/input/scinot1.dkvp i y 1 1.234000 mlr --opprint put $y = 1e2 + $i ./reg_test/input/scinot1.dkvp i y 1 101.000000 mlr --opprint put $y = 1e-2 + $i ./reg_test/input/scinot1.dkvp i y 1 1.010000 mlr --opprint put $y = 1.2e3 + $i ./reg_test/input/scinot1.dkvp i y 1 1201.000000 mlr --opprint put $y = 1.e3 + $i ./reg_test/input/scinot1.dkvp i y 1 1001.000000 mlr --opprint put $y = 1.2e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 1.001200 mlr --opprint put $y = 1.e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 1.001000 mlr --opprint put $y = .2e3 + $i ./reg_test/input/scinot1.dkvp i y 1 201.000000 mlr --opprint put $y = .2e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 1.000200 mlr --opprint put $y = 1.e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 1.001000 mlr --opprint put $y = -123 + $i ./reg_test/input/scinot1.dkvp i y 1 -122 mlr --opprint put $y = -123. + $i ./reg_test/input/scinot1.dkvp i y 1 -122.000000 mlr --opprint put $y = -123.4 + $i ./reg_test/input/scinot1.dkvp i y 1 -122.400000 mlr --opprint put $y = -.234 + $i ./reg_test/input/scinot1.dkvp i y 1 0.766000 mlr --opprint put $y = -1e2 + $i ./reg_test/input/scinot1.dkvp i y 1 -99.000000 mlr --opprint put $y = -1e-2 + $i ./reg_test/input/scinot1.dkvp i y 1 0.990000 mlr --opprint put $y = -1.2e3 + $i ./reg_test/input/scinot1.dkvp i y 1 -1199.000000 mlr --opprint put $y = -1.e3 + $i ./reg_test/input/scinot1.dkvp i y 1 -999.000000 mlr --opprint put $y = -1.2e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 0.998800 mlr --opprint put $y = -1.e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 0.999000 mlr --opprint put $y = -.2e3 + $i ./reg_test/input/scinot1.dkvp i y 1 -199.000000 mlr --opprint put $y = -.2e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 0.999800 mlr --opprint put $y = -1.e-3 + $i ./reg_test/input/scinot1.dkvp i y 1 0.999000 ================================================================ DSL FROM-FILE FEATURE mlr put -f ./reg_test/input/put-example.dsl ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wyewye a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=ekswye a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=0.495106,ab=wyepan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,xy=0.584297,ab=zeewye a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567,ab=hatwye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye mlr filter -f ./reg_test/input/filter-example.dsl ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put -f ./reg_test/input/put-example.dsl a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wyewye a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=ekswye a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=0.495106,ab=wyepan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,xy=0.584297,ab=zeewye a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567,ab=hatwye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye mlr --from ./reg_test/input/abixy filter -f ./reg_test/input/filter-example.dsl a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy --from ./reg_test/input/abixy-het put -f ./reg_test/input/put-example.dsl a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wyewye a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=ekswye a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=0.495106,ab=wyepan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,xy=0.584297,ab=zeewye a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567,ab=hatwye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wye a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=eks a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,xy=0.863624,ab=wyepan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,xy=0.598554,ab=zeewye aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye mlr --from ./reg_test/input/abixy --from ./reg_test/input/abixy-het filter -f ./reg_test/input/filter-example.dsl a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ DSL MULTI-PART SCRIPTS mlr --opprint --from ./reg_test/input/abixy put -f ./reg_test/input/put-script-piece-1 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put -f ./reg_test/input/put-script-piece-1 -f ./reg_test/input/put-script-piece-2 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put -f ./reg_test/input/put-script-piece-1 -f ./reg_test/input/put-script-piece-2 -f ./reg_test/input/put-script-piece-3 a b i x y o W DID pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 YES eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 YES wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 YES eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 YES wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 YES zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 YES eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 YES zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 YES hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 YES pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 YES mlr --opprint --from ./reg_test/input/abixy put -e $xy = $x**2 + $y**2 a b i x y xy pan pan 1 0.3467901443380824 0.7268028627434533 0.648506 eks pan 2 0.7586799647899636 0.5221511083334797 0.848237 wye wye 3 0.20460330576630303 0.33831852551664776 0.156322 eks wye 4 0.38139939387114097 0.13418874328430463 0.163472 wye pan 5 0.5732889198020006 0.8636244699032729 1.074507 zee pan 6 0.5271261600918548 0.49322128674835697 0.521129 eks zee 7 0.6117840605678454 0.1878849191181694 0.409580 zee wye 8 0.5985540091064224 0.976181385699006 1.311197 hat wye 9 0.03144187646093577 0.7495507603507059 0.562815 pan wye 10 0.5026260055412137 0.9526183602969864 1.160115 mlr --opprint --from ./reg_test/input/abixy filter -e NR == 7 a b i x y eks zee 7 0.6117840605678454 0.1878849191181694 mlr --opprint --from ./reg_test/input/abixy put -e print "PRE"; -f ./reg_test/input/put-script-piece-1 -f ./reg_test/input/put-script-piece-2 -f ./reg_test/input/put-script-piece-3 -e print "POST" PRE POST PRE POST PRE POST PRE POST PRE POST PRE POST PRE POST PRE POST PRE POST PRE POST a b i x y o W DID pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 YES eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 YES wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 YES eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 YES wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 YES zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 YES eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 YES zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 YES hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 YES pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 YES mlr --opprint --from ./reg_test/input/abixy filter -f ./reg_test/input/filter-script-piece-1 a b i x y eks pan 2 0.7586799647899636 0.5221511083334797 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy filter -f ./reg_test/input/filter-script-piece-1 -f ./reg_test/input/filter-script-piece-2 a b i x y eks pan 2 0.7586799647899636 0.5221511083334797 ================================================================ UTF-8 STRLEN mlr --inidx --ifs comma --oxtab put $s1=strlen($1);$s2=strlen($2);$s3=strlen($3);$s4=strlen($4) ./reg_test/input/utf8-align.dkvp 1 191º=test 2 1912=test2 3 cois=çais 4 çois=cais s1 9 s2 10 s3 9 s4 9 1 191º=test 2 1912=test2 3 ois=çais 4 çois=cais s1 9 s2 10 s3 8 s4 9 1 191º=test 2 1912=test2 3 coise=çais 4 çois=cais s1 9 s2 10 s3 10 s4 9 ================================================================ STATS1/STEP INT/FLOAT mlr --opprint step -a rsum,delta,counter -f x,y,z ./reg_test/input/int-float.dkvp x y z x_rsum x_delta x_counter y_rsum y_delta y_counter z_rsum z_delta z_counter 1 10.1 20 1 0 1 10.100000 0 1 20 0 1 2 10.2 30 3 1 2 20.300000 0.100000 2 50 10 2 3 10.3 40.8 6 1 3 30.600000 0.100000 3 90.800000 10.800000 3 mlr --opprint step -F -a rsum,delta,counter -f x,y,z ./reg_test/input/int-float.dkvp x y z x_rsum x_delta x_counter y_rsum y_delta y_counter z_rsum z_delta z_counter 1 10.1 20 1.000000 0.000000 1.000000 10.100000 0.000000 1.000000 20.000000 0.000000 1.000000 2 10.2 30 3.000000 1.000000 2.000000 20.300000 0.100000 2.000000 50.000000 10.000000 2.000000 3 10.3 40.8 6.000000 1.000000 3.000000 30.600000 0.100000 3.000000 90.800000 10.800000 3.000000 mlr --oxtab stats1 -a min,max,sum,count -f x,y,z ./reg_test/input/int-float.dkvp x_min 1 x_max 3 x_sum 6 x_count 3 y_min 10.100000 y_max 10.300000 y_sum 30.600000 y_count 3 z_min 20.000000 z_max 40.800000 z_sum 90.800000 z_count 3 mlr --oxtab stats1 -F -a min,max,sum,count -f x,y,z ./reg_test/input/int-float.dkvp x_min 1 x_max 3 x_sum 6.000000 x_count 3.000000 y_min 10.100000 y_max 10.300000 y_sum 30.600000 y_count 3.000000 z_min 20.000000 z_max 40.800000 z_sum 90.800000 z_count 3.000000 ================================================================ DSL PYTHONIC DIVISION mlr --xtab put $quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.120000 iquot 7.000000 mod 1.200000 mlr --xtab put $quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.500000 iquot 7 mod 5 mlr --xtab put $quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.120000 iquot -8.000000 mod 8.800000 mlr --xtab put $quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.500000 iquot -8 mod 5 mlr --xtab put -F $quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.120000 iquot 7.000000 mod 1.200000 mlr --xtab put -F $quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.500000 iquot 7.000000 mod 5.000000 mlr --xtab put -F $quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.120000 iquot -8.000000 mod 8.800000 mlr --xtab put -F $quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.500000 iquot -8.000000 mod 5.000000 mlr --xtab put $quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.120000 iquot -8.000000 mod -8.800000 mlr --xtab put $quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.500000 iquot -8 mod -5 mlr --xtab put $quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.120000 iquot 7.000000 mod -1.200000 mlr --xtab put $quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.500000 iquot 7 mod -5 mlr --xtab put -F $quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.120000 iquot -8.000000 mod -8.800000 mlr --xtab put -F $quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot -7.500000 iquot -8.000000 mod -5.000000 mlr --xtab put -F $quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.120000 iquot 7.000000 mod -1.200000 mlr --xtab put -F $quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ./reg_test/input/mixed-types.xtab pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 quot 7.500000 iquot 7.000000 mod -5.000000 ================================================================ DSL REGEX MATCHING mlr filter -v $x =~ "bcd" ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="bcd", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="bcd", type=STRING_LITERAL. x=abcd,y=ghi x=abcde,y=ghi mlr filter -v $x =~ "^bcd" ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^bcd", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^bcd", type=STRING_LITERAL. mlr filter -v $x =~ "^abc" ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc", type=STRING_LITERAL. x=abc,y=def x=abcd,y=ghi x=abcde,y=ghi mlr filter -v $x =~ "^abc$" ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc$", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc$", type=STRING_LITERAL. x=abc,y=def mlr filter -v $x =~ "^a.*d$" ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^a.*d$", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^a.*d$", type=STRING_LITERAL. x=abcd,y=ghi mlr filter -v $x =~ "^a.*"."d$" ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text=".", type=OPERATOR: text="^a.*", type=STRING_LITERAL. text="d$", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text=".", type=OPERATOR: text="^a.*", type=STRING_LITERAL. text="d$", type=STRING_LITERAL. x=abcd,y=ghi mlr filter -v $y =~ "\".." ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="y", type=FIELD_NAME. text=""..", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="y", type=FIELD_NAME. text=""..", type=STRING_LITERAL. x=ABCDE,y="GHI" mlr filter -v $x =~ "bcd"i ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="bcd", type=REGEXI. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="bcd", type=REGEXI. x=abcd,y=ghi x=ABCD,y=GHI x=abcde,y=ghi x=ABCDE,y=GHI x=ABCDE,y="GHI" mlr filter -v $x =~ "^bcd"i ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^bcd", type=REGEXI. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^bcd", type=REGEXI. mlr filter -v $x =~ "^abc"i ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc", type=REGEXI. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc", type=REGEXI. x=abc,y=def x=ABC,y=DEF x=abcd,y=ghi x=ABCD,y=GHI x=abcde,y=ghi x=ABCDE,y=GHI x=ABCDE,y="GHI" mlr filter -v $x =~ "^abc$"i ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc$", type=REGEXI. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^abc$", type=REGEXI. x=abc,y=def x=ABC,y=DEF mlr filter -v $x =~ "^a.*d$"i ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^a.*d$", type=REGEXI. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text="^a.*d$", type=REGEXI. x=abcd,y=ghi x=ABCD,y=GHI mlr filter -v $x =~ "^a.*"."d$"i ./reg_test/input/regex.dkvp RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text=".", type=OPERATOR: text="^a.*", type=STRING_LITERAL. text="d$", type=REGEXI. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=~", type=OPERATOR: text="x", type=FIELD_NAME. text=".", type=OPERATOR: text="^a.*", type=STRING_LITERAL. text="d$", type=REGEXI. x=abcd,y=ghi mlr --csv filter $text =~ "." ./reg_test/input/dot-match.csv text hi a.b bye mlr --csv filter $text =~ "\." ./reg_test/input/dot-match.csv text a.b ================================================================ DSL TYPED OVERLAY mlr put $y = string($x); $z=$y.$y ./reg_test/input/int-float.dkvp x=1,y=1,z=11 x=2,y=2,z=22 x=3,y=3,z=33 mlr put $z=string($x).string($x) ./reg_test/input/int-float.dkvp x=1,y=10.1,z=11 x=2,y=10.2,z=22 x=3,y=10.3,z=33 mlr put $y = string($x) then put $z=$y.$y ./reg_test/input/int-float.dkvp x=1,y=1,z=11 x=2,y=2,z=22 x=3,y=3,z=33 mlr put $a="hello" then put $b=$a." world";$z=$x+$y;$c=$b;$a=sub($b,"hello","farewell") ./reg_test/input/int-float.dkvp x=1,y=10.1,z=11.100000,a=farewell world,b=hello world,c=hello world x=2,y=10.2,z=12.200000,a=farewell world,b=hello world,c=hello world x=3,y=10.3,z=13.300000,a=farewell world,b=hello world,c=hello world ================================================================ DSL REGEX CAPTURES mlr --opprint put $FIELD =~ "([A-Z]+)([0-9]+)"; $F1=""; $F2=""; $F3="" ./reg_test/input/capture.dkvp FIELD F1 F2 F3 ABC123 ABC 123 - ABC..123 - - - ..ABC..123.. - - - none of the above - - - mlr --opprint put $FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)"; $F1=""; $F2=""; $F3="" ./reg_test/input/capture.dkvp FIELD F1 F2 F3 ABC123 ABC 123 - ABC..123 ABC 123 - ..ABC..123.. ABC 123 - none of the above - - - mlr --opprint put $FIELD =~ "([A-Z]+)([0-9]+)" then put $F1=""; $F2=""; $F3="" ./reg_test/input/capture.dkvp FIELD F1 F2 F3 ABC123 \1 \2 \3 ABC..123 \1 \2 \3 ..ABC..123.. \1 \2 \3 none of the above \1 \2 \3 mlr --opprint put $FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)" then put $F1=""; $F2=""; $F3="" ./reg_test/input/capture.dkvp FIELD F1 F2 F3 ABC123 \1 \2 \3 ABC..123 \1 \2 \3 ..ABC..123.. \1 \2 \3 none of the above \1 \2 \3 mlr --opprint put $FIELD =~ "....."; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde abcde - - - - - - - - - abcdef abcde - - - - - - - - - abcdefg abcde - - - - - - - - - abcdefgh abcde - - - - - - - - - abcdefghi abcde - - - - - - - - - abcdefghij abcde - - - - - - - - - abcdefghijk abcde - - - - - - - - - abcdefghijkl abcde - - - - - - - - - mlr --opprint put $FIELD =~ "....." {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcde abcde - - - - - - - - - abcdef abcde - - - - - - - - - abcdefg abcde - - - - - - - - - abcdefgh abcde - - - - - - - - - abcdefghi abcde - - - - - - - - - abcdefghij abcde - - - - - - - - - abcdefghijk abcde - - - - - - - - - abcdefghijkl abcde - - - - - - - - - mlr --opprint put filter $FIELD =~ "....."; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcde abcde - - - - - - - - - abcdef abcde - - - - - - - - - abcdefg abcde - - - - - - - - - abcdefgh abcde - - - - - - - - - abcdefghi abcde - - - - - - - - - abcdefghij abcde - - - - - - - - - abcdefghijk abcde - - - - - - - - - abcdefghijkl abcde - - - - - - - - - mlr --opprint put $FIELD =~ "(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a a a - - - - - - - - ab a a - - - - - - - - abc a a - - - - - - - - abcd a a - - - - - - - - abcde a a - - - - - - - - abcdef a a - - - - - - - - abcdefg a a - - - - - - - - abcdefgh a a - - - - - - - - abcdefghi a a - - - - - - - - abcdefghij a a - - - - - - - - abcdefghijk a a - - - - - - - - abcdefghijkl a a - - - - - - - - mlr --opprint put $FIELD =~ "(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab ab a b - - - - - - - abc ab a b - - - - - - - abcd ab a b - - - - - - - abcde ab a b - - - - - - - abcdef ab a b - - - - - - - abcdefg ab a b - - - - - - - abcdefgh ab a b - - - - - - - abcdefghi ab a b - - - - - - - abcdefghij ab a b - - - - - - - abcdefghijk ab a b - - - - - - - abcdefghijkl ab a b - - - - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc abc a b c - - - - - - abcd abc a b c - - - - - - abcde abc a b c - - - - - - abcdef abc a b c - - - - - - abcdefg abc a b c - - - - - - abcdefgh abc a b c - - - - - - abcdefghi abc a b c - - - - - - abcdefghij abc a b c - - - - - - abcdefghijk abc a b c - - - - - - abcdefghijkl abc a b c - - - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd abcd a b c d - - - - - abcde abcd a b c d - - - - - abcdef abcd a b c d - - - - - abcdefg abcd a b c d - - - - - abcdefgh abcd a b c d - - - - - abcdefghi abcd a b c d - - - - - abcdefghij abcd a b c d - - - - - abcdefghijk abcd a b c d - - - - - abcdefghijkl abcd a b c d - - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde abcde a b c d e - - - - abcdef abcde a b c d e - - - - abcdefg abcde a b c d e - - - - abcdefgh abcde a b c d e - - - - abcdefghi abcde a b c d e - - - - abcdefghij abcde a b c d e - - - - abcdefghijk abcde a b c d e - - - - abcdefghijkl abcde a b c d e - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde - - - - - - - - - - abcdef abcdef a b c d e f - - - abcdefg abcdef a b c d e f - - - abcdefgh abcdef a b c d e f - - - abcdefghi abcdef a b c d e f - - - abcdefghij abcdef a b c d e f - - - abcdefghijk abcdef a b c d e f - - - abcdefghijkl abcdef a b c d e f - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde - - - - - - - - - - abcdef - - - - - - - - - - abcdefg abcdefg a b c d e f g - - abcdefgh abcdefg a b c d e f g - - abcdefghi abcdefg a b c d e f g - - abcdefghij abcdefg a b c d e f g - - abcdefghijk abcdefg a b c d e f g - - abcdefghijkl abcdefg a b c d e f g - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde - - - - - - - - - - abcdef - - - - - - - - - - abcdefg - - - - - - - - - - abcdefgh abcdefgh a b c d e f g h - abcdefghi abcdefgh a b c d e f g h - abcdefghij abcdefgh a b c d e f g h - abcdefghijk abcdefgh a b c d e f g h - abcdefghijkl abcdefgh a b c d e f g h - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde - - - - - - - - - - abcdef - - - - - - - - - - abcdefg - - - - - - - - - - abcdefgh - - - - - - - - - - abcdefghi abcdefghi a b c d e f g h i abcdefghij abcdefghi a b c d e f g h i abcdefghijk abcdefghi a b c d e f g h i abcdefghijkl abcdefghi a b c d e f g h i mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 - - - - - - - - - - - a - - - - - - - - - - ab - - - - - - - - - - abc - - - - - - - - - - abcd - - - - - - - - - - abcde - - - - - - - - - - abcdef - - - - - - - - - - abcdefg - - - - - - - - - - abcdefgh - - - - - - - - - - abcdefghi - - - - - - - - - - abcdefghij abcdefghij a b c d e f g h i abcdefghijk abcdefghij a b c d e f g h i abcdefghijkl abcdefghij a b c d e f g h i mlr --opprint put $FIELD =~ "(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 a a a - - - - - - - - ab a a - - - - - - - - abc a a - - - - - - - - abcd a a - - - - - - - - abcde a a - - - - - - - - abcdef a a - - - - - - - - abcdefg a a - - - - - - - - abcdefgh a a - - - - - - - - abcdefghi a a - - - - - - - - abcdefghij a a - - - - - - - - abcdefghijk a a - - - - - - - - abcdefghijkl a a - - - - - - - - mlr --opprint put $FIELD =~ "(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 ab ab a b - - - - - - - abc ab a b - - - - - - - abcd ab a b - - - - - - - abcde ab a b - - - - - - - abcdef ab a b - - - - - - - abcdefg ab a b - - - - - - - abcdefgh ab a b - - - - - - - abcdefghi ab a b - - - - - - - abcdefghij ab a b - - - - - - - abcdefghijk ab a b - - - - - - - abcdefghijkl ab a b - - - - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abc abc a b c - - - - - - abcd abc a b c - - - - - - abcde abc a b c - - - - - - abcdef abc a b c - - - - - - abcdefg abc a b c - - - - - - abcdefgh abc a b c - - - - - - abcdefghi abc a b c - - - - - - abcdefghij abc a b c - - - - - - abcdefghijk abc a b c - - - - - - abcdefghijkl abc a b c - - - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcd abcd a b c d - - - - - abcde abcd a b c d - - - - - abcdef abcd a b c d - - - - - abcdefg abcd a b c d - - - - - abcdefgh abcd a b c d - - - - - abcdefghi abcd a b c d - - - - - abcdefghij abcd a b c d - - - - - abcdefghijk abcd a b c d - - - - - abcdefghijkl abcd a b c d - - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcde abcde a b c d e - - - - abcdef abcde a b c d e - - - - abcdefg abcde a b c d e - - - - abcdefgh abcde a b c d e - - - - abcdefghi abcde a b c d e - - - - abcdefghij abcde a b c d e - - - - abcdefghijk abcde a b c d e - - - - abcdefghijkl abcde a b c d e - - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd abcde FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdef abcdef a b c d e f - - - abcdefg abcdef a b c d e f - - - abcdefgh abcdef a b c d e f - - - abcdefghi abcdef a b c d e f - - - abcdefghij abcdef a b c d e f - - - abcdefghijk abcdef a b c d e f - - - abcdefghijkl abcdef a b c d e f - - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd abcde abcdef FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefg abcdefg a b c d e f g - - abcdefgh abcdefg a b c d e f g - - abcdefghi abcdefg a b c d e f g - - abcdefghij abcdefg a b c d e f g - - abcdefghijk abcdefg a b c d e f g - - abcdefghijkl abcdefg a b c d e f g - - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd abcde abcdef abcdefg FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefgh abcdefgh a b c d e f g h - abcdefghi abcdefgh a b c d e f g h - abcdefghij abcdefgh a b c d e f g h - abcdefghijk abcdefgh a b c d e f g h - abcdefghijkl abcdefgh a b c d e f g h - mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd abcde abcdef abcdefg abcdefgh FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefghi abcdefghi a b c d e f g h i abcdefghij abcdefghi a b c d e f g h i abcdefghijk abcdefghi a b c d e f g h i abcdefghijkl abcdefghi a b c d e f g h i mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0=" ./reg_test/input/capture-lengths.dkvp FIELD - a ab abc abcd abcde abcdef abcdefg abcdefgh abcdefghi FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefghij abcdefghij a b c d e f g h i abcdefghijk abcdefghij a b c d e f g h i abcdefghijkl abcdefghij a b c d e f g h i mlr --opprint put filter $FIELD =~ "(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 a a a - - - - - - - - ab a a - - - - - - - - abc a a - - - - - - - - abcd a a - - - - - - - - abcde a a - - - - - - - - abcdef a a - - - - - - - - abcdefg a a - - - - - - - - abcdefgh a a - - - - - - - - abcdefghi a a - - - - - - - - abcdefghij a a - - - - - - - - abcdefghijk a a - - - - - - - - abcdefghijkl a a - - - - - - - - mlr --opprint put filter $FIELD =~ "(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 ab ab a b - - - - - - - abc ab a b - - - - - - - abcd ab a b - - - - - - - abcde ab a b - - - - - - - abcdef ab a b - - - - - - - abcdefg ab a b - - - - - - - abcdefgh ab a b - - - - - - - abcdefghi ab a b - - - - - - - abcdefghij ab a b - - - - - - - abcdefghijk ab a b - - - - - - - abcdefghijkl ab a b - - - - - - - mlr --opprint put filter $FIELD =~ "(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abc abc a b c - - - - - - abcd abc a b c - - - - - - abcde abc a b c - - - - - - abcdef abc a b c - - - - - - abcdefg abc a b c - - - - - - abcdefgh abc a b c - - - - - - abcdefghi abc a b c - - - - - - abcdefghij abc a b c - - - - - - abcdefghijk abc a b c - - - - - - abcdefghijkl abc a b c - - - - - - mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcd abcd a b c d - - - - - abcde abcd a b c d - - - - - abcdef abcd a b c d - - - - - abcdefg abcd a b c d - - - - - abcdefgh abcd a b c d - - - - - abcdefghi abcd a b c d - - - - - abcdefghij abcd a b c d - - - - - abcdefghijk abcd a b c d - - - - - abcdefghijkl abcd a b c d - - - - - mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcde abcde a b c d e - - - - abcdef abcde a b c d e - - - - abcdefg abcde a b c d e - - - - abcdefgh abcde a b c d e - - - - abcdefghi abcde a b c d e - - - - abcdefghij abcde a b c d e - - - - abcdefghijk abcde a b c d e - - - - abcdefghijkl abcde a b c d e - - - - mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdef abcdef a b c d e f - - - abcdefg abcdef a b c d e f - - - abcdefgh abcdef a b c d e f - - - abcdefghi abcdef a b c d e f - - - abcdefghij abcdef a b c d e f - - - abcdefghijk abcdef a b c d e f - - - abcdefghijkl abcdef a b c d e f - - - mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefg abcdefg a b c d e f g - - abcdefgh abcdefg a b c d e f g - - abcdefghi abcdefg a b c d e f g - - abcdefghij abcdefg a b c d e f g - - abcdefghijk abcdefg a b c d e f g - - abcdefghijkl abcdefg a b c d e f g - - mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefgh abcdefgh a b c d e f g h - abcdefghi abcdefgh a b c d e f g h - abcdefghij abcdefgh a b c d e f g h - abcdefghijk abcdefgh a b c d e f g h - abcdefghijkl abcdefgh a b c d e f g h - mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefghi abcdefghi a b c d e f g h i abcdefghij abcdefghi a b c d e f g h i abcdefghijk abcdefghi a b c d e f g h i abcdefghijkl abcdefghi a b c d e f g h i mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0=" ./reg_test/input/capture-lengths.dkvp FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 abcdefghij abcdefghij a b c d e f g h i abcdefghijk abcdefghij a b c d e f g h i abcdefghijkl abcdefghij a b c d e f g h i ================================================================ DSL FILTER/PATTERN-ACTION mlr --opprint put $x > 0.5; $z = "flag" ./reg_test/input/abixy a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 flag eks pan 2 0.7586799647899636 0.5221511083334797 flag wye wye 3 0.20460330576630303 0.33831852551664776 flag eks wye 4 0.38139939387114097 0.13418874328430463 flag wye pan 5 0.5732889198020006 0.8636244699032729 flag zee pan 6 0.5271261600918548 0.49322128674835697 flag eks zee 7 0.6117840605678454 0.1878849191181694 flag zee wye 8 0.5985540091064224 0.976181385699006 flag hat wye 9 0.03144187646093577 0.7495507603507059 flag pan wye 10 0.5026260055412137 0.9526183602969864 flag mlr --opprint put !($x > 0.5); $z = "flag" ./reg_test/input/abixy a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 flag eks pan 2 0.7586799647899636 0.5221511083334797 flag wye wye 3 0.20460330576630303 0.33831852551664776 flag eks wye 4 0.38139939387114097 0.13418874328430463 flag wye pan 5 0.5732889198020006 0.8636244699032729 flag zee pan 6 0.5271261600918548 0.49322128674835697 flag eks zee 7 0.6117840605678454 0.1878849191181694 flag zee wye 8 0.5985540091064224 0.976181385699006 flag hat wye 9 0.03144187646093577 0.7495507603507059 flag pan wye 10 0.5026260055412137 0.9526183602969864 flag mlr --opprint put filter $x > 0.5; $z = "flag" ./reg_test/input/abixy a b i x y z eks pan 2 0.7586799647899636 0.5221511083334797 flag wye pan 5 0.5732889198020006 0.8636244699032729 flag zee pan 6 0.5271261600918548 0.49322128674835697 flag eks zee 7 0.6117840605678454 0.1878849191181694 flag zee wye 8 0.5985540091064224 0.976181385699006 flag pan wye 10 0.5026260055412137 0.9526183602969864 flag mlr --opprint put $x > 0.5 {$z = "flag"} ./reg_test/input/abixy a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 a b i x y z eks pan 2 0.7586799647899636 0.5221511083334797 flag a b i x y wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 a b i x y z wye pan 5 0.5732889198020006 0.8636244699032729 flag zee pan 6 0.5271261600918548 0.49322128674835697 flag eks zee 7 0.6117840605678454 0.1878849191181694 flag zee wye 8 0.5985540091064224 0.976181385699006 flag a b i x y hat wye 9 0.03144187646093577 0.7495507603507059 a b i x y z pan wye 10 0.5026260055412137 0.9526183602969864 flag mlr --opprint put filter !($x > 0.5); $z = "flag" ./reg_test/input/abixy a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 flag wye wye 3 0.20460330576630303 0.33831852551664776 flag eks wye 4 0.38139939387114097 0.13418874328430463 flag hat wye 9 0.03144187646093577 0.7495507603507059 flag mlr --opprint put !($x > 0.5) {$z = "flag"} ./reg_test/input/abixy a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 flag a b i x y eks pan 2 0.7586799647899636 0.5221511083334797 a b i x y z wye wye 3 0.20460330576630303 0.33831852551664776 flag eks wye 4 0.38139939387114097 0.13418874328430463 flag a b i x y wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 a b i x y z hat wye 9 0.03144187646093577 0.7495507603507059 flag a b i x y pan wye 10 0.5026260055412137 0.9526183602969864 ================================================================ DSL GMT DATE/TIME FUNCTIONS mlr --csvlite put $gmt = sec2gmt($sec) ./reg_test/input/sec2gmt n,sec,gmt 1,0,1970-01-01T00:00:00Z 2,1,1970-01-01T00:00:01Z 3,10,1970-01-01T00:00:10Z 4,100,1970-01-01T00:01:40Z 5,1000,1970-01-01T00:16:40Z 6,10000,1970-01-01T02:46:40Z 7,100000,1970-01-02T03:46:40Z 8,1000000,1970-01-12T13:46:40Z 9,10000000,1970-04-26T17:46:40Z 10,100000000,1973-03-03T09:46:40Z 11,1000000000,2001-09-09T01:46:40Z 12,1432036180,2015-05-19T11:49:40Z 13,1500000000,2017-07-14T02:40:00Z 14,2000000000,2033-05-18T03:33:20Z 15,2000000000.,2033-05-18T03:33:20Z 16,2000000000.0,2033-05-18T03:33:20Z 17,2000000000.00,2033-05-18T03:33:20Z 18,2000000000.123400,2033-05-18T03:33:20Z 19,2000000000.123456,2033-05-18T03:33:20Z 20,2000000000.999,2033-05-18T03:33:20Z 21,2000000000.999999,2033-05-18T03:33:20Z 22,2000000000.999999999,2033-05-18T03:33:21Z 23,, 24,x,x 25,123x,123x mlr --csvlite put $gmt = sec2gmt($sec,1) ./reg_test/input/sec2gmt n,sec,gmt 1,0,1970-01-01T00:00:00.0Z 2,1,1970-01-01T00:00:01.0Z 3,10,1970-01-01T00:00:10.0Z 4,100,1970-01-01T00:01:40.0Z 5,1000,1970-01-01T00:16:40.0Z 6,10000,1970-01-01T02:46:40.0Z 7,100000,1970-01-02T03:46:40.0Z 8,1000000,1970-01-12T13:46:40.0Z 9,10000000,1970-04-26T17:46:40.0Z 10,100000000,1973-03-03T09:46:40.0Z 11,1000000000,2001-09-09T01:46:40.0Z 12,1432036180,2015-05-19T11:49:40.0Z 13,1500000000,2017-07-14T02:40:00.0Z 14,2000000000,2033-05-18T03:33:20.0Z 15,2000000000.,2033-05-18T03:33:20.0Z 16,2000000000.0,2033-05-18T03:33:20.0Z 17,2000000000.00,2033-05-18T03:33:20.0Z 18,2000000000.123400,2033-05-18T03:33:20.1Z 19,2000000000.123456,2033-05-18T03:33:20.1Z 20,2000000000.999,2033-05-18T03:33:20.9Z 21,2000000000.999999,2033-05-18T03:33:20.9Z 22,2000000000.999999999,2033-05-18T03:33:21.0Z 23,, 24,x,x 25,123x,123x mlr --csvlite put $gmt = sec2gmt($sec,3) ./reg_test/input/sec2gmt n,sec,gmt 1,0,1970-01-01T00:00:00.000Z 2,1,1970-01-01T00:00:01.000Z 3,10,1970-01-01T00:00:10.000Z 4,100,1970-01-01T00:01:40.000Z 5,1000,1970-01-01T00:16:40.000Z 6,10000,1970-01-01T02:46:40.000Z 7,100000,1970-01-02T03:46:40.000Z 8,1000000,1970-01-12T13:46:40.000Z 9,10000000,1970-04-26T17:46:40.000Z 10,100000000,1973-03-03T09:46:40.000Z 11,1000000000,2001-09-09T01:46:40.000Z 12,1432036180,2015-05-19T11:49:40.000Z 13,1500000000,2017-07-14T02:40:00.000Z 14,2000000000,2033-05-18T03:33:20.000Z 15,2000000000.,2033-05-18T03:33:20.000Z 16,2000000000.0,2033-05-18T03:33:20.000Z 17,2000000000.00,2033-05-18T03:33:20.000Z 18,2000000000.123400,2033-05-18T03:33:20.123Z 19,2000000000.123456,2033-05-18T03:33:20.123Z 20,2000000000.999,2033-05-18T03:33:20.999Z 21,2000000000.999999,2033-05-18T03:33:20.999Z 22,2000000000.999999999,2033-05-18T03:33:21.000Z 23,, 24,x,x 25,123x,123x mlr --csvlite put $gmt = sec2gmt($sec,6) ./reg_test/input/sec2gmt n,sec,gmt 1,0,1970-01-01T00:00:00.000000Z 2,1,1970-01-01T00:00:01.000000Z 3,10,1970-01-01T00:00:10.000000Z 4,100,1970-01-01T00:01:40.000000Z 5,1000,1970-01-01T00:16:40.000000Z 6,10000,1970-01-01T02:46:40.000000Z 7,100000,1970-01-02T03:46:40.000000Z 8,1000000,1970-01-12T13:46:40.000000Z 9,10000000,1970-04-26T17:46:40.000000Z 10,100000000,1973-03-03T09:46:40.000000Z 11,1000000000,2001-09-09T01:46:40.000000Z 12,1432036180,2015-05-19T11:49:40.000000Z 13,1500000000,2017-07-14T02:40:00.000000Z 14,2000000000,2033-05-18T03:33:20.000000Z 15,2000000000.,2033-05-18T03:33:20.000000Z 16,2000000000.0,2033-05-18T03:33:20.000000Z 17,2000000000.00,2033-05-18T03:33:20.000000Z 18,2000000000.123400,2033-05-18T03:33:20.123400Z 19,2000000000.123456,2033-05-18T03:33:20.123456Z 20,2000000000.999,2033-05-18T03:33:20.999000Z 21,2000000000.999999,2033-05-18T03:33:20.999999Z 22,2000000000.999999999,2033-05-18T03:33:21.000000Z 23,, 24,x,x 25,123x,123x mlr --csvlite put $sec = gmt2sec($gmt) ./reg_test/input/gmt2sec gmt,sec 1970-01-01T00:00:00Z,0.000000 1970-01-01T00:00:00.Z,0.000000 1970-01-01T00:00:01Z,1.000000 1970-01-01T00:00:01.0Z,1.000000 1970-01-01T00:00:10Z,10.000000 1970-01-01T00:00:10.00Z,10.000000 1970-01-01T00:01:40Z,100.000000 1970-01-01T00:01:40.1Z,100.100000 1970-01-01T00:16:40Z,1000.000000 1970-01-01T00:16:40.12Z,1000.120000 1970-01-01T02:46:40Z,10000.000000 1970-01-01T02:46:40.123Z,10000.123000 1970-01-02T03:46:40Z,100000.000000 1970-01-02T03:46:40.1234Z,100000.123400 1970-01-12T13:46:40Z,1000000.000000 1970-01-12T13:46:40.12345Z,1000000.123450 1970-04-26T17:46:40Z,10000000.000000 1970-04-26T17:46:40.123456Z,10000000.123456 1973-03-03T09:46:40Z,100000000.000000 1973-03-03T09:46:40.1234567Z,100000000.123457 2001-09-09T01:46:40Z,1000000000.000000 2001-09-09T01:46:40.12345678Z,1000000000.123457 2015-05-19T11:49:40Z,1432036180.000000 2015-05-19T11:49:40.123456789Z,1432036180.123457 2017-07-14T02:40:00Z,1500000000.000000 2017-07-14T02:40:00.999Z,1500000000.999000 2033-05-18T03:33:20Z,2000000000.000000 2033-05-18T03:33:20.999999Z,2000000000.999999 mlr --csvlite put $gmtdate = sec2gmtdate($sec) ./reg_test/input/sec2gmt n,sec,gmtdate 1,0,1970-01-01 2,1,1970-01-01 3,10,1970-01-01 4,100,1970-01-01 5,1000,1970-01-01 6,10000,1970-01-01 7,100000,1970-01-02 8,1000000,1970-01-12 9,10000000,1970-04-26 10,100000000,1973-03-03 11,1000000000,2001-09-09 12,1432036180,2015-05-19 13,1500000000,2017-07-14 14,2000000000,2033-05-18 15,2000000000.,2033-05-18 16,2000000000.0,2033-05-18 17,2000000000.00,2033-05-18 18,2000000000.123400,2033-05-18 19,2000000000.123456,2033-05-18 20,2000000000.999,2033-05-18 21,2000000000.999999,2033-05-18 22,2000000000.999999999,2033-05-18 23,, 24,x,x 25,123x,123x mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%SZ") ./reg_test/input/sec2gmt n sec gmt 1 0 1970-01-01T00:00:00Z 2 1 1970-01-01T00:00:01Z 3 10 1970-01-01T00:00:10Z 4 100 1970-01-01T00:01:40Z 5 1000 1970-01-01T00:16:40Z 6 10000 1970-01-01T02:46:40Z 7 100000 1970-01-02T03:46:40Z 8 1000000 1970-01-12T13:46:40Z 9 10000000 1970-04-26T17:46:40Z 10 100000000 1973-03-03T09:46:40Z 11 1000000000 2001-09-09T01:46:40Z 12 1432036180 2015-05-19T11:49:40Z 13 1500000000 2017-07-14T02:40:00Z 14 2000000000 2033-05-18T03:33:20Z 15 2000000000. 2033-05-18T03:33:20Z 16 2000000000.0 2033-05-18T03:33:20Z 17 2000000000.00 2033-05-18T03:33:20Z 18 2000000000.123400 2033-05-18T03:33:20Z 19 2000000000.123456 2033-05-18T03:33:20Z 20 2000000000.999 2033-05-18T03:33:20Z 21 2000000000.999999 2033-05-18T03:33:20Z 22 2000000000.999999999 2033-05-18T03:33:21Z 23 - - 24 x (error) 25 123x (error) mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%1SZ") ./reg_test/input/sec2gmt n sec gmt 1 0 1970-01-01T00:00:00.0Z 2 1 1970-01-01T00:00:01.0Z 3 10 1970-01-01T00:00:10.0Z 4 100 1970-01-01T00:01:40.0Z 5 1000 1970-01-01T00:16:40.0Z 6 10000 1970-01-01T02:46:40.0Z 7 100000 1970-01-02T03:46:40.0Z 8 1000000 1970-01-12T13:46:40.0Z 9 10000000 1970-04-26T17:46:40.0Z 10 100000000 1973-03-03T09:46:40.0Z 11 1000000000 2001-09-09T01:46:40.0Z 12 1432036180 2015-05-19T11:49:40.0Z 13 1500000000 2017-07-14T02:40:00.0Z 14 2000000000 2033-05-18T03:33:20.0Z 15 2000000000. 2033-05-18T03:33:20.0Z 16 2000000000.0 2033-05-18T03:33:20.0Z 17 2000000000.00 2033-05-18T03:33:20.0Z 18 2000000000.123400 2033-05-18T03:33:20.1Z 19 2000000000.123456 2033-05-18T03:33:20.1Z 20 2000000000.999 2033-05-18T03:33:20.9Z 21 2000000000.999999 2033-05-18T03:33:20.9Z 22 2000000000.999999999 2033-05-18T03:33:21.0Z 23 - - 24 x (error) 25 123x (error) mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%3SZ") ./reg_test/input/sec2gmt n sec gmt 1 0 1970-01-01T00:00:00.000Z 2 1 1970-01-01T00:00:01.000Z 3 10 1970-01-01T00:00:10.000Z 4 100 1970-01-01T00:01:40.000Z 5 1000 1970-01-01T00:16:40.000Z 6 10000 1970-01-01T02:46:40.000Z 7 100000 1970-01-02T03:46:40.000Z 8 1000000 1970-01-12T13:46:40.000Z 9 10000000 1970-04-26T17:46:40.000Z 10 100000000 1973-03-03T09:46:40.000Z 11 1000000000 2001-09-09T01:46:40.000Z 12 1432036180 2015-05-19T11:49:40.000Z 13 1500000000 2017-07-14T02:40:00.000Z 14 2000000000 2033-05-18T03:33:20.000Z 15 2000000000. 2033-05-18T03:33:20.000Z 16 2000000000.0 2033-05-18T03:33:20.000Z 17 2000000000.00 2033-05-18T03:33:20.000Z 18 2000000000.123400 2033-05-18T03:33:20.123Z 19 2000000000.123456 2033-05-18T03:33:20.123Z 20 2000000000.999 2033-05-18T03:33:20.999Z 21 2000000000.999999 2033-05-18T03:33:20.999Z 22 2000000000.999999999 2033-05-18T03:33:21.000Z 23 - - 24 x (error) 25 123x (error) mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%6SZ") ./reg_test/input/sec2gmt n sec gmt 1 0 1970-01-01T00:00:00.000000Z 2 1 1970-01-01T00:00:01.000000Z 3 10 1970-01-01T00:00:10.000000Z 4 100 1970-01-01T00:01:40.000000Z 5 1000 1970-01-01T00:16:40.000000Z 6 10000 1970-01-01T02:46:40.000000Z 7 100000 1970-01-02T03:46:40.000000Z 8 1000000 1970-01-12T13:46:40.000000Z 9 10000000 1970-04-26T17:46:40.000000Z 10 100000000 1973-03-03T09:46:40.000000Z 11 1000000000 2001-09-09T01:46:40.000000Z 12 1432036180 2015-05-19T11:49:40.000000Z 13 1500000000 2017-07-14T02:40:00.000000Z 14 2000000000 2033-05-18T03:33:20.000000Z 15 2000000000. 2033-05-18T03:33:20.000000Z 16 2000000000.0 2033-05-18T03:33:20.000000Z 17 2000000000.00 2033-05-18T03:33:20.000000Z 18 2000000000.123400 2033-05-18T03:33:20.123400Z 19 2000000000.123456 2033-05-18T03:33:20.123456Z 20 2000000000.999 2033-05-18T03:33:20.999000Z 21 2000000000.999999 2033-05-18T03:33:20.999999Z 22 2000000000.999999999 2033-05-18T03:33:21.000000Z 23 - - 24 x (error) 25 123x (error) mlr --icsv --opprint put $sec = strptime($gmt, "%Y-%m-%dT%H:%M:%SZ") ./reg_test/input/gmt2sec gmt sec 1970-01-01T00:00:00Z 0.000000 1970-01-01T00:00:00.Z 0.000000 1970-01-01T00:00:01Z 1.000000 1970-01-01T00:00:01.0Z 1.000000 1970-01-01T00:00:10Z 10.000000 1970-01-01T00:00:10.00Z 10.000000 1970-01-01T00:01:40Z 100.000000 1970-01-01T00:01:40.1Z 100.100000 1970-01-01T00:16:40Z 1000.000000 1970-01-01T00:16:40.12Z 1000.120000 1970-01-01T02:46:40Z 10000.000000 1970-01-01T02:46:40.123Z 10000.123000 1970-01-02T03:46:40Z 100000.000000 1970-01-02T03:46:40.1234Z 100000.123400 1970-01-12T13:46:40Z 1000000.000000 1970-01-12T13:46:40.12345Z 1000000.123450 1970-04-26T17:46:40Z 10000000.000000 1970-04-26T17:46:40.123456Z 10000000.123456 1973-03-03T09:46:40Z 100000000.000000 1973-03-03T09:46:40.1234567Z 100000000.123457 2001-09-09T01:46:40Z 1000000000.000000 2001-09-09T01:46:40.12345678Z 1000000000.123457 2015-05-19T11:49:40Z 1432036180.000000 2015-05-19T11:49:40.123456789Z 1432036180.123457 2017-07-14T02:40:00Z 1500000000.000000 2017-07-14T02:40:00.999Z 1500000000.999000 2033-05-18T03:33:20Z 2000000000.000000 2033-05-18T03:33:20.999999Z 2000000000.999999 mlr --csvlite sec2gmt sec ./reg_test/input/sec2gmt n,sec 1,1970-01-01T00:00:00Z 2,1970-01-01T00:00:01Z 3,1970-01-01T00:00:10Z 4,1970-01-01T00:01:40Z 5,1970-01-01T00:16:40Z 6,1970-01-01T02:46:40Z 7,1970-01-02T03:46:40Z 8,1970-01-12T13:46:40Z 9,1970-04-26T17:46:40Z 10,1973-03-03T09:46:40Z 11,2001-09-09T01:46:40Z 12,2015-05-19T11:49:40Z 13,2017-07-14T02:40:00Z 14,2033-05-18T03:33:20Z 15,2033-05-18T03:33:20Z 16,2033-05-18T03:33:20Z 17,2033-05-18T03:33:20Z 18,2033-05-18T03:33:20Z 19,2033-05-18T03:33:20Z 20,2033-05-18T03:33:20Z 21,2033-05-18T03:33:20Z 22,2033-05-18T03:33:21Z 23, 24,x 25,123x mlr --opprint put $hms=sec2hms($sec); $resec=hms2sec($hms); $diff=$resec-$sec ./reg_test/input/sec2xhms sec hms resec diff 0 00:00:00 0 0 1 00:00:01 1 0 59 00:00:59 59 0 60 00:01:00 60 0 61 00:01:01 61 0 3599 00:59:59 3599 0 3600 01:00:00 3600 0 3601 01:00:01 3601 0 86399 23:59:59 86399 0 86400 24:00:00 86400 0 86401 24:00:01 86401 0 863999 239:59:59 863999 0 864000 240:00:00 864000 0 864001 240:00:01 864001 0 -1 -00:00:01 -1 0 -59 -00:00:59 -59 0 -60 -00:01:00 -60 0 -61 -00:01:01 -61 0 -3599 -00:59:59 -3599 0 -3600 -01:00:00 -3600 0 -3601 -01:00:01 -3601 0 -86399 -23:59:59 -86399 0 -86400 -24:00:00 -86400 0 -86401 -24:00:01 -86401 0 -863999 -239:59:59 -863999 0 -864000 -240:00:00 -864000 0 -864001 -240:00:01 -864001 0 mlr --opprint put $hms=fsec2hms($sec); $resec=hms2fsec($hms); $diff=$resec-$sec ./reg_test/input/fsec2xhms sec hms resec diff 0.25 0:00:00.250000 0.250000 0.000000 1.25 0:00:01.250000 1.250000 0.000000 59.25 0:00:59.250000 59.250000 0.000000 60.25 0:01:00.250000 60.250000 0.000000 61.25 0:01:01.250000 61.250000 0.000000 3599.25 0:59:59.250000 3599.250000 0.000000 3600.25 1:00:00.250000 3600.250000 0.000000 3601.25 1:00:01.250000 3601.250000 0.000000 86399.25 23:59:59.250000 86399.250000 0.000000 86400.25 24:00:00.250000 86400.250000 0.000000 86401.25 24:00:01.250000 86401.250000 0.000000 863999.25 239:59:59.250000 863999.250000 0.000000 864000.25 240:00:00.250000 864000.250000 0.000000 864001.25 240:00:01.250000 864001.250000 0.000000 -0.25 -00:00:00.250000 -0.250000 0.000000 -1.25 -00:00:01.250000 -1.250000 0.000000 -59.25 -00:00:59.250000 -59.250000 0.000000 -60.25 -00:01:00.250000 -60.250000 0.000000 -61.25 -00:01:01.250000 -61.250000 0.000000 -3599.25 -00:59:59.250000 -3599.250000 0.000000 -3600.25 -01:00:00.250000 -3600.250000 0.000000 -3601.25 -01:00:01.250000 -3601.250000 0.000000 -86399.25 -23:59:59.250000 -86399.250000 0.000000 -86400.25 -24:00:00.250000 -86400.250000 0.000000 -86401.25 -24:00:01.250000 -86401.250000 0.000000 -863999.25 -239:59:59.250000 -863999.250000 0.000000 -864000.25 -240:00:00.250000 -864000.250000 0.000000 -864001.25 -240:00:01.250000 -864001.250000 0.000000 mlr --opprint put $hms=sec2dhms($sec); $resec=dhms2sec($hms); $diff=$resec-$sec ./reg_test/input/sec2xhms sec hms resec diff 0 0s 0 0 1 1s 1 0 59 59s 59 0 60 1m00s 60 0 61 1m01s 61 0 3599 59m59s 3599 0 3600 1h00m00s 3600 0 3601 1h00m01s 3601 0 86399 23h59m59s 86399 0 86400 1d00h00m00s 86400 0 86401 1d00h00m01s 86401 0 863999 9d23h59m59s 863999 0 864000 10d00h00m00s 864000 0 864001 10d00h00m01s 864001 0 -1 -1s -1 0 -59 -59s -59 0 -60 -1m00s -60 0 -61 -1m01s -61 0 -3599 -59m59s -3599 0 -3600 -1h00m00s -3600 0 -3601 -1h00m01s -3601 0 -86399 -23h59m59s -86399 0 -86400 -1d00h00m00s -86400 0 -86401 -1d00h00m01s -86401 0 -863999 -9d23h59m59s -863999 0 -864000 -10d00h00m00s -864000 0 -864001 -10d00h00m01s -864001 0 mlr --opprint put $hms=fsec2dhms($sec); $resec=dhms2fsec($hms); $diff=$resec-$sec ./reg_test/input/fsec2xhms sec hms resec diff 0.25 0.250000s 0.250000 0.000000 1.25 1.250000s 1.250000 0.000000 59.25 59.250000s 59.250000 0.000000 60.25 1m00.250000s 60.250000 0.000000 61.25 1m01.250000s 61.250000 0.000000 3599.25 59m59.250000s 3599.250000 0.000000 3600.25 1h00m00.250000s 3600.250000 0.000000 3601.25 1h00m01.250000s 3601.250000 0.000000 86399.25 23h59m59.250000s 86399.250000 0.000000 86400.25 1d00h00m00.250000s 86400.250000 0.000000 86401.25 1d00h00m01.250000s 86401.250000 0.000000 863999.25 9d23h59m59.250000s 863999.250000 0.000000 864000.25 10d00h00m00.250000s 864000.250000 0.000000 864001.25 10d00h00m01.250000s 864001.250000 0.000000 -0.25 -0.250000s -0.250000 0.000000 -1.25 -1.250000s -1.250000 0.000000 -59.25 -59.250000s -59.250000 0.000000 -60.25 -1m00.250000s -60.250000 0.000000 -61.25 -1m01.250000s -61.250000 0.000000 -3599.25 -59m59.250000s -3599.250000 0.000000 -3600.25 -1h00m00.250000s -3600.250000 0.000000 -3601.25 -1h00m01.250000s -3601.250000 0.000000 -86399.25 -23h59m59.250000s -86399.250000 0.000000 -86400.25 -1d00h00m00.250000s -86400.250000 0.000000 -86401.25 -1d00h00m01.250000s -86401.250000 0.000000 -863999.25 -9d23h59m59.250000s -863999.250000 0.000000 -864000.25 -10d00h00m00.250000s -864000.250000 0.000000 -864001.25 -10d00h00m01.250000s -864001.250000 0.000000 mlr --csvlite sec2gmt sec ./reg_test/input/sec2gmt n,sec 1,1970-01-01T00:00:00Z 2,1970-01-01T00:00:01Z 3,1970-01-01T00:00:10Z 4,1970-01-01T00:01:40Z 5,1970-01-01T00:16:40Z 6,1970-01-01T02:46:40Z 7,1970-01-02T03:46:40Z 8,1970-01-12T13:46:40Z 9,1970-04-26T17:46:40Z 10,1973-03-03T09:46:40Z 11,2001-09-09T01:46:40Z 12,2015-05-19T11:49:40Z 13,2017-07-14T02:40:00Z 14,2033-05-18T03:33:20Z 15,2033-05-18T03:33:20Z 16,2033-05-18T03:33:20Z 17,2033-05-18T03:33:20Z 18,2033-05-18T03:33:20Z 19,2033-05-18T03:33:20Z 20,2033-05-18T03:33:20Z 21,2033-05-18T03:33:20Z 22,2033-05-18T03:33:21Z 23, 24,x 25,123x mlr --csvlite sec2gmtdate sec ./reg_test/input/sec2gmt n,sec 1,1970-01-01 2,1970-01-01 3,1970-01-01 4,1970-01-01 5,1970-01-01 6,1970-01-01 7,1970-01-02 8,1970-01-12 9,1970-04-26 10,1973-03-03 11,2001-09-09 12,2015-05-19 13,2017-07-14 14,2033-05-18 15,2033-05-18 16,2033-05-18 17,2033-05-18 18,2033-05-18 19,2033-05-18 20,2033-05-18 21,2033-05-18 22,2033-05-18 23, 24,x 25,123x ================================================================ DSL LOCAL DATE/TIME FUNCTIONS mlr --opprint put $b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b) a b c d 2017-02-18 23:00:00 1487469600.000000 2017-02-18 23:00:00 2017-02-18 2017-02-18 23:59:59 1487473199.000000 2017-02-18 23:59:59 2017-02-18 2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 2017-02-19 2017-02-19 00:30:00 1487475000.000000 2017-02-19 00:30:00 2017-02-19 2017-02-19 01:00:00 1487476800.000000 2017-02-19 01:00:00 2017-02-19 2017-10-14 23:00:00 1508032800.000000 2017-10-14 23:00:00 2017-10-14 2017-10-14 23:59:59 1508036399.000000 2017-10-14 23:59:59 2017-10-14 2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 2017-10-15 00:30:00 1508038200.000000 2017-10-15 01:30:00 2017-10-15 2017-10-15 01:00:00 1508040000.000000 2017-10-15 02:00:00 2017-10-15 mlr --opprint put $b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b) a b c d 2017-02-14 00:00:00 1487041200.000000 2017-02-14 01:00:00 2017-02-14 2017-02-15 00:00:00 1487127600.000000 2017-02-15 01:00:00 2017-02-15 2017-02-16 00:00:00 1487214000.000000 2017-02-16 01:00:00 2017-02-16 2017-02-17 00:00:00 1487300400.000000 2017-02-17 01:00:00 2017-02-17 2017-02-18 00:00:00 1487386800.000000 2017-02-18 01:00:00 2017-02-18 2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 2017-02-19 2017-02-20 00:00:00 1487559600.000000 2017-02-20 00:00:00 2017-02-20 2017-10-12 00:00:00 1507777200.000000 2017-10-12 00:00:00 2017-10-12 2017-10-13 00:00:00 1507863600.000000 2017-10-13 00:00:00 2017-10-13 2017-10-14 00:00:00 1507950000.000000 2017-10-14 00:00:00 2017-10-14 2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 2017-10-16 00:00:00 1508122800.000000 2017-10-16 01:00:00 2017-10-16 2017-10-17 00:00:00 1508209200.000000 2017-10-17 01:00:00 2017-10-17 2017-10-18 00:00:00 1508295600.000000 2017-10-18 01:00:00 2017-10-18 2017-10-19 00:00:00 1508382000.000000 2017-10-19 01:00:00 2017-10-19 mlr --opprint put $b=strptime_local($a, "%Y-%m-%d %H:%M:%S"); $c=strftime_local($b, "%Y-%m-%d %H:%M:%S") a b c 2017-02-18 23:00:00 1487469600.000000 2017-02-18 23:00:00 2017-02-18 23:59:59 1487473199.000000 2017-02-18 23:59:59 2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 2017-02-19 00:30:00 1487475000.000000 2017-02-19 00:30:00 2017-02-19 01:00:00 1487476800.000000 2017-02-19 01:00:00 2017-10-14 23:00:00 1508032800.000000 2017-10-14 23:00:00 2017-10-14 23:59:59 1508036399.000000 2017-10-14 23:59:59 2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 00:30:00 1508038200.000000 2017-10-15 01:30:00 2017-10-15 01:00:00 1508040000.000000 2017-10-15 02:00:00 mlr --opprint put $b=strptime_local($a, "%Y-%m-%d %H:%M:%S"); $c=strftime_local($b, "%Y-%m-%d %H:%M:%S") a b c 2017-02-18 23:00:00 1487469600.000000 2017-02-18 23:00:00 2017-02-18 23:59:59 1487473199.000000 2017-02-18 23:59:59 2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 2017-02-19 00:30:00 1487475000.000000 2017-02-19 00:30:00 2017-02-19 01:00:00 1487476800.000000 2017-02-19 01:00:00 2017-10-14 23:00:00 1508032800.000000 2017-10-14 23:00:00 2017-10-14 23:59:59 1508036399.000000 2017-10-14 23:59:59 2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 00:30:00 1508038200.000000 2017-10-15 01:30:00 2017-10-15 01:00:00 1508040000.000000 2017-10-15 02:00:00 ================================================================ DSL SUB/GSUB/REGEX_EXTRACT mlr --opprint put $y = sub($x, "e.*l", "") ./reg_test/input/sub.dat x y hello ho HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "e.*l"i, "") ./reg_test/input/sub.dat x y hello ho HELLO HO world world WORLD WORLD mlr --opprint put $y = sub($x, "e.*"."l", "") ./reg_test/input/sub.dat x y hello ho HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "e.*l", "y123y") ./reg_test/input/sub.dat x y hello hy123yo HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "e.*l"i, "y123y") ./reg_test/input/sub.dat x y hello hy123yo HELLO Hy123yO world world WORLD WORLD mlr --opprint put $y = sub($x, "e.*"."l", "y123y") ./reg_test/input/sub.dat x y hello hy123yo HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "([hg])e.*l(.)", "yy123y") ./reg_test/input/sub.dat x y hello yhy123oy HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "([hg])e.*l.", "yy123y") ./reg_test/input/sub.dat x y hello yhy123\2y HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "([hg])e.*l(.)", "yy123.y") ./reg_test/input/sub.dat x y hello yhy123.y HELLO HELLO world world WORLD WORLD mlr --opprint put $y = sub($x, "a", "aa") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg aabcdefg ababbabbba aababbabbba LMNOP LMNOP ABCDEFG ABCDEFG ABABBABBBA ABABBABBBA mlr --opprint put $y = gsub($x, "a", "aa") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg aabcdefg ababbabbba aabaabbaabbbaa LMNOP LMNOP ABCDEFG ABCDEFG ABABBABBBA ABABBABBBA mlr --opprint put $y = gsub($x, "A", "Aa") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg abcdefg ababbabbba ababbabbba LMNOP LMNOP ABCDEFG AaBCDEFG ABABBABBBA AaBAaBBAaBBBAa mlr --opprint put $y = gsub($x, "a"i, "Aa") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg Aabcdefg ababbabbba AabAabbAabbbAa LMNOP LMNOP ABCDEFG AaBCDEFG ABABBABBBA AaBAaBBAaBBBAa mlr --opprint put $y = gsub($x, "A"i, "Aa") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg Aabcdefg ababbabbba AabAabbAabbbAa LMNOP LMNOP ABCDEFG AaBCDEFG ABABBABBBA AaBAaBBAaBBBAa mlr --opprint put $y = gsub($x, "a(.)", "aa") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg aabbbcdefg ababbabbba aabbbaabbbbaabbbbba LMNOP LMNOP ABCDEFG ABCDEFG ABABBABBBA ABABBABBBA mlr --opprint put $y = sub($x, "a", "") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg bcdefg ababbabbba babbabbba LMNOP LMNOP ABCDEFG ABCDEFG ABABBABBBA ABABBABBBA mlr --opprint put $y = gsub($x, "a", "") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg bcdefg ababbabbba bbbbbb LMNOP LMNOP ABCDEFG ABCDEFG ABABBABBBA ABABBABBBA mlr --opprint put $y = gsub($x, "A", "") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg abcdefg ababbabbba ababbabbba LMNOP LMNOP ABCDEFG BCDEFG ABABBABBBA BBBBBB mlr --opprint put $y = gsub($x, "a"i, "") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg bcdefg ababbabbba bbbbbb LMNOP LMNOP ABCDEFG BCDEFG ABABBABBBA BBBBBB mlr --opprint put $y = gsub($x, "A"i, "") ./reg_test/input/gsub.dat x y lmnop lmnop abcdefg bcdefg ababbabbba bbbbbb LMNOP LMNOP ABCDEFG BCDEFG ABABBABBBA BBBBBB mlr --oxtab cat ./reg_test/input/subtab.dkvp x afoob x a\tb x a\\tb x a b z x mlr --oxtab put -f ./reg_test/input/subtab1.mlr ./reg_test/input/subtab.dkvp x afoob y afoob x a\tb y a\tb x a\\tb y a\\tb x a b y aTABb z x y mlr --oxtab put -f ./reg_test/input/subtab2.mlr ./reg_test/input/subtab.dkvp x afoob y afoob x a\tb y aTABb x a\\tb y a\TABb x a b y a b z x y mlr --oxtab put -f ./reg_test/input/subtab3.mlr ./reg_test/input/subtab.dkvp x afoob y afoob x a\tb y a\tb x a\\tb y a\\tb x a b y a b z x y mlr --oxtab put -f ./reg_test/input/subtab4.mlr ./reg_test/input/subtab.dkvp x afoob y afoob x a\tb y a b x a\\tb y a\ b x a b y a b z x y mlr --opprint put $y = ssub($x, "HE", "") ./reg_test/input/sub.dat x y hello hello HELLO LLO world world WORLD WORLD mlr --opprint put $y = ssub($x, "HE", "HE") ./reg_test/input/sub.dat x y hello hello HELLO HELLO world world WORLD WORLD mlr --opprint put $y = ssub($x, "HE", "12345") ./reg_test/input/sub.dat x y hello hello HELLO 12345LLO world world WORLD WORLD mlr --opprint put $y = ssub($x, "LL", "1") ./reg_test/input/sub.dat x y hello hello HELLO HE1O world world WORLD WORLD mlr --opprint put $y = ssub($x, "LL", "12") ./reg_test/input/sub.dat x y hello hello HELLO HE12O world world WORLD WORLD mlr --opprint put $y = ssub($x, "LL", "12345") ./reg_test/input/sub.dat x y hello hello HELLO HE12345O world world WORLD WORLD mlr --opprint put $y = ssub($x, "LLO", "") ./reg_test/input/sub.dat x y hello hello HELLO HE world world WORLD WORLD mlr --opprint put $y = ssub($x, "LLO", "12") ./reg_test/input/sub.dat x y hello hello HELLO HE12 world world WORLD WORLD mlr --opprint put $y = ssub($x, "LLO", "123") ./reg_test/input/sub.dat x y hello hello HELLO HE123 world world WORLD WORLD mlr --opprint put $y = ssub($x, "LLO", "123456") ./reg_test/input/sub.dat x y hello hello HELLO HE123456 world world WORLD WORLD mlr --opprint put $y = ssub($x, "HELLO", "") ./reg_test/input/sub.dat x y hello hello HELLO - world world WORLD WORLD mlr --opprint put $y = ssub($x, "HELLO", "1234") ./reg_test/input/sub.dat x y hello hello HELLO 1234 world world WORLD WORLD mlr --opprint put $y = ssub($x, "HELLO", "12345") ./reg_test/input/sub.dat x y hello hello HELLO 12345 world world WORLD WORLD mlr --opprint put $y = ssub($x, "HELLO", "1234678") ./reg_test/input/sub.dat x y hello hello HELLO 1234678 world world WORLD WORLD mlr --opprint put $y = ssub($x, "nonesuch", "") ./reg_test/input/sub.dat x y hello hello HELLO HELLO world world WORLD WORLD mlr --opprint put $y = ssub($x, "nonesuch", "1234") ./reg_test/input/sub.dat x y hello hello HELLO HELLO world world WORLD WORLD mlr --opprint put $y = ssub($x, "nonesuch", "1234567890") ./reg_test/input/sub.dat x y hello hello HELLO HELLO world world WORLD WORLD mlr --oxtab put $y = regextract($x, "[A-Z]+") ./reg_test/input/sub.dat x hello x HELLO y HELLO x world x WORLD y WORLD mlr --oxtab put $y = regextract($x, "[A-Z]*") ./reg_test/input/sub.dat x hello y x HELLO y HELLO x world y x WORLD y WORLD mlr --oxtab put $y = regextract($x, "[a-z]+") ./reg_test/input/sub.dat x hello y hello x HELLO x world y world x WORLD mlr --oxtab put $y = regextract($x, "[a-z]*") ./reg_test/input/sub.dat x hello y hello x HELLO y x world y world x WORLD y mlr --oxtab put $y = regextract($x, "[0-9]+") ./reg_test/input/sub.dat x hello x HELLO x world x WORLD mlr --oxtab put $y = regextract($x, "[0-9]*") ./reg_test/input/sub.dat x hello y x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract($x, "[ef]+") ./reg_test/input/sub.dat x hello y e x HELLO x world x WORLD mlr --oxtab put $y = regextract($x, "[ef]*") ./reg_test/input/sub.dat x hello y x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract($x, "[hi]+") ./reg_test/input/sub.dat x hello y h x HELLO x world x WORLD mlr --oxtab put $y = regextract($x, "[hi]*") ./reg_test/input/sub.dat x hello y h x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract($x, "[op]+") ./reg_test/input/sub.dat x hello y o x HELLO x world y o x WORLD mlr --oxtab put $y = regextract($x, "[op]*") ./reg_test/input/sub.dat x hello y x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract_or_else($x, "[A-Z]+", "DEFAULT") ./reg_test/input/sub.dat x hello y DEFAULT x HELLO y HELLO x world y DEFAULT x WORLD y WORLD mlr --oxtab put $y = regextract_or_else($x, "[A-Z]*", "DEFAULT") ./reg_test/input/sub.dat x hello y x HELLO y HELLO x world y x WORLD y WORLD mlr --oxtab put $y = regextract_or_else($x, "[a-z]+", "DEFAULT") ./reg_test/input/sub.dat x hello y hello x HELLO y DEFAULT x world y world x WORLD y DEFAULT mlr --oxtab put $y = regextract_or_else($x, "[a-z]*", "DEFAULT") ./reg_test/input/sub.dat x hello y hello x HELLO y x world y world x WORLD y mlr --oxtab put $y = regextract_or_else($x, "[0-9]+", "DEFAULT") ./reg_test/input/sub.dat x hello y DEFAULT x HELLO y DEFAULT x world y DEFAULT x WORLD y DEFAULT mlr --oxtab put $y = regextract_or_else($x, "[0-9]*", "DEFAULT") ./reg_test/input/sub.dat x hello y x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract_or_else($x, "[ef]+", "DEFAULT") ./reg_test/input/sub.dat x hello y e x HELLO y DEFAULT x world y DEFAULT x WORLD y DEFAULT mlr --oxtab put $y = regextract_or_else($x, "[ef]*", "DEFAULT") ./reg_test/input/sub.dat x hello y x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract_or_else($x, "[hi]+", "DEFAULT") ./reg_test/input/sub.dat x hello y h x HELLO y DEFAULT x world y DEFAULT x WORLD y DEFAULT mlr --oxtab put $y = regextract_or_else($x, "[hi]*", "DEFAULT") ./reg_test/input/sub.dat x hello y h x HELLO y x world y x WORLD y mlr --oxtab put $y = regextract_or_else($x, "[op]+", "DEFAULT") ./reg_test/input/sub.dat x hello y o x HELLO y DEFAULT x world y o x WORLD y DEFAULT mlr --oxtab put $y = regextract_or_else($x, "[op]*", "DEFAULT") ./reg_test/input/sub.dat x hello y x HELLO y x world y x WORLD y ================================================================ DSL SUBSTR mlr put -q int n = strlen($x); print "input= <<".$x.">>"; for (i = -n-2; i <= n+2; i += 1) { for (j = -n-2; j <= n+2; j += 1) { print "i: ".fmtnum(i,"%3lld") ." j:".fmtnum(j,"%3lld") ." substr(".$x.",".fmtnum(i,"%3lld").",".fmtnum(j,"%3lld")."): <<" .substr($x, i, j) .">>"; } print; } input= <<>> i: -2 j: -2 substr(, -2, -2): <<>> i: -2 j: -1 substr(, -2, -1): <<>> i: -2 j: 0 substr(, -2, 0): <<>> i: -2 j: 1 substr(, -2, 1): <<>> i: -2 j: 2 substr(, -2, 2): <<>> i: -1 j: -2 substr(, -1, -2): <<>> i: -1 j: -1 substr(, -1, -1): <<>> i: -1 j: 0 substr(, -1, 0): <<>> i: -1 j: 1 substr(, -1, 1): <<>> i: -1 j: 2 substr(, -1, 2): <<>> i: 0 j: -2 substr(, 0, -2): <<>> i: 0 j: -1 substr(, 0, -1): <<>> i: 0 j: 0 substr(, 0, 0): <<>> i: 0 j: 1 substr(, 0, 1): <<>> i: 0 j: 2 substr(, 0, 2): <<>> i: 1 j: -2 substr(, 1, -2): <<>> i: 1 j: -1 substr(, 1, -1): <<>> i: 1 j: 0 substr(, 1, 0): <<>> i: 1 j: 1 substr(, 1, 1): <<>> i: 1 j: 2 substr(, 1, 2): <<>> i: 2 j: -2 substr(, 2, -2): <<>> i: 2 j: -1 substr(, 2, -1): <<>> i: 2 j: 0 substr(, 2, 0): <<>> i: 2 j: 1 substr(, 2, 1): <<>> i: 2 j: 2 substr(, 2, 2): <<>> input= <> i: -3 j: -3 substr(o, -3, -3): <<>> i: -3 j: -2 substr(o, -3, -2): <<>> i: -3 j: -1 substr(o, -3, -1): <<>> i: -3 j: 0 substr(o, -3, 0): <<>> i: -3 j: 1 substr(o, -3, 1): <<>> i: -3 j: 2 substr(o, -3, 2): <<>> i: -3 j: 3 substr(o, -3, 3): <<>> i: -2 j: -3 substr(o, -2, -3): <<>> i: -2 j: -2 substr(o, -2, -2): <<>> i: -2 j: -1 substr(o, -2, -1): <<>> i: -2 j: 0 substr(o, -2, 0): <<>> i: -2 j: 1 substr(o, -2, 1): <<>> i: -2 j: 2 substr(o, -2, 2): <<>> i: -2 j: 3 substr(o, -2, 3): <<>> i: -1 j: -3 substr(o, -1, -3): <<>> i: -1 j: -2 substr(o, -1, -2): <<>> i: -1 j: -1 substr(o, -1, -1): <> i: -1 j: 0 substr(o, -1, 0): <> i: -1 j: 1 substr(o, -1, 1): <<>> i: -1 j: 2 substr(o, -1, 2): <<>> i: -1 j: 3 substr(o, -1, 3): <<>> i: 0 j: -3 substr(o, 0, -3): <<>> i: 0 j: -2 substr(o, 0, -2): <<>> i: 0 j: -1 substr(o, 0, -1): <> i: 0 j: 0 substr(o, 0, 0): <> i: 0 j: 1 substr(o, 0, 1): <<>> i: 0 j: 2 substr(o, 0, 2): <<>> i: 0 j: 3 substr(o, 0, 3): <<>> i: 1 j: -3 substr(o, 1, -3): <<>> i: 1 j: -2 substr(o, 1, -2): <<>> i: 1 j: -1 substr(o, 1, -1): <<>> i: 1 j: 0 substr(o, 1, 0): <<>> i: 1 j: 1 substr(o, 1, 1): <<>> i: 1 j: 2 substr(o, 1, 2): <<>> i: 1 j: 3 substr(o, 1, 3): <<>> i: 2 j: -3 substr(o, 2, -3): <<>> i: 2 j: -2 substr(o, 2, -2): <<>> i: 2 j: -1 substr(o, 2, -1): <<>> i: 2 j: 0 substr(o, 2, 0): <<>> i: 2 j: 1 substr(o, 2, 1): <<>> i: 2 j: 2 substr(o, 2, 2): <<>> i: 2 j: 3 substr(o, 2, 3): <<>> i: 3 j: -3 substr(o, 3, -3): <<>> i: 3 j: -2 substr(o, 3, -2): <<>> i: 3 j: -1 substr(o, 3, -1): <<>> i: 3 j: 0 substr(o, 3, 0): <<>> i: 3 j: 1 substr(o, 3, 1): <<>> i: 3 j: 2 substr(o, 3, 2): <<>> i: 3 j: 3 substr(o, 3, 3): <<>> input= <> i: -4 j: -4 substr(o1, -4, -4): <<>> i: -4 j: -3 substr(o1, -4, -3): <<>> i: -4 j: -2 substr(o1, -4, -2): <<>> i: -4 j: -1 substr(o1, -4, -1): <<>> i: -4 j: 0 substr(o1, -4, 0): <<>> i: -4 j: 1 substr(o1, -4, 1): <<>> i: -4 j: 2 substr(o1, -4, 2): <<>> i: -4 j: 3 substr(o1, -4, 3): <<>> i: -4 j: 4 substr(o1, -4, 4): <<>> i: -3 j: -4 substr(o1, -3, -4): <<>> i: -3 j: -3 substr(o1, -3, -3): <<>> i: -3 j: -2 substr(o1, -3, -2): <<>> i: -3 j: -1 substr(o1, -3, -1): <<>> i: -3 j: 0 substr(o1, -3, 0): <<>> i: -3 j: 1 substr(o1, -3, 1): <<>> i: -3 j: 2 substr(o1, -3, 2): <<>> i: -3 j: 3 substr(o1, -3, 3): <<>> i: -3 j: 4 substr(o1, -3, 4): <<>> i: -2 j: -4 substr(o1, -2, -4): <<>> i: -2 j: -3 substr(o1, -2, -3): <<>> i: -2 j: -2 substr(o1, -2, -2): <> i: -2 j: -1 substr(o1, -2, -1): <> i: -2 j: 0 substr(o1, -2, 0): <> i: -2 j: 1 substr(o1, -2, 1): <> i: -2 j: 2 substr(o1, -2, 2): <<>> i: -2 j: 3 substr(o1, -2, 3): <<>> i: -2 j: 4 substr(o1, -2, 4): <<>> i: -1 j: -4 substr(o1, -1, -4): <<>> i: -1 j: -3 substr(o1, -1, -3): <<>> i: -1 j: -2 substr(o1, -1, -2): <<>> i: -1 j: -1 substr(o1, -1, -1): <<1>> i: -1 j: 0 substr(o1, -1, 0): <<>> i: -1 j: 1 substr(o1, -1, 1): <<1>> i: -1 j: 2 substr(o1, -1, 2): <<>> i: -1 j: 3 substr(o1, -1, 3): <<>> i: -1 j: 4 substr(o1, -1, 4): <<>> i: 0 j: -4 substr(o1, 0, -4): <<>> i: 0 j: -3 substr(o1, 0, -3): <<>> i: 0 j: -2 substr(o1, 0, -2): <> i: 0 j: -1 substr(o1, 0, -1): <> i: 0 j: 0 substr(o1, 0, 0): <> i: 0 j: 1 substr(o1, 0, 1): <> i: 0 j: 2 substr(o1, 0, 2): <<>> i: 0 j: 3 substr(o1, 0, 3): <<>> i: 0 j: 4 substr(o1, 0, 4): <<>> i: 1 j: -4 substr(o1, 1, -4): <<>> i: 1 j: -3 substr(o1, 1, -3): <<>> i: 1 j: -2 substr(o1, 1, -2): <<>> i: 1 j: -1 substr(o1, 1, -1): <<1>> i: 1 j: 0 substr(o1, 1, 0): <<>> i: 1 j: 1 substr(o1, 1, 1): <<1>> i: 1 j: 2 substr(o1, 1, 2): <<>> i: 1 j: 3 substr(o1, 1, 3): <<>> i: 1 j: 4 substr(o1, 1, 4): <<>> i: 2 j: -4 substr(o1, 2, -4): <<>> i: 2 j: -3 substr(o1, 2, -3): <<>> i: 2 j: -2 substr(o1, 2, -2): <<>> i: 2 j: -1 substr(o1, 2, -1): <<>> i: 2 j: 0 substr(o1, 2, 0): <<>> i: 2 j: 1 substr(o1, 2, 1): <<>> i: 2 j: 2 substr(o1, 2, 2): <<>> i: 2 j: 3 substr(o1, 2, 3): <<>> i: 2 j: 4 substr(o1, 2, 4): <<>> i: 3 j: -4 substr(o1, 3, -4): <<>> i: 3 j: -3 substr(o1, 3, -3): <<>> i: 3 j: -2 substr(o1, 3, -2): <<>> i: 3 j: -1 substr(o1, 3, -1): <<>> i: 3 j: 0 substr(o1, 3, 0): <<>> i: 3 j: 1 substr(o1, 3, 1): <<>> i: 3 j: 2 substr(o1, 3, 2): <<>> i: 3 j: 3 substr(o1, 3, 3): <<>> i: 3 j: 4 substr(o1, 3, 4): <<>> i: 4 j: -4 substr(o1, 4, -4): <<>> i: 4 j: -3 substr(o1, 4, -3): <<>> i: 4 j: -2 substr(o1, 4, -2): <<>> i: 4 j: -1 substr(o1, 4, -1): <<>> i: 4 j: 0 substr(o1, 4, 0): <<>> i: 4 j: 1 substr(o1, 4, 1): <<>> i: 4 j: 2 substr(o1, 4, 2): <<>> i: 4 j: 3 substr(o1, 4, 3): <<>> i: 4 j: 4 substr(o1, 4, 4): <<>> input= <> i: -12 j:-12 substr(o123456789,-12,-12): <<>> i: -12 j:-11 substr(o123456789,-12,-11): <<>> i: -12 j:-10 substr(o123456789,-12,-10): <<>> i: -12 j: -9 substr(o123456789,-12, -9): <<>> i: -12 j: -8 substr(o123456789,-12, -8): <<>> i: -12 j: -7 substr(o123456789,-12, -7): <<>> i: -12 j: -6 substr(o123456789,-12, -6): <<>> i: -12 j: -5 substr(o123456789,-12, -5): <<>> i: -12 j: -4 substr(o123456789,-12, -4): <<>> i: -12 j: -3 substr(o123456789,-12, -3): <<>> i: -12 j: -2 substr(o123456789,-12, -2): <<>> i: -12 j: -1 substr(o123456789,-12, -1): <<>> i: -12 j: 0 substr(o123456789,-12, 0): <<>> i: -12 j: 1 substr(o123456789,-12, 1): <<>> i: -12 j: 2 substr(o123456789,-12, 2): <<>> i: -12 j: 3 substr(o123456789,-12, 3): <<>> i: -12 j: 4 substr(o123456789,-12, 4): <<>> i: -12 j: 5 substr(o123456789,-12, 5): <<>> i: -12 j: 6 substr(o123456789,-12, 6): <<>> i: -12 j: 7 substr(o123456789,-12, 7): <<>> i: -12 j: 8 substr(o123456789,-12, 8): <<>> i: -12 j: 9 substr(o123456789,-12, 9): <<>> i: -12 j: 10 substr(o123456789,-12, 10): <<>> i: -12 j: 11 substr(o123456789,-12, 11): <<>> i: -12 j: 12 substr(o123456789,-12, 12): <<>> i: -11 j:-12 substr(o123456789,-11,-12): <<>> i: -11 j:-11 substr(o123456789,-11,-11): <<>> i: -11 j:-10 substr(o123456789,-11,-10): <<>> i: -11 j: -9 substr(o123456789,-11, -9): <<>> i: -11 j: -8 substr(o123456789,-11, -8): <<>> i: -11 j: -7 substr(o123456789,-11, -7): <<>> i: -11 j: -6 substr(o123456789,-11, -6): <<>> i: -11 j: -5 substr(o123456789,-11, -5): <<>> i: -11 j: -4 substr(o123456789,-11, -4): <<>> i: -11 j: -3 substr(o123456789,-11, -3): <<>> i: -11 j: -2 substr(o123456789,-11, -2): <<>> i: -11 j: -1 substr(o123456789,-11, -1): <<>> i: -11 j: 0 substr(o123456789,-11, 0): <<>> i: -11 j: 1 substr(o123456789,-11, 1): <<>> i: -11 j: 2 substr(o123456789,-11, 2): <<>> i: -11 j: 3 substr(o123456789,-11, 3): <<>> i: -11 j: 4 substr(o123456789,-11, 4): <<>> i: -11 j: 5 substr(o123456789,-11, 5): <<>> i: -11 j: 6 substr(o123456789,-11, 6): <<>> i: -11 j: 7 substr(o123456789,-11, 7): <<>> i: -11 j: 8 substr(o123456789,-11, 8): <<>> i: -11 j: 9 substr(o123456789,-11, 9): <<>> i: -11 j: 10 substr(o123456789,-11, 10): <<>> i: -11 j: 11 substr(o123456789,-11, 11): <<>> i: -11 j: 12 substr(o123456789,-11, 12): <<>> i: -10 j:-12 substr(o123456789,-10,-12): <<>> i: -10 j:-11 substr(o123456789,-10,-11): <<>> i: -10 j:-10 substr(o123456789,-10,-10): <> i: -10 j: -9 substr(o123456789,-10, -9): <> i: -10 j: -8 substr(o123456789,-10, -8): <> i: -10 j: -7 substr(o123456789,-10, -7): <> i: -10 j: -6 substr(o123456789,-10, -6): <> i: -10 j: -5 substr(o123456789,-10, -5): <> i: -10 j: -4 substr(o123456789,-10, -4): <> i: -10 j: -3 substr(o123456789,-10, -3): <> i: -10 j: -2 substr(o123456789,-10, -2): <> i: -10 j: -1 substr(o123456789,-10, -1): <> i: -10 j: 0 substr(o123456789,-10, 0): <> i: -10 j: 1 substr(o123456789,-10, 1): <> i: -10 j: 2 substr(o123456789,-10, 2): <> i: -10 j: 3 substr(o123456789,-10, 3): <> i: -10 j: 4 substr(o123456789,-10, 4): <> i: -10 j: 5 substr(o123456789,-10, 5): <> i: -10 j: 6 substr(o123456789,-10, 6): <> i: -10 j: 7 substr(o123456789,-10, 7): <> i: -10 j: 8 substr(o123456789,-10, 8): <> i: -10 j: 9 substr(o123456789,-10, 9): <> i: -10 j: 10 substr(o123456789,-10, 10): <<>> i: -10 j: 11 substr(o123456789,-10, 11): <<>> i: -10 j: 12 substr(o123456789,-10, 12): <<>> i: -9 j:-12 substr(o123456789, -9,-12): <<>> i: -9 j:-11 substr(o123456789, -9,-11): <<>> i: -9 j:-10 substr(o123456789, -9,-10): <<>> i: -9 j: -9 substr(o123456789, -9, -9): <<1>> i: -9 j: -8 substr(o123456789, -9, -8): <<12>> i: -9 j: -7 substr(o123456789, -9, -7): <<123>> i: -9 j: -6 substr(o123456789, -9, -6): <<1234>> i: -9 j: -5 substr(o123456789, -9, -5): <<12345>> i: -9 j: -4 substr(o123456789, -9, -4): <<123456>> i: -9 j: -3 substr(o123456789, -9, -3): <<1234567>> i: -9 j: -2 substr(o123456789, -9, -2): <<12345678>> i: -9 j: -1 substr(o123456789, -9, -1): <<123456789>> i: -9 j: 0 substr(o123456789, -9, 0): <<>> i: -9 j: 1 substr(o123456789, -9, 1): <<1>> i: -9 j: 2 substr(o123456789, -9, 2): <<12>> i: -9 j: 3 substr(o123456789, -9, 3): <<123>> i: -9 j: 4 substr(o123456789, -9, 4): <<1234>> i: -9 j: 5 substr(o123456789, -9, 5): <<12345>> i: -9 j: 6 substr(o123456789, -9, 6): <<123456>> i: -9 j: 7 substr(o123456789, -9, 7): <<1234567>> i: -9 j: 8 substr(o123456789, -9, 8): <<12345678>> i: -9 j: 9 substr(o123456789, -9, 9): <<123456789>> i: -9 j: 10 substr(o123456789, -9, 10): <<>> i: -9 j: 11 substr(o123456789, -9, 11): <<>> i: -9 j: 12 substr(o123456789, -9, 12): <<>> i: -8 j:-12 substr(o123456789, -8,-12): <<>> i: -8 j:-11 substr(o123456789, -8,-11): <<>> i: -8 j:-10 substr(o123456789, -8,-10): <<>> i: -8 j: -9 substr(o123456789, -8, -9): <<>> i: -8 j: -8 substr(o123456789, -8, -8): <<2>> i: -8 j: -7 substr(o123456789, -8, -7): <<23>> i: -8 j: -6 substr(o123456789, -8, -6): <<234>> i: -8 j: -5 substr(o123456789, -8, -5): <<2345>> i: -8 j: -4 substr(o123456789, -8, -4): <<23456>> i: -8 j: -3 substr(o123456789, -8, -3): <<234567>> i: -8 j: -2 substr(o123456789, -8, -2): <<2345678>> i: -8 j: -1 substr(o123456789, -8, -1): <<23456789>> i: -8 j: 0 substr(o123456789, -8, 0): <<>> i: -8 j: 1 substr(o123456789, -8, 1): <<>> i: -8 j: 2 substr(o123456789, -8, 2): <<2>> i: -8 j: 3 substr(o123456789, -8, 3): <<23>> i: -8 j: 4 substr(o123456789, -8, 4): <<234>> i: -8 j: 5 substr(o123456789, -8, 5): <<2345>> i: -8 j: 6 substr(o123456789, -8, 6): <<23456>> i: -8 j: 7 substr(o123456789, -8, 7): <<234567>> i: -8 j: 8 substr(o123456789, -8, 8): <<2345678>> i: -8 j: 9 substr(o123456789, -8, 9): <<23456789>> i: -8 j: 10 substr(o123456789, -8, 10): <<>> i: -8 j: 11 substr(o123456789, -8, 11): <<>> i: -8 j: 12 substr(o123456789, -8, 12): <<>> i: -7 j:-12 substr(o123456789, -7,-12): <<>> i: -7 j:-11 substr(o123456789, -7,-11): <<>> i: -7 j:-10 substr(o123456789, -7,-10): <<>> i: -7 j: -9 substr(o123456789, -7, -9): <<>> i: -7 j: -8 substr(o123456789, -7, -8): <<>> i: -7 j: -7 substr(o123456789, -7, -7): <<3>> i: -7 j: -6 substr(o123456789, -7, -6): <<34>> i: -7 j: -5 substr(o123456789, -7, -5): <<345>> i: -7 j: -4 substr(o123456789, -7, -4): <<3456>> i: -7 j: -3 substr(o123456789, -7, -3): <<34567>> i: -7 j: -2 substr(o123456789, -7, -2): <<345678>> i: -7 j: -1 substr(o123456789, -7, -1): <<3456789>> i: -7 j: 0 substr(o123456789, -7, 0): <<>> i: -7 j: 1 substr(o123456789, -7, 1): <<>> i: -7 j: 2 substr(o123456789, -7, 2): <<>> i: -7 j: 3 substr(o123456789, -7, 3): <<3>> i: -7 j: 4 substr(o123456789, -7, 4): <<34>> i: -7 j: 5 substr(o123456789, -7, 5): <<345>> i: -7 j: 6 substr(o123456789, -7, 6): <<3456>> i: -7 j: 7 substr(o123456789, -7, 7): <<34567>> i: -7 j: 8 substr(o123456789, -7, 8): <<345678>> i: -7 j: 9 substr(o123456789, -7, 9): <<3456789>> i: -7 j: 10 substr(o123456789, -7, 10): <<>> i: -7 j: 11 substr(o123456789, -7, 11): <<>> i: -7 j: 12 substr(o123456789, -7, 12): <<>> i: -6 j:-12 substr(o123456789, -6,-12): <<>> i: -6 j:-11 substr(o123456789, -6,-11): <<>> i: -6 j:-10 substr(o123456789, -6,-10): <<>> i: -6 j: -9 substr(o123456789, -6, -9): <<>> i: -6 j: -8 substr(o123456789, -6, -8): <<>> i: -6 j: -7 substr(o123456789, -6, -7): <<>> i: -6 j: -6 substr(o123456789, -6, -6): <<4>> i: -6 j: -5 substr(o123456789, -6, -5): <<45>> i: -6 j: -4 substr(o123456789, -6, -4): <<456>> i: -6 j: -3 substr(o123456789, -6, -3): <<4567>> i: -6 j: -2 substr(o123456789, -6, -2): <<45678>> i: -6 j: -1 substr(o123456789, -6, -1): <<456789>> i: -6 j: 0 substr(o123456789, -6, 0): <<>> i: -6 j: 1 substr(o123456789, -6, 1): <<>> i: -6 j: 2 substr(o123456789, -6, 2): <<>> i: -6 j: 3 substr(o123456789, -6, 3): <<>> i: -6 j: 4 substr(o123456789, -6, 4): <<4>> i: -6 j: 5 substr(o123456789, -6, 5): <<45>> i: -6 j: 6 substr(o123456789, -6, 6): <<456>> i: -6 j: 7 substr(o123456789, -6, 7): <<4567>> i: -6 j: 8 substr(o123456789, -6, 8): <<45678>> i: -6 j: 9 substr(o123456789, -6, 9): <<456789>> i: -6 j: 10 substr(o123456789, -6, 10): <<>> i: -6 j: 11 substr(o123456789, -6, 11): <<>> i: -6 j: 12 substr(o123456789, -6, 12): <<>> i: -5 j:-12 substr(o123456789, -5,-12): <<>> i: -5 j:-11 substr(o123456789, -5,-11): <<>> i: -5 j:-10 substr(o123456789, -5,-10): <<>> i: -5 j: -9 substr(o123456789, -5, -9): <<>> i: -5 j: -8 substr(o123456789, -5, -8): <<>> i: -5 j: -7 substr(o123456789, -5, -7): <<>> i: -5 j: -6 substr(o123456789, -5, -6): <<>> i: -5 j: -5 substr(o123456789, -5, -5): <<5>> i: -5 j: -4 substr(o123456789, -5, -4): <<56>> i: -5 j: -3 substr(o123456789, -5, -3): <<567>> i: -5 j: -2 substr(o123456789, -5, -2): <<5678>> i: -5 j: -1 substr(o123456789, -5, -1): <<56789>> i: -5 j: 0 substr(o123456789, -5, 0): <<>> i: -5 j: 1 substr(o123456789, -5, 1): <<>> i: -5 j: 2 substr(o123456789, -5, 2): <<>> i: -5 j: 3 substr(o123456789, -5, 3): <<>> i: -5 j: 4 substr(o123456789, -5, 4): <<>> i: -5 j: 5 substr(o123456789, -5, 5): <<5>> i: -5 j: 6 substr(o123456789, -5, 6): <<56>> i: -5 j: 7 substr(o123456789, -5, 7): <<567>> i: -5 j: 8 substr(o123456789, -5, 8): <<5678>> i: -5 j: 9 substr(o123456789, -5, 9): <<56789>> i: -5 j: 10 substr(o123456789, -5, 10): <<>> i: -5 j: 11 substr(o123456789, -5, 11): <<>> i: -5 j: 12 substr(o123456789, -5, 12): <<>> i: -4 j:-12 substr(o123456789, -4,-12): <<>> i: -4 j:-11 substr(o123456789, -4,-11): <<>> i: -4 j:-10 substr(o123456789, -4,-10): <<>> i: -4 j: -9 substr(o123456789, -4, -9): <<>> i: -4 j: -8 substr(o123456789, -4, -8): <<>> i: -4 j: -7 substr(o123456789, -4, -7): <<>> i: -4 j: -6 substr(o123456789, -4, -6): <<>> i: -4 j: -5 substr(o123456789, -4, -5): <<>> i: -4 j: -4 substr(o123456789, -4, -4): <<6>> i: -4 j: -3 substr(o123456789, -4, -3): <<67>> i: -4 j: -2 substr(o123456789, -4, -2): <<678>> i: -4 j: -1 substr(o123456789, -4, -1): <<6789>> i: -4 j: 0 substr(o123456789, -4, 0): <<>> i: -4 j: 1 substr(o123456789, -4, 1): <<>> i: -4 j: 2 substr(o123456789, -4, 2): <<>> i: -4 j: 3 substr(o123456789, -4, 3): <<>> i: -4 j: 4 substr(o123456789, -4, 4): <<>> i: -4 j: 5 substr(o123456789, -4, 5): <<>> i: -4 j: 6 substr(o123456789, -4, 6): <<6>> i: -4 j: 7 substr(o123456789, -4, 7): <<67>> i: -4 j: 8 substr(o123456789, -4, 8): <<678>> i: -4 j: 9 substr(o123456789, -4, 9): <<6789>> i: -4 j: 10 substr(o123456789, -4, 10): <<>> i: -4 j: 11 substr(o123456789, -4, 11): <<>> i: -4 j: 12 substr(o123456789, -4, 12): <<>> i: -3 j:-12 substr(o123456789, -3,-12): <<>> i: -3 j:-11 substr(o123456789, -3,-11): <<>> i: -3 j:-10 substr(o123456789, -3,-10): <<>> i: -3 j: -9 substr(o123456789, -3, -9): <<>> i: -3 j: -8 substr(o123456789, -3, -8): <<>> i: -3 j: -7 substr(o123456789, -3, -7): <<>> i: -3 j: -6 substr(o123456789, -3, -6): <<>> i: -3 j: -5 substr(o123456789, -3, -5): <<>> i: -3 j: -4 substr(o123456789, -3, -4): <<>> i: -3 j: -3 substr(o123456789, -3, -3): <<7>> i: -3 j: -2 substr(o123456789, -3, -2): <<78>> i: -3 j: -1 substr(o123456789, -3, -1): <<789>> i: -3 j: 0 substr(o123456789, -3, 0): <<>> i: -3 j: 1 substr(o123456789, -3, 1): <<>> i: -3 j: 2 substr(o123456789, -3, 2): <<>> i: -3 j: 3 substr(o123456789, -3, 3): <<>> i: -3 j: 4 substr(o123456789, -3, 4): <<>> i: -3 j: 5 substr(o123456789, -3, 5): <<>> i: -3 j: 6 substr(o123456789, -3, 6): <<>> i: -3 j: 7 substr(o123456789, -3, 7): <<7>> i: -3 j: 8 substr(o123456789, -3, 8): <<78>> i: -3 j: 9 substr(o123456789, -3, 9): <<789>> i: -3 j: 10 substr(o123456789, -3, 10): <<>> i: -3 j: 11 substr(o123456789, -3, 11): <<>> i: -3 j: 12 substr(o123456789, -3, 12): <<>> i: -2 j:-12 substr(o123456789, -2,-12): <<>> i: -2 j:-11 substr(o123456789, -2,-11): <<>> i: -2 j:-10 substr(o123456789, -2,-10): <<>> i: -2 j: -9 substr(o123456789, -2, -9): <<>> i: -2 j: -8 substr(o123456789, -2, -8): <<>> i: -2 j: -7 substr(o123456789, -2, -7): <<>> i: -2 j: -6 substr(o123456789, -2, -6): <<>> i: -2 j: -5 substr(o123456789, -2, -5): <<>> i: -2 j: -4 substr(o123456789, -2, -4): <<>> i: -2 j: -3 substr(o123456789, -2, -3): <<>> i: -2 j: -2 substr(o123456789, -2, -2): <<8>> i: -2 j: -1 substr(o123456789, -2, -1): <<89>> i: -2 j: 0 substr(o123456789, -2, 0): <<>> i: -2 j: 1 substr(o123456789, -2, 1): <<>> i: -2 j: 2 substr(o123456789, -2, 2): <<>> i: -2 j: 3 substr(o123456789, -2, 3): <<>> i: -2 j: 4 substr(o123456789, -2, 4): <<>> i: -2 j: 5 substr(o123456789, -2, 5): <<>> i: -2 j: 6 substr(o123456789, -2, 6): <<>> i: -2 j: 7 substr(o123456789, -2, 7): <<>> i: -2 j: 8 substr(o123456789, -2, 8): <<8>> i: -2 j: 9 substr(o123456789, -2, 9): <<89>> i: -2 j: 10 substr(o123456789, -2, 10): <<>> i: -2 j: 11 substr(o123456789, -2, 11): <<>> i: -2 j: 12 substr(o123456789, -2, 12): <<>> i: -1 j:-12 substr(o123456789, -1,-12): <<>> i: -1 j:-11 substr(o123456789, -1,-11): <<>> i: -1 j:-10 substr(o123456789, -1,-10): <<>> i: -1 j: -9 substr(o123456789, -1, -9): <<>> i: -1 j: -8 substr(o123456789, -1, -8): <<>> i: -1 j: -7 substr(o123456789, -1, -7): <<>> i: -1 j: -6 substr(o123456789, -1, -6): <<>> i: -1 j: -5 substr(o123456789, -1, -5): <<>> i: -1 j: -4 substr(o123456789, -1, -4): <<>> i: -1 j: -3 substr(o123456789, -1, -3): <<>> i: -1 j: -2 substr(o123456789, -1, -2): <<>> i: -1 j: -1 substr(o123456789, -1, -1): <<9>> i: -1 j: 0 substr(o123456789, -1, 0): <<>> i: -1 j: 1 substr(o123456789, -1, 1): <<>> i: -1 j: 2 substr(o123456789, -1, 2): <<>> i: -1 j: 3 substr(o123456789, -1, 3): <<>> i: -1 j: 4 substr(o123456789, -1, 4): <<>> i: -1 j: 5 substr(o123456789, -1, 5): <<>> i: -1 j: 6 substr(o123456789, -1, 6): <<>> i: -1 j: 7 substr(o123456789, -1, 7): <<>> i: -1 j: 8 substr(o123456789, -1, 8): <<>> i: -1 j: 9 substr(o123456789, -1, 9): <<9>> i: -1 j: 10 substr(o123456789, -1, 10): <<>> i: -1 j: 11 substr(o123456789, -1, 11): <<>> i: -1 j: 12 substr(o123456789, -1, 12): <<>> i: 0 j:-12 substr(o123456789, 0,-12): <<>> i: 0 j:-11 substr(o123456789, 0,-11): <<>> i: 0 j:-10 substr(o123456789, 0,-10): <> i: 0 j: -9 substr(o123456789, 0, -9): <> i: 0 j: -8 substr(o123456789, 0, -8): <> i: 0 j: -7 substr(o123456789, 0, -7): <> i: 0 j: -6 substr(o123456789, 0, -6): <> i: 0 j: -5 substr(o123456789, 0, -5): <> i: 0 j: -4 substr(o123456789, 0, -4): <> i: 0 j: -3 substr(o123456789, 0, -3): <> i: 0 j: -2 substr(o123456789, 0, -2): <> i: 0 j: -1 substr(o123456789, 0, -1): <> i: 0 j: 0 substr(o123456789, 0, 0): <> i: 0 j: 1 substr(o123456789, 0, 1): <> i: 0 j: 2 substr(o123456789, 0, 2): <> i: 0 j: 3 substr(o123456789, 0, 3): <> i: 0 j: 4 substr(o123456789, 0, 4): <> i: 0 j: 5 substr(o123456789, 0, 5): <> i: 0 j: 6 substr(o123456789, 0, 6): <> i: 0 j: 7 substr(o123456789, 0, 7): <> i: 0 j: 8 substr(o123456789, 0, 8): <> i: 0 j: 9 substr(o123456789, 0, 9): <> i: 0 j: 10 substr(o123456789, 0, 10): <<>> i: 0 j: 11 substr(o123456789, 0, 11): <<>> i: 0 j: 12 substr(o123456789, 0, 12): <<>> i: 1 j:-12 substr(o123456789, 1,-12): <<>> i: 1 j:-11 substr(o123456789, 1,-11): <<>> i: 1 j:-10 substr(o123456789, 1,-10): <<>> i: 1 j: -9 substr(o123456789, 1, -9): <<1>> i: 1 j: -8 substr(o123456789, 1, -8): <<12>> i: 1 j: -7 substr(o123456789, 1, -7): <<123>> i: 1 j: -6 substr(o123456789, 1, -6): <<1234>> i: 1 j: -5 substr(o123456789, 1, -5): <<12345>> i: 1 j: -4 substr(o123456789, 1, -4): <<123456>> i: 1 j: -3 substr(o123456789, 1, -3): <<1234567>> i: 1 j: -2 substr(o123456789, 1, -2): <<12345678>> i: 1 j: -1 substr(o123456789, 1, -1): <<123456789>> i: 1 j: 0 substr(o123456789, 1, 0): <<>> i: 1 j: 1 substr(o123456789, 1, 1): <<1>> i: 1 j: 2 substr(o123456789, 1, 2): <<12>> i: 1 j: 3 substr(o123456789, 1, 3): <<123>> i: 1 j: 4 substr(o123456789, 1, 4): <<1234>> i: 1 j: 5 substr(o123456789, 1, 5): <<12345>> i: 1 j: 6 substr(o123456789, 1, 6): <<123456>> i: 1 j: 7 substr(o123456789, 1, 7): <<1234567>> i: 1 j: 8 substr(o123456789, 1, 8): <<12345678>> i: 1 j: 9 substr(o123456789, 1, 9): <<123456789>> i: 1 j: 10 substr(o123456789, 1, 10): <<>> i: 1 j: 11 substr(o123456789, 1, 11): <<>> i: 1 j: 12 substr(o123456789, 1, 12): <<>> i: 2 j:-12 substr(o123456789, 2,-12): <<>> i: 2 j:-11 substr(o123456789, 2,-11): <<>> i: 2 j:-10 substr(o123456789, 2,-10): <<>> i: 2 j: -9 substr(o123456789, 2, -9): <<>> i: 2 j: -8 substr(o123456789, 2, -8): <<2>> i: 2 j: -7 substr(o123456789, 2, -7): <<23>> i: 2 j: -6 substr(o123456789, 2, -6): <<234>> i: 2 j: -5 substr(o123456789, 2, -5): <<2345>> i: 2 j: -4 substr(o123456789, 2, -4): <<23456>> i: 2 j: -3 substr(o123456789, 2, -3): <<234567>> i: 2 j: -2 substr(o123456789, 2, -2): <<2345678>> i: 2 j: -1 substr(o123456789, 2, -1): <<23456789>> i: 2 j: 0 substr(o123456789, 2, 0): <<>> i: 2 j: 1 substr(o123456789, 2, 1): <<>> i: 2 j: 2 substr(o123456789, 2, 2): <<2>> i: 2 j: 3 substr(o123456789, 2, 3): <<23>> i: 2 j: 4 substr(o123456789, 2, 4): <<234>> i: 2 j: 5 substr(o123456789, 2, 5): <<2345>> i: 2 j: 6 substr(o123456789, 2, 6): <<23456>> i: 2 j: 7 substr(o123456789, 2, 7): <<234567>> i: 2 j: 8 substr(o123456789, 2, 8): <<2345678>> i: 2 j: 9 substr(o123456789, 2, 9): <<23456789>> i: 2 j: 10 substr(o123456789, 2, 10): <<>> i: 2 j: 11 substr(o123456789, 2, 11): <<>> i: 2 j: 12 substr(o123456789, 2, 12): <<>> i: 3 j:-12 substr(o123456789, 3,-12): <<>> i: 3 j:-11 substr(o123456789, 3,-11): <<>> i: 3 j:-10 substr(o123456789, 3,-10): <<>> i: 3 j: -9 substr(o123456789, 3, -9): <<>> i: 3 j: -8 substr(o123456789, 3, -8): <<>> i: 3 j: -7 substr(o123456789, 3, -7): <<3>> i: 3 j: -6 substr(o123456789, 3, -6): <<34>> i: 3 j: -5 substr(o123456789, 3, -5): <<345>> i: 3 j: -4 substr(o123456789, 3, -4): <<3456>> i: 3 j: -3 substr(o123456789, 3, -3): <<34567>> i: 3 j: -2 substr(o123456789, 3, -2): <<345678>> i: 3 j: -1 substr(o123456789, 3, -1): <<3456789>> i: 3 j: 0 substr(o123456789, 3, 0): <<>> i: 3 j: 1 substr(o123456789, 3, 1): <<>> i: 3 j: 2 substr(o123456789, 3, 2): <<>> i: 3 j: 3 substr(o123456789, 3, 3): <<3>> i: 3 j: 4 substr(o123456789, 3, 4): <<34>> i: 3 j: 5 substr(o123456789, 3, 5): <<345>> i: 3 j: 6 substr(o123456789, 3, 6): <<3456>> i: 3 j: 7 substr(o123456789, 3, 7): <<34567>> i: 3 j: 8 substr(o123456789, 3, 8): <<345678>> i: 3 j: 9 substr(o123456789, 3, 9): <<3456789>> i: 3 j: 10 substr(o123456789, 3, 10): <<>> i: 3 j: 11 substr(o123456789, 3, 11): <<>> i: 3 j: 12 substr(o123456789, 3, 12): <<>> i: 4 j:-12 substr(o123456789, 4,-12): <<>> i: 4 j:-11 substr(o123456789, 4,-11): <<>> i: 4 j:-10 substr(o123456789, 4,-10): <<>> i: 4 j: -9 substr(o123456789, 4, -9): <<>> i: 4 j: -8 substr(o123456789, 4, -8): <<>> i: 4 j: -7 substr(o123456789, 4, -7): <<>> i: 4 j: -6 substr(o123456789, 4, -6): <<4>> i: 4 j: -5 substr(o123456789, 4, -5): <<45>> i: 4 j: -4 substr(o123456789, 4, -4): <<456>> i: 4 j: -3 substr(o123456789, 4, -3): <<4567>> i: 4 j: -2 substr(o123456789, 4, -2): <<45678>> i: 4 j: -1 substr(o123456789, 4, -1): <<456789>> i: 4 j: 0 substr(o123456789, 4, 0): <<>> i: 4 j: 1 substr(o123456789, 4, 1): <<>> i: 4 j: 2 substr(o123456789, 4, 2): <<>> i: 4 j: 3 substr(o123456789, 4, 3): <<>> i: 4 j: 4 substr(o123456789, 4, 4): <<4>> i: 4 j: 5 substr(o123456789, 4, 5): <<45>> i: 4 j: 6 substr(o123456789, 4, 6): <<456>> i: 4 j: 7 substr(o123456789, 4, 7): <<4567>> i: 4 j: 8 substr(o123456789, 4, 8): <<45678>> i: 4 j: 9 substr(o123456789, 4, 9): <<456789>> i: 4 j: 10 substr(o123456789, 4, 10): <<>> i: 4 j: 11 substr(o123456789, 4, 11): <<>> i: 4 j: 12 substr(o123456789, 4, 12): <<>> i: 5 j:-12 substr(o123456789, 5,-12): <<>> i: 5 j:-11 substr(o123456789, 5,-11): <<>> i: 5 j:-10 substr(o123456789, 5,-10): <<>> i: 5 j: -9 substr(o123456789, 5, -9): <<>> i: 5 j: -8 substr(o123456789, 5, -8): <<>> i: 5 j: -7 substr(o123456789, 5, -7): <<>> i: 5 j: -6 substr(o123456789, 5, -6): <<>> i: 5 j: -5 substr(o123456789, 5, -5): <<5>> i: 5 j: -4 substr(o123456789, 5, -4): <<56>> i: 5 j: -3 substr(o123456789, 5, -3): <<567>> i: 5 j: -2 substr(o123456789, 5, -2): <<5678>> i: 5 j: -1 substr(o123456789, 5, -1): <<56789>> i: 5 j: 0 substr(o123456789, 5, 0): <<>> i: 5 j: 1 substr(o123456789, 5, 1): <<>> i: 5 j: 2 substr(o123456789, 5, 2): <<>> i: 5 j: 3 substr(o123456789, 5, 3): <<>> i: 5 j: 4 substr(o123456789, 5, 4): <<>> i: 5 j: 5 substr(o123456789, 5, 5): <<5>> i: 5 j: 6 substr(o123456789, 5, 6): <<56>> i: 5 j: 7 substr(o123456789, 5, 7): <<567>> i: 5 j: 8 substr(o123456789, 5, 8): <<5678>> i: 5 j: 9 substr(o123456789, 5, 9): <<56789>> i: 5 j: 10 substr(o123456789, 5, 10): <<>> i: 5 j: 11 substr(o123456789, 5, 11): <<>> i: 5 j: 12 substr(o123456789, 5, 12): <<>> i: 6 j:-12 substr(o123456789, 6,-12): <<>> i: 6 j:-11 substr(o123456789, 6,-11): <<>> i: 6 j:-10 substr(o123456789, 6,-10): <<>> i: 6 j: -9 substr(o123456789, 6, -9): <<>> i: 6 j: -8 substr(o123456789, 6, -8): <<>> i: 6 j: -7 substr(o123456789, 6, -7): <<>> i: 6 j: -6 substr(o123456789, 6, -6): <<>> i: 6 j: -5 substr(o123456789, 6, -5): <<>> i: 6 j: -4 substr(o123456789, 6, -4): <<6>> i: 6 j: -3 substr(o123456789, 6, -3): <<67>> i: 6 j: -2 substr(o123456789, 6, -2): <<678>> i: 6 j: -1 substr(o123456789, 6, -1): <<6789>> i: 6 j: 0 substr(o123456789, 6, 0): <<>> i: 6 j: 1 substr(o123456789, 6, 1): <<>> i: 6 j: 2 substr(o123456789, 6, 2): <<>> i: 6 j: 3 substr(o123456789, 6, 3): <<>> i: 6 j: 4 substr(o123456789, 6, 4): <<>> i: 6 j: 5 substr(o123456789, 6, 5): <<>> i: 6 j: 6 substr(o123456789, 6, 6): <<6>> i: 6 j: 7 substr(o123456789, 6, 7): <<67>> i: 6 j: 8 substr(o123456789, 6, 8): <<678>> i: 6 j: 9 substr(o123456789, 6, 9): <<6789>> i: 6 j: 10 substr(o123456789, 6, 10): <<>> i: 6 j: 11 substr(o123456789, 6, 11): <<>> i: 6 j: 12 substr(o123456789, 6, 12): <<>> i: 7 j:-12 substr(o123456789, 7,-12): <<>> i: 7 j:-11 substr(o123456789, 7,-11): <<>> i: 7 j:-10 substr(o123456789, 7,-10): <<>> i: 7 j: -9 substr(o123456789, 7, -9): <<>> i: 7 j: -8 substr(o123456789, 7, -8): <<>> i: 7 j: -7 substr(o123456789, 7, -7): <<>> i: 7 j: -6 substr(o123456789, 7, -6): <<>> i: 7 j: -5 substr(o123456789, 7, -5): <<>> i: 7 j: -4 substr(o123456789, 7, -4): <<>> i: 7 j: -3 substr(o123456789, 7, -3): <<7>> i: 7 j: -2 substr(o123456789, 7, -2): <<78>> i: 7 j: -1 substr(o123456789, 7, -1): <<789>> i: 7 j: 0 substr(o123456789, 7, 0): <<>> i: 7 j: 1 substr(o123456789, 7, 1): <<>> i: 7 j: 2 substr(o123456789, 7, 2): <<>> i: 7 j: 3 substr(o123456789, 7, 3): <<>> i: 7 j: 4 substr(o123456789, 7, 4): <<>> i: 7 j: 5 substr(o123456789, 7, 5): <<>> i: 7 j: 6 substr(o123456789, 7, 6): <<>> i: 7 j: 7 substr(o123456789, 7, 7): <<7>> i: 7 j: 8 substr(o123456789, 7, 8): <<78>> i: 7 j: 9 substr(o123456789, 7, 9): <<789>> i: 7 j: 10 substr(o123456789, 7, 10): <<>> i: 7 j: 11 substr(o123456789, 7, 11): <<>> i: 7 j: 12 substr(o123456789, 7, 12): <<>> i: 8 j:-12 substr(o123456789, 8,-12): <<>> i: 8 j:-11 substr(o123456789, 8,-11): <<>> i: 8 j:-10 substr(o123456789, 8,-10): <<>> i: 8 j: -9 substr(o123456789, 8, -9): <<>> i: 8 j: -8 substr(o123456789, 8, -8): <<>> i: 8 j: -7 substr(o123456789, 8, -7): <<>> i: 8 j: -6 substr(o123456789, 8, -6): <<>> i: 8 j: -5 substr(o123456789, 8, -5): <<>> i: 8 j: -4 substr(o123456789, 8, -4): <<>> i: 8 j: -3 substr(o123456789, 8, -3): <<>> i: 8 j: -2 substr(o123456789, 8, -2): <<8>> i: 8 j: -1 substr(o123456789, 8, -1): <<89>> i: 8 j: 0 substr(o123456789, 8, 0): <<>> i: 8 j: 1 substr(o123456789, 8, 1): <<>> i: 8 j: 2 substr(o123456789, 8, 2): <<>> i: 8 j: 3 substr(o123456789, 8, 3): <<>> i: 8 j: 4 substr(o123456789, 8, 4): <<>> i: 8 j: 5 substr(o123456789, 8, 5): <<>> i: 8 j: 6 substr(o123456789, 8, 6): <<>> i: 8 j: 7 substr(o123456789, 8, 7): <<>> i: 8 j: 8 substr(o123456789, 8, 8): <<8>> i: 8 j: 9 substr(o123456789, 8, 9): <<89>> i: 8 j: 10 substr(o123456789, 8, 10): <<>> i: 8 j: 11 substr(o123456789, 8, 11): <<>> i: 8 j: 12 substr(o123456789, 8, 12): <<>> i: 9 j:-12 substr(o123456789, 9,-12): <<>> i: 9 j:-11 substr(o123456789, 9,-11): <<>> i: 9 j:-10 substr(o123456789, 9,-10): <<>> i: 9 j: -9 substr(o123456789, 9, -9): <<>> i: 9 j: -8 substr(o123456789, 9, -8): <<>> i: 9 j: -7 substr(o123456789, 9, -7): <<>> i: 9 j: -6 substr(o123456789, 9, -6): <<>> i: 9 j: -5 substr(o123456789, 9, -5): <<>> i: 9 j: -4 substr(o123456789, 9, -4): <<>> i: 9 j: -3 substr(o123456789, 9, -3): <<>> i: 9 j: -2 substr(o123456789, 9, -2): <<>> i: 9 j: -1 substr(o123456789, 9, -1): <<9>> i: 9 j: 0 substr(o123456789, 9, 0): <<>> i: 9 j: 1 substr(o123456789, 9, 1): <<>> i: 9 j: 2 substr(o123456789, 9, 2): <<>> i: 9 j: 3 substr(o123456789, 9, 3): <<>> i: 9 j: 4 substr(o123456789, 9, 4): <<>> i: 9 j: 5 substr(o123456789, 9, 5): <<>> i: 9 j: 6 substr(o123456789, 9, 6): <<>> i: 9 j: 7 substr(o123456789, 9, 7): <<>> i: 9 j: 8 substr(o123456789, 9, 8): <<>> i: 9 j: 9 substr(o123456789, 9, 9): <<9>> i: 9 j: 10 substr(o123456789, 9, 10): <<>> i: 9 j: 11 substr(o123456789, 9, 11): <<>> i: 9 j: 12 substr(o123456789, 9, 12): <<>> i: 10 j:-12 substr(o123456789, 10,-12): <<>> i: 10 j:-11 substr(o123456789, 10,-11): <<>> i: 10 j:-10 substr(o123456789, 10,-10): <<>> i: 10 j: -9 substr(o123456789, 10, -9): <<>> i: 10 j: -8 substr(o123456789, 10, -8): <<>> i: 10 j: -7 substr(o123456789, 10, -7): <<>> i: 10 j: -6 substr(o123456789, 10, -6): <<>> i: 10 j: -5 substr(o123456789, 10, -5): <<>> i: 10 j: -4 substr(o123456789, 10, -4): <<>> i: 10 j: -3 substr(o123456789, 10, -3): <<>> i: 10 j: -2 substr(o123456789, 10, -2): <<>> i: 10 j: -1 substr(o123456789, 10, -1): <<>> i: 10 j: 0 substr(o123456789, 10, 0): <<>> i: 10 j: 1 substr(o123456789, 10, 1): <<>> i: 10 j: 2 substr(o123456789, 10, 2): <<>> i: 10 j: 3 substr(o123456789, 10, 3): <<>> i: 10 j: 4 substr(o123456789, 10, 4): <<>> i: 10 j: 5 substr(o123456789, 10, 5): <<>> i: 10 j: 6 substr(o123456789, 10, 6): <<>> i: 10 j: 7 substr(o123456789, 10, 7): <<>> i: 10 j: 8 substr(o123456789, 10, 8): <<>> i: 10 j: 9 substr(o123456789, 10, 9): <<>> i: 10 j: 10 substr(o123456789, 10, 10): <<>> i: 10 j: 11 substr(o123456789, 10, 11): <<>> i: 10 j: 12 substr(o123456789, 10, 12): <<>> i: 11 j:-12 substr(o123456789, 11,-12): <<>> i: 11 j:-11 substr(o123456789, 11,-11): <<>> i: 11 j:-10 substr(o123456789, 11,-10): <<>> i: 11 j: -9 substr(o123456789, 11, -9): <<>> i: 11 j: -8 substr(o123456789, 11, -8): <<>> i: 11 j: -7 substr(o123456789, 11, -7): <<>> i: 11 j: -6 substr(o123456789, 11, -6): <<>> i: 11 j: -5 substr(o123456789, 11, -5): <<>> i: 11 j: -4 substr(o123456789, 11, -4): <<>> i: 11 j: -3 substr(o123456789, 11, -3): <<>> i: 11 j: -2 substr(o123456789, 11, -2): <<>> i: 11 j: -1 substr(o123456789, 11, -1): <<>> i: 11 j: 0 substr(o123456789, 11, 0): <<>> i: 11 j: 1 substr(o123456789, 11, 1): <<>> i: 11 j: 2 substr(o123456789, 11, 2): <<>> i: 11 j: 3 substr(o123456789, 11, 3): <<>> i: 11 j: 4 substr(o123456789, 11, 4): <<>> i: 11 j: 5 substr(o123456789, 11, 5): <<>> i: 11 j: 6 substr(o123456789, 11, 6): <<>> i: 11 j: 7 substr(o123456789, 11, 7): <<>> i: 11 j: 8 substr(o123456789, 11, 8): <<>> i: 11 j: 9 substr(o123456789, 11, 9): <<>> i: 11 j: 10 substr(o123456789, 11, 10): <<>> i: 11 j: 11 substr(o123456789, 11, 11): <<>> i: 11 j: 12 substr(o123456789, 11, 12): <<>> i: 12 j:-12 substr(o123456789, 12,-12): <<>> i: 12 j:-11 substr(o123456789, 12,-11): <<>> i: 12 j:-10 substr(o123456789, 12,-10): <<>> i: 12 j: -9 substr(o123456789, 12, -9): <<>> i: 12 j: -8 substr(o123456789, 12, -8): <<>> i: 12 j: -7 substr(o123456789, 12, -7): <<>> i: 12 j: -6 substr(o123456789, 12, -6): <<>> i: 12 j: -5 substr(o123456789, 12, -5): <<>> i: 12 j: -4 substr(o123456789, 12, -4): <<>> i: 12 j: -3 substr(o123456789, 12, -3): <<>> i: 12 j: -2 substr(o123456789, 12, -2): <<>> i: 12 j: -1 substr(o123456789, 12, -1): <<>> i: 12 j: 0 substr(o123456789, 12, 0): <<>> i: 12 j: 1 substr(o123456789, 12, 1): <<>> i: 12 j: 2 substr(o123456789, 12, 2): <<>> i: 12 j: 3 substr(o123456789, 12, 3): <<>> i: 12 j: 4 substr(o123456789, 12, 4): <<>> i: 12 j: 5 substr(o123456789, 12, 5): <<>> i: 12 j: 6 substr(o123456789, 12, 6): <<>> i: 12 j: 7 substr(o123456789, 12, 7): <<>> i: 12 j: 8 substr(o123456789, 12, 8): <<>> i: 12 j: 9 substr(o123456789, 12, 9): <<>> i: 12 j: 10 substr(o123456789, 12, 10): <<>> i: 12 j: 11 substr(o123456789, 12, 11): <<>> i: 12 j: 12 substr(o123456789, 12, 12): <<>> ================================================================ DSL SYSTEM mlr put $counter = system("echo X".NR."Y") ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,counter=X1Y a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,counter=X2Y a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,counter=X3Y a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,counter=X4Y a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,counter=X5Y a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,counter=X6Y a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,counter=X7Y a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,counter=X8Y a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,counter=X9Y a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,counter=X10Y ================================================================ DSL OOSVARS mlr --opprint put -v begin{@ox=0}; $d=$x-@ox; @ox=$x ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="-", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="-", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y d pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 zee pan 6 0.5271261600918548 0.49322128674835697 -0.046163 eks zee 7 0.6117840605678454 0.1878849191181694 0.084658 zee wye 8 0.5985540091064224 0.976181385699006 -0.013230 hat wye 9 0.03144187646093577 0.7495507603507059 -0.567112 pan wye 10 0.5026260055412137 0.9526183602969864 0.471184 mlr --opprint put -v begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x then step -a ratio -f x ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="? :", type=OPERATOR: text="==", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. text="1.0", type=NUMERIC_LITERAL. text="/", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="? :", type=OPERATOR: text="==", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. text="1.0", type=NUMERIC_LITERAL. text="/", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y d x_ratio pan pan 1 0.3467901443380824 0.7268028627434533 1.000000 1.000000 eks pan 2 0.7586799647899636 0.5221511083334797 2.187721 2.187721 wye wye 3 0.20460330576630303 0.33831852551664776 0.269683 0.269683 eks wye 4 0.38139939387114097 0.13418874328430463 1.864092 1.864092 wye pan 5 0.5732889198020006 0.8636244699032729 1.503120 1.503120 zee pan 6 0.5271261600918548 0.49322128674835697 0.919477 0.919477 eks zee 7 0.6117840605678454 0.1878849191181694 1.160603 1.160603 zee wye 8 0.5985540091064224 0.976181385699006 0.978375 0.978375 hat wye 9 0.03144187646093577 0.7495507603507059 0.052530 0.052530 pan wye 10 0.5026260055412137 0.9526183602969864 15.985878 15.985878 mlr --opprint put -v $d=$x/@ox; @ox=$x then step -a ratio -f x ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="/", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="/", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y d x_ratio pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 1.000000 eks pan 2 0.7586799647899636 0.5221511083334797 2.187721 2.187721 wye wye 3 0.20460330576630303 0.33831852551664776 0.269683 0.269683 eks wye 4 0.38139939387114097 0.13418874328430463 1.864092 1.864092 wye pan 5 0.5732889198020006 0.8636244699032729 1.503120 1.503120 zee pan 6 0.5271261600918548 0.49322128674835697 0.919477 0.919477 eks zee 7 0.6117840605678454 0.1878849191181694 1.160603 1.160603 zee wye 8 0.5985540091064224 0.976181385699006 0.978375 0.978375 hat wye 9 0.03144187646093577 0.7495507603507059 0.052530 0.052530 pan wye 10 0.5026260055412137 0.9526183602969864 15.985878 15.985878 mlr --opprint put -v begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x then step -a ratio -f x ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="? :", type=OPERATOR: text="==", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. text="1.0", type=NUMERIC_LITERAL. text="/", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="? :", type=OPERATOR: text="==", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="no", type=STRING_LITERAL. text="1.0", type=NUMERIC_LITERAL. text="/", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y d x_ratio pan pan 1 0.3467901443380824 0.7268028627434533 1.000000 1.000000 eks pan 2 0.7586799647899636 0.5221511083334797 2.187721 2.187721 wye wye 3 0.20460330576630303 0.33831852551664776 0.269683 0.269683 eks wye 4 0.38139939387114097 0.13418874328430463 1.864092 1.864092 wye pan 5 0.5732889198020006 0.8636244699032729 1.503120 1.503120 zee pan 6 0.5271261600918548 0.49322128674835697 0.919477 0.919477 eks zee 7 0.6117840605678454 0.1878849191181694 1.160603 1.160603 zee wye 8 0.5985540091064224 0.976181385699006 0.978375 0.978375 hat wye 9 0.03144187646093577 0.7495507603507059 0.052530 0.052530 pan wye 10 0.5026260055412137 0.9526183602969864 15.985878 15.985878 mlr --opprint put -v begin{@rsum = 0}; @rsum = @rsum + $x; $rsum = @rsum ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="rsum", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="rsum", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="rsum", type=STRING_LITERAL. a b i x y rsum pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 eks pan 2 0.7586799647899636 0.5221511083334797 1.105470 wye wye 3 0.20460330576630303 0.33831852551664776 1.310073 eks wye 4 0.38139939387114097 0.13418874328430463 1.691473 wye pan 5 0.5732889198020006 0.8636244699032729 2.264762 zee pan 6 0.5271261600918548 0.49322128674835697 2.791888 eks zee 7 0.6117840605678454 0.1878849191181694 3.403672 zee wye 8 0.5985540091064224 0.976181385699006 4.002226 hat wye 9 0.03144187646093577 0.7495507603507059 4.033668 pan wye 10 0.5026260055412137 0.9526183602969864 4.536294 mlr --opprint put -v begin{@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="za", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zb", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zc", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="i", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="za", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zb", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zc", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="i", type=FIELD_NAME. a b i x y za zb zc d pan pan 1 0.3467901443380824 0.7268028627434533 0 0 0 0 eks pan 2 0.7586799647899636 0.5221511083334797 0 0 1 1 wye wye 3 0.20460330576630303 0.33831852551664776 0 1 2 3 eks wye 4 0.38139939387114097 0.13418874328430463 1 2 3 6 wye pan 5 0.5732889198020006 0.8636244699032729 2 3 4 9 zee pan 6 0.5271261600918548 0.49322128674835697 3 4 5 12 eks zee 7 0.6117840605678454 0.1878849191181694 4 5 6 15 zee wye 8 0.5985540091064224 0.976181385699006 5 6 7 18 hat wye 9 0.03144187646093577 0.7495507603507059 6 7 8 21 pan wye 10 0.5026260055412137 0.9526183602969864 7 8 9 24 mlr --opprint put -v begin {@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="za", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zb", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zc", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="i", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="za", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zb", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="zc", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="+", type=OPERATOR: text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="i", type=FIELD_NAME. a b i x y za zb zc d pan pan 1 0.3467901443380824 0.7268028627434533 0 0 0 0 eks pan 2 0.7586799647899636 0.5221511083334797 0 0 1 1 wye wye 3 0.20460330576630303 0.33831852551664776 0 1 2 3 eks wye 4 0.38139939387114097 0.13418874328430463 1 2 3 6 wye pan 5 0.5732889198020006 0.8636244699032729 2 3 4 9 zee pan 6 0.5271261600918548 0.49322128674835697 3 4 5 12 eks zee 7 0.6117840605678454 0.1878849191181694 4 5 6 15 zee wye 8 0.5985540091064224 0.976181385699006 5 6 7 18 hat wye 9 0.03144187646093577 0.7495507603507059 6 7 8 21 pan wye 10 0.5026260055412137 0.9526183602969864 7 8 9 24 mlr --opprint put -v begin{@ox=0}; $d=$x-@ox; @ox=$x ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="-", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="-", type=OPERATOR: text="x", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="ox", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y d pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 zee pan 6 0.5271261600918548 0.49322128674835697 -0.046163 eks zee 7 0.6117840605678454 0.1878849191181694 0.084658 zee wye 8 0.5985540091064224 0.976181385699006 -0.013230 hat wye 9 0.03144187646093577 0.7495507603507059 -0.567112 pan wye 10 0.5026260055412137 0.9526183602969864 0.471184 mlr put -v @a=$a; @b=$b; @c=$x; end {emitf @a; emitf @b; emitf @c} ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="a", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="b", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="stream", type=STREAM: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="stream", type=STREAM: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="stream", type=STREAM: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="stream", type=STREAM: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="stream", type=STREAM: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="stream", type=STREAM: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="a", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="b", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="x", type=FIELD_NAME. a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan b=wye c=0.502626 mlr put -v @a=$a; @b=$b; @c=$x; end{emitf @a, @b, @c} ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="a", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="b", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="stream", type=STREAM: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="stream", type=STREAM: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="a", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="b", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="x", type=FIELD_NAME. a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=wye,c=0.502626 mlr --opprint put -v begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x; end{@mean=@sum/@count; emitf @mean} ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="0.0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="/", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="stream", type=STREAM: BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="0.0", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="/", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="stream", type=STREAM: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mean 0.453629 mlr --opprint put -v end{@mean=@sum/@count; emitf @mean}; begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="/", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="stream", type=STREAM: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="0.0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="x", type=FIELD_NAME. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="0.0", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="/", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="mean", type=STRING_LITERAL. text="stream", type=STREAM: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="count", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="sum", type=STRING_LITERAL. text="x", type=FIELD_NAME. a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mean 0.453629 mlr put -v begin{ @a = @b[1] }; $c = @d; @e[$i][2+$j][3] = $4; end{@f[@g[5][@h]] = 6} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="c", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="d", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="e", type=STRING_LITERAL. text="i", type=FIELD_NAME. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="j", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. text="4", type=FIELD_NAME. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="f", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="g", type=STRING_LITERAL. text="5", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="h", type=STRING_LITERAL. text="6", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="f", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="g", type=STRING_LITERAL. text="5", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="h", type=STRING_LITERAL. text="6", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="c", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="d", type=STRING_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="e", type=STRING_LITERAL. text="i", type=FIELD_NAME. text="+", type=OPERATOR: text="2", type=NUMERIC_LITERAL. text="j", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. text="4", type=FIELD_NAME. mlr put @y[$a]=$y; end{dump} ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 { "y": { "pan": 0.952618, "eks": 0.187885, "wye": 0.863624, "zee": 0.976181, "hat": 0.749551 } } mlr stats1 -a sum -f y -g a ./reg_test/input/abixy a=pan,y_sum=1.679421 a=eks,y_sum=0.844225 a=wye,y_sum=1.201943 a=zee,y_sum=1.469403 a=hat,y_sum=0.749551 mlr put @y_sum[$a] = $y; end{dump} ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 { "y_sum": { "pan": 0.952618, "eks": 0.187885, "wye": 0.863624, "zee": 0.976181, "hat": 0.749551 } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump} ./reg_test/input/unset1.dkvp { "s": 9, "t": { "1": 9 }, "u": { "1": { "2": 9 } } } { "t": { "1": 9 }, "u": { "1": { "2": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump} ./reg_test/input/unset1.dkvp { "s": 9, "t": { "1": 9 }, "u": { "1": { "2": 9 } } } { "s": 9, "u": { "1": { "2": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump} ./reg_test/input/unset1.dkvp { "s": 9, "t": { "1": 9 }, "u": { "1": { "2": 9 } } } { "s": 9, "t": { }, "u": { "1": { "2": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump} ./reg_test/input/unset1.dkvp { "s": 9, "t": { "1": 9 }, "u": { "1": { "2": 9 } } } { "s": 9, "t": { "1": 9 } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump} ./reg_test/input/unset1.dkvp { "s": 9, "t": { "1": 9 }, "u": { "1": { "2": 9 } } } { "s": 9, "t": { "1": 9 }, "u": { } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump} ./reg_test/input/unset1.dkvp { "s": 9, "t": { "1": 9 }, "u": { "1": { "2": 9 } } } { "s": 9, "t": { "1": 9 }, "u": { "1": { } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { "s": 9, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { "s": 9, "t": { "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { "s": 9, "t": { "1": 9, "4": 9 } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "4": { "5": 9, "6": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "3": 9 }, "4": { "5": 9, "6": 9 } } } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset all; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { } mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @*; dump} ./reg_test/input/unset4.dkvp { "s": 9, "t": { "1": 9, "4": 9 }, "u": { "1": { "2": 9, "3": 9 }, "4": { "5": 9, "6": 9 } } } { } mlr put unset $x ./reg_test/input/unset4.dkvp a=1,b=2 a=1,b=3 a=4,b=5 a=4,b=6 mlr put unset $*; $aaa = 999 ./reg_test/input/unset4.dkvp aaa=999 aaa=999 aaa=999 aaa=999 mlr --from ./reg_test/input/abixy put x = 1; print "OX=".x; unset x; print "NX=".x OX=1 NX= a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 OX=1 NX= a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 OX=1 NX= a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 OX=1 NX= a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 OX=1 NX= a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 OX=1 NX= a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 OX=1 NX= a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 OX=1 NX= a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 OX=1 NX= a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 OX=1 NX= a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr put -q @{variable.name} += $x; end{emit @{variable.name}} ./reg_test/input/abixy variable.name=4.536294 mlr put -q @{variable.name}[$a] += $x; end{emit @{variable.name},"a"} ./reg_test/input/abixy a=pan,variable.name=0.849416 a=eks,variable.name=1.751863 a=wye,variable.name=0.777892 a=zee,variable.name=1.125680 a=hat,variable.name=0.031442 mlr put for (k,v in $*) { if (k == "i") {unset $[k]}} ./reg_test/input/abixy a=pan,b=pan,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,x=0.5026260055412137,y=0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put -q @output[NR] = $*; end { for ((nr, k), v in @output) { if (nr == 4 || k == "i") { unset @output[nr][k] } } emitp @output, "NR", "k" } NR k output 1 a pan 1 b pan 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 x 0.20460330576630303 3 y 0.33831852551664776 5 a wye 5 b pan 5 x 0.5732889198020006 5 y 0.8636244699032729 6 a zee 6 b pan 6 x 0.5271261600918548 6 y 0.49322128674835697 7 a eks 7 b zee 7 x 0.6117840605678454 7 y 0.1878849191181694 8 a zee 8 b wye 8 x 0.5985540091064224 8 y 0.976181385699006 9 a hat 9 b wye 9 x 0.03144187646093577 9 y 0.7495507603507059 10 a pan 10 b wye 10 x 0.5026260055412137 10 y 0.9526183602969864 ================================================================ DSL PATTERN-ACTION BLOCKS mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {}; $x=6; end{@z=9} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1}; $x=6; end{@z=9} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2}; $x=6; end{@z=9} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2;$u=3}; $x=6; end{@z=9} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="u", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="u", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;@t["u".$5]=2;emitf @v,@w;dump}; $x=6; end{@z=9} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text=".", type=OPERATOR: text="u", type=STRING_LITERAL. text="5", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="w", type=STRING_LITERAL. text="stream", type=STREAM: text="dump", type=DUMP: text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="all", type=FULL_OOSVAR. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="z", type=STRING_LITERAL. text="9", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="e", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="||", type=OPERATOR: text="==", type=OPERATOR: text="f", type=FIELD_NAME. text="g", type=FIELD_NAME. text="==", type=OPERATOR: text="h", type=FIELD_NAME. text="i", type=FIELD_NAME. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text=".", type=OPERATOR: text="u", type=STRING_LITERAL. text="5", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="emitf", type=EMITF: text="emitf", type=EMITF: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="w", type=STRING_LITERAL. text="stream", type=STREAM: text="dump", type=DUMP: text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="all", type=FULL_OOSVAR. text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. mlr put -v begin{true{@x=1}}; true{@x=2}; end{true{@x=3}} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="3", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="3", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="x", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. ================================================================ DSL STACK-ALLOCATION mlr --from ./reg_test/input/abixy put -v -a -f ./reg_test/input/test-dsl-stack-allocation.mlr RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="f", type=FUNC_DEF: text="f", type=NON_SIGIL_NAME: text="a", type=UNTYPED_PARAMETER_DEFINITION. text="b", type=UNTYPED_PARAMETER_DEFINITION. text="c", type=UNTYPED_PARAMETER_DEFINITION. text="func_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="*", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1000", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. text="while", type=WHILE: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="v", type=NONINDEXED_LOCAL_VARIABLE. text=":", type=STRING_LITERAL. text="a", type=NONINDEXED_LOCAL_VARIABLE. text=":", type=STRING_LITERAL. text="b", type=NONINDEXED_LOCAL_VARIABLE. text=":", type=STRING_LITERAL. text="c", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="f:1:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR_KEY_ONLY: text="k", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="f:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="f:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="j", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="f:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="break", type=BREAK. text="s", type=SUBR_DEF: text="s", type=NON_SIGIL_NAME: text="a", type=UNTYPED_PARAMETER_DEFINITION. text="b", type=UNTYPED_PARAMETER_DEFINITION. text="c", type=UNTYPED_PARAMETER_DEFINITION. text="subr_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="*", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2000", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. text="while", type=WHILE: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="v", type=NONINDEXED_LOCAL_VARIABLE. text=":", type=STRING_LITERAL. text="a", type=NONINDEXED_LOCAL_VARIABLE. text=":", type=STRING_LITERAL. text="b", type=NONINDEXED_LOCAL_VARIABLE. text=":", type=STRING_LITERAL. text="c", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="s:1:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR_KEY_ONLY: text="k", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="s:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="s:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="j", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="s:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="break", type=BREAK. text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text="BEGIN", type=STRING_LITERAL. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="456", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="4", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="2", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR_KEY_ONLY: text="k", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="b:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="b:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="j", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="b:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="print", type=PRINT: text="MAIN", type=STRING_LITERAL. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="*", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4000", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. text="while", type=WHILE: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="v", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="m:1:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR_KEY_ONLY: text="k", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="m:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="m:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="j", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="m:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="break", type=BREAK. text="=", type=SREC_ASSIGNMENT: text="o", type=FIELD_NAME. text="f", type=FUNCTION_CALLSITE: text="NR", type=CONTEXT_VARIABLE. text="a", type=FIELD_NAME. text="y", type=FIELD_NAME. text="subr_call", type=SUBR_CALLSITE: text="s", type=FUNCTION_CALLSITE: text="b", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. text="**", type=OPERATOR: text="i", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text="END", type=STRING_LITERAL. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="100", type=NUMERIC_LITERAL. text="789", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="4", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="2", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR_KEY_ONLY: text="k", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="e:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="e:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. text="j", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. text="sum", type=NONINDEXED_LOCAL_VARIABLE. text="print", type=PRINT: text=".", type=OPERATOR: text="e:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: ALLOCATING RELATIVE (PASS-1) LOCALS FOR DEFINITION BLOCK [f] ADD FOR ABSENT s @ 0u0 ADD PARAMETER a @ 1s0 ADD PARAMETER b @ 2s0 ADD PARAMETER c @ 3s0 PUSH SUBFRAME cond_block READ nonesuch ABSENT @ 0s0 ADD DEFINE val @ 0s1 PUSH SUBFRAME while_block PUSH SUBFRAME if_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ v PRESENT @ 1s4 READ a PRESENT @ 1s0 READ b PRESENT @ 2s0 READ c PRESENT @ 3s0 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME if subframe_var_count=0 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 READ k PRESENT @ 0s4 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME elif subframe_var_count=0 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ k PRESENT @ 0s4 READ v PRESENT @ 1s4 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME elif subframe_var_count=0 PUSH SUBFRAME elif_block ADD DEFINE sum @ 0s3 PUSH SUBFRAME for ADD DEFINE i @ 0s4 READ i PRESENT @ 0s4 READ i PRESENT @ 0s4 REUSE WRITE i @ 0s4 PUSH SUBFRAME for ADD DEFINE j @ 0s5 READ j PRESENT @ 0s5 READ j PRESENT @ 0s5 REUSE WRITE j @ 0s5 READ sum PRESENT @ 0s3 READ i PRESENT @ 0s4 READ j PRESENT @ 0s5 REUSE WRITE sum @ 0s3 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 READ sum PRESENT @ 0s3 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME elif subframe_var_count=1 POP SUBFRAME while subframe_var_count=0 POP SUBFRAME cond subframe_var_count=1 BLOCK f subframe_var_count=4 max_subframe_depth=6 ALLOCATING RELATIVE (PASS-1) LOCALS FOR DEFINITION BLOCK [s] ADD FOR ABSENT s @ 0u0 ADD PARAMETER a @ 1s0 ADD PARAMETER b @ 2s0 ADD PARAMETER c @ 3s0 PUSH SUBFRAME cond_block READ nonesuch ABSENT @ 0s0 ADD DEFINE val @ 0s1 PUSH SUBFRAME while_block PUSH SUBFRAME if_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ v PRESENT @ 1s4 READ a PRESENT @ 1s0 READ b PRESENT @ 2s0 READ c PRESENT @ 3s0 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME if subframe_var_count=0 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 READ k PRESENT @ 0s4 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME elif subframe_var_count=0 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ k PRESENT @ 0s4 READ v PRESENT @ 1s4 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME elif subframe_var_count=0 PUSH SUBFRAME elif_block ADD DEFINE sum @ 0s3 PUSH SUBFRAME for ADD DEFINE i @ 0s4 READ i PRESENT @ 0s4 READ i PRESENT @ 0s4 REUSE WRITE i @ 0s4 PUSH SUBFRAME for ADD DEFINE j @ 0s5 READ j PRESENT @ 0s5 READ j PRESENT @ 0s5 REUSE WRITE j @ 0s5 READ sum PRESENT @ 0s3 READ i PRESENT @ 0s4 READ j PRESENT @ 0s5 REUSE WRITE sum @ 0s3 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 READ sum PRESENT @ 0s3 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME elif subframe_var_count=1 POP SUBFRAME while subframe_var_count=0 POP SUBFRAME cond subframe_var_count=1 BLOCK s subframe_var_count=4 max_subframe_depth=6 ALLOCATING RELATIVE (PASS-1) LOCALS FOR begin BLOCK ADD FOR ABSENT s @ 0u0 PUSH SUBFRAME cond_block READ nonesuch ABSENT @ 0s0 ADD DEFINE val @ 0s1 PUSH SUBFRAME for ADD DEFINE idx @ 0s2 READ idx PRESENT @ 0s2 READ idx PRESENT @ 0s2 REUSE WRITE idx @ 0s2 READ idx PRESENT @ 0s2 PUSH SUBFRAME if_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 READ k PRESENT @ 0s4 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME if subframe_var_count=0 READ idx PRESENT @ 0s2 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ k PRESENT @ 0s4 READ v PRESENT @ 1s4 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME elif subframe_var_count=0 READ idx PRESENT @ 0s2 PUSH SUBFRAME elif_block ADD DEFINE sum @ 0s3 PUSH SUBFRAME for ADD DEFINE i @ 0s4 READ i PRESENT @ 0s4 READ i PRESENT @ 0s4 REUSE WRITE i @ 0s4 PUSH SUBFRAME for ADD DEFINE j @ 0s5 READ j PRESENT @ 0s5 READ j PRESENT @ 0s5 REUSE WRITE j @ 0s5 READ sum PRESENT @ 0s3 READ i PRESENT @ 0s4 READ j PRESENT @ 0s5 REUSE WRITE sum @ 0s3 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 READ sum PRESENT @ 0s3 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME elif subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME cond subframe_var_count=1 BLOCK begin subframe_var_count=1 max_subframe_depth=6 ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK ADD FOR ABSENT s @ 0u0 PUSH SUBFRAME cond_block READ nonesuch ABSENT @ 0s0 ADD DEFINE val @ 0s1 PUSH SUBFRAME while_block PUSH SUBFRAME if_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ v PRESENT @ 1s4 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME if subframe_var_count=0 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 READ k PRESENT @ 0s4 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME elif subframe_var_count=0 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ k PRESENT @ 0s4 READ v PRESENT @ 1s4 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME elif subframe_var_count=0 PUSH SUBFRAME elif_block ADD DEFINE sum @ 0s3 PUSH SUBFRAME for ADD DEFINE i @ 0s4 READ i PRESENT @ 0s4 READ i PRESENT @ 0s4 REUSE WRITE i @ 0s4 PUSH SUBFRAME for ADD DEFINE j @ 0s5 READ j PRESENT @ 0s5 READ j PRESENT @ 0s5 REUSE WRITE j @ 0s5 READ sum PRESENT @ 0s3 READ i PRESENT @ 0s4 READ j PRESENT @ 0s5 REUSE WRITE sum @ 0s3 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 READ sum PRESENT @ 0s3 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME elif subframe_var_count=1 POP SUBFRAME while subframe_var_count=0 POP SUBFRAME cond subframe_var_count=1 BLOCK main_block subframe_var_count=1 max_subframe_depth=6 ALLOCATING RELATIVE (PASS-1) LOCALS FOR end BLOCK ADD FOR ABSENT s @ 0u0 PUSH SUBFRAME cond_block READ nonesuch ABSENT @ 0s0 ADD DEFINE val @ 0s1 PUSH SUBFRAME for ADD DEFINE idx @ 0s2 READ idx PRESENT @ 0s2 READ idx PRESENT @ 0s2 REUSE WRITE idx @ 0s2 READ idx PRESENT @ 0s2 PUSH SUBFRAME if_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 READ k PRESENT @ 0s4 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME if subframe_var_count=0 READ idx PRESENT @ 0s2 PUSH SUBFRAME elif_block PUSH SUBFRAME for ADD FOR-BIND k @ 0s4 ADD FOR-BIND v @ 1s4 READ k PRESENT @ 0s4 READ v PRESENT @ 1s4 POP SUBFRAME for subframe_var_count=2 POP SUBFRAME elif subframe_var_count=0 READ idx PRESENT @ 0s2 PUSH SUBFRAME elif_block ADD DEFINE sum @ 0s3 PUSH SUBFRAME for ADD DEFINE i @ 0s4 READ i PRESENT @ 0s4 READ i PRESENT @ 0s4 REUSE WRITE i @ 0s4 PUSH SUBFRAME for ADD DEFINE j @ 0s5 READ j PRESENT @ 0s5 READ j PRESENT @ 0s5 REUSE WRITE j @ 0s5 READ sum PRESENT @ 0s3 READ i PRESENT @ 0s4 READ j PRESENT @ 0s5 REUSE WRITE sum @ 0s3 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 READ sum PRESENT @ 0s3 REUSE WRITE val @ 0s1 READ val PRESENT @ 0s1 POP SUBFRAME elif subframe_var_count=1 POP SUBFRAME for subframe_var_count=1 POP SUBFRAME cond subframe_var_count=1 BLOCK end subframe_var_count=1 max_subframe_depth=6 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [f] SUBFRAME [f] var_count_below=0 var_count_at=4 max_var_depth_so_far=4 subframe_depth=0 NODE a 1s0 (0:0) -> 1 NODE b 2s0 (0:0) -> 2 NODE c 3s0 (0:0) -> 3 SUBFRAME [cond_block] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=1 NODE val 0s1 (0:0,1:4) -> 4 NODE nonesuch 0s0 (0:0,1:4) -> 0 SUBFRAME [while_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=2 SUBFRAME [if_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=3 SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 NODE a 1s0 (0:0,1:4,2:5,3:5,4:5) -> 1 NODE b 2s0 (0:0,1:4,2:5,3:5,4:5) -> 2 NODE c 3s0 (0:0,1:4,2:5,3:5,4:5) -> 3 NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 SUBFRAME [elif_block] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=3 NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 SUBFRAME [for] var_count_below=6 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 SUBFRAME [for] var_count_below=7 var_count_at=1 max_var_depth_so_far=8 subframe_depth=5 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6,5:7) -> 6 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [s] SUBFRAME [s] var_count_below=0 var_count_at=4 max_var_depth_so_far=4 subframe_depth=0 NODE a 1s0 (0:0) -> 1 NODE b 2s0 (0:0) -> 2 NODE c 3s0 (0:0) -> 3 SUBFRAME [cond_block] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=1 NODE val 0s1 (0:0,1:4) -> 4 NODE nonesuch 0s0 (0:0,1:4) -> 0 SUBFRAME [while_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=2 SUBFRAME [if_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=3 SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 NODE a 1s0 (0:0,1:4,2:5,3:5,4:5) -> 1 NODE b 2s0 (0:0,1:4,2:5,3:5,4:5) -> 2 NODE c 3s0 (0:0,1:4,2:5,3:5,4:5) -> 3 NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 SUBFRAME [elif_block] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=3 NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 SUBFRAME [for] var_count_below=6 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 SUBFRAME [for] var_count_below=7 var_count_at=1 max_var_depth_so_far=8 subframe_depth=5 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 NODE i 0s4 (0:0,1:4,2:5,3:5,4:6,5:7) -> 6 NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [begin] SUBFRAME [begin] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 SUBFRAME [cond_block] var_count_below=1 var_count_at=1 max_var_depth_so_far=2 subframe_depth=1 NODE val 0s1 (0:0,1:1) -> 1 NODE nonesuch 0s0 (0:0,1:1) -> 0 SUBFRAME [for] var_count_below=2 var_count_at=1 max_var_depth_so_far=3 subframe_depth=2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 SUBFRAME [if_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=3 subframe_depth=3 SUBFRAME [for] var_count_below=3 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE idx 0s2 (0:0,1:1,2:2) -> 2 SUBFRAME [elif_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 SUBFRAME [for] var_count_below=3 var_count_at=2 max_var_depth_so_far=5 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 NODE idx 0s2 (0:0,1:1,2:2) -> 2 SUBFRAME [elif_block] var_count_below=3 var_count_at=1 max_var_depth_so_far=5 subframe_depth=3 NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 SUBFRAME [for] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=6 subframe_depth=5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4,5:5) -> 4 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] SUBFRAME [main_block] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 SUBFRAME [cond_block] var_count_below=1 var_count_at=1 max_var_depth_so_far=2 subframe_depth=1 NODE val 0s1 (0:0,1:1) -> 1 NODE nonesuch 0s0 (0:0,1:1) -> 0 SUBFRAME [while_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=2 subframe_depth=2 SUBFRAME [if_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=2 subframe_depth=3 SUBFRAME [for] var_count_below=2 var_count_at=2 max_var_depth_so_far=4 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 NODE val 0s1 (0:0,1:1,2:2,3:2,4:2) -> 1 NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 NODE val 0s1 (0:0,1:1,2:2,3:2,4:2) -> 1 SUBFRAME [elif_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 SUBFRAME [for] var_count_below=2 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 SUBFRAME [elif_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 SUBFRAME [for] var_count_below=2 var_count_at=2 max_var_depth_so_far=4 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 SUBFRAME [elif_block] var_count_below=2 var_count_at=1 max_var_depth_so_far=4 subframe_depth=3 NODE sum 0s3 (0:0,1:1,2:2,3:2) -> 2 SUBFRAME [for] var_count_below=3 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 SUBFRAME [for] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=5 NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 NODE sum 0s3 (0:0,1:1,2:2,3:2,4:3,5:4) -> 2 NODE sum 0s3 (0:0,1:1,2:2,3:2,4:3,5:4) -> 2 NODE i 0s4 (0:0,1:1,2:2,3:2,4:3,5:4) -> 3 NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 NODE val 0s1 (0:0,1:1,2:2,3:2) -> 1 NODE sum 0s3 (0:0,1:1,2:2,3:2) -> 2 NODE val 0s1 (0:0,1:1,2:2,3:2) -> 1 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [end] SUBFRAME [end] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 SUBFRAME [cond_block] var_count_below=1 var_count_at=1 max_var_depth_so_far=2 subframe_depth=1 NODE val 0s1 (0:0,1:1) -> 1 NODE nonesuch 0s0 (0:0,1:1) -> 0 SUBFRAME [for] var_count_below=2 var_count_at=1 max_var_depth_so_far=3 subframe_depth=2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 NODE idx 0s2 (0:0,1:1,2:2) -> 2 SUBFRAME [if_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=3 subframe_depth=3 SUBFRAME [for] var_count_below=3 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE idx 0s2 (0:0,1:1,2:2) -> 2 SUBFRAME [elif_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 SUBFRAME [for] var_count_below=3 var_count_at=2 max_var_depth_so_far=5 subframe_depth=4 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 NODE idx 0s2 (0:0,1:1,2:2) -> 2 SUBFRAME [elif_block] var_count_below=3 var_count_at=1 max_var_depth_so_far=5 subframe_depth=3 NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 SUBFRAME [for] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=6 subframe_depth=5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 NODE i 0s4 (0:0,1:1,2:2,3:3,4:4,5:5) -> 4 NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 BLOCKED AST: FUNCTION DEFINITION: text="f", type=FUNC_DEF: subframe_var_count=4 max_subframe_depth=6 max_var_depth=8 text="f", type=NON_SIGIL_NAME: text="a", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="b", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="c", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="func_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="*", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1000", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="while", type=WHILE: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text=":", type=STRING_LITERAL. text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text=":", type=STRING_LITERAL. text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text=":", type=STRING_LITERAL. text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="print", type=PRINT: text=".", type=OPERATOR: text="f:1:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="f:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR: subframe_var_count=2 text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="f:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="print", type=PRINT: text=".", type=OPERATOR: text="f:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="break", type=BREAK. SUBROUTINE DEFINITION: text="s", type=SUBR_DEF: subframe_var_count=4 max_subframe_depth=6 max_var_depth=8 text="s", type=NON_SIGIL_NAME: text="a", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="b", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="c", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="subr_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="*", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2000", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="while", type=WHILE: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text=":", type=STRING_LITERAL. text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text=":", type=STRING_LITERAL. text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text=":", type=STRING_LITERAL. text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="print", type=PRINT: text=".", type=OPERATOR: text="s:1:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="s:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR: subframe_var_count=2 text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="s:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 text="print", type=PRINT: text=".", type=OPERATOR: text="s:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="break", type=BREAK. BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=6 max_var_depth=6 text="begin_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text="BEGIN", type=STRING_LITERAL. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="456", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="4", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="+", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="2", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="b:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR: subframe_var_count=2 text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="b:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="print", type=PRINT: text=".", type=OPERATOR: text="b:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=6 max_var_depth=6 text="end_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text="END", type=STRING_LITERAL. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="100", type=NUMERIC_LITERAL. text="789", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="4", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="+", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="2", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="e:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR: subframe_var_count=2 text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="e:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 text="print", type=PRINT: text=".", type=OPERATOR: text="e:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=6 max_var_depth=5 text="print", type=PRINT: text="MAIN", type=STRING_LITERAL. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="*", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4000", type=NUMERIC_LITERAL. text="cond", type=CONDITIONAL_BLOCK: text="true", type=BOOLEAN_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="while", type=WHILE: text="==", type=OPERATOR: text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 text="print", type=PRINT: text=".", type=OPERATOR: text="m:1:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="2", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text="m:2:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="for", type=FOR_OOSVAR: subframe_var_count=2 text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text=".", type=OPERATOR: text="m:3:k:", type=STRING_LITERAL. text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 text="v:", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 text="var", type=UNTYPED_LOCAL_DEFINITION: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 text="0", type=NUMERIC_LITERAL. text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="+", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="for", type=TRIPLE_FOR: subframe_var_count=1 text="triple_for_start_statements", type=STATEMENT_LIST: text="var", type=UNTYPED_LOCAL_DEFINITION: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 text="1", type=NUMERIC_LITERAL. text="triple_for_continuation_statements", type=STATEMENT_LIST: text="<=", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 text="10", type=NUMERIC_LITERAL. text="triple_for_update_statements", type=STATEMENT_LIST: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 text="+", type=OPERATOR: text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 text="1", type=NUMERIC_LITERAL. text="triple_for_block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 text="+", type=OPERATOR: text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 text="*", type=OPERATOR: text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 text="print", type=PRINT: text=".", type=OPERATOR: text="m:val:", type=STRING_LITERAL. text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="break", type=BREAK. text="=", type=SREC_ASSIGNMENT: text="o", type=FIELD_NAME. text="f", type=FUNCTION_CALLSITE: text="NR", type=CONTEXT_VARIABLE. text="a", type=FIELD_NAME. text="y", type=FIELD_NAME. text="subr_call", type=SUBR_CALLSITE: text="s", type=FUNCTION_CALLSITE: text="b", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. text="**", type=OPERATOR: text="i", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. BEGIN b:2:k:0 b:3:k:0v:456 b:val:3025 MAIN m:1:val:pan m:1:val:pan m:1:val:1 m:1:val:0.346790 m:1:val:0.726803 f:1:val:pan:1:pan:0.726803 f:1:val:pan:1:pan:0.726803 f:1:val:1:1:pan:0.726803 f:1:val:0.346790:1:pan:0.726803 f:1:val:0.726803:1:pan:0.726803 s:1:val:pan:pan:1:1.000000 s:1:val:pan:pan:1:1.000000 s:1:val:1:pan:1:1.000000 s:1:val:0.346790:pan:1:1.000000 s:1:val:0.726803:pan:1:1.000000 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 MAIN m:2:k:0 m:2:k:1 m:2:k:2 f:2:k:0 f:2:k:1 f:2:k:2 s:2:k:0 s:2:k:1 s:2:k:2 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 MAIN m:3:k:0v:456 m:3:k:1v:2000 m:3:k:2v:4000 m:3:k:3v:12000 f:3:k:0v:456 f:3:k:1v:2000 f:3:k:2v:4000 f:3:k:3v:3000 s:3:k:0v:456 s:3:k:1v:2000 s:3:k:2v:4000 s:3:k:3v:6000 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 MAIN m:val:3025 f:val:3025 s:val:3025 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 MAIN a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 MAIN a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 MAIN a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 MAIN a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 MAIN a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 MAIN a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 END e:2:k:0 e:2:k:1 e:2:k:2 e:2:k:3 e:2:k:4 e:2:k:5 e:2:k:6 e:2:k:7 e:2:k:8 e:2:k:9 e:2:k:10 e:2:k:100 e:3:k:0v:456 e:3:k:1v:2000 e:3:k:2v:4000 e:3:k:3v:6000 e:3:k:4v:8000 e:3:k:5v:10000 e:3:k:6v:12000 e:3:k:7v:14000 e:3:k:8v:16000 e:3:k:9v:18000 e:3:k:10v:20000 e:3:k:100v:789 e:val:3025 mlr --from ./reg_test/input/abixy put a=a; $oa = a a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a; a = b; $oc = a a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a; b = 4;a = b; $oe= a a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,oe=4 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,oe=4 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,oe=4 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,oe=4 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,oe=4 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,oe=4 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,oe=4 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,oe=4 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,oe=4 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,oe=4 ================================================================ DSL IF-CHAINING ---------------------------------------------------------------- IF/ELIF WITH ELSE mlr --from ./reg_test/input/xy40.dkvp put -v if (NR==1) { $x = 2; $y = 3 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. i=1,x=2,y=3 i=2,x=102,y=202 i=3,x=103,y=203 i=4,x=104,y=204 i=5,x=105,y=205 i=6,x=106,y=206 i=7,x=107,y=207 i=8,x=108,y=208 i=9,x=109,y=209 i=10,x=110,y=210 i=11,x=111,y=211 i=12,x=112,y=212 i=13,x=113,y=213 i=14,x=114,y=214 i=15,x=115,y=215 i=16,x=116,y=216 i=17,x=117,y=217 i=18,x=118,y=218 i=19,x=119,y=219 i=20,x=120,y=220 i=21,x=121,y=221 i=22,x=122,y=222 i=23,x=123,y=223 i=24,x=124,y=224 i=25,x=125,y=225 i=26,x=126,y=226 i=27,x=127,y=227 i=28,x=128,y=228 i=29,x=129,y=229 i=30,x=130,y=230 i=31,x=131,y=231 i=32,x=132,y=232 i=33,x=133,y=233 i=34,x=134,y=234 i=35,x=135,y=235 i=36,x=136,y=236 i=37,x=137,y=237 i=38,x=138,y=238 i=39,x=139,y=239 i=40,x=140,y=240 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 4) { $x = 5; $y = 6 } else { $x = 1007; $y = 1008 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1007", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1008", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1007", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1008", type=NUMERIC_LITERAL. i=1,x=1007,y=1008 i=2,x=1007,y=1008 i=3,x=1007,y=1008 i=4,x=5,y=6 i=5,x=1007,y=1008 i=6,x=1007,y=1008 i=7,x=1007,y=1008 i=8,x=1007,y=1008 i=9,x=1007,y=1008 i=10,x=1007,y=1008 i=11,x=1007,y=1008 i=12,x=1007,y=1008 i=13,x=1007,y=1008 i=14,x=1007,y=1008 i=15,x=1007,y=1008 i=16,x=1007,y=1008 i=17,x=1007,y=1008 i=18,x=1007,y=1008 i=19,x=1007,y=1008 i=20,x=1007,y=1008 i=21,x=1007,y=1008 i=22,x=1007,y=1008 i=23,x=1007,y=1008 i=24,x=1007,y=1008 i=25,x=1007,y=1008 i=26,x=1007,y=1008 i=27,x=1007,y=1008 i=28,x=1007,y=1008 i=29,x=1007,y=1008 i=30,x=1007,y=1008 i=31,x=1007,y=1008 i=32,x=1007,y=1008 i=33,x=1007,y=1008 i=34,x=1007,y=1008 i=35,x=1007,y=1008 i=36,x=1007,y=1008 i=37,x=1007,y=1008 i=38,x=1007,y=1008 i=39,x=1007,y=1008 i=40,x=1007,y=1008 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 9) { $x = 10; $y = 11 } elif (NR == 12) { $x = 13; $y = 14 } else { $x = 1015; $y = 1016 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="9", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="10", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="11", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="12", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="13", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="14", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1015", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1016", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="9", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="10", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="11", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="12", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="13", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="14", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1015", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1016", type=NUMERIC_LITERAL. i=1,x=1015,y=1016 i=2,x=1015,y=1016 i=3,x=1015,y=1016 i=4,x=1015,y=1016 i=5,x=1015,y=1016 i=6,x=1015,y=1016 i=7,x=1015,y=1016 i=8,x=1015,y=1016 i=9,x=10,y=11 i=10,x=1015,y=1016 i=11,x=1015,y=1016 i=12,x=13,y=14 i=13,x=1015,y=1016 i=14,x=1015,y=1016 i=15,x=1015,y=1016 i=16,x=1015,y=1016 i=17,x=1015,y=1016 i=18,x=1015,y=1016 i=19,x=1015,y=1016 i=20,x=1015,y=1016 i=21,x=1015,y=1016 i=22,x=1015,y=1016 i=23,x=1015,y=1016 i=24,x=1015,y=1016 i=25,x=1015,y=1016 i=26,x=1015,y=1016 i=27,x=1015,y=1016 i=28,x=1015,y=1016 i=29,x=1015,y=1016 i=30,x=1015,y=1016 i=31,x=1015,y=1016 i=32,x=1015,y=1016 i=33,x=1015,y=1016 i=34,x=1015,y=1016 i=35,x=1015,y=1016 i=36,x=1015,y=1016 i=37,x=1015,y=1016 i=38,x=1015,y=1016 i=39,x=1015,y=1016 i=40,x=1015,y=1016 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 17) { $x = 18; $y = 19 } elif (NR == 20) { $x = 21; $y = 22 } elif (NR == 23) { $x = 24; $y = 25 } else { $x = 1026; $y = 1027 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="17", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="18", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="19", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="20", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="21", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="22", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="23", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="24", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="25", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1026", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1027", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="17", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="18", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="19", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="20", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="21", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="22", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="23", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="24", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="25", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1026", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1027", type=NUMERIC_LITERAL. i=1,x=1026,y=1027 i=2,x=1026,y=1027 i=3,x=1026,y=1027 i=4,x=1026,y=1027 i=5,x=1026,y=1027 i=6,x=1026,y=1027 i=7,x=1026,y=1027 i=8,x=1026,y=1027 i=9,x=1026,y=1027 i=10,x=1026,y=1027 i=11,x=1026,y=1027 i=12,x=1026,y=1027 i=13,x=1026,y=1027 i=14,x=1026,y=1027 i=15,x=1026,y=1027 i=16,x=1026,y=1027 i=17,x=18,y=19 i=18,x=1026,y=1027 i=19,x=1026,y=1027 i=20,x=21,y=22 i=21,x=1026,y=1027 i=22,x=1026,y=1027 i=23,x=24,y=25 i=24,x=1026,y=1027 i=25,x=1026,y=1027 i=26,x=1026,y=1027 i=27,x=1026,y=1027 i=28,x=1026,y=1027 i=29,x=1026,y=1027 i=30,x=1026,y=1027 i=31,x=1026,y=1027 i=32,x=1026,y=1027 i=33,x=1026,y=1027 i=34,x=1026,y=1027 i=35,x=1026,y=1027 i=36,x=1026,y=1027 i=37,x=1026,y=1027 i=38,x=1026,y=1027 i=39,x=1026,y=1027 i=40,x=1026,y=1027 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 28) { $x = 29; $y = 30 } elif (NR == 31) { $x = 32; $y = 33 } elif (NR == 34) { $x = 35; $y = 36 } elif (NR == 37) { $x = 38; $y = 39 } else { $x = 1040; $y = 1041 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="28", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="29", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="30", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="31", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="32", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="33", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="34", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="35", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="36", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="37", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="38", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="39", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1040", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1041", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="28", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="29", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="30", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="31", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="32", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="33", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="34", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="35", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="36", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="37", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="38", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="39", type=NUMERIC_LITERAL. text="else", type=IF_ITEM: text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="1040", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="1041", type=NUMERIC_LITERAL. i=1,x=1040,y=1041 i=2,x=1040,y=1041 i=3,x=1040,y=1041 i=4,x=1040,y=1041 i=5,x=1040,y=1041 i=6,x=1040,y=1041 i=7,x=1040,y=1041 i=8,x=1040,y=1041 i=9,x=1040,y=1041 i=10,x=1040,y=1041 i=11,x=1040,y=1041 i=12,x=1040,y=1041 i=13,x=1040,y=1041 i=14,x=1040,y=1041 i=15,x=1040,y=1041 i=16,x=1040,y=1041 i=17,x=1040,y=1041 i=18,x=1040,y=1041 i=19,x=1040,y=1041 i=20,x=1040,y=1041 i=21,x=1040,y=1041 i=22,x=1040,y=1041 i=23,x=1040,y=1041 i=24,x=1040,y=1041 i=25,x=1040,y=1041 i=26,x=1040,y=1041 i=27,x=1040,y=1041 i=28,x=29,y=30 i=29,x=1040,y=1041 i=30,x=1040,y=1041 i=31,x=32,y=33 i=32,x=1040,y=1041 i=33,x=1040,y=1041 i=34,x=35,y=36 i=35,x=1040,y=1041 i=36,x=1040,y=1041 i=37,x=38,y=39 i=38,x=1040,y=1041 i=39,x=1040,y=1041 i=40,x=1040,y=1041 ---------------------------------------------------------------- IF/ELIF WITHOUT ELSE mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 1) { $x = 2; $y = 3 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="1", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="2", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="3", type=NUMERIC_LITERAL. i=1,x=2,y=3 i=2,x=102,y=202 i=3,x=103,y=203 i=4,x=104,y=204 i=5,x=105,y=205 i=6,x=106,y=206 i=7,x=107,y=207 i=8,x=108,y=208 i=9,x=109,y=209 i=10,x=110,y=210 i=11,x=111,y=211 i=12,x=112,y=212 i=13,x=113,y=213 i=14,x=114,y=214 i=15,x=115,y=215 i=16,x=116,y=216 i=17,x=117,y=217 i=18,x=118,y=218 i=19,x=119,y=219 i=20,x=120,y=220 i=21,x=121,y=221 i=22,x=122,y=222 i=23,x=123,y=223 i=24,x=124,y=224 i=25,x=125,y=225 i=26,x=126,y=226 i=27,x=127,y=227 i=28,x=128,y=228 i=29,x=129,y=229 i=30,x=130,y=230 i=31,x=131,y=231 i=32,x=132,y=232 i=33,x=133,y=233 i=34,x=134,y=234 i=35,x=135,y=235 i=36,x=136,y=236 i=37,x=137,y=237 i=38,x=138,y=238 i=39,x=139,y=239 i=40,x=140,y=240 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 4) { $x = 5; $y = 6 } elif (NR == 7) { $x = 8; $y = 9 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="7", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="8", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="4", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="6", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="7", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="8", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. i=1,x=101,y=201 i=2,x=102,y=202 i=3,x=103,y=203 i=4,x=5,y=6 i=5,x=105,y=205 i=6,x=106,y=206 i=7,x=8,y=9 i=8,x=108,y=208 i=9,x=109,y=209 i=10,x=110,y=210 i=11,x=111,y=211 i=12,x=112,y=212 i=13,x=113,y=213 i=14,x=114,y=214 i=15,x=115,y=215 i=16,x=116,y=216 i=17,x=117,y=217 i=18,x=118,y=218 i=19,x=119,y=219 i=20,x=120,y=220 i=21,x=121,y=221 i=22,x=122,y=222 i=23,x=123,y=223 i=24,x=124,y=224 i=25,x=125,y=225 i=26,x=126,y=226 i=27,x=127,y=227 i=28,x=128,y=228 i=29,x=129,y=229 i=30,x=130,y=230 i=31,x=131,y=231 i=32,x=132,y=232 i=33,x=133,y=233 i=34,x=134,y=234 i=35,x=135,y=235 i=36,x=136,y=236 i=37,x=137,y=237 i=38,x=138,y=238 i=39,x=139,y=239 i=40,x=140,y=240 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 10) { $x = 11; $y = 12 } elif (NR == 13) { $x = 14; $y = 15 } elif (NR == 16) { $x = 17; $y = 18 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="10", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="11", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="12", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="13", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="14", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="15", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="16", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="17", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="18", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="10", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="11", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="12", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="13", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="14", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="15", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="16", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="17", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="18", type=NUMERIC_LITERAL. i=1,x=101,y=201 i=2,x=102,y=202 i=3,x=103,y=203 i=4,x=104,y=204 i=5,x=105,y=205 i=6,x=106,y=206 i=7,x=107,y=207 i=8,x=108,y=208 i=9,x=109,y=209 i=10,x=11,y=12 i=11,x=111,y=211 i=12,x=112,y=212 i=13,x=14,y=15 i=14,x=114,y=214 i=15,x=115,y=215 i=16,x=17,y=18 i=17,x=117,y=217 i=18,x=118,y=218 i=19,x=119,y=219 i=20,x=120,y=220 i=21,x=121,y=221 i=22,x=122,y=222 i=23,x=123,y=223 i=24,x=124,y=224 i=25,x=125,y=225 i=26,x=126,y=226 i=27,x=127,y=227 i=28,x=128,y=228 i=29,x=129,y=229 i=30,x=130,y=230 i=31,x=131,y=231 i=32,x=132,y=232 i=33,x=133,y=233 i=34,x=134,y=234 i=35,x=135,y=235 i=36,x=136,y=236 i=37,x=137,y=237 i=38,x=138,y=238 i=39,x=139,y=239 i=40,x=140,y=240 mlr --from ./reg_test/input/xy40.dkvp put -v if (NR == 19) { $x = 20; $y = 21 } elif (NR == 22) { $x = 23; $y = 24 } elif (NR == 25) { $x = 26; $y = 37 } elif (NR == 28) { $x = 29; $y = 30 } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="19", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="20", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="21", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="22", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="23", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="24", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="25", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="26", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="37", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="28", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="29", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="30", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="19", type=NUMERIC_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="20", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="21", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="22", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="23", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="24", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="25", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="26", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="37", type=NUMERIC_LITERAL. text="elif", type=IF_ITEM: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="28", type=NUMERIC_LITERAL. text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="x", type=FIELD_NAME. text="29", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="y", type=FIELD_NAME. text="30", type=NUMERIC_LITERAL. i=1,x=101,y=201 i=2,x=102,y=202 i=3,x=103,y=203 i=4,x=104,y=204 i=5,x=105,y=205 i=6,x=106,y=206 i=7,x=107,y=207 i=8,x=108,y=208 i=9,x=109,y=209 i=10,x=110,y=210 i=11,x=111,y=211 i=12,x=112,y=212 i=13,x=113,y=213 i=14,x=114,y=214 i=15,x=115,y=215 i=16,x=116,y=216 i=17,x=117,y=217 i=18,x=118,y=218 i=19,x=20,y=21 i=20,x=120,y=220 i=21,x=121,y=221 i=22,x=23,y=24 i=23,x=123,y=223 i=24,x=124,y=224 i=25,x=26,y=37 i=26,x=126,y=226 i=27,x=127,y=227 i=28,x=29,y=30 i=29,x=129,y=229 i=30,x=130,y=230 i=31,x=131,y=231 i=32,x=132,y=232 i=33,x=133,y=233 i=34,x=134,y=234 i=35,x=135,y=235 i=36,x=136,y=236 i=37,x=137,y=237 i=38,x=138,y=238 i=39,x=139,y=239 i=40,x=140,y=240 ================================================================ DSL INDIRECT SREC ASSIGNMENTS mlr put -v $["a"] = $["b"]; $["x"] = 10 * $["y"] ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=INDIRECT_SREC_ASSIGNMENT: text="a", type=STRING_LITERAL. text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="b", type=STRING_LITERAL. text="=", type=INDIRECT_SREC_ASSIGNMENT: text="x", type=STRING_LITERAL. text="*", type=OPERATOR: text="10", type=NUMERIC_LITERAL. text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="y", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=INDIRECT_SREC_ASSIGNMENT: text="a", type=STRING_LITERAL. text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="b", type=STRING_LITERAL. text="=", type=INDIRECT_SREC_ASSIGNMENT: text="x", type=STRING_LITERAL. text="*", type=OPERATOR: text="10", type=NUMERIC_LITERAL. text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="y", type=STRING_LITERAL. a=pan,b=pan,i=1,x=7.268029,y=0.7268028627434533 a=pan,b=pan,i=2,x=5.221511,y=0.5221511083334797 a=wye,b=wye,i=3,x=3.383185,y=0.33831852551664776 a=wye,b=wye,i=4,x=1.341887,y=0.13418874328430463 a=pan,b=pan,i=5,x=8.636245,y=0.8636244699032729 a=pan,b=pan,i=6,x=4.932213,y=0.49322128674835697 a=zee,b=zee,i=7,x=1.878849,y=0.1878849191181694 a=wye,b=wye,i=8,x=9.761814,y=0.976181385699006 a=wye,b=wye,i=9,x=7.495508,y=0.7495507603507059 a=wye,b=wye,i=10,x=9.526184,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put while (NF < 256) { $["k".string(NF+1)] = "v".string(NF) } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 ================================================================ DSL INDIRECT OOSVAR ASSIGNMENTS mlr --opprint put -v @s = NR; $t = @s; $u=@["s"]; $v = $t - $u ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="u", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="v", type=FIELD_NAME. text="-", type=OPERATOR: text="t", type=FIELD_NAME. text="u", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="u", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="=", type=SREC_ASSIGNMENT: text="v", type=FIELD_NAME. text="-", type=OPERATOR: text="t", type=FIELD_NAME. text="u", type=FIELD_NAME. a b i x y t u v pan pan 1 0.3467901443380824 0.7268028627434533 1 1 0 eks pan 2 0.7586799647899636 0.5221511083334797 2 2 0 wye wye 3 0.20460330576630303 0.33831852551664776 3 3 0 eks wye 4 0.38139939387114097 0.13418874328430463 4 4 0 wye pan 5 0.5732889198020006 0.8636244699032729 5 5 0 zee pan 6 0.5271261600918548 0.49322128674835697 6 6 0 eks zee 7 0.6117840605678454 0.1878849191181694 7 7 0 zee wye 8 0.5985540091064224 0.976181385699006 8 8 0 hat wye 9 0.03144187646093577 0.7495507603507059 9 9 0 pan wye 10 0.5026260055412137 0.9526183602969864 10 10 0 mlr put -v @t["u"] = NR; $tu = @["t"]["u"]; emitp all ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="tu", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="emitp", type=EMITP: text="emitp", type=EMITP: text="all", type=ALL. text="stream", type=STREAM: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="tu", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="emitp", type=EMITP: text="emitp", type=EMITP: text="all", type=ALL. text="stream", type=STREAM: t:u=1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,tu=1 t:u=2 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,tu=2 t:u=3 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,tu=3 t:u=4 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,tu=4 t:u=5 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,tu=5 t:u=6 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,tu=6 t:u=7 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,tu=7 t:u=8 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,tu=8 t:u=9 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,tu=9 t:u=10 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,tu=10 mlr put -v @t["u"] = NR; $tu = @["t"]["u"]; emitp @* ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="tu", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="emitp", type=EMITP: text="emitp", type=EMITP: text="@*", type=FULL_OOSVAR. text="stream", type=STREAM: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="tu", type=FIELD_NAME. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="emitp", type=EMITP: text="emitp", type=EMITP: text="@*", type=FULL_OOSVAR. text="stream", type=STREAM: t:u=1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,tu=1 t:u=2 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,tu=2 t:u=3 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,tu=3 t:u=4 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,tu=4 t:u=5 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,tu=5 t:u=6 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,tu=6 t:u=7 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,tu=7 t:u=8 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,tu=8 t:u=9 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,tu=9 t:u=10 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,tu=10 mlr put -v @["s"] = $x; emitp all ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="emitp", type=EMITP: text="emitp", type=EMITP: text="all", type=ALL. text="stream", type=STREAM: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="s", type=STRING_LITERAL. text="x", type=FIELD_NAME. text="emitp", type=EMITP: text="emitp", type=EMITP: text="all", type=ALL. text="stream", type=STREAM: s=0.346790 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 s=0.758680 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 s=0.204603 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 s=0.381399 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 s=0.573289 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 s=0.527126 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 s=0.611784 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 s=0.598554 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 s=0.031442 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 s=0.502626 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr put -v @["t"]["u"] = $y; emitp all ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="y", type=FIELD_NAME. text="emitp", type=EMITP: text="emitp", type=EMITP: text="all", type=ALL. text="stream", type=STREAM: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="t", type=STRING_LITERAL. text="u", type=STRING_LITERAL. text="y", type=FIELD_NAME. text="emitp", type=EMITP: text="emitp", type=EMITP: text="all", type=ALL. text="stream", type=STREAM: t:u=0.726803 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 t:u=0.522151 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 t:u=0.338319 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 t:u=0.134189 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 t:u=0.863624 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 t:u=0.493221 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 t:u=0.187885 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 t:u=0.976181 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 t:u=0.749551 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 t:u=0.952618 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ DSL WHILE/DO-WHILE LOOPS mlr put -v while($i < 5) { $i += 1} ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="while", type=WHILE: text="<", type=OPERATOR: text="i", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="i", type=FIELD_NAME. text="+", type=OPERATOR: text="i", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="while", type=WHILE: text="<", type=OPERATOR: text="i", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="i", type=FIELD_NAME. text="+", type=OPERATOR: text="i", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. a=pan,b=pan,i=5,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=5,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=5,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=5,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr put -v do {$i += 1} while($i < 5) ./reg_test/input/abixy RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="do", type=DO_WHILE: text="do_while_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="i", type=FIELD_NAME. text="+", type=OPERATOR: text="i", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="<", type=OPERATOR: text="i", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="do", type=DO_WHILE: text="do_while_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="i", type=FIELD_NAME. text="+", type=OPERATOR: text="i", type=FIELD_NAME. text="1", type=NUMERIC_LITERAL. text="<", type=OPERATOR: text="i", type=FIELD_NAME. text="5", type=NUMERIC_LITERAL. a=pan,b=pan,i=5,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=5,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=5,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=5,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=6,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=7,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=8,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=9,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=10,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=11,x=0.5026260055412137,y=0.9526183602969864 ================================================================ DSL FOR-SREC LOOPS ---------------------------------------------------------------- empty for-srec mlr --from ./reg_test/input/abixy put -v for(k,v in $*) { } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- for-srec without boundvars mlr --from ./reg_test/input/abixy put -v for(k,v in $*) {$nr= NR} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="nr", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="nr", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nr=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nr=2 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nr=4 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nr=6 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,nr=7 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,nr=8 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nr=9 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nr=10 ---------------------------------------------------------------- for-srec modifying the srec mlr --from ./reg_test/input/abixy put -v for(k,v in $*) {unset $[k]}; $j = NR RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="j", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="=", type=SREC_ASSIGNMENT: text="j", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. j=1 j=2 j=3 j=4 j=5 j=6 j=7 j=8 j=9 j=10 mlr --from ./reg_test/input/abixy put -v for(k,v in $*) {if (k != "x") {unset $[k]}}; $j = NR RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="!=", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="x", type=STRING_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="unset", type=UNSET: text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="j", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=3 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="!=", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="x", type=STRING_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="unset", type=UNSET: text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="=", type=SREC_ASSIGNMENT: text="j", type=FIELD_NAME. text="NR", type=CONTEXT_VARIABLE. x=0.3467901443380824,j=1 x=0.7586799647899636,j=2 x=0.20460330576630303,j=3 x=0.38139939387114097,j=4 x=0.5732889198020006,j=5 x=0.5271261600918548,j=6 x=0.6117840605678454,j=7 x=0.5985540091064224,j=8 x=0.03144187646093577,j=9 x=0.5026260055412137,j=10 mlr --from ./reg_test/input/abixy --opprint put -S -v for(k,v in $*) {$[k."_orig"]=v; $[k] = "other"} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=INDIRECT_SREC_ASSIGNMENT: text=".", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="_orig", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=INDIRECT_SREC_ASSIGNMENT: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="other", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=INDIRECT_SREC_ASSIGNMENT: text=".", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="_orig", type=STRING_LITERAL. text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="=", type=INDIRECT_SREC_ASSIGNMENT: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="other", type=STRING_LITERAL. a b i x y a_orig b_orig i_orig x_orig y_orig other other other other other pan pan 1 0.3467901443380824 0.7268028627434533 other other other other other eks pan 2 0.7586799647899636 0.5221511083334797 other other other other other wye wye 3 0.20460330576630303 0.33831852551664776 other other other other other eks wye 4 0.38139939387114097 0.13418874328430463 other other other other other wye pan 5 0.5732889198020006 0.8636244699032729 other other other other other zee pan 6 0.5271261600918548 0.49322128674835697 other other other other other eks zee 7 0.6117840605678454 0.1878849191181694 other other other other other zee wye 8 0.5985540091064224 0.976181385699006 other other other other other hat wye 9 0.03144187646093577 0.7495507603507059 other other other other other pan wye 10 0.5026260055412137 0.9526183602969864 mlr --from ./reg_test/input/abixy put -S -v for(k,v in $*) {$[v]=k} RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=INDIRECT_SREC_ASSIGNMENT: text="v", type=NONINDEXED_LOCAL_VARIABLE. text="k", type=NONINDEXED_LOCAL_VARIABLE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="=", type=INDIRECT_SREC_ASSIGNMENT: text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,pan=b,1=i,0.3467901443380824=x,0.7268028627434533=y a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,eks=a,pan=b,2=i,0.7586799647899636=x,0.5221511083334797=y a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,wye=b,3=i,0.20460330576630303=x,0.33831852551664776=y a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,eks=a,wye=b,4=i,0.38139939387114097=x,0.13418874328430463=y a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,wye=a,pan=b,5=i,0.5732889198020006=x,0.8636244699032729=y a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,zee=a,pan=b,6=i,0.5271261600918548=x,0.49322128674835697=y a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,eks=a,zee=b,7=i,0.6117840605678454=x,0.1878849191181694=y a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,zee=a,wye=b,8=i,0.5985540091064224=x,0.976181385699006=y a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,hat=a,wye=b,9=i,0.03144187646093577=x,0.7495507603507059=y a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,pan=a,wye=b,10=i,0.5026260055412137=x,0.9526183602969864=y mlr --from ./reg_test/input/abixy put -v $sum = 0; for(k,v in $*) { if (k =~ "^[xy]$") { $sum += $[k] } } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="0", type=NUMERIC_LITERAL. text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="=~", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="^[xy]$", type=STRING_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="+", type=OPERATOR: text="sum", type=FIELD_NAME. text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=3 text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="0", type=NUMERIC_LITERAL. text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="=~", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="^[xy]$", type=STRING_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="+", type=OPERATOR: text="sum", type=FIELD_NAME. text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,sum=1.073593 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,sum=1.280831 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,sum=0.542922 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,sum=0.515588 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,sum=1.436913 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,sum=1.020347 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,sum=0.799669 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,sum=1.574735 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,sum=0.780993 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,sum=1.455244 mlr --from ./reg_test/input/abixy put -S -v $sum = float(0); for(k,v in $*) { if (k =~ "^[xy]$") { $sum += float($[k]) } } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="float", type=FUNCTION_CALLSITE: text="0", type=NUMERIC_LITERAL. text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="=~", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. text="^[xy]$", type=STRING_LITERAL. text="if_block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="+", type=OPERATOR: text="sum", type=FIELD_NAME. text="float", type=FUNCTION_CALLSITE: text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=3 text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="float", type=FUNCTION_CALLSITE: text="0", type=NUMERIC_LITERAL. text="for", type=FOR_SREC: subframe_var_count=2 text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="for_full_srec_block", type=STATEMENT_BLOCK: text="if_head", type=IF_HEAD: text="if", type=IF_ITEM: text="=~", type=OPERATOR: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="^[xy]$", type=STRING_LITERAL. text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=SREC_ASSIGNMENT: text="sum", type=FIELD_NAME. text="+", type=OPERATOR: text="sum", type=FIELD_NAME. text="float", type=FUNCTION_CALLSITE: text="indirect_field_name", type=INDIRECT_FIELD_NAME: text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,sum=1.073593 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,sum=1.280831 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,sum=0.542922 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,sum=0.515588 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,sum=1.436913 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,sum=1.020347 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,sum=0.799669 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,sum=1.574735 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,sum=0.780993 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,sum=1.455244 ================================================================ DSL FOR-OOSVAR LOOPS mlr --opprint -n put -v @o[1][1]["text1"][NR] = $a; @o[1][2]["text2"][NR] = $b; @o[1][2][$a][$i*100] = $x; for((k1,k2),v in @o[1][2]) { @n[3][4][k2][k1] = v; } end { emit @n, "a", "b", "c", "d" } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="text1", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="a", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="text2", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="b", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="a", type=FIELD_NAME. text="*", type=OPERATOR: text="i", type=FIELD_NAME. text="100", type=NUMERIC_LITERAL. text="x", type=FIELD_NAME. text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k1", type=UNTYPED_LOCAL_DEFINITION. text="k2", type=UNTYPED_LOCAL_DEFINITION. text="v", type=UNTYPED_LOCAL_DEFINITION. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="n", type=STRING_LITERAL. text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="k2", type=NONINDEXED_LOCAL_VARIABLE. text="k1", type=NONINDEXED_LOCAL_VARIABLE. text="v", type=NONINDEXED_LOCAL_VARIABLE. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="n", type=STRING_LITERAL. text="emit_namelist", type=EMIT: text="a", type=STRING_LITERAL. text="b", type=STRING_LITERAL. text="c", type=STRING_LITERAL. text="d", type=STRING_LITERAL. text="stream", type=STREAM: BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="n", type=STRING_LITERAL. text="emit_namelist", type=EMIT: text="a", type=STRING_LITERAL. text="b", type=STRING_LITERAL. text="c", type=STRING_LITERAL. text="d", type=STRING_LITERAL. text="stream", type=STREAM: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=4 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="1", type=NUMERIC_LITERAL. text="text1", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="a", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="text2", type=STRING_LITERAL. text="NR", type=CONTEXT_VARIABLE. text="b", type=FIELD_NAME. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="a", type=FIELD_NAME. text="*", type=OPERATOR: text="i", type=FIELD_NAME. text="100", type=NUMERIC_LITERAL. text="x", type=FIELD_NAME. text="for", type=FOR_OOSVAR: subframe_var_count=3 text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k1", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="k2", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=1 vardef_frame_relative_index=3 text="oosvar_keylist", type=OOSVAR_KEYLIST: text="o", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="2", type=NUMERIC_LITERAL. text="for_loop_oosvar_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="n", type=STRING_LITERAL. text="3", type=NUMERIC_LITERAL. text="4", type=NUMERIC_LITERAL. text="k2", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 text="k1", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=1 vardef_frame_relative_index=3 mlr --opprint --from ./reg_test/input/abixy put -q @o[1][1]["text1"][NR] = $a; @o[1][2]["text2"][NR] = $b; @o[1][2][$a][$i*100] = $x; for((k1,k2),v in @o[1][2]) { @n[3][4][k2][k1] = v; } end { emit @n, "a", "b", "c", "d" } a b c d n 3 4 1 text2 pan 3 4 100 pan 0.346790 3 4 2 text2 pan 3 4 200 eks 0.758680 3 4 3 text2 wye 3 4 300 wye 0.204603 3 4 4 text2 wye 3 4 400 eks 0.381399 3 4 5 text2 pan 3 4 500 wye 0.573289 3 4 6 text2 pan 3 4 600 zee 0.527126 3 4 7 text2 zee 3 4 700 eks 0.611784 3 4 8 text2 wye 3 4 800 zee 0.598554 3 4 9 text2 wye 3 4 900 hat 0.031442 3 4 10 text2 wye 3 4 1000 pan 0.502626 mlr --opprint --from ./reg_test/input/abixy put -q @sum[$a][$b] += $x; @count[$a][$b] += 1; end { for ((k1, k2), v in @sum) { @mean[k1][k2] = @sum[k1][k2] / @count[k1][k2] } emitp @sum, "a", "b"; emitp @count, "a", "b"; emitp @mean, "a", "b" } a b sum pan pan 0.346790 pan wye 0.502626 eks pan 0.758680 eks wye 0.381399 eks zee 0.611784 wye wye 0.204603 wye pan 0.573289 zee pan 0.527126 zee wye 0.598554 hat wye 0.031442 a b count pan pan 1 pan wye 1 eks pan 1 eks wye 1 eks zee 1 wye wye 1 wye pan 1 zee pan 1 zee wye 1 hat wye 1 a b mean pan pan 0.346790 pan wye 0.502626 eks pan 0.758680 eks wye 0.381399 eks zee 0.611784 wye wye 0.204603 wye pan 0.573289 zee pan 0.527126 zee wye 0.598554 hat wye 0.031442 mlr --opprint --from ./reg_test/input/abixy-wide put -q @value["sum"][$a][$b] += $x; @value["count"][$a][$b] += 1; end { for ((k1, k2), v in @value["sum"]) { @value["mean"][k1][k2] = @value["sum"][k1][k2] / @value["count"][k1][k2] } emitp @value, "stat", "a", "b"; } stat a b value sum cat pan 42.327158 sum cat hat 43.184410 sum cat dog 39.241473 sum cat wye 45.196775 sum cat cat 37.894148 sum pan wye 40.135300 sum pan pan 36.226334 sum pan hat 35.115869 sum pan dog 37.817560 sum pan cat 42.235677 sum wye cat 40.805723 sum wye hat 41.166697 sum wye dog 40.619547 sum wye wye 32.490973 sum wye pan 33.027196 sum dog hat 43.515162 sum dog pan 45.614011 sum dog dog 43.545956 sum dog wye 37.223795 sum dog cat 45.642595 sum hat hat 48.058897 sum hat wye 34.054270 sum hat pan 42.538758 sum hat cat 44.325655 sum hat dog 37.114244 count cat pan 89 count cat hat 90 count cat dog 78 count cat wye 77 count cat cat 79 count pan wye 78 count pan pan 77 count pan hat 67 count pan dog 73 count pan cat 89 count wye cat 74 count wye hat 87 count wye dog 76 count wye wye 67 count wye pan 66 count dog hat 88 count dog pan 87 count dog dog 87 count dog wye 79 count dog cat 83 count hat hat 88 count hat wye 70 count hat pan 85 count hat cat 88 count hat dog 78 mean cat pan 0.475586 mean cat hat 0.479827 mean cat dog 0.503096 mean cat wye 0.586971 mean cat cat 0.479673 mean pan wye 0.514555 mean pan pan 0.470472 mean pan hat 0.524117 mean pan dog 0.518049 mean pan cat 0.474558 mean wye cat 0.551429 mean wye hat 0.473180 mean wye dog 0.534468 mean wye wye 0.484940 mean wye pan 0.500412 mean dog hat 0.494490 mean dog pan 0.524299 mean dog dog 0.500528 mean dog wye 0.471187 mean dog cat 0.549911 mean hat hat 0.546124 mean hat wye 0.486490 mean hat pan 0.500456 mean hat cat 0.503701 mean hat dog 0.475824 mlr -n put -v for (k, k in $*) {} mlr: redefinition of variable k in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_SREC: text="variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="k", type=UNTYPED_LOCAL_DEFINITION. text="for_full_srec_block", type=STATEMENT_BLOCK: mlr -n put -v for (k, k in @*) {} mlr: redefinition of variable k in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="k", type=UNTYPED_LOCAL_DEFINITION. text="k", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,a), c in @*) {} mlr: redefinition of variable a in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="a", type=UNTYPED_LOCAL_DEFINITION. text="c", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b), a in @*) {} mlr: redefinition of variable a in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="a", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b), b in @*) {} mlr: redefinition of variable b in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,a,c), d in @*) {} mlr: redefinition of variable a in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="a", type=UNTYPED_LOCAL_DEFINITION. text="c", type=UNTYPED_LOCAL_DEFINITION. text="d", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b,a), d in @*) {} mlr: redefinition of variable a in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="a", type=UNTYPED_LOCAL_DEFINITION. text="d", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b,c), a in @*) {} mlr: redefinition of variable a in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="c", type=UNTYPED_LOCAL_DEFINITION. text="a", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b,b), d in @*) {} mlr: redefinition of variable b in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="d", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b,c), b in @*) {} mlr: redefinition of variable b in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="c", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr -n put -v for ((a,b,c), c in @*) {} mlr: redefinition of variable c in the same scope. RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="for", type=FOR_OOSVAR: text="key_and_value_variables", type=FOR_VARIABLES: text="key_variables", type=FOR_VARIABLES: text="a", type=UNTYPED_LOCAL_DEFINITION. text="b", type=UNTYPED_LOCAL_DEFINITION. text="c", type=UNTYPED_LOCAL_DEFINITION. text="c", type=UNTYPED_LOCAL_DEFINITION. text="empty_keylist", type=OOSVAR_KEYLIST: text="for_full_oosvar_block", type=STATEMENT_BLOCK: mlr --from ./reg_test/input/xyz2 put -q func f() { return {"a"."b":"c"."d",3:4}}; for (k,v in f()){print "k=".k.",v=".v} k=ab,v=cd k=3,v=4 k=ab,v=cd k=3,v=4 mlr --from ./reg_test/input/xyz2 put -q for (k,v in {"a"."b":"c"."d",3:"c"}) {print "k=".k.",v=".v} k=ab,v=cd k=3,v=c k=ab,v=cd k=3,v=c mlr --from ./reg_test/input/xyz2 put -q o["a"."b"]="c"."d"; for (k,v in o) {print "k=".k.",v=".v} k=ab,v=cd k=ab,v=cd mlr --from ./reg_test/input/xyz2 put -q @o["a"."b"]="c"."d"; for (k,v in @o) {print "k=".k.",v=".v} k=ab,v=cd k=ab,v=cd mlr --from ./reg_test/input/xyz2 put for (k in $*) { print k} x y z x=3,y=4,z=5 x y u x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put m=$*; for (k in m) { print k} x y z x=3,y=4,z=5 x y u x=6,y=7,u=8 ================================================================ DSL FOR-BIND LOOPS FOR VALGRIND ---------------------------------------------------------------- key-only fors mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; map o = {}; o[ab] = xy; for (k in o) { print "k is " . k; } k is pan_pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; unset @o; @o[ab] = xy; for (k in @o) { print "k is " . k; } k is pan_pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; for (k in {ab : xy}) { print "k is " . k; } k is pan_pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put func f(a, b, x, y): map { ab = $a . "_" . $b; xy = $x . "_" . $y; return {ab : xy}; } for (k in f($a, $b, $x, $y)) { print "k is " . k; } k is pan_pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- key-value fors with scalar values mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; map o = {}; o[ab] = xy; for (k, v in o) { print "k is " . k . " v is " . v; } k is pan_pan v is 0.346790_0.726803 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is 0.758680_0.522151 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is 0.204603_0.338319 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is 0.381399_0.134189 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is _0.863624 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is 0.527126_0.493221 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is 0.611784_0.187885 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is 0.598554_ a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is 0.031442_0.749551 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is 0.502626_0.952618 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; unset @o; @o[ab] = xy; for (k, v in @o) { print "k is " . k . " v is " . v; } k is pan_pan v is 0.346790_0.726803 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is 0.758680_0.522151 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is 0.204603_0.338319 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is 0.381399_0.134189 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is _0.863624 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is 0.527126_0.493221 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is 0.611784_0.187885 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is 0.598554_ a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is 0.031442_0.749551 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is 0.502626_0.952618 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; for (k, v in {ab : xy}) { print "k is " . k . " v is " . v; } k is pan_pan v is 0.346790_0.726803 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is 0.758680_0.522151 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is 0.204603_0.338319 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is 0.381399_0.134189 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is _0.863624 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is 0.527126_0.493221 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is 0.611784_0.187885 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is 0.598554_ a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is 0.031442_0.749551 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is 0.502626_0.952618 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put func f(a, b, x, y): map { ab = $a . "_" . $b; xy = $x . "_" . $y; return {ab : xy}; } for (k, v in f($a, $b, $x, $y)) { print "k is " . k . " v is " . v; } k is pan_pan v is 0.346790_0.726803 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is 0.758680_0.522151 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is 0.204603_0.338319 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is 0.381399_0.134189 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is _0.863624 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is 0.527126_0.493221 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is 0.611784_0.187885 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is 0.598554_ a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is 0.031442_0.749551 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is 0.502626_0.952618 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- key-value fors with map values mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; map o = {}; o[ab] = {"foo": xy}; for (k, v in o) { print "k is " . k . " v is "; dump v; } k is pan_pan v is { "foo": "0.346790_0.726803" } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is { "foo": "0.758680_0.522151" } a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is { "foo": "0.204603_0.338319" } aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is { "foo": "0.381399_0.134189" } a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is { "foo": "_0.863624" } a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is { "foo": "0.527126_0.493221" } a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is { "foo": "0.611784_0.187885" } a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is { "foo": "0.598554_" } a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is { "foo": "0.031442_0.749551" } aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is { "foo": "0.502626_0.952618" } a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; unset @o; @o[ab]["foo"] = xy; for (k, v in @o) { print "k is " . k . " v is "; dump v; } k is pan_pan v is { "foo": "0.346790_0.726803" } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is { "foo": "0.758680_0.522151" } a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is { "foo": "0.204603_0.338319" } aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is { "foo": "0.381399_0.134189" } a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is { "foo": "_0.863624" } a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is { "foo": "0.527126_0.493221" } a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is { "foo": "0.611784_0.187885" } a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is { "foo": "0.598554_" } a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is { "foo": "0.031442_0.749551" } aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is { "foo": "0.502626_0.952618" } a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put ab = $a . "_" . $b; xy = $x . "_" . $y; for (k, v in {ab : {"foo": xy}}) { print "k is " . k . " v is "; dump v; } k is pan_pan v is { "foo": "0.346790_0.726803" } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is { "foo": "0.758680_0.522151" } a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is { "foo": "0.204603_0.338319" } aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is { "foo": "0.381399_0.134189" } a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is { "foo": "_0.863624" } a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is { "foo": "0.527126_0.493221" } a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is { "foo": "0.611784_0.187885" } a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is { "foo": "0.598554_" } a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is { "foo": "0.031442_0.749551" } aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is { "foo": "0.502626_0.952618" } a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy-het put func f(a, b, x, y): map { ab = $a . "_" . $b; xy = $x . "_" . $y; return {ab : {"foo" : xy}}; } for (k, v in f($a, $b, $x, $y)) { print "k is " . k . " v is "; dump v; } k is pan_pan v is { "foo": "0.346790_0.726803" } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 k is eks_pan v is { "foo": "0.758680_0.522151" } a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 k is _wye v is { "foo": "0.204603_0.338319" } aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 k is eks_ v is { "foo": "0.381399_0.134189" } a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 k is wye_pan v is { "foo": "_0.863624" } a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 k is zee_pan v is { "foo": "0.527126_0.493221" } a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 k is eks_zee v is { "foo": "0.611784_0.187885" } a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 k is zee_wye v is { "foo": "0.598554_" } a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 k is _ v is { "foo": "0.031442_0.749551" } aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 k is pan_wye v is { "foo": "0.502626_0.952618" } a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ DSL BREAK/CONTINUE IN SINGLE WHILE/DO-WHILE mlr --opprint --from ./reg_test/input/abixy put while ($i < 5) { $i += 1; break; $a = "ERROR"; } a b i x y pan pan 2 0.3467901443380824 0.7268028627434533 eks pan 3 0.7586799647899636 0.5221511083334797 wye wye 4 0.20460330576630303 0.33831852551664776 eks wye 5 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put while ($i < 5) { $i += 1; continue; $a = "ERROR"; } a b i x y pan pan 5 0.3467901443380824 0.7268028627434533 eks pan 5 0.7586799647899636 0.5221511083334797 wye wye 5 0.20460330576630303 0.33831852551664776 eks wye 5 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put do { $i += 1; break; $a = "ERROR"; } while ($i < 5); a b i x y pan pan 2 0.3467901443380824 0.7268028627434533 eks pan 3 0.7586799647899636 0.5221511083334797 wye wye 4 0.20460330576630303 0.33831852551664776 eks wye 5 0.38139939387114097 0.13418874328430463 wye pan 6 0.5732889198020006 0.8636244699032729 zee pan 7 0.5271261600918548 0.49322128674835697 eks zee 8 0.6117840605678454 0.1878849191181694 zee wye 9 0.5985540091064224 0.976181385699006 hat wye 10 0.03144187646093577 0.7495507603507059 pan wye 11 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put do { $i += 1; continue; $a = "ERROR"; } while ($i < 5); a b i x y pan pan 5 0.3467901443380824 0.7268028627434533 eks pan 5 0.7586799647899636 0.5221511083334797 wye wye 5 0.20460330576630303 0.33831852551664776 eks wye 5 0.38139939387114097 0.13418874328430463 wye pan 6 0.5732889198020006 0.8636244699032729 zee pan 7 0.5271261600918548 0.49322128674835697 eks zee 8 0.6117840605678454 0.1878849191181694 zee wye 9 0.5985540091064224 0.976181385699006 hat wye 10 0.03144187646093577 0.7495507603507059 pan wye 11 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put $NR = NR; while ($i < 5) { $i += 1; if (NR == 2) { break; } $a = "reached"; } a b i x y NR reached pan 5 0.3467901443380824 0.7268028627434533 1 eks pan 3 0.7586799647899636 0.5221511083334797 2 reached wye 5 0.20460330576630303 0.33831852551664776 3 reached wye 5 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $NR = NR; while ($i < 5) { $i += 1; if (NR == 2) { continue; } $a = "reached"; } a b i x y NR reached pan 5 0.3467901443380824 0.7268028627434533 1 eks pan 5 0.7586799647899636 0.5221511083334797 2 reached wye 5 0.20460330576630303 0.33831852551664776 3 reached wye 5 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $NR = NR; do { $i += 1; if (NR == 2) { break; } $a = "reached"; } while ($i < 5); a b i x y NR reached pan 5 0.3467901443380824 0.7268028627434533 1 eks pan 3 0.7586799647899636 0.5221511083334797 2 reached wye 5 0.20460330576630303 0.33831852551664776 3 reached wye 5 0.38139939387114097 0.13418874328430463 4 reached pan 6 0.5732889198020006 0.8636244699032729 5 reached pan 7 0.5271261600918548 0.49322128674835697 6 reached zee 8 0.6117840605678454 0.1878849191181694 7 reached wye 9 0.5985540091064224 0.976181385699006 8 reached wye 10 0.03144187646093577 0.7495507603507059 9 reached wye 11 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $NR = NR; do { $i += 1; if (NR == 2) { continue; } $a = "reached"; } while ($i < 5); a b i x y NR reached pan 5 0.3467901443380824 0.7268028627434533 1 eks pan 5 0.7586799647899636 0.5221511083334797 2 reached wye 5 0.20460330576630303 0.33831852551664776 3 reached wye 5 0.38139939387114097 0.13418874328430463 4 reached pan 6 0.5732889198020006 0.8636244699032729 5 reached pan 7 0.5271261600918548 0.49322128674835697 6 reached zee 8 0.6117840605678454 0.1878849191181694 7 reached wye 9 0.5985540091064224 0.976181385699006 8 reached wye 10 0.03144187646093577 0.7495507603507059 9 reached wye 11 0.5026260055412137 0.9526183602969864 10 ================================================================ DSL BREAK/CONTINUE IN NESTED WHILE/DO-WHILE mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; break; while ($k < 7) { $k += 1 } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 2 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 3 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; continue; while ($k < 7) { $k += 1 } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 1 eks pan 2 0.7586799647899636 0.5221511083334797 4 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 3 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; break; $k += 10000; } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 2 eks pan 2 0.7586799647899636 0.5221511083334797 4 3 wye wye 3 0.20460330576630303 0.33831852551664776 4 4 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; continue; $k += 10000; } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 7 eks pan 2 0.7586799647899636 0.5221511083334797 4 7 wye wye 3 0.20460330576630303 0.33831852551664776 4 7 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; if (NR == 2 || NR == 8) { break; } while ($k < 7) { $k += 1 } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 7 eks pan 2 0.7586799647899636 0.5221511083334797 3 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 7 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; if (NR == 2 || NR == 8) { continue; } while ($k < 7) { $k += 1 } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 7 eks pan 2 0.7586799647899636 0.5221511083334797 4 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 7 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; if (NR == 2 || NR == 8) { break; } $k += 10000; } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 eks pan 2 0.7586799647899636 0.5221511083334797 4 3 wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; if (NR == 2 || NR == 8) { continue; } $k += 10000; } } a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 eks pan 2 0.7586799647899636 0.5221511083334797 4 7 wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 a b i x y j eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; break; do { $k += 1 } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 2 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 3 eks wye 4 0.38139939387114097 0.13418874328430463 5 4 wye pan 5 0.5732889198020006 0.8636244699032729 6 5 zee pan 6 0.5271261600918548 0.49322128674835697 7 6 eks zee 7 0.6117840605678454 0.1878849191181694 8 7 zee wye 8 0.5985540091064224 0.976181385699006 9 8 hat wye 9 0.03144187646093577 0.7495507603507059 10 9 pan wye 10 0.5026260055412137 0.9526183602969864 11 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; continue; do { $k += 1 } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 1 eks pan 2 0.7586799647899636 0.5221511083334797 4 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 3 eks wye 4 0.38139939387114097 0.13418874328430463 5 4 wye pan 5 0.5732889198020006 0.8636244699032729 6 5 zee pan 6 0.5271261600918548 0.49322128674835697 7 6 eks zee 7 0.6117840605678454 0.1878849191181694 8 7 zee wye 8 0.5985540091064224 0.976181385699006 9 8 hat wye 9 0.03144187646093577 0.7495507603507059 10 9 pan wye 10 0.5026260055412137 0.9526183602969864 11 10 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; do { $k += 1; break; $k += 10000; } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 2 eks pan 2 0.7586799647899636 0.5221511083334797 4 3 wye wye 3 0.20460330576630303 0.33831852551664776 4 4 eks wye 4 0.38139939387114097 0.13418874328430463 5 5 wye pan 5 0.5732889198020006 0.8636244699032729 6 6 zee pan 6 0.5271261600918548 0.49322128674835697 7 7 eks zee 7 0.6117840605678454 0.1878849191181694 8 8 zee wye 8 0.5985540091064224 0.976181385699006 9 9 hat wye 9 0.03144187646093577 0.7495507603507059 10 10 pan wye 10 0.5026260055412137 0.9526183602969864 11 11 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; do { $k += 1; continue; $k += 10000; } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 7 eks pan 2 0.7586799647899636 0.5221511083334797 4 7 wye wye 3 0.20460330576630303 0.33831852551664776 4 7 eks wye 4 0.38139939387114097 0.13418874328430463 5 7 wye pan 5 0.5732889198020006 0.8636244699032729 6 7 zee pan 6 0.5271261600918548 0.49322128674835697 7 7 eks zee 7 0.6117840605678454 0.1878849191181694 8 8 zee wye 8 0.5985540091064224 0.976181385699006 9 9 hat wye 9 0.03144187646093577 0.7495507603507059 10 10 pan wye 10 0.5026260055412137 0.9526183602969864 11 11 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; if (NR == 2 || NR == 8) { break; } do { $k += 1 } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 7 eks pan 2 0.7586799647899636 0.5221511083334797 3 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 7 eks wye 4 0.38139939387114097 0.13418874328430463 5 7 wye pan 5 0.5732889198020006 0.8636244699032729 6 7 zee pan 6 0.5271261600918548 0.49322128674835697 7 7 eks zee 7 0.6117840605678454 0.1878849191181694 8 8 zee wye 8 0.5985540091064224 0.976181385699006 9 8 hat wye 9 0.03144187646093577 0.7495507603507059 10 10 pan wye 10 0.5026260055412137 0.9526183602969864 11 11 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; if (NR == 2 || NR == 8) { continue; } do { $k += 1 } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 7 eks pan 2 0.7586799647899636 0.5221511083334797 4 2 wye wye 3 0.20460330576630303 0.33831852551664776 4 7 eks wye 4 0.38139939387114097 0.13418874328430463 5 7 wye pan 5 0.5732889198020006 0.8636244699032729 6 7 zee pan 6 0.5271261600918548 0.49322128674835697 7 7 eks zee 7 0.6117840605678454 0.1878849191181694 8 8 zee wye 8 0.5985540091064224 0.976181385699006 9 8 hat wye 9 0.03144187646093577 0.7495507603507059 10 10 pan wye 10 0.5026260055412137 0.9526183602969864 11 11 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; do { $k += 1; if (NR == 2 || NR == 8) { break; } $k += 10000; } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 eks pan 2 0.7586799647899636 0.5221511083334797 4 3 wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 eks wye 4 0.38139939387114097 0.13418874328430463 5 10005 wye pan 5 0.5732889198020006 0.8636244699032729 6 10006 zee pan 6 0.5271261600918548 0.49322128674835697 7 10007 eks zee 7 0.6117840605678454 0.1878849191181694 8 10008 zee wye 8 0.5985540091064224 0.976181385699006 9 9 hat wye 9 0.03144187646093577 0.7495507603507059 10 10010 pan wye 10 0.5026260055412137 0.9526183602969864 11 10011 mlr --opprint --from ./reg_test/input/abixy put $j = NR; do { $k = NR; $j += 1; do { $k += 1; if (NR == 2 || NR == 8) { continue; } $k += 10000; } while ($k < 7); } while ($j < 4); a b i x y j k pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 eks pan 2 0.7586799647899636 0.5221511083334797 4 7 wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 eks wye 4 0.38139939387114097 0.13418874328430463 5 10005 wye pan 5 0.5732889198020006 0.8636244699032729 6 10006 zee pan 6 0.5271261600918548 0.49322128674835697 7 10007 eks zee 7 0.6117840605678454 0.1878849191181694 8 10008 zee wye 8 0.5985540091064224 0.976181385699006 9 9 hat wye 9 0.03144187646093577 0.7495507603507059 10 10010 pan wye 10 0.5026260055412137 0.9526183602969864 11 10011 ================================================================ DSL BREAK/CONTINUE IN SINGLE FOR-SREC mlr --opprint --from ./reg_test/input/abixy put -q for (k,v in $*) { @logging1[NR][k] = v; if (k == "x") { break; } } end { emitp @logging1, "NR", "k"; } NR k logging1 1 a pan 1 b pan 1 i 1 1 x 0.346790 2 a eks 2 b pan 2 i 2 2 x 0.758680 3 a wye 3 b wye 3 i 3 3 x 0.204603 4 a eks 4 b wye 4 i 4 4 x 0.381399 5 a wye 5 b pan 5 i 5 5 x 0.573289 6 a zee 6 b pan 6 i 6 6 x 0.527126 7 a eks 7 b zee 7 i 7 7 x 0.611784 8 a zee 8 b wye 8 i 8 8 x 0.598554 9 a hat 9 b wye 9 i 9 9 x 0.031442 10 a pan 10 b wye 10 i 10 10 x 0.502626 mlr --opprint --from ./reg_test/input/abixy put -q for (k,v in $*) { if (k == "x") { break; } @logging2[NR][k] = v; } end { emitp @logging2, "NR", "k"; } NR k logging2 1 a pan 1 b pan 1 i 1 2 a eks 2 b pan 2 i 2 3 a wye 3 b wye 3 i 3 4 a eks 4 b wye 4 i 4 5 a wye 5 b pan 5 i 5 6 a zee 6 b pan 6 i 6 7 a eks 7 b zee 7 i 7 8 a zee 8 b wye 8 i 8 9 a hat 9 b wye 9 i 9 10 a pan 10 b wye 10 i 10 mlr --opprint --from ./reg_test/input/abixy put -q for (k,v in $*) { @logging3[NR][k] = v; if (k == "x") { continue; } } end { emitp @logging3, "NR", "k"; } NR k logging3 1 a pan 1 b pan 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 x 0.502626 10 y 0.952618 mlr --opprint --from ./reg_test/input/abixy put -q for (k,v in $*) { if (k == "x") { continue; } @logging4[NR][k] = v; } end { emitp @logging4, "NR", "k" } NR k logging4 1 a pan 1 b pan 1 i 1 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 y 0.952618 mlr --opprint --from ./reg_test/input/abixy put -q for (k,v in $*) { @logging1[NR][k] = v; if (k == "x") { break; } } for (k,v in $*) { if (k == "x") { break; } @logging2[NR][k] = v; } for (k,v in $*) { @logging3[NR][k] = v; if (k == "x") { continue; } } for (k,v in $*) { if (k == "x") { continue; } @logging4[NR][k] = v; } end { emitp @logging1, "NR", "k"; emitp @logging2, "NR", "k"; emitp @logging3, "NR", "k"; emitp @logging4, "NR", "k" } NR k logging1 1 a pan 1 b pan 1 i 1 1 x 0.346790 2 a eks 2 b pan 2 i 2 2 x 0.758680 3 a wye 3 b wye 3 i 3 3 x 0.204603 4 a eks 4 b wye 4 i 4 4 x 0.381399 5 a wye 5 b pan 5 i 5 5 x 0.573289 6 a zee 6 b pan 6 i 6 6 x 0.527126 7 a eks 7 b zee 7 i 7 7 x 0.611784 8 a zee 8 b wye 8 i 8 8 x 0.598554 9 a hat 9 b wye 9 i 9 9 x 0.031442 10 a pan 10 b wye 10 i 10 10 x 0.502626 NR k logging2 1 a pan 1 b pan 1 i 1 2 a eks 2 b pan 2 i 2 3 a wye 3 b wye 3 i 3 4 a eks 4 b wye 4 i 4 5 a wye 5 b pan 5 i 5 6 a zee 6 b pan 6 i 6 7 a eks 7 b zee 7 i 7 8 a zee 8 b wye 8 i 8 9 a hat 9 b wye 9 i 9 10 a pan 10 b wye 10 i 10 NR k logging3 1 a pan 1 b pan 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 x 0.502626 10 y 0.952618 NR k logging4 1 a pan 1 b pan 1 i 1 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 y 0.952618 ================================================================ DSL BREAK/CONTINUE IN NESTED FOR-SREC mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; break; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a before 2 a before 3 a before 4 a before 5 a before 6 a before 7 a before 8 a before 9 a before 10 a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; continue; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a before 1 b before 1 i before 1 x before 1 y before 2 a before 2 b before 2 i before 2 x before 2 y before 3 a before 3 b before 3 i before 3 x before 3 y before 4 a before 4 b before 4 i before 4 x before 4 y before 5 a before 5 b before 5 i before 5 x before 5 y before 6 a before 6 b before 6 i before 6 x before 6 y before 7 a before 7 b before 7 i before 7 x before 7 y before 8 a before 8 b before 8 i before 8 x before 8 y before 9 a before 9 b before 9 i before 9 x before 9 y before 10 a before 10 b before 10 i before 10 x before 10 y before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; break; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b pan 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a before 1 b_a before 1 i_a before 1 x_a before 1 y_a before 2 a_a before 2 b_a before 2 i_a before 2 x_a before 2 y_a before 3 a_a before 3 b_a before 3 i_a before 3 x_a before 3 y_a before 4 a_a before 4 b_a before 4 i_a before 4 x_a before 4 y_a before 5 a_a before 5 b_a before 5 i_a before 5 x_a before 5 y_a before 6 a_a before 6 b_a before 6 i_a before 6 x_a before 6 y_a before 7 a_a before 7 b_a before 7 i_a before 7 x_a before 7 y_a before 8 a_a before 8 b_a before 8 i_a before 8 x_a before 8 y_a before 9 a_a before 9 b_a before 9 i_a before 9 x_a before 9 y_a before 10 a_a before 10 b_a before 10 i_a before 10 x_a before 10 y_a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; continue; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b pan 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a before 1 a_b before 1 a_i before 1 a_x before 1 a_y before 1 b_a before 1 b_b before 1 b_i before 1 b_x before 1 b_y before 1 i_a before 1 i_b before 1 i_i before 1 i_x before 1 i_y before 1 x_a before 1 x_b before 1 x_i before 1 x_x before 1 x_y before 1 y_a before 1 y_b before 1 y_i before 1 y_x before 1 y_y before 2 a_a before 2 a_b before 2 a_i before 2 a_x before 2 a_y before 2 b_a before 2 b_b before 2 b_i before 2 b_x before 2 b_y before 2 i_a before 2 i_b before 2 i_i before 2 i_x before 2 i_y before 2 x_a before 2 x_b before 2 x_i before 2 x_x before 2 x_y before 2 y_a before 2 y_b before 2 y_i before 2 y_x before 2 y_y before 3 a_a before 3 a_b before 3 a_i before 3 a_x before 3 a_y before 3 b_a before 3 b_b before 3 b_i before 3 b_x before 3 b_y before 3 i_a before 3 i_b before 3 i_i before 3 i_x before 3 i_y before 3 x_a before 3 x_b before 3 x_i before 3 x_x before 3 x_y before 3 y_a before 3 y_b before 3 y_i before 3 y_x before 3 y_y before 4 a_a before 4 a_b before 4 a_i before 4 a_x before 4 a_y before 4 b_a before 4 b_b before 4 b_i before 4 b_x before 4 b_y before 4 i_a before 4 i_b before 4 i_i before 4 i_x before 4 i_y before 4 x_a before 4 x_b before 4 x_i before 4 x_x before 4 x_y before 4 y_a before 4 y_b before 4 y_i before 4 y_x before 4 y_y before 5 a_a before 5 a_b before 5 a_i before 5 a_x before 5 a_y before 5 b_a before 5 b_b before 5 b_i before 5 b_x before 5 b_y before 5 i_a before 5 i_b before 5 i_i before 5 i_x before 5 i_y before 5 x_a before 5 x_b before 5 x_i before 5 x_x before 5 x_y before 5 y_a before 5 y_b before 5 y_i before 5 y_x before 5 y_y before 6 a_a before 6 a_b before 6 a_i before 6 a_x before 6 a_y before 6 b_a before 6 b_b before 6 b_i before 6 b_x before 6 b_y before 6 i_a before 6 i_b before 6 i_i before 6 i_x before 6 i_y before 6 x_a before 6 x_b before 6 x_i before 6 x_x before 6 x_y before 6 y_a before 6 y_b before 6 y_i before 6 y_x before 6 y_y before 7 a_a before 7 a_b before 7 a_i before 7 a_x before 7 a_y before 7 b_a before 7 b_b before 7 b_i before 7 b_x before 7 b_y before 7 i_a before 7 i_b before 7 i_i before 7 i_x before 7 i_y before 7 x_a before 7 x_b before 7 x_i before 7 x_x before 7 x_y before 7 y_a before 7 y_b before 7 y_i before 7 y_x before 7 y_y before 8 a_a before 8 a_b before 8 a_i before 8 a_x before 8 a_y before 8 b_a before 8 b_b before 8 b_i before 8 b_x before 8 b_y before 8 i_a before 8 i_b before 8 i_i before 8 i_x before 8 i_y before 8 x_a before 8 x_b before 8 x_i before 8 x_x before 8 x_y before 8 y_a before 8 y_b before 8 y_i before 8 y_x before 8 y_y before 9 a_a before 9 a_b before 9 a_i before 9 a_x before 9 a_y before 9 b_a before 9 b_b before 9 b_i before 9 b_x before 9 b_y before 9 i_a before 9 i_b before 9 i_i before 9 i_x before 9 i_y before 9 x_a before 9 x_b before 9 x_i before 9 x_x before 9 x_y before 9 y_a before 9 y_b before 9 y_i before 9 y_x before 9 y_y before 10 a_a before 10 a_b before 10 a_i before 10 a_x before 10 a_y before 10 b_a before 10 b_b before 10 b_i before 10 b_x before 10 b_y before 10 i_a before 10 i_b before 10 i_i before 10 i_x before 10 i_y before 10 x_a before 10 x_b before 10 x_i before 10 x_x before 10 x_y before 10 y_a before 10 y_b before 10 y_i before 10 y_x before 10 y_y before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; break; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; break; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a before 2 a before 3 a before 4 a before 5 a before 6 a before 7 a before 8 a before 9 a before 10 a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; continue; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; break; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a before 1 b before 1 i before 1 x before 1 y before 2 a before 2 b before 2 i before 2 x before 2 y before 3 a before 3 b before 3 i before 3 x before 3 y before 4 a before 4 b before 4 i before 4 x before 4 y before 5 a before 5 b before 5 i before 5 x before 5 y before 6 a before 6 b before 6 i before 6 x before 6 y before 7 a before 7 b before 7 i before 7 x before 7 y before 8 a before 8 b before 8 i before 8 x before 8 y before 9 a before 9 b before 9 i before 9 x before 9 y before 10 a before 10 b before 10 i before 10 x before 10 y before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; break; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; continue; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a before 2 a before 3 a before 4 a before 5 a before 6 a before 7 a before 8 a before 9 a before 10 a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; continue; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; continue; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a before 1 b before 1 i before 1 x before 1 y before 2 a before 2 b before 2 i before 2 x before 2 y before 3 a before 3 b before 3 i before 3 x before 3 y before 4 a before 4 b before 4 i before 4 x before 4 y before 5 a before 5 b before 5 i before 5 x before 5 y before 6 a before 6 b before 6 i before 6 x before 6 y before 7 a before 7 b before 7 i before 7 x before 7 y before 8 a before 8 b before 8 i before 8 x before 8 y before 9 a before 9 b before 9 i before 9 x before 9 y before 10 a before 10 b before 10 i before 10 x before 10 y before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { break } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b before 2 a eks 2 b before 3 a wye 3 b before 4 a eks 4 b before 5 a wye 5 b before 6 a zee 6 b before 7 a eks 7 b before 8 a zee 8 b before 9 a hat 9 b before 10 a pan 10 b before NR names output2 1 a_a pan 1 a_b pan 1 a_i 1 1 a_x 0.346790 1 a_y 0.726803 2 a_a eks 2 a_b pan 2 a_i 2 2 a_x 0.758680 2 a_y 0.522151 3 a_a wye 3 a_b wye 3 a_i 3 3 a_x 0.204603 3 a_y 0.338319 4 a_a eks 4 a_b wye 4 a_i 4 4 a_x 0.381399 4 a_y 0.134189 5 a_a wye 5 a_b pan 5 a_i 5 5 a_x 0.573289 5 a_y 0.863624 6 a_a zee 6 a_b pan 6 a_i 6 6 a_x 0.527126 6 a_y 0.493221 7 a_a eks 7 a_b zee 7 a_i 7 7 a_x 0.611784 7 a_y 0.187885 8 a_a zee 8 a_b wye 8 a_i 8 8 a_x 0.598554 8 a_y 0.976181 9 a_a hat 9 a_b wye 9 a_i 9 9 a_x 0.031442 9 a_y 0.749551 10 a_a pan 10 a_b wye 10 a_i 10 10 a_x 0.502626 10 a_y 0.952618 mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { continue } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b before 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b before 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b before 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b before 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b before 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b before 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b before 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b before 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b before 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b before 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a pan 1 a_b pan 1 a_i 1 1 a_x 0.346790 1 a_y 0.726803 1 i_a pan 1 i_b pan 1 i_i 1 1 i_x 0.346790 1 i_y 0.726803 1 x_a pan 1 x_b pan 1 x_i 1 1 x_x 0.346790 1 x_y 0.726803 1 y_a pan 1 y_b pan 1 y_i 1 1 y_x 0.346790 1 y_y 0.726803 2 a_a eks 2 a_b pan 2 a_i 2 2 a_x 0.758680 2 a_y 0.522151 2 i_a eks 2 i_b pan 2 i_i 2 2 i_x 0.758680 2 i_y 0.522151 2 x_a eks 2 x_b pan 2 x_i 2 2 x_x 0.758680 2 x_y 0.522151 2 y_a eks 2 y_b pan 2 y_i 2 2 y_x 0.758680 2 y_y 0.522151 3 a_a wye 3 a_b wye 3 a_i 3 3 a_x 0.204603 3 a_y 0.338319 3 i_a wye 3 i_b wye 3 i_i 3 3 i_x 0.204603 3 i_y 0.338319 3 x_a wye 3 x_b wye 3 x_i 3 3 x_x 0.204603 3 x_y 0.338319 3 y_a wye 3 y_b wye 3 y_i 3 3 y_x 0.204603 3 y_y 0.338319 4 a_a eks 4 a_b wye 4 a_i 4 4 a_x 0.381399 4 a_y 0.134189 4 i_a eks 4 i_b wye 4 i_i 4 4 i_x 0.381399 4 i_y 0.134189 4 x_a eks 4 x_b wye 4 x_i 4 4 x_x 0.381399 4 x_y 0.134189 4 y_a eks 4 y_b wye 4 y_i 4 4 y_x 0.381399 4 y_y 0.134189 5 a_a wye 5 a_b pan 5 a_i 5 5 a_x 0.573289 5 a_y 0.863624 5 i_a wye 5 i_b pan 5 i_i 5 5 i_x 0.573289 5 i_y 0.863624 5 x_a wye 5 x_b pan 5 x_i 5 5 x_x 0.573289 5 x_y 0.863624 5 y_a wye 5 y_b pan 5 y_i 5 5 y_x 0.573289 5 y_y 0.863624 6 a_a zee 6 a_b pan 6 a_i 6 6 a_x 0.527126 6 a_y 0.493221 6 i_a zee 6 i_b pan 6 i_i 6 6 i_x 0.527126 6 i_y 0.493221 6 x_a zee 6 x_b pan 6 x_i 6 6 x_x 0.527126 6 x_y 0.493221 6 y_a zee 6 y_b pan 6 y_i 6 6 y_x 0.527126 6 y_y 0.493221 7 a_a eks 7 a_b zee 7 a_i 7 7 a_x 0.611784 7 a_y 0.187885 7 i_a eks 7 i_b zee 7 i_i 7 7 i_x 0.611784 7 i_y 0.187885 7 x_a eks 7 x_b zee 7 x_i 7 7 x_x 0.611784 7 x_y 0.187885 7 y_a eks 7 y_b zee 7 y_i 7 7 y_x 0.611784 7 y_y 0.187885 8 a_a zee 8 a_b wye 8 a_i 8 8 a_x 0.598554 8 a_y 0.976181 8 i_a zee 8 i_b wye 8 i_i 8 8 i_x 0.598554 8 i_y 0.976181 8 x_a zee 8 x_b wye 8 x_i 8 8 x_x 0.598554 8 x_y 0.976181 8 y_a zee 8 y_b wye 8 y_i 8 8 y_x 0.598554 8 y_y 0.976181 9 a_a hat 9 a_b wye 9 a_i 9 9 a_x 0.031442 9 a_y 0.749551 9 i_a hat 9 i_b wye 9 i_i 9 9 i_x 0.031442 9 i_y 0.749551 9 x_a hat 9 x_b wye 9 x_i 9 9 x_x 0.031442 9 x_y 0.749551 9 y_a hat 9 y_b wye 9 y_i 9 9 y_x 0.031442 9 y_y 0.749551 10 a_a pan 10 a_b wye 10 a_i 10 10 a_x 0.502626 10 a_y 0.952618 10 i_a pan 10 i_b wye 10 i_i 10 10 i_x 0.502626 10 i_y 0.952618 10 x_a pan 10 x_b wye 10 x_i 10 10 x_x 0.502626 10 x_y 0.952618 10 y_a pan 10 y_b wye 10 y_i 10 10 y_x 0.502626 10 y_y 0.952618 mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { break } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b pan 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a before 1 b_a before 1 i_a before 1 x_a before 1 y_a before 2 a_a before 2 b_a before 2 i_a before 2 x_a before 2 y_a before 3 a_a before 3 b_a before 3 i_a before 3 x_a before 3 y_a before 4 a_a before 4 b_a before 4 i_a before 4 x_a before 4 y_a before 5 a_a before 5 b_a before 5 i_a before 5 x_a before 5 y_a before 6 a_a before 6 b_a before 6 i_a before 6 x_a before 6 y_a before 7 a_a before 7 b_a before 7 i_a before 7 x_a before 7 y_a before 8 a_a before 8 b_a before 8 i_a before 8 x_a before 8 y_a before 9 a_a before 9 b_a before 9 i_a before 9 x_a before 9 y_a before 10 a_a before 10 b_a before 10 i_a before 10 x_a before 10 y_a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "b") { continue } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b pan 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b pan 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b wye 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b wye 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b pan 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b pan 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b zee 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b wye 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b wye 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b wye 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a pan 1 a_b before 1 a_i 1 1 a_x 0.346790 1 a_y 0.726803 1 b_a pan 1 b_b before 1 b_i 1 1 b_x 0.346790 1 b_y 0.726803 1 i_a pan 1 i_b before 1 i_i 1 1 i_x 0.346790 1 i_y 0.726803 1 x_a pan 1 x_b before 1 x_i 1 1 x_x 0.346790 1 x_y 0.726803 1 y_a pan 1 y_b before 1 y_i 1 1 y_x 0.346790 1 y_y 0.726803 2 a_a eks 2 a_b before 2 a_i 2 2 a_x 0.758680 2 a_y 0.522151 2 b_a eks 2 b_b before 2 b_i 2 2 b_x 0.758680 2 b_y 0.522151 2 i_a eks 2 i_b before 2 i_i 2 2 i_x 0.758680 2 i_y 0.522151 2 x_a eks 2 x_b before 2 x_i 2 2 x_x 0.758680 2 x_y 0.522151 2 y_a eks 2 y_b before 2 y_i 2 2 y_x 0.758680 2 y_y 0.522151 3 a_a wye 3 a_b before 3 a_i 3 3 a_x 0.204603 3 a_y 0.338319 3 b_a wye 3 b_b before 3 b_i 3 3 b_x 0.204603 3 b_y 0.338319 3 i_a wye 3 i_b before 3 i_i 3 3 i_x 0.204603 3 i_y 0.338319 3 x_a wye 3 x_b before 3 x_i 3 3 x_x 0.204603 3 x_y 0.338319 3 y_a wye 3 y_b before 3 y_i 3 3 y_x 0.204603 3 y_y 0.338319 4 a_a eks 4 a_b before 4 a_i 4 4 a_x 0.381399 4 a_y 0.134189 4 b_a eks 4 b_b before 4 b_i 4 4 b_x 0.381399 4 b_y 0.134189 4 i_a eks 4 i_b before 4 i_i 4 4 i_x 0.381399 4 i_y 0.134189 4 x_a eks 4 x_b before 4 x_i 4 4 x_x 0.381399 4 x_y 0.134189 4 y_a eks 4 y_b before 4 y_i 4 4 y_x 0.381399 4 y_y 0.134189 5 a_a wye 5 a_b before 5 a_i 5 5 a_x 0.573289 5 a_y 0.863624 5 b_a wye 5 b_b before 5 b_i 5 5 b_x 0.573289 5 b_y 0.863624 5 i_a wye 5 i_b before 5 i_i 5 5 i_x 0.573289 5 i_y 0.863624 5 x_a wye 5 x_b before 5 x_i 5 5 x_x 0.573289 5 x_y 0.863624 5 y_a wye 5 y_b before 5 y_i 5 5 y_x 0.573289 5 y_y 0.863624 6 a_a zee 6 a_b before 6 a_i 6 6 a_x 0.527126 6 a_y 0.493221 6 b_a zee 6 b_b before 6 b_i 6 6 b_x 0.527126 6 b_y 0.493221 6 i_a zee 6 i_b before 6 i_i 6 6 i_x 0.527126 6 i_y 0.493221 6 x_a zee 6 x_b before 6 x_i 6 6 x_x 0.527126 6 x_y 0.493221 6 y_a zee 6 y_b before 6 y_i 6 6 y_x 0.527126 6 y_y 0.493221 7 a_a eks 7 a_b before 7 a_i 7 7 a_x 0.611784 7 a_y 0.187885 7 b_a eks 7 b_b before 7 b_i 7 7 b_x 0.611784 7 b_y 0.187885 7 i_a eks 7 i_b before 7 i_i 7 7 i_x 0.611784 7 i_y 0.187885 7 x_a eks 7 x_b before 7 x_i 7 7 x_x 0.611784 7 x_y 0.187885 7 y_a eks 7 y_b before 7 y_i 7 7 y_x 0.611784 7 y_y 0.187885 8 a_a zee 8 a_b before 8 a_i 8 8 a_x 0.598554 8 a_y 0.976181 8 b_a zee 8 b_b before 8 b_i 8 8 b_x 0.598554 8 b_y 0.976181 8 i_a zee 8 i_b before 8 i_i 8 8 i_x 0.598554 8 i_y 0.976181 8 x_a zee 8 x_b before 8 x_i 8 8 x_x 0.598554 8 x_y 0.976181 8 y_a zee 8 y_b before 8 y_i 8 8 y_x 0.598554 8 y_y 0.976181 9 a_a hat 9 a_b before 9 a_i 9 9 a_x 0.031442 9 a_y 0.749551 9 b_a hat 9 b_b before 9 b_i 9 9 b_x 0.031442 9 b_y 0.749551 9 i_a hat 9 i_b before 9 i_i 9 9 i_x 0.031442 9 i_y 0.749551 9 x_a hat 9 x_b before 9 x_i 9 9 x_x 0.031442 9 x_y 0.749551 9 y_a hat 9 y_b before 9 y_i 9 9 y_x 0.031442 9 y_y 0.749551 10 a_a pan 10 a_b before 10 a_i 10 10 a_x 0.502626 10 a_y 0.952618 10 b_a pan 10 b_b before 10 b_i 10 10 b_x 0.502626 10 b_y 0.952618 10 i_a pan 10 i_b before 10 i_i 10 10 i_x 0.502626 10 i_y 0.952618 10 x_a pan 10 x_b before 10 x_i 10 10 x_x 0.502626 10 x_y 0.952618 10 y_a pan 10 y_b before 10 y_i 10 10 y_x 0.502626 10 y_y 0.952618 mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { break } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { break } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b before 2 a eks 2 b before 3 a wye 3 b before 4 a eks 4 b before 5 a wye 5 b before 6 a zee 6 b before 7 a eks 7 b before 8 a zee 8 b before 9 a hat 9 b before 10 a pan 10 b before NR names output2 1 a_a before 2 a_a before 3 a_a before 4 a_a before 5 a_a before 6 a_a before 7 a_a before 8 a_a before 9 a_a before 10 a_a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { continue } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { break } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b before 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b before 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b before 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b before 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b before 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b before 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b before 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b before 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b before 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b before 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a before 1 i_a before 1 x_a before 1 y_a before 2 a_a before 2 i_a before 2 x_a before 2 y_a before 3 a_a before 3 i_a before 3 x_a before 3 y_a before 4 a_a before 4 i_a before 4 x_a before 4 y_a before 5 a_a before 5 i_a before 5 x_a before 5 y_a before 6 a_a before 6 i_a before 6 x_a before 6 y_a before 7 a_a before 7 i_a before 7 x_a before 7 y_a before 8 a_a before 8 i_a before 8 x_a before 8 y_a before 9 a_a before 9 i_a before 9 x_a before 9 y_a before 10 a_a before 10 i_a before 10 x_a before 10 y_a before mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { break } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { continue } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b before 2 a eks 2 b before 3 a wye 3 b before 4 a eks 4 b before 5 a wye 5 b before 6 a zee 6 b before 7 a eks 7 b before 8 a zee 8 b before 9 a hat 9 b before 10 a pan 10 b before NR names output2 1 a_a before 1 a_b pan 1 a_i 1 1 a_x 0.346790 1 a_y 0.726803 2 a_a before 2 a_b pan 2 a_i 2 2 a_x 0.758680 2 a_y 0.522151 3 a_a before 3 a_b wye 3 a_i 3 3 a_x 0.204603 3 a_y 0.338319 4 a_a before 4 a_b wye 4 a_i 4 4 a_x 0.381399 4 a_y 0.134189 5 a_a before 5 a_b pan 5 a_i 5 5 a_x 0.573289 5 a_y 0.863624 6 a_a before 6 a_b pan 6 a_i 6 6 a_x 0.527126 6 a_y 0.493221 7 a_a before 7 a_b zee 7 a_i 7 7 a_x 0.611784 7 a_y 0.187885 8 a_a before 8 a_b wye 8 a_i 8 8 a_x 0.598554 8 a_y 0.976181 9 a_a before 9 a_b wye 9 a_i 9 9 a_x 0.031442 9 a_y 0.749551 10 a_a before 10 a_b wye 10 a_i 10 10 a_x 0.502626 10 a_y 0.952618 mlr --opprint --from ./reg_test/input/abixy put -q for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { continue } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { continue } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } NR name output1 1 a pan 1 b before 1 i 1 1 x 0.346790 1 y 0.726803 2 a eks 2 b before 2 i 2 2 x 0.758680 2 y 0.522151 3 a wye 3 b before 3 i 3 3 x 0.204603 3 y 0.338319 4 a eks 4 b before 4 i 4 4 x 0.381399 4 y 0.134189 5 a wye 5 b before 5 i 5 5 x 0.573289 5 y 0.863624 6 a zee 6 b before 6 i 6 6 x 0.527126 6 y 0.493221 7 a eks 7 b before 7 i 7 7 x 0.611784 7 y 0.187885 8 a zee 8 b before 8 i 8 8 x 0.598554 8 y 0.976181 9 a hat 9 b before 9 i 9 9 x 0.031442 9 y 0.749551 10 a pan 10 b before 10 i 10 10 x 0.502626 10 y 0.952618 NR names output2 1 a_a before 1 a_b pan 1 a_i 1 1 a_x 0.346790 1 a_y 0.726803 1 i_a before 1 i_b pan 1 i_i 1 1 i_x 0.346790 1 i_y 0.726803 1 x_a before 1 x_b pan 1 x_i 1 1 x_x 0.346790 1 x_y 0.726803 1 y_a before 1 y_b pan 1 y_i 1 1 y_x 0.346790 1 y_y 0.726803 2 a_a before 2 a_b pan 2 a_i 2 2 a_x 0.758680 2 a_y 0.522151 2 i_a before 2 i_b pan 2 i_i 2 2 i_x 0.758680 2 i_y 0.522151 2 x_a before 2 x_b pan 2 x_i 2 2 x_x 0.758680 2 x_y 0.522151 2 y_a before 2 y_b pan 2 y_i 2 2 y_x 0.758680 2 y_y 0.522151 3 a_a before 3 a_b wye 3 a_i 3 3 a_x 0.204603 3 a_y 0.338319 3 i_a before 3 i_b wye 3 i_i 3 3 i_x 0.204603 3 i_y 0.338319 3 x_a before 3 x_b wye 3 x_i 3 3 x_x 0.204603 3 x_y 0.338319 3 y_a before 3 y_b wye 3 y_i 3 3 y_x 0.204603 3 y_y 0.338319 4 a_a before 4 a_b wye 4 a_i 4 4 a_x 0.381399 4 a_y 0.134189 4 i_a before 4 i_b wye 4 i_i 4 4 i_x 0.381399 4 i_y 0.134189 4 x_a before 4 x_b wye 4 x_i 4 4 x_x 0.381399 4 x_y 0.134189 4 y_a before 4 y_b wye 4 y_i 4 4 y_x 0.381399 4 y_y 0.134189 5 a_a before 5 a_b pan 5 a_i 5 5 a_x 0.573289 5 a_y 0.863624 5 i_a before 5 i_b pan 5 i_i 5 5 i_x 0.573289 5 i_y 0.863624 5 x_a before 5 x_b pan 5 x_i 5 5 x_x 0.573289 5 x_y 0.863624 5 y_a before 5 y_b pan 5 y_i 5 5 y_x 0.573289 5 y_y 0.863624 6 a_a before 6 a_b pan 6 a_i 6 6 a_x 0.527126 6 a_y 0.493221 6 i_a before 6 i_b pan 6 i_i 6 6 i_x 0.527126 6 i_y 0.493221 6 x_a before 6 x_b pan 6 x_i 6 6 x_x 0.527126 6 x_y 0.493221 6 y_a before 6 y_b pan 6 y_i 6 6 y_x 0.527126 6 y_y 0.493221 7 a_a before 7 a_b zee 7 a_i 7 7 a_x 0.611784 7 a_y 0.187885 7 i_a before 7 i_b zee 7 i_i 7 7 i_x 0.611784 7 i_y 0.187885 7 x_a before 7 x_b zee 7 x_i 7 7 x_x 0.611784 7 x_y 0.187885 7 y_a before 7 y_b zee 7 y_i 7 7 y_x 0.611784 7 y_y 0.187885 8 a_a before 8 a_b wye 8 a_i 8 8 a_x 0.598554 8 a_y 0.976181 8 i_a before 8 i_b wye 8 i_i 8 8 i_x 0.598554 8 i_y 0.976181 8 x_a before 8 x_b wye 8 x_i 8 8 x_x 0.598554 8 x_y 0.976181 8 y_a before 8 y_b wye 8 y_i 8 8 y_x 0.598554 8 y_y 0.976181 9 a_a before 9 a_b wye 9 a_i 9 9 a_x 0.031442 9 a_y 0.749551 9 i_a before 9 i_b wye 9 i_i 9 9 i_x 0.031442 9 i_y 0.749551 9 x_a before 9 x_b wye 9 x_i 9 9 x_x 0.031442 9 x_y 0.749551 9 y_a before 9 y_b wye 9 y_i 9 9 y_x 0.031442 9 y_y 0.749551 10 a_a before 10 a_b wye 10 a_i 10 10 a_x 0.502626 10 a_y 0.952618 10 i_a before 10 i_b wye 10 i_i 10 10 i_x 0.502626 10 i_y 0.952618 10 x_a before 10 x_b wye 10 x_i 10 10 x_x 0.502626 10 x_y 0.952618 10 y_a before 10 y_b wye 10 y_i 10 10 y_x 0.502626 10 y_y 0.952618 ================================================================ FOR-MAP DEPTH TESTS ---------------------------------------------------------------- for full oosvar mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for(k1,v in @*) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for((k1),v in @*) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for((k1,k2),v in @*) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for((k1,k2,k3),v in @*) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 ---------------------------------------------------------------- for oosvar submap mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for(k1,v in @o[1][2]) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for((k1),v in @o[1][2]) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for((k1,k2),v in @o[1][2]) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for((k1,k2,k3),v in @o[1][2]) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- for local mlr --from ./reg_test/input/abixy put o[1][2] = 7; for(k1,v in o) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put o[1][2] = 7; for((k1),v in o) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put o[1][2] = 7; for((k1,k2),v in o) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put o[1][2] = 7; for((k1,k2,k3),v in o) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- for map-literal mlr --from ./reg_test/input/abixy put for(k1,v in {1:{2:7}}) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put for((k1),v in {1:{2:7}}) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put for((k1,k2),v in {1:{2:7}}) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=10.346790,y=100.726803 a=eks,b=pan,i=2,x=10.758680,y=100.522151 a=wye,b=wye,i=3,x=10.204603,y=100.338319 a=eks,b=wye,i=4,x=10.381399,y=100.134189 a=wye,b=pan,i=5,x=10.573289,y=100.863624 a=zee,b=pan,i=6,x=10.527126,y=100.493221 a=eks,b=zee,i=7,x=10.611784,y=100.187885 a=zee,b=wye,i=8,x=10.598554,y=100.976181 a=hat,b=wye,i=9,x=10.031442,y=100.749551 a=pan,b=wye,i=10,x=10.502626,y=100.952618 mlr --from ./reg_test/input/abixy put for((k1,k2,k3),v in {1:{2:7}}) {$x+=10;$y+=100} a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ DSL BREAK/CONTINUE IN SINGLE FOR-OOSVAR ---------------------------------------------------------------- single-key tests, direct break/continue mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { break; @output[k1] = v; } emit @output, "NR", "name" } mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; break; @output[k1] = "ERROR"; } emit @output, "NR", "name" } NR output a eks mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { continue; @output[k1] = v } emit @output, "NR", "name" } mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; continue; @output[k1] = "ERROR"; } emit @output, "NR", "name" } NR output a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 ---------------------------------------------------------------- single-key tests, indirect break/continue mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { if (k1 == "i") { break; } @output[k1] = v; } emit @output, "NR", "name" } NR output a eks b pan mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; if (k1 == "i") { break; } } emit @output, "NR", "name" } NR output a eks b pan i 2 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { if (k1 == "i") { continue; } @output[k1] = v } emit @output, "NR", "name" } NR output a eks b pan x 0.7586799647899636 y 0.5221511083334797 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; if (k1 == "i") { continue; } @output[k1] = "reached"; } emit @output, "NR", "name" } NR output a reached b reached i 2 x reached y reached ---------------------------------------------------------------- multiple-key tests, direct break/continue mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { break; @output[k1][k2] = v; } emit @output, "NR", "name" } mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; break; @output[k1][k2] = "ERROR" } emit @output, "NR", "name" } NR name output 1 a pan mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { continue; @output[k1][k2] = v } emit @output, "NR", "name" } mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; continue; @output[k1][k2] = "ERROR"; } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i 1 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 i 2 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 i 3 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 i 4 4 x 0.38139939387114097 4 y 0.13418874328430463 5 a wye 5 b pan 5 i 5 5 x 0.5732889198020006 5 y 0.8636244699032729 6 a zee 6 b pan 6 i 6 6 x 0.5271261600918548 6 y 0.49322128674835697 7 a eks 7 b zee 7 i 7 7 x 0.6117840605678454 7 y 0.1878849191181694 8 a zee 8 b wye 8 i 8 8 x 0.5985540091064224 8 y 0.976181385699006 9 a hat 9 b wye 9 i 9 9 x 0.03144187646093577 9 y 0.7495507603507059 10 a pan 10 b wye 10 i 10 10 x 0.5026260055412137 10 y 0.9526183602969864 ---------------------------------------------------------------- multiple-key tests, indirect break/continue mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k1 == 5) { break; } @output[k1][k2] = v; } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i 1 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 i 2 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 i 3 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 i 4 4 x 0.38139939387114097 4 y 0.13418874328430463 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k2 == "i") { break; } @output[k1][k2] = v; } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; if (k1 == 5) { break; } } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i 1 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 i 2 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 i 3 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 i 4 4 x 0.38139939387114097 4 y 0.13418874328430463 5 a wye mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; if (k2 == "i") { break; } } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i 1 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k1 == 5) { continue; } @output[k1][k2] = v } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i 1 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 i 2 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 i 3 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 i 4 4 x 0.38139939387114097 4 y 0.13418874328430463 6 a zee 6 b pan 6 i 6 6 x 0.5271261600918548 6 y 0.49322128674835697 7 a eks 7 b zee 7 i 7 7 x 0.6117840605678454 7 y 0.1878849191181694 8 a zee 8 b wye 8 i 8 8 x 0.5985540091064224 8 y 0.976181385699006 9 a hat 9 b wye 9 i 9 9 x 0.03144187646093577 9 y 0.7495507603507059 10 a pan 10 b wye 10 i 10 10 x 0.5026260055412137 10 y 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k2 == "i") { continue; } @output[k1][k2] = v } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 x 0.38139939387114097 4 y 0.13418874328430463 5 a wye 5 b pan 5 x 0.5732889198020006 5 y 0.8636244699032729 6 a zee 6 b pan 6 x 0.5271261600918548 6 y 0.49322128674835697 7 a eks 7 b zee 7 x 0.6117840605678454 7 y 0.1878849191181694 8 a zee 8 b wye 8 x 0.5985540091064224 8 y 0.976181385699006 9 a hat 9 b wye 9 x 0.03144187646093577 9 y 0.7495507603507059 10 a pan 10 b wye 10 x 0.5026260055412137 10 y 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = "before"; if (k1 == 5) { continue; } @output[k1][k2] = v; } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i 1 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 i 2 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 i 3 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 i 4 4 x 0.38139939387114097 4 y 0.13418874328430463 5 a before 5 b before 5 i before 5 x before 5 y before 6 a zee 6 b pan 6 i 6 6 x 0.5271261600918548 6 y 0.49322128674835697 7 a eks 7 b zee 7 i 7 7 x 0.6117840605678454 7 y 0.1878849191181694 8 a zee 8 b wye 8 i 8 8 x 0.5985540091064224 8 y 0.976181385699006 9 a hat 9 b wye 9 i 9 9 x 0.03144187646093577 9 y 0.7495507603507059 10 a pan 10 b wye 10 i 10 10 x 0.5026260055412137 10 y 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = "before"; if (k2 == "i") { continue; } @output[k1][k2] = v; } emit @output, "NR", "name" } NR name output 1 a pan 1 b pan 1 i before 1 x 0.3467901443380824 1 y 0.7268028627434533 2 a eks 2 b pan 2 i before 2 x 0.7586799647899636 2 y 0.5221511083334797 3 a wye 3 b wye 3 i before 3 x 0.20460330576630303 3 y 0.33831852551664776 4 a eks 4 b wye 4 i before 4 x 0.38139939387114097 4 y 0.13418874328430463 5 a wye 5 b pan 5 i before 5 x 0.5732889198020006 5 y 0.8636244699032729 6 a zee 6 b pan 6 i before 6 x 0.5271261600918548 6 y 0.49322128674835697 7 a eks 7 b zee 7 i before 7 x 0.6117840605678454 7 y 0.1878849191181694 8 a zee 8 b wye 8 i before 8 x 0.5985540091064224 8 y 0.976181385699006 9 a hat 9 b wye 9 i before 9 x 0.03144187646093577 9 y 0.7495507603507059 10 a pan 10 b wye 10 i before 10 x 0.5026260055412137 10 y 0.9526183602969864 ================================================================ DSL BREAK/CONTINUE IN NESTED FOR-OOSVAR mlr --opprint --from ./reg_test/input/abixy put -q @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k1 != 2) { continue } for ((k3, k4), v in @logging) { if (k3 != 4) { continue } @output[k1][k2][k3][k4] = v; } } emit @output, "NR1", "name1", "NR2", "name2" } NR1 name1 NR2 name2 output 2 a 4 a eks 2 a 4 b wye 2 a 4 i 4 2 a 4 x 0.38139939387114097 2 a 4 y 0.13418874328430463 2 b 4 a eks 2 b 4 b wye 2 b 4 i 4 2 b 4 x 0.38139939387114097 2 b 4 y 0.13418874328430463 2 i 4 a eks 2 i 4 b wye 2 i 4 i 4 2 i 4 x 0.38139939387114097 2 i 4 y 0.13418874328430463 2 x 4 a eks 2 x 4 b wye 2 x 4 i 4 2 x 4 x 0.38139939387114097 2 x 4 y 0.13418874328430463 2 y 4 a eks 2 y 4 b wye 2 y 4 i 4 2 y 4 x 0.38139939387114097 2 y 4 y 0.13418874328430463 ================================================================ DSL PRINT mlr put -q print 1; print "two"; print $a; print; print $i < 4; print "y is ".string($y); print "" ./reg_test/input/abixy 1 two pan true y is 0.726803 1 two eks true y is 0.522151 1 two wye true y is 0.338319 1 two eks false y is 0.134189 1 two wye false y is 0.863624 1 two zee false y is 0.493221 1 two eks false y is 0.187885 1 two zee false y is 0.976181 1 two hat false y is 0.749551 1 two pan false y is 0.952618 mlr put -q printn 1; printn "two"; printn $a; printn; printn $i < 4; printn "y is ".string($y); print "" ./reg_test/input/abixy 1twopantruey is 0.726803 1twoekstruey is 0.522151 1twowyetruey is 0.338319 1twoeksfalsey is 0.134189 1twowyefalsey is 0.863624 1twozeefalsey is 0.493221 1twoeksfalsey is 0.187885 1twozeefalsey is 0.976181 1twohatfalsey is 0.749551 1twopanfalsey is 0.952618 mlr put -q print $*; print $*; print {}; print ./reg_test/input/abixy {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} {is-a-map} mlr put -q printn $*; printn $*; printn {}; print ./reg_test/input/abixy {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} {is-a-map}{is-a-map}{is-a-map} ================================================================ ABSENT/EMPTY mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy sum=4.536294 mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy a=pan,sum=0.849416 a=eks,sum=1.751863 a=wye,sum=0.777892 a=zee,sum=1.125680 a=hat,sum=0.031442 mlr put $nonesuch = @nonesuch ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy-het sum=3.963005 mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy-het a=pan,sum=0.849416 a=eks,sum=1.751863 a=zee,sum=1.125680 mlr put $nonesuch = @nonesuch ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy sumtype=float,xtype=float,sum=0.346790 sumtype=float,xtype=float,sum=1.105470 sumtype=float,xtype=float,sum=1.310073 sumtype=float,xtype=float,sum=1.691473 sumtype=float,xtype=float,sum=2.264762 sumtype=float,xtype=float,sum=2.791888 sumtype=float,xtype=float,sum=3.403672 sumtype=float,xtype=float,sum=4.002226 sumtype=float,xtype=float,sum=4.033668 sumtype=float,xtype=float,sum=4.536294 sum=4.536294 mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy-het sumtype=float,xtype=float,sum=0.346790 sumtype=float,xtype=float,sum=1.105470 sumtype=float,xtype=float,sum=1.310073 sumtype=float,xtype=float,sum=1.691473 sumtype=float,xtype=absent,sum=1.691473 sumtype=float,xtype=float,sum=2.218599 sumtype=float,xtype=float,sum=2.830383 sumtype=float,xtype=float,sum=3.428937 sumtype=float,xtype=float,sum=3.460379 sumtype=float,xtype=float,sum=3.963005 sum=3.963005 mlr put $z = $x + $y ./reg_test/input/typeof.dkvp x=1,y=2,z=3 x=1,y=,z= x=,y=2,z= x=,y=,z= a=1,y=2,z=2 a=1,y= a=,y=2,z=2 a=,y= x=1,b=2,z=1 x=1,b=,z=1 x=,b=2 x=,b= mlr put $z = $x + $u ./reg_test/input/typeof.dkvp x=1,y=2,z=1 x=1,y=,z=1 x=,y=2 x=,y= a=1,y=2 a=1,y= a=,y=2 a=,y= x=1,b=2,z=1 x=1,b=,z=1 x=,b=2 x=,b= mlr put @s = @s + $y; emitp @s ./reg_test/input/typeof.dkvp s=2 x=1,y=2 s= x=1,y= s= x=,y=2 s= x=,y= s= a=1,y=2 s= a=1,y= s= a=,y=2 s= a=,y= s= x=1,b=2 s= x=1,b= s= x=,b=2 s= x=,b= mlr put @s = @s + $u; emitp @s ./reg_test/input/typeof.dkvp x=1,y=2 x=1,y= x=,y=2 x=,y= a=1,y=2 a=1,y= a=,y=2 a=,y= x=1,b=2 x=1,b= x=,b=2 x=,b= mlr put $z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp x=int,y=int,z=int x=int,y=empty,z=empty x=empty,y=int,z=empty x=empty,y=empty,z=empty a=1,y=int,z=int,x=absent a=1,y=empty,x=absent,z=absent a=,y=int,z=int,x=absent a=,y=empty,x=absent,z=absent x=int,b=2,z=int,y=absent x=int,b=,z=int,y=absent x=empty,b=2,y=absent,z=absent x=empty,b=,y=absent,z=absent mlr put $z = $x + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp x=int,y=int,z=int x=int,y=empty,z=int x=empty,y=int,z=absent x=empty,y=empty,z=absent a=1,y=int,x=absent,z=absent a=1,y=empty,x=absent,z=absent a=,y=int,x=absent,z=absent a=,y=empty,x=absent,z=absent x=int,b=2,z=int,y=absent x=int,b=,z=int,y=absent x=empty,b=2,y=absent,z=absent x=empty,b=,y=absent,z=absent mlr put @s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp x=int,y=int,z=absent,s=int x=int,y=empty,z=absent,s=empty x=empty,y=int,z=absent,s=empty x=empty,y=empty,z=absent,s=empty a=1,y=int,x=absent,z=absent,s=empty a=1,y=empty,x=absent,z=absent,s=empty a=,y=int,x=absent,z=absent,s=empty a=,y=empty,x=absent,z=absent,s=empty x=int,b=2,y=absent,z=absent,s=empty x=int,b=,y=absent,z=absent,s=empty x=empty,b=2,y=absent,z=absent,s=empty x=empty,b=,y=absent,z=absent,s=empty mlr put @s = @s + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp x=int,y=int,z=absent,s=absent x=int,y=empty,z=absent,s=absent x=empty,y=int,z=absent,s=absent x=empty,y=empty,z=absent,s=absent a=1,y=int,x=absent,z=absent,s=absent a=1,y=empty,x=absent,z=absent,s=absent a=,y=int,x=absent,z=absent,s=absent a=,y=empty,x=absent,z=absent,s=absent x=int,b=2,y=absent,z=absent,s=absent x=int,b=,y=absent,z=absent,s=absent x=empty,b=2,y=absent,z=absent,s=absent x=empty,b=,y=absent,z=absent,s=absent mlr cat x=1 x= x=7 mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum+=$x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } x=1 ostype=absent xtype=int nstype=int nsum=1 x= osum=1 ostype=int xtype=empty nstype=empty nsum= x=7 osum= ostype=empty xtype=int nstype=empty nsum= sum= mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);is_present($x){@sum+=$x}; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } x=1 ostype=absent xtype=int nstype=int nsum=1 x= osum=1 ostype=int xtype=empty nstype=empty nsum= x=7 osum= ostype=empty xtype=int nstype=empty nsum= sum= mlr cat x=1 xxx= x=7 mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum+=$x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } x=1 ostype=absent xtype=int nstype=int nsum=1 xxx= osum=1 ostype=int xtype=absent nstype=int nsum=1 x=7 osum=1 ostype=int xtype=int nstype=int nsum=8 sum=8 mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);is_present($x){@sum+=$x}; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } x=1 ostype=absent xtype=int nstype=int nsum=1 xxx= osum=1 ostype=int xtype=absent nstype=int nsum=1 x=7 osum=1 ostype=int xtype=int nstype=int nsum=8 sum=8 mlr cat x=1 x= y= x=7 mlr --ofs tab put $xtype=typeof($x);$sum = $x + 10; $stype=typeof($sum) x=1 xtype=int sum=11 stype=int x= xtype=empty sum= stype=empty y= xtype=absent sum=10 stype=int x=7 xtype=int sum=17 stype=int mlr --ofs tab put $xtype=typeof($x);$sum = is_present($x) ? $x + 10 : 999; $stype=typeof($sum) x=1 xtype=int sum=11 stype=int x= xtype=empty sum= stype=empty y= xtype=absent sum=999 stype=int x=7 xtype=int sum=17 stype=int ================================================================ MAP-VARIANT DUMPS mlr --from ./reg_test/input/abixy-het put -q dump {"a"."b":$a.$b} { "ab": "panpan" } { "ab": "ekspan" } { "ab": "wye" } { "ab": "eks" } { "ab": "wyepan" } { "ab": "zeepan" } { "ab": "ekszee" } { "ab": "zeewye" } { "ab": } { "ab": "panwye" } mlr --from ./reg_test/input/abixy-het put -q func f(a, b) { return {"a"."b":a.b} } dump f($a, $b) { "ab": "panpan" } { "ab": "ekspan" } { "ab": "wye" } { "ab": "eks" } { "ab": "wyepan" } { "ab": "zeepan" } { "ab": "ekszee" } { "ab": "zeewye" } { "ab": } { "ab": "panwye" } ================================================================ PARAMETERIZED EMIT mlr put -q @sum[$a] = $x; end{ emitp @sum; } ./reg_test/input/abixy sum:pan=0.502626,sum:eks=0.611784,sum:wye=0.573289,sum:zee=0.598554,sum:hat=0.031442 mlr put -q @sum[$a] = $x; end{ emitp @sum,"a"; } ./reg_test/input/abixy a=pan,sum=0.502626 a=eks,sum=0.611784 a=wye,sum=0.573289 a=zee,sum=0.598554 a=hat,sum=0.031442 mlr put -q @sum[$a] = $x; end{ emitp @sum,"a","b"; } ./reg_test/input/abixy a=pan,sum=0.502626 a=eks,sum=0.611784 a=wye,sum=0.573289 a=zee,sum=0.598554 a=hat,sum=0.031442 mlr put -q @sum[$a][$b] = $x; end{ emitp @sum; } ./reg_test/input/abixy sum:pan:pan=0.346790,sum:pan:wye=0.502626,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:eks:zee=0.611784,sum:wye:wye=0.204603,sum:wye:pan=0.573289,sum:zee:pan=0.527126,sum:zee:wye=0.598554,sum:hat:wye=0.031442 mlr put -q @sum[$a][$b] = $x; end{ emitp @sum,"a"; } ./reg_test/input/abixy a=pan,sum:pan=0.346790,sum:wye=0.502626 a=eks,sum:pan=0.758680,sum:wye=0.381399,sum:zee=0.611784 a=wye,sum:wye=0.204603,sum:pan=0.573289 a=zee,sum:pan=0.527126,sum:wye=0.598554 a=hat,sum:wye=0.031442 mlr put -q @sum[$a][$b] = $x; end{ emitp @sum,"a","b"; } ./reg_test/input/abixy a=pan,b=pan,sum=0.346790 a=pan,b=wye,sum=0.502626 a=eks,b=pan,sum=0.758680 a=eks,b=wye,sum=0.381399 a=eks,b=zee,sum=0.611784 a=wye,b=wye,sum=0.204603 a=wye,b=pan,sum=0.573289 a=zee,b=pan,sum=0.527126 a=zee,b=wye,sum=0.598554 a=hat,b=wye,sum=0.031442 mlr put -q @v = $a; end {emitf @v } ./reg_test/input/abixy v=pan mlr put -q @v = $i; end {emitf @v } ./reg_test/input/abixy v=10 mlr put -q @v = $x; end {emitf @v } ./reg_test/input/abixy v=0.502626 mlr put -q @v = $nonesuch; end {emitf @v } ./reg_test/input/abixy v= mlr put -q @v = $a; end {emitp @v } ./reg_test/input/abixy v=pan mlr put -q @v = $i; end {emitp @v } ./reg_test/input/abixy v=10 mlr put -q @v = $x; end {emitp @v } ./reg_test/input/abixy v=0.502626 mlr put -q @v = $nonesuch; end {emitp @v } ./reg_test/input/abixy mlr put -q @sum += $i; end {emitf @sum } ./reg_test/input/abixy sum=55 mlr put -q @sum += $x; end {emitf @sum } ./reg_test/input/abixy sum=4.536294 mlr put -q @sum += $nonesuch; end {emitf @sum } ./reg_test/input/abixy sum= mlr put -q @sum += $i; end {emitp @sum } ./reg_test/input/abixy sum=55 mlr put -q @sum += $x; end {emitp @sum } ./reg_test/input/abixy sum=4.536294 mlr put -q @sum += $nonesuch; end {emitp @sum } ./reg_test/input/abixy mlr put -q @sum += $i; end {emitp @sum, "extra" } ./reg_test/input/abixy sum=55 mlr put -q @sum += $x; end {emitp @sum, "extra" } ./reg_test/input/abixy sum=4.536294 mlr put -q @sum += $nonesuch; end {emitp @sum, "extra" } ./reg_test/input/abixy mlr put -q @sum[$a] += $i; end {emitp @sum } ./reg_test/input/abixy sum:pan=11,sum:eks=13,sum:wye=8,sum:zee=14,sum:hat=9 mlr put -q @sum[$a] += $x; end {emitp @sum } ./reg_test/input/abixy sum:pan=0.849416,sum:eks=1.751863,sum:wye=0.777892,sum:zee=1.125680,sum:hat=0.031442 mlr put -q @sum[$a] += $nonesuch; end {emitp @sum } ./reg_test/input/abixy mlr put -q @sum[$a] += $i; end {emitp @sum, "a" } ./reg_test/input/abixy a=pan,sum=11 a=eks,sum=13 a=wye,sum=8 a=zee,sum=14 a=hat,sum=9 mlr put -q @sum[$a] += $x; end {emitp @sum, "a" } ./reg_test/input/abixy a=pan,sum=0.849416 a=eks,sum=1.751863 a=wye,sum=0.777892 a=zee,sum=1.125680 a=hat,sum=0.031442 mlr put -q @sum[$a] += $nonesuch; end {emitp @sum, "a" } ./reg_test/input/abixy mlr put -q @sum[$a] += $i; end {emitp @sum, "a", "extra" } ./reg_test/input/abixy a=pan,sum=11 a=eks,sum=13 a=wye,sum=8 a=zee,sum=14 a=hat,sum=9 mlr put -q @sum[$a] += $x; end {emitp @sum, "a", "extra" } ./reg_test/input/abixy a=pan,sum=0.849416 a=eks,sum=1.751863 a=wye,sum=0.777892 a=zee,sum=1.125680 a=hat,sum=0.031442 mlr put -q @sum[$a] += $nonesuch; end {emitp @sum, "a", "extra" } ./reg_test/input/abixy mlr put -q @sum[$a][$b] += $i; end {emitp @sum } ./reg_test/input/abixy sum:pan:pan=1,sum:pan:wye=10,sum:eks:pan=2,sum:eks:wye=4,sum:eks:zee=7,sum:wye:wye=3,sum:wye:pan=5,sum:zee:pan=6,sum:zee:wye=8,sum:hat:wye=9 mlr put -q @sum[$a][$b] += $x; end {emitp @sum } ./reg_test/input/abixy sum:pan:pan=0.346790,sum:pan:wye=0.502626,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:eks:zee=0.611784,sum:wye:wye=0.204603,sum:wye:pan=0.573289,sum:zee:pan=0.527126,sum:zee:wye=0.598554,sum:hat:wye=0.031442 mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum } ./reg_test/input/abixy mlr put -q @sum[$a][$b] += $i; end {emitp @sum, "a" } ./reg_test/input/abixy a=pan,sum:pan=1,sum:wye=10 a=eks,sum:pan=2,sum:wye=4,sum:zee=7 a=wye,sum:wye=3,sum:pan=5 a=zee,sum:pan=6,sum:wye=8 a=hat,sum:wye=9 mlr put -q @sum[$a][$b] += $x; end {emitp @sum, "a" } ./reg_test/input/abixy a=pan,sum:pan=0.346790,sum:wye=0.502626 a=eks,sum:pan=0.758680,sum:wye=0.381399,sum:zee=0.611784 a=wye,sum:wye=0.204603,sum:pan=0.573289 a=zee,sum:pan=0.527126,sum:wye=0.598554 a=hat,sum:wye=0.031442 mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum, "a" } ./reg_test/input/abixy mlr put -q @sum[$a][$b] += $i; end {emitp @sum, "a", "b" } ./reg_test/input/abixy a=pan,b=pan,sum=1 a=pan,b=wye,sum=10 a=eks,b=pan,sum=2 a=eks,b=wye,sum=4 a=eks,b=zee,sum=7 a=wye,b=wye,sum=3 a=wye,b=pan,sum=5 a=zee,b=pan,sum=6 a=zee,b=wye,sum=8 a=hat,b=wye,sum=9 mlr put -q @sum[$a][$b] += $x; end {emitp @sum, "a", "b" } ./reg_test/input/abixy a=pan,b=pan,sum=0.346790 a=pan,b=wye,sum=0.502626 a=eks,b=pan,sum=0.758680 a=eks,b=wye,sum=0.381399 a=eks,b=zee,sum=0.611784 a=wye,b=wye,sum=0.204603 a=wye,b=pan,sum=0.573289 a=zee,b=pan,sum=0.527126 a=zee,b=wye,sum=0.598554 a=hat,b=wye,sum=0.031442 mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum, "a", "b" } ./reg_test/input/abixy mlr put -q @sum[$a][$b] += $i; end {emitp @sum, "a", "b", "extra" } ./reg_test/input/abixy a=pan,b=pan,sum=1 a=pan,b=wye,sum=10 a=eks,b=pan,sum=2 a=eks,b=wye,sum=4 a=eks,b=zee,sum=7 a=wye,b=wye,sum=3 a=wye,b=pan,sum=5 a=zee,b=pan,sum=6 a=zee,b=wye,sum=8 a=hat,b=wye,sum=9 mlr put -q @sum[$a][$b] += $x; end {emitp @sum, "a", "b", "extra" } ./reg_test/input/abixy a=pan,b=pan,sum=0.346790 a=pan,b=wye,sum=0.502626 a=eks,b=pan,sum=0.758680 a=eks,b=wye,sum=0.381399 a=eks,b=zee,sum=0.611784 a=wye,b=wye,sum=0.204603 a=wye,b=pan,sum=0.573289 a=zee,b=pan,sum=0.527126 a=zee,b=wye,sum=0.598554 a=hat,b=wye,sum=0.031442 mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum, "a", "b", "extra" } ./reg_test/input/abixy mlr --oxtab put -q @sum[$a][$b] += $i; NR == 3 { @x = $x }; NR == 7 { @v = $* }; end {emitp all} ./reg_test/input/abixy-het sum:pan:pan 1 sum:pan:wye 10 sum:eks:pan 2 sum:wye:pan 5 sum:zee:pan 6 sum:zee:wye 8 x 0.204603 v:a eks v:b zee v:iii 7 v:x 0.6117840605678454 v:y 0.1878849191181694 mlr --opprint put -q @v[NR]=$*; end{emitp @v} ./reg_test/input/abixy v:1:a v:1:b v:1:i v:1:x v:1:y v:2:a v:2:b v:2:i v:2:x v:2:y v:3:a v:3:b v:3:i v:3:x v:3:y v:4:a v:4:b v:4:i v:4:x v:4:y v:5:a v:5:b v:5:i v:5:x v:5:y v:6:a v:6:b v:6:i v:6:x v:6:y v:7:a v:7:b v:7:i v:7:x v:7:y v:8:a v:8:b v:8:i v:8:x v:8:y v:9:a v:9:b v:9:i v:9:x v:9:y v:10:a v:10:b v:10:i v:10:x v:10:y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put -q @v[NR]=$*; end{emitp @v,"X"} ./reg_test/input/abixy X v:a v:b v:i v:x v:y 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 4 eks wye 4 0.38139939387114097 0.13418874328430463 5 wye pan 5 0.5732889198020006 0.8636244699032729 6 zee pan 6 0.5271261600918548 0.49322128674835697 7 eks zee 7 0.6117840605678454 0.1878849191181694 8 zee wye 8 0.5985540091064224 0.976181385699006 9 hat wye 9 0.03144187646093577 0.7495507603507059 10 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint put -q @v[NR]=$*; end{emitp @v[1]} ./reg_test/input/abixy v:a v:b v:i v:x v:y pan pan 1 0.3467901443380824 0.7268028627434533 mlr --opprint put -q @v[NR]=$*; end{emitp @v[1],"X"} ./reg_test/input/abixy X v a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 mlr --opprint put -q @v[NR]=$*; end{emitp @v[1],"X","Y"} ./reg_test/input/abixy X v a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1]} ./reg_test/input/abixy v:1:a v:1:b v:1:i v:1:x v:1:y pan pan 1 0.3467901443380824 0.7268028627434533 mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1],"X"} ./reg_test/input/abixy X v:a v:b v:i v:x v:y 1 pan pan 1 0.3467901443380824 0.7268028627434533 mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1],"X","Y"} ./reg_test/input/abixy X Y v 1 a pan 1 b pan 1 i 1 1 x 0.3467901443380824 1 y 0.7268028627434533 mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1][1]} ./reg_test/input/abixy v:a v:b v:i v:x v:y pan pan 1 0.3467901443380824 0.7268028627434533 mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1][1],"X"} ./reg_test/input/abixy X v a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1][1],"X","Y"} ./reg_test/input/abixy X v a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all} ./reg_test/input/abixy-het a=pan b:1=wye c:1:2=0.502626 mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all,"one"} ./reg_test/input/abixy-het a=pan one=1,b=wye one=1,c:2=0.502626 mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all,"one","two"} ./reg_test/input/abixy-het a=pan one=1,b=wye one=1,two=2,c=0.502626 mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all,"one","two","three"} ./reg_test/input/abixy-het a=pan one=1,b=wye one=1,two=2,c=0.502626 mlr --oxtab put --oflatsep @ -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all} ./reg_test/input/abixy-het a pan b@1 wye c@1@2 0.502626 ================================================================ PREFIXED/UNPREFIXED EMIT mlr --oxtab put -q @sum += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide { "sum": 1009.118181 } sum 1009.118181 mlr --oxtab put -q @sum += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide { "sum": 1009.118181 } sum 1009.118181 mlr --oxtab put -q @sum[$a] += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide { "sum": { "cat": 207.843964, "pan": 191.530740, "wye": 188.110135, "dog": 215.541519, "hat": 206.091824 } } sum:cat 207.843964 sum:pan 191.530740 sum:wye 188.110135 sum:dog 215.541519 sum:hat 206.091824 mlr --oxtab put -q @sum[$a] += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide { "sum": { "cat": 207.843964, "pan": 191.530740, "wye": 188.110135, "dog": 215.541519, "hat": 206.091824 } } cat 207.843964 pan 191.530740 wye 188.110135 dog 215.541519 hat 206.091824 mlr --oxtab put -q @sum[$a] += $x; end{dump;emitp @sum, "a"} ./reg_test/input/abixy-wide { "sum": { "cat": 207.843964, "pan": 191.530740, "wye": 188.110135, "dog": 215.541519, "hat": 206.091824 } } a cat sum 207.843964 a pan sum 191.530740 a wye sum 188.110135 a dog sum 215.541519 a hat sum 206.091824 mlr --oxtab put -q @sum[$a] += $x; end{dump;emit @sum, "a"} ./reg_test/input/abixy-wide { "sum": { "cat": 207.843964, "pan": 191.530740, "wye": 188.110135, "dog": 215.541519, "hat": 206.091824 } } a cat sum 207.843964 a pan sum 191.530740 a wye sum 188.110135 a dog sum 215.541519 a hat sum 206.091824 mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": 42.327158, "hat": 43.184410, "dog": 39.241473, "wye": 45.196775, "cat": 37.894148 }, "pan": { "wye": 40.135300, "pan": 36.226334, "hat": 35.115869, "dog": 37.817560, "cat": 42.235677 }, "wye": { "cat": 40.805723, "hat": 41.166697, "dog": 40.619547, "wye": 32.490973, "pan": 33.027196 }, "dog": { "hat": 43.515162, "pan": 45.614011, "dog": 43.545956, "wye": 37.223795, "cat": 45.642595 }, "hat": { "hat": 48.058897, "wye": 34.054270, "pan": 42.538758, "cat": 44.325655, "dog": 37.114244 } } } sum:cat:pan 42.327158 sum:cat:hat 43.184410 sum:cat:dog 39.241473 sum:cat:wye 45.196775 sum:cat:cat 37.894148 sum:pan:wye 40.135300 sum:pan:pan 36.226334 sum:pan:hat 35.115869 sum:pan:dog 37.817560 sum:pan:cat 42.235677 sum:wye:cat 40.805723 sum:wye:hat 41.166697 sum:wye:dog 40.619547 sum:wye:wye 32.490973 sum:wye:pan 33.027196 sum:dog:hat 43.515162 sum:dog:pan 45.614011 sum:dog:dog 43.545956 sum:dog:wye 37.223795 sum:dog:cat 45.642595 sum:hat:hat 48.058897 sum:hat:wye 34.054270 sum:hat:pan 42.538758 sum:hat:cat 44.325655 sum:hat:dog 37.114244 mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": 42.327158, "hat": 43.184410, "dog": 39.241473, "wye": 45.196775, "cat": 37.894148 }, "pan": { "wye": 40.135300, "pan": 36.226334, "hat": 35.115869, "dog": 37.817560, "cat": 42.235677 }, "wye": { "cat": 40.805723, "hat": 41.166697, "dog": 40.619547, "wye": 32.490973, "pan": 33.027196 }, "dog": { "hat": 43.515162, "pan": 45.614011, "dog": 43.545956, "wye": 37.223795, "cat": 45.642595 }, "hat": { "hat": 48.058897, "wye": 34.054270, "pan": 42.538758, "cat": 44.325655, "dog": 37.114244 } } } pan 42.327158 hat 43.184410 dog 39.241473 wye 45.196775 cat 37.894148 wye 40.135300 pan 36.226334 hat 35.115869 dog 37.817560 cat 42.235677 cat 40.805723 hat 41.166697 dog 40.619547 wye 32.490973 pan 33.027196 hat 43.515162 pan 45.614011 dog 43.545956 wye 37.223795 cat 45.642595 hat 48.058897 wye 34.054270 pan 42.538758 cat 44.325655 dog 37.114244 mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emitp @sum, "a"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": 42.327158, "hat": 43.184410, "dog": 39.241473, "wye": 45.196775, "cat": 37.894148 }, "pan": { "wye": 40.135300, "pan": 36.226334, "hat": 35.115869, "dog": 37.817560, "cat": 42.235677 }, "wye": { "cat": 40.805723, "hat": 41.166697, "dog": 40.619547, "wye": 32.490973, "pan": 33.027196 }, "dog": { "hat": 43.515162, "pan": 45.614011, "dog": 43.545956, "wye": 37.223795, "cat": 45.642595 }, "hat": { "hat": 48.058897, "wye": 34.054270, "pan": 42.538758, "cat": 44.325655, "dog": 37.114244 } } } a cat sum:pan 42.327158 sum:hat 43.184410 sum:dog 39.241473 sum:wye 45.196775 sum:cat 37.894148 a pan sum:wye 40.135300 sum:pan 36.226334 sum:hat 35.115869 sum:dog 37.817560 sum:cat 42.235677 a wye sum:cat 40.805723 sum:hat 41.166697 sum:dog 40.619547 sum:wye 32.490973 sum:pan 33.027196 a dog sum:hat 43.515162 sum:pan 45.614011 sum:dog 43.545956 sum:wye 37.223795 sum:cat 45.642595 a hat sum:hat 48.058897 sum:wye 34.054270 sum:pan 42.538758 sum:cat 44.325655 sum:dog 37.114244 mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emit @sum, "a"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": 42.327158, "hat": 43.184410, "dog": 39.241473, "wye": 45.196775, "cat": 37.894148 }, "pan": { "wye": 40.135300, "pan": 36.226334, "hat": 35.115869, "dog": 37.817560, "cat": 42.235677 }, "wye": { "cat": 40.805723, "hat": 41.166697, "dog": 40.619547, "wye": 32.490973, "pan": 33.027196 }, "dog": { "hat": 43.515162, "pan": 45.614011, "dog": 43.545956, "wye": 37.223795, "cat": 45.642595 }, "hat": { "hat": 48.058897, "wye": 34.054270, "pan": 42.538758, "cat": 44.325655, "dog": 37.114244 } } } a cat pan 42.327158 hat 43.184410 dog 39.241473 wye 45.196775 cat 37.894148 a pan wye 40.135300 pan 36.226334 hat 35.115869 dog 37.817560 cat 42.235677 a wye cat 40.805723 hat 41.166697 dog 40.619547 wye 32.490973 pan 33.027196 a dog hat 43.515162 pan 45.614011 dog 43.545956 wye 37.223795 cat 45.642595 a hat hat 48.058897 wye 34.054270 pan 42.538758 cat 44.325655 dog 37.114244 mlr --opprint put -q @sum[$a][$b] += $x; end{dump;emitp @sum, "a", "b"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": 42.327158, "hat": 43.184410, "dog": 39.241473, "wye": 45.196775, "cat": 37.894148 }, "pan": { "wye": 40.135300, "pan": 36.226334, "hat": 35.115869, "dog": 37.817560, "cat": 42.235677 }, "wye": { "cat": 40.805723, "hat": 41.166697, "dog": 40.619547, "wye": 32.490973, "pan": 33.027196 }, "dog": { "hat": 43.515162, "pan": 45.614011, "dog": 43.545956, "wye": 37.223795, "cat": 45.642595 }, "hat": { "hat": 48.058897, "wye": 34.054270, "pan": 42.538758, "cat": 44.325655, "dog": 37.114244 } } } a b sum cat pan 42.327158 cat hat 43.184410 cat dog 39.241473 cat wye 45.196775 cat cat 37.894148 pan wye 40.135300 pan pan 36.226334 pan hat 35.115869 pan dog 37.817560 pan cat 42.235677 wye cat 40.805723 wye hat 41.166697 wye dog 40.619547 wye wye 32.490973 wye pan 33.027196 dog hat 43.515162 dog pan 45.614011 dog dog 43.545956 dog wye 37.223795 dog cat 45.642595 hat hat 48.058897 hat wye 34.054270 hat pan 42.538758 hat cat 44.325655 hat dog 37.114244 mlr --opprint put -q @sum[$a][$b] += $x; end{dump;emit @sum, "a", "b"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": 42.327158, "hat": 43.184410, "dog": 39.241473, "wye": 45.196775, "cat": 37.894148 }, "pan": { "wye": 40.135300, "pan": 36.226334, "hat": 35.115869, "dog": 37.817560, "cat": 42.235677 }, "wye": { "cat": 40.805723, "hat": 41.166697, "dog": 40.619547, "wye": 32.490973, "pan": 33.027196 }, "dog": { "hat": 43.515162, "pan": 45.614011, "dog": 43.545956, "wye": 37.223795, "cat": 45.642595 }, "hat": { "hat": 48.058897, "wye": 34.054270, "pan": 42.538758, "cat": 44.325655, "dog": 37.114244 } } } a b sum cat pan 42.327158 cat hat 43.184410 cat dog 39.241473 cat wye 45.196775 cat cat 37.894148 pan wye 40.135300 pan pan 36.226334 pan hat 35.115869 pan dog 37.817560 pan cat 42.235677 wye cat 40.805723 wye hat 41.166697 wye dog 40.619547 wye wye 32.490973 wye pan 33.027196 dog hat 43.515162 dog pan 45.614011 dog dog 43.545956 dog wye 37.223795 dog cat 45.642595 hat hat 48.058897 hat wye 34.054270 hat pan 42.538758 hat cat 44.325655 hat dog 37.114244 mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } sum:cat:pan:catpan 42.327158 sum:cat:hat:cathat 43.184410 sum:cat:dog:catdog 39.241473 sum:cat:wye:catwye 45.196775 sum:cat:cat:catcat 37.894148 sum:pan:wye:panwye 40.135300 sum:pan:pan:panpan 36.226334 sum:pan:hat:panhat 35.115869 sum:pan:dog:pandog 37.817560 sum:pan:cat:pancat 42.235677 sum:wye:cat:wyecat 40.805723 sum:wye:hat:wyehat 41.166697 sum:wye:dog:wyedog 40.619547 sum:wye:wye:wyewye 32.490973 sum:wye:pan:wyepan 33.027196 sum:dog:hat:doghat 43.515162 sum:dog:pan:dogpan 45.614011 sum:dog:dog:dogdog 43.545956 sum:dog:wye:dogwye 37.223795 sum:dog:cat:dogcat 45.642595 sum:hat:hat:hathat 48.058897 sum:hat:wye:hatwye 34.054270 sum:hat:pan:hatpan 42.538758 sum:hat:cat:hatcat 44.325655 sum:hat:dog:hatdog 37.114244 mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } catpan 42.327158 cathat 43.184410 catdog 39.241473 catwye 45.196775 catcat 37.894148 panwye 40.135300 panpan 36.226334 panhat 35.115869 pandog 37.817560 pancat 42.235677 wyecat 40.805723 wyehat 41.166697 wyedog 40.619547 wyewye 32.490973 wyepan 33.027196 doghat 43.515162 dogpan 45.614011 dogdog 43.545956 dogwye 37.223795 dogcat 45.642595 hathat 48.058897 hatwye 34.054270 hatpan 42.538758 hatcat 44.325655 hatdog 37.114244 mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum, "a"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } a cat sum:pan:catpan 42.327158 sum:hat:cathat 43.184410 sum:dog:catdog 39.241473 sum:wye:catwye 45.196775 sum:cat:catcat 37.894148 a pan sum:wye:panwye 40.135300 sum:pan:panpan 36.226334 sum:hat:panhat 35.115869 sum:dog:pandog 37.817560 sum:cat:pancat 42.235677 a wye sum:cat:wyecat 40.805723 sum:hat:wyehat 41.166697 sum:dog:wyedog 40.619547 sum:wye:wyewye 32.490973 sum:pan:wyepan 33.027196 a dog sum:hat:doghat 43.515162 sum:pan:dogpan 45.614011 sum:dog:dogdog 43.545956 sum:wye:dogwye 37.223795 sum:cat:dogcat 45.642595 a hat sum:hat:hathat 48.058897 sum:wye:hatwye 34.054270 sum:pan:hatpan 42.538758 sum:cat:hatcat 44.325655 sum:dog:hatdog 37.114244 mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum, "a"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } a cat catpan 42.327158 a cat cathat 43.184410 a cat catdog 39.241473 a cat catwye 45.196775 a cat catcat 37.894148 a pan panwye 40.135300 a pan panpan 36.226334 a pan panhat 35.115869 a pan pandog 37.817560 a pan pancat 42.235677 a wye wyecat 40.805723 a wye wyehat 41.166697 a wye wyedog 40.619547 a wye wyewye 32.490973 a wye wyepan 33.027196 a dog doghat 43.515162 a dog dogpan 45.614011 a dog dogdog 43.545956 a dog dogwye 37.223795 a dog dogcat 45.642595 a hat hathat 48.058897 a hat hatwye 34.054270 a hat hatpan 42.538758 a hat hatcat 44.325655 a hat hatdog 37.114244 mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum, "a", "b"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } a b sum:catpan cat pan 42.327158 a b sum:cathat cat hat 43.184410 a b sum:catdog cat dog 39.241473 a b sum:catwye cat wye 45.196775 a b sum:catcat cat cat 37.894148 a b sum:panwye pan wye 40.135300 a b sum:panpan pan pan 36.226334 a b sum:panhat pan hat 35.115869 a b sum:pandog pan dog 37.817560 a b sum:pancat pan cat 42.235677 a b sum:wyecat wye cat 40.805723 a b sum:wyehat wye hat 41.166697 a b sum:wyedog wye dog 40.619547 a b sum:wyewye wye wye 32.490973 a b sum:wyepan wye pan 33.027196 a b sum:doghat dog hat 43.515162 a b sum:dogpan dog pan 45.614011 a b sum:dogdog dog dog 43.545956 a b sum:dogwye dog wye 37.223795 a b sum:dogcat dog cat 45.642595 a b sum:hathat hat hat 48.058897 a b sum:hatwye hat wye 34.054270 a b sum:hatpan hat pan 42.538758 a b sum:hatcat hat cat 44.325655 a b sum:hatdog hat dog 37.114244 mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum, "a", "b"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } a b catpan cat pan 42.327158 a b cathat cat hat 43.184410 a b catdog cat dog 39.241473 a b catwye cat wye 45.196775 a b catcat cat cat 37.894148 a b panwye pan wye 40.135300 a b panpan pan pan 36.226334 a b panhat pan hat 35.115869 a b pandog pan dog 37.817560 a b pancat pan cat 42.235677 a b wyecat wye cat 40.805723 a b wyehat wye hat 41.166697 a b wyedog wye dog 40.619547 a b wyewye wye wye 32.490973 a b wyepan wye pan 33.027196 a b doghat dog hat 43.515162 a b dogpan dog pan 45.614011 a b dogdog dog dog 43.545956 a b dogwye dog wye 37.223795 a b dogcat dog cat 45.642595 a b hathat hat hat 48.058897 a b hatwye hat wye 34.054270 a b hatpan hat pan 42.538758 a b hatcat hat cat 44.325655 a b hatdog hat dog 37.114244 mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum, "a", "b", "ab"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } a b ab sum cat pan catpan 42.327158 cat hat cathat 43.184410 cat dog catdog 39.241473 cat wye catwye 45.196775 cat cat catcat 37.894148 pan wye panwye 40.135300 pan pan panpan 36.226334 pan hat panhat 35.115869 pan dog pandog 37.817560 pan cat pancat 42.235677 wye cat wyecat 40.805723 wye hat wyehat 41.166697 wye dog wyedog 40.619547 wye wye wyewye 32.490973 wye pan wyepan 33.027196 dog hat doghat 43.515162 dog pan dogpan 45.614011 dog dog dogdog 43.545956 dog wye dogwye 37.223795 dog cat dogcat 45.642595 hat hat hathat 48.058897 hat wye hatwye 34.054270 hat pan hatpan 42.538758 hat cat hatcat 44.325655 hat dog hatdog 37.114244 mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum, "a", "b", "ab"} ./reg_test/input/abixy-wide { "sum": { "cat": { "pan": { "catpan": 42.327158 }, "hat": { "cathat": 43.184410 }, "dog": { "catdog": 39.241473 }, "wye": { "catwye": 45.196775 }, "cat": { "catcat": 37.894148 } }, "pan": { "wye": { "panwye": 40.135300 }, "pan": { "panpan": 36.226334 }, "hat": { "panhat": 35.115869 }, "dog": { "pandog": 37.817560 }, "cat": { "pancat": 42.235677 } }, "wye": { "cat": { "wyecat": 40.805723 }, "hat": { "wyehat": 41.166697 }, "dog": { "wyedog": 40.619547 }, "wye": { "wyewye": 32.490973 }, "pan": { "wyepan": 33.027196 } }, "dog": { "hat": { "doghat": 43.515162 }, "pan": { "dogpan": 45.614011 }, "dog": { "dogdog": 43.545956 }, "wye": { "dogwye": 37.223795 }, "cat": { "dogcat": 45.642595 } }, "hat": { "hat": { "hathat": 48.058897 }, "wye": { "hatwye": 34.054270 }, "pan": { "hatpan": 42.538758 }, "cat": { "hatcat": 44.325655 }, "dog": { "hatdog": 37.114244 } } } } a b ab sum cat pan catpan 42.327158 cat hat cathat 43.184410 cat dog catdog 39.241473 cat wye catwye 45.196775 cat cat catcat 37.894148 pan wye panwye 40.135300 pan pan panpan 36.226334 pan hat panhat 35.115869 pan dog pandog 37.817560 pan cat pancat 42.235677 wye cat wyecat 40.805723 wye hat wyehat 41.166697 wye dog wyedog 40.619547 wye wye wyewye 32.490973 wye pan wyepan 33.027196 dog hat doghat 43.515162 dog pan dogpan 45.614011 dog dog dogdog 43.545956 dog wye dogwye 37.223795 dog cat dogcat 45.642595 hat hat hathat 48.058897 hat wye hatwye 34.054270 hat pan hatpan 42.538758 hat cat hatcat 44.325655 hat dog hatdog 37.114244 mlr --oxtab head -n 2 then put -q @v = $*; end{dump;emitp @v} ./reg_test/input/abixy { "v": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } v:a eks v:b pan v:i 2 v:x 0.7586799647899636 v:y 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v = $*; end{dump;emit @v} ./reg_test/input/abixy { "v": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v[NR] = $*; end{dump;emitp @v } ./reg_test/input/abixy { "v": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } v:1:a pan v:1:b pan v:1:i 1 v:1:x 0.3467901443380824 v:1:y 0.7268028627434533 v:2:a eks v:2:b pan v:2:i 2 v:2:x 0.7586799647899636 v:2:y 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v[NR] = $*; end{dump;emit @v } ./reg_test/input/abixy { "v": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR] = $*; end{dump;emitp @v, "I"} ./reg_test/input/abixy { "v": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } I v:a v:b v:i v:x v:y 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR] = $*; end{dump;emit @v, "I"} ./reg_test/input/abixy { "v": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } I a b i x y 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v[NR][NR] = $*; end{dump;emitp @v } ./reg_test/input/abixy { "v": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } }, "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } v:1:1:a pan v:1:1:b pan v:1:1:i 1 v:1:1:x 0.3467901443380824 v:1:1:y 0.7268028627434533 v:2:2:a eks v:2:2:b pan v:2:2:i 2 v:2:2:x 0.7586799647899636 v:2:2:y 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v[NR][NR] = $*; end{dump;emit @v } ./reg_test/input/abixy { "v": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } }, "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emitp @v, "I"} ./reg_test/input/abixy { "v": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } }, "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } I v:1:a v:1:b v:1:i v:1:x v:1:y 1 pan pan 1 0.3467901443380824 0.7268028627434533 I v:2:a v:2:b v:2:i v:2:x v:2:y 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emit @v, "I"} ./reg_test/input/abixy { "v": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } }, "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } I a b i x y 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emitp @v, "I", "J"} ./reg_test/input/abixy { "v": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } }, "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } I J v:a v:b v:i v:x v:y 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emit @v, "I", "J"} ./reg_test/input/abixy { "v": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } }, "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } I J a b i x y 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v } ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } v:1:1:1:a pan v:1:1:1:b pan v:1:1:1:i 1 v:1:1:1:x 0.3467901443380824 v:1:1:1:y 0.7268028627434533 v:2:2:2:a eks v:2:2:2:b pan v:2:2:2:i 2 v:2:2:2:x 0.7586799647899636 v:2:2:2:y 0.5221511083334797 mlr --oxtab head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v } ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v, "I"} ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } I v:1:1:a v:1:1:b v:1:1:i v:1:1:x v:1:1:y 1 pan pan 1 0.3467901443380824 0.7268028627434533 I v:2:2:a v:2:2:b v:2:2:i v:2:2:x v:2:2:y 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v, "I"} ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } I a b i x y 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v, "I", "J"} ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } I J v:1:a v:1:b v:1:i v:1:x v:1:y 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 I J v:2:a v:2:b v:2:i v:2:x v:2:y 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v, "I", "J"} ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } I J a b i x y 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v, "I", "J", "K"} ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } I J K v:a v:b v:i v:x v:y 1 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v, "I", "J", "K"} ./reg_test/input/abixy { "v": { "1": { "1": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } }, "2": { "2": { "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } } } I J K a b i x y 1 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 2 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 ================================================================ LASHED EMITP SINGLES mlr -n put end { @a = 111; emitp @a } a=111 mlr -n put end { @a = 111; emitp (@a) } a=111 mlr -n put end { @a[111] = 222; emitp @a, "s" } s=111,a=222 mlr -n put end { @a[111] = 222; emitp (@a), "s" } s=111,a=222 mlr -n put end { @a[111] = 222; @a[333] = 444; emitp @a, "s" } s=111,a=222 s=333,a=444 mlr -n put end { @a[111] = 222; @a[333] = 444; emitp (@a), "s" } s=111,a=222 s=333,a=444 mlr -n put end { @a[111][222] = 333; emitp @a, "s" } s=111,a:222=333 mlr -n put end { @a[111][222] = 333; emitp (@a), "s" } s=111,a:222=333 mlr -n put end { @a[111][222] = 333; @a[444][555] = 666; emitp @a, "s" } s=111,a:222=333 s=444,a:555=666 mlr -n put end { @a[111][222] = 333; @a[444][555] = 666; emitp (@a), "s" } s=111,a:222=333 s=444,a:555=666 mlr -n put end { @a[111][222] = 333; emitp @a, "s", "t" } s=111,t=222,a=333 mlr -n put end { @a[111][222] = 333; emitp (@a), "s", "t" } s=111,t=222,a=333 mlr -n put end { @a[111][222] = 333; emitp @a[111], "t" } t=222,a=333 mlr -n put end { @a[111][222] = 333; emitp (@a[111]), "t" } t=222,a=333 ================================================================ LASHED EMIT SINGLES mlr -n put end { @a = 111; emit @a } a=111 mlr -n put end { @a = 111; emit (@a) } a=111 mlr -n put end { @a[111] = 222; emit @a, "s" } s=111,a=222 mlr -n put end { @a[111] = 222; emit (@a), "s" } s=111,a=222 mlr -n put end { @a[111] = 222; @a[333] = 444; emit @a, "s" } s=111,a=222 s=333,a=444 mlr -n put end { @a[111] = 222; @a[333] = 444; emit (@a), "s" } s=111,a=222 s=333,a=444 mlr -n put end { @a[111][222] = 333; emit @a, "s" } s=111,222=333 mlr -n put end { @a[111][222] = 333; emit (@a), "s" } s=111,222=333 ================================================================ LASHED EMITP PAIRS mlr -n put end { @a = 111; @b = 222; emitp (@a, @b) } a=111,b=222 mlr -n put end { @a[1] = 111; @b[1] = 222; emitp (@a[1], @b[1]) } a=111,b=222 mlr -n put end { @a[1][2][3] = 4; @b[1][2][3] = 8; emitp (@a, @b), "s", "t", "u" } s=1,t=2,u=3,a=4,b=8 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emitp (@a[1], @b[5]), "t", "u" } t=2,u=3,a=4,b=8 mlr -n put end { @a[1][2][3] = 4; @b[5][6][3] = 8; emitp (@a[1][2], @b[5][6]), "u" } u=3,a=4,b=8 ================================================================ LASHED EMIT PAIRS mlr -n put end { @a = 111; @b = 222; emit (@a, @b) } a=111,b=222 mlr -n put end { @a[1] = 111; @b[1] = 222; emit (@a[1], @b[1]) } a=111,b=222 mlr -n put end { @a[1][2][3] = 4; @b[1][2][3] = 8; emit (@a, @b), "s", "t", "u" } s=1,t=2,u=3,a=4,b=8 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emit (@a[1], @b[5]), "t", "u" } t=2,u=3,a=4,b=8 mlr -n put end { @a[1][2][3] = 4; @b[5][6][3] = 8; emit (@a[1][2], @b[5][6]), "u" } u=3,a=4,b=8 ================================================================ LASHED EMIT WITH VARYING DEPTH mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emit (@a[1], @b[2]), "t" } t=1,a=1,b=7 t=2,a=2,b=8 mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emit (@a, @b), "s", "t" } s=1,t=1,a=1,b=5 s=1,t=2,a=2,b=6 s=2,t=1,a=3,b=7 s=2,t=2,a=4,b=8 mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @a[3] = 10; @a[4] = 11; @a[5][6][7] = 12; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emit (@a, @b), "s", "t" } s=1,t=1,a=1,b=5 s=1,t=2,a=2,b=6 s=2,t=1,a=3,b=7 s=2,t=2,a=4,b=8 s=3,a=10 s=4,a=11 s=5,t=6,7=12 mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @a[3] = 10; @a[4] = 11; @a[5][6][7] = 12; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emit (@b, @a), "s", "t" } s=1,t=1,b=5,a=1 s=1,t=2,b=6,a=2 s=2,t=1,b=7,a=3 s=2,t=2,b=8,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emit (@a[1], @b[3]), "t", "u" } t=2,u=3,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emit (@a[1][2], @b[5][9]), "t", "u" } t=3,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emit (@a[1][2], @b[9][2]), "t", "u" } t=3,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emit (@a[9], @b[5]), "t", "u" } ================================================================ LASHED EMITP WITH VARYING DEPTH mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emitp (@a[1], @b[2]), "t" } t=1,a=1,b=7 t=2,a=2,b=8 mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emitp (@a, @b), "s", "t" } s=1,t=1,a=1,b=5 s=1,t=2,a=2,b=6 s=2,t=1,a=3,b=7 s=2,t=2,a=4,b=8 mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @a[3] = 10; @a[4] = 11; @a[5][6][7] = 12; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emitp (@a, @b), "s", "t" } s=1,t=1,a=1,b=5 s=1,t=2,a=2,b=6 s=2,t=1,a=3,b=7 s=2,t=2,a=4,b=8 s=3,a=10 s=4,a=11 s=5,t=6,a:7=12 mlr -n put end { @a[1][1] = 1; @a[1][2] = 2; @a[2][1] = 3; @a[2][2] = 4; @a[3] = 10; @a[4] = 11; @a[5][6][7] = 12; @b[1][1] = 5; @b[1][2] = 6; @b[2][1] = 7; @b[2][2] = 8; emitp (@b, @a), "s", "t" } s=1,t=1,b=5,a=1 s=1,t=2,b=6,a=2 s=2,t=1,b=7,a=3 s=2,t=2,b=8,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emitp (@a[1], @b[3]), "t", "u" } t=2,u=3,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emitp (@a[1][2], @b[5][9]), "t", "u" } t=3,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emitp (@a[1][2], @b[9][2]), "t", "u" } t=3,a=4 mlr -n put end { @a[1][2][3] = 4; @b[5][2][3] = 8; emitp (@a[9], @b[5]), "t", "u" } ================================================================ CANONICAL LASHED EMIT mlr --from ./reg_test/input/abixy-wide --opprint put -q @count[$a] += 1; @sum[$a] += $x; end { for (a, c in @count) { @mean[a] = @sum[a] / @count[a] } emit (@sum, @count, @mean), "a" } a sum count mean cat 207.843964 413 0.503254 pan 191.530740 384 0.498778 wye 188.110135 370 0.508406 dog 215.541519 424 0.508353 hat 206.091824 409 0.503892 mlr --from ./reg_test/input/abixy-wide --opprint put -q @count[$a][$b] += 1; @sum[$a][$b] += $x; end { for ((a, b), c in @count) { @mean[a][b] = @sum[a][b] / @count[a][b] } emit (@sum, @count, @mean), "a", "b" } a b sum count mean cat pan 42.327158 89 0.475586 cat hat 43.184410 90 0.479827 cat dog 39.241473 78 0.503096 cat wye 45.196775 77 0.586971 cat cat 37.894148 79 0.479673 pan wye 40.135300 78 0.514555 pan pan 36.226334 77 0.470472 pan hat 35.115869 67 0.524117 pan dog 37.817560 73 0.518049 pan cat 42.235677 89 0.474558 wye cat 40.805723 74 0.551429 wye hat 41.166697 87 0.473180 wye dog 40.619547 76 0.534468 wye wye 32.490973 67 0.484940 wye pan 33.027196 66 0.500412 dog hat 43.515162 88 0.494490 dog pan 45.614011 87 0.524299 dog dog 43.545956 87 0.500528 dog wye 37.223795 79 0.471187 dog cat 45.642595 83 0.549911 hat hat 48.058897 88 0.546124 hat wye 34.054270 70 0.486490 hat pan 42.538758 85 0.500456 hat cat 44.325655 88 0.503701 hat dog 37.114244 78 0.475824 ================================================================ MAP-VARIANT EMITS mlr --from ./reg_test/input/abixy-het --opprint put -q o=$a.$b; emit o o panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q o={"ab":$a.$b}; emit o ab panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q @o=$a.$b; emit @o o panpan ekspan wye eks wyepan zeepan ekszee zeewye zeewye panwye mlr --from ./reg_test/input/abixy-het --opprint put -q @o={"ab":$a.$b}; emit @o ab panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q @o=$a.$b; emit @* o panpan ekspan wye eks wyepan zeepan ekszee zeewye zeewye panwye mlr --from ./reg_test/input/abixy-het --opprint put -q @o={"ab":$a.$b}; emit @* ab panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q emit $a.$b mlr DSL: syntax error at "$a" mlr put: syntax error on DSL parse of 'emit $a.$b' mlr --from ./reg_test/input/abixy-het --opprint put -q emit {"ab":$a.$b} ab panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return a.b } o = f($a, $b); emit o o panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return a.b } emit f($a, $b) mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return {"ab": a.b} } o = f($a, $b); emit o ab panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return {"ab": a.b} } emit f($a, $b) ab panpan ekspan wye eks wyepan zeepan ekszee zeewye - panwye ================================================================ MAP-VARIANT LASHED EMITS ---------------------------------------------------------------- scalar lashed emits mlr --from ./reg_test/input/abixy-het --opprint put -q emit ($a . "_" . $b, $x . "_" . $y) mlr DSL: syntax error at "$a" mlr put: syntax error on DSL parse of 'emit ($a . "_" . $b, $x . "_" . $y)' mlr --from ./reg_test/input/abixy-het --opprint put -q o = $a . "_" . $b; p = $x . "_" . $y; emit (o, p) o p pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q @o = $a . "_" . $b; @p = $x . "_" . $y; emit (@o, @p) o p pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return a . "_" . b } o = f($a, $b); p = f($x, $y); emit (o, p) o p pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return a . "_" . b } @o = f($a, $b); @p = f($x, $y); emit (@o, @p) o p pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return a . "_" . b } emit (f($a, $b), f($x, $y)) _ 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 ---------------------------------------------------------------- non-scalar non-keyed lashed emits mlr --from ./reg_test/input/abixy-het --opprint put -q emit ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emit (o, p) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emit (@o, @p) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emit (o, p) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emit (@o, @p) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emit (f($a, $b), f($x, $y)) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 ---------------------------------------------------------------- non-scalar non-keyed lashed emits mlr --from ./reg_test/input/abixy-het --opprint put -q emitp ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}) _:ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emitp (o, p) o:ab p:ab pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emitp (@o, @p) o:ab p:ab pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emitp (o, p) o:ab p:ab pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emitp (@o, @p) o:ab p:ab pan_pan 0.346790_0.726803 eks_pan 0.758680_0.522151 _wye 0.204603_0.338319 eks_ 0.381399_0.134189 wye_pan _0.863624 zee_pan 0.527126_0.493221 eks_zee 0.611784_0.187885 zee_wye 0.598554_ _ 0.031442_0.749551 pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emit (f($a, $b), f($x, $y)) ab 0.346790_0.726803 0.758680_0.522151 0.204603_0.338319 0.381399_0.134189 _0.863624 0.527126_0.493221 0.611784_0.187885 0.598554_ 0.031442_0.749551 0.502626_0.952618 ---------------------------------------------------------------- non-scalar keyed lashed emits mlr --from ./reg_test/input/abixy-het --opprint put -q emit ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}), "ab" ab _ ab 0.346790_0.726803 ab 0.758680_0.522151 ab 0.204603_0.338319 ab 0.381399_0.134189 ab _0.863624 ab 0.527126_0.493221 ab 0.611784_0.187885 ab 0.598554_ ab 0.031442_0.749551 ab 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emit (o, p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emit (@o, @p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emit (o, p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emit (@o, @p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emit (f($a, $b), f($x, $y)), "ab" ab _ ab 0.346790_0.726803 ab 0.758680_0.522151 ab 0.204603_0.338319 ab 0.381399_0.134189 ab _0.863624 ab 0.527126_0.493221 ab 0.611784_0.187885 ab 0.598554_ ab 0.031442_0.749551 ab 0.502626_0.952618 ---------------------------------------------------------------- non-scalar keyed lashed emits mlr --from ./reg_test/input/abixy-het --opprint put -q emitp ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}), "ab" ab _ ab 0.346790_0.726803 ab 0.758680_0.522151 ab 0.204603_0.338319 ab 0.381399_0.134189 ab _0.863624 ab 0.527126_0.493221 ab 0.611784_0.187885 ab 0.598554_ ab 0.031442_0.749551 ab 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emitp (o, p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emitp (@o, @p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emitp (o, p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emitp (@o, @p), "ab" ab o p ab pan_pan 0.346790_0.726803 ab eks_pan 0.758680_0.522151 ab _wye 0.204603_0.338319 ab eks_ 0.381399_0.134189 ab wye_pan _0.863624 ab zee_pan 0.527126_0.493221 ab eks_zee 0.611784_0.187885 ab zee_wye 0.598554_ ab _ 0.031442_0.749551 ab pan_wye 0.502626_0.952618 mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emitp (f($a, $b), f($x, $y)), "ab" ab _ ab 0.346790_0.726803 ab 0.758680_0.522151 ab 0.204603_0.338319 ab 0.381399_0.134189 ab _0.863624 ab 0.527126_0.493221 ab 0.611784_0.187885 ab 0.598554_ ab 0.031442_0.749551 ab 0.502626_0.952618 ================================================================ MAPPER NOTHING mlr cat then nothing mlr cat then nothing ./reg_test/input/abixy mlr tac then nothing ./reg_test/input/abixy mlr cat then nothing ./reg_test/input/abixy ./reg_test/input/abixy mlr cat then nothing then cat ./reg_test/input/abixy ================================================================ IN-PLACE PROCESSING cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr -I --opprint head -n 2 /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 mlr -I --opprint head -n 2 mlr: -I option (in-place operation) requires input files. mlr -I --opprint -n head -n 2 /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 mlr: -I option (in-place operation) requires input files. cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr -I --opprint rename a,AYE,b,BEE /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 AYE BEE i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 AYE BEE i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 ================================================================ MAPPER TEE REDIRECTS mlr --from ./reg_test/input/abixy tee ./output-regtest/tee1/out then nothing cat ./output-regtest/tee1/out a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy tee --no-fflush ./output-regtest/tee1/out then nothing cat ./output-regtest/tee1/out a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy tee -a ./output-regtest/tee1/out then nothing cat ./output-regtest/tee1/out a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy tee -o json ./output-regtest/tee1/out then nothing cat ./output-regtest/tee1/out { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ================================================================ DSL TEE REDIRECTS mlr put -q tee > "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy cat ./output-regtest/tee2/out.eks a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 cat ./output-regtest/tee2/out.hat a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 cat ./output-regtest/tee2/out.pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 cat ./output-regtest/tee2/out.wye a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 cat ./output-regtest/tee2/out.zee a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr put -q --no-fflush tee > "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy cat ./output-regtest/tee2/out.eks a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 cat ./output-regtest/tee2/out.hat a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 cat ./output-regtest/tee2/out.pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 cat ./output-regtest/tee2/out.wye a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 cat ./output-regtest/tee2/out.zee a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr put -q tee >> "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy cat ./output-regtest/tee2/out.eks a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 cat ./output-regtest/tee2/out.hat a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 cat ./output-regtest/tee2/out.pan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 cat ./output-regtest/tee2/out.wye a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 cat ./output-regtest/tee2/out.zee a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 mlr put -q -o json tee > "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy cat ./output-regtest/tee2/out.eks { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } cat ./output-regtest/tee2/out.hat { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } cat ./output-regtest/tee2/out.pan { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } cat ./output-regtest/tee2/out.wye { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } cat ./output-regtest/tee2/out.zee { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } mlr put -q tee | "tr \[a-z\] \[A-Z\]", $* ./reg_test/input/abixy A=PAN,B=PAN,I=1,X=0.3467901443380824,Y=0.7268028627434533 A=EKS,B=PAN,I=2,X=0.7586799647899636,Y=0.5221511083334797 A=WYE,B=WYE,I=3,X=0.20460330576630303,Y=0.33831852551664776 A=EKS,B=WYE,I=4,X=0.38139939387114097,Y=0.13418874328430463 A=WYE,B=PAN,I=5,X=0.5732889198020006,Y=0.8636244699032729 A=ZEE,B=PAN,I=6,X=0.5271261600918548,Y=0.49322128674835697 A=EKS,B=ZEE,I=7,X=0.6117840605678454,Y=0.1878849191181694 A=ZEE,B=WYE,I=8,X=0.5985540091064224,Y=0.976181385699006 A=HAT,B=WYE,I=9,X=0.03144187646093577,Y=0.7495507603507059 A=PAN,B=WYE,I=10,X=0.5026260055412137,Y=0.9526183602969864 mlr put -q -o json tee | "tr \[a-z\] \[A-Z\]", $* ./reg_test/input/abixy { "A": "PAN", "B": "PAN", "I": 1, "X": 0.3467901443380824, "Y": 0.7268028627434533 } { "A": "EKS", "B": "PAN", "I": 2, "X": 0.7586799647899636, "Y": 0.5221511083334797 } { "A": "WYE", "B": "WYE", "I": 3, "X": 0.20460330576630303, "Y": 0.33831852551664776 } { "A": "EKS", "B": "WYE", "I": 4, "X": 0.38139939387114097, "Y": 0.13418874328430463 } { "A": "WYE", "B": "PAN", "I": 5, "X": 0.5732889198020006, "Y": 0.8636244699032729 } { "A": "ZEE", "B": "PAN", "I": 6, "X": 0.5271261600918548, "Y": 0.49322128674835697 } { "A": "EKS", "B": "ZEE", "I": 7, "X": 0.6117840605678454, "Y": 0.1878849191181694 } { "A": "ZEE", "B": "WYE", "I": 8, "X": 0.5985540091064224, "Y": 0.976181385699006 } { "A": "HAT", "B": "WYE", "I": 9, "X": 0.03144187646093577, "Y": 0.7495507603507059 } { "A": "PAN", "B": "WYE", "I": 10, "X": 0.5026260055412137, "Y": 0.9526183602969864 } mlr put -q tee > stdout, $* ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 cat ./output-regtest/tee2/err1 mlr put -q tee > stderr, $* ./reg_test/input/abixy cat ./output-regtest/tee2/err2 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ DSL PRINT REDIRECTS mlr put -q print > "./output-regtest/print1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/print1/out.eks abi:ekspan2 abi:ekswye4 abi:ekszee7 cat ./output-regtest/print1/out.hat abi:hatwye9 cat ./output-regtest/print1/out.pan abi:panpan1 abi:panwye10 cat ./output-regtest/print1/out.wye abi:wyewye3 abi:wyepan5 cat ./output-regtest/print1/out.zee abi:zeepan6 abi:zeewye8 mlr put -q print > "./output-regtest/print1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/print1/out.eks abi:ekspan2 abi:ekswye4 abi:ekszee7 cat ./output-regtest/print1/out.hat abi:hatwye9 cat ./output-regtest/print1/out.pan abi:panpan1 abi:panwye10 cat ./output-regtest/print1/out.wye abi:wyewye3 abi:wyepan5 cat ./output-regtest/print1/out.zee abi:zeepan6 abi:zeewye8 mlr put -q print >> "./output-regtest/print1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/print1/out.eks abi:ekspan2 abi:ekswye4 abi:ekszee7 abi:ekspan2 abi:ekswye4 abi:ekszee7 cat ./output-regtest/print1/out.hat abi:hatwye9 abi:hatwye9 cat ./output-regtest/print1/out.pan abi:panpan1 abi:panwye10 abi:panpan1 abi:panwye10 cat ./output-regtest/print1/out.wye abi:wyewye3 abi:wyepan5 abi:wyewye3 abi:wyepan5 cat ./output-regtest/print1/out.zee abi:zeepan6 abi:zeewye8 abi:zeepan6 abi:zeewye8 mlr put -q print | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i ./reg_test/input/abixy ABI:PANPAN1 ABI:EKSPAN2 ABI:WYEWYE3 ABI:EKSWYE4 ABI:WYEPAN5 ABI:ZEEPAN6 ABI:EKSZEE7 ABI:ZEEWYE8 ABI:HATWYE9 ABI:PANWYE10 mlr put -q print > stdout, "abi:".$a.$b.$i ./reg_test/input/abixy abi:panpan1 abi:ekspan2 abi:wyewye3 abi:ekswye4 abi:wyepan5 abi:zeepan6 abi:ekszee7 abi:zeewye8 abi:hatwye9 abi:panwye10 cat ./output-regtest/print1/err1 mlr put -q print > stderr, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/print1/err2 abi:panpan1 abi:ekspan2 abi:wyewye3 abi:ekswye4 abi:wyepan5 abi:zeepan6 abi:ekszee7 abi:zeewye8 abi:hatwye9 abi:panwye10 ================================================================ DSL PRINTN REDIRECTS mlr put -q printn > "./output-regtest/printn1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/printn1/out.eks abi:ekspan2abi:ekswye4abi:ekszee7 cat ./output-regtest/printn1/out.hat abi:hatwye9 cat ./output-regtest/printn1/out.pan abi:panpan1abi:panwye10 cat ./output-regtest/printn1/out.wye abi:wyewye3abi:wyepan5 cat ./output-regtest/printn1/out.zee abi:zeepan6abi:zeewye8 mlr put -q printn > "./output-regtest/printn1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/printn1/out.eks abi:ekspan2abi:ekswye4abi:ekszee7 cat ./output-regtest/printn1/out.hat abi:hatwye9 cat ./output-regtest/printn1/out.pan abi:panpan1abi:panwye10 cat ./output-regtest/printn1/out.wye abi:wyewye3abi:wyepan5 cat ./output-regtest/printn1/out.zee abi:zeepan6abi:zeewye8 mlr put -q printn >> "./output-regtest/printn1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/printn1/out.eks abi:ekspan2abi:ekswye4abi:ekszee7abi:ekspan2abi:ekswye4abi:ekszee7 cat ./output-regtest/printn1/out.hat abi:hatwye9abi:hatwye9 cat ./output-regtest/printn1/out.pan abi:panpan1abi:panwye10abi:panpan1abi:panwye10 cat ./output-regtest/printn1/out.wye abi:wyewye3abi:wyepan5abi:wyewye3abi:wyepan5 cat ./output-regtest/printn1/out.zee abi:zeepan6abi:zeewye8abi:zeepan6abi:zeewye8 mlr put -q printn | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i ./reg_test/input/abixy ABI:PANPAN1ABI:EKSPAN2ABI:WYEWYE3ABI:EKSWYE4ABI:WYEPAN5ABI:ZEEPAN6ABI:EKSZEE7ABI:ZEEWYE8ABI:HATWYE9ABI:PANWYE10 mlr put -q printn > stdout, "abi:".$a.$b.$i ./reg_test/input/abixy abi:panpan1abi:ekspan2abi:wyewye3abi:ekswye4abi:wyepan5abi:zeepan6abi:ekszee7abi:zeewye8abi:hatwye9abi:panwye10 cat ./output-regtest/printn1/err1 mlr put -q printn > stderr, "abi:".$a.$b.$i ./reg_test/input/abixy cat ./output-regtest/printn1/err2 abi:panpan1abi:ekspan2abi:wyewye3abi:ekswye4abi:wyepan5abi:zeepan6abi:ekszee7abi:zeewye8abi:hatwye9abi:panwye10 ================================================================ DSL DUMP REDIRECTS mlr put -q @v=$*; dump > "./output-regtest/dump1/out.".$a ./reg_test/input/abixy cat ./output-regtest/dump1/out.eks { "v": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } { "v": { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } } { "v": { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } } cat ./output-regtest/dump1/out.hat { "v": { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } } cat ./output-regtest/dump1/out.pan { "v": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } { "v": { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } } cat ./output-regtest/dump1/out.wye { "v": { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } } { "v": { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } } cat ./output-regtest/dump1/out.zee { "v": { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } } { "v": { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } } mlr put -q @v=$*; dump > "./output-regtest/dump1/out.".$a ./reg_test/input/abixy cat ./output-regtest/dump1/out.eks { "v": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } { "v": { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } } { "v": { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } } cat ./output-regtest/dump1/out.hat { "v": { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } } cat ./output-regtest/dump1/out.pan { "v": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } { "v": { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } } cat ./output-regtest/dump1/out.wye { "v": { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } } { "v": { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } } cat ./output-regtest/dump1/out.zee { "v": { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } } { "v": { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } } mlr put -q @v=$*; dump >> "./output-regtest/dump1/out.".$a ./reg_test/input/abixy cat ./output-regtest/dump1/out.eks { "v": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } { "v": { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } } { "v": { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } } { "v": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } { "v": { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } } { "v": { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } } cat ./output-regtest/dump1/out.hat { "v": { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } } { "v": { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } } cat ./output-regtest/dump1/out.pan { "v": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } { "v": { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } } { "v": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } } { "v": { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } } cat ./output-regtest/dump1/out.wye { "v": { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } } { "v": { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } } { "v": { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } } { "v": { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } } cat ./output-regtest/dump1/out.zee { "v": { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } } { "v": { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } } { "v": { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } } { "v": { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } } mlr put -q @v=$*; dump | "tr \[a-z\] \[A-Z\]" ./reg_test/input/abixy { "V": { "A": "PAN", "B": "PAN", "I": 1, "X": 0.3467901443380824, "Y": 0.7268028627434533 } } { "V": { "A": "EKS", "B": "PAN", "I": 2, "X": 0.7586799647899636, "Y": 0.5221511083334797 } } { "V": { "A": "WYE", "B": "WYE", "I": 3, "X": 0.20460330576630303, "Y": 0.33831852551664776 } } { "V": { "A": "EKS", "B": "WYE", "I": 4, "X": 0.38139939387114097, "Y": 0.13418874328430463 } } { "V": { "A": "WYE", "B": "PAN", "I": 5, "X": 0.5732889198020006, "Y": 0.8636244699032729 } } { "V": { "A": "ZEE", "B": "PAN", "I": 6, "X": 0.5271261600918548, "Y": 0.49322128674835697 } } { "V": { "A": "EKS", "B": "ZEE", "I": 7, "X": 0.6117840605678454, "Y": 0.1878849191181694 } } { "V": { "A": "ZEE", "B": "WYE", "I": 8, "X": 0.5985540091064224, "Y": 0.976181385699006 } } { "V": { "A": "HAT", "B": "WYE", "I": 9, "X": 0.03144187646093577, "Y": 0.7495507603507059 } } { "V": { "A": "PAN", "B": "WYE", "I": 10, "X": 0.5026260055412137, "Y": 0.9526183602969864 } } mlr put -q @v[NR] = $*; NR == 2 { dump > stdout } ./reg_test/input/abixy { "v": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } cat ./output-regtest/dump1/err1 mlr put -q @v[NR] = $*; NR == 2 { dump > stderr } ./reg_test/input/abixy cat ./output-regtest/dump1/err2 { "v": { "1": { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, "2": { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } } } ================================================================ DSL EMITF REDIRECTS mlr put -q @a=$a; @b=$b; emitf > "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy cat ./output-regtest/emitf1/out.ekspan a=eks,b=pan cat ./output-regtest/emitf1/out.ekswye a=eks,b=wye cat ./output-regtest/emitf1/out.ekszee a=eks,b=zee cat ./output-regtest/emitf1/out.hatwye a=hat,b=wye cat ./output-regtest/emitf1/out.panpan a=pan,b=pan cat ./output-regtest/emitf1/out.panwye a=pan,b=wye cat ./output-regtest/emitf1/out.wyepan a=wye,b=pan cat ./output-regtest/emitf1/out.wyewye a=wye,b=wye cat ./output-regtest/emitf1/out.zeepan a=zee,b=pan cat ./output-regtest/emitf1/out.zeewye a=zee,b=wye mlr put -q @a=$a; @b=$b; emitf > "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy cat ./output-regtest/emitf1/out.ekspan a=eks,b=pan cat ./output-regtest/emitf1/out.ekswye a=eks,b=wye cat ./output-regtest/emitf1/out.ekszee a=eks,b=zee cat ./output-regtest/emitf1/out.hatwye a=hat,b=wye cat ./output-regtest/emitf1/out.panpan a=pan,b=pan cat ./output-regtest/emitf1/out.panwye a=pan,b=wye cat ./output-regtest/emitf1/out.wyepan a=wye,b=pan cat ./output-regtest/emitf1/out.wyewye a=wye,b=wye cat ./output-regtest/emitf1/out.zeepan a=zee,b=pan cat ./output-regtest/emitf1/out.zeewye a=zee,b=wye mlr put -q @a=$a; @b=$b; emitf >> "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy cat ./output-regtest/emitf1/out.ekspan a=eks,b=pan a=eks,b=pan cat ./output-regtest/emitf1/out.ekswye a=eks,b=wye a=eks,b=wye cat ./output-regtest/emitf1/out.ekszee a=eks,b=zee a=eks,b=zee cat ./output-regtest/emitf1/out.hatwye a=hat,b=wye a=hat,b=wye cat ./output-regtest/emitf1/out.panpan a=pan,b=pan a=pan,b=pan cat ./output-regtest/emitf1/out.panwye a=pan,b=wye a=pan,b=wye cat ./output-regtest/emitf1/out.wyepan a=wye,b=pan a=wye,b=pan cat ./output-regtest/emitf1/out.wyewye a=wye,b=wye a=wye,b=wye cat ./output-regtest/emitf1/out.zeepan a=zee,b=pan a=zee,b=pan cat ./output-regtest/emitf1/out.zeewye a=zee,b=wye a=zee,b=wye mlr put -q -o json @a=$a; @b=$b; emitf > "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy cat ./output-regtest/emitf1/out.ekspan { "a": "eks", "b": "pan" } cat ./output-regtest/emitf1/out.ekswye { "a": "eks", "b": "wye" } cat ./output-regtest/emitf1/out.ekszee { "a": "eks", "b": "zee" } cat ./output-regtest/emitf1/out.hatwye { "a": "hat", "b": "wye" } cat ./output-regtest/emitf1/out.panpan { "a": "pan", "b": "pan" } cat ./output-regtest/emitf1/out.panwye { "a": "pan", "b": "wye" } cat ./output-regtest/emitf1/out.wyepan { "a": "wye", "b": "pan" } cat ./output-regtest/emitf1/out.wyewye { "a": "wye", "b": "wye" } cat ./output-regtest/emitf1/out.zeepan { "a": "zee", "b": "pan" } cat ./output-regtest/emitf1/out.zeewye { "a": "zee", "b": "wye" } mlr put -q @a=$a; @b=$b; emitf | "tr \[a-z\] \[A-Z\]", @a, @b ./reg_test/input/abixy A=PAN,B=PAN A=EKS,B=PAN A=WYE,B=WYE A=EKS,B=WYE A=WYE,B=PAN A=ZEE,B=PAN A=EKS,B=ZEE A=ZEE,B=WYE A=HAT,B=WYE A=PAN,B=WYE mlr put -q @a=$a; @b=$b; emitf > stdout, @a, @b ./reg_test/input/abixy a=pan,b=pan a=eks,b=pan a=wye,b=wye a=eks,b=wye a=wye,b=pan a=zee,b=pan a=eks,b=zee a=zee,b=wye a=hat,b=wye a=pan,b=wye cat ./output-regtest/emitf1/err1 mlr put -q @a=$a; @b=$b; emitf > stderr, @a, @b ./reg_test/input/abixy cat ./output-regtest/emitf1/err2 a=pan,b=pan a=eks,b=pan a=wye,b=wye a=eks,b=wye a=wye,b=pan a=zee,b=pan a=eks,b=zee a=zee,b=wye a=hat,b=wye a=pan,b=wye ================================================================ DSL EMITP REDIRECTS mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emitp1/out.ekspan a:1=pan,a:2=eks cat ./output-regtest/emitp1/out.ekswye a:1=pan,a:2=eks,a:3=wye,a:4=eks cat ./output-regtest/emitp1/out.panpan a:1=pan cat ./output-regtest/emitp1/out.wyewye a:1=pan,a:2=eks,a:3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emitp1/out.ekspan a:1=pan,a:2=eks cat ./output-regtest/emitp1/out.ekswye a:1=pan,a:2=eks,a:3=wye,a:4=eks cat ./output-regtest/emitp1/out.panpan a:1=pan cat ./output-regtest/emitp1/out.wyewye a:1=pan,a:2=eks,a:3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emitp1/out.ekspan a:1=pan,a:2=eks a:1=pan,a:2=eks cat ./output-regtest/emitp1/out.ekswye a:1=pan,a:2=eks,a:3=wye,a:4=eks a:1=pan,a:2=eks,a:3=wye,a:4=eks cat ./output-regtest/emitp1/out.panpan a:1=pan a:1=pan cat ./output-regtest/emitp1/out.wyewye a:1=pan,a:2=eks,a:3=wye a:1=pan,a:2=eks,a:3=wye mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emitp1/out.ekspan { "a": {"1": "pan", "2": "eks" } } cat ./output-regtest/emitp1/out.ekswye { "a": {"1": "pan", "2": "eks", "3": "wye", "4": "eks" } } cat ./output-regtest/emitp1/out.panpan { "a": {"1": "pan" } } cat ./output-regtest/emitp1/out.wyewye { "a": {"1": "pan", "2": "eks", "3": "wye" } } mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a ./reg_test/input/abixy A:1=PAN A:1=PAN,A:2=EKS A:1=PAN,A:2=EKS,A:3=WYE A:1=PAN,A:2=EKS,A:3=WYE,A:4=EKS mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @a ./reg_test/input/abixy a:1=pan a:1=pan,a:2=eks a:1=pan,a:2=eks,a:3=wye a:1=pan,a:2=eks,a:3=wye,a:4=eks cat ./output-regtest/emitp1/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @a ./reg_test/input/abixy cat ./output-regtest/emitp1/err2 a:1=pan a:1=pan,a:2=eks a:1=pan,a:2=eks,a:3=wye a:1=pan,a:2=eks,a:3=wye,a:4=eks mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp2/out.ekspan NR=1,a=pan NR=2,a=eks cat ./output-regtest/emitp2/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emitp2/out.panpan NR=1,a=pan cat ./output-regtest/emitp2/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp2/out.ekspan NR=1,a=pan NR=2,a=eks cat ./output-regtest/emitp2/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emitp2/out.panpan NR=1,a=pan cat ./output-regtest/emitp2/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp2/out.ekspan NR=1,a=pan NR=2,a=eks NR=1,a=pan NR=2,a=eks cat ./output-regtest/emitp2/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emitp2/out.panpan NR=1,a=pan NR=1,a=pan cat ./output-regtest/emitp2/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp2/out.ekspan { "NR": 1, "a": "pan" } { "NR": 2, "a": "eks" } cat ./output-regtest/emitp2/out.ekswye { "NR": 1, "a": "pan" } { "NR": 2, "a": "eks" } { "NR": 3, "a": "wye" } { "NR": 4, "a": "eks" } cat ./output-regtest/emitp2/out.panpan { "NR": 1, "a": "pan" } cat ./output-regtest/emitp2/out.wyewye { "NR": 1, "a": "pan" } { "NR": 2, "a": "eks" } { "NR": 3, "a": "wye" } mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a, "NR" ./reg_test/input/abixy NR=1,A=PAN NR=1,A=PAN NR=2,A=EKS NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=4,A=EKS mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @a, "NR" ./reg_test/input/abixy NR=1,a=pan NR=1,a=pan NR=2,a=eks NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emitp2/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp2/err2 NR=1,a=pan NR=1,a=pan NR=2,a=eks NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emitp3/out.ekspan a:1=pan,b:1=pan,a:2=eks,b:2=pan cat ./output-regtest/emitp3/out.ekswye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye cat ./output-regtest/emitp3/out.panpan a:1=pan,b:1=pan cat ./output-regtest/emitp3/out.wyewye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emitp3/out.ekspan a:1=pan,b:1=pan,a:2=eks,b:2=pan cat ./output-regtest/emitp3/out.ekswye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye cat ./output-regtest/emitp3/out.panpan a:1=pan,b:1=pan cat ./output-regtest/emitp3/out.wyewye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emitp3/out.ekspan a:1=pan,b:1=pan,a:2=eks,b:2=pan a:1=pan,b:1=pan,a:2=eks,b:2=pan cat ./output-regtest/emitp3/out.ekswye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye cat ./output-regtest/emitp3/out.panpan a:1=pan,b:1=pan a:1=pan,b:1=pan cat ./output-regtest/emitp3/out.wyewye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emitp3/out.ekspan { "a": {"1": "pan", "2": "eks" },"b": {"1": "pan", "2": "pan" } } cat ./output-regtest/emitp3/out.ekswye { "a": {"1": "pan", "2": "eks", "3": "wye", "4": "eks" },"b": {"1": "pan", "2": "pan", "3": "wye", "4": "wye" } } cat ./output-regtest/emitp3/out.panpan { "a": {"1": "pan" },"b": {"1": "pan" } } cat ./output-regtest/emitp3/out.wyewye { "a": {"1": "pan", "2": "eks", "3": "wye" },"b": {"1": "pan", "2": "pan", "3": "wye" } } mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b) ./reg_test/input/abixy A:1=PAN,B:1=PAN A:1=PAN,B:1=PAN,A:2=EKS,B:2=PAN A:1=PAN,B:1=PAN,A:2=EKS,B:2=PAN,A:3=WYE,B:3=WYE A:1=PAN,B:1=PAN,A:2=EKS,B:2=PAN,A:3=WYE,B:3=WYE,A:4=EKS,B:4=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b) ./reg_test/input/abixy a:1=pan,b:1=pan a:1=pan,b:1=pan,a:2=eks,b:2=pan a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye cat ./output-regtest/emitp3/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emitp3/err2 a:1=pan,b:1=pan a:1=pan,b:1=pan,a:2=eks,b:2=pan a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emitp4/out.ekspan NR=1,a=pan,b=pan NR=2,a=eks,b=pan cat ./output-regtest/emitp4/out.ekswye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emitp4/out.panpan NR=1,a=pan,b=pan cat ./output-regtest/emitp4/out.wyewye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emitp4/out.ekspan NR=1,a=pan,b=pan NR=2,a=eks,b=pan cat ./output-regtest/emitp4/out.ekswye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emitp4/out.panpan NR=1,a=pan,b=pan cat ./output-regtest/emitp4/out.wyewye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emitp4/out.ekspan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan cat ./output-regtest/emitp4/out.ekswye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emitp4/out.panpan NR=1,a=pan,b=pan NR=1,a=pan,b=pan cat ./output-regtest/emitp4/out.wyewye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emitp4/out.ekspan { "NR": 1, "a": "pan", "b": "pan" } { "NR": 2, "a": "eks", "b": "pan" } cat ./output-regtest/emitp4/out.ekswye { "NR": 1, "a": "pan", "b": "pan" } { "NR": 2, "a": "eks", "b": "pan" } { "NR": 3, "a": "wye", "b": "wye" } { "NR": 4, "a": "eks", "b": "wye" } cat ./output-regtest/emitp4/out.panpan { "NR": 1, "a": "pan", "b": "pan" } cat ./output-regtest/emitp4/out.wyewye { "NR": 1, "a": "pan", "b": "pan" } { "NR": 2, "a": "eks", "b": "pan" } { "NR": 3, "a": "wye", "b": "wye" } mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR" ./reg_test/input/abixy NR=1,A=PAN,B=PAN NR=1,A=PAN,B=PAN NR=2,A=EKS,B=PAN NR=1,A=PAN,B=PAN NR=2,A=EKS,B=PAN NR=3,A=WYE,B=WYE NR=1,A=PAN,B=PAN NR=2,A=EKS,B=PAN NR=3,A=WYE,B=WYE NR=4,A=EKS,B=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b), "NR" ./reg_test/input/abixy NR=1,a=pan,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emitp4/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emitp4/err2 NR=1,a=pan,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp5/out.".$a.$b, @* ./reg_test/input/abixy cat ./output-regtest/emitp5/out.ekspan a:1=pan,a:2=eks b:1=pan,b:2=pan cat ./output-regtest/emitp5/out.ekswye a:1=pan,a:2=eks,a:3=wye,a:4=eks b:1=pan,b:2=pan,b:3=wye,b:4=wye cat ./output-regtest/emitp5/out.panpan a:1=pan b:1=pan cat ./output-regtest/emitp5/out.wyewye a:1=pan,a:2=eks,a:3=wye b:1=pan,b:2=pan,b:3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @* ./reg_test/input/abixy A:1=PAN B:1=PAN A:1=PAN,A:2=EKS B:1=PAN,B:2=PAN A:1=PAN,A:2=EKS,A:3=WYE B:1=PAN,B:2=PAN,B:3=WYE A:1=PAN,A:2=EKS,A:3=WYE,A:4=EKS B:1=PAN,B:2=PAN,B:3=WYE,B:4=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @* ./reg_test/input/abixy a:1=pan b:1=pan a:1=pan,a:2=eks b:1=pan,b:2=pan a:1=pan,a:2=eks,a:3=wye b:1=pan,b:2=pan,b:3=wye a:1=pan,a:2=eks,a:3=wye,a:4=eks b:1=pan,b:2=pan,b:3=wye,b:4=wye cat ./output-regtest/emitp5/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @* ./reg_test/input/abixy cat ./output-regtest/emitp5/err2 a:1=pan b:1=pan a:1=pan,a:2=eks b:1=pan,b:2=pan a:1=pan,a:2=eks,a:3=wye b:1=pan,b:2=pan,b:3=wye a:1=pan,a:2=eks,a:3=wye,a:4=eks b:1=pan,b:2=pan,b:3=wye,b:4=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp6/out.".$a.$b, all ./reg_test/input/abixy cat ./output-regtest/emitp6/out.ekspan a:1=pan,a:2=eks b:1=pan,b:2=pan cat ./output-regtest/emitp6/out.ekswye a:1=pan,a:2=eks,a:3=wye,a:4=eks b:1=pan,b:2=pan,b:3=wye,b:4=wye cat ./output-regtest/emitp6/out.panpan a:1=pan b:1=pan cat ./output-regtest/emitp6/out.wyewye a:1=pan,a:2=eks,a:3=wye b:1=pan,b:2=pan,b:3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all ./reg_test/input/abixy A:1=PAN B:1=PAN A:1=PAN,A:2=EKS B:1=PAN,B:2=PAN A:1=PAN,A:2=EKS,A:3=WYE B:1=PAN,B:2=PAN,B:3=WYE A:1=PAN,A:2=EKS,A:3=WYE,A:4=EKS B:1=PAN,B:2=PAN,B:3=WYE,B:4=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, all ./reg_test/input/abixy a:1=pan b:1=pan a:1=pan,a:2=eks b:1=pan,b:2=pan a:1=pan,a:2=eks,a:3=wye b:1=pan,b:2=pan,b:3=wye a:1=pan,a:2=eks,a:3=wye,a:4=eks b:1=pan,b:2=pan,b:3=wye,b:4=wye cat ./output-regtest/emitp6/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, all ./reg_test/input/abixy cat ./output-regtest/emitp6/err2 a:1=pan b:1=pan a:1=pan,a:2=eks b:1=pan,b:2=pan a:1=pan,a:2=eks,a:3=wye b:1=pan,b:2=pan,b:3=wye a:1=pan,a:2=eks,a:3=wye,a:4=eks b:1=pan,b:2=pan,b:3=wye,b:4=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp7/out.".$a.$b, @*, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp7/out.ekspan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan cat ./output-regtest/emitp7/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emitp7/out.panpan NR=1,a=pan NR=1,b=pan cat ./output-regtest/emitp7/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @*, "NR" ./reg_test/input/abixy NR=1,A=PAN NR=1,B=PAN NR=1,A=PAN NR=2,A=EKS NR=1,B=PAN NR=2,B=PAN NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=4,A=EKS NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=4,B=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @*, "NR" ./reg_test/input/abixy NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emitp7/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @*, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp7/err2 NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp8/out.".$a.$b, all, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp8/out.ekspan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan cat ./output-regtest/emitp8/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emitp8/out.panpan NR=1,a=pan NR=1,b=pan cat ./output-regtest/emitp8/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all, "NR" ./reg_test/input/abixy NR=1,A=PAN NR=1,B=PAN NR=1,A=PAN NR=2,A=EKS NR=1,B=PAN NR=2,B=PAN NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=4,A=EKS NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=4,B=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, all, "NR" ./reg_test/input/abixy NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emitp8/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, all, "NR" ./reg_test/input/abixy cat ./output-regtest/emitp8/err2 NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye ================================================================ DSL EMIT REDIRECTS mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emit1/out.ekspan 1=pan,2=eks cat ./output-regtest/emit1/out.ekswye 1=pan,2=eks,3=wye,4=eks cat ./output-regtest/emit1/out.panpan 1=pan cat ./output-regtest/emit1/out.wyewye 1=pan,2=eks,3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emit1/out.ekspan 1=pan,2=eks cat ./output-regtest/emit1/out.ekswye 1=pan,2=eks,3=wye,4=eks cat ./output-regtest/emit1/out.panpan 1=pan cat ./output-regtest/emit1/out.wyewye 1=pan,2=eks,3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emit1/out.ekspan 1=pan,2=eks 1=pan,2=eks cat ./output-regtest/emit1/out.ekswye 1=pan,2=eks,3=wye,4=eks 1=pan,2=eks,3=wye,4=eks cat ./output-regtest/emit1/out.panpan 1=pan 1=pan cat ./output-regtest/emit1/out.wyewye 1=pan,2=eks,3=wye 1=pan,2=eks,3=wye mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy cat ./output-regtest/emit1/out.ekspan { "1": "pan", "2": "eks" } cat ./output-regtest/emit1/out.ekswye { "1": "pan", "2": "eks", "3": "wye", "4": "eks" } cat ./output-regtest/emit1/out.panpan { "1": "pan" } cat ./output-regtest/emit1/out.wyewye { "1": "pan", "2": "eks", "3": "wye" } mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a ./reg_test/input/abixy 1=PAN 1=PAN,2=EKS 1=PAN,2=EKS,3=WYE 1=PAN,2=EKS,3=WYE,4=EKS mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @a ./reg_test/input/abixy 1=pan 1=pan,2=eks 1=pan,2=eks,3=wye 1=pan,2=eks,3=wye,4=eks cat ./output-regtest/emit1/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @a ./reg_test/input/abixy cat ./output-regtest/emit1/err2 1=pan 1=pan,2=eks 1=pan,2=eks,3=wye 1=pan,2=eks,3=wye,4=eks mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emit2/out.ekspan NR=1,a=pan NR=2,a=eks cat ./output-regtest/emit2/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emit2/out.panpan NR=1,a=pan cat ./output-regtest/emit2/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emit2/out.ekspan NR=1,a=pan NR=2,a=eks cat ./output-regtest/emit2/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emit2/out.panpan NR=1,a=pan cat ./output-regtest/emit2/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emit2/out.ekspan NR=1,a=pan NR=2,a=eks NR=1,a=pan NR=2,a=eks cat ./output-regtest/emit2/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emit2/out.panpan NR=1,a=pan NR=1,a=pan cat ./output-regtest/emit2/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye mlr head -n 4 then put -q -o pprint @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emit2/out.ekspan NR a 1 pan 2 eks cat ./output-regtest/emit2/out.ekswye NR a 1 pan 2 eks 3 wye 4 eks cat ./output-regtest/emit2/out.panpan NR a 1 pan cat ./output-regtest/emit2/out.wyewye NR a 1 pan 2 eks 3 wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a, "NR" ./reg_test/input/abixy NR=1,A=PAN NR=1,A=PAN NR=2,A=EKS NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=4,A=EKS mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @a, "NR" ./reg_test/input/abixy NR=1,a=pan NR=1,a=pan NR=2,a=eks NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks cat ./output-regtest/emit2/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @a, "NR" ./reg_test/input/abixy cat ./output-regtest/emit2/err2 NR=1,a=pan NR=1,a=pan NR=2,a=eks NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emit3/out.ekspan 1=pan,2=pan cat ./output-regtest/emit3/out.ekswye 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit3/out.panpan 1=pan cat ./output-regtest/emit3/out.wyewye 1=pan,2=pan,3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emit3/out.ekspan 1=pan,2=pan cat ./output-regtest/emit3/out.ekswye 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit3/out.panpan 1=pan cat ./output-regtest/emit3/out.wyewye 1=pan,2=pan,3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emit3/out.ekspan 1=pan,2=pan 1=pan,2=pan cat ./output-regtest/emit3/out.ekswye 1=pan,2=pan,3=wye,4=wye 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit3/out.panpan 1=pan 1=pan cat ./output-regtest/emit3/out.wyewye 1=pan,2=pan,3=wye 1=pan,2=pan,3=wye mlr head -n 4 then put -q --oxtab @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emit3/out.ekspan 1 pan 2 pan cat ./output-regtest/emit3/out.ekswye 1 pan 2 pan 3 wye 4 wye cat ./output-regtest/emit3/out.panpan 1 pan cat ./output-regtest/emit3/out.wyewye 1 pan 2 pan 3 wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b) ./reg_test/input/abixy 1=PAN 1=PAN,2=PAN 1=PAN,2=PAN,3=WYE 1=PAN,2=PAN,3=WYE,4=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b) ./reg_test/input/abixy 1=pan 1=pan,2=pan 1=pan,2=pan,3=wye 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit3/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b) ./reg_test/input/abixy cat ./output-regtest/emit3/err2 1=pan 1=pan,2=pan 1=pan,2=pan,3=wye 1=pan,2=pan,3=wye,4=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emit4/out.ekspan NR=1,a=pan,b=pan NR=2,a=eks,b=pan cat ./output-regtest/emit4/out.ekswye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emit4/out.panpan NR=1,a=pan,b=pan cat ./output-regtest/emit4/out.wyewye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emit4/out.ekspan NR=1,a=pan,b=pan NR=2,a=eks,b=pan cat ./output-regtest/emit4/out.ekswye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emit4/out.panpan NR=1,a=pan,b=pan cat ./output-regtest/emit4/out.wyewye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emit4/out.ekspan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan cat ./output-regtest/emit4/out.ekswye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emit4/out.panpan NR=1,a=pan,b=pan NR=1,a=pan,b=pan cat ./output-regtest/emit4/out.wyewye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye mlr head -n 4 then put -q --ojson @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emit4/out.ekspan { "NR": 1, "a": "pan", "b": "pan" } { "NR": 2, "a": "eks", "b": "pan" } cat ./output-regtest/emit4/out.ekswye { "NR": 1, "a": "pan", "b": "pan" } { "NR": 2, "a": "eks", "b": "pan" } { "NR": 3, "a": "wye", "b": "wye" } { "NR": 4, "a": "eks", "b": "wye" } cat ./output-regtest/emit4/out.panpan { "NR": 1, "a": "pan", "b": "pan" } cat ./output-regtest/emit4/out.wyewye { "NR": 1, "a": "pan", "b": "pan" } { "NR": 2, "a": "eks", "b": "pan" } { "NR": 3, "a": "wye", "b": "wye" } mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR" ./reg_test/input/abixy NR=1,A=PAN,B=PAN NR=1,A=PAN,B=PAN NR=2,A=EKS,B=PAN NR=1,A=PAN,B=PAN NR=2,A=EKS,B=PAN NR=3,A=WYE,B=WYE NR=1,A=PAN,B=PAN NR=2,A=EKS,B=PAN NR=3,A=WYE,B=WYE NR=4,A=EKS,B=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b), "NR" ./reg_test/input/abixy NR=1,a=pan,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye cat ./output-regtest/emit4/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b), "NR" ./reg_test/input/abixy cat ./output-regtest/emit4/err2 NR=1,a=pan,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=1,a=pan,b=pan NR=2,a=eks,b=pan NR=3,a=wye,b=wye NR=4,a=eks,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit5/out.".$a.$b, @* ./reg_test/input/abixy cat ./output-regtest/emit5/out.ekspan 1=pan,2=eks 1=pan,2=pan cat ./output-regtest/emit5/out.ekswye 1=pan,2=eks,3=wye,4=eks 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit5/out.panpan 1=pan 1=pan cat ./output-regtest/emit5/out.wyewye 1=pan,2=eks,3=wye 1=pan,2=pan,3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @* ./reg_test/input/abixy 1=PAN 1=PAN 1=PAN,2=EKS 1=PAN,2=PAN 1=PAN,2=EKS,3=WYE 1=PAN,2=PAN,3=WYE 1=PAN,2=EKS,3=WYE,4=EKS 1=PAN,2=PAN,3=WYE,4=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @* ./reg_test/input/abixy 1=pan 1=pan 1=pan,2=eks 1=pan,2=pan 1=pan,2=eks,3=wye 1=pan,2=pan,3=wye 1=pan,2=eks,3=wye,4=eks 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit5/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @* ./reg_test/input/abixy cat ./output-regtest/emit5/err2 1=pan 1=pan 1=pan,2=eks 1=pan,2=pan 1=pan,2=eks,3=wye 1=pan,2=pan,3=wye 1=pan,2=eks,3=wye,4=eks 1=pan,2=pan,3=wye,4=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit6/out.".$a.$b, all ./reg_test/input/abixy cat ./output-regtest/emit6/out.ekspan 1=pan,2=eks 1=pan,2=pan cat ./output-regtest/emit6/out.ekswye 1=pan,2=eks,3=wye,4=eks 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit6/out.panpan 1=pan 1=pan cat ./output-regtest/emit6/out.wyewye 1=pan,2=eks,3=wye 1=pan,2=pan,3=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all ./reg_test/input/abixy 1=PAN 1=PAN 1=PAN,2=EKS 1=PAN,2=PAN 1=PAN,2=EKS,3=WYE 1=PAN,2=PAN,3=WYE 1=PAN,2=EKS,3=WYE,4=EKS 1=PAN,2=PAN,3=WYE,4=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, all ./reg_test/input/abixy 1=pan 1=pan 1=pan,2=eks 1=pan,2=pan 1=pan,2=eks,3=wye 1=pan,2=pan,3=wye 1=pan,2=eks,3=wye,4=eks 1=pan,2=pan,3=wye,4=wye cat ./output-regtest/emit6/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, all ./reg_test/input/abixy cat ./output-regtest/emit6/err2 1=pan 1=pan 1=pan,2=eks 1=pan,2=pan 1=pan,2=eks,3=wye 1=pan,2=pan,3=wye 1=pan,2=eks,3=wye,4=eks 1=pan,2=pan,3=wye,4=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit7/out.".$a.$b, @*, "NR" ./reg_test/input/abixy cat ./output-regtest/emit7/out.ekspan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan cat ./output-regtest/emit7/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emit7/out.panpan NR=1,a=pan NR=1,b=pan cat ./output-regtest/emit7/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @*, "NR" ./reg_test/input/abixy NR=1,A=PAN NR=1,B=PAN NR=1,A=PAN NR=2,A=EKS NR=1,B=PAN NR=2,B=PAN NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=4,A=EKS NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=4,B=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @*, "NR" ./reg_test/input/abixy NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emit7/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @*, "NR" ./reg_test/input/abixy cat ./output-regtest/emit7/err2 NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit8/out.".$a.$b, all, "NR" ./reg_test/input/abixy cat ./output-regtest/emit8/out.ekspan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan cat ./output-regtest/emit8/out.ekswye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emit8/out.panpan NR=1,a=pan NR=1,b=pan cat ./output-regtest/emit8/out.wyewye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all, "NR" ./reg_test/input/abixy NR=1,A=PAN NR=1,B=PAN NR=1,A=PAN NR=2,A=EKS NR=1,B=PAN NR=2,B=PAN NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=1,A=PAN NR=2,A=EKS NR=3,A=WYE NR=4,A=EKS NR=1,B=PAN NR=2,B=PAN NR=3,B=WYE NR=4,B=WYE mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, all, "NR" ./reg_test/input/abixy NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye cat ./output-regtest/emit8/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, all, "NR" ./reg_test/input/abixy cat ./output-regtest/emit8/err2 NR=1,a=pan NR=1,b=pan NR=1,a=pan NR=2,a=eks NR=1,b=pan NR=2,b=pan NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=1,a=pan NR=2,a=eks NR=3,a=wye NR=4,a=eks NR=1,b=pan NR=2,b=pan NR=3,b=wye NR=4,b=wye mlr head -n 4 then put -q emit > "./output-regtest/emit9/out.".$a.$b, $* ./reg_test/input/abixy cat ./output-regtest/emit9/out.ekspan a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 cat ./output-regtest/emit9/out.ekswye a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 cat ./output-regtest/emit9/out.panpan a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 cat ./output-regtest/emit9/out.wyewye a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", $*, "NR" ./reg_test/input/abixy A=PAN,B=PAN,I=1,X=0.3467901443380824,Y=0.7268028627434533 A=EKS,B=PAN,I=2,X=0.7586799647899636,Y=0.5221511083334797 A=WYE,B=WYE,I=3,X=0.20460330576630303,Y=0.33831852551664776 A=EKS,B=WYE,I=4,X=0.38139939387114097,Y=0.13418874328430463 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, $*, "NR" ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 cat ./output-regtest/emit9/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, $*, "NR" ./reg_test/input/abixy cat ./output-regtest/emit9/err2 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 mlr head -n 4 then put -q emit > "./output-regtest/emit10/out.".$a.$b, mapexcept($*, "a", "b") ./reg_test/input/abixy cat ./output-regtest/emit10/out.ekspan i=2,x=0.7586799647899636,y=0.5221511083334797 cat ./output-regtest/emit10/out.ekswye i=4,x=0.38139939387114097,y=0.13418874328430463 cat ./output-regtest/emit10/out.panpan i=1,x=0.3467901443380824,y=0.7268028627434533 cat ./output-regtest/emit10/out.wyewye i=3,x=0.20460330576630303,y=0.33831852551664776 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", mapexcept($*, "a", "b"), "NR" ./reg_test/input/abixy NR=I,_=1 NR=X,_=0.3467901443380824 NR=Y,_=0.7268028627434533 NR=I,_=2 NR=X,_=0.7586799647899636 NR=Y,_=0.5221511083334797 NR=I,_=3 NR=X,_=0.20460330576630303 NR=Y,_=0.33831852551664776 NR=I,_=4 NR=X,_=0.38139939387114097 NR=Y,_=0.13418874328430463 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, mapexcept($*, "a", "b"), "NR" ./reg_test/input/abixy NR=i,_=1 NR=x,_=0.3467901443380824 NR=y,_=0.7268028627434533 NR=i,_=2 NR=x,_=0.7586799647899636 NR=y,_=0.5221511083334797 NR=i,_=3 NR=x,_=0.20460330576630303 NR=y,_=0.33831852551664776 NR=i,_=4 NR=x,_=0.38139939387114097 NR=y,_=0.13418874328430463 cat ./output-regtest/emit10/err1 mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, mapexcept($*, "a", "b"), "NR" ./reg_test/input/abixy cat ./output-regtest/emit10/err2 NR=i,_=1 NR=x,_=0.3467901443380824 NR=y,_=0.7268028627434533 NR=i,_=2 NR=x,_=0.7586799647899636 NR=y,_=0.5221511083334797 NR=i,_=3 NR=x,_=0.20460330576630303 NR=y,_=0.33831852551664776 NR=i,_=4 NR=x,_=0.38139939387114097 NR=y,_=0.13418874328430463 ================================================================ OOSVAR-FROM-SREC ASSIGNMENT mlr put -v @v = $* /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="$*", type=FULL_SREC. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="$*", type=FULL_SREC. mlr put -v @v[1] = $* /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="$*", type=FULL_SREC. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="$*", type=FULL_SREC. mlr put -v @v[$2] = $* /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. text="$*", type=FULL_SREC. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. text="$*", type=FULL_SREC. mlr put -v NR == 3 {@v = $*} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="$*", type=FULL_SREC. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="$*", type=FULL_SREC. mlr put -v NR == 3 {@v[1] = $*} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="$*", type=FULL_SREC. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="$*", type=FULL_SREC. mlr put -v NR == 3 {@v[$2] = $*} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. text="$*", type=FULL_SREC. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. text="$*", type=FULL_SREC. mlr --oxtab put -q @v = $*; end {emitp @v } ./reg_test/input/abixy-het v:a pan v:b wye v:i 10 v:x 0.5026260055412137 v:y 0.9526183602969864 mlr --oxtab put -q @v[$a] = $*; end {emitp @v } ./reg_test/input/abixy-het v:pan:a pan v:pan:b wye v:pan:i 10 v:pan:x 0.5026260055412137 v:pan:y 0.9526183602969864 v:eks:a eks v:eks:b zee v:eks:iii 7 v:eks:x 0.6117840605678454 v:eks:y 0.1878849191181694 v:wye:a wye v:wye:b pan v:wye:i 5 v:wye:xxx 0.5732889198020006 v:wye:y 0.8636244699032729 v:zee:a zee v:zee:b wye v:zee:i 8 v:zee:x 0.5985540091064224 v:zee:yyy 0.976181385699006 mlr --oxtab put -q @v[$a] = $*; end {emitp @v, "a" } ./reg_test/input/abixy-het a pan v:a pan v:b wye v:i 10 v:x 0.5026260055412137 v:y 0.9526183602969864 a eks v:a eks v:b zee v:iii 7 v:x 0.6117840605678454 v:y 0.1878849191181694 a wye v:a wye v:b pan v:i 5 v:xxx 0.5732889198020006 v:y 0.8636244699032729 a zee v:a zee v:b wye v:i 8 v:x 0.5985540091064224 v:yyy 0.976181385699006 mlr --oxtab put -q @v[$a][$b] = $*; end {emitp @v } ./reg_test/input/abixy-het v:pan:pan:a pan v:pan:pan:b pan v:pan:pan:i 1 v:pan:pan:x 0.3467901443380824 v:pan:pan:y 0.7268028627434533 v:pan:wye:a pan v:pan:wye:b wye v:pan:wye:i 10 v:pan:wye:x 0.5026260055412137 v:pan:wye:y 0.9526183602969864 v:eks:pan:a eks v:eks:pan:b pan v:eks:pan:i 2 v:eks:pan:x 0.7586799647899636 v:eks:pan:y 0.5221511083334797 v:eks:zee:a eks v:eks:zee:b zee v:eks:zee:iii 7 v:eks:zee:x 0.6117840605678454 v:eks:zee:y 0.1878849191181694 v:wye:pan:a wye v:wye:pan:b pan v:wye:pan:i 5 v:wye:pan:xxx 0.5732889198020006 v:wye:pan:y 0.8636244699032729 v:zee:pan:a zee v:zee:pan:b pan v:zee:pan:i 6 v:zee:pan:x 0.5271261600918548 v:zee:pan:y 0.49322128674835697 v:zee:wye:a zee v:zee:wye:b wye v:zee:wye:i 8 v:zee:wye:x 0.5985540091064224 v:zee:wye:yyy 0.976181385699006 mlr --oxtab put -q @v[$a][$b] = $*; end {emitp @v, "a" } ./reg_test/input/abixy-het a pan v:pan:a pan v:pan:b pan v:pan:i 1 v:pan:x 0.3467901443380824 v:pan:y 0.7268028627434533 v:wye:a pan v:wye:b wye v:wye:i 10 v:wye:x 0.5026260055412137 v:wye:y 0.9526183602969864 a eks v:pan:a eks v:pan:b pan v:pan:i 2 v:pan:x 0.7586799647899636 v:pan:y 0.5221511083334797 v:zee:a eks v:zee:b zee v:zee:iii 7 v:zee:x 0.6117840605678454 v:zee:y 0.1878849191181694 a wye v:pan:a wye v:pan:b pan v:pan:i 5 v:pan:xxx 0.5732889198020006 v:pan:y 0.8636244699032729 a zee v:pan:a zee v:pan:b pan v:pan:i 6 v:pan:x 0.5271261600918548 v:pan:y 0.49322128674835697 v:wye:a zee v:wye:b wye v:wye:i 8 v:wye:x 0.5985540091064224 v:wye:yyy 0.976181385699006 mlr --oxtab put -q @v[$a][$b] = $*; end {emitp @v, "a", "b"} ./reg_test/input/abixy-het a pan b pan v:a pan v:b pan v:i 1 v:x 0.3467901443380824 v:y 0.7268028627434533 a pan b wye v:a pan v:b wye v:i 10 v:x 0.5026260055412137 v:y 0.9526183602969864 a eks b pan v:a eks v:b pan v:i 2 v:x 0.7586799647899636 v:y 0.5221511083334797 a eks b zee v:a eks v:b zee v:iii 7 v:x 0.6117840605678454 v:y 0.1878849191181694 a wye b pan v:a wye v:b pan v:i 5 v:xxx 0.5732889198020006 v:y 0.8636244699032729 a zee b pan v:a zee v:b pan v:i 6 v:x 0.5271261600918548 v:y 0.49322128674835697 a zee b wye v:a zee v:b wye v:i 8 v:x 0.5985540091064224 v:yyy 0.976181385699006 ================================================================ SREC-FROM-OOSVAR ASSIGNMENT mlr put -v $* = @v /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v $* = @v[1] /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v $* = @v[$2] /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. mlr put -v NR == 3 {$* = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v NR == 3 {$* = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v NR == 3 {$* = @v[$2]} /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=FULL_SREC_ASSIGNMENT: text="$*", type=FULL_SREC. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="2", type=FIELD_NAME. mlr put @v[NR] = $a; NR == 7 { @v = $*} ; $* = @v ./reg_test/input/abixy-het 1=pan 1=pan,2=eks 1=pan,2=eks 1=pan,2=eks,4=eks 1=pan,2=eks,4=eks,5=wye 1=pan,2=eks,4=eks,5=wye,6=zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee,10=pan ================================================================ OOSVAR-FROM-OOSVAR ASSIGNMENT mlr put -v @u = @v /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v @u = @v[1] /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v @u[2] = @v /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v @u[2] = @v[1] /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v begin { @u = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v begin { @u = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v begin { @u[2] = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v begin { @u[2] = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v NR == 3 { @u = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v NR == 3 { @u = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v NR == 3 { @u[2] = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. mlr put -v NR == 3 { @u[2] = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 text="cond", type=CONDITIONAL_BLOCK: text="==", type=OPERATOR: text="NR", type=CONTEXT_VARIABLE. text="3", type=NUMERIC_LITERAL. text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. mlr put -v end { @u = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v end { @u = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v end { @u[2] = @v } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -v end { @u[2] = @v[1] } /dev/null RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. BLOCKED AST: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="u", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="oosvar_keylist", type=OOSVAR_KEYLIST: text="v", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 mlr put -q @s += $i; @t=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": 55, "t": 55 } s=55 t=55 mlr put -q @s[1] += $i; @t=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": 55 }, "t": { "1": 55 } } s:1=55 t:1=55 mlr put -q @s[1] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": 55 }, "t": 55 } s:1=55 t=55 mlr put -q @s[1] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": 55 }, "t": { "3": { "1": 55 } } } s:1=55 t:3:1=55 mlr put -q @s[1] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": 55 }, "t": { "3": 55 } } s:1=55 t:3=55 mlr put -q @s[1][2] += $i; @t=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "1": { "2": 55 } } } s:1:2=55 t:1:2=55 mlr put -q @s[1][2] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "2": 55 } } s:1:2=55 t:2=55 mlr put -q @s[1][2] += $i; @t=@s[1][2]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": 55 } s:1:2=55 t=55 mlr put -q @s[1][2] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "3": { "1": { "2": 55 } } } } s:1:2=55 t:3:1:2=55 mlr put -q @s[1][2] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "3": { "2": 55 } } } s:1:2=55 t:3:2=55 mlr put -q @s[1][2] += $i; @t[3]=@s[1][2]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "3": 55 } } s:1:2=55 t:3=55 mlr put -q @s[1][2] += $i; @t[3][4]=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "3": { "4": { "1": { "2": 55 } } } } } s:1:2=55 t:3:4:1:2=55 mlr put -q @s[1][2] += $i; @t[3][4]=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "3": { "4": { "2": 55 } } } } s:1:2=55 t:3:4:2=55 mlr put -q @s[1][2] += $i; @t[3][4]=@s[1][2]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy { "s": { "1": { "2": 55 } }, "t": { "3": { "4": 55 } } } s:1:2=55 t:3:4=55 mlr --opprint put -q @s[NR][NR] = $i/100; @t[NR*10]=@s; end{emitp@s,"A","B"; emitp @t,"C","D","E"} ./reg_test/input/abixy A B s 1 1 0.010000 2 2 0.020000 3 3 0.030000 4 4 0.040000 5 5 0.050000 6 6 0.060000 7 7 0.070000 8 8 0.080000 9 9 0.090000 10 10 0.100000 C D E t 10 1 1 0.010000 20 1 1 0.010000 20 2 2 0.020000 30 1 1 0.010000 30 2 2 0.020000 30 3 3 0.030000 40 1 1 0.010000 40 2 2 0.020000 40 3 3 0.030000 40 4 4 0.040000 50 1 1 0.010000 50 2 2 0.020000 50 3 3 0.030000 50 4 4 0.040000 50 5 5 0.050000 60 1 1 0.010000 60 2 2 0.020000 60 3 3 0.030000 60 4 4 0.040000 60 5 5 0.050000 60 6 6 0.060000 70 1 1 0.010000 70 2 2 0.020000 70 3 3 0.030000 70 4 4 0.040000 70 5 5 0.050000 70 6 6 0.060000 70 7 7 0.070000 80 1 1 0.010000 80 2 2 0.020000 80 3 3 0.030000 80 4 4 0.040000 80 5 5 0.050000 80 6 6 0.060000 80 7 7 0.070000 80 8 8 0.080000 90 1 1 0.010000 90 2 2 0.020000 90 3 3 0.030000 90 4 4 0.040000 90 5 5 0.050000 90 6 6 0.060000 90 7 7 0.070000 90 8 8 0.080000 90 9 9 0.090000 100 1 1 0.010000 100 2 2 0.020000 100 3 3 0.030000 100 4 4 0.040000 100 5 5 0.050000 100 6 6 0.060000 100 7 7 0.070000 100 8 8 0.080000 100 9 9 0.090000 100 10 10 0.100000 ================================================================ CHAINING mlr cat then cat ./reg_test/input/short a=1 b=2 c=3 mlr cat then tac ./reg_test/input/short c=3 b=2 a=1 mlr tac then cat ./reg_test/input/short c=3 b=2 a=1 mlr tac then tac ./reg_test/input/short a=1 b=2 c=3 mlr cat then cat then cat ./reg_test/input/short a=1 b=2 c=3 mlr cat then cat then tac ./reg_test/input/short c=3 b=2 a=1 mlr cat then tac then cat ./reg_test/input/short c=3 b=2 a=1 mlr cat then tac then tac ./reg_test/input/short a=1 b=2 c=3 mlr tac then cat then cat ./reg_test/input/short c=3 b=2 a=1 mlr tac then cat then tac ./reg_test/input/short a=1 b=2 c=3 mlr tac then tac then cat ./reg_test/input/short a=1 b=2 c=3 mlr tac then tac then tac ./reg_test/input/short c=3 b=2 a=1 ================================================================ NUMBER FORMATTING mlr --opprint stats1 -a sum -f x ./reg_test/input/ofmt.dat x_sum 6 mlr --ofmt %.3lf --opprint stats1 -a sum -f x ./reg_test/input/ofmt.dat x_sum 6 mlr --opprint --ofmt %.3lf stats1 -a sum -f x ./reg_test/input/ofmt.dat x_sum 6 ================================================================ IMPLICIT-HEADER-CSV INPUT mlr --irs crlf --icsvlite --ifs , --opprint cut -x -f b/ ./reg_test/input/multi-sep.csv-crlf a/ i/ x/ y/ wye/ 0/ 0.641593543645736508/ 0.262688053894177098 eks/ 1/ 0.827614412562742041/ 0.715431942006308552 zee/ 2/ 0.923068348748175560/ 0.009737410587136359 zee/ 3/ 0.000047786161325772/ 0.803142013402256216 zee/ 4/ 0.676537984365847889/ 0.573903236805416328 mlr --irs crlf --implicit-csv-header --icsvlite --ifs , --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf 1 3 4 5 a/ i/ x/ y/ wye/ 0/ 0.641593543645736508/ 0.262688053894177098 eks/ 1/ 0.827614412562742041/ 0.715431942006308552 zee/ 2/ 0.923068348748175560/ 0.009737410587136359 zee/ 3/ 0.000047786161325772/ 0.803142013402256216 zee/ 4/ 0.676537984365847889/ 0.573903236805416328 mlr --irs crlf --icsvlite --ifs /, --opprint cut -x -f b ./reg_test/input/multi-sep.csv-crlf a i x y/ wye 0 0.641593543645736508 0.262688053894177098 eks 1 0.827614412562742041 0.715431942006308552 zee 2 0.923068348748175560 0.009737410587136359 zee 3 0.000047786161325772 0.803142013402256216 zee 4 0.676537984365847889 0.573903236805416328 mlr --irs crlf --implicit-csv-header --icsvlite --ifs /, --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf 1 3 4 5 a i x y/ wye 0 0.641593543645736508 0.262688053894177098 eks 1 0.827614412562742041 0.715431942006308552 zee 2 0.923068348748175560 0.009737410587136359 zee 3 0.000047786161325772 0.803142013402256216 zee 4 0.676537984365847889 0.573903236805416328 mlr --icsv --ifs , --opprint cut -x -f b/ ./reg_test/input/multi-sep.csv-crlf a/ i/ x/ y/ wye/ 0/ 0.641593543645736508/ 0.262688053894177098 eks/ 1/ 0.827614412562742041/ 0.715431942006308552 zee/ 2/ 0.923068348748175560/ 0.009737410587136359 zee/ 3/ 0.000047786161325772/ 0.803142013402256216 zee/ 4/ 0.676537984365847889/ 0.573903236805416328 mlr --implicit-csv-header --icsv --ifs , --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf 1 3 4 5 a/ i/ x/ y/ wye/ 0/ 0.641593543645736508/ 0.262688053894177098 eks/ 1/ 0.827614412562742041/ 0.715431942006308552 zee/ 2/ 0.923068348748175560/ 0.009737410587136359 zee/ 3/ 0.000047786161325772/ 0.803142013402256216 zee/ 4/ 0.676537984365847889/ 0.573903236805416328 mlr --icsv --ifs /, --opprint cut -x -f b ./reg_test/input/multi-sep.csv-crlf a i x y/ wye 0 0.641593543645736508 0.262688053894177098 eks 1 0.827614412562742041 0.715431942006308552 zee 2 0.923068348748175560 0.009737410587136359 zee 3 0.000047786161325772 0.803142013402256216 zee 4 0.676537984365847889 0.573903236805416328 mlr --implicit-csv-header --icsv --ifs /, --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf 1 3 4 5 a i x y/ wye 0 0.641593543645736508 0.262688053894177098 eks 1 0.827614412562742041 0.715431942006308552 zee 2 0.923068348748175560 0.009737410587136359 zee 3 0.000047786161325772 0.803142013402256216 zee 4 0.676537984365847889 0.573903236805416328 mlr --csv -N reorder -f 1,3,2,5,4 ./reg_test/input/multi-sep.csv-crlf a/,i/,b/,y/,x/ wye/,0/,eks/,0.262688053894177098,0.641593543645736508/ eks/,1/,zee/,0.715431942006308552,0.827614412562742041/ zee/,2/,zee/,0.009737410587136359,0.923068348748175560/ zee/,3/,pan/,0.803142013402256216,0.000047786161325772/ zee/,4/,hat/,0.573903236805416328,0.676537984365847889/ mlr --csv -N reorder -f 5,4,3,2,1 ./reg_test/input/multi-sep.csv-crlf y/,x/,i/,b/,a/ 0.262688053894177098,0.641593543645736508/,0/,eks/,wye/ 0.715431942006308552,0.827614412562742041/,1/,zee/,eks/ 0.009737410587136359,0.923068348748175560/,2/,zee/,zee/ 0.803142013402256216,0.000047786161325772/,3/,pan/,zee/ 0.573903236805416328,0.676537984365847889/,4/,hat/,zee/ ================================================================ HET-CSV INPUT mlr --icsvlite --odkvp cat ./reg_test/input/a.csv a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp cat ./reg_test/input/b.csv d=5,e=6,f=7 mlr --icsvlite --odkvp cat ./reg_test/input/c.csv a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 mlr --icsvlite --odkvp cat ./reg_test/input/d.csv h=3,i=4,j=5 m=8,n=9,o=10 mlr --icsvlite --odkvp cat ./reg_test/input/e.csv a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp cat ./reg_test/input/f.csv mlr --icsvlite --odkvp cat ./reg_test/input/g.csv mlr --icsvlite --odkvp cat ./reg_test/input/a.csv ./reg_test/input/a.csv a=1,b=2,c=3 a=4,b=5,c=6 a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp cat ./reg_test/input/b.csv ./reg_test/input/b.csv d=5,e=6,f=7 d=5,e=6,f=7 mlr --icsvlite --odkvp cat ./reg_test/input/c.csv ./reg_test/input/c.csv a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 mlr --icsvlite --odkvp cat ./reg_test/input/d.csv ./reg_test/input/d.csv h=3,i=4,j=5 m=8,n=9,o=10 h=3,i=4,j=5 m=8,n=9,o=10 mlr --icsvlite --odkvp cat ./reg_test/input/e.csv ./reg_test/input/e.csv a=1,b=2,c=3 a=4,b=5,c=6 a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp cat ./reg_test/input/f.csv ./reg_test/input/f.csv mlr --icsvlite --odkvp cat ./reg_test/input/g.csv ./reg_test/input/g.csv mlr --icsvlite --odkvp cat ./reg_test/input/a.csv ./reg_test/input/b.csv a=1,b=2,c=3 a=4,b=5,c=6 d=5,e=6,f=7 mlr --icsvlite --odkvp cat ./reg_test/input/b.csv ./reg_test/input/c.csv d=5,e=6,f=7 a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 mlr --icsvlite --odkvp cat ./reg_test/input/c.csv ./reg_test/input/d.csv a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 h=3,i=4,j=5 m=8,n=9,o=10 mlr --icsvlite --odkvp cat ./reg_test/input/d.csv ./reg_test/input/e.csv h=3,i=4,j=5 m=8,n=9,o=10 a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp cat ./reg_test/input/e.csv ./reg_test/input/f.csv a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp cat ./reg_test/input/f.csv ./reg_test/input/g.csv mlr --icsvlite --odkvp cat ./reg_test/input/a.csv ./reg_test/input/b.csv ./reg_test/input/c.csv ./reg_test/input/d.csv ./reg_test/input/e.csv ./reg_test/input/f.csv ./reg_test/input/g.csv a=1,b=2,c=3 a=4,b=5,c=6 d=5,e=6,f=7 a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 h=3,i=4,j=5 m=8,n=9,o=10 a=1,b=2,c=3 a=4,b=5,c=6 mlr --icsvlite --odkvp tac ./reg_test/input/het.csv resource=/some/other/path,loadsec=0.97,ok=false record_count=150,resource=/path/to/second/file resource=/path/to/second/file,loadsec=0.32,ok=true record_count=100,resource=/path/to/file resource=/path/to/file,loadsec=0.45,ok=true mlr --headerless-csv-output --csvlite tac ./reg_test/input/a.csv 4,5,6 1,2,3 mlr --headerless-csv-output --csvlite tac ./reg_test/input/c.csv 7,8,9 4,5,6 1,2,3 mlr --headerless-csv-output --csvlite tac ./reg_test/input/a.csv ./reg_test/input/c.csv 7,8,9 4,5,6 1,2,3 4,5,6 1,2,3 mlr --headerless-csv-output --csvlite tac ./reg_test/input/het.csv /some/other/path,0.97,false 150,/path/to/second/file /path/to/second/file,0.32,true 100,/path/to/file /path/to/file,0.45,true mlr --headerless-csv-output --csvlite group-like ./reg_test/input/het.csv /path/to/file,0.45,true /path/to/second/file,0.32,true /some/other/path,0.97,false 100,/path/to/file 150,/path/to/second/file ================================================================ HET-PPRINT INPUT mlr --ipprint --odkvp cat ./reg_test/input/a.pprint a=1,b=2,c=3 a=4,b=5,c=6 mlr --ipprint --odkvp cat ./reg_test/input/b.pprint d=5,e=6,f=7 mlr --ipprint --odkvp cat ./reg_test/input/c.pprint a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 mlr --ipprint --odkvp cat ./reg_test/input/d.pprint h=3,i=4,j=5 m=8,n=9,o=10 mlr --ipprint --odkvp cat ./reg_test/input/e.pprint a=1,b=2,c=3 a=4,b=5,c=6 mlr --ipprint --odkvp cat ./reg_test/input/f.pprint mlr --ipprint --odkvp cat ./reg_test/input/g.pprint mlr --ipprint --odkvp cat ./reg_test/input/a.pprint ./reg_test/input/a.pprint a=1,b=2,c=3 a=4,b=5,c=6 a=1,b=2,c=3 a=4,b=5,c=6 mlr --ipprint --odkvp cat ./reg_test/input/b.pprint ./reg_test/input/b.pprint d=5,e=6,f=7 d=5,e=6,f=7 mlr --ipprint --odkvp cat ./reg_test/input/c.pprint ./reg_test/input/c.pprint a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 mlr --ipprint --odkvp cat ./reg_test/input/d.pprint ./reg_test/input/d.pprint h=3,i=4,j=5 m=8,n=9,o=10 h=3,i=4,j=5 m=8,n=9,o=10 mlr --ipprint --odkvp cat ./reg_test/input/e.pprint ./reg_test/input/e.pprint a=1,b=2,c=3 a=4,b=5,c=6 a=1,b=2,c=3 a=4,b=5,c=6 mlr --ipprint --odkvp cat ./reg_test/input/f.pprint ./reg_test/input/f.pprint mlr --ipprint --odkvp cat ./reg_test/input/g.pprint ./reg_test/input/g.pprint mlr --ipprint --odkvp cat ./reg_test/input/a.pprint ./reg_test/input/b.pprint a=1,b=2,c=3 a=4,b=5,c=6 d=5,e=6,f=7 mlr --ipprint --odkvp cat ./reg_test/input/b.pprint ./reg_test/input/c.pprint d=5,e=6,f=7 a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 mlr --ipprint --odkvp cat ./reg_test/input/c.pprint ./reg_test/input/d.pprint a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 h=3,i=4,j=5 m=8,n=9,o=10 mlr --ipprint --odkvp cat ./reg_test/input/d.pprint ./reg_test/input/e.pprint h=3,i=4,j=5 m=8,n=9,o=10 a=1,b=2,c=3 a=4,b=5,c=6 mlr --ipprint --odkvp cat ./reg_test/input/e.pprint ./reg_test/input/f.pprint a=1,b=2,c=3 a=4,b=5,c=6 mlr --ipprint --odkvp cat ./reg_test/input/f.pprint ./reg_test/input/g.pprint mlr --ipprint --odkvp cat ./reg_test/input/a.pprint ./reg_test/input/b.pprint ./reg_test/input/c.pprint ./reg_test/input/d.pprint ./reg_test/input/e.pprint ./reg_test/input/f.pprint ./reg_test/input/g.pprint a=1,b=2,c=3 a=4,b=5,c=6 d=5,e=6,f=7 a=1,b=2,c=3 a=4,b=5,c=6 a=7,b=8,c=9 h=3,i=4,j=5 m=8,n=9,o=10 a=1,b=2,c=3 a=4,b=5,c=6 ================================================================ NULL-FIELD INPUT mlr --icsvlite --odkvp cat ./reg_test/input/null-fields.csv a=1,b=2,c=3,d=4,e=5 a=6,b=,c=,d=,e=10 a=,b=,c=,d=11,e=12 a=13,b=14,c=,d=,e= a=,b=,c=,d=,e= mlr --inidx --ifs comma --odkvp cat ./reg_test/input/null-fields.nidx 1=a,2=b,3=c,4=d,5=e 1=f,2=,3=,4=,5=g 1=,2=,3=,4=h,5=i 1=j,2=k,3=,4=,5= 1=,2=,3=,4=,5= mlr --idkvp --oxtab cat ./reg_test/input/missings.dkvp a 1 b 2 c 3 d 4 e 5 f 6 1 a b x 4 c 3 5 d 6 e 7 f 1 a b x 4 c 3 5 d 6 e f 6 mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x ./reg_test/input/nullvals.dkvp x_sum 9 x_min 1 x_max 5 x_antimode 1 x_mode 1 mlr --oxtab stats1 -a sum,min,max,antimode,mode -f y ./reg_test/input/nullvals.dkvp y_sum 12 y_min 2 y_max 6 y_antimode 2 y_mode 2 mlr --oxtab stats1 -a sum,min,max,antimode,mode -f z ./reg_test/input/nullvals.dkvp z_sum 0 z_min z_max z_antimode z_mode mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x,y,z ./reg_test/input/nullvals.dkvp x_sum 9 x_min 1 x_max 5 x_antimode 1 x_mode 1 y_sum 12 y_min 2 y_max 6 y_antimode 2 y_mode 2 z_sum 0 z_min z_max z_antimode z_mode mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x -g a ./reg_test/input/nullvals.dkvp a b x_sum 9 x_min 1 x_max 5 x_antimode 1 x_mode 1 mlr --oxtab stats1 -a sum,min,max,antimode,mode -f y -g a ./reg_test/input/nullvals.dkvp a b y_sum 12 y_min 2 y_max 6 y_antimode 2 y_mode 2 mlr --oxtab stats1 -a sum,min,max,antimode,mode -f z -g a ./reg_test/input/nullvals.dkvp a b z_sum 0 z_min z_max z_antimode z_mode mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x,y,z -g a ./reg_test/input/nullvals.dkvp a b x_sum 9 x_min 1 x_max 5 x_antimode 1 x_mode 1 y_sum 12 y_min 2 y_max 6 y_antimode 2 y_mode 2 z_sum 0 z_min z_max z_antimode z_mode mlr --opprint merge-fields -a sum,min,max,antimode,mode -f x,y,z -o xyz ./reg_test/input/nullvals.dkvp a xyz_sum xyz_min xyz_max xyz_antimode xyz_mode b 3 1 2 1 1 b 7 3 4 3 3 b 5 5 5 5 5 b 6 6 6 6 6 b 0 - - - - mlr --opprint merge-fields -a sum,min,max,antimode,mode -r x,y,z -o xyz ./reg_test/input/nullvals.dkvp a xyz_sum xyz_min xyz_max xyz_antimode xyz_mode b 3 1 2 1 1 b 7 3 4 3 3 b 5 5 5 5 5 b 6 6 6 6 6 b 0 - - - - mlr --opprint merge-fields -a sum,min,max,antimode,mode -c x,y,z ./reg_test/input/nullvals.dkvp a _sum _min _max _antimode _mode b 3 1 2 1 1 b 7 3 4 3 3 b 5 5 5 5 5 b 6 6 6 6 6 b 0 - - - - mlr --oxtab stats2 -a cov -f x,y ./reg_test/input/nullvals.dkvp x_y_cov 2.000000 mlr --oxtab stats2 -a cov -f x,z ./reg_test/input/nullvals.dkvp mlr --oxtab stats2 -a cov -f y,z ./reg_test/input/nullvals.dkvp mlr --oxtab stats2 -a cov -f x,y -g a ./reg_test/input/nullvals.dkvp a b x_y_cov 2.000000 mlr --oxtab stats2 -a cov -f x,z -g a ./reg_test/input/nullvals.dkvp a b mlr --oxtab stats2 -a cov -f y,z -g a ./reg_test/input/nullvals.dkvp a b mlr --opprint top -n 5 -f x ./reg_test/input/nullvals.dkvp top_idx x_top 1 5 2 3 3 1 4 - 5 - mlr --opprint top -n 5 -f y ./reg_test/input/nullvals.dkvp top_idx y_top 1 6 2 4 3 2 4 - 5 - mlr --opprint top -n 5 -f z ./reg_test/input/nullvals.dkvp top_idx z_top 1 - 2 - 3 - 4 - 5 - mlr --opprint top -n 5 -f x,y,z ./reg_test/input/nullvals.dkvp top_idx x_top y_top z_top 1 5 6 - 2 3 4 - 3 1 2 - 4 - - - 5 - - - mlr --opprint top -n 5 -f x -g a ./reg_test/input/nullvals.dkvp a top_idx x_top b 1 5 b 2 3 b 3 1 b 4 - b 5 - mlr --opprint top -n 5 -f y -g a ./reg_test/input/nullvals.dkvp a top_idx y_top b 1 6 b 2 4 b 3 2 b 4 - b 5 - mlr --opprint top -n 5 -f z -g a ./reg_test/input/nullvals.dkvp a top_idx z_top b 1 - b 2 - b 3 - b 4 - b 5 - mlr --opprint top -n 5 -f x,y,z -g a ./reg_test/input/nullvals.dkvp a top_idx x_top y_top z_top b 1 5 6 - b 2 3 4 - b 3 1 2 - b 4 - - - b 5 - - - mlr --opprint top -a -n 5 -f x ./reg_test/input/nullvals.dkvp a x y z b 5 - - b 3 4 - b 1 2 - mlr --opprint top -a -n 5 -f y ./reg_test/input/nullvals.dkvp a x y z b - 6 - b 3 4 - b 1 2 - mlr --opprint top -a -n 5 -f z ./reg_test/input/nullvals.dkvp mlr --opprint top -a -n 5 -f x -g a ./reg_test/input/nullvals.dkvp a x y z b 5 - - b 3 4 - b 1 2 - mlr --opprint top -a -n 5 -f y -g a ./reg_test/input/nullvals.dkvp a x y z b - 6 - b 3 4 - b 1 2 - mlr --opprint top -a -n 5 -f z -g a ./reg_test/input/nullvals.dkvp mlr --opprint top -n 5 -f x -o foo ./reg_test/input/nullvals.dkvp foo x_top 1 5 2 3 3 1 4 - 5 - mlr --opprint top -n 5 -f x -g a -o foo ./reg_test/input/nullvals.dkvp a foo x_top b 1 5 b 2 3 b 3 1 b 4 - b 5 - mlr --opprint top -a -n 5 -f x -o foo ./reg_test/input/nullvals.dkvp a x y z b 5 - - b 3 4 - b 1 2 - mlr --opprint top -a -n 5 -f z -o foo -g a ./reg_test/input/nullvals.dkvp mlr --opprint step -a counter,rsum -f x ./reg_test/input/nullvals.dkvp a x y z x_counter x_rsum b 1 2 - 1 1 b 3 4 - 2 4 b 5 - - 3 9 b - 6 - - - b - - - - - mlr --opprint step -a counter,rsum -f y ./reg_test/input/nullvals.dkvp a x y z y_counter y_rsum b 1 2 - 1 2 b 3 4 - 2 6 b 5 - - - - b - 6 - 3 12 b - - - - - mlr --opprint step -a counter,rsum -f z ./reg_test/input/nullvals.dkvp a x y z z_counter z_rsum b 1 2 - - - b 3 4 - - - b 5 - - - - b - 6 - - - b - - - - - mlr --opprint step -a counter,rsum -f x,y,z ./reg_test/input/nullvals.dkvp a x y z x_counter x_rsum y_counter y_rsum z_counter z_rsum b 1 2 - 1 1 1 2 - - b 3 4 - 2 4 2 6 - - b 5 - - 3 9 - - - - b - 6 - - - 3 12 - - b - - - - - - - - - mlr --opprint step -a counter,rsum -f x -g a ./reg_test/input/nullvals.dkvp a x y z x_counter x_rsum b 1 2 - 1 1 b 3 4 - 2 4 b 5 - - 3 9 b - 6 - - - b - - - - - mlr --opprint step -a counter,rsum -f y -g a ./reg_test/input/nullvals.dkvp a x y z y_counter y_rsum b 1 2 - 1 2 b 3 4 - 2 6 b 5 - - - - b - 6 - 3 12 b - - - - - mlr --opprint step -a counter,rsum -f z -g a ./reg_test/input/nullvals.dkvp a x y z z_counter z_rsum b 1 2 - - - b 3 4 - - - b 5 - - - - b - 6 - - - b - - - - - mlr --opprint step -a counter,rsum -f x,y,z -g a ./reg_test/input/nullvals.dkvp a x y z x_counter x_rsum y_counter y_rsum z_counter z_rsum b 1 2 - 1 1 1 2 - - b 3 4 - 2 4 2 6 - - b 5 - - 3 9 - - - - b - 6 - - - 3 12 - - b - - - - - - - - - ================================================================ SPACE-PADDING mlr --idkvp --odkvp --ifs space --repifs cat ./reg_test/input/space-pad.dkvp a=1,b=2 c=3 mlr --inidx --odkvp --ifs space --repifs cat ./reg_test/input/space-pad.nidx 1=a,2=b,3=c 1=d,2=e,3=f mlr --icsvlite --odkvp --ifs space --repifs cat ./reg_test/input/space-pad.pprint a=1,b=2,c=3 ================================================================ DOUBLE PS mlr --opprint cat ./reg_test/input/double-ps.dkvp a b c pan wy.e 3 pan wy=e 3 ================================================================ MISSING FINAL LF mlr --csvlite cat ./reg_test/input/truncated.csv a,b,c 1,2,3 4,5,6 7,8,9 mlr --dkvp cat ./reg_test/input/truncated.dkvp a=1,b=2 c=3 mlr --nidx cat ./reg_test/input/truncated.nidx 1 2 3 4 5 mlr --pprint cat ./reg_test/input/truncated.pprint a b c 1 2 3 4 5 6 7 8 9 mlr --xtab cat ./reg_test/input/truncated.xtab-crlf a 1 b 2 c 3 d 4 e 5 ================================================================ UTF-8 alignment mlr --icsvlite --opprint cat ./reg_test/input/utf8-1.csv langue nom jour français françois vendredi žusz éloignée - mlr --icsvlite --opprint cat ./reg_test/input/utf8-2.csv français françois vendredi langue nom jour mlr --icsvlite --oxtab cat ./reg_test/input/utf8-1.csv langue français nom françois jour vendredi langue žusz nom éloignée jour mlr --icsvlite --oxtab cat ./reg_test/input/utf8-2.csv français langue françois nom vendredi jour mlr --inidx --ifs space --opprint cat ./reg_test/input/utf8-align.nidx 1 2 191º test 191 test2 francois français françois francais mlr --inidx --ifs space --opprint --right cat ./reg_test/input/utf8-align.nidx 1 2 191º test 191 test2 francois français françois francais mlr --oxtab cat ./reg_test/input/utf8-align.dkvp 191º test 1912 test2 cois çais çois cais 191º test 1912 test2 ois çais çois cais 191º test 1912 test2 coise çais çois cais mlr --inidx --ifs space --oxtab --xvright cat ./reg_test/input/utf8-align.nidx 1 191º 2 test 1 191 2 test2 1 francois 2 français 1 françois 2 francais ================================================================ UTF-8 BOM mlr --icsv --opprint cat ./reg_test/input/bom.csv a b c 1 2 3 4 5 6 mlr --icsv --opprint cat a b c 1 2 3 4 5 6 mlr --icsv --opprint cat ./reg_test/input/bom-dquote-header.csv a b c 1 2 3 4 5 6 mlr --icsv --opprint cat a b c 1 2 3 4 5 6 ================================================================ UTF-8 UPPERCASE/LOWERCASE mlr --icsvlite --opprint put $langue = toupper($langue) ./reg_test/input/utf8-1.csv langue nom jour FRANÇAIS françois vendredi ŽUSZ éloignée - mlr --icsvlite --opprint put $nom = toupper($nom) ./reg_test/input/utf8-1.csv langue nom jour français FRANÇOIS vendredi žusz ÉLOIGNÉE - mlr --icsvlite --opprint put $jour = toupper($jour) ./reg_test/input/utf8-1.csv langue nom jour français françois VENDREDI žusz éloignée - mlr --icsvlite --opprint put $langue = capitalize($langue) ./reg_test/input/utf8-1.csv langue nom jour Français françois vendredi Žusz éloignée - mlr --icsvlite --opprint put $nom = capitalize($nom) ./reg_test/input/utf8-1.csv langue nom jour français François vendredi žusz Éloignée - mlr --icsvlite --opprint put $jour = capitalize($jour) ./reg_test/input/utf8-1.csv langue nom jour français françois Vendredi žusz éloignée - ================================================================ SKIP/PASS COMMENTS DKVP ---------------------------------------------------------------- input comments1.dkvp cat ./reg_test/input/comments/comments1.dkvp # hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- skip comments1.dkvp mlr --skip-comments --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments --idkvp --oxtab cat ./reg_test/input/comments/comments1.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments1.dkvp mlr --pass-comments --idkvp --oxtab cat # hello world 1 a 1 b 2 c 3 a 4 b 5 c 6 mlr --pass-comments --idkvp --oxtab cat ./reg_test/input/comments/comments1.dkvp # hello world 1 a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- input comments2.dkvp cat ./reg_test/input/comments/comments2.dkvp a=1,b=2,c=3 # hello world 2 a=4,b=5,c=6 ---------------------------------------------------------------- skip comments2.dkvp mlr --skip-comments --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments --idkvp --oxtab cat ./reg_test/input/comments/comments2.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments2.dkvp mlr --pass-comments --idkvp --oxtab cat a 1 b 2 c 3 # hello world 2 a 4 b 5 c 6 mlr --pass-comments --idkvp --oxtab cat ./reg_test/input/comments/comments2.dkvp a 1 b 2 c 3 # hello world 2 a 4 b 5 c 6 ---------------------------------------------------------------- input comments3.dkvp cat ./reg_test/input/comments/comments3.dkvp a=1,b=2,c=3 a=4,b=5,c=6 # hello world 3 ---------------------------------------------------------------- skip comments3.dkvp mlr --skip-comments --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments --idkvp --oxtab cat ./reg_test/input/comments/comments3.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments3.dkvp mlr --pass-comments --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 # hello world 3 mlr --pass-comments --idkvp --oxtab cat ./reg_test/input/comments/comments3.dkvp a 1 b 2 c 3 a 4 b 5 c 6 # hello world 3 mlr termcvt --lf2crlf ---------------------------------------------------------------- input comments1-crlf.dkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.dkvp # hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- skip comments1-crlf.dkvp mlr --skip-comments --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments --idkvp --oxtab cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments1-crlf.dkvp mlr --pass-comments --idkvp --oxtab cat # hello world 1 a 1 b 2 c 3 a 4 b 5 c 6 mlr --pass-comments --idkvp --oxtab cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.dkvp # hello world 1 a 1 b 2 c 3 a 4 b 5 c 6 ================================================================ SKIP/PASS COMMENTS DKVP WITH ALTERNATE PREFIX ---------------------------------------------------------------- input comments1-atat.dkvp cat ./reg_test/input/comments/comments1-atat.dkvp @@ hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- skip comments1-atat.dkvp mlr --skip-comments-with @@ --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments1-atat.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments1-atat.dkvp mlr --pass-comments-with @@ --idkvp --oxtab cat @@ hello world 1 a 1 b 2 c 3 a 4 b 5 c 6 mlr --pass-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments1-atat.dkvp @@ hello world 1 a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- input comments2-atat.dkvp cat ./reg_test/input/comments/comments2-atat.dkvp a=1,b=2,c=3 @@ hello world 2 a=4,b=5,c=6 ---------------------------------------------------------------- skip comments2-atat.dkvp mlr --skip-comments-with @@ --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments2-atat.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments2-atat.dkvp mlr --pass-comments-with @@ --idkvp --oxtab cat a 1 b 2 c 3 @@ hello world 2 a 4 b 5 c 6 mlr --pass-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments2-atat.dkvp a 1 b 2 c 3 @@ hello world 2 a 4 b 5 c 6 ---------------------------------------------------------------- input comments3-atat.dkvp cat ./reg_test/input/comments/comments3-atat.dkvp a=1,b=2,c=3 a=4,b=5,c=6 @@ hello world 3 ---------------------------------------------------------------- skip comments3-atat.dkvp mlr --skip-comments-with @@ --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 mlr --skip-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments3-atat.dkvp a 1 b 2 c 3 a 4 b 5 c 6 ---------------------------------------------------------------- pass comments3-atat.dkvp mlr --pass-comments-with @@ --idkvp --oxtab cat a 1 b 2 c 3 a 4 b 5 c 6 @@ hello world 3 mlr --pass-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments3-atat.dkvp a 1 b 2 c 3 a 4 b 5 c 6 @@ hello world 3 ================================================================ SKIP/PASS COMMENTS NIDX ---------------------------------------------------------------- input comments1.nidx cat ./reg_test/input/comments/comments1.nidx # hello world 1 aX1 bX2 cX3 aX4 bX5 cX6 ---------------------------------------------------------------- skip comments1.nidx mlr --skip-comments --inidx --oxtab cat 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 mlr --skip-comments --inidx --oxtab cat ./reg_test/input/comments/comments1.nidx 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 ---------------------------------------------------------------- pass comments1.nidx mlr --pass-comments --inidx --oxtab cat # hello world 1 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 mlr --pass-comments --inidx --oxtab cat ./reg_test/input/comments/comments1.nidx # hello world 1 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 ---------------------------------------------------------------- input comments2.nidx cat ./reg_test/input/comments/comments2.nidx aX1 bX2 cX3 # hello world 2 aX4 bX5 cX6 ---------------------------------------------------------------- skip comments2.nidx mlr --skip-comments --inidx --oxtab cat 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 mlr --skip-comments --inidx --oxtab cat ./reg_test/input/comments/comments2.nidx 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 ---------------------------------------------------------------- pass comments2.nidx mlr --pass-comments --inidx --oxtab cat 1 aX1 2 bX2 3 cX3 # hello world 2 1 aX4 2 bX5 3 cX6 mlr --pass-comments --inidx --oxtab cat ./reg_test/input/comments/comments2.nidx 1 aX1 2 bX2 3 cX3 # hello world 2 1 aX4 2 bX5 3 cX6 ---------------------------------------------------------------- input comments3.nidx cat ./reg_test/input/comments/comments3.nidx aX1 bX2 cX3 aX4 bX5 cX6 # hello world 3 ---------------------------------------------------------------- skip comments3.nidx mlr --skip-comments --inidx --oxtab cat 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 mlr --skip-comments --inidx --oxtab cat ./reg_test/input/comments/comments3.nidx 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 ---------------------------------------------------------------- pass comments3.nidx mlr --pass-comments --inidx --oxtab cat 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 # hello world 3 mlr --pass-comments --inidx --oxtab cat ./reg_test/input/comments/comments3.nidx 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 # hello world 3 mlr termcvt --lf2crlf ---------------------------------------------------------------- input comments1-crlf.nidx cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.nidx # hello world 1 aX1 bX2 cX3 aX4 bX5 cX6 ---------------------------------------------------------------- skip comments1-crlf.nidx mlr --skip-comments --inidx --oxtab cat 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 mlr --skip-comments --inidx --oxtab cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.nidx 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 ---------------------------------------------------------------- pass comments1-crlf.nidx mlr --pass-comments --inidx --oxtab cat # hello world 1 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 mlr --pass-comments --inidx --oxtab cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.nidx # hello world 1 1 aX1 2 bX2 3 cX3 1 aX4 2 bX5 3 cX6 ================================================================ SKIP/PASS COMMENTS JSON ---------------------------------------------------------------- input comments1.json cat ./reg_test/input/comments/comments1.json # hello world 1 { "a":1, "b":2, "c":3 } { "a":4, "b":5, "c":6 } ---------------------------------------------------------------- skip comments1.json mlr --skip-comments --ijson --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --ijson --odkvp cat ./reg_test/input/comments/comments1.json a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments1.json mlr --pass-comments --ijson --odkvp cat # hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --ijson --odkvp cat ./reg_test/input/comments/comments1.json # hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- input comments2.json cat ./reg_test/input/comments/comments2.json { "a":1, "b":2, "c":3 } # hello world 2 { "a":4, "b":5, "c":6 } ---------------------------------------------------------------- skip comments2.json mlr --skip-comments --ijson --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --ijson --odkvp cat ./reg_test/input/comments/comments2.json a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments2.json mlr --pass-comments --ijson --odkvp cat # hello world 2 a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --ijson --odkvp cat ./reg_test/input/comments/comments2.json # hello world 2 a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- input comments3.json cat ./reg_test/input/comments/comments3.json { "a":1, "b":2, "c":3 } { "a":4, "b":5, "c":6 } # hello world 3 ---------------------------------------------------------------- skip comments3.json mlr --skip-comments --ijson --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --ijson --odkvp cat ./reg_test/input/comments/comments3.json a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments3.json mlr --pass-comments --ijson --odkvp cat # hello world 3 a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --ijson --odkvp cat ./reg_test/input/comments/comments3.json # hello world 3 a=1,b=2,c=3 a=4,b=5,c=6 mlr termcvt --lf2crlf ---------------------------------------------------------------- input comments1-crlf.json cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.json # hello world 1 { "a":1, "b":2, "c":3 } { "a":4, "b":5, "c":6 } ---------------------------------------------------------------- skip comments1-crlf.json mlr --skip-comments --ijson --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --ijson --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.json a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments1-crlf.json mlr --pass-comments --ijson --odkvp cat # hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --ijson --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.json # hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 ================================================================ SKIP/PASS COMMENTS XTAB ---------------------------------------------------------------- input comments1.xtab cat ./reg_test/input/comments/comments1.xtab x 1 #hello world3 z 3 x 2 #hello world4 z 5 ---------------------------------------------------------------- skip comments1.xtab mlr --skip-comments --ixtab --odkvp cat x=1,z=3 x=2,z=5 mlr --skip-comments --ixtab --odkvp cat ./reg_test/input/comments/comments1.xtab x=1,z=3 x=2,z=5 ---------------------------------------------------------------- pass comments1.xtab mlr --pass-comments --ixtab --odkvp cat #hello world3 x=1,z=3 #hello world4 x=2,z=5 mlr --pass-comments --ixtab --odkvp cat ./reg_test/input/comments/comments1.xtab #hello world3 x=1,z=3 #hello world4 x=2,z=5 ---------------------------------------------------------------- input comments2.xtab cat ./reg_test/input/comments/comments2.xtab #hello world1 #hello world2 x 1 #hello world3 z 3 x 2 #hello world4 z 5 #hello world5 #hello world6 ---------------------------------------------------------------- skip comments2.xtab mlr --skip-comments --ixtab --odkvp cat x=1,z=3 x=2,z=5 mlr --skip-comments --ixtab --odkvp cat ./reg_test/input/comments/comments2.xtab x=1,z=3 x=2,z=5 ---------------------------------------------------------------- pass comments2.xtab mlr --pass-comments --ixtab --odkvp cat #hello world1 #hello world2 #hello world3 x=1,z=3 #hello world4 #hello world5 x=2,z=5 #hello world6 mlr --pass-comments --ixtab --odkvp cat ./reg_test/input/comments/comments2.xtab #hello world1 #hello world2 #hello world3 x=1,z=3 #hello world4 #hello world5 x=2,z=5 #hello world6 mlr termcvt --lf2crlf ---------------------------------------------------------------- input comments1-crlf.xtab cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.xtab x 1 #hello world3 z 3 x 2 #hello world4 z 5 ---------------------------------------------------------------- skip comments1-crlf.xtab mlr --skip-comments --ixtab --odkvp cat x=1,z=3 x=2,z=5 mlr --skip-comments --ixtab --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.xtab x=1,z=3 x=2,z=5 ---------------------------------------------------------------- pass comments1-crlf.xtab mlr --pass-comments --ixtab --odkvp cat #hello world3 x=1,z=3 #hello world4 x=2,z=5 mlr --pass-comments --ixtab --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.xtab #hello world3 x=1,z=3 #hello world4 x=2,z=5 ================================================================ SKIP/PASS COMMENTS CSVLITE ---------------------------------------------------------------- input comments1.csv cat ./reg_test/input/comments/comments1.csv # hello a,b,c 1,2,3 4,5,6 ---------------------------------------------------------------- skip comments1.csv mlr --skip-comments --icsvlite --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments1.csv a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments1.csv mlr --pass-comments --icsvlite --odkvp cat # hello a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments1.csv # hello a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- input comments2.csv cat ./reg_test/input/comments/comments2.csv # hello a,b,c # hi 1,2,3 # there 4,5,6 # haha ---------------------------------------------------------------- skip comments2.csv mlr --skip-comments --icsvlite --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments2.csv a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments2.csv mlr --pass-comments --icsvlite --odkvp cat # hello # hi a=1,b=2,c=3 # there a=4,b=5,c=6 # haha mlr --pass-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments2.csv # hello # hi a=1,b=2,c=3 # there a=4,b=5,c=6 # haha mlr termcvt --lf2crlf ---------------------------------------------------------------- input comments1-crlf.csv cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv # hello a,b,c 1,2,3 4,5,6 ---------------------------------------------------------------- skip comments1-crlf.csv mlr --skip-comments --icsvlite --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --icsvlite --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments1-crlf.csv mlr --pass-comments --icsvlite --odkvp cat # hello a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --icsvlite --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv # hello a=1,b=2,c=3 a=4,b=5,c=6 ================================================================ SKIP/PASS COMMENTS CSV ---------------------------------------------------------------- input comments1.csv cat ./reg_test/input/comments/comments1.csv # hello a,b,c 1,2,3 4,5,6 ---------------------------------------------------------------- skip comments1.csv mlr --skip-comments --icsv --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --icsv --odkvp cat ./reg_test/input/comments/comments1.csv a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments1.csv mlr --pass-comments --icsv --odkvp cat # hello a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --icsv --odkvp cat ./reg_test/input/comments/comments1.csv # hello a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- input comments2.csv cat ./reg_test/input/comments/comments2.csv # hello a,b,c # hi 1,2,3 # there 4,5,6 # haha ---------------------------------------------------------------- skip comments2.csv mlr --skip-comments --icsv --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --icsv --odkvp cat ./reg_test/input/comments/comments2.csv a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments2.csv mlr --pass-comments --icsv --odkvp cat # hello # hi a=1,b=2,c=3 # there a=4,b=5,c=6 # haha mlr --pass-comments --icsv --odkvp cat ./reg_test/input/comments/comments2.csv # hello # hi a=1,b=2,c=3 # there a=4,b=5,c=6 # haha mlr termcvt --lf2crlf ---------------------------------------------------------------- input comments1-crlf.csv cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv # hello a,b,c 1,2,3 4,5,6 ---------------------------------------------------------------- skip comments1-crlf.csv mlr --skip-comments --icsv --odkvp cat a=1,b=2,c=3 a=4,b=5,c=6 mlr --skip-comments --icsv --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv a=1,b=2,c=3 a=4,b=5,c=6 ---------------------------------------------------------------- pass comments1-crlf.csv mlr --pass-comments --icsv --odkvp cat # hello a=1,b=2,c=3 a=4,b=5,c=6 mlr --pass-comments --icsv --odkvp cat /home/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv # hello a=1,b=2,c=3 a=4,b=5,c=6 ================================================================ MMAP AT PAGE BOUNDARIES mlr --dkvp tail -n 4 ./reg_test/input/page-aligned-final-ifs.dkvp x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z= mlr --dkvp tail -n 4 ./reg_test/input/page-aligned-final-irs.dkvp x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc mlr --dkvp tail -n 4 ./reg_test/input/page-aligned-final-no-ifs.dkvp x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,3=z mlr --dkvp tail -n 4 ./reg_test/input/page-aligned-no-final-irs.dkvp x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=ccccccccccccccccccccccccccccccccccccccccccccccccc mlr --nidx tail -n 4 ./reg_test/input/page-aligned-no-final-irs.nidx 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333 mlr --csvlite tail -n 4 ./reg_test/input/page-aligned-no-final-irs.csvl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,ccccccccccccccccccccccccccccccccccccccccccc 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333 mlr --csv --rs lf tail -n 4 ./reg_test/input/page-aligned-no-final-irs.csvl aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,ccccccccccccccccccccccccccccccccccccccccccc 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333 mlr --xtab tail -n 4 ./reg_test/input/page-aligned-no-final-eol.xtab aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 3333333333333333333333 ================================================================ INT64 I/O mlr --oxtab put $c=$a;$d=$b;$e=hexfmt($a);$f=hexfmt($b) ./reg_test/input/int64io.dkvp a 0x1 b 1 c 1 d 1 e 0x1 f 0x1 a 0x7ffffffffffffffe b 9223372036854775806 c 9223372036854775806 d 9223372036854775806 e 0x7ffffffffffffffe f 0x7ffffffffffffffe a 0x7fffffffffffffff b 9223372036854775807 c 9223372036854775807 d 9223372036854775807 e 0x7fffffffffffffff f 0x7fffffffffffffff a 0x8000000000000000 b -9223372036854775808 c -9223372036854775808 d -9223372036854775808 e 0x8000000000000000 f 0x8000000000000000 a 0xffffffffffffffff b -1 c -1 d -1 e 0xffffffffffffffff f 0xffffffffffffffff mlr --oxtab --ofmt %.8g put $p0=$p+0;$p1=$p+1;$p2=$p+2;$p3=$p+3 ./reg_test/input/int64arith.dkvp p 0x7ffffffffffff9ff n 0x8000000000000000 p0 9223372036854774271 p1 9223372036854774272 p2 9223372036854774273 p3 9223372036854774274 p 0x7ffffffffffffa00 n 0x8000000000000001 p0 9223372036854774272 p1 9223372036854774273 p2 9223372036854774274 p3 9223372036854774275 p 0x7ffffffffffffbff n 0x8000000000000200 p0 9223372036854774783 p1 9223372036854774784 p2 9223372036854774785 p3 9223372036854774786 p 0x7ffffffffffffc00 n 0x8000000000000400 p0 9223372036854774784 p1 9223372036854774785 p2 9223372036854774786 p3 9223372036854774787 p 0x7ffffffffffffe00 n 0x8000000000000401 p0 9223372036854775296 p1 9223372036854775297 p2 9223372036854775298 p3 9223372036854775299 p 0x7ffffffffffffffe n 0x8000000000000600 p0 9223372036854775806 p1 9223372036854775807 p2 9.223372e+18 p3 9.223372e+18 p 0x7fffffffffffffff n 0x8000000000000601 p0 9223372036854775807 p1 9.223372e+18 p2 9.223372e+18 p3 9.223372e+18 mlr --oxtab --ofmt %.8g put $p0=$p-0;$p1=$p-1;$p2=$p-2;$p3=$p-3 ./reg_test/input/int64arith.dkvp p 0x7ffffffffffff9ff n 0x8000000000000000 p0 9223372036854774271 p1 9223372036854774270 p2 9223372036854774269 p3 9223372036854774268 p 0x7ffffffffffffa00 n 0x8000000000000001 p0 9223372036854774272 p1 9223372036854774271 p2 9223372036854774270 p3 9223372036854774269 p 0x7ffffffffffffbff n 0x8000000000000200 p0 9223372036854774783 p1 9223372036854774782 p2 9223372036854774781 p3 9223372036854774780 p 0x7ffffffffffffc00 n 0x8000000000000400 p0 9223372036854774784 p1 9223372036854774783 p2 9223372036854774782 p3 9223372036854774781 p 0x7ffffffffffffe00 n 0x8000000000000401 p0 9223372036854775296 p1 9223372036854775295 p2 9223372036854775294 p3 9223372036854775293 p 0x7ffffffffffffffe n 0x8000000000000600 p0 9223372036854775806 p1 9223372036854775805 p2 9223372036854775804 p3 9223372036854775803 p 0x7fffffffffffffff n 0x8000000000000601 p0 9223372036854775807 p1 9223372036854775806 p2 9223372036854775805 p3 9223372036854775804 mlr --oxtab --ofmt %.8g put $p0=$p*0;$p1=$p*1;$p2=$p*2;$p3=$p*3 ./reg_test/input/int64arith.dkvp p 0x7ffffffffffff9ff n 0x8000000000000000 p0 0 p1 9223372036854774271 p2 1.8446744e+19 p3 2.7670116e+19 p 0x7ffffffffffffa00 n 0x8000000000000001 p0 0 p1 9223372036854774272 p2 1.8446744e+19 p3 2.7670116e+19 p 0x7ffffffffffffbff n 0x8000000000000200 p0 0 p1 9223372036854774783 p2 1.8446744e+19 p3 2.7670116e+19 p 0x7ffffffffffffc00 n 0x8000000000000400 p0 0 p1 9223372036854774784 p2 1.8446744e+19 p3 2.7670116e+19 p 0x7ffffffffffffe00 n 0x8000000000000401 p0 0 p1 9.223372e+18 p2 1.8446744e+19 p3 2.7670116e+19 p 0x7ffffffffffffffe n 0x8000000000000600 p0 0 p1 9.223372e+18 p2 1.8446744e+19 p3 2.7670116e+19 p 0x7fffffffffffffff n 0x8000000000000601 p0 0 p1 9.223372e+18 p2 1.8446744e+19 p3 2.7670116e+19 mlr --oxtab --ofmt %.8g put $n0=$n+0;$n1=$n+1;$n2=$n+2;$n3=$n+3 ./reg_test/input/int64arith.dkvp p 0x7ffffffffffff9ff n 0x8000000000000000 n0 -9223372036854775808 n1 -9223372036854775807 n2 -9223372036854775806 n3 -9223372036854775805 p 0x7ffffffffffffa00 n 0x8000000000000001 n0 -9223372036854775807 n1 -9223372036854775806 n2 -9223372036854775805 n3 -9223372036854775804 p 0x7ffffffffffffbff n 0x8000000000000200 n0 -9223372036854775296 n1 -9223372036854775295 n2 -9223372036854775294 n3 -9223372036854775293 p 0x7ffffffffffffc00 n 0x8000000000000400 n0 -9223372036854774784 n1 -9223372036854774783 n2 -9223372036854774782 n3 -9223372036854774781 p 0x7ffffffffffffe00 n 0x8000000000000401 n0 -9223372036854774783 n1 -9223372036854774782 n2 -9223372036854774781 n3 -9223372036854774780 p 0x7ffffffffffffffe n 0x8000000000000600 n0 -9223372036854774272 n1 -9223372036854774271 n2 -9223372036854774270 n3 -9223372036854774269 p 0x7fffffffffffffff n 0x8000000000000601 n0 -9223372036854774271 n1 -9223372036854774270 n2 -9223372036854774269 n3 -9223372036854774268 mlr --oxtab --ofmt %.8g put $n0=$n-0;$n1=$n-1;$n2=$n-2;$n3=$n-3 ./reg_test/input/int64arith.dkvp p 0x7ffffffffffff9ff n 0x8000000000000000 n0 -9223372036854775808 n1 -9.223372e+18 n2 -9.223372e+18 n3 -9.223372e+18 p 0x7ffffffffffffa00 n 0x8000000000000001 n0 -9223372036854775807 n1 -9223372036854775808 n2 -9.223372e+18 n3 -9.223372e+18 p 0x7ffffffffffffbff n 0x8000000000000200 n0 -9223372036854775296 n1 -9223372036854775297 n2 -9223372036854775298 n3 -9223372036854775299 p 0x7ffffffffffffc00 n 0x8000000000000400 n0 -9223372036854774784 n1 -9223372036854774785 n2 -9223372036854774786 n3 -9223372036854774787 p 0x7ffffffffffffe00 n 0x8000000000000401 n0 -9223372036854774783 n1 -9223372036854774784 n2 -9223372036854774785 n3 -9223372036854774786 p 0x7ffffffffffffffe n 0x8000000000000600 n0 -9223372036854774272 n1 -9223372036854774273 n2 -9223372036854774274 n3 -9223372036854774275 p 0x7fffffffffffffff n 0x8000000000000601 n0 -9223372036854774271 n1 -9223372036854774272 n2 -9223372036854774273 n3 -9223372036854774274 mlr --oxtab --ofmt %.8g put $n0=$n*0;$n1=$n*1;$n2=$n*2;$n3=$n*3 ./reg_test/input/int64arith.dkvp p 0x7ffffffffffff9ff n 0x8000000000000000 n0 0 n1 -9.223372e+18 n2 -1.8446744e+19 n3 -2.7670116e+19 p 0x7ffffffffffffa00 n 0x8000000000000001 n0 0 n1 -9.223372e+18 n2 -1.8446744e+19 n3 -2.7670116e+19 p 0x7ffffffffffffbff n 0x8000000000000200 n0 0 n1 -9.223372e+18 n2 -1.8446744e+19 n3 -2.7670116e+19 p 0x7ffffffffffffc00 n 0x8000000000000400 n0 0 n1 -9223372036854774784 n2 -1.8446744e+19 n3 -2.7670116e+19 p 0x7ffffffffffffe00 n 0x8000000000000401 n0 0 n1 -9223372036854774783 n2 -1.8446744e+19 n3 -2.7670116e+19 p 0x7ffffffffffffffe n 0x8000000000000600 n0 0 n1 -9223372036854774272 n2 -1.8446744e+19 n3 -2.7670116e+19 p 0x7fffffffffffffff n 0x8000000000000601 n0 0 n1 -9223372036854774271 n2 -1.8446744e+19 n3 -2.7670116e+19 ================================================================ COMPRESSED INPUT mlr --csv --prepipe cat cat ./reg_test/input/rfc-csv/simple.csv-crlf a,b,c 1,x,3 4,5,6 x,"y""yy",z mlr --dkvp --prepipe cat cat ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --csv --prepipe cat cat a,b,c 1,x,3 4,5,6 x,"y""yy",z mlr --dkvp --prepipe cat cat a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ STDIN mlr --csv cat a,b,c 1,x,3 4,5,6 x,"y""yy",z ================================================================ RFC-CSV mlr --mmap --csv cat ./reg_test/input/rfc-csv/simple.csv-crlf a,b,c 1,x,3 4,5,6 x,"y""yy",z mlr --mmap --csv cat ./reg_test/input/rfc-csv/simple-truncated.csv a,b,c 1,x,3 4,5,6 mlr --mmap --csv cat ./reg_test/input/rfc-csv/narrow.csv a 1 2 3 4 mlr --mmap --csv cat ./reg_test/input/rfc-csv/narrow-truncated.csv a 1 2 3 4 mlr --mmap --csv cat ./reg_test/input/rfc-csv/quoted-comma.csv a,b,c 1,"x,3",y 4,5,6 mlr --mmap --csv cat ./reg_test/input/rfc-csv/quoted-comma-truncated.csv a,b,c 1,"x,3",y 4,5,6 mlr --mmap --csv cat ./reg_test/input/rfc-csv/quoted-crlf.csv a,b,c 1,"x 3",y 4,5,6 mlr --mmap --csv cat ./reg_test/input/rfc-csv/quoted-crlf-truncated.csv a,b,c 1,"x 3",y 4,5,6 mlr --mmap --csv cat ./reg_test/input/rfc-csv/simple-truncated.csv ./reg_test/input/rfc-csv/simple.csv-crlf a,b,c 1,x,3 4,5,6 1,x,3 4,5,6 x,"y""yy",z mlr --mmap --csv --ifs semicolon --ofs pipe --irs lf --ors lflf cut -x -f b ./reg_test/input/rfc-csv/modify-defaults.csv a|c 1|3 4|6 mlr --mmap --csv --rs lf --quote-original cut -o -f c,b,a ./reg_test/input/quote-original.csv c,b,a 3,2,1 6,"5",4 "9",8,"7" mlr --mmap --icsv --oxtab cat ./reg_test/input/comma-at-eof.csv a 1 b 2 c 3 a 4 b 5 c mlr --no-mmap --icsv --oxtab cat ./reg_test/input/comma-at-eof.csv a 1 b 2 c 3 a 4 b 5 c mlr --csv --quote-all cat ./reg_test/input/rfc-csv/simple.csv-crlf "a","b","c" "1","x","3" "4","5","6" "x","y""yy","z" mlr --csv --quote-original cat ./reg_test/input/rfc-csv/simple.csv-crlf a,b,c 1,x,3 4,5,6 "x","y""yy","z" mlr --itsv --rs lf --oxtab cat ./reg_test/input/simple.tsv a pan b pan i 1 x 2 y 0.989945 a eks b pan i 2 x 1 y 0.775159 a wye b wye i 3 x 1 y 0.761642 a eks b wye i 4 x 5 y 0.322934 a wye b pan i 5 x 5 y 0.448283 mlr --iusv --oxtab cat ./reg_test/input/example.usv a d b e c f a g b h c i ================================================================ RAGGED NON-RFC CSV mlr --mmap --icsv --oxtab --ragged cat ./reg_test/input/ragged.csv a 1 b 2 c 3 a 4 b 5 c a 6 b 7 c 8 4 9 mlr --no-mmap --icsv --oxtab --ragged cat ./reg_test/input/ragged.csv a 1 b 2 c 3 a 4 b 5 c a 6 b 7 c 8 4 9 mlr --mmap --icsvlite --oxtab --ragged cat ./reg_test/input/ragged.csv a 1 b 2 c 3 a 4 b 5 c a 6 b 7 c 8 4 9 mlr --no-mmap --icsvlite --oxtab --ragged cat ./reg_test/input/ragged.csv a 1 b 2 c 3 a 4 b 5 c a 6 b 7 c 8 4 9 ================================================================ MARKDOWN OUTPUT mlr --itsv --rs lf --omd cat ./reg_test/input/simple.tsv | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 2 | 0.989945 | | eks | pan | 2 | 1 | 0.775159 | | wye | wye | 3 | 1 | 0.761642 | | eks | wye | 4 | 5 | 0.322934 | | wye | pan | 5 | 5 | 0.448283 | ================================================================ CSV/RS ENVIRONMENT DEFAULTS mlr --csv cut -f a ./reg_test/input/rfc-csv/simple.csv-crlf a 1 4 x mlr --csv --rs crlf cut -f a ./reg_test/input/rfc-csv/simple.csv-crlf a 1 4 x mlr --csv --rs lf cut -f a ./reg_test/input/rfc-csv/simple.csv-crlf mlr: unmatched double quote at line 3. a 1 4 ================================================================ MULTI-CHARACTER IRS/IFS/IPS FOR DKVP mlr --oxtab --idkvp --irs lf --ifs , --ips = cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf x :0.641593543645736508/ a :wye/ i :0/ x :0.827614412562742041/ a :eks/ i :1/ x :0.923068348748175560/ a :zee/ i :2/ x :0.000047786161325772/ a :zee/ i :3/ x :0.676537984365847889/ a :zee/ i :4/ mlr --oxtab --idkvp --irs lf --ifs /, --ips =: cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf x 0.641593543645736508 a wye i 0 x 0.827614412562742041 a eks i 1 x 0.923068348748175560 a zee i 2 x 0.000047786161325772 a zee i 3 x 0.676537984365847889 a zee i 4 mlr --oxtab --idkvp --irs crlf --ifs , --ips = cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf x :0.641593543645736508/ a :wye/ i :0/ x :0.827614412562742041/ a :eks/ i :1/ x :0.923068348748175560/ a :zee/ i :2/ x :0.000047786161325772/ a :zee/ i :3/ x :0.676537984365847889/ a :zee/ i :4/ mlr --oxtab --idkvp --irs crlf --ifs /, --ips =: cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf x 0.641593543645736508 a wye i 0 x 0.827614412562742041 a eks i 1 x 0.923068348748175560 a zee i 2 x 0.000047786161325772 a zee i 3 x 0.676537984365847889 a zee i 4 ================================================================ MULTI-CHARACTER IRS/IFS FOR NIDX mlr --oxtab --inidx --irs lf --ifs , cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf 4 x=:0.641593543645736508/ 1 a=:wye/ 3 i=:0/ 4 x=:0.827614412562742041/ 1 a=:eks/ 3 i=:1/ 4 x=:0.923068348748175560/ 1 a=:zee/ 3 i=:2/ 4 x=:0.000047786161325772/ 1 a=:zee/ 3 i=:3/ 4 x=:0.676537984365847889/ 1 a=:zee/ 3 i=:4/ mlr --oxtab --inidx --irs lf --ifs /, cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf 4 x=:0.641593543645736508 1 a=:wye 3 i=:0 4 x=:0.827614412562742041 1 a=:eks 3 i=:1 4 x=:0.923068348748175560 1 a=:zee 3 i=:2 4 x=:0.000047786161325772 1 a=:zee 3 i=:3 4 x=:0.676537984365847889 1 a=:zee 3 i=:4 mlr --oxtab --inidx --irs crlf --ifs , cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf 4 x=:0.641593543645736508/ 1 a=:wye/ 3 i=:0/ 4 x=:0.827614412562742041/ 1 a=:eks/ 3 i=:1/ 4 x=:0.923068348748175560/ 1 a=:zee/ 3 i=:2/ 4 x=:0.000047786161325772/ 1 a=:zee/ 3 i=:3/ 4 x=:0.676537984365847889/ 1 a=:zee/ 3 i=:4/ mlr --oxtab --inidx --irs crlf --ifs /, cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf 4 x=:0.641593543645736508 1 a=:wye 3 i=:0 4 x=:0.827614412562742041 1 a=:eks 3 i=:1 4 x=:0.923068348748175560 1 a=:zee 3 i=:2 4 x=:0.000047786161325772 1 a=:zee 3 i=:3 4 x=:0.676537984365847889 1 a=:zee 3 i=:4 ================================================================ MULTI-CHARACTER IRS/IFS FOR CSVLITE mlr --oxtab --icsvlite --irs lf --ifs , cut -o -f x/,a/,i/ ./reg_test/input/multi-sep.csv-crlf x/ 0.641593543645736508/ a/ wye/ i/ 0/ x/ 0.827614412562742041/ a/ eks/ i/ 1/ x/ 0.923068348748175560/ a/ zee/ i/ 2/ x/ 0.000047786161325772/ a/ zee/ i/ 3/ x/ 0.676537984365847889/ a/ zee/ i/ 4/ mlr --oxtab --icsvlite --irs lf --ifs /, cut -o -f x,a,i ./reg_test/input/multi-sep.csv-crlf x 0.641593543645736508 a wye i 0 x 0.827614412562742041 a eks i 1 x 0.923068348748175560 a zee i 2 x 0.000047786161325772 a zee i 3 x 0.676537984365847889 a zee i 4 mlr --oxtab --icsvlite --irs crlf --ifs , cut -o -f x/,a/,i/ ./reg_test/input/multi-sep.csv-crlf x/ 0.641593543645736508/ a/ wye/ i/ 0/ x/ 0.827614412562742041/ a/ eks/ i/ 1/ x/ 0.923068348748175560/ a/ zee/ i/ 2/ x/ 0.000047786161325772/ a/ zee/ i/ 3/ x/ 0.676537984365847889/ a/ zee/ i/ 4/ mlr --oxtab --icsvlite --irs crlf --ifs /, cut -o -f x,a,i ./reg_test/input/multi-sep.csv-crlf x 0.641593543645736508 a wye i 0 x 0.827614412562742041 a eks i 1 x 0.923068348748175560 a zee i 2 x 0.000047786161325772 a zee i 3 x 0.676537984365847889 a zee i 4 ================================================================ MULTI-CHARACTER SEPARATORS FOR XTAB mlr --mmap --xtab --ifs crlf --ofs Z cut -x -f b ./reg_test/input/truncated.xtab-crlf a 1Zc 3ZZd 4Ze 5Z mlr --mmap --xtab --ips . --ops @ cut -x -f b ./reg_test/input/dots.xtab a@1 c@345 defg@6 hi@@@78 mlr --xtab --ips : --ops @@@@ put $sum=int($a+$b) ./reg_test/input/multi-ips.dkvp a@@@@1 b@@@@2 sum@@@@3 ================================================================ MULTI-CHARACTER IRS FOR PPRINT mlr --pprint --irs crlf --ifs / --ofs @ cut -x -f b ./reg_test/input/dots.pprint-crlf a@@@i@@x@@@@@@@@@@@@@@@@@@@y pan@1@@0.3467901443380824@@0.7268028627434533 eks@2@@0.7586799647899636@@0.5221511083334797 wye@3@@0.20460330576630303@0.33831852551664776 eks@4@@0.38139939387114097@0.13418874328430463 wye@5@@0.5732889198020006@@0.8636244699032729 zee@6@@0.5271261600918548@@0.49322128674835697 eks@7@@0.6117840605678454@@0.1878849191181694 zee@8@@0.5985540091064224@@0.976181385699006 hat@9@@0.03144187646093577@0.7495507603507059 pan@10@0.5026260055412137@@0.9526183602969864 ================================================================ BARRED PPRINT mlr --opprint --barred cat ./reg_test/input/abixy +-----+-----+----+---------------------+---------------------+ | a | b | i | x | y | +-----+-----+----+---------------------+---------------------+ | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | +-----+-----+----+---------------------+---------------------+ mlr --opprint --barred --right cat ./reg_test/input/abixy +-----+-----+----+---------------------+---------------------+ | a | b | i | x | y | +-----+-----+----+---------------------+---------------------+ | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | +-----+-----+----+---------------------+---------------------+ mlr --opprint --barred cat ./reg_test/input/abixy-het +-----+-----+---+--------------------+--------------------+ | a | b | i | x | y | +-----+-----+---+--------------------+--------------------+ | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | +-----+-----+---+--------------------+--------------------+ +-----+-----+---+---------------------+---------------------+ | aaa | b | i | x | y | +-----+-----+---+---------------------+---------------------+ | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | +-----+-----+---+---------------------+---------------------+ +-----+-----+---+---------------------+---------------------+ | a | bbb | i | x | y | +-----+-----+---+---------------------+---------------------+ | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | +-----+-----+---+---------------------+---------------------+ +-----+-----+---+--------------------+--------------------+ | a | b | i | xxx | y | +-----+-----+---+--------------------+--------------------+ | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | +-----+-----+---+--------------------+--------------------+ +-----+-----+---+--------------------+---------------------+ | a | b | i | x | y | +-----+-----+---+--------------------+---------------------+ | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | +-----+-----+---+--------------------+---------------------+ +-----+-----+-----+--------------------+--------------------+ | a | b | iii | x | y | +-----+-----+-----+--------------------+--------------------+ | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | +-----+-----+-----+--------------------+--------------------+ +-----+-----+---+--------------------+-------------------+ | a | b | i | x | yyy | +-----+-----+---+--------------------+-------------------+ | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | +-----+-----+---+--------------------+-------------------+ +-----+-----+---+---------------------+--------------------+ | aaa | bbb | i | x | y | +-----+-----+---+---------------------+--------------------+ | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | +-----+-----+---+---------------------+--------------------+ +-----+-----+----+--------------------+--------------------+ | a | b | i | x | y | +-----+-----+----+--------------------+--------------------+ | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | +-----+-----+----+--------------------+--------------------+ mlr --opprint --barred --right cat ./reg_test/input/abixy-het +-----+-----+---+--------------------+--------------------+ | a | b | i | x | y | +-----+-----+---+--------------------+--------------------+ | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | +-----+-----+---+--------------------+--------------------+ +-----+-----+---+---------------------+---------------------+ | aaa | b | i | x | y | +-----+-----+---+---------------------+---------------------+ | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | +-----+-----+---+---------------------+---------------------+ +-----+-----+---+---------------------+---------------------+ | a | bbb | i | x | y | +-----+-----+---+---------------------+---------------------+ | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | +-----+-----+---+---------------------+---------------------+ +-----+-----+---+--------------------+--------------------+ | a | b | i | xxx | y | +-----+-----+---+--------------------+--------------------+ | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | +-----+-----+---+--------------------+--------------------+ +-----+-----+---+--------------------+---------------------+ | a | b | i | x | y | +-----+-----+---+--------------------+---------------------+ | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | +-----+-----+---+--------------------+---------------------+ +-----+-----+-----+--------------------+--------------------+ | a | b | iii | x | y | +-----+-----+-----+--------------------+--------------------+ | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | +-----+-----+-----+--------------------+--------------------+ +-----+-----+---+--------------------+-------------------+ | a | b | i | x | yyy | +-----+-----+---+--------------------+-------------------+ | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | +-----+-----+---+--------------------+-------------------+ +-----+-----+---+---------------------+--------------------+ | aaa | bbb | i | x | y | +-----+-----+---+---------------------+--------------------+ | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | +-----+-----+---+---------------------+--------------------+ +-----+-----+----+--------------------+--------------------+ | a | b | i | x | y | +-----+-----+----+--------------------+--------------------+ | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | +-----+-----+----+--------------------+--------------------+ ================================================================ MULTI-CHARACTER IXS SPECIFIERS mlr --oxtab --idkvp --mmap --irs lf --ifs \x2c --ips = cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf x :0.641593543645736508/ a :wye/ i :0/ x :0.827614412562742041/ a :eks/ i :1/ x :0.923068348748175560/ a :zee/ i :2/ x :0.000047786161325772/ a :zee/ i :3/ x :0.676537984365847889/ a :zee/ i :4/ mlr --oxtab --idkvp --mmap --irs lf --ifs /, --ips \x3d\x3a cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf x 0.641593543645736508 a wye i 0 x 0.827614412562742041 a eks i 1 x 0.923068348748175560 a zee i 2 x 0.000047786161325772 a zee i 3 x 0.676537984365847889 a zee i 4 ================================================================ JSON I/O mlr --ijson --opprint cat ./reg_test/input/small-non-nested.json a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --ijson --opprint cat ./reg_test/input/small-non-nested-wrapped.json a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --ijson --oxtab cat ./reg_test/input/small-nested.json z:pan:1 0.726803 z:pan:0 0.952618 z:eks:0 0.134189 z:eks:1 0.187885 z:wye:1 0.863624 z:zee:0 0.976181 z:hat:1 0.749551 mlr --ojson cat ./reg_test/input/json-output-options.dkvp { "a": 1, "b": "x", "c": 3 } { "d": 4 } { "1": 5, "f": 6 } mlr --ojson --jvstack cat ./reg_test/input/json-output-options.dkvp { "a": 1, "b": "x", "c": 3 } { "d": 4 } { "1": 5, "f": 6 } mlr --ojson --jlistwrap cat ./reg_test/input/json-output-options.dkvp [ { "a": 1, "b": "x", "c": 3 } ,{ "d": 4 } ,{ "1": 5, "f": 6 } ] mlr --ojson --jvstack --jlistwrap cat ./reg_test/input/json-output-options.dkvp [ { "a": 1, "b": "x", "c": 3 } ,{ "d": 4 } ,{ "1": 5, "f": 6 } ] mlr --ojson --jquoteall cat ./reg_test/input/json-output-options.dkvp { "a": "1", "b": "x", "c": "3" } { "d": "4" } { "1": "5", "f": "6" } mlr --ojson --jvstack --jquoteall cat ./reg_test/input/json-output-options.dkvp { "a": "1", "b": "x", "c": "3" } { "d": "4" } { "1": "5", "f": "6" } mlr --ojson --jlistwrap --jquoteall cat ./reg_test/input/json-output-options.dkvp [ { "a": "1", "b": "x", "c": "3" } ,{ "d": "4" } ,{ "1": "5", "f": "6" } ] mlr --ojson --jvstack --jlistwrap --jquoteall cat ./reg_test/input/json-output-options.dkvp [ { "a": "1", "b": "x", "c": "3" } ,{ "d": "4" } ,{ "1": "5", "f": "6" } ] mlr --ojson --jvquoteall cat ./reg_test/input/json-output-options.dkvp { "a": "1", "b": "x", "c": "3" } { "d": "4" } { "1": "5", "f": "6" } mlr --ojson --jvstack --jvquoteall cat ./reg_test/input/json-output-options.dkvp { "a": "1", "b": "x", "c": "3" } { "d": "4" } { "1": "5", "f": "6" } mlr --ojson --jlistwrap --jvquoteall cat ./reg_test/input/json-output-options.dkvp [ { "a": "1", "b": "x", "c": "3" } ,{ "d": "4" } ,{ "1": "5", "f": "6" } ] mlr --ojson --jvstack --jlistwrap --jvquoteall cat ./reg_test/input/json-output-options.dkvp [ { "a": "1", "b": "x", "c": "3" } ,{ "d": "4" } ,{ "1": "5", "f": "6" } ] mlr --ojson --jknquoteint cat ./reg_test/input/json-output-options.dkvp { "a": 1, "b": "x", "c": 3 } { "d": 4 } { "1": 5, "f": 6 } mlr --ojson --jvstack --jknquoteint cat ./reg_test/input/json-output-options.dkvp { "a": 1, "b": "x", "c": 3 } { "d": 4 } { "1": 5, "f": 6 } mlr --ojson --jlistwrap --jknquoteint cat ./reg_test/input/json-output-options.dkvp [ { "a": 1, "b": "x", "c": 3 } ,{ "d": 4 } ,{ "1": 5, "f": 6 } ] mlr --ojson --jvstack --jlistwrap --jknquoteint cat ./reg_test/input/json-output-options.dkvp [ { "a": 1, "b": "x", "c": 3 } ,{ "d": 4 } ,{ "1": 5, "f": 6 } ] mlr put -q --jvquoteall dump $* ./reg_test/input/json-output-options.dkvp { "a": "1", "b": "x", "c": "3" } { "d": "4" } { "1": "5", "f": "6" } mlr put -q --jvquoteall o = $*; o[7] = 8; dump o ./reg_test/input/json-output-options.dkvp { "a": "1", "b": "x", "c": "3", "7": "8" } { "d": "4", "7": "8" } { "1": "5", "f": "6", "7": "8" } mlr put -q --jknquoteint dump $* ./reg_test/input/json-output-options.dkvp { "a": 1, "b": "x", "c": 3 } { "d": 4 } { "1": 5, "f": 6 } mlr put -q --jknquoteint o = $*; o[7] = 8; dump o ./reg_test/input/json-output-options.dkvp { "a": 1, "b": "x", "c": 3, 7: 8 } { "d": 4, 7: 8 } { "1": 5, "f": 6, 7: 8 } mlr --ijson --opprint cat ./reg_test/input/small-non-nested-wrapped.json ./reg_test/input/small-non-nested-wrapped.json a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --icsv --ojson --rs lf cat { "col": "abc \"def\" \\ghi" } mlr --icsv --ojson --jvquoteall --rs lf cat { "col": "abc \"def\" \\ghi" } mlr --ijson --oxtab cat ./reg_test/input/arrays.json a 1 b 1 a 2 b:0 2 b:1 3 a 3 b:c:0 4 b:c:1 5 a 4 b:c:d:0 4 b:c:d:1 5 a 5 b:0 6 b:1 7 b:2:0 8 b:2:1 9 a 6 b:0:0:0 11 mlr --ijson --oxtab --json-map-arrays-on-input cat ./reg_test/input/arrays.json a 1 b 1 a 2 b:0 2 b:1 3 a 3 b:c:0 4 b:c:1 5 a 4 b:c:d:0 4 b:c:d:1 5 a 5 b:0 6 b:1 7 b:2:0 8 b:2:1 9 a 6 b:0:0:0 11 mlr --ijson --oxtab --json-skip-arrays-on-input cat ./reg_test/input/arrays.json a 1 b 1 a 2 a 3 a 4 a 5 a 6 mlr --ijson --oxtab --json-fatal-arrays-on-input cat ./reg_test/input/arrays.json mlr: found array item within JSON object. This is valid but unmillerable JSON. Use --json-skip-arrays-on-input to exclude these from input without fataling. Or, --json-map-arrays-on-input to convert them to integer-indexed maps. mlr: Unable to parse JSON data. mlr --json cat ./reg_test/input/escapes.json { "abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\xyz" } { "abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\\\xyz" } ================================================================ FORMAT-CONVERSION KEYSTROKE-SAVERS mlr --d2t cat ./reg_test/input/abixy.dkvp a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --d2n cat ./reg_test/input/abixy.dkvp pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --d2j cat ./reg_test/input/abixy.dkvp { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --d2p cat ./reg_test/input/abixy.dkvp a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --d2x cat ./reg_test/input/abixy.dkvp a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --d2m cat ./reg_test/input/abixy.dkvp | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | mlr --c2t cat ./reg_test/input/abixy.csv a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --c2d cat ./reg_test/input/abixy.csv a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --c2n cat ./reg_test/input/abixy.csv pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --c2j cat ./reg_test/input/abixy.csv { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --c2p cat ./reg_test/input/abixy.csv a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --c2x cat ./reg_test/input/abixy.csv a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --c2m cat ./reg_test/input/abixy.csv | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | mlr --t2c cat ./reg_test/input/abixy.tsv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --t2d cat ./reg_test/input/abixy.tsv a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --t2n cat ./reg_test/input/abixy.tsv pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --t2j cat ./reg_test/input/abixy.tsv { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --t2p cat ./reg_test/input/abixy.tsv a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --t2x cat ./reg_test/input/abixy.tsv a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --t2m cat ./reg_test/input/abixy.tsv | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | mlr --n2c cat ./reg_test/input/abixy.nidx 1,2,3,4,5 pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --n2t cat ./reg_test/input/abixy.nidx 1 2 3 4 5 pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --n2d cat ./reg_test/input/abixy.nidx 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797 1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776 1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463 1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729 1=zee,2=pan,3=6,4=0.5271261600918548,5=0.49322128674835697 1=eks,2=zee,3=7,4=0.6117840605678454,5=0.1878849191181694 1=zee,2=wye,3=8,4=0.5985540091064224,5=0.976181385699006 1=hat,2=wye,3=9,4=0.03144187646093577,5=0.7495507603507059 1=pan,2=wye,3=10,4=0.5026260055412137,5=0.9526183602969864 mlr --n2j cat ./reg_test/input/abixy.nidx { "1": "pan", "2": "pan", "3": 1, "4": 0.3467901443380824, "5": 0.7268028627434533 } { "1": "eks", "2": "pan", "3": 2, "4": 0.7586799647899636, "5": 0.5221511083334797 } { "1": "wye", "2": "wye", "3": 3, "4": 0.20460330576630303, "5": 0.33831852551664776 } { "1": "eks", "2": "wye", "3": 4, "4": 0.38139939387114097, "5": 0.13418874328430463 } { "1": "wye", "2": "pan", "3": 5, "4": 0.5732889198020006, "5": 0.8636244699032729 } { "1": "zee", "2": "pan", "3": 6, "4": 0.5271261600918548, "5": 0.49322128674835697 } { "1": "eks", "2": "zee", "3": 7, "4": 0.6117840605678454, "5": 0.1878849191181694 } { "1": "zee", "2": "wye", "3": 8, "4": 0.5985540091064224, "5": 0.976181385699006 } { "1": "hat", "2": "wye", "3": 9, "4": 0.03144187646093577, "5": 0.7495507603507059 } { "1": "pan", "2": "wye", "3": 10, "4": 0.5026260055412137, "5": 0.9526183602969864 } mlr --n2p cat ./reg_test/input/abixy.nidx 1 2 3 4 5 pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --n2x cat ./reg_test/input/abixy.nidx 1 pan 2 pan 3 1 4 0.3467901443380824 5 0.7268028627434533 1 eks 2 pan 3 2 4 0.7586799647899636 5 0.5221511083334797 1 wye 2 wye 3 3 4 0.20460330576630303 5 0.33831852551664776 1 eks 2 wye 3 4 4 0.38139939387114097 5 0.13418874328430463 1 wye 2 pan 3 5 4 0.5732889198020006 5 0.8636244699032729 1 zee 2 pan 3 6 4 0.5271261600918548 5 0.49322128674835697 1 eks 2 zee 3 7 4 0.6117840605678454 5 0.1878849191181694 1 zee 2 wye 3 8 4 0.5985540091064224 5 0.976181385699006 1 hat 2 wye 3 9 4 0.03144187646093577 5 0.7495507603507059 1 pan 2 wye 3 10 4 0.5026260055412137 5 0.9526183602969864 mlr --n2m cat ./reg_test/input/abixy.nidx | 1 | 2 | 3 | 4 | 5 | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | mlr --j2c cat ./reg_test/input/abixy.json a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --j2t cat ./reg_test/input/abixy.json a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --j2d cat ./reg_test/input/abixy.json a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --j2n cat ./reg_test/input/abixy.json pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --j2p cat ./reg_test/input/abixy.json a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --j2x cat ./reg_test/input/abixy.json a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --j2m cat ./reg_test/input/abixy.json | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | mlr --p2c cat ./reg_test/input/abixy.pprint a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --p2t cat ./reg_test/input/abixy.pprint a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --p2d cat ./reg_test/input/abixy.pprint a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --p2n cat ./reg_test/input/abixy.pprint pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --p2j cat ./reg_test/input/abixy.pprint { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --p2x cat ./reg_test/input/abixy.pprint a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --p2m cat ./reg_test/input/abixy.pprint | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | mlr --x2c cat ./reg_test/input/abixy.xtab a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --x2t cat ./reg_test/input/abixy.xtab a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --x2d cat ./reg_test/input/abixy.xtab a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --x2n cat ./reg_test/input/abixy.xtab pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --x2j cat ./reg_test/input/abixy.xtab { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --x2p cat ./reg_test/input/abixy.xtab a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --x2m cat ./reg_test/input/abixy.xtab | a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | ================================================================ LF/CRLF AND AUTODETECT mlr --irs auto --ors lf cat ./reg_test/input/line-term-lf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --irs auto --ors lf cat ./reg_test/input/line-term-crlf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat ./reg_test/input/line-term-lf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr cat ./reg_test/input/line-term-crlf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- mmap nidx mlr --irs auto --ors lf --nidx --fs comma cat ./reg_test/input/line-term-lf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --irs auto --ors lf --nidx --fs comma cat ./reg_test/input/line-term-crlf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --nidx --fs comma cat ./reg_test/input/line-term-lf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --nidx --fs comma cat ./reg_test/input/line-term-crlf.dkvp a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- mmap csvlite mlr --irs auto --ors lf --csvlite cat ./reg_test/input/line-term-lf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --irs auto --ors lf --csvlite cat ./reg_test/input/line-term-crlf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --csvlite cat ./reg_test/input/line-term-lf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --csvlite cat ./reg_test/input/line-term-crlf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 ---------------------------------------------------------------- mmap pprint mlr --irs auto --ors lf --pprint cat ./reg_test/input/line-term-lf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --irs auto --ors lf --pprint cat ./reg_test/input/line-term-crlf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --pprint cat ./reg_test/input/line-term-lf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --pprint cat ./reg_test/input/line-term-crlf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 ---------------------------------------------------------------- mmap xtab mlr --ifs auto --xtab cat ./reg_test/input/line-term-lf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --ifs auto --xtab cat ./reg_test/input/line-term-crlf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --fs auto --xtab cat ./reg_test/input/line-term-lf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --fs auto --xtab cat ./reg_test/input/line-term-crlf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 ---------------------------------------------------------------- mmap xtab mlr --ifs auto --xtab cat ./reg_test/input/line-term-lf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --ifs auto --xtab cat ./reg_test/input/line-term-crlf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --fs auto --xtab cat ./reg_test/input/line-term-lf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --fs auto --xtab cat ./reg_test/input/line-term-crlf.xtab a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 ---------------------------------------------------------------- mmap csv mlr --irs auto --ors lf --csv cat ./reg_test/input/line-term-lf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --irs auto --ors lf --csv cat ./reg_test/input/line-term-crlf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --csv cat ./reg_test/input/line-term-lf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 mlr --csv cat ./reg_test/input/line-term-crlf.csv a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 ---------------------------------------------------------------- mmap json nowrap nostack mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ---------------------------------------------------------------- mmap json yeswrap nostack mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] ---------------------------------------------------------------- mmap json nowrap yesstack mlr --irs auto --json --jvstack cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --irs auto --ors lf --json --jvstack cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json --jvstack cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json --jvstack cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ---------------------------------------------------------------- mmap json yeswrap yesstack mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] ---------------------------------------------------------------- mmap json nowrap nostack mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ---------------------------------------------------------------- mmap json yeswrap nostack mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] ---------------------------------------------------------------- mmap json nowrap yesstack mlr --irs auto --ors lf --json --jvstack cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --irs auto --ors lf --json --jvstack cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json --jvstack cat ./reg_test/input/line-term-lf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --json --jvstack cat ./reg_test/input/line-term-crlf.json { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ---------------------------------------------------------------- mmap json yeswrap yesstack mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json [ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] ================================================================ USER-DEFINED FUNCTIONS AND SUBROUTINES mlr --opprint --from ./reg_test/input/abixy put func f(u,v){return u+v} $o=f(NR*1000,$x) a b i x y o pan pan 1 0.3467901443380824 0.7268028627434533 1000.346790 eks pan 2 0.7586799647899636 0.5221511083334797 2000.758680 wye wye 3 0.20460330576630303 0.33831852551664776 3000.204603 eks wye 4 0.38139939387114097 0.13418874328430463 4000.381399 wye pan 5 0.5732889198020006 0.8636244699032729 5000.573289 zee pan 6 0.5271261600918548 0.49322128674835697 6000.527126 eks zee 7 0.6117840605678454 0.1878849191181694 7000.611784 zee wye 8 0.5985540091064224 0.976181385699006 8000.598554 hat wye 9 0.03144187646093577 0.7495507603507059 9000.031442 pan wye 10 0.5026260055412137 0.9526183602969864 10000.502626 mlr --opprint --from ./reg_test/input/abixy put func f(x,y,z){$nnn=999; int n=10; return $y} $o=f($i,$x,$y) mlr: assignments to $-variables are not valid within func blocks. mlr --opprint --from ./reg_test/input/abixy put subr s(a,b) { $[a] = b } call s("W", 999) a b i x y W pan pan 1 0.3467901443380824 0.7268028627434533 999 eks pan 2 0.7586799647899636 0.5221511083334797 999 wye wye 3 0.20460330576630303 0.33831852551664776 999 eks wye 4 0.38139939387114097 0.13418874328430463 999 wye pan 5 0.5732889198020006 0.8636244699032729 999 zee pan 6 0.5271261600918548 0.49322128674835697 999 eks zee 7 0.6117840605678454 0.1878849191181694 999 zee wye 8 0.5985540091064224 0.976181385699006 999 hat wye 9 0.03144187646093577 0.7495507603507059 999 pan wye 10 0.5026260055412137 0.9526183602969864 999 mlr --opprint --from ./reg_test/input/abixy put func f(x,y,z) { return x + y + z } subr s(a,b) { $[a] = b; $DID = "YES"; } $o = f($x, $y, $i); call s("W", NR); a b i x y o W DID pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 YES eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 YES wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 YES eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 YES wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 YES zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 YES eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 YES zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 YES hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 YES pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 YES mlr --opprint --from ./reg_test/input/abixy put func f(x,y,z) { return x + y + z } subr s(a,b) { $[a] = b; return; $DID = "YES"; } $o = f($x, $y, $i); call s("W", NR); a b i x y o W pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 mlr --from ./reg_test/input/abixy put func f(x,y,z) { return x + y + z } subr s(a,b) { $[a] = b; return 1 # subr must not return value } $o = f($x, $y, $i); call s("W", NR); mlr: return statements within user-defined subroutines must not return a value. mlr --from ./reg_test/input/abixy put func f(x,y,z) { return # func must return value } subr s(a,b) { $[a] = b; } $o = f($x, $y, $i); call s("W", NR); mlr: return statements within user-defined functions must return a value. mlr --from ./reg_test/input/abixy --opprint put func f(x) {return k} for (k,v in $*) {$o=f($x)} a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --from ./reg_test/input/abixy --opprint put subr foo() {print "k is [".k."]"} for (k,v in $*) {call foo()} k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] k is [] a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put func log(x) { return 0 } $o = log($x) mlr: function named "log" must not override a built-in function of the same name. mlr --from ./reg_test/input/abixy put subr log() { print "hello record ". NR } call log() hello record 1 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 hello record 2 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 hello record 3 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 hello record 4 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 hello record 5 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 hello record 6 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 hello record 7 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 hello record 8 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 hello record 9 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 hello record 10 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put $o1 = a; int a=1000+NR; $o2 = a; a=2000+NR; $o3 = a a b i x y o2 o3 pan pan 1 0.3467901443380824 0.7268028627434533 1001 2001 eks pan 2 0.7586799647899636 0.5221511083334797 1002 2002 wye wye 3 0.20460330576630303 0.33831852551664776 1003 2003 eks wye 4 0.38139939387114097 0.13418874328430463 1004 2004 wye pan 5 0.5732889198020006 0.8636244699032729 1005 2005 zee pan 6 0.5271261600918548 0.49322128674835697 1006 2006 eks zee 7 0.6117840605678454 0.1878849191181694 1007 2007 zee wye 8 0.5985540091064224 0.976181385699006 1008 2008 hat wye 9 0.03144187646093577 0.7495507603507059 1009 2009 pan wye 10 0.5026260055412137 0.9526183602969864 1010 2010 mlr --opprint --from ./reg_test/input/abixy put func f(n) { if (is_numeric(n)) { if (n > 0) { return n * f(n-1) } else { return 1 } } # implicitly return absent } $o = f(NR) a b i x y o pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 2 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 24 wye pan 5 0.5732889198020006 0.8636244699032729 120 zee pan 6 0.5271261600918548 0.49322128674835697 720 eks zee 7 0.6117840605678454 0.1878849191181694 5040 zee wye 8 0.5985540091064224 0.976181385699006 40320 hat wye 9 0.03144187646093577 0.7495507603507059 362880 pan wye 10 0.5026260055412137 0.9526183602969864 3628800 mlr --opprint --from ./reg_test/input/abixy head -n 5 then put subr s(n) { print "n = " . n; if (is_numeric(n)) { if (n > 0) { call s(n-1) } } } print ""; call s(NR) n = 1 n = 0 n = 2 n = 1 n = 0 n = 3 n = 2 n = 1 n = 0 n = 4 n = 3 n = 2 n = 1 n = 0 n = 5 n = 4 n = 3 n = 2 n = 1 n = 0 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 mlr --from ./reg_test/input/abixy --opprint put func f(n) { return n+1; } $o1 = f(NR); $o2 = f(f(NR)); $o3 = f(f(f(NR))); $o4 = f(f(f(f(NR)))); $o5 = f(f(f(f(f(NR))))); $o6 = f(f(f(f(f(f(NR)))))); a b i x y o1 o2 o3 o4 o5 o6 pan pan 1 0.3467901443380824 0.7268028627434533 2 3 4 5 6 7 eks pan 2 0.7586799647899636 0.5221511083334797 3 4 5 6 7 8 wye wye 3 0.20460330576630303 0.33831852551664776 4 5 6 7 8 9 eks wye 4 0.38139939387114097 0.13418874328430463 5 6 7 8 9 10 wye pan 5 0.5732889198020006 0.8636244699032729 6 7 8 9 10 11 zee pan 6 0.5271261600918548 0.49322128674835697 7 8 9 10 11 12 eks zee 7 0.6117840605678454 0.1878849191181694 8 9 10 11 12 13 zee wye 8 0.5985540091064224 0.976181385699006 9 10 11 12 13 14 hat wye 9 0.03144187646093577 0.7495507603507059 10 11 12 13 14 15 pan wye 10 0.5026260055412137 0.9526183602969864 11 12 13 14 15 16 mlr --from ./reg_test/input/abixy --opprint put func f(n) { if (n < 2) { return 1 } else { return f(n-1) + f(n-2) } } $o = f(NR) a b i x y o pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 2 wye wye 3 0.20460330576630303 0.33831852551664776 3 eks wye 4 0.38139939387114097 0.13418874328430463 5 wye pan 5 0.5732889198020006 0.8636244699032729 8 zee pan 6 0.5271261600918548 0.49322128674835697 13 eks zee 7 0.6117840605678454 0.1878849191181694 21 zee wye 8 0.5985540091064224 0.976181385699006 34 hat wye 9 0.03144187646093577 0.7495507603507059 55 pan wye 10 0.5026260055412137 0.9526183602969864 89 mlr --from ./reg_test/input/abixy --opprint put func f(n) { if (is_present(@fcache[n])) { return @fcache[n] } else { num rv = 1; if (n >= 2) { rv = f(n-1) + f(n-2) } @fcache[n] = rv; return rv } } $o = f(NR) a b i x y o pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 2 wye wye 3 0.20460330576630303 0.33831852551664776 3 eks wye 4 0.38139939387114097 0.13418874328430463 5 wye pan 5 0.5732889198020006 0.8636244699032729 8 zee pan 6 0.5271261600918548 0.49322128674835697 13 eks zee 7 0.6117840605678454 0.1878849191181694 21 zee wye 8 0.5985540091064224 0.976181385699006 34 hat wye 9 0.03144187646093577 0.7495507603507059 55 pan wye 10 0.5026260055412137 0.9526183602969864 89 mlr --from ./reg_test/input/abixy --opprint put func f(x) { begin {} } mlr: begin statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put func f(x) { end {} } mlr: end statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put subr s(x) { begin {} } mlr: begin statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put subr s(x) { end {} } mlr: end statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put func f(x) { func g(y) {} } mlr: func statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put func f(x) { subr t(y) {} } mlr: subr statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put subr s(x) { func g(y) {} } mlr: func statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put subr s(x) { subr t(y) {} } mlr: subr statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter func f(x) { begin {} }; true mlr: begin statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter func f(x) { end {} }; true mlr: end statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { begin {} }; true mlr: begin statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { end {} }; true mlr: end statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter func f(x) { func g(y) {} }; true mlr: func statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter func f(x) { subr t(y) {} }; true mlr: subr statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { func g(y) {} }; true mlr: func statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { subr t(y) {} }; true mlr: subr statements are only valid at top level. mlr --from ./reg_test/input/abixy --opprint put func log(x) { return $x + 1 } mlr: function named "log" must not override a built-in function of the same name. mlr --from ./reg_test/input/abixy --opprint put func f(x) { return $x + 1 } func f(x) { return $x + 1} mlr: function named "f" has already been defined. mlr --from ./reg_test/input/abixy --opprint put subr s() { } subr s() { } mlr: subroutine named "s" has already been defined. mlr --from ./reg_test/input/abixy --opprint put subr s() { } subr s(x) { } mlr: subroutine named "s" has already been defined. mlr --from ./reg_test/input/abixy --opprint put subr log(text) { print "TEXT IS ".text } call log("NR is ".NR) TEXT IS NR is 1 TEXT IS NR is 2 TEXT IS NR is 3 TEXT IS NR is 4 TEXT IS NR is 5 TEXT IS NR is 6 TEXT IS NR is 7 TEXT IS NR is 8 TEXT IS NR is 9 TEXT IS NR is 10 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --from ./reg_test/input/abixy --opprint put subr log(text) { print "TEXT IS ".text } call log("NR is ".NR) TEXT IS NR is 1 TEXT IS NR is 2 TEXT IS NR is 3 TEXT IS NR is 4 TEXT IS NR is 5 TEXT IS NR is 6 TEXT IS NR is 7 TEXT IS NR is 8 TEXT IS NR is 9 TEXT IS NR is 10 a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 mlr --from ./reg_test/input/abixy --opprint put func f(text) { print "TEXT IS ".text; return text.text } $o = f($a) TEXT IS pan TEXT IS eks TEXT IS wye TEXT IS eks TEXT IS wye TEXT IS zee TEXT IS eks TEXT IS zee TEXT IS hat TEXT IS pan a b i x y o pan pan 1 0.3467901443380824 0.7268028627434533 panpan eks pan 2 0.7586799647899636 0.5221511083334797 ekseks wye wye 3 0.20460330576630303 0.33831852551664776 wyewye eks wye 4 0.38139939387114097 0.13418874328430463 ekseks wye pan 5 0.5732889198020006 0.8636244699032729 wyewye zee pan 6 0.5271261600918548 0.49322128674835697 zeezee eks zee 7 0.6117840605678454 0.1878849191181694 ekseks zee wye 8 0.5985540091064224 0.976181385699006 zeezee hat wye 9 0.03144187646093577 0.7495507603507059 hathat pan wye 10 0.5026260055412137 0.9526183602969864 panpan mlr --from ./reg_test/input/abixy put begin{@x=1} func f(x) { dump; print "hello" } $o=f($i) { "x": 1 } hello a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 { "x": 1 } hello a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 { "x": 1 } hello a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 { "x": 1 } hello a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 { "x": 1 } hello a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 { "x": 1 } hello a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 { "x": 1 } hello a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 { "x": 1 } hello a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 { "x": 1 } hello a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 { "x": 1 } hello a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put begin{@x=1} func f(x) { dump; print "hello"; tee > "x", $* } $o=f($i) mlr: tee statements are not valid within func blocks. mlr --from ./reg_test/input/abixy put begin{@x=1} func f(x) { dump; print "hello"; emit > "x", @* } $o=f($i) mlr: emit statements are not valid within func blocks. mlr --from ./reg_test/input/abixy put func f(x,y) { return 2*y } $o = f($x,$y) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,o=1.453606 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,o=1.044302 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,o=0.676637 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,o=0.268377 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,o=1.727249 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,o=0.986443 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,o=0.375770 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,o=1.952363 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,o=1.499102 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,o=1.905237 mlr -n put -q -f ./reg_test/input/sieve.mlr 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 mlr -n put -q -f ./reg_test/input/mand.mlr -e begin {@verbose = true} RCORN = -2.000000 ICORN = -2.000000 SIDE = 4.000000 IHEIGHT = 50 IWIDTH = 100 MAXITS = 100 LEVELSTEP = 5 CHARS = @X*o-. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX.XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXooXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX**o..*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX*-....-oXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@XXXXXXXXXX*......o*XXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXX**oo*-.-........oo.XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX....................X..o-XXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXX*oo......................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@XXX*XXXXXXXXXXXX**o........................*X*X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@XXXXXXooo***o*.*XX**X..........................o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@XXXXXXXX*-.......-***.............................oXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@XXXXXXXX*@..........Xo............................*XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@XXXX@XXXXXXXX*o@oX...........@...........................oXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .........................................................o*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@XXXXXXXXX*-.oX...........@...........................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@XXXXXXXXXX**@..........*o............................*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@XXXXXXXXXXXXX-........***.............................oXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@XXXXXXXXXXXXoo****o*.XX***@..........................o-XXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@XXXXX*XXXX*XXXXXXX**-........................***XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*.....................@o*XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX*....................*..o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX*ooo*-.o........oo.X*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX**@.....*XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX*o....-o*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXo*o..*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*XXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ mlr --from ./reg_test/input/abixy put -v func f(x) { return x**2 } func g(y) { return y+1 } subr s(a,b,c) { print a.b.c } begin { @a = 0; var ell = 1; print "local1 = ".ell; } end { emit @a; var emm = 2; print "local2 = ".emm; } @a += 1; begin { @b = 0; @c = 0; print "local3 = ".ell; } @b += 2; @c += 3; end { emit @b; emit @c; print "local4 = ".emm; } RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="f", type=FUNC_DEF: text="f", type=NON_SIGIL_NAME: text="x", type=UNTYPED_PARAMETER_DEFINITION. text="func_block", type=STATEMENT_BLOCK: text="return_value", type=RETURN_VALUE: text="**", type=OPERATOR: text="x", type=NONINDEXED_LOCAL_VARIABLE. text="2", type=NUMERIC_LITERAL. text="g", type=FUNC_DEF: text="g", type=NON_SIGIL_NAME: text="y", type=UNTYPED_PARAMETER_DEFINITION. text="func_block", type=STATEMENT_BLOCK: text="return_value", type=RETURN_VALUE: text="+", type=OPERATOR: text="y", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="s", type=SUBR_DEF: text="s", type=NON_SIGIL_NAME: text="a", type=UNTYPED_PARAMETER_DEFINITION. text="b", type=UNTYPED_PARAMETER_DEFINITION. text="c", type=UNTYPED_PARAMETER_DEFINITION. text="subr_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text="a", type=NONINDEXED_LOCAL_VARIABLE. text="b", type=NONINDEXED_LOCAL_VARIABLE. text="c", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="var", type=UNTYPED_LOCAL_DEFINITION: text="ell", type=NONINDEXED_LOCAL_VARIABLE. text="1", type=NUMERIC_LITERAL. text="print", type=PRINT: text=".", type=OPERATOR: text="local1 = ", type=STRING_LITERAL. text="ell", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="stream", type=STREAM: text="var", type=UNTYPED_LOCAL_DEFINITION: text="emm", type=NONINDEXED_LOCAL_VARIABLE. text="2", type=NUMERIC_LITERAL. text="print", type=PRINT: text=".", type=OPERATOR: text="local2 = ", type=STRING_LITERAL. text="emm", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="begin", type=BEGIN: text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="print", type=PRINT: text=".", type=OPERATOR: text="local3 = ", type=STRING_LITERAL. text="ell", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="3", type=NUMERIC_LITERAL. text="end", type=END: text="end_block", type=STATEMENT_BLOCK: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="stream", type=STREAM: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="stream", type=STREAM: text="print", type=PRINT: text=".", type=OPERATOR: text="local4 = ", type=STRING_LITERAL. text="emm", type=NONINDEXED_LOCAL_VARIABLE. text=">", type=FILE_WRITE: text="stdout", type=STDOUT: BLOCKED AST: FUNCTION DEFINITION: text="f", type=FUNC_DEF: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 text="f", type=NON_SIGIL_NAME: text="x", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="func_block", type=STATEMENT_BLOCK: text="return_value", type=RETURN_VALUE: text="**", type=OPERATOR: text="x", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="2", type=NUMERIC_LITERAL. FUNCTION DEFINITION: text="g", type=FUNC_DEF: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 text="g", type=NON_SIGIL_NAME: text="y", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="func_block", type=STATEMENT_BLOCK: text="return_value", type=RETURN_VALUE: text="+", type=OPERATOR: text="y", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="1", type=NUMERIC_LITERAL. SUBROUTINE DEFINITION: text="s", type=SUBR_DEF: subframe_var_count=4 max_subframe_depth=1 max_var_depth=4 text="s", type=NON_SIGIL_NAME: text="a", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="b", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="c", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="subr_block", type=STATEMENT_BLOCK: text="print", type=PRINT: text=".", type=OPERATOR: text=".", type=OPERATOR: text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="var", type=UNTYPED_LOCAL_DEFINITION: text="ell", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="1", type=NUMERIC_LITERAL. text="print", type=PRINT: text=".", type=OPERATOR: text="local1 = ", type=STRING_LITERAL. text="ell", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: BEGIN-BLOCK: text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="begin_block", type=STATEMENT_BLOCK: text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="0", type=NUMERIC_LITERAL. text="print", type=PRINT: text=".", type=OPERATOR: text="local3 = ", type=STRING_LITERAL. text="ell", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: END-BLOCK: text="end", type=END: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 text="end_block", type=STATEMENT_BLOCK: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="stream", type=STREAM: text="var", type=UNTYPED_LOCAL_DEFINITION: text="emm", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="2", type=NUMERIC_LITERAL. text="print", type=PRINT: text=".", type=OPERATOR: text="local2 = ", type=STRING_LITERAL. text="emm", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: END-BLOCK: text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="end_block", type=STATEMENT_BLOCK: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="stream", type=STREAM: text="emit", type=EMIT: text="emit", type=EMIT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="stream", type=STREAM: text="print", type=PRINT: text=".", type=OPERATOR: text="local4 = ", type=STRING_LITERAL. text="emm", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text=">", type=FILE_WRITE: text="stdout", type=STDOUT: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="a", type=STRING_LITERAL. text="1", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="b", type=STRING_LITERAL. text="2", type=NUMERIC_LITERAL. text="=", type=OOSVAR_ASSIGNMENT: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="+", type=OPERATOR: text="oosvar_keylist", type=OOSVAR_KEYLIST: text="c", type=STRING_LITERAL. text="3", type=NUMERIC_LITERAL. local1 = 1 local3 = a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 local2 = 2 local4 = a=10 b=20 c=30 ================================================================ LOCALVAR SCOPE AND EXTENT mlr --opprint --from ./reg_test/input/abixy put func f() { var a = 1; if (NR > 5) { a = 2; } return a; } func g() { var b = 1; if (NR > 5) { var b = 2; } return b; } func h() { var a = 1; if (NR > 5) { a = 2; return a; } return a; } func i() { var b = 1; if (NR > 5) { var b = 2; return b; } return b; } $of = f(); $og = g(); $oh = h(); $oi = i(); a b i x y of og oh oi pan pan 1 0.3467901443380824 0.7268028627434533 1 1 1 1 eks pan 2 0.7586799647899636 0.5221511083334797 1 1 1 1 wye wye 3 0.20460330576630303 0.33831852551664776 1 1 1 1 eks wye 4 0.38139939387114097 0.13418874328430463 1 1 1 1 wye pan 5 0.5732889198020006 0.8636244699032729 1 1 1 1 zee pan 6 0.5271261600918548 0.49322128674835697 2 1 2 2 eks zee 7 0.6117840605678454 0.1878849191181694 2 1 2 2 zee wye 8 0.5985540091064224 0.976181385699006 2 1 2 2 hat wye 9 0.03144187646093577 0.7495507603507059 2 1 2 2 pan wye 10 0.5026260055412137 0.9526183602969864 2 1 2 2 mlr --opprint --from ./reg_test/input/abixy put func f() { var a = 2; var b = 2; if (NR > 5) { var a = 3; b = 3; } return 1000 * a + b; } a = 1; b = 1; $ab = f(); $oa = a; $ob = b; a b i x y ab oa ob pan pan 1 0.3467901443380824 0.7268028627434533 2002 1 1 eks pan 2 0.7586799647899636 0.5221511083334797 2002 1 1 wye wye 3 0.20460330576630303 0.33831852551664776 2002 1 1 eks wye 4 0.38139939387114097 0.13418874328430463 2002 1 1 wye pan 5 0.5732889198020006 0.8636244699032729 2002 1 1 zee pan 6 0.5271261600918548 0.49322128674835697 2003 1 1 eks zee 7 0.6117840605678454 0.1878849191181694 2003 1 1 zee wye 8 0.5985540091064224 0.976181385699006 2003 1 1 hat wye 9 0.03144187646093577 0.7495507603507059 2003 1 1 pan wye 10 0.5026260055412137 0.9526183602969864 2003 1 1 ================================================================ LOCALVAR UNSETS mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp 9 { "1": 9 } { "1": { "2": 9 } } { "1": 9 } { "1": { "2": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": { "2": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { } { "1": { "2": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } { } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u ./reg_test/input/unset1.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } { "1": { } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp 9 { "1": 9 } { "1": { "2": 9 } } { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } { "1": { "3": 9 } } { "1": 9 } { "1": { "3": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } { "4": 9 } { "4": { "6": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": { "2": 9 } } 9 { "1": 9 } { "1": { "3": 9 } } 9 { "1": { "3": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } 9 { "4": { "6": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { } { "1": { "2": 9 } } 9 { "1": 9 } { "1": { "3": 9 } } 9 { } { "1": { "3": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } 9 { "1": 9 } { "1": { "3": 9 } } 9 { "1": 9 } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } 9 { "4": 9 } { "4": { "6": 9 } } 9 { "4": 9 } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } { } 9 { "1": 9 } { "1": { "3": 9 } } 9 { "1": 9 } { } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u ./reg_test/input/unset4.dkvp 9 { "1": 9 } { "1": { "2": 9 } } 9 { "1": 9 } { "1": { } } 9 { "1": 9 } { "1": { "3": 9 } } 9 { "1": 9 } { "1": { "3": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "5": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } 9 { "4": 9 } { "4": { "6": 9 } } ================================================================ LOCALVAR TYPEDECLs mlr --from ./reg_test/input/abixy put str a = $a; a = "a:".NR; $c = a; a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=a:1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=a:2 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=a:3 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=a:4 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=a:5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=a:6 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=a:7 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=a:8 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=a:9 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=a:10 mlr --from ./reg_test/input/abixy put str a = $a; a = NR; $c = a; mlr: string type assertion for variable a unmet by value 1 with type int. mlr --from ./reg_test/input/abixy put int a = $a; a = NR; $c = a; mlr: int type assertion for variable a unmet by value "pan" with type string. mlr --from ./reg_test/input/abixy put int i = $i; i = NR; $c = a; a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ FORBIND TYPEDECLs mlr --from ./reg_test/input/abixy put for (int i = 0; i < $i; i += 1) { $c = i * 10; } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=0 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=10 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=20 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=30 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=40 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=50 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=60 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=70 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=80 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=90 mlr --from ./reg_test/input/abixy put for (float i = 0; i < $i; i += 1) { $c = i * 10; } mlr: float type assertion for variable i unmet by value 0 with type int. mlr --from ./reg_test/input/abixy put for (int i = 0; i < $i; i += 1) { i += 2; $c = i; } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=2 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=2 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=2 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=5 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=5 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=8 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=8 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=8 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=11 mlr --from ./reg_test/input/abixy put for (int i = 0; i < $i; i += 1) { i += 1.5; $c = i; } mlr: int type assertion for variable i unmet by value 1.500000 with type float. mlr --from ./reg_test/input/abixy put for (int i = 0; i < $i; i += 1) { i += 1.0; $c = i; } mlr: int type assertion for variable i unmet by value 1.000000 with type float. mlr --from ./reg_test/input/abixy put for (num i = 0; i < $i; i += 1) { i += 1.0; $c = i; } a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=1.000000 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=1.000000 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=3.000000 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=3.000000 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=5.000000 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=5.000000 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=7.000000 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=7.000000 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=9.000000 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=9.000000 ================================================================ ARGPASS TYPEDECLs mlr --from ./reg_test/input/abixy put func f(int i) { return i+3; } $c = f($i); a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=4 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=5 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=6 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=7 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=8 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=9 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=10 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=11 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=12 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=13 mlr --from ./reg_test/input/abixy put func f(int i) { return i+3; } $c = f($x); mlr: int type assertion for variable i unmet by value 0.346790 with type float. mlr --from ./reg_test/input/abixy put func f(num i): int { return i+3.45; } $c = f($x); mlr: function f returned type float, not matching typedecl int. mlr --from ./reg_test/input/abixy put func f(num i): int { return i+3.45; } $c = f($i); mlr: function f returned type float, not matching typedecl int. mlr --from ./reg_test/input/abixy put func f(num i): int { i = "a"; return 2; } $c = f($x); mlr: numeric type assertion for variable i unmet by value "a" with type string. mlr --from ./reg_test/input/abixy put subr s(int i) { print i+3; } call s($i); 4 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 5 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 6 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 7 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 8 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 9 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 10 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 11 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 12 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 13 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put subr s(int i) { print i+3; } call s($x); mlr: int type assertion for variable i unmet by value 0.346790 with type float. mlr --from ./reg_test/input/abixy put subr s(num i) { i = "a"; print 2; } call s($x); mlr: numeric type assertion for variable i unmet by value "a" with type string. ================================================================ LOCAL MAP-VARIABLE WRITE/READ mlr --from ./reg_test/input/xyz345 put -v -a $s = a; $t = b[$x]; $u = c[$x][$y]; $v = d[$x][$y][$z]; RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="a", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="u", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="v", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK ADD FOR ABSENT s @ 0u0 READ a ABSENT @ 0s0 READ b ABSENT @ 0s0 READ c ABSENT @ 0s0 READ d ABSENT @ 0s0 BLOCK main_block subframe_var_count=1 max_subframe_depth=1 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] SUBFRAME [main_block] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 NODE a 0s0 (0:0) -> 0 NODE b 0s0 (0:0) -> 0 NODE c 0s0 (0:0) -> 0 NODE d 0s0 (0:0) -> 0 BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 text="=", type=SREC_ASSIGNMENT: text="s", type=FIELD_NAME. text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="=", type=SREC_ASSIGNMENT: text="t", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="u", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="v", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. x=3,y=4,z=5 mlr --from ./reg_test/input/xyz345 put -v -a d[$x][$y][$z] = 9; $d = d[$x][$y][$z]; RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK ADD FOR ABSENT s @ 0u0 ADD WRITE d @ 1s0 READ d PRESENT @ 1s0 BLOCK main_block subframe_var_count=2 max_subframe_depth=1 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] SUBFRAME [main_block] var_count_below=0 var_count_at=2 max_var_depth_so_far=2 subframe_depth=0 NODE d 1s0 (0:0) -> 1 NODE d 1s0 (0:0) -> 1 BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. x=3,y=4,z=5,d=9 mlr --from ./reg_test/input/xyz345 put -v -a a = 6; b[$x] = 7; c[$x][$y] = 8; d[$x][$y][$z] = 9; $a = a; $b = b[$x]; $c = c[$x][$y]; $d = d[$x][$y][$z]; RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="a", type=NONINDEXED_LOCAL_VARIABLE. text="6", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="7", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="8", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="a", type=FIELD_NAME. text="a", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="b", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK ADD FOR ABSENT s @ 0u0 ADD WRITE a @ 1s0 ADD WRITE b @ 2s0 ADD WRITE c @ 3s0 ADD WRITE d @ 4s0 READ a PRESENT @ 1s0 READ b PRESENT @ 2s0 READ c PRESENT @ 3s0 READ d PRESENT @ 4s0 BLOCK main_block subframe_var_count=5 max_subframe_depth=1 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] SUBFRAME [main_block] var_count_below=0 var_count_at=5 max_var_depth_so_far=5 subframe_depth=0 NODE a 1s0 (0:0) -> 1 NODE b 2s0 (0:0) -> 2 NODE c 3s0 (0:0) -> 3 NODE d 4s0 (0:0) -> 4 NODE a 1s0 (0:0) -> 1 NODE b 2s0 (0:0) -> 2 NODE c 3s0 (0:0) -> 3 NODE d 4s0 (0:0) -> 4 BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=5 max_subframe_depth=1 max_var_depth=5 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="6", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="x", type=FIELD_NAME. text="7", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="8", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="a", type=FIELD_NAME. text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="=", type=SREC_ASSIGNMENT: text="b", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. x=3,y=4,z=5,a=6,b=7,c=8,d=9 mlr --from ./reg_test/input/xyz345 put -v -a a = 6; b[$x] = 7; c[$x][$y] = 8; d[$x][$y][$z] = 9; $a0 = a; $a1 = a[$x]; $a2 = a[$x][$y]; $a3 = a[$x][$y][$z]; $b0 = b; $b1 = b[$x]; $b2 = b[$x][$y]; $b3 = b[$x][$y][$z]; $c0 = c; $c1 = c[$x]; $c2 = c[$x][$y]; $c3 = c[$x][$y][$z]; $d0 = d; $d1 = d[$x]; $d2 = d[$x][$y]; $d3 = d[$x][$y][$z]; RAW AST: AST ROOT: text="block", type=STATEMENT_BLOCK: text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="a", type=NONINDEXED_LOCAL_VARIABLE. text="6", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="7", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="8", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="a0", type=FIELD_NAME. text="a", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="a1", type=FIELD_NAME. text="a", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="a2", type=FIELD_NAME. text="a", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="a3", type=FIELD_NAME. text="a", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="b0", type=FIELD_NAME. text="b", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="b1", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="b2", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="b3", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c0", type=FIELD_NAME. text="c", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="c1", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c2", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c3", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d0", type=FIELD_NAME. text="d", type=NONINDEXED_LOCAL_VARIABLE. text="=", type=SREC_ASSIGNMENT: text="d1", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d2", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d3", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK ADD FOR ABSENT s @ 0u0 ADD WRITE a @ 1s0 ADD WRITE b @ 2s0 ADD WRITE c @ 3s0 ADD WRITE d @ 4s0 READ a PRESENT @ 1s0 READ a PRESENT @ 1s0 READ a PRESENT @ 1s0 READ a PRESENT @ 1s0 READ b PRESENT @ 2s0 READ b PRESENT @ 2s0 READ b PRESENT @ 2s0 READ b PRESENT @ 2s0 READ c PRESENT @ 3s0 READ c PRESENT @ 3s0 READ c PRESENT @ 3s0 READ c PRESENT @ 3s0 READ d PRESENT @ 4s0 READ d PRESENT @ 4s0 READ d PRESENT @ 4s0 READ d PRESENT @ 4s0 BLOCK main_block subframe_var_count=5 max_subframe_depth=1 ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] SUBFRAME [main_block] var_count_below=0 var_count_at=5 max_var_depth_so_far=5 subframe_depth=0 NODE a 1s0 (0:0) -> 1 NODE b 2s0 (0:0) -> 2 NODE c 3s0 (0:0) -> 3 NODE d 4s0 (0:0) -> 4 NODE a 1s0 (0:0) -> 1 NODE a 1s0 (0:0) -> 1 NODE a 1s0 (0:0) -> 1 NODE a 1s0 (0:0) -> 1 NODE b 2s0 (0:0) -> 2 NODE b 2s0 (0:0) -> 2 NODE b 2s0 (0:0) -> 2 NODE b 2s0 (0:0) -> 2 NODE c 3s0 (0:0) -> 3 NODE c 3s0 (0:0) -> 3 NODE c 3s0 (0:0) -> 3 NODE c 3s0 (0:0) -> 3 NODE d 4s0 (0:0) -> 4 NODE d 4s0 (0:0) -> 4 NODE d 4s0 (0:0) -> 4 NODE d 4s0 (0:0) -> 4 BLOCKED AST: MAIN BLOCK: text="main_block", type=STATEMENT_BLOCK: subframe_var_count=5 max_subframe_depth=1 max_var_depth=5 text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="6", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="x", type=FIELD_NAME. text="7", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="8", type=NUMERIC_LITERAL. text="=", type=INDEXED_LOCAL_ASSIGNMENT: text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="9", type=NUMERIC_LITERAL. text="=", type=SREC_ASSIGNMENT: text="a0", type=FIELD_NAME. text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="=", type=SREC_ASSIGNMENT: text="a1", type=FIELD_NAME. text="a", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="a2", type=FIELD_NAME. text="a", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="a3", type=FIELD_NAME. text="a", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="b0", type=FIELD_NAME. text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="=", type=SREC_ASSIGNMENT: text="b1", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="b2", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="b3", type=FIELD_NAME. text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c0", type=FIELD_NAME. text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="=", type=SREC_ASSIGNMENT: text="c1", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c2", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="c3", type=FIELD_NAME. text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d0", type=FIELD_NAME. text="d", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="=", type=SREC_ASSIGNMENT: text="d1", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="x", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d2", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="=", type=SREC_ASSIGNMENT: text="d3", type=FIELD_NAME. text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 text="x", type=FIELD_NAME. text="y", type=FIELD_NAME. text="z", type=FIELD_NAME. x=3,y=4,z=5,a0=6,b1=7,c2=8,d3=9 ================================================================ LOCAL MAP-VARIABLE TYPE-DECL mlr --from ./reg_test/input/xyz345 put map a = {}; x=3,y=4,z=5 mlr --from ./reg_test/input/xyz345 put map a = {}; a[1]=2; a[3][4]=5; x=3,y=4,z=5 mlr --from ./reg_test/input/xyz345 put map a = {}; a=2; a[3][4]=5; mlr: map type assertion for variable a unmet by value 2 with type int. mlr --from ./reg_test/input/xyz345 put map a = {}; a[3][4]=5; a=2; mlr: map type assertion for variable a unmet by value 2 with type int. ================================================================ TRIPLE-FORs mlr --opprint --from ./reg_test/input/abixy put num sum = 0; num a = 1; for (;;) { if (a > NR) { break; } sum += a; a += 1 } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 10 wye pan 5 0.5732889198020006 0.8636244699032729 15 zee pan 6 0.5271261600918548 0.49322128674835697 21 eks zee 7 0.6117840605678454 0.1878849191181694 28 zee wye 8 0.5985540091064224 0.976181385699006 36 hat wye 9 0.03144187646093577 0.7495507603507059 45 pan wye 10 0.5026260055412137 0.9526183602969864 55 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; num a = 1; for (;;) { if (a > NR) { break; } sum += a; a += 1 } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 10 wye pan 5 0.5732889198020006 0.8636244699032729 15 zee pan 6 0.5271261600918548 0.49322128674835697 21 eks zee 7 0.6117840605678454 0.1878849191181694 28 zee wye 8 0.5985540091064224 0.976181385699006 36 hat wye 9 0.03144187646093577 0.7495507603507059 45 pan wye 10 0.5026260055412137 0.9526183602969864 55 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; for (num a = 1; ;) { if (a > NR) { break; } sum += a; a += 1 } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 10 wye pan 5 0.5732889198020006 0.8636244699032729 15 zee pan 6 0.5271261600918548 0.49322128674835697 21 eks zee 7 0.6117840605678454 0.1878849191181694 28 zee wye 8 0.5985540091064224 0.976181385699006 36 hat wye 9 0.03144187646093577 0.7495507603507059 45 pan wye 10 0.5026260055412137 0.9526183602969864 55 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; num a = 1; for (; ; a += 1) { if (a > NR) { break; } sum += a; } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 10 wye pan 5 0.5732889198020006 0.8636244699032729 15 zee pan 6 0.5271261600918548 0.49322128674835697 21 eks zee 7 0.6117840605678454 0.1878849191181694 28 zee wye 8 0.5985540091064224 0.976181385699006 36 hat wye 9 0.03144187646093577 0.7495507603507059 45 pan wye 10 0.5026260055412137 0.9526183602969864 55 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; for (num a=1; ; a += 1) { if (a > NR) { break; } sum += a; } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 10 wye pan 5 0.5732889198020006 0.8636244699032729 15 zee pan 6 0.5271261600918548 0.49322128674835697 21 eks zee 7 0.6117840605678454 0.1878849191181694 28 zee wye 8 0.5985540091064224 0.976181385699006 36 hat wye 9 0.03144187646093577 0.7495507603507059 45 pan wye 10 0.5026260055412137 0.9526183602969864 55 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; for (num a=1; a <= NR; a += 1) { sum += a; } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 10 wye pan 5 0.5732889198020006 0.8636244699032729 15 zee pan 6 0.5271261600918548 0.49322128674835697 21 eks zee 7 0.6117840605678454 0.1878849191181694 28 zee wye 8 0.5985540091064224 0.976181385699006 36 hat wye 9 0.03144187646093577 0.7495507603507059 45 pan wye 10 0.5026260055412137 0.9526183602969864 55 mlr put num a = 100; num b = 100; for (num a = 200, b = 300; a <= 210; a += 1, b += 1) { print "a:".a.",b:".b } $oa = a; $ob = b; a:200,b:300 a:201,b:301 a:202,b:302 a:203,b:303 a:204,b:304 a:205,b:305 a:206,b:306 a:207,b:307 a:208,b:308 a:209,b:309 a:210,b:310 x=1,oa=100,ob=311 mlr --from ./reg_test/input/abixy put for ( ; $x <= 10; $x += 1) { } a=pan,b=pan,i=1,x=10.346790,y=0.7268028627434533 a=eks,b=pan,i=2,x=10.758680,y=0.5221511083334797 a=wye,b=wye,i=3,x=10.204603,y=0.33831852551664776 a=eks,b=wye,i=4,x=10.381399,y=0.13418874328430463 a=wye,b=pan,i=5,x=10.573289,y=0.8636244699032729 a=zee,b=pan,i=6,x=10.527126,y=0.49322128674835697 a=eks,b=zee,i=7,x=10.611784,y=0.1878849191181694 a=zee,b=wye,i=8,x=10.598554,y=0.976181385699006 a=hat,b=wye,i=9,x=10.031442,y=0.7495507603507059 a=pan,b=wye,i=10,x=10.502626,y=0.9526183602969864 mlr --opprint --from ./reg_test/input/abixy put num a = 100; b = 200; @c = 300; $d = 400; for (num i = 1; i < 1024; i *= 2) { a += 1; b += 1; @c += 1; $d += 1; $oa = a; $ob = b; $oc = @c; $od = $d; } a b i x y d oa ob oc od pan pan 1 0.3467901443380824 0.7268028627434533 410 110 210 310 410 eks pan 2 0.7586799647899636 0.5221511083334797 410 110 210 310 410 wye wye 3 0.20460330576630303 0.33831852551664776 410 110 210 310 410 eks wye 4 0.38139939387114097 0.13418874328430463 410 110 210 310 410 wye pan 5 0.5732889198020006 0.8636244699032729 410 110 210 310 410 zee pan 6 0.5271261600918548 0.49322128674835697 410 110 210 310 410 eks zee 7 0.6117840605678454 0.1878849191181694 410 110 210 310 410 zee wye 8 0.5985540091064224 0.976181385699006 410 110 210 310 410 hat wye 9 0.03144187646093577 0.7495507603507059 410 110 210 310 410 pan wye 10 0.5026260055412137 0.9526183602969864 410 110 210 310 410 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; for (num a = 1; a <= 10; a += 1) { continue; sum += a; } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 0 eks pan 2 0.7586799647899636 0.5221511083334797 0 wye wye 3 0.20460330576630303 0.33831852551664776 0 eks wye 4 0.38139939387114097 0.13418874328430463 0 wye pan 5 0.5732889198020006 0.8636244699032729 0 zee pan 6 0.5271261600918548 0.49322128674835697 0 eks zee 7 0.6117840605678454 0.1878849191181694 0 zee wye 8 0.5985540091064224 0.976181385699006 0 hat wye 9 0.03144187646093577 0.7495507603507059 0 pan wye 10 0.5026260055412137 0.9526183602969864 0 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; for (num a = 1; a <= 10; a += 1) { sum += a; break; } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 1 wye wye 3 0.20460330576630303 0.33831852551664776 1 eks wye 4 0.38139939387114097 0.13418874328430463 1 wye pan 5 0.5732889198020006 0.8636244699032729 1 zee pan 6 0.5271261600918548 0.49322128674835697 1 eks zee 7 0.6117840605678454 0.1878849191181694 1 zee wye 8 0.5985540091064224 0.976181385699006 1 hat wye 9 0.03144187646093577 0.7495507603507059 1 pan wye 10 0.5026260055412137 0.9526183602969864 1 mlr --opprint --from ./reg_test/input/abixy put num sum = 0; for (num a = 1; a <= NR; a += 1) { if (a == 4 || a == 5) { continue; } if (a == 8) { break; } sum += a; } $z = sum a b i x y z pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 3 wye wye 3 0.20460330576630303 0.33831852551664776 6 eks wye 4 0.38139939387114097 0.13418874328430463 6 wye pan 5 0.5732889198020006 0.8636244699032729 6 zee pan 6 0.5271261600918548 0.49322128674835697 12 eks zee 7 0.6117840605678454 0.1878849191181694 19 zee wye 8 0.5985540091064224 0.976181385699006 19 hat wye 9 0.03144187646093577 0.7495507603507059 19 pan wye 10 0.5026260055412137 0.9526183602969864 19 mlr --opprint --from ./reg_test/input/abixy put for ($o1 = 1; ; $o3 = 3) { break; } a b i x y o1 pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 1 wye wye 3 0.20460330576630303 0.33831852551664776 1 eks wye 4 0.38139939387114097 0.13418874328430463 1 wye pan 5 0.5732889198020006 0.8636244699032729 1 zee pan 6 0.5271261600918548 0.49322128674835697 1 eks zee 7 0.6117840605678454 0.1878849191181694 1 zee wye 8 0.5985540091064224 0.976181385699006 1 hat wye 9 0.03144187646093577 0.7495507603507059 1 pan wye 10 0.5026260055412137 0.9526183602969864 1 mlr --opprint --from ./reg_test/input/abixy put for ($o1 = 1; $o1 < NR; $o1 += 1) { } a b i x y o1 pan pan 1 0.3467901443380824 0.7268028627434533 1 eks pan 2 0.7586799647899636 0.5221511083334797 2 wye wye 3 0.20460330576630303 0.33831852551664776 3 eks wye 4 0.38139939387114097 0.13418874328430463 4 wye pan 5 0.5732889198020006 0.8636244699032729 5 zee pan 6 0.5271261600918548 0.49322128674835697 6 eks zee 7 0.6117840605678454 0.1878849191181694 7 zee wye 8 0.5985540091064224 0.976181385699006 8 hat wye 9 0.03144187646093577 0.7495507603507059 9 pan wye 10 0.5026260055412137 0.9526183602969864 10 mlr --opprint --from ./reg_test/input/abixy put for ($o1 = 1, $o2 = 2; $o3 = 3; $o4 = 4) { } mlr: the final triple-for continutation statement must be a bare boolean. mlr --opprint --from ./reg_test/input/abixy put for ($o1 = 1, $o2 = 2; $o3 < 3, $o4 = 4; $o5 = 5) { break; } mlr: the final triple-for continutation statement must be a bare boolean. mlr --opprint --from ./reg_test/input/abixy put $o4 = 0; for ($o1 = 1, $o2 = 2; $o3 = 3, $o4 < 4; $o5 = 5) { break; } a b i x y o4 o1 o2 o3 pan pan 1 0.3467901443380824 0.7268028627434533 0 1 2 3 eks pan 2 0.7586799647899636 0.5221511083334797 0 1 2 3 wye wye 3 0.20460330576630303 0.33831852551664776 0 1 2 3 eks wye 4 0.38139939387114097 0.13418874328430463 0 1 2 3 wye pan 5 0.5732889198020006 0.8636244699032729 0 1 2 3 zee pan 6 0.5271261600918548 0.49322128674835697 0 1 2 3 eks zee 7 0.6117840605678454 0.1878849191181694 0 1 2 3 zee wye 8 0.5985540091064224 0.976181385699006 0 1 2 3 hat wye 9 0.03144187646093577 0.7495507603507059 0 1 2 3 pan wye 10 0.5026260055412137 0.9526183602969864 0 1 2 3 ================================================================ MAPVARS IN SCALAR FUNCTION-CALL CONTEXTS mlr --from ./reg_test/input/abixy put $z=strlen($*) mlr: $* is not valid within scalar contexts. mlr --from ./reg_test/input/abixy put $z=strlen({}) mlr: map-literals are not valid within scalar contexts. mlr --from ./reg_test/input/abixy put a={}; $z=strlen(a) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ================================================================ MAPVAR ASSIGNMENTS TO FULL SREC mlr --from ./reg_test/input/xyz2 put $* = {"a":1, "b": {"x":8,"y":9}, "c":3} a=1,c=3 a=1,c=3 mlr --from ./reg_test/input/xyz2 put $* = $* x=3,y=4,z=5 x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @a = 1; $* = @a mlr --from ./reg_test/input/xyz2 put @b[1] = 2; $* = @b 1=2 1=2 mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; $* = @c mlr --from ./reg_test/input/xyz2 put @a = 1; $* = @* a=1 a=1 mlr --from ./reg_test/input/xyz2 put @b[1] = 2; $* = @* mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; $* = @* mlr --from ./reg_test/input/xyz2 put a = 1; $* = a mlr --from ./reg_test/input/xyz2 put b[1] = 2; $* = b 1=2 1=2 mlr --from ./reg_test/input/xyz2 put c[1][2] = 3; $* = c mlr --from ./reg_test/input/xyz2 put $* = 3 mlr --from ./reg_test/input/xyz2 put func map_valued_func() { return {"a":1,"b":2} } map m = map_valued_func(); $* = m; a=1,b=2 a=1,b=2 mlr --from ./reg_test/input/xyz2 put func map_valued_func() { return {"a":1,"b":2} } $* = map_valued_func(); a=1,b=2 a=1,b=2 ================================================================ MAPVAR ASSIGNMENTS TO FULL OOSVAR mlr --from ./reg_test/input/xyz2 put @* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } x=3,y=4,z=5 { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @* = $*; dump { "x": 3, "y": 4, "z": 5 } x=3,y=4,z=5 { "x": 6, "y": 7, "u": 8 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @* = @*; dump { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } x=3,y=4,z=5 { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @a = 1; @* = @a; dump { } x=3,y=4,z=5 { } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @b[1] = 2; @* = @b; dump { "1": 2 } x=3,y=4,z=5 { "1": 2 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; @* = @c; dump { "1": { "2": 3 } } x=3,y=4,z=5 { "1": { "2": 3 } } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @a = 1; @* = @*; dump { "a": 1 } x=3,y=4,z=5 { "a": 1 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @b[1] = 2; @* = @*; dump { "b": { "1": 2 } } x=3,y=4,z=5 { "b": { "1": 2 } } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; @* = @*; dump { "c": { "1": { "2": 3 } } } x=3,y=4,z=5 { "c": { "1": { "2": 3 } } } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put a = 1; @* = a; dump { } x=3,y=4,z=5 { } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put b[1] = 2; @* = b; dump { "1": 2 } x=3,y=4,z=5 { "1": 2 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put c[1][2] = 3; @* = c; dump { "1": { "2": 3 } } x=3,y=4,z=5 { "1": { "2": 3 } } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put @* = 3 x=3,y=4,z=5 x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put func map_valued_func() { return {"a":1,"b":2} } map m = map_valued_func(); @* = m; dump { "a": 1, "b": 2 } x=3,y=4,z=5 { "a": 1, "b": 2 } x=6,y=7,u=8 mlr --from ./reg_test/input/xyz2 put func map_valued_func() { return {"a":1,"b":2} } @* = map_valued_func(); dump { "a": 1, "b": 2 } x=3,y=4,z=5 { "a": 1, "b": 2 } x=6,y=7,u=8 ================================================================ MAPVAR ASSIGNMENTS TO OOSVAR mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q @o = @o; dump @o mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @o = @*; dump { "o": { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } } { "o": { "o": { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } } } { "o": { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } } { "o": { "o": { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } } } mlr --from ./reg_test/input/xyz2 put -q @o = $*; dump @o { "x": 3, "y": 4, "z": 5 } { "x": 6, "y": 7, "u": 8 } mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o; @o = @o; dump @o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; @o = @o; dump @o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q @a = 1; @o = @a; dump @o 1 1 mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; @o = @b; dump @o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; @o = @c; dump @o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q @a = 1; @o = @*; dump @o { "a": 1 } { "a": 1, "o": { "a": 1 } } mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; @o = @*; dump @o { "b": { "1": 2 } } { "b": { "1": 2 }, "o": { "b": { "1": 2 } } } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; @o = @*; dump @o { "c": { "1": { "2": 3 } } } { "c": { "1": { "2": 3 } }, "o": { "c": { "1": { "2": 3 } } } } mlr --from ./reg_test/input/xyz2 put -q a = 1; @o = a; dump @o 1 1 mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; @o = b; dump @o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; @o = c; dump @o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} @o = map_valued_func(); dump @o { "a": 1, "b": 2 } { "a": 1, "b": 2 } ================================================================ MAPVAR ASSIGNMENTS TO MAP-TYPED LOCAL mlr --from ./reg_test/input/xyz2 put -q map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q map o = @o; dump o mlr: map type assertion for variable o unmet by value "" with type absent. mlr --from ./reg_test/input/xyz2 put -q map o = $*; dump o { "x": 3, "y": 4, "z": 5 } { "x": 6, "y": 7, "u": 8 } mlr --from ./reg_test/input/xyz2 put -q map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q @a = 1; map o = @a; dump o mlr: map type assertion for variable o unmet by value 1 with type int. mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; map o = @b; dump o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; map o = @c; dump o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q @a = 1; map o = @*; dump o { "a": 1 } { "a": 1 } mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; map o = @*; dump o { "b": { "1": 2 } } { "b": { "1": 2 } } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; map o = @*; dump o { "c": { "1": { "2": 3 } } } { "c": { "1": { "2": 3 } } } mlr --from ./reg_test/input/xyz2 put -q a = 1; map o = a; dump o mlr: map type assertion for variable o unmet by value 1 with type int. mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; map o = b; dump o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; map o = c; dump o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} map o = map_valued_func(); dump o { "a": 1, "b": 2 } { "a": 1, "b": 2 } ================================================================ MAPVAR ASSIGNMENTS TO VAR-TYPED LOCAL mlr --from ./reg_test/input/xyz2 put -q var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q var o = @o; dump o mlr --from ./reg_test/input/xyz2 put -q var o = $*; dump o { "x": 3, "y": 4, "z": 5 } { "x": 6, "y": 7, "u": 8 } mlr --from ./reg_test/input/xyz2 put -q var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q @a = 1; var o = @a; dump o 1 1 mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; var o = @b; dump o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; var o = @c; dump o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q @a = 1; var o = @*; dump o { "a": 1 } { "a": 1 } mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; var o = @*; dump o { "b": { "1": 2 } } { "b": { "1": 2 } } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; var o = @*; dump o { "c": { "1": { "2": 3 } } } { "c": { "1": { "2": 3 } } } mlr --from ./reg_test/input/xyz2 put -q a = 1; var o = a; dump o 1 1 mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; var o = b; dump o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; var o = c; dump o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} var o = map_valued_func(); dump o { "a": 1, "b": 2 } { "a": 1, "b": 2 } ================================================================ MAPVAR ASSIGNMENTS TO UNTYPED LOCAL mlr --from ./reg_test/input/xyz2 put -q o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q o = @o; dump o mlr --from ./reg_test/input/xyz2 put -q o = $*; dump o { "x": 3, "y": 4, "z": 5 } { "x": 6, "y": 7, "u": 8 } mlr --from ./reg_test/input/xyz2 put -q o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } { "a": 1, "b": { "x": 8, "y": 9 }, "c": 3 } mlr --from ./reg_test/input/xyz2 put -q @a = 1; o = @a; dump o 1 1 mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; o = @b; dump o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; o = @c; dump o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q @a = 1; o = @*; dump o { "a": 1 } { "a": 1 } mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; o = @*; dump o { "b": { "1": 2 } } { "b": { "1": 2 } } mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; o = @*; dump o { "c": { "1": { "2": 3 } } } { "c": { "1": { "2": 3 } } } mlr --from ./reg_test/input/xyz2 put -q a = 1; o = a; dump o 1 1 mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; o = b; dump o { "1": 2 } { "1": 2 } mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; o = c; dump o { "1": { "2": 3 } } { "1": { "2": 3 } } mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} o = map_valued_func(); dump o { "a": 1, "b": 2 } { "a": 1, "b": 2 } ================================================================ SPLIT/JOIN mlr --from ./reg_test/input/abixy-het put -q o = joink($*, ":"); print o a:b:i:x:y a:b:i:x:y aaa:b:i:x:y a:bbb:i:x:y a:b:i:xxx:y a:b:i:x:y a:b:iii:x:y a:b:i:x:yyy aaa:bbb:i:x:y a:b:i:x:y mlr --from ./reg_test/input/abixy-het put -q o = joinv($*, ":"); print o pan:pan:1:0.3467901443380824:0.7268028627434533 eks:pan:2:0.7586799647899636:0.5221511083334797 wye:wye:3:0.20460330576630303:0.33831852551664776 eks:wye:4:0.38139939387114097:0.13418874328430463 wye:pan:5:0.5732889198020006:0.8636244699032729 zee:pan:6:0.5271261600918548:0.49322128674835697 eks:zee:7:0.6117840605678454:0.1878849191181694 zee:wye:8:0.5985540091064224:0.976181385699006 hat:wye:9:0.03144187646093577:0.7495507603507059 pan:wye:10:0.5026260055412137:0.9526183602969864 mlr --from ./reg_test/input/abixy-het put -q o = joinkv($*, ":", ";"); print o a:pan;b:pan;i:1;x:0.3467901443380824;y:0.7268028627434533 a:eks;b:pan;i:2;x:0.7586799647899636;y:0.5221511083334797 aaa:wye;b:wye;i:3;x:0.20460330576630303;y:0.33831852551664776 a:eks;bbb:wye;i:4;x:0.38139939387114097;y:0.13418874328430463 a:wye;b:pan;i:5;xxx:0.5732889198020006;y:0.8636244699032729 a:zee;b:pan;i:6;x:0.5271261600918548;y:0.49322128674835697 a:eks;b:zee;iii:7;x:0.6117840605678454;y:0.1878849191181694 a:zee;b:wye;i:8;x:0.5985540091064224;yyy:0.976181385699006 aaa:hat;bbb:wye;i:9;x:0.03144187646093577;y:0.7495507603507059 a:pan;b:wye;i:10;x:0.5026260055412137;y:0.9526183602969864 mlr --from ./reg_test/input/abixy-het put -q o = joink({1:2, "abc":4, 5:"xyz"}, ":"); print o 1:abc:5 1:abc:5 1:abc:5 1:abc:5 1:abc:5 1:abc:5 1:abc:5 1:abc:5 1:abc:5 1:abc:5 mlr --from ./reg_test/input/abixy-het put -q o = joinv({1:2, "abc":4, 5:"xyz"}, ":"); print o 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz 2:4:xyz mlr --from ./reg_test/input/abixy-het put -q o = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); print o 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz 1:2;abc:4;5:xyz mlr --from ./reg_test/input/abixy-het put $* = splitnv("a,b,c" , ","); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c mlr --from ./reg_test/input/abixy-het put $* = splitkv("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c mlr --from ./reg_test/input/abixy-het put $* = splitnv("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c mlr --from ./reg_test/input/abixy-het put $* = splitkv("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c mlr --from ./reg_test/input/abixy-het put $* = splitnv("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c mlr --from ./reg_test/input/abixy-het put $* = splitkv("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c >> << a:string 1:int b:string 2:int 3:string c:string a=1,b=2,3=c mlr --from ./reg_test/input/abixy-het put $* = splitnvx("a,b,c" , ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c mlr --from ./reg_test/input/abixy-het put $* = splitkvx("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c mlr --from ./reg_test/input/abixy-het put $* = splitnvx("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c mlr --from ./reg_test/input/abixy-het put $* = splitkvx("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c mlr --from ./reg_test/input/abixy-het put $* = splitnvx("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c >> << 1:string a:string 2:string b:string 3:string c:string 1=a,2=b,3=c mlr --from ./reg_test/input/abixy-het put $* = splitkvx("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c >> << a:string 1:string b:string 2:string 3:string c:string a=1,b=2,3=c mlr --oxtab --from ./reg_test/input/abixy-het put s = joink($*, ":"); $* = splitnv(s, ":") 1 a 2 b 3 i 4 x 5 y 1 a 2 b 3 i 4 x 5 y 1 aaa 2 b 3 i 4 x 5 y 1 a 2 bbb 3 i 4 x 5 y 1 a 2 b 3 i 4 xxx 5 y 1 a 2 b 3 i 4 x 5 y 1 a 2 b 3 iii 4 x 5 y 1 a 2 b 3 i 4 x 5 yyy 1 aaa 2 bbb 3 i 4 x 5 y 1 a 2 b 3 i 4 x 5 y mlr --oxtab --from ./reg_test/input/abixy-het put s = joinv($*, ":"); $* = splitnv(s, ":") 1 pan 2 pan 3 1 4 0.346790 5 0.726803 1 eks 2 pan 3 2 4 0.758680 5 0.522151 1 wye 2 wye 3 3 4 0.204603 5 0.338319 1 eks 2 wye 3 4 4 0.381399 5 0.134189 1 wye 2 pan 3 5 4 0.573289 5 0.863624 1 zee 2 pan 3 6 4 0.527126 5 0.493221 1 eks 2 zee 3 7 4 0.611784 5 0.187885 1 zee 2 wye 3 8 4 0.598554 5 0.976181 1 hat 2 wye 3 9 4 0.031442 5 0.749551 1 pan 2 wye 3 10 4 0.502626 5 0.952618 mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv($*, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} a:string pan:string b:string pan:string i:string 1:int x:string 0.346790:float y:string 0.726803:float a pan b pan i 1 x 0.346790 y 0.726803 a:string eks:string b:string pan:string i:string 2:int x:string 0.758680:float y:string 0.522151:float a eks b pan i 2 x 0.758680 y 0.522151 aaa:string wye:string b:string wye:string i:string 3:int x:string 0.204603:float y:string 0.338319:float aaa wye b wye i 3 x 0.204603 y 0.338319 a:string eks:string bbb:string wye:string i:string 4:int x:string 0.381399:float y:string 0.134189:float a eks bbb wye i 4 x 0.381399 y 0.134189 a:string wye:string b:string pan:string i:string 5:int xxx:string 0.573289:float y:string 0.863624:float a wye b pan i 5 xxx 0.573289 y 0.863624 a:string zee:string b:string pan:string i:string 6:int x:string 0.527126:float y:string 0.493221:float a zee b pan i 6 x 0.527126 y 0.493221 a:string eks:string b:string zee:string iii:string 7:int x:string 0.611784:float y:string 0.187885:float a eks b zee iii 7 x 0.611784 y 0.187885 a:string zee:string b:string wye:string i:string 8:int x:string 0.598554:float yyy:string 0.976181:float a zee b wye i 8 x 0.598554 yyy 0.976181 aaa:string hat:string bbb:string wye:string i:string 9:int x:string 0.031442:float y:string 0.749551:float aaa hat bbb wye i 9 x 0.031442 y 0.749551 a:string pan:string b:string wye:string i:string 10:int x:string 0.502626:float y:string 0.952618:float a pan b wye i 10 x 0.502626 y 0.952618 mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv($*, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} a:string pan:string b:string pan:string i:string 1:string x:string 0.3467901443380824:string y:string 0.7268028627434533:string a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a:string eks:string b:string pan:string i:string 2:string x:string 0.7586799647899636:string y:string 0.5221511083334797:string a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 aaa:string wye:string b:string wye:string i:string 3:string x:string 0.20460330576630303:string y:string 0.33831852551664776:string aaa wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a:string eks:string bbb:string wye:string i:string 4:string x:string 0.38139939387114097:string y:string 0.13418874328430463:string a eks bbb wye i 4 x 0.38139939387114097 y 0.13418874328430463 a:string wye:string b:string pan:string i:string 5:string xxx:string 0.5732889198020006:string y:string 0.8636244699032729:string a wye b pan i 5 xxx 0.5732889198020006 y 0.8636244699032729 a:string zee:string b:string pan:string i:string 6:string x:string 0.5271261600918548:string y:string 0.49322128674835697:string a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a:string eks:string b:string zee:string iii:string 7:string x:string 0.6117840605678454:string y:string 0.1878849191181694:string a eks b zee iii 7 x 0.6117840605678454 y 0.1878849191181694 a:string zee:string b:string wye:string i:string 8:string x:string 0.5985540091064224:string yyy:string 0.976181385699006:string a zee b wye i 8 x 0.5985540091064224 yyy 0.976181385699006 aaa:string hat:string bbb:string wye:string i:string 9:string x:string 0.03144187646093577:string y:string 0.7495507603507059:string aaa hat bbb wye i 9 x 0.03144187646093577 y 0.7495507603507059 a:string pan:string b:string wye:string i:string 10:string x:string 0.5026260055412137:string y:string 0.9526183602969864:string a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 mlr --oxtab --from ./reg_test/input/abixy-het put s = joink({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":") 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 1 1 2 abc 3 5 mlr --oxtab --from ./reg_test/input/abixy-het put s = joinv({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":") 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz 1 2 2 4 3 xyz mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:int abc:string 4:int 5:string xyz:string 1 2 abc 4 5 xyz mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz 1:string 2:string abc:string 4:string 5:string xyz:string 1 2 abc 4 5 xyz ================================================================ MAPSUM/MAPDIFF/MAPEXCEPT mlr --from ./reg_test/input/abixy-het put -q o = mapsum(); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff(); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept(); dump o mlr: Function named "mapexcept" takes at least 1 argument; got 0. mlr --from ./reg_test/input/abixy-het put -q o = mapselect(); dump o mlr: Function named "mapselect" takes at least 1 argument; got 0. mlr --from ./reg_test/input/abixy-het put -q o = mapsum($*); dump o { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapsum({"a":999}); dump o { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff($*); dump o { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff({"a":999}); dump o { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept($*); dump o { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept({"a":999}); dump o { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } mlr --from ./reg_test/input/abixy-het put -q o = mapselect($*); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapsum($*, {"a":999}); dump o { "a": 999, "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": 999, "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776, "a": 999 } { "a": 999, "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": 999, "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": 999, "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": 999, "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": 999, "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059, "a": 999 } { "a": 999, "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapsum({"a":999}, $*); dump o { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": 999, "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "a": 999, "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff($*, {"a":999}); dump o { "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff({"a":999}, $*); dump o { } { } { "a": 999 } { } { } { } { } { } { "a": 999 } { } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept($*, "a"); dump o { "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "b": "pan", "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "b": "zee", "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "b": "wye", "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept({"a":999}, "a"); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept({"a":999}, "nonesuch"); dump o { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } mlr --from ./reg_test/input/abixy-het put -q o = mapselect($*, "a"); dump o { "a": "pan" } { "a": "eks" } { } { "a": "eks" } { "a": "wye" } { "a": "zee" } { "a": "eks" } { "a": "zee" } { } { "a": "pan" } mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "a"); dump o { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } { "a": 999 } mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "nonesuch"); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapsum($*, {"a":999}, {"b": 444}); dump o { "a": 999, "b": 444, "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": 999, "b": 444, "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "b": 444, "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776, "a": 999 } { "a": 999, "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463, "b": 444 } { "a": 999, "b": 444, "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": 999, "b": 444, "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": 999, "b": 444, "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": 999, "b": 444, "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059, "a": 999, "b": 444 } { "a": 999, "b": 444, "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapsum({"a":999}, $*, {"b": 444}); dump o { "a": "pan", "b": 444, "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": 444, "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": 999, "aaa": "wye", "b": 444, "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463, "b": 444 } { "a": "wye", "b": 444, "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": 444, "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": 444, "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": 444, "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "a": 999, "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059, "b": 444 } { "a": "pan", "b": 444, "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff($*, {"a":999}, {"b": 444}); dump o { "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapdiff({"a":999}, $*, {"b": 444}); dump o { } { } { "a": 999 } { } { } { } { } { } { "a": 999 } { } mlr --from ./reg_test/input/abixy-het put -q o = mapexcept($*, "a", "b"); dump o { "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "aaa": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "bbb": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "i": 5, "xxx": 0.5732889198020006, "y": 0.8636244699032729 } { "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "iii": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "i": 8, "x": 0.5985540091064224, "yyy": 0.976181385699006 } { "aaa": "hat", "bbb": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "b", "nonesuch"); dump o { } { } { } { } { } { } { } { } { } { } mlr --from ./reg_test/input/abixy-het put -q o = mapselect($*, "a", "b"); dump o { "a": "pan", "b": "pan" } { "a": "eks", "b": "pan" } { "b": "wye" } { "a": "eks" } { "a": "wye", "b": "pan" } { "a": "zee", "b": "pan" } { "a": "eks", "b": "zee" } { "a": "zee", "b": "wye" } { } { "a": "pan", "b": "wye" } mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "b", "nonesuch"); dump o { } { } { } { } { } { } { } { } { } { } ================================================================ EXTENDED TYPEOF mlr --from ./reg_test/input/xyz2 --oxtab put a = {1:2, 3:4}; b = {1: {2:3, 4:5}}; @c = {1:2, 3:4}; @d = {1: {2:3, 4:5}}; $ta = typeof(a); $ta1 = typeof(a[1]); $ta7 = typeof(a[7]); $tb = typeof(b); $tb1 = typeof(b[1]); $tb7 = typeof(b[7]); $tc = typeof(@c); $tc1 = typeof(@c[1]); $tc7 = typeof(@c[7]); $td = typeof(@d); $td1 = typeof(@d[1]); $td7 = typeof(@d[7]); $te1 = typeof(6); $te2 = typeof({6:4}); $tsa = typeof($a); $tsx = typeof($x); $ts = typeof($*); x 3 y 4 z 5 ta map ta1 int ta7 absent tb map tb1 map tb7 absent tc map tc1 int tc7 absent td map td1 map td7 absent te1 int te2 map tsa absent tsx int ts map x 6 y 7 u 8 ta map ta1 int ta7 absent tb map tb1 map tb7 absent tc map tc1 int tc7 absent td map td1 map td7 absent te1 int te2 map tsa absent tsx int ts map ================================================================ HASKEY mlr --from ./reg_test/input/abixy-het put $haskeya = haskey($*, "a") a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,haskeya=true a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,haskeya=true aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,haskeya=false a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,haskeya=true a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,haskeya=true a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,haskeya=true a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,haskeya=true a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,haskeya=true aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,haskeya=false a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,haskeya=true mlr --from ./reg_test/input/abixy-het put $haskey3 = haskey($*, 3) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,haskey3=false a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,haskey3=false aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,haskey3=false a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,haskey3=false a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,haskey3=false a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,haskey3=false a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,haskey3=false a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,haskey3=false aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,haskey3=false a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,haskey3=false mlr --from ./reg_test/input/xyz2 put $haskeya = haskey({3:4}, "a") x=3,y=4,z=5,haskeya=false x=6,y=7,u=8,haskeya=false mlr --from ./reg_test/input/xyz2 put $haskey3 = haskey({3:4}, 3) x=3,y=4,z=5,haskey3=true x=6,y=7,u=8,haskey3=true mlr --from ./reg_test/input/xyz2 put $haskey3 = haskey({3:4}, 4) x=3,y=4,z=5,haskey3=false x=6,y=7,u=8,haskey3=false mlr --from ./reg_test/input/xyz2 put o = {3:4}; $haskeya = haskey(o, "a") x=3,y=4,z=5,haskeya=false x=6,y=7,u=8,haskeya=false mlr --from ./reg_test/input/xyz2 put o = {3:4}; $haskey3 = haskey(o, 3) x=3,y=4,z=5,haskey3=true x=6,y=7,u=8,haskey3=true mlr --from ./reg_test/input/xyz2 put o = {3:4}; $haskey3 = haskey(o, 4) x=3,y=4,z=5,haskey3=false x=6,y=7,u=8,haskey3=false mlr --from ./reg_test/input/xyz2 put @o = {3:4}; $haskeya = haskey(@o, "a") x=3,y=4,z=5,haskeya=false x=6,y=7,u=8,haskeya=false mlr --from ./reg_test/input/xyz2 put @o = {3:4}; $haskey3 = haskey(@o, 3) x=3,y=4,z=5,haskey3=true x=6,y=7,u=8,haskey3=true mlr --from ./reg_test/input/xyz2 put @o = {3:4}; $haskey3 = haskey(@o, 4) x=3,y=4,z=5,haskey3=false x=6,y=7,u=8,haskey3=false mlr --from ./reg_test/input/xyz2 put o = "3:4"; $haskeya = haskey(@o, "a") x=3,y=4,z=5,haskeya=(error) x=6,y=7,u=8,haskeya=(error) mlr --from ./reg_test/input/xyz2 put o = "3:4"; $haskey3 = haskey(@o, 3) x=3,y=4,z=5,haskey3=(error) x=6,y=7,u=8,haskey3=(error) mlr --from ./reg_test/input/xyz2 put o = "3:4"; $haskey3 = haskey(@o, 4) x=3,y=4,z=5,haskey3=(error) x=6,y=7,u=8,haskey3=(error) ================================================================ LENGTH/DEPTH/LEAFCOUNT mlr --from ./reg_test/input/abixy-het put $length = length($a) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,length=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,length=1 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,length=1 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,length=1 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,length=1 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,length=1 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,length=1 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,length=1 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,length=1 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,length=1 mlr --from ./reg_test/input/abixy-het put $length = length($*) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,length=5 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,length=5 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,length=5 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,length=5 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,length=5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,length=5 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,length=5 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,length=5 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,length=5 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,length=5 mlr --from ./reg_test/input/xyz2 put $length= length({3:4, 5:{6:7}, 8:{9:{10:11}}}) x=3,y=4,z=5,length=3 x=6,y=7,u=8,length=3 mlr --from ./reg_test/input/xyz2 put o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(o) x=3,y=4,z=5,length=3 x=6,y=7,u=8,length=3 mlr --from ./reg_test/input/xyz2 put @o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(@o) x=3,y=4,z=5,length=3 x=6,y=7,u=8,length=3 mlr --from ./reg_test/input/abixy-het put $depth = depth($a) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,depth=0 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,depth=0 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,depth=0 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,depth=0 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,depth=0 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,depth=0 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,depth=0 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,depth=0 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,depth=0 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,depth=0 mlr --from ./reg_test/input/abixy-het put $depth = depth($*) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,depth=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,depth=1 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,depth=1 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,depth=1 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,depth=1 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,depth=1 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,depth=1 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,depth=1 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,depth=1 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,depth=1 mlr --from ./reg_test/input/xyz2 put $depth= depth({3:4, 5:{6:7}, 8:{9:{10:11}}}) x=3,y=4,z=5,depth=3 x=6,y=7,u=8,depth=3 mlr --from ./reg_test/input/xyz2 put o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(o) x=3,y=4,z=5,depth=3 x=6,y=7,u=8,depth=3 mlr --from ./reg_test/input/xyz2 put @o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(@o) x=3,y=4,z=5,depth=3 x=6,y=7,u=8,depth=3 mlr --from ./reg_test/input/abixy-het put $leafcount = leafcount($a) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,leafcount=1 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,leafcount=1 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,leafcount=1 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,leafcount=1 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,leafcount=1 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,leafcount=1 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,leafcount=1 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,leafcount=1 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,leafcount=1 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,leafcount=1 mlr --from ./reg_test/input/abixy-het put $leafcount = leafcount($*) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,leafcount=5 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,leafcount=5 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,leafcount=5 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,leafcount=5 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,leafcount=5 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,leafcount=5 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,leafcount=5 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,leafcount=5 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,leafcount=5 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,leafcount=5 mlr --from ./reg_test/input/xyz2 put $leafcount= leafcount({3:4, 5:{6:7}, 8:{9:{10:11}}}) x=3,y=4,z=5,leafcount=3 x=6,y=7,u=8,leafcount=3 mlr --from ./reg_test/input/xyz2 put o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(o) x=3,y=4,z=5,leafcount=3 x=6,y=7,u=8,leafcount=3 mlr --from ./reg_test/input/xyz2 put @o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(@o) x=3,y=4,z=5,leafcount=3 x=6,y=7,u=8,leafcount=3 ================================================================ MAPVAR EMIT mlr -n put end { @a[2][3] = 4; b[2][3] = 8; emit (@a, b, {2:{3:12}}); emitp (@a, b, {2:{3:12}}); emit {}; emit (@a, b, {2:{3:12}}), "t"; emitp (@a, b, {2:{3:12}}), "t"; emit {}; emit (@a, b, {2:{3:12}}), "t", "u"; emitp (@a, b, {2:{3:12}}), "t", "u"; } 3=12 a:2:3=4,b:2:3=8,_:2:3=12 t=2,3=12 t=2,a:3=4,b:3=8,_:3=12 t=2,u=3,a=4,b=8,_=12 t=2,u=3,a=4,b=8,_=12 mlr -n put end { @a[2][3] = 4; b[2][3] = 8; emitp (@a, b, {2:{3:12}}); emit (@a, b, {2:{3:12}}); emit {}; emitp (@a, b, {2:{3:12}}), "t"; emit (@a, b, {2:{3:12}}), "t"; emit {}; emitp (@a, b, {2:{3:12}}), "t", "u"; emit (@a, b, {2:{3:12}}), "t", "u"; } a:2:3=4,b:2:3=8,_:2:3=12 3=12 t=2,a:3=4,b:3=8,_:3=12 t=2,3=12 t=2,u=3,a=4,b=8,_=12 t=2,u=3,a=4,b=8,_=12 ================================================================ MAPVAR FOR-LOOPS mlr --from ./reg_test/input/abixy put -q func f() { return { "a:".$a: $i, "b:".$b: $y, NR: NF, } } for (k,v in f()) { print "k=".k; print "v=".v; } print k=a:pan v=1 k=b:pan v=0.726803 k=1 v=5 k=a:eks v=2 k=b:pan v=0.522151 k=2 v=5 k=a:wye v=3 k=b:wye v=0.338319 k=3 v=5 k=a:eks v=4 k=b:wye v=0.134189 k=4 v=5 k=a:wye v=5 k=b:pan v=0.863624 k=5 v=5 k=a:zee v=6 k=b:pan v=0.493221 k=6 v=5 k=a:eks v=7 k=b:zee v=0.187885 k=7 v=5 k=a:zee v=8 k=b:wye v=0.976181 k=8 v=5 k=a:hat v=9 k=b:wye v=0.749551 k=9 v=5 k=a:pan v=10 k=b:wye v=0.952618 k=10 v=5 ================================================================ TRAILING COMMAS mlr --from ./reg_test/input/abixy put $* = { "a": $a, "x": $x, } a=pan,x=0.346790 a=eks,x=0.758680 a=wye,x=0.204603 a=eks,x=0.381399 a=wye,x=0.573289 a=zee,x=0.527126 a=eks,x=0.611784 a=zee,x=0.598554 a=hat,x=0.031442 a=pan,x=0.502626 mlr --from ./reg_test/input/xyz345 put func f(): int { return 999 } $y=f() x=3,y=999,z=5 mlr --from ./reg_test/input/xyz345 put func f(): int { return 999 } $y=f(,) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of 'func f(): int { return 999 } $y=f(,)' mlr --from ./reg_test/input/xyz345 put func f(a,): int { return a*2 } $y=f(NR) x=3,y=2,z=5 mlr --from ./reg_test/input/xyz345 put func f(a,,): int { return a*2 } $y=f(NR) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of 'func f(a,,): int { return a*2 } $y=f(NR)' mlr --from ./reg_test/input/xyz345 put func f(int a,): int { return a*2 } $y=f(NR) x=3,y=2,z=5 mlr --from ./reg_test/input/xyz345 put func f(int a,,): int { return a*2 } $y=f(NR) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of 'func f(int a,,): int { return a*2 } $y=f(NR)' mlr --from ./reg_test/input/xyz345 put subr s() { print 999 } call s() 999 x=3,y=4,z=5 mlr --from ./reg_test/input/xyz345 put subr s() { print 999 } call s(,) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of 'subr s() { print 999 } call s(,)' mlr --from ./reg_test/input/xyz345 put subr s(a,) { print a*2 } call s(NR) 2 x=3,y=4,z=5 mlr --from ./reg_test/input/xyz345 put subr s(a,,) { print a*2 } call s(NR) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of 'subr s(a,,) { print a*2 } call s(NR)' mlr --from ./reg_test/input/xyz345 put subr s(int a,) { print a*2 } call s(NR) 2 x=3,y=4,z=5 mlr --from ./reg_test/input/xyz345 put subr s(int a,,) { print a*2 } call s(NR) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of 'subr s(int a,,) { print a*2 } call s(NR)' mlr --from ./reg_test/input/xyz345 put $y=log10($x) x=3,y=0.477121,z=5 mlr --from ./reg_test/input/xyz345 put $y=log10($x,) x=3,y=0.477121,z=5 mlr --from ./reg_test/input/xyz345 put $y=log10($x,,) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of '$y=log10($x,,)' mlr --from ./reg_test/input/xyz345 put $y=log10(,$x) mlr DSL: syntax error at "," mlr put: syntax error on DSL parse of '$y=log10(,$x)' mlr --from ./reg_test/input/xyz345 put $y=pow($x,2) x=3,y=9.000000,z=5 mlr --from ./reg_test/input/xyz345 put $y=pow($x,2,) x=3,y=9.000000,z=5 ================================================================ MAPVARS/UDFs/SUBROUTINES mlr --from ./reg_test/input/abixy put func f(m) { dump m; sum = 0; for (k, v in m) { sum += k } return sum } @v[$i] = $a; $y = f(@v) { "1": "pan" } a=pan,b=pan,i=1,x=0.3467901443380824,y=1 { "1": "pan", "2": "eks" } a=eks,b=pan,i=2,x=0.7586799647899636,y=3 { "1": "pan", "2": "eks", "3": "wye" } a=wye,b=wye,i=3,x=0.20460330576630303,y=6 { "1": "pan", "2": "eks", "3": "wye", "4": "eks" } a=eks,b=wye,i=4,x=0.38139939387114097,y=10 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye" } a=wye,b=pan,i=5,x=0.5732889198020006,y=15 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee" } a=zee,b=pan,i=6,x=0.5271261600918548,y=21 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks" } a=eks,b=zee,i=7,x=0.6117840605678454,y=28 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks", "8": "zee" } a=zee,b=wye,i=8,x=0.5985540091064224,y=36 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks", "8": "zee", "9": "hat" } a=hat,b=wye,i=9,x=0.03144187646093577,y=45 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks", "8": "zee", "9": "hat", "10": "pan" } a=pan,b=wye,i=10,x=0.5026260055412137,y=55 mlr --from ./reg_test/input/abixy put subr s(m) { dump m; sum = 0; for (k, v in m) { sum += k } @sum = sum; } @v[$i] = $a; call s(@v); $y = @sum; { "1": "pan" } a=pan,b=pan,i=1,x=0.3467901443380824,y=1 { "1": "pan", "2": "eks" } a=eks,b=pan,i=2,x=0.7586799647899636,y=3 { "1": "pan", "2": "eks", "3": "wye" } a=wye,b=wye,i=3,x=0.20460330576630303,y=6 { "1": "pan", "2": "eks", "3": "wye", "4": "eks" } a=eks,b=wye,i=4,x=0.38139939387114097,y=10 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye" } a=wye,b=pan,i=5,x=0.5732889198020006,y=15 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee" } a=zee,b=pan,i=6,x=0.5271261600918548,y=21 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks" } a=eks,b=zee,i=7,x=0.6117840605678454,y=28 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks", "8": "zee" } a=zee,b=wye,i=8,x=0.5985540091064224,y=36 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks", "8": "zee", "9": "hat" } a=hat,b=wye,i=9,x=0.03144187646093577,y=45 { "1": "pan", "2": "eks", "3": "wye", "4": "eks", "5": "wye", "6": "zee", "7": "eks", "8": "zee", "9": "hat", "10": "pan" } a=pan,b=wye,i=10,x=0.5026260055412137,y=55 mlr --from ./reg_test/input/abixy-het put func f(x) {return {"a":x,"b":x**2}}; map o = f($x); $* = o a=0.346790,b=0.120263 a=0.758680,b=0.575595 a=0.204603,b=0.041863 a=0.381399,b=0.145465 a=,b= a=0.527126,b=0.277862 a=0.611784,b=0.374280 a=0.598554,b=0.358267 a=0.031442,b=0.000989 a=0.502626,b=0.252633 mlr --from ./reg_test/input/abixy-het put -q func f(x) {return x**2}; var z = f($x); dump z 0.120263 0.575595 0.041863 0.145465 0.277862 0.374280 0.358267 0.000989 0.252633 mlr --from ./reg_test/input/abixy-het put -q func f(x) {map m = {NR:x};return m}; z = f($y); dump z { "1": 0.726803 } { "2": 0.522151 } { "3": 0.338319 } { "4": 0.134189 } { "5": 0.863624 } { "6": 0.493221 } { "7": 0.187885 } { "8": } { "9": 0.749551 } { "10": 0.952618 } mlr --from ./reg_test/input/abixy put func f(int x): map { if (NR==2) { return 2 } else { return {} } } $y=f($x) mlr: int type assertion for variable x unmet by value 0.346790 with type float. mlr --from ./reg_test/input/abixy put func f(int x): map { if (NR==200) { return 2 } else { return {} } } $y=f($i) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put func f(int x): map { if (NR==200) { return 2 } else { return {} } } $y=f($x) mlr: int type assertion for variable x unmet by value 0.346790 with type float. mlr --from ./reg_test/input/abixy put func f(int x): var { if (NR==2) { return 2 } else { return {} } } $y=f($i) a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=2 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 mlr --from ./reg_test/input/abixy put func f(int x): var { if (NR==2) { return 2 } else { return {} } } $y=f($x) mlr: int type assertion for variable x unmet by value 0.346790 with type float. mlr --from ./reg_test/input/abixy put func f(x): int { # fall-through return value is absent-null } $y=f($x) mlr: function f returned type absent, not matching typedecl int. mlr --from ./reg_test/input/abixy put int a = 1; var b = a[2]; # cannot index localvar declared non-map mlr: int type assertion for variable a unmet on read. mlr --oxtab --from ./reg_test/input/abixy-het put $* = mapdiff( mapsum($*, {"a": "newval"}), {"b": "nonesuch"}, ) a newval i 1 x 0.3467901443380824 y 0.7268028627434533 a newval i 2 x 0.7586799647899636 y 0.5221511083334797 aaa wye i 3 x 0.20460330576630303 y 0.33831852551664776 a newval a newval bbb wye i 4 x 0.38139939387114097 y 0.13418874328430463 a newval i 5 xxx 0.5732889198020006 y 0.8636244699032729 a newval i 6 x 0.5271261600918548 y 0.49322128674835697 a newval iii 7 x 0.6117840605678454 y 0.1878849191181694 a newval i 8 x 0.5985540091064224 yyy 0.976181385699006 aaa hat bbb wye i 9 x 0.03144187646093577 y 0.7495507603507059 a newval a newval i 10 x 0.5026260055412137 y 0.9526183602969864 mlr lecat --mono hello[CR]there[CR]how[CR]are[CR]you[CR]mlr lecat --mono hello[LF] there[LF] how[LF] are[LF] you[LF] mlr lecat --mono hello[CR][LF] there[CR][LF] how[CR][LF] are[CR][LF] you[CR][LF] mlr termcvt --cr2lf mlr termcvt --cr2crlf mlr termcvt --lf2cr mlr termcvt --lf2crlf mlr termcvt --crlf2cr mlr termcvt --crlf2lf mlr hex 00000000: 68 65 6c 6c 6f 0a 74 68 65 72 65 0a 68 6f 77 0a |hello.there.how.| 00000010: 61 72 65 0a 79 6f 75 0a |are.you.| mlr hex 00000000: 68 65 6c 6c 6f 0d 0a 74 68 65 72 65 0d 0a 68 6f |hello..there..ho| 00000010: 77 0d 0a 61 72 65 0d 0a 79 6f 75 0d 0a |w..are..you..| mlr hex 00000000: 68 65 6c 6c 6f 0d 74 68 65 72 65 0d 68 6f 77 0d |hello.there.how.| 00000010: 61 72 65 0d 79 6f 75 0d |are.you.| mlr hex 00000000: 68 65 6c 6c 6f 0d 0a 74 68 65 72 65 0d 0a 68 6f |hello..there..ho| 00000010: 77 0d 0a 61 72 65 0d 0a 79 6f 75 0d 0a |w..are..you..| mlr hex 00000000: 68 65 6c 6c 6f 0d 74 68 65 72 65 0d 68 6f 77 0d |hello.there.how.| 00000010: 61 72 65 0d 79 6f 75 0d |are.you.| mlr hex 00000000: 68 65 6c 6c 6f 0a 74 68 65 72 65 0a 68 6f 77 0a |hello.there.how.| 00000010: 61 72 65 0a 79 6f 75 0a |are.you.| miller-5.6.2/c/reg_test/expected/out-dev000066400000000000000000000456271354153536500202050ustar00rootroot00000000000000 ================================================================ OLD NULL-HANDLING ---------------------------------------------------------------- ok mlr put $z = $x + $y ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=3 x=1,y=,s=,z= x=,y=,s=hurrah,z= ---------------------------------------------------------------- ok mlr put $z = $y + $y ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=4 x=1,y=,s=,z= x=,y=,s=hurrah,z= ---------------------------------------------------------------- FIXME FOR SRECS mlr put $z = $x + $nosuch ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,z=1 x=1,y=,s=,z=1 x=,y=,s=hurrah,z= ---------------------------------------------------------------- ok mlr put $t = sub($s, "ell", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=hXo x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah ---------------------------------------------------------------- ok mlr put $t = sub($s, "ell", "") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=ho x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah ---------------------------------------------------------------- ok mlr put $t = sub($nosuch, "ell", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t= x=1,y=,s=,t= x=,y=,s=hurrah,t= ---------------------------------------------------------------- ok mlr put $t = gsub($s, "l", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=heXXo x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah ---------------------------------------------------------------- ok mlr put $t = gsub($s, "l", "") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t=heo x=1,y=,s=,t= x=,y=,s=hurrah,t=hurrah ---------------------------------------------------------------- ok mlr put $t = gsub($nosuch, "l", "X") ./reg_test/input/null-vs-empty.dkvp x=1,y=2,s=hello,t= x=1,y=,s=,t= x=,y=,s=hurrah,t= ================================================================ NULLITY PREDICATES mlr --opprint filter isnull($x) ./reg_test/input/nullvals.dkvp a x y z b - 6 - b - - - mlr --opprint filter isnull($y) ./reg_test/input/nullvals.dkvp a x y z b 5 - - b - - - mlr --opprint filter isnull($z) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint filter isnull($nosuch) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - b - 6 - b - - - mlr --opprint filter isnotnull($x) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b 5 - - mlr --opprint filter isnotnull($y) ./reg_test/input/nullvals.dkvp a x y z b 1 2 - b 3 4 - b - 6 - mlr --opprint filter isnotnull($z) ./reg_test/input/nullvals.dkvp mlr --opprint filter isnotnull($nosuch) ./reg_test/input/nullvals.dkvp mlr --opprint put $f=isnull($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - true b - - - true mlr --opprint put $f=isnull($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - true b - 6 - false b - - - true mlr --opprint put $f=isnull($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=isnull($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - true b - - - true mlr --opprint put $f=isnotnull($x) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - true b - 6 - false b - - - false mlr --opprint put $f=isnotnull($y) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - true b 3 4 - true b 5 - - false b - 6 - true b - - - false mlr --opprint put $f=isnotnull($z) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false mlr --opprint put $f=isnotnull($nosuch) ./reg_test/input/nullvals.dkvp a x y z f b 1 2 - false b 3 4 - false b 5 - - false b - 6 - false b - - - false ================================================================ TRI-SPLIT-NULL HANDLING ---------------------------------------------------------------- ok mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy sum=4.536294 ---------------------------------------------------------------- ok mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy a=pan,sum=0.849416 a=eks,sum=1.751863 a=wye,sum=0.777892 a=zee,sum=1.125680 a=hat,sum=0.031442 ---------------------------------------------------------------- ok mlr put $nonesuch = @nonesuch ./reg_test/input/abixy a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nonesuch= a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nonesuch= a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nonesuch= a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nonesuch= a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nonesuch= a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nonesuch= a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,nonesuch= a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,nonesuch= a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nonesuch= a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nonesuch= ---------------------------------------------------------------- ok mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy-het sum=3.963005 ---------------------------------------------------------------- ok mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy-het a=pan,sum=0.849416 a=eks,sum=1.751863 a=wye,sum= a=zee,sum=1.125680 ---------------------------------------------------------------- ok mlr put $nonesuch = @nonesuch ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nonesuch= a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nonesuch= aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nonesuch= a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nonesuch= a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,nonesuch= a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nonesuch= a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,nonesuch= a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,nonesuch= aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nonesuch= a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nonesuch= mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=0.346790 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.105470 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.310073 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.691473 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.264762 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.791888 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.403672 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=4.002226 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=4.033668 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=4.536294 sum=4.536294 mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy-het sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=0.346790 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.105470 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.310073 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.691473 sumtype=MT_FLOAT,xtype=MT_ABSENT,sum=1.691473 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.218599 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.830383 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.428937 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.460379 sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.963005 sum=3.963005 mlr put $z = $x + $y ./reg_test/input/typeof.dkvp x=1,y=2,z=3 x=1,y=,z= x=,y=2,z= x=,y=,z= mlr put $z = $x + $y ./reg_test/input/typeof.dkvp x=1,y=2,z=3 x=1,y=,z= x=,y=2,z= x=,y=,z= mlr put $z = $x + $u ./reg_test/input/typeof.dkvp x=1,y=2,z=1 x=1,y=,z=1 x=,y=2,z= x=,y=,z= mlr put @s = @s + $y; emitp @s ./reg_test/input/typeof.dkvp s=2 x=1,y=2 s= x=1,y= s= x=,y=2 s= x=,y= mlr put @s = @s + $y; emitp @s ./reg_test/input/typeof.dkvp s=2 x=1,y=2 s= x=1,y= s= x=,y=2 s= x=,y= mlr put @s = @s + $u; emitp @s ./reg_test/input/typeof.dkvp s= x=1,y=2 s= x=1,y= s= x=,y=2 s= x=,y= mlr put $z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp x=MT_INT,y=MT_INT,z=MT_INT x=MT_INT,y=MT_VOID,z=MT_VOID x=MT_VOID,y=MT_INT,z=MT_VOID x=MT_VOID,y=MT_VOID,z=MT_VOID mlr put $z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp x=MT_INT,y=MT_INT,z=MT_INT x=MT_INT,y=MT_VOID,z=MT_VOID x=MT_VOID,y=MT_INT,z=MT_VOID x=MT_VOID,y=MT_VOID,z=MT_VOID mlr put $z = $x + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp x=MT_INT,y=MT_INT,z=MT_INT x=MT_INT,y=MT_VOID,z=MT_INT x=MT_VOID,y=MT_INT,z=MT_VOID x=MT_VOID,y=MT_VOID,z=MT_VOID mlr put @s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp x=MT_INT,y=MT_INT,z=MT_ABSENT,s=MT_INT x=MT_INT,y=MT_VOID,z=MT_ABSENT,s=MT_VOID x=MT_VOID,y=MT_INT,z=MT_ABSENT,s=MT_VOID x=MT_VOID,y=MT_VOID,z=MT_ABSENT,s=MT_VOID mlr put @s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp x=MT_INT,y=MT_INT,z=MT_ABSENT,s=MT_INT x=MT_INT,y=MT_VOID,z=MT_ABSENT,s=MT_VOID x=MT_VOID,y=MT_INT,z=MT_ABSENT,s=MT_VOID x=MT_VOID,y=MT_VOID,z=MT_ABSENT,s=MT_VOID mlr put @s = @s + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp x=MT_INT,y=MT_INT,z=MT_ABSENT,s=MT_VOID x=MT_INT,y=MT_VOID,z=MT_ABSENT,s=MT_VOID x=MT_VOID,y=MT_INT,z=MT_ABSENT,s=MT_VOID x=MT_VOID,y=MT_VOID,z=MT_ABSENT,s=MT_VOID ================================================================ ABSENT-HANDLING ---------------------------------------------------------------- FIXME FOR SRECS mlr put $a = $a * 2 ./reg_test/input/absent.dkvp a=2,b=2 a=,b=4 x=,b=6,a=2 a=14,b=8 ---------------------------------------------------------------- FIXME FOR SRECS mlr put $new = $a * 2 ./reg_test/input/absent.dkvp a=1,b=2,new=2 a=,b=4,new= x=,b=6,new=2 a=7,b=8,new=14 ---------------------------------------------------------------- ok for oosvars mlr put $new = @nonesuch * 2 ./reg_test/input/absent.dkvp a=1,b=2,new=2 a=,b=4,new=2 x=,b=6,new=2 a=7,b=8,new=2 ---------------------------------------------------------------- ok mlr put begin {@somesuch = 10 }; $new = @somesuch * 2 ./reg_test/input/absent.dkvp a=1,b=2,new=20 a=,b=4,new=20 x=,b=6,new=20 a=7,b=8,new=20 ---------------------------------------------------------------- FIXME FOR SRECS mlr put $new = @nonesuch * $a ./reg_test/input/absent.dkvp a=1,b=2,new=1 a=,b=4,new= x=,b=6,new= a=7,b=8,new=7 ---------------------------------------------------------------- ok mlr put begin {@somesuch = 10 }; $new = @somesuch * $a ./reg_test/input/absent.dkvp a=1,b=2,new=10 a=,b=4,new= x=,b=6,new=10 a=7,b=8,new=70 ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp sum=1 a=1,b=2 sum= a=,b=4 sum= x=,b=6 sum= a=7,b=8 sum= ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp product=1 a=1,b=2 product= a=,b=4 product= x=,b=6 product= a=7,b=8 product= ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put begin { @sum = 10 }; @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp sum=11 a=1,b=2 sum= a=,b=4 sum= x=,b=6 sum= a=7,b=8 sum= ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put begin { @product = 10 }; @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp product=10 a=1,b=2 product= a=,b=4 product= x=,b=6 product= a=7,b=8 product= ================================================================ COMPARE OLD TESTS TO NEW ---------------------------------------------------------------- raw input mlr cat ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- ok mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy-het sum=3.963005 ---------------------------------------------------------------- ok mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy-het a=pan,sum=0.849416 a=eks,sum=1.751863 a=wye,sum= a=zee,sum=1.125680 ---------------------------------------------------------------- ok mlr put $nonesuch = @nonesuch ./reg_test/input/abixy-het a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nonesuch= a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nonesuch= aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nonesuch= a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nonesuch= a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,nonesuch= a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nonesuch= a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,nonesuch= a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,nonesuch= aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nonesuch= a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nonesuch= ---------------------------------------------------------------- raw input mlr cat ./reg_test/input/absent.dkvp a=1,b=2 a=,b=4 x=,b=6 a=7,b=8 ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp sum=1 a=1,b=2 sum= a=,b=4 sum= x=,b=6 sum= a=7,b=8 sum= ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp product=1 a=1,b=2 product= a=,b=4 product= x=,b=6 product= a=7,b=8 product= ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put begin { @sum = 10 }; @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp sum=11 a=1,b=2 sum= a=,b=4 sum= x=,b=6 sum= a=7,b=8 sum= ---------------------------------------------------------------- FIXME AND COMPARE TO ABOVE mlr put begin { @product = 10 }; @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp product=10 a=1,b=2 product= a=,b=4 product= x=,b=6 product= a=7,b=8 product= ---------------------------------------------------------------- COMPARE mlr put emit @sum; @sum += $x; emit @sum; end { emit @sum } ./reg_test/input/abixy-het sum=0.346790 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 sum=0.346790 sum=1.105470 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 sum=1.105470 sum=1.310073 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 sum=1.310073 sum=1.691473 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 sum=1.691473 sum=1.691473 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 sum=1.691473 sum=2.218599 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 sum=2.218599 sum=2.830383 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 sum=2.830383 sum=3.428937 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 sum=3.428937 sum=3.460379 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 sum=3.460379 sum=3.963005 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 sum=3.963005 ---------------------------------------------------------------- COMPARE mlr put emit @sum; @sum += $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp sum=1 a=1,b=2 sum=1 sum= a=,b=4 sum= sum= x=,b=6 sum= sum= a=7,b=8 sum= mlr put emit @sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum += $x; $nstype=typeof(@sum);emit @sum; end { emit @sum } ./reg_test/input/abixy-het sum=0.346790 a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ostype=MT_UNINIT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=0.346790 sum=1.105470 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=1.105470 sum=1.310073 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=1.310073 sum=1.691473 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=1.691473 sum=1.691473 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,ostype=MT_FLOAT,xtype=MT_ABSENT,nstype=MT_FLOAT sum=1.691473 sum=2.218599 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=2.218599 sum=2.830383 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=2.830383 sum=3.428937 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=3.428937 sum=3.460379 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=3.460379 sum=3.963005 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT sum=3.963005 mlr put emit @sum; $ostype=typeof(@sum);$atype=typeof($a);@sum += $a; $nstype=typeof(@sum);emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp sum=1 a=1,b=2,ostype=MT_UNINIT,atype=MT_INT,nstype=MT_INT sum=1 sum= a=,b=4,ostype=MT_INT,atype=MT_VOID,nstype=MT_VOID sum= sum= x=,b=6,ostype=MT_VOID,atype=MT_ABSENT,nstype=MT_VOID sum= sum= a=7,b=8,ostype=MT_VOID,atype=MT_INT,nstype=MT_VOID sum= ================================================================ NARROW IN ---------------------------------------------------------------- mlr cat x=1 x= x=7 mlr put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum += $x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } x=1,osum=,ostype=MT_UNINIT,xtype=MT_INT,nstype=MT_INT,nsum=1 x=,osum=1,ostype=MT_INT,xtype=MT_VOID,nstype=MT_VOID,nsum= x=7,osum=,ostype=MT_VOID,xtype=MT_INT,nstype=MT_VOID,nsum= sum= ---------------------------------------------------------------- mlr cat x=1 xxx= x=7 mlr put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum += $x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } x=1,osum=,ostype=MT_UNINIT,xtype=MT_INT,nstype=MT_INT,nsum=1 xxx=,osum=1,ostype=MT_INT,xtype=MT_ABSENT,nstype=MT_INT,nsum=1 x=7,osum=1,ostype=MT_INT,xtype=MT_INT,nstype=MT_INT,nsum=8 sum=8 ---------------------------------------------------------------- mlr cat x=1 x= y= x=7 mlr --ofs tab put $xtype=typeof($x);$sum = $x + 10; $stype=typeof($sum) x=1 xtype=MT_INT sum=11 stype=MT_INT x= xtype=MT_VOID sum= stype=MT_VOID y= xtype=MT_ABSENT sum=10 stype=MT_INT x=7 xtype=MT_INT sum=17 stype=MT_INT miller-5.6.2/c/reg_test/input/000077500000000000000000000000001354153536500162175ustar00rootroot00000000000000miller-5.6.2/c/reg_test/input/Makefile.am000066400000000000000000000077171354153536500202670ustar00rootroot00000000000000SUBDIRS= rfc-csv \ comments EXTRA_DIST= \ a.csv \ a.pprint \ abixy \ abixy-het \ abixy-wide \ abixy-wide-short \ abixy.csv \ abixy.dkvp \ abixy.json \ abixy.md \ abixy.nidx \ abixy.pprint \ abixy.tsv \ abixy.xtab \ absent.dkvp \ arrays.json \ b.csv \ b.pprint \ bom.csv \ bom-dquote-header.csv \ braced.csv \ c.csv \ c.pprint \ capture-lengths.dkvp \ capture.dkvp \ clean-whitespace.csv \ comma-at-eof.csv \ comments \ d.csv \ d.pprint \ date1.csv \ date2.csv \ dot-match.csv \ dots.pprint-crlf \ dots.xtab \ double-ps.dkvp \ e.csv \ e.pprint \ env-assign.sh \ env-var.dkvp \ escapes.json \ example.usv \ f.csv \ f.pprint \ fill-down.csv \ filter-example.dsl \ filter-script-piece-1 \ filter-script-piece-2 \ freq.dkvp \ from-first.csv \ fsec2xhms \ g.csv \ g.pprint \ gmt2sec \ gsub.dat \ having-fields-regex.dkvp \ het-join-left \ het-join-right-r0 \ het-join-right-r1 \ het-join-right-r11 \ het-join-right-r12 \ het-join-right-r13 \ het-join-right-r14 \ het-join-right-r15 \ het-join-right-r16 \ het-join-right-r2 \ het-join-right-r22 \ het-join-right-r23 \ het-join-right-r24 \ het-join-right-r25 \ het-join-right-r26 \ het-join-right-r3 \ het-join-right-r33 \ het-join-right-r34 \ het-join-right-r35 \ het-join-right-r36 \ het-join-right-r4 \ het-join-right-r44 \ het-join-right-r45 \ het-join-right-r46 \ het-join-right-r5 \ het-join-right-r55 \ het-join-right-r56 \ het-join-right-r6 \ het-join-right-r66 \ het.csv \ het.dkvp \ int-float.dkvp \ int64arith.dkvp \ int64io.dkvp \ ints.dkvp \ join-het.dkvp \ joina.dkvp \ joinb.dkvp \ json-output-options.dkvp \ line-ending-cr.bin \ line-ending-crlf.bin \ line-ending-lf.bin \ line-term-lf.dkvp \ line-term-crlf.dkvp \ line-term-lf.csv \ line-term-crlf.csv \ line-term-lf.json \ line-term-crlf.json \ line-term-lf-wrap.json \ line-term-crlf-wrap.json \ line-term-lf.pprint \ line-term-crlf.pprint \ line-term-lf.xtab \ line-term-crlf.xtab \ logi.dkvp \ mand.mlr \ merge-fields-abxy.dkvp \ merge-fields-in-out.csv \ merge-fields-in-out-mixed.csv \ minmax.dkvp \ missings.dkvp \ mixed-types.xtab \ modarith.dat \ multi-format-join-a.csv \ multi-format-join-a.dkvp \ multi-format-join-a.json \ multi-format-join-b.csv \ multi-format-join-b.dkvp \ multi-format-join-b.json \ multi-ips.dkvp \ multi-sep.csv-crlf \ multi-sep.dkvp-crlf \ near-ovf.dkvp \ nest-explode-vary-fs-ps.dkvp \ nest-explode.dkvp \ null-fields.csv \ null-fields.nidx \ null-vs-empty.dkvp \ nullvals.dkvp \ ofmt.dat \ page-aligned-final-ifs.dkvp \ page-aligned-final-irs.dkvp \ page-aligned-final-no-ifs.dkvp \ page-aligned-no-final-eol.xtab \ page-aligned-no-final-irs.csvl \ page-aligned-no-final-irs.dkvp \ page-aligned-no-final-irs.nidx \ put-example.dsl \ put-script-piece-1 \ put-script-piece-2 \ put-script-piece-3 \ quote-original.csv \ ragged.csv \ regex.dkvp \ regularize.dkvp \ remove-empty-columns.csv \ repeat-input.dat \ repeats.dkvp \ reshape-long-ragged.dkvp \ reshape-long.tbl \ reshape-wide-ragged.dkvp \ reshape-wide.tbl \ rfc-csv \ scinot.dkvp \ scinot1.dkvp \ sec2gmt \ sec2xhms \ short \ short-circuit.dkvp \ sieve.mlr \ simple.tsv \ small \ small-nested.json \ small-non-nested-wrapped.json \ small-non-nested.json \ sort-het.dkvp \ space-pad.dkvp \ space-pad.nidx \ space-pad.pprint \ string-numeric-ordering.dkvp \ sub.dat \ subtab.dkvp \ subtab1.mlr \ subtab2.mlr \ subtab3.mlr \ subtab4.mlr \ test-dsl-stack-allocation.mlr \ trivial-records.csv \ truncated.csv \ truncated.dkvp \ truncated.nidx \ truncated.pprint \ truncated.xtab-crlf \ typeof.dkvp \ unset1.dkvp \ unset4.dkvp \ utf8-1.csv \ utf8-2.csv \ utf8-align.dkvp \ utf8-align.nidx \ valgrind.txt \ x0to10.dat \ xy40.dkvp \ xyz345 \ xyz2 miller-5.6.2/c/reg_test/input/Makefile.in000066400000000000000000000536501354153536500202750ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/reg_test/input ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = rfc-csv \ comments EXTRA_DIST = \ a.csv \ a.pprint \ abixy \ abixy-het \ abixy-wide \ abixy-wide-short \ abixy.csv \ abixy.dkvp \ abixy.json \ abixy.md \ abixy.nidx \ abixy.pprint \ abixy.tsv \ abixy.xtab \ absent.dkvp \ arrays.json \ b.csv \ b.pprint \ bom.csv \ bom-dquote-header.csv \ braced.csv \ c.csv \ c.pprint \ capture-lengths.dkvp \ capture.dkvp \ clean-whitespace.csv \ comma-at-eof.csv \ comments \ d.csv \ d.pprint \ date1.csv \ date2.csv \ dot-match.csv \ dots.pprint-crlf \ dots.xtab \ double-ps.dkvp \ e.csv \ e.pprint \ env-assign.sh \ env-var.dkvp \ escapes.json \ example.usv \ f.csv \ f.pprint \ fill-down.csv \ filter-example.dsl \ filter-script-piece-1 \ filter-script-piece-2 \ freq.dkvp \ from-first.csv \ fsec2xhms \ g.csv \ g.pprint \ gmt2sec \ gsub.dat \ having-fields-regex.dkvp \ het-join-left \ het-join-right-r0 \ het-join-right-r1 \ het-join-right-r11 \ het-join-right-r12 \ het-join-right-r13 \ het-join-right-r14 \ het-join-right-r15 \ het-join-right-r16 \ het-join-right-r2 \ het-join-right-r22 \ het-join-right-r23 \ het-join-right-r24 \ het-join-right-r25 \ het-join-right-r26 \ het-join-right-r3 \ het-join-right-r33 \ het-join-right-r34 \ het-join-right-r35 \ het-join-right-r36 \ het-join-right-r4 \ het-join-right-r44 \ het-join-right-r45 \ het-join-right-r46 \ het-join-right-r5 \ het-join-right-r55 \ het-join-right-r56 \ het-join-right-r6 \ het-join-right-r66 \ het.csv \ het.dkvp \ int-float.dkvp \ int64arith.dkvp \ int64io.dkvp \ ints.dkvp \ join-het.dkvp \ joina.dkvp \ joinb.dkvp \ json-output-options.dkvp \ line-ending-cr.bin \ line-ending-crlf.bin \ line-ending-lf.bin \ line-term-lf.dkvp \ line-term-crlf.dkvp \ line-term-lf.csv \ line-term-crlf.csv \ line-term-lf.json \ line-term-crlf.json \ line-term-lf-wrap.json \ line-term-crlf-wrap.json \ line-term-lf.pprint \ line-term-crlf.pprint \ line-term-lf.xtab \ line-term-crlf.xtab \ logi.dkvp \ mand.mlr \ merge-fields-abxy.dkvp \ merge-fields-in-out.csv \ merge-fields-in-out-mixed.csv \ minmax.dkvp \ missings.dkvp \ mixed-types.xtab \ modarith.dat \ multi-format-join-a.csv \ multi-format-join-a.dkvp \ multi-format-join-a.json \ multi-format-join-b.csv \ multi-format-join-b.dkvp \ multi-format-join-b.json \ multi-ips.dkvp \ multi-sep.csv-crlf \ multi-sep.dkvp-crlf \ near-ovf.dkvp \ nest-explode-vary-fs-ps.dkvp \ nest-explode.dkvp \ null-fields.csv \ null-fields.nidx \ null-vs-empty.dkvp \ nullvals.dkvp \ ofmt.dat \ page-aligned-final-ifs.dkvp \ page-aligned-final-irs.dkvp \ page-aligned-final-no-ifs.dkvp \ page-aligned-no-final-eol.xtab \ page-aligned-no-final-irs.csvl \ page-aligned-no-final-irs.dkvp \ page-aligned-no-final-irs.nidx \ put-example.dsl \ put-script-piece-1 \ put-script-piece-2 \ put-script-piece-3 \ quote-original.csv \ ragged.csv \ regex.dkvp \ regularize.dkvp \ remove-empty-columns.csv \ repeat-input.dat \ repeats.dkvp \ reshape-long-ragged.dkvp \ reshape-long.tbl \ reshape-wide-ragged.dkvp \ reshape-wide.tbl \ rfc-csv \ scinot.dkvp \ scinot1.dkvp \ sec2gmt \ sec2xhms \ short \ short-circuit.dkvp \ sieve.mlr \ simple.tsv \ small \ small-nested.json \ small-non-nested-wrapped.json \ small-non-nested.json \ sort-het.dkvp \ space-pad.dkvp \ space-pad.nidx \ space-pad.pprint \ string-numeric-ordering.dkvp \ sub.dat \ subtab.dkvp \ subtab1.mlr \ subtab2.mlr \ subtab3.mlr \ subtab4.mlr \ test-dsl-stack-allocation.mlr \ trivial-records.csv \ truncated.csv \ truncated.dkvp \ truncated.nidx \ truncated.pprint \ truncated.xtab-crlf \ typeof.dkvp \ unset1.dkvp \ unset4.dkvp \ utf8-1.csv \ utf8-2.csv \ utf8-align.dkvp \ utf8-align.nidx \ valgrind.txt \ x0to10.dat \ xy40.dkvp \ xyz345 \ xyz2 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/reg_test/input/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/reg_test/input/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/reg_test/input/a.csv000066400000000000000000000000221354153536500171460ustar00rootroot00000000000000a,b,c 1,2,3 4,5,6 miller-5.6.2/c/reg_test/input/a.pprint000066400000000000000000000000221354153536500176670ustar00rootroot00000000000000a b c 1 2 3 4 5 6 miller-5.6.2/c/reg_test/input/abixy000066400000000000000000000011121354153536500172510ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy-het000066400000000000000000000011301354153536500200270ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy-wide000066400000000000000000007700331354153536500202160ustar00rootroot00000000000000a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 a=wye,b=cat,i=3,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 a=dog,b=hat,i=4,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 a=dog,b=pan,i=5,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 a=wye,b=cat,i=6,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 a=dog,b=hat,i=7,x=0.8500003149528544,y=0.2984098741712895,x2=0.7225005354199517,xy=0.25364848703063775,y2=0.08904845300292483 a=pan,b=pan,i=8,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 a=hat,b=hat,i=9,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 a=wye,b=hat,i=10,x=0.3834648944206174,y=0.4999709279216641,x2=0.14704532525301522,xy=0.19172129908885902,y2=0.24997092876684981 a=pan,b=hat,i=11,x=0.025474999754416028,y=0.7861954915044592,x2=0.0006489756124874967,xy=0.020028329952999087,y2=0.6181033508619382 a=cat,b=hat,i=12,x=0.6335445699880142,y=0.15467178563525052,x2=0.4013787221612979,xy=0.0979914699195631,y2=0.02392336127159689 a=hat,b=wye,i=13,x=0.35922068401384877,y=0.8502678133887914,x2=0.1290394998233774,xy=0.30543378552048117,y2=0.7229553544849566 a=dog,b=dog,i=14,x=0.5440047442770544,y=0.933608851612059,x2=0.2959411617959433,xy=0.5078876445760125,y2=0.8716254878083876 a=wye,b=dog,i=15,x=0.4689175303764642,y=0.09048353045392021,x2=0.21988365029436224,xy=0.04242931364019586,y2=0.008187269283405506 a=pan,b=pan,i=16,x=0.3959177828066379,y=0.6339858483805666,x2=0.15675089074252413,xy=0.25100627142161924,y2=0.4019380559468268 a=dog,b=hat,i=17,x=0.34033844788864975,y=0.8845934733681523,x2=0.11583025911125516,xy=0.3010611697385466,y2=0.782505613125532 a=wye,b=wye,i=18,x=0.6770613653962891,y=0.896307226056897,x2=0.4584120925122874,xy=0.6068549942886431,y2=0.8033666434818095 a=dog,b=wye,i=19,x=0.4865373244199632,y=0.44117766146315884,x2=0.23671856805373653,xy=0.2146493990021416,y2=0.1946377289741016 a=dog,b=dog,i=20,x=0.3223311725542929,y=0.08115611029827985,x2=0.10389738480022534,xy=0.026159144192390068,y2=0.006586314238746564 a=dog,b=dog,i=21,x=0.9699029150382065,y=0.9391556988975561,x2=0.9407116645996103,xy=0.9108898500354838,y2=0.8820134267717571 a=pan,b=hat,i=22,x=0.26484467292256164,y=0.45079159705782246,x2=0.07014270077545866,xy=0.1193897530790182,y2=0.20321306397794217 a=wye,b=hat,i=23,x=0.298540818680359,y=0.0037836288354773373,x2=0.08912662041833898,xy=0.0011295676501260176,y2=1.4315847164655591e-05 a=cat,b=dog,i=24,x=0.03302652200852407,y=0.42137227890920304,x2=0.001090751155979525,xy=0.013916460843176739,y2=0.1775545974331352 a=hat,b=hat,i=25,x=0.16707716998324063,y=0.4457018161567563,x2=0.027914780729608683,xy=0.07446659809986143,y2=0.198650108925431 a=hat,b=pan,i=26,x=0.06110349364580614,y=0.25884152875789423,x2=0.0037336369357230713,xy=0.01581612170772874,y2=0.06699893700972379 a=wye,b=hat,i=27,x=0.20149350928735854,y=0.679023911581996,x2=0.04059963428493484,xy=0.13681891083468545,y2=0.4610734725001144 a=dog,b=hat,i=28,x=0.017464614203827944,y=0.4877770939619681,x2=0.00030501274928854875,xy=0.008518838763510107,y2=0.23792649339398267 a=cat,b=pan,i=29,x=0.6919668720154277,y=0.26988079254367914,x2=0.4788181519668153,xy=0.18674856783349422,y2=0.07283564218400437 a=cat,b=wye,i=30,x=0.7578438094718101,y=0.2777757581815844,x2=0.5743272395547452,xy=0.21051063875925224,y2=0.07715937183335406 a=cat,b=wye,i=31,x=0.8651145139700118,y=0.7249926402997512,x2=0.7484231222815698,xy=0.6272016556447548,y2=0.5256143284888044 a=pan,b=hat,i=32,x=0.447405904410204,y=0.21332839270281612,x2=0.2001720433011126,xy=0.09544438247357862,y2=0.04550900313316693 a=pan,b=wye,i=33,x=0.5062113125043399,y=0.6524477940033689,x2=0.2562498929073665,xy=0.3302764541430066,y2=0.42568812389986255 a=wye,b=dog,i=34,x=0.4894262274410983,y=0.3656319118417568,x2=0.23953803210722568,xy=0.17894984724478727,y2=0.13368669495705823 a=hat,b=pan,i=35,x=0.9421777782395372,y=0.6146368699441981,x2=0.8876989658083905,xy=0.579097200548128,y2=0.37777848189480107 a=wye,b=cat,i=36,x=0.6903385961939384,y=0.12453739987209256,x2=0.4765673773950176,xy=0.08597297380134354,y2=0.01550956396690148 a=hat,b=cat,i=37,x=0.7984210083195517,y=0.6470047092959555,x2=0.6374761065260096,xy=0.5165821523835752,y2=0.4186150938511439 a=dog,b=cat,i=38,x=0.7956841726564652,y=0.2999281899559054,x2=0.6331133026160035,xy=0.23864811368141572,y2=0.08995691913022569 a=hat,b=dog,i=39,x=0.5434267154348226,y=0.3612723556363975,x2=0.2953125950482796,xy=0.1963250496008886,y2=0.13051771494707165 a=pan,b=dog,i=40,x=0.2404413468975618,y=0.0765949802658491,x2=0.057812041297913654,xy=0.018416600220712925,y2=0.005866791001925813 a=cat,b=dog,i=41,x=0.8872583855262857,y=0.7666563573215487,x2=0.787227442686711,xy=0.6802222818505804,y2=0.5877619702215462 a=hat,b=dog,i=42,x=0.20947794695668354,y=0.799420366596795,x2=0.04388101026118712,xy=0.16746093715005594,y2=0.6390729225297542 a=cat,b=cat,i=43,x=0.5807454568810496,y=0.0360767170935169,x2=0.33726528568797903,xy=0.020951389551242844,y2=0.0013015295162456544 a=pan,b=wye,i=44,x=0.6714396627452867,y=0.8691227831036271,x2=0.4508312207075043,xy=0.5835635083713443,y2=0.7553744121097945 a=dog,b=dog,i=45,x=0.6489232347198245,y=0.2874511000815766,x2=0.4211013645592404,xy=0.1865336976887087,y2=0.08262813493810857 a=pan,b=pan,i=46,x=0.07003615899489535,y=0.645706837635313,x2=0.00490506356675826,xy=0.04522282674471786,y2=0.4169373201689965 a=pan,b=hat,i=47,x=0.3233978593086597,y=0.644896974713749,x2=0.10458617540542367,xy=0.20855830109705728,y2=0.41589210799494575 a=cat,b=cat,i=48,x=0.4850891731208423,y=0.6464096154902582,x2=0.23531150587906252,xy=0.31356630587553097,y2=0.41784539099826346 a=wye,b=cat,i=49,x=0.19369511371092585,y=0.07897643847420421,x2=0.037517797075488496,xy=0.015297350230744924,y2=0.006237277834069763 a=hat,b=hat,i=50,x=0.5979364499843741,y=0.01637946256325762,x2=0.35752799821991593,xy=0.009793877697726217,y2=0.0002682867938611578 a=wye,b=dog,i=51,x=0.4964418953954285,y=0.4045337696709349,x2=0.24645455550380557,xy=0.20082751136689664,y2=0.16364757080417702 a=dog,b=hat,i=52,x=0.4240421413278761,y=0.685508287221285,x2=0.17981173762193045,xy=0.2906844020113184,y2=0.46992161184905973 a=pan,b=hat,i=53,x=0.8506849616367519,y=0.29553024216317647,x2=0.723664903954922,xy=0.25140313271708176,y2=0.08733812403302572 a=cat,b=hat,i=54,x=0.5285609997486995,y=0.8641537366322317,x2=0.2793767304553447,xy=0.45675796297090676,y2=0.7467616805354484 a=wye,b=hat,i=55,x=0.06564514633598773,y=0.5764673221543989,x2=0.004309285237473243,xy=0.037842281720740494,y2=0.3323145735118635 a=hat,b=hat,i=56,x=0.6457343407175848,y=0.2098352953222723,x2=0.41697283878197394,xy=0.13549785608420722,y2=0.04403085116298523 a=wye,b=wye,i=57,x=0.9589282669375345,y=0.1806724444876513,x2=0.9195434211318234,xy=0.17325191407591137,y2=0.03264253219714344 a=hat,b=hat,i=58,x=0.2095505109133845,y=0.17354923704865088,x2=0.04391141662406048,xy=0.03636733129217287,y2=0.030119337680168817 a=cat,b=pan,i=59,x=0.10509164053821951,y=0.49751015159809986,x2=0.011044252911014343,xy=0.05228415801586261,y2=0.2475163509431643 a=hat,b=pan,i=60,x=0.9078087025266115,y=0.22758683685265058,x2=0.8241166403830498,xy=0.20660531107534033,y2=0.05179576830859499 a=hat,b=hat,i=61,x=0.14600101883109162,y=0.016141081372988975,x2=0.02131629749971677,xy=0.0023566143254919454,y2=0.0002605345078894516 a=cat,b=pan,i=62,x=0.5638136789154102,y=0.33173672628650086,x2=0.3178858645321293,xy=0.18703770407894652,y2=0.11004925556728479 a=pan,b=cat,i=63,x=0.4703043612464288,y=0.7943843739826639,x2=0.22118619220741143,xy=0.373602435590061,y2=0.6310465336278289 a=pan,b=cat,i=64,x=0.5660165862339231,y=0.5283906051426638,x2=0.32037477589190416,xy=0.2990778465209274,y2=0.27919663160303043 a=hat,b=pan,i=65,x=0.9349300070803035,y=0.6887739895721908,x2=0.8740941181391764,xy=0.6439554709474572,y2=0.4744096087111924 a=dog,b=pan,i=66,x=0.8907404476648366,y=0.5089531839168581,x2=0.7934185451061535,xy=0.4533451868825461,y2=0.25903334341910716 a=wye,b=wye,i=67,x=0.990492139162684,y=0.9945620485002424,x2=0.9810746777430697,xy=0.9851058909490261,y2=0.9891536683169986 a=cat,b=dog,i=68,x=0.1656761916562901,y=0.3999596321678488,x2=0.027448600481731773,xy=0.06626378867381981,y2=0.15996770736384092 a=cat,b=wye,i=69,x=0.6008546501272044,y=0.879880439279109,x2=0.3610263105794852,xy=0.5286802534968199,y2=0.7741895874259977 a=hat,b=cat,i=70,x=0.7958883526623057,y=0.45932818752107474,x2=0.6334382699035187,xy=0.36557395449751084,y2=0.2109823838513956 a=wye,b=hat,i=71,x=0.017814788759946132,y=0.5195828497321303,x2=0.00031736669856150305,xy=0.009256258711268735,y2=0.2699663377357615 a=wye,b=pan,i=72,x=0.5937409556269868,y=0.7099917576944956,x2=0.3525283223888475,xy=0.4215511847008139,y2=0.5040882959941194 a=dog,b=wye,i=73,x=0.08067388329639391,y=0.3846702905768087,x2=0.006508275446120184,xy=0.0310328461295834,y2=0.14797123245244642 a=pan,b=dog,i=74,x=0.2323374771961123,y=0.025425666031404726,x2=0.05398070330985401,xy=0.005907335101767463,y2=0.0006464644931405281 a=dog,b=cat,i=75,x=0.11546004262581322,y=0.21181188154916497,x2=0.013331021443154605,xy=0.024455808872320288,y2=0.04486427316539749 a=cat,b=cat,i=76,x=0.8050585149476237,y=0.5162954081076918,x2=0.6481192124896733,xy=0.4156480145254557,y2=0.26656094843308803 a=dog,b=cat,i=77,x=0.8529816281035857,y=0.486089158207742,x2=0.7275776578822437,xy=0.41462512157154124,y2=0.23628266972711123 a=dog,b=hat,i=78,x=0.6287883161763603,y=0.5001069007838987,x2=0.39537474655990246,xy=0.3144613760520858,y2=0.25010691221167636 a=dog,b=hat,i=79,x=0.45765651274678665,y=0.37805167557845964,x2=0.20944948365954968,xy=0.17301781148331738,y2=0.1429230694076809 a=wye,b=pan,i=80,x=0.9768690333313619,y=0.08934000010682541,x2=0.9542731082817494,xy=0.0872734795421783,y2=0.007981635619087565 a=wye,b=pan,i=81,x=0.4249966140862822,y=0.9387797028554198,x2=0.1806221219848043,xy=0.3989781950864795,y2=0.8813073304933102 a=hat,b=dog,i=82,x=0.6581016472840274,y=0.12685953318239107,x2=0.4330977781579504,xy=0.0834864677610143,y2=0.01609334115925418 a=cat,b=pan,i=83,x=0.563231401107445,y=0.9376434508380005,x2=0.31722961119345555,xy=0.5281102345547067,y2=0.8791752408993938 a=dog,b=pan,i=84,x=0.5288078629216791,y=0.9774983060162068,x2=0.2796377558877934,xy=0.5169087902139918,y2=0.9555029382645539 a=hat,b=wye,i=85,x=0.4301872159773744,y=0.9715341379047415,x2=0.18506104079036417,xy=0.4179415660122193,y2=0.9438785811143093 a=dog,b=cat,i=86,x=0.15046114299129065,y=0.47217970263414166,x2=0.02263855555024561,xy=0.0710446977556207,y2=0.22295367157966645 a=pan,b=dog,i=87,x=0.690315349060835,y=0.9329493827118672,x2=0.4765352811489825,xy=0.6440292787828332,y2=0.8703945507024541 a=hat,b=wye,i=88,x=0.844518095822385,y=0.5458380509826849,x2=0.713210814171467,xy=0.46097011144329897,y2=0.2979391779005761 a=hat,b=pan,i=89,x=0.07332776066392399,y=0.7010649246914367,x2=0.005376960483985719,xy=0.05140752100764556,y2=0.49149202863260977 a=hat,b=cat,i=90,x=0.6722332393534578,y=0.870469095664934,x2=0.4518975280916433,xy=0.5851582599359135,y2=0.7577164465077281 a=dog,b=cat,i=91,x=0.7897989951157833,y=0.8936987604639762,x2=0.6237824526859012,xy=0.7058423829506696,y2=0.7986974744548475 a=dog,b=wye,i=92,x=0.9603096176050011,y=0.9462873537666934,x2=0.9221945616646634,xy=0.9087288468401418,y2=0.8954597558987711 a=cat,b=cat,i=93,x=0.051983319126123306,y=0.7379236193825374,x2=0.002702265467368377,xy=0.03835971899706639,y2=0.5445312680426239 a=cat,b=cat,i=94,x=0.46303093657328553,y=0.050030061480300425,x2=0.21439764822393398,xy=0.02316546622404256,y2=0.0025030070517226403 a=pan,b=hat,i=95,x=0.7547208898758858,y=0.07612227053712461,x2=0.569603621615049,xy=0.05745106775915161,y2=0.00579460007172719 a=dog,b=wye,i=96,x=0.01733736709766953,y=0.7408141524929686,x2=0.00030058429787935406,xy=0.012843766912919533,y2=0.5488056085338753 a=wye,b=dog,i=97,x=0.05692328077076536,y=0.7682235553036355,x2=0.0032402598937073855,xy=0.04372980513326444,y2=0.5901674309233579 a=dog,b=cat,i=98,x=0.1138603279074798,y=0.08999053060825568,x2=0.012964174271198822,xy=0.010246351323624088,y2=0.008098295599155403 a=cat,b=hat,i=99,x=0.30356000952142026,y=0.8246328358017656,x2=0.09214867938064476,xy=0.2503255514876598,y2=0.6800193138824617 a=dog,b=hat,i=100,x=0.6096169376426714,y=0.9104030491019464,x2=0.37163281066082876,xy=0.5549971188140792,y2=0.8288337118141209 a=cat,b=cat,i=101,x=0.8601431032845563,y=0.11237298572604193,x2=0.7398461581279869,xy=0.09665684866774886,y2=0.012627687920985222 a=wye,b=cat,i=102,x=0.4819560971418857,y=0.32001749297885806,x2=0.23228167957223878,xy=0.15423438193322125,y2=0.10241119581247347 a=hat,b=pan,i=103,x=0.6938564126848401,y=0.02765597421813426,x2=0.48143672142387517,xy=0.019189275060299063,y2=0.000764852909954107 a=cat,b=pan,i=104,x=0.315975934495323,y=0.778992200602797,x2=0.09984079118019266,xy=0.2461427885500369,y2=0.6068288485999882 a=wye,b=hat,i=105,x=0.5198900877033598,y=0.009164564556345067,x2=0.2702857032922071,xy=0.00476456627096134,y2=8.398924350741626e-05 a=wye,b=dog,i=106,x=0.7179488758856343,y=0.06444079818478121,x2=0.5154505883854459,xy=0.046265198617936695,y2=0.004152616470691701 a=pan,b=hat,i=107,x=0.6781474171226103,y=0.8224379844724085,x2=0.45988391935006756,xy=0.5577341949134893,y2=0.6764042383030375 a=hat,b=hat,i=108,x=0.7310592435672268,y=0.7865030408830793,x2=0.5344476176050859,xy=0.5749803181313077,y2=0.6185870333183308 a=hat,b=pan,i=109,x=0.7084818505505407,y=0.4807798730113917,x2=0.5019465325595187,xy=0.34062381413856474,y2=0.23114928629284992 a=hat,b=cat,i=110,x=0.8826404450115393,y=0.4693490677671145,x2=0.7790541551701681,xy=0.41426647003971706,y2=0.22028854741385942 a=wye,b=dog,i=111,x=0.16532203956598923,y=0.8201244515579681,x2=0.02733137676625851,xy=0.13558464702950163,y2=0.672604116043258 a=hat,b=dog,i=112,x=0.21932074656397027,y=0.7287694430170744,x2=0.04810158987337728,xy=0.15983425831551354,y2=0.5311049010754167 a=dog,b=wye,i=113,x=0.2115544521551379,y=0.7617111396233063,x2=0.044755286226660536,xy=0.16114338284347432,y2=0.5802038602262359 a=wye,b=dog,i=114,x=0.09981034795046184,y=0.8513191274753099,x2=0.009962105557992262,xy=0.08497045833019426,y2=0.724744256805323 a=dog,b=dog,i=115,x=0.8486258183007894,y=0.27714545391484613,x2=0.7201657794866845,xy=0.23519278761683002,y2=0.07680960262566609 a=dog,b=hat,i=116,x=0.9581187355019588,y=0.929883007686579,x2=0.9179915113198724,xy=0.8909383314894234,y2=0.8646824079842385 a=cat,b=hat,i=117,x=0.13641737796121878,y=0.742727066387978,x2=0.018609701009814017,xy=0.10132087893747603,y2=0.5516434951452919 a=dog,b=pan,i=118,x=0.9081608785949646,y=0.353699840894134,x2=0.8247561814103781,xy=0.3212163582653159,y2=0.1251035774485357 a=cat,b=hat,i=119,x=0.44250837621436523,y=0.7613578627611387,x2=0.19581366301987418,xy=0.336907231568471,y2=0.5796657951882089 a=pan,b=pan,i=120,x=0.27250908954834085,y=0.7458231673885796,x2=0.07426120388646565,xy=0.20324359230912165,y2=0.5562521970135331 a=dog,b=pan,i=121,x=0.737965443497151,y=0.21636403152403683,x2=0.5445929957959468,xy=0.15966917848046738,y2=0.0468133941373344 a=pan,b=dog,i=122,x=0.7390528984439438,y=0.3684696519589872,x2=0.5461991866983944,xy=0.2723185642689207,y2=0.13576988441477714 a=cat,b=dog,i=123,x=0.15678654142006032,y=0.03288680496526697,x2=0.02458201957046429,xy=0.005156208408860275,y2=0.0010815419408235082 a=wye,b=dog,i=124,x=0.25449765035082783,y=0.41497175568786404,x2=0.06476905403409222,xy=0.10560933678451917,y2=0.17220155801866832 a=hat,b=pan,i=125,x=0.8828478876916597,y=0.22292432647794536,x2=0.7794203928016253,xy=0.19680827074613996,y2=0.04969525533564557 a=dog,b=pan,i=126,x=0.6262694822433262,y=0.4445756661164717,x2=0.3922134643893239,xy=0.2784241722367446,y2=0.19764752290290452 a=hat,b=dog,i=127,x=0.14352357272424598,y=0.5813144374046438,x2=0.020599015927531925,xy=0.08343232493249954,y2=0.33792647513507756 a=wye,b=pan,i=128,x=0.04883068934042978,y=0.1489684167994927,x2=0.0023844362214615624,xy=0.0072742304822716874,y2=0.022191589203747374 a=dog,b=hat,i=129,x=0.06061789696216857,y=0.7233489718249176,x2=0.0036745294321160857,xy=0.043847893441773436,y2=0.5232337350401655 a=hat,b=pan,i=130,x=0.19499005566725736,y=0.49210369398737897,x2=0.03802112180912012,xy=0.095955326684662,y2=0.24216604563602392 a=wye,b=hat,i=131,x=0.17100268381292483,y=0.6889838638269865,x2=0.02924191787122314,xy=0.11781808981821343,y2=0.4746987646139635 a=wye,b=hat,i=132,x=0.4530191728273819,y=0.40357018860333094,x2=0.20522637094920532,xy=0.18282503301887149,y2=0.16286889712932812 a=cat,b=cat,i=133,x=0.1415361047978303,y=0.24880740801699253,x2=0.0200324689613424,xy=0.035215231375569575,y2=0.0619051262841342 a=wye,b=pan,i=134,x=0.7011988379965257,y=0.9651856584321452,x2=0.49167981040767794,xy=0.6767870621435318,y2=0.9315833552430937 a=cat,b=wye,i=135,x=0.9905881531288986,y=0.7789092765450115,x2=0.9812648891193222,xy=0.7715783017076895,y2=0.6066996610878732 a=dog,b=pan,i=136,x=0.17871521618418273,y=0.48324493385810807,x2=0.03193912849575917,xy=0.08636322282436287,y2=0.23352566609952724 a=cat,b=dog,i=137,x=0.11381591729240514,y=0.6098950123980131,x2=0.012954063029111609,xy=0.06941576028814267,y2=0.3719719261479726 a=pan,b=hat,i=138,x=0.3707431233181129,y=0.4434239077163661,x2=0.13745046348766946,xy=0.1643963645006882,y2=0.19662476193445236 a=hat,b=hat,i=139,x=0.8124229919653702,y=0.6498112783277437,x2=0.6600311178739638,xy=0.5279216229518674,y2=0.42225469744193633 a=dog,b=wye,i=140,x=0.7589142664965747,y=0.1238824448462621,x2=0.575950863892034,xy=0.09401615476230336,y2=0.01534686014108717 a=pan,b=dog,i=141,x=0.3925050233933668,y=0.2525418847325982,x2=0.1540601933890274,xy=0.09912395837477339,y2=0.06377740354429291 a=wye,b=cat,i=142,x=0.24697144094906698,y=0.2893682360276446,x2=0.060994892644458475,xy=0.07146569021663711,y2=0.08373397602175064 a=cat,b=hat,i=143,x=0.49400128820886957,y=0.5368768322085028,x2=0.2440372727520226,xy=0.2652178467204975,y2=0.28823673296223684 a=hat,b=dog,i=144,x=0.5837149712277536,y=0.03669862718107353,x2=0.3407231676354172,xy=0.02142153810909839,y2=0.0013467892369754288 a=hat,b=pan,i=145,x=0.17945263084751795,y=0.3085459122455083,x2=0.03220324671809555,xy=0.05536937568970387,y2=0.09520057996341291 a=hat,b=pan,i=146,x=0.8842766950456613,y=0.07694621084098674,x2=0.7819452734008775,xy=0.06804174101875439,y2=0.005920719362785585 a=pan,b=cat,i=147,x=0.3709303665708895,y=0.7846804091324313,x2=0.13758933684441446,xy=0.2910617918004883,y2=0.6157233444762398 a=cat,b=hat,i=148,x=0.1464772298983058,y=0.06380198058698772,x2=0.02145557887868113,xy=0.009345537378407444,y2=0.004070692726822357 a=hat,b=cat,i=149,x=0.04743299762903541,y=0.7805486995199068,x2=0.002249889264076079,xy=0.03702376461367441,y2=0.6092562723222178 a=pan,b=wye,i=150,x=0.8517240305872459,y=0.08519694501745723,x2=0.7254338242797838,xy=0.07256428540398864,y2=0.0072585194403076295 a=cat,b=pan,i=151,x=0.45041917119444896,y=0.3138635785836258,x2=0.20287742977949433,xy=0.14137017293376053,y2=0.09851034596131984 a=hat,b=pan,i=152,x=0.6789876338039754,y=0.4049875753568014,x2=0.4610242068587214,xy=0.27498155551152376,y2=0.1640149361933809 a=hat,b=dog,i=153,x=0.2976251388840214,y=0.007776000657727544,x2=0.08858072329573304,xy=0.002314333275718402,y2=6.04661862289792e-05 a=dog,b=cat,i=154,x=0.6190546351013247,y=0.2963477425478711,x2=0.3832286412404343,xy=0.1834554436260737,y2=0.08782198451321929 a=wye,b=dog,i=155,x=0.2489637938016529,y=0.10921759500477168,x2=0.06198297062411194,xy=0.027191226802280415,y2=0.011928483058626328 a=hat,b=wye,i=156,x=0.5528475169700776,y=0.9833085796986953,x2=0.30564037701998026,xy=0.5436197067017974,y2=0.9668957629090655 a=pan,b=dog,i=157,x=0.9427806478704022,y=0.9595549728824017,x2=0.8888353499989352,xy=0.9046498590013368,y2=0.9207457459833466 a=hat,b=cat,i=158,x=0.5703122642035605,y=0.45464569171363867,x2=0.3252560787009918,xy=0.2592900138515992,y2=0.20670270499377297 a=dog,b=dog,i=159,x=0.6180020247265648,y=0.9508349928541551,x2=0.38192650256613364,xy=0.5876179507647367,y2=0.9040871836359611 a=wye,b=pan,i=160,x=0.14997774547353349,y=0.24991446798202221,x2=0.022493324137323994,xy=0.03748160846916126,y2=0.06245724130673721 a=wye,b=dog,i=161,x=0.45699387909445444,y=0.45016785054053354,x2=0.20884340552979683,xy=0.20572395226213103,y2=0.20265109366028414 a=wye,b=pan,i=162,x=0.8574555865158207,y=0.9533185047446349,x2=0.73523008284719,xy=0.817428277622196,y2=0.9088161714885464 a=cat,b=dog,i=163,x=0.35085399550424223,y=0.1222329668937654,x2=0.12309852616129083,xy=0.04288592481701535,y2=0.014940898195652346 a=hat,b=wye,i=164,x=0.9179146876349837,y=0.7115420763707129,x2=0.8425673737760297,xy=0.6531349227709706,y2=0.5062921264459453 a=wye,b=dog,i=165,x=0.5353869664505179,y=0.5135025869076683,x2=0.28663920384508795,xy=0.2749225922689899,y2=0.26368490676086737 a=dog,b=dog,i=166,x=0.058915443887073926,y=0.32188624236086805,x2=0.0034710295284109565,xy=0.0189640708498328,y2=0.10361075302119949 a=dog,b=hat,i=167,x=0.9602603205217703,y=0.7091271395742602,x2=0.9220998831685732,xy=0.6809466543382653,y2=0.5028613000807723 a=wye,b=pan,i=168,x=0.8631399650055263,y=0.06510849316319112,x2=0.7450105991897411,xy=0.056197742510439325,y2=0.004239115881981305 a=cat,b=cat,i=169,x=0.38828432861132955,y=0.13394452837883797,x2=0.15076471984515097,xy=0.05200856127273828,y2=0.01794113668262933 a=cat,b=pan,i=170,x=0.3479446854386803,y=0.41483989686840483,x2=0.12106550412502218,xy=0.1443413374232917,y2=0.17209214003378875 a=hat,b=wye,i=171,x=0.5752905429710464,y=0.7789264481743366,x2=0.3309592088319214,xy=0.4481090193047228,y2=0.6067264116654876 a=hat,b=cat,i=172,x=0.9643802230164986,y=0.4654908242727618,x2=0.9300292145453516,xy=0.44891014492429976,y2=0.2166817074821352 a=dog,b=hat,i=173,x=0.5465586715669809,y=0.09025119265821935,x2=0.2987263814650629,xy=0.04932757196661203,y2=0.008145277776231027 a=cat,b=cat,i=174,x=0.6751932842416101,y=0.6923429494765411,x2=0.45588597108497164,xy=0.46746530987858886,y2=0.4793387596898763 a=cat,b=wye,i=175,x=0.6231661625380126,y=0.4202688106916195,x2=0.3883360661323527,xy=0.261897301993111,y2=0.17662587324014828 a=dog,b=cat,i=176,x=0.588006969888869,y=0.933885675424745,x2=0.3457521966378893,xy=0.5491312862291241,y2=0.8721424547635321 a=wye,b=dog,i=177,x=0.7515102778196476,y=0.30641964804276345,x2=0.5647676976685639,xy=0.2302775148300158,y2=0.09389300070665102 a=cat,b=cat,i=178,x=0.7762409980355185,y=0.20325576000840828,x2=0.6025500870311779,xy=0.15777545400539467,y2=0.041312903976595663 a=hat,b=dog,i=179,x=0.884577849985587,y=0.3025087879262265,x2=0.7824779726851236,xy=0.2675925732255273,y2=0.09151156677259467 a=pan,b=wye,i=180,x=0.14529735183640635,y=0.6252090570486897,x2=0.021111320450672457,xy=0.09084122033331131,y2=0.3908863650157117 a=hat,b=pan,i=181,x=0.28399983215192304,y=0.8429872541566109,x2=0.08065590466232046,xy=0.23940823868668798,y2=0.7106275106705026 a=wye,b=wye,i=182,x=0.8353984331738984,y=0.7464675457858652,x2=0.6978905421494044,xy=0.623597818164677,y2=0.5572137969115727 a=cat,b=hat,i=183,x=0.34914519697283475,y=0.9084716400172681,x2=0.12190236856919957,xy=0.3171885096980633,y2=0.8253207207156648 a=hat,b=hat,i=184,x=0.3669411646566748,y=0.939863478805397,x2=0.13464581831959693,xy=0.34487459953112637,y2=0.883343358792183 a=pan,b=pan,i=185,x=0.48276574111045845,y=0.23155090227726105,x2=0.23306276078993018,xy=0.11178484294267726,y2=0.0536158203454137 a=wye,b=dog,i=186,x=0.2913083475738195,y=0.07374105365755401,x2=0.08486055336618924,xy=0.02148138448933442,y2=0.00543774299452626 a=hat,b=dog,i=187,x=0.009029315708523944,y=0.30598072357423967,x2=8.152854216419725e-05,xy=0.0027627965538744048,y2=0.09362420319901527 a=pan,b=wye,i=188,x=0.04421095887479698,y=0.36367411116842285,x2=0.00195460888462899,xy=0.01607838117269549,y2=0.13225885913414237 a=cat,b=pan,i=189,x=0.8091137129636748,y=0.8876893624644986,x2=0.654665000505864,xy=0.7182416360220079,y2=0.787992404232628 a=cat,b=hat,i=190,x=0.6926570752215496,y=0.7838783903250481,x2=0.4797738238544714,xy=0.5429589131719241,y2=0.6144653308185886 a=dog,b=wye,i=191,x=0.3228779770933895,y=0.43740509607640576,x2=0.10425018809191935,xy=0.14122847259148957,y2=0.19132321807360975 a=dog,b=cat,i=192,x=0.9293928938191809,y=0.057193449174089306,x2=0.8637711510815912,xy=0.053155185235407104,y2=0.003271090628429137 a=hat,b=cat,i=193,x=0.06425009999547093,y=0.142317240191156,x2=0.004128075349428014,xy=0.009143896913361227,y2=0.020254196855627186 a=dog,b=hat,i=194,x=0.4531287054737033,y=0.27676361789433723,x2=0.20532562372427418,xy=0.1254095398986797,y2=0.0765981001899627 a=hat,b=cat,i=195,x=0.15002219488262636,y=0.9201689558482206,x2=0.022506658957400724,xy=0.13804576641920455,y2=0.8467109073068044 a=wye,b=hat,i=196,x=0.6626130110009391,y=0.7700958506232554,x2=0.43905600234773057,xy=0.5102755303408046,y2=0.5930476191471552 a=dog,b=wye,i=197,x=0.17818642335763146,y=0.42923785497720846,x2=0.03175040146898507,xy=0.07648435814809049,y2=0.18424513614543503 a=dog,b=dog,i=198,x=0.5064089553205039,y=0.4484062855584241,x2=0.2564500300288041,xy=0.2270769586287891,y2=0.20106819692830297 a=dog,b=wye,i=199,x=0.4712455283340482,y=0.4010465455813673,x2=0.22207234797483622,xy=0.18899139125903638,y2=0.16083833172274772 a=wye,b=dog,i=200,x=0.9226606422613064,y=0.2627524940019982,x2=0.8513026607780464,xy=0.2424313848716437,y2=0.0690388731042701 a=dog,b=pan,i=201,x=0.8586732093831214,y=0.8290490023386249,x2=0.7373196805123099,xy=0.7118821675739819,y2=0.6873222482786693 a=pan,b=dog,i=202,x=0.5354169735755743,y=0.6047143965939313,x2=0.2866713355928272,xy=0.32377435210190225,y2=0.36567950144796246 a=dog,b=dog,i=203,x=0.04315872660095632,y=0.4977426641942203,x2=0.0018626756818160947,xy=0.021481939561589964,y2=0.24774775975916036 a=pan,b=cat,i=204,x=0.6736808738647746,y=0.4116172737283622,x2=0.45384591981120637,xy=0.27729868466315916,y2=0.16942878003156947 a=dog,b=cat,i=205,x=0.7084602563402208,y=0.7764646118117859,x2=0.5019159348136514,xy=0.5500943179232879,y2=0.6028972933960275 a=pan,b=hat,i=206,x=0.846022268235842,y=0.7161501328213358,x2=0.7157536783509191,xy=0.605878959766906,y2=0.5128710127400169 a=hat,b=wye,i=207,x=0.5802854404844445,y=0.3698796019086972,x2=0.3367311924382258,xy=0.21463574771979932,y2=0.1368109199081363 a=wye,b=dog,i=208,x=0.7785473703666729,y=0.748001128982437,x2=0.6061360079048613,xy=0.5823543120005789,y2=0.5595056889590003 a=wye,b=wye,i=209,x=0.7896380913474478,y=0.974775073742359,x2=0.6235283153068403,xy=0.7697195287229841,y2=0.9501864443894216 a=pan,b=wye,i=210,x=0.5724957252200905,y=0.05440965268402409,x2=0.3277513553952774,xy=0.031149293572313615,y2=0.0029604103051961298 a=wye,b=cat,i=211,x=0.6929472847216296,y=0.39994383006146406,x2=0.4801759394030792,xy=0.2771399910822604,y2=0.15995506720423325 a=wye,b=wye,i=212,x=0.07058342953121044,y=0.865284985377559,x2=0.00498202052438735,xy=0.06107478178981139,y2=0.7487181059198426 a=hat,b=pan,i=213,x=0.036673575990873175,y=0.7235022443197023,x2=0.0013449511759583493,xy=0.026533414536625895,y2=0.5234554975356462 a=wye,b=hat,i=214,x=0.6548697103289118,y=0.23477827212480973,x2=0.4288543375062729,xy=0.1537491790578966,y2=0.05512083706191121 a=dog,b=hat,i=215,x=0.35159363478296046,y=0.2102813772850397,x2=0.12361808401989378,xy=0.07393359376681417,y2=0.044218257632893214 a=dog,b=pan,i=216,x=0.8135484638165029,y=0.5726493378206012,x2=0.6618611029781918,xy=0.46587798908948774,y2=0.3279272641063731 a=cat,b=cat,i=217,x=0.8709609999341167,y=0.28896413402352317,x2=0.7585730634062364,xy=0.25167649111422385,y2=0.08350027075196466 a=wye,b=wye,i=218,x=0.08719663778611642,y=0.2616108398138992,x2=0.007603253641203185,xy=0.02281158564017429,y2=0.06844023150813364 a=pan,b=wye,i=219,x=0.38026953308772515,y=0.7053556432055249,x2=0.14460491779475648,xy=0.268225261102557,y2=0.4975265834018798 a=wye,b=cat,i=220,x=0.05345420342600993,y=0.0780787369858923,x2=0.0028573518639092516,xy=0.004173636690089812,y2=0.006096289169312145 a=cat,b=cat,i=221,x=0.11539660728851342,y=0.3377214375036798,x2=0.013316376973699388,xy=0.038971908096524364,y2=0.11405576934955189 a=dog,b=pan,i=222,x=0.8183003829840468,y=0.5178153474775814,x2=0.6696155167918377,xy=0.42372849715592215,y2=0.2681327340833284 a=pan,b=wye,i=223,x=0.2221032096613662,y=0.6333589821084413,x2=0.049329835741880795,xy=0.14067106279414063,y2=0.4011436002174409 a=pan,b=pan,i=224,x=0.039710319262320604,y=0.6520052001892092,x2=0.0015769094559154307,xy=0.025891334660206752,y2=0.4251107810737707 a=hat,b=dog,i=225,x=0.36964408169776986,y=0.271263408040449,x2=0.13663674713418755,xy=0.10027091336331921,y2=0.07358383654171914 a=cat,b=wye,i=226,x=0.6066386461288729,y=0.8204059790745054,x2=0.3680104469770718,xy=0.49768997242179036,y2=0.6730659705011978 a=cat,b=pan,i=227,x=0.12321098964692656,y=0.06855927715701327,x2=0.015180947969775043,xy=0.00844725638799353,y2=0.004700374484292161 a=hat,b=pan,i=228,x=0.24516345981870424,y=0.26898582371311797,x2=0.06010512203027741,xy=0.06594549518369205,y2=0.07235337335862457 a=pan,b=wye,i=229,x=0.9358289979073265,y=0.07408812183525015,x2=0.875775913324231,xy=0.06933381281391807,y2=0.005489049797074871 a=pan,b=pan,i=230,x=0.7428830695288504,y=0.639523773239204,x2=0.5518752549926068,xy=0.4750913837006123,y2=0.40899065653810873 a=dog,b=cat,i=231,x=0.2654604721892435,y=0.24247109406817857,x2=0.07046926229493612,xy=0.06436649112358117,y2=0.058792231458619504 a=dog,b=pan,i=232,x=0.9226596784808877,y=0.8783208744732139,x2=0.8513008822944551,xy=0.8103912556445076,y2=0.7714475585353913 a=wye,b=hat,i=233,x=0.7132524612279595,y=0.6133723334562391,x2=0.5087290734477419,xy=0.4374893264867992,y2=0.37622561944955174 a=hat,b=cat,i=234,x=0.18129409233828286,y=0.14075273424219947,x2=0.03286754791676183,xy=0.0255176391985711,y2=0.01981133219665523 a=cat,b=dog,i=235,x=0.10082533483175837,y=0.3924249112255551,x2=0.010165748143936188,xy=0.03956637307063965,y2=0.15399731095038482 a=dog,b=wye,i=236,x=0.7726971141507323,y=0.6197385098311806,x2=0.5970608302168698,xy=0.47887015807462846,y2=0.38407582056777234 a=hat,b=cat,i=237,x=0.6231126061219576,y=0.6468592277326921,x2=0.3882693199080979,xy=0.40306613918655465,y2=0.4184268605029348 a=wye,b=hat,i=238,x=0.5981684929378425,y=0.864184577482475,x2=0.3578055459435297,xy=0.5169279863328182,y2=0.7468149839585638 a=dog,b=dog,i=239,x=0.26356489832647445,y=0.5281983158813417,x2=0.06946645562984481,xy=0.13921453542148085,y2=0.27899346089988564 a=dog,b=wye,i=240,x=0.11159855008602237,y=0.2494380614284566,x2=0.012454236381302445,xy=0.02783692599168394,y2=0.062219346489186485 a=cat,b=cat,i=241,x=0.0845788651633742,y=0.7782649774619638,x2=0.007153584432324235,xy=0.0658247685901319,y2=0.605696375143871 a=dog,b=hat,i=242,x=0.5429333798951006,y=0.48584690422492494,x2=0.2947766550043176,xy=0.2637825018224097,y2=0.23604721434494338 a=hat,b=pan,i=243,x=0.08100577123880537,y=0.36005778435663893,x2=0.006561934973993667,xy=0.029166758512345008,y2=0.1296416080758119 a=hat,b=wye,i=244,x=0.15058148801382099,y=0.5426167622977167,x2=0.022674784532456513,xy=0.08170803948803199,y2=0.2944329507264568 a=dog,b=hat,i=245,x=0.03800440296280816,y=0.7060923351074192,x2=0.0014443346445595015,xy=0.026834617632372534,y2=0.498566385697448 a=cat,b=dog,i=246,x=0.23397318719440163,y=0.05562375729079583,x2=0.05474345232590651,xy=0.013014467777055335,y2=0.003094002375145362 a=dog,b=pan,i=247,x=0.7180442962589734,y=0.9789266392331171,x2=0.5155876113900443,xy=0.7029126897573055,y2=0.9582973650002453 a=pan,b=cat,i=248,x=0.11146867790316062,y=0.7782788544169932,x2=0.012425266153478567,xy=0.08675371494184865,y2=0.6057179752326273 a=pan,b=dog,i=249,x=0.9216417789370487,y=0.2960193921262023,x2=0.8494235686822477,xy=0.2728238391590569,y2=0.08762748051476633 a=wye,b=dog,i=250,x=0.8936319731370298,y=0.4528717725074187,x2=0.7985781034127811,xy=0.4047006956438687,y2=0.2050928423340112 a=cat,b=hat,i=251,x=0.01325361629448818,y=0.5200326784504148,x2=0.0001756583448815226,xy=0.006892313580776749,y2=0.2704339866563125 a=pan,b=hat,i=252,x=0.07433877240630482,y=0.09753668852818931,x2=0.005526253082876387,xy=0.007250757689761707,y2=0.009513405609045017 a=hat,b=pan,i=253,x=0.7146115566167207,y=0.7956331890808649,x2=0.5106696768501726,xy=0.5685686717450026,y2=0.6330321715669873 a=hat,b=pan,i=254,x=0.49433932221345944,y=0.386116830538318,x2=0.2443713654864625,xy=0.1908727323035213,y2=0.14908620682495619 a=dog,b=hat,i=255,x=0.907140804810107,y=0.7893834040317629,x2=0.8229044397515286,xy=0.7160818964371152,y2=0.6231261585607734 a=pan,b=hat,i=256,x=0.7964354159520071,y=0.8663361959149535,x2=0.6343093717826465,xy=0.6899808285478054,y2=0.7505384043523926 a=hat,b=dog,i=257,x=0.9349608449277914,y=0.42804573048051864,x2=0.8741517815480896,xy=0.40020599783779937,y2=0.18322314738260082 a=dog,b=pan,i=258,x=0.46500532906688263,y=0.48642051379866635,x2=0.2162299560605998,xy=0.22618813108383098,y2=0.23660491624415855 a=wye,b=pan,i=259,x=0.6416052149195055,y=0.20912858896404318,x2=0.4116572518119049,xy=0.13417799326808785,y2=0.04373476672209172 a=dog,b=dog,i=260,x=0.02000070676075616,y=0.47209439803866526,x2=0.00040002827092975717,xy=0.009442221618567042,y2=0.22287312065948972 a=hat,b=cat,i=261,x=0.4182390609397455,y=0.45190412161985016,x2=0.17492391209576014,xy=0.18900395546108667,y2=0.20421733513700832 a=cat,b=dog,i=262,x=0.2513467234237762,y=0.03548677236411568,x2=0.06317517537586824,xy=0.008919483958605888,y2=0.0012593110128225646 a=cat,b=hat,i=263,x=0.12495706870437084,y=0.09634906121116771,x2=0.015614269019188855,xy=0.012039496261365515,y2=0.009283141596273341 a=pan,b=pan,i=264,x=0.8338593496048697,y=0.6001359925660235,x2=0.6953214149234563,xy=0.5004290084355772,y2=0.3601632095732062 a=dog,b=hat,i=265,x=0.9001805241346884,y=0.3414510446791148,x2=0.8103249760314023,xy=0.3073675803655825,y2=0.11658881591245886 a=hat,b=pan,i=266,x=0.8335743054196116,y=0.8169125697585177,x2=0.6948461226557879,xy=0.6809573279250064,y2=0.667346146629465 a=dog,b=pan,i=267,x=0.8458637889181786,y=0.3430998568910747,x2=0.715485549403017,xy=0.2902157449271693,y2=0.11771751179867594 a=dog,b=dog,i=268,x=0.7414869829804196,y=0.012891560807983926,x2=0.549802945929405,xy=0.009558924529420622,y2=0.00016619234006594717 a=wye,b=cat,i=269,x=0.3079352177094503,y=0.4609585778769133,x2=0.09482409830576656,xy=0.1419453800335659,y2=0.21248281051830634 a=dog,b=pan,i=270,x=0.05212953023805167,y=0.5387824620231573,x2=0.002717487922839943,xy=0.0280864766457681,y2=0.2902865413837349 a=wye,b=hat,i=271,x=0.7790221947957395,y=0.7025339627538687,x2=0.6068755799843711,xy=0.5472895495830671,y2=0.4935539688226542 a=dog,b=cat,i=272,x=0.0008954359621561325,y=0.054271178088963645,x2=8.018055623224788e-07,xy=4.859636456943798e-05,y2=0.002945360771164008 a=cat,b=cat,i=273,x=0.10380296471678485,y=0.6937832475316934,x2=0.010775055483994081,xy=0.07201675796462878,y2=0.48133519455562296 a=hat,b=dog,i=274,x=0.29979216886710724,y=0.8838417337375815,x2=0.08987534451404415,xy=0.2649688302924539,y2=0.7811762102962538 a=hat,b=pan,i=275,x=0.38696122136190136,y=0.586256931066018,x2=0.14973898683789444,xy=0.2268586980771863,y2=0.34369718922294573 a=cat,b=hat,i=276,x=0.05756896680109025,y=0.9110663752285088,x2=0.003314185938545031,xy=0.052449149909119655,y2=0.8300419400720139 a=pan,b=dog,i=277,x=0.7092891435128651,y=0.4397689333439547,x2=0.5030910891052137,xy=0.3119233300750999,y2=0.1933967147344797 a=cat,b=pan,i=278,x=0.29118271542024754,y=0.3841899576024924,x2=0.08478737375950886,xy=0.11186947509188351,y2=0.14760192352260493 a=dog,b=dog,i=279,x=0.7294751397040691,y=0.20665147583356047,x2=0.532133979446271,xy=0.15074711420373857,y2=0.04270483246418863 a=wye,b=dog,i=280,x=0.9751199139198755,y=0.3299994281281837,x2=0.9508588465231055,xy=0.3217890139499627,y2=0.1088996225649283 a=cat,b=pan,i=281,x=0.7630555075664498,y=0.3673871684719181,x2=0.5822537076274923,xy=0.2803368023117403,y2=0.13497333155781355 a=cat,b=hat,i=282,x=0.6862576061985859,y=0.9279592416281224,x2=0.4709495020654134,xy=0.6368190878095704,y2=0.86110835412304 a=pan,b=cat,i=283,x=0.30466183485464227,y=0.6314883078693645,x2=0.09281883361699732,xy=0.1923903865647338,y2=0.3987774829757133 a=dog,b=dog,i=284,x=0.1266975390198115,y=0.2837976906149976,x2=0.01605226639367666,xy=0.03595646898042605,y2=0.08054112919840589 a=dog,b=dog,i=285,x=0.7354466023082858,y=0.5108089498320502,x2=0.540881704846802,xy=0.37567270658264496,y2=0.26092578322852195 a=wye,b=hat,i=286,x=0.08791157895576474,y=0.6465223747243519,x2=0.007728445714495657,xy=0.05683680279224838,y2=0.41799118101921534 a=dog,b=hat,i=287,x=0.11970840137472971,y=0.1482816627005039,x2=0.014330101359693391,xy=0.01775056079506421,y2=0.021987451493226014 a=cat,b=wye,i=288,x=0.35399343255194404,y=0.316440140894129,x2=0.12531135028990775,xy=0.11201773167233352,y2=0.1001343627690962 a=wye,b=pan,i=289,x=0.8443166377691436,y=0.9126747095020535,x2=0.7128705848137912,xy=0.7705864421037036,y2=0.8329751253646578 a=hat,b=hat,i=290,x=0.8878219877890456,y=0.07743429366510513,x2=0.7882278820016924,xy=0.06874786852479434,y2=0.00599606983541374 a=cat,b=cat,i=291,x=0.0271768798964106,y=0.7062174315398737,x2=0.0007385828009039266,xy=0.019192786317710722,y2=0.4987430606107762 a=cat,b=hat,i=292,x=0.9443573120228451,y=0.592886870065721,x2=0.8918107327710133,xy=0.5598970509489022,y2=0.3515148406963272 a=cat,b=wye,i=293,x=0.9220457035038476,y=0.7750015695972157,x2=0.8501682793499052,xy=0.7145868674558509,y2=0.6006274328781479 a=cat,b=dog,i=294,x=0.6020924895573685,y=0.82611891030865,x2=0.3625153659813899,xy=0.4973999913781555,y2=0.6824724539695514 a=pan,b=cat,i=295,x=0.3403817179931268,y=0.9507443645375449,x2=0.11585971394395249,xy=0.3236160001735731,y2=0.9039148466999 a=pan,b=cat,i=296,x=0.9097127625952343,y=0.8605433360178909,x2=0.827577310428653,xy=0.7828472555417545,y2=0.7405348331648007 a=wye,b=cat,i=297,x=0.6160372456767832,y=0.9020031887873672,x2=0.37950188806103735,xy=0.5556675600122452,y2=0.8136097525825787 a=pan,b=wye,i=298,x=0.50577150863781,y=0.8259093126367452,x2=0.25580481894976626,xy=0.41772139905030325,y2=0.6821261927001009 a=cat,b=cat,i=299,x=0.2981525480578324,y=0.6662890636412198,x2=0.08889494191337807,xy=0.19865578206769693,y2=0.4439411163278934 a=cat,b=dog,i=300,x=0.0818678111539376,y=0.8004492798748463,x2=0.00670233850313679,xy=0.06553103048309926,y2=0.64071904965216 a=cat,b=cat,i=301,x=0.12451202794377325,y=0.18564081545729194,x2=0.015503245102670971,xy=0.02311451440172319,y2=0.03446251236364832 a=hat,b=cat,i=302,x=0.6734590557879861,y=0.673610869564445,x2=0.45354709982284586,xy=0.45364934018539543,y2=0.4537516035953678 a=cat,b=pan,i=303,x=0.3585747227398197,y=0.8584656686844071,x2=0.12857583178793858,xy=0.30782408913016523,y2=0.7369633043097662 a=cat,b=cat,i=304,x=0.20349559283978325,y=0.05618018115685175,x2=0.041410456305214845,xy=0.011432419270359966,y2=0.0031562127548166803 a=hat,b=pan,i=305,x=0.5025551615837717,y=0.3304723949698324,x2=0.25256169043449084,xy=0.16608060785304013,y2=0.1092120038370969 a=pan,b=pan,i=306,x=0.6152907560829367,y=0.22422100197362638,x2=0.3785827145211119,xy=0.1379611098340262,y2=0.05027505772605696 a=dog,b=pan,i=307,x=0.43445251775626836,y=0.5191797007874173,x2=0.18874899018476068,xy=0.2255589281750395,y2=0.2695475617097121 a=dog,b=cat,i=308,x=0.3070261088744515,y=0.05842083731286474,x2=0.09426503153058653,xy=0.017936722357356227,y2=0.003412994232336209 a=dog,b=dog,i=309,x=0.8794547781341963,y=0.7332302883378141,x2=0.7734407067830683,xy=0.644842880551405,y2=0.537626655735954 a=wye,b=cat,i=310,x=0.9888690403216374,y=0.5281326729751255,x2=0.9778619789066361,xy=0.5222540494874135,y2=0.2789241202638508 a=pan,b=cat,i=311,x=0.3819560927822282,y=0.06438228257288925,x2=0.1458904568134661,xy=0.02459120509594212,y2=0.004145078309295358 a=hat,b=pan,i=312,x=0.38739993766324976,y=0.8334486763106171,x2=0.1500787117014898,xy=0.32287796524825113,y2=0.6946366960439199 a=hat,b=hat,i=313,x=0.2889248371208133,y=0.3113593460747701,x2=0.0834775615052885,xy=0.0899594483506959,y2=0.09694464238810846 a=pan,b=pan,i=314,x=0.7705573615128862,y=0.9786808359787603,x2=0.5937586473817008,xy=0.7541297227350193,y2=0.9578161787120851 a=hat,b=pan,i=315,x=0.22161939991648127,y=0.6799850454378898,x2=0.04911515841934126,xy=0.1506978777221264,y2=0.46237966201916914 a=wye,b=pan,i=316,x=0.47223177684534823,y=0.2308631128058921,x2=0.22300285106251477,xy=0.1090208979683745,y2=0.05329777685442607 a=dog,b=hat,i=317,x=0.4588358326624131,y=0.6629410208229793,x2=0.21053032133500998,xy=0.3041810952953819,y2=0.4394907970898139 a=hat,b=cat,i=318,x=0.45926143061048397,y=0.7089887074654951,x2=0.21092106164638838,xy=0.3256111680772812,y2=0.5026649873135934 a=cat,b=dog,i=319,x=0.9572556652231445,y=0.41269372516458,x2=0.9163384086018049,xy=0.39505340641583764,y2=0.1703161107902179 a=pan,b=dog,i=320,x=0.7575141377032723,y=0.863562750562446,x2=0.5738276688203321,xy=0.6541609923449773,y2=0.7457406241589773 a=wye,b=wye,i=321,x=0.7490553802399513,y=0.12306864410919094,x2=0.561083962666418,xy=0.09218523000882527,y2=0.015145891162874698 a=hat,b=pan,i=322,x=0.2586385043179358,y=0.9230414729790952,x2=0.06689387591581888,xy=0.2387340659947375,y2=0.8520055608394178 a=pan,b=cat,i=323,x=0.07085767112499741,y=0.9208584577909767,x2=0.005020809557258292,xy=0.06524988575482533,y2=0.8479802992851762 a=dog,b=wye,i=324,x=0.371993577798137,y=0.7171686471344474,x2=0.13837922192305863,xy=0.2667821309321927,y2=0.5143308684326535 a=pan,b=wye,i=325,x=0.7493887659784733,y=0.24257918878264784,x2=0.561583522574739,xy=0.18178611893388757,y2=0.0588446628304475 a=cat,b=dog,i=326,x=0.7673708339325579,y=0.48141094171150267,x2=0.5888579967703493,xy=0.3694207158054138,y2=0.23175649479955582 a=wye,b=hat,i=327,x=0.39089795934844385,y=0.18978525585445072,x2=0.15280121462277765,xy=0.07418666922792709,y2=0.036018443339739324 a=wye,b=hat,i=328,x=0.30799655248421554,y=0.13719489618597558,x2=0.09486187634216213,xy=0.04225555504371033,y2=0.018822439539480616 a=pan,b=hat,i=329,x=0.5989139125471804,y=0.3688054470820389,x2=0.35869787464257163,xy=0.220882713280616,y2=0.13601745779738258 a=dog,b=dog,i=330,x=0.8251164627142066,y=0.6107692981277933,x2=0.6808171770420046,xy=0.5039558028056436,y2=0.3730391355355173 a=dog,b=wye,i=331,x=0.405811566767869,y=0.9995223047806924,x2=0.1646830277225926,xy=0.40561771252248424,y2=0.9990448377541072 a=dog,b=cat,i=332,x=0.5785425869013293,y=0.9296892821389334,x2=0.33471152485848216,xy=0.5378648423030984,y2=0.8643221613240054 a=hat,b=hat,i=333,x=0.18855941279376276,y=0.24326199631666412,x2=0.03555465215312862,xy=0.045869339180508666,y2=0.05917639885196871 a=cat,b=cat,i=334,x=0.9241901076212868,y=0.5723216714316407,x2=0.8541273550250458,xy=0.5289340271144027,y2=0.3275520955903069 a=hat,b=dog,i=335,x=0.3875326629689546,y=0.29951305698338815,x2=0.15018156486780937,xy=0.11607109256674465,y2=0.08970807130353432 a=cat,b=hat,i=336,x=0.36353909967371323,y=0.3037407740127752,x2=0.132160676991574,xy=0.1104216475188011,y2=0.09225845779787978 a=wye,b=wye,i=337,x=0.15322408671389842,y=0.5364783269608415,x2=0.023477620749308262,xy=0.08220140169037513,y2=0.2878089952987036 a=pan,b=wye,i=338,x=0.8342151312807021,y=0.0878748423317367,x2=0.6959148852576791,xy=0.07330652313204074,y2=0.007721987914827585 a=pan,b=cat,i=339,x=0.36288996792695283,y=0.07297789973834401,x2=0.13168912882202485,xy=0.026482947695424038,y2=0.005325773850219791 a=wye,b=wye,i=340,x=0.5495314800674435,y=0.4909485366614089,x2=0.301984847585115,xy=0.2697916759884896,y2=0.24103046564997876 a=cat,b=pan,i=341,x=0.79498448769681,y=0.6638388502217857,x2=0.6320003356785594,xy=0.5277415882568056,y2=0.4406820190637824 a=cat,b=hat,i=342,x=0.3295734049370175,y=0.7755432624102072,x2=0.1086186292417793,xy=0.25559843366849483,y2=0.6014673518698676 a=pan,b=cat,i=343,x=0.6408042653352577,y=0.31349610449795595,x2=0.4106301064718593,xy=0.20088964092827785,y2=0.09827980753539332 a=hat,b=hat,i=344,x=0.7362290618135519,y=0.6713538150535315,x2=0.5420332314588627,xy=0.49427018940181033,y2=0.4507159449869314 a=pan,b=dog,i=345,x=0.7471489053370911,y=0.5757507025427996,x2=0.5582314867464135,xy=0.4301715071519139,y2=0.3314888714785273 a=hat,b=hat,i=346,x=0.4039115623544295,y=0.9777356701558304,x2=0.16314455020359617,xy=0.3949187421022966,y2=0.9559670406950708 a=dog,b=wye,i=347,x=0.753780066913511,y=0.6228105759522281,x2=0.568184389276137,xy=0.4694621976157128,y2=0.3878930135179461 a=hat,b=wye,i=348,x=0.6271735401916162,y=0.17271963779635158,x2=0.3933466495164848,xy=0.1083251866973515,y2=0.029832073280502882 a=dog,b=pan,i=349,x=0.008499846398031474,y=0.7784194540391546,x2=7.224738879012863e-05,xy=0.0066164457925723345,y2=0.6059368464266155 a=dog,b=pan,i=350,x=0.4146878755302308,y=0.5980930475191678,x2=0.1719660341117762,xy=0.24802193524512506,y2=0.35771529349076553 a=dog,b=cat,i=351,x=0.19333948681663715,y=0.8310163194530423,x2=0.03738015716252061,xy=0.16066826873930182,y2=0.6905881231972809 a=wye,b=wye,i=352,x=0.6301771590119656,y=0.16193987131098408,x2=0.39712325174039215,xy=0.10205080803351926,y2=0.026224521920218086 a=hat,b=dog,i=353,x=0.971822816670598,y=0.6107563563649813,x2=0.9444395870015747,xy=0.5935469625420876,y2=0.373023326840228 a=dog,b=cat,i=354,x=0.6059945338166207,y=0.5908847323988631,x2=0.36722937501562347,xy=0.3580729179494077,y2=0.349144766982076 a=cat,b=dog,i=355,x=0.9195111520172229,y=0.029690019889583197,x2=0.8455007586840404,xy=0.027300304392084907,y2=0.0008814972810438458 a=cat,b=cat,i=356,x=0.18749508840350748,y=0.8115036777374969,x2=0.035154408175439085,xy=0.15215295379716343,y2=0.6585382189814832 a=hat,b=wye,i=357,x=0.45853408021748976,y=0.9829665524302919,x2=0.21025350272089932,xy=0.4507236640031808,y2=0.9662232431966937 a=cat,b=pan,i=358,x=0.41012256850789486,y=0.4498989364506413,x2=0.1682005211995129,xy=0.18451370738610717,y2=0.20240905301941817 a=hat,b=cat,i=359,x=0.7473329464063138,y=0.8632953504427492,x2=0.5585065327843423,xy=0.6451690578652509,y2=0.7452788620960691 a=cat,b=wye,i=360,x=0.7951325722573537,y=0.8459362528452746,x2=0.6322358074645957,xy=0.6726314686906103,y2=0.7156081438779044 a=cat,b=wye,i=361,x=0.44763526932508135,y=0.31613950159283066,x2=0.2003773343437381,xy=0.14151519093980375,y2=0.09994418446736338 a=pan,b=hat,i=362,x=0.906722306509765,y=0.6953547596343465,x2=0.8221453411223884,xy=0.6304936714981979,y2=0.4835182417461397 a=pan,b=hat,i=363,x=0.06080903598353993,y=0.5645160214383047,x2=0.003697738857247454,xy=0.03432767506092667,y2=0.3186783384605325 a=wye,b=pan,i=364,x=0.30514786611348743,y=0.13300047635483836,x2=0.09311522019361484,xy=0.040584811551756264,y2=0.017689126710613918 a=wye,b=pan,i=365,x=0.37125897309400546,y=0.06739019658056855,x2=0.13783322510281548,xy=0.025019215179105037,y2=0.004541438595167673 a=cat,b=wye,i=366,x=0.7791499362465059,y=0.27692636995359365,x2=0.6070746231529341,xy=0.2157671634943188,y2=0.07668821437567462 a=cat,b=hat,i=367,x=0.9527733550611998,y=0.818523110036349,x2=0.907777066114575,xy=0.7798670097444599,y2=0.6699800816635771 a=dog,b=hat,i=368,x=0.35020686980579574,y=0.23868938503279757,x2=0.12264485165917356,xy=0.0835906623882064,y2=0.05697262252733509 a=pan,b=dog,i=369,x=0.8447943084740233,y=0.9949640479404968,x2=0.7136774236301031,xy=0.8405399648364069,y2=0.9899534566941391 a=hat,b=wye,i=370,x=0.69940906738559,y=0.16693271246129116,x2=0.48917304354118085,xy=0.11675425273869851,y2=0.02786653048968411 a=hat,b=pan,i=371,x=0.14714810220633867,y=0.3418482846423728,x2=0.02165256398292709,xy=0.05030232632761743,y2=0.11686024971293275 a=cat,b=pan,i=372,x=0.42287448553330953,y=0.7687144669280749,x2=0.1788228305150612,xy=0.32506973472422196,y2=0.5909219316645143 a=hat,b=pan,i=373,x=0.614903553546492,y=0.24894173738731518,x2=0.3781063801641035,xy=0.1530751589454977,y2=0.061971988613415 a=wye,b=hat,i=374,x=0.14942412760967416,y=0.14152237684943625,x2=0.022327569911912187,xy=0.021146857697974558,y2=0.02002858314911385 a=pan,b=hat,i=375,x=0.6737371074317526,y=0.3039803689768553,x2=0.45392168993050497,xy=0.20480285451050337,y2=0.0924040647233051 a=hat,b=pan,i=376,x=0.8919202420346224,y=0.027633376425687306,x2=0.7955217181510994,xy=0.024646767789832852,y2=0.0007636034926837309 a=pan,b=wye,i=377,x=0.7792580509827138,y=0.3805839747344706,x2=0.6072431100213779,xy=0.29657312638683797,y2=0.14484416182468815 a=dog,b=wye,i=378,x=0.5473115371142823,y=0.13039780370314658,x2=0.29954991865839836,xy=0.0713682223810956,y2=0.017003587210604347 a=hat,b=wye,i=379,x=0.6443554743420592,y=0.9254896320591379,x2=0.41519397731458013,xy=0.5963443108641237,y2=0.8565310590489585 a=hat,b=cat,i=380,x=0.8305972957484694,y=0.3049792454885969,x2=0.6898918677046704,xy=0.2533149365622372,y2=0.09301234017879385 a=cat,b=pan,i=381,x=0.49398849327681127,y=0.9686677193449981,x2=0.2440246314898942,xy=0.4785107071651207,y2=0.9383171505010399 a=cat,b=wye,i=382,x=0.6658169957258326,y=0.6336496624002959,x2=0.4433122717973734,xy=0.4218947145620531,y2=0.4015118946600089 a=hat,b=pan,i=383,x=0.5270422144850718,y=0.5949792755559095,x2=0.2777734958493285,xy=0.3135791949617103,y2=0.35400033834103484 a=wye,b=dog,i=384,x=0.18443535729748028,y=0.13212443323489675,x2=0.03401640102144921,xy=0.024368417051405262,y2=0.01745686585764269 a=hat,b=cat,i=385,x=0.17314133568517354,y=0.7379797046975181,x2=0.029977922122845946,xy=0.12777479177987822,y2=0.5446140445454359 a=cat,b=dog,i=386,x=0.03478093143569683,y=0.15264820757159847,x2=0.0012097131915346437,xy=0.005309246841329784,y2=0.023301475274821813 a=pan,b=pan,i=387,x=0.15246713204674733,y=0.10164387298451916,x2=0.02324622635456029,xy=0.015497349804073496,y2=0.010331476915293063 a=pan,b=hat,i=388,x=0.17718620062853796,y=0.3500245786758208,x2=0.03139494969317651,xy=0.06201952522217346,y2=0.12251720567718588 a=pan,b=pan,i=389,x=0.7605186211036413,y=0.28891913356723176,x2=0.5783885730453839,xy=0.21972838107100987,y2=0.08347426574123991 a=hat,b=dog,i=390,x=0.6840388221413488,y=0.3649565855293123,x2=0.4679091101965238,xy=0.24964447289819922,y2=0.13319330932121426 a=dog,b=cat,i=391,x=0.05921371062232661,y=0.389622580190799,x2=0.003506263525664635,xy=0.023070998715342215,y2=0.15180575499453558 a=wye,b=dog,i=392,x=0.862948560484572,y=0.8359180773168853,x2=0.744680218042395,xy=0.7213543015036373,y2=0.6987590319851582 a=cat,b=pan,i=393,x=0.6921946903714182,y=0.45062372911318316,x2=0.47913348937838357,xy=0.31191935264751364,y2=0.20306174523987147 a=wye,b=hat,i=394,x=0.49393307945457976,y=0.007566390255741684,x2=0.2439698869794842,xy=0.003737290439373615,y2=5.72502615021827e-05 a=cat,b=pan,i=395,x=0.48487561271603474,y=0.6592712972060344,x2=0.23510435980675012,xy=0.31966457417887095,y2=0.43463864331972735 a=wye,b=hat,i=396,x=0.10898530427790898,y=0.8271502664191211,x2=0.011877796548548406,xy=0.0901472234692414,y2=0.6841775632372231 a=hat,b=pan,i=397,x=0.20482548839258963,y=0.9341499290560121,x2=0.04195348069526287,xy=0.19133771545080064,y2=0.8726360899553525 a=wye,b=wye,i=398,x=0.2414582722670322,y=0.7573182779141447,x2=0.058302097246180254,xy=0.18286076294139353,y2=0.5735309740628458 a=pan,b=cat,i=399,x=0.25476845018641514,y=0.8106336969146216,x2=0.0649069632103879,xy=0.20652389063182233,y2=0.6571269905734666 a=pan,b=pan,i=400,x=0.447675163315121,y=0.3962846957190259,x2=0.2004130518492203,xy=0.17740681587529797,y2=0.15704156006112097 a=cat,b=dog,i=401,x=0.7196040784960461,y=0.6029774996918733,x2=0.5178300297881437,xy=0.4339050680196204,y2=0.36358186513466306 a=pan,b=dog,i=402,x=0.3293635895274962,y=0.21292877581824698,x2=0.10848037410643702,xy=0.07013098591719337,y2=0.04533866357145728 a=pan,b=pan,i=403,x=0.4794159710575423,y=0.7444257071982773,x2=0.22983967330504623,xy=0.35688957329665977,y2=0.5541696335376552 a=pan,b=hat,i=404,x=0.35229848819990284,y=0.7048649430677805,x2=0.12411422478793707,xy=0.24832285382788966,y2=0.49683458796594543 a=cat,b=cat,i=405,x=0.5539894972585298,y=0.4939436326491574,x2=0.30690436307275853,xy=0.2736395847253586,y2=0.24398031223464578 a=wye,b=cat,i=406,x=0.9201662520135037,y=0.9061685082859349,x2=0.8467059313445787,xy=0.8338256799621362,y2=0.8211413654091564 a=dog,b=wye,i=407,x=0.599977042706569,y=0.30667551037779883,x2=0.35997245177492015,xy=0.18399826578699946,y2=0.0940498686654834 a=wye,b=wye,i=408,x=0.5163229735300138,y=0.8274828000305222,x2=0.2665894129948753,xy=0.427248379856701,y2=0.6847277843463532 a=hat,b=cat,i=409,x=0.8637691382173114,y=0.27659796335817277,x2=0.7460971241366767,xy=0.23891678444255238,y2=0.07650643333388908 a=cat,b=cat,i=410,x=0.5141323390854813,y=0.26336512902289655,x2=0.2643320620935083,xy=0.13540452981809137,y2=0.06936119118524695 a=dog,b=pan,i=411,x=0.41224226185516033,y=0.36847099985667353,x2=0.16994368245945857,xy=0.15189931840894755,y2=0.13577087773537672 a=cat,b=hat,i=412,x=0.7113346946765016,y=0.2675665550758648,x2=0.5059970478505117,xy=0.19032937376053363,y2=0.0715918613951658 a=pan,b=cat,i=413,x=0.09725330111603114,y=0.6596012359249898,x2=0.009458204577965425,xy=0.06414839761391933,y2=0.435073790433774 a=cat,b=pan,i=414,x=0.2032789261029312,y=0.7930423978993805,x2=0.04132232179756096,xy=0.16120880699907952,y2=0.6289162448659993 a=wye,b=hat,i=415,x=0.7208194991426115,y=0.5076782641736721,x2=0.5195807503442053,xy=0.3659443921072567,y2=0.2577372199143928 a=wye,b=cat,i=416,x=0.05094177917901299,y=0.823254645192439,x2=0.0025950648659233216,xy=0.04193805634348991,y2=0.6777482108309285 a=dog,b=hat,i=417,x=0.3502332835712425,y=0.9015133693043408,x2=0.12266335292109437,xy=0.31573998751483345,y2=0.8127263550344648 a=dog,b=hat,i=418,x=0.6897208043031566,y=0.17572608145503243,x2=0.4757147878885933,xy=0.121201934238207,y2=0.030879655703540693 a=pan,b=wye,i=419,x=0.6948323736722205,y=0.8023485943181106,x2=0.4827920275029723,xy=0.5574977783026223,y2=0.643763266804248 a=dog,b=pan,i=420,x=0.8611324428810029,y=0.8948892565088714,x2=0.7415490841822037,xy=0.7706181715654489,y2=0.8008267814150006 a=dog,b=dog,i=421,x=0.6682769610946666,y=0.22827141775037252,x2=0.44659409672992256,xy=0.15254852935899008,y2=0.05210784016176508 a=wye,b=hat,i=422,x=0.0541450623921913,y=0.03492968354866677,x2=0.002931687781454289,xy=0.0018912698950820602,y2=0.0012200827928100018 a=hat,b=cat,i=423,x=0.2878891280366729,y=0.6923190205915444,x2=0.08288015004171582,xy=0.1993111191613031,y2=0.47930562627283524 a=pan,b=pan,i=424,x=0.24969668722058536,y=0.5603015174164245,x2=0.062348435608934834,xy=0.1399054327435483,y2=0.3139377904191479 a=cat,b=hat,i=425,x=0.6432373390180074,y=0.4601326221257571,x2=0.413754274306967,xy=0.2959744834515503,y2=0.2117220299443248 a=pan,b=pan,i=426,x=0.08857290171262766,y=0.4948683043964537,x2=0.0078451589177948,xy=0.0438319216860018,y2=0.24489463869622113 a=hat,b=hat,i=427,x=0.9817619908536765,y=0.9720329944246192,x2=0.9638566066849745,xy=0.9543050477817748,y2=0.9448481422500918 a=hat,b=hat,i=428,x=0.9148525407955268,y=0.9648238200013665,x2=0.8369551714000311,xy=0.8826715231482961,y2=0.9308850036420292 a=wye,b=dog,i=429,x=0.35950848468859187,y=0.9331667854080467,x2=0.1292463505630875,xy=0.33548137698377123,y2=0.8708002493887874 a=cat,b=cat,i=430,x=0.37025745666447096,y=0.7068430140496296,x2=0.1370905842156426,xy=0.26171389664306477,y2=0.49962704651076484 a=hat,b=wye,i=431,x=0.7473977295217059,y=0.31222462031682663,x2=0.558603366094201,xy=0.23335597232557292,y2=0.09748421353198655 a=pan,b=wye,i=432,x=0.020626452567093057,y=0.9036046339384172,x2=0.00042545054550253975,xy=0.018638158121336245,y2=0.8165013344749809 a=dog,b=cat,i=433,x=0.39895262550969957,y=0.3255908291058476,x2=0.1591631974010826,xy=0.1298953161136578,y2=0.10600938799783324 a=cat,b=pan,i=434,x=0.03308271819637287,y=0.4561703448158573,x2=0.0010944662432606207,xy=0.01509135496708525,y2=0.20809138348941814 a=wye,b=hat,i=435,x=0.5265827060213647,y=0.8324508984088317,x2=0.277289346280783,xy=0.4383542467140387,y2=0.692974498261671 a=dog,b=dog,i=436,x=0.13573248026899842,y=0.6296955997868453,x2=0.018423306199974045,xy=0.08547014557354311,y2=0.3965165483909149 a=hat,b=cat,i=437,x=0.8654646438877281,y=0.16019212127781757,x2=0.7490290498197121,xy=0.13864061719532614,y2=0.02566151571948701 a=cat,b=dog,i=438,x=0.7966508697236587,y=0.8179096733918833,x2=0.6346526082314619,xy=0.6515884526630374,y2=0.6689762338280172 a=pan,b=wye,i=439,x=0.03263795204183584,y=0.3028707310744211,x2=0.001065235913485176,xy=0.009885080395682715,y2=0.0917306797415543 a=dog,b=hat,i=440,x=0.966023792673685,y=0.6707282859911573,x2=0.9332019680116507,xy=0.6479394826866979,y2=0.4498764336286357 a=wye,b=wye,i=441,x=0.5051303446747406,y=0.8181837283036516,x2=0.25515666511122226,xy=0.41328942868528784,y2=0.6694246132608636 a=wye,b=wye,i=442,x=0.00189056621370709,y=0.34828222446247414,x2=3.5742406084107622e-06,xy=0.0006584506064035026,y2=0.12130050787652923 a=pan,b=cat,i=443,x=0.6793754442809697,y=0.1298115452400409,x2=0.461550994291965,xy=0.088190776220252,y2=0.016851037277607187 a=hat,b=dog,i=444,x=0.6790194116161151,y=0.5696648954621644,x2=0.4610673613514952,xy=0.3868135221350746,y2=0.32451809312191865 a=cat,b=wye,i=445,x=0.6656154116151947,y=0.8994567166267486,x2=0.443043876179665,xy=0.5986922526675648,y2=0.8090223850849713 a=pan,b=dog,i=446,x=0.25382576885203534,y=0.7091042660509055,x2=0.06442752093332688,xy=0.1799889355266293,y2=0.5028288601315933 a=dog,b=cat,i=447,x=0.5286351304176596,y=0.819162354301337,x2=0.279455101111696,xy=0.4330379979993244,y2=0.6710269627045091 a=wye,b=wye,i=448,x=0.08576681150946075,y=0.49558546913709267,x2=0.007355945956499369,xy=0.042504785518308705,y2=0.24560495721983222 a=dog,b=wye,i=449,x=0.9279016015331357,y=0.24265136631045403,x2=0.8610013821277582,xy=0.22515659141367386,y2=0.05887968557233014 a=wye,b=pan,i=450,x=0.9954136776717515,y=0.8564839236024028,x2=0.9908483896960015,xy=0.8525558122597992,y2=0.7335647113893665 a=wye,b=dog,i=451,x=0.75599828738501,y=0.5714548197102787,x2=0.5715334105290681,xy=0.4320188650188803,y2=0.3265606109701071 a=hat,b=wye,i=452,x=0.8111424402968179,y=0.31828231231277015,x2=0.6579520584506768,xy=0.25817229151269433,y2=0.10130363033116375 a=pan,b=cat,i=453,x=0.8230952277223608,y=0.23017811163282564,x2=0.677485753899325,xy=0.1894585052111236,y2=0.05298196307485355 a=cat,b=pan,i=454,x=0.1681250040487443,y=0.4832147037274883,x2=0.02826601698639029,xy=0.08124047402059675,y2=0.2334964498984443 a=wye,b=cat,i=455,x=0.583591811976771,y=0.6182535096548227,x2=0.3405794030063308,xy=0.3608076859604561,y2=0.382237402200506 a=pan,b=pan,i=456,x=0.5341162080768863,y=0.18521008011230855,x2=0.2852801237304317,xy=0.09892370568720257,y2=0.034302773775207754 a=pan,b=pan,i=457,x=0.43606616667930154,y=0.6504089455435781,x2=0.19015370172238039,xy=0.28362133565711467,y2=0.4230317964431091 a=pan,b=hat,i=458,x=0.41053891653745356,y=0.39042433627756823,x2=0.16854220199174627,xy=0.16028438400524728,y2=0.15243116235777968 a=hat,b=cat,i=459,x=0.8279009780108291,y=0.49850047419497034,x2=0.6854200293912873,xy=0.41270903012487803,y2=0.2485027227726103 a=hat,b=hat,i=460,x=0.6721806454947676,y=0.10396222643019659,x2=0.4518268201777625,xy=0.06988139646892273,y2=0.010808144524323467 a=pan,b=wye,i=461,x=0.02023810899472822,y=0.5501255555291902,x2=0.0004095810556824993,xy=0.011133500953585163,y2=0.3026381268463001 a=wye,b=cat,i=462,x=0.727795641281456,y=0.40124503379262455,x2=0.5296864954682858,xy=0.29202438668010267,y2=0.16099757714324442 a=pan,b=hat,i=463,x=0.21408874740949402,y=0.4526591991311629,x2=0.04583399176736613,xy=0.0969092409453754,y2=0.20490035055806582 a=pan,b=hat,i=464,x=0.808013299733613,y=0.8508128545640562,x2=0.6528854925464016,xy=0.6874681020720776,y2=0.7238825134914378 a=cat,b=cat,i=465,x=0.18443046027469845,y=0.3198595241708798,x2=0.03401459467713712,xy=0.0589918392660814,y2=0.10231011520282166 a=dog,b=wye,i=466,x=0.6690693684021588,y=0.35529864134741296,x2=0.4476538197340637,xy=0.23771943756045874,y2=0.1262371245433176 a=hat,b=dog,i=467,x=0.5541917854317743,y=0.37428947552399106,x2=0.3071285350400577,xy=0.20742815270896298,y2=0.1400926114880243 a=cat,b=cat,i=468,x=0.1736348246454934,y=0.01764568600585459,x2=0.030149052329671244,xy=0.0030639055953759985,y2=0.0003113702346172125 a=hat,b=hat,i=469,x=0.5033692302886069,y=0.10883292644571674,x2=0.25338058200134456,xy=0.05478314641503701,y2=0.01184460587873879 a=dog,b=hat,i=470,x=0.7182088654841831,y=0.0053812060288691566,x2=0.5158239744600773,xy=0.003864829876930763,y2=2.895737832513776e-05 a=pan,b=cat,i=471,x=0.9153812295229025,y=0.684467443316095,x2=0.8379227953628606,xy=0.6265486498310846,y2=0.4684956809596717 a=wye,b=pan,i=472,x=0.5426093114832728,y=0.8937944086246787,x2=0.2944248649083514,xy=0.484981168671436,y2=0.7988684448887392 a=dog,b=wye,i=473,x=0.254035842066346,y=0.014533606202589922,x2=0.06453420905435749,xy=0.0036920568899356,y2=0.00021122570925196025 a=cat,b=dog,i=474,x=0.7208349357817031,y=0.7969304385460733,x2=0.519603004643412,xy=0.5744553014918432,y2=0.6350981238812367 a=wye,b=wye,i=475,x=0.44310978998369854,y=0.5903375948709183,x2=0.19634628597939743,xy=0.2615843676827343,y2=0.34849847591798044 a=wye,b=wye,i=476,x=0.211134619552652,y=0.37682855600072707,x2=0.0445778275736431,xy=0.07956155380778873,y2=0.1419997606175931 a=cat,b=wye,i=477,x=0.656123622461519,y=0.23518195578595602,x2=0.4304982079520259,xy=0.15430843676786626,y2=0.055310552327307375 a=pan,b=hat,i=478,x=0.261137365170943,y=0.848909404771103,x2=0.06819272348842242,xy=0.22168196523075936,y2=0.7206471775088283 a=hat,b=wye,i=479,x=0.5726860692616852,y=0.20658315802101979,x2=0.3279693339263997,xy=0.11830729674272339,y2=0.04267660117793763 a=dog,b=cat,i=480,x=0.5889373970697118,y=0.6324315776400301,x2=0.3468472576672474,xy=0.3724626071600107,y2=0.39996970039625745 a=pan,b=wye,i=481,x=0.7326724570245813,y=0.7607701934340202,x2=0.536808929282437,xy=0.5573953668543695,y2=0.5787712872176365 a=cat,b=hat,i=482,x=0.7156786664141497,y=0.6727068718078026,x2=0.5121959535603358,xy=0.48144195690304253,y2=0.45253453537743943 a=pan,b=wye,i=483,x=0.906076222484393,y=0.8837149104449258,x2=0.8209741209515873,xy=0.800713067809072,y2=0.7809520429426832 a=wye,b=wye,i=484,x=0.17485771656037297,y=0.3286561057182015,x2=0.030575221040707732,xy=0.057468056179509244,y2=0.10801483582585363 a=pan,b=hat,i=485,x=0.9746813020717191,y=0.9603727749897781,x2=0.9500036406082217,xy=0.936057386801267,y2=0.922315866941567 a=hat,b=hat,i=486,x=0.389737022988879,y=0.5054926492080817,x2=0.151894947088234,xy=0.19700920024511948,y2=0.25552281840340474 a=cat,b=cat,i=487,x=0.7717280840966645,y=0.5792209586499713,x2=0.5955642357835085,xy=0.44700108068757566,y2=0.3354969189393917 a=cat,b=hat,i=488,x=0.5352653098753735,y=0.6995994641416728,x2=0.2865089519559796,xy=0.37447132396243776,y2=0.4894394102273158 a=wye,b=pan,i=489,x=0.3817318590918931,y=0.10110815614280855,x2=0.14571921224575293,xy=0.03859620441374772,y2=0.010222859238598553 a=cat,b=wye,i=490,x=0.4338593996143578,y=0.16064648936002768,x2=0.18823397863373104,xy=0.06969798942389593,y2=0.025807294543701485 a=cat,b=dog,i=491,x=0.5523473079666366,y=0.1011038140762488,x2=0.3050875486179904,xy=0.05584441953017536,y2=0.010221981220764684 a=dog,b=pan,i=492,x=0.8548158489133266,y=0.4035450933075072,x2=0.7307101355534112,xy=0.3449567415104644,y2=0.16284864233256469 a=cat,b=dog,i=493,x=0.6761850511558616,y=0.6358566191991404,x2=0.45722622340665514,xy=0.42995674058096395,y2=0.4043136401793606 a=hat,b=cat,i=494,x=0.7255484564419751,y=0.3663459020675335,x2=0.5264205626453327,xy=0.26580170376894185,y2=0.13420931996167484 a=cat,b=pan,i=495,x=0.017780663500744698,y=0.18199852103097924,x2=0.0003161519945267147,xy=0.003236054460085049,y2=0.03312346165746379 a=dog,b=pan,i=496,x=0.3354816673166041,y=0.2950171337294082,x2=0.11254794910552864,xy=0.09897283991050743,y2=0.08703510919391551 a=hat,b=cat,i=497,x=0.845745458886744,y=0.30462935389212265,x2=0.7152853812275493,xy=0.2576388926978656,y2=0.0927990432527321 a=cat,b=wye,i=498,x=0.4270245034620467,y=0.8684115407395496,x2=0.18234992655700752,xy=0.3708330069850171,y2=0.7541386040896385 a=cat,b=wye,i=499,x=0.2841158830878526,y=0.3616334878960804,x2=0.08072183502279034,xy=0.10274581776773514,y2=0.13077877956788453 a=hat,b=cat,i=500,x=0.1078620490437403,y=0.891240434209545,x2=0.011634221623914238,xy=0.09613101942447434,y2=0.7943095115700184 a=cat,b=hat,i=501,x=0.02602252145560835,y=0.4249719491548738,x2=0.0006771716229075969,xy=0.011058841664914405,y2=0.18060115756849263 a=cat,b=dog,i=502,x=0.9600130477076377,y=0.10206080237229287,x2=0.9216250517689071,xy=0.09797970193691179,y2=0.010416407380876222 a=dog,b=wye,i=503,x=0.7224035498570839,y=0.30405882634135073,x2=0.5218668888461163,xy=0.21965317551437039,y2=0.09245176987607968 a=cat,b=dog,i=504,x=0.29699950881556403,y=0.8492341300547505,x2=0.08820870823668629,xy=0.2522221194956737,y2=0.7211986076498488 a=dog,b=wye,i=505,x=0.719987868759384,y=0.3042780893445137,x2=0.51838253116068,xy=0.21907653305733388,y2=0.09258515565514788 a=wye,b=dog,i=506,x=0.571928391586696,y=0.8759035093371151,x2=0.32710208510294503,xy=0.5009540852803188,y2=0.7672069576690738 a=pan,b=dog,i=507,x=0.9451105204196616,y=0.08262536392557762,x2=0.8932338958079236,xy=0.0780901006995666,y2=0.0068269507638341435 a=hat,b=cat,i=508,x=0.06494158136397976,y=0.7691311772880609,x2=0.004217408990054404,xy=0.04994859492942615,y2=0.5915627678765186 a=hat,b=wye,i=509,x=0.8526682827229164,y=0.9502200981859352,x2=0.7270432003616473,xy=0.8102225393290023,y2=0.9029182349964884 a=dog,b=hat,i=510,x=0.7961747152551889,y=0.4290742277373424,x2=0.6338941772116812,xy=0.3416180510921186,y2=0.18410469290839676 a=dog,b=dog,i=511,x=0.9644468520430375,y=0.6982963594821596,x2=0.9301577304157246,xy=0.6734697256956821,y2=0.4876178056660375 a=wye,b=cat,i=512,x=0.7782849197477183,y=0.7390864748178285,x2=0.6057274163067123,xy=0.5752198577402177,y2=0.5462488172586447 a=hat,b=wye,i=513,x=0.058468587059375854,y=0.08061130780101255,x2=0.0034185756727198135,xy=0.0047132292681336466,y2=0.006498182945389588 a=pan,b=dog,i=514,x=0.357548753499498,y=0.6568238423174304,x2=0.12784111112904478,xy=0.23484654608934807,y2=0.43141755983663266 a=dog,b=dog,i=515,x=0.1192143216962187,y=0.15885584816018783,x2=0.014212054497489522,xy=0.018937892185894305,y2=0.02523518049469265 a=dog,b=hat,i=516,x=0.7844258125322406,y=0.6795173335538125,x2=0.615323855366866,xy=0.533030936502691,y2=0.4617438066000833 a=hat,b=cat,i=517,x=0.803492095202423,y=0.9777180162849328,x2=0.6455995470527797,xy=0.7855886974219375,y2=0.9559325193681442 a=pan,b=cat,i=518,x=0.8929678579851031,y=0.8731506959135767,x2=0.7973915953945033,xy=0.7796955066281488,y2=0.7623921377743633 a=cat,b=hat,i=519,x=0.8430997768388969,y=0.3592743119385645,x2=0.7108172337057977,xy=0.302904092219352,y2=0.12907803121892897 a=pan,b=cat,i=520,x=0.6070056034765043,y=0.5878574244689501,x2=0.3684558026518752,xy=0.3568327506979186,y2=0.3455763515032673 a=wye,b=dog,i=521,x=0.6022397584211494,y=0.6804292951308468,x2=0.3626927266231644,xy=0.4097815743222742,y2=0.46298402567226105 a=hat,b=cat,i=522,x=0.8778649552084499,y=0.9121524444235004,x2=0.7706468795831337,xy=0.8007466647671142,y2=0.832022081867767 a=wye,b=cat,i=523,x=0.5651100240663355,y=0.4298499196494372,x2=0.3193493393002543,xy=0.24291249843800583,y2=0.18477095342262762 a=hat,b=hat,i=524,x=0.176299648277084,y=0.9020467171674311,x2=0.031081565982623526,xy=0.15903051896611636,y2=0.8136882799525395 a=wye,b=wye,i=525,x=0.17893912687254476,y=0.9775420788552232,x2=0.03201921112590867,xy=0.17492052607152594,y2=0.9555885159325913 a=pan,b=cat,i=526,x=0.8375161177973927,y=0.7512783056396939,x2=0.7014332475704161,xy=0.6292076899247594,y2=0.5644190925248493 a=hat,b=hat,i=527,x=0.8452592696154724,y=0.10934788095339154,x2=0.7144632328708819,xy=0.09242730998866336,y2=0.011956959068997089 a=pan,b=dog,i=528,x=0.626938320263565,y=0.2998594026650514,x2=0.3930516574149004,xy=0.1879933502220633,y2=0.08991566136664143 a=hat,b=dog,i=529,x=0.34324615615265386,y=0.34947501965777994,x2=0.11781792371357204,xy=0.11995595716890611,y2=0.12213278936480568 a=cat,b=wye,i=530,x=0.09585122473142738,y=0.3977348374237427,x2=0.009187457282514595,xy=0.03812337128542089,y2=0.15819300090049104 a=cat,b=pan,i=531,x=0.3136925767907739,y=0.7272959366988331,x2=0.09840303273363557,xy=0.22814733647251653,y2=0.528959379538633 a=wye,b=dog,i=532,x=0.6336194018015315,y=0.6185562907483662,x2=0.4014735463393307,xy=0.391929266924554,y2=0.3826118848243773 a=wye,b=cat,i=533,x=0.6206814745682353,y=0.8577418603739316,x2=0.38524549287219895,xy=0.5323844826957933,y2=0.7357210990377332 a=wye,b=hat,i=534,x=0.886934308928995,y=0.9507140909937993,x2=0.7866524683553541,xy=0.8432209452846431,y2=0.9038572828141661 a=pan,b=wye,i=535,x=0.1368489021210476,y=0.7785386772895759,x2=0.01872762201173607,xy=0.10654216324585104,y2=0.6061224720358025 a=hat,b=hat,i=536,x=0.779299644491487,y=0.0905711082010715,x2=0.6073079359045581,xy=0.07058203242229504,y2=0.008203125640770201 a=pan,b=hat,i=537,x=0.5468876904615854,y=0.0403492727581517,x2=0.2990861459784068,xy=0.022066520590510147,y2=0.0016280638121117228 a=cat,b=wye,i=538,x=0.5348837444710285,y=0.6184260119257476,x2=0.2861006200993485,xy=0.33078602093712883,y2=0.382450732226385 a=cat,b=wye,i=539,x=0.2514015500496377,y=0.5686176926055978,x2=0.0632027393673605,xy=0.14295136930669572,y2=0.3233260803441141 a=hat,b=cat,i=540,x=0.03587712705596502,y=0.0639971587990984,x2=0.0012871682457898572,xy=0.002296034197456023,y2=0.0040956363343570175 a=dog,b=cat,i=541,x=0.5140554945247015,y=0.3951198550793644,x2=0.26425305145103534,xy=0.20311353249935105,y2=0.15611969987793795 a=pan,b=pan,i=542,x=0.505988282501811,y=0.61886003251058,x2=0.25602414202913254,xy=0.3131359249590433,y2=0.3829877398389961 a=dog,b=pan,i=543,x=0.06724122779098063,y=0.6844038973931703,x2=0.004521382714838546,xy=0.0460201583656491,y2=0.4684086947669612 a=cat,b=hat,i=544,x=0.2251062355675667,y=0.46180421651863035,x2=0.050672817291400836,xy=0.10395500874973838,y2=0.21326313439438602 a=dog,b=wye,i=545,x=0.05601503064905111,y=0.250556229890031,x2=0.0031376836586141355,xy=0.014034914896600784,y2=0.06277842433670607 a=hat,b=pan,i=546,x=0.09484781714308776,y=0.5304294933057503,x2=0.008996108416808613,xy=0.0503100795883645,y2=0.28135544736859497 a=pan,b=cat,i=547,x=0.06526726447590292,y=0.8939940568623452,x2=0.004259815812167459,xy=0.05834854654912008,y2=0.7992253737051942 a=wye,b=hat,i=548,x=0.8498290633914884,y=0.09181738815270246,x2=0.7222094369848545,xy=0.07802908497686388,y2=0.008430432767184026 a=cat,b=wye,i=549,x=0.32107592669097085,y=0.3153327302443085,x2=0.10308975070046568,xy=0.1012457485791853,y2=0.09943473076332984 a=hat,b=cat,i=550,x=0.3962909153545656,y=0.6623064945082948,x2=0.15704648959255949,xy=0.26246604695396575,y2=0.43864989266786597 a=wye,b=wye,i=551,x=0.43650140196394005,y=0.8569782859131105,x2=0.19053347391648517,xy=0.374072223253727,y2=0.734411782526573 a=pan,b=dog,i=552,x=0.9993077485337599,y=0.10019859749555626,x2=0.9986159762796124,xy=0.10012923486952477,y2=0.010039758940076493 a=pan,b=cat,i=553,x=0.44797263597990333,y=0.8662958294512269,x2=0.20067948258678298,xy=0.3880768262576629,y2=0.7504684641245891 a=dog,b=dog,i=554,x=0.40480362277090387,y=0.6539051006815002,x2=0.16386597300844824,xy=0.2647031537042439,y2=0.42759188069728293 a=hat,b=wye,i=555,x=0.6128372799136335,y=0.46626943145563005,x2=0.3755695316519411,xy=0.28574729008014466,y2=0.2174071827099565 a=cat,b=dog,i=556,x=0.9831029154847094,y=0.30946523504038015,x2=0.9664913424345357,xy=0.30423617480935855,y2=0.09576873169859773 a=dog,b=pan,i=557,x=0.9187169194231349,y=0.8714507884381463,x2=0.844040778034335,xy=0.8006165837827558,y2=0.7594264766694667 a=cat,b=cat,i=558,x=0.6297377530200902,y=0.9564703645603738,x2=0.3965696375787921,xy=0.6023254982085563,y2=0.9148355582822544 a=dog,b=wye,i=559,x=0.5554989886174412,y=0.7532866340748579,x2=0.30857912635500007,xy=0.41844996336762,y2=0.5674407530758288 a=pan,b=pan,i=560,x=0.5310698092443845,y=0.8265306359880259,x2=0.28203514229086696,xy=0.43894546718880073,y2=0.6831528922267706 a=wye,b=pan,i=561,x=0.022976813994650347,y=0.9342710142178746,x2=0.0005279339813447601,xy=0.021466571314277434,y2=0.872862328007696 a=hat,b=hat,i=562,x=0.28441187328233775,y=0.6675462356653574,x2=0.08089011366396855,xy=0.18985807538815722,y2=0.4456179767509889 a=dog,b=pan,i=563,x=0.6224741669574889,y=0.11916397259976652,x2=0.3874740885294198,xy=0.0741764945753847,y2=0.014200052365757906 a=pan,b=dog,i=564,x=0.9837709447757146,y=0.8330969991954611,x2=0.967805271784902,xy=0.8195766219883315,y2=0.6940506100684821 a=pan,b=wye,i=565,x=0.3688855052429517,y=0.9040587054107869,x2=0.13607651597834775,xy=0.333494152314747,y2=0.817322142829028 a=wye,b=wye,i=566,x=0.5138537141869847,y=0.5560587607325808,x2=0.2640456395837593,xy=0.28573285950864846,y2=0.3092013453874535 a=hat,b=cat,i=567,x=0.804358708281772,y=0.4023986125270216,x2=0.6469929315887208,xy=0.32367282818661236,y2=0.16192464336367204 a=wye,b=pan,i=568,x=0.9973387930844961,y=0.5711453274816489,x2=0.9946846681912394,xy=0.569625391586397,y2=0.32620698510412 a=dog,b=cat,i=569,x=0.5807005891800942,y=0.46037286387360454,x2=0.33721317427410846,xy=0.26733879329392946,y2=0.2119431737911844 a=cat,b=hat,i=570,x=0.4673986559801019,y=0.9704729359036818,x2=0.21846150361200564,xy=0.4535977459064444,y2=0.9418177193215116 a=pan,b=cat,i=571,x=0.19902565265833183,y=0.8897887225086547,x2=0.039611210416074946,xy=0.17709078122530833,y2=0.7917239707035837 a=wye,b=pan,i=572,x=0.9765395095911745,y=0.4954531021095988,x2=0.9536294137925716,xy=0.4838295293595337,y2=0.24547377639002455 a=dog,b=wye,i=573,x=0.740323306950601,y=0.0789459840490837,x2=0.5480785988142738,xy=0.05844555198168705,y2=0.0062324683974781785 a=wye,b=dog,i=574,x=0.9646512592477066,y=0.6589096310365389,x2=0.930552051968186,xy=0.6356180053098389,y2=0.4341619018727078 a=hat,b=pan,i=575,x=0.9349096289723295,y=0.009990558226173452,x2=0.8740560143451789,xy=0.009340269084458277,y2=9.981125367056202e-05 a=cat,b=hat,i=576,x=0.0535540240207355,y=0.8438819580641209,x2=0.002868033488813515,xy=0.04519327465283124,y2=0.7121367591461347 a=dog,b=dog,i=577,x=0.3534573064310561,y=0.8830990802028328,x2=0.12493206746949749,xy=0.31213782220023645,y2=0.7798639854550893 a=pan,b=cat,i=578,x=0.2896905064885902,y=0.4717415849739569,x2=0.08392058954961591,xy=0.13665905868283587,y2=0.222540122993741 a=pan,b=hat,i=579,x=0.8469622711045872,y=0.05034158398652022,x2=0.7173450886746403,xy=0.042637422304225486,y2=0.0025342750782718694 a=dog,b=wye,i=580,x=0.92247105168372,y=0.4607201119337304,x2=0.8509528411944685,xy=0.4250009661873495,y2=0.21226302154022908 a=wye,b=wye,i=581,x=0.5394694831520579,y=0.42191550462126415,x2=0.2910273232523485,xy=0.22761053921187308,y2=0.17801269303981596 a=cat,b=hat,i=582,x=0.1980857029178107,y=0.3696136938289396,x2=0.03923794570044316,xy=0.07321518835015398,y2=0.1366142826658731 a=pan,b=cat,i=583,x=0.7419057634234156,y=0.5185280910497336,x2=0.5504241618008812,xy=0.384698979246739,y2=0.26887138120768084 a=dog,b=cat,i=584,x=0.709429914643071,y=0.678472673421283,x2=0.5032908037904751,xy=0.48132881079291706,y2=0.46032516857942296 a=wye,b=dog,i=585,x=0.3969321618524141,y=0.06893081064610551,x2=0.15755514111283106,xy=0.02736085568799806,y2=0.0047514566563292525 a=wye,b=hat,i=586,x=0.5796873362193875,y=0.47960567601099047,x2=0.33603740777312924,xy=0.2780213367625097,y2=0.23002160446195916 a=dog,b=cat,i=587,x=0.3823538804427917,y=0.6227305847052022,x2=0.14619448988966066,xy=0.23810345553244264,y2=0.38779338112728295 a=pan,b=cat,i=588,x=0.6729056596127668,y=0.855307402214849,x2=0.4528020267388928,xy=0.575541191659065,y2=0.7315507522835135 a=wye,b=cat,i=589,x=0.7756644096506681,y=0.9934419395516876,x2=0.6016552763987194,xy=0.7705775555645744,y2=0.9869268872602189 a=cat,b=cat,i=590,x=0.5043359295981563,y=0.20976859569338902,x2=0.2543547298836365,xy=0.10579383970952516,y2=0.0440028637391765 a=dog,b=hat,i=591,x=0.8669601128845403,y=0.6373110010483346,x2=0.7516198373327749,xy=0.5525232174114235,y2=0.40616531205723033 a=pan,b=cat,i=592,x=0.7044083196853276,y=0.4226239612654834,x2=0.49619108084190666,xy=0.2976998344137761,y2=0.17861101263572882 a=wye,b=pan,i=593,x=0.5515403005725981,y=0.480013394589378,x2=0.3041967031557118,xy=0.26474673193069864,y2=0.23041285898521788 a=cat,b=cat,i=594,x=0.2615824864121392,y=0.24054710356722298,x2=0.068425397197557,xy=0.06292290945035255,y2=0.057862909034580294 a=pan,b=wye,i=595,x=0.37831785348075364,y=0.0988205317466111,x2=0.14312439826228499,xy=0.03738557145020458,y2=0.009765497494682971 a=wye,b=dog,i=596,x=0.10997957058997387,y=0.8607615584803269,x2=0.012095505947155047,xy=0.09466618658202304,y2=0.7409104605574812 a=pan,b=pan,i=597,x=0.3578314631700755,y=0.4610253660653395,x2=0.12804335603443712,xy=0.16496938129768013,y2=0.2125443881556803 a=pan,b=hat,i=598,x=0.04277171024958748,y=0.2316071342295577,x2=0.0018294191976746667,xy=0.009906233237003957,y2=0.05364186462602836 a=dog,b=pan,i=599,x=0.933656964091152,y=0.3604541366591547,x2=0.8717153265959066,xy=0.3365405149272836,y2=0.12992718463469657 a=pan,b=dog,i=600,x=0.8279059521913905,y=0.9102424712543687,x2=0.685428265673933,xy=0.7535951598888926,y2=0.8285413564752603 a=cat,b=cat,i=601,x=0.28088999427212924,y=0.9912215980573098,x2=0.0788991888821968,xy=0.27842422900072855,y2=0.9825202564552871 a=hat,b=cat,i=602,x=0.37386268101282927,y=0.5135855689760194,x2=0.13977330425410053,xy=0.19201047774687396,y2=0.26377013666042154 a=hat,b=dog,i=603,x=0.3803020210377117,y=0.28893565862763304,x2=0.14462962720536812,xy=0.10988281492595119,y2=0.0834838148265841 a=cat,b=pan,i=604,x=0.7066746969537755,y=0.965389301398448,x2=0.4993891273147104,xy=0.6822161920081653,y2=0.9319765032545835 a=pan,b=cat,i=605,x=0.3058965912441608,y=0.29637041075010173,x2=0.09357272453479719,xy=0.09065869839408791,y2=0.08783542036818402 a=pan,b=hat,i=606,x=0.2679309094874891,y=0.6237381631675911,x2=0.07178697225879307,xy=0.16711873333954858,y2=0.38904929619168055 a=dog,b=cat,i=607,x=0.7791895125595627,y=0.034844749031911704,x2=0.6071362964828089,xy=0.027150663013435574,y2=0.0012141565350969115 a=hat,b=cat,i=608,x=0.6913845849105351,y=0.0784559825533423,x2=0.4780126442519129,xy=0.054243256931390746,y2=0.006155341198410351 a=dog,b=wye,i=609,x=0.633866333722232,y=0.722140445897368,x2=0.401786529026464,xy=0.45774051687350253,y2=0.5214868236008495 a=wye,b=wye,i=610,x=0.31989367240781375,y=0.90234836985202,x2=0.10233196164655765,xy=0.28865553382316683,y2=0.814232580574598 a=cat,b=wye,i=611,x=0.8139721003412402,y=0.6942407060285465,x2=0.6625505801339301,xy=0.5650925656284415,y2=0.4819701579070147 a=pan,b=dog,i=612,x=0.8183348011907539,y=0.8847778416101758,x2=0.6696718468399107,xy=0.7240444991120475,y2=0.7828318290043613 a=cat,b=wye,i=613,x=0.7326510422319794,y=0.6062625695353675,x2=0.5367775496836057,xy=0.4441789034363249,y2=0.3675543032196263 a=dog,b=dog,i=614,x=0.07038667736657966,y=0.2982907049163095,x2=0.004954284350706978,xy=0.020995691608393895,y2=0.08897734463946882 a=dog,b=cat,i=615,x=0.7622669597997499,y=0.31569377144533395,x2=0.5810509180023535,xy=0.2406429313873518,y2=0.09966255732937875 a=pan,b=cat,i=616,x=0.428192969224764,y=0.5399779987847076,x2=0.1833492188935197,xy=0.23121478261567,y2=0.29157623917153774 a=pan,b=cat,i=617,x=0.9010965128514362,y=0.5931563226749272,x2=0.8119749254730185,xy=0.5344910939381582,y2=0.3518344231292424 a=wye,b=hat,i=618,x=0.7266325029014346,y=0.6586352626392248,x2=0.5279947942728033,xy=0.47858578939068364,y2=0.4338004091918406 a=pan,b=dog,i=619,x=0.37449343923943623,y=0.8136812967444776,x2=0.14024533603338132,xy=0.3047183072626437,y2=0.6620772526717746 a=hat,b=dog,i=620,x=0.8635032118133309,y=0.10847192527528038,x2=0.7456377968119382,xy=0.09366585586678024,y2=0.011766158572926011 a=dog,b=cat,i=621,x=0.29950978683846696,y=0.04614568762234006,x2=0.08970611241202392,xy=0.013821085063281554,y2=0.0021294244861385886 a=pan,b=hat,i=622,x=0.7689737553993135,y=0.8899859079896967,x2=0.5913206364929231,xy=0.6843758059193049,y2=0.7920749164202449 a=hat,b=hat,i=623,x=0.16401907387212689,y=0.47557547547898305,x2=0.026902256593870216,xy=0.07800344904435919,y2=0.2261720328770608 a=dog,b=pan,i=624,x=0.4364532344594886,y=0.9894813135306753,x2=0.1904914258701493,xy=0.4318623197276865,y2=0.9790732698263904 a=dog,b=dog,i=625,x=0.05594189959864382,y=0.15862700962402898,x2=0.0031294961307047455,xy=0.008873896246020536,y2=0.025162528182261782 a=dog,b=hat,i=626,x=0.25591635834238546,y=0.7020347860903682,x2=0.06549318246722824,xy=0.1796621858859226,y2=0.492852840880949 a=wye,b=wye,i=627,x=0.1099722490913756,y=0.07528683687238935,x2=0.012093895570215561,xy=0.008279462777832163,y2=0.005668107806249764 a=dog,b=cat,i=628,x=0.8543574585850832,y=0.19910931595552905,x2=0.7299266670399621,xy=0.17011052916038016,y2=0.0396445197002787 a=pan,b=wye,i=629,x=0.24343751390915702,y=0.5782313367627924,x2=0.05926182317827102,xy=0.14076319908590273,y2=0.3343514788144858 a=hat,b=pan,i=630,x=0.2886803795666991,y=0.6275237652895367,x2=0.08333636154677347,xy=0.18115379875090765,y2=0.3937860760031575 a=hat,b=wye,i=631,x=0.18174335965195643,y=0.30171923538713774,x2=0.033030648777580385,xy=0.054835467510877874,y2=0.09103449700259904 a=dog,b=dog,i=632,x=0.8032872688215081,y=0.9598123853927985,x2=0.6452704362507179,xy=0.7710050696432379,y2=0.9212398151534139 a=wye,b=hat,i=633,x=0.8167281874382986,y=0.6275501410033091,x2=0.6670449321562485,xy=0.5125378891882814,y2=0.3938191794732731 a=hat,b=pan,i=634,x=0.5014128775886096,y=0.17897332371251284,x2=0.25141487381169003,xy=0.08973952925428881,y2=0.03203145060070391 a=cat,b=wye,i=635,x=0.642248921041283,y=0.8563744957128003,x2=0.4124836765786921,xy=0.5500055958788188,y2=0.7333772769073531 a=dog,b=dog,i=636,x=0.6813161263570021,y=0.2562808134680652,x2=0.4641916640341105,xy=0.1746082510916836,y2=0.06567985535185322 a=dog,b=dog,i=637,x=0.7298771870554595,y=0.33815675098998677,x2=0.5327207081839902,xy=0.246812898196385,y2=0.11434998824010391 a=cat,b=dog,i=638,x=0.25489438523989205,y=0.00429655201835788,x2=0.0649711476268225,xy=0.0010951669853705491,y2=1.846035924645517e-05 a=hat,b=dog,i=639,x=0.8948762266962884,y=0.018630792419090936,x2=0.8008034611061869,xy=0.01667225322035791,y2=0.0003471064261632563 a=cat,b=hat,i=640,x=0.5939327381286611,y=0.7638047567608417,x2=0.3527560974210087,xy=0.45364865057866266,y2=0.5833977064504885 a=wye,b=dog,i=641,x=0.7876157448124265,y=0.033865934334884495,x2=0.6203385614764333,xy=0.026673343094938778,y2=0.0011469015083747085 a=cat,b=cat,i=642,x=0.9630354820480607,y=0.39868798939322136,x2=0.9274373396835406,xy=0.38395068005207306,y2=0.1589521128864094 a=cat,b=dog,i=643,x=0.4804040254282608,y=0.4342650603699365,x2=0.23078802764767703,xy=0.20862268310456417,y2=0.1885861426581046 a=dog,b=dog,i=644,x=0.7056252629336117,y=0.9248527997726413,x2=0.4979070116901287,xy=0.652599500014457,y2=0.8553527012472935 a=pan,b=wye,i=645,x=0.06666631805239998,y=0.34446560525480874,x2=0.004444397962663751,xy=0.02296425359802954,y2=0.11865655320356172 a=dog,b=hat,i=646,x=0.30689417080562087,y=0.14426701009501386,x2=0.0941840320744696,xy=0.04427470443771541,y2=0.02081297020175483 a=wye,b=wye,i=647,x=0.7262466157792433,y=0.43930333429170987,x2=0.5274341469308039,xy=0.3190425598298919,y2=0.1929874195198138 a=pan,b=dog,i=648,x=0.9211909548648852,y=0.2920994341508264,x2=0.848592775324879,xy=0.26907935666089244,y2=0.08532207943123296 a=cat,b=hat,i=649,x=0.6502493058776962,y=0.8191483030801362,x2=0.4228241597944258,xy=0.5326506154887514,y2=0.6710039424390667 a=pan,b=dog,i=650,x=0.9336485825609395,y=0.412457787338537,x2=0.8716996757180515,xy=0.3850906285148465,y2=0.1701214263362018 a=dog,b=wye,i=651,x=0.21435132141768964,y=0.0361802627461133,x2=0.04594648899350969,xy=0.007755287128868595,y2=0.001309011412377794 a=pan,b=pan,i=652,x=0.17653494010523307,y=0.632055185075695,x2=0.03116458507795823,xy=0.11157982424053983,y2=0.3994937569810711 a=dog,b=wye,i=653,x=0.7934904799393186,y=0.7063162386528442,x2=0.6296271417543302,xy=0.5604552111975797,y2=0.4988826289847016 a=dog,b=hat,i=654,x=0.7166810357882388,y=0.244962427366476,x2=0.5136317070585029,xy=0.17555992617420724,y2=0.06000659082127603 a=pan,b=wye,i=655,x=0.37149843757026557,y=0.7652342292255708,x2=0.13801108911714852,xy=0.28428332053258604,y2=0.5855834255784534 a=pan,b=wye,i=656,x=0.9878298247617573,y=0.5834552678172099,x2=0.9758077626888442,xy=0.5763545149641986,y2=0.3404200495436521 a=hat,b=pan,i=657,x=0.8018928767440677,y=0.27012322572904324,x2=0.6430321857728766,xy=0.21660989055524965,y2=0.07296655707826365 a=cat,b=wye,i=658,x=0.9756650391067915,y=0.538576785847527,x2=0.951922268535257,xy=0.5254705408259375,y2=0.290064954253853 a=pan,b=wye,i=659,x=0.6546101034582225,y=0.9183027095534713,x2=0.4285143875495847,xy=0.6011302317067638,y2=0.843279866373247 a=hat,b=hat,i=660,x=0.6056079386753953,y=0.7621213262550391,x2=0.36676097538666136,xy=0.4615467254138727,y2=0.5808289159327398 a=cat,b=hat,i=661,x=0.6155376028946405,y=0.9607198669196126,x2=0.3788865405772802,xy=0.5913592039369564,y2=0.9229826626940382 a=hat,b=cat,i=662,x=0.273576290769719,y=0.8358467433466826,x2=0.07484398687131784,xy=0.22866785169673476,y2=0.6986397783632552 a=cat,b=cat,i=663,x=0.9116283500250337,y=0.30755866947242627,x2=0.8310662485693654,xy=0.28037920238704267,y2=0.09459233516764916 a=dog,b=cat,i=664,x=0.681440375153455,y=0.40326893190957636,x2=0.4643609848892815,xy=0.2748037322481948,y2=0.16262583144349052 a=dog,b=wye,i=665,x=0.556701883952789,y=0.2077252598258471,x2=0.30991698759658454,xy=0.11564104348963167,y2=0.04314978356971569 a=dog,b=pan,i=666,x=0.18039318656861325,y=0.3971176762613682,x2=0.03254170176037851,xy=0.07163732306351114,y2=0.15770244879922882 a=pan,b=dog,i=667,x=0.45876812529320365,y=0.5114974665166978,x2=0.21046819278504061,xy=0.23465873380608865,y2=0.2616296582530004 a=cat,b=wye,i=668,x=0.5999638685903643,y=0.34651837096344573,x2=0.35995664361391594,xy=0.20789850238085988,y2=0.1200749814151602 a=cat,b=pan,i=669,x=0.3953298944912743,y=0.44132156645350873,x2=0.15628572547848207,xy=0.1744676083027895,y2=0.19476472501697872 a=pan,b=dog,i=670,x=0.5742369662562881,y=0.45470709356379424,x2=0.3297480934152253,xy=0.26110962194328735,y2=0.20675854093723314 a=wye,b=wye,i=671,x=0.204845400414845,y=0.9834017236215821,x2=0.04196163807111818,xy=0.20144531984391173,y2=0.9670789500218985 a=cat,b=pan,i=672,x=0.010200084965239498,y=0.5193786713232798,x2=0.00010404173329810484,xy=0.005297706576630652,y2=0.2697542042255355 a=pan,b=dog,i=673,x=0.37805567579664534,y=0.796925254923346,x2=0.14292609400205822,xy=0.3012821158094594,y2=0.63508986193464 a=dog,b=dog,i=674,x=0.010584874037750769,y=0.918376672813548,x2=0.00011203955839505027,xy=0.009720901400940056,y2=0.8434157131680825 a=hat,b=dog,i=675,x=0.7808052633453111,y=0.32819076493831556,x2=0.6096568592677406,xy=0.25625307664516056,y2=0.1077091781907967 a=cat,b=wye,i=676,x=0.18383855808326421,y=0.6419376756640074,x2=0.03379661543813371,xy=0.11801289667339325,y2=0.41208397943690833 a=cat,b=dog,i=677,x=0.09370495191840922,y=0.6379280422695233,x2=0.008780618014031384,xy=0.0597770165282706,y2=0.40695218711382664 a=dog,b=wye,i=678,x=0.07129586318391401,y=0.7205145584323225,x2=0.005083100107139385,xy=0.05136970738000908,y2=0.5191412289129247 a=dog,b=wye,i=679,x=0.2806511819369465,y=0.8024798522027793,x2=0.07876508592260505,xy=0.22521691900129615,y2=0.6439739131913945 a=dog,b=dog,i=680,x=0.307464788040163,y=0.892726683412014,x2=0.09453459588458235,xy=0.2744820204930726,y2=0.7969609312758142 a=wye,b=wye,i=681,x=0.4638094536373415,y=0.6763233986299853,x2=0.21511920928336922,xy=0.31368518600072337,y2=0.45741333953441393 a=wye,b=cat,i=682,x=0.6549236504388642,y=0.6724922085564017,x2=0.42892498790416766,xy=0.4404310521194526,y2=0.45224577056906684 a=dog,b=wye,i=683,x=0.29501824964374734,y=0.4562380927618723,x2=0.08703576762286043,xy=0.1345985635474092,y2=0.20815319728699083 a=hat,b=dog,i=684,x=0.059282719226964375,y=0.2642650422733903,x2=0.0035144407989430916,xy=0.01566635030259527,y2=0.06983601256775678 a=cat,b=cat,i=685,x=0.41255038540002265,y=0.7545729508782292,x2=0.1701978204937072,xy=0.3112993616972458,y2=0.5693803381970785 a=hat,b=cat,i=686,x=0.5632576154489349,y=0.09067560686771681,x2=0.31725914136122024,xy=0.05107372610369524,y2=0.00822206568082873 a=dog,b=dog,i=687,x=0.9445088668225828,y=0.12938833313358844,x2=0.8920969995064795,xy=0.12220842790806846,y2=0.01674134075108846 a=cat,b=wye,i=688,x=0.44107001651763333,y=0.9027399918597477,x2=0.19454275947086533,xy=0.3981715431207071,y2=0.8149394929029374 a=dog,b=pan,i=689,x=0.49128825186385117,y=0.809215546212808,x2=0.24136414641943885,xy=0.3975580910799419,y2=0.6548298002324932 a=wye,b=dog,i=690,x=0.34429686601523735,y=0.2844786708909688,x2=0.1185403319479143,xy=0.09794511483594068,y2=0.08092811419189214 a=pan,b=cat,i=691,x=0.7667096709438219,y=0.20657770046533896,x2=0.5878437195187837,xy=0.15838512074811145,y2=0.04267434632954731 a=hat,b=wye,i=692,x=0.39986680014905984,y=0.9398657414231609,x2=0.15989345786144815,xy=0.37582110659260304,y2=0.883347611900908 a=dog,b=dog,i=693,x=0.6622827912308988,y=0.9108718138179128,x2=0.43861849556059035,xy=0.603254727308879,y2=0.8296874612079345 a=hat,b=dog,i=694,x=0.20043426609309134,y=0.469483028263054,x2=0.040173895024276145,xy=0.09410048621306728,y2=0.22041431382704754 a=cat,b=cat,i=695,x=0.014453292624752367,y=0.331690589927086,x2=0.00020889766769672117,xy=0.004794021157092914,y2=0.11001864744617833 a=cat,b=pan,i=696,x=0.17586054638409654,y=0.40705795940745815,x2=0.03092693177451297,xy=0.07158543515139099,y2=0.16569618231696384 a=wye,b=dog,i=697,x=0.2462627216963228,y=0.5149541111764933,x2=0.060645328097280536,xy=0.12681400096703402,y2=0.26517773661757216 a=pan,b=cat,i=698,x=0.8881694396830215,y=0.21621369618476227,x2=0.7888449535868525,xy=0.19203439739221537,y2=0.046748362417876686 a=wye,b=wye,i=699,x=0.34064759605569916,y=0.5117005632025989,x2=0.11604078469852679,xy=0.17430956675531267,y2=0.26183746638185695 a=wye,b=cat,i=700,x=0.6171058843980554,y=0.19037770326108672,x2=0.3808196725587061,xy=0.11748320094060347,y2=0.03624366989896639 a=cat,b=dog,i=701,x=0.16966649099972952,y=0.7746664751435653,x2=0.0287867181681613,xy=0.13143494253273794,y2=0.6001081477113561 a=pan,b=cat,i=702,x=0.9666068626696498,y=0.7506852103873074,x2=0.9343288269600633,xy=0.7256174760649812,y2=0.563528285094236 a=dog,b=wye,i=703,x=0.05236716064893443,y=0.612791909364745,x2=0.0027423195144313066,xy=0.03209017236207087,y2=0.37551392418288987 a=pan,b=pan,i=704,x=0.11218932047414909,y=0.026881826389739016,x2=0.012586443628451328,xy=0.003015853835768869,y2=0.000722632590048069 a=hat,b=hat,i=705,x=0.9071556729941082,y=0.9106992104876415,x2=0.8229314150453932,xy=0.8261459551851194,y2=0.8293730519828135 a=cat,b=hat,i=706,x=0.9743694755987752,y=0.4678325205552769,x2=0.9493958749786321,xy=0.4558417277214984,y2=0.21886726728910358 a=dog,b=wye,i=707,x=0.7500470499024816,y=0.23854032279188464,x2=0.5625705770674158,xy=0.17891646539283876,y2=0.056901485597656516 a=cat,b=pan,i=708,x=0.7641611039700442,y=0.19825719293654487,x2=0.5839421928207167,xy=0.15150043542439218,y2=0.039305914551078375 a=hat,b=pan,i=709,x=0.3300583003504418,y=0.8415214690644649,x2=0.10893848163022246,xy=0.27775114578782417,y2=0.7081583828964152 a=dog,b=hat,i=710,x=0.7754192632904059,y=0.6571707682086041,x2=0.6012750338818358,xy=0.5095828729403059,y2=0.43187341858788686 a=wye,b=hat,i=711,x=0.37832133923590616,y=0.7488676293849656,x2=0.1431270357212496,xy=0.2833126044593384,y2=0.5608027263406583 a=hat,b=cat,i=712,x=0.9631299491774535,y=0.8172661823041355,x2=0.9276192990025642,xy=0.7871335366270336,y2=0.6679240127379764 a=hat,b=wye,i=713,x=0.2704894268616752,y=0.15580537884000922,x2=0.07316453004395754,xy=0.04214370762440027,y2=0.024275316075478795 a=dog,b=wye,i=714,x=0.951884509254984,y=0.18535688215871748,x2=0.9060841189596017,xy=0.17643834481068468,y2=0.03435717376360068 a=wye,b=cat,i=715,x=0.9648431191772672,y=0.20702769835854917,x2=0.9309222446237182,xy=0.19974925024035298,y2=0.04286046788763842 a=pan,b=pan,i=716,x=0.54062796998219,y=0.26214674180539355,x2=0.29227860192706373,xy=0.1417238608596952,y2=0.06872091423918367 a=hat,b=dog,i=717,x=0.9563794498766638,y=0.7787136742425006,x2=0.9146616521463901,xy=0.7447457553834783,y2=0.6063949864522553 a=cat,b=pan,i=718,x=0.6876102509763913,y=0.09858588204177132,x2=0.4728078572478158,xy=0.06778866309347129,y2=0.009719176137954049 a=wye,b=hat,i=719,x=0.38908047655525646,y=0.9452665319783746,x2=0.15138361723646548,xy=0.36778475273388056,y2=0.8935288164784235 a=pan,b=cat,i=720,x=0.2592860483524986,y=0.9088051651455961,x2=0.06722925487025423,xy=0.23564049999294148,y2=0.8259268281953142 a=pan,b=hat,i=721,x=0.6758674765249959,y=0.17012810645455811,x2=0.4567968458242659,xy=0.11498405399541806,y2=0.02894357260581346 a=hat,b=pan,i=722,x=0.7621741457805322,y=0.6022016456156329,x2=0.580909428496284,xy=0.45898252483472585,y2=0.36264682198217635 a=wye,b=hat,i=723,x=0.03908932355981043,y=0.6767758558560469,x2=0.0015279752163635508,xy=0.026454710407024642,y2=0.45802555906968484 a=pan,b=wye,i=724,x=0.6866208924567617,y=0.025161390654418136,x2=0.47144824995811996,xy=0.017276336506589805,y2=0.0006330955796642403 a=cat,b=pan,i=725,x=0.4409277411269419,y=0.9047781220249766,x2=0.19441727289530747,xy=0.39894177356554955,y2=0.8186234500950436 a=hat,b=wye,i=726,x=0.5379539711810011,y=0.9219555713213392,x2=0.28939447510940935,xy=0.49596966084476307,y2=0.850002075490457 a=wye,b=hat,i=727,x=0.8812388237141883,y=0.6434778499253834,x2=0.7765818644211662,xy=0.5670576635543798,y2=0.4140637433445942 a=cat,b=hat,i=728,x=0.5073505851490089,y=0.47505404750912783,x2=0.2574046162510417,xy=0.24101894898116108,y2=0.2256763480548047 a=pan,b=hat,i=729,x=0.7505898109290352,y=0.019209876435152262,x2=0.5633850642704848,xy=0.014418737521431066,y2=0.0003690193526538182 a=dog,b=cat,i=730,x=0.5676893229947293,y=0.7702760275269791,x2=0.32227116744221407,xy=0.43727747658586025,y2=0.5933251585827435 a=cat,b=hat,i=731,x=0.25757631638687406,y=0.49888611501918945,x2=0.06634555876343105,xy=0.12850124780320119,y2=0.24888735575893992 a=hat,b=hat,i=732,x=0.9356142965615097,y=0.2712958876781135,x2=0.8753741119302887,xy=0.25382831110998855,y2=0.0736014586710556 a=pan,b=hat,i=733,x=0.037564291393333726,y=0.28968131412477416,x2=0.0014110759878832864,xy=0.010881673294986858,y2=0.08391526375305608 a=dog,b=dog,i=734,x=0.7289015723659092,y=0.6922902279093466,x2=0.5312975021974948,xy=0.5046114356566764,y2=0.47926575965877505 a=wye,b=pan,i=735,x=0.2605606600733885,y=0.09176219878728087,x2=0.06789185757787992,xy=0.023909619085799395,y2=0.008420301126276451 a=pan,b=dog,i=736,x=0.1202212587887802,y=0.7482722739652927,x2=0.014453151064758862,xy=0.0899582346928505,y2=0.5599113959851901 a=pan,b=hat,i=737,x=0.5511991289770363,y=0.9437419681770345,x2=0.30382047978504345,xy=0.5201897508382552,y2=0.8906489024986628 a=wye,b=dog,i=738,x=0.8484721809277587,y=0.12265385134433548,x2=0.7199050418083073,xy=0.10406838074931743,y2=0.015043967249598347 a=cat,b=wye,i=739,x=0.1736721121765168,y=0.6541724760808302,x2=0.03016200254785263,xy=0.11361151564869969,y2=0.42794162846172434 a=pan,b=cat,i=740,x=0.9191072314756276,y=0.09237768563237059,x2=0.8447581029507928,xy=0.08490499889169399,y2=0.008533636802793088 a=pan,b=cat,i=741,x=0.16333728979866036,y=0.6322918687716038,x2=0.026679070238771557,xy=0.10327684020688398,y2=0.3997930073146871 a=pan,b=hat,i=742,x=0.6592900853719631,y=0.56407525201075,x2=0.4346634166697704,xy=0.371889221054379,y2=0.31818088993099114 a=hat,b=hat,i=743,x=0.8830864459548787,y=0.08686698218682332,x2=0.779841671029219,xy=0.07671105457018756,y2=0.007545872594245879 a=hat,b=dog,i=744,x=0.8975631160557165,y=0.791571765557401,x2=0.8056195473036476,xy=0.710485620475426,y2=0.6265858600276611 a=hat,b=pan,i=745,x=0.35169238363466515,y=0.32903226829772925,x2=0.12368753270663249,xy=0.11571814273034907,y2=0.10826223358114888 a=dog,b=wye,i=746,x=0.3289380868423477,y=0.8875023240465095,x2=0.10820026497550389,xy=0.29193331653999616,y2=0.7876603751879556 a=cat,b=wye,i=747,x=0.8902092321224123,y=0.4250494265494692,x2=0.792472476955975,xy=0.37838292362267467,y2=0.1806670150100326 a=cat,b=dog,i=748,x=0.986548192318023,y=0.22327955924073406,x2=0.973277335765959,xy=0.2202760455505111,y2=0.04985376157473647 a=pan,b=pan,i=749,x=0.4244814446882297,y=0.7353411946490032,x2=0.18018449688460658,xy=0.31213869264337757,y2=0.5407266725478231 a=dog,b=wye,i=750,x=0.5129794588106171,y=0.6033400789231494,x2=0.26314792516163366,xy=0.30950106716475223,y2=0.3640192508349922 a=wye,b=hat,i=751,x=0.697578206130514,y=0.3781819268120694,x2=0.4866153536682659,xy=0.2638114700965447,y2=0.1430215697672894 a=dog,b=pan,i=752,x=0.686527845255024,y=0.3414791871406174,x2=0.47132048231050616,xy=0.23443497054708518,y2=0.11660803525021682 a=dog,b=hat,i=753,x=0.057067042691808956,y=0.34766396030144486,x2=0.003256647361588746,xy=0.019840154064925928,y2=0.12087022929248463 a=hat,b=wye,i=754,x=0.6758002251578562,y=0.5221923775790305,x2=0.45670594432340916,xy=0.35289772634362504,y2=0.27268487920164075 a=wye,b=cat,i=755,x=0.5831437743121346,y=0.5906129897660252,x2=0.34005666151900177,xy=0.34441228800993406,y2=0.348823703680363 a=pan,b=pan,i=756,x=0.9965826588776338,y=0.8864833103309704,x2=0.9931769959756142,xy=0.883453894460285,y2=0.7858526594953555 a=wye,b=cat,i=757,x=0.8211650666566518,y=0.42668670197381964,x2=0.6743120666972233,xy=0.35038021406783854,y2=0.18206154164129518 a=hat,b=pan,i=758,x=0.3400297232695506,y=0.3517706078504709,x2=0.11562021270676717,xy=0.11961246244175722,y2=0.12374256054748976 a=pan,b=dog,i=759,x=0.4690931525792873,y=0.8364915573615876,x2=0.22004838579677452,xy=0.3923924617487049,y2=0.6997181255372142 a=hat,b=wye,i=760,x=0.42710815754180076,y=0.7028076921804566,x2=0.1824213782387517,xy=0.30017489851339985,y2=0.4939386521880194 a=dog,b=wye,i=761,x=0.04685691053834329,y=0.49240339911968856,x2=0.0021955700651983064,xy=0.02307250202132739,y2=0.2424611074646233 a=wye,b=hat,i=762,x=0.5214034880091322,y=0.9057172555953829,x2=0.27186159730808923,xy=0.4722441362174913,y2=0.8203237470832321 a=cat,b=wye,i=763,x=0.3293907183268989,y=0.3943264033522689,x2=0.10849824531991047,xy=0.12988745725546633,y2=0.15549331238073624 a=cat,b=wye,i=764,x=0.7863068915914236,y=0.9484380633526672,x2=0.6182785277641668,xy=0.7457633854618255,y2=0.8995347600161581 a=dog,b=cat,i=765,x=0.9394516863208765,y=0.37368521011114253,x2=0.8825694709311386,xy=0.3510592007920839,y2=0.13964063625580875 a=cat,b=wye,i=766,x=0.3868441976616561,y=0.24369088426850782,x2=0.14964843326449048,xy=0.09427040460231041,y2=0.05938524707556728 a=pan,b=cat,i=767,x=0.2275114758829052,y=0.6533572385893692,x2=0.05176147165841776,xy=0.14864626963024682,y2=0.42687568121712594 a=hat,b=wye,i=768,x=0.08806251129519171,y=0.052816238168512664,x2=0.007755005895615768,xy=0.004651130570284183,y2=0.002789555014273054 a=hat,b=pan,i=769,x=0.8552650886303925,y=0.7058684713842834,x2=0.7314783718299531,xy=0.6037046607398788,y2=0.498250298894385 a=hat,b=pan,i=770,x=0.9043801066452809,y=0.47986698695818764,x2=0.8179033772957297,xy=0.43398215684079533,y2=0.23027232517232943 a=pan,b=hat,i=771,x=0.5753128246648473,y=0.30621839997259126,x2=0.3309848462238454,xy=0.17617137265258148,y2=0.09376970848177388 a=cat,b=pan,i=772,x=0.7454609561562912,y=0.10764510772148561,x2=0.5557120371534519,xy=0.08024522492760562,y2=0.01158746921637024 a=pan,b=wye,i=773,x=0.889983027502424,y=0.0930802888208736,x2=0.7920697892423804,xy=0.08283987724560112,y2=0.008663940166977246 a=wye,b=hat,i=774,x=0.3241419410731854,y=0.8004381936154861,x2=0.1050679979626924,xy=0.25945558978763783,y2=0.6407013017984223 a=hat,b=dog,i=775,x=0.08644741476164519,y=0.16743346394966108,x2=0.007473155518971911,xy=0.01447419010303532,y2=0.028033964850182454 a=dog,b=hat,i=776,x=0.8465506444792363,y=0.08317373752662649,x2=0.7166479936682104,xy=0.0704107811069125,y2=0.0069178706141481555 a=wye,b=cat,i=777,x=0.196023624794873,y=0.21174928859580733,x2=0.03842526147772115,xy=0.041507863098285816,y2=0.0448377612208305 a=cat,b=cat,i=778,x=0.5764737723226592,y=0.6395255247768671,x2=0.33232201017591706,xy=0.3686696917647488,y2=0.4089928968411272 a=dog,b=pan,i=779,x=0.3758546172772318,y=0.14144998658957741,x2=0.14126669332861438,xy=0.053164630573495186,y2=0.02000809870619163 a=hat,b=dog,i=780,x=0.23173454859220277,y=0.3505016268111515,x2=0.05370090101123199,xy=0.0812233362699149,y2=0.12285139039726371 a=pan,b=dog,i=781,x=0.0626485574741863,y=0.8347422505981941,x2=0.003924841753596423,xy=0.05229539786273258,y2=0.6967946249337382 a=wye,b=dog,i=782,x=0.3168395421741931,y=0.6695453552576639,x2=0.10038729548515228,xy=0.21213844382469568,y2=0.4482909827471114 a=cat,b=dog,i=783,x=0.640218961180953,y=0.3278005809165341,x2=0.4098803182556186,xy=0.2098641473888964,y2=0.10745322084921721 a=dog,b=pan,i=784,x=0.3713482863553802,y=0.09822192559310827,x2=0.13789954977907745,xy=0.036474543751526416,y2=0.009647546667218098 a=wye,b=dog,i=785,x=0.6125629193634933,y=0.095998056773002,x2=0.3752333301791256,xy=0.05880484991009247,y2=0.009215626904192514 a=pan,b=pan,i=786,x=0.11507645846382175,y=0.8192902299547586,x2=0.013242591292575693,xy=0.09428101811720375,y2=0.6712364808993213 a=pan,b=cat,i=787,x=0.37810148287672585,y=0.08810292713511803,x2=0.142960731353579,xy=0.03331184739556825,y2=0.007762125769775916 a=pan,b=dog,i=788,x=0.6966646475521092,y=0.32832780568398645,x2=0.48534163114890455,xy=0.22873437502839183,y2=0.10779914798526156 a=pan,b=dog,i=789,x=0.8625991513242034,y=0.209258758236743,x2=0.744077295865236,xy=0.18050642726217117,y2=0.04378922789878366 a=dog,b=dog,i=790,x=0.954622083079162,y=0.9954847001142825,x2=0.9113033215023985,xy=0.9503116780965312,y2=0.9909897881616229 a=hat,b=wye,i=791,x=0.8437545927205472,y=0.1455640910039323,x2=0.7119218127370165,xy=0.12282037031975958,y2=0.021188904589801084 a=hat,b=dog,i=792,x=0.6291498056715833,y=0.10598781312134209,x2=0.395829477976591,xy=0.06668221202884846,y2=0.011233416530244534 a=pan,b=wye,i=793,x=0.7262149840747153,y=0.9926177938593836,x2=0.527388203094639,xy=0.7208539153598713,y2=0.9852900846862699 a=hat,b=pan,i=794,x=0.6392479219184836,y=0.6825404700858696,x2=0.4086379056770997,xy=0.43631257712765703,y2=0.46586149330503984 a=dog,b=wye,i=795,x=0.598504884658865,y=0.3787646874120393,x2=0.35820809696052125,xy=0.22669251555239361,y2=0.14346268843033982 a=wye,b=hat,i=796,x=0.48049061733461884,y=0.34369988394774387,x2=0.23087123334660312,xy=0.16514456941588831,y2=0.1181296102256926 a=hat,b=dog,i=797,x=0.05004104718155633,y=0.7894829047147601,x2=0.002504106403026747,xy=0.039506551283863454,y2=0.623283256836855 a=cat,b=cat,i=798,x=0.6549250573390932,y=0.19493923807461988,x2=0.42892683073061455,xy=0.12767059167365957,y2=0.038001306541113326 a=wye,b=pan,i=799,x=0.42197995250076836,y=0.8251800230215005,x2=0.17806708031255072,xy=0.3482094269191957,y2=0.6809220703937641 a=dog,b=hat,i=800,x=0.7480461467642859,y=0.1888136856077568,x2=0.5595730376888957,xy=0.1412413499752458,y2=0.035650607872784824 a=cat,b=dog,i=801,x=0.3491691308786241,y=0.1322545421642024,x2=0.12191908195853374,xy=0.0461792035422249,y2=0.017491263923062793 a=wye,b=wye,i=802,x=0.41295400205621124,y=0.8799107119795011,x2=0.17053100781424133,xy=0.3633626499640652,y2=0.7742428610562725 a=cat,b=cat,i=803,x=0.5378634245510693,y=0.15722757458263636,x2=0.2892970634698038,xy=0.08456696169887545,y2=0.024720510209138482 a=wye,b=hat,i=804,x=0.7516383220207629,y=0.3708676090408751,x2=0.564960167130188,xy=0.27875830735133567,y2=0.1375427834356954 a=hat,b=wye,i=805,x=0.6661935417293913,y=0.6643471366205853,x2=0.4438138350419502,xy=0.4425837718830475,y2=0.44135711793597066 a=hat,b=dog,i=806,x=0.17312553589325408,y=0.026879444221558524,x2=0.029972451178326406,xy=0.004653518185370151,y2=0.0007225045216598759 a=hat,b=cat,i=807,x=0.6774379517015529,y=0.04542050650851759,x2=0.45892217840559546,xy=0.030769574894377205,y2=0.0020630224114902888 a=wye,b=wye,i=808,x=0.8524737347853896,y=0.926916442954667,x2=0.7267114684989507,xy=0.7901719219595535,y2=0.8591740922197325 a=hat,b=wye,i=809,x=0.7848280312957139,y=0.31572042431105607,x2=0.615955038707506,xy=0.24778623905189356,y2=0.09967938632715329 a=pan,b=hat,i=810,x=0.5101794254127774,y=0.9065235870380484,x2=0.2602830461145117,xy=0.4624896827582014,y2=0.8217850138563301 a=dog,b=hat,i=811,x=0.6080377557256639,y=0.06528218831026511,x2=0.3697099123879021,xy=0.03969403526903377,y2=0.004261764110576914 a=dog,b=dog,i=812,x=0.17203162334805688,y=0.7869545622144918,x2=0.02959487943176771,xy=0.13538107083891845,y2=0.6192974829902024 a=dog,b=cat,i=813,x=0.5274589853025814,y=0.3982850231684436,x2=0.2782129811764288,xy=0.21007901418164238,y2=0.15863095968028768 a=cat,b=hat,i=814,x=0.45066542079445837,y=0.19549042604288147,x2=0.20309932149984622,xy=0.08810077511390312,y2=0.03821650667442731 a=pan,b=cat,i=815,x=0.915169604952166,y=0.3208394583949399,x2=0.8375354058283037,xy=0.29362252039236403,y2=0.10293795806315836 a=cat,b=hat,i=816,x=0.6289371252503521,y=0.09961353155285746,x2=0.39556190751817705,xy=0.0626506481708894,y2=0.009922855668432129 a=cat,b=wye,i=817,x=0.5918008776228343,y=0.7901726001168455,x2=0.3502282787551569,xy=0.4676248382226661,y2=0.6243727379754163 a=hat,b=hat,i=818,x=0.9957052214494239,y=0.026702922142899044,x2=0.9914288880216462,xy=0.026588239005642018,y2=0.0007130460509697281 a=wye,b=pan,i=819,x=0.7698305878822377,y=0.8257549912538609,x2=0.5926391340391117,xy=0.6356914503636517,y2=0.6818713055806639 a=cat,b=hat,i=820,x=0.11840704068628438,y=0.2731009565650273,x2=0.014020227284083404,xy=0.032337076075458375,y2=0.07458413247673293 a=pan,b=cat,i=821,x=0.16575861713034812,y=0.8385594122473529,x2=0.027475919152965336,xy=0.1389984485557587,y2=0.7031818878686259 a=hat,b=cat,i=822,x=0.6827428856236868,y=0.4526975089901234,x2=0.46613784786975865,xy=0.30907600360257176,y2=0.20493503464586285 a=dog,b=wye,i=823,x=0.5603831774536844,y=0.7242975425940232,x2=0.3140293055730875,xy=0.40588415834073405,y2=0.5246069302077409 a=wye,b=pan,i=824,x=0.1165595975998206,y=0.026098503614706003,x2=0.013586139792632103,xy=0.003042031079287595,y2=0.0006811318909268223 a=dog,b=dog,i=825,x=0.36065738947447856,y=0.7861605167349159,x2=0.13007375258254572,xy=0.2835345996735219,y2=0.61804835807291 a=wye,b=cat,i=826,x=0.03064375957521026,y=0.3106058617927957,x2=0.0009390400009032905,xy=0.009518131351429418,y2=0.0964760013800453 a=hat,b=wye,i=827,x=0.8347298580535868,y=0.5084680264203864,x2=0.6967739359261611,xy=0.4244334435186765,y2=0.2585397338918427 a=hat,b=hat,i=828,x=0.6392287649180021,y=0.13880595512059102,x2=0.40861341389859435,xy=0.08872875925499903,y2=0.019267093176939528 a=cat,b=pan,i=829,x=0.5964934366651018,y=0.6420547661716093,x2=0.3558044199845438,xy=0.38298145400091155,y2=0.4122343227636799 a=wye,b=wye,i=830,x=0.3817201787405874,y=0.10809811919145063,x2=0.14571029485774598,xy=0.04126323337928185,y2=0.011685203372729066 a=pan,b=dog,i=831,x=0.9237617174839042,y=0.5487821002755663,x2=0.8533357106888125,xy=0.5069438954749813,y2=0.3011617935828617 a=pan,b=pan,i=832,x=0.9755863704587128,y=0.4750574892881576,x2=0.9517687662248048,xy=0.4634596117338625,y2=0.22567961812876797 a=cat,b=pan,i=833,x=0.30354198827116374,y=0.06172562221652489,x2=0.09213773864361131,xy=0.018736318094878683,y2=0.003810052438017151 a=wye,b=dog,i=834,x=0.6698221461058869,y=0.8210265206550994,x2=0.44866170741389605,xy=0.549941746075048,y2=0.6740845476190184 a=cat,b=cat,i=835,x=0.4686179347944489,y=0.029262329868421366,x2=0.21960276881101437,xy=0.013712852590213539,y2=0.0008562839493283052 a=dog,b=cat,i=836,x=0.721094408698922,y=0.7293852684468619,x2=0.519977146256848,xy=0.5259556388643944,y2=0.5320028698273008 a=hat,b=dog,i=837,x=0.26605798248684176,y=0.8721352584850544,x2=0.0707868500449686,xy=0.2320385473281738,y2=0.7606199090927925 a=wye,b=pan,i=838,x=0.6672927305389438,y=0.6418074827778028,x2=0.4452795882301194,xy=0.42827346766312613,y2=0.4119168449495796 a=cat,b=pan,i=839,x=0.17159163631914598,y=0.3164629353479077,x2=0.029443689654682057,xy=0.054302392910707584,y2=0.10014878944901401 a=hat,b=pan,i=840,x=0.4788658406877069,y=0.9775625657328338,x2=0.22931249337754425,xy=0.4681213198644852,y2=0.955628569922161 a=hat,b=cat,i=841,x=0.6679675997666049,y=0.29400987483784913,x2=0.4461807143379593,xy=0.196389070403118,y2=0.0864418065021677 a=cat,b=wye,i=842,x=0.9129798969881031,y=0.6883855286504225,x2=0.8335322923044074,xy=0.6284821490353636,y2=0.4738746360553216 a=dog,b=wye,i=843,x=0.2070630859227116,y=0.5799237603766771,x2=0.04287512155183625,xy=0.12008080342349792,y2=0.3363115678494257 a=hat,b=hat,i=844,x=0.2186310315035832,y=0.10114133789610291,x2=0.04779952793632079,xy=0.02211263503187743,y2=0.010229570231413663 a=pan,b=pan,i=845,x=0.8424144754998923,y=0.10454231850187046,x2=0.7096621485317587,xy=0.0880679624082959,y2=0.010929096357746526 a=wye,b=pan,i=846,x=0.34342486536164973,y=0.6926478262192819,x2=0.11794063814866725,xy=0.23787248646239625,y2=0.47976101116629655 a=dog,b=pan,i=847,x=0.3808673589411615,y=0.38470555294986253,x2=0.14505994510681558,xy=0.1465217879220133,y2=0.14799836247045947 a=hat,b=wye,i=848,x=0.3596530917994194,y=0.8221046883234665,x2=0.1293503464408816,xy=0.29567249293833275,y2=0.675856118563424 a=hat,b=cat,i=849,x=0.9802025016845907,y=0.3712601501962042,x2=0.96079694430873,xy=0.36391012799811623,y2=0.1378340991237081 a=dog,b=cat,i=850,x=0.41192992606906487,y=0.3481696400454314,x2=0.16968626399126524,xy=0.14342149408340749,y2=0.12122209824936525 a=cat,b=hat,i=851,x=0.26284256802170036,y=0.17651695062162687,x2=0.06908621556424219,xy=0.046396168600748085,y2=0.031158233856757856 a=wye,b=hat,i=852,x=0.8950852588075826,y=0.7265214600566965,x2=0.8011776205346371,xy=0.650298649104111,y2=0.527833431922914 a=dog,b=dog,i=853,x=0.08147261896577951,y=0.9636631059390952,x2=0.006637787641143095,xy=0.07851215704155552,y2=0.9286465817481838 a=hat,b=hat,i=854,x=0.3065298229214011,y=0.38396348344713616,x2=0.0939605323402255,xy=0.11769625858933495,y2=0.1474279566208592 a=pan,b=pan,i=855,x=0.6652309340751762,y=0.8209155852306491,x2=0.4425321956505314,xy=0.5460984415598547,y2=0.6739023980745791 a=wye,b=pan,i=856,x=0.06993033483673339,y=0.9791078310667237,x2=0.004890251730377647,xy=0.06846933846776378,y2=0.958652144856184 a=hat,b=wye,i=857,x=0.7946870008153237,y=0.8322385855071592,x2=0.6315274292648544,xy=0.6613691854794718,y2=0.6926210632069572 a=pan,b=hat,i=858,x=0.48190390864045884,y=0.008804124502015287,x2=0.2322313771629517,xy=0.0042427420096784,y2=7.751260824698593e-05 a=cat,b=cat,i=859,x=0.1978808319576767,y=0.49301100953578814,x2=0.03915682365626228,xy=0.09755742873123584,y2=0.243059855523497 a=dog,b=dog,i=860,x=0.23181433510474192,y=0.707863271825844,x2=0.053737885960053584,xy=0.1640928537033752,y2=0.5010704115999887 a=hat,b=pan,i=861,x=0.20656469678426048,y=0.17021804670475116,x2=0.04266897395757347,xy=0.035161039204776014,y2=0.028974183423980848 a=pan,b=wye,i=862,x=0.7447132643699934,y=0.41838270080015394,x2=0.5545978461286117,xy=0.3115751468688169,y2=0.17504408432883115 a=wye,b=hat,i=863,x=0.8931259653993054,y=0.5240494288838036,x2=0.7976739900704414,xy=0.46804215208880173,y2=0.2746278039134407 a=dog,b=pan,i=864,x=0.19890854257784296,y=0.5819912477557206,x2=0.03956460831044157,xy=0.11576303088415071,y2=0.33871381246426063 a=dog,b=pan,i=865,x=0.08348734276314873,y=0.46365140261253324,x2=0.006970136401651483,xy=0.038709023572527236,y2=0.21497262314456939 a=wye,b=cat,i=866,x=0.992459292444092,y=0.7757136682861361,x2=0.9849754471586278,xy=0.7698642383664698,y2=0.6017316951659336 a=dog,b=pan,i=867,x=0.20005683106815952,y=0.8281767420620922,x2=0.04002273565703412,xy=0.1656824145812947,y2=0.6858767160925813 a=hat,b=hat,i=868,x=0.6641874034693073,y=0.7927732001674593,x2=0.44114490692730035,xy=0.5265499733592782,y2=0.6284893469037546 a=cat,b=hat,i=869,x=0.849533915413141,y=0.2670454068905317,x2=0.7217078734371819,xy=0.2268641301088088,y2=0.07131324934132963 a=dog,b=dog,i=870,x=0.818681824385546,y=0.15991198795909045,x2=0.670239929579246,xy=0.13091703804346763,y2=0.02557184389302829 a=hat,b=dog,i=871,x=0.9657740236138191,y=0.9119721289248706,x2=0.9327194646872257,xy=0.8807589923754329,y2=0.8316931639357608 a=wye,b=cat,i=872,x=0.7382755379424762,y=0.7473853438162121,x2=0.5450507699242527,xy=0.5517763167562366,y2=0.5585848521512776 a=pan,b=wye,i=873,x=0.06836429475504757,y=0.2723717731023233,x2=0.004673676797355025,xy=0.018620504179322168,y2=0.07418638278290349 a=hat,b=dog,i=874,x=0.5656097272439253,y=0.37894346154820757,x2=0.3199143635529476,xy=0.2143341079271506,y2=0.14359814705013788 a=dog,b=hat,i=875,x=0.33534591909904754,y=0.579691758263101,x2=0.11245688545638494,xy=0.1943972654688825,y2=0.3360425345981656 a=wye,b=cat,i=876,x=0.4354192326304044,y=0.17028091885454333,x2=0.1895899081444502,xy=0.07414358701924541,y2=0.02899559132594757 a=dog,b=wye,i=877,x=0.15821476076382146,y=0.7823531529766005,x2=0.025031910523553257,xy=0.12377981693101425,y2=0.612076455972428 a=hat,b=hat,i=878,x=0.7134099995531998,y=0.8070281607631373,x2=0.5089538274624966,xy=0.5757419598094495,y2=0.6512944522647323 a=hat,b=dog,i=879,x=0.4841546493561141,y=0.7473067049010725,x2=0.23440572449314176,xy=0.3618120156728518,y2=0.5584673111900987 a=dog,b=pan,i=880,x=0.1767701917760346,y=0.9667338935872557,x2=0.031247700700536046,xy=0.17088973576581182,y2=0.9345744210103755 a=cat,b=wye,i=881,x=0.6961602259704199,y=0.8624291510214103,x2=0.48463906022318615,xy=0.6003888726585423,y2=0.7437840405315105 a=wye,b=dog,i=882,x=0.9942189496990836,y=0.3298671968153588,x2=0.988471319940749,xy=0.32796021795794694,y2=0.10881236753482267 a=pan,b=pan,i=883,x=0.3654591179142088,y=0.6790141016683621,x2=0.13356036686663159,xy=0.2481518946470285,y2=0.46106015026449276 a=wye,b=wye,i=884,x=0.1431668343921907,y=0.7907269003628851,x2=0.020496742469880955,xy=0.11320586719370343,y2=0.625249030957496 a=cat,b=dog,i=885,x=0.06557022118007017,y=0.10846466015020673,x2=0.004299453905603322,xy=0.007112051756270198,y2=0.011764582501499843 a=hat,b=hat,i=886,x=0.17483412751180394,y=0.6237369473898733,x2=0.03056697214281372,xy=0.10905050499378445,y2=0.3890477795392376 a=cat,b=pan,i=887,x=0.526277813412793,y=0.9120729790279264,x2=0.27696833689055056,xy=0.4800037730757093,y2=0.8318771190728762 a=hat,b=pan,i=888,x=0.604852227423324,y=0.30299438896585484,x2=0.3658462170189565,xy=0.18326683106276634,y2=0.09180559974479174 a=hat,b=pan,i=889,x=0.7560340628074265,y=0.1962826972512871,x2=0.5715875041251036,xy=0.14839640506169066,y2=0.03852689724024043 a=pan,b=cat,i=890,x=0.22948163869543092,y=0.7460938106876837,x2=0.0526618224983403,xy=0.17121483029712825,y2=0.5566559743464692 a=pan,b=pan,i=891,x=0.5174048680480675,y=0.5350818027132432,x2=0.26770779747983814,xy=0.2768539295277677,y2=0.28631253559485415 a=pan,b=dog,i=892,x=0.3230292484624844,y=0.5125573163255617,x2=0.10434789536223746,xy=0.16557100468659405,y2=0.2627150025188619 a=pan,b=hat,i=893,x=0.019755674152504676,y=0.713367718453797,x2=0.00039028666121994137,xy=0.014093060196688911,y2=0.5088935017319758 a=pan,b=hat,i=894,x=0.585363891076839,y=0.5562416426860548,x2=0.3426508849766174,xy=0.32560377234168175,y2=0.3094047650580807 a=hat,b=dog,i=895,x=0.7688318917927516,y=0.5818949738955219,x2=0.5911024778376213,xy=0.4473794136047879,y2=0.33860176064487013 a=cat,b=hat,i=896,x=0.7953295771429987,y=0.9979287928502694,x2=0.6325491362784611,xy=0.7936822848364279,y2=0.9958618755995958 a=cat,b=hat,i=897,x=0.2708161837458276,y=0.06760409558629299,x2=0.07334140537865386,xy=0.018308283172268014,y2=0.004570313740040639 a=pan,b=pan,i=898,x=0.9450997160514841,y=0.613932095581323,x2=0.893213473280596,xy=0.580227049208801,y2=0.37691261798487474 a=wye,b=cat,i=899,x=0.8795019445540828,y=0.47408779441071724,x2=0.773523670474413,xy=0.41696113707358207,y2=0.2247592368092185 a=hat,b=wye,i=900,x=0.15229282083921347,y=0.8833697361238129,x2=0.023193103279164774,xy=0.13453086895828711,y2=0.7803420906994548 a=cat,b=dog,i=901,x=0.9963591865818606,y=0.9423606044154952,x2=0.9927316286860669,xy=0.9389296452822133,y2=0.8880435087543374 a=hat,b=pan,i=902,x=0.42866863763118523,y=0.6650814671398664,x2=0.1837568008885764,xy=0.28509956643259643,y2=0.44233335793291717 a=hat,b=hat,i=903,x=0.8045428658324745,y=0.7226649410127849,x2=0.647289222961931,xy=0.5814149226790821,y2=0.5222446169690118 a=hat,b=pan,i=904,x=0.7719231923698515,y=0.0550611942242798,x2=0.5958654149184628,xy=0.04250301282130249,y2=0.003031735109403863 a=cat,b=wye,i=905,x=0.10385573852005647,y=0.7024043876290446,x2=0.010786014423546342,xy=0.07294872641694244,y2=0.49337192376053307 a=dog,b=dog,i=906,x=0.8453563942836098,y=0.7146221102011221,x2=0.7146274333561858,xy=0.604110370354965,y2=0.5106847603883047 a=dog,b=pan,i=907,x=0.3762010306955349,y=0.5720049995578428,x2=0.14152721549638278,xy=0.21518887039665943,y2=0.3271897195191677 a=pan,b=pan,i=908,x=0.1558176335309317,y=0.5109657742766185,x2=0.02427913491917973,xy=0.07961747776308291,y2=0.2610860224821042 a=hat,b=cat,i=909,x=0.19530910772058396,y=0.4313061117939153,x2=0.03814564755861067,xy=0.08423801184890403,y2=0.18602496207078537 a=hat,b=wye,i=910,x=0.7853057534899444,y=0.23673344723772105,x2=0.6167051264644092,xy=0.18590813815929053,y2=0.056042725041054856 a=dog,b=dog,i=911,x=0.6820089482250695,y=0.827544207784697,x2=0.46513620545906553,xy=0.5643925547609896,y2=0.6848294158380017 a=wye,b=cat,i=912,x=0.5992184385943385,y=0.21072064560691928,x2=0.35906273715143705,xy=0.12626769624016912,y2=0.04440319048499687 a=hat,b=pan,i=913,x=0.04143325240249729,y=0.7341534877432273,x2=0.0017167144046490474,xy=0.030418366759838836,y2=0.5389813435655451 a=cat,b=hat,i=914,x=0.13661397645943585,y=0.44052415487054775,x2=0.018663378564059294,xy=0.06018175652329788,y2=0.19406153102441034 a=pan,b=hat,i=915,x=0.6423493830531135,y=0.3296660920252046,x2=0.41261272990871556,xy=0.2117608108259211,y2=0.10867973223117065 a=wye,b=cat,i=916,x=0.37164909661033596,y=0.40189957349793326,x2=0.13812305101127884,xy=0.14936561341858623,y2=0.16152326717782065 a=cat,b=wye,i=917,x=0.22198485653121702,y=0.690292696414577,x2=0.049277276529185,xy=0.15323452517813682,y2=0.4765040067233074 a=dog,b=pan,i=918,x=0.7073942058565554,y=0.46092951368502777,x2=0.5004065624794267,xy=0.3260588672890685,y2=0.2124560165859162 a=cat,b=hat,i=919,x=0.14151997916254433,y=0.5385081787030932,x2=0.02002790450216698,xy=0.07620966622892145,y2=0.2899910585301226 a=dog,b=wye,i=920,x=0.2666453213739709,y=0.3072922207317045,x2=0.07109972741062823,xy=0.08193803295272654,y2=0.09442850892222258 a=hat,b=pan,i=921,x=0.4547526452692495,y=0.15519111136730102,x2=0.2067999683793799,xy=0.07057356841655484,y2=0.024084281047418027 a=wye,b=cat,i=922,x=0.21525470102264654,y=0.16556905159493673,x2=0.04633458631234895,xy=0.03563951669967125,y2=0.027413110846046824 a=hat,b=dog,i=923,x=0.41687782182269617,y=0.07019410239848023,x2=0.1737871183276356,xy=0.029262364512677733,y2=0.004927212011528328 a=pan,b=hat,i=924,x=0.8780534717357373,y=0.7873355062590681,x2=0.7709778992271813,xy=0.6913226746915891,y2=0.6198971994162231 a=hat,b=hat,i=925,x=0.46266864135659247,y=0.7145088994960574,x2=0.2140622716947552,xy=0.330580861767035,y2=0.5105229674590671 a=wye,b=hat,i=926,x=0.22868151273613524,y=0.5201340517551178,x2=0.05229523426728718,xy=0.11894504178093561,y2=0.27053943179519563 a=pan,b=hat,i=927,x=0.3746304958274238,y=0.17093794150208985,x2=0.1403480084039014,xy=0.06403856578064708,y2=0.029219779844971892 a=pan,b=cat,i=928,x=0.33561226968517766,y=0.6701536560644064,x2=0.11263559556323642,xy=0.22491178954959534,y2=0.44910592273649064 a=dog,b=wye,i=929,x=0.6064855333541553,y=0.4141672252184334,x2=0.3678247021678743,xy=0.25118643048441214,y2=0.17153449044513655 a=dog,b=hat,i=930,x=0.6324355476753056,y=0.762109091304607,x2=0.39997472196336376,xy=0.48198488054755867,y2=0.5808102670491339 a=pan,b=hat,i=931,x=0.8830906732363291,y=0.38008337812375315,x2=0.7798491371569929,xy=0.3356480862732434,y2=0.1444633743259639 a=dog,b=wye,i=932,x=0.9112312614588713,y=0.8762271242954337,x2=0.830342411859926,xy=0.7984455477962074,y2=0.7677739733510455 a=wye,b=pan,i=933,x=0.29688501773453857,y=0.24743131347282576,x2=0.08814071375523728,xy=0.07345864988846004,y2=0.06122225488688777 a=cat,b=dog,i=934,x=0.06045711073020743,y=0.6548623532225628,x2=0.0036550622378445623,xy=0.03959108580182069,y2=0.4288447016681926 a=dog,b=hat,i=935,x=0.019832522192974822,y=0.15602458248960316,x2=0.00039332893653483886,xy=0.0030943609948746852,y2=0.02434367034105498 a=wye,b=cat,i=936,x=0.5309363025365442,y=0.06530016180674902,x2=0.2818933573511768,xy=0.03467022646471339,y2=0.004264111131987604 a=pan,b=wye,i=937,x=0.6180817541716009,y=0.9876308686371087,x2=0.38202505483984334,xy=0.6104366197612461,y2=0.9754147326848899 a=pan,b=pan,i=938,x=0.9818389635120035,y=0.8793670901119667,x2=0.9640077502703254,xy=0.8633968723020999,y2=0.7732864791719877 a=pan,b=pan,i=939,x=0.7123702155128228,y=0.19613168702534123,x2=0.5074713239497856,xy=0.13971837215513583,y2=0.0384676386554064 a=pan,b=wye,i=940,x=0.2763911140028529,y=0.9039093669743488,x2=0.07639204789973801,xy=0.2498325168956538,y2=0.817052143703968 a=cat,b=dog,i=941,x=0.07182291530717488,y=0.8822713977303266,x2=0.005158531163221616,xy=0.06336730387712805,y2=0.7784028192530241 a=dog,b=wye,i=942,x=0.2680043914557573,y=0.9004523844910486,x2=0.07182635383957078,xy=0.24132519334040906,y2=0.8108144967356152 a=dog,b=cat,i=943,x=0.7865047304222321,y=0.35215724454095876,x2=0.618589690976548,xy=0.2769733386839228,y2=0.12401472488268063 a=hat,b=dog,i=944,x=0.5675204239943485,y=0.3295982424813395,x2=0.32207943165072517,xy=0.1870537343208019,y2=0.10863500144678788 a=hat,b=cat,i=945,x=0.17923128277767597,y=0.20921118142295692,x2=0.03212385272613125,xy=0.03749718841786966,y2=0.04376931843238939 a=wye,b=hat,i=946,x=0.16763083018519132,y=0.10228733253499145,x2=0.028100095228576448,xy=0.017146510470269345,y2=0.01046269839712392 a=cat,b=cat,i=947,x=0.7914191333138371,y=0.748388853094136,x2=0.626344244575225,xy=0.5922892574974977,y2=0.5600858754355563 a=hat,b=wye,i=948,x=0.6834678751932841,y=0.11533712351371006,x2=0.4671283364212226,xy=0.07882921873882079,y2=0.01330265206041681 a=pan,b=dog,i=949,x=0.26979861814609696,y=0.9149668439234241,x2=0.07279129435354344,xy=0.2468567901400354,y2=0.8371643254791915 a=wye,b=dog,i=950,x=0.5623890188980715,y=0.5493012859573337,x2=0.3162814085771354,xy=0.3089210112889939,y2=0.30173190275438055 a=dog,b=dog,i=951,x=0.1281055710583192,y=0.8637404563175912,x2=0.01641103733617807,xy=0.11064996440273825,y2=0.7460475758797207 a=hat,b=pan,i=952,x=0.7495158494009292,y=0.05659940815409714,x2=0.5617740085031964,xy=0.042422153478208,y2=0.003203493003394078 a=dog,b=hat,i=953,x=0.02008382113876772,y=0.023054974160895414,x2=0.00040335987153401314,xy=0.00046303197740633494,y2=0.0005315318335595552 a=hat,b=dog,i=954,x=0.8048331895510095,y=0.45833484414841963,x2=0.6477564630028512,xy=0.3688830944983374,y2=0.2100708293605561 a=wye,b=dog,i=955,x=0.5085330470357038,y=0.6955385567911895,x2=0.2586058599274173,xy=0.35370434161583947,y2=0.4837738839831707 a=wye,b=wye,i=956,x=0.3032441644265019,y=0.7682973644818734,x2=0.09195702325872734,xy=0.23298169232338928,y2=0.5902808402697926 a=pan,b=wye,i=957,x=0.23273075450777592,y=0.6115766438206743,x2=0.05416360409375866,xy=0.14233269375571886,y2=0.37402599126695996 a=pan,b=dog,i=958,x=0.3479868982175456,y=0.06981440575125086,x2=0.12109488133106842,xy=0.024294498508278962,y2=0.00487405125040029 a=cat,b=cat,i=959,x=0.2506771355614953,y=0.5281728384744155,x2=0.06283902629331628,xy=0.13240085423015083,y2=0.27896654730212106 a=hat,b=cat,i=960,x=0.8793447124216682,y=0.25901777778092283,x2=0.7732471232639464,xy=0.22776591331486515,y2=0.06709020920656752 a=wye,b=pan,i=961,x=0.8977214919326137,y=0.38469643551126753,x2=0.8059038770777179,xy=0.34535025802833363,y2=0.1479913474950748 a=wye,b=hat,i=962,x=0.9562617903669814,y=0.47382566138151094,x2=0.9144366117158648,xy=0.4531013752745027,y2=0.22451075738362627 a=cat,b=pan,i=963,x=0.05062588275210245,y=0.0001071165779457095,x2=0.002562980004429624,xy=5.422871315885932e-06,y2=1.1473961270799259e-08 a=cat,b=dog,i=964,x=0.4685988126190114,y=0.019310315636905995,x2=0.21958484718794732,xy=0.009048790978752478,y2=0.00037288828999693617 a=cat,b=hat,i=965,x=0.9652309625577333,y=0.25063333378563546,x2=0.9316708110801284,xy=0.24191905401896258,y2=0.06281706800450176 a=wye,b=pan,i=966,x=0.23292707596683615,y=0.48395502336718577,x2=0.05425502271846026,xy=0.11272622849238044,y2=0.23421246464233333 a=dog,b=cat,i=967,x=0.4816380078329947,y=0.14585492856879678,x2=0.23197517058933587,xy=0.07024927722849902,y2=0.021273660187808813 a=dog,b=hat,i=968,x=0.5370776632361478,y=0.6372146048574174,x2=0.288452416347201,xy=0.342233730956767,y2=0.4060424526435946 a=cat,b=pan,i=969,x=0.07512255270840607,y=0.719699576859241,x2=0.0056433979254272475,xy=0.054065669396825874,y2=0.5179674809313706 a=hat,b=hat,i=970,x=0.14960927782686417,y=0.6213694158181706,x2=0.022382936011875833,xy=0.09296262956425698,y2=0.3860999509142146 a=wye,b=dog,i=971,x=0.7785604592951778,y=0.9994502931828215,x2=0.6061563887779182,xy=0.7781324793031177,y2=0.9989008885432279 a=wye,b=pan,i=972,x=0.8434626638118352,y=0.8602450015939322,x2=0.711429265244557,xy=0.7255845405752345,y2=0.7400214627673445 a=pan,b=dog,i=973,x=0.05726926291551737,y=0.5994218334683502,x2=0.003279768474886653,xy=0.03432844657820042,y2=0.3593065344385586 a=hat,b=dog,i=974,x=0.9226697875828058,y=0.030904389281711464,x2=0.8513195369181,xy=0.028514546293933057,y2=0.0009550812768755624 a=cat,b=hat,i=975,x=0.9901595235021967,y=0.8592860989306361,x2=0.9804158819820973,xy=0.8508303142692202,y2=0.738372599815431 a=cat,b=wye,i=976,x=0.7969021093554425,y=0.463755536956553,x2=0.6350529718951536,xy=0.36956776562594296,y2=0.21506919805786082 a=hat,b=wye,i=977,x=0.7417136990825777,y=0.4328986289834107,x2=0.5501392114067606,xy=0.3210868434310619,y2=0.18740122297571665 a=dog,b=pan,i=978,x=0.9772797759762182,y=0.5328687567382687,x2=0.9550757605321272,xy=0.5207618592099011,y2=0.2839491119077882 a=hat,b=wye,i=979,x=0.2038116276017774,y=0.23985168428289871,x2=0.04153917954568559,xy=0.048884562156725236,y2=0.057528830453343324 a=dog,b=hat,i=980,x=0.17296447071262933,y=0.8591423895174625,x2=0.02991670812890001,xy=0.14860110866967152,y2=0.7381256454657752 a=dog,b=pan,i=981,x=0.8881154785907516,y=0.5109155266572019,x2=0.7887491033124797,xy=0.4537519874766067,y2=0.26103467537940594 a=hat,b=pan,i=982,x=0.8650008763499077,y=0.9826562694504397,x2=0.7482265160861084,xy=0.8499985342253614,y2=0.9656133438902552 a=dog,b=dog,i=983,x=0.9590123093113615,y=0.8242062568096603,x2=0.9197046094107105,xy=0.7904239456919054,y2=0.6793159537641917 a=cat,b=dog,i=984,x=0.17694035611155956,y=0.7200229552285787,x2=0.031307889620885515,xy=0.12740111810664223,y2=0.5184330560560959 a=cat,b=pan,i=985,x=0.19790162171076175,y=0.20309187904653137,x2=0.03916505187574945,xy=0.04019221221959443,y2=0.041246311334650926 a=pan,b=dog,i=986,x=0.5954211603726871,y=0.469050219456017,x2=0.3545263582195572,xy=0.27928242594156516,y2=0.2200081083717377 a=cat,b=hat,i=987,x=0.5459319667494228,y=0.5212717765654789,x2=0.29804171231889287,xy=0.28457892619135755,y2=0.2717242650437305 a=cat,b=dog,i=988,x=0.12277185901082299,y=0.3386165276216283,x2=0.0150729293649734,xy=0.041572580587897,y2=0.11466115277852897 a=hat,b=hat,i=989,x=0.4452840739358812,y=0.5945350917465275,x2=0.19827790650093532,xy=0.26473700775073666,y2=0.3534719753180519 a=dog,b=cat,i=990,x=0.5749714825497623,y=0.5821722092343784,x2=0.3305922057454716,xy=0.33473241824276095,y2=0.33892448120483687 a=cat,b=hat,i=991,x=0.08517713483975298,y=0.6140564687795391,x2=0.0072551442995094605,xy=0.05230357064045737,y2=0.3770653468499971 a=wye,b=pan,i=992,x=0.22526402517427413,y=0.9588061574025097,x2=0.05074388103771601,xy=0.215984534378368,y2=0.9193092474729663 a=wye,b=dog,i=993,x=0.5733255046749886,y=0.7898205441934877,x2=0.32870213431083034,xy=0.45282426210240545,y2=0.623816492030097 a=hat,b=hat,i=994,x=0.6514029667906138,y=0.20813520752042713,x2=0.42432582514361356,xy=0.13557989167238632,y2=0.043320264609571266 a=wye,b=dog,i=995,x=0.91510627197243,y=0.3616586038082443,x2=0.837419489003279,xy=0.33095605665771655,y2=0.13079694570852865 a=hat,b=cat,i=996,x=0.44761087175904435,y=0.7566230280704532,x2=0.20035549251689164,xy=0.3386726931875835,y2=0.5724784066065018 a=wye,b=cat,i=997,x=0.8588159982893151,y=0.2518130191815001,x2=0.7375649189176728,xy=0.21626104945060648,y2=0.06340979662930255 a=cat,b=hat,i=998,x=0.49632650430902825,y=0.1658604134256596,x2=0.24633999887961983,xy=0.08232091919880785,y2=0.027509676741730726 a=wye,b=hat,i=999,x=0.29120233477659807,y=0.1032096823717803,x2=0.0847987997793419,xy=0.03005490047821352,y2=0.010652238535283777 a=dog,b=cat,i=1000,x=0.6342074605740181,y=0.020204769958250823,x2=0.4022191030477447,xy=0.012814015846704465,y2=0.00040823272906583496 a=pan,b=dog,i=1001,x=0.5440962271899282,y=0.8507513390682108,x2=0.296040704442314,xy=0.4628905938637929,y2=0.7237778409263537 a=pan,b=wye,i=1002,x=0.9767984205420347,y=0.24085139484174467,x2=0.9541351543734137,xy=0.23526326206676215,y2=0.05800939439721399 a=dog,b=dog,i=1003,x=0.9374506282275957,y=0.42631604802092005,x2=0.878813680364314,xy=0.3996502470407174,y2=0.18174537280017541 a=wye,b=dog,i=1004,x=0.5775274892249994,y=0.7211591715565521,x2=0.3335380008105318,xy=0.4164892456806361,y2=0.5200705507201325 a=cat,b=dog,i=1005,x=0.7090989774440678,y=0.9873769606793289,x2=0.5028213598122225,xy=0.7001479931695437,y2=0.974913262480349 a=cat,b=pan,i=1006,x=0.6043080143248889,y=0.09927933178093473,x2=0.3651881761772901,xy=0.059995295852038506,y2=0.009856385718868916 a=dog,b=dog,i=1007,x=0.3578885561246494,y=0.13589282310616246,x2=0.12808421860498634,xy=0.04863448624916688,y2=0.01846685937176276 a=pan,b=wye,i=1008,x=0.6798888637740312,y=0.7598653357623847,x2=0.4622488670839432,xy=0.5166239797527604,y2=0.5773953284932816 a=dog,b=cat,i=1009,x=0.960568894623436,y=0.9105491402373301,x2=0.9226926013180896,xy=0.8746451811380922,y2=0.8290997367869412 a=pan,b=pan,i=1010,x=0.1248653013221197,y=0.20360304318502975,x2=0.015591343474263749,xy=0.02542295533739929,y2=0.041454199194205094 a=pan,b=hat,i=1011,x=0.6087246228004949,y=0.004919964524642939,x2=0.37054566640360476,xy=0.002994903549455089,y2=2.4206050923745023e-05 a=wye,b=cat,i=1012,x=0.6079618404129372,y=0.9895746699262148,x2=0.36961759939828576,xy=0.6016236375543664,y2=0.9792580273595769 a=wye,b=wye,i=1013,x=0.20922215896167096,y=0.9771015198150322,x2=0.04377391180058271,xy=0.20443128950043096,y2=0.9547273800248458 a=dog,b=dog,i=1014,x=0.8843402003807457,y=0.3926907979717157,x2=0.7820575900094574,xy=0.34727225896598196,y2=0.15420606281166283 a=hat,b=cat,i=1015,x=0.372415813118841,y=0.17229317366874286,x2=0.1386935378609675,xy=0.06416470236667056,y2=0.02968493769284759 a=hat,b=pan,i=1016,x=0.8679193129184527,y=0.2352481151221144,x2=0.753283933736839,xy=0.20417638244214661,y2=0.055341675668507596 a=wye,b=pan,i=1017,x=0.6987004127420731,y=0.19215217266808393,x2=0.48818226676594323,xy=0.13425680235247633,y2=0.03692245746106514 a=pan,b=pan,i=1018,x=0.1513426365535807,y=0.9583801421415503,x2=0.022904593638989224,xy=0.14504377753229766,y2=0.9184924968512582 a=wye,b=dog,i=1019,x=0.4317948780039407,y=0.28056558302014645,x2=0.186446816670438,xy=0.12114678169228862,y2=0.07871704637543468 a=wye,b=cat,i=1020,x=0.5320130701140631,y=0.49284211602664263,x2=0.283037906772191,xy=0.26219844722884544,y2=0.24289335132961867 a=hat,b=cat,i=1021,x=0.01903200162010199,y=0.6048001051810862,x2=0.0003622170856675648,xy=0.011510556581644286,y2=0.3657831672270529 a=pan,b=wye,i=1022,x=0.6047652537288687,y=0.47797327818113344,x2=0.3657410121177429,xy=0.28906163085483233,y2=0.22845845465521916 a=dog,b=pan,i=1023,x=0.49591860886900707,y=0.4506369587192145,x2=0.24593526662257123,xy=0.223479253672993,y2=0.20307366856370304 a=cat,b=pan,i=1024,x=0.6289256242714548,y=0.38219168166454864,x2=0.3955474408652392,xy=0.2403701419822334,y2=0.14607048153357569 a=cat,b=cat,i=1025,x=0.3866427067941546,y=0.7213028755311852,x2=0.14949258271711058,xy=0.27888649621378464,y2=0.5202778382495564 a=pan,b=cat,i=1026,x=0.8032224836204428,y=0.31948296783638674,x2=0.6451663581933925,xy=0.2566159028999726,y2=0.10206936673754573 a=dog,b=cat,i=1027,x=0.8048421863331399,y=0.35338983647132594,x2=0.6477709449015087,xy=0.2844230486134927,y2=0.12488437652123048 a=hat,b=cat,i=1028,x=0.6226709866380417,y=0.012662422631392056,x2=0.38771915760079223,xy=0.00788452319311676,y2=0.00016033694689598972 a=cat,b=dog,i=1029,x=0.5711949137244665,y=0.7434225895518772,x2=0.3262636294647007,xy=0.424639201899904,y2=0.552677146656019 a=cat,b=wye,i=1030,x=0.26312318744491703,y=0.16142518462583078,x2=0.06923381177117294,xy=0.04247470911263281,y2=0.026058090231483554 a=cat,b=hat,i=1031,x=0.5024658818641952,y=0.7911608972408211,x2=0.2524719624375633,xy=0.397531357928577,y2=0.6259355653229011 a=wye,b=cat,i=1032,x=0.794893250619878,y=0.43663416290551493,x2=0.6318552798810362,xy=0.3470775490836541,y2=0.19064939221619975 a=pan,b=dog,i=1033,x=0.2180491028489473,y=0.7391689879036737,x2=0.04754541125323079,xy=0.16117513466616043,y2=0.5463707926785413 a=dog,b=pan,i=1034,x=0.6729162913090135,y=0.6902170709873656,x2=0.45281633510907715,xy=0.4644583116069882,y2=0.4763996050823781 a=wye,b=wye,i=1035,x=0.5875359040331551,y=0.076240435233347,x2=0.3451984385280569,xy=0.044793993038705744,y2=0.005812603964570179 a=pan,b=hat,i=1036,x=0.4983986870789734,y=0.9035481210268024,x2=0.24840125128204443,xy=0.45032719723243164,y2=0.8163992070110652 a=hat,b=wye,i=1037,x=0.1118064145025699,y=0.09592641102267185,x2=0.012500674323920472,xy=0.01072518807254474,y2=0.00920187633169058 a=wye,b=hat,i=1038,x=0.5914575924270633,y=0.368485574031287,x2=0.34982208363961814,xy=0.21794359046064943,y2=0.1357816182691671 a=pan,b=dog,i=1039,x=0.2516733591409376,y=0.5475705161469302,x2=0.06333947970128335,xy=0.13780891116523492,y2=0.29983347015341555 a=pan,b=pan,i=1040,x=0.2558903138640043,y=0.828534112110143,x2=0.06547985272941863,xy=0.21201385399489864,y2=0.6864687749301431 a=pan,b=hat,i=1041,x=0.5743764131391449,y=0.8714137337081335,x2=0.32990826397058964,xy=0.5005194947274677,y2=0.7593618952951497 a=dog,b=cat,i=1042,x=0.9370932104263013,y=0.7358732147282736,x2=0.8781436850270723,xy=0.689581793256441,y2=0.5415093881545239 a=pan,b=wye,i=1043,x=0.6406051557435536,y=0.9330221542165993,x2=0.41037496556522257,xy=0.5976988024141104,y2=0.8705303402589836 a=wye,b=cat,i=1044,x=0.8198293508753841,y=0.6392148624011491,x2=0.6721201645567537,xy=0.524047105712232,y2=0.40859564031452 a=cat,b=cat,i=1045,x=0.31711061445473976,y=0.5524017355391501,x2=0.1005591417998626,xy=0.17517245378268453,y2=0.3051476774266651 a=dog,b=pan,i=1046,x=0.9493190533618198,y=0.38632970108414066,x2=0.9012066650757816,xy=0.36675014611875123,y2=0.14925063793976148 a=dog,b=hat,i=1047,x=0.5506255092279859,y=0.7695630775773794,x2=0.30318845141257883,xy=0.42374106147410057,y2=0.5922273303703677 a=pan,b=wye,i=1048,x=0.4870673877222067,y=0.20530958927031162,x2=0.23723464018253443,xy=0.09999960532020988,y2=0.042152027446344054 a=pan,b=dog,i=1049,x=0.44377477511029007,y=0.7069920540171963,x2=0.1969360510241885,xy=0.31374523977624336,y2=0.49983776444345424 a=cat,b=wye,i=1050,x=0.5760196111912421,y=0.5313191474605581,x2=0.33179859247690974,xy=0.3060502487386929,y2=0.2823000364582143 a=wye,b=pan,i=1051,x=0.4399385440979908,y=0.8880298159008242,x2=0.1935459225830598,xy=0.3906785443230154,y2=0.7885969539288518 a=wye,b=hat,i=1052,x=0.8296158619638061,y=0.9271603190971333,x2=0.688262478421949,xy=0.7691869073064057,y2=0.859626257308298 a=hat,b=hat,i=1053,x=0.8213818417466454,y=0.8219814213452944,x2=0.6746681299511113,xy=0.6751606137461232,y2=0.6756534570368304 a=wye,b=dog,i=1054,x=0.7935581938812478,y=0.6677182570731883,x2=0.6297346070760681,xy=0.5298732941045341,y2=0.4458476708288564 a=cat,b=pan,i=1055,x=0.8393392041707429,y=0.508518054485822,x2=0.704490299657976,xy=0.4268191391585843,y2=0.25859061173804543 a=hat,b=cat,i=1056,x=0.10146195097856081,y=0.5013880055029021,x2=0.010294527496375877,xy=0.05087180523557383,y2=0.2513899320621782 a=hat,b=pan,i=1057,x=0.8045389366320291,y=0.7335248930675334,x2=0.6472829005569962,xy=0.5901493374616762,y2=0.5380587687497363 a=pan,b=hat,i=1058,x=0.41111803793121704,y=0.6333739720771131,x2=0.16901804111241361,xy=0.26039146467704416,y2=0.4011625885047396 a=pan,b=wye,i=1059,x=0.5440039718966404,y=0.44600871429630595,x2=0.2959403214393207,xy=0.24263051207770434,y2=0.19892377322824387 a=cat,b=hat,i=1060,x=0.42848512529884564,y=0.760379589589332,x2=0.18359950260236746,xy=0.32581134371986975,y2=0.578177120264041 a=hat,b=wye,i=1061,x=0.6086991223249973,y=0.26727047467444054,x2=0.3705146215192221,xy=0.1626873033577174,y2=0.07143350663270076 a=hat,b=pan,i=1062,x=0.8313074120181857,y=0.5272138667448927,x2=0.6910720132763736,xy=0.43827679514379736,y2=0.2779544612881015 a=wye,b=hat,i=1063,x=0.5868897183341317,y=0.5897451195913053,x2=0.34443954148631645,xy=0.34611534712587,y2=0.34779930608176296 a=cat,b=dog,i=1064,x=0.7397842027559516,y=0.19330378276021587,x2=0.5472806666472588,xy=0.14300308481897595,y2=0.03736635242940873 a=dog,b=hat,i=1065,x=0.6788622204499666,y=0.3082398647535174,x2=0.46085391435425904,xy=0.2092523990177702,y2=0.0950118142232667 a=cat,b=hat,i=1066,x=0.5293401279343086,y=0.9445953393456461,x2=0.2802009710415102,xy=0.500012217775376,y2=0.8922603551135163 a=cat,b=dog,i=1067,x=0.2403917325329138,y=0.6076355121295253,x2=0.05778818507017596,xy=0.14607055350934092,y2=0.36922091560091047 a=pan,b=cat,i=1068,x=0.20921260941283415,y=0.2949165036698348,x2=0.0437699159373271,xy=0.06170025129167581,y2=0.08697574413683969 a=hat,b=pan,i=1069,x=0.3754581763056679,y=0.9711108861348786,x2=0.140968842154778,xy=0.36461152229878263,y2=0.9430563531696692 a=hat,b=dog,i=1070,x=0.24735210740949987,y=0.5050668925990092,x2=0.061183065039920756,xy=0.12492936026713244,y2=0.25509256599961905 a=wye,b=hat,i=1071,x=0.660602779925325,y=0.42368464415736373,x2=0.4363960328450674,xy=0.2798872537420266,y2=0.17950867769475193 a=hat,b=pan,i=1072,x=0.23186122160766431,y=0.4336855941433039,x2=0.05375962608539842,xy=0.10055487165171215,y2=0.1880831945674305 a=hat,b=cat,i=1073,x=0.5122072492645222,y=0.9694750073357224,x2=0.2623562661991284,xy=0.4965721267381329,y2=0.939881789848599 a=wye,b=pan,i=1074,x=0.43595890232167034,y=0.36905250816503343,x2=0.1900601645135157,xy=0.16089172635868726,y2=0.13619975378290206 a=hat,b=pan,i=1075,x=0.33427939730036704,y=0.7933254358401198,x2=0.11174271545949664,xy=0.26519234855568624,y2=0.6293652471509161 a=hat,b=wye,i=1076,x=0.6931979555950077,y=0.44330243921126156,x2=0.4805234056410983,xy=0.3072963445715267,y2=0.19651705261065425 a=hat,b=cat,i=1077,x=0.42785997597505154,y=0.518438949372806,x2=0.1830641590413717,xy=0.22181927642317972,y2=0.2687789442267789 a=dog,b=wye,i=1078,x=0.4422743191976337,y=0.48177417934319466,x2=0.1956065734217304,xy=0.2130763471760101,y2=0.2321063598818087 a=wye,b=hat,i=1079,x=0.5418642209237631,y=0.9476398847621776,x2=0.2936168339173167,xy=0.513492147872942,y2=0.8980213511920733 a=pan,b=wye,i=1080,x=0.8650411565479376,y=0.7610469041859692,x2=0.7482962025217934,xy=0.6583368941842582,y2=0.5791923903710477 a=wye,b=cat,i=1081,x=0.863642873883729,y=0.9411919456681188,x2=0.7458790136101465,xy=0.8128537168330326,y2=0.8858422785905391 a=cat,b=wye,i=1082,x=0.9444653638696833,y=0.35050033430161065,x2=0.8920148235494932,xy=0.33103542577261635,y2=0.12285048434554083 a=wye,b=hat,i=1083,x=0.8966975312509847,y=0.10092356690059079,x2=0.8040664625516107,xy=0.09049791328480336,y2=0.010185566355938024 a=cat,b=pan,i=1084,x=0.5413307127431968,y=0.44326266490365374,x2=0.29303894055905744,xy=0.23995169432474367,y2=0.1964817900974888 a=cat,b=pan,i=1085,x=0.2839939997658667,y=0.7028464774792382,x2=0.08065259190301509,xy=0.199604182360679,y2=0.49399317090497336 a=wye,b=hat,i=1086,x=0.08155852459426205,y=0.7660135045083457,x2=0.006651792933992848,xy=0.06247493124698078,y2=0.5867766890891574 a=dog,b=cat,i=1087,x=0.05100926358628344,y=0.2925931226507835,x2=0.0026019449716149414,xy=0.014924959716827576,y2=0.08561073542253644 a=dog,b=dog,i=1088,x=0.7086028076135323,y=0.8413205380520563,x2=0.5021179389577807,xy=0.5961620953666148,y2=0.7078202477482015 a=wye,b=dog,i=1089,x=0.18671024727982866,y=0.40739135131533766,x2=0.03486071643929477,xy=0.07606413994375025,y2=0.16596771312653688 a=dog,b=pan,i=1090,x=0.2664113723843127,y=0.6937231025818595,x2=0.07097501933569292,xy=0.18481572381353653,y2=0.4812517430558012 a=pan,b=cat,i=1091,x=0.793159753586116,y=0.4409433651088378,x2=0.6291023947087883,xy=0.3497385308151586,y2=0.19443105123350585 a=hat,b=hat,i=1092,x=0.6512931235244617,y=0.20800570847161715,x2=0.4241827327502497,xy=0.1354726875813981,y2=0.04326637475677938 a=cat,b=wye,i=1093,x=0.7478916367217758,y=0.712517745948077,x2=0.5593419002783767,xy=0.5328860632104178,y2=0.5076815382909284 a=wye,b=wye,i=1094,x=0.23641082721661355,y=0.6370262281634499,x2=0.05589007922524351,xy=0.1505998975588004,y2=0.4058024153681517 a=cat,b=dog,i=1095,x=0.7747991261476976,y=0.3322107519852314,x2=0.6003136858792358,xy=0.2573966003350268,y2=0.11036398373459294 a=wye,b=wye,i=1096,x=0.6048532839105468,y=0.24251161200680948,x2=0.3658474950573726,xy=0.1466839449087591,y2=0.058811881958141306 a=hat,b=cat,i=1097,x=0.4787260513072743,y=0.12498415897510329,x2=0.22917863220025503,xy=0.05983317290211183,y2=0.015621039994713891 a=pan,b=wye,i=1098,x=0.594658212310013,y=0.7237896024672402,x2=0.35361838946774055,xy=0.43040743109174406,y2=0.5238713886396856 a=wye,b=wye,i=1099,x=0.6066364587995798,y=0.20828802132322632,x2=0.36800779314489435,xy=0.1263551076658934,y2=0.04338389982674479 a=wye,b=pan,i=1100,x=0.35532388403878157,y=0.35804659022907115,x2=0.1262550625684055,xy=0.12722250510703562,y2=0.1281973607746644 a=pan,b=hat,i=1101,x=0.4487538878427101,y=0.46697683514906696,x2=0.2013800518539476,xy=0.2095576703056281,y2=0.21806736456583886 a=hat,b=dog,i=1102,x=0.03136871604264768,y=0.3607990819866618,x2=0.000983996346164262,xy=0.011317803951287553,y2=0.1301759775624179 a=dog,b=pan,i=1103,x=0.6441341502724975,y=0.4022253408667993,x2=0.41490880354727244,xy=0.2590870781573014,y2=0.16178522483541288 a=cat,b=dog,i=1104,x=0.6395109732585249,y=0.750769211304267,x2=0.40897428491806576,xy=0.48012514901372694,y2=0.5636544086424311 a=cat,b=pan,i=1105,x=0.8410479118904012,y=0.357626507656608,x2=0.707361590095204,xy=0.3007810275012467,y2=0.1278967189786619 a=hat,b=cat,i=1106,x=0.863784532630219,y=0.6129075968250145,x2=0.746123718811206,xy=0.5294201020690059,y2=0.3756557222458145 a=hat,b=dog,i=1107,x=0.4882958743237995,y=0.2884372096275648,x2=0.2384328608816438,xy=0.1408426994626088,y2=0.08319602389773577 a=pan,b=cat,i=1108,x=0.3138710259922588,y=0.8680486410464611,x2=0.0985150209574332,xy=0.2724553175764387,y2=0.7535084432226078 a=hat,b=cat,i=1109,x=0.02914443603611583,y=0.35747191368541953,x2=0.0008493981518632469,xy=0.010418317323112629,y2=0.12778616907391602 a=dog,b=hat,i=1110,x=0.7845918032912979,y=0.4529218136895614,x2=0.6155842977918906,xy=0.3553587425526582,y2=0.20513816931584178 a=dog,b=pan,i=1111,x=0.26539773926787824,y=0.6397637893288771,x2=0.07043596000850068,xy=0.16979186335333513,y2=0.40929770613644384 a=hat,b=cat,i=1112,x=0.198395774137602,y=0.1249190785483415,x2=0.03936088319565839,xy=0.024783417293154125,y2=0.015604776185366714 a=dog,b=cat,i=1113,x=0.3293818212784465,y=0.4286677322263892,x2=0.10849238418870648,xy=0.1411953583640295,y2=0.18375602465211532 a=dog,b=hat,i=1114,x=0.3829667540927333,y=0.4040167806903713,x2=0.14666353474032404,xy=0.15472499509998716,y2=0.16322955907941156 a=dog,b=hat,i=1115,x=0.06672734211151576,y=0.2988485473539988,x2=0.004452538185267265,xy=0.019941369258819796,y2=0.08931045425559526 a=cat,b=dog,i=1116,x=0.8527725668016823,y=0.7202701834573114,x2=0.7272210506895298,xy=0.61422665313761,y2=0.5187891371776291 a=hat,b=hat,i=1117,x=0.6448913304258395,y=0.41314314973722477,x2=0.41588482805840926,xy=0.26643243549036066,y2=0.17068726217479493 a=cat,b=hat,i=1118,x=0.7454553807439559,y=0.9827694251192239,x2=0.5557037246801163,xy=0.7326107559857697,y2=0.96583574294917 a=dog,b=pan,i=1119,x=0.3070936366066537,y=0.8872748423008111,x2=0.09430650164429946,xy=0.27247645799175124,y2=0.7872566457799293 a=wye,b=cat,i=1120,x=0.39571565867227043,y=0.05767287981921754,x2=0.15659088251842884,xy=0.02282206162518836,y2=0.0033261610666419097 a=pan,b=hat,i=1121,x=0.7003417500246725,y=0.5343941112860977,x2=0.4904785668276208,xy=0.37425850710098524,y2=0.2855770661772582 a=dog,b=hat,i=1122,x=0.12745836334243676,y=0.10123723506133542,x2=0.016245634385932628,xy=0.012903532290231369,y2=0.010248977762864082 a=pan,b=pan,i=1123,x=0.39070449028862997,y=0.3182926635583354,x2=0.15264999873169816,xy=0.12435837287816982,y2=0.1013102196750597 a=pan,b=hat,i=1124,x=0.6410442083520145,y=0.9480479009695016,x2=0.41093767706166096,xy=0.6077406161567832,y2=0.898794822532678 a=dog,b=wye,i=1125,x=0.7956693842355999,y=0.464939080509021,x2=0.6330897690098586,xy=0.3699377918956787,y2=0.2161683485845739 a=wye,b=wye,i=1126,x=0.8319060225228574,y=0.11303810682768145,x2=0.6920676303098009,xy=0.09403708184453033,y2=0.012777613595186324 a=hat,b=hat,i=1127,x=0.25840497150139485,y=0.14546553147858832,x2=0.06677312929663669,xy=0.03758901651615987,y2=0.02116022084834817 a=hat,b=cat,i=1128,x=0.009624542183057194,y=0.8018834107157139,x2=9.263181223344734e-05,xy=0.007717760712327166,y2=0.6430170043810663 a=cat,b=hat,i=1129,x=0.671027006220547,y=0.6492461398441377,x2=0.45027724307731004,xy=0.43566169351985834,y2=0.4215205501025136 a=dog,b=dog,i=1130,x=0.8863744599302459,y=0.23451249862419843,x2=0.785659683216635,xy=0.20786588931491642,y2=0.05499611201096467 a=dog,b=hat,i=1131,x=0.24561475914554787,y=0.7983105466556188,x2=0.06032660991012549,xy=0.19607685264017047,y2=0.637299728901593 a=hat,b=hat,i=1132,x=0.12215761324247987,y=0.059194869138346595,x2=0.014922482473099293,xy=0.007231103930141351,y2=0.003504032532305978 a=cat,b=cat,i=1133,x=0.45995479897134484,y=0.9699398990182666,x2=0.21155841709677023,xy=0.44612851126723335,y2=0.9407834077075652 a=cat,b=cat,i=1134,x=0.745352225088946,y=0.90324302826816,x2=0.5555499394450429,xy=0.6732342009157509,y2=0.8158479681150361 a=dog,b=pan,i=1135,x=0.5052151771411246,y=0.12974884928428687,x2=0.25524237521373794,xy=0.06555108787501808,y2=0.01683476389059659 a=wye,b=hat,i=1136,x=0.01044276900378649,y=0.32603690418363707,x2=0.00010905142446644387,xy=0.0034047280770993908,y2=0.10630006288965013 a=dog,b=dog,i=1137,x=0.8977009326635101,y=0.6319499049985434,x2=0.805866964504936,xy=0.5673020191138091,y2=0.39936068242766803 a=cat,b=pan,i=1138,x=0.3659452160992942,y=0.12630848786008497,x2=0.13391590118595914,xy=0.046221986885133876,y2=0.015953834105501233 a=cat,b=hat,i=1139,x=0.2222862108606949,y=0.6721019549883772,x2=0.04941115953880531,xy=0.14939899688643168,y2=0.45172103789919865 a=wye,b=pan,i=1140,x=0.2914972055161553,y=0.6357557059324661,x2=0.0849706208237277,xy=0.1853210116702645,y2=0.4041853176256883 a=dog,b=hat,i=1141,x=0.4266529907443396,y=0.5134085687711274,x2=0.18203277451108954,xy=0.21904730133997247,y2=0.26358835848761747 a=cat,b=dog,i=1142,x=0.5322703793573935,y=0.8891588365204124,x2=0.28331175674126363,xy=0.4732729112236985,y2=0.7906034365623335 a=pan,b=cat,i=1143,x=0.27994448082331946,y=0.5318630356389697,x2=0.07836891234343787,xy=0.14889212138106606,y2=0.28287828867910003 a=wye,b=hat,i=1144,x=0.03716552624373293,y=0.4411681159221027,x2=0.001381276340973601,xy=0.01639624519020112,y2=0.19462930650625784 a=wye,b=hat,i=1145,x=0.09153841600334467,y=0.753384940980195,x2=0.008379281604401387,xy=0.06896366413810036,y2=0.5675888692957319 a=dog,b=cat,i=1146,x=0.9091950492491973,y=0.3486779040776171,x2=0.8266356375792502,xy=0.31701622416995595,y2=0.12157628079195996 a=dog,b=cat,i=1147,x=0.6397060288677293,y=0.4269278965397596,x2=0.40922380336972014,xy=0.2731083493083024,y2=0.18226742884386368 a=hat,b=hat,i=1148,x=0.8194745411913835,y=0.8989205706193172,x2=0.6715385236608286,xy=0.7366425221757616,y2=0.8080581922825588 a=dog,b=cat,i=1149,x=0.5287998003069021,y=0.425955845236605,x2=0.27962922880461955,xy=0.22524536590067443,y2=0.1814383820912306 a=pan,b=hat,i=1150,x=0.5835456838747279,y=0.8740662106771149,x2=0.34052556516882393,xy=0.510057564661369,y2=0.7639917406474506 a=pan,b=cat,i=1151,x=0.6522024486696242,y=0.5657660217947503,x2=0.42536803405065376,xy=0.3689939847886081,y2=0.3200911914174579 a=pan,b=cat,i=1152,x=0.3539601131941189,y=0.25640961808475804,x2=0.12528776173239348,xy=0.09075877744134175,y2=0.06574589224637148 a=hat,b=hat,i=1153,x=0.6973917722108447,y=0.8220444136221455,x2=0.4863552839473827,xy=0.5732870104519727,y2=0.6757570179673771 a=pan,b=pan,i=1154,x=0.8797639810640132,y=0.6162946277787805,x2=0.7739846623776014,xy=0.5421938152430241,y2=0.37981906822898565 a=hat,b=pan,i=1155,x=0.4377588064658874,y=0.3857917372842491,x2=0.19163277263843825,xy=0.16888373045795407,y2=0.14883526455679907 a=cat,b=cat,i=1156,x=0.9212930829184702,y=0.6241199936250447,x2=0.8487809446334192,xy=0.5749974330378734,y2=0.3895257664425258 a=wye,b=dog,i=1157,x=0.8209510629039569,y=0.3747469584931943,x2=0.6739606476831367,xy=0.30764891389501287,y2=0.14043528289989987 a=pan,b=dog,i=1158,x=0.5974294364800277,y=0.6981999319048695,x2=0.3569219315728434,xy=0.41712519186831987,y2=0.48748314491196443 a=cat,b=hat,i=1159,x=0.13184638853569974,y=0.5286862217502872,x2=0.017383470169906698,xy=0.06970536900635949,y2=0.2795091210685939 a=pan,b=dog,i=1160,x=0.6723291822932118,y=0.08940961362984456,x2=0.4520265293630588,xy=0.0601126924209054,y2=0.007994079009438087 a=cat,b=cat,i=1161,x=0.33049385434668643,y=0.9022959566664027,x2=0.10922618776092878,xy=0.2982032684801102,y2=0.8141379934165389 a=dog,b=hat,i=1162,x=0.676281316646256,y=0.11195521829057764,x2=0.4573564192447936,xy=0.07571322243097085,y2=0.01253397090249089 a=pan,b=cat,i=1163,x=0.5327388900339096,y=0.7039706938316723,x2=0.28381072495456205,xy=0.37503256604828633,y2=0.49557473777384614 a=hat,b=cat,i=1164,x=0.1933278467331423,y=0.008914393054231695,x2=0.03737565632247336,xy=0.0017234004141074935,y2=7.94664035253343e-05 a=hat,b=wye,i=1165,x=0.021340741844274036,y=0.7602588744617488,x2=0.0004554272624639488,xy=0.016224488374706525,y2=0.5779935561978451 a=cat,b=pan,i=1166,x=0.665014628709845,y=0.46332035098488633,x2=0.44224445639809296,xy=0.30811481118392925,y2=0.21466574763675825 a=hat,b=dog,i=1167,x=0.6077597776150052,y=0.17579066134697052,x2=0.3693719472866406,xy=0.1068384932470295,y2=0.030902356616805276 a=cat,b=hat,i=1168,x=0.8418250117669293,y=0.8860151608635193,x2=0.7086693504363906,xy=0.7458697232196099,y2=0.785022865280008 a=hat,b=cat,i=1169,x=0.9340118413002695,y=0.2457129242900873,x2=0.8723781196891198,xy=0.22949878084745814,y2=0.060374841163186165 a=hat,b=wye,i=1170,x=0.6461099251188956,y=0.19438865009440986,x2=0.41745803533714493,xy=0.12559643615646238,y2=0.03778694728552691 a=pan,b=cat,i=1171,x=0.9447375439682993,y=0.20802590998182424,x2=0.8925290269832543,xy=0.19652988727799917,y2=0.04327477922376604 a=wye,b=pan,i=1172,x=0.6078790246684067,y=0.8357743273327147,x2=0.3695169086318134,xy=0.5080496829419043,y2=0.6985187262284518 a=wye,b=pan,i=1173,x=0.6213831858768594,y=0.2755732381662571,x2=0.38611706369047555,xy=0.17123657667415138,y2=0.07594060959343667 a=hat,b=pan,i=1174,x=0.5618126256983736,y=0.889248530414444,x2=0.3156334263941009,xy=0.49959105177055885,y2=0.7907629488442482 a=cat,b=wye,i=1175,x=0.7437196121160394,y=0.08538081278312915,x2=0.5531188614460322,xy=0.06349938496522099,y2=0.007289883191507749 a=hat,b=pan,i=1176,x=0.7290249006448934,y=0.04361641718557552,x2=0.5314773057602967,xy=0.031797454205200415,y2=0.0019023918481061673 a=hat,b=dog,i=1177,x=0.31363080644456,y=0.7180272834208573,x2=0.09836428275106505,xy=0.2251954759484801,y2=0.5155631797367362 a=wye,b=hat,i=1178,x=0.6834067249536789,y=0.9878807105188865,x2=0.4670447517119134,xy=0.6751243210206256,y2=0.9759082982153 a=hat,b=dog,i=1179,x=0.49045154753612985,y=0.6734478449684046,x2=0.24054272048058464,xy=0.33029353774962567,y2=0.4535319998925883 a=cat,b=hat,i=1180,x=0.12978130038938562,y=0.42171750159109544,x2=0.016843185930759945,xy=0.054731045753455165,y2=0.17784565114823558 a=cat,b=hat,i=1181,x=0.3264872217972796,y=0.4666906345216678,x2=0.10659390599690606,xy=0.15236852870378892,y2=0.21780014835023692 a=pan,b=cat,i=1182,x=0.12993325182555615,y=0.8008745906124531,x2=0.01688264992996339,xy=0.10406023986273706,y2=0.6414001098886645 a=dog,b=hat,i=1183,x=0.9241833806481935,y=0.9921515876591461,x2=0.8541149210663237,xy=0.9169300083983022,y2=0.9843647728945644 a=pan,b=cat,i=1184,x=0.76370596148368,y=0.18860964378787792,x2=0.5832467956057121,xy=0.1440423093541157,y2=0.0355735977297902 a=pan,b=cat,i=1185,x=0.21456293879544752,y=0.287520239815655,x2=0.04603725470453896,xy=0.06169118761801878,y2=0.08266788830365177 a=cat,b=dog,i=1186,x=0.6305366088057442,y=0.5208735730780759,x2=0.3975764150442482,xy=0.328429856385181,y2=0.2713092791311217 a=pan,b=dog,i=1187,x=0.7135047495843945,y=0.602312134937668,x2=0.5090890276794895,xy=0.4297525690103428,y2=0.3627799078931716 a=pan,b=wye,i=1188,x=0.12846391575991634,y=0.20534006815546713,x2=0.01650297765237088,xy=0.026378789217659408,y2=0.042164543590091884 a=pan,b=pan,i=1189,x=0.9284204826309687,y=0.17346669545432036,x2=0.8619645925687208,xy=0.16105003311409938,y2=0.030090694431841928 a=pan,b=pan,i=1190,x=0.5779102962941246,y=0.703500872993506,x2=0.3339803105627629,xy=0.4065603979548524,y2=0.4949134783026251 a=pan,b=dog,i=1191,x=0.0762925743827011,y=0.656412741684207,x2=0.0058205569059399795,xy=0.050079417920695125,y2=0.4308776874453775 a=wye,b=pan,i=1192,x=0.3315607730558524,y=0.9006904051746625,x2=0.10993254622939447,xy=0.2986336070237,y2=0.8112432059736977 a=dog,b=dog,i=1193,x=0.8219100974851303,y=0.5890668500456228,x2=0.6755362083480164,xy=0.48415999214625643,y2=0.34699975382267223 a=hat,b=wye,i=1194,x=0.7327635556383868,y=0.5133261943553027,x2=0.5369424284718112,xy=0.3761467273781132,y2=0.26350378181129797 a=dog,b=wye,i=1195,x=0.31733254497756136,y=0.8422498053947577,x2=0.100699944101936,xy=0.26727327425277425,y2=0.7093847346875072 a=cat,b=wye,i=1196,x=0.8663304768297544,y=0.1806750045641552,x2=0.7505284950840696,xy=0.15652426285528262,y2=0.0326434572742575 a=pan,b=dog,i=1197,x=0.10442035300131425,y=0.15297020960344554,x2=0.010903610120919078,xy=0.015973203285476814,y2=0.02339988502612206 a=wye,b=hat,i=1198,x=0.7098332919268155,y=0.13845498744722728,x2=0.5038633023276597,xy=0.09827995952335127,y2=0.019169783549011866 a=wye,b=hat,i=1199,x=0.35664993432047165,y=0.3645218251998338,x2=0.12719917565079675,xy=0.13000668501589915,y2=0.1328761610470182 a=pan,b=wye,i=1200,x=0.1647150484954425,y=0.6379619820498607,x2=0.027131047200855973,xy=0.10508193881159142,y2=0.4069954905409867 a=wye,b=pan,i=1201,x=0.83270638124717,y=0.9548807656837569,x2=0.6933999173697573,xy=0.7951353069150481,y2=0.9117972766727979 a=cat,b=wye,i=1202,x=0.43001142909773493,y=0.7425920749313834,x2=0.18490982915467633,xy=0.3193230793778964,y2=0.5514429897508972 a=cat,b=hat,i=1203,x=0.7329732645390651,y=0.9431809128231767,x2=0.5372498065290543,xy=0.6913263927229392,y2=0.8895902343139609 a=cat,b=wye,i=1204,x=0.7290731704570307,y=0.8949646591052313,x2=0.5315476878802665,xy=0.6524947214608466,y2=0.8009617410473429 a=pan,b=cat,i=1205,x=0.25322925493758774,y=0.9298982697468532,x2=0.06412505555624581,xy=0.23547744601574763,y2=0.8647107920781913 a=dog,b=wye,i=1206,x=0.9749604614519463,y=0.32417744747181354,x2=0.950547901394592,xy=0.3160601937794334,y2=0.10509101744934042 a=cat,b=pan,i=1207,x=0.8314777995642517,y=0.5227494108250007,x2=0.6913553311682099,xy=0.4346545298362806,y2=0.27326694651788536 a=pan,b=dog,i=1208,x=0.33661841906630885,y=0.06655108628263828,x2=0.11331196005470112,xy=0.022402321451607213,y2=0.004429047085399165 a=hat,b=hat,i=1209,x=0.30986404247398636,y=0.23825793505507742,x2=0.09601572481832042,xy=0.0738275669076708,y2=0.056766843616709486 a=hat,b=pan,i=1210,x=0.17730722761279805,y=0.3560127455749533,x2=0.03143785296373657,xy=0.06312363291271542,y2=0.12674507501181645 a=hat,b=wye,i=1211,x=0.9119554450290102,y=0.0611598553934497,x2=0.83166273371806,xy=0.055775063143243334,y2=0.0037405279117476787 a=wye,b=pan,i=1212,x=0.8399964869697952,y=0.8504059004347759,x2=0.7055940981215973,xy=0.7143379688635972,y2=0.723190195494282 a=hat,b=dog,i=1213,x=0.44573913124024467,y=0.24348351632610143,x2=0.19868337311880807,xy=0.10853013103851639,y2=0.05928422272252291 a=cat,b=wye,i=1214,x=0.4603130670649951,y=0.27368801255740494,x2=0.21188811971078267,xy=0.12598216847922195,y2=0.07490512821762224 a=dog,b=dog,i=1215,x=0.7037609424578929,y=0.8879790244833483,x2=0.49527946412922164,xy=0.6249249551532415,y2=0.7885067479223989 a=cat,b=dog,i=1216,x=0.3953143785677151,y=0.4073871432884367,x2=0.1562734579023788,xy=0.1610459953855451,y2=0.16596428451671327 a=dog,b=cat,i=1217,x=0.526181430061743,y=0.30586743969181684,x2=0.27686689734182096,xy=0.16094176682636413,y2=0.09355489066362721 a=cat,b=pan,i=1218,x=0.8867757270271591,y=0.5989445701896535,x2=0.7863711900445466,xy=0.5311295066788994,y2=0.3587345981596688 a=hat,b=dog,i=1219,x=0.13841948204772603,y=0.05135249214326498,x2=0.019159953010360747,xy=0.007108185364330659,y2=0.002637078449324092 a=dog,b=pan,i=1220,x=0.2459954771391254,y=0.1560564999412034,x2=0.06051377477290597,xy=0.038389193163698224,y2=0.02435363117389882 a=cat,b=dog,i=1221,x=0.9143791641556079,y=0.4389641087121654,x2=0.8360892558419082,xy=0.4013796348185412,y2=0.19268948873746577 a=dog,b=dog,i=1222,x=0.15008767036442006,y=0.8251052209242011,x2=0.022526308795418816,xy=0.12383812041403348,y2=0.6807986255963747 a=dog,b=dog,i=1223,x=0.7101870770582471,y=0.9376914005043703,x2=0.5043656844205366,xy=0.6659363149068529,y2=0.8792651625798473 a=dog,b=wye,i=1224,x=0.44520684092545226,y=0.8405880196130835,x2=0.19820913120682096,xy=0.374235536731723,y2=0.7065882187170457 a=hat,b=pan,i=1225,x=0.12587096755685157,y=0.3752704943016385,x2=0.01584350047369798,xy=0.04723566021328519,y2=0.1408279438933961 a=wye,b=hat,i=1226,x=0.08938872028449751,y=0.970617897717945,x2=0.007990343314100137,xy=0.0867622917622364,y2=0.9420991033704033 a=wye,b=pan,i=1227,x=0.1443195297875961,y=0.23929652165666815,x2=0.02082812667811284,xy=0.03453516148529765,y2=0.05726282527698025 a=cat,b=pan,i=1228,x=0.7899541509746342,y=0.5014230517864684,x2=0.6240275606420551,xy=0.39610122115308966,y2=0.25142507686285537 a=dog,b=dog,i=1229,x=0.9706713416187546,y=0.46104593094313173,x2=0.9422028534399529,xy=0.4475240723364374,y2=0.212563350439219 a=dog,b=wye,i=1230,x=0.1794553359563008,y=0.053879218624868774,x2=0.03220421760318879,xy=0.009668913279388805,y2=0.002902970199626406 a=dog,b=dog,i=1231,x=0.3996700063691223,y=0.5511739394072727,x2=0.15973611399109428,xy=0.2202876918733989,y2=0.30379271148173187 a=wye,b=pan,i=1232,x=0.355156802874253,y=0.5598896285486372,x2=0.126136354627861,xy=0.1988486104377871,y2=0.31347639615633094 a=cat,b=wye,i=1233,x=0.8202540256885691,y=0.8562502234302561,x2=0.6728166666583038,xy=0.7023426927654044,y2=0.7331644451243635 a=cat,b=dog,i=1234,x=0.7236085818346178,y=0.021930314770576276,x2=0.5236093797047069,xy=0.01586896397032347,y2=0.000480938705936556 a=cat,b=pan,i=1235,x=0.6376328703932327,y=0.153824857319812,x2=0.40657567740591305,xy=0.09808378531066118,y2=0.02366208672946052 a=dog,b=cat,i=1236,x=0.008821831450497752,y=0.6605829141961933,x2=7.782471014099128e-05,xy=0.005827551128117436,y2=0.4363697865279353 a=pan,b=wye,i=1237,x=0.019736067843255545,y=0.7588608156781,x2=0.0003895123739135856,xy=0.014976928541811223,y2=0.5758697375716313 a=wye,b=pan,i=1238,x=0.9258166586020053,y=0.9802983599274745,x2=0.8571364853449821,xy=0.9075765520210805,y2=0.9609848744764963 a=dog,b=cat,i=1239,x=0.19657918430573829,y=0.22985177051739536,x2=0.03864337570230942,xy=0.04518407355953932,y2=0.052831836409981375 a=wye,b=pan,i=1240,x=0.30072400764264606,y=0.7382587100138145,x2=0.09043492877265424,xy=0.22201211795244438,y2=0.5450259229112614 a=hat,b=cat,i=1241,x=0.5085858946674511,y=0.9209223771852333,x2=0.25865961225469164,xy=0.46836813112002773,y2=0.8480980248005011 a=dog,b=hat,i=1242,x=0.7549874884903122,y=0.9946065400158237,x2=0.5700061077769092,xy=0.7509154936825859,y2=0.9892421694422483 a=cat,b=cat,i=1243,x=0.15289987122066706,y=0.023701936373413668,x2=0.02337837061929657,xy=0.0036240230191753944,y2=0.0005617817878493499 a=hat,b=cat,i=1244,x=0.0003019398209038737,y=0.0919727340470814,x2=9.116765544746334e-08,xy=2.7770230846215367e-05,y2=0.008458983808095165 a=pan,b=cat,i=1245,x=0.8402829269564804,y=0.07732864161559194,x2=0.7060753973345498,xy=0.0649779373143183,y2=0.005979718814112658 a=cat,b=pan,i=1246,x=0.0718872375637084,y=0.79217024461803,x2=0.005167774924541049,xy=0.05694693056575732,y2=0.6275336964581895 a=dog,b=hat,i=1247,x=0.17248274263681374,y=0.11008471505388406,x2=0.029750296507517322,xy=0.01898771357488606,y2=0.012118644488494848 a=cat,b=hat,i=1248,x=0.5470209562460591,y=0.378410015008109,x2=0.29923192657235287,xy=0.20699820826282134,y2=0.1431941394584373 a=dog,b=cat,i=1249,x=0.8379376645858482,y=0.4001626583818123,x2=0.7021395297315854,xy=0.33531136341892037,y2=0.160130153163199 a=pan,b=pan,i=1250,x=0.6375751472274978,y=0.8655124118639334,x2=0.40650206836216546,xy=0.551829203421374,y2=0.749111735090523 a=dog,b=hat,i=1251,x=0.7346778726638965,y=0.45564654943834115,x2=0.5397515765819485,xy=0.3347534376280054,y2=0.20761377801506667 a=wye,b=wye,i=1252,x=0.8350957680694377,y=0.5595201147363097,x2=0.6973849418474841,xy=0.4672528799660185,y2=0.31306275879453316 a=pan,b=cat,i=1253,x=0.29211930299900446,y=0.7244139650792422,x2=0.08533368718462418,xy=0.21161530256169336,y2=0.5247755928018295 a=hat,b=wye,i=1254,x=0.8887338453591545,y=0.20959696782842074,x2=0.7898478478868695,xy=0.18627591919377134,y2=0.04393088892286804 a=pan,b=pan,i=1255,x=0.443909909162025,y=0.10329754285240145,x2=0.19705600745223728,xy=0.04585480286426991,y2=0.010670382359343714 a=dog,b=wye,i=1256,x=0.05264152379661258,y=0.8889782833216691,x2=0.002771130027629328,xy=0.046797171456149436,y2=0.7902823882175417 a=wye,b=hat,i=1257,x=0.3698931119871959,y=0.09097174030912514,x2=0.13682091429557222,xy=0.03364982012583333,y2=0.008275857534870904 a=cat,b=dog,i=1258,x=0.46812609791627513,y=0.3955421850389915,x2=0.21914204355031802,xy=0.18516361964358036,y2=0.1564536201454198 a=cat,b=hat,i=1259,x=0.2780875029277935,y=0.5077895538992379,x2=0.07733265928461555,xy=0.14120992905665725,y2=0.257850231049187 a=wye,b=hat,i=1260,x=0.19557419507347884,y=0.43905957261630313,x2=0.03824926577863916,xy=0.08586872250373911,y2=0.19277330830601075 a=pan,b=hat,i=1261,x=0.5980791709422237,y=0.8821131444143128,x2=0.3576986947149377,xy=0.5275734980885503,y2=0.7781235995485062 a=pan,b=cat,i=1262,x=0.08817645032241295,y=0.500279859952405,x2=0.007775086391460958,xy=0.04411290221839694,y2=0.2502799382739979 a=hat,b=dog,i=1263,x=0.24299696523672476,y=0.030242580788100826,x2=0.05904752511425802,xy=0.007348855352434977,y2=0.0009146136927248051 a=hat,b=cat,i=1264,x=0.5295954768581507,y=0.3309314760872929,x2=0.280471369108612,xy=0.17525981288582157,y2=0.10951564186531451 a=cat,b=dog,i=1265,x=0.905752507806013,y=0.7191510596061227,x2=0.8203876053968817,xy=0.6513728757295971,y2=0.517178246532609 a=hat,b=hat,i=1266,x=0.9334075361797493,y=0.14210105344366453,x2=0.8712496285971499,xy=0.13263819418339778,y2=0.020192709389799203 a=cat,b=hat,i=1267,x=0.6914483245290053,y=0.4504589772986569,x2=0.4781007854939686,xy=0.31146910512220555,y2=0.2029132902289519 a=pan,b=pan,i=1268,x=0.18194896813725736,y=0.630957364942069,x2=0.0331054270062127,xy=0.11480204148981238,y2=0.39810719637463926 a=wye,b=dog,i=1269,x=0.5003101503907067,y=0.5897199432774787,x2=0.25031024658397155,xy=0.2950428735095544,y2=0.34776961149919267 a=wye,b=hat,i=1270,x=0.6034315448665395,y=0.13402176597457927,x2=0.36412962934001847,xy=0.08087296128778218,y2=0.01796183375494489 a=dog,b=hat,i=1271,x=0.5935499818449671,y=0.0008044408327545494,x2=0.3523015809481608,xy=0.000477475841676813,y2=6.471250534028328e-07 a=wye,b=cat,i=1272,x=0.4644744356299617,y=0.7622091936894339,x2=0.21573650135377145,xy=0.354026685070868,y2=0.5809628549446969 a=hat,b=hat,i=1273,x=0.71111248882706,y=0.046093470613435605,x2=0.5056809717658156,xy=0.03277764260659714,y2=0.0021246080331916517 a=pan,b=dog,i=1274,x=0.08437746758614917,y=0.9602158367689005,x2=0.007119557036251654,xy=0.081020580642675,y2=0.9220144531817999 a=wye,b=pan,i=1275,x=0.09442311424637628,y=0.35535974402164017,x2=0.008915724503984227,xy=0.03355417370831836,y2=0.12628054767112562 a=pan,b=wye,i=1276,x=0.6348957100323941,y=0.20224852524666714,x2=0.40309256261753784,xy=0.12840672103948733,y2=0.040904465964451756 a=wye,b=wye,i=1277,x=0.9452313996763632,y=0.35383848056213607,x2=0.8934623989341366,xy=0.3344592422411055,y2=0.12520167032652116 a=cat,b=pan,i=1278,x=0.7577531781653619,y=0.9304075630050439,x2=0.5741898790197068,xy=0.7050192878561612,y2=0.8656582332969848 a=hat,b=cat,i=1279,x=0.6692001711965577,y=0.5576306640146016,x2=0.44782886912950215,xy=0.37316653582302156,y2=0.3109519574493655 a=pan,b=pan,i=1280,x=0.4594940683388816,y=0.5000196255843276,x2=0.21113479883861683,xy=0.22975605200902702,y2=0.2500196259694911 a=pan,b=wye,i=1281,x=0.27552198385915716,y=0.9583152358503305,x2=0.07591236358968566,xy=0.26403691494393916,y2=0.9183680912628746 a=cat,b=dog,i=1282,x=0.18698696789643865,y=0.33464578850893034,x2=0.03496412616310378,xy=0.06257440131259775,y2=0.11198780376676373 a=dog,b=cat,i=1283,x=0.45712467259773504,y=0.09031131053359154,x2=0.20896296629758646,xy=0.04128352825954041,y2=0.008156132810294802 a=dog,b=pan,i=1284,x=0.7917634082084332,y=0.7884060770985923,x2=0.6268892945778339,xy=0.6242310826558222,y2=0.6215841424059916 a=pan,b=pan,i=1285,x=0.3632495793130629,y=0.39832910764967155,x2=0.13195025687111717,xy=0.14469288078189094,y2=0.15866607800098362 a=wye,b=pan,i=1286,x=0.05045398808922252,y=0.9004970918613318,x2=0.002545604914107408,xy=0.045433669547151154,y2=0.8108950124507157 a=dog,b=dog,i=1287,x=0.46537064998839495,y=0.5020931377860767,x2=0.2165698418706212,xy=0.23365940988621925,y2=0.25209751901186817 a=cat,b=hat,i=1288,x=0.19401567281316467,y=0.2958610817180076,x2=0.03764208129714497,xy=0.057401686828749944,y2=0.08753377967534959 a=hat,b=wye,i=1289,x=0.8065531976690105,y=0.661007460051391,x2=0.6505280606701058,xy=0.5331376805875201,y2=0.43693086224359123 a=wye,b=cat,i=1290,x=0.4167345553632029,y=0.9638585599173016,x2=0.17366768963376644,xy=0.40167316840015377,y2=0.9290233235258545 a=wye,b=wye,i=1291,x=0.5890993308702704,y=0.9531628070355647,x2=0.34703802163180036,xy=0.5615075718350798,y2=0.9085193367159171 a=wye,b=wye,i=1292,x=0.9697370827388256,y=0.7184432159679051,x2=0.9403900096388079,xy=0.6967010283662163,y2=0.5161606545703059 a=pan,b=pan,i=1293,x=0.41000146000264226,y=0.5100693031049607,x2=0.16810119720429825,xy=0.20912915897556414,y2=0.26017069396998027 a=pan,b=hat,i=1294,x=0.3062135719920578,y=0.5674927907821685,x2=0.09376675167213516,xy=0.17377399454514936,y2=0.3220480675897341 a=dog,b=dog,i=1295,x=0.06474535374956214,y=0.5041596111532878,x2=0.00419196083215594,xy=0.03264199237036131,y2=0.25417691351823435 a=pan,b=dog,i=1296,x=0.9174495038575284,y=0.6776095740778809,x2=0.8417135921284251,xy=0.6216725675468631,y2=0.4591547348820072 a=wye,b=cat,i=1297,x=0.05331799688336658,y=0.5229200185876776,x2=0.0028428087916546885,xy=0.027881047921307786,y2=0.27344534583973706 a=cat,b=pan,i=1298,x=0.3160068626914928,y=0.5890542594098647,x2=0.09986033726811999,xy=0.1861451884711721,y2=0.3469849205289041 a=hat,b=hat,i=1299,x=0.2072848391062655,y=0.12814541657277967,x2=0.04296700452331037,xy=0.026562602056494,y2=0.016421247788611235 a=cat,b=pan,i=1300,x=0.609674840109402,y=0.5909992841362198,x2=0.37170341066242485,xy=0.3603173940605209,y2=0.3492801538495243 a=dog,b=dog,i=1301,x=0.5796288173573501,y=0.4257016817868029,x2=0.3359695659110803,xy=0.24674896236111954,y2=0.18122192187611239 a=dog,b=dog,i=1302,x=0.9118817054703917,y=0.846988303319469,x2=0.8315282447715903,xy=0.7723531385444308,y2=0.7173891859599927 a=pan,b=wye,i=1303,x=0.4169703117166762,y=0.7994962779047577,x2=0.17386424085310212,xy=0.3333662122142692,y2=0.6391942983835617 a=cat,b=hat,i=1304,x=0.13852682880846345,y=0.7530205145981622,x2=0.01918968229972934,xy=0.10431354391500067,y2=0.567039895405681 a=cat,b=dog,i=1305,x=0.3885342626087418,y=0.20925757370208675,x2=0.15095887322091875,xy=0.08130373709363471,y2=0.043788732151684266 a=pan,b=cat,i=1306,x=0.8557416705878303,y=0.8734297213645742,x2=0.7322938067804508,xy=0.7474302089015838,y2=0.7628794781629977 a=pan,b=wye,i=1307,x=0.10716129465626512,y=0.5272411144445465,x2=0.011483543072406874,xy=0.05649984041988964,y2=0.27798319276072736 a=pan,b=cat,i=1308,x=0.08556539709217525,y=0.2440579939012173,x2=0.007321437179541633,xy=0.020882919161677345,y2=0.05956430438708662 a=wye,b=hat,i=1309,x=0.4349772526179212,y=0.7471972254649456,x2=0.18920521029503484,xy=0.3250137962964755,y2=0.5583036937425128 a=pan,b=hat,i=1310,x=0.9759801648745264,y=0.14253420620232893,x2=0.9525372822285078,xy=0.13911055806960873,y2=0.02031599993772802 a=dog,b=dog,i=1311,x=0.360620454838383,y=0.454502894802174,x2=0.13004711244784223,xy=0.16390304064892172,y2=0.20657288138355603 a=cat,b=cat,i=1312,x=0.6370834204192627,y=0.7331696157351928,x2=0.405875284573107,xy=0.4670902065400531,y2=0.5375376854372903 a=wye,b=hat,i=1313,x=0.10499935974120844,y=0.5651319889883529,x2=0.011024865546063705,xy=0.059338497013052716,y2=0.31937416497793186 a=wye,b=hat,i=1314,x=0.9298742811904012,y=0.5845001596194702,x2=0.8646661788193652,xy=0.5435116657818296,y2=0.34164043659518617 a=wye,b=dog,i=1315,x=0.12051945367449224,y=0.9530771885366903,x2=0.01452493871399808,xy=0.11486434207206296,y2=0.908356127309002 a=wye,b=pan,i=1316,x=0.2727618459553073,y=0.8629441664612792,x2=0.07439902460894678,xy=0.2353782438003425,y2=0.744672634429552 a=pan,b=dog,i=1317,x=0.36438644148867383,y=0.7704211206115722,x2=0.13277747874077872,xy=0.28073101058736716,y2=0.5935487030843907 a=hat,b=hat,i=1318,x=0.8568068178360483,y=0.7767586117883688,x2=0.7341179230903352,xy=0.6655320743931387,y2=0.6033539409873938 a=dog,b=pan,i=1319,x=0.8922495916804474,y=0.012941737130864772,x2=0.796109333853925,xy=0.011547259670649778,y2=0.00016748855996440395 a=pan,b=pan,i=1320,x=0.8626651570404971,y=0.406411849427885,x2=0.7441911731717055,xy=0.3505973419098253,y2=0.16517059135539386 a=cat,b=wye,i=1321,x=0.34747795978064333,y=0.5149968839028906,x2=0.12074093253331838,xy=0.17895006651196524,y2=0.26522179042968735 a=dog,b=wye,i=1322,x=0.23830442449475375,y=0.7271069301204073,x2=0.05678899873377579,xy=0.17327279852849078,y2=0.5286844878291228 a=cat,b=pan,i=1323,x=0.09287445972986075,y=0.8917392928686774,x2=0.008625665270113526,xy=0.08281980504506647,y2=0.7951989664459288 a=hat,b=cat,i=1324,x=0.35081527077194585,y=0.7536940586117985,x2=0.12307135420679369,xy=0.2644073852511049,y2=0.5680547339867251 a=wye,b=hat,i=1325,x=0.10192472917376827,y=0.9404881667594776,x2=0.010388650417146008,xy=0.09585900168809355,y2=0.8845179918146029 a=wye,b=wye,i=1326,x=0.6110597678648207,y=0.35617421567299123,x2=0.3733940399030086,xy=0.2176437335485726,y2=0.12686007191027046 a=pan,b=wye,i=1327,x=0.31914560213095555,y=0.8636634576979166,x2=0.10185391535953019,xy=0.2756343942455047,y2=0.7459145681627211 a=pan,b=cat,i=1328,x=0.24438961193058029,y=0.7973815656193725,x2=0.059726282419579634,xy=0.19487177138231698,y2=0.6358173611896016 a=pan,b=hat,i=1329,x=0.1036012027987635,y=0.5550550565830947,x2=0.010733209221350523,xy=0.05750437148154435,y2=0.3080861158384625 a=dog,b=cat,i=1330,x=0.32926870072325665,y=0.8466435075064959,x2=0.10841787727598155,xy=0.2787732076924447,y2=0.7168052288029019 a=dog,b=wye,i=1331,x=0.9802656048578349,y=0.9431768957041479,x2=0.9609206560672968,xy=0.9245638701553616,y2=0.889582656590113 a=dog,b=hat,i=1332,x=0.8962952905759901,y=0.31641509451119587,x2=0.8033452479086985,xy=0.2836013590775417,y2=0.10011851203452901 a=hat,b=wye,i=1333,x=0.032026645297779543,y=0.09784931062734303,x2=0.0010257060090297844,xy=0.003133785164094166,y2=0.009574487590246266 a=cat,b=wye,i=1334,x=0.8754005993404697,y=0.41678957651506,x2=0.7663262093256534,xy=0.36485784508014407,y2=0.17371355109160305 a=cat,b=dog,i=1335,x=0.7036518195894103,y=0.2769453583768763,x2=0.495125883211488,xy=0.1948731053487303,y2=0.07669873152649644 a=wye,b=dog,i=1336,x=0.5165243951313276,y=0.42434006291526427,x2=0.2667974507657839,xy=0.2191819943272964,y2=0.18006448899493044 a=cat,b=hat,i=1337,x=0.13033411237488224,y=0.28111539223703563,x2=0.01698698084854843,xy=0.0366389251221309,y2=0.07902586375258239 a=pan,b=pan,i=1338,x=0.28490550758539046,y=0.7306416069236189,x2=0.08117114825248899,xy=0.208163817883579,y2=0.5338371577679281 a=cat,b=hat,i=1339,x=0.5694077497715048,y=0.9962316825250905,x2=0.3242251854998486,xy=0.5672620405976919,y2=0.9924775652667728 a=dog,b=hat,i=1340,x=0.15590394809440555,y=0.5898433860158557,x2=0.0243060410314231,xy=0.09195891263724439,y2=0.3479152200266498 a=dog,b=pan,i=1341,x=0.6003950461936786,y=0.8198112574477217,x2=0.3604742114939094,xy=0.4922106177854225,y2=0.6720904978380146 a=pan,b=wye,i=1342,x=0.36315346596462383,y=0.7493664806721014,x2=0.1318804398421192,xy=0.2721350347337859,y2=0.561550122354891 a=cat,b=wye,i=1343,x=0.6421101334356485,y=0.8328811865952982,x2=0.41230542346074633,xy=0.5348014498607482,y2=0.693691070984392 a=hat,b=pan,i=1344,x=0.7661127041531015,y=0.6894482017443371,x2=0.5869286754647777,xy=0.5281950262118471,y2=0.4753388228885001 a=pan,b=pan,i=1345,x=0.4759604984469762,y=0.8616528616190144,x2=0.22653839608189402,xy=0.4101127255044495,y2=0.7424456539362364 a=dog,b=cat,i=1346,x=0.22188183101325643,y=0.915064692367077,x2=0.04923154693379528,xy=0.20303622943798924,y2=0.8373433912168533 a=dog,b=dog,i=1347,x=0.9208912790263596,y=0.49420571014645875,x2=0.8480407477868045,xy=0.45510972851890275,y2=0.2442392839413656 a=dog,b=wye,i=1348,x=0.8467666552722811,y=0.942258648149609,x2=0.7170137684810062,xy=0.7978732038950256,y2=0.8878513600127287 a=hat,b=hat,i=1349,x=0.09019580643306802,y=0.5668952833739302,x2=0.008135283498111474,xy=0.051131577247014254,y2=0.3213702623116087 a=dog,b=hat,i=1350,x=0.6550191801524471,y=0.32506206782235547,x2=0.42905012636758394,xy=0.21292188916365842,y2=0.10566534793694562 a=wye,b=cat,i=1351,x=0.8690839589227304,y=0.1824626004555484,x2=0.7553069276568061,xy=0.1585753191592444,y2=0.03329260056500109 a=pan,b=cat,i=1352,x=0.9314074859896871,y=0.13373488380373733,x2=0.8675199049576292,xy=0.1245616719127619,y2=0.017885019145999125 a=pan,b=wye,i=1353,x=0.5885458895544678,y=0.6924498690301565,x2=0.34638626411145984,xy=0.40753852414022823,y2=0.4794868211198809 a=hat,b=dog,i=1354,x=0.7069862790399287,y=0.4646549024385439,x2=0.49982959875072397,xy=0.32850464051268724,y2=0.21590417836017275 a=pan,b=hat,i=1355,x=0.7862895251624157,y=0.2614772772981365,x2=0.6182512173801371,xy=0.20559684420751306,y2=0.06837036654324659 a=hat,b=hat,i=1356,x=0.8738403717900255,y=0.22150598992111536,x2=0.76359699537013,xy=0.1935608765863851,y2=0.04906490357093326 a=dog,b=wye,i=1357,x=0.43466568972781705,y=0.4222392477016015,x2=0.18893426182655892,xy=0.1835329138323712,y2=0.17828598229961437 a=hat,b=dog,i=1358,x=0.711748884597892,y=0.25645940614412344,x2=0.5065864747263433,xy=0.18253469626771762,y2=0.06577142699979646 a=cat,b=cat,i=1359,x=0.6180047192178522,y=0.06044898556350575,x2=0.3819298329755363,xy=0.03735775835017837,y2=0.003654079855656927 a=hat,b=hat,i=1360,x=0.2708340339490777,y=0.23161818324706895,x2=0.07335107394513016,xy=0.06273008690476037,y2=0.053646982810672816 a=cat,b=wye,i=1361,x=0.4659498048108057,y=0.11016246737554947,x2=0.21710922060322796,xy=0.05133018017111403,y2=0.012135769218269001 a=wye,b=dog,i=1362,x=0.7531416742891262,y=0.34873353501849025,x2=0.5672223815510282,xy=0.26264575844459137,y2=0.12161507844649257 a=cat,b=cat,i=1363,x=0.864278486066686,y=0.3291451686100988,x2=0.7469773014777228,xy=0.28447308802250026,y2=0.10833654201937036 a=dog,b=pan,i=1364,x=0.28375807360599525,y=0.415196967779604,x2=0.08051864433658543,xy=0.11781549174419091,y2=0.17238852205337754 a=cat,b=pan,i=1365,x=0.9519640755452027,y=0.5724428475007298,x2=0.9062356011286323,xy=0.5449450261234957,y2=0.32769081365474384 a=wye,b=cat,i=1366,x=0.8729459872971888,y=0.30097510878623235,x2=0.7620346967382636,xy=0.26273501349127637,y2=0.09058601610888439 a=dog,b=cat,i=1367,x=0.5288238699834243,y=0.906229923389107,x2=0.2796546854642457,xy=0.47923601518140974,y2=0.8212526740458268 a=cat,b=hat,i=1368,x=0.8677752360596517,y=0.5057105656441789,x2=0.7530338603183842,xy=0.43884310547973737,y2=0.25574317620415543 a=pan,b=pan,i=1369,x=0.13928618456519037,y=0.4981223118846513,x2=0.01940064121072828,xy=0.06938155626920486,y2=0.2481258375973098 a=hat,b=pan,i=1370,x=0.14926005556219812,y=0.6825801026593413,x2=0.022278564186430472,xy=0.10188194404858418,y2=0.46591559654643694 a=cat,b=pan,i=1371,x=0.8874762541378755,y=0.430727170868458,x2=0.7876141016585949,xy=0.38226013615774374,y2=0.18552589572434583 a=pan,b=cat,i=1372,x=0.055481587623166795,y=0.020130916319327286,x2=0.003078206565187135,xy=0.0011168951977053952,y2=0.0004052537918557576 a=hat,b=wye,i=1373,x=0.01773252916422907,y=0.7038538617279082,x2=0.00031444259056023457,xy=0.012481109130445388,y2=0.49541025866928934 a=cat,b=pan,i=1374,x=0.5772467643960123,y=0.08979702996792505,x2=0.3332138270056653,xy=0.05183504500135649,y2=0.00806350659106043 a=wye,b=dog,i=1375,x=0.7186819696362957,y=0.9750853169337808,x2=0.5165037734803055,xy=0.7007762361374013,y2=0.9507913752998517 a=pan,b=pan,i=1376,x=0.012127435402209952,y=0.737649467492079,x2=0.00014707468943477524,xy=0.008945796266484759,y2=0.5441267368913478 a=pan,b=hat,i=1377,x=0.1176493243314749,y=0.03953239943871212,x2=0.013841363515652573,xy=0.004650960083166458,y2=0.001562810605381886 a=dog,b=wye,i=1378,x=0.8404549058183635,y=0.5233749071680257,x2=0.7063644487141542,xy=0.43987300831159776,y2=0.27392129345313954 a=wye,b=hat,i=1379,x=0.6830083895212168,y=0.1943755073990716,x2=0.4665004601563662,xy=0.13276010227100926,y2=0.037781837876646546 a=dog,b=wye,i=1380,x=0.036699727556552375,y=0.22841271630687543,x2=0.0013468700027251697,xy=0.008382684458914417,y2=0.052172368970685154 a=cat,b=wye,i=1381,x=0.24980580942734343,y=0.3359096035218332,x2=0.06240294242365022,xy=0.08391217040218955,y2=0.11283526173819516 a=cat,b=pan,i=1382,x=0.12838778331057865,y=0.6008614102707441,x2=0.0164834229034041,xy=0.07714326454152899,y2=0.3610344343525475 a=hat,b=hat,i=1383,x=0.2916895193626061,y=0.03032448567581081,x2=0.08508277570598817,xy=0.008845334651695489,y2=0.0009195744315024549 a=cat,b=hat,i=1384,x=0.9402388854624985,y=0.4879444803737807,x2=0.8840491617357613,xy=0.4587843743942215,y2=0.23808981592723885 a=dog,b=cat,i=1385,x=0.94601401053633,y=0.16234319195761016,x2=0.8949425081310316,xy=0.15357893410708806,y2=0.02635531197498546 a=pan,b=pan,i=1386,x=0.5043323260351605,y=0.5370015925014423,x2=0.2543510950840355,xy=0.2708272622308378,y2=0.28837071034908507 a=pan,b=cat,i=1387,x=0.6028547009079508,y=0.8671091734910473,x2=0.3634337904068148,xy=0.5227408414394857,y2=0.7518783187523272 a=hat,b=hat,i=1388,x=0.5090633985401595,y=0.11630855862341449,x2=0.2591455437332572,xy=0.059208430132142754,y2=0.013527680809056246 a=wye,b=hat,i=1389,x=0.871750098695372,y=0.07013210455112173,x2=0.7599482345753908,xy=0.06113766906415452,y2=0.00491851208876947 a=wye,b=wye,i=1390,x=0.1869280613978892,y=0.12584623841447395,x2=0.03494210013797303,xy=0.02352419338103419,y2=0.01583727572307262 a=wye,b=pan,i=1391,x=0.21402115392833831,y=0.9800494903428287,x2=0.045805054328817485,xy=0.20975132283005207,y2=0.9604970035212383 a=wye,b=dog,i=1392,x=0.551059079038248,y=0.10685292449326611,x2=0.3036661085904821,xy=0.05888227416380268,y2=0.011417547472763629 a=cat,b=wye,i=1393,x=0.4678244968269991,y=0.7249906295286983,x2=0.2188597598314349,xy=0.33916837646355263,y2=0.5256114129044183 a=cat,b=cat,i=1394,x=0.7167722114927373,y=0.28712631644066244,x2=0.5137624031681893,xy=0.20580416481293712,y2=0.08244152159278342 a=pan,b=wye,i=1395,x=0.2762204757261446,y=0.011486475128392848,x2=0.07629775121037764,xy=0.0031727996243812004,y2=0.0001319391108751875 a=hat,b=cat,i=1396,x=0.5819182194871779,y=0.5886751143305508,x2=0.3386288141711274,xy=0.342560774387645,y2=0.346538390232087 a=hat,b=pan,i=1397,x=0.19288150561327133,y=0.11249178081954025,x2=0.03720327520764242,xy=0.02169758405359104,y2=0.012654400751951485 a=cat,b=cat,i=1398,x=0.24399120748834546,y=0.41029668051499657,x2=0.059531709331620844,xy=0.10010878250731392,y2=0.16834336604162517 a=cat,b=cat,i=1399,x=0.17220187835057998,y=0.6494609231347691,x2=0.029653486907467948,xy=0.11183839087910889,y2=0.42179949067906647 a=pan,b=cat,i=1400,x=0.17220507948844355,y=0.9939455961997427,x2=0.029654589401621162,xy=0.1711624804007651,y2=0.9879278482048619 a=dog,b=wye,i=1401,x=0.9721778010832514,y=0.13451363018016638,x2=0.9451296769190658,xy=0.13077116520427984,y2=0.018093916704246565 a=wye,b=hat,i=1402,x=0.5658764529186242,y=0.09047444065190158,x2=0.3202161599677639,xy=0.05119735555589464,y2=0.008185624411274461 a=pan,b=dog,i=1403,x=0.3906650291185706,y=0.8340390004173398,x2=0.1526191649762136,xy=0.3258298703840636,y2=0.6956210542171554 a=dog,b=dog,i=1404,x=0.4934751758900321,y=0.29889026279686437,x2=0.2435177492196981,xy=0.14749492500550057,y2=0.08933538919477864 a=cat,b=pan,i=1405,x=0.9045117334972449,y=0.9676855030380848,x2=0.818141476034191,xy=0.8752828918331315,y2=0.9364152327900711 a=hat,b=pan,i=1406,x=0.1439073258172452,y=0.6346571251787796,x2=0.020709318423870766,xy=0.0913318096953388,y2=0.4027896665401931 a=dog,b=pan,i=1407,x=0.8469730435544695,y=0.41014970787877403,x2=0.7173633365079212,xy=0.3473857463950618,y2=0.16822278287304368 a=dog,b=pan,i=1408,x=0.8688722371484102,y=0.11846976397020581,x2=0.7549389644872833,xy=0.10293508885523685,y2=0.014035084975156275 a=dog,b=cat,i=1409,x=0.9202028068692502,y=0.6295966148394991,x2=0.8467732057700466,xy=0.5793565721706853,y2=0.39639189741735664 a=cat,b=dog,i=1410,x=0.6843494473937148,y=0.01567965052287723,x2=0.4683341661480829,xy=0.010730360170657606,y2=0.00024585144051956424 a=wye,b=dog,i=1411,x=0.6734529541868731,y=0.1841112509992,x2=0.4535388815030266,xy=0.12399026588445214,y2=0.03389695274449042 a=cat,b=wye,i=1412,x=0.9396933186751201,y=0.086711644119988,x2=0.8830235331626608,xy=0.08148235263088748,y2=0.0075189092259914485 a=dog,b=hat,i=1413,x=0.2844730851848265,y=0.5095482304423925,x2=0.08092493619457355,xy=0.14495275716441633,y2=0.25963939914697354 a=wye,b=hat,i=1414,x=0.4743476649105962,y=0.5142851449565702,x2=0.22500570720613527,xy=0.24394995760835655,y2=0.2644892103230004 a=wye,b=hat,i=1415,x=0.16895553027547872,y=0.46153937019693836,x2=0.028545971210668205,xy=0.07797962903463419,y2=0.21301859024178652 a=pan,b=dog,i=1416,x=0.32582961061066795,y=0.03585131824293797,x2=0.1061649351506995,xy=0.011681421062975615,y2=0.0012853170197564168 a=hat,b=hat,i=1417,x=0.3026418357254389,y=0.004614752454422111,x2=0.09159208073126354,xy=0.0013966171542247824,y2=2.1295940215594896e-05 a=pan,b=pan,i=1418,x=0.42304084167773315,y=0.12392812416721377,x2=0.17896355372740488,xy=0.052426657955240735,y2=0.015358179959604354 a=hat,b=hat,i=1419,x=0.8459599975145355,y=0.10566339134758163,x2=0.715648317394793,xy=0.08938700228177755,y2=0.011164752271072187 a=wye,b=wye,i=1420,x=0.9310295079548001,y=0.17466407501923698,x2=0.8668159446825572,xy=0.1626174078225405,y2=0.03050753910232564 a=dog,b=cat,i=1421,x=0.502209665448799,y=0.9885386088080114,x2=0.2522145480701946,xy=0.49645364401269254,y2=0.9772085811040785 a=dog,b=cat,i=1422,x=0.7729461330006621,y=0.39309585669646974,x2=0.5974457245206771,xy=0.3038419223321187,y2=0.15452435255193148 a=pan,b=hat,i=1423,x=0.6199712813809483,y=0.26981177277874735,x2=0.38436438973713494,xy=0.16727555050130524,y2=0.07279839273001039 a=cat,b=hat,i=1424,x=0.20555135841236738,y=0.869583767645243,x2=0.042251360945169514,xy=0.17874412469282414,y2=0.7561759289520961 a=hat,b=cat,i=1425,x=0.9130691761644157,y=0.14367810795564318,x2=0.8336953204615649,xy=0.1311880516639211,y2=0.020643398705713453 a=dog,b=pan,i=1426,x=0.23123876984973346,y=0.7920929241051321,x2=0.053471368681618,xy=0.18316259337674903,y2=0.6274112004174186 a=hat,b=cat,i=1427,x=0.5608888924642393,y=0.305055776481581,x2=0.314596349689761,xy=0.17110239661057253,y2=0.09305902676478031 a=cat,b=wye,i=1428,x=0.9095930130183074,y=0.4767794622095476,x2=0.8273594493317228,xy=0.43367526757643066,y2=0.22731865558482542 a=wye,b=wye,i=1429,x=0.10863587137597741,y=0.9286459149556059,x2=0.011801752549617909,xy=0.10088425817094406,y2=0.8623832353637344 a=hat,b=wye,i=1430,x=0.8622224940251898,y=0.5334741714008802,x2=0.7434276292030184,xy=0.4599734305632885,y2=0.2845946915518557 a=hat,b=wye,i=1431,x=0.09742334198191993,y=0.9810984813848357,x2=0.009491307562926123,xy=0.09558189286989716,y2=0.9625542301756308 a=cat,b=hat,i=1432,x=0.2601610612236708,y=0.36480352975322794,x2=0.06768377777702657,xy=0.09490767343874074,y2=0.13308161532041426 a=dog,b=cat,i=1433,x=0.8265198575453196,y=0.9324939966679968,x2=0.6831350749167355,xy=0.7707248052878986,y2=0.8695450538218541 a=wye,b=wye,i=1434,x=0.6946765335260483,y=0.20200928081444647,x2=0.4825754862317669,xy=0.14033110693626974,y2=0.04080774953516989 a=cat,b=cat,i=1435,x=0.8255836799033486,y=0.24916816524689422,x2=0.6815884125227547,xy=0.2057091707792966,y2=0.06208477457250359 a=wye,b=hat,i=1436,x=0.2174053265016268,y=0.4824524435442561,x2=0.04726507599127895,xy=0.10488773101024666,y2=0.23276036028182362 a=pan,b=dog,i=1437,x=0.771373898754349,y=0.04186581312981008,x2=0.5950176916794847,xy=0.032294195498462616,y2=0.0017527463090201783 a=hat,b=pan,i=1438,x=0.19182670076601294,y=0.45537709476990573,x2=0.036797483126773466,xy=0.08735348569412302,y2=0.2073682984410797 a=hat,b=wye,i=1439,x=0.714222708220045,y=0.7453977101018939,x2=0.5101140769371755,xy=0.5323799712099947,y2=0.5556177462251471 a=cat,b=cat,i=1440,x=0.8322586744033202,y=0.10313297668924326,x2=0.6926545011195718,xy=0.08583331446665812,y2=0.010636410880783993 a=cat,b=dog,i=1441,x=0.9472799723818048,y=0.426334179527565,x2=0.8973393460756729,xy=0.4038578298082912,y2=0.18176083263344206 a=hat,b=wye,i=1442,x=0.11366628807823498,y=0.8539618874961815,x2=0.012920025045484304,xy=0.09706667791197425,y2=0.729250905296041 a=cat,b=pan,i=1443,x=0.4448661611242415,y=0.7520612280086222,x2=0.1979059013134196,xy=0.3345665914345786,y2=0.5655960906738368 a=pan,b=wye,i=1444,x=0.9435596776538897,y=0.02257313941287642,x2=0.8903048652943123,xy=0.021299104148049988,y2=0.0005095466229531548 a=cat,b=hat,i=1445,x=0.859783392830569,y=0.8780331181941216,x2=0.7392274825872446,xy=0.7549182933785459,y2=0.7709421566456922 a=cat,b=hat,i=1446,x=0.6519916814535887,y=0.7185339592232461,x2=0.42509315268467784,xy=0.46847816425546857,y2=0.5162910505570335 a=cat,b=dog,i=1447,x=0.10377307114420198,y=0.21704859436178736,x2=0.010768850294699605,xy=0.022523799224454796,y2=0.04711009231442771 a=wye,b=pan,i=1448,x=0.9273173576733522,y=0.9318729218015536,x2=0.8599174818422879,xy=0.8641419355323631,y2=0.8683871423869644 a=hat,b=pan,i=1449,x=0.6375012429444301,y=0.5310388147952827,x2=0.4064078347556933,xy=0.3385379044837297,y2=0.2820022228191786 a=hat,b=cat,i=1450,x=0.6153045495441312,y=0.3948073863559951,x2=0.37859968868970617,xy=0.24292678101847132,y2=0.155872872321252 a=cat,b=pan,i=1451,x=0.104775482636281,y=0.047012890653388206,x2=0.010977901761665621,xy=0.004925798308335454,y2=0.002210211887587436 a=cat,b=pan,i=1452,x=0.704306898081268,y=0.3590456724638449,x2=0.49604820668485766,xy=0.25287834384251356,y2=0.1289137949150146 a=pan,b=pan,i=1453,x=0.4850397789341774,y=0.27946084955758654,x2=0.23526358714851567,xy=0.13554962869016918,y2=0.07809836643544801 a=hat,b=cat,i=1454,x=0.7139052975695583,y=0.9627736757283823,x2=0.5096607738978797,xy=0.6873292274630083,y2=0.9269331506755403 a=wye,b=wye,i=1455,x=0.007982364048064072,y=0.9976141705705273,x2=6.371813579582584e-05,xy=0.007963319489001437,y2=0.9952340333231211 a=wye,b=cat,i=1456,x=0.7449673176112723,y=0.37483093904443254,x2=0.5549763043089343,xy=0.2792367992176452,y2=0.1404982328649311 a=hat,b=dog,i=1457,x=0.9599744936672627,y=0.9843133756536661,x2=0.9215510284917174,xy=0.9449157344030422,y2=0.9688728214907151 a=pan,b=dog,i=1458,x=0.8233716461878181,y=0.891969123189684,x2=0.6779408677460376,xy=0.7344220853093949,y2=0.7956089167237738 a=cat,b=dog,i=1459,x=0.7308968293550443,y=0.037240833426733455,x2=0.5342101751612568,xy=0.027219207074138833,y2=0.001386879674317708 a=pan,b=pan,i=1460,x=0.07085408330425413,y=0.1755347772797169,x2=0.005020301120886184,xy=0.012437355732170757,y2=0.030812458034639813 a=wye,b=hat,i=1461,x=0.0006779422696939763,y=0.3334548999208484,x2=4.596057210378201e-07,xy=0.0002260631716929177,y2=0.11119217028122304 a=cat,b=wye,i=1462,x=0.9686895422147692,y=0.7895826259809053,x2=0.9383594291962591,xy=0.7648604325021785,y2=0.6234407232509023 a=dog,b=hat,i=1463,x=0.6659257291779056,y=0.9214760431929409,x2=0.4434570767811253,xy=0.6136346059832304,y2=0.8491180981785186 a=wye,b=cat,i=1464,x=0.2281620156044537,y=0.3336094097972423,x2=0.05205790536468698,xy=0.07611699536395099,y2=0.11129523830526435 a=wye,b=cat,i=1465,x=0.3611555760881471,y=0.8092916112370757,x2=0.1304333501395614,xy=0.29228017807963086,y2=0.6549529120187021 a=wye,b=dog,i=1466,x=0.3489899877303331,y=0.2809129395093045,x2=0.12179401153601803,xy=0.09803580331264398,y2=0.07891207958375818 a=pan,b=pan,i=1467,x=0.11346480630238476,y=0.5360131594723014,x2=0.012874262269237692,xy=0.060818629315053954,y2=0.28731010712747884 a=pan,b=cat,i=1468,x=0.5775881715751248,y=0.2280737250945013,x2=0.3336080959434958,xy=0.13173268586166065,y2=0.05201762407848215 a=hat,b=pan,i=1469,x=0.3062476674620713,y=0.28706130041795064,x2=0.09378763382595942,xy=0.08791185367162631,y2=0.0824041901976449 a=dog,b=dog,i=1470,x=0.030478198313291682,y=0.5848530546223129,x2=0.000928920572424336,xy=0.017825267382913262,y2=0.34205309550105006 a=cat,b=pan,i=1471,x=0.44505369311904597,y=0.9523208692427725,x2=0.19807278975890194,xy=0.42383391989083596,y2=0.9069150379953098 a=cat,b=pan,i=1472,x=0.20291236499826126,y=0.04960947407654792,x2=0.0411734278691876,xy=0.010066375711192272,y2=0.00246109991815168 a=dog,b=pan,i=1473,x=0.09949313982898744,y=0.7183672544226375,x2=0.009898884873030447,xy=0.07147261369283726,y2=0.5160515122267184 a=cat,b=hat,i=1474,x=0.352809068548661,y=0.024962652522327655,x2=0.12447423885017378,xy=0.008807050184906304,y2=0.0006231340209504713 a=wye,b=cat,i=1475,x=0.6608084684008684,y=0.8598299398147315,x2=0.43666783191030145,xy=0.5681829056141836,y2=0.7393075254018049 a=pan,b=hat,i=1476,x=0.5669052214370769,y=0.17926469808528966,x2=0.32138153009262116,xy=0.10162609336389188,y2=0.032135831979610056 a=pan,b=hat,i=1477,x=0.8099020676087838,y=0.8915148799264969,x2=0.655941359116983,xy=0.7220397445564665,y2=0.7947987811303562 a=dog,b=pan,i=1478,x=0.6296682139425525,y=0.6104249412189928,x2=0.39648205964960404,xy=0.3843651824833508,y2=0.3726186088622108 a=hat,b=dog,i=1479,x=0.04076624893321379,y=0.5327214484144159,x2=0.0016618870520847544,xy=0.02171705517812429,y2=0.2837921416007532 a=hat,b=cat,i=1480,x=0.509190032309779,y=0.14952434255595937,x2=0.25927448900363376,xy=0.07613630481716742,y2=0.02235752901679188 a=pan,b=cat,i=1481,x=0.31131749285840704,y=0.3884471378381704,x2=0.09691858135964432,xy=0.12093038905980327,y2=0.15089117889466658 a=wye,b=cat,i=1482,x=0.21416750317699285,y=0.1925486742632878,x2=0.04586771941706724,xy=0.04123766880700845,y2=0.03707499196054971 a=pan,b=hat,i=1483,x=0.41127580324322,y=0.6916409695224564,x2=0.1691477863333558,xy=0.28445519529626767,y2=0.4783672307219634 a=hat,b=wye,i=1484,x=0.5036290543263833,y=0.5124414036336514,x2=0.2536422243616871,xy=0.2580803795097003,y2=0.2625961921580269 a=dog,b=wye,i=1485,x=0.48067604837123523,y=0.25561201998460414,x2=0.23104946347778607,xy=0.12286657568238873,y2=0.06533750476060966 a=pan,b=pan,i=1486,x=0.5308171816038317,y=0.44140631297419275,x2=0.2817668802858353,xy=0.23430605499509985,y2=0.194839533133471 a=wye,b=wye,i=1487,x=0.4217420866304358,y=0.484250357788911,x2=0.177866387635394,xy=0.20422875634543042,y2=0.23449840901868832 a=pan,b=wye,i=1488,x=0.4464763932559691,y=0.06247195527210159,x2=0.19934116973485877,xy=0.027892253269536142,y2=0.0039027451955194613 a=hat,b=wye,i=1489,x=0.42274885425062425,y=0.07596963234716747,x2=0.17871659377021554,xy=0.03211607503260621,y2=0.005771385038963794 a=dog,b=cat,i=1490,x=0.692927713608303,y=0.24544000498853658,x2=0.48014881628643036,xy=0.17007218148471712,y2=0.06024079604877286 a=hat,b=hat,i=1491,x=0.6087531065526952,y=0.26160208208492797,x2=0.3705803447375571,xy=0.15925108014985306,y2=0.06843564935116939 a=cat,b=dog,i=1492,x=0.7254141100100487,y=0.8302926192061462,x2=0.5262256310016711,xy=0.6023059814093388,y2=0.6893858335082025 a=cat,b=hat,i=1493,x=0.5475753320134177,y=0.5217686968248798,x2=0.2998387442296046,xy=0.28570766739809184,y2=0.27224257298633336 a=dog,b=hat,i=1494,x=0.5260468562076355,y=0.2818852314330206,x2=0.2767252949259367,xy=0.14828483980670223,y2=0.07945928370004757 a=cat,b=pan,i=1495,x=0.5403536562906746,y=0.1281330591107771,x2=0.29198207386670044,xy=0.06923716698221753,y2=0.0164180808370859 a=hat,b=cat,i=1496,x=0.8633531871432814,y=0.446911367789502,x2=0.7453787257504618,xy=0.3858423537516298,y2=0.19972977065948355 a=cat,b=dog,i=1497,x=0.38131923662715583,y=0.8674734444664344,x2=0.14540436022191686,xy=0.3307843116382702,y2=0.75251017685446 a=hat,b=dog,i=1498,x=0.3261180226468561,y=0.7253611203309942,x2=0.10635296469509534,xy=0.23655333426725206,y2=0.5261487548878351 a=wye,b=dog,i=1499,x=0.6732522088500549,y=0.6621067180227186,x2=0.45326853672147793,xy=0.4457648104032557,y2=0.43838530605081577 a=wye,b=pan,i=1500,x=0.9808737380624147,y=0.5425302090855434,x2=0.9621132900205346,xy=0.5321536341975204,y2=0.29433902777040344 a=pan,b=pan,i=1501,x=0.5780096357980177,y=0.8550994240994678,x2=0.33409513907535704,xy=0.49425570669482805,y2=0.7311950250952415 a=hat,b=pan,i=1502,x=0.2774932582132752,y=0.9027623326364321,x2=0.07700250835381942,xy=0.25051046107550007,y2=0.8149798292271722 a=hat,b=cat,i=1503,x=0.5632544178950221,y=0.7213298388492506,x2=0.31725553927826017,xy=0.4062922184913447,y2=0.5203167364142859 a=hat,b=wye,i=1504,x=0.24924662977999656,y=0.5133814433421646,x2=0.06212388245668667,xy=0.1279585945446248,y2=0.2635605063680842 a=dog,b=cat,i=1505,x=0.9052135431451185,y=0.9064647142531286,x2=0.8194115586933393,xy=0.8205441357251019,y2=0.821678278186006 a=pan,b=hat,i=1506,x=0.39901457386442973,y=0.6385244972604642,x2=0.15921263015621245,xy=0.2547805801763834,y2=0.4077135336017286 a=pan,b=hat,i=1507,x=0.42560907422849514,y=0.7385824097799405,x2=0.1811430840656367,xy=0.3143473756678915,y2=0.5455039760363439 a=wye,b=dog,i=1508,x=0.24836853850846896,y=0.10510099225675706,x2=0.06168693092083283,xy=0.026103779842600663,y2=0.011046218573354909 a=cat,b=pan,i=1509,x=0.19405289787876656,y=0.757765187724275,x2=0.037656527175147,xy=0.14704653058954312,y2=0.5742080797268058 a=cat,b=pan,i=1510,x=0.42619538892527276,y=0.8177257976529756,x2=0.1816425095411645,xy=0.34851096436493884,y2=0.6686754801471951 a=cat,b=cat,i=1511,x=0.3119961308047905,y=0.2692771758370184,x2=0.09734158563715994,xy=0.08401343697519095,y2=0.07251019742676051 a=dog,b=pan,i=1512,x=0.4956268080174796,y=0.34898138069783036,x2=0.24564593282559558,xy=0.17296452777279853,y2=0.121788004073764 a=hat,b=hat,i=1513,x=0.9928788688650781,y=0.1805357299725343,x2=0.9858084482387971,xy=0.17925011136486105,y2=0.03259314979671582 a=pan,b=dog,i=1514,x=0.6448737665685752,y=0.10975042360679177,x2=0.4158621748083412,xy=0.07077516905380848,y2=0.012045155481870237 a=pan,b=cat,i=1515,x=0.1094473216590276,y=0.34122267308228693,x2=0.011978716218334651,xy=0.03734590765819028,y2=0.11643291262542126 a=cat,b=cat,i=1516,x=0.08811008185638147,y=0.20179679125663352,x2=0.007763386524738244,xy=0.017780331795977104,y2=0.04072194496147332 a=hat,b=hat,i=1517,x=0.499677763055302,y=0.45791040648205683,x2=0.2496778668919505,xy=0.22880764759069822,y2=0.2096819403645625 a=hat,b=hat,i=1518,x=0.3841861055633752,y=0.29467543539117547,x2=0.14759896370795286,xy=0.11321020792812768,y2=0.08683361222297882 a=wye,b=dog,i=1519,x=0.43779523845120794,y=0.2644626628409492,x2=0.19166467081055003,xy=0.11578049453989477,y2=0.06994050003692558 a=pan,b=dog,i=1520,x=0.8621151418028805,y=0.8087471833817196,x2=0.7432425177258007,xy=0.6972331926838113,y2=0.6540720066278648 a=dog,b=dog,i=1521,x=0.915428541505597,y=0.6918518428007708,x2=0.8380094146030647,xy=0.6333409233930692,y2=0.47865897238682253 a=pan,b=hat,i=1522,x=0.34246330299611916,y=0.4015667600891675,x2=0.11728111389901172,xy=0.13752187903358645,y2=0.16125586280851098 a=wye,b=hat,i=1523,x=0.6086233191892091,y=0.7779595323252304,x2=0.3704223446608899,xy=0.47348431275866654,y2=0.6052210339356913 a=hat,b=cat,i=1524,x=0.10442936908164735,y=0.4581450509779861,x2=0.010905493126790924,xy=0.047843798621510246,y2=0.20989688773562146 a=pan,b=pan,i=1525,x=0.2583246878545772,y=0.02240067573993554,x2=0.06673164435516474,xy=0.005786647568250447,y2=0.0005017902736057366 a=pan,b=hat,i=1526,x=0.23796014595848403,y=0.3072450414987614,x2=0.05662503106458302,xy=0.07311207492006574,y2=0.09439951552557563 a=hat,b=pan,i=1527,x=0.12119541398603217,y=0.17048024763361747,x2=0.014688328371245724,xy=0.020661424188397552,y2=0.029063514833219534 a=dog,b=cat,i=1528,x=0.5175855045219828,y=0.7817853634426445,x2=0.2678947544912755,xy=0.40464077176536284,y2=0.6111883544931477 a=wye,b=dog,i=1529,x=0.3149584970318017,y=0.09231541484342054,x2=0.09919885485253142,xy=0.02907552431195101,y2=0.00852213581771283 a=hat,b=pan,i=1530,x=0.6893929855985418,y=0.42906722591329993,x2=0.4752626885924712,xy=0.29579593589485387,y2=0.18409868435293475 a=dog,b=wye,i=1531,x=0.45335175048306375,y=0.07118777173148638,x2=0.2055278096660581,xy=0.032273100927458116,y2=0.005067698844094212 a=cat,b=cat,i=1532,x=0.18419733883722667,y=0.24948680832820092,x2=0.03392865963471609,xy=0.045954806169047846,y2=0.06224366752979246 a=dog,b=cat,i=1533,x=0.9464506050337935,y=0.9008282308337938,x2=0.8957687477688339,xy=0.8525894241041659,y2=0.8114915014671429 a=dog,b=dog,i=1534,x=0.04092212076171453,y=0.4810326111514236,x2=0.0016746199676363474,xy=0.019684874603861424,y2=0.2313923729911567 a=hat,b=hat,i=1535,x=0.04217832231710106,y=0.1739421021255957,x2=0.0017790108734852652,xy=0.007336586047967484,y2=0.03025585489187116 a=pan,b=pan,i=1536,x=0.4357609226668223,y=0.7464995143390647,x2=0.1898875817234403,xy=0.32529531713872556,y2=0.5572615249084595 a=wye,b=wye,i=1537,x=0.6744759735073189,y=0.48261666323539476,x2=0.45491783883864556,xy=0.3255133437665468,y2=0.23291884363246643 a=wye,b=dog,i=1538,x=0.5090904718939057,y=0.02011153089090212,x2=0.25917310857315956,xy=0.01023858875175822,y2=0.00040447367477571016 a=wye,b=wye,i=1539,x=0.34746876165555896,y=0.5458488723201921,x2=0.12073454032644763,xy=0.18966543171618044,y2=0.29795099141322534 a=hat,b=dog,i=1540,x=0.10238215788898886,y=0.9830316802525342,x2=0.010482106254005844,xy=0.10064490469749296,y2=0.9663512843801206 a=cat,b=pan,i=1541,x=0.35385559107620834,y=0.3216267622332234,x2=0.12521377933589278,xy=0.11380942805596439,y2=0.10344377418462641 a=hat,b=hat,i=1542,x=0.8253265157708232,y=0.2075510242659313,x2=0.6811638576344068,xy=0.17129736370206666,y2=0.0430774276738372 a=hat,b=hat,i=1543,x=0.7991369037258617,y=0.2859450664777635,x2=0.6386197908965571,xy=0.2285092550607256,y2=0.0817645810429726 a=cat,b=cat,i=1544,x=0.6392952718588218,y=0.7439525954966602,x2=0.40869844462104493,xy=0.4756053767881135,y2=0.5534654643462172 a=hat,b=hat,i=1545,x=0.5084509220184711,y=0.6728224711625662,x2=0.2585223401014334,xy=0.342097205817353,y2=0.45269007770130226 a=dog,b=dog,i=1546,x=0.14100930019189006,y=0.7938180994167824,x2=0.019883622740606566,xy=0.11193573467841669,y2=0.6301471749616726 a=wye,b=hat,i=1547,x=0.9928968716790996,y=0.8508215547880971,x2=0.9858441977901423,xy=0.8447780601062492,y2=0.7238973180920348 a=cat,b=dog,i=1548,x=0.6350205719045344,y=0.26567328158599435,x2=0.40325112674196195,xy=0.16870799921249255,y2=0.07058229254867104 a=wye,b=pan,i=1549,x=0.021473868740017554,y=0.34749808992043807,x2=0.0004611270386635031,xy=0.007462128370358304,y2=0.12075492249835286 a=hat,b=cat,i=1550,x=0.7408751855532695,y=0.3423014162600545,x2=0.5488960405685914,xy=0.2536026252868148,y2=0.11717025957363911 a=wye,b=dog,i=1551,x=0.04383676821479654,y=0.266850697482773,x2=0.0019216622475177962,xy=0.011697872173509111,y2=0.07120929474704243 a=dog,b=pan,i=1552,x=0.3801549297268849,y=0.04997949600296803,x2=0.14451777059565282,xy=0.018999951790793435,y2=0.002497950020710697 a=wye,b=pan,i=1553,x=0.5345857907474418,y=0.135104902701352,x2=0.28578196766906766,xy=0.07222516124445845,y2=0.018253334733941792 a=dog,b=hat,i=1554,x=0.7592553908177758,y=0.4867024463422348,x2=0.5764687484858535,xy=0.3695314561095411,y2=0.23687927127551595 a=pan,b=wye,i=1555,x=0.9156527188879559,y=0.6114596061890427,x2=0.8384199016069059,xy=0.5598846508971557,y2=0.3738828500008592 a=dog,b=wye,i=1556,x=0.2052844395044381,y=0.6894819818589596,x2=0.0421417011026513,xy=0.14153992219432568,y2=0.4753854033081587 a=cat,b=cat,i=1557,x=0.2982791981713536,y=0.18014522680887524,x2=0.08897048006174564,xy=0.05373357380694794,y2=0.0324523027420211 a=cat,b=dog,i=1558,x=0.06790524135741416,y=0.8195635939312853,x2=0.00461112180380867,xy=0.0556526636536537,y2=0.6716844844975647 a=cat,b=pan,i=1559,x=0.10877195122466432,y=0.8210416061457385,x2=0.011831337373220754,xy=0.08930629753710433,y2=0.674109319022374 a=pan,b=pan,i=1560,x=0.8756525639753959,y=0.661646767692369,x2=0.7667674127966848,xy=0.579372688575856,y2=0.43777644519775966 a=hat,b=wye,i=1561,x=0.02446088669345725,y=0.10532388717105712,x2=0.000598334977830154,xy=0.002576315670205704,y2=0.01109312120882157 a=hat,b=dog,i=1562,x=0.19889556497967098,y=0.8936796259204715,x2=0.03955944576858252,xy=0.17774891410827318,y2=0.7986632737853538 a=hat,b=cat,i=1563,x=0.03660256512961213,y=0.5634520296563341,x2=0.0013397477740674979,xy=0.020623789612908117,y2=0.3174781897238424 a=cat,b=pan,i=1564,x=0.9659545905762601,y=0.571818493225905,x2=0.9330682710553503,xy=0.5523506985079629,y2=0.3269763891951443 a=cat,b=hat,i=1565,x=0.7583921834169207,y=0.2601502538203321,x2=0.5751587038678844,xy=0.19729591901126778,y2=0.0676781545627832 a=hat,b=dog,i=1566,x=0.026263975866313904,y=0.02216648927463971,x2=0.0006897964283063192,xy=0.0005821801393500434,y2=0.0004913532467627174 a=dog,b=hat,i=1567,x=0.6844253879734883,y=0.2949316889002147,x2=0.46843811170266,xy=0.2018587356012056,y2=0.08698470111753304 a=pan,b=wye,i=1568,x=0.12484859125467229,y=0.8991956339382959,x2=0.015587170738276234,xy=0.11226330815954824,y2=0.8085527880936939 a=pan,b=hat,i=1569,x=0.18131094277686866,y=0.596307418549097,x2=0.03287365797063694,xy=0.10811706024197759,y2=0.35558253741668794 a=dog,b=pan,i=1570,x=0.8579920772160065,y=0.7280991456877075,x2=0.7361504045654376,xy=0.6247032984277958,y2=0.5301283659511695 a=cat,b=hat,i=1571,x=0.8553472608035858,y=0.11757479526347292,x2=0.7316189365641974,xy=0.10056727906815398,y2=0.013823832481247574 a=pan,b=wye,i=1572,x=0.6479567905186169,y=0.2807792182278904,x2=0.41984800237918674,xy=0.1819328010872702,y2=0.07883696938866532 a=pan,b=dog,i=1573,x=0.7819251395306596,y=0.9370590895583982,x2=0.6114069238300415,xy=0.7327100593514233,y2=0.8780797373240142 a=cat,b=cat,i=1574,x=0.1514963814079887,y=0.3289798760930779,x2=0.02295115357971479,xy=0.0498392607841498,y2=0.10822775887421687 a=pan,b=cat,i=1575,x=0.14828774243885756,y=0.4937495068399602,x2=0.02198925455761296,xy=0.07321699969959695,y2=0.24378857550470392 a=wye,b=cat,i=1576,x=0.44849029095061377,y=0.3474789085726283,x2=0.2011435410769662,xy=0.15584091680493978,y2=0.12074159190282498 a=pan,b=cat,i=1577,x=0.11742715840772,y=0.8533514684924811,x2=0.013789137531711767,xy=0.10020663806812706,y2=0.728208728778274 a=hat,b=pan,i=1578,x=0.9561812114331917,y=0.6311123886196823,x2=0.914282509097846,xy=0.6034578083008632,y2=0.39830284706924096 a=hat,b=wye,i=1579,x=0.3893408935248426,y=0.07585593238137323,x2=0.1515863313707228,xy=0.02953381649252389,y2=0.005754122477447467 a=cat,b=hat,i=1580,x=0.017691921667216448,y=0.5885134221742414,x2=0.0003130040922789228,xy=0.010411933365212163,y2=0.3463480480792369 a=hat,b=hat,i=1581,x=0.44867319136622774,y=0.781216580590725,x2=0.20130763265075563,xy=0.35051093636185243,y2=0.6102993457898647 a=cat,b=pan,i=1582,x=0.44447231875949966,y=0.34367821135820475,x2=0.1975556421434463,xy=0.15275545150949868,y2=0.11811471296237486 a=pan,b=pan,i=1583,x=0.8509473547023161,y=0.04830044716645099,x2=0.7241114004748693,xy=0.04110113774723045,y2=0.0023329331964791235 a=dog,b=cat,i=1584,x=0.10225562909113295,y=0.9981951134648713,x2=0.010456213680823355,xy=0.10207106928304525,y2=0.9963934845451473 a=cat,b=wye,i=1585,x=0.28818623525822074,y=0.9549435530526844,x2=0.08305130619230655,xy=0.2752015874383621,y2=0.911917189516885 a=dog,b=pan,i=1586,x=0.7717108759456307,y=0.8580611734234349,x2=0.5955376760527726,xy=0.6621751397575347,y2=0.7362689773368021 a=pan,b=dog,i=1587,x=0.4765709177992249,y=0.8517795433900952,x2=0.22711983969199556,xy=0.4059333587560224,y2=0.7255283905378391 a=cat,b=pan,i=1588,x=0.4469143340193531,y=0.6454699064416178,x2=0.19973242195196192,xy=0.2884697533668898,y2=0.41663140012175087 a=hat,b=wye,i=1589,x=0.7995256860918732,y=0.21409278194551606,x2=0.6392413227206807,xy=0.17117267837230654,y2=0.04583571928117029 a=dog,b=hat,i=1590,x=0.09949712510568698,y=0.26672131711357683,x2=0.009899677904296727,xy=0.026538004257203162,y2=0.07114026100280121 a=cat,b=wye,i=1591,x=0.7720877441185823,y=0.9494920350525312,x2=0.5961194846181214,xy=0.7330911634022707,y2=0.9015351246281972 a=wye,b=cat,i=1592,x=0.8294711791618263,y=0.25070500876954116,x2=0.6880224370601106,xy=0.2079525792458473,y2=0.06285300142213571 a=hat,b=cat,i=1593,x=0.1413366958783815,y=0.6479105320354736,x2=0.0199760616018181,xy=0.09157353382269807,y2=0.4197880575224904 a=cat,b=pan,i=1594,x=0.6930683954666307,y=0.026735216731828326,x2=0.48034380079468997,xy=0.018529333762780875,y2=0.0007147718136978333 a=wye,b=hat,i=1595,x=0.1949077017171642,y=0.27715582259784965,x2=0.03798901218866706,xy=0.05401980440007696,y2=0.0768153499998907 a=hat,b=dog,i=1596,x=0.9050627783665586,y=0.8831462196869232,x2=0.8191386327845943,xy=0.7993027712937698,y2=0.7799472453473032 a=dog,b=pan,i=1597,x=0.9512476936366657,y=0.5147958917805698,x2=0.9048721746490759,xy=0.4896984047498976,y2=0.2650148101941522 a=dog,b=pan,i=1598,x=0.6201253205268328,y=0.7374258584444923,x2=0.3845554131585071,xy=0.45729644683266557,y2=0.5437968967025963 a=dog,b=dog,i=1599,x=0.20861740577667076,y=0.3744857984645993,x2=0.0435212219929881,xy=0.07812425577588986,y2=0.14023961325166848 a=cat,b=cat,i=1600,x=0.9180509487209038,y=0.6961609399227705,x2=0.8428175444473515,xy=0.6391112113585355,y2=0.4846400542741553 a=hat,b=pan,i=1601,x=0.5668724662094057,y=0.6892431702222551,x2=0.32134439294633377,xy=0.39071297572187896,y2=0.47505614769802457 a=dog,b=dog,i=1602,x=0.6291540296653728,y=0.2036098512447937,x2=0.3958347930441768,xy=0.1281019583902291,y2=0.041456971523927015 a=cat,b=hat,i=1603,x=0.9531511923578132,y=0.8297657896193978,x2=0.908497195493121,xy=0.7908922517534515,y2=0.6885112656227028 a=dog,b=pan,i=1604,x=0.0432946719776931,y=0.3070866737944582,x2=0.0018744286216560442,xy=0.01329521681065191,y2=0.09430222522214397 a=pan,b=pan,i=1605,x=0.3736137583809874,y=0.1089267696226176,x2=0.13958724045156684,xy=0.04069653978700613,y2=0.011865041140418808 a=cat,b=wye,i=1606,x=0.6487271855151501,y=0.6932495108666088,x2=0.4208469612264079,xy=0.44972980404424956,y2=0.48059488431679237 a=hat,b=wye,i=1607,x=0.002825140366817802,y=0.7102085021236773,x2=7.981418092223425e-06,xy=0.002006438708206807,y2=0.5043961164887573 a=dog,b=hat,i=1608,x=0.43735145990915725,y=0.5122308961341998,x2=0.19127629948467118,xy=0.2240249302348682,y2=0.2623804909544454 a=cat,b=cat,i=1609,x=0.8704637894619757,y=0.4114224078394778,x2=0.7577072087645027,xy=0.3581283081975223,y2=0.16926839767243362 a=hat,b=hat,i=1610,x=0.863903018597316,y=0.8955887400885664,x2=0.7463284255415545,xy=0.7737018159842796,y2=0.8020791913734256 a=dog,b=hat,i=1611,x=0.813479285014705,y=0.556016363747658,x2=0.6617485471480357,xy=0.45230779403792093,y2=0.30915419675516786 a=pan,b=pan,i=1612,x=0.9828256133628142,y=0.9462282732785905,x2=0.9659461862819918,xy=0.9299773830662672,y2=0.895347945151783 a=dog,b=pan,i=1613,x=0.997245171384539,y=0.8188847898688517,x2=0.9944979318497786,xy=0.8166289026169553,y2=0.6705722990785534 a=cat,b=hat,i=1614,x=0.8702296622957021,y=0.9633415388928867,x2=0.7572996651392917,xy=0.8383283820661787,y2=0.928026920556515 a=dog,b=hat,i=1615,x=0.32938974607166416,y=0.6648535062276374,x2=0.1084976048171554,xy=0.21899592759117706,y2=0.44203018474318306 a=cat,b=hat,i=1616,x=0.21973398978224268,y=0.9170301108422763,x2=0.04828302626562273,xy=0.2015026850058256,y2=0.8409442241913975 a=wye,b=cat,i=1617,x=0.3188600305313566,y=0.12797936125166676,x2=0.10167171907045766,xy=0.04080750303608997,y2=0.01637871690638462 a=dog,b=hat,i=1618,x=0.08169283210276668,y=0.3290482944796531,x2=0.0066737188169708256,xy=0.02688088707462803,y2=0.10827278009996852 a=cat,b=pan,i=1619,x=0.5474618104169076,y=0.7275509604239726,x2=0.29971443386495805,xy=0.3983063659642679,y2=0.5293304000138449 a=dog,b=pan,i=1620,x=0.8496579259046118,y=0.5331672214883044,x2=0.7219185910525268,xy=0.4530097555700775,y2=0.28426728606955864 a=hat,b=cat,i=1621,x=0.5789362482550833,y=0.5721615488209199,x2=0.3351671795436714,xy=0.331245060470201,y2=0.32736883794915383 a=dog,b=dog,i=1622,x=0.07340446939675682,y=0.053524173914530015,x2=0.005388216127419409,xy=0.003928913586095808,y2=0.0028648371932328554 a=cat,b=cat,i=1623,x=0.4016965060303803,y=0.07864444010507288,x2=0.16136008295701537,xy=0.03159119680892329,y2=0.006184947959440395 a=pan,b=dog,i=1624,x=0.10848281944185878,y=0.3423443652351136,x2=0.011768522114054934,xy=0.03713848196073858,y2=0.11719966440823285 a=wye,b=dog,i=1625,x=0.48963027550697813,y=0.7440099158860606,x2=0.23973780669303932,xy=0.36428978009521545,y2=0.553550754936783 a=hat,b=pan,i=1626,x=0.09566940342098973,y=0.007673090508222624,x2=0.009152634750928082,xy=0.0007340799913169173,y2=5.8876317947376127e-05 a=pan,b=cat,i=1627,x=0.23451298640557194,y=0.2681503215077292,x2=0.05499634079285997,xy=0.06288473270239185,y2=0.07190459492469854 a=cat,b=cat,i=1628,x=0.22742389846337696,y=0.5907743445113182,x2=0.051721629592280396,xy=0.1343562045409101,y2=0.34901432613277766 a=pan,b=dog,i=1629,x=0.2041361746188951,y=0.08002125587765907,x2=0.041671577788036034,xy=0.0163352330630651,y2=0.006403401392237786 a=cat,b=wye,i=1630,x=0.6221885986617947,y=0.872101148421837,x2=0.3871186523047278,xy=0.5426113914279245,y2=0.7605604130786868 a=hat,b=dog,i=1631,x=0.9724844283703676,y=0.888091684129161,x2=0.9457259634228407,xy=0.8636553337808242,y2=0.7887068394193694 a=hat,b=dog,i=1632,x=0.04113654741104045,y=0.4298748752486753,x2=0.0016922155329007786,xy=0.01768356818648223,y2=0.18479240837006414 a=wye,b=dog,i=1633,x=0.22240261580881637,y=0.36232016649260135,x2=0.04946292351860398,xy=0.0805809527882404,y2=0.13127590304722636 a=dog,b=pan,i=1634,x=0.027438300456492648,y=0.8218611481795173,x2=0.0007528603319407646,xy=0.02255047311726762,y2=0.6754557468869544 a=hat,b=dog,i=1635,x=0.43912761905308106,y=0.8039990824810354,x2=0.19283306581522788,xy=0.3530582028107588,y2=0.6464145246303467 a=hat,b=pan,i=1636,x=0.8574393079576283,y=0.3981090276084197,x2=0.7352021668308566,xy=0.34135432912424774,y2=0.1584907978633215 a=dog,b=wye,i=1637,x=0.3936158292210302,y=0.4002525764948093,x2=0.15493342101335922,xy=0.1575457497948582,y2=0.16020212499073316 a=cat,b=dog,i=1638,x=0.9126998946130102,y=0.06115876060098202,x2=0.8330210976265998,xy=0.05581959435517861,y2=0.003740393998248231 a=cat,b=dog,i=1639,x=0.2842306037315152,y=0.20461476009403634,x2=0.08078703609758163,xy=0.058157776793907094,y2=0.04186720004834005 a=dog,b=pan,i=1640,x=0.9071641742095542,y=0.2158698815251211,x2=0.8229468389693024,xy=0.1958294228104508,y2=0.04659980574966982 a=dog,b=dog,i=1641,x=0.9205768203019893,y=0.7162208455434735,x2=0.8474616820773211,xy=0.6593363086244131,y2=0.5129722995910082 a=hat,b=wye,i=1642,x=0.07708601630855028,y=0.3677116704903335,x2=0.005942253910322079,xy=0.02834542782826211,y2=0.1352118726147916 a=hat,b=cat,i=1643,x=0.891086171382202,y=0.45465600270588036,x2=0.7940345648285911,xy=0.40513767674711904,y2=0.20671208079648948 a=wye,b=hat,i=1644,x=0.9535785952720344,y=0.6545866530193877,x2=0.9093121373609864,xy=0.6241998210700502,y2=0.4284836863111242 a=hat,b=cat,i=1645,x=0.2146953126698945,y=0.11304072018003597,x2=0.04609407728242376,xy=0.024269312763482875,y2=0.012778204418821191 a=dog,b=cat,i=1646,x=0.703602800768384,y=0.1788354701674164,x2=0.4950569012491143,xy=0.12582913768652496,y2=0.031982125390000886 a=cat,b=dog,i=1647,x=0.23644793052741475,y=0.37664599907875307,x2=0.055907623850697155,xy=0.08905716702360172,y2=0.14186220862203205 a=wye,b=cat,i=1648,x=0.7738923843915508,y=0.9220658594972316,x2=0.5989094226192399,xy=0.7135797465723573,y2=0.8502054492503686 a=pan,b=wye,i=1649,x=0.3881512739565207,y=0.3166268964167729,x2=0.15066141147407,xy=0.12289913321306972,y2=0.10025259153451782 a=dog,b=pan,i=1650,x=0.08069176552256929,y=0.20005901085517142,x2=0.0065111610231493025,xy=0.016143114794602637,y2=0.04002360782434959 a=dog,b=pan,i=1651,x=0.2275129965873679,y=0.5632678749374941,x2=0.051762163616163676,xy=0.12815076210842807,y2=0.3172706989366005 a=wye,b=dog,i=1652,x=0.5519239750397438,y=0.8099186708035292,x2=0.3046200742236717,xy=0.4470135322487895,y2=0.6559682533161555 a=dog,b=wye,i=1653,x=0.639889328423366,y=0.2540187912756243,x2=0.4094583526301063,xy=0.16254391375627442,y2=0.0645255463211292 a=wye,b=dog,i=1654,x=0.8737413102903783,y=0.9886812038724857,x2=0.763423877307947,xy=0.8638516105310142,y2=0.9774905228907477 a=wye,b=pan,i=1655,x=0.47282261946513027,y=0.3211346348224169,x2=0.22356122947786738,xy=0.1518397192377132,y2=0.10312745368252704 a=wye,b=dog,i=1656,x=0.14294522345450367,y=0.22926887621937164,x2=0.020433336908457986,xy=0.03277289074234102,y2=0.05256421760289356 a=wye,b=dog,i=1657,x=0.43048291429852836,y=0.3870314399018282,x2=0.18531553950295412,xy=0.16661042217409475,y2=0.14979333547248244 a=dog,b=dog,i=1658,x=0.567295665732677,y=0.886177490533436,x2=0.3218243723590812,xy=0.5027246494494786,y2=0.785310544728138 a=hat,b=hat,i=1659,x=0.17874497185555105,y=0.050992313608872575,x2=0.031949764963641734,xy=0.009114619660867362,y2=0.002600216047185611 a=wye,b=dog,i=1660,x=0.37405584427544813,y=0.7809699765352812,x2=0.1399177746366183,xy=0.29212638392668155,y2=0.6099141042495178 a=pan,b=pan,i=1661,x=0.13582576025733262,y=0.7573342859324125,x2=0.018448637149482396,xy=0.10286550515571405,y2=0.5735552206487571 a=wye,b=wye,i=1662,x=0.747943111650199,y=0.07115853449918319,x2=0.559418898264982,xy=0.05322253571378711,y2=0.005063537032071444 a=hat,b=pan,i=1663,x=0.3204641843851568,y=0.721857856580675,x2=0.10269729347364376,xy=0.2313295892511435,y2=0.5210787651072464 a=hat,b=cat,i=1664,x=0.8761516655928389,y=0.9096956097881236,x2=0.7676417411211057,xy=0.7970313236983577,y2=0.827546102467786 a=wye,b=pan,i=1665,x=0.4048769803504033,y=0.12258576541477295,x2=0.16392536921766088,xy=0.049632154535076176,y2=0.015027269882325745 a=dog,b=cat,i=1666,x=0.2179285734605032,y=0.31374185530645116,x2=0.047492863130529944,xy=0.0683733149617865,y2=0.09843395177113413 a=pan,b=hat,i=1667,x=0.8707522639142692,y=0.7726065553597292,x2=0.758209505111825,xy=0.6727489071944893,y2=0.5969208893848263 a=hat,b=dog,i=1668,x=0.28780883579957106,y=0.3178867299709123,x2=0.08283392596430446,xy=0.09149060966906088,y2=0.10105197309159969 a=pan,b=wye,i=1669,x=0.5792574059470896,y=0.11568552140933597,x2=0.3355391423445514,xy=0.06701169503720845,y2=0.01338313986374993 a=hat,b=hat,i=1670,x=0.3227620938680381,y=0.9047964130984939,x2=0.10417536923808024,xy=0.29203398481596027,y2=0.8186565491559005 a=dog,b=cat,i=1671,x=0.4170283119952225,y=0.9782353863453211,x2=0.17391261300558464,xy=0.4079518519015836,y2=0.9569444710981797 a=pan,b=cat,i=1672,x=0.6599992419763393,y=0.9741564387006593,x2=0.4355989994093425,xy=0.6429425111088054,y2=0.9489807670619513 a=wye,b=cat,i=1673,x=0.29187601892586845,y=0.5388057612947819,x2=0.08519161042401392,xy=0.1572644805810427,y2=0.29031164840444945 a=hat,b=cat,i=1674,x=0.5390394718631818,y=0.8048259724603639,x2=0.29056355222653796,xy=0.43383296713680625,y2=0.6477448459467705 a=hat,b=wye,i=1675,x=0.048579087927689724,y=0.24652911047462378,x2=0.0023599277838862094,xy=0.011976159334481882,y2=0.06077660231140926 a=dog,b=dog,i=1676,x=0.048972441564576696,y=0.9218204959234996,x2=0.002398300032795879,xy=0.045143800369642696,y2=0.8497530267046467 a=pan,b=wye,i=1677,x=0.8723437200679534,y=0.3157472779224004,x2=0.7609835659419958,xy=0.27544015502415675,y2=0.09969634351540557 a=dog,b=pan,i=1678,x=0.8167222472906894,y=0.986551120263316,x2=0.667035229219554,xy=0.8057382480086027,y2=0.9732831128928039 a=hat,b=hat,i=1679,x=0.39775090311253436,y=0.9492050319119413,x2=0.1582057809268367,xy=0.37754715868193667,y2=0.9009901926069495 a=dog,b=hat,i=1680,x=0.9885812365291148,y=0.048768165346359305,x2=0.9772928612174336,xy=0.04821129320136021,y2=0.0023783339512498405 a=wye,b=wye,i=1681,x=0.062568716830534,y=0.6943753352072064,x2=0.003914844325819548,xy=0.043446173722686825,y2=0.4821571061441203 a=pan,b=cat,i=1682,x=0.8888030579112071,y=0.04402650833464217,x2=0.7899708757523125,xy=0.0391308952369832,y2=0.0019383334361403161 a=pan,b=hat,i=1683,x=0.9724493454696065,y=0.6589972933012489,x2=0.9456577295042661,xy=0.6408414865370418,y2=0.43427743257837226 a=hat,b=hat,i=1684,x=0.4069692594975953,y=0.3986453675645386,x2=0.1656239781760211,xy=0.16223641003988698,y2=0.1589181290806661 a=dog,b=dog,i=1685,x=0.28322884520031133,y=0.16586598055549973,x2=0.08021857875350191,xy=0.04697803013075148,y2=0.027511523505637413 a=cat,b=pan,i=1686,x=0.12937859467738544,y=0.9861644534388775,x2=0.01673882076069519,xy=0.12758857110671387,y2=0.9725203292264 a=hat,b=pan,i=1687,x=0.23287889562740582,y=0.8389347784619275,x2=0.054232580028640176,xy=0.19537020471163605,y2=0.7038115625129634 a=dog,b=cat,i=1688,x=0.5682955920434908,y=0.5945491777156097,x2=0.3229598799360617,xy=0.337879676948863,y2=0.3534887247223076 a=pan,b=dog,i=1689,x=0.16105478267120443,y=0.08426726713328936,x2=0.02593864302126889,xy=0.013571646394448246,y2=0.007100972310113149 a=dog,b=cat,i=1690,x=0.5070153147880428,y=0.5380671284015519,x2=0.25706452942961816,xy=0.2728082744836111,y2=0.28951623466629217 a=wye,b=dog,i=1691,x=0.30350321074609365,y=0.5933552503916028,x2=0.09211419893318774,xy=0.18008522360690377,y2=0.3520704531672816 a=dog,b=dog,i=1692,x=0.487796053925177,y=0.031684652993436924,x2=0.23794499022497417,xy=0.015455648700187079,y2=0.0010039172353145114 a=cat,b=pan,i=1693,x=0.37634611053732825,y=0.4375476097662617,x2=0.1416363949165749,xy=0.1646693411104373,y2=0.19144791081216886 a=hat,b=cat,i=1694,x=0.9481870673353364,y=0.03227311659127241,x2=0.8990587146619858,xy=0.030600951774449978,y2=0.0010415540545138625 a=cat,b=dog,i=1695,x=0.1461079052481754,y=0.009273641061726678,x2=0.021347519976009803,xy=0.0013549522695523503,y2=8.600041854174311e-05 a=cat,b=cat,i=1696,x=0.664622851996795,y=0.6220953625183441,x2=0.44172353539635373,xy=0.41345879405092195,y2=0.38700264006682994 a=dog,b=wye,i=1697,x=0.7392009908426814,y=0.5100797348391554,x2=0.546418104862802,xy=0.37705144540187585,y2=0.26018133589358305 a=wye,b=wye,i=1698,x=0.7054910080579193,y=0.1031198321244089,x2=0.4977175624505792,xy=0.07275011431621264,y2=0.010633699777366272 a=cat,b=wye,i=1699,x=0.6126583948316581,y=0.1966643871428705,x2=0.3753503087577038,xy=0.1204880877475028,y2=0.03867688117028084 a=cat,b=hat,i=1700,x=0.054997512547894534,y=0.15759987654208285,x2=0.0030247263864558167,xy=0.008667601187669832,y2=0.024837721086079758 a=cat,b=pan,i=1701,x=0.22975216825718248,y=0.809183481892754,x2=0.052786058818876685,xy=0.18591165948275679,y2=0.654777907368081 a=dog,b=hat,i=1702,x=0.18418666280139295,y=0.8171870602406262,x2=0.03392472675391403,xy=0.1505149575102018,y2=0.6677946914247167 a=dog,b=cat,i=1703,x=0.010686095765771508,y=0.05199916348790379,x2=0.00011419264271523976,xy=0.0005556680407717491,y2=0.0027039130034417465 a=hat,b=wye,i=1704,x=0.01877485223131614,y=0.6375043667215262,x2=0.0003524950763077567,xy=0.01196905028201543,y2=0.4064118175890142 a=hat,b=dog,i=1705,x=0.12425555965226853,y=0.12056177606993312,x2=0.015439444104498464,xy=0.014980470958241017,y2=0.0145351418491367 a=dog,b=dog,i=1706,x=0.2106835201181333,y=0.7148544928686459,x2=0.04438754564936788,xy=0.15060806092982934,y2=0.5110169459744889 a=hat,b=pan,i=1707,x=0.17785992112431714,y=0.5889112469352836,x2=0.03163415154234832,xy=0.1047437079291328,y2=0.3468164567668706 a=cat,b=dog,i=1708,x=0.8918669744557775,y=0.5287616486231685,x2=0.7954267001249024,xy=0.47158505176579424,y2=0.27958888105469115 a=cat,b=dog,i=1709,x=0.33807974986782396,y=0.17333156717370213,x2=0.11429791727069041,xy=0.05859989287428314,y2=0.030043832178891613 a=wye,b=hat,i=1710,x=0.896316605122267,y=0.6483005933840498,x2=0.8033834566179059,xy=0.5810825869607427,y2=0.42029365938211105 a=cat,b=wye,i=1711,x=0.07951586685765877,y=0.8532530554817359,x2=0.006322773082124916,xy=0.06784715635557624,y2=0.7280407766889183 a=wye,b=hat,i=1712,x=0.9193212686772694,y=0.09656171635091815,x2=0.8451515950423841,xy=0.0887712395813807,y2=0.009324165064635173 a=wye,b=cat,i=1713,x=0.5309901853379356,y=0.49148282419851896,x2=0.28195057692521525,xy=0.26097255591158364,y2=0.2415553664821523 a=dog,b=wye,i=1714,x=0.3713852638032674,y=0.7143118003856945,x2=0.13792701417022254,xy=0.26528487642402804,y2=0.5102413481702524 a=dog,b=cat,i=1715,x=0.5498980759698163,y=0.5515600622820238,x2=0.3023878939553059,xy=0.30330181703067693,y2=0.30421850230455 a=pan,b=pan,i=1716,x=0.6417672435229054,y=0.511317231123837,x2=0.41186519485898815,xy=0.3281466499841092,y2=0.26144531084414735 a=wye,b=pan,i=1717,x=0.356435387400564,y=0.293561640269951,x2=0.12704618539139015,xy=0.104635756975565,y2=0.08617843663798412 a=hat,b=wye,i=1718,x=0.2471457357935608,y=0.6963887482349558,x2=0.06108101472094056,xy=0.17210950958088492,y2=0.4849572886682486 a=wye,b=pan,i=1719,x=0.2676134553202123,y=0.41541078011182897,x2=0.07161696146842327,xy=0.11116951424299149,y2=0.17256611623311832 a=wye,b=cat,i=1720,x=0.4589470991791813,y=0.183923236852081,x2=0.21063243984498528,xy=0.08441103602490807,y2=0.03382775705414669 a=pan,b=wye,i=1721,x=0.039615501671190545,y=0.14665293148181202,x2=0.001569387972660101,xy=0.005809729452202717,y2=0.02150708231220905 a=cat,b=dog,i=1722,x=0.8662864366230233,y=0.34394731887733476,x2=0.7504521902770154,xy=0.29795689725628904,y2=0.118299758162907 a=cat,b=dog,i=1723,x=0.07903078625494464,y=0.24001021107925202,x2=0.0062458651760747465,xy=0.01896819569080851,y2=0.05760490142230711 a=cat,b=pan,i=1724,x=0.7830526631959221,y=0.7935710543782611,x2=0.6131714733382263,xy=0.6214079275660933,y2=0.6297550183470251 a=hat,b=hat,i=1725,x=0.9512582065298667,y=0.07219992983142942,x2=0.9048921754904186,xy=0.06868077576302778,y2=0.005212829867663332 a=cat,b=cat,i=1726,x=0.8058645335096987,y=0.14090201105649103,x2=0.6494176463688043,xy=0.11354793341061754,y2=0.01985337671976352 a=cat,b=cat,i=1727,x=0.03389485595072095,y=0.21485029038316628,x2=0.0011488612599201233,xy=0.007282319643507987,y2=0.04616064727773087 a=dog,b=pan,i=1728,x=0.3055709310603073,y=0.7866221380232453,x2=0.09337359390906308,xy=0.24036885910841263,y2=0.6187743880282616 a=dog,b=hat,i=1729,x=0.265121445235708,y=0.9417304705530022,x2=0.07028938072387053,xy=0.24967294337551532,y2=0.8868562791679789 a=wye,b=wye,i=1730,x=0.7292610640760363,y=0.9200769530022502,x2=0.5318216995773127,xy=0.6709762977782583,y2=0.846541599445905 a=pan,b=cat,i=1731,x=0.8513480198069239,y=0.6986139757894256,x2=0.7247934508291705,xy=0.5947636248977698,y2=0.48806148716830816 a=pan,b=pan,i=1732,x=0.22934256104451933,y=0.27815947814507547,x2=0.052598010306459074,xy=0.06379380709659861,y2=0.07737269528194071 a=cat,b=dog,i=1733,x=0.4845474085415866,y=0.7667845346413503,x2=0.23478619112436724,xy=0.37154345917023274,y2=0.5879585225651521 a=wye,b=cat,i=1734,x=0.22892107237211945,y=0.01409474046015502,x2=0.05240485737600115,xy=0.0032265831009453873,y2=0.00019866170863913092 a=dog,b=hat,i=1735,x=0.33509194011827514,y=0.4721650657233548,x2=0.1122866083322297,xy=0.15821870792931186,y2=0.22293984928953997 a=hat,b=dog,i=1736,x=0.9876191923044322,y=0.6650527172550228,x2=0.975391669008059,xy=0.6568188274552735,y2=0.4422951167282893 a=pan,b=cat,i=1737,x=0.21297769770583086,y=0.42402822689699815,x2=0.045359499720076274,xy=0.09030855552680833,y2=0.17979993720541215 a=wye,b=wye,i=1738,x=0.2212273093526289,y=0.17299483060817533,x2=0.04894152240340377,xy=0.03827118090736044,y2=0.029927211417151278 a=wye,b=dog,i=1739,x=0.9098658106605109,y=0.4384104189889705,x2=0.8278557934089086,xy=0.39889465127541385,y2=0.19220369547808466 a=wye,b=cat,i=1740,x=0.9671747170035226,y=0.6012023947001768,x2=0.9354269332108441,xy=0.5814677559559835,y2=0.36144431939322713 a=pan,b=wye,i=1741,x=0.9550513985898104,y=0.9556429110874218,x2=0.9121231739483529,xy=0.91268809878648,y2=0.913253373511642 a=cat,b=hat,i=1742,x=0.13073846840344072,y=0.9445862471961136,x2=0.017092547120477468,xy=0.12349375923337375,y2=0.8922431783920375 a=dog,b=pan,i=1743,x=0.43414820746345273,y=0.7919077935124472,x2=0.18848466604372918,xy=0.343805349029767,y2=0.6271179534257527 a=pan,b=wye,i=1744,x=0.574874116705401,y=0.690880644329792,x2=0.330480250057815,xy=0.3971694001579475,y2=0.47731606470954857 a=wye,b=dog,i=1745,x=0.4278747685381553,y=0.13777943630640976,x2=0.18307681755157998,xy=0.05895234441892259,y2=0.018983173068912024 a=cat,b=wye,i=1746,x=0.6330381557702408,y=0.49246585024445066,x2=0.40073730666098767,xy=0.31174967361857064,y2=0.2425226136569897 a=dog,b=dog,i=1747,x=0.6022946305721123,y=0.3656813004827404,x2=0.36275882201599724,xy=0.22024788378138171,y2=0.13372281352274826 a=pan,b=cat,i=1748,x=0.8375798793797348,y=0.10960658652398791,x2=0.701540054341771,xy=0.09180427151998626,y2=0.01201360380944045 a=dog,b=pan,i=1749,x=0.3303535052740735,y=0.7742389849511115,x2=0.10913343844686729,xy=0.25577256259844033,y2=0.5994460058181276 a=dog,b=pan,i=1750,x=0.16063950494340218,y=0.8438432319496711,x2=0.02580505054846133,xy=0.13555455903023567,y2=0.7120714001072665 a=pan,b=dog,i=1751,x=0.33999616836593083,y=0.8343053621609845,x2=0.11559739450351439,xy=0.283660626381885,y2=0.6960654373305715 a=pan,b=pan,i=1752,x=0.7144541724297309,y=0.6139779382258238,x2=0.5104447645022516,xy=0.43865909974524336,y2=0.3769689086280335 a=cat,b=pan,i=1753,x=0.6544323239936926,y=0.3643199188569274,x2=0.4282816666877854,xy=0.23842273117473248,y2=0.13272900327591816 a=pan,b=cat,i=1754,x=0.23201094407326062,y=0.7181868648263479,x2=0.05382907816976566,xy=0.16662721252937618,y2=0.5157923728090988 a=cat,b=pan,i=1755,x=0.5986068909712109,y=0.9405308418235501,x2=0.3583302099182192,xy=0.5630082430865311,y2=0.8845982644213157 a=wye,b=hat,i=1756,x=0.9226172663827227,y=0.7237210152066758,x2=0.8512226202275278,xy=0.667717504673712,y2=0.5237721078517814 a=hat,b=wye,i=1757,x=0.7571687617686531,y=0.9668382924336988,x2=0.5733045337982754,xy=0.7320597527125426,y2=0.9347762837161104 a=cat,b=hat,i=1758,x=0.03268932597099139,y=0.11108559019828956,x2=0.0010685920324377321,xy=0.0036313130686718535,y2=0.012340008349702326 a=dog,b=pan,i=1759,x=0.47169323862792967,y=0.64448614816657,x2=0.222494511367305,xy=0.30399975847952915,y2=0.41536239517858203 a=wye,b=hat,i=1760,x=0.008043623002711664,y=0.1748775174539996,x2=6.469987100975221e-05,xy=0.0014066488220501017,y2=0.030582146110873933 a=wye,b=cat,i=1761,x=0.6779502269399476,y=0.06420237948280028,x2=0.4596165102079264,xy=0.04352601774044908,y2=0.004121945531253494 a=dog,b=wye,i=1762,x=0.22556796503914278,y=0.3846235121679249,x2=0.05088090685189994,xy=0.0867587429459268,y2=0.14793524611238987 a=wye,b=wye,i=1763,x=0.8244848473299208,y=0.1042535818976208,x2=0.6797752634766427,xy=0.08595549855445728,y2=0.010868809338483927 a=hat,b=wye,i=1764,x=0.2858369419763843,y=0.7808258749653562,x2=0.08170275739841089,xy=0.22318888031613202,y2=0.609689047015414 a=dog,b=hat,i=1765,x=0.7251456550779655,y=0.7159940591578817,x2=0.5258362210784516,xy=0.5191999810599737,y2=0.5126474927493803 a=wye,b=wye,i=1766,x=0.8849163471216128,y=0.41271092798688314,x2=0.7830769414030587,xy=0.36521464681132365,y2=0.17033031007979424 a=wye,b=wye,i=1767,x=0.47496268763755545,y=0.7981581076516883,x2=0.22558955464789007,xy=0.37909531996995116,y2=0.637056364810124 a=hat,b=dog,i=1768,x=0.9896393441122658,y=0.5323182982465756,x2=0.9793860314149557,xy=0.5268031315356986,y2=0.2833627706481302 a=cat,b=dog,i=1769,x=0.5164658322137244,y=0.5132175158316351,x2=0.266736955844215,xy=0.2650593114206457,y2=0.2633922185563946 a=cat,b=cat,i=1770,x=0.9668996720367993,y=0.07518686681810283,x2=0.93489497578487,xy=0.07269815686789813,y2=0.005653064941923132 a=wye,b=hat,i=1771,x=0.7743375502627112,y=0.7289800273885898,x2=0.5995986417468568,xy=0.5644766085985248,y2=0.5314118803314691 a=wye,b=dog,i=1772,x=0.9965249307670624,y=0.8078766237661098,x2=0.9930619376402985,xy=0.8050691965668507,y2=0.6526646392277285 a=dog,b=hat,i=1773,x=0.7116265206221457,y=0.7151885144596509,x2=0.5064123048527812,xy=0.5089471141338425,y2=0.5114946112150023 a=hat,b=hat,i=1774,x=0.4376901701869539,y=0.3605708398169458,x2=0.19157268507828465,xy=0.15781831224393192,y2=0.1300113305262976 a=hat,b=cat,i=1775,x=0.3195386981996169,y=0.289186013348143,x2=0.10210497964710584,xy=0.09240612224280265,y2=0.08362855031619233 a=wye,b=pan,i=1776,x=0.9853873547798295,y=0.5288800665158183,x2=0.9709882389599896,xy=0.5211517297398025,y2=0.2797141247577764 a=hat,b=dog,i=1777,x=0.27750099924010097,y=0.3780642470021439,x2=0.07700680457925452,xy=0.10491320632005129,y2=0.1429325748612981 a=wye,b=cat,i=1778,x=0.6611510227584849,y=0.4812147687163354,x2=0.43712067489459067,xy=0.3181556365032929,y2=0.23156765363071616 a=dog,b=wye,i=1779,x=0.48252312835071653,y=0.49616279916570294,x2=0.23282856939336205,xy=0.23941002602468328,y2=0.24617752327594566 a=wye,b=hat,i=1780,x=0.29436374758258366,y=0.6450398419304549,x2=0.08665001589086302,xy=0.1898763452107261,y2=0.4160763976776663 a=wye,b=dog,i=1781,x=0.8174855364721907,y=0.618298166324581,x2=0.6682826023412254,xy=0.5054498081976219,y2=0.38229262248033924 a=hat,b=dog,i=1782,x=0.5037632655338878,y=0.6824878230175867,x2=0.2537774277013664,xy=0.3438122944104536,y2=0.46578962856728473 a=dog,b=pan,i=1783,x=0.33081855088472034,y=0.9462338647932917,x2=0.1094409136094663,xy=0.3130317159489652,y2=0.8953585268816495 a=cat,b=hat,i=1784,x=0.7472029238789469,y=0.02836925274663693,x2=0.5583122094532473,xy=0.021197588600547962,y2=0.000804814501402567 a=wye,b=cat,i=1785,x=0.49573494524974115,y=0.5302430759087261,x2=0.24575313594176387,xy=0.2628600222046667,y2=0.2811577195491471 a=hat,b=hat,i=1786,x=0.6603210033010132,y=0.24360853029689966,x2=0.43602382740045664,xy=0.16085982913833405,y2=0.05934511603341548 a=hat,b=hat,i=1787,x=0.7526385589532756,y=0.044057683484496346,x2=0.5664648004232633,xy=0.03315951140859086,y2=0.0019410794740200622 a=cat,b=cat,i=1788,x=0.351674868639994,y=0.304405219667928,x2=0.12367521323295702,xy=0.10705166564004709,y2=0.0926625377610795 a=wye,b=cat,i=1789,x=0.6889201579026637,y=0.09338440873281562,x2=0.4746109839646311,xy=0.06433440160985822,y2=0.008720647794377569 a=pan,b=pan,i=1790,x=0.016229991240866548,y=0.2376523664051715,x2=0.00026341261567860486,xy=0.003857095825127141,y2=0.056478647257977896 a=hat,b=hat,i=1791,x=0.39265740728471266,y=0.23109005596489685,x2=0.15417983949555272,xy=0.09073922222445555,y2=0.05340261396585916 a=pan,b=wye,i=1792,x=0.7579241748695155,y=0.004836136766521948,x2=0.5744490548516359,xy=0.003665424968322274,y2=2.338821882450536e-05 a=pan,b=cat,i=1793,x=0.42631097946423413,y=0.2953869846632946,x2=0.18174105121175466,xy=0.12592671475279582,y2=0.08725347070847345 a=dog,b=dog,i=1794,x=0.23033848526517242,y=0.5171140657697146,x2=0.05305581779425405,xy=0.11911127061871082,y2=0.26740695701688477 a=dog,b=pan,i=1795,x=0.2146743945945675,y=0.7592223385380801,x2=0.04608509569454407,xy=0.1629855958883341,y2=0.5764185593352311 a=pan,b=dog,i=1796,x=0.5358576113037925,y=0.5220496229435341,x2=0.28714337959220637,xy=0.27974426393256774,y2=0.2725358088154861 a=dog,b=hat,i=1797,x=0.2972846079571114,y=0.3209019558758809,x2=0.08837813812821343,xy=0.09539921214523152,y2=0.10297806528496581 a=pan,b=wye,i=1798,x=0.949098867301435,y=0.3285880721086816,x2=0.9007886599128669,xy=0.3118625670471119,y2=0.10797012113210012 a=cat,b=pan,i=1799,x=0.4169070877203852,y=0.11276362422911823,x2=0.17381151979149295,xy=0.047011954178157546,y2=0.01271563494928578 a=hat,b=dog,i=1800,x=0.43455436546868176,y=0.2225852015143457,x2=0.18883749654788864,xy=0.09672537100678515,y2=0.04954417193318188 a=wye,b=hat,i=1801,x=0.02277217074068183,y=0.45059087400220166,x2=0.0005185717602427657,xy=0.01026093231697119,y2=0.20303213573406798 a=cat,b=wye,i=1802,x=0.7912072275392371,y=0.5518211868607243,x2=0.6260088769103261,xy=0.436604911353485,y2=0.30450662226837844 a=pan,b=wye,i=1803,x=0.14189506146024844,y=0.8267106493322868,x2=0.020134208466807683,xy=0.11730615839684673,y2=0.6834504977194112 a=wye,b=dog,i=1804,x=0.46150772541024665,y=0.7699528297226281,x2=0.21298938061333964,xy=0.35533917911847307,y2=0.5928273599978824 a=hat,b=hat,i=1805,x=0.6543836401812494,y=0.17693895697078177,x2=0.4282179485368629,xy=0.11578595875241363,y2=0.03130739449390816 a=pan,b=wye,i=1806,x=0.7075778031502546,y=0.27140640944755257,x2=0.5006663475109405,xy=0.19204115095779775,y2=0.07366143908921255 a=wye,b=dog,i=1807,x=0.7455539798869707,y=0.7941736168162291,x2=0.5558507369253015,xy=0.5920993007385696,y2=0.6307117336469708 a=cat,b=dog,i=1808,x=0.7700874896297054,y=0.9801151721491236,x2=0.5930347416841817,xy=0.7547744324683051,y2=0.9606257506769061 a=cat,b=wye,i=1809,x=0.6544385781489724,y=0.5312971566122922,x2=0.4282898525696487,xy=0.3477013557479404,y2=0.2822766686243065 a=pan,b=dog,i=1810,x=0.5849172939305057,y=0.028816292677288025,x2=0.3421282407389856,xy=0.01685514793390876,y2=0.0008303787236631235 a=cat,b=pan,i=1811,x=0.08577479332166249,y=0.3954629030828457,x2=0.0073573151693739165,xy=0.03392074877831573,y2=0.15639090771471223 a=pan,b=pan,i=1812,x=0.5024959150799869,y=0.4791330917679748,x2=0.25250214467207344,xy=0.24076242139305185,y2=0.22956851962713856 a=pan,b=dog,i=1813,x=0.4274637251967476,y=0.8988706929897433,x2=0.18272523635908053,xy=0.3842346148955777,y2=0.8079685227158614 a=wye,b=cat,i=1814,x=0.23106677027476674,y=0.9175553062756457,x2=0.053391852325211826,xy=0.21201654116958787,y2=0.841907740074594 a=dog,b=wye,i=1815,x=0.2091223069008652,y=0.9549106528911347,x2=0.04373213924353965,xy=0.19969311861680544,y2=0.9118543550049732 a=cat,b=hat,i=1816,x=0.636789060549747,y=0.01752449017649793,x2=0.4055003076358294,xy=0.011159403636105389,y2=0.0003071077559461725 a=pan,b=pan,i=1817,x=0.38457200000249525,y=0.274983657709687,x2=0.1478956231859192,xy=0.10575101521341591,y2=0.07561601200739831 a=pan,b=cat,i=1818,x=0.47722507056186736,y=0.3293445715952592,x2=0.2277437679727793,xy=0.15717148641871556,y2=0.10846784683926482 a=cat,b=dog,i=1819,x=0.5193588839557899,y=0.09317774875313545,x2=0.26973365034380364,xy=0.04839269160194142,y2=0.008682092862702434 a=dog,b=wye,i=1820,x=0.1673646057996403,y=0.462003081217774,x2=0.028010911274468992,xy=0.07732296356623194,y2=0.2134468470547171 a=cat,b=dog,i=1821,x=0.2936142514969645,y=0.9052678886360254,x2=0.08620932868212274,xy=0.265799553526104,y2=0.8195099501955272 a=dog,b=hat,i=1822,x=0.5638370233255022,y=0.9899497757638864,x2=0.31791218887256295,xy=0.5581703348084581,y2=0.980000558534969 a=pan,b=cat,i=1823,x=0.040153720931592085,y=0.36075389102759503,x2=0.0016123213046521764,xy=0.014485611065308032,y2=0.1301433698915499 a=wye,b=pan,i=1824,x=0.12093653700249474,y=0.30926776170280323,x2=0.014625645982155778,xy=0.037401772106849786,y2=0.09564654842866188 a=pan,b=wye,i=1825,x=0.2099831282159229,y=0.35389600563007906,x2=0.04409291413534472,xy=0.07431219032532387,y2=0.12524238280092495 a=hat,b=wye,i=1826,x=0.9724611126180899,y=0.1454173477404106,x2=0.9456806155544133,xy=0.14141271577761136,y2=0.0211462050238555 a=hat,b=cat,i=1827,x=0.13365853083503354,y=0.7169278037197248,x2=0.017864602864979613,xy=0.0958235169599657,y2=0.5139854757463882 a=pan,b=cat,i=1828,x=0.11022518131579606,y=0.7706028655923053,x2=0.012149590596100117,xy=0.08493984058238387,y2=0.5938287764590725 a=hat,b=dog,i=1829,x=0.48946172894630635,y=0.0784572450203207,x2=0.23957278410310748,xy=0.03840181879601015,y2=0.006155539296178637 a=cat,b=cat,i=1830,x=0.9280851829589482,y=0.5177457332043888,x2=0.8613421068279442,xy=0.4805121435272099,y2=0.2680606442513501 a=cat,b=wye,i=1831,x=0.04642027830087225,y=0.6494131546788959,x2=0.0021548422375304312,xy=0.030145939372441748,y2=0.4217374454699956 a=hat,b=wye,i=1832,x=0.6857514350854769,y=0.36289271210344964,x2=0.470255030721791,xy=0.2488541981070014,y2=0.1316911204977972 a=dog,b=wye,i=1833,x=0.09500906973160539,y=0.2740836896748564,x2=0.009026723331265056,xy=0.026040436384614125,y2=0.07512186894578299 a=pan,b=cat,i=1834,x=0.3891034194374777,y=0.41285451787678373,x2=0.15140147101793772,xy=0.16064310463606782,y2=0.17044885293127154 a=cat,b=hat,i=1835,x=0.8648307282983019,y=0.877800241267602,x2=0.7479321886089713,xy=0.7591486219558854,y2=0.7705332635694604 a=wye,b=hat,i=1836,x=0.1083201113100416,y=0.8830714691889023,x2=0.011733246514219801,xy=0.09565439983726387,y2=0.7798152196954465 a=cat,b=pan,i=1837,x=0.5910333246072961,y=0.4700355030879563,x2=0.3493203907963534,xy=0.2778066460735378,y2=0.22093337416314815 a=wye,b=wye,i=1838,x=0.976156478807367,y=0.4963443661617175,x2=0.9528814711175976,xy=0.4845097687482966,y2=0.2463577298204771 a=cat,b=cat,i=1839,x=0.5857391367230061,y=0.21042599768926196,x2=0.3430903362890125,xy=0.12325474223058558,y2=0.044279100503521275 a=cat,b=wye,i=1840,x=0.4625995520167725,y=0.4914487558439634,x2=0.2139983455261186,xy=0.22734397429261768,y2=0.24152187962057955 a=cat,b=dog,i=1841,x=0.5083785764238301,y=0.17967790520934135,x2=0.2584487769667201,xy=0.09134439766514084,y2=0.032284149620417056 a=dog,b=hat,i=1842,x=0.08973952346955483,y=0.4080088536410058,x2=0.008053182072542782,xy=0.0366145200971032,y2=0.1664712246494477 a=dog,b=wye,i=1843,x=0.7413358080887688,y=0.8059568250500672,x2=0.5495787803546278,xy=0.59748465418315,y2=0.6495664038447846 a=dog,b=dog,i=1844,x=0.135674020550268,y=0.5106329505716233,x2=0.018407439852274544,xy=0.0692796254294984,y2=0.26074601020948185 a=cat,b=cat,i=1845,x=0.014689676776337035,y=0.316038734586748,x2=0.00021578660379325564,xy=0.004642506859881897,y2=0.09988048175919297 a=wye,b=cat,i=1846,x=0.8211819138194043,y=0.8866389100790875,x2=0.6743397355840995,xy=0.7280918370454957,y2=0.7861285568662322 a=wye,b=cat,i=1847,x=0.9385592125942065,y=0.4793262044790002,x2=0.8808933955454569,xy=0.44987602505158003,y2=0.22975361030024433 a=wye,b=pan,i=1848,x=0.7893143757600549,y=0.6919112149444487,x2=0.6230171837814852,xy=0.5461354687052588,y2=0.47874112936590313 a=wye,b=cat,i=1849,x=0.12371548179815062,y=0.8684796337803941,x2=0.015305520436548536,xy=0.10744437632502285,y2=0.7542568742913274 a=dog,b=hat,i=1850,x=0.1473330723141124,y=0.7129239980300203,x2=0.021707034197515476,xy=0.10503728295622311,y2=0.5082606269671084 a=hat,b=hat,i=1851,x=0.504310464747479,y=0.9695595351812518,x2=0.25432904485381824,xy=0.4889590197876068,y2=0.9400456922608851 a=wye,b=wye,i=1852,x=0.7141968633631569,y=0.07349430152204495,x2=0.5100771596377718,xy=0.05248939962211059,y2=0.005401412356213258 a=hat,b=pan,i=1853,x=0.6941633575842103,y=0.15744572867390538,x2=0.48186276701258424,xy=0.10929305565357074,y2=0.02478915747765703 a=dog,b=cat,i=1854,x=0.5301548545100264,y=0.38765241432256414,x2=0.28106416976054727,xy=0.20551580931563948,y2=0.15027439433011294 a=hat,b=hat,i=1855,x=0.6719990370772357,y=0.4520550328185472,x2=0.4515827058327321,xy=0.3037805467599819,y2=0.2043537526965778 a=dog,b=wye,i=1856,x=0.4772555680520256,y=0.6322990566715125,x2=0.22777287723666167,xy=0.30176824547052267,y2=0.3998020970676846 a=dog,b=wye,i=1857,x=0.7986025159140517,y=0.9080985637180121,x2=0.6377659784242533,xy=0.7252097976831413,y2=0.8246430014267165 a=dog,b=wye,i=1858,x=0.23880474055835288,y=0.4703603772135009,x2=0.05702770411314223,xy=0.11232428784939907,y2=0.22123888445242684 a=cat,b=wye,i=1859,x=0.9548889864289271,y=0.42094008659908877,x2=0.9118129764032636,xy=0.40195105263990866,y2=0.17719055650604834 a=pan,b=dog,i=1860,x=0.5708603602987686,y=0.7716128562092849,x2=0.3258815509604399,xy=0.44048319310679435,y2=0.5953863998674506 a=dog,b=hat,i=1861,x=0.6081637768881512,y=0.6598151702145101,x2=0.3698631795188609,xy=0.4012756859657548,y2=0.4353560588452029 a=dog,b=hat,i=1862,x=0.18227050655777366,y=0.21199911021304896,x2=0.03322253756082741,xy=0.03864118520832972,y2=0.044943622731124476 a=cat,b=cat,i=1863,x=0.5097463310635671,y=0.057005544836321254,x2=0.25984132203276783,xy=0.029058367330594435,y2=0.003249632142085833 a=wye,b=cat,i=1864,x=0.960170183444857,y=0.6035854062372394,x2=0.9219267811765305,xy=0.5795447102314487,y2=0.36431534262257337 a=hat,b=pan,i=1865,x=0.9678322067419,y=0.14285458653365724,x2=0.9366991804068958,xy=0.13825926972807118,y2=0.020407432893702164 a=dog,b=hat,i=1866,x=0.4458172422957142,y=0.721500218126486,x2=0.19875301352815553,xy=0.32165723756090625,y2=0.5205625647565669 a=wye,b=pan,i=1867,x=0.3324294042337804,y=0.4711395763539047,x2=0.11050930879922619,xy=0.15662064867828424,y2=0.22197250040693678 a=dog,b=cat,i=1868,x=0.5202033203165165,y=0.9685070508492729,x2=0.2706114944683283,xy=0.5038205836017491,y2=0.9380059075447561 a=dog,b=dog,i=1869,x=0.04263265911354075,y=0.027874483930962368,x2=0.001817543623091369,xy=0.001188363371394588,y2=0.0007769868544174793 a=cat,b=dog,i=1870,x=0.6075625460293752,y=0.2590439713720014,x2=0.3691322473376967,xy=0.15738541478033377,y2=0.0671037791041783 a=pan,b=cat,i=1871,x=0.12168877974431747,y=0.16099253350193754,x2=0.014808159115661008,xy=0.019590984949796927,y2=0.025918595843372482 a=pan,b=wye,i=1872,x=0.5238972446998524,y=0.005571739317915103,x2=0.27446832300409707,xy=0.002919018876841558,y2=3.104427902680106e-05 a=hat,b=hat,i=1873,x=0.8435735251414606,y=0.008669283793229066,x2=0.7116162923195903,xy=0.007313178289905976,y2=7.515648148754414e-05 a=hat,b=wye,i=1874,x=0.3722275553134189,y=0.27490108794464796,x2=0.13855335293460433,xy=0.10232575991863548,y2=0.07557060815315107 a=dog,b=cat,i=1875,x=0.5274569201354636,y=0.30887322350847013,x2=0.2782108025987889,xy=0.16291731918409033,y2=0.09540266820051334 a=pan,b=wye,i=1876,x=0.9908531016291003,y=0.318873165751998,x2=0.9817898690080082,xy=0.3159564653116574,y2=0.10168009583670118 a=wye,b=cat,i=1877,x=0.4985270079406078,y=0.859770421815565,x2=0.24852917764621482,xy=0.42861877590354786,y2=0.7392051782289145 a=wye,b=cat,i=1878,x=0.76078545836753,y=0.5617936421705944,x2=0.5787945136634927,xy=0.42740443356671975,y2=0.3156120963833018 a=wye,b=hat,i=1879,x=0.12661485498555325,y=0.7714852316975519,x2=0.016031321503012678,xy=0.09768149073488148,y2=0.5951894627274253 a=pan,b=cat,i=1880,x=0.6473054872084413,y=0.2763324345662559,x2=0.4190043937701575,xy=0.178871501188405,y2=0.0763596143933141 a=hat,b=hat,i=1881,x=0.7028567609419808,y=0.8559547631237583,x2=0.49400762640185275,xy=0.6016135923220252,y2=0.7326585565142492 a=wye,b=pan,i=1882,x=0.7039035324291367,y=0.5825785397127933,x2=0.4954801829662167,xy=0.4100790920212433,y2=0.3393977549338906 a=hat,b=wye,i=1883,x=0.4354395504414025,y=0.4313558991052089,x2=0.1896076020886107,xy=0.18782941878661913,y2=0.18606791169286316 a=wye,b=hat,i=1884,x=0.4680423469534515,y=0.4600259999648787,x2=0.21906363854169505,xy=0.2153116486831702,y2=0.21162392064368657 a=cat,b=cat,i=1885,x=0.5621276986405592,y=0.07370622847695374,x2=0.3159875495789314,xy=0.04143231258922526,y2=0.005432608116296906 a=wye,b=cat,i=1886,x=0.05295361060059567,y=0.2703073644974977,x2=0.002804084875639518,xy=0.014313750922073772,y2=0.07306607130158309 a=cat,b=wye,i=1887,x=0.4956315475738545,y=0.6284563971450301,x2=0.24565063095045403,xy=0.3114828166996802,y2=0.3949574431125118 a=hat,b=pan,i=1888,x=0.7225838421443049,y=0.2568173469958308,x2=0.5221274089280258,xy=0.1855720653215546,y2=0.06595514971797697 a=cat,b=cat,i=1889,x=0.5249774787875754,y=0.7999289864413597,x2=0.2756013532341592,xy=0.41994470251108557,y2=0.639886383349101 a=wye,b=hat,i=1890,x=0.5932896697959987,y=0.5666936479678745,x2=0.35199263228664524,xy=0.3362134872783502,y2=0.3211416906471372 a=pan,b=dog,i=1891,x=0.6936886019849191,y=0.9085575716131387,x2=0.48120387652379154,xy=0.6302560316751312,y2=0.8254768609355636 a=hat,b=pan,i=1892,x=0.6278789321927271,y=0.9614314343646176,x2=0.39423195349147916,xy=0.6036625423853781,y2=0.9243504029844061 a=pan,b=wye,i=1893,x=0.5068215741396227,y=0.09461873694597445,x2=0.25686810801336507,xy=0.04795481720206164,y2=0.00895270538125151 a=hat,b=dog,i=1894,x=0.9970136511026203,y=0.2054109087831395,x2=0.9940362204849775,xy=0.2047974801421852,y2=0.04219364144711526 a=dog,b=hat,i=1895,x=0.45154718754362844,y=0.19803710821245812,x2=0.20389486257856076,xy=0.08942309924260866,y2=0.03921869622915285 a=dog,b=pan,i=1896,x=0.45178612360197967,y=0.21143170418181334,x2=0.20411070147930324,xy=0.09552191003886193,y2=0.044703365533225826 a=dog,b=cat,i=1897,x=0.8284592168198257,y=0.37414538945545384,x2=0.686344673933719,xy=0.309964196325014,y2=0.13998477245077323 a=pan,b=cat,i=1898,x=0.6578753840992824,y=0.5606141231298089,x2=0.4328000210037783,xy=0.36881423158550536,y2=0.31428819505260447 a=dog,b=cat,i=1899,x=0.5578615396986291,y=0.24893276783730456,x2=0.3112094974749251,xy=0.1388700171471601,y2=0.06196752290314137 a=pan,b=pan,i=1900,x=0.1999163967434261,y=0.23106421121292509,x2=0.03996656568687495,xy=0.04619352452204994,y2=0.05339066970345126 a=wye,b=pan,i=1901,x=0.7221043028648414,y=0.9545189972805478,x2=0.5214346242159186,xy=0.6892622751025174,y2=0.9111065161694624 a=cat,b=wye,i=1902,x=0.7857344089281942,y=0.39748580921982657,x2=0.6173785613737388,xy=0.3123182773646854,y2=0.15799496853114037 a=dog,b=cat,i=1903,x=0.4377556052325614,y=0.9205889212151315,x2=0.19162996991252615,xy=0.4029929603769207,y2=0.8474839618640395 a=dog,b=wye,i=1904,x=0.6364594734271972,y=0.9988277206721594,x2=0.4050806613152252,xy=0.6357133651434902,y2=0.9976568155831413 a=cat,b=wye,i=1905,x=0.7494980960150721,y=0.3233057611615623,x2=0.5617473959302183,xy=0.2423170524212946,y2=0.10452661520025716 a=pan,b=dog,i=1906,x=0.3596467807923023,y=0.03607296469435961,x2=0.12934580693426634,xy=0.01297352562596081,y2=0.0013012587818405149 a=pan,b=dog,i=1907,x=0.4534172862657031,y=0.45625122636763116,x2=0.20558723548455454,xy=0.20687219291501033,y2=0.20816518156196742 a=dog,b=dog,i=1908,x=0.3941709634584213,y=0.6681118838539379,x2=0.1553707484337401,xy=0.26335030495672757,y2=0.44637348934685783 a=pan,b=cat,i=1909,x=0.18925668401877693,y=0.31859001901289064,x2=0.03581809244578318,xy=0.06029529055985878,y2=0.10149960021463401 a=wye,b=dog,i=1910,x=0.8598761609531259,y=0.8564524122457609,x2=0.7393870121754861,xy=0.7364430122809288,y2=0.7335107344415827 a=hat,b=dog,i=1911,x=0.2951437397116916,y=0.30801314344950215,x2=0.08710982709100276,xy=0.09090815103803979,y2=0.09487209653764359 a=dog,b=cat,i=1912,x=0.46852111498594173,y=0.42442338462650697,x2=0.21951203518767004,xy=0.19885131739131826,y2=0.18013520941781988 a=dog,b=pan,i=1913,x=0.857345461986018,y=0.32535406406240897,x2=0.7350412411880187,xy=0.2789408303626145,y2=0.10585526700192611 a=hat,b=hat,i=1914,x=0.35674542509750684,y=0.5640334157488235,x2=0.12726729832800088,xy=0.20121634067051283,y2=0.31813369408128517 a=wye,b=hat,i=1915,x=0.3201029255847997,y=0.7641268225779082,x2=0.10246588296794781,xy=0.2445992314250056,y2=0.58388980098301 a=hat,b=hat,i=1916,x=0.26849889363278556,y=0.5960659506515633,x2=0.0720916558820299,xy=0.1600430482821193,y2=0.35529461752615193 a=hat,b=cat,i=1917,x=0.15341962994596148,y=0.6464271573257129,x2=0.02353758285275576,xy=0.09917461526393069,y2=0.41786806972820195 a=cat,b=hat,i=1918,x=0.2059147752091829,y=0.15303076691478756,x2=0.042400894649448316,xy=0.03151129596934734,y2=0.02341841562252804 a=dog,b=cat,i=1919,x=0.6520094436702853,y=0.9006621596644201,x2=0.425116314635235,xy=0.5872402336576763,y2=0.8111923258513773 a=cat,b=cat,i=1920,x=0.4943396218474403,y=0.9469147048476291,x2=0.24437166172827027,xy=0.46809745711615747,y2=0.8966474582566725 a=dog,b=pan,i=1921,x=0.430692526311669,y=0.6280723581906466,x2=0.18549605222072768,xy=0.270506070655657,y2=0.3944748871231598 a=cat,b=pan,i=1922,x=0.830265632162649,y=0.20797913700668036,x2=0.6893410199504433,xy=0.17267792966349366,y2=0.04325532143004352 a=dog,b=cat,i=1923,x=0.9476536672136628,y=0.20591241384973957,x2=0.8980474729835036,xy=0.19513365410952313,y2=0.04239992217742642 a=pan,b=cat,i=1924,x=0.5457406649999199,y=0.999319317626043,x2=0.29783287343455483,xy=0.5453691889485028,y2=0.9986390985805802 a=cat,b=dog,i=1925,x=0.8347298456786796,y=0.5148043426639031,x2=0.6967739152667523,xy=0.4297225495065539,y2=0.26502351122561335 a=wye,b=wye,i=1926,x=0.1790291945225012,y=0.7077818317950146,x2=0.03205145249137558,xy=0.12671361124392191,y2=0.5009551214191064 a=wye,b=wye,i=1927,x=0.36165393273394675,y=0.18598534813927592,x2=0.13079356706193007,xy=0.06726233258546137,y2=0.034590549722487665 a=cat,b=hat,i=1928,x=0.44912201651560346,y=0.5921420879161559,x2=0.201710585719042,xy=0.26594404858866366,y2=0.35063225228170447 a=dog,b=dog,i=1929,x=0.2542943701307576,y=0.5561419469051366,x2=0.06466562668019875,xy=0.14142376609153495,y2=0.3092938651074358 a=hat,b=hat,i=1930,x=0.4145256779871679,y=0.43548570839091383,x2=0.1718315377107212,xy=0.18052000852446565,y2=0.18964780221273603 a=hat,b=cat,i=1931,x=0.1771081870965595,y=0.03921409808618914,x2=0.03136730993662993,xy=0.006945137820671623,y2=0.0015377454887132629 a=hat,b=hat,i=1932,x=0.5637566075428295,y=0.8513241017800217,x2=0.3178215125481999,xy=0.47993958753895155,y2=0.7247527262715607 a=hat,b=hat,i=1933,x=0.5978661283989376,y=0.6146801264132213,x2=0.35744390748673494,xy=0.3674964273824422,y2=0.37783165780737377 a=wye,b=wye,i=1934,x=0.0594028946154872,y=0.2812140461609792,x2=0.0035287038886986782,xy=0.016704928348495404,y2=0.07908133975822935 a=pan,b=wye,i=1935,x=0.8031983433337532,y=0.6001926367446158,x2=0.6451275787340857,xy=0.4820737315143925,y2=0.3602312012024543 a=cat,b=cat,i=1936,x=0.9452450634561056,y=0.8383363244626086,x2=0.893488229988137,xy=0.7924332722142168,y2=0.7028077929134763 a=dog,b=dog,i=1937,x=0.5719613387155258,y=0.44354432565419655,x2=0.3271397729852564,xy=0.2536902062808494,y2=0.19673156882003595 a=pan,b=pan,i=1938,x=0.6891389849896078,y=0.835439567532576,x2=0.4749125406325069,xy=0.5757339755895563,y2=0.6979592709990176 a=pan,b=dog,i=1939,x=0.09114806381008289,y=0.2555433546853909,x2=0.008307969536326943,xy=0.023292281999106657,y2=0.0653024061238635 a=hat,b=dog,i=1940,x=0.5236878163188348,y=0.1477355232703238,x2=0.2742489289607896,xy=0.07736729357415627,y2=0.021825784835956385 a=dog,b=dog,i=1941,x=0.05667870325475044,y=0.09362041882224037,x2=0.0032124754026400582,xy=0.0053062839370112145,y2=0.008764782820451698 a=wye,b=dog,i=1942,x=0.1950731031569587,y=0.4354796173007899,x2=0.03805351557528545,xy=0.08495036030846988,y2=0.18964249708444242 a=pan,b=cat,i=1943,x=0.9997301774748071,y=0.8408385083267972,x2=0.9994604277538093,xy=0.8406116311572011,y2=0.7070093970852334 a=cat,b=pan,i=1944,x=0.5200891211928741,y=0.5027071845601069,x2=0.2704926939831761,xy=0.26145253783520994,y2=0.2527145134083494 a=cat,b=wye,i=1945,x=0.28650709092005766,y=0.29700166356358126,x2=0.0820863131474742,xy=0.08509308262601935,y2=0.08820998815953471 a=dog,b=pan,i=1946,x=0.1928207092593428,y=0.2931434667127827,x2=0.03717982591927601,xy=0.056524131166301304,y2=0.08593309207638833 a=pan,b=dog,i=1947,x=0.6191864723715613,y=0.6597169323541499,x2=0.3833918875679383,xy=0.408487800108154,y2=0.4352264308347699 a=hat,b=cat,i=1948,x=0.06105819430380832,y=0.2216297398784508,x2=0.003728103091641611,xy=0.013532311721000945,y2=0.04911974159858977 a=wye,b=cat,i=1949,x=0.39006512687798656,y=0.7411698261501961,x2=0.15215080320633975,xy=0.28910450227541146,y2=0.549332711195512 a=dog,b=hat,i=1950,x=0.5647214293253914,y=0.775378992255826,x2=0.318910292739313,xy=0.4378731327755916,y2=0.6012125816316602 a=dog,b=hat,i=1951,x=0.5079065817824603,y=0.973907719639408,x2=0.25796909581794303,xy=0.4946541408536024,y2=0.9484962463732318 a=wye,b=pan,i=1952,x=0.637860906606702,y=0.9633937557590291,x2=0.40686653617712387,xy=0.61451121446769,y2=0.9281275286354878 a=dog,b=wye,i=1953,x=0.08307786246752591,y=0.02792209445052518,x2=0.0069019312321731505,xy=0.0023197079225659996,y2=0.0007796433585040491 a=dog,b=cat,i=1954,x=0.41753539608338086,y=0.2160002459363365,x2=0.17433580698250573,xy=0.09018774824113593,y2=0.04665610624455785 a=wye,b=wye,i=1955,x=0.5512559258404929,y=0.205687403628523,x2=0.303883095774259,xy=0.11338640012096861,y2=0.04230730801144294 a=hat,b=pan,i=1956,x=0.5587500096459429,y=0.4137374102923569,x2=0.3122015732793413,xy=0.23117578199174185,y2=0.17117864467542607 a=pan,b=cat,i=1957,x=0.754814481507741,y=0.13735538214099252,x2=0.5697449014937999,xy=0.1036778315530509,y2=0.01886650100309809 a=hat,b=dog,i=1958,x=0.346044502438559,y=0.7524672264370861,x2=0.11974679766794986,xy=0.26038714697374393,y2=0.566206926861921 a=hat,b=pan,i=1959,x=0.6704008281574495,y=0.9030997339750632,x2=0.4494372703941941,xy=0.6054388095656547,y2=0.8155891295058298 a=pan,b=wye,i=1960,x=0.424121628516242,y=0.4700100410762793,x2=0.1798791557752692,xy=0.1993414240402574,y2=0.22090943871252575 a=dog,b=cat,i=1961,x=0.26082501706717964,y=0.5271575259299263,x2=0.06802968952809456,xy=0.1374958706977652,y2=0.27789505714456086 a=cat,b=wye,i=1962,x=0.4004204247150758,y=0.45948897969094016,x2=0.16033651652900166,xy=0.1839887723997431,y2=0.21113012245742122 a=dog,b=pan,i=1963,x=0.566258344848614,y=0.7590416956530732,x2=0.32064851311069187,xy=0.42981369425159466,y2=0.5761442957398927 a=hat,b=wye,i=1964,x=0.543750094243006,y=0.4080083600528972,x2=0.29566416498927794,xy=0.22185458423069718,y2=0.1664708218730546 a=hat,b=dog,i=1965,x=0.13957352000394396,y=0.7345129593607466,x2=0.019480767486291347,xy=0.10251855922649324,y2=0.5395092874688817 a=dog,b=cat,i=1966,x=0.7217547939582643,y=0.1467544702092567,x2=0.5209299826017365,xy=0.1059207424083363,y2=0.02153687452639961 a=cat,b=wye,i=1967,x=0.9123342559478345,y=0.09180218863804412,x2=0.8323537945758888,xy=0.08375428146547273,y2=0.008427641838735038 a=pan,b=wye,i=1968,x=0.9571434219694788,y=0.7679577339312599,x2=0.9161235302194437,xy=0.7350456933828926,y2=0.5897590811048358 a=cat,b=pan,i=1969,x=0.545058440887102,y=0.2632010695311473,x2=0.29708870398227843,xy=0.14345996459846486,y2=0.06927480300233983 a=pan,b=pan,i=1970,x=0.7397159384861364,y=0.1167771663731686,x2=0.5471796696504255,xy=0.0863819312174801,y2=0.013636906586146698 a=cat,b=hat,i=1971,x=0.9726274282842899,y=0.621723092207134,x2=0.9460041142509116,xy=0.6047049322783812,y2=0.3865396033836004 a=pan,b=hat,i=1972,x=0.9551191389894814,y=0.554583451306824,x2=0.9122525696640084,xy=0.5296932685099887,y2=0.3075628044633884 a=dog,b=dog,i=1973,x=0.20712014040863647,y=0.1490765678592062,x2=0.042898752562893286,xy=0.03087675966663641,y2=0.02222382308468051 a=hat,b=cat,i=1974,x=0.3485984155594296,y=0.8706537631090331,x2=0.12152085533054477,xy=0.3035085223206639,y2=0.7580379752159203 a=dog,b=dog,i=1975,x=0.8553530567509867,y=0.044355818311703654,x2=0.7316288516932568,xy=0.03793988477760711,y2=0.0019674386181008654 a=dog,b=hat,i=1976,x=0.02157953697752668,y=0.4995753400915781,x2=0.0004656764161644414,xy=0.010780604524566677,y2=0.24957552042761594 a=pan,b=dog,i=1977,x=0.002345497877634606,y=0.33024301683227086,x2=5.50136029398844e-06,xy=0.0007745842950837407,y2=0.10906045016647954 a=hat,b=dog,i=1978,x=0.4143609240891579,y=0.9913997989414325,x2=0.1716949754120209,xy=0.4107973368311773,y2=0.9828735613411128 a=dog,b=pan,i=1979,x=0.25986284555401273,y=0.5432073452922572,x2=0.06752869849942868,xy=0.1411594064734871,y2=0.2950742199794616 a=hat,b=wye,i=1980,x=0.03283655272761554,y=0.1853095711969286,x2=0.0010782391950334756,xy=0.006084927505539772,y2=0.03433963717718955 a=dog,b=pan,i=1981,x=0.9300610248275437,y=0.43854544233750237,x2=0.8650135099032609,xy=0.4078740235338659,y2=0.1923221049949956 a=hat,b=dog,i=1982,x=0.45684863357423755,y=0.4017729244389676,x2=0.20871067399864796,xy=0.18354941153706775,y2=0.1614214828122404 a=hat,b=dog,i=1983,x=0.6601665924719262,y=0.25346104542215886,x2=0.4358199298159943,xy=0.16732651468071874,y2=0.06424250154649368 a=wye,b=dog,i=1984,x=0.39291855423695565,y=0.06200108158497475,x2=0.15438499026365946,xy=0.024361375337495814,y2=0.003844134117706695 a=pan,b=wye,i=1985,x=0.4085531920151485,y=0.7697975606046983,x2=0.1669157107057668,xy=0.3145032505905242,y2=0.5925882843129441 a=cat,b=hat,i=1986,x=0.19941490783677196,y=0.2304215691718211,x2=0.03976630546754825,xy=0.04594949598000308,y2=0.05309409953960434 a=dog,b=dog,i=1987,x=0.9512236571317361,y=0.08232357605490426,x2=0.9048264458870746,xy=0.07830813308310865,y2=0.0067771711744676055 a=hat,b=cat,i=1988,x=0.3795926086837851,y=0.5503100589330622,x2=0.1440905485673612,xy=0.20889363085532858,y2=0.30284116096291036 a=hat,b=cat,i=1989,x=0.43724725835821965,y=0.9686657648338483,x2=0.19118516494177967,xy=0.4235464499390681,y2=0.9383133639611442 a=dog,b=hat,i=1990,x=0.9644509448856519,y=0.6570664073250574,x2=0.9301656250908267,xy=0.6337083173972722,y2=0.43173626363505824 a=cat,b=pan,i=1991,x=0.9518161607677816,y=0.9663159136351449,x2=0.9059540038987195,xy=0.9197551030050148,y2=0.9337664449445249 a=dog,b=hat,i=1992,x=0.32417090539430016,y=0.6595975315610155,x2=0.10508677590416031,xy=0.21382232900197987,y2=0.4350689036413849 a=hat,b=cat,i=1993,x=0.9679659795942246,y=0.3623190225967923,x2=0.9369581376518068,xy=0.350712487633526,y2=0.13127507413549486 a=wye,b=hat,i=1994,x=0.9584661091937297,y=0.7356419740173126,x2=0.9186572824729665,xy=0.7050879005959684,y2=0.5411691139360884 a=wye,b=pan,i=1995,x=0.0918788372083641,y=0.3995465991850543,x2=0.008441720726761071,xy=0.0367098769436791,y2=0.15963748492034244 a=cat,b=wye,i=1996,x=0.19549812467393535,y=0.9499072727966543,x2=0.03821951675102557,xy=0.18570509044587824,y2=0.9023238269119774 a=cat,b=hat,i=1997,x=0.7643927480995454,y=0.17816043420320515,x2=0.584296273347175,xy=0.13618454390319623,y2=0.03174114031547459 a=dog,b=wye,i=1998,x=0.544898947312341,y=0.9687310115367199,x2=0.2969148627820974,xy=0.527860508415178,y2=0.9384397727129565 a=hat,b=dog,i=1999,x=0.010819574860139292,y=0.8983779455002124,x2=0.00011706320015415817,xy=0.009720067434037685,y2=0.8070829329611827 a=wye,b=cat,i=2000,x=0.10887569736363611,y=0.3480524315645718,x2=0.01185391747641808,xy=0.037894451205701986,y2=0.12114049511801092 miller-5.6.2/c/reg_test/input/abixy-wide-short000066400000000000000000000047621354153536500213520ustar00rootroot00000000000000a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 a=wye,b=cat,i=3,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 a=dog,b=hat,i=4,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 a=dog,b=pan,i=5,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 a=wye,b=cat,i=6,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 a=dog,b=hat,i=7,x=0.8500003149528544,y=0.2984098741712895,x2=0.7225005354199517,xy=0.25364848703063775,y2=0.08904845300292483 a=pan,b=pan,i=8,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 a=hat,b=hat,i=9,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 a=wye,b=hat,i=10,x=0.3834648944206174,y=0.4999709279216641,x2=0.14704532525301522,xy=0.19172129908885902,y2=0.24997092876684981 a=pan,b=hat,i=11,x=0.025474999754416028,y=0.7861954915044592,x2=0.0006489756124874967,xy=0.020028329952999087,y2=0.6181033508619382 a=cat,b=hat,i=12,x=0.6335445699880142,y=0.15467178563525052,x2=0.4013787221612979,xy=0.0979914699195631,y2=0.02392336127159689 a=hat,b=wye,i=13,x=0.35922068401384877,y=0.8502678133887914,x2=0.1290394998233774,xy=0.30543378552048117,y2=0.7229553544849566 a=dog,b=dog,i=14,x=0.5440047442770544,y=0.933608851612059,x2=0.2959411617959433,xy=0.5078876445760125,y2=0.8716254878083876 a=wye,b=dog,i=15,x=0.4689175303764642,y=0.09048353045392021,x2=0.21988365029436224,xy=0.04242931364019586,y2=0.008187269283405506 a=pan,b=pan,i=16,x=0.3959177828066379,y=0.6339858483805666,x2=0.15675089074252413,xy=0.25100627142161924,y2=0.4019380559468268 a=dog,b=hat,i=17,x=0.34033844788864975,y=0.8845934733681523,x2=0.11583025911125516,xy=0.3010611697385466,y2=0.782505613125532 a=wye,b=wye,i=18,x=0.6770613653962891,y=0.896307226056897,x2=0.4584120925122874,xy=0.6068549942886431,y2=0.8033666434818095 a=dog,b=wye,i=19,x=0.4865373244199632,y=0.44117766146315884,x2=0.23671856805373653,xy=0.2146493990021416,y2=0.1946377289741016 a=dog,b=dog,i=20,x=0.3223311725542929,y=0.08115611029827985,x2=0.10389738480022534,xy=0.026159144192390068,y2=0.006586314238746564 miller-5.6.2/c/reg_test/input/abixy.csv000066400000000000000000000007601354153536500200530ustar00rootroot00000000000000a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy.dkvp000066400000000000000000000011121354153536500202140ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy.json000066400000000000000000000015301354153536500202250ustar00rootroot00000000000000{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } miller-5.6.2/c/reg_test/input/abixy.md000066400000000000000000000012241354153536500176540ustar00rootroot00000000000000| a | b | i | x | y | | --- | --- | --- | --- | --- | | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | miller-5.6.2/c/reg_test/input/abixy.nidx000066400000000000000000000007461354153536500202260ustar00rootroot00000000000000pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy.pprint000066400000000000000000000010271354153536500205710ustar00rootroot00000000000000a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy.tsv000066400000000000000000000007601354153536500200740ustar00rootroot00000000000000a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 miller-5.6.2/c/reg_test/input/abixy.xtab000066400000000000000000000011231354153536500202100ustar00rootroot00000000000000a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 miller-5.6.2/c/reg_test/input/absent.dkvp000066400000000000000000000000361354153536500203600ustar00rootroot00000000000000a=1,b=2 a=,b=4 x=,b=6 a=7,b=8 miller-5.6.2/c/reg_test/input/arrays.json000066400000000000000000000002031354153536500204060ustar00rootroot00000000000000{"a":1,"b":1} {"a":2,"b":[2,3]} {"a":3,"b":{"c":[4,5]}} {"a":4,"b":{"c":{"d":[4,5]}}} {"a":5,"b":[6,7,[8,9]]} {"a":6,"b":[[[11]]]} miller-5.6.2/c/reg_test/input/b.csv000066400000000000000000000000141354153536500171500ustar00rootroot00000000000000d,e,f 5,6,7 miller-5.6.2/c/reg_test/input/b.pprint000066400000000000000000000000141354153536500176710ustar00rootroot00000000000000d e f 5 6 7 miller-5.6.2/c/reg_test/input/bom-dquote-header.csv000066400000000000000000000000331354153536500222320ustar00rootroot00000000000000"a","b","c" 1,2,3 4,5,6 miller-5.6.2/c/reg_test/input/bom.csv000066400000000000000000000000251354153536500175060ustar00rootroot00000000000000a,b,c 1,2,3 4,5,6 miller-5.6.2/c/reg_test/input/braced.csv000066400000000000000000000000341354153536500201510ustar00rootroot00000000000000name.x,name.y,z 1,2,3 4,6,5 miller-5.6.2/c/reg_test/input/c.csv000066400000000000000000000000371354153536500171560ustar00rootroot00000000000000a,b,c 1,2,3 4,5,6 a,b,c 7,8,9 miller-5.6.2/c/reg_test/input/c.pprint000066400000000000000000000000371354153536500176770ustar00rootroot00000000000000a b c 1 2 3 4 5 6 a b c 7 8 9 miller-5.6.2/c/reg_test/input/capture-lengths.dkvp000066400000000000000000000002511354153536500222100ustar00rootroot00000000000000FIELD= FIELD=a FIELD=ab FIELD=abc FIELD=abcd FIELD=abcde FIELD=abcdef FIELD=abcdefg FIELD=abcdefgh FIELD=abcdefghi FIELD=abcdefghij FIELD=abcdefghijk FIELD=abcdefghijkl miller-5.6.2/c/reg_test/input/capture.dkvp000066400000000000000000000001071354153536500205460ustar00rootroot00000000000000FIELD=ABC123 FIELD=ABC..123 FIELD=..ABC..123.. FIELD=none of the above miller-5.6.2/c/reg_test/input/clean-whitespace.csv000066400000000000000000000002771354153536500221560ustar00rootroot00000000000000n,a,b , c 1,xy,2,3 2,xy ,2,3 3,xy ,2,3 4,xy ,2,3 5,xy,2,3 6, xy,2,3 7, xy,2,3 8, xy,2,3 9,xy,2,3 10, xy ,2,3 11, xy ,2,3 12, xy ,2,3 13,,2,3 14, ,2,3 15, ,2,3 16, ,2,3 miller-5.6.2/c/reg_test/input/comma-at-eof.csv000066400000000000000000000000201354153536500211710ustar00rootroot00000000000000a,b,c 1,2,3 4,5,miller-5.6.2/c/reg_test/input/comments/000077500000000000000000000000001354153536500200445ustar00rootroot00000000000000miller-5.6.2/c/reg_test/input/comments/Makefile.am000066400000000000000000000004741354153536500221050ustar00rootroot00000000000000EXTRA_DIST= \ comments1.dkvp \ comments2.dkvp \ comments3.dkvp \ comments1.nidx \ comments2.nidx \ comments3.nidx \ comments1.json \ comments2.json \ comments3.json \ comments1.xtab \ comments2.xtab \ comments1.csv \ comments2.csv \ \ comments1-atat.dkvp \ comments2-atat.dkvp \ comments3-atat.dkvp miller-5.6.2/c/reg_test/input/comments/Makefile.in000066400000000000000000000301021354153536500221050ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/reg_test/input/comments ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ comments1.dkvp \ comments2.dkvp \ comments3.dkvp \ comments1.nidx \ comments2.nidx \ comments3.nidx \ comments1.json \ comments2.json \ comments3.json \ comments1.xtab \ comments2.xtab \ comments1.csv \ comments2.csv \ \ comments1-atat.dkvp \ comments2-atat.dkvp \ comments3-atat.dkvp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/reg_test/input/comments/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/reg_test/input/comments/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/reg_test/input/comments/comments1-atat.dkvp000066400000000000000000000000511354153536500235630ustar00rootroot00000000000000@@ hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 miller-5.6.2/c/reg_test/input/comments/comments1.csv000066400000000000000000000000321354153536500224620ustar00rootroot00000000000000# hello a,b,c 1,2,3 4,5,6 miller-5.6.2/c/reg_test/input/comments/comments1.dkvp000066400000000000000000000000501354153536500226330ustar00rootroot00000000000000# hello world 1 a=1,b=2,c=3 a=4,b=5,c=6 miller-5.6.2/c/reg_test/input/comments/comments1.json000066400000000000000000000001001354153536500226340ustar00rootroot00000000000000# hello world 1 { "a":1, "b":2, "c":3 } { "a":4, "b":5, "c":6 } miller-5.6.2/c/reg_test/input/comments/comments1.nidx000066400000000000000000000000501354153536500226310ustar00rootroot00000000000000# hello world 1 aX1 bX2 cX3 aX4 bX5 cX6 miller-5.6.2/c/reg_test/input/comments/comments1.xtab000066400000000000000000000000561354153536500226330ustar00rootroot00000000000000x 1 #hello world3 z 3 x 2 #hello world4 z 5 miller-5.6.2/c/reg_test/input/comments/comments2-atat.dkvp000066400000000000000000000000511354153536500235640ustar00rootroot00000000000000a=1,b=2,c=3 @@ hello world 2 a=4,b=5,c=6 miller-5.6.2/c/reg_test/input/comments/comments2.csv000066400000000000000000000000561354153536500224710ustar00rootroot00000000000000# hello a,b,c # hi 1,2,3 # there 4,5,6 # haha miller-5.6.2/c/reg_test/input/comments/comments2.dkvp000066400000000000000000000000501354153536500226340ustar00rootroot00000000000000a=1,b=2,c=3 # hello world 2 a=4,b=5,c=6 miller-5.6.2/c/reg_test/input/comments/comments2.json000066400000000000000000000001001354153536500226350ustar00rootroot00000000000000{ "a":1, "b":2, "c":3 } # hello world 2 { "a":4, "b":5, "c":6 } miller-5.6.2/c/reg_test/input/comments/comments2.nidx000066400000000000000000000000501354153536500226320ustar00rootroot00000000000000aX1 bX2 cX3 # hello world 2 aX4 bX5 cX6 miller-5.6.2/c/reg_test/input/comments/comments2.xtab000066400000000000000000000001471354153536500226350ustar00rootroot00000000000000#hello world1 #hello world2 x 1 #hello world3 z 3 x 2 #hello world4 z 5 #hello world5 #hello world6 miller-5.6.2/c/reg_test/input/comments/comments3-atat.dkvp000066400000000000000000000000511354153536500235650ustar00rootroot00000000000000a=1,b=2,c=3 a=4,b=5,c=6 @@ hello world 3 miller-5.6.2/c/reg_test/input/comments/comments3.dkvp000066400000000000000000000000501354153536500226350ustar00rootroot00000000000000a=1,b=2,c=3 a=4,b=5,c=6 # hello world 3 miller-5.6.2/c/reg_test/input/comments/comments3.json000066400000000000000000000001001354153536500226360ustar00rootroot00000000000000{ "a":1, "b":2, "c":3 } { "a":4, "b":5, "c":6 } # hello world 3 miller-5.6.2/c/reg_test/input/comments/comments3.nidx000066400000000000000000000000501354153536500226330ustar00rootroot00000000000000aX1 bX2 cX3 aX4 bX5 cX6 # hello world 3 miller-5.6.2/c/reg_test/input/d.csv000066400000000000000000000000321354153536500171520ustar00rootroot00000000000000h,i,j 3,4,5 m,n,o 8,9,10 miller-5.6.2/c/reg_test/input/d.pprint000066400000000000000000000000321354153536500176730ustar00rootroot00000000000000h i j 3 4 5 m n o 8 9 10 miller-5.6.2/c/reg_test/input/date1.csv000066400000000000000000000001611354153536500177300ustar00rootroot00000000000000Name,Date_201505,Extraneous Alice,2015-05-14,foo Bob,2015-05-11,bar Chuck,2015-05-28,quux Denise,2015-05-02,meep miller-5.6.2/c/reg_test/input/date2.csv000066400000000000000000000001631354153536500177330ustar00rootroot00000000000000Name,Date_201506,Extraneous Alice,2015-06-23,cafe Denise,2015-06-17,feed Chuck,2015-06-19,beef Bob,2015-06-19,d00d miller-5.6.2/c/reg_test/input/dot-match.csv000066400000000000000000000000201354153536500206040ustar00rootroot00000000000000text hi a.b bye miller-5.6.2/c/reg_test/input/dots.pprint-crlf000066400000000000000000000010421354153536500213470ustar00rootroot00000000000000a///b///i//x///////////////////y pan/pan/1//0.3467901443380824//0.7268028627434533 eks/pan/2//0.7586799647899636//0.5221511083334797 wye/wye/3//0.20460330576630303/0.33831852551664776 eks/wye/4//0.38139939387114097/0.13418874328430463 wye/pan/5//0.5732889198020006//0.8636244699032729 zee/pan/6//0.5271261600918548//0.49322128674835697 eks/zee/7//0.6117840605678454//0.1878849191181694 zee/wye/8//0.5985540091064224//0.976181385699006 hat/wye/9//0.03144187646093577/0.7495507603507059 pan/wye/10/0.5026260055412137//0.9526183602969864 miller-5.6.2/c/reg_test/input/dots.xtab000066400000000000000000000000541354153536500200470ustar00rootroot00000000000000a.....1 b.....2 c.....345 defg..6 hi....78 miller-5.6.2/c/reg_test/input/double-ps.dkvp000066400000000000000000000000421354153536500207730ustar00rootroot00000000000000a=pan,b=wy.e,c=3 a=pan,b=wy=e,c=3 miller-5.6.2/c/reg_test/input/e.csv000066400000000000000000000000231354153536500171530ustar00rootroot00000000000000 a,b,c 1,2,3 4,5,6 miller-5.6.2/c/reg_test/input/e.pprint000066400000000000000000000000231354153536500176740ustar00rootroot00000000000000 a b c 1 2 3 4 5 6 miller-5.6.2/c/reg_test/input/env-assign.sh000077500000000000000000000000771354153536500206340ustar00rootroot00000000000000#!/bin/sh while read line; do echo "[ZYX]=[$ZYX] $line" done miller-5.6.2/c/reg_test/input/env-var.dkvp000066400000000000000000000000461354153536500204630ustar00rootroot00000000000000name=X,x=1,y=2 name=Y,x=3,y=4 x=5,y=6 miller-5.6.2/c/reg_test/input/escapes.json000066400000000000000000000001441354153536500205340ustar00rootroot00000000000000{"abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\xyz"} {"abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\\\xyz"} miller-5.6.2/c/reg_test/input/example.usv000066400000000000000000000000411354153536500204040ustar00rootroot00000000000000aâŸbâŸcâždâŸeâŸfâžgâŸhâŸimiller-5.6.2/c/reg_test/input/f.csv000066400000000000000000000000001354153536500171470ustar00rootroot00000000000000miller-5.6.2/c/reg_test/input/f.pprint000066400000000000000000000000001354153536500176700ustar00rootroot00000000000000miller-5.6.2/c/reg_test/input/fill-down.csv000066400000000000000000000000261354153536500206250ustar00rootroot00000000000000a,b,c 1,,3 4,5,6 7,,9 miller-5.6.2/c/reg_test/input/filter-example.dsl000066400000000000000000000000101354153536500216300ustar00rootroot00000000000000$x < $y miller-5.6.2/c/reg_test/input/filter-script-piece-1000066400000000000000000000000111354153536500221420ustar00rootroot00000000000000$x > 0.5 miller-5.6.2/c/reg_test/input/filter-script-piece-2000066400000000000000000000000121354153536500221440ustar00rootroot00000000000000&& $i < 5 miller-5.6.2/c/reg_test/input/freq.dkvp000066400000000000000000000003441354153536500200430ustar00rootroot00000000000000a=apple,b=apple a=apple,b=apple a=apple,b=apple a=apple,b=apple a=apple,b=apple a=apple,b=apple a=bat,b=cat a=bat,b=cat a=bat,b=cat a=bat,b=cat a=bat,b=cat a=cat,b=bat a=cat,b=bat a=cat,b=bat a=cat,b=cat a=dog,b=dog a=dog,b=dog miller-5.6.2/c/reg_test/input/from-first.csv000066400000000000000000000000721354153536500210230ustar00rootroot00000000000000x,g 100,red 203,red 101,green 307,red 209,green 314,green miller-5.6.2/c/reg_test/input/fsec2xhms000066400000000000000000000005301354153536500200420ustar00rootroot00000000000000sec=0.25 sec=1.25 sec=59.25 sec=60.25 sec=61.25 sec=3599.25 sec=3600.25 sec=3601.25 sec=86399.25 sec=86400.25 sec=86401.25 sec=863999.25 sec=864000.25 sec=864001.25 sec=-0.25 sec=-1.25 sec=-59.25 sec=-60.25 sec=-61.25 sec=-3599.25 sec=-3600.25 sec=-3601.25 sec=-86399.25 sec=-86400.25 sec=-86401.25 sec=-863999.25 sec=-864000.25 sec=-864001.25 miller-5.6.2/c/reg_test/input/g.csv000066400000000000000000000000051354153536500171550ustar00rootroot00000000000000 miller-5.6.2/c/reg_test/input/g.pprint000066400000000000000000000000051354153536500176760ustar00rootroot00000000000000 miller-5.6.2/c/reg_test/input/gmt2sec000066400000000000000000000012271354153536500175100ustar00rootroot00000000000000gmt 1970-01-01T00:00:00Z 1970-01-01T00:00:00.Z 1970-01-01T00:00:01Z 1970-01-01T00:00:01.0Z 1970-01-01T00:00:10Z 1970-01-01T00:00:10.00Z 1970-01-01T00:01:40Z 1970-01-01T00:01:40.1Z 1970-01-01T00:16:40Z 1970-01-01T00:16:40.12Z 1970-01-01T02:46:40Z 1970-01-01T02:46:40.123Z 1970-01-02T03:46:40Z 1970-01-02T03:46:40.1234Z 1970-01-12T13:46:40Z 1970-01-12T13:46:40.12345Z 1970-04-26T17:46:40Z 1970-04-26T17:46:40.123456Z 1973-03-03T09:46:40Z 1973-03-03T09:46:40.1234567Z 2001-09-09T01:46:40Z 2001-09-09T01:46:40.12345678Z 2015-05-19T11:49:40Z 2015-05-19T11:49:40.123456789Z 2017-07-14T02:40:00Z 2017-07-14T02:40:00.999Z 2033-05-18T03:33:20Z 2033-05-18T03:33:20.999999Z miller-5.6.2/c/reg_test/input/gsub.dat000066400000000000000000000000761354153536500176540ustar00rootroot00000000000000x=lmnop x=abcdefg x=ababbabbba x=LMNOP x=ABCDEFG x=ABABBABBBA miller-5.6.2/c/reg_test/input/having-fields-regex.dkvp000066400000000000000000000001241354153536500227320ustar00rootroot00000000000000abc=1,def=11 ABC=2,DEF=12 abcd=3,ghi=13 ABCD=4,GHI=14 abcde=5,ghi=15 ABCDE=6,GHI=16 miller-5.6.2/c/reg_test/input/het-join-left000066400000000000000000000001421354153536500206040ustar00rootroot00000000000000x=100,b=10 l=1,b=11 l=1,b=12 x=200,b=13 l=3,b=14 l=3,b=15 x=300,b=16 l=5,b=17 l=5,b=18 x=400,b=19 miller-5.6.2/c/reg_test/input/het-join-right-r0000066400000000000000000000000201354153536500213010ustar00rootroot00000000000000y=111 r=0 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r1000066400000000000000000000000201354153536500213020ustar00rootroot00000000000000y=111 r=1 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r11000066400000000000000000000000321354153536500213660ustar00rootroot00000000000000y=111 r=1 y=222 r=1 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r12000066400000000000000000000000321354153536500213670ustar00rootroot00000000000000y=111 r=1 y=222 r=2 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r13000066400000000000000000000000321354153536500213700ustar00rootroot00000000000000y=111 r=1 y=222 r=3 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r14000066400000000000000000000000321354153536500213710ustar00rootroot00000000000000y=111 r=1 y=222 r=4 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r15000066400000000000000000000000321354153536500213720ustar00rootroot00000000000000y=111 r=1 y=222 r=5 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r16000066400000000000000000000000321354153536500213730ustar00rootroot00000000000000y=111 r=1 y=222 r=6 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r2000066400000000000000000000000201354153536500213030ustar00rootroot00000000000000y=111 r=2 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r22000066400000000000000000000000321354153536500213700ustar00rootroot00000000000000y=111 r=2 y=222 r=2 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r23000066400000000000000000000000321354153536500213710ustar00rootroot00000000000000y=111 r=2 y=222 r=3 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r24000066400000000000000000000000321354153536500213720ustar00rootroot00000000000000y=111 r=2 y=222 r=4 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r25000066400000000000000000000000321354153536500213730ustar00rootroot00000000000000y=111 r=2 y=222 r=5 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r26000066400000000000000000000000321354153536500213740ustar00rootroot00000000000000y=111 r=2 y=222 r=6 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r3000066400000000000000000000000201354153536500213040ustar00rootroot00000000000000y=111 r=3 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r33000066400000000000000000000000321354153536500213720ustar00rootroot00000000000000y=111 r=3 y=222 r=3 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r34000066400000000000000000000000321354153536500213730ustar00rootroot00000000000000y=111 r=3 y=222 r=4 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r35000066400000000000000000000000321354153536500213740ustar00rootroot00000000000000y=111 r=3 y=222 r=5 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r36000066400000000000000000000000321354153536500213750ustar00rootroot00000000000000y=111 r=3 y=222 r=6 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r4000066400000000000000000000000201354153536500213050ustar00rootroot00000000000000y=111 r=4 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r44000066400000000000000000000000321354153536500213740ustar00rootroot00000000000000y=111 r=4 y=222 r=4 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r45000066400000000000000000000000321354153536500213750ustar00rootroot00000000000000y=111 r=4 y=222 r=5 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r46000066400000000000000000000000321354153536500213760ustar00rootroot00000000000000y=111 r=4 y=222 r=6 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r5000066400000000000000000000000201354153536500213060ustar00rootroot00000000000000y=111 r=5 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r55000066400000000000000000000000321354153536500213760ustar00rootroot00000000000000y=111 r=5 y=222 r=5 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r56000066400000000000000000000000321354153536500213770ustar00rootroot00000000000000y=111 r=5 y=222 r=6 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r6000066400000000000000000000000201354153536500213070ustar00rootroot00000000000000y=111 r=6 y=333 miller-5.6.2/c/reg_test/input/het-join-right-r66000066400000000000000000000000321354153536500214000ustar00rootroot00000000000000y=111 r=6 y=222 r=6 y=333 miller-5.6.2/c/reg_test/input/het.csv000066400000000000000000000003521354153536500175140ustar00rootroot00000000000000resource,loadsec,ok /path/to/file,0.45,true record_count,resource 100,/path/to/file resource,loadsec,ok /path/to/second/file,0.32,true record_count,resource 150,/path/to/second/file resource,loadsec,ok /some/other/path,0.97,false miller-5.6.2/c/reg_test/input/het.dkvp000066400000000000000000000004101354153536500176600ustar00rootroot00000000000000host=jupiter df/tmp=2.43MB,uptime=32345sec host=saturn df/tmp=1.34MB,uptime=234214132sec host=mars df/tmp=4.97MB,uptime=345089805sec host=jupiter df/tmp=0.04MB,uptime=890sec host=mars df/tmp=8.55MB,uptime=787897777sec host=saturn df/tmp=9.47MB,uptime=234289080sec miller-5.6.2/c/reg_test/input/int-float.dkvp000066400000000000000000000000621354153536500210000ustar00rootroot00000000000000x=1,y=10.1,z=20 x=2,y=10.2,z=30 x=3,y=10.3,z=40.8 miller-5.6.2/c/reg_test/input/int64arith.dkvp000066400000000000000000000004461354153536500211050ustar00rootroot00000000000000p=0x7ffffffffffff9ff,n=0x8000000000000000 p=0x7ffffffffffffa00,n=0x8000000000000001 p=0x7ffffffffffffbff,n=0x8000000000000200 p=0x7ffffffffffffc00,n=0x8000000000000400 p=0x7ffffffffffffe00,n=0x8000000000000401 p=0x7ffffffffffffffe,n=0x8000000000000600 p=0x7fffffffffffffff,n=0x8000000000000601 miller-5.6.2/c/reg_test/input/int64io.dkvp000066400000000000000000000002461354153536500204030ustar00rootroot00000000000000a=0x1,b=1 a=0x7ffffffffffffffe,b=9223372036854775806 a=0x7fffffffffffffff,b=9223372036854775807 a=0x8000000000000000,b=-9223372036854775808 a=0xffffffffffffffff,b=-1 miller-5.6.2/c/reg_test/input/ints.dkvp000066400000000000000000000003601354153536500200610ustar00rootroot00000000000000x=0,y=1 x=1,y=7 x=6,y=0 x=6,y=9 x=0,y=5 x=0,y=7 x=4,y=9 x=7,y=1 x=3,y=3 x=7,y=9 x=8,y=5 x=0,y=6 x=5,y=9 x=0,y=9 x=3,y=7 x=0,y=6 x=2,y=2 x=3,y=6 x=2,y=7 x=4,y=8 x=6,y=2 x=2,y=2 x=1,y=6 x=0,y=8 x=0,y=4 x=2,y=2 x=3,y=5 x=4,y=4 x=9,y=5 x=2,y=2 miller-5.6.2/c/reg_test/input/join-het.dkvp000066400000000000000000000001001354153536500206110ustar00rootroot00000000000000a=eks,n=123 a=pan,n=234 a=wye,n=345 a=zee,n=456 aye=bee,enn=emm miller-5.6.2/c/reg_test/input/joina.dkvp000066400000000000000000000000701354153536500202020ustar00rootroot00000000000000l=1,x=a l=2,x=b l=2,x=c l=2,x=d l=3,x=e l=3,x=f l=4,x=g miller-5.6.2/c/reg_test/input/joinb.dkvp000066400000000000000000000000701354153536500202030ustar00rootroot00000000000000r=1,y=s r=2,y=t r=2,y=v r=3,y=w r=3,y=x r=3,y=y r=5,y=z miller-5.6.2/c/reg_test/input/json-output-options.dkvp000066400000000000000000000000301354153536500230760ustar00rootroot00000000000000a=1,b=x,c=3 d=4 1=5,f=6 miller-5.6.2/c/reg_test/input/line-ending-cr.bin000066400000000000000000000000301354153536500214750ustar00rootroot00000000000000hello there how are you miller-5.6.2/c/reg_test/input/line-ending-crlf.bin000066400000000000000000000000351354153536500220240ustar00rootroot00000000000000hello there how are you miller-5.6.2/c/reg_test/input/line-ending-lf.bin000066400000000000000000000000301354153536500214720ustar00rootroot00000000000000hello there how are you miller-5.6.2/c/reg_test/input/line-term-crlf-wrap.json000066400000000000000000000015451354153536500227060ustar00rootroot00000000000000[ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 }, { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 }, { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 }, { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 }, { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 }, { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 }, { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 }, { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 }, { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] miller-5.6.2/c/reg_test/input/line-term-crlf.csv000066400000000000000000000007601354153536500215570ustar00rootroot00000000000000a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-crlf.dkvp000066400000000000000000000011121354153536500217200ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-crlf.json000066400000000000000000000015301354153536500217310ustar00rootroot00000000000000{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } miller-5.6.2/c/reg_test/input/line-term-crlf.pprint000066400000000000000000000010271354153536500222750ustar00rootroot00000000000000a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-crlf.xtab000066400000000000000000000011231354153536500217140ustar00rootroot00000000000000a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-lf-wrap.json000066400000000000000000000015451354153536500223610ustar00rootroot00000000000000[ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 }, { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 }, { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 }, { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 }, { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 }, { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 }, { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 }, { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 }, { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] miller-5.6.2/c/reg_test/input/line-term-lf.csv000066400000000000000000000007601354153536500212320ustar00rootroot00000000000000a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-lf.dkvp000066400000000000000000000011121354153536500213730ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-lf.json000066400000000000000000000015301354153536500214040ustar00rootroot00000000000000{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } miller-5.6.2/c/reg_test/input/line-term-lf.pprint000066400000000000000000000010271354153536500217500ustar00rootroot00000000000000a b i x y pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 miller-5.6.2/c/reg_test/input/line-term-lf.xtab000066400000000000000000000011231354153536500213670ustar00rootroot00000000000000a pan b pan i 1 x 0.3467901443380824 y 0.7268028627434533 a eks b pan i 2 x 0.7586799647899636 y 0.5221511083334797 a wye b wye i 3 x 0.20460330576630303 y 0.33831852551664776 a eks b wye i 4 x 0.38139939387114097 y 0.13418874328430463 a wye b pan i 5 x 0.5732889198020006 y 0.8636244699032729 a zee b pan i 6 x 0.5271261600918548 y 0.49322128674835697 a eks b zee i 7 x 0.6117840605678454 y 0.1878849191181694 a zee b wye i 8 x 0.5985540091064224 y 0.976181385699006 a hat b wye i 9 x 0.03144187646093577 y 0.7495507603507059 a pan b wye i 10 x 0.5026260055412137 y 0.9526183602969864 miller-5.6.2/c/reg_test/input/logi.dkvp000066400000000000000000000005151354153536500200400ustar00rootroot00000000000000x=-11,y=0,g=red x=-9,y=0,g=red x=-7,y=0,g=red x=-5,y=1,g=red x=-3,y=0,g=red x=-1,y=1,g=red x=1,y=0,g=red x=3,y=1,g=red x=5,y=1,g=red x=7,y=0,g=red x=9,y=1,g=red x=-11,y=0,g=blue x=-9,y=0,g=blue x=-7,y=0,g=blue x=-5,y=1,g=blue x=-3,y=1,g=blue x=-1,y=0,g=blue x=1,y=1,g=blue x=3,y=1,g=blue x=5,y=1,g=blue x=7,y=0,g=blue x=9,y=1,g=blue miller-5.6.2/c/reg_test/input/mand.mlr000066400000000000000000000027141354153536500176560ustar00rootroot00000000000000# Mandelbrot set generator: simple example of Miller DSL as programming language. begin { # Set defaults @rcorn = -2.0; @icorn = -2.0; @side = 4.0; @iheight = 50; @iwidth = 100; @maxits = 100; @levelstep = 5; @chars = "@X*o-."; @verbose = false; } # Override defaults @rcorn = $rcorn; @icorn = $icorn; @side = $side; @iheight = $iheight; @iwidth = $iwidth; @maxits = $maxits; @levelstep = $levelstep; @chars = $chars; @verbose = $verbose; end { if (@verbose) { print "RCORN = ".@rcorn; print "ICORN = ".@icorn; print "SIDE = ".@side; print "IHEIGHT = ".@iheight; print "IWIDTH = ".@iwidth; print "MAXITS = ".@maxits; print "LEVELSTEP = ".@levelstep; print "CHARS = ".@chars; } for (int ii = @iheight-1; ii >= 0; ii -= 1) { num ci = @icorn + (ii/@iheight) * @side; for (int ir = 0; ir < @iwidth; ir += 1) { num cr = @rcorn + (ir/@iwidth) * @side; printn get_point_plot(cr, ci, @maxits); } print; } } func get_point_plot(cr, ci, maxits) { num zr = 0.0; num zi = 0.0; int iti = 0; bool escaped = false; num zt = 0; for (iti = 0; iti < maxits; iti += 1) { num mag = zr*zr + zi+zi; if (mag > 4.0) { escaped = true; break; } # z := z^2 + c zt = zr*zr - zi*zi + cr; zi = 2*zr*zi + ci; zr = zt; } if (!escaped) { return "."; } else { int level = (iti // @levelstep) % strlen(@chars); return substr(@chars, level, level); } } miller-5.6.2/c/reg_test/input/merge-fields-abxy.dkvp000066400000000000000000000011601354153536500224070ustar00rootroot00000000000000a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8 z=1 a_on_x=1,a_out_x=2,b_in_y=4,b_out_x=8 a_in_x=1,a_oot_x=2,b_in_y=4,b_out_x=8 a_in_x=1,a_out_x=2,b_on_y=4,b_out_x=8 a_in_x=1,a_out_x=2,b_in_y=4,b_oot_x=8 z=2 a_on_x=1,a_oot_x=2,b_in_y=4,b_out_x=8 a_on_x=1,a_out_x=2,b_on_y=4,b_out_x=8 a_on_x=1,a_out_x=2,b_in_y=4,b_oot_x=8 a_in_x=1,a_oot_x=2,b_on_y=4,b_out_x=8 a_in_x=1,a_oot_x=2,b_in_y=4,b_oot_x=8 a_in_x=1,a_out_x=2,b_on_y=4,b_oot_x=8 z=3 a_in_x=1,a_oot_x=2,b_on_y=4,b_oot_x=8 a_on_x=1,a_out_x=2,b_on_y=4,b_oot_x=8 a_on_x=1,a_oot_x=2,b_in_y=4,b_oot_x=8 a_on_x=1,a_oot_x=2,b_on_y=4,b_out_x=8 z=4 a_on_x=1,a_oot_x=2,b_on_y=4,b_oot_x=8 miller-5.6.2/c/reg_test/input/merge-fields-in-out-mixed.csv000066400000000000000000000001261354153536500236130ustar00rootroot00000000000000a_in,a_out,b_in,b_out 436,abc,446,195 526,320,def,780 220,888,705,ghi jkl,mno,pqr,stu miller-5.6.2/c/reg_test/input/merge-fields-in-out.csv000066400000000000000000000001061354153536500225050ustar00rootroot00000000000000a_in,a_out,b_in,b_out 436,490,446,195 526,320,963,780 220,888,705,831 miller-5.6.2/c/reg_test/input/minmax.dkvp000066400000000000000000000000701354153536500203730ustar00rootroot00000000000000x=1,y=2 x=1,y= x=,y= x=,y=2 x=3,y=2 x=3,y= x=,y= x=,y=2 miller-5.6.2/c/reg_test/input/missings.dkvp000066400000000000000000000001001354153536500207300ustar00rootroot00000000000000a=1,b=2,c=3,d=4,e=5,f=6 a,b=,x=4,c=3,d,e,f a,b=,x=4,c=3,d,e,f=6 miller-5.6.2/c/reg_test/input/mixed-types.xtab000066400000000000000000000001321354153536500213430ustar00rootroot00000000000000pf1 71.2 nf1 -71.2 zf 0.0 pf2 73.4 nf2 -73.4 pi1 75 ni1 -75 zi 0 pi2 76 ni2 -76 miller-5.6.2/c/reg_test/input/modarith.dat000066400000000000000000000010751354153536500205230ustar00rootroot00000000000000x=-37 x=-36 x=-35 x=-34 x=-33 x=-32 x=-31 x=-30 x=-29 x=-28 x=-27 x=-26 x=-25 x=-24 x=-23 x=-22 x=-21 x=-20 x=-19 x=-18 x=-17 x=-16 x=-15 x=-14 x=-13 x=-12 x=-11 x=-10 x=-9 x=-8 x=-7 x=-6 x=-5 x=-4 x=-3 x=-2 x=-1 x=0 x=1 x=2 x=3 x=4 x=5 x=6 x=7 x=8 x=9 x=10 x=11 x=12 x=13 x=14 x=15 x=16 x=17 x=18 x=19 x=20 x=21 x=22 x=23 x=24 x=25 x=26 x=27 x=28 x=29 x=30 x=31 x=32 x=33 x=34 x=35 x=36 x=37 x=38 x=39 x=40 x=41 x=42 x=43 x=44 x=45 x=46 x=47 x=48 x=49 x=50 x=51 x=52 x=53 x=54 x=55 x=56 x=57 x=58 x=59 x=60 x=61 x=62 x=63 x=64 x=65 x=66 x=67 x=68 x=69 x=70 x=71 x=72 x=73 miller-5.6.2/c/reg_test/input/multi-format-join-a.csv000066400000000000000000000000241354153536500225230ustar00rootroot00000000000000x,a 1,2 2,3 3,4 4,5 miller-5.6.2/c/reg_test/input/multi-format-join-a.dkvp000066400000000000000000000000401354153536500226720ustar00rootroot00000000000000x=1,a=2 x=2,a=3 x=3,a=4 x=4,a=5 miller-5.6.2/c/reg_test/input/multi-format-join-a.json000066400000000000000000000000701354153536500227020ustar00rootroot00000000000000{"x":1,"a":2} {"x":2,"a":3} {"x":3,"a":4} {"x":4,"a":5} miller-5.6.2/c/reg_test/input/multi-format-join-b.csv000066400000000000000000000000301354153536500225210ustar00rootroot00000000000000x,b 1,20 2,30 3,40 4,50 miller-5.6.2/c/reg_test/input/multi-format-join-b.dkvp000066400000000000000000000000441354153536500226770ustar00rootroot00000000000000x=1,b=20 x=2,b=30 x=3,b=40 x=4,b=50 miller-5.6.2/c/reg_test/input/multi-format-join-b.json000066400000000000000000000000741354153536500227070ustar00rootroot00000000000000{"x":1,"b":20} {"x":2,"b":30} {"x":3,"b":40} {"x":4,"b":50} miller-5.6.2/c/reg_test/input/multi-ips.dkvp000066400000000000000000000000121354153536500210210ustar00rootroot00000000000000a: 1 b: 2 miller-5.6.2/c/reg_test/input/multi-sep.csv-crlf000066400000000000000000000004551354153536500216030ustar00rootroot00000000000000a/,b/,i/,x/,y/ wye/,eks/,0/,0.641593543645736508/,0.262688053894177098 eks/,zee/,1/,0.827614412562742041/,0.715431942006308552 zee/,zee/,2/,0.923068348748175560/,0.009737410587136359 zee/,pan/,3/,0.000047786161325772/,0.803142013402256216 zee/,hat/,4/,0.676537984365847889/,0.573903236805416328 miller-5.6.2/c/reg_test/input/multi-sep.dkvp-crlf000066400000000000000000000005501354153536500217500ustar00rootroot00000000000000a=:wye/,b=:eks/,i=:0/,x=:0.641593543645736508/,y=:0.262688053894177098 a=:eks/,b=:zee/,i=:1/,x=:0.827614412562742041/,y=:0.715431942006308552 a=:zee/,b=:zee/,i=:2/,x=:0.923068348748175560/,y=:0.009737410587136359 a=:zee/,b=:pan/,i=:3/,x=:0.000047786161325772/,y=:0.803142013402256216 a=:zee/,b=:hat/,i=:4/,x=:0.676537984365847889/,y=:0.573903236805416328 miller-5.6.2/c/reg_test/input/near-ovf.dkvp000066400000000000000000000004731354153536500206260ustar00rootroot00000000000000x=9223372036854775806,y=-9223372036854775805 x=9223372036854775804,y=-9223372036854775804 x=9223372036854775801,y=-9223372036854775801 x=9223372036854775807,y=-9223372036854775803 x=9223372036854775803,y=-9223372036854775807 x=9223372036854775802,y=-9223372036854775806 x=9223372036854775805,y=-9223372036854775802 miller-5.6.2/c/reg_test/input/nest-explode-vary-fs-ps.dkvp000066400000000000000000000000751354153536500235230ustar00rootroot00000000000000x=a=1|b=2|c=3,y=d=40 x=,y=d=50 u=100,y=d=60 x=a=4|b=5,y=d=70 miller-5.6.2/c/reg_test/input/nest-explode.dkvp000066400000000000000000000000751354153536500215160ustar00rootroot00000000000000x=a:1;b:2;c:3,y=d:40 x=,y=d:50 u=100,y=d:60 x=a:4;b:5,y=d:70 miller-5.6.2/c/reg_test/input/null-fields.csv000066400000000000000000000000631354153536500211510ustar00rootroot00000000000000a,b,c,d,e 1,2,3,4,5 6,,,,10 ,,,11,12 13,14,,, ,,,, miller-5.6.2/c/reg_test/input/null-fields.nidx000066400000000000000000000000441354153536500213170ustar00rootroot00000000000000a,b,c,d,e f,,,,g ,,,h,i j,k,,, ,,,, miller-5.6.2/c/reg_test/input/null-vs-empty.dkvp000066400000000000000000000000511354153536500216350ustar00rootroot00000000000000x=1,y=2,s=hello x=1,y=,s= x=,y=,s=hurrah miller-5.6.2/c/reg_test/input/nullvals.dkvp000066400000000000000000000001071354153536500207430ustar00rootroot00000000000000a=b,x=1,y=2,z= a=b,x=3,y=4,z= a=b,x=5,y=,z= a=b,x=,y=6,z= a=b,x=,y=,z= miller-5.6.2/c/reg_test/input/ofmt.dat000066400000000000000000000000141354153536500176510ustar00rootroot00000000000000x=1 x=2 x=3 miller-5.6.2/c/reg_test/input/page-aligned-final-ifs.dkvp000066400000000000000000000200001354153536500232600ustar00rootroot00000000000000x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=miller-5.6.2/c/reg_test/input/page-aligned-final-irs.dkvp000066400000000000000000000200001354153536500232740ustar00rootroot00000000000000x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc miller-5.6.2/c/reg_test/input/page-aligned-final-no-ifs.dkvp000066400000000000000000000200001354153536500236720ustar00rootroot00000000000000x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,zmiller-5.6.2/c/reg_test/input/page-aligned-no-final-eol.xtab000066400000000000000000000200001354153536500236620ustar00rootroot00000000000000aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 33333333333333333333 aaaaaaaaaaaaaaaaaaaa 111111111111111111111 bbbbbbbbbbbbbbbbbbbb 22222222222222222222 cccccccccccccccccccc 3333333333333333333333miller-5.6.2/c/reg_test/input/page-aligned-no-final-irs.csvl000066400000000000000000000200001354153536500237110ustar00rootroot00000000000000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,ccccccccccccccccccccccccccccccccccccccccccc 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333miller-5.6.2/c/reg_test/input/page-aligned-no-final-irs.dkvp000066400000000000000000000200001354153536500237060ustar00rootroot00000000000000x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccccmiller-5.6.2/c/reg_test/input/page-aligned-no-final-irs.nidx000066400000000000000000000200001354153536500237040ustar00rootroot0000000000000011111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333miller-5.6.2/c/reg_test/input/put-example.dsl000066400000000000000000000000351354153536500211620ustar00rootroot00000000000000$xy = $x * $y; $ab = $a . $b miller-5.6.2/c/reg_test/input/put-script-piece-1000066400000000000000000000000601354153536500214710ustar00rootroot00000000000000subr s(a,b) { $[a] = b; $DID = "YES"; } miller-5.6.2/c/reg_test/input/put-script-piece-2000066400000000000000000000000451354153536500214750ustar00rootroot00000000000000func f(x,y,z) { return x + y + z } miller-5.6.2/c/reg_test/input/put-script-piece-3000066400000000000000000000000451354153536500214760ustar00rootroot00000000000000$o = f($x, $y, $i); call s("W", NR); miller-5.6.2/c/reg_test/input/quote-original.csv000066400000000000000000000000361354153536500216720ustar00rootroot00000000000000a,b,c 1,2,3 4,"5",6 "7",8,"9" miller-5.6.2/c/reg_test/input/ragged.csv000066400000000000000000000000301354153536500201560ustar00rootroot00000000000000a,b,c 1,2,3 4,5 6,7,8,9 miller-5.6.2/c/reg_test/input/regex.dkvp000066400000000000000000000001361354153536500202170ustar00rootroot00000000000000x=abc,y=def x=ABC,y=DEF x=abcd,y=ghi x=ABCD,y=GHI x=abcde,y=ghi x=ABCDE,y=GHI x=ABCDE,y="GHI" miller-5.6.2/c/reg_test/input/regularize.dkvp000066400000000000000000000000401354153536500212500ustar00rootroot00000000000000a=1,c=2,b=3 e=4,d=5 c=7,a=6,b=8 miller-5.6.2/c/reg_test/input/remove-empty-columns.csv000066400000000000000000000000421354153536500230370ustar00rootroot00000000000000a,b,c,d,e 1,,3,,5 2,,4,,5 3,,5,,7 miller-5.6.2/c/reg_test/input/repeat-input.dat000066400000000000000000000000561354153536500213270ustar00rootroot00000000000000a=1,b=2,c=3 a=3,b=4,c=5 a=6,b=,c=7 a=8,x=,c=9 miller-5.6.2/c/reg_test/input/repeats.dkvp000066400000000000000000000034451354153536500205560ustar00rootroot00000000000000color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=red,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=yellow,shape=circle,flag=1 color=yellow,shape=circle,flag=1 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=square,flag=0 color=purple,shape=square,flag=0 color=red,shape=square,flag=0 color=red,shape=square,flag=1 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=purple,shape=square,flag=0 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=triangle,flag=1 color=purple,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=purple,shape=triangle,flag=0 color=red,shape=circle,flag=1 color=purple,shape=triangle,flag=0 color=purple,shape=triangle,flag=0 color=red,shape=square,flag=0 color=red,shape=circle,flag=1 color=red,shape=square,flag=1 color=red,shape=square,flag=0 color=red,shape=circle,flag=1 color=purple,shape=square,flag=0 color=purple,shape=square,flag=0 color=red,shape=square,flag=1 color=purple,shape=triangle,flag=0 color=purple,shape=triangle,flag=0 color=purple,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=square,flag=0 color=yellow,shape=triangle,flag=1 color=yellow,shape=circle,flag=1 color=purple,shape=square,flag=0 miller-5.6.2/c/reg_test/input/reshape-long-ragged.dkvp000066400000000000000000000005011354153536500227140ustar00rootroot00000000000000time=2009-01-01,item=X,value=0.65473572 time=2009-01-01,item=Y,value=2.4520609 time=2009-01-01,item=Z,value=-1.46570942 time=2009-01-02,item=X,value=-0.89248112 time=2009-01-02,item=Y,value=0.2154713 time=2009-01-03,item=X,value=0.98012375 time=2009-01-04 time=2009-01-05,U=1.3477511,V=0.09719105,item=X,value=2.19357813 miller-5.6.2/c/reg_test/input/reshape-long.tbl000066400000000000000000000006521354153536500213110ustar00rootroot00000000000000time item price 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-01 Z -1.46570942 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-02 Z -2.05357735 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 2009-01-03 Z 4.64248357 2009-01-04 X 0.35397376 2009-01-04 Y 3.3765645 2009-01-04 Z -0.25237774 2009-01-05 X 2.19357813 2009-01-05 Y 1.3477511 2009-01-05 Z 0.09719105 miller-5.6.2/c/reg_test/input/reshape-wide-ragged.dkvp000066400000000000000000000003041354153536500227060ustar00rootroot00000000000000time=2009-01-01,X=0.65473572,Y=2.4520609,Z=-1.46570942 time=2009-01-02,X=-0.89248112,Y=0.2154713 time=2009-01-03,X=0.98012375 time=2009-01-04 time=2009-01-05,X=2.19357813,U=1.3477511,V=0.09719105 miller-5.6.2/c/reg_test/input/reshape-wide.tbl000066400000000000000000000004021354153536500212730ustar00rootroot00000000000000time X Y Z 2009-01-01 0.65473572 2.4520609 -1.46570942 2009-01-02 -0.89248112 0.2154713 -2.05357735 2009-01-03 0.98012375 1.3179287 4.64248357 2009-01-04 0.35397376 3.3765645 -0.25237774 2009-01-05 2.19357813 1.3477511 0.09719105 miller-5.6.2/c/reg_test/input/rfc-csv/000077500000000000000000000000001354153536500175625ustar00rootroot00000000000000miller-5.6.2/c/reg_test/input/rfc-csv/Makefile.am000066400000000000000000000003371354153536500216210ustar00rootroot00000000000000EXTRA_DIST= \ modify-defaults.csv \ narrow-truncated.csv \ narrow.csv \ quoted-comma-truncated.csv \ quoted-comma.csv \ quoted-crlf-truncated.csv \ quoted-crlf.csv \ simple-truncated.csv \ simple.csv-crlf miller-5.6.2/c/reg_test/input/rfc-csv/Makefile.in000066400000000000000000000277421354153536500216430ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/reg_test/input/rfc-csv ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ modify-defaults.csv \ narrow-truncated.csv \ narrow.csv \ quoted-comma-truncated.csv \ quoted-comma.csv \ quoted-crlf-truncated.csv \ quoted-crlf.csv \ simple-truncated.csv \ simple.csv-crlf all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/reg_test/input/rfc-csv/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/reg_test/input/rfc-csv/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/reg_test/input/rfc-csv/modify-defaults.csv000066400000000000000000000000211354153536500233640ustar00rootroot00000000000000a;b;c 1;2;3 4;;6 miller-5.6.2/c/reg_test/input/rfc-csv/narrow-truncated.csv000066400000000000000000000000111354153536500235660ustar00rootroot00000000000000a 1 2 3 4miller-5.6.2/c/reg_test/input/rfc-csv/narrow.csv000066400000000000000000000000121354153536500216000ustar00rootroot00000000000000a 1 2 3 4 miller-5.6.2/c/reg_test/input/rfc-csv/quoted-comma-truncated.csv000066400000000000000000000000271354153536500246600ustar00rootroot00000000000000a,"b",c 1,"x,3",y 4,5,6miller-5.6.2/c/reg_test/input/rfc-csv/quoted-comma.csv000066400000000000000000000000301354153536500226630ustar00rootroot00000000000000a,"b",c 1,"x,3",y 4,5,6 miller-5.6.2/c/reg_test/input/rfc-csv/quoted-crlf-truncated.csv000066400000000000000000000000271354153536500245120ustar00rootroot00000000000000a,"b",c 1,"x 3",y 4,5,6miller-5.6.2/c/reg_test/input/rfc-csv/quoted-crlf.csv000066400000000000000000000000301354153536500225150ustar00rootroot00000000000000a,"b",c 1,"x 3",y 4,5,6 miller-5.6.2/c/reg_test/input/rfc-csv/simple-truncated.csv000066400000000000000000000000231354153536500235520ustar00rootroot00000000000000a,"b",c 1,x,3 4,5,6miller-5.6.2/c/reg_test/input/rfc-csv/simple.csv-crlf000066400000000000000000000000501354153536500225070ustar00rootroot00000000000000a,"b",c 1,x,3 4,5,6 "x","y""yy","z" miller-5.6.2/c/reg_test/input/scinot.dkvp000066400000000000000000000003151354153536500204030ustar00rootroot00000000000000x=123 x=123. x=123.4 x=.234 x=1e2 x=1e-2 x=1.2e3 x=1.e3 x=1.2e-3 x=1.e-3 x=.2e3 x=.2e-3 x=1.e-3 x=-123 x=-123. x=-123.4 x=-.234 x=-1e2 x=-1e-2 x=-1.2e3 x=-1.e3 x=-1.2e-3 x=-1.e-3 x=-.2e3 x=-.2e-3 x=-1.e-3 miller-5.6.2/c/reg_test/input/scinot1.dkvp000066400000000000000000000000041354153536500204570ustar00rootroot00000000000000i=1 miller-5.6.2/c/reg_test/input/sec2gmt000066400000000000000000000004651354153536500175130ustar00rootroot00000000000000n,sec 1,0 2,1 3,10 4,100 5,1000 6,10000 7,100000 8,1000000 9,10000000 10,100000000 11,1000000000 12,1432036180 13,1500000000 14,2000000000 15,2000000000. 16,2000000000.0 17,2000000000.00 18,2000000000.123400 19,2000000000.123456 20,2000000000.999 21,2000000000.999999 22,2000000000.999999999 23, 24,x 25,123x miller-5.6.2/c/reg_test/input/sec2xhms000066400000000000000000000003751354153536500177030ustar00rootroot00000000000000sec=0 sec=1 sec=59 sec=60 sec=61 sec=3599 sec=3600 sec=3601 sec=86399 sec=86400 sec=86401 sec=863999 sec=864000 sec=864001 sec=-1 sec=-59 sec=-60 sec=-61 sec=-3599 sec=-3600 sec=-3601 sec=-86399 sec=-86400 sec=-86401 sec=-863999 sec=-864000 sec=-864001 miller-5.6.2/c/reg_test/input/short000066400000000000000000000000141354153536500172740ustar00rootroot00000000000000a=1 b=2 c=3 miller-5.6.2/c/reg_test/input/short-circuit.dkvp000066400000000000000000000000521354153536500217010ustar00rootroot00000000000000x=1,a="hello" x=2,a="there" x=3,a="world" miller-5.6.2/c/reg_test/input/sieve.mlr000066400000000000000000000005551354153536500200530ustar00rootroot00000000000000# Sieve of Eratosthenes: simple example of Miller DSL as programming language. begin { @n = 100; } end { for (int i = 0; i <= @n; i += 1) { @s[i] = true; } @s[0] = false; @s[1] = false; for (int i = 2; i <= @n; i += 1) { for (int j = i+i; j <= @n; j += i) { @s[j] = false; } } for (int i = 0; i <= @n; i += 1) { if (@s[i]) { print i; } } } miller-5.6.2/c/reg_test/input/simple.tsv000066400000000000000000000001631354153536500202460ustar00rootroot00000000000000a b i x y pan pan 1 2 0.989945 eks pan 2 1 0.775159 wye wye 3 1 0.761642 eks wye 4 5 0.322934 wye pan 5 5 0.448283 miller-5.6.2/c/reg_test/input/small000066400000000000000000000011121354153536500172450ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/c/reg_test/input/small-nested.json000066400000000000000000000004171354153536500215040ustar00rootroot00000000000000{ "z": { "pan": { "1": 0.726803, "0": 0.952618 }, "eks": { "0": 0.134189, "1": 0.187885 }, "wye": { "1": 0.863624 }, "zee": { "0": 0.976181 }, "hat": { "1": 0.749551 } } } miller-5.6.2/c/reg_test/input/small-non-nested-wrapped.json000066400000000000000000000015451354153536500237370ustar00rootroot00000000000000[ { "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } ,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } ,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } ,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } ,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } ,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } ,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } ,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } ,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } ,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } ] miller-5.6.2/c/reg_test/input/small-non-nested.json000066400000000000000000000015301354153536500222710ustar00rootroot00000000000000{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } { "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } { "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } { "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } { "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } { "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } { "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } { "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } { "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } { "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } miller-5.6.2/c/reg_test/input/sort-het.dkvp000066400000000000000000000000201354153536500206420ustar00rootroot00000000000000x=2 a=3 x=4 x=1 miller-5.6.2/c/reg_test/input/space-pad.dkvp000066400000000000000000000000241354153536500207360ustar00rootroot00000000000000 a=1 b=2 c=3 miller-5.6.2/c/reg_test/input/space-pad.nidx000066400000000000000000000000241354153536500207340ustar00rootroot00000000000000 a b c d e f miller-5.6.2/c/reg_test/input/space-pad.pprint000066400000000000000000000000241354153536500213060ustar00rootroot00000000000000 a b c 1 2 3 miller-5.6.2/c/reg_test/input/string-numeric-ordering.dkvp000066400000000000000000000001201354153536500236530ustar00rootroot00000000000000x=1,y=1,z=a x=1.5,y=1.5,z=b x=a,y=2,z=c x=2,y=3,z=d x=2.5,y=3.5,z=e x=b,y=4,z=f miller-5.6.2/c/reg_test/input/sub.dat000066400000000000000000000000401354153536500174740ustar00rootroot00000000000000x=hello x=HELLO x=world x=WORLD miller-5.6.2/c/reg_test/input/subtab.dkvp000066400000000000000000000000431354153536500203620ustar00rootroot00000000000000x=afoob x=a\tb x=a\\tb x=a b z= x= miller-5.6.2/c/reg_test/input/subtab1.mlr000066400000000000000000000000301354153536500202650ustar00rootroot00000000000000$y=sub($x, "\t", "TAB") miller-5.6.2/c/reg_test/input/subtab2.mlr000066400000000000000000000000311354153536500202670ustar00rootroot00000000000000$y=sub($x, "\\t", "TAB") miller-5.6.2/c/reg_test/input/subtab3.mlr000066400000000000000000000000271354153536500202750ustar00rootroot00000000000000$y=sub($x, "\t", "\t") miller-5.6.2/c/reg_test/input/subtab4.mlr000066400000000000000000000000301354153536500202700ustar00rootroot00000000000000$y=sub($x, "\\t", "\t") miller-5.6.2/c/reg_test/input/test-dsl-stack-allocation.mlr000066400000000000000000000106261354153536500237250ustar00rootroot00000000000000# ================================================================ # See comments in test_dsl_stack.c for details what is being tested here. # ================================================================ # ---------------------------------------------------------------- func f(a,b,c) { @v[NR] = NR*1000; true { var val = nonesuch; while (1 == 1) { if (NR == 1) { for (k, v in $*) { val = v.":".a.":".b.":".c; print "f:1:val:".val; } } elif (NR == 2) { for (k in @v) { print "f:2:k:".k; } } elif (NR == 3) { for (k, v in @v) { print "f:3:k:".k."v:".v; } } elif (NR == 4) { var sum = 0; for (var i = 1; i <= 10; i += 1) { for (var j = 1; j <= 10; j += 1) { sum += i*j; } } val = sum; print "f:val:".val; } break; } } } # ---------------------------------------------------------------- subr s(a,b,c) { @v[NR] = NR*2000; true { var val = nonesuch; while (1 == 1) { if (NR == 1) { for (k, v in $*) { val = v.":".a.":".b.":".c; print "s:1:val:".val; } } elif (NR == 2) { for (k in @v) { print "s:2:k:".k; } } elif (NR == 3) { for (k, v in @v) { print "s:3:k:".k."v:".v; } } elif (NR == 4) { var sum = 0; for (var i = 1; i <= 10; i += 1) { for (var j = 1; j <= 10; j += 1) { sum += i*j; } } val = sum; print "s:val:".val; } break; } } } # ---------------------------------------------------------------- begin { print "BEGIN"; @v[0] = 456; true { var val = nonesuch; for (var idx = 1; idx <= 4; idx += 1) { if (idx == 2) { for (k in @v) { print "b:2:k:".k; } } elif (idx == 3) { for (k, v in @v) { print "b:3:k:".k."v:".v; } } elif (idx == 4) { var sum = 0; for (var i = 1; i <= 10; i += 1) { for (var j = 1; j <= 10; j += 1) { sum += i*j; } } val = sum; print "b:val:".val; } } } } # ---------------------------------------------------------------- print "MAIN"; @v[NR] = NR*4000; true { var val = nonesuch; while (1 == 1) { if (NR == 1) { for (k, v in $*) { val = v; print "m:1:val:".val; } } elif (NR == 2) { for (k in @v) { print "m:2:k:".k; } } elif (NR == 3) { for (k, v in @v) { print "m:3:k:".k."v:".v; } } elif (NR == 4) { var sum = 0; for (var i = 1; i <= 10; i += 1) { for (var j = 1; j <= 10; j += 1) { sum += i*j; } } val = sum; print "m:val:".val; } break; } } $o = f(NR, $a, $y); call s($b, NR, $i**2); # ---------------------------------------------------------------- end { print "END"; @v[100] = 789; true { var val = nonesuch; for (var idx = 1; idx <= 4; idx += 1) { if (idx == 2) { for (k in @v) { print "e:2:k:".k; } } elif (idx == 3) { for (k, v in @v) { print "e:3:k:".k."v:".v; } } elif (idx == 4) { var sum = 0; for (var i = 1; i <= 10; i += 1) { for (var j = 1; j <= 10; j += 1) { sum += i*j; } } val = sum; print "e:val:".val; } } } } miller-5.6.2/c/reg_test/input/trivial-records.csv000066400000000000000000000000311354153536500220370ustar00rootroot00000000000000a,b,c 1,2,3 4,,6 ,, ,8,9 miller-5.6.2/c/reg_test/input/truncated.csv000066400000000000000000000000271354153536500207240ustar00rootroot00000000000000a,b,c 1,2,3 4,5,6 7,8,9miller-5.6.2/c/reg_test/input/truncated.dkvp000066400000000000000000000000131354153536500210700ustar00rootroot00000000000000a=1,b=2 c=3miller-5.6.2/c/reg_test/input/truncated.nidx000066400000000000000000000000111354153536500210640ustar00rootroot000000000000001 2 3 4 5miller-5.6.2/c/reg_test/input/truncated.pprint000066400000000000000000000000271354153536500214450ustar00rootroot00000000000000a b c 1 2 3 4 5 6 7 8 9miller-5.6.2/c/reg_test/input/truncated.xtab-crlf000066400000000000000000000000311354153536500220060ustar00rootroot00000000000000a 1 b 2 c 3 d 4 e 5miller-5.6.2/c/reg_test/input/typeof.dkvp000066400000000000000000000001241354153536500204100ustar00rootroot00000000000000x=1,y=2 x=1,y= x=,y=2 x=,y= a=1,y=2 a=1,y= a=,y=2 a=,y= x=1,b=2 x=1,b= x=,b=2 x=,b= miller-5.6.2/c/reg_test/input/unset1.dkvp000066400000000000000000000000141354153536500203170ustar00rootroot00000000000000a=1,b=2,x=9 miller-5.6.2/c/reg_test/input/unset4.dkvp000066400000000000000000000000601354153536500203230ustar00rootroot00000000000000a=1,b=2,x=9 a=1,b=3,x=9 a=4,b=5,x=9 a=4,b=6,x=9 miller-5.6.2/c/reg_test/input/utf8-1.csv000066400000000000000000000000771354153536500177640ustar00rootroot00000000000000langue,nom,jour français,françois,vendredi žusz,éloignée, miller-5.6.2/c/reg_test/input/utf8-2.csv000066400000000000000000000000551354153536500177610ustar00rootroot00000000000000français,françois,vendredi langue,nom,jour miller-5.6.2/c/reg_test/input/utf8-align.dkvp000066400000000000000000000002041354153536500210570ustar00rootroot00000000000000191º=test,1912=test2,cois=çais,çois=cais 191º=test,1912=test2,ois=çais,çois=cais 191º=test,1912=test2,coise=çais,çois=cais miller-5.6.2/c/reg_test/input/utf8-align.nidx000066400000000000000000000000731354153536500210610ustar00rootroot00000000000000191º test 191 test2 francois français françois francais miller-5.6.2/c/reg_test/input/valgrind.txt000066400000000000000000000362001354153536500205670ustar00rootroot00000000000000Using mlr executable valgrind --leak-check=full ./reg_test/../../c/mlrg mlr cat ./reg_test/input/abixy Command: ./reg_test/../../c/mlrg cat ./reg_test/input/abixy --1366737-- WARNING: Serious error when reading debug info --1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1366737-- Ignoring non-Dwarf2/3/4 block in .debug_info --1366737-- WARNING: Serious error when reading debug info --1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1366737-- Last block truncated in .debug_info; ignoring --1366737-- WARNING: Serious error when reading debug info --1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1366737-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1366737-- WARNING: Serious error when reading debug info --1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1366737-- Ignoring non-Dwarf2/3/4 block in .debug_info --1366737-- WARNING: Serious error when reading debug info --1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1366737-- Last block truncated in .debug_info; ignoring --1366737-- WARNING: Serious error when reading debug info --1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1366737-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 All heap blocks were freed -- no leaks are possible mlr --prepipe cat --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het Command: ./reg_test/../../c/mlrg --prepipe cat --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het --1369394-- WARNING: Serious error when reading debug info --1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369394-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369394-- WARNING: Serious error when reading debug info --1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369394-- Last block truncated in .debug_info; ignoring --1369394-- WARNING: Serious error when reading debug info --1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369394-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1369394-- WARNING: Serious error when reading debug info --1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369394-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369394-- WARNING: Serious error when reading debug info --1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369394-- Last block truncated in .debug_info; ignoring --1369394-- WARNING: Serious error when reading debug info --1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369394-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 32 bytes in 1 blocks are definitely lost in loss record 1 of 2 at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) by 0x45BEAE: ingest_left_file (mapper_join.c:559) by 0x45B916: mapper_join_process_unsorted (mapper_join.c:421) by 0x428C4A: chain_map (stream.c:219) by 0x428BA7: drive_lrec (stream.c:200) by 0x428B48: do_file_chained (stream.c:189) by 0x428970: do_stream_chained_to_stdout (stream.c:143) by 0x4284F3: do_stream_chained (stream.c:34) by 0x4024B3: main (mlrmain.c:32) 64 bytes in 1 blocks are definitely lost in loss record 2 of 2 at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) by 0x428ABB: do_file_chained (stream.c:177) by 0x428970: do_stream_chained_to_stdout (stream.c:143) by 0x4284F3: do_stream_chained (stream.c:34) by 0x4024B3: main (mlrmain.c:32) mlr --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het Command: ./reg_test/../../c/mlrg --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het --1369398-- WARNING: Serious error when reading debug info --1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369398-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369398-- WARNING: Serious error when reading debug info --1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369398-- Last block truncated in .debug_info; ignoring --1369398-- WARNING: Serious error when reading debug info --1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369398-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1369398-- WARNING: Serious error when reading debug info --1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369398-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369398-- WARNING: Serious error when reading debug info --1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369398-- Last block truncated in .debug_info; ignoring --1369398-- WARNING: Serious error when reading debug info --1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369398-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 32 bytes in 1 blocks are definitely lost in loss record 1 of 1 at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) by 0x45BEAE: ingest_left_file (mapper_join.c:559) by 0x45B916: mapper_join_process_unsorted (mapper_join.c:421) by 0x428C4A: chain_map (stream.c:219) by 0x428BA7: drive_lrec (stream.c:200) by 0x428B48: do_file_chained (stream.c:189) by 0x428970: do_stream_chained_to_stdout (stream.c:143) by 0x4284F3: do_stream_chained (stream.c:34) by 0x4024B3: main (mlrmain.c:32) mlr --prepipe cat --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het Command: ./reg_test/../../c/mlrg --prepipe cat --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het --1369400-- WARNING: Serious error when reading debug info --1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369400-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369400-- WARNING: Serious error when reading debug info --1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369400-- Last block truncated in .debug_info; ignoring --1369400-- WARNING: Serious error when reading debug info --1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369400-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1369400-- WARNING: Serious error when reading debug info --1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369400-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369400-- WARNING: Serious error when reading debug info --1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369400-- Last block truncated in .debug_info; ignoring --1369400-- WARNING: Serious error when reading debug info --1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369400-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 32 bytes in 1 blocks are definitely lost in loss record 1 of 2 at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) by 0x45BEAE: ingest_left_file (mapper_join.c:559) by 0x45B916: mapper_join_process_unsorted (mapper_join.c:421) by 0x428C4A: chain_map (stream.c:219) by 0x428BA7: drive_lrec (stream.c:200) by 0x428B48: do_file_chained (stream.c:189) by 0x428970: do_stream_chained_to_stdout (stream.c:143) by 0x4284F3: do_stream_chained (stream.c:34) by 0x4024B3: main (mlrmain.c:32) 64 bytes in 1 blocks are definitely lost in loss record 2 of 2 at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) by 0x428ABB: do_file_chained (stream.c:177) by 0x428970: do_stream_chained_to_stdout (stream.c:143) by 0x4284F3: do_stream_chained (stream.c:34) by 0x4024B3: main (mlrmain.c:32) mlr --json join -s -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json Command: ./reg_test/../../c/mlrg --json join -s -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json --1369430-- WARNING: Serious error when reading debug info --1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369430-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369430-- WARNING: Serious error when reading debug info --1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369430-- Last block truncated in .debug_info; ignoring --1369430-- WARNING: Serious error when reading debug info --1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369430-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1369430-- WARNING: Serious error when reading debug info --1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369430-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369430-- WARNING: Serious error when reading debug info --1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369430-- Last block truncated in .debug_info; ignoring --1369430-- WARNING: Serious error when reading debug info --1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369430-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 mlr --dkvp join -s -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp Command: ./reg_test/../../c/mlrg --dkvp join -s -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp --1369432-- WARNING: Serious error when reading debug info --1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369432-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369432-- WARNING: Serious error when reading debug info --1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369432-- Last block truncated in .debug_info; ignoring --1369432-- WARNING: Serious error when reading debug info --1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369432-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1369432-- WARNING: Serious error when reading debug info --1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369432-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369432-- WARNING: Serious error when reading debug info --1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369432-- Last block truncated in .debug_info; ignoring --1369432-- WARNING: Serious error when reading debug info --1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369432-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 mlr --csvlite join -s -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv Command: ./reg_test/../../c/mlrg --csvlite join -s -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv --1369435-- WARNING: Serious error when reading debug info --1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369435-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369435-- WARNING: Serious error when reading debug info --1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369435-- Last block truncated in .debug_info; ignoring --1369435-- WARNING: Serious error when reading debug info --1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: --1369435-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 --1369435-- WARNING: Serious error when reading debug info --1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369435-- Ignoring non-Dwarf2/3/4 block in .debug_info --1369435-- WARNING: Serious error when reading debug info --1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369435-- Last block truncated in .debug_info; ignoring --1369435-- WARNING: Serious error when reading debug info --1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: --1369435-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 miller-5.6.2/c/reg_test/input/x0to10.dat000066400000000000000000000000551354153536500177440ustar00rootroot00000000000000x=0 x=1 x=2 x=3 x=4 x=5 x=6 x=7 x=8 x=9 x=10 miller-5.6.2/c/reg_test/input/xy40.dkvp000066400000000000000000000012371354153536500177140ustar00rootroot00000000000000i=1,x=101,y=201 i=2,x=102,y=202 i=3,x=103,y=203 i=4,x=104,y=204 i=5,x=105,y=205 i=6,x=106,y=206 i=7,x=107,y=207 i=8,x=108,y=208 i=9,x=109,y=209 i=10,x=110,y=210 i=11,x=111,y=211 i=12,x=112,y=212 i=13,x=113,y=213 i=14,x=114,y=214 i=15,x=115,y=215 i=16,x=116,y=216 i=17,x=117,y=217 i=18,x=118,y=218 i=19,x=119,y=219 i=20,x=120,y=220 i=21,x=121,y=221 i=22,x=122,y=222 i=23,x=123,y=223 i=24,x=124,y=224 i=25,x=125,y=225 i=26,x=126,y=226 i=27,x=127,y=227 i=28,x=128,y=228 i=29,x=129,y=229 i=30,x=130,y=230 i=31,x=131,y=231 i=32,x=132,y=232 i=33,x=133,y=233 i=34,x=134,y=234 i=35,x=135,y=235 i=36,x=136,y=236 i=37,x=137,y=237 i=38,x=138,y=238 i=39,x=139,y=239 i=40,x=140,y=240 miller-5.6.2/c/reg_test/input/xyz2000066400000000000000000000000301354153536500170470ustar00rootroot00000000000000x=3,y=4,z=5 x=6,y=7,u=8 miller-5.6.2/c/reg_test/input/xyz345000066400000000000000000000000141354153536500172230ustar00rootroot00000000000000x=3,y=4,z=5 miller-5.6.2/c/reg_test/run000077500000000000000000010403521354153536500156170ustar00rootroot00000000000000#!/bin/sh # ================================================================ set -e # For building with autoconf: # * in-directory build: # pwd is /path/to/the/tree/c/reg_test # path to mlr is /path/to/the/tree/c/mlr # path to reg_test/run is /path/to/the/tree/c/reg_test/run # # * out-of-directory ("VPATH") build: # pwd is /path/to/build/tree/c/reg_test # path to mlr is /path/to/build/tree/c/mlr # path to reg_test/run is /path/to/source/tree/c/reg_test/run # For building without autoconf: # pwd is /does/not/matter # path to mlr is /path/to/the/tree/c/mlr # path to reg_test/run is /path/to/the/tree/c/reg_test/run ourdir=`dirname $0` srcdir=$ourdir/../.. pwd=`pwd` try1=$pwd/../mlr # For autoconf builds, in-tree or out-of-tree try2=$srcdir/c/mlr # For non-autoconf builds if [ -x "$try1" ]; then path_to_mlr=$try1 elif [ -x "$try2" ]; then path_to_mlr=$try2 else echo "$0: Could not find path to mlr executable." 1>&2 echo "Try 1: $try1" 1>&2 echo "Try 2: $try2" 1>&2 exit 1 fi # mlr lecat, mlr termcvt, etc. do not accept initial '--no-mmap'. path_to_mlr_for_auxents="$path_to_mlr" if [ "$1" = "--valgrind" ]; then # Leak-check the test suite. Needs 'make mlrg' first. # ../tools/clean-valg can be used to filter the output. path_to_mlr="valgrind --leak-check=full ${path_to_mlr}g" path_to_mlr_for_auxents="$path_to_mlr" elif [ "$1" = "--no-mmap" ]; then path_to_mlr_for_auxents="${path_to_mlr}" path_to_mlr="${path_to_mlr} --no-mmap" elif [ "$1" = "--valgrind-no-mmap" ]; then path_to_mlr="valgrind --leak-check=full ${path_to_mlr}g --no-mmap" path_to_mlr_for_auxents="valgrind --leak-check=full ${path_to_mlr}g" fi echo Using mlr executable $path_to_mlr indir=$ourdir/input expdir=$ourdir/expected outdir=$pwd/output-regtest reloutdir=./output-regtest outfile=$outdir/out expfile=$expdir/out mkdir -p $outdir rm -rf $outdir mkdir -p $outdir touch $outfile echo num_completed=0 announce() { echo >> $outfile echo "================================================================" >> $outfile echo "$@" >> $outfile echo >> $outfile } mention() { echo >> $outfile echo ---------------------------------------------------------------- "$@" >> $outfile } # A key feature of this regression script is that it can be invoked from any # directory. Depending on the directory it's invoked from, the path to the mlr # executable may vary. Nonetheless for debugging it's crucial that we echo out # each command being executed. See also diff -I below. run_mlr() { # Use just "mlr" for info messages echo mlr "$@" echo mlr "$@" >> $outfile # Use path to mlr for invoking the command $path_to_mlr "$@" >> $outfile echo >> $outfile # since set -e num_completed=`expr $num_completed + 1` } run_cat() { echo cat "$@" echo cat "$@" >> $outfile cat "$@" >> $outfile echo >> $outfile } run_mlr_for_auxents() { # Use just "mlr" for info messages echo mlr "$@" >> $outfile # Use path to mlr for invoking the command $path_to_mlr_for_auxents "$@" >> $outfile # since set -e num_completed=`expr $num_completed + 1` } run_mlr_for_auxents_no_output() { # Use just "mlr" for info messages echo mlr "$@" >> $outfile # Use path to mlr for invoking the command $path_to_mlr_for_auxents "$@" # since set -e num_completed=`expr $num_completed + 1` } # Just cats a file while also announcing that fact. run_cat() { echo cat "$@" echo cat "$@" >> $outfile # for diff at end cat "$@" >> $outfile # for diff at end echo >> $outfile } mlr_expect_fail() { # Use just "mlr" for info messages echo mlr "$@" echo mlr "$@" >> $outfile # Use path to mlr for invoking the command set +e $path_to_mlr "$@" >> $outfile 2>&1 status=$? if [ $status -ne 1 ]; then echo "Exit status was $status; expected 1." echo "Exit status was $status; expected 1." >> $outfile fi set -e echo >> $outfile test $status -eq 1 # since set -e num_completed=`expr $num_completed + 1` } # ================================================================ announce STATELESS MAPPERS run_mlr cat $indir/abixy run_mlr cat /dev/null run_mlr cat -n $indir/abixy-het run_mlr cat -N counter $indir/abixy-het run_mlr cat -g a,b $indir/abixy-het run_mlr cat -g a,b $indir/abixy-het run_mlr cat -g a,b -n $indir/abixy-het run_mlr cat -g a,b -N counter $indir/abixy-het run_mlr cut -f a,x $indir/abixy run_mlr cut --complement -f a,x $indir/abixy run_mlr cut -r -f c,e $indir/having-fields-regex.dkvp run_mlr cut -r -f '"C","E"' $indir/having-fields-regex.dkvp run_mlr cut -r -f '"c"i,"e"' $indir/having-fields-regex.dkvp run_mlr cut -r -f '"C"i,"E"' $indir/having-fields-regex.dkvp run_mlr cut -r -x -f c,e $indir/having-fields-regex.dkvp run_mlr cut -r -x -f '"C","E"' $indir/having-fields-regex.dkvp run_mlr cut -r -x -f '"C","E"i' $indir/having-fields-regex.dkvp run_mlr cut -r -x -f '"c","e"i' $indir/having-fields-regex.dkvp run_mlr --csvlite cut -r -f '^Name$,^Date_[0-9].*$' $indir/date1.csv $indir/date2.csv run_mlr having-fields --at-least a,b $indir/abixy run_mlr having-fields --at-least a,c $indir/abixy run_mlr having-fields --at-least a,b,i,x,y $indir/abixy run_mlr having-fields --which-are a,b,i,x $indir/abixy run_mlr having-fields --which-are a,b,i,x,y $indir/abixy run_mlr having-fields --which-are a,b,i,y,x $indir/abixy run_mlr having-fields --which-are a,b,i,x,w $indir/abixy run_mlr having-fields --which-are a,b,i,x,y,z $indir/abixy run_mlr having-fields --at-most a,c $indir/abixy run_mlr having-fields --at-most a,b,i,x,y $indir/abixy run_mlr having-fields --at-most a,b,i,x,y,z $indir/abixy run_mlr having-fields --all-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp run_mlr having-fields --any-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp run_mlr having-fields --none-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp run_mlr having-fields --all-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp run_mlr having-fields --any-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp run_mlr having-fields --none-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp run_mlr rename b,BEE,x,EKS $indir/abixy run_mlr rename nonesuch,nonesuch,x,EKS $indir/abixy run_mlr label NEW $indir/abixy run_mlr label a,NEW,c $indir/abixy run_mlr label 1,2,3,4,5,6,7,8 $indir/abixy run_mlr label d,x,f $indir/abixy mlr_expect_fail label d,x,d $indir/abixy run_mlr --csvlite rename -r '^Date_[0-9].*$,Date' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r '(.*)e(.*),\1EEE\2' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r '"(.*)e(.*)"i,\1EEE\2' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r -g '"(.*)e(.*)"i,\1EEE\2' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r '"e",EEE' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r -g '"e",EEE' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r '"e"i,EEE' $indir/date1.csv $indir/date2.csv run_mlr --csvlite rename -r -g '"e"i,EEE' $indir/date1.csv $indir/date2.csv run_mlr regularize $indir/regularize.dkvp run_mlr --opprint bar -f x,y --lo 0 --hi 1 $indir/abixy run_mlr --opprint bar -f x,y -c c -x x -b b --lo 0.1 --hi 0.9 -w 20 $indir/abixy run_mlr --opprint bar --auto -f x,y -w 10 $indir/abixy run_mlr altkv < 2 > 3' /dev/null run_mlr filter -v ' 1 > 2 > 3' /dev/null run_mlr put -v '$x = 1 >= 2 >= 3' /dev/null run_mlr filter -v ' 1 >= 2 >= 3' /dev/null run_mlr put -v '$x = 1 < 2 <= 3' /dev/null run_mlr filter -v ' 1 < 2 <= 3' /dev/null run_mlr put -v '$x = 1 <= 2 < 3' /dev/null run_mlr filter -v ' 1 <= 2 < 3' /dev/null run_mlr put -v '$x = 1 | 2 | 3' /dev/null run_mlr filter -v ' 1 | 2 | 3' /dev/null run_mlr put -v '$x = 1 ^ 2 ^ 3' /dev/null run_mlr filter -v ' 1 ^ 2 ^ 3' /dev/null run_mlr put -v '$x = 1 & 2 & 3' /dev/null run_mlr filter -v ' 1 & 2 & 3' /dev/null run_mlr put -v '$x = 1 | 2 & 3' /dev/null run_mlr filter -v ' 1 | 2 & 3' /dev/null run_mlr put -v '$x = 1 | 2 ^ 3' /dev/null run_mlr filter -v ' 1 | 2 ^ 3' /dev/null run_mlr put -v '$x = 1 ^ 2 | 3' /dev/null run_mlr filter -v ' 1 ^ 2 | 3' /dev/null run_mlr put -v '$x = 1 ^ 2 & 3' /dev/null run_mlr filter -v ' 1 ^ 2 & 3' /dev/null run_mlr put -v '$x = 1 & 2 | 3' /dev/null run_mlr filter -v ' 1 & 2 | 3' /dev/null run_mlr put -v '$x = 1 & 2 ^ 3' /dev/null run_mlr filter -v ' 1 & 2 ^ 3' /dev/null run_mlr put -v '$x = 1 << 2 << 3' /dev/null run_mlr filter -v ' 1 << 2 << 3' /dev/null run_mlr put -v '$x = 1 >> 2 >> 3' /dev/null run_mlr filter -v ' 1 >> 2 >> 3' /dev/null run_mlr put -v '$x = 1 << 2 >> 3' /dev/null run_mlr filter -v ' 1 << 2 >> 3' /dev/null run_mlr put -v '$x = 1 >> 2 << 3' /dev/null run_mlr filter -v ' 1 >> 2 << 3' /dev/null run_mlr put -v '$x = 1 + 2 + 3' /dev/null run_mlr filter -v ' 1 + 2 + 3' /dev/null run_mlr put -v '$x = 1 - 2 - 3' /dev/null run_mlr filter -v ' 1 - 2 - 3' /dev/null run_mlr put -v '$x = 1 + 2 - 3' /dev/null run_mlr filter -v ' 1 + 2 - 3' /dev/null run_mlr put -v '$x = 1 - 2 + 3' /dev/null run_mlr filter -v ' 1 - 2 + 3' /dev/null run_mlr put -v '$x = 1 . 2 . 3' /dev/null run_mlr filter -v ' 1 . 2 . 3' /dev/null run_mlr put -v '$x = 1 * 2 * 3' /dev/null run_mlr filter -v ' 1 * 2 * 3' /dev/null run_mlr put -v '$x = 1 / 2 / 3' /dev/null run_mlr filter -v ' 1 / 2 / 3' /dev/null run_mlr put -v '$x = 1 // 2 // 3' /dev/null run_mlr filter -v ' 1 // 2 // 3' /dev/null run_mlr put -v '$x = 1 % 2 % 3' /dev/null run_mlr filter -v ' 1 % 2 % 3' /dev/null run_mlr put -v '$x = 1 ** 2 ** 3' /dev/null run_mlr filter -v ' 1 ** 2 ** 3' /dev/null run_mlr put -v '$x = 1 * 2 / 3' /dev/null run_mlr filter -v ' 1 * 2 / 3' /dev/null run_mlr put -v '$x = 1 * 2 // 3' /dev/null run_mlr filter -v ' 1 * 2 // 3' /dev/null run_mlr put -v '$x = 1 * 2 % 3' /dev/null run_mlr filter -v ' 1 * 2 % 3' /dev/null run_mlr put -v '$x = 1 * 2 ** 3' /dev/null run_mlr filter -v ' 1 * 2 ** 3' /dev/null run_mlr put -v '$x = 1 / 2 * 3' /dev/null run_mlr filter -v ' 1 / 2 * 3' /dev/null run_mlr put -v '$x = 1 / 2 // 3' /dev/null run_mlr filter -v ' 1 / 2 // 3' /dev/null run_mlr put -v '$x = 1 / 2 % 3' /dev/null run_mlr filter -v ' 1 / 2 % 3' /dev/null run_mlr put -v '$x = 1 / 2 ** 3' /dev/null run_mlr filter -v ' 1 / 2 ** 3' /dev/null run_mlr put -v '$x = 1 // 2 * 3' /dev/null run_mlr filter -v ' 1 // 2 * 3' /dev/null run_mlr put -v '$x = 1 // 2 / 3' /dev/null run_mlr filter -v ' 1 // 2 / 3' /dev/null run_mlr put -v '$x = 1 // 2 % 3' /dev/null run_mlr filter -v ' 1 // 2 % 3' /dev/null run_mlr put -v '$x = 1 // 2 ** 3' /dev/null run_mlr filter -v ' 1 // 2 ** 3' /dev/null run_mlr put -v '$x = 1 % 2 * 3' /dev/null run_mlr filter -v ' 1 % 2 * 3' /dev/null run_mlr put -v '$x = 1 % 2 / 3' /dev/null run_mlr filter -v ' 1 % 2 / 3' /dev/null run_mlr put -v '$x = 1 % 2 // 3' /dev/null run_mlr filter -v ' 1 % 2 // 3' /dev/null run_mlr put -v '$x = 1 % 2 ** 3' /dev/null run_mlr filter -v ' 1 % 2 ** 3' /dev/null run_mlr put -v '$x = 1 ** 2 * 3' /dev/null run_mlr filter -v ' 1 ** 2 * 3' /dev/null run_mlr put -v '$x = 1 ** 2 / 3' /dev/null run_mlr filter -v ' 1 ** 2 / 3' /dev/null run_mlr put -v '$x = 1 ** 2 // 3' /dev/null run_mlr filter -v ' 1 ** 2 // 3' /dev/null run_mlr put -v '$x = 1 ** 2 % 3' /dev/null run_mlr filter -v ' 1 ** 2 % 3' /dev/null run_mlr put -v '$x = ++1' /dev/null run_mlr filter -v ' ++1' /dev/null run_mlr put -v '$x = --1' /dev/null run_mlr filter -v ' --1' /dev/null run_mlr put -v '$x = !!1' /dev/null run_mlr filter -v ' !!1' /dev/null run_mlr put -v '$x = ~~1' /dev/null run_mlr filter -v ' ~~1' /dev/null run_mlr put -v '$x = 1 ? 2 : 3' /dev/null run_mlr filter -v ' 1 ? 2 : 3' /dev/null run_mlr put -v '$x = 1 ? 2 ? 3 : 4 : 5' /dev/null run_mlr filter -v ' 1 ? 2 ? 3 : 4 : 5' /dev/null run_mlr put -v '$x = 1 ? 2 : 3 ? 4 : 5' /dev/null run_mlr filter -v ' 1 ? 2 : 3 ? 4 : 5' /dev/null # ---------------------------------------------------------------- announce DSL OPERATOR PRECEDENCE # Note: filter -v and put -v print the AST. run_mlr put -v '$x = 1 || 2 ^^ 3' /dev/null run_mlr filter -v ' 1 || 2 ^^ 3' /dev/null run_mlr put -v '$x = 1 || 2 && 3' /dev/null run_mlr filter -v ' 1 || 2 && 3' /dev/null run_mlr put -v '$x = 1 ^^ 2 || 3' /dev/null run_mlr filter -v ' 1 ^^ 2 || 3' /dev/null run_mlr put -v '$x = 1 ^^ 2 && 3' /dev/null run_mlr filter -v ' 1 ^^ 2 && 3' /dev/null run_mlr put -v '$x = 1 && 2 || 3' /dev/null run_mlr filter -v ' 1 && 2 || 3' /dev/null run_mlr put -v '$x = 1 && 2 ^^ 3' /dev/null run_mlr filter -v ' 1 && 2 ^^ 3' /dev/null run_mlr put -v '$x = 1 == 2 <= 3' /dev/null run_mlr filter -v ' 1 == 2 <= 3' /dev/null run_mlr put -v '$x = 1 <= 2 == 3' /dev/null run_mlr filter -v ' 1 <= 2 == 3' /dev/null run_mlr put -v '$x = 1 <= 2 | 3' /dev/null run_mlr filter -v ' 1 <= 2 | 3' /dev/null run_mlr put -v '$x = 1 | 2 <= 3' /dev/null run_mlr filter -v ' 1 | 2 <= 3' /dev/null run_mlr put -v '$x = 1 | 2 ^ 3' /dev/null run_mlr filter -v ' 1 | 2 ^ 3' /dev/null run_mlr put -v '$x = 1 ^ 2 | 3' /dev/null run_mlr filter -v ' 1 ^ 2 | 3' /dev/null run_mlr put -v '$x = 1 ^ 2 & 3' /dev/null run_mlr filter -v ' 1 ^ 2 & 3' /dev/null run_mlr put -v '$x = 1 & 2 ^ 3' /dev/null run_mlr filter -v ' 1 & 2 ^ 3' /dev/null run_mlr put -v '$x = 1 & 2 << 3' /dev/null run_mlr filter -v ' 1 & 2 << 3' /dev/null run_mlr put -v '$x = 1 << 2 & 3' /dev/null run_mlr filter -v ' 1 << 2 & 3' /dev/null run_mlr put -v '$x = 1 + 2 * 3' /dev/null run_mlr filter -v ' 1 + 2 * 3' /dev/null run_mlr put -v '$x = 1 * 2 + 3' /dev/null run_mlr filter -v ' 1 * 2 + 3' /dev/null run_mlr put -v '$x = 1 + (2 * 3)' /dev/null run_mlr filter -v ' 1 + (2 * 3)' /dev/null run_mlr put -v '$x = 1 * (2 + 3)' /dev/null run_mlr filter -v ' 1 * (2 + 3)' /dev/null run_mlr put -v '$x = (1 + 2) * 3' /dev/null run_mlr filter -v ' (1 + 2) * 3' /dev/null run_mlr put -v '$x = (1 * 2) + 3' /dev/null run_mlr filter -v ' (1 * 2) + 3' /dev/null run_mlr put -v '$x = 1 + 2 ** 3' /dev/null run_mlr filter -v ' 1 + 2 ** 3' /dev/null run_mlr put -v '$x = 1 ** 2 + 3' /dev/null run_mlr filter -v ' 1 ** 2 + 3' /dev/null run_mlr put -v '$x = 1 + (2 ** 3)' /dev/null run_mlr filter -v ' 1 + (2 ** 3)' /dev/null run_mlr put -v '$x = 1 ** (2 + 3)' /dev/null run_mlr filter -v ' 1 ** (2 + 3)' /dev/null run_mlr put -v '$x = (1 + 2) ** 3' /dev/null run_mlr filter -v ' (1 + 2) ** 3' /dev/null run_mlr put -v '$x = (1 ** 2) + 3' /dev/null run_mlr filter -v ' (1 ** 2) + 3' /dev/null run_mlr put -v '$x = 1 * 2 ** 3' /dev/null run_mlr filter -v ' 1 * 2 ** 3' /dev/null run_mlr put -v '$x = 1 ** 2 * 3' /dev/null run_mlr filter -v ' 1 ** 2 * 3' /dev/null run_mlr put -v '$x = 1 * (2 ** 3)' /dev/null run_mlr filter -v ' 1 * (2 ** 3)' /dev/null run_mlr put -v '$x = 1 ** (2 * 3)' /dev/null run_mlr filter -v ' 1 ** (2 * 3)' /dev/null run_mlr put -v '$x = (1 * 2) ** 3' /dev/null run_mlr filter -v ' (1 * 2) ** 3' /dev/null run_mlr put -v '$x = (1 ** 2) * 3' /dev/null run_mlr filter -v ' (1 ** 2) * 3' /dev/null run_mlr put -v '$x = -1 + 2 * 3' /dev/null run_mlr filter -v ' -1 + 2 * 3' /dev/null run_mlr put -v '$x = -1 * 2 + 3' /dev/null run_mlr filter -v ' -1 * 2 + 3' /dev/null run_mlr put -v '$x = 1 + -2 * 3' /dev/null run_mlr filter -v ' 1 + -2 * 3' /dev/null run_mlr put -v '$x = 1 * -2 + 3' /dev/null run_mlr filter -v ' 1 * -2 + 3' /dev/null run_mlr put -v '$x = 1 + 2 * -3' /dev/null run_mlr filter -v ' 1 + 2 * -3' /dev/null run_mlr put -v '$x = 1 * 2 + -3' /dev/null run_mlr filter -v ' 1 * 2 + -3' /dev/null run_mlr put -v '$x = ~1 | 2 & 3' /dev/null run_mlr filter -v ' ~1 | 2 & 3' /dev/null run_mlr put -v '$x = ~1 & 2 | 3' /dev/null run_mlr filter -v ' ~1 & 2 | 3' /dev/null run_mlr put -v '$x = 1 | ~2 & 3' /dev/null run_mlr filter -v ' 1 | ~2 & 3' /dev/null run_mlr put -v '$x = 1 & ~2 | 3' /dev/null run_mlr filter -v ' 1 & ~2 | 3' /dev/null run_mlr put -v '$x = 1 | 2 & ~3' /dev/null run_mlr filter -v ' 1 | 2 & ~3' /dev/null run_mlr put -v '$x = 1 & 2 | ~3' /dev/null run_mlr filter -v ' 1 & 2 | ~3' /dev/null run_mlr put -v '$x = $a==1 && $b == 1 && $c == 1' /dev/null run_mlr filter -v ' $a==1 && $b == 1 && $c == 1' /dev/null run_mlr put -v '$x = $a==1 || $b == 1 && $c == 1' /dev/null run_mlr filter -v ' $a==1 || $b == 1 && $c == 1' /dev/null run_mlr put -v '$x = $a==1 || $b == 1 || $c == 1' /dev/null run_mlr filter -v ' $a==1 || $b == 1 || $c == 1' /dev/null run_mlr put -v '$x = $a==1 && $b == 1 || $c == 1' /dev/null run_mlr filter -v ' $a==1 && $b == 1 || $c == 1' /dev/null run_mlr put -v '$x = $a==1 ? $b == 2 : $c == 3' /dev/null run_mlr filter -v ' $a==1 ? $b == 2 : $c == 3' /dev/null run_mlr put -v '$x = true' /dev/null run_mlr filter -v ' true' /dev/null run_mlr put -v 'true || 1==0; $x = 3' /dev/null run_mlr filter -v ' true || 1==0' /dev/null run_mlr put -v '1==0 || false; $x = 3' /dev/null run_mlr filter -v ' 1==0 || false' /dev/null run_mlr put -v 'true && false; $x = 3' /dev/null run_mlr filter -v ' true && false' /dev/null run_mlr put -v 'true && false && true; $x = 3' /dev/null run_mlr filter -v ' true && false && true' /dev/null run_mlr put -v '$y += $x + 3' /dev/null run_mlr put -v '$y += $x * 3' /dev/null run_mlr put -v '$y ||= $x' /dev/null run_mlr put -v '$y ^^= $x' /dev/null run_mlr put -v '$y &&= $x' /dev/null run_mlr put -v '$y |= $x' /dev/null run_mlr put -v '$y ^= $x' /dev/null run_mlr put -v '$y &= $x' /dev/null run_mlr put -v '$y <<= $x' /dev/null run_mlr put -v '$y >>= $x' /dev/null run_mlr put -v '$y += $x' /dev/null run_mlr put -v '$y -= $x' /dev/null run_mlr put -v '$y .= $x' /dev/null run_mlr put -v '$y *= $x' /dev/null run_mlr put -v '$y /= $x' /dev/null run_mlr put -v '$y //= $x' /dev/null run_mlr put -v '$y %= $x' /dev/null run_mlr put -v '$y **= $x' /dev/null # ---------------------------------------------------------------- announce DSL COMMENTS run_mlr --from $indir/abixy put ' $s = 1; #$t = 2; $u = 3; ' run_mlr --from $indir/abixy filter ' NR == 1 || #NR == 2 || NR == 3 ' run_mlr --from $indir/abixy put ' $s = "here is a pound#sign"; # but this is a comment #$t = 2; $u = 3; ' # ---------------------------------------------------------------- announce DSL EMPTY STATEMENTS run_mlr -n put -v '' mlr_expect_fail -n filter -v '' run_mlr -n put -v 'begin {}' run_mlr -n put -v 'begin {;}' run_mlr -n put -v 'begin {;;}' run_mlr -n put -v 'begin {;;;}' run_mlr -n put -v 'begin {@x=1}' run_mlr -n put -v 'begin {@x=1;}' run_mlr -n put -v 'begin {;@x=1}' run_mlr -n put -v 'begin {@x=1;@y=2}' run_mlr -n put -v 'begin {@x=1;;@y=2}' run_mlr -n put -v 'true {}' run_mlr -n put -v 'true {;}' run_mlr -n put -v 'true {;;}' run_mlr -n put -v 'true {;;;}' run_mlr -n put -v 'true {@x=1}' run_mlr -n put -v 'true {@x=1;}' run_mlr -n put -v 'true {;@x=1}' run_mlr -n put -v 'true {@x=1;@y=2}' run_mlr -n put -v 'true {@x=1;;@y=2}' run_mlr -n put -v 'end {}' run_mlr -n put -v 'end {;}' run_mlr -n put -v 'end {;;}' run_mlr -n put -v 'end {;;;}' run_mlr -n put -v 'end {@x=1}' run_mlr -n put -v 'end {@x=1;}' run_mlr -n put -v 'end {;@x=1}' run_mlr -n put -v 'end {@x=1;@y=2}' run_mlr -n put -v 'end {@x=1;;@y=2}' # ---------------------------------------------------------------- announce DSL CONTEXT-SPECIFIC VALIDATION mention non-top-level begin/end mlr_expect_fail put -v 'begin{begin{@x=1}}' mlr_expect_fail put -v 'true{begin{@x=1}}' mlr_expect_fail put -v 'end{end{@x=1}}' mlr_expect_fail put -v 'true{end{@x=1}}' mention srecs in begin/end mlr_expect_fail put -v 'begin{$x=1}' mlr_expect_fail put -v 'begin{@x=$y}' mlr_expect_fail put -v 'end{$x=1}' mlr_expect_fail put -v 'end{@x=$y}' mlr_expect_fail put -v 'begin{@v=$*}' mlr_expect_fail put -v 'end{$*=@v}' mlr_expect_fail put -v 'begin{unset $x}' mlr_expect_fail put -v 'end{unset $x}' mlr_expect_fail put -v 'begin{unset $*}' mlr_expect_fail put -v 'end{unset $*}' mention break/continue outside loop mlr_expect_fail put -v 'break' mlr_expect_fail put -v 'continue' mention oosvars etc. in mlr filter mlr_expect_fail filter -v 'break' mlr_expect_fail filter -v 'continue' mention expanded filter run_mlr --from $indir/abixy filter ' begin { @avoid = 3 } NR != @avoid ' run_mlr --from $indir/abixy filter -x ' begin { @avoid = 3 } NR != @avoid ' run_mlr --from $indir/abixy filter ' func f(n) { return n - 1 } f(NR) == 5 ' run_mlr --from $indir/abixy filter ' subr s(n) { print "NR is ".n } call s(NR); false ' run_mlr --from $indir/abixy filter ' int a = 5; int b = 7; a <= NR && NR <= b ' mlr_expect_fail --from $indir/abixy filter 'filter false' mlr_expect_fail --from $indir/abixy filter 'filter false; true' # ---------------------------------------------------------------- announce DSL FUNCTIONAL TESTS run_mlr filter '$x>.3' $indir/abixy run_mlr filter '$x>.3;' $indir/abixy run_mlr filter '$x>0.3' $indir/abixy run_mlr filter '$x>0.3 && $y>0.3' $indir/abixy run_mlr filter '$x>0.3 || $y>0.3' $indir/abixy run_mlr filter 'NR>=4 && NR <= 7' $indir/abixy run_mlr filter -x '$x>.3' $indir/abixy run_mlr filter -x '$x>0.3' $indir/abixy run_mlr filter -x '$x>0.3 && $y>0.3' $indir/abixy run_mlr filter -x '$x>0.3 || $y>0.3' $indir/abixy run_mlr filter -x 'NR>=4 && NR <= 7' $indir/abixy run_mlr filter '$nosuchfield>.3' $indir/abixy run_mlr put '$x2 = $x**2' $indir/abixy run_mlr put '$x2 = $x**2;' $indir/abixy run_mlr put '$z = -0.024*$x+0.13' $indir/abixy run_mlr put '$c = $a . $b' $indir/abixy run_mlr put '$ii = $i + $i' $indir/abixy run_mlr put '$emptytest = $i + $nosuch' $indir/abixy run_mlr --opprint put '$nr=NR;$fnr=FNR;$nf=NF;$filenum=FILENUM' $indir/abixy $indir/abixy run_mlr --opprint put '$y=madd($x,10,37)' then put '$z=msub($x,10,37)' $indir/modarith.dat run_mlr --opprint put '$y=mexp($x,35,37)' then put '$z=mmul($x,$y,37)' $indir/modarith.dat run_mlr put '$z=min($x, $y)' $indir/minmax.dkvp run_mlr put '$z=max($x, $y)' $indir/minmax.dkvp echo 'x=1,y=2,z=3' | run_mlr put '$o=min()' echo 'x=1,y=2,z=3' | run_mlr put '$o=max()' echo 'x=1,y=2,z=3' | run_mlr put '$o=min($x)' echo 'x=1,y=2,z=3' | run_mlr put '$o=max($x)' echo 'x=1,y=2,z=3' | run_mlr put '$o=min($x,$y)' echo 'x=1,y=2,z=3' | run_mlr put '$o=max($x,$y)' echo 'x=1,y=2,z=3' | run_mlr put '$o=min($x,$y,$z)' echo 'x=1,y=2,z=3' | run_mlr put '$o=max($x,$y,$z)' echo 'x=1,y=b' | run_mlr put '$u=min($x,$y);$v=max($x,$y)' echo 'x=a,y=2' | run_mlr put '$u=min($x,$y);$v=max($x,$y)' echo 'x=a,y=b' | run_mlr put '$u=min($x,$y);$v=max($x,$y)' run_mlr --icsvlite --oxtab put '${x+y} = ${name.x} + ${name.y}; ${x*y} = ${name.x} * ${name.y}' $indir/braced.csv run_mlr --icsvlite --oxtab filter '${name.y} < ${z}' $indir/braced.csv run_mlr --opprint put '$z = $x < 0.5 ? 0 : 1' $indir/abixy run_mlr --csvlite filter 'true && true' $indir/b.csv run_mlr --csvlite filter 'true && false' $indir/b.csv run_mlr --csvlite filter 'false && true' $indir/b.csv run_mlr --csvlite filter 'false && false' $indir/b.csv run_mlr --csvlite filter 'true || true' $indir/b.csv run_mlr --csvlite filter 'true || false' $indir/b.csv run_mlr --csvlite filter 'false || true' $indir/b.csv run_mlr --csvlite filter 'false || false' $indir/b.csv run_mlr --csvlite filter 'true ^^ true' $indir/b.csv run_mlr --csvlite filter 'true ^^ false' $indir/b.csv run_mlr --csvlite filter 'false ^^ true' $indir/b.csv run_mlr --csvlite filter 'false ^^ false' $indir/b.csv # This tests boolean short-circuiting run_mlr put '$x==2 && $a =~ "....." { $y=4 }' $indir/short-circuit.dkvp export X=97 export Y=98 run_mlr put '$x = ENV["X"]; $y = ENV[$name]' $indir/env-var.dkvp export X= export Y= run_mlr put '$x = ENV["X"]; $y = ENV[$name]' $indir/env-var.dkvp run_mlr -n put 'begin{ENV["HOME"]="foobar"} end{print ENV["HOME"]}' echo 'x=hello' | run_mlr put '$y = toupper($x)' echo 'x=HELLO' | run_mlr put '$y = toupper($x)' echo 'x=' | run_mlr put '$y = toupper($x)' echo 'x=hello' | run_mlr put '$y = toupper($z)' echo 'x=hello' | run_mlr put '$y = tolower($x)' echo 'x=HELLO' | run_mlr put '$y = tolower($x)' echo 'x=' | run_mlr put '$y = tolower($x)' echo 'x=hello' | run_mlr put '$y = tolower($z)' echo 'x=hello' | run_mlr put '$y = capitalize($x)' echo 'x=HELLO' | run_mlr put '$y = capitalize($x)' echo 'x=' | run_mlr put '$y = capitalize($x)' echo 'x=hello' | run_mlr put '$y = capitalize($z)' mention LHS value on first record should result in ZYX for process creation export indir; run_mlr --from $indir/abixy put 'ENV["ZYX"]="CBA".NR; print | ENV["indir"]."/env-assign.sh" , "a is " . $a' # ---------------------------------------------------------------- announce POSITIONAL INDEXING run_mlr --opprint put '$NEW = $[[3]]' $indir/abixy run_mlr --opprint put '$NEW = $[[[3]]]' $indir/abixy run_mlr --opprint put '$NEW = $[[11]]' $indir/abixy run_mlr --opprint put '$NEW = $[[[11]]]' $indir/abixy run_mlr --opprint put '$[[3]] = "NEW"' $indir/abixy run_mlr --opprint put '$[[[3]]] = "NEW"' $indir/abixy run_mlr --opprint put '$[[11]] = "NEW"' $indir/abixy run_mlr --opprint put '$[[[11]]] = "NEW"' $indir/abixy run_mlr --opprint put '$[[1]] = $[[2]]' $indir/abixy run_mlr --opprint put '$a = $[[2]]; unset $["a"]' $indir/abixy run_mlr --opprint put '$[[1]] = $b; unset $[[1]]' $indir/abixy run_mlr --opprint put '$[[1]] = $[[2]]; unset $["a"]' $indir/abixy # xxx to do -- there is an old bug here with lack of lhmsmv_unset on the typed overlay at unset run_mlr --opprint put 'unset $c' $indir/abixy run_mlr --opprint put 'unset $c; $c="new"' $indir/abixy run_mlr --opprint put '$c=$a.$b; unset $c; $c="new"' $indir/abixy run_mlr --opprint put '$c=$a.$b; unset $c' $indir/abixy # ---------------------------------------------------------------- announce IS-PREDICATES run_mlr --opprint put '$f=is_absent($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_absent($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_absent($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_absent($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_absent(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_absent(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_bool($x>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_bool($y>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_bool($z>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_bool($nosuch>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_bool(@nosuch>1)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_bool(@somesuch>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_boolean($x>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_boolean($y>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_boolean($z>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_boolean($nosuch>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_boolean(@nosuch>1)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_boolean(@somesuch>1)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_empty(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_empty_map({})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_empty_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_float({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_float(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_int({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_int(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_map({})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_nonempty_map({})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_nonempty_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_empty({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_not_empty(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_map({})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_not_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_null($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_null($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_null($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_null($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_not_null(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_not_null(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_null($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_null($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_null($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_null($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_null(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_null(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_numeric($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_numeric($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_numeric($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_numeric($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_numeric(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_numeric(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_present($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_present($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_present($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_present($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_present(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_present(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_string($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_string($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_string($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_string($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=is_string(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=is_string(@somesuch)' $indir/nullvals.dkvp # ---------------------------------------------------------------- announce ASSERTION PASS-THROUGHS run_mlr --opprint put '$f=asserting_absent($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_absent(@nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_absent($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_absent($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_absent($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_absent(@somesuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put 'foo=asserting_absent($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put 'foo=asserting_absent({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_empty($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty($nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty(@nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_empty(@somesuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put 'foo=asserting_empty($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put 'foo=asserting_empty({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_empty_map({})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map($nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map(@nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_empty_map({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_empty_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_map($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_map({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_map({})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_map($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_map($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_map($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_map($nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_map(@nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_nonempty_map($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_nonempty_map({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_nonempty_map($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_nonempty_map($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_nonempty_map($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_nonempty_map($nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_nonempty_map(@nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_nonempty_map({})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_nonempty_map(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_not_empty($*)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_empty($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_empty(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_empty({1:2})' $indir/nullvals.dkvp run_mlr --opprint put '$nosuch=asserting_not_empty($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=asserting_not_empty(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_not_empty($*)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_not_empty({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_empty($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_empty($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_empty($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_map($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_map($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_map($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_map($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_not_map(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=asserting_not_map(@somesuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_map($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_map({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_map({})' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=asserting_not_null(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_not_null($*)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_not_null({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_null($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_null($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_null($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_null($nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_not_null(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_null($z)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_null($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_null(@nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_null($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_null($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_null(@somesuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$*=asserting_null($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$*=asserting_null({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_numeric($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_numeric($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_numeric($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$*=asserting_numeric($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$*=asserting_numeric({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_numeric($nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_present($x)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_present($y)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_present($z)' $indir/nullvals.dkvp run_mlr --opprint put '@somesuch=1;$f=asserting_present(@somesuch)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_present($*)' $indir/nullvals.dkvp run_mlr --opprint put '$*=asserting_present({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_present($nosuch)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_present(@nosuch)' $indir/nullvals.dkvp run_mlr --opprint put '$f=asserting_string($z)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$*=asserting_string($*)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$*=asserting_string({1:2})' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_string($x)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_string($y)' $indir/nullvals.dkvp mlr_expect_fail --opprint put '$f=asserting_string($nosuch)' $indir/nullvals.dkvp # ---------------------------------------------------------------- announce DSL NULL/EMPTY HANDLING run_mlr put '$z = $s . $s' $indir/null-vs-empty.dkvp run_mlr put '$z = $s == ""' $indir/null-vs-empty.dkvp run_mlr put '$z = $s == $s' $indir/null-vs-empty.dkvp run_mlr put '$z = is_empty($s)' $indir/null-vs-empty.dkvp run_mlr put '$z = $x + $y' $indir/null-vs-empty.dkvp run_mlr put '$z = $y + $y' $indir/null-vs-empty.dkvp run_mlr put '$z = $x + $nosuch' $indir/null-vs-empty.dkvp run_mlr put '$t = sub($s, "ell", "X")' $indir/null-vs-empty.dkvp run_mlr put '$t = sub($s, "ell", "")' $indir/null-vs-empty.dkvp run_mlr put '$t = sub($nosuch, "ell", "X")' $indir/null-vs-empty.dkvp run_mlr put '$t = gsub($s, "l", "X")' $indir/null-vs-empty.dkvp run_mlr put '$t = gsub($s, "l", "")' $indir/null-vs-empty.dkvp run_mlr put '$t = gsub($nosuch, "l", "X")' $indir/null-vs-empty.dkvp mention EMIT run_mlr put -q '@v=1; @nonesuch {emit @v}' $indir/abixy run_mlr put -q '@v=1; @nonesuch==true {emit @v}' $indir/abixy run_mlr put -q '@v=1; $nonesuch {emit @v}' $indir/abixy run_mlr put -q '@v=1; $nonesuch==true {emit @v}' $indir/abixy mention PLUS run_mlr --ofs tab put 'begin{}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp mention MINUS run_mlr --ofs tab put 'begin{}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp mention TIMES run_mlr --ofs tab put 'begin{}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp mention DIVIDE run_mlr --ofs tab put 'begin{}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp mention INTEGER DIVIDE run_mlr --ofs tab put 'begin{}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp mention REMAINDER run_mlr --ofs tab put 'begin{}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp mention BITWISE AND run_mlr --ofs tab put 'begin{}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp mention BITWISE OR run_mlr --ofs tab put 'begin{}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp mention BITWISE XOR run_mlr --ofs tab put 'begin{}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp # ---------------------------------------------------------------- announce DSL TYPE PREDICATES run_mlr --from $indir/abixy --opprint put ' for (k, v in $*) { $[k."_type"] = typeof(v) } ' run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_float(v)) {@float[NR][k] = v}} end{ emit @float, "NR", "k" }' run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_int(v)) {@int[NR][k] = v}} end{ emit @int, "NR", "k" }' run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_numeric(v)) {@numeric[NR][k] = v}} end{ emit @numeric, "NR", "k" }' run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_string(v)) {@string[NR][k] = v}} end{ emit @string, "NR", "k" }' run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_bool(v)) {@bool[NR][k] = v}} end{ emit @bool, "NR", "k" }' run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_bool(NR==2)) {@bool[NR][k] = "NR==2"}} end{ emit @bool, "NR", "k" }' # ---------------------------------------------------------------- announce DSL TYPE-INFERENCE run_mlr --xtab put '$y = $pi1 + $pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$y = $pi1 + $pi2' $indir/mixed-types.xtab run_mlr --xtab put -S '$y = $pi1 . $pi2' $indir/mixed-types.xtab run_mlr --xtab filter '999 != $pi1 + $pi2' $indir/mixed-types.xtab run_mlr --xtab filter -F '999 != $pi1 + $pi2' $indir/mixed-types.xtab run_mlr --xtab filter -S '"999" != $pi1 . $pi2' $indir/mixed-types.xtab echo a=1,b=2.0 | run_mlr --oxtab put '$s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v);' echo a=1,b=2.0 | run_mlr --oxtab put -F '$s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v);' echo a=1,b=2.0 | run_mlr --oxtab put -S '$s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v);' run_mlr --xtab put '$y=abs($pf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=abs($nf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=abs($zf)' $indir/mixed-types.xtab run_mlr --xtab put '$y=abs($pi1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=abs($ni1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=abs($zi)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=abs($pf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=abs($nf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=abs($zf)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=abs($pi1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=abs($ni1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=abs($zi)' $indir/mixed-types.xtab run_mlr --xtab put '$y=ceil($pf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=ceil($nf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=ceil($zf)' $indir/mixed-types.xtab run_mlr --xtab put '$y=ceil($pi1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=ceil($ni1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=ceil($zi)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=floor($pf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=floor($nf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=floor($zf)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=floor($pi1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=floor($ni1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=floor($zi)' $indir/mixed-types.xtab run_mlr --xtab put '$y=round($pf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=round($nf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=round($zf)' $indir/mixed-types.xtab run_mlr --xtab put '$y=round($pi1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=round($ni1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=round($zi)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=round($pf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=round($nf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=round($zf)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=round($pi1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=round($ni1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=round($zi)' $indir/mixed-types.xtab run_mlr --xtab put '$y=sgn($pf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=sgn($nf1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=sgn($zf)' $indir/mixed-types.xtab run_mlr --xtab put '$y=sgn($pi1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=sgn($ni1)' $indir/mixed-types.xtab run_mlr --xtab put '$y=sgn($zi)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=sgn($pf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=sgn($nf1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=sgn($zf)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=sgn($pi1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=sgn($ni1)' $indir/mixed-types.xtab run_mlr --xtab put -F '$y=sgn($zi)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab run_mlr --xtab put -F '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab run_mlr --xtab put '$sum=$pf1+$pf2;$diff=$pf1-$pf2' $indir/mixed-types.xtab run_mlr --xtab put '$sum=$pf1+$pi2;$diff=$pf1-$pi2' $indir/mixed-types.xtab run_mlr --xtab put '$sum=$pi1+$pf2;$diff=$pi1-$pf2' $indir/mixed-types.xtab run_mlr --xtab put '$sum=$pi1+$pi2;$diff=$pi1-$pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$sum=$pf1+$pf2;$diff=$pf1-$pf2' $indir/mixed-types.xtab run_mlr --xtab put -F '$sum=$pf1+$pi2;$diff=$pf1-$pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$sum=$pi1+$pf2;$diff=$pi1-$pf2' $indir/mixed-types.xtab run_mlr --xtab put -F '$sum=$pi1+$pi2;$diff=$pi1-$pi2' $indir/mixed-types.xtab run_mlr --xtab put '$prod=$pf1*$pf2;$quot=$pf1/$pf2' $indir/mixed-types.xtab run_mlr --xtab put '$prod=$pf1*$pi2;$quot=$pf1/$pi2' $indir/mixed-types.xtab run_mlr --xtab put '$prod=$pi1*$pf2;$quot=$pi1/$pf2' $indir/mixed-types.xtab run_mlr --xtab put '$prod=$pi1*$pi2;$quot=$pi1/$pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$prod=$pf1*$pf2;$quot=$pf1/$pf2' $indir/mixed-types.xtab run_mlr --xtab put -F '$prod=$pf1*$pi2;$quot=$pf1/$pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$prod=$pi1*$pf2;$quot=$pi1/$pf2' $indir/mixed-types.xtab run_mlr --xtab put -F '$prod=$pi1*$pi2;$quot=$pi1/$pi2' $indir/mixed-types.xtab run_mlr --xtab put '$iquot=$pf1//$pf2;$mod=$pf1%$pf2' $indir/mixed-types.xtab run_mlr --xtab put '$iquot=$pf1//$pi2;$mod=$pf1%$pi2' $indir/mixed-types.xtab run_mlr --xtab put '$iquot=$pi1//$pf2;$mod=$pi1%$pf2' $indir/mixed-types.xtab run_mlr --xtab put '$iquot=$pi1//$pi2;$mod=$pi1%$pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$iquot=$pf1//$pf2;$mod=$pf1%$pf2' $indir/mixed-types.xtab run_mlr --xtab put -F '$iquot=$pf1//$pi2;$mod=$pf1%$pi2' $indir/mixed-types.xtab run_mlr --xtab put -F '$iquot=$pi1//$pf2;$mod=$pi1%$pf2' $indir/mixed-types.xtab run_mlr --xtab put -F '$iquot=$pi1//$pi2;$mod=$pi1%$pi2' $indir/mixed-types.xtab run_mlr --xtab put '$a=roundm($pf1,10.0);$b=roundm($pf1,-10.0)' $indir/mixed-types.xtab run_mlr --xtab put '$a=roundm($pf1,10) ;$b=roundm($pf1,-10) ' $indir/mixed-types.xtab run_mlr --xtab put '$a=roundm($pi1,10.0);$b=roundm($pi1,-10.0)' $indir/mixed-types.xtab run_mlr --xtab put '$a=roundm($pi1,10) ;$b=roundm($pi1,-10) ' $indir/mixed-types.xtab echo 'x=3,y=4' | run_mlr --oxtab put '$z=$x+$y; $a=3+4; $b="3"."4"; $c="3"+4' # ---------------------------------------------------------------- announce DSL SCIENTIFIC NOTATION IN FIELD VALUES run_mlr --opprint put '$y=$x+1' $indir/scinot.dkvp # ---------------------------------------------------------------- announce DSL SCIENTIFIC NOTATION IN EXPRESSION LITERALS run_mlr --opprint put '$y = 123 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 123. + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 123.4 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = .234 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1e2 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1e-2 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1.2e3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1.e3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1.2e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1.e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = .2e3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = .2e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = 1.e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -123 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -123. + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -123.4 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -.234 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1e2 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1e-2 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1.2e3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1.e3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1.2e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1.e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -.2e3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -.2e-3 + $i' $indir/scinot1.dkvp run_mlr --opprint put '$y = -1.e-3 + $i' $indir/scinot1.dkvp # ---------------------------------------------------------------- announce DSL FROM-FILE FEATURE run_mlr put -f $indir/put-example.dsl $indir/abixy run_mlr filter -f $indir/filter-example.dsl $indir/abixy run_mlr --from $indir/abixy put -f $indir/put-example.dsl run_mlr --from $indir/abixy filter -f $indir/filter-example.dsl run_mlr --from $indir/abixy --from $indir/abixy-het put -f $indir/put-example.dsl run_mlr --from $indir/abixy --from $indir/abixy-het filter -f $indir/filter-example.dsl # ---------------------------------------------------------------- announce DSL MULTI-PART SCRIPTS run_mlr --opprint --from $indir/abixy put -f $indir/put-script-piece-1 run_mlr --opprint --from $indir/abixy put -f $indir/put-script-piece-1 -f $indir/put-script-piece-2 run_mlr --opprint --from $indir/abixy put -f $indir/put-script-piece-1 -f $indir/put-script-piece-2 -f $indir/put-script-piece-3 run_mlr --opprint --from $indir/abixy put -e '$xy = $x**2 + $y**2' run_mlr --opprint --from $indir/abixy filter -e 'NR == 7' run_mlr --opprint --from $indir/abixy put -e 'print "PRE";' -f $indir/put-script-piece-1 -f $indir/put-script-piece-2 -f $indir/put-script-piece-3 -e 'print "POST"' run_mlr --opprint --from $indir/abixy filter -f $indir/filter-script-piece-1 run_mlr --opprint --from $indir/abixy filter -f $indir/filter-script-piece-1 -f $indir/filter-script-piece-2 # ---------------------------------------------------------------- announce UTF-8 STRLEN run_mlr --inidx --ifs comma --oxtab put '$s1=strlen($1);$s2=strlen($2);$s3=strlen($3);$s4=strlen($4)' $indir/utf8-align.dkvp # ---------------------------------------------------------------- announce STATS1/STEP INT/FLOAT run_mlr --opprint step -a rsum,delta,counter -f x,y,z $indir/int-float.dkvp run_mlr --opprint step -F -a rsum,delta,counter -f x,y,z $indir/int-float.dkvp run_mlr --oxtab stats1 -a min,max,sum,count -f x,y,z $indir/int-float.dkvp run_mlr --oxtab stats1 -F -a min,max,sum,count -f x,y,z $indir/int-float.dkvp # ---------------------------------------------------------------- announce DSL PYTHONIC DIVISION run_mlr --xtab put '$quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0' $indir/mixed-types.xtab run_mlr --xtab put '$quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0' $indir/mixed-types.xtab run_mlr --xtab put -F '$quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ' $indir/mixed-types.xtab # ---------------------------------------------------------------- announce DSL REGEX MATCHING run_mlr filter -v '$x =~ "bcd"' $indir/regex.dkvp run_mlr filter -v '$x =~ "^bcd"' $indir/regex.dkvp run_mlr filter -v '$x =~ "^abc"' $indir/regex.dkvp run_mlr filter -v '$x =~ "^abc$"' $indir/regex.dkvp run_mlr filter -v '$x =~ "^a.*d$"' $indir/regex.dkvp run_mlr filter -v '$x =~ "^a.*"."d$"' $indir/regex.dkvp run_mlr filter -v '$y =~ "\".."' $indir/regex.dkvp run_mlr filter -v '$x =~ "bcd"i' $indir/regex.dkvp run_mlr filter -v '$x =~ "^bcd"i' $indir/regex.dkvp run_mlr filter -v '$x =~ "^abc"i' $indir/regex.dkvp run_mlr filter -v '$x =~ "^abc$"i' $indir/regex.dkvp run_mlr filter -v '$x =~ "^a.*d$"i' $indir/regex.dkvp run_mlr filter -v '$x =~ "^a.*"."d$"i' $indir/regex.dkvp run_mlr --csv filter '$text =~ "."' $indir/dot-match.csv run_mlr --csv filter '$text =~ "\."' $indir/dot-match.csv # ---------------------------------------------------------------- announce DSL TYPED OVERLAY run_mlr put '$y = string($x); $z=$y.$y' $indir/int-float.dkvp run_mlr put '$z=string($x).string($x)' $indir/int-float.dkvp run_mlr put '$y = string($x)' then put '$z=$y.$y' $indir/int-float.dkvp run_mlr put '$a="hello"' then put '$b=$a." world";$z=$x+$y;$c=$b;$a=sub($b,"hello","farewell")' $indir/int-float.dkvp # ---------------------------------------------------------------- announce DSL REGEX CAPTURES # cat reg_test/input/capture.dkvp # FIELD=ABC123 # FIELD=ABC..123 # FIELD=..ABC..123.. # FIELD=none of the above run_mlr --opprint put '$FIELD =~ "([A-Z]+)([0-9]+)"; $F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp run_mlr --opprint put '$FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)"; $F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp run_mlr --opprint put '$FIELD =~ "([A-Z]+)([0-9]+)"' then put '$F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp run_mlr --opprint put '$FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)"' then put '$F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp # cat reg_test/input/capture-lengths.dkvp # FIELD= # FIELD=a # FIELD=ab # FIELD=abc # FIELD=abcd # FIELD=abcde # FIELD=abcdef # FIELD=abcdefg # FIELD=abcdefgh # FIELD=abcdefghi # FIELD=abcdefghij # FIELD=abcdefghijk # FIELD=abcdefghijkl run_mlr --opprint put ' $FIELD =~ "....."; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put ' $FIELD =~ "....." {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "....."; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp # ---------------------------------------------------------------- announce DSL FILTER/PATTERN-ACTION run_mlr --opprint put ' $x > 0.5; $z = "flag"' $indir/abixy run_mlr --opprint put ' !($x > 0.5); $z = "flag"' $indir/abixy run_mlr --opprint put 'filter $x > 0.5; $z = "flag"' $indir/abixy run_mlr --opprint put ' $x > 0.5 {$z = "flag"}' $indir/abixy run_mlr --opprint put 'filter !($x > 0.5); $z = "flag"' $indir/abixy run_mlr --opprint put ' !($x > 0.5) {$z = "flag"}' $indir/abixy # ---------------------------------------------------------------- announce DSL GMT DATE/TIME FUNCTIONS run_mlr --csvlite put '$gmt = sec2gmt($sec)' $indir/sec2gmt run_mlr --csvlite put '$gmt = sec2gmt($sec,1)' $indir/sec2gmt run_mlr --csvlite put '$gmt = sec2gmt($sec,3)' $indir/sec2gmt run_mlr --csvlite put '$gmt = sec2gmt($sec,6)' $indir/sec2gmt run_mlr --csvlite put '$sec = gmt2sec($gmt)' $indir/gmt2sec run_mlr --csvlite put '$gmtdate = sec2gmtdate($sec)' $indir/sec2gmt run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%SZ")' $indir/sec2gmt run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%1SZ")' $indir/sec2gmt run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%3SZ")' $indir/sec2gmt run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%6SZ")' $indir/sec2gmt run_mlr --icsv --opprint put '$sec = strptime($gmt, "%Y-%m-%dT%H:%M:%SZ")' $indir/gmt2sec run_mlr --csvlite sec2gmt sec $indir/sec2gmt run_mlr --opprint put '$hms=sec2hms($sec); $resec=hms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms run_mlr --opprint put '$hms=fsec2hms($sec); $resec=hms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms run_mlr --opprint put '$hms=sec2dhms($sec); $resec=dhms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms run_mlr --opprint put '$hms=fsec2dhms($sec); $resec=dhms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms run_mlr --csvlite sec2gmt sec $indir/sec2gmt run_mlr --csvlite sec2gmtdate sec $indir/sec2gmt # ---------------------------------------------------------------- announce DSL LOCAL DATE/TIME FUNCTIONS # See also the system date command: # export TZ=America/Sao_Paulo; date -j -f "%Y-%m-%d %H:%M:%S %Z" "2017-02-19 00:30:00" +%s # export TZ=America/Sao_Paulo; date -r 86400 +"%Y-%m-%d %H:%M:%S %Z" export TZ=America/Sao_Paulo echo TZ=$TZ run_mlr --opprint put '$b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b)' <<_EOF a=2017-02-18 23:00:00 a=2017-02-18 23:59:59 a=2017-02-19 00:00:00 a=2017-02-19 00:30:00 a=2017-02-19 01:00:00 a=2017-10-14 23:00:00 a=2017-10-14 23:59:59 a=2017-10-15 00:00:00 a=2017-10-15 00:30:00 a=2017-10-15 01:00:00 _EOF export TZ= export TZ=America/Sao_Paulo echo TZ=$TZ run_mlr --opprint put '$b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b)' <<_EOF a=2017-02-14 00:00:00 a=2017-02-15 00:00:00 a=2017-02-16 00:00:00 a=2017-02-17 00:00:00 a=2017-02-18 00:00:00 a=2017-02-19 00:00:00 a=2017-02-20 00:00:00 a=2017-10-12 00:00:00 a=2017-10-13 00:00:00 a=2017-10-14 00:00:00 a=2017-10-15 00:00:00 a=2017-10-16 00:00:00 a=2017-10-17 00:00:00 a=2017-10-18 00:00:00 a=2017-10-19 00:00:00 _EOF export TZ= export TZ=America/Sao_Paulo echo TZ=$TZ run_mlr --opprint put '$b=strptime_local($a, "%Y-%m-%d %H:%M:%S"); $c=strftime_local($b, "%Y-%m-%d %H:%M:%S")' <<_EOF a=2017-02-18 23:00:00 a=2017-02-18 23:59:59 a=2017-02-19 00:00:00 a=2017-02-19 00:30:00 a=2017-02-19 01:00:00 a=2017-10-14 23:00:00 a=2017-10-14 23:59:59 a=2017-10-15 00:00:00 a=2017-10-15 00:30:00 a=2017-10-15 01:00:00 _EOF export TZ= export TZ=America/Sao_Paulo echo TZ=$TZ run_mlr --opprint put '$b=strptime_local($a, "%Y-%m-%d %H:%M:%S"); $c=strftime_local($b, "%Y-%m-%d %H:%M:%S")' <<_EOF a=2017-02-18 23:00:00 a=2017-02-18 23:59:59 a=2017-02-19 00:00:00 a=2017-02-19 00:30:00 a=2017-02-19 01:00:00 a=2017-10-14 23:00:00 a=2017-10-14 23:59:59 a=2017-10-15 00:00:00 a=2017-10-15 00:30:00 a=2017-10-15 01:00:00 _EOF export TZ= # ---------------------------------------------------------------- announce DSL SUB/GSUB/REGEX_EXTRACT run_mlr --opprint put '$y = sub($x, "e.*l", "")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "e.*l"i, "")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "e.*"."l", "")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "e.*l", "y123y")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "e.*l"i, "y123y")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "e.*"."l", "y123y")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "([hg])e.*l(.)", "y\1y123\2y")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "([hg])e.*l.", "y\1y123\2y")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "([hg])e.*l(.)", "y\1y123.y")' $indir/sub.dat run_mlr --opprint put '$y = sub($x, "a", "aa")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "a", "aa")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "A", "Aa")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "a"i, "Aa")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "A"i, "Aa")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "a(.)", "aa\1\1\1")' $indir/gsub.dat run_mlr --opprint put '$y = sub($x, "a", "")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "a", "")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "A", "")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "a"i, "")' $indir/gsub.dat run_mlr --opprint put '$y = gsub($x, "A"i, "")' $indir/gsub.dat run_mlr --oxtab cat $indir/subtab.dkvp run_mlr --oxtab put -f $indir/subtab1.mlr $indir/subtab.dkvp run_mlr --oxtab put -f $indir/subtab2.mlr $indir/subtab.dkvp run_mlr --oxtab put -f $indir/subtab3.mlr $indir/subtab.dkvp run_mlr --oxtab put -f $indir/subtab4.mlr $indir/subtab.dkvp run_mlr --opprint put '$y = ssub($x, "HE", "")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "HE", "HE")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "HE", "12345")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LL", "1")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LL", "12")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LL", "12345")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LLO", "")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LLO", "12")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LLO", "123")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "LLO", "123456")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "HELLO", "")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "HELLO", "1234")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "HELLO", "12345")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "HELLO", "1234678")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "nonesuch", "")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "nonesuch", "1234")' $indir/sub.dat run_mlr --opprint put '$y = ssub($x, "nonesuch", "1234567890")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[A-Z]+")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[A-Z]*")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[a-z]+")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[a-z]*")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[0-9]+")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[0-9]*")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[ef]+")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[ef]*")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[hi]+")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[hi]*")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[op]+")' $indir/sub.dat run_mlr --oxtab put '$y = regextract($x, "[op]*")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[A-Z]+", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[A-Z]*", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[a-z]+", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[a-z]*", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[0-9]+", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[0-9]*", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[ef]+", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[ef]*", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[hi]+", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[hi]*", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[op]+", "DEFAULT")' $indir/sub.dat run_mlr --oxtab put '$y = regextract_or_else($x, "[op]*", "DEFAULT")' $indir/sub.dat # ---------------------------------------------------------------- announce DSL SUBSTR run_mlr put -q ' int n = strlen($x); print "input= <<".$x.">>"; for (i = -n-2; i <= n+2; i += 1) { for (j = -n-2; j <= n+2; j += 1) { print "i: ".fmtnum(i,"%3lld") ." j:".fmtnum(j,"%3lld") ." substr(".$x.",".fmtnum(i,"%3lld").",".fmtnum(j,"%3lld")."): <<" .substr($x, i, j) .">>"; } print; } ' << EOF x= x=o x=o1 x=o123456789 EOF # ---------------------------------------------------------------- announce DSL SYSTEM run_mlr put '$counter = system("echo X".NR."Y")' $indir/abixy # ---------------------------------------------------------------- announce DSL OOSVARS run_mlr --opprint put -v 'begin{@ox=0}; $d=$x-@ox; @ox=$x' $indir/abixy run_mlr --opprint put -v 'begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x' then step -a ratio -f x $indir/abixy run_mlr --opprint put -v '$d=$x/@ox; @ox=$x' then step -a ratio -f x $indir/abixy run_mlr --opprint put -v 'begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x' then step -a ratio -f x $indir/abixy run_mlr --opprint put -v 'begin{@rsum = 0}; @rsum = @rsum + $x; $rsum = @rsum' $indir/abixy run_mlr --opprint put -v 'begin{@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i' $indir/abixy run_mlr --opprint put -v 'begin {@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i' $indir/abixy run_mlr --opprint put -v 'begin{@ox=0}; $d=$x-@ox; @ox=$x' $indir/abixy run_mlr put -v '@a=$a; @b=$b; @c=$x; end {emitf @a; emitf @b; emitf @c}' $indir/abixy run_mlr put -v '@a=$a; @b=$b; @c=$x; end{emitf @a, @b, @c}' $indir/abixy run_mlr --opprint put -v 'begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x; end{@mean=@sum/@count; emitf @mean}' $indir/abixy run_mlr --opprint put -v 'end{@mean=@sum/@count; emitf @mean}; begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x' $indir/abixy run_mlr put -v 'begin{ @a = @b[1] }; $c = @d; @e[$i][2+$j][3] = $4; end{@f[@g[5][@h]] = 6}' /dev/null run_mlr put '@y[$a]=$y; end{dump}' $indir/abixy run_mlr stats1 -a sum -f y -g a $indir/abixy run_mlr put '@y_sum[$a] = $y; end{dump}' $indir/abixy run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump}' $indir/unset1.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump}' $indir/unset1.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump}' $indir/unset1.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump}' $indir/unset1.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump}' $indir/unset1.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump}' $indir/unset1.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset all; dump}' $indir/unset4.dkvp run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @*; dump}' $indir/unset4.dkvp run_mlr put 'unset $x' $indir/unset4.dkvp run_mlr put 'unset $*; $aaa = 999' $indir/unset4.dkvp run_mlr --from $indir/abixy put 'x = 1; print "OX=".x; unset x; print "NX=".x' run_mlr put -q '@{variable.name} += $x; end{emit @{variable.name}}' $indir/abixy run_mlr put -q '@{variable.name}[$a] += $x; end{emit @{variable.name},"a"}' $indir/abixy run_mlr put 'for (k,v in $*) { if (k == "i") {unset $[k]}}' $indir/abixy run_mlr --opprint --from $indir/abixy put -q ' @output[NR] = $*; end { for ((nr, k), v in @output) { if (nr == 4 || k == "i") { unset @output[nr][k] } } emitp @output, "NR", "k" } ' # ---------------------------------------------------------------- announce DSL PATTERN-ACTION BLOCKS run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {}; $x=6; end{@z=9}' /dev/null run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1}; $x=6; end{@z=9}' /dev/null run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2}; $x=6; end{@z=9}' /dev/null run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2;$u=3}; $x=6; end{@z=9}' /dev/null run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;@t["u".$5]=2;emitf @v,@w;dump}; $x=6; end{@z=9}' /dev/null run_mlr put -v 'begin{true{@x=1}}; true{@x=2}; end{true{@x=3}}' /dev/null # ---------------------------------------------------------------- announce DSL STACK-ALLOCATION # This important test validates the local-stack allocator: which variables are # assigned which offsets in the stack, and how the local-extent contract is # satisfied by the clear-at-enter-subframe logic. The -v flag gives context on # the AST; the -a flag provides the essential output on variable placement; the # Miller script per se validates semantics. run_mlr --from $indir/abixy put -v -a -f $indir/test-dsl-stack-allocation.mlr # These test absent-null handing for as-yet-undefined localvars in expression RHSs. run_mlr --from $indir/abixy put 'a=a; $oa = a' run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a' run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a; a = b; $oc = a' run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a' run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a; b = 4;a = b; $oe= a' # ---------------------------------------------------------------- announce DSL IF-CHAINING mention IF/ELIF WITH ELSE run_mlr --from $indir/xy40.dkvp put -v ' if (NR==1) { $x = 2; $y = 3 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 4) { $x = 5; $y = 6 } else { $x = 1007; $y = 1008 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 9) { $x = 10; $y = 11 } elif (NR == 12) { $x = 13; $y = 14 } else { $x = 1015; $y = 1016 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 17) { $x = 18; $y = 19 } elif (NR == 20) { $x = 21; $y = 22 } elif (NR == 23) { $x = 24; $y = 25 } else { $x = 1026; $y = 1027 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 28) { $x = 29; $y = 30 } elif (NR == 31) { $x = 32; $y = 33 } elif (NR == 34) { $x = 35; $y = 36 } elif (NR == 37) { $x = 38; $y = 39 } else { $x = 1040; $y = 1041 }' mention IF/ELIF WITHOUT ELSE run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 1) { $x = 2; $y = 3 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 4) { $x = 5; $y = 6 } elif (NR == 7) { $x = 8; $y = 9 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 10) { $x = 11; $y = 12 } elif (NR == 13) { $x = 14; $y = 15 } elif (NR == 16) { $x = 17; $y = 18 }' run_mlr --from $indir/xy40.dkvp put -v ' if (NR == 19) { $x = 20; $y = 21 } elif (NR == 22) { $x = 23; $y = 24 } elif (NR == 25) { $x = 26; $y = 37 } elif (NR == 28) { $x = 29; $y = 30 }' # ---------------------------------------------------------------- announce DSL INDIRECT SREC ASSIGNMENTS run_mlr put -v '$["a"] = $["b"]; $["x"] = 10 * $["y"]' $indir/abixy run_mlr --from $indir/abixy put 'while (NF < 256) { $["k".string(NF+1)] = "v".string(NF) }' # ---------------------------------------------------------------- announce DSL INDIRECT OOSVAR ASSIGNMENTS run_mlr --opprint put -v '@s = NR; $t = @s; $u=@["s"]; $v = $t - $u' $indir/abixy run_mlr put -v '@t["u"] = NR; $tu = @["t"]["u"]; emitp all' $indir/abixy run_mlr put -v '@t["u"] = NR; $tu = @["t"]["u"]; emitp @*' $indir/abixy run_mlr put -v '@["s"] = $x; emitp all' $indir/abixy run_mlr put -v '@["t"]["u"] = $y; emitp all' $indir/abixy # xxx @* on the right # xxx @* on the left # ---------------------------------------------------------------- announce DSL WHILE/DO-WHILE LOOPS run_mlr put -v 'while($i < 5) { $i += 1}' $indir/abixy run_mlr put -v 'do {$i += 1} while($i < 5)' $indir/abixy # ---------------------------------------------------------------- announce DSL FOR-SREC LOOPS mention empty for-srec run_mlr --from $indir/abixy put -v 'for(k,v in $*) { }' mention for-srec without boundvars run_mlr --from $indir/abixy put -v 'for(k,v in $*) {$nr= NR}' mention for-srec modifying the srec run_mlr --from $indir/abixy put -v 'for(k,v in $*) {unset $[k]}; $j = NR' run_mlr --from $indir/abixy put -v 'for(k,v in $*) {if (k != "x") {unset $[k]}}; $j = NR' run_mlr --from $indir/abixy --opprint put -S -v 'for(k,v in $*) {$[k."_orig"]=v; $[k] = "other"}' run_mlr --from $indir/abixy put -S -v 'for(k,v in $*) {$[v]=k}' run_mlr --from $indir/abixy put -v ' $sum = 0; for(k,v in $*) { if (k =~ "^[xy]$") { $sum += $[k] } }' run_mlr --from $indir/abixy put -S -v ' $sum = float(0); for(k,v in $*) { if (k =~ "^[xy]$") { $sum += float($[k]) } }' # ---------------------------------------------------------------- announce DSL FOR-OOSVAR LOOPS run_mlr --opprint -n put -v ' @o[1][1]["text1"][NR] = $a; @o[1][2]["text2"][NR] = $b; @o[1][2][$a][$i*100] = $x; for((k1,k2),v in @o[1][2]) { @n[3][4][k2][k1] = v; } end { emit @n, "a", "b", "c", "d" } ' run_mlr --opprint --from $indir/abixy put -q ' @o[1][1]["text1"][NR] = $a; @o[1][2]["text2"][NR] = $b; @o[1][2][$a][$i*100] = $x; for((k1,k2),v in @o[1][2]) { @n[3][4][k2][k1] = v; } end { emit @n, "a", "b", "c", "d" } ' run_mlr --opprint --from $indir/abixy put -q ' @sum[$a][$b] += $x; @count[$a][$b] += 1; end { for ((k1, k2), v in @sum) { @mean[k1][k2] = @sum[k1][k2] / @count[k1][k2] } emitp @sum, "a", "b"; emitp @count, "a", "b"; emitp @mean, "a", "b" } ' run_mlr --opprint --from $indir/abixy-wide put -q ' @value["sum"][$a][$b] += $x; @value["count"][$a][$b] += 1; end { for ((k1, k2), v in @value["sum"]) { @value["mean"][k1][k2] = @value["sum"][k1][k2] / @value["count"][k1][k2] } emitp @value, "stat", "a", "b"; } ' mlr_expect_fail -n put -v 'for (k, k in $*) {}' mlr_expect_fail -n put -v 'for (k, k in @*) {}' mlr_expect_fail -n put -v 'for ((a,a), c in @*) {}' mlr_expect_fail -n put -v 'for ((a,b), a in @*) {}' mlr_expect_fail -n put -v 'for ((a,b), b in @*) {}' mlr_expect_fail -n put -v 'for ((a,a,c), d in @*) {}' mlr_expect_fail -n put -v 'for ((a,b,a), d in @*) {}' mlr_expect_fail -n put -v 'for ((a,b,c), a in @*) {}' mlr_expect_fail -n put -v 'for ((a,b,b), d in @*) {}' mlr_expect_fail -n put -v 'for ((a,b,c), b in @*) {}' mlr_expect_fail -n put -v 'for ((a,b,c), c in @*) {}' run_mlr --from $indir/xyz2 put -q 'func f() { return {"a"."b":"c"."d",3:4}}; for (k,v in f()){print "k=".k.",v=".v}' run_mlr --from $indir/xyz2 put -q 'for (k,v in {"a"."b":"c"."d",3:"c"}) {print "k=".k.",v=".v}' run_mlr --from $indir/xyz2 put -q 'o["a"."b"]="c"."d"; for (k,v in o) {print "k=".k.",v=".v}' run_mlr --from $indir/xyz2 put -q '@o["a"."b"]="c"."d"; for (k,v in @o) {print "k=".k.",v=".v}' run_mlr --from $indir/xyz2 put 'for (k in $*) { print k}' run_mlr --from $indir/xyz2 put 'm=$*; for (k in m) { print k}' # ---------------------------------------------------------------- announce DSL FOR-BIND LOOPS FOR VALGRIND mention key-only fors run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; map o = {}; o[ab] = xy; for (k in o) { print "k is " . k; } ' run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; unset @o; @o[ab] = xy; for (k in @o) { print "k is " . k; } ' run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; for (k in {ab : xy}) { print "k is " . k; } ' run_mlr --from $indir/abixy-het put ' func f(a, b, x, y): map { ab = $a . "_" . $b; xy = $x . "_" . $y; return {ab : xy}; } for (k in f($a, $b, $x, $y)) { print "k is " . k; } ' mention key-value fors with scalar values run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; map o = {}; o[ab] = xy; for (k, v in o) { print "k is " . k . " v is " . v; } ' run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; unset @o; @o[ab] = xy; for (k, v in @o) { print "k is " . k . " v is " . v; } ' run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; for (k, v in {ab : xy}) { print "k is " . k . " v is " . v; } ' run_mlr --from $indir/abixy-het put ' func f(a, b, x, y): map { ab = $a . "_" . $b; xy = $x . "_" . $y; return {ab : xy}; } for (k, v in f($a, $b, $x, $y)) { print "k is " . k . " v is " . v; } ' mention key-value fors with map values run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; map o = {}; o[ab] = {"foo": xy}; for (k, v in o) { print "k is " . k . " v is "; dump v; } ' run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; unset @o; @o[ab]["foo"] = xy; for (k, v in @o) { print "k is " . k . " v is "; dump v; } ' run_mlr --from $indir/abixy-het put ' ab = $a . "_" . $b; xy = $x . "_" . $y; for (k, v in {ab : {"foo": xy}}) { print "k is " . k . " v is "; dump v; } ' run_mlr --from $indir/abixy-het put ' func f(a, b, x, y): map { ab = $a . "_" . $b; xy = $x . "_" . $y; return {ab : {"foo" : xy}}; } for (k, v in f($a, $b, $x, $y)) { print "k is " . k . " v is "; dump v; } ' # ---------------------------------------------------------------- announce DSL BREAK/CONTINUE IN SINGLE WHILE/DO-WHILE run_mlr --opprint --from $indir/abixy put ' while ($i < 5) { $i += 1; break; $a = "ERROR"; } ' run_mlr --opprint --from $indir/abixy put ' while ($i < 5) { $i += 1; continue; $a = "ERROR"; } ' run_mlr --opprint --from $indir/abixy put ' do { $i += 1; break; $a = "ERROR"; } while ($i < 5); ' run_mlr --opprint --from $indir/abixy put ' do { $i += 1; continue; $a = "ERROR"; } while ($i < 5); ' run_mlr --opprint --from $indir/abixy put ' $NR = NR; while ($i < 5) { $i += 1; if (NR == 2) { break; } $a = "reached"; } ' run_mlr --opprint --from $indir/abixy put ' $NR = NR; while ($i < 5) { $i += 1; if (NR == 2) { continue; } $a = "reached"; } ' run_mlr --opprint --from $indir/abixy put ' $NR = NR; do { $i += 1; if (NR == 2) { break; } $a = "reached"; } while ($i < 5); ' run_mlr --opprint --from $indir/abixy put ' $NR = NR; do { $i += 1; if (NR == 2) { continue; } $a = "reached"; } while ($i < 5); ' # ---------------------------------------------------------------- announce DSL BREAK/CONTINUE IN NESTED WHILE/DO-WHILE run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; break; while ($k < 7) { $k += 1 } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; continue; while ($k < 7) { $k += 1 } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; break; $k += 10000; } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; continue; $k += 10000; } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; if (NR == 2 || NR == 8) { break; } while ($k < 7) { $k += 1 } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; if (NR == 2 || NR == 8) { continue; } while ($k < 7) { $k += 1 } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; if (NR == 2 || NR == 8) { break; } $k += 10000; } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; while ($j < 4) { $k = NR; $j += 1; while ($k < 7) { $k += 1; if (NR == 2 || NR == 8) { continue; } $k += 10000; } } ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; break; do { $k += 1 } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; continue; do { $k += 1 } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; do { $k += 1; break; $k += 10000; } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; do { $k += 1; continue; $k += 10000; } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; if (NR == 2 || NR == 8) { break; } do { $k += 1 } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; if (NR == 2 || NR == 8) { continue; } do { $k += 1 } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; do { $k += 1; if (NR == 2 || NR == 8) { break; } $k += 10000; } while ($k < 7); } while ($j < 4); ' run_mlr --opprint --from $indir/abixy put ' $j = NR; do { $k = NR; $j += 1; do { $k += 1; if (NR == 2 || NR == 8) { continue; } $k += 10000; } while ($k < 7); } while ($j < 4); ' # ---------------------------------------------------------------- announce DSL BREAK/CONTINUE IN SINGLE FOR-SREC run_mlr --opprint --from $indir/abixy put -q ' for (k,v in $*) { @logging1[NR][k] = v; if (k == "x") { break; } } end { emitp @logging1, "NR", "k"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k,v in $*) { if (k == "x") { break; } @logging2[NR][k] = v; } end { emitp @logging2, "NR", "k"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k,v in $*) { @logging3[NR][k] = v; if (k == "x") { continue; } } end { emitp @logging3, "NR", "k"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k,v in $*) { if (k == "x") { continue; } @logging4[NR][k] = v; } end { emitp @logging4, "NR", "k" } ' run_mlr --opprint --from $indir/abixy put -q ' for (k,v in $*) { @logging1[NR][k] = v; if (k == "x") { break; } } for (k,v in $*) { if (k == "x") { break; } @logging2[NR][k] = v; } for (k,v in $*) { @logging3[NR][k] = v; if (k == "x") { continue; } } for (k,v in $*) { if (k == "x") { continue; } @logging4[NR][k] = v; } end { emitp @logging1, "NR", "k"; emitp @logging2, "NR", "k"; emitp @logging3, "NR", "k"; emitp @logging4, "NR", "k" } ' # ---------------------------------------------------------------- announce DSL BREAK/CONTINUE IN NESTED FOR-SREC run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; break; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; continue; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; break; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; continue; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; break; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; break; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; continue; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; break; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; break; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; continue; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; continue; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; continue; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { break } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { continue } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { break } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "b") { continue } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { break } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { break } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { continue } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { break } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { break } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { continue } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' run_mlr --opprint --from $indir/abixy put -q ' for (k1, v1 in $*) { @output1[NR][k1] = "before"; if (k1 == "b") { continue } @output1[NR][k1] = v1; for (k2, v2 in $*) { @output2[NR][k1."_".k2] = "before"; if (k2 == "a") { continue } @output2[NR][k1."_".k2] = v2; } } end { emit @output1, "NR", "name"; emit @output2, "NR", "names"; } ' # ---------------------------------------------------------------- announce FOR-MAP DEPTH TESTS mention 'for full oosvar' run_mlr --from $indir/abixy put '@o[1][2] = 7; for(k1,v in @*) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put '@o[1][2] = 7; for((k1),v in @*) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put '@o[1][2] = 7; for((k1,k2),v in @*) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put '@o[1][2] = 7; for((k1,k2,k3),v in @*) {$x+=10;$y+=100}' mention 'for oosvar submap' run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for(k1,v in @o[1][2]) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for((k1),v in @o[1][2]) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for((k1,k2),v in @o[1][2]) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for((k1,k2,k3),v in @o[1][2]) {$x+=10;$y+=100}' mention 'for local' run_mlr --from $indir/abixy put 'o[1][2] = 7; for(k1,v in o) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put 'o[1][2] = 7; for((k1),v in o) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put 'o[1][2] = 7; for((k1,k2),v in o) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put 'o[1][2] = 7; for((k1,k2,k3),v in o) {$x+=10;$y+=100}' mention 'for map-literal' run_mlr --from $indir/abixy put 'for(k1,v in {1:{2:7}}) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put 'for((k1),v in {1:{2:7}}) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put 'for((k1,k2),v in {1:{2:7}}) {$x+=10;$y+=100}' run_mlr --from $indir/abixy put 'for((k1,k2,k3),v in {1:{2:7}}) {$x+=10;$y+=100}' # ---------------------------------------------------------------- announce DSL BREAK/CONTINUE IN SINGLE FOR-OOSVAR mention single-key tests, direct break/continue run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { break; @output[k1] = v; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; break; @output[k1] = "ERROR"; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { continue; @output[k1] = v } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; continue; @output[k1] = "ERROR"; } emit @output, "NR", "name" } ' mention single-key tests, indirect break/continue run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { if (k1 == "i") { break; } @output[k1] = v; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; if (k1 == "i") { break; } } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { if (k1 == "i") { continue; } @output[k1] = v } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for (k1, v in @logging[2]) { @output[k1] = v; if (k1 == "i") { continue; } @output[k1] = "reached"; } emit @output, "NR", "name" } ' mention multiple-key tests, direct break/continue run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { break; @output[k1][k2] = v; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; break; @output[k1][k2] = "ERROR" } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { continue; @output[k1][k2] = v } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; continue; @output[k1][k2] = "ERROR"; } emit @output, "NR", "name" } ' mention multiple-key tests, indirect break/continue run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k1 == 5) { break; } @output[k1][k2] = v; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k2 == "i") { break; } @output[k1][k2] = v; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; if (k1 == 5) { break; } } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = v; if (k2 == "i") { break; } } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k1 == 5) { continue; } @output[k1][k2] = v } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k2 == "i") { continue; } @output[k1][k2] = v } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = "before"; if (k1 == 5) { continue; } @output[k1][k2] = v; } emit @output, "NR", "name" } ' run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { @output[k1][k2] = "before"; if (k2 == "i") { continue; } @output[k1][k2] = v; } emit @output, "NR", "name" } ' # ---------------------------------------------------------------- announce DSL BREAK/CONTINUE IN NESTED FOR-OOSVAR run_mlr --opprint --from $indir/abixy put -q ' @logging[NR] = $*; end { for ((k1, k2), v in @logging) { if (k1 != 2) { continue } for ((k3, k4), v in @logging) { if (k3 != 4) { continue } @output[k1][k2][k3][k4] = v; } } emit @output, "NR1", "name1", "NR2", "name2" } ' # ---------------------------------------------------------------- announce DSL PRINT run_mlr put -q 'print 1; print "two"; print $a; print; print $i < 4; print "y is ".string($y); print ""' $indir/abixy run_mlr put -q 'printn 1; printn "two"; printn $a; printn; printn $i < 4; printn "y is ".string($y); print ""' $indir/abixy run_mlr put -q 'print $*; print $*; print {}; print' $indir/abixy run_mlr put -q 'printn $*; printn $*; printn {}; print' $indir/abixy # ---------------------------------------------------------------- announce ABSENT/EMPTY run_mlr put -q '@sum += $x; end{emitp @sum}' $indir/abixy run_mlr put -q '@sum[$a] += $x; end{emitp @sum, "a"}' $indir/abixy run_mlr put '$nonesuch = @nonesuch' $indir/abixy run_mlr put -q '@sum += $x; end{emitp @sum}' $indir/abixy-het run_mlr put -q '@sum[$a] += $x; end{emitp @sum, "a"}' $indir/abixy-het run_mlr put '$nonesuch = @nonesuch' $indir/abixy-het run_mlr put -q '@sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum}' $indir/abixy run_mlr put -q '@sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum}' $indir/abixy-het run_mlr put '$z = $x + $y' $indir/typeof.dkvp run_mlr put '$z = $x + $u' $indir/typeof.dkvp run_mlr put '@s = @s + $y; emitp @s' $indir/typeof.dkvp run_mlr put '@s = @s + $u; emitp @s' $indir/typeof.dkvp run_mlr put '$z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z)' $indir/typeof.dkvp run_mlr put '$z = $x + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z)' $indir/typeof.dkvp run_mlr put '@s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s)' $indir/typeof.dkvp run_mlr put '@s = @s + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s)' $indir/typeof.dkvp run_mlr cat << EOF x=1 x= x=7 EOF run_mlr --ofs tab put '$osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum+=$x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum }' < "'$tee2'/out.".$a, $*' $indir/abixy run_cat $tee2/out.eks run_cat $tee2/out.hat run_cat $tee2/out.pan run_cat $tee2/out.wye run_cat $tee2/out.zee run_mlr put -q --no-fflush 'tee > "'$tee2'/out.".$a, $*' $indir/abixy run_cat $tee2/out.eks run_cat $tee2/out.hat run_cat $tee2/out.pan run_cat $tee2/out.wye run_cat $tee2/out.zee run_mlr put -q 'tee >> "'$tee2'/out.".$a, $*' $indir/abixy run_cat $tee2/out.eks run_cat $tee2/out.hat run_cat $tee2/out.pan run_cat $tee2/out.wye run_cat $tee2/out.zee run_mlr put -q -o json 'tee > "'$tee2'/out.".$a, $*' $indir/abixy run_cat $tee2/out.eks run_cat $tee2/out.hat run_cat $tee2/out.pan run_cat $tee2/out.wye run_cat $tee2/out.zee run_mlr put -q 'tee | "tr \[a-z\] \[A-Z\]", $*' $indir/abixy run_mlr put -q -o json 'tee | "tr \[a-z\] \[A-Z\]", $*' $indir/abixy touch $tee2/err1 run_mlr put -q 'tee > stdout, $*' $indir/abixy 2> $tee2/err1 run_cat $tee2/err1 touch $tee2/err2 run_mlr put -q 'tee > stderr, $*' $indir/abixy 2> $tee2/err2 run_cat $tee2/err2 # ---------------------------------------------------------------- announce DSL PRINT REDIRECTS print1=$reloutdir/print1 mkdir -p $print1 run_mlr put -q 'print > "'$print1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy run_cat $print1/out.eks run_cat $print1/out.hat run_cat $print1/out.pan run_cat $print1/out.wye run_cat $print1/out.zee run_mlr put -q 'print > "'$print1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy run_cat $print1/out.eks run_cat $print1/out.hat run_cat $print1/out.pan run_cat $print1/out.wye run_cat $print1/out.zee run_mlr put -q 'print >> "'$print1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy run_cat $print1/out.eks run_cat $print1/out.hat run_cat $print1/out.pan run_cat $print1/out.wye run_cat $print1/out.zee run_mlr put -q 'print | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i' $indir/abixy touch $print1/err1 run_mlr put -q 'print > stdout, "abi:".$a.$b.$i' $indir/abixy 2> $print1/err1 run_cat $print1/err1 touch $print1/err2 run_mlr put -q 'print > stderr, "abi:".$a.$b.$i' $indir/abixy 2> $print1/err2 run_cat $print1/err2 # ---------------------------------------------------------------- announce DSL PRINTN REDIRECTS printn1=$reloutdir/printn1 mkdir -p $printn1 run_mlr put -q 'printn > "'$printn1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy run_cat $printn1/out.eks run_cat $printn1/out.hat run_cat $printn1/out.pan run_cat $printn1/out.wye run_cat $printn1/out.zee run_mlr put -q 'printn > "'$printn1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy run_cat $printn1/out.eks run_cat $printn1/out.hat run_cat $printn1/out.pan run_cat $printn1/out.wye run_cat $printn1/out.zee run_mlr put -q 'printn >> "'$printn1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy run_cat $printn1/out.eks run_cat $printn1/out.hat run_cat $printn1/out.pan run_cat $printn1/out.wye run_cat $printn1/out.zee run_mlr put -q 'printn | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i' $indir/abixy touch $printn1/err1 run_mlr put -q 'printn > stdout, "abi:".$a.$b.$i' $indir/abixy 2> $printn1/err1 run_cat $printn1/err1 touch $printn1/err2 run_mlr put -q 'printn > stderr, "abi:".$a.$b.$i' $indir/abixy 2> $printn1/err2 run_cat $printn1/err2 # ---------------------------------------------------------------- announce DSL DUMP REDIRECTS dump1=$reloutdir/dump1 mkdir -p $dump1 run_mlr put -q '@v=$*; dump > "'$dump1'/out.".$a' $indir/abixy run_cat $dump1/out.eks run_cat $dump1/out.hat run_cat $dump1/out.pan run_cat $dump1/out.wye run_cat $dump1/out.zee run_mlr put -q '@v=$*; dump > "'$dump1'/out.".$a' $indir/abixy run_cat $dump1/out.eks run_cat $dump1/out.hat run_cat $dump1/out.pan run_cat $dump1/out.wye run_cat $dump1/out.zee run_mlr put -q '@v=$*; dump >> "'$dump1'/out.".$a' $indir/abixy run_cat $dump1/out.eks run_cat $dump1/out.hat run_cat $dump1/out.pan run_cat $dump1/out.wye run_cat $dump1/out.zee run_mlr put -q '@v=$*; dump | "tr \[a-z\] \[A-Z\]"' $indir/abixy touch $dump1/err1 run_mlr put -q '@v[NR] = $*; NR == 2 { dump > stdout }' $indir/abixy 2> $dump1/err1 run_cat $dump1/err1 touch $dump1/err2 run_mlr put -q '@v[NR] = $*; NR == 2 { dump > stderr }' $indir/abixy 2> $dump1/err2 run_cat $dump1/err2 # ---------------------------------------------------------------- announce DSL EMITF REDIRECTS emitf1=$reloutdir/emitf1 mkdir -p $emitf1 run_mlr put -q '@a=$a; @b=$b; emitf > "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy run_cat $emitf1/out.ekspan run_cat $emitf1/out.ekswye run_cat $emitf1/out.ekszee run_cat $emitf1/out.hatwye run_cat $emitf1/out.panpan run_cat $emitf1/out.panwye run_cat $emitf1/out.wyepan run_cat $emitf1/out.wyewye run_cat $emitf1/out.zeepan run_cat $emitf1/out.zeewye run_mlr put -q '@a=$a; @b=$b; emitf > "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy run_cat $emitf1/out.ekspan run_cat $emitf1/out.ekswye run_cat $emitf1/out.ekszee run_cat $emitf1/out.hatwye run_cat $emitf1/out.panpan run_cat $emitf1/out.panwye run_cat $emitf1/out.wyepan run_cat $emitf1/out.wyewye run_cat $emitf1/out.zeepan run_cat $emitf1/out.zeewye run_mlr put -q '@a=$a; @b=$b; emitf >> "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy run_cat $emitf1/out.ekspan run_cat $emitf1/out.ekswye run_cat $emitf1/out.ekszee run_cat $emitf1/out.hatwye run_cat $emitf1/out.panpan run_cat $emitf1/out.panwye run_cat $emitf1/out.wyepan run_cat $emitf1/out.wyewye run_cat $emitf1/out.zeepan run_cat $emitf1/out.zeewye run_mlr put -q -o json '@a=$a; @b=$b; emitf > "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy run_cat $emitf1/out.ekspan run_cat $emitf1/out.ekswye run_cat $emitf1/out.ekszee run_cat $emitf1/out.hatwye run_cat $emitf1/out.panpan run_cat $emitf1/out.panwye run_cat $emitf1/out.wyepan run_cat $emitf1/out.wyewye run_cat $emitf1/out.zeepan run_cat $emitf1/out.zeewye run_mlr put -q '@a=$a; @b=$b; emitf | "tr \[a-z\] \[A-Z\]", @a, @b' $indir/abixy touch $emitf1/err1 run_mlr put -q '@a=$a; @b=$b; emitf > stdout, @a, @b' $indir/abixy 2> $emitf1/err1 run_cat $emitf1/err1 touch $emitf1/err2 run_mlr put -q '@a=$a; @b=$b; emitf > stderr, @a, @b' $indir/abixy 2> $emitf1/err2 run_cat $emitf1/err2 # ---------------------------------------------------------------- announce DSL EMITP REDIRECTS emitp1=$reloutdir/emitp1 mkdir -p $emitp1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp1'/out.".$a.$b, @a' $indir/abixy run_cat $emitp1/out.ekspan run_cat $emitp1/out.ekswye run_cat $emitp1/out.panpan run_cat $emitp1/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp1'/out.".$a.$b, @a' $indir/abixy run_cat $emitp1/out.ekspan run_cat $emitp1/out.ekswye run_cat $emitp1/out.panpan run_cat $emitp1/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp1'/out.".$a.$b, @a' $indir/abixy run_cat $emitp1/out.ekspan run_cat $emitp1/out.ekswye run_cat $emitp1/out.panpan run_cat $emitp1/out.wyewye run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp1'/out.".$a.$b, @a' $indir/abixy run_cat $emitp1/out.ekspan run_cat $emitp1/out.ekswye run_cat $emitp1/out.panpan run_cat $emitp1/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a' $indir/abixy touch $emitp1/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @a' $indir/abixy 2> $emitp1/err1 run_cat $emitp1/err1 touch $emitp1/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @a' $indir/abixy 2> $emitp1/err2 run_cat $emitp1/err2 emitp2=$reloutdir/emitp2 mkdir -p $emitp2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emitp2/out.ekspan run_cat $emitp2/out.ekswye run_cat $emitp2/out.panpan run_cat $emitp2/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emitp2/out.ekspan run_cat $emitp2/out.ekswye run_cat $emitp2/out.panpan run_cat $emitp2/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emitp2/out.ekspan run_cat $emitp2/out.ekswye run_cat $emitp2/out.panpan run_cat $emitp2/out.wyewye run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emitp2/out.ekspan run_cat $emitp2/out.ekswye run_cat $emitp2/out.panpan run_cat $emitp2/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a, "NR"' $indir/abixy touch $emitp2/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @a, "NR"' $indir/abixy 2> $emitp2/err1 run_cat $emitp2/err1 touch $emitp2/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @a, "NR"' $indir/abixy 2> $emitp2/err2 run_cat $emitp2/err2 emitp3=$reloutdir/emitp3 mkdir -p $emitp3 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emitp3/out.ekspan run_cat $emitp3/out.ekswye run_cat $emitp3/out.panpan run_cat $emitp3/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emitp3/out.ekspan run_cat $emitp3/out.ekswye run_cat $emitp3/out.panpan run_cat $emitp3/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emitp3/out.ekspan run_cat $emitp3/out.ekswye run_cat $emitp3/out.panpan run_cat $emitp3/out.wyewye run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emitp3/out.ekspan run_cat $emitp3/out.ekswye run_cat $emitp3/out.panpan run_cat $emitp3/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b)' $indir/abixy touch $emitp3/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b)' $indir/abixy 2> $emitp3/err1 run_cat $emitp3/err1 touch $emitp3/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b)' $indir/abixy 2> $emitp3/err2 run_cat $emitp3/err2 emitp4=$reloutdir/emitp4 mkdir -p $emitp4 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emitp4/out.ekspan run_cat $emitp4/out.ekswye run_cat $emitp4/out.panpan run_cat $emitp4/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emitp4/out.ekspan run_cat $emitp4/out.ekswye run_cat $emitp4/out.panpan run_cat $emitp4/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emitp4/out.ekspan run_cat $emitp4/out.ekswye run_cat $emitp4/out.panpan run_cat $emitp4/out.wyewye run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emitp4/out.ekspan run_cat $emitp4/out.ekswye run_cat $emitp4/out.panpan run_cat $emitp4/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR"' $indir/abixy touch $emitp4/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b), "NR"' $indir/abixy 2> $emitp4/err1 run_cat $emitp4/err1 touch $emitp4/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b), "NR"' $indir/abixy 2> $emitp4/err2 run_cat $emitp4/err2 emitp5=$reloutdir/emitp5 mkdir -p $emitp5 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp5'/out.".$a.$b, @*' $indir/abixy run_cat $emitp5/out.ekspan run_cat $emitp5/out.ekswye run_cat $emitp5/out.panpan run_cat $emitp5/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @*' $indir/abixy touch $emitp5/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @*' $indir/abixy 2> $emitp5/err1 run_cat $emitp5/err1 touch $emitp5/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @*' $indir/abixy 2> $emitp5/err2 run_cat $emitp5/err2 emitp6=$reloutdir/emitp6 mkdir -p $emitp6 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp6'/out.".$a.$b, all' $indir/abixy run_cat $emitp6/out.ekspan run_cat $emitp6/out.ekswye run_cat $emitp6/out.panpan run_cat $emitp6/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all' $indir/abixy touch $emitp6/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, all' $indir/abixy 2> $emitp6/err1 run_cat $emitp6/err1 touch $emitp6/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, all' $indir/abixy 2> $emitp6/err2 run_cat $emitp6/err2 emitp7=$reloutdir/emitp7 mkdir -p $emitp7 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp7'/out.".$a.$b, @*, "NR"' $indir/abixy run_cat $emitp7/out.ekspan run_cat $emitp7/out.ekswye run_cat $emitp7/out.panpan run_cat $emitp7/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @*, "NR"' $indir/abixy touch $emitp7/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @*, "NR"' $indir/abixy 2> $emitp7/err1 run_cat $emitp7/err1 touch $emitp7/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @*, "NR"' $indir/abixy 2> $emitp7/err2 run_cat $emitp7/err2 emitp8=$reloutdir/emitp8 mkdir -p $emitp8 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp8'/out.".$a.$b, all, "NR"' $indir/abixy run_cat $emitp8/out.ekspan run_cat $emitp8/out.ekswye run_cat $emitp8/out.panpan run_cat $emitp8/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all, "NR"' $indir/abixy touch $emitp8/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, all, "NR"' $indir/abixy 2> $emitp8/err1 run_cat $emitp8/err1 touch $emitp8/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, all, "NR"' $indir/abixy 2> $emitp8/err2 run_cat $emitp8/err2 # ---------------------------------------------------------------- announce DSL EMIT REDIRECTS emit1=$reloutdir/emit1 mkdir -p $emit1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit1'/out.".$a.$b, @a' $indir/abixy run_cat $emit1/out.ekspan run_cat $emit1/out.ekswye run_cat $emit1/out.panpan run_cat $emit1/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit1'/out.".$a.$b, @a' $indir/abixy run_cat $emit1/out.ekspan run_cat $emit1/out.ekswye run_cat $emit1/out.panpan run_cat $emit1/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit1'/out.".$a.$b, @a' $indir/abixy run_cat $emit1/out.ekspan run_cat $emit1/out.ekswye run_cat $emit1/out.panpan run_cat $emit1/out.wyewye run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emit > "'$emit1'/out.".$a.$b, @a' $indir/abixy run_cat $emit1/out.ekspan run_cat $emit1/out.ekswye run_cat $emit1/out.panpan run_cat $emit1/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a' $indir/abixy touch $emit1/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @a' $indir/abixy 2> $emit1/err1 run_cat $emit1/err1 touch $emit1/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @a' $indir/abixy 2> $emit1/err2 run_cat $emit1/err2 emit2=$reloutdir/emit2 mkdir -p $emit2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emit2/out.ekspan run_cat $emit2/out.ekswye run_cat $emit2/out.panpan run_cat $emit2/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emit2/out.ekspan run_cat $emit2/out.ekswye run_cat $emit2/out.panpan run_cat $emit2/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emit2/out.ekspan run_cat $emit2/out.ekswye run_cat $emit2/out.panpan run_cat $emit2/out.wyewye run_mlr head -n 4 then put -q -o pprint '@a[NR]=$a; @b[NR]=$b; emit > "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy run_cat $emit2/out.ekspan run_cat $emit2/out.ekswye run_cat $emit2/out.panpan run_cat $emit2/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a, "NR"' $indir/abixy touch $emit2/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @a, "NR"' $indir/abixy 2> $emit2/err1 run_cat $emit2/err1 touch $emit2/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @a, "NR"' $indir/abixy 2> $emit2/err2 run_cat $emit2/err2 emit3=$reloutdir/emit3 mkdir -p $emit3 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emit3/out.ekspan run_cat $emit3/out.ekswye run_cat $emit3/out.panpan run_cat $emit3/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emit3/out.ekspan run_cat $emit3/out.ekswye run_cat $emit3/out.panpan run_cat $emit3/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emit3/out.ekspan run_cat $emit3/out.ekswye run_cat $emit3/out.panpan run_cat $emit3/out.wyewye run_mlr head -n 4 then put -q --oxtab '@a[NR]=$a; @b[NR]=$b; emit > "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy run_cat $emit3/out.ekspan run_cat $emit3/out.ekswye run_cat $emit3/out.panpan run_cat $emit3/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b)' $indir/abixy touch $emit3/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b)' $indir/abixy 2> $emit3/err1 run_cat $emit3/err1 touch $emit3/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b)' $indir/abixy 2> $emit3/err2 run_cat $emit3/err2 emit4=$reloutdir/emit4 mkdir -p $emit4 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emit4/out.ekspan run_cat $emit4/out.ekswye run_cat $emit4/out.panpan run_cat $emit4/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emit4/out.ekspan run_cat $emit4/out.ekswye run_cat $emit4/out.panpan run_cat $emit4/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emit4/out.ekspan run_cat $emit4/out.ekswye run_cat $emit4/out.panpan run_cat $emit4/out.wyewye run_mlr head -n 4 then put -q --ojson '@a[NR]=$a; @b[NR]=$b; emit > "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy run_cat $emit4/out.ekspan run_cat $emit4/out.ekswye run_cat $emit4/out.panpan run_cat $emit4/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR"' $indir/abixy touch $emit4/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b), "NR"' $indir/abixy 2> $emit4/err1 run_cat $emit4/err1 touch $emit4/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b), "NR"' $indir/abixy 2> $emit4/err2 run_cat $emit4/err2 emit5=$reloutdir/emit5 mkdir -p $emit5 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit5'/out.".$a.$b, @*' $indir/abixy run_cat $emit5/out.ekspan run_cat $emit5/out.ekswye run_cat $emit5/out.panpan run_cat $emit5/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @*' $indir/abixy touch $emit5/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @*' $indir/abixy 2> $emit5/err1 run_cat $emit5/err1 touch $emit5/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @*' $indir/abixy 2> $emit5/err2 run_cat $emit5/err2 emit6=$reloutdir/emit6 mkdir -p $emit6 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit6'/out.".$a.$b, all' $indir/abixy run_cat $emit6/out.ekspan run_cat $emit6/out.ekswye run_cat $emit6/out.panpan run_cat $emit6/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all' $indir/abixy touch $emit6/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, all' $indir/abixy 2> $emit6/err1 run_cat $emit6/err1 touch $emit6/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, all' $indir/abixy 2> $emit6/err2 run_cat $emit6/err2 emit7=$reloutdir/emit7 mkdir -p $emit7 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit7'/out.".$a.$b, @*, "NR"' $indir/abixy run_cat $emit7/out.ekspan run_cat $emit7/out.ekswye run_cat $emit7/out.panpan run_cat $emit7/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @*, "NR"' $indir/abixy touch $emit7/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @*, "NR"' $indir/abixy 2> $emit7/err1 run_cat $emit7/err1 touch $emit7/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @*, "NR"' $indir/abixy 2> $emit7/err2 run_cat $emit7/err2 emit8=$reloutdir/emit8 mkdir -p $emit8 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit8'/out.".$a.$b, all, "NR"' $indir/abixy run_cat $emit8/out.ekspan run_cat $emit8/out.ekswye run_cat $emit8/out.panpan run_cat $emit8/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all, "NR"' $indir/abixy touch $emit8/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, all, "NR"' $indir/abixy 2> $emit8/err1 run_cat $emit8/err1 touch $emit8/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, all, "NR"' $indir/abixy 2> $emit8/err2 run_cat $emit8/err2 emit9=$reloutdir/emit9 mkdir -p $emit9 run_mlr head -n 4 then put -q 'emit > "'$emit9'/out.".$a.$b, $*' $indir/abixy run_cat $emit9/out.ekspan run_cat $emit9/out.ekswye run_cat $emit9/out.panpan run_cat $emit9/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", $*, "NR"' $indir/abixy touch $emit9/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, $*, "NR"' $indir/abixy 2> $emit9/err1 run_cat $emit9/err1 touch $emit9/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, $*, "NR"' $indir/abixy 2> $emit9/err2 run_cat $emit9/err2 emit10=$reloutdir/emit10 mkdir -p $emit10 run_mlr head -n 4 then put -q 'emit > "'$emit10'/out.".$a.$b, mapexcept($*, "a", "b")' $indir/abixy run_cat $emit10/out.ekspan run_cat $emit10/out.ekswye run_cat $emit10/out.panpan run_cat $emit10/out.wyewye run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", mapexcept($*, "a", "b"), "NR"' $indir/abixy touch $emit10/err1 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, mapexcept($*, "a", "b"), "NR"' $indir/abixy 2> $emit10/err1 run_cat $emit10/err1 touch $emit10/err2 run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, mapexcept($*, "a", "b"), "NR"' $indir/abixy 2> $emit10/err2 run_cat $emit10/err2 # ---------------------------------------------------------------- announce OOSVAR-FROM-SREC ASSIGNMENT run_mlr put -v '@v = $*' /dev/null run_mlr put -v '@v[1] = $*' /dev/null run_mlr put -v '@v[$2] = $*' /dev/null run_mlr put -v 'NR == 3 {@v = $*}' /dev/null run_mlr put -v 'NR == 3 {@v[1] = $*}' /dev/null run_mlr put -v 'NR == 3 {@v[$2] = $*}' /dev/null run_mlr --oxtab put -q '@v = $*; end {emitp @v }' $indir/abixy-het run_mlr --oxtab put -q '@v[$a] = $*; end {emitp @v }' $indir/abixy-het run_mlr --oxtab put -q '@v[$a] = $*; end {emitp @v, "a" }' $indir/abixy-het run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emitp @v }' $indir/abixy-het run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emitp @v, "a" }' $indir/abixy-het run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emitp @v, "a", "b"}' $indir/abixy-het # ---------------------------------------------------------------- announce SREC-FROM-OOSVAR ASSIGNMENT run_mlr put -v '$* = @v ' /dev/null run_mlr put -v '$* = @v[1] ' /dev/null run_mlr put -v '$* = @v[$2]' /dev/null run_mlr put -v 'NR == 3 {$* = @v }' /dev/null run_mlr put -v 'NR == 3 {$* = @v[1] }' /dev/null run_mlr put -v 'NR == 3 {$* = @v[$2]}' /dev/null run_mlr put '@v[NR] = $a; NR == 7 { @v = $*} ; $* = @v' $indir/abixy-het # ---------------------------------------------------------------- announce OOSVAR-FROM-OOSVAR ASSIGNMENT run_mlr put -v '@u = @v' /dev/null run_mlr put -v '@u = @v[1]' /dev/null run_mlr put -v '@u[2] = @v' /dev/null run_mlr put -v '@u[2] = @v[1]' /dev/null run_mlr put -v 'begin { @u = @v }' /dev/null run_mlr put -v 'begin { @u = @v[1] }' /dev/null run_mlr put -v 'begin { @u[2] = @v }' /dev/null run_mlr put -v 'begin { @u[2] = @v[1] }' /dev/null run_mlr put -v 'NR == 3 { @u = @v }' /dev/null run_mlr put -v 'NR == 3 { @u = @v[1] }' /dev/null run_mlr put -v 'NR == 3 { @u[2] = @v }' /dev/null run_mlr put -v 'NR == 3 { @u[2] = @v[1] }' /dev/null run_mlr put -v 'end { @u = @v }' /dev/null run_mlr put -v 'end { @u = @v[1] }' /dev/null run_mlr put -v 'end { @u[2] = @v }' /dev/null run_mlr put -v 'end { @u[2] = @v[1] }' /dev/null run_mlr put -q '@s += $i; @t=@s; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t=@s; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t=@s; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t=@s[1][2]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t[3]=@s[1][2]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s[1][2]; end{dump; emitp@s; emitp @t}' $indir/abixy run_mlr --opprint put -q '@s[NR][NR] = $i/100; @t[NR*10]=@s; end{emitp@s,"A","B"; emitp @t,"C","D","E"}' $indir/abixy # ---------------------------------------------------------------- announce CHAINING run_mlr cat then cat $indir/short run_mlr cat then tac $indir/short run_mlr tac then cat $indir/short run_mlr tac then tac $indir/short run_mlr cat then cat then cat $indir/short run_mlr cat then cat then tac $indir/short run_mlr cat then tac then cat $indir/short run_mlr cat then tac then tac $indir/short run_mlr tac then cat then cat $indir/short run_mlr tac then cat then tac $indir/short run_mlr tac then tac then cat $indir/short run_mlr tac then tac then tac $indir/short # ---------------------------------------------------------------- announce NUMBER FORMATTING run_mlr --opprint stats1 -a sum -f x $indir/ofmt.dat run_mlr --ofmt '%.3lf' --opprint stats1 -a sum -f x $indir/ofmt.dat run_mlr --opprint --ofmt '%.3lf' stats1 -a sum -f x $indir/ofmt.dat # ---------------------------------------------------------------- announce IMPLICIT-HEADER-CSV INPUT run_mlr --irs crlf --icsvlite --ifs , --opprint cut -x -f b/ $indir/multi-sep.csv-crlf run_mlr --irs crlf --implicit-csv-header --icsvlite --ifs , --opprint cut -x -f 2 $indir/multi-sep.csv-crlf run_mlr --irs crlf --icsvlite --ifs /, --opprint cut -x -f b $indir/multi-sep.csv-crlf run_mlr --irs crlf --implicit-csv-header --icsvlite --ifs /, --opprint cut -x -f 2 $indir/multi-sep.csv-crlf run_mlr --icsv --ifs , --opprint cut -x -f b/ $indir/multi-sep.csv-crlf run_mlr --implicit-csv-header --icsv --ifs , --opprint cut -x -f 2 $indir/multi-sep.csv-crlf run_mlr --icsv --ifs /, --opprint cut -x -f b $indir/multi-sep.csv-crlf run_mlr --implicit-csv-header --icsv --ifs /, --opprint cut -x -f 2 $indir/multi-sep.csv-crlf run_mlr --csv -N reorder -f 1,3,2,5,4 $indir/multi-sep.csv-crlf run_mlr --csv -N reorder -f 5,4,3,2,1 $indir/multi-sep.csv-crlf # ---------------------------------------------------------------- announce HET-CSV INPUT run_mlr --icsvlite --odkvp cat $indir/a.csv run_mlr --icsvlite --odkvp cat $indir/b.csv run_mlr --icsvlite --odkvp cat $indir/c.csv run_mlr --icsvlite --odkvp cat $indir/d.csv run_mlr --icsvlite --odkvp cat $indir/e.csv run_mlr --icsvlite --odkvp cat $indir/f.csv run_mlr --icsvlite --odkvp cat $indir/g.csv run_mlr --icsvlite --odkvp cat $indir/a.csv $indir/a.csv run_mlr --icsvlite --odkvp cat $indir/b.csv $indir/b.csv run_mlr --icsvlite --odkvp cat $indir/c.csv $indir/c.csv run_mlr --icsvlite --odkvp cat $indir/d.csv $indir/d.csv run_mlr --icsvlite --odkvp cat $indir/e.csv $indir/e.csv run_mlr --icsvlite --odkvp cat $indir/f.csv $indir/f.csv run_mlr --icsvlite --odkvp cat $indir/g.csv $indir/g.csv run_mlr --icsvlite --odkvp cat $indir/a.csv $indir/b.csv run_mlr --icsvlite --odkvp cat $indir/b.csv $indir/c.csv run_mlr --icsvlite --odkvp cat $indir/c.csv $indir/d.csv run_mlr --icsvlite --odkvp cat $indir/d.csv $indir/e.csv run_mlr --icsvlite --odkvp cat $indir/e.csv $indir/f.csv run_mlr --icsvlite --odkvp cat $indir/f.csv $indir/g.csv run_mlr --icsvlite --odkvp cat $indir/a.csv $indir/b.csv \ $indir/c.csv $indir/d.csv $indir/e.csv $indir/f.csv $indir/g.csv run_mlr --icsvlite --odkvp tac $indir/het.csv run_mlr --headerless-csv-output --csvlite tac $indir/a.csv run_mlr --headerless-csv-output --csvlite tac $indir/c.csv run_mlr --headerless-csv-output --csvlite tac $indir/a.csv $indir/c.csv run_mlr --headerless-csv-output --csvlite tac $indir/het.csv run_mlr --headerless-csv-output --csvlite group-like $indir/het.csv # ---------------------------------------------------------------- announce HET-PPRINT INPUT run_mlr --ipprint --odkvp cat $indir/a.pprint run_mlr --ipprint --odkvp cat $indir/b.pprint run_mlr --ipprint --odkvp cat $indir/c.pprint run_mlr --ipprint --odkvp cat $indir/d.pprint run_mlr --ipprint --odkvp cat $indir/e.pprint run_mlr --ipprint --odkvp cat $indir/f.pprint run_mlr --ipprint --odkvp cat $indir/g.pprint run_mlr --ipprint --odkvp cat $indir/a.pprint $indir/a.pprint run_mlr --ipprint --odkvp cat $indir/b.pprint $indir/b.pprint run_mlr --ipprint --odkvp cat $indir/c.pprint $indir/c.pprint run_mlr --ipprint --odkvp cat $indir/d.pprint $indir/d.pprint run_mlr --ipprint --odkvp cat $indir/e.pprint $indir/e.pprint run_mlr --ipprint --odkvp cat $indir/f.pprint $indir/f.pprint run_mlr --ipprint --odkvp cat $indir/g.pprint $indir/g.pprint run_mlr --ipprint --odkvp cat $indir/a.pprint $indir/b.pprint run_mlr --ipprint --odkvp cat $indir/b.pprint $indir/c.pprint run_mlr --ipprint --odkvp cat $indir/c.pprint $indir/d.pprint run_mlr --ipprint --odkvp cat $indir/d.pprint $indir/e.pprint run_mlr --ipprint --odkvp cat $indir/e.pprint $indir/f.pprint run_mlr --ipprint --odkvp cat $indir/f.pprint $indir/g.pprint run_mlr --ipprint --odkvp cat $indir/a.pprint $indir/b.pprint \ $indir/c.pprint $indir/d.pprint $indir/e.pprint $indir/f.pprint $indir/g.pprint # ---------------------------------------------------------------- announce NULL-FIELD INPUT run_mlr --icsvlite --odkvp cat $indir/null-fields.csv run_mlr --inidx --ifs comma --odkvp cat $indir/null-fields.nidx run_mlr --idkvp --oxtab cat $indir/missings.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f y $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f z $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x,y,z $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x -g a $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f y -g a $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f z -g a $indir/nullvals.dkvp run_mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x,y,z -g a $indir/nullvals.dkvp run_mlr --opprint merge-fields -a sum,min,max,antimode,mode -f x,y,z -o xyz $indir/nullvals.dkvp run_mlr --opprint merge-fields -a sum,min,max,antimode,mode -r x,y,z -o xyz $indir/nullvals.dkvp run_mlr --opprint merge-fields -a sum,min,max,antimode,mode -c x,y,z $indir/nullvals.dkvp run_mlr --oxtab stats2 -a cov -f x,y $indir/nullvals.dkvp run_mlr --oxtab stats2 -a cov -f x,z $indir/nullvals.dkvp run_mlr --oxtab stats2 -a cov -f y,z $indir/nullvals.dkvp run_mlr --oxtab stats2 -a cov -f x,y -g a $indir/nullvals.dkvp run_mlr --oxtab stats2 -a cov -f x,z -g a $indir/nullvals.dkvp run_mlr --oxtab stats2 -a cov -f y,z -g a $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f x $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f y $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f z $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f x,y,z $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f x -g a $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f y -g a $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f z -g a $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f x,y,z -g a $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f x $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f y $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f z $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f x -g a $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f y -g a $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f z -g a $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f x -o foo $indir/nullvals.dkvp run_mlr --opprint top -n 5 -f x -g a -o foo $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f x -o foo $indir/nullvals.dkvp run_mlr --opprint top -a -n 5 -f z -o foo -g a $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f x $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f y $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f z $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f x,y,z $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f x -g a $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f y -g a $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f z -g a $indir/nullvals.dkvp run_mlr --opprint step -a counter,rsum -f x,y,z -g a $indir/nullvals.dkvp # ---------------------------------------------------------------- announce SPACE-PADDING run_mlr --idkvp --odkvp --ifs space --repifs cat $indir/space-pad.dkvp run_mlr --inidx --odkvp --ifs space --repifs cat $indir/space-pad.nidx run_mlr --icsvlite --odkvp --ifs space --repifs cat $indir/space-pad.pprint # ---------------------------------------------------------------- announce DOUBLE PS run_mlr --opprint cat $indir/double-ps.dkvp # ---------------------------------------------------------------- announce MISSING FINAL LF run_mlr --csvlite cat $indir/truncated.csv run_mlr --dkvp cat $indir/truncated.dkvp run_mlr --nidx cat $indir/truncated.nidx run_mlr --pprint cat $indir/truncated.pprint run_mlr --xtab cat $indir/truncated.xtab-crlf # ---------------------------------------------------------------- announce UTF-8 alignment run_mlr --icsvlite --opprint cat $indir/utf8-1.csv run_mlr --icsvlite --opprint cat $indir/utf8-2.csv run_mlr --icsvlite --oxtab cat $indir/utf8-1.csv run_mlr --icsvlite --oxtab cat $indir/utf8-2.csv run_mlr --inidx --ifs space --opprint cat $indir/utf8-align.nidx run_mlr --inidx --ifs space --opprint --right cat $indir/utf8-align.nidx run_mlr --oxtab cat $indir/utf8-align.dkvp run_mlr --inidx --ifs space --oxtab --xvright cat $indir/utf8-align.nidx # ---------------------------------------------------------------- announce UTF-8 BOM run_mlr --icsv --opprint cat $indir/bom.csv run_mlr --icsv --opprint cat < $indir/bom.csv run_mlr --icsv --opprint cat $indir/bom-dquote-header.csv run_mlr --icsv --opprint cat < $indir/bom-dquote-header.csv # ---------------------------------------------------------------- announce UTF-8 UPPERCASE/LOWERCASE run_mlr --icsvlite --opprint put '$langue = toupper($langue)' $indir/utf8-1.csv run_mlr --icsvlite --opprint put '$nom = toupper($nom)' $indir/utf8-1.csv run_mlr --icsvlite --opprint put '$jour = toupper($jour)' $indir/utf8-1.csv run_mlr --icsvlite --opprint put '$langue = capitalize($langue)' $indir/utf8-1.csv run_mlr --icsvlite --opprint put '$nom = capitalize($nom)' $indir/utf8-1.csv run_mlr --icsvlite --opprint put '$jour = capitalize($jour)' $indir/utf8-1.csv # ---------------------------------------------------------------- announce SKIP/PASS COMMENTS DKVP mention input comments1.dkvp run_cat $indir/comments/comments1.dkvp mention skip comments1.dkvp run_mlr --skip-comments --idkvp --oxtab cat < $indir/comments/comments1.dkvp run_mlr --skip-comments --idkvp --oxtab cat $indir/comments/comments1.dkvp mention pass comments1.dkvp run_mlr --pass-comments --idkvp --oxtab cat < $indir/comments/comments1.dkvp run_mlr --pass-comments --idkvp --oxtab cat $indir/comments/comments1.dkvp mention input comments2.dkvp run_cat $indir/comments/comments2.dkvp mention skip comments2.dkvp run_mlr --skip-comments --idkvp --oxtab cat < $indir/comments/comments2.dkvp run_mlr --skip-comments --idkvp --oxtab cat $indir/comments/comments2.dkvp mention pass comments2.dkvp run_mlr --pass-comments --idkvp --oxtab cat < $indir/comments/comments2.dkvp run_mlr --pass-comments --idkvp --oxtab cat $indir/comments/comments2.dkvp mention input comments3.dkvp run_cat $indir/comments/comments3.dkvp mention skip comments3.dkvp run_mlr --skip-comments --idkvp --oxtab cat < $indir/comments/comments3.dkvp run_mlr --skip-comments --idkvp --oxtab cat $indir/comments/comments3.dkvp mention pass comments3.dkvp run_mlr --pass-comments --idkvp --oxtab cat < $indir/comments/comments3.dkvp run_mlr --pass-comments --idkvp --oxtab cat $indir/comments/comments3.dkvp # It's annoying trying to check in text files (especially CSV) with CRLF # to Git, given that it likes to 'fix' line endings for multi-platform use. # It's easy to simply create CRLF on the fly. run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.dkvp > $outdir/comments1-crlf.dkvp mention input comments1-crlf.dkvp run_cat $outdir/comments1-crlf.dkvp mention skip comments1-crlf.dkvp run_mlr --skip-comments --idkvp --oxtab cat < $outdir/comments1-crlf.dkvp run_mlr --skip-comments --idkvp --oxtab cat $outdir/comments1-crlf.dkvp mention pass comments1-crlf.dkvp run_mlr --pass-comments --idkvp --oxtab cat < $outdir/comments1-crlf.dkvp run_mlr --pass-comments --idkvp --oxtab cat $outdir/comments1-crlf.dkvp # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - announce SKIP/PASS COMMENTS DKVP WITH ALTERNATE PREFIX mention input comments1-atat.dkvp run_cat $indir/comments/comments1-atat.dkvp mention skip comments1-atat.dkvp run_mlr --skip-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments1-atat.dkvp run_mlr --skip-comments-with @@ --idkvp --oxtab cat $indir/comments/comments1-atat.dkvp mention pass comments1-atat.dkvp run_mlr --pass-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments1-atat.dkvp run_mlr --pass-comments-with @@ --idkvp --oxtab cat $indir/comments/comments1-atat.dkvp mention input comments2-atat.dkvp run_cat $indir/comments/comments2-atat.dkvp mention skip comments2-atat.dkvp run_mlr --skip-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments2-atat.dkvp run_mlr --skip-comments-with @@ --idkvp --oxtab cat $indir/comments/comments2-atat.dkvp mention pass comments2-atat.dkvp run_mlr --pass-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments2-atat.dkvp run_mlr --pass-comments-with @@ --idkvp --oxtab cat $indir/comments/comments2-atat.dkvp mention input comments3-atat.dkvp run_cat $indir/comments/comments3-atat.dkvp mention skip comments3-atat.dkvp run_mlr --skip-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments3-atat.dkvp run_mlr --skip-comments-with @@ --idkvp --oxtab cat $indir/comments/comments3-atat.dkvp mention pass comments3-atat.dkvp run_mlr --pass-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments3-atat.dkvp run_mlr --pass-comments-with @@ --idkvp --oxtab cat $indir/comments/comments3-atat.dkvp # ---------------------------------------------------------------- announce SKIP/PASS COMMENTS NIDX mention input comments1.nidx run_cat $indir/comments/comments1.nidx mention skip comments1.nidx run_mlr --skip-comments --inidx --oxtab cat < $indir/comments/comments1.nidx run_mlr --skip-comments --inidx --oxtab cat $indir/comments/comments1.nidx mention pass comments1.nidx run_mlr --pass-comments --inidx --oxtab cat < $indir/comments/comments1.nidx run_mlr --pass-comments --inidx --oxtab cat $indir/comments/comments1.nidx mention input comments2.nidx run_cat $indir/comments/comments2.nidx mention skip comments2.nidx run_mlr --skip-comments --inidx --oxtab cat < $indir/comments/comments2.nidx run_mlr --skip-comments --inidx --oxtab cat $indir/comments/comments2.nidx mention pass comments2.nidx run_mlr --pass-comments --inidx --oxtab cat < $indir/comments/comments2.nidx run_mlr --pass-comments --inidx --oxtab cat $indir/comments/comments2.nidx mention input comments3.nidx run_cat $indir/comments/comments3.nidx mention skip comments3.nidx run_mlr --skip-comments --inidx --oxtab cat < $indir/comments/comments3.nidx run_mlr --skip-comments --inidx --oxtab cat $indir/comments/comments3.nidx mention pass comments3.nidx run_mlr --pass-comments --inidx --oxtab cat < $indir/comments/comments3.nidx run_mlr --pass-comments --inidx --oxtab cat $indir/comments/comments3.nidx # It's annoying trying to check in text files (especially CSV) with CRLF # to Git, given that it likes to 'fix' line endings for multi-platform use. # It's easy to simply create CRLF on the fly. run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.nidx > $outdir/comments1-crlf.nidx mention input comments1-crlf.nidx run_cat $outdir/comments1-crlf.nidx mention skip comments1-crlf.nidx run_mlr --skip-comments --inidx --oxtab cat < $outdir/comments1-crlf.nidx run_mlr --skip-comments --inidx --oxtab cat $outdir/comments1-crlf.nidx mention pass comments1-crlf.nidx run_mlr --pass-comments --inidx --oxtab cat < $outdir/comments1-crlf.nidx run_mlr --pass-comments --inidx --oxtab cat $outdir/comments1-crlf.nidx # ---------------------------------------------------------------- announce SKIP/PASS COMMENTS JSON mention input comments1.json run_cat $indir/comments/comments1.json mention skip comments1.json run_mlr --skip-comments --ijson --odkvp cat < $indir/comments/comments1.json run_mlr --skip-comments --ijson --odkvp cat $indir/comments/comments1.json mention pass comments1.json run_mlr --pass-comments --ijson --odkvp cat < $indir/comments/comments1.json run_mlr --pass-comments --ijson --odkvp cat $indir/comments/comments1.json mention input comments2.json run_cat $indir/comments/comments2.json mention skip comments2.json run_mlr --skip-comments --ijson --odkvp cat < $indir/comments/comments2.json run_mlr --skip-comments --ijson --odkvp cat $indir/comments/comments2.json mention pass comments2.json run_mlr --pass-comments --ijson --odkvp cat < $indir/comments/comments2.json run_mlr --pass-comments --ijson --odkvp cat $indir/comments/comments2.json mention input comments3.json run_cat $indir/comments/comments3.json mention skip comments3.json run_mlr --skip-comments --ijson --odkvp cat < $indir/comments/comments3.json run_mlr --skip-comments --ijson --odkvp cat $indir/comments/comments3.json mention pass comments3.json run_mlr --pass-comments --ijson --odkvp cat < $indir/comments/comments3.json run_mlr --pass-comments --ijson --odkvp cat $indir/comments/comments3.json # It's annoying trying to check in text files (especially CSV) with CRLF # to Git, given that it likes to 'fix' line endings for multi-platform use. # It's easy to simply create CRLF on the fly. run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.json > $outdir/comments1-crlf.json mention input comments1-crlf.json run_cat $outdir/comments1-crlf.json mention skip comments1-crlf.json run_mlr --skip-comments --ijson --odkvp cat < $outdir/comments1-crlf.json run_mlr --skip-comments --ijson --odkvp cat $outdir/comments1-crlf.json mention pass comments1-crlf.json run_mlr --pass-comments --ijson --odkvp cat < $outdir/comments1-crlf.json run_mlr --pass-comments --ijson --odkvp cat $outdir/comments1-crlf.json # ---------------------------------------------------------------- announce SKIP/PASS COMMENTS XTAB mention input comments1.xtab run_cat $indir/comments/comments1.xtab mention skip comments1.xtab run_mlr --skip-comments --ixtab --odkvp cat < $indir/comments/comments1.xtab run_mlr --skip-comments --ixtab --odkvp cat $indir/comments/comments1.xtab mention pass comments1.xtab run_mlr --pass-comments --ixtab --odkvp cat < $indir/comments/comments1.xtab run_mlr --pass-comments --ixtab --odkvp cat $indir/comments/comments1.xtab mention input comments2.xtab run_cat $indir/comments/comments2.xtab mention skip comments2.xtab run_mlr --skip-comments --ixtab --odkvp cat < $indir/comments/comments2.xtab run_mlr --skip-comments --ixtab --odkvp cat $indir/comments/comments2.xtab mention pass comments2.xtab run_mlr --pass-comments --ixtab --odkvp cat < $indir/comments/comments2.xtab run_mlr --pass-comments --ixtab --odkvp cat $indir/comments/comments2.xtab # It's annoying trying to check in text files (especially CSV) with CRLF # to Git, given that it likes to 'fix' line endings for multi-platform use. # It's easy to simply create CRLF on the fly. run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.xtab > $outdir/comments1-crlf.xtab mention input comments1-crlf.xtab run_cat $outdir/comments1-crlf.xtab mention skip comments1-crlf.xtab run_mlr --skip-comments --ixtab --odkvp cat < $outdir/comments1-crlf.xtab run_mlr --skip-comments --ixtab --odkvp cat $outdir/comments1-crlf.xtab mention pass comments1-crlf.xtab run_mlr --pass-comments --ixtab --odkvp cat < $outdir/comments1-crlf.xtab run_mlr --pass-comments --ixtab --odkvp cat $outdir/comments1-crlf.xtab # ---------------------------------------------------------------- announce SKIP/PASS COMMENTS CSVLITE mention input comments1.csv run_cat $indir/comments/comments1.csv mention skip comments1.csv run_mlr --skip-comments --icsvlite --odkvp cat < $indir/comments/comments1.csv run_mlr --skip-comments --icsvlite --odkvp cat $indir/comments/comments1.csv mention pass comments1.csv run_mlr --pass-comments --icsvlite --odkvp cat < $indir/comments/comments1.csv run_mlr --pass-comments --icsvlite --odkvp cat $indir/comments/comments1.csv mention input comments2.csv run_cat $indir/comments/comments2.csv mention skip comments2.csv run_mlr --skip-comments --icsvlite --odkvp cat < $indir/comments/comments2.csv run_mlr --skip-comments --icsvlite --odkvp cat $indir/comments/comments2.csv mention pass comments2.csv run_mlr --pass-comments --icsvlite --odkvp cat < $indir/comments/comments2.csv run_mlr --pass-comments --icsvlite --odkvp cat $indir/comments/comments2.csv # It's annoying trying to check in text files (especially CSV) with CRLF # to Git, given that it likes to 'fix' line endings for multi-platform use. # It's easy to simply create CRLF on the fly. run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.csv > $outdir/comments1-crlf.csv mention input comments1-crlf.csv run_cat $outdir/comments1-crlf.csv mention skip comments1-crlf.csv run_mlr --skip-comments --icsvlite --odkvp cat < $outdir/comments1-crlf.csv run_mlr --skip-comments --icsvlite --odkvp cat $outdir/comments1-crlf.csv mention pass comments1-crlf.csv run_mlr --pass-comments --icsvlite --odkvp cat < $outdir/comments1-crlf.csv run_mlr --pass-comments --icsvlite --odkvp cat $outdir/comments1-crlf.csv # ---------------------------------------------------------------- announce SKIP/PASS COMMENTS CSV mention input comments1.csv run_cat $indir/comments/comments1.csv mention skip comments1.csv run_mlr --skip-comments --icsv --odkvp cat < $indir/comments/comments1.csv run_mlr --skip-comments --icsv --odkvp cat $indir/comments/comments1.csv mention pass comments1.csv run_mlr --pass-comments --icsv --odkvp cat < $indir/comments/comments1.csv run_mlr --pass-comments --icsv --odkvp cat $indir/comments/comments1.csv mention input comments2.csv run_cat $indir/comments/comments2.csv mention skip comments2.csv run_mlr --skip-comments --icsv --odkvp cat < $indir/comments/comments2.csv run_mlr --skip-comments --icsv --odkvp cat $indir/comments/comments2.csv mention pass comments2.csv run_mlr --pass-comments --icsv --odkvp cat < $indir/comments/comments2.csv run_mlr --pass-comments --icsv --odkvp cat $indir/comments/comments2.csv # It's annoying trying to check in text files (especially CSV) with CRLF # to Git, given that it likes to 'fix' line endings for multi-platform use. # It's easy to simply create CRLF on the fly. run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.csv > $outdir/comments1-crlf.csv mention input comments1-crlf.csv run_cat $outdir/comments1-crlf.csv mention skip comments1-crlf.csv run_mlr --skip-comments --icsv --odkvp cat < $outdir/comments1-crlf.csv run_mlr --skip-comments --icsv --odkvp cat $outdir/comments1-crlf.csv mention pass comments1-crlf.csv run_mlr --pass-comments --icsv --odkvp cat < $outdir/comments1-crlf.csv run_mlr --pass-comments --icsv --odkvp cat $outdir/comments1-crlf.csv # ---------------------------------------------------------------- announce MMAP AT PAGE BOUNDARIES run_mlr --dkvp tail -n 4 $indir/page-aligned-final-ifs.dkvp run_mlr --dkvp tail -n 4 $indir/page-aligned-final-irs.dkvp run_mlr --dkvp tail -n 4 $indir/page-aligned-final-no-ifs.dkvp run_mlr --dkvp tail -n 4 $indir/page-aligned-no-final-irs.dkvp run_mlr --nidx tail -n 4 $indir/page-aligned-no-final-irs.nidx run_mlr --csvlite tail -n 4 $indir/page-aligned-no-final-irs.csvl run_mlr --csv --rs lf tail -n 4 $indir/page-aligned-no-final-irs.csvl run_mlr --xtab tail -n 4 $indir/page-aligned-no-final-eol.xtab # ---------------------------------------------------------------- announce INT64 I/O run_mlr --oxtab put '$c=$a;$d=$b;$e=hexfmt($a);$f=hexfmt($b)' $indir/int64io.dkvp # There is different rounding on i386 vs. x86_64 but the essential check is # that overflow has been avoided. Hence the %g output format here. run_mlr --oxtab --ofmt '%.8g' put '$p0=$p+0;$p1=$p+1;$p2=$p+2;$p3=$p+3' $indir/int64arith.dkvp run_mlr --oxtab --ofmt '%.8g' put '$p0=$p-0;$p1=$p-1;$p2=$p-2;$p3=$p-3' $indir/int64arith.dkvp run_mlr --oxtab --ofmt '%.8g' put '$p0=$p*0;$p1=$p*1;$p2=$p*2;$p3=$p*3' $indir/int64arith.dkvp run_mlr --oxtab --ofmt '%.8g' put '$n0=$n+0;$n1=$n+1;$n2=$n+2;$n3=$n+3' $indir/int64arith.dkvp run_mlr --oxtab --ofmt '%.8g' put '$n0=$n-0;$n1=$n-1;$n2=$n-2;$n3=$n-3' $indir/int64arith.dkvp run_mlr --oxtab --ofmt '%.8g' put '$n0=$n*0;$n1=$n*1;$n2=$n*2;$n3=$n*3' $indir/int64arith.dkvp # ---------------------------------------------------------------- announce COMPRESSED INPUT run_mlr --csv --prepipe 'cat' cat $indir/rfc-csv/simple.csv-crlf run_mlr --dkvp --prepipe 'cat' cat $indir/abixy run_mlr --csv --prepipe 'cat' cat < $indir/rfc-csv/simple.csv-crlf run_mlr --dkvp --prepipe 'cat' cat < $indir/abixy # ---------------------------------------------------------------- announce STDIN run_mlr --csv cat < $indir/rfc-csv/simple.csv-crlf # ---------------------------------------------------------------- announce RFC-CSV run_mlr --mmap --csv cat $indir/rfc-csv/simple.csv-crlf run_mlr --mmap --csv cat $indir/rfc-csv/simple-truncated.csv run_mlr --mmap --csv cat $indir/rfc-csv/narrow.csv run_mlr --mmap --csv cat $indir/rfc-csv/narrow-truncated.csv run_mlr --mmap --csv cat $indir/rfc-csv/quoted-comma.csv run_mlr --mmap --csv cat $indir/rfc-csv/quoted-comma-truncated.csv run_mlr --mmap --csv cat $indir/rfc-csv/quoted-crlf.csv run_mlr --mmap --csv cat $indir/rfc-csv/quoted-crlf-truncated.csv run_mlr --mmap --csv cat $indir/rfc-csv/simple-truncated.csv $indir/rfc-csv/simple.csv-crlf run_mlr --mmap --csv --ifs semicolon --ofs pipe --irs lf --ors lflf cut -x -f b $indir/rfc-csv/modify-defaults.csv run_mlr --mmap --csv --rs lf --quote-original cut -o -f c,b,a $indir/quote-original.csv run_mlr --mmap --icsv --oxtab cat $indir/comma-at-eof.csv run_mlr --no-mmap --icsv --oxtab cat $indir/comma-at-eof.csv run_mlr --csv --quote-all cat $indir/rfc-csv/simple.csv-crlf run_mlr --csv --quote-original cat $indir/rfc-csv/simple.csv-crlf run_mlr --itsv --rs lf --oxtab cat $indir/simple.tsv run_mlr --iusv --oxtab cat $indir/example.usv # ---------------------------------------------------------------- announce RAGGED NON-RFC CSV run_mlr --mmap --icsv --oxtab --ragged cat $indir/ragged.csv run_mlr --no-mmap --icsv --oxtab --ragged cat $indir/ragged.csv run_mlr --mmap --icsvlite --oxtab --ragged cat $indir/ragged.csv run_mlr --no-mmap --icsvlite --oxtab --ragged cat $indir/ragged.csv # ---------------------------------------------------------------- announce MARKDOWN OUTPUT run_mlr --itsv --rs lf --omd cat $indir/simple.tsv # ---------------------------------------------------------------- announce CSV/RS ENVIRONMENT DEFAULTS run_mlr --csv cut -f a $indir/rfc-csv/simple.csv-crlf run_mlr --csv --rs crlf cut -f a $indir/rfc-csv/simple.csv-crlf mlr_expect_fail --csv --rs lf cut -f a $indir/rfc-csv/simple.csv-crlf # ---------------------------------------------------------------- announce MULTI-CHARACTER IRS/IFS/IPS FOR DKVP run_mlr --oxtab --idkvp --irs lf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp-crlf run_mlr --oxtab --idkvp --irs lf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp-crlf run_mlr --oxtab --idkvp --irs crlf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp-crlf run_mlr --oxtab --idkvp --irs crlf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp-crlf # ---------------------------------------------------------------- announce MULTI-CHARACTER IRS/IFS FOR NIDX run_mlr --oxtab --inidx --irs lf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf run_mlr --oxtab --inidx --irs lf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf run_mlr --oxtab --inidx --irs crlf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf run_mlr --oxtab --inidx --irs crlf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf # ---------------------------------------------------------------- announce MULTI-CHARACTER IRS/IFS FOR CSVLITE run_mlr --oxtab --icsvlite --irs lf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csv-crlf run_mlr --oxtab --icsvlite --irs lf --ifs /, cut -o -f x,a,i $indir/multi-sep.csv-crlf run_mlr --oxtab --icsvlite --irs crlf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csv-crlf run_mlr --oxtab --icsvlite --irs crlf --ifs /, cut -o -f x,a,i $indir/multi-sep.csv-crlf # ---------------------------------------------------------------- announce MULTI-CHARACTER SEPARATORS FOR XTAB run_mlr --mmap --xtab --ifs crlf --ofs Z cut -x -f b $indir/truncated.xtab-crlf run_mlr --mmap --xtab --ips . --ops @ cut -x -f b $indir/dots.xtab run_mlr --xtab --ips ": " --ops '@@@@' put '$sum=int($a+$b)' $indir/multi-ips.dkvp # ---------------------------------------------------------------- announce MULTI-CHARACTER IRS FOR PPRINT run_mlr --pprint --irs crlf --ifs / --ofs @ cut -x -f b $indir/dots.pprint-crlf # ---------------------------------------------------------------- announce BARRED PPRINT run_mlr --opprint --barred cat $indir/abixy run_mlr --opprint --barred --right cat $indir/abixy run_mlr --opprint --barred cat $indir/abixy-het run_mlr --opprint --barred --right cat $indir/abixy-het # ---------------------------------------------------------------- announce MULTI-CHARACTER IXS SPECIFIERS run_mlr --oxtab --idkvp --mmap --irs lf --ifs '\x2c' --ips '\075' cut -o -f x,a,i $indir/multi-sep.dkvp-crlf run_mlr --oxtab --idkvp --mmap --irs lf --ifs /, --ips '\x3d\x3a' cut -o -f x,a,i $indir/multi-sep.dkvp-crlf # ---------------------------------------------------------------- announce JSON I/O run_mlr --ijson --opprint cat $indir/small-non-nested.json run_mlr --ijson --opprint cat $indir/small-non-nested-wrapped.json run_mlr --ijson --oxtab cat $indir/small-nested.json run_mlr --ojson cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack cat $indir/json-output-options.dkvp run_mlr --ojson --jlistwrap cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jlistwrap cat $indir/json-output-options.dkvp run_mlr --ojson --jquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jlistwrap --jquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jlistwrap --jquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jvquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jvquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jlistwrap --jvquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jlistwrap --jvquoteall cat $indir/json-output-options.dkvp run_mlr --ojson --jknquoteint cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jknquoteint cat $indir/json-output-options.dkvp run_mlr --ojson --jlistwrap --jknquoteint cat $indir/json-output-options.dkvp run_mlr --ojson --jvstack --jlistwrap --jknquoteint cat $indir/json-output-options.dkvp run_mlr put -q --jvquoteall 'dump $*' $indir/json-output-options.dkvp run_mlr put -q --jvquoteall 'o = $*; o[7] = 8; dump o' $indir/json-output-options.dkvp run_mlr put -q --jknquoteint 'dump $*' $indir/json-output-options.dkvp run_mlr put -q --jknquoteint 'o = $*; o[7] = 8; dump o' $indir/json-output-options.dkvp run_mlr --ijson --opprint cat $indir/small-non-nested-wrapped.json $indir/small-non-nested-wrapped.json run_mlr --icsv --ojson --rs lf cat < 0) { return n * f(n-1) } else { return 1 } } # implicitly return absent } $o = f(NR) ' run_mlr --opprint --from $indir/abixy head -n 5 then put ' subr s(n) { print "n = " . n; if (is_numeric(n)) { if (n > 0) { call s(n-1) } } } print ""; call s(NR) ' run_mlr --from $indir/abixy --opprint put ' func f(n) { return n+1; } $o1 = f(NR); $o2 = f(f(NR)); $o3 = f(f(f(NR))); $o4 = f(f(f(f(NR)))); $o5 = f(f(f(f(f(NR))))); $o6 = f(f(f(f(f(f(NR)))))); ' run_mlr --from $indir/abixy --opprint put ' func f(n) { if (n < 2) { return 1 } else { return f(n-1) + f(n-2) } } $o = f(NR) ' run_mlr --from $indir/abixy --opprint put ' func f(n) { if (is_present(@fcache[n])) { return @fcache[n] } else { num rv = 1; if (n >= 2) { rv = f(n-1) + f(n-2) } @fcache[n] = rv; return rv } } $o = f(NR) ' # No nesting of top-levels mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { begin {} }' mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { end {} }' mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { begin {} }' mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { end {} }' mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { func g(y) {} }' mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { subr t(y) {} }' mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { func g(y) {} }' mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { subr t(y) {} }' mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { begin {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { end {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { begin {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { end {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { func g(y) {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { subr t(y) {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { func g(y) {} }; true' mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { subr t(y) {} }; true' # Disallow redefines mlr_expect_fail --from $indir/abixy --opprint put 'func log(x) { return $x + 1 }' mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { return $x + 1 } func f(x) { return $x + 1}' mlr_expect_fail --from $indir/abixy --opprint put 'subr s() { } subr s() { }' mlr_expect_fail --from $indir/abixy --opprint put 'subr s() { } subr s(x) { }' run_mlr --from $indir/abixy --opprint put 'subr log(text) { print "TEXT IS ".text } call log("NR is ".NR)' # print/dump from subr/func; no tee/emit from func run_mlr --from $indir/abixy --opprint put 'subr log(text) { print "TEXT IS ".text } call log("NR is ".NR)' run_mlr --from $indir/abixy --opprint put 'func f(text) { print "TEXT IS ".text; return text.text } $o = f($a)' run_mlr --from $indir/abixy put 'begin{@x=1} func f(x) { dump; print "hello" } $o=f($i)' mlr_expect_fail --from $indir/abixy put 'begin{@x=1} func f(x) { dump; print "hello"; tee > "x", $* } $o=f($i)' mlr_expect_fail --from $indir/abixy put 'begin{@x=1} func f(x) { dump; print "hello"; emit > "x", @* } $o=f($i)' # not use all args (for valgrind) run_mlr --from $indir/abixy put 'func f(x,y) { return 2*y } $o = f($x,$y) ' # general programming-language stuff run_mlr -n put -q -f $indir/sieve.mlr run_mlr -n put -q -f $indir/mand.mlr -e 'begin {@verbose = true}' # scoping within distinct begin/end blocks run_mlr --from $indir/abixy put -v ' func f(x) { return x**2 } func g(y) { return y+1 } subr s(a,b,c) { print a.b.c } begin { @a = 0; var ell = 1; print "local1 = ".ell; } end { emit @a; var emm = 2; print "local2 = ".emm; } @a += 1; begin { @b = 0; @c = 0; print "local3 = ".ell; } @b += 2; @c += 3; end { emit @b; emit @c; print "local4 = ".emm; } ' # ---------------------------------------------------------------- announce LOCALVAR SCOPE AND EXTENT run_mlr --opprint --from $indir/abixy put ' func f() { var a = 1; if (NR > 5) { a = 2; } return a; } func g() { var b = 1; if (NR > 5) { var b = 2; } return b; } func h() { var a = 1; if (NR > 5) { a = 2; return a; } return a; } func i() { var b = 1; if (NR > 5) { var b = 2; return b; } return b; } $of = f(); $og = g(); $oh = h(); $oi = i(); ' # test fencing at function entry run_mlr --opprint --from $indir/abixy put ' func f() { var a = 2; var b = 2; if (NR > 5) { var a = 3; b = 3; } return 1000 * a + b; } a = 1; b = 1; $ab = f(); $oa = a; $ob = b; ' # ---------------------------------------------------------------- announce LOCALVAR UNSETS run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u' $indir/unset1.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u' $indir/unset1.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u' $indir/unset1.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u' $indir/unset1.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u' $indir/unset1.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u' $indir/unset1.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u' $indir/unset4.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u' $indir/unset4.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u' $indir/unset4.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u' $indir/unset4.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u' $indir/unset4.dkvp run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u' $indir/unset4.dkvp # ---------------------------------------------------------------- announce LOCALVAR TYPEDECLs run_mlr --from $indir/abixy put ' str a = $a; a = "a:".NR; $c = a; ' mlr_expect_fail --from $indir/abixy put ' str a = $a; a = NR; $c = a; ' mlr_expect_fail --from $indir/abixy put ' int a = $a; a = NR; $c = a; ' run_mlr --from $indir/abixy put ' int i = $i; i = NR; $c = a; ' # ---------------------------------------------------------------- announce FORBIND TYPEDECLs run_mlr --from $indir/abixy put ' for (int i = 0; i < $i; i += 1) { $c = i * 10; } ' mlr_expect_fail --from $indir/abixy put ' for (float i = 0; i < $i; i += 1) { $c = i * 10; } ' run_mlr --from $indir/abixy put ' for (int i = 0; i < $i; i += 1) { i += 2; $c = i; } ' mlr_expect_fail --from $indir/abixy put ' for (int i = 0; i < $i; i += 1) { i += 1.5; $c = i; } ' mlr_expect_fail --from $indir/abixy put ' for (int i = 0; i < $i; i += 1) { i += 1.0; $c = i; } ' run_mlr --from $indir/abixy put ' for (num i = 0; i < $i; i += 1) { i += 1.0; $c = i; } ' # ---------------------------------------------------------------- announce ARGPASS TYPEDECLs run_mlr --from $indir/abixy put ' func f(int i) { return i+3; } $c = f($i); ' mlr_expect_fail --from $indir/abixy put ' func f(int i) { return i+3; } $c = f($x); ' mlr_expect_fail --from $indir/abixy put ' func f(num i): int { return i+3.45; } $c = f($x); ' mlr_expect_fail --from $indir/abixy put ' func f(num i): int { return i+3.45; } $c = f($i); ' mlr_expect_fail --from $indir/abixy put ' func f(num i): int { i = "a"; return 2; } $c = f($x); ' run_mlr --from $indir/abixy put ' subr s(int i) { print i+3; } call s($i); ' mlr_expect_fail --from $indir/abixy put ' subr s(int i) { print i+3; } call s($x); ' mlr_expect_fail --from $indir/abixy put ' subr s(num i) { i = "a"; print 2; } call s($x); ' # ---------------------------------------------------------------- announce LOCAL MAP-VARIABLE WRITE/READ run_mlr --from $indir/xyz345 put -v -a ' $s = a; $t = b[$x]; $u = c[$x][$y]; $v = d[$x][$y][$z]; ' run_mlr --from $indir/xyz345 put -v -a ' d[$x][$y][$z] = 9; $d = d[$x][$y][$z]; ' run_mlr --from $indir/xyz345 put -v -a ' a = 6; b[$x] = 7; c[$x][$y] = 8; d[$x][$y][$z] = 9; $a = a; $b = b[$x]; $c = c[$x][$y]; $d = d[$x][$y][$z]; ' run_mlr --from $indir/xyz345 put -v -a ' a = 6; b[$x] = 7; c[$x][$y] = 8; d[$x][$y][$z] = 9; $a0 = a; $a1 = a[$x]; $a2 = a[$x][$y]; $a3 = a[$x][$y][$z]; $b0 = b; $b1 = b[$x]; $b2 = b[$x][$y]; $b3 = b[$x][$y][$z]; $c0 = c; $c1 = c[$x]; $c2 = c[$x][$y]; $c3 = c[$x][$y][$z]; $d0 = d; $d1 = d[$x]; $d2 = d[$x][$y]; $d3 = d[$x][$y][$z]; ' # ---------------------------------------------------------------- announce LOCAL MAP-VARIABLE TYPE-DECL run_mlr --from $indir/xyz345 put ' map a = {}; ' run_mlr --from $indir/xyz345 put ' map a = {}; a[1]=2; a[3][4]=5; ' mlr_expect_fail --from $indir/xyz345 put ' map a = {}; a=2; a[3][4]=5; ' mlr_expect_fail --from $indir/xyz345 put ' map a = {}; a[3][4]=5; a=2; ' # ---------------------------------------------------------------- announce TRIPLE-FORs run_mlr --opprint --from $indir/abixy put ' num sum = 0; num a = 1; for (;;) { if (a > NR) { break; } sum += a; a += 1 } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; num a = 1; for (;;) { if (a > NR) { break; } sum += a; a += 1 } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; for (num a = 1; ;) { if (a > NR) { break; } sum += a; a += 1 } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; num a = 1; for (; ; a += 1) { if (a > NR) { break; } sum += a; } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; for (num a=1; ; a += 1) { if (a > NR) { break; } sum += a; } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; for (num a=1; a <= NR; a += 1) { sum += a; } $z = sum ' echo x=1 | run_mlr put ' num a = 100; num b = 100; for (num a = 200, b = 300; a <= 210; a += 1, b += 1) { print "a:".a.",b:".b } $oa = a; $ob = b; ' run_mlr --from $indir/abixy put ' for ( ; $x <= 10; $x += 1) { } ' run_mlr --opprint --from $indir/abixy put ' num a = 100; b = 200; @c = 300; $d = 400; for (num i = 1; i < 1024; i *= 2) { a += 1; b += 1; @c += 1; $d += 1; $oa = a; $ob = b; $oc = @c; $od = $d; } ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; for (num a = 1; a <= 10; a += 1) { continue; sum += a; } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; for (num a = 1; a <= 10; a += 1) { sum += a; break; } $z = sum ' run_mlr --opprint --from $indir/abixy put ' num sum = 0; for (num a = 1; a <= NR; a += 1) { if (a == 4 || a == 5) { continue; } if (a == 8) { break; } sum += a; } $z = sum ' # Multi-continutation cases run_mlr --opprint --from $indir/abixy put ' for ($o1 = 1; ; $o3 = 3) { break; } ' run_mlr --opprint --from $indir/abixy put ' for ($o1 = 1; $o1 < NR; $o1 += 1) { } ' mlr_expect_fail --opprint --from $indir/abixy put ' for ($o1 = 1, $o2 = 2; $o3 = 3; $o4 = 4) { } ' mlr_expect_fail --opprint --from $indir/abixy put ' for ($o1 = 1, $o2 = 2; $o3 < 3, $o4 = 4; $o5 = 5) { break; } ' run_mlr --opprint --from $indir/abixy put ' $o4 = 0; for ($o1 = 1, $o2 = 2; $o3 = 3, $o4 < 4; $o5 = 5) { break; } ' # ---------------------------------------------------------------- announce MAPVARS IN SCALAR FUNCTION-CALL CONTEXTS mlr_expect_fail --from $indir/abixy put '$z=strlen($*)' mlr_expect_fail --from $indir/abixy put '$z=strlen({})' run_mlr --from $indir/abixy put 'a={}; $z=strlen(a)' # ---------------------------------------------------------------- announce MAPVAR ASSIGNMENTS TO FULL SREC run_mlr --from $indir/xyz2 put '$* = {"a":1, "b": {"x":8,"y":9}, "c":3}' run_mlr --from $indir/xyz2 put '$* = $*' run_mlr --from $indir/xyz2 put '@a = 1; $* = @a' run_mlr --from $indir/xyz2 put '@b[1] = 2; $* = @b' run_mlr --from $indir/xyz2 put '@c[1][2] = 3; $* = @c' run_mlr --from $indir/xyz2 put '@a = 1; $* = @*' run_mlr --from $indir/xyz2 put '@b[1] = 2; $* = @*' run_mlr --from $indir/xyz2 put '@c[1][2] = 3; $* = @*' run_mlr --from $indir/xyz2 put 'a = 1; $* = a' run_mlr --from $indir/xyz2 put 'b[1] = 2; $* = b' run_mlr --from $indir/xyz2 put 'c[1][2] = 3; $* = c' run_mlr --from $indir/xyz2 put '$* = 3' run_mlr --from $indir/xyz2 put ' func map_valued_func() { return {"a":1,"b":2} } map m = map_valued_func(); $* = m; ' run_mlr --from $indir/xyz2 put ' func map_valued_func() { return {"a":1,"b":2} } $* = map_valued_func(); ' # ---------------------------------------------------------------- announce MAPVAR ASSIGNMENTS TO FULL OOSVAR run_mlr --from $indir/xyz2 put '@* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump' run_mlr --from $indir/xyz2 put '@* = $*; dump' run_mlr --from $indir/xyz2 put '@* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @* = @*; dump' run_mlr --from $indir/xyz2 put '@a = 1; @* = @a; dump' run_mlr --from $indir/xyz2 put '@b[1] = 2; @* = @b; dump' run_mlr --from $indir/xyz2 put '@c[1][2] = 3; @* = @c; dump' run_mlr --from $indir/xyz2 put '@a = 1; @* = @*; dump' run_mlr --from $indir/xyz2 put '@b[1] = 2; @* = @*; dump' run_mlr --from $indir/xyz2 put '@c[1][2] = 3; @* = @*; dump' run_mlr --from $indir/xyz2 put 'a = 1; @* = a; dump' run_mlr --from $indir/xyz2 put 'b[1] = 2; @* = b; dump' run_mlr --from $indir/xyz2 put 'c[1][2] = 3; @* = c; dump' run_mlr --from $indir/xyz2 put '@* = 3' run_mlr --from $indir/xyz2 put ' func map_valued_func() { return {"a":1,"b":2} } map m = map_valued_func(); @* = m; dump ' run_mlr --from $indir/xyz2 put ' func map_valued_func() { return {"a":1,"b":2} } @* = map_valued_func(); dump ' # ---------------------------------------------------------------- announce MAPVAR ASSIGNMENTS TO OOSVAR run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o' run_mlr --from $indir/xyz2 put -q '@o = @o; dump @o' run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @o = @*; dump' run_mlr --from $indir/xyz2 put -q '@o = $*; dump @o' run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o; @o = @o; dump @o' run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; @o = @o; dump @o' run_mlr --from $indir/xyz2 put -q '@a = 1; @o = @a; dump @o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; @o = @b; dump @o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; @o = @c; dump @o' run_mlr --from $indir/xyz2 put -q '@a = 1; @o = @*; dump @o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; @o = @*; dump @o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; @o = @*; dump @o' run_mlr --from $indir/xyz2 put -q 'a = 1; @o = a; dump @o' run_mlr --from $indir/xyz2 put -q 'b[1] = 2; @o = b; dump @o' run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; @o = c; dump @o' run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} @o = map_valued_func(); dump @o' # ---------------------------------------------------------------- announce MAPVAR ASSIGNMENTS TO MAP-TYPED LOCAL run_mlr --from $indir/xyz2 put -q 'map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o' mlr_expect_fail --from $indir/xyz2 put -q 'map o = @o; dump o' run_mlr --from $indir/xyz2 put -q 'map o = $*; dump o' run_mlr --from $indir/xyz2 put -q 'map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o' mlr_expect_fail --from $indir/xyz2 put -q '@a = 1; map o = @a; dump o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; map o = @b; dump o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; map o = @c; dump o' run_mlr --from $indir/xyz2 put -q '@a = 1; map o = @*; dump o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; map o = @*; dump o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; map o = @*; dump o' mlr_expect_fail --from $indir/xyz2 put -q 'a = 1; map o = a; dump o' run_mlr --from $indir/xyz2 put -q 'b[1] = 2; map o = b; dump o' run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; map o = c; dump o' run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} map o = map_valued_func(); dump o' # ---------------------------------------------------------------- announce MAPVAR ASSIGNMENTS TO VAR-TYPED LOCAL run_mlr --from $indir/xyz2 put -q 'var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o' run_mlr --from $indir/xyz2 put -q 'var o = @o; dump o' run_mlr --from $indir/xyz2 put -q 'var o = $*; dump o' run_mlr --from $indir/xyz2 put -q 'var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o' run_mlr --from $indir/xyz2 put -q '@a = 1; var o = @a; dump o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; var o = @b; dump o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; var o = @c; dump o' run_mlr --from $indir/xyz2 put -q '@a = 1; var o = @*; dump o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; var o = @*; dump o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; var o = @*; dump o' run_mlr --from $indir/xyz2 put -q 'a = 1; var o = a; dump o' run_mlr --from $indir/xyz2 put -q 'b[1] = 2; var o = b; dump o' run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; var o = c; dump o' run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} var o = map_valued_func(); dump o' # ---------------------------------------------------------------- announce MAPVAR ASSIGNMENTS TO UNTYPED LOCAL run_mlr --from $indir/xyz2 put -q 'o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o' run_mlr --from $indir/xyz2 put -q 'o = @o; dump o' run_mlr --from $indir/xyz2 put -q 'o = $*; dump o' run_mlr --from $indir/xyz2 put -q 'o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o' run_mlr --from $indir/xyz2 put -q '@a = 1; o = @a; dump o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; o = @b; dump o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; o = @c; dump o' run_mlr --from $indir/xyz2 put -q '@a = 1; o = @*; dump o' run_mlr --from $indir/xyz2 put -q '@b[1] = 2; o = @*; dump o' run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; o = @*; dump o' run_mlr --from $indir/xyz2 put -q 'a = 1; o = a; dump o' run_mlr --from $indir/xyz2 put -q 'b[1] = 2; o = b; dump o' run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; o = c; dump o' run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} o = map_valued_func(); dump o' # ---------------------------------------------------------------- announce SPLIT/JOIN run_mlr --from $indir/abixy-het put -q 'o = joink($*, ":"); print o' run_mlr --from $indir/abixy-het put -q 'o = joinv($*, ":"); print o' run_mlr --from $indir/abixy-het put -q 'o = joinkv($*, ":", ";"); print o' run_mlr --from $indir/abixy-het put -q 'o = joink({1:2, "abc":4, 5:"xyz"}, ":"); print o' run_mlr --from $indir/abixy-het put -q 'o = joinv({1:2, "abc":4, 5:"xyz"}, ":"); print o' run_mlr --from $indir/abixy-het put -q 'o = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); print o' run_mlr --from $indir/abixy-het put '$* = splitnv("a,b,c" , ","); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitkv("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitnv("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitkv("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitnv("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitkv("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitnvx("a,b,c" , ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitkvx("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitnvx("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitkvx("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitnvx("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --from $indir/abixy-het put '$* = splitkvx("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --oxtab --from $indir/abixy-het put 's = joink($*, ":"); $* = splitnv(s, ":")' run_mlr --oxtab --from $indir/abixy-het put 's = joinv($*, ":"); $* = splitnv(s, ":")' run_mlr --oxtab --from $indir/abixy-het put 's = joinkv($*, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --oxtab --from $indir/abixy-het put 's = joinkv($*, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --oxtab --from $indir/abixy-het put 's = joink({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":")' run_mlr --oxtab --from $indir/abixy-het put 's = joinv({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":")' run_mlr --oxtab --from $indir/abixy-het put 's = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' run_mlr --oxtab --from $indir/abixy-het put 's = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' # ---------------------------------------------------------------- announce MAPSUM/MAPDIFF/MAPEXCEPT run_mlr --from $indir/abixy-het put -q 'o = mapsum(); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff(); dump o' mlr_expect_fail --from $indir/abixy-het put -q 'o = mapexcept(); dump o' mlr_expect_fail --from $indir/abixy-het put -q 'o = mapselect(); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapsum($*); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapsum({"a":999}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff($*); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff({"a":999}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapexcept($*); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapexcept({"a":999}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect($*); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapsum($*, {"a":999}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapsum({"a":999}, $*); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff($*, {"a":999}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff({"a":999}, $*); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapexcept($*, "a"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapexcept({"a":999}, "a"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapexcept({"a":999}, "nonesuch"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect($*, "a"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "a"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "nonesuch"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapsum($*, {"a":999}, {"b": 444}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapsum({"a":999}, $*, {"b": 444}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff($*, {"a":999}, {"b": 444}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapdiff({"a":999}, $*, {"b": 444}); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapexcept($*, "a", "b"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "b", "nonesuch"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect($*, "a", "b"); dump o' run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "b", "nonesuch"); dump o' # ---------------------------------------------------------------- announce EXTENDED TYPEOF run_mlr --from $indir/xyz2 --oxtab put ' a = {1:2, 3:4}; b = {1: {2:3, 4:5}}; @c = {1:2, 3:4}; @d = {1: {2:3, 4:5}}; $ta = typeof(a); $ta1 = typeof(a[1]); $ta7 = typeof(a[7]); $tb = typeof(b); $tb1 = typeof(b[1]); $tb7 = typeof(b[7]); $tc = typeof(@c); $tc1 = typeof(@c[1]); $tc7 = typeof(@c[7]); $td = typeof(@d); $td1 = typeof(@d[1]); $td7 = typeof(@d[7]); $te1 = typeof(6); $te2 = typeof({6:4}); $tsa = typeof($a); $tsx = typeof($x); $ts = typeof($*); ' # ---------------------------------------------------------------- announce HASKEY run_mlr --from $indir/abixy-het put '$haskeya = haskey($*, "a")' run_mlr --from $indir/abixy-het put '$haskey3 = haskey($*, 3)' run_mlr --from $indir/xyz2 put '$haskeya = haskey({3:4}, "a")' run_mlr --from $indir/xyz2 put '$haskey3 = haskey({3:4}, 3)' run_mlr --from $indir/xyz2 put '$haskey3 = haskey({3:4}, 4)' run_mlr --from $indir/xyz2 put 'o = {3:4}; $haskeya = haskey(o, "a")' run_mlr --from $indir/xyz2 put 'o = {3:4}; $haskey3 = haskey(o, 3)' run_mlr --from $indir/xyz2 put 'o = {3:4}; $haskey3 = haskey(o, 4)' run_mlr --from $indir/xyz2 put '@o = {3:4}; $haskeya = haskey(@o, "a")' run_mlr --from $indir/xyz2 put '@o = {3:4}; $haskey3 = haskey(@o, 3)' run_mlr --from $indir/xyz2 put '@o = {3:4}; $haskey3 = haskey(@o, 4)' run_mlr --from $indir/xyz2 put 'o = "3:4"; $haskeya = haskey(@o, "a")' run_mlr --from $indir/xyz2 put 'o = "3:4"; $haskey3 = haskey(@o, 3)' run_mlr --from $indir/xyz2 put 'o = "3:4"; $haskey3 = haskey(@o, 4)' # ---------------------------------------------------------------- announce LENGTH/DEPTH/LEAFCOUNT run_mlr --from $indir/abixy-het put '$length = length($a)' run_mlr --from $indir/abixy-het put '$length = length($*)' run_mlr --from $indir/xyz2 put '$length= length({3:4, 5:{6:7}, 8:{9:{10:11}}})' run_mlr --from $indir/xyz2 put 'o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(o)' run_mlr --from $indir/xyz2 put '@o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(@o)' run_mlr --from $indir/abixy-het put '$depth = depth($a)' run_mlr --from $indir/abixy-het put '$depth = depth($*)' run_mlr --from $indir/xyz2 put '$depth= depth({3:4, 5:{6:7}, 8:{9:{10:11}}})' run_mlr --from $indir/xyz2 put 'o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(o)' run_mlr --from $indir/xyz2 put '@o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(@o)' run_mlr --from $indir/abixy-het put '$leafcount = leafcount($a)' run_mlr --from $indir/abixy-het put '$leafcount = leafcount($*)' run_mlr --from $indir/xyz2 put '$leafcount= leafcount({3:4, 5:{6:7}, 8:{9:{10:11}}})' run_mlr --from $indir/xyz2 put 'o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(o)' run_mlr --from $indir/xyz2 put '@o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(@o)' # xxx ternary operator (and most RHS expressions in the grammar) doesn't handle maps. # run_mlr --from $indir/abixy-het put -q 'o = haskey(NR==4 ? {"a": NF} : {"b": NF}, "a"); print "NR=".NR.",haskeya=".o' # ---------------------------------------------------------------- announce MAPVAR EMIT run_mlr -n put 'end { @a[2][3] = 4; b[2][3] = 8; emit (@a, b, {2:{3:12}}); emitp (@a, b, {2:{3:12}}); emit {}; emit (@a, b, {2:{3:12}}), "t"; emitp (@a, b, {2:{3:12}}), "t"; emit {}; emit (@a, b, {2:{3:12}}), "t", "u"; emitp (@a, b, {2:{3:12}}), "t", "u"; }' run_mlr -n put 'end { @a[2][3] = 4; b[2][3] = 8; emitp (@a, b, {2:{3:12}}); emit (@a, b, {2:{3:12}}); emit {}; emitp (@a, b, {2:{3:12}}), "t"; emit (@a, b, {2:{3:12}}), "t"; emit {}; emitp (@a, b, {2:{3:12}}), "t", "u"; emit (@a, b, {2:{3:12}}), "t", "u"; }' # ---------------------------------------------------------------- announce MAPVAR FOR-LOOPS run_mlr --from $indir/abixy put -q ' func f() { return { "a:".$a: $i, "b:".$b: $y, NR: NF, } } for (k,v in f()) { print "k=".k; print "v=".v; } print ' # ---------------------------------------------------------------- announce TRAILING COMMAS run_mlr --from $indir/abixy put ' $* = { "a": $a, "x": $x, } ' run_mlr --from $indir/xyz345 put 'func f(): int { return 999 } $y=f()' mlr_expect_fail --from $indir/xyz345 put 'func f(): int { return 999 } $y=f(,)' run_mlr --from $indir/xyz345 put 'func f(a,): int { return a*2 } $y=f(NR)' mlr_expect_fail --from $indir/xyz345 put 'func f(a,,): int { return a*2 } $y=f(NR)' run_mlr --from $indir/xyz345 put 'func f(int a,): int { return a*2 } $y=f(NR)' mlr_expect_fail --from $indir/xyz345 put 'func f(int a,,): int { return a*2 } $y=f(NR)' run_mlr --from $indir/xyz345 put 'subr s() { print 999 } call s()' mlr_expect_fail --from $indir/xyz345 put 'subr s() { print 999 } call s(,)' run_mlr --from $indir/xyz345 put 'subr s(a,) { print a*2 } call s(NR)' mlr_expect_fail --from $indir/xyz345 put 'subr s(a,,) { print a*2 } call s(NR)' run_mlr --from $indir/xyz345 put 'subr s(int a,) { print a*2 } call s(NR)' mlr_expect_fail --from $indir/xyz345 put 'subr s(int a,,) { print a*2 } call s(NR)' run_mlr --from $indir/xyz345 put '$y=log10($x)' run_mlr --from $indir/xyz345 put '$y=log10($x,)' mlr_expect_fail --from $indir/xyz345 put '$y=log10($x,,)' mlr_expect_fail --from $indir/xyz345 put '$y=log10(,$x)' run_mlr --from $indir/xyz345 put '$y=pow($x,2)' run_mlr --from $indir/xyz345 put '$y=pow($x,2,)' # ---------------------------------------------------------------- announce MAPVARS/UDFs/SUBROUTINES run_mlr --from $indir/abixy put ' func f(m) { dump m; sum = 0; for (k, v in m) { sum += k } return sum } @v[$i] = $a; $y = f(@v) ' run_mlr --from $indir/abixy put ' subr s(m) { dump m; sum = 0; for (k, v in m) { sum += k } @sum = sum; } @v[$i] = $a; call s(@v); $y = @sum; ' run_mlr --from $indir/abixy-het put 'func f(x) {return {"a":x,"b":x**2}}; map o = f($x); $* = o' run_mlr --from $indir/abixy-het put -q 'func f(x) {return x**2}; var z = f($x); dump z' run_mlr --from $indir/abixy-het put -q 'func f(x) {map m = {NR:x};return m}; z = f($y); dump z' mlr_expect_fail --from $indir/abixy put ' func f(int x): map { if (NR==2) { return 2 } else { return {} } } $y=f($x) ' run_mlr --from $indir/abixy put ' func f(int x): map { if (NR==200) { return 2 } else { return {} } } $y=f($i) ' mlr_expect_fail --from $indir/abixy put ' func f(int x): map { if (NR==200) { return 2 } else { return {} } } $y=f($x) ' run_mlr --from $indir/abixy put ' func f(int x): var { if (NR==2) { return 2 } else { return {} } } $y=f($i) ' mlr_expect_fail --from $indir/abixy put ' func f(int x): var { if (NR==2) { return 2 } else { return {} } } $y=f($x) ' mlr_expect_fail --from $indir/abixy put ' func f(x): int { # fall-through return value is absent-null } $y=f($x) ' mlr_expect_fail --from $indir/abixy put ' int a = 1; var b = a[2]; # cannot index localvar declared non-map ' # This one is intended to particularly look at freeing, e.g. with './reg_test/run --valgrind'. run_mlr --oxtab --from $indir/abixy-het put ' $* = mapdiff( mapsum($*, {"a": "newval"}), {"b": "nonesuch"}, ) ' # ---------------------------------------------------------------- # AUX ENTRIES run_mlr_for_auxents lecat --mono < $indir/line-ending-cr.bin run_mlr_for_auxents lecat --mono < $indir/line-ending-lf.bin run_mlr_for_auxents lecat --mono < $indir/line-ending-crlf.bin run_mlr_for_auxents_no_output termcvt --cr2lf < $indir/line-ending-cr.bin > $outdir/line-ending-temp-1.bin run_mlr_for_auxents_no_output termcvt --cr2crlf < $indir/line-ending-cr.bin > $outdir/line-ending-temp-2.bin run_mlr_for_auxents_no_output termcvt --lf2cr < $indir/line-ending-lf.bin > $outdir/line-ending-temp-3.bin run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/line-ending-lf.bin > $outdir/line-ending-temp-4.bin run_mlr_for_auxents_no_output termcvt --crlf2cr < $indir/line-ending-crlf.bin > $outdir/line-ending-temp-5.bin run_mlr_for_auxents_no_output termcvt --crlf2lf < $indir/line-ending-crlf.bin > $outdir/line-ending-temp-6.bin run_mlr_for_auxents hex < $outdir/line-ending-temp-1.bin run_mlr_for_auxents hex < $outdir/line-ending-temp-2.bin run_mlr_for_auxents hex < $outdir/line-ending-temp-3.bin run_mlr_for_auxents hex < $outdir/line-ending-temp-4.bin run_mlr_for_auxents hex < $outdir/line-ending-temp-5.bin run_mlr_for_auxents hex < $outdir/line-ending-temp-6.bin # ================================================================ # A key feature of this regression script is that it can be invoked from any # directory. Depending on the directory it's invoked from, the path to $outdir # may vary. Nonetheless for debugging it's crucial that we echo out each # command being executed -- here we use diff -I to skip the info lines and # focus the test on program output per se. echo echo ================================================================ echo "Differences between $expfile and $outfile:" # We run with 'set -e' all the way through this script, to die on error -- but # for the diff command we want to trap the error and die with a message, especially # when the diff is long. set +e diff -a -I '^mlr' -I '^cat' -C5 $expfile $outfile status=$? if [ $status -eq 0 ]; then echo "No differences were found between $expfile and $outfile" echo ================================================================ echo echo ALL REGRESSION TESTS PASSED echo Tests completed: $num_completed exit 0 else echo echo "Differences were found between $expfile and $outfile !" echo echo Tests completed: $num_completed exit 1 fi miller-5.6.2/c/regdiff000077500000000000000000000001311354153536500145730ustar00rootroot00000000000000#!/bin/bash diff -a -I '^mlr ' -I '^cat ' "$@" reg_test/expected/out output-regtest/out miller-5.6.2/c/stdlib.mlr000066400000000000000000000007551354153536500152500ustar00rootroot00000000000000 func mymapsum(map a, map b): map { for (k in b) { if (!haskey(a, k)) { a[k] = b[k]; } } return a; } func mymapdiff(map a, map b): map { for (k in b) { if (haskey(a, k)) { unset a[k] } } return a; } func myleafcount(map m) : int { int sum = 0; for (k in m) { sum += 1; if (ismap(m[k])) { sum += leafcount(m[k]) } } return sum; } func mylength(map m) : int { int sum = 0; for (k in m) { sum += 1; } return sum; } miller-5.6.2/c/stream/000077500000000000000000000000001354153536500145375ustar00rootroot00000000000000miller-5.6.2/c/stream/Makefile.am000066400000000000000000000002201354153536500165650ustar00rootroot00000000000000noinst_LTLIBRARIES= libstream.la libstream_la_SOURCES= stream.c stream.h libstream_la_CPPFLAGS= -I${srcdir}/../ libstream_la_CFLAGS= -std=gnu99 miller-5.6.2/c/stream/Makefile.in000066400000000000000000000446511354153536500166160ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = c/stream ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libstream_la_LIBADD = am_libstream_la_OBJECTS = libstream_la-stream.lo libstream_la_OBJECTS = $(am_libstream_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libstream_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libstream_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libstream_la_SOURCES) DIST_SOURCES = $(libstream_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libstream.la libstream_la_SOURCES = stream.c stream.h libstream_la_CPPFLAGS = -I${srcdir}/../ libstream_la_CFLAGS = -std=gnu99 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/stream/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/stream/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libstream.la: $(libstream_la_OBJECTS) $(libstream_la_DEPENDENCIES) $(EXTRA_libstream_la_DEPENDENCIES) $(AM_V_CCLD)$(libstream_la_LINK) $(libstream_la_OBJECTS) $(libstream_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstream_la-stream.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libstream_la-stream.lo: stream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstream_la_CPPFLAGS) $(CPPFLAGS) $(libstream_la_CFLAGS) $(CFLAGS) -MT libstream_la-stream.lo -MD -MP -MF $(DEPDIR)/libstream_la-stream.Tpo -c -o libstream_la-stream.lo `test -f 'stream.c' || echo '$(srcdir)/'`stream.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstream_la-stream.Tpo $(DEPDIR)/libstream_la-stream.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stream.c' object='libstream_la-stream.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstream_la_CPPFLAGS) $(CPPFLAGS) $(libstream_la_CFLAGS) $(CFLAGS) -c -o libstream_la-stream.lo `test -f 'stream.c' || echo '$(srcdir)/'`stream.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/stream/stream.c000066400000000000000000000225601354153536500162030ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "input/lrec_readers.h" #include "mapping/mappers.h" #include "output/lrec_writers.h" static int do_stream_chained_in_place(context_t* pctx, cli_opts_t* popts); static int do_stream_chained_to_stdout(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts); static int do_file_chained(char* filename, context_t* pctx, lrec_reader_t* plrec_reader, sllv_t* pmapper_list, lrec_writer_t* plrec_writer, FILE* output_stream, cli_opts_t* popts); static sllv_t* chain_map(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head); static void drive_lrec(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head, lrec_writer_t* plrec_writer, FILE* output_stream); typedef void progress_indicator_t(context_t* pctx, long long nr_progress_mod); static void null_progress_indicator(context_t* pctx, long long nr_progress_mod); static void stderr_progress_indicator(context_t* pctx, long long nr_progress_mod); // ---------------------------------------------------------------- int do_stream_chained(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts) { if (popts->do_in_place) { return do_stream_chained_in_place(pctx, popts); } else { return do_stream_chained_to_stdout(pctx, pmapper_list, popts); } } // ---------------------------------------------------------------- // For in-place mode, reconstruct the mappers on each input file. E.g. 'mlr -I head -n 2 // foo bar' should do head -n 2 on foo as well as on bar. // // I could have implemented this with a single construction of the mappers and having each // mapper implement a virtual reset() method. However, having effectively two initalizers // per mapper -- constructor and reset method -- I'd surely miss some logic somewhere. // With in-place mode being a less frequently used code path, this would likely lead to // latent bugs. So while it seems inelegant to re-parse part of the command line over and // over again to reconstruct mappers for each file, this approach leads to greater code // stability. static int do_stream_chained_in_place(context_t* pctx, cli_opts_t* popts) { MLR_INTERNAL_CODING_ERROR_IF(popts->filenames == NULL); MLR_INTERNAL_CODING_ERROR_IF(popts->filenames->length == 0); int ok = 1; // Read from each file name in turn for (sllse_t* pe = popts->filenames->phead; pe != NULL; pe = pe->pnext) { // Allocate reader, mappers, and writer individually for each file name. // This way CSV headers appear in each file, head -n 10 puts 10 rows for // each output file, and so on. lrec_reader_t* plrec_reader = lrec_reader_alloc_or_die(&popts->reader_opts); lrec_writer_t* plrec_writer = lrec_writer_alloc_or_die(&popts->writer_opts); // Note that the command-line parsers can operate destructively on argv, // e.g. verbs which take comma-delimited field names splitting on commas. // For this reason we need to duplicate argv on each run. We need to free // after processing in case mappers have retained pointers into argv. int argi = popts->mapper_argb; int unused; char** argv_copy = copy_argv(popts->original_argv); sllv_t* pmapper_list = cli_parse_mappers(argv_copy, &argi, popts->argc, popts, &unused); MLR_INTERNAL_CODING_ERROR_IF(pmapper_list->length < 1); // Should not have been allowed by the CLI parser. char* filename = pe->value; char* tempname = alloc_suffixed_temp_file_name(filename); FILE* output_stream = fopen(tempname, "wb"); if (output_stream == NULL) { perror("fopen"); fprintf(stderr, "%s: Could not open \"%s\" for write.\n", MLR_GLOBALS.bargv0, tempname); exit(1); } pctx->filenum++; pctx->filename = filename; pctx->fnr = 0; ok = do_file_chained(filename, pctx, plrec_reader, pmapper_list, plrec_writer, output_stream, popts) && ok; // For in-place mode, there's no breaking from the loop over input files. Just an early // return from the mapper chain, which has already just happened. if (pctx->force_eof == TRUE) // e.g. mlr head pctx->force_eof = FALSE; // Mappers and writers receive end-of-stream notifications via null input record. // Do that, now that data from the input file have been exhausted. drive_lrec(NULL, pctx, pmapper_list->phead, plrec_writer, output_stream); // Drain the pretty-printer. plrec_writer->pprocess_func(plrec_writer->pvstate, output_stream, NULL, pctx); fclose(output_stream); int rc = rename(tempname, filename); if (rc != 0) { perror("rename"); fprintf(stderr, "%s: Could not rename \"%s\" to \"%s\".\n", MLR_GLOBALS.bargv0, tempname, filename); exit(1); } free(tempname); plrec_reader->pfree_func(plrec_reader); plrec_writer->pfree_func(plrec_writer, pctx); mapper_chain_free(pmapper_list, pctx); free_argv_copy(argv_copy); } return ok; } // ---------------------------------------------------------------- static int do_stream_chained_to_stdout(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts) { FILE* output_stream = stdout; lrec_reader_t* plrec_reader = lrec_reader_alloc_or_die(&popts->reader_opts); lrec_writer_t* plrec_writer = lrec_writer_alloc_or_die(&popts->writer_opts); MLR_INTERNAL_CODING_ERROR_IF(pmapper_list->length < 1); // Should not have been allowed by the CLI parser. int ok = 1; if (popts->filenames == NULL) { // No input at all } else if (popts->filenames->length == 0) { // Zero file names means read from standard input pctx->filenum++; pctx->filename = "(stdin)"; pctx->fnr = 0; ok = do_file_chained("-", pctx, plrec_reader, pmapper_list, plrec_writer, output_stream, popts) && ok; } else { // Read from each file name in turn for (sllse_t* pe = popts->filenames->phead; pe != NULL; pe = pe->pnext) { char* filename = pe->value; pctx->filenum++; pctx->filename = filename; pctx->fnr = 0; ok = do_file_chained(filename, pctx, plrec_reader, pmapper_list, plrec_writer, output_stream, popts) && ok; if (pctx->force_eof == TRUE) // e.g. mlr head break; } } // Mappers and writers receive end-of-stream notifications via null input record. // Do that, now that data from all input file(s) have been exhausted. drive_lrec(NULL, pctx, pmapper_list->phead, plrec_writer, output_stream); // Drain the pretty-printer. plrec_writer->pprocess_func(plrec_writer->pvstate, output_stream, NULL, pctx); plrec_reader->pfree_func(plrec_reader); plrec_writer->pfree_func(plrec_writer, pctx); return ok; } // ---------------------------------------------------------------- static int do_file_chained(char* filename, context_t* pctx, lrec_reader_t* plrec_reader, sllv_t* pmapper_list, lrec_writer_t* plrec_writer, FILE* output_stream, cli_opts_t* popts) { void* pvhandle = plrec_reader->popen_func(plrec_reader->pvstate, popts->reader_opts.prepipe, filename); progress_indicator_t* pindicator = popts->nr_progress_mod == 0LL ? null_progress_indicator : stderr_progress_indicator; // Start-of-file hook, e.g. expecting CSV headers on input. plrec_reader->psof_func(plrec_reader->pvstate, pvhandle); while (1) { lrec_t* pinrec = plrec_reader->pprocess_func(plrec_reader->pvstate, pvhandle, pctx); if (pinrec == NULL) break; if (pctx->force_eof == TRUE) { // e.g. mlr head lrec_free(pinrec); break; } pctx->nr++; pctx->fnr++; pindicator(pctx, popts->nr_progress_mod); drive_lrec(pinrec, pctx, pmapper_list->phead, plrec_writer, output_stream); } plrec_reader->pclose_func(plrec_reader->pvstate, pvhandle, popts->reader_opts.prepipe); return 1; } // ---------------------------------------------------------------- static void drive_lrec(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head, lrec_writer_t* plrec_writer, FILE* output_stream) { sllv_t* outrecs = chain_map(pinrec, pctx, pmapper_list_head); if (outrecs != NULL) { for (sllve_t* pe = outrecs->phead; pe != NULL; pe = pe->pnext) { lrec_t* poutrec = pe->pvvalue; if (poutrec != NULL) // writer frees records (sllv void-star payload) plrec_writer->pprocess_func(plrec_writer->pvstate, output_stream, poutrec, pctx); } sllv_free(outrecs); // we free the list } } // ---------------------------------------------------------------- // Map a single input record (maybe null at end of input stream) to zero or // more output records. // // Return: list of lrec_t*. Input: lrec_t* and list of mapper_t*. static sllv_t* chain_map(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head) { mapper_t* pmapper = pmapper_list_head->pvvalue; sllv_t* outrecs = pmapper->pprocess_func(pinrec, pctx, pmapper->pvstate); if (pmapper_list_head->pnext == NULL) { return outrecs; } else if (outrecs == NULL) { // end of input stream return NULL; } else { sllv_t* nextrecs = sllv_alloc(); for (sllve_t* pe = outrecs->phead; pe != NULL; pe = pe->pnext) { lrec_t* poutrec = pe->pvvalue; sllv_t* nextrecsi = chain_map(poutrec, pctx, pmapper_list_head->pnext); sllv_transfer(nextrecs, nextrecsi); sllv_free(nextrecsi); } sllv_free(outrecs); return nextrecs; } } // ---------------------------------------------------------------- static void stderr_progress_indicator(context_t* pctx, long long nr_progress_mod) { long long remainder = pctx->nr % nr_progress_mod; if (remainder == 0) { fprintf(stderr, "NR=%lld FNR=%lld FILENAME=%s\n", pctx->nr, pctx->fnr, pctx->filename); } } static void null_progress_indicator(context_t* pctx, long long nr_progress_mod) { } miller-5.6.2/c/stream/stream.h000066400000000000000000000005221354153536500162020ustar00rootroot00000000000000#ifndef STREAM_H #define STREAM_H #include "cli/mlrcli.h" #include "lib/context.h" #include "containers/slls.h" #include "containers/sllv.h" #include "input/lrec_readers.h" #include "mapping/mappers.h" #include "output/lrec_writers.h" int do_stream_chained(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts); #endif // STREAM_H miller-5.6.2/c/todo.txt000066400000000000000000000372361354153536500147650ustar00rootroot00000000000000================================================================ BUGFIXES * follow-on for pre-existing unset/typed-overlay issue ================================================================ TOP OF LIST multi-language perf writeup -- to draft release notes poki updates: * all expand-all/collapse-all, h1's, etc. could be autogenned -- ? ? fold back to gh/jk/poki quick doc: * multi-join @ FAQ * doc/bld note for vgrun oo - git log; find last release - git diff -r xxxxx reg_test/run - export indir=./reg_test/input - vgrun mlr ... * sort-within-records * LUA-style * inf/nan in strings ... * linear rename: - new UTs ================================================================ * uniq: o UT cases x all o faqent w/ ref to head -n 1 -g - xxx - xxx - xxx ! dirname/basename functions ! * MILLER_{MAJOR/MINOR/MICRO} builtins ? airable: !! --gen: * olh/mld * mlrval.?/mvfuncs.? -> lib; then support mv_t @ gen-reader * w/ multiple file names it gens twice. abend unless #infile==0. -> also '$z=FILENAME' says '(stdin)' :( ! stdout fflushes .. ! mld/mlh stats1 regex cookbook/10min examples ! termcvt -I ! aux-list -> main help; dox too * UT unhex ! faqent/cookbook/more: mlr termcvt --cr2lf foo.csv.cr > foo.csv * reg_test/run --mlrexec flag * across-all/regex x stats1 / many verbs k stats1 functionality k UT k stats1 --help - merge-fields -x - how many others for incremental release? stats2? * more json handling: topmost/second-topmost array, put nidx-style as with dkvp. ?? JIT conversion (#150)? makes a mess of the disposition matrices; bleah. but the outcome would be nice. ---------------------------------------------------------------- non-airable: ? bash completion script ? ! fix autoreconf timestamp wtf ! ASAN build @ travis ! -> doesn't look quite right at travis -> to release notes if successful * --barred & autodetect notes @ the long issue ! rm temp-junk files ! ! pokipush ! write-temp-file abend on negfd etc * rh/fedora/centos * travis clang build w/ asan ? ---------------------------------------------------------------- other: ? coroutines (r/w pipes)? o maybe not now: need notion of # lines in/out which, simplest case, are 1-1, but in the more general case might not be. o coexec as well as shellout; stderr caveats x both ================================================================ MAPVAR CHECKLIST: * MT_ERROR vs. fatal vs. skip assign. iron it out. * more generally, audit error-handling for consistency: - absent/skip - '(error)' - abend - coerce -> doc smoothouts for 5.0.0 incompat notes - e.g. non-string =~ regex: coerce LHS to string? * feels weird: '$*=3' is a syntax error but 'o=3;$*=o' is not. also '@*=3' is not a syntax error. * death knell for mv-only evaluators: this is a syntax error: mlr put -q 'o = haskey(NR==4 ? {"a": NF} : {"b": NF}, "a"); print "NR=".NR.",haskeya=".o' * gross: $*=splitkv(...) results in string keys always. strengthen the typed overlay for filter/put? lhmsmv -> mlhmmv?? need to be careful with int-key gets ... char* field_name in many places ... * debt-reduction ! naming conventions to clarify transfer/copy semantics - copy/ref of keys vs. values in mlhmmv, local_stack, and callees -- ?!? * clarify ownership semantics in localstack & mlhmmv via function names, & top-of-file comments ================================================================ 5.4.0 ideas: ---------------------------------------------------------------- ! multi-field x many verbs: -f/-r field-name-spec opportunities throughout which verbs: k stats1 (done in 5.2.0) * stats2 * merge-fields -x - count-distinct - sec2gmt/seg2gmtdate - step - top ? uniq -g ? sample -g ? head -g ? tail -g ? reorder ? bar ? histogram ? label ? nest ? sort ? decimate -g ? join ---------------------------------------------------------------- ? weighted stats? * xxxes * mt_error/fatal/skip-assign audit ! more than 'syntax error' from lemon-parse failures ... lemon API research ? some sort of debug/single-step/trace ... include the AST in the CST & reverse-generate ? * seqgen as input lrec "reader"? the seqgen verb doesn't (and shouldn't) step NR. ? free vs. free_contents names ? * emph override wording: from rel notes. "Likewise --ofs, --ors, --ops, --jvstack, and all other output-formatting options from the main help at mlr -h and/or man mlr default to the main command-line options, and may be overridden with flags supplied to mlr put and mlr tee." ? some help for keyword clashes? e.g. 'func E(x) { ... }' ? * bargv0 throughout, replacing "mlr" and argv[0] both. (former against name-changes; latter against /usr/bin/mlr.) * prune unused functions ? mlr step -a shift --by {n} ? --imd ? * bool_t:uchar typedef & perf check? COOK: * use: https://github.com/petewarden/dstkdata mlr --from ../data/big.dkvp put -q ' #weight = $y; #weight = $y * $y; weight = $i; @sumwx[$a] += weight * $i; @sumw[$a] += weight; @sumx[$a] += $i; @sumn[$a] += 1; end { map wmean = {}; map mean = {}; for (a in @sumwx) { wmean[a] = @sumwx[a] / @sumw[a] } for (a in @sumx) { mean[a] = @sumx[a] / @sumn[a] } emit wmean, "a"; emit mean, "a"; }' COMPARES: * https://github.com/shenwei356/csvtk * http://csvkit.readthedocs.io/en/540/ * https://github.com/BurntSushi/xsv * https://github.com/eBay/tsv-utils-dlang * https://www.gnu.org/software/datamash/manual/datamash.html ================================================================ 5.4.0 IDEAS: !! coroutines: line-oriented; operate on field(s); r/w popen * json_encode / json_decode functions? (map->string and string->map) - array handling ... * option to inhibit dquot of int map keys on dump ! fix for srec keys ! * expose strcmp & strcasecmp for lhm sorting * expose movefirst/movelast funcs * mlr sort --fold! * mlr paste (sjackman) * dump @records after @records[NR]=$*: json "1" rather than 1 indices are b04k3d. make a cliopt. * regexes for IPS/IFS/IRS; also in mlr nest etc. !!?? disallow implicit assignment? force w/ var at least?? - w/ implicit: for (...) {sum += x} FUBAR - w/o implicit: sad panda cannot type 'x=1' -> at least make an mld:ref note about it. * perf profile ! sortk sortv sortf -> how to compare map-valued keys on sortv? recurse? -> string keys before/after int? -> keys: int before string before map -> values? o definitely intermix int & float o definitely intermix empty & string o definitely num before string. o definitely maps after that. o what about boolean? o what about error/absent? -> how to incorporate numeric & lexical flags -- defer all complexity to sortf? ? compile-time checks between locals, fcnargs, fcnretvals -- if unsatisfiable by typing (irrespective of later stream data) then throw at compile time. * poki-run no '$ ' for comment lines ? maybe some sort of collections-API logic to complement for-loops? important, or just fun to code up? ? map-literal grammar as separate parser? - replace existing json parser? - use this for streaming parser? - implement byte-getter with fgetc to keep reading until closing bracket? ? 'null' JSON syntax -- what syntactic meaning for miller? mv_absent or mv_empty, neither would render back as 'null' on output. yet i also don't want another null-type. ? support JSON arrays: - allow them in map-literal input - allow them in JSON record input - add mlhmmv array type, complementing map type - negative-index read semantics (backwards index) - out-of-bounds read semantics (mv_absent) - -out-of-bounds write semantics (array extend) - for srec-to-mlhmmv: loop over level & if all integer keys & all in sequence, treat as array ? array/list types? [a,b,c] ? set types? {a,b,c} (vs. map {a:1,b:2,c:3}) ? maybe overkill (map covers array & set) but with those there would be solid collections coverage. ---------------------------------------------------------------- EXECUTION TRACE: ! missing operators $ mlr --from ../c/s put -T 'int a=1;var b=a[2]' TRACE (int a 1) TRACE (var b (a 2)) ! trace *assignments* (mutations of pvars state) * work through the grammar & neaten up pnode->text instances, now that these names are user-visible. * mld. note it's an AST dump, not source-level. * maybe go through and replace (...)-style with AST-to-source formatting ... * UT ! this is all very cute tracing at source-level but would be significantly more useful with values shown. ---------------------------------------------------------------- SYNTAX ERROR IMPROVEMENT: * try to get some source-level info in there. http://archive.oreilly.com/pub/a/linux/excerpts/9780596155971/error-reporting-recovery.html ---------------------------------------------------------------- ? double-quote-aware (non-lite) nidx & dkvp options? ? comma-number -- using locale? * MLRPATH ---------------------------------------------------------------- ? narrative/slides doc ... ? stdin-then-tail-f ? CONVFMT? IGNORECASE? MLRPATH? * lrec get followed by put/remove: getext variant returning node for unlink, valpoke, or null == append to avoid double-searching. * 64-bit lengths for containers. test with 5-billion-integer-seq data. ---------------------------------------------------------------- MORE * look into 'perf' * linreg in terms of stats only ... check py book * cat/cut langcomps (w/ gh links) -> perf page * pipe-viewer-like feature to stderr? * stats1/stats2 sliding-window feature? and/or with ewma-coefficients (much easier) - mean/stddev/var; skew/kurt? - linregs; corr/cov? ? also, option of weighted stats w/ explicit weights field? ? maybe just EWMA with well-known sumw followed by then-chaining. write up the weights if so? * tbin/ok -> cookbook * debian screenshot * ruby @ optextdep @ mld; poki+mkman * stdin filename keyword for read-from-file-then-tail-f mode (e.g. mlr etc) - needs refactor for lrec_reader_alloc callsite * perf page: (1) redo; (2) note GNU/etc; (3) compare to mawk (http://invisible-island.net/mawk/) * EOS comments thruout * valgrind note @ new dev page/section * join: final sllv_free in destructor (lo-pri) * anim ref https://github.com/edi9999/path-extractor * benchmark lua per se * benchmark lua-jit * bug or feature? near-overflow case: $ mlr sort -n x reg_test/input/near-ovf.dkvp x=9223372036854775807,y=-9223372036854775803 x=9223372036854775804,y=-9223372036854775804 x=9223372036854775801,y=-9223372036854775801 x=9223372036854775806,y=-9223372036854775805 x=9223372036854775803,y=-9223372036854775807 x=9223372036854775802,y=-9223372036854775806 x=9223372036854775805,y=-9223372036854775802 ---------------------------------------------------------------- COOKBOOK/FAQ/ETC.: * cookbook: - eval stuff from https://github.com/johnkerl/miller/issues/88 $ mlr --csvlite stats2 -a linreg-pca -f x,y x x_y_pca_m,x_y_pca_b,x_y_pca_n,x_y_pca_quality 1.030300,0.949250,4,0.999859 $ mlr --csvlite --odkvp --ofs semicolon stats2 -a linreg-pca -f x,y x x_y_pca_m=1.030300;x_y_pca_b=0.949250;x_y_pca_n=4;x_y_pca_quality=0.999859 $ eval $(mlr --csvlite --odkvp --ofs semicolon stats2 -a linreg-pca -f x,y x) $ echo $x_y_pca_m 1.030300 - hold-and-fit regressor doc: 'then put' for residuals; note avoids two-pass & the saving of fit parameters - histo w/ min/max is effectively 2-pass (unless you have prior knowledge about the data). note count-distinct w/ int() func. - two-pass lin/logi reg vs. hold-and-fit. - very specific R/mysql/etc inouts - polyglottal dkvp/etc production. - very specific examples of sed/grep/etc preprocessing to structurize semi-structured data (e.g. logs) - checku.dash -> cookbook * faqents: - rsum as proxy for per-record/agg-only mixed output * other doc besides cookbook & faq: - R doc: ! xref @ covers x 2 ! be very clear streaming vs. dataframe -- each has things the other can't do ! emph mlr has light stats but for heavyweight analysis use R et al. * --mmap @ mlr -h ================================================================ * ect feature? -> maybe better in cookbook ... - in1 optional: t (epoch seconds); default systime() - in2: nleft - in3 optional: target #/field name - in optional: -s flag or not - out1: etchours - out2: etcstamp o expose mapper_stats2_alloc o expose mapper_cut_alloc o encapsulate the following: mlr put '$t=systime()' \ then filter 'NR>4' \ then put '$nleft=$target-$n' \ then stats2 -s -a linreg-pca -f t,nleft \ then put '$etc= -$t_n_pca_b/$t_n_pca_m; $etcstamp=sec2gmt($etc); $etchours=($etc-systime())/3600.0' * mlr step -a from-first -f t \ then cut -o -f t_from_first,ntodo \ then step -a ewma -d 0.005,0.01,0.1 -o a,b,c -f ntodo \ then stats2 -s -a linreg-pca -f \ t_from_first,ntodo,t_from_first,ntodo_ewma_a,t_from_first,ntodo_ewma_b,t_from_first,ntodo_ewma_c \ then put ' $ect0 = -$t_from_first_ntodo_pca_b/$t_from_first_ntodo_pca_m; $ecta = -$t_from_first_ntodo_ewma_a_pca_b/$t_from_first_ntodo_ewma_a_pca_m; $ectb = -$t_from_first_ntodo_ewma_b_pca_b/$t_from_first_ntodo_ewma_b_pca_m; $ectc = -$t_from_first_ntodo_ewma_c_pca_b/$t_from_first_ntodo_ewma_c_pca_m ' \ then cut -o -f t_from_first,ect0,ecta,ectb,ectc ---------------------------------------------------------------- * introduce a fourth, padding separator for all formats? (for leading/trailing strip/skip.) o allows 'x = 10' in DKVP o allows right-justified keys in XTAB ? wiki quickselect ? * hash-collision ifdef instrumentation -> maybe find a better hash function out there * lemon in-dir -- cf wiz note * gprof link with -lc on FreeBSD -- ? ================================================================ DOC * Note that PCA is better than OLS for roundoff error (sum of squares ...): grep red data/multicountdown.txt | head -n 13 | mlr --opprint stats2 -a linreg-ols -f t,count grep red data/multicountdown.txt | head -n 14 | mlr --opprint stats2 -a linreg-ols -f t,count ================================================================ IMPROVEMENTS * run go/d/etc on sprax & include #'s in perf pg, and/or rm xref in the latter & just post xlang perf #'s there * link to gh/jk/m xlang impls ... and/or cardify their sources :) ... or maybe just link to gh/jk/m xlang dir * ack c impl has been repeatedly optimized but even the original version (also cutc.c ...) outperforms * update t1.rb including numeric sort; fix appropriateness of -t= * more use of restrict pointers ... ? ================================================================ PYTHON * pgr + stats_m same I/O modules?? ================================================================ FYI shell: mlr put '$z=$x+$y' lldb: run put "\$z=\$x+\$y" http://include-what-you-use.org/ ---------------------------------------------------------------- https://fedoraproject.org/wiki/How_to_create_an_RPM_package https://wiki.centos.org/HowTos/Packages/ContributeYourRPMs https://lists.centos.org/pipermail/centos/2012-September/129227.html https://fedoraproject.org/wiki/Join_the_package_collection_maintainers https://fedoraproject.org/wiki/How_to_get_sponsored_into_the_packager_group https://fedoraproject.org/wiki/Package_Review_Process https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch11s03.html http://wiki.networksecuritytoolkit.org/nstwiki/index.php/HowTo_Create_A_Patch_File_For_A_RPM ---------------------------------------------------------------- Squash commits by: brew update git checkout $YOUR_BRANCH git rebase --interactive origin/master mark each commit other than the first as "squash" or "fixup" git push -f http://codeinthehole.com/writing/pull-requests-and-other-good-practices-for-teams-using-github/ miller-5.6.2/c/tools/000077500000000000000000000000001354153536500144045ustar00rootroot00000000000000miller-5.6.2/c/tools/clean-valgrind-output000077500000000000000000000023051354153536500205560ustar00rootroot00000000000000#!/bin/bash # E.g. for filtering the output of reg_test/run --valgrind. # This just strips out some false positives, e.g. system-level stuff not # relevant to Miller itself. mgrepv is at # https://github.com/johnkerl/scripts/blob/master/fundam/mgrepv sed 's/^==.*== //' "$@" | swipe \ | sed 's/--[0-9]*-- UNKNOWN.*//' \ | mgrepv dyld \ | mgrepv copySwiftV1MangledName \ | mgrepv 'LEAK SUMMARY' \ | mgrepv 'HEAP SUMMARY' \ | grep -v 'ERROR SUMMARY' \ | grep -v 'Memcheck,' \ | grep -v 'Copyright' \ | grep -v 'Using Valgrind' \ | grep -v 'For counts of' \ | mgrepv 'mlr_try_float_from_string' \ | mgrepv '__snprintf_chk' \ | mgrepv 'vsscanf_l' \ | mgrepv 'handle_ld_preload' \ | mgrepv 'NXMapRemove' \ | mgrepv '_platform_memchr' \ | mgrepv 'xpc_pipe_routine' \ | grep -v 'MACH_SEND_TRAILER' \ | mgrepv 'mlr_dsl_lexer_lex' \ | mgrepv 'yyreduce' \ | mgrepv 'unbackslash' \ | mgrepv 'cli_sep_from_arg' \ | mgrepv 'join_bucket_keeper_alloc' \ | mgrepv 'join_bucket_keeper_emit' \ | mgrepv 'handle_env_assignment' \ | mgrepv 'file_ingestor_stdio_vopen' \ | mgrepv 'lrec_reader_stdio_json_sof' \ | cat #| mgrepv 'shared_parse_cli' \ #| mgrepv 'parse_command_line' miller-5.6.2/c/tools/mcountlines000077500000000000000000000007561354153536500167020ustar00rootroot00000000000000#!/bin/sh wc -l \ cli/*.[ch] \ containers/*.[ch] \ dsl/*.[ch] \ input/*.[ch] \ lib/*.[ch] \ mapping/*.[ch] \ output/*.[ch] \ parsing/mlr*.[ly] \ parsing/mlr*wrapper*.[ch] \ stream/*.[ch] \ unit_test/*.[ch] \ | sort -n echo wc -c \ cli/*.[ch] \ containers/*.[ch] \ dsl/*.[ch] \ input/*.[ch] \ lib/*.[ch] \ mapping/*.[ch] \ output/*.[ch] \ parsing/mlr*.[ly] \ parsing/mlr*wrapper*.[ch] \ stream/*.[ch] \ unit_test/*.[ch] \ | sort -n | tail -n 5 miller-5.6.2/c/tools/mxm000077500000000000000000000001431354153536500151310ustar00rootroot00000000000000#!/bin/bash # For realigning disposition matrices, e.g. in vim using !} liit "$@" | sed 's/^ }/}/' miller-5.6.2/c/tools/neaten-valgrind-output000077500000000000000000000004501354153536500207450ustar00rootroot00000000000000#!/bin/bash mlr --nidx --rs '\n\n' --fs '\001' put -q ' $1 =~ "^mlr " || $1 =~ "Command.*termcvt" || $1 =~ "Command.*lecat" || $1 =~ "Command.*hex" { @cmd = $1 } $1 =~ "by 0x" { @stack_trace = $1; @combined = @cmd."\n".@stack_trace; emit @combined } ' "$@" miller-5.6.2/c/tools/truncate000077500000000000000000000001311354153536500161520ustar00rootroot00000000000000#!/usr/bin/env ruby ARGV.each do |arg| File.write(arg, File.open(arg).read.strip) end miller-5.6.2/c/unit_test/000077500000000000000000000000001354153536500152625ustar00rootroot00000000000000miller-5.6.2/c/unit_test/Makefile.am000066400000000000000000000040471354153536500173230ustar00rootroot00000000000000 TESTS= $(check_PROGRAMS) check_PROGRAMS = test_mlrutil \ test_mlrregex \ test_argparse \ test_byte_readers \ test_line_readers \ test_peek_file_reader \ test_parse_trie \ test_lrec \ test_mlhmmv \ test_multiple_containers \ test_string_builder \ test_rval_evaluators \ test_join_bucket_keeper AM_CPPFLAGS= -I${srcdir}/.. AM_CFLAGS= -Wall -std=gnu99 all_ldadd= \ ../lib/libmlr.la \ ../containers/libcontainers.la \ ../parsing/libdsl.la \ ../cli/libcli.la \ ../input/libinput.la \ ../dsl/libdsl.la \ ../mapping/libmapping.la \ ../output/liboutput.la \ ../stream/libstream.la \ -lm # Unit-test mains test_mlrutil_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_mlrutil_LDADD= ${all_ldadd} test_mlrregex_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_mlrregex_LDADD= ${all_ldadd} test_argparse_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_argparse_LDADD= ${all_ldadd} test_byte_readers_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_byte_readers_LDADD= ${all_ldadd} test_line_readers_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_line_readers_LDADD= ${all_ldadd} test_peek_file_reader_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_peek_file_reader_LDADD= ${all_ldadd} test_parse_trie_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_parse_trie_LDADD= ${all_ldadd} test_lrec_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_lrec_LDADD= ${all_ldadd} test_mlhmmv_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_mlhmmv_LDADD= ${all_ldadd} test_multiple_containers_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_multiple_containers_LDADD= ${all_ldadd} test_string_builder_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_string_builder_LDADD= ${all_ldadd} test_rval_evaluators_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_rval_evaluators_LDADD= ${all_ldadd} test_join_bucket_keeper_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} test_join_bucket_keeper_LDADD= ${all_ldadd} miller-5.6.2/c/unit_test/Makefile.in000066400000000000000000002244541354153536500173420ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test_mlrutil$(EXEEXT) test_mlrregex$(EXEEXT) \ test_argparse$(EXEEXT) test_byte_readers$(EXEEXT) \ test_line_readers$(EXEEXT) test_peek_file_reader$(EXEEXT) \ test_parse_trie$(EXEEXT) test_lrec$(EXEEXT) \ test_mlhmmv$(EXEEXT) test_multiple_containers$(EXEEXT) \ test_string_builder$(EXEEXT) test_rval_evaluators$(EXEEXT) \ test_join_bucket_keeper$(EXEEXT) subdir = c/unit_test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_argparse_SOURCES = test_argparse.c test_argparse_OBJECTS = test_argparse-test_argparse.$(OBJEXT) am__DEPENDENCIES_1 = ../lib/libmlr.la ../containers/libcontainers.la \ ../parsing/libdsl.la ../cli/libcli.la ../input/libinput.la \ ../dsl/libdsl.la ../mapping/libmapping.la \ ../output/liboutput.la ../stream/libstream.la test_argparse_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = test_argparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_argparse_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ test_byte_readers_SOURCES = test_byte_readers.c test_byte_readers_OBJECTS = \ test_byte_readers-test_byte_readers.$(OBJEXT) test_byte_readers_DEPENDENCIES = $(am__DEPENDENCIES_1) test_byte_readers_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_byte_readers_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ test_join_bucket_keeper_SOURCES = test_join_bucket_keeper.c test_join_bucket_keeper_OBJECTS = \ test_join_bucket_keeper-test_join_bucket_keeper.$(OBJEXT) test_join_bucket_keeper_DEPENDENCIES = $(am__DEPENDENCIES_1) test_join_bucket_keeper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ test_line_readers_SOURCES = test_line_readers.c test_line_readers_OBJECTS = \ test_line_readers-test_line_readers.$(OBJEXT) test_line_readers_DEPENDENCIES = $(am__DEPENDENCIES_1) test_line_readers_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_line_readers_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ test_lrec_SOURCES = test_lrec.c test_lrec_OBJECTS = test_lrec-test_lrec.$(OBJEXT) test_lrec_DEPENDENCIES = $(am__DEPENDENCIES_1) test_lrec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_lrec_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ test_mlhmmv_SOURCES = test_mlhmmv.c test_mlhmmv_OBJECTS = test_mlhmmv-test_mlhmmv.$(OBJEXT) test_mlhmmv_DEPENDENCIES = $(am__DEPENDENCIES_1) test_mlhmmv_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_mlhmmv_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ test_mlrregex_SOURCES = test_mlrregex.c test_mlrregex_OBJECTS = test_mlrregex-test_mlrregex.$(OBJEXT) test_mlrregex_DEPENDENCIES = $(am__DEPENDENCIES_1) test_mlrregex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_mlrregex_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ test_mlrutil_SOURCES = test_mlrutil.c test_mlrutil_OBJECTS = test_mlrutil-test_mlrutil.$(OBJEXT) test_mlrutil_DEPENDENCIES = $(am__DEPENDENCIES_1) test_mlrutil_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_mlrutil_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ test_multiple_containers_SOURCES = test_multiple_containers.c test_multiple_containers_OBJECTS = \ test_multiple_containers-test_multiple_containers.$(OBJEXT) test_multiple_containers_DEPENDENCIES = $(am__DEPENDENCIES_1) test_multiple_containers_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_multiple_containers_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ test_parse_trie_SOURCES = test_parse_trie.c test_parse_trie_OBJECTS = test_parse_trie-test_parse_trie.$(OBJEXT) test_parse_trie_DEPENDENCIES = $(am__DEPENDENCIES_1) test_parse_trie_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_parse_trie_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ test_peek_file_reader_SOURCES = test_peek_file_reader.c test_peek_file_reader_OBJECTS = \ test_peek_file_reader-test_peek_file_reader.$(OBJEXT) test_peek_file_reader_DEPENDENCIES = $(am__DEPENDENCIES_1) test_peek_file_reader_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_peek_file_reader_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ test_rval_evaluators_SOURCES = test_rval_evaluators.c test_rval_evaluators_OBJECTS = \ test_rval_evaluators-test_rval_evaluators.$(OBJEXT) test_rval_evaluators_DEPENDENCIES = $(am__DEPENDENCIES_1) test_rval_evaluators_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_rval_evaluators_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ test_string_builder_SOURCES = test_string_builder.c test_string_builder_OBJECTS = \ test_string_builder-test_string_builder.$(OBJEXT) test_string_builder_DEPENDENCIES = $(am__DEPENDENCIES_1) test_string_builder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_string_builder_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = test_argparse.c test_byte_readers.c \ test_join_bucket_keeper.c test_line_readers.c test_lrec.c \ test_mlhmmv.c test_mlrregex.c test_mlrutil.c \ test_multiple_containers.c test_parse_trie.c \ test_peek_file_reader.c test_rval_evaluators.c \ test_string_builder.c DIST_SOURCES = test_argparse.c test_byte_readers.c \ test_join_bucket_keeper.c test_line_readers.c test_lrec.c \ test_mlhmmv.c test_mlrregex.c test_mlrutil.c \ test_multiple_containers.c test_parse_trie.c \ test_peek_file_reader.c test_rval_evaluators.c \ test_string_builder.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/autotools/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/autotools/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/autotools/depcomp \ $(top_srcdir)/autotools/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = $(check_PROGRAMS) AM_CPPFLAGS = -I${srcdir}/.. AM_CFLAGS = -Wall -std=gnu99 all_ldadd = \ ../lib/libmlr.la \ ../containers/libcontainers.la \ ../parsing/libdsl.la \ ../cli/libcli.la \ ../input/libinput.la \ ../dsl/libdsl.la \ ../mapping/libmapping.la \ ../output/liboutput.la \ ../stream/libstream.la \ -lm # Unit-test mains test_mlrutil_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_mlrutil_LDADD = ${all_ldadd} test_mlrregex_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_mlrregex_LDADD = ${all_ldadd} test_argparse_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_argparse_LDADD = ${all_ldadd} test_byte_readers_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_byte_readers_LDADD = ${all_ldadd} test_line_readers_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_line_readers_LDADD = ${all_ldadd} test_peek_file_reader_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_peek_file_reader_LDADD = ${all_ldadd} test_parse_trie_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_parse_trie_LDADD = ${all_ldadd} test_lrec_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_lrec_LDADD = ${all_ldadd} test_mlhmmv_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_mlhmmv_LDADD = ${all_ldadd} test_multiple_containers_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_multiple_containers_LDADD = ${all_ldadd} test_string_builder_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_string_builder_LDADD = ${all_ldadd} test_rval_evaluators_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_rval_evaluators_LDADD = ${all_ldadd} test_join_bucket_keeper_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} test_join_bucket_keeper_LDADD = ${all_ldadd} all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu c/unit_test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu c/unit_test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test_argparse$(EXEEXT): $(test_argparse_OBJECTS) $(test_argparse_DEPENDENCIES) $(EXTRA_test_argparse_DEPENDENCIES) @rm -f test_argparse$(EXEEXT) $(AM_V_CCLD)$(test_argparse_LINK) $(test_argparse_OBJECTS) $(test_argparse_LDADD) $(LIBS) test_byte_readers$(EXEEXT): $(test_byte_readers_OBJECTS) $(test_byte_readers_DEPENDENCIES) $(EXTRA_test_byte_readers_DEPENDENCIES) @rm -f test_byte_readers$(EXEEXT) $(AM_V_CCLD)$(test_byte_readers_LINK) $(test_byte_readers_OBJECTS) $(test_byte_readers_LDADD) $(LIBS) test_join_bucket_keeper$(EXEEXT): $(test_join_bucket_keeper_OBJECTS) $(test_join_bucket_keeper_DEPENDENCIES) $(EXTRA_test_join_bucket_keeper_DEPENDENCIES) @rm -f test_join_bucket_keeper$(EXEEXT) $(AM_V_CCLD)$(test_join_bucket_keeper_LINK) $(test_join_bucket_keeper_OBJECTS) $(test_join_bucket_keeper_LDADD) $(LIBS) test_line_readers$(EXEEXT): $(test_line_readers_OBJECTS) $(test_line_readers_DEPENDENCIES) $(EXTRA_test_line_readers_DEPENDENCIES) @rm -f test_line_readers$(EXEEXT) $(AM_V_CCLD)$(test_line_readers_LINK) $(test_line_readers_OBJECTS) $(test_line_readers_LDADD) $(LIBS) test_lrec$(EXEEXT): $(test_lrec_OBJECTS) $(test_lrec_DEPENDENCIES) $(EXTRA_test_lrec_DEPENDENCIES) @rm -f test_lrec$(EXEEXT) $(AM_V_CCLD)$(test_lrec_LINK) $(test_lrec_OBJECTS) $(test_lrec_LDADD) $(LIBS) test_mlhmmv$(EXEEXT): $(test_mlhmmv_OBJECTS) $(test_mlhmmv_DEPENDENCIES) $(EXTRA_test_mlhmmv_DEPENDENCIES) @rm -f test_mlhmmv$(EXEEXT) $(AM_V_CCLD)$(test_mlhmmv_LINK) $(test_mlhmmv_OBJECTS) $(test_mlhmmv_LDADD) $(LIBS) test_mlrregex$(EXEEXT): $(test_mlrregex_OBJECTS) $(test_mlrregex_DEPENDENCIES) $(EXTRA_test_mlrregex_DEPENDENCIES) @rm -f test_mlrregex$(EXEEXT) $(AM_V_CCLD)$(test_mlrregex_LINK) $(test_mlrregex_OBJECTS) $(test_mlrregex_LDADD) $(LIBS) test_mlrutil$(EXEEXT): $(test_mlrutil_OBJECTS) $(test_mlrutil_DEPENDENCIES) $(EXTRA_test_mlrutil_DEPENDENCIES) @rm -f test_mlrutil$(EXEEXT) $(AM_V_CCLD)$(test_mlrutil_LINK) $(test_mlrutil_OBJECTS) $(test_mlrutil_LDADD) $(LIBS) test_multiple_containers$(EXEEXT): $(test_multiple_containers_OBJECTS) $(test_multiple_containers_DEPENDENCIES) $(EXTRA_test_multiple_containers_DEPENDENCIES) @rm -f test_multiple_containers$(EXEEXT) $(AM_V_CCLD)$(test_multiple_containers_LINK) $(test_multiple_containers_OBJECTS) $(test_multiple_containers_LDADD) $(LIBS) test_parse_trie$(EXEEXT): $(test_parse_trie_OBJECTS) $(test_parse_trie_DEPENDENCIES) $(EXTRA_test_parse_trie_DEPENDENCIES) @rm -f test_parse_trie$(EXEEXT) $(AM_V_CCLD)$(test_parse_trie_LINK) $(test_parse_trie_OBJECTS) $(test_parse_trie_LDADD) $(LIBS) test_peek_file_reader$(EXEEXT): $(test_peek_file_reader_OBJECTS) $(test_peek_file_reader_DEPENDENCIES) $(EXTRA_test_peek_file_reader_DEPENDENCIES) @rm -f test_peek_file_reader$(EXEEXT) $(AM_V_CCLD)$(test_peek_file_reader_LINK) $(test_peek_file_reader_OBJECTS) $(test_peek_file_reader_LDADD) $(LIBS) test_rval_evaluators$(EXEEXT): $(test_rval_evaluators_OBJECTS) $(test_rval_evaluators_DEPENDENCIES) $(EXTRA_test_rval_evaluators_DEPENDENCIES) @rm -f test_rval_evaluators$(EXEEXT) $(AM_V_CCLD)$(test_rval_evaluators_LINK) $(test_rval_evaluators_OBJECTS) $(test_rval_evaluators_LDADD) $(LIBS) test_string_builder$(EXEEXT): $(test_string_builder_OBJECTS) $(test_string_builder_DEPENDENCIES) $(EXTRA_test_string_builder_DEPENDENCIES) @rm -f test_string_builder$(EXEEXT) $(AM_V_CCLD)$(test_string_builder_LINK) $(test_string_builder_OBJECTS) $(test_string_builder_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_argparse-test_argparse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_byte_readers-test_byte_readers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_line_readers-test_line_readers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lrec-test_lrec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mlhmmv-test_mlhmmv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mlrregex-test_mlrregex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mlrutil-test_mlrutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_multiple_containers-test_multiple_containers.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_parse_trie-test_parse_trie.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_string_builder-test_string_builder.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< test_argparse-test_argparse.o: test_argparse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_argparse_CFLAGS) $(CFLAGS) -MT test_argparse-test_argparse.o -MD -MP -MF $(DEPDIR)/test_argparse-test_argparse.Tpo -c -o test_argparse-test_argparse.o `test -f 'test_argparse.c' || echo '$(srcdir)/'`test_argparse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_argparse-test_argparse.Tpo $(DEPDIR)/test_argparse-test_argparse.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_argparse.c' object='test_argparse-test_argparse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_argparse_CFLAGS) $(CFLAGS) -c -o test_argparse-test_argparse.o `test -f 'test_argparse.c' || echo '$(srcdir)/'`test_argparse.c test_argparse-test_argparse.obj: test_argparse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_argparse_CFLAGS) $(CFLAGS) -MT test_argparse-test_argparse.obj -MD -MP -MF $(DEPDIR)/test_argparse-test_argparse.Tpo -c -o test_argparse-test_argparse.obj `if test -f 'test_argparse.c'; then $(CYGPATH_W) 'test_argparse.c'; else $(CYGPATH_W) '$(srcdir)/test_argparse.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_argparse-test_argparse.Tpo $(DEPDIR)/test_argparse-test_argparse.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_argparse.c' object='test_argparse-test_argparse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_argparse_CFLAGS) $(CFLAGS) -c -o test_argparse-test_argparse.obj `if test -f 'test_argparse.c'; then $(CYGPATH_W) 'test_argparse.c'; else $(CYGPATH_W) '$(srcdir)/test_argparse.c'; fi` test_byte_readers-test_byte_readers.o: test_byte_readers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_byte_readers_CFLAGS) $(CFLAGS) -MT test_byte_readers-test_byte_readers.o -MD -MP -MF $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo -c -o test_byte_readers-test_byte_readers.o `test -f 'test_byte_readers.c' || echo '$(srcdir)/'`test_byte_readers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo $(DEPDIR)/test_byte_readers-test_byte_readers.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_byte_readers.c' object='test_byte_readers-test_byte_readers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_byte_readers_CFLAGS) $(CFLAGS) -c -o test_byte_readers-test_byte_readers.o `test -f 'test_byte_readers.c' || echo '$(srcdir)/'`test_byte_readers.c test_byte_readers-test_byte_readers.obj: test_byte_readers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_byte_readers_CFLAGS) $(CFLAGS) -MT test_byte_readers-test_byte_readers.obj -MD -MP -MF $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo -c -o test_byte_readers-test_byte_readers.obj `if test -f 'test_byte_readers.c'; then $(CYGPATH_W) 'test_byte_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_byte_readers.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo $(DEPDIR)/test_byte_readers-test_byte_readers.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_byte_readers.c' object='test_byte_readers-test_byte_readers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_byte_readers_CFLAGS) $(CFLAGS) -c -o test_byte_readers-test_byte_readers.obj `if test -f 'test_byte_readers.c'; then $(CYGPATH_W) 'test_byte_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_byte_readers.c'; fi` test_join_bucket_keeper-test_join_bucket_keeper.o: test_join_bucket_keeper.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) -MT test_join_bucket_keeper-test_join_bucket_keeper.o -MD -MP -MF $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo -c -o test_join_bucket_keeper-test_join_bucket_keeper.o `test -f 'test_join_bucket_keeper.c' || echo '$(srcdir)/'`test_join_bucket_keeper.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_join_bucket_keeper.c' object='test_join_bucket_keeper-test_join_bucket_keeper.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) -c -o test_join_bucket_keeper-test_join_bucket_keeper.o `test -f 'test_join_bucket_keeper.c' || echo '$(srcdir)/'`test_join_bucket_keeper.c test_join_bucket_keeper-test_join_bucket_keeper.obj: test_join_bucket_keeper.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) -MT test_join_bucket_keeper-test_join_bucket_keeper.obj -MD -MP -MF $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo -c -o test_join_bucket_keeper-test_join_bucket_keeper.obj `if test -f 'test_join_bucket_keeper.c'; then $(CYGPATH_W) 'test_join_bucket_keeper.c'; else $(CYGPATH_W) '$(srcdir)/test_join_bucket_keeper.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_join_bucket_keeper.c' object='test_join_bucket_keeper-test_join_bucket_keeper.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) -c -o test_join_bucket_keeper-test_join_bucket_keeper.obj `if test -f 'test_join_bucket_keeper.c'; then $(CYGPATH_W) 'test_join_bucket_keeper.c'; else $(CYGPATH_W) '$(srcdir)/test_join_bucket_keeper.c'; fi` test_line_readers-test_line_readers.o: test_line_readers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_line_readers_CFLAGS) $(CFLAGS) -MT test_line_readers-test_line_readers.o -MD -MP -MF $(DEPDIR)/test_line_readers-test_line_readers.Tpo -c -o test_line_readers-test_line_readers.o `test -f 'test_line_readers.c' || echo '$(srcdir)/'`test_line_readers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_line_readers-test_line_readers.Tpo $(DEPDIR)/test_line_readers-test_line_readers.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_line_readers.c' object='test_line_readers-test_line_readers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_line_readers_CFLAGS) $(CFLAGS) -c -o test_line_readers-test_line_readers.o `test -f 'test_line_readers.c' || echo '$(srcdir)/'`test_line_readers.c test_line_readers-test_line_readers.obj: test_line_readers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_line_readers_CFLAGS) $(CFLAGS) -MT test_line_readers-test_line_readers.obj -MD -MP -MF $(DEPDIR)/test_line_readers-test_line_readers.Tpo -c -o test_line_readers-test_line_readers.obj `if test -f 'test_line_readers.c'; then $(CYGPATH_W) 'test_line_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_line_readers.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_line_readers-test_line_readers.Tpo $(DEPDIR)/test_line_readers-test_line_readers.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_line_readers.c' object='test_line_readers-test_line_readers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_line_readers_CFLAGS) $(CFLAGS) -c -o test_line_readers-test_line_readers.obj `if test -f 'test_line_readers.c'; then $(CYGPATH_W) 'test_line_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_line_readers.c'; fi` test_lrec-test_lrec.o: test_lrec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lrec_CFLAGS) $(CFLAGS) -MT test_lrec-test_lrec.o -MD -MP -MF $(DEPDIR)/test_lrec-test_lrec.Tpo -c -o test_lrec-test_lrec.o `test -f 'test_lrec.c' || echo '$(srcdir)/'`test_lrec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lrec-test_lrec.Tpo $(DEPDIR)/test_lrec-test_lrec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_lrec.c' object='test_lrec-test_lrec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lrec_CFLAGS) $(CFLAGS) -c -o test_lrec-test_lrec.o `test -f 'test_lrec.c' || echo '$(srcdir)/'`test_lrec.c test_lrec-test_lrec.obj: test_lrec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lrec_CFLAGS) $(CFLAGS) -MT test_lrec-test_lrec.obj -MD -MP -MF $(DEPDIR)/test_lrec-test_lrec.Tpo -c -o test_lrec-test_lrec.obj `if test -f 'test_lrec.c'; then $(CYGPATH_W) 'test_lrec.c'; else $(CYGPATH_W) '$(srcdir)/test_lrec.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lrec-test_lrec.Tpo $(DEPDIR)/test_lrec-test_lrec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_lrec.c' object='test_lrec-test_lrec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lrec_CFLAGS) $(CFLAGS) -c -o test_lrec-test_lrec.obj `if test -f 'test_lrec.c'; then $(CYGPATH_W) 'test_lrec.c'; else $(CYGPATH_W) '$(srcdir)/test_lrec.c'; fi` test_mlhmmv-test_mlhmmv.o: test_mlhmmv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlhmmv_CFLAGS) $(CFLAGS) -MT test_mlhmmv-test_mlhmmv.o -MD -MP -MF $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo -c -o test_mlhmmv-test_mlhmmv.o `test -f 'test_mlhmmv.c' || echo '$(srcdir)/'`test_mlhmmv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo $(DEPDIR)/test_mlhmmv-test_mlhmmv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlhmmv.c' object='test_mlhmmv-test_mlhmmv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlhmmv_CFLAGS) $(CFLAGS) -c -o test_mlhmmv-test_mlhmmv.o `test -f 'test_mlhmmv.c' || echo '$(srcdir)/'`test_mlhmmv.c test_mlhmmv-test_mlhmmv.obj: test_mlhmmv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlhmmv_CFLAGS) $(CFLAGS) -MT test_mlhmmv-test_mlhmmv.obj -MD -MP -MF $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo -c -o test_mlhmmv-test_mlhmmv.obj `if test -f 'test_mlhmmv.c'; then $(CYGPATH_W) 'test_mlhmmv.c'; else $(CYGPATH_W) '$(srcdir)/test_mlhmmv.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo $(DEPDIR)/test_mlhmmv-test_mlhmmv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlhmmv.c' object='test_mlhmmv-test_mlhmmv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlhmmv_CFLAGS) $(CFLAGS) -c -o test_mlhmmv-test_mlhmmv.obj `if test -f 'test_mlhmmv.c'; then $(CYGPATH_W) 'test_mlhmmv.c'; else $(CYGPATH_W) '$(srcdir)/test_mlhmmv.c'; fi` test_mlrregex-test_mlrregex.o: test_mlrregex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrregex_CFLAGS) $(CFLAGS) -MT test_mlrregex-test_mlrregex.o -MD -MP -MF $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo -c -o test_mlrregex-test_mlrregex.o `test -f 'test_mlrregex.c' || echo '$(srcdir)/'`test_mlrregex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo $(DEPDIR)/test_mlrregex-test_mlrregex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrregex.c' object='test_mlrregex-test_mlrregex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrregex_CFLAGS) $(CFLAGS) -c -o test_mlrregex-test_mlrregex.o `test -f 'test_mlrregex.c' || echo '$(srcdir)/'`test_mlrregex.c test_mlrregex-test_mlrregex.obj: test_mlrregex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrregex_CFLAGS) $(CFLAGS) -MT test_mlrregex-test_mlrregex.obj -MD -MP -MF $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo -c -o test_mlrregex-test_mlrregex.obj `if test -f 'test_mlrregex.c'; then $(CYGPATH_W) 'test_mlrregex.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrregex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo $(DEPDIR)/test_mlrregex-test_mlrregex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrregex.c' object='test_mlrregex-test_mlrregex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrregex_CFLAGS) $(CFLAGS) -c -o test_mlrregex-test_mlrregex.obj `if test -f 'test_mlrregex.c'; then $(CYGPATH_W) 'test_mlrregex.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrregex.c'; fi` test_mlrutil-test_mlrutil.o: test_mlrutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrutil_CFLAGS) $(CFLAGS) -MT test_mlrutil-test_mlrutil.o -MD -MP -MF $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo -c -o test_mlrutil-test_mlrutil.o `test -f 'test_mlrutil.c' || echo '$(srcdir)/'`test_mlrutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo $(DEPDIR)/test_mlrutil-test_mlrutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrutil.c' object='test_mlrutil-test_mlrutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrutil_CFLAGS) $(CFLAGS) -c -o test_mlrutil-test_mlrutil.o `test -f 'test_mlrutil.c' || echo '$(srcdir)/'`test_mlrutil.c test_mlrutil-test_mlrutil.obj: test_mlrutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrutil_CFLAGS) $(CFLAGS) -MT test_mlrutil-test_mlrutil.obj -MD -MP -MF $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo -c -o test_mlrutil-test_mlrutil.obj `if test -f 'test_mlrutil.c'; then $(CYGPATH_W) 'test_mlrutil.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo $(DEPDIR)/test_mlrutil-test_mlrutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrutil.c' object='test_mlrutil-test_mlrutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrutil_CFLAGS) $(CFLAGS) -c -o test_mlrutil-test_mlrutil.obj `if test -f 'test_mlrutil.c'; then $(CYGPATH_W) 'test_mlrutil.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrutil.c'; fi` test_multiple_containers-test_multiple_containers.o: test_multiple_containers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_multiple_containers_CFLAGS) $(CFLAGS) -MT test_multiple_containers-test_multiple_containers.o -MD -MP -MF $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo -c -o test_multiple_containers-test_multiple_containers.o `test -f 'test_multiple_containers.c' || echo '$(srcdir)/'`test_multiple_containers.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo $(DEPDIR)/test_multiple_containers-test_multiple_containers.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_multiple_containers.c' object='test_multiple_containers-test_multiple_containers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_multiple_containers_CFLAGS) $(CFLAGS) -c -o test_multiple_containers-test_multiple_containers.o `test -f 'test_multiple_containers.c' || echo '$(srcdir)/'`test_multiple_containers.c test_multiple_containers-test_multiple_containers.obj: test_multiple_containers.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_multiple_containers_CFLAGS) $(CFLAGS) -MT test_multiple_containers-test_multiple_containers.obj -MD -MP -MF $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo -c -o test_multiple_containers-test_multiple_containers.obj `if test -f 'test_multiple_containers.c'; then $(CYGPATH_W) 'test_multiple_containers.c'; else $(CYGPATH_W) '$(srcdir)/test_multiple_containers.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo $(DEPDIR)/test_multiple_containers-test_multiple_containers.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_multiple_containers.c' object='test_multiple_containers-test_multiple_containers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_multiple_containers_CFLAGS) $(CFLAGS) -c -o test_multiple_containers-test_multiple_containers.obj `if test -f 'test_multiple_containers.c'; then $(CYGPATH_W) 'test_multiple_containers.c'; else $(CYGPATH_W) '$(srcdir)/test_multiple_containers.c'; fi` test_parse_trie-test_parse_trie.o: test_parse_trie.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_parse_trie_CFLAGS) $(CFLAGS) -MT test_parse_trie-test_parse_trie.o -MD -MP -MF $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo -c -o test_parse_trie-test_parse_trie.o `test -f 'test_parse_trie.c' || echo '$(srcdir)/'`test_parse_trie.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo $(DEPDIR)/test_parse_trie-test_parse_trie.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_parse_trie.c' object='test_parse_trie-test_parse_trie.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_parse_trie_CFLAGS) $(CFLAGS) -c -o test_parse_trie-test_parse_trie.o `test -f 'test_parse_trie.c' || echo '$(srcdir)/'`test_parse_trie.c test_parse_trie-test_parse_trie.obj: test_parse_trie.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_parse_trie_CFLAGS) $(CFLAGS) -MT test_parse_trie-test_parse_trie.obj -MD -MP -MF $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo -c -o test_parse_trie-test_parse_trie.obj `if test -f 'test_parse_trie.c'; then $(CYGPATH_W) 'test_parse_trie.c'; else $(CYGPATH_W) '$(srcdir)/test_parse_trie.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo $(DEPDIR)/test_parse_trie-test_parse_trie.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_parse_trie.c' object='test_parse_trie-test_parse_trie.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_parse_trie_CFLAGS) $(CFLAGS) -c -o test_parse_trie-test_parse_trie.obj `if test -f 'test_parse_trie.c'; then $(CYGPATH_W) 'test_parse_trie.c'; else $(CYGPATH_W) '$(srcdir)/test_parse_trie.c'; fi` test_peek_file_reader-test_peek_file_reader.o: test_peek_file_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_peek_file_reader_CFLAGS) $(CFLAGS) -MT test_peek_file_reader-test_peek_file_reader.o -MD -MP -MF $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo -c -o test_peek_file_reader-test_peek_file_reader.o `test -f 'test_peek_file_reader.c' || echo '$(srcdir)/'`test_peek_file_reader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_peek_file_reader.c' object='test_peek_file_reader-test_peek_file_reader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_peek_file_reader_CFLAGS) $(CFLAGS) -c -o test_peek_file_reader-test_peek_file_reader.o `test -f 'test_peek_file_reader.c' || echo '$(srcdir)/'`test_peek_file_reader.c test_peek_file_reader-test_peek_file_reader.obj: test_peek_file_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_peek_file_reader_CFLAGS) $(CFLAGS) -MT test_peek_file_reader-test_peek_file_reader.obj -MD -MP -MF $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo -c -o test_peek_file_reader-test_peek_file_reader.obj `if test -f 'test_peek_file_reader.c'; then $(CYGPATH_W) 'test_peek_file_reader.c'; else $(CYGPATH_W) '$(srcdir)/test_peek_file_reader.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_peek_file_reader.c' object='test_peek_file_reader-test_peek_file_reader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_peek_file_reader_CFLAGS) $(CFLAGS) -c -o test_peek_file_reader-test_peek_file_reader.obj `if test -f 'test_peek_file_reader.c'; then $(CYGPATH_W) 'test_peek_file_reader.c'; else $(CYGPATH_W) '$(srcdir)/test_peek_file_reader.c'; fi` test_rval_evaluators-test_rval_evaluators.o: test_rval_evaluators.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rval_evaluators_CFLAGS) $(CFLAGS) -MT test_rval_evaluators-test_rval_evaluators.o -MD -MP -MF $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo -c -o test_rval_evaluators-test_rval_evaluators.o `test -f 'test_rval_evaluators.c' || echo '$(srcdir)/'`test_rval_evaluators.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_rval_evaluators.c' object='test_rval_evaluators-test_rval_evaluators.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rval_evaluators_CFLAGS) $(CFLAGS) -c -o test_rval_evaluators-test_rval_evaluators.o `test -f 'test_rval_evaluators.c' || echo '$(srcdir)/'`test_rval_evaluators.c test_rval_evaluators-test_rval_evaluators.obj: test_rval_evaluators.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rval_evaluators_CFLAGS) $(CFLAGS) -MT test_rval_evaluators-test_rval_evaluators.obj -MD -MP -MF $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo -c -o test_rval_evaluators-test_rval_evaluators.obj `if test -f 'test_rval_evaluators.c'; then $(CYGPATH_W) 'test_rval_evaluators.c'; else $(CYGPATH_W) '$(srcdir)/test_rval_evaluators.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_rval_evaluators.c' object='test_rval_evaluators-test_rval_evaluators.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rval_evaluators_CFLAGS) $(CFLAGS) -c -o test_rval_evaluators-test_rval_evaluators.obj `if test -f 'test_rval_evaluators.c'; then $(CYGPATH_W) 'test_rval_evaluators.c'; else $(CYGPATH_W) '$(srcdir)/test_rval_evaluators.c'; fi` test_string_builder-test_string_builder.o: test_string_builder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_string_builder_CFLAGS) $(CFLAGS) -MT test_string_builder-test_string_builder.o -MD -MP -MF $(DEPDIR)/test_string_builder-test_string_builder.Tpo -c -o test_string_builder-test_string_builder.o `test -f 'test_string_builder.c' || echo '$(srcdir)/'`test_string_builder.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_string_builder-test_string_builder.Tpo $(DEPDIR)/test_string_builder-test_string_builder.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_string_builder.c' object='test_string_builder-test_string_builder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_string_builder_CFLAGS) $(CFLAGS) -c -o test_string_builder-test_string_builder.o `test -f 'test_string_builder.c' || echo '$(srcdir)/'`test_string_builder.c test_string_builder-test_string_builder.obj: test_string_builder.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_string_builder_CFLAGS) $(CFLAGS) -MT test_string_builder-test_string_builder.obj -MD -MP -MF $(DEPDIR)/test_string_builder-test_string_builder.Tpo -c -o test_string_builder-test_string_builder.obj `if test -f 'test_string_builder.c'; then $(CYGPATH_W) 'test_string_builder.c'; else $(CYGPATH_W) '$(srcdir)/test_string_builder.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_string_builder-test_string_builder.Tpo $(DEPDIR)/test_string_builder-test_string_builder.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_string_builder.c' object='test_string_builder-test_string_builder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_string_builder_CFLAGS) $(CFLAGS) -c -o test_string_builder-test_string_builder.obj `if test -f 'test_string_builder.c'; then $(CYGPATH_W) 'test_string_builder.c'; else $(CYGPATH_W) '$(srcdir)/test_string_builder.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test_mlrutil.log: test_mlrutil$(EXEEXT) @p='test_mlrutil$(EXEEXT)'; \ b='test_mlrutil'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_mlrregex.log: test_mlrregex$(EXEEXT) @p='test_mlrregex$(EXEEXT)'; \ b='test_mlrregex'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_argparse.log: test_argparse$(EXEEXT) @p='test_argparse$(EXEEXT)'; \ b='test_argparse'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_byte_readers.log: test_byte_readers$(EXEEXT) @p='test_byte_readers$(EXEEXT)'; \ b='test_byte_readers'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_line_readers.log: test_line_readers$(EXEEXT) @p='test_line_readers$(EXEEXT)'; \ b='test_line_readers'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_peek_file_reader.log: test_peek_file_reader$(EXEEXT) @p='test_peek_file_reader$(EXEEXT)'; \ b='test_peek_file_reader'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_parse_trie.log: test_parse_trie$(EXEEXT) @p='test_parse_trie$(EXEEXT)'; \ b='test_parse_trie'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_lrec.log: test_lrec$(EXEEXT) @p='test_lrec$(EXEEXT)'; \ b='test_lrec'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_mlhmmv.log: test_mlhmmv$(EXEEXT) @p='test_mlhmmv$(EXEEXT)'; \ b='test_mlhmmv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_multiple_containers.log: test_multiple_containers$(EXEEXT) @p='test_multiple_containers$(EXEEXT)'; \ b='test_multiple_containers'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_string_builder.log: test_string_builder$(EXEEXT) @p='test_string_builder$(EXEEXT)'; \ b='test_string_builder'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_rval_evaluators.log: test_rval_evaluators$(EXEEXT) @p='test_rval_evaluators$(EXEEXT)'; \ b='test_rval_evaluators'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_join_bucket_keeper.log: test_join_bucket_keeper$(EXEEXT) @p='test_join_bucket_keeper$(EXEEXT)'; \ b='test_join_bucket_keeper'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/c/unit_test/test_argparse.c000066400000000000000000000100461354153536500202720ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "cli/argparse.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- // Assumes null-termination of input array static int compute_argc(char** argv) { int argc = 0; while (*argv) { argv++; argc++; } return argc; } static char * test1() { int bflag1 = -4; int bflag2 = -5; int intv1 = -6; int intv2 = -7; int intv3 = -8; double fltv = -9.5; char* string = NULL; slls_t* plist = NULL; string_array_t* parray = NULL; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-t", &bflag1); ap_define_false_flag(pstate, "-f", &bflag2); ap_define_int_value_flag(pstate, "-100", 100, &intv1); ap_define_int_value_flag(pstate, "-200", 200, &intv2); ap_define_int_flag(pstate, "-i", &intv3); ap_define_float_flag(pstate, "-d", &fltv); ap_define_string_flag(pstate, "-s", &string); ap_define_string_list_flag(pstate, "-S", &plist); ap_define_string_array_flag(pstate, "-A", &parray); char* argv[] = { "test-verb", NULL }; int argc = compute_argc(argv); char* verb = argv[0]; int argi = 1; mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); mu_assert_lf(bflag1 == -4); mu_assert_lf(bflag2 == -5); mu_assert_lf(intv1 == -6); mu_assert_lf(intv2 == -7); mu_assert_lf(intv3 == -8); mu_assert_lf(fltv == -9.5); mu_assert_lf(string == NULL); mu_assert_lf(plist == NULL); mu_assert_lf(parray == NULL); mu_assert_lf(argi == 1); ap_free(pstate); return 0; } static char * test2() { int bflag1 = -4; int bflag2 = -5; int intv1 = -6; int intv2 = -7; int intv3 = -8; double fltv = -9.5; char* string = NULL; slls_t* plist = NULL; string_array_t* parray = NULL; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-t", &bflag1); ap_define_false_flag(pstate, "-f", &bflag2); ap_define_int_value_flag(pstate, "-100", 100, &intv1); ap_define_int_value_flag(pstate, "-200", 200, &intv2); ap_define_int_flag(pstate, "-i", &intv3); ap_define_float_flag(pstate, "-d", &fltv); ap_define_string_flag(pstate, "-s", &string); ap_define_string_list_flag(pstate, "-S", &plist); ap_define_string_array_flag(pstate, "-A", &parray); char* argv[] = { "test-verb", "-t", "-f", "-100", "-200", "-i", "555", "-d", "4.25", "-s", "hello", "-S", mlr_strdup_or_die("a,b,c,d,e"), "-A", mlr_strdup_or_die("x,y,z"), "do", "re", "mi", NULL }; int argc = compute_argc(argv); char* verb = argv[0]; int argi = 1; mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); mu_assert_lf(bflag1 == TRUE); mu_assert_lf(bflag2 == FALSE); mu_assert_lf(intv1 == 100); mu_assert_lf(intv2 == 200); mu_assert_lf(intv3 == 555); mu_assert_lf(fltv == 4.25); mu_assert_lf(string != NULL); mu_assert_lf(streq(string, "hello")); mu_assert_lf(plist != NULL); mu_assert_lf(slls_equals(plist, slls_from_line(mlr_strdup_or_die("a,b,c,d,e"), ',', FALSE))); mu_assert_lf(parray != NULL); mu_assert_lf(parray->length == 3); mu_assert_lf(streq(parray->strings[0], "x")); mu_assert_lf(streq(parray->strings[1], "y")); mu_assert_lf(streq(parray->strings[2], "z")); mu_assert_lf(argi == 15); ap_free(pstate); return 0; } // ================================================================ static char * all_tests() { mu_run_test(test1); mu_run_test(test2); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_ARGPARSE ENTER\n"); char *result = all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_ARGPARSE: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_byte_readers.c000066400000000000000000000156371354153536500211510ustar00rootroot00000000000000#include #include #include #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/minunit.h" #include "lib/mlr_test_util.h" #include "input/byte_readers.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char* test_string_byte_reader() { byte_reader_t* pbr = string_byte_reader_alloc(); int ok = pbr->popen_func(pbr, NULL, ""); mu_assert_lf(ok == TRUE); // char defaults to unsigned on some platforms -- but, byte_reader_t API is // in terms of ints. mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); pbr->pclose_func(pbr, NULL); ok = pbr->popen_func(pbr, NULL, "a"); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'a'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); pbr->pclose_func(pbr, NULL); ok = pbr->popen_func(pbr, NULL, "abc"); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'a'); mu_assert_lf(pbr->pread_func(pbr) == 'b'); mu_assert_lf(pbr->pread_func(pbr) == 'c'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); pbr->pclose_func(pbr, NULL); return NULL; } // ---------------------------------------------------------------- static char* test_stdio_byte_reader_1() { byte_reader_t* pbr = stdio_byte_reader_alloc(); char* contents = ""; char* path = write_temp_file_or_die(contents); int ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); return NULL; } // ---------------------------------------------------------------- static char* test_stdio_byte_reader_2() { byte_reader_t* pbr = stdio_byte_reader_alloc(); char* contents = "abcdefg"; char* path = write_temp_file_or_die(contents); int ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'a'); mu_assert_lf(pbr->pread_func(pbr) == 'b'); mu_assert_lf(pbr->pread_func(pbr) == 'c'); mu_assert_lf(pbr->pread_func(pbr) == 'd'); mu_assert_lf(pbr->pread_func(pbr) == 'e'); mu_assert_lf(pbr->pread_func(pbr) == 'f'); mu_assert_lf(pbr->pread_func(pbr) == 'g'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); return NULL; } // ---------------------------------------------------------------- static char* test_stdio_byte_reader_reuse() { byte_reader_t* pbr = stdio_byte_reader_alloc(); char* contents = "abc"; char* path = write_temp_file_or_die(contents); int ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'a'); mu_assert_lf(pbr->pread_func(pbr) == 'b'); mu_assert_lf(pbr->pread_func(pbr) == 'c'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); contents = "defg"; path = write_temp_file_or_die(contents); ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'd'); mu_assert_lf(pbr->pread_func(pbr) == 'e'); mu_assert_lf(pbr->pread_func(pbr) == 'f'); mu_assert_lf(pbr->pread_func(pbr) == 'g'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); return NULL; } // ---------------------------------------------------------------- static char* test_mmap_byte_reader_1() { #if MLR_ARCH_MMAP_ENABLED byte_reader_t* pbr = mmap_byte_reader_alloc(); char* contents = ""; char* path = write_temp_file_or_die(contents); int ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); return NULL; #endif } // ---------------------------------------------------------------- static char* test_mmap_byte_reader_2() { #if MLR_ARCH_MMAP_ENABLED byte_reader_t* pbr = mmap_byte_reader_alloc(); char* contents = "abcdefg"; char* path = write_temp_file_or_die(contents); int ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'a'); mu_assert_lf(pbr->pread_func(pbr) == 'b'); mu_assert_lf(pbr->pread_func(pbr) == 'c'); mu_assert_lf(pbr->pread_func(pbr) == 'd'); mu_assert_lf(pbr->pread_func(pbr) == 'e'); mu_assert_lf(pbr->pread_func(pbr) == 'f'); mu_assert_lf(pbr->pread_func(pbr) == 'g'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); return NULL; #endif } // ---------------------------------------------------------------- static char* test_mmap_byte_reader_reuse() { #if MLR_ARCH_MMAP_ENABLED byte_reader_t* pbr = mmap_byte_reader_alloc(); char* contents = "abc"; char* path = write_temp_file_or_die(contents); int ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'a'); mu_assert_lf(pbr->pread_func(pbr) == 'b'); mu_assert_lf(pbr->pread_func(pbr) == 'c'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); contents = "defg"; path = write_temp_file_or_die(contents); ok = pbr->popen_func(pbr, NULL, path); mu_assert_lf(ok == TRUE); mu_assert_lf(pbr->pread_func(pbr) == 'd'); mu_assert_lf(pbr->pread_func(pbr) == 'e'); mu_assert_lf(pbr->pread_func(pbr) == 'f'); mu_assert_lf(pbr->pread_func(pbr) == 'g'); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); mu_assert_lf(pbr->pread_func(pbr) == EOF); unlink_file_or_die(path); return NULL; #endif } // ================================================================ static char * run_all_tests() { mu_run_test(test_string_byte_reader); mu_run_test(test_stdio_byte_reader_1); mu_run_test(test_stdio_byte_reader_2); mu_run_test(test_stdio_byte_reader_reuse); mu_run_test(test_mmap_byte_reader_1); mu_run_test(test_mmap_byte_reader_2); mu_run_test(test_mmap_byte_reader_reuse); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_BYTE_READERS ENTER\n"); char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_BYTE_READERS: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_join_bucket_keeper.c000066400000000000000000000566721354153536500223340ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "input/lrec_readers.h" #include "containers/join_bucket_keeper.h" #include "containers/mixutil.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; static int tjbk_verbose = FALSE; // ---------------------------------------------------------------- static sllv_t* make_records_empty() { sllv_t* precords = sllv_alloc(); return precords; } // ---------------------------------------------------------------- static sllv_t* make_records_113335() { sllv_t* precords = sllv_alloc(); sllv_append(precords, lrec_literal_2("l","1", "b","10")); sllv_append(precords, lrec_literal_2("l","1", "b","11")); sllv_append(precords, lrec_literal_2("l","3", "b","12")); sllv_append(precords, lrec_literal_2("l","3", "b","13")); sllv_append(precords, lrec_literal_2("l","3", "b","14")); sllv_append(precords, lrec_literal_2("l","5", "b","15")); return precords; } // ---------------------------------------------------------------- static sllv_t* make_records_het() { sllv_t* precords = sllv_alloc(); sllv_append(precords, lrec_literal_2("x","100", "b","10")); sllv_append(precords, lrec_literal_2("l","1", "b","11")); sllv_append(precords, lrec_literal_2("l","1", "b","12")); sllv_append(precords, lrec_literal_2("x","200", "b","13")); sllv_append(precords, lrec_literal_2("l","3", "b","14")); sllv_append(precords, lrec_literal_2("l","3", "b","15")); sllv_append(precords, lrec_literal_2("x","300", "b","16")); sllv_append(precords, lrec_literal_2("l","5", "b","17")); sllv_append(precords, lrec_literal_2("l","5", "b","18")); return precords; } // ---------------------------------------------------------------- static void set_up( sllv_t* precords, slls_t** ppleft_field_names, lrec_reader_t** ppreader) { slls_t* pleft_field_names = slls_alloc(); slls_append_no_free(pleft_field_names, "l"); lrec_reader_t* preader = lrec_reader_in_memory_alloc(precords); printf("left records:\n"); lrec_print_list_with_prefix(precords, " "); printf("\n"); *ppleft_field_names = pleft_field_names; *ppreader = preader; } static void emit(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) { if (tjbk_verbose) { printf("BEFORE EMIT\n"); join_bucket_keeper_print(pkeeper); printf("\n"); } join_bucket_keeper_emit(pkeeper, pright_field_values, pprecords_paired, pprecords_left_unpaired); if (tjbk_verbose) { printf("AFTER EMIT\n"); join_bucket_keeper_print(pkeeper); printf("\n"); } } static int list_is_null(sllv_t* plist, char* desc, char* rval) { if (plist == NULL) { printf("%-8s is null with rval=\"%s\"; ok\n", desc, rval); return TRUE; } else { printf("%-8s should be null with rval=\"%s\" and is not (length=%llu):\n", desc, rval, plist->length); lrec_print_list_with_prefix(plist, " "); return FALSE; } } static int list_has_length(sllv_t* plist, unsigned long long length, char* desc, char* rval) { if (plist == NULL) { printf("%-8s is null with rval=\"%s\" and should not be\n", desc, rval); return FALSE; } if (plist->length == length) { printf("%-8s length=%llu with rval=\"%s\"; ok:\n", desc, length, rval); lrec_print_list_with_prefix(plist, " "); return TRUE; } else { printf("%-8s length=%llu with rval=\"%s\" but should be %llu:\n", desc, plist->length, rval, length); lrec_print_list_with_prefix(plist, " "); return FALSE; } } // ---------------------------------------------------------------- static char* test_left_empty_right_empty() { printf("----------------------------------------------------------------\n"); printf("test_left_empty_right_empty enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_empty(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); printf("\n"); printf("test_left_empty_right_empty exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_left_empty() { printf("----------------------------------------------------------------\n"); printf("test_left_empty enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_empty(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("0"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); printf("\n"); printf("test_left_empty exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_right_empty() { printf("----------------------------------------------------------------\n"); printf("test_right_empty enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_113335(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 6, "unpaired", "(eof)")); printf("\n"); printf("test_right_empty exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_unpaired_before_left_start() { printf("----------------------------------------------------------------\n"); printf("test_unpaired_before_left_start enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_113335(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("0"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 6, "unpaired", "(eof)")); printf("\n"); printf("test_unpaired_before_left_start exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_unpaired_after_left_end() { printf("----------------------------------------------------------------\n"); printf("test_unpaired_after_left_end enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_113335(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("6"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_has_length(precords_left_unpaired, 6, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); printf("\n"); printf("test_unpaired_after_left_end exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_middle_pairings() { printf("----------------------------------------------------------------\n"); printf("test_middle_pairings enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_113335(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("0"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("1"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("1"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 4, "unpaired", "(eof)")); printf("\n"); printf("test_middle_pairings exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_middle() { printf("----------------------------------------------------------------\n"); printf("test_middle enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_113335(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("2"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("2"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("3"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 3, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 1, "unpaired", "(eof)")); printf("\n"); printf("test_middle exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_walk_through_all() { printf("----------------------------------------------------------------\n"); printf("test_walk_through_all enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_113335(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("0"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("0"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("1"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("1"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("2"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("2"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("3"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 3, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("3"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 3, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("4"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("4"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("5"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 1, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("5"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 1, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("6"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); pright_field_values = slls_single_no_free("6"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", pright_field_values->phead->value)); printf("\n"); printf("test_walk_through_all exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_het_unpaired_before_left_start() { printf("----------------------------------------------------------------\n"); printf("test_het_unpaired_before_left_start enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_het(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("0"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 7, "unpaired", "(eof)")); printf("\n"); printf("test_het_unpaired_before_left_start exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_het_unpaired_after_left_end() { printf("----------------------------------------------------------------\n"); printf("test_het_unpaired_after_left_end enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_het(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("6"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); mu_assert_lf(list_has_length(precords_left_unpaired, 9, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); printf("\n"); printf("test_het_unpaired_after_left_end exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_het_initial_pairing() { printf("----------------------------------------------------------------\n"); printf("test_het_initial_pairing enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_het(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("1"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 5, "unpaired", "(eof)")); printf("\n"); printf("test_het_initial_pairing exit\n"); printf("\n"); return 0; } // ---------------------------------------------------------------- static char* test_het_middle_pairing() { printf("----------------------------------------------------------------\n"); printf("test_het_middle_pairing enter\n"); slls_t* pleft_field_names; lrec_reader_t* preader; set_up(make_records_het(), &pleft_field_names, &preader); join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); sllv_t* precords_paired; sllv_t* precords_left_unpaired; slls_t* pright_field_values = slls_single_no_free("3"); emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); mu_assert_lf(list_has_length(precords_left_unpaired, 5, "unpaired", pright_field_values->phead->value)); printf("\n"); emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", "(eof)")); printf("\n"); printf("test_het_middle_pairing exit\n"); printf("\n"); return 0; } // ================================================================ static char * run_all_tests() { mu_run_test(test_left_empty_right_empty); mu_run_test(test_left_empty); mu_run_test(test_right_empty); mu_run_test(test_unpaired_before_left_start); mu_run_test(test_unpaired_after_left_end); mu_run_test(test_middle_pairings); mu_run_test(test_middle); mu_run_test(test_walk_through_all); mu_run_test(test_het_unpaired_before_left_start); mu_run_test(test_het_unpaired_after_left_end); mu_run_test(test_het_initial_pairing); mu_run_test(test_het_middle_pairing); printf("----------------------------------------------------------------\n"); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_JOIN_BUCKET_KEEPER ENTER\n"); for (int argi = 1; argi < argc; argi++) { if (streq(argv[argi], "-v")) tjbk_verbose = TRUE; } char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_JOIN_BUCKET_KEEPER: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_line_readers.c000066400000000000000000000674151354153536500211360ustar00rootroot00000000000000#include #include #include #include "lib/mlr_arch.h" #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/minunit.h" #include "lib/mlr_test_util.h" #include "input/line_readers.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static FILE* fopen_or_die(char* filename) { FILE* fp = fopen(filename, "r"); if (fp == NULL) { perror("fopen"); fprintf(stderr, "Couldn't open \"%s\" for read; exiting.\n", filename); exit(1); } return fp; } static void my_print_string(char* string) { printf("\n"); printf("Input data: ["); for (char* p = string; *p; p++) { if (*p == '\r') printf("\\r"); else if (*p == '\n') printf("\\n"); else printf("%c", *p); } printf("]\n"); } // ---------------------------------------------------------------- static char* test_mlr_alloc_read_line_single_delimiter() { char delimiter = '\n'; char* path = NULL; FILE* fp = NULL; char* contents = NULL; char* line = NULL; size_t linelen = 0; int do_auto_line_term = FALSE; context_t* pctx = NULL; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = ""; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); // Read past EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return NULL; } // ---------------------------------------------------------------- static char* test_mlr_alloc_read_line_single_delimiter_with_autodetect() { char delimiter = '\n'; char* path = NULL; FILE* fp = NULL; char* contents = NULL; char* line = NULL; size_t linelen = 0; int do_auto_line_term = TRUE; context_t ctx; context_t* pctx = &ctx; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = ""; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read past EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\r\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\r\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc\r\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\r\nabc\n"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\r\nabc"; path = write_temp_file_or_die(contents); context_init_from_first_file_name(pctx, "fake-file-name"); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); // Read line 2 line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); mu_assert_lf(pctx->auto_line_term_detected == TRUE); mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); // Read to EOF line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return NULL; } // ---------------------------------------------------------------- static char* test_mlr_alloc_read_line_multiple_delimiter() { char* delimiter = "xy\n"; int delimiter_length = strlen(delimiter); char* path = NULL; FILE* fp = NULL; char* contents = NULL; char* line = NULL; size_t linelen = 0; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = ""; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); // Read past EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "axy\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "a")); mu_assert_lf(linelen == strlen("a")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abcxy\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abcxy\nxy\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read line 2 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\nabcxy\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read line 2 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\nabc"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read line 2 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\nabcxy\n"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read line 2 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abcxy\nxy\ndef"; path = write_temp_file_or_die(contents); fp = fopen_or_die(path); linelen = 4; my_print_string(contents); // Read line 1 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "abc")); mu_assert_lf(linelen == strlen("abc")); // Read line 2 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "")); mu_assert_lf(linelen == strlen("")); // Read line 3 line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line != NULL); mu_assert_lf(streq(line, "def")); mu_assert_lf(linelen == strlen("def")); // Read to EOF line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); printf("linelen=%d line=\"%s\"\n", (int)linelen, line); mu_assert_lf(line == NULL); fclose(fp); unlink_file_or_die(path); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return NULL; } // ================================================================ static char * run_all_tests() { printf("----------------------------------------------------------------\n"); printf("test_mlr_alloc_read_line_single_delimiter\n"); mu_run_test(test_mlr_alloc_read_line_single_delimiter); printf("\n"); printf("----------------------------------------------------------------\n"); printf("test_mlr_alloc_read_line_single_delimiter_with_autodetect\n"); mu_run_test(test_mlr_alloc_read_line_single_delimiter_with_autodetect); printf("\n"); printf("----------------------------------------------------------------\n"); printf("test_mlr_alloc_read_line_multiple_delimiter\n"); mu_run_test(test_mlr_alloc_read_line_multiple_delimiter); printf("\n"); printf("----------------------------------------------------------------\n"); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_LINE_READERS ENTER\n"); char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_LINE_READERS: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_lrec.c000066400000000000000000000332441354153536500174200ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/lrec.h" #include "containers/sllv.h" #include "input/lrec_readers.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char* test_lrec_unbacked_api() { lrec_t* prec = lrec_unbacked_alloc(); mu_assert_lf(prec->field_count == 0); lrec_put(prec, "x", "3", NO_FREE); mu_assert_lf(prec->field_count == 1); mu_assert_lf(streq(lrec_get(prec, "x"), "3")); lrec_put(prec, "y", "4", NO_FREE); mu_assert_lf(prec->field_count == 2); mu_assert_lf(streq(lrec_get(prec, "x"), "3")); mu_assert_lf(streq(lrec_get(prec, "y"), "4")); lrec_put(prec, "x", "5", NO_FREE); mu_assert_lf(prec->field_count == 2); mu_assert_lf(streq(lrec_get(prec, "x"), "5")); mu_assert_lf(streq(lrec_get(prec, "y"), "4")); lrec_remove(prec, "x"); mu_assert_lf(prec->field_count == 1); mu_assert_lf(lrec_get(prec, "x") == NULL); // Non-replacing-rename case //lrec_dump_titled("Before rename", prec); lrec_rename(prec, "y", "z", FALSE); //lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 1); mu_assert_lf(lrec_get(prec, "x") == NULL); mu_assert_lf(lrec_get(prec, "y") == NULL); mu_assert_lf(streq(lrec_get(prec, "z"), "4")); lrec_free(prec); // Replacing-rename case prec = lrec_unbacked_alloc(); lrec_put(prec, "x", "3", NO_FREE); lrec_put(prec, "y", "4", NO_FREE); lrec_put(prec, "z", "5", NO_FREE); mu_assert_lf(prec->field_count == 3); //lrec_dump_titled("Before rename", prec); lrec_rename(prec, "y", "z", FALSE); //lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 2); mu_assert_lf(streq(lrec_get(prec, "x"), "3")); mu_assert_lf(lrec_get(prec, "y") == NULL); mu_assert_lf(streq(lrec_get(prec, "z"), "4")); lrec_free(prec); return NULL; } // ---------------------------------------------------------------- static char* test_lrec_dkvp_api() { char* line = mlr_strdup_or_die("w=2,x=3,y=4,z=5"); lrec_t* prec = lrec_parse_stdio_dkvp_single_sep(line, ',', '=', FALSE); mu_assert_lf(prec->field_count == 4); mu_assert_lf(streq(lrec_get(prec, "w"), "2")); mu_assert_lf(streq(lrec_get(prec, "x"), "3")); mu_assert_lf(streq(lrec_get(prec, "y"), "4")); mu_assert_lf(streq(lrec_get(prec, "z"), "5")); lrec_remove(prec, "w"); mu_assert_lf(prec->field_count == 3); mu_assert_lf(lrec_get(prec, "w") == NULL); // Non-replacing-rename case //lrec_dump_titled("Before rename", prec); lrec_rename(prec, "x", "u", FALSE); //lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 3); mu_assert_lf(lrec_get(prec, "x") == NULL); mu_assert_lf(streq(lrec_get(prec, "u"), "3")); // Replacing-rename case //lrec_dump_titled("Before rename", prec); lrec_rename(prec, "y", "z", FALSE); //lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 2); mu_assert_lf(streq(lrec_get(prec, "u"), "3")); mu_assert_lf(lrec_get(prec, "y") == NULL); mu_assert_lf(streq(lrec_get(prec, "z"), "4")); lrec_free(prec); return NULL; } // ---------------------------------------------------------------- static char* test_lrec_nidx_api() { char* line = mlr_strdup_or_die("a,b,c,d"); lrec_t* prec = lrec_parse_stdio_nidx_single_sep(line, ',', FALSE); mu_assert_lf(prec->field_count == 4); mu_assert_lf(streq(lrec_get(prec, "1"), "a")); mu_assert_lf(streq(lrec_get(prec, "2"), "b")); mu_assert_lf(streq(lrec_get(prec, "3"), "c")); mu_assert_lf(streq(lrec_get(prec, "4"), "d")); lrec_remove(prec, "1"); mu_assert_lf(prec->field_count == 3); mu_assert_lf(lrec_get(prec, "1") == NULL); // Non-replacing-rename case lrec_dump_titled("Before rename", prec); lrec_rename(prec, "2", "u", FALSE); lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 3); mu_assert_lf(lrec_get(prec, "2") == NULL); mu_assert_lf(streq(lrec_get(prec, "u"), "b")); // Replacing-rename case lrec_dump_titled("Before rename", prec); lrec_rename(prec, "3", "4", FALSE); lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 2); mu_assert_lf(streq(lrec_get(prec, "u"), "b")); mu_assert_lf(lrec_get(prec, "3") == NULL); mu_assert_lf(streq(lrec_get(prec, "4"), "c")); lrec_free(prec); return NULL; } // ---------------------------------------------------------------- static char* test_lrec_csv_api() { char* hdr_line = mlr_strdup_or_die("w,x,y,z"); slls_t* hdr_fields = split_csvlite_header_line_single_ifs(hdr_line, ',', FALSE); header_keeper_t* pheader_keeper = header_keeper_alloc(hdr_line, hdr_fields); char* data_line_1 = mlr_strdup_or_die("2,3,4,5"); lrec_t* prec_1 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, data_line_1, ',', FALSE, FALSE); char* data_line_2 = mlr_strdup_or_die("6,7,8,9"); lrec_t* prec_2 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, data_line_2, ',', FALSE, FALSE); mu_assert_lf(prec_1->field_count == 4); mu_assert_lf(prec_2->field_count == 4); mu_assert_lf(streq(lrec_get(prec_1, "w"), "2")); mu_assert_lf(streq(lrec_get(prec_1, "x"), "3")); mu_assert_lf(streq(lrec_get(prec_1, "y"), "4")); mu_assert_lf(streq(lrec_get(prec_1, "z"), "5")); mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); mu_assert_lf(streq(lrec_get(prec_2, "y"), "8")); mu_assert_lf(streq(lrec_get(prec_2, "z"), "9")); lrec_remove(prec_1, "w"); mu_assert_lf(prec_1->field_count == 3); mu_assert_lf(prec_2->field_count == 4); mu_assert_lf(lrec_get(prec_1, "w") == NULL); mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); // Non-replacing-rename case //lrec_dump_titled("Before rename", prec_1); lrec_rename(prec_1, "x", "u", FALSE); //lrec_dump_titled("After rename", prec_1); mu_assert_lf(prec_1->field_count == 3); mu_assert_lf(lrec_get(prec_1, "x") == NULL); mu_assert_lf(streq(lrec_get(prec_1, "u"), "3")); // Replacing-rename case //lrec_dump_titled("Before rename", prec_2); lrec_rename(prec_2, "y", "z", FALSE); //lrec_dump_titled("After rename", prec_2); mu_assert_lf(prec_2->field_count == 3); mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); mu_assert_lf(lrec_get(prec_2, "y") == NULL); mu_assert_lf(streq(lrec_get(prec_2, "z"), "8")); lrec_free(prec_1); lrec_free(prec_2); return NULL; } // ---------------------------------------------------------------- static char* test_lrec_csv_api_disjoint_allocs() { char* hdr_line = mlr_strdup_or_die("w,x,y,z"); slls_t* hdr_fields = split_csvlite_header_line_single_ifs(hdr_line, ',', FALSE); header_keeper_t* pheader_keeper = header_keeper_alloc(hdr_line, hdr_fields); char* data_line_1 = mlr_strdup_or_die("2,3,4,5"); lrec_t* prec_1 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, data_line_1, ',', FALSE, FALSE); mu_assert_lf(prec_1->field_count == 4); mu_assert_lf(streq(lrec_get(prec_1, "w"), "2")); mu_assert_lf(streq(lrec_get(prec_1, "x"), "3")); mu_assert_lf(streq(lrec_get(prec_1, "y"), "4")); mu_assert_lf(streq(lrec_get(prec_1, "z"), "5")); lrec_remove(prec_1, "w"); mu_assert_lf(prec_1->field_count == 3); mu_assert_lf(lrec_get(prec_1, "w") == NULL); lrec_rename(prec_1, "x", "u", FALSE); mu_assert_lf(prec_1->field_count == 3); mu_assert_lf(lrec_get(prec_1, "x") == NULL); mu_assert_lf(streq(lrec_get(prec_1, "u"), "3")); lrec_free(prec_1); char* data_line_2 = mlr_strdup_or_die("6,7,8,9"); lrec_t* prec_2 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, data_line_2, ',', FALSE, FALSE); mu_assert_lf(prec_2->field_count == 4); mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); mu_assert_lf(streq(lrec_get(prec_2, "y"), "8")); mu_assert_lf(streq(lrec_get(prec_2, "z"), "9")); mu_assert_lf(prec_2->field_count == 4); mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); lrec_rename(prec_2, "y", "z", FALSE); mu_assert_lf(prec_2->field_count == 3); mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); mu_assert_lf(lrec_get(prec_2, "y") == NULL); mu_assert_lf(streq(lrec_get(prec_2, "z"), "8")); lrec_free(prec_2); return NULL; } // ---------------------------------------------------------------- static char* test_lrec_xtab_api() { char* line_1 = mlr_strdup_or_die("w 2"); char* line_2 = mlr_strdup_or_die("x 3"); char* line_3 = mlr_strdup_or_die("y 4"); char* line_4 = mlr_strdup_or_die("z 5"); slls_t* pxtab_lines = slls_alloc(); slls_append_with_free(pxtab_lines, line_1); slls_append_with_free(pxtab_lines, line_2); slls_append_with_free(pxtab_lines, line_3); slls_append_with_free(pxtab_lines, line_4); lrec_t* prec = lrec_parse_stdio_xtab_single_ips(pxtab_lines, ' ', TRUE); mu_assert_lf(prec->field_count == 4); mu_assert_lf(streq(lrec_get(prec, "w"), "2")); mu_assert_lf(streq(lrec_get(prec, "x"), "3")); mu_assert_lf(streq(lrec_get(prec, "y"), "4")); mu_assert_lf(streq(lrec_get(prec, "z"), "5")); lrec_remove(prec, "w"); mu_assert_lf(prec->field_count == 3); mu_assert_lf(lrec_get(prec, "w") == NULL); // Non-replacing-rename case //lrec_dump_titled("Before rename", prec); lrec_rename(prec, "x", "u", FALSE); //lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 3); mu_assert_lf(lrec_get(prec, "x") == NULL); mu_assert_lf(streq(lrec_get(prec, "u"), "3")); // Replacing-rename case //lrec_dump_titled("Before rename", prec); lrec_rename(prec, "y", "z", FALSE); //lrec_dump_titled("After rename", prec); mu_assert_lf(prec->field_count == 2); mu_assert_lf(streq(lrec_get(prec, "u"), "3")); mu_assert_lf(lrec_get(prec, "y") == NULL); mu_assert_lf(streq(lrec_get(prec, "z"), "4")); lrec_free(prec); return NULL; } // ---------------------------------------------------------------- static char* test_lrec_put_after() { printf("TEST_LREC_PUT_AFTER ENTER\n"); lrec_t* prec = lrec_literal_1("a", "1"); lrece_t* pe = NULL; printf("BEFORE: "); lrec_print(prec); mu_assert_lf(prec->field_count == 1); char* value = lrec_get_ext(prec, "nosuch", &pe); mu_assert_lf(value == NULL); mu_assert_lf(pe == NULL); value = lrec_get_ext(prec, "a", &pe); mu_assert_lf(value != NULL); mu_assert_lf(pe != NULL); mu_assert_lf(streq(value, "1")); lrec_put_after(prec, pe, "a", "2", NO_FREE); printf("AFTER : "); lrec_print(prec); mu_assert_lf(prec->field_count == 1); value = lrec_get_ext(prec, "a", &pe); mu_assert_lf(value != NULL); mu_assert_lf(pe != NULL); mu_assert_lf(streq(value, "2")); lrec_free(prec); prec = lrec_literal_1("a", "1"); printf("BEFORE: "); lrec_print(prec); value = lrec_get_ext(prec, "a", &pe); mu_assert_lf(pe != NULL); mu_assert_lf(streq(value, "1")); lrec_put_after(prec, pe, "b", "3", NO_FREE); printf("AFTER : "); lrec_print(prec); mu_assert_lf(prec->field_count == 2); value = lrec_get(prec, "a"); mu_assert_lf(value != NULL); mu_assert_lf(streq(value, "1")); value = lrec_get(prec, "b"); mu_assert_lf(value != NULL); mu_assert_lf(streq(value, "3")); mu_assert_lf(streq(prec->phead->key, "a")); mu_assert_lf(streq(prec->phead->pnext->key, "b")); mu_assert_lf(streq(prec->phead->value, "1")); mu_assert_lf(streq(prec->phead->pnext->value, "3")); mu_assert_lf(prec->phead->pnext->pnext == NULL); lrec_free(prec); prec = lrec_literal_2("a", "1", "b", "2"); printf("BEFORE: "); lrec_print(prec); mu_assert_lf(prec->field_count == 2); value = lrec_get_ext(prec, "a", &pe); mu_assert_lf(value != NULL); mu_assert_lf(pe != NULL); mu_assert_lf(streq(value, "1")); lrec_put_after(prec, pe, "z", "9", NO_FREE); printf("AFTER : "); lrec_print(prec); mu_assert_lf(prec->field_count == 3); mu_assert_lf(streq(prec->phead->key, "a")); mu_assert_lf(streq(prec->phead->pnext->key, "z")); mu_assert_lf(streq(prec->phead->pnext->pnext->key, "b")); mu_assert_lf(streq(prec->phead->value, "1")); mu_assert_lf(streq(prec->phead->pnext->value, "9")); mu_assert_lf(streq(prec->phead->pnext->pnext->value, "2")); mu_assert_lf(prec->phead->pnext->pnext->pnext == NULL); lrec_free(prec); prec = lrec_literal_2("a", "1", "b", "2"); printf("BEFORE: "); lrec_print(prec); mu_assert_lf(prec->field_count == 2); value = lrec_get_ext(prec, "b", &pe); mu_assert_lf(value != NULL); mu_assert_lf(pe != NULL); mu_assert_lf(streq(value, "2")); lrec_put_after(prec, pe, "z", "9", NO_FREE); printf("AFTER : "); lrec_print(prec); mu_assert_lf(prec->field_count == 3); mu_assert_lf(streq(prec->phead->key, "a")); mu_assert_lf(streq(prec->phead->pnext->key, "b")); mu_assert_lf(streq(prec->phead->pnext->pnext->key, "z")); mu_assert_lf(streq(prec->phead->value, "1")); mu_assert_lf(streq(prec->phead->pnext->value, "2")); mu_assert_lf(streq(prec->phead->pnext->pnext->value, "9")); mu_assert_lf(prec->phead->pnext->pnext->pnext == NULL); lrec_free(prec); printf("TEST_LREC_PUT_AFTER EXIT\n"); return NULL; } // ================================================================ static char * run_all_tests() { mu_run_test(test_lrec_unbacked_api); mu_run_test(test_lrec_dkvp_api); mu_run_test(test_lrec_nidx_api); mu_run_test(test_lrec_csv_api); mu_run_test(test_lrec_csv_api_disjoint_allocs); mu_run_test(test_lrec_xtab_api); mu_run_test(test_lrec_put_after); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_LREC ENTER\n"); char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_LREC: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_mlhmmv.c000066400000000000000000000343531354153536500177750ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/mlhmmv.h" #include "lib/mvfuncs.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; static mv_t* smv(char* strv) { mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); *pmv = mv_from_string(strv, NO_FREE); return pmv; } static mv_t* imv(long long intv) { mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); *pmv = mv_from_int(intv); return pmv; } // ---------------------------------------------------------------- static char* test_no_overlap() { mlhmmv_root_t* pmap = mlhmmv_root_alloc(); int error = 0; printf("================================================================\n"); printf("empty map:\n"); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); sllmv_t* pmvkeys1 = sllmv_single_with_free(imv(3)); mv_t value1 = mv_from_int(4LL); printf("\n"); printf("keys1: "); sllmv_print(pmvkeys1); printf("value1: %s\n", mv_alloc_format_val(&value1)); mlhmmv_root_put_terminal(pmap, pmvkeys1, &value1); printf("map:\n"); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys1, &error), &value1)); sllmv_t* pmvkeys2 = sllmv_double_with_free(smv("abcde"), imv(-6)); mv_t value2 = mv_from_int(7); printf("\n"); printf("keys2: "); sllmv_print(pmvkeys2); printf("value2: %s\n", mv_alloc_format_val(&value2)); mlhmmv_root_put_terminal(pmap, pmvkeys2, &value2); printf("map:\n"); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys2, &error), &value2)); sllmv_t* pmvkeys3 = sllmv_triple_with_free(imv(0), smv("fghij"), imv(0)); mv_t value3 = mv_from_int(0LL); printf("\n"); printf("keys3: "); sllmv_print(pmvkeys3); printf("value3: %s\n", mv_alloc_format_val(&value3)); mlhmmv_root_put_terminal(pmap, pmvkeys3, &value3); printf("map:\n"); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys3, &error), &value3)); sllmv_free(pmvkeys1); mlhmmv_root_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_overlap() { mlhmmv_root_t* pmap = mlhmmv_root_alloc(); int error = 0; printf("================================================================\n"); sllmv_t* pmvkeys = sllmv_single_with_free(imv(3)); mv_t* ptermval = imv(4); mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); ptermval = imv(5); mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_double_with_free(imv(3), smv("x")); ptermval = imv(6); mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); ptermval = imv(7); mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_triple_with_free(imv(3), imv(9), smv("y")); ptermval = smv("z"); mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_triple_with_free(imv(3), imv(9), smv("z")); ptermval = smv("y"); mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); mlhmmv_root_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_resize() { mlhmmv_root_t* pmap = mlhmmv_root_alloc(); int error; printf("================================================================\n"); for (int i = 0; i < 2*MLHMMV_INITIAL_ARRAY_LENGTH; i++) mlhmmv_root_put_terminal(pmap, sllmv_single_with_free(imv(i)), imv(-i)); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); printf("\n"); for (int i = 0; i < 2*MLHMMV_INITIAL_ARRAY_LENGTH; i++) mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("a"), imv(i)), imv(-i)); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); printf("\n"); for (int i = 0; i < 2*MLHMMV_INITIAL_ARRAY_LENGTH; i++) mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(imv(i*100), imv(i % 4), smv("b")), smv("term")); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); sllmv_t* pmvkeys = sllmv_single_with_free(imv(2)); mv_t* ptermval = imv(-2); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_double_with_free(smv("a"), imv(9)); ptermval = imv(-9); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_double_with_free(smv("a"), imv(31)); ptermval = imv(-31); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_triple_with_free(imv(0), imv(0), smv("b")); ptermval = smv("term"); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_triple_with_free(imv(100), imv(1), smv("b")); ptermval = smv("term"); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); pmvkeys = sllmv_triple_with_free(imv(1700), imv(1), smv("b")); ptermval = smv("term"); mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); mlhmmv_root_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_depth_errors() { mlhmmv_root_t* pmap = mlhmmv_root_alloc(); int error; printf("================================================================\n"); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(imv(1), imv(2), imv(3)), imv(4)); mu_assert_lf(NULL != mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(1), imv(2), imv(3)), &error)); mu_assert_lf(error == MLHMMV_ERROR_NONE); mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(0), imv(2), imv(3)), &error)); mu_assert_lf(error == MLHMMV_ERROR_NONE); mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(1), imv(0), imv(3)), &error)); mu_assert_lf(error == MLHMMV_ERROR_NONE); mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(1), imv(2), imv(0)), &error)); mu_assert_lf(error == MLHMMV_ERROR_NONE); mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_quadruple_with_free(imv(1), imv(2), imv(3), imv(4)), &error)); mu_assert_lf(error == MLHMMV_ERROR_KEYLIST_TOO_DEEP); mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_double_with_free(imv(1), imv(2)), &error)); mu_assert_lf(error == MLHMMV_ERROR_KEYLIST_TOO_SHALLOW); mlhmmv_root_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_mlhmmv_to_lrecs() { printf("================================================================\n"); mlhmmv_root_t* pmap = mlhmmv_root_alloc(); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("x")), imv(1)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("y")), imv(2)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("x")), imv(3)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("y")), imv(4)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("x")), imv(5)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("y")), imv(6)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("x")), imv(7)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("y")), imv(8)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("u"), smv("x")), imv(9)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("u"), smv("y")), imv(10)); mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("not"), smv("u"), smv("y")), imv(11)); mlhmmv_root_put_terminal(pmap, sllmv_single_with_free(smv("single")), imv(99)); mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("double"), smv("i")), imv(111)); mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("double"), smv("j")), imv(112)); mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("double"), smv("k")), imv(113)); printf("full map:\n"); mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); printf("\n"); sllv_t* poutrecs = NULL; printf("----------------------------------------------------------------\n"); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("single")), sllmv_alloc(), poutrecs, TRUE, ":"); printf("single-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("single")), sllmv_single_with_free(smv("first")), poutrecs, TRUE, ":"); printf("single-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); printf("----------------------------------------------------------------\n"); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("double")), sllmv_alloc(), poutrecs, TRUE, ":"); printf("double-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("double")), sllmv_single_with_free(smv("first")), poutrecs, TRUE, ":"); printf("double-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("double")), sllmv_double_with_free(smv("first"), smv("second")), poutrecs, TRUE, ":"); printf("double-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); printf("----------------------------------------------------------------\n"); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), sllmv_alloc(), poutrecs, TRUE, ":"); printf("triple-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), sllmv_single_with_free(smv("first")), poutrecs, TRUE, ":"); printf("triple-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), sllmv_double_with_free(smv("first"), smv("second")), poutrecs, TRUE, ":"); printf("triple-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); poutrecs = sllv_alloc(); mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), sllmv_triple_with_free(smv("first"), smv("second"), smv("third")), poutrecs, TRUE, ":"); printf("triple-level outrecs (%lld):\n", poutrecs->length); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_print(pe->pvvalue); for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) lrec_free(pe->pvvalue); printf("\n"); sllv_free(poutrecs); mlhmmv_root_free(pmap); return NULL; } // ================================================================ static char * run_all_tests() { mu_run_test(test_no_overlap); mu_run_test(test_overlap); mu_run_test(test_resize); mu_run_test(test_depth_errors); mu_run_test(test_mlhmmv_to_lrecs); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_MLHMMV ENTER\n"); char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_MLHMMV: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_mlrregex.c000066400000000000000000000220261354153536500203140ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/mlrregex.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char * test_save_regex_captures() { // Capture-groups \1 through \9 supported, along with entire-string match in \0 const size_t nmatchmax = 10; regmatch_t matches[nmatchmax]; string_array_t* pregex_captures = NULL; regex_t regex; char* input = "abcde"; char* sregex = "abcde"; regcomp_or_die(®ex, sregex, 0); regmatch_or_die(®ex, input, nmatchmax, matches); save_regex_captures(&pregex_captures, input, matches, nmatchmax); mu_assert_lf(pregex_captures != NULL); mu_assert_lf(pregex_captures->length == 1); mu_assert_lf(pregex_captures->strings[0] != NULL); mu_assert_lf(streq(pregex_captures->strings[0], "abcde")); regfree(®ex); input = "abcde"; sregex = "a(.*)e"; regcomp_or_die(®ex, sregex, 0); regmatch_or_die(®ex, input, nmatchmax, matches); save_regex_captures(&pregex_captures, input, matches, nmatchmax); mu_assert_lf(pregex_captures->length == 2); mu_assert_lf(pregex_captures->strings[0] != NULL); mu_assert_lf(streq(pregex_captures->strings[1], "bcd")); regfree(®ex); input = "abcde"; sregex = "a(b)(.)(d)e"; regcomp_or_die(®ex, sregex, 0); regmatch_or_die(®ex, input, nmatchmax, matches); save_regex_captures(&pregex_captures, input, matches, nmatchmax); mu_assert_lf(pregex_captures->length == 4); mu_assert_lf(pregex_captures->strings[0] != NULL); mu_assert_lf(streq(pregex_captures->strings[1], "b")); mu_assert_lf(streq(pregex_captures->strings[2], "c")); mu_assert_lf(streq(pregex_captures->strings[3], "d")); regfree(®ex); input = "abcdefghij"; sregex = "(a)(b)(c)(d)(e)(f)(g)(h)(i)"; regcomp_or_die(®ex, sregex, 0); regmatch_or_die(®ex, input, nmatchmax, matches); save_regex_captures(&pregex_captures, input, matches, nmatchmax); mu_assert_lf(pregex_captures->length == 10); mu_assert_lf(pregex_captures->strings[0] != NULL); mu_assert_lf(streq(pregex_captures->strings[1], "a")); mu_assert_lf(streq(pregex_captures->strings[2], "b")); mu_assert_lf(streq(pregex_captures->strings[3], "c")); mu_assert_lf(streq(pregex_captures->strings[4], "d")); mu_assert_lf(streq(pregex_captures->strings[5], "e")); mu_assert_lf(streq(pregex_captures->strings[6], "f")); mu_assert_lf(streq(pregex_captures->strings[7], "g")); mu_assert_lf(streq(pregex_captures->strings[8], "h")); mu_assert_lf(streq(pregex_captures->strings[9], "i")); regfree(®ex); string_array_free(pregex_captures); return 0; } // ---------------------------------------------------------------- static char * test_interpolate_regex_captures() { int was_allocated = FALSE; char* output = interpolate_regex_captures("hello", NULL, &was_allocated); mu_assert_lf(streq(output, "hello")); mu_assert_lf(was_allocated == FALSE); string_array_t* psa = string_array_alloc(0); output = interpolate_regex_captures("hello", psa, &was_allocated); mu_assert_lf(streq(output, "hello")); mu_assert_lf(was_allocated == FALSE); string_array_free(psa); psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); output = interpolate_regex_captures("hello", psa, &was_allocated); mu_assert_lf(streq(output, "hello")); mu_assert_lf(was_allocated == FALSE); string_array_free(psa); psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); output = interpolate_regex_captures("h\\3ello", psa, &was_allocated); printf("output=[%s]\n", output); mu_assert_lf(streq(output, "hcello")); mu_assert_lf(was_allocated == TRUE); string_array_free(psa); psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); output = interpolate_regex_captures("h\\1ello", psa, &was_allocated); printf("output=[%s]\n", output); mu_assert_lf(streq(output, "haello")); mu_assert_lf(was_allocated == TRUE); string_array_free(psa); psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); output = interpolate_regex_captures("h\\4ello", psa, &was_allocated); printf("output=[%s]\n", output); mu_assert_lf(streq(output, "hello")); mu_assert_lf(was_allocated == TRUE); string_array_free(psa); psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); output = interpolate_regex_captures("h\\0ello", psa, &was_allocated); printf("output=[%s]\n", output); mu_assert_lf(streq(output, "hXello")); mu_assert_lf(was_allocated == TRUE); string_array_free(psa); psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); output = interpolate_regex_captures("h\\3e\\1l\\2l\\4o", psa, &was_allocated); printf("output=[%s]\n", output); mu_assert_lf(streq(output, "hcealblo")); mu_assert_lf(was_allocated == TRUE); string_array_free(psa); return 0; } // ---------------------------------------------------------------- static char * test_regextract() { char* input = NULL; char* sregex = NULL; char* output = NULL; regex_t regex; int cflags = 0; input = "abcdef"; sregex = ".+"; regcomp_or_die(®ex, sregex, cflags); output = regextract(input, ®ex); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, input)); printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); free(output); input = "abcdef"; sregex = "[a-z]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract(input, ®ex); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, input)); printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); free(output); input = "abcdef"; sregex = "[0-9]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract(input, ®ex); mu_assert_lf(output == NULL); printf("regextract input=\"%s\" regex=\"%s\" output=NULL\n", input, sregex); free(output); input = "abc345"; sregex = "[0-9]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract(input, ®ex); printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, "345")); free(output); input = "789xyz"; sregex = "[0-9]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract(input, ®ex); printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, "789")); free(output); return 0; } // ---------------------------------------------------------------- static char * test_regextract_or_else() { char* input = NULL; char* sregex = NULL; char* default_value = "DEFAULT"; char* output = NULL; regex_t regex; int cflags = 0; input = "abcdef"; sregex = ".+"; regcomp_or_die(®ex, sregex, cflags); output = regextract_or_else(input, ®ex, default_value); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, input)); printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); free(output); input = "abcdef"; sregex = "[a-z]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract_or_else(input, ®ex, default_value); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, input)); printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); free(output); input = "abcdef"; sregex = "[0-9]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract_or_else(input, ®ex, default_value); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, default_value)); printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=NULL\n", input, sregex, default_value); free(output); input = "abc345"; sregex = "[0-9]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract_or_else(input, ®ex, default_value); printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, "345")); free(output); input = "789xyz"; sregex = "[0-9]+"; regcomp_or_die(®ex, sregex, cflags); output = regextract_or_else(input, ®ex, default_value); printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); mu_assert_lf(output != NULL); mu_assert_lf(streq(output, "789")); free(output); return 0; } // ================================================================ static char * all_tests() { mu_run_test(test_save_regex_captures); mu_run_test(test_interpolate_regex_captures); mu_run_test(test_regextract); mu_run_test(test_regextract_or_else); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_MLRREGEX ENTER\n"); char *result = all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_MLRREGEX: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_mlrutil.c000066400000000000000000000210111354153536500201500ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char * test_canonical_mod() { mu_assert("error: canonical_mod -7", mlr_canonical_mod(-7, 5) == 3); mu_assert("error: canonical_mod -6", mlr_canonical_mod(-6, 5) == 4); mu_assert("error: canonical_mod -5", mlr_canonical_mod(-5, 5) == 0); mu_assert("error: canonical_mod -4", mlr_canonical_mod(-4, 5) == 1); mu_assert("error: canonical_mod -3", mlr_canonical_mod(-3, 5) == 2); mu_assert("error: canonical_mod -2", mlr_canonical_mod(-2, 5) == 3); mu_assert("error: canonical_mod -1", mlr_canonical_mod(-1, 5) == 4); mu_assert("error: canonical_mod 0", mlr_canonical_mod(0, 5) == 0); mu_assert("error: canonical_mod 1", mlr_canonical_mod(1, 5) == 1); mu_assert("error: canonical_mod 2", mlr_canonical_mod(2, 5) == 2); mu_assert("error: canonical_mod 3", mlr_canonical_mod(3, 5) == 3); mu_assert("error: canonical_mod 4", mlr_canonical_mod(4, 5) == 4); mu_assert("error: canonical_mod 5", mlr_canonical_mod(5, 5) == 0); mu_assert("error: canonical_mod 6", mlr_canonical_mod(6, 5) == 1); mu_assert("error: canonical_mod 7", mlr_canonical_mod(7, 5) == 2); return 0; } // ---------------------------------------------------------------- static char * test_power_of_two_above() { mu_assert("error: power_of_two_above 0", power_of_two_above(0) == 1); mu_assert("error: power_of_two_above 1", power_of_two_above(1) == 2); mu_assert("error: power_of_two_above 2", power_of_two_above(2) == 4); mu_assert("error: power_of_two_above 3", power_of_two_above(3) == 4); mu_assert("error: power_of_two_above 4", power_of_two_above(4) == 8); mu_assert("error: power_of_two_above 5", power_of_two_above(5) == 8); mu_assert("error: power_of_two_above 6", power_of_two_above(6) == 8); mu_assert("error: power_of_two_above 7", power_of_two_above(7) == 8); mu_assert("error: power_of_two_above 8", power_of_two_above(8) == 16); mu_assert("error: power_of_two_above 9", power_of_two_above(9) == 16); mu_assert("error: power_of_two_above 1023", power_of_two_above(1023) == 1024); mu_assert("error: power_of_two_above 1024", power_of_two_above(1024) == 2048); mu_assert("error: power_of_two_above 1025", power_of_two_above(1025) == 2048); return 0; } // ---------------------------------------------------------------- static char * test_streq() { char* x; char* y; x = ""; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = ""; y = "1"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = ""; y = "12"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = ""; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "a"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "ab"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "1"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "1"; y = "1"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "1"; y = "12"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "12"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "12"; y = "1"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "12"; y = "12"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = ""; y = "a"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "a"; y = "a"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "ab"; y = "a"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = ""; y = "ab"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "a"; y = "ab"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); x = "ab"; y = "ab"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); return 0; } // ---------------------------------------------------------------- static char * test_streqn() { char* x; char* y; x = ""; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = ""; y = "1"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = ""; y = "12"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = ""; y = "123"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = ""; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "a"; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "ab"; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "abc"; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "a"; y = "a"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "a"; y = "aa"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "a"; y = "ab"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "a"; y = "abd"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "ab"; y = "a"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "ab"; y = "ab"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "ab"; y = "abd"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "abc"; y = "a"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "abc"; y = "ab"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "abc"; y = "abc"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); x = "abc"; y = "abd"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); return 0; } // ---------------------------------------------------------------- static char * test_strdup_quoted() { mu_assert_lf(streq(mlr_strdup_quoted_or_die(""), "\"\"")); mu_assert_lf(streq(mlr_strdup_quoted_or_die("x"), "\"x\"")); mu_assert_lf(streq(mlr_strdup_quoted_or_die("xy"), "\"xy\"")); mu_assert_lf(streq(mlr_strdup_quoted_or_die("xyz"), "\"xyz\"")); return 0; } // ---------------------------------------------------------------- static char * test_starts_or_ends_with() { mu_assert_lf(string_starts_with("abcde", "")); mu_assert_lf(string_starts_with("abcde", "a")); mu_assert_lf(string_starts_with("abcde", "abcd")); mu_assert_lf(string_starts_with("abcde", "abcde")); mu_assert_lf(!string_starts_with("abcde", "abcdef")); mu_assert_lf(string_ends_with("abcde", "", NULL)); mu_assert_lf(string_ends_with("abcde", "e", NULL)); mu_assert_lf(string_ends_with("abcde", "de", NULL)); mu_assert_lf(string_ends_with("abcde", "abcde", NULL)); mu_assert_lf(!string_ends_with("abcde", "0abcde", NULL)); int len = -1; mu_assert_lf(!string_ends_with("abcde", "0abcde", &len)); mu_assert_lf(len == 5); return 0; } // ---------------------------------------------------------------- static char * test_scanners() { mu_assert("error: mlr_alloc_string_from_double", streq(mlr_alloc_string_from_double(4.25, "%.4f"), "4.2500")); mu_assert("error: mlr_alloc_string_from_ull", streq(mlr_alloc_string_from_ull(12345LL), "12345")); mu_assert("error: mlr_alloc_string_from_int", streq(mlr_alloc_string_from_int(12345), "12345")); return 0; } // ---------------------------------------------------------------- static char * test_paste() { mu_assert("error: paste 2", streq(mlr_paste_2_strings("ab", "cd"), "abcd")); mu_assert("error: paste 3", streq(mlr_paste_3_strings("ab", "cd", "ef"), "abcdef")); mu_assert("error: paste 4", streq(mlr_paste_4_strings("ab", "cd", "ef", "gh"), "abcdefgh")); mu_assert("error: paste 5", streq(mlr_paste_5_strings("ab", "cd", "ef", "gh", "ij"), "abcdefghij")); return 0; } // ---------------------------------------------------------------- static char * test_unbackslash() { mu_assert_lf(streq(mlr_alloc_unbackslash(""), "")); mu_assert_lf(streq(mlr_alloc_unbackslash("hello"), "hello")); mu_assert_lf(streq(mlr_alloc_unbackslash("\\r\\n"), "\r\n")); mu_assert_lf(streq(mlr_alloc_unbackslash("\\t\\\\"), "\t\\")); mu_assert_lf(streq(mlr_alloc_unbackslash("[\\132]"), "[Z]")); mu_assert_lf(streq(mlr_alloc_unbackslash("[\\x59]"), "[Y]")); return 0; } // ================================================================ static char * all_tests() { mu_run_test(test_canonical_mod); mu_run_test(test_power_of_two_above); mu_run_test(test_streq); mu_run_test(test_streqn); mu_run_test(test_strdup_quoted); mu_run_test(test_starts_or_ends_with); mu_run_test(test_scanners); mu_run_test(test_paste); mu_run_test(test_unbackslash); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_MLRUTIL ENTER\n"); char *result = all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_MLRUTIL: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_multiple_containers.c000066400000000000000000001131271354153536500225520ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/slls.h" #include "containers/rslls.h" #include "containers/sllv.h" #include "lib/string_array.h" #include "containers/hss.h" #include "containers/lhmsi.h" #include "containers/lhmsll.h" #include "containers/lhmss.h" #include "containers/lhmsv.h" #include "containers/lhms2v.h" #include "containers/lhmslv.h" #include "containers/lhmsmv.h" #include "containers/percentile_keeper.h" #include "containers/top_keeper.h" #include "containers/dheap.h" #include "lib/mvfuncs.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; static mv_t* smv(char* strv) { mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); *pmv = mv_from_string(strv, NO_FREE); return pmv; } static mv_t* imv(long long intv) { mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); *pmv = mv_from_int(intv); return pmv; } // ---------------------------------------------------------------- static char* test_slls() { slls_t* plist = slls_from_line(mlr_strdup_or_die(""), ',', FALSE); mu_assert_lf(plist->length == 0); plist = slls_from_line(mlr_strdup_or_die("a"), ',', FALSE); mu_assert_lf(plist->length == 1); plist = slls_from_line(mlr_strdup_or_die("c,d,a,e,b"), ',', FALSE); mu_assert_lf(plist->length == 5); sllse_t* pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; mu_assert_lf(pe == NULL); slls_sort(plist); mu_assert_lf(plist->length == 5); pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe == NULL); plist = slls_from_line(mlr_strdup_or_die(","), ',', FALSE); slls_print_quoted(plist);printf("\n"); mu_assert_lf(plist->length == 2); pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; plist = slls_from_line(mlr_strdup_or_die("a,b,c,"), ',', FALSE); slls_print_quoted(plist);printf("\n"); mu_assert_lf(plist->length == 4); pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; plist = slls_from_line(mlr_strdup_or_die("a,,c,d"), ',', FALSE); slls_print_quoted(plist);printf("\n"); mu_assert_lf(plist->length == 4); pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; return NULL; } // ---------------------------------------------------------------- static char* test_rslls() { rslls_t* pa = rslls_alloc(); rslls_append(pa, "a", NO_FREE, 0); rslls_append(pa, "b", NO_FREE, 0); rslls_append(pa, "c", NO_FREE, 0); rslls_print(pa); printf("\n"); mu_assert_lf(pa->length == 3); rsllse_t* pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe == NULL); rslls_reset(pa); rslls_print(pa); printf("\n"); mu_assert_lf(pa->length == 0); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; mu_assert_lf(pe == NULL); rslls_append(pa, "d", NO_FREE, 0); rslls_print(pa); printf("\n"); mu_assert_lf(pa->length == 1); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; mu_assert_lf(pe == NULL); rslls_append(pa, "e", NO_FREE, 0); rslls_print(pa); printf("\n"); mu_assert_lf(pa->length == 2); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; mu_assert_lf(pe == NULL); rslls_append(pa, "f", NO_FREE, 0); rslls_print(pa); printf("\n"); mu_assert_lf(pa->length == 3); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "f")); pe = pe->pnext; mu_assert_lf(pe == NULL); rslls_append(pa, "g", NO_FREE, 0); rslls_print(pa); printf("\n"); mu_assert_lf(pa->length == 4); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "f")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "g")); pe = pe->pnext; mu_assert_lf(pe == NULL); rslls_free(pa); return NULL; } // ---------------------------------------------------------------- static char* test_sllv() { sllv_t* pa = sllv_alloc(); sllv_append(pa, "a"); sllv_append(pa, "b"); sllv_append(pa, "c"); mu_assert_lf(pa->length == 3); sllve_t* pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "c")); pe = pe->pnext; mu_assert_lf(pe == NULL); sllv_t* pb = sllv_alloc(); sllv_append(pb, "d"); sllv_append(pb, "e"); mu_assert_lf(pb->length == 2); pe = pb->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "e")); pe = pe->pnext; mu_assert_lf(pe == NULL); sllv_transfer(pa, pb); mu_assert_lf(pa->length == 5); mu_assert_lf(pb->length == 0); mu_assert_lf(pb->phead == NULL); mu_assert_lf(pb->ptail == NULL); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "e")); pe = pe->pnext; mu_assert_lf(pe == NULL); sllv_free(pb); pa = sllv_alloc(); sllv_push(pa, "a"); sllv_push(pa, "b"); sllv_push(pa, "c"); mu_assert_lf(pa->length == 3); pe = pa->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "a")); pe = pe->pnext; mu_assert_lf(pe == NULL); return NULL; } // ---------------------------------------------------------------- static char* test_string_array() { string_array_t* parray = string_array_from_line(mlr_strdup_or_die(""), ','); mu_assert_lf(parray->length == 0); string_array_free(parray); parray = string_array_from_line(mlr_strdup_or_die("a"), ','); mu_assert_lf(parray->length == 1); mu_assert_lf(streq(parray->strings[0], "a")); string_array_free(parray); parray = string_array_from_line(mlr_strdup_or_die("c,d,a,e,b"), ','); mu_assert_lf(parray->length == 5); mu_assert_lf(streq(parray->strings[0], "c")); mu_assert_lf(streq(parray->strings[1], "d")); mu_assert_lf(streq(parray->strings[2], "a")); mu_assert_lf(streq(parray->strings[3], "e")); mu_assert_lf(streq(parray->strings[4], "b")); string_array_free(parray); return NULL; } // ---------------------------------------------------------------- static char* test_hss() { hss_t *pset = hss_alloc(); mu_assert_lf(pset->num_occupied == 0); hss_add(pset, "x"); mu_assert_lf(pset->num_occupied == 1); mu_assert_lf(!hss_has(pset, "w")); mu_assert_lf( hss_has(pset, "x")); mu_assert_lf(!hss_has(pset, "y")); mu_assert_lf(!hss_has(pset, "z")); mu_assert_lf(hss_check_counts(pset)); hss_add(pset, "y"); mu_assert_lf(pset->num_occupied == 2); mu_assert_lf(!hss_has(pset, "w")); mu_assert_lf( hss_has(pset, "x")); mu_assert_lf( hss_has(pset, "y")); mu_assert_lf(!hss_has(pset, "z")); mu_assert_lf(hss_check_counts(pset)); hss_add(pset, "x"); mu_assert_lf(pset->num_occupied == 2); mu_assert_lf(!hss_has(pset, "w")); mu_assert_lf( hss_has(pset, "x")); mu_assert_lf( hss_has(pset, "y")); mu_assert_lf(!hss_has(pset, "z")); mu_assert_lf(hss_check_counts(pset)); hss_add(pset, "z"); mu_assert_lf(pset->num_occupied == 3); mu_assert_lf(!hss_has(pset, "w")); mu_assert_lf( hss_has(pset, "x")); mu_assert_lf( hss_has(pset, "y")); mu_assert_lf(hss_has(pset, "z")); mu_assert_lf(hss_check_counts(pset)); hss_free(pset); return NULL; } // ---------------------------------------------------------------- static char* test_lhmsi() { lhmsi_t *pmap = lhmsi_alloc(); int val = -123; mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf(!lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf(!lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsi_check_counts(pmap)); lhmsi_put(pmap, "x", 3, NO_FREE); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 3); mu_assert_lf(!lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == -999); mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == -999); mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsi_check_counts(pmap)); lhmsi_put(pmap, "y", 5, NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 3); mu_assert_lf( lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == 5); mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == -999); mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsi_check_counts(pmap)); lhmsi_put(pmap, "x", 4, NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 4); mu_assert_lf( lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == 5); mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == -999); mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsi_check_counts(pmap)); lhmsi_put(pmap, "z", 7, NO_FREE); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 4); mu_assert_lf( lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == 5); mu_assert_lf(lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == 7); mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == TRUE); mu_assert_lf(val == 7); mu_assert_lf(lhmsi_check_counts(pmap)); lhmsi_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_lhmsll() { lhmsll_t *pmap = lhmsll_alloc(); long long val = -123; mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf(!lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf(!lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsll_check_counts(pmap)); lhmsll_put(pmap, "x", 3, NO_FREE); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 3); mu_assert_lf(!lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == -999); mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == -999); mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsll_check_counts(pmap)); lhmsll_put(pmap, "y", 5, NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 3); mu_assert_lf( lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == 5); mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == -999); mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsll_check_counts(pmap)); lhmsll_put(pmap, "x", 4, NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 4); mu_assert_lf( lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == 5); mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == -999); mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); mu_assert_lf(lhmsll_check_counts(pmap)); lhmsll_put(pmap, "z", 7, NO_FREE); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 4); mu_assert_lf( lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == 5); mu_assert_lf(lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == 7); mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == TRUE); mu_assert_lf(val == 7); mu_assert_lf(lhmsll_check_counts(pmap)); lhmsll_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_lhmss() { lhmss_t *pmap = lhmss_alloc(); mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "x")); mu_assert_lf(lhmss_get(pmap, "x") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "x", "3", NO_FREE); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "3")); mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "y", "5", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "3")); mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "x", "4", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "z", "7", NO_FREE); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); mu_assert_lf( lhmss_has_key(pmap, "z")); mu_assert_lf(streq(lhmss_get(pmap, "z"), "7")); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_lhmsv() { lhmsv_t *pmap = lhmsv_alloc(); mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); mu_assert_lf(!lhmsv_has_key(pmap, "x")); mu_assert_lf(lhmsv_get(pmap, "x") == NULL); mu_assert_lf(!lhmsv_has_key(pmap, "y")); mu_assert_lf(lhmsv_get(pmap, "y") == NULL); mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); mu_assert_lf(lhmsv_check_counts(pmap)); lhmsv_put(pmap, "x", "3", NO_FREE); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "3")); mu_assert_lf(!lhmsv_has_key(pmap, "y")); mu_assert_lf(lhmsv_get(pmap, "y") == NULL); mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); mu_assert_lf(lhmsv_check_counts(pmap)); lhmsv_put(pmap, "y", "5", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "3")); mu_assert_lf( lhmsv_has_key(pmap, "y")); mu_assert_lf(streq(lhmsv_get(pmap, "y"), "5")); mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); mu_assert_lf(lhmsv_check_counts(pmap)); lhmsv_put(pmap, "x", "4", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "4")); mu_assert_lf( lhmsv_has_key(pmap, "y")); mu_assert_lf(streq(lhmsv_get(pmap, "y"), "5")); mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); mu_assert_lf(lhmsv_check_counts(pmap)); lhmsv_put(pmap, "z", "7", NO_FREE); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "4")); mu_assert_lf( lhmsv_has_key(pmap, "y")); mu_assert_lf(streq(lhmsv_get(pmap, "y"), "5")); mu_assert_lf( lhmsv_has_key(pmap, "z")); mu_assert_lf(streq(lhmsv_get(pmap, "z"), "7")); mu_assert_lf(lhmsv_check_counts(pmap)); lhmsv_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_lhms2v() { lhms2v_t *pmap = lhms2v_alloc(); mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); mu_assert_lf(!lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(lhms2v_get(pmap, "a", "x") == NULL); mu_assert_lf(!lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(lhms2v_get(pmap, "a", "y") == NULL); mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); mu_assert_lf(lhms2v_check_counts(pmap)); lhms2v_put(pmap, "a", "x", "3", NO_FREE); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "3")); mu_assert_lf(!lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(lhms2v_get(pmap, "a", "y") == NULL); mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); mu_assert_lf(lhms2v_check_counts(pmap)); lhms2v_put(pmap, "a", "y", "5", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "3")); mu_assert_lf( lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "y"), "5")); mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); mu_assert_lf(lhms2v_check_counts(pmap)); lhms2v_put(pmap, "a", "x", "4", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "4")); mu_assert_lf( lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "y"), "5")); mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); mu_assert_lf(lhms2v_check_counts(pmap)); lhms2v_put(pmap, "b", "z", "7", NO_FREE); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "4")); mu_assert_lf( lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "y"), "5")); mu_assert_lf( lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(streq(lhms2v_get(pmap, "b", "z"), "7")); mu_assert_lf(lhms2v_check_counts(pmap)); lhms2v_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_lhmslv() { slls_t* aw = slls_alloc(); slls_append_no_free(aw, "a"); slls_append_no_free(aw, "w"); slls_t* ax = slls_alloc(); slls_append_no_free(ax, "a"); slls_append_no_free(ax, "x"); slls_t* ay = slls_alloc(); slls_append_no_free(ay, "a"); slls_append_no_free(ay, "y"); slls_t* bz = slls_alloc(); slls_append_no_free(bz, "b"); slls_append_no_free(bz, "z"); lhmslv_t *pmap = lhmslv_alloc(); mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); mu_assert_lf(!lhmslv_has_key(pmap, ax)); mu_assert_lf(lhmslv_get(pmap, ax) == NULL); mu_assert_lf(!lhmslv_has_key(pmap, ay)); mu_assert_lf(lhmslv_get(pmap, ay) == NULL); mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); mu_assert_lf(lhmslv_check_counts(pmap)); lhmslv_put(pmap, ax, "3", NO_FREE); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "3")); mu_assert_lf(!lhmslv_has_key(pmap, ay)); mu_assert_lf(lhmslv_get(pmap, ay) == NULL); mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); mu_assert_lf(lhmslv_check_counts(pmap)); lhmslv_put(pmap, ay, "5", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "3")); mu_assert_lf( lhmslv_has_key(pmap, ay)); mu_assert_lf(streq(lhmslv_get(pmap, ay), "5")); mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); mu_assert_lf(lhmslv_check_counts(pmap)); lhmslv_put(pmap, ax, "4", NO_FREE); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "4")); mu_assert_lf( lhmslv_has_key(pmap, ay)); mu_assert_lf(streq(lhmslv_get(pmap, ay), "5")); mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); mu_assert_lf(lhmslv_check_counts(pmap)); lhmslv_put(pmap, bz, "7", NO_FREE); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "4")); mu_assert_lf( lhmslv_has_key(pmap, ay)); mu_assert_lf(streq(lhmslv_get(pmap, ay), "5")); mu_assert_lf( lhmslv_has_key(pmap, bz)); mu_assert_lf(streq(lhmslv_get(pmap, bz), "7")); mu_assert_lf(lhmslv_check_counts(pmap)); lhmslv_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_lhmsmv() { printf("\n"); lhmsmv_t *pmap = lhmsmv_alloc(); mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); mu_assert_lf(!lhmsmv_has_key(pmap, "x")); mu_assert_lf(lhmsmv_get(pmap, "x") == NULL); mu_assert_lf(!lhmsmv_has_key(pmap, "y")); mu_assert_lf(lhmsmv_get(pmap, "y") == NULL); mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); mu_assert_lf(lhmsmv_check_counts(pmap)); lhmsmv_put(pmap, "x", imv(3), NO_FREE); lhmsmv_dump(pmap); printf("\n"); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), imv(3))); mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("3"))); mu_assert_lf(!lhmsmv_has_key(pmap, "y")); mu_assert_lf(lhmsmv_get(pmap, "y") == NULL); mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); mu_assert_lf(lhmsmv_check_counts(pmap)); lhmsmv_put(pmap, "y", smv("5"), NO_FREE); lhmsmv_dump(pmap); printf("\n"); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("3"))); mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), smv("5"))); mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), imv(5))); mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); mu_assert_lf(lhmsmv_check_counts(pmap)); lhmsmv_put(pmap, "x", smv("f"), NO_FREE); lhmsmv_dump(pmap); printf("\n"); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("f"))); mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), smv("5"))); mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); mu_assert_lf(lhmsmv_check_counts(pmap)); lhmsmv_put(pmap, "z", imv(7), NO_FREE); lhmsmv_dump(pmap); printf("\n"); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("f"))); mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), smv("5"))); mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), imv(5))); mu_assert_lf( lhmsmv_has_key(pmap, "z")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "z"), smv("7"))); mu_assert_lf( lhmsmv_has_key(pmap, "z")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "z"), imv(7))); mu_assert_lf(lhmsmv_check_counts(pmap)); lhmsmv_free(pmap); return NULL; } // ---------------------------------------------------------------- static char* test_percentile_keeper() { percentile_keeper_t* ppercentile_keeper = percentile_keeper_alloc(); percentile_keeper_ingest(ppercentile_keeper, mv_from_float(1.0)); percentile_keeper_ingest(ppercentile_keeper, mv_from_int(2)); percentile_keeper_ingest(ppercentile_keeper, mv_from_int(3)); percentile_keeper_ingest(ppercentile_keeper, mv_from_float(4.0)); percentile_keeper_ingest(ppercentile_keeper, mv_from_float(5.0)); percentile_keeper_print(ppercentile_keeper); double p; mv_t q; p = 0.0; q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); mu_assert_lf(q.type == MT_FLOAT); mu_assert_lf(q.u.fltv == 1.0); p = 10.0; q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); mu_assert_lf(q.type == MT_FLOAT); mu_assert_lf(q.u.fltv == 1.0); p = 50.0; q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); printf("%4.2lf -> %lld\n", p, q.u.intv); mu_assert_lf(q.type == MT_INT); mu_assert_lf(q.u.intv == 3LL); p = 90.0; q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); mu_assert_lf(q.type == MT_FLOAT); mu_assert_lf(q.u.fltv == 5.0); p = 100.0; q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); mu_assert_lf(q.type == MT_FLOAT); mu_assert_lf(q.u.fltv == 5.0); percentile_keeper_free(ppercentile_keeper); return NULL; } // ---------------------------------------------------------------- static char* test_top_keeper() { int capacity = 3; top_keeper_t* ptop_keeper = top_keeper_alloc(capacity); mu_assert_lf(ptop_keeper->size == 0); top_keeper_add(ptop_keeper, mv_from_float(5.0), NULL); top_keeper_print(ptop_keeper); mu_assert_lf(ptop_keeper->size == 1); mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 5.0); top_keeper_add(ptop_keeper, mv_from_float(6.0), NULL); top_keeper_print(ptop_keeper); mu_assert_lf(ptop_keeper->size == 2); mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 6.0); mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 5.0); top_keeper_add(ptop_keeper, mv_from_int(4), NULL); top_keeper_print(ptop_keeper); mu_assert_lf(ptop_keeper->size == 3); mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 6.0); mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 5.0); mu_assert_lf(ptop_keeper->top_values[2].type == MT_INT); mu_assert_lf(ptop_keeper->top_values[2].u.intv == 4.0); top_keeper_add(ptop_keeper, mv_from_int(2), NULL); top_keeper_print(ptop_keeper); mu_assert_lf(ptop_keeper->size == 3); mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 6.0); mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 5.0); mu_assert_lf(ptop_keeper->top_values[2].type == MT_INT); mu_assert_lf(ptop_keeper->top_values[2].u.intv == 4.0); top_keeper_add(ptop_keeper, mv_from_int(7), NULL); top_keeper_print(ptop_keeper); mu_assert_lf(ptop_keeper->size == 3); mu_assert_lf(ptop_keeper->top_values[0].type == MT_INT); mu_assert_lf(ptop_keeper->top_values[0].u.intv == 7); mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 6.0); mu_assert_lf(ptop_keeper->top_values[2].type == MT_FLOAT); mu_assert_lf(ptop_keeper->top_values[2].u.fltv == 5.0); top_keeper_free(ptop_keeper); return NULL; } // ---------------------------------------------------------------- static char* test_dheap() { dheap_t *pdheap = dheap_alloc(); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 0); dheap_add(pdheap, 4.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 1); dheap_add(pdheap, 3.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 2); dheap_add(pdheap, 2.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 3); dheap_add(pdheap, 6.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 4); dheap_add(pdheap, 5.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 5); dheap_add(pdheap, 8.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 6); dheap_add(pdheap, 7.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 7); dheap_print(pdheap); mu_assert_lf(dheap_remove(pdheap) == 8.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 6); mu_assert_lf(dheap_remove(pdheap) == 7.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 5); mu_assert_lf(dheap_remove(pdheap) == 6.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 4); mu_assert_lf(dheap_remove(pdheap) == 5.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 3); mu_assert_lf(dheap_remove(pdheap) == 4.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 2); mu_assert_lf(dheap_remove(pdheap) == 3.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 1); mu_assert_lf(dheap_remove(pdheap) == 2.25); mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); mu_assert_lf(pdheap->n == 0); dheap_free(pdheap); return NULL; } // ================================================================ static char * run_all_tests() { mu_run_test(test_slls); mu_run_test(test_rslls); mu_run_test(test_sllv); mu_run_test(test_string_array); mu_run_test(test_hss); mu_run_test(test_lhmsi); mu_run_test(test_lhmsll); mu_run_test(test_lhmss); mu_run_test(test_lhmsv); mu_run_test(test_lhms2v); mu_run_test(test_lhmslv); mu_run_test(test_lhmsmv); mu_run_test(test_percentile_keeper); mu_run_test(test_top_keeper); mu_run_test(test_dheap); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_MULTIPLE_CONTAINERS ENTER\n"); char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_MULTIPLE_CONTAINERS: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_parse_trie.c000066400000000000000000000224511354153536500206260ustar00rootroot00000000000000#include #include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "containers/parse_trie.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; static char* sep = "================================================================"; static void print_with_unprintables(char* s) { for (char* p = s; *p; p++) { char c = *p; printf("%c[%02x]", isprint((unsigned char)c) ? c : '?', ((unsigned)c) & 0xff); } } // ---------------------------------------------------------------- static void test_case( char* test_name, char** strings, int num_strings, char* buf, int* prc, int* pstridx, int* pmatchlen) { int stridx, matchlen, rc; parse_trie_t* ptrie = parse_trie_alloc(); printf("%s %s\n", sep, test_name); parse_trie_print(ptrie); for (stridx = 0; stridx < num_strings; stridx++) { printf("Adding string[%d] = [", stridx); print_with_unprintables(strings[stridx]); printf("]\n"); parse_trie_add_string(ptrie, strings[stridx], stridx); parse_trie_print(ptrie); } stridx = -2; matchlen = -2; rc = parse_trie_ring_match(ptrie, buf, 0, strlen(buf), 0xff, &stridx, &matchlen); parse_trie_free(ptrie); printf("buf = %s\n", buf); printf("rc = %d\n", rc); printf("stridx = %d (%s)\n", stridx, strings[stridx]); printf("matchlen = %d\n", matchlen); *prc = rc; *pstridx = stridx; *pmatchlen = matchlen; } // ---------------------------------------------------------------- static char* test_simplest() { char* strings[] = { "a" }; char* buf = "a"; int expect_rc = TRUE, expect_stridx = 0, expect_matchlen = 1; int num_strings = sizeof(strings) / sizeof(strings[0]); int stridx, matchlen, rc; test_case("simplest", strings, num_strings, buf, &rc, &stridx, &matchlen); mu_assert_lf(rc == expect_rc); mu_assert_lf(stridx == expect_stridx); mu_assert_lf(matchlen == expect_matchlen); return 0; } // ---------------------------------------------------------------- static char* test_disjoint() { char* strings[] = { "abc" , "fg" }; char* buf = "abcde"; int expect_rc = TRUE, expect_stridx = 0, expect_matchlen = 3; int num_strings = sizeof(strings) / sizeof(strings[0]); int stridx, matchlen, rc; test_case("disjoint", strings, num_strings, buf, &rc, &stridx, &matchlen); mu_assert_lf(rc == expect_rc); mu_assert_lf(stridx == expect_stridx); mu_assert_lf(matchlen == expect_matchlen); return 0; } // ---------------------------------------------------------------- static char* test_short_long() { char* strings[] = { "a" , "aa" }; char* buf = "aaabc"; int expect_rc = TRUE, expect_stridx = 1, expect_matchlen = 2; int num_strings = sizeof(strings) / sizeof(strings[0]); int stridx, matchlen, rc; test_case("short_long", strings, num_strings, buf, &rc, &stridx, &matchlen); mu_assert_lf(rc == expect_rc); mu_assert_lf(stridx == expect_stridx); mu_assert_lf(matchlen == expect_matchlen); return 0; } // ---------------------------------------------------------------- static char* test_long_short() { char* strings[] = { "aa" , "a" }; char* buf = "aaabc"; int expect_rc = TRUE, expect_stridx = 0, expect_matchlen = 2; int num_strings = sizeof(strings) / sizeof(strings[0]); int stridx, matchlen, rc; test_case("long_short", strings, num_strings, buf, &rc, &stridx, &matchlen); mu_assert_lf(rc == expect_rc); mu_assert_lf(stridx == expect_stridx); mu_assert_lf(matchlen == expect_matchlen); return 0; } // ---------------------------------------------------------------- static char* test_dkvp() { char* test_name = "dkvp"; char* strings[] = { "=" , ",", "\r\n", "\xff" }; const int PS_TOKEN = 0; const int FS_TOKEN = 1; const int RS_TOKEN = 2; const int EOF_TOKEN = 3; int num_strings = sizeof(strings) / sizeof(strings[0]); char* buf = "abc=123,def=456\r\n" "ghi=789\xff"; char* p = buf; printf("%s %s\n", sep, test_name); int stridx, matchlen, rc; parse_trie_t* ptrie = parse_trie_alloc(); parse_trie_print(ptrie); for (stridx = 0; stridx < num_strings; stridx++) { printf("Adding string[%d] = [", stridx); print_with_unprintables(strings[stridx]); printf("]\n"); parse_trie_add_string(ptrie, strings[stridx], stridx); } parse_trie_print(ptrie); rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == TRUE); mu_assert_lf(stridx == PS_TOKEN); mu_assert_lf(matchlen == strlen(strings[PS_TOKEN])); p += matchlen; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == TRUE); mu_assert_lf(stridx == FS_TOKEN); mu_assert_lf(matchlen == strlen(strings[FS_TOKEN])); p += matchlen; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == TRUE); mu_assert_lf(stridx == PS_TOKEN); mu_assert_lf(matchlen == strlen(strings[PS_TOKEN])); p += matchlen; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == TRUE); mu_assert_lf(stridx == RS_TOKEN); mu_assert_lf(matchlen == strlen(strings[RS_TOKEN])); p += matchlen; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == TRUE); mu_assert_lf(stridx == PS_TOKEN); mu_assert_lf(matchlen == strlen(strings[PS_TOKEN])); p += matchlen; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == TRUE); mu_assert_lf(stridx == EOF_TOKEN); mu_assert_lf(matchlen == strlen(strings[EOF_TOKEN])); p += matchlen; return 0; } // ---------------------------------------------------------------- static char* show_it() { char* test_name = "show_it"; char* strings[] = { "=" , ",", "\r\n", "\xff" }; const int EOF_TOKEN = 3; int num_strings = sizeof(strings) / sizeof(strings[0]); char* buf = "abc=123,def=456\r\n" "ghi=789\xff"; char* p = buf; printf("%s %s\n", sep, test_name); int stridx, matchlen, rc; parse_trie_t* ptrie = parse_trie_alloc(); parse_trie_print(ptrie); for (stridx = 0; stridx < num_strings; stridx++) { printf("Adding string[%d] = [", stridx); print_with_unprintables(strings[stridx]); printf("]\n"); parse_trie_add_string(ptrie, strings[stridx], stridx); } parse_trie_print(ptrie); while (TRUE) { rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); if (rc) { printf("match token %d (", stridx); print_with_unprintables(strings[stridx]); printf(")\n"); p += matchlen; if (stridx == EOF_TOKEN) { break; } } else { char c = *p; printf("c %c[%02x]\n", isprint((unsigned char)c) ? c : '?', ((unsigned)c)&0xff); p++; } } mu_assert_lf(*p == 0); return 0; } // ================================================================ static char* all_tests() { mu_run_test(test_simplest); mu_run_test(test_disjoint); mu_run_test(test_short_long); mu_run_test(test_long_short); mu_run_test(test_dkvp); mu_run_test(show_it); return 0; } int main(int argc, char** argv) { mlr_global_init(argv[0], NULL); printf("TEST_PARSE_TRIE ENTER\n"); char* result = all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_PARSE_TRIE: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_peek_file_reader.c000066400000000000000000000052151354153536500217350ustar00rootroot00000000000000#include #include #include #include "lib/mlrutil.h" #include "lib/mlr_globals.h" #include "lib/minunit.h" #include "lib/mlr_test_util.h" #include "input/byte_readers.h" #include "input/peek_file_reader.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char* test_empty() { byte_reader_t* pbr = string_byte_reader_alloc(); int ok = pbr->popen_func(pbr, NULL, ""); mu_assert_lf(ok == TRUE); peek_file_reader_t* pfr = pfr_alloc(pbr, 7); mu_assert_lf(pfr_peek_char(pfr) == (char)EOF); // char defaults to unsigned on some platforms mu_assert_lf(pfr_read_char(pfr) == (char)EOF); pbr->pclose_func(pbr, NULL); pfr_free(pfr); return NULL; } // ---------------------------------------------------------------- static char* test_non_empty() { byte_reader_t* pbr = string_byte_reader_alloc(); int ok = pbr->popen_func(pbr, NULL, "ab,cde\n" "123,4567\n" ); mu_assert_lf(ok == TRUE); peek_file_reader_t* pfr = pfr_alloc(pbr, 7); pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == 'a'); pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == 'a'); pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == 'b'); pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == 'b'); pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == ','); pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == ','); pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == ','); pfr_print(pfr); pfr_buffer_by(pfr, 5); pfr_print(pfr); pfr_advance_by(pfr, 5); pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == '2'); pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == '3'); pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == '3'); pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == '3'); pfr_print(pfr); pfr_buffer_by(pfr, 5); pfr_print(pfr); pfr_advance_by(pfr, 5); pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == '\n'); pbr->pclose_func(pbr, NULL); pfr_free(pfr); return NULL; } // ================================================================ static char * run_all_tests() { mu_run_test(test_empty); mu_run_test(test_non_empty); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_PEEK_FILE_READER ENTER\n"); char *result = run_all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_PEEK_FILE_READER: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_rval_evaluators.c000066400000000000000000000462011354153536500217010ustar00rootroot00000000000000#include "lib/mlr_globals.h" #include "lib/minunit.h" #include "dsl/rval_evaluators.h" #include "dsl/function_manager.h" // ---------------------------------------------------------------- int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char * test_caps() { printf("\n"); printf("-- TEST_RVAL_EVALUATORS test_caps ENTER\n"); context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" }; context_t* pctx = &ctx; rval_evaluator_t* pnr = rval_evaluator_alloc_from_NR(); rval_evaluator_t* pfnr = rval_evaluator_alloc_from_FNR(); rval_evaluator_t* pfilename = rval_evaluator_alloc_from_FILENAME(); rval_evaluator_t* pfilenum = rval_evaluator_alloc_from_FILENUM(); lrec_t* prec = lrec_unbacked_alloc(); lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); mlhmmv_root_t* poosvars = mlhmmv_root_alloc(); string_array_t* pregex_captures = NULL; loop_stack_t* ploop_stack = loop_stack_alloc(); variables_t variables = (variables_t) { .pinrec = prec, .ptyped_overlay = ptyped_overlay, .poosvars = poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .ploop_stack = ploop_stack, }; mv_t val = pnr->pprocess_func(pnr->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_INT); mu_assert_lf(val.u.intv == 888); val = pfnr->pprocess_func(pfnr->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_INT); mu_assert_lf(val.u.intv == 999); val = pfilename->pprocess_func(pfilename->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_STRING); mu_assert_lf(val.u.strv != NULL); mu_assert_lf(streq(val.u.strv, "filename-goes-here")); val = pfilenum->pprocess_func(pfilenum->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_INT); mu_assert_lf(val.u.intv == 123); return 0; } // ---------------------------------------------------------------- static char * test_strings() { printf("\n"); printf("-- TEST_RVAL_EVALUATORS test_strings ENTER\n"); context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" }; context_t* pctx = &ctx; rval_evaluator_t* ps = rval_evaluator_alloc_from_field_name("s", TYPE_INFER_STRING_FLOAT_INT); rval_evaluator_t* pdef = rval_evaluator_alloc_from_string_literal("def"); rval_evaluator_t* pdot = rval_evaluator_alloc_from_x_ss_func(s_xx_dot_func, ps, pdef); rval_evaluator_t* ptolower = rval_evaluator_alloc_from_s_s_func(s_s_tolower_func, pdot); rval_evaluator_t* ptoupper = rval_evaluator_alloc_from_s_s_func(s_s_toupper_func, pdot); lrec_t* prec = lrec_unbacked_alloc(); lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); mlhmmv_root_t* poosvars = mlhmmv_root_alloc(); string_array_t* pregex_captures = NULL; loop_stack_t* ploop_stack = loop_stack_alloc(); lrec_put(prec, "s", "abc", NO_FREE); printf("lrec s = %s\n", lrec_get(prec, "s")); variables_t variables = (variables_t) { .pinrec = prec, .ptyped_overlay = ptyped_overlay, .poosvars = poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .ploop_stack = ploop_stack, }; mv_t val = ps->pprocess_func(ps->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_STRING); mu_assert_lf(val.u.strv != NULL); mu_assert_lf(streq(val.u.strv, "abc")); val = pdef->pprocess_func(pdef->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_STRING); mu_assert_lf(val.u.strv != NULL); mu_assert_lf(streq(val.u.strv, "def")); val = pdot->pprocess_func(pdot->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_STRING); mu_assert_lf(val.u.strv != NULL); mu_assert_lf(streq(val.u.strv, "abcdef")); val = ptolower->pprocess_func(ptolower->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_STRING); mu_assert_lf(val.u.strv != NULL); mu_assert_lf(streq(val.u.strv, "abcdef")); val = ptoupper->pprocess_func(ptoupper->pvstate, &variables); printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); mu_assert_lf(val.type == MT_STRING); mu_assert_lf(val.u.strv != NULL); mu_assert_lf(streq(val.u.strv, "ABCDEF")); return 0; } // ---------------------------------------------------------------- static char * test_numbers() { printf("\n"); printf("-- TEST_RVAL_EVALUATORS test_numbers ENTER\n"); context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" }; context_t* pctx = &ctx; rval_evaluator_t* p2 = rval_evaluator_alloc_from_numeric_literal("2.0"); rval_evaluator_t* px = rval_evaluator_alloc_from_field_name("x", TYPE_INFER_STRING_FLOAT_INT); rval_evaluator_t* plogx = rval_evaluator_alloc_from_f_f_func(f_f_log10_func, px); rval_evaluator_t* p2logx = rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, p2, plogx); rval_evaluator_t* px2 = rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, px, px); rval_evaluator_t* p4 = rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, p2, p2); mlr_dsl_ast_node_t* pxnode = mlr_dsl_ast_node_alloc("x", MD_AST_NODE_TYPE_FIELD_NAME); mlr_dsl_ast_node_t* plognode = mlr_dsl_ast_node_alloc_zary("log", MD_AST_NODE_TYPE_FUNCTION_CALLSITE); mlr_dsl_ast_node_t* plogxnode = mlr_dsl_ast_node_append_arg(plognode, pxnode); mlr_dsl_ast_node_t* p2node = mlr_dsl_ast_node_alloc("2", MD_AST_NODE_TYPE_NUMERIC_LITERAL); mlr_dsl_ast_node_t* p2logxnode = mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, p2node, plogxnode); fmgr_t* pfmgr = fmgr_alloc(); rval_evaluator_t* pastr = rval_evaluator_alloc_from_ast(p2logxnode, pfmgr, TYPE_INFER_STRING_FLOAT_INT, 0); fmgr_resolve_func_callsites(pfmgr); fmgr_free(pfmgr, &ctx); lrec_t* prec = lrec_unbacked_alloc(); lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); mlhmmv_root_t* poosvars = mlhmmv_root_alloc(); string_array_t* pregex_captures = NULL; loop_stack_t* ploop_stack = loop_stack_alloc(); lrec_put(prec, "x", "4.5", NO_FREE); variables_t variables = (variables_t) { .pinrec = prec, .ptyped_overlay = ptyped_overlay, .poosvars = poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .ploop_stack = ploop_stack, }; mv_t valp2 = p2->pprocess_func(p2->pvstate, &variables); mv_t valp4 = p4->pprocess_func(p4->pvstate, &variables); mv_t valpx = px->pprocess_func(px->pvstate, &variables); mv_t valpx2 = px2->pprocess_func(px2->pvstate, &variables); mv_t valplogx = plogx->pprocess_func(plogx->pvstate, &variables); mv_t valp2logx = p2logx->pprocess_func(p2logx->pvstate, &variables); printf("lrec x = %s\n", lrec_get(prec, "x")); printf("newval 2 = %s\n", mv_describe_val(valp2)); printf("newval 4 = %s\n", mv_describe_val(valp4)); printf("newval x = %s\n", mv_describe_val(valpx)); printf("newval x^2 = %s\n", mv_describe_val(valpx2)); printf("newval log(x) = %s\n", mv_describe_val(valplogx)); printf("newval 2*log(x) = %s\n", mv_describe_val(valp2logx)); mu_assert_lf(valp2.type == MT_FLOAT); mu_assert_lf(valp4.type == MT_FLOAT); mu_assert_lf(valpx.type == MT_FLOAT); mu_assert_lf(valpx2.type == MT_FLOAT); mu_assert_lf(valplogx.type == MT_FLOAT); mu_assert_lf(valp2logx.type == MT_FLOAT); mu_assert_lf(valp2.u.fltv == 2.0); mu_assert_lf(valp4.u.fltv == 4.0); mu_assert_lf(valpx.u.fltv == 4.5); mu_assert_lf(valpx2.u.fltv == 20.25); mu_assert_lf(fabs(valplogx.u.fltv - 0.653213) < 1e-5); mu_assert_lf(fabs(valp2logx.u.fltv - 1.306425) < 1e-5); mlr_dsl_ast_node_print(p2logxnode); printf("newval AST = %s\n", mv_describe_val(pastr->pprocess_func(pastr->pvstate, &variables))); printf("\n"); lrec_rename(prec, "x", "y", FALSE); valp2 = p2->pprocess_func(p2->pvstate, &variables); valp4 = p4->pprocess_func(p4->pvstate, &variables); valpx = px->pprocess_func(px->pvstate, &variables); valpx2 = px2->pprocess_func(px2->pvstate, &variables); valplogx = plogx->pprocess_func(plogx->pvstate, &variables); valp2logx = p2logx->pprocess_func(p2logx->pvstate, &variables); printf("lrec x = %s\n", lrec_get(prec, "x")); printf("newval 2 = %s\n", mv_describe_val(valp2)); printf("newval 4 = %s\n", mv_describe_val(valp4)); printf("newval x = %s\n", mv_describe_val(valpx)); printf("newval x^2 = %s\n", mv_describe_val(valpx2)); printf("newval log(x) = %s\n", mv_describe_val(valplogx)); printf("newval 2*log(x) = %s\n", mv_describe_val(valp2logx)); mu_assert_lf(valp2.type == MT_FLOAT); mu_assert_lf(valp4.type == MT_FLOAT); mu_assert_lf(valpx.type == MT_ABSENT); mu_assert_lf(valpx2.type == MT_ABSENT); mu_assert_lf(valplogx.type == MT_ABSENT); mu_assert_lf(valp2logx.type == MT_FLOAT); mu_assert_lf(valp2.u.fltv == 2.0); mu_assert_lf(valp4.u.fltv == 4.0); return 0; } // ---------------------------------------------------------------- static char * test_logical_and() { printf("\n"); printf("-- TEST_RVAL_EVALUATORS test4 ENTER\n"); context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" }; context_t* pctx = &ctx; lrec_t* prec = NULL; lhmsmv_t* ptyped_overlay = NULL; mlhmmv_root_t* poosvars = NULL; string_array_t* pregex_captures = NULL; loop_stack_t* ploop_stack = loop_stack_alloc(); variables_t variables = (variables_t) { .pinrec = prec, .ptyped_overlay = ptyped_overlay, .poosvars = poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .ploop_stack = ploop_stack, }; mv_t t = mv_from_bool(TRUE); mv_t f = mv_from_bool(FALSE); mv_t a = mv_absent(); rval_evaluator_t* pt = rval_evaluator_alloc_from_mlrval(&t); rval_evaluator_t* pf = rval_evaluator_alloc_from_mlrval(&f); rval_evaluator_t* pa = rval_evaluator_alloc_from_mlrval(&a); rval_evaluator_t* ptt = rval_evaluator_alloc_from_b_bb_and_func(pt, pt); rval_evaluator_t* ptf = rval_evaluator_alloc_from_b_bb_and_func(pt, pf); rval_evaluator_t* pta = rval_evaluator_alloc_from_b_bb_and_func(pt, pa); rval_evaluator_t* pft = rval_evaluator_alloc_from_b_bb_and_func(pf, pt); rval_evaluator_t* pff = rval_evaluator_alloc_from_b_bb_and_func(pf, pf); rval_evaluator_t* pfa = rval_evaluator_alloc_from_b_bb_and_func(pf, pa); rval_evaluator_t* pat = rval_evaluator_alloc_from_b_bb_and_func(pa, pt); rval_evaluator_t* paf = rval_evaluator_alloc_from_b_bb_and_func(pa, pf); rval_evaluator_t* paa = rval_evaluator_alloc_from_b_bb_and_func(pa, pa); mv_t ott = ptt->pprocess_func(ptt->pvstate, &variables); mv_t otf = ptf->pprocess_func(ptf->pvstate, &variables); mv_t oft = pft->pprocess_func(pft->pvstate, &variables); mv_t off = pff->pprocess_func(pff->pvstate, &variables); mv_t oat = pat->pprocess_func(pat->pvstate, &variables); mv_t oaf = paf->pprocess_func(paf->pvstate, &variables); mv_t ota = pta->pprocess_func(pta->pvstate, &variables); mv_t ofa = pfa->pprocess_func(pfa->pvstate, &variables); mv_t oaa = paa->pprocess_func(paa->pvstate, &variables); mu_assert_lf(ott.type == MT_BOOLEAN); mu_assert_lf(ott.u.boolv == TRUE); mu_assert_lf(otf.type == MT_BOOLEAN); mu_assert_lf(otf.u.boolv == FALSE); mu_assert_lf(oft.type == MT_BOOLEAN); mu_assert_lf(oft.u.boolv == FALSE); mu_assert_lf(off.type == MT_BOOLEAN); mu_assert_lf(off.u.boolv == FALSE); mu_assert_lf(oat.type == MT_BOOLEAN); mu_assert_lf(oat.u.boolv == TRUE); mu_assert_lf(oaf.type == MT_BOOLEAN); mu_assert_lf(oaf.u.boolv == FALSE); mu_assert_lf(ota.type == MT_BOOLEAN); mu_assert_lf(ota.u.boolv == TRUE); mu_assert_lf(ofa.type == MT_BOOLEAN); mu_assert_lf(ofa.u.boolv == FALSE); mu_assert_lf(oaa.type == MT_ABSENT); return 0; } // ---------------------------------------------------------------- static char * test_logical_or() { printf("\n"); printf("-- TEST_RVAL_EVALUATORS test4 ENTER\n"); context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" }; context_t* pctx = &ctx; lrec_t* prec = NULL; lhmsmv_t* ptyped_overlay = NULL; mlhmmv_root_t* poosvars = NULL; string_array_t* pregex_captures = NULL; loop_stack_t* ploop_stack = loop_stack_alloc(); variables_t variables = (variables_t) { .pinrec = prec, .ptyped_overlay = ptyped_overlay, .poosvars = poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .ploop_stack = ploop_stack, }; mv_t t = mv_from_bool(TRUE); mv_t f = mv_from_bool(FALSE); mv_t a = mv_absent(); rval_evaluator_t* pt = rval_evaluator_alloc_from_mlrval(&t); rval_evaluator_t* pf = rval_evaluator_alloc_from_mlrval(&f); rval_evaluator_t* pa = rval_evaluator_alloc_from_mlrval(&a); rval_evaluator_t* ptt = rval_evaluator_alloc_from_b_bb_or_func(pt, pt); rval_evaluator_t* ptf = rval_evaluator_alloc_from_b_bb_or_func(pt, pf); rval_evaluator_t* pta = rval_evaluator_alloc_from_b_bb_or_func(pt, pa); rval_evaluator_t* pft = rval_evaluator_alloc_from_b_bb_or_func(pf, pt); rval_evaluator_t* pff = rval_evaluator_alloc_from_b_bb_or_func(pf, pf); rval_evaluator_t* pfa = rval_evaluator_alloc_from_b_bb_or_func(pf, pa); rval_evaluator_t* pat = rval_evaluator_alloc_from_b_bb_or_func(pa, pt); rval_evaluator_t* paf = rval_evaluator_alloc_from_b_bb_or_func(pa, pf); rval_evaluator_t* paa = rval_evaluator_alloc_from_b_bb_or_func(pa, pa); mv_t ott = ptt->pprocess_func(ptt->pvstate, &variables); mv_t otf = ptf->pprocess_func(ptf->pvstate, &variables); mv_t ota = pta->pprocess_func(pta->pvstate, &variables); mv_t oft = pft->pprocess_func(pft->pvstate, &variables); mv_t off = pff->pprocess_func(pff->pvstate, &variables); mv_t ofa = pfa->pprocess_func(pfa->pvstate, &variables); mv_t oat = pat->pprocess_func(pat->pvstate, &variables); mv_t oaf = paf->pprocess_func(paf->pvstate, &variables); mv_t oaa = paa->pprocess_func(paa->pvstate, &variables); mu_assert_lf(ott.type == MT_BOOLEAN); mu_assert_lf(ott.u.boolv == TRUE); mu_assert_lf(otf.type == MT_BOOLEAN); mu_assert_lf(otf.u.boolv == TRUE); mu_assert_lf(ota.type == MT_BOOLEAN); mu_assert_lf(ota.u.boolv == TRUE); mu_assert_lf(oft.type == MT_BOOLEAN); mu_assert_lf(oft.u.boolv == TRUE); mu_assert_lf(off.type == MT_BOOLEAN); mu_assert_lf(off.u.boolv == FALSE); mu_assert_lf(ofa.type == MT_BOOLEAN); mu_assert_lf(ofa.u.boolv == FALSE); mu_assert_lf(oat.type == MT_BOOLEAN); mu_assert_lf(oat.u.boolv == TRUE); mu_assert_lf(oaf.type == MT_BOOLEAN); mu_assert_lf(oaf.u.boolv == FALSE); mu_assert_lf(oaa.type == MT_ABSENT); return 0; } // ---------------------------------------------------------------- static char * test_logical_xor() { printf("\n"); printf("-- TEST_RVAL_EVALUATORS test4 ENTER\n"); context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" }; context_t* pctx = &ctx; lrec_t* prec = NULL; lhmsmv_t* ptyped_overlay = NULL; mlhmmv_root_t* poosvars = NULL; string_array_t* pregex_captures = NULL; loop_stack_t* ploop_stack = loop_stack_alloc(); variables_t variables = (variables_t) { .pinrec = prec, .ptyped_overlay = ptyped_overlay, .poosvars = poosvars, .ppregex_captures = &pregex_captures, .pctx = pctx, .ploop_stack = ploop_stack, }; mv_t t = mv_from_bool(TRUE); mv_t f = mv_from_bool(FALSE); mv_t a = mv_absent(); rval_evaluator_t* pt = rval_evaluator_alloc_from_mlrval(&t); rval_evaluator_t* pf = rval_evaluator_alloc_from_mlrval(&f); rval_evaluator_t* pa = rval_evaluator_alloc_from_mlrval(&a); rval_evaluator_t* ptt = rval_evaluator_alloc_from_b_bb_xor_func(pt, pt); rval_evaluator_t* ptf = rval_evaluator_alloc_from_b_bb_xor_func(pt, pf); rval_evaluator_t* pft = rval_evaluator_alloc_from_b_bb_xor_func(pf, pt); rval_evaluator_t* pff = rval_evaluator_alloc_from_b_bb_xor_func(pf, pf); rval_evaluator_t* pat = rval_evaluator_alloc_from_b_bb_xor_func(pa, pt); rval_evaluator_t* paf = rval_evaluator_alloc_from_b_bb_xor_func(pa, pf); rval_evaluator_t* pta = rval_evaluator_alloc_from_b_bb_xor_func(pt, pa); rval_evaluator_t* pfa = rval_evaluator_alloc_from_b_bb_xor_func(pf, pa); rval_evaluator_t* paa = rval_evaluator_alloc_from_b_bb_xor_func(pa, pa); mv_t ott = ptt->pprocess_func(ptt->pvstate, &variables); mv_t otf = ptf->pprocess_func(ptf->pvstate, &variables); mv_t oft = pft->pprocess_func(pft->pvstate, &variables); mv_t off = pff->pprocess_func(pff->pvstate, &variables); mv_t oat = pat->pprocess_func(pat->pvstate, &variables); mv_t oaf = paf->pprocess_func(paf->pvstate, &variables); mv_t ota = pta->pprocess_func(pta->pvstate, &variables); mv_t ofa = pfa->pprocess_func(pfa->pvstate, &variables); mv_t oaa = paa->pprocess_func(paa->pvstate, &variables); mu_assert_lf(ott.type == MT_BOOLEAN); mu_assert_lf(ott.u.boolv == FALSE); mu_assert_lf(otf.type == MT_BOOLEAN); mu_assert_lf(otf.u.boolv == TRUE); mu_assert_lf(oft.type == MT_BOOLEAN); mu_assert_lf(oft.u.boolv == TRUE); mu_assert_lf(off.type == MT_BOOLEAN); mu_assert_lf(off.u.boolv == FALSE); mu_assert_lf(oat.type == MT_BOOLEAN); mu_assert_lf(oat.u.boolv == TRUE); mu_assert_lf(oaf.type == MT_BOOLEAN); mu_assert_lf(oaf.u.boolv == FALSE); mu_assert_lf(ota.type == MT_BOOLEAN); mu_assert_lf(ota.u.boolv == TRUE); mu_assert_lf(ofa.type == MT_BOOLEAN); mu_assert_lf(ofa.u.boolv == FALSE); mu_assert_lf(oaa.type == MT_ABSENT); return 0; } // ================================================================ static char * all_tests() { mu_run_test(test_caps); mu_run_test(test_strings); mu_run_test(test_numbers); mu_run_test(test_logical_and); mu_run_test(test_logical_or); mu_run_test(test_logical_xor); // There is more operator testing in reg_test/run return 0; } // ---------------------------------------------------------------- int main(int argc, char **argv) { mlr_global_init(argv[0], "%lf"); printf("TEST_RVAL_EVALUATORS ENTER\n"); char *result = all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_RVAL_EVALUATORS: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/unit_test/test_string_builder.c000066400000000000000000000047121354153536500215050ustar00rootroot00000000000000#include #include #include "lib/minunit.h" #include "lib/mlr_globals.h" #include "lib/mlrutil.h" #include "lib/string_builder.h" int tests_run = 0; int tests_failed = 0; int assertions_run = 0; int assertions_failed = 0; // ---------------------------------------------------------------- static char * test_simple() { string_builder_t* psb = sb_alloc(1); sb_init(psb, 1); mu_assert("error: case 0", streq("", sb_finish(psb))); sb_init(psb, 1); sb_append_char(psb, 'a'); mu_assert("error: case 1", streq("a", sb_finish(psb))); sb_init(psb, 1); sb_append_char(psb, 'a'); sb_append_char(psb, 'b'); mu_assert("error: case 2", streq("ab", sb_finish(psb))); sb_init(psb, 1); sb_append_char(psb, 'a'); sb_append_char(psb, 'b'); sb_append_char(psb, 'b'); sb_append_char(psb, 'c'); sb_append_char(psb, 'c'); sb_append_char(psb, 'e'); mu_assert("error: case 3", streq("abbcce", sb_finish(psb))); sb_init(psb, 1); sb_append_string(psb, ""); mu_assert("error: case 4", streq("", sb_finish(psb))); sb_init(psb, 1); sb_append_string(psb, "hello"); mu_assert("error: case 5", streq("hello", sb_finish(psb))); sb_init(psb, 1); sb_append_string(psb, "hello"); sb_append_char(psb, ','); sb_append_char(psb, ' '); sb_append_string(psb, "world"); sb_append_char(psb, '!'); mu_assert("error: case 6", streq("hello, world!", sb_finish(psb))); sb_init(psb, 2); sb_append_string(psb, "hello"); sb_append_char(psb, ','); sb_append_char(psb, ' '); sb_append_string(psb, "world"); sb_append_char(psb, '!'); mu_assert("error: case 7", streq("hello, world!", sb_finish(psb))); sb_init(psb, 32768); sb_append_string(psb, "hello"); sb_append_char(psb, ','); sb_append_char(psb, ' '); sb_append_string(psb, "world"); sb_append_char(psb, '!'); mu_assert("error: case 8", streq("hello, world!", sb_finish(psb))); return 0; } // ================================================================ static char * all_tests() { mu_run_test(test_simple); return 0; } int main(int argc, char **argv) { mlr_global_init(argv[0], NULL); printf("TEST_STRING_BUILDER ENTER\n"); char *result = all_tests(); printf("\n"); if (result != 0) { printf("Not all unit tests passed\n"); } else { printf("TEST_STRING_BUILDER: ALL UNIT TESTS PASSED\n"); } printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); return result != 0; } miller-5.6.2/c/vgrun000077500000000000000000000004021354153536500143270ustar00rootroot00000000000000#!/usr/bin/env ruby ARGV.shift cmd = "valgrind --leak-check=full mlrg" #cmd = "valgrind --leak-check=full --track-origins=yes mlrg" ARGV.each do |arg| cmd += " '#{arg}'" end cmd += " 2>&1 1> /dev/null | tools/clean-valgrind-output" puts cmd system(cmd) miller-5.6.2/c/winpatch.diff000066400000000000000000000044331354153536500157170ustar00rootroot00000000000000diff --git a/c/Makefile.am b/c/Makefile.am index 29a1e875..f6ecc180 100644 --- a/c/Makefile.am +++ b/c/Makefile.am @@ -19,7 +19,7 @@ mlr_LDADD= \ lib/libmlr.la \ parsing/libdsl.la \ aux/libaux.la \ - -lm + -lm -lpcreposix # Other executable variants diff --git a/c/aux/Makefile.am b/c/aux/Makefile.am index 76edb9ae..ff463e47 100644 --- a/c/aux/Makefile.am +++ b/c/aux/Makefile.am @@ -2,7 +2,7 @@ noinst_LTLIBRARIES= libaux.la libaux_la_SOURCES= aux_entries.c \ aux_entries.h -libaux_la_LIBADD= ../lib/libmlr.la \ +libaux_la_LIBADD= ../lib/libmlr.la AM_CPPFLAGS= -I${srcdir}/../ AM_CFLAGS= -std=gnu99 diff --git a/c/lib/mlr_arch.h b/c/lib/mlr_arch.h index 34ef1647..fea3dfef 100644 --- a/c/lib/mlr_arch.h +++ b/c/lib/mlr_arch.h @@ -4,6 +4,8 @@ #include #include +#define MLR_ON_MSYS2 + // ---------------------------------------------------------------- // Miller is single-threaded and the file-locking in getc is simply an unneeded // performance hit, so we intentionally call getc_unlocked(). But for MSYS2 diff --git a/c/unit_test/Makefile.am b/c/unit_test/Makefile.am index d529b321..02f4f539 100644 --- a/c/unit_test/Makefile.am +++ b/c/unit_test/Makefile.am @@ -27,7 +27,7 @@ all_ldadd= \ ../mapping/libmapping.la \ ../output/liboutput.la \ ../stream/libstream.la \ - -lm + -lm -lpcreposix # Unit-test mains test_mlrutil_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} diff --git a/c/winpatch.diff b/c/winpatch.diff index 332d779c..e69de29b 100644 --- a/c/winpatch.diff +++ b/c/winpatch.diff @@ -1,26 +0,0 @@ -diff --git a/c/Makefile.am b/c/Makefile.am -index 29a1e875..f6ecc180 100644 ---- a/c/Makefile.am -+++ b/c/Makefile.am -@@ -19,7 +19,7 @@ mlr_LDADD= \ - lib/libmlr.la \ - parsing/libdsl.la \ - aux/libaux.la \ -- -lm -+ -lm -lpcreposix - - # Other executable variants - -diff --git a/c/lib/mlr_arch.h b/c/lib/mlr_arch.h -index 97eaf5c8..30fe1d0c 100644 ---- a/c/lib/mlr_arch.h -+++ b/c/lib/mlr_arch.h -@@ -4,6 +4,8 @@ - #include - #include - -+#define MLR_ON_MSYS2 -+ - // ---------------------------------------------------------------- - // Miller is single-threaded and the file-locking in getc is simply an unneeded - // performance hit, so we intentionally call getc_unlocked(). But for MSYS2 miller-5.6.2/c/winrun.bat000066400000000000000000000000441354153536500152540ustar00rootroot00000000000000set PATH=%PATH%;\msys64\mingw64\bin miller-5.6.2/c/winstall.txt000066400000000000000000000002111354153536500156340ustar00rootroot00000000000000copy \msys64\miller\miller-git\miller\c\mlr.exe . copy \msys64\mingw64\bin\libpcreposix-0.dll . copy \msys64\mingw64\bin\libpcre-1.dll . miller-5.6.2/config.h.in000066400000000000000000000032741354153536500150530ustar00rootroot00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER miller-5.6.2/configure000077500000000000000000015274511354153536500147500ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for mlr 5.6.2. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='mlr' PACKAGE_TARNAME='mlr' PACKAGE_VERSION='5.6.2' PACKAGE_STRING='mlr 5.6.2' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="c/mlrmain.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL LEXLIB LEX_OUTPUT_ROOT LEX ac_ct_AR AR am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS LT_SYS_LIBRARY_PATH CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures mlr 5.6.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/mlr] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of mlr 5.6.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF mlr configure 5.6.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" 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_compile") 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; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; 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_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" 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_link") 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; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # 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 # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" 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_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { 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_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by mlr $as_me 5.6.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 ac_config_headers="$ac_config_headers config.h" ac_aux_dir= for ac_dir in autotools "$srcdir"/autotools; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; 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_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip" $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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; 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_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip" $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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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_AWK="$ac_prog" $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 AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='mlr' VERSION='5.6.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; 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_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # 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_CC="${ac_tool_prefix}gcc" $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 CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; 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_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_CC="gcc" $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_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" 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 CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; 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_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # 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_CC="${ac_tool_prefix}cc" $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 CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; 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_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no 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 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $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 if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; 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_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # 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_CC="$ac_tool_prefix$ac_prog" $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 CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_CC="$ac_prog" $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_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" 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 CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" 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_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" 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_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" 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_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done 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 $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" 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_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { 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_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes 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 $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" 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_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; 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$ac_prog" $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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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="$ac_prog" $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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # 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_LEX="$ac_prog" $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 LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" 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 "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_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 '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $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 fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_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 fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; 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_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$ac_tool_prefix$ac_prog" $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 DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$ac_prog" $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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" 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 DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" $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 OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; 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_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; 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_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool" $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 DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; 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_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool" $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="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 DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; 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$ac_prog" $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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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="$ac_prog" $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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; 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_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip" $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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; 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_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip" $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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib" $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 RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; 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_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib" $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" 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 RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt" $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 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; 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_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt" $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" 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 MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil" $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 DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; 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_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil" $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" 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 DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit" $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 NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; 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_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit" $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" 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 NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; 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_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo" $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 LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; 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_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo" $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_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" 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 LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; 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_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool" $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 OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; 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_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool" $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" 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 OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64" $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 OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; 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_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64" $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" 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 OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; 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 : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} 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_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} 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_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } 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 CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: # TODO: better source handling for lemon sources? # perhaps lemon can be improved to survive being called from the build dir ac_config_links="$ac_config_links c/parsing/lempar.c:c/parsing/lempar.c" ac_config_links="$ac_config_links c/parsing/mlr_dsl_parse.y:c/parsing/mlr_dsl_parse.y" ac_config_files="$ac_config_files Makefile c/cli/Makefile c/containers/Makefile c/parsing/Makefile c/dsl/Makefile c/experimental/Makefile c/input/Makefile c/lib/Makefile c/mapping/Makefile c/output/Makefile c/stream/Makefile c/auxents/Makefile c/unit_test/Makefile c/reg_test/Makefile c/reg_test/expected/Makefile c/reg_test/input/Makefile c/reg_test/input/rfc-csv/Makefile c/reg_test/input/comments/Makefile c/Makefile doc/Makefile" 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 # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by mlr $as_me 5.6.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_links="$ac_config_links" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ mlr config.status 5.6.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "c/parsing/lempar.c") CONFIG_LINKS="$CONFIG_LINKS c/parsing/lempar.c:c/parsing/lempar.c" ;; "c/parsing/mlr_dsl_parse.y") CONFIG_LINKS="$CONFIG_LINKS c/parsing/mlr_dsl_parse.y:c/parsing/mlr_dsl_parse.y" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "c/cli/Makefile") CONFIG_FILES="$CONFIG_FILES c/cli/Makefile" ;; "c/containers/Makefile") CONFIG_FILES="$CONFIG_FILES c/containers/Makefile" ;; "c/parsing/Makefile") CONFIG_FILES="$CONFIG_FILES c/parsing/Makefile" ;; "c/dsl/Makefile") CONFIG_FILES="$CONFIG_FILES c/dsl/Makefile" ;; "c/experimental/Makefile") CONFIG_FILES="$CONFIG_FILES c/experimental/Makefile" ;; "c/input/Makefile") CONFIG_FILES="$CONFIG_FILES c/input/Makefile" ;; "c/lib/Makefile") CONFIG_FILES="$CONFIG_FILES c/lib/Makefile" ;; "c/mapping/Makefile") CONFIG_FILES="$CONFIG_FILES c/mapping/Makefile" ;; "c/output/Makefile") CONFIG_FILES="$CONFIG_FILES c/output/Makefile" ;; "c/stream/Makefile") CONFIG_FILES="$CONFIG_FILES c/stream/Makefile" ;; "c/auxents/Makefile") CONFIG_FILES="$CONFIG_FILES c/auxents/Makefile" ;; "c/unit_test/Makefile") CONFIG_FILES="$CONFIG_FILES c/unit_test/Makefile" ;; "c/reg_test/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/Makefile" ;; "c/reg_test/expected/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/expected/Makefile" ;; "c/reg_test/input/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/input/Makefile" ;; "c/reg_test/input/rfc-csv/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/input/rfc-csv/Makefile" ;; "c/reg_test/input/comments/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/input/comments/Makefile" ;; "c/Makefile") CONFIG_FILES="$CONFIG_FILES c/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 $as_echo "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool 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 . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi miller-5.6.2/configure.ac000066400000000000000000000020621354153536500153100ustar00rootroot00000000000000AC_PREREQ([2.60]) # Manually increment on updates to https://github.com/johnkerl/miller/releases AC_INIT([mlr],[5.6.2]) AC_CONFIG_SRCDIR([c/mlrmain.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_AUX_DIR([autotools]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE AC_CANONICAL_HOST AC_PROG_CC m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AM_PROG_LEX AC_EXEEXT LT_INIT # TODO: better source handling for lemon sources? # perhaps lemon can be improved to survive being called from the build dir AC_CONFIG_LINKS([c/parsing/lempar.c:c/parsing/lempar.c]) AC_CONFIG_LINKS([c/parsing/mlr_dsl_parse.y:c/parsing/mlr_dsl_parse.y]) AC_CONFIG_FILES([Makefile c/cli/Makefile c/containers/Makefile c/parsing/Makefile c/dsl/Makefile c/experimental/Makefile c/input/Makefile c/lib/Makefile c/mapping/Makefile c/output/Makefile c/stream/Makefile c/auxents/Makefile c/unit_test/Makefile c/reg_test/Makefile c/reg_test/expected/Makefile c/reg_test/input/Makefile c/reg_test/input/rfc-csv/Makefile c/reg_test/input/comments/Makefile c/Makefile doc/Makefile]) AC_OUTPUT miller-5.6.2/data/000077500000000000000000000000001354153536500137335ustar00rootroot00000000000000miller-5.6.2/data/gen.c000066400000000000000000000003221354153536500146450ustar00rootroot00000000000000#include int main(int argc, char** argv) { long long n = 100; if (argc == 2) { (void)sscanf(argv[1], "%lld", &n); } for (long long i = 0; i < n; i++) { printf("i=%lld\n", i); } return 0; } miller-5.6.2/data/generators/000077500000000000000000000000001354153536500161045ustar00rootroot00000000000000miller-5.6.2/data/generators/abixy.c000077500000000000000000000015031354153536500173660ustar00rootroot00000000000000#include #include #include #include int main(void) { char* names[] = { "hat", "pan", "eks", "wye", "zee" }; int num_names = sizeof(names) / sizeof(names[0]); srand(time(0) ^ getpid()); for (int i = 0; ; i++) { int ai = rand() % num_names; int bi = rand() % num_names; char* a = names[ai]; char* b = names[bi]; double x = (double)rand() / (double)RAND_MAX; double y = (double)rand() / (double)RAND_MAX; printf("a=%s,b=%s,i=%d,x=%.18lf,y=%.18lf\n", a, b, i, x, y); } return 0; } // a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 // a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 // a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 // a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 miller-5.6.2/data/generators/compare-ols-pca.sh000066400000000000000000000015431354153536500214250ustar00rootroot00000000000000#!/bin/sh for p in \ -0.975 -0.950 -0.925 -0.900 \ -0.875 -0.850 -0.825 -0.800 \ -0.775 -0.750 -0.725 -0.700 \ -0.675 -0.650 -0.625 -0.600 \ -0.575 -0.550 -0.525 -0.500 \ -0.475 -0.450 -0.425 -0.400 \ -0.375 -0.350 -0.325 -0.300 \ -0.275 -0.250 -0.225 -0.200 \ -0.175 -0.150 -0.125 -0.100 \ -0.075 -0.050 -0.025 -0.000 \ 0.000 0.025 0.050 0.075 \ 0.100 0.125 0.150 0.175 \ 0.200 0.225 0.250 0.275 \ 0.300 0.325 0.350 0.375 \ 0.400 0.425 0.450 0.475 \ 0.500 0.525 0.550 0.575 \ 0.600 0.625 0.650 0.675 \ 0.700 0.725 0.750 0.775 \ 0.800 0.825 0.850 0.875 \ 0.900 0.925 0.950 0.975 do for try in 1 2 3 4 5; do #echo #echo p $p #a.out $p|mlr --oxtab stats2 -a linreg-ols,linreg-pca -f x,y echo "p=$p,`a.out $p | mlr stats2 -a linreg-ols,r2,linreg-pca -f x,y`" done done miller-5.6.2/data/generators/endless.c000077500000000000000000000001501354153536500177040ustar00rootroot00000000000000#include int main(void) { for (int c = 0; ; i++) printf("a=1,b=2,c=%d\n", c); return 0; } miller-5.6.2/data/generators/fuzz.rb000077500000000000000000000004451354153536500174350ustar00rootroot00000000000000#!/usr/bin/env ruby alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789~!#$%^&*()-_=+{}[];:"<>,./?' nlines=50 alphabet = alphabet.split('') nlines.times do length = rand(40) if rand < 0.1 length = 0 end output = (1..length).to_a.collect{alphabet.sample}.join('') puts output end miller-5.6.2/data/generators/plot-ols-pca.sh000066400000000000000000000010211354153536500207440ustar00rootroot00000000000000#!/bin/bash file="$1" # Set x_y_pca_m and x_y_pca_b as shell variables mlr --ofs newline stats2 -a linreg-ols,linreg-pca -f x,y $file eval $(mlr --ofs newline stats2 -a linreg-ols,linreg-pca -f x,y $file) # In addition to x and y, make a new yfit which is the line fit. Plot using your favorite tool. mlr --onidx put "\$olsfit=($x_y_ols_m*\$x)+$x_y_ols_b;\$pcafit=($x_y_pca_m*\$x)+$x_y_pca_b" \ then cut -x -f a,b,i $file \ | pgr -p -ms 2 -title 'linreg example' -xmin -0.1 -xmax 1.1 -ymin -0.1 -ymax 1.1 -legend 'y yfit' miller-5.6.2/data/generators/randuv-chomped.c000077500000000000000000000054711354153536500211760ustar00rootroot00000000000000#include #include #include #include // Samples unit-uniform x,y pairs, conditioned on being in two subboxes the size // of which is described by the "chomp" parameter. Intended for compare/contrast // of OLS and PCA linear-regression algorithms. // // 0 < chomp < 1: // // +----------------oooooooo // | oooooooo // | oooooooo // | oooooooo <-- chomp // | | // | | // oooooooo | <-- 1-chomp // oooooooo | // oooooooo | // oooooooo----------------+ // ^ ^ // | | // 1-chomp chomp // // chomp = 0 means output all x,y pairs // // -1 < chomp < 0: // 1+chomp -chomp // | | // v v // oooooooo----------------+ // oooooooo | // oooooooo | // oooooooo | <-- -chomp // | | // | | // | oooooooo <-- 1+chomp // | oooooooo // | oooooooo // +----------------oooooooo static void usage(char* argv0) { fprintf(stderr, "Usage: %s [chomp [n]]\n", argv0); exit(1); } int main(int argc, char** argv) { double chomp = 0.5; int n = 100000; int mash_x = 0; int mash_y = 0; if (argc == 2) { if (sscanf(argv[1], "%lf", &chomp) != 1) usage(argv[0]); } else if (argc == 3) { if (sscanf(argv[1], "%lf", &chomp) != 1) usage(argv[0]); if (sscanf(argv[2], "%d", &n) != 1) usage(argv[0]); } else if (argc == 5) { if (sscanf(argv[1], "%lf", &chomp) != 1) usage(argv[0]); if (sscanf(argv[2], "%d", &n) != 1) usage(argv[0]); if (sscanf(argv[3], "%d", &mash_x) != 1) usage(argv[0]); if (sscanf(argv[4], "%d", &mash_y) != 1) usage(argv[0]); } else { usage(argv[0]); } srand(time(0) ^ getpid()); if (chomp > 0.0) { double lo = 1.0 - chomp; double hi = chomp; for (int i = 0; i < n; /* increment in loop */) { double x = (double)rand() / (double)RAND_MAX; double y = (double)rand() / (double)RAND_MAX; if ((x < lo && y < lo) || (x > hi && y > hi)) { if (mash_x) { if (x < lo) x = 0.0; else x = 1.0; } if (mash_y) { if (y < lo) y = 0.0; else y = 1.0; } i++; printf("x=%.18lf,y=%.18lf\n", x, y); } } } else { double lo = 1+chomp; double hi = -chomp; for (int i = 0; i < n; /* increment in loop */) { double x = (double)rand() / (double)RAND_MAX; double y = (double)rand() / (double)RAND_MAX; if ((x < lo && y > hi) || (x > hi && y < lo)) { if (mash_x) { if (x < lo) x = 0.0; else x = 1.0; } if (mash_y) { if (y < lo) y = 0.0; else y = 1.0; } i++; printf("x=%.18lf,y=%.18lf\n", x, y); } } } return 0; } miller-5.6.2/data/generators/tail-rand-gen.rb000066400000000000000000000002471354153536500210560ustar00rootroot00000000000000#!/usr/bin/env ruby # For playing with stats1/2 -s $stdout.sync = true while true x = rand() y = rand() xy = x*y puts "x=#{x},y=#{y},xy=#{xy}" sleep 0.1 end miller-5.6.2/data/het000066400000000000000000000002041354153536500144320ustar00rootroot00000000000000d=5,e=7 d=5,e=7 a=1,b=2,c=3 d=5,e=7 a=1,b=2,c=3 a=1,b=2,c=3 d=5,e=7 a=1,b=2,c=3 d=5,e=7 a=1,b=2,c=3 a=1,b=2,c=3 d=5,e=7 a=1,b=2,c=3 miller-5.6.2/data/het.csv000066400000000000000000000003521354153536500152300ustar00rootroot00000000000000resource,loadsec,ok /path/to/file,0.45,true record_count,resource 100,/path/to/file resource,loadsec,ok /path/to/second/file,0.32,true record_count,resource 150,/path/to/second/file resource,loadsec,ok /some/other/path,0.97,false miller-5.6.2/data/het.dkvp000066400000000000000000000003461354153536500154040ustar00rootroot00000000000000resource=/path/to/file,loadsec=0.45,ok=true record_count=100,resource=/path/to/file resource=/path/to/second/file,loadsec=0.32,ok=true record_count=150,resource=/path/to/second/file resource=/some/other/path,loadsec=0.97,ok=false miller-5.6.2/data/medium000066400000000000000000022576271354153536500151630ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=11,x=0.7930488423451967,y=0.6505816637259333 a=zee,b=pan,i=12,x=0.3676141320555616,y=0.23614420670296965 a=eks,b=pan,i=13,x=0.4915175580479536,y=0.7709126592971468 a=eks,b=zee,i=14,x=0.5207382318405251,y=0.34141681118811673 a=eks,b=pan,i=15,x=0.07155556372719507,y=0.3596137145616235 a=pan,b=pan,i=16,x=0.5736853980681922,y=0.7554169353781729 a=zee,b=eks,i=17,x=0.29081949506712723,y=0.054478717073354166 a=hat,b=zee,i=18,x=0.05727869223575699,y=0.13343527626645157 a=zee,b=pan,i=19,x=0.43144132839222604,y=0.8442204830496998 a=eks,b=wye,i=20,x=0.38245149780530685,y=0.4730652428100751 a=hat,b=eks,i=21,x=0.0023058336158985338,y=0.16665492414949412 a=zee,b=wye,i=22,x=0.9270813051677103,y=0.5523236165919244 a=wye,b=pan,i=23,x=0.7975862089313748,y=0.8430307846116346 a=wye,b=hat,i=24,x=0.7286126830627567,y=0.19441962592638418 a=pan,b=eks,i=25,x=0.291444729043585,y=0.2680100577363237 a=eks,b=eks,i=26,x=0.7433678407354926,y=0.8295062256195103 a=wye,b=wye,i=27,x=0.9439687243972539,y=0.9305553444632164 a=hat,b=hat,i=28,x=0.5811879718711469,y=0.3934172489640808 a=eks,b=eks,i=29,x=0.05713488327208227,y=0.45012758797367913 a=zee,b=pan,i=30,x=0.7514525581952406,y=0.5869901584461873 a=eks,b=pan,i=31,x=0.5701563454882129,y=0.822178550628332 a=wye,b=wye,i=32,x=0.5112738997714514,y=0.33107563648490446 a=hat,b=pan,i=33,x=0.09303747345405,y=0.18404048980291832 a=hat,b=wye,i=34,x=0.49061881414751796,y=0.4721354893261027 a=zee,b=zee,i=35,x=0.12565828887119346,y=0.1936186210637818 a=pan,b=hat,i=36,x=0.9436794292675323,y=0.9111218711707734 a=wye,b=pan,i=37,x=0.056537252420374995,y=0.5450112991603523 a=pan,b=zee,i=38,x=0.508250895522605,y=0.12919877119684198 a=hat,b=pan,i=39,x=0.4591095934684415,y=0.6526252088703994 a=pan,b=hat,i=40,x=0.30302850095892986,y=0.2884018711352886 a=pan,b=hat,i=41,x=0.08143769954761992,y=0.030906489980379925 a=eks,b=eks,i=42,x=0.4614430092810964,y=0.552479841087209 a=zee,b=eks,i=43,x=0.8456728393970536,y=0.8501991168644704 a=pan,b=zee,i=44,x=0.8980511441946196,y=0.6728135588610029 a=pan,b=eks,i=45,x=0.6247151870956413,y=0.8275695927895051 a=pan,b=wye,i=46,x=0.08834857197997548,y=0.4444202016249801 a=eks,b=zee,i=47,x=0.4544511154182116,y=0.22787905378091933 a=hat,b=zee,i=48,x=0.4355461545206776,y=0.8758429593971929 a=wye,b=wye,i=49,x=0.21920222273431333,y=0.18979580426582043 a=wye,b=hat,i=50,x=0.4942114498754957,y=0.35138166631352374 a=hat,b=pan,i=51,x=0.744071908772339,y=0.9166693426799131 a=hat,b=pan,i=52,x=0.4302467414632086,y=0.9811029877493174 a=eks,b=eks,i=53,x=0.9985342548358704,y=0.9590495928336531 a=zee,b=eks,i=54,x=0.9314828033134765,y=0.8687851184407838 a=hat,b=wye,i=55,x=0.07268958233806955,y=0.49851026308988333 a=pan,b=zee,i=56,x=0.06982762802945175,y=0.033405940208281026 a=wye,b=pan,i=57,x=0.7302705254635534,y=0.7851652600343977 a=eks,b=zee,i=58,x=0.4767244077783851,y=0.6343726024100323 a=hat,b=hat,i=59,x=0.23821881669710454,y=0.2495882683265671 a=eks,b=eks,i=60,x=0.9940192460481878,y=0.23460275425446875 a=hat,b=wye,i=61,x=0.5661361038240923,y=0.30297884091448213 a=zee,b=eks,i=62,x=0.6925670766279615,y=0.6309283897492339 a=wye,b=wye,i=63,x=0.3034237022482048,y=0.4570355951663545 a=eks,b=zee,i=64,x=0.7150944451661773,y=0.44407448850132425 a=pan,b=hat,i=65,x=0.9374806227235818,y=0.5142245475995557 a=hat,b=hat,i=66,x=0.8467681996061774,y=0.7322484476601094 a=zee,b=hat,i=67,x=0.2584112989773649,y=0.4004276976232398 a=hat,b=wye,i=68,x=0.3362076167096233,y=0.10257516543234868 a=wye,b=wye,i=69,x=0.5045822356009134,y=0.37117047177904894 a=wye,b=wye,i=70,x=0.03459890490173678,y=0.6153285711977126 a=pan,b=hat,i=71,x=0.7573370490708291,y=0.07373145387947322 a=eks,b=wye,i=72,x=0.5981608655833305,y=0.6748831518079305 a=pan,b=zee,i=73,x=0.8832262928532921,y=0.41423111475143115 a=eks,b=eks,i=74,x=0.47929526118952226,y=0.04122489928296569 a=wye,b=hat,i=75,x=0.5852781359846899,y=0.2530983414392004 a=zee,b=eks,i=76,x=0.48749884261245857,y=0.4733893888865026 a=hat,b=zee,i=77,x=0.49083602889086597,y=0.9060845389367156 a=pan,b=eks,i=78,x=0.8066566257701527,y=0.5756861577587412 a=hat,b=eks,i=79,x=0.36764688836079906,y=0.3891921555248843 a=zee,b=zee,i=80,x=0.8318990957979263,y=0.9881725534495532 a=hat,b=wye,i=81,x=0.17534099646455403,y=0.2603138043676684 a=pan,b=eks,i=82,x=0.16030863176622356,y=0.3818559883741389 a=eks,b=eks,i=83,x=0.12617292637489663,y=0.2322389628774958 a=hat,b=wye,i=84,x=0.6438639100413308,y=0.7352455517915716 a=wye,b=wye,i=85,x=0.4632506196324333,y=0.47736149585488863 a=wye,b=hat,i=86,x=0.040744707036128314,y=0.03301111174849969 a=wye,b=hat,i=87,x=0.6505610031501867,y=0.8780409741829391 a=hat,b=eks,i=88,x=0.4467819157449152,y=0.25053527761538363 a=zee,b=zee,i=89,x=0.8495466480863977,y=0.32621281477326824 a=wye,b=hat,i=90,x=0.47950389571017593,y=0.42674583688195655 a=pan,b=pan,i=91,x=0.9831553489472493,y=0.8956966539093748 a=pan,b=eks,i=92,x=0.558471394524429,y=0.18097017277790595 a=wye,b=hat,i=93,x=0.5870769045363674,y=0.9424742244710793 a=zee,b=hat,i=94,x=0.9025271534348577,y=0.45924993374839684 a=wye,b=wye,i=95,x=0.49658345077223354,y=0.9177517032161158 a=wye,b=hat,i=96,x=0.6981858011144773,y=0.7500496060047478 a=zee,b=wye,i=97,x=0.9848235494485748,y=0.022289257742961754 a=pan,b=wye,i=98,x=0.7858397459820843,y=0.17868083683024716 a=zee,b=zee,i=99,x=0.9317555381388605,y=0.7821791090489817 a=wye,b=zee,i=100,x=0.45744184842338,y=0.8682791684654946 a=pan,b=hat,i=101,x=0.8551893009031044,y=0.5817332905396572 a=hat,b=zee,i=102,x=0.6981668049063121,y=0.7047537152787725 a=zee,b=hat,i=103,x=0.4414561871794942,y=0.9469598103198476 a=eks,b=hat,i=104,x=0.2120601199719776,y=0.5815731915374246 a=hat,b=pan,i=105,x=0.18287006336938183,y=0.7049942001890025 a=pan,b=hat,i=106,x=0.29173443059817517,y=0.7752097526541691 a=pan,b=pan,i=107,x=0.04969073649124267,y=0.3496530999805786 a=wye,b=eks,i=108,x=0.7225927195065096,y=0.4187910102687944 a=hat,b=zee,i=109,x=0.6352241884717337,y=0.5627539222500982 a=hat,b=eks,i=110,x=0.23052618333925456,y=0.6381223147292577 a=pan,b=hat,i=111,x=0.9154288048749503,y=0.6519249542119475 a=eks,b=hat,i=112,x=0.04982284101245715,y=0.7642422832858892 a=wye,b=zee,i=113,x=0.3320543853278368,y=0.30390890533333614 a=wye,b=wye,i=114,x=0.5448671671522891,y=0.4560013210405327 a=zee,b=eks,i=115,x=0.6020602802269807,y=0.49151403260985893 a=eks,b=eks,i=116,x=0.6525970433533309,y=0.6038254664200311 a=wye,b=hat,i=117,x=0.5151714700146957,y=0.07461822977630961 a=hat,b=zee,i=118,x=0.869072185421898,y=0.24935951674957813 a=eks,b=eks,i=119,x=0.7271030983543114,y=0.49297558822358944 a=wye,b=hat,i=120,x=0.7615397120903524,y=0.9797450222382247 a=pan,b=pan,i=121,x=0.613826139364826,y=0.9594055166987485 a=eks,b=wye,i=122,x=0.38075252326113784,y=0.015438488067683442 a=wye,b=wye,i=123,x=0.5795446579685392,y=0.35893969199526243 a=eks,b=zee,i=124,x=0.5720422015264689,y=0.5847353398497057 a=eks,b=zee,i=125,x=0.20393191361301366,y=0.5417271858177272 a=pan,b=zee,i=126,x=0.1495175173899136,y=0.37751439353621485 a=eks,b=wye,i=127,x=0.0766455676519866,y=0.8562543633218965 a=zee,b=hat,i=128,x=0.4962404023217607,y=0.3377314781015287 a=eks,b=hat,i=129,x=0.17009251828726202,y=0.517544397009653 a=eks,b=zee,i=130,x=0.8191166461936853,y=0.6036827248166735 a=zee,b=zee,i=131,x=0.8820504927451462,y=0.17262406561122967 a=eks,b=wye,i=132,x=0.6634725445660961,y=0.3836479034081546 a=hat,b=hat,i=133,x=0.10275440550496173,y=0.24475094001022435 a=eks,b=wye,i=134,x=0.224629215365013,y=0.6849916283018126 a=hat,b=hat,i=135,x=0.6950203918361871,y=0.6680826428134803 a=pan,b=pan,i=136,x=0.10793035048973287,y=0.26815648351708954 a=eks,b=hat,i=137,x=0.7869909808709532,y=0.3001475489161951 a=hat,b=eks,i=138,x=0.9349507622807055,y=0.1692665561677016 a=eks,b=zee,i=139,x=0.11179490410324633,y=0.603721160232944 a=wye,b=zee,i=140,x=0.21454586218739624,y=0.5492253214081585 a=pan,b=hat,i=141,x=0.2240396548356538,y=0.2500739139538637 a=zee,b=eks,i=142,x=0.7814387149488571,y=0.5062129648989182 a=pan,b=eks,i=143,x=0.7772439867698123,y=0.970133177930633 a=eks,b=wye,i=144,x=0.5300792274901561,y=0.3329098127249156 a=hat,b=zee,i=145,x=0.9039391234331099,y=0.17366986802981454 a=hat,b=wye,i=146,x=0.7557462730554149,y=0.8354966950279341 a=wye,b=wye,i=147,x=0.19573082452335644,y=0.16675321752165628 a=hat,b=eks,i=148,x=0.6206402300915382,y=0.821425348018401 a=pan,b=pan,i=149,x=0.2983431833827429,y=0.49328391364637114 a=zee,b=wye,i=150,x=0.6465476525020952,y=0.010839998639479487 a=pan,b=wye,i=151,x=0.7628297388566211,y=0.25945524901441286 a=eks,b=zee,i=152,x=0.39677449578160984,y=0.01242383070673192 a=pan,b=eks,i=153,x=0.3403054358911233,y=0.20856161342555235 a=wye,b=wye,i=154,x=0.7473556150405872,y=0.5878222144661077 a=pan,b=wye,i=155,x=0.8308266904064261,y=0.6160102482290218 a=hat,b=zee,i=156,x=0.06969918779892115,y=0.12332013609343595 a=zee,b=zee,i=157,x=0.08770785920874291,y=0.1694018877034732 a=hat,b=wye,i=158,x=0.5750041834429883,y=0.8988889437381339 a=zee,b=hat,i=159,x=0.3949341964723728,y=0.21461635038581106 a=wye,b=hat,i=160,x=0.7700798652245849,y=0.07882734380346257 a=hat,b=zee,i=161,x=0.241833257737751,y=0.2595728278064434 a=zee,b=zee,i=162,x=0.30865469474514673,y=0.04807979540420082 a=hat,b=eks,i=163,x=0.1276067871735147,y=0.60275669734591 a=eks,b=hat,i=164,x=0.24635677428468206,y=0.026325305117816278 a=wye,b=wye,i=165,x=0.8845921239269926,y=0.31637090814582536 a=wye,b=hat,i=166,x=0.44829526779246864,y=0.9231413532216132 a=eks,b=wye,i=167,x=0.4655842156857275,y=0.37721410941530287 a=wye,b=hat,i=168,x=0.7006512384825274,y=0.47994014933998974 a=pan,b=eks,i=169,x=0.772606170256783,y=0.2822045789726282 a=hat,b=zee,i=170,x=0.12938897709124275,y=0.8919705275016901 a=wye,b=wye,i=171,x=0.06972810304721344,y=0.9401580287060083 a=pan,b=pan,i=172,x=0.5464624353474236,y=0.4315049479416151 a=wye,b=pan,i=173,x=0.15061916413672838,y=0.399506367745217 a=hat,b=eks,i=174,x=0.2254130292138935,y=0.6999307939959456 a=zee,b=pan,i=175,x=0.3493963468867093,y=0.2448706490036231 a=hat,b=hat,i=176,x=0.5951138587106596,y=0.851049910114082 a=hat,b=wye,i=177,x=0.39004663496677305,y=0.2404193708137553 a=hat,b=eks,i=178,x=0.7778109990978507,y=0.4353416180768024 a=pan,b=pan,i=179,x=0.5158487973995551,y=0.3857173070225889 a=hat,b=wye,i=180,x=0.0983048320526585,y=0.3605050602699248 a=hat,b=eks,i=181,x=0.06881556874834038,y=0.02776354780439838 a=eks,b=zee,i=182,x=0.8795883767333226,y=0.7913268326625821 a=pan,b=pan,i=183,x=0.6986560980027141,y=0.10540771793654646 a=zee,b=wye,i=184,x=0.3918665170311699,y=0.8726348045234303 a=eks,b=pan,i=185,x=0.49921597322068556,y=0.7926600920736209 a=zee,b=wye,i=186,x=0.4488271641509629,y=0.6778168337109446 a=wye,b=eks,i=187,x=0.1765361867584282,y=0.7166382775023783 a=eks,b=wye,i=188,x=0.7195019639137887,y=0.6101293217348989 a=pan,b=eks,i=189,x=0.48651849518653256,y=0.3310583783958194 a=zee,b=hat,i=190,x=0.9187417496732211,y=0.01357822326345659 a=wye,b=hat,i=191,x=0.6036920337427446,y=0.10361603649711493 a=pan,b=wye,i=192,x=0.7721928274839366,y=0.730996300378133 a=eks,b=hat,i=193,x=0.8250294635521217,y=0.014592155431475518 a=eks,b=eks,i=194,x=0.6636241298839136,y=0.5259126321800084 a=pan,b=hat,i=195,x=0.6642514282295026,y=0.9448672883012781 a=eks,b=pan,i=196,x=0.36476881994778887,y=0.7206833750684084 a=wye,b=wye,i=197,x=0.07466320732554754,y=0.1470636187800869 a=eks,b=hat,i=198,x=0.04736012928828348,y=0.09632719090688924 a=zee,b=hat,i=199,x=0.07495669138561056,y=0.0033556400316512303 a=eks,b=pan,i=200,x=0.25160946724271127,y=0.3153026554896944 a=wye,b=eks,i=201,x=0.43178278951820004,y=0.6395054755372058 a=wye,b=eks,i=202,x=0.8067281849918618,y=0.45331926346459483 a=zee,b=zee,i=203,x=0.9685128952631964,y=0.10935985453746455 a=wye,b=eks,i=204,x=0.0866873459163141,y=0.08597589292509311 a=pan,b=hat,i=205,x=0.2896936796389531,y=0.9186383587296384 a=hat,b=wye,i=206,x=0.9712065807938725,y=0.8814161529894458 a=wye,b=zee,i=207,x=0.23493288178707172,y=0.9202087940900824 a=wye,b=eks,i=208,x=0.638370131847482,y=0.6031891659074958 a=hat,b=eks,i=209,x=0.08722321261724375,y=0.1699175655988554 a=eks,b=hat,i=210,x=0.4371757785089875,y=0.6860038700835268 a=wye,b=pan,i=211,x=0.20888984269730204,y=0.947777347490174 a=hat,b=zee,i=212,x=0.7028540974957029,y=0.2764448806144022 a=pan,b=zee,i=213,x=0.910694728148218,y=0.538005658230806 a=wye,b=zee,i=214,x=0.3552257616717024,y=0.7272883402124964 a=pan,b=zee,i=215,x=0.8250379925053151,y=0.7418087278106543 a=zee,b=zee,i=216,x=0.8378134809357036,y=0.016812447916020323 a=pan,b=eks,i=217,x=0.22619506065989436,y=0.6341340791970084 a=pan,b=zee,i=218,x=0.9817869716469648,y=0.49201333191352814 a=pan,b=wye,i=219,x=0.8177491896372755,y=0.4265728829799966 a=wye,b=eks,i=220,x=0.9707941416650918,y=0.5446983207141396 a=hat,b=eks,i=221,x=0.9623773206695981,y=0.7961697529692682 a=hat,b=wye,i=222,x=0.19310273682362344,y=0.7734873966667793 a=wye,b=eks,i=223,x=0.7008326115259359,y=0.8171891486894675 a=eks,b=pan,i=224,x=0.7439085948665143,y=0.02788543310463787 a=eks,b=zee,i=225,x=0.2567945604892924,y=0.24424154648770224 a=pan,b=hat,i=226,x=0.6257005988135916,y=0.042000423208434334 a=zee,b=wye,i=227,x=0.5324819986117966,y=0.43906785967359585 a=hat,b=zee,i=228,x=0.6353440745576056,y=0.8565317288607986 a=wye,b=hat,i=229,x=0.5097848345332788,y=0.8249641724859278 a=eks,b=hat,i=230,x=0.23668880559764938,y=0.9795999884306217 a=zee,b=wye,i=231,x=0.4952269526615126,y=0.998055015071858 a=eks,b=wye,i=232,x=0.5507351778417637,y=0.7118263982857057 a=hat,b=hat,i=233,x=0.2131489206395062,y=0.08647965840929162 a=wye,b=pan,i=234,x=0.4686994090286404,y=0.7301121378084597 a=wye,b=hat,i=235,x=0.37176718775770257,y=0.8655732826697372 a=eks,b=hat,i=236,x=0.06364189456177682,y=0.4949298511378918 a=pan,b=zee,i=237,x=0.4520047694204633,y=0.7431070780984742 a=pan,b=pan,i=238,x=0.1802663344712152,y=0.40747996818620213 a=zee,b=pan,i=239,x=0.7069459453313341,y=0.24901349035427478 a=wye,b=eks,i=240,x=0.11369718773090787,y=0.4362931656865052 a=pan,b=hat,i=241,x=0.5298443076284122,y=0.7286240415109126 a=hat,b=hat,i=242,x=0.17197294875303992,y=0.42960373892313586 a=hat,b=wye,i=243,x=0.40008739772830226,y=0.3431833719273334 a=wye,b=eks,i=244,x=0.047932173034763714,y=0.15974685050052528 a=hat,b=hat,i=245,x=0.6047108965207437,y=0.00023825870459259768 a=eks,b=hat,i=246,x=0.5031823192345856,y=0.1530255494090368 a=hat,b=hat,i=247,x=0.13552744935597638,y=0.7642516336910976 a=hat,b=wye,i=248,x=0.8794750860292233,y=0.9633187985176084 a=eks,b=pan,i=249,x=0.7650242839504571,y=0.13484454578382632 a=zee,b=wye,i=250,x=0.18225031260376368,y=0.42639010352161133 a=eks,b=eks,i=251,x=0.6366142860676015,y=0.7279525837465141 a=eks,b=pan,i=252,x=0.7489029711796827,y=0.6216975230273389 a=zee,b=pan,i=253,x=0.2896285025325088,y=0.4107984626977105 a=wye,b=pan,i=254,x=0.40783269275640843,y=0.07873948964651878 a=pan,b=pan,i=255,x=0.4310139640663371,y=0.133668391263563 a=pan,b=zee,i=256,x=0.715203591010661,y=0.3049124395637157 a=pan,b=eks,i=257,x=0.08448448051072821,y=0.8143297719717848 a=pan,b=wye,i=258,x=0.21573850217727963,y=0.7972074125763187 a=zee,b=wye,i=259,x=0.6485993255572561,y=0.9239849074696734 a=pan,b=hat,i=260,x=0.7786431758578792,y=0.9906513397624532 a=pan,b=hat,i=261,x=0.9547041198642143,y=0.46035613392656816 a=eks,b=wye,i=262,x=0.20205307067280354,y=0.8159138156555881 a=pan,b=pan,i=263,x=0.735966834511216,y=0.8642501328542477 a=pan,b=pan,i=264,x=0.0365319279313181,y=0.01547685459691761 a=hat,b=zee,i=265,x=0.594302803640343,y=0.26329631667022746 a=zee,b=zee,i=266,x=0.8645462287461376,y=0.3192124287902842 a=pan,b=hat,i=267,x=0.8759426552130376,y=0.8128071892594659 a=wye,b=zee,i=268,x=0.334247707070338,y=0.07108295911604934 a=zee,b=pan,i=269,x=0.8962601880511555,y=0.42772238076912505 a=zee,b=wye,i=270,x=0.9840112531079188,y=0.03199538649369371 a=pan,b=zee,i=271,x=0.38241767385691083,y=0.47652036205919546 a=zee,b=eks,i=272,x=0.5076219094472946,y=0.8598422972471865 a=wye,b=eks,i=273,x=0.4666963378862372,y=0.8511149275440506 a=eks,b=pan,i=274,x=0.5094754996388772,y=0.8630831763542761 a=pan,b=pan,i=275,x=0.0702163840810267,y=0.49744457340186665 a=zee,b=eks,i=276,x=0.7494501132627315,y=0.831480047566556 a=hat,b=eks,i=277,x=0.9160765564583604,y=0.9665017202156387 a=eks,b=wye,i=278,x=0.3405469715018894,y=0.39395981360241694 a=hat,b=wye,i=279,x=0.7709353111571556,y=0.0741458017139579 a=hat,b=zee,i=280,x=0.30432388754514095,y=0.9094986664334528 a=pan,b=wye,i=281,x=0.2807837856477664,y=0.5185246955685402 a=pan,b=wye,i=282,x=0.5934682340749541,y=0.33551685400674336 a=wye,b=eks,i=283,x=0.3857770915059473,y=0.2520288213780115 a=eks,b=hat,i=284,x=0.2823409534969953,y=0.6424410943891458 a=hat,b=hat,i=285,x=0.5231416402386272,y=0.8268208737366626 a=pan,b=pan,i=286,x=0.7741141348990104,y=0.22151996054945777 a=zee,b=zee,i=287,x=0.6530502437373199,y=0.28290337083561623 a=hat,b=wye,i=288,x=0.41079993080494803,y=0.6788656658934381 a=wye,b=zee,i=289,x=0.6118394231953472,y=0.2017219713934819 a=wye,b=zee,i=290,x=0.3867610140403043,y=0.5119527530254661 a=eks,b=wye,i=291,x=0.2544198663482523,y=0.9572070479148829 a=hat,b=wye,i=292,x=0.7857064933058493,y=0.5074038206162027 a=wye,b=wye,i=293,x=0.48768027264524494,y=0.858140960943469 a=hat,b=zee,i=294,x=0.3704436769585995,y=0.3120229742987346 a=eks,b=zee,i=295,x=0.4706744506967422,y=0.5788534321133716 a=zee,b=hat,i=296,x=0.014194623144548224,y=0.5791381505013093 a=eks,b=wye,i=297,x=0.15536712579543976,y=0.24068588834787485 a=pan,b=wye,i=298,x=0.2554134483434475,y=0.5924810928892916 a=zee,b=eks,i=299,x=0.8277425415026218,y=0.27844715446692714 a=pan,b=hat,i=300,x=0.7146992829593928,y=0.5429822061061883 a=zee,b=eks,i=301,x=0.30731567290334727,y=0.5306701215524663 a=zee,b=pan,i=302,x=0.7544266351625367,y=0.36462424597130505 a=pan,b=pan,i=303,x=0.9181020134419905,y=0.081593490099233 a=eks,b=eks,i=304,x=0.7883980268101866,y=0.23415186590563442 a=wye,b=pan,i=305,x=0.5103104415224277,y=0.6005096012353242 a=hat,b=zee,i=306,x=0.9883564018988095,y=0.42316915798436483 a=wye,b=eks,i=307,x=0.6064616942445623,y=0.565814763986132 a=hat,b=eks,i=308,x=0.40085643331635357,y=0.09395240921387538 a=pan,b=pan,i=309,x=0.5155063246540209,y=0.1492080054471291 a=zee,b=pan,i=310,x=0.5166885866040305,y=0.05595794333763471 a=eks,b=eks,i=311,x=0.09369987234653387,y=0.06802932452953492 a=wye,b=zee,i=312,x=0.07612086875946633,y=0.27326136662066614 a=zee,b=eks,i=313,x=0.25858901604075357,y=0.8923698739553502 a=zee,b=pan,i=314,x=0.906390102311296,y=0.454409013999299 a=hat,b=zee,i=315,x=0.34523405773089744,y=0.4354275687352226 a=zee,b=hat,i=316,x=0.13504220690406277,y=0.3795391182446578 a=eks,b=pan,i=317,x=0.46957588924343485,y=0.3400251823752689 a=wye,b=hat,i=318,x=0.18637343210075064,y=0.45983893886751714 a=pan,b=zee,i=319,x=0.16606734288775093,y=0.21473289889901537 a=zee,b=pan,i=320,x=0.8307425029665492,y=0.9687981266665243 a=zee,b=zee,i=321,x=0.6999788077300872,y=0.526382289897085 a=hat,b=eks,i=322,x=0.9979624896088678,y=0.38870780074027156 a=wye,b=zee,i=323,x=0.7167871674039571,y=0.8146661281584913 a=wye,b=wye,i=324,x=0.22862799493809793,y=0.45776956542633673 a=hat,b=hat,i=325,x=0.8502045677344342,y=0.06531154070205691 a=wye,b=pan,i=326,x=0.5817376394212832,y=0.2811644998873859 a=zee,b=zee,i=327,x=0.1254581943608959,y=0.01871101782750706 a=eks,b=pan,i=328,x=0.28146620713469994,y=0.45414955407945334 a=pan,b=eks,i=329,x=0.03763317797683374,y=0.2401750869051401 a=pan,b=pan,i=330,x=0.27222804399530887,y=0.8283442325329333 a=wye,b=hat,i=331,x=0.862986205564722,y=0.021211611355487214 a=wye,b=hat,i=332,x=0.5529572417601349,y=0.10365182374492421 a=eks,b=hat,i=333,x=0.0677128764291699,y=0.13888954761924865 a=hat,b=hat,i=334,x=0.8122872254151258,y=0.9343598605592562 a=wye,b=wye,i=335,x=0.3136448355146325,y=0.3030034178002945 a=wye,b=eks,i=336,x=0.3723857599541325,y=0.12311828419230408 a=wye,b=eks,i=337,x=0.8517094711110174,y=0.7107950535254092 a=hat,b=wye,i=338,x=0.29886440908142087,y=0.44199727275540557 a=eks,b=zee,i=339,x=0.4583899635695151,y=0.06228530919187403 a=wye,b=eks,i=340,x=0.23528308849163693,y=0.3882734087125834 a=zee,b=eks,i=341,x=0.6862997171756073,y=0.15490090302333992 a=pan,b=eks,i=342,x=0.23702739214960689,y=0.13214761320752622 a=pan,b=wye,i=343,x=0.2724033449540535,y=0.45196387793887527 a=eks,b=hat,i=344,x=0.6604478311777118,y=0.8554572649437313 a=wye,b=wye,i=345,x=0.11573898528830462,y=0.7254541105786084 a=eks,b=eks,i=346,x=0.4314505110520016,y=0.35990136288181707 a=eks,b=wye,i=347,x=0.013154121167666677,y=0.8417854982925147 a=pan,b=hat,i=348,x=0.14077282669103053,y=0.6589658883444618 a=wye,b=wye,i=349,x=0.4473451552346923,y=0.560474868919231 a=pan,b=eks,i=350,x=0.7749620340665812,y=0.6934753745173732 a=hat,b=hat,i=351,x=0.12676653838858187,y=0.7306420663956253 a=eks,b=eks,i=352,x=0.8908223033829336,y=0.756634722087033 a=wye,b=wye,i=353,x=0.3561234723336817,y=0.25848510016885773 a=wye,b=zee,i=354,x=0.07167250764974309,y=0.04755739805455228 a=eks,b=pan,i=355,x=0.6260379271888249,y=0.9999648102177897 a=wye,b=eks,i=356,x=0.9105767596182323,y=0.6275830055247574 a=hat,b=pan,i=357,x=0.584955714773423,y=0.2694061184561868 a=pan,b=eks,i=358,x=0.7793042404385853,y=0.3575901643950514 a=wye,b=pan,i=359,x=0.46013788462671257,y=0.07923543496739904 a=hat,b=pan,i=360,x=0.8209514688962976,y=0.322642334738109 a=eks,b=zee,i=361,x=0.43390275775283316,y=0.6995243187004873 a=eks,b=hat,i=362,x=0.9858910807074641,y=0.6063471357443468 a=zee,b=eks,i=363,x=0.0603319537288447,y=0.903548344851872 a=hat,b=pan,i=364,x=0.22048203347659634,y=0.9648789798257121 a=eks,b=zee,i=365,x=0.2429839206497697,y=0.5838305480202817 a=wye,b=wye,i=366,x=0.8697917247196751,y=0.11967963730609776 a=wye,b=wye,i=367,x=0.09106459676772116,y=0.7044423738663792 a=pan,b=eks,i=368,x=0.3244982645940453,y=0.8587867062845185 a=hat,b=zee,i=369,x=0.18008064179308536,y=0.31358866392662854 a=hat,b=zee,i=370,x=0.7032327626709055,y=0.4844486606638011 a=hat,b=wye,i=371,x=0.48451798820346725,y=0.08468945923087656 a=zee,b=hat,i=372,x=0.8713237021766693,y=0.18775438815480894 a=wye,b=hat,i=373,x=0.9062681519121573,y=0.6942343130437282 a=pan,b=hat,i=374,x=0.8711355253639088,y=0.21056604953749913 a=hat,b=zee,i=375,x=0.5411012705685904,y=0.49472395657244717 a=wye,b=pan,i=376,x=0.9148906431225965,y=0.6865707031323998 a=pan,b=zee,i=377,x=0.0873375214879103,y=0.9512779365638556 a=pan,b=zee,i=378,x=0.30162069682241655,y=0.59487547378256 a=hat,b=wye,i=379,x=0.723368325539696,y=0.9239506513259356 a=wye,b=hat,i=380,x=0.3284426805925267,y=0.8338493039051695 a=pan,b=wye,i=381,x=0.5162110464238533,y=0.028931464336820256 a=pan,b=wye,i=382,x=0.10290553602186514,y=0.15037258795056763 a=wye,b=wye,i=383,x=0.5865652699352844,y=0.14421401993609984 a=pan,b=zee,i=384,x=0.5491251090567257,y=0.9145935172366898 a=hat,b=eks,i=385,x=0.8339951693283406,y=0.3033056717379309 a=hat,b=wye,i=386,x=0.7028181061111627,y=0.3480791920548796 a=eks,b=wye,i=387,x=0.5486856774729921,y=0.46054237397329445 a=wye,b=eks,i=388,x=0.5468979682673912,y=0.5716892746572024 a=wye,b=pan,i=389,x=0.8711354046280742,y=0.7000550458179466 a=pan,b=zee,i=390,x=0.32965901763834493,y=0.4764401595448211 a=pan,b=wye,i=391,x=0.8693210254564347,y=0.39042419999368405 a=hat,b=eks,i=392,x=0.2668797007178766,y=0.9538969507044115 a=zee,b=eks,i=393,x=0.6953842859899757,y=0.9546625350220701 a=eks,b=hat,i=394,x=0.48773327214873685,y=0.6690593283014772 a=wye,b=eks,i=395,x=0.5496441289397975,y=0.9130998398573059 a=pan,b=eks,i=396,x=0.12088261778903142,y=0.2915014516366682 a=pan,b=pan,i=397,x=0.6527193676882986,y=0.5140617542371629 a=pan,b=pan,i=398,x=0.7206692031862747,y=0.4350967619148699 a=eks,b=eks,i=399,x=0.010510711223853386,y=0.08397157710064007 a=wye,b=zee,i=400,x=0.3788030627053418,y=0.7831833396943373 a=eks,b=pan,i=401,x=0.08749968996168989,y=0.3703456609602497 a=eks,b=wye,i=402,x=0.9870844142664434,y=0.07570772729385356 a=zee,b=hat,i=403,x=0.8371422088541587,y=0.9376680469763548 a=eks,b=wye,i=404,x=0.9276329844702215,y=0.30151980049765137 a=wye,b=wye,i=405,x=0.5955452707872064,y=0.5663276615611866 a=hat,b=wye,i=406,x=0.3016062899704931,y=0.1481359817881971 a=hat,b=pan,i=407,x=0.3557842656104653,y=0.8619332107179143 a=zee,b=hat,i=408,x=0.13829592936600588,y=0.4643427499672679 a=zee,b=zee,i=409,x=0.3885779964636952,y=0.8355517296208552 a=pan,b=pan,i=410,x=0.3369457823719886,y=0.6595559599218499 a=hat,b=pan,i=411,x=0.130208615128796,y=0.8157820943662931 a=zee,b=hat,i=412,x=0.5684534581822444,y=0.7576411674301173 a=wye,b=wye,i=413,x=0.1924325306941328,y=0.7584253339041852 a=pan,b=zee,i=414,x=0.09069900090430805,y=0.8557236931723043 a=hat,b=pan,i=415,x=0.9713015252603615,y=0.4287777397307879 a=wye,b=pan,i=416,x=0.8898988612865336,y=0.8930372261944983 a=wye,b=eks,i=417,x=0.9035749108061284,y=0.11475796206309319 a=zee,b=zee,i=418,x=0.36259161480392366,y=0.03106838412360613 a=zee,b=eks,i=419,x=0.9669197256156522,y=0.9525495700296412 a=zee,b=hat,i=420,x=0.2472176643017414,y=0.4766709326963189 a=hat,b=pan,i=421,x=0.5484055610018505,y=0.7401624563813598 a=wye,b=eks,i=422,x=0.9843960933372673,y=0.8274060260108933 a=pan,b=pan,i=423,x=0.08736573145179394,y=0.47080422361654306 a=pan,b=hat,i=424,x=0.41967399152692275,y=0.11281967088191636 a=eks,b=zee,i=425,x=0.1541100762311376,y=0.2899666127124777 a=wye,b=wye,i=426,x=0.8189862069673424,y=0.04342559105332089 a=pan,b=wye,i=427,x=0.42286545073700454,y=0.4861336428493519 a=pan,b=pan,i=428,x=0.8513998866661314,y=0.18344030684570167 a=eks,b=zee,i=429,x=0.10194433521396717,y=0.20006319684657992 a=eks,b=wye,i=430,x=0.5857626187839062,y=0.5321382987939495 a=zee,b=eks,i=431,x=0.8583324116859721,y=0.994808666622831 a=eks,b=eks,i=432,x=0.7853965492176864,y=0.9164907493679918 a=wye,b=hat,i=433,x=0.1717036971229997,y=0.820252389423276 a=pan,b=zee,i=434,x=0.3719511404416881,y=0.9187328704871145 a=hat,b=hat,i=435,x=0.02744685418877102,y=0.6376228704372093 a=eks,b=eks,i=436,x=0.6933382044724179,y=0.6338292052517879 a=wye,b=pan,i=437,x=0.37712852260119445,y=0.2533800875229283 a=zee,b=hat,i=438,x=0.3425559514322971,y=0.7292109440844495 a=zee,b=wye,i=439,x=0.6058194548394703,y=0.1349506589946292 a=wye,b=wye,i=440,x=0.33549631716864114,y=0.5044355487644854 a=zee,b=pan,i=441,x=0.6917806418576951,y=0.3830829559702531 a=pan,b=eks,i=442,x=0.3051229752913909,y=0.3927572304818523 a=hat,b=eks,i=443,x=0.35262831982100495,y=0.5903148558170942 a=wye,b=hat,i=444,x=0.009596883381098431,y=0.7627826236742389 a=hat,b=pan,i=445,x=0.693707602798371,y=0.9355332457358334 a=eks,b=eks,i=446,x=0.32733245362496055,y=0.5235444779640992 a=zee,b=eks,i=447,x=0.31894704216497904,y=0.8410708131567204 a=hat,b=eks,i=448,x=0.18956024307293828,y=0.7651866504059165 a=zee,b=wye,i=449,x=0.8505833795792004,y=0.9244534714701724 a=eks,b=wye,i=450,x=0.6844926010909408,y=0.614368249300009 a=hat,b=pan,i=451,x=0.6296608646086276,y=0.4470390043301713 a=pan,b=pan,i=452,x=0.5045572974857859,y=0.4793103881363998 a=hat,b=wye,i=453,x=4.509679127584487e-05,y=0.22031599198733764 a=wye,b=wye,i=454,x=0.2443606067405415,y=0.6398645261834082 a=wye,b=wye,i=455,x=0.804633328675182,y=0.48300382684775944 a=eks,b=zee,i=456,x=0.410350850017583,y=0.9892210383992472 a=wye,b=hat,i=457,x=0.0933236073619339,y=0.9291691566694624 a=zee,b=zee,i=458,x=0.4844711931621539,y=0.27495542782645344 a=eks,b=eks,i=459,x=0.3611062645335037,y=0.40226115300495247 a=pan,b=eks,i=460,x=0.8223780119629852,y=0.9126194557839794 a=hat,b=eks,i=461,x=0.3252432769092649,y=0.658382796137213 a=zee,b=wye,i=462,x=0.5396036185572467,y=0.25336124010413796 a=hat,b=wye,i=463,x=0.5222301823622756,y=0.38087060395976524 a=pan,b=hat,i=464,x=0.7246049387606904,y=0.45691838399060136 a=hat,b=pan,i=465,x=0.9995625801977208,y=0.23491153961213218 a=hat,b=wye,i=466,x=0.4276402941162851,y=0.029924580250603294 a=wye,b=hat,i=467,x=0.8502632858410699,y=0.22370398176509754 a=wye,b=zee,i=468,x=0.6372967659876994,y=0.024138253192505066 a=eks,b=eks,i=469,x=0.12954404025896205,y=0.13771358880489826 a=pan,b=eks,i=470,x=0.6368746235564642,y=0.31586391338281394 a=eks,b=hat,i=471,x=0.7738089394551085,y=0.4919427799587256 a=zee,b=hat,i=472,x=0.5201558372951883,y=0.5500922568519445 a=pan,b=zee,i=473,x=0.28235480114669276,y=0.01789197833877909 a=hat,b=zee,i=474,x=0.9737504172221616,y=0.5620581498765591 a=wye,b=wye,i=475,x=0.39240247578786536,y=0.7480836274059417 a=wye,b=pan,i=476,x=0.7337177223414596,y=0.33451199751230254 a=eks,b=eks,i=477,x=0.034584510761659026,y=0.43469127809305075 a=pan,b=wye,i=478,x=0.9492235640609361,y=0.3382725473893562 a=eks,b=hat,i=479,x=0.935311382854882,y=0.5581569700476232 a=pan,b=eks,i=480,x=0.6265973838424406,y=0.7055055050235215 a=hat,b=pan,i=481,x=0.0821695972704326,y=0.35414544375322354 a=wye,b=zee,i=482,x=0.4898198409702952,y=0.9025273479460141 a=wye,b=hat,i=483,x=0.2316003856711063,y=0.43956136357576003 a=eks,b=eks,i=484,x=0.6641863677348001,y=0.6447460873709984 a=wye,b=wye,i=485,x=0.2617661797012584,y=0.42266716043415287 a=wye,b=hat,i=486,x=0.30133537944217137,y=0.10221649013386602 a=eks,b=hat,i=487,x=0.06223193198721644,y=0.9204160326915265 a=hat,b=pan,i=488,x=0.9232269980553737,y=0.6301846340531019 a=zee,b=eks,i=489,x=0.47256613643793366,y=0.043043925407927786 a=wye,b=eks,i=490,x=0.05509649068009248,y=0.7725681545197371 a=wye,b=pan,i=491,x=0.2513964759410543,y=0.029649890186790206 a=eks,b=zee,i=492,x=0.24404562827103082,y=0.21765361298784158 a=hat,b=eks,i=493,x=0.1664695548518379,y=0.24789421681152946 a=pan,b=eks,i=494,x=0.3713429019328153,y=0.6705235456747188 a=zee,b=eks,i=495,x=0.9946822846385448,y=0.4850476812126694 a=wye,b=wye,i=496,x=0.9274092551834339,y=0.2541879419841372 a=wye,b=wye,i=497,x=0.7021621810855977,y=0.533290838271892 a=eks,b=eks,i=498,x=0.7227433480694091,y=0.6862413971745326 a=zee,b=zee,i=499,x=0.36612213225774104,y=0.6372766826351961 a=zee,b=pan,i=500,x=0.9372377490487999,y=0.5618667924767166 a=eks,b=pan,i=501,x=0.040475122297163324,y=0.16567765824398517 a=hat,b=wye,i=502,x=0.6077314844130164,y=0.768942559474086 a=pan,b=pan,i=503,x=0.0738664869271265,y=0.25330608830961776 a=pan,b=hat,i=504,x=0.25531331734422,y=0.7865269588902073 a=eks,b=wye,i=505,x=0.910806292687196,y=0.9026141937080411 a=hat,b=pan,i=506,x=0.15630232440709246,y=0.9158685116698817 a=eks,b=hat,i=507,x=0.5820790015257209,y=0.07776020965028863 a=pan,b=wye,i=508,x=0.9048575733678795,y=0.2624876849034098 a=pan,b=pan,i=509,x=0.30214111076722505,y=0.004555052573727347 a=eks,b=eks,i=510,x=0.2716828558768003,y=0.8096330043733283 a=wye,b=pan,i=511,x=0.16150441052668496,y=0.9285095431973928 a=zee,b=pan,i=512,x=0.19477333058846336,y=0.2603817709639791 a=eks,b=eks,i=513,x=0.31922688479267713,y=0.834593837944139 a=hat,b=zee,i=514,x=0.3540200248392754,y=0.2390584570033465 a=pan,b=hat,i=515,x=0.20952222920525165,y=0.7943223745285899 a=wye,b=hat,i=516,x=0.3140651518806169,y=0.8926293957852705 a=hat,b=zee,i=517,x=0.49137770000060343,y=0.35141387324505546 a=eks,b=zee,i=518,x=0.2568385171206745,y=0.5364889783697552 a=hat,b=pan,i=519,x=0.10212966989515981,y=0.16533265211820058 a=pan,b=pan,i=520,x=0.012153536247427765,y=0.5649175470315574 a=zee,b=hat,i=521,x=0.3838787804586675,y=0.8057523001988509 a=eks,b=pan,i=522,x=0.28735731367601225,y=0.01067207233763956 a=zee,b=wye,i=523,x=0.34414490686076227,y=0.26451700279951407 a=zee,b=eks,i=524,x=0.07661268800300436,y=0.336140096726808 a=zee,b=zee,i=525,x=0.2340021990274821,y=0.19565171550317406 a=eks,b=pan,i=526,x=0.9916766172123481,y=0.4941629586579006 a=wye,b=pan,i=527,x=0.23490598090770587,y=0.04525601514058908 a=eks,b=hat,i=528,x=0.558596725535886,y=0.18453457803026696 a=pan,b=wye,i=529,x=0.25303243992392954,y=0.24620118020872683 a=zee,b=zee,i=530,x=0.8324822558401548,y=0.6988570770856138 a=zee,b=hat,i=531,x=0.008609039703687982,y=0.5468838181663499 a=wye,b=pan,i=532,x=0.6825242751147447,y=0.4637231032445399 a=pan,b=zee,i=533,x=0.7751095714402214,y=0.5255361584302058 a=eks,b=zee,i=534,x=0.45468067939968737,y=0.6307288279730315 a=eks,b=zee,i=535,x=0.918189166469818,y=0.9631682259880161 a=zee,b=eks,i=536,x=0.9772047656933902,y=0.27024499862207607 a=hat,b=wye,i=537,x=0.05229927642142651,y=0.556739261699473 a=eks,b=eks,i=538,x=0.6478937309967303,y=0.8641203708540487 a=hat,b=pan,i=539,x=0.7269218850428996,y=0.48514423955986363 a=hat,b=pan,i=540,x=0.7444966092534115,y=0.8005631784590818 a=wye,b=eks,i=541,x=0.31793693438539106,y=0.5338521836000718 a=pan,b=zee,i=542,x=0.45523794139189355,y=0.7625878689224138 a=wye,b=zee,i=543,x=0.7175140108300609,y=0.47463314228548703 a=pan,b=eks,i=544,x=0.3070977911148097,y=0.8601511205546479 a=eks,b=pan,i=545,x=0.6594595904219487,y=0.9953938324572855 a=pan,b=pan,i=546,x=0.6157989578235565,y=0.5516616028345289 a=eks,b=hat,i=547,x=0.9313805274362773,y=0.08303742296566352 a=zee,b=zee,i=548,x=0.9236546276965072,y=0.7185917789599708 a=zee,b=hat,i=549,x=0.10683412342384302,y=0.3609954494938745 a=zee,b=zee,i=550,x=0.442695858154603,y=0.2279810907065235 a=hat,b=hat,i=551,x=0.010195105734865595,y=0.8966350444752939 a=hat,b=hat,i=552,x=0.23961750012587524,y=0.7097949558865199 a=hat,b=wye,i=553,x=0.6455436846500622,y=0.18485559566207277 a=zee,b=eks,i=554,x=0.06517756796746732,y=0.8796685374823151 a=zee,b=zee,i=555,x=0.42969241921044865,y=0.5290835130803165 a=hat,b=pan,i=556,x=0.6486062750649167,y=0.7897824130903452 a=zee,b=pan,i=557,x=0.1878359832100659,y=0.36569848741631705 a=wye,b=wye,i=558,x=0.44297135060478476,y=0.5083526674553874 a=eks,b=hat,i=559,x=0.27722769169135486,y=0.6987550099842482 a=eks,b=zee,i=560,x=0.24564874858670038,y=0.8997800191444999 a=pan,b=wye,i=561,x=0.23019585224736527,y=0.33146344086760515 a=wye,b=zee,i=562,x=0.9090864712373032,y=0.6795157215425431 a=eks,b=pan,i=563,x=0.595802702383979,y=0.168651831473682 a=hat,b=zee,i=564,x=0.7039566464970486,y=0.11164900949647594 a=zee,b=eks,i=565,x=0.5452772873196364,y=0.39972630770376316 a=wye,b=hat,i=566,x=0.5358639536626888,y=0.7343387003323596 a=pan,b=zee,i=567,x=0.36579393243898306,y=0.7559831353974735 a=eks,b=pan,i=568,x=0.9357934717739306,y=0.5799507923614251 a=wye,b=wye,i=569,x=0.7665973069675542,y=0.7195592313665612 a=pan,b=hat,i=570,x=0.38210149896595413,y=0.6304766007845428 a=hat,b=zee,i=571,x=0.26634229030281786,y=0.973201156636735 a=wye,b=pan,i=572,x=0.21135242286079792,y=0.8934489624895702 a=eks,b=zee,i=573,x=0.9268019021927346,y=0.17379821868719336 a=pan,b=pan,i=574,x=0.5760503711916657,y=0.25841636920363253 a=pan,b=wye,i=575,x=0.21812558940117743,y=0.3918449054425934 a=hat,b=wye,i=576,x=0.9187805829729324,y=0.7265918618789776 a=eks,b=eks,i=577,x=0.6757641755808136,y=0.8438941757795644 a=eks,b=pan,i=578,x=0.08138468100156837,y=0.7679042873713715 a=zee,b=pan,i=579,x=0.8628900762701416,y=0.49668430223471005 a=pan,b=wye,i=580,x=0.7375265988223096,y=0.28754696324486384 a=zee,b=zee,i=581,x=0.03169831018517821,y=0.26542940289146955 a=hat,b=eks,i=582,x=0.15837738839177617,y=0.04767102936713474 a=hat,b=eks,i=583,x=0.9124356938988999,y=0.43270325299399315 a=eks,b=hat,i=584,x=0.21498015726965602,y=0.7651057421754358 a=hat,b=zee,i=585,x=0.6805895701299852,y=0.9163445111607751 a=eks,b=wye,i=586,x=0.7911985256947109,y=0.29846866889111534 a=zee,b=pan,i=587,x=0.8338045555120547,y=0.18127234053022412 a=eks,b=pan,i=588,x=0.2983121220479472,y=0.7836442261015891 a=pan,b=wye,i=589,x=0.8045092117185423,y=0.9810352594851226 a=eks,b=hat,i=590,x=0.17485208172241573,y=0.10386578574214755 a=wye,b=zee,i=591,x=0.7581719018917179,y=0.16248881933435744 a=hat,b=wye,i=592,x=0.25971796023192173,y=0.17042472633318229 a=zee,b=hat,i=593,x=0.05696407643477175,y=0.6739629581626518 a=zee,b=eks,i=594,x=0.7405522732897065,y=0.31187891301120196 a=zee,b=eks,i=595,x=0.1915646079106995,y=0.9366091103378753 a=zee,b=eks,i=596,x=0.9553146355738393,y=0.47618665485485456 a=wye,b=pan,i=597,x=0.9041321135345515,y=0.7679179807567709 a=hat,b=wye,i=598,x=0.3095910881025504,y=0.8653973492352675 a=wye,b=hat,i=599,x=0.9310931043540538,y=0.9627637520286313 a=eks,b=zee,i=600,x=0.10930837103642799,y=0.734892377459777 a=wye,b=pan,i=601,x=0.10514810449108858,y=0.5812271144341119 a=pan,b=zee,i=602,x=0.9884538231531689,y=0.9826428169828403 a=zee,b=hat,i=603,x=0.04308972133597455,y=0.5287126434418946 a=hat,b=pan,i=604,x=0.43188828562650494,y=0.050660555822547026 a=pan,b=zee,i=605,x=0.2529032876659366,y=0.3388959543441078 a=eks,b=eks,i=606,x=0.35689384699612214,y=0.4336296598478725 a=zee,b=zee,i=607,x=0.06487858333497942,y=0.9820515846728632 a=hat,b=wye,i=608,x=0.3631005984856752,y=0.17908512378632557 a=zee,b=eks,i=609,x=0.0885240972512874,y=0.11687754329610434 a=eks,b=wye,i=610,x=0.976870279166798,y=0.979024408220298 a=hat,b=eks,i=611,x=0.22058278727333458,y=0.23176980505367228 a=pan,b=pan,i=612,x=0.5001009219306088,y=0.844066356281099 a=zee,b=zee,i=613,x=0.30995155197043656,y=0.7020213088533442 a=pan,b=eks,i=614,x=0.3108839226386939,y=0.3561979428678962 a=wye,b=eks,i=615,x=0.30764905368295004,y=0.3507626708329916 a=wye,b=hat,i=616,x=0.7717383349877469,y=0.1875503990617584 a=wye,b=eks,i=617,x=0.2660764665919485,y=0.145799475554256 a=eks,b=eks,i=618,x=0.697318049680538,y=0.8904258470184732 a=pan,b=hat,i=619,x=0.503320378593238,y=0.03835628235587274 a=eks,b=pan,i=620,x=0.9358015206061678,y=0.07000472867831498 a=wye,b=pan,i=621,x=0.9195273303281286,y=0.29958433313761934 a=hat,b=eks,i=622,x=0.6369034391881591,y=0.40912695001571486 a=zee,b=hat,i=623,x=0.3258804550058424,y=0.78858008240255 a=zee,b=hat,i=624,x=0.04964230770489264,y=0.579602188490132 a=pan,b=pan,i=625,x=0.6915515843242978,y=0.6178010854014475 a=pan,b=eks,i=626,x=0.41509674152822296,y=0.9607620788899446 a=hat,b=wye,i=627,x=0.9225950318933018,y=0.46973980998460607 a=wye,b=wye,i=628,x=0.6670242157242242,y=0.32410876974705904 a=wye,b=wye,i=629,x=0.0503400168303868,y=0.10527602332963393 a=wye,b=pan,i=630,x=0.6992730519827314,y=0.21425077312475782 a=pan,b=pan,i=631,x=0.782561530337917,y=0.3007736131403983 a=hat,b=wye,i=632,x=0.5674934046837635,y=0.8372958944262796 a=eks,b=wye,i=633,x=0.9138839617434728,y=0.031060548633509377 a=zee,b=hat,i=634,x=0.7745019360438186,y=0.3417641107496465 a=pan,b=wye,i=635,x=0.00861695712771493,y=0.5441803604064096 a=hat,b=zee,i=636,x=0.20399264976283815,y=0.7450909531960087 a=eks,b=wye,i=637,x=0.10597293490004256,y=0.20904153809081627 a=zee,b=zee,i=638,x=0.6998724502294686,y=0.15842755789229168 a=wye,b=pan,i=639,x=0.6297328922259222,y=0.24669534343310429 a=pan,b=wye,i=640,x=0.5760120638145232,y=0.6662486414541403 a=zee,b=wye,i=641,x=0.903530980816814,y=0.08429459129055339 a=pan,b=zee,i=642,x=0.6222272826627048,y=0.18325502513152692 a=wye,b=zee,i=643,x=0.8440287778509163,y=0.08413199380954395 a=hat,b=zee,i=644,x=0.9789858624275163,y=0.6867108424306388 a=eks,b=pan,i=645,x=0.28589757090653023,y=0.2874816869622683 a=pan,b=zee,i=646,x=0.03971681746631206,y=0.11488578458241061 a=pan,b=zee,i=647,x=0.9002505665510399,y=0.3919843474342828 a=pan,b=hat,i=648,x=0.6975350070264588,y=0.5434923294790459 a=wye,b=pan,i=649,x=0.017833700431765576,y=0.28497950273429307 a=wye,b=pan,i=650,x=0.8995516713685614,y=0.9709755173196244 a=eks,b=eks,i=651,x=0.23479328023133328,y=0.517141351688706 a=zee,b=pan,i=652,x=0.774338764727154,y=0.7866779831902309 a=pan,b=zee,i=653,x=0.598251646829306,y=0.798568072477333 a=pan,b=zee,i=654,x=0.5450721032047166,y=0.32230118106744865 a=hat,b=hat,i=655,x=0.43895262867533247,y=0.869617554872027 a=eks,b=zee,i=656,x=0.7342238031294267,y=0.6344399868216409 a=eks,b=eks,i=657,x=0.9526997294869483,y=0.6231118783065456 a=hat,b=pan,i=658,x=0.625646089688133,y=0.11860595050930467 a=eks,b=zee,i=659,x=0.5013803781985338,y=0.20397067203535713 a=zee,b=pan,i=660,x=0.3829079054237686,y=0.46767052095812467 a=eks,b=eks,i=661,x=0.16124263574065234,y=0.7861689392233051 a=hat,b=eks,i=662,x=0.8455895630959102,y=0.3950043508928123 a=pan,b=wye,i=663,x=0.4853719483437431,y=0.9100750401717121 a=zee,b=pan,i=664,x=0.3334670290589219,y=0.6393920946436594 a=eks,b=eks,i=665,x=0.5054850171460168,y=0.413768182196923 a=wye,b=hat,i=666,x=0.45353783164970474,y=0.530754898058723 a=eks,b=eks,i=667,x=0.656573731471621,y=0.902119091388546 a=wye,b=pan,i=668,x=0.04920210066939823,y=0.23851670466645347 a=hat,b=hat,i=669,x=0.6845954830331666,y=0.48983710746829556 a=eks,b=zee,i=670,x=0.36532897274847353,y=0.9866431832953275 a=pan,b=hat,i=671,x=0.6547944885588621,y=0.07142328653562735 a=wye,b=wye,i=672,x=0.7648029293390511,y=0.6650048997400388 a=pan,b=zee,i=673,x=0.8850456267920793,y=0.37595832006593455 a=wye,b=wye,i=674,x=0.07426167294984953,y=0.8983728711808775 a=zee,b=zee,i=675,x=0.14647630359578723,y=0.2444767037770159 a=wye,b=hat,i=676,x=0.6451848990883488,y=0.5038417150477158 a=zee,b=eks,i=677,x=0.4431725573720502,y=0.6602447847445098 a=hat,b=hat,i=678,x=0.2580287161696614,y=0.7294988098275678 a=wye,b=eks,i=679,x=0.36159847148560065,y=0.7499182579533756 a=eks,b=eks,i=680,x=0.0338572036055631,y=0.9757808949108091 a=eks,b=zee,i=681,x=0.8149561431006924,y=0.21088097822222962 a=wye,b=zee,i=682,x=0.7810987533825186,y=0.9667043995307188 a=eks,b=zee,i=683,x=0.587160737176585,y=0.03329448136151336 a=hat,b=eks,i=684,x=0.3749971755428878,y=0.21431876719781595 a=eks,b=hat,i=685,x=0.6737904998208634,y=0.019679445031305476 a=hat,b=eks,i=686,x=0.21050937771050438,y=0.41045403895167065 a=zee,b=wye,i=687,x=0.8487067932198148,y=0.11727125464987997 a=wye,b=eks,i=688,x=0.9002872154674284,y=0.42471026747794716 a=pan,b=eks,i=689,x=0.10444316592264569,y=0.8885602119427745 a=zee,b=wye,i=690,x=0.14854213084769508,y=0.9731706277100254 a=eks,b=zee,i=691,x=0.7240287030381926,y=0.79896437710086 a=hat,b=hat,i=692,x=0.14117333894379847,y=0.3225535116195155 a=zee,b=eks,i=693,x=0.27068880582424437,y=0.044369525310762326 a=eks,b=wye,i=694,x=0.1076349089443529,y=0.6101508286985079 a=zee,b=zee,i=695,x=0.9140507860836669,y=0.19365517291844658 a=hat,b=zee,i=696,x=0.16963322576469086,y=0.09487337662478568 a=hat,b=eks,i=697,x=0.8909103010365073,y=0.5323201554130181 a=hat,b=hat,i=698,x=0.07422312178663493,y=0.8831561730391124 a=pan,b=hat,i=699,x=0.44595497600145795,y=0.6267440405997144 a=eks,b=eks,i=700,x=0.09447912510249834,y=0.5957817269862618 a=eks,b=pan,i=701,x=0.8004210061445566,y=0.03952440744830843 a=pan,b=zee,i=702,x=0.8107677028439462,y=0.32429410872359143 a=zee,b=hat,i=703,x=0.2248043259303365,y=0.33203303056970623 a=wye,b=pan,i=704,x=0.595716356245294,y=0.004929607103288602 a=pan,b=eks,i=705,x=0.7388154708435315,y=0.797179757859978 a=pan,b=wye,i=706,x=0.5008032407057831,y=0.9591889291114695 a=pan,b=eks,i=707,x=0.9759907833320285,y=0.8936617707540555 a=pan,b=zee,i=708,x=0.7148877429133659,y=0.0667177678154226 a=hat,b=zee,i=709,x=0.5664816823643944,y=0.8967488777240636 a=wye,b=zee,i=710,x=0.8443019828048438,y=0.7860920608434899 a=hat,b=eks,i=711,x=0.6493317768253313,y=0.6921590557236297 a=eks,b=hat,i=712,x=0.7026564244799071,y=0.2532401255958231 a=hat,b=hat,i=713,x=0.34800467364944343,y=0.512231318502013 a=pan,b=wye,i=714,x=0.1707903602306352,y=0.1624539753347971 a=eks,b=hat,i=715,x=0.3702687648873617,y=0.5532443902814762 a=pan,b=hat,i=716,x=0.3526679330017216,y=0.9879415167199294 a=wye,b=hat,i=717,x=0.9126869246167464,y=0.8539144029222125 a=wye,b=eks,i=718,x=0.6170824308099435,y=0.42167938160852547 a=wye,b=zee,i=719,x=0.8648654985592689,y=0.744990377385103 a=wye,b=eks,i=720,x=0.0737982261184581,y=0.215040061968929 a=zee,b=eks,i=721,x=0.6857948820947404,y=0.24824277122401872 a=hat,b=pan,i=722,x=0.9288228199909815,y=0.2781250242506387 a=eks,b=hat,i=723,x=0.5223004827368406,y=0.7436988563433049 a=pan,b=zee,i=724,x=0.161391991386723,y=0.4896835486539596 a=zee,b=zee,i=725,x=0.6421372014622713,y=0.9769320758361035 a=hat,b=hat,i=726,x=0.6769964245482417,y=0.6143975572853417 a=hat,b=pan,i=727,x=0.07418538306763378,y=0.647862004010661 a=zee,b=pan,i=728,x=0.40960942207244977,y=0.4243129116901595 a=zee,b=hat,i=729,x=0.8560108659093649,y=0.11506232971202268 a=wye,b=wye,i=730,x=0.5648923679634816,y=0.23257155122856343 a=wye,b=hat,i=731,x=0.9839746222616559,y=0.2446478089699543 a=eks,b=zee,i=732,x=0.07883081296682193,y=0.6660416108034422 a=wye,b=zee,i=733,x=0.842462695985326,y=0.966657486505284 a=pan,b=wye,i=734,x=0.01934339909570837,y=0.05189496476807132 a=eks,b=wye,i=735,x=0.9417156459424341,y=0.9870712135656121 a=hat,b=hat,i=736,x=0.2947986604568096,y=0.9512796485274094 a=wye,b=pan,i=737,x=0.16300656842731953,y=0.3545653890588314 a=eks,b=zee,i=738,x=0.8977243371620829,y=0.5262722450488325 a=hat,b=zee,i=739,x=0.5948040912191594,y=0.3056178698423182 a=hat,b=wye,i=740,x=0.6686093454184745,y=0.6740449093675628 a=zee,b=pan,i=741,x=0.9598570146790528,y=0.6398488862754813 a=pan,b=wye,i=742,x=0.8257519339015849,y=0.693194093940406 a=eks,b=hat,i=743,x=0.04434098258715646,y=0.3266898058988358 a=zee,b=wye,i=744,x=0.7524245915453669,y=0.5461439986683315 a=pan,b=pan,i=745,x=0.6719897687291242,y=0.7565622573163691 a=eks,b=pan,i=746,x=0.916062376572181,y=0.886967557372127 a=eks,b=pan,i=747,x=0.40506409795178244,y=0.6998873497812762 a=pan,b=wye,i=748,x=0.5826370817680807,y=0.08078351188422772 a=pan,b=eks,i=749,x=0.8465950965363382,y=0.416842562059375 a=wye,b=pan,i=750,x=0.6658476587001316,y=0.5556451189688414 a=eks,b=eks,i=751,x=0.3242951995611114,y=0.5680663477563322 a=wye,b=wye,i=752,x=0.13191473062692816,y=0.19377767709093607 a=zee,b=eks,i=753,x=0.5186702283396277,y=0.5344580097568402 a=pan,b=eks,i=754,x=0.023312954423954868,y=0.13646462067848675 a=eks,b=eks,i=755,x=0.22961935180882087,y=0.16011525129191817 a=pan,b=zee,i=756,x=0.09666705485436378,y=0.3548198552440588 a=wye,b=wye,i=757,x=0.19425165484936957,y=0.9581201227608445 a=eks,b=wye,i=758,x=0.5362262223046377,y=0.5049539834712841 a=wye,b=zee,i=759,x=0.5321536977324647,y=0.369621860654502 a=hat,b=zee,i=760,x=0.7941529932304345,y=0.2064198694392868 a=wye,b=hat,i=761,x=0.38624241523517244,y=0.7325501625853548 a=zee,b=pan,i=762,x=0.9385694344762825,y=0.49700272359344677 a=eks,b=pan,i=763,x=0.3501489521153939,y=0.6398058286945986 a=wye,b=pan,i=764,x=0.16567218737817557,y=0.7953657761380494 a=eks,b=hat,i=765,x=0.324248802737786,y=0.8599723260499864 a=eks,b=eks,i=766,x=0.22335745734469326,y=0.21867582342847736 a=wye,b=wye,i=767,x=0.8255592677399582,y=0.2538516298356094 a=eks,b=hat,i=768,x=0.15841238344171704,y=0.574922286058442 a=eks,b=eks,i=769,x=0.18506419568907773,y=0.4760883565274585 a=hat,b=zee,i=770,x=0.18690741307246328,y=0.6711988977493772 a=hat,b=eks,i=771,x=0.9178219022568258,y=0.43350695723226085 a=wye,b=zee,i=772,x=0.23583751371437855,y=0.12279242944303292 a=hat,b=eks,i=773,x=0.26528801262285184,y=0.4010080804811049 a=eks,b=eks,i=774,x=0.6386491500093009,y=0.24632366540539852 a=hat,b=eks,i=775,x=0.03827924004922145,y=0.9441328448191567 a=wye,b=eks,i=776,x=0.9585382111164209,y=0.6306113838967866 a=zee,b=wye,i=777,x=0.7623811038765134,y=0.6139534724314861 a=wye,b=hat,i=778,x=0.19955726522431594,y=0.5077217624640397 a=zee,b=zee,i=779,x=0.3411759787401816,y=0.2865091416991973 a=hat,b=zee,i=780,x=0.5811342153834129,y=0.4772695688880223 a=hat,b=pan,i=781,x=0.1192837713483601,y=0.40681848859583813 a=hat,b=wye,i=782,x=0.721843867108292,y=0.44923817786818343 a=wye,b=wye,i=783,x=0.3438923976161088,y=0.5649145034717639 a=eks,b=eks,i=784,x=0.6165630308304775,y=0.3304084333387801 a=zee,b=eks,i=785,x=0.6562657631329122,y=0.8258194011693597 a=hat,b=hat,i=786,x=0.3439593168095797,y=0.8518997303215115 a=eks,b=zee,i=787,x=0.0654097106697118,y=0.4660389375188869 a=pan,b=eks,i=788,x=0.2217685316094703,y=0.16649100910012216 a=eks,b=hat,i=789,x=0.4717662995603106,y=0.44972566215644705 a=eks,b=hat,i=790,x=0.47887299708709874,y=0.7841667814595291 a=wye,b=wye,i=791,x=0.00519908348997844,y=0.3991391178091711 a=hat,b=hat,i=792,x=0.5475862720333128,y=0.9675473146380916 a=zee,b=wye,i=793,x=0.9545515061227288,y=0.8875064703498067 a=wye,b=hat,i=794,x=0.16854110528640676,y=0.23899152324736783 a=eks,b=hat,i=795,x=0.9414011524374403,y=0.38624947508331575 a=eks,b=eks,i=796,x=0.44475337389030567,y=0.3562483351552209 a=hat,b=zee,i=797,x=0.3458790979025249,y=0.10530555367157357 a=wye,b=hat,i=798,x=0.894955252691444,y=0.9020401281837919 a=zee,b=hat,i=799,x=0.6678020932140406,y=0.7272829012287039 a=pan,b=wye,i=800,x=0.6728857720452479,y=0.9063282177143175 a=pan,b=hat,i=801,x=0.6232260305196619,y=0.3246940048519549 a=hat,b=wye,i=802,x=0.6939811641375604,y=0.9772213376028769 a=wye,b=eks,i=803,x=0.735398041020814,y=0.43528061054041123 a=pan,b=wye,i=804,x=0.7553025953132643,y=0.12826679900502957 a=eks,b=eks,i=805,x=0.7970666568024275,y=0.7141982352996962 a=hat,b=hat,i=806,x=0.6283301745043451,y=0.2958341149885232 a=hat,b=pan,i=807,x=0.6054239018991081,y=0.44535311447129966 a=zee,b=pan,i=808,x=0.068327326345054,y=0.9193569789768139 a=wye,b=wye,i=809,x=0.779445087567334,y=0.6995188082196249 a=pan,b=eks,i=810,x=0.6751597242266821,y=0.5514064392004425 a=pan,b=eks,i=811,x=0.5542215714866076,y=0.14391751751745208 a=hat,b=zee,i=812,x=0.5623829182379033,y=0.0721774446182929 a=eks,b=wye,i=813,x=0.027045543431586827,y=0.5270107047302233 a=pan,b=pan,i=814,x=0.7042024611472535,y=0.5509286378129169 a=pan,b=eks,i=815,x=0.05860005161315873,y=0.0005735237078376976 a=eks,b=zee,i=816,x=0.11392244176975941,y=0.08027592413428164 a=hat,b=hat,i=817,x=0.2182634028675824,y=0.031522781055713156 a=hat,b=pan,i=818,x=0.5333781740115907,y=0.4837112511279462 a=zee,b=hat,i=819,x=0.062483279659384605,y=0.8930370625962232 a=eks,b=hat,i=820,x=0.6028476657314659,y=0.6800202871943302 a=pan,b=hat,i=821,x=0.11959405115201827,y=0.9706185345930702 a=eks,b=hat,i=822,x=0.2180916247267669,y=0.20200687440786602 a=hat,b=zee,i=823,x=0.4553739759143408,y=0.04377256284181141 a=eks,b=pan,i=824,x=0.14058200329018555,y=0.7690462771050751 a=wye,b=pan,i=825,x=0.6611884797250076,y=0.9588317557532128 a=zee,b=pan,i=826,x=0.2407553754423183,y=0.14438176167139094 a=zee,b=pan,i=827,x=0.5280509086050722,y=0.35353193017246765 a=pan,b=eks,i=828,x=0.9994029107062516,y=0.20066601756099478 a=pan,b=pan,i=829,x=0.9031593450788309,y=0.3797948680956209 a=eks,b=pan,i=830,x=0.36350612065623267,y=0.2886476639992571 a=eks,b=zee,i=831,x=0.692611920160873,y=0.26262694975977385 a=hat,b=wye,i=832,x=0.7659227499835054,y=0.6521346139410953 a=pan,b=zee,i=833,x=0.8267760334483312,y=0.8318269743977437 a=eks,b=eks,i=834,x=0.7372846052959475,y=0.386390580949861 a=zee,b=pan,i=835,x=0.9167189417830722,y=0.07204465286089479 a=zee,b=wye,i=836,x=0.5756190775565698,y=0.7938251688467333 a=wye,b=wye,i=837,x=0.2328642613637898,y=0.46278413120375006 a=eks,b=eks,i=838,x=0.7797750429004653,y=0.29884322034130906 a=pan,b=eks,i=839,x=0.8726738283401857,y=0.04628087648432999 a=zee,b=hat,i=840,x=0.6677673890093077,y=0.6533094635586054 a=hat,b=pan,i=841,x=0.4486203012761554,y=0.3566552462496445 a=eks,b=hat,i=842,x=0.4549321247838193,y=0.07592100983285954 a=wye,b=wye,i=843,x=0.255982822267825,y=0.3803102296515556 a=eks,b=hat,i=844,x=0.3446014862942576,y=0.7572793591602713 a=wye,b=eks,i=845,x=0.6203491211980909,y=0.15025452711014609 a=eks,b=zee,i=846,x=0.9460265533905371,y=0.45198587094481946 a=hat,b=wye,i=847,x=0.49389611860028626,y=0.07353689220151671 a=zee,b=pan,i=848,x=0.7169514982586007,y=0.9408480112735236 a=wye,b=wye,i=849,x=0.6446224014740414,y=0.11523766674998448 a=pan,b=eks,i=850,x=0.7274412652107003,y=0.6621932392565703 a=wye,b=pan,i=851,x=0.3263942251497617,y=0.9932583238060141 a=wye,b=eks,i=852,x=0.664738707605857,y=0.7223078050122264 a=eks,b=hat,i=853,x=0.1880170274631281,y=0.10968535421904191 a=hat,b=eks,i=854,x=0.6939278762348635,y=0.5313359369168281 a=hat,b=hat,i=855,x=0.7112683657239158,y=0.6136040745504255 a=zee,b=eks,i=856,x=0.5439786015377756,y=0.9686655026402698 a=zee,b=zee,i=857,x=0.10264607530788517,y=0.3331005309508399 a=eks,b=zee,i=858,x=0.484034536497318,y=0.5074658760998881 a=wye,b=hat,i=859,x=0.8335422363466695,y=0.3120932232687599 a=wye,b=zee,i=860,x=0.5661718614546278,y=0.008186918681462707 a=hat,b=pan,i=861,x=0.9969936112759107,y=0.21269969787446608 a=pan,b=wye,i=862,x=0.30274837710060487,y=0.015353477159141038 a=wye,b=pan,i=863,x=0.23680176335245073,y=0.23457864754397195 a=zee,b=zee,i=864,x=0.809561039932752,y=0.6017320599557826 a=wye,b=zee,i=865,x=0.7815565737026456,y=0.8572095724845105 a=eks,b=hat,i=866,x=0.5917695655140688,y=0.560162197865116 a=hat,b=zee,i=867,x=0.722695048982041,y=0.8684988555802282 a=wye,b=hat,i=868,x=0.21734964563610804,y=0.8045525190525901 a=wye,b=hat,i=869,x=0.226340504641239,y=0.6618680946496492 a=eks,b=wye,i=870,x=0.03466858500680492,y=0.5621939039921067 a=pan,b=wye,i=871,x=0.6789169629628927,y=0.5193967453982994 a=pan,b=pan,i=872,x=0.7564798789126915,y=0.7115590422599338 a=wye,b=hat,i=873,x=0.45127322199816233,y=0.7742566444517696 a=eks,b=wye,i=874,x=0.5403377945244225,y=0.16069845073082 a=pan,b=hat,i=875,x=0.1859774664492485,y=0.3619489833924334 a=wye,b=wye,i=876,x=0.4835086084877356,y=0.4540385079562712 a=wye,b=pan,i=877,x=0.27907367543536465,y=0.12385159649360233 a=hat,b=zee,i=878,x=0.3102237192022368,y=0.9669823901049626 a=eks,b=hat,i=879,x=0.6888483812825917,y=0.5505783461131407 a=hat,b=pan,i=880,x=0.9443559576513696,y=0.776626094540373 a=eks,b=pan,i=881,x=0.6733492820398447,y=0.11891510514178161 a=pan,b=pan,i=882,x=0.439665640988951,y=0.4549660840547012 a=pan,b=hat,i=883,x=0.5540100503192463,y=0.8429668921287791 a=pan,b=zee,i=884,x=0.9569511624197534,y=0.009698935906691575 a=zee,b=wye,i=885,x=0.4317067888424335,y=0.7251769880284373 a=eks,b=wye,i=886,x=0.3652904236362593,y=0.20906833314831175 a=pan,b=pan,i=887,x=0.6949995284041934,y=0.8053235553778822 a=pan,b=zee,i=888,x=0.7370727975606584,y=0.4485080316317849 a=wye,b=wye,i=889,x=0.9080280619248189,y=0.9139513254924729 a=pan,b=hat,i=890,x=0.680338712677067,y=0.010994432325418524 a=hat,b=eks,i=891,x=0.6355325141001417,y=0.07695298953416263 a=eks,b=wye,i=892,x=0.1376969209844151,y=0.834454990298031 a=eks,b=zee,i=893,x=0.9355755568148436,y=0.25640673765414823 a=zee,b=hat,i=894,x=0.06918579614388565,y=0.8717142673159294 a=pan,b=zee,i=895,x=0.9990440068491747,y=0.20478744699359197 a=eks,b=pan,i=896,x=0.18020508273454894,y=0.18233459061350799 a=zee,b=pan,i=897,x=0.16948195877360084,y=0.4673040380612351 a=pan,b=zee,i=898,x=0.048671024346735314,y=0.4634456617937973 a=eks,b=wye,i=899,x=0.6376504261357228,y=0.4968859553621585 a=wye,b=zee,i=900,x=0.0634446641763643,y=0.47070339237478154 a=hat,b=pan,i=901,x=0.3948962420926134,y=0.2858499628646297 a=zee,b=hat,i=902,x=0.792376744926382,y=0.7540301970987514 a=pan,b=zee,i=903,x=0.5150758332324689,y=0.8265689553462827 a=zee,b=pan,i=904,x=0.6774926045379539,y=0.2790431227538289 a=pan,b=wye,i=905,x=0.46948597026992234,y=0.6282160374404341 a=wye,b=zee,i=906,x=0.5370940115523006,y=0.1284825381186716 a=eks,b=wye,i=907,x=0.5764461281567995,y=0.6560112583406935 a=zee,b=hat,i=908,x=0.2293422544193603,y=0.5310403236033165 a=hat,b=pan,i=909,x=0.2565065893296261,y=0.3546175861833417 a=hat,b=zee,i=910,x=0.026474784279227448,y=0.7004167503216063 a=pan,b=eks,i=911,x=0.06608607463859384,y=0.07128733055849312 a=wye,b=eks,i=912,x=0.3364968005146698,y=0.5787883063495668 a=hat,b=wye,i=913,x=0.5696196789270859,y=0.5118141918287126 a=eks,b=zee,i=914,x=0.8582285128247622,y=0.7604153187806654 a=wye,b=eks,i=915,x=0.5460355036287519,y=0.8958184949801713 a=hat,b=pan,i=916,x=0.2607796424126346,y=0.2105454483785194 a=wye,b=hat,i=917,x=0.3846528045634492,y=0.3124085567677639 a=hat,b=eks,i=918,x=0.5027707430075526,y=0.4544234955959021 a=eks,b=pan,i=919,x=0.7703238268018578,y=0.11858518036609156 a=wye,b=eks,i=920,x=0.6878423136601669,y=0.10216851974973384 a=eks,b=zee,i=921,x=0.012096720577898457,y=0.6297080697429681 a=pan,b=eks,i=922,x=0.2886175127593028,y=0.828634782804935 a=wye,b=pan,i=923,x=0.9626100389715443,y=0.3905150319464591 a=hat,b=pan,i=924,x=0.3002347573504318,y=0.7414891858002532 a=pan,b=zee,i=925,x=0.3447367209775769,y=0.8487811195467444 a=zee,b=hat,i=926,x=0.3969942807955067,y=0.7524046203617899 a=zee,b=zee,i=927,x=0.7610101430574051,y=0.4964453780226331 a=hat,b=pan,i=928,x=0.9769401114714371,y=0.19866082639978944 a=hat,b=zee,i=929,x=0.9119484815981432,y=0.9002090722192556 a=eks,b=hat,i=930,x=0.28511500317711636,y=0.728558620027423 a=pan,b=hat,i=931,x=0.15134527475607873,y=0.348369087467138 a=zee,b=eks,i=932,x=0.7361189289061444,y=0.3847525716179372 a=wye,b=zee,i=933,x=0.3661453331509762,y=0.004152078250187152 a=wye,b=wye,i=934,x=0.447099608509545,y=0.17594771830007339 a=wye,b=zee,i=935,x=0.3196703223884384,y=0.8888974787225958 a=zee,b=zee,i=936,x=0.562838339421027,y=0.007778020871679225 a=zee,b=eks,i=937,x=0.02003336919176857,y=0.26669570512199325 a=eks,b=wye,i=938,x=0.3043257328168447,y=0.2906418445735329 a=zee,b=zee,i=939,x=0.8978345983120852,y=0.030447079101845298 a=eks,b=zee,i=940,x=0.5585422926486657,y=0.4978694410328127 a=hat,b=wye,i=941,x=0.5621962178745717,y=0.26772849156914025 a=hat,b=zee,i=942,x=0.6242711478551904,y=0.09401579423266704 a=eks,b=eks,i=943,x=0.27194272184638746,y=0.9612750351440212 a=hat,b=wye,i=944,x=0.8822781716699086,y=0.6067074807238132 a=zee,b=wye,i=945,x=0.7825493610673169,y=0.32373164668188725 a=wye,b=zee,i=946,x=0.1013010312091508,y=0.8534111346417461 a=zee,b=wye,i=947,x=0.8584260523164629,y=0.23498149964077852 a=zee,b=pan,i=948,x=0.7984764587459684,y=0.6810243958256237 a=wye,b=hat,i=949,x=0.23478741222352084,y=0.37065868020096504 a=hat,b=wye,i=950,x=0.09950476962568644,y=0.08527686061721151 a=wye,b=zee,i=951,x=0.032452509100876825,y=0.13213830932576387 a=pan,b=pan,i=952,x=0.20155399565096999,y=0.26323541426295427 a=zee,b=hat,i=953,x=0.7258512915506337,y=0.7130469035339413 a=wye,b=zee,i=954,x=0.5189900736412828,y=0.9806684784703058 a=pan,b=zee,i=955,x=0.6876410065228761,y=0.049081361078488706 a=eks,b=wye,i=956,x=0.8483404387366377,y=0.6963230727503091 a=hat,b=eks,i=957,x=0.7658922923332185,y=0.42890062704958776 a=hat,b=wye,i=958,x=0.5889300471089299,y=0.09950882081879164 a=zee,b=hat,i=959,x=0.5401768517178055,y=0.576926299555725 a=zee,b=pan,i=960,x=0.14284356858511216,y=0.7464892897966853 a=zee,b=hat,i=961,x=0.6778089684859776,y=0.0814354668691658 a=eks,b=wye,i=962,x=0.49553623626743193,y=0.9650390956306768 a=pan,b=eks,i=963,x=0.022898529014032887,y=0.8442755412229669 a=eks,b=pan,i=964,x=0.11974210479568592,y=0.1727873170586557 a=pan,b=eks,i=965,x=0.43364055944870217,y=0.9883467323590831 a=hat,b=eks,i=966,x=0.3126841836488823,y=0.8616419739774406 a=wye,b=zee,i=967,x=0.8957509371936184,y=0.6646859799560008 a=wye,b=pan,i=968,x=0.6531533778557712,y=0.8078705982263845 a=pan,b=pan,i=969,x=0.9309046826091119,y=0.16276567995818791 a=wye,b=eks,i=970,x=0.0003669282805145446,y=0.7009817497170139 a=pan,b=pan,i=971,x=0.48986271798634495,y=0.9495185819962723 a=zee,b=eks,i=972,x=0.25911127762915553,y=0.6423261731196327 a=pan,b=wye,i=973,x=0.31594050674870533,y=0.3202147086921625 a=wye,b=pan,i=974,x=0.10722011957438404,y=0.8335217073851289 a=wye,b=eks,i=975,x=0.22837011741983626,y=0.8508657508706551 a=hat,b=pan,i=976,x=0.2213905763595585,y=0.9144918892479273 a=wye,b=hat,i=977,x=0.8403881011140902,y=0.15373049137990247 a=wye,b=pan,i=978,x=0.2223195417593009,y=0.9927065687777529 a=pan,b=eks,i=979,x=0.3047140631616194,y=0.012239402814423261 a=pan,b=hat,i=980,x=0.08006366208466742,y=0.46683918475842656 a=zee,b=pan,i=981,x=0.1460023204833616,y=0.6268639860761865 a=zee,b=wye,i=982,x=0.37341981725134477,y=0.043362859112128116 a=pan,b=eks,i=983,x=0.23455765897855474,y=0.5826786823171225 a=eks,b=zee,i=984,x=0.1229552360203735,y=0.4375490388704373 a=eks,b=hat,i=985,x=0.011903992841803879,y=0.20158842970916258 a=zee,b=pan,i=986,x=0.36309769750156073,y=0.41372304201591836 a=zee,b=pan,i=987,x=0.2675153812056569,y=0.31944778253720596 a=zee,b=eks,i=988,x=0.4159116125988659,y=0.0527646250644187 a=zee,b=wye,i=989,x=0.8290703900542629,y=0.0029342637852388664 a=hat,b=hat,i=990,x=0.6968268719895765,y=0.7388049214848422 a=zee,b=eks,i=991,x=0.04205521417416125,y=0.7400694180318313 a=wye,b=hat,i=992,x=0.1082025069192426,y=0.382293188133744 a=pan,b=hat,i=993,x=0.9655911362500376,y=0.6528068171940502 a=pan,b=hat,i=994,x=0.06296083376713069,y=0.924782731671716 a=zee,b=hat,i=995,x=0.19931174025957066,y=0.6628915066032653 a=pan,b=pan,i=996,x=0.3896870360326876,y=0.7398938519226621 a=wye,b=pan,i=997,x=0.6473214345392985,y=0.1580211199769581 a=wye,b=wye,i=998,x=0.7054609891598416,y=0.11530820363956795 a=eks,b=wye,i=999,x=0.7530797661303167,y=0.7943533279150342 a=hat,b=hat,i=1000,x=0.27862167380000924,y=0.8957145512576364 a=pan,b=eks,i=1001,x=0.5972691205647312,y=0.4313550003841107 a=zee,b=wye,i=1002,x=0.27589217856931847,y=0.4784417775011829 a=pan,b=wye,i=1003,x=0.6022804421463093,y=0.15258107959053602 a=wye,b=hat,i=1004,x=0.7556173435575428,y=0.5360056181198413 a=wye,b=zee,i=1005,x=0.35533936034338987,y=0.5883076566864401 a=pan,b=hat,i=1006,x=0.4446033039150368,y=0.9979731391657491 a=zee,b=wye,i=1007,x=0.6726350502133611,y=0.9779321628810685 a=hat,b=eks,i=1008,x=0.19927285497348735,y=0.22487729305731685 a=eks,b=zee,i=1009,x=0.6292400672017409,y=0.344666919378786 a=hat,b=eks,i=1010,x=0.32802933242359655,y=0.2955845001645365 a=pan,b=eks,i=1011,x=0.7217042904394803,y=0.2232569692246722 a=pan,b=zee,i=1012,x=0.5003888723420944,y=0.03004905415183634 a=hat,b=zee,i=1013,x=0.6449280930394627,y=0.012641120692678642 a=pan,b=zee,i=1014,x=0.2224977060602883,y=0.1335049252959022 a=eks,b=eks,i=1015,x=0.5441091824904251,y=0.27206919115344796 a=wye,b=zee,i=1016,x=0.17366739952321908,y=0.937706710544049 a=pan,b=zee,i=1017,x=0.787790582328257,y=0.844311491671081 a=pan,b=eks,i=1018,x=0.015795494747047223,y=0.8254990704093889 a=pan,b=zee,i=1019,x=0.23762521364858846,y=0.8673593962442501 a=eks,b=pan,i=1020,x=0.902360533880021,y=0.7028811168584178 a=zee,b=wye,i=1021,x=0.008857541583488837,y=0.21509348675167894 a=eks,b=wye,i=1022,x=0.33588773148782947,y=0.40718964301240856 a=zee,b=eks,i=1023,x=0.21227584421525614,y=0.7891727565371357 a=zee,b=eks,i=1024,x=0.38754385741774056,y=0.42814516635986044 a=pan,b=eks,i=1025,x=0.19841453521545604,y=0.08811826842406556 a=eks,b=zee,i=1026,x=0.2741615196854501,y=0.5767980610310797 a=eks,b=zee,i=1027,x=0.7911574513154387,y=0.7553091091067402 a=eks,b=wye,i=1028,x=0.31990228399247944,y=0.9227512605727171 a=wye,b=eks,i=1029,x=0.2129672492537904,y=0.455409159116715 a=pan,b=pan,i=1030,x=0.5408386772361381,y=0.7160509492545313 a=hat,b=zee,i=1031,x=0.48469619278770393,y=0.6097136149080437 a=zee,b=pan,i=1032,x=0.8214019848831586,y=0.6593835512799063 a=eks,b=wye,i=1033,x=0.9319773759232135,y=0.8773892832568154 a=eks,b=hat,i=1034,x=0.21608546142882312,y=0.30554114451483116 a=hat,b=hat,i=1035,x=0.09020906616714786,y=0.10290991425754714 a=wye,b=zee,i=1036,x=0.3531778666649932,y=0.2809207717510849 a=hat,b=eks,i=1037,x=0.0945175541677894,y=0.3745112769716772 a=zee,b=pan,i=1038,x=0.5692057342171193,y=0.9606327704233413 a=zee,b=hat,i=1039,x=0.3081554551270379,y=0.4385650169051888 a=wye,b=hat,i=1040,x=0.5455490636956486,y=0.2139309079198488 a=pan,b=wye,i=1041,x=0.1485239533830236,y=0.1776854474981574 a=pan,b=pan,i=1042,x=0.15706603838853506,y=0.7751554210841053 a=pan,b=eks,i=1043,x=0.9037009385297075,y=0.6127765961736429 a=hat,b=eks,i=1044,x=0.1317980665424846,y=0.5354311378322799 a=pan,b=zee,i=1045,x=0.18824317733657336,y=0.5079230664372042 a=pan,b=wye,i=1046,x=0.6487563188200542,y=0.017743851244559794 a=wye,b=pan,i=1047,x=0.9924515398966479,y=0.8295830268367035 a=hat,b=hat,i=1048,x=0.866877027845022,y=0.3657752233481316 a=eks,b=eks,i=1049,x=0.5783739636973764,y=0.4270609054347013 a=zee,b=zee,i=1050,x=0.7931385685414742,y=0.7121487657433946 a=pan,b=eks,i=1051,x=0.07958271178407761,y=0.7510868078663989 a=hat,b=hat,i=1052,x=0.967055767380358,y=0.2710585230744418 a=wye,b=pan,i=1053,x=0.7709670432157318,y=0.18501678400499033 a=wye,b=zee,i=1054,x=0.08626749693608815,y=0.25205147479956 a=eks,b=eks,i=1055,x=0.7570291652540911,y=0.5426597756349021 a=wye,b=eks,i=1056,x=0.17697196127444081,y=0.48721255903838334 a=wye,b=pan,i=1057,x=0.34801756734906164,y=0.5214181842054965 a=pan,b=hat,i=1058,x=0.8522482352165042,y=0.7495559067319948 a=hat,b=pan,i=1059,x=0.2746468542015157,y=0.06589726142698449 a=zee,b=eks,i=1060,x=0.18748360833449518,y=0.7624096925483054 a=hat,b=hat,i=1061,x=0.7349337283030247,y=0.8809097022915752 a=zee,b=hat,i=1062,x=0.8802861735497903,y=0.6464219752541935 a=zee,b=hat,i=1063,x=0.4065008342810489,y=0.886323765340433 a=eks,b=hat,i=1064,x=0.4424079924279726,y=0.9148635648447586 a=hat,b=hat,i=1065,x=0.010130482768756055,y=0.9048046422071615 a=pan,b=zee,i=1066,x=0.0174503828855882,y=0.3772767215216971 a=pan,b=hat,i=1067,x=0.5324513907264202,y=0.7766825690772374 a=pan,b=zee,i=1068,x=0.9292735422372311,y=0.7845794722193757 a=wye,b=hat,i=1069,x=0.10796407185484191,y=0.026926570164813146 a=pan,b=eks,i=1070,x=0.48689932881768716,y=0.8580079152498714 a=eks,b=hat,i=1071,x=0.15020029058361362,y=0.45627529973691716 a=hat,b=pan,i=1072,x=0.44604654951505474,y=0.8038155982865464 a=eks,b=zee,i=1073,x=0.09738725055678144,y=0.08505208961455624 a=hat,b=hat,i=1074,x=0.3236826909608632,y=0.49627141594209967 a=eks,b=zee,i=1075,x=0.7153896932288586,y=0.9778494726905622 a=zee,b=hat,i=1076,x=0.7057228729875391,y=0.3212868771712061 a=pan,b=zee,i=1077,x=0.5856627674432751,y=0.9241757857209006 a=eks,b=eks,i=1078,x=0.35578945733022505,y=0.45528814372216575 a=pan,b=zee,i=1079,x=0.028491257749501564,y=0.7125221088820232 a=wye,b=wye,i=1080,x=0.016813529366139446,y=0.30619226711821357 a=pan,b=hat,i=1081,x=0.9328542327992406,y=0.9238747036441417 a=eks,b=hat,i=1082,x=0.818988631617168,y=0.6912196193544532 a=hat,b=wye,i=1083,x=0.8665578508008973,y=0.22211673759850004 a=hat,b=zee,i=1084,x=0.41406718708821955,y=0.02723245214010661 a=zee,b=eks,i=1085,x=0.13035161260495198,y=0.5640103641360239 a=eks,b=hat,i=1086,x=0.03139277667157425,y=0.5383540545781755 a=eks,b=zee,i=1087,x=0.041919682544647396,y=0.43365253130183956 a=pan,b=zee,i=1088,x=0.8344662624969731,y=0.05039883331049 a=wye,b=pan,i=1089,x=0.10459506042932876,y=0.7767794982555558 a=zee,b=hat,i=1090,x=0.05459959955270677,y=0.6641081427852065 a=eks,b=wye,i=1091,x=0.9741063795340834,y=0.5869419824678774 a=zee,b=zee,i=1092,x=0.913252015241433,y=0.41317703347248136 a=wye,b=pan,i=1093,x=0.060917243371145124,y=0.0729984416375653 a=hat,b=eks,i=1094,x=0.06571775207401842,y=0.6161858340132806 a=eks,b=wye,i=1095,x=0.9703612589022951,y=0.02299184173282698 a=pan,b=wye,i=1096,x=0.3123275732448444,y=0.9046978224447048 a=pan,b=eks,i=1097,x=0.36433855475903487,y=0.28640575782602984 a=pan,b=zee,i=1098,x=0.9388863703832938,y=0.9481045761632589 a=wye,b=eks,i=1099,x=0.1801852674259774,y=0.8001313396984383 a=pan,b=wye,i=1100,x=0.9449163664787465,y=0.21041416481960495 a=zee,b=pan,i=1101,x=0.9851142251459588,y=0.833308434948654 a=hat,b=zee,i=1102,x=0.6058843659959886,y=0.914771957616851 a=hat,b=hat,i=1103,x=0.09907505801136207,y=0.9886361549898667 a=wye,b=zee,i=1104,x=0.6026401587598063,y=0.9232948941188992 a=hat,b=zee,i=1105,x=0.7049227417732974,y=0.0462839144297168 a=pan,b=eks,i=1106,x=0.5485375288525932,y=0.41787054723627115 a=wye,b=zee,i=1107,x=0.2172040459296869,y=0.04347447260250059 a=zee,b=wye,i=1108,x=0.17849311848568739,y=0.15336908789618675 a=pan,b=zee,i=1109,x=0.9209948537835644,y=0.9617211607571948 a=zee,b=zee,i=1110,x=0.5617606152508641,y=0.12922472841055488 a=hat,b=zee,i=1111,x=0.5096259842809261,y=0.9716058274135191 a=eks,b=pan,i=1112,x=0.4601480008274824,y=0.6621941381779669 a=wye,b=hat,i=1113,x=0.04619109705664248,y=0.07731183378456241 a=eks,b=zee,i=1114,x=0.6225031791605239,y=0.724470067269006 a=hat,b=zee,i=1115,x=0.4384136215828739,y=0.8991776975784843 a=pan,b=pan,i=1116,x=0.3318167439135842,y=0.07638995864053721 a=hat,b=pan,i=1117,x=0.08389296153750614,y=0.616903034571171 a=eks,b=eks,i=1118,x=0.42321284015690686,y=0.18075244176916405 a=hat,b=zee,i=1119,x=0.9947060390455312,y=0.9155106367235321 a=hat,b=pan,i=1120,x=0.322426480645594,y=0.8107856936608234 a=eks,b=eks,i=1121,x=0.011345137277951278,y=0.30150866101509777 a=hat,b=hat,i=1122,x=0.2386256214986372,y=0.5024389651151668 a=hat,b=wye,i=1123,x=0.7175177574035164,y=0.49060053901509204 a=pan,b=eks,i=1124,x=0.08353595333636898,y=0.5861415970535602 a=eks,b=hat,i=1125,x=0.30127828892745145,y=0.6471608610675756 a=wye,b=wye,i=1126,x=0.8391082612863554,y=0.8564234939160587 a=hat,b=pan,i=1127,x=0.832626957843269,y=0.6240442951248336 a=hat,b=hat,i=1128,x=0.8806935192862494,y=0.7838162296913623 a=pan,b=zee,i=1129,x=0.3315347253194,y=0.008089402263374845 a=zee,b=wye,i=1130,x=0.01851853736108866,y=0.17184568517491516 a=wye,b=zee,i=1131,x=0.8126126224772602,y=0.9995009548069009 a=hat,b=zee,i=1132,x=0.4073244488743951,y=0.5406132572557787 a=zee,b=zee,i=1133,x=0.8240890643910131,y=0.13624992612749198 a=wye,b=eks,i=1134,x=0.7808769789539313,y=0.8783411417393904 a=zee,b=eks,i=1135,x=0.6515492928760739,y=0.03540134679084295 a=hat,b=pan,i=1136,x=0.5009194590736257,y=0.37469060025761247 a=zee,b=hat,i=1137,x=0.925731020213508,y=0.12357673418366155 a=pan,b=zee,i=1138,x=0.7159872385785992,y=0.04528852253706328 a=hat,b=zee,i=1139,x=0.6331768836278109,y=0.1369717170583027 a=zee,b=eks,i=1140,x=0.048571653758132216,y=0.3492112898081101 a=hat,b=hat,i=1141,x=0.612461401988446,y=0.14847850688380781 a=eks,b=eks,i=1142,x=0.027183982557207553,y=0.588477870478424 a=zee,b=pan,i=1143,x=0.9927901703526475,y=0.12700602926571025 a=hat,b=zee,i=1144,x=0.007391695879485738,y=0.9756749119225023 a=hat,b=eks,i=1145,x=0.8273428505388051,y=0.9831021972218925 a=pan,b=hat,i=1146,x=0.8460372878397171,y=0.3239568575223264 a=wye,b=zee,i=1147,x=0.011254496718364537,y=0.2947614358547457 a=wye,b=eks,i=1148,x=0.510274781147883,y=0.6342886591607202 a=eks,b=hat,i=1149,x=0.08103428766976473,y=0.530747032666464 a=hat,b=hat,i=1150,x=0.4058826696970118,y=0.4216435681134768 a=pan,b=pan,i=1151,x=0.6861388937798399,y=0.33890003075281316 a=eks,b=zee,i=1152,x=0.5857634146388722,y=0.042952777230192085 a=pan,b=hat,i=1153,x=0.6757867606577086,y=0.7740341802587707 a=hat,b=eks,i=1154,x=0.48734948309736814,y=0.03392833831821873 a=hat,b=pan,i=1155,x=0.15696039673828777,y=0.29845938463448995 a=eks,b=eks,i=1156,x=0.7220504220155584,y=0.3069530341008503 a=zee,b=hat,i=1157,x=0.8122264673038031,y=0.8517729655458225 a=zee,b=zee,i=1158,x=0.8088760687957014,y=0.21112197613175976 a=zee,b=wye,i=1159,x=0.46769194201594133,y=0.4329746427091592 a=wye,b=hat,i=1160,x=0.7263377504273455,y=0.17415133160693874 a=wye,b=eks,i=1161,x=0.6442949189199954,y=0.1494819214827784 a=eks,b=wye,i=1162,x=0.9629901424599551,y=0.7303763539966592 a=hat,b=pan,i=1163,x=0.1540633521892789,y=0.30579559836649084 a=pan,b=pan,i=1164,x=0.0565757314681804,y=0.8372880556318811 a=hat,b=pan,i=1165,x=0.6211654981395032,y=0.8227816494549414 a=eks,b=eks,i=1166,x=0.43746753562542595,y=0.4554692262381064 a=zee,b=hat,i=1167,x=0.3367047133504143,y=0.8141824349803665 a=eks,b=pan,i=1168,x=0.8136679912512943,y=0.597540308230969 a=zee,b=wye,i=1169,x=0.5770899885002667,y=0.28863298687378613 a=eks,b=hat,i=1170,x=0.38648551728927116,y=0.444170386297162 a=wye,b=zee,i=1171,x=0.6468403370363878,y=0.9265036001050484 a=wye,b=hat,i=1172,x=0.24417531360698597,y=0.4885016640644757 a=eks,b=pan,i=1173,x=0.14021562324171288,y=0.8343881176338883 a=hat,b=wye,i=1174,x=0.8826971260268877,y=0.5204304309651815 a=wye,b=hat,i=1175,x=0.07253012277298443,y=0.23424850735777059 a=hat,b=eks,i=1176,x=0.006644223863763399,y=0.0816917135559706 a=wye,b=eks,i=1177,x=0.9032818287668923,y=0.3192995339899316 a=eks,b=zee,i=1178,x=0.6806297878854731,y=0.5818723196551134 a=pan,b=pan,i=1179,x=0.8705072785671686,y=0.6988727124241529 a=zee,b=eks,i=1180,x=0.9994378171787394,y=0.13347602700579186 a=hat,b=hat,i=1181,x=0.9918698253530575,y=0.1452498294514708 a=hat,b=eks,i=1182,x=0.7176916554404814,y=0.11479832193407902 a=wye,b=eks,i=1183,x=0.6661595747080763,y=0.38719941985040585 a=zee,b=zee,i=1184,x=0.12344811253503452,y=0.7278140023096202 a=hat,b=eks,i=1185,x=0.8923180879132536,y=0.05433793092315187 a=hat,b=pan,i=1186,x=0.18605162703349232,y=0.08984973385947226 a=pan,b=wye,i=1187,x=0.002298959425301561,y=0.8456888165062316 a=hat,b=hat,i=1188,x=0.12094979737180311,y=0.6069817211275821 a=pan,b=hat,i=1189,x=0.36260151632409887,y=0.5849544530123062 a=hat,b=wye,i=1190,x=0.6833808585344113,y=0.09408333641094069 a=hat,b=pan,i=1191,x=0.6073887594007545,y=0.582980066141568 a=zee,b=zee,i=1192,x=0.20794006469650417,y=0.8379074082927926 a=pan,b=wye,i=1193,x=0.022245524512133796,y=0.6352302232122171 a=eks,b=hat,i=1194,x=0.9006853879899086,y=0.05583549785972808 a=pan,b=pan,i=1195,x=0.16832227022787238,y=0.13828673042487394 a=hat,b=eks,i=1196,x=0.3928690398294634,y=0.6037073958974022 a=pan,b=hat,i=1197,x=0.3580350006103836,y=0.814312590748317 a=zee,b=zee,i=1198,x=0.7027548035545187,y=0.5696437156771905 a=hat,b=wye,i=1199,x=0.5089871727765719,y=0.22764827796274545 a=zee,b=wye,i=1200,x=0.6577969186215513,y=0.13335841083829625 a=zee,b=hat,i=1201,x=0.8874397146268569,y=0.3285624695821543 a=eks,b=eks,i=1202,x=0.8354259959835246,y=0.05671746191419269 a=hat,b=eks,i=1203,x=0.13371374012873294,y=0.255811175503322 a=zee,b=zee,i=1204,x=0.7698393537978214,y=0.15023057683572805 a=pan,b=eks,i=1205,x=0.7829882013835832,y=0.8062997039846184 a=wye,b=hat,i=1206,x=0.8250443883729883,y=0.40002163110909417 a=wye,b=eks,i=1207,x=0.2912587148785738,y=0.8031779767496858 a=zee,b=hat,i=1208,x=0.6858599554715019,y=0.18452417758198125 a=wye,b=wye,i=1209,x=0.7107203114111836,y=0.00017993344165900815 a=pan,b=zee,i=1210,x=0.3363044695544226,y=0.6283867129304496 a=hat,b=eks,i=1211,x=0.8188718956849538,y=0.8967648753839026 a=pan,b=wye,i=1212,x=0.664842209320305,y=0.5067617041720663 a=hat,b=eks,i=1213,x=0.99973332327313,y=0.34548764769191365 a=pan,b=pan,i=1214,x=0.7158445324765502,y=0.7170272500849562 a=zee,b=eks,i=1215,x=0.17023806172245382,y=0.11112961156527701 a=pan,b=eks,i=1216,x=0.032830805279464026,y=0.858300617398515 a=pan,b=pan,i=1217,x=0.058339498506774445,y=0.3299590477816785 a=pan,b=wye,i=1218,x=0.2981850301136384,y=0.275715699110609 a=wye,b=hat,i=1219,x=0.9269469541827934,y=0.433885024903532 a=wye,b=pan,i=1220,x=0.5590392185080515,y=0.3532795367709467 a=zee,b=pan,i=1221,x=0.1120496540408027,y=0.052474214794520524 a=wye,b=wye,i=1222,x=0.32857456764622284,y=0.9839624955444709 a=eks,b=hat,i=1223,x=0.07964593404126263,y=0.5223768981550353 a=zee,b=hat,i=1224,x=0.6087209788431407,y=0.009657060823042296 a=pan,b=hat,i=1225,x=0.2062334403825843,y=0.9229745059225746 a=wye,b=zee,i=1226,x=0.17708548635341936,y=0.9990248955111103 a=zee,b=wye,i=1227,x=0.35351274012969736,y=0.4041475707851616 a=eks,b=eks,i=1228,x=0.5030002251433316,y=0.8127865742005792 a=hat,b=eks,i=1229,x=0.6208757978424075,y=0.5685317001125881 a=hat,b=wye,i=1230,x=0.4033883868841214,y=0.21662083975598512 a=eks,b=hat,i=1231,x=0.8372211910010664,y=0.05104830485393308 a=zee,b=zee,i=1232,x=0.6255227701030528,y=0.7068037158292888 a=zee,b=hat,i=1233,x=0.16099869622122553,y=0.03145480439751913 a=wye,b=eks,i=1234,x=0.29236003818241163,y=0.0038729096629406268 a=zee,b=eks,i=1235,x=0.4597704185565915,y=0.9921180702735245 a=eks,b=wye,i=1236,x=0.25200335314789113,y=0.18668063103395705 a=pan,b=hat,i=1237,x=0.7976885073930762,y=0.5851390530977472 a=eks,b=zee,i=1238,x=0.09123558516113806,y=0.7444584317010036 a=eks,b=wye,i=1239,x=0.28018636325329804,y=0.9609284482216048 a=eks,b=zee,i=1240,x=0.31745479549254885,y=0.19433880518244362 a=wye,b=wye,i=1241,x=0.02167407035426938,y=0.8517578603799361 a=zee,b=zee,i=1242,x=0.6106259696599957,y=0.022315745293787215 a=pan,b=zee,i=1243,x=0.6589609168139929,y=0.6454105665267801 a=wye,b=eks,i=1244,x=0.2787899466812519,y=0.06055887677281169 a=zee,b=pan,i=1245,x=0.2470406639222188,y=0.5853815139856057 a=hat,b=pan,i=1246,x=0.45904971489441826,y=0.5163058230383074 a=eks,b=wye,i=1247,x=0.9834930996078813,y=0.4959362914616142 a=pan,b=hat,i=1248,x=0.1525604218696871,y=0.07482470280574516 a=hat,b=hat,i=1249,x=0.7002367713266386,y=0.6487527612372115 a=zee,b=hat,i=1250,x=0.9701426957388892,y=0.7845500860373503 a=pan,b=hat,i=1251,x=0.5290805139059341,y=0.7100071242645416 a=hat,b=hat,i=1252,x=0.09930445608258032,y=0.5660530272938328 a=zee,b=eks,i=1253,x=0.5423655422122198,y=0.859227213109029 a=zee,b=pan,i=1254,x=0.21221332375586466,y=0.26582553763793293 a=zee,b=eks,i=1255,x=0.5793553556065434,y=0.563660887083747 a=pan,b=pan,i=1256,x=0.10769070223113286,y=0.7797941844365985 a=wye,b=wye,i=1257,x=0.23334157949355694,y=0.48533573180276546 a=pan,b=wye,i=1258,x=0.2995600681122321,y=0.7432427054977825 a=zee,b=wye,i=1259,x=0.18343409452228054,y=0.018648673229345936 a=wye,b=eks,i=1260,x=0.7451552312920868,y=0.7083570752878636 a=zee,b=zee,i=1261,x=0.5511811148393049,y=0.1182107616782363 a=eks,b=pan,i=1262,x=0.6119687598964016,y=0.8309635765979287 a=hat,b=zee,i=1263,x=0.990205350112817,y=0.9130137981522629 a=wye,b=eks,i=1264,x=0.2728580162726342,y=0.34083170474058677 a=wye,b=hat,i=1265,x=0.03629556392023969,y=0.14427174473473803 a=zee,b=eks,i=1266,x=0.042350338334240956,y=0.1289699792266037 a=eks,b=wye,i=1267,x=0.6455892671517784,y=0.2737715815072643 a=pan,b=eks,i=1268,x=0.49258185461644277,y=0.6767874718351204 a=hat,b=zee,i=1269,x=0.23099691497930386,y=0.010607810026782571 a=wye,b=wye,i=1270,x=0.7995556109605628,y=0.16274406637511674 a=hat,b=zee,i=1271,x=0.6536639656492141,y=0.4372415589868961 a=hat,b=eks,i=1272,x=0.9299854741714102,y=0.1361271855956554 a=wye,b=pan,i=1273,x=0.3500305547201491,y=0.19911752000719163 a=zee,b=pan,i=1274,x=0.8415267085560889,y=0.04046540168663748 a=wye,b=zee,i=1275,x=0.45988125966489024,y=0.44169640932292065 a=zee,b=eks,i=1276,x=0.5025321996588512,y=0.23509973545961738 a=zee,b=hat,i=1277,x=0.4881304294165376,y=0.5108673128747018 a=hat,b=zee,i=1278,x=0.34542108789754955,y=0.6393029254293789 a=hat,b=hat,i=1279,x=0.652274017608231,y=0.2139035554469655 a=hat,b=eks,i=1280,x=0.46886095371359493,y=0.40718264857353603 a=wye,b=eks,i=1281,x=0.23006798520906935,y=0.08383446031686925 a=wye,b=zee,i=1282,x=0.19157221596770568,y=0.8125166888087554 a=hat,b=eks,i=1283,x=0.5054724357500647,y=0.7470906139600201 a=hat,b=zee,i=1284,x=0.1351519159722092,y=0.4498407585837816 a=eks,b=wye,i=1285,x=0.9928332865840428,y=0.6970272102748626 a=zee,b=pan,i=1286,x=0.5903100219747524,y=0.3978181484200255 a=zee,b=zee,i=1287,x=0.9279289993969526,y=0.2801555418399182 a=zee,b=eks,i=1288,x=0.9628830236233576,y=0.9651783931494015 a=hat,b=eks,i=1289,x=0.18315393370531752,y=0.1945534839637214 a=zee,b=hat,i=1290,x=0.24224308391281513,y=0.5569008521094203 a=eks,b=zee,i=1291,x=0.9018025573968887,y=0.8449305240236747 a=eks,b=eks,i=1292,x=0.7608771883116217,y=0.7517241556722504 a=wye,b=hat,i=1293,x=0.15064377804093187,y=0.4793850890733947 a=eks,b=eks,i=1294,x=0.9835365178053855,y=0.4991321788048013 a=eks,b=wye,i=1295,x=0.6604229543170217,y=0.28382403297933256 a=pan,b=zee,i=1296,x=0.4653477162195633,y=0.8951405958621811 a=zee,b=zee,i=1297,x=0.27094318332243583,y=0.7304405621024768 a=zee,b=wye,i=1298,x=0.779174519106144,y=0.8363414405399494 a=wye,b=pan,i=1299,x=0.412255986899035,y=0.6866252838817691 a=zee,b=zee,i=1300,x=0.005776325077187949,y=0.8475053706800095 a=zee,b=hat,i=1301,x=0.7301684966378752,y=0.2613687718642025 a=wye,b=wye,i=1302,x=0.18017602702804525,y=0.2080647082488024 a=eks,b=eks,i=1303,x=0.2453496160424028,y=0.8111166316808313 a=eks,b=pan,i=1304,x=0.8469416170979848,y=0.9095929671389578 a=hat,b=wye,i=1305,x=0.1011787110939425,y=0.17876379874526727 a=hat,b=pan,i=1306,x=0.354306631649279,y=0.14650574878242473 a=pan,b=wye,i=1307,x=0.7179146053664565,y=0.0912103605838348 a=eks,b=eks,i=1308,x=0.38852974503903526,y=0.9366885248501026 a=hat,b=wye,i=1309,x=0.44974216883963103,y=0.90399629076228 a=wye,b=hat,i=1310,x=0.5674008146861433,y=0.24793347465919724 a=pan,b=eks,i=1311,x=0.4468521405894835,y=0.8073232684030767 a=eks,b=wye,i=1312,x=0.7048361671767605,y=0.2809802874043469 a=hat,b=zee,i=1313,x=0.6080368706120283,y=0.7923296244615721 a=pan,b=hat,i=1314,x=0.978539901340635,y=0.4361858063106284 a=zee,b=wye,i=1315,x=0.49174797358568,y=0.21477329503908604 a=hat,b=zee,i=1316,x=0.8447890636321257,y=0.5448553401794702 a=zee,b=pan,i=1317,x=0.234827977442866,y=0.36535789013854214 a=pan,b=wye,i=1318,x=0.28563288006029197,y=0.8722097325921051 a=pan,b=eks,i=1319,x=0.1574949973988704,y=0.737864320805229 a=hat,b=eks,i=1320,x=0.49021876898019556,y=0.9850723155763529 a=hat,b=hat,i=1321,x=0.10849276460754553,y=0.7096856014411096 a=eks,b=pan,i=1322,x=0.7704102390506976,y=0.2939166316548699 a=hat,b=pan,i=1323,x=0.785186354961605,y=0.5187554224402933 a=hat,b=wye,i=1324,x=0.4653747699218791,y=0.07316638818680055 a=zee,b=pan,i=1325,x=0.0726981243268019,y=0.9334085397103126 a=wye,b=eks,i=1326,x=0.5019035191475638,y=0.9808444985066099 a=zee,b=zee,i=1327,x=0.7577704935146902,y=0.07319296743342829 a=eks,b=wye,i=1328,x=0.027884294519191055,y=0.9742594194746489 a=hat,b=wye,i=1329,x=0.30934341709858726,y=0.7358665625064501 a=zee,b=wye,i=1330,x=0.20196851520666603,y=0.4686296388879383 a=wye,b=hat,i=1331,x=0.9886209096293992,y=0.35033943519876 a=pan,b=eks,i=1332,x=0.9437028531431318,y=0.8092545870987017 a=zee,b=pan,i=1333,x=0.025047095442164324,y=0.6492043063154611 a=pan,b=hat,i=1334,x=0.8484332941587861,y=0.24802424949042978 a=zee,b=zee,i=1335,x=0.5987101585948386,y=0.7670719549466084 a=wye,b=wye,i=1336,x=0.5875375382759155,y=0.12052683112565199 a=eks,b=eks,i=1337,x=0.5316127857819793,y=0.19131458191720963 a=pan,b=pan,i=1338,x=0.08200277948024282,y=0.6794187346086508 a=eks,b=wye,i=1339,x=0.5575467999942988,y=0.7816590387896203 a=eks,b=zee,i=1340,x=0.1329029001223042,y=0.7468954697559254 a=pan,b=zee,i=1341,x=0.8491462615453724,y=0.7667214357631618 a=zee,b=wye,i=1342,x=0.016857231484302737,y=0.7189825771028026 a=hat,b=zee,i=1343,x=0.0204145133471626,y=0.9850483398706436 a=pan,b=eks,i=1344,x=0.14343578380352173,y=0.3534760283313706 a=zee,b=zee,i=1345,x=0.3068266605225908,y=0.1872593613407797 a=eks,b=hat,i=1346,x=0.75151508070612,y=0.2636098408590172 a=eks,b=pan,i=1347,x=0.6927435409900552,y=0.8895994295177906 a=eks,b=pan,i=1348,x=0.6801900016838289,y=0.81285575413888 a=wye,b=pan,i=1349,x=0.5495196174214054,y=0.024059334079716832 a=wye,b=hat,i=1350,x=0.7464955639967092,y=0.635601451124977 a=wye,b=hat,i=1351,x=0.1945383266452364,y=0.6098906438896057 a=hat,b=zee,i=1352,x=0.2313757351431155,y=0.9047115591444801 a=zee,b=zee,i=1353,x=0.09798837394769866,y=0.4857389187941127 a=pan,b=wye,i=1354,x=0.020855652150608917,y=0.7979437738522005 a=pan,b=zee,i=1355,x=0.4204132169844832,y=0.016976719720622646 a=pan,b=eks,i=1356,x=0.3722527646196434,y=0.9516382491937279 a=hat,b=wye,i=1357,x=0.6527272744396904,y=0.5760550769108022 a=wye,b=zee,i=1358,x=0.40135887170615936,y=0.49587544313347875 a=eks,b=zee,i=1359,x=0.5832103840317804,y=0.4551385962898433 a=wye,b=pan,i=1360,x=0.13086231928141434,y=0.010866288916755895 a=eks,b=pan,i=1361,x=0.9224505345587571,y=0.09488253298885452 a=pan,b=pan,i=1362,x=0.21757550606480047,y=0.3250911878972238 a=zee,b=wye,i=1363,x=0.12002019129987074,y=0.330458068115164 a=hat,b=zee,i=1364,x=0.11093600453342645,y=0.46812386024583597 a=pan,b=wye,i=1365,x=0.2446315231324211,y=0.734485128500915 a=pan,b=eks,i=1366,x=0.44912372133198186,y=0.13603083622218803 a=hat,b=wye,i=1367,x=0.4410716319202098,y=0.5052447169227966 a=pan,b=hat,i=1368,x=0.5290826491768821,y=0.7868317670838846 a=hat,b=hat,i=1369,x=0.9003291714409005,y=0.6548894347969356 a=pan,b=zee,i=1370,x=0.20647577118202198,y=0.6570041239170981 a=hat,b=zee,i=1371,x=0.46970274230450093,y=0.9041951983476588 a=eks,b=pan,i=1372,x=0.6125178186376162,y=0.40366807591765197 a=eks,b=zee,i=1373,x=0.7520637884030741,y=0.7184683086802719 a=pan,b=pan,i=1374,x=0.9344059163223443,y=0.3777271392017554 a=wye,b=wye,i=1375,x=0.12707467974137798,y=0.951904259345876 a=hat,b=zee,i=1376,x=0.3256794711244385,y=0.38645249736136067 a=eks,b=hat,i=1377,x=0.179526538530434,y=0.20081807319252887 a=wye,b=zee,i=1378,x=0.2516305024121336,y=0.6994126099643698 a=pan,b=zee,i=1379,x=0.6583708842508542,y=0.12745947685299774 a=zee,b=hat,i=1380,x=0.85880207513692,y=0.5362089929386346 a=eks,b=eks,i=1381,x=0.7480180475780296,y=0.9104247466520813 a=pan,b=pan,i=1382,x=0.5734287289517749,y=0.8325676507978588 a=wye,b=pan,i=1383,x=0.7445746522867436,y=0.977610514961822 a=hat,b=pan,i=1384,x=0.18929691453341568,y=0.09316356559826999 a=hat,b=eks,i=1385,x=0.8173647642606612,y=0.685818179101868 a=hat,b=wye,i=1386,x=0.7472200309764511,y=0.040129476799068864 a=eks,b=hat,i=1387,x=0.6336667717285401,y=0.7885877398020724 a=eks,b=eks,i=1388,x=0.6391264035893477,y=0.885429385188037 a=zee,b=hat,i=1389,x=0.2737321526786327,y=0.40630528382661724 a=wye,b=eks,i=1390,x=0.8747667631201688,y=0.44871788319272277 a=eks,b=wye,i=1391,x=0.4921330479506649,y=0.23072265405056214 a=hat,b=wye,i=1392,x=0.03644384893663821,y=0.8601480046083115 a=zee,b=zee,i=1393,x=0.568247504526133,y=0.7756896840334044 a=eks,b=wye,i=1394,x=0.2879212011081145,y=0.2954751331645483 a=pan,b=zee,i=1395,x=0.6235312578229149,y=0.9190115143142508 a=eks,b=hat,i=1396,x=0.3925348585643007,y=0.6541017210621741 a=wye,b=wye,i=1397,x=0.1908719616976211,y=0.49066946794315214 a=pan,b=wye,i=1398,x=0.44636597753534346,y=0.1332459124221107 a=hat,b=wye,i=1399,x=0.15627409090669087,y=0.6666239928392401 a=pan,b=pan,i=1400,x=0.7498043663610715,y=0.9134287398239703 a=pan,b=zee,i=1401,x=0.1954474110318004,y=0.7423530907643979 a=zee,b=zee,i=1402,x=0.014212868410986568,y=0.725003340165483 a=hat,b=eks,i=1403,x=0.7141565502820018,y=0.8983828801012884 a=eks,b=wye,i=1404,x=0.014080795466545282,y=0.18026639861936977 a=zee,b=pan,i=1405,x=0.6715143596794965,y=0.921403075922691 a=zee,b=zee,i=1406,x=0.542929251925297,y=0.5096745932177545 a=hat,b=hat,i=1407,x=0.925464277899458,y=0.8114581401124622 a=hat,b=eks,i=1408,x=0.8155145601390111,y=0.4662651057032756 a=hat,b=pan,i=1409,x=0.7360283636432529,y=0.530485536184739 a=wye,b=eks,i=1410,x=0.18097124504277107,y=0.7796289744650133 a=zee,b=zee,i=1411,x=0.036610885557006756,y=0.9383609949487812 a=zee,b=zee,i=1412,x=0.3608642872844662,y=0.47981840619533633 a=zee,b=eks,i=1413,x=0.5222789053544413,y=0.2735382327354091 a=pan,b=pan,i=1414,x=0.41821681358517837,y=0.09261463379853807 a=eks,b=pan,i=1415,x=0.36407936516918227,y=0.412995532484439 a=zee,b=eks,i=1416,x=0.8037535280997706,y=0.9967016304554022 a=zee,b=wye,i=1417,x=0.03656836512418926,y=0.24047847966373825 a=hat,b=zee,i=1418,x=0.9966705327199551,y=0.24331478490278557 a=eks,b=zee,i=1419,x=0.0019272339003844063,y=0.4494856127708353 a=wye,b=zee,i=1420,x=0.26078653509711935,y=0.8205856479809418 a=eks,b=zee,i=1421,x=0.3781190702325734,y=0.7756276321642843 a=eks,b=eks,i=1422,x=0.8685238966563206,y=0.4749950592532425 a=hat,b=wye,i=1423,x=0.015363751269120707,y=0.7156073118022606 a=eks,b=hat,i=1424,x=0.816131333846752,y=0.6719670303804344 a=pan,b=hat,i=1425,x=0.7608261327843064,y=0.8033020578141182 a=wye,b=pan,i=1426,x=0.15941112007072045,y=0.5893140312689553 a=hat,b=wye,i=1427,x=0.37742125258201054,y=0.21248345631269194 a=pan,b=eks,i=1428,x=0.2179834817521752,y=0.6045604185833173 a=wye,b=hat,i=1429,x=0.6945031453929469,y=0.4781622710344138 a=hat,b=hat,i=1430,x=0.2249233470581683,y=0.2783168994644075 a=hat,b=pan,i=1431,x=0.4641755096893504,y=0.9173237513729213 a=pan,b=zee,i=1432,x=0.7027031224037956,y=0.3317909620850288 a=zee,b=hat,i=1433,x=0.7968305326329156,y=0.02115891484339094 a=eks,b=hat,i=1434,x=0.824832015791001,y=0.15206099206432044 a=pan,b=wye,i=1435,x=0.9895511842399779,y=0.24672707930718718 a=zee,b=wye,i=1436,x=0.03443424698915787,y=0.7036923651780208 a=eks,b=eks,i=1437,x=0.7077146987434991,y=0.4772318639588453 a=wye,b=zee,i=1438,x=0.280848551545003,y=0.581684502725692 a=wye,b=pan,i=1439,x=0.29634793935457593,y=0.15883447307684273 a=hat,b=wye,i=1440,x=0.9552968869720926,y=0.7549130979076563 a=eks,b=wye,i=1441,x=0.782665993384691,y=0.6769028671991114 a=wye,b=wye,i=1442,x=0.1111822347810345,y=0.4098271097617635 a=wye,b=pan,i=1443,x=0.9004115661167051,y=0.8953351280072975 a=eks,b=eks,i=1444,x=0.7825483490155876,y=0.1911154945653185 a=wye,b=hat,i=1445,x=0.5126253689092004,y=0.9851511494903027 a=zee,b=hat,i=1446,x=0.5683263846018851,y=0.36460301344654333 a=hat,b=wye,i=1447,x=0.0058754901082536115,y=0.774777974548495 a=eks,b=hat,i=1448,x=0.3708973278245986,y=0.8180561446210824 a=pan,b=zee,i=1449,x=0.7342563560822476,y=0.5866440660526566 a=wye,b=zee,i=1450,x=0.057991219063554644,y=0.5720271334501862 a=zee,b=pan,i=1451,x=0.7266623210900269,y=0.5529202681153802 a=pan,b=zee,i=1452,x=0.6045149915326044,y=0.43879278090859253 a=wye,b=pan,i=1453,x=0.7396355861845729,y=0.07902637119446942 a=hat,b=pan,i=1454,x=0.6796123362492761,y=0.07338367835669557 a=wye,b=hat,i=1455,x=0.6393700516557285,y=0.3786022905745211 a=pan,b=zee,i=1456,x=0.6285804221646021,y=0.9875061625049019 a=wye,b=wye,i=1457,x=0.020604286592247223,y=0.9051047892954668 a=wye,b=eks,i=1458,x=0.9288057779036796,y=0.08184955257646931 a=eks,b=hat,i=1459,x=0.37211255193051374,y=0.7275732107413054 a=hat,b=eks,i=1460,x=0.8976672611360175,y=0.11158201921723399 a=pan,b=pan,i=1461,x=0.8953302483551178,y=0.3176124805910262 a=zee,b=eks,i=1462,x=0.11393628149045654,y=0.14776897927457688 a=zee,b=wye,i=1463,x=0.9485009664381004,y=0.6876104431895068 a=pan,b=eks,i=1464,x=0.5034433003230543,y=0.9194125130762513 a=pan,b=zee,i=1465,x=0.18563268428375257,y=0.09241285966004353 a=zee,b=eks,i=1466,x=0.9809617365136725,y=0.41584412119368963 a=eks,b=eks,i=1467,x=0.5966766034558736,y=0.5918168248126415 a=zee,b=wye,i=1468,x=0.8524700641554818,y=0.9423215024482277 a=hat,b=hat,i=1469,x=0.30981599429404116,y=0.8121609570712267 a=eks,b=wye,i=1470,x=0.3172972103854893,y=0.5803204798913618 a=hat,b=eks,i=1471,x=0.33123267379248844,y=0.816316950700786 a=pan,b=pan,i=1472,x=0.13616411059500877,y=0.29064871767206657 a=eks,b=pan,i=1473,x=0.2072400514044095,y=0.6358868351183312 a=eks,b=wye,i=1474,x=0.4211179162576446,y=0.21058536437655107 a=pan,b=eks,i=1475,x=0.4704809160051703,y=0.8307787116985389 a=zee,b=pan,i=1476,x=0.13639522899731849,y=0.23338840020951146 a=pan,b=zee,i=1477,x=0.2723828998857428,y=0.9470378753636345 a=wye,b=hat,i=1478,x=0.9181407667919723,y=0.542065887413139 a=eks,b=pan,i=1479,x=0.36997774655144844,y=0.9163407928935801 a=hat,b=eks,i=1480,x=0.4110600513034226,y=0.762934868654504 a=eks,b=hat,i=1481,x=0.07888272339471736,y=0.9970129572140034 a=pan,b=wye,i=1482,x=0.18636069480197193,y=0.9912578166928323 a=hat,b=eks,i=1483,x=0.14507297992678936,y=0.005565478369193744 a=wye,b=eks,i=1484,x=0.12541139811813662,y=0.7168687280478707 a=pan,b=pan,i=1485,x=0.39466783430726504,y=0.982498465405116 a=wye,b=pan,i=1486,x=0.42338989462787613,y=0.21044104481161763 a=hat,b=pan,i=1487,x=0.15371916098016003,y=0.6216331795342438 a=wye,b=hat,i=1488,x=0.24032388275558492,y=0.8561385404203309 a=pan,b=zee,i=1489,x=0.9254041583361616,y=0.8626755735608904 a=wye,b=wye,i=1490,x=0.6717355270144156,y=0.12382812446245695 a=hat,b=zee,i=1491,x=0.8374077645159174,y=0.2868130167653046 a=zee,b=hat,i=1492,x=0.31566626553195365,y=0.18969237480034762 a=pan,b=hat,i=1493,x=0.7443466050859169,y=0.5883736148067066 a=pan,b=zee,i=1494,x=0.489472189755636,y=0.2436710488233178 a=pan,b=hat,i=1495,x=0.31071524278241913,y=0.3032733210952677 a=wye,b=zee,i=1496,x=0.6743178734293219,y=0.018796476267587625 a=eks,b=zee,i=1497,x=0.13194664583383386,y=0.13915515391288613 a=wye,b=pan,i=1498,x=0.40290420886277534,y=0.45645851051725006 a=zee,b=pan,i=1499,x=0.7372530102597384,y=0.28172203934687556 a=zee,b=wye,i=1500,x=0.8051155053673082,y=0.628483371578552 a=hat,b=pan,i=1501,x=0.8675575754177055,y=0.5525846951861648 a=pan,b=zee,i=1502,x=0.8765052305323637,y=0.3446134001019854 a=wye,b=pan,i=1503,x=0.5396577054171726,y=0.6580836727630581 a=eks,b=wye,i=1504,x=0.3351263725136986,y=0.16701945030517473 a=zee,b=wye,i=1505,x=0.502492235570156,y=0.27616039273844517 a=hat,b=wye,i=1506,x=0.11505114122495796,y=0.344787577171222 a=wye,b=hat,i=1507,x=0.84331982245662,y=0.5563459493044525 a=eks,b=wye,i=1508,x=0.19701887217577851,y=0.5005677125700215 a=hat,b=eks,i=1509,x=0.6569568959744496,y=0.37010077528594765 a=wye,b=pan,i=1510,x=0.7194905750125422,y=0.37415889411709513 a=zee,b=hat,i=1511,x=0.9889028039860764,y=0.25079970858002243 a=zee,b=hat,i=1512,x=0.40679341185508744,y=0.5138676082375969 a=eks,b=hat,i=1513,x=0.10774228377040074,y=0.15410741897104152 a=eks,b=eks,i=1514,x=0.4621589895594861,y=0.9572796836020941 a=eks,b=eks,i=1515,x=0.37334324705844235,y=0.5146787371775148 a=pan,b=eks,i=1516,x=0.322276672926436,y=0.4473633411895408 a=eks,b=eks,i=1517,x=0.9166592846030838,y=0.9746072560912218 a=zee,b=zee,i=1518,x=0.6805021595118457,y=0.0973567941307375 a=eks,b=zee,i=1519,x=0.008458305921919762,y=0.13018614842795018 a=wye,b=pan,i=1520,x=0.6365490008145669,y=0.717108948902972 a=zee,b=eks,i=1521,x=0.8128775978881801,y=0.8496069709075166 a=zee,b=eks,i=1522,x=0.7549485896689099,y=0.8158698570741542 a=wye,b=wye,i=1523,x=0.005603558151104915,y=0.7322907338442813 a=eks,b=wye,i=1524,x=0.2173598291514076,y=0.8332636657137272 a=eks,b=hat,i=1525,x=0.9893289065716524,y=0.4815313236058858 a=wye,b=eks,i=1526,x=0.5993045597268822,y=0.8066671481799782 a=pan,b=hat,i=1527,x=0.28028817426492336,y=0.9622494242847022 a=zee,b=hat,i=1528,x=0.1807703534747297,y=0.5647917504765553 a=pan,b=zee,i=1529,x=0.6659896188082082,y=0.08073793623287506 a=wye,b=zee,i=1530,x=0.0001874794831505655,y=0.316767027644979 a=pan,b=zee,i=1531,x=0.8883596657541506,y=0.5839060771184763 a=eks,b=hat,i=1532,x=0.901005316986836,y=0.8140237382706386 a=zee,b=hat,i=1533,x=0.9413660325436318,y=0.06622163813109339 a=hat,b=eks,i=1534,x=0.03906160456377494,y=0.1079795640773159 a=pan,b=hat,i=1535,x=0.9317916001293041,y=0.3898775157821377 a=wye,b=hat,i=1536,x=0.015674157771976116,y=0.69356849237495 a=pan,b=pan,i=1537,x=0.24487835477169373,y=0.5533586202131611 a=pan,b=pan,i=1538,x=0.7004457835988849,y=0.9254536373090144 a=zee,b=zee,i=1539,x=0.08095025737185801,y=0.42649957909211544 a=zee,b=hat,i=1540,x=0.5503724625066438,y=0.8550739169017145 a=pan,b=wye,i=1541,x=0.45409966242017596,y=0.6097069133161814 a=wye,b=wye,i=1542,x=0.8929002429586355,y=0.32554836024869227 a=pan,b=hat,i=1543,x=0.5949367118079497,y=0.8559890968130015 a=wye,b=zee,i=1544,x=0.9409798267255335,y=0.018548163160445608 a=pan,b=eks,i=1545,x=0.7534669087213052,y=0.23450536691315327 a=pan,b=eks,i=1546,x=0.2200107807755327,y=0.4056585225829311 a=pan,b=hat,i=1547,x=0.6431981362856164,y=0.20869397212585072 a=hat,b=zee,i=1548,x=0.7802297233261388,y=0.7951833869084849 a=wye,b=eks,i=1549,x=0.0689521292391374,y=0.7883769928657323 a=wye,b=wye,i=1550,x=0.08609382344969774,y=0.39902582557569544 a=zee,b=zee,i=1551,x=0.8470067873893261,y=0.16901402355720452 a=wye,b=eks,i=1552,x=0.7411482258747379,y=0.5326218258597286 a=eks,b=wye,i=1553,x=0.9069733522359251,y=0.30710040658612636 a=zee,b=eks,i=1554,x=0.27856650294803487,y=0.3773512841270542 a=pan,b=pan,i=1555,x=0.5341857564145447,y=0.33670626249057545 a=zee,b=pan,i=1556,x=0.810331031324778,y=0.8529873485281747 a=pan,b=eks,i=1557,x=0.8809860667113874,y=0.6544680775174134 a=zee,b=zee,i=1558,x=0.5835792774028313,y=0.7084079588663174 a=wye,b=zee,i=1559,x=0.44436564072900075,y=0.5752434865340957 a=hat,b=zee,i=1560,x=0.05594331248193807,y=0.6221392828715202 a=pan,b=zee,i=1561,x=0.705850527727704,y=0.9592589404430422 a=hat,b=hat,i=1562,x=0.31193139935992087,y=0.16547553772610035 a=wye,b=pan,i=1563,x=0.619202510644987,y=0.43091955100529267 a=zee,b=eks,i=1564,x=0.3001925600592342,y=0.8376369289625749 a=zee,b=pan,i=1565,x=0.012156208135737478,y=0.3456043711066239 a=zee,b=wye,i=1566,x=0.8568468043920444,y=0.4407063036969697 a=zee,b=wye,i=1567,x=0.9107751651007914,y=0.4338277282451076 a=zee,b=hat,i=1568,x=0.7354460222177639,y=0.9579628704250065 a=pan,b=pan,i=1569,x=0.28206876750655996,y=0.6360639371724323 a=zee,b=eks,i=1570,x=0.8221229536271197,y=0.11834502495832944 a=pan,b=wye,i=1571,x=0.6137258407313767,y=0.9758738290281926 a=pan,b=pan,i=1572,x=0.21906870698568925,y=0.09712236243897499 a=pan,b=eks,i=1573,x=0.3161549490930624,y=0.6465981924405851 a=zee,b=hat,i=1574,x=0.392507481283901,y=0.8101156318295134 a=eks,b=eks,i=1575,x=0.7966043024311776,y=0.2593981756391409 a=zee,b=zee,i=1576,x=0.8002836252017393,y=0.8669638365198293 a=wye,b=hat,i=1577,x=0.0784765489757262,y=0.2919577999135742 a=wye,b=wye,i=1578,x=0.8007027846918099,y=0.16134496938130005 a=wye,b=zee,i=1579,x=0.8737327971880199,y=0.7021864790253274 a=zee,b=wye,i=1580,x=0.5926703370632916,y=0.6204701558848567 a=eks,b=zee,i=1581,x=0.3258371500409273,y=0.4813220118624293 a=wye,b=wye,i=1582,x=0.45519672674498746,y=0.6149833786028758 a=pan,b=wye,i=1583,x=0.7445036133271608,y=0.3559946225162539 a=eks,b=pan,i=1584,x=0.21680886346713335,y=0.8184061883186948 a=wye,b=wye,i=1585,x=0.031589920237896196,y=0.5767882347019143 a=pan,b=wye,i=1586,x=0.6737421455744065,y=0.8440144488545762 a=wye,b=eks,i=1587,x=0.2445786639209251,y=0.4387287649518946 a=hat,b=pan,i=1588,x=0.5212487539988067,y=0.2199522299331076 a=hat,b=zee,i=1589,x=0.6381249665841564,y=0.6622471527137181 a=zee,b=zee,i=1590,x=0.49197726385941254,y=0.2851074772091239 a=pan,b=wye,i=1591,x=0.27721780314806643,y=0.42224771091002244 a=pan,b=wye,i=1592,x=0.945365956010478,y=0.09306257348741964 a=wye,b=wye,i=1593,x=0.12456537324161354,y=0.709614178322504 a=hat,b=wye,i=1594,x=0.1981221992299298,y=0.6757943828554006 a=pan,b=pan,i=1595,x=0.5198729892603339,y=0.8135669258519346 a=eks,b=wye,i=1596,x=0.8578168450376926,y=0.8632162279300964 a=eks,b=hat,i=1597,x=0.3540018556898594,y=0.7991052287555176 a=eks,b=wye,i=1598,x=0.9276333581678391,y=0.06549902318059164 a=wye,b=zee,i=1599,x=0.4561658314107403,y=0.6365134752538643 a=pan,b=pan,i=1600,x=0.9022636603358615,y=0.2162188539106099 a=zee,b=hat,i=1601,x=0.21917535804489907,y=0.49754205213030844 a=wye,b=pan,i=1602,x=0.8342980736735198,y=0.6640472095662565 a=zee,b=wye,i=1603,x=0.8557749370240072,y=0.05159217506855951 a=eks,b=pan,i=1604,x=0.6578249784146099,y=0.08991421995527515 a=pan,b=hat,i=1605,x=0.7597487093068874,y=0.8484514239165745 a=pan,b=eks,i=1606,x=0.6945970040541443,y=0.2660407416106616 a=wye,b=hat,i=1607,x=0.9316005854017254,y=0.061544811707459846 a=pan,b=pan,i=1608,x=0.1076571003288127,y=0.7762663913386769 a=hat,b=hat,i=1609,x=0.6237995866155571,y=0.07849520372537022 a=wye,b=eks,i=1610,x=0.09062598480760276,y=0.3361854985819238 a=pan,b=pan,i=1611,x=0.007836662246717752,y=0.5697242748348913 a=eks,b=pan,i=1612,x=0.34051658433735943,y=0.28757859267810415 a=hat,b=zee,i=1613,x=0.6572715559476069,y=0.39371095173028303 a=wye,b=pan,i=1614,x=0.8905869590474236,y=0.047907908875908234 a=eks,b=wye,i=1615,x=0.05539774482352222,y=0.030230875132911672 a=hat,b=pan,i=1616,x=0.31269372542106866,y=0.5929050080918079 a=eks,b=eks,i=1617,x=0.5259315994925159,y=0.3120388126285063 a=zee,b=eks,i=1618,x=0.41825022828100444,y=0.010066997525972399 a=hat,b=pan,i=1619,x=0.9529901310801209,y=0.24566804188484748 a=eks,b=hat,i=1620,x=0.1861273836070172,y=0.2869387265308132 a=wye,b=eks,i=1621,x=0.4197448738879491,y=0.057355525921190864 a=eks,b=eks,i=1622,x=0.5188894343183612,y=0.14708356201436057 a=pan,b=hat,i=1623,x=0.6787950657750607,y=0.06224754425761503 a=eks,b=zee,i=1624,x=0.9376797227474318,y=0.45224464425072863 a=wye,b=zee,i=1625,x=0.7652458613408694,y=0.959285581308301 a=wye,b=hat,i=1626,x=0.3525357465470107,y=0.7113074877138676 a=eks,b=eks,i=1627,x=0.6651612159386544,y=0.09641171687890637 a=pan,b=hat,i=1628,x=0.6018119249348337,y=0.2647753300105741 a=hat,b=zee,i=1629,x=0.41083118021802867,y=0.019106148002514645 a=hat,b=wye,i=1630,x=0.4217815192818861,y=0.6702955396816114 a=wye,b=hat,i=1631,x=0.7242804590797115,y=0.9448679681099966 a=wye,b=wye,i=1632,x=0.11624568451306994,y=0.8905809281772715 a=pan,b=wye,i=1633,x=0.38538324135826085,y=0.9883618907956973 a=hat,b=pan,i=1634,x=0.5776207387085575,y=0.2528561924267074 a=wye,b=pan,i=1635,x=0.8895974823179132,y=0.9200024991202054 a=wye,b=wye,i=1636,x=0.9393356532728606,y=0.6298264999340702 a=wye,b=eks,i=1637,x=0.9073542081519019,y=0.6848431646656846 a=hat,b=wye,i=1638,x=0.41413865923623305,y=0.9996509466622345 a=hat,b=pan,i=1639,x=0.4583916991957001,y=0.6357936726110696 a=eks,b=wye,i=1640,x=0.7198824080298333,y=0.7037862057023272 a=zee,b=hat,i=1641,x=0.17301970050562698,y=0.7988297836126249 a=hat,b=zee,i=1642,x=0.08350260061450743,y=0.7500700943710352 a=pan,b=eks,i=1643,x=0.4445332045218795,y=0.5668553575161199 a=hat,b=zee,i=1644,x=0.958532242547598,y=0.2998060164234553 a=pan,b=pan,i=1645,x=0.8386173577817879,y=0.7579883039951569 a=zee,b=hat,i=1646,x=0.4223193298481345,y=0.8728331174039174 a=wye,b=zee,i=1647,x=0.3542223974517451,y=0.4616303281316404 a=zee,b=pan,i=1648,x=0.1732057619535785,y=0.21331253786975357 a=hat,b=wye,i=1649,x=0.7928655951515221,y=0.29258856907772846 a=zee,b=wye,i=1650,x=0.8310778499617896,y=0.8744033167682863 a=pan,b=wye,i=1651,x=0.22292538964605568,y=0.8685911019201707 a=eks,b=zee,i=1652,x=0.5205479143101123,y=0.2930255040077785 a=wye,b=wye,i=1653,x=0.6034173789737551,y=0.7826811363427305 a=hat,b=zee,i=1654,x=0.1272383433369223,y=0.7739737595522014 a=zee,b=eks,i=1655,x=0.31813723998346144,y=0.2538852441364856 a=wye,b=hat,i=1656,x=0.18836020025377764,y=0.20683034404839462 a=pan,b=hat,i=1657,x=0.6185887927483923,y=0.10371843594601571 a=wye,b=zee,i=1658,x=0.42244696220990907,y=0.25272710810302346 a=wye,b=hat,i=1659,x=0.29012052922811093,y=0.41591681426338967 a=wye,b=hat,i=1660,x=0.4268085841844734,y=0.3388035517120921 a=eks,b=hat,i=1661,x=0.13934499347961038,y=0.03663996929413327 a=pan,b=hat,i=1662,x=0.012677030530496736,y=0.510781054167575 a=zee,b=eks,i=1663,x=0.40503031227105424,y=0.6047965215819301 a=wye,b=pan,i=1664,x=0.6399761240712305,y=0.09533593475272217 a=wye,b=eks,i=1665,x=0.8939474493355103,y=0.9223252135239184 a=pan,b=eks,i=1666,x=0.16666185875740613,y=0.5177501799126248 a=pan,b=wye,i=1667,x=0.7253392873302943,y=0.09162119951978043 a=eks,b=eks,i=1668,x=0.513508182615633,y=0.1685023831639888 a=wye,b=hat,i=1669,x=0.4710950479501834,y=0.03651025725804602 a=hat,b=eks,i=1670,x=0.6003116669898597,y=0.7981557111587316 a=pan,b=pan,i=1671,x=0.8116187328458756,y=0.8072718271616067 a=pan,b=wye,i=1672,x=0.7034003424147444,y=0.6847351199705963 a=wye,b=hat,i=1673,x=0.5949143416873871,y=0.8102803139285161 a=hat,b=wye,i=1674,x=0.5855903947052084,y=0.4648428630367838 a=hat,b=pan,i=1675,x=0.3455272053677292,y=0.6971667108454541 a=wye,b=wye,i=1676,x=0.29137127774161453,y=0.3509788972831772 a=zee,b=hat,i=1677,x=0.051223624824948355,y=0.48806061670524303 a=pan,b=zee,i=1678,x=0.22830360777714898,y=0.040523234104181904 a=zee,b=zee,i=1679,x=0.2004874019427556,y=0.2692182176272302 a=pan,b=wye,i=1680,x=0.7590576123107873,y=0.17200150784460888 a=hat,b=pan,i=1681,x=0.8474039861745504,y=0.5929326488850256 a=pan,b=zee,i=1682,x=0.6678126441832403,y=0.7581822567177666 a=eks,b=eks,i=1683,x=0.1656742241132675,y=0.25898444627641315 a=eks,b=eks,i=1684,x=0.08681268181886848,y=0.14340546739344362 a=pan,b=pan,i=1685,x=0.96441969603388,y=0.3414555586796736 a=zee,b=wye,i=1686,x=0.3371665714902127,y=0.9792785331415429 a=pan,b=eks,i=1687,x=0.663918740679759,y=0.7797473286438443 a=eks,b=wye,i=1688,x=0.26502140138042296,y=0.8841653957891482 a=hat,b=eks,i=1689,x=0.49022956784197735,y=0.4412363150159613 a=pan,b=pan,i=1690,x=0.4323862798117054,y=0.9572877683405837 a=wye,b=hat,i=1691,x=0.19346871577634817,y=0.3548449217449817 a=eks,b=zee,i=1692,x=0.2220528759711472,y=0.2854499747333922 a=wye,b=pan,i=1693,x=0.6318004848086037,y=0.8235151199361017 a=hat,b=hat,i=1694,x=0.22300051255024678,y=0.23627303242311026 a=pan,b=eks,i=1695,x=0.606816508396926,y=0.4747964191601073 a=pan,b=eks,i=1696,x=0.5409026908587434,y=0.8707138792965543 a=zee,b=eks,i=1697,x=0.8215348448990311,y=0.5963587804425763 a=eks,b=hat,i=1698,x=0.4552430260978796,y=0.7656888582137643 a=eks,b=eks,i=1699,x=0.5528124536495131,y=0.03385319757100913 a=wye,b=pan,i=1700,x=0.5921927876548824,y=0.13717891760982504 a=wye,b=wye,i=1701,x=0.3521072429813412,y=0.9393268458767366 a=eks,b=eks,i=1702,x=0.615481896967935,y=0.4253334980050465 a=hat,b=eks,i=1703,x=0.04267213782959711,y=0.6683763263616654 a=zee,b=wye,i=1704,x=0.417590320872979,y=0.7481853946231414 a=eks,b=wye,i=1705,x=0.4519026086752629,y=0.721298569465698 a=eks,b=wye,i=1706,x=0.867732327367188,y=0.7815034918779579 a=eks,b=pan,i=1707,x=0.21735365651407101,y=0.6786702647895654 a=eks,b=wye,i=1708,x=0.7426314107643154,y=0.39737817100828876 a=hat,b=wye,i=1709,x=0.7255615455173713,y=0.7788950854100821 a=pan,b=hat,i=1710,x=0.08892696718996207,y=0.9572747456151248 a=eks,b=hat,i=1711,x=0.8331359499607889,y=0.8880694168170389 a=pan,b=zee,i=1712,x=0.07987647709173995,y=0.13417502683990923 a=eks,b=wye,i=1713,x=0.43055194021989684,y=0.12038634859450736 a=eks,b=eks,i=1714,x=0.5087128193007605,y=0.9531328272635052 a=wye,b=zee,i=1715,x=0.5007673042035596,y=0.0839554814172323 a=zee,b=wye,i=1716,x=0.9367542179955354,y=0.8831199104153296 a=zee,b=zee,i=1717,x=0.8370665182431167,y=0.46590727343637683 a=zee,b=hat,i=1718,x=0.6417213786646256,y=0.12267793340629607 a=hat,b=pan,i=1719,x=0.48165651092697337,y=0.9550338464219692 a=pan,b=pan,i=1720,x=0.26837378206040097,y=0.3273738090239059 a=zee,b=eks,i=1721,x=0.3013268284235642,y=0.9999170047266996 a=eks,b=pan,i=1722,x=0.7488627212441221,y=0.7589673147670182 a=pan,b=zee,i=1723,x=0.22059597690872113,y=0.4590031168653098 a=zee,b=wye,i=1724,x=0.11085385425683147,y=0.18276048166565262 a=eks,b=eks,i=1725,x=0.8016828955823794,y=0.5017037375277129 a=eks,b=wye,i=1726,x=0.9929352438598067,y=0.836317286740252 a=hat,b=pan,i=1727,x=0.015544541266721779,y=0.4301942866494898 a=wye,b=hat,i=1728,x=0.24080891134309446,y=0.5995840846866549 a=hat,b=pan,i=1729,x=0.006810750830322787,y=0.855871006710109 a=wye,b=zee,i=1730,x=0.17481728816675346,y=0.4661820645212398 a=wye,b=zee,i=1731,x=0.255264888272124,y=0.9481051880482031 a=eks,b=wye,i=1732,x=0.9141703983722962,y=0.7783272768366281 a=pan,b=wye,i=1733,x=0.4811498350363058,y=0.31752434003930774 a=wye,b=hat,i=1734,x=0.33815529285945034,y=0.8025791463907084 a=wye,b=eks,i=1735,x=0.4660052329093146,y=0.6822728002131543 a=eks,b=pan,i=1736,x=0.42070034175427795,y=0.8250949093967167 a=hat,b=hat,i=1737,x=0.8848216308084669,y=0.49372633356388596 a=wye,b=wye,i=1738,x=0.41919127534471545,y=0.6972253946537716 a=pan,b=hat,i=1739,x=0.7458644297757762,y=0.06863960925170765 a=zee,b=hat,i=1740,x=0.5467481093982075,y=0.20576784027619854 a=hat,b=hat,i=1741,x=0.6667341296371178,y=0.5083249671499618 a=zee,b=zee,i=1742,x=0.5570445537603863,y=0.9969595288070264 a=hat,b=pan,i=1743,x=0.3878736075798501,y=0.09689320155996384 a=hat,b=wye,i=1744,x=0.47545940383287155,y=0.035171107409935454 a=wye,b=pan,i=1745,x=0.05202061770868127,y=0.6566730002228411 a=zee,b=hat,i=1746,x=0.058673442891371996,y=0.28933038921745524 a=wye,b=hat,i=1747,x=0.14150517117852657,y=0.536530005390096 a=eks,b=wye,i=1748,x=0.3689045321575106,y=0.43375960646000566 a=wye,b=eks,i=1749,x=0.08070562415535032,y=0.7601097373668262 a=zee,b=pan,i=1750,x=0.42748309274481444,y=0.40582328846411353 a=eks,b=pan,i=1751,x=0.5101125068297688,y=0.17416701133200285 a=eks,b=hat,i=1752,x=0.6822739323301563,y=0.934728306935636 a=zee,b=wye,i=1753,x=0.5815603591837878,y=0.42946603160181884 a=eks,b=zee,i=1754,x=0.4411659420836479,y=0.658970404212564 a=pan,b=eks,i=1755,x=0.16413727843701775,y=0.9186399984720109 a=hat,b=hat,i=1756,x=0.6677910628012946,y=0.7992076156627536 a=pan,b=pan,i=1757,x=0.018771917494669887,y=0.07627637321631209 a=eks,b=eks,i=1758,x=0.3849737318613389,y=0.10314796719548613 a=eks,b=hat,i=1759,x=0.004605943802663104,y=0.13706408448625906 a=pan,b=hat,i=1760,x=0.16534300738225027,y=0.6267714211033921 a=zee,b=zee,i=1761,x=0.9779052389253532,y=0.5003086801528233 a=wye,b=hat,i=1762,x=0.04507239441313149,y=0.7716812127623998 a=hat,b=hat,i=1763,x=0.6315164191885015,y=0.4375276804518171 a=hat,b=pan,i=1764,x=0.02195532641775666,y=0.2526330533315183 a=hat,b=eks,i=1765,x=0.2835946220779688,y=0.29118113110322497 a=hat,b=zee,i=1766,x=0.382493150516817,y=0.8520221210763981 a=zee,b=wye,i=1767,x=0.3657210401100467,y=0.6620479513955376 a=eks,b=zee,i=1768,x=0.7033634045957338,y=0.47107520132096625 a=zee,b=pan,i=1769,x=0.7412198854939575,y=0.34206923036029935 a=eks,b=wye,i=1770,x=0.7022926949673525,y=0.8178450530445518 a=wye,b=zee,i=1771,x=0.8754670655329418,y=0.17333696566959766 a=hat,b=eks,i=1772,x=0.585792241890598,y=0.7443360574921659 a=zee,b=zee,i=1773,x=0.6522535015576731,y=0.21757325076071798 a=pan,b=pan,i=1774,x=0.09695201653405716,y=0.8252978168426179 a=zee,b=zee,i=1775,x=0.977214551248574,y=0.4647124207647422 a=pan,b=hat,i=1776,x=0.9052349202388439,y=0.23607383279010508 a=pan,b=pan,i=1777,x=0.8770213930313705,y=0.2649679554558544 a=eks,b=pan,i=1778,x=0.5825936705834729,y=0.5453162110699705 a=eks,b=hat,i=1779,x=0.5006571233548579,y=0.1243780561189558 a=pan,b=zee,i=1780,x=0.1846415746915494,y=0.04736023830541203 a=wye,b=pan,i=1781,x=0.578399885263909,y=0.04308726031144994 a=pan,b=eks,i=1782,x=0.9210030244758979,y=0.7773896236831834 a=wye,b=zee,i=1783,x=0.9426077714915372,y=0.2538200528298715 a=wye,b=wye,i=1784,x=0.8612436216521431,y=0.8048330008328066 a=hat,b=wye,i=1785,x=0.9754832792942771,y=0.28923936562916985 a=pan,b=zee,i=1786,x=0.2494860009657509,y=0.17194280903044357 a=eks,b=eks,i=1787,x=0.368000320083405,y=0.4886055420500375 a=pan,b=wye,i=1788,x=0.26250246334689176,y=0.04787633922145995 a=pan,b=wye,i=1789,x=0.7301945417230211,y=0.226509032748324 a=hat,b=zee,i=1790,x=0.37729036546983097,y=0.27703668720411234 a=hat,b=pan,i=1791,x=0.05762772701528418,y=0.8943100353103193 a=pan,b=zee,i=1792,x=0.8322225569737312,y=0.7917170874641617 a=wye,b=zee,i=1793,x=0.31884392088021907,y=0.48529327738748296 a=wye,b=wye,i=1794,x=0.2263305044828683,y=0.937998380780705 a=hat,b=zee,i=1795,x=0.16118129356442434,y=0.16950272509494824 a=zee,b=eks,i=1796,x=0.4942226187236075,y=0.14210516571467535 a=hat,b=zee,i=1797,x=0.7287749063387707,y=0.9927587108357429 a=pan,b=hat,i=1798,x=0.6828185492461075,y=0.4502861054322417 a=hat,b=zee,i=1799,x=0.9355569291824988,y=0.20314844189673253 a=zee,b=pan,i=1800,x=0.72307448294554,y=0.6376778174182595 a=pan,b=eks,i=1801,x=0.8102218415617043,y=0.6044303313247449 a=zee,b=pan,i=1802,x=0.357073805593369,y=0.8319647967908266 a=eks,b=wye,i=1803,x=0.5196592664144227,y=0.7156673976778524 a=eks,b=wye,i=1804,x=0.29264863959299714,y=0.708791737405034 a=zee,b=eks,i=1805,x=0.8443555032696601,y=0.064863387129513 a=zee,b=hat,i=1806,x=0.6164118793332103,y=0.1255925909310226 a=wye,b=hat,i=1807,x=0.14657249890035728,y=0.5230067969283422 a=hat,b=wye,i=1808,x=0.2287730659373145,y=0.20360891960927452 a=eks,b=zee,i=1809,x=0.5828879813451391,y=0.8871296430025095 a=wye,b=hat,i=1810,x=0.10808902686015609,y=0.003095657967865484 a=zee,b=wye,i=1811,x=0.879138779526544,y=0.8158846610141476 a=zee,b=wye,i=1812,x=0.8726848944578037,y=0.06260871597344408 a=eks,b=pan,i=1813,x=0.7037266550933726,y=0.35602278298025203 a=hat,b=pan,i=1814,x=0.9644298322610328,y=0.4993991438913755 a=eks,b=pan,i=1815,x=0.5418348248161854,y=0.9355389520025802 a=hat,b=hat,i=1816,x=0.09792806194299297,y=0.14176660544329966 a=pan,b=pan,i=1817,x=0.5655519977509864,y=0.5975680493813812 a=zee,b=wye,i=1818,x=0.8214459119942229,y=0.29965361128737544 a=pan,b=wye,i=1819,x=0.18318519888267681,y=0.43197282065530884 a=hat,b=pan,i=1820,x=0.020838363795188775,y=0.8508185143390146 a=pan,b=pan,i=1821,x=0.38294698779651215,y=0.8341489509213522 a=hat,b=wye,i=1822,x=0.522603809398008,y=0.6634567147948507 a=zee,b=hat,i=1823,x=0.5191794392445693,y=0.5255931403873793 a=eks,b=pan,i=1824,x=0.44104659188971895,y=0.6594737117599939 a=wye,b=pan,i=1825,x=0.5392802909916755,y=0.8897079123047565 a=wye,b=pan,i=1826,x=0.8957889050713344,y=0.7119911089910552 a=hat,b=hat,i=1827,x=0.7124428569925854,y=0.5480761759295041 a=zee,b=hat,i=1828,x=0.05786804641448351,y=0.4254319991402028 a=pan,b=wye,i=1829,x=0.4687534933888111,y=0.706582639979992 a=zee,b=hat,i=1830,x=0.2721305750226911,y=0.005377285991549963 a=pan,b=hat,i=1831,x=0.18303692231105184,y=0.21025826705763861 a=eks,b=pan,i=1832,x=0.2038945772719637,y=0.5357417117465196 a=hat,b=eks,i=1833,x=0.014590280685686796,y=0.7002596722333126 a=wye,b=wye,i=1834,x=0.949816635928921,y=0.1930644264586816 a=eks,b=wye,i=1835,x=0.9900052984177767,y=0.8879825093814294 a=wye,b=pan,i=1836,x=0.3181487584311439,y=0.5523667763399458 a=hat,b=eks,i=1837,x=0.9591593624436306,y=0.6113919452246622 a=hat,b=zee,i=1838,x=0.559343676070325,y=0.890209332873675 a=pan,b=hat,i=1839,x=0.5368391085129115,y=0.8180683703610315 a=pan,b=eks,i=1840,x=0.80438348711484,y=0.2022566057940537 a=wye,b=hat,i=1841,x=0.5532887348403182,y=0.24429939746293128 a=pan,b=hat,i=1842,x=0.9898704891265324,y=0.7317672838087951 a=zee,b=hat,i=1843,x=0.5087737269682078,y=0.0806841886079015 a=zee,b=eks,i=1844,x=0.09986788038161976,y=0.9714739666784168 a=hat,b=eks,i=1845,x=0.09049828109166225,y=0.1947578588027301 a=eks,b=zee,i=1846,x=0.74504290778088,y=0.46929232899960105 a=zee,b=wye,i=1847,x=0.5102908546678789,y=0.8622466590956885 a=eks,b=wye,i=1848,x=0.9737508284191876,y=0.6060569185675129 a=pan,b=pan,i=1849,x=0.4022620876038918,y=0.7846557844677974 a=eks,b=zee,i=1850,x=0.31039634454352627,y=0.5252329961384006 a=eks,b=eks,i=1851,x=0.7390412177790203,y=0.769519937153525 a=hat,b=wye,i=1852,x=0.6238871121990431,y=0.41186598086229964 a=zee,b=wye,i=1853,x=0.8447601423313442,y=0.8520011644241022 a=zee,b=zee,i=1854,x=0.2962334576293918,y=0.926132945738903 a=pan,b=hat,i=1855,x=0.8401351548600108,y=0.6504879006085633 a=hat,b=zee,i=1856,x=0.07606845988104194,y=0.00034299355854428004 a=wye,b=zee,i=1857,x=0.4582107832207104,y=0.2944016633400677 a=eks,b=wye,i=1858,x=0.9930106907313097,y=0.7391793267018062 a=hat,b=pan,i=1859,x=0.42255637553704006,y=0.02707473931820803 a=zee,b=hat,i=1860,x=0.24049082129786625,y=0.987975708111131 a=zee,b=pan,i=1861,x=0.47821784409887513,y=0.8783256619433235 a=eks,b=hat,i=1862,x=0.8127278660333865,y=0.8191943473539423 a=pan,b=pan,i=1863,x=0.8302838683545155,y=0.24734279452032182 a=hat,b=zee,i=1864,x=0.826660555911501,y=0.2651509088000916 a=eks,b=zee,i=1865,x=0.38057266246696253,y=0.03213839928081663 a=eks,b=hat,i=1866,x=0.8031652473986357,y=0.5958264736432561 a=wye,b=wye,i=1867,x=0.15951611637472107,y=0.4077662801256805 a=eks,b=zee,i=1868,x=0.6732934218406293,y=0.7505416061385557 a=eks,b=zee,i=1869,x=0.633163245609033,y=0.8429419490648784 a=wye,b=pan,i=1870,x=0.10163096579388076,y=0.13758281047223042 a=hat,b=wye,i=1871,x=0.08107553652444954,y=0.2640692772059776 a=eks,b=eks,i=1872,x=0.42414648489598794,y=0.6065273117846864 a=wye,b=hat,i=1873,x=0.6051325007195336,y=0.0842051888808607 a=zee,b=eks,i=1874,x=0.4161594343684122,y=0.5842158524042167 a=wye,b=zee,i=1875,x=0.9548486055254091,y=0.3424491192867498 a=pan,b=eks,i=1876,x=0.6468659335884865,y=0.710835697336098 a=hat,b=zee,i=1877,x=0.9303319011279677,y=0.7113730786626118 a=zee,b=pan,i=1878,x=0.14398708400857807,y=0.7966487889999802 a=pan,b=zee,i=1879,x=0.527406345229876,y=0.47062036425973675 a=hat,b=eks,i=1880,x=0.8853889990767594,y=0.29294894207487143 a=pan,b=zee,i=1881,x=0.40105266769707004,y=0.7644044149977851 a=pan,b=zee,i=1882,x=0.9327815865652367,y=0.3602677495267469 a=pan,b=zee,i=1883,x=0.34429591718844843,y=0.05689015367587591 a=wye,b=hat,i=1884,x=0.708143215528541,y=0.3560504482521065 a=zee,b=wye,i=1885,x=0.11851805777842395,y=0.23782759573809764 a=eks,b=wye,i=1886,x=0.33449907630162523,y=0.9409666461544096 a=hat,b=hat,i=1887,x=0.9314693861337467,y=0.13863337436919843 a=zee,b=eks,i=1888,x=0.3519272451539994,y=0.5053162657228568 a=eks,b=zee,i=1889,x=0.8736600260492586,y=0.19107483910062717 a=hat,b=eks,i=1890,x=0.4174883365897032,y=0.6879531497535479 a=zee,b=hat,i=1891,x=0.5382838856043256,y=0.8806888516912734 a=zee,b=eks,i=1892,x=0.8124856255009596,y=0.9417530148525823 a=hat,b=zee,i=1893,x=0.6120649825518716,y=0.8578129408524632 a=wye,b=wye,i=1894,x=0.4169983470765677,y=0.31293410227278906 a=hat,b=wye,i=1895,x=0.10961101368157089,y=0.32892883700517095 a=hat,b=wye,i=1896,x=0.9132730441559633,y=0.7487099837821863 a=hat,b=hat,i=1897,x=0.7675505245773306,y=0.8461420935545583 a=pan,b=eks,i=1898,x=0.3252151127693067,y=0.9364118111641275 a=wye,b=hat,i=1899,x=0.1709902864944267,y=0.48516354025753305 a=hat,b=pan,i=1900,x=0.6087321537907773,y=0.7970729316915601 a=pan,b=eks,i=1901,x=0.24652370926788014,y=0.5636927917895729 a=hat,b=zee,i=1902,x=0.1264928014486475,y=0.6961063811057807 a=wye,b=eks,i=1903,x=0.31804488869587366,y=0.14285299153786624 a=eks,b=zee,i=1904,x=0.33758768803317096,y=0.5523041691821023 a=hat,b=wye,i=1905,x=0.7783001976331004,y=0.4281025219221022 a=hat,b=wye,i=1906,x=0.2507442607453316,y=0.9002257467281997 a=eks,b=eks,i=1907,x=0.9438758492662777,y=0.7214758965332612 a=wye,b=zee,i=1908,x=0.32738813438706793,y=0.7623152593994879 a=eks,b=hat,i=1909,x=0.7314442344747841,y=0.030358065216463115 a=hat,b=wye,i=1910,x=0.7380789095291242,y=0.9502552254648776 a=pan,b=pan,i=1911,x=0.3011591867627148,y=0.6774130244502444 a=wye,b=wye,i=1912,x=0.7175207335721732,y=0.5163511962741214 a=hat,b=pan,i=1913,x=0.010071221635602146,y=0.5065324934192511 a=eks,b=pan,i=1914,x=0.30367239205139296,y=0.7075141985416662 a=hat,b=pan,i=1915,x=0.6426932948416931,y=0.5081694432335289 a=wye,b=hat,i=1916,x=0.47018235692725985,y=0.8010843037704246 a=zee,b=wye,i=1917,x=0.529838527546025,y=0.975044822917303 a=hat,b=eks,i=1918,x=0.019159081788694077,y=0.5386166416064818 a=eks,b=zee,i=1919,x=0.45717869373411757,y=0.8830819174369392 a=eks,b=wye,i=1920,x=0.6319288641477111,y=0.47412119650722184 a=eks,b=wye,i=1921,x=0.9456983171768308,y=0.8913471052406744 a=wye,b=pan,i=1922,x=0.6733026865976656,y=0.5941565401265938 a=zee,b=zee,i=1923,x=0.15497719261601373,y=0.9824185888787137 a=zee,b=wye,i=1924,x=0.14261091973981976,y=0.03891416444006246 a=pan,b=pan,i=1925,x=0.051704291514689915,y=0.30096139627683915 a=eks,b=pan,i=1926,x=0.08149680519340818,y=0.371502322922598 a=eks,b=pan,i=1927,x=0.26745370041393246,y=0.7180946178205809 a=hat,b=pan,i=1928,x=0.03866554054364113,y=0.7467583161789872 a=pan,b=wye,i=1929,x=0.715219843779286,y=0.7347318985161266 a=hat,b=eks,i=1930,x=0.18556549546801415,y=0.8376753664837346 a=eks,b=eks,i=1931,x=0.6283884556872956,y=0.714926049974028 a=pan,b=wye,i=1932,x=0.08318436818892117,y=0.43049862856264764 a=wye,b=zee,i=1933,x=0.9047633922940572,y=0.7844909689207981 a=eks,b=hat,i=1934,x=0.2175670413228329,y=0.8617365456033637 a=wye,b=wye,i=1935,x=0.7550429521371519,y=0.786133808170408 a=wye,b=hat,i=1936,x=0.3345630973104814,y=0.2823268521687281 a=pan,b=wye,i=1937,x=0.9521970743863757,y=0.5949587882541866 a=zee,b=hat,i=1938,x=0.18206318284329825,y=0.0011400311959023357 a=wye,b=zee,i=1939,x=0.1903296792451994,y=0.9350080777637384 a=wye,b=hat,i=1940,x=0.37178768301191467,y=0.8451055253202524 a=pan,b=eks,i=1941,x=0.8294899690053994,y=0.7564416563177322 a=hat,b=hat,i=1942,x=0.44482696874869365,y=0.5961297980178011 a=pan,b=eks,i=1943,x=0.9719276019842854,y=0.640150164953268 a=eks,b=wye,i=1944,x=0.09816590063186759,y=0.8960419732965261 a=wye,b=wye,i=1945,x=0.8188272907846742,y=0.22236697182142784 a=pan,b=pan,i=1946,x=0.9840946983738358,y=0.24604842054457776 a=wye,b=eks,i=1947,x=0.5609426547261931,y=0.1519761843166667 a=zee,b=zee,i=1948,x=0.8526284266294675,y=0.7580336598194982 a=wye,b=eks,i=1949,x=0.04793743314382193,y=0.511362467180759 a=eks,b=hat,i=1950,x=0.5205580283603881,y=0.09466218875496657 a=eks,b=hat,i=1951,x=0.9392053569680634,y=0.9768144646610879 a=pan,b=hat,i=1952,x=0.491307664252547,y=0.8646927260623539 a=zee,b=eks,i=1953,x=0.6668788836391065,y=0.7090525532474364 a=zee,b=zee,i=1954,x=0.7595127799385754,y=0.6001574207956651 a=pan,b=pan,i=1955,x=0.3407552952250241,y=0.8020102136226014 a=pan,b=hat,i=1956,x=0.08503694234411441,y=0.7387665239824308 a=pan,b=zee,i=1957,x=0.9854793880226635,y=0.7095712814074717 a=wye,b=pan,i=1958,x=0.6114481880293695,y=0.22917077844582012 a=wye,b=zee,i=1959,x=0.5016850781819963,y=0.42040146896727615 a=eks,b=pan,i=1960,x=0.7325260743545391,y=0.35098817238458924 a=wye,b=wye,i=1961,x=0.29833631790760273,y=0.4831530650838167 a=hat,b=eks,i=1962,x=0.36631759989103085,y=0.29865431150806365 a=hat,b=eks,i=1963,x=0.23176876123591383,y=0.5612909158675198 a=wye,b=pan,i=1964,x=0.7334272338627286,y=0.650447648017669 a=pan,b=pan,i=1965,x=0.9367163916661853,y=0.9638919891814807 a=zee,b=hat,i=1966,x=0.7301180056013357,y=0.38279312633041496 a=wye,b=eks,i=1967,x=0.3271166838493157,y=0.8030348688816051 a=pan,b=eks,i=1968,x=0.7530954976867642,y=0.5048913343158832 a=wye,b=zee,i=1969,x=0.6270200861888447,y=0.24983293440736842 a=eks,b=zee,i=1970,x=0.12406730011560674,y=0.5862034791938755 a=hat,b=wye,i=1971,x=0.4654113772986844,y=0.03490618297713166 a=hat,b=wye,i=1972,x=0.5837244835312924,y=0.78564800693725 a=wye,b=hat,i=1973,x=0.5256418800394103,y=0.5657320340909927 a=hat,b=zee,i=1974,x=0.9946797442560897,y=0.17991015295150847 a=eks,b=eks,i=1975,x=0.5611515257329109,y=0.45353155787641375 a=wye,b=eks,i=1976,x=0.90900092404583,y=0.9088347779743747 a=wye,b=zee,i=1977,x=0.2485784939054746,y=0.5715538711284616 a=eks,b=eks,i=1978,x=0.43223859004330245,y=0.25096305614713244 a=wye,b=pan,i=1979,x=0.044824962223491194,y=0.26304195982115053 a=hat,b=zee,i=1980,x=0.8574700507192768,y=0.03240481571430498 a=hat,b=pan,i=1981,x=0.7205280959278643,y=0.9765256304646956 a=pan,b=eks,i=1982,x=0.11118021831380087,y=0.1736432452425345 a=eks,b=zee,i=1983,x=0.3665362715223871,y=0.8769601803237262 a=wye,b=zee,i=1984,x=0.5159131102473629,y=0.3138392498746069 a=hat,b=wye,i=1985,x=0.6785523977842361,y=0.9088522942899968 a=hat,b=eks,i=1986,x=0.8391540456864279,y=0.13395352775796587 a=wye,b=eks,i=1987,x=0.33553215256369306,y=0.8998597387125332 a=hat,b=zee,i=1988,x=0.3273336625347204,y=0.5235087574026606 a=pan,b=eks,i=1989,x=0.8846030796068061,y=0.1229509863981878 a=hat,b=eks,i=1990,x=0.972524874310568,y=0.7588379528101111 a=zee,b=pan,i=1991,x=0.4266265409041532,y=0.46661051389718977 a=eks,b=zee,i=1992,x=0.18951913536280773,y=0.3044420239454556 a=hat,b=pan,i=1993,x=0.6524602479494983,y=0.2683536424804953 a=hat,b=pan,i=1994,x=0.3458198938210745,y=0.15708271475158309 a=pan,b=hat,i=1995,x=0.2451140421214234,y=0.21125136662021793 a=wye,b=eks,i=1996,x=0.7260863327463748,y=0.8391383362988085 a=zee,b=wye,i=1997,x=0.3390776046149281,y=0.2943389939229085 a=eks,b=pan,i=1998,x=0.24597512351551498,y=0.5579233145456394 a=eks,b=zee,i=1999,x=0.6180255159787116,y=0.7640028449996572 a=pan,b=wye,i=2000,x=0.8323911295033875,y=0.05968766127057723 a=wye,b=hat,i=2001,x=0.15924096642007157,y=0.24059632344634185 a=pan,b=zee,i=2002,x=0.5349190357320186,y=0.508630259684438 a=pan,b=wye,i=2003,x=0.3562571816102539,y=0.9351982273289634 a=hat,b=pan,i=2004,x=0.5792914584913227,y=0.9721311150467201 a=hat,b=pan,i=2005,x=0.6721200696331198,y=0.5074220436659838 a=zee,b=pan,i=2006,x=0.36314674395500735,y=0.05966789024528896 a=eks,b=zee,i=2007,x=0.5198150674035192,y=0.5307294576536602 a=wye,b=wye,i=2008,x=0.8038374651958967,y=0.863525245703629 a=hat,b=eks,i=2009,x=0.8954319835423661,y=0.6074686757262493 a=hat,b=hat,i=2010,x=0.14682904757610016,y=0.5836897852849614 a=hat,b=wye,i=2011,x=0.5554922764125422,y=0.044893468168582085 a=wye,b=hat,i=2012,x=0.3272476785644499,y=0.2852380145740261 a=zee,b=pan,i=2013,x=0.5272911037027838,y=0.9007193862227653 a=pan,b=zee,i=2014,x=0.8942547964450125,y=0.7308860097948163 a=wye,b=pan,i=2015,x=0.7429848323935544,y=0.6564456028979551 a=wye,b=pan,i=2016,x=0.8976852390968387,y=0.3715619777706992 a=eks,b=eks,i=2017,x=0.5870221936023131,y=0.5886336776923361 a=pan,b=eks,i=2018,x=0.7548510407648094,y=0.259810938746426 a=wye,b=hat,i=2019,x=0.43322808613233055,y=0.0385758517767808 a=zee,b=eks,i=2020,x=0.6430370762426636,y=0.6948330772772741 a=pan,b=zee,i=2021,x=0.4140878244124503,y=0.398400762850186 a=eks,b=pan,i=2022,x=0.3500684495606733,y=0.14698881032642608 a=eks,b=zee,i=2023,x=0.8926094968763351,y=0.6086053558590667 a=wye,b=hat,i=2024,x=0.020600223126170603,y=0.20728018182250796 a=hat,b=wye,i=2025,x=0.0007025729724531304,y=0.6265023865043876 a=zee,b=wye,i=2026,x=0.8573260145899378,y=0.9080875650609371 a=eks,b=zee,i=2027,x=0.22981492296559103,y=0.10600637415066061 a=zee,b=zee,i=2028,x=0.6842296172237651,y=0.896024172825087 a=pan,b=wye,i=2029,x=0.5829130314173805,y=0.3189845366520674 a=pan,b=wye,i=2030,x=0.14984955320446725,y=0.8011645466128109 a=wye,b=zee,i=2031,x=0.14619362934789815,y=0.04433757197092214 a=pan,b=hat,i=2032,x=0.5611491467878738,y=0.630949265472906 a=hat,b=wye,i=2033,x=0.005567301262607405,y=0.6290855880213555 a=zee,b=pan,i=2034,x=0.40924963766916733,y=0.922632813755277 a=eks,b=hat,i=2035,x=0.33767734812921923,y=0.5658087617423716 a=zee,b=eks,i=2036,x=0.25944332814164905,y=0.11267646149361388 a=eks,b=hat,i=2037,x=0.4613748353843449,y=0.5072335485279396 a=zee,b=zee,i=2038,x=0.3797322702325565,y=0.9465025393896492 a=hat,b=hat,i=2039,x=0.8389132941448142,y=0.9200224995580027 a=pan,b=pan,i=2040,x=0.7463150208227146,y=0.34885266263688197 a=wye,b=hat,i=2041,x=0.6563952046485523,y=0.7555478004412313 a=zee,b=hat,i=2042,x=0.2743477126375994,y=0.3824464564910681 a=hat,b=hat,i=2043,x=0.8811861962295147,y=0.5191315240489268 a=zee,b=eks,i=2044,x=0.3599144261574607,y=0.24553060035029017 a=pan,b=eks,i=2045,x=0.9781655353605474,y=0.2730587268790037 a=wye,b=hat,i=2046,x=0.7333941298571239,y=0.5739371545354796 a=hat,b=eks,i=2047,x=0.06042270034486685,y=0.46301889302926746 a=pan,b=hat,i=2048,x=0.10911169262757925,y=0.007073831794458529 a=pan,b=pan,i=2049,x=0.8624169299220058,y=0.9006582996702346 a=eks,b=eks,i=2050,x=0.040691774802510294,y=0.8066732453567129 a=eks,b=hat,i=2051,x=0.40407704836251557,y=0.26395123641005147 a=zee,b=hat,i=2052,x=0.009808918561178714,y=0.2302545994571994 a=wye,b=eks,i=2053,x=0.7633729697198686,y=0.8187837109642871 a=wye,b=hat,i=2054,x=0.10710381581294204,y=0.3286506389479086 a=hat,b=eks,i=2055,x=0.9832237471284704,y=0.23991238481161792 a=zee,b=pan,i=2056,x=0.6210754046594348,y=0.49331354774956016 a=pan,b=zee,i=2057,x=0.28231501416039284,y=0.12643281231603754 a=wye,b=hat,i=2058,x=0.045046526806835296,y=0.681451721478501 a=eks,b=pan,i=2059,x=0.9331162879465084,y=0.14664803314097596 a=zee,b=wye,i=2060,x=0.7720929751822915,y=0.330085050859654 a=zee,b=zee,i=2061,x=0.14974934709461651,y=0.697616433647398 a=wye,b=eks,i=2062,x=0.945982672513977,y=0.36668794201328303 a=eks,b=zee,i=2063,x=0.10743808879213779,y=0.6963841526487657 a=zee,b=pan,i=2064,x=0.5676519201496846,y=0.24351963361710904 a=wye,b=eks,i=2065,x=0.606169952184269,y=0.9495081658090401 a=hat,b=pan,i=2066,x=0.5362186062455647,y=0.18683078751407345 a=eks,b=eks,i=2067,x=0.23118685760407975,y=0.4886672632279645 a=wye,b=wye,i=2068,x=0.0181286937053855,y=0.4027507216590225 a=wye,b=zee,i=2069,x=0.8920322140255575,y=0.2821329353409344 a=zee,b=wye,i=2070,x=0.2845370086876513,y=0.4200729779675041 a=eks,b=wye,i=2071,x=0.6616434446154568,y=0.028717804930202817 a=pan,b=zee,i=2072,x=0.13789801706952376,y=0.6865579908342762 a=hat,b=pan,i=2073,x=0.14024645801145608,y=0.2232995634066972 a=eks,b=hat,i=2074,x=0.8416373289721065,y=0.009957706782034892 a=pan,b=eks,i=2075,x=0.2730024769669228,y=0.6092063716892284 a=wye,b=hat,i=2076,x=0.6679556713229464,y=0.23886590929858575 a=wye,b=pan,i=2077,x=0.6772238022128941,y=0.35715527067676667 a=wye,b=wye,i=2078,x=0.0007441043225671073,y=0.9342244226449593 a=eks,b=pan,i=2079,x=0.00844716490372166,y=0.7042488450623287 a=zee,b=hat,i=2080,x=0.9840706098598035,y=0.7011152185727909 a=zee,b=wye,i=2081,x=0.3382103536180968,y=0.04576622304303102 a=wye,b=hat,i=2082,x=0.0855328407000916,y=0.7955310778574013 a=wye,b=wye,i=2083,x=0.654630167298159,y=0.9490657525005854 a=hat,b=pan,i=2084,x=0.9418973198231615,y=0.8869025666330164 a=eks,b=eks,i=2085,x=0.38148259830551734,y=0.8664658521060588 a=hat,b=zee,i=2086,x=0.9687249489223216,y=0.9138672864469205 a=pan,b=zee,i=2087,x=0.4582214393900814,y=0.8311346736169871 a=hat,b=wye,i=2088,x=0.3324758019863273,y=0.4703648792781622 a=hat,b=hat,i=2089,x=0.9166551411558639,y=0.0986178333688883 a=zee,b=zee,i=2090,x=0.5043939613961448,y=0.9818791944950958 a=eks,b=wye,i=2091,x=0.1351492269897414,y=0.9388421670767862 a=pan,b=eks,i=2092,x=0.6581611437110156,y=0.2936463974495629 a=eks,b=wye,i=2093,x=0.5685533529741125,y=0.8133350683940237 a=wye,b=pan,i=2094,x=0.07847412023993783,y=0.3613060871668645 a=wye,b=wye,i=2095,x=0.20230852407018185,y=0.2291747261210969 a=eks,b=eks,i=2096,x=0.43638629510919924,y=0.2881257309332079 a=hat,b=eks,i=2097,x=0.26844813288649483,y=0.39273900559861075 a=hat,b=eks,i=2098,x=0.9966377977643898,y=0.5245550930114457 a=hat,b=pan,i=2099,x=0.03219741593758807,y=0.8801777270031927 a=eks,b=pan,i=2100,x=0.8264573211830318,y=0.3323904264186872 a=hat,b=wye,i=2101,x=0.5557805350665251,y=0.5952937921640231 a=zee,b=wye,i=2102,x=0.749445246206683,y=0.9220669751971446 a=pan,b=eks,i=2103,x=0.48622365678958046,y=0.5824051664305276 a=wye,b=zee,i=2104,x=0.24393506694975353,y=0.8625197120864077 a=pan,b=zee,i=2105,x=0.42667111990222584,y=0.4200738107939501 a=pan,b=eks,i=2106,x=0.6899381403750706,y=0.5175558265399449 a=pan,b=wye,i=2107,x=0.046210916618416364,y=0.25213670524015686 a=zee,b=zee,i=2108,x=0.7086278430636463,y=0.7267047227599615 a=pan,b=zee,i=2109,x=0.8286002064140777,y=0.7422535714385249 a=wye,b=eks,i=2110,x=0.9082291930295346,y=0.47111153171260134 a=hat,b=wye,i=2111,x=0.5188526237698469,y=0.10386838578674262 a=zee,b=pan,i=2112,x=0.02494942612055806,y=0.6771165590440439 a=pan,b=zee,i=2113,x=0.0793213913259122,y=0.046201894636212604 a=eks,b=wye,i=2114,x=0.339791829917532,y=0.6311099033330176 a=hat,b=eks,i=2115,x=0.09151886587216429,y=0.7423362419494414 a=zee,b=zee,i=2116,x=0.4003379315212102,y=0.0193682083394614 a=pan,b=hat,i=2117,x=0.3429130580701697,y=0.6027060638473042 a=pan,b=zee,i=2118,x=0.9627595397700258,y=0.13997934081700658 a=hat,b=hat,i=2119,x=0.8206707686267524,y=0.7611213033730956 a=zee,b=wye,i=2120,x=0.5559252019928892,y=0.7174146654070022 a=hat,b=wye,i=2121,x=0.9803985810617651,y=0.8394646120202436 a=zee,b=hat,i=2122,x=0.08631486480591943,y=0.5785230915820572 a=pan,b=wye,i=2123,x=0.9115498197515648,y=0.9169354954307747 a=hat,b=hat,i=2124,x=0.7798071504849725,y=0.19792727612064476 a=wye,b=pan,i=2125,x=0.8561718307822236,y=0.1291568082386848 a=hat,b=wye,i=2126,x=0.2863145718712009,y=0.5710669434512489 a=wye,b=eks,i=2127,x=0.06803650937651173,y=0.3577026589688229 a=wye,b=hat,i=2128,x=0.9111033241507589,y=0.10783082272199751 a=zee,b=eks,i=2129,x=0.28267518376958845,y=0.17688870699173864 a=hat,b=pan,i=2130,x=0.19116926141337387,y=0.27875749703114405 a=hat,b=hat,i=2131,x=0.3254603712033679,y=0.9274447308988584 a=eks,b=wye,i=2132,x=0.11768724156109422,y=0.8908179117578706 a=wye,b=pan,i=2133,x=0.6516558397748747,y=0.774009470971533 a=hat,b=eks,i=2134,x=0.9053305484140348,y=0.37780854020278265 a=pan,b=pan,i=2135,x=0.7849642445184846,y=0.2074226048103197 a=zee,b=wye,i=2136,x=0.2843358696868167,y=0.17750391830130807 a=pan,b=hat,i=2137,x=0.6831781526100863,y=0.005628299955970917 a=zee,b=wye,i=2138,x=0.29832744224162844,y=0.33074245583419115 a=zee,b=wye,i=2139,x=0.4116759409721965,y=0.16673308079819182 a=zee,b=wye,i=2140,x=0.3063387912982882,y=0.3715575632516237 a=pan,b=hat,i=2141,x=0.41506057628652626,y=0.013486526190589099 a=zee,b=wye,i=2142,x=0.517904841622836,y=0.53285652127 a=hat,b=pan,i=2143,x=0.9156355367699018,y=0.8823700552229912 a=pan,b=hat,i=2144,x=0.6484157591768972,y=0.18545458215405763 a=eks,b=eks,i=2145,x=0.2511948002161768,y=0.6576693696214415 a=eks,b=zee,i=2146,x=0.4990209540685181,y=0.1364915882864166 a=eks,b=wye,i=2147,x=0.15240384791463035,y=0.4599246782338706 a=zee,b=pan,i=2148,x=0.8912158164832823,y=0.0715866507974654 a=zee,b=eks,i=2149,x=0.7025420244699133,y=0.987609520343113 a=wye,b=pan,i=2150,x=0.3436366777295877,y=0.3694637710717039 a=hat,b=zee,i=2151,x=0.9616090415643731,y=0.8945473597755025 a=zee,b=hat,i=2152,x=0.480760014274322,y=0.09273697945051707 a=eks,b=hat,i=2153,x=0.17176533143479,y=0.9370337444082136 a=zee,b=pan,i=2154,x=0.1391723805955094,y=0.9355089025836978 a=hat,b=zee,i=2155,x=0.005175137015667519,y=0.6082400770560145 a=eks,b=wye,i=2156,x=0.5266959602940757,y=0.2966790787127306 a=wye,b=pan,i=2157,x=0.40990967259698485,y=0.46693754055942116 a=hat,b=hat,i=2158,x=0.36568864609540286,y=0.482086719899368 a=zee,b=wye,i=2159,x=0.46324422760937845,y=0.18957042856735318 a=pan,b=eks,i=2160,x=0.0032731741464655517,y=0.24265930126172286 a=wye,b=eks,i=2161,x=0.17517848527969948,y=0.08180586013473534 a=pan,b=pan,i=2162,x=0.4403551635970905,y=0.22942697632655906 a=wye,b=pan,i=2163,x=0.09273957715469416,y=0.6132959825744481 a=pan,b=zee,i=2164,x=0.19524512170581543,y=0.5460739296935951 a=hat,b=hat,i=2165,x=0.46165958964019504,y=0.6029962831405496 a=wye,b=zee,i=2166,x=0.8944862196737927,y=0.34807401159779683 a=zee,b=hat,i=2167,x=0.42312576374129274,y=0.10048800632229682 a=wye,b=hat,i=2168,x=0.6568978924854212,y=0.5101756478889046 a=eks,b=zee,i=2169,x=0.05684290839594597,y=0.6167859837759624 a=wye,b=eks,i=2170,x=0.4198547582787967,y=0.2376285818765217 a=eks,b=eks,i=2171,x=0.6714359981321629,y=0.37149274278995337 a=pan,b=wye,i=2172,x=0.2057396940089804,y=0.8420562089794659 a=wye,b=hat,i=2173,x=0.4502790891675549,y=0.8635812727509119 a=pan,b=eks,i=2174,x=0.8915519585149145,y=0.297092301064787 a=wye,b=eks,i=2175,x=0.6684886052688896,y=0.23351427152549686 a=eks,b=eks,i=2176,x=0.018008652733587316,y=0.9614835324200763 a=eks,b=pan,i=2177,x=0.7183922577315158,y=0.48505114281853134 a=zee,b=wye,i=2178,x=0.8235592349921356,y=0.21457612748044042 a=hat,b=wye,i=2179,x=0.8080588257410165,y=0.8760901920518874 a=pan,b=eks,i=2180,x=0.6055815021312241,y=0.8480036770514022 a=zee,b=pan,i=2181,x=0.5449270457570026,y=0.7992463596093999 a=zee,b=hat,i=2182,x=0.3727527045897696,y=0.8534533340738414 a=eks,b=pan,i=2183,x=0.8003361363186678,y=0.8955368869223884 a=wye,b=wye,i=2184,x=0.009903387473833902,y=0.717874178791943 a=eks,b=eks,i=2185,x=0.33802204835640726,y=0.30007036518314967 a=hat,b=zee,i=2186,x=0.7146865245671944,y=0.4887379966859555 a=pan,b=eks,i=2187,x=0.09332217805283527,y=0.2731125734848725 a=eks,b=zee,i=2188,x=0.358076509887842,y=0.6122466113672775 a=zee,b=eks,i=2189,x=0.984738578757059,y=0.892051880694554 a=hat,b=wye,i=2190,x=0.9791796147633219,y=0.30772131333366337 a=zee,b=eks,i=2191,x=0.8618827816008505,y=0.3898158650484316 a=eks,b=wye,i=2192,x=0.08897197433077497,y=0.5341085853768164 a=zee,b=hat,i=2193,x=0.44938360138176914,y=0.04690228110148875 a=wye,b=wye,i=2194,x=0.2622599637682992,y=0.33190780821668475 a=zee,b=pan,i=2195,x=0.2456231364010899,y=0.8439355736973392 a=zee,b=zee,i=2196,x=0.7874461922758034,y=0.3195592889082516 a=hat,b=wye,i=2197,x=0.3540930552112632,y=0.4554803152418352 a=hat,b=eks,i=2198,x=0.12965400774700986,y=0.4139588865738947 a=hat,b=eks,i=2199,x=0.6553924554328745,y=0.4899538937166197 a=pan,b=zee,i=2200,x=0.4507994878036382,y=0.9785717062046653 a=pan,b=pan,i=2201,x=0.9526982671410141,y=0.3425963974364795 a=hat,b=wye,i=2202,x=0.4709189260548132,y=0.33410477791419135 a=wye,b=pan,i=2203,x=0.8491557372816053,y=0.5530531109549706 a=hat,b=wye,i=2204,x=0.7973426670893504,y=0.38438739471274264 a=wye,b=zee,i=2205,x=0.2774377944743893,y=0.45205678592354026 a=zee,b=eks,i=2206,x=0.4133477502781451,y=0.555969888477931 a=pan,b=eks,i=2207,x=0.9193964373230882,y=0.4625301712579941 a=hat,b=eks,i=2208,x=0.9772889351986918,y=0.3249537135963736 a=wye,b=eks,i=2209,x=0.7841059777895694,y=0.6947456883865291 a=hat,b=eks,i=2210,x=0.46786259691563536,y=0.31576530398682046 a=pan,b=hat,i=2211,x=0.3000341492694927,y=0.9961655477923976 a=wye,b=zee,i=2212,x=0.2800829848930697,y=0.8599095044857418 a=wye,b=eks,i=2213,x=0.7099477247456799,y=0.1413865209495151 a=hat,b=zee,i=2214,x=0.2971188903315465,y=0.44965916160853636 a=zee,b=pan,i=2215,x=0.06251445207257622,y=0.13216970387427485 a=hat,b=wye,i=2216,x=0.3382952859935743,y=0.4400906767156443 a=zee,b=wye,i=2217,x=0.49170781106474626,y=0.1402042893515265 a=zee,b=hat,i=2218,x=0.2583991751219392,y=0.36652517821181607 a=pan,b=zee,i=2219,x=0.14927136365683047,y=0.18664967620347506 a=eks,b=wye,i=2220,x=0.5726690878517332,y=0.9834177283918458 a=hat,b=eks,i=2221,x=0.7726531947838272,y=0.15165188282492126 a=zee,b=eks,i=2222,x=0.813180106527479,y=0.621185672504634 a=eks,b=hat,i=2223,x=0.289329024465074,y=0.36110779604692067 a=hat,b=pan,i=2224,x=0.27094205048996056,y=0.6489628299416983 a=hat,b=hat,i=2225,x=0.013545905550584214,y=0.8494572427931795 a=eks,b=wye,i=2226,x=0.3454244478858154,y=0.29090367914645576 a=zee,b=wye,i=2227,x=0.39971822303581617,y=0.17475090292312834 a=eks,b=zee,i=2228,x=0.9408003473361174,y=0.9376913825387122 a=hat,b=wye,i=2229,x=0.4494538288870511,y=0.13090866722624483 a=pan,b=wye,i=2230,x=0.8809697124067445,y=0.39092344601998064 a=wye,b=hat,i=2231,x=0.900794437962015,y=0.8967390597734215 a=hat,b=hat,i=2232,x=0.15713550210076666,y=0.7206735582912116 a=zee,b=wye,i=2233,x=0.9004219588711274,y=0.7577516737491493 a=eks,b=eks,i=2234,x=0.27871867532288996,y=0.2911552878960423 a=eks,b=wye,i=2235,x=0.5013653314603624,y=0.8333248001496258 a=zee,b=zee,i=2236,x=0.30501285370800013,y=0.5849535705099613 a=hat,b=zee,i=2237,x=0.45674559029260486,y=0.8728724386781094 a=pan,b=pan,i=2238,x=0.02847848077848736,y=0.9207996601523926 a=pan,b=zee,i=2239,x=0.010173755043218158,y=0.22123822336488064 a=wye,b=wye,i=2240,x=0.5930605475370612,y=0.3433603733657331 a=hat,b=wye,i=2241,x=0.5014017541132575,y=0.7090960181653438 a=wye,b=hat,i=2242,x=0.9458244074853481,y=0.7456393313493013 a=zee,b=pan,i=2243,x=0.29001787500073173,y=0.045527725574051714 a=hat,b=hat,i=2244,x=0.9708832254888226,y=0.15752383437958462 a=hat,b=eks,i=2245,x=0.4770264537232787,y=0.6736468654550781 a=wye,b=hat,i=2246,x=0.7714374257659208,y=0.5425954287320883 a=pan,b=pan,i=2247,x=0.8014273299143657,y=0.7288163705942878 a=pan,b=pan,i=2248,x=0.954246012713997,y=0.8279688125072744 a=eks,b=eks,i=2249,x=0.3345668023105298,y=0.31811620191709955 a=wye,b=hat,i=2250,x=0.5431274222493861,y=0.1566355934693281 a=eks,b=hat,i=2251,x=0.8946184447856771,y=0.8281124954281727 a=zee,b=wye,i=2252,x=0.5655358148358,y=0.9169255629455827 a=eks,b=wye,i=2253,x=0.6383105313881284,y=0.1027304181651264 a=wye,b=zee,i=2254,x=0.8612725048242387,y=0.056706665236205156 a=hat,b=zee,i=2255,x=0.4883498572156204,y=0.0770621976268544 a=wye,b=hat,i=2256,x=0.10604947211581683,y=0.8870919841683852 a=hat,b=hat,i=2257,x=0.6942446034273736,y=0.6246228939328669 a=eks,b=eks,i=2258,x=0.6930800244883837,y=0.17611165906867554 a=pan,b=hat,i=2259,x=0.22286725838973298,y=0.6076445332790815 a=zee,b=zee,i=2260,x=0.8359749877662224,y=0.08101114122788078 a=hat,b=eks,i=2261,x=0.9105620468307024,y=0.3593642950046009 a=zee,b=zee,i=2262,x=0.7490208516776408,y=0.7277121821219803 a=zee,b=hat,i=2263,x=0.012838825936875464,y=0.5223435911532996 a=hat,b=pan,i=2264,x=0.37286192432196275,y=0.8365432517009491 a=zee,b=pan,i=2265,x=0.946352430931429,y=0.27693938121291084 a=pan,b=eks,i=2266,x=0.5631724274367673,y=0.0642506263060727 a=hat,b=zee,i=2267,x=0.7578871147776249,y=0.14754564446673257 a=hat,b=wye,i=2268,x=0.17474153753114763,y=0.9634949103419465 a=pan,b=eks,i=2269,x=0.5541880960714733,y=0.9158224391454514 a=eks,b=eks,i=2270,x=0.5090886478757912,y=0.7656587962141506 a=pan,b=hat,i=2271,x=0.16768184769644479,y=0.8215102227732646 a=zee,b=hat,i=2272,x=0.14140036239733678,y=0.8390759674518355 a=eks,b=hat,i=2273,x=0.8127008522217432,y=0.9949059480342844 a=eks,b=wye,i=2274,x=0.9075350776906357,y=0.024516079984659767 a=eks,b=wye,i=2275,x=0.5212081176523184,y=0.8177991905419402 a=eks,b=eks,i=2276,x=0.5329538624469671,y=0.0018158942180759308 a=pan,b=wye,i=2277,x=0.8553908959608967,y=0.021430068067535557 a=wye,b=eks,i=2278,x=0.17901836368365676,y=0.14044395537918564 a=hat,b=eks,i=2279,x=0.012280680223469398,y=0.277342303022595 a=wye,b=zee,i=2280,x=0.4217562022758986,y=0.051936162685817355 a=zee,b=pan,i=2281,x=0.1383792519119802,y=0.47235511628254045 a=eks,b=hat,i=2282,x=0.7011958061953378,y=0.91083574253739 a=zee,b=eks,i=2283,x=0.36444369039046853,y=0.8130301163410548 a=hat,b=pan,i=2284,x=0.00437293898208746,y=0.5682527005859528 a=pan,b=pan,i=2285,x=0.7982165489798513,y=0.46696290935411433 a=wye,b=wye,i=2286,x=0.777938701974155,y=0.7615824205677968 a=zee,b=eks,i=2287,x=0.0007106109478662859,y=0.8643696111639223 a=pan,b=zee,i=2288,x=0.5745888818383479,y=0.8421462451069522 a=pan,b=zee,i=2289,x=0.042515149065466495,y=0.3428290162671168 a=zee,b=eks,i=2290,x=0.14418296982644663,y=0.3545011820617253 a=hat,b=zee,i=2291,x=0.20256672348423999,y=0.7387630204148321 a=pan,b=wye,i=2292,x=0.27678771174110695,y=0.35760728439380474 a=wye,b=wye,i=2293,x=0.7466090205883998,y=0.26526277458892455 a=wye,b=pan,i=2294,x=0.08185339484509935,y=0.528639660976175 a=wye,b=eks,i=2295,x=0.08642901521217838,y=0.7537214070316656 a=eks,b=pan,i=2296,x=0.8896433327303079,y=0.37296324484846344 a=hat,b=hat,i=2297,x=0.4483608002905408,y=0.9685358655584886 a=hat,b=wye,i=2298,x=0.04470660416233252,y=0.5097725516351974 a=pan,b=zee,i=2299,x=0.9075871262764453,y=0.2516247032796314 a=zee,b=pan,i=2300,x=0.9291273399024345,y=0.9606720070997913 a=wye,b=pan,i=2301,x=0.21033222836103416,y=0.992833477876893 a=eks,b=zee,i=2302,x=0.17194913992026895,y=0.7921934271129547 a=eks,b=hat,i=2303,x=0.99161495045373,y=0.41941465442597237 a=zee,b=hat,i=2304,x=0.1127642829456843,y=0.29881658214862383 a=pan,b=zee,i=2305,x=0.11496965057148123,y=0.19753250624952667 a=hat,b=pan,i=2306,x=0.3342389415345628,y=0.985240345385304 a=zee,b=wye,i=2307,x=0.6678594262004072,y=0.2626625984540243 a=zee,b=pan,i=2308,x=0.9899815839130719,y=0.49399198581194637 a=zee,b=wye,i=2309,x=0.12120595243094534,y=0.3417676704542142 a=wye,b=wye,i=2310,x=0.6528439645535314,y=0.626705481063678 a=zee,b=zee,i=2311,x=0.965416713125537,y=0.675622189665188 a=pan,b=zee,i=2312,x=0.38832123076906144,y=0.8770818996569462 a=zee,b=pan,i=2313,x=0.4308881860064431,y=0.298139087353108 a=zee,b=hat,i=2314,x=0.9107705033446805,y=0.05369007195738784 a=wye,b=eks,i=2315,x=0.1958584059822993,y=0.6458957990948471 a=eks,b=eks,i=2316,x=0.1898131609601975,y=0.2576221943783219 a=pan,b=hat,i=2317,x=0.37219247017788026,y=0.9659877761503816 a=eks,b=hat,i=2318,x=0.6179437679435674,y=0.6255315742679604 a=hat,b=eks,i=2319,x=0.5617665438640009,y=0.03790286141600696 a=eks,b=hat,i=2320,x=0.43513392007253626,y=0.953280068715905 a=eks,b=hat,i=2321,x=0.9006870009567153,y=0.8537806242130159 a=zee,b=zee,i=2322,x=0.39299000984576493,y=0.48675520394221294 a=zee,b=zee,i=2323,x=0.6924646229067376,y=0.961728591715515 a=eks,b=zee,i=2324,x=0.3656731818815381,y=0.4348170464549541 a=zee,b=eks,i=2325,x=0.9310044743908388,y=0.5915717923626269 a=wye,b=hat,i=2326,x=0.5390947464654677,y=0.9171443353099715 a=hat,b=pan,i=2327,x=0.13236042343196264,y=0.7018827248938442 a=eks,b=zee,i=2328,x=0.9233414160859896,y=0.9426916138193271 a=eks,b=wye,i=2329,x=0.32236596243200943,y=0.12349447265840763 a=pan,b=hat,i=2330,x=0.26562360950781083,y=0.6143914548179807 a=pan,b=eks,i=2331,x=0.7795985947092806,y=0.9791969083425154 a=wye,b=eks,i=2332,x=0.8888447587498162,y=0.9274917692848156 a=zee,b=eks,i=2333,x=0.0339047026172683,y=0.9899797336099346 a=eks,b=hat,i=2334,x=0.4706495392838296,y=0.5339895561589622 a=eks,b=pan,i=2335,x=0.43389388336403034,y=0.6527555471857784 a=zee,b=wye,i=2336,x=0.2132138095588999,y=0.3350510820375012 a=eks,b=zee,i=2337,x=0.18310611841718727,y=0.27611093961149813 a=zee,b=wye,i=2338,x=0.5849778358487363,y=0.4472676087156583 a=pan,b=pan,i=2339,x=0.7632065771231693,y=0.9533148007319427 a=zee,b=zee,i=2340,x=0.7979106986767058,y=0.34142212009441275 a=eks,b=eks,i=2341,x=0.1689642670369339,y=0.08666058738902227 a=pan,b=zee,i=2342,x=0.7289455213274276,y=0.04597102157281818 a=zee,b=zee,i=2343,x=0.6910588757833684,y=0.2853388537359345 a=wye,b=eks,i=2344,x=0.46559621387184413,y=0.6453632272888741 a=eks,b=eks,i=2345,x=0.7240818295178657,y=0.7697201439211158 a=zee,b=pan,i=2346,x=0.2106452223867551,y=0.8198492988109947 a=wye,b=pan,i=2347,x=0.9345794244994885,y=0.5611924241664724 a=pan,b=hat,i=2348,x=0.5703090995325857,y=0.5762676020746584 a=hat,b=zee,i=2349,x=0.2589915838302729,y=0.04497637706481694 a=wye,b=pan,i=2350,x=0.8998392369608815,y=0.03747679005136095 a=pan,b=pan,i=2351,x=0.6724810273079015,y=0.3212043712768039 a=zee,b=pan,i=2352,x=0.19948276246295482,y=0.27886956486778547 a=hat,b=eks,i=2353,x=0.19721696160232083,y=0.1902097573367555 a=zee,b=wye,i=2354,x=0.3060499042971171,y=0.6230526367576228 a=pan,b=zee,i=2355,x=0.4132334507678017,y=0.0958935038625609 a=pan,b=pan,i=2356,x=0.49220586447091974,y=0.3637263342876337 a=pan,b=hat,i=2357,x=0.6035016232976687,y=0.2654296683236047 a=hat,b=hat,i=2358,x=0.5472833606897747,y=0.11508965130492199 a=zee,b=pan,i=2359,x=0.3123116477611221,y=0.5313965363528594 a=zee,b=eks,i=2360,x=0.7646045437647716,y=0.4374368628092571 a=wye,b=pan,i=2361,x=0.8368170215826418,y=0.1513261409766582 a=hat,b=hat,i=2362,x=0.7586788480149922,y=0.6167614911809044 a=eks,b=zee,i=2363,x=0.2829560793295287,y=0.31877554125357643 a=wye,b=wye,i=2364,x=0.8255236580889759,y=0.30884248417286686 a=eks,b=wye,i=2365,x=0.10694687582616103,y=0.12549118259779624 a=zee,b=hat,i=2366,x=0.8434948128398014,y=0.7566711862078771 a=eks,b=hat,i=2367,x=0.11100450503347647,y=0.26231820024625485 a=wye,b=zee,i=2368,x=0.7948774475212161,y=0.10865250917846037 a=hat,b=wye,i=2369,x=0.03135249091794745,y=0.3202037119775658 a=wye,b=zee,i=2370,x=0.5078848120383039,y=0.5495294084638471 a=eks,b=zee,i=2371,x=0.6296689722217776,y=0.8808041685758371 a=hat,b=wye,i=2372,x=0.36694062952440554,y=0.03285188729261823 a=wye,b=zee,i=2373,x=0.5980535785869657,y=0.36584311596027363 a=pan,b=zee,i=2374,x=0.8057531144421612,y=0.1103465158096888 a=eks,b=hat,i=2375,x=0.39566127922010763,y=0.926370579143245 a=pan,b=eks,i=2376,x=0.7036015015427707,y=0.8896688757860348 a=hat,b=wye,i=2377,x=0.3840916366205712,y=0.6117763705069971 a=wye,b=hat,i=2378,x=0.4244587912309,y=0.5147488063855301 a=pan,b=eks,i=2379,x=0.0126919318388804,y=0.05364265512252031 a=hat,b=zee,i=2380,x=0.12629846495196628,y=0.00017118893583800698 a=eks,b=hat,i=2381,x=0.551443915184712,y=0.4189803949942186 a=zee,b=hat,i=2382,x=0.9419188430791652,y=0.5943076078356421 a=hat,b=pan,i=2383,x=0.3305527530124114,y=0.9744246737507011 a=wye,b=wye,i=2384,x=0.11982738948595928,y=0.5927050811984642 a=hat,b=wye,i=2385,x=0.6993064388052053,y=0.33556275655578294 a=zee,b=pan,i=2386,x=0.4400144230398596,y=0.40718760512261376 a=wye,b=zee,i=2387,x=0.6500939509690578,y=0.45169252354648837 a=wye,b=eks,i=2388,x=0.6542816745109832,y=0.013759212456254444 a=wye,b=eks,i=2389,x=0.6332584135319546,y=0.13251231094237437 a=eks,b=wye,i=2390,x=0.6331896102608988,y=0.9589307439412602 a=wye,b=zee,i=2391,x=0.6731897745167693,y=0.4283772233112926 a=eks,b=zee,i=2392,x=0.7923894749706849,y=0.8917271151038314 a=eks,b=eks,i=2393,x=0.9746844751820227,y=0.4893807704691421 a=wye,b=pan,i=2394,x=0.2920699646605315,y=0.7387920697224446 a=eks,b=wye,i=2395,x=0.27334460412686323,y=0.9029783332632627 a=hat,b=hat,i=2396,x=0.07185787494215012,y=0.8691631482259681 a=eks,b=eks,i=2397,x=0.768257729490193,y=0.31910490090314103 a=pan,b=wye,i=2398,x=0.6626457206760483,y=0.6952332207508496 a=pan,b=hat,i=2399,x=0.034841768970897746,y=0.5723693878842167 a=pan,b=hat,i=2400,x=0.15181645902125407,y=0.7998239378911912 a=eks,b=zee,i=2401,x=0.07479813220400944,y=0.6026675734691738 a=hat,b=hat,i=2402,x=0.7741341758574097,y=0.24407851593657948 a=zee,b=wye,i=2403,x=0.4652916798345421,y=0.5826939451920669 a=eks,b=wye,i=2404,x=0.5546642401893631,y=0.5985846330820938 a=pan,b=pan,i=2405,x=0.2358853113430821,y=0.024003950417810227 a=wye,b=eks,i=2406,x=0.28179350936795733,y=0.5023264174705517 a=hat,b=eks,i=2407,x=0.2457970370438457,y=0.811421289170773 a=hat,b=hat,i=2408,x=0.6751131270509296,y=0.48856361143986005 a=eks,b=zee,i=2409,x=0.59847879634121,y=0.7916259405367129 a=pan,b=zee,i=2410,x=0.04515829439395114,y=0.24330613797458922 a=zee,b=hat,i=2411,x=0.22712092810863416,y=0.8127998680800427 a=zee,b=zee,i=2412,x=0.21505489058022198,y=0.8006638202348123 a=eks,b=hat,i=2413,x=0.13598286981810193,y=0.86160038906847 a=pan,b=pan,i=2414,x=0.8144512562961078,y=0.9177829414099823 a=hat,b=hat,i=2415,x=0.6600221567552329,y=0.0584486480823484 a=wye,b=wye,i=2416,x=0.7428129016480294,y=0.14965046440370033 a=eks,b=hat,i=2417,x=0.6492293161864587,y=0.9521947928976578 a=hat,b=pan,i=2418,x=0.9704055340867738,y=0.5799798105012466 a=eks,b=zee,i=2419,x=0.09047960361588969,y=0.48999371435226136 a=pan,b=pan,i=2420,x=0.9333731806896786,y=0.6043241512179962 a=hat,b=hat,i=2421,x=0.21707010100448243,y=0.5150327861442825 a=eks,b=pan,i=2422,x=0.00863696577870754,y=0.11509725431793605 a=zee,b=wye,i=2423,x=0.4653066475033094,y=0.21997612033850344 a=hat,b=wye,i=2424,x=0.9062179939941751,y=0.2875912231476856 a=zee,b=wye,i=2425,x=0.398155311000022,y=0.0933499833149607 a=pan,b=eks,i=2426,x=0.6379726091040971,y=0.5194384530463447 a=wye,b=eks,i=2427,x=0.539037074058747,y=0.7531525516774173 a=pan,b=hat,i=2428,x=0.7520504631719865,y=0.34660951591602773 a=pan,b=wye,i=2429,x=0.8020766995566793,y=0.7689029735366432 a=zee,b=zee,i=2430,x=0.6271482513925272,y=0.4944204099323506 a=hat,b=wye,i=2431,x=0.3036891373264764,y=0.9909449455648611 a=zee,b=wye,i=2432,x=0.30385506685705554,y=0.17382245218515768 a=zee,b=pan,i=2433,x=0.6754312777622205,y=0.07005068705650719 a=pan,b=eks,i=2434,x=0.013657995328708816,y=0.45586613889144767 a=zee,b=wye,i=2435,x=0.9416754660578306,y=0.6579056008950284 a=zee,b=wye,i=2436,x=0.090487272126626,y=0.6726267738306646 a=wye,b=wye,i=2437,x=0.8441032403303297,y=0.7236974901617537 a=pan,b=pan,i=2438,x=0.9785415873749357,y=0.14648707376766656 a=hat,b=zee,i=2439,x=0.7318268760763208,y=0.7357122474543071 a=pan,b=hat,i=2440,x=0.4546313043075274,y=0.9868446327538511 a=eks,b=zee,i=2441,x=0.7384348801280877,y=0.4331993419540827 a=zee,b=zee,i=2442,x=0.3563884899582277,y=0.8944727395958034 a=pan,b=zee,i=2443,x=0.5467338009669124,y=0.3737101047888789 a=zee,b=wye,i=2444,x=0.6743475636626085,y=0.5841642214951493 a=pan,b=zee,i=2445,x=0.150471438909343,y=0.03999544722112036 a=pan,b=zee,i=2446,x=0.8427836793414677,y=0.177257809167512 a=zee,b=hat,i=2447,x=0.9165212208454823,y=0.6343832698422787 a=wye,b=hat,i=2448,x=0.8350423281884237,y=0.2422590088973925 a=wye,b=pan,i=2449,x=0.5042681244213146,y=0.908306481649806 a=pan,b=hat,i=2450,x=0.3717927109546766,y=0.7872600125241359 a=wye,b=zee,i=2451,x=0.23883689209402614,y=0.4489097810835715 a=hat,b=wye,i=2452,x=0.7256914244489449,y=0.07408098995861301 a=hat,b=wye,i=2453,x=0.4787447016730605,y=0.027781641677141033 a=wye,b=hat,i=2454,x=0.782215232098275,y=0.17908166243221946 a=zee,b=zee,i=2455,x=0.15793062293407878,y=0.9604346209844584 a=zee,b=eks,i=2456,x=0.09865545345297155,y=0.8348979205972645 a=pan,b=pan,i=2457,x=0.3927934924087789,y=0.06769141197493256 a=zee,b=pan,i=2458,x=0.02903168922821775,y=0.9416706505805262 a=wye,b=pan,i=2459,x=0.0074179863852393835,y=0.13412770282159325 a=wye,b=wye,i=2460,x=0.8546039006462764,y=0.5794887921093801 a=pan,b=pan,i=2461,x=0.39765418222695004,y=0.607893298841388 a=wye,b=wye,i=2462,x=0.9445996918832312,y=0.4706780924111563 a=pan,b=zee,i=2463,x=0.9563932642460863,y=0.31484480296442896 a=hat,b=hat,i=2464,x=0.6604485499983388,y=0.6145786977176719 a=zee,b=zee,i=2465,x=0.3505544906675998,y=0.1954960429503897 a=pan,b=pan,i=2466,x=0.7769548783450912,y=0.8220089791630163 a=eks,b=eks,i=2467,x=0.9350039614092526,y=0.8756536110782422 a=zee,b=pan,i=2468,x=0.7178372288982118,y=0.4062989111358041 a=zee,b=wye,i=2469,x=0.9204186818975437,y=0.4747739907393056 a=hat,b=zee,i=2470,x=0.910842331244497,y=0.8937381551221251 a=pan,b=wye,i=2471,x=0.36510756117868337,y=0.16172467779589483 a=zee,b=zee,i=2472,x=0.08880173246131728,y=0.7982278670793287 a=wye,b=wye,i=2473,x=0.07909826171256307,y=0.855556979661628 a=pan,b=eks,i=2474,x=0.7828499578474473,y=0.9442071626420061 a=wye,b=wye,i=2475,x=0.06324401276925695,y=0.5950858034074182 a=pan,b=zee,i=2476,x=0.2262395290029181,y=0.49451050699405674 a=wye,b=eks,i=2477,x=0.6306465815187388,y=0.46790600889102485 a=wye,b=hat,i=2478,x=0.4614473986661236,y=0.4721517855532317 a=eks,b=eks,i=2479,x=0.3091965203151934,y=0.9145596089559873 a=hat,b=wye,i=2480,x=0.014430995239748112,y=0.35346467775779145 a=eks,b=hat,i=2481,x=0.8284728324140498,y=0.2977503297359205 a=hat,b=zee,i=2482,x=0.15810752007547613,y=0.10215153278169598 a=hat,b=eks,i=2483,x=0.5002024621775637,y=0.9187983113959539 a=zee,b=hat,i=2484,x=0.04124901160673633,y=0.1095855587112885 a=wye,b=pan,i=2485,x=0.7244385390670799,y=0.17205034306117317 a=eks,b=hat,i=2486,x=0.4923487745128049,y=0.28889637616320174 a=wye,b=pan,i=2487,x=0.3300250547987864,y=0.22540259142646224 a=eks,b=zee,i=2488,x=0.0023333167684839173,y=0.24088326731558385 a=zee,b=pan,i=2489,x=0.5050787967691673,y=0.96990681663883 a=pan,b=pan,i=2490,x=0.853399144959847,y=0.3768453915244885 a=pan,b=eks,i=2491,x=0.11150304854042947,y=0.33331036327124963 a=wye,b=eks,i=2492,x=0.9214469071128305,y=0.28676404710502656 a=hat,b=zee,i=2493,x=0.8773662066308794,y=0.17323941800052478 a=pan,b=pan,i=2494,x=0.3207059888232746,y=0.8664631709525704 a=eks,b=hat,i=2495,x=0.910628314565378,y=0.4258002135216937 a=hat,b=zee,i=2496,x=0.1577724924590801,y=0.4739307550526024 a=hat,b=wye,i=2497,x=0.8872744210629263,y=0.14605498570574493 a=wye,b=hat,i=2498,x=0.23359521101241776,y=0.5844213774291599 a=zee,b=zee,i=2499,x=0.8613769284558995,y=0.9685505021744841 a=eks,b=pan,i=2500,x=0.8597477426689076,y=0.17079339571919316 a=eks,b=zee,i=2501,x=0.9988110946859143,y=0.8013707404671317 a=zee,b=eks,i=2502,x=0.08631339989521669,y=0.7626498621504472 a=wye,b=pan,i=2503,x=0.6021619570218234,y=0.7998420154096526 a=zee,b=pan,i=2504,x=0.8178599713104803,y=0.18283102556915032 a=pan,b=hat,i=2505,x=0.7319860671662751,y=0.11573142291632155 a=hat,b=eks,i=2506,x=0.38864742500184934,y=0.9549915162000734 a=zee,b=eks,i=2507,x=0.06006684599594547,y=0.32800136057911744 a=eks,b=eks,i=2508,x=0.2459351356992232,y=0.6992300046304194 a=hat,b=pan,i=2509,x=0.9399094021245685,y=0.9766927628695118 a=eks,b=eks,i=2510,x=0.6122854089898786,y=0.11735880955927658 a=hat,b=pan,i=2511,x=0.3658401332558662,y=0.8058278063627171 a=pan,b=eks,i=2512,x=0.9712759091673199,y=0.35741783697299145 a=wye,b=pan,i=2513,x=0.9941884027342468,y=0.7427222275160807 a=hat,b=wye,i=2514,x=0.759666601296956,y=0.5029288106582336 a=hat,b=hat,i=2515,x=0.41858436455494885,y=0.7397180761147025 a=wye,b=zee,i=2516,x=0.22158162509494428,y=0.1717438346245811 a=wye,b=hat,i=2517,x=0.25809778439746667,y=0.8942638085822656 a=eks,b=hat,i=2518,x=0.8156500849184675,y=0.08381965183304241 a=hat,b=zee,i=2519,x=0.023141000554160573,y=0.159821225039678 a=eks,b=hat,i=2520,x=0.38461965648830476,y=0.8779474089328696 a=wye,b=pan,i=2521,x=0.6746733937181614,y=0.12172129656898323 a=pan,b=zee,i=2522,x=0.3836823470783707,y=0.2530933368188705 a=pan,b=eks,i=2523,x=0.2467086564140698,y=0.9098280255547708 a=hat,b=pan,i=2524,x=0.5483698024028446,y=0.80652225685914 a=zee,b=pan,i=2525,x=0.9332167021929317,y=0.8274407370101524 a=pan,b=pan,i=2526,x=0.22953431238745692,y=0.07163851427849766 a=wye,b=hat,i=2527,x=0.021510700973820462,y=0.7950798338977892 a=eks,b=eks,i=2528,x=0.7481860062358446,y=0.6037295548285344 a=eks,b=pan,i=2529,x=0.3393051290797555,y=0.025397429828768137 a=zee,b=zee,i=2530,x=0.6149438991743728,y=0.7634078131671355 a=wye,b=zee,i=2531,x=0.6511465358134351,y=0.0536653751892201 a=wye,b=wye,i=2532,x=0.0054964576725233805,y=0.28953245784366877 a=wye,b=hat,i=2533,x=0.15518569216470812,y=0.5686747295053566 a=zee,b=wye,i=2534,x=0.12207545315374224,y=0.9746444335548179 a=zee,b=eks,i=2535,x=0.5565415302093949,y=0.10288505903505452 a=wye,b=wye,i=2536,x=0.43315262752486194,y=0.27205902504143986 a=pan,b=hat,i=2537,x=0.3113077953556219,y=0.8505260803244152 a=eks,b=eks,i=2538,x=0.38906239415188226,y=0.2685051550780454 a=zee,b=hat,i=2539,x=0.6345180823665123,y=0.714272732680164 a=zee,b=pan,i=2540,x=0.7633387673070651,y=0.16850854825088746 a=wye,b=eks,i=2541,x=0.9200450459897079,y=0.5203187898658775 a=hat,b=pan,i=2542,x=0.416076924166804,y=0.4567226915609339 a=zee,b=eks,i=2543,x=0.8882507111625345,y=0.6834591517880225 a=hat,b=zee,i=2544,x=0.6234518321227132,y=0.568093714839173 a=pan,b=zee,i=2545,x=0.04811425968953953,y=0.5966158652406183 a=zee,b=zee,i=2546,x=0.5921140592243828,y=0.3199967249370237 a=pan,b=hat,i=2547,x=0.24011644563078283,y=0.12009590313568308 a=zee,b=hat,i=2548,x=0.4304009679094255,y=0.3235635213023209 a=eks,b=zee,i=2549,x=0.7611031921737661,y=0.689829708430865 a=zee,b=hat,i=2550,x=0.9107046316959098,y=0.9267025956859704 a=zee,b=zee,i=2551,x=0.5534453229003656,y=0.19470214949450948 a=pan,b=zee,i=2552,x=0.7099889805872556,y=0.2612275639524275 a=pan,b=hat,i=2553,x=0.8260887056078599,y=0.6576752537408973 a=pan,b=pan,i=2554,x=0.4479850467242381,y=0.605644729638017 a=wye,b=pan,i=2555,x=0.8635009458180566,y=0.057986705329265864 a=eks,b=pan,i=2556,x=0.680151798371677,y=0.9721202344719171 a=zee,b=pan,i=2557,x=0.3624846239071149,y=0.38096311190739685 a=eks,b=eks,i=2558,x=0.39585447743449853,y=0.9090232688363228 a=pan,b=eks,i=2559,x=0.41182608064067716,y=0.4651557950827221 a=zee,b=hat,i=2560,x=0.8207042664095232,y=0.972493490219255 a=eks,b=eks,i=2561,x=0.9568943633067363,y=0.9942427604342767 a=pan,b=wye,i=2562,x=0.7844571232021518,y=0.25212822563492654 a=eks,b=eks,i=2563,x=0.7448606140977615,y=0.7677875733269816 a=eks,b=eks,i=2564,x=0.6984324028424346,y=0.6867698395582814 a=wye,b=eks,i=2565,x=0.3850930672708389,y=0.6142341088294833 a=pan,b=pan,i=2566,x=0.027948166482267056,y=0.10155712046334942 a=zee,b=pan,i=2567,x=0.6373779619859908,y=0.8254690568634606 a=hat,b=zee,i=2568,x=0.5351681178046073,y=0.8555068797919759 a=eks,b=eks,i=2569,x=0.6837390714119882,y=0.2555760527745451 a=zee,b=wye,i=2570,x=0.7332356879541984,y=0.7095236956282258 a=wye,b=zee,i=2571,x=0.6045866476300921,y=0.9472308056954024 a=zee,b=wye,i=2572,x=0.5192819052899776,y=0.18543077448215517 a=pan,b=eks,i=2573,x=0.6173980620064918,y=0.7399111725286391 a=wye,b=hat,i=2574,x=0.12423956865216534,y=0.989639508760292 a=eks,b=hat,i=2575,x=0.33031955019827075,y=0.7108284566198849 a=hat,b=eks,i=2576,x=0.8598307222093972,y=0.677493082731475 a=pan,b=zee,i=2577,x=0.2591109015365989,y=0.9393069496539326 a=zee,b=eks,i=2578,x=0.11420274089804072,y=0.6781907800368309 a=hat,b=wye,i=2579,x=0.470168322914005,y=0.3245499585879692 a=hat,b=wye,i=2580,x=0.7501598293607254,y=0.4721867436018571 a=eks,b=hat,i=2581,x=0.625746894720574,y=0.33737938119664646 a=pan,b=eks,i=2582,x=0.4136169698568053,y=0.3221257100507432 a=zee,b=wye,i=2583,x=0.815721986649748,y=0.45027193508163077 a=pan,b=zee,i=2584,x=0.32285180303468286,y=0.5767328321662406 a=pan,b=pan,i=2585,x=0.3671198622625018,y=0.04290161860716368 a=hat,b=eks,i=2586,x=0.7548839524754403,y=0.3140601750346328 a=pan,b=wye,i=2587,x=0.149414261676316,y=0.8817567568143645 a=pan,b=eks,i=2588,x=0.13689661134333897,y=0.5584038012783021 a=hat,b=pan,i=2589,x=0.9259610701768484,y=0.7567071664063917 a=zee,b=wye,i=2590,x=0.35176292753881166,y=0.7374790902726833 a=hat,b=hat,i=2591,x=0.09004868118257148,y=0.6922893442005552 a=hat,b=pan,i=2592,x=0.18016216606425406,y=0.2099121503498219 a=pan,b=hat,i=2593,x=0.6510610556921332,y=0.10742569633195376 a=eks,b=zee,i=2594,x=0.07159878226683902,y=0.20989783292032282 a=hat,b=hat,i=2595,x=0.9678207161209708,y=0.992049177363607 a=eks,b=hat,i=2596,x=0.18014846649609306,y=0.5629283001780467 a=hat,b=pan,i=2597,x=0.6191641186208192,y=0.91398214172482 a=eks,b=hat,i=2598,x=0.012851434303710274,y=0.14814227972741656 a=hat,b=zee,i=2599,x=0.9048118287143257,y=0.8847594382115711 a=zee,b=wye,i=2600,x=0.5561307219276355,y=0.15276515927874457 a=zee,b=eks,i=2601,x=0.19257014095901703,y=0.7774457342825621 a=wye,b=eks,i=2602,x=0.9514647938068078,y=0.10795242094349111 a=hat,b=wye,i=2603,x=0.31179190517346567,y=0.01609407680873831 a=wye,b=wye,i=2604,x=0.47775304052473055,y=0.38671047718640983 a=eks,b=pan,i=2605,x=0.2344602349071444,y=0.8645430924168496 a=eks,b=zee,i=2606,x=0.1439484898344945,y=0.9439005895698022 a=eks,b=eks,i=2607,x=0.8629787970160852,y=0.8183015089362451 a=pan,b=zee,i=2608,x=0.880820846632719,y=0.4542838900435503 a=wye,b=eks,i=2609,x=0.5124204798290518,y=0.4054974158118896 a=wye,b=hat,i=2610,x=0.14713673147626471,y=0.193770427584398 a=zee,b=wye,i=2611,x=0.9269147206987636,y=0.3354668582497363 a=pan,b=wye,i=2612,x=0.48759095161412014,y=0.9486718920730824 a=pan,b=pan,i=2613,x=0.9093120035098351,y=0.993257702527396 a=hat,b=wye,i=2614,x=0.7781647480152264,y=0.993772240196278 a=hat,b=hat,i=2615,x=0.275311283835037,y=0.741356597630266 a=eks,b=eks,i=2616,x=0.8400827662084357,y=0.904384801897908 a=pan,b=pan,i=2617,x=0.44875309896113624,y=0.20709074311528453 a=wye,b=zee,i=2618,x=0.7355696569603329,y=0.27564344454988243 a=hat,b=wye,i=2619,x=0.19051153642139496,y=0.46651684239833613 a=pan,b=zee,i=2620,x=0.5592572385681548,y=0.672039894065432 a=wye,b=wye,i=2621,x=0.9091768138788122,y=0.07363030569876483 a=hat,b=eks,i=2622,x=0.21855190429616178,y=0.306255719577206 a=hat,b=zee,i=2623,x=0.5579915433786629,y=0.9351922009068756 a=hat,b=wye,i=2624,x=0.16649980465987524,y=0.9174497541816296 a=eks,b=eks,i=2625,x=0.9025640383772568,y=0.4657693509889542 a=wye,b=zee,i=2626,x=0.21020261586647726,y=0.2011091555698421 a=hat,b=eks,i=2627,x=0.037644003067944465,y=0.9166549903188604 a=eks,b=eks,i=2628,x=0.5037459860860201,y=0.20718835826701032 a=eks,b=eks,i=2629,x=0.7314957198821074,y=0.0818653656966235 a=hat,b=zee,i=2630,x=0.9194151240931991,y=0.07423066472063256 a=hat,b=hat,i=2631,x=0.8669833462776865,y=0.024944214178881152 a=hat,b=hat,i=2632,x=0.40619921403492654,y=0.6776699682132551 a=hat,b=zee,i=2633,x=0.11167516897133345,y=0.1968557916169683 a=wye,b=zee,i=2634,x=0.12637912495756354,y=0.932738782222326 a=zee,b=wye,i=2635,x=0.6187681447031627,y=0.274704452983646 a=pan,b=wye,i=2636,x=0.6460342181062689,y=0.7795324745240246 a=zee,b=zee,i=2637,x=0.19576834398868515,y=0.679453943382103 a=wye,b=eks,i=2638,x=0.36177627776550847,y=0.8386225553120263 a=eks,b=eks,i=2639,x=0.12492716932261638,y=0.21510868197623745 a=eks,b=wye,i=2640,x=0.885996241979663,y=0.059743642576263634 a=eks,b=wye,i=2641,x=0.7008702235836195,y=0.39708447632667465 a=hat,b=eks,i=2642,x=0.19929727396144037,y=0.5393711342556087 a=wye,b=eks,i=2643,x=0.7038379533640264,y=0.2415724804873508 a=eks,b=pan,i=2644,x=0.1021121482244629,y=0.676614797112832 a=wye,b=zee,i=2645,x=0.22135649292487047,y=0.3353372961478748 a=hat,b=wye,i=2646,x=0.8302037270628269,y=0.29829682191098783 a=zee,b=hat,i=2647,x=0.7129222271572655,y=0.3569951209382327 a=wye,b=wye,i=2648,x=0.5590007902215932,y=0.44142931845984645 a=zee,b=eks,i=2649,x=0.8676857104115077,y=0.6062661030015066 a=zee,b=pan,i=2650,x=0.9849457970315111,y=0.0914154862759321 a=zee,b=zee,i=2651,x=0.08318080628977687,y=0.08723840975656705 a=hat,b=pan,i=2652,x=0.3556516386966647,y=0.6019467128167675 a=hat,b=wye,i=2653,x=0.279635601734451,y=0.4522275293507577 a=pan,b=zee,i=2654,x=0.2553738664507069,y=0.8359675139928466 a=pan,b=eks,i=2655,x=0.20861278160790098,y=0.09276404710956598 a=eks,b=eks,i=2656,x=0.714144646455272,y=0.3211201665161757 a=eks,b=eks,i=2657,x=0.9118213055286543,y=0.2304692673683172 a=wye,b=eks,i=2658,x=0.8878589425876583,y=0.16500927178713598 a=pan,b=eks,i=2659,x=0.39231354538410634,y=0.19261788337249341 a=zee,b=hat,i=2660,x=0.5125720965755153,y=0.3101033226433013 a=zee,b=wye,i=2661,x=0.9409834902940938,y=0.06519737249713942 a=zee,b=zee,i=2662,x=0.8522522520922186,y=0.0821437591034958 a=zee,b=wye,i=2663,x=0.7126684401510096,y=0.8051899200649238 a=eks,b=wye,i=2664,x=0.151141097038609,y=0.671754932411165 a=zee,b=eks,i=2665,x=0.9622613991461785,y=0.19912987672139137 a=pan,b=zee,i=2666,x=0.9074679274351196,y=0.8957847934010839 a=hat,b=pan,i=2667,x=0.9240389772763548,y=0.5231982813953002 a=pan,b=eks,i=2668,x=0.3525652118913354,y=0.49330814134258383 a=hat,b=wye,i=2669,x=0.14565423862972182,y=0.18195721833206513 a=wye,b=hat,i=2670,x=0.5314631858298513,y=0.9247384504550191 a=eks,b=pan,i=2671,x=0.2191775509938665,y=0.16221454397918067 a=zee,b=wye,i=2672,x=0.2957478300120929,y=0.9566416400315985 a=hat,b=eks,i=2673,x=0.5317253402583432,y=0.47720559893968584 a=hat,b=wye,i=2674,x=0.5685867476642044,y=0.9536560186396535 a=eks,b=zee,i=2675,x=0.7116584351173386,y=0.8813675632259913 a=zee,b=zee,i=2676,x=0.6369443311903168,y=0.20245472621871452 a=wye,b=hat,i=2677,x=0.03828177316116377,y=0.694988753462705 a=wye,b=hat,i=2678,x=0.44478934074526144,y=0.6593596173323781 a=zee,b=wye,i=2679,x=0.4234179513345332,y=0.9156320336038198 a=zee,b=zee,i=2680,x=0.28695958426961987,y=0.35447908228108094 a=zee,b=zee,i=2681,x=0.5753537491643719,y=0.8698920433502088 a=hat,b=eks,i=2682,x=0.7144081950600689,y=0.8253921612815761 a=pan,b=pan,i=2683,x=0.9474694135785586,y=0.5331573468403473 a=pan,b=eks,i=2684,x=0.3066978542374318,y=0.9327810898395875 a=wye,b=pan,i=2685,x=0.5059670030001199,y=0.5002012382517893 a=wye,b=wye,i=2686,x=0.5187856380368512,y=0.8665210971116168 a=zee,b=pan,i=2687,x=0.5064156313100883,y=0.5164969637045003 a=pan,b=wye,i=2688,x=0.9170439177596071,y=0.7855194635003687 a=zee,b=hat,i=2689,x=0.7018760912024224,y=0.9018580557735235 a=zee,b=eks,i=2690,x=0.9007898309642012,y=0.45508381746621207 a=zee,b=zee,i=2691,x=0.5231651296128275,y=0.09791858989165081 a=wye,b=eks,i=2692,x=0.2877718302322071,y=0.7350128229993341 a=pan,b=zee,i=2693,x=0.6621261710619304,y=0.765604369363381 a=wye,b=wye,i=2694,x=0.5113378128718417,y=0.7447015937237151 a=hat,b=eks,i=2695,x=0.20486591930659304,y=0.08546083685115857 a=eks,b=hat,i=2696,x=0.04425126652191069,y=0.9193247377962478 a=pan,b=hat,i=2697,x=0.4397272166348868,y=0.5119020678265614 a=pan,b=wye,i=2698,x=0.24786027932789856,y=0.25028548790543437 a=hat,b=hat,i=2699,x=0.18362126379498567,y=0.3583685237385621 a=wye,b=zee,i=2700,x=0.08296135187962883,y=0.9476795899696359 a=wye,b=eks,i=2701,x=0.2631227677304565,y=0.8380786611056333 a=wye,b=hat,i=2702,x=0.6107721059185136,y=0.29607498743239313 a=eks,b=wye,i=2703,x=0.385921871325144,y=0.72206084966027 a=eks,b=eks,i=2704,x=0.7289032202296384,y=0.943448586243151 a=pan,b=zee,i=2705,x=0.2681131456172976,y=0.03881677277584117 a=eks,b=eks,i=2706,x=0.042331033396890594,y=0.5816340794859904 a=zee,b=eks,i=2707,x=0.09716550757790055,y=0.7946966787875323 a=eks,b=wye,i=2708,x=0.6794836901391871,y=0.05370583587162048 a=hat,b=zee,i=2709,x=0.4719223070024049,y=0.8798667170009199 a=pan,b=zee,i=2710,x=0.3235306005938401,y=0.3944479990658286 a=zee,b=zee,i=2711,x=0.6152705208747911,y=0.1871405298405333 a=eks,b=wye,i=2712,x=0.28680813614749745,y=0.9091560294185156 a=wye,b=hat,i=2713,x=0.7816282897070512,y=0.8725529048814329 a=wye,b=eks,i=2714,x=0.5337563133061932,y=0.8113476754885716 a=wye,b=eks,i=2715,x=0.830862652732706,y=0.31332718593186215 a=eks,b=wye,i=2716,x=0.632360024350908,y=0.3523899339535477 a=hat,b=eks,i=2717,x=0.8517633647797415,y=0.6075520102742804 a=hat,b=zee,i=2718,x=0.3739110752469652,y=0.7344229221023192 a=pan,b=zee,i=2719,x=0.13091802232794136,y=0.4147418371197401 a=zee,b=pan,i=2720,x=0.875012865695414,y=0.6301510344124231 a=pan,b=pan,i=2721,x=0.7634027233725996,y=0.9537462437208611 a=eks,b=eks,i=2722,x=0.7485292786111598,y=0.060074780780270065 a=wye,b=zee,i=2723,x=0.4692411142423141,y=0.18086715737750947 a=wye,b=zee,i=2724,x=0.3016910888319093,y=0.2815838391993606 a=eks,b=pan,i=2725,x=0.09842524478857917,y=0.4039455571089149 a=zee,b=hat,i=2726,x=0.673450582305474,y=0.2368758099721252 a=zee,b=hat,i=2727,x=0.3699736290437986,y=0.9456050995886015 a=zee,b=wye,i=2728,x=0.8748783567240713,y=0.9127365833223035 a=pan,b=eks,i=2729,x=0.9890321807426645,y=0.6544105013007959 a=eks,b=zee,i=2730,x=0.5913012155193706,y=0.5125849403012366 a=pan,b=hat,i=2731,x=0.7319063656923598,y=0.3661739653385341 a=pan,b=eks,i=2732,x=0.7776625957923161,y=0.7377246871264523 a=zee,b=eks,i=2733,x=0.11325755544848148,y=0.32415018564505305 a=eks,b=pan,i=2734,x=0.4544389365010312,y=0.36274017551484594 a=zee,b=hat,i=2735,x=0.6753256152256654,y=0.7111448175040769 a=zee,b=pan,i=2736,x=0.13316236671850434,y=0.49210023866083397 a=wye,b=hat,i=2737,x=0.8250578484602521,y=0.44752314931586656 a=hat,b=zee,i=2738,x=0.6324404521389477,y=0.5991554446942754 a=hat,b=zee,i=2739,x=0.4523752260828632,y=0.4097560532434581 a=pan,b=eks,i=2740,x=0.16601226995675156,y=0.18151654867600586 a=zee,b=pan,i=2741,x=0.8311173071571613,y=0.40630856689489725 a=hat,b=eks,i=2742,x=0.5093718066070119,y=0.9913946330960695 a=hat,b=pan,i=2743,x=0.3698356457904749,y=0.912970532909554 a=pan,b=hat,i=2744,x=0.5286755809647917,y=0.1651174363994401 a=wye,b=pan,i=2745,x=0.028208712274286007,y=0.45797747909936903 a=eks,b=pan,i=2746,x=0.1995882002967131,y=0.9988195280621234 a=wye,b=eks,i=2747,x=0.801718741445332,y=0.8343436520177938 a=zee,b=eks,i=2748,x=0.11153132519318998,y=0.17527565983385196 a=wye,b=zee,i=2749,x=0.39908796305565186,y=0.8203196495353728 a=hat,b=eks,i=2750,x=0.7691621480087831,y=0.04624795153739847 a=wye,b=zee,i=2751,x=0.8233374811260633,y=0.28118965684997943 a=wye,b=zee,i=2752,x=0.5421828769626178,y=0.6932556944834627 a=zee,b=eks,i=2753,x=0.38158944973875963,y=0.9978357823939198 a=hat,b=zee,i=2754,x=0.7970322675458169,y=0.9056375064474206 a=eks,b=pan,i=2755,x=0.5550958032704141,y=0.42460295509180657 a=wye,b=hat,i=2756,x=0.5906831195384066,y=0.8552080634179315 a=eks,b=eks,i=2757,x=0.9555433089030078,y=0.1012177575954587 a=eks,b=zee,i=2758,x=0.7664329663706339,y=0.15228215819457713 a=hat,b=zee,i=2759,x=0.7270670926222843,y=0.029636297862852157 a=pan,b=hat,i=2760,x=0.5529628324424195,y=0.672560428419093 a=wye,b=hat,i=2761,x=0.9138967886693034,y=0.9213145915711659 a=pan,b=wye,i=2762,x=0.17716806320819933,y=0.5447158699924802 a=hat,b=hat,i=2763,x=0.022393825286782576,y=0.858016600540151 a=hat,b=hat,i=2764,x=0.603392328507201,y=0.2363695702425591 a=zee,b=hat,i=2765,x=0.6459575860068912,y=0.49490736001017566 a=pan,b=zee,i=2766,x=0.830723134231425,y=0.665433991421394 a=hat,b=pan,i=2767,x=0.3457100418361476,y=0.4664053612526614 a=pan,b=hat,i=2768,x=0.051556933697434526,y=0.17976239369842706 a=wye,b=zee,i=2769,x=0.9668199998927879,y=0.775654943293786 a=hat,b=pan,i=2770,x=0.27594379871232555,y=0.07411463454718337 a=pan,b=wye,i=2771,x=0.1174987458859269,y=0.005708083531397623 a=pan,b=pan,i=2772,x=0.05392321788248433,y=0.8060831057224058 a=eks,b=hat,i=2773,x=0.69291317851219,y=0.7469948294872729 a=eks,b=hat,i=2774,x=0.9533669824863673,y=0.12771923797645246 a=pan,b=pan,i=2775,x=0.7184184194719956,y=0.4904968081523946 a=zee,b=wye,i=2776,x=0.7910444608980398,y=0.6491427094511163 a=pan,b=pan,i=2777,x=0.7969059524383465,y=0.669103483462524 a=eks,b=eks,i=2778,x=0.4044385597446536,y=0.8914365675089366 a=hat,b=hat,i=2779,x=0.3474761482419263,y=0.8741149984223016 a=wye,b=pan,i=2780,x=0.2907618155304045,y=0.6492086022779383 a=eks,b=wye,i=2781,x=0.4061806402666983,y=0.36644038967272896 a=hat,b=wye,i=2782,x=0.6917795282383538,y=0.9185836699082268 a=pan,b=eks,i=2783,x=0.5239744947947007,y=0.100504836859581 a=pan,b=hat,i=2784,x=0.18256579384445848,y=0.6843696194592838 a=pan,b=wye,i=2785,x=0.621716134059889,y=0.5300633007674981 a=pan,b=pan,i=2786,x=0.591903135564393,y=0.9817870263065608 a=wye,b=hat,i=2787,x=0.8988078039296443,y=0.3324514276733742 a=pan,b=hat,i=2788,x=0.17679205732662606,y=0.7527210010920257 a=zee,b=wye,i=2789,x=0.053717462803680616,y=0.05452469526931114 a=wye,b=wye,i=2790,x=0.7984829227541226,y=0.5087673080038057 a=eks,b=wye,i=2791,x=0.25879893217096905,y=0.8220530299185523 a=eks,b=hat,i=2792,x=0.574814951546933,y=0.838521058328272 a=zee,b=hat,i=2793,x=0.016119118073299465,y=0.048486447355322926 a=zee,b=eks,i=2794,x=0.650899632819198,y=0.32295818131218135 a=eks,b=hat,i=2795,x=0.9828163659495991,y=0.7271574141684917 a=eks,b=wye,i=2796,x=0.9795666089681072,y=0.6936068995013053 a=wye,b=eks,i=2797,x=0.0955127453952278,y=0.3193873136743336 a=hat,b=hat,i=2798,x=0.6770658307401128,y=0.9612492884585951 a=wye,b=zee,i=2799,x=0.21161639516025754,y=0.5474527237981746 a=wye,b=hat,i=2800,x=0.7093628384045736,y=0.345927559025347 a=eks,b=zee,i=2801,x=0.7870199221618309,y=0.43806525264266394 a=pan,b=pan,i=2802,x=0.8498273803284082,y=0.6695254936819108 a=hat,b=pan,i=2803,x=0.9905728716452045,y=0.06817205087359623 a=eks,b=zee,i=2804,x=0.6933897404058519,y=0.38922468118999143 a=pan,b=hat,i=2805,x=0.7075088693645657,y=0.42506017139149 a=eks,b=pan,i=2806,x=0.45982174205757165,y=0.21639041126785252 a=eks,b=hat,i=2807,x=0.8031386749353514,y=0.0456999691548835 a=eks,b=wye,i=2808,x=0.7600783211059084,y=0.007237947568672576 a=pan,b=eks,i=2809,x=0.7165979106211948,y=0.39409630219954705 a=eks,b=pan,i=2810,x=0.18551339605772543,y=0.380046863146443 a=zee,b=zee,i=2811,x=0.5396926661842615,y=0.7423060132429089 a=wye,b=hat,i=2812,x=0.4080552691530873,y=0.23715395574697773 a=pan,b=pan,i=2813,x=0.17404926584053904,y=0.80645434088305 a=wye,b=pan,i=2814,x=0.4232831301914316,y=0.003575690575454038 a=wye,b=hat,i=2815,x=0.2753349005711472,y=0.2981607803589118 a=wye,b=hat,i=2816,x=0.0548741999804403,y=0.8717529254849362 a=pan,b=eks,i=2817,x=0.9437261643896192,y=0.6585456269208473 a=pan,b=eks,i=2818,x=0.5445166922773753,y=0.38460962685588984 a=wye,b=zee,i=2819,x=0.6749831740629705,y=0.7181822687947076 a=zee,b=wye,i=2820,x=0.3580004431691963,y=0.6240683366699936 a=pan,b=eks,i=2821,x=0.4716526277671149,y=0.9325757014700042 a=wye,b=zee,i=2822,x=0.14098677511513125,y=0.5582313771144721 a=pan,b=pan,i=2823,x=0.8970769946774317,y=0.8143443328628265 a=wye,b=wye,i=2824,x=0.7341426123679048,y=0.6900466491014886 a=hat,b=zee,i=2825,x=0.9719365537990282,y=0.24324139738802553 a=wye,b=eks,i=2826,x=0.4233744319170222,y=0.8058439449826745 a=hat,b=pan,i=2827,x=0.007693535697102405,y=0.358018000756796 a=hat,b=wye,i=2828,x=0.41676624317270083,y=0.6624100442632929 a=wye,b=pan,i=2829,x=0.8978699958731674,y=0.5078843103822455 a=hat,b=hat,i=2830,x=0.21960808360173467,y=0.8264732984361639 a=zee,b=pan,i=2831,x=0.9137972915067373,y=0.8146525548769581 a=eks,b=pan,i=2832,x=0.4530789281841252,y=0.6341898004637524 a=zee,b=zee,i=2833,x=0.6526333204333133,y=0.8962754703239799 a=zee,b=hat,i=2834,x=0.6338906419145569,y=0.08004293967389409 a=wye,b=wye,i=2835,x=0.7415127201223656,y=0.2613633462577486 a=zee,b=hat,i=2836,x=0.846671334452858,y=0.24855668017395638 a=hat,b=hat,i=2837,x=0.5655910185189842,y=0.9183250775072218 a=hat,b=eks,i=2838,x=0.16902131337166026,y=0.7584866069936619 a=hat,b=pan,i=2839,x=0.5193100111654236,y=0.20166854425847602 a=pan,b=zee,i=2840,x=0.5303948386863744,y=0.9080864546926949 a=zee,b=wye,i=2841,x=0.09731314104522193,y=0.31228305132515555 a=pan,b=eks,i=2842,x=0.7549176932437908,y=0.8640405171715994 a=wye,b=zee,i=2843,x=0.2777710660360485,y=0.5714718654538901 a=eks,b=pan,i=2844,x=0.7384309958383901,y=0.36866931513449486 a=pan,b=pan,i=2845,x=0.606181068721247,y=0.616002039068612 a=hat,b=wye,i=2846,x=0.3265631003841204,y=0.374492300721745 a=hat,b=zee,i=2847,x=0.7881568154651081,y=0.5559821919859138 a=pan,b=zee,i=2848,x=0.9624756126657645,y=0.9574074942948696 a=eks,b=zee,i=2849,x=0.12952438020370405,y=0.9270908752540581 a=wye,b=hat,i=2850,x=0.05470860141262479,y=0.04658298467108257 a=wye,b=wye,i=2851,x=0.0020446268545805113,y=0.009943917182808737 a=wye,b=pan,i=2852,x=0.42940687832989866,y=0.1468318742685415 a=wye,b=wye,i=2853,x=0.990161382728111,y=0.3499379688024109 a=eks,b=pan,i=2854,x=0.6338735592995826,y=0.15761281386438764 a=wye,b=eks,i=2855,x=0.9419146917622048,y=0.6060209650374142 a=eks,b=pan,i=2856,x=0.7115880622754508,y=0.8964623782367054 a=hat,b=hat,i=2857,x=0.08346734323720095,y=0.6474711871979782 a=zee,b=wye,i=2858,x=0.2826186316140814,y=0.6695478005175661 a=eks,b=pan,i=2859,x=0.02447776772167043,y=0.20688297772055575 a=wye,b=eks,i=2860,x=0.5600033166985924,y=0.3484813313151226 a=hat,b=eks,i=2861,x=0.9138579231935814,y=0.16832803063229773 a=pan,b=pan,i=2862,x=0.09800893976590253,y=0.8457845208352374 a=pan,b=hat,i=2863,x=0.1834990915331669,y=0.528761462797945 a=zee,b=wye,i=2864,x=0.42109865017533243,y=0.9324216458693535 a=pan,b=hat,i=2865,x=0.1829857546300825,y=0.7541272830946107 a=eks,b=zee,i=2866,x=0.8934857222410671,y=0.6256367404608381 a=wye,b=zee,i=2867,x=0.9489727374596107,y=0.8632434631696883 a=eks,b=hat,i=2868,x=0.4247265114092217,y=0.9641274059396724 a=hat,b=pan,i=2869,x=0.04903454618587899,y=0.48019476723366983 a=wye,b=eks,i=2870,x=0.13588621486865515,y=0.46171851137675657 a=eks,b=hat,i=2871,x=0.8766196552731117,y=0.3432628950600898 a=eks,b=hat,i=2872,x=0.0824464474583485,y=0.41500058370516746 a=wye,b=zee,i=2873,x=0.8623888758101239,y=0.47502811946398604 a=zee,b=wye,i=2874,x=0.1681357784018227,y=0.8392880686727994 a=hat,b=hat,i=2875,x=0.8882531275158145,y=0.30970406610040124 a=wye,b=hat,i=2876,x=0.4100612516068668,y=0.5241347164240856 a=zee,b=wye,i=2877,x=0.7488377252084604,y=0.4727904641808244 a=pan,b=zee,i=2878,x=0.9718428999206795,y=0.32151486300776966 a=wye,b=zee,i=2879,x=0.3368479146214749,y=0.319508849901748 a=pan,b=eks,i=2880,x=0.6248138883456014,y=0.4323808730206413 a=hat,b=wye,i=2881,x=0.8870137115236287,y=0.6557420558079095 a=wye,b=pan,i=2882,x=0.20508256902105493,y=0.24625712578663705 a=pan,b=eks,i=2883,x=0.17469445546060924,y=0.7502077456439166 a=hat,b=eks,i=2884,x=0.01803842185770055,y=0.7123720723174057 a=wye,b=zee,i=2885,x=0.4079982232706686,y=0.42382421978789164 a=eks,b=pan,i=2886,x=0.5056322667148411,y=0.4290653381431411 a=pan,b=wye,i=2887,x=0.6338351841317565,y=0.4907041096317738 a=zee,b=hat,i=2888,x=0.9703529871646023,y=0.517811760850648 a=wye,b=zee,i=2889,x=0.7686343850863733,y=0.5742253808106673 a=eks,b=zee,i=2890,x=0.18685211627025788,y=0.2370568703128223 a=wye,b=eks,i=2891,x=0.3968173236793585,y=0.04738783308138439 a=hat,b=pan,i=2892,x=0.5956805463320682,y=0.3609140423721199 a=eks,b=zee,i=2893,x=0.5531039940725316,y=0.7306512817266388 a=pan,b=pan,i=2894,x=0.8634113930447151,y=0.042975650168931456 a=zee,b=eks,i=2895,x=0.9753708467911276,y=0.615940530686146 a=zee,b=wye,i=2896,x=0.7277583590103486,y=0.49504307091898514 a=hat,b=zee,i=2897,x=0.5678455159032189,y=0.7910090421492175 a=pan,b=zee,i=2898,x=0.23271930748884184,y=0.4088902304553087 a=pan,b=pan,i=2899,x=0.15868622973775615,y=0.9693856805728462 a=hat,b=wye,i=2900,x=0.9619050081633596,y=0.7954950376163313 a=zee,b=zee,i=2901,x=0.9156042982679851,y=0.46085055630239913 a=hat,b=pan,i=2902,x=0.2080952766035833,y=0.9323723777621576 a=pan,b=eks,i=2903,x=0.34600684567011875,y=0.2803937160495198 a=zee,b=eks,i=2904,x=0.5195992086409938,y=0.57773770500564 a=pan,b=hat,i=2905,x=0.004044853443978869,y=0.5461411566611463 a=zee,b=eks,i=2906,x=0.8608071169231579,y=0.9846761059035525 a=eks,b=hat,i=2907,x=0.5503089823322713,y=0.7762987168630092 a=hat,b=hat,i=2908,x=0.06422544393476348,y=0.04831803951278302 a=eks,b=zee,i=2909,x=0.9735920834852287,y=0.6045980049718644 a=pan,b=eks,i=2910,x=0.4552157780113615,y=0.45436268452495654 a=eks,b=pan,i=2911,x=0.3540491877210178,y=0.14296150972097188 a=zee,b=zee,i=2912,x=0.34907798271188584,y=0.6838642852489554 a=eks,b=eks,i=2913,x=0.9528487416801219,y=0.9770139821982978 a=zee,b=zee,i=2914,x=0.6713487756784149,y=0.6851459487246977 a=eks,b=wye,i=2915,x=0.18003026071883055,y=0.7605790766570338 a=eks,b=zee,i=2916,x=0.3111065625389652,y=0.4900633108457091 a=wye,b=pan,i=2917,x=0.10226439038444546,y=0.32221570886934225 a=eks,b=pan,i=2918,x=0.07324611102045919,y=0.5397221232035317 a=pan,b=hat,i=2919,x=0.5539681113785856,y=0.22898580497204302 a=hat,b=eks,i=2920,x=0.584814627427767,y=0.9854086527153794 a=pan,b=wye,i=2921,x=0.8092163085387806,y=0.5552811725641776 a=hat,b=eks,i=2922,x=0.38004354197524004,y=0.9564525660110145 a=wye,b=zee,i=2923,x=0.5170783036546709,y=0.7221456579996477 a=wye,b=zee,i=2924,x=0.6270174635047546,y=0.23008678243789993 a=eks,b=eks,i=2925,x=0.7696289189244249,y=0.057396523424096735 a=zee,b=pan,i=2926,x=0.5318019616386042,y=0.9627343736200256 a=wye,b=wye,i=2927,x=0.2329842191757341,y=0.7858658681445121 a=eks,b=zee,i=2928,x=0.6133201827668029,y=0.49769995246446974 a=hat,b=wye,i=2929,x=0.3314067590262917,y=0.2089161550583003 a=pan,b=hat,i=2930,x=0.0946626417566162,y=0.7642456152582329 a=zee,b=wye,i=2931,x=0.4294178052742412,y=0.001833098567169067 a=zee,b=eks,i=2932,x=0.27878008616849204,y=0.862578455284283 a=hat,b=wye,i=2933,x=0.4977072740481646,y=0.6875844573519313 a=hat,b=eks,i=2934,x=0.06412360974253373,y=0.22600333579859744 a=pan,b=hat,i=2935,x=0.8626379833482911,y=0.9150292252328203 a=zee,b=wye,i=2936,x=0.5768883618530124,y=0.918139479854031 a=wye,b=pan,i=2937,x=0.5377017444604313,y=0.6977594925111669 a=pan,b=hat,i=2938,x=0.2765222912827068,y=0.20398898222008643 a=wye,b=pan,i=2939,x=0.15430209185442478,y=0.3054947262512059 a=zee,b=zee,i=2940,x=0.33908084985171905,y=0.3559785704920787 a=wye,b=eks,i=2941,x=0.888622878020096,y=0.9305395559526985 a=pan,b=hat,i=2942,x=0.8426210638730054,y=0.4910437389080752 a=eks,b=wye,i=2943,x=0.43116472402260675,y=0.5431912750926549 a=pan,b=pan,i=2944,x=0.22818877662838155,y=0.08013191447933687 a=hat,b=hat,i=2945,x=0.855770419141142,y=0.9504972075792718 a=wye,b=wye,i=2946,x=0.7063288975843842,y=0.14617579736608532 a=hat,b=pan,i=2947,x=0.4735373969736173,y=0.6728372575825865 a=zee,b=eks,i=2948,x=0.027656885408126497,y=0.8228770381611789 a=pan,b=zee,i=2949,x=0.9950626279412539,y=0.3439388785004105 a=pan,b=eks,i=2950,x=0.3557454554545477,y=0.35596931491049777 a=zee,b=pan,i=2951,x=0.45736186455134964,y=0.8552078753422031 a=pan,b=pan,i=2952,x=0.6956146036887194,y=0.7094299324737594 a=hat,b=eks,i=2953,x=0.6683768178930775,y=0.25260524697474684 a=zee,b=zee,i=2954,x=0.7139612884395727,y=0.521259999124225 a=hat,b=hat,i=2955,x=0.5751429586126809,y=0.17785127736470563 a=pan,b=pan,i=2956,x=0.17229422895082336,y=0.24883239435188065 a=pan,b=hat,i=2957,x=0.14582342165786877,y=0.4356307792657701 a=zee,b=eks,i=2958,x=0.9798520574677635,y=0.42174871239678 a=hat,b=eks,i=2959,x=0.8069448445065791,y=0.7001343626890119 a=pan,b=hat,i=2960,x=0.3756435277345719,y=0.047826156911501605 a=eks,b=pan,i=2961,x=0.8176993405474695,y=0.995125161400413 a=pan,b=pan,i=2962,x=0.6998988727502398,y=0.4001842416106014 a=eks,b=pan,i=2963,x=0.11173104822679536,y=0.6370518407136563 a=hat,b=wye,i=2964,x=0.9298169180566062,y=0.09131710178593277 a=pan,b=zee,i=2965,x=0.4596689215584,y=0.6112438501475592 a=wye,b=eks,i=2966,x=0.2641518333282219,y=0.38955465518639776 a=zee,b=zee,i=2967,x=0.42822201314164976,y=0.006074939297309734 a=eks,b=eks,i=2968,x=0.20950457390651211,y=0.07888932379405189 a=wye,b=zee,i=2969,x=0.289378401347387,y=0.7440165584936792 a=zee,b=pan,i=2970,x=0.2731397114360453,y=0.8759259221000683 a=hat,b=eks,i=2971,x=0.8266785429565111,y=0.897325116301253 a=pan,b=hat,i=2972,x=0.7032052034018701,y=0.2009782870263226 a=hat,b=wye,i=2973,x=0.19266544419630705,y=0.5730436792504735 a=pan,b=wye,i=2974,x=0.20451527019757088,y=0.0206184692976914 a=wye,b=pan,i=2975,x=0.51006790151616,y=0.586042056906746 a=pan,b=zee,i=2976,x=0.8782971392557426,y=0.7428023579415594 a=wye,b=hat,i=2977,x=0.9504447063856765,y=0.94067852216513 a=zee,b=hat,i=2978,x=0.33851596868477396,y=0.8334798475916935 a=wye,b=hat,i=2979,x=0.3014946499505823,y=0.3166621276039525 a=zee,b=zee,i=2980,x=0.8838963894635692,y=0.8052149644100633 a=wye,b=zee,i=2981,x=0.5154924055050366,y=0.7978166707046667 a=wye,b=eks,i=2982,x=0.613351743297237,y=0.8395323005164117 a=zee,b=eks,i=2983,x=0.48954358421735966,y=0.9354933367243893 a=zee,b=eks,i=2984,x=0.6070104477111674,y=0.42140737208696954 a=hat,b=eks,i=2985,x=0.4613625094242657,y=0.9834443486684832 a=hat,b=hat,i=2986,x=0.012529011658969247,y=0.19751371734088574 a=hat,b=hat,i=2987,x=0.6395639802554064,y=0.2647659207339501 a=wye,b=eks,i=2988,x=0.8289886576552059,y=0.9130379115658384 a=zee,b=eks,i=2989,x=0.6115566437731396,y=0.654382371446181 a=eks,b=eks,i=2990,x=0.9192312982792387,y=0.933633690100049 a=eks,b=hat,i=2991,x=0.17088819954927414,y=0.1940915669377936 a=zee,b=eks,i=2992,x=0.7975067562633096,y=0.7188787477650647 a=wye,b=hat,i=2993,x=0.7386984969630342,y=0.5918321915044837 a=hat,b=pan,i=2994,x=0.6175875126511366,y=0.5310338441204902 a=zee,b=wye,i=2995,x=0.1553956256476441,y=0.27030029752780416 a=wye,b=pan,i=2996,x=0.7517640622761323,y=0.48287590582310524 a=eks,b=pan,i=2997,x=0.7960098234515162,y=0.9293203088509989 a=wye,b=wye,i=2998,x=0.2259174651286836,y=0.5554793712549178 a=zee,b=pan,i=2999,x=0.19942029200045563,y=0.09337986668927678 a=pan,b=hat,i=3000,x=0.7814546932332067,y=0.6000946585621107 a=eks,b=eks,i=3001,x=0.5998159531946954,y=0.7729581156588532 a=hat,b=wye,i=3002,x=0.8285272249030134,y=0.9302564445098462 a=eks,b=zee,i=3003,x=0.32175750111047774,y=0.9174648845846595 a=pan,b=hat,i=3004,x=0.6936167302032076,y=0.34099561246852717 a=wye,b=hat,i=3005,x=0.05536700717456822,y=0.10240541011411275 a=wye,b=pan,i=3006,x=0.4707778178190908,y=0.9739982771022873 a=eks,b=eks,i=3007,x=0.33350360416191926,y=0.2321416996453538 a=hat,b=wye,i=3008,x=0.793700582315604,y=0.7819730529107373 a=wye,b=zee,i=3009,x=0.8588342479923059,y=0.6774442006552894 a=wye,b=wye,i=3010,x=0.7683834748330075,y=0.8315497206524393 a=wye,b=zee,i=3011,x=0.4808351970354847,y=0.4758472571744147 a=pan,b=hat,i=3012,x=0.3219915061675801,y=0.5309453409773968 a=zee,b=pan,i=3013,x=0.8669507229743478,y=0.9303002206266048 a=zee,b=pan,i=3014,x=0.6036472794089942,y=0.5392590440608642 a=zee,b=wye,i=3015,x=0.44076973462262803,y=0.22601425557115284 a=eks,b=eks,i=3016,x=0.14517527208436098,y=0.4422293378481955 a=eks,b=eks,i=3017,x=0.8306135722899411,y=0.10636363353069911 a=hat,b=hat,i=3018,x=0.46054396234881867,y=0.3731307386931515 a=hat,b=wye,i=3019,x=0.7451272273092002,y=0.9191708709874246 a=eks,b=wye,i=3020,x=0.36662020525022576,y=0.562402663612683 a=pan,b=eks,i=3021,x=0.6322320887182494,y=0.37724024424135094 a=wye,b=pan,i=3022,x=0.7585013008000357,y=0.24891818506988306 a=pan,b=eks,i=3023,x=0.7972083825965124,y=0.6785915910266607 a=wye,b=pan,i=3024,x=0.2264089359117355,y=0.02834029309178865 a=zee,b=wye,i=3025,x=0.20048730201468612,y=0.22503692249617124 a=zee,b=wye,i=3026,x=0.620337023862303,y=0.8479919985880766 a=eks,b=hat,i=3027,x=0.4902155165931996,y=0.34683593338631313 a=zee,b=pan,i=3028,x=0.4877814673013795,y=0.6540470265442844 a=zee,b=eks,i=3029,x=0.11413363994060732,y=0.18491037637118812 a=pan,b=pan,i=3030,x=0.05555019543717121,y=0.25564439988112275 a=zee,b=pan,i=3031,x=0.41930991083452396,y=0.9053752256549477 a=wye,b=zee,i=3032,x=0.6829080864945356,y=0.2589038995740719 a=zee,b=hat,i=3033,x=0.1945237174643939,y=0.04785693318973694 a=eks,b=hat,i=3034,x=0.777291960919939,y=0.13986709661108743 a=zee,b=zee,i=3035,x=0.22350085923447272,y=0.6932534345647985 a=pan,b=eks,i=3036,x=0.6669439868955551,y=0.5083766717543267 a=pan,b=zee,i=3037,x=0.4601123673241928,y=0.589035207964983 a=zee,b=wye,i=3038,x=0.9846294915268529,y=0.7245527090730468 a=wye,b=eks,i=3039,x=0.17248806811657325,y=0.3766117373894895 a=zee,b=hat,i=3040,x=0.09621613036773924,y=0.09274768655857912 a=eks,b=eks,i=3041,x=0.5351382501931934,y=0.12235949381541733 a=pan,b=zee,i=3042,x=0.7822379718483918,y=0.3278369973742308 a=hat,b=wye,i=3043,x=0.03791889192037379,y=0.3879285406506343 a=wye,b=wye,i=3044,x=0.008609845384408454,y=0.6630442142382447 a=eks,b=eks,i=3045,x=0.8779655290898389,y=0.9276702739930572 a=hat,b=hat,i=3046,x=0.960016973419662,y=0.08732247689827766 a=wye,b=zee,i=3047,x=0.8309049399070346,y=0.7082428624476516 a=hat,b=pan,i=3048,x=0.3745994561931344,y=0.8417922239746083 a=pan,b=zee,i=3049,x=0.5327270669677042,y=0.30368855674177586 a=eks,b=wye,i=3050,x=0.8299993357777166,y=0.2238418279755512 a=hat,b=zee,i=3051,x=0.35348860200536536,y=0.8211471760032776 a=hat,b=hat,i=3052,x=0.022155682158138235,y=0.22804250396069936 a=eks,b=wye,i=3053,x=0.40298772117416637,y=0.5310548635233784 a=zee,b=hat,i=3054,x=0.8975586946419573,y=0.8371128774375303 a=pan,b=wye,i=3055,x=0.11898366225879431,y=0.973067950910434 a=zee,b=pan,i=3056,x=0.5580433239689949,y=0.2207032579590179 a=hat,b=eks,i=3057,x=0.6216704870927365,y=0.5368073736943582 a=hat,b=zee,i=3058,x=0.7143749715262198,y=0.8268686099704066 a=pan,b=pan,i=3059,x=0.6284468013862667,y=0.9107779672871813 a=pan,b=hat,i=3060,x=0.6279788132841725,y=0.7966531861283309 a=hat,b=wye,i=3061,x=0.3399453078984599,y=0.9563683369526331 a=eks,b=wye,i=3062,x=0.7538022280814409,y=0.4317566099915433 a=pan,b=zee,i=3063,x=0.8834284343378148,y=0.8232921415981069 a=pan,b=hat,i=3064,x=0.4713927103837089,y=0.9270600022151935 a=wye,b=eks,i=3065,x=0.725831736511898,y=0.5497593420610962 a=pan,b=eks,i=3066,x=0.3546378076377753,y=0.751660464737342 a=pan,b=hat,i=3067,x=0.14912115137943105,y=0.8537419730854358 a=hat,b=zee,i=3068,x=0.15034534971981672,y=0.5991052546814497 a=hat,b=zee,i=3069,x=0.4210145115702397,y=0.6847329962869824 a=zee,b=zee,i=3070,x=0.8140199067124364,y=0.40845696417778843 a=wye,b=pan,i=3071,x=0.4419206171851453,y=0.15330946039593318 a=zee,b=hat,i=3072,x=0.2169139656710095,y=0.024309947214042227 a=zee,b=wye,i=3073,x=0.3204085048627119,y=0.5177596022884065 a=hat,b=eks,i=3074,x=0.6550427877323648,y=0.571804931654245 a=zee,b=hat,i=3075,x=0.09224547266943217,y=0.27630390686135065 a=wye,b=hat,i=3076,x=0.142566387091713,y=0.27801610209718775 a=zee,b=pan,i=3077,x=0.9828350031666842,y=0.2911042298547496 a=eks,b=pan,i=3078,x=0.7520400964406814,y=0.06477631117085936 a=eks,b=pan,i=3079,x=0.7876590569822286,y=0.08167315862021418 a=wye,b=hat,i=3080,x=0.9121720715420508,y=0.27595593913920513 a=hat,b=eks,i=3081,x=0.9256606535733007,y=0.6699893991173689 a=pan,b=wye,i=3082,x=0.02986898401074356,y=0.02865740061148525 a=hat,b=pan,i=3083,x=0.43255930345398574,y=0.16451673283391233 a=zee,b=wye,i=3084,x=0.761217263172412,y=0.38734953067609035 a=zee,b=pan,i=3085,x=0.9640093000659047,y=0.025667634889210977 a=zee,b=zee,i=3086,x=0.6070527044301867,y=0.36774684626978793 a=hat,b=eks,i=3087,x=0.8008471329449127,y=0.4950773666671012 a=eks,b=eks,i=3088,x=0.42383094655044284,y=0.3113550671070515 a=pan,b=zee,i=3089,x=0.505503302798009,y=0.3205385386369711 a=eks,b=pan,i=3090,x=0.45506560432905374,y=0.48045443192943516 a=pan,b=wye,i=3091,x=0.7238244246263034,y=0.2314305015321535 a=pan,b=hat,i=3092,x=0.2820421299406517,y=0.6948986244320373 a=eks,b=wye,i=3093,x=0.6296930505212618,y=0.28305081013586286 a=eks,b=hat,i=3094,x=0.9895960932461209,y=0.48997629742606663 a=zee,b=zee,i=3095,x=0.5250712031905327,y=0.25343374690524134 a=pan,b=zee,i=3096,x=0.85788069900133,y=0.5286390892779154 a=hat,b=hat,i=3097,x=0.8481737493253426,y=0.22795592498176165 a=zee,b=hat,i=3098,x=0.8134078580345757,y=0.04760505233880952 a=zee,b=eks,i=3099,x=0.13183545798325502,y=0.7832803595814398 a=eks,b=hat,i=3100,x=0.07108443716756485,y=0.31816018481405606 a=pan,b=hat,i=3101,x=0.4069137599331083,y=0.9819670340442527 a=hat,b=zee,i=3102,x=0.3343254952473229,y=0.035494955233627556 a=zee,b=eks,i=3103,x=0.23523417159414106,y=0.98949954046695 a=hat,b=wye,i=3104,x=0.3204490612720853,y=0.0691818430184431 a=wye,b=hat,i=3105,x=0.9472477355051101,y=0.6702789389942152 a=eks,b=hat,i=3106,x=0.178408829993969,y=0.47163529118192904 a=wye,b=pan,i=3107,x=0.2923687400336503,y=0.5988171487852212 a=wye,b=wye,i=3108,x=0.0967008571691299,y=0.5910810037087718 a=wye,b=hat,i=3109,x=0.183095401433091,y=0.5893121732700413 a=wye,b=pan,i=3110,x=0.8967101456216812,y=0.8085016458992474 a=eks,b=wye,i=3111,x=0.9706322412385915,y=0.1385826306820812 a=zee,b=eks,i=3112,x=0.4493727221740449,y=0.16704994503241388 a=pan,b=pan,i=3113,x=0.7927985055919656,y=0.9023056637507897 a=hat,b=pan,i=3114,x=0.2690618409790604,y=0.9750006243924199 a=eks,b=zee,i=3115,x=0.8122516823974709,y=0.034777149921719985 a=zee,b=wye,i=3116,x=0.8411583744381673,y=0.3367223940453469 a=eks,b=hat,i=3117,x=0.6278279883921511,y=0.6783776757536581 a=wye,b=pan,i=3118,x=0.0780608220831499,y=0.34219170347854155 a=pan,b=hat,i=3119,x=0.0773284361282679,y=0.8087620482239243 a=pan,b=zee,i=3120,x=0.6479059739692804,y=0.4847407102135154 a=hat,b=pan,i=3121,x=0.44037371230003286,y=0.6579475199919346 a=zee,b=zee,i=3122,x=0.5294122704675105,y=0.6857110786673584 a=zee,b=pan,i=3123,x=0.4772167563026266,y=0.8953319261849312 a=eks,b=pan,i=3124,x=0.1911839922513059,y=0.16422636870934193 a=eks,b=eks,i=3125,x=0.34087831336678864,y=0.5699628829691863 a=zee,b=eks,i=3126,x=0.2514477009793492,y=0.2498314026061056 a=pan,b=zee,i=3127,x=0.5132442039074944,y=0.07963430048086384 a=wye,b=wye,i=3128,x=0.8001592917309861,y=0.2595871624611582 a=zee,b=zee,i=3129,x=0.027975828338240083,y=0.46442407872411695 a=eks,b=eks,i=3130,x=0.2455308797278265,y=0.13309025352554837 a=hat,b=wye,i=3131,x=0.4803964481769877,y=0.5234608286996335 a=pan,b=eks,i=3132,x=0.7271701616492765,y=0.5650626367615349 a=pan,b=wye,i=3133,x=0.23651873567883164,y=0.3764128593161674 a=hat,b=eks,i=3134,x=0.9970634534653143,y=0.8349282777208548 a=zee,b=zee,i=3135,x=0.34594612609624187,y=0.22911649635660625 a=eks,b=eks,i=3136,x=0.7717959001675492,y=0.8076412924980277 a=eks,b=pan,i=3137,x=0.9536337598657055,y=0.010853472417537202 a=hat,b=zee,i=3138,x=0.27317174947779554,y=0.646988499341493 a=zee,b=wye,i=3139,x=0.5684780382451567,y=0.5720874081361975 a=wye,b=zee,i=3140,x=0.366288776550753,y=0.04378768748862749 a=eks,b=eks,i=3141,x=0.07079750623034164,y=0.6704842466344859 a=wye,b=eks,i=3142,x=0.05521456504163247,y=0.9500745301432092 a=pan,b=eks,i=3143,x=0.9750373739856155,y=0.26053373356331044 a=pan,b=eks,i=3144,x=0.5530175425021646,y=0.8944089100243684 a=zee,b=wye,i=3145,x=0.6844032050501776,y=0.7132658565772104 a=pan,b=pan,i=3146,x=0.9710413684746768,y=0.47971725236580287 a=hat,b=hat,i=3147,x=0.0053700807986794,y=0.9348161701107937 a=hat,b=pan,i=3148,x=0.007135675731816615,y=0.26790355487815287 a=wye,b=hat,i=3149,x=0.3564530503749801,y=0.8151097852673919 a=eks,b=hat,i=3150,x=0.5356404368957323,y=0.5401388412379213 a=eks,b=pan,i=3151,x=0.0677212385434749,y=0.4111467324640289 a=hat,b=wye,i=3152,x=0.3304026703418458,y=0.06256059204934794 a=zee,b=zee,i=3153,x=0.8571384195554904,y=0.07978949404055691 a=pan,b=wye,i=3154,x=0.16108434266645066,y=0.4223970209540501 a=hat,b=pan,i=3155,x=0.2149573485418389,y=0.8001616345217611 a=eks,b=zee,i=3156,x=0.5903395185451377,y=0.6284941637547498 a=eks,b=eks,i=3157,x=0.005620302559396273,y=0.5908603311050712 a=hat,b=wye,i=3158,x=0.4946858056236574,y=0.6718815240562283 a=hat,b=eks,i=3159,x=0.3772290185802739,y=0.7716546902601435 a=pan,b=hat,i=3160,x=0.4338772208506313,y=0.9209566304134479 a=zee,b=eks,i=3161,x=0.16149623520591205,y=0.8191827690376345 a=pan,b=pan,i=3162,x=0.2443000912024087,y=0.8277963236917038 a=pan,b=pan,i=3163,x=0.5737538909065584,y=0.3575809203203234 a=eks,b=hat,i=3164,x=0.1678243487522464,y=0.1296504375686386 a=pan,b=hat,i=3165,x=0.7163182383385346,y=0.1300805568939386 a=wye,b=pan,i=3166,x=0.2735080310434773,y=0.6786442937707285 a=pan,b=eks,i=3167,x=0.48168869036370665,y=0.8968310574568457 a=zee,b=zee,i=3168,x=0.3961829207208839,y=0.2622983994021634 a=eks,b=wye,i=3169,x=0.2536595801738487,y=0.08261588685057286 a=zee,b=hat,i=3170,x=0.7316564704807246,y=0.30372246853485163 a=zee,b=zee,i=3171,x=0.27819614904389,y=0.11787924109496262 a=zee,b=wye,i=3172,x=0.9313276309501597,y=0.06784065184241639 a=pan,b=zee,i=3173,x=0.9635998480283486,y=0.12292283146783456 a=eks,b=wye,i=3174,x=0.2566078750567745,y=0.05360968786999365 a=pan,b=eks,i=3175,x=0.9685323733434764,y=0.1278804691222305 a=hat,b=pan,i=3176,x=0.776656326879061,y=0.4278875482927529 a=wye,b=pan,i=3177,x=0.6848262739198221,y=0.5321892371672183 a=wye,b=wye,i=3178,x=0.9845151630820034,y=0.6080801511979752 a=pan,b=zee,i=3179,x=0.6442678944579725,y=0.32523273097572414 a=hat,b=eks,i=3180,x=0.23662417282509318,y=0.6499193149885536 a=zee,b=pan,i=3181,x=0.12870746190802307,y=0.21635539491335465 a=eks,b=hat,i=3182,x=0.27201825487678566,y=0.9413561927236772 a=pan,b=hat,i=3183,x=0.8541608865089346,y=0.4366080716736369 a=hat,b=zee,i=3184,x=0.40026444936770444,y=0.8965715190797674 a=hat,b=zee,i=3185,x=0.9325030093530197,y=0.040633192110803185 a=wye,b=hat,i=3186,x=0.31825681489643076,y=0.3867222210818564 a=pan,b=hat,i=3187,x=0.7581463326564405,y=0.18210426293229232 a=eks,b=eks,i=3188,x=0.13550843210847796,y=0.20870138759868107 a=pan,b=hat,i=3189,x=0.026314019590705673,y=0.18939923462316988 a=pan,b=zee,i=3190,x=0.0946195302667141,y=0.9170310729203291 a=wye,b=zee,i=3191,x=0.2541806115835422,y=0.7506597466069973 a=pan,b=wye,i=3192,x=0.7448507872358296,y=0.9175983360847946 a=pan,b=zee,i=3193,x=0.3376000211106229,y=0.7592946456540783 a=wye,b=pan,i=3194,x=0.6242009188843649,y=0.1437894916755703 a=wye,b=hat,i=3195,x=0.6601677176592059,y=0.014754580715863108 a=hat,b=wye,i=3196,x=0.6843473825379831,y=0.7390543536399969 a=hat,b=zee,i=3197,x=0.48954739752340115,y=0.7181499788655996 a=zee,b=hat,i=3198,x=0.4197184822020955,y=0.9015807728046735 a=wye,b=hat,i=3199,x=0.5950661155016866,y=0.7876820843797742 a=hat,b=eks,i=3200,x=0.6465062834343134,y=0.5218982684290329 a=zee,b=hat,i=3201,x=0.060837643441948086,y=0.06449850438005456 a=hat,b=pan,i=3202,x=0.3172017484222194,y=0.05112537969570785 a=pan,b=hat,i=3203,x=0.11472288877111181,y=0.278764852494509 a=pan,b=zee,i=3204,x=0.9047148747559682,y=0.04965210128934949 a=zee,b=pan,i=3205,x=0.6892430196905853,y=0.3657149811550592 a=pan,b=pan,i=3206,x=0.6248657938226793,y=0.8681563350185779 a=pan,b=eks,i=3207,x=0.6881257122613184,y=0.804141641741672 a=hat,b=pan,i=3208,x=0.9922055997300119,y=0.9648120708367885 a=hat,b=pan,i=3209,x=0.3619120930679631,y=0.9853160311413681 a=eks,b=eks,i=3210,x=0.45293528719314957,y=0.17947685156612458 a=hat,b=hat,i=3211,x=0.5613170559787437,y=0.5352246021671387 a=zee,b=zee,i=3212,x=0.7964737415528816,y=0.5558173183901908 a=wye,b=eks,i=3213,x=0.8883434034808566,y=0.4617422375169109 a=hat,b=eks,i=3214,x=0.3321384410187088,y=0.7317250838743725 a=pan,b=pan,i=3215,x=0.1413377562828586,y=0.44678231607159036 a=eks,b=wye,i=3216,x=0.29373386203032203,y=0.4631723587487283 a=eks,b=wye,i=3217,x=0.34111783868014145,y=0.5839315442691357 a=eks,b=eks,i=3218,x=0.6880428093376797,y=0.9103207963454706 a=hat,b=pan,i=3219,x=0.7474182668789385,y=0.5590391934991645 a=eks,b=pan,i=3220,x=0.9532855829386742,y=0.8800478978800655 a=zee,b=eks,i=3221,x=0.767029184744309,y=0.2596274975760916 a=zee,b=zee,i=3222,x=0.5138831052561117,y=0.47989679105419414 a=pan,b=eks,i=3223,x=0.009907068182697043,y=0.7478047711855503 a=eks,b=wye,i=3224,x=0.8943590875125406,y=0.6208131688490002 a=eks,b=hat,i=3225,x=0.4838255169683877,y=0.2140927440076752 a=pan,b=hat,i=3226,x=0.35642723142223887,y=0.9711625405713799 a=wye,b=pan,i=3227,x=0.7070990060513,y=0.5452513596675552 a=eks,b=hat,i=3228,x=0.9463721381595557,y=0.5282145729291476 a=pan,b=pan,i=3229,x=0.9242949068835605,y=0.6700494745496223 a=hat,b=eks,i=3230,x=0.0584193890994712,y=0.4718114656898049 a=wye,b=wye,i=3231,x=0.030244834940777232,y=0.6087749649541813 a=hat,b=wye,i=3232,x=0.34678472033142016,y=0.4446414363995591 a=pan,b=eks,i=3233,x=0.5471314567981557,y=0.2169784309597168 a=pan,b=hat,i=3234,x=0.7648908069032151,y=0.03159384287802769 a=zee,b=pan,i=3235,x=0.013980830949869794,y=0.2508908461970313 a=hat,b=wye,i=3236,x=0.6969519489568067,y=0.6395027023616561 a=zee,b=wye,i=3237,x=0.8234005688200698,y=0.3631748220150387 a=zee,b=eks,i=3238,x=0.012602991921698004,y=0.22634995064837027 a=hat,b=pan,i=3239,x=0.02254180433325681,y=0.7359441973013121 a=pan,b=zee,i=3240,x=0.5877493357317612,y=0.548066125189975 a=zee,b=pan,i=3241,x=0.30421967413326567,y=0.5234487663288749 a=pan,b=wye,i=3242,x=0.9611019977003785,y=0.681330883403185 a=zee,b=hat,i=3243,x=0.17998018908462488,y=0.2200339352675208 a=hat,b=pan,i=3244,x=0.5444834083087221,y=0.5306965663976729 a=pan,b=zee,i=3245,x=0.7759221188096915,y=0.6025062049702136 a=eks,b=wye,i=3246,x=0.9681111792743258,y=0.45013761820073994 a=zee,b=hat,i=3247,x=0.7005880770412263,y=0.9156129778807589 a=hat,b=wye,i=3248,x=0.15641983171365736,y=0.5385071761397577 a=eks,b=pan,i=3249,x=0.2874972552716878,y=0.25110619048650307 a=pan,b=eks,i=3250,x=0.2829120767349058,y=0.09835801807841182 a=zee,b=wye,i=3251,x=0.4637348926957112,y=0.542576911836454 a=pan,b=hat,i=3252,x=0.9877179689365846,y=0.31240448781527486 a=eks,b=wye,i=3253,x=0.4072943512790075,y=0.6799266447871808 a=pan,b=pan,i=3254,x=0.350457431460238,y=0.4302184547620955 a=hat,b=eks,i=3255,x=0.23726834440158573,y=0.5292284240941152 a=pan,b=eks,i=3256,x=0.7135080861062042,y=0.5712799934745325 a=zee,b=eks,i=3257,x=0.20289239990952312,y=0.362603885203753 a=zee,b=zee,i=3258,x=0.8218885195808542,y=0.44721748770524405 a=wye,b=hat,i=3259,x=0.08107176449903364,y=0.29319048909041645 a=hat,b=zee,i=3260,x=0.8800473905727186,y=0.7552020057189927 a=pan,b=wye,i=3261,x=0.41821226279651147,y=0.8850253360947092 a=zee,b=hat,i=3262,x=0.32568444506228,y=0.6065878837570879 a=hat,b=hat,i=3263,x=0.5430211603262051,y=0.022421059979423008 a=eks,b=pan,i=3264,x=0.829909329738617,y=0.9788813279683912 a=wye,b=pan,i=3265,x=0.4953326302591503,y=0.864833969133287 a=pan,b=zee,i=3266,x=0.3412837479312676,y=0.8486794212655834 a=eks,b=hat,i=3267,x=0.39932762162444313,y=0.953150614321362 a=pan,b=pan,i=3268,x=0.001904789877841595,y=0.2107702989499245 a=zee,b=pan,i=3269,x=0.5531033835416052,y=0.3659293527971088 a=wye,b=hat,i=3270,x=0.3399739634399507,y=0.49965908692258354 a=eks,b=hat,i=3271,x=0.11643573302292032,y=0.35717256575069845 a=zee,b=eks,i=3272,x=0.8616836237809823,y=0.2555712577320536 a=eks,b=hat,i=3273,x=0.8348848872325367,y=0.48966840491973995 a=eks,b=pan,i=3274,x=0.25513593682652125,y=0.39337835968432966 a=zee,b=pan,i=3275,x=0.3232344110781661,y=0.47637792160425796 a=zee,b=pan,i=3276,x=0.5834425639683404,y=0.23108217202798198 a=zee,b=zee,i=3277,x=0.9181379020242023,y=0.40705334764249457 a=eks,b=pan,i=3278,x=0.5097190157077268,y=0.04899861849664533 a=wye,b=hat,i=3279,x=0.9157221686398738,y=0.5671280092243552 a=pan,b=eks,i=3280,x=0.9442806463291782,y=0.9335857464104109 a=eks,b=hat,i=3281,x=0.5361984419807034,y=0.15587235520500609 a=pan,b=zee,i=3282,x=0.86450976120493,y=0.8170786827110009 a=hat,b=wye,i=3283,x=0.5057733411836555,y=0.04923731532668796 a=pan,b=hat,i=3284,x=0.414038070322006,y=0.4761906775736686 a=pan,b=hat,i=3285,x=0.48063067035883633,y=0.4966350007922782 a=wye,b=pan,i=3286,x=0.7217297767808066,y=0.9865570013659641 a=zee,b=wye,i=3287,x=0.049406279942573406,y=0.4381024486414813 a=eks,b=eks,i=3288,x=0.8590013149268277,y=0.936500197803695 a=eks,b=hat,i=3289,x=0.9568499040898423,y=0.3653704666883357 a=zee,b=eks,i=3290,x=0.40120382485623196,y=0.21124233932924863 a=eks,b=zee,i=3291,x=0.9770383012651398,y=0.2432263238178496 a=wye,b=zee,i=3292,x=0.9521492688907935,y=0.6087321738215051 a=hat,b=hat,i=3293,x=0.47067984267026386,y=0.2670742530232063 a=pan,b=zee,i=3294,x=0.6918379159173412,y=0.31495560827632296 a=eks,b=zee,i=3295,x=0.4372879409717054,y=0.6053789536304973 a=eks,b=zee,i=3296,x=0.21986184005655396,y=0.3247997718602733 a=hat,b=pan,i=3297,x=0.9729466791999957,y=0.5771820308689207 a=pan,b=hat,i=3298,x=0.7522212873607641,y=0.17501638801193387 a=wye,b=zee,i=3299,x=0.06852018338234533,y=0.5000015791152141 a=wye,b=wye,i=3300,x=0.6831118314601023,y=0.5728211330223406 a=eks,b=eks,i=3301,x=0.8886973140588106,y=0.7986263263709766 a=hat,b=zee,i=3302,x=0.36319331709268987,y=0.87884157727253 a=pan,b=pan,i=3303,x=0.0916484218320428,y=0.6140281532216169 a=wye,b=hat,i=3304,x=0.4319885161986502,y=0.11333627655422829 a=hat,b=pan,i=3305,x=0.20275914918267568,y=0.3188057450261915 a=eks,b=pan,i=3306,x=0.7128512847755833,y=0.8374752272564904 a=zee,b=hat,i=3307,x=0.12238507918350494,y=0.9886825082749487 a=zee,b=zee,i=3308,x=0.24501938424108383,y=0.2620366749016796 a=eks,b=eks,i=3309,x=0.6736625417797468,y=0.1759055405630674 a=zee,b=wye,i=3310,x=0.7640238780203037,y=0.5545749802574607 a=zee,b=hat,i=3311,x=0.7391015948965168,y=0.7783105639991896 a=wye,b=pan,i=3312,x=0.9912133558674248,y=0.792510678216663 a=zee,b=wye,i=3313,x=0.12157734657040631,y=0.5335120372360502 a=pan,b=pan,i=3314,x=0.6554607159333067,y=0.9770255281674824 a=pan,b=wye,i=3315,x=0.1108498180405314,y=0.9467953471924881 a=eks,b=hat,i=3316,x=0.5888965480684432,y=0.045574928515849766 a=hat,b=zee,i=3317,x=0.8991863104086707,y=0.8351323082787309 a=wye,b=zee,i=3318,x=0.8368882450019627,y=0.9558667451117976 a=pan,b=eks,i=3319,x=0.34803167097398835,y=0.6217481359344504 a=hat,b=wye,i=3320,x=0.5049375453273435,y=0.07971841779344901 a=eks,b=eks,i=3321,x=0.36879345677908304,y=0.7533458977670897 a=pan,b=zee,i=3322,x=0.4071079549678054,y=0.5216483192298931 a=zee,b=wye,i=3323,x=0.956745510209848,y=0.7277085431442248 a=hat,b=eks,i=3324,x=0.6530059095611962,y=0.4110782521026085 a=pan,b=pan,i=3325,x=0.3674804417277773,y=0.9040679087190475 a=hat,b=eks,i=3326,x=0.07009249966420861,y=0.25922706016534536 a=zee,b=eks,i=3327,x=0.14046308364385085,y=0.059686547583128746 a=pan,b=hat,i=3328,x=0.9232634224803832,y=0.02622931272244866 a=eks,b=hat,i=3329,x=0.5694104895719442,y=0.896791407570237 a=eks,b=pan,i=3330,x=0.34148617036917717,y=0.868694856533039 a=zee,b=hat,i=3331,x=0.5580004279189276,y=0.13162220092963606 a=pan,b=wye,i=3332,x=0.32760226290506067,y=0.20546606340653295 a=eks,b=pan,i=3333,x=0.4410927567165518,y=0.9434358777012175 a=wye,b=pan,i=3334,x=0.3692628443912691,y=0.04456305695935858 a=eks,b=wye,i=3335,x=0.2886377826496196,y=0.5510326222058004 a=wye,b=pan,i=3336,x=0.0830596216722399,y=0.42130620217712367 a=eks,b=eks,i=3337,x=0.8502898262908782,y=0.808554017252108 a=wye,b=pan,i=3338,x=0.4258737140465607,y=0.20746386470004785 a=zee,b=hat,i=3339,x=0.9958679007877833,y=0.03637803286845476 a=eks,b=eks,i=3340,x=0.8772219678712854,y=0.6738364551822755 a=zee,b=wye,i=3341,x=0.8674680931450676,y=0.08495173932166111 a=hat,b=wye,i=3342,x=0.039731587832649184,y=0.7153198737893809 a=zee,b=wye,i=3343,x=0.28331195090016237,y=0.3609364099093614 a=wye,b=pan,i=3344,x=0.5916979456033509,y=0.4261672292650668 a=zee,b=hat,i=3345,x=0.3236007641260298,y=0.31877697899629276 a=zee,b=wye,i=3346,x=0.0631478998746885,y=0.6649602440405321 a=wye,b=pan,i=3347,x=0.61444979062327,y=0.13673022117181688 a=eks,b=eks,i=3348,x=0.38993896958048435,y=0.2335429118604364 a=pan,b=wye,i=3349,x=0.376031512913815,y=0.4929792401226455 a=wye,b=eks,i=3350,x=0.9327767394224131,y=0.7607839483352263 a=eks,b=wye,i=3351,x=0.18464331650677035,y=0.6120397829138642 a=hat,b=hat,i=3352,x=0.550190920585813,y=0.7696873798459735 a=wye,b=eks,i=3353,x=0.5877052746857248,y=0.5545585412269964 a=pan,b=zee,i=3354,x=0.2801717488802852,y=0.17038214633612547 a=zee,b=wye,i=3355,x=0.024194919016248595,y=0.13545067511197206 a=wye,b=eks,i=3356,x=0.6380780240701133,y=0.9408087514008974 a=eks,b=pan,i=3357,x=0.6623105955866089,y=0.4258008296217072 a=eks,b=wye,i=3358,x=0.4071377938114724,y=0.7108273628344846 a=wye,b=hat,i=3359,x=0.6347502280299748,y=0.13907882326502974 a=wye,b=zee,i=3360,x=0.8494626745217564,y=0.023483418292297054 a=eks,b=eks,i=3361,x=0.6555829047838948,y=0.8920276297804856 a=hat,b=zee,i=3362,x=0.9880826407125887,y=0.11010372754824016 a=pan,b=wye,i=3363,x=0.6526207146787799,y=0.3813540848159578 a=eks,b=zee,i=3364,x=0.28621636247260607,y=0.5342782090242255 a=wye,b=pan,i=3365,x=0.5700040498735991,y=0.8850660888169822 a=hat,b=eks,i=3366,x=0.4556207889124957,y=0.07128477762040519 a=hat,b=pan,i=3367,x=0.18923164185093178,y=0.7138172870807187 a=pan,b=zee,i=3368,x=0.7831951158978603,y=0.3315912232116869 a=eks,b=wye,i=3369,x=0.3991655712684341,y=0.6297930225870115 a=eks,b=pan,i=3370,x=0.9558238449527896,y=0.27697054714540026 a=wye,b=eks,i=3371,x=0.794226121886924,y=0.42411771070954085 a=pan,b=hat,i=3372,x=0.43937440052467935,y=0.4563691901909951 a=wye,b=zee,i=3373,x=0.6530552443760023,y=0.15544449101184865 a=eks,b=wye,i=3374,x=0.8269474339710359,y=0.12072235071637616 a=zee,b=zee,i=3375,x=0.4367949309522303,y=0.013673838744716393 a=zee,b=eks,i=3376,x=0.5377434458282238,y=0.23314241806418468 a=pan,b=pan,i=3377,x=0.45145970444322747,y=0.8856960898087811 a=hat,b=wye,i=3378,x=0.012877279074692716,y=0.6068979505584087 a=zee,b=wye,i=3379,x=0.23678623178363256,y=0.05041356234716987 a=pan,b=hat,i=3380,x=0.9872783151204066,y=0.48841231625195825 a=zee,b=hat,i=3381,x=0.7373174186367665,y=0.7964198412222034 a=hat,b=wye,i=3382,x=0.4115788506813578,y=0.5970142880431725 a=zee,b=pan,i=3383,x=0.7218790645435766,y=0.45969503904769105 a=zee,b=wye,i=3384,x=0.16492065527363664,y=0.9315720353082685 a=zee,b=pan,i=3385,x=0.05670367935833176,y=0.2963435909908908 a=zee,b=eks,i=3386,x=0.6420030353862732,y=0.23114095824311187 a=eks,b=wye,i=3387,x=0.8708836596594736,y=0.18168328151330237 a=eks,b=eks,i=3388,x=0.711689030667817,y=0.08741327203084581 a=wye,b=zee,i=3389,x=0.40891337260400795,y=0.9839548655687227 a=eks,b=eks,i=3390,x=0.4329319528885155,y=0.7161120212330097 a=wye,b=wye,i=3391,x=0.9407214715817039,y=0.16134765993593336 a=wye,b=eks,i=3392,x=0.764135299542596,y=0.46303754738896463 a=wye,b=zee,i=3393,x=0.9822570907790836,y=0.7299006638143403 a=hat,b=eks,i=3394,x=0.6851390329252532,y=0.9050274462052531 a=pan,b=zee,i=3395,x=0.7512424175943134,y=0.4059836895379698 a=eks,b=hat,i=3396,x=0.9607050331936833,y=0.7948112675657537 a=wye,b=zee,i=3397,x=0.05596493072960251,y=0.9435195318051948 a=hat,b=eks,i=3398,x=0.6053108138597539,y=0.5992354123506696 a=pan,b=eks,i=3399,x=0.048684103098098785,y=0.1633725907413952 a=wye,b=wye,i=3400,x=0.10069663909544047,y=0.9482094389350565 a=zee,b=wye,i=3401,x=0.12603857687396403,y=0.9644862170094224 a=pan,b=zee,i=3402,x=0.27741250695381336,y=0.8159372840391408 a=pan,b=hat,i=3403,x=0.7370714816662562,y=0.8697953979508419 a=pan,b=zee,i=3404,x=0.31468021565829374,y=0.4427420339087643 a=hat,b=pan,i=3405,x=0.8863854452798668,y=0.033442919864234644 a=hat,b=hat,i=3406,x=0.45429743426633307,y=0.18433478859999053 a=eks,b=wye,i=3407,x=0.9617046721194548,y=0.9093815718950851 a=pan,b=hat,i=3408,x=0.07330408010392908,y=0.4448942751848767 a=zee,b=eks,i=3409,x=0.3364026277159641,y=0.9868364857498738 a=hat,b=pan,i=3410,x=0.08445928966500227,y=0.0703789054946542 a=wye,b=eks,i=3411,x=0.34156100908061116,y=0.8010566111511997 a=pan,b=wye,i=3412,x=0.8423508832374376,y=0.6949323092381406 a=wye,b=wye,i=3413,x=0.040886939254273114,y=0.47897154534037656 a=zee,b=wye,i=3414,x=0.25217276547664036,y=0.036553945399371846 a=zee,b=pan,i=3415,x=0.5599190631540909,y=0.924868567464608 a=zee,b=zee,i=3416,x=0.48916626975610933,y=0.5220243096247617 a=pan,b=zee,i=3417,x=0.2837666956657495,y=0.38177621330614264 a=hat,b=pan,i=3418,x=0.9442741844519087,y=0.3017027866540207 a=zee,b=hat,i=3419,x=0.06600809539932284,y=0.6981900505881413 a=zee,b=wye,i=3420,x=0.23090328234417856,y=0.2832500437007679 a=pan,b=zee,i=3421,x=0.9466805608495066,y=0.20786286772685625 a=wye,b=wye,i=3422,x=0.9363152201437546,y=0.28852583041792845 a=hat,b=hat,i=3423,x=0.0844657406732815,y=0.035913466762956925 a=pan,b=wye,i=3424,x=0.8784967044400372,y=0.604737958747047 a=hat,b=pan,i=3425,x=0.6609492899115649,y=0.5467085754935348 a=zee,b=hat,i=3426,x=0.075752725904918,y=0.609127836669268 a=pan,b=hat,i=3427,x=0.8416597040795218,y=0.8525979909355791 a=wye,b=zee,i=3428,x=0.16948281534078558,y=0.5287767961751489 a=eks,b=pan,i=3429,x=0.6884416724548735,y=0.37076683601683813 a=wye,b=zee,i=3430,x=0.06722038251076656,y=0.9227889532742807 a=eks,b=wye,i=3431,x=0.09226104972636995,y=0.7254707163058396 a=eks,b=wye,i=3432,x=0.9890932308131895,y=0.23151574428068822 a=zee,b=zee,i=3433,x=0.8595470542087552,y=0.8498636271417952 a=wye,b=eks,i=3434,x=0.5407110734310688,y=0.05363800054311196 a=zee,b=eks,i=3435,x=0.0439664086678202,y=0.9140005792113355 a=zee,b=wye,i=3436,x=0.9752652636201881,y=0.47980923190874036 a=pan,b=eks,i=3437,x=0.025261472762689308,y=0.12799888376709667 a=zee,b=eks,i=3438,x=0.16021119119058125,y=0.7792702864503347 a=zee,b=hat,i=3439,x=0.6820189455688497,y=0.10951500585648855 a=wye,b=pan,i=3440,x=0.936544606740171,y=0.03446044548668015 a=eks,b=pan,i=3441,x=0.2537650754015236,y=0.05620296178361983 a=hat,b=wye,i=3442,x=0.6287605552712544,y=0.33295303984892444 a=wye,b=zee,i=3443,x=0.21494998659532738,y=0.7690234752214624 a=pan,b=wye,i=3444,x=0.6714922124805293,y=0.4749161688649426 a=wye,b=eks,i=3445,x=0.0550862548275467,y=0.9962657146123411 a=zee,b=eks,i=3446,x=0.2804194256928545,y=0.23979661671683972 a=eks,b=pan,i=3447,x=0.8785960556284188,y=0.7011073928320367 a=eks,b=eks,i=3448,x=0.5502631585453132,y=0.11319904721842211 a=zee,b=pan,i=3449,x=0.524308758962708,y=0.6332502139032691 a=pan,b=pan,i=3450,x=0.8213036158322992,y=0.6456770989043784 a=pan,b=pan,i=3451,x=0.8025436057063862,y=0.7060797186033781 a=pan,b=zee,i=3452,x=0.5760028039744347,y=0.6132903113537639 a=eks,b=hat,i=3453,x=0.05717780028504649,y=0.07422864049114308 a=eks,b=hat,i=3454,x=0.9110638506299676,y=0.9591332251303966 a=zee,b=wye,i=3455,x=0.51833979114664,y=0.6939970837947521 a=eks,b=pan,i=3456,x=0.4252463974393268,y=0.39275828072553476 a=eks,b=wye,i=3457,x=0.9769460675156931,y=0.8198707026075209 a=hat,b=eks,i=3458,x=0.30514346329289554,y=0.9833267802770143 a=pan,b=pan,i=3459,x=0.014452973503922828,y=0.755728000485021 a=zee,b=hat,i=3460,x=0.588470670827405,y=0.6174548562216325 a=zee,b=wye,i=3461,x=0.1990979839956707,y=0.023566934582078036 a=wye,b=eks,i=3462,x=0.7242013186291925,y=0.47306057653207245 a=pan,b=wye,i=3463,x=0.06717794490486906,y=0.48623828005334757 a=pan,b=eks,i=3464,x=0.8155896300126392,y=0.5894548806723218 a=wye,b=eks,i=3465,x=0.9422913151044523,y=0.361126352245832 a=zee,b=wye,i=3466,x=0.209141807598481,y=0.7545695892430896 a=hat,b=eks,i=3467,x=0.9391826144539274,y=0.9934443990210938 a=zee,b=wye,i=3468,x=0.2358251666384058,y=0.4863498031303115 a=pan,b=pan,i=3469,x=0.4258863723941383,y=0.2095061249114658 a=eks,b=hat,i=3470,x=0.47997276184744964,y=0.06659122141821061 a=wye,b=pan,i=3471,x=0.2764533988832033,y=0.3208516601140218 a=hat,b=wye,i=3472,x=0.4069308223369382,y=0.7259811106485108 a=pan,b=eks,i=3473,x=0.244297825943407,y=0.31169012284386755 a=wye,b=pan,i=3474,x=0.6738217687467104,y=0.2638420139509079 a=zee,b=wye,i=3475,x=0.8997076621651254,y=0.35716661851825715 a=zee,b=hat,i=3476,x=0.4788250437439896,y=0.5377374198573633 a=pan,b=hat,i=3477,x=0.6611093704674268,y=0.6687601867132502 a=eks,b=pan,i=3478,x=0.08557950916786583,y=0.37592412501843786 a=zee,b=pan,i=3479,x=0.8231858428238995,y=0.28514406372275236 a=wye,b=eks,i=3480,x=0.4670447991864045,y=0.46821183232819474 a=eks,b=wye,i=3481,x=0.0018822508391512782,y=0.4734813045472098 a=pan,b=zee,i=3482,x=0.21972014701783804,y=0.9122864135454931 a=zee,b=hat,i=3483,x=0.2095348234287714,y=0.9927778389609139 a=eks,b=pan,i=3484,x=0.10029139579593083,y=0.535016375595021 a=hat,b=hat,i=3485,x=0.36431575992404175,y=0.9966126666610623 a=hat,b=wye,i=3486,x=0.2849558278410832,y=0.3539958226346893 a=zee,b=hat,i=3487,x=0.866561498905371,y=0.6749719599240999 a=zee,b=pan,i=3488,x=0.05018208235181909,y=0.3964541287147757 a=wye,b=eks,i=3489,x=0.8077315081411627,y=0.7479997434577657 a=zee,b=zee,i=3490,x=0.10200642169348917,y=0.31165758001404054 a=hat,b=wye,i=3491,x=0.12886564721513227,y=0.7037939176865968 a=eks,b=hat,i=3492,x=0.43102073349691117,y=0.5993057473020176 a=hat,b=pan,i=3493,x=0.555202486463376,y=0.36825782870554846 a=hat,b=hat,i=3494,x=0.9044026544451589,y=0.37279264245660304 a=zee,b=wye,i=3495,x=0.9934345872412148,y=0.8688371909960622 a=zee,b=eks,i=3496,x=0.12474075821856478,y=0.7664439797094331 a=eks,b=zee,i=3497,x=0.9892124342839178,y=0.9379196159380152 a=eks,b=hat,i=3498,x=0.6909633362296115,y=0.5517990615632886 a=pan,b=eks,i=3499,x=0.10345255049088942,y=0.02234404876115914 a=eks,b=eks,i=3500,x=0.3991733155276741,y=0.8199397764785649 a=hat,b=eks,i=3501,x=0.002293403878501854,y=0.4879144111797784 a=zee,b=zee,i=3502,x=0.5345656776152677,y=0.9046658240543963 a=zee,b=wye,i=3503,x=0.9917665563701388,y=0.7473226514963157 a=wye,b=hat,i=3504,x=0.5918745558045386,y=0.2286796079695561 a=pan,b=hat,i=3505,x=0.9587176731534732,y=0.12809903557671276 a=pan,b=eks,i=3506,x=0.3942757672769698,y=0.3445410354016084 a=wye,b=zee,i=3507,x=0.8698234232439451,y=0.6003476393534727 a=eks,b=hat,i=3508,x=0.6230637620114838,y=0.424076726635791 a=hat,b=zee,i=3509,x=0.9622867726071316,y=0.1432938077777307 a=hat,b=wye,i=3510,x=0.3386148986151456,y=0.7431914358914263 a=eks,b=pan,i=3511,x=0.3837436116647608,y=0.8533106760534216 a=zee,b=eks,i=3512,x=0.7150929360997113,y=0.9600218860596139 a=hat,b=eks,i=3513,x=0.33373578693097705,y=0.5234647971537469 a=wye,b=wye,i=3514,x=0.5856301380406596,y=0.1275528964200492 a=zee,b=wye,i=3515,x=0.37723354796784714,y=0.9997851122732699 a=wye,b=hat,i=3516,x=0.44369718809353986,y=0.4894205500423119 a=wye,b=eks,i=3517,x=0.322389903088264,y=0.05702987241410096 a=pan,b=wye,i=3518,x=0.11882480113661997,y=0.3858296816561547 a=wye,b=zee,i=3519,x=0.7202765028894381,y=0.12574040969710987 a=zee,b=hat,i=3520,x=0.0928487341029709,y=0.3330386484000102 a=pan,b=pan,i=3521,x=0.22867195583127464,y=0.33603525596818895 a=pan,b=zee,i=3522,x=0.7242093277954511,y=0.831898967676118 a=zee,b=eks,i=3523,x=0.42001209130403205,y=0.5036656584109297 a=pan,b=eks,i=3524,x=0.30252752965606133,y=0.24419009734033026 a=wye,b=hat,i=3525,x=0.9824695650800549,y=0.222603495436539 a=zee,b=wye,i=3526,x=0.04315340497837039,y=0.38068506172393646 a=hat,b=pan,i=3527,x=0.6632440400457205,y=0.1820945385520728 a=zee,b=wye,i=3528,x=0.7076813404535067,y=0.027521703948078957 a=wye,b=eks,i=3529,x=0.16368069077854164,y=0.29359040780910695 a=zee,b=wye,i=3530,x=0.217015339519548,y=0.8474352672037695 a=wye,b=hat,i=3531,x=0.598374987624828,y=0.6802372735701074 a=hat,b=wye,i=3532,x=0.3438213922655702,y=0.28091154307295796 a=wye,b=zee,i=3533,x=0.2380647747461756,y=0.9297096582745085 a=pan,b=zee,i=3534,x=0.5808212068478656,y=0.9148727191488517 a=pan,b=wye,i=3535,x=0.7265966050847938,y=0.21414009357018593 a=hat,b=pan,i=3536,x=0.7017454439056625,y=0.2590514800523752 a=hat,b=eks,i=3537,x=0.23900423399657456,y=0.2588795683734507 a=wye,b=zee,i=3538,x=0.784669987647248,y=0.6504554048913334 a=wye,b=zee,i=3539,x=0.26623848938137373,y=0.5547651697635625 a=pan,b=eks,i=3540,x=0.6492339089502173,y=0.6963037893628019 a=wye,b=hat,i=3541,x=0.4456255182136123,y=0.6615870162361136 a=hat,b=eks,i=3542,x=0.20295072778526713,y=0.7574601201974366 a=eks,b=wye,i=3543,x=0.9795917719021048,y=0.41272909038566297 a=pan,b=eks,i=3544,x=0.660437682897796,y=0.9976869991284935 a=wye,b=zee,i=3545,x=0.2910302714747729,y=0.3219344480841323 a=zee,b=wye,i=3546,x=0.6680653445050417,y=0.864596002429439 a=pan,b=zee,i=3547,x=0.7639660507096179,y=0.6193776992233352 a=hat,b=wye,i=3548,x=0.2983669342833217,y=0.9026909166111313 a=eks,b=eks,i=3549,x=0.1538517544982081,y=0.5455919445696917 a=wye,b=zee,i=3550,x=0.15207698807295011,y=0.9519397932545018 a=eks,b=hat,i=3551,x=0.4342338573806348,y=0.6933807304285913 a=eks,b=pan,i=3552,x=0.965663991619718,y=0.5930384036340364 a=pan,b=pan,i=3553,x=0.3101812940186591,y=0.2727128797499023 a=eks,b=hat,i=3554,x=0.18260657532777225,y=0.5311854832790144 a=hat,b=eks,i=3555,x=0.3893225708373611,y=0.5611190752491995 a=zee,b=wye,i=3556,x=0.7278766469231946,y=0.21929031459492465 a=zee,b=eks,i=3557,x=0.8571691661862111,y=0.5461980618981016 a=pan,b=eks,i=3558,x=0.8344799261872303,y=0.3256634336181796 a=pan,b=zee,i=3559,x=0.06279062797134494,y=0.9004664994169836 a=eks,b=eks,i=3560,x=0.4525336606815864,y=0.7037155484173209 a=pan,b=hat,i=3561,x=0.19425929127106012,y=0.24083853125540766 a=wye,b=eks,i=3562,x=0.07556315455842999,y=0.7950176869999145 a=eks,b=eks,i=3563,x=0.11705838779214672,y=0.8232973229982639 a=eks,b=hat,i=3564,x=0.4273089616257022,y=0.8991684257803373 a=wye,b=zee,i=3565,x=0.0168691413650478,y=0.18821185808166463 a=eks,b=eks,i=3566,x=0.1825897444890373,y=0.8746110728517744 a=zee,b=pan,i=3567,x=0.8121651250250981,y=0.686457266195396 a=hat,b=pan,i=3568,x=0.18054803232549899,y=0.8898083043065161 a=wye,b=hat,i=3569,x=0.8089924807824601,y=0.6633779430154854 a=hat,b=hat,i=3570,x=0.23144140451317397,y=0.756629243011781 a=wye,b=wye,i=3571,x=0.38887372145181665,y=0.20495538006007763 a=eks,b=pan,i=3572,x=0.35534650094834996,y=0.47884355218030206 a=zee,b=wye,i=3573,x=0.6566568341390783,y=0.6074553589369566 a=eks,b=eks,i=3574,x=0.6035504498536483,y=0.4034395784600332 a=wye,b=wye,i=3575,x=0.6697828249944248,y=0.7638274219999387 a=pan,b=zee,i=3576,x=0.35707993266640137,y=0.5998235579404124 a=hat,b=pan,i=3577,x=0.8477996338004375,y=0.10094293678130806 a=eks,b=eks,i=3578,x=0.47993080744275407,y=0.7674479934775376 a=pan,b=eks,i=3579,x=0.8628339613928006,y=0.8518114551427095 a=eks,b=wye,i=3580,x=0.06010165714354565,y=0.944192401862212 a=zee,b=pan,i=3581,x=0.6103322948705803,y=0.26797145325571314 a=hat,b=zee,i=3582,x=0.8139735237051052,y=0.41109841413309234 a=eks,b=wye,i=3583,x=0.27009503691464387,y=0.34604318820252766 a=pan,b=eks,i=3584,x=0.29901280575806055,y=0.2606367826081081 a=eks,b=eks,i=3585,x=0.9444152014675282,y=0.08541204554484039 a=eks,b=hat,i=3586,x=0.9746502905906368,y=0.5008159057662351 a=eks,b=eks,i=3587,x=0.3503288922335456,y=0.8393293676314583 a=hat,b=hat,i=3588,x=0.5428335261613996,y=0.8746507311887247 a=eks,b=hat,i=3589,x=0.04503314762859012,y=0.4498210841109198 a=eks,b=hat,i=3590,x=0.21099486037176274,y=0.15918964285673298 a=pan,b=zee,i=3591,x=0.9647151077978772,y=0.21127797222603706 a=wye,b=hat,i=3592,x=0.794447944887749,y=0.04835321965805062 a=hat,b=pan,i=3593,x=0.8800094797708875,y=0.26888925214636394 a=pan,b=hat,i=3594,x=0.30914801544685455,y=0.38087457746812736 a=eks,b=zee,i=3595,x=0.5231819036675817,y=0.40713616193177726 a=zee,b=hat,i=3596,x=0.5397245337903605,y=0.22318277532785968 a=eks,b=eks,i=3597,x=0.3001045399300144,y=0.684654835830757 a=wye,b=wye,i=3598,x=0.7511038686147846,y=0.16271559707006 a=pan,b=wye,i=3599,x=0.24928033876518263,y=0.5468336781217452 a=zee,b=zee,i=3600,x=0.8913764206699744,y=0.10963338992957028 a=zee,b=zee,i=3601,x=0.2744348997210646,y=0.31854494443399084 a=wye,b=zee,i=3602,x=0.054351745514601424,y=0.6361866150927422 a=zee,b=eks,i=3603,x=0.5229720340996624,y=0.057088462748232205 a=wye,b=pan,i=3604,x=0.7144947248233644,y=0.6725505298381226 a=wye,b=eks,i=3605,x=0.6414071793103325,y=0.5040707081922082 a=pan,b=eks,i=3606,x=0.8517449653369746,y=0.2950457092186415 a=wye,b=hat,i=3607,x=0.2865652516469479,y=0.10334063882665867 a=wye,b=pan,i=3608,x=0.24799522500173943,y=0.029628860448197347 a=zee,b=hat,i=3609,x=0.519616508395717,y=0.280205313320282 a=eks,b=zee,i=3610,x=0.06251116908017895,y=0.23236755910808227 a=eks,b=hat,i=3611,x=0.2146220845642176,y=0.1332540175691711 a=hat,b=zee,i=3612,x=0.39065626156480215,y=0.09272883365156981 a=pan,b=eks,i=3613,x=0.04243312520650444,y=0.12731535921213588 a=zee,b=hat,i=3614,x=0.9992938250588376,y=0.7586006131131866 a=pan,b=pan,i=3615,x=0.955045779277772,y=0.8579181695107918 a=eks,b=wye,i=3616,x=0.14187634853420827,y=0.2180915198390927 a=wye,b=wye,i=3617,x=0.7840113988617385,y=0.15653631848249716 a=zee,b=zee,i=3618,x=0.015927778136068382,y=0.6135932738526103 a=pan,b=pan,i=3619,x=0.19730522485789048,y=0.6132793786163574 a=wye,b=hat,i=3620,x=0.6713095225608523,y=0.5954491704569804 a=zee,b=pan,i=3621,x=0.4092160575415905,y=0.30771033889968114 a=hat,b=pan,i=3622,x=0.8901185751582916,y=0.1870407451165942 a=wye,b=hat,i=3623,x=0.5152268528423625,y=0.013485915142624427 a=wye,b=hat,i=3624,x=0.13584832757741117,y=0.382341043184265 a=wye,b=zee,i=3625,x=0.7390723547209095,y=0.6804645486376089 a=pan,b=pan,i=3626,x=0.17323378929158628,y=0.22177151771660586 a=hat,b=hat,i=3627,x=0.27427850969768897,y=0.39696397114401794 a=hat,b=hat,i=3628,x=0.12300146024961678,y=0.7010677704464917 a=zee,b=zee,i=3629,x=0.1203621553000902,y=0.03649730823892894 a=eks,b=pan,i=3630,x=0.6432472290390947,y=0.6493064608702905 a=wye,b=zee,i=3631,x=0.5501609784896981,y=0.5442209389820327 a=hat,b=zee,i=3632,x=0.9887195745001507,y=0.8462799528384646 a=zee,b=wye,i=3633,x=0.05961380658144755,y=0.41153390509403887 a=wye,b=pan,i=3634,x=0.779500491235004,y=0.5677694423637825 a=pan,b=pan,i=3635,x=0.8517678780538765,y=0.37570897363715816 a=zee,b=zee,i=3636,x=0.3540502081666034,y=0.7557010012298948 a=eks,b=pan,i=3637,x=0.5208357640093749,y=0.5659221306135821 a=hat,b=pan,i=3638,x=0.7845171840273204,y=0.3502193918421451 a=hat,b=pan,i=3639,x=0.31221536384885895,y=0.8777925678653494 a=wye,b=wye,i=3640,x=0.3117811337270454,y=0.6199259533630647 a=zee,b=wye,i=3641,x=0.34634768849647446,y=0.1722807458856409 a=eks,b=zee,i=3642,x=0.04372051184301495,y=0.7131048031620709 a=hat,b=eks,i=3643,x=0.39531406696346205,y=0.7072916873720192 a=wye,b=hat,i=3644,x=0.5912661057148787,y=0.49271215252480305 a=zee,b=pan,i=3645,x=0.3353629361519648,y=0.27452402896726324 a=zee,b=wye,i=3646,x=0.4302250977906721,y=0.9570565709617685 a=pan,b=eks,i=3647,x=0.8754763901824134,y=0.4440861211150172 a=pan,b=pan,i=3648,x=0.9502862550981916,y=0.9040781097596586 a=wye,b=pan,i=3649,x=0.07083776693984412,y=0.42161605810186464 a=hat,b=wye,i=3650,x=0.027750870484755663,y=0.059142569848676385 a=hat,b=zee,i=3651,x=0.7388454792523287,y=0.6889713924377876 a=hat,b=hat,i=3652,x=0.12134854954936014,y=0.12339998428589616 a=pan,b=pan,i=3653,x=0.42035180771481173,y=0.872087852987371 a=pan,b=pan,i=3654,x=0.741537059135207,y=0.9230584052244919 a=eks,b=hat,i=3655,x=0.1316863843779006,y=0.4213001572015598 a=hat,b=eks,i=3656,x=0.14075093892206003,y=0.21208162198013836 a=eks,b=wye,i=3657,x=0.8011409482794655,y=0.017450835880964632 a=hat,b=eks,i=3658,x=0.8537796341502905,y=0.5982760622218769 a=pan,b=hat,i=3659,x=0.09110243804094742,y=0.35916077607118146 a=wye,b=zee,i=3660,x=0.9000633600969007,y=0.2868625781042997 a=zee,b=hat,i=3661,x=0.32611268243475844,y=0.12873678851672 a=hat,b=zee,i=3662,x=0.7673614981915601,y=0.7295742505814344 a=zee,b=zee,i=3663,x=0.913522524093555,y=0.4340116921500242 a=eks,b=eks,i=3664,x=0.28693486076576824,y=0.19397030458410913 a=zee,b=zee,i=3665,x=0.3813728809412974,y=0.8915253351559728 a=hat,b=wye,i=3666,x=0.7295635205285994,y=0.6119784896875866 a=wye,b=pan,i=3667,x=0.41467178462553234,y=0.8608278645584995 a=zee,b=eks,i=3668,x=0.5993837930923437,y=0.7509474480036791 a=eks,b=eks,i=3669,x=0.9355633368933711,y=0.9694655041497229 a=zee,b=pan,i=3670,x=0.4986606323353615,y=0.3252967314272578 a=hat,b=zee,i=3671,x=0.9851663975549066,y=0.7574307817453141 a=wye,b=eks,i=3672,x=0.8646473696955588,y=0.8313013386958765 a=pan,b=wye,i=3673,x=0.2515908234672535,y=0.056725699540206675 a=eks,b=eks,i=3674,x=0.3536670370401426,y=0.3355576484883924 a=hat,b=eks,i=3675,x=0.0929703970918907,y=0.7140596291048347 a=eks,b=pan,i=3676,x=0.8723087423163797,y=0.6109859185908899 a=wye,b=pan,i=3677,x=0.3996143053161535,y=0.8616939694819011 a=zee,b=pan,i=3678,x=0.8491710196926309,y=0.6558159307696828 a=wye,b=pan,i=3679,x=0.20307168892773197,y=0.7086180793037447 a=wye,b=zee,i=3680,x=0.7425818200196079,y=0.9810014583943923 a=wye,b=wye,i=3681,x=0.02721573926299492,y=0.07804891308055895 a=eks,b=zee,i=3682,x=0.39124881803949274,y=0.9059680205710228 a=pan,b=eks,i=3683,x=0.11128670399371465,y=0.6228832493398745 a=zee,b=eks,i=3684,x=0.5257462041656636,y=0.23566322936666084 a=zee,b=eks,i=3685,x=0.7398298697417746,y=0.4194935104256209 a=hat,b=pan,i=3686,x=0.9301169302245861,y=0.7982783216031746 a=hat,b=hat,i=3687,x=0.24482997045240362,y=0.8750823381392218 a=zee,b=hat,i=3688,x=0.5723630888086361,y=0.8172243896570902 a=hat,b=wye,i=3689,x=0.8355718873799872,y=0.8007108863141698 a=wye,b=hat,i=3690,x=0.3502150576320706,y=0.9931617687282244 a=eks,b=pan,i=3691,x=0.1796260215186376,y=0.9607252375862692 a=zee,b=hat,i=3692,x=0.573338911032452,y=0.5241388333942388 a=hat,b=pan,i=3693,x=0.7781206646766762,y=0.5080484241731826 a=hat,b=zee,i=3694,x=0.33067301800352,y=0.7754516395280142 a=pan,b=eks,i=3695,x=0.4992904970087908,y=0.742643746741839 a=eks,b=wye,i=3696,x=0.9448270882170847,y=0.4103666781094296 a=wye,b=zee,i=3697,x=0.522725396720144,y=0.18925111602486566 a=pan,b=eks,i=3698,x=0.02978537252653579,y=0.5654493110146563 a=hat,b=hat,i=3699,x=0.2902217497914289,y=0.6770102706214468 a=wye,b=wye,i=3700,x=0.9046703649949718,y=0.7600607720698596 a=pan,b=hat,i=3701,x=0.7653688084959293,y=0.9589886741282106 a=hat,b=zee,i=3702,x=0.31427641268831985,y=0.7319186674523148 a=hat,b=eks,i=3703,x=0.04581508270551782,y=0.7555154492651157 a=zee,b=eks,i=3704,x=0.6944927784356837,y=0.6778190994819128 a=wye,b=wye,i=3705,x=0.40469824814249367,y=0.8841785778563369 a=eks,b=zee,i=3706,x=0.28192270569849476,y=0.3669079489151894 a=wye,b=hat,i=3707,x=0.32172668895407197,y=0.23641326221038772 a=pan,b=zee,i=3708,x=0.9367338792831362,y=0.4695354410183338 a=eks,b=wye,i=3709,x=0.5793435558579774,y=0.5284203604486059 a=pan,b=zee,i=3710,x=0.8358876467213303,y=0.010883794663985147 a=wye,b=hat,i=3711,x=0.7062248515236889,y=0.7592554719549557 a=eks,b=hat,i=3712,x=0.20158466043698664,y=0.2506153993203297 a=hat,b=zee,i=3713,x=0.5453918537789201,y=0.9591221613154766 a=pan,b=wye,i=3714,x=0.7007443629312707,y=0.69979486340907 a=hat,b=zee,i=3715,x=0.4982158038764617,y=0.1845463889797414 a=pan,b=wye,i=3716,x=0.7794631862118141,y=0.38174400926867047 a=wye,b=zee,i=3717,x=0.20372686286113306,y=0.48178229369817827 a=pan,b=pan,i=3718,x=0.6978201901277095,y=0.029333538689990557 a=eks,b=pan,i=3719,x=0.4534387451777433,y=0.22731879465386806 a=hat,b=hat,i=3720,x=0.9601728250087456,y=0.25178938182476607 a=eks,b=eks,i=3721,x=0.8929949309089861,y=0.2753211862235905 a=pan,b=wye,i=3722,x=0.9375469687103644,y=0.3374245074403295 a=wye,b=wye,i=3723,x=0.47515921315887333,y=0.9657952342754725 a=wye,b=eks,i=3724,x=0.7362078619104057,y=0.10855543465047734 a=zee,b=zee,i=3725,x=0.15221580400712498,y=0.5846857209085365 a=hat,b=eks,i=3726,x=0.7864690866743678,y=0.023450973928021757 a=hat,b=eks,i=3727,x=0.02778608789107495,y=0.19112025359038776 a=eks,b=hat,i=3728,x=0.5830906923999751,y=0.1825999304288003 a=pan,b=wye,i=3729,x=0.6339377797999709,y=0.7940228471998122 a=hat,b=wye,i=3730,x=0.9186140626854419,y=0.4158937617414502 a=hat,b=hat,i=3731,x=0.03433461671749849,y=0.37009846068918584 a=wye,b=wye,i=3732,x=0.24997685932838876,y=0.7647954464137104 a=wye,b=wye,i=3733,x=0.19073435311282794,y=0.705275429721041 a=wye,b=pan,i=3734,x=0.5747797481156508,y=0.8274654836314349 a=zee,b=hat,i=3735,x=0.20101546519059987,y=0.9017936214420659 a=eks,b=eks,i=3736,x=0.8706261619141413,y=0.5428739515744351 a=wye,b=pan,i=3737,x=0.5574876609423702,y=0.8504937121138577 a=pan,b=wye,i=3738,x=0.5390690548412024,y=0.3716168991158759 a=wye,b=hat,i=3739,x=0.971775360771065,y=0.3319565969194058 a=zee,b=pan,i=3740,x=0.9333817720718712,y=0.4371222668297464 a=zee,b=pan,i=3741,x=0.9571682809413955,y=0.6570144668674751 a=pan,b=zee,i=3742,x=0.05182394212116692,y=0.8208128933987844 a=eks,b=pan,i=3743,x=0.4905151151584467,y=0.320903002068355 a=wye,b=zee,i=3744,x=0.7710752122842248,y=0.6182369915664692 a=zee,b=pan,i=3745,x=0.0634219140814758,y=0.0909389524119274 a=pan,b=hat,i=3746,x=0.016317522611819957,y=0.4500858677522094 a=hat,b=hat,i=3747,x=0.2731453345797118,y=0.3612727190378229 a=zee,b=zee,i=3748,x=0.7692098314967419,y=0.723183352513404 a=pan,b=eks,i=3749,x=0.6600164034317578,y=0.22789566978678333 a=zee,b=zee,i=3750,x=0.4584069341764643,y=0.6052673722009491 a=pan,b=zee,i=3751,x=0.1376132992218041,y=0.5327305744083769 a=hat,b=pan,i=3752,x=0.27781099183901203,y=0.24166942932110203 a=eks,b=eks,i=3753,x=0.9130333710330752,y=0.9434343087469547 a=pan,b=hat,i=3754,x=0.39530750680824867,y=0.285187450605236 a=wye,b=zee,i=3755,x=0.5821904936762373,y=0.9440238426951152 a=eks,b=eks,i=3756,x=0.3151274913498434,y=0.2613270252067468 a=wye,b=zee,i=3757,x=0.27126594951001737,y=0.2696036535766695 a=pan,b=zee,i=3758,x=0.1144851508437299,y=0.43717693060689256 a=wye,b=wye,i=3759,x=0.8659325090962396,y=0.500920016668498 a=wye,b=zee,i=3760,x=0.14033050146326476,y=0.7853558549084289 a=pan,b=pan,i=3761,x=0.6277167190080807,y=0.820462327799342 a=zee,b=zee,i=3762,x=0.40740521496915294,y=0.5027677314620422 a=hat,b=eks,i=3763,x=0.702517766279011,y=0.5201760035681132 a=hat,b=pan,i=3764,x=0.9684950471794708,y=0.9824729038297494 a=pan,b=pan,i=3765,x=0.7505504157884441,y=0.5688693727587826 a=hat,b=zee,i=3766,x=0.3053846255939139,y=0.29250711868083323 a=pan,b=hat,i=3767,x=0.07270094398967542,y=0.819707679427309 a=pan,b=wye,i=3768,x=0.39157640275144845,y=0.29940355516568284 a=wye,b=hat,i=3769,x=0.2813634801023107,y=0.33793045381955156 a=wye,b=zee,i=3770,x=0.3006731850375737,y=0.41117593228974025 a=eks,b=zee,i=3771,x=0.8966388980866674,y=0.6767775863177413 a=zee,b=eks,i=3772,x=0.09712051675224176,y=0.1992258338913524 a=wye,b=hat,i=3773,x=0.05484010565512498,y=0.6891554266059904 a=eks,b=eks,i=3774,x=0.10098411790939343,y=0.23016371716573425 a=zee,b=hat,i=3775,x=0.7941735867493203,y=0.2594788677041825 a=zee,b=zee,i=3776,x=0.9683966232439434,y=0.25528882348504156 a=wye,b=eks,i=3777,x=0.5229176412769544,y=0.8857285221477562 a=eks,b=pan,i=3778,x=0.5543756678908779,y=0.8979653327985948 a=zee,b=eks,i=3779,x=0.692670964675647,y=0.43868001633055353 a=eks,b=pan,i=3780,x=0.6536521341657655,y=0.6026553230815477 a=hat,b=eks,i=3781,x=0.22056344697345842,y=0.16263581703146368 a=hat,b=wye,i=3782,x=0.9802208332262505,y=0.42156225597643915 a=hat,b=wye,i=3783,x=0.5246681466694276,y=0.3988002197517633 a=wye,b=eks,i=3784,x=0.2896043360112557,y=0.03933436470492446 a=pan,b=zee,i=3785,x=0.6699335151046618,y=0.1867082955540268 a=zee,b=zee,i=3786,x=0.0022910915202805082,y=0.8679336791294139 a=zee,b=hat,i=3787,x=0.11351579052401195,y=0.5365315180789991 a=pan,b=wye,i=3788,x=0.41697687514270476,y=0.3863350720666795 a=eks,b=pan,i=3789,x=0.2647880014677908,y=0.495992120309258 a=pan,b=wye,i=3790,x=0.4871902945382671,y=0.22753844996371497 a=zee,b=wye,i=3791,x=0.9587582682512387,y=0.9041552661112677 a=pan,b=eks,i=3792,x=0.8303342159408211,y=0.7063245550219001 a=pan,b=eks,i=3793,x=0.43293237945019947,y=0.26733489278694356 a=zee,b=wye,i=3794,x=0.8976337510372844,y=0.8750629709298201 a=hat,b=pan,i=3795,x=0.8432372103239337,y=0.9510111805966026 a=eks,b=hat,i=3796,x=0.823953148854179,y=0.3020905534872981 a=zee,b=wye,i=3797,x=0.6303527344509033,y=0.17531824895427106 a=zee,b=pan,i=3798,x=0.9979923700274865,y=0.6588578150120853 a=pan,b=zee,i=3799,x=0.03921193583035787,y=0.7303677603577615 a=hat,b=eks,i=3800,x=0.6540911583411234,y=0.6156768180814669 a=eks,b=zee,i=3801,x=0.41291944190449625,y=0.04630035513500563 a=pan,b=eks,i=3802,x=0.21101198189616388,y=0.6878498019067313 a=zee,b=pan,i=3803,x=0.6938862506507568,y=0.09123194788888433 a=hat,b=zee,i=3804,x=0.13831455085494204,y=0.6878495274227865 a=hat,b=hat,i=3805,x=0.9077137203924546,y=0.6604195772537097 a=zee,b=pan,i=3806,x=0.4130639175002534,y=0.4140992672289935 a=hat,b=zee,i=3807,x=0.5264705799180144,y=0.05933317807985761 a=eks,b=pan,i=3808,x=0.18073645069225752,y=0.47471602068305085 a=hat,b=eks,i=3809,x=0.07620205058855944,y=0.41909302154687966 a=hat,b=zee,i=3810,x=0.9274217320420701,y=0.23200196179581423 a=wye,b=wye,i=3811,x=0.9262768212215141,y=0.583254627467812 a=eks,b=eks,i=3812,x=0.5738580742119982,y=0.22201053907217239 a=hat,b=zee,i=3813,x=0.8381595697055793,y=0.8082122321715743 a=hat,b=pan,i=3814,x=0.3227628236617065,y=0.09200255049758854 a=zee,b=pan,i=3815,x=0.5420566318553253,y=0.24311173211623627 a=pan,b=zee,i=3816,x=0.0679585117420517,y=0.9334969672578366 a=wye,b=pan,i=3817,x=0.21834728153634142,y=0.009580087519049041 a=wye,b=pan,i=3818,x=0.6892726476500824,y=0.328130518469796 a=wye,b=zee,i=3819,x=0.6612561643616807,y=0.647643437411651 a=zee,b=hat,i=3820,x=0.030987943391648676,y=0.6485266624267947 a=pan,b=pan,i=3821,x=0.09753442464986295,y=0.3452736158284476 a=eks,b=wye,i=3822,x=0.23064104633743454,y=0.6206626510995845 a=hat,b=wye,i=3823,x=0.0660248906480213,y=0.4768167157060277 a=zee,b=hat,i=3824,x=0.07286963812865666,y=0.9841111028377353 a=wye,b=wye,i=3825,x=0.7412307338094147,y=0.8357569402941348 a=pan,b=zee,i=3826,x=0.8700896084310135,y=0.7743947935823393 a=wye,b=hat,i=3827,x=0.5505247366282321,y=0.4487041560677363 a=hat,b=hat,i=3828,x=0.4439300237744592,y=0.3540302359317383 a=zee,b=eks,i=3829,x=0.8461894479274499,y=0.1091063374403779 a=wye,b=hat,i=3830,x=0.31602199194810077,y=0.23756301234064214 a=eks,b=eks,i=3831,x=0.4588783903640905,y=0.822431348022218 a=wye,b=pan,i=3832,x=0.3154044653633482,y=0.6954789197372386 a=pan,b=eks,i=3833,x=0.9435147604130275,y=0.6343874692425551 a=pan,b=hat,i=3834,x=0.7491688531360436,y=0.6632149460503455 a=eks,b=zee,i=3835,x=0.7084199117993816,y=0.23836696302687854 a=wye,b=pan,i=3836,x=0.5783001097508949,y=0.5326591809573153 a=pan,b=zee,i=3837,x=0.007599613269725358,y=0.5985657848153627 a=wye,b=eks,i=3838,x=0.16276307163297787,y=0.4480412721243018 a=hat,b=pan,i=3839,x=0.04332885941703746,y=0.6974767645258779 a=pan,b=hat,i=3840,x=0.6308501275600921,y=0.15448447296698842 a=wye,b=wye,i=3841,x=0.7854392875246197,y=0.7264036810522736 a=zee,b=wye,i=3842,x=0.9500031218945214,y=0.9557435110983296 a=hat,b=eks,i=3843,x=0.8979324823898589,y=0.22043224466362787 a=zee,b=eks,i=3844,x=0.5533769309499299,y=0.4231610222317168 a=eks,b=hat,i=3845,x=0.956021508845704,y=0.05912536350688913 a=pan,b=zee,i=3846,x=0.12083257325362673,y=0.6880217459012083 a=eks,b=pan,i=3847,x=0.9538690048763792,y=0.018466194565513683 a=wye,b=eks,i=3848,x=0.6500527955774431,y=0.023909990362617428 a=wye,b=eks,i=3849,x=0.7149976391333995,y=0.9748913470930238 a=zee,b=eks,i=3850,x=0.7036643435758647,y=0.29910186188725063 a=eks,b=zee,i=3851,x=0.6884645549243478,y=0.6729540888918134 a=wye,b=wye,i=3852,x=0.16575767054134194,y=0.3519742254585112 a=zee,b=pan,i=3853,x=0.16807480611879477,y=0.6916258245977434 a=zee,b=eks,i=3854,x=0.9118453703518822,y=0.4970364912618278 a=eks,b=wye,i=3855,x=0.7041409587449016,y=0.21248706433820264 a=pan,b=zee,i=3856,x=0.7166199842938143,y=0.5985908973683398 a=eks,b=pan,i=3857,x=0.911885736627155,y=0.7775693985993537 a=pan,b=pan,i=3858,x=0.2655493421352306,y=0.5008269003029236 a=eks,b=eks,i=3859,x=0.23564525774209633,y=0.6200721762867689 a=eks,b=pan,i=3860,x=0.16404594209083445,y=0.2945650928508321 a=hat,b=zee,i=3861,x=0.5532707570794401,y=0.3218958838799141 a=wye,b=eks,i=3862,x=0.845977895190702,y=0.2105916632815279 a=pan,b=wye,i=3863,x=0.8914098448143842,y=0.941827688174933 a=wye,b=pan,i=3864,x=0.40887317017480806,y=0.9211253311538701 a=eks,b=pan,i=3865,x=0.6410821318604495,y=0.742344518102107 a=eks,b=eks,i=3866,x=0.8820740686865273,y=0.6336399556322359 a=zee,b=zee,i=3867,x=0.9124099806717596,y=0.10039063827592765 a=pan,b=pan,i=3868,x=0.5708876065677694,y=0.6788408195369369 a=pan,b=hat,i=3869,x=0.5531285064534339,y=0.014934021539296571 a=hat,b=zee,i=3870,x=0.40688870301241575,y=0.4640784108862729 a=eks,b=hat,i=3871,x=0.576479904048506,y=0.31414898223457755 a=wye,b=wye,i=3872,x=0.47105100438757685,y=0.05894343228765331 a=wye,b=hat,i=3873,x=0.08895748908550638,y=0.7503852698192701 a=zee,b=wye,i=3874,x=0.36954687122878715,y=0.07524269626487912 a=pan,b=zee,i=3875,x=0.8656993436002198,y=0.7910484890727197 a=wye,b=wye,i=3876,x=0.03808754965335226,y=0.08658971281465833 a=pan,b=zee,i=3877,x=0.09904785925240933,y=0.6676400108509978 a=eks,b=eks,i=3878,x=0.0506506132923914,y=0.7242690651435119 a=hat,b=eks,i=3879,x=0.03588331465146932,y=0.7484282721818893 a=hat,b=hat,i=3880,x=0.4235813324669898,y=0.24387827945280804 a=hat,b=hat,i=3881,x=0.7822034723161025,y=0.7478339704565765 a=hat,b=eks,i=3882,x=0.011719496883464853,y=0.24640876061080674 a=eks,b=hat,i=3883,x=0.4614594041430371,y=0.3205017019419516 a=wye,b=wye,i=3884,x=0.9807726374776462,y=0.16883444992338326 a=wye,b=zee,i=3885,x=0.31672532313467505,y=0.2365343741445356 a=hat,b=pan,i=3886,x=0.18873324663018243,y=0.7292335881068795 a=pan,b=hat,i=3887,x=0.030126862485056027,y=0.7407216218234761 a=eks,b=wye,i=3888,x=0.21823480875880663,y=0.6891953143456548 a=zee,b=wye,i=3889,x=0.039039225578129,y=0.043618607590064085 a=wye,b=eks,i=3890,x=0.1974840445022984,y=0.43475405724957294 a=pan,b=eks,i=3891,x=0.9382818311518488,y=0.9030005498802104 a=pan,b=zee,i=3892,x=0.27112454369214156,y=0.8859937112495071 a=eks,b=eks,i=3893,x=0.4046249389793575,y=0.21056190964042465 a=wye,b=zee,i=3894,x=0.7443136068289423,y=0.8294047544954046 a=hat,b=hat,i=3895,x=0.4564412341948818,y=0.7759614897360431 a=hat,b=wye,i=3896,x=0.04335080026755522,y=0.9820438391823961 a=hat,b=pan,i=3897,x=0.49376649897367464,y=0.13401013066245737 a=eks,b=pan,i=3898,x=0.6998124732144403,y=0.3446237971866837 a=eks,b=wye,i=3899,x=0.1432600644239883,y=0.7912100443742818 a=pan,b=hat,i=3900,x=0.8799773683889426,y=0.5220746421238783 a=wye,b=zee,i=3901,x=0.8739801518514984,y=0.13243512076702868 a=zee,b=eks,i=3902,x=0.8645468539063139,y=0.9700412096469742 a=hat,b=hat,i=3903,x=0.6603175490464367,y=0.7332253490191969 a=wye,b=hat,i=3904,x=0.2808463214358832,y=0.6400325080698059 a=hat,b=hat,i=3905,x=0.37058852723699554,y=0.10112929497538448 a=hat,b=pan,i=3906,x=0.18587769312561342,y=0.5877405963198684 a=hat,b=hat,i=3907,x=0.5156840561144312,y=0.48828123151684966 a=hat,b=hat,i=3908,x=0.011436139295365133,y=0.698305213173947 a=eks,b=zee,i=3909,x=0.8701294324647131,y=0.6010009857684786 a=eks,b=pan,i=3910,x=0.7754775924406334,y=0.9607498923245504 a=zee,b=zee,i=3911,x=0.10611443109176355,y=0.9500980959450185 a=eks,b=hat,i=3912,x=0.40688370124160333,y=0.3725099736322035 a=eks,b=pan,i=3913,x=0.7572616191019003,y=0.009426657564762575 a=zee,b=pan,i=3914,x=0.568449276718281,y=0.44428728066132994 a=hat,b=zee,i=3915,x=0.4715771685615844,y=0.679035167069352 a=pan,b=hat,i=3916,x=0.10385472378813976,y=0.8696276556798485 a=zee,b=eks,i=3917,x=0.4610838052133647,y=0.5166912532440093 a=eks,b=wye,i=3918,x=0.3468839319991631,y=0.7460608153868107 a=hat,b=hat,i=3919,x=0.20968623039533885,y=0.2249710535207634 a=eks,b=wye,i=3920,x=0.06633524516092837,y=0.21897455790581 a=zee,b=hat,i=3921,x=0.24462442594768674,y=0.7825101030749122 a=eks,b=pan,i=3922,x=0.09303768776585819,y=0.9097350521192294 a=pan,b=zee,i=3923,x=0.7828038174006502,y=0.40187653591870354 a=eks,b=wye,i=3924,x=0.24552287892234603,y=0.8709339930853457 a=wye,b=eks,i=3925,x=0.9444615936887226,y=0.5492757409492689 a=pan,b=eks,i=3926,x=0.2577383831501502,y=0.42247048365748696 a=hat,b=pan,i=3927,x=0.2961162902664337,y=0.5026763086626909 a=hat,b=pan,i=3928,x=0.3294192690721903,y=0.0018064795955691215 a=pan,b=wye,i=3929,x=0.5373694134669578,y=0.6408298650436733 a=wye,b=zee,i=3930,x=0.3772473940400355,y=0.4855477755417952 a=pan,b=hat,i=3931,x=0.8947844528349447,y=0.6976181039979583 a=wye,b=eks,i=3932,x=0.902042488611117,y=0.8695780909283909 a=zee,b=eks,i=3933,x=0.9377651072146025,y=0.49393343661090683 a=wye,b=wye,i=3934,x=0.8890179128922202,y=0.036534071445648686 a=eks,b=wye,i=3935,x=0.8719220728834155,y=0.626436829723036 a=zee,b=zee,i=3936,x=0.2789666429898331,y=0.7718880254003965 a=wye,b=zee,i=3937,x=0.8620266789446326,y=0.133104948798772 a=wye,b=wye,i=3938,x=0.4264030481171944,y=0.2469737981294069 a=zee,b=pan,i=3939,x=0.9776442331945898,y=0.4655162963934556 a=pan,b=hat,i=3940,x=0.37339956142433084,y=0.23248823182301037 a=eks,b=hat,i=3941,x=0.8182766432429959,y=0.2282730594932706 a=eks,b=zee,i=3942,x=0.7678757943544514,y=0.9693217394374674 a=wye,b=hat,i=3943,x=0.29550708533363845,y=0.16362618484177738 a=zee,b=wye,i=3944,x=0.9305603171944418,y=0.2631848553023146 a=zee,b=eks,i=3945,x=0.9502316772099553,y=0.19036371662120233 a=wye,b=eks,i=3946,x=0.8350585462480241,y=0.7491629688087337 a=wye,b=zee,i=3947,x=0.8226133287365867,y=0.2794421547836373 a=wye,b=wye,i=3948,x=0.02572471641992602,y=0.6920862746683303 a=wye,b=zee,i=3949,x=0.3676627709059406,y=0.3957927902894449 a=zee,b=pan,i=3950,x=0.32474388588887126,y=0.02474711989630063 a=pan,b=eks,i=3951,x=0.7409946857015619,y=0.19548589834215446 a=hat,b=wye,i=3952,x=0.6350102710290926,y=0.2620857765590283 a=zee,b=eks,i=3953,x=0.30922267009534077,y=0.3284230853853207 a=hat,b=pan,i=3954,x=0.052368455214725995,y=0.4715978875853839 a=eks,b=zee,i=3955,x=0.5312946172484967,y=0.12098565859835453 a=zee,b=eks,i=3956,x=0.1849505395742288,y=0.6971047278578605 a=pan,b=eks,i=3957,x=0.6165622172072422,y=0.37237191581951723 a=hat,b=zee,i=3958,x=0.07310839831115146,y=0.32925431162438823 a=pan,b=hat,i=3959,x=0.1292574457299427,y=0.3582879075778822 a=pan,b=zee,i=3960,x=0.19211441013639674,y=0.11950330832710931 a=wye,b=hat,i=3961,x=0.6511854877418017,y=0.4589218300880824 a=eks,b=hat,i=3962,x=0.9657235616300794,y=0.05144636955135773 a=hat,b=pan,i=3963,x=0.2775863198412192,y=0.7891255209818445 a=wye,b=eks,i=3964,x=0.9210830069555165,y=0.5838970142942722 a=zee,b=wye,i=3965,x=0.23984259901508576,y=0.26442599713920145 a=hat,b=eks,i=3966,x=0.23733058400187923,y=0.7016365873249447 a=zee,b=wye,i=3967,x=0.9985449436152721,y=0.7330838738578122 a=eks,b=wye,i=3968,x=0.015400799144512867,y=0.6014606839935781 a=zee,b=hat,i=3969,x=0.6861552175518395,y=0.46267309304633597 a=wye,b=zee,i=3970,x=0.3424738374943377,y=0.6234959936497562 a=hat,b=pan,i=3971,x=0.47236749903854525,y=0.49755810812875845 a=pan,b=wye,i=3972,x=0.06499356218753538,y=0.5661193015342019 a=pan,b=hat,i=3973,x=0.39627283237990996,y=0.6628720545942175 a=hat,b=hat,i=3974,x=0.2255823178745917,y=0.3328848639919585 a=zee,b=pan,i=3975,x=0.41021697311932137,y=0.5253220869630462 a=eks,b=eks,i=3976,x=0.3872364913819858,y=0.12628018436476995 a=zee,b=wye,i=3977,x=0.640238580570024,y=0.41378547967160495 a=eks,b=zee,i=3978,x=0.10057250053848688,y=0.6832812035658576 a=eks,b=wye,i=3979,x=0.05509300519176841,y=0.3449069313995392 a=eks,b=wye,i=3980,x=0.17739908838951735,y=0.6189549035709109 a=eks,b=pan,i=3981,x=0.798588528905017,y=0.7451168881460923 a=wye,b=eks,i=3982,x=0.7480880614402182,y=0.8419207681331152 a=wye,b=zee,i=3983,x=0.8362240426090267,y=0.77769018412775 a=hat,b=wye,i=3984,x=0.020984581151031745,y=0.9379819495871566 a=zee,b=eks,i=3985,x=0.05962271913450001,y=0.8797820678732818 a=pan,b=zee,i=3986,x=0.4205297371360823,y=0.9963268123973551 a=eks,b=hat,i=3987,x=0.3908629932350629,y=0.5854417332644798 a=zee,b=zee,i=3988,x=0.7335921993524305,y=0.5879895671878599 a=wye,b=zee,i=3989,x=0.2700024864980135,y=0.8437375152003208 a=wye,b=pan,i=3990,x=0.2551633201471506,y=0.4633660311722343 a=pan,b=zee,i=3991,x=0.07557797117002352,y=0.03446642347570361 a=zee,b=eks,i=3992,x=0.7507600776739561,y=0.6732032182262292 a=hat,b=zee,i=3993,x=0.08221997898229427,y=0.21489690844146592 a=zee,b=eks,i=3994,x=0.2399390749091379,y=0.8600537400054703 a=hat,b=eks,i=3995,x=0.6854597775410988,y=0.6047357220116547 a=pan,b=hat,i=3996,x=0.4669100032261838,y=0.48298621327550606 a=eks,b=hat,i=3997,x=0.8201134204882613,y=0.5748852394805374 a=zee,b=eks,i=3998,x=0.39329877289726367,y=0.8779820074659457 a=pan,b=pan,i=3999,x=0.1966197290195203,y=0.539503732197533 a=pan,b=wye,i=4000,x=0.7030828102156571,y=0.12232197500884245 a=wye,b=hat,i=4001,x=0.8174301789619988,y=0.9053657573378745 a=eks,b=wye,i=4002,x=0.3850636313361996,y=0.552180695877821 a=eks,b=hat,i=4003,x=0.6772262101934939,y=0.12567047648579976 a=wye,b=pan,i=4004,x=0.7607827500015804,y=0.6235619294990873 a=zee,b=zee,i=4005,x=0.6393382677423634,y=0.026928024799432126 a=zee,b=hat,i=4006,x=0.48789661545234886,y=0.21227412408894908 a=pan,b=wye,i=4007,x=0.5905532262814199,y=0.03346277389076979 a=eks,b=hat,i=4008,x=0.890243383339597,y=0.7267223805200799 a=hat,b=pan,i=4009,x=0.5706952995715363,y=0.9230695483570237 a=zee,b=hat,i=4010,x=0.42440597576906447,y=0.0704425276034597 a=hat,b=wye,i=4011,x=0.24251335510099137,y=0.23960695465439596 a=zee,b=pan,i=4012,x=0.5455876516440495,y=0.4916025226658389 a=eks,b=pan,i=4013,x=0.8704264127290353,y=0.5876599831119824 a=hat,b=pan,i=4014,x=0.31319409877544535,y=0.37600379424562247 a=pan,b=hat,i=4015,x=0.6791412275551999,y=0.8868908402993898 a=pan,b=eks,i=4016,x=0.8587762124701115,y=0.7327173343378633 a=zee,b=eks,i=4017,x=0.3047836325798219,y=0.7894212582792598 a=hat,b=pan,i=4018,x=0.3048776737346697,y=0.13707959214248555 a=zee,b=zee,i=4019,x=0.32116201777416775,y=0.6159942228124887 a=hat,b=pan,i=4020,x=0.0435632469106455,y=0.8600282250289863 a=zee,b=hat,i=4021,x=0.3130407621764443,y=0.2693181610377101 a=wye,b=zee,i=4022,x=0.40301649786733384,y=0.9524000685947437 a=pan,b=pan,i=4023,x=0.10367305449954967,y=0.022130374916290774 a=pan,b=zee,i=4024,x=0.2180038149057033,y=0.2890891058720141 a=hat,b=wye,i=4025,x=0.6365723951389777,y=0.7003325245087676 a=zee,b=zee,i=4026,x=0.9441858479531559,y=0.3388368972590644 a=wye,b=hat,i=4027,x=0.4037114359444258,y=0.90743641296412 a=hat,b=eks,i=4028,x=0.20788010249626498,y=0.6884626872862553 a=wye,b=pan,i=4029,x=0.3428961154684751,y=0.8868244204307322 a=zee,b=eks,i=4030,x=0.3317839760740481,y=0.4161099049929635 a=pan,b=eks,i=4031,x=0.09704619121471669,y=0.0779275379233505 a=wye,b=wye,i=4032,x=0.2974124725329491,y=0.20863438296756043 a=wye,b=pan,i=4033,x=0.44164928623031885,y=0.3935479870985933 a=zee,b=pan,i=4034,x=0.407013802751526,y=0.7638222768155006 a=hat,b=hat,i=4035,x=0.5832281654804606,y=0.30161246333228053 a=hat,b=pan,i=4036,x=0.3630052335487458,y=0.1756001401202808 a=pan,b=wye,i=4037,x=0.40101967210862355,y=0.21622386613658062 a=zee,b=eks,i=4038,x=0.31593174924868916,y=0.30590560916984444 a=pan,b=eks,i=4039,x=0.053167065399378544,y=0.9320171029412466 a=hat,b=zee,i=4040,x=0.9955496827175224,y=0.48098153603493243 a=wye,b=eks,i=4041,x=0.6663441339123051,y=0.8594459082303051 a=pan,b=wye,i=4042,x=0.1587273385461524,y=0.6669257024952429 a=eks,b=zee,i=4043,x=0.28076996721337844,y=0.7010179301082176 a=zee,b=wye,i=4044,x=0.4445193542875734,y=0.10451265229731932 a=eks,b=zee,i=4045,x=0.7400078317069471,y=0.6537027971576772 a=zee,b=zee,i=4046,x=0.6525804691103836,y=0.2545220514360603 a=wye,b=wye,i=4047,x=0.5414929203702645,y=0.4539331132426315 a=pan,b=hat,i=4048,x=0.26401325806452103,y=0.5055541652981963 a=zee,b=wye,i=4049,x=0.3865785757267529,y=0.3257613178120228 a=zee,b=pan,i=4050,x=0.22133212632288612,y=0.46497223755296413 a=wye,b=pan,i=4051,x=0.46330422466377885,y=0.0013216245762560641 a=eks,b=eks,i=4052,x=0.26951508961424153,y=0.8159189781286144 a=hat,b=zee,i=4053,x=0.8866052673521815,y=0.4046547094268781 a=eks,b=pan,i=4054,x=0.740840958021636,y=0.4460391910997835 a=hat,b=hat,i=4055,x=0.24697770493624438,y=0.612234746493852 a=eks,b=eks,i=4056,x=0.8643394873777513,y=0.9659257127064651 a=pan,b=pan,i=4057,x=0.3102888737344549,y=0.40268801525857945 a=zee,b=pan,i=4058,x=0.9750004025056389,y=0.30221484127549403 a=wye,b=eks,i=4059,x=0.5063318396525335,y=0.4417901089284284 a=pan,b=zee,i=4060,x=0.008052078028936815,y=0.8144830537845575 a=zee,b=zee,i=4061,x=0.5943115025128368,y=0.7926566656770357 a=eks,b=eks,i=4062,x=0.9875301794451499,y=0.7335426236266079 a=wye,b=zee,i=4063,x=0.8739281191211792,y=0.4835160480530071 a=wye,b=wye,i=4064,x=0.054986884076116516,y=0.9109000045675829 a=eks,b=pan,i=4065,x=0.9790714906563968,y=0.007030356364051138 a=eks,b=eks,i=4066,x=0.9312192725082208,y=0.4963799110654653 a=pan,b=pan,i=4067,x=0.5063639370311482,y=0.004264053556000236 a=eks,b=wye,i=4068,x=0.1524845394038703,y=0.8431776270630555 a=zee,b=wye,i=4069,x=0.969881192737605,y=0.7454405956242405 a=hat,b=eks,i=4070,x=0.18629806750635058,y=0.20897903127133244 a=hat,b=eks,i=4071,x=0.17058445050982152,y=0.6566712054825186 a=wye,b=hat,i=4072,x=0.5889180149165333,y=0.24917849958971638 a=pan,b=eks,i=4073,x=0.2657367745661936,y=0.2985150423046431 a=wye,b=pan,i=4074,x=0.7170683734519407,y=0.6616939907637078 a=hat,b=pan,i=4075,x=0.7741097521171826,y=0.5862044466287508 a=pan,b=eks,i=4076,x=0.6711827040032985,y=0.1902299755507466 a=hat,b=hat,i=4077,x=0.5011592202840128,y=0.4774266498958699 a=wye,b=hat,i=4078,x=0.45606720248652644,y=0.8123287155978273 a=zee,b=zee,i=4079,x=0.3760881437289524,y=0.8847359365393963 a=eks,b=zee,i=4080,x=0.6036589730049234,y=0.5196679309887058 a=eks,b=pan,i=4081,x=0.8636397669083807,y=0.39559043404091077 a=hat,b=hat,i=4082,x=0.5572557445251078,y=0.624066652987969 a=wye,b=wye,i=4083,x=0.8666445318722942,y=0.767288613574896 a=eks,b=zee,i=4084,x=0.5618487213544217,y=0.30293876669064146 a=wye,b=eks,i=4085,x=0.5272061090337726,y=0.9162627017806118 a=eks,b=wye,i=4086,x=0.3119331822264977,y=0.4703087590730718 a=wye,b=zee,i=4087,x=0.041369624776661396,y=0.1706574091421187 a=pan,b=eks,i=4088,x=0.6090012823832082,y=0.812489654491081 a=hat,b=pan,i=4089,x=0.6181818234320513,y=0.3456834903874286 a=wye,b=zee,i=4090,x=0.08760748700129917,y=0.046823223997924046 a=pan,b=pan,i=4091,x=0.9477496006595305,y=0.6877721274230629 a=pan,b=eks,i=4092,x=0.05823591729943611,y=0.2271541631902052 a=zee,b=wye,i=4093,x=0.5115949427264939,y=0.7463065447615764 a=hat,b=hat,i=4094,x=0.8294711965470426,y=0.5100796086516896 a=pan,b=wye,i=4095,x=0.002245348719915996,y=0.4758218988941505 a=zee,b=eks,i=4096,x=0.6921498725707808,y=0.11138574708230264 a=eks,b=zee,i=4097,x=0.5977012193299909,y=0.6349007809350186 a=wye,b=pan,i=4098,x=0.9826450383900536,y=0.1400761078947168 a=pan,b=wye,i=4099,x=0.8910882964590207,y=0.33701906973508144 a=wye,b=pan,i=4100,x=0.4194005326767647,y=0.5452164572329079 a=wye,b=wye,i=4101,x=0.9070001852862156,y=0.5366667269362855 a=pan,b=zee,i=4102,x=0.936276054438326,y=0.40450742681553564 a=wye,b=zee,i=4103,x=0.40338842748518,y=0.16714248436837198 a=pan,b=eks,i=4104,x=0.4763532787659751,y=0.6087591109968019 a=pan,b=wye,i=4105,x=0.16729489652734397,y=0.5307591339000314 a=wye,b=hat,i=4106,x=0.6762148011530986,y=0.7998537880048552 a=zee,b=wye,i=4107,x=0.1740567415346871,y=0.8534128359069896 a=eks,b=zee,i=4108,x=0.3415946367341153,y=0.19830581897594968 a=pan,b=hat,i=4109,x=0.06408072699727674,y=0.7782480536170286 a=eks,b=pan,i=4110,x=0.7201591775410024,y=0.9280174950278048 a=wye,b=hat,i=4111,x=0.27092702426036697,y=0.40264205326846036 a=wye,b=eks,i=4112,x=0.21549872173717677,y=0.7712851660284064 a=wye,b=eks,i=4113,x=0.9978834111387961,y=0.02729153021305819 a=wye,b=hat,i=4114,x=0.5672845724991237,y=0.8126100904189216 a=pan,b=eks,i=4115,x=0.14786482586108984,y=0.7088885498409112 a=eks,b=zee,i=4116,x=0.5374530235586998,y=0.1554131021415981 a=zee,b=wye,i=4117,x=0.973704237758867,y=0.2722193342177551 a=eks,b=zee,i=4118,x=0.44761492415732196,y=0.8962682037215072 a=wye,b=zee,i=4119,x=0.14069101423742136,y=0.3916394205657444 a=eks,b=hat,i=4120,x=0.7278136147317754,y=0.992128682834371 a=wye,b=eks,i=4121,x=0.3436640653132741,y=0.12875649374791853 a=pan,b=wye,i=4122,x=0.5589346838220178,y=0.4914922406604886 a=hat,b=zee,i=4123,x=0.11667168949423246,y=0.09343624851787202 a=zee,b=zee,i=4124,x=0.3762744289665654,y=0.4657534810646099 a=pan,b=zee,i=4125,x=0.8167559403831369,y=0.6726503484988995 a=zee,b=hat,i=4126,x=0.16302778730181566,y=0.2748655824617119 a=wye,b=wye,i=4127,x=0.7262693332963976,y=0.7800792471160094 a=wye,b=pan,i=4128,x=0.343037394179604,y=0.8198518248958258 a=zee,b=wye,i=4129,x=0.05680148699183385,y=0.6245423259174248 a=eks,b=wye,i=4130,x=0.8598238868873511,y=0.012220950836815403 a=pan,b=zee,i=4131,x=0.3675182883990802,y=0.8604415347784466 a=wye,b=zee,i=4132,x=0.14673501967206204,y=0.2171503552857429 a=wye,b=zee,i=4133,x=0.7389607262096376,y=0.036648057677968304 a=pan,b=eks,i=4134,x=0.5678246594857959,y=0.8501122230105806 a=eks,b=wye,i=4135,x=0.06467946568449268,y=0.8481570975546845 a=zee,b=eks,i=4136,x=0.9750589992032552,y=0.8792931621208594 a=pan,b=eks,i=4137,x=0.727677709722926,y=0.990782873469676 a=hat,b=eks,i=4138,x=0.680011121560662,y=0.8738045887343792 a=pan,b=eks,i=4139,x=0.8882078496509985,y=0.7037523368580344 a=wye,b=wye,i=4140,x=0.4072330251968732,y=0.5912138499903089 a=pan,b=pan,i=4141,x=0.7099916507740912,y=0.7023882125149881 a=zee,b=hat,i=4142,x=0.59845620196533,y=0.7654415799243958 a=wye,b=zee,i=4143,x=0.7319199702444085,y=0.3284383385587504 a=pan,b=eks,i=4144,x=0.20066813487611335,y=0.14876626920283553 a=eks,b=eks,i=4145,x=0.15065242524890976,y=0.12428817259719527 a=eks,b=hat,i=4146,x=0.24650476137003852,y=0.24493489109337752 a=pan,b=eks,i=4147,x=0.18018100232038436,y=0.6774654990004214 a=pan,b=wye,i=4148,x=0.3413539884717429,y=0.42693818289018026 a=pan,b=hat,i=4149,x=0.3302318191152641,y=0.76393329273942 a=wye,b=wye,i=4150,x=0.18070207422954976,y=0.5101494095812327 a=hat,b=wye,i=4151,x=0.9300760758556822,y=0.7773525646273065 a=eks,b=eks,i=4152,x=0.1811147851470688,y=0.27238019374865363 a=zee,b=zee,i=4153,x=0.5846722719463249,y=0.6311555286184487 a=eks,b=wye,i=4154,x=0.14862179863191494,y=0.8693912096400257 a=pan,b=zee,i=4155,x=0.09454282552502047,y=0.49923403772444375 a=hat,b=eks,i=4156,x=0.15799120592162896,y=0.038371812406094774 a=eks,b=zee,i=4157,x=0.4858235480097448,y=0.09279407391803784 a=wye,b=pan,i=4158,x=0.1333970187468101,y=0.28784426376744954 a=zee,b=wye,i=4159,x=0.16633086096833194,y=0.24966226951484904 a=hat,b=wye,i=4160,x=0.8054114157818849,y=0.7345641356600717 a=zee,b=wye,i=4161,x=0.0010540410989509086,y=0.4824535316499434 a=hat,b=wye,i=4162,x=0.17183301057444123,y=0.5814481871152551 a=hat,b=wye,i=4163,x=0.7378974454559613,y=0.14329858381160532 a=eks,b=eks,i=4164,x=0.1814557125976639,y=0.16922072136830046 a=hat,b=hat,i=4165,x=0.1667557442764379,y=0.4707835711078464 a=eks,b=eks,i=4166,x=0.8001532760200558,y=0.4710414364372668 a=zee,b=eks,i=4167,x=0.7619530390058822,y=0.930540767502347 a=zee,b=pan,i=4168,x=0.599752942239787,y=0.2632005449641026 a=wye,b=eks,i=4169,x=0.07899981174582527,y=0.8711975079555797 a=wye,b=zee,i=4170,x=0.9950566917608218,y=0.8929860757345622 a=zee,b=hat,i=4171,x=0.6164466931885032,y=0.046028336349777765 a=pan,b=wye,i=4172,x=0.9552928088345413,y=0.4665974055074307 a=hat,b=wye,i=4173,x=0.5631533277539057,y=0.18005042555248219 a=zee,b=wye,i=4174,x=0.43302095958952536,y=0.9058926327335167 a=eks,b=hat,i=4175,x=0.14893444050478133,y=0.6668089129536704 a=pan,b=wye,i=4176,x=0.4341923489619599,y=0.7002062767529537 a=wye,b=wye,i=4177,x=0.8269582967617823,y=0.3873323406990482 a=wye,b=hat,i=4178,x=0.10338061245651997,y=0.6598406918574121 a=wye,b=pan,i=4179,x=0.8403305474491944,y=0.5265486487825841 a=pan,b=wye,i=4180,x=0.2142912364810604,y=0.5902490540194396 a=hat,b=hat,i=4181,x=0.9215787418719625,y=0.87388922229494 a=wye,b=eks,i=4182,x=0.34389709563449355,y=0.9265777131373166 a=wye,b=hat,i=4183,x=0.7734961393992563,y=0.8972101418171253 a=wye,b=eks,i=4184,x=0.26453922756144566,y=0.04144136482622762 a=eks,b=eks,i=4185,x=0.6545545397873997,y=0.3003265405693454 a=zee,b=pan,i=4186,x=0.09176822676571406,y=0.5263428400902627 a=hat,b=eks,i=4187,x=0.9865778952946068,y=0.9315331182266391 a=zee,b=zee,i=4188,x=0.5768573162811447,y=0.03374115506424635 a=wye,b=eks,i=4189,x=0.8653650223373014,y=0.05928658347043925 a=hat,b=hat,i=4190,x=0.9900519739227561,y=0.3950239124798106 a=pan,b=eks,i=4191,x=0.637972872375815,y=0.17992343467853944 a=zee,b=hat,i=4192,x=0.20233463129873608,y=0.8387699339680452 a=pan,b=wye,i=4193,x=0.782060968571005,y=0.5226067196250769 a=zee,b=hat,i=4194,x=0.6917599608609465,y=0.7645848884839161 a=zee,b=wye,i=4195,x=0.05217934744029562,y=0.9588458237749052 a=eks,b=zee,i=4196,x=0.9253885848590683,y=0.3616430584909154 a=zee,b=wye,i=4197,x=0.04731297366084686,y=0.5416374414603988 a=pan,b=pan,i=4198,x=0.2033916216857976,y=0.920262918619217 a=hat,b=hat,i=4199,x=0.14718338407807485,y=0.8513271413790102 a=eks,b=eks,i=4200,x=0.7461940655714095,y=0.22725935726388635 a=hat,b=zee,i=4201,x=0.5742688863471991,y=0.20563261535996558 a=pan,b=hat,i=4202,x=0.23693797784996196,y=0.7710519376518159 a=wye,b=pan,i=4203,x=0.24740078542575394,y=0.031517413903408564 a=eks,b=wye,i=4204,x=0.09707778409356904,y=0.4413369985080463 a=zee,b=hat,i=4205,x=0.9035555263299718,y=0.39000800205677044 a=eks,b=zee,i=4206,x=0.591250716216349,y=0.533942741704139 a=wye,b=pan,i=4207,x=0.03750222722365337,y=0.7243329653363689 a=eks,b=eks,i=4208,x=0.23584245665114634,y=0.13929514505423546 a=hat,b=wye,i=4209,x=0.01599534158357141,y=0.888241457991452 a=pan,b=pan,i=4210,x=0.7140111302670499,y=0.3769195273604298 a=wye,b=eks,i=4211,x=0.5693885676546375,y=0.8180582438424654 a=eks,b=pan,i=4212,x=0.7602507606210257,y=0.39631475864139476 a=zee,b=zee,i=4213,x=0.6569921162319814,y=0.9398725266121587 a=zee,b=eks,i=4214,x=0.6757239578204182,y=0.6370305085828928 a=wye,b=pan,i=4215,x=0.24941440834260942,y=0.6514695259568407 a=hat,b=wye,i=4216,x=0.11546817052646863,y=0.987858819464426 a=pan,b=wye,i=4217,x=0.4097976618902073,y=0.141878119206427 a=pan,b=pan,i=4218,x=0.37182041744304883,y=0.5321264950796094 a=zee,b=zee,i=4219,x=0.6441844499665529,y=0.23588688400237645 a=zee,b=pan,i=4220,x=0.30704268738508733,y=0.5886080352557902 a=zee,b=zee,i=4221,x=0.2777713687698916,y=0.9525579988213925 a=eks,b=wye,i=4222,x=0.2916049582954635,y=0.36479303527285845 a=eks,b=eks,i=4223,x=0.18203746990797298,y=0.7219165981682398 a=hat,b=zee,i=4224,x=0.5666319712329421,y=0.5421871427604233 a=wye,b=eks,i=4225,x=0.4458349858817956,y=0.9706195326043711 a=eks,b=zee,i=4226,x=0.16294492416963813,y=0.8362146915120445 a=pan,b=hat,i=4227,x=0.7293597006505415,y=0.35215231788343837 a=wye,b=pan,i=4228,x=0.0036540728637147746,y=0.9534351724118004 a=pan,b=eks,i=4229,x=0.651806061031575,y=0.6877628315760286 a=hat,b=zee,i=4230,x=0.3033701670401001,y=0.6978700190197445 a=eks,b=hat,i=4231,x=0.9813730880370696,y=0.8073301729919906 a=hat,b=hat,i=4232,x=0.4406941528960675,y=0.11038994093232624 a=wye,b=pan,i=4233,x=0.6049346739736081,y=0.8481638285484625 a=wye,b=pan,i=4234,x=0.03250269370708647,y=0.07284046091092433 a=hat,b=eks,i=4235,x=0.8805603004827004,y=0.2757599334574219 a=hat,b=eks,i=4236,x=0.35959828200975064,y=0.942305832708083 a=zee,b=zee,i=4237,x=0.3542208694505635,y=0.9173262586874656 a=wye,b=hat,i=4238,x=0.768952199858574,y=0.3860553554975482 a=wye,b=zee,i=4239,x=0.15775845219755535,y=0.6337543088194983 a=pan,b=hat,i=4240,x=0.7490446337745393,y=0.7787017014295363 a=pan,b=wye,i=4241,x=0.39480526500730084,y=0.8301232751171009 a=zee,b=hat,i=4242,x=0.34372514541539545,y=0.49770081510285935 a=hat,b=eks,i=4243,x=0.38836962308546263,y=0.20018023403843987 a=pan,b=wye,i=4244,x=0.7365286003534705,y=0.9834124894169503 a=hat,b=zee,i=4245,x=0.8079109744541904,y=0.7703976742527068 a=zee,b=wye,i=4246,x=0.4282487915196205,y=0.20203065558191458 a=pan,b=eks,i=4247,x=0.9507204029429733,y=0.5630361304031504 a=eks,b=wye,i=4248,x=0.5065699052598817,y=0.6709355384501077 a=hat,b=zee,i=4249,x=0.09530331139521941,y=0.6141770440290856 a=pan,b=wye,i=4250,x=0.574482871032033,y=0.24679198539791947 a=zee,b=pan,i=4251,x=0.36882904197494304,y=0.20694570729434147 a=zee,b=zee,i=4252,x=0.18869049168164287,y=0.2881249393129065 a=pan,b=eks,i=4253,x=0.8529162429192656,y=0.6126252561626568 a=eks,b=eks,i=4254,x=0.9121680240505416,y=0.24514174410079137 a=hat,b=pan,i=4255,x=0.29284172836172306,y=0.7411592078657947 a=zee,b=eks,i=4256,x=0.340648501185675,y=0.8624542687016871 a=hat,b=pan,i=4257,x=0.5337295526676911,y=0.20956745825751122 a=hat,b=eks,i=4258,x=0.23233951000696584,y=0.7359066130916937 a=pan,b=hat,i=4259,x=0.5012993133229816,y=0.9840303477621715 a=eks,b=pan,i=4260,x=0.0557110727165222,y=0.3692997658300152 a=hat,b=hat,i=4261,x=0.7017095010065938,y=0.2235290487843009 a=eks,b=eks,i=4262,x=0.45572766007890264,y=0.8865479382954524 a=zee,b=wye,i=4263,x=0.5008782411049667,y=0.6537828452513129 a=eks,b=wye,i=4264,x=0.17630798589531016,y=0.8870092132233037 a=pan,b=wye,i=4265,x=0.4723205963134164,y=0.5883227580402909 a=eks,b=zee,i=4266,x=0.7813498909756447,y=0.3554002183159217 a=hat,b=eks,i=4267,x=0.6709709261548794,y=0.6826054557997793 a=zee,b=pan,i=4268,x=0.5869984233644046,y=0.4215965891872716 a=hat,b=wye,i=4269,x=0.23755705980379305,y=0.565717672067408 a=wye,b=hat,i=4270,x=0.05437547367302842,y=0.3843634628840725 a=wye,b=eks,i=4271,x=0.33499684404101904,y=0.7363519893989602 a=eks,b=eks,i=4272,x=0.42076370727497103,y=0.347103929260111 a=eks,b=hat,i=4273,x=0.20223347366198052,y=0.6349185327342544 a=eks,b=eks,i=4274,x=0.7194619239494552,y=0.6726333368969638 a=pan,b=hat,i=4275,x=0.15064209086091185,y=0.5650744857540827 a=eks,b=wye,i=4276,x=0.03269653193879951,y=0.29083447280996944 a=hat,b=wye,i=4277,x=0.9383386369025388,y=0.09737047596503401 a=pan,b=wye,i=4278,x=0.6033940134557939,y=0.1524866624571496 a=zee,b=hat,i=4279,x=0.919407700741633,y=0.6700497097456894 a=eks,b=pan,i=4280,x=0.09769799852915939,y=0.3471066706498296 a=hat,b=eks,i=4281,x=0.9148347334297323,y=0.3595323954523194 a=wye,b=pan,i=4282,x=0.32493658600558517,y=0.7120462337991681 a=pan,b=hat,i=4283,x=0.6050379829344159,y=0.018006169529162563 a=hat,b=pan,i=4284,x=0.37191179153184073,y=0.832305267226861 a=pan,b=zee,i=4285,x=0.2957451251158941,y=0.23349218064678878 a=eks,b=eks,i=4286,x=0.8813752969569559,y=0.3063937411460197 a=pan,b=eks,i=4287,x=0.22955891589246613,y=0.2437355707416211 a=hat,b=zee,i=4288,x=0.2100291042828707,y=0.3046125296846791 a=hat,b=zee,i=4289,x=0.6942460642160058,y=0.871648415206408 a=wye,b=pan,i=4290,x=0.13303046989523815,y=0.45261676602514167 a=wye,b=wye,i=4291,x=0.24091267860783117,y=0.432502161153847 a=wye,b=zee,i=4292,x=0.6513153856124736,y=0.023025130979235975 a=eks,b=eks,i=4293,x=0.772799624621821,y=0.13641136437762147 a=hat,b=eks,i=4294,x=0.9391670129701266,y=0.15143599739807145 a=zee,b=hat,i=4295,x=0.866742316822531,y=0.5669492043473316 a=eks,b=wye,i=4296,x=0.11546282204080383,y=0.9128514066164883 a=pan,b=hat,i=4297,x=0.020837302984029304,y=0.3069132274412595 a=hat,b=hat,i=4298,x=0.006892430057588106,y=0.6798603206549415 a=hat,b=wye,i=4299,x=0.6559693329859475,y=0.9101410668227939 a=pan,b=pan,i=4300,x=0.14308736404653355,y=0.35525668832657153 a=eks,b=hat,i=4301,x=0.04475741710473613,y=0.3360654229410476 a=zee,b=eks,i=4302,x=0.300825418985067,y=0.5528561991382178 a=zee,b=pan,i=4303,x=0.3269045708474553,y=0.9274904871303865 a=eks,b=hat,i=4304,x=0.4580262055344778,y=0.9863999543980315 a=zee,b=pan,i=4305,x=0.054247648849443775,y=0.03062117326702829 a=zee,b=zee,i=4306,x=0.2506554143610683,y=0.5597570122349527 a=hat,b=zee,i=4307,x=0.6572769759538587,y=0.7762188360555565 a=zee,b=zee,i=4308,x=0.6244811945148983,y=0.6455417265947343 a=pan,b=pan,i=4309,x=0.14825540740448062,y=0.7586294908793549 a=wye,b=zee,i=4310,x=0.3157871729124738,y=0.3917102144253892 a=eks,b=hat,i=4311,x=0.6708501828317742,y=0.004568949785298204 a=pan,b=eks,i=4312,x=0.20998610203251922,y=0.7744934955144873 a=zee,b=hat,i=4313,x=0.40564280799464325,y=0.33455931413035944 a=hat,b=zee,i=4314,x=0.26557751620121417,y=0.030582294685487232 a=wye,b=eks,i=4315,x=0.8346822718173391,y=0.9087526385931736 a=zee,b=pan,i=4316,x=0.6650102486494331,y=0.47444093050485336 a=eks,b=wye,i=4317,x=0.5533052426698345,y=0.9963296753932288 a=hat,b=wye,i=4318,x=0.8500427306718407,y=0.3980491400101921 a=eks,b=hat,i=4319,x=0.587710279503696,y=0.7637256058032382 a=hat,b=eks,i=4320,x=0.225195776008963,y=0.34680409151838987 a=eks,b=eks,i=4321,x=0.3743649517286406,y=0.371323975760271 a=zee,b=wye,i=4322,x=0.08196046591615203,y=0.9354600035181082 a=pan,b=zee,i=4323,x=0.1270141412555008,y=0.9359092028185755 a=pan,b=wye,i=4324,x=0.8265091425517825,y=0.8730857418980851 a=wye,b=hat,i=4325,x=0.18762256928648036,y=0.3496377335361346 a=hat,b=zee,i=4326,x=0.5027579931171035,y=0.4533737960921881 a=pan,b=zee,i=4327,x=0.8574481014982461,y=0.5295177741370016 a=eks,b=hat,i=4328,x=0.04469772107287828,y=0.1558945876794342 a=zee,b=wye,i=4329,x=0.040009010165471426,y=0.23762769464838596 a=wye,b=eks,i=4330,x=0.7337424822041352,y=0.9253645788362634 a=eks,b=pan,i=4331,x=0.39774327394939324,y=0.7598516907632268 a=zee,b=eks,i=4332,x=0.6650861493530829,y=0.9532385654163494 a=wye,b=zee,i=4333,x=0.623256894200598,y=0.9959963338862539 a=hat,b=hat,i=4334,x=0.5194251677645445,y=0.6069457992071033 a=eks,b=eks,i=4335,x=0.27590012941997233,y=0.4710389173795224 a=eks,b=wye,i=4336,x=0.20559084127748029,y=0.07907344682124973 a=zee,b=eks,i=4337,x=0.7274918229548967,y=0.4560003890137745 a=eks,b=wye,i=4338,x=0.7956872034220226,y=0.5293505141201019 a=eks,b=hat,i=4339,x=0.7870829513432012,y=0.43739349603781874 a=zee,b=hat,i=4340,x=0.7603664092180368,y=0.9580821743227704 a=hat,b=wye,i=4341,x=0.13255591202916173,y=0.6036817350896815 a=hat,b=eks,i=4342,x=0.894832446069551,y=0.20041478240523392 a=pan,b=zee,i=4343,x=0.25499861370064547,y=0.7429826617008429 a=wye,b=wye,i=4344,x=0.052662357337272314,y=0.29674416350945576 a=wye,b=eks,i=4345,x=0.32377948428256254,y=0.44346746414092775 a=pan,b=wye,i=4346,x=0.981200940391299,y=0.3540023526814763 a=zee,b=pan,i=4347,x=0.8084421949971258,y=0.30776403749247283 a=wye,b=hat,i=4348,x=0.4821078789121165,y=0.4162262532349117 a=wye,b=hat,i=4349,x=0.4367902393016294,y=0.05920613613537973 a=eks,b=hat,i=4350,x=0.9339368174600853,y=0.7317847021280102 a=zee,b=hat,i=4351,x=0.9429615758129121,y=0.5240015841208292 a=hat,b=zee,i=4352,x=0.0664957669868742,y=8.818962627266114e-05 a=pan,b=eks,i=4353,x=0.8282722812326957,y=0.23408835381449733 a=zee,b=hat,i=4354,x=0.1538284653082913,y=0.6089810980954452 a=zee,b=eks,i=4355,x=0.46866002588451194,y=0.9134518194404112 a=pan,b=eks,i=4356,x=0.01315481017386444,y=0.44644705644627847 a=wye,b=pan,i=4357,x=0.15872648196015937,y=0.4101120817770719 a=eks,b=pan,i=4358,x=0.4048463543687769,y=0.8180080997048252 a=eks,b=hat,i=4359,x=0.18749105355156304,y=0.031119717506070232 a=wye,b=eks,i=4360,x=0.5994338059975802,y=0.7593584300322925 a=zee,b=pan,i=4361,x=0.4041175236502057,y=0.563867680719028 a=pan,b=pan,i=4362,x=0.4776831446864783,y=0.31255268452634855 a=zee,b=zee,i=4363,x=0.737623707262791,y=0.07173859048743914 a=eks,b=zee,i=4364,x=0.06851910387772064,y=0.6267119426769414 a=pan,b=pan,i=4365,x=0.8056978268678051,y=0.6122184248222929 a=wye,b=eks,i=4366,x=0.6130750784896909,y=0.3739723925301818 a=zee,b=eks,i=4367,x=0.5479247041679578,y=0.8471361139630293 a=hat,b=hat,i=4368,x=0.6173031043354198,y=0.7380826201700894 a=hat,b=pan,i=4369,x=0.18322206558953436,y=0.3662885008446586 a=zee,b=pan,i=4370,x=0.8569969483007317,y=0.731735360698434 a=zee,b=zee,i=4371,x=0.20408101154886704,y=0.43495561327109344 a=wye,b=eks,i=4372,x=0.3106731927957148,y=0.8646328772903458 a=zee,b=pan,i=4373,x=0.39321439524831203,y=0.2914282319820135 a=zee,b=hat,i=4374,x=0.683824883019394,y=0.585513739811086 a=hat,b=hat,i=4375,x=0.9928427533843932,y=0.4919698293838758 a=eks,b=zee,i=4376,x=0.8528651690503563,y=0.6839515405337084 a=wye,b=zee,i=4377,x=0.6209381983202935,y=0.37443140551688425 a=hat,b=eks,i=4378,x=0.05864089512370707,y=0.3851321842794584 a=hat,b=eks,i=4379,x=0.385346641589309,y=0.49130997093061135 a=wye,b=eks,i=4380,x=0.41688102647846714,y=0.4373087113569425 a=wye,b=zee,i=4381,x=0.7486814244189324,y=0.45486094891390894 a=wye,b=zee,i=4382,x=0.6423172315048185,y=0.43668923283070715 a=eks,b=eks,i=4383,x=0.8187617783793841,y=0.9557936564036845 a=pan,b=eks,i=4384,x=0.5100350554093268,y=0.8092077539642156 a=hat,b=pan,i=4385,x=0.47426099560303103,y=0.6325566666019241 a=pan,b=wye,i=4386,x=0.03535725248176258,y=0.21559585940453474 a=eks,b=zee,i=4387,x=0.5578706674280356,y=0.5892456559407706 a=zee,b=hat,i=4388,x=0.3301766575217969,y=0.3233192495545678 a=hat,b=wye,i=4389,x=0.17144446980658334,y=0.17462284811463846 a=wye,b=wye,i=4390,x=0.7204182651096341,y=0.09552085794825671 a=zee,b=hat,i=4391,x=0.4346285785864693,y=0.9698660828641514 a=wye,b=eks,i=4392,x=0.08391983953449689,y=0.4685350106442322 a=pan,b=zee,i=4393,x=0.4995072530912873,y=0.7435874077135464 a=eks,b=hat,i=4394,x=0.6446893978656929,y=0.742983523935812 a=hat,b=eks,i=4395,x=0.05068057954766625,y=0.32284857142742274 a=zee,b=wye,i=4396,x=0.031143786348458158,y=0.4250465603658179 a=pan,b=zee,i=4397,x=0.47789346509127195,y=0.35190784679302956 a=eks,b=zee,i=4398,x=0.18676354095379522,y=0.8523337248259436 a=pan,b=zee,i=4399,x=0.4023182691161423,y=0.9889383169990947 a=wye,b=hat,i=4400,x=0.06936764963814968,y=0.3043996463710237 a=hat,b=hat,i=4401,x=0.1471442142546867,y=0.9419015090081274 a=zee,b=zee,i=4402,x=0.05608507131691576,y=0.3577189025004591 a=zee,b=zee,i=4403,x=0.6778157751992904,y=0.3796072620376758 a=eks,b=wye,i=4404,x=0.20538620731982282,y=0.20907310428515913 a=pan,b=hat,i=4405,x=0.770037239607531,y=0.8918149402479805 a=zee,b=hat,i=4406,x=0.5633321574207005,y=0.23765572260844736 a=pan,b=hat,i=4407,x=0.5936012356219856,y=0.9640723007408432 a=hat,b=hat,i=4408,x=0.10549405386012722,y=0.5508069885788562 a=eks,b=zee,i=4409,x=0.42871073222230527,y=0.7803087556052989 a=pan,b=pan,i=4410,x=0.2570515021562684,y=0.18774521042902936 a=pan,b=wye,i=4411,x=0.06223387369679134,y=0.9162029404566593 a=wye,b=wye,i=4412,x=0.7213015230538632,y=0.6718375213896831 a=zee,b=pan,i=4413,x=0.8367397203622533,y=0.7284961033977948 a=eks,b=eks,i=4414,x=0.6694554317033412,y=0.9879307986798048 a=eks,b=pan,i=4415,x=0.557526011305301,y=0.029599606830183034 a=zee,b=eks,i=4416,x=0.362024615946302,y=0.01598375230508753 a=hat,b=wye,i=4417,x=0.3577525385238439,y=0.8867789429771926 a=pan,b=eks,i=4418,x=0.9353086997459791,y=0.840900748615823 a=pan,b=eks,i=4419,x=0.33299408925849605,y=0.9684574693908093 a=hat,b=hat,i=4420,x=0.9677858495817456,y=0.3852147823991926 a=eks,b=pan,i=4421,x=0.09737990168391619,y=0.8610505154621456 a=wye,b=zee,i=4422,x=0.18372838583640871,y=0.677719382536205 a=zee,b=eks,i=4423,x=0.9639383645238275,y=0.6490468629834018 a=zee,b=eks,i=4424,x=0.7312421688490892,y=0.8667063684553176 a=pan,b=pan,i=4425,x=0.46845749017099236,y=0.11757543510403212 a=zee,b=eks,i=4426,x=0.5623944023007167,y=0.7586419852976186 a=eks,b=hat,i=4427,x=0.9350368655950849,y=0.9337007230580264 a=pan,b=wye,i=4428,x=0.28446652374011305,y=0.9335853004150079 a=zee,b=pan,i=4429,x=0.2435597397475192,y=0.9504689136369295 a=eks,b=eks,i=4430,x=0.18612060795223095,y=0.5312429574676665 a=wye,b=wye,i=4431,x=0.6855292088150996,y=0.5336035912975299 a=hat,b=wye,i=4432,x=0.3714804665656307,y=0.5063602618918502 a=eks,b=pan,i=4433,x=0.24252721996042959,y=0.28456246724868983 a=wye,b=eks,i=4434,x=0.1632748286056276,y=0.6415721193438837 a=zee,b=eks,i=4435,x=0.3774471419632248,y=0.29246801034228276 a=wye,b=eks,i=4436,x=0.21438792699902287,y=0.1153507200959073 a=eks,b=wye,i=4437,x=0.47860288810882523,y=0.25957684880561227 a=pan,b=hat,i=4438,x=0.35637893830039535,y=0.566432274547929 a=wye,b=hat,i=4439,x=0.8059627789626932,y=0.9269765317602825 a=eks,b=wye,i=4440,x=0.5734217911203672,y=0.11837434570151262 a=hat,b=wye,i=4441,x=0.9694639452414799,y=0.4236734467526825 a=wye,b=eks,i=4442,x=0.5598645482568733,y=0.8346150307672233 a=pan,b=hat,i=4443,x=0.7863543856807507,y=0.44923205034018343 a=zee,b=pan,i=4444,x=0.06405328319447168,y=0.853068557145527 a=hat,b=wye,i=4445,x=0.16426131233686758,y=0.9176538861190784 a=hat,b=zee,i=4446,x=0.701715405648832,y=0.8559468613900958 a=hat,b=pan,i=4447,x=0.13582612436147878,y=0.497058893619451 a=hat,b=wye,i=4448,x=0.6624067185928518,y=0.7937707954447804 a=zee,b=zee,i=4449,x=0.6191704067390206,y=0.43116585741152647 a=pan,b=hat,i=4450,x=0.48601459169792693,y=0.9674848773976846 a=pan,b=zee,i=4451,x=0.9254868696106908,y=0.9850750432504393 a=hat,b=eks,i=4452,x=0.4276425759791995,y=0.9805685474387745 a=pan,b=wye,i=4453,x=0.9879231882058336,y=0.05532023052523416 a=wye,b=zee,i=4454,x=0.9975176429595021,y=0.3219020340649893 a=zee,b=wye,i=4455,x=0.9045463102006963,y=0.848434465758308 a=zee,b=hat,i=4456,x=0.08456763094566144,y=0.010673585995051305 a=pan,b=hat,i=4457,x=0.0033725690276290576,y=0.9788940035931831 a=hat,b=wye,i=4458,x=0.20520432149483148,y=0.5343150390458646 a=wye,b=wye,i=4459,x=0.5647236635302233,y=0.3680663878959515 a=pan,b=zee,i=4460,x=0.1592478815974211,y=0.4117697078037489 a=pan,b=pan,i=4461,x=0.62386217954306,y=0.32217051912035644 a=zee,b=zee,i=4462,x=0.18223498064407118,y=0.36892881666552835 a=eks,b=wye,i=4463,x=0.6602307362128103,y=0.824908201375127 a=eks,b=eks,i=4464,x=0.4730857339400537,y=0.9000760203605631 a=zee,b=wye,i=4465,x=0.9363792956174969,y=0.8531230483001019 a=eks,b=zee,i=4466,x=0.8051994741838333,y=0.5378817334878282 a=wye,b=eks,i=4467,x=0.30400985135251946,y=0.7987746479150503 a=pan,b=hat,i=4468,x=0.6433621739438674,y=0.6213575464612451 a=eks,b=hat,i=4469,x=0.9576601311217493,y=0.653626721264175 a=eks,b=eks,i=4470,x=0.98941560149702,y=0.36720018654175823 a=wye,b=wye,i=4471,x=0.01614755296128778,y=0.6311179470884701 a=wye,b=hat,i=4472,x=0.36611005710206224,y=0.8033266539816868 a=hat,b=eks,i=4473,x=0.37497169859420076,y=0.979993946243979 a=hat,b=wye,i=4474,x=0.9049733829008388,y=0.2530406481106403 a=eks,b=eks,i=4475,x=0.7604785827914787,y=0.0635000262397527 a=hat,b=zee,i=4476,x=0.09254183760409695,y=0.9759835344600776 a=eks,b=hat,i=4477,x=0.09002534954722263,y=0.0791900913528687 a=zee,b=wye,i=4478,x=0.7347401014901926,y=0.5874553765719767 a=zee,b=eks,i=4479,x=0.18927674591359955,y=0.9166186983358086 a=eks,b=zee,i=4480,x=0.06846268410645817,y=0.17937317736357228 a=zee,b=pan,i=4481,x=0.9513688420096763,y=0.23610642422264838 a=eks,b=zee,i=4482,x=0.5207774812238394,y=0.7322116837434511 a=zee,b=wye,i=4483,x=0.6011563904137914,y=0.6359195042320677 a=pan,b=pan,i=4484,x=0.5657005920846724,y=0.18970181926871021 a=hat,b=eks,i=4485,x=0.14129738926071922,y=0.09762322511903287 a=wye,b=wye,i=4486,x=0.587567750076066,y=0.6669838072984797 a=eks,b=wye,i=4487,x=0.5516672019589355,y=0.7655831718008789 a=hat,b=wye,i=4488,x=0.7926043240629409,y=0.5015162896194846 a=wye,b=wye,i=4489,x=0.6948771123324418,y=0.5976836677553925 a=hat,b=hat,i=4490,x=0.9101749423682922,y=0.9101168870690818 a=pan,b=wye,i=4491,x=0.5070024474601975,y=0.7305420057451063 a=hat,b=eks,i=4492,x=0.1759423893989127,y=0.3959141841599947 a=eks,b=pan,i=4493,x=0.6837930443900314,y=0.6284806971996789 a=pan,b=eks,i=4494,x=0.01334023940553175,y=0.8984813314174203 a=wye,b=hat,i=4495,x=0.4602646789703714,y=0.12318800994516399 a=wye,b=pan,i=4496,x=0.7594514407425375,y=0.6656599679572212 a=zee,b=pan,i=4497,x=0.0776140160787101,y=0.02352743433085669 a=wye,b=zee,i=4498,x=0.02184839096132485,y=0.3911325637076585 a=wye,b=pan,i=4499,x=0.8747947010040115,y=0.9998479502810276 a=pan,b=zee,i=4500,x=0.47622133460809657,y=0.12656764784587515 a=zee,b=pan,i=4501,x=0.9880755588957435,y=0.780394078164109 a=wye,b=pan,i=4502,x=0.5872223616487092,y=0.24413711463218768 a=pan,b=wye,i=4503,x=0.3169372633496723,y=0.6300856859908801 a=hat,b=eks,i=4504,x=0.7328180759655728,y=0.8128425968959323 a=pan,b=hat,i=4505,x=0.4952953134840421,y=0.7414385634621263 a=hat,b=wye,i=4506,x=0.6481956843803017,y=0.6728352515966057 a=wye,b=zee,i=4507,x=0.5592247301828953,y=0.38151239977141804 a=zee,b=eks,i=4508,x=0.6599555713404097,y=0.05617030765448339 a=pan,b=pan,i=4509,x=0.728902215552813,y=0.27293683220270937 a=hat,b=wye,i=4510,x=0.3413847510209549,y=0.9446873420872602 a=wye,b=hat,i=4511,x=0.9311713164896562,y=0.5805780192421368 a=hat,b=eks,i=4512,x=0.23786081178866836,y=0.36277905022985646 a=hat,b=wye,i=4513,x=0.965484537526872,y=0.940488169982859 a=wye,b=zee,i=4514,x=0.6337020189425001,y=0.24780419902689788 a=eks,b=zee,i=4515,x=0.5658257878312276,y=0.07673202860335637 a=pan,b=pan,i=4516,x=0.3492462945952187,y=0.2946268275283319 a=pan,b=eks,i=4517,x=0.3809006676495632,y=0.9025992620313033 a=hat,b=eks,i=4518,x=0.44713434909121097,y=0.16699429132092636 a=hat,b=eks,i=4519,x=0.04008702328986802,y=0.6174480537157027 a=wye,b=eks,i=4520,x=0.21810500990652393,y=0.23695212300002177 a=wye,b=eks,i=4521,x=0.8007710094864122,y=0.4612346253522104 a=hat,b=eks,i=4522,x=0.6458119971443835,y=0.21584168033920748 a=wye,b=zee,i=4523,x=0.05279712720226515,y=0.027511378098411865 a=zee,b=hat,i=4524,x=0.1957893855808428,y=0.2551266540561208 a=zee,b=pan,i=4525,x=0.011543703995189447,y=0.22663954461488478 a=pan,b=pan,i=4526,x=0.04880772479373874,y=0.07481795594892848 a=pan,b=hat,i=4527,x=0.31836250428860824,y=0.32626988649341593 a=pan,b=eks,i=4528,x=0.31647815243381505,y=0.9543304719705902 a=eks,b=eks,i=4529,x=0.6724206236624584,y=0.407679006701397 a=wye,b=hat,i=4530,x=0.01951408829488066,y=0.8016601846958178 a=eks,b=zee,i=4531,x=0.34858797365915506,y=0.4282397998858426 a=pan,b=eks,i=4532,x=0.8877015003398467,y=0.7747761049575923 a=zee,b=hat,i=4533,x=0.20311049077197163,y=0.9056538940562936 a=zee,b=eks,i=4534,x=0.042723672522825384,y=0.597559530943149 a=zee,b=hat,i=4535,x=0.46136202746827326,y=0.42271339711114486 a=eks,b=wye,i=4536,x=0.009469467689817823,y=0.5905509650490668 a=hat,b=pan,i=4537,x=0.835149120257535,y=0.33196199258862646 a=wye,b=pan,i=4538,x=0.7691954303113361,y=0.5906545288840418 a=wye,b=eks,i=4539,x=0.666121467152889,y=0.7009152639751882 a=pan,b=pan,i=4540,x=0.8705353878768347,y=0.569382489859167 a=pan,b=hat,i=4541,x=0.4923885483714453,y=0.9049207586310641 a=hat,b=wye,i=4542,x=0.27993688119753957,y=0.7737127207588408 a=zee,b=pan,i=4543,x=0.06684443758496139,y=0.669147012692109 a=wye,b=zee,i=4544,x=0.41011486047935275,y=0.7628128623557089 a=zee,b=pan,i=4545,x=0.6170845342886218,y=0.16351912171251637 a=pan,b=wye,i=4546,x=0.30897074727172746,y=0.07486636973164118 a=eks,b=eks,i=4547,x=0.03524990401153394,y=0.904683107161618 a=hat,b=zee,i=4548,x=0.6838256979656141,y=0.9575551645763191 a=wye,b=eks,i=4549,x=0.9129619062625066,y=0.7815822557674902 a=wye,b=zee,i=4550,x=0.4016549692069845,y=0.724711080886896 a=zee,b=zee,i=4551,x=0.5217798806787498,y=0.060225688816844425 a=hat,b=hat,i=4552,x=0.38397767907558444,y=0.6583775510562486 a=pan,b=zee,i=4553,x=0.8167689053817359,y=0.28922410230760154 a=wye,b=wye,i=4554,x=0.9638574684692321,y=0.29330354945805037 a=zee,b=zee,i=4555,x=0.5750699152551632,y=0.06554938093659102 a=wye,b=eks,i=4556,x=0.43879872159435107,y=0.5781692813513072 a=wye,b=pan,i=4557,x=0.43671727561555884,y=0.8495155027864089 a=zee,b=hat,i=4558,x=0.030771073498329193,y=0.22547664086558517 a=pan,b=zee,i=4559,x=0.8853445527158975,y=0.9598699991813698 a=pan,b=pan,i=4560,x=0.022873859395381335,y=0.16717654342761945 a=zee,b=hat,i=4561,x=0.9373515354219202,y=0.2891538081093269 a=wye,b=wye,i=4562,x=0.9962200957849251,y=0.7504411563669804 a=hat,b=eks,i=4563,x=0.05502367054609869,y=0.6444826263272572 a=zee,b=wye,i=4564,x=0.7531892953023888,y=0.662798570253206 a=pan,b=wye,i=4565,x=0.2693404460591514,y=0.8267302541357341 a=wye,b=pan,i=4566,x=0.8263810161941457,y=0.049441142990266584 a=wye,b=eks,i=4567,x=0.0013320296153030986,y=0.3527351039106079 a=pan,b=pan,i=4568,x=0.7262006271124115,y=0.2750926075667838 a=pan,b=hat,i=4569,x=0.6676401567199843,y=0.15611308180709593 a=hat,b=pan,i=4570,x=0.5538202729746985,y=0.4068149726511291 a=pan,b=eks,i=4571,x=0.968095869026238,y=0.025471172108070594 a=eks,b=hat,i=4572,x=0.4698777463924877,y=0.5590684721569192 a=pan,b=pan,i=4573,x=0.8739437627285006,y=0.29509284815603065 a=pan,b=pan,i=4574,x=0.8828597588783772,y=0.0029763172734756926 a=zee,b=zee,i=4575,x=0.4923232521663191,y=0.31138573511811585 a=pan,b=eks,i=4576,x=0.4634084033597302,y=0.7040687106187243 a=pan,b=hat,i=4577,x=0.4415962788129276,y=0.8575497231199157 a=pan,b=hat,i=4578,x=0.6072792806625152,y=0.45767228806970406 a=hat,b=hat,i=4579,x=0.7716061175886524,y=0.5940949446227113 a=wye,b=zee,i=4580,x=0.8815091817106934,y=0.19682219276482926 a=zee,b=pan,i=4581,x=0.6615122130690573,y=0.743282484093763 a=hat,b=zee,i=4582,x=0.7466772782921713,y=0.6024593387871963 a=zee,b=zee,i=4583,x=0.7293308998803242,y=0.9194675588274827 a=pan,b=wye,i=4584,x=0.9785223653345103,y=0.3599874182922952 a=wye,b=wye,i=4585,x=0.49005088405256925,y=0.19667802308060156 a=zee,b=eks,i=4586,x=0.07759080031155674,y=0.5800418301347179 a=wye,b=pan,i=4587,x=0.028648375277809612,y=0.7340705243928477 a=hat,b=zee,i=4588,x=0.15982614073843593,y=0.29678575429874954 a=wye,b=zee,i=4589,x=0.7660330001010108,y=0.12214362772060794 a=hat,b=zee,i=4590,x=0.5798093869980113,y=0.10378695075036093 a=zee,b=wye,i=4591,x=0.3549198162177106,y=0.15971238689401845 a=zee,b=zee,i=4592,x=0.3725968594942376,y=0.10170369746035934 a=wye,b=eks,i=4593,x=0.7856019829313924,y=0.4108035864939361 a=pan,b=eks,i=4594,x=0.9636076558747869,y=0.6429412934414747 a=eks,b=zee,i=4595,x=0.6544038361180394,y=0.4941333402391265 a=pan,b=eks,i=4596,x=0.6771264909006598,y=0.008696187477938766 a=pan,b=zee,i=4597,x=0.5913051026982411,y=0.41009568634323257 a=zee,b=hat,i=4598,x=0.8546218618730578,y=0.4453962412371504 a=pan,b=hat,i=4599,x=0.31929533389085374,y=0.9456168170774322 a=wye,b=wye,i=4600,x=0.9581114071286606,y=0.07673690685162327 a=eks,b=eks,i=4601,x=0.17142456675630824,y=0.428244260538891 a=pan,b=wye,i=4602,x=0.9706134171920786,y=0.2394012508489064 a=pan,b=pan,i=4603,x=0.7077416345290591,y=0.3940789509138629 a=wye,b=eks,i=4604,x=0.26884887570750515,y=0.0629227877462456 a=wye,b=hat,i=4605,x=0.9967036371872702,y=0.9394080649718911 a=wye,b=zee,i=4606,x=0.4136967828620527,y=0.9691879757554137 a=wye,b=eks,i=4607,x=0.7882253618539071,y=0.040484731408140906 a=wye,b=hat,i=4608,x=0.8502136933818653,y=0.22282199291281735 a=hat,b=hat,i=4609,x=0.3806800313299039,y=0.7432483423888808 a=eks,b=hat,i=4610,x=0.8546204254968556,y=0.544666096374198 a=wye,b=zee,i=4611,x=0.9797738948452778,y=0.7539379828966757 a=zee,b=zee,i=4612,x=0.5658890329943034,y=0.3209865549677199 a=eks,b=eks,i=4613,x=0.036974707048940014,y=0.13498566781731325 a=pan,b=zee,i=4614,x=0.4962373115799128,y=0.34690328340466625 a=hat,b=eks,i=4615,x=0.03988943828313485,y=0.5198278894510299 a=zee,b=wye,i=4616,x=0.3113084465595777,y=0.5849628571688789 a=pan,b=wye,i=4617,x=0.6064318491662761,y=0.9709587074540149 a=eks,b=eks,i=4618,x=0.6067298140262544,y=0.6856518510847851 a=hat,b=eks,i=4619,x=0.5013319604077514,y=0.09625820792492479 a=eks,b=eks,i=4620,x=0.9081698767653911,y=0.09914145966043864 a=zee,b=eks,i=4621,x=0.30992740946284036,y=0.3114230762548156 a=wye,b=wye,i=4622,x=0.9124025251398724,y=0.9456164182783081 a=hat,b=pan,i=4623,x=0.8700806062428935,y=0.2702206397600061 a=wye,b=pan,i=4624,x=0.5833679710036083,y=0.9019285736689665 a=zee,b=pan,i=4625,x=0.8458203200231942,y=0.5450580672631699 a=pan,b=pan,i=4626,x=0.8541837089895298,y=0.10662879193504415 a=pan,b=pan,i=4627,x=0.6949946108264341,y=0.32599427511471524 a=pan,b=hat,i=4628,x=0.8957043450158336,y=0.5673889892957554 a=wye,b=hat,i=4629,x=0.8464282723870642,y=0.5202135613238874 a=wye,b=hat,i=4630,x=0.613215207985136,y=0.3257127644270309 a=zee,b=hat,i=4631,x=0.9018507034320511,y=0.7039556507979018 a=pan,b=pan,i=4632,x=0.4889756359426054,y=0.3597265690523318 a=hat,b=eks,i=4633,x=0.9578525826572483,y=0.14404380765797786 a=pan,b=zee,i=4634,x=0.3044854324264554,y=0.7688031286868651 a=eks,b=wye,i=4635,x=0.6963926992471413,y=0.3473111484128578 a=zee,b=wye,i=4636,x=0.7694758941220707,y=0.18753300419759023 a=eks,b=zee,i=4637,x=0.016930162668300386,y=0.916668923894452 a=pan,b=eks,i=4638,x=0.1800152730244199,y=0.8740912343460313 a=eks,b=eks,i=4639,x=0.36139046295982613,y=0.40696722185592216 a=wye,b=wye,i=4640,x=0.03629701172915789,y=0.5927800218745649 a=eks,b=wye,i=4641,x=0.8718989050597648,y=0.39307440967351814 a=zee,b=hat,i=4642,x=0.3250137468458404,y=0.6558363341062954 a=zee,b=hat,i=4643,x=0.4795723404826593,y=0.46439187383822056 a=zee,b=hat,i=4644,x=0.5269030281828351,y=0.5294159733959858 a=wye,b=zee,i=4645,x=0.09245439495290197,y=0.7686039676164822 a=pan,b=hat,i=4646,x=0.831713886231876,y=0.2677496071207002 a=eks,b=zee,i=4647,x=0.42422452591610793,y=0.2126460780549554 a=eks,b=hat,i=4648,x=0.5207613338836535,y=0.48593533079307305 a=hat,b=wye,i=4649,x=0.23701829308813094,y=0.8653571299757888 a=wye,b=pan,i=4650,x=0.20994504688794036,y=0.6907804524857445 a=eks,b=zee,i=4651,x=0.2453117436615031,y=0.6150127076085181 a=zee,b=zee,i=4652,x=0.042537661080377376,y=0.8584990883333112 a=hat,b=pan,i=4653,x=0.21286942433921574,y=0.8764916061320036 a=pan,b=hat,i=4654,x=0.5285099685069632,y=0.5178008352128922 a=hat,b=eks,i=4655,x=0.26641282472179073,y=0.5266452477752575 a=eks,b=pan,i=4656,x=0.6818528635056993,y=0.337950728316578 a=hat,b=wye,i=4657,x=0.14061995895280166,y=0.47199609775073736 a=zee,b=zee,i=4658,x=0.6602472108733521,y=0.2687315624525114 a=wye,b=zee,i=4659,x=0.2520902351101554,y=0.8428783239555871 a=hat,b=eks,i=4660,x=0.30472363074700515,y=0.07217266625982621 a=hat,b=wye,i=4661,x=0.2091333254634984,y=0.1548046270754979 a=eks,b=pan,i=4662,x=0.11981801924487756,y=0.8469445222208282 a=hat,b=hat,i=4663,x=0.3119827522367612,y=0.4259694252127655 a=eks,b=hat,i=4664,x=0.3269411701545405,y=0.9376670988013223 a=pan,b=zee,i=4665,x=0.054344923432058434,y=0.16217922759144587 a=wye,b=zee,i=4666,x=0.4186702128599753,y=0.2835839275998192 a=wye,b=zee,i=4667,x=0.0646217379660351,y=0.30530257092910784 a=zee,b=eks,i=4668,x=0.07870649960682297,y=0.2515794150323323 a=hat,b=hat,i=4669,x=0.5003476787456538,y=0.6310918883710445 a=pan,b=hat,i=4670,x=0.6275111165777365,y=0.8054897414350336 a=pan,b=pan,i=4671,x=0.1499838451712301,y=0.6223414752307141 a=hat,b=wye,i=4672,x=0.4988884658239877,y=0.9906049192655605 a=zee,b=eks,i=4673,x=0.984318771878163,y=0.7280796955832692 a=zee,b=wye,i=4674,x=0.23054557107461504,y=0.19681174789488143 a=wye,b=eks,i=4675,x=0.7334463313910938,y=0.28306119200330626 a=eks,b=pan,i=4676,x=0.1423438599979604,y=0.35330918689671975 a=wye,b=wye,i=4677,x=0.6577383987571024,y=0.15021996734596066 a=hat,b=zee,i=4678,x=0.9082274952383252,y=0.7405877302837555 a=eks,b=pan,i=4679,x=0.8074215267431348,y=0.5236668774007812 a=wye,b=hat,i=4680,x=0.5108382071350746,y=0.47151957178400083 a=hat,b=wye,i=4681,x=0.9809419297944051,y=0.23507029745163854 a=eks,b=hat,i=4682,x=0.9342926038131985,y=0.7979695752949024 a=eks,b=hat,i=4683,x=0.8736202694364024,y=0.38219743850966714 a=zee,b=pan,i=4684,x=0.44163999038860213,y=0.38504226387550344 a=pan,b=zee,i=4685,x=0.03027055342778162,y=0.08035681468258382 a=zee,b=wye,i=4686,x=0.08118893501639246,y=0.27655291599781473 a=wye,b=hat,i=4687,x=0.06385275336646346,y=0.35108434035108427 a=pan,b=hat,i=4688,x=0.5644746928123485,y=0.35881287919613414 a=wye,b=hat,i=4689,x=0.8811472299764586,y=0.603532565127673 a=hat,b=wye,i=4690,x=0.2892596087785041,y=0.7179425188945073 a=eks,b=wye,i=4691,x=0.4661213596465832,y=0.6018977897376697 a=eks,b=wye,i=4692,x=0.6256084558730343,y=0.5912072106343357 a=eks,b=wye,i=4693,x=0.43739401507823317,y=0.4449591712634142 a=hat,b=pan,i=4694,x=0.22337135846397238,y=0.6406931174403291 a=pan,b=wye,i=4695,x=0.39634806245632836,y=0.6355835294701532 a=eks,b=hat,i=4696,x=0.008662277886696601,y=0.3721538653338412 a=eks,b=zee,i=4697,x=0.7171113231602343,y=0.7425350749221431 a=zee,b=zee,i=4698,x=0.9050833916740578,y=0.46132560825719815 a=eks,b=pan,i=4699,x=0.3986676727991927,y=0.5705940358286782 a=pan,b=hat,i=4700,x=0.9055844258025669,y=0.7437707529087395 a=pan,b=zee,i=4701,x=0.8070216695328106,y=0.4694866303836862 a=zee,b=zee,i=4702,x=0.7415668922687337,y=0.8797752247285192 a=eks,b=wye,i=4703,x=0.7722596990678992,y=0.7367517235830364 a=wye,b=pan,i=4704,x=0.9555278566799899,y=0.2423309359426713 a=pan,b=eks,i=4705,x=0.9264663466646326,y=0.18799757892955882 a=eks,b=hat,i=4706,x=0.6995046411916459,y=0.9587840493554082 a=hat,b=wye,i=4707,x=0.7945060726118334,y=0.8708814355187628 a=eks,b=hat,i=4708,x=0.1778567317636336,y=0.4554107042944405 a=eks,b=hat,i=4709,x=0.8605269620945222,y=0.9282320361391482 a=zee,b=pan,i=4710,x=0.7925893623491367,y=0.8373876174093722 a=eks,b=pan,i=4711,x=0.6921652120265591,y=0.49820807295967395 a=eks,b=hat,i=4712,x=0.8183219512899657,y=0.4748837712114852 a=hat,b=zee,i=4713,x=0.3394230162235836,y=0.4370239027445896 a=hat,b=hat,i=4714,x=0.8405345514548883,y=0.8644132717621533 a=wye,b=zee,i=4715,x=0.8120809467339879,y=0.44574425551887853 a=hat,b=pan,i=4716,x=0.012844309530080089,y=0.25779486121957473 a=hat,b=eks,i=4717,x=0.7365074627250664,y=0.9439422879543493 a=pan,b=pan,i=4718,x=0.23929472797530638,y=0.15699808756834377 a=wye,b=hat,i=4719,x=0.9471866108884663,y=0.03869282767938487 a=pan,b=wye,i=4720,x=0.8444868689691774,y=0.46503509886894867 a=wye,b=eks,i=4721,x=0.9347768806843397,y=0.8839032510290749 a=wye,b=wye,i=4722,x=0.3742418961489814,y=0.5186714928696796 a=pan,b=wye,i=4723,x=0.7424435191645153,y=0.2988557048069972 a=wye,b=eks,i=4724,x=0.2784537107571192,y=0.9729902650787269 a=hat,b=wye,i=4725,x=0.07061996836486473,y=0.7738977079370831 a=zee,b=wye,i=4726,x=0.8269425781542478,y=0.7279915540846144 a=wye,b=pan,i=4727,x=0.9998228522652893,y=0.19388380502268276 a=eks,b=pan,i=4728,x=0.0933124028124549,y=0.6002309994378867 a=pan,b=zee,i=4729,x=0.18970289783165384,y=0.4228791314162068 a=zee,b=hat,i=4730,x=0.19347150884164055,y=0.37509711156847003 a=eks,b=zee,i=4731,x=0.8015159150372596,y=0.006137056655737272 a=zee,b=wye,i=4732,x=0.9567066838864685,y=0.6222637241828745 a=pan,b=eks,i=4733,x=0.2972122648067026,y=0.8561276270460755 a=hat,b=eks,i=4734,x=0.4361140296691789,y=0.19415398432919728 a=eks,b=zee,i=4735,x=0.028008275847919872,y=0.12986606641246612 a=eks,b=pan,i=4736,x=0.3770691592676825,y=0.7987276999117943 a=eks,b=hat,i=4737,x=0.6487232074787501,y=0.3406218786292676 a=pan,b=pan,i=4738,x=0.10422609081686773,y=0.7198350875588949 a=zee,b=pan,i=4739,x=0.7741427673583083,y=0.26198990214937334 a=hat,b=wye,i=4740,x=0.1119893643732226,y=0.41788347372200485 a=hat,b=eks,i=4741,x=0.7241531241241961,y=0.9089044568897544 a=hat,b=wye,i=4742,x=0.8802453504639547,y=0.7366398321703834 a=eks,b=pan,i=4743,x=0.2504490581104497,y=0.29547558676954633 a=hat,b=wye,i=4744,x=0.4979148854618458,y=0.11700636396309227 a=wye,b=zee,i=4745,x=0.9393988198376061,y=0.485008216753421 a=eks,b=pan,i=4746,x=0.16989991264520043,y=0.018451772273192057 a=pan,b=wye,i=4747,x=0.6742534054657287,y=0.2313198886390252 a=zee,b=pan,i=4748,x=0.7418671304073968,y=0.8575401492075233 a=wye,b=zee,i=4749,x=0.42654335022770995,y=0.5311170879512087 a=zee,b=zee,i=4750,x=0.27987943738440046,y=0.6560072393556038 a=hat,b=pan,i=4751,x=0.5858041848273323,y=0.6295306564064627 a=zee,b=eks,i=4752,x=0.4429063010177615,y=0.6964425867324696 a=zee,b=wye,i=4753,x=0.8545851137163856,y=0.9679476038287586 a=zee,b=wye,i=4754,x=0.0024174510881032063,y=0.8687606547332845 a=eks,b=hat,i=4755,x=0.7839088793029254,y=0.524722394465856 a=pan,b=pan,i=4756,x=0.397023046047854,y=0.11000986851499284 a=wye,b=eks,i=4757,x=0.21991834430842194,y=0.3045979240462181 a=hat,b=hat,i=4758,x=0.3227532114958719,y=0.8948973181698502 a=pan,b=wye,i=4759,x=0.26645602877267305,y=0.7437714335312278 a=zee,b=wye,i=4760,x=0.022667005941863883,y=0.45092868070487113 a=zee,b=zee,i=4761,x=0.5717912178641216,y=0.35870172894832364 a=zee,b=hat,i=4762,x=0.9059466160415109,y=0.6087785388744085 a=zee,b=pan,i=4763,x=0.9251602172892174,y=0.40701572328742064 a=zee,b=wye,i=4764,x=0.31384490226563877,y=0.7399150124011242 a=zee,b=zee,i=4765,x=0.9455569776929973,y=0.8604499298561917 a=zee,b=eks,i=4766,x=0.37773136340995606,y=0.25694678545170857 a=eks,b=eks,i=4767,x=0.7219583517207702,y=0.727638969023518 a=zee,b=pan,i=4768,x=0.08069188699987828,y=0.976850177257017 a=zee,b=wye,i=4769,x=0.9897615767481157,y=0.6975316151559802 a=eks,b=hat,i=4770,x=0.23499057343433494,y=0.47659932458800036 a=wye,b=hat,i=4771,x=0.1844047653981028,y=0.022663675164210306 a=zee,b=wye,i=4772,x=0.09271907588361772,y=0.13142402431280997 a=eks,b=eks,i=4773,x=0.4725220407504178,y=0.9526498802931831 a=hat,b=pan,i=4774,x=0.3043981591451792,y=0.7226259220082152 a=eks,b=eks,i=4775,x=0.1884342557611145,y=0.8408029444627654 a=hat,b=hat,i=4776,x=0.2338057751520678,y=0.09800686529861335 a=wye,b=eks,i=4777,x=0.7891590901274228,y=0.34487105920096073 a=zee,b=pan,i=4778,x=0.3599347922656181,y=0.18218338698595427 a=hat,b=hat,i=4779,x=0.5478941318063015,y=0.039942288716842134 a=eks,b=pan,i=4780,x=0.5515560102138437,y=0.9790752715442088 a=pan,b=zee,i=4781,x=0.9530344417320495,y=0.5854254757860599 a=zee,b=eks,i=4782,x=0.2679740964392081,y=0.9539737990088547 a=zee,b=hat,i=4783,x=0.8937130637825316,y=0.9482001237924185 a=eks,b=zee,i=4784,x=0.535394341606814,y=0.9507496372757723 a=hat,b=pan,i=4785,x=0.6905839897107999,y=0.7545488329990303 a=hat,b=wye,i=4786,x=0.01916979841839017,y=0.2780999914884037 a=hat,b=zee,i=4787,x=0.9707632375104736,y=0.823966840635361 a=zee,b=eks,i=4788,x=0.2900344019459282,y=0.4551744845405584 a=eks,b=zee,i=4789,x=0.581964402755552,y=0.6562137540702333 a=eks,b=wye,i=4790,x=0.5159650104250221,y=0.6583847382580487 a=pan,b=pan,i=4791,x=0.4314747391635376,y=0.11719605119566623 a=eks,b=pan,i=4792,x=0.25200941717038683,y=0.5319239571062138 a=pan,b=wye,i=4793,x=0.8596672453072937,y=0.7203822316562272 a=zee,b=pan,i=4794,x=0.41119242720559135,y=0.16288056185655064 a=eks,b=hat,i=4795,x=0.3563187687683087,y=0.9628268767119371 a=hat,b=hat,i=4796,x=0.8166219529056433,y=0.38174138297770366 a=hat,b=wye,i=4797,x=0.6239839123252174,y=0.5446595433698003 a=pan,b=wye,i=4798,x=0.5914484609361321,y=0.5863799669381212 a=zee,b=eks,i=4799,x=0.05246384333604992,y=0.7084334011458191 a=hat,b=wye,i=4800,x=0.7975814555638998,y=0.6742547886299404 a=eks,b=zee,i=4801,x=0.32122401484315466,y=0.17580532480506172 a=hat,b=pan,i=4802,x=0.9532078757744794,y=0.11431895466047837 a=eks,b=eks,i=4803,x=0.07646493070387805,y=0.43572994178375957 a=pan,b=hat,i=4804,x=0.7521042104003381,y=0.40785444565501394 a=hat,b=pan,i=4805,x=0.2078967635625505,y=0.39646961279273085 a=wye,b=wye,i=4806,x=0.2900119081724013,y=0.7387990125329715 a=zee,b=wye,i=4807,x=0.5734922188510542,y=0.9110138243945486 a=wye,b=wye,i=4808,x=0.5888053656056721,y=0.6357658487621642 a=hat,b=wye,i=4809,x=0.9209565722669064,y=0.6387306072748612 a=eks,b=hat,i=4810,x=0.5922647221870971,y=0.8442189902394986 a=wye,b=zee,i=4811,x=0.03606766464192224,y=0.6770940604237418 a=wye,b=wye,i=4812,x=0.6090893281675697,y=0.647518662887554 a=eks,b=hat,i=4813,x=0.5365520827981886,y=0.3202367220791762 a=eks,b=eks,i=4814,x=0.1473763964352245,y=0.8033805314306441 a=zee,b=eks,i=4815,x=0.23445194234627598,y=0.26893786383591456 a=eks,b=wye,i=4816,x=0.1147712927157829,y=0.7402057160513233 a=zee,b=zee,i=4817,x=0.23202362739606153,y=0.47886038007736564 a=wye,b=wye,i=4818,x=0.7928418369663099,y=0.46501269022958036 a=eks,b=zee,i=4819,x=0.712974515799127,y=0.542449640039289 a=zee,b=wye,i=4820,x=0.3079653233324052,y=0.6574173411380181 a=eks,b=pan,i=4821,x=0.09797648760110378,y=0.1605809921671595 a=eks,b=pan,i=4822,x=0.7899521961417237,y=0.29314917908691485 a=wye,b=hat,i=4823,x=0.581757236497391,y=0.9463973717007303 a=hat,b=hat,i=4824,x=0.40413977500334364,y=0.08865258409882204 a=wye,b=hat,i=4825,x=0.7001704003542419,y=0.7416812627335253 a=zee,b=wye,i=4826,x=0.8846834351985541,y=0.9987381458494847 a=wye,b=zee,i=4827,x=0.9763864041558291,y=0.6651833167661081 a=eks,b=pan,i=4828,x=0.3701118364091578,y=0.929356390393571 a=wye,b=hat,i=4829,x=0.5458229710063858,y=0.12382895782525949 a=zee,b=hat,i=4830,x=0.5163276995322134,y=0.4142396117545545 a=pan,b=pan,i=4831,x=0.6131916476098028,y=0.7258426490475796 a=pan,b=pan,i=4832,x=0.6315103295350951,y=0.5044543655861339 a=eks,b=zee,i=4833,x=0.9679369605057206,y=0.011684326982985715 a=zee,b=wye,i=4834,x=0.34898673117720225,y=0.6580602623791368 a=eks,b=wye,i=4835,x=0.4939841533621645,y=0.5809417229170144 a=wye,b=pan,i=4836,x=0.569545208750187,y=0.7786619129324108 a=zee,b=wye,i=4837,x=0.5226423611496498,y=0.9996700213544367 a=eks,b=hat,i=4838,x=0.935982420664342,y=0.8799965660826473 a=wye,b=wye,i=4839,x=0.6500461572660748,y=0.44309281124092303 a=hat,b=zee,i=4840,x=0.4899151526577582,y=0.7548638962729715 a=pan,b=wye,i=4841,x=0.9467012654543959,y=0.4850494160239309 a=zee,b=pan,i=4842,x=0.30320721599497247,y=0.5095143023332701 a=hat,b=hat,i=4843,x=0.17685636300959084,y=0.7787222148601067 a=wye,b=zee,i=4844,x=0.626255827932442,y=0.4064381262515122 a=pan,b=zee,i=4845,x=0.28060256724829724,y=0.1194472053493133 a=hat,b=wye,i=4846,x=0.8368724870819061,y=0.28659871919539215 a=hat,b=wye,i=4847,x=0.4904015837947624,y=0.7008487005892795 a=pan,b=pan,i=4848,x=0.67625412710794,y=0.44913802116649393 a=eks,b=zee,i=4849,x=0.8081214809760484,y=0.4375026041190979 a=eks,b=eks,i=4850,x=0.2525590429487127,y=0.36945113778662786 a=hat,b=eks,i=4851,x=0.5131509545709081,y=0.583688721156048 a=zee,b=eks,i=4852,x=0.014141655432134415,y=0.5189268194067536 a=wye,b=eks,i=4853,x=0.8412950512846047,y=0.25597362111669464 a=eks,b=wye,i=4854,x=0.12400039159204757,y=0.5713605164804926 a=wye,b=eks,i=4855,x=0.8743253482906079,y=0.7740900498864154 a=eks,b=zee,i=4856,x=0.9765509957513644,y=0.06071911475075953 a=pan,b=wye,i=4857,x=0.23806525172795734,y=0.2959143584631805 a=pan,b=pan,i=4858,x=0.9189791410736298,y=0.7770463990190287 a=pan,b=zee,i=4859,x=0.8322629927658091,y=0.34582111363584955 a=zee,b=eks,i=4860,x=0.3338609486281813,y=0.3484284682131591 a=zee,b=hat,i=4861,x=0.13328569444496707,y=0.4177841139240035 a=zee,b=eks,i=4862,x=0.48622017397025397,y=0.07896067004609653 a=zee,b=wye,i=4863,x=0.6240325596862799,y=0.2809015820805495 a=wye,b=pan,i=4864,x=0.29934656970455364,y=0.401161898451611 a=wye,b=hat,i=4865,x=0.33964644206576833,y=0.37831409639409463 a=pan,b=hat,i=4866,x=0.3348192796730043,y=0.39422602502766824 a=hat,b=zee,i=4867,x=0.8800967275591628,y=0.869121595376977 a=pan,b=eks,i=4868,x=0.08813504131014349,y=0.8615201735498272 a=hat,b=hat,i=4869,x=0.03137488493693985,y=0.6013253974236795 a=zee,b=zee,i=4870,x=0.5723345813434529,y=0.5920424414132134 a=wye,b=hat,i=4871,x=0.42866884650575776,y=0.8587406078406857 a=wye,b=pan,i=4872,x=0.8048299563371534,y=0.09309848925430309 a=wye,b=hat,i=4873,x=0.48343329104464405,y=0.684262350564715 a=eks,b=pan,i=4874,x=0.9190574216192423,y=0.023243819371963403 a=pan,b=zee,i=4875,x=0.6013577540137748,y=0.636284103659697 a=hat,b=eks,i=4876,x=0.876674932281404,y=0.09417500045463179 a=wye,b=hat,i=4877,x=0.3699653574585806,y=0.4481319838637625 a=eks,b=zee,i=4878,x=0.8140883903787601,y=0.9675148391636573 a=eks,b=eks,i=4879,x=0.8227355186912324,y=0.754836723664535 a=hat,b=wye,i=4880,x=0.5107655326943182,y=0.429814017179746 a=wye,b=wye,i=4881,x=0.8494740781256328,y=0.4865120606762955 a=eks,b=wye,i=4882,x=0.5564517747676477,y=0.8364351449356273 a=pan,b=hat,i=4883,x=0.8723128492154898,y=0.44043984808323666 a=pan,b=hat,i=4884,x=0.9402178619522376,y=0.19405443014027346 a=eks,b=eks,i=4885,x=0.8707313650863101,y=0.8057609437403466 a=zee,b=hat,i=4886,x=0.7016030425978176,y=0.10558873487974474 a=hat,b=zee,i=4887,x=0.19592751855539559,y=0.6245017403424943 a=wye,b=pan,i=4888,x=0.24417888243946928,y=0.4591742086366801 a=eks,b=wye,i=4889,x=0.9179229941131368,y=0.2037862299046369 a=eks,b=wye,i=4890,x=0.04910880060108913,y=0.07316217290218352 a=hat,b=eks,i=4891,x=0.2297927732533699,y=0.6559737139197993 a=eks,b=wye,i=4892,x=0.630140714403855,y=0.4123205327848799 a=eks,b=zee,i=4893,x=0.8863621874744464,y=0.35341030613050206 a=wye,b=eks,i=4894,x=0.08956997835221292,y=0.15153433659257443 a=wye,b=eks,i=4895,x=0.2302595629324965,y=0.2862207000255006 a=eks,b=eks,i=4896,x=0.595542985856601,y=0.6247689899970194 a=zee,b=eks,i=4897,x=0.7608028013428353,y=0.878174748817996 a=pan,b=wye,i=4898,x=0.40450598472844423,y=0.9381773198691041 a=eks,b=zee,i=4899,x=0.1567102404262226,y=0.2213311716892986 a=hat,b=hat,i=4900,x=0.8901137791212611,y=0.6090349204378238 a=eks,b=hat,i=4901,x=0.4107962861135135,y=0.6382257944674624 a=zee,b=pan,i=4902,x=0.699059960351012,y=0.9885800960251768 a=zee,b=pan,i=4903,x=0.8266877732317284,y=0.0677848179065984 a=hat,b=wye,i=4904,x=0.30857036671389493,y=0.21668637382948186 a=hat,b=pan,i=4905,x=0.6411579594900462,y=0.5351923498013205 a=eks,b=pan,i=4906,x=0.6854190139070013,y=0.8299360694533708 a=pan,b=hat,i=4907,x=0.5936171298524064,y=0.7041056598923683 a=hat,b=eks,i=4908,x=0.8503470988840566,y=0.6331693431984986 a=zee,b=eks,i=4909,x=0.9517994594813314,y=0.07539953012409928 a=zee,b=eks,i=4910,x=0.4535445737616459,y=0.8218048881320029 a=pan,b=wye,i=4911,x=0.4369913287175713,y=0.4720871164245992 a=eks,b=hat,i=4912,x=0.9940947899133816,y=0.4687982909569981 a=zee,b=wye,i=4913,x=0.7975684270658338,y=0.6973895935548693 a=zee,b=hat,i=4914,x=0.8248078318753365,y=0.24648082781434477 a=pan,b=hat,i=4915,x=0.5972128798923884,y=0.02932462768715416 a=zee,b=wye,i=4916,x=0.6624686517748942,y=0.8016741542650369 a=pan,b=pan,i=4917,x=0.24891816767946373,y=0.7798969646202224 a=zee,b=zee,i=4918,x=0.641375026211945,y=0.8347424300045329 a=wye,b=eks,i=4919,x=0.22099244372718618,y=0.4659468290849962 a=eks,b=zee,i=4920,x=0.7311583488804345,y=0.07752342335337659 a=hat,b=hat,i=4921,x=0.5785465847836638,y=0.6908978810578349 a=pan,b=pan,i=4922,x=0.7647463305911298,y=0.28073564029507714 a=pan,b=pan,i=4923,x=0.7385181536058433,y=0.361414367741285 a=hat,b=pan,i=4924,x=0.40224441655955634,y=0.19530268026233755 a=hat,b=hat,i=4925,x=0.653842164262253,y=0.6280602144296272 a=eks,b=hat,i=4926,x=0.5370983012158481,y=0.8265755341115193 a=pan,b=hat,i=4927,x=0.20003498013779974,y=0.33067633213900816 a=hat,b=eks,i=4928,x=0.2616862784842936,y=0.8976330171178399 a=zee,b=wye,i=4929,x=0.6597792701685063,y=0.5747306201637469 a=wye,b=zee,i=4930,x=0.7005469670714589,y=0.8590565664901815 a=eks,b=wye,i=4931,x=0.056783946256193096,y=0.13845635335075446 a=zee,b=hat,i=4932,x=0.17914823686110226,y=0.3724424181901871 a=wye,b=eks,i=4933,x=0.35047905702830917,y=0.03585739880658767 a=wye,b=hat,i=4934,x=0.5052702257066015,y=0.26639197043310225 a=hat,b=pan,i=4935,x=0.7192181204742805,y=0.3595231416956127 a=pan,b=pan,i=4936,x=0.2268254080621852,y=0.4964858179117778 a=zee,b=wye,i=4937,x=0.6231176411317095,y=0.25674942672821843 a=pan,b=wye,i=4938,x=0.8307759374051367,y=0.19772109525743065 a=pan,b=pan,i=4939,x=0.9918663359881192,y=0.3908108219044335 a=eks,b=wye,i=4940,x=0.3939161722668897,y=0.9425714270572593 a=pan,b=wye,i=4941,x=0.684790210390548,y=0.9744745064587994 a=eks,b=zee,i=4942,x=0.7765052392233155,y=0.12663912158745527 a=pan,b=pan,i=4943,x=0.27521613107535237,y=0.035785181333226945 a=zee,b=pan,i=4944,x=0.5842395564913692,y=0.011897528078530284 a=hat,b=pan,i=4945,x=0.28514048743680753,y=0.07363097335604496 a=hat,b=wye,i=4946,x=0.4057436295571034,y=0.571241351522998 a=pan,b=pan,i=4947,x=0.08892185709515954,y=0.824188422644117 a=wye,b=hat,i=4948,x=0.31710176239516497,y=0.2704638711875881 a=hat,b=hat,i=4949,x=0.7395993281771386,y=0.5735970605731027 a=zee,b=wye,i=4950,x=0.9215266366214452,y=0.4500407010606755 a=pan,b=zee,i=4951,x=0.9198627133436097,y=0.2906368510730867 a=zee,b=eks,i=4952,x=0.3969923775629448,y=0.22024693929882533 a=hat,b=eks,i=4953,x=0.5154408810016854,y=0.7038009086382059 a=wye,b=hat,i=4954,x=0.7843273989738635,y=0.3830263696806163 a=wye,b=hat,i=4955,x=0.8340489175824841,y=0.6288838568483295 a=eks,b=zee,i=4956,x=0.7811008985162822,y=0.8018574276178609 a=eks,b=pan,i=4957,x=0.19948892249539518,y=0.6412104115690623 a=hat,b=pan,i=4958,x=0.32954001616237283,y=0.13809011794903436 a=hat,b=wye,i=4959,x=0.3753128948010216,y=0.47542625730960586 a=pan,b=zee,i=4960,x=0.775513146568018,y=0.10589570588100916 a=hat,b=hat,i=4961,x=0.4416884389198312,y=0.9511653213275143 a=zee,b=wye,i=4962,x=0.3532053262185273,y=0.5274524054522398 a=pan,b=hat,i=4963,x=0.7498291735257391,y=0.2463257969663506 a=eks,b=hat,i=4964,x=0.9386114992431355,y=0.39299390498123243 a=zee,b=hat,i=4965,x=0.45139611357151777,y=0.38795035866424066 a=wye,b=pan,i=4966,x=0.07045237248114167,y=0.8099864640689171 a=wye,b=hat,i=4967,x=0.24118009132354112,y=0.1629785769528157 a=hat,b=wye,i=4968,x=0.04728174638088167,y=0.24887900862466006 a=zee,b=zee,i=4969,x=0.04313535474378283,y=0.9961893037121993 a=wye,b=zee,i=4970,x=0.64845292806442,y=0.0783662989719438 a=wye,b=hat,i=4971,x=0.1358347479828308,y=0.5733638726371927 a=zee,b=pan,i=4972,x=0.8445417535581274,y=0.5401648117511082 a=pan,b=wye,i=4973,x=0.8602817547452486,y=0.3630459570585407 a=pan,b=zee,i=4974,x=0.7126917418857502,y=0.45078360189374256 a=hat,b=hat,i=4975,x=0.8793776042522701,y=0.27141043268942633 a=zee,b=zee,i=4976,x=0.05992605295674014,y=0.7074936036971408 a=hat,b=wye,i=4977,x=0.346394513794262,y=0.29350246124167567 a=pan,b=wye,i=4978,x=0.5095513696287198,y=0.6796749104642862 a=wye,b=pan,i=4979,x=0.21965536908012684,y=0.9260144908739824 a=eks,b=wye,i=4980,x=0.7947621013643159,y=0.3813039850148131 a=eks,b=hat,i=4981,x=0.6239763460715818,y=0.5785443365814726 a=wye,b=zee,i=4982,x=0.23421805243604576,y=0.8666355498558119 a=hat,b=pan,i=4983,x=0.8485485930791395,y=0.4491405780816806 a=zee,b=wye,i=4984,x=0.052468448246404065,y=0.7811213755089573 a=wye,b=pan,i=4985,x=0.7439428126731077,y=0.9235490434329954 a=zee,b=zee,i=4986,x=0.8301353367964757,y=0.8649908229299215 a=hat,b=pan,i=4987,x=0.7155127400138539,y=0.725960059877104 a=hat,b=zee,i=4988,x=0.18338886820824507,y=0.8754893547448714 a=eks,b=zee,i=4989,x=0.018601982778751247,y=0.7913367608240889 a=pan,b=zee,i=4990,x=0.6245117285311684,y=0.5893294863439663 a=hat,b=eks,i=4991,x=0.8595121491036393,y=0.03409935768812744 a=pan,b=eks,i=4992,x=0.30073741634815365,y=0.27875382911011104 a=hat,b=zee,i=4993,x=0.5620368555651936,y=0.11559735452435582 a=pan,b=zee,i=4994,x=0.46131994902690476,y=0.9908240648244072 a=eks,b=eks,i=4995,x=0.13302596047508553,y=0.6892154279564321 a=pan,b=pan,i=4996,x=0.13517161511402043,y=0.8982044069226925 a=zee,b=hat,i=4997,x=0.5678552312876715,y=0.135724108125433 a=pan,b=hat,i=4998,x=0.9535726959631937,y=0.8197092073820271 a=hat,b=hat,i=4999,x=0.20718170417583293,y=0.15443490334276233 a=eks,b=eks,i=5000,x=0.5474103987606213,y=0.8639022623566207 a=zee,b=wye,i=5001,x=0.08843009472207297,y=0.14945328753720988 a=wye,b=zee,i=5002,x=0.11843248048480792,y=0.10564749120283823 a=pan,b=pan,i=5003,x=0.4789366550469353,y=0.22717511611934216 a=eks,b=wye,i=5004,x=0.47636937977487326,y=0.2810082791040678 a=pan,b=wye,i=5005,x=0.6626206294858628,y=0.9073394670955045 a=zee,b=hat,i=5006,x=0.19063843659030766,y=0.9540528860502674 a=pan,b=eks,i=5007,x=0.32167311196502024,y=0.9736668589456996 a=wye,b=wye,i=5008,x=0.03995088246162504,y=0.8906248987030765 a=zee,b=eks,i=5009,x=0.03028572303145005,y=0.9955507546832659 a=zee,b=eks,i=5010,x=0.09758243590212268,y=0.9326749078724424 a=wye,b=zee,i=5011,x=0.5166258594604775,y=0.31080741827085223 a=hat,b=zee,i=5012,x=0.10474935534605045,y=0.8820142826206279 a=eks,b=eks,i=5013,x=0.6206929828322025,y=0.31290830603904707 a=eks,b=pan,i=5014,x=0.7386573050111648,y=0.9236218998819093 a=wye,b=wye,i=5015,x=0.2541399902465252,y=0.9389113315138905 a=pan,b=eks,i=5016,x=0.4869636506082311,y=0.9502946331199825 a=zee,b=zee,i=5017,x=0.5038628336682738,y=0.6629947699756096 a=pan,b=hat,i=5018,x=0.888380448419866,y=0.9524601673710467 a=hat,b=pan,i=5019,x=0.33990101411005635,y=0.4348664315239562 a=zee,b=wye,i=5020,x=0.3672167922652847,y=0.3368467808484725 a=wye,b=zee,i=5021,x=0.07663456505244592,y=0.2631577836245168 a=pan,b=hat,i=5022,x=0.060489795371573285,y=0.8285572517841496 a=hat,b=wye,i=5023,x=0.7884614415246883,y=0.7586781551216389 a=pan,b=hat,i=5024,x=0.20846872150137863,y=0.2990773668794384 a=pan,b=eks,i=5025,x=0.588830614588479,y=0.21537813765089953 a=eks,b=eks,i=5026,x=0.12876049793274924,y=0.15585641140542594 a=eks,b=pan,i=5027,x=0.7572211331764787,y=0.2325134648801609 a=eks,b=zee,i=5028,x=0.35386542107386076,y=0.37117012291309726 a=eks,b=zee,i=5029,x=0.6649005742152306,y=0.968640074749029 a=zee,b=zee,i=5030,x=0.5875090511863751,y=0.2797909799076582 a=pan,b=eks,i=5031,x=0.6958326538393494,y=0.8708243653761277 a=eks,b=hat,i=5032,x=0.2945439456101079,y=0.15728143751762003 a=zee,b=pan,i=5033,x=0.974924650628186,y=0.9669570839581866 a=zee,b=zee,i=5034,x=0.9203642855427807,y=0.5206651807226769 a=eks,b=wye,i=5035,x=0.7880820779075502,y=0.7490003085045434 a=pan,b=eks,i=5036,x=0.6669037309103186,y=0.7852898502819553 a=eks,b=hat,i=5037,x=0.3861256788895815,y=0.9849326988419349 a=zee,b=eks,i=5038,x=0.27646436821800646,y=0.966795943629766 a=pan,b=hat,i=5039,x=0.05805817405705915,y=0.9932179958604398 a=zee,b=wye,i=5040,x=0.8804560258917605,y=0.5859741175246163 a=pan,b=wye,i=5041,x=0.8215150463068943,y=0.41746899820589767 a=pan,b=zee,i=5042,x=0.5160594808754981,y=0.34038151643511527 a=zee,b=pan,i=5043,x=0.4729643897380491,y=0.8082796095448785 a=wye,b=eks,i=5044,x=0.944933980409295,y=0.7127158343146003 a=eks,b=pan,i=5045,x=0.10534087226240663,y=0.7542791199133174 a=zee,b=pan,i=5046,x=0.43365029209841155,y=0.7392132819618191 a=eks,b=pan,i=5047,x=0.9240822180479168,y=0.4314552821051867 a=pan,b=zee,i=5048,x=0.7380043154543273,y=0.6241669393170018 a=hat,b=wye,i=5049,x=0.6158161626836199,y=0.23107643291636182 a=zee,b=pan,i=5050,x=0.5149206518156693,y=0.443722826592738 a=zee,b=zee,i=5051,x=0.10806215838843414,y=0.8316091936418926 a=zee,b=eks,i=5052,x=0.13123538643662702,y=0.8993374561672973 a=hat,b=hat,i=5053,x=0.023117725750200657,y=0.033915988824823384 a=zee,b=pan,i=5054,x=0.32314928212370087,y=0.05688167384675946 a=wye,b=wye,i=5055,x=0.3342612127307919,y=0.42233407978529247 a=hat,b=pan,i=5056,x=0.9666322975798146,y=0.17947032558912945 a=wye,b=pan,i=5057,x=0.6923954779265878,y=0.034012875290441835 a=pan,b=hat,i=5058,x=0.3825906955163786,y=0.8103254262396773 a=zee,b=zee,i=5059,x=0.11722281926454714,y=0.4784698788530096 a=pan,b=wye,i=5060,x=0.3993713904293549,y=0.8630955008829282 a=hat,b=hat,i=5061,x=0.8982925202936236,y=0.5153152768869278 a=pan,b=wye,i=5062,x=0.6541733479114709,y=0.14435606729689698 a=hat,b=eks,i=5063,x=0.7404726614057833,y=0.14934213540808206 a=eks,b=hat,i=5064,x=0.11826065449979817,y=0.44361936119890544 a=eks,b=pan,i=5065,x=0.16113803077069544,y=0.1931224993069398 a=pan,b=zee,i=5066,x=0.160970845859988,y=0.3653498317855951 a=wye,b=pan,i=5067,x=0.984014519910755,y=0.1085442049474844 a=zee,b=zee,i=5068,x=0.513447706607767,y=0.9552034872186853 a=zee,b=pan,i=5069,x=0.9699280626129259,y=0.054007659482251835 a=zee,b=zee,i=5070,x=0.3974043085931761,y=0.04564461949638321 a=zee,b=wye,i=5071,x=0.8135506068560597,y=0.9608362809012473 a=hat,b=pan,i=5072,x=0.9182632141669294,y=0.43231306945460934 a=eks,b=wye,i=5073,x=0.6147484385420419,y=0.5363878643299302 a=pan,b=eks,i=5074,x=0.5845946846241253,y=0.6243144568720979 a=pan,b=eks,i=5075,x=0.06225295939318909,y=0.47296164563217147 a=eks,b=eks,i=5076,x=0.7982506064893715,y=0.35691237251141883 a=wye,b=eks,i=5077,x=0.231763398457011,y=0.29533799083169177 a=pan,b=pan,i=5078,x=0.7379292282342623,y=0.32576070412274116 a=eks,b=wye,i=5079,x=0.4620414482111399,y=0.10454449264714505 a=eks,b=pan,i=5080,x=0.4154239126338921,y=0.1558721394610474 a=zee,b=pan,i=5081,x=0.38422127165844955,y=0.6011019199719426 a=zee,b=eks,i=5082,x=0.12455848010524884,y=0.970273373226025 a=wye,b=pan,i=5083,x=0.598195485668647,y=0.7711986200741965 a=eks,b=hat,i=5084,x=0.5007295834146884,y=0.028607275454148873 a=pan,b=eks,i=5085,x=0.6467927352142951,y=0.6809546997794357 a=hat,b=wye,i=5086,x=0.5496362637078044,y=0.2720688549660476 a=zee,b=zee,i=5087,x=0.10493923293046115,y=0.4813239698030355 a=eks,b=eks,i=5088,x=0.8414465852290272,y=0.22833809125034366 a=eks,b=wye,i=5089,x=0.27190062244408597,y=0.8657800314514896 a=pan,b=pan,i=5090,x=0.6064110590077285,y=0.36771074250450764 a=zee,b=eks,i=5091,x=0.6465716391447923,y=0.23897122778060764 a=eks,b=pan,i=5092,x=0.14584747968792888,y=0.19250348835022613 a=hat,b=wye,i=5093,x=0.06193876102851703,y=0.7031996658938712 a=eks,b=hat,i=5094,x=0.490742515210689,y=0.8308001526807453 a=pan,b=zee,i=5095,x=0.12743414057293911,y=0.3674063708637675 a=zee,b=pan,i=5096,x=0.5190322323030374,y=0.3578341596299308 a=eks,b=wye,i=5097,x=0.33724586909672605,y=0.2808209264792111 a=zee,b=pan,i=5098,x=0.5191394718493332,y=0.6948029406893036 a=pan,b=eks,i=5099,x=0.4686142873190169,y=0.47194949482921567 a=wye,b=pan,i=5100,x=0.5289724539988195,y=0.45192202668859927 a=eks,b=hat,i=5101,x=0.05611052621758694,y=0.14551172850676686 a=hat,b=hat,i=5102,x=0.28592095486470515,y=0.5702639619125038 a=hat,b=eks,i=5103,x=0.45909975903968236,y=0.8370518995297732 a=zee,b=hat,i=5104,x=0.12383004586365431,y=0.25661110382216856 a=zee,b=wye,i=5105,x=0.5972154159415002,y=0.03575292723673351 a=pan,b=wye,i=5106,x=0.44560649854859324,y=0.44398213053605406 a=pan,b=eks,i=5107,x=0.2991869218909077,y=0.4855377015585889 a=pan,b=zee,i=5108,x=0.8696312098499749,y=0.9234420344814674 a=eks,b=pan,i=5109,x=0.6347308371468083,y=0.1326692680255398 a=eks,b=wye,i=5110,x=0.055715443104116136,y=0.4615507678180293 a=wye,b=hat,i=5111,x=0.14260896559625547,y=0.2842155054761949 a=eks,b=hat,i=5112,x=0.868450337333343,y=0.8706206691563101 a=zee,b=wye,i=5113,x=0.8961064659188982,y=0.1944648523597512 a=wye,b=eks,i=5114,x=0.44892526756143925,y=0.5497795546938405 a=wye,b=pan,i=5115,x=0.4740055676174042,y=0.7911350546389597 a=pan,b=hat,i=5116,x=0.8762799268435709,y=0.9446805166366606 a=wye,b=zee,i=5117,x=0.7818146150023622,y=0.3854558191994354 a=wye,b=pan,i=5118,x=0.49177947702902347,y=0.7423017808370791 a=wye,b=pan,i=5119,x=0.4794067150556538,y=0.07923269424861734 a=wye,b=wye,i=5120,x=0.7036317641291522,y=0.25076154186882316 a=pan,b=pan,i=5121,x=0.8862196092737421,y=0.0033279610366836465 a=pan,b=wye,i=5122,x=0.3687043552254645,y=0.8549560734268002 a=zee,b=pan,i=5123,x=0.6515686983034052,y=0.5100953103470156 a=hat,b=zee,i=5124,x=0.8484226442959659,y=0.3697927989244223 a=zee,b=zee,i=5125,x=0.4116570693381614,y=0.8943311044914664 a=eks,b=wye,i=5126,x=0.9547804139837082,y=0.47195131805052704 a=eks,b=pan,i=5127,x=0.011993047445383431,y=0.7287085495775942 a=wye,b=zee,i=5128,x=0.07513405469493029,y=0.9154830290251537 a=zee,b=zee,i=5129,x=0.12609531649583638,y=0.44052343410884454 a=hat,b=wye,i=5130,x=0.7684246903338762,y=0.23751976841777223 a=hat,b=hat,i=5131,x=0.8922493612645849,y=0.2882212197666263 a=zee,b=pan,i=5132,x=0.33080234532260044,y=0.3096178521788119 a=hat,b=wye,i=5133,x=0.3942617617355668,y=0.8686679943940434 a=zee,b=wye,i=5134,x=0.2827895360020647,y=0.2448957006369109 a=pan,b=hat,i=5135,x=0.09957083263754218,y=0.5980806620300303 a=wye,b=eks,i=5136,x=0.4056324583379335,y=0.08334576336977417 a=hat,b=eks,i=5137,x=0.878238719282208,y=0.6491135241981707 a=wye,b=hat,i=5138,x=0.06783170016557316,y=0.4197736525433723 a=zee,b=hat,i=5139,x=0.301521500457932,y=0.7493817768168342 a=hat,b=pan,i=5140,x=0.3051559696668491,y=0.06338171371155699 a=hat,b=pan,i=5141,x=0.24126630734948107,y=0.3415400162111678 a=zee,b=zee,i=5142,x=0.5053797938498257,y=0.6943665465448414 a=pan,b=wye,i=5143,x=0.2455006451228895,y=0.2381483502091848 a=eks,b=zee,i=5144,x=0.048487900564839426,y=0.7986829177323632 a=zee,b=eks,i=5145,x=0.943348462297874,y=0.49699730029153877 a=zee,b=wye,i=5146,x=0.31739948115727923,y=0.6000335929359446 a=pan,b=eks,i=5147,x=0.20821590282748392,y=0.05180957502134165 a=zee,b=wye,i=5148,x=0.6971578309400973,y=0.05130727558151871 a=zee,b=zee,i=5149,x=0.01730237891149944,y=0.7994974955185655 a=hat,b=hat,i=5150,x=0.5204676158996879,y=0.7837983020069176 a=pan,b=wye,i=5151,x=0.46792698874985184,y=0.8655145758102156 a=pan,b=eks,i=5152,x=0.7698104203177931,y=0.26202820594725107 a=eks,b=zee,i=5153,x=0.5599128818778365,y=0.6217154146552438 a=zee,b=zee,i=5154,x=0.9860645516631891,y=0.4316727707502638 a=hat,b=hat,i=5155,x=0.6598214440228759,y=0.3829372068865968 a=eks,b=wye,i=5156,x=0.8891940614044549,y=0.06487886134646581 a=zee,b=pan,i=5157,x=0.7088889371664757,y=0.5291365868969226 a=wye,b=wye,i=5158,x=0.03780907803981348,y=0.01743012834128732 a=wye,b=hat,i=5159,x=0.541375591656728,y=0.19271971067809746 a=zee,b=pan,i=5160,x=0.1291394701733155,y=0.3164888119812437 a=eks,b=zee,i=5161,x=0.7070972450015776,y=0.8576144505983694 a=pan,b=wye,i=5162,x=0.23503083628119015,y=0.3804966968759753 a=pan,b=wye,i=5163,x=0.7745902001026395,y=0.05547251429169031 a=zee,b=eks,i=5164,x=0.817955788881543,y=0.5354324301609987 a=wye,b=wye,i=5165,x=0.8025727679132887,y=0.19141681065547878 a=zee,b=hat,i=5166,x=0.7360375371224098,y=0.29561728150687583 a=zee,b=hat,i=5167,x=0.01949832966304421,y=0.44975230900638874 a=eks,b=hat,i=5168,x=0.7853520653542873,y=0.21913075886744116 a=hat,b=wye,i=5169,x=0.10431463074876668,y=0.9319628819493798 a=wye,b=pan,i=5170,x=0.2834142139187724,y=0.8015795778401339 a=wye,b=wye,i=5171,x=0.8563300778556382,y=0.29021146719669166 a=hat,b=eks,i=5172,x=0.8901432458076336,y=0.5906289428469621 a=eks,b=wye,i=5173,x=0.23209666592661993,y=0.7954117026433107 a=pan,b=wye,i=5174,x=0.7220313992623487,y=0.47674307211032296 a=zee,b=eks,i=5175,x=0.007929525800474901,y=0.7115763725040718 a=pan,b=hat,i=5176,x=0.13951096415676212,y=0.37397816099478665 a=wye,b=pan,i=5177,x=0.32426760784210895,y=0.6275207008763184 a=wye,b=hat,i=5178,x=0.8483367054488846,y=0.3438036340567002 a=pan,b=wye,i=5179,x=0.5722581464790939,y=0.6082504729241017 a=pan,b=wye,i=5180,x=0.4531005566059778,y=0.6317423583403005 a=zee,b=eks,i=5181,x=0.8810030632200981,y=0.38442701936628154 a=pan,b=zee,i=5182,x=0.5458504348562845,y=0.5606252991061377 a=wye,b=hat,i=5183,x=0.7217910708545336,y=0.698686710480415 a=hat,b=eks,i=5184,x=0.5362269296471793,y=0.05511158796442561 a=pan,b=wye,i=5185,x=0.28943459067392874,y=0.9963452393967427 a=eks,b=zee,i=5186,x=0.19471121838287642,y=0.8475932004442778 a=wye,b=eks,i=5187,x=0.27341937394530447,y=0.5835195238055988 a=pan,b=eks,i=5188,x=0.1098179895780228,y=0.691118264458782 a=pan,b=wye,i=5189,x=0.5424445870456038,y=0.47980328960531937 a=pan,b=zee,i=5190,x=0.958030425108842,y=0.9229656805294295 a=pan,b=wye,i=5191,x=0.34032539138935425,y=0.4003903325198842 a=hat,b=pan,i=5192,x=0.3435706571010647,y=0.06283363667654052 a=zee,b=wye,i=5193,x=0.01565153403082964,y=0.559742349020455 a=eks,b=eks,i=5194,x=0.9601222966912384,y=0.7746495793923044 a=pan,b=hat,i=5195,x=0.5165119272913388,y=0.8970096684776827 a=pan,b=hat,i=5196,x=0.5242448227650341,y=0.40727326602398184 a=hat,b=eks,i=5197,x=0.5268012119318143,y=0.9704796636500256 a=pan,b=pan,i=5198,x=0.5788360834761852,y=0.9163631840503775 a=zee,b=pan,i=5199,x=0.863846165540519,y=0.7926861461485262 a=wye,b=zee,i=5200,x=0.9308584180091819,y=0.1060885355033907 a=hat,b=pan,i=5201,x=0.13550559685784802,y=0.23666447032870253 a=hat,b=pan,i=5202,x=0.9333837848637749,y=0.7983610377673229 a=pan,b=zee,i=5203,x=0.8164395473206716,y=0.9295267627751691 a=hat,b=eks,i=5204,x=0.09343575555554806,y=0.30344155652002347 a=zee,b=hat,i=5205,x=0.28240510221521764,y=0.2545255694003048 a=zee,b=pan,i=5206,x=0.3994083205887524,y=0.07213558504539785 a=pan,b=zee,i=5207,x=0.5698284352568362,y=0.5897809603851609 a=zee,b=zee,i=5208,x=0.3216207044318503,y=0.038820482913941357 a=pan,b=wye,i=5209,x=0.8306447997004499,y=0.8384123743007208 a=eks,b=hat,i=5210,x=0.08770207583625389,y=0.7725018412751664 a=wye,b=zee,i=5211,x=0.33912997635684583,y=0.8105461466866878 a=zee,b=hat,i=5212,x=0.7610245335034946,y=0.23104051545907822 a=zee,b=wye,i=5213,x=0.630076553798416,y=0.4732456051973126 a=eks,b=wye,i=5214,x=0.6175594035658841,y=0.9608217208353017 a=hat,b=eks,i=5215,x=0.28256241866196097,y=0.265704893607123 a=hat,b=zee,i=5216,x=0.8249008956837504,y=0.7862378134305688 a=hat,b=pan,i=5217,x=0.4700457200943312,y=0.005846894154671878 a=eks,b=hat,i=5218,x=0.7091734686647354,y=0.9683424620144252 a=eks,b=pan,i=5219,x=0.08321970448060567,y=0.9552244458317039 a=zee,b=zee,i=5220,x=0.7678115603005319,y=0.17456048525769519 a=hat,b=hat,i=5221,x=0.6804959880554192,y=0.5106473873198336 a=hat,b=wye,i=5222,x=0.08046680632449676,y=0.5515390101660408 a=hat,b=zee,i=5223,x=0.28029330967388233,y=0.7219566130837053 a=zee,b=zee,i=5224,x=0.7555723920288009,y=0.3761074889073034 a=pan,b=wye,i=5225,x=0.4049308387224845,y=0.7002764807468328 a=hat,b=wye,i=5226,x=0.7522569018366815,y=0.18119883657776303 a=pan,b=pan,i=5227,x=0.04907194450053376,y=0.24371127321212294 a=eks,b=hat,i=5228,x=0.08589819615072136,y=0.1928776399714467 a=eks,b=hat,i=5229,x=0.5280780018220216,y=0.850193621850258 a=hat,b=pan,i=5230,x=0.3059897834653845,y=0.7239860853683812 a=zee,b=wye,i=5231,x=0.24344354397416768,y=0.9681438520522745 a=pan,b=hat,i=5232,x=0.1881342701340306,y=0.7919638741482248 a=zee,b=hat,i=5233,x=0.7794106496174618,y=0.950428895380262 a=eks,b=wye,i=5234,x=0.1964278841499737,y=0.9230114722930227 a=hat,b=zee,i=5235,x=0.5349332160444686,y=0.7212892273015341 a=zee,b=eks,i=5236,x=0.0096091347524081,y=0.05157241835503623 a=pan,b=wye,i=5237,x=0.29264897203906315,y=0.2708942584778229 a=wye,b=eks,i=5238,x=0.877475809945589,y=0.4753884279556253 a=zee,b=hat,i=5239,x=0.10804287516531197,y=0.25028720143889427 a=pan,b=zee,i=5240,x=0.038521217586762524,y=0.45833782252961597 a=pan,b=hat,i=5241,x=0.6242964208021841,y=0.46876845876825834 a=pan,b=pan,i=5242,x=0.03478916499976592,y=0.8872591850817888 a=eks,b=eks,i=5243,x=0.3532736876730329,y=0.8100993157058493 a=wye,b=eks,i=5244,x=0.4410158520384003,y=0.08878204317661487 a=hat,b=wye,i=5245,x=0.30542326696649835,y=0.03254190401750867 a=wye,b=wye,i=5246,x=0.2619681126430232,y=0.2649618519422796 a=hat,b=eks,i=5247,x=0.45824524247081966,y=0.6844159528310743 a=hat,b=eks,i=5248,x=0.3283595420804768,y=0.8574880365351013 a=hat,b=zee,i=5249,x=0.7484157555119979,y=0.39553557685807894 a=pan,b=pan,i=5250,x=0.7554789617512107,y=0.2317754776472134 a=zee,b=hat,i=5251,x=0.6787637703297714,y=0.8107713369785818 a=wye,b=hat,i=5252,x=0.04799306200946163,y=0.699111788491548 a=pan,b=eks,i=5253,x=0.09939382730538704,y=0.9181166624382701 a=eks,b=hat,i=5254,x=0.3788407507062852,y=0.6050730090302495 a=zee,b=eks,i=5255,x=0.5847457461108924,y=0.8796125841387396 a=hat,b=zee,i=5256,x=0.5958859328721237,y=0.5394313157526304 a=eks,b=zee,i=5257,x=0.6145812801413588,y=0.8667435600565327 a=hat,b=pan,i=5258,x=0.39378429867517395,y=0.66637394577698 a=wye,b=eks,i=5259,x=0.9417378953261469,y=0.4145045232597019 a=hat,b=pan,i=5260,x=0.1040138249574939,y=0.5711578035148099 a=zee,b=wye,i=5261,x=0.2807184907727448,y=0.6881546576599258 a=eks,b=zee,i=5262,x=0.6748387970430342,y=0.9842159808803176 a=zee,b=eks,i=5263,x=0.5854346090243887,y=0.24780046831336067 a=zee,b=zee,i=5264,x=0.6651087221905022,y=0.4694678243278747 a=eks,b=eks,i=5265,x=0.178487009198119,y=0.3389965086336105 a=hat,b=wye,i=5266,x=0.60584735950502,y=0.08711755746003325 a=hat,b=pan,i=5267,x=0.14941018319657196,y=0.42913266234393854 a=wye,b=wye,i=5268,x=0.44618372032109543,y=0.19531077190155655 a=wye,b=pan,i=5269,x=0.8715465668907355,y=0.15578281828771234 a=eks,b=zee,i=5270,x=0.272381988376838,y=0.749508925403637 a=hat,b=zee,i=5271,x=0.8731584572028818,y=0.8587026343639556 a=hat,b=wye,i=5272,x=0.7141686842916973,y=0.2536343098230014 a=hat,b=pan,i=5273,x=0.6161173798530847,y=0.5170002336730243 a=wye,b=wye,i=5274,x=0.9836997370643351,y=0.9073574715868198 a=zee,b=zee,i=5275,x=0.9271419947755198,y=0.7499953605856078 a=eks,b=zee,i=5276,x=0.4436574016008654,y=0.11521473164364193 a=wye,b=zee,i=5277,x=0.41785833930772587,y=0.5581905438338015 a=hat,b=zee,i=5278,x=0.6303081078068822,y=0.9708543000113369 a=eks,b=hat,i=5279,x=0.7724785778741878,y=0.8749355527936072 a=zee,b=pan,i=5280,x=0.019491215186811517,y=0.28573440717823495 a=hat,b=hat,i=5281,x=0.8966308328410811,y=0.8932890927799828 a=zee,b=eks,i=5282,x=0.20474699819177533,y=0.9563609260887708 a=eks,b=hat,i=5283,x=0.8232222331296849,y=0.43288890410832115 a=pan,b=pan,i=5284,x=0.06808879127275447,y=0.2961369332523437 a=hat,b=pan,i=5285,x=0.07045589395497931,y=0.06411882838638927 a=zee,b=pan,i=5286,x=0.5025476621481306,y=0.5455719768538321 a=hat,b=eks,i=5287,x=0.6864003316225611,y=0.08724809130852695 a=eks,b=wye,i=5288,x=0.9345047793469049,y=0.7545355491792637 a=eks,b=zee,i=5289,x=0.09683817897484082,y=0.15042392025928608 a=hat,b=zee,i=5290,x=0.2201144900883092,y=0.09304236894658524 a=pan,b=zee,i=5291,x=0.6437086955209985,y=0.6412853324081308 a=pan,b=pan,i=5292,x=0.7101999657039595,y=0.9654389825167757 a=zee,b=pan,i=5293,x=0.44434019344510023,y=0.3616886405725528 a=hat,b=hat,i=5294,x=0.4986619811254004,y=0.36527690926573364 a=wye,b=zee,i=5295,x=0.6218618299228648,y=0.9324975302931531 a=hat,b=wye,i=5296,x=0.3811141224627541,y=0.9228475537405691 a=eks,b=eks,i=5297,x=0.450776715605552,y=0.31636578533096016 a=pan,b=zee,i=5298,x=0.3086259636689451,y=0.06652636662046696 a=zee,b=wye,i=5299,x=0.4581205277744118,y=0.8883132608926249 a=hat,b=zee,i=5300,x=0.6065263542151584,y=0.8758808605345744 a=eks,b=pan,i=5301,x=0.26907393999080953,y=0.633331389237707 a=pan,b=hat,i=5302,x=0.2662060484446822,y=0.501911240454392 a=wye,b=zee,i=5303,x=0.030537351078086195,y=0.20700838585535786 a=wye,b=hat,i=5304,x=0.4745666526865788,y=0.3396776308478552 a=eks,b=zee,i=5305,x=0.5607499175198385,y=0.21583087167043014 a=eks,b=hat,i=5306,x=0.690451786737028,y=0.0861194392792598 a=pan,b=zee,i=5307,x=0.06684973668910421,y=0.9544628284207586 a=wye,b=zee,i=5308,x=0.7500932442964064,y=0.552958619063383 a=pan,b=zee,i=5309,x=0.2335642300224079,y=0.31164052398797637 a=pan,b=eks,i=5310,x=0.15387236958406036,y=0.43829110359848433 a=wye,b=zee,i=5311,x=0.7866346249384528,y=0.03570506892329006 a=hat,b=wye,i=5312,x=0.5514251601334069,y=0.4379220457409775 a=eks,b=wye,i=5313,x=0.0355425881526662,y=0.16802137840026887 a=eks,b=eks,i=5314,x=0.04767639014474101,y=0.7923199475995649 a=hat,b=pan,i=5315,x=0.22846522556430016,y=0.8271404016977637 a=wye,b=pan,i=5316,x=0.31445904414804127,y=0.235006707754 a=zee,b=wye,i=5317,x=0.4335088190275804,y=0.5671270126055555 a=hat,b=wye,i=5318,x=0.15817916140514576,y=0.6371355203785057 a=zee,b=zee,i=5319,x=0.9627644186331633,y=0.46453264491285806 a=pan,b=pan,i=5320,x=0.9101265684004383,y=0.8101420365566193 a=pan,b=hat,i=5321,x=0.7404633039474602,y=0.9639884498668673 a=zee,b=zee,i=5322,x=0.6420718148305066,y=0.37414212799368096 a=wye,b=hat,i=5323,x=0.4830324590268663,y=0.0404568640233397 a=hat,b=zee,i=5324,x=0.5028487276011456,y=0.020932159991859267 a=zee,b=pan,i=5325,x=0.888291122851125,y=0.5111470794632866 a=wye,b=pan,i=5326,x=0.07272409700902271,y=0.27564484500916986 a=wye,b=pan,i=5327,x=0.0888998337471314,y=0.9919041685553374 a=hat,b=pan,i=5328,x=0.3064216274886523,y=0.4890201595898237 a=pan,b=wye,i=5329,x=0.3470931183432189,y=0.1997795824920121 a=zee,b=zee,i=5330,x=0.13436961326496677,y=0.3095854896519281 a=zee,b=pan,i=5331,x=0.8655317519954471,y=0.8104322805331614 a=eks,b=wye,i=5332,x=0.01695205279543599,y=0.6253163249860758 a=wye,b=wye,i=5333,x=0.41853514055951446,y=0.46414849053819973 a=eks,b=wye,i=5334,x=0.9312528403346797,y=0.34690398003679423 a=hat,b=wye,i=5335,x=0.8146576023607562,y=0.517623963255214 a=wye,b=wye,i=5336,x=0.9644696679607304,y=0.17623585722771673 a=hat,b=wye,i=5337,x=0.0491647681854408,y=0.9084359968915301 a=wye,b=eks,i=5338,x=0.9183687166177615,y=0.6742918022088258 a=eks,b=zee,i=5339,x=0.6913946457851302,y=0.5236074895779744 a=wye,b=wye,i=5340,x=0.7574842345027994,y=0.35438559050849205 a=pan,b=pan,i=5341,x=0.9609080490571219,y=0.764751472995584 a=hat,b=hat,i=5342,x=0.9571224566918112,y=0.6488786174457046 a=eks,b=zee,i=5343,x=0.1297439418853782,y=0.10986446330230937 a=wye,b=pan,i=5344,x=0.2265442713227983,y=0.08671233554174995 a=zee,b=eks,i=5345,x=0.6690807314571691,y=0.5220733222869928 a=wye,b=zee,i=5346,x=0.42279438877482367,y=0.1357326426861194 a=zee,b=eks,i=5347,x=0.566584546381942,y=0.14424580074370563 a=eks,b=hat,i=5348,x=0.9402905188032046,y=0.6899005608656246 a=wye,b=wye,i=5349,x=0.8220699059748584,y=0.08673018838619662 a=eks,b=pan,i=5350,x=0.223912795614429,y=0.8705191204953174 a=pan,b=zee,i=5351,x=0.17054432883772475,y=0.3754155013143816 a=pan,b=hat,i=5352,x=0.577021048756712,y=0.8658764185620885 a=eks,b=zee,i=5353,x=0.6047802080751319,y=0.16748745069598325 a=zee,b=pan,i=5354,x=0.8138458432489908,y=0.887184873534984 a=hat,b=zee,i=5355,x=0.4409314249173867,y=0.16661996267618873 a=zee,b=wye,i=5356,x=0.9294777278187871,y=0.9218221729540071 a=zee,b=zee,i=5357,x=0.7978605597846053,y=0.19629225024825436 a=eks,b=eks,i=5358,x=0.020853766511345406,y=0.9622073813280082 a=pan,b=wye,i=5359,x=0.30351132190401986,y=0.6285435222862336 a=hat,b=eks,i=5360,x=0.20965717538739437,y=0.8407225718631762 a=wye,b=eks,i=5361,x=0.8752567055200561,y=0.9860616183578573 a=zee,b=pan,i=5362,x=0.7742820785303554,y=0.12159579314900681 a=eks,b=pan,i=5363,x=0.045340262727698866,y=0.8347997035721408 a=eks,b=eks,i=5364,x=0.27673456069026947,y=0.28606929907632006 a=hat,b=eks,i=5365,x=0.1389831981773636,y=0.958748587909282 a=hat,b=hat,i=5366,x=0.2805736404470527,y=0.39685097136131187 a=eks,b=hat,i=5367,x=0.506031079714652,y=0.9912645565514333 a=pan,b=zee,i=5368,x=0.6865182575714622,y=0.8704513374052988 a=zee,b=wye,i=5369,x=0.8603176374144329,y=0.3346439571733928 a=pan,b=eks,i=5370,x=0.9070851500395942,y=0.03151443822439248 a=wye,b=zee,i=5371,x=0.26330651984082165,y=0.312969179382553 a=zee,b=zee,i=5372,x=0.5395637542263729,y=0.876693303664991 a=zee,b=hat,i=5373,x=0.34909843746802205,y=0.8568124167530461 a=zee,b=zee,i=5374,x=0.3028178173036057,y=0.7391998484027293 a=hat,b=zee,i=5375,x=0.5150486678896874,y=0.5093614114895396 a=hat,b=zee,i=5376,x=0.26087420592676525,y=0.45387940157532647 a=zee,b=eks,i=5377,x=0.11113050876158048,y=0.019064162496037707 a=zee,b=hat,i=5378,x=0.7356184687449835,y=0.5091161605127379 a=wye,b=wye,i=5379,x=0.09703125778637067,y=0.25691589979049356 a=zee,b=eks,i=5380,x=0.3345104910149367,y=0.1516506429745581 a=eks,b=hat,i=5381,x=0.5792199947921147,y=0.49613092724134833 a=wye,b=eks,i=5382,x=0.6188424819758455,y=0.5722334124286547 a=wye,b=pan,i=5383,x=0.4199976827116998,y=0.6380529017621875 a=eks,b=zee,i=5384,x=0.7599800240198485,y=0.19856983882208867 a=eks,b=hat,i=5385,x=0.06854514347417606,y=0.028515802052052952 a=wye,b=zee,i=5386,x=0.31992003300785,y=0.9257458880403014 a=wye,b=zee,i=5387,x=0.8545498814228611,y=0.06322205211700338 a=eks,b=zee,i=5388,x=0.14459434374592373,y=0.42112443945304057 a=pan,b=zee,i=5389,x=0.11816306719121206,y=0.17831615949339463 a=zee,b=pan,i=5390,x=0.551475598918215,y=0.6565173979014076 a=hat,b=pan,i=5391,x=0.4696624324268569,y=0.9440798879738231 a=pan,b=hat,i=5392,x=0.2906675154826033,y=0.7331663429068216 a=pan,b=hat,i=5393,x=0.2596796215047702,y=0.9407425847640128 a=eks,b=wye,i=5394,x=0.6216628077513283,y=0.9763969655887303 a=zee,b=wye,i=5395,x=0.8476101473277529,y=0.9881007277790081 a=zee,b=zee,i=5396,x=0.8702478883993182,y=0.2813073047318746 a=eks,b=hat,i=5397,x=0.9584988429207648,y=0.16350049486702678 a=wye,b=eks,i=5398,x=0.36458407067281184,y=0.04100408848224302 a=wye,b=wye,i=5399,x=0.733413532545851,y=0.6459898444733033 a=pan,b=wye,i=5400,x=0.9665506125898256,y=0.5448152784578933 a=zee,b=hat,i=5401,x=0.8543887956499512,y=0.7439702074332549 a=pan,b=hat,i=5402,x=0.16703607056661052,y=0.678760520989282 a=pan,b=pan,i=5403,x=0.8295505457000276,y=0.08557288192430035 a=hat,b=eks,i=5404,x=0.24083859157948273,y=0.8456272874080909 a=hat,b=hat,i=5405,x=0.7303478280030506,y=0.08240241730334918 a=hat,b=hat,i=5406,x=0.16072785206888152,y=0.940229803599545 a=eks,b=pan,i=5407,x=0.8649757853523717,y=0.49430262836010985 a=hat,b=hat,i=5408,x=0.5776416796711862,y=0.38502333915273557 a=hat,b=pan,i=5409,x=0.5633298053737792,y=0.7410429711654063 a=eks,b=eks,i=5410,x=0.9778916491011578,y=0.2273478424516322 a=pan,b=eks,i=5411,x=0.7262036914700832,y=0.9187345564266572 a=zee,b=eks,i=5412,x=0.33286294808080064,y=0.3921681976941228 a=wye,b=eks,i=5413,x=0.08772931753470603,y=0.48815297744510433 a=eks,b=pan,i=5414,x=0.44377217382552636,y=0.13437156912545423 a=eks,b=eks,i=5415,x=0.43246842646662487,y=0.9003920363683975 a=eks,b=hat,i=5416,x=0.753762625636042,y=0.6313338577994543 a=pan,b=hat,i=5417,x=0.20986095023321283,y=0.278888203103681 a=zee,b=pan,i=5418,x=0.15332749400308754,y=0.8904428676045328 a=hat,b=eks,i=5419,x=0.46399468430524804,y=0.0717886401624439 a=zee,b=zee,i=5420,x=0.47725202464468663,y=0.9096066884668478 a=wye,b=eks,i=5421,x=0.4608256396986088,y=0.18257443066884294 a=hat,b=zee,i=5422,x=0.9062976974038087,y=0.825705654266679 a=pan,b=eks,i=5423,x=0.829675619825074,y=0.30094578297716856 a=zee,b=pan,i=5424,x=0.2627796756491889,y=0.05131765835402935 a=pan,b=wye,i=5425,x=0.9750271883009257,y=0.10505350281212911 a=wye,b=wye,i=5426,x=0.2694712165014862,y=0.617405875060473 a=hat,b=eks,i=5427,x=0.06062699861257914,y=0.14515726494650738 a=pan,b=wye,i=5428,x=0.9471818920457628,y=0.2665032520198297 a=hat,b=eks,i=5429,x=0.3317119302689199,y=0.45073390665129454 a=pan,b=hat,i=5430,x=0.16613227391144125,y=0.41913253603052736 a=zee,b=eks,i=5431,x=0.5545698300075519,y=0.9624415304532793 a=hat,b=hat,i=5432,x=0.9825886641650767,y=0.4606811454162322 a=hat,b=zee,i=5433,x=0.7849062201991618,y=0.9640442210529644 a=pan,b=wye,i=5434,x=0.027672040238877704,y=0.09364154641355082 a=zee,b=hat,i=5435,x=0.4045108520910917,y=0.36431937644373535 a=hat,b=zee,i=5436,x=0.9496952473063589,y=0.6756301296750051 a=zee,b=hat,i=5437,x=0.5978983969671523,y=0.6276473499153709 a=eks,b=hat,i=5438,x=0.38522029067066954,y=0.9206254386424841 a=eks,b=hat,i=5439,x=0.38811572418657825,y=0.07594870509481821 a=hat,b=pan,i=5440,x=0.3245042501769525,y=0.5860367509842646 a=eks,b=hat,i=5441,x=0.5113055435442414,y=0.9478634662218888 a=hat,b=hat,i=5442,x=0.649952463378999,y=0.40331287808319716 a=zee,b=pan,i=5443,x=0.2660546525494476,y=0.036573786936417774 a=hat,b=wye,i=5444,x=0.2933645151017673,y=0.8565796439445684 a=hat,b=hat,i=5445,x=0.19274932648900556,y=0.6752612195498396 a=zee,b=pan,i=5446,x=0.6843298638997956,y=0.18463787286549893 a=eks,b=zee,i=5447,x=0.4465765938644741,y=0.6465428046837856 a=wye,b=hat,i=5448,x=0.7104951786733581,y=0.007575728589058528 a=hat,b=wye,i=5449,x=0.05598891388977545,y=0.22520895137141883 a=hat,b=zee,i=5450,x=0.6973457907641605,y=0.3767547727152859 a=eks,b=hat,i=5451,x=0.22980925307219058,y=0.09539340024354548 a=pan,b=hat,i=5452,x=0.3157808212188198,y=0.6787208591042566 a=zee,b=zee,i=5453,x=0.08674939853988706,y=0.0016458788929679669 a=pan,b=hat,i=5454,x=0.45512276442779265,y=0.7647008695253613 a=wye,b=hat,i=5455,x=0.9223519005619959,y=0.9896263386831655 a=hat,b=zee,i=5456,x=0.2599314461144381,y=0.8810566831796974 a=wye,b=eks,i=5457,x=0.3716116598539073,y=0.6158074210009791 a=eks,b=zee,i=5458,x=0.04287045703879866,y=0.3387484748791293 a=eks,b=eks,i=5459,x=0.964192450580381,y=0.0021921221413634395 a=zee,b=hat,i=5460,x=0.16317765667465844,y=0.5350462588301713 a=pan,b=pan,i=5461,x=0.6162574043540692,y=0.8321486837007045 a=eks,b=pan,i=5462,x=0.1418039983669439,y=0.6211011915118961 a=zee,b=hat,i=5463,x=0.5986397200652216,y=0.6968533019592756 a=wye,b=eks,i=5464,x=0.8847165179059643,y=0.8396671337239269 a=eks,b=pan,i=5465,x=0.64956961455677,y=0.42814835565709897 a=wye,b=zee,i=5466,x=0.078362139340725,y=0.7041742329715265 a=pan,b=pan,i=5467,x=0.7658242784400351,y=0.6658002824538031 a=zee,b=wye,i=5468,x=0.7694464457122385,y=0.3630968380462761 a=eks,b=wye,i=5469,x=0.5573393787208576,y=0.5674857974105666 a=wye,b=wye,i=5470,x=0.9070377249974354,y=0.2288418409874835 a=hat,b=hat,i=5471,x=0.9390885842014736,y=0.4885661765278554 a=pan,b=hat,i=5472,x=0.15616642541017933,y=0.723291076738834 a=hat,b=pan,i=5473,x=0.8339379553110595,y=0.27272554707575325 a=zee,b=wye,i=5474,x=0.7147670868273149,y=0.5300588513631999 a=hat,b=hat,i=5475,x=0.6079530363728716,y=0.7302013509128558 a=eks,b=hat,i=5476,x=0.20009244252935454,y=0.3819915946964063 a=eks,b=wye,i=5477,x=0.39259835612758154,y=0.30659538127782704 a=hat,b=wye,i=5478,x=0.6770531656328236,y=0.6798247125178067 a=wye,b=hat,i=5479,x=0.8464109156551775,y=0.5746477726666506 a=zee,b=zee,i=5480,x=0.5016540167129663,y=0.8741956310027429 a=wye,b=hat,i=5481,x=0.6695686221456726,y=0.689441485231751 a=zee,b=zee,i=5482,x=0.6069552630891367,y=0.8327367055952278 a=eks,b=eks,i=5483,x=0.7469659158360071,y=0.10223878164983224 a=zee,b=pan,i=5484,x=0.9278433464500453,y=0.1755972033710903 a=zee,b=pan,i=5485,x=0.5724120522769688,y=0.03415735625364058 a=zee,b=wye,i=5486,x=0.3960740290371987,y=0.2157291640948238 a=zee,b=wye,i=5487,x=0.4006137623075525,y=0.915996687470202 a=wye,b=wye,i=5488,x=0.3501090213998701,y=0.1419133192803893 a=eks,b=eks,i=5489,x=0.86861919099865,y=0.25681726556775375 a=wye,b=hat,i=5490,x=0.0114773666847795,y=0.024645492270649272 a=pan,b=eks,i=5491,x=0.37445278083566247,y=0.1319415773692295 a=pan,b=eks,i=5492,x=0.24969695350122256,y=0.7787009090435869 a=hat,b=wye,i=5493,x=0.1382138485389508,y=0.42533800225303686 a=zee,b=pan,i=5494,x=0.8834013775449513,y=0.532739443419528 a=hat,b=pan,i=5495,x=0.06870299529036838,y=0.16955231705247786 a=pan,b=eks,i=5496,x=0.7348263636816107,y=0.8630644835981002 a=pan,b=wye,i=5497,x=0.18130548510310573,y=0.012524267398086986 a=zee,b=wye,i=5498,x=0.07850770050431843,y=0.6592896086014353 a=eks,b=wye,i=5499,x=0.12579070445810636,y=0.027946488029312544 a=zee,b=hat,i=5500,x=0.31461267260641923,y=0.0748646953586749 a=eks,b=pan,i=5501,x=0.6387163017917407,y=0.9935696733123411 a=zee,b=wye,i=5502,x=0.43904419266704897,y=0.4569132922221508 a=eks,b=pan,i=5503,x=0.8033268068277595,y=0.18844163406954773 a=zee,b=eks,i=5504,x=0.9596958577456198,y=0.04773563051124652 a=hat,b=wye,i=5505,x=0.5520964703015074,y=0.48453868182721893 a=wye,b=zee,i=5506,x=0.4087385270797551,y=0.8564815497838665 a=eks,b=pan,i=5507,x=0.21391759502009422,y=0.3447041692322321 a=hat,b=eks,i=5508,x=0.27910653275458874,y=0.5485292937357691 a=hat,b=pan,i=5509,x=0.0989266416174771,y=0.6959930085614316 a=pan,b=hat,i=5510,x=0.4611680765379149,y=0.7214873034272665 a=eks,b=wye,i=5511,x=0.23798712129455957,y=0.7587550612183068 a=eks,b=wye,i=5512,x=0.5807870919230165,y=0.9691165477002429 a=pan,b=pan,i=5513,x=0.12503735272775673,y=0.4355589149955563 a=pan,b=eks,i=5514,x=0.24662547688833314,y=0.3287438663802673 a=zee,b=pan,i=5515,x=0.6313995187707404,y=0.833564271162547 a=hat,b=zee,i=5516,x=0.33305390076062613,y=0.9170789339963947 a=wye,b=eks,i=5517,x=0.8721055830589473,y=0.02704639391207897 a=pan,b=pan,i=5518,x=0.14313525389664383,y=0.7459994619303395 a=eks,b=zee,i=5519,x=0.7813269749608942,y=0.43515581235296563 a=pan,b=pan,i=5520,x=0.12004377059603999,y=0.17842342731389704 a=wye,b=wye,i=5521,x=0.4952080825177475,y=0.16871841358834394 a=zee,b=pan,i=5522,x=0.36872049705368115,y=0.1990766711673171 a=pan,b=wye,i=5523,x=0.742045965934904,y=0.9721895926892108 a=eks,b=zee,i=5524,x=0.8701165441999673,y=0.5339961636745024 a=wye,b=pan,i=5525,x=0.49890360517452514,y=0.024484853806581164 a=pan,b=eks,i=5526,x=0.7026312260362405,y=0.8810518289214107 a=wye,b=eks,i=5527,x=0.7997008739733962,y=0.18410432351101302 a=hat,b=pan,i=5528,x=0.8212044358760883,y=0.11209149520678119 a=pan,b=eks,i=5529,x=0.8511463764647872,y=0.14138132753417088 a=hat,b=eks,i=5530,x=0.5258934621583872,y=0.720463955146462 a=zee,b=eks,i=5531,x=0.35366192891288517,y=0.08693096089863839 a=eks,b=pan,i=5532,x=0.02230190397042897,y=0.6075383296925656 a=hat,b=zee,i=5533,x=0.958788084715825,y=0.20611877870477535 a=pan,b=hat,i=5534,x=0.0019016743345633413,y=0.32222113968267996 a=hat,b=wye,i=5535,x=0.4214775778712955,y=0.22796016352171378 a=hat,b=hat,i=5536,x=0.7965347610723122,y=0.2771962774393667 a=zee,b=eks,i=5537,x=0.5232208554018066,y=0.7842118697965217 a=hat,b=eks,i=5538,x=0.4077121389029271,y=0.11707098355780121 a=wye,b=wye,i=5539,x=0.743441288773323,y=0.6405109845442226 a=hat,b=hat,i=5540,x=0.42899567587485843,y=0.23687426121264998 a=pan,b=zee,i=5541,x=0.8254948808955715,y=0.4991271884600853 a=zee,b=wye,i=5542,x=0.755488383171051,y=0.4137799115139683 a=hat,b=eks,i=5543,x=0.48020817778428815,y=0.9225205496681843 a=zee,b=eks,i=5544,x=0.6602401325197925,y=0.32279850833980206 a=hat,b=wye,i=5545,x=0.858697605273768,y=0.8576653967219389 a=pan,b=eks,i=5546,x=0.6631984443201948,y=0.3727938739078658 a=eks,b=hat,i=5547,x=0.6895459625786122,y=0.22640122479226865 a=eks,b=pan,i=5548,x=0.3627382468806156,y=0.0796990614162374 a=zee,b=eks,i=5549,x=0.7292096702579594,y=0.9691771087568819 a=eks,b=eks,i=5550,x=0.6327683854211364,y=0.6420822760549295 a=zee,b=eks,i=5551,x=0.28298845518306814,y=0.8947425604116854 a=pan,b=hat,i=5552,x=0.5841578438331838,y=0.1596820606396967 a=hat,b=zee,i=5553,x=0.5166466940884901,y=0.5215576515640856 a=pan,b=pan,i=5554,x=0.9579182517583037,y=0.18510227855201322 a=wye,b=zee,i=5555,x=0.8156182188735165,y=0.7385240536968077 a=pan,b=hat,i=5556,x=0.4092542192178087,y=0.8148464821295865 a=wye,b=pan,i=5557,x=0.25358407312884057,y=0.9664484962083387 a=hat,b=pan,i=5558,x=0.768872222650759,y=0.7571069129173444 a=zee,b=hat,i=5559,x=0.02119490837909377,y=0.7608765429541047 a=wye,b=eks,i=5560,x=0.5167434492366938,y=0.2556264017975728 a=zee,b=zee,i=5561,x=0.19901052822038778,y=0.010162787621391778 a=zee,b=zee,i=5562,x=0.010968218584134437,y=0.4064143237134189 a=pan,b=hat,i=5563,x=0.5922101576133584,y=0.4027972800052315 a=eks,b=wye,i=5564,x=0.49763688623866753,y=0.5883123179094881 a=pan,b=wye,i=5565,x=0.7684392835456383,y=0.3749236173392554 a=eks,b=zee,i=5566,x=0.8548967678474122,y=0.570131787889301 a=zee,b=zee,i=5567,x=0.31067383496587675,y=0.6147427008783484 a=eks,b=pan,i=5568,x=0.8429203216611878,y=0.1574744061469351 a=zee,b=hat,i=5569,x=0.08829574118086814,y=0.5348102685441779 a=pan,b=eks,i=5570,x=0.6920854194235941,y=0.6152462479121356 a=pan,b=pan,i=5571,x=0.6728243500766502,y=0.4062647573271557 a=wye,b=zee,i=5572,x=0.7192603411774698,y=0.4187864354572167 a=pan,b=pan,i=5573,x=0.4439499129311816,y=0.452364734358081 a=pan,b=eks,i=5574,x=0.20220091735345957,y=0.7994491452794874 a=wye,b=wye,i=5575,x=0.21178209452449626,y=0.15235066856869428 a=pan,b=hat,i=5576,x=0.2328237068625838,y=0.1466943672149028 a=wye,b=eks,i=5577,x=0.1463637145507638,y=0.27512353058563355 a=eks,b=eks,i=5578,x=0.7678172951406467,y=0.4330114463831388 a=hat,b=wye,i=5579,x=0.7640191949316547,y=0.24039019030979936 a=wye,b=hat,i=5580,x=0.302423176696171,y=0.8421273065109021 a=wye,b=hat,i=5581,x=0.8901857920101928,y=0.29658407519577457 a=wye,b=zee,i=5582,x=0.9976903742848702,y=0.45676971223633933 a=eks,b=hat,i=5583,x=0.9279820319463397,y=0.2328972990196413 a=hat,b=eks,i=5584,x=0.33098984262520037,y=0.558064177488057 a=zee,b=wye,i=5585,x=0.8492581279138114,y=0.3377131419417513 a=wye,b=hat,i=5586,x=0.3843644484125802,y=0.5395570591826665 a=pan,b=wye,i=5587,x=0.2563692488210999,y=0.8648625544244997 a=eks,b=pan,i=5588,x=0.47849756747842254,y=0.36440498978427904 a=zee,b=zee,i=5589,x=0.16028903050640975,y=0.7637743011708871 a=hat,b=eks,i=5590,x=0.3632486395529805,y=0.009397590758849828 a=zee,b=hat,i=5591,x=0.30560662975374475,y=0.7718259824315155 a=pan,b=pan,i=5592,x=0.39375784368183886,y=0.04590683905804471 a=zee,b=wye,i=5593,x=0.6639341156412852,y=0.21782811751505382 a=wye,b=eks,i=5594,x=0.748874819175722,y=0.5391318034694991 a=wye,b=zee,i=5595,x=0.14037849467735208,y=0.17046690443866652 a=zee,b=zee,i=5596,x=0.10182342354198881,y=0.5446008492963108 a=zee,b=pan,i=5597,x=0.6907943477760979,y=0.4189830850027354 a=eks,b=zee,i=5598,x=0.2962037835362923,y=0.36049737941380366 a=wye,b=pan,i=5599,x=0.16480658469175224,y=0.8389670972825451 a=zee,b=pan,i=5600,x=0.6488288447142824,y=0.8870043471299166 a=wye,b=eks,i=5601,x=0.9541704944878237,y=0.06050893170404792 a=hat,b=wye,i=5602,x=0.9634543762478623,y=0.2995192276364238 a=pan,b=eks,i=5603,x=0.713998278452672,y=0.6065522135018214 a=eks,b=pan,i=5604,x=0.9495183550398497,y=0.861843219886308 a=zee,b=wye,i=5605,x=0.9500848655829623,y=0.45916889205740574 a=pan,b=zee,i=5606,x=0.314494599736428,y=0.24386090680148387 a=zee,b=wye,i=5607,x=0.7689855715450897,y=0.11045228604478441 a=pan,b=pan,i=5608,x=0.2591280268253763,y=0.9062746985784103 a=wye,b=eks,i=5609,x=0.038203945200321776,y=0.5754771176043 a=wye,b=pan,i=5610,x=0.3513354907140842,y=0.23568099743397186 a=eks,b=wye,i=5611,x=0.5581667554162788,y=0.533651422581368 a=wye,b=pan,i=5612,x=0.6476139827218337,y=0.1625920960990147 a=hat,b=hat,i=5613,x=0.43541285982294176,y=0.9781241021866268 a=zee,b=hat,i=5614,x=0.07143295094027957,y=0.5146773830335898 a=zee,b=hat,i=5615,x=0.3921043983626502,y=0.12859994269629937 a=hat,b=hat,i=5616,x=0.12215970633938278,y=0.3357015949156391 a=hat,b=pan,i=5617,x=0.1867388485013709,y=0.11120997350204453 a=wye,b=eks,i=5618,x=0.6179065708118318,y=0.03936978657358048 a=pan,b=eks,i=5619,x=0.23990263600951223,y=0.8386791333746637 a=wye,b=zee,i=5620,x=0.8136012361181053,y=0.9246893690807032 a=zee,b=eks,i=5621,x=0.6936065900415402,y=0.9835121994811427 a=wye,b=hat,i=5622,x=0.46042861129071444,y=0.8690567617780255 a=hat,b=hat,i=5623,x=0.7847006863046383,y=0.9540584320255103 a=wye,b=zee,i=5624,x=0.6715918738207972,y=0.9248713771595384 a=hat,b=wye,i=5625,x=0.3458684025425872,y=0.27012900303390197 a=pan,b=eks,i=5626,x=0.5311033870913179,y=0.17537860987554665 a=eks,b=zee,i=5627,x=0.8021710394665355,y=0.8677575901404581 a=zee,b=zee,i=5628,x=0.22133674407714776,y=0.650517614686327 a=eks,b=hat,i=5629,x=0.19299554543178998,y=0.926482748769109 a=hat,b=pan,i=5630,x=0.6751229005765216,y=0.5680107534137527 a=pan,b=hat,i=5631,x=0.6215515202465142,y=0.7335723775728186 a=pan,b=wye,i=5632,x=0.8548923960863601,y=0.22525018696051402 a=zee,b=hat,i=5633,x=0.8768635937091291,y=0.17829195183165314 a=hat,b=zee,i=5634,x=0.6015751224700235,y=0.0644975490073253 a=pan,b=hat,i=5635,x=0.7276807776942956,y=0.8500606585761793 a=wye,b=eks,i=5636,x=0.4833228626835777,y=0.7378551070407615 a=eks,b=pan,i=5637,x=0.19782280979787448,y=0.16113009983532756 a=wye,b=eks,i=5638,x=0.6640345835133702,y=0.6498713803920758 a=hat,b=hat,i=5639,x=0.20821268257622816,y=0.4305417007597995 a=hat,b=hat,i=5640,x=0.5586511327847578,y=0.1326971674398928 a=pan,b=eks,i=5641,x=0.7319972100987417,y=0.719616216404303 a=pan,b=hat,i=5642,x=0.13804409751652513,y=0.9924728363763738 a=zee,b=pan,i=5643,x=0.5223512543043243,y=0.4991596521110977 a=eks,b=wye,i=5644,x=0.3698151588984483,y=0.17106212044489788 a=eks,b=hat,i=5645,x=0.7963153151177051,y=0.8008422439449929 a=pan,b=eks,i=5646,x=0.19219529269095814,y=0.20998226328210212 a=zee,b=wye,i=5647,x=0.3429668212121526,y=0.8081062419069119 a=eks,b=pan,i=5648,x=0.6185038317407525,y=0.13922536086565684 a=pan,b=zee,i=5649,x=0.1882750077103732,y=0.051490445358029824 a=pan,b=wye,i=5650,x=0.28997067788262,y=0.9817716356894414 a=zee,b=pan,i=5651,x=0.7900065659824048,y=0.8799973980821687 a=wye,b=hat,i=5652,x=0.6169368270983073,y=0.10348718268597767 a=zee,b=wye,i=5653,x=0.17648668002767787,y=0.680848224860555 a=pan,b=eks,i=5654,x=0.4277856265977521,y=0.46720306495008457 a=pan,b=wye,i=5655,x=0.6238246026482904,y=0.5005719727517985 a=hat,b=hat,i=5656,x=0.13794992086740376,y=0.8837838569509247 a=pan,b=zee,i=5657,x=0.10798159915883232,y=0.14419721657117324 a=wye,b=zee,i=5658,x=0.6608918667457152,y=0.9243582421976495 a=eks,b=wye,i=5659,x=0.6991477488632273,y=0.757988136039786 a=eks,b=eks,i=5660,x=0.6338110809908714,y=0.8899492379893515 a=pan,b=zee,i=5661,x=0.5036749461847732,y=0.26738310174407787 a=zee,b=hat,i=5662,x=0.8842361839832931,y=0.2166296985577939 a=pan,b=eks,i=5663,x=0.7069322205111267,y=0.3613403478317495 a=zee,b=zee,i=5664,x=0.9028085500044974,y=0.6560744841877679 a=eks,b=pan,i=5665,x=0.42180175898330097,y=0.5602780165419919 a=eks,b=wye,i=5666,x=0.11819158774260774,y=0.3269446466483843 a=hat,b=pan,i=5667,x=0.4124388603109588,y=0.32891147928157505 a=hat,b=hat,i=5668,x=0.28048754020684197,y=0.1586304642802714 a=pan,b=pan,i=5669,x=0.355899451932013,y=0.6719277980511792 a=wye,b=pan,i=5670,x=0.8835631178552948,y=0.030315290308040144 a=pan,b=zee,i=5671,x=0.6000348059150206,y=0.29058998333691977 a=eks,b=pan,i=5672,x=0.15818268756400555,y=0.06017126006059004 a=hat,b=zee,i=5673,x=0.2279653016908878,y=0.9182355806226783 a=eks,b=hat,i=5674,x=0.30002134346912324,y=0.5070589085102488 a=hat,b=eks,i=5675,x=0.6776164025070541,y=0.8270479553259737 a=hat,b=hat,i=5676,x=0.26316020747343927,y=0.4439406464012029 a=hat,b=wye,i=5677,x=0.21137471648135742,y=0.5132924852429177 a=wye,b=eks,i=5678,x=0.6936453571596785,y=0.5977687990521104 a=zee,b=wye,i=5679,x=0.038384056804088296,y=0.39062169520305345 a=wye,b=hat,i=5680,x=0.2396335274387169,y=0.5617745220517328 a=hat,b=pan,i=5681,x=0.754469633162002,y=0.0837659053517874 a=wye,b=wye,i=5682,x=0.13450523706607276,y=0.5466840856340288 a=pan,b=hat,i=5683,x=0.3334514488024498,y=0.8403356176006205 a=pan,b=eks,i=5684,x=0.5990374956703001,y=0.759556440814025 a=eks,b=wye,i=5685,x=0.2272695825818456,y=0.06890003755302965 a=hat,b=wye,i=5686,x=0.0781769662654741,y=0.610149228572904 a=pan,b=eks,i=5687,x=0.20540821693039724,y=0.4583791378818265 a=eks,b=eks,i=5688,x=0.2681427485140152,y=0.4723384743843706 a=wye,b=zee,i=5689,x=0.06033196478297487,y=0.7884610426494236 a=pan,b=pan,i=5690,x=0.15932061131003383,y=0.10750760915363755 a=pan,b=wye,i=5691,x=0.6927406446662911,y=0.9484436166272129 a=hat,b=hat,i=5692,x=0.5189985771163975,y=0.8788751540883317 a=eks,b=eks,i=5693,x=0.2268536055075211,y=0.07181079334560747 a=hat,b=zee,i=5694,x=0.9574100016777235,y=0.17039179071493438 a=zee,b=pan,i=5695,x=0.9393222489267224,y=0.774430899802153 a=zee,b=eks,i=5696,x=0.2640774691558284,y=0.8627504344994997 a=pan,b=eks,i=5697,x=0.0327219679391374,y=0.09248968708796146 a=hat,b=wye,i=5698,x=0.06810484760017288,y=0.6639875840703167 a=zee,b=zee,i=5699,x=0.6656525429975034,y=0.2656212467516811 a=pan,b=zee,i=5700,x=0.28090923774332355,y=0.8374951101696497 a=wye,b=wye,i=5701,x=0.1179627885550506,y=0.9975425331219988 a=eks,b=eks,i=5702,x=0.25289706880351914,y=0.2805563313790924 a=hat,b=pan,i=5703,x=0.72917739071484,y=0.690903665960745 a=zee,b=wye,i=5704,x=0.5782219259637615,y=0.6129742019787713 a=hat,b=zee,i=5705,x=0.04579072787896754,y=0.15799336306835265 a=hat,b=eks,i=5706,x=0.2189964629062231,y=0.6072901175002905 a=zee,b=zee,i=5707,x=0.5807599756368977,y=0.28039036085635494 a=hat,b=hat,i=5708,x=0.5348701164177605,y=0.871699930863178 a=zee,b=pan,i=5709,x=0.6457903828308892,y=0.9224142093441036 a=wye,b=zee,i=5710,x=0.7433946942246273,y=0.7685021078153906 a=wye,b=zee,i=5711,x=0.243617265440373,y=0.9593069077433208 a=hat,b=eks,i=5712,x=0.6655721179929885,y=0.6283331080904476 a=eks,b=eks,i=5713,x=0.5690397938907296,y=0.9770357412029763 a=wye,b=zee,i=5714,x=0.08482160064983257,y=0.03799417629580293 a=eks,b=eks,i=5715,x=0.6755655231911353,y=0.4811405314521109 a=eks,b=hat,i=5716,x=0.21238778822910676,y=0.3806052020082521 a=eks,b=wye,i=5717,x=0.6979537966601973,y=0.42962472621589876 a=zee,b=wye,i=5718,x=0.5593594936211146,y=0.16162369293678702 a=wye,b=pan,i=5719,x=0.5431877225362253,y=0.8355498406808398 a=eks,b=pan,i=5720,x=0.08305185712441976,y=0.051555598682940684 a=zee,b=hat,i=5721,x=0.2195036864656421,y=0.0024237944219759333 a=wye,b=zee,i=5722,x=0.10456345278337953,y=0.509746172766625 a=eks,b=zee,i=5723,x=0.21507165298767472,y=0.3682335327240591 a=hat,b=eks,i=5724,x=0.8143828554234033,y=0.24040241057094147 a=eks,b=eks,i=5725,x=0.9447207896646325,y=0.5966728037991648 a=wye,b=hat,i=5726,x=0.14625361456888575,y=0.5773510905462336 a=wye,b=zee,i=5727,x=0.8249759724947993,y=0.8786053736989866 a=wye,b=pan,i=5728,x=0.2648916398523009,y=0.36807949569468823 a=wye,b=zee,i=5729,x=0.38861160385421634,y=0.008675492900147463 a=eks,b=zee,i=5730,x=0.12149239438427939,y=0.4952581794297195 a=hat,b=wye,i=5731,x=0.9834987933267317,y=0.9382393032643578 a=hat,b=wye,i=5732,x=0.5015349091062511,y=0.6216857441435001 a=eks,b=pan,i=5733,x=0.13872819430672179,y=0.13383706933234074 a=hat,b=pan,i=5734,x=0.5107753291897712,y=0.1890771910893585 a=zee,b=eks,i=5735,x=0.16433787761695273,y=0.9899324406741649 a=pan,b=hat,i=5736,x=0.09547147433477066,y=0.8232711347746213 a=eks,b=eks,i=5737,x=0.9827804718012476,y=0.8380939985179561 a=wye,b=hat,i=5738,x=0.8055154582345196,y=0.6724553306516827 a=hat,b=pan,i=5739,x=0.6476551335592238,y=0.2601855690050563 a=eks,b=wye,i=5740,x=0.06533958654376182,y=0.08290954242914517 a=eks,b=pan,i=5741,x=0.8637268770032811,y=0.5213399189681543 a=hat,b=wye,i=5742,x=0.34236446310071245,y=0.9934982483299798 a=hat,b=eks,i=5743,x=0.5295348501354114,y=0.7258797581771135 a=hat,b=hat,i=5744,x=0.12378910131331311,y=0.40752356675537815 a=eks,b=wye,i=5745,x=0.3665816980119626,y=0.6375063009827584 a=hat,b=hat,i=5746,x=0.3584851213141641,y=0.7358326774690753 a=hat,b=zee,i=5747,x=0.43583700578338747,y=0.672265347255106 a=zee,b=pan,i=5748,x=0.7440532825684012,y=0.9785802799882344 a=zee,b=hat,i=5749,x=0.21090673582102115,y=0.1689004632484875 a=pan,b=pan,i=5750,x=0.8304494332695221,y=0.5545369624062666 a=zee,b=pan,i=5751,x=0.5728551154691659,y=0.6693087997390269 a=eks,b=wye,i=5752,x=0.4413629999732097,y=0.15979822952735956 a=wye,b=eks,i=5753,x=0.7095091807055749,y=0.724643932584749 a=zee,b=wye,i=5754,x=0.7672243199159505,y=0.2279066139221857 a=zee,b=zee,i=5755,x=0.3010837648341733,y=0.025119103758309502 a=pan,b=zee,i=5756,x=0.6193965896501459,y=0.8537626115609437 a=wye,b=hat,i=5757,x=0.1224660035525037,y=0.9089730465198579 a=wye,b=zee,i=5758,x=0.7467869025815791,y=0.7773472293348217 a=eks,b=zee,i=5759,x=0.5808704155987169,y=0.7833615756850842 a=hat,b=eks,i=5760,x=0.9162336115551181,y=0.823024870348188 a=eks,b=pan,i=5761,x=0.8487786036617613,y=0.622984817551366 a=wye,b=pan,i=5762,x=0.40655642829036065,y=0.4636508847184254 a=eks,b=zee,i=5763,x=0.5976566500579671,y=0.43395514824679315 a=zee,b=eks,i=5764,x=0.3648319525198409,y=0.8451336137273936 a=eks,b=hat,i=5765,x=0.18805948712913445,y=0.22065247387702902 a=hat,b=eks,i=5766,x=0.46718203983164364,y=0.5797529176785338 a=wye,b=wye,i=5767,x=0.3576483350283548,y=0.7099943913835636 a=zee,b=wye,i=5768,x=0.3112657659379815,y=0.7236135438320516 a=pan,b=wye,i=5769,x=0.12034641162140858,y=0.7632931531006384 a=wye,b=zee,i=5770,x=0.2844962427329081,y=0.46659983713341124 a=pan,b=hat,i=5771,x=0.8904572608374995,y=0.8849293322073792 a=wye,b=wye,i=5772,x=0.7038981127406301,y=0.494354667366391 a=pan,b=eks,i=5773,x=0.5155930172001615,y=0.9788581972056736 a=zee,b=eks,i=5774,x=0.28797189143581137,y=0.8675122476473998 a=zee,b=pan,i=5775,x=0.03055433366810012,y=0.1704580136613072 a=pan,b=eks,i=5776,x=0.7165945800863369,y=0.6653908462460456 a=pan,b=eks,i=5777,x=0.8730284129862198,y=0.6933278671481614 a=pan,b=zee,i=5778,x=0.18335757641115535,y=0.5465471193000622 a=zee,b=hat,i=5779,x=0.10449109525989031,y=0.09472821919765906 a=zee,b=wye,i=5780,x=0.4996898459570338,y=0.788832071937286 a=hat,b=hat,i=5781,x=0.9223990594381151,y=0.9860563250941797 a=pan,b=pan,i=5782,x=0.21543034149293305,y=0.7487921850342059 a=hat,b=zee,i=5783,x=0.6163250225253557,y=0.7015824283135457 a=zee,b=pan,i=5784,x=0.25355692244085803,y=0.5122385042700014 a=hat,b=wye,i=5785,x=0.40569525676284146,y=0.22909456416866192 a=wye,b=zee,i=5786,x=0.03516048679248873,y=0.8905801671138128 a=wye,b=eks,i=5787,x=0.21927016627884677,y=0.5789606863931362 a=pan,b=eks,i=5788,x=0.02515332637605694,y=0.5642073646656487 a=hat,b=wye,i=5789,x=0.8879926912167789,y=0.288087517987045 a=zee,b=zee,i=5790,x=0.8365237122409817,y=0.3161681746915882 a=pan,b=pan,i=5791,x=0.9821624001072915,y=0.035862016352741 a=hat,b=hat,i=5792,x=0.04225905159882992,y=0.11113794777514896 a=wye,b=hat,i=5793,x=0.7433843634275165,y=0.5164678527321154 a=eks,b=hat,i=5794,x=0.6887872847411916,y=0.485721605301096 a=wye,b=zee,i=5795,x=0.6399305400537463,y=0.5169871749762857 a=pan,b=eks,i=5796,x=0.10739150192981317,y=0.004460524149627276 a=hat,b=hat,i=5797,x=0.5867728931987851,y=0.937578286245456 a=eks,b=hat,i=5798,x=0.3908387810335817,y=0.34330528598151944 a=wye,b=eks,i=5799,x=0.11663940947930529,y=0.2283382768880119 a=hat,b=wye,i=5800,x=0.20766266556079938,y=0.06909200825337258 a=zee,b=eks,i=5801,x=0.019645955696274475,y=0.9094238943256715 a=hat,b=zee,i=5802,x=0.4647837023773008,y=0.30037328314118017 a=wye,b=pan,i=5803,x=0.5646566533554874,y=0.15673400226423917 a=eks,b=hat,i=5804,x=0.29845440226372855,y=0.24711215673748332 a=zee,b=wye,i=5805,x=0.25960541840206386,y=0.22950027817819518 a=wye,b=pan,i=5806,x=0.6653575136807429,y=0.9060998128185732 a=pan,b=wye,i=5807,x=0.18771994519215784,y=0.26225112077131363 a=wye,b=pan,i=5808,x=0.3666840512152372,y=0.15437085935635642 a=zee,b=wye,i=5809,x=0.1494185162017646,y=0.7860811687162453 a=wye,b=hat,i=5810,x=0.11952846412695983,y=0.8522219808940303 a=hat,b=eks,i=5811,x=0.44094875130964795,y=0.7732717099587513 a=eks,b=hat,i=5812,x=0.5559531679203801,y=0.026931495207055067 a=hat,b=zee,i=5813,x=0.5451345812741655,y=0.4792657127863339 a=eks,b=wye,i=5814,x=0.3619763137230263,y=0.3300717677846403 a=eks,b=zee,i=5815,x=0.48687526629526545,y=0.8584389551214576 a=pan,b=eks,i=5816,x=0.9160561949834121,y=0.5246537157918573 a=pan,b=wye,i=5817,x=0.3309523992695672,y=0.8070632628360801 a=pan,b=zee,i=5818,x=0.20345133041566366,y=0.5750982955524265 a=zee,b=eks,i=5819,x=0.07183321376053509,y=0.9726675502317286 a=wye,b=wye,i=5820,x=0.9675205269852082,y=0.8456558793367495 a=hat,b=zee,i=5821,x=0.319976254021178,y=0.8734609010107423 a=eks,b=eks,i=5822,x=0.6616970307501397,y=0.6091232839670194 a=eks,b=pan,i=5823,x=0.5176519151206722,y=0.021797183751670723 a=eks,b=zee,i=5824,x=0.008069601151581285,y=0.4982567352783567 a=pan,b=hat,i=5825,x=0.5827800197345394,y=0.7803525569338927 a=pan,b=pan,i=5826,x=0.2538325082222126,y=0.9476879457255432 a=wye,b=eks,i=5827,x=0.9514763137560248,y=0.20882670554843952 a=wye,b=zee,i=5828,x=0.9320615638508492,y=0.19881625022009897 a=pan,b=hat,i=5829,x=0.9764966414862699,y=0.4156514128952272 a=hat,b=pan,i=5830,x=0.3667779041985445,y=0.705757188907245 a=eks,b=eks,i=5831,x=0.2131869859612514,y=0.051574404230206206 a=hat,b=eks,i=5832,x=0.536815843763481,y=0.9725354850537404 a=eks,b=wye,i=5833,x=0.06151529817648871,y=0.7067840865178908 a=pan,b=hat,i=5834,x=0.40809909826591584,y=0.9348168564556171 a=eks,b=eks,i=5835,x=0.565996045716497,y=0.4508098512548929 a=eks,b=wye,i=5836,x=0.8956966597743651,y=0.8528472084728154 a=eks,b=pan,i=5837,x=0.4574051555265334,y=0.8299651056659689 a=pan,b=wye,i=5838,x=0.40192120844730816,y=0.01299427191690905 a=wye,b=hat,i=5839,x=0.9215400303532923,y=0.45266271324432283 a=pan,b=wye,i=5840,x=0.24154556129725246,y=0.5622236434363397 a=zee,b=wye,i=5841,x=0.1727248222190798,y=0.6210983576320617 a=wye,b=eks,i=5842,x=0.6216373633536472,y=0.9301770846288369 a=eks,b=eks,i=5843,x=0.7492151915521785,y=0.39861528823986403 a=zee,b=pan,i=5844,x=0.760328363920412,y=0.25716006527035284 a=hat,b=eks,i=5845,x=0.43975939611821113,y=0.8916429935358784 a=zee,b=zee,i=5846,x=0.162570991251604,y=0.26519462331398813 a=wye,b=zee,i=5847,x=0.27955183683250895,y=0.593734945819627 a=hat,b=hat,i=5848,x=0.9956327931315808,y=0.8873051757938238 a=hat,b=pan,i=5849,x=0.7302167315792862,y=0.21263835483392501 a=wye,b=pan,i=5850,x=0.9313090088228326,y=0.9743729163851863 a=eks,b=zee,i=5851,x=0.22409910130745192,y=0.13300739204811318 a=hat,b=pan,i=5852,x=0.9764589316784894,y=0.5367076815906018 a=hat,b=hat,i=5853,x=0.9153388125321756,y=0.3586120018450708 a=zee,b=eks,i=5854,x=0.13307347063070984,y=0.35231749332115525 a=eks,b=zee,i=5855,x=0.9817510205071746,y=0.345441110032638 a=hat,b=hat,i=5856,x=0.02372556298430306,y=0.7721928675615208 a=eks,b=hat,i=5857,x=0.5417934009900822,y=0.13544385674063442 a=eks,b=zee,i=5858,x=0.0460418994677978,y=0.5267262848816568 a=eks,b=wye,i=5859,x=0.07297199386640929,y=0.027345228589134907 a=eks,b=eks,i=5860,x=0.9833629242563793,y=0.9992250545586543 a=eks,b=hat,i=5861,x=0.885544518143363,y=0.6319209563437962 a=wye,b=eks,i=5862,x=0.5814001743292831,y=0.2775598540805262 a=eks,b=wye,i=5863,x=0.46034553116676624,y=0.8419263560507274 a=hat,b=pan,i=5864,x=0.8998046024201602,y=0.13280033695524907 a=zee,b=zee,i=5865,x=0.7705835578927107,y=0.47218544336953905 a=wye,b=wye,i=5866,x=0.0548129640505145,y=0.8443145744599417 a=eks,b=zee,i=5867,x=0.9115822381629575,y=0.7866137441239371 a=zee,b=zee,i=5868,x=0.6094609434293627,y=0.5377506393673299 a=zee,b=wye,i=5869,x=0.018050024906604567,y=0.7925383948436677 a=pan,b=wye,i=5870,x=0.7185567353405748,y=0.9625690376428901 a=zee,b=zee,i=5871,x=0.028580144473957514,y=0.3101568871452759 a=pan,b=pan,i=5872,x=0.3820471070600516,y=0.35563824254246 a=hat,b=pan,i=5873,x=0.48211948675174343,y=0.2808314182510484 a=zee,b=zee,i=5874,x=0.4244763123071966,y=0.27813346850123377 a=hat,b=hat,i=5875,x=0.08023425641620874,y=0.3562943757988909 a=eks,b=zee,i=5876,x=0.42409197009601207,y=0.2580874448511281 a=zee,b=hat,i=5877,x=0.6106977731868735,y=0.8348351384198046 a=hat,b=pan,i=5878,x=0.7267758858416487,y=0.6189509030501132 a=eks,b=pan,i=5879,x=0.9304167092235895,y=0.7812522227544872 a=pan,b=pan,i=5880,x=0.16403167139407027,y=0.9377394665165222 a=zee,b=zee,i=5881,x=0.9728622687660967,y=0.15656315863552106 a=wye,b=hat,i=5882,x=0.1079539981243911,y=0.27269401005584115 a=pan,b=wye,i=5883,x=0.3575378506176421,y=0.6513985153042581 a=pan,b=pan,i=5884,x=0.5893199011375699,y=0.9675602927187726 a=zee,b=wye,i=5885,x=0.7855309055804873,y=0.8242084722200425 a=pan,b=hat,i=5886,x=0.21719695401350458,y=0.30358017023038153 a=hat,b=hat,i=5887,x=0.9478034096451651,y=0.408314973093156 a=pan,b=hat,i=5888,x=0.6047201198005093,y=0.9181081561579384 a=hat,b=hat,i=5889,x=0.585057883337934,y=0.8637135279822525 a=wye,b=hat,i=5890,x=0.7193606570599776,y=0.13247216321287003 a=eks,b=hat,i=5891,x=0.38491586194929694,y=0.1469109750984342 a=zee,b=pan,i=5892,x=0.9813253864700262,y=0.35805907741021115 a=pan,b=pan,i=5893,x=0.3991583932113212,y=0.9300651976220902 a=eks,b=hat,i=5894,x=0.4664037391639634,y=0.665201311994492 a=eks,b=zee,i=5895,x=0.34688995428502123,y=0.05521465426780947 a=pan,b=hat,i=5896,x=0.9024771073805518,y=0.604435930128322 a=wye,b=eks,i=5897,x=0.8964292531785713,y=0.4797408068859207 a=zee,b=zee,i=5898,x=0.9638020677593624,y=0.9758009686628205 a=pan,b=zee,i=5899,x=0.1740859761427278,y=0.6267077732379096 a=wye,b=eks,i=5900,x=0.5229577213131821,y=0.18158149929552536 a=pan,b=wye,i=5901,x=0.7384787869595655,y=0.41300809363121915 a=pan,b=hat,i=5902,x=0.41567839319864996,y=0.6586070339163206 a=pan,b=pan,i=5903,x=0.16296558429713726,y=0.6335579931374635 a=wye,b=eks,i=5904,x=0.791240301793597,y=0.5905379287555277 a=eks,b=eks,i=5905,x=0.8611318706939175,y=0.012613640405385818 a=wye,b=pan,i=5906,x=0.25968317122777085,y=0.21946674504226305 a=eks,b=pan,i=5907,x=0.20429202129242863,y=0.2739618927896226 a=hat,b=zee,i=5908,x=0.5139620538238665,y=0.4911358765578846 a=pan,b=hat,i=5909,x=0.2621296183552325,y=0.6724917830910391 a=eks,b=hat,i=5910,x=0.42415855241583555,y=0.6705675010493037 a=wye,b=pan,i=5911,x=0.865745658241438,y=0.58440580479703 a=eks,b=hat,i=5912,x=0.8061623351763454,y=0.6282727719209886 a=pan,b=zee,i=5913,x=0.07513903167347802,y=0.6097002489929698 a=zee,b=hat,i=5914,x=0.6882661603529711,y=0.8887129009982704 a=wye,b=wye,i=5915,x=0.25957436941921963,y=0.5267742816791648 a=hat,b=zee,i=5916,x=0.5369361894430387,y=0.7602843160092176 a=zee,b=eks,i=5917,x=0.7603685712259192,y=0.6343676597010043 a=pan,b=hat,i=5918,x=0.366468458362766,y=0.03541459276961356 a=hat,b=zee,i=5919,x=0.572831435062068,y=0.03791669059169456 a=hat,b=eks,i=5920,x=0.22277164773544,y=0.6701548094942816 a=eks,b=hat,i=5921,x=0.7220748068466161,y=0.9135263674287071 a=hat,b=hat,i=5922,x=0.7007543076445784,y=0.5785000013877882 a=zee,b=pan,i=5923,x=0.07333176505461592,y=0.6129972451763929 a=eks,b=eks,i=5924,x=0.7977706056198149,y=0.3145761502534876 a=pan,b=wye,i=5925,x=0.02234819330370974,y=0.24864881451646326 a=eks,b=wye,i=5926,x=0.31862517237026744,y=0.6707830122783046 a=zee,b=wye,i=5927,x=0.7736532335919073,y=0.06276902730360534 a=zee,b=hat,i=5928,x=0.571180118057766,y=0.23249209976534324 a=wye,b=wye,i=5929,x=0.765996158956063,y=0.7875000435827569 a=eks,b=eks,i=5930,x=0.9258500136940602,y=0.14002804460000795 a=zee,b=pan,i=5931,x=0.14870262574003812,y=0.25758171933702145 a=hat,b=hat,i=5932,x=0.6061740180931977,y=0.0647099944297298 a=zee,b=eks,i=5933,x=0.21312616005615392,y=0.1555687828207697 a=wye,b=wye,i=5934,x=0.32174717605868364,y=0.5617674601864029 a=zee,b=eks,i=5935,x=0.4278905571169318,y=0.7204350849259756 a=wye,b=wye,i=5936,x=0.5169276990526274,y=0.34471540929660927 a=hat,b=wye,i=5937,x=0.7939967856315264,y=0.9601200264326587 a=pan,b=pan,i=5938,x=0.7447545239901884,y=0.8615464344679636 a=wye,b=pan,i=5939,x=0.32618776050076514,y=0.04356428568705306 a=zee,b=pan,i=5940,x=0.30848692760824414,y=0.4765563067775509 a=zee,b=eks,i=5941,x=0.47731093944717395,y=0.20531029159472136 a=zee,b=hat,i=5942,x=0.14569062187871828,y=0.29647189869590773 a=zee,b=eks,i=5943,x=0.8514541851665678,y=0.47380190170636116 a=wye,b=pan,i=5944,x=0.8579979653959152,y=0.020846772517364776 a=pan,b=eks,i=5945,x=0.6760904036707333,y=0.038710653329522726 a=wye,b=pan,i=5946,x=0.4654804137932894,y=0.034558917439536097 a=zee,b=hat,i=5947,x=0.21695412923454904,y=0.43929843802398505 a=hat,b=hat,i=5948,x=0.5757328621980413,y=0.6353025655596225 a=wye,b=eks,i=5949,x=0.9623043477520935,y=0.11211455399205761 a=pan,b=eks,i=5950,x=0.2489174544195356,y=0.9543858789744019 a=wye,b=zee,i=5951,x=0.2551744295171663,y=0.6371014605832375 a=wye,b=zee,i=5952,x=0.6661892172394466,y=0.25609424535345615 a=zee,b=eks,i=5953,x=0.9664924377661902,y=0.5704525111862812 a=zee,b=zee,i=5954,x=0.7314435770258082,y=0.5760633916387623 a=wye,b=eks,i=5955,x=0.11730300164253482,y=0.2437668953328913 a=hat,b=wye,i=5956,x=0.2856744287649412,y=0.5130003461790801 a=pan,b=wye,i=5957,x=0.7991558243539277,y=0.04715962071161517 a=wye,b=hat,i=5958,x=0.4484915030384218,y=0.0021936451209908503 a=wye,b=eks,i=5959,x=0.4276118637683318,y=0.9781842697081753 a=wye,b=zee,i=5960,x=0.5390282464497976,y=0.21779961652631485 a=hat,b=zee,i=5961,x=0.3083082640562401,y=0.43599613823729055 a=pan,b=eks,i=5962,x=0.15236030642851295,y=0.11800538936265059 a=zee,b=wye,i=5963,x=0.7842417183077839,y=0.8263558103417791 a=wye,b=pan,i=5964,x=0.42422897642936763,y=0.5598064063472771 a=wye,b=hat,i=5965,x=0.7381633325773709,y=0.7044839805205219 a=eks,b=zee,i=5966,x=0.8246457170881877,y=0.546058458654676 a=pan,b=wye,i=5967,x=0.03056556054577575,y=0.5661151347932647 a=wye,b=wye,i=5968,x=0.6210050577035034,y=0.6524576650195097 a=hat,b=pan,i=5969,x=0.7090572782654315,y=0.5364015328854267 a=eks,b=zee,i=5970,x=0.6509530715275128,y=0.5780440319964154 a=pan,b=pan,i=5971,x=0.2887825352259904,y=0.15004456717790193 a=wye,b=pan,i=5972,x=0.831991442447814,y=0.26469776729003514 a=zee,b=wye,i=5973,x=0.20543699412375216,y=0.7115776392376905 a=pan,b=wye,i=5974,x=0.2632680009756867,y=0.5045539888483129 a=zee,b=hat,i=5975,x=0.34854624620098384,y=0.12823216693877193 a=hat,b=zee,i=5976,x=0.12265984923829065,y=0.46184314823141537 a=zee,b=eks,i=5977,x=0.9593214911106812,y=0.18841934020738382 a=zee,b=pan,i=5978,x=0.29873353271383263,y=0.8224260506438726 a=wye,b=zee,i=5979,x=0.3367480944275053,y=0.9086030526073715 a=eks,b=hat,i=5980,x=0.6119122505853635,y=0.08152300908632903 a=eks,b=eks,i=5981,x=0.04584617519803835,y=0.07778733739846255 a=hat,b=hat,i=5982,x=0.12903186206218742,y=0.34208394676963483 a=wye,b=eks,i=5983,x=0.20225412929960151,y=0.467369874775762 a=eks,b=zee,i=5984,x=0.43322997404163954,y=0.5286653070293011 a=zee,b=zee,i=5985,x=0.5011026241476996,y=0.805862929391608 a=zee,b=eks,i=5986,x=0.8754701645608397,y=0.38365755627001585 a=pan,b=eks,i=5987,x=0.4615059476811778,y=0.052616042635722726 a=hat,b=wye,i=5988,x=0.6628427322104598,y=0.7830019543371667 a=hat,b=wye,i=5989,x=0.9291945030562897,y=0.3850137859960868 a=wye,b=pan,i=5990,x=0.17713926799897517,y=0.23695227873073954 a=pan,b=eks,i=5991,x=0.7450679111488475,y=0.28865753240279957 a=hat,b=wye,i=5992,x=0.608480151924532,y=0.2124705647477415 a=wye,b=zee,i=5993,x=0.5294790360408727,y=0.8997422208092308 a=wye,b=pan,i=5994,x=0.8452227401580423,y=0.17900534407423696 a=pan,b=pan,i=5995,x=0.9106908084952221,y=0.4539070115302676 a=zee,b=wye,i=5996,x=0.5373426059376083,y=0.4221246992022961 a=pan,b=wye,i=5997,x=0.5531071589049933,y=0.08637347865871003 a=zee,b=pan,i=5998,x=0.21694616431952807,y=0.39150665545149743 a=zee,b=wye,i=5999,x=0.6413081783785531,y=0.1998976766972167 a=eks,b=eks,i=6000,x=0.2792519668247778,y=0.5138064566303124 a=hat,b=zee,i=6001,x=0.5185086838193509,y=0.7904042779588125 a=eks,b=eks,i=6002,x=0.39573160678139196,y=0.4615703290236336 a=zee,b=hat,i=6003,x=0.0715926003170353,y=0.6334247799868317 a=pan,b=zee,i=6004,x=0.24114560678004815,y=0.9328567037965978 a=hat,b=wye,i=6005,x=0.7983815573901718,y=0.7761184973619634 a=hat,b=zee,i=6006,x=0.5384751396537175,y=0.3888207115072827 a=wye,b=pan,i=6007,x=0.8053846290661436,y=0.8678997964852174 a=pan,b=eks,i=6008,x=0.41565599952378685,y=0.9850186434544672 a=wye,b=wye,i=6009,x=0.0929139240769814,y=0.5373260828931007 a=zee,b=eks,i=6010,x=0.6485105788304564,y=0.4297840734143743 a=hat,b=zee,i=6011,x=0.9000836207274523,y=0.21471020343061598 a=eks,b=eks,i=6012,x=0.6658398998195909,y=0.13678166324566765 a=hat,b=wye,i=6013,x=0.4176340542833341,y=0.9065866640956619 a=zee,b=wye,i=6014,x=0.8507681738053369,y=0.11610028428937647 a=eks,b=hat,i=6015,x=0.9615655580235888,y=0.3722658883094253 a=pan,b=pan,i=6016,x=0.7515268934050028,y=0.6517374909352979 a=pan,b=hat,i=6017,x=0.49152531929212073,y=0.7512315139958677 a=eks,b=hat,i=6018,x=0.4684056585315659,y=0.337057411818393 a=zee,b=hat,i=6019,x=0.46644646414956337,y=0.37632624811846627 a=eks,b=zee,i=6020,x=0.8375544392876899,y=0.06208795125761901 a=eks,b=wye,i=6021,x=0.853613881880828,y=0.42565283184216685 a=wye,b=hat,i=6022,x=0.0008045774133644823,y=0.9649087112765938 a=eks,b=wye,i=6023,x=0.728964866290429,y=0.20299302934138896 a=wye,b=wye,i=6024,x=0.17509415050833677,y=0.6602044660320481 a=pan,b=hat,i=6025,x=0.8660100438564455,y=0.43409555049096815 a=hat,b=hat,i=6026,x=0.26534848529863153,y=0.15071960409960417 a=hat,b=eks,i=6027,x=0.6918174742812051,y=0.18022893420812924 a=pan,b=eks,i=6028,x=0.8921081985029767,y=0.918512738613517 a=eks,b=hat,i=6029,x=0.5291325936429374,y=0.11343528410923331 a=pan,b=eks,i=6030,x=0.6604483059910737,y=0.828006457014962 a=hat,b=zee,i=6031,x=0.15437854915261007,y=0.503378274348622 a=wye,b=pan,i=6032,x=0.18616681775349353,y=0.428462590403658 a=wye,b=hat,i=6033,x=0.17782260468314637,y=0.3212752721293215 a=zee,b=zee,i=6034,x=0.1872485063005922,y=0.11358951848324028 a=wye,b=zee,i=6035,x=0.40200320956425806,y=0.5915516801877846 a=wye,b=eks,i=6036,x=0.6743134456217715,y=0.03587684243454348 a=hat,b=pan,i=6037,x=0.13535704558051898,y=0.08799048432237733 a=eks,b=hat,i=6038,x=0.45829076005760183,y=0.9312783969989717 a=pan,b=wye,i=6039,x=0.8260078705928582,y=0.015009473265236828 a=pan,b=eks,i=6040,x=0.02209842222005065,y=0.2707759101194467 a=pan,b=pan,i=6041,x=0.24065041069096327,y=0.096992272385374 a=wye,b=wye,i=6042,x=0.1257432277214967,y=0.7056875982657411 a=wye,b=zee,i=6043,x=0.19024789027868116,y=0.8414234848855409 a=zee,b=wye,i=6044,x=0.5264647677402654,y=0.16668422327274046 a=wye,b=wye,i=6045,x=0.43588050348095864,y=0.4231462786478698 a=zee,b=eks,i=6046,x=0.35017939224895767,y=0.31215765738608925 a=eks,b=wye,i=6047,x=0.5417973498575591,y=0.47047382812068883 a=hat,b=wye,i=6048,x=0.7766726125727336,y=0.5675508167476694 a=zee,b=wye,i=6049,x=0.9832175361809419,y=0.2682166583462263 a=wye,b=zee,i=6050,x=0.6951984651252766,y=0.5425712622829648 a=pan,b=wye,i=6051,x=0.9427895952822903,y=0.8719941425198732 a=hat,b=hat,i=6052,x=0.5361976672567662,y=0.5331863539216497 a=eks,b=wye,i=6053,x=0.7102521301167394,y=0.017628741065697007 a=eks,b=hat,i=6054,x=0.7073320813195529,y=0.9382615280812954 a=wye,b=wye,i=6055,x=0.9034120549999815,y=0.9428661865045129 a=wye,b=zee,i=6056,x=0.9036169505703209,y=0.8702961297029511 a=pan,b=zee,i=6057,x=0.351391651879459,y=0.22131930493166563 a=hat,b=pan,i=6058,x=0.4633029443317498,y=0.9006978783785164 a=pan,b=hat,i=6059,x=0.8954915180233931,y=0.5799236237902317 a=wye,b=pan,i=6060,x=0.011291356990852042,y=0.7765350029774964 a=wye,b=hat,i=6061,x=0.8964276551673388,y=0.09468753423212417 a=eks,b=zee,i=6062,x=0.32542453183848197,y=0.5356755758750752 a=pan,b=pan,i=6063,x=0.4553835211035392,y=0.421964673707642 a=eks,b=eks,i=6064,x=0.9195082628714536,y=0.7843278824429687 a=wye,b=eks,i=6065,x=0.43792520749353625,y=0.9395208618424521 a=hat,b=zee,i=6066,x=0.6147064931036405,y=0.9150698526901345 a=zee,b=eks,i=6067,x=0.22286944513587603,y=0.5667267901072823 a=zee,b=pan,i=6068,x=0.1015880769763784,y=0.9719880080896737 a=zee,b=hat,i=6069,x=0.8599055004647317,y=0.09826062758286946 a=hat,b=pan,i=6070,x=0.6313496582432914,y=0.9900649342170824 a=pan,b=pan,i=6071,x=0.8928836261132681,y=0.5415114404183805 a=zee,b=wye,i=6072,x=0.7452277791699898,y=0.27999313704075457 a=wye,b=wye,i=6073,x=0.018510579550919615,y=0.6478773625532628 a=pan,b=hat,i=6074,x=0.14632992450201188,y=0.7026424321895863 a=pan,b=eks,i=6075,x=0.8012118002371259,y=0.7203879849887644 a=hat,b=wye,i=6076,x=0.8379974247825939,y=0.6503639424507504 a=pan,b=zee,i=6077,x=0.5778438306895812,y=0.3635043725548298 a=hat,b=eks,i=6078,x=0.6372234825627152,y=0.5775364684644685 a=wye,b=hat,i=6079,x=0.788390001290666,y=0.08406257620709923 a=eks,b=hat,i=6080,x=0.5842098929256355,y=0.9268385178778537 a=eks,b=zee,i=6081,x=0.8045184557436604,y=0.3550708830410243 a=wye,b=hat,i=6082,x=0.6940314918085063,y=0.9546919945201542 a=zee,b=wye,i=6083,x=0.07677730138586769,y=0.27970074396540523 a=hat,b=hat,i=6084,x=0.8231273607660942,y=0.7945531787758096 a=pan,b=zee,i=6085,x=0.149414209891241,y=0.785222866060064 a=hat,b=zee,i=6086,x=0.8656687722742876,y=0.3783605596273294 a=pan,b=hat,i=6087,x=0.7452242982918568,y=0.933266614617221 a=eks,b=eks,i=6088,x=0.9407795350577164,y=0.8986498240204077 a=zee,b=wye,i=6089,x=0.20326626549933924,y=0.9955640843974876 a=eks,b=pan,i=6090,x=0.838908851853637,y=0.9142053659359575 a=pan,b=zee,i=6091,x=0.2805934812907199,y=0.4958691991853912 a=hat,b=hat,i=6092,x=0.11050475306966923,y=0.6388348781021509 a=zee,b=hat,i=6093,x=0.665308883447062,y=0.06804657653188073 a=zee,b=wye,i=6094,x=0.38062861091901556,y=0.1551403595265176 a=eks,b=zee,i=6095,x=0.6890247160219993,y=0.37496310117295584 a=eks,b=hat,i=6096,x=0.42296496745953693,y=0.028270087708508695 a=zee,b=pan,i=6097,x=0.16613072961880582,y=0.6781440562566766 a=eks,b=wye,i=6098,x=0.004861307055076147,y=0.16556471646142745 a=hat,b=wye,i=6099,x=0.45226025959304195,y=0.18641738624575777 a=wye,b=eks,i=6100,x=0.6994211629442989,y=0.5162220389082391 a=hat,b=eks,i=6101,x=0.21566053977410837,y=0.0009137416907488705 a=zee,b=eks,i=6102,x=0.8280966067887752,y=0.694693806129609 a=zee,b=pan,i=6103,x=0.6340964020751576,y=0.62642563404278 a=eks,b=eks,i=6104,x=0.35610230144127086,y=0.6916343444424629 a=pan,b=wye,i=6105,x=0.2907054181631238,y=0.6928671017273116 a=zee,b=pan,i=6106,x=0.8553526569078405,y=0.9138200519516971 a=hat,b=hat,i=6107,x=0.16347811679340452,y=0.6796304402643298 a=pan,b=eks,i=6108,x=0.08545243832367033,y=0.26227816664595516 a=pan,b=wye,i=6109,x=0.42064626396142935,y=0.03834575879901836 a=hat,b=hat,i=6110,x=0.06431500264016754,y=0.8198549278735412 a=pan,b=hat,i=6111,x=0.8176964039522118,y=0.27991537751096096 a=wye,b=eks,i=6112,x=0.32643889115109914,y=0.057664918435550105 a=eks,b=zee,i=6113,x=0.7830249162665363,y=0.9359267958767102 a=zee,b=pan,i=6114,x=0.12372114799931111,y=0.006510213999872061 a=eks,b=pan,i=6115,x=0.14468978749350747,y=0.9503328335027744 a=pan,b=wye,i=6116,x=0.8796441138920073,y=0.7932277172417034 a=zee,b=zee,i=6117,x=0.9246694666039478,y=0.18141663220397541 a=wye,b=pan,i=6118,x=0.6353087660069283,y=0.5051898483269901 a=pan,b=wye,i=6119,x=0.5863942231599231,y=0.001428085680191149 a=wye,b=zee,i=6120,x=0.8391496713951982,y=0.8272270342812488 a=pan,b=wye,i=6121,x=0.10848385354873591,y=0.4213783243233229 a=eks,b=zee,i=6122,x=0.7851432595398691,y=0.8736148992334403 a=pan,b=wye,i=6123,x=0.14384598748640032,y=0.32134746224637845 a=hat,b=zee,i=6124,x=0.05088458565782927,y=0.9994183544894671 a=hat,b=eks,i=6125,x=0.7256280642967333,y=0.8471794523838057 a=eks,b=pan,i=6126,x=0.6585496392017636,y=0.4276868684164896 a=wye,b=hat,i=6127,x=0.645442843855344,y=0.34584198249412534 a=wye,b=hat,i=6128,x=0.5798880313425798,y=0.991140739248181 a=zee,b=zee,i=6129,x=0.8451024180287646,y=0.4474449179206156 a=pan,b=eks,i=6130,x=0.06722223792791904,y=0.14906728853790685 a=eks,b=eks,i=6131,x=0.8733172145139986,y=0.754180892846082 a=wye,b=wye,i=6132,x=0.21323342519040167,y=0.023037099194546995 a=eks,b=hat,i=6133,x=0.2772309881804147,y=0.03618215388759871 a=hat,b=wye,i=6134,x=0.3566779583699996,y=0.7569810016480044 a=zee,b=zee,i=6135,x=0.4368219705298403,y=0.02593555893570043 a=wye,b=hat,i=6136,x=0.13423307209566393,y=0.7786764748609936 a=pan,b=wye,i=6137,x=0.26321994371190116,y=0.7448472659747205 a=pan,b=eks,i=6138,x=0.09141195779591726,y=0.10884990452426058 a=hat,b=eks,i=6139,x=0.8439060414873816,y=0.4078177506117555 a=zee,b=eks,i=6140,x=0.6449410501908724,y=0.7328187261405557 a=wye,b=wye,i=6141,x=0.31425705029105533,y=0.7492859328412478 a=zee,b=zee,i=6142,x=0.657143123361377,y=0.37319179681546233 a=pan,b=wye,i=6143,x=0.8303922450488143,y=0.04133052528317438 a=pan,b=zee,i=6144,x=0.054269779082146474,y=0.7280169255714574 a=pan,b=eks,i=6145,x=0.9449211141040083,y=0.18293190122317016 a=zee,b=wye,i=6146,x=0.28919940890955353,y=0.7696928449638194 a=wye,b=wye,i=6147,x=0.29949161102957667,y=0.5548662350346921 a=zee,b=wye,i=6148,x=0.06803050982105852,y=0.6066130537591169 a=eks,b=zee,i=6149,x=0.6534482020575438,y=0.2506945890953125 a=eks,b=eks,i=6150,x=0.2543117769739106,y=0.2683840371177597 a=wye,b=eks,i=6151,x=0.2875496688119247,y=0.44319198704607665 a=wye,b=eks,i=6152,x=0.7099732953682635,y=0.5854903351687778 a=wye,b=pan,i=6153,x=0.07854709434875495,y=0.3722757779564305 a=pan,b=wye,i=6154,x=0.8844645043086019,y=0.0821083597407316 a=zee,b=zee,i=6155,x=0.3642127687872748,y=0.5633536743710837 a=wye,b=zee,i=6156,x=0.06825592495808563,y=0.1502278354043537 a=hat,b=wye,i=6157,x=0.96483308459617,y=0.005464821632367056 a=wye,b=wye,i=6158,x=0.5486690225111291,y=0.22135008972861803 a=pan,b=wye,i=6159,x=0.962029830876355,y=0.39858158874481264 a=hat,b=eks,i=6160,x=0.7011580850727354,y=0.6036204870691432 a=eks,b=zee,i=6161,x=0.08747236952448512,y=0.6025426256044452 a=hat,b=wye,i=6162,x=0.7456669839482689,y=0.1394569856909862 a=hat,b=hat,i=6163,x=0.10827051081377403,y=0.16793651272516608 a=wye,b=pan,i=6164,x=0.8979852141961816,y=0.13235901577397613 a=zee,b=zee,i=6165,x=0.15629723258639028,y=0.8654019947072258 a=pan,b=wye,i=6166,x=0.5836460911249829,y=0.5913706500552215 a=pan,b=zee,i=6167,x=0.6207688091598478,y=0.47548687622711405 a=eks,b=pan,i=6168,x=0.011142080206369753,y=0.11796822475814073 a=wye,b=hat,i=6169,x=0.27571064540346324,y=0.849891289726519 a=wye,b=hat,i=6170,x=0.05037038984895503,y=0.6127522806306696 a=hat,b=eks,i=6171,x=0.6128807090186297,y=0.13380041255048647 a=hat,b=zee,i=6172,x=0.4805916761138247,y=0.1482140011291747 a=pan,b=zee,i=6173,x=0.07652496417334043,y=0.042388913077830326 a=eks,b=eks,i=6174,x=0.43221049405771506,y=0.9702133355298461 a=zee,b=hat,i=6175,x=0.22992120482659384,y=0.7893723418315517 a=wye,b=wye,i=6176,x=0.8712880934289053,y=0.1426259097448438 a=wye,b=pan,i=6177,x=0.03184609338086353,y=0.0814260689531977 a=pan,b=eks,i=6178,x=0.18328780306168269,y=0.7969641159371771 a=pan,b=hat,i=6179,x=0.44176808883841967,y=0.606631222409441 a=pan,b=eks,i=6180,x=0.6707266041969419,y=0.8559378190156729 a=eks,b=zee,i=6181,x=0.2802981253544844,y=0.3174939125127616 a=hat,b=wye,i=6182,x=0.5963539674332015,y=0.8719750664328125 a=hat,b=pan,i=6183,x=0.005703731409972823,y=0.13190978995990732 a=wye,b=eks,i=6184,x=0.8185740040040715,y=0.29143129414848035 a=hat,b=pan,i=6185,x=0.38534047699412566,y=0.653203878373999 a=pan,b=eks,i=6186,x=0.8129419229181339,y=0.9565505011070674 a=zee,b=eks,i=6187,x=0.9102216458464243,y=0.14788252816414793 a=pan,b=pan,i=6188,x=0.3138266925669364,y=0.1423581267550319 a=eks,b=zee,i=6189,x=0.1600695810764854,y=0.3703741621779819 a=hat,b=zee,i=6190,x=0.855253088583113,y=0.4268359685582771 a=pan,b=zee,i=6191,x=0.4936690941214801,y=0.8239585275348885 a=zee,b=eks,i=6192,x=0.9698866358660461,y=0.45918790442353197 a=zee,b=pan,i=6193,x=0.22555543203604156,y=0.354448421001617 a=wye,b=zee,i=6194,x=0.567972797574568,y=0.48947921344717205 a=pan,b=wye,i=6195,x=0.32782196923608053,y=0.5904659635589349 a=hat,b=hat,i=6196,x=0.6643469112984154,y=0.21978754163260783 a=hat,b=wye,i=6197,x=0.9175822141933855,y=0.8289821718204701 a=pan,b=pan,i=6198,x=0.7387220064556718,y=0.634422986160881 a=hat,b=hat,i=6199,x=0.27873509309298805,y=0.8518009401398621 a=hat,b=pan,i=6200,x=0.9456083795785362,y=0.07976539092371093 a=wye,b=zee,i=6201,x=0.3729199649979895,y=0.3737596699867053 a=pan,b=eks,i=6202,x=0.47394220338381987,y=0.22208820414520292 a=wye,b=wye,i=6203,x=0.43456592177296915,y=0.8898632264012567 a=hat,b=hat,i=6204,x=0.01568433367414035,y=0.6760088307426864 a=eks,b=pan,i=6205,x=0.9867459947802004,y=0.048081368596216145 a=zee,b=eks,i=6206,x=0.4689131127096242,y=0.18743577113193155 a=hat,b=pan,i=6207,x=0.35740607834132276,y=0.9046883371614931 a=wye,b=pan,i=6208,x=0.38705607831183175,y=0.33125379993312465 a=hat,b=pan,i=6209,x=0.1164284726722783,y=0.5077787588883211 a=eks,b=pan,i=6210,x=0.11164707350592284,y=0.4366699296089537 a=zee,b=hat,i=6211,x=0.1756835304978165,y=0.21235178828034162 a=wye,b=wye,i=6212,x=0.4370538758875272,y=0.6712221542567061 a=wye,b=zee,i=6213,x=0.223018528653398,y=0.07665796419452864 a=wye,b=wye,i=6214,x=0.3196105142466139,y=0.5918579198886101 a=hat,b=pan,i=6215,x=0.2642111043247998,y=0.7655889787356082 a=eks,b=pan,i=6216,x=0.830827137944212,y=0.04852612916637178 a=wye,b=eks,i=6217,x=0.8805402436632958,y=0.45841077395866314 a=eks,b=pan,i=6218,x=0.413534591007817,y=0.23614970902594068 a=zee,b=hat,i=6219,x=0.16354591153161113,y=0.9206152927733066 a=eks,b=zee,i=6220,x=0.047918107206670224,y=0.11615158016485994 a=wye,b=eks,i=6221,x=0.7465534540087728,y=0.9821197497223434 a=eks,b=wye,i=6222,x=0.06680014273579682,y=0.18844745124665652 a=eks,b=zee,i=6223,x=0.722803247048192,y=0.36350236589598184 a=eks,b=hat,i=6224,x=0.4238158023951344,y=0.2511472296462649 a=pan,b=pan,i=6225,x=0.9203832973582675,y=0.06804134828535513 a=eks,b=hat,i=6226,x=0.02496410500180868,y=0.05574344857979974 a=hat,b=hat,i=6227,x=0.38672001205322815,y=0.19823389210483422 a=zee,b=wye,i=6228,x=0.82604777396307,y=0.4659557204008049 a=hat,b=pan,i=6229,x=0.14688149819492824,y=0.09514280973942923 a=zee,b=hat,i=6230,x=0.7075949539072733,y=0.4235760111709499 a=zee,b=zee,i=6231,x=0.5376973727140149,y=0.2898522104137249 a=hat,b=eks,i=6232,x=0.5875320141178829,y=0.2318829378753392 a=wye,b=pan,i=6233,x=0.608930346989634,y=0.4394723390502957 a=hat,b=pan,i=6234,x=0.3711000240622062,y=0.5630248688807553 a=zee,b=hat,i=6235,x=0.6700739126174862,y=0.9940554433455402 a=hat,b=hat,i=6236,x=0.4937178916169107,y=0.9804247824378383 a=eks,b=zee,i=6237,x=0.9471147772457458,y=0.08993646421096724 a=pan,b=zee,i=6238,x=0.8826315387759526,y=0.29842130130234024 a=wye,b=pan,i=6239,x=0.8739810335218393,y=0.2932188268287632 a=zee,b=zee,i=6240,x=0.7765733461710617,y=0.2833840343701606 a=pan,b=eks,i=6241,x=0.8637612972836923,y=0.7179857913303808 a=pan,b=wye,i=6242,x=0.7916044619336652,y=0.8298956143848671 a=hat,b=wye,i=6243,x=0.03245716276075361,y=0.06220544584591636 a=wye,b=hat,i=6244,x=0.12210504687225221,y=0.6815533723212936 a=eks,b=zee,i=6245,x=0.46823867638384764,y=0.6642014993474107 a=eks,b=hat,i=6246,x=0.29665539600807134,y=0.7003997740545368 a=eks,b=hat,i=6247,x=0.3362821619192434,y=0.5279161806972573 a=eks,b=zee,i=6248,x=0.5444822392275463,y=0.0876616329488289 a=eks,b=hat,i=6249,x=0.20745998433546498,y=0.6115074760010532 a=zee,b=wye,i=6250,x=0.1678104597445702,y=0.6488476640200247 a=eks,b=hat,i=6251,x=0.7449272998418788,y=0.6080272372617547 a=zee,b=pan,i=6252,x=0.5630148470870018,y=0.9374709146770936 a=zee,b=eks,i=6253,x=0.3902801767495462,y=0.5732026335466424 a=zee,b=eks,i=6254,x=0.16850436138589997,y=0.8738130855818549 a=zee,b=zee,i=6255,x=0.9316229517968885,y=0.652503212541953 a=zee,b=eks,i=6256,x=0.5901306196182216,y=0.0931368428666508 a=hat,b=eks,i=6257,x=0.7050090746554877,y=0.8875603931761636 a=eks,b=wye,i=6258,x=0.9454475219485642,y=0.5012059708954245 a=zee,b=pan,i=6259,x=0.4266553967306278,y=0.4003433468882255 a=wye,b=zee,i=6260,x=0.9923421841444514,y=0.8824722395488493 a=hat,b=hat,i=6261,x=0.40702432370099206,y=0.7171214051987123 a=hat,b=eks,i=6262,x=0.3350864667715827,y=0.014819836304338363 a=wye,b=hat,i=6263,x=0.9268271428508724,y=0.8044165287448475 a=eks,b=eks,i=6264,x=0.4779658182518448,y=0.8202291191900539 a=pan,b=hat,i=6265,x=0.2970907219742721,y=0.1979486130274667 a=hat,b=zee,i=6266,x=0.7137087061271212,y=0.013510967108152694 a=eks,b=eks,i=6267,x=0.6051949380519777,y=0.7786588336276383 a=eks,b=wye,i=6268,x=0.8158250525163169,y=0.4134056153971454 a=eks,b=eks,i=6269,x=0.19963046420567765,y=0.7765565982643615 a=hat,b=eks,i=6270,x=0.543219579817685,y=0.5740667894014433 a=pan,b=eks,i=6271,x=0.46967904346855993,y=0.8165981152983919 a=pan,b=hat,i=6272,x=0.866140011093518,y=0.3038034829369789 a=zee,b=hat,i=6273,x=0.7504799514506184,y=0.5256684190391457 a=eks,b=eks,i=6274,x=0.7402757803304741,y=0.8741323775731765 a=zee,b=eks,i=6275,x=0.10740056926929464,y=0.24466182300866768 a=pan,b=pan,i=6276,x=0.6952734267926836,y=0.3034126351184192 a=hat,b=eks,i=6277,x=0.4555390450312061,y=0.29958791124739714 a=pan,b=pan,i=6278,x=0.8010308117452736,y=0.10301620244633602 a=pan,b=zee,i=6279,x=0.7313615800627254,y=0.1256082104913564 a=pan,b=hat,i=6280,x=0.4855733066299236,y=0.8761128788327854 a=hat,b=pan,i=6281,x=0.4484391085565852,y=0.4389498697416624 a=pan,b=hat,i=6282,x=0.09083588457295921,y=0.7896685475022054 a=zee,b=eks,i=6283,x=0.5390923448056928,y=0.5167672853818701 a=wye,b=wye,i=6284,x=0.35204669568634417,y=0.4690592822602978 a=pan,b=pan,i=6285,x=0.32173095582057487,y=0.21796469598272317 a=zee,b=eks,i=6286,x=0.144962592956428,y=0.7722195658556293 a=hat,b=wye,i=6287,x=0.2714129569031942,y=0.8615826556040387 a=hat,b=zee,i=6288,x=0.07477462162312054,y=0.5791036060536199 a=wye,b=zee,i=6289,x=0.7327389149804516,y=0.7332292873505851 a=wye,b=hat,i=6290,x=0.21334531120997036,y=0.7835004731984553 a=wye,b=pan,i=6291,x=0.72465968202963,y=0.8111622984322363 a=wye,b=zee,i=6292,x=0.7179223482928053,y=0.7389960044426721 a=wye,b=zee,i=6293,x=0.6388081928409085,y=0.34955396223940427 a=pan,b=wye,i=6294,x=0.9468440956319596,y=0.4217394313328563 a=pan,b=eks,i=6295,x=0.5390564367625461,y=0.044601959541880176 a=pan,b=pan,i=6296,x=0.16446925567275705,y=0.2859671068853066 a=zee,b=zee,i=6297,x=0.36656402569411484,y=0.7479751436902188 a=zee,b=hat,i=6298,x=0.9752808469326072,y=0.5811620174961745 a=zee,b=pan,i=6299,x=0.8830811226882286,y=0.2699573596370525 a=pan,b=zee,i=6300,x=0.31023070105575734,y=0.11731145460396875 a=zee,b=pan,i=6301,x=0.9479037050282592,y=0.396609639351287 a=zee,b=zee,i=6302,x=0.24914699249882744,y=0.4481166721397105 a=hat,b=zee,i=6303,x=0.8952025142838863,y=0.5374079020216094 a=wye,b=eks,i=6304,x=0.7278787302021043,y=0.4613586504326308 a=pan,b=zee,i=6305,x=0.1290986312271305,y=0.12638586813227837 a=eks,b=hat,i=6306,x=0.12880877413554215,y=0.7937042890401891 a=pan,b=hat,i=6307,x=0.5265554249602866,y=0.5324141264515088 a=zee,b=eks,i=6308,x=0.6932899560091913,y=0.4224058829341274 a=eks,b=eks,i=6309,x=0.6584180105748301,y=0.46624011433648027 a=eks,b=eks,i=6310,x=0.4455507880824502,y=0.8273180891731959 a=eks,b=hat,i=6311,x=0.9810589871426987,y=0.8707798683477451 a=eks,b=pan,i=6312,x=0.20487685479037343,y=0.3809481389765218 a=eks,b=zee,i=6313,x=0.8361568272178401,y=0.3358472395165475 a=wye,b=zee,i=6314,x=0.463204899148721,y=0.8170995486225013 a=eks,b=zee,i=6315,x=0.4236416770354665,y=0.6484535277551096 a=zee,b=pan,i=6316,x=0.2909481028983725,y=0.6310311151465591 a=eks,b=pan,i=6317,x=0.3794062074790783,y=0.4471294857197765 a=zee,b=pan,i=6318,x=0.2692152520955172,y=0.22081394976202395 a=zee,b=zee,i=6319,x=0.5181926783871064,y=0.1991481006591117 a=hat,b=eks,i=6320,x=0.9361894740111099,y=0.11767606452557877 a=pan,b=wye,i=6321,x=0.2769079772213442,y=0.7118580604878051 a=wye,b=wye,i=6322,x=0.5167349179748397,y=0.9138123003320032 a=hat,b=pan,i=6323,x=0.001915577829406656,y=0.5325392190044987 a=zee,b=wye,i=6324,x=0.9515688609245834,y=0.6819481738668132 a=wye,b=eks,i=6325,x=0.9593196183251438,y=0.8367522899279389 a=zee,b=eks,i=6326,x=0.6840763322653561,y=0.48711604133900366 a=zee,b=pan,i=6327,x=0.9887417195594495,y=0.8511851849030334 a=zee,b=wye,i=6328,x=0.4752524014081069,y=0.5948633790977842 a=pan,b=zee,i=6329,x=0.8670969736419382,y=0.22322204023719405 a=hat,b=pan,i=6330,x=0.5128088389522093,y=0.8131565213796835 a=wye,b=wye,i=6331,x=0.4909465554349871,y=0.8422488044877716 a=eks,b=eks,i=6332,x=0.13395594485063067,y=0.8961331478845271 a=hat,b=eks,i=6333,x=0.3615187221839192,y=0.4910814422431359 a=wye,b=eks,i=6334,x=0.09211420131313564,y=0.423787234189663 a=hat,b=zee,i=6335,x=0.4909870746929612,y=0.4355886224024228 a=hat,b=zee,i=6336,x=0.45712566044414527,y=0.7396866168330615 a=eks,b=hat,i=6337,x=0.579470745492393,y=0.8856435834505533 a=wye,b=hat,i=6338,x=0.08580189556409401,y=0.18529503699085126 a=zee,b=hat,i=6339,x=0.012498941021629406,y=0.8894278634707358 a=wye,b=eks,i=6340,x=0.893469417305926,y=0.6681902139221949 a=wye,b=wye,i=6341,x=0.7436478988526702,y=0.2699384378114361 a=wye,b=pan,i=6342,x=0.494186739181505,y=0.7777818161245044 a=zee,b=zee,i=6343,x=0.1034004605453186,y=0.39652659704684057 a=zee,b=zee,i=6344,x=0.13448148210620792,y=0.6260474107034932 a=pan,b=hat,i=6345,x=0.2613437423487872,y=0.9940438754118295 a=wye,b=hat,i=6346,x=0.4029829128240823,y=0.11036697991316924 a=zee,b=pan,i=6347,x=0.565275716092621,y=0.23420880259350974 a=pan,b=eks,i=6348,x=0.5980140331893903,y=0.06910125165307579 a=hat,b=pan,i=6349,x=0.8269557855792476,y=0.9027369919455107 a=hat,b=zee,i=6350,x=0.5352885898361499,y=0.3388698770867209 a=zee,b=wye,i=6351,x=0.9929432399676,y=0.7266233986268336 a=hat,b=hat,i=6352,x=0.4603922787242829,y=0.8630173727305803 a=zee,b=zee,i=6353,x=0.021330838330390844,y=0.3809296291373765 a=pan,b=hat,i=6354,x=0.7002692145665447,y=0.5873523948555504 a=eks,b=zee,i=6355,x=0.7096421804081511,y=0.8295306415940142 a=eks,b=eks,i=6356,x=0.16187658808999894,y=0.8302220496819485 a=zee,b=zee,i=6357,x=0.49409427660264216,y=0.4850204111936285 a=zee,b=wye,i=6358,x=0.2708188103232835,y=0.9662266139049696 a=hat,b=wye,i=6359,x=0.9607252863389836,y=0.5686827648028989 a=pan,b=eks,i=6360,x=0.7560882445267275,y=0.8572550831102655 a=zee,b=eks,i=6361,x=0.18272065148367533,y=0.739247187328454 a=eks,b=zee,i=6362,x=0.3565928726289197,y=0.7787122695765799 a=eks,b=hat,i=6363,x=0.2435075200137201,y=0.6410578487821268 a=wye,b=hat,i=6364,x=0.914528515618754,y=0.9410825640734111 a=hat,b=wye,i=6365,x=0.8343977017390618,y=0.4038557567547202 a=eks,b=eks,i=6366,x=0.3386950606192106,y=0.06992633700519646 a=wye,b=wye,i=6367,x=0.7504949488085239,y=0.786978752534252 a=hat,b=zee,i=6368,x=0.5051737323297509,y=0.7652145340768823 a=hat,b=wye,i=6369,x=0.7463935682542416,y=0.5295073352906969 a=wye,b=pan,i=6370,x=0.49818710578255154,y=0.1690594948792461 a=eks,b=wye,i=6371,x=0.49803548538778086,y=0.22335884494050284 a=eks,b=hat,i=6372,x=0.4246224317545182,y=0.3262297869762637 a=hat,b=pan,i=6373,x=0.0020932075053449184,y=0.9854117764909686 a=wye,b=zee,i=6374,x=0.18643754020877645,y=0.3123085804500255 a=hat,b=hat,i=6375,x=0.8001034675030699,y=0.9517591892658788 a=pan,b=eks,i=6376,x=0.6252933549201062,y=0.555208264819299 a=pan,b=pan,i=6377,x=0.1234059193898962,y=0.4282585828512744 a=eks,b=pan,i=6378,x=0.110887922625855,y=0.6850395297332329 a=hat,b=hat,i=6379,x=0.8361850070054325,y=0.19844462435428833 a=pan,b=eks,i=6380,x=0.2714658186149983,y=0.8900328486062874 a=hat,b=eks,i=6381,x=0.9299884067645247,y=0.9833998868880498 a=zee,b=eks,i=6382,x=0.5086463065649875,y=0.7232680771660464 a=eks,b=zee,i=6383,x=0.14567680811548367,y=0.7666281407205074 a=pan,b=pan,i=6384,x=0.6344408306479109,y=0.06196040433120564 a=eks,b=wye,i=6385,x=0.375259929118559,y=0.37681150088581805 a=hat,b=pan,i=6386,x=0.09907032231055479,y=0.11845065981831315 a=eks,b=wye,i=6387,x=0.5738630943778305,y=0.1629984838329911 a=wye,b=wye,i=6388,x=0.023110383118460698,y=0.4068502633328007 a=eks,b=wye,i=6389,x=0.06029233433804437,y=0.0069107595974849945 a=eks,b=eks,i=6390,x=0.37636185226364116,y=0.33595097225386006 a=wye,b=eks,i=6391,x=0.5269052228103134,y=0.06811348549954421 a=eks,b=eks,i=6392,x=0.7225625151417873,y=0.24647861320372433 a=pan,b=hat,i=6393,x=0.6164331222493035,y=0.799523761418903 a=pan,b=eks,i=6394,x=0.9066239795995487,y=0.3810678910603539 a=eks,b=eks,i=6395,x=0.013151988906827783,y=0.3911978077086571 a=zee,b=pan,i=6396,x=0.05693046828037929,y=0.0830535181246761 a=wye,b=pan,i=6397,x=0.09815785100601382,y=0.6838294083636631 a=hat,b=wye,i=6398,x=0.8278262369190469,y=0.8063525578215112 a=pan,b=pan,i=6399,x=0.10214678849235426,y=0.8695638422967837 a=wye,b=zee,i=6400,x=0.30136696499099913,y=0.6753346559057617 a=eks,b=pan,i=6401,x=0.3117980184170095,y=0.3896017834660054 a=pan,b=zee,i=6402,x=0.9804741377964931,y=0.49631735811047895 a=wye,b=pan,i=6403,x=0.374109581008899,y=0.9110444354943075 a=zee,b=hat,i=6404,x=0.7164677134055616,y=0.9694565043354904 a=pan,b=hat,i=6405,x=0.9759078114126464,y=0.7063179771371398 a=pan,b=hat,i=6406,x=0.954175493846238,y=0.6691300320475423 a=zee,b=hat,i=6407,x=0.04895042948869599,y=0.5565817121631146 a=zee,b=zee,i=6408,x=0.31225714410247885,y=0.2676588944630799 a=wye,b=zee,i=6409,x=0.7688696231859601,y=0.2251514431056416 a=pan,b=eks,i=6410,x=0.0771175852385313,y=0.43719251713130314 a=zee,b=pan,i=6411,x=0.6943439597980344,y=0.4529874687497758 a=eks,b=pan,i=6412,x=0.028528724411183704,y=0.4117910378534779 a=wye,b=wye,i=6413,x=0.6287761434833328,y=0.9307783735658955 a=zee,b=pan,i=6414,x=0.16675267868516974,y=0.46567693999380766 a=hat,b=hat,i=6415,x=0.8976720079433573,y=0.9828223660778185 a=hat,b=pan,i=6416,x=0.047236756072866926,y=0.7378794124793239 a=hat,b=pan,i=6417,x=0.5832411030367591,y=0.9477789434363258 a=hat,b=hat,i=6418,x=0.3743966868977374,y=0.783174113073371 a=hat,b=hat,i=6419,x=0.7816923607003607,y=0.26730270554894997 a=zee,b=hat,i=6420,x=0.8712427179950256,y=0.7447570934180631 a=wye,b=wye,i=6421,x=0.5648884056728719,y=0.5634331844443893 a=hat,b=wye,i=6422,x=0.01694176656548152,y=0.07336362857726697 a=wye,b=eks,i=6423,x=0.634648698039043,y=0.6818627870740478 a=hat,b=wye,i=6424,x=0.2615797200021953,y=0.06268282068424968 a=zee,b=hat,i=6425,x=0.4347562105046442,y=0.674781093628785 a=hat,b=pan,i=6426,x=0.6291090221287023,y=0.7077446188899329 a=zee,b=zee,i=6427,x=0.1266840835991615,y=0.4710457768189127 a=hat,b=eks,i=6428,x=0.09464086229090107,y=0.47239885675212656 a=wye,b=zee,i=6429,x=0.4663382505006868,y=0.8049521146793138 a=zee,b=pan,i=6430,x=0.4694715777452184,y=0.8671762254103113 a=eks,b=hat,i=6431,x=0.5070929456626403,y=0.4141949031576415 a=zee,b=eks,i=6432,x=0.9977728531401571,y=0.5555230798468542 a=eks,b=zee,i=6433,x=0.7714689740358521,y=0.4682319612714012 a=wye,b=zee,i=6434,x=0.3396705468736063,y=0.7170093938098063 a=eks,b=wye,i=6435,x=0.29949442818251637,y=0.2980558556550551 a=hat,b=pan,i=6436,x=0.8917689813015088,y=0.984408429326343 a=pan,b=eks,i=6437,x=0.07063477691831455,y=0.8731745285524414 a=wye,b=eks,i=6438,x=0.9311531747307039,y=0.36017141690300103 a=wye,b=eks,i=6439,x=0.27627014363793057,y=0.16739805033116262 a=eks,b=eks,i=6440,x=0.54039073822999,y=0.7382909202030716 a=pan,b=wye,i=6441,x=0.5364355943542373,y=0.8667607097366447 a=zee,b=hat,i=6442,x=0.1019419739884182,y=0.8210522328943843 a=zee,b=hat,i=6443,x=0.8392717810036734,y=0.4095062555606819 a=zee,b=wye,i=6444,x=0.5115020732232286,y=0.5858898596014527 a=eks,b=wye,i=6445,x=0.08215358744465884,y=0.4803964930713249 a=pan,b=eks,i=6446,x=0.44656601416029373,y=0.025883415745221905 a=eks,b=pan,i=6447,x=0.2131521138705983,y=0.44443595051013873 a=hat,b=zee,i=6448,x=0.8877041378948662,y=0.37718161280744267 a=hat,b=eks,i=6449,x=0.02954457910704722,y=0.18268010541285318 a=wye,b=hat,i=6450,x=0.06540529634689618,y=0.6973248364919504 a=hat,b=wye,i=6451,x=0.3603702418256457,y=0.945714519438643 a=eks,b=zee,i=6452,x=0.06223787640046563,y=0.8925718669036773 a=hat,b=hat,i=6453,x=0.6640804340662215,y=0.7894591475325365 a=zee,b=hat,i=6454,x=0.3766538672292219,y=0.4455838705050216 a=wye,b=pan,i=6455,x=0.23373281011403946,y=0.3153880547268789 a=wye,b=pan,i=6456,x=0.03036849011680509,y=0.2750194685259788 a=wye,b=eks,i=6457,x=0.7538211276818132,y=0.001441310514862515 a=pan,b=hat,i=6458,x=0.09729717910412794,y=0.19414276392139473 a=wye,b=hat,i=6459,x=0.5675430389740692,y=0.8272519001873508 a=eks,b=wye,i=6460,x=0.5637263196436371,y=0.670195472057473 a=wye,b=wye,i=6461,x=0.6778284989779373,y=0.0285879376093221 a=hat,b=eks,i=6462,x=0.9921482859148919,y=0.5987898976105622 a=wye,b=wye,i=6463,x=0.3211875999010735,y=0.7834800976581381 a=eks,b=pan,i=6464,x=0.2544291614706208,y=0.6807274563683547 a=wye,b=pan,i=6465,x=0.9167490958878957,y=0.9855848244933287 a=pan,b=zee,i=6466,x=0.15059271173810918,y=0.44163751220849723 a=zee,b=hat,i=6467,x=0.8143906454818576,y=0.05494909360709832 a=pan,b=zee,i=6468,x=0.9487811607055657,y=0.47218047025346854 a=eks,b=wye,i=6469,x=0.5901730276534817,y=0.8155922672887547 a=hat,b=wye,i=6470,x=0.6390276410501727,y=0.7865739186729956 a=hat,b=hat,i=6471,x=0.9494189095418566,y=0.3376440579707607 a=wye,b=zee,i=6472,x=0.6214639311843375,y=0.5100489809959527 a=wye,b=pan,i=6473,x=0.38012438275479565,y=0.990757480229546 a=eks,b=eks,i=6474,x=0.21187331402552312,y=0.3570247389877106 a=pan,b=wye,i=6475,x=0.1407760095778986,y=0.4114197966182903 a=zee,b=eks,i=6476,x=0.9687676442631526,y=0.3778953089069811 a=wye,b=hat,i=6477,x=0.4489569133156198,y=0.37328013990205033 a=wye,b=wye,i=6478,x=0.42854180852415313,y=0.9807031803546391 a=hat,b=zee,i=6479,x=0.702402839401389,y=0.7009502307426156 a=eks,b=zee,i=6480,x=0.9676699721896564,y=0.22422126244502638 a=hat,b=hat,i=6481,x=0.6708784819364922,y=0.8308286378718903 a=hat,b=wye,i=6482,x=0.8345542484122913,y=0.2115567403921984 a=eks,b=wye,i=6483,x=0.6489598152434705,y=0.725168237682496 a=zee,b=wye,i=6484,x=0.12383076923326797,y=0.10227618505533276 a=wye,b=wye,i=6485,x=0.6359239484918648,y=0.6087629645637064 a=wye,b=wye,i=6486,x=0.26321351409255855,y=0.10213207378968225 a=pan,b=eks,i=6487,x=0.4153808872409316,y=0.5380953444898547 a=wye,b=zee,i=6488,x=0.4298876367578778,y=0.8740569087259292 a=pan,b=eks,i=6489,x=0.7368633007515517,y=0.3235565157293787 a=hat,b=eks,i=6490,x=0.1904681932728718,y=0.39823383688284875 a=pan,b=hat,i=6491,x=0.40162401516303015,y=0.799676980010159 a=zee,b=zee,i=6492,x=0.6594479172290615,y=0.14884894304112206 a=hat,b=pan,i=6493,x=0.17669129422616314,y=0.17133013634096628 a=wye,b=hat,i=6494,x=0.4038680680240342,y=0.9000810248451881 a=pan,b=pan,i=6495,x=0.7458398054156802,y=0.15394809221770678 a=hat,b=wye,i=6496,x=0.024616285726912657,y=0.5198835249687588 a=eks,b=pan,i=6497,x=0.1184790227809902,y=0.7840803727709396 a=zee,b=pan,i=6498,x=0.9228447198201761,y=0.09844115301637657 a=zee,b=zee,i=6499,x=0.5093537663250951,y=0.5070363131757412 a=wye,b=wye,i=6500,x=0.04793995870348999,y=0.7326376271762662 a=wye,b=zee,i=6501,x=0.857769146584233,y=0.7284491562757176 a=hat,b=wye,i=6502,x=0.13952314891314033,y=0.21138680405955823 a=hat,b=zee,i=6503,x=0.0821042436799082,y=0.2380454193004119 a=zee,b=pan,i=6504,x=0.22170850644080387,y=0.8591089479037638 a=pan,b=pan,i=6505,x=0.6670057101772067,y=0.369664928277994 a=wye,b=eks,i=6506,x=0.2228766869756198,y=0.23547292675257847 a=hat,b=hat,i=6507,x=0.2037318613195901,y=0.8653218491418396 a=zee,b=hat,i=6508,x=0.5293143753649202,y=0.3032899464869183 a=wye,b=hat,i=6509,x=0.22689252452538788,y=0.01540955658171872 a=zee,b=wye,i=6510,x=0.03761238359284913,y=0.04430693507101946 a=pan,b=eks,i=6511,x=0.4156974178513727,y=0.6505604437223226 a=zee,b=wye,i=6512,x=0.5717578999541683,y=0.583339576596991 a=eks,b=wye,i=6513,x=0.2576348537935582,y=0.02891940447221053 a=zee,b=wye,i=6514,x=0.7108561722879589,y=0.5343855601720103 a=pan,b=wye,i=6515,x=0.20906185021483092,y=0.7346487645413573 a=pan,b=pan,i=6516,x=0.16436389636346782,y=0.06142769237145096 a=wye,b=hat,i=6517,x=0.9499786087950957,y=0.9169897551951627 a=hat,b=wye,i=6518,x=0.11226676145430348,y=0.3389463928651728 a=zee,b=zee,i=6519,x=0.2323137819710005,y=0.21425984944922594 a=wye,b=eks,i=6520,x=0.7524818540927941,y=0.9710297784453114 a=pan,b=wye,i=6521,x=0.4364322319855357,y=0.8466924609197165 a=hat,b=wye,i=6522,x=0.9673009309832951,y=0.33015592019384987 a=pan,b=zee,i=6523,x=0.5065662166353603,y=0.017151576997059825 a=wye,b=pan,i=6524,x=0.4239737405316326,y=0.24586595155563684 a=wye,b=eks,i=6525,x=0.666984074931497,y=0.5881526921363845 a=zee,b=eks,i=6526,x=0.7035055465426836,y=0.9029683394431433 a=hat,b=hat,i=6527,x=0.48083662190863985,y=0.6503200309394563 a=eks,b=eks,i=6528,x=0.35544201168726874,y=0.26203559629802176 a=eks,b=wye,i=6529,x=0.6483532909041725,y=0.27350007757294326 a=hat,b=zee,i=6530,x=0.6725507341754717,y=0.8211175540313643 a=pan,b=eks,i=6531,x=0.9263381279440988,y=0.7230758102834317 a=zee,b=eks,i=6532,x=0.9504925230076702,y=0.3707214379298016 a=pan,b=hat,i=6533,x=0.2968690724659714,y=0.5710523550663877 a=hat,b=wye,i=6534,x=0.09447988348358638,y=0.21201328127649932 a=hat,b=eks,i=6535,x=0.0022062240850495574,y=0.3458564847842249 a=eks,b=eks,i=6536,x=0.08799574586608505,y=0.16463115926454674 a=pan,b=pan,i=6537,x=0.15749262177445233,y=0.3950102135965362 a=hat,b=hat,i=6538,x=0.4868613643303731,y=0.8080900505454058 a=pan,b=eks,i=6539,x=0.7612094490147115,y=0.4401071622837852 a=hat,b=zee,i=6540,x=0.42723999009924263,y=0.5155261035021511 a=pan,b=hat,i=6541,x=0.0420481636052179,y=0.3896076829423738 a=zee,b=pan,i=6542,x=0.6629759666763753,y=0.7114746505059143 a=pan,b=pan,i=6543,x=0.8686279923185595,y=0.3493091545672151 a=pan,b=hat,i=6544,x=0.48676766407802263,y=0.2518094002262543 a=pan,b=eks,i=6545,x=0.8135981715168512,y=0.4300391107446847 a=zee,b=hat,i=6546,x=0.18939671235009936,y=0.5074696127752749 a=pan,b=wye,i=6547,x=0.7600528676641951,y=0.4426657030274146 a=hat,b=zee,i=6548,x=0.9011359340858558,y=0.6061658741277544 a=wye,b=wye,i=6549,x=0.2051254389063183,y=0.05111364491561332 a=hat,b=zee,i=6550,x=0.38066561435480195,y=0.42936645455121314 a=wye,b=pan,i=6551,x=0.018388994580471718,y=0.9954888468513496 a=wye,b=wye,i=6552,x=0.6253051834446587,y=0.29559701533864535 a=wye,b=eks,i=6553,x=0.33502063619497235,y=0.2610167700436856 a=pan,b=hat,i=6554,x=0.7802269675523349,y=0.9534940914356625 a=wye,b=hat,i=6555,x=0.005663846527729333,y=0.48584311997319796 a=eks,b=hat,i=6556,x=0.14062017897722112,y=0.005932662015826984 a=zee,b=pan,i=6557,x=0.3235867320680704,y=0.9056759816070373 a=wye,b=eks,i=6558,x=0.8070546249299714,y=0.09046129583350693 a=eks,b=hat,i=6559,x=0.9459853213004996,y=0.4362855250788259 a=pan,b=wye,i=6560,x=0.0727664463558585,y=0.025570241966542673 a=pan,b=zee,i=6561,x=0.6816547334568862,y=0.4142699086191578 a=zee,b=hat,i=6562,x=0.516217374487157,y=0.6640919516818178 a=hat,b=pan,i=6563,x=0.05685851331978431,y=0.6903540720393333 a=eks,b=wye,i=6564,x=0.7790458055803663,y=0.6522738145614022 a=hat,b=eks,i=6565,x=0.8990182808114324,y=0.971140059395297 a=eks,b=zee,i=6566,x=0.5308026859083895,y=0.6453041296190671 a=eks,b=hat,i=6567,x=0.4215632982227624,y=0.7633632892500558 a=hat,b=hat,i=6568,x=0.6015424402169296,y=0.9136579408737084 a=eks,b=zee,i=6569,x=0.07024602364065347,y=0.10258813515051479 a=hat,b=zee,i=6570,x=0.3550675740695889,y=0.007910225883702049 a=zee,b=pan,i=6571,x=0.1632710729418324,y=0.03017711376568888 a=eks,b=pan,i=6572,x=0.9270875444507882,y=0.637374878466062 a=hat,b=hat,i=6573,x=0.05509535512573205,y=0.8918234294509011 a=wye,b=wye,i=6574,x=0.9555552809704153,y=0.41421382030170906 a=pan,b=wye,i=6575,x=0.15402188087239954,y=0.8691716209727222 a=pan,b=zee,i=6576,x=0.8777708761889912,y=0.5786474005042914 a=pan,b=pan,i=6577,x=0.3993469483222466,y=0.3892398770682076 a=hat,b=hat,i=6578,x=0.8463232011086974,y=0.18319003947637869 a=wye,b=eks,i=6579,x=0.24777952654263558,y=0.27916343904186647 a=eks,b=eks,i=6580,x=0.6495626911864495,y=0.9137400574083774 a=eks,b=zee,i=6581,x=0.0552357804759368,y=0.27859129675614414 a=eks,b=wye,i=6582,x=0.047528529169082234,y=0.06138863023310337 a=zee,b=hat,i=6583,x=0.8563606600171147,y=0.015181563909825058 a=wye,b=eks,i=6584,x=0.3654798126861838,y=0.8807563837162635 a=eks,b=pan,i=6585,x=0.08337736967964804,y=0.03539849770256276 a=pan,b=wye,i=6586,x=0.29250342016498887,y=0.3069941691864093 a=wye,b=pan,i=6587,x=0.5020409286292801,y=0.009939761220784549 a=pan,b=hat,i=6588,x=0.6710775244097316,y=0.29891597994587726 a=eks,b=eks,i=6589,x=0.8981260130197878,y=0.341172072262118 a=eks,b=hat,i=6590,x=0.036271533325818894,y=0.34617217226715424 a=wye,b=pan,i=6591,x=0.42885075582120236,y=0.9638923170569789 a=eks,b=zee,i=6592,x=0.9241230700230697,y=0.7087787442946673 a=pan,b=eks,i=6593,x=0.5671688159882186,y=0.2525080171055939 a=eks,b=eks,i=6594,x=0.09678454503956313,y=0.9394372732793339 a=hat,b=wye,i=6595,x=0.2134794663649403,y=0.1743187405629919 a=pan,b=zee,i=6596,x=0.7535951031670416,y=0.3524925624995391 a=pan,b=wye,i=6597,x=0.7481435165529386,y=0.6957778649603638 a=zee,b=hat,i=6598,x=0.6210617717475871,y=0.6190922851909458 a=pan,b=zee,i=6599,x=0.18502780307376443,y=0.34510172711084 a=eks,b=hat,i=6600,x=0.34120771327893296,y=0.5437219745072818 a=zee,b=zee,i=6601,x=0.7435038730289294,y=0.06225845908254546 a=zee,b=eks,i=6602,x=0.7661471810537874,y=0.11870848331729167 a=zee,b=eks,i=6603,x=0.9777797463621237,y=0.09720023036402714 a=pan,b=hat,i=6604,x=0.422595464517281,y=0.8343132654700024 a=wye,b=hat,i=6605,x=0.10761057631214699,y=0.7430467022453479 a=pan,b=zee,i=6606,x=0.8486989983659791,y=0.6465788461912306 a=eks,b=hat,i=6607,x=0.7823679742941769,y=0.8209287515709784 a=hat,b=eks,i=6608,x=0.7400121945607447,y=0.03882673241167289 a=wye,b=hat,i=6609,x=0.12667845633514874,y=0.1111690903267013 a=hat,b=zee,i=6610,x=0.9346894562923037,y=0.10587701420327944 a=hat,b=wye,i=6611,x=0.6262544347274932,y=0.30525530738772355 a=wye,b=hat,i=6612,x=0.8337403987989883,y=0.25060970159832463 a=pan,b=zee,i=6613,x=0.8461001648282795,y=0.42374948718873573 a=hat,b=wye,i=6614,x=0.7344391388034486,y=0.25789180389511723 a=hat,b=zee,i=6615,x=0.78349042546449,y=0.44915494280220225 a=zee,b=hat,i=6616,x=0.22594744492269403,y=0.16847954740221938 a=hat,b=hat,i=6617,x=0.1680792215326481,y=0.7434162302269155 a=pan,b=zee,i=6618,x=0.034862418341202295,y=0.7671853898444302 a=wye,b=hat,i=6619,x=0.48364559195372436,y=0.5916684625577362 a=zee,b=hat,i=6620,x=0.49520075702438326,y=0.1675286620908042 a=pan,b=zee,i=6621,x=0.92531350722769,y=0.7331109839366486 a=zee,b=wye,i=6622,x=0.28966831942694526,y=0.5726274862219165 a=eks,b=pan,i=6623,x=0.8441127141759738,y=0.9967304913754049 a=wye,b=hat,i=6624,x=0.5591280937962949,y=0.6627435675727004 a=eks,b=wye,i=6625,x=0.5105119511152182,y=0.5062086629041608 a=zee,b=hat,i=6626,x=0.9866848527389168,y=0.32213040281236427 a=zee,b=pan,i=6627,x=0.021852600596809824,y=0.6287762047371142 a=wye,b=zee,i=6628,x=0.34899619352678224,y=0.6762953600092646 a=eks,b=wye,i=6629,x=0.042973374957347765,y=0.3504215411530547 a=pan,b=hat,i=6630,x=0.5318569983484858,y=0.1981595013443107 a=hat,b=zee,i=6631,x=0.3770252104819539,y=0.9521141704617042 a=zee,b=hat,i=6632,x=0.251621124332819,y=0.8820641410404748 a=hat,b=hat,i=6633,x=0.2959658325331481,y=0.13508551484281162 a=wye,b=hat,i=6634,x=0.09078570109861495,y=0.496300237950696 a=eks,b=pan,i=6635,x=0.1336818909314733,y=0.4638227719158149 a=eks,b=wye,i=6636,x=0.07517679920524767,y=0.4915331134051061 a=eks,b=wye,i=6637,x=0.3352816408227677,y=0.8140380433910319 a=wye,b=zee,i=6638,x=0.591256877732877,y=0.5915874489265203 a=zee,b=zee,i=6639,x=0.9221422139699282,y=0.47360413794657386 a=eks,b=eks,i=6640,x=0.38457971591828066,y=0.7022912637900967 a=eks,b=zee,i=6641,x=0.8781234363470478,y=0.8882819185534889 a=hat,b=pan,i=6642,x=0.005715323745672962,y=0.2447512299512158 a=eks,b=zee,i=6643,x=0.015710994394110722,y=0.33183466779705995 a=wye,b=wye,i=6644,x=0.39250510547900563,y=0.08289629956063027 a=eks,b=hat,i=6645,x=0.261494320247025,y=0.36299917636703616 a=pan,b=pan,i=6646,x=0.24764166684766364,y=0.9615131721631346 a=hat,b=zee,i=6647,x=0.07946351924617867,y=0.9130106536641815 a=pan,b=wye,i=6648,x=0.23702724653048457,y=0.11584533450215717 a=pan,b=hat,i=6649,x=0.6519700937726137,y=0.34886054594961424 a=hat,b=wye,i=6650,x=0.4661494621587131,y=0.17426048946142003 a=zee,b=eks,i=6651,x=0.47348695334894386,y=0.4301930194799014 a=pan,b=zee,i=6652,x=0.4602949257627642,y=0.49975689849461613 a=hat,b=eks,i=6653,x=0.8374977303853919,y=0.5694625331922527 a=zee,b=eks,i=6654,x=0.5422936444892872,y=0.5852344409380648 a=pan,b=hat,i=6655,x=0.6453370235827801,y=0.5399548634478539 a=wye,b=hat,i=6656,x=0.796475923939686,y=0.010301259372155425 a=pan,b=pan,i=6657,x=0.7793713291305154,y=0.43736432518686286 a=zee,b=wye,i=6658,x=0.026272697033822512,y=0.8586650268622298 a=pan,b=hat,i=6659,x=0.8340965806153038,y=0.9954916059691153 a=wye,b=hat,i=6660,x=0.797154755771274,y=0.5736771633024341 a=wye,b=zee,i=6661,x=0.8188492526845532,y=0.4439387096787365 a=eks,b=zee,i=6662,x=0.692659935953495,y=0.014750331023098417 a=pan,b=hat,i=6663,x=0.5189752727315453,y=0.27114682476438556 a=wye,b=pan,i=6664,x=0.8410807442089315,y=0.5618783788762672 a=zee,b=wye,i=6665,x=0.750023688775221,y=0.8540304746331103 a=hat,b=hat,i=6666,x=0.6568757213906617,y=0.023741446240077235 a=hat,b=zee,i=6667,x=0.5925080941699123,y=0.26022346139524233 a=pan,b=zee,i=6668,x=0.5792938319765554,y=0.549059780249718 a=pan,b=pan,i=6669,x=0.40578589985803115,y=0.991882019921512 a=hat,b=pan,i=6670,x=0.5062335371686814,y=0.25014874809168464 a=zee,b=pan,i=6671,x=0.8485250852135324,y=0.42291127183964006 a=eks,b=zee,i=6672,x=0.8633240831439754,y=0.805776035676606 a=eks,b=pan,i=6673,x=0.5844555116526361,y=0.9258656111924322 a=eks,b=pan,i=6674,x=0.07876117692793061,y=0.6162828639866715 a=eks,b=zee,i=6675,x=0.6002332633428729,y=0.02737805769773405 a=zee,b=eks,i=6676,x=0.7361247716287402,y=0.4981984945475131 a=eks,b=hat,i=6677,x=0.07057457921469279,y=0.27327598383734664 a=wye,b=eks,i=6678,x=0.13317313653408192,y=0.833936738251508 a=zee,b=pan,i=6679,x=0.36757640497694033,y=0.15666791431421667 a=pan,b=wye,i=6680,x=0.7228498260423928,y=0.16029570100550605 a=zee,b=wye,i=6681,x=0.23575638607482352,y=0.5267963423656761 a=wye,b=wye,i=6682,x=0.05864862278509386,y=0.968278945419499 a=hat,b=pan,i=6683,x=0.6654580371987767,y=0.9155359993727842 a=eks,b=hat,i=6684,x=0.11258817875708949,y=0.5202664086593939 a=wye,b=pan,i=6685,x=0.2633941946281759,y=0.611467934771218 a=eks,b=eks,i=6686,x=0.8316637163146731,y=0.3179748046122216 a=eks,b=hat,i=6687,x=0.4611093872251627,y=0.4933386211537618 a=pan,b=pan,i=6688,x=0.13485289624642116,y=0.30288273557456213 a=zee,b=zee,i=6689,x=0.9273055357466653,y=0.054449902661783844 a=zee,b=hat,i=6690,x=0.5203670639579945,y=0.7962270767115127 a=hat,b=wye,i=6691,x=0.6886657290157878,y=0.9480662991851704 a=eks,b=hat,i=6692,x=0.09793478921203369,y=0.45646997283913904 a=zee,b=hat,i=6693,x=0.6887185377427641,y=0.2725371105355715 a=pan,b=wye,i=6694,x=0.08459665725133014,y=0.6480627030857502 a=eks,b=wye,i=6695,x=0.9070253492729443,y=0.8359657479869284 a=eks,b=pan,i=6696,x=0.5213061786374872,y=0.9436108956847651 a=eks,b=wye,i=6697,x=0.38079548707281974,y=0.7146301348085543 a=pan,b=pan,i=6698,x=0.24992815869516327,y=0.7828473032320792 a=wye,b=eks,i=6699,x=0.4863235665190313,y=0.024761627522226104 a=eks,b=wye,i=6700,x=0.11486299826891566,y=0.7732953412442202 a=eks,b=pan,i=6701,x=0.11289143979118377,y=0.5154344501380237 a=pan,b=pan,i=6702,x=0.09897861729160984,y=0.1632726180578581 a=zee,b=pan,i=6703,x=0.6063357396844151,y=0.9440640953293378 a=wye,b=zee,i=6704,x=0.9929065501226577,y=0.9563353213992627 a=zee,b=zee,i=6705,x=0.6695263366217671,y=0.9094821746571289 a=eks,b=hat,i=6706,x=0.6005219270357064,y=0.7674256844260718 a=pan,b=pan,i=6707,x=0.7568092546831552,y=0.30011145741383816 a=eks,b=wye,i=6708,x=0.3630047546497195,y=0.3731502489099452 a=pan,b=wye,i=6709,x=0.6499789136488362,y=0.9975126213435949 a=pan,b=eks,i=6710,x=0.9822306336820864,y=0.9518481162696052 a=wye,b=wye,i=6711,x=0.6529313233924365,y=0.16117133810135675 a=hat,b=eks,i=6712,x=0.0038597545092279306,y=0.04201771404673427 a=hat,b=hat,i=6713,x=0.4327034173748717,y=0.40765932026954144 a=pan,b=eks,i=6714,x=0.6768196355507363,y=0.4866501412692976 a=pan,b=pan,i=6715,x=0.941886673981322,y=0.6955697200870666 a=wye,b=eks,i=6716,x=0.7399610338026938,y=0.7410171019957901 a=wye,b=eks,i=6717,x=0.867978110755599,y=0.5614068975084064 a=eks,b=hat,i=6718,x=0.24524935543537574,y=0.6137124860108586 a=zee,b=pan,i=6719,x=0.1581978243465465,y=0.8467816744572415 a=eks,b=zee,i=6720,x=0.14299332956774857,y=0.3448281281418095 a=zee,b=hat,i=6721,x=0.6375447951528392,y=0.9688821643544498 a=zee,b=wye,i=6722,x=0.13464497699175937,y=0.5072303450060313 a=wye,b=pan,i=6723,x=0.08857317290220112,y=0.22813936075330932 a=wye,b=zee,i=6724,x=0.9180101472288132,y=0.4772553128152984 a=eks,b=zee,i=6725,x=0.5257382125487153,y=0.28145993503907585 a=hat,b=wye,i=6726,x=0.8681656798259132,y=0.5422446735924256 a=hat,b=hat,i=6727,x=0.6760254739914621,y=0.38899478823906797 a=wye,b=hat,i=6728,x=0.19864833682412852,y=0.07849170872015998 a=wye,b=eks,i=6729,x=0.0725487679182576,y=0.6718016982732007 a=zee,b=pan,i=6730,x=0.664189415821601,y=0.9231485351812634 a=pan,b=eks,i=6731,x=0.3748183297884402,y=0.14651294307202578 a=hat,b=eks,i=6732,x=0.19051425073038974,y=0.2534461176951027 a=hat,b=pan,i=6733,x=0.420176119585988,y=0.5325617521489726 a=pan,b=pan,i=6734,x=0.1580686510357059,y=0.5545289683879925 a=pan,b=zee,i=6735,x=0.34376736360822124,y=0.8783403362652445 a=wye,b=eks,i=6736,x=0.1720144618863838,y=0.07472067325986242 a=wye,b=zee,i=6737,x=0.7735497202626829,y=0.39904858822422706 a=zee,b=wye,i=6738,x=0.6916920100867227,y=0.15860111481046824 a=pan,b=pan,i=6739,x=0.7724445003059343,y=0.10599738910890832 a=hat,b=hat,i=6740,x=0.1638749831040246,y=0.33942864618967783 a=hat,b=pan,i=6741,x=0.5132827171435942,y=0.30511383816187543 a=eks,b=pan,i=6742,x=0.7821265240696961,y=0.5002704992494771 a=zee,b=pan,i=6743,x=0.5963266420934059,y=0.29065786430330587 a=pan,b=pan,i=6744,x=0.3890975093181427,y=0.13247688252534073 a=eks,b=eks,i=6745,x=0.17791482999411534,y=0.49908183588985267 a=eks,b=zee,i=6746,x=0.9727441527624078,y=0.1416421024960326 a=zee,b=wye,i=6747,x=0.723551831416918,y=0.2807129773827569 a=eks,b=hat,i=6748,x=0.5710553437496192,y=0.06737951674524745 a=pan,b=wye,i=6749,x=0.9967283968435253,y=0.4586425241398737 a=zee,b=eks,i=6750,x=0.411125321089135,y=0.47877014881710245 a=wye,b=pan,i=6751,x=0.5228421813260895,y=0.9476995312395788 a=eks,b=hat,i=6752,x=0.5272144612869077,y=0.5823689048097198 a=pan,b=pan,i=6753,x=0.6092847281248764,y=0.08166906720980371 a=pan,b=pan,i=6754,x=0.03127627780352893,y=0.7077713273089731 a=wye,b=pan,i=6755,x=0.9394158998984187,y=0.4097422792388996 a=eks,b=pan,i=6756,x=0.7136237306098985,y=0.44757595968820907 a=eks,b=wye,i=6757,x=0.6668899487792558,y=0.6148196125913775 a=wye,b=eks,i=6758,x=0.24918942240065567,y=0.1175614364985561 a=hat,b=hat,i=6759,x=0.4409476763420297,y=0.37269928936748364 a=wye,b=eks,i=6760,x=0.7875787294909694,y=0.039280684999618454 a=eks,b=wye,i=6761,x=0.846782848681552,y=0.7680754064510079 a=wye,b=eks,i=6762,x=0.6630016803214965,y=0.35559642495764865 a=hat,b=zee,i=6763,x=0.8827431489428148,y=0.8101223666047421 a=wye,b=eks,i=6764,x=0.8818772544000334,y=0.5852259091501919 a=wye,b=wye,i=6765,x=0.6302491045216058,y=0.35058599080261854 a=wye,b=zee,i=6766,x=0.8428810279931461,y=0.06453198742123845 a=hat,b=eks,i=6767,x=0.41034801950126865,y=0.7814715051154284 a=eks,b=hat,i=6768,x=0.807164432383456,y=0.10155228923520643 a=wye,b=zee,i=6769,x=0.015938042152491505,y=0.2467410432381938 a=zee,b=wye,i=6770,x=0.4647151786207453,y=0.09586765050852464 a=zee,b=wye,i=6771,x=0.5282093689650457,y=0.45570775635349325 a=pan,b=wye,i=6772,x=0.8587471775202551,y=0.07946050584311648 a=wye,b=pan,i=6773,x=0.1251517157188331,y=0.14006157275798192 a=wye,b=zee,i=6774,x=0.6171307886636815,y=0.23263807093903088 a=zee,b=eks,i=6775,x=0.7107364083112168,y=0.747744177326698 a=pan,b=eks,i=6776,x=0.7402366773916875,y=0.5425967566595283 a=pan,b=pan,i=6777,x=0.8587338035081189,y=0.6815723862967287 a=hat,b=eks,i=6778,x=0.7374724325083976,y=0.33507894275895755 a=wye,b=eks,i=6779,x=0.051803530307045764,y=0.9635968624328757 a=wye,b=wye,i=6780,x=0.7420078463856731,y=0.24580232345831476 a=hat,b=pan,i=6781,x=0.31100740187371934,y=0.15295409834535245 a=eks,b=eks,i=6782,x=0.47803669544518634,y=0.9519657570611978 a=zee,b=eks,i=6783,x=0.09545968133365756,y=0.010784899546895543 a=zee,b=wye,i=6784,x=0.609956046414881,y=0.6555640945124119 a=pan,b=wye,i=6785,x=0.5316777127876826,y=0.6104961546467026 a=pan,b=wye,i=6786,x=0.25974778249116803,y=0.08881791270926387 a=eks,b=pan,i=6787,x=0.5461613458666269,y=0.40749063143865827 a=wye,b=eks,i=6788,x=0.59700206673727,y=0.5092154392509416 a=eks,b=hat,i=6789,x=0.11384620831197945,y=0.21498304087430675 a=zee,b=eks,i=6790,x=0.3259643807042226,y=0.294440283499696 a=hat,b=pan,i=6791,x=0.3918842930839752,y=0.4866508833195289 a=pan,b=pan,i=6792,x=0.5301735918581785,y=0.8191767116079914 a=zee,b=wye,i=6793,x=0.09304197140837533,y=0.41014621328207224 a=zee,b=wye,i=6794,x=0.9068197358960509,y=0.08182204172224206 a=eks,b=hat,i=6795,x=0.6802118298728432,y=0.3352065052212123 a=eks,b=wye,i=6796,x=0.5909399906562114,y=0.5580035130979556 a=eks,b=hat,i=6797,x=0.9632745089330987,y=0.7078513092089819 a=eks,b=wye,i=6798,x=0.15363778133009276,y=0.6325423246809744 a=zee,b=eks,i=6799,x=0.9004852465295646,y=0.9465220966082961 a=wye,b=zee,i=6800,x=0.24904470404318169,y=0.4920531920025397 a=zee,b=pan,i=6801,x=0.6403589395715946,y=0.11274127473071038 a=zee,b=wye,i=6802,x=0.09957278874549647,y=0.715843577221054 a=pan,b=wye,i=6803,x=0.22156558120148118,y=0.6572540721541829 a=hat,b=zee,i=6804,x=0.7027731517392186,y=0.3606531856415711 a=pan,b=hat,i=6805,x=0.8362059152851221,y=0.9472897492210541 a=wye,b=wye,i=6806,x=0.46185714288118773,y=0.9932895877413421 a=pan,b=eks,i=6807,x=0.5997233937030831,y=0.005793331189633544 a=hat,b=zee,i=6808,x=0.8753345579411498,y=0.04597732362263285 a=wye,b=wye,i=6809,x=0.8141741575210425,y=0.16783710466982837 a=zee,b=pan,i=6810,x=0.15680318230138823,y=0.9869386425704416 a=eks,b=wye,i=6811,x=0.7065407352836623,y=0.8368678138790903 a=wye,b=wye,i=6812,x=0.4084090484238747,y=0.9288230265446697 a=eks,b=eks,i=6813,x=0.22195791037233625,y=0.46000678721121724 a=hat,b=zee,i=6814,x=0.06615677821987875,y=0.9808603644184125 a=zee,b=zee,i=6815,x=0.5000818809944109,y=0.771946292891575 a=wye,b=pan,i=6816,x=0.9209420415686578,y=0.13984027426134304 a=hat,b=wye,i=6817,x=0.8610216667264953,y=0.5382429359595315 a=wye,b=hat,i=6818,x=0.9490099609383663,y=0.06552721253446325 a=eks,b=pan,i=6819,x=0.5703992590220686,y=0.8637215064086881 a=hat,b=zee,i=6820,x=0.2416040451020256,y=0.9776127555858962 a=zee,b=hat,i=6821,x=0.4912693762402818,y=0.5204860488656815 a=hat,b=eks,i=6822,x=0.1966228532052421,y=0.975043572227354 a=wye,b=zee,i=6823,x=0.5781208624185773,y=0.8409446241801248 a=eks,b=hat,i=6824,x=0.43385175975083057,y=0.41792395879700195 a=eks,b=eks,i=6825,x=0.24716919525264047,y=0.9659819670046521 a=zee,b=pan,i=6826,x=0.8340499179886257,y=0.9535536917685269 a=pan,b=pan,i=6827,x=0.7938211511368373,y=0.4559826830758338 a=pan,b=hat,i=6828,x=0.3431841672353826,y=0.9731740314694275 a=zee,b=hat,i=6829,x=0.41031480623763106,y=0.45880274972572666 a=pan,b=pan,i=6830,x=0.1142681517107742,y=0.2829811068526855 a=eks,b=wye,i=6831,x=0.6311471125678166,y=0.35079658233745936 a=hat,b=pan,i=6832,x=0.7805431061337192,y=0.6499156385099167 a=wye,b=hat,i=6833,x=0.5448291589816822,y=0.24233292928888261 a=pan,b=wye,i=6834,x=0.1500861412508071,y=0.4288594929835393 a=hat,b=zee,i=6835,x=0.3554971979233431,y=0.7003527906078075 a=eks,b=eks,i=6836,x=0.8314643867997237,y=0.6792470433081391 a=wye,b=eks,i=6837,x=0.1301888660610001,y=0.9808398029246085 a=hat,b=wye,i=6838,x=0.7770652463104809,y=0.6687521390314989 a=eks,b=hat,i=6839,x=0.6771345756994601,y=0.3254097306513094 a=eks,b=zee,i=6840,x=0.6482286253811516,y=0.8094333984928788 a=wye,b=pan,i=6841,x=0.2567333227180485,y=0.3632000329956243 a=hat,b=pan,i=6842,x=0.5591318142449471,y=0.30371083367502205 a=wye,b=eks,i=6843,x=0.22133780427833827,y=0.12550147451196636 a=pan,b=zee,i=6844,x=0.6378228582954686,y=0.173029586655695 a=wye,b=zee,i=6845,x=0.18295530986921293,y=0.5733022672604575 a=wye,b=eks,i=6846,x=0.6423397517155203,y=0.8356059098780667 a=wye,b=eks,i=6847,x=0.5654097817406883,y=0.4917356814957925 a=pan,b=hat,i=6848,x=0.13005488453891356,y=0.36376504302138823 a=pan,b=pan,i=6849,x=0.7292341394730394,y=0.9619604141937782 a=wye,b=hat,i=6850,x=0.9700608965235021,y=0.3990830943961574 a=hat,b=zee,i=6851,x=0.626771477414734,y=0.20044484931996054 a=hat,b=hat,i=6852,x=0.12907922332721755,y=0.9897873547381626 a=zee,b=hat,i=6853,x=0.16224652017611052,y=0.3566205026903966 a=pan,b=pan,i=6854,x=0.7113055088893854,y=0.8848278821601264 a=hat,b=zee,i=6855,x=0.03040686539549997,y=0.7759017452917722 a=hat,b=pan,i=6856,x=0.6726315514891058,y=0.9389924558403268 a=hat,b=zee,i=6857,x=0.1411606825265106,y=0.7112133367607912 a=wye,b=wye,i=6858,x=0.3955235311928522,y=0.1986261607297174 a=wye,b=pan,i=6859,x=0.3196180023166212,y=0.22620149742138462 a=eks,b=wye,i=6860,x=0.7484529088599197,y=0.9458674650980478 a=hat,b=eks,i=6861,x=0.5333359352881868,y=0.6705965726039589 a=eks,b=pan,i=6862,x=0.03969161279974032,y=0.6429740057666072 a=pan,b=wye,i=6863,x=0.8290379851119192,y=0.4133616397651474 a=hat,b=eks,i=6864,x=0.5485065278651766,y=0.5820232711323319 a=pan,b=zee,i=6865,x=0.9369018030633546,y=0.2730985696260336 a=eks,b=wye,i=6866,x=0.7518803820253178,y=0.1629275612174501 a=zee,b=wye,i=6867,x=0.9102230409548707,y=0.9019213473878609 a=pan,b=zee,i=6868,x=0.4631144547528713,y=0.17716733576639176 a=hat,b=eks,i=6869,x=0.2542372110197165,y=0.30416858126881696 a=pan,b=wye,i=6870,x=0.4253800398968478,y=0.033574775026327885 a=eks,b=eks,i=6871,x=0.5063694703652393,y=0.006032505525179865 a=wye,b=eks,i=6872,x=0.38036352987366395,y=0.46731687201043415 a=wye,b=eks,i=6873,x=0.9798362101131622,y=0.797643782226173 a=eks,b=hat,i=6874,x=0.5227336833787608,y=0.9908448955682759 a=eks,b=zee,i=6875,x=0.606422651768782,y=0.914840315532674 a=pan,b=hat,i=6876,x=0.5129530277212709,y=0.7790386991794965 a=hat,b=eks,i=6877,x=0.11459832283361682,y=0.767333306893435 a=zee,b=pan,i=6878,x=0.31397281280064293,y=0.16291546501309395 a=pan,b=zee,i=6879,x=0.5284562057774806,y=0.7918033883536163 a=eks,b=wye,i=6880,x=0.5984387679261401,y=0.9753479770314387 a=zee,b=hat,i=6881,x=0.5862597507571483,y=0.7707420703176064 a=pan,b=eks,i=6882,x=0.5334986785639318,y=0.9783513827876675 a=zee,b=wye,i=6883,x=0.7679069545156161,y=0.7810806767827133 a=hat,b=pan,i=6884,x=0.25121382521102964,y=0.08373878679612079 a=wye,b=hat,i=6885,x=0.05142094104336947,y=0.9978267954724354 a=pan,b=zee,i=6886,x=0.27515151044558905,y=0.8898719178215098 a=hat,b=wye,i=6887,x=0.3290836499787756,y=0.8942355162084987 a=zee,b=pan,i=6888,x=0.7705250058516857,y=0.9061349225471161 a=eks,b=pan,i=6889,x=0.8727519098818294,y=0.38422445867709476 a=zee,b=hat,i=6890,x=0.07814285019815281,y=0.6524720493819127 a=eks,b=eks,i=6891,x=0.553350512403786,y=0.21084722161813896 a=zee,b=hat,i=6892,x=0.307754111293953,y=0.5638948621786333 a=zee,b=zee,i=6893,x=0.8600709509023364,y=0.160849705704027 a=zee,b=hat,i=6894,x=0.5702891448833654,y=0.4084412240884401 a=zee,b=hat,i=6895,x=0.6946417768735003,y=0.41460355943617566 a=zee,b=hat,i=6896,x=0.7359164967591003,y=0.8293086338798401 a=wye,b=hat,i=6897,x=0.051569812567012985,y=0.7086891870318104 a=wye,b=wye,i=6898,x=0.890610959944813,y=0.42067321781938505 a=zee,b=zee,i=6899,x=0.5568256158466047,y=0.15682857405624617 a=pan,b=pan,i=6900,x=0.46106520857783606,y=0.8984962995391143 a=zee,b=zee,i=6901,x=0.15447805903030032,y=0.3708113295153489 a=wye,b=hat,i=6902,x=0.2178563623721872,y=0.5234598648171618 a=wye,b=eks,i=6903,x=0.22666531785803,y=0.6725621891005873 a=hat,b=wye,i=6904,x=0.8610376333440763,y=0.7594915846085165 a=zee,b=pan,i=6905,x=0.2561178270791922,y=0.11749615398320445 a=hat,b=zee,i=6906,x=0.07026123437146103,y=0.8267280415036612 a=wye,b=zee,i=6907,x=0.6367788848968293,y=0.6394774166453675 a=wye,b=zee,i=6908,x=0.809527772497878,y=0.13573629343090665 a=hat,b=hat,i=6909,x=0.2602273628092978,y=0.6319094113304579 a=pan,b=wye,i=6910,x=0.25097439132798516,y=0.0005109887783484313 a=zee,b=zee,i=6911,x=0.8474137462624203,y=0.25704106383367986 a=zee,b=eks,i=6912,x=0.8996806626412216,y=0.8543839233593294 a=pan,b=zee,i=6913,x=0.6587566128742129,y=0.5632886251369115 a=eks,b=pan,i=6914,x=0.6621105804379062,y=0.9655406039971886 a=eks,b=hat,i=6915,x=0.2111094032818116,y=0.5848242928084593 a=zee,b=hat,i=6916,x=0.984302853476379,y=0.3318129327554279 a=wye,b=eks,i=6917,x=0.4116075902695022,y=0.28661075899283883 a=hat,b=zee,i=6918,x=0.9078126587488162,y=0.825042025154357 a=hat,b=wye,i=6919,x=0.6271510270374615,y=0.2788131116617252 a=eks,b=pan,i=6920,x=0.5871441514609353,y=0.8959550649206074 a=zee,b=wye,i=6921,x=0.5169699337780084,y=0.8908217878266501 a=hat,b=zee,i=6922,x=0.26862211703298666,y=0.7329656688559485 a=wye,b=hat,i=6923,x=0.9326808746284245,y=0.1899255490512184 a=hat,b=zee,i=6924,x=0.18898941655772628,y=0.41248127061100026 a=eks,b=eks,i=6925,x=0.013945565190257692,y=0.5578850256771833 a=eks,b=eks,i=6926,x=0.48658959418573866,y=0.12700817464144343 a=pan,b=pan,i=6927,x=0.2148229483341345,y=0.142698457109815 a=wye,b=wye,i=6928,x=0.9723961772197747,y=0.9337468605908721 a=pan,b=hat,i=6929,x=0.39047545698773434,y=0.1014408675739632 a=eks,b=zee,i=6930,x=0.5526320529536692,y=0.6589359191373861 a=zee,b=pan,i=6931,x=0.9169134272880114,y=0.45914482802505263 a=wye,b=eks,i=6932,x=0.335776156098611,y=0.5748799322742809 a=pan,b=zee,i=6933,x=0.736088726276053,y=0.9511504821090352 a=pan,b=hat,i=6934,x=0.0735762788752764,y=0.0008249210316072508 a=hat,b=hat,i=6935,x=0.8448124844892154,y=0.7472136644468284 a=wye,b=zee,i=6936,x=0.8005403193787164,y=0.00364938998415798 a=eks,b=wye,i=6937,x=0.21622217154383783,y=0.693609603948259 a=pan,b=eks,i=6938,x=0.3920264992178498,y=0.7658079570315041 a=pan,b=pan,i=6939,x=0.9322271691157334,y=0.5636509019339512 a=pan,b=wye,i=6940,x=0.7428995263807269,y=0.28179583615338055 a=hat,b=eks,i=6941,x=0.7647380306778612,y=0.5588346481843296 a=eks,b=zee,i=6942,x=0.43808251265668563,y=0.7626481299623035 a=wye,b=pan,i=6943,x=0.9077501006486136,y=0.15938270549685063 a=zee,b=hat,i=6944,x=0.30931352961195646,y=0.7930984054369467 a=zee,b=zee,i=6945,x=0.7497323025761014,y=0.19551835687807828 a=hat,b=eks,i=6946,x=0.06859192488355459,y=0.18197505910402123 a=pan,b=eks,i=6947,x=0.6992727384765998,y=0.29778601894865464 a=pan,b=hat,i=6948,x=0.6806028930853153,y=0.5337351071127955 a=wye,b=hat,i=6949,x=0.8798782820732383,y=0.08851766994161492 a=eks,b=wye,i=6950,x=0.5484166834064047,y=0.5444329351784222 a=pan,b=hat,i=6951,x=0.26580629226731123,y=0.6717468181544698 a=wye,b=hat,i=6952,x=0.3046906425663285,y=0.9311855954257118 a=wye,b=hat,i=6953,x=0.0716884908750034,y=0.7032897899381292 a=zee,b=pan,i=6954,x=0.19883557252817674,y=0.8081642410948915 a=zee,b=wye,i=6955,x=0.2873302616631028,y=0.8940998424635924 a=pan,b=wye,i=6956,x=0.05509311089172042,y=0.02187042391982985 a=zee,b=wye,i=6957,x=0.6879906058837991,y=0.12542105731118525 a=hat,b=wye,i=6958,x=0.18834573262459287,y=0.5850606930814083 a=eks,b=pan,i=6959,x=0.11939644968502994,y=0.5520356552775578 a=wye,b=pan,i=6960,x=0.3153717815038891,y=0.09047586220595472 a=zee,b=wye,i=6961,x=0.6007313242961704,y=0.6613290251670858 a=pan,b=zee,i=6962,x=0.7601533500363858,y=0.8925522323934668 a=wye,b=pan,i=6963,x=0.48448541281210233,y=0.41562920864135944 a=hat,b=eks,i=6964,x=0.4992605837600408,y=0.43605518279149746 a=wye,b=hat,i=6965,x=0.45740161659615763,y=0.04534932831025773 a=hat,b=pan,i=6966,x=0.7533879705727782,y=0.5865175721970042 a=eks,b=wye,i=6967,x=0.9773513257418902,y=0.2380306718479056 a=zee,b=zee,i=6968,x=0.6712412554088817,y=0.2720254276549653 a=wye,b=wye,i=6969,x=0.31490517543879204,y=0.21016765203059373 a=hat,b=zee,i=6970,x=0.797989047174311,y=0.2162177019841508 a=hat,b=eks,i=6971,x=0.05477486899188533,y=0.5389943813219003 a=wye,b=wye,i=6972,x=0.4404514385321253,y=0.7283283568308369 a=eks,b=zee,i=6973,x=0.8858598587998294,y=0.6368695546608352 a=zee,b=wye,i=6974,x=0.989576281733764,y=0.6583358951055004 a=eks,b=pan,i=6975,x=0.1301868947541912,y=0.9369685664682424 a=wye,b=wye,i=6976,x=0.3024970191010684,y=0.2093604064761977 a=zee,b=pan,i=6977,x=0.7855530401666628,y=0.9857367912810565 a=pan,b=hat,i=6978,x=0.9643587082677965,y=0.3525023561742381 a=zee,b=hat,i=6979,x=0.236940011648326,y=0.43182187533436656 a=zee,b=eks,i=6980,x=0.7036947557005062,y=0.8967163177168612 a=zee,b=pan,i=6981,x=0.7258773601437264,y=0.43569247036733716 a=pan,b=eks,i=6982,x=0.0009579203969094507,y=0.4374451455672883 a=pan,b=eks,i=6983,x=0.414932981812524,y=0.43196390781557925 a=eks,b=eks,i=6984,x=0.9329999431393118,y=0.17135830698518684 a=pan,b=eks,i=6985,x=0.2597251524181662,y=0.17875541966558117 a=wye,b=pan,i=6986,x=0.397846421602455,y=0.061580742680189204 a=eks,b=hat,i=6987,x=0.10959780180161571,y=0.8943020336797796 a=zee,b=zee,i=6988,x=0.9430266721644799,y=0.5094104013079503 a=eks,b=hat,i=6989,x=0.3313418699976328,y=0.33567997892328394 a=eks,b=zee,i=6990,x=0.5148133498496276,y=0.6918563081083983 a=hat,b=wye,i=6991,x=0.25547073172247026,y=0.20184384726111237 a=pan,b=pan,i=6992,x=0.03213631773319936,y=0.554769673785168 a=wye,b=wye,i=6993,x=0.8254022878057393,y=0.633291096076743 a=pan,b=eks,i=6994,x=0.3537340849132855,y=0.8841969050289067 a=eks,b=pan,i=6995,x=0.09806828374128973,y=0.6430042633610615 a=wye,b=zee,i=6996,x=0.5747272683926599,y=0.48989582464308623 a=pan,b=zee,i=6997,x=0.7983517224073071,y=0.5557697277179173 a=zee,b=zee,i=6998,x=0.7651332678935355,y=0.1986723127864063 a=wye,b=wye,i=6999,x=0.31230656247460964,y=0.7709719364206021 a=hat,b=wye,i=7000,x=0.44889249877909887,y=0.9296219735657666 a=pan,b=hat,i=7001,x=0.1931728782354155,y=0.9434264276805716 a=hat,b=wye,i=7002,x=0.41061585650926835,y=0.01643773647124569 a=zee,b=wye,i=7003,x=0.5815308271025876,y=0.07558886006933907 a=hat,b=hat,i=7004,x=0.5167987887837867,y=0.6125153714308963 a=hat,b=zee,i=7005,x=0.17030551513160364,y=0.6743869951544157 a=zee,b=eks,i=7006,x=0.9635379226473363,y=0.29850368521754844 a=pan,b=eks,i=7007,x=0.20071792427547297,y=0.8474599823946072 a=wye,b=wye,i=7008,x=0.8591581165484377,y=0.3991724887525355 a=zee,b=pan,i=7009,x=0.3868986728643612,y=0.32414353523303663 a=hat,b=eks,i=7010,x=0.6030024004661663,y=0.3056681212721363 a=eks,b=pan,i=7011,x=0.08663635855557505,y=0.8292216812769441 a=pan,b=wye,i=7012,x=0.718361521407771,y=0.5051204438264707 a=pan,b=wye,i=7013,x=0.277094876326926,y=0.602002918971647 a=wye,b=eks,i=7014,x=0.7012074385988786,y=0.5007374216681656 a=zee,b=pan,i=7015,x=0.5613769792191474,y=0.2784096473095522 a=zee,b=wye,i=7016,x=0.9594027753815709,y=0.21779948075500577 a=eks,b=wye,i=7017,x=0.5420542017862827,y=0.36305123317879384 a=zee,b=hat,i=7018,x=0.32805123696394034,y=0.5124093456505748 a=wye,b=eks,i=7019,x=0.3036229968730817,y=0.23518690587775104 a=zee,b=eks,i=7020,x=0.4316289204904483,y=0.08091854356676809 a=hat,b=zee,i=7021,x=0.863877436043872,y=0.5856682390415403 a=zee,b=hat,i=7022,x=0.2071927381626798,y=0.5309301582209865 a=pan,b=eks,i=7023,x=0.29791421670042273,y=0.07470613128293369 a=eks,b=wye,i=7024,x=0.8917532472992171,y=0.14489189839111738 a=hat,b=pan,i=7025,x=0.37840242944286007,y=0.5252842371930347 a=pan,b=zee,i=7026,x=0.5129987522412781,y=0.6196138088300045 a=zee,b=wye,i=7027,x=0.23097612498471853,y=0.86560943277181 a=zee,b=eks,i=7028,x=0.5584826667497241,y=0.7683156302547838 a=hat,b=pan,i=7029,x=0.9655789508856257,y=0.5847058626759788 a=zee,b=pan,i=7030,x=0.6277332467942169,y=0.6792611974173626 a=pan,b=wye,i=7031,x=0.6131961433966792,y=0.687915924439632 a=pan,b=hat,i=7032,x=0.9325179960861075,y=0.9058746805470116 a=zee,b=wye,i=7033,x=0.08845711389601285,y=0.6556664190853554 a=wye,b=wye,i=7034,x=0.6178564629606926,y=0.257518710051613 a=pan,b=pan,i=7035,x=0.6283536854585481,y=0.2469987747711726 a=wye,b=pan,i=7036,x=0.7418713116937065,y=0.21710781972748616 a=pan,b=zee,i=7037,x=0.33589607439034086,y=0.020535990195571174 a=zee,b=zee,i=7038,x=0.2760987429128404,y=0.4680732030302005 a=hat,b=wye,i=7039,x=0.7395205341627435,y=0.7057475465708692 a=eks,b=zee,i=7040,x=0.6082940902168954,y=0.48538987636118824 a=wye,b=hat,i=7041,x=0.20266698834916153,y=0.5813828944396172 a=pan,b=zee,i=7042,x=0.837647351501191,y=0.08974718944866877 a=zee,b=eks,i=7043,x=0.9227470147480153,y=0.7805110973249272 a=eks,b=hat,i=7044,x=0.9125698654022647,y=0.6003269419507505 a=pan,b=pan,i=7045,x=0.9149867225420508,y=0.8482623017705537 a=zee,b=eks,i=7046,x=0.27001776810888767,y=0.5884950099164382 a=zee,b=hat,i=7047,x=0.3821711240746809,y=0.20003488070361253 a=wye,b=zee,i=7048,x=0.20803556414051616,y=0.2099912026909062 a=hat,b=wye,i=7049,x=0.670378278494791,y=0.7076636735945074 a=hat,b=zee,i=7050,x=0.23723928107944892,y=0.14022716241391253 a=hat,b=hat,i=7051,x=0.08564555647369987,y=0.8035765944470057 a=pan,b=pan,i=7052,x=0.2551692350228507,y=0.30169763443298714 a=hat,b=hat,i=7053,x=0.5800900713331231,y=0.1120629753999538 a=wye,b=wye,i=7054,x=0.8075288799285653,y=0.40080406376291855 a=pan,b=zee,i=7055,x=0.3237065988296146,y=0.16406274536872145 a=hat,b=zee,i=7056,x=0.11778152617272919,y=0.6479030514858882 a=zee,b=hat,i=7057,x=0.3051810429960812,y=0.7908669168132235 a=eks,b=zee,i=7058,x=0.656344016455348,y=0.36896554924499647 a=eks,b=hat,i=7059,x=0.920076220476711,y=0.5876972502303767 a=hat,b=eks,i=7060,x=0.9346394642794167,y=0.6814288404781228 a=eks,b=zee,i=7061,x=0.5738169055546608,y=0.21575746069772594 a=pan,b=hat,i=7062,x=0.4847233858259188,y=0.7657727011149124 a=pan,b=wye,i=7063,x=0.39952219916088616,y=0.40591491856978035 a=hat,b=zee,i=7064,x=0.14067685725223567,y=0.3092246716986138 a=eks,b=eks,i=7065,x=0.8605698057139388,y=0.32299577521005374 a=wye,b=pan,i=7066,x=0.8824319081192505,y=0.35485300016641663 a=eks,b=eks,i=7067,x=0.6109777816801221,y=0.24224058206368682 a=pan,b=wye,i=7068,x=0.4549499403459556,y=0.49621131228697424 a=eks,b=pan,i=7069,x=0.9886201663452385,y=0.9412530719900734 a=wye,b=hat,i=7070,x=0.665041142898201,y=0.9595343437808125 a=eks,b=eks,i=7071,x=0.8618148405551886,y=0.3478823253266865 a=pan,b=zee,i=7072,x=0.2724259823227272,y=0.30192794453375993 a=pan,b=wye,i=7073,x=0.6028342052246591,y=0.07993824024604124 a=eks,b=eks,i=7074,x=0.8193690697522501,y=0.503433259768719 a=hat,b=eks,i=7075,x=0.4081232497868382,y=0.44918917218867327 a=pan,b=hat,i=7076,x=0.39435745153096624,y=0.2533507793160499 a=zee,b=eks,i=7077,x=0.9030855046114618,y=0.7353402992136046 a=zee,b=zee,i=7078,x=0.28428013807040586,y=0.3777563622186406 a=zee,b=wye,i=7079,x=0.27996765719480765,y=0.873411216265053 a=zee,b=wye,i=7080,x=0.4095476180955867,y=0.9089358780031519 a=wye,b=pan,i=7081,x=0.5027581392155828,y=0.5918516944292527 a=eks,b=wye,i=7082,x=0.17393135812804061,y=0.8723860687774272 a=wye,b=pan,i=7083,x=0.6981142504634895,y=0.5779284385442213 a=eks,b=hat,i=7084,x=0.2854516522673507,y=0.20310209686600733 a=hat,b=zee,i=7085,x=0.010890023772322621,y=0.6157830695335651 a=hat,b=zee,i=7086,x=0.9886292059134817,y=0.7404507111518657 a=hat,b=pan,i=7087,x=0.8819873483332783,y=0.4236719882838914 a=eks,b=zee,i=7088,x=0.6374047421710877,y=0.16806648423408932 a=eks,b=zee,i=7089,x=0.2711607560909379,y=0.24024418535758385 a=zee,b=pan,i=7090,x=0.23901675556827195,y=0.9642697268066455 a=hat,b=eks,i=7091,x=0.7757377070780304,y=0.9407578395112463 a=eks,b=pan,i=7092,x=0.260858501720898,y=0.6591425472718141 a=pan,b=hat,i=7093,x=0.6397441933292296,y=0.9829200046878069 a=eks,b=wye,i=7094,x=0.44868457406229934,y=0.8112443348137468 a=eks,b=wye,i=7095,x=0.0906962202117284,y=0.591681350241042 a=wye,b=pan,i=7096,x=0.07890849487936957,y=0.41485920875555027 a=wye,b=zee,i=7097,x=0.8196751485720796,y=0.9182400853440643 a=wye,b=pan,i=7098,x=0.06668588398001474,y=0.26172812514471555 a=eks,b=hat,i=7099,x=0.22008401563656388,y=0.04305085018273014 a=pan,b=pan,i=7100,x=0.9285737504002782,y=0.009817451138142141 a=hat,b=eks,i=7101,x=0.981509594449636,y=0.3512738134950749 a=hat,b=hat,i=7102,x=0.014273713288732837,y=0.7356741638793522 a=wye,b=pan,i=7103,x=0.4829108252034583,y=0.6462618208312636 a=eks,b=pan,i=7104,x=0.2936586449378221,y=0.5697398551523063 a=zee,b=hat,i=7105,x=0.2980064088882294,y=0.3531576463065931 a=zee,b=zee,i=7106,x=0.9884822924298222,y=0.9742451923102192 a=pan,b=wye,i=7107,x=0.2998044704471554,y=0.2269111558178346 a=wye,b=eks,i=7108,x=0.2586819630109063,y=0.7581262202061657 a=eks,b=zee,i=7109,x=0.6665600019130787,y=0.5478452197045156 a=zee,b=pan,i=7110,x=0.8179518622169052,y=0.44278658627392875 a=pan,b=hat,i=7111,x=0.06963315314613838,y=0.11691071591581381 a=wye,b=wye,i=7112,x=0.5792946910659483,y=0.7652424387264126 a=eks,b=pan,i=7113,x=0.2918757972941147,y=0.09568558582017328 a=eks,b=hat,i=7114,x=0.9289422804383715,y=0.0973877277219467 a=zee,b=hat,i=7115,x=0.6512838863936804,y=0.2516748002564705 a=zee,b=eks,i=7116,x=0.7404888117639189,y=0.7975704275356439 a=zee,b=wye,i=7117,x=0.3032123219266547,y=0.408039844976006 a=hat,b=eks,i=7118,x=0.34505031276366815,y=0.8337966400074031 a=wye,b=hat,i=7119,x=0.6315033401415422,y=0.9740617533706384 a=pan,b=wye,i=7120,x=0.5205183279285498,y=0.6711794774673148 a=zee,b=eks,i=7121,x=0.6246582352065935,y=0.26995458439418407 a=eks,b=eks,i=7122,x=0.7551924972639424,y=0.43086081813515076 a=pan,b=wye,i=7123,x=0.1635996059631727,y=0.9577567705724599 a=zee,b=wye,i=7124,x=0.5036489463705721,y=0.3876971054515429 a=pan,b=zee,i=7125,x=0.2551365895416149,y=0.28047087188514475 a=eks,b=pan,i=7126,x=0.7428006686642148,y=0.09900719636423816 a=pan,b=hat,i=7127,x=0.30368095354356406,y=0.2597236612256202 a=hat,b=hat,i=7128,x=0.6279447467606394,y=0.4225543625896867 a=wye,b=wye,i=7129,x=0.5482218790981049,y=0.2894225177955031 a=pan,b=pan,i=7130,x=0.5209682344960287,y=0.3459917950310737 a=pan,b=zee,i=7131,x=0.19933196272377474,y=0.33283266063310113 a=pan,b=wye,i=7132,x=0.5712931905065656,y=0.7126877408626767 a=wye,b=hat,i=7133,x=0.8722812709831377,y=0.7402713360198966 a=zee,b=zee,i=7134,x=0.8239370005383643,y=0.8999946232295659 a=hat,b=hat,i=7135,x=0.7884238740570607,y=0.502745899378346 a=zee,b=eks,i=7136,x=0.1151808584625903,y=0.09114185305034295 a=hat,b=pan,i=7137,x=0.2542302739150816,y=0.10795409059370309 a=hat,b=wye,i=7138,x=0.2410727132014231,y=0.4676445777847451 a=hat,b=pan,i=7139,x=0.34808712588524904,y=0.8828628930362004 a=zee,b=wye,i=7140,x=0.1974763738933888,y=0.05233731805135977 a=hat,b=zee,i=7141,x=0.5122141330634649,y=0.9464876262232287 a=pan,b=hat,i=7142,x=0.5253509732767064,y=0.8670318755725022 a=wye,b=hat,i=7143,x=0.21543094473021618,y=0.04601417423771059 a=zee,b=hat,i=7144,x=0.6991820521352337,y=0.729482196220355 a=eks,b=pan,i=7145,x=0.5837334896130115,y=0.3007149582733508 a=zee,b=pan,i=7146,x=0.9971541764709625,y=0.892947440752753 a=pan,b=zee,i=7147,x=0.04585989364324272,y=0.09848374190945741 a=zee,b=zee,i=7148,x=0.08359037777595768,y=0.18397726583989749 a=zee,b=hat,i=7149,x=0.7990351121845923,y=0.883654825281865 a=pan,b=eks,i=7150,x=0.06880418014853351,y=0.774850869582918 a=hat,b=pan,i=7151,x=0.7525794901534716,y=0.2866308656913933 a=hat,b=hat,i=7152,x=0.9710254927009822,y=0.2710815765754221 a=wye,b=pan,i=7153,x=0.6258726536948953,y=0.7945230748164691 a=wye,b=wye,i=7154,x=0.0785227436298842,y=0.5694736271045654 a=zee,b=eks,i=7155,x=0.33789283812701887,y=0.4922604374749663 a=pan,b=eks,i=7156,x=0.8443027153248559,y=0.6768057967242282 a=zee,b=zee,i=7157,x=0.5562106087670207,y=0.03587821373906863 a=pan,b=pan,i=7158,x=0.004511539489729266,y=0.7768848294530629 a=eks,b=wye,i=7159,x=0.3902007098058078,y=0.1663592901985712 a=wye,b=pan,i=7160,x=0.4066344147201285,y=0.9578296410706988 a=hat,b=hat,i=7161,x=0.05527312148960439,y=0.40628388765166956 a=pan,b=zee,i=7162,x=0.762250186313408,y=0.10837770076532993 a=wye,b=wye,i=7163,x=0.4555929409217334,y=0.46397391790537257 a=eks,b=pan,i=7164,x=0.5336092896068227,y=0.6717538742842986 a=zee,b=hat,i=7165,x=0.8455323374846566,y=0.0849930980915663 a=pan,b=zee,i=7166,x=0.4778764959737758,y=0.838605100252609 a=zee,b=eks,i=7167,x=0.10058553136359771,y=0.8527719709495678 a=pan,b=zee,i=7168,x=0.05484316817552892,y=0.17151702310481431 a=hat,b=wye,i=7169,x=0.20795586378052433,y=0.7648155272308214 a=eks,b=pan,i=7170,x=0.37156761781681846,y=0.8390576537440628 a=pan,b=pan,i=7171,x=0.11014202080800839,y=0.7384835945172147 a=pan,b=eks,i=7172,x=0.6981612913907711,y=0.05072492614651758 a=hat,b=wye,i=7173,x=0.18576991003719212,y=0.32538288858474795 a=wye,b=hat,i=7174,x=0.4517242075190575,y=0.7384551615771798 a=hat,b=eks,i=7175,x=0.8596787945183175,y=0.9376543180536796 a=wye,b=pan,i=7176,x=0.6724292506877466,y=0.8820892101229925 a=eks,b=wye,i=7177,x=0.5749745903887773,y=0.4151184059091343 a=wye,b=pan,i=7178,x=0.4069058311850614,y=0.8985915120635419 a=pan,b=pan,i=7179,x=0.34025617153772425,y=0.7362436479716264 a=zee,b=wye,i=7180,x=0.9735765701999921,y=0.3536158455578553 a=pan,b=hat,i=7181,x=0.33202126409882426,y=0.6393977150538188 a=wye,b=eks,i=7182,x=0.8209372270884935,y=0.22933427059194011 a=pan,b=wye,i=7183,x=0.7589482772018452,y=0.34920417666135495 a=pan,b=zee,i=7184,x=0.4443660624344251,y=0.6792046483658297 a=eks,b=hat,i=7185,x=0.16457422522306786,y=0.3254688160534126 a=pan,b=pan,i=7186,x=0.09026915761362286,y=0.023448958188875713 a=hat,b=wye,i=7187,x=0.4560687123084549,y=0.4064263428720335 a=wye,b=pan,i=7188,x=0.4956424303944521,y=0.2862948969999991 a=zee,b=zee,i=7189,x=0.6872200803930903,y=0.33825858578605605 a=wye,b=zee,i=7190,x=0.7091610020939861,y=0.11636512757451645 a=wye,b=eks,i=7191,x=0.40387119430799534,y=0.2671989768915307 a=hat,b=zee,i=7192,x=0.04140473031764258,y=0.12247713585949505 a=wye,b=eks,i=7193,x=0.7904392489862636,y=0.3255246590384645 a=pan,b=pan,i=7194,x=0.8605715825783998,y=0.30866294108908654 a=eks,b=pan,i=7195,x=0.3063063420456562,y=0.8778236978497203 a=pan,b=hat,i=7196,x=0.47951019710347087,y=0.7687346833879765 a=pan,b=pan,i=7197,x=0.571144729887671,y=0.3556625598706247 a=eks,b=eks,i=7198,x=0.21945638426831482,y=0.02350640610667476 a=hat,b=wye,i=7199,x=0.5813406427006567,y=0.3332804684828835 a=pan,b=zee,i=7200,x=0.905315344809699,y=0.1528899922373057 a=wye,b=pan,i=7201,x=0.9400232704650787,y=0.6360498242547704 a=wye,b=zee,i=7202,x=0.2595277149011631,y=0.8540466345462062 a=zee,b=zee,i=7203,x=0.6196913167679251,y=0.7693669742661702 a=pan,b=eks,i=7204,x=0.7025276205611544,y=0.5171960435307702 a=eks,b=eks,i=7205,x=0.8476919005501825,y=0.33999828204602445 a=hat,b=wye,i=7206,x=0.2484899687204748,y=0.8552754879346082 a=eks,b=wye,i=7207,x=0.5111288494558484,y=0.31828385178170016 a=wye,b=pan,i=7208,x=0.49730390768352073,y=0.040387788389040336 a=wye,b=zee,i=7209,x=0.2990551204662385,y=0.24766816596397379 a=wye,b=pan,i=7210,x=0.05433220416409046,y=0.7683173788573371 a=hat,b=zee,i=7211,x=0.5479599732793081,y=0.7309237182718691 a=hat,b=hat,i=7212,x=0.11334324090228143,y=0.4449813414016559 a=hat,b=hat,i=7213,x=0.17855300168610388,y=0.5777528971707431 a=eks,b=zee,i=7214,x=0.8432742398345661,y=0.19519802350924498 a=zee,b=eks,i=7215,x=0.027726411224188063,y=0.6253184802891883 a=wye,b=hat,i=7216,x=0.5252986145121908,y=0.9054934316514225 a=hat,b=pan,i=7217,x=0.18576029964130547,y=0.9066585641073414 a=hat,b=pan,i=7218,x=0.2996125766631278,y=0.4976607588511254 a=zee,b=zee,i=7219,x=0.6269054706790941,y=0.7732047241313896 a=zee,b=hat,i=7220,x=0.9218855933251531,y=0.9884286346489324 a=zee,b=zee,i=7221,x=0.8961118412742498,y=0.5527678285308364 a=pan,b=hat,i=7222,x=0.06750577252048573,y=0.45278767440580836 a=pan,b=zee,i=7223,x=0.5422551743173196,y=0.48196997280820075 a=eks,b=eks,i=7224,x=0.826281664166814,y=0.7784066577349854 a=eks,b=pan,i=7225,x=0.21428073770333067,y=0.7357536006823585 a=zee,b=hat,i=7226,x=0.3525785753907552,y=0.8580740440780245 a=eks,b=eks,i=7227,x=0.5839736448682071,y=0.8252023673907429 a=eks,b=hat,i=7228,x=0.9933636751222338,y=0.20481742503678568 a=eks,b=pan,i=7229,x=0.04398478871595091,y=0.7794740728564747 a=eks,b=pan,i=7230,x=0.6437767672345736,y=0.880694505581993 a=hat,b=eks,i=7231,x=0.8525023870231172,y=0.8371410685258226 a=eks,b=zee,i=7232,x=0.8665889356718274,y=0.727601457029631 a=pan,b=pan,i=7233,x=0.16532133170819407,y=0.6129115845589822 a=eks,b=eks,i=7234,x=0.24279014390270426,y=0.2483565874207584 a=hat,b=pan,i=7235,x=0.8801345341211195,y=0.9358790870593957 a=pan,b=wye,i=7236,x=0.27447738011116474,y=0.004545127562776141 a=zee,b=zee,i=7237,x=0.4441192412902708,y=0.12641379815166043 a=zee,b=wye,i=7238,x=0.08465889757356693,y=0.5167264969332714 a=zee,b=hat,i=7239,x=0.37409052113954255,y=0.6558372047842991 a=zee,b=wye,i=7240,x=0.08769157759149027,y=0.4682424277651016 a=wye,b=pan,i=7241,x=0.16048892749077326,y=0.8088730543110708 a=wye,b=hat,i=7242,x=0.7810183175877844,y=0.11112670210527198 a=wye,b=pan,i=7243,x=0.23457496179942383,y=0.25480860225867064 a=pan,b=wye,i=7244,x=0.33418676914584544,y=0.12547224222781395 a=eks,b=hat,i=7245,x=0.15591846641848217,y=0.06738895282990076 a=hat,b=wye,i=7246,x=0.4083519225238026,y=0.9205841027663143 a=zee,b=hat,i=7247,x=0.995551497542232,y=0.20626255566312157 a=wye,b=pan,i=7248,x=0.03722910071622887,y=0.666426594713559 a=wye,b=eks,i=7249,x=0.3336400413872498,y=0.9930112481730917 a=zee,b=zee,i=7250,x=0.4205283537525053,y=0.017542491951736294 a=wye,b=zee,i=7251,x=0.03690845523228947,y=0.3207859173250125 a=wye,b=eks,i=7252,x=0.5180151961590858,y=0.18663669340288258 a=pan,b=wye,i=7253,x=0.09014357778603788,y=0.7770581018902949 a=eks,b=hat,i=7254,x=0.08477920149342666,y=0.8536609969299198 a=pan,b=hat,i=7255,x=0.005529616019901207,y=0.050405481126457485 a=hat,b=zee,i=7256,x=0.19429528950321628,y=0.2713422241532205 a=wye,b=zee,i=7257,x=0.030816159583946456,y=0.26057323500261886 a=pan,b=pan,i=7258,x=0.4996723711675731,y=0.861409653660949 a=hat,b=wye,i=7259,x=0.6482012699497162,y=0.25150090033880335 a=wye,b=hat,i=7260,x=0.3722574884303841,y=0.9096204632963236 a=eks,b=pan,i=7261,x=0.5956552210056466,y=0.6731134108078785 a=eks,b=wye,i=7262,x=0.6111098139614397,y=0.15517709802904156 a=wye,b=zee,i=7263,x=0.7738670394914589,y=0.7776575420356829 a=zee,b=pan,i=7264,x=0.3693607630046949,y=0.5055013090983799 a=eks,b=pan,i=7265,x=0.9551577221486072,y=0.29383627386535827 a=pan,b=zee,i=7266,x=0.29284541534943886,y=0.302297804948473 a=eks,b=wye,i=7267,x=0.7682692325496115,y=0.10545189803719768 a=hat,b=zee,i=7268,x=0.5187716634369838,y=0.4578907340058458 a=eks,b=wye,i=7269,x=0.34228005996384936,y=0.7962044127378957 a=wye,b=pan,i=7270,x=0.6526947310324253,y=0.22517849223509379 a=wye,b=eks,i=7271,x=0.3000326333821377,y=0.5981658390236453 a=wye,b=zee,i=7272,x=0.3433404141399181,y=0.9542907816350394 a=hat,b=wye,i=7273,x=0.14732182908248415,y=0.15766209607019577 a=zee,b=hat,i=7274,x=0.12912926442853778,y=0.4373967289737535 a=zee,b=pan,i=7275,x=0.8310286639738583,y=0.23874521098835433 a=zee,b=hat,i=7276,x=0.5541611116464608,y=0.11389221370130065 a=wye,b=pan,i=7277,x=0.7078871914506895,y=0.33655897282671654 a=pan,b=wye,i=7278,x=0.8504546169336947,y=0.8944056123200194 a=wye,b=eks,i=7279,x=0.27325948155789803,y=0.9780751132127382 a=hat,b=wye,i=7280,x=0.8630577882216759,y=0.3401148862570683 a=pan,b=pan,i=7281,x=0.8126567917280336,y=0.8074968827433902 a=zee,b=eks,i=7282,x=0.7505245483102981,y=0.17388594473052665 a=wye,b=wye,i=7283,x=0.7932471858732224,y=0.799314077275886 a=zee,b=pan,i=7284,x=0.9156868185576506,y=0.8532083341105031 a=pan,b=eks,i=7285,x=0.6782016255263672,y=0.6826685678107132 a=zee,b=wye,i=7286,x=0.7477781751613256,y=0.47420402963502417 a=zee,b=hat,i=7287,x=0.1793121692955475,y=0.15066781644968152 a=hat,b=eks,i=7288,x=0.47506460337294665,y=0.6344735780644974 a=pan,b=pan,i=7289,x=0.5648161072496519,y=0.5225373033056284 a=zee,b=wye,i=7290,x=0.07866679545878696,y=0.8281670295675017 a=zee,b=hat,i=7291,x=0.4416432361854393,y=0.4815754525534033 a=pan,b=pan,i=7292,x=0.7818043909150125,y=0.8301584593837131 a=eks,b=zee,i=7293,x=0.15209082772656235,y=0.8094992950290192 a=wye,b=hat,i=7294,x=0.7071475331155577,y=0.463983028008944 a=wye,b=zee,i=7295,x=0.9580523714631302,y=0.44770394756077214 a=wye,b=hat,i=7296,x=0.06387677434814132,y=0.4016686557239688 a=zee,b=wye,i=7297,x=0.9096641147013969,y=0.3198678677416569 a=zee,b=wye,i=7298,x=0.3398026136728608,y=0.796415365588005 a=wye,b=pan,i=7299,x=0.1271157644108325,y=0.8215802283737754 a=zee,b=pan,i=7300,x=0.7996204817268934,y=0.16695600702508173 a=eks,b=zee,i=7301,x=0.24231768726605574,y=0.36168589987653654 a=pan,b=wye,i=7302,x=0.9493279693158848,y=0.9320553760871662 a=pan,b=pan,i=7303,x=0.9626006756922457,y=0.3454344654908674 a=zee,b=pan,i=7304,x=0.6353829183388288,y=0.7926738022346027 a=pan,b=hat,i=7305,x=0.5874095716972196,y=0.7353421801026144 a=eks,b=wye,i=7306,x=0.5141888431558487,y=0.25073225691473777 a=wye,b=eks,i=7307,x=0.2143162664337741,y=0.8580034716749112 a=hat,b=zee,i=7308,x=0.13221833833166552,y=0.9172258570287248 a=wye,b=wye,i=7309,x=0.9524036783598119,y=0.012525060888625927 a=hat,b=pan,i=7310,x=0.06459215228779991,y=0.7528579464907585 a=pan,b=eks,i=7311,x=0.5502139795389652,y=0.49591789494048777 a=wye,b=hat,i=7312,x=0.23122127585115393,y=0.34710066461942035 a=hat,b=hat,i=7313,x=0.04440593404771587,y=0.37885696420400083 a=pan,b=hat,i=7314,x=0.11943754790139005,y=0.36148458916104687 a=hat,b=wye,i=7315,x=0.762849509523023,y=0.5445776666095938 a=wye,b=hat,i=7316,x=0.49431226962351105,y=0.20765083254084993 a=pan,b=eks,i=7317,x=0.9283829868445185,y=0.053320653955502006 a=zee,b=wye,i=7318,x=0.9779192041341719,y=0.45913392788037144 a=eks,b=wye,i=7319,x=0.7931636018175485,y=0.6139112136646976 a=hat,b=hat,i=7320,x=0.39178985057319626,y=0.23236564180125518 a=wye,b=wye,i=7321,x=0.35700901065371815,y=0.28320908292909874 a=pan,b=eks,i=7322,x=0.23434957604819473,y=0.051931896713069414 a=wye,b=wye,i=7323,x=0.7111896724396426,y=0.3207922792041831 a=wye,b=zee,i=7324,x=0.46590974940880736,y=0.38852539050053736 a=hat,b=zee,i=7325,x=0.923332148981879,y=0.24711153523263418 a=hat,b=zee,i=7326,x=0.6477850327935991,y=0.166272703335551 a=wye,b=wye,i=7327,x=0.017676716675338322,y=0.9778332141214291 a=hat,b=hat,i=7328,x=0.5360492386373142,y=0.6804516078113585 a=wye,b=eks,i=7329,x=0.5479278609035699,y=0.6395949329290961 a=hat,b=pan,i=7330,x=0.30931842449078206,y=0.9848451565724043 a=eks,b=hat,i=7331,x=0.788081413287463,y=0.8378548167327706 a=eks,b=eks,i=7332,x=0.5489481141023792,y=0.1898445505274633 a=wye,b=eks,i=7333,x=0.23109457565661884,y=0.175253032327905 a=eks,b=eks,i=7334,x=0.5399986455657582,y=0.8158128369790969 a=pan,b=wye,i=7335,x=0.2567672400806126,y=0.2775523933001237 a=eks,b=zee,i=7336,x=0.29854063622113325,y=0.6880575576316322 a=pan,b=pan,i=7337,x=0.03345300533476314,y=0.05011040908993403 a=zee,b=hat,i=7338,x=0.7240024979256982,y=0.4923630478351134 a=eks,b=wye,i=7339,x=0.7149884797875254,y=0.5780977956467382 a=wye,b=hat,i=7340,x=0.3027659530127267,y=0.8901256310015528 a=wye,b=wye,i=7341,x=0.9095596401410326,y=0.16616223702173794 a=pan,b=eks,i=7342,x=0.32087613651983915,y=0.33882735674733244 a=pan,b=hat,i=7343,x=0.9718021240386961,y=0.8360987881082459 a=pan,b=zee,i=7344,x=0.7960579191229258,y=0.8642875358044435 a=wye,b=zee,i=7345,x=0.97794870050786,y=0.3755010163868553 a=hat,b=eks,i=7346,x=0.9392077077039757,y=0.869513883344899 a=zee,b=pan,i=7347,x=0.5598151935312621,y=0.9371568081140333 a=hat,b=pan,i=7348,x=0.5273520540957175,y=0.9743536695566267 a=zee,b=pan,i=7349,x=0.9798614924191777,y=0.661939043406021 a=wye,b=pan,i=7350,x=0.22127788655478875,y=0.8938285029323859 a=pan,b=hat,i=7351,x=0.5233972953461609,y=0.1299030288348728 a=wye,b=wye,i=7352,x=0.0924480571001528,y=0.30109533355539897 a=pan,b=wye,i=7353,x=0.7001693740890388,y=0.7313365122301939 a=zee,b=wye,i=7354,x=0.5619890666183939,y=0.23528736664694083 a=zee,b=eks,i=7355,x=0.8301624729023548,y=0.0615273482256774 a=pan,b=hat,i=7356,x=0.5045510100638597,y=0.23513093423261755 a=zee,b=zee,i=7357,x=0.37772059495645105,y=0.04160047639165676 a=eks,b=pan,i=7358,x=0.20000198658880186,y=0.2727601315820374 a=zee,b=zee,i=7359,x=0.8789933703062237,y=0.787471191499597 a=zee,b=hat,i=7360,x=0.9083001482768445,y=0.3841688843397407 a=zee,b=hat,i=7361,x=0.03789515978860469,y=0.08906319847440858 a=zee,b=pan,i=7362,x=0.37791224094768805,y=0.035794629838716285 a=eks,b=eks,i=7363,x=0.1789979975700029,y=0.9323731265959059 a=hat,b=eks,i=7364,x=0.7057751089174641,y=0.3218193615346736 a=eks,b=wye,i=7365,x=0.4037294740938493,y=0.827514532289803 a=zee,b=pan,i=7366,x=0.7326832606913403,y=0.988312668973181 a=pan,b=wye,i=7367,x=0.050978150403878986,y=0.6397760763553187 a=eks,b=hat,i=7368,x=0.38478100718255326,y=0.5987722480044325 a=zee,b=wye,i=7369,x=0.12183474068456046,y=0.935692190729219 a=zee,b=zee,i=7370,x=0.7741716706994631,y=0.8036145555008443 a=zee,b=hat,i=7371,x=0.4507985912029725,y=0.3077642021954843 a=pan,b=pan,i=7372,x=0.7704918547993125,y=0.9834514670413425 a=eks,b=eks,i=7373,x=0.4293751563574991,y=0.321596575054345 a=wye,b=zee,i=7374,x=0.551952261755126,y=0.5902774680877885 a=pan,b=wye,i=7375,x=0.42955545463755385,y=0.9934718779427805 a=eks,b=eks,i=7376,x=0.3445135978821475,y=0.6156808849126956 a=pan,b=eks,i=7377,x=0.34789754809053564,y=0.6075272228064196 a=hat,b=pan,i=7378,x=0.10026227651385622,y=0.04421109516628252 a=hat,b=eks,i=7379,x=0.24988599675183953,y=0.5075999788186907 a=hat,b=hat,i=7380,x=0.27192573832264333,y=0.8068429680053445 a=pan,b=zee,i=7381,x=0.9697283975533304,y=0.28635495669422684 a=hat,b=wye,i=7382,x=0.8019809972589643,y=0.005365368085154643 a=pan,b=wye,i=7383,x=0.8494039628427111,y=0.8499184581272037 a=pan,b=pan,i=7384,x=0.147877939581611,y=0.3802766658466368 a=hat,b=wye,i=7385,x=0.6891675084646794,y=0.21966643420211807 a=eks,b=wye,i=7386,x=0.06869104618996669,y=0.9055981024968931 a=hat,b=pan,i=7387,x=0.04127341734955359,y=0.5872280653454409 a=zee,b=pan,i=7388,x=0.29756214466232356,y=0.9313351005781804 a=eks,b=pan,i=7389,x=0.2598351155486429,y=0.6198880821789519 a=wye,b=eks,i=7390,x=0.6980368648478577,y=0.3472713980791412 a=pan,b=eks,i=7391,x=0.4877630118621793,y=0.2703969185758941 a=eks,b=zee,i=7392,x=0.47928188791181825,y=0.4019006064467472 a=zee,b=pan,i=7393,x=0.32975449059840245,y=0.7244778074880798 a=pan,b=zee,i=7394,x=0.7577687447939129,y=0.8939904227639627 a=zee,b=wye,i=7395,x=0.5803000300289758,y=0.4776490273972346 a=hat,b=eks,i=7396,x=0.15220840867031593,y=0.8065677095962809 a=pan,b=eks,i=7397,x=0.7805268684800922,y=0.40839477314823913 a=zee,b=eks,i=7398,x=0.6991548640255947,y=0.30943844921705455 a=zee,b=eks,i=7399,x=0.9620019895205045,y=0.04121066152708375 a=wye,b=pan,i=7400,x=0.6413551187597212,y=0.8585006139152228 a=pan,b=zee,i=7401,x=0.7038547368085565,y=0.833002029439337 a=wye,b=eks,i=7402,x=0.8512179412309284,y=0.11635538096923825 a=eks,b=hat,i=7403,x=0.8360641078807856,y=0.9076959476149424 a=wye,b=zee,i=7404,x=0.8798482207846597,y=0.980841539034285 a=pan,b=eks,i=7405,x=0.6745743258945766,y=0.7867105500751859 a=hat,b=hat,i=7406,x=0.563984894776307,y=0.22186356075852087 a=zee,b=hat,i=7407,x=0.21870541414543287,y=0.5381352837603439 a=hat,b=wye,i=7408,x=0.9529062878494667,y=0.7852866253859588 a=eks,b=pan,i=7409,x=0.7981122558329,y=0.6186019487821701 a=zee,b=eks,i=7410,x=0.28326065224069574,y=0.9300177238169315 a=eks,b=wye,i=7411,x=0.9969817321900778,y=0.46830380409504446 a=pan,b=wye,i=7412,x=0.6977929179546933,y=0.5888437383863911 a=zee,b=zee,i=7413,x=0.5789877301693207,y=0.21648842981409888 a=wye,b=hat,i=7414,x=0.8736572008864342,y=0.5573924644600762 a=wye,b=wye,i=7415,x=0.30171840067278866,y=0.3419586030343307 a=pan,b=wye,i=7416,x=0.2585223323598659,y=0.3463024564198399 a=hat,b=eks,i=7417,x=0.3785664786635482,y=0.26018775063772737 a=wye,b=eks,i=7418,x=0.006639005627157579,y=0.5729637583197084 a=hat,b=hat,i=7419,x=0.2273259043408271,y=0.5563529993801493 a=wye,b=pan,i=7420,x=0.637403401738078,y=0.8374737656276083 a=zee,b=zee,i=7421,x=0.27260075448645904,y=0.40666948184724905 a=wye,b=wye,i=7422,x=0.23158788759518745,y=0.2878292702486247 a=wye,b=hat,i=7423,x=0.65748564141991,y=0.991048470406043 a=hat,b=hat,i=7424,x=0.10089391588727137,y=0.7817715852844856 a=zee,b=eks,i=7425,x=0.8261837120346296,y=0.06964125640579655 a=pan,b=pan,i=7426,x=0.07638817370818407,y=0.556879044634861 a=pan,b=pan,i=7427,x=0.26915621186308547,y=0.9818876276497374 a=hat,b=hat,i=7428,x=0.39688244993813704,y=0.9331868149522005 a=pan,b=hat,i=7429,x=0.9357825556156103,y=0.4134876666224273 a=wye,b=eks,i=7430,x=0.6505309265233103,y=0.08052144928451366 a=eks,b=hat,i=7431,x=0.42045666700455464,y=0.1678609743716658 a=pan,b=wye,i=7432,x=0.7229621008200041,y=0.31447862305937724 a=wye,b=pan,i=7433,x=0.1438112738288524,y=0.9525096683562059 a=wye,b=zee,i=7434,x=0.1904070234884352,y=0.933784711872319 a=wye,b=eks,i=7435,x=0.19859477051626107,y=0.9333014786736845 a=zee,b=hat,i=7436,x=0.05768708104754017,y=0.6575915330429977 a=wye,b=pan,i=7437,x=0.9282262872069705,y=0.6360386793524121 a=pan,b=wye,i=7438,x=0.14231386871466345,y=0.4954949252707901 a=hat,b=zee,i=7439,x=0.3598352944100318,y=0.24656543972679557 a=eks,b=hat,i=7440,x=0.25828687688130847,y=0.842768437062058 a=wye,b=wye,i=7441,x=0.48729002348282646,y=0.9161401465437051 a=zee,b=wye,i=7442,x=0.6608160620662386,y=0.5974595563363765 a=hat,b=wye,i=7443,x=0.25082061911407305,y=0.21021328972399989 a=pan,b=zee,i=7444,x=0.3397136877438124,y=0.2183579843750636 a=pan,b=wye,i=7445,x=0.08633640516764107,y=0.8061389023613882 a=zee,b=wye,i=7446,x=0.48989555445269983,y=0.4667529417156665 a=wye,b=pan,i=7447,x=0.12261193061376408,y=0.799087216626477 a=pan,b=pan,i=7448,x=0.2640997209164132,y=0.21566634091032355 a=wye,b=pan,i=7449,x=0.8358772139168086,y=0.5804404380403491 a=hat,b=hat,i=7450,x=0.999952670371898,y=0.02385920300033073 a=wye,b=eks,i=7451,x=0.8347006203497817,y=0.9777231624470996 a=eks,b=eks,i=7452,x=0.9039050523436697,y=0.2854652762069536 a=eks,b=pan,i=7453,x=0.16650506760957007,y=0.5597579813350784 a=pan,b=hat,i=7454,x=0.5194182222148909,y=0.7430038847189214 a=hat,b=eks,i=7455,x=0.5414111357368178,y=0.20940952316770656 a=pan,b=zee,i=7456,x=0.9804921267993308,y=0.016246164251253248 a=wye,b=zee,i=7457,x=0.33342706113360265,y=0.14501891527781052 a=eks,b=eks,i=7458,x=0.5811068614884891,y=0.664734231079448 a=pan,b=eks,i=7459,x=0.2226239493776776,y=0.5135994340181766 a=pan,b=pan,i=7460,x=0.35138591198463265,y=0.21244588228015993 a=hat,b=zee,i=7461,x=0.7384848550717226,y=0.24830667641463977 a=pan,b=pan,i=7462,x=0.6618404094367076,y=0.8219415456549093 a=wye,b=hat,i=7463,x=0.6072686833968383,y=0.7123986333317 a=pan,b=pan,i=7464,x=0.20391564584771982,y=0.016010952251377497 a=wye,b=pan,i=7465,x=0.7773724564001473,y=0.2347275530159466 a=zee,b=hat,i=7466,x=0.46902698855775327,y=0.6551810919348852 a=hat,b=wye,i=7467,x=0.9615308149819951,y=0.21971550212549507 a=pan,b=wye,i=7468,x=0.5738436863958716,y=0.15248721298846157 a=zee,b=wye,i=7469,x=0.07385275759024545,y=0.988298861201188 a=pan,b=eks,i=7470,x=0.9940613416045865,y=0.07142955197723755 a=pan,b=zee,i=7471,x=0.7206962235321295,y=0.4041386971591123 a=wye,b=pan,i=7472,x=0.9988712528911804,y=0.10724690438707674 a=eks,b=wye,i=7473,x=0.05762456751144174,y=0.28964111938628945 a=zee,b=hat,i=7474,x=0.43396734243561297,y=0.14885801202307214 a=eks,b=pan,i=7475,x=0.6722348646450019,y=0.7590858841092192 a=wye,b=eks,i=7476,x=0.2793082894315966,y=0.6921191873971512 a=wye,b=eks,i=7477,x=0.2981113055444685,y=0.3118479248083458 a=eks,b=zee,i=7478,x=0.7409323823493578,y=0.7821738405034923 a=eks,b=pan,i=7479,x=0.9488581319420917,y=0.5706834161873786 a=eks,b=hat,i=7480,x=0.02963041418290202,y=0.31020752876337365 a=zee,b=hat,i=7481,x=0.530165909368211,y=0.3499068052213301 a=eks,b=hat,i=7482,x=0.5358070419986188,y=0.9271364146014381 a=eks,b=hat,i=7483,x=0.641587995068053,y=0.39862033216100345 a=pan,b=hat,i=7484,x=0.9277546187980327,y=0.6036400626061248 a=zee,b=zee,i=7485,x=0.18250243629492235,y=0.5110714625281656 a=hat,b=eks,i=7486,x=0.05432606225417025,y=0.846037438857557 a=zee,b=wye,i=7487,x=0.06930153211010659,y=0.40332380041726024 a=hat,b=zee,i=7488,x=0.9738235845036819,y=0.11750653625892593 a=wye,b=zee,i=7489,x=0.586694906363601,y=0.485804661756557 a=eks,b=wye,i=7490,x=0.19672144728622376,y=0.8795897188259745 a=hat,b=pan,i=7491,x=0.6815182530961382,y=0.9995542599759397 a=zee,b=zee,i=7492,x=0.9924139789261013,y=0.39715459387237506 a=wye,b=zee,i=7493,x=0.30230649338335736,y=0.6455888156649094 a=eks,b=eks,i=7494,x=0.6054081816351222,y=0.18385964263706056 a=pan,b=eks,i=7495,x=0.153249592750631,y=0.93584890369611 a=pan,b=hat,i=7496,x=0.6974292707231954,y=0.2143287930146287 a=hat,b=wye,i=7497,x=0.01901911173549864,y=0.12188494912380243 a=zee,b=wye,i=7498,x=0.9598078762930742,y=0.9526096866376772 a=hat,b=wye,i=7499,x=0.636327994634104,y=0.5920454180111085 a=eks,b=pan,i=7500,x=0.28545374834074233,y=0.23198097536923323 a=zee,b=eks,i=7501,x=0.28446902555255327,y=0.7217441754314862 a=wye,b=pan,i=7502,x=0.4908870880910682,y=0.8748956439477087 a=zee,b=hat,i=7503,x=0.7352529827218478,y=0.629380067609114 a=pan,b=wye,i=7504,x=0.8333715164315797,y=0.9451336949095434 a=zee,b=pan,i=7505,x=0.564057939908022,y=0.5334065367359347 a=eks,b=pan,i=7506,x=0.7892604620140382,y=0.4458012446463657 a=hat,b=pan,i=7507,x=0.2115605362533587,y=0.17174864475858942 a=wye,b=eks,i=7508,x=0.5483107008409311,y=0.887289998494882 a=eks,b=pan,i=7509,x=0.7069484914746176,y=0.782150154038626 a=wye,b=eks,i=7510,x=0.6248444849216757,y=0.6630576924648813 a=zee,b=zee,i=7511,x=0.6377020664864278,y=0.03108546393426559 a=pan,b=hat,i=7512,x=0.5379752912051612,y=0.224779054520575 a=hat,b=wye,i=7513,x=0.5412688517812235,y=0.5262389205562669 a=eks,b=pan,i=7514,x=0.6610230005876971,y=0.3614899634971477 a=wye,b=hat,i=7515,x=0.9897486946692156,y=0.8560315264830626 a=wye,b=zee,i=7516,x=0.8259254313902334,y=0.7412888906117227 a=pan,b=pan,i=7517,x=0.7516545627381832,y=0.7262369325855629 a=wye,b=eks,i=7518,x=0.11113013523732362,y=0.8868844523482303 a=pan,b=zee,i=7519,x=0.8278328235609442,y=0.20410343800651054 a=pan,b=zee,i=7520,x=0.9899477831046952,y=0.14660509070885575 a=pan,b=eks,i=7521,x=0.8118281802749344,y=0.2234359726399897 a=hat,b=pan,i=7522,x=0.24133540171495538,y=0.5588871341097482 a=pan,b=hat,i=7523,x=0.7491239851649556,y=0.9869320105885282 a=pan,b=zee,i=7524,x=0.8170930769042274,y=0.9831655236845562 a=eks,b=hat,i=7525,x=0.8698194027224814,y=0.05435121618572081 a=pan,b=hat,i=7526,x=0.6842184815608053,y=0.5413631696210732 a=hat,b=eks,i=7527,x=0.9217058451870804,y=0.21666960274280356 a=eks,b=zee,i=7528,x=0.6805617035261402,y=0.9357708602507883 a=eks,b=hat,i=7529,x=0.31981099050142825,y=0.8903683820537329 a=zee,b=wye,i=7530,x=0.7097075423244159,y=0.9664504052194537 a=hat,b=zee,i=7531,x=0.2229334385915317,y=0.3284190225602506 a=eks,b=wye,i=7532,x=0.5296457339778697,y=0.5356809514905594 a=wye,b=pan,i=7533,x=0.7835022697060869,y=0.5470260523424321 a=zee,b=wye,i=7534,x=0.1466838920302843,y=0.5483633847205762 a=eks,b=eks,i=7535,x=0.09134795754962621,y=0.843889939620117 a=zee,b=wye,i=7536,x=0.977198066335277,y=0.841156212711556 a=zee,b=zee,i=7537,x=0.45067646463535815,y=0.4846053315615896 a=wye,b=wye,i=7538,x=0.23718351292469453,y=0.9441763901099166 a=eks,b=wye,i=7539,x=0.26816744152538996,y=0.6815708508524089 a=pan,b=pan,i=7540,x=0.9220993601302719,y=0.7568665001928173 a=eks,b=hat,i=7541,x=0.5161023046647734,y=0.038809351906244016 a=pan,b=pan,i=7542,x=0.20122530941942418,y=0.7472458340839414 a=hat,b=hat,i=7543,x=0.6227885940707738,y=0.6684149004769806 a=wye,b=eks,i=7544,x=0.9740791622624008,y=0.07927202429603264 a=wye,b=eks,i=7545,x=0.022518661429014375,y=0.2901112553388282 a=wye,b=zee,i=7546,x=0.18448181492287075,y=0.9152350814320122 a=hat,b=hat,i=7547,x=0.8215672815436097,y=0.5614013828250404 a=hat,b=hat,i=7548,x=0.19269905065728477,y=0.011009649002469146 a=eks,b=wye,i=7549,x=0.7325288469158541,y=0.565544676390673 a=hat,b=eks,i=7550,x=0.2558306743415637,y=0.7422910597132735 a=wye,b=hat,i=7551,x=0.3483947470200932,y=0.510297078100616 a=wye,b=eks,i=7552,x=0.8469802002512098,y=0.815964077738481 a=eks,b=pan,i=7553,x=0.5358909567117672,y=0.4100558446457958 a=eks,b=wye,i=7554,x=0.7339079956532404,y=0.8285558028377102 a=pan,b=zee,i=7555,x=0.30709526445187707,y=0.4817130705295929 a=hat,b=zee,i=7556,x=0.8122054753287119,y=0.20604868440565904 a=zee,b=zee,i=7557,x=0.7640201646131568,y=0.07069070372885133 a=wye,b=hat,i=7558,x=0.6038851752558235,y=0.9009580077702348 a=hat,b=pan,i=7559,x=0.5523119384745296,y=0.3127290290515127 a=eks,b=hat,i=7560,x=0.10199887225407722,y=0.31764039641093744 a=pan,b=eks,i=7561,x=0.41848341511646414,y=0.5635397789589572 a=wye,b=pan,i=7562,x=0.11656719650390013,y=0.7876569096468866 a=eks,b=hat,i=7563,x=0.026862386488812562,y=0.6617623406511374 a=hat,b=wye,i=7564,x=0.8296346152245616,y=0.22172618374176756 a=hat,b=eks,i=7565,x=0.17354141768396691,y=0.7068716816979178 a=zee,b=zee,i=7566,x=0.04190996301140926,y=0.8085114623622482 a=zee,b=pan,i=7567,x=0.4193214026807677,y=0.394167835232068 a=eks,b=pan,i=7568,x=0.5271419780589164,y=0.1432057817925363 a=zee,b=hat,i=7569,x=0.09822492892655521,y=0.05447501970715207 a=zee,b=zee,i=7570,x=0.12789683952220732,y=0.25490189761435 a=pan,b=eks,i=7571,x=0.22380898154758588,y=0.9433203311960137 a=hat,b=pan,i=7572,x=0.445759638952951,y=0.6137807210496694 a=wye,b=wye,i=7573,x=0.92008458670793,y=0.6955528667719472 a=eks,b=pan,i=7574,x=0.14478437931649057,y=0.0941855027104701 a=pan,b=pan,i=7575,x=0.9500548333140316,y=0.18833841450136246 a=hat,b=wye,i=7576,x=0.6030949657537056,y=0.14875629679301372 a=eks,b=zee,i=7577,x=0.14231014763644978,y=0.4717127637144344 a=wye,b=eks,i=7578,x=0.06201408130259789,y=0.69048502266567 a=hat,b=zee,i=7579,x=0.05435384851495728,y=0.9902847007425324 a=pan,b=eks,i=7580,x=0.1600952140568258,y=0.4045418954164892 a=wye,b=wye,i=7581,x=0.2175313107798721,y=0.3671212999414236 a=pan,b=hat,i=7582,x=0.2569787233680674,y=0.2148575227188957 a=pan,b=hat,i=7583,x=0.8536220104505021,y=0.2523759042998861 a=zee,b=hat,i=7584,x=0.09065491442429796,y=0.5048830484306086 a=wye,b=zee,i=7585,x=0.13751395044042258,y=0.034975186947673986 a=hat,b=hat,i=7586,x=0.5889920011506182,y=0.8078788341273992 a=zee,b=hat,i=7587,x=0.03280836042125246,y=0.41282684631580824 a=zee,b=wye,i=7588,x=0.5288696811580935,y=0.48744579505300667 a=zee,b=hat,i=7589,x=0.7770699494898016,y=0.7790651064661754 a=pan,b=pan,i=7590,x=0.3953702626804989,y=0.8410161773270264 a=pan,b=hat,i=7591,x=0.2245253698516796,y=0.7737639246478398 a=zee,b=zee,i=7592,x=0.35146635664435344,y=0.4539874980554838 a=wye,b=eks,i=7593,x=0.04430024252919407,y=0.1263254223270297 a=zee,b=eks,i=7594,x=0.6200947126046739,y=0.24510543274951047 a=pan,b=wye,i=7595,x=0.20918481361880603,y=0.6732663492566918 a=eks,b=zee,i=7596,x=0.5712662107490064,y=0.6090688560627531 a=wye,b=eks,i=7597,x=0.4310431117208252,y=0.08951460884563855 a=wye,b=wye,i=7598,x=0.06633817142669896,y=0.5442252601992482 a=pan,b=wye,i=7599,x=0.9608268596180474,y=0.9070684642079544 a=eks,b=eks,i=7600,x=0.5242885778608762,y=0.7826689200927383 a=wye,b=pan,i=7601,x=0.9208150605661285,y=0.5589433846274124 a=eks,b=wye,i=7602,x=0.5833785073086928,y=0.04443501942703898 a=eks,b=hat,i=7603,x=0.36191015100917356,y=0.710442357988238 a=wye,b=wye,i=7604,x=0.9697192149941326,y=0.09592438977685924 a=pan,b=hat,i=7605,x=0.3084442479608156,y=0.29052958365713977 a=zee,b=pan,i=7606,x=0.39737589478806956,y=0.02851924706651765 a=pan,b=wye,i=7607,x=0.2998113807261462,y=0.47793002819857533 a=pan,b=wye,i=7608,x=0.7117542206974444,y=0.7970333994894653 a=zee,b=pan,i=7609,x=0.39637889658629055,y=0.15152040674745126 a=zee,b=eks,i=7610,x=0.3668009982476311,y=0.636238165533322 a=wye,b=wye,i=7611,x=0.9172464082645518,y=0.21030281985055865 a=zee,b=wye,i=7612,x=0.3473870036653739,y=0.03835525794322947 a=eks,b=wye,i=7613,x=0.051620293140943185,y=0.3354589495771291 a=hat,b=eks,i=7614,x=0.26171105103308545,y=0.7349252470172892 a=pan,b=hat,i=7615,x=0.006420504177456654,y=0.8005473595004451 a=zee,b=pan,i=7616,x=0.6250802601130294,y=0.350073441110904 a=hat,b=wye,i=7617,x=0.3667157138284648,y=0.8788517472187893 a=hat,b=eks,i=7618,x=0.23737869189758654,y=0.43340937762837506 a=zee,b=hat,i=7619,x=0.0396492782791249,y=0.21046790711790042 a=hat,b=wye,i=7620,x=0.8866095807323401,y=0.1303857423099647 a=wye,b=zee,i=7621,x=0.17096221571163828,y=0.7965958396369065 a=hat,b=zee,i=7622,x=0.03375086644321179,y=0.6603973570703182 a=zee,b=wye,i=7623,x=0.8476652404295622,y=0.5532359995865707 a=eks,b=wye,i=7624,x=0.4036466177426279,y=0.9323311367204503 a=zee,b=wye,i=7625,x=0.6630299534680688,y=0.9316352338897794 a=eks,b=zee,i=7626,x=0.9362983270638663,y=0.02530583139989606 a=zee,b=hat,i=7627,x=0.3510535767246904,y=0.3060628840965116 a=eks,b=eks,i=7628,x=0.6580765451729311,y=0.3478545363218032 a=hat,b=hat,i=7629,x=0.6503893869201249,y=0.8748121320804191 a=wye,b=pan,i=7630,x=0.4658141836395999,y=0.8966097764457495 a=pan,b=pan,i=7631,x=0.27145158019948934,y=0.09516187714787117 a=wye,b=zee,i=7632,x=0.734823995296927,y=0.7719486421533686 a=pan,b=wye,i=7633,x=0.16036619135517816,y=0.6056119689930829 a=eks,b=wye,i=7634,x=0.7109688223985979,y=0.7976941367774835 a=zee,b=zee,i=7635,x=0.12557655765488285,y=0.11534164357950183 a=pan,b=hat,i=7636,x=0.06705624100603413,y=0.6451188760762676 a=pan,b=hat,i=7637,x=0.9106017109900336,y=0.8891547034705604 a=zee,b=zee,i=7638,x=0.2748491611629733,y=0.80651606034967 a=eks,b=hat,i=7639,x=0.771170174812707,y=0.7659520407198543 a=eks,b=wye,i=7640,x=0.2743403725668617,y=0.29487651020724404 a=pan,b=zee,i=7641,x=0.9381993656017179,y=0.6132694517353006 a=zee,b=wye,i=7642,x=0.20250440741625753,y=0.5663711206888612 a=eks,b=pan,i=7643,x=0.47586159706318876,y=0.4962125479739936 a=wye,b=zee,i=7644,x=0.6513731813421505,y=0.9956216673837286 a=hat,b=wye,i=7645,x=0.7915745853842925,y=0.34176706803861534 a=hat,b=zee,i=7646,x=0.5142370614917985,y=0.37306603953034023 a=zee,b=pan,i=7647,x=0.4270489725783423,y=0.5331035003317631 a=zee,b=wye,i=7648,x=0.6798736010037264,y=0.9310702986321819 a=wye,b=wye,i=7649,x=0.06713737802328557,y=0.6633680869367675 a=wye,b=hat,i=7650,x=0.8930880818631942,y=0.05300924902758186 a=eks,b=wye,i=7651,x=0.46360005487315714,y=0.5379475572098419 a=wye,b=zee,i=7652,x=0.006772483197185153,y=0.8526037392488609 a=wye,b=wye,i=7653,x=0.5261687377247655,y=0.9662557892207575 a=hat,b=eks,i=7654,x=0.930363511771148,y=0.40431933522117625 a=hat,b=zee,i=7655,x=0.7870611543157765,y=0.3879247735466407 a=hat,b=eks,i=7656,x=0.5567810208255114,y=0.08177612908836551 a=eks,b=pan,i=7657,x=0.9396222500433881,y=0.4873885569213413 a=pan,b=wye,i=7658,x=0.3621794133271582,y=0.38650038828351596 a=pan,b=wye,i=7659,x=0.6372574031531049,y=0.4008307542658702 a=pan,b=pan,i=7660,x=0.5441433972504542,y=0.9469895242558711 a=zee,b=hat,i=7661,x=0.9408442476780763,y=0.8023490934603362 a=pan,b=pan,i=7662,x=0.7195689266210618,y=0.19413596115835852 a=hat,b=eks,i=7663,x=0.511020096362885,y=0.37947905296566964 a=wye,b=wye,i=7664,x=0.63099124038326,y=0.08422373938558314 a=eks,b=hat,i=7665,x=0.34062598597350535,y=0.9340112462726258 a=wye,b=hat,i=7666,x=0.567402800484997,y=0.03927156134016285 a=zee,b=eks,i=7667,x=0.03246665173355623,y=0.4911639950418465 a=pan,b=eks,i=7668,x=0.10428072545494949,y=0.705703566436069 a=hat,b=hat,i=7669,x=0.9372199212901666,y=0.2848921895320988 a=pan,b=wye,i=7670,x=0.4293848817589905,y=0.6839311106774395 a=pan,b=hat,i=7671,x=0.5479425830973824,y=0.6792965466963522 a=pan,b=wye,i=7672,x=0.8149257619922751,y=0.04756755305626292 a=eks,b=pan,i=7673,x=0.8071000122718018,y=0.3069131904807898 a=wye,b=wye,i=7674,x=0.8942818883713989,y=0.5212590944649815 a=wye,b=eks,i=7675,x=0.5955058458574938,y=0.4676247967613243 a=eks,b=pan,i=7676,x=0.44645752932549043,y=0.031497838025275615 a=pan,b=eks,i=7677,x=0.5906841474792559,y=0.39720028182162814 a=eks,b=hat,i=7678,x=0.07578434084199792,y=0.22918239952964947 a=wye,b=hat,i=7679,x=0.9686531523418166,y=0.924678615947144 a=wye,b=hat,i=7680,x=0.6280201487984101,y=0.536246349153707 a=zee,b=pan,i=7681,x=0.14883118602285983,y=0.5148080394741317 a=wye,b=hat,i=7682,x=0.24098953071009122,y=0.26190037231185814 a=pan,b=pan,i=7683,x=0.6653528080679457,y=0.23663023500818714 a=wye,b=pan,i=7684,x=0.8868188354900317,y=0.43208980346634795 a=zee,b=pan,i=7685,x=0.09709731100349062,y=0.4690475302436993 a=pan,b=eks,i=7686,x=0.18978586580625822,y=0.18115920896147264 a=wye,b=zee,i=7687,x=0.3434686533925685,y=0.48726381835108046 a=eks,b=wye,i=7688,x=0.6488879560928158,y=0.042222720585220475 a=eks,b=hat,i=7689,x=0.17159448083555107,y=0.045442427612649494 a=hat,b=zee,i=7690,x=0.7259375308340535,y=0.7674839756219988 a=hat,b=hat,i=7691,x=0.8777344389987419,y=0.13098255040262852 a=hat,b=eks,i=7692,x=0.8385522296255185,y=0.33460046618507555 a=eks,b=hat,i=7693,x=0.8955356576888092,y=0.48158644758234315 a=zee,b=wye,i=7694,x=0.3060398953875496,y=0.10472339189986246 a=pan,b=zee,i=7695,x=0.3094975482418527,y=0.5858128371070169 a=wye,b=hat,i=7696,x=0.4662656698623283,y=0.8544965801108738 a=pan,b=zee,i=7697,x=0.6678143703378705,y=0.09581777907957223 a=zee,b=zee,i=7698,x=0.17073541333474684,y=0.6197461253961557 a=hat,b=pan,i=7699,x=0.28150223924025986,y=0.7949334007434804 a=eks,b=pan,i=7700,x=0.7077775737786727,y=0.7272353949934527 a=pan,b=pan,i=7701,x=0.43912855740961954,y=0.5952759302937142 a=wye,b=pan,i=7702,x=0.6934052269305254,y=0.7343693194312434 a=zee,b=wye,i=7703,x=0.0832141448099386,y=0.689610820157997 a=eks,b=eks,i=7704,x=0.76786474676413,y=0.8734911204128757 a=zee,b=eks,i=7705,x=0.9142550768210165,y=0.42338987508974 a=hat,b=hat,i=7706,x=0.4389747985376733,y=0.5868957432180422 a=pan,b=hat,i=7707,x=0.4742489895390498,y=0.6875201433051585 a=eks,b=wye,i=7708,x=0.1593131070189654,y=0.21618160132947373 a=eks,b=pan,i=7709,x=0.021236282778372417,y=0.3980616560952607 a=pan,b=pan,i=7710,x=0.6454947652276057,y=0.5934369662779847 a=pan,b=hat,i=7711,x=0.38583521508275165,y=0.5401757081161919 a=pan,b=hat,i=7712,x=0.4196809161822014,y=0.26377711630821754 a=zee,b=pan,i=7713,x=0.155281849590593,y=0.5244565614620743 a=zee,b=eks,i=7714,x=0.6373285599346649,y=0.1336713798341309 a=hat,b=hat,i=7715,x=0.6233765313325004,y=0.5758791846152675 a=wye,b=pan,i=7716,x=0.06175476953603409,y=0.8534290829785786 a=hat,b=wye,i=7717,x=0.2286520253814175,y=0.1192319014188804 a=zee,b=hat,i=7718,x=0.267306560937963,y=0.6639413524240723 a=wye,b=pan,i=7719,x=0.776170709486471,y=0.04166930319722717 a=zee,b=wye,i=7720,x=0.9961164879374235,y=0.16594871214649265 a=hat,b=hat,i=7721,x=0.6299836686087046,y=0.13572824583073617 a=zee,b=wye,i=7722,x=0.3686941934605621,y=0.9443406667411673 a=eks,b=pan,i=7723,x=0.3209098916589238,y=0.4109567715356973 a=wye,b=hat,i=7724,x=0.6570505905515743,y=0.15899862539640153 a=hat,b=wye,i=7725,x=0.1378541730969839,y=0.25911129591737747 a=pan,b=pan,i=7726,x=0.43414990019558963,y=0.1556380176176868 a=pan,b=wye,i=7727,x=0.8676654887349956,y=0.4278534479696323 a=eks,b=zee,i=7728,x=0.5397828066703505,y=0.6535807927478277 a=eks,b=hat,i=7729,x=0.02721562297052116,y=0.8792751973629769 a=zee,b=zee,i=7730,x=0.17826971421632076,y=0.23305955441707682 a=hat,b=eks,i=7731,x=0.6064367170765328,y=0.5843998077541726 a=zee,b=zee,i=7732,x=0.306490201972222,y=0.8466305229690627 a=hat,b=pan,i=7733,x=0.15752257838130168,y=0.025328573078963523 a=zee,b=wye,i=7734,x=0.004805891882058155,y=0.7847915958995085 a=hat,b=hat,i=7735,x=0.9286394794387348,y=0.9849690205615684 a=wye,b=zee,i=7736,x=0.5283513685317409,y=0.8859340359150333 a=wye,b=zee,i=7737,x=0.652833563987708,y=0.08525874301989911 a=hat,b=hat,i=7738,x=0.5904289054724924,y=0.015759945451949697 a=wye,b=eks,i=7739,x=0.20047031500415902,y=0.8454528005125532 a=wye,b=eks,i=7740,x=0.7528542161787996,y=0.7648364405523831 a=hat,b=wye,i=7741,x=0.9811094199766318,y=0.28309547772560684 a=wye,b=hat,i=7742,x=0.9283700112189616,y=0.4397004799577646 a=pan,b=hat,i=7743,x=0.26831057042317386,y=0.7077299528211933 a=eks,b=hat,i=7744,x=0.9850127339517182,y=0.28247386637526417 a=eks,b=eks,i=7745,x=0.3215874010779871,y=0.2780127707789244 a=eks,b=eks,i=7746,x=0.35282776725789056,y=0.015349081732579983 a=zee,b=eks,i=7747,x=0.4180982192655389,y=0.2733251523581718 a=eks,b=hat,i=7748,x=0.27317227631391283,y=0.6152013002721723 a=zee,b=pan,i=7749,x=0.408781801299804,y=0.717319277351812 a=pan,b=zee,i=7750,x=0.27375467840491696,y=0.9485370229814897 a=wye,b=wye,i=7751,x=0.9578808895640281,y=0.567472797993126 a=eks,b=wye,i=7752,x=0.8308158486543955,y=0.7251988641133165 a=wye,b=wye,i=7753,x=0.35648228848353636,y=0.825810007353184 a=eks,b=hat,i=7754,x=0.5569680022127645,y=0.5333129600306122 a=eks,b=pan,i=7755,x=0.3881304412114248,y=0.4050350844434646 a=zee,b=pan,i=7756,x=0.2999624778639135,y=0.3422859654759408 a=hat,b=eks,i=7757,x=0.005675684156441596,y=0.4710155431561027 a=pan,b=zee,i=7758,x=0.36890917101981324,y=0.9763006270617745 a=hat,b=pan,i=7759,x=0.2655863070154898,y=0.4394097550698016 a=zee,b=pan,i=7760,x=0.09922636178391386,y=0.3133271646647967 a=hat,b=pan,i=7761,x=0.5937279590019037,y=0.9494399455643315 a=eks,b=pan,i=7762,x=0.9358045588817545,y=0.7330851249844436 a=zee,b=wye,i=7763,x=0.5786653829827114,y=0.2618880168331781 a=zee,b=pan,i=7764,x=0.48750871272402196,y=0.22236263541673462 a=hat,b=hat,i=7765,x=0.8891522513963568,y=0.2668239844400174 a=zee,b=pan,i=7766,x=0.30364046910111253,y=0.6891273587279694 a=eks,b=eks,i=7767,x=0.53797481529119,y=0.9465659178026697 a=eks,b=eks,i=7768,x=0.28912890940887614,y=0.7442458122620677 a=wye,b=hat,i=7769,x=0.3705583652673885,y=0.059144918778647027 a=pan,b=zee,i=7770,x=0.6956017564216889,y=0.66737949839894 a=hat,b=eks,i=7771,x=0.756025188553685,y=0.8094953852781318 a=pan,b=pan,i=7772,x=0.6990222040473527,y=0.033151103195916964 a=hat,b=wye,i=7773,x=0.978940590729752,y=0.12080187423149347 a=pan,b=eks,i=7774,x=0.8611049069366612,y=0.7289618171406003 a=hat,b=pan,i=7775,x=0.24037840559946289,y=0.5476859366235767 a=hat,b=hat,i=7776,x=0.8353731209463556,y=0.766113750196805 a=wye,b=pan,i=7777,x=0.05858955413860256,y=0.12058424529655198 a=zee,b=zee,i=7778,x=0.7416290206514613,y=0.3921085843199572 a=wye,b=hat,i=7779,x=0.6525057028901559,y=0.827506650684489 a=hat,b=hat,i=7780,x=0.35967618349426034,y=0.6155205527426165 a=zee,b=wye,i=7781,x=0.8785183426416252,y=0.5929085468141393 a=eks,b=pan,i=7782,x=0.9147117130322603,y=0.2625104340138019 a=hat,b=pan,i=7783,x=0.2970040422341498,y=0.3987945132487777 a=eks,b=pan,i=7784,x=0.5773221928392703,y=0.984120457296803 a=eks,b=eks,i=7785,x=0.7533984992681583,y=0.34117949445154283 a=pan,b=wye,i=7786,x=0.4922908537138324,y=0.8016564975759202 a=hat,b=pan,i=7787,x=0.9606695287435937,y=0.2724371377986182 a=zee,b=zee,i=7788,x=0.39665748675823,y=0.7990204115613213 a=hat,b=hat,i=7789,x=0.9011093799553621,y=0.233507874232196 a=hat,b=zee,i=7790,x=0.0071897888391820874,y=0.9914209553595086 a=eks,b=eks,i=7791,x=0.41888693176987457,y=0.12945875791772954 a=eks,b=pan,i=7792,x=0.1663832456913965,y=0.7815381913771416 a=hat,b=zee,i=7793,x=0.958394958736606,y=0.8162724775424932 a=pan,b=pan,i=7794,x=0.6756648486521578,y=0.3164832583304539 a=pan,b=eks,i=7795,x=0.5007434672508728,y=0.45116398803311886 a=wye,b=wye,i=7796,x=0.7618404269252146,y=0.7082734662093254 a=hat,b=eks,i=7797,x=0.3339037394632195,y=0.33041712223471265 a=pan,b=eks,i=7798,x=0.8964629088574175,y=0.6314628948974991 a=pan,b=wye,i=7799,x=0.22115218679677484,y=0.8945303177931078 a=zee,b=wye,i=7800,x=0.7914989655477432,y=0.43386605796501754 a=eks,b=wye,i=7801,x=0.2768061453774291,y=0.11197920863328137 a=zee,b=pan,i=7802,x=0.8246321893741126,y=0.9437960471953348 a=zee,b=pan,i=7803,x=0.14679410267991433,y=0.7951490909241772 a=eks,b=zee,i=7804,x=0.2527677515169743,y=0.6402837194288739 a=hat,b=zee,i=7805,x=0.7220810582203347,y=0.7321859764651767 a=hat,b=wye,i=7806,x=0.8114485139288578,y=0.10936244859497501 a=zee,b=eks,i=7807,x=0.2431299964406336,y=0.6806744199778801 a=hat,b=hat,i=7808,x=0.8890059022302841,y=0.22235264592897086 a=wye,b=wye,i=7809,x=0.00751279921360315,y=0.10191418158652688 a=wye,b=pan,i=7810,x=0.22896336477318813,y=0.3855317875005415 a=pan,b=hat,i=7811,x=0.2803772001943151,y=0.06126665020709965 a=pan,b=wye,i=7812,x=0.6626056412742908,y=0.8119248457418577 a=zee,b=wye,i=7813,x=0.2839449326479042,y=0.21823946066739763 a=hat,b=zee,i=7814,x=0.9824109871068729,y=0.24702350802138673 a=wye,b=pan,i=7815,x=0.29912422376234227,y=0.031086896342097492 a=wye,b=hat,i=7816,x=0.9864077710445651,y=0.7857310073202174 a=zee,b=zee,i=7817,x=0.8037520801675582,y=0.23521748865500658 a=zee,b=zee,i=7818,x=0.8547716274640922,y=0.19464566963124352 a=wye,b=wye,i=7819,x=0.48778425728806885,y=0.5848857294076643 a=zee,b=pan,i=7820,x=0.6449176000624874,y=0.6911176673897844 a=zee,b=zee,i=7821,x=0.6652689102876012,y=0.8739835083180177 a=zee,b=eks,i=7822,x=0.6987205194846695,y=0.5636198949945938 a=pan,b=hat,i=7823,x=0.010016579560818473,y=0.8874400130011928 a=zee,b=eks,i=7824,x=0.819077078113403,y=0.1908070440081936 a=pan,b=hat,i=7825,x=0.1352980142489283,y=0.6116246247477668 a=hat,b=zee,i=7826,x=0.45007045338969864,y=0.8838605924784972 a=zee,b=zee,i=7827,x=0.5476130433221185,y=0.5402862105818173 a=zee,b=hat,i=7828,x=0.9857371922518141,y=0.9407026776406513 a=eks,b=eks,i=7829,x=0.6388976780469364,y=0.1723731781397092 a=zee,b=zee,i=7830,x=0.00819682639104835,y=0.4240387399947815 a=pan,b=eks,i=7831,x=0.7227922598778895,y=0.8810129413735137 a=wye,b=eks,i=7832,x=0.44768287987315436,y=0.06097808844991881 a=hat,b=zee,i=7833,x=0.38094799324344375,y=0.842105346910846 a=hat,b=hat,i=7834,x=0.7048613327865254,y=0.1492452682364549 a=pan,b=eks,i=7835,x=0.7503216413048331,y=0.22610681402742594 a=wye,b=hat,i=7836,x=0.18033444340025684,y=0.5396596125945982 a=zee,b=hat,i=7837,x=0.7596610024208577,y=0.13811213680042633 a=zee,b=pan,i=7838,x=0.46989555714248354,y=0.5731236845422526 a=eks,b=zee,i=7839,x=0.2378040998190729,y=0.8687389259046864 a=eks,b=wye,i=7840,x=0.15083338360252196,y=0.4677170605064366 a=eks,b=wye,i=7841,x=0.2390993050590302,y=0.4022350252704088 a=wye,b=wye,i=7842,x=0.03868013977565554,y=0.36213469293451195 a=hat,b=eks,i=7843,x=0.2326952229877629,y=0.07810622939834866 a=eks,b=eks,i=7844,x=0.3464583830104778,y=0.24608203542200424 a=zee,b=hat,i=7845,x=0.6258279281533773,y=0.519301606092353 a=hat,b=hat,i=7846,x=0.7328028225195036,y=0.11369450919398072 a=hat,b=wye,i=7847,x=0.5913920636618824,y=0.869313774493801 a=pan,b=hat,i=7848,x=0.9911771508550357,y=0.4789157458695267 a=zee,b=wye,i=7849,x=0.6838794391771024,y=0.7901996933834754 a=zee,b=eks,i=7850,x=0.38221395674318315,y=0.4647687529098594 a=pan,b=hat,i=7851,x=0.7174129864414264,y=0.6977644513609003 a=wye,b=wye,i=7852,x=0.9237362599816926,y=0.8751578434058209 a=eks,b=eks,i=7853,x=0.4518707326185428,y=0.6617696626513239 a=hat,b=wye,i=7854,x=0.06764752166213406,y=0.2082339516770152 a=zee,b=wye,i=7855,x=0.28326864641471117,y=0.7936013908655049 a=wye,b=hat,i=7856,x=0.7543839227963806,y=0.7708302534568163 a=pan,b=hat,i=7857,x=0.4184705412704066,y=0.40669972332461846 a=wye,b=zee,i=7858,x=0.9223976078879647,y=0.5779020996216999 a=zee,b=zee,i=7859,x=0.10768947209184598,y=0.3365441234115185 a=hat,b=eks,i=7860,x=0.7452070101622097,y=0.17526957060226422 a=zee,b=eks,i=7861,x=0.5097508654113272,y=0.21814047343538046 a=hat,b=eks,i=7862,x=0.27105430205532133,y=0.7490102016231208 a=hat,b=pan,i=7863,x=0.06726201643453855,y=0.35933180644142315 a=pan,b=wye,i=7864,x=0.3103009370970985,y=0.8407327110613196 a=eks,b=wye,i=7865,x=0.32234768937000546,y=0.02406247620613 a=wye,b=hat,i=7866,x=0.6773974203264422,y=0.2145912727473317 a=zee,b=hat,i=7867,x=0.7690926832290548,y=0.9300355345607946 a=wye,b=hat,i=7868,x=0.9396022178120012,y=0.4338845485635848 a=zee,b=hat,i=7869,x=0.9505475018937193,y=0.14630084195031035 a=eks,b=pan,i=7870,x=0.31855769422540314,y=0.8895458854037835 a=hat,b=eks,i=7871,x=0.5921983075931928,y=0.4229347949955703 a=wye,b=wye,i=7872,x=0.5263396869727451,y=0.6135988456193723 a=hat,b=hat,i=7873,x=0.8940280465724006,y=0.23131247213081552 a=hat,b=wye,i=7874,x=0.09904413256911793,y=0.8854746496958716 a=wye,b=wye,i=7875,x=0.5037904698265824,y=0.32995968281854504 a=hat,b=eks,i=7876,x=0.5344512004977263,y=0.11225525657163704 a=pan,b=wye,i=7877,x=0.9050244381025329,y=0.4700479323860336 a=zee,b=wye,i=7878,x=0.5290284670419653,y=0.35507751760627737 a=wye,b=pan,i=7879,x=0.3148924229301867,y=0.1872406546524351 a=eks,b=wye,i=7880,x=0.03633390115689916,y=0.16903851260082725 a=hat,b=pan,i=7881,x=0.8711990119730865,y=0.4293663097385956 a=eks,b=eks,i=7882,x=0.8471544066093775,y=0.40223962006438685 a=hat,b=wye,i=7883,x=0.24262458856564295,y=0.01835360943862996 a=pan,b=eks,i=7884,x=0.6922724138336023,y=0.012397141051616933 a=zee,b=hat,i=7885,x=0.3025111314280283,y=0.9069884084952201 a=hat,b=zee,i=7886,x=0.794970017782755,y=0.6062492046952036 a=wye,b=zee,i=7887,x=0.8726346787308475,y=0.3029668754826792 a=hat,b=hat,i=7888,x=0.20756986827268153,y=0.6363026946616206 a=zee,b=wye,i=7889,x=0.23271731636441206,y=0.548253711367059 a=eks,b=eks,i=7890,x=0.5715742308742378,y=0.8192093346935977 a=wye,b=eks,i=7891,x=0.6699323585736414,y=0.1435311317094633 a=hat,b=eks,i=7892,x=0.42467396461692,y=0.7347899103390217 a=hat,b=pan,i=7893,x=0.7439486973392055,y=0.17955726400681704 a=eks,b=wye,i=7894,x=0.5608680829128325,y=0.9585598084195104 a=wye,b=wye,i=7895,x=0.44727463294971703,y=0.7872043941311472 a=eks,b=pan,i=7896,x=0.9913466570743009,y=0.6302035261111584 a=hat,b=wye,i=7897,x=0.5421196020388044,y=0.8624723374301944 a=eks,b=eks,i=7898,x=0.37298028446417475,y=0.8728404913054509 a=eks,b=zee,i=7899,x=0.8332042684792176,y=0.07345290916251856 a=zee,b=wye,i=7900,x=0.8094076175677304,y=0.14978155572080065 a=wye,b=hat,i=7901,x=0.9355960796171349,y=0.18626647870004664 a=zee,b=wye,i=7902,x=0.2637291967134705,y=0.5442660467355056 a=zee,b=eks,i=7903,x=0.12158777831041234,y=0.9890244717689465 a=eks,b=hat,i=7904,x=0.2705482127515829,y=0.01971442860313377 a=zee,b=eks,i=7905,x=0.44670524308794834,y=0.5845415190296815 a=zee,b=eks,i=7906,x=0.691867757886342,y=0.2848167176859655 a=pan,b=zee,i=7907,x=0.33908058571920063,y=0.5335427401965982 a=zee,b=hat,i=7908,x=0.3610060660850839,y=0.24288129482927623 a=zee,b=wye,i=7909,x=0.9120826455472996,y=0.44475380738945147 a=zee,b=zee,i=7910,x=0.567164847298404,y=0.399455541894602 a=wye,b=eks,i=7911,x=0.691697756697526,y=0.877518858711515 a=zee,b=pan,i=7912,x=0.31982431730922556,y=0.7058492177082524 a=pan,b=zee,i=7913,x=0.7134779956631648,y=0.03877802504200312 a=wye,b=hat,i=7914,x=0.4366613963535759,y=0.8447738266648783 a=zee,b=pan,i=7915,x=0.6579171209676669,y=0.6482697150135545 a=wye,b=eks,i=7916,x=0.2877295918648384,y=0.211059870769302 a=pan,b=eks,i=7917,x=0.5275793853162087,y=0.8748428200227294 a=eks,b=eks,i=7918,x=0.12458230242468837,y=0.24069602443528393 a=zee,b=zee,i=7919,x=0.5222051770223615,y=0.1878235700153812 a=zee,b=zee,i=7920,x=0.8985365345616582,y=0.6020907480091875 a=hat,b=wye,i=7921,x=0.09671063835019511,y=0.4703227983629693 a=hat,b=zee,i=7922,x=0.8879147106591082,y=0.19697818805308442 a=eks,b=zee,i=7923,x=0.38870229665971356,y=0.5985607302963999 a=eks,b=pan,i=7924,x=0.3713298410561683,y=0.296460093460874 a=zee,b=eks,i=7925,x=0.5420534501009495,y=0.05866294852898357 a=zee,b=eks,i=7926,x=0.47492169105504933,y=0.8587163655741379 a=pan,b=zee,i=7927,x=0.7972209851115417,y=0.1287619061325339 a=wye,b=pan,i=7928,x=0.4065863120979525,y=0.7016224626335005 a=zee,b=zee,i=7929,x=0.25040361330370065,y=0.3462781056544345 a=wye,b=eks,i=7930,x=0.5998999740666952,y=0.940489760974054 a=eks,b=hat,i=7931,x=0.7426863429203551,y=0.5997919568409129 a=eks,b=wye,i=7932,x=0.7539925055624301,y=0.9588704021223314 a=eks,b=eks,i=7933,x=0.8496577484419044,y=0.8749858904217946 a=zee,b=hat,i=7934,x=0.39625425573088036,y=0.7516162692981885 a=zee,b=eks,i=7935,x=0.07413718973123662,y=0.9540488375627403 a=hat,b=eks,i=7936,x=0.43057462793549084,y=0.83261804348024 a=pan,b=pan,i=7937,x=0.7944834203394888,y=0.4910876849942255 a=pan,b=hat,i=7938,x=0.7835615902262538,y=0.030503750805517593 a=wye,b=zee,i=7939,x=0.20769387630166103,y=0.9857694928121757 a=eks,b=pan,i=7940,x=0.18503477530273849,y=0.2613475073722671 a=wye,b=hat,i=7941,x=0.4205902145088837,y=0.8454165597750689 a=pan,b=wye,i=7942,x=0.14289054655956812,y=0.5590237538729541 a=zee,b=hat,i=7943,x=0.007346899370313853,y=0.9435542424367808 a=wye,b=pan,i=7944,x=0.6010756954347072,y=0.602663902557592 a=wye,b=pan,i=7945,x=0.204176839139523,y=0.9444532348782411 a=zee,b=pan,i=7946,x=0.22356842063761684,y=0.6173414017420112 a=zee,b=eks,i=7947,x=0.025642761574512285,y=0.18768382301071385 a=eks,b=wye,i=7948,x=0.6258015401993495,y=0.4655464102747875 a=pan,b=zee,i=7949,x=0.2888268615751203,y=0.5754370603975112 a=wye,b=pan,i=7950,x=0.13192831258970839,y=0.09974934678356573 a=eks,b=pan,i=7951,x=0.573135783011619,y=0.5173979516422308 a=wye,b=pan,i=7952,x=0.9672001578855394,y=0.5999113434317762 a=hat,b=wye,i=7953,x=0.5332777170304573,y=0.8240541851977825 a=pan,b=wye,i=7954,x=0.1279461268867662,y=0.3465018420126411 a=pan,b=zee,i=7955,x=0.26370302153935266,y=0.709886854064376 a=wye,b=wye,i=7956,x=0.08185493324300519,y=0.8430295223333161 a=eks,b=eks,i=7957,x=0.990948668400743,y=0.1741418790774628 a=wye,b=zee,i=7958,x=0.7645204491814582,y=0.853303854748976 a=zee,b=pan,i=7959,x=0.15605455866939177,y=0.46323289916297505 a=hat,b=zee,i=7960,x=0.16017925473869754,y=0.4529356695213568 a=eks,b=pan,i=7961,x=0.6125869749454478,y=0.370095068843984 a=wye,b=wye,i=7962,x=0.18404446909382244,y=0.26269521842771504 a=eks,b=wye,i=7963,x=0.5558763888070763,y=0.185510369521809 a=pan,b=pan,i=7964,x=0.282047967900814,y=0.22212917426772594 a=eks,b=wye,i=7965,x=0.05872308143086857,y=0.38482704713824056 a=pan,b=hat,i=7966,x=0.2501049463368379,y=0.39344676758297514 a=wye,b=hat,i=7967,x=0.8987874844489919,y=0.49750601381227266 a=pan,b=zee,i=7968,x=0.7089490867118664,y=0.45255811448776784 a=eks,b=wye,i=7969,x=0.6608518009893678,y=0.22790991951466288 a=eks,b=wye,i=7970,x=0.7564471093195367,y=0.588547367327297 a=eks,b=wye,i=7971,x=0.3177159468656713,y=0.6507595896357143 a=wye,b=zee,i=7972,x=0.6981615941048016,y=0.3554268056065458 a=wye,b=pan,i=7973,x=0.018524216435056196,y=0.08446663540594712 a=hat,b=zee,i=7974,x=0.24963209679900955,y=0.016049846424579184 a=hat,b=wye,i=7975,x=0.048154096212748465,y=0.23172149127883657 a=eks,b=pan,i=7976,x=0.406288377613479,y=0.6746918193025293 a=wye,b=hat,i=7977,x=0.5283629678807258,y=0.8918455631655288 a=pan,b=wye,i=7978,x=0.5186376529712587,y=0.8811576068202212 a=hat,b=eks,i=7979,x=0.1757549377495632,y=0.7507650545931341 a=zee,b=zee,i=7980,x=0.10892391322425843,y=0.050571608567332116 a=hat,b=eks,i=7981,x=0.5740714306503298,y=0.34091415824926563 a=hat,b=hat,i=7982,x=0.15020550177808045,y=0.9076080995933096 a=pan,b=hat,i=7983,x=0.5450883311922072,y=0.44507084646454187 a=eks,b=pan,i=7984,x=0.49794222352752093,y=0.19964088700431204 a=eks,b=eks,i=7985,x=0.25908328241507117,y=0.41719268312114377 a=wye,b=zee,i=7986,x=0.2712612087411137,y=0.4093087980161978 a=eks,b=eks,i=7987,x=0.6808132597759162,y=0.10935069218341964 a=wye,b=eks,i=7988,x=0.8262618950608377,y=0.09248423605386846 a=zee,b=eks,i=7989,x=0.5671275966876752,y=0.6710467056302961 a=zee,b=hat,i=7990,x=0.12246709018315027,y=0.9902823724804396 a=hat,b=eks,i=7991,x=0.9093001304035243,y=0.6454294428509858 a=pan,b=hat,i=7992,x=0.28055455032097176,y=0.7076435705928082 a=zee,b=pan,i=7993,x=0.840708068980671,y=0.7676444206837281 a=eks,b=pan,i=7994,x=0.13873019879879267,y=0.3541885725000481 a=wye,b=wye,i=7995,x=0.5556276037973694,y=0.7103742139489323 a=wye,b=hat,i=7996,x=0.7897718226462853,y=0.7866250828364114 a=pan,b=zee,i=7997,x=0.42328017164614196,y=0.8968239987659891 a=zee,b=pan,i=7998,x=0.6173947671381171,y=0.9099504940374747 a=pan,b=eks,i=7999,x=0.1904021794562485,y=0.2442456072044632 a=eks,b=hat,i=8000,x=0.494989535411282,y=0.9858490482421876 a=pan,b=zee,i=8001,x=0.21740880422197573,y=0.009823495326658604 a=wye,b=zee,i=8002,x=0.8483246353215173,y=0.748697867257607 a=eks,b=wye,i=8003,x=0.07232519497816503,y=0.01460395395166092 a=hat,b=hat,i=8004,x=0.38823106724151646,y=0.7637253093388771 a=pan,b=eks,i=8005,x=0.8569860709125309,y=0.12024935239203738 a=zee,b=zee,i=8006,x=0.4339798390608952,y=0.752225427449917 a=hat,b=eks,i=8007,x=0.37719631868649617,y=0.39591507134214254 a=hat,b=zee,i=8008,x=0.2500892579626076,y=0.6235655047728978 a=zee,b=eks,i=8009,x=0.21398276966281848,y=0.6412152131738255 a=hat,b=eks,i=8010,x=0.3187905796970636,y=0.3173506685081655 a=pan,b=pan,i=8011,x=0.5376262182105622,y=0.4824151159482998 a=zee,b=hat,i=8012,x=0.9967455860256934,y=0.846350626099811 a=eks,b=zee,i=8013,x=0.6750010866052097,y=0.380258473116171 a=pan,b=hat,i=8014,x=0.8682985870091493,y=0.13867025721075266 a=zee,b=wye,i=8015,x=0.876659392160873,y=0.005960162771398214 a=pan,b=wye,i=8016,x=0.17217503903346676,y=0.6363974355768541 a=hat,b=zee,i=8017,x=0.8289275824108141,y=0.5824677757054623 a=zee,b=hat,i=8018,x=0.47908711384726377,y=0.2078467393092358 a=pan,b=hat,i=8019,x=0.03774190681630729,y=0.37562081779173295 a=pan,b=pan,i=8020,x=0.25202925423609734,y=0.8758710479186967 a=hat,b=zee,i=8021,x=0.6283764347998099,y=0.7038955747755151 a=wye,b=eks,i=8022,x=0.9822305246922711,y=0.9025462559345021 a=pan,b=hat,i=8023,x=0.17809600073620713,y=0.7136989224391156 a=pan,b=hat,i=8024,x=0.7871049381240648,y=0.9157631088161338 a=hat,b=zee,i=8025,x=0.8464024197077388,y=0.7505262168915832 a=hat,b=hat,i=8026,x=0.27076546874115703,y=0.717232478948042 a=eks,b=wye,i=8027,x=0.47677652985856545,y=0.742388612767014 a=pan,b=wye,i=8028,x=0.03498607510109997,y=0.19549287051995312 a=hat,b=zee,i=8029,x=0.8902222199776184,y=0.22597809584182216 a=wye,b=pan,i=8030,x=0.8534063530727802,y=0.5216400536886638 a=wye,b=pan,i=8031,x=0.399100924785613,y=0.8096553851806476 a=zee,b=hat,i=8032,x=0.3470913703916284,y=0.4932013734514763 a=hat,b=hat,i=8033,x=0.10816322348365748,y=0.6629283579053702 a=zee,b=eks,i=8034,x=0.7893326165734248,y=0.0055174814334882916 a=wye,b=pan,i=8035,x=0.17190090759613674,y=0.02144281885832955 a=hat,b=eks,i=8036,x=0.4487638977131928,y=0.9316999919622478 a=zee,b=zee,i=8037,x=0.7060201401255403,y=0.9669662969793548 a=zee,b=wye,i=8038,x=0.1386368820895454,y=0.5056689278962295 a=pan,b=eks,i=8039,x=0.09184144959885043,y=0.6340163134818283 a=pan,b=zee,i=8040,x=0.7171534760409121,y=0.7328586414702059 a=pan,b=eks,i=8041,x=0.3839508814613577,y=0.30631865487711984 a=zee,b=wye,i=8042,x=0.3764616704796617,y=0.0013477620094425324 a=hat,b=eks,i=8043,x=0.3534996104529119,y=0.7450885137370724 a=hat,b=wye,i=8044,x=0.10170616112045472,y=0.5317124791229391 a=hat,b=pan,i=8045,x=0.7300195962365097,y=0.3308540333941833 a=eks,b=wye,i=8046,x=0.6051188687817523,y=0.9131734207686757 a=eks,b=zee,i=8047,x=0.5374608283378429,y=0.31273904942423725 a=zee,b=wye,i=8048,x=0.05640085976332132,y=0.0700003098785944 a=wye,b=eks,i=8049,x=0.5114158496176794,y=0.12846145668110132 a=eks,b=hat,i=8050,x=0.9874222186130187,y=0.8593466056433501 a=eks,b=eks,i=8051,x=0.9761481708304064,y=0.15123613115180856 a=pan,b=pan,i=8052,x=0.6493110423838093,y=0.5347940909170277 a=pan,b=pan,i=8053,x=0.9130131367137716,y=0.20063251495257384 a=wye,b=wye,i=8054,x=0.29645291860851164,y=0.2862439675971603 a=wye,b=hat,i=8055,x=0.9283998083818392,y=0.9186794272646708 a=zee,b=eks,i=8056,x=0.21742326077552165,y=0.21215545457837148 a=hat,b=pan,i=8057,x=0.805271595399746,y=0.46020440997594847 a=pan,b=zee,i=8058,x=0.2152394578214053,y=0.6196385518512275 a=eks,b=pan,i=8059,x=0.39413913874172746,y=0.8509631752611558 a=hat,b=wye,i=8060,x=0.6704371607062275,y=0.002101362140308649 a=wye,b=eks,i=8061,x=0.38279862612807036,y=0.5895252762171836 a=wye,b=hat,i=8062,x=0.9226631815117158,y=0.9902149324132298 a=pan,b=eks,i=8063,x=0.4162908252496399,y=0.18879569170028876 a=wye,b=eks,i=8064,x=0.520433239579577,y=0.4738497455813805 a=wye,b=wye,i=8065,x=0.5952586854249843,y=0.050797298251500145 a=eks,b=pan,i=8066,x=0.7550938758657687,y=0.03587749109184113 a=pan,b=hat,i=8067,x=0.5198389196832879,y=0.2056652183357338 a=zee,b=zee,i=8068,x=0.1526773413967627,y=0.492096177763767 a=hat,b=zee,i=8069,x=0.6263854342684977,y=0.4917794632623357 a=wye,b=wye,i=8070,x=0.19425905980457325,y=0.5136004485194701 a=pan,b=eks,i=8071,x=0.15980232628622404,y=0.7963848087282333 a=pan,b=hat,i=8072,x=0.8729803431362889,y=0.23389287840183937 a=eks,b=pan,i=8073,x=0.8414137403991204,y=0.013708060374022835 a=pan,b=pan,i=8074,x=0.47234873863850657,y=0.4467664305469584 a=eks,b=zee,i=8075,x=0.8643916283489397,y=0.8421716629916459 a=pan,b=wye,i=8076,x=0.36180082799458324,y=0.2681111063038798 a=wye,b=zee,i=8077,x=0.291110312999184,y=0.3904237799736081 a=pan,b=wye,i=8078,x=0.2285091327975376,y=0.08630172750559728 a=hat,b=wye,i=8079,x=0.04336915531209018,y=0.7750227412335468 a=zee,b=pan,i=8080,x=0.4953944041935031,y=0.13051323550656468 a=eks,b=wye,i=8081,x=0.9893684193709726,y=0.009655042259111513 a=wye,b=eks,i=8082,x=0.5505998662939379,y=0.4793977598693524 a=eks,b=zee,i=8083,x=0.976642999884874,y=0.41575660829151373 a=eks,b=hat,i=8084,x=0.6415360825871783,y=0.9093765294473956 a=eks,b=wye,i=8085,x=0.19986686946961607,y=0.6001471405049741 a=wye,b=pan,i=8086,x=0.7089561346111681,y=0.9346147842120147 a=hat,b=wye,i=8087,x=0.6721158897399355,y=0.8662012495181518 a=zee,b=pan,i=8088,x=0.2999863643844106,y=0.9736282819386414 a=eks,b=hat,i=8089,x=0.780371764692202,y=0.13534345378955825 a=hat,b=zee,i=8090,x=0.18588301944750896,y=0.9295096790100238 a=wye,b=wye,i=8091,x=0.3136153634214588,y=0.9518615611124033 a=wye,b=zee,i=8092,x=0.3727994612209693,y=0.12052581566020104 a=eks,b=hat,i=8093,x=0.9315252187513533,y=0.561169216332415 a=zee,b=pan,i=8094,x=0.6896842396279547,y=0.2659526826052142 a=zee,b=eks,i=8095,x=0.013899464399908745,y=0.8010549230884639 a=hat,b=wye,i=8096,x=0.9312335027031023,y=0.22775044082337215 a=pan,b=pan,i=8097,x=0.2875217953665159,y=0.7352692976694222 a=pan,b=eks,i=8098,x=0.02310988069794695,y=0.04436912792860748 a=wye,b=eks,i=8099,x=0.9922978662257267,y=0.1009226522265646 a=pan,b=wye,i=8100,x=0.6977704958793126,y=0.7057512041273386 a=hat,b=zee,i=8101,x=0.8813156757676321,y=0.538439525268842 a=pan,b=eks,i=8102,x=0.8253811424731291,y=0.8958384638924397 a=wye,b=hat,i=8103,x=0.6382749094882392,y=0.7690601393055252 a=zee,b=zee,i=8104,x=0.19443211144688854,y=0.39629790432524836 a=zee,b=zee,i=8105,x=0.028359518501674397,y=0.31630049190233644 a=eks,b=zee,i=8106,x=0.04927046404341662,y=0.8091340642622323 a=pan,b=wye,i=8107,x=0.4038787839956157,y=0.8184040881437044 a=eks,b=eks,i=8108,x=0.8869014997757403,y=0.6363003729185641 a=eks,b=wye,i=8109,x=0.9098383165363556,y=0.06949042541302553 a=eks,b=eks,i=8110,x=0.24771678765070493,y=0.9300163398042232 a=eks,b=eks,i=8111,x=0.3084468757714339,y=0.9610528375033978 a=eks,b=eks,i=8112,x=0.31000078368875394,y=0.36138146669138416 a=wye,b=pan,i=8113,x=0.8110116541728041,y=0.36626731504545484 a=wye,b=hat,i=8114,x=0.8838936751784368,y=0.16448491200443816 a=eks,b=hat,i=8115,x=0.2092866675789835,y=0.6207159056705113 a=wye,b=wye,i=8116,x=0.5430690309464962,y=0.3836390944257766 a=hat,b=wye,i=8117,x=0.14958982301791146,y=0.8124903759523353 a=eks,b=hat,i=8118,x=0.8557041552120278,y=0.5440118132291639 a=hat,b=pan,i=8119,x=0.21486759901824792,y=0.3923954170049483 a=pan,b=zee,i=8120,x=0.6592841558501972,y=0.8794810617469089 a=eks,b=eks,i=8121,x=0.9178846401562378,y=0.7797206181214477 a=wye,b=eks,i=8122,x=0.6079549297413829,y=0.16695883184694493 a=eks,b=hat,i=8123,x=0.8786712780916176,y=0.5986968292379161 a=eks,b=hat,i=8124,x=0.6050565349569751,y=0.17711761175975083 a=zee,b=hat,i=8125,x=0.7071191860103717,y=0.5065338033789499 a=wye,b=pan,i=8126,x=0.9928274286457106,y=0.611287542007201 a=pan,b=pan,i=8127,x=0.7855300117843916,y=0.919185243159261 a=wye,b=wye,i=8128,x=0.5451094693684497,y=0.6739488974426652 a=eks,b=eks,i=8129,x=0.4483894040870827,y=0.04899785138545132 a=wye,b=wye,i=8130,x=0.6304140421100901,y=0.8822571743603556 a=pan,b=wye,i=8131,x=0.722244198415005,y=0.4334139656985445 a=zee,b=eks,i=8132,x=0.9155857784701777,y=0.3496924391322812 a=wye,b=eks,i=8133,x=0.968745042493151,y=0.20226923971903277 a=pan,b=hat,i=8134,x=0.8128492182669791,y=0.392568386730878 a=pan,b=wye,i=8135,x=0.45117859842393093,y=0.2608070414195329 a=zee,b=zee,i=8136,x=0.6400905852932521,y=0.9035481906697407 a=eks,b=hat,i=8137,x=0.039487665967159025,y=0.2642755984465909 a=hat,b=hat,i=8138,x=0.9944665404962163,y=0.03601538456153819 a=eks,b=eks,i=8139,x=0.5696036037683665,y=0.5215775669287221 a=pan,b=pan,i=8140,x=0.24967169231618214,y=0.6896632292080579 a=hat,b=hat,i=8141,x=0.06250971300811059,y=0.6284789386523464 a=zee,b=wye,i=8142,x=0.6462280039869936,y=0.989075899835102 a=pan,b=zee,i=8143,x=0.03802909555431522,y=0.0805330261761773 a=pan,b=wye,i=8144,x=0.7168864018283236,y=0.9743458426619153 a=eks,b=eks,i=8145,x=0.45913426278863745,y=0.7259328042437585 a=hat,b=wye,i=8146,x=0.6466004179249605,y=0.6476130238612243 a=wye,b=pan,i=8147,x=0.7564890511190168,y=0.3370280131510147 a=hat,b=pan,i=8148,x=0.8171601926388993,y=0.12709291977727588 a=eks,b=zee,i=8149,x=0.9838548523184443,y=0.6613857827470255 a=eks,b=hat,i=8150,x=0.42800158894759266,y=0.13739447644695857 a=wye,b=wye,i=8151,x=0.43651846968412356,y=0.716297573022078 a=zee,b=eks,i=8152,x=0.6420074465872548,y=0.5270375969424234 a=wye,b=hat,i=8153,x=0.07009589864190946,y=0.7822728799879559 a=eks,b=wye,i=8154,x=0.00955231084174002,y=0.7545442970218491 a=hat,b=pan,i=8155,x=0.6975376085727898,y=0.6899571370767156 a=zee,b=zee,i=8156,x=0.6395251098634284,y=0.5644973057197734 a=zee,b=pan,i=8157,x=0.39296205632043724,y=0.5511832594601693 a=eks,b=wye,i=8158,x=0.8469059054134236,y=0.9101861362422637 a=hat,b=zee,i=8159,x=0.11438608585479293,y=0.6137417386563446 a=wye,b=pan,i=8160,x=0.6081825274202294,y=0.14769534194863843 a=zee,b=wye,i=8161,x=0.7550762971732712,y=0.8530495051917243 a=zee,b=hat,i=8162,x=0.5735901437760568,y=0.20486220503074404 a=zee,b=hat,i=8163,x=0.13773260453775793,y=0.9660659918112889 a=zee,b=eks,i=8164,x=0.3607826318282279,y=0.1255618535732741 a=pan,b=wye,i=8165,x=0.7460078629419659,y=0.20509518109673885 a=eks,b=wye,i=8166,x=0.2703585359160412,y=0.7519449563416004 a=eks,b=wye,i=8167,x=0.6912089808005739,y=0.351675852657667 a=eks,b=eks,i=8168,x=0.8121986201818601,y=0.4587202609317872 a=eks,b=pan,i=8169,x=0.7194305802045211,y=0.9549210116328868 a=pan,b=eks,i=8170,x=0.6998846923585399,y=0.49886417024119634 a=wye,b=pan,i=8171,x=0.7170199430209871,y=0.4596547273774765 a=zee,b=wye,i=8172,x=0.2188044470516215,y=0.9409262537024545 a=pan,b=eks,i=8173,x=0.7415922617357986,y=0.0627371763205734 a=pan,b=hat,i=8174,x=0.2520020123957777,y=0.5935359054834856 a=pan,b=zee,i=8175,x=0.5756118666838461,y=0.6166940778091887 a=hat,b=wye,i=8176,x=0.8316169809953903,y=0.7727468837518336 a=wye,b=wye,i=8177,x=0.45262062218854693,y=0.6417926617217392 a=zee,b=hat,i=8178,x=0.3414767323625455,y=0.8276355992219739 a=hat,b=wye,i=8179,x=0.6913338216581719,y=0.8634446415532928 a=zee,b=pan,i=8180,x=0.7018819862110542,y=0.30230351547636003 a=hat,b=hat,i=8181,x=0.23955047854083944,y=0.27040254626774474 a=eks,b=wye,i=8182,x=0.2922405169121165,y=0.6645061373641254 a=zee,b=hat,i=8183,x=0.5126902650356464,y=0.8692712883907214 a=wye,b=pan,i=8184,x=0.9824979545102979,y=0.011383619081017482 a=eks,b=hat,i=8185,x=0.8449937251277326,y=0.6863834790266286 a=wye,b=zee,i=8186,x=0.04497354678950516,y=0.5141925160548166 a=hat,b=hat,i=8187,x=0.8262556263127695,y=0.21920924731404545 a=zee,b=zee,i=8188,x=0.8188229466265301,y=0.7731986253520043 a=zee,b=eks,i=8189,x=0.21859629681055648,y=0.04545680236762617 a=wye,b=eks,i=8190,x=0.17387577778883723,y=0.3600963171444731 a=zee,b=zee,i=8191,x=0.6027946184126483,y=0.7560104230688947 a=wye,b=pan,i=8192,x=0.5268204744299162,y=0.7467950199333838 a=pan,b=eks,i=8193,x=0.6279753535291541,y=0.1032502911892883 a=eks,b=pan,i=8194,x=0.4677408184985905,y=0.6073881904140683 a=zee,b=hat,i=8195,x=0.016890946717297295,y=0.9176976283367435 a=eks,b=hat,i=8196,x=0.24986039875431232,y=0.6476803155115554 a=pan,b=pan,i=8197,x=0.4524152227370508,y=0.2620560509511556 a=pan,b=eks,i=8198,x=0.895911910015345,y=0.9918773365972562 a=wye,b=hat,i=8199,x=0.7136636567819744,y=0.7470766277154778 a=hat,b=pan,i=8200,x=0.4231374284492073,y=0.1546230087665409 a=zee,b=zee,i=8201,x=0.7750292191321659,y=0.8295732493514495 a=eks,b=wye,i=8202,x=0.36911480147216946,y=0.18354328249876783 a=pan,b=zee,i=8203,x=0.11943983237768319,y=0.9064110889547424 a=pan,b=eks,i=8204,x=0.6300000735055588,y=0.5097476114683049 a=wye,b=zee,i=8205,x=0.6442554149020752,y=0.6779628314804215 a=pan,b=zee,i=8206,x=0.7692427917331188,y=0.11292590381570122 a=wye,b=pan,i=8207,x=0.39637091869319985,y=0.76304090412573 a=pan,b=hat,i=8208,x=0.7495304237104456,y=0.7417705075817802 a=wye,b=zee,i=8209,x=0.45586308498398453,y=0.9987194582307727 a=hat,b=hat,i=8210,x=0.6476477827460192,y=0.15239181174134397 a=hat,b=pan,i=8211,x=0.11189505956227741,y=0.4621617318098107 a=zee,b=eks,i=8212,x=0.09903637464949222,y=0.11847710838278536 a=zee,b=eks,i=8213,x=0.6131401826730208,y=0.5022261795262266 a=pan,b=eks,i=8214,x=0.18560914156032815,y=0.5491754568832973 a=hat,b=hat,i=8215,x=0.18871663617759393,y=0.7013352032606388 a=zee,b=pan,i=8216,x=0.10912632587239346,y=0.23098909374573406 a=eks,b=hat,i=8217,x=0.9215273193717863,y=0.14757043140565207 a=eks,b=wye,i=8218,x=0.3534829912574341,y=0.5696087711664961 a=hat,b=pan,i=8219,x=0.3322693803060234,y=0.0076976965775436 a=hat,b=wye,i=8220,x=0.8522954785865527,y=0.0007129432355447163 a=hat,b=hat,i=8221,x=0.046602995923670676,y=0.09042940585063108 a=hat,b=pan,i=8222,x=0.0007290941902635684,y=0.9057125778564156 a=zee,b=pan,i=8223,x=0.7575639565865209,y=0.29884828498056126 a=eks,b=wye,i=8224,x=0.995186116661242,y=0.2471757939983208 a=hat,b=zee,i=8225,x=0.3176890506590573,y=0.04443659691703017 a=pan,b=pan,i=8226,x=0.46997531114555335,y=0.91414102033992 a=pan,b=eks,i=8227,x=0.7045690818004235,y=0.016544250381158587 a=pan,b=eks,i=8228,x=0.6859024128283686,y=0.43310740395134806 a=wye,b=hat,i=8229,x=0.4802812953776502,y=0.28698445483944135 a=zee,b=eks,i=8230,x=0.37256536791796446,y=0.22484134058612737 a=hat,b=wye,i=8231,x=0.5993464309625437,y=0.09529154836393428 a=hat,b=pan,i=8232,x=0.053356023845203326,y=0.20750162756833523 a=pan,b=wye,i=8233,x=0.01730056600220997,y=0.4811950137685327 a=wye,b=hat,i=8234,x=0.7002619408413644,y=0.29378327426642736 a=hat,b=zee,i=8235,x=0.5760269820743364,y=0.9876933845887379 a=pan,b=zee,i=8236,x=0.6939214180664733,y=0.01597187286439905 a=pan,b=wye,i=8237,x=0.32216831192867235,y=0.4489268007125685 a=zee,b=pan,i=8238,x=0.4974895037561218,y=0.6955723789507248 a=zee,b=zee,i=8239,x=0.8722145698985853,y=0.5243287664361148 a=hat,b=eks,i=8240,x=0.3119317638364195,y=0.03153083991370387 a=hat,b=hat,i=8241,x=0.8231293488825948,y=0.44236728060318375 a=pan,b=pan,i=8242,x=0.6284004646755453,y=0.5188512495739586 a=eks,b=pan,i=8243,x=0.7790459369722915,y=0.38281709292600563 a=zee,b=zee,i=8244,x=0.5648821749696828,y=0.8387452862417517 a=zee,b=pan,i=8245,x=0.28860321455069415,y=0.5335162435192266 a=pan,b=pan,i=8246,x=0.978767937767844,y=0.595121683896329 a=pan,b=pan,i=8247,x=0.8877669245621814,y=0.993370582244656 a=hat,b=pan,i=8248,x=0.3673861400753813,y=0.7147327203599682 a=wye,b=wye,i=8249,x=0.12404890706154814,y=0.7443872152100742 a=eks,b=zee,i=8250,x=0.5731463701870027,y=0.4981231530018835 a=hat,b=wye,i=8251,x=0.2058939811865338,y=0.8011049893656047 a=zee,b=pan,i=8252,x=0.5300215804178179,y=0.8809898315791685 a=pan,b=pan,i=8253,x=0.14951845911545658,y=0.050337793147141485 a=wye,b=wye,i=8254,x=0.25412836603193123,y=0.7648066786148572 a=zee,b=zee,i=8255,x=0.2969343720495279,y=0.17875651030138728 a=hat,b=hat,i=8256,x=0.6242185970220043,y=0.7024165856278344 a=hat,b=eks,i=8257,x=0.26153012394521724,y=0.9173648797055972 a=hat,b=wye,i=8258,x=0.8531277255736057,y=0.8769896764505173 a=hat,b=zee,i=8259,x=0.80786266752403,y=0.6716375742716686 a=wye,b=hat,i=8260,x=0.8282560647084989,y=0.20433611074471913 a=zee,b=hat,i=8261,x=0.1113559979634432,y=0.7406405068913335 a=zee,b=pan,i=8262,x=0.8457444769341051,y=0.878949052752884 a=hat,b=hat,i=8263,x=0.021118246086347936,y=0.1691340461129066 a=zee,b=wye,i=8264,x=0.9518459612960978,y=0.2793142544459978 a=wye,b=hat,i=8265,x=0.07060877965846446,y=0.7105555726161993 a=wye,b=pan,i=8266,x=0.239318068730919,y=0.9656322414777047 a=wye,b=zee,i=8267,x=0.9407755844234869,y=0.243380428927656 a=hat,b=zee,i=8268,x=0.36840212479306056,y=0.1937179362263023 a=hat,b=eks,i=8269,x=0.11448405024977704,y=0.23838350078789672 a=hat,b=eks,i=8270,x=0.8887588347134354,y=0.3965985425548265 a=zee,b=zee,i=8271,x=0.6960229915393261,y=0.35933925756783236 a=eks,b=wye,i=8272,x=0.6007652533828618,y=0.9021580447695768 a=zee,b=wye,i=8273,x=0.5248356199666635,y=0.26596318599910873 a=eks,b=wye,i=8274,x=0.12638772701100054,y=0.98169945968464 a=eks,b=pan,i=8275,x=0.3873436846104391,y=0.143667378519436 a=wye,b=zee,i=8276,x=0.9887489614515038,y=0.2317693120893085 a=pan,b=hat,i=8277,x=0.07383920400137156,y=0.29779174578381706 a=eks,b=wye,i=8278,x=0.46767848884631935,y=0.05594159328112347 a=pan,b=zee,i=8279,x=0.0664546736505951,y=0.9617417667852406 a=hat,b=zee,i=8280,x=0.3946923561479273,y=0.26022613248187254 a=pan,b=zee,i=8281,x=0.1263835939366954,y=0.432802462221352 a=zee,b=zee,i=8282,x=0.40991526751045837,y=0.4664079852923113 a=hat,b=hat,i=8283,x=0.7155306719275212,y=0.06447259326334698 a=eks,b=zee,i=8284,x=0.18920257463227763,y=0.036407632423777536 a=hat,b=zee,i=8285,x=0.2926888932381453,y=0.7371130359478189 a=eks,b=zee,i=8286,x=0.8003927399144655,y=0.417202355775281 a=pan,b=wye,i=8287,x=0.6189613307505946,y=0.6990573098254149 a=eks,b=wye,i=8288,x=0.4497557556254256,y=0.24756315944170548 a=hat,b=wye,i=8289,x=0.565349257018066,y=0.9695790816330443 a=wye,b=hat,i=8290,x=0.1961063995221537,y=0.8919123622039012 a=pan,b=zee,i=8291,x=0.735310256094497,y=0.8766337081918637 a=wye,b=pan,i=8292,x=0.11264565494014644,y=0.9526134134675315 a=pan,b=zee,i=8293,x=0.42564320453866944,y=0.754899630271162 a=wye,b=eks,i=8294,x=0.03212624806856701,y=0.6046010405280738 a=hat,b=zee,i=8295,x=0.9314009276546747,y=0.3634004587734717 a=pan,b=eks,i=8296,x=0.4120888305335959,y=0.750837757399676 a=pan,b=eks,i=8297,x=0.9819888226687685,y=0.5660827409414791 a=wye,b=zee,i=8298,x=0.8302599994058273,y=0.7781190613623368 a=zee,b=pan,i=8299,x=0.7102421054905385,y=0.18545230561185977 a=eks,b=eks,i=8300,x=0.3945447287695022,y=0.18429543577101226 a=hat,b=wye,i=8301,x=0.5127430759316344,y=0.37361440070960017 a=zee,b=pan,i=8302,x=0.6034067583933804,y=0.04121009695962874 a=hat,b=pan,i=8303,x=0.46102687899911865,y=0.028654914603273074 a=pan,b=wye,i=8304,x=0.2251798670287818,y=0.1196124323878246 a=pan,b=pan,i=8305,x=0.5277320763446786,y=0.2381453397638834 a=wye,b=wye,i=8306,x=0.46134525628997447,y=0.14969908222679185 a=zee,b=wye,i=8307,x=0.4681491013126058,y=0.5960038288514199 a=pan,b=hat,i=8308,x=0.49210482260143007,y=0.9993016708772244 a=wye,b=zee,i=8309,x=0.8206434836667577,y=0.48326589462644276 a=eks,b=hat,i=8310,x=0.9655430452589465,y=0.9245411060012981 a=zee,b=zee,i=8311,x=0.1815329790070851,y=0.8035031242939596 a=hat,b=pan,i=8312,x=0.547677016360058,y=0.9650817043634582 a=pan,b=pan,i=8313,x=0.6126245890384583,y=0.2627563830782662 a=pan,b=pan,i=8314,x=0.5494985537362173,y=0.4929560062893006 a=hat,b=zee,i=8315,x=0.24017154445473743,y=0.8801615057175497 a=eks,b=zee,i=8316,x=0.01845753106507053,y=0.07103606295934006 a=eks,b=pan,i=8317,x=0.729335030923378,y=0.9595878811451796 a=zee,b=wye,i=8318,x=0.3037988276042912,y=0.9939532896787204 a=hat,b=hat,i=8319,x=0.31751994407032824,y=0.04431824787878602 a=eks,b=wye,i=8320,x=0.32774406925223687,y=0.39755988935681663 a=eks,b=pan,i=8321,x=0.2983894526754026,y=0.6350152253803334 a=wye,b=zee,i=8322,x=0.21110663580942235,y=0.5844040682223098 a=wye,b=hat,i=8323,x=0.27575135446576815,y=0.5943122394277006 a=hat,b=zee,i=8324,x=0.03714831235343263,y=0.18937718204762566 a=zee,b=hat,i=8325,x=0.6815362179515927,y=0.054322149908386796 a=hat,b=wye,i=8326,x=0.28959963076391493,y=0.36439348847404984 a=pan,b=eks,i=8327,x=0.4907923620285024,y=0.7411167930742034 a=wye,b=hat,i=8328,x=0.5085798206640023,y=0.8237875259659011 a=zee,b=pan,i=8329,x=0.16898862414886817,y=0.15560228332434112 a=wye,b=eks,i=8330,x=0.29464103904562966,y=0.7341494813651416 a=pan,b=wye,i=8331,x=0.7050741639259068,y=0.24486480402061384 a=wye,b=pan,i=8332,x=0.7019265469630769,y=0.07151895734610458 a=wye,b=hat,i=8333,x=0.3553335894794559,y=0.9167960838619573 a=eks,b=hat,i=8334,x=0.5699916051880387,y=0.13240719214910757 a=eks,b=wye,i=8335,x=0.22545133259971217,y=0.9891874451094091 a=wye,b=pan,i=8336,x=0.751226927786043,y=0.4644307134498339 a=wye,b=hat,i=8337,x=0.9324084470957861,y=0.30464033139638336 a=pan,b=wye,i=8338,x=0.8320742055010252,y=0.3040383465855868 a=zee,b=hat,i=8339,x=0.04629611790555632,y=0.6570852521967993 a=zee,b=wye,i=8340,x=0.779538114438638,y=0.8910397798499486 a=pan,b=pan,i=8341,x=0.6773754216149304,y=0.613857099295925 a=wye,b=hat,i=8342,x=0.1458720698488648,y=0.4351692119049885 a=wye,b=wye,i=8343,x=0.818540088896837,y=0.09911450492965423 a=zee,b=hat,i=8344,x=0.1958836142058411,y=0.9176685083913124 a=zee,b=eks,i=8345,x=0.5108081370139803,y=0.8369754291473595 a=pan,b=zee,i=8346,x=0.028776659972544194,y=0.6948652507080405 a=hat,b=wye,i=8347,x=0.5681600007983288,y=0.054076468737378036 a=zee,b=wye,i=8348,x=0.803443835215121,y=0.5295807220048788 a=eks,b=pan,i=8349,x=0.9755546767865578,y=0.8799835489524848 a=eks,b=zee,i=8350,x=0.24384090338130648,y=0.6466628002800704 a=eks,b=wye,i=8351,x=0.03641540536678134,y=0.08744451304860146 a=zee,b=wye,i=8352,x=0.5212869356402663,y=0.28575619803116314 a=hat,b=hat,i=8353,x=0.055663129013605483,y=0.3787786437258225 a=eks,b=hat,i=8354,x=0.5157212090975359,y=0.8904310076101238 a=pan,b=wye,i=8355,x=0.7949456612203025,y=0.03903053598722972 a=hat,b=hat,i=8356,x=0.5915574129139735,y=0.5501666687575646 a=zee,b=eks,i=8357,x=0.7920429015988977,y=0.11834165152142673 a=pan,b=hat,i=8358,x=0.42334512731520135,y=0.6760099049563617 a=hat,b=hat,i=8359,x=0.672862622018669,y=0.9813314150345762 a=hat,b=zee,i=8360,x=0.621024648933727,y=0.20026822440380232 a=pan,b=hat,i=8361,x=0.32174647083648733,y=0.5895462222915597 a=hat,b=hat,i=8362,x=0.8239226232469129,y=0.5363672557332027 a=zee,b=hat,i=8363,x=0.2786903002001039,y=0.9687065243326013 a=eks,b=zee,i=8364,x=0.6109061549072763,y=0.9310832897288339 a=pan,b=pan,i=8365,x=0.6603069810848408,y=0.8682978196165198 a=pan,b=eks,i=8366,x=0.8584731893684808,y=0.018687872462489152 a=zee,b=eks,i=8367,x=0.4049863490547647,y=0.4247029183107722 a=wye,b=eks,i=8368,x=0.30480439273047766,y=0.48048174444338265 a=zee,b=wye,i=8369,x=0.4648458105978611,y=0.21546080520985877 a=hat,b=pan,i=8370,x=0.7696984054132116,y=0.7047713537963836 a=eks,b=zee,i=8371,x=0.37597533966420293,y=0.08724777473553502 a=zee,b=hat,i=8372,x=0.5295738751761022,y=0.49181407244012054 a=zee,b=eks,i=8373,x=0.6150222878860193,y=0.5607136634592303 a=pan,b=wye,i=8374,x=0.4528870946233897,y=0.07597161789124052 a=pan,b=zee,i=8375,x=0.5301175183103385,y=0.8601180937794322 a=hat,b=eks,i=8376,x=0.06489427108475243,y=0.40261315507492046 a=eks,b=wye,i=8377,x=0.563425411256789,y=0.9184806642610032 a=eks,b=wye,i=8378,x=0.49250711472543074,y=0.5894409813302941 a=wye,b=wye,i=8379,x=0.3106946403141324,y=0.9203740586209803 a=hat,b=pan,i=8380,x=0.46061124100732664,y=0.7117135535467465 a=pan,b=pan,i=8381,x=0.9008707927717292,y=0.3595902617465878 a=zee,b=wye,i=8382,x=0.7952836839227378,y=0.6833817456403316 a=hat,b=hat,i=8383,x=0.3984261676380828,y=0.1738533271203584 a=eks,b=wye,i=8384,x=0.11104863533882658,y=0.3751765500241939 a=hat,b=pan,i=8385,x=0.49685402919308186,y=0.07834061857462182 a=zee,b=pan,i=8386,x=0.7967208048423021,y=0.6030273368815906 a=zee,b=pan,i=8387,x=0.1807569167154014,y=0.7798562786722997 a=pan,b=zee,i=8388,x=0.019186371949722614,y=0.712217475239358 a=pan,b=eks,i=8389,x=0.7546663778603894,y=0.19055481748967162 a=eks,b=hat,i=8390,x=0.750192269695654,y=0.2196686846490249 a=hat,b=eks,i=8391,x=0.989982527715026,y=0.7339778723038518 a=hat,b=zee,i=8392,x=0.1535960092053097,y=0.48365184245511483 a=wye,b=pan,i=8393,x=0.5371021532444956,y=0.5076931407974227 a=zee,b=eks,i=8394,x=0.9938525452278908,y=0.9944136062432827 a=hat,b=eks,i=8395,x=0.5759238042621931,y=0.47928472474217776 a=wye,b=eks,i=8396,x=0.7599928088669528,y=0.44980430671729377 a=hat,b=zee,i=8397,x=0.652668800860253,y=0.4288216397914163 a=wye,b=pan,i=8398,x=0.46997259303660743,y=0.6215175533218944 a=zee,b=pan,i=8399,x=0.9401027436536872,y=0.8241834377991233 a=wye,b=pan,i=8400,x=0.09022482342468607,y=0.7117741343367263 a=eks,b=hat,i=8401,x=0.21592490518329377,y=0.33061077431647556 a=eks,b=hat,i=8402,x=0.9947356560721309,y=0.7409670678572535 a=eks,b=zee,i=8403,x=0.17272225530114538,y=0.8080858181702887 a=zee,b=eks,i=8404,x=0.3493565206043524,y=0.09054805425762869 a=pan,b=wye,i=8405,x=0.4811201910981,y=0.18742552959849512 a=eks,b=zee,i=8406,x=0.31784551409346495,y=0.7449149218097839 a=pan,b=wye,i=8407,x=0.6830421268168155,y=0.23886758610551817 a=zee,b=hat,i=8408,x=0.9200690263533268,y=0.844860872568536 a=zee,b=pan,i=8409,x=0.9273895913936498,y=0.34564042630503233 a=wye,b=eks,i=8410,x=0.8159771407795444,y=0.17344618297387282 a=hat,b=zee,i=8411,x=0.17599234652950568,y=0.8329306332017614 a=eks,b=wye,i=8412,x=0.30559437664735667,y=0.2954096578389033 a=eks,b=hat,i=8413,x=0.4338584089312799,y=0.1949819510216354 a=wye,b=eks,i=8414,x=0.522368921381192,y=0.6530064427565451 a=wye,b=eks,i=8415,x=0.40077151734215266,y=0.2875570398483994 a=zee,b=wye,i=8416,x=0.44384210652184575,y=0.34372338201033137 a=hat,b=zee,i=8417,x=0.8269419111916478,y=0.5295548379993134 a=pan,b=eks,i=8418,x=0.4380512868717956,y=0.75013896261849 a=zee,b=zee,i=8419,x=0.0075621874159564895,y=0.6690403936644571 a=pan,b=zee,i=8420,x=0.23857482485031023,y=0.7909075804228464 a=zee,b=pan,i=8421,x=0.3657309162534651,y=0.6228123699358817 a=eks,b=wye,i=8422,x=0.6050408267820816,y=0.6834071285687362 a=pan,b=eks,i=8423,x=0.926919755552011,y=0.26857376981837733 a=zee,b=pan,i=8424,x=0.8931825703051405,y=0.3852663649349296 a=wye,b=hat,i=8425,x=0.7453660507413682,y=0.13411772302924097 a=hat,b=zee,i=8426,x=0.15542783988635755,y=0.704049056631255 a=zee,b=eks,i=8427,x=0.4741772361406499,y=0.4439154258100234 a=wye,b=pan,i=8428,x=0.08174430747151484,y=0.6148589268621117 a=zee,b=pan,i=8429,x=0.5376842505367805,y=0.3213151447208863 a=pan,b=pan,i=8430,x=0.7934355146306612,y=0.2130128581792352 a=pan,b=hat,i=8431,x=0.39291331641736893,y=0.8094069164458879 a=wye,b=pan,i=8432,x=0.06348257739180108,y=0.5106796157018605 a=hat,b=zee,i=8433,x=0.5390621535629033,y=0.2952379177915695 a=zee,b=zee,i=8434,x=0.9547567491718741,y=0.12013342742496513 a=hat,b=pan,i=8435,x=0.38866184034912554,y=0.059525983951048245 a=pan,b=pan,i=8436,x=0.006149130517828727,y=0.5641604969336926 a=hat,b=eks,i=8437,x=0.5253247675869896,y=0.5165646242633789 a=hat,b=wye,i=8438,x=0.17892790253218238,y=0.7014261262330826 a=eks,b=pan,i=8439,x=0.8952428124136508,y=0.9997604543675731 a=hat,b=pan,i=8440,x=0.9697671337199946,y=0.4191895939702769 a=zee,b=hat,i=8441,x=0.22626716374612477,y=0.3072575476209706 a=zee,b=hat,i=8442,x=0.012897791583037166,y=0.45928268470148015 a=eks,b=hat,i=8443,x=0.26800839200996895,y=0.6418100107433928 a=pan,b=hat,i=8444,x=0.033038289736824766,y=0.05539460621434722 a=pan,b=hat,i=8445,x=0.3310467747539301,y=0.028084005329851225 a=hat,b=zee,i=8446,x=0.178210692330519,y=0.4596388855650022 a=hat,b=wye,i=8447,x=0.44766765422608423,y=0.2937943605301816 a=eks,b=wye,i=8448,x=0.9730885844448779,y=0.6233373493085322 a=pan,b=hat,i=8449,x=0.020061713489634814,y=0.6882480566852568 a=pan,b=wye,i=8450,x=0.2793484686069333,y=0.44070351370129646 a=pan,b=zee,i=8451,x=0.6735785887971937,y=0.2100853452380218 a=wye,b=wye,i=8452,x=0.47072648393194716,y=0.3041985693356054 a=wye,b=pan,i=8453,x=0.8533811491024729,y=0.9678356263785118 a=wye,b=eks,i=8454,x=0.586163122107279,y=0.18970011803086628 a=pan,b=hat,i=8455,x=0.5906501253369019,y=0.6123184772904339 a=zee,b=hat,i=8456,x=0.08188017117818536,y=0.5533473423116015 a=hat,b=wye,i=8457,x=0.09332068743830269,y=0.20145292592178443 a=eks,b=zee,i=8458,x=0.6797834696384837,y=0.10797028132301578 a=zee,b=wye,i=8459,x=0.6609343823302558,y=0.42546615879700533 a=zee,b=wye,i=8460,x=0.8953715335446936,y=0.11110049694702284 a=eks,b=pan,i=8461,x=0.3064924756043348,y=0.844175432052883 a=wye,b=zee,i=8462,x=0.8562111449628035,y=0.3207655114753235 a=hat,b=pan,i=8463,x=0.278695825691301,y=0.1017956876584839 a=zee,b=pan,i=8464,x=0.008481311112248147,y=0.7901219557747767 a=wye,b=hat,i=8465,x=0.9233177773701866,y=0.4551415267122566 a=hat,b=hat,i=8466,x=0.14139708059138034,y=0.10409871077285981 a=wye,b=eks,i=8467,x=0.15399092408367587,y=0.8471702381741639 a=wye,b=pan,i=8468,x=0.7612272119425962,y=0.4244931128555939 a=pan,b=pan,i=8469,x=0.1347759881116134,y=0.2455909077182844 a=zee,b=eks,i=8470,x=0.7123089216903319,y=0.12685439711002044 a=zee,b=zee,i=8471,x=0.516240721628621,y=0.6586906452113941 a=eks,b=hat,i=8472,x=0.6674728443046178,y=0.1746237628027798 a=eks,b=hat,i=8473,x=0.09764518520867405,y=0.3404811785298787 a=wye,b=hat,i=8474,x=0.022760068608759787,y=0.5809138462442031 a=wye,b=wye,i=8475,x=0.9378861915703766,y=0.2850230950144711 a=wye,b=hat,i=8476,x=0.8745714693022778,y=0.6067344417467008 a=eks,b=hat,i=8477,x=0.9309461833265447,y=0.5563876226531717 a=zee,b=eks,i=8478,x=0.26305562568234253,y=0.9564416471738901 a=zee,b=zee,i=8479,x=0.267729670683009,y=0.8948780265074652 a=wye,b=wye,i=8480,x=0.16146423266136367,y=0.06354282797551147 a=pan,b=eks,i=8481,x=0.7416513487460877,y=0.3796824390692355 a=pan,b=pan,i=8482,x=0.8910001828466121,y=0.7723030338995308 a=eks,b=zee,i=8483,x=0.20374081828155488,y=0.4241287356182083 a=eks,b=pan,i=8484,x=0.2661511616359886,y=0.5443269070761398 a=pan,b=zee,i=8485,x=0.3471597707881957,y=0.5383222143237165 a=wye,b=eks,i=8486,x=0.9422065000597399,y=0.9149504343179683 a=zee,b=hat,i=8487,x=0.8443654519702793,y=0.40835643886431905 a=hat,b=eks,i=8488,x=0.4452671926810047,y=0.11987318281596804 a=eks,b=pan,i=8489,x=0.8711743497988805,y=0.05126471215006212 a=eks,b=pan,i=8490,x=0.21893201804499796,y=0.841786373878745 a=pan,b=zee,i=8491,x=0.14450135153044963,y=0.4964690028665373 a=wye,b=zee,i=8492,x=0.30534075186128107,y=0.8304463953467625 a=wye,b=pan,i=8493,x=0.19415677927998398,y=0.36967456189817616 a=zee,b=wye,i=8494,x=0.6014391280905923,y=0.9035203941606601 a=pan,b=wye,i=8495,x=0.9535261800524316,y=0.6741780286573957 a=zee,b=hat,i=8496,x=0.621523130626718,y=0.4636815949354597 a=hat,b=hat,i=8497,x=0.3932809847758547,y=0.32342585911847266 a=zee,b=eks,i=8498,x=0.5874342193773027,y=0.07510933559358712 a=hat,b=zee,i=8499,x=0.6960433804921428,y=0.9688422831160675 a=hat,b=hat,i=8500,x=0.948682263253869,y=0.894330225437426 a=hat,b=wye,i=8501,x=0.9251536771842801,y=0.5375948099135825 a=eks,b=eks,i=8502,x=0.7145487756177015,y=0.48881971388046497 a=wye,b=hat,i=8503,x=0.43025676669473123,y=0.7342583446741899 a=zee,b=hat,i=8504,x=0.33240950818517156,y=0.08420305010182172 a=pan,b=wye,i=8505,x=0.04933447605388053,y=0.43620839928024635 a=zee,b=eks,i=8506,x=0.5644240816881203,y=0.30905524481111557 a=zee,b=hat,i=8507,x=0.8799876950191433,y=0.8626007536651286 a=eks,b=pan,i=8508,x=0.5903156727749356,y=0.08521525736448865 a=hat,b=hat,i=8509,x=0.4819653658346117,y=0.47086103178508854 a=eks,b=pan,i=8510,x=0.09221850268394138,y=0.5189296436201934 a=wye,b=hat,i=8511,x=0.5399541727181182,y=0.8444405945197476 a=hat,b=zee,i=8512,x=0.8829979498980527,y=0.22352194169557127 a=eks,b=pan,i=8513,x=0.10151458816501346,y=0.1389357491074602 a=wye,b=eks,i=8514,x=0.145836390847488,y=0.3255110732802976 a=eks,b=zee,i=8515,x=0.5023980888022918,y=0.49053802703856897 a=wye,b=pan,i=8516,x=0.4017850863763818,y=0.44971529290471857 a=pan,b=hat,i=8517,x=0.9781793338882204,y=0.021166333309513008 a=pan,b=zee,i=8518,x=0.7275818161813503,y=0.5297860907729676 a=eks,b=eks,i=8519,x=0.20825394541995124,y=0.20861255119440336 a=wye,b=pan,i=8520,x=0.8898604947131726,y=0.597970731230186 a=eks,b=wye,i=8521,x=0.3648001678117977,y=0.19557380766743293 a=pan,b=eks,i=8522,x=0.6966179778593448,y=0.6840334680719272 a=hat,b=hat,i=8523,x=0.440001403027384,y=0.45225896734383286 a=hat,b=wye,i=8524,x=0.859237452752394,y=0.1542124316389395 a=wye,b=wye,i=8525,x=0.725596832315083,y=0.22913389637676507 a=hat,b=eks,i=8526,x=0.6308328182217219,y=0.9629302966330678 a=wye,b=wye,i=8527,x=0.8115562833033729,y=0.4166596968518107 a=zee,b=pan,i=8528,x=0.1829199682476771,y=0.22085981047936964 a=hat,b=wye,i=8529,x=0.8572334709695195,y=0.7640619187795664 a=zee,b=wye,i=8530,x=0.7086732598851492,y=0.4127159537504168 a=zee,b=wye,i=8531,x=0.32354124502667125,y=0.2318309195815882 a=pan,b=hat,i=8532,x=0.9446099166208107,y=0.1614735751140206 a=pan,b=wye,i=8533,x=0.4223281734144666,y=0.10945011806361638 a=wye,b=zee,i=8534,x=0.27597556866373363,y=0.8816530467647844 a=wye,b=hat,i=8535,x=0.7402933295244709,y=0.2866045341793103 a=pan,b=eks,i=8536,x=0.23950266321443625,y=0.2173609684570218 a=wye,b=eks,i=8537,x=0.8479922856732104,y=0.646967422694876 a=pan,b=eks,i=8538,x=0.9430852556493492,y=0.8645812565386866 a=wye,b=wye,i=8539,x=0.5424202389577869,y=0.7980364309577922 a=zee,b=zee,i=8540,x=0.6480753391409477,y=0.5064183808137883 a=eks,b=hat,i=8541,x=0.38813893407288325,y=0.12561215999003672 a=zee,b=hat,i=8542,x=0.17586391865769935,y=0.610479743176282 a=pan,b=zee,i=8543,x=0.7196826298375226,y=0.21171452421116865 a=zee,b=eks,i=8544,x=0.042214602250652544,y=0.7797653758284612 a=pan,b=pan,i=8545,x=0.6623908411097427,y=0.2713858225948562 a=pan,b=eks,i=8546,x=0.8347245917805975,y=0.32344231920229216 a=eks,b=zee,i=8547,x=0.17659256136803803,y=0.2734607705288187 a=hat,b=wye,i=8548,x=0.06872905733725654,y=0.24606652109262273 a=pan,b=pan,i=8549,x=0.45957314823744033,y=0.5826268929712483 a=hat,b=zee,i=8550,x=0.5390972348460589,y=0.832817959583314 a=zee,b=zee,i=8551,x=0.9479215142295764,y=0.31091453552453974 a=pan,b=wye,i=8552,x=0.8946104855739115,y=0.2336514856632098 a=eks,b=zee,i=8553,x=0.1756747767253124,y=0.40173864656676805 a=eks,b=eks,i=8554,x=0.35767825814151055,y=0.6530934959898533 a=eks,b=eks,i=8555,x=0.9294958471853418,y=0.44323868180332826 a=hat,b=wye,i=8556,x=0.2055964313614329,y=0.7508496809797562 a=zee,b=pan,i=8557,x=0.4734760023383495,y=0.24574081766297817 a=pan,b=pan,i=8558,x=0.01915285502673958,y=0.0710080820684984 a=wye,b=hat,i=8559,x=0.36628589114868737,y=0.7546365740130917 a=pan,b=pan,i=8560,x=0.8369571665486479,y=0.6640166878609967 a=pan,b=wye,i=8561,x=0.9827417467300459,y=0.47548149029733666 a=eks,b=hat,i=8562,x=0.9263781942963408,y=0.13871044819580336 a=pan,b=pan,i=8563,x=0.9901067426610356,y=0.22526379572530497 a=zee,b=eks,i=8564,x=0.4638040598773725,y=0.34104108677898826 a=wye,b=hat,i=8565,x=0.48113198136329016,y=0.3218458306963313 a=zee,b=pan,i=8566,x=0.6161448715164534,y=0.48576149543063263 a=pan,b=hat,i=8567,x=0.7401694289092702,y=0.8501949156927895 a=wye,b=eks,i=8568,x=0.5607940018315913,y=0.6859095069187073 a=hat,b=wye,i=8569,x=0.8193761557404394,y=0.6213974290333986 a=hat,b=hat,i=8570,x=0.218909328728924,y=0.7083399518815072 a=hat,b=pan,i=8571,x=0.3374929371344728,y=0.11008369139923513 a=wye,b=zee,i=8572,x=0.5104050859274984,y=0.84636724693727 a=wye,b=pan,i=8573,x=0.304284204335561,y=0.8057462093976527 a=hat,b=pan,i=8574,x=0.1304164384473907,y=0.7795954672055522 a=eks,b=hat,i=8575,x=0.411309283136459,y=0.3134260008884213 a=hat,b=eks,i=8576,x=0.8094118504289595,y=0.3462825803661308 a=eks,b=pan,i=8577,x=0.8378950242503957,y=0.3281587348968884 a=wye,b=eks,i=8578,x=0.8671191631706497,y=0.848376644694914 a=wye,b=hat,i=8579,x=0.3629850782784485,y=0.7894725040297135 a=hat,b=pan,i=8580,x=0.20981130689562955,y=0.4981591059735274 a=wye,b=zee,i=8581,x=0.9549730188079689,y=0.16399154830304508 a=zee,b=wye,i=8582,x=0.48899851680494,y=0.05774193348030199 a=hat,b=hat,i=8583,x=0.18626492222161328,y=0.7003807702816355 a=wye,b=zee,i=8584,x=0.36453353655204557,y=0.784021739601697 a=pan,b=zee,i=8585,x=0.8620613291960066,y=0.8283882429708938 a=zee,b=wye,i=8586,x=0.6927422583943957,y=0.7194075668113131 a=hat,b=pan,i=8587,x=0.0052693086009946155,y=0.6525496192910188 a=eks,b=hat,i=8588,x=0.451596899385722,y=0.5139458108988265 a=hat,b=zee,i=8589,x=0.2926550989813841,y=0.35398173553544887 a=eks,b=wye,i=8590,x=0.9239196319519597,y=0.14591437779625882 a=hat,b=pan,i=8591,x=0.7873294723300266,y=0.5332360898832793 a=zee,b=pan,i=8592,x=0.6070860534520608,y=0.06388885983216774 a=zee,b=zee,i=8593,x=0.2617818185031422,y=0.43707681521897646 a=pan,b=hat,i=8594,x=0.6468386400257026,y=0.38978242152795606 a=zee,b=eks,i=8595,x=0.42488684401408794,y=0.2974668150516677 a=wye,b=wye,i=8596,x=0.8826796731081049,y=0.7850131924698824 a=wye,b=eks,i=8597,x=0.006860697351333767,y=0.19549617714299017 a=hat,b=zee,i=8598,x=0.07939885603933172,y=0.677412657910395 a=wye,b=zee,i=8599,x=0.7184888188080124,y=0.8697536607671493 a=hat,b=wye,i=8600,x=0.84790186953787,y=0.8684654646246722 a=eks,b=pan,i=8601,x=0.8421109599018441,y=0.16320118728086785 a=pan,b=pan,i=8602,x=0.26047864829581335,y=0.6808750509660122 a=eks,b=pan,i=8603,x=0.31611152902489204,y=0.11267222283796785 a=eks,b=wye,i=8604,x=0.06845978562369492,y=0.7238513464535802 a=pan,b=zee,i=8605,x=0.6530000366736074,y=0.10675264632456327 a=wye,b=wye,i=8606,x=0.06774372832796882,y=0.567171071395945 a=pan,b=wye,i=8607,x=0.7672859830291083,y=0.9905418229463311 a=wye,b=hat,i=8608,x=0.9486273082548317,y=0.49394451768421244 a=zee,b=wye,i=8609,x=0.8594077389671471,y=0.39612060375973734 a=eks,b=hat,i=8610,x=0.20455104503269428,y=0.8497404270304781 a=eks,b=wye,i=8611,x=0.024981210157926648,y=0.4592839770075655 a=wye,b=pan,i=8612,x=0.9729537123818344,y=0.31179500609148325 a=pan,b=pan,i=8613,x=0.9509457095140577,y=0.47129012611509 a=wye,b=hat,i=8614,x=0.9846913444886134,y=0.02710103368583705 a=zee,b=wye,i=8615,x=0.3010264833529994,y=0.7455884610745039 a=pan,b=zee,i=8616,x=0.6883510014246306,y=0.8824450569844674 a=zee,b=eks,i=8617,x=0.4515091274400017,y=0.020225254455900066 a=zee,b=hat,i=8618,x=0.8851862421614336,y=0.15621840171343437 a=pan,b=hat,i=8619,x=0.2649678025213431,y=0.39936058228129934 a=zee,b=pan,i=8620,x=0.7597636742317367,y=0.1317502476459378 a=zee,b=zee,i=8621,x=0.13218842583668222,y=0.03127532132246047 a=hat,b=eks,i=8622,x=0.49385289030098156,y=0.3427851043390181 a=eks,b=zee,i=8623,x=0.18543631005824213,y=0.19588655519979803 a=pan,b=zee,i=8624,x=0.10763314570414217,y=0.08213428508081799 a=pan,b=eks,i=8625,x=0.6882597637249681,y=0.8142971025439197 a=eks,b=hat,i=8626,x=0.6080795099100825,y=0.8728243765075873 a=eks,b=eks,i=8627,x=0.770624339998738,y=0.07831235750300036 a=hat,b=zee,i=8628,x=0.46540841676613476,y=0.10159896993531026 a=zee,b=pan,i=8629,x=0.004614760806835205,y=0.9592385994725491 a=wye,b=pan,i=8630,x=0.6807920836499873,y=0.8665298197163882 a=pan,b=eks,i=8631,x=0.6858410458377651,y=0.7631951114896744 a=eks,b=hat,i=8632,x=0.20944920807915668,y=0.17415067019098263 a=zee,b=wye,i=8633,x=0.015521112321513986,y=0.870629718512366 a=zee,b=pan,i=8634,x=0.3707685639916669,y=0.2775760739581703 a=pan,b=zee,i=8635,x=0.6292193294154781,y=0.21469655787258057 a=zee,b=zee,i=8636,x=0.6107700273929492,y=0.14811799805161463 a=zee,b=eks,i=8637,x=0.6395976874259532,y=0.9961211959529084 a=pan,b=wye,i=8638,x=0.8056202987173707,y=0.28960110672185313 a=zee,b=eks,i=8639,x=0.2524229698549828,y=0.17611542817224723 a=zee,b=zee,i=8640,x=0.08482390402218887,y=0.36890700689619493 a=eks,b=pan,i=8641,x=0.46605482768215767,y=0.07140744226571838 a=eks,b=hat,i=8642,x=0.10408804972672026,y=0.23204314849773244 a=hat,b=zee,i=8643,x=0.3955443156971198,y=0.35524981169296355 a=zee,b=hat,i=8644,x=0.7215420507798297,y=0.03391309500084805 a=eks,b=pan,i=8645,x=0.9910156023068047,y=0.21643864467214002 a=zee,b=wye,i=8646,x=0.6658298582773444,y=0.36894449402470386 a=wye,b=wye,i=8647,x=0.8282095483187364,y=0.5670959372120373 a=zee,b=hat,i=8648,x=0.0831367015182175,y=0.7424505172193498 a=pan,b=hat,i=8649,x=0.8273775847857144,y=0.849837822420028 a=hat,b=pan,i=8650,x=0.7798855565061036,y=0.6249390723014688 a=pan,b=hat,i=8651,x=0.15776823313362787,y=0.6837656369090205 a=pan,b=hat,i=8652,x=0.12499193321086843,y=0.8909115194708364 a=zee,b=hat,i=8653,x=0.623624299660614,y=0.28437293457698065 a=wye,b=hat,i=8654,x=0.4794478591209653,y=0.6149276606394762 a=zee,b=hat,i=8655,x=0.9202280019494714,y=0.43438007188126115 a=pan,b=wye,i=8656,x=0.5362020839763336,y=0.5898815059855541 a=hat,b=pan,i=8657,x=0.4419120878855759,y=0.04387616479212919 a=wye,b=pan,i=8658,x=0.37394689239227175,y=0.6932810199911174 a=hat,b=eks,i=8659,x=0.09027772061731287,y=0.5938968603299669 a=hat,b=eks,i=8660,x=0.44939114811664815,y=0.8033098658688053 a=eks,b=hat,i=8661,x=0.9412054441857266,y=0.7031238908715453 a=hat,b=wye,i=8662,x=0.026880033398767544,y=0.9570616615315023 a=pan,b=zee,i=8663,x=0.16400229878818795,y=0.7569220441881562 a=hat,b=eks,i=8664,x=0.737351462653292,y=0.008534196836191721 a=zee,b=eks,i=8665,x=0.16620817209916572,y=0.4183421439519892 a=eks,b=eks,i=8666,x=0.2605898276210701,y=0.9107791581080643 a=pan,b=eks,i=8667,x=0.16483965969504477,y=0.008847013569707962 a=hat,b=hat,i=8668,x=0.5758275186132803,y=0.4376894563403356 a=wye,b=eks,i=8669,x=0.30935622306150556,y=0.5406996947409577 a=hat,b=eks,i=8670,x=0.6115682118401596,y=0.709847191339046 a=hat,b=pan,i=8671,x=0.5876224326167997,y=0.655751406127023 a=pan,b=pan,i=8672,x=0.7383754184207463,y=0.4204832285810981 a=wye,b=wye,i=8673,x=0.9992635865771493,y=0.4216138590799462 a=zee,b=wye,i=8674,x=0.30144308355523053,y=0.985811453648491 a=hat,b=eks,i=8675,x=0.7901168710228115,y=0.02854873755150633 a=wye,b=zee,i=8676,x=0.458348366941119,y=0.0654065118924938 a=pan,b=eks,i=8677,x=0.576018794663166,y=0.021732489132554877 a=wye,b=zee,i=8678,x=0.051768914692817525,y=0.9811531769362358 a=wye,b=eks,i=8679,x=0.8714866001900081,y=0.5074064697197682 a=pan,b=zee,i=8680,x=0.8573300862564848,y=0.8110639386847459 a=eks,b=wye,i=8681,x=0.9176784134359273,y=0.2764422061252122 a=hat,b=eks,i=8682,x=0.8690529123645934,y=0.9535269156601301 a=wye,b=zee,i=8683,x=0.6350123840910076,y=0.6382912385391265 a=hat,b=eks,i=8684,x=0.6215103356564846,y=0.14887437241814006 a=zee,b=wye,i=8685,x=0.584126263404004,y=0.7538247769853159 a=wye,b=wye,i=8686,x=0.43551003027785373,y=0.3236501977657479 a=wye,b=hat,i=8687,x=0.8880686097383739,y=0.6330150426943297 a=wye,b=zee,i=8688,x=0.7635796389205769,y=0.2638125019378026 a=zee,b=wye,i=8689,x=0.3761531727653552,y=0.9022543136929991 a=wye,b=eks,i=8690,x=0.08913417768338172,y=0.9531306393247156 a=eks,b=pan,i=8691,x=0.9943932359314775,y=0.9072697301052425 a=eks,b=zee,i=8692,x=0.5457000332265722,y=0.4837579979584361 a=zee,b=pan,i=8693,x=0.4765529256302863,y=0.7047109057288847 a=eks,b=hat,i=8694,x=0.742421569895559,y=0.766958291324268 a=zee,b=eks,i=8695,x=0.23665653193040737,y=0.2743956071876914 a=wye,b=wye,i=8696,x=0.2888070230684594,y=0.9935631592216062 a=hat,b=zee,i=8697,x=0.1507630405832039,y=0.8444262680025181 a=zee,b=pan,i=8698,x=0.9647755452332127,y=0.3090467608406059 a=wye,b=wye,i=8699,x=0.18194655224399203,y=0.9052438757034091 a=pan,b=wye,i=8700,x=0.849446996637848,y=0.7731446643107283 a=pan,b=pan,i=8701,x=0.6101087522261474,y=0.5619798733118421 a=eks,b=eks,i=8702,x=0.2860963732537126,y=0.5616399941521609 a=hat,b=hat,i=8703,x=0.5764546868259887,y=0.5585165186187631 a=wye,b=hat,i=8704,x=0.5825019915262796,y=0.7509760878946939 a=wye,b=hat,i=8705,x=0.2608869277824021,y=0.18054497056171448 a=hat,b=hat,i=8706,x=0.44933047132208914,y=0.2870706030629274 a=eks,b=eks,i=8707,x=0.5126396112669858,y=0.7451349937567859 a=wye,b=hat,i=8708,x=0.9654821455735791,y=0.4030015908373886 a=zee,b=hat,i=8709,x=0.12072257756980032,y=0.6331889132322128 a=eks,b=eks,i=8710,x=0.23179579194118272,y=0.2720693323497807 a=pan,b=hat,i=8711,x=0.2745931092811078,y=0.8275977373766176 a=zee,b=zee,i=8712,x=0.16788282836102386,y=0.8552502071604215 a=hat,b=eks,i=8713,x=0.17690637256217367,y=0.7529327963215693 a=zee,b=zee,i=8714,x=0.871119409753738,y=0.8880243168317828 a=pan,b=zee,i=8715,x=0.06440670061693166,y=0.7697496461773731 a=pan,b=zee,i=8716,x=0.010723117383408809,y=0.3256007021073345 a=pan,b=zee,i=8717,x=0.6961198318349152,y=0.46776215866881776 a=zee,b=pan,i=8718,x=0.5501338319067216,y=0.4585993087188408 a=pan,b=pan,i=8719,x=0.8266651999765658,y=0.7457257758170397 a=wye,b=pan,i=8720,x=0.6983669783370258,y=0.18024570857490163 a=zee,b=hat,i=8721,x=0.18186817750471462,y=0.28188928351608533 a=eks,b=wye,i=8722,x=0.1796424637908317,y=0.08845716187743458 a=wye,b=zee,i=8723,x=0.18784777106560657,y=0.8680814485784762 a=wye,b=pan,i=8724,x=0.7535113517713046,y=0.06635813172501992 a=wye,b=wye,i=8725,x=0.06677961979475944,y=0.8150664034109032 a=pan,b=pan,i=8726,x=0.09110059809025017,y=0.634882036803602 a=eks,b=eks,i=8727,x=0.07770263986306736,y=0.6339732062069904 a=hat,b=zee,i=8728,x=0.1222023744265569,y=0.36047803182555027 a=hat,b=wye,i=8729,x=0.38616984963682455,y=0.6665706605579002 a=eks,b=wye,i=8730,x=0.03564554727285307,y=0.775754590350077 a=wye,b=zee,i=8731,x=0.35713870378290125,y=0.1671267891620788 a=hat,b=zee,i=8732,x=0.5996953011640668,y=0.62340072229723 a=zee,b=hat,i=8733,x=0.2345433105033039,y=0.10071782641377514 a=zee,b=hat,i=8734,x=0.301665687569308,y=0.3630510637781915 a=hat,b=pan,i=8735,x=0.47526687158292913,y=0.22747265846322517 a=pan,b=eks,i=8736,x=0.5793971065628433,y=0.6408359296127717 a=wye,b=zee,i=8737,x=0.6210812266919626,y=0.8036316255685408 a=pan,b=wye,i=8738,x=0.15856470090745411,y=0.07442697669748699 a=hat,b=pan,i=8739,x=0.6747028428344869,y=0.05546525602545038 a=zee,b=zee,i=8740,x=0.7182904394926175,y=0.7258491677192344 a=wye,b=hat,i=8741,x=0.050796016954941514,y=0.2827688297213582 a=pan,b=hat,i=8742,x=0.536032482315453,y=0.7201071015346874 a=pan,b=hat,i=8743,x=0.23212794392337244,y=0.9962892434331647 a=zee,b=hat,i=8744,x=0.15548275830576097,y=0.5597164039669866 a=pan,b=zee,i=8745,x=0.053519007571192656,y=0.5880763072120166 a=wye,b=hat,i=8746,x=0.4039984554038578,y=0.6360272605402368 a=eks,b=zee,i=8747,x=0.12768838944842187,y=0.7694103697647696 a=pan,b=pan,i=8748,x=0.0504766925956035,y=0.1711562295167237 a=eks,b=eks,i=8749,x=0.43854684004790123,y=0.28682577788725483 a=zee,b=zee,i=8750,x=0.37684822924899897,y=0.6896149386123666 a=wye,b=hat,i=8751,x=0.06509359888339494,y=0.177636855552877 a=eks,b=pan,i=8752,x=0.09242339085575646,y=0.32343297889748723 a=wye,b=eks,i=8753,x=0.9973914329853147,y=0.9693279929688737 a=hat,b=eks,i=8754,x=0.370565044079066,y=0.009819699195025788 a=zee,b=pan,i=8755,x=0.8202332245450998,y=0.5597758930454603 a=eks,b=hat,i=8756,x=0.272322951811926,y=0.145224793410337 a=pan,b=eks,i=8757,x=0.10217035846864753,y=0.8463196056537164 a=zee,b=zee,i=8758,x=0.9667659565271899,y=0.5623772828898473 a=zee,b=hat,i=8759,x=0.03620010006756513,y=0.9300101887480641 a=pan,b=hat,i=8760,x=0.7972381410312142,y=0.3059551797120732 a=wye,b=wye,i=8761,x=0.6603209295504429,y=0.5459240190405134 a=zee,b=hat,i=8762,x=0.8972125526805521,y=0.12801932204763655 a=hat,b=eks,i=8763,x=0.08300923681882266,y=0.3326688755194035 a=pan,b=hat,i=8764,x=0.19654713910488297,y=0.9815477858639055 a=pan,b=wye,i=8765,x=0.7403998857752021,y=0.9560094148670492 a=wye,b=zee,i=8766,x=0.9449147393082301,y=0.6732722707943484 a=pan,b=hat,i=8767,x=0.994940403256145,y=0.6992814067153592 a=pan,b=eks,i=8768,x=0.9628487500260046,y=0.2914751295622189 a=zee,b=hat,i=8769,x=0.04870919701921694,y=0.9387243884055145 a=pan,b=eks,i=8770,x=0.6298376152653163,y=0.5214339719227405 a=pan,b=hat,i=8771,x=0.05539194558306315,y=0.6044013107155554 a=wye,b=zee,i=8772,x=0.754483186364135,y=0.9567133222811894 a=eks,b=zee,i=8773,x=0.7529293581975827,y=0.2684999525860745 a=wye,b=eks,i=8774,x=0.3998473670297119,y=0.07393345230936454 a=wye,b=zee,i=8775,x=0.15521659769175922,y=0.2873998987631695 a=wye,b=zee,i=8776,x=0.5452491171201722,y=0.050076673250635584 a=pan,b=eks,i=8777,x=0.5238633710326642,y=0.019941096658736224 a=zee,b=wye,i=8778,x=0.7616404527480684,y=0.8158713089665471 a=hat,b=wye,i=8779,x=0.600461848950472,y=0.5399884947809014 a=eks,b=zee,i=8780,x=0.5925751420631895,y=0.6690795493308443 a=pan,b=zee,i=8781,x=0.9383737724522293,y=0.7748193135876428 a=pan,b=pan,i=8782,x=0.49034005500698785,y=0.80873396896634 a=pan,b=hat,i=8783,x=0.5183921754082103,y=0.11862486021555674 a=pan,b=zee,i=8784,x=0.8772019876864762,y=0.1521542632208297 a=zee,b=hat,i=8785,x=0.6464009753631575,y=0.6923362770119578 a=pan,b=hat,i=8786,x=0.16224717165693037,y=0.7476369567248122 a=eks,b=pan,i=8787,x=0.9541941134181783,y=0.39739249865003967 a=hat,b=zee,i=8788,x=0.2642687755038374,y=0.10859080810253674 a=zee,b=wye,i=8789,x=0.789145574444134,y=0.24974632777903916 a=wye,b=hat,i=8790,x=0.8223311948449997,y=0.5130414892803776 a=eks,b=hat,i=8791,x=0.6818394894701235,y=0.7849388490947223 a=eks,b=zee,i=8792,x=0.2729303223525674,y=0.8719161161689617 a=wye,b=zee,i=8793,x=0.9343780609627443,y=0.05352320375085495 a=pan,b=pan,i=8794,x=0.9586567458589967,y=0.919190837846641 a=zee,b=eks,i=8795,x=0.27124185699244374,y=0.6001949173753478 a=wye,b=wye,i=8796,x=0.534583514132678,y=0.7819265778012215 a=pan,b=hat,i=8797,x=0.4497161697366787,y=0.026741184746243984 a=zee,b=eks,i=8798,x=0.8167620532839222,y=0.8279530206710328 a=wye,b=eks,i=8799,x=0.8471762978662517,y=0.6353417536536258 a=zee,b=hat,i=8800,x=0.4068819800794493,y=0.6647858452666756 a=hat,b=hat,i=8801,x=0.017219020782623162,y=0.1624665172562224 a=zee,b=wye,i=8802,x=0.5608298870065771,y=0.5058672809947269 a=eks,b=pan,i=8803,x=0.4433211231528589,y=0.2838323939048415 a=hat,b=wye,i=8804,x=0.015128205072592937,y=0.9382969714739184 a=wye,b=zee,i=8805,x=0.41033971377507983,y=0.8903811666103645 a=wye,b=pan,i=8806,x=0.08327290658651032,y=0.2550251881973168 a=pan,b=eks,i=8807,x=0.339222785155762,y=0.1751435242352425 a=zee,b=zee,i=8808,x=0.4820472727787015,y=0.017092345316797486 a=eks,b=pan,i=8809,x=0.8772675192449497,y=0.09405065417217506 a=eks,b=zee,i=8810,x=0.4802724150878229,y=0.750654827698973 a=wye,b=eks,i=8811,x=0.27073265506551913,y=0.4615910666569303 a=eks,b=eks,i=8812,x=0.07160623229882901,y=0.12458111194427568 a=pan,b=hat,i=8813,x=0.7877743286534948,y=0.8757926217967861 a=wye,b=pan,i=8814,x=0.8234802661475596,y=0.47740951215608096 a=zee,b=wye,i=8815,x=0.7068610202368742,y=0.7545170669582756 a=eks,b=wye,i=8816,x=0.42511667279750365,y=0.7472491957445023 a=hat,b=pan,i=8817,x=0.8982686805610952,y=0.41213109883329235 a=eks,b=eks,i=8818,x=0.0006917972627396018,y=0.9154889032308835 a=zee,b=hat,i=8819,x=0.8077899694017853,y=0.9694410429631465 a=wye,b=wye,i=8820,x=0.5128274083278233,y=0.1925061634264612 a=wye,b=hat,i=8821,x=0.48953047787044934,y=0.9309635789095997 a=wye,b=wye,i=8822,x=0.5093848419146877,y=0.7499112900526392 a=wye,b=zee,i=8823,x=0.7521935072400413,y=0.8768924705259773 a=zee,b=wye,i=8824,x=0.17855149771491108,y=0.09366701006513045 a=wye,b=wye,i=8825,x=0.9175145724829686,y=0.733177971733118 a=wye,b=pan,i=8826,x=0.7781119220016439,y=0.5568374194244214 a=pan,b=pan,i=8827,x=0.44994539245047094,y=0.010072546778717273 a=zee,b=pan,i=8828,x=0.8974531793622843,y=0.6299514776398363 a=zee,b=hat,i=8829,x=0.03029077173623984,y=0.8996371412607174 a=pan,b=zee,i=8830,x=0.9250374016750887,y=0.21170234142774214 a=hat,b=wye,i=8831,x=0.2886019989070704,y=0.8746854292394444 a=eks,b=zee,i=8832,x=0.8201188808616761,y=0.7163833146418705 a=hat,b=pan,i=8833,x=0.4781516414425546,y=0.6243657645336355 a=eks,b=pan,i=8834,x=0.30019128687682395,y=0.6215357926899209 a=zee,b=pan,i=8835,x=0.28411203290841713,y=0.880506908200805 a=zee,b=hat,i=8836,x=0.12727398470205364,y=0.6861531204026988 a=pan,b=pan,i=8837,x=0.6585419955018336,y=0.10473471849452742 a=pan,b=hat,i=8838,x=0.4461825537060876,y=0.3925097922631463 a=wye,b=pan,i=8839,x=0.4002040179552746,y=0.24694949779242004 a=hat,b=hat,i=8840,x=0.2591704876662355,y=0.8145986246056769 a=wye,b=pan,i=8841,x=0.38972915905002337,y=0.5603702988216951 a=pan,b=eks,i=8842,x=0.9266082306477657,y=0.5285007006129709 a=hat,b=hat,i=8843,x=0.37872486721691034,y=0.07532645476050148 a=hat,b=hat,i=8844,x=0.0685259642260373,y=0.00776256940978215 a=pan,b=wye,i=8845,x=0.24303613366881238,y=0.13056160975299724 a=wye,b=eks,i=8846,x=0.9676348576302707,y=0.5106172718000012 a=wye,b=pan,i=8847,x=0.19766194187411346,y=0.6722053323380418 a=hat,b=eks,i=8848,x=0.18275312440508307,y=0.9764304146821695 a=pan,b=zee,i=8849,x=0.6264364311275306,y=0.9563714459175713 a=hat,b=eks,i=8850,x=0.8735595733663851,y=0.5106033973424751 a=hat,b=wye,i=8851,x=0.8277257237676418,y=0.38220594008932074 a=pan,b=eks,i=8852,x=0.5590462379202299,y=0.07402923834402797 a=wye,b=wye,i=8853,x=0.6030890949494638,y=0.024154261693530632 a=hat,b=wye,i=8854,x=0.9304995637638334,y=0.6319621895624278 a=eks,b=zee,i=8855,x=0.3608005376988722,y=0.9009155444417519 a=pan,b=hat,i=8856,x=0.31871112874254814,y=0.5214655695969946 a=pan,b=eks,i=8857,x=0.31972354861237895,y=0.7327700228563248 a=pan,b=zee,i=8858,x=0.7128306783608381,y=0.811303686462451 a=pan,b=wye,i=8859,x=0.9081121983690633,y=0.5712022128090308 a=eks,b=pan,i=8860,x=0.7438203192490614,y=0.28338323389587416 a=wye,b=hat,i=8861,x=0.39486469148361836,y=0.49780490997274707 a=wye,b=wye,i=8862,x=0.7736663364376681,y=0.5874621525618737 a=zee,b=pan,i=8863,x=0.7598351732843991,y=0.16402301245225137 a=eks,b=eks,i=8864,x=0.8345356283222535,y=0.7112462031216813 a=zee,b=eks,i=8865,x=0.9403263935444554,y=0.07461363367845775 a=zee,b=hat,i=8866,x=0.6732648337974786,y=0.9333019394438807 a=hat,b=zee,i=8867,x=0.4989779025451857,y=0.9076709264537641 a=hat,b=hat,i=8868,x=0.016222381142314224,y=0.02090746494690887 a=wye,b=hat,i=8869,x=0.2676602361580831,y=0.8275937851537348 a=wye,b=zee,i=8870,x=0.5771716563773662,y=0.3486638387791615 a=wye,b=zee,i=8871,x=0.8326977668224673,y=0.042247928422714076 a=eks,b=pan,i=8872,x=0.46276796521083263,y=0.937222119081556 a=zee,b=wye,i=8873,x=0.12465164468565504,y=0.4217551436223611 a=hat,b=wye,i=8874,x=0.8578330113744658,y=0.5967910955072325 a=wye,b=pan,i=8875,x=0.9700008052690227,y=0.5495480079950836 a=pan,b=hat,i=8876,x=0.14594726337052932,y=0.7756413451049061 a=wye,b=eks,i=8877,x=0.21506616709063353,y=0.028566538362973737 a=hat,b=zee,i=8878,x=0.8446285361381319,y=0.08785108055341062 a=zee,b=pan,i=8879,x=0.8504405312776793,y=0.6033489024089217 a=wye,b=wye,i=8880,x=0.47595916238031677,y=0.4288837512249194 a=eks,b=zee,i=8881,x=0.45213579710907703,y=0.08748650555497739 a=zee,b=eks,i=8882,x=0.1414462883645664,y=0.9081746803701161 a=hat,b=eks,i=8883,x=0.7348243939209332,y=0.8605568412288824 a=pan,b=hat,i=8884,x=0.7853971344779014,y=0.004051486898246415 a=zee,b=wye,i=8885,x=0.41758576449425977,y=0.14627581317514182 a=wye,b=hat,i=8886,x=0.9280339369715974,y=0.9297205006311496 a=zee,b=hat,i=8887,x=0.7347475121162593,y=0.03993326351233917 a=zee,b=zee,i=8888,x=0.8278911862966036,y=0.4003238193899692 a=zee,b=zee,i=8889,x=0.06545001204265088,y=0.3004515856834621 a=eks,b=zee,i=8890,x=0.27962535290039825,y=0.44335679461319166 a=hat,b=hat,i=8891,x=0.019843222350497625,y=0.5313009507007954 a=pan,b=eks,i=8892,x=0.3852530201110397,y=0.06941698785655903 a=pan,b=eks,i=8893,x=0.2977417830889273,y=0.6332182300346895 a=zee,b=eks,i=8894,x=0.1966531651167187,y=0.4688240979189081 a=wye,b=hat,i=8895,x=0.22463107582925324,y=0.4161186278077874 a=eks,b=zee,i=8896,x=0.22809184804735871,y=0.4707492036142362 a=hat,b=eks,i=8897,x=0.4271783841263873,y=0.5474566889867322 a=hat,b=zee,i=8898,x=0.45420946781919536,y=0.10354482418357991 a=zee,b=pan,i=8899,x=0.1500424792671291,y=0.3904357922605537 a=eks,b=hat,i=8900,x=0.4705695658454211,y=0.13058529889276693 a=wye,b=eks,i=8901,x=0.7851072833003859,y=0.010949059596507271 a=eks,b=pan,i=8902,x=0.36598892555347484,y=0.8692921887688625 a=zee,b=eks,i=8903,x=0.4231582011204885,y=0.4821489267549405 a=eks,b=wye,i=8904,x=0.27693517497385267,y=0.35861877550118093 a=eks,b=hat,i=8905,x=0.2021072148174844,y=0.5782529159344267 a=pan,b=eks,i=8906,x=0.6095360635614762,y=0.15147456052535202 a=pan,b=eks,i=8907,x=0.730295298034919,y=0.2551125391698271 a=zee,b=zee,i=8908,x=0.3638375152320661,y=0.5373463704499434 a=pan,b=hat,i=8909,x=0.5579467202447957,y=0.1630566373150174 a=hat,b=pan,i=8910,x=0.49610253645583846,y=0.21986829070394298 a=eks,b=wye,i=8911,x=0.09558215825789063,y=0.018958306464913255 a=zee,b=eks,i=8912,x=0.5946765644498425,y=0.4861950247721053 a=zee,b=wye,i=8913,x=0.7753872326222572,y=0.130388837660953 a=zee,b=hat,i=8914,x=0.8820731335941235,y=0.12986802677134568 a=hat,b=zee,i=8915,x=0.4040203950712935,y=0.04965833346589221 a=eks,b=wye,i=8916,x=0.46871698272105,y=0.3462467467139262 a=wye,b=hat,i=8917,x=0.5720192464320304,y=0.0819820791306417 a=wye,b=wye,i=8918,x=0.8054579412182167,y=0.3836759639818865 a=eks,b=hat,i=8919,x=0.4742484069291977,y=0.2514827712591855 a=pan,b=wye,i=8920,x=0.733610226156712,y=0.5651397506818968 a=hat,b=zee,i=8921,x=0.5565613081265703,y=0.9540215346587051 a=pan,b=pan,i=8922,x=0.270663413379612,y=0.4701176631611145 a=pan,b=zee,i=8923,x=0.1853923248765008,y=0.0022929560982657415 a=zee,b=pan,i=8924,x=0.7050433080915809,y=0.4961082324924917 a=eks,b=wye,i=8925,x=0.5609329671328473,y=0.589599688677612 a=pan,b=eks,i=8926,x=0.5899990569564478,y=0.9670305978679095 a=eks,b=zee,i=8927,x=0.6589844496396701,y=0.07234525669075342 a=hat,b=wye,i=8928,x=0.9559160182621979,y=0.2564401800691153 a=zee,b=wye,i=8929,x=0.7910634287616417,y=0.5832583369417834 a=pan,b=eks,i=8930,x=0.9200311370773863,y=0.8086516025019609 a=zee,b=eks,i=8931,x=0.7726442152731748,y=0.3006011490460859 a=pan,b=pan,i=8932,x=0.9200924471782158,y=0.30104452372640955 a=zee,b=zee,i=8933,x=0.4454093296017202,y=0.3284583037994141 a=wye,b=eks,i=8934,x=0.42726184573719983,y=0.9963781447633139 a=zee,b=eks,i=8935,x=0.4486952558039746,y=0.4130427561178419 a=hat,b=eks,i=8936,x=0.9755076232964625,y=0.6362818073430646 a=zee,b=zee,i=8937,x=0.5683636673391735,y=0.329434458320802 a=zee,b=hat,i=8938,x=0.35289211042725366,y=0.7543520598626876 a=hat,b=pan,i=8939,x=0.8511623725969789,y=0.6164456458973154 a=wye,b=wye,i=8940,x=0.9818963757219575,y=0.5755972292005318 a=hat,b=hat,i=8941,x=0.7568298583150284,y=0.5846179373919896 a=eks,b=hat,i=8942,x=0.601894549758784,y=0.13992074533051124 a=eks,b=hat,i=8943,x=0.35887195487544743,y=0.6953516641971523 a=zee,b=hat,i=8944,x=0.8805088303643233,y=0.08493946930957796 a=eks,b=hat,i=8945,x=0.7539371156991909,y=0.4116992595762401 a=wye,b=hat,i=8946,x=0.16141868331242304,y=0.9136362828702729 a=eks,b=hat,i=8947,x=0.8483324196518135,y=0.6158053719777993 a=eks,b=pan,i=8948,x=0.5318875109400665,y=0.8230182723036877 a=zee,b=zee,i=8949,x=0.4716296186751222,y=0.8472833535757873 a=zee,b=wye,i=8950,x=0.2790928413033852,y=0.0772468110330039 a=wye,b=eks,i=8951,x=0.9027943823162313,y=0.6124436018843183 a=pan,b=wye,i=8952,x=0.39603795348082305,y=0.7719031240961284 a=eks,b=hat,i=8953,x=0.8716876316900987,y=0.20148989402965545 a=zee,b=eks,i=8954,x=0.47758220480911473,y=0.2664181870815133 a=hat,b=pan,i=8955,x=0.3375565375177234,y=0.19102233314969186 a=hat,b=wye,i=8956,x=0.44049488264331627,y=0.5092306826033091 a=eks,b=eks,i=8957,x=0.7047805468534891,y=0.5946651385930218 a=pan,b=pan,i=8958,x=0.6519485361202326,y=0.7030912337766829 a=hat,b=eks,i=8959,x=0.6713731052940981,y=0.6013560927295543 a=hat,b=pan,i=8960,x=0.9417167187642326,y=0.8026299128777213 a=zee,b=wye,i=8961,x=0.8154052031095614,y=0.6481399972215665 a=pan,b=wye,i=8962,x=0.0914057435253639,y=0.10822318947000709 a=pan,b=hat,i=8963,x=0.3046680167824908,y=0.09348404024830137 a=zee,b=zee,i=8964,x=0.6189408278256606,y=0.8433159445563726 a=eks,b=hat,i=8965,x=0.958051223919934,y=0.5081338063861043 a=wye,b=eks,i=8966,x=0.8530691152394455,y=0.8692728927718893 a=hat,b=eks,i=8967,x=0.8372819315874948,y=0.8861340588817578 a=wye,b=zee,i=8968,x=0.9977506774202527,y=0.9679468301172027 a=hat,b=pan,i=8969,x=0.45963913428927994,y=0.2847833031004139 a=pan,b=eks,i=8970,x=0.34327965136688565,y=0.2691645574062619 a=eks,b=hat,i=8971,x=0.24298535978329028,y=0.6326328755167427 a=hat,b=zee,i=8972,x=0.5786862872644059,y=0.8671986650119898 a=wye,b=hat,i=8973,x=0.7183329442429014,y=0.3363191065286383 a=wye,b=pan,i=8974,x=0.551888889672068,y=0.3209850549321359 a=pan,b=pan,i=8975,x=0.30697964139250933,y=0.08659671798153756 a=zee,b=eks,i=8976,x=0.9556339095055809,y=0.021482277034970076 a=eks,b=hat,i=8977,x=0.3585667547454152,y=0.7507818063628751 a=eks,b=hat,i=8978,x=0.5232916500187303,y=0.8753848427459924 a=hat,b=wye,i=8979,x=0.002400498001248641,y=0.5428314927562883 a=wye,b=eks,i=8980,x=0.31030792190565804,y=0.851109380675088 a=hat,b=eks,i=8981,x=0.8950141191932938,y=0.3343291380416574 a=wye,b=zee,i=8982,x=0.007647040296205221,y=0.5252318459052353 a=eks,b=hat,i=8983,x=0.6822585854384956,y=0.009453423471399658 a=zee,b=pan,i=8984,x=0.6987813603715117,y=0.5232757984191948 a=hat,b=wye,i=8985,x=0.932024395968463,y=0.9447580630208217 a=zee,b=zee,i=8986,x=0.8552570190589601,y=0.08815519942713801 a=wye,b=pan,i=8987,x=0.27750649660566373,y=0.76526956752658 a=pan,b=hat,i=8988,x=0.5404886782798238,y=0.5374270296539031 a=wye,b=hat,i=8989,x=0.9762152572727496,y=0.8712434910014083 a=wye,b=hat,i=8990,x=0.2691586619417575,y=0.5122780764115732 a=pan,b=eks,i=8991,x=0.5236344484593898,y=0.7020390430173928 a=zee,b=zee,i=8992,x=0.285347240060405,y=0.2493240966526331 a=zee,b=wye,i=8993,x=0.7119318558771737,y=0.8612125817012293 a=pan,b=eks,i=8994,x=0.6358666072344865,y=0.930679583655016 a=eks,b=pan,i=8995,x=0.43393822544853966,y=0.5656571369668376 a=eks,b=zee,i=8996,x=0.014997169280220546,y=0.38924624193859947 a=pan,b=eks,i=8997,x=0.006957705982631457,y=0.27329586967444996 a=zee,b=wye,i=8998,x=0.45799438726799335,y=0.020705027471035087 a=wye,b=wye,i=8999,x=0.18512302956813365,y=0.7121523046316812 a=hat,b=eks,i=9000,x=0.33727508102114134,y=0.13582122939201124 a=eks,b=eks,i=9001,x=0.517121854692058,y=0.308749201053908 a=hat,b=zee,i=9002,x=0.07358032166019501,y=0.736123828569227 a=zee,b=hat,i=9003,x=0.004824023551166401,y=0.759916663671451 a=zee,b=eks,i=9004,x=0.4893113819292234,y=0.23390278210191928 a=hat,b=eks,i=9005,x=0.45618459558425717,y=0.8962930076422373 a=zee,b=hat,i=9006,x=0.6562108769673498,y=0.13991018518940446 a=zee,b=zee,i=9007,x=0.3650427655416524,y=0.8531673941547171 a=zee,b=wye,i=9008,x=0.8282941376563813,y=0.9889370827954176 a=pan,b=pan,i=9009,x=0.3878236858466175,y=0.06714068514516147 a=hat,b=hat,i=9010,x=0.2007850497817364,y=0.6400219844960209 a=wye,b=wye,i=9011,x=0.6252481085403859,y=0.203071024510721 a=wye,b=hat,i=9012,x=0.4675098280645633,y=0.9904823978688722 a=zee,b=pan,i=9013,x=0.6305143660449302,y=0.710245374097503 a=zee,b=wye,i=9014,x=0.16891869382531022,y=0.37574058303798785 a=pan,b=wye,i=9015,x=0.3220094028213596,y=0.4839478151356543 a=eks,b=eks,i=9016,x=0.5800740825749267,y=0.8910261945783475 a=zee,b=hat,i=9017,x=0.9502641304019075,y=0.8396710982351069 a=pan,b=eks,i=9018,x=0.4764608908539697,y=0.4728942258779697 a=hat,b=wye,i=9019,x=0.272865007065651,y=0.41472685232133355 a=eks,b=hat,i=9020,x=0.03877794357017561,y=0.8924528458892764 a=eks,b=wye,i=9021,x=0.7714689461624145,y=0.7234215610234059 a=eks,b=eks,i=9022,x=0.8213647586189171,y=0.8993719170687399 a=zee,b=zee,i=9023,x=0.7890585709155626,y=0.5099043493783608 a=zee,b=wye,i=9024,x=0.3645469383907922,y=0.7980710103585312 a=eks,b=pan,i=9025,x=0.7614330300379404,y=0.039049698191956694 a=hat,b=zee,i=9026,x=0.8364001741754985,y=0.8590079093968295 a=pan,b=hat,i=9027,x=0.142586581614627,y=0.8402014883489196 a=zee,b=wye,i=9028,x=0.5239151547368636,y=0.8242755070656802 a=hat,b=eks,i=9029,x=0.8128575668904885,y=0.395268947973739 a=zee,b=pan,i=9030,x=0.5793285227205369,y=0.8038160807198467 a=zee,b=wye,i=9031,x=0.42904790956591343,y=0.292783754196035 a=zee,b=eks,i=9032,x=0.6146666934752367,y=0.26568169357263305 a=eks,b=eks,i=9033,x=0.6937567726575595,y=0.9601490785081487 a=zee,b=wye,i=9034,x=0.7679588189607225,y=0.5157794038228849 a=zee,b=eks,i=9035,x=0.8214778175820499,y=0.760903040561442 a=hat,b=wye,i=9036,x=0.13026398297350839,y=0.8705769782903738 a=pan,b=wye,i=9037,x=0.5665532246879906,y=0.7400695598140006 a=wye,b=pan,i=9038,x=0.565327438099348,y=0.231520424905162 a=hat,b=zee,i=9039,x=0.5300522543665926,y=0.23348061445665524 a=wye,b=zee,i=9040,x=0.6003398441074326,y=0.39489635735776574 a=wye,b=hat,i=9041,x=0.983147388463674,y=0.6432444380950916 a=wye,b=zee,i=9042,x=0.555504813496403,y=0.005666564490671155 a=eks,b=pan,i=9043,x=0.5141737191526409,y=0.23406402155139128 a=pan,b=eks,i=9044,x=0.4915948295461785,y=0.5674330258517061 a=pan,b=eks,i=9045,x=0.4125775873836637,y=0.9745899732717427 a=zee,b=wye,i=9046,x=0.27009823817926015,y=0.5931288546151294 a=hat,b=hat,i=9047,x=0.49305007094314124,y=0.3988521392673088 a=zee,b=wye,i=9048,x=0.852593383706857,y=0.13271142657885082 a=pan,b=wye,i=9049,x=0.10903067000808575,y=0.6457675593887455 a=pan,b=eks,i=9050,x=0.9286228908161963,y=0.7128664838636729 a=eks,b=zee,i=9051,x=0.7368149289050578,y=0.040114995641035156 a=pan,b=eks,i=9052,x=0.9883016421626661,y=0.836414097002929 a=eks,b=eks,i=9053,x=0.578258852447845,y=0.6483953013399163 a=pan,b=eks,i=9054,x=0.4581912096837616,y=0.2396747725609628 a=pan,b=zee,i=9055,x=0.3910891811342043,y=0.3060677650909158 a=zee,b=eks,i=9056,x=0.1257667798355191,y=0.22523050330447225 a=wye,b=wye,i=9057,x=0.8018497438432275,y=0.13069916829224115 a=eks,b=zee,i=9058,x=0.46306509283004527,y=0.6479906691686209 a=hat,b=zee,i=9059,x=0.8032276523393308,y=0.5895573796523289 a=zee,b=wye,i=9060,x=0.9489845382435659,y=0.7186985210470157 a=wye,b=eks,i=9061,x=0.5843515776382836,y=0.09689548652828073 a=eks,b=zee,i=9062,x=0.29235718302362745,y=0.8058919599706711 a=zee,b=eks,i=9063,x=0.3746671187448585,y=0.7104834374120668 a=pan,b=pan,i=9064,x=0.957433552072592,y=0.612273185217601 a=pan,b=pan,i=9065,x=0.9206660995409818,y=0.6388548120920611 a=hat,b=eks,i=9066,x=0.7938077850540011,y=0.9840395711931128 a=eks,b=eks,i=9067,x=0.7586156840742447,y=0.9657635310428576 a=zee,b=wye,i=9068,x=0.03525325620506059,y=0.20286396861407563 a=wye,b=wye,i=9069,x=0.9854601376745921,y=0.28297920890020123 a=eks,b=zee,i=9070,x=0.7790422604287773,y=0.28267242056842967 a=wye,b=pan,i=9071,x=0.9604400242139107,y=0.09079642708772462 a=wye,b=pan,i=9072,x=0.5208132164872745,y=0.013972758368806626 a=eks,b=eks,i=9073,x=0.2792153884168088,y=0.7248580986479927 a=pan,b=wye,i=9074,x=0.9826230778886313,y=0.30895404125911885 a=zee,b=pan,i=9075,x=0.3488738872635716,y=0.8235123319669855 a=eks,b=pan,i=9076,x=0.9828706810264064,y=0.7255065121370968 a=wye,b=pan,i=9077,x=0.285398788706721,y=0.4224009700612671 a=hat,b=hat,i=9078,x=0.049288778502150965,y=0.996399226324633 a=eks,b=wye,i=9079,x=0.2615316643364618,y=0.22800118037634576 a=zee,b=zee,i=9080,x=0.4293043221770476,y=0.17146941589040998 a=pan,b=zee,i=9081,x=0.00020390740306253097,y=0.858089025239552 a=zee,b=wye,i=9082,x=0.2857614979340398,y=0.6179068250859443 a=eks,b=zee,i=9083,x=0.23246167408482288,y=0.22121933132231686 a=zee,b=hat,i=9084,x=0.3023274634670656,y=0.3919343366566008 a=wye,b=zee,i=9085,x=0.48017021719327857,y=0.0007369823565522848 a=eks,b=pan,i=9086,x=0.43284428230137006,y=0.6679282652138314 a=wye,b=eks,i=9087,x=0.5126283529841884,y=0.414628158508178 a=pan,b=hat,i=9088,x=0.10076670744312233,y=0.924513056086707 a=eks,b=hat,i=9089,x=0.17655473424651258,y=0.027572342702157582 a=zee,b=hat,i=9090,x=0.32515391353663414,y=0.24968345250419 a=hat,b=hat,i=9091,x=0.40076821857198996,y=0.6602879383328565 a=zee,b=zee,i=9092,x=0.26080219359430634,y=0.6103007265821453 a=pan,b=hat,i=9093,x=0.2925006896788842,y=0.6480842668339396 a=pan,b=pan,i=9094,x=0.9716001304365217,y=0.6469197673672618 a=eks,b=eks,i=9095,x=0.5806604417079977,y=0.3031395509663418 a=eks,b=eks,i=9096,x=0.3734935600143474,y=0.5772166478411038 a=zee,b=zee,i=9097,x=0.9600502263246077,y=0.39644027119291114 a=wye,b=hat,i=9098,x=0.2804902678845115,y=0.048162079204052355 a=eks,b=zee,i=9099,x=0.43507793732310474,y=0.3953634078162601 a=pan,b=eks,i=9100,x=0.4123076209388652,y=0.8034708206600174 a=zee,b=eks,i=9101,x=0.39275338043203933,y=0.6958341586624519 a=pan,b=hat,i=9102,x=0.28992810063257124,y=0.0936263604214349 a=hat,b=hat,i=9103,x=0.05803247800352507,y=0.5686807585943757 a=pan,b=wye,i=9104,x=0.27797911143024934,y=0.942706265472493 a=hat,b=hat,i=9105,x=0.4895163425613803,y=0.033340055000638746 a=pan,b=zee,i=9106,x=0.44873266752482066,y=0.15530029661112588 a=pan,b=wye,i=9107,x=0.34313847787795904,y=0.2784766094254877 a=hat,b=wye,i=9108,x=0.614870837142051,y=0.3488517641548976 a=eks,b=hat,i=9109,x=0.9754089146191263,y=0.5077651396700906 a=hat,b=zee,i=9110,x=0.6804708680166679,y=0.5357141089061417 a=zee,b=zee,i=9111,x=0.0703606204232261,y=0.6245056563608682 a=pan,b=wye,i=9112,x=0.3153235029768974,y=0.5484733757485007 a=eks,b=wye,i=9113,x=0.49754317676073356,y=0.5477171066757857 a=eks,b=wye,i=9114,x=0.9835650326182704,y=0.8742646308873757 a=wye,b=zee,i=9115,x=0.10698858622424778,y=0.1221930347907727 a=eks,b=pan,i=9116,x=0.8096317851752184,y=0.4495015727565027 a=pan,b=eks,i=9117,x=0.03509835946106599,y=0.4760601952379325 a=zee,b=hat,i=9118,x=0.6070026967820008,y=0.27123198811450044 a=eks,b=hat,i=9119,x=0.4790316458227425,y=0.39259275204959654 a=zee,b=eks,i=9120,x=0.8458192848056897,y=0.9572808268819287 a=pan,b=pan,i=9121,x=0.9385839358069921,y=0.6047637384188489 a=eks,b=pan,i=9122,x=0.45413891231860504,y=0.7591849964061139 a=pan,b=zee,i=9123,x=0.026931116208210204,y=0.552290792057422 a=wye,b=pan,i=9124,x=0.271590915264334,y=0.042888205379760125 a=pan,b=wye,i=9125,x=0.004588040579576735,y=0.6300579166147449 a=wye,b=wye,i=9126,x=0.5171856925914533,y=0.24961569992529742 a=wye,b=pan,i=9127,x=0.8948475255545615,y=0.6574529698134108 a=wye,b=hat,i=9128,x=0.3669933618796106,y=0.37512574289121725 a=pan,b=hat,i=9129,x=0.6586229255026295,y=0.1784724547766009 a=hat,b=zee,i=9130,x=0.27552193496369337,y=0.6578126148590314 a=zee,b=pan,i=9131,x=0.6444063407232797,y=0.4063279946367009 a=pan,b=wye,i=9132,x=0.6455902674388132,y=0.5382099179246037 a=hat,b=pan,i=9133,x=0.9317711632235914,y=0.3230694970784014 a=eks,b=hat,i=9134,x=0.16612397042168814,y=0.3555728981905678 a=wye,b=zee,i=9135,x=0.7750442450200157,y=0.06656439748434029 a=zee,b=pan,i=9136,x=0.5002884150544058,y=0.21659717683648372 a=zee,b=hat,i=9137,x=0.0053168417053239825,y=0.23970890502186593 a=hat,b=zee,i=9138,x=0.05408301987702224,y=0.8596429828563238 a=zee,b=zee,i=9139,x=0.24544320815673137,y=0.677429657112386 a=zee,b=pan,i=9140,x=0.5013642860004229,y=0.6650678922317501 a=eks,b=hat,i=9141,x=0.39054802020070156,y=0.06891218601149551 a=wye,b=hat,i=9142,x=0.29433621999949233,y=0.7751648810637005 a=wye,b=hat,i=9143,x=0.4460302810053538,y=0.040278587711885305 a=hat,b=eks,i=9144,x=0.30372533545667213,y=0.4297094831523881 a=zee,b=eks,i=9145,x=0.00769664097559164,y=0.1446289205179656 a=pan,b=wye,i=9146,x=0.9108896246536903,y=0.20685277919402034 a=wye,b=pan,i=9147,x=0.8702610842064613,y=0.13016678459764375 a=pan,b=wye,i=9148,x=0.7394828765293925,y=0.9475622732914554 a=zee,b=pan,i=9149,x=0.22357262525185106,y=0.20550777850363977 a=zee,b=pan,i=9150,x=0.7364509479059471,y=0.5273598026796336 a=zee,b=eks,i=9151,x=0.3216536526700301,y=0.23861396443066107 a=hat,b=wye,i=9152,x=0.629862943457729,y=0.2161824319117963 a=zee,b=wye,i=9153,x=0.7713603997995606,y=0.8927934282961629 a=eks,b=eks,i=9154,x=0.8033015390132335,y=0.7428789028852476 a=hat,b=pan,i=9155,x=0.4469843980869507,y=0.18928924828611082 a=wye,b=wye,i=9156,x=0.500390135135027,y=0.8848611838558533 a=zee,b=hat,i=9157,x=0.6459716786543495,y=0.8783255778315494 a=zee,b=pan,i=9158,x=0.829825296282736,y=0.9403424810846446 a=hat,b=wye,i=9159,x=0.6553956343389391,y=0.1525879472674848 a=zee,b=eks,i=9160,x=0.6080812576081395,y=0.3155419271117481 a=wye,b=zee,i=9161,x=0.9794920335555851,y=0.5208178578405636 a=hat,b=pan,i=9162,x=0.36011363532418106,y=0.3418468995076799 a=pan,b=wye,i=9163,x=0.37797791224139665,y=0.39353695559343227 a=hat,b=zee,i=9164,x=0.8838448430378912,y=0.7958865093747128 a=zee,b=zee,i=9165,x=0.7783131261247423,y=0.7403476431916528 a=eks,b=eks,i=9166,x=0.22004086657109556,y=0.19736319549096537 a=hat,b=wye,i=9167,x=0.6758868789217809,y=0.24720804895114945 a=wye,b=pan,i=9168,x=0.5370077637228887,y=0.6389653169963743 a=pan,b=zee,i=9169,x=0.030815090059835182,y=0.017547992939040524 a=wye,b=wye,i=9170,x=0.8353343256800804,y=0.3768654473939027 a=hat,b=zee,i=9171,x=0.46003847353195026,y=0.4354345395691309 a=hat,b=pan,i=9172,x=0.032538252982685534,y=0.988500077283618 a=eks,b=wye,i=9173,x=0.034581992091101466,y=0.7801643183419578 a=eks,b=zee,i=9174,x=0.6550305066967593,y=0.16344251291756706 a=zee,b=wye,i=9175,x=0.19674254649951783,y=0.18304515051083692 a=eks,b=pan,i=9176,x=0.21328957209812893,y=0.13489440510159378 a=pan,b=eks,i=9177,x=0.005689888388995534,y=0.19304812808970884 a=zee,b=pan,i=9178,x=0.9154191363169403,y=0.032732957728748735 a=zee,b=zee,i=9179,x=0.9807519030460864,y=0.4665860553591783 a=pan,b=pan,i=9180,x=0.6528911310033898,y=0.7987231494976602 a=pan,b=hat,i=9181,x=0.6407905148282739,y=0.7653184860370159 a=wye,b=pan,i=9182,x=0.9562838531255896,y=0.27319300978963235 a=zee,b=eks,i=9183,x=0.8789109160607933,y=0.6764597514962247 a=hat,b=wye,i=9184,x=0.0454922541303826,y=0.7789503923765669 a=zee,b=hat,i=9185,x=0.9488182203633042,y=0.20055459864504688 a=pan,b=zee,i=9186,x=0.8094929584839381,y=0.017753827357001706 a=zee,b=eks,i=9187,x=0.9492829297817624,y=0.9675987602030636 a=hat,b=wye,i=9188,x=0.5484371698132414,y=0.48898521397678274 a=zee,b=hat,i=9189,x=0.698589129880174,y=0.4354385113427839 a=pan,b=wye,i=9190,x=0.8371899774027962,y=0.7968937186611519 a=wye,b=zee,i=9191,x=0.021517369039138368,y=0.1381446138482929 a=eks,b=zee,i=9192,x=0.2695667438992312,y=0.28074171138048576 a=wye,b=pan,i=9193,x=0.894511626988757,y=0.938591468790241 a=wye,b=pan,i=9194,x=0.12628217214956572,y=0.6168175982380071 a=pan,b=zee,i=9195,x=0.5535590246543304,y=0.2526444377074163 a=hat,b=hat,i=9196,x=0.3980083533361548,y=0.12546876469790447 a=wye,b=hat,i=9197,x=0.3508027024722644,y=0.8470842806054778 a=pan,b=pan,i=9198,x=0.6918350451415268,y=0.7037194771160388 a=pan,b=wye,i=9199,x=0.09935798556479436,y=0.8306198911393249 a=eks,b=wye,i=9200,x=0.5817459757102148,y=0.7926589099732673 a=wye,b=pan,i=9201,x=0.6973989669681704,y=0.029025785391803005 a=hat,b=wye,i=9202,x=0.541438501860869,y=0.43313624277905893 a=zee,b=eks,i=9203,x=0.03325991383215876,y=0.7053312999685288 a=hat,b=pan,i=9204,x=0.972877655785142,y=0.2339442404736457 a=wye,b=pan,i=9205,x=0.650403525932319,y=0.3896918481459313 a=eks,b=zee,i=9206,x=0.38877534437698114,y=0.570145295749778 a=eks,b=wye,i=9207,x=0.4768627348776039,y=0.8140053040358975 a=wye,b=eks,i=9208,x=0.7602904558546134,y=0.40132374234963053 a=hat,b=eks,i=9209,x=0.9001439023825403,y=0.03672742376278848 a=pan,b=eks,i=9210,x=0.9435871837198925,y=0.17154456862061596 a=pan,b=hat,i=9211,x=0.6420793762242888,y=0.686212047389247 a=wye,b=zee,i=9212,x=0.5791530677301323,y=0.4958922872459267 a=zee,b=pan,i=9213,x=0.5172383902917987,y=0.415686177469048 a=zee,b=zee,i=9214,x=0.5228330684403698,y=0.9018872431686975 a=eks,b=wye,i=9215,x=0.04381430874634051,y=0.6032242723440449 a=wye,b=pan,i=9216,x=0.945612107018632,y=0.5963971999452331 a=pan,b=hat,i=9217,x=0.5519808331424808,y=0.037818522708640945 a=wye,b=pan,i=9218,x=0.45248627667931407,y=0.9107065056547308 a=wye,b=pan,i=9219,x=0.9023383971006868,y=0.007488783487717088 a=hat,b=wye,i=9220,x=0.7052123508658505,y=0.38765508481678934 a=eks,b=zee,i=9221,x=0.41382740826608244,y=0.477677197129144 a=hat,b=eks,i=9222,x=0.6481864881498441,y=0.5386696824239133 a=wye,b=hat,i=9223,x=0.677511714967485,y=0.2245548025295082 a=zee,b=eks,i=9224,x=0.23401414583819413,y=0.9738879243097983 a=wye,b=pan,i=9225,x=0.8767378564000506,y=0.4275905594606648 a=pan,b=zee,i=9226,x=0.4240169603576853,y=0.8296431435579869 a=hat,b=pan,i=9227,x=0.946179027020023,y=0.5244012924468459 a=pan,b=zee,i=9228,x=0.05618069066896114,y=0.7424835122028975 a=zee,b=wye,i=9229,x=0.40650226274306367,y=0.9887079480722842 a=pan,b=eks,i=9230,x=0.3504445487923017,y=0.0696878797080479 a=wye,b=zee,i=9231,x=0.9610972939563219,y=0.9615810406623142 a=eks,b=wye,i=9232,x=0.9834939198983763,y=0.902120163211437 a=pan,b=eks,i=9233,x=0.8804184286373076,y=0.4945856574840146 a=wye,b=wye,i=9234,x=0.07920533790072082,y=0.4210755544521094 a=eks,b=hat,i=9235,x=0.48788423763049804,y=0.4836801731961293 a=wye,b=eks,i=9236,x=0.9192818812102141,y=0.1515679068232202 a=hat,b=hat,i=9237,x=0.7302582849873859,y=0.6347279985888814 a=zee,b=eks,i=9238,x=0.7403878392403773,y=0.34071315515449585 a=pan,b=pan,i=9239,x=0.8213696571357758,y=0.17138348492013578 a=wye,b=hat,i=9240,x=0.8014369373980875,y=0.814100095516592 a=pan,b=pan,i=9241,x=0.3913547136873715,y=0.54960018873529 a=pan,b=zee,i=9242,x=0.9438072144493844,y=0.06767533471560916 a=wye,b=zee,i=9243,x=0.5569913771099433,y=0.18691552708330927 a=pan,b=wye,i=9244,x=0.2905201186571721,y=0.43425495374391 a=pan,b=zee,i=9245,x=0.29006760780733076,y=0.9489792158642996 a=wye,b=zee,i=9246,x=0.21902763341829212,y=0.7943599432988762 a=wye,b=pan,i=9247,x=0.8348408249460723,y=0.45052677140725683 a=zee,b=eks,i=9248,x=0.26940493140011434,y=0.9610522390775448 a=eks,b=hat,i=9249,x=0.39091312069697004,y=0.3308378438144999 a=hat,b=wye,i=9250,x=0.2762755403834666,y=0.9174844589095804 a=zee,b=wye,i=9251,x=0.4183886566774483,y=0.9616112086487094 a=hat,b=pan,i=9252,x=0.03920827797790982,y=0.7576567680032309 a=zee,b=pan,i=9253,x=0.9673157002999003,y=0.7433452506349982 a=wye,b=eks,i=9254,x=0.924508714560465,y=0.19996024545680346 a=eks,b=pan,i=9255,x=0.4613513625777358,y=0.13932504620685293 a=wye,b=hat,i=9256,x=0.961942362261845,y=0.9395596121676374 a=zee,b=eks,i=9257,x=0.8279072561096625,y=0.8490761119202441 a=wye,b=hat,i=9258,x=0.22113630994807887,y=0.04508156412906639 a=wye,b=hat,i=9259,x=0.5343061739795472,y=0.3925155297434233 a=hat,b=eks,i=9260,x=0.6027628673680535,y=0.29907777128173474 a=eks,b=pan,i=9261,x=0.269529051685529,y=0.4796863618360836 a=wye,b=wye,i=9262,x=0.09116905745671411,y=0.6431265280186941 a=pan,b=wye,i=9263,x=0.18094504922785837,y=0.6552196736780825 a=hat,b=zee,i=9264,x=0.023456730670551096,y=0.1975931324733875 a=zee,b=pan,i=9265,x=0.007623684349103987,y=0.07551340520872629 a=eks,b=eks,i=9266,x=0.17817560372002472,y=0.49956704475839064 a=pan,b=pan,i=9267,x=0.04690229807589086,y=0.1929566014362788 a=zee,b=eks,i=9268,x=0.3470560427863578,y=0.3275172947002548 a=zee,b=hat,i=9269,x=0.5409419616161683,y=0.3958039424067026 a=pan,b=pan,i=9270,x=0.1487528959524752,y=0.4469367832007153 a=pan,b=wye,i=9271,x=0.24595184073704124,y=0.48817169012236983 a=hat,b=eks,i=9272,x=0.8194471147409262,y=0.06810057179235018 a=hat,b=zee,i=9273,x=0.4611616764401677,y=0.8051508540162687 a=pan,b=hat,i=9274,x=0.5857275960463182,y=0.1154346418508585 a=eks,b=wye,i=9275,x=0.09259540108550524,y=0.21275003504178946 a=zee,b=pan,i=9276,x=0.684545528802376,y=0.5890511399726057 a=eks,b=zee,i=9277,x=0.8931272247478754,y=0.9108980465393053 a=wye,b=hat,i=9278,x=0.4908268342979165,y=0.1022036634900918 a=hat,b=hat,i=9279,x=0.2967586295179133,y=0.28353991288502345 a=eks,b=wye,i=9280,x=0.7214470432782933,y=0.3196837745294565 a=zee,b=eks,i=9281,x=0.5357035342523082,y=0.4498861677161915 a=hat,b=pan,i=9282,x=0.7019948002783253,y=0.631688166262754 a=wye,b=eks,i=9283,x=0.3146560370204342,y=0.9598216687345593 a=wye,b=wye,i=9284,x=0.6806389501871987,y=0.6623844311258401 a=hat,b=hat,i=9285,x=0.4737832453554822,y=0.41355006089770063 a=eks,b=wye,i=9286,x=0.9872826301151825,y=0.2639815365115553 a=eks,b=zee,i=9287,x=0.8397334293185692,y=0.5061677209701542 a=zee,b=hat,i=9288,x=0.21107288266906798,y=0.6423943950594364 a=wye,b=hat,i=9289,x=0.9539770475173472,y=0.33368774127122824 a=pan,b=zee,i=9290,x=0.3192448675700893,y=0.44823866938306645 a=zee,b=wye,i=9291,x=0.9454063570448517,y=0.8966671326133628 a=pan,b=wye,i=9292,x=0.23598454792188905,y=0.19161925423381865 a=eks,b=wye,i=9293,x=0.7765814539440627,y=0.3128212435040012 a=eks,b=pan,i=9294,x=0.6560425166942336,y=0.6540980604466382 a=zee,b=hat,i=9295,x=0.6842327967828038,y=0.22627755842144792 a=wye,b=wye,i=9296,x=0.4655851206978665,y=0.572270128810435 a=hat,b=pan,i=9297,x=0.04780798739920045,y=0.884344079010386 a=wye,b=zee,i=9298,x=0.6400110650985101,y=0.5918078681573676 a=hat,b=pan,i=9299,x=0.7099587184174139,y=0.026383946823356652 a=hat,b=pan,i=9300,x=0.8979895176793228,y=0.32530725941578 a=pan,b=pan,i=9301,x=0.9138183195198948,y=0.7104753541099725 a=hat,b=eks,i=9302,x=0.8146457149078221,y=0.49936330932918804 a=pan,b=hat,i=9303,x=0.19068920109866783,y=0.5863544157356678 a=hat,b=wye,i=9304,x=0.7296704964431727,y=0.7521653716034574 a=eks,b=zee,i=9305,x=0.06306304065329327,y=0.0425317362399702 a=hat,b=zee,i=9306,x=0.5892447648917019,y=0.26424215126062567 a=zee,b=hat,i=9307,x=0.40286235516928426,y=0.8843324963600357 a=pan,b=hat,i=9308,x=0.6041097470881792,y=0.6019432291571227 a=hat,b=hat,i=9309,x=0.5418892395718498,y=0.3894965192603561 a=zee,b=zee,i=9310,x=0.0489167780793065,y=0.1349420473135753 a=zee,b=hat,i=9311,x=0.9072476732379934,y=0.9064380734997842 a=zee,b=hat,i=9312,x=0.47773815390175445,y=0.7350455011720012 a=wye,b=wye,i=9313,x=0.8777070865064334,y=0.688500944696727 a=zee,b=eks,i=9314,x=0.23207083417195573,y=0.1459854668671191 a=eks,b=hat,i=9315,x=0.5953234480197771,y=0.17617996349844 a=hat,b=pan,i=9316,x=0.4588300778601382,y=0.6017358841802433 a=eks,b=pan,i=9317,x=0.7067142230113493,y=0.8603219297899701 a=eks,b=wye,i=9318,x=0.8917960222408765,y=0.13297569276200116 a=zee,b=pan,i=9319,x=0.32868846620305514,y=0.23221497395763813 a=eks,b=zee,i=9320,x=0.2336595066443039,y=0.5433625711598566 a=wye,b=wye,i=9321,x=0.08724329840345546,y=0.526071263228722 a=hat,b=eks,i=9322,x=0.4540531923441389,y=0.08529592575810008 a=pan,b=eks,i=9323,x=0.015142033208188965,y=0.9025875096361236 a=eks,b=pan,i=9324,x=0.2776566751941013,y=0.5186679560214653 a=zee,b=pan,i=9325,x=0.21535440536922212,y=0.5985912955734372 a=eks,b=zee,i=9326,x=0.9314022909750975,y=0.48900523853727407 a=pan,b=wye,i=9327,x=0.6213414890218699,y=0.3534669210352892 a=wye,b=wye,i=9328,x=0.5529670045133065,y=0.3657722177869842 a=pan,b=pan,i=9329,x=0.709436743485784,y=0.864805283294307 a=wye,b=hat,i=9330,x=0.7856558845965795,y=0.1735275218393233 a=wye,b=pan,i=9331,x=0.15157491016759606,y=0.1781007458002013 a=hat,b=pan,i=9332,x=0.469941809547738,y=0.17916634366371342 a=zee,b=hat,i=9333,x=0.09066429132809939,y=0.11291661870669667 a=eks,b=hat,i=9334,x=0.524982507717917,y=0.7739607975739912 a=zee,b=zee,i=9335,x=0.012865744128303103,y=0.4199812901617862 a=hat,b=wye,i=9336,x=0.3598356400708439,y=0.6497623418471714 a=eks,b=wye,i=9337,x=0.967092843190403,y=0.7129610451088223 a=zee,b=pan,i=9338,x=0.8766283655189672,y=0.8633718650644421 a=eks,b=wye,i=9339,x=0.3555024023169856,y=0.8712144867378462 a=pan,b=pan,i=9340,x=0.24667037823231752,y=0.930054068315833 a=pan,b=eks,i=9341,x=0.9847985606188508,y=0.002920168705884074 a=wye,b=zee,i=9342,x=0.6598872721679194,y=0.5841487864376177 a=pan,b=hat,i=9343,x=0.11586150580933774,y=0.8232025034483835 a=pan,b=eks,i=9344,x=0.23032551308519345,y=0.4668513513037823 a=zee,b=zee,i=9345,x=0.20721325482748,y=0.034658616763860395 a=pan,b=zee,i=9346,x=0.16804254918956518,y=0.41515674460320806 a=wye,b=hat,i=9347,x=0.9555426542676889,y=0.3336472181106118 a=zee,b=eks,i=9348,x=0.027241967830535785,y=0.6546273692203828 a=zee,b=hat,i=9349,x=0.39077150740400146,y=0.35499431123174563 a=pan,b=wye,i=9350,x=0.897415684005392,y=0.0054949420910770375 a=pan,b=zee,i=9351,x=0.6475971487532642,y=0.2993123271198067 a=zee,b=wye,i=9352,x=0.25522951350527867,y=0.48668317596678823 a=hat,b=wye,i=9353,x=0.6279030165419767,y=0.14783115221664478 a=pan,b=eks,i=9354,x=0.0010353989176113965,y=0.7228482030180055 a=hat,b=eks,i=9355,x=0.7415812921258672,y=0.5371997970549264 a=eks,b=zee,i=9356,x=0.3273618744303315,y=0.7034589444097167 a=eks,b=eks,i=9357,x=0.7638755117313554,y=0.37304708043971646 a=pan,b=zee,i=9358,x=0.7274485972079328,y=0.027395796712653575 a=eks,b=pan,i=9359,x=0.726201179013375,y=0.8974974727334436 a=wye,b=hat,i=9360,x=0.009237964269686039,y=0.6456624352507632 a=wye,b=eks,i=9361,x=0.9893854310908603,y=0.6762929165737711 a=pan,b=hat,i=9362,x=0.021355365998413367,y=0.8849112911074679 a=hat,b=pan,i=9363,x=0.24144536935297445,y=0.2588538401367807 a=pan,b=eks,i=9364,x=0.20906377399579568,y=0.26492309174424467 a=hat,b=zee,i=9365,x=0.2716712677588158,y=0.7480148549966943 a=zee,b=eks,i=9366,x=0.564783511562303,y=0.8736158892678358 a=zee,b=zee,i=9367,x=0.5210119669704992,y=0.6601277179108643 a=zee,b=hat,i=9368,x=0.09391533461405244,y=0.8033292481660601 a=eks,b=pan,i=9369,x=0.47109046860253434,y=0.7533692481022667 a=eks,b=wye,i=9370,x=0.45402522126988876,y=0.3506046491270858 a=hat,b=wye,i=9371,x=0.3288376239355628,y=0.9711363417175689 a=hat,b=zee,i=9372,x=0.04803081055457803,y=0.9237983355638324 a=hat,b=eks,i=9373,x=0.13505404407952326,y=0.9843128058775863 a=hat,b=zee,i=9374,x=0.1687355361920142,y=0.5136082981945438 a=zee,b=wye,i=9375,x=0.5866436779364502,y=0.49139965761407123 a=hat,b=eks,i=9376,x=0.7413691108319418,y=0.6875522126693252 a=wye,b=eks,i=9377,x=0.8850578085185158,y=0.12984077539965466 a=zee,b=pan,i=9378,x=0.07698056466866121,y=0.3418330456253533 a=hat,b=hat,i=9379,x=0.6567829350592936,y=0.42166759832139167 a=eks,b=pan,i=9380,x=0.2066941665945501,y=0.34630072002937273 a=hat,b=hat,i=9381,x=0.3011098756670775,y=0.8241475200392532 a=hat,b=eks,i=9382,x=0.1595168703472838,y=0.9632363240817852 a=eks,b=eks,i=9383,x=0.316374240183787,y=0.894701260202343 a=eks,b=eks,i=9384,x=0.6925067244014451,y=0.5943855874672127 a=pan,b=hat,i=9385,x=0.8929259869658823,y=0.13255544013678944 a=eks,b=hat,i=9386,x=0.9458375043305679,y=0.0711986701172268 a=pan,b=eks,i=9387,x=0.42414161600219213,y=0.8727447652075521 a=pan,b=zee,i=9388,x=0.16102926470006396,y=0.7076666589050068 a=eks,b=wye,i=9389,x=0.38573189008702746,y=0.7862235218204946 a=pan,b=eks,i=9390,x=0.009185746132245987,y=0.9615590214943641 a=hat,b=eks,i=9391,x=0.6541239333254625,y=0.4465038993768474 a=zee,b=pan,i=9392,x=0.7293619733667298,y=0.9075863768811903 a=eks,b=zee,i=9393,x=0.5270647942493862,y=0.3208644368195749 a=wye,b=wye,i=9394,x=0.10611623011471227,y=0.3957794249815757 a=wye,b=pan,i=9395,x=0.04167582918996382,y=0.9345423545353554 a=zee,b=pan,i=9396,x=0.6285537391072125,y=0.9531200799497426 a=eks,b=wye,i=9397,x=0.22691889482992367,y=0.821434358932521 a=pan,b=wye,i=9398,x=0.8650573724586973,y=0.5778302746561125 a=wye,b=zee,i=9399,x=0.4320795547957027,y=0.23858094801157526 a=hat,b=wye,i=9400,x=0.2940385536354171,y=0.23832353705367249 a=zee,b=eks,i=9401,x=0.42923024441857793,y=0.17544011645116253 a=hat,b=pan,i=9402,x=0.050855729288162066,y=0.7490381251654518 a=zee,b=eks,i=9403,x=0.2945793937707598,y=0.7184571034764143 a=eks,b=pan,i=9404,x=0.18971476661419018,y=0.8587967149525896 a=hat,b=hat,i=9405,x=0.8781331270774858,y=0.22282398620968602 a=zee,b=pan,i=9406,x=0.6365186667658354,y=0.8944728240200203 a=eks,b=zee,i=9407,x=0.6393982916726031,y=0.42468859570082085 a=pan,b=wye,i=9408,x=0.12426748935771803,y=0.0845763991164874 a=hat,b=hat,i=9409,x=0.8968671619037487,y=0.17554843424501398 a=hat,b=wye,i=9410,x=0.008668685325378456,y=0.5585204180254394 a=hat,b=pan,i=9411,x=0.9186069486489989,y=0.8447036557059203 a=zee,b=wye,i=9412,x=0.20193830450565098,y=0.5853957332725758 a=pan,b=wye,i=9413,x=0.9095023537816819,y=0.03850690961125591 a=hat,b=eks,i=9414,x=0.2255272659717531,y=0.35264234784519843 a=zee,b=hat,i=9415,x=0.008811072137013154,y=0.035134463676480765 a=eks,b=zee,i=9416,x=0.25375738274931314,y=0.2401418182493137 a=hat,b=hat,i=9417,x=0.9120549045686616,y=0.8777751478548385 a=eks,b=zee,i=9418,x=0.6260065420723087,y=0.5130847407197059 a=wye,b=eks,i=9419,x=0.05078132617198228,y=0.6850739609021935 a=wye,b=hat,i=9420,x=0.5546625744389891,y=0.592423843346026 a=eks,b=pan,i=9421,x=0.3027881637101668,y=0.6808643872207955 a=wye,b=wye,i=9422,x=0.37276454834771744,y=0.8714783706587489 a=wye,b=pan,i=9423,x=0.7419375666814781,y=0.637584961040595 a=zee,b=wye,i=9424,x=0.7703279734371525,y=0.06486561364647381 a=hat,b=eks,i=9425,x=0.5549660221796285,y=0.025089141119986502 a=hat,b=wye,i=9426,x=0.09307376603254536,y=0.9353448863380895 a=zee,b=hat,i=9427,x=0.1030256845979749,y=0.7734068134003184 a=zee,b=hat,i=9428,x=0.653199130802959,y=0.6335896172568141 a=zee,b=hat,i=9429,x=0.532354384202152,y=0.6240035856800994 a=zee,b=wye,i=9430,x=0.34274658023426774,y=0.30318681846915607 a=zee,b=zee,i=9431,x=0.5467923659024335,y=0.7749657540239817 a=zee,b=eks,i=9432,x=0.011838772084611482,y=0.1275339102058447 a=pan,b=eks,i=9433,x=0.8206211659130856,y=0.3064654802677319 a=wye,b=hat,i=9434,x=0.017191670800521974,y=0.7085199387051128 a=eks,b=wye,i=9435,x=0.06360578109666282,y=0.46325468037532036 a=hat,b=wye,i=9436,x=0.7601470639179305,y=0.659295809995321 a=wye,b=eks,i=9437,x=0.9367938724373632,y=0.017440063316899512 a=eks,b=wye,i=9438,x=0.08469295491745277,y=0.6859916432738016 a=pan,b=pan,i=9439,x=0.8916122427540487,y=0.3044045541494258 a=wye,b=zee,i=9440,x=0.5929171430130797,y=0.7244452361008757 a=eks,b=pan,i=9441,x=0.6555419304461224,y=0.8327927199446215 a=hat,b=zee,i=9442,x=0.3102917611279977,y=0.1420968126103015 a=pan,b=wye,i=9443,x=0.5029377247494847,y=0.13904388591573225 a=zee,b=pan,i=9444,x=0.09343968982332573,y=0.08259490069798114 a=zee,b=zee,i=9445,x=0.7881482118621499,y=0.14841414165625988 a=hat,b=wye,i=9446,x=0.17230938096585302,y=0.4547425422305543 a=hat,b=wye,i=9447,x=0.9179072696408536,y=0.07438240520747308 a=pan,b=zee,i=9448,x=0.1174681478790296,y=0.24900650669165836 a=hat,b=wye,i=9449,x=0.47777327288439886,y=0.6489946706089305 a=pan,b=wye,i=9450,x=0.012891972793683926,y=0.6683256849475698 a=eks,b=eks,i=9451,x=0.3293644408777492,y=0.4858482434549475 a=eks,b=hat,i=9452,x=0.06728855986596627,y=0.0225203259981267 a=zee,b=wye,i=9453,x=0.6954345063830266,y=0.39093627278723897 a=eks,b=eks,i=9454,x=0.6561623394687102,y=0.8733561225304062 a=hat,b=hat,i=9455,x=0.7967671268259048,y=0.9988457558727984 a=eks,b=hat,i=9456,x=0.3026733411299638,y=0.009039229737229593 a=hat,b=zee,i=9457,x=0.048573658961714505,y=0.6212752707665637 a=hat,b=eks,i=9458,x=0.3567374350316811,y=0.5763840507853728 a=wye,b=hat,i=9459,x=0.6222194995601943,y=0.7094551547783764 a=zee,b=zee,i=9460,x=0.20547852694177993,y=0.6209825112942681 a=zee,b=zee,i=9461,x=0.9078512942646408,y=0.457893412939096 a=zee,b=pan,i=9462,x=0.3728674304211519,y=0.12798138723542984 a=eks,b=zee,i=9463,x=0.9866166648988529,y=0.17872754778259448 a=eks,b=hat,i=9464,x=0.8408137777713087,y=0.7528260965110807 a=eks,b=zee,i=9465,x=0.33674248998876777,y=0.10313732374119522 a=zee,b=hat,i=9466,x=0.7785160988373221,y=0.9149400917302326 a=pan,b=pan,i=9467,x=0.6408147454849812,y=0.8180389929482121 a=eks,b=wye,i=9468,x=0.4450915490400188,y=0.8824862158939643 a=hat,b=eks,i=9469,x=0.7744532386038095,y=0.8239793457702959 a=eks,b=zee,i=9470,x=0.3380551755097342,y=0.9960822877834217 a=pan,b=wye,i=9471,x=0.19841074697657957,y=0.585082594173758 a=pan,b=wye,i=9472,x=0.24546532083386097,y=0.7604287018742679 a=zee,b=wye,i=9473,x=0.7950056898263439,y=0.3564547166869826 a=zee,b=hat,i=9474,x=0.647685209897895,y=0.8836053801968514 a=hat,b=wye,i=9475,x=0.6632008131941411,y=0.4341909885612145 a=wye,b=hat,i=9476,x=0.3069739795755916,y=0.8833844662300937 a=zee,b=wye,i=9477,x=0.8339299679122139,y=0.3475658687207359 a=pan,b=pan,i=9478,x=0.061365475952511406,y=0.818350624274383 a=zee,b=pan,i=9479,x=0.52329697201472,y=0.43298303575134856 a=wye,b=zee,i=9480,x=0.8749976408632957,y=0.6548646339660915 a=wye,b=pan,i=9481,x=0.5642187826825651,y=0.34484130192623874 a=zee,b=wye,i=9482,x=0.8624170951363191,y=0.39655837242080083 a=wye,b=zee,i=9483,x=0.8152545316901858,y=0.805340784776813 a=wye,b=pan,i=9484,x=0.6372765009756718,y=0.9390350932955009 a=pan,b=hat,i=9485,x=0.9951942673622418,y=0.24029104242438515 a=zee,b=pan,i=9486,x=0.5811802467756935,y=0.2889437683040591 a=zee,b=pan,i=9487,x=0.4993989664425713,y=0.05807295824271008 a=hat,b=eks,i=9488,x=0.2735790874645423,y=0.9082260037697276 a=pan,b=eks,i=9489,x=0.6975989077779615,y=0.09410891805021981 a=eks,b=wye,i=9490,x=0.3047068029924873,y=0.45677847562149443 a=eks,b=hat,i=9491,x=0.8064028259566911,y=0.23750639868456547 a=wye,b=pan,i=9492,x=0.8385671784002926,y=0.16511708685555704 a=pan,b=zee,i=9493,x=0.14382267645371283,y=0.30310643623917777 a=wye,b=zee,i=9494,x=0.1971697941455559,y=0.9572851470177893 a=pan,b=zee,i=9495,x=0.7883366151370216,y=0.3948433476009946 a=wye,b=eks,i=9496,x=0.6409095653823011,y=0.9562448788009965 a=eks,b=pan,i=9497,x=0.5364899166331132,y=0.2068390306785195 a=zee,b=zee,i=9498,x=0.8078967452757337,y=0.3300003462355645 a=pan,b=hat,i=9499,x=0.6409505992060831,y=0.8924125083478576 a=eks,b=eks,i=9500,x=0.7367548086654266,y=0.1195022439518929 a=wye,b=hat,i=9501,x=0.7080642380603698,y=0.2215162974776509 a=eks,b=pan,i=9502,x=0.16573428170345306,y=0.41898077136905765 a=eks,b=wye,i=9503,x=0.36724763207097333,y=0.20835207321889548 a=wye,b=zee,i=9504,x=0.39741592004944626,y=0.9293543997296885 a=pan,b=wye,i=9505,x=0.9560872444441273,y=0.07372493247854506 a=hat,b=zee,i=9506,x=0.8278984427570538,y=0.42279600093868386 a=pan,b=zee,i=9507,x=0.7813724544334408,y=0.8453351473597829 a=wye,b=wye,i=9508,x=0.7441125682394683,y=0.7008423538608134 a=pan,b=wye,i=9509,x=0.9777133094457836,y=0.8770140891389367 a=pan,b=zee,i=9510,x=0.5805152904440047,y=0.7292694938520734 a=hat,b=zee,i=9511,x=0.6147425358709413,y=0.07609273803938887 a=pan,b=eks,i=9512,x=0.8889876510183636,y=0.5398130117495377 a=zee,b=hat,i=9513,x=0.9304009976201171,y=0.7707216462443467 a=eks,b=wye,i=9514,x=0.30105501363454046,y=0.6134456172343001 a=zee,b=zee,i=9515,x=0.49203474036972605,y=0.8884765700634494 a=pan,b=zee,i=9516,x=0.19069582221512293,y=0.18374946422400285 a=hat,b=zee,i=9517,x=0.7026133177880014,y=0.6466476553765019 a=zee,b=zee,i=9518,x=0.9360532474806631,y=0.3150191945268458 a=hat,b=hat,i=9519,x=0.7398790596655229,y=0.39271231521470007 a=hat,b=wye,i=9520,x=0.4732400431646818,y=0.9988992430260081 a=eks,b=wye,i=9521,x=0.5220677770619295,y=0.22799544453185772 a=zee,b=zee,i=9522,x=0.42835064707125325,y=0.5919336704352758 a=hat,b=wye,i=9523,x=0.9605618074441231,y=0.4152052252584968 a=zee,b=eks,i=9524,x=0.9170688313846707,y=0.5069375781460218 a=wye,b=pan,i=9525,x=0.3863168227783099,y=0.9070811441436243 a=pan,b=pan,i=9526,x=0.2141091210993753,y=0.3444756388829696 a=pan,b=pan,i=9527,x=0.8963731964519087,y=0.4182877370577519 a=zee,b=wye,i=9528,x=0.8576581178453184,y=0.5844216436491058 a=hat,b=pan,i=9529,x=0.15630461982613209,y=0.4213024290362597 a=wye,b=pan,i=9530,x=0.9935514622913653,y=0.0905032997544325 a=hat,b=hat,i=9531,x=0.6515604108858241,y=0.1838995493742861 a=wye,b=eks,i=9532,x=0.7441241444485516,y=0.07237060435987241 a=hat,b=zee,i=9533,x=0.14919839526856782,y=0.36262847729045855 a=pan,b=zee,i=9534,x=0.028605382208390595,y=0.3310651782769932 a=eks,b=eks,i=9535,x=0.2897105250506825,y=0.7327433725996669 a=wye,b=pan,i=9536,x=0.3206273570986442,y=0.6278333197115907 a=pan,b=pan,i=9537,x=0.6651951277546836,y=0.04848147036578743 a=zee,b=hat,i=9538,x=0.6252849020303484,y=0.6594304208970674 a=hat,b=pan,i=9539,x=0.19370943950685016,y=0.9984558689466796 a=pan,b=hat,i=9540,x=0.9246863327027597,y=0.8632603228617942 a=hat,b=eks,i=9541,x=0.4067481238813502,y=0.23429602829888707 a=wye,b=pan,i=9542,x=0.021183317661808254,y=0.17173704813590862 a=hat,b=wye,i=9543,x=0.5871893596056772,y=0.4980677307811977 a=zee,b=hat,i=9544,x=0.8363252040733755,y=0.9066361832913213 a=hat,b=wye,i=9545,x=0.8237931228490942,y=0.6154262745221335 a=eks,b=pan,i=9546,x=0.40720117438767467,y=0.23973575256875324 a=zee,b=hat,i=9547,x=0.262730021858643,y=0.9775392644170577 a=eks,b=eks,i=9548,x=0.18870561616460124,y=0.39344511734853893 a=hat,b=pan,i=9549,x=0.810156100508244,y=0.8042316538504537 a=eks,b=pan,i=9550,x=0.15708603238162966,y=0.1775120949821959 a=wye,b=pan,i=9551,x=0.27897262749013574,y=0.6810625461380688 a=wye,b=hat,i=9552,x=0.7096131782065784,y=0.9809388281353744 a=wye,b=zee,i=9553,x=0.7419668715219193,y=0.8915237603968896 a=pan,b=hat,i=9554,x=0.3423989249268735,y=0.9243111067539105 a=hat,b=zee,i=9555,x=0.24555292038029897,y=0.48675495523019463 a=pan,b=wye,i=9556,x=0.24636402971605553,y=0.5875667064956803 a=hat,b=hat,i=9557,x=0.0708280418080367,y=0.028042679168150064 a=zee,b=pan,i=9558,x=0.6684221558470672,y=0.30650078371682876 a=zee,b=hat,i=9559,x=0.43239927669791367,y=0.9087149456158999 a=hat,b=eks,i=9560,x=0.4502257867908256,y=0.24215826461552248 a=hat,b=pan,i=9561,x=0.3883496618282979,y=0.22856613973468343 a=pan,b=zee,i=9562,x=0.38705906045142546,y=0.8201861527861242 a=wye,b=hat,i=9563,x=0.7048435545008259,y=0.48292367120675417 a=wye,b=wye,i=9564,x=0.31482422203360294,y=0.7773413323819734 a=eks,b=wye,i=9565,x=0.9044412102611812,y=0.9981501201118028 a=eks,b=pan,i=9566,x=0.8603999193559607,y=0.050257998909329804 a=hat,b=pan,i=9567,x=0.3290021077530395,y=0.39186940599147513 a=hat,b=hat,i=9568,x=0.5173577930271901,y=0.5140354310886103 a=eks,b=wye,i=9569,x=0.7320928489540067,y=0.32241117771050576 a=zee,b=pan,i=9570,x=0.6962209074556881,y=0.9192719817135738 a=pan,b=hat,i=9571,x=0.888257035194179,y=0.2504282311488486 a=eks,b=eks,i=9572,x=0.9118388496610922,y=0.4477922591240877 a=eks,b=eks,i=9573,x=0.6740019306244561,y=0.08236636121482144 a=wye,b=hat,i=9574,x=0.0519270658523715,y=0.5083523326544599 a=eks,b=zee,i=9575,x=0.43349880702663446,y=0.2019764764745724 a=eks,b=wye,i=9576,x=0.40205714986858077,y=0.4741982385845239 a=pan,b=wye,i=9577,x=0.881168878098415,y=0.19056106338416623 a=hat,b=pan,i=9578,x=0.7487655114338957,y=0.17555433868225578 a=hat,b=hat,i=9579,x=0.8966618053662483,y=0.4330076918462582 a=zee,b=pan,i=9580,x=0.7965009504831406,y=0.7113454506506395 a=zee,b=hat,i=9581,x=0.2752580210770491,y=0.38383648901881584 a=zee,b=zee,i=9582,x=0.05859657717284972,y=0.4628784062589941 a=eks,b=wye,i=9583,x=0.8996740267247002,y=0.5650994189598781 a=pan,b=eks,i=9584,x=0.02695408257021037,y=0.29013109754146693 a=eks,b=pan,i=9585,x=0.4535709808960595,y=0.5806226415527737 a=wye,b=zee,i=9586,x=0.5222675900946373,y=0.2730687743275988 a=hat,b=wye,i=9587,x=0.8298282901710073,y=0.4244293086366463 a=zee,b=pan,i=9588,x=0.6700466485802432,y=0.8589272032654192 a=eks,b=zee,i=9589,x=0.9276643978084914,y=0.5258608330900789 a=zee,b=wye,i=9590,x=0.8441314279623635,y=0.9332236415562302 a=eks,b=hat,i=9591,x=0.4827772018239752,y=0.5265209579835296 a=eks,b=zee,i=9592,x=0.26199786487068166,y=0.6277586753372824 a=pan,b=zee,i=9593,x=0.5450234908021439,y=0.08615595529756348 a=pan,b=zee,i=9594,x=0.23590110682049703,y=0.4376160303971274 a=eks,b=eks,i=9595,x=0.28340752983264006,y=0.11403963974075082 a=zee,b=eks,i=9596,x=0.35304408286489164,y=0.8124829013597039 a=pan,b=eks,i=9597,x=0.12573249703948852,y=0.7661395734572027 a=wye,b=wye,i=9598,x=0.5312315260758368,y=0.8829573415823095 a=zee,b=zee,i=9599,x=0.5367647772694465,y=0.8214571633873584 a=pan,b=eks,i=9600,x=0.014723374949171641,y=0.5395465432733608 a=wye,b=hat,i=9601,x=0.07895223840580223,y=0.194977597106609 a=pan,b=pan,i=9602,x=0.8253467012158633,y=0.1789489998930841 a=wye,b=hat,i=9603,x=0.8921240644062436,y=0.4426730752788607 a=zee,b=wye,i=9604,x=0.06643820319339155,y=0.53243917974831 a=zee,b=eks,i=9605,x=0.20698996963521232,y=0.1727878106962335 a=hat,b=wye,i=9606,x=0.8834303299307495,y=0.5688694060075045 a=pan,b=wye,i=9607,x=0.7447919202299266,y=0.288491034452374 a=wye,b=hat,i=9608,x=0.5353991342820382,y=0.17933052450743758 a=wye,b=eks,i=9609,x=0.6154267547093157,y=0.6251702670753683 a=wye,b=wye,i=9610,x=0.6498025682619308,y=0.7373575543454602 a=pan,b=pan,i=9611,x=0.5949770409017805,y=0.12908671407875727 a=pan,b=hat,i=9612,x=0.33776075209807155,y=0.9036967387336143 a=wye,b=wye,i=9613,x=0.22534868678381625,y=0.2948136458395363 a=zee,b=hat,i=9614,x=0.18625473663791048,y=0.9908832589746321 a=wye,b=pan,i=9615,x=0.9704362849821679,y=0.7056997811176895 a=wye,b=pan,i=9616,x=0.045274112402005295,y=0.927169630245143 a=wye,b=eks,i=9617,x=0.47705336261321385,y=0.6750550500462088 a=hat,b=hat,i=9618,x=0.12470215534695595,y=0.6384166019909083 a=zee,b=eks,i=9619,x=0.2581941043200088,y=0.9649567414630514 a=eks,b=pan,i=9620,x=0.9018226733942377,y=0.36177533283317176 a=eks,b=wye,i=9621,x=0.9710728242015396,y=0.03785169422146961 a=eks,b=hat,i=9622,x=0.3797960123033828,y=0.8885266797541085 a=wye,b=wye,i=9623,x=0.8866788918745252,y=0.1725138886130947 a=pan,b=wye,i=9624,x=0.7133865698466841,y=0.929260666330654 a=zee,b=eks,i=9625,x=0.4926378355160854,y=0.7904306245961183 a=hat,b=zee,i=9626,x=0.6958926586419276,y=0.9430927470576268 a=eks,b=pan,i=9627,x=0.835956453698831,y=0.9007142296516358 a=eks,b=eks,i=9628,x=0.6999306667567604,y=0.780471447448193 a=pan,b=wye,i=9629,x=0.09405147784147772,y=0.11479025012357491 a=pan,b=pan,i=9630,x=0.5521126309556411,y=0.9964281092981838 a=pan,b=wye,i=9631,x=0.05531336390926278,y=0.03713539762104867 a=pan,b=eks,i=9632,x=0.06596720074216122,y=0.5047584331504461 a=pan,b=hat,i=9633,x=0.7402115896026022,y=0.8286389697202792 a=pan,b=wye,i=9634,x=0.24820023272983005,y=0.23862519520811787 a=hat,b=hat,i=9635,x=0.46092562373997625,y=0.6247131098820621 a=pan,b=zee,i=9636,x=0.28131833297516473,y=0.8846710544611799 a=pan,b=wye,i=9637,x=0.8663800328522322,y=0.9391569730896534 a=pan,b=hat,i=9638,x=0.833781456495762,y=0.7668042837631657 a=eks,b=pan,i=9639,x=0.382030344664966,y=0.7882388680685686 a=hat,b=hat,i=9640,x=0.463917278383292,y=0.3511187165916906 a=eks,b=wye,i=9641,x=0.529202227506829,y=0.8125205279022973 a=pan,b=hat,i=9642,x=0.9841563799754587,y=0.7384543484249447 a=eks,b=wye,i=9643,x=0.4320217008326096,y=0.9206705868869096 a=zee,b=wye,i=9644,x=0.44428785284867134,y=0.5020097257793937 a=hat,b=hat,i=9645,x=0.9504824754631439,y=0.09348851365055577 a=wye,b=zee,i=9646,x=0.33420875392550375,y=0.5893334569374644 a=eks,b=zee,i=9647,x=0.5673775461311286,y=0.12307074649995897 a=hat,b=pan,i=9648,x=0.622994461222752,y=0.24151966026299154 a=eks,b=eks,i=9649,x=0.5350085360772315,y=0.172869985141348 a=pan,b=wye,i=9650,x=0.6754011861080255,y=0.05797717400310154 a=hat,b=wye,i=9651,x=0.3235716165591942,y=0.6778947432413094 a=zee,b=hat,i=9652,x=0.929634631262683,y=0.6531235392615523 a=zee,b=zee,i=9653,x=0.0005486114815762555,y=0.7390531741942926 a=wye,b=eks,i=9654,x=0.2797016068787569,y=0.2814263099253008 a=pan,b=zee,i=9655,x=0.4057734719060324,y=0.15139105154457277 a=eks,b=hat,i=9656,x=0.7989570844648637,y=0.18643578362186397 a=zee,b=wye,i=9657,x=0.3194817450421683,y=0.16543264401690605 a=pan,b=zee,i=9658,x=0.5277143419555844,y=0.564254772210993 a=pan,b=pan,i=9659,x=0.2294759703953444,y=0.9048171749557317 a=zee,b=pan,i=9660,x=0.7009420239615597,y=0.7800651878215885 a=hat,b=eks,i=9661,x=0.953827560931939,y=0.185884517258452 a=eks,b=hat,i=9662,x=0.39474659738679696,y=0.43059711110253074 a=eks,b=wye,i=9663,x=0.4372348974243785,y=0.10476776917399111 a=zee,b=zee,i=9664,x=0.7236352219650497,y=0.08403018416427377 a=eks,b=hat,i=9665,x=0.05892665049965862,y=0.9092582016648947 a=wye,b=hat,i=9666,x=0.060690152753413606,y=0.7684174554192018 a=pan,b=zee,i=9667,x=0.4770802050437122,y=0.3612321845191586 a=eks,b=eks,i=9668,x=0.9444367104990204,y=0.4453839788188664 a=pan,b=pan,i=9669,x=0.1622773559553956,y=0.2408391953166471 a=zee,b=hat,i=9670,x=0.8623108841707915,y=0.5103999923687886 a=pan,b=eks,i=9671,x=0.6246995141336152,y=0.9570445916327326 a=zee,b=hat,i=9672,x=0.1269462523668624,y=0.5944133371399858 a=hat,b=eks,i=9673,x=0.4200506848108232,y=0.5676463512767541 a=pan,b=wye,i=9674,x=0.5610478784857535,y=0.03318888871240755 a=eks,b=zee,i=9675,x=0.20265536384504856,y=0.6923879412730425 a=eks,b=eks,i=9676,x=0.3552193074991099,y=0.48796093863435663 a=zee,b=zee,i=9677,x=0.7404662009786069,y=0.11704524348651668 a=pan,b=eks,i=9678,x=0.808264671158733,y=0.7958171364354866 a=eks,b=zee,i=9679,x=0.7801771579924318,y=0.8039168775444497 a=zee,b=hat,i=9680,x=0.8361585788416193,y=0.5904904054602013 a=pan,b=zee,i=9681,x=0.0881721087846773,y=0.6134254647769964 a=zee,b=zee,i=9682,x=0.790057108611216,y=0.6026603017260809 a=eks,b=eks,i=9683,x=0.591870649889634,y=0.03952287487189998 a=hat,b=zee,i=9684,x=0.2251288541796853,y=0.0914353575236524 a=hat,b=zee,i=9685,x=0.9783350755125275,y=0.6710234655696609 a=eks,b=wye,i=9686,x=0.2325134660144058,y=0.44098000477056654 a=eks,b=hat,i=9687,x=0.11435792053370386,y=0.3592405692612377 a=eks,b=pan,i=9688,x=0.013751121997101046,y=0.21071503600234553 a=eks,b=eks,i=9689,x=0.1983455661823349,y=0.3353712062497688 a=pan,b=zee,i=9690,x=0.8642706624839454,y=0.5020203992558137 a=zee,b=eks,i=9691,x=0.2257785909803941,y=0.7399889531061412 a=pan,b=zee,i=9692,x=0.518772161497821,y=0.5305276254149733 a=pan,b=wye,i=9693,x=0.5247714869016064,y=0.20906476377409644 a=hat,b=pan,i=9694,x=0.11556338152672874,y=0.33174635478223324 a=zee,b=eks,i=9695,x=0.7368043937171205,y=0.19022664969335668 a=hat,b=eks,i=9696,x=0.45233728948031515,y=0.8621802693175313 a=zee,b=hat,i=9697,x=0.609947885859063,y=0.5639255760997719 a=pan,b=pan,i=9698,x=0.8228841939557919,y=0.31636476080699183 a=pan,b=eks,i=9699,x=0.5797850274201329,y=0.8706915943068293 a=wye,b=eks,i=9700,x=0.5883942014435751,y=0.4251422885431637 a=pan,b=hat,i=9701,x=0.6223555273725319,y=0.23801172242502744 a=hat,b=pan,i=9702,x=0.47371944906908836,y=0.8829841445810995 a=eks,b=pan,i=9703,x=0.6629053709037614,y=0.2666968632816322 a=hat,b=wye,i=9704,x=0.0020992599710109028,y=0.7828207905256124 a=wye,b=eks,i=9705,x=0.8295502211195385,y=0.2601557950975687 a=pan,b=pan,i=9706,x=0.49968159892099573,y=0.8538626308087385 a=hat,b=zee,i=9707,x=0.452146182413364,y=0.6070096571093107 a=hat,b=hat,i=9708,x=0.20800822198744873,y=0.6831793769522073 a=pan,b=hat,i=9709,x=0.37466193491417743,y=0.9006405341772813 a=pan,b=pan,i=9710,x=0.7926733788975334,y=0.08649107188287852 a=eks,b=eks,i=9711,x=0.6600637787756933,y=0.8973761456806139 a=eks,b=pan,i=9712,x=0.6042851641458743,y=0.5283912780602698 a=pan,b=pan,i=9713,x=0.8335225275262462,y=0.6504888680594751 a=hat,b=hat,i=9714,x=0.08407860919578702,y=0.6696777791854102 a=eks,b=eks,i=9715,x=0.6688071850195556,y=0.8479172328203074 a=eks,b=pan,i=9716,x=0.7699539494161064,y=0.26819674031242324 a=zee,b=eks,i=9717,x=0.15919097637828838,y=0.1961372512286007 a=pan,b=eks,i=9718,x=0.764067350428244,y=0.40784722026028675 a=hat,b=zee,i=9719,x=0.43422195883532855,y=0.21527795148734652 a=hat,b=wye,i=9720,x=0.18548878820596515,y=0.0823708416566078 a=eks,b=hat,i=9721,x=0.3055689756821137,y=0.09846251941046569 a=eks,b=eks,i=9722,x=0.7595314601613131,y=0.33493549394323163 a=zee,b=eks,i=9723,x=0.6798345440149453,y=0.20549268600871629 a=pan,b=zee,i=9724,x=0.5536779382214667,y=0.5953194186331342 a=zee,b=hat,i=9725,x=0.07153658715465838,y=0.3044986057514285 a=zee,b=eks,i=9726,x=0.7429014874999341,y=0.769520753307292 a=zee,b=zee,i=9727,x=0.9994904324789629,y=0.9539638011649831 a=hat,b=eks,i=9728,x=0.8039188324095456,y=0.3485837756125213 a=zee,b=wye,i=9729,x=0.585248425583051,y=0.8575390870552795 a=wye,b=zee,i=9730,x=0.21280831790997046,y=0.215168894307449 a=pan,b=wye,i=9731,x=0.5632993384118764,y=0.039984476208001385 a=wye,b=wye,i=9732,x=0.8690690369493996,y=0.4780287234110929 a=pan,b=pan,i=9733,x=0.4805900786042281,y=0.16269527652434412 a=zee,b=zee,i=9734,x=0.685896959785486,y=0.04306632327231985 a=eks,b=hat,i=9735,x=0.9365415028222407,y=0.7049316644937267 a=wye,b=hat,i=9736,x=0.8357032803599334,y=0.5980478941599903 a=eks,b=wye,i=9737,x=0.9524795937075123,y=0.10018533556749787 a=eks,b=zee,i=9738,x=0.9571796062292364,y=0.23794282932532718 a=wye,b=zee,i=9739,x=0.9969978586906577,y=0.12087339658352203 a=hat,b=hat,i=9740,x=0.6123513158512692,y=0.6254032566567909 a=wye,b=hat,i=9741,x=0.3852066212224572,y=0.18704182599635633 a=hat,b=pan,i=9742,x=0.3298562598570899,y=0.07896336383457148 a=wye,b=eks,i=9743,x=0.9717135336552146,y=0.07632785790260654 a=wye,b=pan,i=9744,x=0.22511319050031164,y=0.027172244080271968 a=eks,b=wye,i=9745,x=0.8413814458463156,y=0.3006239950449451 a=wye,b=eks,i=9746,x=0.8712637246437533,y=0.3533804932864615 a=hat,b=zee,i=9747,x=0.7487247858158664,y=0.7159053727726352 a=wye,b=zee,i=9748,x=0.5840196841699298,y=0.4370626364171394 a=pan,b=zee,i=9749,x=0.34522090703048847,y=0.4157608834458977 a=hat,b=zee,i=9750,x=0.7718731752355878,y=0.003718233758628786 a=pan,b=pan,i=9751,x=0.9143236771785547,y=0.25370981239174295 a=pan,b=pan,i=9752,x=0.49208279855492576,y=0.20454810028776949 a=pan,b=hat,i=9753,x=0.9706978016906814,y=0.10150626192794265 a=hat,b=eks,i=9754,x=0.5026259494302875,y=0.8456607478858248 a=eks,b=zee,i=9755,x=0.5983063482292889,y=0.5332133759436987 a=hat,b=zee,i=9756,x=0.7064136847926241,y=0.44538611409928863 a=hat,b=eks,i=9757,x=0.008475751466850423,y=0.28105237534152183 a=pan,b=zee,i=9758,x=0.17107174260903157,y=0.37907028999046954 a=eks,b=hat,i=9759,x=0.017723241565128722,y=0.9328595930739089 a=eks,b=pan,i=9760,x=0.12671066296153322,y=0.5377141169726312 a=pan,b=pan,i=9761,x=0.5230226494775585,y=0.13327609324548828 a=hat,b=eks,i=9762,x=0.7178138929211814,y=0.1071446592333627 a=hat,b=eks,i=9763,x=0.5172215091010056,y=0.5656123978535788 a=hat,b=zee,i=9764,x=0.7656352275177252,y=0.2648922718032728 a=eks,b=hat,i=9765,x=0.48052681626037963,y=0.7749660798351525 a=wye,b=wye,i=9766,x=0.259817607695608,y=0.9840660882388936 a=zee,b=pan,i=9767,x=0.048130721334256,y=0.7454770180064983 a=pan,b=eks,i=9768,x=0.20367798282554506,y=0.2900189560591435 a=hat,b=pan,i=9769,x=0.25924528216321086,y=0.09380722776595263 a=zee,b=eks,i=9770,x=0.6363426074022088,y=0.4319301718266042 a=zee,b=zee,i=9771,x=0.3356843529120048,y=0.5926710392808378 a=zee,b=wye,i=9772,x=0.5622225319493308,y=0.8404440554821954 a=wye,b=eks,i=9773,x=0.13486296020405042,y=0.1370545330575903 a=hat,b=hat,i=9774,x=0.35744829640564457,y=0.6788365316031054 a=hat,b=wye,i=9775,x=0.24625364619227708,y=0.8195103714348378 a=pan,b=pan,i=9776,x=0.5528717365202791,y=0.6963979512688395 a=pan,b=pan,i=9777,x=0.2517658835424562,y=0.6092188620965916 a=zee,b=hat,i=9778,x=0.01504264188606863,y=0.5413773331319965 a=wye,b=hat,i=9779,x=0.5571763577936231,y=0.008720265560284046 a=hat,b=eks,i=9780,x=0.09487662655788398,y=0.6514663782722071 a=hat,b=zee,i=9781,x=0.04241382763446522,y=0.8022615952391015 a=pan,b=wye,i=9782,x=0.6824468663215681,y=0.48194582894494864 a=zee,b=zee,i=9783,x=0.9571941589309878,y=0.7438875241555649 a=zee,b=zee,i=9784,x=0.40696198225113067,y=0.5926120348164292 a=hat,b=hat,i=9785,x=0.32320628233550797,y=0.8120858769211963 a=wye,b=eks,i=9786,x=0.36572120295268673,y=0.4315097648133279 a=pan,b=pan,i=9787,x=0.536020466205729,y=0.36476940865976226 a=pan,b=zee,i=9788,x=0.18548410059983933,y=0.6484359981774218 a=pan,b=wye,i=9789,x=0.7500082437438368,y=0.6736777772258289 a=hat,b=zee,i=9790,x=0.32608913911284954,y=0.06744557277974006 a=eks,b=hat,i=9791,x=0.6359822783546621,y=0.6518259855994504 a=zee,b=wye,i=9792,x=0.4220728880621055,y=0.17140084746735773 a=wye,b=eks,i=9793,x=0.11689471664414974,y=0.1874183258828398 a=wye,b=pan,i=9794,x=0.4771768380141904,y=0.47458700283464794 a=zee,b=wye,i=9795,x=0.7547326233775347,y=0.2923139817159962 a=pan,b=hat,i=9796,x=0.04688093205740962,y=0.50212295582611 a=hat,b=eks,i=9797,x=0.4801061637157764,y=0.27686764370925665 a=zee,b=pan,i=9798,x=0.2234307924316019,y=0.9911544429536859 a=pan,b=wye,i=9799,x=0.9939181050884636,y=0.9933949713028724 a=eks,b=wye,i=9800,x=0.3244253214963203,y=0.5909643779096942 a=pan,b=eks,i=9801,x=0.40857906819081213,y=0.9965875678612408 a=eks,b=zee,i=9802,x=0.03433864233340278,y=0.08512282774742341 a=hat,b=eks,i=9803,x=0.2637466257688432,y=0.91230604083564 a=wye,b=hat,i=9804,x=0.9290204990737289,y=0.39908048283039077 a=pan,b=pan,i=9805,x=0.03871655125329254,y=0.6099093593302857 a=hat,b=hat,i=9806,x=0.7581986258233882,y=0.6723938004232705 a=hat,b=zee,i=9807,x=0.734026221575298,y=0.5060212582772865 a=zee,b=zee,i=9808,x=0.8976695035586633,y=0.8107371161879025 a=zee,b=eks,i=9809,x=0.9007397692300039,y=0.744200950461551 a=zee,b=wye,i=9810,x=0.33878497822294384,y=0.19641652801433074 a=wye,b=eks,i=9811,x=0.3684889443586322,y=0.03845017409345586 a=eks,b=eks,i=9812,x=0.5467455763864191,y=0.2509547627082641 a=zee,b=pan,i=9813,x=0.8206715556120792,y=0.8639781360005004 a=hat,b=wye,i=9814,x=0.34212469593392425,y=0.20687141477181548 a=hat,b=pan,i=9815,x=0.17753782684157615,y=0.0015438604368104292 a=pan,b=hat,i=9816,x=0.24876592451844848,y=0.4470518528813471 a=wye,b=wye,i=9817,x=0.7049827500065716,y=0.70700844125317 a=zee,b=wye,i=9818,x=0.7922870761657094,y=0.1588053154611868 a=hat,b=zee,i=9819,x=0.19261418898624927,y=0.050366139741013005 a=hat,b=pan,i=9820,x=0.5447052480269977,y=0.8699888671698426 a=eks,b=wye,i=9821,x=0.5189946092707575,y=0.6854994867317263 a=eks,b=zee,i=9822,x=0.7728584654655655,y=0.8255138151084206 a=wye,b=hat,i=9823,x=0.7885587074785081,y=0.8643021021880486 a=wye,b=zee,i=9824,x=0.7856139049382169,y=0.18039878866135772 a=wye,b=hat,i=9825,x=0.5289400839880876,y=0.015600624873499225 a=eks,b=pan,i=9826,x=0.2030275078795114,y=0.7367196912046005 a=wye,b=hat,i=9827,x=0.2296202003399993,y=0.10085387835757498 a=eks,b=eks,i=9828,x=0.7116944851584103,y=0.4451057001626685 a=pan,b=pan,i=9829,x=0.1561292001719159,y=0.16006739551266214 a=zee,b=wye,i=9830,x=0.022447139657367665,y=0.7657756294873818 a=pan,b=hat,i=9831,x=0.07903067560527932,y=0.06301267712877379 a=hat,b=hat,i=9832,x=0.6422615702526209,y=0.8249323364395087 a=zee,b=hat,i=9833,x=0.10035889696290079,y=0.003028321603898987 a=hat,b=zee,i=9834,x=0.2640449383149195,y=0.37076593348410314 a=eks,b=wye,i=9835,x=0.5874685326990423,y=0.9287556289542644 a=wye,b=pan,i=9836,x=0.8763125291386116,y=0.5144780339183038 a=zee,b=eks,i=9837,x=0.65481575495434,y=0.7500209738973791 a=eks,b=pan,i=9838,x=0.6496315038661542,y=0.6072257440552286 a=eks,b=wye,i=9839,x=0.9533298751342247,y=0.023940678831367967 a=zee,b=wye,i=9840,x=0.2852685772877177,y=0.691521855604441 a=eks,b=hat,i=9841,x=0.09722173469836548,y=0.36827480828558046 a=zee,b=wye,i=9842,x=0.9106754203674021,y=0.44421367548499935 a=zee,b=zee,i=9843,x=0.43260196585756017,y=0.7253288611322654 a=wye,b=pan,i=9844,x=0.12361870847069467,y=0.8005113079266706 a=hat,b=pan,i=9845,x=0.75413528558763,y=0.25353880305437526 a=hat,b=eks,i=9846,x=0.39360425072719285,y=0.9727010611978959 a=eks,b=eks,i=9847,x=0.36408179966880305,y=0.005301040380198518 a=zee,b=hat,i=9848,x=0.7494017826915185,y=0.5716008160658336 a=pan,b=pan,i=9849,x=0.07314118820090576,y=0.6728814876086208 a=pan,b=pan,i=9850,x=0.03810488399365641,y=0.6301648369861882 a=pan,b=pan,i=9851,x=0.001361386759249128,y=0.25792849048845146 a=zee,b=pan,i=9852,x=0.293496771264693,y=0.5611287273924571 a=wye,b=hat,i=9853,x=0.18556020761414638,y=0.5317691684291805 a=hat,b=zee,i=9854,x=0.5972939543247376,y=0.4330238320114945 a=wye,b=pan,i=9855,x=0.6182578764501776,y=0.7655458252282237 a=pan,b=hat,i=9856,x=0.8102716531871033,y=0.8313089740346422 a=zee,b=pan,i=9857,x=0.466306200678794,y=0.10723178210789208 a=eks,b=eks,i=9858,x=0.3843542033136572,y=0.943645502584351 a=pan,b=eks,i=9859,x=0.25317568143298785,y=0.546876245709709 a=pan,b=pan,i=9860,x=0.5805216264198891,y=0.7328584964292528 a=zee,b=hat,i=9861,x=0.2178144713563437,y=0.7034064666412133 a=pan,b=eks,i=9862,x=0.5507783340308107,y=0.8117197523869161 a=hat,b=hat,i=9863,x=0.29207020272823003,y=0.3025947324662317 a=eks,b=wye,i=9864,x=0.11439725902216524,y=0.07940989075873717 a=eks,b=zee,i=9865,x=0.007673493448299595,y=0.7065454787031791 a=eks,b=hat,i=9866,x=0.4975899292735726,y=0.004921317195285879 a=zee,b=eks,i=9867,x=0.02662315353765099,y=0.34265021760387904 a=pan,b=pan,i=9868,x=0.4854194107628803,y=0.3198466348114496 a=hat,b=zee,i=9869,x=0.9595189622375838,y=0.501564353037085 a=zee,b=wye,i=9870,x=0.5215850818114982,y=0.4286413152070583 a=zee,b=hat,i=9871,x=0.6250842276723021,y=0.6957696470514947 a=eks,b=eks,i=9872,x=0.2737032476182002,y=0.9151070142618852 a=hat,b=wye,i=9873,x=0.6217399084607139,y=0.1324645008753036 a=hat,b=eks,i=9874,x=0.2999314090059486,y=0.6837336951519206 a=hat,b=zee,i=9875,x=0.748712308729834,y=0.7138449723779594 a=zee,b=wye,i=9876,x=0.8136200511878549,y=0.8072663619726874 a=eks,b=zee,i=9877,x=0.4863731414322163,y=0.1035362785381897 a=pan,b=eks,i=9878,x=0.18800091230044202,y=0.6362766839502966 a=zee,b=wye,i=9879,x=0.20901422499230626,y=0.4434307845301825 a=wye,b=eks,i=9880,x=0.7843765179845881,y=0.9652357480134778 a=zee,b=wye,i=9881,x=0.7862677717692486,y=0.5179978676865895 a=pan,b=pan,i=9882,x=0.7627902949547447,y=0.19790202442128657 a=zee,b=zee,i=9883,x=0.9799742729336977,y=0.28992926827299315 a=zee,b=eks,i=9884,x=0.05789237193201191,y=0.5580049129122333 a=pan,b=zee,i=9885,x=0.8352546612543933,y=0.29808563018476386 a=eks,b=zee,i=9886,x=0.6612732451934941,y=0.8821040941341458 a=zee,b=wye,i=9887,x=0.03800555126962368,y=0.5564528314361259 a=wye,b=wye,i=9888,x=0.15173705344284016,y=0.8028950342833062 a=eks,b=pan,i=9889,x=0.4757333931069331,y=0.6709064008045604 a=zee,b=zee,i=9890,x=0.04473360870043863,y=0.7488172425798428 a=pan,b=wye,i=9891,x=0.6641701958582154,y=0.045390088141842866 a=pan,b=wye,i=9892,x=0.6400396948750516,y=0.2741016723165629 a=wye,b=hat,i=9893,x=0.07086887541312281,y=0.9995743686923368 a=zee,b=wye,i=9894,x=0.6202100179528263,y=0.9712368683190139 a=pan,b=hat,i=9895,x=0.8641234318244241,y=0.893546531152826 a=eks,b=hat,i=9896,x=0.10089977663900951,y=0.40511056317517313 a=hat,b=pan,i=9897,x=0.1706694949653771,y=0.8882049668710424 a=hat,b=eks,i=9898,x=0.9012519500883333,y=0.35484059538741897 a=eks,b=hat,i=9899,x=0.26412200768049177,y=0.8469250510935257 a=pan,b=eks,i=9900,x=0.18024054303984605,y=0.6531731873858931 a=wye,b=hat,i=9901,x=0.8417240952654167,y=0.09572553012932483 a=pan,b=zee,i=9902,x=0.9054776364609202,y=0.6259317176046434 a=zee,b=hat,i=9903,x=0.9287944849908445,y=0.46735676241217305 a=pan,b=zee,i=9904,x=0.5481438224523807,y=0.7183018840232132 a=hat,b=wye,i=9905,x=0.5457200264172307,y=0.29150693945838846 a=eks,b=pan,i=9906,x=0.19123694955232085,y=0.1361773881166165 a=pan,b=pan,i=9907,x=0.9805858575888526,y=0.35107718527657394 a=wye,b=hat,i=9908,x=0.8027037826343639,y=0.02454307542444223 a=eks,b=hat,i=9909,x=0.5392855167210358,y=0.04490931508757068 a=hat,b=hat,i=9910,x=0.07042038780612936,y=0.5146702744032997 a=pan,b=eks,i=9911,x=0.7646508656008143,y=0.9446343254356182 a=zee,b=wye,i=9912,x=0.4701991772804557,y=0.33405458598495386 a=pan,b=eks,i=9913,x=0.8147835691088603,y=0.6617843834409757 a=pan,b=zee,i=9914,x=0.9240645650332355,y=0.8621654329742796 a=eks,b=zee,i=9915,x=0.6616625895734575,y=0.14135816098909115 a=wye,b=pan,i=9916,x=0.3042515765931557,y=0.37717959119403555 a=hat,b=zee,i=9917,x=0.9463027359513574,y=0.20816847808308991 a=pan,b=zee,i=9918,x=0.062017678365430595,y=0.11198470904331581 a=zee,b=wye,i=9919,x=0.5748726266575598,y=0.3779573684358648 a=hat,b=wye,i=9920,x=0.3438737626946553,y=0.5489498676687791 a=wye,b=wye,i=9921,x=0.6906719134435684,y=0.8555178209462388 a=hat,b=wye,i=9922,x=0.9728689411167353,y=0.8157055538148639 a=wye,b=hat,i=9923,x=0.20975092024121644,y=0.6588638151332867 a=hat,b=pan,i=9924,x=0.3254178263556141,y=0.9839978841946503 a=eks,b=hat,i=9925,x=0.7275202634311879,y=0.2129559326323187 a=hat,b=eks,i=9926,x=0.1541309399763774,y=0.3791445762682304 a=wye,b=pan,i=9927,x=0.8783682319990223,y=0.6933957357140185 a=eks,b=eks,i=9928,x=0.09936486720481041,y=0.8907110968753766 a=eks,b=pan,i=9929,x=0.5193758781368972,y=0.409871414549149 a=pan,b=hat,i=9930,x=0.5677825974360403,y=0.4567634115934158 a=hat,b=hat,i=9931,x=0.22344053593327007,y=0.3136460886229182 a=eks,b=wye,i=9932,x=0.7744014553941428,y=0.318908757325456 a=zee,b=zee,i=9933,x=0.5227775810997735,y=0.10751874257421012 a=hat,b=hat,i=9934,x=0.20145807804290206,y=0.41891252140867674 a=wye,b=hat,i=9935,x=0.25910371069218296,y=0.6568892395017885 a=eks,b=hat,i=9936,x=0.7556816893135765,y=0.7737786856558144 a=pan,b=zee,i=9937,x=0.5546876661250906,y=0.403008800918636 a=eks,b=wye,i=9938,x=0.5330080701180497,y=0.22709767551835436 a=hat,b=wye,i=9939,x=0.208097253807903,y=0.11669571201990991 a=hat,b=wye,i=9940,x=0.8460880203022336,y=0.8184128241834582 a=pan,b=hat,i=9941,x=0.5525707759822344,y=0.2904413914902232 a=pan,b=eks,i=9942,x=0.5757720306595114,y=0.008223444000978186 a=zee,b=wye,i=9943,x=0.4913245348903704,y=0.25864014284309744 a=hat,b=pan,i=9944,x=0.09459751273648653,y=0.9299307121234656 a=zee,b=pan,i=9945,x=0.44635620401009446,y=0.5129261056747197 a=zee,b=zee,i=9946,x=0.13202631656529729,y=0.021604794833400942 a=pan,b=hat,i=9947,x=0.8783008100979538,y=0.6172168477305974 a=pan,b=eks,i=9948,x=0.6047433842453397,y=0.53470873199638 a=pan,b=pan,i=9949,x=0.12278928201439199,y=0.3424112106292362 a=hat,b=hat,i=9950,x=0.8421815876690498,y=0.04784842315950366 a=hat,b=eks,i=9951,x=0.23150439446451176,y=0.362011464774759 a=hat,b=zee,i=9952,x=0.187055253929304,y=0.7872831108348827 a=pan,b=eks,i=9953,x=0.9690028290247679,y=0.5626274346583657 a=eks,b=pan,i=9954,x=0.703550423241368,y=0.8640890526817995 a=wye,b=wye,i=9955,x=0.1708681258811735,y=0.5385038134896668 a=wye,b=zee,i=9956,x=0.3732949851683247,y=0.9189853496560824 a=wye,b=hat,i=9957,x=0.6466417304468489,y=0.4955279123282218 a=pan,b=hat,i=9958,x=0.8447936799573535,y=0.45561414780776455 a=pan,b=wye,i=9959,x=0.5523199497193726,y=0.844808439474632 a=wye,b=hat,i=9960,x=0.1339766165243773,y=0.90209906677784 a=eks,b=pan,i=9961,x=0.0018643836079239584,y=0.22214207434571398 a=hat,b=wye,i=9962,x=0.27668665603289977,y=0.8949840037944731 a=wye,b=eks,i=9963,x=0.7660038618991021,y=0.0724322389595311 a=zee,b=wye,i=9964,x=0.14503471143188695,y=0.6572300809799787 a=eks,b=hat,i=9965,x=0.45140832054850244,y=0.4872441473665683 a=hat,b=zee,i=9966,x=0.09915562191171134,y=0.19911839331011605 a=eks,b=wye,i=9967,x=0.9705821420611176,y=0.1682630903706045 a=pan,b=wye,i=9968,x=0.3049598321025262,y=0.8146693779796157 a=pan,b=pan,i=9969,x=0.4470842181156869,y=0.8188080614674343 a=hat,b=zee,i=9970,x=0.7615491651523039,y=0.3309208743280688 a=eks,b=hat,i=9971,x=0.16013813822306744,y=0.18970582735969377 a=hat,b=wye,i=9972,x=0.01092212097676093,y=0.19287438329005957 a=eks,b=hat,i=9973,x=0.9278177925083565,y=0.14699304090594456 a=hat,b=wye,i=9974,x=0.34339938249336444,y=0.6938846096026958 a=zee,b=eks,i=9975,x=0.14164773949664755,y=0.16897907378815158 a=hat,b=eks,i=9976,x=0.9051959081404853,y=0.3084507684845691 a=eks,b=zee,i=9977,x=0.4549080098494652,y=0.2027740955809184 a=pan,b=hat,i=9978,x=0.18068678390966952,y=0.24718291910572177 a=wye,b=hat,i=9979,x=0.48039589777666136,y=0.8099902771432259 a=pan,b=wye,i=9980,x=0.029289120404769053,y=0.5923039290360491 a=eks,b=pan,i=9981,x=0.2544586487901952,y=0.4578886296197162 a=wye,b=eks,i=9982,x=0.34998222187670314,y=0.3061867938018288 a=wye,b=hat,i=9983,x=0.4640332038264391,y=0.019243858556094673 a=pan,b=hat,i=9984,x=0.48914378417931326,y=0.36728976081695264 a=hat,b=zee,i=9985,x=0.5155567078470872,y=0.6010598365861822 a=hat,b=wye,i=9986,x=0.687016150489404,y=0.14515901345978532 a=hat,b=hat,i=9987,x=0.429284826906265,y=0.1787642439603777 a=zee,b=zee,i=9988,x=0.16947406856911285,y=0.6350945353981919 a=wye,b=eks,i=9989,x=0.8561772298898314,y=0.6874185671784931 a=eks,b=pan,i=9990,x=0.06739304569008775,y=0.2341964277411741 a=hat,b=wye,i=9991,x=0.3633322891461138,y=0.12892395206278184 a=wye,b=zee,i=9992,x=0.348286564151128,y=0.9559121889830311 a=eks,b=eks,i=9993,x=0.8231194474452225,y=0.08896471922413896 a=pan,b=pan,i=9994,x=0.7310844732875349,y=0.16823055115657648 a=pan,b=eks,i=9995,x=0.8981803676290844,y=0.34464277045717084 a=zee,b=wye,i=9996,x=0.72761807629368,y=0.6860394313092489 a=pan,b=hat,i=9997,x=0.700242583670093,y=0.27129926260336745 a=eks,b=pan,i=9998,x=0.5554835956450555,y=0.7053505857791378 a=wye,b=pan,i=9999,x=0.19004481082030356,y=0.8073900575802198 a=zee,b=pan,i=10000,x=0.02349941792343435,y=0.19861196418373683 miller-5.6.2/data/mk5g.rb000077500000000000000000000001751354153536500151310ustar00rootroot00000000000000#!/usr/bin/env ruby 5000000000.times do u = rand < 0.5 ? 0 : 1 v = rand < 0.1 ? 0 : 1 puts "#{u} #{v}" end puts "3 5" miller-5.6.2/data/s1.sh000077500000000000000000000002561354153536500146200ustar00rootroot00000000000000#!/bin/sh mlr --opprint "$@" stats1 -a mean,sum,count,min,max -f i,x,y -g a,b ../data/medium echo mlr --opprint "$@" stats1 -a mean,sum,count,min,max -f i,x,y ../data/medium miller-5.6.2/data/s2.sh000077500000000000000000000003561354153536500146220ustar00rootroot00000000000000#!/bin/sh mlr --opprint --right "$@" stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2,x2,x2 -g a,b ../data/mediumwide echo mlr --oxtab --right "$@" stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2,x2,x2 ../data/mediumwide miller-5.6.2/data/s3.sh000077500000000000000000000002321354153536500146140ustar00rootroot00000000000000#!/bin/sh mlr --opprint "$@" step -a rsum,delta,counter -f x,y -g a ../data/small echo mlr --opprint "$@" step -a rsum,delta,counter -f x,y ../data/small miller-5.6.2/data/small000066400000000000000000000011121354153536500147610ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 miller-5.6.2/data/small.csv000066400000000000000000000007601354153536500155630ustar00rootroot00000000000000a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 miller-5.6.2/data/small2000066400000000000000000000005111354153536500150450ustar00rootroot00000000000000a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001 a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134 a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930 a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758 a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627 miller-5.6.2/data/smallwide000066400000000000000000000024001354153536500156330ustar00rootroot00000000000000a=cat,b=pan,i=18,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 a=pan,b=wye,i=14,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 a=wye,b=cat,i=16,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 a=dog,b=hat,i=13,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 a=dog,b=pan,i=17,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 a=wye,b=cat,i=19,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 a=dog,b=hat,i=19,x=0.8500003149528544,y=0.2984098741712895,x2=0.7225005354199517,xy=0.25364848703063775,y2=0.08904845300292483 a=pan,b=pan,i=16,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 a=hat,b=hat,i=13,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 a=wye,b=hat,i=14,x=0.3834648944206174,y=0.4999709279216641,x2=0.14704532525301522,xy=0.19172129908885902,y2=0.24997092876684981 miller-5.6.2/data/stuv000066400000000000000000000001001354153536500146460ustar00rootroot00000000000000a=s,b=t,x=1,y=2 a=u,b=v,x=3,y=4 a=s,b=t,x=5,y=6 a=u,b=w,x=7,y=9 miller-5.6.2/doc/000077500000000000000000000000001354153536500135675ustar00rootroot00000000000000miller-5.6.2/doc/.vimrc000066400000000000000000000001061354153536500147050ustar00rootroot00000000000000map \r :w:!clear; ./poki map \f :w:!clear; ./poki miller-5.6.2/doc/10-1.sh000077500000000000000000000001421354153536500145010ustar00rootroot00000000000000grep op=cache log.txt \ | mlr --idkvp --opprint stats1 -a mean -f hit -g type then sort -f type miller-5.6.2/doc/10-2.sh000077500000000000000000000002051354153536500145020ustar00rootroot00000000000000mlr --from log.txt --opprint \ filter 'is_present($batch_size)' \ then step -a delta -f time,num_filtered \ then sec2gmt time miller-5.6.2/doc/10-min.html000066400000000000000000001133001354153536500154540ustar00rootroot00000000000000 10-minute intro

CSV-file examples

Sample CSV data file:

$ cat example.csv
color,shape,flag,index,quantity,rate
yellow,triangle,1,11,43.6498,9.8870
red,square,1,15,79.2778,0.0130
red,circle,1,16,13.8103,2.9010
red,square,0,48,77.5542,7.4670
purple,triangle,0,51,81.2290,8.5910
red,square,0,64,77.1991,9.5310
purple,triangle,0,65,80.1405,5.8240
yellow,circle,1,73,63.9785,4.2370
yellow,circle,1,87,63.5058,8.3350
purple,square,0,91,72.3735,8.2430

mlr cat is like cat ...

$ mlr --csv cat example.csv
color,shape,flag,index,quantity,rate
yellow,triangle,1,11,43.6498,9.8870
red,square,1,15,79.2778,0.0130
red,circle,1,16,13.8103,2.9010
red,square,0,48,77.5542,7.4670
purple,triangle,0,51,81.2290,8.5910
red,square,0,64,77.1991,9.5310
purple,triangle,0,65,80.1405,5.8240
yellow,circle,1,73,63.9785,4.2370
yellow,circle,1,87,63.5058,8.3350
purple,square,0,91,72.3735,8.2430

... but it can also do format conversion (here, to pretty-printed tabular format):

$ mlr --icsv --opprint cat example.csv
color  shape    flag index quantity rate
yellow triangle 1    11    43.6498  9.8870
red    square   1    15    79.2778  0.0130
red    circle   1    16    13.8103  2.9010
red    square   0    48    77.5542  7.4670
purple triangle 0    51    81.2290  8.5910
red    square   0    64    77.1991  9.5310
purple triangle 0    65    80.1405  5.8240
yellow circle   1    73    63.9785  4.2370
yellow circle   1    87    63.5058  8.3350
purple square   0    91    72.3735  8.2430

mlr head and mlr tail count records rather than lines. The CSV header is included either way:

$ mlr --csv head -n 4 example.csv
color,shape,flag,index,quantity,rate
yellow,triangle,1,11,43.6498,9.8870
red,square,1,15,79.2778,0.0130
red,circle,1,16,13.8103,2.9010
red,square,0,48,77.5542,7.4670

$ mlr --csv tail -n 4 example.csv
color,shape,flag,index,quantity,rate
purple,triangle,0,65,80.1405,5.8240
yellow,circle,1,73,63.9785,4.2370
yellow,circle,1,87,63.5058,8.3350
purple,square,0,91,72.3735,8.2430

Sort primarily alphabetically on one field, then secondarily numerically descending on another field:

$ mlr --icsv --opprint sort -f shape -nr index example.csv
color  shape    flag index quantity rate
yellow circle   1    87    63.5058  8.3350
yellow circle   1    73    63.9785  4.2370
red    circle   1    16    13.8103  2.9010
purple square   0    91    72.3735  8.2430
red    square   0    64    77.1991  9.5310
red    square   0    48    77.5542  7.4670
red    square   1    15    79.2778  0.0130
purple triangle 0    65    80.1405  5.8240
purple triangle 0    51    81.2290  8.5910
yellow triangle 1    11    43.6498  9.8870

Use cut to retain only specified fields, in input-data order:

$ mlr --icsv --opprint cut -f flag,shape example.csv
shape    flag
triangle 1
square   1
circle   1
square   0
triangle 0
square   0
triangle 0
circle   1
circle   1
square   0

Use cut -o to retain only specified fields, in your specified order:

$ mlr --icsv --opprint cut -o -f flag,shape example.csv
flag shape
1    triangle
1    square
1    circle
0    square
0    triangle
0    square
0    triangle
1    circle
1    circle
0    square

Use cut -x to omit specified fields:

$ mlr --icsv --opprint cut -x -f flag,shape example.csv
color  index quantity rate
yellow 11    43.6498  9.8870
red    15    79.2778  0.0130
red    16    13.8103  2.9010
red    48    77.5542  7.4670
purple 51    81.2290  8.5910
red    64    77.1991  9.5310
purple 65    80.1405  5.8240
yellow 73    63.9785  4.2370
yellow 87    63.5058  8.3350
purple 91    72.3735  8.2430

Use filter to retain specified records:

$ mlr --icsv --opprint filter '$color == "red"' example.csv
color shape  flag index quantity rate
red   square 1    15    79.2778  0.0130
red   circle 1    16    13.8103  2.9010
red   square 0    48    77.5542  7.4670
red   square 0    64    77.1991  9.5310

$ mlr --icsv --opprint filter '$color == "red" && $flag == 1' example.csv
color shape  flag index quantity rate
red   square 1    15    79.2778  0.0130
red   circle 1    16    13.8103  2.9010

Use put to add/replace fields which are computed from other fields:

$ mlr --icsv --opprint put '$ratio = $quantity / $rate; $color_shape = $color . "_" . $shape' example.csv
color  shape    flag index quantity rate   ratio       color_shape
yellow triangle 1    11    43.6498  9.8870 4.414868    yellow_triangle
red    square   1    15    79.2778  0.0130 6098.292308 red_square
red    circle   1    16    13.8103  2.9010 4.760531    red_circle
red    square   0    48    77.5542  7.4670 10.386260   red_square
purple triangle 0    51    81.2290  8.5910 9.455127    purple_triangle
red    square   0    64    77.1991  9.5310 8.099790    red_square
purple triangle 0    65    80.1405  5.8240 13.760388   purple_triangle
yellow circle   1    73    63.9785  4.2370 15.099953   yellow_circle
yellow circle   1    87    63.5058  8.3350 7.619172    yellow_circle
purple square   0    91    72.3735  8.2430 8.779995    purple_square

Even though Miller’s main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index. Use $[[3]] to access the name of field 3 or $[[[3]]] to access the value of field 3:

$ mlr --icsv --opprint put '$[[3]] = "NEW"' example.csv
color  shape    NEW index quantity rate
yellow triangle 1   11    43.6498  9.8870
red    square   1   15    79.2778  0.0130
red    circle   1   16    13.8103  2.9010
red    square   0   48    77.5542  7.4670
purple triangle 0   51    81.2290  8.5910
red    square   0   64    77.1991  9.5310
purple triangle 0   65    80.1405  5.8240
yellow circle   1   73    63.9785  4.2370
yellow circle   1   87    63.5058  8.3350
purple square   0   91    72.3735  8.2430

$ mlr --icsv --opprint put '$[[[3]]] = "NEW"' example.csv
color  shape    flag index quantity rate
yellow triangle NEW  11    43.6498  9.8870
red    square   NEW  15    79.2778  0.0130
red    circle   NEW  16    13.8103  2.9010
red    square   NEW  48    77.5542  7.4670
purple triangle NEW  51    81.2290  8.5910
red    square   NEW  64    77.1991  9.5310
purple triangle NEW  65    80.1405  5.8240
yellow circle   NEW  73    63.9785  4.2370
yellow circle   NEW  87    63.5058  8.3350
purple square   NEW  91    72.3735  8.2430

JSON output:

$ mlr --icsv --ojson put '$ratio = $quantity/$rate; $shape = toupper($shape)' example.csv
{ "color": "yellow", "shape": "TRIANGLE", "flag": 1, "index": 11, "quantity": 43.6498, "rate": 9.8870, "ratio": 4.414868 }
{ "color": "red", "shape": "SQUARE", "flag": 1, "index": 15, "quantity": 79.2778, "rate": 0.0130, "ratio": 6098.292308 }
{ "color": "red", "shape": "CIRCLE", "flag": 1, "index": 16, "quantity": 13.8103, "rate": 2.9010, "ratio": 4.760531 }
{ "color": "red", "shape": "SQUARE", "flag": 0, "index": 48, "quantity": 77.5542, "rate": 7.4670, "ratio": 10.386260 }
{ "color": "purple", "shape": "TRIANGLE", "flag": 0, "index": 51, "quantity": 81.2290, "rate": 8.5910, "ratio": 9.455127 }
{ "color": "red", "shape": "SQUARE", "flag": 0, "index": 64, "quantity": 77.1991, "rate": 9.5310, "ratio": 8.099790 }
{ "color": "purple", "shape": "TRIANGLE", "flag": 0, "index": 65, "quantity": 80.1405, "rate": 5.8240, "ratio": 13.760388 }
{ "color": "yellow", "shape": "CIRCLE", "flag": 1, "index": 73, "quantity": 63.9785, "rate": 4.2370, "ratio": 15.099953 }
{ "color": "yellow", "shape": "CIRCLE", "flag": 1, "index": 87, "quantity": 63.5058, "rate": 8.3350, "ratio": 7.619172 }
{ "color": "purple", "shape": "SQUARE", "flag": 0, "index": 91, "quantity": 72.3735, "rate": 8.2430, "ratio": 8.779995 }

JSON output with vertical-formatting flags:

$ mlr --icsv --ojson --jvstack --jlistwrap tail -n 2 example.csv
[
{
  "color": "yellow",
  "shape": "circle",
  "flag": 1,
  "index": 87,
  "quantity": 63.5058,
  "rate": 8.3350
}
,{
  "color": "purple",
  "shape": "square",
  "flag": 0,
  "index": 91,
  "quantity": 72.3735,
  "rate": 8.2430
}
]

Use then to pipe commands together. Also, the -g option for many Miller commands is for group-by: here, head -n 1 -g shape outputs the first record for each distinct value of the shape field. This means we’re finding the record with highest index field for each distinct shape field:

$ mlr --icsv --opprint sort -f shape -nr index then head -n 1 -g shape example.csv
color  shape    flag index quantity rate
yellow circle   1    87    63.5058  8.3350
purple square   0    91    72.3735  8.2430
purple triangle 0    65    80.1405  5.8240

Statistics can be computed with or without group-by field(s). Also, the first of these two examples uses --oxtab output format which is a nice alternative to --opprint when you have lots of columns:

$ mlr --icsv --oxtab --from example.csv stats1 -a p0,p10,p25,p50,p75,p90,p99,p100 -f rate
rate_p0   0.013000
rate_p10  2.901000
rate_p25  4.237000
rate_p50  8.243000
rate_p75  8.591000
rate_p90  9.887000
rate_p99  9.887000
rate_p100 9.887000

$ mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape
shape    quantity_count quantity_min quantity_mean quantity_max
triangle 3              43.649800    68.339767     81.229000
square   4              72.373500    76.601150     79.277800
circle   3              13.810300    47.098200     63.978500

$ mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape,color
shape    color  quantity_count quantity_min quantity_mean quantity_max
triangle yellow 1              43.649800    43.649800     43.649800
square   red    3              77.199100    78.010367     79.277800
circle   red    1              13.810300    13.810300     13.810300
triangle purple 2              80.140500    80.684750     81.229000
circle   yellow 2              63.505800    63.742150     63.978500
square   purple 1              72.373500    72.373500     72.373500

Choices for printing to files

Often we want to print output to the screen. Miller does this by default, as we’ve seen in the previous examples.

Sometimes we want to print output to another file: just use '> outputfilenamegoeshere' at the end of your command:
% mlr --icsv --opprint cat example.csv > newfile.csv
# Output goes to the new file;
# nothing is printed to the screen.
% cat newfile.csv 
color  shape    flag index quantity rate
yellow triangle 1    11    43.6498  9.8870
red    square   1    15    79.2778  0.0130
red    circle   1    16    13.8103  2.9010
red    square   0    48    77.5542  7.4670
purple triangle 0    51    81.2290  8.5910
red    square   0    64    77.1991  9.5310
purple triangle 0    65    80.1405  5.8240
yellow circle   1    73    63.9785  4.2370
yellow circle   1    87    63.5058  8.3350
purple square   0    91    72.3735  8.2430

Other times we just want our files to be changed in-place: just use 'mlr -I'.
% cp example.csv newfile.txt

% cat newfile.txt
color,shape,flag,index,quantity,rate
yellow,triangle,1,11,43.6498,9.8870
red,square,1,15,79.2778,0.0130
red,circle,1,16,13.8103,2.9010
red,square,0,48,77.5542,7.4670
purple,triangle,0,51,81.2290,8.5910
red,square,0,64,77.1991,9.5310
purple,triangle,0,65,80.1405,5.8240
yellow,circle,1,73,63.9785,4.2370
yellow,circle,1,87,63.5058,8.3350
purple,square,0,91,72.3735,8.2430
% mlr -I --icsv --opprint cat newfile.txt

% cat newfile.txt
color  shape    flag index quantity rate
yellow triangle 1    11    43.6498  9.8870
red    square   1    15    79.2778  0.0130
red    circle   1    16    13.8103  2.9010
red    square   0    48    77.5542  7.4670
purple triangle 0    51    81.2290  8.5910
red    square   0    64    77.1991  9.5310
purple triangle 0    65    80.1405  5.8240
yellow circle   1    73    63.9785  4.2370
yellow circle   1    87    63.5058  8.3350
purple square   0    91    72.3735  8.2430

Also using mlr -I you can bulk-operate on lots of files: e.g.
mlr -I --csv cut -x -f unwanted_column_name *.csv

If you like, you can first copy off your original data somewhere else, before doing in-place operations.

Lastly, using tee within put, you can split your input data into separate files per one or more field names:

$ mlr --csv --from example.csv put -q 'tee > $shape.".csv", $*'

$ cat circle.csv
color,shape,flag,index,quantity,rate
red,circle,1,16,13.8103,2.9010
yellow,circle,1,73,63.9785,4.2370
yellow,circle,1,87,63.5058,8.3350

$ cat square.csv
color,shape,flag,index,quantity,rate
red,square,1,15,79.2778,0.0130
red,square,0,48,77.5542,7.4670
red,square,0,64,77.1991,9.5310
purple,square,0,91,72.3735,8.2430

$ cat triangle.csv
color,shape,flag,index,quantity,rate
yellow,triangle,1,11,43.6498,9.8870
purple,triangle,0,51,81.2290,8.5910
purple,triangle,0,65,80.1405,5.8240

Other-format examples

What’s a CSV file, really? It’s an array of rows, or records, each being a list of key-value pairs, or fields: for CSV it so happens that all the keys are shared in the header line and the values vary data line by data line.

For example, if you have

shape,flag,index
circle,1,24
square,0,36

then that’s a way of saying

shape=circle,flag=1,index=24
shape=square,flag=0,index=36

Data written this way are called DKVP, for delimited key-value pairs.

We’ve also already seen other ways to write the same data:

CSV                               PPRINT                 JSON
shape,flag,index                  shape  flag index      [
circle,1,24                       circle 1    24           {
square,0,36                       square 0    36             "shape": "circle",
                                                             "flag": 1,
                                                             "index": 24
                                                           },
DKVP                              XTAB                     {
shape=circle,flag=1,index=24      shape circle               "shape": "square",
shape=square,flag=0,index=36      flag  1                    "flag": 0,
                                  index 24                   "index": 36
                                                           }
                                  shape square           ]
                                  flag  0
                                  index 36

Anything we can do with CSV input data, we can do with any other format input data. And you can read from one format, do any record-processing, and output to the same format as the input, or to a different output format.

SQL-output examples

I like to produce SQL-query output with header-column and tab delimiter: this is CSV but with a tab instead of a comma, also known as TSV. Then I post-process with mlr --tsv or mlr --tsvlite. This means I can do some (or all, or none) of my data processing within SQL queries, and some (or none, or all) of my data processing using Miller — whichever is most convenient for my needs at the moment.

For example, using default output formatting in mysql we get formatting like Miller’s --opprint --barred:

$ mysql --database=mydb -e 'show columns in mytable'
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| id               | bigint(20)   | NO   | MUL | NULL    |       |
| category         | varchar(256) | NO   |     | NULL    |       |
| is_permanent     | tinyint(1)   | NO   |     | NULL    |       |
| assigned_to      | bigint(20)   | YES  |     | NULL    |       |
| last_update_time | int(11)      | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+

Using mysql’s -B we get TSV output:

$ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --opprint cat
Field            Type         Null Key Default Extra
id               bigint(20)   NO  MUL NULL -
category         varchar(256) NO  -   NULL -
is_permanent     tinyint(1)   NO  -   NULL -
assigned_to      bigint(20)   YES -   NULL -
last_update_time int(11)      YES -   NULL -

Since Miller handles TSV output, we can do as much or as little processing as we want in the SQL query, then send the rest on to Miller. This includes outputting as JSON, doing further selects/joins in Miller, doing stats, etc. etc.

$ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --ojson --jlistwrap --jvstack cat 
[
  {
    "Field": "id",
    "Type": "bigint(20)",
    "Null": "NO",
    "Key": "MUL",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "category",
    "Type": "varchar(256)",
    "Null": "NO",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "is_permanent",
    "Type": "tinyint(1)",
    "Null": "NO",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "assigned_to",
    "Type": "bigint(20)",
    "Null": "YES",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "last_update_time",
    "Type": "int(11)",
    "Null": "YES",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  }
]
$ mysql --database=mydb -B -e 'select * from mytable' > query.tsv

$ mlr --from query.tsv --t2p stats1 -a count -f id -g category,assigned_to
category assigned_to id_count
special  10000978    207
special  10003924    385
special  10009872    168
standard 10000978    524
standard 10003924    392
standard 10009872    108
...

Again, all the examples in the CSV section apply here — just change the input-format flags.

SQL-input examples

One use of NIDX (value-only, no keys) format is for loading up SQL tables.

Create and load SQL table:

mysql> CREATE TABLE abixy(
  a VARCHAR(32),
  b VARCHAR(32),
  i BIGINT(10),
  x DOUBLE,
  y DOUBLE
);
Query OK, 0 rows affected (0.01 sec)

bash$ mlr --onidx --fs comma cat data/medium > medium.nidx

mysql> LOAD DATA LOCAL INFILE 'medium.nidx' REPLACE INTO TABLE abixy FIELDS TERMINATED BY ',' ;
Query OK, 10000 rows affected (0.07 sec)
Records: 10000  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT COUNT(*) AS count FROM abixy;
+-------+
| count |
+-------+
| 10000 |
+-------+
1 row in set (0.00 sec)

mysql> SELECT * FROM abixy LIMIT 10;
+------+------+------+---------------------+---------------------+
| a    | b    | i    | x                   | y                   |
+------+------+------+---------------------+---------------------+
| pan  | pan  |    1 |  0.3467901443380824 |  0.7268028627434533 |
| eks  | pan  |    2 |  0.7586799647899636 |  0.5221511083334797 |
| wye  | wye  |    3 | 0.20460330576630303 | 0.33831852551664776 |
| eks  | wye  |    4 | 0.38139939387114097 | 0.13418874328430463 |
| wye  | pan  |    5 |  0.5732889198020006 |  0.8636244699032729 |
| zee  | pan  |    6 |  0.5271261600918548 | 0.49322128674835697 |
| eks  | zee  |    7 |  0.6117840605678454 |  0.1878849191181694 |
| zee  | wye  |    8 |  0.5985540091064224 |   0.976181385699006 |
| hat  | wye  |    9 | 0.03144187646093577 |  0.7495507603507059 |
| pan  | wye  |   10 |  0.5026260055412137 |  0.9526183602969864 |
+------+------+------+---------------------+---------------------+

Aggregate counts within SQL:

mysql> SELECT a, b, COUNT(*) AS count FROM abixy GROUP BY a, b ORDER BY COUNT DESC;
+------+------+-------+
| a    | b    | count |
+------+------+-------+
| zee  | wye  |   455 |
| pan  | eks  |   429 |
| pan  | pan  |   427 |
| wye  | hat  |   426 |
| hat  | wye  |   423 |
| pan  | hat  |   417 |
| eks  | hat  |   417 |
| pan  | zee  |   413 |
| eks  | eks  |   413 |
| zee  | hat  |   409 |
| eks  | wye  |   407 |
| zee  | zee  |   403 |
| pan  | wye  |   395 |
| wye  | pan  |   392 |
| zee  | eks  |   391 |
| zee  | pan  |   389 |
| hat  | eks  |   389 |
| wye  | eks  |   386 |
| wye  | zee  |   385 |
| hat  | zee  |   385 |
| hat  | hat  |   381 |
| wye  | wye  |   377 |
| eks  | pan  |   371 |
| hat  | pan  |   363 |
| eks  | zee  |   357 |
+------+------+-------+
25 rows in set (0.01 sec)

Aggregate counts within Miller:


$ mlr --opprint uniq -c -g a,b then sort -nr count data/medium
a   b   count
zee wye 455
pan eks 429
pan pan 427
wye hat 426
hat wye 423
pan hat 417
eks hat 417
eks eks 413
pan zee 413
zee hat 409
eks wye 407
zee zee 403
pan wye 395
hat pan 363
eks zee 357

Pipe SQL output to aggregate counts within Miller:


$ mysql -D miller -B -e 'select * from abixy' | mlr --itsv --opprint uniq -c -g a,b then sort -nr count
a   b   count
zee wye 455
pan eks 429
pan pan 427
wye hat 426
hat wye 423
pan hat 417
eks hat 417
eks eks 413
pan zee 413
zee hat 409
eks wye 407
zee zee 403
pan wye 395
wye pan 392
zee eks 391
zee pan 389
hat eks 389
wye eks 386
hat zee 385
wye zee 385
hat hat 381
wye wye 377
eks pan 371
hat pan 363
eks zee 357

Log-processing examples

Another of my favorite use-cases for Miller is doing ad-hoc processing of log-file data. Here’s where DKVP format really shines: one, since the field names and field values are present on every line, every line stands on its own. That means you can grep or what have you. Also it means not every line needs to have the same list of field names (“schema ”).

Again, all the examples in the CSV section apply here — just change the input-format flags. But there’s more you can do when not all the records have the same shape.

Writing a program — in any language whatsoever — you can have it print out log lines as it goes along, with items for various events jumbled together. After the program has finished running you can sort it all out, filter it, analyze it, and learn from it.

Suppose your program has printed something like this:

$ cat log.txt
op=enter,time=1472819681
op=cache,type=A9,hit=0
op=cache,type=A4,hit=1
time=1472819690,batch_size=100,num_filtered=237
op=cache,type=A1,hit=1
op=cache,type=A9,hit=0
op=cache,type=A1,hit=1
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A1,hit=1
time=1472819705,batch_size=100,num_filtered=348
op=cache,type=A4,hit=1
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A4,hit=1
time=1472819713,batch_size=100,num_filtered=493
op=cache,type=A9,hit=1
op=cache,type=A1,hit=1
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A9,hit=1
time=1472819720,batch_size=100,num_filtered=554
op=cache,type=A1,hit=0
op=cache,type=A4,hit=1
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A4,hit=0
op=cache,type=A4,hit=0
op=cache,type=A9,hit=0
time=1472819736,batch_size=100,num_filtered=612
op=cache,type=A1,hit=1
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
op=cache,type=A4,hit=1
op=cache,type=A1,hit=1
op=cache,type=A9,hit=0
op=cache,type=A9,hit=0
time=1472819742,batch_size=100,num_filtered=728

Each print statement simply contains local information: the current timestamp, whether a particular cache was hit or not, etc. Then using either the system grep command, or Miller’s having-fields, or is_present, we can pick out the parts we want and analyze them:

$ grep op=cache log.txt \
  | mlr --idkvp --opprint stats1 -a mean -f hit -g type then sort -f type
type hit_mean
A1   0.857143
A4   0.714286
A9   0.090909

$ mlr --from log.txt --opprint \
  filter 'is_present($batch_size)' \
  then step -a delta -f time,num_filtered \
  then sec2gmt time
time                 batch_size num_filtered time_delta num_filtered_delta
2016-09-02T12:34:50Z 100        237          0          0
2016-09-02T12:35:05Z 100        348          15         111
2016-09-02T12:35:13Z 100        493          8          145
2016-09-02T12:35:20Z 100        554          7          61
2016-09-02T12:35:36Z 100        612          16         58
2016-09-02T12:35:42Z 100        728          6          116

Alternatively, we can simply group the similar data for a better look:

$ mlr --opprint group-like log.txt
op    time
enter 1472819681

op    type hit
cache A9   0
cache A4   1
cache A1   1
cache A9   0
cache A1   1
cache A9   0
cache A9   0
cache A1   1
cache A4   1
cache A9   0
cache A9   0
cache A9   0
cache A9   0
cache A4   1
cache A9   1
cache A1   1
cache A9   0
cache A9   0
cache A9   1
cache A1   0
cache A4   1
cache A9   0
cache A9   0
cache A9   0
cache A4   0
cache A4   0
cache A9   0
cache A1   1
cache A9   0
cache A9   0
cache A9   0
cache A9   0
cache A4   1
cache A1   1
cache A9   0
cache A9   0

time       batch_size num_filtered
1472819690 100        237
1472819705 100        348
1472819713 100        493
1472819720 100        554
1472819736 100        612
1472819742 100        728

$ mlr --opprint group-like then sec2gmt time log.txt
op    time
enter 2016-09-02T12:34:41Z

op    type hit
cache A9   0
cache A4   1
cache A1   1
cache A9   0
cache A1   1
cache A9   0
cache A9   0
cache A1   1
cache A4   1
cache A9   0
cache A9   0
cache A9   0
cache A9   0
cache A4   1
cache A9   1
cache A1   1
cache A9   0
cache A9   0
cache A9   1
cache A1   0
cache A4   1
cache A9   0
cache A9   0
cache A9   0
cache A4   0
cache A4   0
cache A9   0
cache A1   1
cache A9   0
cache A9   0
cache A9   0
cache A9   0
cache A4   1
cache A1   1
cache A9   0
cache A9   0

time                 batch_size num_filtered
2016-09-02T12:34:50Z 100        237
2016-09-02T12:35:05Z 100        348
2016-09-02T12:35:13Z 100        493
2016-09-02T12:35:20Z 100        554
2016-09-02T12:35:36Z 100        612
2016-09-02T12:35:42Z 100        728

More

Please see the reference for complete information, as well as the FAQ and the cookbook for more tips.

miller-5.6.2/doc/Makefile.am000066400000000000000000000004011354153536500156160ustar00rootroot00000000000000EXTRA_DIST= mlr.1 man1_MANS= mlr.1 # This target is not for use at package install; only at package-creation time. # The mlr.1 file should be committed to source control. It uses the mlr # executable from the PATH variable. manpage: ruby mkman.rb > mlr.1 miller-5.6.2/doc/Makefile.in000066400000000000000000000356451354153536500156510ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man1_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = mlr.1 man1_MANS = mlr.1 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 .PRECIOUS: Makefile # This target is not for use at package install; only at package-creation time. # The mlr.1 file should be committed to source control. It uses the mlr # executable from the PATH variable. manpage: ruby mkman.rb > mlr.1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: miller-5.6.2/doc/Makefile.no-autoconfig000066400000000000000000000016221354153536500177770ustar00rootroot00000000000000# ================================================================ # NOTE: This makefile is not intended to be used in a packaging system -- # rather, Miller uses autconfig for that. This makefile is intended for users # who prefer (for whatever reason) to bypass autoconfig. Please also see # http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig # ================================================================ all: manpage manpage.txt html # Respective MANPATH entries would include /usr/local/share/man or $HOME/man INSTALLDIR=/usr/local/share/man/man1 INSTALLHOME=$(HOME)/man/man1 html: manpage.txt .always ./poki manpage: .always mkman.rb > mlr.1 manpage.txt: .always mkman.rb | groff -man -Tascii | col -b > manpage.txt install: manpage mkdir -p $(INSTALLDIR) cp mlr.1 $(INSTALLDIR)/mlr.1 installhome: manpage mkdir -p $(INSTALLHOME) cp mlr.1 $(INSTALLHOME)/mlr.1 .always: @true miller-5.6.2/doc/README.md000066400000000000000000000007071354153536500150520ustar00rootroot00000000000000index.html et al. are autogenerated from content-for-index.html et al. by http://github.com/johnkerl/poki Manpage data `mlr.1` is generated by running `ruby mkman.rb > mlr.1` Neither of these are invoked automatically at package-build time. They do need to be run after code changes, since they both automatically include Miller program output within their text. All the resulting .html files, and the mlr.1 file, should be committed to source control. miller-5.6.2/doc/build.html000066400000000000000000000654211354153536500155640ustar00rootroot00000000000000 Installation

Miller license

Prebuilt executables

Via package managers

Homebrew installation support for OSX is available via

brew update && brew install miller

You may already have the mlr executable available in your platform’s package manager on NetBSD, Debian Linux, Ubuntu Xenial and upward, Arch Linux, or perhaps other distributions. For example, on various Linux distributions you might do one of the following:

sudo apt-get install miller

sudo apt install miller

sudo yum install miller

Via GitHub per release

Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts).

Miller is autobuilt for Linux using Travis on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of SikhNerd on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for Windows using the Appveyor continuous-build system: https://ci.appveyor.com/project/johnkerl/miller.

Miller releases from 5.1.0w onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select Latest Build and then Artifacts to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release.

Building from source

From release tarball using autoconfig

Miller allows you the option of using GNU autoconfigure to build portably.

Grateful acknowledgement: Miller’s GNU autoconfig work was done by the generous and expert efforts of Thomas Klausner.

  • Obtain mlr-i.j.k.tar.gz from https://github.com/johnkerl/miller/tags, replacing i.j.k with the desired release, e.g. 2.2.1.
  • tar zxvf mlr-i.j.k.tar.gz
  • cd mlr-i.j.k
  • Install the following packages using your system’s package manager (apt-get, yum install, etc.): flex
  • Various configuration options of your choice, e.g.
    • ./configure
    • ./configure --prefix=/usr/local
    • ./configure --prefix=$HOME/pkgs
    • ./configure CC=clang
    • ./configure --disable-shared (to make a statically linked executable)
    • ./configure 'CFLAGS=-Wall -std=gnu99 -O3'
    • etc.
  • make creates the c/mlr executable
  • make check
  • make install copies the c/mlr executable to your prefix’s bin subdirectory.

From git clone using autoconfig

Without using autoconfig

GNU autoconfig is familiar to many users, and indeed plenty of folks won’t bother to use an open-source software package which doesn’t have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I’m happy that Miller supports autoconfig.

But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ./configure && make output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can’t figure out the build errors, you may just keep walking. For this reason I’m happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at kerl.john.r+miller@gmail.com, — or, better, open an issue with “New Issue” at https://github.com/johnkerl/miller/issues.)

Steps:

  • Obtain a release tarball or git clone.
  • cd into the c subdirectory.
  • Edit the INSTALLDIR in Makefile.no-autoconfig.
  • To change the C compiler, edit the CC= lines in Makefile.no-autoconfig and dsls/Makefile.no-autoconfig.
  • make -f Makefile.no-autoconfig creates the mlr executable and runs unit/regression tests (i.e. the equivalent of both make and make check using autoconfig).
  • make install copies the mlr executable to your install directory.

The Makefile.no-autoconfig is simple: little more than gcc *.c. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I’m aware of successful use with gcc and clang, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD.

Windows

Disclaimer: I’m now relying exclusively on Appveyor for Windows builds; I haven’t built from source using MSYS in quite a while.

Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above).

You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to C:\msys2\) run C:\msys2\mingw64.exe. Within the MSYS2 shell, you can run the following to install dependent packages:

pacman -Syu
pacman -Su
pacman -S base-devel
pacman -S msys2-devel
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-pcre
pacman -S msys2-runtime

The list of dependent packages may be also found in appveyor.yml in the Miller base directory.

Then, simply run msys2-build.sh which is a thin wrapper around ./configure && make which accommodates certain Windows/MSYS2 idiosyncracies.

There is a unit-test false-negative issue involving the semantics of the mkstemp library routine but a make -k in the c subdirectory has been producing a mlr.exe for me.

Within MSYS2 you can run mlr: simply copy it from the c subdirectory to your desired location somewhere within your MSYS2 $PATH. To run mlr outside of MSYS2, just as with precompiled binaries as described above, you’ll need msys-2.0.dll. One way to do this is to augment your path:

C:\> set PATH=%PATH%;\msys64\mingw64\bin

Another way to do it is to copy the Miller executable and the DLL to the same directory:

C:\> mkdir \mbin
C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin
C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin
C:\> set PATH=%PATH%;\mbin

In case of problems

Dependencies

Required external dependencies

These are necessary to produce the mlr executable.

  • gcc, clang, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers)
  • The standard C library
  • flex
  • automake, autoconf, and libtool, if you build with autoconfig

Optional external dependencies

This documentation pageset is built using Poki:
docs here, source code here. Note that http://johnkerl.org/miller/doc/index.html is nothing more than Miller’s doc directory served up by a web server. You’ll need poki if you modify documents, or if you modify the code in a way that affects the documents (there are auto-run snippets inserted into the doc). The best way to discover this is to run make install as above, then run poki in Miller’s doc subdirectory, then run git diff to see if docs were affected by the code mod. (If so, commit and push them.)

Internal dependencies

These are included within the
Miller source tree and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build):

Creating a new release: for developers

At present I’m the primary developer so this is just my checklist for making new releases.

In this example I am using version 3.4.0; of course that will change for subsequent revisions.

  • Update version found in mlr --version and man mlr:
  • Create the release tarball and SRPM:
  • Create the Github release tag:
    • Don’t forget the v in v3.4.0
    • Write the release notes
    • Attach the release tarball, SRPM, and binaries. Double-check assets were successfully uploaded.
    • Publish the release
  • Create the release-specific docs:
    • Pull the Github-generated source .tgz from Github to ISP miller-releases directory and unpack and cd into it.
    • cd into doc subdir. Edit template.html’s titleinbody tag from Miller to Miller 3.4.0 and poki-build.
    • ISP upload
    • At the ISP site, update the latest-revision symlink ln -s pub_http_internet/miller-releases/miller-3.4.0 pub_http_internet/miller. (This is the main doc URL linked to from the top of the Github repo so it must point to this newly published revision.)
    • Back in the Github repo, edit doc/content-for-release-docs.html to include new release, poki-build, push/commit, and ISP upload.
  • Notify:
    • Submit brew pull request; notify any other distros which don’t appear to have autoupdated since the previous release.
      git remote add upstream https://github.com/Homebrew/homebrew-core # one-time setup only
      git fetch upstream
      git rebase upstream/master
      git checkout -b miller-3.4.0
      shasum -a 256 /path/to/mlr-3.4.0.tar.gz
      edit Formula/miller.rb
      # Test the URL from the line like
      #   url "https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz"
      # in a browser for typos
      # A '@BrewTestBot Test this please' comment within the homebrew-core pull request will restart the homebrew travis build
      git add Formula/miller.rb
      git commit -m 'miller 3.4.0'
      git push -u origin miller-3.4.0
      (submit the pull request)
      
    • Update https://github.com/johnkerl/miller/issues/163 (release-tracker issue).
    • Social-media updates.
  • Afterwork:
    • Edit configure.ac and c/mlrvers.h to change version from 3.4.0 to 3.4.0-dev.
    • make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome
    • Commit and push.

Misc. development notes

I use terminal width 120 and tabwidth 4.

miller-5.6.2/doc/circle.csv000066400000000000000000000002101354153536500155360ustar00rootroot00000000000000color,shape,flag,index,quantity,rate red,circle,1,16,13.8103,2.9010 yellow,circle,1,73,63.9785,4.2370 yellow,circle,1,87,63.5058,8.3350 miller-5.6.2/doc/commas.csv000066400000000000000000000000751354153536500155650ustar00rootroot00000000000000Name,Role "Xiao, Lin",administrator "Khavari, Darius",tester miller-5.6.2/doc/contact.html000066400000000000000000000152441354153536500161160ustar00rootroot00000000000000 Contact information

Contact information

Bug reports, feature requests, etc.: https://github.com/johnkerl/miller/issues

Other correspondence: kerl.john.r+miller@gmail.com miller-5.6.2/doc/content-for-10-min.html000066400000000000000000000461471354153536500177260ustar00rootroot00000000000000POKI_PUT_TOC_HERE

CSV-file examples

Sample CSV data file: POKI_RUN_COMMAND{{cat example.csv}}HERE

mlr cat is like cat ... POKI_RUN_COMMAND{{mlr --csv cat example.csv}}HERE

... but it can also do format conversion (here, to pretty-printed tabular format): POKI_RUN_COMMAND{{mlr --icsv --opprint cat example.csv}}HERE

mlr head and mlr tail count records rather than lines. The CSV header is included either way: POKI_RUN_COMMAND{{mlr --csv head -n 4 example.csv}}HERE POKI_RUN_COMMAND{{mlr --csv tail -n 4 example.csv}}HERE

Sort primarily alphabetically on one field, then secondarily numerically descending on another field: POKI_RUN_COMMAND{{mlr --icsv --opprint sort -f shape -nr index example.csv}}HERE

Use cut to retain only specified fields, in input-data order: POKI_RUN_COMMAND{{mlr --icsv --opprint cut -f flag,shape example.csv}}HERE

Use cut -o to retain only specified fields, in your specified order: POKI_RUN_COMMAND{{mlr --icsv --opprint cut -o -f flag,shape example.csv}}HERE

Use cut -x to omit specified fields: POKI_RUN_COMMAND{{mlr --icsv --opprint cut -x -f flag,shape example.csv}}HERE

Use filter to retain specified records: POKI_RUN_COMMAND{{mlr --icsv --opprint filter '$color == "red"' example.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint filter '$color == "red" && $flag == 1' example.csv}}HERE

Use put to add/replace fields which are computed from other fields: POKI_RUN_COMMAND{{mlr --icsv --opprint put '$ratio = $quantity / $rate; $color_shape = $color . "_" . $shape' example.csv}}HERE

Even though Miller’s main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index. Use $[[3]] to access the name of field 3 or $[[[3]]] to access the value of field 3: POKI_RUN_COMMAND{{mlr --icsv --opprint put '$[[3]] = "NEW"' example.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint put '$[[[3]]] = "NEW"' example.csv}}HERE

JSON output: POKI_RUN_COMMAND{{mlr --icsv --ojson put '$ratio = $quantity/$rate; $shape = toupper($shape)' example.csv}}HERE

JSON output with vertical-formatting flags: POKI_RUN_COMMAND{{mlr --icsv --ojson --jvstack --jlistwrap tail -n 2 example.csv}}HERE

Use then to pipe commands together. Also, the -g option for many Miller commands is for group-by: here, head -n 1 -g shape outputs the first record for each distinct value of the shape field. This means we’re finding the record with highest index field for each distinct shape field: POKI_RUN_COMMAND{{mlr --icsv --opprint sort -f shape -nr index then head -n 1 -g shape example.csv}}HERE

Statistics can be computed with or without group-by field(s). Also, the first of these two examples uses --oxtab output format which is a nice alternative to --opprint when you have lots of columns: POKI_RUN_COMMAND{{mlr --icsv --oxtab --from example.csv stats1 -a p0,p10,p25,p50,p75,p90,p99,p100 -f rate}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape,color}}HERE

Choices for printing to files

Often we want to print output to the screen. Miller does this by default, as we’ve seen in the previous examples.

Sometimes we want to print output to another file: just use '> outputfilenamegoeshere' at the end of your command:
% mlr --icsv --opprint cat example.csv > newfile.csv
# Output goes to the new file;
# nothing is printed to the screen.
% cat newfile.csv 
color  shape    flag index quantity rate
yellow triangle 1    11    43.6498  9.8870
red    square   1    15    79.2778  0.0130
red    circle   1    16    13.8103  2.9010
red    square   0    48    77.5542  7.4670
purple triangle 0    51    81.2290  8.5910
red    square   0    64    77.1991  9.5310
purple triangle 0    65    80.1405  5.8240
yellow circle   1    73    63.9785  4.2370
yellow circle   1    87    63.5058  8.3350
purple square   0    91    72.3735  8.2430

Other times we just want our files to be changed in-place: just use 'mlr -I'.
% cp example.csv newfile.txt

% cat newfile.txt
color,shape,flag,index,quantity,rate
yellow,triangle,1,11,43.6498,9.8870
red,square,1,15,79.2778,0.0130
red,circle,1,16,13.8103,2.9010
red,square,0,48,77.5542,7.4670
purple,triangle,0,51,81.2290,8.5910
red,square,0,64,77.1991,9.5310
purple,triangle,0,65,80.1405,5.8240
yellow,circle,1,73,63.9785,4.2370
yellow,circle,1,87,63.5058,8.3350
purple,square,0,91,72.3735,8.2430
% mlr -I --icsv --opprint cat newfile.txt

% cat newfile.txt
color  shape    flag index quantity rate
yellow triangle 1    11    43.6498  9.8870
red    square   1    15    79.2778  0.0130
red    circle   1    16    13.8103  2.9010
red    square   0    48    77.5542  7.4670
purple triangle 0    51    81.2290  8.5910
red    square   0    64    77.1991  9.5310
purple triangle 0    65    80.1405  5.8240
yellow circle   1    73    63.9785  4.2370
yellow circle   1    87    63.5058  8.3350
purple square   0    91    72.3735  8.2430

Also using mlr -I you can bulk-operate on lots of files: e.g.
mlr -I --csv cut -x -f unwanted_column_name *.csv

If you like, you can first copy off your original data somewhere else, before doing in-place operations.

Lastly, using tee within put, you can split your input data into separate files per one or more field names: POKI_RUN_COMMAND{{mlr --csv --from example.csv put -q 'tee > $shape.".csv", $*'}}HERE
POKI_RUN_COMMAND{{cat circle.csv}}HERE POKI_RUN_COMMAND{{cat square.csv}}HERE POKI_RUN_COMMAND{{cat triangle.csv}}HERE

Other-format examples

What’s a CSV file, really? It’s an array of rows, or records, each being a list of key-value pairs, or fields: for CSV it so happens that all the keys are shared in the header line and the values vary data line by data line.

For example, if you have

shape,flag,index
circle,1,24
square,0,36

then that’s a way of saying

shape=circle,flag=1,index=24
shape=square,flag=0,index=36

Data written this way are called DKVP, for delimited key-value pairs.

We’ve also already seen other ways to write the same data:

CSV                               PPRINT                 JSON
shape,flag,index                  shape  flag index      [
circle,1,24                       circle 1    24           {
square,0,36                       square 0    36             "shape": "circle",
                                                             "flag": 1,
                                                             "index": 24
                                                           },
DKVP                              XTAB                     {
shape=circle,flag=1,index=24      shape circle               "shape": "square",
shape=square,flag=0,index=36      flag  1                    "flag": 0,
                                  index 24                   "index": 36
                                                           }
                                  shape square           ]
                                  flag  0
                                  index 36

Anything we can do with CSV input data, we can do with any other format input data. And you can read from one format, do any record-processing, and output to the same format as the input, or to a different output format.

SQL-output examples

I like to produce SQL-query output with header-column and tab delimiter: this is CSV but with a tab instead of a comma, also known as TSV. Then I post-process with mlr --tsv or mlr --tsvlite. This means I can do some (or all, or none) of my data processing within SQL queries, and some (or none, or all) of my data processing using Miller — whichever is most convenient for my needs at the moment.

For example, using default output formatting in mysql we get formatting like Miller’s --opprint --barred:

$ mysql --database=mydb -e 'show columns in mytable'
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| id               | bigint(20)   | NO   | MUL | NULL    |       |
| category         | varchar(256) | NO   |     | NULL    |       |
| is_permanent     | tinyint(1)   | NO   |     | NULL    |       |
| assigned_to      | bigint(20)   | YES  |     | NULL    |       |
| last_update_time | int(11)      | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+

Using mysql’s -B we get TSV output:

$ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --opprint cat
Field            Type         Null Key Default Extra
id               bigint(20)   NO  MUL NULL -
category         varchar(256) NO  -   NULL -
is_permanent     tinyint(1)   NO  -   NULL -
assigned_to      bigint(20)   YES -   NULL -
last_update_time int(11)      YES -   NULL -

Since Miller handles TSV output, we can do as much or as little processing as we want in the SQL query, then send the rest on to Miller. This includes outputting as JSON, doing further selects/joins in Miller, doing stats, etc. etc.

$ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --ojson --jlistwrap --jvstack cat 
[
  {
    "Field": "id",
    "Type": "bigint(20)",
    "Null": "NO",
    "Key": "MUL",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "category",
    "Type": "varchar(256)",
    "Null": "NO",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "is_permanent",
    "Type": "tinyint(1)",
    "Null": "NO",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "assigned_to",
    "Type": "bigint(20)",
    "Null": "YES",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  },
  {
    "Field": "last_update_time",
    "Type": "int(11)",
    "Null": "YES",
    "Key": "",
    "Default": "NULL",
    "Extra": ""
  }
]
$ mysql --database=mydb -B -e 'select * from mytable' > query.tsv

$ mlr --from query.tsv --t2p stats1 -a count -f id -g category,assigned_to
category assigned_to id_count
special  10000978    207
special  10003924    385
special  10009872    168
standard 10000978    524
standard 10003924    392
standard 10009872    108
...

Again, all the examples in the CSV section apply here — just change the input-format flags.

SQL-input examples

One use of NIDX (value-only, no keys) format is for loading up SQL tables.

Create and load SQL table:

mysql> CREATE TABLE abixy(
  a VARCHAR(32),
  b VARCHAR(32),
  i BIGINT(10),
  x DOUBLE,
  y DOUBLE
);
Query OK, 0 rows affected (0.01 sec)

bash$ mlr --onidx --fs comma cat data/medium > medium.nidx

mysql> LOAD DATA LOCAL INFILE 'medium.nidx' REPLACE INTO TABLE abixy FIELDS TERMINATED BY ',' ;
Query OK, 10000 rows affected (0.07 sec)
Records: 10000  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT COUNT(*) AS count FROM abixy;
+-------+
| count |
+-------+
| 10000 |
+-------+
1 row in set (0.00 sec)

mysql> SELECT * FROM abixy LIMIT 10;
+------+------+------+---------------------+---------------------+
| a    | b    | i    | x                   | y                   |
+------+------+------+---------------------+---------------------+
| pan  | pan  |    1 |  0.3467901443380824 |  0.7268028627434533 |
| eks  | pan  |    2 |  0.7586799647899636 |  0.5221511083334797 |
| wye  | wye  |    3 | 0.20460330576630303 | 0.33831852551664776 |
| eks  | wye  |    4 | 0.38139939387114097 | 0.13418874328430463 |
| wye  | pan  |    5 |  0.5732889198020006 |  0.8636244699032729 |
| zee  | pan  |    6 |  0.5271261600918548 | 0.49322128674835697 |
| eks  | zee  |    7 |  0.6117840605678454 |  0.1878849191181694 |
| zee  | wye  |    8 |  0.5985540091064224 |   0.976181385699006 |
| hat  | wye  |    9 | 0.03144187646093577 |  0.7495507603507059 |
| pan  | wye  |   10 |  0.5026260055412137 |  0.9526183602969864 |
+------+------+------+---------------------+---------------------+

Aggregate counts within SQL:

mysql> SELECT a, b, COUNT(*) AS count FROM abixy GROUP BY a, b ORDER BY COUNT DESC;
+------+------+-------+
| a    | b    | count |
+------+------+-------+
| zee  | wye  |   455 |
| pan  | eks  |   429 |
| pan  | pan  |   427 |
| wye  | hat  |   426 |
| hat  | wye  |   423 |
| pan  | hat  |   417 |
| eks  | hat  |   417 |
| pan  | zee  |   413 |
| eks  | eks  |   413 |
| zee  | hat  |   409 |
| eks  | wye  |   407 |
| zee  | zee  |   403 |
| pan  | wye  |   395 |
| wye  | pan  |   392 |
| zee  | eks  |   391 |
| zee  | pan  |   389 |
| hat  | eks  |   389 |
| wye  | eks  |   386 |
| wye  | zee  |   385 |
| hat  | zee  |   385 |
| hat  | hat  |   381 |
| wye  | wye  |   377 |
| eks  | pan  |   371 |
| hat  | pan  |   363 |
| eks  | zee  |   357 |
+------+------+-------+
25 rows in set (0.01 sec)

Aggregate counts within Miller:


$ mlr --opprint uniq -c -g a,b then sort -nr count data/medium
a   b   count
zee wye 455
pan eks 429
pan pan 427
wye hat 426
hat wye 423
pan hat 417
eks hat 417
eks eks 413
pan zee 413
zee hat 409
eks wye 407
zee zee 403
pan wye 395
hat pan 363
eks zee 357

Pipe SQL output to aggregate counts within Miller:


$ mysql -D miller -B -e 'select * from abixy' | mlr --itsv --opprint uniq -c -g a,b then sort -nr count
a   b   count
zee wye 455
pan eks 429
pan pan 427
wye hat 426
hat wye 423
pan hat 417
eks hat 417
eks eks 413
pan zee 413
zee hat 409
eks wye 407
zee zee 403
pan wye 395
wye pan 392
zee eks 391
zee pan 389
hat eks 389
wye eks 386
hat zee 385
wye zee 385
hat hat 381
wye wye 377
eks pan 371
hat pan 363
eks zee 357

Log-processing examples

Another of my favorite use-cases for Miller is doing ad-hoc processing of log-file data. Here’s where DKVP format really shines: one, since the field names and field values are present on every line, every line stands on its own. That means you can grep or what have you. Also it means not every line needs to have the same list of field names (“schema ”).

Again, all the examples in the CSV section apply here — just change the input-format flags. But there’s more you can do when not all the records have the same shape.

Writing a program — in any language whatsoever — you can have it print out log lines as it goes along, with items for various events jumbled together. After the program has finished running you can sort it all out, filter it, analyze it, and learn from it.

Suppose your program has printed something like this: POKI_RUN_COMMAND{{cat log.txt}}HERE

Each print statement simply contains local information: the current timestamp, whether a particular cache was hit or not, etc. Then using either the system grep command, or Miller’s having-fields, or is_present, we can pick out the parts we want and analyze them: POKI_INCLUDE_AND_RUN_ESCAPED(10-1.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(10-2.sh)HERE

Alternatively, we can simply group the similar data for a better look: POKI_RUN_COMMAND{{mlr --opprint group-like log.txt}}HERE POKI_RUN_COMMAND{{mlr --opprint group-like then sec2gmt time log.txt}}HERE

More

Please see the reference for complete information, as well as the FAQ and the cookbook for more tips.

miller-5.6.2/doc/content-for-build.html000066400000000000000000000444071354153536500200210ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Miller license

Prebuilt executables

Via package managers

Homebrew installation support for OSX is available via POKI_CARDIFY(brew update && brew install miller)HERE

You may already have the mlr executable available in your platform’s package manager on NetBSD, Debian Linux, Ubuntu Xenial and upward, Arch Linux, or perhaps other distributions. For example, on various Linux distributions you might do one of the following: POKI_CARDIFY(sudo apt-get install miller)HERE POKI_CARDIFY(sudo apt install miller)HERE POKI_CARDIFY(sudo yum install miller)HERE

Via GitHub per release

Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts).

Miller is autobuilt for Linux using Travis on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of SikhNerd on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for Windows using the Appveyor continuous-build system: https://ci.appveyor.com/project/johnkerl/miller.

Miller releases from 5.1.0w onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select Latest Build and then Artifacts to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release.

Building from source

From release tarball using autoconfig

Miller allows you the option of using GNU autoconfigure to build portably.

Grateful acknowledgement: Miller’s GNU autoconfig work was done by the generous and expert efforts of Thomas Klausner.

  • Obtain mlr-i.j.k.tar.gz from https://github.com/johnkerl/miller/tags, replacing i.j.k with the desired release, e.g. 2.2.1.
  • tar zxvf mlr-i.j.k.tar.gz
  • cd mlr-i.j.k
  • Install the following packages using your system’s package manager (apt-get, yum install, etc.): flex
  • Various configuration options of your choice, e.g.
    • ./configure
    • ./configure --prefix=/usr/local
    • ./configure --prefix=$HOME/pkgs
    • ./configure CC=clang
    • ./configure --disable-shared (to make a statically linked executable)
    • ./configure 'CFLAGS=-Wall -std=gnu99 -O3'
    • etc.
  • make creates the c/mlr executable
  • make check
  • make install copies the c/mlr executable to your prefix’s bin subdirectory.

From git clone using autoconfig

  • git clone https://github.com/johnkerl/miller
  • cd miller
  • Install the following packages using your system’s package manager (apt-get, yum install, etc.): automake autoconf libtool flex
  • Run autoreconf -fiv. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.)
  • Then continue from “Install the following ... ” as above.

Without using autoconfig

GNU autoconfig is familiar to many users, and indeed plenty of folks won’t bother to use an open-source software package which doesn’t have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I’m happy that Miller supports autoconfig.

But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ./configure && make output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can’t figure out the build errors, you may just keep walking. For this reason I’m happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at kerl.john.r+miller@gmail.com, — or, better, open an issue with “New Issue” at https://github.com/johnkerl/miller/issues.)

Steps:

  • Obtain a release tarball or git clone.
  • cd into the c subdirectory.
  • Edit the INSTALLDIR in Makefile.no-autoconfig.
  • To change the C compiler, edit the CC= lines in Makefile.no-autoconfig and dsls/Makefile.no-autoconfig.
  • make -f Makefile.no-autoconfig creates the mlr executable and runs unit/regression tests (i.e. the equivalent of both make and make check using autoconfig).
  • make install copies the mlr executable to your install directory.

The Makefile.no-autoconfig is simple: little more than gcc *.c. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I’m aware of successful use with gcc and clang, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD.

Windows

Disclaimer: I’m now relying exclusively on Appveyor for Windows builds; I haven’t built from source using MSYS in quite a while.

Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above).

You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to C:\msys2\) run C:\msys2\mingw64.exe. Within the MSYS2 shell, you can run the following to install dependent packages:

pacman -Syu
pacman -Su
pacman -S base-devel
pacman -S msys2-devel
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-pcre
pacman -S msys2-runtime

The list of dependent packages may be also found in appveyor.yml in the Miller base directory.

Then, simply run msys2-build.sh which is a thin wrapper around ./configure && make which accommodates certain Windows/MSYS2 idiosyncracies.

There is a unit-test false-negative issue involving the semantics of the mkstemp library routine but a make -k in the c subdirectory has been producing a mlr.exe for me.

Within MSYS2 you can run mlr: simply copy it from the c subdirectory to your desired location somewhere within your MSYS2 $PATH. To run mlr outside of MSYS2, just as with precompiled binaries as described above, you’ll need msys-2.0.dll. One way to do this is to augment your path:

C:\> set PATH=%PATH%;\msys64\mingw64\bin

Another way to do it is to copy the Miller executable and the DLL to the same directory:

C:\> mkdir \mbin
C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin
C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin
C:\> set PATH=%PATH%;\mbin

In case of problems

If you have any build errors, feel free to contact me at kerl.john.r+miller@gmail.com, — or, better, open an issue with “New Issue” at https://github.com/johnkerl/miller/issues.

Dependencies

Required external dependencies

These are necessary to produce the mlr executable.

  • gcc, clang, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers)
  • The standard C library
  • flex
  • automake, autoconf, and libtool, if you build with autoconfig

Optional external dependencies

This documentation pageset is built using Poki: docs here, source code here. Note that http://johnkerl.org/miller/doc/index.html is nothing more than Miller’s doc directory served up by a web server. You’ll need poki if you modify documents, or if you modify the code in a way that affects the documents (there are auto-run snippets inserted into the doc). The best way to discover this is to run make install as above, then run poki in Miller’s doc subdirectory, then run git diff to see if docs were affected by the code mod. (If so, commit and push them.)

Internal dependencies

These are included within the Miller source tree and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build):

Creating a new release: for developers

At present I’m the primary developer so this is just my checklist for making new releases.

In this example I am using version 3.4.0; of course that will change for subsequent revisions.

  • Update version found in mlr --version and man mlr:
    • Edit configure.ac, c/mlrvers.h, and miller.spec from 3.3.2-dev to 3.4.0.
    • Do a fresh autoreconf -fiv and commit the output.
    • make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome
    • Commit and push.
    • ISP upload so http://johnkerl.org/miller/doc/index.html will have updated head-docs.
  • Create the release tarball and SRPM:
  • Create the Github release tag:
    • Don’t forget the v in v3.4.0
    • Write the release notes
    • Attach the release tarball, SRPM, and binaries. Double-check assets were successfully uploaded.
    • Publish the release
  • Create the release-specific docs:
    • Pull the Github-generated source .tgz from Github to ISP miller-releases directory and unpack and cd into it.
    • cd into doc subdir. Edit template.html’s titleinbody tag from Miller to Miller 3.4.0 and poki-build.
    • ISP upload
    • At the ISP site, update the latest-revision symlink ln -s pub_http_internet/miller-releases/miller-3.4.0 pub_http_internet/miller. (This is the main doc URL linked to from the top of the Github repo so it must point to this newly published revision.)
    • Back in the Github repo, edit doc/content-for-release-docs.html to include new release, poki-build, push/commit, and ISP upload.
  • Notify:
    • Submit brew pull request; notify any other distros which don’t appear to have autoupdated since the previous release.
      git remote add upstream https://github.com/Homebrew/homebrew-core # one-time setup only
      git fetch upstream
      git rebase upstream/master
      git checkout -b miller-3.4.0
      shasum -a 256 /path/to/mlr-3.4.0.tar.gz
      edit Formula/miller.rb
      # Test the URL from the line like
      #   url "https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz"
      # in a browser for typos
      # A '@BrewTestBot Test this please' comment within the homebrew-core pull request will restart the homebrew travis build
      git add Formula/miller.rb
      git commit -m 'miller 3.4.0'
      git push -u origin miller-3.4.0
      (submit the pull request)
      
    • Update https://github.com/johnkerl/miller/issues/163 (release-tracker issue).
    • Social-media updates.
  • Afterwork:
    • Edit configure.ac and c/mlrvers.h to change version from 3.4.0 to 3.4.0-dev.
    • make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome
    • Commit and push.

Misc. development notes

I use terminal width 120 and tabwidth 4.

miller-5.6.2/doc/content-for-contact.html000066400000000000000000000004101354153536500203370ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Bug reports, feature requests, etc.: https://github.com/johnkerl/miller/issues

Other correspondence: kerl.john.r+miller@gmail.com miller-5.6.2/doc/content-for-cookbook.html000066400000000000000000000616571354153536500205360ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Headerless CSV on input or output

Sometimes we get CSV files which lack a header. For example: POKI_RUN_COMMAND{{cat data/headerless.csv}}HERE

You can use Miller to add a header. The --implicit-csv-header applies positionally indexed labels: POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header cat data/headerless.csv}}HERE

Following that, you can rename the positionally indexed labels to names with meaning for your context. For example: POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header label name,age,status data/headerless.csv}}HERE

Likewise, if you need to produce CSV which is lacking its header, you can pipe Miller’s output to the system command sed 1d, or you can use Miller’s --headerless-csv-output option: POKI_RUN_COMMAND{{head -5 data/colored-shapes.dkvp | mlr --ocsv cat}}HERE POKI_RUN_COMMAND{{head -5 data/colored-shapes.dkvp | mlr --ocsv --headerless-csv-output cat}}HERE

Lastly, often we say “CSV” or “TSV” when we have positionally indexed data in columns which are separated by commas or tabs, respectively. In this case it’s perhaps simpler to just use NIDX format which was designed for this purpose. (See also POKI_PUT_LINK_FOR_PAGE(file-formats.html)HERE.) For example: POKI_RUN_COMMAND{{mlr --inidx --ifs comma --oxtab cut -f 1,3 data/headerless.csv}}HERE

Doing multiple joins

Suppose we have the following data: POKI_RUN_COMMAND{{cat multi-join/input.csv}}HERE

And we want to augment the id column with lookups from the following data files: POKI_RUN_COMMAND{{cat multi-join/name-lookup.csv}}HERE POKI_RUN_COMMAND{{cat multi-join/status-lookup.csv}}HERE

We can run the input file through multiple join commands in a then-chain: POKI_RUN_COMMAND{{mlr --icsv --opprint join -f multi-join/name-lookup.csv -j id then join -f multi-join/status-lookup.csv -j id multi-join/input.csv}}HERE

Bulk rename of fields

Suppose you want to replace spaces with underscores in your column names: POKI_RUN_COMMAND{{cat data/spaces.csv}}HERE

The simplest way is to use mlr rename with -g (for global replace, not just first occurrence of space within each field) and -r for pattern-matching (rather than explicit single-column renames): POKI_RUN_COMMAND{{mlr --csv rename -g -r ' ,_' data/spaces.csv}}HERE POKI_RUN_COMMAND{{mlr --csv --opprint rename -g -r ' ,_' data/spaces.csv}}HERE

You can also do this with a for-loop: POKI_RUN_COMMAND{{cat data/bulk-rename-for-loop.mlr}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint put -f data/bulk-rename-for-loop.mlr data/spaces.csv}}HERE

Search-and-replace over all fields

How to do $name=gsub($name, "old", "new") for all fields? POKI_RUN_COMMAND{{cat data/sar.csv}}HERE POKI_RUN_COMMAND{{cat data/sar.mlr}}HERE POKI_RUN_COMMAND{{mlr --csv put -f data/sar.mlr data/sar.csv}}HERE

Full field renames and reassigns

Using Miller 5.0.0’s map literals and assigning to $*, you can fully generalize mlr rename, mlr reorder, etc.: POKI_RUN_COMMAND{{cat data/small}}HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/full-reorg.sh)HERE

Numbering and renumbering records

The awk-like built-in variable NR is incremented for each input record: POKI_RUN_COMMAND{{cat data/small}}HERE POKI_RUN_COMMAND{{mlr put '$nr = NR' data/small}}HERE

However, this is the record number within the original input stream — not after any filtering you may have done: POKI_RUN_COMMAND{{mlr filter '$a == "wye"' then put '$nr = NR' data/small}}HERE

There are two good options here. One is to use the cat verb with -n: POKI_RUN_COMMAND{{mlr filter '$a == "wye"' then cat -n data/small}}HERE

The other is to keep your own counter within the put DSL: POKI_RUN_COMMAND{{mlr filter '$a == "wye"' then put 'begin {@n = 1} $n = @n; @n += 1' data/small}}HERE

The difference is a matter of taste (although mlr cat -n puts the counter first).

Options for dealing with duplicate rows

If your data has records appearing multiple times, you can use mlr uniq to show and/or count the unique records.

If you want to look at partial uniqueness — for example, show only the first record for each unique combination of the account_id and account_status fields — you might use mlr head -n 1 -g account_id,account_status. Please also see mlr head.

Data-cleaning examples

Here are some ways to use the type-checking options as described in the POKI_PUT_LINK_FOR_PAGE(reference-dsl.html#Type-test_and_type-assertion_expressions)HERE. Suppose you have the following data file, with inconsistent typing for boolean. (Also imagine that, for the sake of discussion, we have a million-line file rather than a four-line file, so we can’t see it all at once and some automation is called for.) POKI_RUN_COMMAND{{cat data/het-bool.csv}}HERE

One option is to coerce everything to boolean, or integer: POKI_RUN_COMMAND{{mlr --icsv --opprint put '$reachable = boolean($reachable)' data/het-bool.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint put '$reachable = int(boolean($reachable))' data/het-bool.csv}}HERE

A second option is to flag badly formatted data within the output stream: POKI_RUN_COMMAND{{mlr --icsv --opprint put '$format_ok = is_string($reachable)' data/het-bool.csv}}HERE

Or perhaps to flag badly formatted data outside the output stream: POKI_RUN_COMMAND{{mlr --icsv --opprint put 'if (!is_string($reachable)) {eprint "Malformed at NR=".NR} ' data/het-bool.csv}}HERE

A third way is to abort the process on first instance of bad data: POKI_RUN_COMMAND_TOLERATING_ERROR{{mlr --csv put '$reachable = asserting_string($reachable)' data/het-bool.csv}}HERE

Splitting nested fields

Suppose you have a TSV file like this: POKI_INCLUDE_ESCAPED(data/nested.tsv)HERE

The simplest option is to use mlr nest: POKI_RUN_COMMAND{{mlr --tsv nest --explode --values --across-records -f b --nested-fs : data/nested.tsv}}HERE POKI_RUN_COMMAND{{mlr --tsv nest --explode --values --across-fields -f b --nested-fs : data/nested.tsv}}HERE

While mlr nest is simplest, let’s also take a look at a few ways to do this using the put DSL.

One option to split out the colon-delimited values in the b column is to use splitnv to create an integer-indexed map and loop over it, adding new fields to the current record: POKI_RUN_COMMAND{{mlr --from data/nested.tsv --itsv --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["p".k]=v}'}}HERE

while another is to loop over the same map from splitnv and use it (with put -q to suppress printing the original record) to produce multiple records: POKI_RUN_COMMAND{{mlr --from data/nested.tsv --itsv --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'}}HERE POKI_RUN_COMMAND{{mlr --from data/nested.tsv --tsv put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'}}HERE

Showing differences between successive queries

Suppose you have a database query which you run at one point in time, producing the output on the left, then again later producing the output on the right:
POKI_RUN_COMMAND{{cat data/previous_counters.csv}}HERE POKI_RUN_COMMAND{{cat data/current_counters.csv}}HERE

And, suppose you want to compute the differences in the counters between adjacent keys. Since the color names aren’t all in the same order, nor are they all present on both sides, we can’t just paste the two files side-by-side and do some column-four-minus-column-two arithmetic.

First, rename counter columns to make them distinct: POKI_RUN_COMMAND{{mlr --csv rename count,previous_count data/previous_counters.csv > data/prevtemp.csv}}HERE POKI_RUN_COMMAND{{cat data/prevtemp.csv}}HERE POKI_RUN_COMMAND{{mlr --csv rename count,current_count data/current_counters.csv > data/currtemp.csv}}HERE POKI_RUN_COMMAND{{cat data/currtemp.csv}}HERE

Then, join on the key field(s), and use unsparsify to zero-fill counters absent on one side but present on the other. Use --ul and --ur to emit unpaired records (namely, purple on the left and yellow on the right): POKI_INCLUDE_AND_RUN_ESCAPED(data/previous-to-current.sh)HERE

Finding missing dates

Suppose you have some date-stamped data which may (or may not) be missing entries for one or more dates: POKI_RUN_COMMAND{{head -n 10 data/miss-date.csv}}HERE POKI_RUN_COMMAND{{wc -l data/miss-date.csv}}HERE

Since there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using strptime, then compute adjacent differences (the cat -n simply inserts record-counters): POKI_INCLUDE_AND_RUN_ESCAPED(data/miss-date-1.sh)HERE

Then, filter for adjacent difference not being 86400 (the number of seconds in a day): POKI_INCLUDE_AND_RUN_ESCAPED(data/miss-date-2.sh)HERE

Given this, it’s now easy to see where the gaps are: POKI_RUN_COMMAND{{mlr cat -n then filter '$n >= 770 && $n <= 780' data/miss-date.csv}}HERE POKI_RUN_COMMAND{{mlr cat -n then filter '$n >= 1115 && $n <= 1125' data/miss-date.csv}}HERE

Two-pass algorithms

Miller is a streaming record processor; commands are performed once per record. This makes Miller particularly suitable for single-pass algorithms, allowing many of its verbs to process files that are (much) larger than the amount of RAM present in your system. (Of course, Miller verbs such as sort, tac, etc. all must ingest and retain all input records before emitting any output records.) You can also use out-of-stream variables to perform multi-pass computations, at the price of retaining all input records in memory.

Two-pass algorithms: computation of percentages

For example, mapping numeric values down a column to the percentage between their min and max values is two-pass: on the first pass you find the min and max values, then on the second, map each record’s value to a percentage. POKI_INCLUDE_AND_RUN_ESCAPED(data/two-pass-percentage.sh)HERE

Two-pass algorithms: line-number ratios

Similarly, finding the total record count requires first reading through all the data: POKI_INCLUDE_AND_RUN_ESCAPED(data/two-pass-record-numbers.sh)HERE

Two-pass algorithms: records having max value

The idea is to retain records having the largest value of n in the following data: POKI_RUN_COMMAND{{mlr --itsv --opprint cat data/maxrows.tsv}}HERE

Of course, the largest value of n isn’t known until after all data have been read. Using an out-of-stream variable we can retain all records as they are read, then filter them at the end: POKI_RUN_COMMAND{{cat data/maxrows.mlr}}HERE POKI_RUN_COMMAND{{mlr --itsv --opprint put -q -f data/maxrows.mlr data/maxrows.tsv}}HERE

Rectangularizing data

Suppose you have a method (in whatever language) which is printing things of the form POKI_INCLUDE_ESCAPED(data/rect-outer.txt)HERE and then calls another method which prints things of the form POKI_INCLUDE_ESCAPED(data/rect-middle.txt)HERE and then, perhaps, that second method calls a third method which prints things of the form POKI_INCLUDE_ESCAPED(data/rect-inner.txt)HERE with the result that your program’s output is POKI_INCLUDE_ESCAPED(data/rect.txt)HERE The idea here is that middles starting with a 1 belong to the outer value of 1, and so on. (For example, the outer values might be account IDs, the middle values might be invoice IDs, and the inner values might be invoice line-items.) If you want all the middle and inner lines to have the context of which outers they belong to, you can modify your software to pass all those through your methods. Alternatively, don’t refactor your code just to handle some ad-hoc log-data formatting — instead, use the following to rectangularize the data. The idea is to use an out-of-stream variable to accumulate fields across records. Clear that variable when you see an outer ID; accumulate fields; emit output when you see the inner IDs. POKI_INCLUDE_AND_RUN_ESCAPED(data/rect.sh)HERE

Regularizing ragged CSV

Miller handles compliant CSV: in particular, it’s an error if the number of data fields in a given data line don’t match the number of header lines. But in the event that you have a CSV file in which some lines have less than the full number of fields, you can use Miller to pad them out. The trick is to use NIDX format, for which each line stands on its own without respect to a header line. POKI_RUN_COMMAND{{cat data/ragged.csv}}HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/ragged-csv.sh)HERE or, more simply, POKI_INCLUDE_AND_RUN_ESCAPED(data/ragged-csv-2.sh)HERE

Feature-counting

Suppose you have some heterogeneous data like this: POKI_INCLUDE_ESCAPED(data/features.json)HERE

A reasonable question to ask is, how many occurrences of each field are there? And, what percentage of total row count has each of them? Since the denominator of the percentage is not known until the end, this is a two-pass algorithm: POKI_INCLUDE_ESCAPED(data/feature-count.mlr)HERE

Then POKI_RUN_COMMAND{{mlr --json put -q -f data/feature-count.mlr data/features.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --opprint put -q -f data/feature-count.mlr data/features.json}}HERE

Unsparsing

The previous section discussed how to fill out missing data fields within CSV with full header line — so the list of all field names is present within the header line. Next, let’s look at a related problem: we have data where each record has various key names but we want to produce rectangular output having the union of all key names.

For example, suppose you have JSON input like this: POKI_RUN_COMMAND{{cat data/sparse.json}}HERE

There are field names a, b, v, u, x, w in the data — but not all in every record. Since we don’t know the names of all the keys until we’ve read them all, this needs to be a two-pass algorithm. On the first pass, remember all the unique key names and all the records; on the second pass, loop through the records filling in absent values, then producing output. Use put -q since we don’t want to produce per-record output, only emitting output in the end block: POKI_RUN_COMMAND{{cat data/unsparsify.mlr}}HERE POKI_RUN_COMMAND{{mlr --json put -q -f data/unsparsify.mlr data/sparse.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --ocsv put -q -f data/unsparsify.mlr data/sparse.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --opprint put -q -f data/unsparsify.mlr data/sparse.json}}HERE

There is a keystroke-saving verb for this: mlr unsparsify.

Parsing log-file output

This, of course, depends highly on what’s in your log files. But, as an example, suppose you have log-file lines such as POKI_CARDIFY(2015-10-08 08:29:09,445 INFO com.company.path.to.ClassName @ [sometext] various/sorts/of data {& punctuation} hits=1 status=0 time=2.378)HERE I prefer to pre-filter with grep and/or sed to extract the structured text, then hand that to Miller. Example: POKI_CARDIFY(grep 'various sorts' *.log | sed 's/.*} //' | mlr --fs space --repifs --oxtab stats1 -a min,p10,p50,p90,max -f time -g status)HERE

Memoization with out-of-stream variables

The recursive function for the Fibonacci sequence is famous for its computational complexity. Namely, using f(0)=1, f(1)=1, f(n)=f(n-1)+f(n-2) for n≥2, the evaluation tree branches left as well as right at each non-trivial level, resulting in millions or more paths to the root 0/1 nodes for larger n. This program POKI_INCLUDE_ESCAPED(data/fibo-uncached.sh)HERE

produces output like this:

i  o      fcount  seconds_delta
1  1      1       0
2  2      3       0.000039101
3  3      5       0.000015974
4  5      9       0.000019073
5  8      15      0.000026941
6  13     25      0.000036955
7  21     41      0.000056028
8  34     67      0.000086069
9  55     109     0.000134945
10 89     177     0.000217915
11 144    287     0.000355959
12 233    465     0.000506163
13 377    753     0.000811815
14 610    1219    0.001297235
15 987    1973    0.001960993
16 1597   3193    0.003417969
17 2584   5167    0.006215811
18 4181   8361    0.008294106
19 6765   13529   0.012095928
20 10946  21891   0.019592047
21 17711  35421   0.031193972
22 28657  57313   0.057254076
23 46368  92735   0.080307961
24 75025  150049  0.129482031
25 121393 242785  0.213325977
26 196418 392835  0.334423065
27 317811 635621  0.605969906
28 514229 1028457 0.971235037

Note that the time it takes to evaluate the function is blowing up exponentially as the input argument increases. Using @-variables, which persist across records, we can cache and reuse the results of previous computations: POKI_INCLUDE_ESCAPED(data/fibo-cached.sh)HERE

with output like this:

i  o      fcount seconds_delta
1  1      1      0
2  2      3      0.000053883
3  3      3      0.000035048
4  5      3      0.000045061
5  8      3      0.000014067
6  13     3      0.000028849
7  21     3      0.000028133
8  34     3      0.000027895
9  55     3      0.000014067
10 89     3      0.000015020
11 144    3      0.000012875
12 233    3      0.000033140
13 377    3      0.000014067
14 610    3      0.000012875
15 987    3      0.000029087
16 1597   3      0.000013828
17 2584   3      0.000013113
18 4181   3      0.000012875
19 6765   3      0.000013113
20 10946  3      0.000012875
21 17711  3      0.000013113
22 28657  3      0.000013113
23 46368  3      0.000015974
24 75025  3      0.000012875
25 121393 3      0.000013113
26 196418 3      0.000012875
27 317811 3      0.000013113
28 514229 3      0.000012875
miller-5.6.2/doc/content-for-cookbook2.html000066400000000000000000000211621354153536500206030ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Randomly selecting words from a list

Given this word list, first take a look to see what the first few lines look like:

$ head data/english-words.txt 
a
aa
aal
aalii
aam
aardvark
aardwolf
aba
abac
abaca

Then the following will randomly sample ten words with four to eight characters in them:

$ mlr --from data/english-words.txt --nidx filter -S 'n=strlen($1);4<=n&&n<=8' then sample -k 10
thionine
birchman
mildewy
avigate
addedly
abaze
askant
aiming
insulant
coinmate

Randomly generating jabberwocky words

These are simple n-grams as described here. Some common functions are here. Then here are scripts for 1-grams, 2-grams, 3-grams, 4-grams, and 5-grams.

The idea is that words from the input file are consumed, then taken apart and pasted back together in ways which imitate the letter-to-letter transitions found in the word list — giving us automatically generated words in the same vein as bromance and spork:

$ mlr --nidx --from ./ngrams/gsl-2000.txt put -q -f ./ngrams/ngfuncs.mlr -f ./ngrams/ng5.mlr
beard
plastinguish
politicially
noise
loan
country
controductionary
suppery
lose
lessors
dollar
judge
rottendence
lessenger
diffendant
suggestional

Program timing

This admittedly artificial example demonstrates using Miller time and stats functions to introspectively acquire some information about Miller’s own runtime. The delta function computes the difference between successive timestamps. POKI_INCLUDE_ESCAPED(data/timing-example.txt)HERE

Computing interquartile ranges

For one or more specified field names, simply compute p25 and p75, then write the IQR as the difference of p75 and p25: POKI_INCLUDE_AND_RUN_ESCAPED(data/iqr1.sh)HERE

For wildcarded field names, first compute p25 and p75, then loop over field names with p25 in them: POKI_INCLUDE_AND_RUN_ESCAPED(data/iqrn.sh)HERE

Computing weighted means

This might be more elegantly implemented as an option within the stats1 verb. Meanwhile, it’s expressible within the DSL: POKI_INCLUDE_AND_RUN_ESCAPED(data/weighted-mean.sh)HERE

Generating random numbers from various distributions

Here we can chain together a few simple building blocks: POKI_RUN_COMMAND{{cat expo-sample.sh}}HERE

Namely:

  • Set the Miller random-number seed so this webdoc looks the same every time I regenerate it.
  • Use pretty-printed tabular output.
  • Use pretty-printed tabular output.
  • Use seqgen to produce 100,000 records i=0, i=1, etc.
  • Send those to a put step which defines an inverse-transform-sampling function and calls it twice, then computes the sum and product of samples.
  • Send those to a histogram, and from there to a bar-plotter. This is just for visualization; you could just as well output CSV and send that off to your own plotting tool, etc.
The output is as follows: POKI_RUN_COMMAND{{sh expo-sample.sh}}HERE

Sieve of Eratosthenes

The Sieve_of_Eratosthenes is a standard introductory programming topic. The idea is to find all primes up to some N by making a list of the numbers 1 to N, then striking out all multiples of 2 except 2 itself, all multiples of 3 except 3 itself, all multiples of 4 except 4 itself, and so on. Whatever survives that without getting marked is a prime. This is easy enough in Miller. Notice that here all the work is in begin and end statements; there is no file input (so we use mlr -n to keep Miller from waiting for input data). POKI_RUN_COMMAND{{cat programs/sieve.mlr}}HERE POKI_RUN_COMMAND{{mlr -n put -f programs/sieve.mlr}}HERE

Mandelbrot-set generator

The Mandelbrot set is also easily expressed. This isn’t an important case of data-processing in the vein for which Miller was designed, but it is an example of Miller as a general-purpose programming language — a test case for the expressiveness of the language.

The (approximate) computation of points in the complex plane which are and aren’t members is just a few lines of complex arithmetic (see the Wikipedia article); how to render them is another task. Using graphics libraries you can create PNG or JPEG files, but another fun way to do this is by printing various characters to the screen: POKI_RUN_COMMAND{{cat programs/mand.mlr}}HERE

At standard resolution this makes a nice little ASCII plot: POKI_RUN_COMMAND{{mlr -n put -f ./programs/mand.mlr}}HERE

But using a very small font size (as small as my Mac will let me go), and by choosing the coordinates to zoom in on a particular part of the complex plane, we can get a nice little picture:

#!/bin/bash
# Get the number of rows and columns from the terminal window dimensions
iheight=$(stty size | mlr --nidx --fs space cut -f 1)
iwidth=$(stty size | mlr --nidx --fs space cut -f 2)
echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" \
  | mlr put -f programs/mand.mlr 
miller-5.6.2/doc/content-for-cookbook3.html000066400000000000000000000143261354153536500206100ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Overview

One of Miller’s strengths is its compact notation: for example, given input of the form POKI_RUN_COMMAND{{head -n 5 ../data/medium}}HERE you can simply do POKI_RUN_COMMAND{{mlr --oxtab stats1 -a sum -f x ../data/medium}}HERE or POKI_RUN_COMMAND{{mlr --opprint stats1 -a sum -f x -g b ../data/medium}}HERE rather than the more tedious POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-sum.sh)HERE or POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-sum-grouped.sh)HERE

The former (mlr stats1 et al.) has the advantages of being easier to type, being less error-prone to type, and running faster.

Nonetheless, out-of-stream variables (which I whimsically call oosvars), begin/end blocks, and emit statements give you the ability to implement logic — if you wish to do so — which isn’t present in other Miller verbs. (If you find yourself often using the same out-of-stream-variable logic over and over, please file a request at https://github.com/johnkerl/miller/issues to get it implemented directly in C as a Miller verb of its own.)

The following examples compute some things using oosvars which are already computable using Miller verbs, by way of providing food for thought.

Mean without/with oosvars

POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x data/medium}}HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/mean-with-oosvars.sh)HERE

Keyed mean without/with oosvars

POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x -g a,b data/medium}}HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/keyed-mean-with-oosvars.sh)HERE

Variance and standard deviation without/with oosvars

POKI_RUN_COMMAND{{mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium}}HERE POKI_RUN_COMMAND{{cat variance.mlr}}HERE POKI_RUN_COMMAND{{mlr --oxtab put -q -f variance.mlr data/medium}}HERE You can also do this keyed, of course, imitating the keyed-mean example above.

Min/max without/with oosvars

POKI_RUN_COMMAND{{mlr --oxtab stats1 -a min,max -f x data/medium}}HERE POKI_RUN_COMMAND{{mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium}}HERE

Keyed min/max without/with oosvars

POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,max -f x -g a data/medium}}HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/keyed-min-max-with-oosvars.sh)HERE

Delta without/with oosvars

POKI_RUN_COMMAND{{mlr --opprint step -a delta -f x data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small}}HERE

Keyed delta without/with oosvars

POKI_RUN_COMMAND{{mlr --opprint step -a delta -f x -g a data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small}}HERE

Exponentially weighted moving averages without/with oosvars

POKI_INCLUDE_AND_RUN_ESCAPED(verb-example-ewma.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-ewma.sh)HERE
miller-5.6.2/doc/content-for-data-examples.html000066400000000000000000000112061354153536500214360ustar00rootroot00000000000000POKI_PUT_TOC_HERE

flins data

The flins.csv file is some sample data obtained from https://support.spatialkey.com/spatialkey-sample-csv-data.

Vertical-tabular format is good for a quick look at CSV data layout — seeing what columns you have to work with: POKI_RUN_COMMAND{{head -n 2 data/flins.csv | mlr --icsv --oxtab cat}}HERE

A few simple queries: POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint count-distinct -f county | head}}HERE POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint count-distinct -f construction,line}}HERE

Categorization of total insured value: POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012}}HERE POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 -g construction,line}}HERE POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --oxtab stats1 -a p0,p10,p50,p90,p95,p99,p100 -f hu_site_deductible}}HERE POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats1 -a p95,p99,p100 -f hu_site_deductible -g county then sort -f county | head}}HERE POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --oxtab stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012}}HERE POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 -g county}}HERE

Color/shape data

The colored-shapes.dkvp file is some sample data produced by the mkdat2 script. The idea is

  • Produce some data with known distributions and correlations, and verify that Miller recovers those properties empirically.
  • Each record is labeled with one of a few colors and one of a few shapes.
  • The flag field is 0 or 1, with probability dependent on color
  • The u field is plain uniform on the unit interval.
  • The v field is the same, except tightly correlated with u for red circles.
  • The w field is autocorrelated for each color/shape pair.
  • The x field is boring Gaussian with mean 5 and standard deviation about 1.2, with no dependence on color or shape.

Peek at the data: POKI_RUN_COMMAND{{wc -l data/colored-shapes.dkvp}}HERE POKI_RUN_COMMAND{{head -n 6 data/colored-shapes.dkvp | mlr --opprint cat}}HERE

Look at uncategorized stats (using creach for spacing). Here it looks reasonable that u is unit-uniform; something’s up with v but we can’t yet see what: POKI_RUN_COMMAND{{mlr --oxtab stats1 -a min,mean,max -f flag,u,v data/colored-shapes.dkvp | creach 3}}HERE

The histogram shows the different distribution of 0/1 flags: POKI_RUN_COMMAND{{mlr --opprint histogram -f flag,u,v --lo -0.1 --hi 1.1 --nbins 12 data/colored-shapes.dkvp}}HERE

Look at univariate stats by color and shape. In particular, color-dependent flag probabilities pop out, aligning with their original Bernoulli probablities from the data-generator script: POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,mean,max -f flag,u,v -g color then sort -f color data/colored-shapes.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,mean,max -f flag,u,v -g shape then sort -f shape data/colored-shapes.dkvp}}HERE

Look at bivariate stats by color and shape. In particular, u,v pairwise correlation for red circles pops out: POKI_RUN_COMMAND{{mlr --opprint --right stats2 -a corr -f u,v,w,x data/colored-shapes.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint --right stats2 -a corr -f u,v,w,x -g color,shape then sort -nr u_v_corr data/colored-shapes.dkvp}}HERE

miller-5.6.2/doc/content-for-data-sharing.html000066400000000000000000000124011354153536500212510ustar00rootroot00000000000000POKI_PUT_TOC_HERE

As discussed in the section on POKI_PUT_LINK_FOR_PAGE(file-formats.html)HERE, Miller supports several different file formats. Different tools are good at different things, so it’s important to be able to move data into and out of other languages. CSV and JSON are well-known, of course; here are some examples using DKVP format, with Ruby and Python. Last, we show how to use arbitrary shell commands to extend functionality beyond Miller’s domain-specific language.

DKVP I/O in Python

Here are the I/O routines: POKI_INCLUDE_ESCAPED(polyglot-dkvp-io/dkvp_io.py)HERE And here is an example using them: POKI_RUN_COMMAND{{cat polyglot-dkvp-io/example.py}}HERE Run as-is: POKI_RUN_COMMAND{{python polyglot-dkvp-io/example.py < data/small}}HERE Run as-is, then pipe to Miller for pretty-printing: POKI_RUN_COMMAND{{python polyglot-dkvp-io/example.py < data/small | mlr --opprint cat}}HERE

DKVP I/O in Ruby

Here are the I/O routines: POKI_INCLUDE_ESCAPED(polyglot-dkvp-io/dkvp_io.rb)HERE And here is an example using them: POKI_RUN_COMMAND{{cat polyglot-dkvp-io/example.rb}}HERE Run as-is: POKI_RUN_COMMAND{{ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small}}HERE Run as-is, then pipe to Miller for pretty-printing: POKI_RUN_COMMAND{{ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small | mlr --opprint cat}}HERE

SQL-output examples

Please see here.

SQL-input examples

Please see here.

Running shell commands

The system DSL function allows you to run a specific shell command and put its output — minus the final newline — into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you. POKI_RUN_COMMAND{{mlr --opprint put '$o = system("echo hello world")' data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint put '$o = system("echo {" . NR . "}")' data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint put '$o = system("echo -n ".$a."| sha1sum")' data/small}}HERE

Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system date command for the current time in nanoseconds versus computing it in process:

$ mlr --opprint put '$t=system("date +%s.%N")' then step -a delta -f t data/small
a   b   i x                   y                   t                    t_delta
pan pan 1 0.3467901443380824  0.7268028627434533  1568774318.513903817 0
eks pan 2 0.7586799647899636  0.5221511083334797  1568774318.514722876 0.000819
wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.515618046 0.000895
eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.516547441 0.000929
wye pan 5 0.5732889198020006  0.8636244699032729  1568774318.517518828 0.000971

$ mlr --opprint put '$t=systime()' then step -a delta -f t data/small
a   b   i x                   y                   t                 t_delta
pan pan 1 0.3467901443380824  0.7268028627434533  1568774318.518699 0
eks pan 2 0.7586799647899636  0.5221511083334797  1568774318.518717 0.000018
wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.518723 0.000006
eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.518727 0.000004
wye pan 5 0.5732889198020006  0.8636244699032729  1568774318.518730 0.000003

miller-5.6.2/doc/content-for-etymology.html000066400000000000000000000011641354153536500207430ustar00rootroot00000000000000POKI_PUT_TOC_HERE

The Unix toolkit was created in the 1970s and is a mainstay to this day. Miller is written in plain C, and its look and feel adheres closely to the classic toolkit style: if this were music, Miller would be a tribute album. Likewise, since commands are subcommands of the mlr executable, the result is a band, if you will, of command-line tools. Put these together and the namesake is another classic product of the 1970s: the Steve Miller Band. miller-5.6.2/doc/content-for-faq.html000066400000000000000000000505771354153536500174760ustar00rootroot00000000000000POKI_PUT_TOC_HERE

No output at all

Try od -xcv and/or cat -e on your file to check for non-printable characters.

If you’re using Miller version less than 5.0.0 (try mlr --version on your system to find out), when the line-ending-autodetect feature was introduced, please see here.

Fields not selected

Check the field-separators of the data, e.g. with the command-line head program. Example: for CSV, Miller’s default record separator is comma; if your data is tab-delimited, e.g. aTABbTABc, then Miller won’t find three fields named a, b, and c but rather just one named aTABbTABc. Solution in this case: mlr --fs tab {remaining arguments ...}.

Also try od -xcv and/or cat -e on your file to check for non-printable characters.

Diagnosing delimiter specifications

POKI_INCLUDE_ESCAPED(data/delimiter-examples.txt)HERE

How do I suppress numeric conversion?

TL;DR use put -S.

Within mlr put and mlr filter, the default behavior for scanning input records is to parse them as integer, if possible, then as float, if possible, else leave them as string: POKI_RUN_COMMAND{{cat data/scan-example-1.tbl}}HERE POKI_RUN_COMMAND{{mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-1.tbl}}HERE

The numeric-conversion rule is simple:

  • Try to scan as integer ("1" should be int);
  • if that doesn’t succeed, try to scan as float ("1.0" should be float);
  • if that doesn’t succeed, leave the value as a string ("1x" is string).

This is a sensible default: you should be able to put '$z = $x + $y' without having to write '$z = int($x) + float($y)'. Also note that default output format for floating-point numbers created by put (and other verbs such as stats1) is six decimal places; you can override this using mlr --ofmt. Also note that Miller uses your system’s C library functions whenever possible: e.g. sscanf for converting strings to integer or floating-point.

But now suppose you have data like these: POKI_RUN_COMMAND{{cat data/scan-example-2.tbl}}HERE POKI_RUN_COMMAND{{mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl}}HERE

The same conversion rules as above are being used. Namely:

  • By default field values are inferred to int, else float, else string;
  • leading zeroes indicate octal for integers (sscanf semantics);
  • since 0008 doesn't scan as integer (leading 0 requests octal but 8 isn't a valid octal digit), the float scan is tried next and it succeeds;
  • default floating-point output format is 6 decimal places (override with mlr --ofmt).

Taken individually the rules make sense; taken collectively they produce a mishmash of types here.

The solution is to use the -S flag for mlr put and/or mlr filter. Then all field values are left as string. You can type-coerce on demand using syntax like '$z = int($x) + float($y)'. (See also the put documentation; see also https://github.com/johnkerl/miller/issues/150.) POKI_RUN_COMMAND{{mlr --pprint put -S '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl}}HERE

How do I examine then-chaining?

Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step.

First, look at the input data: POKI_RUN_COMMAND{{cat data/then-example.csv}}HERE Next, run the first step of your command, omitting anything from the first then onward: POKI_RUN_COMMAND{{mlr --icsv --opprint count-distinct -f Status,Payment_Type data/then-example.csv}}HERE After that, run it with the next then step included: POKI_RUN_COMMAND{{mlr --icsv --opprint count-distinct -f Status,Payment_Type then sort -nr count data/then-example.csv}}HERE Now if you use then to include another verb after that, the columns Status, Payment_Type, and count will be the input to that verb.

Note, by the way, that you’ll get the same results using pipes: POKI_RUN_COMMAND{{mlr --csv count-distinct -f Status,Payment_Type data/then-example.csv | mlr --icsv --opprint sort -nr count}}HERE

I assigned $9 and it’s not 9th

Miller records are ordered lists of key-value pairs. For NIDX format, DKVP format when keys are missing, or CSV/CSV-lite format with --implicit-csv-header, Miller will sequentially assign keys of the form 1, 2, etc. But these are not integer array indices: they’re just field names taken from the initial field ordering in the input data. POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp cat}}HERE POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp put '$6="a";$4="b";$55="cde"'}}HERE POKI_RUN_COMMAND{{echo x,y,z | mlr --nidx cat}}HERE POKI_RUN_COMMAND{{echo x,y,z | mlr --csv --implicit-csv-header cat}}HERE POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp rename 2,999}}HERE POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp rename 2,newname}}HERE POKI_RUN_COMMAND{{echo x,y,z | mlr --csv --implicit-csv-header reorder -f 3,1,2}}HERE

How can I filter by date?

Given input like POKI_RUN_COMMAND{{cat dates.csv}}HERE we can use strptime to parse the date field into seconds-since-epoch and then do numeric comparisons. Simply match your input dataset’s date-formatting to the strptime format-string. For example: POKI_RUN_COMMAND{{mlr --csv filter 'strptime($date, "%Y-%m-%d") > strptime("2018-03-03", "%Y-%m-%d")' dates.csv}}HERE

Caveat: localtime-handling in timezones with DST is still a work in progress; see https://github.com/johnkerl/miller/issues/170. See also https://github.com/johnkerl/miller/issues/208 — thanks @aborruso!

How can I handle commas-as-data in various formats?

CSV handles this well and by design: POKI_RUN_COMMAND{{cat commas.csv}}HERE

Likewise JSON: POKI_RUN_COMMAND{{mlr --icsv --ojson cat commas.csv}}HERE

For Miller’s XTAB there is no escaping for carriage returns, but commas work fine: POKI_RUN_COMMAND{{mlr --icsv --oxtab cat commas.csv}}HERE

But for DKVP and NIDX, commas are the default field separator. And — as of Miller 5.4.0 anyway — there is no CSV-style double-quote-handling like there is for CSV. So commas within the data look like delimiters: POKI_RUN_COMMAND{{mlr --icsv --odkvp cat commas.csv}}HERE

One solution is to use a different delimiter, such as a pipe character: POKI_RUN_COMMAND{{mlr --icsv --odkvp --ofs pipe cat commas.csv}}HERE

To be extra-sure to avoid data/delimiter clashes, you can also use control characters as delimiters — here, control-A: POKI_RUN_COMMAND{{mlr --icsv --odkvp --ofs '\001' cat commas.csv | cat -v}}HERE

How can I handle field names with special symbols in them?

Simply surround the field names with curly braces: POKI_RUN_COMMAND{{echo 'x.a=3,y:b=4,z/c=5' | mlr put '${product.all} = ${x.a} * ${y:b} * ${z/c}'}}HERE

How to escape '?' in regexes?

One way is to use square brackets; an alternative is to use simple string-substitution rather than a regular expression. POKI_RUN_COMMAND{{cat data/question.dat}}HERE POKI_RUN_COMMAND{{mlr --oxtab put '$c = gsub($a, "[?]"," ...")' data/question.dat}}HERE POKI_RUN_COMMAND{{mlr --oxtab put '$c = ssub($a, "?"," ...")' data/question.dat}}HERE

The ssub function exists precisely for this reason: so you don’t have to escape anything.

How can I put single-quotes into strings?

This is a little tricky due to the shell’s handling of quotes. For simplicity, let’s first put an update script into a file: POKI_INCLUDE_ESCAPED(data/single-quote-example.mlr)HERE POKI_RUN_COMMAND{{echo a=bcd | mlr put -f data/single-quote-example.mlr}}HERE

So, it’s simple: Miller’s DSL uses double quotes for strings, and you can put single quotes (or backslash-escaped double-quotes) inside strings, no problem.

Without putting the update expression in a file, it’s messier: POKI_RUN_COMMAND{{echo a=bcd | mlr put '$a="It'\''s OK, I said, '\''for now'\''."'}}HERE

The idea is that the outermost single-quotes are to protect the put expression from the shell, and the double quotes within them are for Miller. To get a single quote in the middle there, you need to actually put it outside the single-quoting for the shell. The pieces are

  • $a="It
  • \'
  • s OK, I said,
  • \'
  • for now
  • \'
  • .
all concatenated together.

Why doesn’t mlr cut put fields in the order I want?

Example: columns x,i,a were requested but they appear here in the order a,i,x: POKI_RUN_COMMAND{{cat data/small}}HERE POKI_RUN_COMMAND{{mlr cut -f x,i,a data/small}}HERE

The issue is that Miller’s cut, by default, outputs cut fields in the order they appear in the input data. This design decision was made intentionally to parallel the *nix system cut command, which has the same semantics.

The solution is to use the -o option: POKI_RUN_COMMAND{{mlr cut -o -f x,i,a data/small}}HERE

NR is not consecutive after then-chaining

Given this input data: POKI_RUN_COMMAND{{cat data/small}}HERE why don’t I see NR=1 and NR=2 here?? POKI_RUN_COMMAND{{mlr filter '$x > 0.5' then put '$NR = NR' data/small}}HERE

The reason is that NR is computed for the original input records and isn’t dynamically updated. By contrast, NF is dynamically updated: it’s the number of fields in the current record, and if you add/remove a field, the value of NF will change: POKI_RUN_COMMAND{{echo x=1,y=2,z=3 | mlr put '$nf1 = NF; $u = 4; $nf2 = NF; unset $x,$y,$z; $nf3 = NF'}}HERE

NR, by contrast (and FNR as well), retains the value from the original input stream, and records may be dropped by a filter within a then-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows: POKI_INCLUDE_AND_RUN_ESCAPED(data/dynamic-nr.sh)HERE

Or, simply use mlr cat -n: POKI_RUN_COMMAND{{mlr filter '$x > 0.5' then cat -n data/small}}HERE

Why am I not seeing all possible joins occur?

This section describes behavior before Miller 5.1.0. As of 5.1.0, -u is the default.

For example, the right file here has nine records, and the left file should add in the hostname column — so the join output should also have 9 records: POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-u-left.csv}}HERE POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-u-right.csv}}HERE POKI_RUN_COMMAND{{mlr --icsvlite --opprint join -s -j ipaddr -f data/join-u-left.csv data/join-u-right.csv}}HERE

The issue is that Miller’s join, by default (before 5.1.0), took input sorted (lexically ascending) by the sort keys on both the left and right files. This design decision was made intentionally to parallel the *nix system join command, which has the same semantics. The benefit of this default is that the joiner program can stream through the left and right files, needing to load neither entirely into memory. The drawback, of course, is that is requires sorted input.

The solution (besides pre-sorting the input files on the join keys) is to simply use mlr join -u (which is now the default). This loads the left file entirely into memory (while the right file is still streamed one line at a time) and does all possible joins without requiring sorted input: POKI_RUN_COMMAND{{mlr --icsvlite --opprint join -u -j ipaddr -f data/join-u-left.csv data/join-u-right.csv}}HERE

General advice is to make sure the left-file is relatively small, e.g. containing name-to-number mappings, while saving large amounts of data for the right file.

How to rectangularize after joins with unpaired?

Suppose you have the following two data files: POKI_INCLUDE_ESCAPED(data/color-codes.csv)HERE POKI_INCLUDE_ESCAPED(data/color-names.csv)HERE

Joining on color the results are as expected: POKI_RUN_COMMAND{{mlr --csv join -j id -f data/color-codes.csv data/color-names.csv}}HERE

However, if we ask for left-unpaireds, since there’s no color column, we get a row not having the same column names as the other: POKI_RUN_COMMAND{{mlr --csv join --ul -j id -f data/color-codes.csv data/color-names.csv}}HERE

To fix this, we can use unsparsify: POKI_RUN_COMMAND{{mlr --csv join --ul -j id -f data/color-codes.csv then unsparsify --fill-with "" data/color-names.csv}}HERE

Thanks to @aborruso for the tip!

What about XML or JSON file formats?

Miller handles tabular data, which is a list of records each having fields which are key-value pairs. Miller also doesn’t require that each record have the same field names (see also here). Regardless, tabular data is a non-recursive data structure.

XML, JSON, etc. are, by contrast, all recursive or nested data structures. For example, in JSON you can represent a hash map whose values are lists of lists.

Now, you can put tabular data into these formats — since list-of-key-value-pairs is one of the things representable in XML or JSON. Example:

# DKVP
x=1,y=2
z=3

# XML
<table>
  <record>
    <field>
      <key> x </key> <value> 1 </value>
    </field>
    <field>
      <key> y </key> <value> 2 </value>
    </field>
  </record>
    <field>
      <key> z </key> <value> 3 </value>
    </field>
  <record>
  </record>
</table>

# JSON
[{"x":1,"y":2},{"z":3}]

However, a tool like Miller which handles non-recursive data is never going to be able to handle full XML/JSON semantics — only a small subset. If tabular data represented in XML/JSON/etc are sufficiently well-structured, it may be easy to grep/sed out the data into a simpler text form — this is a general text-processing problem.

Miller does support tabular data represented in JSON: please see POKI_PUT_LINK_FOR_PAGE(file-formats.html)HERE. See also jq for a truly powerful, JSON-specific tool.

For XML, my suggestion is to use a tool like ff-extractor to do format conversion.

miller-5.6.2/doc/content-for-feature-comparison.html000066400000000000000000000070571354153536500225250ustar00rootroot00000000000000POKI_PUT_TOC_HERE

File-format awareness

Miller respects CSV headers. If you do mlr --csv cat *.csv then the header line is written once:
POKI_RUN_COMMAND{{cat data/a.csv}}HERE POKI_RUN_COMMAND{{cat data/b.csv}}HERE POKI_RUN_COMMAND{{mlr --csv cat data/a.csv data/b.csv}}HERE POKI_RUN_COMMAND{{mlr --csv sort -nr b data/a.csv data/b.csv}}HERE
Likewise with mlr sort, mlr tac, and so on.

awk-like features: mlr filter and mlr put

  • mlr filter includes/excludes records based on a filter expression, e.g. mlr filter '$count > 10'.
  • mlr put adds a new field as a function of others, e.g. mlr put '$xy = $x * $y' or mlr put '$counter = NR'.
  • The $name syntax is straight from awk’s $1 $2 $3 (adapted to name-based indexing), as are the variables FS, OFS, RS, ORS, NF, NR, and FILENAME. The ENV[...] syntax is from Ruby.
  • While awk functions are record-based, Miller subcommands (or verbs) are stream-based: each of them maps a stream of records into another stream of records.
  • Like awk, Miller (as of v5.0.0) allows you to define new functions within its put and filter expression language. Further programmability comes from chaining with then.
  • As with awk, $-variables are stream variables and all verbs (such as cut, stats1, put, etc.) as well as put/filter statements operate on streams. This means that you define actions to be done on each record and then stream your data through those actions. The built-in variables NF, NR, etc. change from one line to another, $x is a label for field x in the current record, and the input to sqrt($x) changes from one record to the next. The expression language for the put and filter verbs additionally allows you to define begin {...} and end {...} blocks for actions to be taken before and after records are processed, respectively.
  • As with awk, Miller’s put/filter language lets you set @sum=0 before records are read, then update that sum on each record, then print its value at the end. Unlike awk, Miller makes syntactically explicit the difference between variables with extent across all records (names starting with @, such as @sum) and variables which are local to the current expression (names starting without @, such as sum).
  • Miller can be faster than awk, cut, and so on, depending on platform; see also POKI_PUT_LINK_FOR_PAGE(performance.html)HERE). In particular, Miller’s DSL syntax is parsed into C control structures at startup time, with the bulk data-stream processing all done in C.

See also

See POKI_PUT_LINK_FOR_PAGE(reference.html)HERE for more on Miller’s subcommands cat, cut, head, sort, tac, tail, top, and uniq, as well as awk-like mlr filter and mlr put. miller-5.6.2/doc/content-for-file-formats.html000066400000000000000000000424711354153536500213110ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Overview

Miller handles name-indexed data using several formats: some you probably know by name, such as CSV, TSV, and JSON — and other formats you’re likely already seeing and using in your structured data. Additionally, Miller gives you the option of including comments within your data.

Examples

POKI_RUN_COMMAND{{mlr --usage-data-format-examples}}HERE

CSV/TSV/ASV/USV/etc.

When mlr is invoked with the --csv or --csvlite option, key names are found on the first record and values are taken from subsequent records. This includes the case of CSV-formatted files. See POKI_PUT_LINK_FOR_PAGE(record-heterogeneity.html)HERE for how Miller handles changes of field names within a single data stream.

Miller has record separator RS and field separator FS, just as awk does. For TSV, use --fs tab; to convert TSV to CSV, use --ifs tab --ofs comma, etc. (See also POKI_PUT_LINK_FOR_PAGE(reference.html#Record/field/pair_separators)HERE.)

TSV (tab-separated values): the following are synonymous pairs:

  • --tsv and --csv --fs tab
  • --itsv and --icsv --ifs tab
  • --otsv and --ocsv --ofs tab
  • --tsvlite and --csvlite --fs tab
  • --itsvlite and --icsvlite --ifs tab
  • --otsvlite and --ocsvlite --ofs tab

ASV (ASCII-separated values): the flags --asv, --iasv, --oasv, --asvlite, --iasvlite, and --oasvlite are analogous except they use ASCII FS and RS 0x1f and 0x1e, respectively.

USV (Unicode-separated values): likewise, the flags --usv, --iusv, --ousv, --usvlite, --iusvlite, and --ousvlite use Unicode FS and RS U+241F (UTF-8 0x0xe2909f) and U+241E (UTF-8 0xe2909e), respectively.

Miller’s --csv flag supports RFC-4180 CSV ( https://tools.ietf.org/html/rfc4180). This includes CRLF line-terminators by default, regardless of platform.

Here are the differences between CSV and CSV-lite:

  • CSV supports RFC-4180)-style double-quoting, including the ability to have commas and/or LF/CRLF line-endings contained within an input field; CSV-lite does not.
  • CSV does not allow heterogeneous data; CSV-lite does (see also here).
  • The CSV-lite input-reading code is fractionally more efficient than the CSV input-reader.

Here are things they have in common:

  • The ability to specify record/field separators other than the default, e.g. CR-LF vs. LF, or tab instead of comma for TSV, and so on.
  • The --implicit-csv-header flag for input and the --headerless-csv-output flag for output.

DKVP: Key-value pairs

Miller’s default file format is DKVP, for delimited key-value pairs. Example: POKI_RUN_COMMAND{{mlr cat data/small}}HERE Such data are easy to generate, e.g. in Ruby with POKI_CARDIFY(puts "host=#{hostname},seconds=#{t2-t1},message=#{msg}")HERE POKI_CARDIFY{{puts mymap.collect{|k,v| "#{k}=#{v}"}.join(',')}}HERE or print statements in various languages, e.g. POKI_CARDIFY(echo "type=3,user=$USER,date=$date\n";)HERE POKI_CARDIFY{{logger.log("type=3,user=$USER,date=$date\n");}}HERE

Fields lacking an IPS will have positional index (starting at 1) used as the key, as in NIDX format. For example, dish=7,egg=8,flint is parsed as "dish" => "7", "egg" => "8", "3" => "flint" and dish,egg,flint is parsed as "1" => "dish", "2" => "egg", "3" => "flint".

As discussed in POKI_PUT_LINK_FOR_PAGE(record-heterogeneity.html)HERE, Miller handles changes of field names within the same data stream. But using DKVP format this is particularly natural. One of my favorite use-cases for Miller is in application/server logs, where I log all sorts of lines such as

resource=/path/to/file,loadsec=0.45,ok=true
record_count=100, resource=/path/to/file
resource=/some/other/path,loadsec=0.97,ok=false

etc. and I just log them as needed. Then later, I can use grep, mlr --opprint group-like, etc. to analyze my logs.

See POKI_PUT_LINK_FOR_PAGE(reference.html)HERE regarding how to specify separators other than the default equals-sign and comma.

NIDX: Index-numbered (toolkit style)

With --inidx --ifs ' ' --repifs, Miller splits lines on whitespace and assigns integer field names starting with 1. This recapitulates Unix-toolkit behavior.

Example with index-numbered output:
POKI_RUN_COMMAND{{cat data/small}}HERE POKI_RUN_COMMAND{{mlr --onidx --ofs ' ' cat data/small}}HERE

Example with index-numbered input:
POKI_RUN_COMMAND{{cat data/mydata.txt}}HERE POKI_RUN_COMMAND{{mlr --inidx --ifs ' ' --odkvp cat data/mydata.txt}}HERE

Example with index-numbered input and output:
POKI_RUN_COMMAND{{cat data/mydata.txt}}HERE POKI_RUN_COMMAND{{mlr --nidx --fs ' ' --repifs cut -f 2,3 data/mydata.txt}}HERE

Tabular JSON

JSON is a format which supports arbitrarily deep nesting of “objects” (hashmaps) and “arrays” (lists), while Miller is a tool for handling tabular data only. This means Miller cannot (and should not) handle arbitrary JSON. (Check out jq.)

But if you have tabular data represented in JSON then Miller can handle that for you.

Single-level JSON objects

An array of single-level objects is, quite simply, a table: POKI_RUN_COMMAND{{mlr --json head -n 2 then cut -f color,shape data/json-example-1.json}}HERE POKI_RUN_COMMAND{{mlr --json --jvstack head -n 2 then cut -f color,u,v data/json-example-1.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --opprint stats1 -a mean,stddev,count -f u -g shape data/json-example-1.json}}HERE

Nested JSON objects

Additionally, Miller can tabularize nested objects by concatentating keys: POKI_RUN_COMMAND{{mlr --json --jvstack head -n 2 data/json-example-2.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --opprint head -n 4 data/json-example-2.json}}HERE

Note in particular that as far as Miller’s put and filter, as well as other I/O formats, are concerned, these are simply field names with colons in them: POKI_RUN_COMMAND{{mlr --json --jvstack head -n 1 then put '${values:uv} = ${values:u} * ${values:v}' data/json-example-2.json}}HERE

Arrays

Arrays aren’t supported in Miller’s put/filter DSL. By default, JSON arrays are read in as integer-keyed maps.

Suppose you have arrays like this in our input data: POKI_RUN_COMMAND{{cat data/json-example-3.json}}HERE

Then integer indices (starting from 0 and counting up) are used as map keys: POKI_RUN_COMMAND{{mlr --ijson --oxtab cat data/json-example-3.json}}HERE

When the data are written back out as JSON, field names are re-expanded as above, but what were arrays on input are now maps on output: POKI_RUN_COMMAND{{mlr --json --jvstack cat data/json-example-3.json}}HERE

This is non-ideal, but it allows Miller (5.x release being latest as of this writing) to handle JSON arrays at all.

You might also use mlr --json-skip-arrays-on-input or mlr --json-fatal-arrays-on-input. To truly handle JSON, please use a JSON-processing tool such as jq.

Formatting JSON options

JSON isn’t a parameterized format, so RS, FS, PS aren’t specifiable. Nonetheless, you can do the following:

  • Use --jvstack to pretty-print JSON objects with multi-line (vertically stacked) spacing. By defaulty, each Miller record (JSON object) is one per line.
  • Use --jlistwrap to print the sequence of JSON objects wrapped in an outermost [ and ]. By default, these aren’t printed.
  • Use --jquoteall to double-quote all object values. By default, integers, floating-point numbers, and booleans true and false are not double-quoted when they appear as JSON-object keys.
  • Use --jflatsep yourstringhere to specify the string used for key concatenation: this defaults to a single colon.
  • Use --jofmt to force Miller to apply the global --ofmt to floating-point values. First note: please use sprintf-style codes for double precision, e.g. ending in %lf, %le, or %lg. Miller floats are double-precision so behavior using %f, %d, etc. is undefined. Second note: 0.123 is valid JSON; .123 is not. Thus this feature allows you to emit JSON which may be unparseable by other tools.

Again, please see jq for a truly powerful, JSON-specific tool.

JSON non-streaming

The JSON parser Miller uses does not return until all input is parsed: in particular this means that, unlike for other file formats, Miller does not (at present) handle JSON files in tail -f contexts.

PPRINT: Pretty-printed tabular

Miller’s pretty-print format is like CSV, but column-aligned. For example, compare
POKI_RUN_COMMAND{{mlr --ocsv cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE
Note that while Miller is a line-at-a-time processor and retains input lines in memory only where necessary (e.g. for sort), pretty-print output requires it to accumulate all input lines (so that it can compute maximum column widths) before producing any output. This has two consequences: (a) pretty-print output won’t work on tail -f contexts, where Miller will be waiting for an end-of-file marker which never arrives; (b) pretty-print output for large files is constrained by available machine memory.

See POKI_PUT_LINK_FOR_PAGE(record-heterogeneity.html)HERE for how Miller handles changes of field names within a single data stream.

For output only (this isn’t supported in the input-scanner as of 5.0.0) you can use --barred with pprint output format: POKI_RUN_COMMAND{{mlr --opprint --barred cat data/small}}HERE

XTAB: Vertical tabular

This is perhaps most useful for looking a very wide and/or multi-column data which causes line-wraps on the screen (but see also https://github.com/twosigma/ngrid for an entirely different, very powerful option). Namely:
POKI_INCLUDE_ESCAPED(data/system-file-opprint-example.txt)HERE
POKI_INCLUDE_ESCAPED(data/system-file-oxtab-example.txt)HERE
POKI_INCLUDE_ESCAPED(data/system-file-ojson-example.txt)HERE

Markdown tabular

Markdown format looks like this: POKI_RUN_COMMAND{{mlr --omd cat data/small}}HERE which renders like this when dropped into various web tools (e.g. github comments):

As of Miller 4.3.0, markdown format is supported only for output, not input.

Data-conversion keystroke-savers

While you can do format conversion using mlr --icsv --ojson cat myfile.csv, there are also keystroke-savers for this purpose, such as mlr --c2j cat myfile.csv. For a complete list: POKI_RUN_COMMAND{{mlr --usage-format-conversion-keystroke-saver-options}}HERE

Autodetect of line endings

Default line endings (--irs and --ors) are 'auto' which means autodetect from the input file format, as long as the input file(s) have lines ending in either LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style).

If both IRS and ORS are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you’re running on.

The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF.

If you use --ors {something else} with (default or explicitly specified) --irs auto then line endings are autodetected on input and set to what you specify on output.

If you use --irs {something else} with (default or explicitly specified) --ors auto then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.

See also POKI_PUT_LINK_FOR_PAGE(reference.html#Record/field/pair_separators)HERE for more information about record/field/pair separators.

Comments in data

You can include comments within your data files, and either have them ignored, or passed directly through to the standard output as soon as they are encountered: POKI_RUN_COMMAND{{mlr --usage-comments-in-data}}HERE

Examples: POKI_RUN_COMMAND{{cat data/budget.csv}}HERE POKI_RUN_COMMAND{{mlr --skip-comments --icsv --opprint sort -nr quantity data/budget.csv}}HERE POKI_RUN_COMMAND{{mlr --pass-comments --icsv --opprint sort -nr quantity data/budget.csv}}HERE

miller-5.6.2/doc/content-for-index.html000066400000000000000000000136141354153536500200250ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON. You get to work with your data using named fields, without needing to count positional column indices.

This is something the Unix toolkit always could have done, and arguably always should have done. It operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller’s natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.)

Features:

  • Miller is multi-purpose: it’s useful for data cleaning, data reduction, statistical reporting, devops, system administration, log-file processing, format conversion, and database-query post-processing.
  • You can use Miller to snarf and munge log-file data, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing.
  • Miller complements data-analysis tools such as R, pandas, etc.: you can use Miller to clean and prepare your data. While you can do basic statistics entirely in Miller, its streaming-data feature and single-pass algorithms enable you to reduce very large data sets.
  • Miller complements SQL databases: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples here and here). You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry.
  • Miller also goes beyond the classic Unix tools by stepping fully into our modern, no-SQL world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved.
  • Miller is streaming: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (sort, tac, stats1), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system’s available RAM, and you can use Miller in tail -f contexts.
  • Miller is pipe-friendly and interoperates with the Unix toolkit
  • Miller’s I/O formats include tabular pretty-printing, positionally indexed (Unix-toolkit style), CSV, JSON, and others
  • Miller does conversion between formats
  • Miller’s processing is format-aware: e.g. CSV sort and tac keep header lines first
  • Miller has high-throughput performance on par with the Unix toolkit
  • Not unlike jq (for JSON), Miller is written in portable, modern C, with zero runtime dependencies. You can download or compile a single binary, scp it to a faraway machine, and expect it to work.

Releases and release notes: https://github.com/johnkerl/miller/releases.

Examples:

# Column select
% mlr --csv cut -f hostname,uptime mydata.csv
# Add new columns as function of other columns
% mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
# Row filter
% mlr --csv filter '$status != "down" && $upsec >= 10000' *.csv
# Apply column labels and pretty-print
% grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
# Join multiple data sources on key columns
% mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
# Multiple formats including JSON
% mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
# Aggregate per-column statistics
% mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
# Linear regression
% mlr stats2 -a linreg-pca -f u,v -g shape data/*
# Aggregate custom per-column statistics
% mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
# Iterate over data using DSL expressions
% mlr --from estimates.tbl put '
  for (k,v in $*) {
    if (is_numeric(v) && k =~ "^[t-z].*$") {
      $sum += v; $count += 1
    }
  }
  $mean = $sum / $count # no assignment if count unset
'
# Run DSL expressions from a script file
% mlr --from infile.dat put -f analyze.mlr
# Split/reduce output to multiple filenames
% mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
# Compressed I/O
% mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
# Interoperate with other data-processing tools using standard pipes
% mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
# Tap/trace
% mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
miller-5.6.2/doc/content-for-internationalization.html000066400000000000000000000024271354153536500231630ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.)

By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes:

Meanwhile, regular expressions and the sub and gsub function correctly, albeit without explicit intentional support.

Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter). miller-5.6.2/doc/content-for-manpage.html000066400000000000000000000003031354153536500203150ustar00rootroot00000000000000POKI_PUT_TOC_HERE

This is simply a copy of what you should see on running man mlr at a command prompt, once Miller is installed on your system. POKI_INCLUDE_ESCAPED(manpage.txt)HERE miller-5.6.2/doc/content-for-originality.html000066400000000000000000000142641354153536500212520ustar00rootroot00000000000000POKI_PUT_TOC_HERE

It isn’t. Miller is one of many, many participants in the online-analytical-processing culture. Other key participants include awk, SQL, spreadsheets, etc. etc. etc. Far from being an original concept, Miller explicitly strives to imitate several existing tools:

Unix toolkit: Intentional similarities as described in POKI_PUT_LINK_FOR_PAGE(feature-comparison.html)HERE.

Recipes abound for command-line data analysis using the Unix toolkit. Here are just a couple of my favorites:

RecordStream: Miller owes particular inspiration to RecordStream. The key difference is that RecordStream is a Perl-based tool for manipulating JSON (including requiring it to separately manipulate other formats such as CSV into and out of JSON), while Miller is fast C which handles its formats natively. The similarities include the sort, stats1 (analog of RecordStream’s collate), and delta operations, as well as filter and put, and pretty-print formatting.

stats_m: A third source of lineage is my Python stats_m module. This includes simple single-pass algorithms which form Miller’s stats1 and stats2 subcommands.

SQL: Fourthly, Miller’s group-by command name is from SQL, as is the term aggregate.

Added value: Miller’s added values include:

  • Name-indexing, compared to the Unix toolkit’s positional indexing.
  • Raw speed, compared to awk, RecordStream, stats_m, or various other kinds of Python/Ruby/etc. scripts one can easily create.
  • Compact keystroking for many common tasks, with a decent amount of flexibility.
  • Ability to handle text files on the Unix pipe, without need for creating database tables, compared to SQL databases.
  • Various file formats, and on-the-fly format conversion.

jq: Miller does for name-indexed text what jq does for JSON. If you’re not already familiar with jq, please check it out!.

What about similar tools? Here’s a comprehensive list: https://github.com/dbohdan/structured-text-tools. It doesn’t mention rows so here’s a plug for that as well. As it turns out, I learned about most of these after writing Miller.

What about DOTADIW? One of the key points of the Unix philosophy is that a tool should do one thing and do it well. Hence sort and cut do just one thing. Why does Miller put awk-like processing, a few SQL-like operations, and statistical reduction all into one tool (see also POKI_PUT_LINK_FOR_PAGE(reference.html)HERE)? This is a fair question. First note that many standard tools, such as awk and perl, do quite a few things — as does jq. But I could have pushed for putting format awareness and name-indexing options into cut, awk, and so on (so you could do cut -f hostname,uptime or awk '{sum += $x*$y}END{print sum}'). Patching cut, sort, etc. on multiple operating systems is a non-starter in terms of uptake. Moreover, it makes sense for me to have Miller be a tool which collects together format-aware record-stream processing into one place, with good reuse of Miller-internal library code for its various features.

Why not use Perl/Python/Ruby etc.? Maybe you should. With those tools you’ll get far more expressive power, and sufficiently quick turnaround time for small-to-medium-sized data. Using Miller you’ll get something less than a complete programming language, but which is fast, with moderate amounts of flexibility and much less keystroking.

When I was first developing Miller I made a survey of several languages. Using low-level implementation languages like C, Go, Rust, and Nim, I’d need to create my own domain-specific language (DSL) which would always be less featured than a full programming language, but I’d get better performance. Using high-level interpreted languages such as Perl/Python/Ruby I’d get the language’s eval for free and I wouldn’t need a DSL; Miller would have mainly been a set of format-specific I/O hooks. If I’d gotten good enough performance from the latter I’d have done it without question and Miller would be far more flexible. But C won the performance criteria by a landslide so we have Miller in C with a custom DSL.

No, really, why one more command-line data-manipulation tool? I wrote Miller because I was frustrated with tools like grep, sed, and so on being line-aware without being format-aware. The single most poignant example I can think of is seeing people grep data lines out of their CSV files and sadly losing their header lines. While some lighter-than-SQL processing is very nice to have, at core I wanted the format-awareness of RecordStream combined with the raw speed of the Unix toolkit. Miller does precisely that. miller-5.6.2/doc/content-for-performance.html000066400000000000000000000045771354153536500212270ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Disclaimer

In a previous version of this page (see here) I compared Miller to some items in the Unix toolkit in terms of run time. But such comparisons are very much not apples-to-apples:
  • Miller’s principal strength is that it handles key-value data in various formats while the system tools do not. So if you time mlr sort on a CSV file against system sort, it's not relevant to say which is faster by how many percent — Miller will respect the header line, leaving it in place, while the system sort will move it, sorting it along with all the other header lines. This would be comparing the run times of two programs produce different outputs. Likewise, awk doesn’t respect header lines, although you can code up some CSV-handling using if (NR==1) { ... } else { ... }. And that’s just CSV: I don’t know any simple way to get sort, awk, etc. to handle DKVP, JSON, etc. — which is the main rreason I wrote Miller.
  • Implementations differ by platform: one awk may be fundamentally faster than another, and mawk has a very efficient bytecode implementation — which handles positionally indexed data far faster than Miller does.
  • The system sort command will, on some systems, handle too-large-for-RAM datasets by spilling to disk; Miller (as of version 5.2.0, mid-2017) does not. Miller sorts are always stable; GNU supports stable and unstable variants.
  • Etc.

Summary

Miller can do many kinds of processing on key-value-pair data using elapsed time roughly of the same order of magnitude as items in the Unix toolkit can handle positionally indexed data. Specific results vary widely by platform, implementation details, multi-core use (or not). Lastly, specific special-purpose non-record-aware processing will run far faster in grep, sed, etc. miller-5.6.2/doc/content-for-record-heterogeneity.html000066400000000000000000000053531354153536500230460ustar00rootroot00000000000000POKI_PUT_TOC_HERE We think of CSV tables as rectangular: if there are 17 columns in the header then there are 17 columns for every row, else the data have a formatting error.

But heterogeneous data abound (today’s no-SQL databases for example). Miller handles this.

For I/O

CSV and pretty-print

Miller simply prints a newline and a new header when there is a schema change. When there is no schema change, you get CSV per se as a special case. Likewise, Miller reads heterogeneous CSV or pretty-print input the same way. The difference between CSV and CSV-lite is that the former is RFC4180-compliant, while the latter readily handles heterogeneous data (which is non-compliant). For example:
POKI_RUN_COMMAND{{cat data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --ocsvlite cat data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint cat data/het.dkvp}}HERE

Miller handles explicit header changes as just shown. If your CSV input contains ragged data — if there are implicit header changes — you can use --allow-ragged-csv-input (or keystroke-saver --ragged). For too-short data lines, values are filled with empty string; for too-long data lines, missing field names are replaced with positional indices (counting up from 1, not 0), as follows:
POKI_RUN_COMMAND{{cat data/ragged.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --oxtab --allow-ragged-csv-input cat data/ragged.csv}}HERE

You may also find Miller’s group-like feature handy (see also POKI_PUT_LINK_FOR_PAGE(reference.html)HERE):
POKI_RUN_COMMAND{{mlr --ocsvlite group-like data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint group-like data/het.dkvp}}HERE

Key-value-pair, vertical-tabular, and index-numbered formats

For these formats, record-heterogeneity comes naturally:
POKI_RUN_COMMAND{{cat data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --onidx --ofs ' ' cat data/het.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --oxtab cat data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --oxtab group-like data/het.dkvp}}HERE

For processing

Miller operates on specified fields and takes the rest along: for example, if you are sorting on the count field then all records in the input stream must have a count field but the other fields can vary, and moreover the sorted-on field name(s) don’t need to be in the same position on each line:
POKI_RUN_COMMAND{{cat data/sort-het.dkvp}}HERE POKI_RUN_COMMAND{{mlr sort -n count data/sort-het.dkvp}}HERE
miller-5.6.2/doc/content-for-reference-dsl.html000066400000000000000000002065741354153536500214450ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Overview

Here’s comparison of verbs and put/filter DSL expressions:
Example: POKI_RUN_COMMAND{{mlr stats1 -a sum -f x -g a data/small}}HERE

  • Verbs are coded in C
  • They run a bit faster
  • They take fewer keystrokes
  • There is less to learn
  • Their customization is limited to each verb’s options
Example: POKI_RUN_COMMAND{{mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small}}HERE
  • You get to write your own DSL expressions
  • They run a bit slower
  • They take more keystrokes
  • There is more to learn
  • They are highly customizable

Please see here for information on verbs other than put and filter.

The essential usages of mlr filter and mlr put are for record-selection and record-updating expressions, respectively. For example, given the following input data: POKI_RUN_COMMAND{{cat data/small}}HERE

you might retain only the records whose a field has value eks: POKI_RUN_COMMAND{{mlr filter '$a == "eks"' data/small}}HERE

or you might add a new field which is a function of existing fields: POKI_RUN_COMMAND{{mlr put '$ab = $a . "_" . $b ' data/small}}HERE

The two verbs mlr filter and mlr put are essentially the same. The only differences are:

  • Expressions sent to mlr filter must end with a boolean expression, which is the filtering criterion;
  • mlr filter expressions may not reference the filter keyword within them; and
  • mlr filter expressions may not use tee, emit, emitp, or emitf.

All the rest is the same: in particular, you can define and invoke functions and subroutines to help produce the final boolean statement, and record fields may be assigned to in the statements preceding the final boolean statement.

There are more details and more choices, of course, as detailed in the following sections.

Syntax

Expression formatting

Multiple expressions may be given, separated by semicolons, and each may refer to the ones before: POKI_RUN_COMMAND{{ruby -e '10.times{|i|puts "i=#{i}"}' | mlr --opprint put '$j = $i + 1; $k = $i +$j'}}HERE Newlines within the expression are ignored, which can help increase legibility of complex expressions: POKI_INCLUDE_AND_RUN_ESCAPED(data/put-multiline-example.txt)HERE POKI_RUN_COMMAND{{mlr --opprint filter '($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5)' then stats2 -a corr -f x,y data/medium}}HERE

Expressions from files

The simplest way to enter expressions for put and filter is between single quotes on the command line, e.g. POKI_INCLUDE_AND_RUN_ESCAPED(data/fe-example-1.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/fe-example-2.sh)HERE

You may, though, find it convenient to put expressions into files for reuse, and read them using the -f option. For example: POKI_RUN_COMMAND{{cat data/fe-example-3.mlr}}HERE POKI_RUN_COMMAND{{mlr --from data/small put -f data/fe-example-3.mlr}}HERE

If you have some of the logic in a file and you want to write the rest on the command line, you can use the -f and -e options together: POKI_RUN_COMMAND{{cat data/fe-example-4.mlr}}HERE POKI_RUN_COMMAND{{mlr --from data/small put -f data/fe-example-4.mlr -e '$xy = f($x, $y)'}}HERE

A suggested use-case here is defining functions in files, and calling them from command-line expressions.

Another suggested use-case is putting default parameter values in files, e.g. using begin{@count=is_present(@count)?@count:10} in the file, where you can precede that using begin{@count=40} using -e.

Moreover, you can have one or more -f expressions (maybe one function per file, for example) and one or more -e expressions on the command line. If you mix -f and -e then the expressions are evaluated in the order encountered. (Since the expressions are all simply concatenated together in order, don’t forget intervening semicolons: e.g. not mlr put -e '$x=1' -e '$y=2 ...' but rather mlr put -e '$x=1;' -e '$y=2' ....)

Semicolons, commas, newlines, and curly braces

Miller uses semicolons as statement separators, not statement terminators. This means you can write: POKI_INCLUDE_ESCAPED(data/semicolon-example.txt)HERE

Semicolons are optional after closing curly braces (which close conditionals and loops as discussed below). POKI_RUN_COMMAND{{echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""} $foo = "bar"'}}HERE POKI_RUN_COMMAND{{echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}; $foo = "bar"'}}HERE

Semicolons are required between statements even if those statements are on separate lines. Newlines are for your convenience but have no syntactic meaning: line endings do not terminate statements. For example, adjacent assignment statements must be separated by semicolons even if those statements are on separate lines: POKI_INCLUDE_ESCAPED(data/newline-example.txt)HERE

Trailing commas are allowed in function/subroutine definitions, function/subroutine callsites, and map literals. This is intended for (although not restricted to) the multi-line case: POKI_INCLUDE_AND_RUN_ESCAPED(data/trailing-commas.sh)HERE

Bodies for all compound statements must be enclosed in curly braces, even if the body is a single statement: POKI_CARDIFY{{mlr put 'if ($x == 1) $y = 2' # Syntax error}}HERE POKI_CARDIFY{{mlr put 'if ($x == 1) { $y = 2 }' # This is OK}}HERE

Bodies for compound statements may be empty: POKI_CARDIFY{{mlr put 'if ($x == 1) { }' # This no-op is syntactically acceptable}}HERE

Variables

Miller has the following kinds of variables:

Built-in variables such as NF, NF, FILENAME, M_PI, and M_E. These are all capital letters and are read-only (although some of them change value from one record to another).

Fields of stream records, accessed using the $ prefix. These refer to fields of the current data-stream record. For example, in echo x=1,y=2 | mlr put '$z = $x + $y', $x and $y refer to input fields, and $z refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as $*.

Out-of-stream variables accessed using the @ prefix. These refer to data which persist from one record to the next, including in begin and end blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as @*.

Local variables are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and explicitly declared local variables.

Keywords are not variables, but since their names are reserved, you cannot use these names for local variables.

Built-in variables

These are written all in capital letters, such as NR, NF, FILENAME, and only a small, specific set of them is defined by Miller.

Namely, Miller supports the following five built-in variables for filter and put, all awk-inspired: NF, NR, FNR, FILENUM, and FILENAME, as well as the mathematical constants M_PI and M_E. Lastly, the ENV hashmap allows read access to environment variables, e.g. ENV["HOME"] or ENV["foo_".$hostname]. POKI_RUN_COMMAND{{mlr filter 'FNR == 2' data/small*}}HERE POKI_RUN_COMMAND{{mlr put '$fnr = FNR' data/small*}}HERE

Their values of NF, NR, FNR, FILENUM, and FILENAME change from one record to the next as Miller scans through your input data stream. The mathematical constants, of course, do not change; ENV is populated from the system environment variables at the time Miller starts and is read-only for the remainder of program execution.

Their scope is global: you can refer to them in any filter or put statement. Their values are assigned by the input-record reader: POKI_RUN_COMMAND{{mlr --csv put '$nr = NR' data/a.csv}}HERE POKI_RUN_COMMAND{{mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv}}HERE

The extent is for the duration of the put/filter: in a begin statement (which executes before the first input record is consumed) you will find NR=1 and in an end statement (which is executed after the last input record is consumed) you will find NR to be the total number of records ingested.

These are all read-only for the mlr put and mlr filter DSLs: they may be assigned from, e.g. $nr=NR, but they may not be assigned to: NR=100 is a syntax error.

Field names

Names of fields within stream records must be specified using a $ in filter and put expressions, even though the dollar signs don’t appear in the data stream itself. For integer-indexed data, this looks like awk’s $1,$2,$3, except that Miller allows non-numeric names such as $quantity or $hostname. Likewise, enclose string literals in double quotes in filter expressions even though they don’t appear in file data. In particular, mlr filter '$x=="abc"' passes through the record x=abc.

If field names have special characters such as . then you can use braces, e.g. '${field.name}'.

You may also use a computed field name in square brackets, e.g. POKI_RUN_COMMAND{{echo a=3,b=4 | mlr filter '$["x"] < 0.5'}}HERE POKI_RUN_COMMAND{{echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b'}}HERE Notes:

The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream.

Their extent is limited to the current record; their scope is the filter or put command in which they appear.

These are read-write: you can do $y=2*$x, $x=$x+1, etc.

Records are Miller’s output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with cut, or records are excluded with filter or put -q, etc. Simply assign a value to a field and it will be output.

Positional field names

Even though Miller’s main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1).

Use $[[3]] to access the name of field 3. More generally, any expression evaluating to an integer can go between $[[ and ]]. Then using a computed field name, $[ $[[3]] ] is the value in the third field. This has the shorter equivalent notation $[[[3]]]. POKI_RUN_COMMAND{{mlr cat data/small}}HERE POKI_RUN_COMMAND{{mlr put '$[[3]] = "NEW"' data/small}}HERE POKI_RUN_COMMAND{{mlr put '$[[[3]]] = "NEW"' data/small}}HERE POKI_RUN_COMMAND{{mlr put '$NEW = $[[NR]]' data/small}}HERE POKI_RUN_COMMAND{{mlr put '$NEW = $[[[NR]]]' data/small}}HERE POKI_RUN_COMMAND{{mlr put '$[[[NR]]] = "NEW"' data/small}}HERE Right-hand side accesses to non-existent fields — i.e. with index less than 1 or greater than NF -- return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op. POKI_RUN_COMMAND{{mlr put '$[[6]] = "NEW"' data/small}}HERE POKI_RUN_COMMAND{{mlr put '$[[[6]]] = "NEW"' data/small}}HERE

Out-of-stream variables

These are prefixed with an at-sign, e.g. @sum. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested hashmap: you can do @sum += $quanity, or @sum[$color] += $quanity, or @sum[$color][$shape] += $quanity. The keys for the multi-level hashmap can be any expression which evaluates to string or integer: e.g. @sum[NR] = $a + $b, @sum[$a."-".$b] = $x, etc.

Their names and their values are entirely under your control; they change only when you assign to them.

Just as for field names in stream records, if you want to define out-of-stream variables with special characters such as . then you can use braces, e.g. '@{variable.name}["index"]'.

You may use a computed key in square brackets, e.g. POKI_RUN_COMMAND{{echo s=green,t=blue,a=3,b=4 | mlr put -q '@[$s."_".$t] = $a * $b; emit all'}}HERE

Out-of-stream variables are scoped to the put command in which they appear. In particular, if you have two or more put commands separated by then, each put will have its own set of out-of-stream variables: POKI_RUN_COMMAND{{cat data/a.dkvp}}HERE POKI_RUN_COMMAND{{mlr put '@sum += $a; end {emit @sum}' then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' data/a.dkvp}}HERE

Out-of-stream variables’ extent is from the start to the end of the record stream, i.e. every time the put or filter statement referring to them is executed.

Out-of-stream variables are read-write: you can do $sum=@sum, @sum=$sum, etc.

Indexed out-of-stream variables

Using an index on the @count and @sum variables, we get the benefit of the -g (group-by) option which mlr stats1 and various other Miller commands have: POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-6.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-7.sh)HERE

Indices can be arbitrarily deep — here there are two or more of them: POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-6a.sh)HERE The idea is that stats1, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do.

Begin/end blocks can be mixed with pattern/action blocks. For example: POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-8.sh)HERE

Local variables

Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can’t be computed using square brackets). There are three kinds of local variables: arguments to functions/subroutines, variables bound within for-loops, and locals defined within control blocks. They may be untyped using var, or typed using num, int, float, str, bool, and map.

For example: POKI_INCLUDE_AND_RUN_ESCAPED(data/local-example-1.sh)HERE

Things which are completely unsurprising, resembling many other languages:

  • Parameter names are bound to their arguments but can be reassigned, e.g. if there is a parameter named a then you can reassign the value of a to be something else within the function if you like.
  • However, you cannot redeclare the type of an argument or a local: var a=1; var a=2 is an error but var a=1; a=2 is OK.
  • All argument-passing is positional rather than by name; arguments are passed by value, not by reference. (This is also true for map-valued variables: they are not, and cannot be, passed by reference)
  • You can define locals (using var, num, etc.) at any scope (if-statements, else-statements, while-loops, for-loops, or the top-level scope), and nested scopes will have access (more details on scope in the next section). If you define a local variable with the same name inside an inner scope, then a new variable is created with the narrower scope.
  • If you assign to a local variable for the first time in a scope without declaring it as var, num, etc. then: if it exists in an outer scope, that outer-scope variable will be updated; if not, it will be defined in the current scope as if var had been used. (See also here for an example.) I recommend always declaring variables explicitly to make the intended scoping clear.
  • Functions and subroutines never have access to locals from their callee (unless passed by value as arguments).

Things which are perhaps surprising compared to other languages:

  • Type declarations using var, or typed using num, int, float, str, and bool are necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are implicitly declared using var. (Some examples are shown below.)
  • Type-checking is done at assignment time. For example, float f = 0 is an error (since 0 is an integer), as is float f = 0.0; f = 1. For this reason I prefer to use num over float in most contexts since num encompasses integer and floating-point values. More information about type-checking is here.
  • Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in for (k, v in $*) { ... } for ((k1, k2), v in @*) { ... } if there are k, v, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop.
  • For C-style triple-for loops, if a for-loop variable is defined using var, int, etc. then it is scoped to that for-loop. E.g. for (i = 0; i < 10; i += 1) { ... } and for (int i = 0; i < 10; i += 1) { ... }. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But of there is no outer-scope variable of that name then the variable is scoped to the for-loop only.

The following example demonstrates the scope rules: POKI_RUN_COMMAND{{cat data/scope-example.mlr}}HERE POKI_RUN_COMMAND{{cat data/scope-example.dat}}HERE POKI_RUN_COMMAND{{mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr}}HERE

And this example demonstrates the type-declaration rules: POKI_RUN_COMMAND{{cat data/type-decl-example.mlr}}HERE

Map literals

Miller’s put/filter DSL has four kinds of hashmaps. Stream records are (single-level) maps from name to value. Out-of-stream variables and local variables can also be maps, although they can be multi-level hashmaps (e.g. @sum[$x][$y]). The fourth kind is map literals. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. "3" rather than 3).

For example, the following swaps the input stream’s a and i fields, modifies y, and drops the rest: POKI_INCLUDE_AND_RUN_ESCAPED(data/map-literal-example-1.sh)HERE

Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on: POKI_INCLUDE_AND_RUN_ESCAPED(data/map-literal-example-2.sh)HERE

Like out-of-stream and local variables, map literals can be multi-level: POKI_INCLUDE_AND_RUN_ESCAPED(data/map-literal-example-3.sh)HERE

By default, map-valued expressions are dumped using JSON formatting. If you use dump to print a hashmap with integer keys and you don’t want them double-quoted (JSON-style) then you can use mlr put --jknquoteint. See also mlr put --help.

Type-checking

Miller’s put/filter DSLs support two optional kinds of type-checking. One is inline type-tests and type-assertions within expressions. The other is type declarations for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections.

Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data.

Type-test and type-assertion expressions

The following is... functions take a value and return a boolean indicating whether the argument is of the indicated type. The assert_... functions return their argument if it is of the specified type, and cause a fatal error otherwise:
POKI_RUN_COMMAND{{mlr -F | grep ^is}}HERE POKI_RUN_COMMAND{{mlr -F | grep ^assert}}HERE

Please see the POKI_PUT_LINK_FOR_PAGE(cookbook.html#Data-cleaning_examples)HERE for examples of how to use these.

Type-declarations for local variables, function parameter, and function return values

Local variables can be defined either untyped as in x = 1, or typed as in int x = 1. Types include var (explicitly untyped), int, float, num (int or float), str, bool, and map. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in int x = 1 or in any subsequent assignments to the same variable farther down in the scope.

The reason for num is that int and float typedecls are very precise:

  float a = 0;   # Runtime error since 0 is int not float
  int   b = 1.0; # Runtime error since 1.0 is float not int
  num   c = 0;   # OK
  num   d = 1.0; # OK

A suggestion is to use num for general use when you want numeric content, and use int when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints).

The var type declaration indicates no type restrictions, e.g. var x = 1 has the same type restrictions on x as x = 1. The difference is in intentional shadowing: if you have x = 1 in outer scope and x = 2 in inner scope (e.g. within a for-loop or an if-statement) then outer-scope x has value 2 after the second assignment. But if you have var x = 2 in the inner scope, then you are declaring a variable scoped to the inner block.) For example:

  x = 1;
  if (NR == 4) {
    x = 2; # Refers to outer-scope x: value changes from 1 to 2.
  }
  print x; # Value of x is now two
  x = 1;
  if (NR == 4) {
    var x = 2; # Defines a new inner-scope x with value 2
  }
  print x;     # Value of this x is still 1

Likewise function arguments can optionally be typed, with type enforced when the function is called:

  func f(map m, int i) {
    ...
  }
  $a = f({1:2, 3:4}, 5);     # OK
  $b = f({1:2, 3:4}, "abc"); # Runtime error
  $c = f({1:2, 3:4}, $x);    # Runtime error for records with non-integer field named x
  if (NR == 4) {
    var x = 2; # Defines a new inner-scope x with value 2
  }
  print x;     # Value of this x is still 1

Thirdly, function return values can be type-checked at the point of return using : and a typedecl after the parameter list:

  func f(map m, int i): bool {
    ...
    ...
    if (...) {
      return "false"; # Runtime error if this branch is taken
    }
    ...
    ...
    if (...) {
      return retval; # Runtime error if this function doesn't have an in-scope
                     # boolean-valued variable named retval
    }
    ...
    ...
    # In Miller if your functions don't explicitly return a value, they return absent-null.
    # So it would also be a runtime error on reaching the end of this function without
    # an explicit return statement.
  }

Null data: empty and absent

Please see here.

Aggregate variable assignments

There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the $* syntax:

  • Recursive copy of out-of-stream variables
  • Out-of-stream variable assigned to full stream record
  • Full stream record assigned to an out-of-stream variable

Example recursive copy of out-of-stream variables: POKI_RUN_COMMAND{{mlr --opprint put -q '@v["sum"] += $x; @v["count"] += 1; end{dump; @w = @v; dump}' data/small}}HERE

Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that: POKI_RUN_COMMAND{{mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small}}HERE

Example of full stream record assigned to an out-of-stream variable, finding the record for which the x field has the largest value in the input stream: POKI_RUN_COMMAND{{cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' data/small}}HERE

Keywords for filter and put

POKI_RUN_COMMAND{{mlr --help-all-keywords}}HERE

Operator precedence

Operators are listed in order of decreasing precedence, highest first.

Operators              Associativity
---------              -------------
()                     left to right
**                     right to left
! ~ unary+ unary- &    right to left
binary* / // %         left to right
binary+ binary- .      left to right
<< >>                  left to right
&                      left to right
^                      left to right
|                      left to right
< <= > >=              left to right
== != =~ !=~           left to right
&&                     left to right
^^                     left to right
||                     left to right
? :                    right to left
=                      N/A for Miller (there is no $a=$b=$c)

Operator and function semantics

  • Functions are in general pass-throughs straight to the system-standard C library.
  • The min and max functions are different from other multi-argument functions which return null if any of their inputs are null: for min and max, by contrast, if one argument is absent-null, the other is returned. Empty-null loses min or max against numeric or boolean; empty-null is less than any other string.
  • Symmetrically with respect to the bitwise OR, XOR, and AND operators |, ^, &, Miller has logical operators ||, ^^, &&: the logical XOR not existing in C.
  • The exponentiation operator ** is familiar from many languages.
  • The regex-match and regex-not-match operators =~ and !=~ are similar to those in Ruby and Perl.

Control structures

Pattern-action blocks

These are reminiscent of awk syntax. They can be used to allow assignments to be done only when appropriate — e.g. for math-function domain restrictions, regex-matching, and so on: POKI_RUN_COMMAND{{mlr cat data/put-gating-example-1.dkvp}}HERE POKI_RUN_COMMAND{{mlr put '$x > 0.0 { $y = log10($x); $z = sqrt($y) }' data/put-gating-example-1.dkvp}}HERE POKI_RUN_COMMAND{{mlr cat data/put-gating-example-2.dkvp}}HERE POKI_RUN_COMMAND{{mlr put '$a =~ "([a-z]+)_([0-9]+)" { $b = "left_\1"; $c = "right_\2" }' data/put-gating-example-2.dkvp}}HERE

This produces heteregenous output which Miller, of course, has no problems with (see POKI_PUT_LINK_FOR_PAGE(record-heterogeneity.html)HERE). But if you want homogeneous output, the curly braces can be replaced with a semicolon between the expression and the body statements. This causes put to evaluate the boolean expression (along with any side effects, namely, regex-captures \1, \2, etc.) but doesn’t use it as a criterion for whether subsequent assignments should be executed. Instead, subsequent assignments are done unconditionally: POKI_RUN_COMMAND{{mlr put '$x > 0.0; $y = log10($x); $z = sqrt($y)' data/put-gating-example-1.dkvp}}HERE POKI_RUN_COMMAND{{mlr put '$a =~ "([a-z]+)_([0-9]+)"; $b = "left_\1"; $c = "right_\2"' data/put-gating-example-2.dkvp}}HERE

If-statements

These are again reminiscent of awk. Pattern-action blocks are a special case of if with no elif or else blocks, no if keyword, and parentheses optional around the boolean expression: POKI_CARDIFY{{mlr put 'NR == 4 {$foo = "bar"}'}}HERE POKI_CARDIFY{{mlr put 'if (NR == 4) {$foo = "bar"}'}}HERE

Compound statements use elif (rather than elsif or else if): POKI_INCLUDE_ESCAPED(data/if-chain.sh)HERE

While and do-while loops

Miller’s while and do-while are unsurprising in comparison to various languages, as are break and continue: POKI_INCLUDE_AND_RUN_ESCAPED(data/while-example-1.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/while-example-2.sh)HERE

A break or continue within nested conditional blocks or if-statements will, of course, propagate to the innermost loop enclosing them, if any. A break or continue outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested.

The existence of while, do-while, and for loops in Miller’s DSL means that you can create infinite-loop scenarios inadvertently. In particular, please recall that DSL statements are executed once if in begin or end blocks, and once per record otherwise. For example, while (NR < 10) will never terminate as NR is only incremented between records.

For-loops

While Miller’s while and do-while statements are much as in many other languages, for loops are more idiosyncratic to Miller. They are loops over key-value pairs, whether in stream records, out-of-stream variables, local variables, or map-literals: more reminiscent of foreach, as in (for example) PHP. There are for-loops over map keys and for-loops over key-value tuples. Additionally, Miller has a C-style triple-for loop with initialize, test, and update statements.

As with while and do-while, a break or continue within nested control structures will propagate to the innermost loop enclosing them, if any, and a break or continue outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested.

Key-only for-loops

The key variable is always bound to the key of key-value pairs: POKI_INCLUDE_AND_RUN_ESCAPED(data/single-for-example-1.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/single-for-example-2.sh)HERE

Note that the value corresponding to a given key may be gotten as through a computed field name using square brackets as in $[key] for stream records, or by indexing the looped-over variable using square brackets.

Key-value for-loops

Single-level keys may be gotten at using either for(k,v) or for((k),v); multi-level keys may be gotten at using for((k1,k2,k3),v) and so on. The v variable will be bound to to a scalar value (a string or a number) if the map stops at that level, or to a map-valued variable if the map goes deeper. If the map isn’t deep enough then the loop body won’t be executed. POKI_RUN_COMMAND{{cat data/for-srec-example.tbl}}HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/for-srec-example-1.sh)HERE POKI_RUN_COMMAND{{mlr --from data/small --opprint put 'for (k,v in $*) { $[k."_type"] = typeof(v) }'}}HERE

Note that the value of the current field in the for-loop can be gotten either using the bound variable value, or through a computed field name using square brackets as in $[key].

Important note: to avoid inconsistent looping behavior in case you’re setting new fields (and/or unsetting existing ones) while looping over the record, Miller makes a copy of the record before the loop: loop variables are bound from the copy and all other reads/writes involve the record itself: POKI_INCLUDE_AND_RUN_ESCAPED(data/for-srec-example-2.sh)HERE It can be confusing to modify the stream record while iterating over a copy of it, so instead you might find it simpler to use a local variable in the loop and only update the stream record after the loop: POKI_INCLUDE_AND_RUN_ESCAPED(data/for-srec-example-3.sh)HERE

You can also start iterating on sub-hashmaps of an out-of-stream or local variable; you can loop over nested keys; you can loop over all out-of-stream variables. The bound variables are bound to a copy of the sub-hashmap as it was before the loop started. The sub-hashmap is specified by square-bracketed indices after in, and additional deeper indices are bound to loop key-variables. The terminal values are bound to the loop value-variable whenever the keys are not too shallow. The value-variable may refer to a terminal (string, number) or it may be map-valued if the map goes deeper. Example indexing is as follows: POKI_INCLUDE_ESCAPED(data/for-oosvar-example-0a.txt)HERE

That’s confusing in the abstract, so a concrete example is in order. Suppose the out-of-stream variable @myvar is populated as follows: POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0b.sh)HERE

Then we can get at various values as follows:
POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0c.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0d.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0e.sh)HERE

C-style triple-for loops

These are supported as follows: POKI_INCLUDE_AND_RUN_ESCAPED(data/triple-for-example-1.sh)HERE POKI_INCLUDE_AND_RUN_ESCAPED(data/triple-for-example-2.sh)HERE Notes:

  • In for (start; continuation; update) { body }, the start, continuation, and update statements may be empty, single statements, or multiple comma-separated statements. If the continuation is empty (e.g. for(i=1;;i+=1)) it defaults to true.
  • In particular, you may use $-variables and/or @-variables in the start, continuation, and/or update steps (as well as the body, of course).
  • The typedecls such as int or num are optional. If a typedecl is provided (for a local variable), it binds a variable scoped to the for-loop regardless of whether a same-name variable is present in outer scope. If a typedecl is not provided, then the variable is scoped to the for-loop if no same-name variable is present in outer scope, or if a same-name variable is present in outer scope then it is modified.
  • Miller has no ++ or -- operators.
  • As with all for/if/while statements in Miller, the curly braces are required even if the body is a single statement, or empty.

Begin/end blocks

Miller supports an awk-like begin/end syntax. The statements in the begin block are executed before any input records are read; the statements in the end block are executed after the last input record is read. (If you want to execute some statement at the start of each file, not at the start of the first file as with begin, you might use a pattern/action block of the form FNR == 1 { ... }.) All statements outside of begin or end are, of course, executed on every input record. Semicolons separate statements inside or outside of begin/end blocks; semicolons are required between begin/end block bodies and any subsequent statement. For example: POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-1.sh)HERE

Since uninitialized out-of-stream variables default to 0 for addition/substraction and 1 for multiplication when they appear on expression right-hand sides (as in awk), the above can be written more succinctly as POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-2.sh)HERE

The put -q option is a shorthand which suppresses printing of each output record, with only emit statements being output. So to get only summary outputs, one could write POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-3.sh)HERE

We can do similarly with multiple out-of-stream variables: POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-4.sh)HERE This is of course not much different than POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-5.sh)HERE

Note that it’s a syntax error for begin/end blocks to refer to field names (beginning with $), since these execute outside the context of input records.

Output statements

You can output variable-values or expressions in five ways:

  • Assign them to stream-record fields. For example, $cumulative_sum = @sum. For another example, $nr = NR adds a field named nr to each output record, containing the value of the built-in variable NR as of when that record was ingested.
  • Use the print or eprint keywords which immediately print an expression directly to standard output or standard error, respectively. Note that dump, edump, print, and eprint don’t output records which participate in then-chaining; rather, they’re just immediate prints to stdout/stderr. The printn and eprintn keywords are the same except that they don’t print final newlines. Additionally, you can print to a specified file instead of stdout/stderr.
  • Use the dump or edump keywords, which immediately print all out-of-stream variables as a JSON data structure to the standard output or standard error (respectively).
  • Use tee which formats the current stream record (not just an arbitrary string as with print) to a specific file.
  • Use emit/emitp/emitf to send out-of-stream variables’ current values to the output record stream, e.g. @sum += $x; emit @sum which produces an extra output record such as sum=3.1648382.

For the first two options you are populating the output-records stream which feeds into the next verb in a then-chain (if any), or which otherwise is formatted for output using --o... flags.

For the last three options you are sending output directly to standard output, standard error, or a file.

Print statements

The print statement is perhaps self-explanatory, but with a few light caveats:

  • There are four variants: print goes to stdout with final newline, printn goes to stdout without final newline (you can include one using "\n" in your output string), eprint goes to stderr with final newline, and eprintn goes to stderr without final newline.
  • Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a then-chain. (Use emit for that.)
  • Print statements are for strings (print "hello"), or things which can be made into strings: numbers (print 3, print $a + $b, or concatenations thereof (print "a + b = " . ($a + $b)). Maps (in $*, map-valued out-of-stream or local variables, and map literals) aren’t convertible into strings. If you print a map, you get {is-a-map} as output. Please use dump to print maps.
  • You can redirect print output to a file: mlr --from myfile.dat put 'print > "tap.txt", $x' mlr --from myfile.dat put 'o=$*; print > $a.".txt", $x'.
  • See also the section on redirected output for examples.

Dump statements

The dump statement is for printing expressions, including maps, directly to stdout/stderr, respectively:

  • There are two variants: dump prints to stdout; edump prints to stderr.
  • Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a then-chain. (Use emit for that.)
  • You can use dump to output single strings, numbers, or expressions including map-valued data. Map-valued data are printed as JSON. Miller allows string and integer keys in its map literals while JSON allows only string keys, so use mlr put --jknquoteint if you want integer-valued map keys not double-quoted.
  • If you use dump (or edump) with no arguments, you get a JSON structure representing the current values of all out-of-stream variables.
  • As with print, you can redirect output to files.
  • See also the section on redirected output for examples.

Tee statements

Records produced by a mlr put go downstream to the next verb in your then-chain, if any, or otherwise to standard output. If you want to additionally copy out records to files, you can do that using tee.

The syntax is, by example, mlr --from myfile.dat put 'tee > "tap.dat", $*' then sort -n index. First is tee >, then the filename expression (which can be an expression such as "tap.".$a.".dat"), then a comma, then $*. (Nothing else but $* is teeable.)

See also the section on redirected output for examples.

Redirected-output statements

The print, dump tee, emitf, emit, and emitp keywords all allow you to redirect output to one or more files or pipe-to commands. The filenames/commands are strings which can be constructed using record-dependent values, so you can do things like splitting a table into multiple files, one for each account ID, and so on.

Details:

  • The print and dump keywords produce output immediately to standard output, or to specified file(s) or pipe-to command if present. POKI_RUN_COMMAND{{mlr --help-keyword print}}HERE POKI_RUN_COMMAND{{mlr --help-keyword dump}}HERE
  • mlr put sends the current record (possibly modified by the put expression) to the output record stream. Records are then input to the following verb in a then-chain (if any), else printed to standard output (unless put -q). The tee keyword additionally writes the output record to specified file(s) or pipe-to command, or immediately to stdout/stderr. POKI_RUN_COMMAND{{mlr --help-keyword tee}}HERE
  • mlr put’s emitf, emitp, and emit send out-of-stream variables to the output record stream. These are then input to the following verb in a then-chain (if any), else printed to standard output. When redirected with >, >>, or |, they instead write the out-of-stream variable(s) to specified file(s) or pipe-to command, or immediately to stdout/stderr. POKI_RUN_COMMAND{{mlr --help-keyword emitf}}HERE POKI_RUN_COMMAND{{mlr --help-keyword emitp}}HERE POKI_RUN_COMMAND{{mlr --help-keyword emit}}HERE

Emit statements

There are three variants: emitf, emit, and emitp. Keep in mind that out-of-stream variables are a nested, multi-level hashmap (directly viewable as JSON using dump), whereas Miller output records are lists of single-level key-value pairs. The three emit variants allow you to control how the multilevel hashmaps are flatten down to output records. You can emit any map-valued expression, including $*, map-valued out-of-stream variables, the entire out-of-stream-variable collection @*, map-valued local variables, map literals, or map-valued function return values.

Use emitf to output several out-of-stream variables side-by-side in the same output record. For emitf these mustn’t have indexing using @name[...]. Example: POKI_RUN_COMMAND{{mlr put -q '@count += 1; @x_sum += $x; @y_sum += $y; end { emitf @count, @x_sum, @y_sum}' data/small}}HERE

Use emit to output an out-of-stream variable. If it’s non-indexed you’ll get a simple key-value pair: POKI_RUN_COMMAND{{cat data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum += $x; end { dump }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum += $x; end { emit @sum }' data/small}}HERE

If it’s indexed then use as many names after emit as there are indices: POKI_RUN_COMMAND{{mlr put -q '@sum[$a] += $x; end { dump }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a] += $x; end { emit @sum, "a" }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b][$i] += $x; end { dump }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b][$i] += $x; end { emit @sum, "a", "b", "i" }' data/small}}HERE

Now for emitp: if you have as many names following emit as there are levels in the out-of-stream variable’s hashmap, then emit and emitp do the same thing. Where they differ is when you don’t specify as many names as there are hashmap levels. In this case, Miller needs to flatten multiple map indices down to output-record keys: emitp includes full prefixing (hence the p in emitp) while emit takes the deepest hashmap key as the output-record key: POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emit @sum }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE POKI_RUN_COMMAND{{mlr --oxtab put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE

Use --oflatsep to specify the character which joins multilevel keys for emitp (it defaults to a colon): POKI_RUN_COMMAND{{mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE POKI_RUN_COMMAND{{mlr --oxtab put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE

Multi-emit statements

You can emit multiple map-valued expressions side-by-side by including their names in parentheses: POKI_INCLUDE_AND_RUN_ESCAPED(data/emit-lashed.sh)HERE What this does is walk through the first out-of-stream variable (@x_sum in this example) as usual, then for each keylist found (e.g. pan,wye), include the values for the remaining out-of-stream variables (here, @x_count and @x_mean). You should use this when all out-of-stream variables in the emit statement have the same shape and the same keylists.

Emit-all statements

Use emit all (or emit @* which is synonymous) to output all out-of-stream variables. You can use the following idiom to get various accumulators output side-by-side (reminiscent of mlr stats1): POKI_RUN_COMMAND{{mlr --from data/small --opprint put -q '@v[$a][$b]["sum"] += $x; @v[$a][$b]["count"] += 1; end{emit @*,"a","b"}'}}HERE POKI_RUN_COMMAND{{mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit @*,"a","b"}'}}HERE POKI_RUN_COMMAND{{mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit (@sum, @count),"a","b"}'}}HERE

Unset statements

You can clear a map key by assigning the empty string as its value: $x="" or @x="". Using unset you can remove the key entirely. Examples: POKI_RUN_COMMAND{{cat data/small}}HERE POKI_RUN_COMMAND{{mlr put 'unset $x, $a' data/small}}HERE

This can also be done, of course, using mlr cut -x. You can also clear out-of-stream or local variables, at the base name level, or at an indexed sublevel: POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum; dump }' data/small}}HERE POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum["eks"]; dump }' data/small}}HERE

If you use unset all (or unset @* which is synonymous), that will unset all out-of-stream variables which have been defined up to that point.

Filter statements

You can use filter within put. In fact, the following two are synonymous: POKI_RUN_COMMAND{{mlr filter 'NR==2 || NR==3' data/small}}HERE POKI_RUN_COMMAND{{mlr put 'filter NR==2 || NR==3' data/small}}HERE

The former, of course, is much easier to type. But the latter allows you to define more complex expressions for the filter, and/or do other things in addition to the filter: POKI_RUN_COMMAND{{mlr put '@running_sum += $x; filter @running_sum > 1.3' data/small}}HERE POKI_RUN_COMMAND{{mlr put '$z = $x * $y; filter $z > 0.3' data/small}}HERE

Built-in functions for filter and put

Each function takes a specific number of arguments, as shown below, except for functions marked as variadic such as min and max. (The latter compute min and max of any number of numerical arguments.) There is no notion of optional or default-on-absent arguments. All argument-passing is positional rather than by name; arguments are passed by value, not by reference.

You can get a list of all functions using mlr -F. POKI_RUN_CONTENT_GENERATOR(mk-func-h2s.sh)HERE

User-defined functions and subroutines

As of Miller 5.0.0 you can define your own functions, as well as subroutines.

User-defined functions

Here’s the obligatory example of a recursive function to compute the factorial function: POKI_INCLUDE_AND_RUN_ESCAPED(data/factorial-example.sh)HERE

Properties of user-defined functions:

  • Function bodies start with func and a parameter list, defined outside of begin, end, or other func or subr blocks. (I.e. the Miller DSL has no nested functions.)
  • A function (uniqified by its name) may not be redefined: either by redefining a user-defined function, or by redefining a built-in function. However, functions and subroutines have separate namespaces: you can define a subroutine log which does not clash with the mathematical log function.
  • Functions may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, functions may be either recursive or mutually recursive. Functions may not call subroutines.
  • Functions may be defined and called either within mlr put or mlr put.
  • Functions have read access to $-variables and @-variables but may not modify them. See also this cookbook item for an example.
  • Argument values may be reassigned: they are not read-only.
  • When a return value is not implicitly returned, this results in a return value of absent-null. (In the example above, if there were records for which the argument to f is non-numeric, the assignments would be skipped.) See also the section on empty_and_absent null data.
  • See the section on local variables for information on scope and extent of arguments, as well as for information on the use of local variables within functions.
  • See the section on expressions from files for information on the use of -f and -e flags.

User-defined subroutines

Example: POKI_INCLUDE_AND_RUN_ESCAPED(data/subr-example.sh)HERE

Properties of user-defined subroutines:

  • Subroutine bodies start with subr and a parameter list, defined outside of begin, end, or other func or subr blocks. (I.e. the Miller DSL has no nested subroutines.)
  • A subroutine (uniqified by its name) may not be redefined. However, functions and subroutines have separate namespaces: you can define a subroutine log which does not clash with the mathematical log function.
  • Subroutines may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, subroutines may be either recursive or mutually recursive. Subroutines may call functions.
  • Subroutines may be defined and called either within mlr put or mlr put.
  • Subroutines have read/write access to $-variables and @-variables.
  • Argument values may be reassigned: they are not read-only.
  • See the section on local variables for information on scope and extent of arguments, as well as for information on the use of local variables within functions.
  • See the section on expressions from files for information on the use of -f and -e flags.

Errors and transparency

As soon as you have a programming language, you start having the problem What is my code doing, and why? This includes getting syntax errors — which are always annoying — as well as the even more annoying problem of a program which parses without syntax error but doesn’t do what you expect.

The syntax error message is cryptic: it says syntax error at followed by the next symbol it couldn’t parse. This is good, but (as of 5.0.0) it doesn’t say things like syntax error at line 17, character 22. Here are some common causes of syntax errors:

  • Don’t forget ; at end of line, before another statement on the next line.
  • Miller’s DSL lacks the ++ and -- operators.
  • Curly braces are required for the bodies of if/while/for blocks, even when the body is a single statement.

Now for transparency:

  • As in any language, you can do print (or eprint to print to stderr). See also dump and emit.
  • The -v option to mlr put and mlr filter prints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous.
  • The -T option prints a trace of each statement executed.
  • The -t and -a options show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience.
  • Please see the type-checking section for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller’s important use-cases is being able to say simple things like mlr put '$y = $x + 1' myfile.dat with a minimum of punctuational bric-a-brac — but for programs over a few lines I generally find that the more type-specification, the better.

A note on the complexity of Miller’s expression language

One of Miller’s strengths is its brevity: it’s much quicker — and less error-prone — to type mlr stats1 -a sum -f x,y -g a,b than having to track summation variables as in awk, or using Miller’s out-of-stream variables. And the more language features Miller’s put-DSL has (for-loops, if-statements, nested control structures, user-defined functions, etc.) then the less powerful it begins to seem: because of the other programming-language features it doesn’t have (classes, execptions, and so on).

When I was originally prototyping Miller in 2015, the decision I had was whether to hand-code in a low-level language like C or Rust, with my own hand-rolled DSL, or whether to use a higher-level language (like Python or Lua or Nim) and let the put statements be handled by the implementation language’s own eval: the implementation language would take the place of a DSL. Multiple performance experiments showed me I could get better throughput using the former, and using C in particular — by a wide margin. So Miller is C under the hood with a hand-rolled DSL.

I do want to keep focusing on what Miller is good at — concise notation, low latency, and high throughput — and not add too much in terms of high-level-language features to the DSL. That said, some sort of customizability is a basic thing to want. As of 4.1.0 we have recursive for/while/if structures on about the same complexity level as awk; as of 5.0.0 we have user-defined functions and map-valued variables, again on about the same complexity level as awk along with optional type-declaration syntax. While I’m excited by these powerful language features, I hope to keep new features beyond 5.0.0 focused on Miller’s sweet spot which is speed plus simplicity.

miller-5.6.2/doc/content-for-reference-verbs.html000066400000000000000000001301461354153536500217730ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Overview

When you type mlr {something} myfile.dat, the {something} part is called a verb. It specifies how you want to transform your data. (See also here for a breakdown.) The following is an alphabetical list of verbs with their descriptions.

The verbs put and filter are special in that they have a rich expression language (domain-specific language, or “DSL”). More information about them can be found here.

Here’s a comparison of verbs and put/filter DSL expressions:
Example: POKI_RUN_COMMAND{{mlr stats1 -a sum -f x -g a data/small}}HERE

  • Verbs are coded in C
  • They run a bit faster
  • They take fewer keystrokes
  • There is less to learn
  • Their customization is limited to each verb’s options
Example: POKI_RUN_COMMAND{{mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small}}HERE
  • You get to write your own DSL expressions
  • They run a bit slower
  • They take more keystrokes
  • There is more to learn
  • They are highly customizable

altkv

Map list of values to alternating key/value pairs. POKI_RUN_COMMAND{{mlr altkv -h}}HERE POKI_RUN_COMMAND{{echo 'a,b,c,d,e,f' | mlr altkv}}HERE POKI_RUN_COMMAND{{echo 'a,b,c,d,e,f,g' | mlr altkv}}HERE

bar

Cheesy bar-charting. POKI_RUN_COMMAND{{mlr bar -h}}HERE POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint bar --lo 0 --hi 1 -f x,y data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint bar --lo 0.4 --hi 0.6 -f x,y data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint bar --auto -f x,y data/small}}HERE

bootstrap

POKI_RUN_COMMAND{{mlr bootstrap --help}}HERE

The canonical use for bootstrap sampling is to put error bars on statistical quantities, such as mean. For example:

$ mlr --opprint stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
yellow 0.497129 1413
red    0.492560 4641
purple 0.494005 1142
green  0.504861 1109
blue   0.517717 1470
orange 0.490532 303

$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
yellow 0.500651 1380
purple 0.501556 1111
green  0.503272 1068
red    0.493895 4702
blue   0.512529 1496
orange 0.521030 321

$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
yellow 0.498046 1485
blue   0.513576 1417
red    0.492870 4595
orange 0.507697 307
green  0.496803 1075
purple 0.486337 1199

$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
blue   0.522921 1447
red    0.490717 4617
yellow 0.496450 1419
purple 0.496523 1192
green  0.507569 1111
orange 0.468014 292

cat

Most useful for format conversions (see POKI_PUT_LINK_FOR_PAGE(file-formats.html)HERE), and concatenating multiple same-schema CSV files to have the same header: POKI_RUN_COMMAND{{mlr cat -h}}HERE
POKI_RUN_COMMAND{{cat data/a.csv}}HERE POKI_RUN_COMMAND{{cat data/b.csv}}HERE POKI_RUN_COMMAND{{mlr --csv cat data/a.csv data/b.csv}}HERE
POKI_RUN_COMMAND{{mlr --icsv --oxtab cat data/a.csv data/b.csv}}HERE POKI_RUN_COMMAND{{mlr --csv cat -n data/a.csv data/b.csv}}HERE
POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint cat -n -g a data/small}}HERE

check

POKI_RUN_COMMAND{{mlr check --help}}HERE

clean-whitespace

POKI_RUN_COMMAND{{mlr clean-whitespace --help}}HERE POKI_RUN_COMMAND{{mlr --icsv --ojson cat data/clean-whitespace.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --ojson clean-whitespace -k data/clean-whitespace.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --ojson clean-whitespace -v data/clean-whitespace.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --ojson clean-whitespace data/clean-whitespace.csv}}HERE

Function links:

count-distinct

POKI_RUN_COMMAND{{mlr count-distinct --help}}HERE POKI_RUN_COMMAND{{mlr count-distinct -f a,b then sort -nr count data/medium}}HERE POKI_RUN_COMMAND{{mlr count-distinct -u -f a,b data/medium}}HERE POKI_RUN_COMMAND{{mlr count-distinct -f a,b -o someothername then sort -nr someothername data/medium}}HERE POKI_RUN_COMMAND{{mlr count-distinct -n -f a,b data/medium}}HERE

count-similar

POKI_RUN_COMMAND{{mlr count-similar --help}}HERE POKI_RUN_COMMAND{{mlr --opprint head -n 20 data/medium}}HERE POKI_RUN_COMMAND{{mlr --opprint head -n 20 then count-similar -g a data/medium}}HERE POKI_RUN_COMMAND{{mlr --opprint head -n 20 then count-similar -g a then sort -f a data/medium}}HERE

cut

POKI_RUN_COMMAND{{mlr cut --help}}HERE
POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint cut -f y,x,i data/small}}HERE
POKI_RUN_COMMAND{{echo 'a=1,b=2,c=3' | mlr cut -f b,c,a}}HERE POKI_RUN_COMMAND{{echo 'a=1,b=2,c=3' | mlr cut -o -f b,c,a}}HERE

decimate

POKI_RUN_COMMAND{{mlr decimate --help}}HERE

fill-down

POKI_RUN_COMMAND{{mlr fill-down --help}}HERE POKI_RUN_COMMAND{{cat data/fill-down.csv}}HERE POKI_RUN_COMMAND{{mlr --csv fill-down -f b data/fill-down.csv}}HERE POKI_RUN_COMMAND{{mlr --csv fill-down -a -f b data/fill-down.csv}}HERE

filter

POKI_RUN_COMMAND{{mlr filter --help}}HERE

Features which filter shares with put

Please see Expression language for filter and put for more information about the expression language for mlr filter.

format-values

POKI_RUN_COMMAND{{mlr format-values --help}}HERE POKI_RUN_COMMAND{{mlr --opprint format-values data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint format-values -n data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint format-values -i %08llx -f %.6le -s X%sX data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint format-values -i %08llx -f %.6le -s X%sX -n data/small}}HERE

fraction

POKI_RUN_COMMAND{{mlr fraction --help}}HERE

For example, suppose you have the following CSV file: POKI_INCLUDE_ESCAPED(data/fraction-example.csv)HERE

Then we can see what each record’s n contributes to the total n: POKI_RUN_COMMAND{{mlr --opprint fraction -f n data/fraction-example.csv}}HERE

Using -g we can split those out by gender, or by color:
POKI_RUN_COMMAND{{mlr --opprint fraction -f n -g u data/fraction-example.csv}}HERE POKI_RUN_COMMAND{{mlr --opprint fraction -f n -g v data/fraction-example.csv}}HERE

We can see, for example, that 70.9% of females have red (on the left) while 94.5% of reds are for females.

To convert fractions to percents, you may use -p: POKI_RUN_COMMAND{{mlr --opprint fraction -f n -p data/fraction-example.csv}}HERE

Another often-used idiom is to convert from a point distribution to a cumulative distribution, also known as “running sums”. Here, you can use -c: POKI_RUN_COMMAND{{mlr --opprint fraction -f n -p -c data/fraction-example.csv}}HERE POKI_RUN_COMMAND{{mlr --opprint fraction -f n -g u -p -c data/fraction-example.csv}}HERE

grep

POKI_RUN_COMMAND{{mlr grep -h}}HERE

group-by

POKI_RUN_COMMAND{{mlr group-by --help}}HERE

This is similar to sort but with less work. Namely, Miller’s sort has three steps: read through the data and append linked lists of records, one for each unique combination of the key-field values; after all records are read, sort the key-field values; then print each record-list. The group-by operation simply omits the middle sort. An example should make this more clear.
POKI_RUN_COMMAND{{mlr --opprint group-by a data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint sort -f a data/small}}HERE

In this example, since the sort is on field a, the first step is to group together all records having the same value for field a; the second step is to sort the distinct a-field values pan, eks, and wye into eks, pan, and wye; the third step is to print out the record-list for a=eks, then the record-list for a=pan, then the record-list for a=wye. The group-by operation omits the middle sort and just puts like records together, for those times when a sort isn’t desired. In particular, the ordering of group-by fields for group-by is the order in which they were encountered in the data stream, which in some cases may be more interesting to you.

group-like

POKI_RUN_COMMAND{{mlr group-like --help}}HERE

This groups together records having the same schema (i.e. same ordered list of field names) which is useful for making sense of time-ordered output as described in POKI_PUT_LINK_FOR_PAGE(record-heterogeneity.html)HERE — in particular, in preparation for CSV or pretty-print output.
POKI_RUN_COMMAND{{mlr cat data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint group-like data/het.dkvp}}HERE

having-fields

POKI_RUN_COMMAND{{mlr having-fields --help}}HERE

Similar to group-like, this retains records with specified schema.
POKI_RUN_COMMAND{{mlr cat data/het.dkvp}}HERE
POKI_RUN_COMMAND{{mlr having-fields --at-least resource data/het.dkvp}}HERE
POKI_RUN_COMMAND{{mlr having-fields --which-are resource,ok,loadsec data/het.dkvp}}HERE

head

POKI_RUN_COMMAND{{mlr head --help}}HERE Note that head is distinct from tophead shows fields which appear first in the data stream; top shows fields which are numerically largest (or smallest).
POKI_RUN_COMMAND{{mlr --opprint head -n 4 data/medium}}HERE POKI_RUN_COMMAND{{mlr --opprint head -n 1 -g b data/medium}}HERE

histogram

POKI_RUN_COMMAND{{mlr histogram --help}}HERE This is just a histogram; there’s not too much to say here. A note about binning, by example: Suppose you use --lo 0.0 --hi 1.0 --nbins 10 -f x. The input numbers less than 0 or greater than 1 aren’t counted in any bin. Input numbers equal to 1 are counted in the last bin. That is, bin 0 has 0.0 ≤ x < 0.1, bin 1 has 0.1 ≤ x < 0.2, etc., but bin 9 has 0.9 ≤ x ≤ 1.0. POKI_RUN_COMMAND{{mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 data/medium}}HERE POKI_RUN_COMMAND{{mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 -o my_ data/medium}}HERE

join

POKI_RUN_COMMAND{{mlr join --help}}HERE Examples:

Join larger table with IDs with smaller ID-to-name lookup table, showing only paired records:
POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-left-example.csv}}HERE
POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-right-example.csv}}HERE
POKI_RUN_COMMAND{{mlr --icsvlite --opprint join -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv}}HERE

Same, but with sorting the input first:
POKI_RUN_COMMAND{{mlr --icsvlite --opprint sort -f idcode then join -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv}}HERE

Same, but showing only unpaired records:
POKI_RUN_COMMAND{{mlr --icsvlite --opprint join --np --ul --ur -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv}}HERE

Use prefixing options to disambiguate between otherwise identical non-join field names:
POKI_RUN_COMMAND{{mlr --csvlite --opprint cat data/self-join.csv data/self-join.csv}}HERE
POKI_RUN_COMMAND{{mlr --csvlite --opprint join -j a --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv}}HERE

Use zero join columns:
POKI_RUN_COMMAND{{mlr --csvlite --opprint join -j "" --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv}}HERE

label

POKI_RUN_COMMAND{{mlr label --help}}HERE See also rename.

Example: Files such as /etc/passwd, /etc/group, and so on have implicit field names which are found in section-5 manpages. These field names may be made explicit as follows: POKI_INCLUDE_ESCAPED(data/label-example.txt)HERE

Likewise, if you have CSV/CSV-lite input data which has somehow been bereft of its header line, you can re-add a header line using --implicit-csv-header and label: POKI_RUN_COMMAND{{cat data/headerless.csv}}HERE POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header cat data/headerless.csv}}HERE POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header label name,age,status data/headerless.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --implicit-csv-header --opprint label name,age,status data/headerless.csv}}HERE

least-frequent

POKI_RUN_COMMAND{{mlr least-frequent -h}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape -n 5}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -o someothername}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -b}}HERE See also most-frequent.

merge-fields

POKI_RUN_COMMAND{{mlr merge-fields --help}}HERE

This is like mlr stats1 but all accumulation is done across fields within each given record: horizontal rather than vertical statistics, if you will.

Examples: POKI_RUN_COMMAND{{mlr --csvlite --opprint cat data/inout.csv}}HERE POKI_RUN_COMMAND{{mlr --csvlite --opprint merge-fields -a min,max,sum -c _in,_out data/inout.csv}}HERE POKI_RUN_COMMAND{{mlr --csvlite --opprint merge-fields -k -a sum -c _in,_out data/inout.csv}}HERE

most-frequent

POKI_RUN_COMMAND{{mlr most-frequent -h}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape -n 5}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -o someothername}}HERE POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -b}}HERE See also least-frequent.

nest

POKI_RUN_COMMAND{{mlr nest -h}}HERE

nothing

POKI_RUN_COMMAND{{mlr nothing -h}}HERE

put

POKI_RUN_COMMAND{{mlr put --help}}HERE

Features which put shares with filter

Please see Expression language for filter and put for more information about the expression language for mlr put.

regularize

POKI_RUN_COMMAND{{mlr regularize --help}}HERE

This exists since hash-map software in various languages and tools encountered in the wild does not always print similar rows with fields in the same order: mlr regularize helps clean that up.

See also reorder.

remove-empty-columns

POKI_RUN_COMMAND{{mlr remove-empty-columns --help}}HERE POKI_RUN_COMMAND{{cat data/remove-empty-columns.csv}}HERE POKI_RUN_COMMAND{{mlr --csv remove-empty-columns data/remove-empty-columns.csv}}HERE

Since this verb needs to read all records to see if any of them has a non-empty value for a given field name, it is non-streaming: it will ingest all records before writing any.

rename

POKI_RUN_COMMAND{{mlr rename --help}}HERE
POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint rename i,INDEX,b,COLUMN2 data/small}}HERE

As discussed in POKI_PUT_LINK_FOR_PAGE(performance.html)HERE, sed is significantly faster than Miller at doing this. However, Miller is format-aware, so it knows to do renames only within specified field keys and not any others, nor in field values which may happen to contain the same pattern. Example:
POKI_RUN_COMMAND{{sed 's/y/COLUMN5/g' data/small}}HERE
POKI_RUN_COMMAND{{mlr rename y,COLUMN5 data/small}}HERE
See also label.

reorder

POKI_RUN_COMMAND{{mlr reorder --help}}HERE This pivots specified field names to the start or end of the record — for example when you have highly multi-column data and you want to bring a field or two to the front of line where you can give a quick visual scan.
POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE
POKI_RUN_COMMAND{{mlr --opprint reorder -f i,b data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint reorder -e -f i,b data/small}}HERE

repeat

POKI_RUN_COMMAND{{mlr repeat --help}}HERE

This is useful in at least two ways: one, as a data-generator as in the above example using urand(); two, for reconstructing individual samples from data which has been count-aggregated: POKI_RUN_COMMAND{{cat data/repeat-example.dat}}HERE POKI_RUN_COMMAND{{mlr repeat -f count then cut -x -f count data/repeat-example.dat}}HERE

After expansion with repeat, such data can then be sent on to stats1 -a mode, or (if the data are numeric) to stats1 -a p10,p50,p90, etc.

reshape

POKI_RUN_COMMAND{{mlr reshape --help}}HERE

sample

POKI_RUN_COMMAND{{mlr sample --help}}HERE

This is reservoir-sampling: select k items from n with uniform probability and no repeats in the sample. (If n is less than k, then of course only n samples are produced.) With -g {field names}, produce a k-sample for each distinct value of the specified field names. POKI_INCLUDE_ESCAPED(data/sample-example.txt)HERE

Note that no output is produced until all inputs are in. Another way to do sampling, which works in the streaming case, is mlr filter 'urand() & 0.001' where you tune the 0.001 to meet your needs.

sec2gmt

POKI_RUN_COMMAND{{mlr sec2gmt -h}}HERE

sec2gmtdate

POKI_RUN_COMMAND{{mlr sec2gmtdate -h}}HERE

seqgen

POKI_RUN_COMMAND{{mlr seqgen -h}}HERE POKI_RUN_COMMAND{{mlr seqgen --stop 10}}HERE POKI_RUN_COMMAND{{mlr seqgen --start 20 --stop 40 --step 4}}HERE POKI_RUN_COMMAND{{mlr seqgen --start 40 --stop 20 --step -4}}HERE

shuffle

POKI_RUN_COMMAND{{mlr shuffle -h}}HERE

skip-trivial-records

POKI_RUN_COMMAND{{mlr skip-trivial-records -h}}HERE POKI_RUN_COMMAND{{cat data/trivial-records.csv}}HERE POKI_RUN_COMMAND{{mlr --csv skip-trivial-records data/trivial-records.csv}}HERE

sort

POKI_RUN_COMMAND{{mlr sort --help}}HERE

Example: POKI_RUN_COMMAND{{mlr --opprint sort -f a -nr x data/small}}HERE

Here’s an example filtering log data: suppose multiple threads (labeled here by color) are all logging progress counts to a single log file. The log file is (by nature) chronological, so the progress of various threads is interleaved: POKI_RUN_COMMAND{{head -n 10 data/multicountdown.dat}}HERE

We can group these by thread by sorting on the thread ID (here, color). Since Miller’s sort is stable, this means that timestamps within each thread’s log data are still chronological: POKI_RUN_COMMAND{{head -n 20 data/multicountdown.dat | mlr --opprint sort -f color}}HERE

Any records not having all specified sort keys will appear at the end of the output, in the order they were encountered, regardless of the specified sort order: POKI_RUN_COMMAND{{mlr sort -n x data/sort-missing.dkvp}}HERE POKI_RUN_COMMAND{{mlr sort -nr x data/sort-missing.dkvp}}HERE

stats1

POKI_RUN_COMMAND{{mlr stats1 --help}}HERE These are simple univariate statistics on one or more number-valued fields (count and mode apply to non-numeric fields as well), optionally categorized by one or more other fields.
POKI_RUN_COMMAND{{mlr --oxtab stats1 -a count,sum,min,p10,p50,mean,p90,max -f x,y data/medium}}HERE
POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x,y -g b then sort -f b data/medium}}HERE
POKI_RUN_COMMAND{{mlr --opprint stats1 -a p50,p99 -f u,v -g color then put '$ur=$u_p99/$u_p50;$vr=$v_p99/$v_p50' data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint count-distinct -f shape then sort -nr count data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint stats1 -a mode -f color -g shape data/colored-shapes.dkvp}}HERE

stats2

POKI_RUN_COMMAND{{mlr stats2 --help}}HERE These are simple bivariate statistics on one or more pairs of number-valued fields, optionally categorized by one or more fields.
POKI_RUN_COMMAND{{mlr --oxtab put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a cov,corr -f x,y,y,y,x2,xy,x2,y2 data/medium}}HERE
POKI_RUN_COMMAND{{mlr --opprint put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a linreg-ols,r2 -f x,y,y,y,xy,y2 -g a data/medium}}HERE

Here’s an example simple line-fit. The x and y fields of the data/medium dataset are just independent uniformly distributed on the unit interval. Here we remove half the data and fit a line to it. POKI_INCLUDE_ESCAPED(data/linreg-example.txt)HERE

I use pgr for plotting; here’s a screenshot.

(Thanks Drew Kunas for a good conversation about PCA!)

Here’s an example estimating time-to-completion for a set of jobs. Input data comes from a log file, with number of work units left to do in the count field and accumulated seconds in the upsec field, labeled by the color field: POKI_RUN_COMMAND{{head -n 10 data/multicountdown.dat}}HERE We can do a linear regression on count remaining as a function of time: with c = m*u+b we want to find the time when the count goes to zero, i.e. u=-b/m. POKI_RUN_COMMAND{{mlr --oxtab stats2 -a linreg-pca -f upsec,count -g color then put '$donesec = -$upsec_count_pca_b/$upsec_count_pca_m' data/multicountdown.dat}}HERE

step

POKI_RUN_COMMAND{{mlr step --help}}HERE Most Miller commands are record-at-a-time, with the exception of stats1, stats2, and histogram which compute aggregate output. The step command is intermediate: it allows the option of adding fields which are functions of fields from previous records. Rsum is short for running sum.
POKI_RUN_COMMAND{{mlr --opprint step -a shift,delta,rsum,counter -f x data/medium | head -15}}HERE
POKI_RUN_COMMAND{{mlr --opprint step -a shift,delta,rsum,counter -f x -g a data/medium | head -15}}HERE
POKI_RUN_COMMAND{{mlr --opprint step -a ewma -f x -d 0.1,0.9 ../doc/data/medium | head -15}}HERE
POKI_RUN_COMMAND{{mlr --opprint step -a ewma -f x -d 0.1,0.9 -o smooth,rough ../doc/data/medium | head -15}}HERE
Example deriving uptime-delta from system uptime: POKI_INCLUDE_ESCAPED(data/ping-delta-example.txt)HERE

tac

POKI_RUN_COMMAND{{mlr tac --help}}HERE

Prints the records in the input stream in reverse order. Note: this requires Miller to retain all input records in memory before any output records are produced.
POKI_RUN_COMMAND{{mlr --icsv --opprint cat data/a.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint cat data/b.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --opprint tac data/a.csv data/b.csv}}HERE
POKI_RUN_COMMAND{{mlr --icsv --opprint put '$filename=FILENAME' then tac data/a.csv data/b.csv}}HERE

tail

POKI_RUN_COMMAND{{mlr tail --help}}HERE

Prints the last n records in the input stream, optionally by category.
POKI_RUN_COMMAND{{mlr --opprint tail -n 4 data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint tail -n 1 -g shape data/colored-shapes.dkvp}}HERE

tee

POKI_RUN_COMMAND{{mlr tee --help}}HERE

top

POKI_RUN_COMMAND{{mlr top --help}}HERE Note that top is distinct from headhead shows fields which appear first in the data stream; top shows fields which are numerically largest (or smallest).
POKI_RUN_COMMAND{{mlr --opprint top -n 4 -f x data/medium}}HERE POKI_RUN_COMMAND{{mlr --opprint top -n 4 -f x -o someothername data/medium}}HERE POKI_RUN_COMMAND{{mlr --opprint top -n 2 -f x -g a then sort -f a data/medium}}HERE

uniq

POKI_RUN_COMMAND{{mlr uniq --help}}HERE

There are two main ways to use mlr uniq: the first way is with -g to specify group-by columns.
POKI_RUN_COMMAND{{wc -l data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr uniq -g color,shape data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint uniq -g color,shape -c then sort -f color,shape data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint uniq -g color,shape -c -o someothername then sort -nr someothername data/colored-shapes.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint uniq -n -g color,shape data/colored-shapes.dkvp}}HERE

The second main way to use mlr uniq is without group-by columns, using -a instead:
POKI_RUN_COMMAND{{cat data/repeats.dkvp}}HERE
POKI_RUN_COMMAND{{wc -l data/repeats.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint uniq -a data/repeats.dkvp}}HERE
POKI_RUN_COMMAND{{mlr --opprint uniq -a -n data/repeats.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint uniq -a -c data/repeats.dkvp}}HERE

unsparsify

POKI_RUN_COMMAND{{mlr unsparsify --help}}HERE

Examples: POKI_RUN_COMMAND{{cat data/sparse.json}}HERE POKI_RUN_COMMAND{{mlr --json unsparsify data/sparse.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --opprint unsparsify data/sparse.json}}HERE POKI_RUN_COMMAND{{mlr --ijson --opprint unsparsify --fill-with missing data/sparse.json}}HERE

miller-5.6.2/doc/content-for-reference.html000066400000000000000000001113351354153536500206530ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Command overview

Whereas the Unix toolkit is made of the separate executables cat, tail, cut, sort, etc., Miller has subcommands, invoked as follows: POKI_INCLUDE_ESCAPED(data/subcommand-example.txt)HERE

These fall into categories as follows:
Commands Description
cat, cut, grep, head, join, sort, tac, tail, top, uniq Analogs of their Unix-toolkit namesakes, discussed below as well as in POKI_PUT_LINK_FOR_PAGE(feature-comparison.html)HERE
filter, put, sec2gmt, sec2gmtdate, step, tee awk-like functionality
bar, bootstrap, decimate, histogram, least-frequent, most-frequent, sample, shuffle, stats1, stats2 Statistically oriented
group-by, group-like, having-fields Particularly oriented toward POKI_PUT_LINK_FOR_PAGE(record-heterogeneity.html)HERE, although all Miller commands can handle heterogeneous records
check, count-distinct, label, merge-fields, nest, nothing, rename, rename, reorder, reshape, seqgen These draw from other sources (see also POKI_PUT_LINK_FOR_PAGE(originality.html)HERE): count-distinct is SQL-ish, and rename can be done by sed (which does it faster: see POKI_PUT_LINK_FOR_PAGE(performance.html)HERE).

I/O options

Formats

Options:

  --dkvp    --idkvp    --odkvp
  --nidx    --inidx    --onidx
  --csv     --icsv     --ocsv
  --csvlite --icsvlite --ocsvlite
  --pprint  --ipprint  --opprint  --right
  --xtab    --ixtab    --oxtab
  --json    --ijson    --ojson

These are as discussed in POKI_PUT_LINK_FOR_PAGE(file-formats.html)HERE, with the exception of --right which makes pretty-printed output right-aligned:
POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE POKI_RUN_COMMAND{{mlr --opprint --right cat data/small}}HERE

Additional notes:

  • Use --csv, --pprint, etc. when the input and output formats are the same.
  • Use --icsv --opprint, etc. when you want format conversion as part of what Miller does to your data.
  • DKVP (key-value-pair) format is the default for input and output. So, --oxtab is the same as --idkvp --oxtab.
Pro-tip: Please use either --format1, or --iformat1 --oformat2. If you use --format1 --oformat2 then what happens is that flags are set up for input and output for format1, some of which are overwritten for output in format2. For technical reasons, having --oformat2 clobber all the output-related effects of --format1 also removes some flexibility from the command-line interface. See also https://github.com/johnkerl/miller/issues/180 and https://github.com/johnkerl/miller/issues/199.

In-place mode

Use the mlr -I flag to process files in-place. For example, mlr -I --csv cut -x -f unwanted_column_name mydata/*.csv will remove unwanted_column_name from all your *.csv files in your mydata/ subdirectory.

By default, Miller output goes to the screen (or you can redirect a file using > or to another process using |). With -I, for each file name on the command line, output is written to a temporary file in the same directory. Miller writes its output into that temp file, which is then renamed over the original. Then, processing continues on the next file. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on.

Please see here for examples.

Compression

Options:

  --prepipe {command}

The prepipe command is anything which reads from standard input and produces data acceptable to Miller. Nominally this allows you to use whichever decompression utilities you have installed on your system, on a per-file basis. If the command has flags, quote them: e.g. mlr --prepipe 'zcat -cf'. Examples:

# These two produce the same output:
$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz
# With multiple input files you need --prepipe:
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz
$ mlr --prepipe gunzip --idkvp --oxtab cut -f hostname,uptime myfile1.dat.gz myfile2.dat.gz

# Similar to the above, but with compressed output as well as input:
$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | gzip > outfile.csv.gz
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz | gzip > outfile.csv.gz
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz | gzip > outfile.csv.gz

# Similar to the above, but with different compression tools for input and output:
$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | xz -z > outfile.csv.xz
$ xz -cd < myfile1.csv.xz | mlr cut -f hostname,uptime | gzip > outfile.csv.xz
$ mlr --prepipe 'xz -cd' cut -f hostname,uptime myfile1.csv.xz myfile2.csv.xz | xz -z > outfile.csv.xz

... etc.

Record/field/pair separators

Miller has record separators IRS and ORS, field separators IFS and OFS, and pair separators IPS and OPS. For example, in the DKVP line a=1,b=2,c=3, the record separator is newline, field separator is comma, and pair separator is the equals sign. These are the default values.

Options:

  --rs --irs --ors
  --fs --ifs --ofs --repifs
  --ps --ips --ops
  • You can change a separator from input to output via e.g. --ifs = --ofs :. Or, you can specify that the same separator is to be used for input and output via e.g. --fs :.
  • The pair separator is only relevant to DKVP format.
  • Pretty-print and xtab formats ignore the separator arguments altogether.
  • The --repifs means that multiple successive occurrences of the field separator count as one. For example, in CSV data we often signify nulls by empty strings, e.g. 2,9,,,,,6,5,4. On the other hand, if the field separator is a space, it might be more natural to parse 2 4 5 the same as 2 4 5: --repifs --ifs ' ' lets this happen. In fact, the --ipprint option above is internally implemented in terms of --repifs.
  • Just write out the desired separator, e.g. --ofs '|'. But you may use the symbolic names newline, space, tab, pipe, or semicolon if you like.

Number formatting

The command-line option --ofmt {format string} is the global number format for commands which generate numeric output, e.g. stats1, stats2, histogram, and step, as well as mlr put. Examples: POKI_CARDIFY(--ofmt %.9le --ofmt %.6lf --ofmt %.0lf)HERE

These are just C printf formats applied to double-precision numbers. Please don’t use %s or %d. Additionally, if you use leading width (e.g. %18.12lf) then the output will contain embedded whitespace, which may not be what you want if you pipe the output to something else, particularly CSV. I use Miller’s pretty-print format (mlr --opprint) to column-align numerical data.

To apply formatting to a single field, overriding the global ofmt, use fmtnum function within mlr put. For example: POKI_RUN_COMMAND{{echo 'x=3.1,y=4.3' | mlr put '$z=fmtnum($x*$y,"%08lf")'}}HERE POKI_RUN_COMMAND{{echo 'x=0xffff,y=0xff' | mlr put '$z=fmtnum(int($x*$y),"%08llx")'}}HERE

Input conversion from hexadecimal is done automatically on fields handled by mlr put and mlr filter as long as the field value begins with "0x". To apply output conversion to hexadecimal on a single column, you may use fmtnum, or the keystroke-saving hexfmt function. Example: POKI_RUN_COMMAND{{echo 'x=0xffff,y=0xff' | mlr put '$z=hexfmt($x*$y)'}}HERE

Data transformations (verbs)

Expression language for filter and put

then-chaining

In accord with the Unix philosophy, you can pipe data into or out of Miller. For example: POKI_CARDIFY(mlr cut --complement -f os_version *.dat | mlr sort -f hostname,uptime)HERE

You can, if you like, instead simply chain commands together using the then keyword: POKI_CARDIFY(mlr cut --complement -f os_version then sort -f hostname,uptime *.dat)HERE

(You can precede the very first verb with then, if you like, for symmetry.) Here’s a performance comparison: POKI_INCLUDE_ESCAPED(data/then-chaining-performance.txt)HERE There are two reasons to use then-chaining: one is for performance, although I don’t expect this to be a win in all cases. Using then-chaining avoids redundant string-parsing and string-formatting at each pipeline step: instead input records are parsed once, they are fed through each pipeline stage in memory, and then output records are formatted once. On the other hand, Miller is single-threaded, while modern systems are usually multi-processor, and when streaming-data programs operate through pipes, each one can use a CPU. Rest assured you get the same results either way.

The other reason to use then-chaining is for simplicity: you don’t have re-type formatting flags (e.g. --csv --fs tab) at every pipeline stage.

Auxiliary commands

There are a few nearly-standalone programs which have nothing to do with the rest of Miller, do not participate in record streams, and do not deal with file formats. They might as well be little standalone executables but they’re delivered within the main Miller executable for convenience. POKI_RUN_COMMAND{{mlr aux-list}}HERE POKI_RUN_COMMAND{{mlr lecat --help}}HERE POKI_RUN_COMMAND{{mlr termcvt --help}}HERE POKI_RUN_COMMAND{{mlr hex --help}}HERE POKI_RUN_COMMAND{{mlr unhex --help}}HERE

Examples: POKI_RUN_COMMAND{{echo 'Hello, world!' | mlr lecat --mono}}HERE POKI_RUN_COMMAND{{echo 'Hello, world!' | mlr termcvt --lf2crlf | mlr lecat --mono}}HERE POKI_RUN_COMMAND{{mlr hex data/budget.csv}}HERE POKI_RUN_COMMAND{{mlr hex -r data/budget.csv}}HERE POKI_RUN_COMMAND{{mlr hex -r data/budget.csv | sed 's/20/2a/g' | mlr unhex}}HERE

Data types

Miller’s input and output are all string-oriented: there is (as of August 2015 anyway) no support for binary record packing. In this sense, everything is a string in and out of Miller. During processing, field names are always strings, even if they have names like "3"; field values are usually strings. Field values’ ability to be interpreted as a non-string type only has meaning when comparison or function operations are done on them. And it is an error condition if Miller encounters non-numeric (or otherwise mistyped) data in a field in which it has been asked to do numeric (or otherwise type-specific) operations.

Field values are treated as numeric for the following:

  • Numeric sort: mlr sort -n, mlr sort -nr.
  • Statistics: mlr histogram, mlr stats1, mlr stats2.
  • Cross-record arithmetic: mlr step.

For mlr put and mlr filter:

  • Miller’s types for function processing are empty-null (empty string), absent-null (reads of unset right-hand sides, or fall-through non-explicit return values from user-defined functions), error, string, float (double-precision), int (64-bit signed), and boolean.
  • On input, string values representable as numbers, e.g. "3" or "3.1", are treated as int or float, respectively. If a record has x=1,y=2 then mlr put '$z=$x+$y' will produce x=1,y=2,z=3, and mlr put '$z=$x.$y' does not give an error simply because the dot operator has been generalized to stringify non-strings. To coerce back to string for processing, use the string function: mlr put '$z=string($x).string($y)' will produce x=1,y=2,z=12.
  • On input, string values representable as boolean (e.g. "true", "false") are not automatically treated as boolean. (This is because "true" and "false" are ordinary words, and auto string-to-boolean on a column consisting of words would result in some strings mixed with some booleans.) Use the boolean function to coerce: e.g. giving the record x=1,y=2,w=false to mlr put '$z=($x<$y) || boolean($w)'.
  • Functions take types as described in mlr --help-all-functions: for example, log10 takes float input and produces float output, gmt2sec maps string to int, and sec2gmt maps int to string.
  • All math functions described in mlr --help-all-functions take integer as well as float input.

Null data: empty and absent

One of Miller’s key features is its support for heterogeneous data. For example, take mlr sort: if you try to sort on field hostname when not all records in the data stream have a field named hostname, it is not an error (although you could pre-filter the data stream using mlr having-fields --at-least hostname then sort ...). Rather, records lacking one or more sort keys are simply output contiguously by mlr sort.

Miller has two kinds of null data:

  • Empty (key present, value empty): a field name is present in a record (or in an out-of-stream variable) with empty value: e.g. x=,y=2 in the data input stream, or assignment $x="" or @x="" in mlr put.
  • Absent (key not present): a field name is not present, e.g. input record is x=1,y=2 and a put or filter expression refers to $z. Or, reading an out-of-stream variable which hasn’t been assigned a value yet, e.g. mlr put -q '@sum += $x; end{emit @sum}' or mlr put -q '@sum[$a][$b] += $x; end{emit @sum, "a", "b"}'.

You can test these programatically using the functions is_empty/is_not_empty, is_absent/is_present, and is_null/is_not_null. For the last pair, note that null means either empty or absent.

Rules for null-handling:

  • Records with one or more empty sort-field values sort after records with all sort-field values present: POKI_RUN_COMMAND{{mlr cat data/sort-null.dat}}HERE POKI_RUN_COMMAND{{mlr sort -n a data/sort-null.dat}}HERE POKI_RUN_COMMAND{{mlr sort -nr a data/sort-null.dat}}HERE
  • Functions/operators which have one or more empty arguments produce empty output: e.g. POKI_RUN_COMMAND{{echo 'x=2,y=3' | mlr put '$a=$x+$y'}}HERE POKI_RUN_COMMAND{{echo 'x=,y=3' | mlr put '$a=$x+$y'}}HERE POKI_RUN_COMMAND{{echo 'x=,y=3' | mlr put '$a=log($x);$b=log($y)'}}HERE with the exception that the min and max functions are special: if one argument is non-null, it wins: POKI_RUN_COMMAND{{echo 'x=,y=3' | mlr put '$a=min($x,$y);$b=max($x,$y)'}}HERE
  • Functions of absent variables (e.g. mlr put '$y = log10($nonesuch)') evaluate to absent, and arithmetic/bitwise/boolean operators with both operands being absent evaluate to absent. Arithmetic operators with one absent operand return the other operand. More specifically, absent values act like zero for addition/subtraction, and one for multiplication: Furthermore, any expression which evaluates to absent is not stored in the left-hand side of an assignment statement : POKI_RUN_COMMAND{{echo 'x=2,y=3' | mlr put '$a=$u+$v; $b=$u+$y; $c=$x+$y'}}HERE POKI_RUN_COMMAND{{echo 'x=2,y=3' | mlr put '$a=min($x,$v);$b=max($u,$y);$c=min($u,$v)'}}HERE
  • Likewise, for assignment to maps, absent-valued keys or values result in a skipped assignment.
The reasoning is as follows:
  • Empty values are explicit in the data so they should explicitly affect accumulations: mlr put '@sum += $x' should accumulate numeric x values into the sum but an empty x, when encountered in the input data stream, should make the sum non-numeric. To work around this you can use the is_not_null function as follows: mlr put 'is_not_null($x) { @sum += $x }'
  • Absent stream-record values should not break accumulations, since Miller by design handles heterogenous data: the running @sum in mlr put '@sum += $x' should not be invalidated for records which have no x.
  • Absent out-of-stream-variable values are precisely what allow you to write mlr put '@sum += $x'. Otherwise you would have to write mlr put 'begin{@sum = 0}; @sum += $x' — which is tolerable — but for mlr put 'begin{...}; @sum[$a][$b] += $x' you’d have to pre-initialize @sum for all values of $a and $b in your input data stream, which is intolerable.
  • The penalty for the absent feature is that misspelled variables can be hard to find: e.g. in mlr put 'begin{@sumx = 10}; ...; update @sumx somehow per-record; ...; end {@something = @sum * 2}' the accumulator is spelt @sumx in the begin-block but @sum in the end-block, where since it is absent, @sum*2 evaluates to 2. See also the section on errors and transparency.

Since absent plus absent is absent (and likewise for other operators), accumulations such as @sum += $x work correctly on heterogenous data, as do within-record formulas if both operands are absent. If one operand is present, you may get behavior you don’t desire. To work around this — namely, to set an output field only for records which have all the inputs present — you can use a pattern-action block with is_present: POKI_RUN_COMMAND{{mlr cat data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr put 'is_present($loadsec) { $loadmillis = $loadsec * 1000 }' data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr put '$loadmillis = (is_present($loadsec) ? $loadsec : 0.0) * 1000' data/het.dkvp}}HERE

If you’re interested in a formal description of how empty and absent fields participate in arithmetic, here’s a table for plus (other arithmetic/boolean/bitwise operators are similar): POKI_RUN_COMMAND{{mlr --print-type-arithmetic-info}}HERE

String literals

You can use the following backslash escapes for strings such as between the double quotes in contexts such as mlr filter '$name =~ "..."', mlr put '$name = $othername . "..."', mlr put '$name = sub($name, "...", "..."), etc.:

  • \a: ASCII code 0x07 (alarm/bell)
  • \b: ASCII code 0x08 (backspace)
  • \f: ASCII code 0x0c (formfeed)
  • \n: ASCII code 0x0a (LF/linefeed/newline)
  • \r: ASCII code 0x0d (CR/carriage return)
  • \t: ASCII code 0x09 (tab)
  • \v: ASCII code 0x0b (vertical tab)
  • \\: backslash
  • \": double quote
  • \123: Octal 123, etc. for \000 up to \377
  • \x7f: Hexadecimal 7f, etc. for \x00 up to \xff

See also https://en.wikipedia.org/wiki/Escape_sequences_in_C.

These replacements apply only to strings you key in for the DSL expressions for filter and put: that is, if you type \t in a string literal for a filter/put expression, it will be turned into a tab character. If you want a backslash followed by a t, then please type \\t.

However, these replacements are not done automatically within your data stream. If you wish to make these replacements, you can do, for example, for a field named field, mlr put '$field = gsub($field, "\\t", "\t")'. If you need to make such a replacement for all fields in your data, you should probably simply use the system sed command.

Regular expressions

Miller lets you use regular expressions (of type POSIX.2) in the following contexts:

  • In mlr filter with =~ or !=~, e.g. mlr filter '$url =~ "http.*com"'
  • In mlr put with sub or gsub, e.g. mlr put '$url = sub($url, "http.*com", "")'
  • In mlr having-fields, e.g. mlr having-fields --any-matching '^sda[0-9]'
  • In mlr cut, e.g. mlr cut -r -f '^status$,^sda[0-9]'
  • In mlr rename, e.g. mlr rename -r '^(sda[0-9]).*$,dev/\1'
  • In mlr grep, e.g. mlr --csv grep 00188555487 myfiles*.csv

Points demonstrated by the above examples:

  • There are no implicit start-of-string or end-of-string anchors; please use ^ and/or $ explicitly.
  • Miller regexes are wrapped with double quotes rather than slashes.
  • The i after the ending double quote indicates a case-insensitive regex.
  • Capture groups are wrapped with (...) rather than \(...\); use \( and \) to match against parentheses.

For filter and put, if the regular expression is a string literal (the normal case), it is precompiled at process start and reused thereafter, which is efficient. If the regular expression is a more complex expression, including string concatenation using ., or a column name (in which case you can take regular expressions from input data!), then regexes are compiled on each record which works but is less efficient. As well, in this case there is no way to specify case-insensitive matching.

Example: POKI_RUN_COMMAND{{cat data/regex-in-data.dat}}HERE POKI_RUN_COMMAND{{mlr filter '$name =~ $regex' data/regex-in-data.dat}}HERE

Regex captures

Regex captures of the form \0 through \9 are supported as follows:

  • Captures have in-function context for sub and gsub. For example, the first \1,\2 pair belong to the first sub and the second \1,\2 pair belong to the second sub:

    mlr put '$b = sub($a, "(..)_(...)", "\2-\1"); $c = sub($a, "(..)_(.)(..)", ":\1:\2:\3")'
    
  • Captures endure for the entirety of a put for the =~ and !=~ operators. For example, here the \1,\2 are set by the =~ operator and are used by both subsequent assignment statements:

    mlr put '$a =~ "(..)_(....); $b = "left_\1"; $c = "right_\2"'
    
  • The captures are not retained across multiple puts. For example, here the \1,\2 won’t be expanded from the regex capture:

    mlr put '$a =~ "(..)_(....)' then {... something else ...} then put '$b = "left_\1"; $c = "right_\2"'
    
  • Captures are ignored in filter for the =~ and !=~ operators. For example, there is no mechanism provided to refer to the first (..) as \1 or to the second (....) as \2 in the following filter statement:

    mlr filter '$a =~ "(..)_(....)'
    
  • Up to nine matches are supported: \1 through \9, while \0 is the entire match string; \15 is treated as \1 followed by an unrelated 5.

Arithmetic

Input scanning

Numbers in Miller are double-precision float or 64-bit signed integers. Anything scannable as int, e.g 123 or 0xabcd, is treated as an integer; otherwise, input scannable as float (4.56 or 8e9) is treated as float; everything else is a string.

If you want all numbers to be treated as floats, then you may use float() in your filter/put expressions (e.g. replacing $c = $a * $b with $c = float($a) * float($b)) — or, more simply, use mlr filter -F and mlr put -F which forces all numeric input, whether from expression literals or field values, to float. Likewise mlr stats1 -F and mlr step -F force integerable accumulators (such as count) to be done in floating-point.

Conversion by math routines

For most math functions, integers are cast to float on input, and produce float output: e.g. exp(0) = 1.0 rather than 1. The following, however, produce integer output if their inputs are integers: + - * / // % abs ceil floor max min round roundm sgn. As well, stats1 -a min, stats1 -a max, stats1 -a sum, step -a delta, and step -a rsum produce integer output if their inputs are integers.

Conversion by arithmetic operators

The sum, difference, and product of integers is again integer, except for when that would overflow a 64-bit integer at which point Miller converts the result to float.

The short of it is that Miller does this transparently for you so you needn’t think about it.

Implementation details of this, for the interested: integer adds and subtracts overflow by at most one bit so it suffices to check sign-changes. Thus, Miller allows you to add and subtract arbitrary 64-bit signed integers, converting only to float precisely when the result is less than -263 or greater than 263-1. Multiplies, on the other hand, can overflow by a word size and a sign-change technique does not suffice to detect overflow. Instead Miller tests whether the floating-point product exceeds the representable integer range. Now, 64-bit integers have 64-bit precision while IEEE-doubles have only 52-bit mantissas — so, there are 53 bits including implicit leading one. The following experiment explicitly demonstrates the resolution at this range:

   64-bit integer     64-bit integer     Casted to double           Back to 64-bit
       in hex           in decimal                                    integer
0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800
0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800
0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00
0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00
0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00
0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000
0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000
0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000

That is, one cannot check an integer product to see if it is precisely greater than 263-1 or less than -263 using either integer arithmetic (it may have already overflowed) or using double-precision (due to granularity). Instead Miller checks for overflow in 64-bit integer multiplication by seeing whether the absolute value of the double-precision product exceeds the largest representable IEEE double less than 263, which we see from the listing above is 9223372036854774784. (An alternative would be to do all integer multiplies using handcrafted multi-word 128-bit arithmetic. This approach is not taken.)

Pythonic division

Division and remainder are pythonic:

  • Quotient of integers is floating-point: 7/2 is 3.5.
  • Integer division is done with //: 7//2 is 3. This rounds toward the negative.
  • Remainders are non-negative.

On-line help

Examples:

POKI_RUN_COMMAND{{mlr --help}}HERE POKI_RUN_COMMAND{{mlr sort --help}}HERE

miller-5.6.2/doc/content-for-release-docs.html000066400000000000000000000072461354153536500212700ustar00rootroot00000000000000POKI_PUT_TOC_HERE

For release notes per se — what changed from one release to the next — please see the following:

https://github.com/johnkerl/miller/tags

Note:

The following are full docsets as of the specified release:

miller-5.6.2/doc/content-for-why.html000066400000000000000000000270751354153536500175330ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Someone asked me the other day about design, tradeoffs, thought process, why I felt it necessary to build Miller, etc. Here are some answers.

Who is Miller for?

For background, I’m a software engineer, with a heavy devops bent and a non-trivial amount of data-engineering in my career. Initially I wrote Miller mainly for myself: I’m coder-friendly (being a coder); I’m Github-friendly; most of my data are well-structured or easily structurable (TSV-formatted SQL-query output, CSV files, log files, JSON data structures); I care about interoperability between all the various formats Miller supports (I’ve encountered them all); I do all my work on Linux or OSX.

But now there’s this neat little tool which seems to be useful for people in various disciplines. I don’t even know entirely who. I can click through Github starrers and read a bit about what they seem to do, but not everyone’s on Github (or stars things). I’ve gotten a lot of feature requests through Github — but only from people who are Github users. Not everyone’s a coder (it seems like a lot of Miller’s Github starrers are devops folks like myself, or data-science-ish people, or biology/genomics folks.) A lot of people care 100% about CSV. And so on.

So I wonder (please drop a note at https://github.com/johnkerl/miller/issues) does Miller do what you need? Do you use it for all sorts of things, or just one or two nice things? Are there things you wish it did but it doesn’t? Is it almost there, or just nowhere near what you want? Are there not enough features or way too many? Are the docs too complicated; do you have a hard time finding out how to do what you want? Should I think differently about what this tool even is in the first place? Should I think differently about who it’s for?

What was Miller created to do?

First: there are tools like xsv which handles CSV marvelously and jq which handles JSON marvelously, and so on — but I over the years of my career in the software industry I’ve found myself, and others, doing a lot of ad-hoc things which really were fundamentally the same except for format. So the number one thing about Miller is doing common things while supporting multiple formats: (a) ingest a list of records where a record is a list of key-value pairs (however represented in the input files); (b) transform that stream of records; (c) emit the transformed stream — either in the same format as input, or in a different format.

Second thing, a lot like the first: just as I didn’t want to build something only for a single file format, I didn’t want to build something only for one problem domain. In my work doing software engineering, devops, data engineering, etc. I saw a lot of commonalities and I wanted to solve as many problems simultaneously as possible.

Third: it had to be streaming. As time goes by and we (some of us, sometimes) have machines with tens or hundreds of GB of RAM, it’s maybe less important, but I’m unhappy with tools which ingest all data, then do stuff, then emit all data. One reason is to be able to handle files bigger than available RAM. Another reason is to be able to handle input which trickles in, e.g. you have some process emitting data now and then and you can pipe it to Miller and it will emit transformed records one at a time.

Fourth: it had to be fast. This precludes all sorts of very nice things written in Ruby, for example. I love Ruby as a very expressive language, and I have several very useful little utility scripts written in Ruby. But a few years ago I ported over some of my old tried-and-true C programs and the lines-of-code count was a lot lower — it was great! Until I ran them on multi-GB files and realized they took 60x as long to complete. So I couldn’t write Miller in Ruby, or in languages like it. I was going to have to do something in a low-level language in order to make it performant. I did simple experiments in several languages, and nothing was as fast as C, so I used C: see also here.

Fifth thing: I wanted Miller to be pipe-friendly and interoperate with other command-line tools. Since the basic paradigm is ingest records, transform records, emit records — where the input and output formats can be the same or different, and the transform can be complex, or just pass-through — this means you can use it to transform data, or re-format it, or both. So if you just want to do data-cleaning/prep/formatting and do all the "real" work in R, you can. If you just want a little glue script between other tools you can get that. And if you want to do non-trivial data-reduction in Miller you can.

Sixth thing: Must have comprehensive documentation and unit-test. Since Miller handles a lot of formats and solves a lot of problems, there’s a lot to test and a lot to keep working correctly as I add features or optimize. And I wanted it to be able to explain itself — not only through web docs like the one you’re reading but also through man mlr and mlr --help, mlr sort --help, etc.

Seventh thing: Must have a domain-specific language (DSL) but also must let you do common things without it. All those little verbs Miller has to help you avoid having to write for-loops are great. I use them for keystroke-saving: mlr stats1 -a mean,stddev,min,max -f quantity, for example, without you having to write for-loops or define accumulator variables. But you also have to be able to break out of that and write arbitrary code when you want to: mlr put '$distance = $rate * $time' or anything else you can think up. In Perl/AWK/etc. it’s all DSL. In xsv et al. it’s all verbs. In Miller I like having the combination.

Eighth thing: It’s an awful lot of fun to write. In my experience I didn’t find any tools which do multi-format, streaming, efficient, multi-purpose, with DSL and non-DSL, so I wrote one. But I don’t guarantee it’s unique in the world. It fills a niche in the world (people use it) but it also fills a niche in my life.

Tradeoffs

Miller is command-line-only by design. People who want a graphical user interface won’t find it here. This is in part (a) accommodating my personal preferences, and in part (b) guided by my experience/belief that the command line is very expressive. Steep learning curve, yes. I consider that price worth paying.

Another tradeoff: supporting lists of records — each with only one depth — keeps me supporting only what can be expressed in all of those formats. E.g. in JSON you can have lists of lists of lists which Miller just doesn’t handle. So Miller can’t (and won’t) handle arbitrary JSON because it only handles tabular data which can be expressed in a variety of formats.

A third tradeoff is doing build-from-scratch in a low-level language. It’d be quicker to write (but slower to run) if written in a high-level language. If Miller were written in Python, it would be implemented in significantly fewer lines of code than its current C implementation. The DSL would just be an eval of Python code. And it would run slower, but maybe not enough slower to be a problem for most folks. Later I found out about the rows tool — if you find Miller useful, you should check out rows as well.

A fourth tradeoff is in the DSL (more visibly so in 5.0.0 but already in pre-5.0.0): how much to make it dynamically typed — so you can just say y=x+1 with a minimum number of keystrokes — vs. having it do a good job of telling you when you’ve made a typo. This is a common paradigm across all languages. Some like Ruby you don’t declare anything and they’re quick to code little stuff in but programs of even a few thousand lines (which isn’t large in the software world) become insanely unmanageable. Then Java at the other extreme which is very typesafe but you have to type in a lot of punctuation, angle brackets, datatypes, repetition, etc. just to be able to get anything done. And some in the middle like Go which are typesafe but with type inference which aim to do the best of both. In the Miller (5.0.0) DSL you get y=x+1 by default but you can have things like int y = x+1 etc. so the typesafety is opt-in. See also here for more information on type-checking.

Related tools

Moving forward

I originally aimed Miller at people who already know what sed/awk/cut/sort/join are and wanted some options. But as time goes by I realize that tools like this can be useful to folks who don’t know what those things are; people who aren’t primarily coders; people who are scientists, or data scientists. These days some journalists do data analysis. So moving forward in terms of docs, I am working on having more cookbook, follow-by-example stuff in addition to the existing language-reference kinds of stuff. And continuing to seek out input from people who use Miller on where to go next.

miller-5.6.2/doc/content-for-whyc-details.html000066400000000000000000000166371354153536500213230ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Overview

This section contains details substantiating the discussion at POKI_PUT_LINK_FOR_PAGE(whyc.html)HERE.

I did simple experiments in several languages. In one experiment (cat tests) I just read lines and printed them back out — a line-oriented cat. In another (cut tests) I consumed input lines like x=1,y=2,z=3 one at a time, split them on commas and equals signs to populate hash maps, transformed them (e.g. remove the y field), and emitted them. Basically mlr cut -x -f y with DKVP format. I didn’t do anything fancy — just using each language’s getline, string-split, hashmap-put, etc. (For C, the hashmap logic was my own and has turned into Miller per se.) And nothing was as fast as C, so I used C. Here are the experiments I kept (I failed to keep the Lua code, for example). Note that I re-ran the timings in 2019 using code written in 2015, for purposes of creating this page.

Timings

POKI_INCLUDE_ESCAPED(../perf/timings.txt)HERE

Discussion

  • /bin/cat is quite a bit faster than my line-oriented C code. This shows that my simple experiments here don’t exhaust the possibilities of clever programming. Rather, they serve to compare and contrast the performance of straightforward coding in various languages.
  • I didn’t get any of the other languages to do line-oriented cat as fast as C. But Go was in the ballpark and was worth a further look.
  • The cut experiments separated it out. I iteratively commented out/in various steps of the cut steps and found (as noted in the source code below) big chunks of cutgo.go’s time in the simple map and write-to-stdout library-code operations. I failed to retain cutc.c as I originally implemented it in 2015 (it morphed gradually into Miller per se) but it was sufficiently faster than cutgo.go that I stuck with C for implementing Miller.
  • The full Miller executable running mlr cat or mlr cut is slower than these bare-bones C executables — I fully implemented Miller only in one language so there’s no apples-to-apples comparison with other languages.
  • While C was the clear winner in these very simple tests, it’s quite possible that had I committed to another language for full-featured Miller, it would have been faster in that language. That was a gamble I did not take.

Source code

C cat using fgets

POKI_INCLUDE_ESCAPED(../perf/catc.c)HERE

C cat using getdelim

POKI_INCLUDE_ESCAPED(../perf/catc0.c)HERE

C cat using mmap

POKI_INCLUDE_ESCAPED(../perf/catm.c)HERE

D cat

POKI_INCLUDE_ESCAPED(../perf/catd.d)HERE

Rust cat

POKI_INCLUDE_ESCAPED(../perf/catrust.rs)HERE

Go cat

POKI_INCLUDE_ESCAPED(../perf/catgo.go)HERE

Nim cat

POKI_INCLUDE_ESCAPED(../perf/catnim.nim)HERE

D cut

POKI_INCLUDE_ESCAPED(../perf/cutd.d)HERE

Go cut

POKI_INCLUDE_ESCAPED(../perf/cutgo.go)HERE

Nim cut

POKI_INCLUDE_ESCAPED(../perf/cutnim.nim)HERE

Makefile

POKI_INCLUDE_ESCAPED(../perf/Makefile.no-autoconfig)HERE

Compiler versions

$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ dmd --version
DMD64 D Compiler v2.088.0
Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright

$ rustc --version
rustc 1.36.0

$ go version
go version go1.10.4 linux/amd64

$ nim --version
Nim Compiler Version 0.17.2 (2018-02-05) [Linux: amd64]
Copyright (c) 2006-2018 by Andreas Rumpf

active boot switches: -d:release

Hardware

$ uname -a
Linux sprax 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 142
model name	: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping	: 10
microcode	: 0x96
cpu MHz		: 796.615
cache size	: 8192 KB
physical id	: 0
siblings	: 8
core id		: 0
cpu cores	: 4
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp
lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc
cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2
ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt
tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch
cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority ept vpid
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap
clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves ibpb ibrs stibp dtherm ida
arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs		: cpu_meltdown spectre_v1 spectre_v2
bogomips	: 3984.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

... (8 CPUs total)

miller-5.6.2/doc/content-for-whyc.html000066400000000000000000000220071354153536500176640ustar00rootroot00000000000000POKI_PUT_TOC_HERE

Why not C?

C lacks many of the features found in modern, high-level languages such as Java or Go: garbage collection, collections libraries, generics/near-generics, hash-map/linked-list literals built into the language (e.g. mymap={"a"=>1,"b"=>2} or mylist=[3,4,5]), autodoc (e.g. Javadoc), and so on. Yet, while memory management is indeed Miller’s trickiest aspect, its garbage-collection needs are well-delineated and so the absence of GC is no great loss. Miller’s performance relies on the principles of touching each byte as few times as possible, and copying bytes only when necessary. This results in a baton-passing, free-on-last-use memory-management pattern which works well enough. (See also miller/c/README.md.) Miller doesn’t require a complex collections library: mostly simple hash maps, hash sets, and linked lists which aren’t difficult to code. Moreover, Miller’s primary data structure, the lrec_t, is hand-tuned to Miller’s use case and would have required hand-coding in any case.

C vs. Go, D, Rust, etc.; C is fast

I love Go (https://golang.org): I think it’s one of the best things ever to happen to our craft, and I use it often. The D language (http://dolang.org) is an exciting and elegant successor to C++ (more about which below) — D has many of Go’s strengths, with a tighter stylistic similarity to C. And initial experiments with Rust are intriguing. Yet with none of them could I obtain the throughput I get in C.

Details are written up at POKI_PUT_LINK_FOR_PAGE(whyc-details.html)HERE.

One of Go’s most powerful features is the ease with which it allows quick-to-code, error-free concurrency. Yet Miller, like most high-volume text-processing tools, spends most of its time obtaining and parsing input strings and negligible time doing all subsequent processing. Thus the absence of in-process multiprocessing is only a slight penalty in this particular application domain — parallelism here is more easily achieved by running multiple single-threaded processes, each handling its own input files, either on a single host or split across multiple hosts.

C is ubiquitous

Every Unix-like system has a C compiler (or is an apt-get or yum install away from it). This, I hope, bodes well for uptake of Miller.

C is old-school

This alone is not enough reason to program in C, but since I find myself coding in C due to the other reasons on this page, it’s happy enough to use a throwback language for a throwback tool (see POKI_PUT_LINK_FOR_PAGE(etymology.html)HERE). That said, Miller is coded in GNU C99, it uses getopt-style command-line parsing, and for development work I make use of modern tools such as valgrind. K&R was a long, long time ago. (I’m writing plain C with // comments; enough said.)

C vs. C++

I have a strong personal distaste for C++: its syntax is an ugly layer over the simplicity of C; templates and STL are even more awkward and even less elegant. (Meanwhile I find Java, Go, and D to be both elegant and modern; I ruled them out not for aesthetics but for performance as described above.) Meanwhile all the positive features I would want from C++ are easily implementable in C as follows:

this pointers and attributes

The C++ compiler implictly inserts this pointers into method calls: for example
  class MyClass {
    private:
      char* a;
    public:
    MyClass(char* a) {
      this->a = strdup(a);
    }
    ~MyClass() {
      free(a);
    }
    int myMethod(char* b) {
      return strlen(a) + strlen(b);
    }
  };
  ...
  MyClass* myObj = new MyClass("hello");
  int x = myObj->myMethod("world");
results in something like
  void MyClass$constructorcharptr(MyClass* this, char* a) {
    this->a = strdup(a);
  }
  void MyClass$destructor(MyClass* this) {
    free(this->a);
  }
  int MyClass$myMethod(MyClass* this, char* b) {
    return strlen(this->a) + strlen(b);
  }
  MyClass* myObj = MyClass$constructorcharptr("hello");
  int x = MyClass$myMethod(myObj, "world");
It’s easy enough to imitate this: simply use the coding convention of prepending the class name to all methods, and placing this-pointers as the first arguments to methods. Miller uses precisely this approach. For example:
typedef struct _lrec_t {
  ...
} lrec_t;
// Constructors
lrec_t* lrec_csv_alloc(...) {
  lrec_t* prec = malloc(sizeof(lrec_t);
  ...
  prec->attribute = ...;
  return prec;
}
lrec_t* lrec_dkvp_alloc(...) {
  ...
}
// Destructor
void lrec_free(lrec_t* prec) {
  ...
  free(prec->attribute);
  ...
  free(prec);
}
// Methods
int lrec_foo(lrec_t* prec, ...) {
  return prec->...;
}
void lrec_bar(lrec_t* prec, ...) {
  prec->...;
}

This implements the object-oriented principle of encapsulation.

Interfaces and virtual-function pointers

Coding conventions again do most of the work, here accompanied by typdeffed function pointers. For example, here is Miller’s record-reader interface:
#include <stdio.h>
#include <containers/lrec.h>
typedef lrec_t* reader_func_t(FILE* fp, void* pvstate, context_t* pctx);
typedef void    reset_func_t(void* pvstate);
typedef void    reader_free_func_t(void* pvstate);

typedef struct _reader_t {
    void*               pvstate;
    reader_func_t*      preader_func; // Interface method
    reset_func_t*       preset_func;  // Interface method
    reader_free_func_t* pfree_func;   // Interface method
} reader_t;

A class implementing this interface might look like

// Attributes are private to this file
typedef struct _reader_csv_state_t {
  ...
} reader_csv_state_t;

// Implementation of interface methods. Marked static (file-scope) to not
// pollute the global namespace; exposed only via function pointers.
static lrec_t* reader_csv_func(FILE* input_stream, void* pvstate, context_t* pctx) {
  reader_csv_state_t* pstate = pvstate;
  ...  use various pstate->attributes ...
}
static void reset_csv_func(void* pvstate) {
  reader_csv_state_t* pstate = pvstate;
  ...  use various pstate->attributes ...
}
static void reader_csv_free(void* pvstate) {
  ...  use various pstate->attributes ...
}

// Constructor
reader_t* reader_csv_alloc(...) {
  reader_t* preader = mlr_malloc_or_die(sizeof(reader_t));

  reader_csv_state_t* pstate = mlr_malloc_or_die(sizeof(reader_csv_state_t));
  ... set various pstate->attributes ...

  preader->pvstate      = (void*)pstate;
  preader->preader_func = &reader_csv_func;
  preader->preset_func  = &reset_csv_func;
  preader->pfree_func   = &reader_csv_free;

  return preader;
}

// Factory method
  ...
  reader_t* preader = reader_csv_alloc(...);
  ...
// Method call
  ...
  lrec_t* pinrec = preader->preader_func(input_stream, preader->pvstate, pctx);
  ...

This implements the object-oriented principles of polymorphism and runtime binding.

More details are at https://github.com/johnkerl/miller/tree/master/c/containers.

miller-5.6.2/doc/cookbook.html000066400000000000000000001442521354153536500162730ustar00rootroot00000000000000 Cookbook part 1

Headerless CSV on input or output

Sometimes we get CSV files which lack a header. For example:

$ cat data/headerless.csv
John,23,present
Fred,34,present
Alice,56,missing
Carol,45,present

You can use Miller to add a header. The --implicit-csv-header applies positionally indexed labels:

$ mlr --csv --implicit-csv-header cat data/headerless.csv
1,2,3
John,23,present
Fred,34,present
Alice,56,missing
Carol,45,present

Following that, you can rename the positionally indexed labels to names with meaning for your context. For example:

$ mlr --csv --implicit-csv-header label name,age,status data/headerless.csv
name,age,status
John,23,present
Fred,34,present
Alice,56,missing
Carol,45,present

Likewise, if you need to produce CSV which is lacking its header, you can pipe Miller’s output to the system command sed 1d, or you can use Miller’s --headerless-csv-output option:

$ head -5 data/colored-shapes.dkvp | mlr --ocsv cat
color,shape,flag,i,u,v,w,x
yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565
red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207
red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998
red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269
purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863

$ head -5 data/colored-shapes.dkvp | mlr --ocsv --headerless-csv-output cat
yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565
red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207
red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998
red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269
purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863

Lastly, often we say “CSV” or “TSV” when we have positionally indexed data in columns which are separated by commas or tabs, respectively. In this case it’s perhaps simpler to just use NIDX format which was designed for this purpose. (See also File formats.) For example:

$ mlr --inidx --ifs comma --oxtab cut -f 1,3 data/headerless.csv
1 John
3 present

1 Fred
3 present

1 Alice
3 missing

1 Carol
3 present

Doing multiple joins

Suppose we have the following data:

$ cat multi-join/input.csv
id,task
10,chop
20,puree
20,wash
30,fold
10,bake
20,mix
10,knead
30,clean

And we want to augment the id column with lookups from the following data files:

$ cat multi-join/name-lookup.csv
id,name
30,Alice
10,Bob
20,Carol

$ cat multi-join/status-lookup.csv
id,status
30,occupied
10,idle
20,idle

We can run the input file through multiple join commands in a then-chain:

$ mlr --icsv --opprint join -f multi-join/name-lookup.csv -j id then join -f multi-join/status-lookup.csv -j id multi-join/input.csv
id status   name  task
10 idle     Bob   chop
20 idle     Carol puree
20 idle     Carol wash
30 occupied Alice fold
10 idle     Bob   bake
20 idle     Carol mix
10 idle     Bob   knead
30 occupied Alice clean

Bulk rename of fields

Suppose you want to replace spaces with underscores in your column names:

$ cat data/spaces.csv
a b c,def,g h i
123,4567,890
2468,1357,3579
9987,3312,4543

The simplest way is to use mlr rename with -g (for global replace, not just first occurrence of space within each field) and -r for pattern-matching (rather than explicit single-column renames):

$ mlr --csv rename -g -r ' ,_'  data/spaces.csv
a_b_c,def,g_h_i
123,4567,890
2468,1357,3579
9987,3312,4543

$ mlr --csv --opprint rename -g -r ' ,_'  data/spaces.csv
a_b_c def  g_h_i
123   4567 890
2468  1357 3579
9987  3312 4543

You can also do this with a for-loop:

$ cat data/bulk-rename-for-loop.mlr
map newrec = {};
for (oldk, v in $*) {
    newrec[gsub(oldk, " ", "_")] = v;
}
$* = newrec

$ mlr --icsv --opprint put -f data/bulk-rename-for-loop.mlr data/spaces.csv
a_b_c def  g_h_i
123   4567 890
2468  1357 3579
9987  3312 4543

Search-and-replace over all fields

How to do $name=gsub($name, "old", "new") for all fields?

$ cat data/sar.csv
a,b,c
the quick,brown fox,jumped
over,the,lazy dogs

$ cat data/sar.mlr
  for (k in $*) {
    $[k] = gsub($[k], "e", "X");
  }

$ mlr --csv put -f data/sar.mlr data/sar.csv
a,b,c
thX quick,brown fox,jumpXd
ovXr,thX,lazy dogs

Full field renames and reassigns

Using Miller 5.0.0’s map literals and assigning to $*, you can fully generalize mlr rename, mlr reorder, etc.:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '
  begin {
    @i_cumu = 0;
  }

  @i_cumu += $i;
  $* = {
    "z": $x + y,
    "KEYFIELD": $a,
    "i": @i_cumu,
    "b": $b,
    "y": $x,
    "x": $y,
  };
' data/small
z=0.346790,KEYFIELD=pan,i=1,b=pan,y=0.346790,x=0.726803
z=0.758680,KEYFIELD=eks,i=3,b=pan,y=0.758680,x=0.522151
z=0.204603,KEYFIELD=wye,i=6,b=wye,y=0.204603,x=0.338319
z=0.381399,KEYFIELD=eks,i=10,b=wye,y=0.381399,x=0.134189
z=0.573289,KEYFIELD=wye,i=15,b=pan,y=0.573289,x=0.863624

Numbering and renumbering records

The awk-like built-in variable NR is incremented for each input record:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '$nr = NR' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nr=1
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nr=2
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nr=4
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5

However, this is the record number within the original input stream — not after any filtering you may have done:

$ mlr filter '$a == "wye"' then put '$nr = NR' data/small
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5

There are two good options here. One is to use the cat verb with -n:

$ mlr filter '$a == "wye"' then cat -n data/small
n=1,a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

The other is to keep your own counter within the put DSL:

$ mlr filter '$a == "wye"' then put 'begin {@n = 1} $n = @n; @n += 1' data/small
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,n=1
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,n=2

The difference is a matter of taste (although mlr cat -n puts the counter first).

Options for dealing with duplicate rows

If your data has records appearing multiple times, you can use mlr uniq to show and/or count the unique records.

If you want to look at partial uniqueness — for example, show only the first record for each unique combination of the account_id and account_status fields — you might use mlr head -n 1 -g account_id,account_status. Please also see mlr head.

Data-cleaning examples

Here are some ways to use the type-checking options as described in the DSL reference. Suppose you have the following data file, with inconsistent typing for boolean. (Also imagine that, for the sake of discussion, we have a million-line file rather than a four-line file, so we can’t see it all at once and some automation is called for.)

$ cat data/het-bool.csv
name,reachable
barney,false
betty,true
fred,true
wilma,1

One option is to coerce everything to boolean, or integer:

$ mlr --icsv --opprint put '$reachable = boolean($reachable)' data/het-bool.csv
name   reachable
barney false
betty  true
fred   true
wilma  true

$ mlr --icsv --opprint put '$reachable = int(boolean($reachable))' data/het-bool.csv
name   reachable
barney 0
betty  1
fred   1
wilma  1

A second option is to flag badly formatted data within the output stream:

$ mlr --icsv --opprint put '$format_ok = is_string($reachable)' data/het-bool.csv
name   reachable format_ok
barney false     true
betty  true      true
fred   true      true
wilma  1         false

Or perhaps to flag badly formatted data outside the output stream:

$ mlr --icsv --opprint put 'if (!is_string($reachable)) {eprint "Malformed at NR=".NR} ' data/het-bool.csv
Malformed at NR=4
name   reachable
barney false
betty  true
fred   true
wilma  1

A third way is to abort the process on first instance of bad data:

$ mlr --csv put '$reachable = asserting_string($reachable)' data/het-bool.csv
mlr: string type-assertion failed at NR=4 FNR=4 FILENAME=data/het-bool.csv
name,reachable
barney,false
betty,true
fred,true

Splitting nested fields

Suppose you have a TSV file like this:

a	b
x	z
s	u:v:w

The simplest option is to use mlr nest:

$ mlr --tsv nest --explode --values --across-records -f b --nested-fs : data/nested.tsv
a	b
x	z
s	u
s	v
s	w

$ mlr --tsv nest --explode --values --across-fields  -f b --nested-fs : data/nested.tsv
a	b_1
x	z

a	b_1	b_2	b_3
s	u	v	w

While mlr nest is simplest, let’s also take a look at a few ways to do this using the put DSL.

One option to split out the colon-delimited values in the b column is to use splitnv to create an integer-indexed map and loop over it, adding new fields to the current record:

$ mlr --from data/nested.tsv --itsv --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["p".k]=v}'
a  x
b  z
p1 z

a  s
b  u:v:w
p1 u
p2 v
p3 w

while another is to loop over the same map from splitnv and use it (with put -q to suppress printing the original record) to produce multiple records:

$ mlr --from data/nested.tsv --itsv --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'
a x
b z

a s
b u

a s
b v

a s
b w

$ mlr --from data/nested.tsv --tsv put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'
a	b
x	z
s	u
s	v
s	w

Showing differences between successive queries

Suppose you have a database query which you run at one point in time, producing the output on the left, then again later producing the output on the right:

$ cat data/previous_counters.csv
color,count
red,3472
blue,6838
orange,694
purple,12

$ cat data/current_counters.csv
color,count
red,3467
orange,670
yellow,27
blue,6944

And, suppose you want to compute the differences in the counters between adjacent keys. Since the color names aren’t all in the same order, nor are they all present on both sides, we can’t just paste the two files side-by-side and do some column-four-minus-column-two arithmetic.

First, rename counter columns to make them distinct:

$ mlr --csv rename count,previous_count data/previous_counters.csv > data/prevtemp.csv

$ cat data/prevtemp.csv
color,previous_count
red,3472
blue,6838
orange,694
purple,12

$ mlr --csv rename count,current_count data/current_counters.csv > data/currtemp.csv

$ cat data/currtemp.csv
color,current_count
red,3467
orange,670
yellow,27
blue,6944

Then, join on the key field(s), and use unsparsify to zero-fill counters absent on one side but present on the other. Use --ul and --ur to emit unpaired records (namely, purple on the left and yellow on the right):

$ mlr --icsv --opprint \
  join -j color --ul --ur -f data/prevtemp.csv \
  then unsparsify --fill-with 0 \
  then put '$count_delta = $current_count - $previous_count' \
  data/currtemp.csv
color  previous_count current_count count_delta
red    3472           3467          -5
orange 694            670           -24
yellow 0              27            27
blue   6838           6944          106
purple 12             0             -12

Finding missing dates

Suppose you have some date-stamped data which may (or may not) be missing entries for one or more dates:

$ head -n 10 data/miss-date.csv
date,qoh
2012-03-05,10055
2012-03-06,10486
2012-03-07,10430
2012-03-08,10674
2012-03-09,10880
2012-03-10,10718
2012-03-11,10795
2012-03-12,11043
2012-03-13,11177

$ wc -l data/miss-date.csv
1372 data/miss-date.csv

Since there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using strptime, then compute adjacent differences (the cat -n simply inserts record-counters):

$ mlr --from data/miss-date.csv --icsv \
  cat -n \
  then put '$datestamp = strptime($date, "%Y-%m-%d")' \
  then step -a delta -f datestamp \
| head
n=1,date=2012-03-05,qoh=10055,datestamp=1330905600.000000,datestamp_delta=0
n=2,date=2012-03-06,qoh=10486,datestamp=1330992000.000000,datestamp_delta=86400.000000
n=3,date=2012-03-07,qoh=10430,datestamp=1331078400.000000,datestamp_delta=86400.000000
n=4,date=2012-03-08,qoh=10674,datestamp=1331164800.000000,datestamp_delta=86400.000000
n=5,date=2012-03-09,qoh=10880,datestamp=1331251200.000000,datestamp_delta=86400.000000
n=6,date=2012-03-10,qoh=10718,datestamp=1331337600.000000,datestamp_delta=86400.000000
n=7,date=2012-03-11,qoh=10795,datestamp=1331424000.000000,datestamp_delta=86400.000000
n=8,date=2012-03-12,qoh=11043,datestamp=1331510400.000000,datestamp_delta=86400.000000
n=9,date=2012-03-13,qoh=11177,datestamp=1331596800.000000,datestamp_delta=86400.000000
n=10,date=2012-03-14,qoh=11498,datestamp=1331683200.000000,datestamp_delta=86400.000000

Then, filter for adjacent difference not being 86400 (the number of seconds in a day):

$ mlr --from data/miss-date.csv --icsv \
  cat -n \
  then put '$datestamp = strptime($date, "%Y-%m-%d")' \
  then step -a delta -f datestamp \
  then filter '$datestamp_delta != 86400 && $n != 1'
n=774,date=2014-04-19,qoh=130140,datestamp=1397865600.000000,datestamp_delta=259200.000000
n=1119,date=2015-03-31,qoh=181625,datestamp=1427760000.000000,datestamp_delta=172800.000000

Given this, it’s now easy to see where the gaps are:

$ mlr cat -n then filter '$n >= 770 && $n <= 780' data/miss-date.csv
n=770,1=2014-04-12,2=129435
n=771,1=2014-04-13,2=129868
n=772,1=2014-04-14,2=129797
n=773,1=2014-04-15,2=129919
n=774,1=2014-04-16,2=130181
n=775,1=2014-04-19,2=130140
n=776,1=2014-04-20,2=130271
n=777,1=2014-04-21,2=130368
n=778,1=2014-04-22,2=130368
n=779,1=2014-04-23,2=130849
n=780,1=2014-04-24,2=131026

$ mlr cat -n then filter '$n >= 1115 && $n <= 1125' data/miss-date.csv
n=1115,1=2015-03-25,2=181006
n=1116,1=2015-03-26,2=180995
n=1117,1=2015-03-27,2=181043
n=1118,1=2015-03-28,2=181112
n=1119,1=2015-03-29,2=181306
n=1120,1=2015-03-31,2=181625
n=1121,1=2015-04-01,2=181494
n=1122,1=2015-04-02,2=181718
n=1123,1=2015-04-03,2=181835
n=1124,1=2015-04-04,2=182104
n=1125,1=2015-04-05,2=182528

Two-pass algorithms

Miller is a streaming record processor; commands are performed once per record. This makes Miller particularly suitable for single-pass algorithms, allowing many of its verbs to process files that are (much) larger than the amount of RAM present in your system. (Of course, Miller verbs such as sort, tac, etc. all must ingest and retain all input records before emitting any output records.) You can also use out-of-stream variables to perform multi-pass computations, at the price of retaining all input records in memory.

Two-pass algorithms: computation of percentages

For example, mapping numeric values down a column to the percentage between their min and max values is two-pass: on the first pass you find the min and max values, then on the second, map each record’s value to a percentage.

$ mlr --from data/small --opprint put -q '
  # These are executed once per record, which is the first pass.
  # The key is to use NR to index an out-of-stream variable to
  # retain all the x-field values.
  @x_min = min($x, @x_min);
  @x_max = max($x, @x_max);
  @x[NR] = $x;

  # The second pass is in a for-loop in an end-block.
  end {
    for (nr, x in @x) {
      @x_pct[nr] = 100 * (x - @x_min) / (@x_max - @x_min);
    }
    emit (@x, @x_pct), "NR"
  }
'
NR x        x_pct
1  0.346790 25.661943
2  0.758680 100.000000
3  0.204603 0.000000
4  0.381399 31.908236
5  0.573289 66.540542

Two-pass algorithms: line-number ratios

Similarly, finding the total record count requires first reading through all the data:

$ mlr --opprint --from data/small put -q '
  @records[NR] = $*;
  end {
    for((I,k),v in @records) {
      @records[I]["I"] = I;
      @records[I]["N"] = NR;
      @records[I]["PCT"] = 100*I/NR
    }
    emit @records,"I"
  }
' then reorder -f I,N,PCT
I N PCT a   b   i x                   y
1 5 20  pan pan 1 0.3467901443380824  0.7268028627434533
2 5 40  eks pan 2 0.7586799647899636  0.5221511083334797
3 5 60  wye wye 3 0.20460330576630303 0.33831852551664776
4 5 80  eks wye 4 0.38139939387114097 0.13418874328430463
5 5 100 wye pan 5 0.5732889198020006  0.8636244699032729

Two-pass algorithms: records having max value

The idea is to retain records having the largest value of n in the following data:

$ mlr --itsv --opprint cat data/maxrows.tsv
a      b      n score
purple red    5 0.743231
blue   purple 2 0.093710
red    purple 2 0.802103
purple red    5 0.389055
red    purple 2 0.880457
orange red    2 0.540349
purple purple 1 0.634451
orange purple 5 0.257223
orange purple 5 0.693499
red    red    4 0.981355
blue   purple 5 0.157052
purple purple 1 0.441784
red    purple 1 0.124912
orange blue   1 0.921944
blue   purple 4 0.490909
purple red    5 0.454779
green  purple 4 0.198278
orange blue   5 0.705700
red    red    3 0.940705
purple red    5 0.072936
orange blue   3 0.389463
orange purple 2 0.664985
blue   purple 1 0.371813
red    purple 4 0.984571
green  purple 5 0.203577
green  purple 3 0.900873
purple purple 0 0.965677
blue   purple 2 0.208785
purple purple 1 0.455077
red    purple 4 0.477187
blue   red    4 0.007487

Of course, the largest value of n isn’t known until after all data have been read. Using an out-of-stream variable we can retain all records as they are read, then filter them at the end:

$ cat data/maxrows.mlr
# Retain all records
@records[NR] = $*;
# Track max value of n
@maxn = max(@maxn, $n);

# After all records have been read, loop through retained records
# and print those with the max n value.
end {
  for (int nr in @records) {
    map record = @records[nr];
    if (record["n"] == @maxn) {
      emit record;
    }
  }
}

$ mlr --itsv --opprint put -q -f data/maxrows.mlr data/maxrows.tsv
a      b      n score
purple red    5 0.743231
purple red    5 0.389055
orange purple 5 0.257223
orange purple 5 0.693499
blue   purple 5 0.157052
purple red    5 0.454779
orange blue   5 0.705700
purple red    5 0.072936
green  purple 5 0.203577

Rectangularizing data

Suppose you have a method (in whatever language) which is printing things of the form

outer=1
outer=2
outer=3

and then calls another method which prints things of the form

middle=10
middle=11
middle=12
middle=20
middle=21
middle=30
middle=31

and then, perhaps, that second method calls a third method which prints things of the form

inner1=100,inner2=101
inner1=120,inner2=121
inner1=200,inner2=201
inner1=210,inner2=211
inner1=300,inner2=301
inner1=312
inner1=313,inner2=314

with the result that your program’s output is

outer=1
middle=10
inner1=100,inner2=101
middle=11
middle=12
inner1=120,inner2=121
outer=2
middle=20
inner1=200,inner2=201
middle=21
inner1=210,inner2=211
outer=3
middle=30
inner1=300,inner2=301
middle=31
inner1=312
inner1=313,inner2=314

The idea here is that middles starting with a 1 belong to the outer value of 1, and so on. (For example, the outer values might be account IDs, the middle values might be invoice IDs, and the inner values might be invoice line-items.) If you want all the middle and inner lines to have the context of which outers they belong to, you can modify your software to pass all those through your methods. Alternatively, don’t refactor your code just to handle some ad-hoc log-data formatting — instead, use the following to rectangularize the data. The idea is to use an out-of-stream variable to accumulate fields across records. Clear that variable when you see an outer ID; accumulate fields; emit output when you see the inner IDs.

$ mlr --from data/rect.txt put -q '
  is_present($outer) {
    unset @r
  }
  for (k, v in $*) {
    @r[k] = v
  }
  is_present($inner1) {
    emit @r
  }'
outer=1,middle=10,inner1=100,inner2=101
outer=1,middle=12,inner1=120,inner2=121
outer=2,middle=20,inner1=200,inner2=201
outer=2,middle=21,inner1=210,inner2=211
outer=3,middle=30,inner1=300,inner2=301
outer=3,middle=31,inner1=312,inner2=301
outer=3,middle=31,inner1=313,inner2=314

Regularizing ragged CSV

Miller handles compliant CSV: in particular, it’s an error if the number of data fields in a given data line don’t match the number of header lines. But in the event that you have a CSV file in which some lines have less than the full number of fields, you can use Miller to pad them out. The trick is to use NIDX format, for which each line stands on its own without respect to a header line.

$ cat data/ragged.csv
a,b,c
1,2,3
4,5
6,7,8,9

$ mlr --from data/ragged.csv --fs comma --nidx put '
  @maxnf = max(@maxnf, NF);
  @nf = NF;
  while(@nf < @maxnf) {
    @nf += 1;
    $[@nf] = ""
  }
'
a,b,c
1,2,3
4,5,
6,7,8,9

or, more simply,

$ mlr --from data/ragged.csv --fs comma --nidx put '
  @maxnf = max(@maxnf, NF);
  while(NF < @maxnf) {
    $[NF+1] = "";
  }
'
a,b,c
1,2,3
4,5,
6,7,8,9

Feature-counting

Suppose you have some heterogeneous data like this:

{ "qoh": 29874, "rate": 1.68, "latency": 0.02 }
{ "name": "alice", "uid": 572 }
{ "qoh": 1227, "rate": 1.01, "latency": 0.07 }
{ "qoh": 13458, "rate": 1.72, "latency": 0.04 }
{ "qoh": 56782, "rate": 1.64 }
{ "qoh": 23512, "rate": 1.71, "latency": 0.03 }
{ "qoh": 9876, "rate": 1.89, "latency": 0.08 }
{ "name": "bill", "uid": 684 }
{ "name": "chuck", "uid2": 908 }
{ "name": "dottie", "uid": 440 }
{ "qoh": 0, "rate": 0.40, "latency": 0.01 }
{ "qoh": 5438, "rate": 1.56, "latency": 0.17 }

A reasonable question to ask is, how many occurrences of each field are there? And, what percentage of total row count has each of them? Since the denominator of the percentage is not known until the end, this is a two-pass algorithm:

for (key in $*) {
  @key_counts[key] += 1;
}
@record_count += 1;

end {
  for (key in @key_counts) {
      @key_fraction[key] = @key_counts[key] / @record_count
  }
  emit @record_count;
  emit @key_counts, "key";
  emit @key_fraction,"key"
}

Then

$ mlr --json put -q -f data/feature-count.mlr data/features.json
{ "record_count": 12 }
{ "key": "qoh", "key_counts": 8 }
{ "key": "rate", "key_counts": 8 }
{ "key": "latency", "key_counts": 7 }
{ "key": "name", "key_counts": 4 }
{ "key": "uid", "key_counts": 3 }
{ "key": "uid2", "key_counts": 1 }
{ "key": "qoh", "key_fraction": 0.666667 }
{ "key": "rate", "key_fraction": 0.666667 }
{ "key": "latency", "key_fraction": 0.583333 }
{ "key": "name", "key_fraction": 0.333333 }
{ "key": "uid", "key_fraction": 0.250000 }
{ "key": "uid2", "key_fraction": 0.083333 }

$ mlr --ijson --opprint put -q -f data/feature-count.mlr data/features.json
record_count
12

key     key_counts
qoh     8
rate    8
latency 7
name    4
uid     3
uid2    1

key     key_fraction
qoh     0.666667
rate    0.666667
latency 0.583333
name    0.333333
uid     0.250000
uid2    0.083333

Unsparsing

The previous section discussed how to fill out missing data fields within CSV with full header line — so the list of all field names is present within the header line. Next, let’s look at a related problem: we have data where each record has various key names but we want to produce rectangular output having the union of all key names.

For example, suppose you have JSON input like this:

$ cat data/sparse.json
{"a":1,"b":2,"v":3}
{"u":1,"b":2}
{"a":1,"v":2,"x":3}
{"v":1,"w":2}

There are field names a, b, v, u, x, w in the data — but not all in every record. Since we don’t know the names of all the keys until we’ve read them all, this needs to be a two-pass algorithm. On the first pass, remember all the unique key names and all the records; on the second pass, loop through the records filling in absent values, then producing output. Use put -q since we don’t want to produce per-record output, only emitting output in the end block:

$ cat data/unsparsify.mlr
# First pass:
# Remember all unique key names:
for (k in $*) {
  @all_keys[k] = 1;
}
# Remember all input records:
@records[NR] = $*;

# Second pass:
end {
  for (nr in @records) {
    # Get the sparsely keyed input record:
    irecord = @records[nr];
    # Fill in missing keys with empty string:
    map orecord = {};
    for (k in @all_keys) {
      if (haskey(irecord, k)) {
        orecord[k] = irecord[k];
      } else {
        orecord[k] = "";
      }
    }
    # Produce the output:
    emit orecord;
  }
}

$ mlr --json put -q -f data/unsparsify.mlr data/sparse.json
{ "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" }
{ "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" }
{ "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" }
{ "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 }

$ mlr --ijson --ocsv put -q -f data/unsparsify.mlr data/sparse.json
a,b,v,u,x,w
1,2,3,,,
,2,,1,,
1,,2,,3,
,,1,,,2

$ mlr --ijson --opprint put -q -f data/unsparsify.mlr data/sparse.json
a b v u x w
1 2 3 - - -
- 2 - 1 - -
1 - 2 - 3 -
- - 1 - - 2

There is a keystroke-saving verb for this: mlr unsparsify.

Parsing log-file output

This, of course, depends highly on what’s in your log files. But, as an example, suppose you have log-file lines such as

2015-10-08 08:29:09,445 INFO com.company.path.to.ClassName @ [sometext] various/sorts/of data {& punctuation} hits=1 status=0 time=2.378

I prefer to pre-filter with grep and/or sed to extract the structured text, then hand that to Miller. Example:

grep 'various sorts' *.log | sed 's/.*} //' | mlr --fs space --repifs --oxtab stats1 -a min,p10,p50,p90,max -f time -g status

Memoization with out-of-stream variables

The recursive function for the Fibonacci sequence is famous for its computational complexity. Namely, using f(0)=1, f(1)=1, f(n)=f(n-1)+f(n-2) for n≥2, the evaluation tree branches left as well as right at each non-trivial level, resulting in millions or more paths to the root 0/1 nodes for larger n. This program

mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put '
  func f(n) {
      @fcount += 1;              # count number of calls to the function
      if (n < 2) {
          return 1
      } else {
          return f(n-1) + f(n-2) # recurse
      }
  }

  @fcount = 0;
  $o = f($i);
  $fcount = @fcount;

' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds

produces output like this:

i  o      fcount  seconds_delta
1  1      1       0
2  2      3       0.000039101
3  3      5       0.000015974
4  5      9       0.000019073
5  8      15      0.000026941
6  13     25      0.000036955
7  21     41      0.000056028
8  34     67      0.000086069
9  55     109     0.000134945
10 89     177     0.000217915
11 144    287     0.000355959
12 233    465     0.000506163
13 377    753     0.000811815
14 610    1219    0.001297235
15 987    1973    0.001960993
16 1597   3193    0.003417969
17 2584   5167    0.006215811
18 4181   8361    0.008294106
19 6765   13529   0.012095928
20 10946  21891   0.019592047
21 17711  35421   0.031193972
22 28657  57313   0.057254076
23 46368  92735   0.080307961
24 75025  150049  0.129482031
25 121393 242785  0.213325977
26 196418 392835  0.334423065
27 317811 635621  0.605969906
28 514229 1028457 0.971235037

Note that the time it takes to evaluate the function is blowing up exponentially as the input argument increases. Using @-variables, which persist across records, we can cache and reuse the results of previous computations:

mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put '
  func f(n) {
    @fcount += 1;                 # count number of calls to the function
    if (is_present(@fcache[n])) { # cache hit
      return @fcache[n]
    } else {                      # cache miss
      num rv = 1;
      if (n >= 2) {
        rv = f(n-1) + f(n-2)      # recurse
      }
      @fcache[n] = rv;
      return rv
    }
  }
  @fcount = 0;
  $o = f($i);
  $fcount = @fcount;
' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds

with output like this:

i  o      fcount seconds_delta
1  1      1      0
2  2      3      0.000053883
3  3      3      0.000035048
4  5      3      0.000045061
5  8      3      0.000014067
6  13     3      0.000028849
7  21     3      0.000028133
8  34     3      0.000027895
9  55     3      0.000014067
10 89     3      0.000015020
11 144    3      0.000012875
12 233    3      0.000033140
13 377    3      0.000014067
14 610    3      0.000012875
15 987    3      0.000029087
16 1597   3      0.000013828
17 2584   3      0.000013113
18 4181   3      0.000012875
19 6765   3      0.000013113
20 10946  3      0.000012875
21 17711  3      0.000013113
22 28657  3      0.000013113
23 46368  3      0.000015974
24 75025  3      0.000012875
25 121393 3      0.000013113
26 196418 3      0.000012875
27 317811 3      0.000013113
28 514229 3      0.000012875
miller-5.6.2/doc/cookbook2.html000066400000000000000000001021051354153536500163440ustar00rootroot00000000000000 Cookbook part 2

Randomly selecting words from a list

Given this word list, first take a look to see what the first few lines look like:

$ head data/english-words.txt 
a
aa
aal
aalii
aam
aardvark
aardwolf
aba
abac
abaca

Then the following will randomly sample ten words with four to eight characters in them:

$ mlr --from data/english-words.txt --nidx filter -S 'n=strlen($1);4<=n&&n<=8' then sample -k 10
thionine
birchman
mildewy
avigate
addedly
abaze
askant
aiming
insulant
coinmate

Randomly generating jabberwocky words

These are simple n-grams as described here. Some common functions are here. Then here are scripts for 1-grams, 2-grams, 3-grams, 4-grams, and 5-grams.

The idea is that words from the input file are consumed, then taken apart and pasted back together in ways which imitate the letter-to-letter transitions found in the word list — giving us automatically generated words in the same vein as bromance and spork:

$ mlr --nidx --from ./ngrams/gsl-2000.txt put -q -f ./ngrams/ngfuncs.mlr -f ./ngrams/ng5.mlr
beard
plastinguish
politicially
noise
loan
country
controductionary
suppery
lose
lessors
dollar
judge
rottendence
lessenger
diffendant
suggestional

Program timing

This admittedly artificial example demonstrates using Miller time and stats functions to introspectively acquire some information about Miller’s own runtime. The delta function computes the difference between successive timestamps.

$ ruby -e '10000.times{|i|puts "i=#{i+1}"}' > lines.txt

$ head -n 5 lines.txt
i=1
i=2
i=3
i=4
i=5

mlr --ofmt '%.9le' --opprint put '$t=systime()' then step -a delta -f t lines.txt | head -n 7
i     t                 t_delta
1     1430603027.018016 1.430603027e+09
2     1430603027.018043 2.694129944e-05
3     1430603027.018048 5.006790161e-06
4     1430603027.018052 4.053115845e-06
5     1430603027.018055 2.861022949e-06
6     1430603027.018058 3.099441528e-06

mlr --ofmt '%.9le' --oxtab \
  put '$t=systime()' then \
  step -a delta -f t then \
  filter '$i>1' then \
  stats1 -a min,mean,max -f t_delta \
  lines.txt
t_delta_min  2.861022949e-06
t_delta_mean 4.077508505e-06
t_delta_max  5.388259888e-05

Computing interquartile ranges

For one or more specified field names, simply compute p25 and p75, then write the IQR as the difference of p75 and p25:

$ mlr --oxtab stats1 -f x -a p25,p75 \
    then put '$x_iqr = $x_p75 - $x_p25' \
    data/medium
x_p25 0.246670
x_p75 0.748186
x_iqr 0.501516

For wildcarded field names, first compute p25 and p75, then loop over field names with p25 in them:

$ mlr --oxtab stats1 --fr '[i-z]' -a p25,p75 \
    then put 'for (k,v in $*) {
      if (k =~ "(.*)_p25") {
        $["\1_iqr"] = $["\1_p75"] - $["\1_p25"]
      }
    }' \
    data/medium
i_p25 2501
i_p75 7501
x_p25 0.246670
x_p75 0.748186
y_p25 0.252137
y_p75 0.764003
i_iqr 5000
x_iqr 0.501516
y_iqr 0.511866

Computing weighted means

This might be more elegantly implemented as an option within the stats1 verb. Meanwhile, it’s expressible within the DSL:

$ mlr --from data/medium put -q '
  # Using the y field for weighting in this example
  weight = $y;

  # Using the a field for weighted aggregation in this example
  @sumwx[$a] += weight * $i;
  @sumw[$a] += weight;

  @sumx[$a] += $i;
  @sumn[$a] += 1;

  end {
    map wmean = {};
    map mean  = {};
    for (a in @sumwx) {
      wmean[a] = @sumwx[a] / @sumw[a]
    }
    for (a in @sumx) {
      mean[a] = @sumx[a] / @sumn[a]
    }
    #emit wmean, "a";
    #emit mean, "a";
    emit (wmean, mean), "a";
  }'
a=pan,wmean=4979.563722,mean=5028.259010
a=eks,wmean=4890.381593,mean=4956.290076
a=wye,wmean=4946.987746,mean=4920.001017
a=zee,wmean=5164.719685,mean=5123.092330
a=hat,wmean=4925.533162,mean=4967.743946

Generating random numbers from various distributions

Here we can chain together a few simple building blocks:

$ cat expo-sample.sh
# Generate 100,000 pairs of independent and identically distributed
# exponentially distributed random variables with the same rate parameter
# (namely, 2.5). Then compute histograms of one of them, along with
# histograms for their sum and their product.
#
# See also https://en.wikipedia.org/wiki/Exponential_distribution
#
# Here I'm using a specified random-number seed so this example always
# produces the same output for this web document: in everyday practice we
# wouldn't do that.

mlr -n \
  --seed 0.25 \
  --opprint \
  seqgen --stop 100000 \
  then put '
    # https://en.wikipedia.org/wiki/Inverse_transform_sampling
    func expo_sample(lambda) {
      return -log(1-urand())/lambda
    }
    $u = expo_sample(2.5);
    $v = expo_sample(2.5);
    $s = $u + $v;
    $p = $u * $v;
  ' \
  then histogram -f u,s,p --lo 0 --hi 2 --nbins 50 \
  then bar -f u_count,s_count,p_count --auto -w 20

Namely:

  • Set the Miller random-number seed so this webdoc looks the same every time I regenerate it.
  • Use pretty-printed tabular output.
  • Use pretty-printed tabular output.
  • Use seqgen to produce 100,000 records i=0, i=1, etc.
  • Send those to a put step which defines an inverse-transform-sampling function and calls it twice, then computes the sum and product of samples.
  • Send those to a histogram, and from there to a bar-plotter. This is just for visualization; you could just as well output CSV and send that off to your own plotting tool, etc.
The output is as follows:

$ sh expo-sample.sh
bin_lo   bin_hi   u_count                        s_count                         p_count
0.000000 0.040000 [78]*******************#[9497] [353]#...................[3732] [20]*******************#[39755]
0.040000 0.080000 [78]******************..[9497] [353]*****...............[3732] [20]*******.............[39755]
0.080000 0.120000 [78]****************....[9497] [353]*********...........[3732] [20]****................[39755]
0.120000 0.160000 [78]**************......[9497] [353]************........[3732] [20]***.................[39755]
0.160000 0.200000 [78]*************.......[9497] [353]**************......[3732] [20]**..................[39755]
0.200000 0.240000 [78]************........[9497] [353]****************....[3732] [20]*...................[39755]
0.240000 0.280000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755]
0.280000 0.320000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755]
0.320000 0.360000 [78]*********...........[9497] [353]*******************.[3732] [20]#...................[39755]
0.360000 0.400000 [78]********............[9497] [353]*******************.[3732] [20]#...................[39755]
0.400000 0.440000 [78]*******.............[9497] [353]*******************#[3732] [20]#...................[39755]
0.440000 0.480000 [78]******..............[9497] [353]******************..[3732] [20]#...................[39755]
0.480000 0.520000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755]
0.520000 0.560000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755]
0.560000 0.600000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755]
0.600000 0.640000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755]
0.640000 0.680000 [78]****................[9497] [353]****************....[3732] [20]#...................[39755]
0.680000 0.720000 [78]***.................[9497] [353]****************....[3732] [20]#...................[39755]
0.720000 0.760000 [78]***.................[9497] [353]**************......[3732] [20]#...................[39755]
0.760000 0.800000 [78]**..................[9497] [353]**************......[3732] [20]#...................[39755]
0.800000 0.840000 [78]**..................[9497] [353]*************.......[3732] [20]#...................[39755]
0.840000 0.880000 [78]**..................[9497] [353]************........[3732] [20]#...................[39755]
0.880000 0.920000 [78]**..................[9497] [353]***********.........[3732] [20]#...................[39755]
0.920000 0.960000 [78]*...................[9497] [353]***********.........[3732] [20]#...................[39755]
0.960000 1.000000 [78]*...................[9497] [353]**********..........[3732] [20]#...................[39755]
1.000000 1.040000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755]
1.040000 1.080000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755]
1.080000 1.120000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755]
1.120000 1.160000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755]
1.160000 1.200000 [78]#...................[9497] [353]*******.............[3732] [20]#...................[39755]
1.200000 1.240000 [78]#...................[9497] [353]******..............[3732] [20]#...................[39755]
1.240000 1.280000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755]
1.280000 1.320000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755]
1.320000 1.360000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755]
1.360000 1.400000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755]
1.400000 1.440000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755]
1.440000 1.480000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755]
1.480000 1.520000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755]
1.520000 1.560000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755]
1.560000 1.600000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755]
1.600000 1.640000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755]
1.640000 1.680000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
1.680000 1.720000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
1.720000 1.760000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
1.760000 1.800000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755]
1.800000 1.840000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
1.840000 1.880000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
1.880000 1.920000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
1.920000 1.960000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]
1.960000 2.000000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755]

Sieve of Eratosthenes

The Sieve_of_Eratosthenes is a standard introductory programming topic. The idea is to find all primes up to some N by making a list of the numbers 1 to N, then striking out all multiples of 2 except 2 itself, all multiples of 3 except 3 itself, all multiples of 4 except 4 itself, and so on. Whatever survives that without getting marked is a prime. This is easy enough in Miller. Notice that here all the work is in begin and end statements; there is no file input (so we use mlr -n to keep Miller from waiting for input data).

$ cat programs/sieve.mlr
# ================================================================
# Sieve of Eratosthenes: simple example of Miller DSL as programming language.
# ================================================================

# Put this in a begin-block so we can do either
#   mlr -n put -q -f name-of-this-file.mlr
# or
#   mlr -n put -q -f name-of-this-file.mlr -e '@n = 200'
# i.e. 100 is the default upper limit, and another can be specified using -e.
begin {
  @n = 100;
}

end {
  for (int i = 0; i <= @n; i += 1) {
    @s[i] = true;
  }
  @s[0] = false; # 0 is neither prime nor composite
  @s[1] = false; # 1 is neither prime nor composite
  # Strike out multiples
  for (int i = 2; i <= @n; i += 1) {
    for (int j = i+i; j <= @n; j += i) {
      @s[j] = false;
    }
  }
  # Print survivors
  for (int i = 0; i <= @n; i += 1) {
    if (@s[i]) {
      print i;
    }
  }
}

$ mlr -n put -f programs/sieve.mlr
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

Mandelbrot-set generator

The Mandelbrot set is also easily expressed. This isn’t an important case of data-processing in the vein for which Miller was designed, but it is an example of Miller as a general-purpose programming language — a test case for the expressiveness of the language.

The (approximate) computation of points in the complex plane which are and aren’t members is just a few lines of complex arithmetic (see the Wikipedia article); how to render them is another task. Using graphics libraries you can create PNG or JPEG files, but another fun way to do this is by printing various characters to the screen:

$ cat programs/mand.mlr
# Mandelbrot set generator: simple example of Miller DSL as programming language.
begin {
  # Set defaults
  @rcorn     = -2.0;
  @icorn     = -2.0;
  @side      = 4.0;
  @iheight   = 50;
  @iwidth    = 100;
  @maxits    = 100;
  @levelstep = 5;
  @chars     = "@X*o-."; # Palette of characters to print to the screen.
  @verbose   = false;
  @do_julia  = false;
  @jr        = 0.0;      # Real part of Julia point, if any
  @ji        = 0.0;      # Imaginary part of Julia point, if any
}

# Here, we can override defaults from an input file (if any).  In Miller's
# put/filter DSL, absent-null right-hand sides result in no assignment so we
# can simply put @rcorn = $rcorn: if there is a field in the input like
# 'rcorn = -1.847' we'll read and use it, else we'll keep the default.
@rcorn     = $rcorn;
@icorn     = $icorn;
@side      = $side;
@iheight   = $iheight;
@iwidth    = $iwidth;
@maxits    = $maxits;
@levelstep = $levelstep;
@chars     = $chars;
@verbose   = $verbose;
@do_julia  = $do_julia;
@jr        = $jr;
@ji        = $ji;

end {
  if (@verbose) {
    print "RCORN     = ".@rcorn;
    print "ICORN     = ".@icorn;
    print "SIDE      = ".@side;
    print "IHEIGHT   = ".@iheight;
    print "IWIDTH    = ".@iwidth;
    print "MAXITS    = ".@maxits;
    print "LEVELSTEP = ".@levelstep;
    print "CHARS     = ".@chars;
  }

  # Iterate over a matrix of rows and columns, printing one character for each cell.
  for (int ii = @iheight-1; ii >= 0; ii -= 1) {
    num pi = @icorn + (ii/@iheight) * @side;
    for (int ir = 0; ir < @iwidth; ir += 1) {
      num pr = @rcorn + (ir/@iwidth) * @side;
      printn get_point_plot(pr, pi, @maxits, @do_julia, @jr, @ji);
    }
    print;
  }
}

# This is a function to approximate membership in the Mandelbrot set (or Julia
# set for a given Julia point if do_julia == true) for a given point in the
# complex plane.
func get_point_plot(pr, pi, maxits, do_julia, jr, ji) {
  num zr = 0.0;
  num zi = 0.0;
  num cr = 0.0;
  num ci = 0.0;

  if (!do_julia) {
    zr = 0.0;
    zi = 0.0;
    cr = pr;
    ci = pi;
  } else {
    zr = pr;
    zi = pi;
    cr = jr;
    ci = ji;
  }

  int iti = 0;
  bool escaped = false;
  num zt = 0;
  for (iti = 0; iti < maxits; iti += 1) {
    num mag = zr*zr + zi+zi;
    if (mag > 4.0) {
        escaped = true;
        break;
    }
    # z := z^2 + c
    zt = zr*zr - zi*zi + cr;
    zi = 2*zr*zi + ci;
    zr = zt;
  }
  if (!escaped) {
    return ".";
  } else {
    # The // operator is Miller's (pythonic) integer-division operator
    int level = (iti // @levelstep) % strlen(@chars);
    return substr(@chars, level, level);
  }
}

At standard resolution this makes a nice little ASCII plot:

$ mlr -n put -f ./programs/mand.mlr
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX.XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXooXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX**o..*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX*-....-oXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@XXXXXXXXXX*......o*XXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXX**oo*-.-........oo.XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX....................X..o-XXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXX*oo......................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@XXX*XXXXXXXXXXXX**o........................*X*X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@XXXXXXooo***o*.*XX**X..........................o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@XXXXXXXX*-.......-***.............................oXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@XXXXXXXX*@..........Xo............................*XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@XXXX@XXXXXXXX*o@oX...........@...........................oXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.........................................................o*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@XXXXXXXXX*-.oX...........@...........................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@XXXXXXXXXX**@..........*o............................*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@XXXXXXXXXXXXX-........***.............................oXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@XXXXXXXXXXXXoo****o*.XX***@..........................o-XXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@XXXXX*XXXX*XXXXXXX**-........................***XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*.....................@o*XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX*....................*..o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX*ooo*-.o........oo.X*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX**@.....*XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX*o....-o*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXo*o..*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*XXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

But using a very small font size (as small as my Mac will let me go), and by choosing the coordinates to zoom in on a particular part of the complex plane, we can get a nice little picture:

#!/bin/bash
# Get the number of rows and columns from the terminal window dimensions
iheight=$(stty size | mlr --nidx --fs space cut -f 1)
iwidth=$(stty size | mlr --nidx --fs space cut -f 2)
echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" \
  | mlr put -f programs/mand.mlr 
miller-5.6.2/doc/cookbook3.html000066400000000000000000000463561354153536500163640ustar00rootroot00000000000000 Cookbook part 3

Overview

One of Miller’s strengths is its compact notation: for example, given input of the form

$ head -n 5 ../data/medium
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

you can simply do

$ mlr --oxtab stats1 -a sum -f x ../data/medium
x_sum 4986.019682

or

$ mlr --opprint stats1 -a sum -f x -g b ../data/medium
b   x_sum
pan 965.763670
wye 1023.548470
zee 979.742016
eks 1016.772857
hat 1000.192668

rather than the more tedious

$ mlr --oxtab put -q '
  @x_sum += $x;
  end {
    emit @x_sum
  }
' data/medium
x_sum 4986.019682

or

$ mlr --opprint put -q '
  @x_sum[$b] += $x;
  end {
    emit @x_sum, "b"
  }
' data/medium
b   x_sum
pan 965.763670
wye 1023.548470
zee 979.742016
eks 1016.772857
hat 1000.192668

The former (mlr stats1 et al.) has the advantages of being easier to type, being less error-prone to type, and running faster.

Nonetheless, out-of-stream variables (which I whimsically call oosvars), begin/end blocks, and emit statements give you the ability to implement logic — if you wish to do so — which isn’t present in other Miller verbs. (If you find yourself often using the same out-of-stream-variable logic over and over, please file a request at https://github.com/johnkerl/miller/issues to get it implemented directly in C as a Miller verb of its own.)

The following examples compute some things using oosvars which are already computable using Miller verbs, by way of providing food for thought.

Mean without/with oosvars

$ mlr --opprint stats1 -a mean -f x data/medium
x_mean
0.498602

$ mlr --opprint put -q '
  @x_sum += $x;
  @x_count += 1;
  end {
    @x_mean = @x_sum / @x_count;
    emit @x_mean
  }
' data/medium
x_mean
0.498602

Keyed mean without/with oosvars

$ mlr --opprint stats1 -a mean -f x -g a,b data/medium
a   b   x_mean
pan pan 0.513314
eks pan 0.485076
wye wye 0.491501
eks wye 0.483895
wye pan 0.499612
zee pan 0.519830
eks zee 0.495463
zee wye 0.514267
hat wye 0.493813
pan wye 0.502362
zee eks 0.488393
hat zee 0.509999
hat eks 0.485879
wye hat 0.497730
pan eks 0.503672
eks eks 0.522799
hat hat 0.479931
hat pan 0.464336
zee zee 0.512756
pan hat 0.492141
pan zee 0.496604
zee hat 0.467726
wye zee 0.505907
eks hat 0.500679
wye eks 0.530604

$ mlr --opprint put -q '
  @x_sum[$a][$b] += $x;
  @x_count[$a][$b] += 1;
  end{
    for ((a, b), v in @x_sum) {
      @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b];
    }
    emit @x_mean, "a", "b"
  }
' data/medium
a   b   x_mean
pan pan 0.513314
pan wye 0.502362
pan eks 0.503672
pan hat 0.492141
pan zee 0.496604
eks pan 0.485076
eks wye 0.483895
eks zee 0.495463
eks eks 0.522799
eks hat 0.500679
wye wye 0.491501
wye pan 0.499612
wye hat 0.497730
wye zee 0.505907
wye eks 0.530604
zee pan 0.519830
zee wye 0.514267
zee eks 0.488393
zee zee 0.512756
zee hat 0.467726
hat wye 0.493813
hat zee 0.509999
hat eks 0.485879
hat hat 0.479931
hat pan 0.464336

Variance and standard deviation without/with oosvars

$ mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium
x_count  10000
x_sum    4986.019682
x_mean   0.498602
x_var    0.084270
x_stddev 0.290293

$ cat variance.mlr
@n += 1;
@sumx += $x;
@sumx2 += $x**2;
end {
  @mean = @sumx / @n;
  @var = (@sumx2 - @mean * (2 * @sumx - @n * @mean)) / (@n - 1);
  @stddev = sqrt(@var);
  emitf @n, @sumx, @sumx2, @mean, @var, @stddev
}

$ mlr --oxtab put -q -f variance.mlr data/medium
n      10000
sumx   4986.019682
sumx2  3328.652400
mean   0.498602
var    0.084270
stddev 0.290293

You can also do this keyed, of course, imitating the keyed-mean example above.

Min/max without/with oosvars

$ mlr --oxtab stats1 -a min,max -f x data/medium
x_min 0.000045
x_max 0.999953

$ mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium
x_min 0.000045
x_max 0.999953

Keyed min/max without/with oosvars

$ mlr --opprint stats1 -a min,max -f x -g a data/medium
a   x_min    x_max
pan 0.000204 0.999403
eks 0.000692 0.998811
wye 0.000187 0.999823
zee 0.000549 0.999490
hat 0.000045 0.999953

$ mlr --opprint --from data/medium put -q '
  @min[$a] = min(@min[$a], $x);
  @max[$a] = max(@max[$a], $x);
  end{
    emit (@min, @max), "a";
  }
'
a   min      max
pan 0.000204 0.999403
eks 0.000692 0.998811
wye 0.000187 0.999823
zee 0.000549 0.999490
hat 0.000045 0.999953

Delta without/with oosvars

$ mlr --opprint step -a delta -f x data/small
a   b   i x                   y                   x_delta
pan pan 1 0.3467901443380824  0.7268028627434533  0
eks pan 2 0.7586799647899636  0.5221511083334797  0.411890
wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077
eks wye 4 0.38139939387114097 0.13418874328430463 0.176796
wye pan 5 0.5732889198020006  0.8636244699032729  0.191890

$ mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small
a   b   i x                   y                   x_delta
pan pan 1 0.3467901443380824  0.7268028627434533  0
eks pan 2 0.7586799647899636  0.5221511083334797  0.411890
wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077
eks wye 4 0.38139939387114097 0.13418874328430463 0.176796
wye pan 5 0.5732889198020006  0.8636244699032729  0.191890

Keyed delta without/with oosvars

$ mlr --opprint step -a delta -f x -g a data/small
a   b   i x                   y                   x_delta
pan pan 1 0.3467901443380824  0.7268028627434533  0
eks pan 2 0.7586799647899636  0.5221511083334797  0
wye wye 3 0.20460330576630303 0.33831852551664776 0
eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281
wye pan 5 0.5732889198020006  0.8636244699032729  0.368686

$ mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small
a   b   i x                   y                   x_delta
pan pan 1 0.3467901443380824  0.7268028627434533  0
eks pan 2 0.7586799647899636  0.5221511083334797  0
wye wye 3 0.20460330576630303 0.33831852551664776 0
eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281
wye pan 5 0.5732889198020006  0.8636244699032729  0.368686

Exponentially weighted moving averages without/with oosvars

$ mlr --opprint step -a ewma -d 0.1 -f x data/small
a   b   i x                   y                   x_ewma_0.1
pan pan 1 0.3467901443380824  0.7268028627434533  0.346790
eks pan 2 0.7586799647899636  0.5221511083334797  0.387979
wye wye 3 0.20460330576630303 0.33831852551664776 0.369642
eks wye 4 0.38139939387114097 0.13418874328430463 0.370817
wye pan 5 0.5732889198020006  0.8636244699032729  0.391064

$ mlr --opprint put '
  begin{ @a=0.1 };
  $e = NR==1 ? $x : @a * $x + (1 - @a) * @e;
  @e=$e
' data/small
a   b   i x                   y                   e
pan pan 1 0.3467901443380824  0.7268028627434533  0.346790
eks pan 2 0.7586799647899636  0.5221511083334797  0.387979
wye wye 3 0.20460330576630303 0.33831852551664776 0.369642
eks wye 4 0.38139939387114097 0.13418874328430463 0.370817
wye pan 5 0.5732889198020006  0.8636244699032729  0.391064

miller-5.6.2/doc/css2/000077500000000000000000000000001354153536500144415ustar00rootroot00000000000000miller-5.6.2/doc/css2/README.txt000066400000000000000000000003401354153536500161340ustar00rootroot00000000000000As of 5.6.1 I wanted to make the docs more mobile-friendly. I found to my sad surprise that my mobile device cached CSS files even on page reload. Hence ./css2 rather than ./css, solely to force devices to read the new CSS. miller-5.6.2/doc/css2/miller.css000066400000000000000000000024371354153536500164450ustar00rootroot00000000000000 a:link { color: maroon; } a:visited { color: maroon; } a:active { color: maroon; } body { color: black; background-color: white; } maroon { color: maroon; } boldmaroon { font-weight: bold; color: maroon; } body { font-family: "Avenir", sans-serif; line-height: 140%; } titleinbody { font-weight: bold; color: maroon; font-size: 120% } h1 { font-weight: bold; color: maroon; font-size: 120%; border: 1px solid #aaaaaa; background: #e8d9bc; padding: 3px; } h2 { font-weight: bold; color: maroon; font-size: 105%; border: 1px solid #aaaaaa; background: #ffffff; padding: 3px; } h3 { font-weight: bold; color: maroon; font-size: 100%; border-bottom: 1px solid #aaaaaa; } table { color: #000000; border-collapse: collapse; border-color: #808080; } .mlrbg { background: #e8d9bc; } th { vertical-align: top; padding: 5px; } td { vertical-align: top; padding: 5px; } tt { font-family: Consolas, monospace; font-size: 90%; } pre { font-family: Consolas, monospace; font-size: 90%; } .pokipanel { display: inline-block; background: #ffffff; box-shadow:0px 0px 2px 2px #C9C9C9; margin: 10px; border-color: #f1c40f; background: #e8d9bc; padding-top: 2px; padding-bottom: 2px; padding-left: 15px; padding-right: 15px; } miller-5.6.2/doc/css2/poki-callbacks.css000066400000000000000000000014121354153536500200300ustar00rootroot00000000000000 .pokinav { display: inline-block; border: 1px solid black; background: #e8d9bc; box-shadow: 0px 0px 3px 3px #C9C9C9; margin: 10px; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; } .pokitoc { display: inline-block; border: 1px solid black; background: #ffffff; box-shadow: 0px 0px 3px 3px #C9C9C9; margin: 10px; padding-top: 10px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; } .pokipanel { display: inline-block; background: #e8d9bc; box-shadow: 0px 0px 3px 3px #C9C9C9; margin: 10px; padding-top: 2px; padding-bottom: 2px; padding-left: 15px; padding-right: 15px; } miller-5.6.2/doc/data-examples.html000066400000000000000000000411341354153536500172050ustar00rootroot00000000000000 Data-diving examples

Data-diving examples
• flins data
• Color/shape data

flins data

The flins.csv file is some sample data obtained from https://support.spatialkey.com/spatialkey-sample-csv-data.

Vertical-tabular format is good for a quick look at CSV data layout — seeing what columns you have to work with:

$ head -n 2 data/flins.csv | mlr --icsv --oxtab cat
county   Seminole
tiv_2011 22890.55
tiv_2012 20848.71
line     Residential

A few simple queries:

$ mlr --from data/flins.csv --icsv --opprint count-distinct -f county | head
county     count
Seminole   1
Miami Dade 2
Palm Beach 1
Highlands  2
Duval      1
St. Johns  1

$ mlr --from data/flins.csv --icsv --opprint count-distinct -f construction,line

Categorization of total insured value:

$ mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012
tiv_2012_min tiv_2012_mean  tiv_2012_max
19757.910000 1061531.463750 2785551.630000

$ mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 -g construction,line

$ mlr --from data/flins.csv --icsv --oxtab stats1 -a p0,p10,p50,p90,p95,p99,p100 -f hu_site_deductible
hu_site_deductible_p0
hu_site_deductible_p10
hu_site_deductible_p50
hu_site_deductible_p90
hu_site_deductible_p95
hu_site_deductible_p99
hu_site_deductible_p100

$ mlr --from data/flins.csv --icsv --opprint stats1 -a p95,p99,p100 -f hu_site_deductible -g county then sort -f county | head
county     hu_site_deductible_p95 hu_site_deductible_p99 hu_site_deductible_p100
Duval      -                      -                      -
Highlands  -                      -                      -
Miami Dade -                      -                      -
Palm Beach -                      -                      -
Seminole   -                      -                      -
St. Johns  -                      -                      -

$ mlr --from data/flins.csv --icsv --oxtab stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012
tiv_2011_tiv_2012_corr  0.935363
tiv_2011_tiv_2012_ols_m 1.089091
tiv_2011_tiv_2012_ols_b 103095.523356
tiv_2011_tiv_2012_ols_n 8
tiv_2011_tiv_2012_r2    0.874904

$ mlr --from data/flins.csv --icsv --opprint stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 -g county
county     tiv_2011_tiv_2012_corr tiv_2011_tiv_2012_ols_m tiv_2011_tiv_2012_ols_b tiv_2011_tiv_2012_ols_n tiv_2011_tiv_2012_r2
Seminole   -                      -                       -                       1                       -
Miami Dade 1.000000               0.930643                -2311.154328            2                       1.000000
Palm Beach -                      -                       -                       1                       -
Highlands  1.000000               1.055693                -4529.793939            2                       1.000000
Duval      -                      -                       -                       1                       -
St. Johns  -                      -                       -                       1                       -

Color/shape data

The colored-shapes.dkvp file is some sample data produced by the mkdat2 script. The idea is

  • Produce some data with known distributions and correlations, and verify that Miller recovers those properties empirically.
  • Each record is labeled with one of a few colors and one of a few shapes.
  • The flag field is 0 or 1, with probability dependent on color
  • The u field is plain uniform on the unit interval.
  • The v field is the same, except tightly correlated with u for red circles.
  • The w field is autocorrelated for each color/shape pair.
  • The x field is boring Gaussian with mean 5 and standard deviation about 1.2, with no dependence on color or shape.

Peek at the data:

$ wc -l data/colored-shapes.dkvp
10078 data/colored-shapes.dkvp

$ head -n 6 data/colored-shapes.dkvp | mlr --opprint cat
color  shape    flag i  u                   v                    w                   x
yellow triangle 1    11 0.6321695890307647  0.9887207810889004   0.4364983936735774  5.7981881667050565
red    square   1    15 0.21966833570651523 0.001257332190235938 0.7927778364718627  2.944117399716207
red    circle   1    16 0.20901671281497636 0.29005231936593445  0.13810280912907674 5.065034003400998
red    square   0    48 0.9562743938458542  0.7467203085342884   0.7755423050923582  7.117831369597269
purple triangle 0    51 0.4355354501763202  0.8591292672156728   0.8122903963006748  5.753094629505863
red    square   0    64 0.2015510269821953  0.9531098083420033   0.7719912015786777  5.612050466474166

Look at uncategorized stats (using creach for spacing). Here it looks reasonable that u is unit-uniform; something’s up with v but we can’t yet see what:

$ mlr --oxtab stats1 -a min,mean,max -f flag,u,v data/colored-shapes.dkvp | creach 3
flag_min  0
flag_mean 0.398889
flag_max  1

u_min     0.000044
u_mean    0.498326
u_max     0.999969

v_min     -0.092709
v_mean    0.497787
v_max     1.072500

The histogram shows the different distribution of 0/1 flags:

$ mlr --opprint histogram -f flag,u,v --lo -0.1 --hi 1.1 --nbins 12 data/colored-shapes.dkvp
bin_lo    bin_hi   flag_count u_count v_count
-0.100000 0.000000 6058       0       36
0.000000  0.100000 0          1062    988
0.100000  0.200000 0          985     1003
0.200000  0.300000 0          1024    1014
0.300000  0.400000 0          1002    991
0.400000  0.500000 0          989     1041
0.500000  0.600000 0          1001    1016
0.600000  0.700000 0          972     962
0.700000  0.800000 0          1035    1070
0.800000  0.900000 0          995     993
0.900000  1.000000 4020       1013    939
1.000000  1.100000 0          0       25

Look at univariate stats by color and shape. In particular, color-dependent flag probabilities pop out, aligning with their original Bernoulli probablities from the data-generator script:

$ mlr --opprint stats1 -a min,mean,max -f flag,u,v -g color then sort -f color data/colored-shapes.dkvp
color  flag_min flag_mean flag_max u_min    u_mean   u_max    v_min     v_mean   v_max
blue   0        0.584354  1        0.000044 0.517717 0.999969 0.001489  0.491056 0.999576
green  0        0.209197  1        0.000488 0.504861 0.999936 0.000501  0.499085 0.999676
orange 0        0.521452  1        0.001235 0.490532 0.998885 0.002449  0.487764 0.998475
purple 0        0.090193  1        0.000266 0.494005 0.999647 0.000364  0.497051 0.999975
red    0        0.303167  1        0.000671 0.492560 0.999882 -0.092709 0.496535 1.072500
yellow 0        0.892427  1        0.001300 0.497129 0.999923 0.000711  0.510627 0.999919

$ mlr --opprint stats1 -a min,mean,max -f flag,u,v -g shape then sort -f shape data/colored-shapes.dkvp
shape    flag_min flag_mean flag_max u_min    u_mean   u_max    v_min     v_mean   v_max
circle   0        0.399846  1        0.000044 0.498555 0.999923 -0.092709 0.495524 1.072500
square   0        0.396112  1        0.000188 0.499385 0.999969 0.000089  0.496538 0.999975
triangle 0        0.401542  1        0.000881 0.496859 0.999661 0.000717  0.501050 0.999995

Look at bivariate stats by color and shape. In particular, u,v pairwise correlation for red circles pops out:

$ mlr --opprint --right stats2 -a corr -f u,v,w,x data/colored-shapes.dkvp
u_v_corr  w_x_corr
0.133418 -0.011320

$ mlr --opprint --right stats2 -a corr -f u,v,w,x -g color,shape then sort -nr u_v_corr data/colored-shapes.dkvp
 color    shape  u_v_corr  w_x_corr
   red   circle  0.980798 -0.018565
orange   square  0.176858 -0.071044
 green   circle  0.057644  0.011795
   red   square  0.055745 -0.000680
yellow triangle  0.044573  0.024605
yellow   square  0.043792 -0.044623
purple   circle  0.035874  0.134112
  blue   square  0.032412 -0.053508
  blue triangle  0.015356 -0.000608
orange   circle  0.010519 -0.162795
   red triangle  0.008098  0.012486
purple triangle  0.005155 -0.045058
purple   square -0.025680  0.057694
 green   square -0.025776 -0.003265
orange triangle -0.030457 -0.131870
yellow   circle -0.064773  0.073695
  blue   circle -0.102348 -0.030529
 green triangle -0.109018 -0.048488

miller-5.6.2/doc/data-sharing.html000066400000000000000000000477621354153536500170370ustar00rootroot00000000000000 Mixing with other languages

As discussed in the section on File formats, Miller supports several different file formats. Different tools are good at different things, so it’s important to be able to move data into and out of other languages. CSV and JSON are well-known, of course; here are some examples using DKVP format, with Ruby and Python. Last, we show how to use arbitrary shell commands to extend functionality beyond Miller’s domain-specific language.

DKVP I/O in Python

Here are the I/O routines:

#!/usr/bin/env python

# ================================================================
# Example of DKVP I/O using Python.
#
# Key point: Use Miller for what it's good at; pass data into/out of tools in
# other languages to do what they're good at.
#
#   bash$ python -i dkvp_io.py
#
#   # READ
#   >>> map = dkvpline2map('x=1,y=2', '=', ',')
#   >>> map
#   OrderedDict([('x', '1'), ('y', '2')])
#
#   # MODIFY
#   >>> map['z'] = map['x'] + map['y']
#   >>> map
#   OrderedDict([('x', '1'), ('y', '2'), ('z', 3)])
#
#   # WRITE
#   >>> line = map2dkvpline(map, '=', ',')
#   >>> line
#   'x=1,y=2,z=3'
#
# ================================================================

import re
import collections

# ----------------------------------------------------------------
# ips and ifs (input pair separator and input field separator) are nominally '=' and ','.
def dkvpline2map(line, ips, ifs):
	pairs = re.split(ifs, line)
	map = collections.OrderedDict()
	for pair in pairs:
		key, value = re.split(ips, pair, 1)

		# Type inference:
		try:
			value = int(value)
		except:
			try:
				value = float(value)
			except:
				pass

		map[key] = value
	return map

# ----------------------------------------------------------------
# ops and ofs (output pair separator and output field separator) are nominally '=' and ','.
def map2dkvpline(map , ops, ofs):
	line = ''
	pairs = []
	for key in map:
		pairs.append(str(key) + ops + str(map[key]))
	return str.join(ofs, pairs)

And here is an example using them:

$ cat polyglot-dkvp-io/example.py
#!/usr/bin/env python

import sys
import re
import copy
import dkvp_io

while True:
	# Read the original record:
	line = sys.stdin.readline().strip()
	if line == '':
		break
	map = dkvp_io.dkvpline2map(line, '=', ',')

	# Drop a field:
	map.pop('x')

	# Compute some new fields:
	map['ab'] = map['a'] + map['b']
	map['iy'] = map['i'] + map['y']

	# Add new fields which show type of each already-existing field:
	omap = copy.copy(map) # since otherwise the for-loop will modify what it loops over
	keys = omap.keys()
	for key in keys:
		# Convert "<type 'int'>" to just "int", etc.:
		type_string = str(map[key].__class__)
		type_string = re.sub("<type '", "", type_string) # python2
		type_string = re.sub("<class '", "", type_string) # python3
		type_string = re.sub("'>", "", type_string)
		map['t'+key] = type_string

	# Write the modified record:
	print(dkvp_io.map2dkvpline(map, '=', ','))

Run as-is:

$ python polyglot-dkvp-io/example.py < data/small
a=pan,b=pan,i=1,y=0.726802862743,ab=panpan,iy=1.72680286274,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
a=eks,b=pan,i=2,y=0.522151108333,ab=ekspan,iy=2.52215110833,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
a=wye,b=wye,i=3,y=0.338318525517,ab=wyewye,iy=3.33831852552,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
a=eks,b=wye,i=4,y=0.134188743284,ab=ekswye,iy=4.13418874328,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float
a=wye,b=pan,i=5,y=0.863624469903,ab=wyepan,iy=5.8636244699,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float

Run as-is, then pipe to Miller for pretty-printing:

$ python polyglot-dkvp-io/example.py < data/small | mlr --opprint cat
a   b   i y              ab     iy            ta  tb  ti  ty    tab tiy
pan pan 1 0.726802862743 panpan 1.72680286274 str str int float str float
eks pan 2 0.522151108333 ekspan 2.52215110833 str str int float str float
wye wye 3 0.338318525517 wyewye 3.33831852552 str str int float str float
eks wye 4 0.134188743284 ekswye 4.13418874328 str str int float str float
wye pan 5 0.863624469903 wyepan 5.8636244699  str str int float str float

DKVP I/O in Ruby

Here are the I/O routines:

#!/usr/bin/env ruby

# ================================================================
# Example of DKVP I/O using Ruby.
#
# Key point: Use Miller for what it's good at; pass data into/out of tools in
# other languages to do what they're good at.
#
#   bash$ irb -I. -r dkvp_io.rb
#
#   # READ
#   irb(main):001:0> map = dkvpline2map('x=1,y=2', '=', ',')
#   => {"x"=>"1", "y"=>"2"}
#
#   # MODIFY
#   irb(main):001:0> map['z'] = map['x'] + map['y']
#   => 3
#
#   # WRITE
#   irb(main):002:0> line = map2dkvpline(map, '=', ',')
#   => "x=1,y=2,z=3"
#
# ================================================================

# ----------------------------------------------------------------
# ips and ifs (input pair separator and input field separator) are nominally '=' and ','.
def dkvpline2map(line, ips, ifs)
  map = {}
  line.split(ifs).each do |pair|
    (k, v) = pair.split(ips, 2)

    # Type inference:
    begin
      v = Integer(v)
    rescue ArgumentError
      begin
        v = Float(v)
      rescue ArgumentError
        # Leave as string
      end
    end

    map[k] = v
  end
  map
end

# ----------------------------------------------------------------
# ops and ofs (output pair separator and output field separator) are nominally '=' and ','.
def map2dkvpline(map, ops, ofs)
  map.collect{|k,v| k.to_s + ops + v.to_s}.join(ofs)
end

And here is an example using them:

$ cat polyglot-dkvp-io/example.rb
#!/usr/bin/env ruby

require 'dkvp_io'

ARGF.each do |line|
  # Read the original record:
  map = dkvpline2map(line.chomp, '=', ',')

  # Drop a field:
  map.delete('x')

  # Compute some new fields:
  map['ab'] = map['a'] + map['b']
  map['iy'] = map['i'] + map['y']

  # Add new fields which show type of each already-existing field:
  keys = map.keys
  keys.each do |key|
    map['t'+key] = map[key].class
  end

  # Write the modified record:
  puts map2dkvpline(map, '=', ',')
end

Run as-is:

$ ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small
a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float
a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float

Run as-is, then pipe to Miller for pretty-printing:

$ ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small | mlr --opprint cat
a   b   i y                   ab     iy                 ta     tb     ti      ty    tab    tiy
pan pan 1 0.7268028627434533  panpan 1.7268028627434533 String String Integer Float String Float
eks pan 2 0.5221511083334797  ekspan 2.5221511083334796 String String Integer Float String Float
wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 String String Integer Float String Float
eks wye 4 0.13418874328430463 ekswye 4.134188743284304  String String Integer Float String Float
wye pan 5 0.8636244699032729  wyepan 5.863624469903273  String String Integer Float String Float

SQL-output examples

SQL-input examples

Running shell commands

The system DSL function allows you to run a specific shell command and put its output — minus the final newline — into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you.

$ mlr --opprint put '$o = system("echo hello world")' data/small
a   b   i x                   y                   o
pan pan 1 0.3467901443380824  0.7268028627434533  hello world
eks pan 2 0.7586799647899636  0.5221511083334797  hello world
wye wye 3 0.20460330576630303 0.33831852551664776 hello world
eks wye 4 0.38139939387114097 0.13418874328430463 hello world
wye pan 5 0.5732889198020006  0.8636244699032729  hello world

$ mlr --opprint put '$o = system("echo {" . NR . "}")' data/small
a   b   i x                   y                   o
pan pan 1 0.3467901443380824  0.7268028627434533  {1}
eks pan 2 0.7586799647899636  0.5221511083334797  {2}
wye wye 3 0.20460330576630303 0.33831852551664776 {3}
eks wye 4 0.38139939387114097 0.13418874328430463 {4}
wye pan 5 0.5732889198020006  0.8636244699032729  {5}

$ mlr --opprint put '$o = system("echo -n ".$a."| sha1sum")' data/small
a   b   i x                   y                   o
pan pan 1 0.3467901443380824  0.7268028627434533  bd2bd8216b9cb4aa5a12daa6cfc98eef2ee20e56  -
eks pan 2 0.7586799647899636  0.5221511083334797  16191338e81a46c7d127f5c8899f5c92e3cd38e3  -
wye wye 3 0.20460330576630303 0.33831852551664776 14ba3c3e96a2474ab6dc7409ebf9d6b9cc3d84f0  -
eks wye 4 0.38139939387114097 0.13418874328430463 16191338e81a46c7d127f5c8899f5c92e3cd38e3  -
wye pan 5 0.5732889198020006  0.8636244699032729  14ba3c3e96a2474ab6dc7409ebf9d6b9cc3d84f0  -

Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system date command for the current time in nanoseconds versus computing it in process:

$ mlr --opprint put '$t=system("date +%s.%N")' then step -a delta -f t data/small
a   b   i x                   y                   t                    t_delta
pan pan 1 0.3467901443380824  0.7268028627434533  1568774318.513903817 0
eks pan 2 0.7586799647899636  0.5221511083334797  1568774318.514722876 0.000819
wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.515618046 0.000895
eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.516547441 0.000929
wye pan 5 0.5732889198020006  0.8636244699032729  1568774318.517518828 0.000971

$ mlr --opprint put '$t=systime()' then step -a delta -f t data/small
a   b   i x                   y                   t                 t_delta
pan pan 1 0.3467901443380824  0.7268028627434533  1568774318.518699 0
eks pan 2 0.7586799647899636  0.5221511083334797  1568774318.518717 0.000018
wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.518723 0.000006
eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.518727 0.000004
wye pan 5 0.5732889198020006  0.8636244699032729  1568774318.518730 0.000003

miller-5.6.2/doc/data/000077500000000000000000000000001354153536500145005ustar00rootroot00000000000000miller-5.6.2/doc/data/a.csv000066400000000000000000000000221354153536500154270ustar00rootroot00000000000000a,b,c 1,2,3 4,5,6 miller-5.6.2/doc/data/a.dkvp000066400000000000000000000000301354153536500155770ustar00rootroot00000000000000a=1,b=2,c=3 a=4,b=5,c=6 miller-5.6.2/doc/data/b.csv000066400000000000000000000000141354153536500154310ustar00rootroot00000000000000a,b,c 7,8,9 miller-5.6.2/doc/data/b.dkvp000066400000000000000000000000141354153536500156020ustar00rootroot00000000000000a=7,b=8,c=9 miller-5.6.2/doc/data/begin-end-example-1.sh000066400000000000000000000001261354153536500204520ustar00rootroot00000000000000mlr put ' begin { @sum = 0 }; @x_sum += $x; end { emit @x_sum } ' ../data/small miller-5.6.2/doc/data/begin-end-example-2.sh000066400000000000000000000001001354153536500204430ustar00rootroot00000000000000mlr put ' @x_sum += $x; end { emit @x_sum } ' ../data/small miller-5.6.2/doc/data/begin-end-example-3.sh000066400000000000000000000001031354153536500204470ustar00rootroot00000000000000mlr put -q ' @x_sum += $x; end { emit @x_sum } ' ../data/small miller-5.6.2/doc/data/begin-end-example-4.sh000066400000000000000000000001561354153536500204600ustar00rootroot00000000000000mlr put -q ' @x_count += 1; @x_sum += $x; end { emit @x_count; emit @x_sum; } ' ../data/small miller-5.6.2/doc/data/begin-end-example-5.sh000066400000000000000000000000531354153536500204550ustar00rootroot00000000000000mlr stats1 -a count,sum -f x ../data/small miller-5.6.2/doc/data/begin-end-example-6.sh000066400000000000000000000002001354153536500204500ustar00rootroot00000000000000mlr put -q ' @x_count[$a] += 1; @x_sum[$a] += $x; end { emit @x_count, "a"; emit @x_sum, "a"; } ' ../data/small miller-5.6.2/doc/data/begin-end-example-6a.sh000066400000000000000000000002061354153536500206170ustar00rootroot00000000000000mlr --from data/medium put -q ' @x_count[$a][$b] += 1; @x_sum[$a][$b] += $x; end { emit (@x_count, @x_sum), "a", "b"; } ' miller-5.6.2/doc/data/begin-end-example-7.sh000066400000000000000000000000601354153536500204550ustar00rootroot00000000000000mlr stats1 -a count,sum -f x -g a ../data/small miller-5.6.2/doc/data/begin-end-example-7b.sh000066400000000000000000000000001354153536500206110ustar00rootroot00000000000000miller-5.6.2/doc/data/begin-end-example-8.sh000066400000000000000000000003651354153536500204660ustar00rootroot00000000000000mlr put ' begin { @num_total = 0; @num_positive = 0; }; @num_total += 1; $x > 0.0 { @num_positive += 1; $y = log10($x); $z = sqrt($y) }; end { emitf @num_total, @num_positive } ' data/put-gating-example-1.dkvp miller-5.6.2/doc/data/budget.csv000066400000000000000000000001551354153536500164700ustar00rootroot00000000000000# Asana -- here are the budget figures you asked for! type,quantity purple,456.78 green,678.12 orange,123.45 miller-5.6.2/doc/data/bulk-rename-for-loop.mlr000066400000000000000000000001331354153536500211460ustar00rootroot00000000000000map newrec = {}; for (oldk, v in $*) { newrec[gsub(oldk, " ", "_")] = v; } $* = newrec miller-5.6.2/doc/data/clean-whitespace.csv000066400000000000000000000001341354153536500204270ustar00rootroot00000000000000 Name , Preference Ann Simons, blue Bob Wang , red Carol Vee, yellow miller-5.6.2/doc/data/color-codes.csv000066400000000000000000000000431354153536500174230ustar00rootroot00000000000000id,code 3,0000ff 2,00ff00 4,ff0000 miller-5.6.2/doc/data/color-names.csv000066400000000000000000000000271354153536500174330ustar00rootroot00000000000000id,color 4,red 2,green miller-5.6.2/doc/data/colored-shapes.dkvp000066400000000000000000046002041354153536500203040ustar00rootroot00000000000000color=yellow,shape=triangle,flag=1,i=11,u=0.6321695890307647,v=0.9887207810889004,w=0.4364983936735774,x=5.7981881667050565 color=red,shape=square,flag=1,i=15,u=0.21966833570651523,v=0.001257332190235938,w=0.7927778364718627,x=2.944117399716207 color=red,shape=circle,flag=1,i=16,u=0.20901671281497636,v=0.29005231936593445,w=0.13810280912907674,x=5.065034003400998 color=red,shape=square,flag=0,i=48,u=0.9562743938458542,v=0.7467203085342884,w=0.7755423050923582,x=7.117831369597269 color=purple,shape=triangle,flag=0,i=51,u=0.4355354501763202,v=0.8591292672156728,w=0.8122903963006748,x=5.753094629505863 color=red,shape=square,flag=0,i=64,u=0.2015510269821953,v=0.9531098083420033,w=0.7719912015786777,x=5.612050466474166 color=purple,shape=triangle,flag=0,i=65,u=0.6842806710360729,v=0.5823723856331258,w=0.8014053396013747,x=5.805148213865135 color=yellow,shape=circle,flag=1,i=73,u=0.6033649768090676,v=0.42370791211283076,w=0.639785141788745,x=7.006414410739997 color=yellow,shape=circle,flag=1,i=87,u=0.2856563669907619,v=0.8335161523929382,w=0.6350579406858395,x=6.350035616385983 color=purple,shape=square,flag=0,i=91,u=0.25992639068499135,v=0.824321938346312,w=0.7237347131411271,x=6.854221024776646 color=red,shape=circle,flag=0,i=108,u=0.024802572314538085,v=-0.018793703176088375,w=0.1671176659369718,x=5.055666375592517 color=yellow,shape=square,flag=1,i=109,u=0.9974736736046079,v=0.6760028458359627,w=0.41864350936782024,x=3.901025801203988 color=red,shape=circle,flag=0,i=118,u=0.34117602470323594,v=0.38062693570973866,w=0.17327129470515584,x=3.29791352816602 color=red,shape=triangle,flag=0,i=123,u=0.4278178693661939,v=0.3960696006932547,w=0.4669075799722325,x=6.075593868973896 color=green,shape=triangle,flag=1,i=126,u=0.1513010528347546,v=0.40346767294704544,w=0.051213231883952326,x=5.955109300797182 color=red,shape=circle,flag=0,i=132,u=0.00415869281443515,v=0.07120668907359722,w=0.18024088018973658,x=6.081369507941527 color=red,shape=square,flag=1,i=136,u=0.7115806575648764,v=0.6358066944310004,w=0.733362749189488,x=2.0929047447188442 color=purple,shape=triangle,flag=0,i=140,u=0.7170724772864769,v=0.971982521419424,w=0.7877975577532164,x=4.099359540509919 color=purple,shape=triangle,flag=0,i=151,u=0.032614487569017414,v=0.7346633365041219,w=0.7812143304483805,x=2.6831992610568047 color=green,shape=square,flag=0,i=152,u=0.6684429446914862,v=0.016056003736548696,w=0.4656148241291592,x=5.434588759225423 color=yellow,shape=square,flag=1,i=158,u=0.41527900739142165,v=0.7118027080775757,w=0.4200799665161291,x=5.33279067554884 color=red,shape=triangle,flag=1,i=177,u=0.46223900862848977,v=0.3756372162560322,w=0.46677374441501546,x=3.868738145214838 color=red,shape=square,flag=1,i=181,u=0.7499237717390023,v=0.3011685472073139,w=0.7067889134216544,x=5.658717346090616 color=red,shape=square,flag=0,i=207,u=0.8418732590895626,v=0.6829961308284442,w=0.6777973811978997,x=6.429841924437199 color=blue,shape=circle,flag=0,i=215,u=0.7803586969333292,v=0.33146680638888126,w=0.04289047852629113,x=5.725365736377487 color=blue,shape=triangle,flag=0,i=220,u=0.441773289968473,v=0.44597731903759075,w=0.6329360666849821,x=4.3064608776550894 color=yellow,shape=triangle,flag=1,i=230,u=0.662341253298938,v=0.1395610797840987,w=0.4253162003550002,x=7.4205012813680336 color=purple,shape=square,flag=0,i=247,u=0.7157068193458154,v=0.30556667456142306,w=0.7082214193677417,x=6.27840284372013 color=blue,shape=circle,flag=1,i=282,u=0.4107894174130632,v=0.5237663206650146,w=0.04318568730902819,x=3.7814299131517406 color=green,shape=triangle,flag=0,i=284,u=0.09184444247342893,v=0.4977908548241379,w=0.07847551915092178,x=5.171903191298225 color=purple,shape=circle,flag=0,i=314,u=0.9970979544448977,v=0.19371928997895382,w=0.4669332097132727,x=6.253743240180984 color=red,shape=circle,flag=0,i=317,u=0.3806668694886812,v=0.4639086417841095,w=0.24155540443368562,x=5.233591001880515 color=blue,shape=square,flag=0,i=320,u=0.6567438551446514,v=0.6872579918742652,w=0.3126631069620033,x=4.783384797137046 color=blue,shape=circle,flag=1,i=323,u=0.6831389508634012,v=0.5164266496909541,w=0.04279502510289964,x=6.430767892082264 color=red,shape=circle,flag=0,i=342,u=0.022581234669267536,v=0.07297945199030628,w=0.24820497536870453,x=4.8817903893282315 color=red,shape=circle,flag=0,i=343,u=0.19109789177540426,v=0.09277368510132841,w=0.25217038732339636,x=6.3438770884826345 color=green,shape=square,flag=0,i=356,u=0.7674272008085286,v=0.341578843118008,w=0.4570224877870851,x=4.830320062215299 color=yellow,shape=triangle,flag=1,i=360,u=0.04059511540040217,v=0.12175098644715998,w=0.4252690428843536,x=6.189923389321772 color=blue,shape=square,flag=1,i=362,u=0.7956525257065691,v=0.6523132120850892,w=0.3200330380984027,x=4.072821305500013 color=blue,shape=triangle,flag=0,i=396,u=0.919100549631871,v=0.8344721671140174,w=0.6244367001946488,x=2.49013750392186 color=yellow,shape=circle,flag=1,i=397,u=0.39319598247811227,v=0.7827012405227943,w=0.6366920960401155,x=4.529206987025983 color=red,shape=square,flag=1,i=398,u=0.5978201290608502,v=0.47272211894407123,w=0.6491217487672196,x=4.940940908354111 color=yellow,shape=triangle,flag=1,i=417,u=0.5968783890703766,v=0.9180606623519213,w=0.43245864839969506,x=6.365943427549951 color=green,shape=circle,flag=1,i=420,u=0.08351408650249226,v=0.54577336738499,w=0.5186728819298164,x=5.084667446471147 color=red,shape=square,flag=0,i=426,u=0.18797364854358312,v=0.15618889495894983,w=0.6473124542782809,x=4.377289005882239 color=purple,shape=triangle,flag=1,i=435,u=0.5533395314187117,v=0.6819531437186439,w=0.7660419032272928,x=6.318450342598268 color=purple,shape=square,flag=0,i=442,u=0.5949936958119856,v=0.44333412244235537,w=0.699091705650557,x=4.0899656611487645 color=yellow,shape=triangle,flag=0,i=450,u=0.42804650823641566,v=0.25454266416065197,w=0.4346507346665569,x=4.277203829116134 color=red,shape=square,flag=0,i=455,u=0.511897747652211,v=0.9985224224854384,w=0.6362898913523033,x=5.154825231103973 color=yellow,shape=circle,flag=1,i=463,u=0.36858008772332884,v=0.5075644639683616,w=0.6316304187169625,x=7.040221898203598 color=red,shape=square,flag=0,i=469,u=0.13286513113313736,v=0.9084234595597834,w=0.6279253576837711,x=5.002168139084499 color=red,shape=triangle,flag=0,i=476,u=0.7869818074820932,v=0.7917840934406875,w=0.4904465717482654,x=7.621374465824963 color=red,shape=square,flag=1,i=485,u=0.0985075545140347,v=0.03323413200681258,w=0.6210493583280738,x=5.397832324814885 color=purple,shape=triangle,flag=0,i=532,u=0.23339001715233743,v=0.18098824995902285,w=0.7538550076607498,x=4.482844983044244 color=red,shape=triangle,flag=1,i=538,u=0.08342205930118507,v=0.5551231727340961,w=0.4969066537203422,x=6.400461402177794 color=red,shape=circle,flag=1,i=543,u=0.27956692255780735,v=0.317716295298317,w=0.3094102421392519,x=4.797498617657461 color=yellow,shape=triangle,flag=1,i=555,u=0.4324861814762554,v=0.6516173501148627,w=0.4391759668010706,x=4.839236316217861 color=red,shape=triangle,flag=0,i=575,u=0.3822743205645871,v=0.13243663787308357,w=0.4885011925291688,x=3.1878336744268148 color=yellow,shape=triangle,flag=1,i=576,u=0.38274055836949383,v=0.06907845482417962,w=0.4464344215456894,x=4.530719037043683 color=orange,shape=triangle,flag=0,i=587,u=0.5175826237797857,v=0.08989091493635304,w=0.9011709461770973,x=4.265854207755811 color=green,shape=square,flag=0,i=597,u=0.8257400998639863,v=0.9139935425693207,w=0.47634534610928053,x=4.535961637121465 color=purple,shape=triangle,flag=0,i=599,u=0.5777696441179225,v=0.1592641459041092,w=0.7360769450811888,x=4.935473950297778 color=purple,shape=triangle,flag=0,i=603,u=0.3445805348101557,v=0.9314586827288921,w=0.7303062345971375,x=6.286891127462662 color=red,shape=square,flag=0,i=610,u=0.6559603758582659,v=0.8146680458330501,w=0.5902924985221454,x=5.82992604692209 color=red,shape=circle,flag=1,i=626,u=0.585144230439763,v=0.6126667717785355,w=0.3169586786449619,x=4.184061048733821 color=yellow,shape=circle,flag=1,i=627,u=0.21946692559859127,v=0.5778782092837894,w=0.6243751940834331,x=4.878526902029357 color=yellow,shape=circle,flag=1,i=642,u=0.9848580578039592,v=0.8703332275688385,w=0.6196888245699355,x=3.733988283596638 color=red,shape=triangle,flag=1,i=649,u=0.489957093971505,v=0.3478765534442614,w=0.4923961471690822,x=5.77651025721577 color=red,shape=triangle,flag=0,i=658,u=0.13416793395996696,v=0.35313428818060877,w=0.503251673831712,x=4.663827900601466 color=green,shape=triangle,flag=1,i=664,u=0.14261008249079687,v=0.749302805217999,w=0.12658931011976782,x=5.415746307714631 color=red,shape=square,flag=0,i=668,u=0.8465455890449235,v=0.9267425085703102,w=0.576114475147851,x=4.414752318165809 color=blue,shape=triangle,flag=1,i=675,u=0.04682538469656261,v=0.08768189741821031,w=0.5999310365332388,x=4.36169952189602 color=red,shape=circle,flag=1,i=692,u=0.7736749647187496,v=0.7843041194779217,w=0.3222390448185294,x=4.918714674895596 color=blue,shape=circle,flag=0,i=703,u=0.8715379458478961,v=0.20256829168055102,w=0.10985276936169859,x=7.997598940922333 color=red,shape=triangle,flag=0,i=709,u=0.98329965475008,v=0.22471614331987888,w=0.5067594140832291,x=6.322260097816005 color=red,shape=square,flag=0,i=711,u=0.17792705971938538,v=0.8342704569425529,w=0.5496181660392127,x=4.489594163882984 color=red,shape=square,flag=1,i=721,u=0.41366768077123217,v=0.7926395050427005,w=0.5500236156239641,x=6.072243219753511 color=green,shape=circle,flag=0,i=732,u=0.8796970347713795,v=0.5095418401519376,w=0.5036523462569609,x=3.732306962687 color=red,shape=circle,flag=0,i=739,u=0.4656141644806484,v=0.43943619960025365,w=0.3389349788256644,x=4.6091252205967415 color=red,shape=square,flag=0,i=743,u=0.7686293918141773,v=0.3860243778849791,w=0.5563945710051195,x=7.100899795404449 color=blue,shape=square,flag=0,i=768,u=0.6142167398249276,v=0.5058741300020686,w=0.35440149163176193,x=4.9375675393287795 color=red,shape=square,flag=0,i=769,u=0.5762503050626411,v=0.9449347972337795,w=0.5396454717504899,x=4.535027823576054 color=yellow,shape=square,flag=1,i=776,u=0.2326699375087975,v=0.41062255056145136,w=0.4582838878078877,x=6.495550613116688 color=red,shape=square,flag=0,i=779,u=0.4794321660481753,v=0.44957239137842164,w=0.534131183348918,x=4.554982584675483 color=green,shape=square,flag=0,i=799,u=0.42442739328635637,v=0.8964958501280098,w=0.47303008264530383,x=6.156675863839864 color=yellow,shape=triangle,flag=1,i=804,u=0.8706684482737265,v=0.8573693836211311,w=0.46816853382829726,x=4.584079169332856 color=red,shape=triangle,flag=1,i=807,u=0.8577713918123153,v=0.297771559336396,w=0.5199360491732843,x=5.164415621374987 color=red,shape=circle,flag=0,i=810,u=0.17018413008657984,v=0.23320478598130245,w=0.35152048053844065,x=5.46076150321937 color=red,shape=circle,flag=0,i=817,u=0.28321334450458735,v=0.3237908657862255,w=0.35109142420998724,x=3.2464133941912263 color=red,shape=circle,flag=0,i=818,u=0.02059623878479,v=0.04460593274894216,w=0.3541282614135311,x=3.554009715185525 color=yellow,shape=circle,flag=1,i=834,u=0.9120488812571834,v=0.6857068784645892,w=0.6173957199588831,x=5.510289113034133 color=red,shape=square,flag=0,i=848,u=0.18649722139766356,v=0.6452719235869846,w=0.5410438287513045,x=5.4189301744621545 color=red,shape=triangle,flag=0,i=861,u=0.02316026733649934,v=0.32759419799888834,w=0.5209360429919869,x=8.050259613054594 color=red,shape=triangle,flag=1,i=893,u=0.0431000918147989,v=0.9368515438540571,w=0.52117938032689,x=4.768735289587635 color=purple,shape=circle,flag=0,i=894,u=0.8677645835678461,v=0.7370785187241339,w=0.4708243010989557,x=4.2195244701460615 color=red,shape=triangle,flag=0,i=897,u=0.3907041450033255,v=0.808274357235241,w=0.5266690643733455,x=6.7868612382218485 color=yellow,shape=square,flag=1,i=917,u=0.8547010348386344,v=0.7356782810796262,w=0.4531511689924275,x=5.774541777078352 color=red,shape=triangle,flag=0,i=928,u=0.4348424420850825,v=0.25987383842479017,w=0.5266497212740388,x=4.759205173519602 color=red,shape=square,flag=0,i=940,u=0.8935268981554093,v=0.23752077743261923,w=0.5303101957654777,x=5.022371854001634 color=blue,shape=square,flag=0,i=965,u=0.03995102094087877,v=0.8687150837087656,w=0.37503067844024807,x=5.538510059726689 color=red,shape=triangle,flag=0,i=968,u=0.7358954709070943,v=0.45034537546711884,w=0.5250268552773686,x=7.418808360536765 color=blue,shape=square,flag=0,i=1015,u=0.5238929594441054,v=0.01866264734687595,w=0.3781919070818389,x=4.298408962228504 color=blue,shape=circle,flag=1,i=1020,u=0.414263129226617,v=0.8304946402876182,w=0.13151094520189244,x=4.397873687920433 color=red,shape=circle,flag=0,i=1026,u=0.277218685176133,v=0.18748462651423042,w=0.39326380124043414,x=5.388221285544738 color=purple,shape=square,flag=0,i=1050,u=0.8386599118627978,v=0.6431386518603193,w=0.6599568630050375,x=5.640658611696019 color=red,shape=square,flag=0,i=1051,u=0.012503475219730498,v=0.17427409937482508,w=0.536474470332281,x=4.28116623157883 color=red,shape=triangle,flag=1,i=1070,u=0.5720273449472987,v=0.37095242731772415,w=0.5260587535784669,x=4.959913496964567 color=purple,shape=square,flag=0,i=1071,u=0.9996465731736793,v=0.12117256465756021,w=0.6561529688463592,x=4.255321150756324 color=green,shape=square,flag=0,i=1093,u=0.055028621071862016,v=0.6915161060781153,w=0.49147467774526704,x=4.7208465539980855 color=green,shape=square,flag=0,i=1094,u=0.6670405529387,v=0.5053591509128329,w=0.49126209783152436,x=5.923108619120157 color=yellow,shape=circle,flag=1,i=1102,u=0.15002349440510832,v=0.3519187041707791,w=0.6022634081227581,x=4.815072718895654 color=blue,shape=triangle,flag=1,i=1116,u=0.7077536911489641,v=0.49036941803135947,w=0.6020556539487175,x=5.137160032805944 color=red,shape=square,flag=1,i=1117,u=0.8695928610948207,v=0.4413106210300576,w=0.526989425543239,x=4.138772211849639 color=green,shape=circle,flag=0,i=1119,u=0.9508887952015431,v=0.8514250527869424,w=0.49511812999518423,x=5.832692930713734 color=red,shape=circle,flag=0,i=1125,u=0.5914223441741909,v=0.6302047728760605,w=0.4093383110513469,x=5.613869369240507 color=green,shape=circle,flag=0,i=1135,u=0.6349780241056121,v=0.1391871575477529,w=0.491816217208502,x=6.240695426540594 color=yellow,shape=square,flag=0,i=1143,u=0.9726268048453478,v=0.7609290425260713,w=0.4677883526425094,x=2.8702824020609667 color=yellow,shape=square,flag=1,i=1153,u=0.5495746127462745,v=0.5020842413939993,w=0.4652783525584822,x=4.702777730880125 color=red,shape=triangle,flag=0,i=1159,u=0.7164639751521532,v=0.7040454818650225,w=0.5336893612529211,x=7.744562940053119 color=red,shape=square,flag=0,i=1163,u=0.23593117318357937,v=0.07314400743565841,w=0.5045049973814437,x=4.73466139311028 color=red,shape=circle,flag=0,i=1170,u=0.5434581028057989,v=0.5661627010968945,w=0.4172475279694751,x=7.37542918069884 color=yellow,shape=square,flag=1,i=1173,u=0.08039265724079736,v=0.832766339096367,w=0.47250864636017365,x=5.664797525706285 color=red,shape=circle,flag=1,i=1210,u=0.9037819831553698,v=0.8406752791956175,w=0.42860730103623285,x=6.883611448821147 color=purple,shape=triangle,flag=0,i=1219,u=0.048515488628120496,v=0.13503804313416723,w=0.6875112402366665,x=5.951608164047156 color=blue,shape=triangle,flag=1,i=1224,u=0.8209941325124394,v=0.6975886986098433,w=0.5944059575518246,x=7.956611465149808 color=green,shape=square,flag=0,i=1245,u=0.6254139945026417,v=0.44235631780910023,w=0.4947154445275026,x=6.094772664571022 color=green,shape=circle,flag=0,i=1247,u=0.5647657502270278,v=0.48865785206231616,w=0.48417050428613967,x=5.314759345651722 color=purple,shape=square,flag=1,i=1281,u=0.8419644842944525,v=0.5689558333095702,w=0.6486389225203539,x=6.764436221990853 color=purple,shape=circle,flag=0,i=1291,u=0.022866144467924898,v=0.38374491731395266,w=0.47488125113633156,x=5.18381226767042 color=yellow,shape=square,flag=1,i=1302,u=0.46763196111581096,v=0.2525360057842123,w=0.4784568397892102,x=3.418117118705274 color=red,shape=circle,flag=0,i=1316,u=0.1851048293861305,v=0.23029591768852398,w=0.44492332341979296,x=5.760852454918667 color=red,shape=triangle,flag=0,i=1318,u=0.3614334841934277,v=0.3172875150096478,w=0.5336359680294116,x=6.845141572695423 color=red,shape=square,flag=0,i=1365,u=0.10240795530976454,v=0.3552096156265375,w=0.47512303248140236,x=5.145112817985559 color=blue,shape=square,flag=0,i=1366,u=0.8519514847713295,v=0.19835341879714474,w=0.3819747805065463,x=3.8274801035623978 color=red,shape=square,flag=0,i=1373,u=0.42611020600750116,v=0.7976170927642009,w=0.4799449965370654,x=3.1684210630654657 color=red,shape=square,flag=0,i=1375,u=0.9928503382180878,v=0.9033585772774038,w=0.4828676064498975,x=4.977104381535792 color=red,shape=triangle,flag=0,i=1378,u=0.0949997630141427,v=0.1855579383737852,w=0.5417557272405064,x=4.523739327972719 color=red,shape=triangle,flag=0,i=1385,u=0.6979899125004204,v=0.03378535128967952,w=0.5452630524923384,x=5.4886108014086 color=purple,shape=square,flag=0,i=1429,u=0.5205545614820511,v=0.7006373872685897,w=0.6432033836710063,x=5.266945662715147 color=blue,shape=triangle,flag=0,i=1433,u=0.9333855793065959,v=0.13457317433354077,w=0.567313117792438,x=4.227344499078499 color=red,shape=square,flag=0,i=1436,u=0.8540777405760767,v=0.5566155288943634,w=0.4727722605809266,x=4.484527380415446 color=purple,shape=triangle,flag=0,i=1444,u=0.07729695867651976,v=0.3898344059504826,w=0.6616033649709776,x=2.5006537206630988 color=red,shape=triangle,flag=0,i=1452,u=0.23007855704668956,v=0.41121885598115004,w=0.5374933633354123,x=4.625441986207416 color=blue,shape=square,flag=1,i=1459,u=0.22262765045632182,v=0.9352664855626638,w=0.3940007578510445,x=4.367014885428804 color=red,shape=circle,flag=1,i=1462,u=0.05269780281162828,v=0.0008025650932757603,w=0.4471177748347405,x=3.7253777762088505 color=purple,shape=square,flag=1,i=1463,u=0.5390058988052654,v=0.4941026498784532,w=0.6302529899909097,x=6.448810781241274 color=red,shape=square,flag=0,i=1469,u=0.9382780379672069,v=0.3315803564492994,w=0.4709422592301563,x=7.478803874367089 color=red,shape=circle,flag=0,i=1470,u=0.3612888647136956,v=0.3900985902100856,w=0.4514271376849851,x=4.346341112284237 color=yellow,shape=circle,flag=1,i=1482,u=0.32477438439891804,v=0.8527410497732805,w=0.578859866256276,x=5.09184064130106 color=red,shape=circle,flag=0,i=1484,u=0.9892899846124164,v=1.0002035172577892,w=0.45576484556727054,x=6.155587409704622 color=blue,shape=triangle,flag=0,i=1486,u=0.13417769775686017,v=0.32044326382695676,w=0.5697875944171061,x=3.611411935519723 color=red,shape=triangle,flag=0,i=1495,u=0.5096319881899956,v=0.9169351211522347,w=0.5402306225183187,x=4.396004686347562 color=yellow,shape=square,flag=1,i=1497,u=0.5519244132067481,v=0.9522672266399553,w=0.48892686507229033,x=5.2077741227745 color=green,shape=square,flag=0,i=1504,u=0.7695790776074829,v=0.6493617013300224,w=0.5062258674295976,x=6.514182432634747 color=red,shape=triangle,flag=0,i=1516,u=0.6884065489552523,v=0.9527958546677516,w=0.5400693011274069,x=5.124098932996773 color=red,shape=triangle,flag=0,i=1519,u=0.9647269269195229,v=0.4098615080327179,w=0.5387660454251227,x=5.082276353255275 color=orange,shape=triangle,flag=0,i=1533,u=0.32904497195507487,v=0.23168161807490417,w=0.8722623057355134,x=5.164071635714438 color=red,shape=square,flag=0,i=1540,u=0.8050354592729326,v=0.8800778311059083,w=0.47775298210709655,x=3.095180099376346 color=purple,shape=triangle,flag=0,i=1569,u=0.3999861324512596,v=0.07313403733425006,w=0.6498648356057545,x=5.182548842463077 color=red,shape=circle,flag=0,i=1573,u=0.23626927515050655,v=0.3242669695209879,w=0.44084393598502025,x=6.114820791664641 color=green,shape=triangle,flag=0,i=1579,u=0.5200009514905543,v=0.5374752601982243,w=0.2354954696805672,x=5.8992869223326485 color=blue,shape=square,flag=0,i=1582,u=0.5183154789173914,v=0.7075622119669978,w=0.3937785908367411,x=5.611654480869177 color=blue,shape=square,flag=0,i=1594,u=0.11151658334971082,v=0.6172273249045909,w=0.3916407637827865,x=3.8261795880638054 color=red,shape=triangle,flag=0,i=1600,u=0.010600089850044125,v=0.18086148061836715,w=0.5481871021051281,x=6.486983620696889 color=red,shape=circle,flag=1,i=1616,u=0.5276503192339859,v=0.6039148669161414,w=0.43904326409278605,x=6.7603585236707 color=orange,shape=square,flag=0,i=1621,u=0.7768568392153472,v=0.7415199227211619,w=0.30004659103299586,x=6.671697402343637 color=red,shape=circle,flag=0,i=1622,u=0.7040363113735977,v=0.6176206363095101,w=0.4359881195527714,x=5.14085836303596 color=blue,shape=circle,flag=0,i=1645,u=0.972623992029269,v=0.023971597936596867,w=0.1673474138772468,x=5.620708271084801 color=blue,shape=circle,flag=1,i=1648,u=0.6994166196793291,v=0.7487522475833888,w=0.1685666005757015,x=6.039438356676449 color=blue,shape=circle,flag=1,i=1668,u=0.5632676790950631,v=0.6804706769536457,w=0.16774706277951218,x=3.464319925942332 color=red,shape=square,flag=0,i=1672,u=0.4087041744414175,v=0.8070739084193961,w=0.4990316692688822,x=4.852123584076959 color=blue,shape=triangle,flag=0,i=1675,u=0.8049838802477126,v=0.5857178387398677,w=0.5707520736614857,x=4.101240877591373 color=red,shape=triangle,flag=0,i=1681,u=0.3729567091913156,v=0.6255047250460374,w=0.5546256899343207,x=5.7542960199220134 color=red,shape=circle,flag=1,i=1689,u=0.6505984196326361,v=0.6708260329889433,w=0.4398215422347821,x=5.067703862320497 color=orange,shape=triangle,flag=1,i=1693,u=0.16525507437570952,v=0.38752816874246854,w=0.8611704617935338,x=4.531213856608208 color=blue,shape=square,flag=0,i=1724,u=0.9257134507887343,v=0.5484847437481889,w=0.41306693393231186,x=3.7813348129809774 color=blue,shape=circle,flag=0,i=1738,u=0.07736655692516092,v=0.7094747964905463,w=0.1793050216454373,x=6.083634710543372 color=blue,shape=square,flag=0,i=1762,u=0.3157995075758133,v=0.7834804805765219,w=0.4088692267189296,x=5.1672992424980615 color=red,shape=triangle,flag=0,i=1779,u=0.652024124990294,v=0.08417005612192818,w=0.5341736009141594,x=6.259712945790969 color=red,shape=square,flag=0,i=1780,u=0.2390150805932536,v=0.29510181237732014,w=0.4927936662914188,x=6.192807475537431 color=red,shape=triangle,flag=1,i=1790,u=0.635969718915859,v=0.851056850456277,w=0.5413944877529929,x=5.428855112841159 color=yellow,shape=circle,flag=1,i=1798,u=0.6608164196933896,v=0.36011968370773173,w=0.5629517068116978,x=6.35357925019693 color=red,shape=circle,flag=0,i=1806,u=0.7744572161118486,v=0.6923633451408633,w=0.45034685773693056,x=5.010467953363613 color=red,shape=circle,flag=1,i=1830,u=0.21217432304365524,v=0.2967593161416136,w=0.4553816455432691,x=4.659852515579381 color=blue,shape=triangle,flag=0,i=1844,u=0.5636660445656244,v=0.8716846236127672,w=0.5625196889904541,x=4.866601675820479 color=purple,shape=circle,flag=0,i=1856,u=0.24161151059540176,v=0.5928568671833314,w=0.4611930047170266,x=5.136306869359727 color=red,shape=square,flag=1,i=1858,u=0.2815984094528883,v=0.9101405343282991,w=0.49915629018606633,x=4.776941788653463 color=yellow,shape=circle,flag=1,i=1870,u=0.5652799060258915,v=0.2932807976729944,w=0.5579466819473858,x=5.789771169762942 color=purple,shape=circle,flag=0,i=1876,u=0.3165066469353667,v=0.28941633786079357,w=0.4604066818976131,x=5.837141646184505 color=orange,shape=square,flag=0,i=1885,u=0.8079311983747106,v=0.8685956833908394,w=0.3116410800256374,x=4.390864584500387 color=red,shape=triangle,flag=0,i=1891,u=0.15719235042957025,v=0.831884921837593,w=0.5442701763072955,x=5.217201497530535 color=red,shape=square,flag=0,i=1892,u=0.39483640410474385,v=0.32875398270302847,w=0.49948833443251855,x=5.005502977323175 color=blue,shape=circle,flag=1,i=1920,u=0.6921050905721352,v=0.6372926162748623,w=0.22598792972014145,x=6.271379897001558 color=yellow,shape=square,flag=1,i=1923,u=0.8770166356180739,v=0.4753410604663104,w=0.4973159198588518,x=6.153753768811987 color=red,shape=triangle,flag=0,i=1939,u=0.22274687616209066,v=0.05820766875391936,w=0.5279811896729458,x=5.837491222209763 color=blue,shape=triangle,flag=1,i=1947,u=0.9017978821708391,v=0.7636216486777394,w=0.5584057144333926,x=5.37225281233222 color=red,shape=square,flag=1,i=1950,u=0.195954498947297,v=0.8407712819350194,w=0.5082386567466489,x=3.675549873683804 color=orange,shape=square,flag=0,i=1957,u=0.38417441628136606,v=0.36836651319364344,w=0.3179537476836239,x=5.924890299398008 color=purple,shape=square,flag=0,i=1958,u=0.012034648465485631,v=0.8937509799107239,w=0.6059859114206745,x=4.180251632603731 color=red,shape=square,flag=0,i=1960,u=0.7348107158418772,v=0.8830348086865724,w=0.5096404025921634,x=3.4694534736043026 color=purple,shape=triangle,flag=0,i=1961,u=0.3918413244226422,v=0.32805497520431326,w=0.6183627898972449,x=1.6595595062090327 color=blue,shape=square,flag=1,i=1964,u=0.05732382015880355,v=0.9394672461010009,w=0.4145573007868255,x=5.561786594119987 color=red,shape=square,flag=0,i=2004,u=0.010527450646065972,v=0.287701248250263,w=0.5045892743275767,x=3.236713744202779 color=red,shape=square,flag=0,i=2039,u=0.22731984900916336,v=0.8983570756911684,w=0.5008712617811221,x=4.9984232085745495 color=red,shape=square,flag=0,i=2049,u=0.5279313363373115,v=0.2409604806693607,w=0.49790560652173327,x=4.503685217976276 color=green,shape=square,flag=0,i=2051,u=0.794245842750217,v=0.7402091093823174,w=0.4970912079728164,x=4.0373967594623075 color=purple,shape=circle,flag=0,i=2054,u=0.42181769556812987,v=0.050792107711367884,w=0.4716000837281641,x=5.921232462690938 color=red,shape=triangle,flag=0,i=2055,u=0.8078666014729401,v=0.8869222481916494,w=0.5014110450061955,x=7.381193838186551 color=yellow,shape=square,flag=1,i=2061,u=0.5665190122003364,v=0.7545684264087924,w=0.494033380654766,x=3.718731030356641 color=green,shape=triangle,flag=0,i=2062,u=0.17502291082114974,v=0.10387535544372395,w=0.28736501114742885,x=5.42969308340746 color=blue,shape=square,flag=0,i=2063,u=0.3423782355214169,v=0.8918773539993816,w=0.41800999797758365,x=5.967516795513261 color=orange,shape=square,flag=0,i=2070,u=0.8820268190136146,v=0.9171285154846617,w=0.31471547686648177,x=5.78334087255119 color=yellow,shape=square,flag=1,i=2075,u=0.07613514761919937,v=0.5292282550348139,w=0.49149695903359814,x=6.060678779186645 color=yellow,shape=square,flag=1,i=2088,u=0.7733220160378064,v=0.5368010271323386,w=0.49340954649249114,x=5.413943854861395 color=red,shape=square,flag=1,i=2091,u=0.7907662511318669,v=0.41079315581366094,w=0.5011753270900353,x=5.446596187855135 color=red,shape=triangle,flag=1,i=2096,u=0.473341079736037,v=0.722277726933131,w=0.5067185834520945,x=4.882622467240705 color=orange,shape=square,flag=1,i=2098,u=0.6083933210185691,v=0.07344894561332505,w=0.3206503384346204,x=6.085497216074039 color=yellow,shape=square,flag=1,i=2102,u=0.2450713937310044,v=0.37435737888140386,w=0.4893801364954174,x=5.293791266114078 color=red,shape=triangle,flag=0,i=2122,u=0.9178243551654847,v=0.8813529027220147,w=0.5037787467721317,x=2.471433669632065 color=red,shape=square,flag=0,i=2123,u=0.9035972672420634,v=0.14095059055333659,w=0.49238746681138607,x=4.908694594785998 color=red,shape=circle,flag=0,i=2127,u=0.20415702895916688,v=0.19097359248059662,w=0.46445760154750326,x=3.6884724690021478 color=purple,shape=triangle,flag=0,i=2172,u=0.05061974885761933,v=0.4436866147376577,w=0.6114885039462646,x=4.131496827328981 color=blue,shape=triangle,flag=1,i=2180,u=0.7573212805370948,v=0.859274873940234,w=0.5524026174591629,x=4.305043355957215 color=red,shape=square,flag=0,i=2184,u=0.5362996035868647,v=0.4812487672485227,w=0.49566643046175485,x=5.476429549181639 color=red,shape=triangle,flag=0,i=2188,u=0.5413782361674907,v=0.446823449554417,w=0.5028345618617849,x=3.5493003465806687 color=red,shape=square,flag=0,i=2209,u=0.6056101890433508,v=0.005237433858933049,w=0.4791373968143102,x=5.898746077346092 color=red,shape=triangle,flag=1,i=2212,u=0.007668441317185581,v=0.46783886089685867,w=0.5068550462951366,x=2.8819823497202006 color=red,shape=triangle,flag=0,i=2218,u=0.7051291422518633,v=0.4683361714954013,w=0.50786078207472,x=5.064898326542557 color=red,shape=triangle,flag=0,i=2220,u=0.3917063706282701,v=0.358672920459875,w=0.5035119725326376,x=6.046505939663483 color=blue,shape=triangle,flag=1,i=2234,u=0.9046419701146681,v=0.24662896173218762,w=0.5468128715558063,x=5.762357572121442 color=blue,shape=circle,flag=1,i=2235,u=0.6298916188968251,v=0.5544412686634678,w=0.24476671639508038,x=3.4247663322242565 color=red,shape=square,flag=1,i=2237,u=0.4181981748246649,v=0.7171836376857676,w=0.48304487521116446,x=5.131417000911822 color=yellow,shape=triangle,flag=1,i=2242,u=0.706304493304751,v=0.6313225514654566,w=0.47487679584787923,x=3.2852244166106783 color=green,shape=triangle,flag=0,i=2246,u=0.7535899572571703,v=0.29430202078094647,w=0.3153175896308371,x=5.80578311046114 color=green,shape=triangle,flag=0,i=2251,u=0.5021607766323833,v=0.4436518391465001,w=0.32157678720951255,x=4.700097185905772 color=purple,shape=square,flag=0,i=2256,u=0.19342782566837624,v=0.5784468640751923,w=0.594075840734447,x=4.253747745978391 color=red,shape=triangle,flag=0,i=2260,u=0.13652640368197466,v=0.26322898842374454,w=0.4985684316788368,x=6.087846833969415 color=blue,shape=triangle,flag=0,i=2262,u=0.5046089831646238,v=0.7618432314709886,w=0.5507671106047716,x=4.288243327121001 color=green,shape=triangle,flag=0,i=2274,u=0.9080917087139062,v=0.11801530617669154,w=0.31761153702179556,x=4.817233799135541 color=yellow,shape=circle,flag=1,i=2312,u=0.7122310419454759,v=0.49080032675698926,w=0.5494842698854607,x=7.207714292671764 color=red,shape=square,flag=1,i=2326,u=0.0827312970778381,v=0.5517273827729732,w=0.48938352588506207,x=4.803961761077759 color=purple,shape=triangle,flag=0,i=2331,u=0.48216200948294474,v=0.6053897887850926,w=0.6146269091327969,x=1.7550587684513594 color=green,shape=square,flag=1,i=2332,u=0.8712104729844775,v=0.44649692054762347,w=0.5075555968045227,x=6.5094059131819035 color=blue,shape=circle,flag=0,i=2372,u=0.059421255989027144,v=0.20003870343355956,w=0.2555347210848312,x=5.2061566797210865 color=purple,shape=circle,flag=0,i=2373,u=0.9228566617233005,v=0.4497763107864796,w=0.4801253916143827,x=5.695378243720455 color=red,shape=triangle,flag=0,i=2378,u=0.11574963698124985,v=0.42012103012753677,w=0.5117799890768516,x=7.525336843016226 color=red,shape=square,flag=0,i=2382,u=0.7293913901135854,v=0.19408134570402402,w=0.4905942534785655,x=3.2561142488310395 color=blue,shape=triangle,flag=1,i=2397,u=0.042930931898611746,v=0.28906353164388765,w=0.5561655237204032,x=6.041227599000723 color=red,shape=circle,flag=0,i=2399,u=0.2745068723223836,v=0.3216275508472469,w=0.4910366611875597,x=6.366348407756217 color=blue,shape=square,flag=0,i=2407,u=0.7569059264383019,v=0.6815621977881376,w=0.41839720783581624,x=5.599821803991174 color=blue,shape=circle,flag=0,i=2415,u=0.04910154660574528,v=0.5404958756111141,w=0.26731849643366473,x=2.210917527535466 color=red,shape=square,flag=1,i=2431,u=0.38378504852300466,v=0.11445015005595527,w=0.49355539228753786,x=5.146756570128739 color=red,shape=square,flag=1,i=2432,u=0.5414289671593087,v=0.37429785299101825,w=0.4981634122502311,x=4.176700025555928 color=red,shape=circle,flag=0,i=2437,u=0.600093686235087,v=0.5597042104813567,w=0.503798582016451,x=5.632456469655376 color=yellow,shape=square,flag=1,i=2458,u=0.18218611935029128,v=0.2983612572175376,w=0.47416831683179905,x=6.609029907524025 color=yellow,shape=circle,flag=0,i=2461,u=0.867165565736646,v=0.9025956363358136,w=0.5523459461012876,x=3.019338685410745 color=red,shape=circle,flag=0,i=2464,u=0.4721625074822319,v=0.5400513390350403,w=0.5078545767976087,x=4.92582011506819 color=yellow,shape=square,flag=1,i=2467,u=0.09361025430824799,v=0.6677738551374311,w=0.47706568665162646,x=4.939847642538352 color=red,shape=triangle,flag=0,i=2469,u=0.3694207052198244,v=0.5447722282344535,w=0.5059100136768411,x=4.058121653794159 color=red,shape=square,flag=0,i=2483,u=0.055122781482241257,v=0.8842125911938413,w=0.5008817538811919,x=4.217476992659292 color=blue,shape=triangle,flag=0,i=2489,u=0.4834525731042024,v=0.2615842902696851,w=0.5501809269547815,x=4.504208776801217 color=red,shape=square,flag=1,i=2509,u=0.10929196628953552,v=0.23255874008676836,w=0.49260009719904424,x=6.36244069119153 color=yellow,shape=square,flag=1,i=2514,u=0.19316644777126923,v=0.8196598290451167,w=0.473664001595597,x=6.193348662471713 color=red,shape=square,flag=0,i=2515,u=0.9993965134826659,v=0.3040179595308051,w=0.48973830078731395,x=4.653813116671806 color=red,shape=triangle,flag=0,i=2518,u=0.787025573313828,v=0.15257056485934828,w=0.5140703781970453,x=5.3525068526509765 color=red,shape=square,flag=0,i=2527,u=0.20767700100511788,v=0.6461450152555049,w=0.49067841457062716,x=4.783562262794988 color=red,shape=square,flag=0,i=2530,u=0.6665993889100141,v=0.8103930799527951,w=0.48807857534214427,x=5.520916299675705 color=red,shape=square,flag=0,i=2539,u=0.7423471131055149,v=0.49712551111307623,w=0.4931271699694902,x=4.749177198851762 color=blue,shape=circle,flag=0,i=2545,u=0.5982593200568088,v=0.8652975100402089,w=0.275852335782209,x=4.845407519918545 color=red,shape=square,flag=0,i=2549,u=0.856675161091566,v=0.3114165196831775,w=0.4975783715234556,x=6.130189441343838 color=purple,shape=triangle,flag=0,i=2550,u=0.06926972665146325,v=0.7287032767882019,w=0.5889125005445655,x=4.359849328099409 color=orange,shape=triangle,flag=0,i=2553,u=0.9508276473016848,v=0.289460587769503,w=0.8373034263773781,x=6.352831315473359 color=red,shape=triangle,flag=0,i=2563,u=0.0013952880940285572,v=0.09067846202769703,w=0.5105621465435575,x=4.3689078711272495 color=purple,shape=circle,flag=0,i=2571,u=0.6198746737775912,v=0.6117615279691757,w=0.48773872964753007,x=5.367637765862085 color=red,shape=triangle,flag=0,i=2573,u=0.04812975524569185,v=0.552570125247716,w=0.5059278213119353,x=5.238843121110229 color=blue,shape=circle,flag=0,i=2591,u=0.46654625780632264,v=0.5178845807488622,w=0.27839243430274463,x=6.439167354146311 color=red,shape=circle,flag=0,i=2599,u=0.3893482722012248,v=0.319657811225841,w=0.5017287040828957,x=5.166054157250497 color=blue,shape=triangle,flag=0,i=2604,u=0.6133335082909767,v=0.15706338849664125,w=0.546382973254671,x=6.129714467673984 color=green,shape=circle,flag=0,i=2613,u=0.860428112262208,v=0.08499919357746821,w=0.4903153702211547,x=4.6590969040292585 color=red,shape=triangle,flag=0,i=2615,u=0.47228486575544304,v=0.4120308924743207,w=0.5075734917977525,x=4.775638269918454 color=red,shape=triangle,flag=0,i=2623,u=0.7621158578472799,v=0.631755186715638,w=0.512276263258318,x=4.755444596413841 color=purple,shape=square,flag=0,i=2635,u=0.34455376959146433,v=0.21303267764916645,w=0.5755372207242745,x=3.5638766553560086 color=red,shape=square,flag=1,i=2641,u=0.7965505613254553,v=0.0818371373308433,w=0.48195315152791485,x=5.339188550625941 color=red,shape=circle,flag=0,i=2651,u=0.46662794315369327,v=0.5574202226941675,w=0.5052439560979188,x=5.609302980122653 color=red,shape=square,flag=0,i=2658,u=0.8491361399463294,v=0.4187001806314964,w=0.47897319519987636,x=4.8801586640154495 color=red,shape=triangle,flag=1,i=2667,u=0.29579261872209206,v=0.7019093817439674,w=0.50766809234967,x=6.228154313160498 color=red,shape=circle,flag=1,i=2668,u=0.2712619135025529,v=0.3281769529113354,w=0.5038320732930575,x=4.04584386589855 color=purple,shape=square,flag=0,i=2670,u=0.939866358287322,v=0.16458050042115857,w=0.5828959125996166,x=5.5577033688723505 color=purple,shape=circle,flag=0,i=2676,u=0.2824853153170499,v=0.20800956788434943,w=0.4947041835530817,x=5.379239803600743 color=orange,shape=triangle,flag=0,i=2681,u=0.14410249953214505,v=0.1369398445487081,w=0.8249877700073767,x=5.183498721719421 color=red,shape=triangle,flag=1,i=2711,u=0.585818098844941,v=0.24354525693445694,w=0.49926327483226424,x=4.0251751521466606 color=blue,shape=square,flag=1,i=2758,u=0.20431293728239353,v=0.6307312881241436,w=0.43724078843695274,x=4.966823103521364 color=red,shape=triangle,flag=0,i=2760,u=0.466769578208979,v=0.10669816704947244,w=0.48928236874997666,x=4.022452582451303 color=red,shape=circle,flag=0,i=2763,u=0.8540259816077556,v=0.8057968243570277,w=0.5156569287403475,x=4.366267337764332 color=blue,shape=circle,flag=1,i=2769,u=0.26604661865892987,v=0.784638388252735,w=0.3015050382678674,x=7.025971487472547 color=blue,shape=triangle,flag=1,i=2779,u=0.06503788484286777,v=0.7301736002489201,w=0.5563078532631365,x=3.0671895433922582 color=orange,shape=square,flag=0,i=2784,u=0.6720087181027392,v=0.531597336406085,w=0.3189520919676537,x=4.22010568710081 color=green,shape=square,flag=1,i=2793,u=0.6830203826405684,v=0.15743886622481862,w=0.5279821971362703,x=3.8051266229645573 color=red,shape=square,flag=0,i=2807,u=0.02423949916367385,v=0.8786152407555577,w=0.48273103815866486,x=3.809563031581092 color=green,shape=triangle,flag=0,i=2810,u=0.2515594916201451,v=0.31933380887633367,w=0.3636603986837392,x=5.934139909192768 color=purple,shape=square,flag=1,i=2822,u=0.34075820160710024,v=0.23532145172796826,w=0.5805775413458969,x=4.495962024253348 color=yellow,shape=circle,flag=1,i=2836,u=0.4213295413705884,v=0.35402689626709216,w=0.5240471070806512,x=5.6017322680647785 color=blue,shape=square,flag=1,i=2837,u=0.4854078253161348,v=0.275549753634141,w=0.4432543288891906,x=5.022679046204014 color=blue,shape=circle,flag=1,i=2899,u=0.011225865347384345,v=0.7596278939214351,w=0.2973899363809186,x=4.024307044697272 color=yellow,shape=circle,flag=1,i=2904,u=0.060127079283722185,v=0.07991197701318664,w=0.5330818382412245,x=4.650117185226596 color=red,shape=triangle,flag=0,i=2913,u=0.17119817923714076,v=0.5355228917196253,w=0.48173555768168314,x=4.29692961473938 color=red,shape=square,flag=0,i=2917,u=0.5767756211798936,v=0.053820042841727034,w=0.46485144533441763,x=6.035228756502684 color=blue,shape=square,flag=0,i=2929,u=0.7203315117368787,v=0.21719762158746425,w=0.4462166458471962,x=4.209121745669645 color=green,shape=circle,flag=0,i=2961,u=0.5760332357877725,v=0.5368336322474956,w=0.49200327921124554,x=5.648004450093005 color=red,shape=triangle,flag=1,i=2970,u=0.08962471199119348,v=0.193781073839137,w=0.478973743753035,x=6.0997977177612706 color=red,shape=circle,flag=0,i=2976,u=0.7899621036244977,v=0.7271308924244587,w=0.5247304174521686,x=5.708568407328053 color=orange,shape=triangle,flag=1,i=3039,u=0.03584605513790595,v=0.5494095902256649,w=0.8220909065564673,x=5.80251279122092 color=yellow,shape=triangle,flag=1,i=3053,u=0.9545603543188562,v=0.28481029091550514,w=0.490004380848622,x=5.7383831216909575 color=blue,shape=triangle,flag=0,i=3097,u=0.5079167708283442,v=0.9909569175762811,w=0.5331655908704808,x=5.227266519235796 color=yellow,shape=square,flag=1,i=3100,u=0.7095883140937627,v=0.24693530853911083,w=0.4878625284719338,x=4.62163610402542 color=red,shape=triangle,flag=1,i=3109,u=0.6423334769004939,v=0.7672655901818572,w=0.5085621363441877,x=5.159008562926921 color=red,shape=square,flag=0,i=3110,u=0.7379664304456591,v=0.5526373549483992,w=0.501312078238629,x=4.873123746295923 color=red,shape=circle,flag=0,i=3139,u=0.04835898233323954,v=-0.03964684310055758,w=0.5263660881848111,x=5.3758779366493625 color=red,shape=square,flag=1,i=3143,u=0.43972972392734666,v=0.9073346476529275,w=0.5063542244408268,x=5.345589517721543 color=blue,shape=square,flag=0,i=3146,u=0.8436718531141385,v=0.30178479630228927,w=0.4448269148693266,x=7.452227239754201 color=blue,shape=triangle,flag=0,i=3172,u=0.18016375932930018,v=0.29903916667709207,w=0.5247628061736151,x=3.9126252951629135 color=red,shape=circle,flag=0,i=3199,u=0.48902546841027794,v=0.4552351188158146,w=0.5188290321435243,x=5.112220714699938 color=yellow,shape=square,flag=1,i=3217,u=0.11659672177986369,v=0.45709615572803697,w=0.5043422260876161,x=4.226149315453072 color=purple,shape=square,flag=0,i=3234,u=0.8611706127248784,v=0.11899955602660062,w=0.5576943173830387,x=7.169704102126839 color=red,shape=square,flag=1,i=3238,u=0.28766545256300513,v=0.23054782068431967,w=0.5070167484771201,x=4.462784514269713 color=red,shape=square,flag=0,i=3242,u=0.3818565625270237,v=0.7635570067058998,w=0.5066415443480794,x=4.3118647467020095 color=yellow,shape=triangle,flag=1,i=3258,u=0.17679254082047402,v=0.7230275416945412,w=0.49804435923705764,x=5.390455126526775 color=green,shape=triangle,flag=0,i=3291,u=0.4160663781535642,v=0.7234505787229104,w=0.369071552135882,x=4.8965924838132935 color=purple,shape=triangle,flag=0,i=3305,u=0.785074853942615,v=0.4428660270881599,w=0.558984242302829,x=3.493968237313094 color=orange,shape=square,flag=0,i=3321,u=0.33728057367933106,v=0.9510575847640207,w=0.3345443373685077,x=6.16707538332792 color=red,shape=square,flag=0,i=3323,u=0.9871076174950064,v=0.8155890910957214,w=0.5016892144614107,x=3.807943574802668 color=yellow,shape=square,flag=1,i=3325,u=0.11895505800593942,v=0.3177824452328297,w=0.5028384303248526,x=2.958853038706725 color=red,shape=circle,flag=0,i=3334,u=0.9342380991119758,v=1.0265406115139653,w=0.5282652844829879,x=5.096372390301005 color=red,shape=triangle,flag=0,i=3342,u=0.06853001540725634,v=0.21518931089495796,w=0.5092400339915257,x=3.111120414030981 color=red,shape=square,flag=0,i=3355,u=0.15868707140782912,v=0.8912603126080899,w=0.4974993376818556,x=4.139622205834469 color=red,shape=square,flag=0,i=3377,u=0.44261900534999477,v=0.22156014384391187,w=0.4981056401951789,x=3.4482408274879326 color=red,shape=triangle,flag=0,i=3383,u=0.1975740843420113,v=0.694066274381527,w=0.5099143602428216,x=6.278038820938137 color=blue,shape=square,flag=1,i=3384,u=0.6494987803573309,v=0.10428905425407242,w=0.4638675835598705,x=5.017911147785691 color=orange,shape=triangle,flag=1,i=3390,u=0.7626521312629074,v=0.7884860306182669,w=0.8041098361892922,x=3.3786922967553568 color=red,shape=triangle,flag=1,i=3405,u=0.29986310508342595,v=0.4665669025486415,w=0.5035005171777974,x=5.287648152836879 color=orange,shape=square,flag=0,i=3407,u=0.6569265707155644,v=0.3129012234653398,w=0.3418801239588996,x=1.4936798534555953 color=purple,shape=triangle,flag=0,i=3424,u=0.6709158812243344,v=0.9902163309577701,w=0.5583023290102405,x=3.299970219543622 color=orange,shape=square,flag=1,i=3427,u=0.5542951145301398,v=0.1443227656777426,w=0.33899948644371813,x=4.305918243540835 color=purple,shape=square,flag=0,i=3441,u=0.2798375437463839,v=0.9679266172102754,w=0.5552404089697491,x=6.526454003994018 color=yellow,shape=square,flag=1,i=3455,u=0.9750136599046068,v=0.40439261677513194,w=0.5114865981431348,x=5.37249037290091 color=purple,shape=circle,flag=0,i=3465,u=0.6309531739733012,v=0.20965858831535633,w=0.4915931289679595,x=4.744129028484625 color=purple,shape=square,flag=0,i=3467,u=0.12227601731152626,v=0.6657577272166397,w=0.5516707923681236,x=6.118030228989158 color=green,shape=triangle,flag=1,i=3470,u=0.6075052268611216,v=0.8471110240351473,w=0.38138320578866713,x=4.131367985956812 color=blue,shape=square,flag=1,i=3477,u=0.5342263588773409,v=0.4583144809407387,w=0.47952666325723603,x=4.314116433880872 color=red,shape=triangle,flag=0,i=3479,u=0.7629680483968369,v=0.4851010795836088,w=0.5062802072376592,x=4.640328795473425 color=yellow,shape=triangle,flag=1,i=3496,u=0.22226409991261276,v=0.25514199825301653,w=0.48929984054123293,x=4.29108639305515 color=red,shape=circle,flag=0,i=3498,u=0.5025342202643073,v=0.5193089434912787,w=0.5076410961575311,x=7.5163195300728445 color=purple,shape=circle,flag=0,i=3502,u=0.6127220192423671,v=0.42124237189082436,w=0.4903910646042732,x=6.69716264312309 color=green,shape=square,flag=1,i=3530,u=0.31349264736927074,v=0.22359313446706852,w=0.5264958103979744,x=4.947703594485797 color=red,shape=triangle,flag=1,i=3542,u=0.5488528555599972,v=0.14731891743885583,w=0.5205827627260905,x=4.907192591258627 color=red,shape=circle,flag=0,i=3551,u=0.2573426126511935,v=0.26880369068162485,w=0.5051868939434375,x=4.283511251193726 color=red,shape=triangle,flag=0,i=3557,u=0.7281939031315208,v=0.7105692440420169,w=0.5250568231767727,x=4.225341474471109 color=purple,shape=triangle,flag=0,i=3588,u=0.9114219545246541,v=0.9454991714310369,w=0.5606932119266484,x=5.579409174036885 color=yellow,shape=circle,flag=1,i=3592,u=0.25106457537004534,v=0.9189161472825008,w=0.5502393699709364,x=4.629742960614238 color=red,shape=triangle,flag=0,i=3612,u=0.2624978784252636,v=0.22206817539475454,w=0.5238730041174808,x=3.293566613899943 color=blue,shape=circle,flag=1,i=3616,u=0.8548431579124808,v=0.4989623130006362,w=0.3339426415875795,x=3.696785877560498 color=green,shape=circle,flag=0,i=3619,u=0.4784857910983109,v=0.5493495527943834,w=0.4819892327327133,x=6.703865601324473 color=yellow,shape=triangle,flag=1,i=3638,u=0.5681423563525043,v=0.7364416318425555,w=0.48057415644311974,x=4.5660100665444014 color=red,shape=square,flag=1,i=3667,u=0.23130521649286728,v=0.9381273139743299,w=0.48009597176641444,x=5.397341753984847 color=red,shape=circle,flag=0,i=3669,u=0.9314245382696817,v=0.9674373579337011,w=0.5132085419267511,x=5.481596451971721 color=red,shape=triangle,flag=0,i=3692,u=0.544472556395205,v=0.11951193848308495,w=0.5196415119222436,x=5.384614938904473 color=blue,shape=circle,flag=1,i=3706,u=0.0029050316374207297,v=0.6383605275040843,w=0.34390644347128174,x=3.3217254020358866 color=yellow,shape=triangle,flag=1,i=3711,u=0.8830172834029085,v=0.0976486136749366,w=0.4671083759493429,x=6.758219613098135 color=purple,shape=square,flag=0,i=3717,u=0.30507324254754,v=0.7580944229000848,w=0.5547429873740861,x=5.920423913087702 color=green,shape=square,flag=0,i=3720,u=0.7484207921073818,v=0.6812830924610436,w=0.49879495046941286,x=5.309172286057781 color=red,shape=square,flag=0,i=3727,u=0.2871708733313212,v=0.7441603570837213,w=0.4826618004789263,x=5.326089833147184 color=red,shape=square,flag=0,i=3736,u=0.6731464315461275,v=0.8142237150005265,w=0.4836395285993182,x=4.162353571125508 color=blue,shape=circle,flag=0,i=3737,u=0.7125529509526801,v=0.9945516400071723,w=0.34771246879360596,x=6.006278483191809 color=red,shape=triangle,flag=1,i=3740,u=0.6352327108932165,v=0.3302652448233153,w=0.5199029809032459,x=5.503021380321466 color=red,shape=triangle,flag=0,i=3745,u=0.26950091413397326,v=0.20488907698806225,w=0.5197578213189719,x=5.510190145440178 color=red,shape=square,flag=1,i=3753,u=0.5650541503977822,v=0.9139666513927299,w=0.486154043146944,x=3.0724619744871817 color=yellow,shape=square,flag=1,i=3778,u=0.5947707471316804,v=0.09026045684055795,w=0.4964365067198076,x=4.830669326396104 color=red,shape=triangle,flag=0,i=3783,u=0.23109195853995956,v=0.36449444195718883,w=0.5224561596699105,x=3.8821579043978804 color=red,shape=triangle,flag=0,i=3792,u=0.08616804062055272,v=0.8126508574261648,w=0.5233142649552321,x=7.9621859867573725 color=green,shape=triangle,flag=0,i=3800,u=0.3719056969079264,v=0.4862618905657431,w=0.4065991004232053,x=4.443325054201435 color=green,shape=square,flag=1,i=3839,u=0.5469614915238294,v=0.3072050190333283,w=0.4951257220963446,x=5.442782750264191 color=red,shape=triangle,flag=1,i=3843,u=0.63750977846767,v=0.004933372974431416,w=0.5069261041379488,x=3.6004625092063005 color=red,shape=triangle,flag=0,i=3847,u=0.4792497809968481,v=0.23042814116269672,w=0.5105283292600247,x=5.182239155954865 color=red,shape=circle,flag=0,i=3852,u=0.6258776262265322,v=0.578436676444718,w=0.5010873044116889,x=4.0170195022323965 color=red,shape=square,flag=1,i=3853,u=0.17872649913027228,v=0.2683197014208172,w=0.48836074729380285,x=4.798004218704503 color=green,shape=triangle,flag=0,i=3865,u=0.34830225374577395,v=0.7007829632717277,w=0.4092352482005258,x=4.830443606736057 color=green,shape=circle,flag=1,i=3867,u=0.07527024915669844,v=0.03535630586767424,w=0.4742796270589179,x=3.3261008085136528 color=yellow,shape=square,flag=0,i=3880,u=0.9219460612150782,v=0.838447974289432,w=0.49181308071483315,x=4.51314563564714 color=purple,shape=triangle,flag=0,i=3882,u=0.7721871261531433,v=0.8769023760773738,w=0.5677559622434847,x=3.1988096810546964 color=red,shape=square,flag=0,i=3886,u=0.9658606990028249,v=0.38336621536381843,w=0.480800207772279,x=6.603932501820694 color=red,shape=circle,flag=0,i=3887,u=0.065543174726716,v=0.06552331298811505,w=0.49656529536436195,x=5.504627088037929 color=red,shape=triangle,flag=0,i=3893,u=0.6757353069418544,v=0.9642423797735116,w=0.5092994498974618,x=3.6985647200819507 color=red,shape=square,flag=0,i=3916,u=0.9626445334664495,v=0.5516233097517408,w=0.4770575250413808,x=5.997423877021141 color=green,shape=triangle,flag=0,i=3920,u=0.9194195238971357,v=0.5288738098195129,w=0.4101493645615294,x=6.119935959628971 color=red,shape=square,flag=0,i=3922,u=0.09032982008561452,v=0.0008107480968789771,w=0.47081635593282695,x=4.580372453762882 color=red,shape=square,flag=0,i=3924,u=0.005483716581601961,v=0.15863307151489492,w=0.4671178312000501,x=6.133005185525068 color=blue,shape=circle,flag=1,i=3931,u=0.8902947073598717,v=0.9040755396991641,w=0.3577299631520571,x=6.460963763579916 color=red,shape=triangle,flag=0,i=3938,u=0.1308631487570372,v=0.7188896777638393,w=0.5099137483712004,x=2.6886882935932532 color=yellow,shape=circle,flag=1,i=3940,u=0.3214366344529531,v=0.32542143328187734,w=0.5573015922411075,x=4.287931687032514 color=green,shape=triangle,flag=1,i=3951,u=0.8896811661805898,v=0.9602687863114365,w=0.41539297870639225,x=3.688485842795396 color=red,shape=circle,flag=1,i=3973,u=0.5501212863905588,v=0.5060391827174543,w=0.4914473165563479,x=4.517096929825123 color=red,shape=circle,flag=1,i=3978,u=0.8784076422313635,v=0.8071059960737477,w=0.49074922430355267,x=5.357454971490885 color=red,shape=circle,flag=1,i=4000,u=0.05490416175132373,v=0.07392337815122155,w=0.49416101516594396,x=5.355725080701707 color=blue,shape=square,flag=1,i=4007,u=0.3593621089751877,v=0.4204952586591253,w=0.48311885257376547,x=4.152786490042463 color=red,shape=circle,flag=0,i=4008,u=0.6263771674542099,v=0.6273789656494907,w=0.4925932624358998,x=3.412081047867682 color=yellow,shape=square,flag=1,i=4010,u=0.7166252708117242,v=0.5393574073258124,w=0.4864772500833869,x=3.005238186091022 color=blue,shape=circle,flag=1,i=4048,u=0.6375928559984098,v=0.13094792714264747,w=0.3559378606794926,x=5.594978182895825 color=red,shape=square,flag=1,i=4055,u=0.5584526843675628,v=0.274821142186197,w=0.4859245223815638,x=3.846472472964154 color=yellow,shape=square,flag=1,i=4065,u=0.30055120732205987,v=0.8237403642678218,w=0.4940415884493408,x=4.389389322019022 color=red,shape=circle,flag=1,i=4066,u=0.3079054257526094,v=0.3938428302018409,w=0.4840911577561348,x=5.025254765228029 color=red,shape=triangle,flag=0,i=4070,u=0.7857193974786632,v=0.20523038183871056,w=0.5148166157666305,x=7.390248248875976 color=red,shape=triangle,flag=0,i=4073,u=0.8715276951630303,v=0.7631813622272297,w=0.5149349053075495,x=3.831016926880204 color=purple,shape=square,flag=0,i=4080,u=0.9507897518515176,v=0.7330368467293205,w=0.5618439565262913,x=5.065911449238861 color=red,shape=triangle,flag=0,i=4089,u=0.23546693802152452,v=0.8864756100273485,w=0.5176775288597121,x=4.486048731255909 color=green,shape=triangle,flag=0,i=4111,u=0.3284284241669122,v=0.7897294545153425,w=0.4255682687947704,x=4.33760596350459 color=blue,shape=circle,flag=0,i=4113,u=0.7778561711591236,v=0.7026046553162363,w=0.36016953332639406,x=4.3253087131762 color=green,shape=square,flag=0,i=4116,u=0.017264149877869173,v=0.6772019371129909,w=0.49127313845384646,x=4.561244596198336 color=green,shape=circle,flag=0,i=4122,u=0.42041660464659514,v=0.9987265889293468,w=0.4709212310875591,x=5.270326965032162 color=purple,shape=triangle,flag=0,i=4123,u=0.48215503477639954,v=0.6245337534585043,w=0.5520777975040859,x=5.260380548282169 color=blue,shape=circle,flag=0,i=4125,u=0.7292024833007671,v=0.9886297258819318,w=0.35794951366222183,x=6.318628391623386 color=red,shape=square,flag=1,i=4133,u=0.5131088766874894,v=0.99207096020626,w=0.49072827406779573,x=6.405522770873926 color=red,shape=circle,flag=0,i=4137,u=0.13371213335685206,v=0.08184469599874578,w=0.4886718357447637,x=4.690215456366022 color=green,shape=square,flag=0,i=4138,u=0.4870533364703431,v=0.6089277625056339,w=0.49423438876804665,x=2.962448288757521 color=red,shape=square,flag=0,i=4141,u=0.7527801461726715,v=0.47801360576698193,w=0.49139292839500837,x=3.695696364641762 color=blue,shape=square,flag=0,i=4144,u=0.6508968440851186,v=0.01594167925920531,w=0.4909152884928182,x=3.9139237568935084 color=red,shape=triangle,flag=1,i=4152,u=0.5290995440135682,v=0.15147554840633548,w=0.5190495163964532,x=7.2158162973518065 color=purple,shape=circle,flag=1,i=4153,u=0.010343789766863232,v=0.4542361685678803,w=0.45706733570733415,x=4.185599374272368 color=red,shape=square,flag=1,i=4159,u=0.9090870913203859,v=0.4509060551323797,w=0.4921856922497064,x=5.206561949198413 color=red,shape=square,flag=0,i=4187,u=0.24998114916946512,v=0.7793536566455239,w=0.4979741881291295,x=6.942078444289223 color=red,shape=square,flag=1,i=4196,u=0.1649889386660216,v=0.1944723914799218,w=0.4877029534129722,x=4.012665515919996 color=blue,shape=circle,flag=0,i=4210,u=0.43188118595514013,v=0.05626968920047648,w=0.36041342723044056,x=5.240538052406783 color=purple,shape=triangle,flag=0,i=4219,u=0.7636107502661091,v=0.5386503845691811,w=0.5474633930296947,x=7.4079025462829335 color=yellow,shape=triangle,flag=1,i=4224,u=0.23806761658919084,v=0.38805580422442765,w=0.4739522498157717,x=3.3417188940812355 color=red,shape=square,flag=0,i=4233,u=0.6186732875970838,v=0.4519782222039107,w=0.4780176245355303,x=6.172910701285077 color=blue,shape=square,flag=1,i=4243,u=0.3917412188768753,v=0.645158831472363,w=0.4953483544193797,x=3.428474040547902 color=purple,shape=square,flag=0,i=4245,u=0.9891890351824295,v=0.6480643195288099,w=0.5524803116498138,x=5.458900869849497 color=red,shape=triangle,flag=0,i=4259,u=0.040083681097769164,v=0.15745823308154772,w=0.5154490705077337,x=5.205330502248688 color=blue,shape=triangle,flag=1,i=4266,u=0.807310216945378,v=0.6397280241121506,w=0.5378039116131943,x=3.7168978227298077 color=purple,shape=circle,flag=0,i=4269,u=0.12564067513031663,v=0.08040467691871445,w=0.45938362065333793,x=5.994242178415964 color=yellow,shape=triangle,flag=1,i=4278,u=0.8317601951056839,v=0.7616584106935024,w=0.4723712300439795,x=7.171809837380553 color=green,shape=square,flag=0,i=4298,u=0.8889952525373963,v=0.37402240945052534,w=0.4904462579818838,x=5.76031072452648 color=yellow,shape=circle,flag=1,i=4304,u=0.6776539392030757,v=0.46415285564554576,w=0.5489543752433077,x=6.952944315945049 color=red,shape=square,flag=0,i=4315,u=0.777751491546273,v=0.33508243498264767,w=0.48093360774834243,x=6.687593635204276 color=red,shape=square,flag=0,i=4320,u=0.56311263501616,v=0.911770016966866,w=0.47673720111374274,x=4.981452745180131 color=red,shape=circle,flag=0,i=4354,u=0.5167962363665243,v=0.5433960802622636,w=0.4885582203940556,x=5.578784767733086 color=red,shape=circle,flag=1,i=4364,u=0.7782083467757581,v=0.7997449329308299,w=0.4972269164599567,x=5.3362889036878585 color=red,shape=square,flag=0,i=4369,u=0.434285938385071,v=0.01089664572421567,w=0.48229866547079614,x=3.881217457651722 color=red,shape=square,flag=0,i=4379,u=0.5222428403277589,v=0.8011417037625204,w=0.47553145537873565,x=4.751087465594357 color=blue,shape=triangle,flag=1,i=4398,u=0.41078756963174423,v=0.4641707690981701,w=0.5264967143522112,x=5.677853630107361 color=red,shape=square,flag=1,i=4412,u=0.8128120936484775,v=0.9688455224228868,w=0.4702410026786483,x=3.271908704866489 color=red,shape=square,flag=0,i=4419,u=0.20372484920186795,v=0.41298665778133037,w=0.4660083716530997,x=4.057537592001876 color=purple,shape=square,flag=0,i=4427,u=0.8422493225818376,v=0.382468909787415,w=0.5632113301941087,x=4.454792138256643 color=purple,shape=triangle,flag=0,i=4432,u=0.33934567909701696,v=0.958554458947561,w=0.5515871029354242,x=4.713000872537885 color=green,shape=square,flag=0,i=4440,u=0.9132657377198357,v=0.7835187031065083,w=0.497602832547874,x=5.327120400792336 color=green,shape=circle,flag=0,i=4449,u=0.3338305852467741,v=0.012692849632647496,w=0.4690271926679323,x=4.954187279536586 color=blue,shape=circle,flag=1,i=4461,u=0.17485481067978437,v=0.5216593873404025,w=0.3744188448578828,x=4.393387724137667 color=red,shape=square,flag=0,i=4479,u=0.6514331004292623,v=0.10236585048474345,w=0.4695351500820933,x=4.2650309820261345 color=red,shape=square,flag=1,i=4480,u=0.8469976130899075,v=0.0011247642630375365,w=0.47227495497588245,x=7.4727705325755585 color=red,shape=circle,flag=0,i=4481,u=0.6587785325792491,v=0.7131442696567425,w=0.4989878576569834,x=4.39459645796621 color=red,shape=circle,flag=0,i=4483,u=0.3329844783281878,v=0.3025610271956023,w=0.4969507873863136,x=3.6657973248904376 color=purple,shape=square,flag=0,i=4490,u=0.07386981905312218,v=0.29799061460644083,w=0.5646796267964418,x=7.028530018358976 color=yellow,shape=triangle,flag=1,i=4497,u=0.5495164190322613,v=0.6741898996197746,w=0.4700650710173229,x=3.647356510274664 color=red,shape=square,flag=1,i=4502,u=0.07282561554650291,v=0.19934102395334075,w=0.4840570278598482,x=5.460009845016438 color=red,shape=circle,flag=0,i=4517,u=0.9560301078405197,v=0.9855615893929697,w=0.49407564580292324,x=4.204357524310372 color=blue,shape=triangle,flag=1,i=4526,u=0.8839149042250543,v=0.316740732138862,w=0.5304074389039727,x=6.135035264406359 color=blue,shape=triangle,flag=1,i=4533,u=0.41753698030666864,v=0.22724172152243005,w=0.5313197462660701,x=5.393428621429922 color=yellow,shape=triangle,flag=0,i=4534,u=0.014620330740086618,v=0.4958745335342518,w=0.4676047611248905,x=5.286639600542727 color=green,shape=circle,flag=1,i=4536,u=0.09684826124548573,v=0.004968761544236533,w=0.464446506694815,x=5.82288074428381 color=green,shape=circle,flag=0,i=4544,u=0.6463719909807981,v=0.401498834272373,w=0.46521489990368287,x=6.295453090216363 color=red,shape=square,flag=1,i=4569,u=0.38732684841686893,v=0.4879193813283953,w=0.4898777132996863,x=5.25807312230191 color=red,shape=triangle,flag=0,i=4611,u=0.6897926667476658,v=0.8291653414676392,w=0.49602856830692227,x=7.516391237463194 color=green,shape=triangle,flag=1,i=4614,u=0.4585811547325982,v=0.6261203358311093,w=0.44350744789842583,x=5.048531990168133 color=red,shape=square,flag=0,i=4618,u=0.2730086470257036,v=0.7829600067694346,w=0.4860522657248413,x=5.395407567505142 color=green,shape=circle,flag=0,i=4626,u=0.0226257356389713,v=0.9601029264420361,w=0.461311029254716,x=3.5882511689718135 color=red,shape=square,flag=0,i=4652,u=0.05703877491940923,v=0.06585729734046852,w=0.48208385558520445,x=4.060983069969076 color=yellow,shape=square,flag=1,i=4659,u=0.2801824030534069,v=0.0438178619705506,w=0.501986681267166,x=7.6131269954403 color=blue,shape=circle,flag=1,i=4672,u=4.3912454007477564e-05,v=0.362796288952525,w=0.3993360484373074,x=3.9861223442408416 color=orange,shape=circle,flag=1,i=4692,u=0.9954037369880855,v=0.02349018535873748,w=0.6159445024232557,x=4.7499934114291085 color=blue,shape=circle,flag=1,i=4710,u=0.7871079093873165,v=0.7861781653597818,w=0.39291034976006217,x=4.153924056765995 color=red,shape=triangle,flag=0,i=4727,u=0.5273654668420624,v=0.5600630076906481,w=0.5001817515136285,x=7.015063655811005 color=red,shape=square,flag=1,i=4756,u=0.9589146091494035,v=0.9740295173385957,w=0.4862863231058336,x=3.779876984793303 color=yellow,shape=square,flag=1,i=4759,u=0.9845759343144127,v=0.36563785275364136,w=0.5010217479150095,x=4.869039297795497 color=red,shape=square,flag=1,i=4762,u=0.5575845396339288,v=0.97746474716903,w=0.48304555133080473,x=4.339129497099426 color=red,shape=square,flag=1,i=4773,u=0.987130101490106,v=0.40244866871421126,w=0.4882601914063636,x=5.047887427900072 color=blue,shape=square,flag=0,i=4783,u=0.22565129993731936,v=0.1707567132972978,w=0.46719616905216915,x=6.190039910143233 color=red,shape=square,flag=0,i=4797,u=0.9636542512173785,v=0.5946682359307124,w=0.4895280923615869,x=2.9021778447739788 color=green,shape=circle,flag=0,i=4808,u=0.47531974356169093,v=0.1164795381234004,w=0.46278990722449626,x=4.396019068357184 color=red,shape=triangle,flag=0,i=4822,u=0.10849972348909509,v=0.8245184575125909,w=0.503656669017261,x=3.691476903043085 color=orange,shape=square,flag=1,i=4831,u=0.7999192819621908,v=0.9520046684953247,w=0.359627084402705,x=4.788271505203496 color=red,shape=square,flag=0,i=4838,u=0.12062753657031133,v=0.06097750480829511,w=0.4865831322953874,x=4.967876012945222 color=blue,shape=triangle,flag=1,i=4858,u=0.47904328213813874,v=0.22569528473924072,w=0.5290903965165521,x=6.090757985580196 color=yellow,shape=circle,flag=1,i=4861,u=0.8714478634106673,v=0.705860033229531,w=0.5403439167752929,x=5.158122690299913 color=purple,shape=triangle,flag=1,i=4868,u=0.3196040625347073,v=0.45592095246985065,w=0.5421864325199726,x=5.038247417673449 color=red,shape=square,flag=1,i=4877,u=0.6352240793453936,v=0.21551322767111503,w=0.5023205660300618,x=6.3075083428004985 color=red,shape=triangle,flag=1,i=4889,u=0.05384871008434988,v=0.07587178184811971,w=0.49631820726428827,x=2.253273333249837 color=yellow,shape=triangle,flag=1,i=4893,u=0.11402238792055563,v=0.10140796489934611,w=0.4763049121271566,x=5.706121371454866 color=green,shape=circle,flag=1,i=4894,u=0.8670868228399143,v=0.7287253707307526,w=0.4711920364233325,x=4.958278717805755 color=purple,shape=circle,flag=0,i=4901,u=0.4911898392656703,v=0.47771650215029504,w=0.47221468860917887,x=4.916147870038752 color=yellow,shape=triangle,flag=1,i=4909,u=0.7835833005251677,v=0.253223644228022,w=0.47882827035870973,x=4.07965453809507 color=purple,shape=circle,flag=0,i=4917,u=0.21405431790548124,v=0.22809134769476713,w=0.4762557694477563,x=6.595152012939322 color=red,shape=triangle,flag=0,i=4923,u=0.6073390030280708,v=0.8188089199730891,w=0.49207972463552285,x=5.447411893042994 color=red,shape=square,flag=0,i=4956,u=0.43253415766372016,v=0.7323508812510726,w=0.522914342700665,x=6.120916811217318 color=blue,shape=triangle,flag=0,i=4962,u=0.6367779574323398,v=0.3947339560378299,w=0.5113021410683906,x=4.392191418330258 color=red,shape=triangle,flag=1,i=4966,u=0.7684465674231389,v=0.17573220719193694,w=0.4833613335972867,x=6.371413249901571 color=red,shape=circle,flag=0,i=4968,u=0.9691878006521278,v=0.8698367737670867,w=0.5060677109704748,x=3.990767354172237 color=red,shape=square,flag=0,i=4984,u=0.6146393359480166,v=0.5101038208363462,w=0.5305089395451624,x=4.356529834004775 color=red,shape=triangle,flag=0,i=5010,u=0.604365562732041,v=0.8079847476181391,w=0.4906319246434529,x=4.798297275786936 color=orange,shape=square,flag=1,i=5016,u=0.19504118170080154,v=0.3520822859547038,w=0.35691733012089655,x=5.833861438271984 color=red,shape=square,flag=0,i=5020,u=0.19361450696395321,v=0.4001616372613894,w=0.5310319459816489,x=2.4545267472064682 color=green,shape=square,flag=0,i=5028,u=0.07963993301021555,v=0.06697791193622316,w=0.5216052853331227,x=7.172653891332646 color=yellow,shape=square,flag=1,i=5033,u=0.6872771220970901,v=0.5126236481991991,w=0.4996821120073008,x=5.017493586848938 color=red,shape=square,flag=0,i=5037,u=0.08920709206819122,v=0.11719414853680221,w=0.5365776596846343,x=5.9465368625308 color=red,shape=triangle,flag=0,i=5041,u=0.3536748666857381,v=0.7952387130119751,w=0.49527174287537834,x=4.1035103127529196 color=green,shape=triangle,flag=1,i=5058,u=0.9004975987784543,v=0.0290656688852996,w=0.44741049179718756,x=3.614604311632285 color=yellow,shape=triangle,flag=1,i=5078,u=0.703794888428924,v=0.876877578963412,w=0.476153857870298,x=6.265288459212706 color=purple,shape=circle,flag=0,i=5107,u=0.2795363933006426,v=0.41416671317299536,w=0.48024594626924516,x=4.58236419807355 color=red,shape=triangle,flag=0,i=5114,u=0.5459583658068602,v=0.7097663308273577,w=0.49078816934002184,x=4.024368397437182 color=red,shape=triangle,flag=1,i=5120,u=0.3058308697396813,v=0.32914633277497196,w=0.49153375908198477,x=6.158690132090211 color=red,shape=square,flag=1,i=5122,u=0.48642277524060873,v=0.7977013112345599,w=0.5425386941097052,x=3.836137373926413 color=red,shape=circle,flag=0,i=5123,u=0.861691357988579,v=0.7913306086663261,w=0.5020442668695987,x=3.6515566810550104 color=red,shape=circle,flag=0,i=5129,u=0.8238063934964313,v=0.8176654026497628,w=0.4963399915135567,x=4.058369612979784 color=red,shape=circle,flag=1,i=5154,u=0.3169193017115355,v=0.22665248853824443,w=0.4987271979279972,x=5.159098929883051 color=yellow,shape=square,flag=1,i=5166,u=0.2803249006586175,v=0.5359442761836394,w=0.5107896973536701,x=4.597085405376856 color=red,shape=circle,flag=1,i=5183,u=0.8557812372608711,v=0.9127347887390895,w=0.49400982545841743,x=5.264330525710999 color=red,shape=square,flag=1,i=5186,u=0.8165284600289506,v=0.31230879758685837,w=0.5204004907998334,x=5.451993993057882 color=red,shape=square,flag=0,i=5196,u=0.27689581006450603,v=0.7394640009940899,w=0.5166708364087473,x=4.343491758592539 color=red,shape=triangle,flag=1,i=5210,u=0.7671319591554112,v=0.27923305305030366,w=0.4939196894546826,x=4.586177247868108 color=yellow,shape=square,flag=1,i=5219,u=0.016884553811871483,v=0.7815478913950888,w=0.5052713146704236,x=4.720122118911909 color=red,shape=circle,flag=0,i=5220,u=0.20521281132071523,v=0.119892417512705,w=0.4924842936771303,x=3.25331818168061 color=yellow,shape=circle,flag=1,i=5225,u=0.3247971112570329,v=0.41443898848863536,w=0.5241058861810568,x=5.637380968369996 color=red,shape=circle,flag=1,i=5229,u=0.40302762376415846,v=0.45321274325339284,w=0.4897762269556689,x=4.105730746345201 color=yellow,shape=triangle,flag=1,i=5241,u=0.9194245661694567,v=0.4245526342935101,w=0.47628113176234915,x=5.5530165631171755 color=yellow,shape=square,flag=1,i=5248,u=0.6655857326872444,v=0.541571483415203,w=0.5011099404154018,x=5.861835255081043 color=red,shape=square,flag=0,i=5268,u=0.190867901564158,v=0.4891538330593278,w=0.5301900141183975,x=6.1611982912689784 color=red,shape=triangle,flag=0,i=5272,u=0.8254638695159972,v=0.7448752353407149,w=0.486387161134547,x=5.273632489589256 color=green,shape=triangle,flag=0,i=5273,u=0.7546301813415475,v=0.323871582533658,w=0.45424433413740173,x=4.430087789183369 color=blue,shape=triangle,flag=0,i=5274,u=0.8145195367113205,v=0.670382826262773,w=0.5061648811956903,x=5.869251002344352 color=green,shape=square,flag=0,i=5293,u=0.9716742088009472,v=0.7911696066830448,w=0.5219301837949548,x=4.703196776780304 color=red,shape=triangle,flag=1,i=5298,u=0.5460710922901167,v=0.7013285098055233,w=0.48960158514348856,x=4.837150970530721 color=red,shape=triangle,flag=0,i=5299,u=0.43174705987682027,v=0.7502016298078271,w=0.494126213095056,x=4.452565211510168 color=red,shape=square,flag=1,i=5317,u=0.7009176336480939,v=0.021785807344981034,w=0.5164538203896442,x=3.6294283264196494 color=blue,shape=circle,flag=1,i=5319,u=0.1566912706290573,v=0.22007285880750194,w=0.4345644688277157,x=7.744057545338137 color=red,shape=circle,flag=0,i=5332,u=0.9806117525858196,v=0.9204546768661085,w=0.49349011013245503,x=6.213357898369942 color=orange,shape=circle,flag=1,i=5340,u=0.4811348140983073,v=0.6551643755628681,w=0.6112832826828236,x=2.133203335064926 color=blue,shape=square,flag=1,i=5347,u=0.9828791004053427,v=0.8530021158344594,w=0.48242637172402547,x=5.939278661543149 color=yellow,shape=triangle,flag=1,i=5373,u=0.9531788600706754,v=0.4340981772974625,w=0.4848437598528061,x=3.3266816836723745 color=purple,shape=square,flag=0,i=5379,u=0.7098198733959674,v=0.3736265270010867,w=0.5324712632741289,x=5.876357085397324 color=red,shape=triangle,flag=0,i=5383,u=0.7518149145929596,v=0.7402708470487265,w=0.4910695100700751,x=4.420695582257983 color=red,shape=circle,flag=1,i=5419,u=0.46120345804623264,v=0.4948385089781824,w=0.4913468113920055,x=7.40814630568676 color=red,shape=triangle,flag=0,i=5422,u=0.08197776357773012,v=0.9669361078130646,w=0.48894290275519053,x=4.740888978916967 color=red,shape=triangle,flag=1,i=5423,u=0.7344507332875202,v=0.3362814790662835,w=0.49109866378134515,x=6.007147287601158 color=red,shape=square,flag=0,i=5425,u=0.2357167709491399,v=0.5152841340644533,w=0.49403680508208875,x=4.212187341924275 color=green,shape=square,flag=0,i=5429,u=0.07774245944604241,v=0.964994594550859,w=0.5124137668635241,x=5.478920624538173 color=blue,shape=circle,flag=0,i=5431,u=0.9906112914954729,v=0.44746308178858474,w=0.4338609015436608,x=6.518835807126326 color=blue,shape=square,flag=1,i=5449,u=0.4860631799941614,v=0.9839334962924786,w=0.4830950046923664,x=6.073949563909348 color=blue,shape=triangle,flag=0,i=5456,u=0.25038992161389095,v=0.23043385353332702,w=0.5078905734176592,x=6.3057961632124675 color=green,shape=square,flag=0,i=5457,u=0.4684604519481598,v=0.7769294177621766,w=0.516941596048288,x=7.171461003054351 color=red,shape=triangle,flag=0,i=5461,u=0.25294366711199856,v=0.5070854388291478,w=0.49114712956461404,x=4.476838296456381 color=red,shape=triangle,flag=0,i=5463,u=0.608826642554208,v=0.07789433152186664,w=0.4922557167043311,x=6.393603353848435 color=red,shape=triangle,flag=0,i=5479,u=0.7872114280323266,v=0.0916362874841371,w=0.4975388175743881,x=5.1007122242037966 color=purple,shape=square,flag=0,i=5505,u=0.2799855143481479,v=0.6088919218342325,w=0.5248399368213407,x=3.897944745874863 color=yellow,shape=square,flag=1,i=5507,u=0.6484833754240118,v=0.03136077558439587,w=0.5098510569841375,x=2.744325569188073 color=red,shape=square,flag=0,i=5513,u=0.9028358793498334,v=0.6087929936485224,w=0.4808784176034518,x=5.46492806363922 color=red,shape=square,flag=1,i=5517,u=0.4289157251019926,v=0.27223050052537523,w=0.49052968111210554,x=4.345423371673012 color=red,shape=triangle,flag=0,i=5525,u=0.7317109830812456,v=0.03261841888525885,w=0.4993605420272282,x=3.880444568204959 color=yellow,shape=square,flag=1,i=5538,u=0.4022101366915811,v=0.36572652105350933,w=0.5088194471660124,x=4.878808608470745 color=green,shape=square,flag=0,i=5546,u=0.7294308945801579,v=0.8130068799671252,w=0.5143357290066191,x=5.546408048163998 color=red,shape=triangle,flag=1,i=5569,u=0.5069614611521822,v=0.6982507966322651,w=0.48979688051894626,x=5.9072897890759135 color=red,shape=circle,flag=1,i=5573,u=0.771208791227169,v=0.6805835324630879,w=0.4899728646284138,x=4.991038703312431 color=red,shape=circle,flag=1,i=5574,u=0.8723819483185645,v=0.9666792341752801,w=0.48894193821989596,x=5.053462506768004 color=blue,shape=circle,flag=0,i=5596,u=0.525225660059,v=0.9995761761685742,w=0.44164047681920576,x=7.206892302643266 color=red,shape=square,flag=0,i=5599,u=0.46933514095815465,v=0.37867125339476027,w=0.48474283866549106,x=4.2486291255827 color=red,shape=triangle,flag=0,i=5600,u=0.07797109331227103,v=0.12591557044120283,w=0.5024758798915459,x=5.585644003164902 color=red,shape=square,flag=1,i=5601,u=0.3017407916254773,v=0.5794153190107305,w=0.4830100356390934,x=4.847727902017804 color=blue,shape=square,flag=0,i=5610,u=0.6476099626265888,v=0.3834687832822731,w=0.4751568289902658,x=5.366291881237096 color=red,shape=circle,flag=0,i=5611,u=0.9643530645989437,v=1.0128772868829967,w=0.4874941916721536,x=5.052491438671869 color=yellow,shape=triangle,flag=1,i=5618,u=0.12235316022283638,v=0.4062772698823153,w=0.5027163696981481,x=4.423032864371648 color=yellow,shape=circle,flag=1,i=5635,u=0.7490077148568529,v=0.7887882825548689,w=0.5174941753119322,x=4.9735430773511125 color=green,shape=square,flag=1,i=5648,u=0.6838383400874987,v=0.2065873409297414,w=0.5138513557269427,x=3.7361689649122503 color=blue,shape=square,flag=1,i=5657,u=0.7395822361624869,v=0.9376531852764505,w=0.46766201307943756,x=5.341558504004095 color=red,shape=square,flag=0,i=5668,u=0.8118197610201682,v=0.12148743503276194,w=0.4782662920940548,x=6.477714121948768 color=red,shape=square,flag=0,i=5672,u=0.8577133103095783,v=0.7110724383796043,w=0.47898401623391135,x=5.0500040117472755 color=blue,shape=square,flag=0,i=5678,u=0.7218754013507698,v=0.884202554239838,w=0.4660259351946551,x=4.910713238335364 color=red,shape=circle,flag=0,i=5682,u=0.46042761654160147,v=0.47440910925034985,w=0.48351736581602117,x=5.647426237831731 color=green,shape=square,flag=1,i=5690,u=0.8118964231322414,v=0.22962574782744727,w=0.5107410649539317,x=4.651607685056169 color=red,shape=square,flag=0,i=5698,u=0.6938931630037275,v=0.6955654236637328,w=0.48060441995288344,x=5.5283181070253065 color=blue,shape=triangle,flag=1,i=5709,u=0.8790850372131346,v=0.85693275870204,w=0.5112304639110724,x=4.6089973865766956 color=blue,shape=square,flag=1,i=5711,u=0.4980940550308919,v=0.3913209484276381,w=0.46779237871931606,x=6.5640792204993055 color=yellow,shape=triangle,flag=1,i=5724,u=0.3355201655102771,v=0.7875312279106407,w=0.5028630279753463,x=6.41793674963149 color=red,shape=square,flag=0,i=5730,u=0.5308515738786018,v=0.6762180403418967,w=0.47230059961154747,x=5.884364887449301 color=blue,shape=circle,flag=0,i=5732,u=0.7934966072767009,v=0.011915016935549416,w=0.4418438302612928,x=6.5870020212659 color=yellow,shape=square,flag=1,i=5734,u=0.8216755963110223,v=0.32350186713160345,w=0.5096510341494233,x=5.04995327371086 color=red,shape=square,flag=0,i=5735,u=0.8865257836119743,v=0.6568982219919527,w=0.47174683876983087,x=5.369661169499781 color=red,shape=triangle,flag=0,i=5739,u=0.28418616477886516,v=0.31409894322127174,w=0.5099767891546801,x=3.1827809857154725 color=purple,shape=triangle,flag=0,i=5743,u=0.8627435828503356,v=0.6790570779555195,w=0.5286883405329251,x=4.754338532998504 color=purple,shape=triangle,flag=1,i=5750,u=0.6540653802155625,v=0.8186032359193669,w=0.5278484072555955,x=3.968262979705669 color=red,shape=triangle,flag=0,i=5763,u=0.8450436608844077,v=0.10860683564259188,w=0.5026580958498666,x=7.796656873978652 color=red,shape=square,flag=1,i=5788,u=0.611091459831367,v=0.5449393388841275,w=0.4679003050764299,x=4.106164774064709 color=red,shape=triangle,flag=1,i=5789,u=0.4537231592487151,v=0.05721358943032817,w=0.5073773380830467,x=4.2548297109158755 color=red,shape=triangle,flag=0,i=5796,u=0.3325017179321761,v=0.9355862419367229,w=0.5112452901455476,x=4.976944510801324 color=red,shape=circle,flag=0,i=5798,u=0.3161413192064507,v=0.2521014769803568,w=0.48972564953736775,x=4.1808585696670635 color=blue,shape=circle,flag=0,i=5808,u=0.08131434372877844,v=0.7568649526045701,w=0.4462356099333533,x=5.513038754055881 color=purple,shape=square,flag=1,i=5812,u=0.27511086390645434,v=0.407852391499247,w=0.520913309175292,x=6.635478279979536 color=red,shape=circle,flag=0,i=5832,u=0.8889082016909575,v=0.9284038397038602,w=0.4942377200158909,x=3.936993288716035 color=red,shape=square,flag=1,i=5842,u=0.2722988818432909,v=0.9498281949058748,w=0.4722977279397903,x=4.439007057463928 color=red,shape=triangle,flag=0,i=5848,u=0.3686940082937461,v=0.2297986252753741,w=0.5135935212176223,x=4.877654246034681 color=red,shape=triangle,flag=0,i=5849,u=0.1290210881088124,v=0.18520386905638975,w=0.5121461716402985,x=4.199815038098288 color=red,shape=triangle,flag=1,i=5857,u=0.4519386142542523,v=0.7416817153691634,w=0.5068721954035537,x=2.7275712308424596 color=red,shape=square,flag=0,i=5862,u=0.7157432573561867,v=0.7711157084297541,w=0.4730843646783483,x=4.151936833436429 color=green,shape=circle,flag=0,i=5873,u=0.04944884812182149,v=0.7470049810374516,w=0.5132844272554256,x=7.36620286480328 color=red,shape=triangle,flag=0,i=5883,u=0.5197236842627677,v=0.29325305698917603,w=0.49572671390448886,x=3.721153660510287 color=yellow,shape=square,flag=1,i=5884,u=0.7649881866811434,v=0.970089274891161,w=0.5119786019607768,x=6.3555380379204145 color=red,shape=circle,flag=0,i=5893,u=0.20615480760926808,v=0.14809836210373095,w=0.48270096968249926,x=6.177100090466365 color=blue,shape=circle,flag=1,i=5901,u=0.7128337758915861,v=0.19150609105626704,w=0.4484209547990318,x=5.2000724629786275 color=yellow,shape=triangle,flag=1,i=5911,u=0.42713138741103307,v=0.9696749783494829,w=0.4966670447335158,x=4.594677341096767 color=red,shape=square,flag=0,i=5914,u=0.015123831588062964,v=0.16437153054635523,w=0.47223855886451477,x=5.267943515687804 color=yellow,shape=square,flag=1,i=5925,u=0.3074495053049401,v=0.1895498704682077,w=0.5109241596636047,x=5.095299333882013 color=blue,shape=square,flag=0,i=5933,u=0.51372249375865,v=0.5302858830176099,w=0.467689686816679,x=4.343967250123015 color=blue,shape=triangle,flag=1,i=5969,u=0.17018060918505862,v=0.6132742704675529,w=0.5190720082234903,x=5.136739287366672 color=red,shape=square,flag=0,i=5972,u=0.16028439108892767,v=0.7367391158511573,w=0.47720696945018315,x=7.042454670048072 color=blue,shape=square,flag=1,i=5983,u=0.4112854332720899,v=0.8606792632824589,w=0.45768661179118436,x=6.214699633936114 color=blue,shape=circle,flag=0,i=6023,u=0.017452962819985207,v=0.4070792408713856,w=0.45031984575502004,x=5.546776432889101 color=red,shape=triangle,flag=0,i=6039,u=0.1436103074694539,v=0.34758216175700596,w=0.5106409670616571,x=5.088731339588974 color=yellow,shape=circle,flag=1,i=6057,u=0.16275436095280493,v=0.7557647104557702,w=0.5050647566343319,x=4.677738410772791 color=red,shape=circle,flag=0,i=6072,u=0.18020657415479036,v=0.10338573693208912,w=0.4824549330209736,x=4.7142476735582415 color=purple,shape=square,flag=0,i=6076,u=0.32333551253153237,v=0.6565898162212596,w=0.5120503557378895,x=6.23321982454248 color=purple,shape=square,flag=0,i=6081,u=0.31289907616388024,v=0.04822727790824588,w=0.5116817686988475,x=3.472623839730995 color=purple,shape=triangle,flag=0,i=6099,u=0.9263235207487328,v=0.3884013218923913,w=0.5264041034546705,x=5.902532750266108 color=blue,shape=square,flag=0,i=6109,u=0.27619166141967133,v=0.7118807565361399,w=0.45861518520038863,x=5.60784981030194 color=red,shape=circle,flag=0,i=6113,u=0.22466430390726955,v=0.22771633736376914,w=0.49115476733211044,x=5.350244646149289 color=red,shape=triangle,flag=0,i=6120,u=0.09635508035816032,v=0.026480199263408277,w=0.5335618690609663,x=5.228925126919848 color=purple,shape=triangle,flag=0,i=6121,u=0.711562686476677,v=0.021610513173994317,w=0.5264462019792321,x=4.360769678132107 color=purple,shape=triangle,flag=0,i=6162,u=0.9811720181036256,v=0.24537773815477126,w=0.5235712752538283,x=4.188763507197692 color=red,shape=triangle,flag=1,i=6164,u=0.4884035800730596,v=0.4768145570774246,w=0.5370106211123385,x=4.355237008199155 color=red,shape=triangle,flag=0,i=6166,u=0.9208181412134825,v=0.6027093372104054,w=0.5373932186312109,x=6.7880412292180035 color=red,shape=triangle,flag=0,i=6168,u=0.6128294188136673,v=0.5662147536804297,w=0.5344176640252708,x=5.14474489489931 color=red,shape=triangle,flag=1,i=6190,u=0.22193208158731081,v=0.583689588954846,w=0.5321425396208453,x=4.75547199780209 color=blue,shape=circle,flag=1,i=6192,u=0.9617233280536962,v=0.0804036772290313,w=0.45466761358987057,x=4.766413914412179 color=purple,shape=square,flag=0,i=6193,u=0.6925033853187198,v=0.4157324223786859,w=0.5225467116843022,x=3.203586388298083 color=red,shape=square,flag=0,i=6200,u=0.171976928845461,v=0.1880835239752341,w=0.4936589185590948,x=5.836676241592183 color=blue,shape=circle,flag=0,i=6206,u=0.6137995201817447,v=0.2914163889198288,w=0.4563692685949176,x=5.408699326357687 color=purple,shape=circle,flag=0,i=6230,u=0.8995957974417165,v=0.838557554387364,w=0.49078343561983623,x=4.102062839862341 color=blue,shape=square,flag=0,i=6233,u=0.7733534639419862,v=0.3573142412944096,w=0.4508620621062044,x=3.584941797575739 color=red,shape=triangle,flag=0,i=6244,u=0.6325881339214032,v=0.5265910784732831,w=0.5267238734444296,x=6.6682420090850165 color=purple,shape=circle,flag=0,i=6258,u=0.10367159942454274,v=0.43360378760767704,w=0.48597791924991773,x=5.788435808699311 color=red,shape=square,flag=0,i=6270,u=0.6811227642195069,v=0.1479417361133034,w=0.4964458724418254,x=6.471935001457158 color=red,shape=square,flag=1,i=6271,u=0.8845060174779521,v=0.594898831199482,w=0.49589169608087036,x=3.697088354944317 color=blue,shape=square,flag=1,i=6280,u=0.6292854031641862,v=0.3505203031399461,w=0.4457801715897031,x=6.0940974118900435 color=red,shape=square,flag=1,i=6300,u=0.4698259174276119,v=0.08680271714111099,w=0.4844979838413245,x=5.317674542168804 color=red,shape=circle,flag=0,i=6304,u=0.9960747439102614,v=0.995262085389914,w=0.49210886331463977,x=5.985586009524911 color=yellow,shape=triangle,flag=1,i=6307,u=0.8021056357273373,v=0.3550400989030522,w=0.4916276078449299,x=3.842965444936793 color=green,shape=square,flag=1,i=6308,u=0.00048750676198217047,v=0.07350139064804029,w=0.5284521586313244,x=5.18296486436796 color=red,shape=circle,flag=0,i=6312,u=0.13141301290886298,v=0.20819524558149588,w=0.4884349725677271,x=4.229487941982128 color=red,shape=square,flag=0,i=6313,u=0.42004370502294874,v=0.5439573774055705,w=0.4890664637267789,x=6.069980788966126 color=green,shape=triangle,flag=0,i=6318,u=0.23924495898799913,v=0.12744748462772704,w=0.5021828322382919,x=2.2957031433250514 color=green,shape=circle,flag=0,i=6321,u=0.5856312729369325,v=0.6258020253571867,w=0.5016908279693554,x=5.809486355056517 color=green,shape=square,flag=0,i=6343,u=0.27971643422586945,v=0.5148514093481248,w=0.5270090033316781,x=4.79676680029431 color=green,shape=square,flag=0,i=6361,u=0.03363417584524808,v=0.5230059438871357,w=0.5287871548658247,x=5.687660694577732 color=yellow,shape=square,flag=1,i=6388,u=0.3956375502429853,v=0.5935536617442623,w=0.5200741756209883,x=5.688808730969668 color=red,shape=square,flag=1,i=6403,u=0.9417127579120319,v=0.5482150962847542,w=0.49747770748220865,x=5.103437297450152 color=yellow,shape=circle,flag=1,i=6410,u=0.6644019692587911,v=0.5206303554834582,w=0.5256801790797414,x=5.242268650760439 color=red,shape=circle,flag=1,i=6413,u=0.8685423617714676,v=0.8340407401130161,w=0.49941229305983253,x=6.623384640074739 color=purple,shape=square,flag=0,i=6418,u=0.42378426216713116,v=0.21109387357250076,w=0.5147444221739821,x=5.8115636706845315 color=red,shape=circle,flag=1,i=6430,u=0.22822478239561694,v=0.1979578968696555,w=0.5017015040441812,x=4.856038715443364 color=blue,shape=triangle,flag=0,i=6431,u=0.035967834871633575,v=0.8826006501795345,w=0.5150464995633706,x=4.925641684269677 color=green,shape=square,flag=0,i=6439,u=0.08849875224375359,v=0.6151865632680716,w=0.5207738636317834,x=5.472138215470408 color=red,shape=square,flag=0,i=6454,u=0.8258633336815364,v=0.013536288520049955,w=0.49459776015373735,x=5.932338900020647 color=red,shape=circle,flag=0,i=6459,u=0.9137091587098579,v=0.855588819983653,w=0.49888384748171133,x=5.830598036770098 color=purple,shape=triangle,flag=0,i=6465,u=0.06247102989973785,v=0.5827509439740209,w=0.5245338321695424,x=4.196873383518774 color=red,shape=circle,flag=0,i=6467,u=0.1199009593400917,v=0.1009342030991583,w=0.49428494602626355,x=4.602250052040592 color=red,shape=circle,flag=0,i=6503,u=0.6998197031470909,v=0.6085957418813281,w=0.4953130273408016,x=4.645148592033905 color=purple,shape=square,flag=0,i=6510,u=0.2822486415087655,v=0.9358660605865411,w=0.5081062978301883,x=7.230150974387606 color=orange,shape=square,flag=0,i=6520,u=0.48679433237460934,v=0.43918945290527467,w=0.3723492312534282,x=5.3166346756671805 color=blue,shape=triangle,flag=1,i=6524,u=0.42584599371114706,v=0.14938791233616222,w=0.5198447800578521,x=2.541732388925818 color=blue,shape=circle,flag=0,i=6528,u=0.2133861214884899,v=0.2977412570644107,w=0.4662639803680262,x=3.467504298314753 color=green,shape=triangle,flag=1,i=6529,u=0.1455227488931624,v=0.36600599340236795,w=0.4992332444785052,x=5.755984900287618 color=red,shape=square,flag=0,i=6530,u=0.09539708205200137,v=0.5515665649713346,w=0.49071329226843785,x=6.2996393162813 color=red,shape=triangle,flag=0,i=6539,u=0.5204664151681225,v=0.5070554408470832,w=0.5288833595190643,x=4.605395283680147 color=purple,shape=triangle,flag=0,i=6542,u=0.9502790468241479,v=0.3357785146212582,w=0.5300160109397024,x=4.845176059365532 color=yellow,shape=triangle,flag=1,i=6549,u=0.5771424149028278,v=0.5660412879806254,w=0.48483747163386864,x=2.5602532101362816 color=purple,shape=square,flag=0,i=6563,u=0.7687466675905879,v=0.11722875109550102,w=0.5032611834861493,x=5.483909341325606 color=red,shape=square,flag=0,i=6566,u=0.6741887634246249,v=0.15380339776136598,w=0.496319773686971,x=6.324302004246204 color=red,shape=circle,flag=0,i=6609,u=0.3969565461680814,v=0.4511785951116354,w=0.5079426651093598,x=3.955969992231747 color=purple,shape=triangle,flag=0,i=6611,u=0.4364083577087394,v=0.5045708384576747,w=0.5259459100161943,x=6.4426713973305665 color=yellow,shape=triangle,flag=1,i=6620,u=0.6235993900623629,v=0.017917816715242063,w=0.49115228576139447,x=4.301389523013513 color=red,shape=triangle,flag=1,i=6627,u=0.6856650689043784,v=0.63284643610226,w=0.5229115051728296,x=4.027530674760179 color=green,shape=square,flag=0,i=6628,u=0.26295856712509924,v=0.2541337868869713,w=0.51827868923942,x=4.771988180341128 color=red,shape=triangle,flag=1,i=6674,u=0.4177794845961972,v=0.476812791975578,w=0.5208393036798933,x=6.34351864080011 color=blue,shape=triangle,flag=0,i=6676,u=0.7399933240054255,v=0.18293984789475248,w=0.5070224997673431,x=3.2070714538196015 color=red,shape=square,flag=1,i=6701,u=0.34900953595354445,v=0.786080905493119,w=0.4961481792670415,x=2.852901749175578 color=blue,shape=square,flag=1,i=6735,u=0.34034923900641,v=0.4115739309705059,w=0.45823308139114505,x=5.734928311390195 color=yellow,shape=square,flag=1,i=6743,u=0.14675290922237116,v=0.20091568687579642,w=0.5143754328790378,x=5.055132311670772 color=purple,shape=square,flag=1,i=6748,u=0.9553096124365628,v=0.49455375195562323,w=0.5197055497829153,x=5.376853905348537 color=red,shape=triangle,flag=0,i=6756,u=0.6235947816770093,v=0.20560818487527288,w=0.5154785032231411,x=7.147889688914161 color=red,shape=circle,flag=0,i=6759,u=0.39608610318639914,v=0.37939129752682976,w=0.5085387583420787,x=5.889957877085802 color=purple,shape=circle,flag=0,i=6762,u=0.6049710532803669,v=0.490699224287502,w=0.4831891128310867,x=6.781366352382849 color=green,shape=square,flag=0,i=6774,u=0.92036166370313,v=0.45844868918735504,w=0.5095426944728964,x=4.426988475486271 color=red,shape=triangle,flag=0,i=6779,u=0.4056134300247821,v=0.8598247876181099,w=0.5088542515244571,x=6.653739825614015 color=purple,shape=square,flag=0,i=6829,u=0.03888002324033257,v=0.7735660118411852,w=0.5211732631929624,x=4.2782931780784645 color=blue,shape=triangle,flag=1,i=6832,u=0.6432597824598862,v=0.14901262084077693,w=0.5117564553618225,x=5.1406747337835546 color=red,shape=circle,flag=0,i=6856,u=0.7932880491788271,v=0.8880971670944571,w=0.5031491081679628,x=4.509254962364701 color=blue,shape=circle,flag=0,i=6869,u=0.25926388548013757,v=0.5697135282840454,w=0.4726970793976213,x=5.823127118388232 color=yellow,shape=circle,flag=1,i=6890,u=0.022797909771872238,v=0.015614560644500175,w=0.5270780603581403,x=5.648996285991914 color=blue,shape=triangle,flag=1,i=6898,u=0.11217428855810008,v=0.4162207461595341,w=0.5160423555935578,x=6.608737264826998 color=green,shape=triangle,flag=1,i=6907,u=0.010595695908571012,v=0.06672239540002456,w=0.5108823870721609,x=4.071499678257095 color=red,shape=circle,flag=0,i=6913,u=0.9176421729631826,v=0.8671864605213498,w=0.5098694331812486,x=5.564145541614013 color=green,shape=triangle,flag=0,i=6942,u=0.951353895111777,v=0.01940942447103189,w=0.5109372851529531,x=4.923770424330399 color=red,shape=circle,flag=1,i=6946,u=0.17359793905549392,v=0.17694790026491025,w=0.5126404694681714,x=6.061380864187323 color=red,shape=circle,flag=0,i=6959,u=0.4218384175706841,v=0.34221928519084654,w=0.5208933241380524,x=5.868278303145508 color=yellow,shape=square,flag=1,i=6993,u=0.5888959381485874,v=0.5797886860288838,w=0.5032120123089436,x=5.720813055528566 color=yellow,shape=triangle,flag=1,i=6999,u=0.10488472811825678,v=0.5453707311201544,w=0.48771992710878564,x=6.5328921635204695 color=green,shape=triangle,flag=1,i=7005,u=0.5781148751093989,v=0.6467442755925816,w=0.5002779723851982,x=4.408524553588991 color=orange,shape=triangle,flag=0,i=7014,u=0.530788020110947,v=0.8463845303921943,w=0.7303882931571825,x=3.8499231205827744 color=blue,shape=circle,flag=1,i=7021,u=0.4365880011170178,v=0.434228648324826,w=0.47027519375091686,x=4.800975965283767 color=red,shape=square,flag=1,i=7024,u=0.49813374365242147,v=0.6191884040469128,w=0.4977393571863557,x=5.161534078410575 color=purple,shape=square,flag=0,i=7045,u=0.697849039991967,v=0.06509252694950973,w=0.5222502487041877,x=4.060077660065311 color=red,shape=square,flag=0,i=7047,u=0.9922157384754378,v=0.7222771324391467,w=0.48950221269029337,x=4.833417715084441 color=purple,shape=square,flag=0,i=7048,u=0.6192278205835859,v=0.9195446956015411,w=0.5239561630151743,x=5.590886995908273 color=yellow,shape=circle,flag=1,i=7050,u=0.8748989765505933,v=0.3447337515145761,w=0.5239204874713691,x=4.976665489675917 color=red,shape=square,flag=1,i=7057,u=0.8886294118927316,v=0.05289470473768887,w=0.49871376027982056,x=5.132911523058775 color=green,shape=triangle,flag=0,i=7065,u=0.098835939441553,v=0.15869889009449,w=0.5019566452657964,x=5.030364056162301 color=red,shape=triangle,flag=0,i=7088,u=0.07595365785052699,v=0.33779382197618024,w=0.4848749687726861,x=4.374322647911401 color=green,shape=circle,flag=0,i=7095,u=0.6247388408475909,v=0.9991523123256862,w=0.5112854921650918,x=1.7767395585015777 color=yellow,shape=square,flag=1,i=7117,u=0.5772905510061195,v=0.2704694133924349,w=0.5066253767169198,x=4.189381943614731 color=purple,shape=circle,flag=0,i=7136,u=0.2894791697512308,v=0.033051608871318194,w=0.492357853325225,x=3.97337756371869 color=red,shape=square,flag=0,i=7144,u=0.025821846900757284,v=0.6022995464291134,w=0.4988985530813158,x=5.988476968485563 color=blue,shape=square,flag=0,i=7150,u=0.5414584323905408,v=0.3830518548789039,w=0.45250406632977,x=3.9732956639691976 color=purple,shape=circle,flag=0,i=7165,u=0.944217921762593,v=0.7379177249833838,w=0.4961857450966019,x=5.5420971545399595 color=red,shape=triangle,flag=0,i=7172,u=0.24583453718523574,v=0.7527167474295307,w=0.49804635350617144,x=3.5496947568477686 color=red,shape=circle,flag=0,i=7175,u=0.9479991716154256,v=1.0369161740262645,w=0.5058924082666929,x=3.736106391140407 color=red,shape=square,flag=0,i=7196,u=0.1380874722502473,v=0.4808811847111706,w=0.4873049442005348,x=5.034824189616505 color=blue,shape=square,flag=1,i=7199,u=0.2846357685675721,v=0.034308656536918836,w=0.4641984709812777,x=3.707273212888065 color=purple,shape=triangle,flag=0,i=7212,u=0.4769912438446541,v=0.6974938580512576,w=0.5149177854034025,x=6.164832566560516 color=yellow,shape=square,flag=1,i=7214,u=0.1548652026087668,v=0.5135568065293765,w=0.504486407453846,x=4.898030794903259 color=red,shape=circle,flag=1,i=7215,u=0.8981919972663798,v=0.9335974654269985,w=0.5133264530859194,x=6.868209848760329 color=green,shape=circle,flag=1,i=7223,u=0.6563049975968109,v=0.6379310552032911,w=0.5044189452720197,x=5.190778431272816 color=red,shape=triangle,flag=0,i=7241,u=0.5102432961837956,v=0.8032601218913767,w=0.49959153976209736,x=5.889797855839329 color=yellow,shape=circle,flag=1,i=7274,u=0.17064346403614084,v=0.6202252388474442,w=0.5174202251436207,x=4.961985406978 color=blue,shape=triangle,flag=0,i=7279,u=0.23297868396434585,v=0.3273870800244896,w=0.5193758253255788,x=5.590432538345541 color=green,shape=square,flag=0,i=7284,u=0.5826889304785134,v=0.4379875315613875,w=0.5123754896546877,x=6.823585827692646 color=purple,shape=square,flag=0,i=7295,u=0.22449385427756263,v=0.3971284686550203,w=0.5060640328120517,x=6.910704217269335 color=yellow,shape=triangle,flag=1,i=7308,u=0.8729845274981871,v=0.9405993007589881,w=0.4675975411246204,x=6.366380328584516 color=red,shape=circle,flag=0,i=7311,u=0.4760159792216694,v=0.4539394533724592,w=0.5165497252161653,x=5.816294555984473 color=purple,shape=square,flag=0,i=7313,u=0.3379494486558744,v=0.09024371495642125,w=0.5061550180767934,x=5.991137830729246 color=yellow,shape=triangle,flag=1,i=7328,u=0.1792515767605839,v=0.6834184841983879,w=0.4724870771907172,x=6.992102798937367 color=red,shape=circle,flag=0,i=7350,u=0.48674138881981655,v=0.5601685839629958,w=0.5215475885174312,x=4.845824511086588 color=purple,shape=triangle,flag=0,i=7354,u=0.4518325021148949,v=0.9606740777959419,w=0.5020602076054972,x=5.0034495885706605 color=green,shape=square,flag=0,i=7356,u=0.3677938789235593,v=0.5854902724492276,w=0.5180955404184138,x=6.082752945575091 color=green,shape=circle,flag=0,i=7357,u=0.7472639566340794,v=0.9553679229462696,w=0.49650949457838633,x=3.963092622630164 color=purple,shape=circle,flag=0,i=7359,u=0.40681782963444224,v=0.0655781326343009,w=0.5018001474767321,x=5.60497435091079 color=red,shape=square,flag=0,i=7364,u=0.3481359432339536,v=0.17526327279056786,w=0.5017005211923841,x=6.863449538188116 color=blue,shape=circle,flag=0,i=7376,u=0.5949976410326543,v=0.5191497225617425,w=0.4742427379869392,x=4.600043609638491 color=blue,shape=square,flag=1,i=7383,u=0.3349581692171726,v=0.861606342284434,w=0.48260402600288677,x=5.197650156172798 color=blue,shape=square,flag=0,i=7389,u=0.5508253156887805,v=0.7316077037730353,w=0.48251076734931897,x=3.0994689012789327 color=purple,shape=square,flag=0,i=7419,u=0.7411078076522843,v=0.9347041368233332,w=0.5036254975884529,x=5.3347625898825415 color=red,shape=triangle,flag=0,i=7430,u=0.22265578570345146,v=0.8235503097171234,w=0.501220026150789,x=4.896095901427996 color=red,shape=triangle,flag=0,i=7447,u=0.5131460922798405,v=0.7113342782993815,w=0.49563286458819356,x=5.631574318638033 color=red,shape=circle,flag=1,i=7452,u=0.332932610408742,v=0.3813424312656466,w=0.519913787740515,x=3.3437769090221057 color=red,shape=triangle,flag=0,i=7461,u=0.9156378136581979,v=0.35497814831564534,w=0.49632741905136923,x=3.233348607800034 color=red,shape=square,flag=0,i=7479,u=0.9088123146720241,v=0.6212620928222382,w=0.5042444557485127,x=5.770947384921745 color=red,shape=circle,flag=0,i=7502,u=0.7444658886188185,v=0.6578015958365437,w=0.5134977908050689,x=3.240995197922807 color=red,shape=circle,flag=1,i=7513,u=0.17183705995865772,v=0.14047879616986061,w=0.5123300518037209,x=4.952874895112429 color=purple,shape=square,flag=0,i=7517,u=0.9467534335912478,v=0.1383355176433988,w=0.5026801409599071,x=6.465539844355604 color=green,shape=triangle,flag=0,i=7523,u=0.5384462427394077,v=0.9930323232170654,w=0.49414215504572345,x=5.5606351593563055 color=purple,shape=triangle,flag=0,i=7536,u=0.564458104142526,v=0.9317193264811368,w=0.4991679653893298,x=5.483001394288664 color=green,shape=triangle,flag=0,i=7575,u=0.5267857263281721,v=0.3919466692466633,w=0.49252306504100196,x=6.058421712118855 color=red,shape=triangle,flag=0,i=7605,u=0.8185598658994307,v=0.7344138900912033,w=0.508601979318828,x=6.477593123893033 color=red,shape=square,flag=0,i=7634,u=0.7634321528985017,v=0.27486141316393153,w=0.5095201580987395,x=4.763931691692838 color=red,shape=circle,flag=0,i=7636,u=0.5283769818182991,v=0.5724547726373208,w=0.5099196992951244,x=5.644459292514372 color=red,shape=triangle,flag=1,i=7638,u=0.472595692933909,v=0.8931393410060183,w=0.5087010728151856,x=4.909859303511353 color=red,shape=triangle,flag=1,i=7641,u=0.7635415733085489,v=0.7462246374962465,w=0.5104912718214487,x=2.938631427654759 color=yellow,shape=triangle,flag=1,i=7643,u=0.5013903772817212,v=0.523283296143844,w=0.4929001286588054,x=6.81742771665317 color=red,shape=square,flag=0,i=7660,u=0.5256349898180557,v=0.621653350604051,w=0.502096359348107,x=4.316699090916923 color=red,shape=square,flag=1,i=7679,u=0.9260037167179073,v=0.13187092620676266,w=0.5083642379031688,x=4.46724883195843 color=yellow,shape=square,flag=1,i=7692,u=0.7697510501379543,v=0.2567192652387792,w=0.5139696033889535,x=5.024139017937064 color=red,shape=triangle,flag=0,i=7739,u=0.2633957776821456,v=0.9986998232584184,w=0.5166338858250329,x=4.475836835053049 color=purple,shape=circle,flag=0,i=7750,u=0.19743798656579858,v=0.9719825842433248,w=0.4970796576327619,x=5.34154663754632 color=red,shape=triangle,flag=0,i=7769,u=0.8198240155867028,v=0.1744516317206819,w=0.5164417844783209,x=7.665143760643453 color=red,shape=circle,flag=1,i=7774,u=0.494268123163344,v=0.550910576446404,w=0.5077771206852292,x=6.962088321415898 color=red,shape=square,flag=0,i=7777,u=0.9239648455079299,v=0.41693097233335064,w=0.4987475451302378,x=5.222198580651834 color=purple,shape=square,flag=0,i=7786,u=0.1266160089270557,v=0.6749772289150633,w=0.5194603537327731,x=4.4502717072926075 color=red,shape=square,flag=1,i=7803,u=0.793299436299623,v=0.8980969079462682,w=0.4822052646250561,x=5.546280193043419 color=orange,shape=square,flag=1,i=7812,u=0.6641031494716884,v=0.4761904430746673,w=0.37672714168509386,x=2.996754419703491 color=red,shape=square,flag=0,i=7813,u=0.9693818010668185,v=0.17406161729485248,w=0.48349569142111404,x=4.218512665691812 color=green,shape=square,flag=0,i=7816,u=0.5044792725006048,v=0.4543829619916687,w=0.50932367205479,x=5.021235036393633 color=yellow,shape=circle,flag=1,i=7819,u=0.12899615314500912,v=0.6742432137522391,w=0.5153035161069889,x=5.099233475282406 color=red,shape=triangle,flag=1,i=7821,u=0.22430958056208294,v=0.45414801122065074,w=0.5234512169270004,x=4.274817353323278 color=yellow,shape=triangle,flag=1,i=7823,u=0.8351724975473552,v=0.8305911376282958,w=0.5012639322423112,x=4.555232102203505 color=blue,shape=square,flag=1,i=7825,u=0.20457489799150097,v=0.330778086672915,w=0.49055529747641874,x=4.981354523652595 color=red,shape=triangle,flag=1,i=7829,u=0.3780586679727824,v=0.11042249907618684,w=0.5266492101068199,x=3.3635598306816212 color=blue,shape=square,flag=1,i=7871,u=0.20257433596117635,v=0.7014598200673442,w=0.4903853568506331,x=4.00150176969896 color=yellow,shape=triangle,flag=0,i=7874,u=0.7694964962813713,v=0.8481074947826541,w=0.5038581322444717,x=4.521973140661328 color=purple,shape=circle,flag=0,i=7877,u=0.7264020235543306,v=0.616535652765936,w=0.49921334870186695,x=3.657073127268083 color=red,shape=triangle,flag=0,i=7879,u=0.21834468318651634,v=0.39504936238956534,w=0.5281818881512426,x=3.898015300613191 color=yellow,shape=circle,flag=1,i=7883,u=0.5742281300422394,v=0.7466221221826144,w=0.5222306209495245,x=4.569119357199804 color=yellow,shape=triangle,flag=1,i=7886,u=0.5712380210568203,v=0.18979724377735452,w=0.506235609638394,x=5.70081134859861 color=red,shape=circle,flag=0,i=7901,u=0.8807662999840191,v=0.891986759360848,w=0.5008797751056804,x=4.410678999047792 color=green,shape=circle,flag=0,i=7904,u=0.6094063312934279,v=0.6698227962073791,w=0.4950993306940467,x=5.368755632790196 color=red,shape=circle,flag=0,i=7905,u=0.9565533346212595,v=0.9904166259543984,w=0.5009803717283337,x=2.6418791288018317 color=purple,shape=triangle,flag=0,i=7906,u=0.5099089725012095,v=0.9169139891019003,w=0.492833397732509,x=5.944109942271144 color=green,shape=square,flag=0,i=7908,u=0.01506263540829611,v=0.2018815596654685,w=0.5103695699096816,x=4.223336764925055 color=green,shape=circle,flag=0,i=7920,u=0.32127262288190883,v=0.3153027889655263,w=0.49949005571269994,x=4.793467059363383 color=green,shape=circle,flag=0,i=7942,u=0.8801917177211557,v=0.9588604800847801,w=0.5042380823779957,x=3.3129293827158492 color=yellow,shape=square,flag=1,i=7947,u=0.8812869784490356,v=0.9424539077564031,w=0.49902050126337094,x=4.694427305565892 color=red,shape=square,flag=0,i=7952,u=0.5450596245553117,v=0.43027043400839204,w=0.4915413614845622,x=5.745446273942569 color=orange,shape=square,flag=1,i=7959,u=0.2728113115244907,v=0.09813669204082831,w=0.3760742207757139,x=4.083646773701023 color=green,shape=square,flag=0,i=7964,u=0.7941870563098401,v=0.2722817307228691,w=0.5029107572438085,x=5.4586179628470575 color=red,shape=circle,flag=1,i=7977,u=0.11576343991948446,v=0.030160808455117052,w=0.5006117810191338,x=4.335867196315032 color=yellow,shape=triangle,flag=1,i=7992,u=0.4877340178155548,v=0.9836298301233908,w=0.5063368828198392,x=7.497694316500325 color=green,shape=circle,flag=1,i=8002,u=0.7072040887079999,v=0.653683735600399,w=0.5068944506247137,x=6.1409965547445955 color=red,shape=triangle,flag=0,i=8004,u=0.0237327215667964,v=0.2591149124409372,w=0.533662500226452,x=4.026635846320427 color=red,shape=square,flag=0,i=8008,u=0.8645220057901577,v=0.0466465560982543,w=0.4873985239030229,x=3.2070523626683993 color=purple,shape=triangle,flag=0,i=8013,u=0.9677055220569556,v=0.1048748996521709,w=0.4979933363874665,x=4.026033842041724 color=red,shape=triangle,flag=0,i=8040,u=0.2831848707319933,v=0.32131377330244926,w=0.5314136187817202,x=6.023647805153671 color=blue,shape=square,flag=0,i=8062,u=0.3562517734051851,v=0.34719121809398723,w=0.4881963142395454,x=5.1376583368523745 color=purple,shape=square,flag=0,i=8070,u=0.47681180128054845,v=0.9285748572772208,w=0.5135919940402126,x=6.253030888985303 color=orange,shape=triangle,flag=1,i=8076,u=0.2299259478227308,v=0.6434601121853303,w=0.7116984694194914,x=4.631821964030653 color=purple,shape=square,flag=0,i=8079,u=0.1715726120373201,v=0.47674256289856254,w=0.5111647189018764,x=5.481772374108111 color=red,shape=square,flag=1,i=8093,u=0.9007445187355522,v=0.20800914937635862,w=0.49527195917301153,x=4.772464644511669 color=red,shape=square,flag=0,i=8101,u=0.4150341839963011,v=0.4090264939836453,w=0.49796865355519715,x=5.266477636811369 color=red,shape=triangle,flag=0,i=8113,u=0.803340198671731,v=0.3210179865614411,w=0.5173700325534561,x=6.255061981639997 color=purple,shape=square,flag=0,i=8115,u=0.2990878701081897,v=0.6921656633697894,w=0.5064949137741244,x=3.226321942078377 color=red,shape=square,flag=1,i=8119,u=0.27061069896386114,v=0.7785388652652188,w=0.4883358026633603,x=4.114220994567091 color=yellow,shape=circle,flag=1,i=8123,u=0.14138299958981604,v=0.585726662205711,w=0.5321222049364318,x=3.177123105850282 color=red,shape=circle,flag=1,i=8186,u=0.8168561888683831,v=0.7520909676391622,w=0.5191409563787748,x=4.717467646706537 color=red,shape=triangle,flag=0,i=8189,u=0.31233982180076203,v=0.29958508985032184,w=0.5249803596062355,x=4.995393580200543 color=green,shape=circle,flag=0,i=8192,u=0.48005832422866,v=0.9656155509002752,w=0.500075157787493,x=4.599625421020413 color=red,shape=circle,flag=0,i=8206,u=0.36072228309983356,v=0.42804063280133536,w=0.513709617083048,x=2.3793012409694487 color=green,shape=circle,flag=0,i=8244,u=0.22821342960813873,v=0.20185155254119747,w=0.49333966674156965,x=5.843436214265112 color=red,shape=square,flag=0,i=8269,u=0.20396893614842126,v=0.7374670948120775,w=0.4922902862688887,x=3.5922792661219547 color=yellow,shape=square,flag=1,i=8281,u=0.5141908306252949,v=0.34078571138541347,w=0.5009205837737613,x=4.0322191772088125 color=red,shape=square,flag=0,i=8293,u=0.21158032304275443,v=0.20811956695843548,w=0.49834105290954284,x=5.397691717692726 color=purple,shape=square,flag=0,i=8298,u=0.0009443393761726648,v=0.38809253603320815,w=0.49286241834730166,x=5.222846861751149 color=yellow,shape=square,flag=1,i=8314,u=0.5697438526457065,v=0.6556378790688947,w=0.49933731484714794,x=5.39116026738095 color=blue,shape=square,flag=1,i=8322,u=0.36895377459474843,v=0.03821420985385149,w=0.474713631451075,x=4.862260461363626 color=red,shape=square,flag=0,i=8359,u=0.07514869684349179,v=0.8183685215443869,w=0.5086364545737491,x=6.764395190535715 color=purple,shape=circle,flag=0,i=8360,u=0.7768606276858472,v=0.883269713735061,w=0.4962542131564194,x=5.7784139239954735 color=red,shape=triangle,flag=0,i=8373,u=0.9571447205386587,v=0.6683306186275646,w=0.5234210775349102,x=4.029116090090505 color=blue,shape=circle,flag=0,i=8384,u=0.6778348169115466,v=0.8976034585339653,w=0.492136137675184,x=4.2611419617960635 color=red,shape=square,flag=1,i=8393,u=0.8145322861330438,v=0.5188951839598379,w=0.5101708156360694,x=5.688177873777448 color=green,shape=square,flag=0,i=8408,u=0.9319903266708364,v=0.2552528002265292,w=0.4942626375188785,x=4.406676430407909 color=red,shape=circle,flag=1,i=8415,u=0.3737966638793856,v=0.4350350661877376,w=0.5165896987927496,x=4.057651738121976 color=yellow,shape=square,flag=1,i=8447,u=0.4659528108725113,v=0.4849582822316004,w=0.4996673036265974,x=4.3359382688858075 color=red,shape=circle,flag=1,i=8456,u=0.7718966567879757,v=0.7623535522035053,w=0.509642190695718,x=3.4456739112551173 color=blue,shape=triangle,flag=1,i=8462,u=0.17417141364366562,v=0.32259267046228357,w=0.4914666991467544,x=3.607842468256724 color=yellow,shape=circle,flag=1,i=8468,u=0.3160565136615746,v=0.7258966130017701,w=0.5167828894515255,x=5.685094077593349 color=green,shape=square,flag=1,i=8474,u=0.6888318900707574,v=0.7663070082537083,w=0.49673338840445225,x=4.085375008394762 color=red,shape=triangle,flag=1,i=8488,u=0.8725601901985022,v=0.7282278659872645,w=0.5170005436076226,x=4.655617704867677 color=red,shape=square,flag=0,i=8494,u=0.57813641146833,v=0.016303628886071397,w=0.5194109442337287,x=5.778684635132735 color=blue,shape=triangle,flag=0,i=8496,u=0.4877196399515924,v=0.12693357745919653,w=0.49626122819564394,x=5.139701252238061 color=red,shape=square,flag=0,i=8506,u=0.4536407571288589,v=0.4086845382855824,w=0.5190710521348575,x=3.754579654014337 color=blue,shape=square,flag=0,i=8507,u=0.2297435330917933,v=0.07882370012429851,w=0.4803589650750251,x=5.523689542616318 color=red,shape=circle,flag=0,i=8517,u=0.11069658735859877,v=0.2047762628081064,w=0.5108878400056613,x=6.392869487227589 color=red,shape=circle,flag=0,i=8519,u=0.542189494928912,v=0.44711482178495193,w=0.5062600717517605,x=6.74430347319025 color=red,shape=circle,flag=0,i=8540,u=0.8718737612065814,v=0.7850682501563381,w=0.5138776278910985,x=4.122174700518037 color=red,shape=square,flag=1,i=8550,u=0.20086377295854685,v=0.12687473315218523,w=0.5101479818790312,x=6.311620164580912 color=green,shape=circle,flag=0,i=8553,u=0.25348737093895146,v=0.4427485433100772,w=0.49688549289589706,x=5.536464725754262 color=yellow,shape=circle,flag=1,i=8555,u=0.1113912897297743,v=0.7961745615073627,w=0.5195582693180096,x=6.656055560387666 color=blue,shape=triangle,flag=1,i=8556,u=0.4087681879652537,v=0.8836337953532215,w=0.49787473850630415,x=3.991255488815962 color=red,shape=square,flag=0,i=8581,u=0.5990853016967539,v=0.49312851059924045,w=0.5121823973667605,x=6.7769738887943305 color=purple,shape=square,flag=0,i=8592,u=0.3470099382062559,v=0.4047370584614989,w=0.4896994890132443,x=5.78652394849317 color=yellow,shape=square,flag=1,i=8600,u=0.35843383541104135,v=0.7915256928485487,w=0.48869486565694287,x=3.8755770712519086 color=red,shape=square,flag=1,i=8627,u=0.3475933222458566,v=0.8932566012539622,w=0.5192762645754546,x=3.8511325789201414 color=green,shape=triangle,flag=0,i=8637,u=0.5579523916184917,v=0.07645377562171862,w=0.48406050876403317,x=4.516167538234658 color=purple,shape=triangle,flag=0,i=8641,u=0.25476179290265377,v=0.706689885658199,w=0.5000597522573289,x=4.447509032986428 color=yellow,shape=square,flag=1,i=8644,u=0.789804715787522,v=0.08492026505562678,w=0.4952194118324802,x=6.451960792802628 color=green,shape=square,flag=0,i=8649,u=0.1598220212724255,v=0.02611227073971989,w=0.5074391566237934,x=5.16440348882238 color=purple,shape=circle,flag=0,i=8650,u=0.14981907033853037,v=0.43358946232181794,w=0.49097880055998006,x=4.636867930204307 color=blue,shape=circle,flag=0,i=8658,u=0.5446107204065721,v=0.5604767893258834,w=0.4808299098354557,x=5.547343156427036 color=red,shape=square,flag=0,i=8660,u=0.2561403606495931,v=0.2506687295256044,w=0.508628492525536,x=3.616802986154939 color=red,shape=triangle,flag=0,i=8664,u=0.810005764737245,v=0.8945981286276391,w=0.5081039922981421,x=4.931439557625551 color=blue,shape=circle,flag=1,i=8672,u=0.44395564565601353,v=0.4962942139299984,w=0.4779476055661547,x=7.453854753999149 color=purple,shape=triangle,flag=1,i=8673,u=0.11908056326144001,v=0.22181294737757573,w=0.4993588818472647,x=4.5807526894603745 color=red,shape=square,flag=0,i=8677,u=0.8281016851398877,v=0.7132410987840627,w=0.506764382593966,x=3.860261954310721 color=purple,shape=square,flag=0,i=8678,u=0.2718676983317567,v=0.7611921753787938,w=0.49424427833493995,x=4.4276024609948905 color=green,shape=triangle,flag=0,i=8681,u=0.4176693928160221,v=0.09133222803509622,w=0.4836138718665448,x=7.026520387683116 color=orange,shape=triangle,flag=0,i=8701,u=0.2725988558078547,v=0.3862537521905285,w=0.699946598035849,x=2.6553678804373884 color=yellow,shape=square,flag=0,i=8715,u=0.008952214123129854,v=0.35995275457905873,w=0.48992038220105244,x=3.621945875272798 color=red,shape=square,flag=0,i=8737,u=0.3853757018330435,v=0.7847538469333147,w=0.5152476037559668,x=3.315038081713256 color=red,shape=circle,flag=0,i=8748,u=0.4039054218827741,v=0.3276051706669772,w=0.5243957894883501,x=4.895102658178135 color=yellow,shape=square,flag=1,i=8756,u=0.8093704572694426,v=0.9734174278792828,w=0.48612808334052166,x=3.7124036982591524 color=yellow,shape=square,flag=1,i=8757,u=0.3139095744066982,v=0.8877570984399351,w=0.4898183054562425,x=3.864238924248801 color=purple,shape=square,flag=0,i=8779,u=0.6345624907929879,v=0.1779834293934025,w=0.48387021131671126,x=5.435765989783728 color=red,shape=square,flag=0,i=8785,u=0.7827206701253899,v=0.5605386489519403,w=0.5263241714807793,x=5.509550738120939 color=red,shape=square,flag=0,i=8801,u=0.7539400478705093,v=0.04011530358785187,w=0.5373661330957247,x=3.571710668754149 color=green,shape=circle,flag=1,i=8827,u=0.42541391007987583,v=0.8479815321289037,w=0.49346950133275896,x=6.198344604700275 color=red,shape=triangle,flag=0,i=8850,u=0.15695717727974334,v=0.6764088102235764,w=0.502098359972572,x=5.180577922631893 color=yellow,shape=square,flag=1,i=8857,u=0.10640657662691066,v=0.36357044255335336,w=0.49163002159908353,x=6.433270109386679 color=green,shape=circle,flag=0,i=8874,u=0.4916056543827738,v=0.4432991839008358,w=0.49026005105510695,x=5.6234301612182085 color=red,shape=square,flag=0,i=8888,u=0.8132318813423208,v=0.6362461681155229,w=0.5172130974055371,x=5.922091442004491 color=purple,shape=triangle,flag=0,i=8918,u=0.21989580410270027,v=0.8348600460317008,w=0.49790789876635794,x=6.510688352365634 color=purple,shape=triangle,flag=0,i=8924,u=0.07644699812156319,v=0.24881514980517194,w=0.49674481488258054,x=7.095839162258339 color=yellow,shape=triangle,flag=1,i=8935,u=0.26821116898686204,v=0.26940011917560547,w=0.4986030019371527,x=4.777909939128046 color=red,shape=square,flag=1,i=8941,u=0.4367168224514574,v=0.7488269269029236,w=0.507047213052922,x=7.506196629192871 color=red,shape=triangle,flag=0,i=8963,u=0.24054793553982667,v=0.2618823402014181,w=0.4989901442620353,x=7.031245001582079 color=blue,shape=circle,flag=1,i=8965,u=0.7291493248491975,v=0.3092409131842515,w=0.483661745588926,x=4.022568776318198 color=yellow,shape=circle,flag=1,i=8966,u=0.6474146708126227,v=0.8296252006540943,w=0.5060153990435498,x=7.053177596314434 color=red,shape=triangle,flag=1,i=8982,u=0.30155376997395167,v=0.9999946837499262,w=0.48607411733411804,x=5.823518217312073 color=purple,shape=square,flag=0,i=8989,u=0.15374580399114035,v=0.18755871227920562,w=0.4861790458233523,x=5.231976429274122 color=red,shape=circle,flag=0,i=8990,u=0.8997518246479991,v=0.9797604496781345,w=0.5213508868934383,x=4.543560849565531 color=orange,shape=triangle,flag=1,i=9030,u=0.38757743328467886,v=0.2912146076739721,w=0.7023173255403671,x=3.6960197738656664 color=purple,shape=square,flag=0,i=9032,u=0.885983182286682,v=0.037134205365180084,w=0.48151518397375026,x=5.581523273018959 color=red,shape=square,flag=1,i=9037,u=0.21379323810017659,v=0.17552334077655318,w=0.5052799861300972,x=6.99195498944034 color=purple,shape=triangle,flag=0,i=9041,u=0.06208574957565738,v=0.43095792240670827,w=0.49373249533446223,x=6.619316155293433 color=red,shape=square,flag=1,i=9052,u=0.7299684002085917,v=0.20220283585645837,w=0.5053689603927922,x=4.856416763955198 color=green,shape=triangle,flag=0,i=9073,u=0.04585250350751746,v=0.8031503807076456,w=0.4887630026090041,x=4.8916267035710455 color=blue,shape=triangle,flag=0,i=9081,u=0.054266317926766616,v=0.3476494653394624,w=0.49571907114514874,x=4.4231986849294875 color=yellow,shape=square,flag=1,i=9094,u=0.27741585216934417,v=0.7388612749734185,w=0.5111668501680261,x=6.738195084279833 color=red,shape=square,flag=0,i=9107,u=0.38172268374833473,v=0.17980221819527864,w=0.49686386827918844,x=5.81848889706322 color=purple,shape=square,flag=0,i=9108,u=0.6050603030907421,v=0.6455003077032176,w=0.4807828772100833,x=4.859662859992859 color=green,shape=square,flag=0,i=9110,u=0.824425533603432,v=0.47606758311171826,w=0.5040029603810764,x=4.8060410562339575 color=red,shape=triangle,flag=0,i=9113,u=0.1947275808525174,v=0.7966051959055993,w=0.48257581512393993,x=6.887781282006995 color=blue,shape=triangle,flag=1,i=9115,u=0.7444699717618222,v=0.4781529616568201,w=0.4966461941793798,x=6.8635351135804585 color=blue,shape=square,flag=0,i=9125,u=0.13986988778773646,v=0.7152865235103113,w=0.4574206931273791,x=4.183110711103503 color=yellow,shape=square,flag=1,i=9132,u=0.9808394637494983,v=0.40257779222117007,w=0.5078413067758386,x=3.5514231147308046 color=red,shape=circle,flag=0,i=9159,u=0.5077709879895513,v=0.5728492950744577,w=0.5159249647554017,x=6.259731522275572 color=yellow,shape=circle,flag=1,i=9174,u=0.37244702785695716,v=0.3487377022098693,w=0.49881177578239244,x=5.795374632483997 color=red,shape=triangle,flag=0,i=9175,u=0.19913137088527966,v=0.5187316705588461,w=0.4714517320764309,x=5.099914068298475 color=orange,shape=circle,flag=1,i=9180,u=0.026745553707732128,v=0.21779299061284596,w=0.5864161051273346,x=5.184662140513534 color=red,shape=circle,flag=0,i=9194,u=0.3887855351726862,v=0.38758417878155316,w=0.5105749410785941,x=5.64683935879446 color=red,shape=square,flag=1,i=9198,u=0.7013532302293408,v=0.7232699229726844,w=0.5037542650034493,x=3.7861420260520426 color=blue,shape=square,flag=0,i=9200,u=0.046971452930954394,v=0.2630429530291283,w=0.455287516932772,x=3.349106662824773 color=red,shape=triangle,flag=0,i=9201,u=0.1292018506946545,v=0.5741225252703519,w=0.4746773887739432,x=6.822431485283919 color=blue,shape=circle,flag=0,i=9208,u=0.27012723484676104,v=0.8135898329076594,w=0.49092853059749675,x=5.079018984437171 color=yellow,shape=square,flag=1,i=9210,u=0.028686545367107463,v=0.47131931054906284,w=0.5104258863494733,x=6.315737213339897 color=blue,shape=square,flag=0,i=9221,u=0.7167811505678501,v=0.531941131252952,w=0.4528614075427426,x=4.091536961008674 color=yellow,shape=square,flag=1,i=9226,u=0.08770235588186515,v=0.9163626703991583,w=0.5132343418291514,x=5.714818392983794 color=green,shape=triangle,flag=0,i=9237,u=0.9003147737355317,v=0.06796136184900581,w=0.4786679267548704,x=2.664167919754516 color=purple,shape=square,flag=0,i=9238,u=0.26459261554897395,v=0.6371850119300632,w=0.48135264038173575,x=4.223431874599669 color=green,shape=circle,flag=0,i=9241,u=0.8190519732467753,v=0.3477785647528371,w=0.499520278698399,x=5.894600369117107 color=green,shape=square,flag=1,i=9257,u=0.22961383550996894,v=0.19280013564823295,w=0.5100440972478226,x=5.309564700170622 color=blue,shape=square,flag=0,i=9268,u=0.8126930355527541,v=0.07341657355410935,w=0.45858294465674343,x=4.161642865200393 color=red,shape=circle,flag=0,i=9272,u=0.7763540923452403,v=0.8372565550920146,w=0.5133384008788858,x=3.448459609826062 color=red,shape=square,flag=0,i=9283,u=0.620617936642009,v=0.9240461620339983,w=0.5108622414017604,x=7.079247866846053 color=red,shape=triangle,flag=0,i=9284,u=0.8700272612588612,v=0.46841348936537464,w=0.48066253107206536,x=5.608067139698977 color=purple,shape=square,flag=0,i=9289,u=0.7517779283917652,v=0.40202937969283314,w=0.4794223206065857,x=4.03786842389076 color=blue,shape=square,flag=0,i=9296,u=0.7190390075864663,v=0.03072263624465177,w=0.45611420692333937,x=5.753381508837911 color=yellow,shape=triangle,flag=1,i=9301,u=0.13026923260250933,v=0.6797653794531855,w=0.5035263164712063,x=5.6893007027110984 color=blue,shape=square,flag=0,i=9312,u=0.7085517465437186,v=0.17197180452055727,w=0.4614268654368201,x=3.8969198904752402 color=yellow,shape=square,flag=1,i=9322,u=0.5365666017788426,v=0.8245167547731835,w=0.5133918529146169,x=4.6360351566736915 color=red,shape=circle,flag=0,i=9345,u=0.965850682512915,v=0.9285587833091115,w=0.527289155220966,x=5.43056092953037 color=red,shape=square,flag=0,i=9357,u=0.3614780624071209,v=0.7282887364010839,w=0.5161979553883289,x=4.321601733537874 color=blue,shape=circle,flag=1,i=9359,u=0.6778972832833723,v=0.11457559561152497,w=0.4948660597602916,x=5.037891203973714 color=red,shape=square,flag=1,i=9361,u=0.5775169425661867,v=0.14437402107683794,w=0.5162950254122401,x=5.602026301762984 color=yellow,shape=triangle,flag=0,i=9367,u=0.8426405339502009,v=0.06709989638671376,w=0.5109099828354089,x=4.3835871371613555 color=green,shape=triangle,flag=1,i=9400,u=0.12975362467386165,v=0.1870688265523458,w=0.4890597595250319,x=3.0156540960017577 color=yellow,shape=square,flag=0,i=9401,u=0.3911552171110998,v=0.2666727279195633,w=0.5126584809354453,x=5.185253010947496 color=red,shape=triangle,flag=0,i=9405,u=0.9133756483058748,v=0.01503062389521359,w=0.5000264773134935,x=5.552789249049147 color=red,shape=triangle,flag=0,i=9412,u=0.8094227738671317,v=0.9549635298811832,w=0.5042479194364589,x=5.15961093055682 color=yellow,shape=triangle,flag=1,i=9429,u=0.7595898724868989,v=0.9265515354497086,w=0.5145524639630858,x=6.250025998233281 color=blue,shape=triangle,flag=1,i=9448,u=0.35490950499154705,v=0.7218135749871497,w=0.48960415497743376,x=4.056578595076009 color=yellow,shape=circle,flag=1,i=9456,u=0.5542755253986698,v=0.9170865180330541,w=0.5073866609590761,x=5.311952337983083 color=red,shape=triangle,flag=0,i=9459,u=0.6969632574122253,v=0.6900031247449963,w=0.5145838703085809,x=5.467500840880578 color=green,shape=triangle,flag=0,i=9467,u=0.14971274889813713,v=0.8289364066362704,w=0.48237818566610047,x=4.40495869617859 color=red,shape=triangle,flag=0,i=9478,u=0.4037244835596163,v=0.95010526746133,w=0.5145321856653201,x=5.187214580129454 color=red,shape=triangle,flag=0,i=9479,u=0.6574838670307566,v=0.6071207826230505,w=0.5141624131051571,x=4.915951708455697 color=red,shape=square,flag=0,i=9482,u=0.7823506851287032,v=0.5663159975759049,w=0.5137215344425443,x=6.208724152646211 color=green,shape=square,flag=0,i=9485,u=0.9892470532121387,v=0.5780901879315828,w=0.5050597123131978,x=4.9482978032271925 color=blue,shape=triangle,flag=1,i=9487,u=0.33174000275143345,v=0.9805653422093367,w=0.4874962268522663,x=5.424067024361242 color=blue,shape=triangle,flag=0,i=9498,u=0.08806525704858126,v=0.6845535810031408,w=0.4867587263239217,x=3.9078278769210697 color=red,shape=triangle,flag=0,i=9538,u=0.2787973729554404,v=0.5977060543020113,w=0.5026233410592158,x=5.780033849780893 color=green,shape=circle,flag=1,i=9539,u=0.4727813595399488,v=0.30588276341122556,w=0.5000337989882224,x=5.911155551874862 color=blue,shape=triangle,flag=0,i=9558,u=0.3942232279212846,v=0.681550197633219,w=0.4952276469234024,x=5.258234251088794 color=blue,shape=square,flag=0,i=9572,u=0.2938257724304293,v=0.08310837953715178,w=0.4800033068787473,x=3.6185220418425197 color=red,shape=square,flag=0,i=9574,u=0.36834155261450463,v=0.9846264110458885,w=0.5235116168144827,x=5.387329869125807 color=red,shape=circle,flag=0,i=9581,u=0.1574705000072203,v=0.07671339361312166,w=0.5335770948556834,x=5.105743884182254 color=yellow,shape=circle,flag=1,i=9590,u=0.6919299267049481,v=0.9484760074771249,w=0.5163352271468572,x=6.765298961875992 color=red,shape=circle,flag=0,i=9592,u=0.19117559664839834,v=0.19812131104268485,w=0.5311783251476547,x=7.142330869904646 color=blue,shape=circle,flag=0,i=9594,u=0.40738652017423194,v=0.31001652659599666,w=0.5029058222369502,x=4.4554665489626695 color=yellow,shape=triangle,flag=0,i=9602,u=0.8200160347131148,v=0.660727005159579,w=0.527138830057806,x=5.251564779959805 color=green,shape=square,flag=1,i=9610,u=0.9152180049237623,v=0.10723536008714007,w=0.5082172541278149,x=5.718517397171947 color=purple,shape=circle,flag=0,i=9626,u=0.9430256954134297,v=0.9302480148520449,w=0.49921070901120224,x=4.743852660310452 color=yellow,shape=square,flag=0,i=9633,u=0.26628854546987535,v=0.6509309701742603,w=0.4925628944682385,x=6.198844376628049 color=red,shape=circle,flag=0,i=9643,u=0.9445622642980543,v=0.9328857181669454,w=0.5287018636480739,x=6.176694771281167 color=red,shape=triangle,flag=1,i=9664,u=0.9827089712422166,v=0.8253263003253721,w=0.48370043864582557,x=3.9918476047322016 color=red,shape=triangle,flag=0,i=9667,u=0.7790084522078857,v=0.45700254831314535,w=0.48818199549364266,x=5.791790089867092 color=yellow,shape=circle,flag=1,i=9698,u=0.041328890456797995,v=0.12668786123324816,w=0.5205354351666666,x=3.799743420696681 color=purple,shape=circle,flag=0,i=9707,u=0.5717598551034563,v=0.5639267981974007,w=0.5054823357461689,x=4.911593440660375 color=red,shape=triangle,flag=0,i=9715,u=0.25746263072220565,v=0.17309993043681826,w=0.480189714553768,x=5.480751135712164 color=red,shape=triangle,flag=0,i=9720,u=0.9208142603098871,v=0.27882842146823217,w=0.48355669073004154,x=5.336261003898746 color=green,shape=circle,flag=0,i=9721,u=0.4058569796310627,v=0.2243574488740685,w=0.4971018877195509,x=3.509751222655615 color=red,shape=triangle,flag=1,i=9729,u=0.8503734581546795,v=0.4720811245505807,w=0.47888724537369975,x=4.517638722576222 color=red,shape=circle,flag=0,i=9732,u=0.6401978121634246,v=0.6033735060710232,w=0.5258265023685217,x=5.221307907735327 color=green,shape=square,flag=0,i=9737,u=0.7872653678024677,v=0.3831147538551086,w=0.5011464535428705,x=6.244836782395747 color=red,shape=square,flag=0,i=9741,u=0.004114153406486798,v=0.5897739959178878,w=0.48340205361053473,x=6.947916531652023 color=green,shape=square,flag=0,i=9764,u=0.17073188692307373,v=0.2565606815720137,w=0.50539839593486,x=5.399678059731632 color=red,shape=square,flag=0,i=9769,u=0.6718267664493363,v=0.9723218287519877,w=0.49227152266751234,x=3.430294262013731 color=red,shape=circle,flag=0,i=9784,u=0.9296061848811287,v=0.9606905566403592,w=0.5214848119261636,x=4.8851603131892345 color=green,shape=triangle,flag=0,i=9796,u=0.8370379794259183,v=0.7120045845357958,w=0.4951090907930372,x=3.206150179456037 color=orange,shape=square,flag=0,i=9802,u=0.06700570246738258,v=0.45836984859846863,w=0.3984818598933386,x=3.9455761243945395 color=red,shape=square,flag=0,i=9837,u=0.3972358704086074,v=0.010212272457749472,w=0.4893090841301849,x=4.774931845745172 color=red,shape=square,flag=1,i=9838,u=0.5904621753195094,v=0.6900947625728051,w=0.49317866401113697,x=4.2116935711587 color=purple,shape=square,flag=0,i=9839,u=0.4938998227017718,v=0.8568823533347376,w=0.48851346307245236,x=5.571639888526984 color=red,shape=square,flag=0,i=9840,u=0.9593132165589725,v=0.39020310394037494,w=0.48951185250415524,x=4.733094821047713 color=blue,shape=square,flag=1,i=9845,u=0.6341780708209619,v=0.7224458394381865,w=0.5003683856303103,x=4.618637960670433 color=blue,shape=square,flag=1,i=9847,u=0.8347873205591642,v=0.6360297648978646,w=0.49738689428558946,x=4.615623749577749 color=green,shape=triangle,flag=1,i=9850,u=0.6682951364863037,v=0.14113578797016302,w=0.4904489447055702,x=5.5892837868660346 color=red,shape=triangle,flag=0,i=9865,u=0.9502855583392119,v=0.18664717140755305,w=0.47478258398761414,x=5.825006891468905 color=green,shape=square,flag=1,i=9868,u=0.3703931977340147,v=0.7108800916931524,w=0.5097636206745125,x=4.272815850070903 color=purple,shape=circle,flag=1,i=9871,u=0.637721821270784,v=0.8846735721773494,w=0.5053741363864312,x=5.189698676815268 color=yellow,shape=square,flag=1,i=9876,u=0.9241687308294335,v=0.9180432017520105,w=0.500429013622843,x=5.30277566077152 color=red,shape=triangle,flag=0,i=9880,u=0.07392166677675716,v=0.802966889255393,w=0.4723578310073455,x=3.9680667698693326 color=red,shape=square,flag=0,i=9884,u=0.8676686917239586,v=0.4671422139026725,w=0.47848920569684533,x=4.671710740399873 color=yellow,shape=square,flag=1,i=9889,u=0.15983367713251317,v=0.884002323354841,w=0.5018774252487583,x=4.683217783951939 color=orange,shape=circle,flag=1,i=9891,u=0.3507739780054132,v=0.23681134469165388,w=0.5839008348261921,x=5.586479409147355 color=red,shape=circle,flag=0,i=9897,u=0.2027638546120365,v=0.10663505863300009,w=0.5110753569843774,x=4.142367046527823 color=red,shape=triangle,flag=1,i=9899,u=0.20875225791064334,v=0.026477975740831328,w=0.4790158661333253,x=4.859174878743788 color=red,shape=square,flag=0,i=9928,u=0.926240346852433,v=0.8157414138097383,w=0.48267432464926147,x=4.414280522949761 color=orange,shape=triangle,flag=0,i=9947,u=0.0775040970813301,v=0.2349883481677424,w=0.680236871400121,x=4.93314591314715 color=red,shape=circle,flag=0,i=9948,u=0.001384930963921116,v=-0.04646102895619495,w=0.5064389927763275,x=5.047609204210816 color=blue,shape=square,flag=1,i=9964,u=0.36359022145724174,v=0.8169367015685594,w=0.48799623194687536,x=5.395564954400644 color=red,shape=triangle,flag=0,i=9968,u=0.6664951219850609,v=0.00729572463031114,w=0.4829971887973979,x=6.11788992814953 color=yellow,shape=square,flag=0,i=9986,u=0.6360787450678319,v=0.5700247215428541,w=0.5080278906584305,x=3.251821941378497 color=blue,shape=square,flag=0,i=9990,u=0.3970909761018069,v=0.3873498326266669,w=0.4896248875937391,x=7.623055607008342 color=red,shape=square,flag=0,i=9992,u=0.4174205269471166,v=0.4899654335229112,w=0.4887066799276838,x=3.709175992443242 color=red,shape=circle,flag=0,i=9997,u=0.5983435650407365,v=0.5252317110376808,w=0.5080040224609491,x=4.598143125962596 color=orange,shape=triangle,flag=1,i=9998,u=0.17339816111848216,v=0.9350095940690382,w=0.6782037689680854,x=4.408185232495415 color=purple,shape=triangle,flag=0,i=10014,u=0.06072618267891394,v=0.34535436406720355,w=0.4718481627239308,x=5.1448104406062125 color=blue,shape=square,flag=1,i=10015,u=0.6366858287857551,v=0.4872060134264774,w=0.4856155915169885,x=5.879216136738878 color=blue,shape=square,flag=0,i=10017,u=0.6359337202043088,v=0.7522439193656397,w=0.4842120565998406,x=3.0720598435493542 color=red,shape=square,flag=1,i=10020,u=0.6903880373113135,v=0.7052172949460651,w=0.4888173141081072,x=4.6534512790916205 color=red,shape=square,flag=1,i=10043,u=0.223218213339332,v=0.8132045407973688,w=0.4879281537092341,x=3.623355848002848 color=blue,shape=circle,flag=0,i=10048,u=0.11614233186594036,v=0.9974328269342161,w=0.4923241396550544,x=4.9181740963506595 color=red,shape=circle,flag=0,i=10061,u=0.03054566851221152,v=0.04776589296242091,w=0.4980992608226862,x=4.407725760243908 color=red,shape=square,flag=0,i=10079,u=0.2965702612274227,v=0.7281142757699013,w=0.4771973730469952,x=4.795931631445647 color=red,shape=triangle,flag=0,i=10095,u=0.4027282795814302,v=0.6050782938029197,w=0.46037656929186943,x=3.847528108645965 color=red,shape=square,flag=0,i=10112,u=0.7836723307085427,v=0.7518713646037316,w=0.4724337254704511,x=7.122560644352233 color=yellow,shape=square,flag=1,i=10124,u=0.670664735519011,v=0.8234649982301067,w=0.5031829100975869,x=3.316302908539081 color=yellow,shape=circle,flag=1,i=10132,u=0.6008865185963321,v=0.0257466507560683,w=0.5137309855336052,x=5.331030182116883 color=yellow,shape=square,flag=1,i=10146,u=0.7270499205866984,v=0.17307146439448928,w=0.4963048631275019,x=7.121337333209979 color=red,shape=triangle,flag=1,i=10150,u=0.5688860498950544,v=0.9432006616575501,w=0.46932837079885015,x=6.752823694250325 color=red,shape=square,flag=0,i=10151,u=0.6218541887127367,v=0.7797471633956696,w=0.486447718875377,x=5.4738654230575605 color=purple,shape=triangle,flag=0,i=10152,u=0.48527261160303004,v=0.585827346663466,w=0.4795467669209268,x=5.27956435604168 color=red,shape=circle,flag=0,i=10171,u=0.3182854807732849,v=0.3677954873174411,w=0.500094596478842,x=3.932177775501122 color=purple,shape=circle,flag=0,i=10175,u=0.3695089656769409,v=0.29499422941358,w=0.5088692676676334,x=6.276836590018462 color=orange,shape=circle,flag=1,i=10183,u=0.3549503392804705,v=0.5789176986942438,w=0.5804247579234454,x=5.790396267071447 color=red,shape=triangle,flag=1,i=10213,u=0.49165683757057366,v=0.1677288732391946,w=0.48148162606303946,x=5.1728129729795 color=blue,shape=circle,flag=1,i=10227,u=0.5293102206858952,v=0.3751471148580783,w=0.48074202911961395,x=6.138820851430933 color=blue,shape=circle,flag=1,i=10239,u=0.6420976262887303,v=0.5908389417652758,w=0.4833295556454372,x=3.7756814224440824 color=red,shape=triangle,flag=0,i=10246,u=0.7444639868523053,v=0.9207704110471246,w=0.4821147121851418,x=3.9691874726040797 color=yellow,shape=square,flag=1,i=10254,u=0.1542529120347178,v=0.3979484141483848,w=0.4943326440596587,x=4.678860834821809 color=red,shape=square,flag=0,i=10259,u=0.9100309840822012,v=0.8248903826644706,w=0.48186009597664314,x=4.4578951413316945 color=red,shape=triangle,flag=0,i=10273,u=0.018618657602898048,v=0.028050985057383238,w=0.4723361630348696,x=5.650117529565353 color=green,shape=circle,flag=0,i=10287,u=0.380588951047943,v=0.9432036800398204,w=0.4902082787727849,x=5.155661156846629 color=orange,shape=circle,flag=1,i=10292,u=0.31837857956949256,v=0.27304068210494115,w=0.578899816258626,x=5.786126025532204 color=yellow,shape=circle,flag=1,i=10309,u=0.6902349067081704,v=0.25378719605789046,w=0.5040016713116696,x=4.812138094867828 color=red,shape=square,flag=0,i=10324,u=0.6946844867784652,v=0.29518475398919375,w=0.4927509262328253,x=4.840797365557551 color=red,shape=triangle,flag=1,i=10332,u=0.8678442691791926,v=0.6091142064852949,w=0.45566205612353117,x=6.621885107061575 color=blue,shape=circle,flag=1,i=10361,u=0.18734077997606402,v=0.43057564962814354,w=0.4860517243897379,x=3.3628410099181436 color=orange,shape=square,flag=1,i=10364,u=0.058701011660487246,v=0.0024486660337188493,w=0.40453190647286613,x=2.7595222276739046 color=red,shape=square,flag=0,i=10377,u=0.40074434771319645,v=0.8858692458551669,w=0.5001034027863797,x=5.524256954720021 color=red,shape=triangle,flag=1,i=10381,u=0.598852132830924,v=0.22513365255483608,w=0.4585942527102313,x=4.0428843518171105 color=blue,shape=square,flag=0,i=10384,u=0.32390090697376095,v=0.12332922299332161,w=0.5006041398872025,x=3.147212881176131 color=green,shape=triangle,flag=0,i=10387,u=0.09558656808256394,v=0.6941294500901372,w=0.49227479318628864,x=3.9234313092361055 color=green,shape=triangle,flag=0,i=10389,u=0.5828628013291147,v=0.6450916716182998,w=0.4966328544354502,x=5.550035797666644 color=yellow,shape=circle,flag=1,i=10390,u=0.44453628889953445,v=0.2862979496613094,w=0.51090427670511,x=4.106918947724256 color=red,shape=circle,flag=1,i=10441,u=0.8392661641723219,v=0.8162254792785985,w=0.509406082314283,x=3.2157801813406675 color=red,shape=square,flag=0,i=10444,u=0.37463191756149894,v=0.5164572501446436,w=0.4995921410953584,x=5.992441205035628 color=red,shape=triangle,flag=0,i=10450,u=0.8939541353212057,v=0.43537281987781684,w=0.45535988644152453,x=5.609043571666418 color=red,shape=circle,flag=0,i=10472,u=0.8595124880771323,v=0.9569170074785238,w=0.5141491068253298,x=5.368165481005893 color=blue,shape=triangle,flag=1,i=10483,u=0.147742722730816,v=0.20372021048433941,w=0.47294180453453544,x=4.627391489038878 color=red,shape=square,flag=0,i=10484,u=0.8878079463765209,v=0.00017635526605375151,w=0.51508747491667,x=2.976917495644902 color=red,shape=square,flag=1,i=10548,u=0.940988407212824,v=0.08560315347807823,w=0.5119577447249931,x=6.043202056298618 color=purple,shape=circle,flag=0,i=10561,u=0.42258675955167735,v=0.13198365937277168,w=0.5093805088363241,x=4.368202755064007 color=green,shape=square,flag=0,i=10568,u=0.0639050973301376,v=0.9007493007366816,w=0.49553583457744577,x=4.362982742442343 color=red,shape=triangle,flag=0,i=10576,u=0.7083526270103587,v=0.23792218238445895,w=0.4642535710804465,x=4.202356336119785 color=yellow,shape=square,flag=1,i=10578,u=0.18064235078743995,v=0.15701001178454999,w=0.4761292944268622,x=5.626741841707202 color=yellow,shape=circle,flag=1,i=10586,u=0.8951203633447987,v=0.2294696897581885,w=0.5041469425442905,x=6.5568446813038195 color=yellow,shape=circle,flag=1,i=10591,u=0.9093904646584292,v=0.31617090830606964,w=0.5054552168812472,x=6.859854899828519 color=red,shape=circle,flag=0,i=10594,u=0.8724672333134783,v=0.9094104583865722,w=0.5048122529750436,x=4.239098112071388 color=blue,shape=circle,flag=1,i=10604,u=0.02547124608037865,v=0.008433833874895491,w=0.48794640570767017,x=4.989348979833584 color=red,shape=triangle,flag=0,i=10615,u=0.10581575696050416,v=0.4721139499926281,w=0.4741183492140849,x=3.055839138217507 color=red,shape=square,flag=0,i=10630,u=0.9784438506506147,v=0.6749912312118184,w=0.4981023888184377,x=4.941318491004691 color=yellow,shape=square,flag=1,i=10631,u=0.921744799017933,v=0.5109148751867204,w=0.4794048905192355,x=5.441928174118314 color=purple,shape=square,flag=0,i=10650,u=0.9324480505984253,v=0.5958369240385151,w=0.5085894219020052,x=5.299271735359292 color=orange,shape=circle,flag=1,i=10655,u=0.0292779736185238,v=0.8745744381939615,w=0.5848738119512179,x=4.574214055142606 color=red,shape=triangle,flag=0,i=10657,u=0.09742169400515321,v=0.9228881083107748,w=0.47266101670274985,x=6.155913437822506 color=purple,shape=circle,flag=0,i=10675,u=0.9601933247453555,v=0.6304606668777718,w=0.5059571702319123,x=4.184151821083756 color=red,shape=circle,flag=0,i=10680,u=0.7197166647461486,v=0.6853077083507768,w=0.5126653209726362,x=5.4103005994612365 color=green,shape=circle,flag=0,i=10693,u=0.9422033304147984,v=0.1471329439491209,w=0.49301655544871337,x=5.259397457175126 color=red,shape=circle,flag=0,i=10701,u=0.4880271401016847,v=0.5395444187818046,w=0.5145204084133964,x=1.8675071452119234 color=blue,shape=square,flag=1,i=10709,u=0.9653241084872171,v=0.04395488019105609,w=0.5024905915906125,x=5.546323886633406 color=blue,shape=triangle,flag=1,i=10717,u=0.9557628022366502,v=0.1233345609217904,w=0.4709934407524951,x=4.959512065237491 color=blue,shape=square,flag=1,i=10726,u=0.24950053218727852,v=0.84316257779601,w=0.5067875296633696,x=6.105313795137335 color=red,shape=square,flag=0,i=10727,u=0.42551312752888215,v=0.7807129281916984,w=0.48217631391820354,x=6.421601643296746 color=yellow,shape=square,flag=1,i=10741,u=0.7310761580626806,v=0.23310643869044967,w=0.47195941096111543,x=5.37356895735718 color=red,shape=triangle,flag=0,i=10753,u=0.6964070676513231,v=0.44140441920770457,w=0.47721222547725634,x=5.309804258406171 color=red,shape=square,flag=0,i=10760,u=0.14527150716616755,v=0.5308756743155378,w=0.491837076731806,x=5.58017756032455 color=green,shape=square,flag=0,i=10770,u=0.5616339623171078,v=0.013534591047469346,w=0.513151662247277,x=5.692402129336116 color=blue,shape=circle,flag=1,i=10776,u=0.617002338987463,v=0.7178353605529667,w=0.47982606898564667,x=7.1625674759908575 color=green,shape=square,flag=0,i=10779,u=0.16921390058371377,v=0.6226350078856399,w=0.5091018378300389,x=7.38217515025018 color=red,shape=circle,flag=0,i=10791,u=0.07073180415516123,v=0.08679003646117818,w=0.5038125746371834,x=4.533730929532047 color=red,shape=triangle,flag=0,i=10834,u=0.18680073713177348,v=0.9993494201012043,w=0.4773213031616584,x=4.513094201691502 color=red,shape=triangle,flag=0,i=10848,u=0.984328044546256,v=0.5188399587259762,w=0.4792564762820482,x=6.190887182676861 color=blue,shape=triangle,flag=0,i=10852,u=0.9321131023511794,v=0.3891184969830609,w=0.47761527716199736,x=6.436951901516465 color=yellow,shape=square,flag=1,i=10857,u=0.8748151304087454,v=0.2502476564941005,w=0.46876178744698155,x=5.910256453154365 color=purple,shape=triangle,flag=1,i=10859,u=0.22134297370228684,v=0.5381961520098686,w=0.47784379113682435,x=6.273651804535049 color=red,shape=square,flag=1,i=10860,u=0.28362174237205706,v=0.1471931408944923,w=0.4936718385481655,x=6.1948905831375045 color=blue,shape=square,flag=1,i=10869,u=0.20275067438131744,v=0.6412109927679274,w=0.4886332308780323,x=6.232250491017066 color=red,shape=square,flag=0,i=10875,u=0.3724868333669126,v=0.4945558584734414,w=0.4971480512417688,x=2.050545302249899 color=green,shape=square,flag=0,i=10906,u=0.6982240526087021,v=0.7514175979192067,w=0.5115536630418412,x=6.968429898016403 color=red,shape=square,flag=1,i=10909,u=0.2985422210188773,v=0.5312010234010901,w=0.4873596940435782,x=3.884998502994616 color=yellow,shape=triangle,flag=0,i=10911,u=0.3207555001277137,v=0.8429118043855696,w=0.5208449061979111,x=3.778695284985284 color=red,shape=circle,flag=0,i=10913,u=0.872067490697382,v=0.9002314977138762,w=0.4991571456570716,x=6.950177773971539 color=orange,shape=triangle,flag=1,i=10931,u=0.5331297637845395,v=0.17949252153730288,w=0.6526524826688697,x=3.385410206381158 color=purple,shape=triangle,flag=0,i=10944,u=0.19842604812664932,v=0.5067797693687401,w=0.4851881607747664,x=5.369323823641793 color=red,shape=circle,flag=1,i=10955,u=0.7923455158157466,v=0.8019530599629591,w=0.5048197369451008,x=4.5502781771547784 color=yellow,shape=circle,flag=1,i=10966,u=0.24552159321302525,v=0.805746444524981,w=0.5108015311343594,x=4.048119267937712 color=purple,shape=square,flag=0,i=10983,u=0.9876514204552945,v=0.11996417053077923,w=0.5233392959126978,x=5.071441665115832 color=red,shape=circle,flag=1,i=10986,u=0.5184179438992648,v=0.43206229986759037,w=0.5094392756024092,x=5.460470198538914 color=purple,shape=circle,flag=0,i=10994,u=0.34184839500907716,v=0.3610569280371754,w=0.5165644912393597,x=4.510891511869123 color=blue,shape=triangle,flag=1,i=11012,u=0.20962327641630263,v=0.510878839865751,w=0.4874951093361232,x=3.799354481847154 color=blue,shape=square,flag=1,i=11017,u=0.21900020429734024,v=0.07539826589100262,w=0.4866422461152902,x=4.77299039000382 color=yellow,shape=circle,flag=1,i=11049,u=0.9879114734877493,v=0.8008651633096259,w=0.5133355417416207,x=4.035598314023885 color=red,shape=circle,flag=0,i=11072,u=0.5863573993677064,v=0.5001124378458295,w=0.5019171809014208,x=4.436860341907603 color=purple,shape=triangle,flag=0,i=11074,u=0.10384254160495798,v=0.9108764866194752,w=0.48278130458879187,x=5.141442802465247 color=blue,shape=triangle,flag=1,i=11078,u=0.601742020854989,v=0.038449961822750955,w=0.4786133501428849,x=4.439332167889311 color=yellow,shape=triangle,flag=1,i=11092,u=0.8229740580476099,v=0.6733591604895702,w=0.4984983752336965,x=3.942811108775684 color=red,shape=circle,flag=1,i=11099,u=0.2728275925451169,v=0.314517194021842,w=0.4988758958355545,x=3.9324093514767795 color=red,shape=triangle,flag=0,i=11107,u=0.7094065590321239,v=0.8030118874423253,w=0.4867214032868347,x=6.030937389617873 color=blue,shape=square,flag=1,i=11117,u=0.0720849469507776,v=0.1593880902173438,w=0.48923519619424893,x=4.205917868208034 color=yellow,shape=circle,flag=1,i=11129,u=0.5253429225138768,v=0.9957041581408161,w=0.5112069864481082,x=5.828155778235353 color=red,shape=circle,flag=1,i=11143,u=0.2287015927601742,v=0.23866654178630137,w=0.4887717387295377,x=3.6483727653031184 color=red,shape=circle,flag=0,i=11167,u=0.769410713899481,v=0.7242717108131933,w=0.4900643581952675,x=6.097156235020855 color=yellow,shape=triangle,flag=1,i=11195,u=0.36904224435599975,v=0.03819903379294887,w=0.5141217967739861,x=4.155731738639664 color=red,shape=square,flag=1,i=11196,u=0.8517953650116588,v=0.3216635511738848,w=0.5068613544294537,x=6.428096183221197 color=red,shape=triangle,flag=0,i=11201,u=0.44691797147262424,v=0.7377241338881,w=0.4938925575976855,x=5.41347608600304 color=red,shape=triangle,flag=0,i=11208,u=0.9784684668798798,v=0.763570131307092,w=0.49867340086246087,x=5.98966387750217 color=yellow,shape=square,flag=1,i=11209,u=0.43199606450901396,v=0.804605153054225,w=0.4847132137279541,x=5.585778068244217 color=green,shape=square,flag=0,i=11214,u=0.9828302734965855,v=0.2646110580344787,w=0.517697113190525,x=4.574050226139 color=red,shape=triangle,flag=1,i=11220,u=0.3783823715210768,v=0.782931040165063,w=0.5004273024688444,x=4.118492031159527 color=red,shape=triangle,flag=1,i=11237,u=0.5196088079409146,v=0.8930630644369089,w=0.4978451986063169,x=4.011646211011216 color=yellow,shape=circle,flag=1,i=11245,u=0.8996064197251387,v=0.5019226374046015,w=0.5041774153002586,x=4.252122823453672 color=red,shape=triangle,flag=1,i=11248,u=0.7529483749500838,v=0.27122834845072485,w=0.49126074812474907,x=4.396888811264903 color=blue,shape=circle,flag=0,i=11249,u=0.7572458107690444,v=0.33879274133843984,w=0.48911017307305293,x=4.859215124095175 color=orange,shape=triangle,flag=0,i=11256,u=0.8764356862502545,v=0.411271947777773,w=0.6445857828598599,x=8.064821723348405 color=blue,shape=square,flag=0,i=11257,u=0.5175904662522431,v=0.7273864358678984,w=0.48124549170822833,x=4.184485111215872 color=yellow,shape=square,flag=1,i=11258,u=0.7757397185982723,v=0.029171556527266662,w=0.4887119754451175,x=5.819984776411416 color=red,shape=triangle,flag=0,i=11264,u=0.6928399295420468,v=0.24260392165480227,w=0.48808978873247466,x=3.7857134648217268 color=blue,shape=square,flag=1,i=11290,u=0.09526725337042308,v=0.5710776547333518,w=0.4816309850010684,x=5.004434437154619 color=blue,shape=square,flag=1,i=11308,u=0.1984917645276455,v=0.4325895036234173,w=0.4840327278958722,x=6.0313655991758885 color=red,shape=triangle,flag=0,i=11309,u=0.2695189163955175,v=0.3570033220716953,w=0.4798417621615095,x=6.215696689530307 color=red,shape=square,flag=0,i=11312,u=0.09424803300847717,v=0.8633989547866907,w=0.4958724231713246,x=5.615260332390245 color=red,shape=square,flag=0,i=11317,u=0.42075534020005223,v=0.7789609008087531,w=0.4924992539679409,x=4.148108664188815 color=orange,shape=circle,flag=1,i=11323,u=0.541584000090338,v=0.15392248984531431,w=0.5819425797332739,x=4.675951236311783 color=blue,shape=square,flag=1,i=11340,u=0.34028282557380873,v=0.29816007364043307,w=0.4920984255052471,x=4.87495995425447 color=red,shape=triangle,flag=0,i=11347,u=0.29291365334291064,v=0.13595873977427797,w=0.47751618114842376,x=5.734165400286842 color=purple,shape=triangle,flag=0,i=11365,u=0.14759568718194493,v=0.887197770529009,w=0.48786447532739424,x=3.9607027488190263 color=red,shape=triangle,flag=1,i=11368,u=0.9958313144391746,v=0.1646426927041188,w=0.4681184791220049,x=5.7276072394750015 color=blue,shape=circle,flag=1,i=11382,u=0.9547725049854346,v=0.4183334796458881,w=0.48986123904256673,x=7.359710210433526 color=yellow,shape=square,flag=1,i=11390,u=0.41009075484481616,v=0.04012661259429706,w=0.4775282779934895,x=3.884603883571296 color=blue,shape=square,flag=0,i=11398,u=0.5232009746280731,v=0.31732238901126764,w=0.4914814422996223,x=6.512711578515396 color=red,shape=triangle,flag=0,i=11399,u=0.08307367491556572,v=0.2499088892139142,w=0.47155922421917745,x=3.533400043100729 color=yellow,shape=triangle,flag=1,i=11401,u=0.646340926730741,v=0.5635156016582544,w=0.5227154278139758,x=5.0728700850026875 color=red,shape=square,flag=1,i=11414,u=0.7833563881078867,v=0.8112218063333311,w=0.4953572009070725,x=3.212908169933748 color=red,shape=circle,flag=1,i=11418,u=0.7053252293937231,v=0.653551579817268,w=0.47191442834795144,x=3.287977268143678 color=red,shape=circle,flag=0,i=11420,u=0.6984771131230996,v=0.7110482786322159,w=0.47577018890375466,x=5.401042359876296 color=red,shape=circle,flag=0,i=11422,u=0.8249976514282572,v=0.737746748760994,w=0.4742364173639332,x=7.579017916144487 color=red,shape=square,flag=0,i=11429,u=0.3737646251850545,v=0.4802872430457342,w=0.49233298800830655,x=5.481851888719611 color=red,shape=square,flag=1,i=11438,u=0.6851467661504475,v=0.30545748824705,w=0.495339373019669,x=4.510626503591532 color=blue,shape=square,flag=1,i=11451,u=0.6784701333767903,v=0.7489987917811751,w=0.4950008966150163,x=4.665969126907384 color=green,shape=triangle,flag=0,i=11454,u=0.9360018272424514,v=0.2864027960639961,w=0.5165963516009994,x=4.9775786669976485 color=yellow,shape=square,flag=1,i=11455,u=0.5874636712003198,v=0.33625170329447196,w=0.47599885278694937,x=6.189576199895336 color=red,shape=circle,flag=0,i=11482,u=0.7741798755046678,v=0.8379930521280073,w=0.4738560123073968,x=4.49012823554904 color=red,shape=square,flag=1,i=11493,u=0.4655620686808072,v=0.40187813411072393,w=0.4869612526187048,x=7.011843588858941 color=red,shape=square,flag=0,i=11504,u=0.2512000710535399,v=0.9770487857991338,w=0.49288221544919575,x=3.996943831694889 color=red,shape=triangle,flag=1,i=11513,u=0.13716324075112885,v=0.09323268082827685,w=0.4690325797787599,x=4.635291371696009 color=yellow,shape=triangle,flag=1,i=11514,u=0.9170930068074542,v=0.5491180187027114,w=0.5168261702635132,x=3.0882382523771423 color=blue,shape=square,flag=0,i=11516,u=0.9974578628637201,v=0.8301906233920628,w=0.49595081858602413,x=3.4601454987596227 color=red,shape=circle,flag=0,i=11531,u=0.8204214990540966,v=0.7836418299016412,w=0.47488759821374815,x=4.888488023964819 color=green,shape=triangle,flag=0,i=11544,u=0.045882710718465725,v=0.3249778478756211,w=0.5025225347675908,x=4.007985423061229 color=red,shape=triangle,flag=1,i=11555,u=0.9472068240562526,v=0.7150808909767029,w=0.46248860469745295,x=4.939501626451224 color=purple,shape=triangle,flag=0,i=11564,u=0.2257016979446489,v=0.5835457139229187,w=0.4916758835993314,x=7.077737742343103 color=red,shape=triangle,flag=0,i=11581,u=0.05296867528168259,v=0.8851415256565528,w=0.4581587302230065,x=7.147859160935391 color=blue,shape=square,flag=1,i=11588,u=0.6907610118986325,v=0.9509088014367496,w=0.503467176557804,x=3.9012195604938618 color=red,shape=triangle,flag=0,i=11605,u=0.8461633697593912,v=0.42590045242655017,w=0.4623193674136193,x=5.760556597285366 color=red,shape=square,flag=0,i=11606,u=0.14743815857756082,v=0.7926700151981511,w=0.46758106127713767,x=5.651690083563808 color=red,shape=triangle,flag=0,i=11614,u=0.9285775849365847,v=0.4436105623984308,w=0.4605823986171502,x=4.641207701078844 color=red,shape=triangle,flag=1,i=11624,u=0.5378184503512431,v=0.6868286620233578,w=0.458044596481656,x=5.760748389455027 color=green,shape=circle,flag=0,i=11628,u=0.7024909973441142,v=0.47502881219791715,w=0.4842624819433563,x=6.15740201181017 color=red,shape=triangle,flag=1,i=11651,u=0.6389136656886427,v=0.9879034546079611,w=0.4527585622445751,x=5.867747214773206 color=blue,shape=square,flag=0,i=11652,u=0.933381682410314,v=0.4513110963401843,w=0.5096623691323556,x=5.238611211712035 color=green,shape=triangle,flag=0,i=11657,u=0.46144761961083647,v=0.3538475783105779,w=0.49870726886853095,x=5.3196302837939635 color=yellow,shape=circle,flag=1,i=11685,u=0.8449966904024304,v=0.5070981101745116,w=0.5001667852213053,x=3.732928435147311 color=green,shape=triangle,flag=1,i=11687,u=0.6772563427268082,v=0.21544631431493866,w=0.5019561571626965,x=5.31619891524488 color=blue,shape=triangle,flag=0,i=11698,u=0.8848820237304224,v=0.009320939696153219,w=0.4843460557597541,x=6.288615093820109 color=red,shape=circle,flag=1,i=11704,u=0.2532930709241966,v=0.3428809726162397,w=0.49804341460580354,x=3.857184741733857 color=yellow,shape=circle,flag=1,i=11706,u=0.6235351648125035,v=0.585299949677482,w=0.49699588469369854,x=5.928003109455507 color=red,shape=square,flag=1,i=11707,u=0.014558204062291136,v=0.19921504894386421,w=0.47695578762718704,x=3.4149863529399127 color=yellow,shape=square,flag=1,i=11708,u=0.048244378828659285,v=0.2809558712937408,w=0.4709568341932725,x=4.420706623479959 color=red,shape=triangle,flag=0,i=11710,u=0.20494397917669305,v=0.4262320810647471,w=0.45731113188615224,x=4.423002552014896 color=yellow,shape=circle,flag=1,i=11726,u=0.45282366292121645,v=0.6647741644838494,w=0.4927926793367974,x=4.661809439673582 color=green,shape=square,flag=1,i=11730,u=0.9906881228376359,v=0.9777942016481593,w=0.5079110438388657,x=4.338819691978291 color=purple,shape=circle,flag=0,i=11734,u=0.42287055846265853,v=0.9882869130316426,w=0.5282827734537594,x=6.532314242063435 color=red,shape=triangle,flag=1,i=11752,u=0.34383011667679386,v=0.6031852221586377,w=0.4695209466033571,x=3.984459717337193 color=green,shape=square,flag=1,i=11763,u=0.9183820276561984,v=0.6690840570664534,w=0.5140245506141916,x=4.7409253195501515 color=green,shape=square,flag=0,i=11767,u=0.9980026709735629,v=0.9899827733190545,w=0.5096223202039132,x=5.952455977819098 color=red,shape=square,flag=0,i=11796,u=0.9479874833310005,v=0.834343027445699,w=0.4969871392454597,x=4.367186692110255 color=red,shape=triangle,flag=0,i=11810,u=0.8066105662877066,v=0.7691536135774323,w=0.465643029832154,x=3.9914371935539728 color=red,shape=triangle,flag=1,i=11818,u=0.2775306173073313,v=0.310875889416218,w=0.4653832299721089,x=4.601647026685676 color=blue,shape=square,flag=0,i=11820,u=0.3986234307994264,v=0.11490444112384934,w=0.5043047773029952,x=5.235236020622918 color=red,shape=circle,flag=0,i=11822,u=0.1562652272696856,v=0.10817354775735938,w=0.4926379151200919,x=6.938178596036544 color=red,shape=circle,flag=0,i=11823,u=0.20795457468744316,v=0.23946683788624595,w=0.4898283085829625,x=4.189023959838033 color=green,shape=square,flag=0,i=11827,u=0.5709288668323107,v=0.4697473555841214,w=0.5109635335955767,x=4.3514792424407664 color=red,shape=triangle,flag=0,i=11837,u=0.7362412796046272,v=0.17758447605169292,w=0.470388376614015,x=5.734476797847964 color=green,shape=circle,flag=0,i=11838,u=0.9394096652397737,v=0.8536155269641535,w=0.49327858557195275,x=5.653235497206928 color=green,shape=square,flag=1,i=11844,u=0.07572527165339304,v=0.5798832020919857,w=0.5039524965605116,x=5.469468485704244 color=green,shape=square,flag=1,i=11861,u=0.5189533342028887,v=0.01880180286971289,w=0.4953442604798373,x=5.12386157195204 color=red,shape=square,flag=1,i=11878,u=0.980579950659443,v=0.4300954648186175,w=0.5061282471643798,x=5.7374403592120204 color=purple,shape=circle,flag=0,i=11880,u=0.9135576118070077,v=0.5778536903449603,w=0.5402182044289588,x=4.731178645635094 color=red,shape=square,flag=0,i=11884,u=0.15762614718843582,v=0.08208186127058492,w=0.509255648486443,x=2.877246262052175 color=green,shape=triangle,flag=0,i=11905,u=0.9427780982901727,v=0.2822726998869619,w=0.5132467938139144,x=4.520472386485701 color=red,shape=triangle,flag=1,i=11908,u=0.059358371495679574,v=0.7191292383130944,w=0.4819126119901219,x=4.520229349473795 color=red,shape=triangle,flag=1,i=11922,u=0.05880192113588101,v=0.33145414147223107,w=0.4863267596429014,x=5.733256126532911 color=red,shape=square,flag=0,i=11926,u=0.7068862355139671,v=0.7170568706731681,w=0.5087258896121807,x=4.603072869067202 color=red,shape=circle,flag=1,i=11936,u=0.45238982329015276,v=0.5085615770278532,w=0.5015836518347339,x=2.271261911183687 color=red,shape=triangle,flag=1,i=11937,u=0.19003791099127365,v=0.381443084578561,w=0.4798481676026286,x=4.722557073097453 color=red,shape=triangle,flag=1,i=11953,u=0.5457659366927872,v=0.20647496257260112,w=0.4856727165653866,x=5.135026882914661 color=red,shape=square,flag=0,i=11959,u=0.3451356777299144,v=0.782301962889177,w=0.512410753402933,x=4.688911190692649 color=blue,shape=square,flag=0,i=11961,u=0.7124139056656043,v=0.8621419199293042,w=0.5001588278713436,x=5.791127598520412 color=red,shape=square,flag=0,i=11995,u=0.34783605183672606,v=0.032302888090674275,w=0.5043983124513339,x=3.0317188474642567 color=red,shape=triangle,flag=0,i=12010,u=0.7729719315576394,v=0.30049922969244836,w=0.4893167152155384,x=5.693226677965474 color=red,shape=circle,flag=0,i=12020,u=0.2744061650207231,v=0.30248377776255525,w=0.502546296393573,x=3.867403836569691 color=red,shape=triangle,flag=0,i=12027,u=0.04501409480558616,v=0.7549265836299452,w=0.49063433298390186,x=4.537008860790443 color=yellow,shape=triangle,flag=1,i=12040,u=0.5566649253877446,v=0.4573445655321232,w=0.5323130019818018,x=5.970963386497712 color=green,shape=triangle,flag=0,i=12054,u=0.4254817295258245,v=0.8748170051264729,w=0.5123524853234942,x=4.042414889832379 color=red,shape=square,flag=0,i=12055,u=0.23543875758692723,v=0.25343933847289046,w=0.5099760587232518,x=5.776064510680494 color=purple,shape=triangle,flag=0,i=12057,u=0.8519025346923821,v=0.6839852206805982,w=0.4963102645837585,x=6.866828187795584 color=red,shape=square,flag=0,i=12063,u=0.00923931384134169,v=0.5375672051708866,w=0.5135738257161684,x=4.590367914195506 color=red,shape=circle,flag=0,i=12075,u=0.18816975341851416,v=0.12209791531873972,w=0.4943234914402715,x=5.676649090268427 color=green,shape=circle,flag=0,i=12076,u=0.32814442117828535,v=0.7296400228222215,w=0.4908674141550337,x=3.689452516163152 color=green,shape=circle,flag=0,i=12079,u=0.8503269867409412,v=0.936071680503902,w=0.4893958325272159,x=4.176914190892412 color=red,shape=triangle,flag=0,i=12080,u=0.304417644521224,v=0.12072407298416554,w=0.4824932904964195,x=4.483288986837734 color=blue,shape=square,flag=1,i=12103,u=0.7805642873472752,v=0.6021578248473799,w=0.5057792095341139,x=2.9739880844327224 color=red,shape=square,flag=1,i=12105,u=0.4460577291915605,v=0.5417740495785428,w=0.5101397145856149,x=5.0572329569199805 color=orange,shape=square,flag=1,i=12110,u=0.45966776685191746,v=0.7646670171356208,w=0.4010923219092246,x=5.786150104427804 color=blue,shape=circle,flag=0,i=12113,u=0.43968979742069225,v=0.8607996906473344,w=0.4974049569699694,x=5.837695133790341 color=blue,shape=square,flag=0,i=12137,u=0.9434045187517408,v=0.274030853396236,w=0.502203210883063,x=4.19203204873216 color=red,shape=circle,flag=1,i=12140,u=0.12010342788683448,v=0.06458670339028354,w=0.4937549695809898,x=6.713812678596761 color=yellow,shape=square,flag=1,i=12141,u=0.5062086920078083,v=0.06784111786037528,w=0.4950362195602966,x=6.182068119699312 color=red,shape=square,flag=0,i=12144,u=0.6178915767340124,v=0.40812033749505616,w=0.5134054287955381,x=3.057397299000543 color=purple,shape=square,flag=0,i=12145,u=0.9301036698084061,v=0.1664640395494903,w=0.5126228731369876,x=5.321997603399074 color=green,shape=triangle,flag=1,i=12170,u=0.3881534843843475,v=0.15297012294677814,w=0.5186299888768883,x=3.3475427503671114 color=yellow,shape=square,flag=1,i=12179,u=0.376284735246494,v=0.006691551218347747,w=0.4991441252068821,x=4.398422927801676 color=blue,shape=square,flag=0,i=12181,u=0.9451711208014877,v=0.6681813481587483,w=0.48831787318055037,x=7.171577580120623 color=red,shape=square,flag=0,i=12182,u=0.7932552120427754,v=0.9040437711783676,w=0.5203952476755404,x=3.6348544885135237 color=red,shape=circle,flag=0,i=12186,u=0.0712258925039464,v=-0.01048384499837035,w=0.49739297207963323,x=5.777276843835502 color=red,shape=square,flag=0,i=12194,u=0.13777167814332203,v=0.5466858504389149,w=0.5199724413340178,x=3.5741650664449653 color=red,shape=square,flag=0,i=12196,u=0.2954494488405188,v=0.4322243693054796,w=0.5139626813180235,x=5.600171210531258 color=red,shape=square,flag=0,i=12197,u=0.22815055786123362,v=0.6247363759835414,w=0.5115657912113042,x=4.474262266164264 color=red,shape=triangle,flag=0,i=12209,u=0.011558215130849536,v=0.6813096166913172,w=0.4920484798842238,x=4.937401503797912 color=yellow,shape=circle,flag=1,i=12212,u=0.5936641645262978,v=0.4620350573757983,w=0.4989004291929008,x=5.306165823904028 color=red,shape=triangle,flag=0,i=12221,u=0.7087595692961455,v=0.6832791598840698,w=0.4910108314613083,x=4.606169693489917 color=blue,shape=triangle,flag=0,i=12223,u=0.8510146430273343,v=0.7168389538492936,w=0.5023850258593229,x=4.128003725145813 color=red,shape=square,flag=0,i=12224,u=0.4274538589743495,v=0.6361645832418465,w=0.5170392933735131,x=4.4846096119647845 color=purple,shape=circle,flag=1,i=12233,u=0.5134475909295445,v=0.18566671633448661,w=0.5448519268821536,x=3.596524324487605 color=red,shape=triangle,flag=1,i=12235,u=0.27034222633662897,v=0.4463005217941033,w=0.4941692786712241,x=6.952954957628321 color=green,shape=square,flag=0,i=12237,u=0.8710370193634492,v=0.8148800655806897,w=0.4837675081514471,x=5.205470293505575 color=red,shape=square,flag=1,i=12238,u=0.35779992900062063,v=0.056369766250922826,w=0.5234328917932165,x=5.0337476519226945 color=red,shape=circle,flag=0,i=12249,u=0.9030113247848618,v=0.8506564574230406,w=0.49549773169768996,x=5.864305798089799 color=red,shape=triangle,flag=0,i=12254,u=0.9968044857248838,v=0.14785687196385533,w=0.49295293296623766,x=3.8013253941464176 color=yellow,shape=square,flag=1,i=12256,u=0.8813136136947924,v=0.7036981129154224,w=0.5009114573079977,x=5.2335395542700995 color=red,shape=circle,flag=0,i=12260,u=0.43290825891906914,v=0.521805455043792,w=0.49917033743429584,x=6.0435146425195905 color=red,shape=triangle,flag=1,i=12262,u=0.8609109793010382,v=0.789098135698477,w=0.49306800262641864,x=4.695192938556527 color=red,shape=triangle,flag=0,i=12272,u=0.5502944830733181,v=0.7139288515018252,w=0.4997725400931449,x=3.3269635277492076 color=red,shape=circle,flag=0,i=12276,u=0.3470298189628759,v=0.377385582081882,w=0.4985325335096065,x=4.5896193469703155 color=yellow,shape=square,flag=1,i=12297,u=0.5799236240742773,v=0.8612895494901701,w=0.4940982101160186,x=6.03608466854836 color=red,shape=circle,flag=0,i=12298,u=0.05418741401466454,v=0.12416885273541382,w=0.4981795862533314,x=4.537078051703997 color=red,shape=square,flag=0,i=12310,u=0.5682110943943911,v=0.85892217099607,w=0.5118894257025524,x=4.174863715344483 color=yellow,shape=triangle,flag=1,i=12314,u=0.4301206717459879,v=0.8670561848391353,w=0.53381058364014,x=4.934396612619008 color=red,shape=square,flag=0,i=12320,u=0.6182879435525621,v=0.5230543255252982,w=0.5205114604566122,x=5.627485435806179 color=yellow,shape=square,flag=1,i=12329,u=0.6732390064779475,v=0.06536782556574938,w=0.4909241264020602,x=3.633715730391797 color=purple,shape=triangle,flag=0,i=12331,u=0.056378972860580245,v=0.9345518095586507,w=0.52311290114093,x=6.642000583012488 color=blue,shape=square,flag=0,i=12338,u=0.021659252915190108,v=0.9944553866323534,w=0.4702984591316464,x=5.432851743728047 color=red,shape=triangle,flag=0,i=12362,u=0.13291700579187382,v=0.9590426237841152,w=0.5012301195140502,x=4.978245902341368 color=red,shape=circle,flag=0,i=12365,u=0.42929685105018944,v=0.4451977210396489,w=0.5108724061659158,x=4.9123483651255695 color=red,shape=circle,flag=1,i=12372,u=0.9193674657723226,v=0.9053240978019266,w=0.511461829910235,x=5.860032873469048 color=green,shape=square,flag=0,i=12384,u=0.7103303607122681,v=0.540039717227922,w=0.48744491913965987,x=5.281189346839043 color=blue,shape=triangle,flag=1,i=12393,u=0.9424545054038508,v=0.35028663558225404,w=0.4960435908412825,x=5.484406018909998 color=blue,shape=circle,flag=1,i=12394,u=0.566389140860819,v=0.5030911981502101,w=0.4911517088010552,x=6.23798124481533 color=blue,shape=square,flag=0,i=12403,u=0.009270333707540157,v=0.48265419088382044,w=0.4776403654387395,x=6.927005648273639 color=green,shape=triangle,flag=0,i=12408,u=0.26026652184015175,v=0.5517657440959786,w=0.5190078976947085,x=4.552003607840779 color=yellow,shape=circle,flag=1,i=12413,u=0.7357234098633864,v=0.4729012588892588,w=0.5023751350175498,x=3.2063614288720346 color=red,shape=circle,flag=1,i=12417,u=0.23326783219864622,v=0.2804175839759428,w=0.5227630403633012,x=4.850308800048502 color=yellow,shape=triangle,flag=1,i=12418,u=0.9296868462862925,v=0.5851442239400264,w=0.5344804009281637,x=5.7869946789495375 color=purple,shape=square,flag=0,i=12420,u=0.05576505773219209,v=0.8827909825117362,w=0.518223252197535,x=2.8289555805429405 color=red,shape=square,flag=0,i=12422,u=0.9254495812764103,v=0.020522825774678233,w=0.525883845353747,x=4.428687607326155 color=red,shape=square,flag=0,i=12424,u=0.5477455357161356,v=0.8206769051934277,w=0.5269043847888704,x=4.549570179687992 color=blue,shape=square,flag=1,i=12431,u=0.86919733477823,v=0.6016719217138693,w=0.47505040055378955,x=4.5505991532273615 color=purple,shape=triangle,flag=0,i=12450,u=0.38932831028005355,v=0.5978324269701425,w=0.520508827958282,x=3.811899406983091 color=red,shape=circle,flag=1,i=12458,u=0.22803129614510875,v=0.196234595447856,w=0.5189315357309688,x=2.7138850502471676 color=blue,shape=triangle,flag=1,i=12464,u=0.8605308825186275,v=0.2086202140611736,w=0.49866823280126155,x=3.871755490814719 color=yellow,shape=circle,flag=1,i=12494,u=0.3563675114731395,v=0.190633807291124,w=0.5045626988150675,x=3.8499595902757924 color=red,shape=triangle,flag=0,i=12517,u=0.5588418947757484,v=0.7310743360594292,w=0.48799166937204047,x=3.369590248614523 color=green,shape=square,flag=0,i=12523,u=0.5008395364935517,v=0.2954695726209686,w=0.479321354544725,x=4.9778413209738375 color=red,shape=square,flag=0,i=12524,u=0.09929492623895952,v=0.40604810672259506,w=0.5049558223575824,x=3.5283735874972835 color=blue,shape=triangle,flag=0,i=12542,u=0.9102204004144692,v=0.48535228972492994,w=0.501587166321046,x=6.280394317575749 color=yellow,shape=square,flag=0,i=12545,u=0.7546628277632925,v=0.08197098913714151,w=0.48719007633744077,x=4.784685695215908 color=purple,shape=triangle,flag=0,i=12547,u=0.517490985915425,v=0.6573923290840697,w=0.517729126078301,x=4.5272644772185915 color=red,shape=triangle,flag=1,i=12558,u=0.44016190538135913,v=0.35049419620501454,w=0.48463502148104587,x=4.643038883386652 color=blue,shape=circle,flag=0,i=12561,u=0.1671192884018161,v=0.6596993654960044,w=0.49559157704097595,x=6.326683259451191 color=red,shape=circle,flag=0,i=12573,u=0.6798482749682002,v=0.7273133176332559,w=0.515865683296064,x=4.978158465173196 color=blue,shape=circle,flag=0,i=12600,u=0.5963922619400469,v=0.08344823527076262,w=0.4887524343605998,x=4.057191889249201 color=red,shape=square,flag=0,i=12636,u=0.20913558791154285,v=0.02218620690942419,w=0.5251404780140472,x=7.09890840078442 color=red,shape=square,flag=1,i=12645,u=0.19602301027131042,v=0.3751115248607173,w=0.5173013180567451,x=4.708167379640014 color=blue,shape=square,flag=1,i=12667,u=0.13473252993576534,v=0.39909188407580165,w=0.46927351034379794,x=4.877137364881301 color=purple,shape=square,flag=0,i=12709,u=0.03672598560766016,v=0.49473315820401276,w=0.5283821113677094,x=5.9228628311301845 color=yellow,shape=square,flag=1,i=12714,u=0.7498571202691773,v=0.2327267252456967,w=0.4913094346254017,x=5.223376626769959 color=blue,shape=triangle,flag=1,i=12721,u=0.3491596241910907,v=0.9535680517463947,w=0.5067306121075658,x=3.502214119759598 color=red,shape=square,flag=0,i=12727,u=0.3621028139959088,v=0.12510173857176532,w=0.527139777276255,x=3.7413326251681838 color=red,shape=circle,flag=1,i=12731,u=0.7483954245887117,v=0.83911382278441,w=0.5092760129170182,x=4.4819053315172 color=red,shape=circle,flag=0,i=12748,u=0.796482350446426,v=0.8365400523899128,w=0.5072365924705815,x=6.569715570818672 color=red,shape=triangle,flag=0,i=12752,u=0.8654756538937693,v=0.12030101459043974,w=0.4798266464596761,x=5.11293399270295 color=purple,shape=square,flag=0,i=12760,u=0.5190210485377224,v=0.5147627296650352,w=0.5310305279016496,x=6.90748787828668 color=red,shape=square,flag=0,i=12763,u=0.98900569457842,v=0.39460308271675304,w=0.53387724881204,x=4.784005217288922 color=yellow,shape=square,flag=1,i=12782,u=0.1679237147749727,v=0.6138059434481302,w=0.4917252923132335,x=5.5201768542963565 color=yellow,shape=triangle,flag=1,i=12800,u=0.2529842987372265,v=0.20832517048507238,w=0.5308938522790781,x=4.317983927529439 color=red,shape=square,flag=1,i=12802,u=0.1777238023705633,v=0.19873715559848193,w=0.528622920872539,x=4.676626456225272 color=red,shape=circle,flag=1,i=12804,u=0.48862749584150966,v=0.5595497291187637,w=0.5186116160911766,x=3.7463529675400618 color=green,shape=triangle,flag=0,i=12808,u=0.7332750177670676,v=0.07349544390959517,w=0.5134408018023058,x=4.221144061824084 color=red,shape=square,flag=1,i=12819,u=0.01694973081935658,v=0.6006411137625514,w=0.5251809149832267,x=4.9526385454783375 color=red,shape=square,flag=0,i=12823,u=0.7358511839620999,v=0.2075982076638021,w=0.5223974410859062,x=5.64665528828198 color=red,shape=circle,flag=1,i=12838,u=0.6414518363655866,v=0.5971552526672049,w=0.5111913131378839,x=6.645730133109886 color=red,shape=square,flag=0,i=12848,u=0.8991964912371576,v=0.7877715832772079,w=0.5182501072533066,x=6.793759763936873 color=yellow,shape=square,flag=0,i=12852,u=0.13517523551179622,v=0.9368886242865431,w=0.5013990647531037,x=5.751401785078446 color=purple,shape=square,flag=0,i=12862,u=0.9305811910292004,v=0.7808773982965442,w=0.5338464535126726,x=4.206512711987678 color=yellow,shape=circle,flag=1,i=12874,u=0.8834737119841723,v=0.8827897263358067,w=0.5028709961554946,x=4.40358791075897 color=orange,shape=square,flag=1,i=12896,u=0.19625924218455737,v=0.8012382218224551,w=0.39672750105935617,x=5.926406207357727 color=green,shape=triangle,flag=1,i=12897,u=0.6467695640240094,v=0.2881124066335321,w=0.5076361351610983,x=6.97596121869987 color=blue,shape=square,flag=1,i=12913,u=0.7192234533007247,v=0.6561045565834529,w=0.4755891412774963,x=6.538709933564054 color=yellow,shape=triangle,flag=1,i=12926,u=0.7787829274007342,v=0.8666655366316399,w=0.5268238688543869,x=5.305460474128055 color=purple,shape=circle,flag=0,i=12936,u=0.1922706389962523,v=0.3657640366304026,w=0.5345929270023603,x=6.584843335292457 color=green,shape=square,flag=0,i=12938,u=0.2751318405813312,v=0.9996764373885353,w=0.4885851533254809,x=3.4032262956951556 color=yellow,shape=square,flag=0,i=12956,u=0.22827815291835307,v=0.10940113926765138,w=0.49495945027982224,x=5.519192796553264 color=red,shape=triangle,flag=0,i=12964,u=0.5277650090715932,v=0.9095188032621777,w=0.47769654400861283,x=7.356701377636051 color=purple,shape=square,flag=0,i=12972,u=0.2272981374962454,v=0.6275803714815992,w=0.5280975803113913,x=3.1755285842416416 color=purple,shape=square,flag=0,i=12976,u=0.9882272142903007,v=0.2543821364391944,w=0.5285708736540188,x=6.283369453252152 color=yellow,shape=triangle,flag=1,i=13010,u=0.349745010538539,v=0.723745260971859,w=0.5220147909957564,x=5.362490418188354 color=green,shape=square,flag=0,i=13025,u=0.5704032132620769,v=0.9520730893130085,w=0.4949742635007175,x=4.972595320121044 color=yellow,shape=circle,flag=1,i=13030,u=0.8751019905366294,v=0.02854187087338156,w=0.5021941122434627,x=5.321770530720425 color=yellow,shape=triangle,flag=1,i=13031,u=0.5187144465562195,v=0.18783350208908334,w=0.5219399178758146,x=4.685385105835355 color=red,shape=square,flag=0,i=13050,u=0.008813010214251737,v=0.34911487791388507,w=0.5095449231613721,x=3.4303442336720704 color=yellow,shape=triangle,flag=1,i=13052,u=0.6857004850205839,v=0.6431925825203684,w=0.5165401288654603,x=4.562951213675976 color=red,shape=triangle,flag=0,i=13064,u=0.07613955243284565,v=0.03333761177749195,w=0.4699234376021442,x=4.688217784444799 color=red,shape=circle,flag=0,i=13078,u=0.2860524243207774,v=0.34498087949241424,w=0.49848756793795024,x=6.448000652514857 color=yellow,shape=circle,flag=1,i=13090,u=0.3815845684602467,v=0.07178736343547731,w=0.5022487513444382,x=7.615019377960697 color=red,shape=square,flag=0,i=13096,u=0.6036560966868214,v=0.23587333775946517,w=0.5135337384296509,x=5.379789307509569 color=blue,shape=circle,flag=0,i=13099,u=0.10006314778653913,v=0.7436569578778154,w=0.48161668141487796,x=4.723894604995649 color=red,shape=circle,flag=1,i=13107,u=0.425900528621737,v=0.3824557861050103,w=0.4948976998364974,x=5.410527191225196 color=red,shape=square,flag=0,i=13108,u=0.8494685992386175,v=0.7573687773377882,w=0.517353757970351,x=4.350640282866267 color=red,shape=triangle,flag=1,i=13116,u=0.17453356860481373,v=0.41080027304525757,w=0.4781769846380775,x=4.633321441199356 color=blue,shape=triangle,flag=1,i=13127,u=0.30256949909285336,v=0.8306436702065217,w=0.5168840336058484,x=5.050938701653189 color=green,shape=square,flag=0,i=13137,u=0.6862398942853989,v=0.5084056603695462,w=0.5004703688991802,x=6.417792935960674 color=blue,shape=circle,flag=0,i=13148,u=0.2902241989595149,v=0.4432537696404162,w=0.47820059351586996,x=5.585400330240989 color=green,shape=triangle,flag=0,i=13156,u=0.5319755217308924,v=0.9227883390423964,w=0.5152632048179494,x=5.089260639238088 color=yellow,shape=circle,flag=1,i=13162,u=0.5782826397828276,v=0.01106841619064336,w=0.5055812461707145,x=5.2379189849188466 color=green,shape=circle,flag=0,i=13173,u=0.26944433608573093,v=0.39993866016419455,w=0.4775850697673785,x=4.989212261233978 color=blue,shape=square,flag=1,i=13185,u=0.004726047126661137,v=0.5804128842508497,w=0.4675949465251732,x=4.905801459228339 color=red,shape=circle,flag=1,i=13190,u=0.9814469186570991,v=0.9051553259597678,w=0.5030421911914653,x=5.250813683759118 color=purple,shape=triangle,flag=0,i=13200,u=0.4698245094948157,v=0.5965706792499607,w=0.49929837552232353,x=6.2005610423044075 color=green,shape=triangle,flag=0,i=13216,u=0.4332132855617774,v=0.7066356987490843,w=0.508416365967748,x=4.3605409205977415 color=red,shape=triangle,flag=0,i=13235,u=0.8217685898297462,v=0.9523678510305673,w=0.49313686605591206,x=3.568563377430356 color=red,shape=square,flag=0,i=13254,u=0.22629456609797405,v=0.19228930964424018,w=0.5176313767622042,x=2.9683441342720602 color=green,shape=square,flag=0,i=13260,u=0.9703118455887261,v=0.980400158035085,w=0.507314503598571,x=6.593210458496963 color=orange,shape=circle,flag=0,i=13269,u=0.48719118298482755,v=0.08728134510559582,w=0.581979025965587,x=4.470090606309107 color=green,shape=triangle,flag=0,i=13283,u=0.7467117734824886,v=0.9357363071813254,w=0.5089081422555692,x=5.783746519480718 color=blue,shape=triangle,flag=0,i=13294,u=0.9541134800876893,v=0.2907790160479963,w=0.5105280628007148,x=4.568129166475079 color=red,shape=triangle,flag=0,i=13304,u=0.47059497054186417,v=0.20221586014032578,w=0.4908754467349471,x=4.058285075616765 color=yellow,shape=square,flag=0,i=13351,u=0.8461799650924491,v=0.6318120946669082,w=0.46759705640243704,x=5.721962554758462 color=orange,shape=square,flag=0,i=13352,u=0.8963503761031655,v=0.23211616464272544,w=0.40102363086037257,x=4.02914635043458 color=green,shape=circle,flag=0,i=13383,u=0.9419490159169096,v=0.7318612168949039,w=0.48887296776473044,x=4.427041089797325 color=yellow,shape=triangle,flag=1,i=13388,u=0.2089544690244033,v=0.9202091731573563,w=0.5152191352565799,x=6.592104641953245 color=red,shape=square,flag=1,i=13397,u=0.10064756683173592,v=0.4489304388948713,w=0.51832962694166,x=6.65540557950357 color=purple,shape=square,flag=0,i=13409,u=0.9371423291723412,v=0.29803040400991065,w=0.5121450138556084,x=3.4939064257351613 color=red,shape=square,flag=1,i=13418,u=0.1537637870227615,v=0.9354750763256178,w=0.5290536415790195,x=5.643721411840539 color=red,shape=square,flag=0,i=13422,u=0.38967470999925335,v=0.601346978579203,w=0.5291873656765577,x=4.850274346331086 color=green,shape=triangle,flag=0,i=13441,u=0.8111105744137831,v=0.8053103144633811,w=0.5084229946930475,x=4.7202693919606995 color=red,shape=triangle,flag=1,i=13456,u=0.5514532294861351,v=0.9754613900480172,w=0.49751009633149856,x=5.018938731576782 color=orange,shape=square,flag=1,i=13463,u=0.46653710154903705,v=0.9112094509299352,w=0.4044947414716737,x=4.620647248764253 color=red,shape=triangle,flag=0,i=13477,u=0.7422756428103977,v=0.4399188922170295,w=0.504434813634296,x=4.420271352827404 color=blue,shape=circle,flag=0,i=13481,u=0.9959742894178187,v=0.033800662644015045,w=0.48010068515172655,x=4.051630176597462 color=red,shape=triangle,flag=1,i=13499,u=0.7772647678975498,v=0.5378155166045918,w=0.5049499464855819,x=6.263251154295314 color=green,shape=square,flag=0,i=13508,u=0.14006102985737723,v=0.13364635046450446,w=0.4953244024616738,x=6.871245375510823 color=yellow,shape=square,flag=1,i=13515,u=0.7160989602828327,v=0.14369227023263675,w=0.4646232365446227,x=4.9168140198944945 color=purple,shape=triangle,flag=0,i=13537,u=0.9083398402725494,v=0.7732847072104434,w=0.5049604899514466,x=6.825649522371393 color=blue,shape=triangle,flag=0,i=13544,u=0.903945300780459,v=0.2098640713973361,w=0.5077875421457259,x=4.494071556685462 color=blue,shape=square,flag=0,i=13557,u=0.7702659903491699,v=0.16818676874587557,w=0.4841220830226693,x=5.166116040298503 color=red,shape=square,flag=1,i=13560,u=0.369773788976657,v=0.35129753108008,w=0.522666359297109,x=5.730119014371994 color=yellow,shape=square,flag=1,i=13564,u=0.29270127333385076,v=0.31242974503053944,w=0.4666065227296944,x=7.517032597657452 color=purple,shape=triangle,flag=0,i=13578,u=0.44198212325729924,v=0.2939370507575122,w=0.506214486615877,x=5.332459965725181 color=blue,shape=square,flag=0,i=13585,u=0.5789547288569056,v=0.08924983433995748,w=0.48769550645450604,x=4.000380092051938 color=red,shape=circle,flag=0,i=13595,u=0.9078413013162824,v=0.9395166451797881,w=0.5181781260199487,x=5.575184011179274 color=red,shape=triangle,flag=0,i=13601,u=0.032260733763397775,v=0.4450003320073478,w=0.4982256424213833,x=5.202689687398945 color=red,shape=circle,flag=0,i=13628,u=0.16918088818808807,v=0.22286939645087145,w=0.5152513471608811,x=4.60135386698301 color=red,shape=triangle,flag=1,i=13629,u=0.5019930893225422,v=0.29416766831935826,w=0.49864286450099954,x=5.454346943058458 color=green,shape=circle,flag=1,i=13649,u=0.40059225091173256,v=0.5586132550177968,w=0.4946359538305477,x=4.070457687939876 color=red,shape=square,flag=1,i=13661,u=0.9700057189291136,v=0.8452003292357781,w=0.5388007475378267,x=5.5593949103649924 color=red,shape=square,flag=1,i=13685,u=0.7776727898255269,v=0.9414778398913939,w=0.5373507383001258,x=5.542256741642599 color=red,shape=circle,flag=0,i=13693,u=0.46099587766053374,v=0.5286382982993921,w=0.5178712490339592,x=5.7565853971533985 color=green,shape=circle,flag=0,i=13697,u=0.6202180513956841,v=0.7822595276664809,w=0.503318243608966,x=6.948328867487852 color=green,shape=circle,flag=0,i=13699,u=0.11687861550661938,v=0.3777206703009206,w=0.5074680940805018,x=6.617991278530166 color=red,shape=square,flag=0,i=13703,u=0.5645226330165456,v=0.5884613851952621,w=0.5314538781080166,x=5.376940563011032 color=purple,shape=square,flag=0,i=13716,u=0.4971525776095608,v=0.9922461167689713,w=0.4998689964188249,x=6.515899623801129 color=red,shape=circle,flag=0,i=13720,u=0.5474848255161257,v=0.5305770839721894,w=0.5209318608656897,x=5.17085593640891 color=orange,shape=triangle,flag=1,i=13722,u=0.3782297073205919,v=0.7187931018494899,w=0.6152346641224398,x=5.116776563773265 color=purple,shape=circle,flag=0,i=13726,u=0.5865145111013352,v=0.7504016914330448,w=0.5261919546569646,x=7.3723518266128245 color=red,shape=triangle,flag=0,i=13736,u=0.19613268001958084,v=0.4025071482245328,w=0.4909861422418182,x=6.278877610713334 color=green,shape=square,flag=0,i=13758,u=0.2862208474141603,v=0.24792907196176872,w=0.5016757923516378,x=4.093190126142505 color=red,shape=square,flag=1,i=13759,u=0.7530215061694446,v=0.3753700704839039,w=0.5136627056364026,x=3.792495153640998 color=red,shape=circle,flag=0,i=13765,u=0.17741972819644558,v=0.2435601449127709,w=0.5289443213249622,x=3.297467647295553 color=red,shape=square,flag=0,i=13781,u=0.5377782718430559,v=0.557401282980746,w=0.5239765837975974,x=5.771077644967007 color=red,shape=square,flag=0,i=13791,u=0.7823965007048281,v=0.6943505339772328,w=0.5232571752008163,x=4.642075749587225 color=green,shape=circle,flag=0,i=13848,u=0.5633321878333747,v=0.32096035349968677,w=0.5050195740412426,x=6.523171976547569 color=red,shape=circle,flag=0,i=13851,u=0.9270836443970456,v=0.8695458595497157,w=0.5130425110853453,x=4.712921700518195 color=red,shape=triangle,flag=0,i=13856,u=0.23943200938937625,v=0.7299432857736916,w=0.5100586499529426,x=3.529475063842637 color=red,shape=square,flag=0,i=13860,u=0.6670834418885214,v=0.5823442620763544,w=0.5015830453385032,x=4.526046628481562 color=red,shape=triangle,flag=0,i=13861,u=0.4322566532998203,v=0.5087918021514118,w=0.5173170447020637,x=5.632218341460665 color=blue,shape=triangle,flag=0,i=13867,u=0.4805157109043937,v=0.47560598833481604,w=0.5088751385660572,x=5.300553387093035 color=red,shape=square,flag=0,i=13872,u=0.013137849207726204,v=0.4237320753715379,w=0.5110521685695628,x=5.442478931496324 color=purple,shape=triangle,flag=1,i=13879,u=0.8119819032214839,v=0.9364696232583868,w=0.5030354783309826,x=4.870192593182569 color=red,shape=triangle,flag=0,i=13882,u=0.197045584040748,v=0.530818302394316,w=0.5207094114804968,x=6.0139877894697955 color=red,shape=square,flag=0,i=13884,u=0.9031042965648081,v=0.08705372937335532,w=0.4988119042275611,x=5.6886405883157325 color=blue,shape=triangle,flag=1,i=13885,u=0.23486497821444574,v=0.5977028809518629,w=0.5054570923456143,x=3.038315764650665 color=red,shape=circle,flag=0,i=13892,u=0.2491984959690724,v=0.15019038320187167,w=0.5265357843177034,x=3.194853463355704 color=yellow,shape=triangle,flag=1,i=13901,u=0.37792081136721123,v=0.6315517387588304,w=0.4958773064942009,x=5.880428670949502 color=red,shape=triangle,flag=0,i=13918,u=0.8527700919776203,v=0.9259109312415792,w=0.5145725387941368,x=4.756830209576591 color=blue,shape=triangle,flag=1,i=13932,u=0.44759548767184176,v=0.035434484379514464,w=0.5057763629705486,x=4.410575534025987 color=green,shape=triangle,flag=0,i=13945,u=0.5058476575718424,v=0.503498364475034,w=0.4988914716043577,x=3.959636936310185 color=blue,shape=triangle,flag=1,i=13961,u=0.7588755111385153,v=0.8081128330953042,w=0.5120779038485025,x=6.4321189606661 color=red,shape=triangle,flag=1,i=13974,u=0.5146216895628355,v=0.463488416690244,w=0.5057712989879584,x=4.919711960172947 color=yellow,shape=triangle,flag=1,i=14009,u=0.6947983492088922,v=0.18748558487792422,w=0.49714126331264546,x=3.9895877476262367 color=purple,shape=square,flag=0,i=14021,u=0.9287108199752342,v=0.5777167666435793,w=0.4697775313994972,x=5.25856260280474 color=purple,shape=circle,flag=0,i=14025,u=0.10018091166927201,v=0.9094457946335229,w=0.52235424713057,x=4.22768576807756 color=yellow,shape=triangle,flag=1,i=14032,u=0.26323006731314846,v=0.5763933443708851,w=0.49501018907016114,x=5.175283692481721 color=red,shape=circle,flag=0,i=14033,u=0.24107785439074925,v=0.14813511992443346,w=0.530076103655743,x=6.996285153704018 color=yellow,shape=triangle,flag=1,i=14037,u=0.5010187906650703,v=0.13559285162329537,w=0.49346458556188927,x=3.5107561064547284 color=purple,shape=circle,flag=0,i=14042,u=0.05537468236568588,v=0.9575056844169788,w=0.5234611734490178,x=4.226341242094729 color=purple,shape=square,flag=0,i=14044,u=0.7747068464547636,v=0.9225342031316582,w=0.4652272969953895,x=4.645180221775256 color=green,shape=triangle,flag=1,i=14045,u=0.6580938959616179,v=0.7737520170475047,w=0.4891501703869371,x=4.505602847942951 color=red,shape=square,flag=0,i=14049,u=0.6627063941147188,v=0.8545208136983666,w=0.5100989876262721,x=6.096674807337865 color=red,shape=square,flag=1,i=14065,u=0.5857772983969709,v=0.8801430207046448,w=0.49744243114899744,x=6.06550631778691 color=red,shape=triangle,flag=1,i=14075,u=0.46496448900001963,v=0.5598179571337012,w=0.5134176412432347,x=7.4814395937427065 color=orange,shape=triangle,flag=0,i=14078,u=0.8687397706039272,v=0.4868996536088652,w=0.6123050956157151,x=7.5200477870308005 color=green,shape=triangle,flag=0,i=14092,u=0.9880046410537973,v=0.7676728421511271,w=0.49103330801913286,x=4.223556388922138 color=green,shape=square,flag=1,i=14095,u=0.6141113468409892,v=0.9434561376170879,w=0.4889770873794551,x=6.025348578066428 color=yellow,shape=triangle,flag=0,i=14112,u=0.46496585024767345,v=0.6301453362181888,w=0.5037916134773479,x=4.532418031614529 color=red,shape=circle,flag=0,i=14118,u=0.03652010509822379,v=0.10035902003603757,w=0.5334046789775205,x=6.573984699433022 color=yellow,shape=square,flag=1,i=14123,u=0.9513734938477925,v=0.27603368535478334,w=0.4805688832960833,x=7.778626010205239 color=yellow,shape=square,flag=1,i=14127,u=0.9942065018265898,v=0.38948023991288017,w=0.48421306769203515,x=4.92452925704208 color=green,shape=triangle,flag=0,i=14130,u=0.4969923552348652,v=0.5598345591310014,w=0.4897636973083939,x=4.427367256415264 color=yellow,shape=triangle,flag=1,i=14134,u=0.910478233015974,v=0.9510471716682022,w=0.5044750030500602,x=4.119512435198779 color=green,shape=circle,flag=0,i=14138,u=0.24286678957599617,v=0.3287092935333952,w=0.5067430913432592,x=4.306724280770815 color=purple,shape=square,flag=0,i=14169,u=0.0002655214518428872,v=0.15396891895084863,w=0.4725892725504457,x=3.879709518721457 color=blue,shape=square,flag=1,i=14182,u=0.14910591540192308,v=0.08192573260384939,w=0.5200025317692619,x=3.9924150397220246 color=purple,shape=triangle,flag=0,i=14192,u=0.5196327866973567,v=0.7860928603468063,w=0.4964368415453642,x=4.899167143824484 color=red,shape=square,flag=0,i=14198,u=0.9022358743682937,v=0.1802032827563611,w=0.4953767228360918,x=4.786262795418891 color=green,shape=square,flag=1,i=14200,u=0.9947458080550922,v=0.2569501755634187,w=0.49243756888262175,x=3.7308350225093005 color=purple,shape=square,flag=0,i=14203,u=0.09734336110031871,v=0.21901626767644156,w=0.4758254017090039,x=5.817512732665702 color=red,shape=square,flag=0,i=14204,u=0.884564642190506,v=0.5763543308722057,w=0.4940934928193548,x=6.181335628957172 color=purple,shape=square,flag=0,i=14205,u=0.004125602195031108,v=0.05321430693151308,w=0.4731197362471819,x=6.561064013233714 color=red,shape=triangle,flag=0,i=14241,u=0.12868203144051626,v=0.0030225628890134804,w=0.5262271135710291,x=3.123899246741751 color=red,shape=circle,flag=0,i=14246,u=0.10148553081173295,v=0.1339612715904494,w=0.5221170496304357,x=5.496289287733659 color=red,shape=triangle,flag=1,i=14253,u=0.2120089224670827,v=0.7986499945852931,w=0.521784998982137,x=5.6634201426516135 color=red,shape=triangle,flag=1,i=14268,u=0.15146444566253414,v=0.65791871007012,w=0.5198424601293512,x=4.392549807411798 color=green,shape=square,flag=0,i=14272,u=0.8851823608373731,v=0.5089789369287248,w=0.4991071831888381,x=3.158657222232056 color=yellow,shape=circle,flag=1,i=14281,u=0.2789053240270756,v=0.9090534232281638,w=0.5140980146223828,x=5.45647071580208 color=red,shape=circle,flag=0,i=14290,u=0.5097405052024179,v=0.5041029683142759,w=0.5242051169057653,x=4.819743306409431 color=purple,shape=circle,flag=0,i=14297,u=0.7947428527518005,v=0.3881703708096508,w=0.522427444575967,x=6.05534000029317 color=red,shape=triangle,flag=0,i=14303,u=0.28416782619934855,v=0.06350555777253053,w=0.5085285453643593,x=6.55996735218059 color=blue,shape=square,flag=1,i=14328,u=0.8155423000528911,v=0.6912227280319209,w=0.5102511256523973,x=4.57478249505884 color=blue,shape=square,flag=1,i=14329,u=0.9760826951338114,v=0.25124876592230316,w=0.5095529156043155,x=7.087442691050007 color=blue,shape=triangle,flag=1,i=14333,u=0.579686737751189,v=0.09902799524286565,w=0.4934126285207782,x=5.133174756142023 color=green,shape=square,flag=1,i=14360,u=0.9168683455171529,v=0.5755568921836911,w=0.49846218390531355,x=5.147985460524783 color=red,shape=triangle,flag=0,i=14364,u=0.4224395148550478,v=0.7585154661327256,w=0.5217501414466491,x=4.295667138519822 color=red,shape=square,flag=0,i=14371,u=0.09121499143748579,v=0.8042966745450495,w=0.48215454460904383,x=6.17393521373408 color=green,shape=square,flag=1,i=14381,u=0.30314308492664954,v=0.7584708740969923,w=0.508517100736907,x=2.963882010016347 color=red,shape=square,flag=0,i=14397,u=0.5454189503033381,v=0.8888068105940029,w=0.47084227709772725,x=4.048438777827946 color=blue,shape=circle,flag=0,i=14423,u=0.4181712466079194,v=0.8209287710482398,w=0.48659931742565604,x=4.391926930048069 color=red,shape=triangle,flag=0,i=14425,u=0.9370428656273921,v=0.1812222313724986,w=0.5057835916976842,x=5.551701342497384 color=purple,shape=square,flag=0,i=14438,u=0.5645412802083745,v=0.8679246560618926,w=0.48870219606413967,x=5.752207630085013 color=red,shape=square,flag=0,i=14463,u=0.11918301072731197,v=0.05275510143846773,w=0.46619122720457223,x=5.725586133634786 color=blue,shape=triangle,flag=1,i=14472,u=0.7302720268428897,v=0.07980285819832744,w=0.48290709781734625,x=5.848500169578638 color=purple,shape=circle,flag=1,i=14492,u=0.7962356126602776,v=0.48105685844113766,w=0.5203139401671512,x=7.016191396527854 color=red,shape=triangle,flag=0,i=14494,u=0.01212854627329596,v=0.11214983070216777,w=0.5132754902354534,x=5.3993805357678335 color=red,shape=triangle,flag=1,i=14496,u=0.983541904397701,v=0.38994554176702,w=0.5111746327786401,x=6.755766147794492 color=yellow,shape=circle,flag=1,i=14517,u=0.849866830009893,v=0.1377220040202335,w=0.5107063443534597,x=4.208319736321737 color=blue,shape=triangle,flag=1,i=14521,u=0.9028140144457457,v=0.0072419946813584435,w=0.4802675263180019,x=5.754434079066073 color=red,shape=circle,flag=0,i=14523,u=0.6984465647754432,v=0.7920528540094837,w=0.5245877189397763,x=4.179907521627238 color=red,shape=square,flag=0,i=14526,u=0.9849328782355904,v=0.2864840698591318,w=0.4718275339637052,x=7.253623901141748 color=red,shape=triangle,flag=1,i=14530,u=0.8926783209166769,v=0.8435143102133916,w=0.511019984414908,x=7.851768707388724 color=green,shape=circle,flag=0,i=14532,u=0.14418906564710277,v=0.24720362522758532,w=0.4923618056032026,x=4.746626866797336 color=red,shape=triangle,flag=0,i=14552,u=0.7123016643909355,v=0.08573345226885098,w=0.5049409771560193,x=3.8702519729405354 color=purple,shape=circle,flag=0,i=14555,u=0.7881247957597121,v=0.99544664427954,w=0.511401258753662,x=6.45209261282207 color=red,shape=square,flag=1,i=14556,u=0.8139498689596297,v=0.8692722469992163,w=0.4682179941760743,x=4.353719931144167 color=red,shape=square,flag=0,i=14604,u=0.4249495382016051,v=0.7027022502679589,w=0.46509101575718004,x=6.373038410640301 color=blue,shape=circle,flag=0,i=14607,u=0.03840312022946624,v=0.6376898058925444,w=0.48895143396370994,x=4.751765700768359 color=blue,shape=triangle,flag=1,i=14616,u=0.8240179481581177,v=0.68683317204178,w=0.4936434564395495,x=5.19397603446981 color=blue,shape=circle,flag=1,i=14633,u=0.9146067198859229,v=0.32917984208581086,w=0.49291722701703855,x=6.081940814725653 color=red,shape=circle,flag=0,i=14650,u=0.93215869754079,v=0.9503845706324021,w=0.5108886987758767,x=3.1674552244314005 color=yellow,shape=square,flag=1,i=14656,u=0.1716397683394062,v=0.2812511947883829,w=0.49349130699703886,x=5.623231416005445 color=red,shape=square,flag=0,i=14709,u=0.6055516067077046,v=0.6770580988536724,w=0.4638158662115048,x=2.795668407356699 color=purple,shape=triangle,flag=0,i=14719,u=0.31053388228140444,v=0.8087902453309674,w=0.5053809666882388,x=5.449792965610591 color=red,shape=triangle,flag=1,i=14722,u=0.885983902300776,v=0.04338167501090617,w=0.5179683182470572,x=2.6815882750330355 color=yellow,shape=triangle,flag=1,i=14765,u=0.5084344287647005,v=0.8630809028000475,w=0.500608452378707,x=6.401953315318596 color=red,shape=triangle,flag=1,i=14773,u=0.47444630551956046,v=0.6310137874105359,w=0.5187282965028817,x=6.335173206953601 color=red,shape=circle,flag=0,i=14794,u=0.9717864986784022,v=0.8968038334054035,w=0.5187101768752759,x=2.9453669767693476 color=red,shape=triangle,flag=0,i=14813,u=0.3551620206225681,v=0.7733116511683221,w=0.5093590172857457,x=4.324833002386056 color=yellow,shape=circle,flag=1,i=14832,u=0.47213281630529214,v=0.49296805884681205,w=0.5333347564474935,x=5.036572391045106 color=blue,shape=square,flag=1,i=14835,u=0.4227183074665415,v=0.09683274749017745,w=0.5268413497109743,x=3.6594842667346925 color=purple,shape=square,flag=0,i=14836,u=0.15813139741510351,v=0.2539421141756736,w=0.4869518089997193,x=5.163559493516648 color=green,shape=triangle,flag=1,i=14843,u=0.38003108624109727,v=0.35730323583756707,w=0.4805526785811963,x=5.556106630834261 color=red,shape=circle,flag=0,i=14847,u=0.9449193797119123,v=1.0075057280585997,w=0.5260100798455719,x=2.915031046104689 color=blue,shape=triangle,flag=1,i=14853,u=0.20825749940394378,v=0.4640056781435975,w=0.48930578920643386,x=5.079973849941379 color=green,shape=circle,flag=0,i=14857,u=0.6171063468992336,v=0.6700161392054423,w=0.5041583369048662,x=4.373782447048373 color=purple,shape=square,flag=0,i=14866,u=0.5205815804383032,v=0.0030471655626180816,w=0.4906041430970303,x=4.183133422173761 color=purple,shape=circle,flag=0,i=14872,u=0.9162351767525383,v=0.6108900727888027,w=0.5176947597314238,x=6.135111425729108 color=orange,shape=triangle,flag=1,i=14874,u=0.5784371449667227,v=0.3273460250893254,w=0.6038914657817255,x=3.005209333609654 color=red,shape=triangle,flag=1,i=14883,u=0.0441338048037756,v=0.07685514304714514,w=0.49817786236957623,x=6.396745629019118 color=red,shape=triangle,flag=0,i=14884,u=0.5358364720949864,v=0.17870102293496515,w=0.5013563556163072,x=4.7061836789711515 color=green,shape=circle,flag=0,i=14888,u=0.6433901398288796,v=0.723256067149859,w=0.5052324414327533,x=6.142146716544038 color=red,shape=square,flag=1,i=14896,u=0.5308023477905606,v=0.11866285283759814,w=0.4633704925102731,x=4.737868333353272 color=purple,shape=triangle,flag=0,i=14898,u=0.7800986870203719,v=0.23998073813992293,w=0.5014775988383656,x=3.141006771777843 color=yellow,shape=square,flag=1,i=14899,u=0.9666761610516968,v=0.6828956724107826,w=0.49925404083245745,x=4.370065431949925 color=yellow,shape=square,flag=1,i=14905,u=0.28038900627894836,v=0.8995022929871853,w=0.4987236881846455,x=4.725431433741935 color=green,shape=triangle,flag=0,i=14909,u=0.43718934029556866,v=0.1587691485003473,w=0.48916274380494007,x=5.980542464457428 color=blue,shape=circle,flag=1,i=14916,u=0.6127999424429291,v=0.13785341768538018,w=0.49416839669513263,x=5.504732688131258 color=blue,shape=square,flag=0,i=14926,u=0.653706393978037,v=0.09518434113005991,w=0.5202500679270905,x=5.584469269622242 color=red,shape=square,flag=0,i=14931,u=0.5682716889163334,v=0.16244711016158198,w=0.4788231163030483,x=4.280734789728041 color=purple,shape=triangle,flag=0,i=14936,u=0.7088224781457672,v=0.443118701987686,w=0.5008785647356461,x=3.228486771484622 color=yellow,shape=triangle,flag=1,i=14944,u=0.639919381963617,v=0.10279612347611944,w=0.4906602089908527,x=4.722854758956341 color=red,shape=triangle,flag=0,i=14962,u=0.9523905742504042,v=0.6609376873998433,w=0.5045948997163691,x=6.700940568748937 color=yellow,shape=triangle,flag=1,i=14968,u=0.2576802953811417,v=0.035106408653283294,w=0.49344843704159896,x=5.376983775840819 color=orange,shape=circle,flag=0,i=14971,u=0.00123537823160913,v=0.08682338659633582,w=0.5629832470618805,x=5.565005676229032 color=blue,shape=square,flag=0,i=14975,u=0.839651494852314,v=0.3979392800914997,w=0.5133908521883818,x=4.217827931670783 color=red,shape=triangle,flag=1,i=14987,u=0.08238867613856005,v=0.5646773884752432,w=0.5050499811316836,x=4.051135582642282 color=red,shape=square,flag=0,i=14991,u=0.06515598485003249,v=0.0062516600856381555,w=0.4803282546908886,x=2.735731481106074 color=blue,shape=square,flag=1,i=14996,u=0.9899809059180887,v=0.7925442838246984,w=0.5111584505402456,x=7.248105823481322 color=red,shape=circle,flag=0,i=14997,u=0.5600503100302892,v=0.547484361837022,w=0.5217974383062266,x=5.237620001555552 color=red,shape=triangle,flag=0,i=15004,u=0.8911674185324588,v=0.30501982558163165,w=0.5056649592970451,x=5.594937799949894 color=orange,shape=square,flag=1,i=15019,u=0.26704979254150596,v=0.05020948276570314,w=0.4046547386777556,x=3.50833423584467 color=blue,shape=square,flag=1,i=15032,u=0.07626291191342116,v=0.9993762799575532,w=0.5084665202703759,x=7.599930387955021 color=blue,shape=square,flag=1,i=15037,u=0.08450543351969575,v=0.7083592730009283,w=0.5066025009157761,x=4.101824218245984 color=yellow,shape=triangle,flag=1,i=15047,u=0.02160588809822228,v=0.28381956178424583,w=0.48603349508971216,x=4.45822734152939 color=green,shape=circle,flag=0,i=15062,u=0.586407200981746,v=0.7707706978930926,w=0.5072932452449916,x=4.310861183823518 color=yellow,shape=square,flag=1,i=15069,u=0.08784767728557785,v=0.44320231025179124,w=0.5047122669375179,x=6.253108930741894 color=red,shape=square,flag=1,i=15071,u=0.01808893569695258,v=0.6033400058803184,w=0.4963625608743614,x=5.676408204648928 color=red,shape=triangle,flag=1,i=15078,u=0.5188445899471674,v=0.2054615782860223,w=0.5051081702877704,x=4.149809164238546 color=blue,shape=square,flag=1,i=15088,u=0.0926751887349303,v=0.8575974785393341,w=0.5044046905115802,x=4.186681849097764 color=green,shape=square,flag=0,i=15101,u=0.41216829983373626,v=0.2179541358341185,w=0.5031201088731738,x=6.438506161609307 color=blue,shape=square,flag=1,i=15120,u=0.07814218751048518,v=0.017611194564903343,w=0.5173692197119569,x=5.6291495759830985 color=red,shape=triangle,flag=0,i=15141,u=0.5839836293912036,v=0.7513576093695511,w=0.5045182683592248,x=7.116208678184901 color=red,shape=triangle,flag=0,i=15145,u=0.5017162812700555,v=0.10542216954040406,w=0.5076140272722909,x=3.86112889258362 color=red,shape=square,flag=0,i=15147,u=0.9630144759547907,v=0.5818194875098636,w=0.508225451222867,x=5.905251634865894 color=purple,shape=square,flag=0,i=15155,u=0.6865054849633299,v=0.5656373357661751,w=0.5004484981383253,x=3.148680059493571 color=red,shape=triangle,flag=0,i=15157,u=0.0798636843120577,v=0.5200051525880036,w=0.4981966695757328,x=5.411305125523746 color=red,shape=circle,flag=0,i=15169,u=0.5475712093427035,v=0.5356832730230972,w=0.5233157934711181,x=4.334177690795344 color=orange,shape=circle,flag=1,i=15198,u=0.1251493099854265,v=0.7473256465133866,w=0.5623911322731734,x=5.060336243273615 color=red,shape=triangle,flag=1,i=15223,u=0.6684267910023817,v=0.8392604543470157,w=0.49361176598433076,x=4.0607633061476545 color=red,shape=square,flag=1,i=15230,u=0.4273444325237651,v=0.174843786936679,w=0.5263527648879064,x=3.227467771218563 color=red,shape=square,flag=1,i=15249,u=0.3787598732730033,v=0.7829831727114307,w=0.5222464333064276,x=5.816019939642196 color=red,shape=square,flag=1,i=15252,u=0.3901545933278515,v=0.31070315021239137,w=0.5181834452960001,x=2.982092054779662 color=red,shape=circle,flag=0,i=15255,u=0.9120094870970091,v=0.9813740008636757,w=0.5158701921078487,x=6.3789310652896205 color=red,shape=circle,flag=0,i=15305,u=0.4464183994728518,v=0.42256561281989213,w=0.518999269233295,x=3.9340082222722237 color=red,shape=triangle,flag=1,i=15313,u=0.6952114295322833,v=0.9444219775869979,w=0.4830149943508116,x=4.3272145034290865 color=red,shape=triangle,flag=0,i=15330,u=0.12134833736624762,v=0.9930567573417352,w=0.48245707213158506,x=3.9631282674594015 color=yellow,shape=square,flag=1,i=15334,u=0.39333742464735455,v=0.1554681210202501,w=0.5091068855271216,x=2.099045215760794 color=yellow,shape=square,flag=1,i=15338,u=0.22300992387619245,v=0.16341182907341567,w=0.508758083967103,x=5.955059676059352 color=red,shape=circle,flag=0,i=15398,u=0.3698975647561009,v=0.4044098003365939,w=0.5168819374333097,x=5.061536597109549 color=green,shape=triangle,flag=0,i=15400,u=0.5178017082503106,v=0.8129724963030966,w=0.4744652134988754,x=4.070125186616651 color=red,shape=square,flag=0,i=15409,u=0.022706372810424647,v=0.8602720415709226,w=0.5211763690503436,x=5.1642401750565154 color=red,shape=square,flag=0,i=15420,u=0.3566305172259987,v=0.9317468119813289,w=0.5245711918651474,x=5.537410584198182 color=red,shape=circle,flag=1,i=15429,u=0.4715419193369448,v=0.4601954093633077,w=0.5186490043572817,x=3.817513717598988 color=orange,shape=triangle,flag=1,i=15432,u=0.3459437286892133,v=0.8294944511191099,w=0.6106267034178549,x=5.799144427135509 color=blue,shape=triangle,flag=0,i=15451,u=0.542004310304193,v=0.39096310522820876,w=0.4869781863069116,x=4.780495603382041 color=red,shape=triangle,flag=0,i=15495,u=0.6619965581838725,v=0.8324278360368469,w=0.5025508795167364,x=5.159649971148993 color=yellow,shape=circle,flag=1,i=15496,u=0.49861119317248204,v=0.2517696396289262,w=0.5365441859017953,x=5.864840322817645 color=red,shape=circle,flag=0,i=15510,u=0.11386588458115432,v=0.21058895524856036,w=0.5270659620153532,x=6.164853709933802 color=blue,shape=square,flag=1,i=15515,u=0.1312072045610081,v=0.8113098528941513,w=0.508430889400386,x=4.780795121970809 color=yellow,shape=triangle,flag=1,i=15523,u=0.9567230961328295,v=0.7833673727424829,w=0.47677068144729196,x=6.189454548308283 color=blue,shape=triangle,flag=1,i=15528,u=0.3971554919191501,v=0.3527571547814464,w=0.4853951042177243,x=4.166376005034991 color=yellow,shape=triangle,flag=0,i=15547,u=0.7383491744902775,v=0.7429696106353925,w=0.4827701585669367,x=6.2943201116537395 color=red,shape=square,flag=0,i=15559,u=0.7195042917345941,v=0.021571195547008926,w=0.5209040755418666,x=4.862326357449001 color=green,shape=triangle,flag=0,i=15571,u=0.09241811216262175,v=0.8156441098794263,w=0.4751145368157352,x=3.5107350397115717 color=green,shape=circle,flag=0,i=15576,u=0.6045211936163736,v=0.4695583584388463,w=0.4968613575632019,x=3.5374538105516606 color=red,shape=square,flag=0,i=15586,u=0.24734017270341624,v=0.46429832599716037,w=0.5153322803514591,x=4.089028004455932 color=red,shape=square,flag=0,i=15587,u=0.3357918746850441,v=0.9913143775914488,w=0.5197651484946816,x=3.7596495952433417 color=yellow,shape=square,flag=1,i=15595,u=0.9950497268959522,v=0.5058762315969073,w=0.5101049131860939,x=5.714446428794372 color=red,shape=triangle,flag=0,i=15603,u=0.9942884186953432,v=0.48270741058008804,w=0.5072110422432571,x=4.709766889328525 color=blue,shape=square,flag=0,i=15609,u=0.22610020400319486,v=0.07343477998960268,w=0.5049629817860245,x=5.0967426458698135 color=red,shape=triangle,flag=1,i=15620,u=0.8369174954118124,v=0.24610261201796124,w=0.5025341724133885,x=3.311764984438249 color=blue,shape=circle,flag=1,i=15625,u=0.4246995254499275,v=0.7737351100319132,w=0.5130141453459902,x=6.9219809003223185 color=yellow,shape=triangle,flag=1,i=15627,u=0.5782309050173462,v=0.9334321281237464,w=0.4783628631054142,x=4.127115978333628 color=blue,shape=square,flag=0,i=15640,u=0.2607501272150067,v=0.4436840748893439,w=0.49545042916181764,x=5.8221095062536925 color=red,shape=triangle,flag=0,i=15662,u=0.7994227649583797,v=0.62077765210656,w=0.49717891865733305,x=4.173656675697485 color=red,shape=square,flag=0,i=15676,u=0.04989642052714016,v=0.4777258033796561,w=0.5250816668534074,x=4.649008997299784 color=red,shape=circle,flag=1,i=15679,u=0.4576676201388019,v=0.5112544358499069,w=0.5131145706611853,x=5.817248477957283 color=purple,shape=triangle,flag=0,i=15683,u=0.3498400848855051,v=0.6030019170385277,w=0.47692032698793774,x=2.983906928830633 color=green,shape=circle,flag=0,i=15694,u=0.27236785618696246,v=0.19170871868644357,w=0.48914269495088475,x=5.706680055662041 color=red,shape=square,flag=0,i=15699,u=0.023503084200703128,v=0.10471979552007205,w=0.5258970669504822,x=4.2111126331215125 color=green,shape=square,flag=0,i=15702,u=0.7071785578616405,v=0.6723988759647884,w=0.4968005538881674,x=4.518035820700271 color=yellow,shape=triangle,flag=0,i=15708,u=0.4336051777290023,v=0.4525292947451417,w=0.48043792713808164,x=3.320257131947184 color=purple,shape=circle,flag=0,i=15723,u=0.34992352669458926,v=0.19276286869640769,w=0.5325232572108609,x=5.306536206146193 color=purple,shape=triangle,flag=0,i=15740,u=0.1945653968841844,v=0.09085936322480359,w=0.47368277204719483,x=6.372607396517254 color=red,shape=circle,flag=0,i=15763,u=0.009932299416669066,v=-0.06451014087909289,w=0.5069666106637172,x=4.749498869367787 color=yellow,shape=square,flag=1,i=15770,u=0.08152955087983449,v=0.15468358408489402,w=0.5139262104662475,x=3.8545545661956786 color=blue,shape=circle,flag=1,i=15775,u=0.4834666438930203,v=0.9006942788906097,w=0.5214011493644019,x=4.416473243369009 color=blue,shape=circle,flag=0,i=15780,u=0.1939322950705049,v=0.1985081272569087,w=0.5251202541490323,x=6.498516482547493 color=yellow,shape=square,flag=1,i=15786,u=0.1712262295042275,v=0.27186087966750805,w=0.5114335148457115,x=5.574738537029383 color=blue,shape=triangle,flag=1,i=15787,u=0.5323331248788394,v=0.09821673422323274,w=0.48539855457830294,x=4.0209042326472995 color=blue,shape=circle,flag=1,i=15800,u=0.3812011341188266,v=0.041484109537629266,w=0.5251293597509595,x=6.887622387173594 color=red,shape=triangle,flag=1,i=15803,u=0.033748370226377444,v=0.4711750714188022,w=0.5061162688959739,x=5.373795344628793 color=blue,shape=triangle,flag=1,i=15811,u=0.7514087857345508,v=0.4834196353075204,w=0.48146260000496627,x=6.9420742165102185 color=green,shape=triangle,flag=0,i=15812,u=0.24612392074151745,v=0.9182168804230652,w=0.47348245935172745,x=3.0664546470786433 color=red,shape=triangle,flag=0,i=15844,u=0.0724090941756893,v=0.3266176648456305,w=0.487535025699818,x=4.914870156373522 color=yellow,shape=square,flag=1,i=15850,u=0.17124067723267888,v=0.5506229570092481,w=0.5158445618782189,x=5.198513699946165 color=yellow,shape=square,flag=1,i=15854,u=0.08248534364186932,v=0.3541209027335386,w=0.5134054823243431,x=4.426602897051975 color=yellow,shape=triangle,flag=1,i=15856,u=0.2414160118125549,v=0.4496732915421796,w=0.4936445778656388,x=7.092079747699992 color=yellow,shape=circle,flag=1,i=15864,u=0.7434834386165852,v=0.11676223388095575,w=0.5399775004974532,x=7.696682134988461 color=green,shape=triangle,flag=1,i=15873,u=0.8317175879062484,v=0.06662307981988391,w=0.4755961173134097,x=4.149289340167659 color=blue,shape=circle,flag=1,i=15882,u=0.8819234005380501,v=0.31444090657123047,w=0.5261191750041421,x=5.5606641225009215 color=green,shape=square,flag=1,i=15903,u=0.07235666498638904,v=0.148354564410486,w=0.5005049277335725,x=3.543327491305058 color=blue,shape=square,flag=0,i=15940,u=0.7828349509192136,v=0.871678820437661,w=0.49451038933479974,x=3.5923248589715997 color=purple,shape=triangle,flag=0,i=15951,u=0.6860819003511519,v=0.1814278245572576,w=0.4794927254400799,x=3.208864964272895 color=red,shape=square,flag=0,i=15955,u=0.8003070754464522,v=0.5749479993606467,w=0.5098731016062845,x=5.957604945420268 color=red,shape=triangle,flag=0,i=15965,u=0.7147987757967604,v=0.13987108575516194,w=0.4992671722022492,x=4.403254491564382 color=green,shape=square,flag=0,i=15970,u=0.6169011687279528,v=0.9898678110005391,w=0.4972698363449035,x=4.454162669804412 color=purple,shape=triangle,flag=0,i=15986,u=0.9931091066584197,v=0.31661312143417375,w=0.47398735157249683,x=3.6066052590456614 color=red,shape=square,flag=1,i=16006,u=0.6867610359697065,v=0.507610498524394,w=0.5124537172401294,x=5.522823349123399 color=red,shape=square,flag=0,i=16037,u=0.39038053540378026,v=0.8417455077626104,w=0.5151235820737593,x=5.737086480829184 color=red,shape=triangle,flag=0,i=16049,u=0.8392771571726819,v=0.00658144817429529,w=0.4959679105439668,x=4.323538416521468 color=red,shape=triangle,flag=1,i=16054,u=0.18513306418580644,v=0.8542977470809716,w=0.49284172122844583,x=5.79632710038457 color=green,shape=square,flag=0,i=16070,u=0.20118260052124137,v=0.8247099430266651,w=0.49547697102551935,x=6.588142150093525 color=blue,shape=circle,flag=1,i=16074,u=0.34416719021029807,v=0.6202191150256388,w=0.5180377461130594,x=6.660325674155516 color=red,shape=triangle,flag=0,i=16076,u=0.6438307311050486,v=0.35016718808172453,w=0.489062996881268,x=5.700374707236964 color=red,shape=circle,flag=1,i=16077,u=0.5639382494899604,v=0.5446596958556292,w=0.4935413659977984,x=2.865999958892722 color=yellow,shape=triangle,flag=0,i=16078,u=0.8704808697281591,v=0.05957843289143672,w=0.5028682718476899,x=3.0188461260254935 color=red,shape=triangle,flag=0,i=16082,u=0.053365327860362854,v=0.9912416081091163,w=0.49775208051633135,x=4.702591301038054 color=purple,shape=circle,flag=0,i=16086,u=0.04694416903551002,v=0.7592236332565199,w=0.5262201203837901,x=6.3791752087389435 color=red,shape=square,flag=0,i=16087,u=0.26132763678507254,v=0.5607606371222695,w=0.5168835911823033,x=2.649601188871864 color=red,shape=square,flag=0,i=16090,u=0.3400507466419064,v=0.38255979518418715,w=0.5213162229891568,x=2.6956329488167046 color=red,shape=square,flag=0,i=16093,u=0.6593943690870726,v=0.7010289615498657,w=0.5256373993442685,x=5.774316010619184 color=red,shape=circle,flag=0,i=16096,u=0.18615589711097635,v=0.21606761167369876,w=0.4878945650539288,x=2.776099139427691 color=red,shape=square,flag=0,i=16105,u=0.9718748703203175,v=0.7908083944545664,w=0.5162287815514458,x=6.8949765609719575 color=yellow,shape=triangle,flag=1,i=16114,u=0.2583367216370851,v=0.379467069737323,w=0.512250932144463,x=5.792278920400531 color=red,shape=circle,flag=0,i=16127,u=0.7346525915213076,v=0.7250892134821284,w=0.49339996023614924,x=4.640289654683079 color=red,shape=triangle,flag=1,i=16140,u=0.9574438414239587,v=0.5699177973645565,w=0.4949247876508358,x=5.251555836208156 color=red,shape=triangle,flag=0,i=16141,u=0.4897477306855311,v=0.5156549960378174,w=0.49987639348711527,x=4.811537808181529 color=red,shape=triangle,flag=0,i=16178,u=0.89800392509195,v=0.2580144819987862,w=0.49692118513426015,x=4.0294982342361925 color=red,shape=square,flag=1,i=16181,u=0.7233474659703666,v=0.3392303014427521,w=0.5094232759404329,x=3.5418882933234457 color=purple,shape=square,flag=0,i=16191,u=0.10209635801504768,v=0.6011677209175024,w=0.5167651178372316,x=5.192682714548251 color=blue,shape=circle,flag=0,i=16229,u=0.4374272542886931,v=0.5894242709166924,w=0.5230775352669057,x=6.373857204331382 color=red,shape=circle,flag=0,i=16249,u=0.13835731863340617,v=0.21611500948860513,w=0.5053199411285556,x=5.201769168244847 color=yellow,shape=circle,flag=0,i=16256,u=0.14957695147412609,v=0.8555027647510632,w=0.5315644601641947,x=4.556975870400403 color=red,shape=triangle,flag=1,i=16258,u=0.022187170738142026,v=0.3358024072006913,w=0.5068396826702423,x=4.831299635644792 color=red,shape=square,flag=1,i=16263,u=0.3528403085787173,v=0.03685984223592509,w=0.5132513826044358,x=5.021860124253731 color=red,shape=square,flag=0,i=16274,u=0.7883748235421791,v=0.9971508969805282,w=0.5116239619414613,x=5.690485030881441 color=yellow,shape=triangle,flag=1,i=16276,u=0.923434585255116,v=0.12478266659611481,w=0.5074495438520203,x=4.785806381946745 color=orange,shape=square,flag=0,i=16290,u=0.11565420469753684,v=0.361692773826765,w=0.4031605503087614,x=5.567366061297396 color=red,shape=triangle,flag=1,i=16291,u=0.8796988140591834,v=0.35494707583212626,w=0.5077821331045622,x=7.142771835059627 color=red,shape=triangle,flag=1,i=16305,u=0.8003826486203692,v=0.2814788021217849,w=0.5086043890539098,x=4.204651269441825 color=red,shape=triangle,flag=0,i=16319,u=0.7880334263380261,v=0.5467556956126609,w=0.5071321058821943,x=6.212412030417991 color=red,shape=triangle,flag=0,i=16335,u=0.035466580346306786,v=0.8440753383804791,w=0.5120773852172638,x=5.484198453750779 color=blue,shape=triangle,flag=1,i=16358,u=0.8704798610241631,v=0.004234331182726758,w=0.4834610009721155,x=5.110536905890522 color=yellow,shape=triangle,flag=1,i=16368,u=0.16722880094202985,v=0.5331665886741648,w=0.5157861793920647,x=3.5322031943831127 color=red,shape=circle,flag=1,i=16375,u=0.3703855562429845,v=0.32947511455390815,w=0.5202030954426552,x=3.585167834817448 color=red,shape=square,flag=1,i=16376,u=0.05904084002890608,v=0.26743060206617064,w=0.5099220775467259,x=6.311773927940631 color=purple,shape=square,flag=0,i=16382,u=0.09967917895885192,v=0.21041935252986776,w=0.5273472954423297,x=5.032566824604894 color=yellow,shape=circle,flag=1,i=16386,u=0.36498035473447876,v=0.6918375583976498,w=0.5364254815654066,x=5.632016879708189 color=purple,shape=circle,flag=0,i=16396,u=0.8814059033154457,v=0.8237405564097807,w=0.5179644729193985,x=3.230307846779313 color=yellow,shape=circle,flag=1,i=16401,u=0.99992313390574,v=0.3687646378408269,w=0.5333628931416158,x=5.96973184099635 color=yellow,shape=triangle,flag=1,i=16406,u=0.8705483726379302,v=0.635717001186378,w=0.5176043232070217,x=8.277785148405325 color=purple,shape=circle,flag=0,i=16412,u=0.9810618295911512,v=0.3357196242879985,w=0.5196718956581952,x=3.1066968216377204 color=blue,shape=square,flag=1,i=16414,u=0.2185728190087145,v=0.9544337791387105,w=0.49913608886427385,x=6.209146397062262 color=yellow,shape=triangle,flag=1,i=16417,u=0.09377810352804183,v=0.2476771066567658,w=0.512766464399817,x=4.4662569132323515 color=red,shape=triangle,flag=0,i=16418,u=0.07218845329751722,v=0.2724171141092393,w=0.5205374098493715,x=3.381259366623943 color=red,shape=triangle,flag=1,i=16424,u=0.5265377001205992,v=0.9831435482782511,w=0.5152972342892527,x=4.65230423340359 color=blue,shape=triangle,flag=1,i=16429,u=0.6924068005202895,v=0.42471034602340607,w=0.48067755082778935,x=5.074324771783864 color=green,shape=square,flag=1,i=16439,u=0.8843533910982385,v=0.6741814580467207,w=0.49960752542234205,x=5.80365741837183 color=red,shape=circle,flag=0,i=16453,u=0.8577252485380948,v=0.8746765042352258,w=0.5333673223790014,x=6.7169125788696595 color=blue,shape=square,flag=1,i=16456,u=0.9497528508796864,v=0.4492355758758799,w=0.5004988452896145,x=4.274697133447624 color=orange,shape=triangle,flag=1,i=16465,u=0.8592782919029369,v=0.09695003443374672,w=0.5954823139158727,x=6.360133284119576 color=blue,shape=square,flag=0,i=16468,u=0.22255129450047106,v=0.7468829366313168,w=0.4960209365540604,x=5.6865733367267834 color=red,shape=square,flag=0,i=16472,u=0.22458948465907036,v=0.2721667664598685,w=0.5191019318244613,x=4.5526101222469455 color=red,shape=circle,flag=0,i=16477,u=0.8631484426860168,v=0.9252436743177017,w=0.5342977530901505,x=6.392483029809245 color=red,shape=circle,flag=1,i=16486,u=0.08462299404912799,v=0.017882956141416176,w=0.5327918958695028,x=4.260544072589946 color=green,shape=circle,flag=0,i=16495,u=0.2596432122992507,v=0.7503298137323392,w=0.46929294123799264,x=5.550315151041893 color=red,shape=square,flag=0,i=16497,u=0.053864179294253134,v=0.37353471823671136,w=0.5086405862162909,x=3.0547295088360613 color=purple,shape=square,flag=0,i=16519,u=0.0994964767490375,v=0.14001067474429596,w=0.5174199439811942,x=4.621760714599228 color=blue,shape=triangle,flag=1,i=16521,u=0.7879513768052773,v=0.8916704038169382,w=0.4797287034424058,x=4.279134665575557 color=red,shape=circle,flag=0,i=16541,u=0.23872149124570918,v=0.24014661208119284,w=0.5437358846331318,x=3.1929060908341262 color=orange,shape=triangle,flag=0,i=16587,u=0.5234694537217567,v=0.4605815096186735,w=0.58971963422156,x=3.187375123982554 color=blue,shape=circle,flag=1,i=16603,u=0.6108133376599876,v=0.498712292828957,w=0.5135116718077685,x=4.519052492771044 color=blue,shape=triangle,flag=1,i=16607,u=0.6797279981350438,v=0.12708162731226424,w=0.4817873238140527,x=5.368460523725744 color=purple,shape=square,flag=0,i=16633,u=0.9942938259681083,v=0.44987288755072596,w=0.5255313084604537,x=5.835669669309084 color=red,shape=triangle,flag=0,i=16644,u=0.9373771361562737,v=0.0877266080535285,w=0.5085159396037321,x=4.432721764652215 color=red,shape=square,flag=0,i=16654,u=0.8735959361937571,v=0.2288162095854429,w=0.5127730057985358,x=4.492018245909538 color=green,shape=triangle,flag=0,i=16657,u=0.9523858792126222,v=0.6794330346162207,w=0.4926446323722373,x=4.073198201688311 color=red,shape=triangle,flag=1,i=16661,u=0.09189711069479922,v=0.8968558084908382,w=0.5068814878316061,x=5.0919613524662735 color=blue,shape=triangle,flag=1,i=16670,u=0.8465877539470525,v=0.5652719171228668,w=0.487599679525874,x=4.05809980725319 color=red,shape=triangle,flag=1,i=16679,u=0.16824077286349426,v=0.5881843630376156,w=0.5074803693891908,x=4.901239770209373 color=yellow,shape=square,flag=1,i=16680,u=0.05182067070226637,v=0.07999705243584687,w=0.5204877982958585,x=5.8133383056361465 color=blue,shape=square,flag=0,i=16705,u=0.4040460796776735,v=0.6043860761736015,w=0.5206421004107462,x=3.94536710062723 color=red,shape=square,flag=1,i=16713,u=0.6132315984041578,v=0.7243914763704151,w=0.5138976351491796,x=5.457628945501302 color=red,shape=circle,flag=0,i=16714,u=0.794219204918928,v=0.8709905063415768,w=0.5306588792724057,x=4.6300459187906515 color=red,shape=square,flag=0,i=16728,u=0.17489634348845018,v=0.32291780950981286,w=0.5227342356819406,x=5.087670460713631 color=blue,shape=square,flag=0,i=16729,u=0.9209555241015954,v=0.3864332210188094,w=0.5258252607739968,x=5.473074462749345 color=blue,shape=circle,flag=1,i=16744,u=0.8571647326722809,v=0.12889376856375323,w=0.5136883723307814,x=4.336452905483142 color=blue,shape=square,flag=1,i=16783,u=0.09974385090654347,v=0.7243899920872646,w=0.5353718443278438,x=4.431057737383438 color=yellow,shape=circle,flag=1,i=16802,u=0.48655769279810934,v=0.7679185924679897,w=0.5247690629047864,x=5.7177527335448985 color=red,shape=triangle,flag=1,i=16807,u=0.7204835603717645,v=0.9998431270283542,w=0.49680950152592795,x=7.163473415334352 color=blue,shape=circle,flag=0,i=16814,u=0.27168186677888084,v=0.3083809001154564,w=0.518715814666991,x=3.1182534774139 color=blue,shape=square,flag=1,i=16830,u=0.8689599747920659,v=0.6238375592925198,w=0.532460141808821,x=4.764105132197954 color=red,shape=triangle,flag=0,i=16850,u=0.7274777926556241,v=0.4405545546118679,w=0.4948858108303919,x=5.170674024795059 color=green,shape=triangle,flag=0,i=16856,u=0.9234003638906336,v=0.32686258354902686,w=0.48499546410968025,x=5.348453682608363 color=red,shape=circle,flag=0,i=16866,u=0.5872965561599752,v=0.6720215212824586,w=0.5098523081919161,x=3.8787153834472448 color=purple,shape=square,flag=0,i=16869,u=0.15168367840248909,v=0.8038573574438963,w=0.5218043909197505,x=6.48966366518547 color=yellow,shape=circle,flag=1,i=16883,u=0.46750811189195696,v=0.9587424582053815,w=0.5209327909101931,x=3.80472327784312 color=blue,shape=square,flag=0,i=16906,u=0.4417072858160903,v=0.36653760377856737,w=0.5335574644876531,x=4.926978701392438 color=green,shape=triangle,flag=1,i=16907,u=0.4552944519405542,v=0.9448302570126156,w=0.48221941097524135,x=6.682936943083757 color=red,shape=square,flag=1,i=16909,u=0.5959455084648746,v=0.06934870451273956,w=0.5174010585456551,x=5.812162827931043 color=red,shape=circle,flag=0,i=16917,u=0.6298891229029142,v=0.6674656007390151,w=0.510336491650564,x=4.87015869498476 color=blue,shape=triangle,flag=1,i=16928,u=0.4647596949594861,v=0.9788328526518476,w=0.4902231571615034,x=5.6158564854131 color=purple,shape=square,flag=0,i=16932,u=0.5053424214209484,v=0.2190629477764645,w=0.530529101584259,x=4.94918813152563 color=red,shape=triangle,flag=1,i=16958,u=0.44668695960118787,v=0.7330455454155936,w=0.4995256554394724,x=5.889024893119404 color=red,shape=square,flag=1,i=16985,u=0.8449830715352793,v=0.21611575288156937,w=0.5182155074717697,x=5.925498285819928 color=blue,shape=triangle,flag=1,i=17008,u=0.926958109999739,v=0.5342113765863877,w=0.49099023445820233,x=6.154341941941381 color=purple,shape=triangle,flag=0,i=17023,u=0.9288825305316942,v=0.939341980818594,w=0.4929857040215251,x=3.548292623583446 color=purple,shape=circle,flag=0,i=17035,u=0.9626625199225323,v=0.49321103995611204,w=0.5184648090893013,x=6.252167303074259 color=yellow,shape=triangle,flag=1,i=17049,u=0.863185288184129,v=0.9824102452101089,w=0.5049890040216818,x=4.612167244335764 color=red,shape=triangle,flag=0,i=17061,u=0.5958352128180107,v=0.8654861575613624,w=0.4972861186770385,x=4.301212412021034 color=yellow,shape=triangle,flag=1,i=17074,u=0.6891109963670059,v=0.5598487053136425,w=0.5081804163010131,x=6.177650166306869 color=red,shape=square,flag=1,i=17079,u=0.04444696494555278,v=0.40659666836302055,w=0.5019557737150733,x=5.016102424504741 color=blue,shape=square,flag=1,i=17090,u=0.43533678167163514,v=0.6234199774564234,w=0.53043232462496,x=4.247318741992618 color=yellow,shape=triangle,flag=1,i=17099,u=0.4885033103840972,v=0.8618985785584992,w=0.5103885187780002,x=5.86898618586082 color=red,shape=circle,flag=0,i=17100,u=0.45903078371197326,v=0.41344786451110754,w=0.5001877573908404,x=3.1045092556740284 color=red,shape=square,flag=1,i=17107,u=0.6524749145350351,v=0.4750682813895676,w=0.49587389900191603,x=5.571701325686253 color=red,shape=square,flag=1,i=17110,u=0.13288382833222712,v=0.12652363890301355,w=0.4898886316409854,x=4.192329442381407 color=purple,shape=triangle,flag=0,i=17132,u=0.9165693859199926,v=0.5990663759565618,w=0.48175339238838666,x=5.036858802932152 color=green,shape=square,flag=0,i=17139,u=0.4969531680297712,v=0.6069793187187434,w=0.4853536293778346,x=3.617017936590416 color=red,shape=circle,flag=1,i=17151,u=0.7673811559323066,v=0.7118863466073637,w=0.5000403901181234,x=3.2083771681535356 color=red,shape=circle,flag=0,i=17159,u=0.26580652627237067,v=0.2760331671608922,w=0.49736425965449216,x=7.630871059376367 color=blue,shape=circle,flag=1,i=17168,u=0.11013777448241957,v=0.9017110889256439,w=0.5047214420595714,x=3.6979178360614355 color=yellow,shape=triangle,flag=1,i=17176,u=0.1331561035367932,v=0.2717369158720261,w=0.5135247227207125,x=1.9826667878965287 color=blue,shape=triangle,flag=1,i=17189,u=0.9281915226809081,v=0.8567656494580272,w=0.4819063291682055,x=3.3700363405597096 color=blue,shape=triangle,flag=0,i=17190,u=0.6560741835852083,v=0.9081115707455537,w=0.4843280261261515,x=4.61692007821373 color=blue,shape=square,flag=0,i=17200,u=0.2573855469804952,v=0.052817807293260244,w=0.525614877145105,x=4.735408017435302 color=red,shape=circle,flag=0,i=17204,u=0.9529616854463476,v=0.9297714206749162,w=0.5006966346960369,x=3.6965341674164436 color=red,shape=circle,flag=1,i=17207,u=0.004535619454162698,v=-0.05728835919198161,w=0.4971310379335846,x=7.153721864285352 color=red,shape=square,flag=0,i=17210,u=0.8822273632153151,v=0.653081844504803,w=0.5103419129447917,x=5.933332419607486 color=red,shape=square,flag=0,i=17220,u=0.06669370736214342,v=0.36773747526761646,w=0.5079545366368898,x=6.210850232395764 color=red,shape=triangle,flag=1,i=17245,u=0.6907567019266935,v=0.8606919751762712,w=0.48528181221837885,x=6.434699035200111 color=red,shape=square,flag=1,i=17268,u=0.43846825973682,v=0.43124472691049043,w=0.514703836447414,x=5.080515361652981 color=red,shape=square,flag=1,i=17275,u=0.006589188721299433,v=0.37588589051866106,w=0.5207165072910435,x=4.709114444836948 color=green,shape=square,flag=0,i=17281,u=0.3192135829024829,v=0.3345720873057323,w=0.48941869913768826,x=6.569837798036416 color=purple,shape=square,flag=1,i=17292,u=0.204977260756821,v=0.6371111201307692,w=0.5165373809591253,x=5.949163083044027 color=yellow,shape=circle,flag=0,i=17293,u=0.597701461792648,v=0.35670266654168226,w=0.5058418665637808,x=3.7766931996225903 color=red,shape=square,flag=0,i=17295,u=0.375466118901559,v=0.838530994982027,w=0.5184181346321209,x=5.761396597570934 color=red,shape=square,flag=0,i=17300,u=0.2749973152860442,v=0.6120818076642955,w=0.5141722363816444,x=4.679835906439275 color=green,shape=square,flag=0,i=17303,u=0.7952509358369487,v=0.11352179140199681,w=0.4877564007123762,x=6.044010973968475 color=green,shape=triangle,flag=0,i=17315,u=0.5577754420142698,v=0.537015921693912,w=0.49216668978034595,x=5.25780930103903 color=yellow,shape=circle,flag=1,i=17320,u=0.9298083801971766,v=0.2691936837615315,w=0.5074773323840887,x=5.943788739477523 color=purple,shape=square,flag=0,i=17348,u=0.26844209430062005,v=0.16722149122350805,w=0.5171910939460402,x=5.529631800085454 color=orange,shape=square,flag=0,i=17353,u=0.6236127964764546,v=0.824622233618583,w=0.41038412374955086,x=6.382606011640546 color=blue,shape=circle,flag=0,i=17376,u=0.1289604180587025,v=0.7215540643216468,w=0.5124884412680788,x=4.104493916422971 color=red,shape=circle,flag=1,i=17380,u=0.6960585098536233,v=0.7098281225752464,w=0.5065685553531767,x=4.747498559858811 color=green,shape=square,flag=1,i=17388,u=0.14324020994482833,v=0.5477745931446888,w=0.4989466355760404,x=5.29301077071268 color=green,shape=triangle,flag=0,i=17410,u=0.302256164969382,v=0.40827321598576705,w=0.48916041427608326,x=5.458618386292095 color=yellow,shape=square,flag=1,i=17418,u=0.9989470669439893,v=0.8094609968758872,w=0.5220486909460273,x=5.606017207655145 color=red,shape=triangle,flag=0,i=17422,u=0.49667485051740135,v=0.4410426190022123,w=0.4943920363122078,x=3.619905844571345 color=green,shape=square,flag=0,i=17424,u=0.8535149065150077,v=0.17767917459805938,w=0.5053336928992425,x=4.987232980405251 color=green,shape=circle,flag=0,i=17438,u=0.46711743492681324,v=0.7703705946909739,w=0.49946818840753443,x=6.944800092813793 color=red,shape=triangle,flag=0,i=17441,u=0.3466592821905483,v=0.44613535018116524,w=0.4906961223719835,x=6.394956488950935 color=red,shape=circle,flag=1,i=17444,u=0.35743135948632554,v=0.3931581158914216,w=0.5134829232936834,x=3.9386325934478816 color=red,shape=circle,flag=0,i=17446,u=0.5994562009454839,v=0.6863393192150941,w=0.5177171005455358,x=3.5438057933320373 color=red,shape=circle,flag=0,i=17452,u=0.9300393186700822,v=0.9730629946838242,w=0.5220100199772015,x=3.3574421162023618 color=red,shape=triangle,flag=0,i=17462,u=0.9357964970459822,v=0.6974780997752765,w=0.49445737270561896,x=4.436924571862353 color=yellow,shape=circle,flag=1,i=17463,u=0.19037117794694747,v=0.9462141857495838,w=0.5153512008271607,x=4.902176365027439 color=green,shape=triangle,flag=1,i=17466,u=0.1974759436973993,v=0.6364433286063547,w=0.4875143524872009,x=6.070376328639818 color=green,shape=triangle,flag=0,i=17470,u=0.011961258528259244,v=0.12833681307230294,w=0.49018819964701815,x=5.0097821956277615 color=yellow,shape=square,flag=1,i=17491,u=0.2625002521574934,v=0.5268331696227,w=0.5153392727463008,x=6.127926832835439 color=green,shape=circle,flag=0,i=17492,u=0.9183950271268285,v=0.28068213253221996,w=0.4982074271406311,x=3.4863064339772607 color=red,shape=circle,flag=0,i=17496,u=0.5137285852430064,v=0.6121108763932952,w=0.5221909201857186,x=3.9867497508876255 color=red,shape=circle,flag=0,i=17498,u=0.23132835434718124,v=0.16657327624206708,w=0.5240162454329246,x=6.211143736207306 color=red,shape=triangle,flag=1,i=17499,u=0.3311507660196149,v=0.3072911451592233,w=0.4930352684774543,x=2.744361824185837 color=blue,shape=square,flag=0,i=17507,u=0.689998439847817,v=0.17086757912137107,w=0.5314746114316544,x=4.226377913206856 color=red,shape=triangle,flag=0,i=17514,u=0.3122803867641395,v=0.005530005742226951,w=0.4888479500186243,x=4.466384245256837 color=red,shape=square,flag=0,i=17524,u=0.18721443249478764,v=0.5816600272569691,w=0.5092791481622222,x=6.725078049147522 color=blue,shape=triangle,flag=1,i=17527,u=0.3256859367244205,v=0.7318787467561717,w=0.46723352798229956,x=4.142854655749216 color=purple,shape=circle,flag=0,i=17546,u=0.720103476288958,v=0.27665638084450617,w=0.5184743700312244,x=3.8680365751931505 color=orange,shape=triangle,flag=0,i=17550,u=0.136909765806981,v=0.7962599494612302,w=0.5759166080531287,x=4.891221168718161 color=red,shape=circle,flag=0,i=17570,u=0.8409133535371011,v=0.830377583821616,w=0.5202413542184081,x=4.004141027021977 color=red,shape=circle,flag=0,i=17575,u=0.47922843472128906,v=0.4801391717474627,w=0.5159806542454041,x=6.229308735970785 color=red,shape=circle,flag=1,i=17593,u=0.6520460550560919,v=0.7012031828228016,w=0.5215992966552255,x=7.24717038157011 color=red,shape=square,flag=0,i=17595,u=0.9628389672613668,v=0.7700936096284831,w=0.5144680508691644,x=6.402309060571096 color=red,shape=triangle,flag=0,i=17606,u=0.5222458255471095,v=0.6794674289176424,w=0.487571815612238,x=6.301010686607192 color=red,shape=triangle,flag=0,i=17624,u=0.9943305001843569,v=0.22105644256765367,w=0.4851530350422739,x=6.945469126131734 color=green,shape=circle,flag=0,i=17627,u=0.7541179444584541,v=0.1995198131608652,w=0.4981938280026895,x=4.677340201319474 color=red,shape=square,flag=0,i=17631,u=0.9304935412229189,v=0.25767245504117486,w=0.5201437186930495,x=4.347838722232848 color=green,shape=circle,flag=0,i=17635,u=0.029856606049114442,v=0.4724542934246524,w=0.49529606749929744,x=5.239153910272168 color=red,shape=circle,flag=0,i=17662,u=0.3478437693832558,v=0.43094945228989395,w=0.5195370451747886,x=3.4646229578630603 color=blue,shape=triangle,flag=0,i=17673,u=0.1890335487272855,v=0.19692879923582374,w=0.46620361615742983,x=6.47726250919671 color=red,shape=square,flag=0,i=17691,u=0.2822935000859188,v=0.2518444937152362,w=0.5116308723258176,x=4.795030252025749 color=yellow,shape=circle,flag=1,i=17694,u=0.3079842059018105,v=0.31583331216016985,w=0.5160829950088107,x=5.7287833297392465 color=yellow,shape=square,flag=1,i=17695,u=0.9312975273001926,v=0.3447736701073616,w=0.506512928694288,x=3.113794302887334 color=green,shape=square,flag=1,i=17701,u=0.28680767421845577,v=0.19731353539187446,w=0.5023836181727168,x=5.974010357613005 color=blue,shape=triangle,flag=0,i=17703,u=0.31415221485045286,v=0.10452498280803069,w=0.46651995765978715,x=6.775709626091987 color=red,shape=circle,flag=0,i=17717,u=0.18118736635866772,v=0.2732601217275086,w=0.5150048478914612,x=3.038775381219024 color=yellow,shape=circle,flag=0,i=17726,u=0.533109271437225,v=0.2409847389803199,w=0.519982259176935,x=3.7931595623721925 color=blue,shape=square,flag=1,i=17730,u=0.8347202048347632,v=0.8348590571694064,w=0.5218446532326652,x=5.157077838611827 color=red,shape=triangle,flag=0,i=17733,u=0.5385118250832934,v=0.6599222777978564,w=0.4963941634876704,x=2.450302952056379 color=purple,shape=square,flag=0,i=17752,u=0.6379818509650313,v=0.27810883944405973,w=0.5258082533342047,x=4.902172150194376 color=red,shape=triangle,flag=1,i=17772,u=0.45889509437717646,v=0.29306615608242537,w=0.4912948492098932,x=3.725714926612426 color=red,shape=square,flag=1,i=17782,u=0.4535033333279207,v=0.5060440067258897,w=0.5034413413366144,x=3.837566865811176 color=orange,shape=circle,flag=0,i=17785,u=0.3929316940775186,v=0.704627336422896,w=0.5694471343321359,x=3.4962592690274352 color=green,shape=triangle,flag=1,i=17805,u=0.15580067906449124,v=0.7557704921766489,w=0.49392287246036126,x=5.329030236501437 color=blue,shape=square,flag=1,i=17816,u=0.2567067410098277,v=0.15247060718470962,w=0.5089035564795482,x=4.789473104301443 color=green,shape=triangle,flag=0,i=17822,u=0.3944824455680097,v=0.8121198519197657,w=0.49052355499603345,x=5.330948190715866 color=blue,shape=triangle,flag=1,i=17840,u=0.5976330769507754,v=0.7102155310683201,w=0.4695164460027588,x=5.735878360382215 color=yellow,shape=triangle,flag=1,i=17843,u=0.995942149508161,v=0.4941423999900775,w=0.5129643503653288,x=4.210098298969784 color=purple,shape=square,flag=0,i=17849,u=0.7503726162226729,v=0.7028875584665251,w=0.5273210464131695,x=4.023682826869028 color=orange,shape=triangle,flag=0,i=17888,u=0.8388145593651725,v=0.36539296496454376,w=0.5689138554856443,x=4.470934379368963 color=blue,shape=square,flag=1,i=17889,u=0.15810908625937126,v=0.4977412858035154,w=0.4996616216961808,x=3.770318706188114 color=green,shape=triangle,flag=1,i=17890,u=0.12688907780923842,v=0.9015488320860884,w=0.479732262522811,x=5.56933671342642 color=red,shape=triangle,flag=0,i=17900,u=0.306096175594919,v=0.3599329931982266,w=0.4665503045245165,x=5.658701662250443 color=yellow,shape=square,flag=1,i=17902,u=0.23044008790472226,v=0.5316460023460884,w=0.5167898488269921,x=3.2337158385108036 color=purple,shape=square,flag=0,i=17904,u=0.583204232636298,v=0.03433398479572103,w=0.5192606437091687,x=5.055528221955931 color=red,shape=square,flag=0,i=17915,u=0.8375324605585642,v=0.7240175484645615,w=0.4839359618987001,x=6.6148486392977555 color=red,shape=triangle,flag=0,i=17930,u=0.16710089377926407,v=0.19217982174775416,w=0.4634849134665472,x=5.722381193570459 color=purple,shape=triangle,flag=0,i=17934,u=0.9289822235477184,v=0.5466694706477355,w=0.4888344753616643,x=4.4614783250497805 color=green,shape=triangle,flag=1,i=17957,u=0.7619211136981571,v=0.9664456797266976,w=0.48821251407230526,x=6.3435015346251555 color=purple,shape=triangle,flag=0,i=17981,u=0.1831028184524659,v=0.8897278239300359,w=0.4833455897790024,x=5.058196201171949 color=red,shape=triangle,flag=0,i=17987,u=0.982094481944249,v=0.6793314418094522,w=0.46844996778798054,x=5.890817102923555 color=yellow,shape=triangle,flag=1,i=17988,u=0.45368052648596024,v=0.4745196812368383,w=0.5139841744490372,x=4.5522715493218575 color=purple,shape=circle,flag=0,i=17999,u=0.9702000483454254,v=0.3617556458150133,w=0.5185003908844511,x=5.112799994729716 color=yellow,shape=square,flag=1,i=18004,u=0.2547168060635172,v=0.07350203292972057,w=0.5107974338948419,x=2.688217134959706 color=red,shape=square,flag=0,i=18015,u=0.560121772525682,v=0.9250063844899973,w=0.4942173949689627,x=4.601272719174409 color=red,shape=square,flag=0,i=18016,u=0.29548533607403416,v=0.28021066457808974,w=0.48962151548347776,x=5.382165331250633 color=purple,shape=circle,flag=0,i=18029,u=0.13659246925096058,v=0.06895464518149219,w=0.5176907558493679,x=4.844182939540203 color=blue,shape=circle,flag=0,i=18041,u=0.47420493830062116,v=0.4689363664079186,w=0.5009137850835026,x=6.814850597466596 color=yellow,shape=circle,flag=1,i=18045,u=0.3649574962053963,v=0.9438503252508527,w=0.524123219555697,x=6.911271124524205 color=orange,shape=square,flag=1,i=18052,u=0.8391899083128312,v=0.6276509906479505,w=0.42844836573151446,x=7.041064455951641 color=red,shape=square,flag=0,i=18055,u=0.11334223991708248,v=0.9788721421654617,w=0.4946712092420715,x=8.263906489831188 color=blue,shape=circle,flag=1,i=18058,u=0.4975448290399146,v=0.4886137766199352,w=0.5026839209760607,x=4.0557343423602 color=red,shape=square,flag=0,i=18074,u=0.9796179992230603,v=0.11925774539869971,w=0.5070233777528229,x=3.1993964769090817 color=red,shape=square,flag=1,i=18083,u=0.04208110691033329,v=0.7045783603996948,w=0.5020761436204241,x=4.960897090162895 color=green,shape=circle,flag=1,i=18090,u=0.2680421869217886,v=0.7263634531886776,w=0.4890766606974493,x=5.775746964352905 color=red,shape=triangle,flag=1,i=18093,u=0.11892109194760236,v=0.12374392414032054,w=0.46487904187630064,x=5.240047904272167 color=red,shape=square,flag=0,i=18097,u=0.7340181771722744,v=0.4150228289969201,w=0.5062101678586294,x=7.71940258167178 color=blue,shape=circle,flag=1,i=18160,u=0.09869311940857994,v=0.9879665105886851,w=0.5060441257188537,x=4.897734148492549 color=red,shape=triangle,flag=0,i=18167,u=0.6279603167184599,v=0.24328717017362333,w=0.46679460354113417,x=6.10072752791248 color=red,shape=circle,flag=0,i=18177,u=0.4194598561896208,v=0.48095042182790404,w=0.47445644374146156,x=6.125518971125518 color=red,shape=square,flag=1,i=18180,u=0.39419042509313074,v=0.4712120356676651,w=0.526520098315357,x=5.50858911126996 color=orange,shape=square,flag=1,i=18197,u=0.21398545608874076,v=0.3327438217384592,w=0.42995049046229306,x=5.013794094349802 color=green,shape=square,flag=0,i=18218,u=0.8620119499448504,v=0.7422761330543318,w=0.5010961516491418,x=5.235397592591949 color=blue,shape=square,flag=1,i=18223,u=0.40870099957765416,v=0.09603364165041095,w=0.4982421218882375,x=4.433731858645439 color=red,shape=circle,flag=0,i=18225,u=0.2758700142148337,v=0.18857808458009317,w=0.4774774289687381,x=3.6264788254500324 color=green,shape=square,flag=0,i=18229,u=0.8456889525831227,v=0.34460038104831514,w=0.5013204315660162,x=3.1549125179985116 color=red,shape=circle,flag=1,i=18237,u=0.584444842312468,v=0.6762016489942521,w=0.47332815768680336,x=6.191763407311394 color=blue,shape=triangle,flag=1,i=18249,u=0.629872805152489,v=0.738237391718675,w=0.46475547392987365,x=4.369157260590089 color=red,shape=circle,flag=1,i=18261,u=0.49549051712486447,v=0.4127856071935651,w=0.4702181248530784,x=6.496922388094785 color=red,shape=square,flag=1,i=18265,u=0.41093547627034277,v=0.4152124376647903,w=0.5208299110691808,x=4.2991460101403165 color=red,shape=triangle,flag=1,i=18269,u=0.09956924080952334,v=0.6245172273399839,w=0.4885407113769078,x=7.385039056658042 color=red,shape=square,flag=1,i=18273,u=0.7254459671463113,v=0.21021140585863018,w=0.5224808677300795,x=2.2434457473906817 color=red,shape=square,flag=1,i=18275,u=0.6216072217003132,v=0.3766395064413671,w=0.5238447903432146,x=5.157803976245525 color=blue,shape=square,flag=1,i=18282,u=0.816083747187527,v=0.37427154100481097,w=0.49701815538436694,x=6.179702497024615 color=purple,shape=triangle,flag=0,i=18314,u=0.6140602839536116,v=0.9578439146614126,w=0.4746984665016912,x=6.813225935585945 color=red,shape=circle,flag=1,i=18316,u=0.6208984059548167,v=0.636639988537876,w=0.4726808922368345,x=3.188376306239057 color=red,shape=triangle,flag=0,i=18321,u=0.22723088051723017,v=0.026149800459273287,w=0.49331198444034696,x=3.887630562796511 color=red,shape=triangle,flag=0,i=18324,u=0.8001696915749024,v=0.5731942053107962,w=0.4929859256731647,x=3.568099487200511 color=green,shape=triangle,flag=0,i=18331,u=0.9318387690602623,v=0.12665624035639111,w=0.5037004984699845,x=2.3467133447185216 color=green,shape=square,flag=0,i=18349,u=0.12456581981931436,v=0.883148960798387,w=0.49515554358393876,x=3.603252602745812 color=purple,shape=circle,flag=0,i=18372,u=0.009260966273030968,v=0.3643532551759031,w=0.50461608854499,x=3.224648113610772 color=red,shape=circle,flag=0,i=18462,u=0.3305114197962977,v=0.26215981248890485,w=0.4669089573931814,x=6.1283965136077 color=blue,shape=triangle,flag=1,i=18463,u=0.36351048587455226,v=0.15185578655505938,w=0.46882991402399815,x=5.411330819128106 color=red,shape=triangle,flag=1,i=18473,u=0.6175374892791614,v=0.5591418620627553,w=0.49924434063975814,x=4.648435388479871 color=red,shape=triangle,flag=0,i=18484,u=0.056485003653457544,v=0.5321067702850311,w=0.5097311523619275,x=4.078875360176105 color=red,shape=square,flag=0,i=18485,u=0.6598001887643938,v=0.974483546568608,w=0.5110148390733568,x=5.471820968206001 color=red,shape=circle,flag=1,i=18486,u=0.5480142845173197,v=0.5507287556020418,w=0.4648978333211994,x=4.26028250756848 color=red,shape=square,flag=0,i=18495,u=0.66815605605291,v=0.16992318398289352,w=0.5125713069060034,x=2.3461676763012065 color=blue,shape=triangle,flag=1,i=18500,u=0.2840645650597521,v=0.5915011022088547,w=0.47010132905443736,x=4.948260609046575 color=orange,shape=square,flag=1,i=18509,u=0.34681888903921965,v=0.8883863876914582,w=0.43780403571896853,x=5.1432940680861625 color=red,shape=circle,flag=1,i=18514,u=0.25980655441865086,v=0.31864635068856784,w=0.4616711880068182,x=7.627087597534827 color=green,shape=square,flag=0,i=18517,u=0.0033977158708345945,v=0.879157308513157,w=0.49089343950599373,x=5.760800836737598 color=red,shape=triangle,flag=0,i=18523,u=0.3523008482012435,v=0.233517374068138,w=0.5111283433205345,x=3.4231157107312082 color=red,shape=circle,flag=0,i=18534,u=0.08830245423640493,v=0.12628649572433515,w=0.4606771844452173,x=4.696988200169612 color=red,shape=circle,flag=0,i=18543,u=0.06153501592828736,v=0.03144237404548818,w=0.45625352560856436,x=4.0473573353997345 color=red,shape=square,flag=0,i=18549,u=0.5394842076134735,v=0.8190064518912963,w=0.5149436109295445,x=6.103166467950317 color=yellow,shape=circle,flag=0,i=18564,u=0.667516917381741,v=0.9070418145717987,w=0.5155575064369328,x=3.8724976015806 color=red,shape=square,flag=1,i=18571,u=0.18154704500099672,v=0.11586736179004842,w=0.5183959674976494,x=4.902869038747442 color=red,shape=triangle,flag=0,i=18599,u=0.6712385194632811,v=0.0491429765609408,w=0.4919172267929653,x=6.821391868320805 color=red,shape=square,flag=0,i=18608,u=0.07671380981314968,v=0.005631145462132059,w=0.5236039946598601,x=3.167977833741342 color=red,shape=circle,flag=0,i=18639,u=0.4349011581609893,v=0.38722668221800527,w=0.4731453910500843,x=5.3259745387953545 color=red,shape=square,flag=0,i=18642,u=0.42822527792117604,v=0.786366831549971,w=0.5236981498070891,x=4.273571887520834 color=green,shape=square,flag=1,i=18659,u=0.8796869175865145,v=0.5504382156610115,w=0.4879632964615258,x=6.2997048873170165 color=red,shape=square,flag=0,i=18671,u=0.5630589411992264,v=0.37113655990793104,w=0.5204276279839974,x=3.6923615555266047 color=red,shape=square,flag=0,i=18687,u=0.5187113003313534,v=0.09067843914892038,w=0.5149110152970373,x=2.1679929491871284 color=red,shape=circle,flag=0,i=18691,u=0.14778317982910216,v=0.12571868464232716,w=0.48295829188184886,x=3.184000350864465 color=red,shape=triangle,flag=0,i=18708,u=0.7926142706690833,v=0.04786436843223896,w=0.49907456005389134,x=3.926938270609296 color=yellow,shape=triangle,flag=1,i=18727,u=0.4994430856875165,v=0.47935163963486827,w=0.4701160447993267,x=3.73262399412859 color=red,shape=circle,flag=0,i=18735,u=0.3948046303024072,v=0.4121108483875691,w=0.48971017045156034,x=4.499219827848638 color=red,shape=square,flag=0,i=18751,u=0.743644262127313,v=0.5157150655679379,w=0.5105152855289237,x=5.8322889389225905 color=red,shape=triangle,flag=0,i=18768,u=0.8244386918780712,v=0.49522422520935383,w=0.49609792898559774,x=5.792777257826361 color=purple,shape=triangle,flag=0,i=18780,u=0.1535425894580954,v=0.7120781510661807,w=0.47537974954703227,x=5.058900923916902 color=blue,shape=triangle,flag=0,i=18791,u=0.1973218618775322,v=0.9530492388588838,w=0.4617885531200715,x=6.670471818319808 color=red,shape=triangle,flag=0,i=18792,u=0.3576892089843021,v=0.882598171590402,w=0.4938401992690651,x=5.229466628010987 color=green,shape=square,flag=0,i=18796,u=0.7556398308990591,v=0.5980658160073816,w=0.4878320283482015,x=4.408317424008135 color=red,shape=triangle,flag=0,i=18836,u=0.02300133184088371,v=0.9779512673634337,w=0.48908924221353145,x=5.735290464494384 color=red,shape=triangle,flag=0,i=18838,u=0.03124501773090571,v=0.21712108500504768,w=0.4923018317079637,x=4.76589558050777 color=green,shape=square,flag=1,i=18847,u=0.9865896628528927,v=0.31615447659848284,w=0.5003805315856048,x=7.4518575317361035 color=blue,shape=square,flag=0,i=18892,u=0.2801607700524624,v=0.2015854419727171,w=0.519552893958359,x=4.70876882080991 color=purple,shape=circle,flag=0,i=18911,u=0.048399221894146804,v=0.6988242222804614,w=0.5171622814987747,x=7.33308130902666 color=red,shape=triangle,flag=0,i=18921,u=0.43620780117479785,v=0.6889601156499006,w=0.4901148033925918,x=4.915015507868817 color=green,shape=square,flag=0,i=18930,u=0.4028252886018707,v=0.9831099436527031,w=0.5034201780895502,x=4.894101913088159 color=red,shape=circle,flag=0,i=18941,u=0.2736470334758355,v=0.18835044103727158,w=0.4703404544651524,x=6.22269238955904 color=purple,shape=square,flag=0,i=18952,u=0.35498488247695426,v=0.9704453962233955,w=0.529651442786798,x=5.19716863007178 color=red,shape=circle,flag=1,i=18958,u=0.9537936185938203,v=1.0342052123918053,w=0.476701579621606,x=1.9447915179969326 color=green,shape=triangle,flag=0,i=18975,u=0.5897157268912211,v=0.6555441536188846,w=0.4945292833937358,x=3.9974627238892513 color=red,shape=triangle,flag=0,i=18991,u=0.18013409590928642,v=0.35440753547028114,w=0.48921102464987837,x=5.547026580052797 color=red,shape=triangle,flag=0,i=18993,u=0.728291402836162,v=0.23505179222597683,w=0.48709280398974536,x=4.177604570058875 color=red,shape=triangle,flag=0,i=18994,u=0.5917663116001257,v=0.7767932899747644,w=0.4851895455582016,x=3.6331749639659674 color=red,shape=circle,flag=0,i=18999,u=0.5955398962459819,v=0.5197973676207062,w=0.481989372463763,x=6.94120922844196 color=red,shape=circle,flag=0,i=19023,u=0.011705052863797638,v=0.034648019856913057,w=0.48299438964552216,x=3.816372017573336 color=blue,shape=square,flag=0,i=19025,u=0.9273009557486024,v=0.7357381633429845,w=0.5090561431721482,x=3.157013657905273 color=green,shape=square,flag=0,i=19028,u=0.05469452707709799,v=0.8848738136208745,w=0.4956930824740668,x=4.281473117133831 color=red,shape=square,flag=0,i=19031,u=0.8806668860792601,v=0.9786873175414998,w=0.49459196646275816,x=6.851446664830967 color=orange,shape=circle,flag=1,i=19035,u=0.34593136590741314,v=0.4416897756734529,w=0.5676174161460276,x=5.648625579356253 color=red,shape=square,flag=1,i=19062,u=0.8526501716488706,v=0.9333564387668003,w=0.4910510751371172,x=5.265449401015254 color=purple,shape=circle,flag=1,i=19063,u=0.6139351366699671,v=0.39126953778481033,w=0.5090256721139687,x=4.814737897496203 color=green,shape=circle,flag=0,i=19072,u=0.4433647201287031,v=0.4599288679870087,w=0.4848493488276461,x=5.371246411741548 color=red,shape=square,flag=0,i=19083,u=0.1708011381668736,v=0.43438600758340673,w=0.5068254458597846,x=4.811428825813501 color=red,shape=square,flag=0,i=19106,u=0.8831682858199408,v=0.5694865660439371,w=0.5076397692908704,x=5.145984347006527 color=purple,shape=square,flag=0,i=19108,u=0.00839820281799708,v=0.7807552004223764,w=0.5059091637919266,x=3.868835632838128 color=green,shape=square,flag=0,i=19131,u=0.41118817230705196,v=0.13968436485360425,w=0.5019171964746337,x=6.949639384553794 color=red,shape=circle,flag=0,i=19147,u=0.18134716282828423,v=0.2043377400812217,w=0.47094608313511016,x=4.935272573054632 color=red,shape=square,flag=1,i=19151,u=0.588740940721605,v=0.19724473220844008,w=0.5206415478067581,x=6.755422715821688 color=red,shape=square,flag=0,i=19166,u=0.3278533058062141,v=0.8442042976660211,w=0.5203294879159722,x=4.423239178490451 color=blue,shape=square,flag=1,i=19167,u=0.7720445432294831,v=0.5757219760273705,w=0.5164587104397059,x=4.510045768232531 color=blue,shape=square,flag=1,i=19183,u=0.3541271073840022,v=0.6250820737479565,w=0.5169640456632087,x=4.592221832856935 color=green,shape=triangle,flag=1,i=19198,u=0.28654536845388345,v=0.7104747674451096,w=0.4886288289397324,x=3.721143712861064 color=purple,shape=triangle,flag=1,i=19203,u=0.3483325900059425,v=0.7618531249056861,w=0.49908236650320126,x=6.563431799795914 color=purple,shape=square,flag=0,i=19211,u=0.984191051199003,v=0.49188353971303544,w=0.5146144529518357,x=5.464333616758623 color=red,shape=triangle,flag=0,i=19235,u=0.003432401932833451,v=0.7894909501931063,w=0.4983287820955183,x=5.589711613507426 color=yellow,shape=triangle,flag=1,i=19238,u=0.9879987050373236,v=0.5785879845775445,w=0.47782380647072115,x=3.5301921169928234 color=blue,shape=square,flag=1,i=19242,u=0.4892906672106717,v=0.42325215900322055,w=0.5296326413109367,x=5.4089410793474535 color=yellow,shape=triangle,flag=1,i=19245,u=0.335356080874326,v=0.9654767676653999,w=0.4786758345187025,x=4.032056425000531 color=green,shape=triangle,flag=0,i=19257,u=0.08317960388420353,v=0.05527082012393969,w=0.4923720502222301,x=6.2456910159782355 color=green,shape=circle,flag=0,i=19267,u=0.8565282360250388,v=0.6270400771471198,w=0.4887926213135214,x=4.050287884169138 color=blue,shape=triangle,flag=1,i=19280,u=0.8247156059775866,v=0.9101045837615745,w=0.4645567791552847,x=2.2221697922297143 color=red,shape=square,flag=0,i=19297,u=0.6338138291092693,v=0.8269611673177908,w=0.5034903167512426,x=3.694879197813178 color=blue,shape=triangle,flag=0,i=19302,u=0.30339376605967683,v=0.2998294051248267,w=0.4729658293817687,x=5.079484364320856 color=yellow,shape=square,flag=1,i=19310,u=0.7261012927606054,v=0.009325721191105418,w=0.4790924569942006,x=6.217337023365913 color=red,shape=circle,flag=0,i=19326,u=0.9314730806510404,v=0.9954436659708578,w=0.4514717429006954,x=5.924753025553248 color=purple,shape=square,flag=0,i=19346,u=0.39458413499368916,v=0.2813823844019291,w=0.5081072908947802,x=4.263514443880108 color=green,shape=triangle,flag=1,i=19350,u=0.9065762690383302,v=0.9046720653596545,w=0.4921731941018724,x=4.319254894961902 color=red,shape=triangle,flag=0,i=19357,u=0.6370843106967571,v=0.143488001432015,w=0.5095595648078439,x=5.65057539276244 color=red,shape=circle,flag=0,i=19365,u=0.07968289816483531,v=0.008009844239713182,w=0.4575932686813045,x=5.708154737235744 color=purple,shape=circle,flag=0,i=19371,u=0.42275087939323375,v=0.0016129021924315978,w=0.4961030391550122,x=5.522779801656512 color=blue,shape=square,flag=1,i=19375,u=0.16557438657849877,v=0.7330541668699042,w=0.5208898178469412,x=4.728139565901707 color=purple,shape=circle,flag=1,i=19379,u=0.3042560548629004,v=0.8613059771178814,w=0.49816799257040795,x=2.6996383607092898 color=blue,shape=circle,flag=1,i=19381,u=0.6271845487497092,v=0.16756375559229952,w=0.5059461125942329,x=5.774558641274722 color=purple,shape=square,flag=0,i=19382,u=0.621824733028831,v=0.7028058513640072,w=0.5044537891716677,x=5.994943407245322 color=red,shape=square,flag=0,i=19387,u=0.5715553753973288,v=0.5950775409511314,w=0.4742473754259497,x=3.7499901142331016 color=red,shape=square,flag=0,i=19417,u=0.39758435112802737,v=0.025681303523298338,w=0.4750521686273393,x=3.884814291977623 color=red,shape=circle,flag=1,i=19424,u=0.6094371866342598,v=0.6145633286773059,w=0.4700595386519573,x=2.470061601378447 color=red,shape=circle,flag=0,i=19430,u=0.022959149801579093,v=-0.06251659875376299,w=0.4679988134609304,x=6.467396176640464 color=red,shape=triangle,flag=1,i=19435,u=0.8507450389967466,v=0.12738594042762352,w=0.49818119145661777,x=6.102639203395218 color=yellow,shape=square,flag=1,i=19441,u=0.5870462085229411,v=0.7679267898979908,w=0.49299997859219014,x=4.611673042683459 color=red,shape=triangle,flag=0,i=19453,u=0.6451743760348422,v=0.3649268467247472,w=0.4971641461407697,x=6.107101597117463 color=yellow,shape=triangle,flag=1,i=19466,u=0.7986984420890121,v=0.4235654250272455,w=0.4685687516156792,x=5.979655057107756 color=red,shape=circle,flag=1,i=19474,u=0.1664205758157251,v=0.24361276966915363,w=0.4629361758519966,x=5.44323737594651 color=red,shape=square,flag=0,i=19480,u=0.2986642870745606,v=0.5342538236383578,w=0.47859429653087393,x=5.779630799319148 color=purple,shape=square,flag=0,i=19484,u=0.1603995926908216,v=0.6712148279648789,w=0.5039088972783483,x=6.121671282246858 color=blue,shape=square,flag=1,i=19506,u=0.35754702843715513,v=0.8469615137616913,w=0.5215485408315904,x=3.9908193019915523 color=red,shape=circle,flag=0,i=19510,u=0.4089460209188528,v=0.343381695172298,w=0.4519349552897742,x=3.5033837674364907 color=red,shape=triangle,flag=0,i=19513,u=0.028198426192367676,v=0.29538143970482256,w=0.4827496828740188,x=4.3784689050709575 color=purple,shape=triangle,flag=0,i=19514,u=0.4190493676205109,v=0.326075179366235,w=0.48796103238995014,x=4.699772395270649 color=red,shape=circle,flag=1,i=19540,u=0.09469437870012098,v=0.0171392211923395,w=0.45168513448312947,x=6.500318556207104 color=red,shape=square,flag=0,i=19541,u=0.2199472493683048,v=0.4356283283786907,w=0.47451616440194,x=2.420696947665323 color=red,shape=circle,flag=0,i=19546,u=0.17224817632060863,v=0.1923013692117715,w=0.4493551460602599,x=4.371702737184482 color=blue,shape=circle,flag=1,i=19563,u=0.06973620768755595,v=0.6773734434770574,w=0.4956380924266746,x=3.411108402527207 color=yellow,shape=square,flag=1,i=19569,u=0.08616466838911396,v=0.44959469573067934,w=0.49165226266629214,x=4.952423114928295 color=yellow,shape=triangle,flag=1,i=19598,u=0.2880463736512431,v=0.06793370921106034,w=0.4857346424503494,x=6.202145331491682 color=blue,shape=square,flag=0,i=19605,u=0.4666047558178156,v=0.4477869078884964,w=0.5270831626273705,x=6.483150967928366 color=blue,shape=triangle,flag=1,i=19606,u=0.03958327071148926,v=0.9808591624675925,w=0.47999008331371423,x=3.387750609056868 color=yellow,shape=circle,flag=1,i=19612,u=0.5839466437934966,v=0.047586056124955256,w=0.5043674860910469,x=4.2023422725991795 color=red,shape=square,flag=1,i=19637,u=0.877050431737364,v=0.1412234784195453,w=0.4779698609655773,x=5.905344989578135 color=purple,shape=circle,flag=0,i=19661,u=0.8323681578618354,v=0.4009772358073388,w=0.4991254172970417,x=5.796627333155844 color=blue,shape=square,flag=1,i=19662,u=0.6218412534152329,v=0.13203849243261367,w=0.5276977657598075,x=5.218695664804933 color=red,shape=triangle,flag=0,i=19668,u=0.9296449754835698,v=0.4712968643093124,w=0.4934614086654848,x=6.577965288044673 color=purple,shape=square,flag=0,i=19677,u=0.7718737247780234,v=0.6001298920920297,w=0.5164177851721635,x=3.7329129523608358 color=red,shape=square,flag=1,i=19699,u=0.6812370130538277,v=0.6870565007761864,w=0.47103173409617605,x=4.228692335973787 color=green,shape=triangle,flag=0,i=19711,u=0.8107162511523891,v=0.6425720040589783,w=0.5039050475960446,x=4.895770349593239 color=yellow,shape=circle,flag=1,i=19733,u=0.6612331744905893,v=0.9499200560279573,w=0.506581756209345,x=4.7403014772193535 color=red,shape=triangle,flag=0,i=19734,u=0.44478151894654405,v=0.09070065226028967,w=0.48394783700353383,x=3.51242623422983 color=yellow,shape=triangle,flag=1,i=19740,u=0.381032115426555,v=0.8837892566613732,w=0.48352160536753136,x=5.348641475307055 color=yellow,shape=triangle,flag=1,i=19773,u=0.5027254051474224,v=0.5101930780600366,w=0.4830942953848948,x=2.7025322855637834 color=orange,shape=square,flag=0,i=19778,u=0.6936910256320047,v=0.9498158297363946,w=0.4520906884958285,x=4.882801273625204 color=green,shape=triangle,flag=0,i=19797,u=0.49853512058350125,v=0.5764915981286588,w=0.4956618875197631,x=4.774964274179864 color=red,shape=triangle,flag=0,i=19806,u=0.5890841093340901,v=0.5883775815373468,w=0.49549226440127525,x=4.290868266838365 color=red,shape=triangle,flag=1,i=19824,u=0.6317764449010911,v=0.6951353956260371,w=0.497588343917601,x=4.41150617864654 color=red,shape=triangle,flag=0,i=19832,u=0.5472139804234594,v=0.09785001228873513,w=0.4978184952224072,x=6.962437924723382 color=red,shape=circle,flag=0,i=19845,u=0.9562482183741495,v=0.8826967413678363,w=0.44139282286999065,x=4.103237354674017 color=blue,shape=triangle,flag=1,i=19852,u=0.32906942834967834,v=0.04441043167758585,w=0.4786505667651544,x=6.941310794746223 color=purple,shape=triangle,flag=0,i=19858,u=0.5423250339824264,v=0.9782254943207901,w=0.48591740051744153,x=5.399628344491177 color=yellow,shape=square,flag=1,i=19859,u=0.13315820362144715,v=0.7929718422014979,w=0.49228322358169435,x=2.9066618802178397 color=red,shape=square,flag=1,i=19870,u=0.28186709058447346,v=0.1567437708072471,w=0.4792286911651259,x=4.527431961920657 color=red,shape=circle,flag=0,i=19886,u=0.21543583798778732,v=0.208894682890885,w=0.4486256468076395,x=6.5088292960379635 color=yellow,shape=square,flag=1,i=19910,u=0.275008475479687,v=0.25732616191118773,w=0.4914647098759426,x=6.391657589122708 color=yellow,shape=square,flag=0,i=19922,u=0.8691275228425905,v=0.8283907399963428,w=0.4905853123294009,x=5.141910048153816 color=yellow,shape=square,flag=1,i=19923,u=0.6280486753499899,v=0.06997909890753551,w=0.49427503713290105,x=4.3310207524761255 color=red,shape=square,flag=0,i=19929,u=0.8581791249533122,v=0.33032276800139293,w=0.4775603229971717,x=6.872740262005638 color=orange,shape=square,flag=0,i=19931,u=0.5305484260888517,v=0.6395420890953419,w=0.4470812238449707,x=5.505592363895363 color=purple,shape=circle,flag=0,i=19940,u=0.3910552042054093,v=0.5316953267797838,w=0.5045863608583576,x=6.630198164770575 color=green,shape=triangle,flag=0,i=19941,u=0.2014741394799323,v=0.45356818204603155,w=0.4999580909964705,x=4.688201746429585 color=blue,shape=square,flag=0,i=19955,u=0.9999687954968421,v=0.6608174493208964,w=0.5534745633575466,x=5.623642597337606 color=green,shape=square,flag=0,i=19962,u=0.8056375568030112,v=0.02650362957483232,w=0.4972983771865608,x=6.4266425890062715 color=red,shape=circle,flag=0,i=19965,u=0.6587117875549231,v=0.6323271493539752,w=0.4526179140575325,x=4.795868835633861 color=purple,shape=square,flag=0,i=19980,u=0.3275622109317212,v=0.156398657216808,w=0.5134007901032216,x=4.214075516934493 color=green,shape=square,flag=0,i=19985,u=0.10124980097061853,v=0.5883466718981434,w=0.48844941490238075,x=4.254112703841412 color=red,shape=triangle,flag=0,i=19988,u=0.7764431209908271,v=0.6331391323799893,w=0.5097407847318928,x=4.585809575946289 color=yellow,shape=triangle,flag=1,i=19991,u=0.35237549969116677,v=0.6440342810487489,w=0.48229902555079085,x=3.746025110505693 color=yellow,shape=square,flag=1,i=19995,u=0.21144402683191654,v=0.35525920497339936,w=0.48980554175422575,x=5.563832041914108 color=green,shape=square,flag=0,i=20006,u=0.9170264825333977,v=0.028239567818985956,w=0.4890411948355596,x=5.296458705657451 color=red,shape=circle,flag=0,i=20017,u=0.3589061196040345,v=0.45499975082874927,w=0.46572530893566877,x=4.099318263473547 color=red,shape=triangle,flag=0,i=20039,u=0.4834020950932344,v=0.8011928485397729,w=0.5036331486472593,x=5.916124955844004 color=red,shape=circle,flag=0,i=20046,u=0.12020360205387759,v=0.11833445343070319,w=0.4723066864399126,x=4.91086132677583 color=green,shape=square,flag=1,i=20064,u=0.7346402145701634,v=0.4870519246020618,w=0.4952248232210816,x=1.747089427849134 color=red,shape=triangle,flag=1,i=20068,u=0.1771154216423373,v=0.9091111630027483,w=0.4969392822804526,x=5.508174477049551 color=yellow,shape=square,flag=1,i=20071,u=0.1389484373935782,v=0.7954206786998465,w=0.49321513119577404,x=4.7109717054894835 color=red,shape=square,flag=0,i=20080,u=0.4243748777326032,v=0.39735323780812826,w=0.47105027874477834,x=5.421171183462579 color=red,shape=square,flag=0,i=20089,u=0.871843108864359,v=0.9336326551291133,w=0.4688954139345142,x=4.323140257845679 color=red,shape=square,flag=0,i=20090,u=0.8908823925552248,v=0.20630191479378013,w=0.46716683277348237,x=2.472717016068336 color=blue,shape=triangle,flag=0,i=20103,u=0.09100832624872379,v=0.04582601015673837,w=0.4823149266245357,x=5.339490039200462 color=yellow,shape=triangle,flag=1,i=20108,u=0.7905855937210129,v=0.9593153532834586,w=0.48989896592471777,x=6.430462515321839 color=red,shape=circle,flag=1,i=20111,u=0.057190524412237265,v=0.04385477044455901,w=0.4733817342765147,x=5.272474119505085 color=red,shape=triangle,flag=1,i=20116,u=0.4354784562297822,v=0.21617331266801965,w=0.5009794314928293,x=5.877991685641125 color=red,shape=triangle,flag=0,i=20120,u=0.7244838424717188,v=0.5309136275637878,w=0.4971465048246595,x=5.0658954358483195 color=green,shape=square,flag=0,i=20121,u=0.24340675122958422,v=0.8255111608008159,w=0.4979733834816281,x=5.634563971385334 color=yellow,shape=triangle,flag=1,i=20125,u=0.7453012545768237,v=0.7624020233421406,w=0.49334280447518736,x=5.700703641804989 color=purple,shape=circle,flag=0,i=20137,u=0.6781333286747125,v=0.022576925798226788,w=0.5199250228369507,x=4.437825158510398 color=blue,shape=square,flag=1,i=20145,u=0.7403880066348806,v=0.47262547174311853,w=0.5488913776965691,x=5.45906730646779 color=red,shape=square,flag=0,i=20156,u=0.2541418088910403,v=0.7626275950615311,w=0.4767066609617063,x=3.1651518562895546 color=blue,shape=square,flag=1,i=20157,u=0.9099244238077343,v=0.049171025656529754,w=0.5552170355377419,x=4.066033266203033 color=red,shape=square,flag=1,i=20161,u=0.7276333778610681,v=0.3152306132283508,w=0.47304403629197467,x=5.598684925958004 color=blue,shape=circle,flag=1,i=20182,u=0.7973611715302398,v=0.4681934591008653,w=0.5079136909749219,x=5.87364653371787 color=yellow,shape=square,flag=0,i=20193,u=0.04418462529121048,v=0.5398725663459474,w=0.48315324426508943,x=4.953864327567819 color=yellow,shape=square,flag=1,i=20198,u=0.4852966412860893,v=0.2097734853774884,w=0.48406903219773795,x=6.467237069367475 color=red,shape=square,flag=0,i=20211,u=0.20767535187676434,v=0.35395988784192844,w=0.47318077532588954,x=4.585833153659872 color=yellow,shape=triangle,flag=1,i=20218,u=0.7555638475616732,v=0.7581416343141402,w=0.49492005364328967,x=6.220711417672656 color=red,shape=square,flag=0,i=20219,u=0.4402676003946484,v=0.7362714412432786,w=0.4751764719319071,x=4.2089843660157475 color=yellow,shape=triangle,flag=1,i=20220,u=0.09949250682197808,v=0.7389268962441031,w=0.4916110158827713,x=2.5826792294446195 color=red,shape=square,flag=1,i=20224,u=0.6655962518773444,v=0.05151794693857803,w=0.47410281384694064,x=4.690864719006703 color=green,shape=circle,flag=0,i=20237,u=0.44838883136037433,v=0.6293054211549913,w=0.487621263769257,x=5.399285734027991 color=blue,shape=circle,flag=1,i=20238,u=0.4457729491374911,v=0.7610803102136118,w=0.5093249361685223,x=7.175902031078318 color=red,shape=square,flag=0,i=20244,u=0.18660890611323167,v=0.14660774667450938,w=0.477514688453468,x=4.376145717723959 color=yellow,shape=square,flag=1,i=20247,u=0.902168245673722,v=0.6493342199208197,w=0.4825855039763055,x=5.894437524689646 color=red,shape=triangle,flag=0,i=20253,u=0.04607346520696931,v=0.3365049865711909,w=0.5025770626581808,x=3.6815623444894316 color=red,shape=square,flag=0,i=20255,u=0.09570767414574732,v=0.3220551102104332,w=0.47324770650740083,x=4.8837923540776815 color=green,shape=square,flag=0,i=20256,u=0.3319426191497634,v=0.09054174434307893,w=0.5017534449904048,x=4.105641735089985 color=yellow,shape=circle,flag=1,i=20271,u=0.556578973857646,v=0.7071490161280659,w=0.5069793212611403,x=5.469948849755434 color=red,shape=circle,flag=0,i=20273,u=0.3039942254302943,v=0.3122089338916067,w=0.45605982272399836,x=5.563968295206995 color=red,shape=circle,flag=1,i=20278,u=0.28175132252497204,v=0.2674419753028022,w=0.4596186856645792,x=4.5898142779889985 color=purple,shape=square,flag=1,i=20290,u=0.19157058456027476,v=0.6428233519997256,w=0.5118420832713926,x=4.558290023769178 color=yellow,shape=triangle,flag=1,i=20291,u=0.6243290631913431,v=0.2390007358170263,w=0.4845860681940951,x=5.94965287880476 color=blue,shape=triangle,flag=0,i=20309,u=0.4603742143224958,v=0.6019134039230633,w=0.4723535978831347,x=3.6303899559080044 color=red,shape=square,flag=1,i=20321,u=0.8558078327832467,v=0.733557172357148,w=0.46924133964859593,x=3.0087522559296573 color=purple,shape=triangle,flag=1,i=20330,u=0.665769914796747,v=0.4873343938638852,w=0.5001326204800022,x=4.304108536780179 color=blue,shape=triangle,flag=1,i=20331,u=0.4530933215615147,v=0.7638118580254276,w=0.475649898135404,x=3.122665111313174 color=red,shape=triangle,flag=0,i=20344,u=0.8866858675128158,v=0.25359589218607814,w=0.5047222629462997,x=3.8760010833945824 color=purple,shape=triangle,flag=0,i=20348,u=0.19087911365731003,v=0.33842493480764047,w=0.5015298350795904,x=4.1610259743794025 color=blue,shape=triangle,flag=1,i=20356,u=0.3455948925423973,v=0.3683925659620565,w=0.47949830635276314,x=3.7715676445970114 color=green,shape=square,flag=0,i=20361,u=0.9885483211654953,v=0.19005693630463472,w=0.5012041504764215,x=2.7176909504997457 color=red,shape=square,flag=1,i=20413,u=0.16345566725498084,v=0.453627223426604,w=0.4792841717503976,x=5.434294337938392 color=yellow,shape=circle,flag=0,i=20439,u=0.46086198545959567,v=0.03561387041350628,w=0.49675056150316477,x=4.620993840086939 color=purple,shape=triangle,flag=0,i=20447,u=0.03238344335240806,v=0.5845934287185213,w=0.5035944492302823,x=4.109788851654614 color=red,shape=circle,flag=0,i=20458,u=0.20353624365551426,v=0.12439513739605154,w=0.4900679585417017,x=3.0281987803634673 color=purple,shape=circle,flag=0,i=20467,u=0.03015863675571462,v=0.5640779534472669,w=0.5198566608956013,x=3.152395238235569 color=green,shape=triangle,flag=0,i=20468,u=0.4768331186199606,v=0.7845590135745738,w=0.5001349858115531,x=4.7617308313940105 color=purple,shape=circle,flag=0,i=20487,u=0.41352057462161684,v=0.38036640836017444,w=0.523766189116093,x=4.8588539898092336 color=blue,shape=triangle,flag=1,i=20510,u=0.578190438769998,v=0.06207467487639928,w=0.46279483083258044,x=4.942007404520102 color=blue,shape=circle,flag=0,i=20521,u=0.4476477995189405,v=0.968305463597405,w=0.503931115171428,x=6.032347196283561 color=yellow,shape=square,flag=1,i=20528,u=0.3980382303167961,v=0.16779058275347614,w=0.47807863399685996,x=5.166838739738081 color=blue,shape=triangle,flag=0,i=20531,u=0.8185443882286287,v=0.4462946247223919,w=0.4583570542205554,x=5.121904497527895 color=red,shape=square,flag=0,i=20541,u=0.5508470367861992,v=0.7352628408099238,w=0.49624081648185164,x=2.408961669932586 color=yellow,shape=square,flag=1,i=20550,u=0.2949436952313761,v=0.25532287411059296,w=0.4749485239082093,x=5.7920768347332485 color=purple,shape=circle,flag=0,i=20552,u=0.6673756437469976,v=0.11646967361570182,w=0.525127478437238,x=3.8041884589075416 color=yellow,shape=square,flag=1,i=20560,u=0.9957663880933032,v=0.04075382445641618,w=0.4790131468409233,x=4.430449135887328 color=purple,shape=circle,flag=0,i=20563,u=0.8859296580833327,v=0.44152398773944956,w=0.5243191840638861,x=6.284778254039376 color=blue,shape=triangle,flag=1,i=20583,u=0.22343138765063875,v=0.7780592920251577,w=0.4671401797273996,x=6.404036002125561 color=red,shape=triangle,flag=1,i=20593,u=0.9862681100782191,v=0.3625194217225697,w=0.4819975603569129,x=5.716266601790803 color=red,shape=triangle,flag=0,i=20606,u=0.6509941267118564,v=0.8742107014890693,w=0.4841373642916209,x=6.154297063374156 color=purple,shape=square,flag=0,i=20612,u=0.7844987016978546,v=0.1260516658115648,w=0.48882143192611405,x=4.923141649550177 color=red,shape=square,flag=0,i=20613,u=0.2535448471843621,v=0.612824998756782,w=0.483281904203936,x=3.9650454100684853 color=yellow,shape=square,flag=1,i=20622,u=0.4482405043218112,v=0.7208143188766652,w=0.4841411980701381,x=4.7184021718129605 color=green,shape=square,flag=1,i=20623,u=0.32864238666518697,v=0.7422489567960413,w=0.4981631672571617,x=5.560039366900285 color=blue,shape=circle,flag=0,i=20628,u=0.7931085242680358,v=0.5378664558396107,w=0.511333712944964,x=6.244418683732882 color=green,shape=square,flag=0,i=20641,u=0.5024747591273615,v=0.30606775994656055,w=0.5023971107310841,x=5.971874361422845 color=purple,shape=square,flag=0,i=20644,u=0.981607525837907,v=0.024517217534665736,w=0.48414038851979124,x=7.033471206867201 color=yellow,shape=triangle,flag=1,i=20676,u=0.13078792556010643,v=0.3718249466630916,w=0.49257167615624425,x=5.420530758862185 color=red,shape=circle,flag=0,i=20684,u=0.15087803153054025,v=0.13036837815332303,w=0.510640284057038,x=5.755186065704337 color=blue,shape=circle,flag=0,i=20702,u=0.19072545825993015,v=0.5775810261036246,w=0.5086130740532994,x=4.494661457920724 color=red,shape=circle,flag=1,i=20704,u=0.7013857648850876,v=0.6854606781088107,w=0.5124339097928752,x=4.5275892912353575 color=yellow,shape=circle,flag=1,i=20740,u=0.28926084540176855,v=0.5255580433483552,w=0.500244785729827,x=4.864227836455215 color=blue,shape=square,flag=0,i=20760,u=0.7364068542751167,v=0.8425750569780169,w=0.5202998470076121,x=4.568785316705065 color=red,shape=triangle,flag=1,i=20761,u=0.015134158300051381,v=0.005141441604602726,w=0.4799910966279857,x=5.608059419471317 color=green,shape=triangle,flag=0,i=20762,u=0.20232363430402966,v=0.9747976412788846,w=0.4869994008254588,x=5.144694606405472 color=yellow,shape=circle,flag=1,i=20763,u=0.4200556032401409,v=0.0419122729174537,w=0.5029180228830644,x=6.39235931369511 color=red,shape=triangle,flag=0,i=20768,u=0.604285406782027,v=0.8825898557122033,w=0.48361116770747503,x=4.101414735462282 color=blue,shape=triangle,flag=0,i=20774,u=0.9150206510077719,v=0.7381481026558343,w=0.4717636808134761,x=3.8989520003469136 color=red,shape=circle,flag=1,i=20776,u=0.9443781585303996,v=0.9363124317171395,w=0.5015458895612563,x=7.265805545896871 color=red,shape=square,flag=0,i=20784,u=0.051312207547014155,v=0.03676194178498071,w=0.5015784226702108,x=4.73663565998667 color=red,shape=circle,flag=0,i=20802,u=0.7005794532730988,v=0.6199760079942978,w=0.5052547171308521,x=6.929958368932134 color=red,shape=square,flag=0,i=20803,u=0.16896240695737885,v=0.01402479456565009,w=0.5039303879865271,x=7.151823173558 color=red,shape=triangle,flag=1,i=20805,u=0.5520575425730366,v=0.3132680497082878,w=0.4877565508517673,x=6.454420045772124 color=green,shape=circle,flag=0,i=20814,u=0.7520206509086963,v=0.6553055268846822,w=0.49171094823350175,x=6.2568836785220725 color=yellow,shape=square,flag=1,i=20833,u=0.3781062484210904,v=0.43552151042424603,w=0.48989793005176374,x=4.36450968555036 color=blue,shape=triangle,flag=0,i=20861,u=0.1938547909208802,v=0.1602762573569535,w=0.4845845860150253,x=6.123530988085708 color=green,shape=triangle,flag=0,i=20865,u=0.70746208666508,v=0.452479814138137,w=0.4811190367094136,x=4.654970168609935 color=red,shape=triangle,flag=0,i=20870,u=0.7837690677100517,v=0.39190552606063767,w=0.4823449183268131,x=4.245377289823519 color=yellow,shape=triangle,flag=1,i=20871,u=0.6595784940624211,v=0.08922864572034839,w=0.48811468372401096,x=4.87625037051284 color=red,shape=triangle,flag=0,i=20874,u=0.4670648113957009,v=0.39507018052422593,w=0.48414830298406314,x=5.643536358223112 color=red,shape=square,flag=0,i=20886,u=0.4588266866733186,v=0.30875703765159535,w=0.5117661414697479,x=3.7482905230326016 color=red,shape=square,flag=0,i=20908,u=0.5771726400821975,v=0.3075124926254057,w=0.5076228127773007,x=3.782374903997308 color=orange,shape=square,flag=0,i=20910,u=0.7877058307527456,v=0.2795287701194453,w=0.4639793508358662,x=3.6093105112053663 color=purple,shape=square,flag=0,i=20917,u=0.42187001720453066,v=0.3910289983719927,w=0.4782068025346633,x=5.5548113220648005 color=blue,shape=square,flag=1,i=20931,u=0.17419377514571455,v=0.988466648959089,w=0.5025268505070141,x=3.7535385827124315 color=yellow,shape=triangle,flag=1,i=20943,u=0.43537375332290085,v=0.6660195638043036,w=0.4815614007667239,x=5.260029874205696 color=orange,shape=square,flag=0,i=20959,u=0.26974136046632957,v=0.7243473388841524,w=0.4692110316805057,x=6.224696516280145 color=red,shape=circle,flag=0,i=20986,u=0.7274543776117302,v=0.7197268976235901,w=0.5137025133174515,x=4.073324565455679 color=yellow,shape=circle,flag=1,i=21001,u=0.8244211294077465,v=0.4825660119872498,w=0.504689011946689,x=5.133370845494649 color=red,shape=square,flag=0,i=21007,u=0.18078420863249356,v=0.6627133015346834,w=0.49104305726380315,x=7.805174952380121 color=red,shape=circle,flag=1,i=21008,u=0.7934007608495821,v=0.7598129355276987,w=0.5147500935084519,x=4.125728349661089 color=red,shape=square,flag=1,i=21009,u=0.4339021451114192,v=0.8763828498445537,w=0.48716228147169227,x=4.8350904666621775 color=red,shape=square,flag=1,i=21028,u=0.9846044230863127,v=0.7269395853722801,w=0.4857940563228247,x=3.5093487141875666 color=green,shape=triangle,flag=1,i=21030,u=0.4268055269262121,v=0.25302576037986413,w=0.49682807188231104,x=6.53581977103698 color=red,shape=triangle,flag=0,i=21039,u=0.3749137681851894,v=0.5887039101559038,w=0.5056732836696755,x=7.662409352299659 color=purple,shape=circle,flag=0,i=21048,u=0.9581952715352486,v=0.306884773395668,w=0.5094180085614227,x=6.561621537914609 color=green,shape=triangle,flag=0,i=21052,u=0.4444445924121314,v=0.9392318771195354,w=0.4955882458073949,x=4.456179712760757 color=yellow,shape=triangle,flag=1,i=21061,u=0.7463326458125114,v=0.7480201022174645,w=0.4875042825188887,x=3.908828774224243 color=blue,shape=square,flag=0,i=21066,u=0.46014722298657207,v=0.431619130779731,w=0.492328739500153,x=4.104287058571806 color=red,shape=square,flag=0,i=21076,u=0.08086936595008021,v=0.8285766235634872,w=0.4922966863814496,x=5.122748040194756 color=red,shape=square,flag=0,i=21078,u=0.7329916847856454,v=0.9698052478978167,w=0.49610227404122836,x=4.264437968440457 color=red,shape=square,flag=0,i=21095,u=0.9764840347415089,v=0.838333079493244,w=0.4969026859805641,x=5.68131854704382 color=red,shape=circle,flag=1,i=21126,u=0.014682784459728038,v=0.10550928941947696,w=0.5094537998867915,x=3.3239921648188537 color=purple,shape=triangle,flag=0,i=21127,u=0.8463656790692411,v=0.4077440524757441,w=0.5101814889990439,x=3.846422687411694 color=red,shape=square,flag=1,i=21132,u=0.7904267494405386,v=0.0060406446277151415,w=0.49480729617066893,x=5.422971662343695 color=red,shape=square,flag=0,i=21143,u=0.24050115180077702,v=0.0259628938661991,w=0.4929038038863163,x=5.279677133329643 color=red,shape=triangle,flag=0,i=21195,u=0.07514479515457051,v=0.9395936976454098,w=0.4911374432049697,x=6.103449808729015 color=red,shape=square,flag=0,i=21206,u=0.8170123044579777,v=0.3363830563577408,w=0.5000333271090005,x=5.009080400063149 color=green,shape=square,flag=1,i=21249,u=0.19556305857552714,v=0.8124073545532011,w=0.49840806271380145,x=5.606232044742601 color=blue,shape=triangle,flag=0,i=21288,u=0.7128002001284794,v=0.1445677150741791,w=0.46702652105537623,x=2.880210428921245 color=red,shape=square,flag=0,i=21293,u=0.479879952170827,v=0.23045326089982876,w=0.5149073585125089,x=4.445441822586167 color=red,shape=triangle,flag=1,i=21303,u=0.21119451339365447,v=0.6857255229915151,w=0.48811329937464615,x=3.1597744122711724 color=red,shape=circle,flag=0,i=21308,u=0.21412695396620884,v=0.2606484348270333,w=0.5092201386499259,x=7.317026721123564 color=purple,shape=square,flag=1,i=21310,u=0.7941515170188567,v=0.15309972301899355,w=0.47522426187046973,x=6.455681479868335 color=red,shape=circle,flag=0,i=21321,u=0.5913985027165712,v=0.5520566533130662,w=0.5136274713116568,x=4.979826280780514 color=red,shape=square,flag=0,i=21368,u=0.6906209818509174,v=0.2240158925443917,w=0.5117884572803822,x=6.121298031342899 color=purple,shape=triangle,flag=0,i=21374,u=0.2755963693831439,v=0.8289675472773185,w=0.49742984079090047,x=6.5284168279228 color=red,shape=square,flag=0,i=21390,u=0.7689707378037345,v=0.31420038059789834,w=0.5083377777030393,x=5.560811933079074 color=yellow,shape=circle,flag=1,i=21392,u=0.05622911377538875,v=0.30755696438543234,w=0.5016869193460596,x=5.11113585022663 color=blue,shape=triangle,flag=0,i=21405,u=0.5268525396274654,v=0.795946919565389,w=0.45750842351701976,x=5.734388155634072 color=green,shape=circle,flag=1,i=21411,u=0.04734644152491252,v=0.9895216947833483,w=0.4906643160218014,x=2.22884985139162 color=red,shape=triangle,flag=0,i=21418,u=0.41134099675391245,v=0.6257906776454929,w=0.48407427561669986,x=5.876275839274189 color=green,shape=square,flag=0,i=21423,u=0.3411519068342579,v=0.021195059955016582,w=0.49259224643733857,x=3.8341401924271956 color=red,shape=square,flag=0,i=21433,u=0.15131023113786335,v=0.2545504713024562,w=0.5064130967091686,x=2.736294080363485 color=red,shape=square,flag=0,i=21434,u=0.5003936342646786,v=0.7996668685364292,w=0.5075988890732777,x=5.8404083985184 color=yellow,shape=square,flag=1,i=21435,u=0.891336051422774,v=0.8900231549747616,w=0.5040006583947538,x=5.692972336380177 color=red,shape=square,flag=0,i=21448,u=0.5307491905644712,v=0.4379213716150401,w=0.5052880282668007,x=4.637437751239553 color=purple,shape=circle,flag=0,i=21449,u=0.05531995928749733,v=0.9794913580104999,w=0.5038226428142504,x=5.892271836611318 color=red,shape=circle,flag=0,i=21456,u=0.651076059619755,v=0.6263960433464169,w=0.5351105066633999,x=4.19398868353847 color=red,shape=square,flag=0,i=21462,u=0.3369908585226723,v=0.04773072964788039,w=0.5043263604565719,x=3.7777468262293907 color=green,shape=circle,flag=0,i=21490,u=0.7898180559305741,v=0.40108776279702374,w=0.4877770307347506,x=4.0088350488961835 color=red,shape=circle,flag=0,i=21504,u=0.44144315627824804,v=0.42797485664212803,w=0.5346505822855753,x=4.524957114175236 color=red,shape=circle,flag=0,i=21508,u=0.5995849828140898,v=0.6126915239432447,w=0.535772961147537,x=3.7804088229065833 color=green,shape=triangle,flag=0,i=21532,u=0.7144051751268949,v=0.0532367368974076,w=0.5046211083736108,x=3.924063447585368 color=yellow,shape=circle,flag=1,i=21540,u=0.8623257574586204,v=0.6375173484319057,w=0.4979865832912213,x=1.7651427679128553 color=red,shape=triangle,flag=0,i=21541,u=0.5550061289868258,v=0.19311336373441867,w=0.4764961485801617,x=3.969861772108475 color=purple,shape=square,flag=1,i=21543,u=0.8691151963850937,v=0.3446216224781544,w=0.47696591302089425,x=6.789067296199428 color=yellow,shape=triangle,flag=1,i=21544,u=0.5806193156364592,v=0.2176519199388216,w=0.4817252637367531,x=5.326527398115316 color=red,shape=triangle,flag=0,i=21552,u=0.5991815025532786,v=0.287622819045407,w=0.472811859081606,x=7.852624005892998 color=red,shape=square,flag=0,i=21558,u=0.7161120538252276,v=0.200988584299714,w=0.49840475167334347,x=4.057135195723018 color=blue,shape=triangle,flag=1,i=21563,u=0.5454124967341736,v=0.26733794533150324,w=0.46029991295852674,x=6.947049509191977 color=yellow,shape=triangle,flag=1,i=21567,u=0.9088812503391556,v=0.2418400446321033,w=0.47848526048044004,x=5.321271711755872 color=red,shape=circle,flag=1,i=21578,u=0.3422846056424762,v=0.37834502470474557,w=0.5501149829841544,x=4.444937470283529 color=blue,shape=square,flag=0,i=21603,u=0.5428543052193355,v=0.46318585121897493,w=0.48955670625842057,x=4.17403137862323 color=red,shape=triangle,flag=1,i=21606,u=0.3935490596732871,v=0.9797167798716727,w=0.4715102369673862,x=6.799445885564512 color=red,shape=square,flag=1,i=21619,u=0.909934728202999,v=0.5119129155167673,w=0.49737464360721895,x=4.571572224384272 color=green,shape=square,flag=1,i=21623,u=0.7814360511897981,v=0.5896324745193484,w=0.48699110699848763,x=4.43537350228137 color=red,shape=triangle,flag=1,i=21625,u=0.051071354157938176,v=0.7519231802421672,w=0.4760077497564983,x=6.996091316618849 color=red,shape=circle,flag=0,i=21628,u=0.07270971127986847,v=-0.016414971105282394,w=0.5472942566681013,x=5.860927896809422 color=purple,shape=triangle,flag=0,i=21636,u=0.5685316767846199,v=0.01912106890856846,w=0.49782977364697106,x=4.685565821797521 color=purple,shape=square,flag=0,i=21643,u=0.8863171836197399,v=0.5850820667956556,w=0.46804656937470335,x=5.158722695703592 color=blue,shape=square,flag=1,i=21648,u=0.18180061370103762,v=0.5389115990457999,w=0.48397977953719323,x=4.391018882127969 color=purple,shape=square,flag=0,i=21650,u=0.2272638063103246,v=0.9999751864255598,w=0.4690754110719239,x=4.874878689157362 color=blue,shape=triangle,flag=0,i=21661,u=0.4822239781894736,v=0.459283624860774,w=0.45652395171573695,x=4.830135203545993 color=yellow,shape=circle,flag=1,i=21678,u=0.9713252215203851,v=0.0032838959668622936,w=0.49924169829892373,x=4.347830870872097 color=red,shape=triangle,flag=0,i=21688,u=0.5030123424917308,v=0.5065586655397507,w=0.4690210914902035,x=4.191715047877949 color=red,shape=circle,flag=1,i=21695,u=0.878685971609549,v=0.8775353647337604,w=0.5389771332212562,x=4.637341572454716 color=green,shape=square,flag=0,i=21709,u=0.8153050110816056,v=0.8789884604906779,w=0.48331051779034556,x=5.999810666772646 color=yellow,shape=triangle,flag=1,i=21756,u=0.977185020962831,v=0.7903545309088181,w=0.4903148196725208,x=6.060236508394709 color=orange,shape=triangle,flag=0,i=21762,u=0.9527922622244919,v=0.3741811039393883,w=0.5548027776141339,x=6.615729237293617 color=orange,shape=square,flag=0,i=21769,u=0.8977463870394035,v=0.5179054952659966,w=0.4672807579458321,x=5.332571072807396 color=orange,shape=triangle,flag=0,i=21771,u=0.4811752006010426,v=0.5975462878820786,w=0.5553053052970471,x=4.066752606850173 color=red,shape=square,flag=1,i=21786,u=0.43632829092308345,v=0.3319361654062488,w=0.4848170535422973,x=4.624369904082484 color=green,shape=square,flag=0,i=21787,u=0.6148973698468939,v=0.8978105718100777,w=0.4869429283976462,x=3.4458903012297717 color=blue,shape=triangle,flag=1,i=21831,u=0.06491058549850748,v=0.5489107981049747,w=0.46057094312732805,x=2.6757834975650283 color=red,shape=square,flag=0,i=21832,u=0.29725885508597305,v=0.7168105449072771,w=0.49053004634660896,x=4.060258874329796 color=red,shape=square,flag=0,i=21834,u=0.6027093979020824,v=0.8116283323254283,w=0.4939688104637858,x=6.427074398871658 color=red,shape=circle,flag=0,i=21835,u=0.20404592072358674,v=0.1547325628594451,w=0.5138768664066818,x=4.746891787347843 color=red,shape=square,flag=1,i=21837,u=0.2536919623396767,v=0.7810050640160489,w=0.49657305998067386,x=4.940604650908614 color=red,shape=circle,flag=1,i=21840,u=0.9327736097717733,v=0.9311343192263329,w=0.5135774833356186,x=5.45811746419271 color=purple,shape=triangle,flag=0,i=21846,u=0.5041786130470416,v=0.9483200543242586,w=0.4888652617523682,x=4.139859418393173 color=red,shape=square,flag=0,i=21858,u=0.13747478569265603,v=0.6500982446511613,w=0.4889957184466165,x=5.022966055803096 color=red,shape=square,flag=1,i=21884,u=0.3227411936424912,v=0.7177207084319108,w=0.48985434213650725,x=7.747687963200451 color=red,shape=circle,flag=1,i=21890,u=0.01779936782298963,v=0.01672704502333422,w=0.5162751961060607,x=5.815051083119799 color=purple,shape=square,flag=0,i=21895,u=0.038200297008298745,v=0.6987117030511367,w=0.4633864788329225,x=6.078496804227996 color=red,shape=square,flag=1,i=21904,u=0.27435041157131446,v=0.7198597249887962,w=0.4886877132333041,x=5.651700723390704 color=green,shape=square,flag=0,i=21907,u=0.5074137845807053,v=0.11659089256269839,w=0.4791808061501693,x=4.748941677172227 color=red,shape=triangle,flag=0,i=21917,u=0.5648956406376043,v=0.34858648370834544,w=0.46355835297722076,x=6.555133465611949 color=green,shape=square,flag=0,i=21925,u=0.3143703464800479,v=0.5910473795803071,w=0.48435096892195106,x=5.85327588774183 color=blue,shape=triangle,flag=1,i=21944,u=0.646556358055206,v=0.5767555325214678,w=0.460999235144728,x=6.063911829323001 color=blue,shape=square,flag=1,i=21948,u=0.06249951576667556,v=0.6948640820041468,w=0.5006793250059718,x=2.490162327671141 color=blue,shape=square,flag=1,i=21954,u=0.871739367274581,v=0.27721239255668517,w=0.5016402072715608,x=5.748282535510005 color=red,shape=triangle,flag=0,i=21958,u=0.7348942724858728,v=0.6114793725971515,w=0.46704369426616466,x=5.557762902011185 color=red,shape=circle,flag=1,i=21979,u=0.2268341966995554,v=0.13998481191626178,w=0.5142782047291493,x=3.1431670096486886 color=orange,shape=square,flag=0,i=21985,u=0.3969542971064818,v=0.12450422641705017,w=0.4604904884157345,x=4.330105445041991 color=red,shape=triangle,flag=1,i=21999,u=0.3575352265558621,v=0.21354018827826393,w=0.4620932065290542,x=4.093441077460721 color=red,shape=square,flag=1,i=22006,u=0.6203058230695373,v=0.19052894035604195,w=0.4849307848850839,x=4.344531487207733 color=red,shape=circle,flag=0,i=22029,u=0.043932278699233995,v=0.12567225604536203,w=0.5144657144432702,x=2.4989773830243527 color=yellow,shape=circle,flag=1,i=22033,u=0.590581707368831,v=0.5596137226484427,w=0.49362805330000936,x=4.769959718677032 color=blue,shape=square,flag=0,i=22040,u=0.43477105092947876,v=0.7886387272308767,w=0.5029690768161315,x=6.2180295927136084 color=blue,shape=triangle,flag=0,i=22042,u=0.9645416995753514,v=0.938483196452791,w=0.467615803541512,x=6.453884220574573 color=red,shape=square,flag=0,i=22051,u=0.9805684167239406,v=0.5452666091870497,w=0.4843116922718076,x=4.217434843189204 color=blue,shape=circle,flag=1,i=22068,u=0.7885190863385096,v=0.6057816872362967,w=0.5055798595735497,x=4.2766593248087945 color=red,shape=circle,flag=1,i=22073,u=0.9295942495471209,v=0.8963724948634558,w=0.5016493152624675,x=4.733670687810302 color=red,shape=circle,flag=1,i=22076,u=0.5873168506919586,v=0.4941105665376684,w=0.5043295322856316,x=4.40241193062348 color=blue,shape=square,flag=1,i=22080,u=0.36567058746781456,v=0.5467731375372858,w=0.4990598148918417,x=6.884640814498577 color=blue,shape=triangle,flag=1,i=22102,u=0.05182869819523728,v=0.8050879763654976,w=0.4622316596018345,x=4.77035578066242 color=red,shape=square,flag=1,i=22114,u=0.4261696616058921,v=0.6967517553320015,w=0.48346591276429723,x=4.3221731436400415 color=red,shape=square,flag=1,i=22128,u=0.8627015910076006,v=0.10767986134045882,w=0.4871998838234642,x=5.913161342933268 color=red,shape=triangle,flag=0,i=22140,u=0.31607338035315946,v=0.9153033877331799,w=0.47320147670034146,x=5.986312354469507 color=red,shape=square,flag=0,i=22155,u=0.5507315423676834,v=0.07665942148140314,w=0.49898498721565226,x=5.913002188807847 color=red,shape=square,flag=1,i=22182,u=0.10073684311425768,v=0.29940739523729143,w=0.5024464916537524,x=3.342679516509387 color=blue,shape=square,flag=0,i=22195,u=0.4644743224822755,v=0.5346152340411093,w=0.5056339032967823,x=5.235196022920134 color=red,shape=triangle,flag=1,i=22196,u=0.04108539719809534,v=0.4179295202262703,w=0.475537628255667,x=4.38497893936318 color=purple,shape=triangle,flag=0,i=22198,u=0.10297868514442432,v=0.6353922829468174,w=0.5014166609242939,x=4.8793032399406755 color=green,shape=square,flag=0,i=22205,u=0.9563827419868632,v=0.02774015231792981,w=0.48993454160192296,x=5.7838984271753615 color=yellow,shape=square,flag=1,i=22206,u=0.1483118703576879,v=0.3724226563656645,w=0.5069770367150711,x=2.7387052395195934 color=green,shape=triangle,flag=1,i=22221,u=0.01930095360344508,v=0.044260984931902,w=0.4901800304221115,x=4.512500787189332 color=red,shape=triangle,flag=0,i=22245,u=0.35916710577309596,v=0.8509086368144284,w=0.4780522169181255,x=5.628970373182111 color=red,shape=triangle,flag=0,i=22274,u=0.21365488275777578,v=0.4647660904660077,w=0.4897926501871917,x=5.058750319277301 color=blue,shape=circle,flag=0,i=22279,u=0.3794552496743996,v=0.7642680403039164,w=0.5015277679634573,x=6.7195412034013176 color=red,shape=triangle,flag=1,i=22280,u=0.9420399451250119,v=0.48428384263341495,w=0.4893376793024842,x=5.1506911101868775 color=green,shape=circle,flag=0,i=22282,u=0.5263007670178349,v=0.014142276466250991,w=0.4888191763601706,x=3.3889692752380234 color=red,shape=circle,flag=1,i=22290,u=0.8003957407184223,v=0.715103723476151,w=0.5008608133674888,x=5.882542060457841 color=red,shape=circle,flag=0,i=22301,u=0.4657275707796691,v=0.4377350969195919,w=0.49943354393795486,x=5.311197783994828 color=red,shape=circle,flag=0,i=22306,u=0.6081967282072333,v=0.6781471165779014,w=0.5006472842573739,x=5.447282649528127 color=purple,shape=triangle,flag=0,i=22324,u=0.625120180063119,v=0.8240625003738329,w=0.5025026436099966,x=4.8994106981360614 color=yellow,shape=triangle,flag=1,i=22325,u=0.1135299754240886,v=0.9893886679900336,w=0.4936421924352838,x=4.460815216189723 color=yellow,shape=square,flag=1,i=22326,u=0.8800081445296511,v=0.019729917598184987,w=0.5123858143380315,x=5.695406076808497 color=yellow,shape=triangle,flag=1,i=22330,u=0.561759466667296,v=0.5572254678485445,w=0.4969092861235089,x=4.810800340868497 color=green,shape=triangle,flag=0,i=22358,u=0.18260375512941507,v=0.876073948800425,w=0.481858955029465,x=5.287760948091096 color=green,shape=circle,flag=0,i=22367,u=0.3845957697508985,v=0.018692914671353145,w=0.48470952367028747,x=4.114261809864085 color=yellow,shape=triangle,flag=0,i=22371,u=0.8443051188142019,v=0.43410019879010964,w=0.4960372684466781,x=5.986469091493085 color=red,shape=circle,flag=1,i=22374,u=0.4078666427416304,v=0.31327016069074615,w=0.49235251483639225,x=2.7883857174436515 color=red,shape=square,flag=0,i=22380,u=0.7015574472079029,v=0.05171416106481863,w=0.4941515301405302,x=5.04434905888516 color=red,shape=circle,flag=1,i=22396,u=0.3564266725679328,v=0.43606361177962794,w=0.49722731137702975,x=5.103495908802769 color=red,shape=square,flag=0,i=22400,u=0.7184341898806038,v=0.7410214031972242,w=0.500998282971396,x=4.777478749460866 color=red,shape=triangle,flag=1,i=22405,u=0.5736535140532406,v=0.34937579864724044,w=0.49221501613768165,x=4.097212728395965 color=yellow,shape=square,flag=1,i=22412,u=0.6063249455452154,v=0.09377389220655175,w=0.5167116405650078,x=6.584559889225678 color=red,shape=square,flag=0,i=22417,u=0.25756424123855926,v=0.888281910692454,w=0.5001566046384343,x=4.228503437312928 color=blue,shape=square,flag=0,i=22504,u=0.304475080753288,v=0.2082416028341023,w=0.49081234444357535,x=5.903768626693311 color=yellow,shape=triangle,flag=1,i=22505,u=0.2476259721272076,v=0.9612620769583891,w=0.5066326788053319,x=4.690125741994019 color=yellow,shape=circle,flag=1,i=22508,u=0.13515228920107658,v=0.630478194977146,w=0.4944251304893387,x=5.041932268369011 color=green,shape=triangle,flag=0,i=22510,u=0.22850347539357074,v=0.23511388963295687,w=0.48979495139811197,x=4.557965762953089 color=red,shape=triangle,flag=1,i=22514,u=0.9235242260081072,v=0.5616880992362214,w=0.5051202050979727,x=3.383680030189833 color=blue,shape=triangle,flag=0,i=22541,u=0.7935783469207115,v=0.14609943654505775,w=0.4783763820435312,x=4.964762249510618 color=orange,shape=square,flag=0,i=22544,u=0.8078036685860043,v=0.946039689000959,w=0.461221299545693,x=6.7932686589614795 color=red,shape=triangle,flag=1,i=22563,u=0.9590803652137688,v=0.21934729755521032,w=0.5019932317563995,x=5.212499965616153 color=red,shape=triangle,flag=0,i=22590,u=0.3211669968131414,v=0.9542622209474696,w=0.507398445019412,x=4.66317134962204 color=red,shape=square,flag=0,i=22624,u=0.19123810966299948,v=0.897335774498942,w=0.4997050599047793,x=4.135730708677318 color=red,shape=circle,flag=1,i=22626,u=0.9543889601592358,v=0.9809586445063544,w=0.51630715679236,x=4.8257437101738345 color=green,shape=square,flag=1,i=22645,u=0.290673224233454,v=0.5624655455592135,w=0.4826390265997839,x=6.62699830717576 color=red,shape=triangle,flag=0,i=22648,u=0.7869942861547136,v=0.25176797799312467,w=0.5076407728542566,x=5.742203258300368 color=red,shape=triangle,flag=0,i=22654,u=0.34909640879353976,v=0.4771305310629287,w=0.510767723688411,x=3.908252301980633 color=red,shape=square,flag=1,i=22662,u=0.7150019109976505,v=0.589139442261408,w=0.5060178606126404,x=3.966257988561391 color=red,shape=triangle,flag=0,i=22663,u=0.0934293856347842,v=0.42037781783300454,w=0.5125806216641748,x=6.61196152561503 color=blue,shape=triangle,flag=0,i=22664,u=0.011910868478755776,v=0.7708511846248055,w=0.48753490969087887,x=5.379080042442688 color=red,shape=triangle,flag=0,i=22669,u=0.6710061633806403,v=0.1272278043460734,w=0.5160732179852063,x=6.062066031186976 color=red,shape=square,flag=1,i=22675,u=0.23366310838626225,v=0.023855666927075747,w=0.5031681341948554,x=4.873906874526924 color=red,shape=circle,flag=0,i=22679,u=0.14310254559089575,v=0.06814248262406124,w=0.5177678869079146,x=4.46572924532907 color=green,shape=circle,flag=0,i=22685,u=0.1963330273098456,v=0.009943650095666667,w=0.47642674282069647,x=2.4618817353633187 color=red,shape=circle,flag=0,i=22691,u=0.9084870151254993,v=0.8658081651692412,w=0.516359291858911,x=4.649828452052325 color=red,shape=triangle,flag=0,i=22694,u=0.417181709097607,v=0.7136335454431197,w=0.5127798550135525,x=6.08976324251034 color=blue,shape=circle,flag=0,i=22732,u=0.8420027395243015,v=0.41010848148155066,w=0.4950831386294427,x=4.634375806402584 color=green,shape=square,flag=0,i=22744,u=0.12496920223784014,v=0.49858231402884456,w=0.483776100218785,x=4.016895638765839 color=red,shape=circle,flag=0,i=22745,u=0.5345468901160937,v=0.5877527190456036,w=0.5138043737551222,x=4.992815954707054 color=red,shape=circle,flag=1,i=22756,u=0.3536659679851689,v=0.41620391458279904,w=0.5130419796290119,x=5.330789604933889 color=orange,shape=circle,flag=0,i=22763,u=0.9190273261231365,v=0.6714007132424881,w=0.5511375003169077,x=5.319044419531634 color=purple,shape=triangle,flag=0,i=22781,u=0.9295205448942289,v=0.7111156518717175,w=0.5035970529485849,x=6.025408159343598 color=red,shape=circle,flag=0,i=22782,u=0.18653467441088423,v=0.16407662792108896,w=0.510750316182501,x=3.998789546247329 color=red,shape=circle,flag=1,i=22787,u=0.9970174169303028,v=0.9012157635807073,w=0.5145707456359636,x=3.9603187160501747 color=red,shape=square,flag=1,i=22792,u=0.15136673239971,v=0.07701701967366947,w=0.49402665298825343,x=4.713683528049551 color=yellow,shape=square,flag=1,i=22794,u=0.07667826164819724,v=0.37552971772134636,w=0.5235873231540557,x=4.494761710168215 color=red,shape=triangle,flag=1,i=22803,u=0.6098053256350482,v=0.82972280023953,w=0.49796228414117655,x=5.6183185449501565 color=green,shape=square,flag=0,i=22806,u=0.8267854594990207,v=0.38903665833444945,w=0.4740231286636921,x=2.543387333985283 color=red,shape=square,flag=0,i=22809,u=0.7213338867324818,v=0.5076755245091441,w=0.49316520216914944,x=3.8586582476753377 color=green,shape=square,flag=0,i=22825,u=0.8358486593628349,v=0.09219739905246627,w=0.47164484870792567,x=6.1596541846362785 color=red,shape=circle,flag=0,i=22829,u=0.5066949289888992,v=0.437132273418202,w=0.5126548764383861,x=4.320802890683658 color=purple,shape=square,flag=1,i=22831,u=0.6530872860581757,v=0.9328311165111116,w=0.49471925760625834,x=4.335871480662567 color=red,shape=square,flag=1,i=22845,u=0.31664220635016394,v=0.9640193444436116,w=0.4962507172776447,x=7.371518039806723 color=red,shape=square,flag=1,i=22853,u=0.5034364462806025,v=0.6481816564560297,w=0.5006019916644879,x=4.458341894469222 color=green,shape=square,flag=1,i=22877,u=0.9769151376939849,v=0.18401206817468663,w=0.47601114176294956,x=4.691916594468638 color=blue,shape=triangle,flag=1,i=22893,u=0.23534810546344453,v=0.12131320116499156,w=0.4842596616200066,x=3.044027827104633 color=red,shape=triangle,flag=0,i=22905,u=0.045157540481247094,v=0.651585344377143,w=0.4945897960208256,x=5.031538731949464 color=blue,shape=square,flag=0,i=22930,u=0.4501072656146621,v=0.8963078840091769,w=0.49511319577621776,x=4.607625033669522 color=red,shape=circle,flag=0,i=22941,u=0.3543137697482621,v=0.30329261024218473,w=0.5059725122883698,x=6.297611804388446 color=yellow,shape=triangle,flag=1,i=22945,u=0.05757503983477552,v=0.6236811778392366,w=0.4909242656735214,x=5.997358656717654 color=green,shape=square,flag=1,i=22955,u=0.5044063382557639,v=0.8784454242096017,w=0.47927155028078905,x=5.313359674452236 color=red,shape=square,flag=0,i=22960,u=0.11802117546997326,v=0.1447344694231808,w=0.4911330000888476,x=5.501587978118951 color=green,shape=circle,flag=0,i=22965,u=0.47116799635680473,v=0.5514665055465101,w=0.48029862840348614,x=4.955149091785376 color=red,shape=circle,flag=1,i=22976,u=0.35095448820822717,v=0.2835439038025327,w=0.5039589415490381,x=4.662992736200368 color=blue,shape=triangle,flag=1,i=22990,u=0.4971451902854148,v=0.3618865702801357,w=0.49742858694753495,x=6.087065255578792 color=blue,shape=circle,flag=0,i=23008,u=0.4850299809358679,v=0.9472683760002961,w=0.5029606908516189,x=5.286881830029806 color=red,shape=square,flag=0,i=23011,u=0.9448095167203214,v=0.00318281597099912,w=0.49717706595087674,x=6.072178967336626 color=red,shape=triangle,flag=0,i=23038,u=0.5974407519370348,v=0.6521533239726316,w=0.5087356628867192,x=5.362014623324517 color=yellow,shape=circle,flag=1,i=23051,u=0.890221185607212,v=0.6184733433833359,w=0.49015670440801073,x=5.802267662246231 color=green,shape=triangle,flag=1,i=23067,u=0.07256069885965499,v=0.5197958886035285,w=0.4938589624705172,x=5.539893849706517 color=yellow,shape=triangle,flag=1,i=23094,u=0.16745477457964586,v=0.3210473090903906,w=0.4983589188440152,x=4.014640422202761 color=green,shape=circle,flag=0,i=23110,u=0.6905717005250935,v=0.4196504374409644,w=0.48854375880908135,x=4.521045733215048 color=red,shape=square,flag=0,i=23111,u=0.8273872555208033,v=0.924287338992132,w=0.5171730085436889,x=4.4507440944526495 color=yellow,shape=square,flag=1,i=23117,u=0.6864514476428522,v=0.3875716690464819,w=0.5158671426294485,x=5.3841546979528765 color=red,shape=square,flag=1,i=23119,u=0.4010482788675709,v=0.13987513942337404,w=0.5161442760631973,x=5.716300726599036 color=red,shape=triangle,flag=0,i=23121,u=0.6564046358959225,v=0.5748079335638473,w=0.5163483397320485,x=5.164019508421592 color=red,shape=square,flag=0,i=23139,u=0.47970021810374164,v=0.04448739444085237,w=0.5192800612108587,x=6.639047036038089 color=blue,shape=square,flag=1,i=23147,u=0.6545299020038536,v=0.20907491979451132,w=0.4933565510711494,x=7.336259928188473 color=purple,shape=square,flag=0,i=23150,u=0.8288170993684242,v=0.3013056124683675,w=0.5044752682364696,x=4.926947127363284 color=orange,shape=circle,flag=1,i=23158,u=0.16296085075938893,v=0.1679143612528844,w=0.5510090715940692,x=7.131818625881533 color=red,shape=square,flag=0,i=23164,u=0.19064338166542505,v=0.30609756445704817,w=0.5186227688008782,x=7.6304745511890575 color=red,shape=circle,flag=1,i=23183,u=0.17963257616371797,v=0.21790149923600316,w=0.5167340115558117,x=4.979503240060656 color=blue,shape=square,flag=0,i=23225,u=0.2722029921594127,v=0.0857704317288891,w=0.49455895389764915,x=6.234925129226768 color=red,shape=square,flag=0,i=23226,u=0.3173198214327341,v=0.5287519872018137,w=0.5279871106775662,x=4.820793406798785 color=blue,shape=triangle,flag=1,i=23227,u=0.06326765002799628,v=0.2030965851022173,w=0.5025357366076103,x=5.633596188776107 color=yellow,shape=triangle,flag=1,i=23235,u=0.1959207011930677,v=0.9694446994077305,w=0.49858221639845063,x=5.688250176252964 color=red,shape=triangle,flag=1,i=23236,u=0.11326307361349686,v=0.5238026000166917,w=0.5312506604967607,x=4.532098938118924 color=green,shape=triangle,flag=0,i=23238,u=0.9284273023572681,v=0.024904179047771535,w=0.5014311473231676,x=5.264618742938295 color=red,shape=triangle,flag=1,i=23239,u=0.7486308114425985,v=0.5792599414210843,w=0.5309433692635604,x=5.40094430990473 color=red,shape=triangle,flag=0,i=23243,u=0.07349511303033818,v=0.7288456913871848,w=0.5261854598236152,x=5.9976981804079195 color=green,shape=square,flag=1,i=23251,u=0.337738488006862,v=0.9218741783518535,w=0.48300040075101625,x=5.620615041617289 color=red,shape=triangle,flag=1,i=23264,u=0.6429467881134677,v=0.24693845731394914,w=0.5245024821220093,x=5.781011225092461 color=purple,shape=circle,flag=0,i=23274,u=0.2176506746399962,v=0.16151922944035269,w=0.5066370673260421,x=4.817078713659037 color=red,shape=circle,flag=1,i=23277,u=0.1470965172704719,v=0.0939388375711197,w=0.516873496831346,x=5.765755063061776 color=green,shape=square,flag=0,i=23284,u=0.33500362347418966,v=0.5107746808409778,w=0.48049337663962033,x=5.1203765990345405 color=blue,shape=triangle,flag=0,i=23305,u=0.6234308829769849,v=0.49949725982288573,w=0.503289040855153,x=4.5194927690406415 color=yellow,shape=square,flag=1,i=23316,u=0.928500902585382,v=0.5305811934229719,w=0.5111729062204553,x=5.21016447222306 color=blue,shape=square,flag=1,i=23319,u=0.7891971824787298,v=0.9697638103413773,w=0.4832960148401535,x=5.714001015841863 color=purple,shape=triangle,flag=0,i=23332,u=0.1894742972744351,v=0.09246415694188947,w=0.5038366568143672,x=5.264260713103147 color=green,shape=circle,flag=0,i=23339,u=0.5598837889486235,v=0.42165928937339225,w=0.4796006283004833,x=5.5362293907604245 color=green,shape=triangle,flag=0,i=23341,u=0.45400060369541884,v=0.7987833667175556,w=0.49315096966683747,x=7.389847427691393 color=blue,shape=square,flag=1,i=23349,u=0.8759334909312394,v=0.8526409006897021,w=0.48212566267360624,x=4.295379910590351 color=red,shape=square,flag=0,i=23353,u=0.33302228063348194,v=0.39005875101745735,w=0.5273874425863326,x=6.972948881298778 color=yellow,shape=triangle,flag=0,i=23361,u=0.14411588978987833,v=0.2996404226191357,w=0.5008513906564935,x=5.342067144025026 color=green,shape=square,flag=0,i=23363,u=0.11348677996467904,v=0.37960723964032306,w=0.4867056287486982,x=4.131443795714685 color=yellow,shape=triangle,flag=0,i=23366,u=0.11453174843998815,v=0.05670257708150317,w=0.4985373321294248,x=5.021646317700202 color=red,shape=circle,flag=1,i=23378,u=0.20742841236373621,v=0.1643143052980002,w=0.5200894196450062,x=6.669884843692472 color=yellow,shape=triangle,flag=1,i=23387,u=0.8799429863815864,v=0.2238812513346875,w=0.49641443509606087,x=3.3315106686470326 color=blue,shape=triangle,flag=1,i=23388,u=0.572348977940741,v=0.8719742819623544,w=0.5087346000006522,x=5.628147770546362 color=purple,shape=square,flag=0,i=23394,u=0.11101035499249856,v=0.5361022909767356,w=0.5008023668268805,x=3.2150906726892825 color=red,shape=square,flag=1,i=23403,u=0.9877866011909372,v=0.001407976217636775,w=0.5224953678090806,x=5.897717198549871 color=blue,shape=triangle,flag=0,i=23408,u=0.7639238207095306,v=0.8433706642346348,w=0.5097220112537454,x=4.390790422880804 color=red,shape=square,flag=0,i=23419,u=0.2686774934501168,v=0.04634149968713108,w=0.5324232027780118,x=4.0235176794683385 color=green,shape=square,flag=0,i=23426,u=0.23570775454999937,v=0.8515944071369259,w=0.48024397522255824,x=4.510660774240647 color=red,shape=square,flag=1,i=23443,u=0.9692643954254048,v=0.23654678728440626,w=0.5160723415840378,x=4.6213919982873986 color=green,shape=triangle,flag=1,i=23452,u=0.35108078550552835,v=0.7323011571500437,w=0.4972178642922544,x=3.8568202113772023 color=yellow,shape=square,flag=1,i=23456,u=0.2382981929787239,v=0.6439295813902012,w=0.5042095435101689,x=6.7238661644939945 color=red,shape=circle,flag=1,i=23461,u=0.6849812512940661,v=0.7369214144541173,w=0.5215029622409405,x=5.074787342243876 color=red,shape=square,flag=0,i=23487,u=0.1870558897159894,v=0.34911361061192403,w=0.5074974926998845,x=5.198021143370162 color=red,shape=square,flag=0,i=23490,u=0.9571037103338532,v=0.30168283825069675,w=0.5076765930863943,x=4.87682808739305 color=green,shape=triangle,flag=1,i=23492,u=0.37845588789308593,v=0.5843692716007478,w=0.49697714670954246,x=4.681154210691207 color=red,shape=triangle,flag=1,i=23499,u=0.9489634816958415,v=0.9512562725625789,w=0.5181934400073268,x=5.798088204935347 color=red,shape=triangle,flag=0,i=23512,u=0.6496381451909683,v=0.6264868349531356,w=0.5134794524602978,x=5.082460962998624 color=blue,shape=circle,flag=1,i=23522,u=0.4498477086037945,v=0.7851690810404944,w=0.5146729929839238,x=4.545765283829305 color=red,shape=square,flag=0,i=23534,u=0.5737520508427709,v=0.952008797349579,w=0.5083938733135008,x=6.085515991814169 color=green,shape=square,flag=0,i=23545,u=0.2668898034132273,v=0.8751744182584394,w=0.4817901674248808,x=6.335147897977493 color=purple,shape=square,flag=0,i=23547,u=0.480237346573802,v=0.17768333774784206,w=0.5143023435538197,x=4.393122019273999 color=green,shape=triangle,flag=0,i=23549,u=0.5628552864115597,v=0.8525964434265687,w=0.5021437106137278,x=8.13414492020372 color=green,shape=circle,flag=1,i=23555,u=0.5142752714065709,v=0.18839634572039876,w=0.48961056044451295,x=7.651422689170239 color=blue,shape=triangle,flag=0,i=23572,u=0.5282897484829939,v=0.9571870333197425,w=0.5041198817098669,x=3.5926398772336134 color=red,shape=circle,flag=1,i=23585,u=0.7926330525552574,v=0.7057002992540209,w=0.5275987625357925,x=6.6910453003375645 color=green,shape=square,flag=0,i=23588,u=0.43291586321150977,v=0.7399387899109987,w=0.4819400508078948,x=4.213055836522195 color=red,shape=circle,flag=1,i=23594,u=0.5584863101793759,v=0.5960031716881348,w=0.5266413669051735,x=5.040288577096548 color=red,shape=square,flag=0,i=23601,u=0.026160425589723202,v=0.2106918355910713,w=0.5032833816481929,x=4.737356257458481 color=red,shape=square,flag=0,i=23616,u=0.41384561250687146,v=0.1457072481923518,w=0.5120296475641143,x=5.212571615183232 color=red,shape=circle,flag=0,i=23620,u=0.23984757848623084,v=0.21509975420297772,w=0.5260452920510058,x=5.560904782077699 color=blue,shape=triangle,flag=0,i=23627,u=0.6221108424539085,v=0.6996988278755781,w=0.5088472481618641,x=4.31281683743493 color=red,shape=square,flag=0,i=23633,u=0.28199172119733096,v=0.7598832023283023,w=0.5099509052814909,x=4.402472105430491 color=red,shape=triangle,flag=0,i=23661,u=0.9661981561677621,v=0.3454740109285682,w=0.5264699444730383,x=5.6569681420945725 color=yellow,shape=triangle,flag=1,i=23672,u=0.7973488634234054,v=0.06198682061980121,w=0.5053745358143131,x=7.10032832908191 color=purple,shape=triangle,flag=0,i=23675,u=0.566385261024155,v=0.3349515750325801,w=0.5105398354895141,x=5.113656909198742 color=red,shape=circle,flag=0,i=23682,u=0.05619336235744821,v=0.03041886979549777,w=0.5160708446578357,x=5.510910793914063 color=purple,shape=circle,flag=0,i=23696,u=0.678870545187656,v=0.9305319252797172,w=0.4939277423511818,x=3.9485047826699287 color=yellow,shape=triangle,flag=1,i=23705,u=0.2571202556454315,v=0.6200297589458074,w=0.5079060362440976,x=7.276836869756789 color=blue,shape=triangle,flag=1,i=23707,u=0.8444785405864961,v=0.17881935841743757,w=0.5152639651748931,x=7.17855534872908 color=red,shape=square,flag=1,i=23712,u=0.1066848119680377,v=0.6087079942632704,w=0.5013735574944854,x=6.710299404920831 color=blue,shape=square,flag=0,i=23719,u=0.278423195659686,v=0.8896399663142538,w=0.5078848813292886,x=3.1042771661770683 color=blue,shape=circle,flag=0,i=23722,u=0.6376399260926549,v=0.4637744999505107,w=0.5148754120648366,x=4.057503123569841 color=red,shape=square,flag=0,i=23737,u=0.018811481913225236,v=0.24875484524575475,w=0.4871369557439983,x=5.672389420716473 color=purple,shape=circle,flag=1,i=23744,u=0.17585924673523246,v=0.9396386758587885,w=0.49861994033105117,x=5.4001206638835795 color=red,shape=triangle,flag=0,i=23745,u=0.08531808704159116,v=0.47560093962790306,w=0.5154554771508332,x=4.707170301843964 color=red,shape=circle,flag=1,i=23748,u=0.8693976869888276,v=0.8950642871349858,w=0.5165295191706236,x=3.3253382532907527 color=red,shape=triangle,flag=0,i=23762,u=0.8766604272138507,v=0.9550951297338228,w=0.5173269581062402,x=5.196227921112615 color=red,shape=square,flag=1,i=23763,u=0.8463426770971938,v=0.7775220536146744,w=0.49423503094969923,x=3.0775080051111074 color=purple,shape=square,flag=0,i=23767,u=0.2561566288142689,v=0.55902888885857,w=0.525641565266589,x=5.913894586745621 color=red,shape=square,flag=1,i=23774,u=0.5031053936960308,v=0.47089973093923354,w=0.48999688647209,x=4.032194765926218 color=green,shape=square,flag=1,i=23790,u=0.039010650178135986,v=0.7477425203559989,w=0.49054228398832755,x=5.758368112873792 color=red,shape=triangle,flag=0,i=23798,u=0.2944493023068089,v=0.3053705033257309,w=0.5125433635936449,x=6.7534354418888105 color=green,shape=circle,flag=0,i=23800,u=0.180749463380662,v=0.502074527083829,w=0.49090475819000967,x=6.3082002637492245 color=blue,shape=square,flag=1,i=23804,u=0.1674016830221995,v=0.09291547366663333,w=0.5141152292492428,x=4.761397819580799 color=yellow,shape=circle,flag=1,i=23810,u=0.03706662343613909,v=0.9159692580202179,w=0.489526405426117,x=6.0823389191202635 color=red,shape=triangle,flag=0,i=23812,u=0.4360037792120762,v=0.48326292285672146,w=0.5119914861773859,x=3.0718120102284696 color=yellow,shape=circle,flag=1,i=23841,u=0.91565115657097,v=0.1559391230984365,w=0.4918633802969998,x=4.359706209167996 color=red,shape=square,flag=0,i=23847,u=0.2313801423459757,v=0.5188700566859388,w=0.4925272759241852,x=5.220219370173371 color=purple,shape=circle,flag=0,i=23873,u=0.1264174840471627,v=0.5549920389724897,w=0.5031935120553704,x=6.036754843443859 color=red,shape=circle,flag=0,i=23880,u=0.4250971118941149,v=0.32691141265128065,w=0.5088147484124527,x=5.921482985157826 color=purple,shape=square,flag=1,i=23881,u=0.2059411178040228,v=0.802124762404155,w=0.5219456324784869,x=3.2332747784135076 color=red,shape=square,flag=0,i=23890,u=0.262717368497979,v=0.4095960123131801,w=0.5004613573402783,x=4.007675878887047 color=red,shape=triangle,flag=0,i=23892,u=0.990065337277071,v=0.49282710159029863,w=0.5061783313811727,x=4.420892427287193 color=red,shape=square,flag=0,i=23898,u=0.17541228122753616,v=0.302744499009421,w=0.49595392511653763,x=6.497621157377228 color=red,shape=square,flag=0,i=23900,u=0.32309551307993656,v=0.49686631256497904,w=0.49783027299140975,x=4.115022727441629 color=blue,shape=triangle,flag=0,i=23908,u=0.964453190578294,v=0.0807492476378443,w=0.5257030088871973,x=6.364883177088749 color=yellow,shape=square,flag=1,i=23912,u=0.9690658334747945,v=0.5133152381211084,w=0.521476357585508,x=5.550674235650296 color=red,shape=triangle,flag=1,i=23922,u=0.03782868391756278,v=0.713864299069087,w=0.5002606814958692,x=4.594462729910213 color=red,shape=square,flag=1,i=23950,u=0.7596490074850376,v=0.7032788867149541,w=0.48474982962521135,x=5.785065907227082 color=blue,shape=triangle,flag=0,i=23953,u=0.36770004131687517,v=0.4492645440752139,w=0.5247018064386064,x=4.0701525069574265 color=red,shape=square,flag=0,i=23966,u=0.9050174659381707,v=0.8568666693499032,w=0.4923683453069947,x=4.033789714716826 color=orange,shape=square,flag=1,i=23975,u=0.22645819836382142,v=0.7108024053107417,w=0.46264714819619496,x=4.083309880103242 color=red,shape=square,flag=0,i=23991,u=0.3293409049347982,v=0.11901085846456272,w=0.4789824685190482,x=4.674776266228354 color=orange,shape=triangle,flag=0,i=24005,u=0.3822101717945783,v=0.4837522330957277,w=0.5275037097462535,x=4.277785276456906 color=yellow,shape=square,flag=1,i=24012,u=0.6172480499647973,v=0.7936580678714651,w=0.5329173470085674,x=6.956542548759404 color=green,shape=triangle,flag=1,i=24021,u=0.8313598500198173,v=0.2906790841176131,w=0.5027404486780256,x=4.301364943554991 color=red,shape=circle,flag=0,i=24025,u=0.7693043369358932,v=0.7029426319887915,w=0.48905960467011156,x=1.8268617341471807 color=yellow,shape=square,flag=1,i=24029,u=0.7330809386091931,v=0.49002949487944003,w=0.5290296814133423,x=3.036406465453382 color=green,shape=square,flag=0,i=24039,u=0.9981802922692293,v=0.9349396701268718,w=0.5029245218383911,x=3.7307368500357314 color=red,shape=square,flag=1,i=24049,u=0.8326647125311912,v=0.22711273133387866,w=0.48063609898704096,x=3.339649055008552 color=purple,shape=triangle,flag=0,i=24066,u=0.35247876688893576,v=0.6982236744951981,w=0.48691393519695986,x=6.661632889317545 color=red,shape=circle,flag=0,i=24077,u=0.6373331621648192,v=0.5802841510190402,w=0.4889588781476193,x=4.568362120656036 color=red,shape=circle,flag=1,i=24081,u=0.12995456731136057,v=0.166743454166228,w=0.486728547135022,x=5.428564575412668 color=purple,shape=square,flag=0,i=24085,u=0.9327858476840071,v=0.6019400312305438,w=0.5207851611964069,x=4.441070146286315 color=yellow,shape=square,flag=1,i=24087,u=0.5767380461220525,v=0.22721827602865996,w=0.522801926163116,x=5.015791958340519 color=red,shape=square,flag=0,i=24121,u=0.6923700959449809,v=0.40372280708971575,w=0.4768053562483246,x=6.814524252227478 color=red,shape=triangle,flag=1,i=24129,u=0.07278460622061267,v=0.6363406558596526,w=0.5056310547612761,x=6.412204026501519 color=purple,shape=circle,flag=0,i=24131,u=0.8293544307642253,v=0.26449789378830546,w=0.4969934211736489,x=4.66903641608489 color=red,shape=square,flag=0,i=24149,u=0.491222046627109,v=0.2098133903893622,w=0.4880681938427089,x=1.7879383037512575 color=yellow,shape=square,flag=1,i=24158,u=0.5493361890975975,v=0.382764036926871,w=0.5230805626817256,x=6.271504067004247 color=yellow,shape=square,flag=0,i=24196,u=0.14682449845013568,v=0.460966767156074,w=0.5241028016642666,x=3.8178091040959568 color=yellow,shape=circle,flag=1,i=24202,u=0.9926027440203834,v=0.7319753454275766,w=0.49649536522561144,x=4.3203040649067965 color=yellow,shape=square,flag=0,i=24205,u=0.05713496088491765,v=0.946148566657532,w=0.5221414472322131,x=4.558171421280353 color=blue,shape=triangle,flag=0,i=24210,u=0.05380120169641334,v=0.275318743628017,w=0.5303886077592667,x=3.5318396738589395 color=red,shape=square,flag=0,i=24222,u=0.3509901122980337,v=0.5133600470322427,w=0.5092252413951253,x=4.399960551982097 color=red,shape=square,flag=0,i=24226,u=0.07909196977259503,v=0.04209166124776631,w=0.5020116207515555,x=5.923454352424031 color=red,shape=square,flag=1,i=24234,u=0.8783344279116255,v=0.2557030677507963,w=0.49656663735154266,x=5.087217606008873 color=blue,shape=triangle,flag=0,i=24242,u=0.47684650008051666,v=0.8005730812576591,w=0.5312775038103603,x=5.401158410675392 color=yellow,shape=square,flag=0,i=24244,u=0.1422759481650815,v=0.4499174639245199,w=0.5235911444388166,x=3.7226190258788256 color=purple,shape=circle,flag=0,i=24246,u=0.18550030961376696,v=0.721342114703196,w=0.5047572430604074,x=5.876891170413199 color=red,shape=circle,flag=1,i=24256,u=0.06467046009606936,v=0.0962187450196616,w=0.4819559155975114,x=4.6528223925989325 color=red,shape=square,flag=1,i=24280,u=0.6038742473956866,v=0.6924952553560021,w=0.48831387578362817,x=4.647880963287406 color=red,shape=triangle,flag=0,i=24309,u=0.6072322318971592,v=0.11145891318297196,w=0.5108167971890211,x=4.326995843193109 color=red,shape=triangle,flag=0,i=24345,u=0.2734854812785562,v=0.9876372286167877,w=0.5200130162716525,x=3.0608064677951066 color=red,shape=triangle,flag=0,i=24348,u=0.16931044275599072,v=0.33080512640023363,w=0.5176317514301072,x=4.7069378744015316 color=red,shape=square,flag=0,i=24367,u=0.6477662909831355,v=0.3247662572031721,w=0.4932343730190598,x=4.876074038598661 color=blue,shape=circle,flag=0,i=24380,u=0.9736113339129058,v=0.6756037446124955,w=0.5176266181342479,x=3.707869832367296 color=yellow,shape=triangle,flag=1,i=24407,u=0.6663207383635591,v=0.7154532387334787,w=0.5224321085200672,x=5.502558389227132 color=blue,shape=circle,flag=0,i=24410,u=0.5538009712487734,v=0.3099431836001013,w=0.5207113690485828,x=6.137761614926672 color=red,shape=triangle,flag=0,i=24424,u=0.15424148992752262,v=0.42630925271530984,w=0.5226647909075632,x=5.112253484334038 color=blue,shape=square,flag=0,i=24431,u=0.5791006981028038,v=0.147060030755771,w=0.5181654134678347,x=4.646179532504333 color=purple,shape=triangle,flag=0,i=24443,u=0.4313279405805486,v=0.06686298675044844,w=0.5064134940369807,x=4.113614685094081 color=red,shape=triangle,flag=0,i=24444,u=0.29196889630256473,v=0.46188259991821334,w=0.5257036770280761,x=5.6783853137436635 color=red,shape=square,flag=0,i=24500,u=0.27287454203522576,v=0.5282281177523128,w=0.49810633325537496,x=3.6002534254547203 color=red,shape=circle,flag=0,i=24507,u=0.10332461553478156,v=0.10374164345007093,w=0.48074698404961674,x=5.16782954746228 color=purple,shape=circle,flag=0,i=24515,u=0.9558806142989852,v=0.7896106337170745,w=0.49987369136173165,x=3.475872194601838 color=blue,shape=triangle,flag=0,i=24519,u=0.3039633105783571,v=0.04400441782744069,w=0.5274427478525106,x=3.615894807854925 color=red,shape=circle,flag=0,i=24521,u=0.7828114510788164,v=0.7128370266436644,w=0.48004180837344274,x=4.266674685023329 color=red,shape=triangle,flag=1,i=24526,u=0.40993615638834546,v=0.6306073940976629,w=0.5174098626153381,x=5.3453156509588835 color=purple,shape=triangle,flag=0,i=24529,u=0.010083222198412178,v=0.5060460721226393,w=0.5138565613439221,x=5.106670108005759 color=red,shape=square,flag=0,i=24532,u=0.781136641368791,v=0.7427123686735186,w=0.5104470463044536,x=4.846314479838938 color=purple,shape=circle,flag=0,i=24546,u=0.8966809355188015,v=0.840720727841922,w=0.5019382506117174,x=3.61804101308595 color=red,shape=circle,flag=0,i=24547,u=0.5675578207494792,v=0.6141838084420437,w=0.4814395347625242,x=3.8431531114531956 color=red,shape=triangle,flag=0,i=24553,u=0.7330698610977062,v=0.5627167277643027,w=0.5183978952874161,x=6.499566618559693 color=blue,shape=triangle,flag=1,i=24558,u=0.13683592814073509,v=0.8796684435701124,w=0.5260375921355964,x=5.63115054718767 color=green,shape=square,flag=1,i=24565,u=0.8367623327688047,v=0.9981628321084548,w=0.48790359943912015,x=4.291861246731242 color=purple,shape=circle,flag=0,i=24566,u=0.7887843806898586,v=0.019534311684181516,w=0.5036312105407535,x=3.7880401237487553 color=red,shape=circle,flag=1,i=24567,u=0.9868577134070218,v=0.9686873132111709,w=0.4851988540542589,x=3.049266749000013 color=red,shape=circle,flag=0,i=24583,u=0.7925786649322688,v=0.7953249025617605,w=0.48179294284468727,x=5.484696937132495 color=yellow,shape=circle,flag=1,i=24590,u=0.45750678281984447,v=0.5870728563726236,w=0.49393297932789965,x=5.2918812270619675 color=red,shape=triangle,flag=0,i=24593,u=0.8292097641384666,v=0.9369047916370914,w=0.5162029816955754,x=3.1772249052655472 color=red,shape=circle,flag=0,i=24617,u=0.8423211077517533,v=0.9191099275539489,w=0.47664944115177404,x=4.9446864541468 color=blue,shape=triangle,flag=0,i=24623,u=0.31784397770729356,v=0.2647086605489919,w=0.5277042941681739,x=6.211859687479072 color=blue,shape=circle,flag=0,i=24634,u=0.8920021988760922,v=0.5292344220286258,w=0.5238682215285081,x=3.8886492251491425 color=green,shape=triangle,flag=0,i=24635,u=0.41866526074699095,v=0.8003694387500091,w=0.5211946831489739,x=5.726274325678527 color=purple,shape=square,flag=0,i=24637,u=0.4170921026773491,v=0.13124745702966734,w=0.5269139486368803,x=4.149645804172487 color=orange,shape=circle,flag=0,i=24659,u=0.1856768858922363,v=0.7798826355298916,w=0.5425092425192989,x=4.351385569866242 color=blue,shape=square,flag=1,i=24679,u=0.5168962434214746,v=0.6006008530800441,w=0.520216461930805,x=3.890667065613904 color=yellow,shape=triangle,flag=1,i=24692,u=0.7784675871624672,v=0.7100548607832236,w=0.5115241528192892,x=4.742642277516541 color=red,shape=square,flag=0,i=24697,u=0.4282191390403136,v=0.39936305191312504,w=0.4871076834485914,x=6.024071964882538 color=red,shape=square,flag=0,i=24699,u=0.14562138711757877,v=0.9135999418847924,w=0.48870478503696296,x=4.741270389791599 color=green,shape=square,flag=0,i=24713,u=0.4851289315173014,v=0.8555632738412017,w=0.48161174573999044,x=5.887215172661757 color=green,shape=square,flag=1,i=24714,u=0.7496790575965755,v=0.02485648334475743,w=0.4819896989335906,x=5.477864781646009 color=red,shape=circle,flag=0,i=24740,u=0.7549913608987702,v=0.8099642746020196,w=0.4685005987298493,x=3.9447805552141966 color=purple,shape=triangle,flag=0,i=24750,u=0.5446504899723935,v=0.521573009820174,w=0.5050345487303328,x=4.750891782188507 color=red,shape=circle,flag=0,i=24752,u=0.6143761129008561,v=0.6700034621960337,w=0.46741695022429874,x=5.057949004460491 color=orange,shape=circle,flag=1,i=24764,u=0.2945430996974784,v=0.3201796153365686,w=0.5402160712004964,x=8.377666207479786 color=orange,shape=square,flag=0,i=24767,u=0.25158419658777575,v=0.7038949330993773,w=0.46460313598867364,x=5.683706048813135 color=yellow,shape=square,flag=0,i=24785,u=0.9545045160996185,v=0.4524478695361861,w=0.5077800004149832,x=5.319259963338258 color=red,shape=circle,flag=0,i=24794,u=0.9512782502122759,v=0.9944442307252868,w=0.4729065834445926,x=5.041101153238117 color=blue,shape=circle,flag=1,i=24795,u=0.6179294624125289,v=0.8260449527511678,w=0.5090377106372712,x=4.69614278615258 color=red,shape=triangle,flag=1,i=24825,u=0.07150167317815714,v=0.5286578042738647,w=0.5179399470584168,x=5.5810535981192295 color=red,shape=square,flag=0,i=24827,u=0.9063616356408548,v=0.33950307880563735,w=0.5078387603923648,x=7.092526721648312 color=red,shape=circle,flag=0,i=24829,u=0.06399950880245531,v=0.08258391087274145,w=0.4694974287235985,x=4.312521389941339 color=purple,shape=circle,flag=0,i=24834,u=0.13262433210219715,v=0.9812407114300432,w=0.5146244546537629,x=4.808785405997984 color=orange,shape=circle,flag=0,i=24838,u=0.7264361685700211,v=0.7214928158359427,w=0.5399498856490877,x=5.27647934981674 color=blue,shape=square,flag=1,i=24842,u=0.7998272822533002,v=0.5540738598008006,w=0.5089903629495965,x=4.051092327471555 color=red,shape=square,flag=0,i=24848,u=0.7413232340211375,v=0.18739802080070334,w=0.4959363685432922,x=5.98179670687668 color=orange,shape=triangle,flag=1,i=24855,u=0.828203545631617,v=0.16320239685847204,w=0.5385813765353484,x=4.349426323508998 color=red,shape=square,flag=0,i=24860,u=0.7260174719821921,v=0.8143938811011305,w=0.49141811021692694,x=4.773896063746904 color=red,shape=circle,flag=0,i=24862,u=0.18016795911435246,v=0.17993416143325622,w=0.4642124742981486,x=8.262446424259752 color=blue,shape=triangle,flag=1,i=24863,u=0.5557089920741711,v=0.8593052233699389,w=0.5292722919728778,x=7.2860270209587865 color=purple,shape=circle,flag=0,i=24868,u=0.35827381871070385,v=0.15443358251833816,w=0.5167271196943897,x=7.019351214304923 color=yellow,shape=circle,flag=1,i=24875,u=0.4609088897514749,v=0.5005090881496719,w=0.48971584915675476,x=4.697055529964763 color=red,shape=circle,flag=0,i=24876,u=0.08279982377309181,v=0.09326245911205308,w=0.46602560869831694,x=7.064746049628389 color=red,shape=triangle,flag=1,i=24887,u=0.019388548190054866,v=0.16319784094155465,w=0.5216015278211371,x=3.917211378576552 color=red,shape=circle,flag=0,i=24889,u=0.9712016664771334,v=0.9837470453798807,w=0.46445310959326774,x=4.404559825247913 color=yellow,shape=circle,flag=1,i=24895,u=0.7351457116705528,v=0.11268862556618087,w=0.4873576011918283,x=8.26201097919447 color=red,shape=triangle,flag=0,i=24897,u=0.3250842295630674,v=0.8841171771366662,w=0.5210653091264246,x=5.833904881714868 color=orange,shape=square,flag=1,i=24924,u=0.3228177312988433,v=0.32584423822044506,w=0.4698703268350223,x=4.479784386363981 color=red,shape=circle,flag=0,i=24940,u=0.4217278880696502,v=0.4003192502581979,w=0.47251941872746384,x=6.072471487722709 color=red,shape=triangle,flag=1,i=24941,u=0.9368289632434924,v=0.6179612157670777,w=0.5128479641958037,x=5.482279977596622 color=blue,shape=circle,flag=0,i=24944,u=0.3103782595729694,v=0.8433240163800687,w=0.5010540464797295,x=5.071897432691483 color=yellow,shape=square,flag=1,i=24949,u=0.9826616843118412,v=0.5151233558225586,w=0.5201148638798578,x=4.9749169931806465 color=red,shape=circle,flag=1,i=24953,u=0.2257374496016118,v=0.18501775724875621,w=0.46732798989534974,x=4.546718539022561 color=red,shape=square,flag=0,i=24960,u=0.8535163524186117,v=0.3446860705123437,w=0.4936367217287923,x=3.7181138622323466 color=yellow,shape=triangle,flag=1,i=24966,u=0.01604092808972868,v=0.3001635819282191,w=0.5193422128274403,x=6.553616926943543 color=blue,shape=triangle,flag=0,i=24967,u=0.711472670773501,v=0.18154414637546534,w=0.5298075535265754,x=5.788995843607688 color=red,shape=triangle,flag=1,i=24968,u=0.002977852200798048,v=0.09733930249777467,w=0.514537794388392,x=5.968530038869697 color=red,shape=triangle,flag=0,i=24985,u=0.2026734823232471,v=0.6983256045299534,w=0.5238128302517565,x=5.649871772398176 color=red,shape=triangle,flag=0,i=25004,u=0.040495542520180394,v=0.9099070564001548,w=0.5278904335963913,x=5.187501270378375 color=green,shape=square,flag=0,i=25006,u=0.9384216991480615,v=0.4661783058074618,w=0.47885315912422893,x=7.17179520202514 color=purple,shape=triangle,flag=0,i=25010,u=0.5555453434265945,v=0.5691402362180652,w=0.49226197917512793,x=5.305647040081683 color=purple,shape=square,flag=1,i=25016,u=0.013318649820791117,v=0.4226407218607313,w=0.5100148207500508,x=6.4698238723308705 color=purple,shape=square,flag=1,i=25030,u=0.26423266591008954,v=0.9941242266433082,w=0.5133987496787764,x=5.189225442419219 color=red,shape=square,flag=0,i=25042,u=0.4348715926243021,v=0.5762389337773339,w=0.4836923254883376,x=4.279469384567861 color=purple,shape=triangle,flag=0,i=25047,u=0.36834396113196066,v=0.2715104197951701,w=0.48939420299467634,x=5.117415089580451 color=blue,shape=square,flag=0,i=25049,u=0.19379222378290906,v=0.751097278751949,w=0.5054958221487019,x=5.172302933154537 color=yellow,shape=square,flag=1,i=25089,u=0.43377033331403325,v=0.7260011013253207,w=0.5137788738171449,x=6.551914055626052 color=blue,shape=circle,flag=0,i=25142,u=0.867003385388892,v=0.3473217404964116,w=0.49438514111848003,x=4.245533571638877 color=red,shape=square,flag=0,i=25145,u=0.43709113223610596,v=0.29405584165749543,w=0.4810763116744267,x=7.46502430821791 color=purple,shape=triangle,flag=0,i=25161,u=0.8280275718593857,v=0.9417747856047048,w=0.49498321915889687,x=7.415747659218295 color=blue,shape=square,flag=0,i=25188,u=0.6270113231985922,v=0.2230519958598457,w=0.5098322081234531,x=6.153828587135355 color=green,shape=triangle,flag=0,i=25200,u=0.6689852490297616,v=0.6253210296437005,w=0.5229557605294215,x=3.4770348940454876 color=orange,shape=square,flag=1,i=25216,u=0.48401756762364534,v=0.4226337084194922,w=0.46869804284243743,x=5.4422993284485095 color=purple,shape=square,flag=0,i=25224,u=0.12648934842786963,v=0.403618978894864,w=0.5161063556852542,x=3.435872459765814 color=blue,shape=square,flag=1,i=25227,u=0.06979281205572974,v=0.08862607882245854,w=0.5137236815303357,x=3.6905968208238935 color=blue,shape=circle,flag=1,i=25242,u=0.4818031369883873,v=0.1813910166010726,w=0.49991336226740046,x=4.1430285161914275 color=purple,shape=square,flag=0,i=25245,u=0.44237836042996226,v=0.7384322312479161,w=0.5188851283070829,x=6.02061367546791 color=red,shape=triangle,flag=0,i=25249,u=0.41366583569292115,v=0.3091632969342911,w=0.5081857102508123,x=4.072596536874886 color=blue,shape=square,flag=1,i=25258,u=0.6305080363965526,v=0.0944807331750731,w=0.5113262330065101,x=7.106332755820627 color=green,shape=square,flag=1,i=25268,u=0.0562629545086607,v=0.49515633172707896,w=0.4669891336690399,x=4.855239549628251 color=red,shape=square,flag=0,i=25270,u=0.6053177714909646,v=0.3639218974419395,w=0.4835413414642151,x=5.758895081622932 color=yellow,shape=triangle,flag=1,i=25276,u=0.22919854217626123,v=0.004932551890295844,w=0.5198122231274163,x=5.678650661088027 color=green,shape=triangle,flag=0,i=25312,u=0.8616276832925428,v=0.9966876352594423,w=0.507458696839184,x=4.913298909872215 color=purple,shape=square,flag=0,i=25314,u=0.7582077798871317,v=0.004437127956541942,w=0.5145196605705948,x=7.352143193003523 color=green,shape=square,flag=0,i=25338,u=0.7343318064474029,v=0.35103029756462767,w=0.463756847063779,x=4.340218211118136 color=yellow,shape=triangle,flag=0,i=25353,u=0.49582773207250885,v=0.8776117849692151,w=0.5131465300555562,x=2.990661753826513 color=blue,shape=square,flag=1,i=25387,u=0.8379941133905662,v=0.7227333902620957,w=0.5169698651951014,x=4.214109490126586 color=red,shape=square,flag=0,i=25400,u=0.6647976990309508,v=0.6681166074108165,w=0.483662537121335,x=4.367156371007085 color=yellow,shape=circle,flag=1,i=25419,u=0.5861097997868543,v=0.09304104701245608,w=0.480585167674643,x=4.31557167384405 color=blue,shape=square,flag=0,i=25422,u=0.8381171169066005,v=0.9035648203069505,w=0.5189941468324766,x=3.486968257512897 color=red,shape=circle,flag=0,i=25427,u=0.7238279092273934,v=0.8040643257155619,w=0.4816358458241982,x=5.377109562777432 color=green,shape=triangle,flag=0,i=25428,u=0.026521925997903262,v=0.3907784742567403,w=0.5079862162004534,x=4.778410723710838 color=yellow,shape=triangle,flag=1,i=25433,u=0.34158366408795626,v=0.005444890034735361,w=0.5136794132842879,x=4.428266821391993 color=red,shape=triangle,flag=0,i=25435,u=0.582152083624704,v=0.3171113667930656,w=0.49700903956581793,x=4.7958472397154495 color=purple,shape=triangle,flag=0,i=25439,u=0.6678234759775731,v=0.3243677520179289,w=0.4880360044701393,x=7.403742567293686 color=red,shape=square,flag=0,i=25442,u=0.010092942375800162,v=0.13333359064367722,w=0.48905681266002865,x=5.376732151207544 color=red,shape=circle,flag=0,i=25446,u=0.7813856759237412,v=0.8321045139195066,w=0.48762209498494247,x=5.061094349437838 color=blue,shape=triangle,flag=0,i=25454,u=0.8484966309427525,v=0.012082178156971879,w=0.5342695369063898,x=6.826682002042546 color=yellow,shape=circle,flag=0,i=25458,u=0.6537972550513452,v=0.5910849674788127,w=0.4777381011468813,x=6.355179083479012 color=green,shape=triangle,flag=0,i=25469,u=0.038371626604647435,v=0.6121136952306467,w=0.5151296947307014,x=5.772213012236616 color=purple,shape=triangle,flag=1,i=25477,u=0.32664149098824724,v=0.3270566306487753,w=0.48002579599316053,x=4.405665912819199 color=blue,shape=circle,flag=1,i=25495,u=0.536855061623154,v=0.25275422849525864,w=0.5054052454358829,x=6.0468892012101305 color=blue,shape=circle,flag=0,i=25498,u=0.5929396302837556,v=0.9365886925154252,w=0.5031106723644216,x=6.214885736377898 color=yellow,shape=square,flag=1,i=25499,u=0.15618938338413857,v=0.5649222782779796,w=0.5006980941216002,x=5.010530103179517 color=red,shape=triangle,flag=0,i=25514,u=0.24787971935484898,v=0.14596930011915066,w=0.48648268184742943,x=5.3880937750815034 color=blue,shape=triangle,flag=1,i=25530,u=0.2895065875689401,v=0.08737234041385267,w=0.533182299700779,x=5.264305348202112 color=red,shape=triangle,flag=0,i=25544,u=0.5564020468904375,v=0.469220034459098,w=0.4969889164985036,x=5.548019100193355 color=red,shape=triangle,flag=0,i=25546,u=0.03927214832454329,v=0.8656276033417198,w=0.5016166743319996,x=6.713273682931319 color=green,shape=square,flag=0,i=25559,u=0.46078982852078254,v=0.13039447341168842,w=0.4688506106833271,x=2.9766392539416984 color=red,shape=square,flag=0,i=25585,u=0.12988420262355915,v=0.40387454791195365,w=0.49912201847992793,x=4.115495629323518 color=red,shape=triangle,flag=1,i=25586,u=0.9243659644066534,v=0.8732778424081786,w=0.5079033160641335,x=4.835432405555579 color=green,shape=square,flag=0,i=25589,u=0.4604805037990847,v=0.4828530507130857,w=0.47380448866240904,x=6.052131708988689 color=blue,shape=square,flag=1,i=25593,u=0.9717135389121113,v=0.8956024358579959,w=0.5129793967681089,x=5.115284642159395 color=red,shape=square,flag=1,i=25594,u=0.7441095256671921,v=0.3631964490297026,w=0.4906987074485295,x=4.688716482972666 color=orange,shape=triangle,flag=1,i=25600,u=0.69695535764921,v=0.9890543754602146,w=0.5425817578176706,x=5.024244070203383 color=purple,shape=circle,flag=0,i=25606,u=0.8641632107489988,v=0.013024198344529059,w=0.5109279908251705,x=5.594192736167078 color=red,shape=square,flag=0,i=25612,u=0.08686544138582242,v=0.4182643741815759,w=0.4989660462744722,x=5.134468606511194 color=blue,shape=circle,flag=1,i=25615,u=0.7128741260861531,v=0.7529173898877006,w=0.5051334980868171,x=4.977025552547777 color=red,shape=square,flag=0,i=25618,u=0.5261020440632308,v=0.24793918270696214,w=0.5000373041209327,x=3.3928589618967906 color=blue,shape=square,flag=1,i=25621,u=0.7987487532557355,v=0.4092683799709895,w=0.5036482874856193,x=6.203893021135113 color=red,shape=circle,flag=1,i=25626,u=0.8225437630227117,v=0.8658634386489814,w=0.4876473515348685,x=5.716376034597446 color=blue,shape=square,flag=0,i=25638,u=0.5661090435860126,v=0.9705151218982564,w=0.5039430666408083,x=6.7887104790552355 color=yellow,shape=square,flag=1,i=25678,u=0.7229649005252713,v=0.7966350858062917,w=0.5144115099368456,x=6.138718468473015 color=red,shape=circle,flag=1,i=25688,u=0.5403574726659569,v=0.5166753057015054,w=0.4986326351274328,x=5.517602876376867 color=red,shape=triangle,flag=0,i=25728,u=0.6562738402068202,v=0.6313942944201059,w=0.49222163286374826,x=3.4146443110906617 color=red,shape=square,flag=1,i=25737,u=0.21504602768160996,v=0.44943784512452967,w=0.49386010592306556,x=4.799553396710289 color=red,shape=square,flag=0,i=25753,u=0.42488206832098474,v=0.9990283800959817,w=0.4952503152641763,x=2.873550855335749 color=red,shape=triangle,flag=0,i=25758,u=0.7467306190501787,v=0.2704107626418716,w=0.4948115847870993,x=5.571217209167401 color=red,shape=square,flag=0,i=25764,u=0.5814147575089484,v=0.4169809813630093,w=0.49770545340413025,x=6.387322165879361 color=blue,shape=square,flag=1,i=25784,u=0.8660195733120086,v=0.6833150857537637,w=0.48941441380595596,x=4.367583348763191 color=purple,shape=square,flag=0,i=25789,u=0.8710357965088035,v=0.5965520181038854,w=0.4966942633155147,x=6.938066210987087 color=purple,shape=square,flag=0,i=25791,u=0.6183104781650229,v=0.6255565846788934,w=0.4932172464700376,x=4.826059319954716 color=red,shape=triangle,flag=1,i=25798,u=0.2910246649656659,v=0.16134629813213797,w=0.4976488471971281,x=2.0505843872459377 color=red,shape=square,flag=0,i=25823,u=0.3007399115862952,v=0.696901004610726,w=0.5099746390765068,x=4.393577374746172 color=green,shape=square,flag=0,i=25826,u=0.11131905547969068,v=0.8234419098660856,w=0.4780193222691841,x=4.354601744136541 color=blue,shape=square,flag=0,i=25837,u=0.5382433634007728,v=0.06633172929643638,w=0.49021353894229813,x=7.205544254688381 color=red,shape=square,flag=0,i=25851,u=0.6845254244323443,v=0.7494942983776632,w=0.5135949531373896,x=4.478975820385832 color=red,shape=square,flag=0,i=25855,u=0.4526191799565459,v=0.023487952393752565,w=0.5131634625164141,x=3.9290628772162832 color=yellow,shape=square,flag=1,i=25861,u=0.002727180198842327,v=0.1854781570496533,w=0.5216193154685124,x=6.150478460606201 color=orange,shape=triangle,flag=1,i=25865,u=0.8417560676109885,v=0.9287439707193731,w=0.5457255506490313,x=5.741055512423169 color=yellow,shape=triangle,flag=1,i=25868,u=0.08944679719323745,v=0.4937144120678043,w=0.519825265073939,x=2.707751472799268 color=blue,shape=triangle,flag=1,i=25874,u=0.9761858581977908,v=0.6051651728321814,w=0.5176731952997095,x=3.27437086687736 color=purple,shape=triangle,flag=0,i=25885,u=0.532556057558905,v=0.6474779159215497,w=0.48276252233435424,x=4.410343808196996 color=red,shape=circle,flag=0,i=25896,u=0.7010083717170356,v=0.6989074129751516,w=0.5120898940816476,x=5.585797969816234 color=yellow,shape=square,flag=1,i=25912,u=0.45388994045052466,v=0.6452935634525502,w=0.5129537594723294,x=4.289391174280052 color=red,shape=triangle,flag=0,i=25920,u=0.46741095435015056,v=0.10755028837097114,w=0.4681064915228646,x=4.036861980658842 color=red,shape=triangle,flag=0,i=25924,u=0.6332806714358654,v=0.49510216615019786,w=0.46424121185302886,x=5.35070665891946 color=purple,shape=circle,flag=0,i=25947,u=0.2809694102265121,v=0.7104362479118843,w=0.5045173897448305,x=3.858201598661237 color=red,shape=triangle,flag=0,i=25959,u=0.9362920805410437,v=0.09165159321330985,w=0.4625184548035471,x=6.3974769470925885 color=red,shape=square,flag=0,i=25981,u=0.9010704017795197,v=0.801976957683478,w=0.5035732224888378,x=3.6760525779786213 color=yellow,shape=circle,flag=0,i=26013,u=0.5674926869705129,v=0.5887025840952027,w=0.4804616832694326,x=5.631104095061221 color=blue,shape=triangle,flag=0,i=26014,u=0.33662767306681085,v=0.8032092299082553,w=0.5191275175662233,x=4.215326826381824 color=red,shape=square,flag=0,i=26020,u=0.45755466262601874,v=0.6722733905280788,w=0.5100523187605494,x=4.021464353464206 color=red,shape=circle,flag=1,i=26021,u=0.7234214190925028,v=0.7493938875057046,w=0.5104868346010132,x=4.475506651367415 color=red,shape=triangle,flag=1,i=26037,u=0.7722985467528327,v=0.16074896785415294,w=0.4805294158916076,x=4.9022216908934935 color=red,shape=square,flag=1,i=26039,u=0.3669155801680446,v=0.992419972514465,w=0.5008792368685754,x=5.958031900527238 color=yellow,shape=circle,flag=1,i=26049,u=0.047233413284252346,v=0.6882814789140793,w=0.47931632740430413,x=5.229633873535885 color=green,shape=square,flag=0,i=26059,u=0.7858574089783932,v=0.5560418297214267,w=0.4764267642780115,x=6.7406521074953005 color=red,shape=triangle,flag=0,i=26065,u=0.5651630389685611,v=0.731032237722666,w=0.48190639190618556,x=4.86542480349785 color=red,shape=square,flag=0,i=26068,u=0.12280481793074438,v=0.29137061782774876,w=0.509060843780268,x=7.061160288051109 color=red,shape=triangle,flag=1,i=26073,u=0.873600409609657,v=0.05581585575137982,w=0.48450942367289684,x=5.376239733881472 color=purple,shape=triangle,flag=0,i=26080,u=0.10286574688763916,v=0.2995293971612334,w=0.47423506718676905,x=3.4165735137128403 color=yellow,shape=triangle,flag=0,i=26082,u=0.4504536134152547,v=0.1502301837612895,w=0.5241991997207003,x=3.8131619916861705 color=red,shape=triangle,flag=1,i=26091,u=0.37327644656670544,v=0.8803236604791689,w=0.47336340297011587,x=3.528312786777707 color=red,shape=square,flag=1,i=26096,u=0.09953103094932891,v=0.7207975921655532,w=0.5078191781308253,x=4.973197300196009 color=red,shape=triangle,flag=0,i=26102,u=0.5674563645471775,v=0.802164639859275,w=0.47128259045977117,x=6.102705914046816 color=purple,shape=square,flag=0,i=26103,u=0.8224805941997835,v=0.39657333418649676,w=0.49114300455947685,x=3.4255942660339254 color=yellow,shape=triangle,flag=1,i=26104,u=0.3407861084239223,v=0.15152842414992795,w=0.5160348237826194,x=4.8422809827118245 color=green,shape=square,flag=0,i=26139,u=0.05048675420753501,v=0.5867898197382816,w=0.48332771723619,x=4.854100394965795 color=yellow,shape=square,flag=1,i=26141,u=0.8552151240513924,v=0.20968594770634863,w=0.5159753297215222,x=4.760681087708469 color=red,shape=circle,flag=0,i=26147,u=0.7195606619287135,v=0.7185022318358479,w=0.5179909665054729,x=4.345130811754813 color=purple,shape=circle,flag=0,i=26149,u=0.5718088801605313,v=0.6305392166677085,w=0.49954455506066525,x=6.331555225910537 color=red,shape=square,flag=0,i=26178,u=0.9082928132030541,v=0.8698945448286087,w=0.5272810515794636,x=3.8139398884865403 color=red,shape=circle,flag=0,i=26179,u=0.6521592081101321,v=0.6730313844926001,w=0.517629864433609,x=6.700258305599071 color=purple,shape=square,flag=1,i=26195,u=0.8037216795503589,v=0.5351552045227781,w=0.4991400330285502,x=3.6115115212565576 color=blue,shape=circle,flag=0,i=26216,u=0.29912820464115497,v=0.9930538927340354,w=0.5059305459275703,x=5.7174504294243285 color=red,shape=triangle,flag=0,i=26217,u=0.26325310009245584,v=0.5440037493004181,w=0.4774500325950689,x=4.0479435067756215 color=yellow,shape=triangle,flag=0,i=26236,u=0.2705619544716178,v=0.03620239324209429,w=0.5226419844984572,x=6.209747094149054 color=red,shape=triangle,flag=0,i=26242,u=0.2271912767881561,v=0.09900208652947495,w=0.48469196279101134,x=5.175097751336078 color=red,shape=circle,flag=0,i=26255,u=0.07578793911595427,v=0.14418122422110113,w=0.52623613457003,x=5.286764157810051 color=green,shape=square,flag=0,i=26256,u=0.07983285201287438,v=0.3732667693155065,w=0.4822098358564333,x=5.875392136521286 color=blue,shape=triangle,flag=1,i=26267,u=0.2224324528896101,v=0.2867753587278389,w=0.5133292284016726,x=5.8171157937798865 color=blue,shape=square,flag=1,i=26268,u=0.6582484449449885,v=0.8349729996334416,w=0.4929353631279517,x=5.869326931510386 color=yellow,shape=square,flag=1,i=26271,u=0.6841110660420242,v=0.2590027949643019,w=0.5097661285738265,x=3.1892114715505593 color=red,shape=triangle,flag=0,i=26282,u=0.1889581524882299,v=0.24489732624609417,w=0.48272344860614913,x=5.475576478379538 color=green,shape=triangle,flag=0,i=26296,u=0.02930308135433357,v=0.7055795909634528,w=0.5137693692160372,x=3.5786508001990893 color=orange,shape=square,flag=1,i=26310,u=0.6204747130900325,v=0.9719450523498417,w=0.4597299643938189,x=5.484493488468659 color=green,shape=square,flag=0,i=26319,u=0.30289284515443426,v=0.817765206955581,w=0.4918529944200194,x=5.8656377567539435 color=purple,shape=triangle,flag=0,i=26320,u=0.6306874463524811,v=0.1487685720430315,w=0.4825151736941248,x=3.672167156490436 color=red,shape=square,flag=1,i=26321,u=0.750218649620177,v=0.0984125890957338,w=0.5286319479298367,x=4.8143176942195565 color=red,shape=square,flag=1,i=26325,u=0.4868581502958249,v=0.48150425444648104,w=0.525232334201949,x=6.073247048237519 color=yellow,shape=circle,flag=1,i=26360,u=0.4412037452755281,v=0.7708584881142471,w=0.4880989661285275,x=4.25969589363992 color=purple,shape=square,flag=0,i=26361,u=0.7709755145739532,v=0.19988998572095917,w=0.5101132492887455,x=3.7827542601515773 color=green,shape=square,flag=1,i=26364,u=0.7455797244342347,v=0.7360614013903412,w=0.485498516388062,x=5.240256447655862 color=blue,shape=circle,flag=0,i=26376,u=0.5074133618991272,v=0.8775162924130532,w=0.5146217761749357,x=5.800327330811402 color=red,shape=circle,flag=0,i=26384,u=0.013427978247479544,v=0.03798655025342066,w=0.5183716254492988,x=4.115799450886711 color=red,shape=square,flag=0,i=26405,u=0.32271796796248586,v=0.580844245222119,w=0.5233387768626253,x=4.785919904262766 color=red,shape=square,flag=1,i=26422,u=0.07712716290141353,v=0.06759007456981025,w=0.5170157136476563,x=5.8590619949870915 color=blue,shape=triangle,flag=1,i=26428,u=0.8066039931862952,v=0.13667465559354752,w=0.5094254416958333,x=6.48221280931649 color=red,shape=square,flag=0,i=26450,u=0.6614679232451804,v=0.36560627572775484,w=0.5112020456684284,x=5.7989430933830866 color=red,shape=square,flag=1,i=26459,u=0.8349583081613975,v=0.49121527113896,w=0.5094594741119449,x=4.578042288869326 color=red,shape=square,flag=0,i=26488,u=0.2992860184309325,v=0.30468510566698714,w=0.499309537187126,x=4.079066245688449 color=blue,shape=circle,flag=1,i=26501,u=0.917041248358781,v=0.7067105183468583,w=0.5154394499701502,x=4.101292991121372 color=purple,shape=triangle,flag=0,i=26522,u=0.6754598108207435,v=0.3305442348394383,w=0.4849008270132726,x=4.421771370015716 color=red,shape=square,flag=0,i=26530,u=0.9042880483893508,v=0.06099413346509874,w=0.5002171752588741,x=5.257614281771002 color=red,shape=triangle,flag=0,i=26536,u=0.5911006938150419,v=0.5897328899362432,w=0.46924347801582117,x=5.689484567234765 color=green,shape=circle,flag=0,i=26545,u=0.3623208792145606,v=0.23323485423986545,w=0.5115147126946714,x=5.35158134967828 color=blue,shape=square,flag=1,i=26569,u=0.48025331099895974,v=0.8560052655339313,w=0.4844948903153413,x=5.164289509475767 color=red,shape=square,flag=0,i=26582,u=0.507950835030121,v=0.3192740207145772,w=0.504631749329262,x=4.040353331683569 color=red,shape=square,flag=0,i=26588,u=0.07254679949440512,v=0.6541535535288294,w=0.5165597035686713,x=4.586347010975786 color=red,shape=circle,flag=0,i=26592,u=0.43312398233656857,v=0.5056084472447759,w=0.5204665906027872,x=5.272944869750703 color=yellow,shape=square,flag=1,i=26667,u=0.8193943439705966,v=0.3571625416889197,w=0.5197354635125064,x=6.349805668981319 color=green,shape=triangle,flag=0,i=26674,u=0.8974818674982699,v=0.8398510104447052,w=0.504866707561298,x=4.832797737251657 color=orange,shape=triangle,flag=1,i=26686,u=0.04603294317064843,v=0.8274510328240161,w=0.5509392322252182,x=4.406052498078572 color=blue,shape=triangle,flag=1,i=26698,u=0.6753583710894621,v=0.033878868508113835,w=0.48673787056689716,x=3.902086925821416 color=blue,shape=triangle,flag=1,i=26719,u=0.36348033419139625,v=0.42564458666416605,w=0.4845578473194667,x=6.037012575682556 color=red,shape=triangle,flag=0,i=26726,u=0.3978845033496452,v=0.33682159720116456,w=0.47469747027647335,x=4.285827356256915 color=yellow,shape=square,flag=1,i=26733,u=0.5922068663028015,v=0.607715160656803,w=0.512018033637484,x=5.3179879793495966 color=red,shape=square,flag=0,i=26735,u=0.3734819609294996,v=0.8114521124561588,w=0.5198949777829858,x=4.386531749315967 color=blue,shape=circle,flag=1,i=26736,u=0.34970888132444145,v=0.41316544141892086,w=0.5157366965598891,x=5.62632509012514 color=blue,shape=triangle,flag=1,i=26739,u=0.5647919738866877,v=0.8980528154775819,w=0.4888449665987099,x=3.9577522425539935 color=red,shape=circle,flag=0,i=26742,u=0.3692140462833122,v=0.3445567284238393,w=0.5219405948032102,x=4.348588858525835 color=purple,shape=square,flag=0,i=26744,u=0.7567417399385129,v=0.7321483500847341,w=0.5035884125480183,x=5.558552177118336 color=yellow,shape=triangle,flag=1,i=26754,u=0.049805181119724984,v=0.07633748393697415,w=0.5204239273387096,x=3.8751505956718617 color=green,shape=triangle,flag=0,i=26757,u=0.3137785606389706,v=0.5098674286094462,w=0.502420757954118,x=4.430605292351765 color=yellow,shape=square,flag=1,i=26780,u=0.6625606542527752,v=0.33646535319509685,w=0.512961621090926,x=7.407143859998317 color=red,shape=triangle,flag=0,i=26782,u=0.16255838938044764,v=0.3408280430640197,w=0.4811391819135336,x=5.080255646007596 color=red,shape=square,flag=0,i=26786,u=0.4538521860807089,v=0.5597484646792217,w=0.5178339711086923,x=4.608455337734896 color=red,shape=triangle,flag=0,i=26790,u=0.1707690161251476,v=0.023528819082283547,w=0.48419795105878805,x=4.362864304086654 color=yellow,shape=square,flag=0,i=26801,u=0.6010695989372874,v=0.4189750631188234,w=0.5149831670040176,x=4.474712997630571 color=red,shape=circle,flag=0,i=26809,u=0.7120666607155749,v=0.6157344434628239,w=0.5069250438685436,x=5.597903565077858 color=yellow,shape=circle,flag=1,i=26821,u=0.6483551915361128,v=0.5241706946302818,w=0.48308404809074823,x=5.770167037477518 color=red,shape=circle,flag=0,i=26823,u=0.8557606754079703,v=0.8900748004743387,w=0.512573624342546,x=7.381263471635822 color=red,shape=square,flag=0,i=26827,u=0.7589778175645088,v=0.1428198878012017,w=0.5121056494596288,x=4.316137434324415 color=blue,shape=square,flag=1,i=26831,u=0.493145176019827,v=0.9950557272941855,w=0.49681947293710677,x=5.6832376086334415 color=red,shape=triangle,flag=0,i=26866,u=0.9283350107867175,v=0.612963188584986,w=0.4937085214672017,x=4.97786623765733 color=red,shape=circle,flag=1,i=26886,u=0.059235361622315796,v=-0.009350846733344104,w=0.49281136495152006,x=4.479243454220769 color=green,shape=square,flag=0,i=26902,u=0.07138074830827745,v=0.5517750468831158,w=0.4676810082660399,x=3.519734133389314 color=purple,shape=square,flag=0,i=26909,u=0.07175308351536225,v=0.6143025641876438,w=0.5020292528114828,x=5.4184794600930095 color=purple,shape=triangle,flag=0,i=26930,u=0.157573255795327,v=0.08144978332400066,w=0.5039854567079847,x=5.997170026635426 color=green,shape=square,flag=1,i=26942,u=0.09716815988909777,v=0.7927349270307371,w=0.4610613865115853,x=6.2748830715508355 color=green,shape=square,flag=0,i=26949,u=0.8941441013712047,v=0.935822127858959,w=0.46275196948895925,x=6.14353759988564 color=red,shape=triangle,flag=1,i=26957,u=0.7516260678973634,v=0.16066535558026562,w=0.4955866943537309,x=5.6354394360722795 color=green,shape=triangle,flag=0,i=26961,u=0.6152902388419965,v=0.7809381487916995,w=0.5054556097312073,x=5.812298714426703 color=red,shape=square,flag=0,i=26965,u=0.03894676582954437,v=0.350088915999757,w=0.5065241332374407,x=3.617201779951147 color=green,shape=square,flag=1,i=26975,u=0.1327783350236732,v=0.23107366243469418,w=0.4607242538935895,x=5.069607877222087 color=red,shape=circle,flag=0,i=26978,u=0.018569739617654735,v=-0.03194322337457731,w=0.502229507390834,x=4.809141560510172 color=red,shape=square,flag=0,i=26991,u=0.3979104401693284,v=0.8390915097200012,w=0.49639748109734533,x=4.525809585380252 color=red,shape=square,flag=0,i=27002,u=0.8849391329404386,v=0.18449716375327663,w=0.49051190168963554,x=3.960786773523729 color=purple,shape=square,flag=0,i=27003,u=0.11418120119286423,v=0.9385428097252992,w=0.5003128385268326,x=4.890841454746883 color=purple,shape=square,flag=0,i=27007,u=0.967084318587712,v=0.6927643459518374,w=0.501351085996564,x=5.180338347509587 color=red,shape=square,flag=0,i=27010,u=0.6071714877268013,v=0.7670781186304179,w=0.49029936873777674,x=5.573549421771868 color=red,shape=circle,flag=0,i=27012,u=0.23151985811727704,v=0.21426530269768979,w=0.48824685168303644,x=5.822865694899559 color=yellow,shape=triangle,flag=1,i=27016,u=0.6436869282003247,v=0.0011049265762280713,w=0.5078277957119917,x=4.182492521039611 color=purple,shape=square,flag=0,i=27018,u=0.49797460610349686,v=0.47342334465527003,w=0.4997671880631366,x=5.336685828646352 color=red,shape=square,flag=0,i=27025,u=0.9419706682305191,v=0.4891732025632741,w=0.490914509252106,x=3.6718805702327546 color=blue,shape=circle,flag=1,i=27026,u=0.18394392717465924,v=0.8039172549565843,w=0.5150715717497438,x=5.64770642919999 color=blue,shape=triangle,flag=0,i=27037,u=0.12980259796060445,v=0.18026336961913858,w=0.49616217681976854,x=6.932131616951679 color=green,shape=triangle,flag=0,i=27045,u=0.8594739982162675,v=0.8402483279901528,w=0.50140100094159,x=4.232850167380566 color=red,shape=triangle,flag=0,i=27047,u=0.7192949111541754,v=0.7104158291845282,w=0.5045655577374201,x=5.321104654816632 color=red,shape=circle,flag=0,i=27049,u=0.1329538023465301,v=0.13935312367946467,w=0.4899459431292648,x=7.3582710994214695 color=yellow,shape=circle,flag=1,i=27050,u=0.29514029891902605,v=0.46010332762638595,w=0.4890158180231643,x=3.905946477701537 color=blue,shape=square,flag=1,i=27054,u=0.4157763158106056,v=0.6774927972814468,w=0.478898658779743,x=4.567792318648803 color=red,shape=square,flag=0,i=27057,u=0.8784685404971725,v=0.6459689274067033,w=0.4903855250702302,x=4.775974197515729 color=green,shape=circle,flag=1,i=27061,u=0.26471201060693683,v=0.8075122397243544,w=0.5035649233935773,x=5.113518581025738 color=yellow,shape=square,flag=1,i=27063,u=0.6335109384738952,v=0.836221339336087,w=0.5064353539355512,x=2.9159694471689637 color=blue,shape=square,flag=1,i=27074,u=0.9120004167525415,v=0.279756586348596,w=0.4698112186925432,x=7.458886959267756 color=yellow,shape=triangle,flag=1,i=27077,u=0.39639682463367354,v=0.2195907727576396,w=0.5128074828090089,x=7.192932454729483 color=red,shape=triangle,flag=1,i=27090,u=0.43696849807152205,v=0.21238576474516435,w=0.504958914415651,x=5.821054895827014 color=yellow,shape=square,flag=1,i=27095,u=0.32785307516216033,v=0.03685688983277047,w=0.5141035883406879,x=5.913067557895645 color=red,shape=square,flag=0,i=27097,u=0.06345071094583887,v=0.14661452403816855,w=0.5015064287162756,x=4.115747871418917 color=red,shape=circle,flag=0,i=27099,u=0.31438720916106744,v=0.34683124248397534,w=0.4860010085182583,x=5.2599775662374535 color=purple,shape=square,flag=0,i=27104,u=0.6099668304268366,v=0.667745199921237,w=0.48804930078899067,x=5.431534246439725 color=red,shape=square,flag=0,i=27107,u=0.42251922393440633,v=0.6371943024345906,w=0.5060698378439741,x=6.052740848899056 color=purple,shape=square,flag=0,i=27157,u=0.17414717818583236,v=0.47937732442953096,w=0.48419494496563315,x=3.671755192418631 color=red,shape=triangle,flag=0,i=27177,u=0.23185109261094894,v=0.034986375486128596,w=0.5016399240889347,x=6.374065500026309 color=blue,shape=triangle,flag=0,i=27183,u=0.0579740726355894,v=0.23089820986417708,w=0.4925714232253151,x=6.54126310431144 color=purple,shape=square,flag=0,i=27190,u=0.5996379988697156,v=0.05368029958695486,w=0.48130952805473565,x=5.613797148097022 color=red,shape=circle,flag=0,i=27195,u=0.9927922672983917,v=0.9885644181515599,w=0.4838279367068267,x=4.980618582527498 color=red,shape=circle,flag=0,i=27202,u=0.306283429487599,v=0.37845399220216785,w=0.48375325082578646,x=5.035777489471395 color=orange,shape=square,flag=1,i=27209,u=0.027482063658017086,v=0.9937591484460131,w=0.4607590345661461,x=6.782352951506791 color=blue,shape=square,flag=0,i=27253,u=0.8708192185781217,v=0.3490018512053118,w=0.465835813960034,x=4.846040802276717 color=blue,shape=circle,flag=1,i=27256,u=0.14638731247834025,v=0.05859365218368173,w=0.524593574733679,x=4.481450012867277 color=blue,shape=circle,flag=1,i=27259,u=0.8452280461714454,v=0.7632098737690225,w=0.5195577504163494,x=4.395250116670545 color=blue,shape=square,flag=0,i=27281,u=0.8935471500157395,v=0.291760682455656,w=0.46603709395381887,x=4.069117453568041 color=purple,shape=square,flag=1,i=27293,u=0.4996378034256863,v=0.044510840223987436,w=0.4883543151474372,x=2.4608133232436096 color=yellow,shape=triangle,flag=1,i=27310,u=0.4925088483341782,v=0.17324050954142478,w=0.5157789264233296,x=3.7466570937455193 color=red,shape=circle,flag=0,i=27346,u=0.8018347469606378,v=0.8556143933254134,w=0.48809505468949543,x=5.645395525802054 color=red,shape=square,flag=0,i=27357,u=0.16320105087127168,v=0.7034699250316768,w=0.5284048355933586,x=5.561550006587346 color=blue,shape=triangle,flag=0,i=27363,u=0.4130329448846436,v=0.3519352908730169,w=0.47636229388247153,x=5.151462703186516 color=red,shape=square,flag=1,i=27378,u=0.10324418612370423,v=0.7659582375643537,w=0.5328449585521345,x=5.228504681113512 color=yellow,shape=triangle,flag=1,i=27384,u=0.7437989559360465,v=0.29747205449753,w=0.5161277444919578,x=4.256533611622648 color=green,shape=square,flag=1,i=27388,u=0.8648037869602436,v=0.8950542870075304,w=0.44090419357036903,x=5.947837191551083 color=red,shape=square,flag=1,i=27393,u=0.7757392514339877,v=0.24849789295030322,w=0.5373998300769587,x=5.138218296772785 color=red,shape=square,flag=1,i=27402,u=0.9867977535720223,v=0.3715902374816953,w=0.5469161715246043,x=5.274005079103856 color=purple,shape=circle,flag=0,i=27404,u=0.8359462835824559,v=0.904962756893604,w=0.5000158834208963,x=4.873808035972373 color=red,shape=circle,flag=1,i=27443,u=0.595746766891408,v=0.6336257467148168,w=0.4893082024258384,x=5.331159292619122 color=yellow,shape=circle,flag=1,i=27446,u=0.31985379810344927,v=0.9606880981487582,w=0.48923490010805043,x=3.868962208355834 color=blue,shape=triangle,flag=1,i=27448,u=0.8268125742916685,v=0.3998703452412905,w=0.491866372215197,x=5.721832926157184 color=yellow,shape=circle,flag=1,i=27475,u=0.5197098161886466,v=0.8631108523738137,w=0.4873454769950642,x=4.572074896210043 color=yellow,shape=circle,flag=1,i=27478,u=0.22652757727260775,v=0.31057611580278777,w=0.4882687266266591,x=3.9518041003009743 color=yellow,shape=triangle,flag=0,i=27482,u=0.28711919643251926,v=0.1908980004274613,w=0.511321293147556,x=5.95014763862045 color=yellow,shape=circle,flag=1,i=27497,u=0.6426659729491119,v=0.512286546088875,w=0.4873892482159393,x=5.418381233739223 color=green,shape=square,flag=0,i=27522,u=0.2515110008549335,v=0.30576319108663674,w=0.45496365129715727,x=5.621270062016968 color=green,shape=square,flag=0,i=27539,u=0.19429792771798182,v=0.8626171349905406,w=0.45721369281973695,x=5.502840396776105 color=red,shape=square,flag=0,i=27551,u=0.9555775298319636,v=0.16758963236152868,w=0.5212935602879686,x=4.739308567158005 color=red,shape=square,flag=0,i=27552,u=0.6849432946111895,v=0.027592626375598783,w=0.5208084973864869,x=6.5075641867890655 color=red,shape=square,flag=1,i=27554,u=0.009602541713840895,v=0.05362595373939616,w=0.5233716813483418,x=5.0350827570868075 color=red,shape=square,flag=0,i=27565,u=0.34581503007236913,v=0.17899844606460158,w=0.5210636867240218,x=6.385385736683507 color=red,shape=square,flag=1,i=27573,u=0.07471037824493965,v=0.6262793616745357,w=0.5153863607919399,x=5.682195343023874 color=purple,shape=circle,flag=0,i=27582,u=0.4115490527891492,v=0.6257552515938879,w=0.5022826610413894,x=5.707371421220958 color=blue,shape=square,flag=1,i=27587,u=0.5188945850183555,v=0.060462405121827656,w=0.4663858141382177,x=7.730769429050152 color=purple,shape=triangle,flag=0,i=27597,u=0.08688693755889765,v=0.8272321009016912,w=0.5298275526308516,x=3.838250193058149 color=purple,shape=triangle,flag=1,i=27619,u=0.46684821728741666,v=0.4504889519273011,w=0.5344357533574376,x=4.611888780123441 color=purple,shape=circle,flag=0,i=27620,u=0.6328003446343509,v=0.5642591609818407,w=0.5050139278238139,x=3.010600022051086 color=yellow,shape=square,flag=1,i=27622,u=0.20817032290921367,v=0.09530748794291277,w=0.4972031485293172,x=3.693278006557573 color=purple,shape=square,flag=1,i=27627,u=0.9627137723595399,v=0.36154226102993925,w=0.49943739373158363,x=5.59694022079315 color=red,shape=square,flag=0,i=27630,u=0.08967078286426255,v=0.9024726102483163,w=0.5077653214700644,x=4.853782928393596 color=purple,shape=triangle,flag=0,i=27637,u=0.6999288940472289,v=0.07174878048151023,w=0.53355854374135,x=4.696012468305135 color=red,shape=square,flag=0,i=27640,u=0.34235540992001123,v=0.9218228402491622,w=0.507903004838109,x=3.1816087937690227 color=red,shape=triangle,flag=0,i=27650,u=0.3818340431310262,v=0.41679324652962124,w=0.4922658403993222,x=5.667307704492823 color=blue,shape=circle,flag=0,i=27653,u=0.464677779239979,v=0.8970598256121256,w=0.5097040931846893,x=2.065092687014253 color=red,shape=square,flag=1,i=27656,u=0.20635715362395446,v=0.5797692900851055,w=0.5076327049374316,x=4.669530325841901 color=red,shape=triangle,flag=1,i=27659,u=0.07002267827379027,v=0.3918314682748526,w=0.5018377855725775,x=5.862375316095723 color=green,shape=circle,flag=0,i=27662,u=0.4449199044459794,v=0.9241400214364984,w=0.5017264113861387,x=8.162672278687909 color=red,shape=triangle,flag=0,i=27666,u=0.8047760942634103,v=0.7243848179939881,w=0.5058984618910746,x=4.751028824110264 color=yellow,shape=triangle,flag=1,i=27678,u=0.3495016777010975,v=0.16406479675280117,w=0.5079909930130683,x=5.870896567944311 color=red,shape=triangle,flag=0,i=27679,u=0.03734375273936086,v=0.023093256255436567,w=0.5041131920894031,x=4.865632047419705 color=red,shape=square,flag=0,i=27699,u=0.8348850291263635,v=0.9711089524453331,w=0.5039050945132909,x=6.34054080143459 color=red,shape=circle,flag=1,i=27703,u=0.2374998332106213,v=0.24054242347881033,w=0.49048542219970176,x=4.420484413483621 color=yellow,shape=triangle,flag=1,i=27704,u=0.378749891413391,v=0.30677567180473864,w=0.5027680907856005,x=4.0894979530794995 color=purple,shape=square,flag=0,i=27706,u=0.22285780338565875,v=0.9401926667799455,w=0.4970155192388356,x=6.399626524791413 color=purple,shape=triangle,flag=0,i=27717,u=0.6329116506494805,v=0.9924508267796331,w=0.5297092801300398,x=3.534766360258851 color=red,shape=square,flag=0,i=27756,u=0.6139556553654268,v=0.21632802938267093,w=0.5080062411290104,x=5.910432834133549 color=red,shape=square,flag=0,i=27761,u=0.7440212958523756,v=0.2883670331114694,w=0.509640933477473,x=5.799677046181098 color=red,shape=circle,flag=0,i=27779,u=0.7471829399335801,v=0.7730349227309443,w=0.4807281271523543,x=4.722671106315414 color=red,shape=circle,flag=0,i=27796,u=0.09913668955736188,v=0.12309413644776823,w=0.4812725998527279,x=3.2685228072959966 color=yellow,shape=square,flag=1,i=27798,u=0.06602314113396235,v=0.38048862897183,w=0.4863492889576679,x=4.073121770023163 color=blue,shape=triangle,flag=1,i=27805,u=0.1675442679305863,v=0.4260256400670034,w=0.4805912877499991,x=3.7795648659917718 color=purple,shape=square,flag=0,i=27808,u=0.12059355427027652,v=0.6183725870239523,w=0.5067880151851718,x=5.005695689963016 color=blue,shape=square,flag=1,i=27822,u=0.15791406718752676,v=0.46308292999864875,w=0.4680990907225799,x=7.477062097665995 color=green,shape=circle,flag=1,i=27828,u=0.8610613969164524,v=0.7616928187618666,w=0.49542555785444103,x=5.595612561622347 color=purple,shape=square,flag=0,i=27837,u=0.7443264628044348,v=0.4172392050050805,w=0.5091107176240225,x=5.68174721554891 color=red,shape=triangle,flag=0,i=27869,u=0.02256841682637889,v=0.13495941926847932,w=0.5179253505298245,x=4.447884040373096 color=purple,shape=square,flag=0,i=27883,u=0.4204729201142918,v=0.2232691085152737,w=0.5096324534182842,x=4.2797301275778805 color=purple,shape=square,flag=0,i=27887,u=0.23847431008399256,v=0.7912519910254534,w=0.5096021790288062,x=5.099767570769067 color=red,shape=circle,flag=0,i=27891,u=0.6896288908444705,v=0.6746511203646123,w=0.47682211607005803,x=5.9568709380573095 color=red,shape=triangle,flag=0,i=27900,u=0.6474025704935013,v=0.4470506022593155,w=0.5092203333009371,x=6.516576795606952 color=purple,shape=square,flag=0,i=27927,u=0.5473078320886167,v=0.48795166064175244,w=0.5077680077401037,x=6.335847925394288 color=green,shape=square,flag=0,i=27928,u=0.9726064119317577,v=0.637489925958458,w=0.4754048928668529,x=5.26387266033665 color=purple,shape=circle,flag=0,i=27935,u=0.7230620578978485,v=0.4038691786447718,w=0.49980639912757174,x=3.3490820453604635 color=green,shape=triangle,flag=0,i=27962,u=0.5179996429864556,v=0.2904084474502592,w=0.4947638815701277,x=5.390562875088569 color=red,shape=square,flag=0,i=27963,u=0.8254546902733595,v=0.06995190839188759,w=0.5224087205105586,x=5.1025712023678205 color=red,shape=square,flag=0,i=27981,u=0.5625714121266934,v=0.6827018255059881,w=0.5211543825175695,x=6.5205671688152025 color=red,shape=triangle,flag=0,i=27983,u=0.5909447310305467,v=0.7727845735988802,w=0.5040170086300086,x=4.3563406241878235 color=yellow,shape=triangle,flag=1,i=28018,u=0.5823920553824754,v=0.5251085207929088,w=0.502942741249661,x=5.235053087398988 color=red,shape=square,flag=0,i=28032,u=0.8751427670157677,v=0.08765677133120198,w=0.5219893289230496,x=5.166286759636703 color=red,shape=circle,flag=0,i=28043,u=0.8201835387872295,v=0.8125315868394274,w=0.4932394616038248,x=6.191450391613185 color=purple,shape=triangle,flag=0,i=28092,u=0.6103293210508083,v=0.04683198291327806,w=0.5241885869286942,x=4.969465257372141 color=red,shape=triangle,flag=0,i=28099,u=0.5966358146123887,v=0.4407076440143338,w=0.5279394214949618,x=4.334388730479109 color=orange,shape=triangle,flag=0,i=28104,u=0.35235193508421536,v=0.661198864517614,w=0.5530621321078157,x=5.911061113056437 color=red,shape=square,flag=0,i=28114,u=0.6220022931168655,v=0.5169139914232396,w=0.533259176807009,x=4.722275519919795 color=red,shape=triangle,flag=1,i=28117,u=0.4404141642686237,v=0.6828470960510071,w=0.5230862955577851,x=5.0411548851929915 color=yellow,shape=square,flag=1,i=28130,u=0.08260572730519622,v=0.8079246074496624,w=0.47933933197211814,x=4.161035066773145 color=red,shape=triangle,flag=0,i=28131,u=0.6889410460117044,v=0.7967235359798783,w=0.5308960244383736,x=1.8798278038948748 color=yellow,shape=square,flag=1,i=28139,u=0.5767346794735991,v=0.7820635235755214,w=0.4851128393917242,x=4.267436892449345 color=purple,shape=square,flag=0,i=28150,u=0.49198144840493263,v=0.3592039099006533,w=0.5150019134021703,x=4.3305845116301676 color=purple,shape=triangle,flag=0,i=28169,u=0.09511510612118623,v=0.8581454141261488,w=0.5292525160832064,x=6.343618639171265 color=red,shape=circle,flag=1,i=28192,u=0.4896542796053409,v=0.43555404834955835,w=0.5061445693289723,x=1.8676763634866083 color=blue,shape=square,flag=1,i=28204,u=0.692835444529816,v=0.04007915921360583,w=0.4854016545305637,x=6.26430309138549 color=orange,shape=square,flag=0,i=28216,u=0.03240694152552326,v=0.7280435994419837,w=0.46652430705242015,x=4.61096196721505 color=yellow,shape=square,flag=1,i=28223,u=0.7465917674868074,v=0.5255631584796615,w=0.49490311329289444,x=5.396551766535104 color=yellow,shape=circle,flag=1,i=28243,u=0.8221628706360736,v=0.49400737048368715,w=0.4816245854796019,x=2.6613667538874863 color=red,shape=triangle,flag=1,i=28247,u=0.13974402975419897,v=0.8878899161611569,w=0.540739038438854,x=4.234622542668613 color=red,shape=circle,flag=0,i=28269,u=0.11015403663431544,v=0.07331712170462029,w=0.49966100234162975,x=5.46812151491859 color=red,shape=square,flag=0,i=28274,u=0.14329262113512875,v=0.25080055020873715,w=0.5143616159652669,x=5.958552657748318 color=yellow,shape=triangle,flag=1,i=28275,u=0.29946390397797285,v=0.8648264589694957,w=0.4959026555861158,x=3.6139060690920535 color=red,shape=square,flag=1,i=28288,u=0.9678835647143682,v=0.7510274811533107,w=0.5117589561417298,x=5.449686753627403 color=blue,shape=circle,flag=1,i=28295,u=0.7187456820618605,v=0.7800105263090523,w=0.5128302738159971,x=5.814906097068486 color=green,shape=triangle,flag=1,i=28309,u=0.3172039589388749,v=0.2426766886611288,w=0.49662884243599864,x=7.166338198474645 color=red,shape=square,flag=0,i=28316,u=0.9050632457009437,v=0.08013430995007564,w=0.5183931905742426,x=5.069104705781542 color=red,shape=square,flag=0,i=28325,u=0.4866877061118874,v=0.12611565635691657,w=0.5181859053769521,x=4.187709661694755 color=red,shape=square,flag=1,i=28334,u=0.07933833185722827,v=0.45710010917929567,w=0.5240004198956381,x=3.3067697246355507 color=red,shape=triangle,flag=0,i=28336,u=0.5477935719397388,v=0.5778041783312308,w=0.5491380786608641,x=6.778257564252712 color=purple,shape=circle,flag=0,i=28349,u=0.014649561627469776,v=0.016628037498831016,w=0.5080917018135109,x=4.115665653213783 color=red,shape=triangle,flag=1,i=28359,u=0.444021185260022,v=0.18577745918453437,w=0.5594079754167716,x=5.707642377018594 color=blue,shape=triangle,flag=1,i=28361,u=0.11974901409356431,v=0.20782183765487194,w=0.4938648861813803,x=6.374026910056023 color=red,shape=circle,flag=0,i=28373,u=0.45322966943369203,v=0.3766007589878985,w=0.49144228366048304,x=5.068775371375214 color=red,shape=square,flag=0,i=28374,u=0.4552045002651459,v=0.8960703347111706,w=0.5167618469826778,x=3.8872465881211036 color=red,shape=circle,flag=0,i=28375,u=0.7601252595503035,v=0.8563107051708324,w=0.49065886949738863,x=6.6188545373573815 color=purple,shape=square,flag=0,i=28387,u=0.39662610903491446,v=0.019632445338159443,w=0.5084619864070486,x=4.010086679219019 color=orange,shape=triangle,flag=0,i=28400,u=0.7725692396808218,v=0.1015316356467284,w=0.553888820412427,x=5.6571258883842725 color=red,shape=triangle,flag=1,i=28413,u=0.435123512213479,v=0.8542018109107539,w=0.5514452473103078,x=2.6615138644260043 color=green,shape=triangle,flag=0,i=28416,u=0.8272587749972624,v=0.464202592461749,w=0.5004356810233123,x=1.6542809643179757 color=yellow,shape=triangle,flag=1,i=28420,u=0.41150951181462425,v=0.34227334370701024,w=0.4936296179646732,x=5.234547141904993 color=red,shape=circle,flag=0,i=28438,u=0.6520688243034927,v=0.7433153028370248,w=0.4854580578258922,x=3.44516472776952 color=red,shape=triangle,flag=1,i=28463,u=0.42838053735247006,v=0.13215152238818328,w=0.5383370861147231,x=4.567407341731323 color=red,shape=triangle,flag=0,i=28468,u=0.8558994881535174,v=0.009832768220795263,w=0.5329243024519078,x=6.036368454313947 color=purple,shape=circle,flag=0,i=28485,u=0.14857889589995465,v=0.13375004135055546,w=0.49946183732132876,x=5.274396953004432 color=red,shape=square,flag=0,i=28515,u=0.42279600641319415,v=0.38525179660689246,w=0.5022605258148014,x=5.874738012049626 color=red,shape=square,flag=0,i=28519,u=0.6047087787686957,v=0.2011327061047723,w=0.4997450764998767,x=6.093118155420797 color=red,shape=square,flag=1,i=28528,u=0.8719577649271965,v=0.6195031538320895,w=0.4925340906284094,x=4.860720126840298 color=red,shape=circle,flag=0,i=28530,u=0.518491003490688,v=0.48831750092827675,w=0.4820843240448057,x=6.404656737891173 color=red,shape=circle,flag=0,i=28532,u=0.1036937443679321,v=0.13055232636941888,w=0.486326113594918,x=4.749575024881765 color=purple,shape=circle,flag=1,i=28538,u=0.5373399403106417,v=0.8585722405084844,w=0.49995465219226365,x=4.94154045386465 color=yellow,shape=triangle,flag=1,i=28545,u=0.6012124290585683,v=0.011694530103482204,w=0.48820915498470346,x=6.926808443759181 color=red,shape=triangle,flag=0,i=28571,u=0.6782716708746045,v=0.11487896052532887,w=0.5311985571143776,x=6.548279740802664 color=red,shape=square,flag=1,i=28579,u=0.6341765345734965,v=0.4342412850369973,w=0.4862874515734766,x=5.324920904279886 color=red,shape=triangle,flag=0,i=28583,u=0.7209003844516976,v=0.7742979018837206,w=0.5301192502056737,x=2.3471488869191846 color=purple,shape=circle,flag=0,i=28591,u=0.4895230123400852,v=0.06847480526481375,w=0.49816527507484726,x=7.049750730407531 color=red,shape=triangle,flag=1,i=28592,u=0.10212388974059594,v=0.11756040467444218,w=0.5292156702898925,x=5.615265861628302 color=green,shape=triangle,flag=0,i=28593,u=0.9518567493039518,v=0.3714581372562319,w=0.5037757628393118,x=3.898496861984969 color=red,shape=square,flag=0,i=28619,u=0.054184563081332904,v=0.9109809262653299,w=0.4857657041842572,x=4.107263075140758 color=yellow,shape=circle,flag=0,i=28622,u=0.013454807311805372,v=0.9905880675689503,w=0.49532016377431287,x=5.700938078929518 color=red,shape=square,flag=0,i=28625,u=0.772986059238039,v=0.12879777751306332,w=0.48598903118270675,x=7.689898593528845 color=blue,shape=circle,flag=0,i=28641,u=0.39447743623569687,v=0.5451967663150283,w=0.5236123997650195,x=6.263661718783337 color=green,shape=circle,flag=1,i=28645,u=0.36415504056281234,v=0.7291708992279763,w=0.49610326402964133,x=4.47615097974263 color=green,shape=triangle,flag=1,i=28650,u=0.23590000244352172,v=0.4450954747254223,w=0.5060461258086376,x=5.234249911849379 color=green,shape=triangle,flag=0,i=28657,u=0.35961305834380275,v=0.5916530676321765,w=0.5071847812892837,x=4.86664053649539 color=red,shape=circle,flag=1,i=28686,u=0.4867383639531945,v=0.5332984967031007,w=0.48915065317892803,x=6.207955492027497 color=red,shape=square,flag=1,i=28717,u=0.325526826252045,v=0.14475427039329924,w=0.5026684617980136,x=4.459868028317356 color=purple,shape=triangle,flag=0,i=28724,u=0.44601457221875296,v=0.04588051810392901,w=0.5252460439764117,x=5.3087463180890415 color=blue,shape=circle,flag=1,i=28779,u=0.504177557392305,v=0.38260202252665243,w=0.518795685894506,x=4.452651562487838 color=yellow,shape=square,flag=0,i=28783,u=0.8711034844152754,v=0.09422856231965415,w=0.46198797212587217,x=4.650091045932945 color=blue,shape=triangle,flag=1,i=28791,u=0.5411492486352146,v=0.8216878516902764,w=0.4973333351873608,x=3.3397907289223743 color=blue,shape=circle,flag=1,i=28804,u=0.7117191118495163,v=0.7646894831760018,w=0.5199764598042789,x=6.272470164784568 color=green,shape=triangle,flag=0,i=28818,u=0.5616601785051137,v=0.8308456444697,w=0.5099418522598458,x=5.348455968319544 color=red,shape=square,flag=0,i=28832,u=0.9709121994904566,v=0.05023287952536082,w=0.5140393954673209,x=6.152082977477377 color=red,shape=square,flag=0,i=28858,u=0.3270910098794877,v=0.32305146210774927,w=0.5180245345735146,x=4.683131232137949 color=purple,shape=circle,flag=0,i=28875,u=0.47616596651561016,v=0.050538567510263976,w=0.5164027019751546,x=6.140565260543386 color=red,shape=circle,flag=1,i=28902,u=0.48508290124584896,v=0.5069274634598699,w=0.4943284672673943,x=4.510585095038166 color=red,shape=square,flag=0,i=28923,u=0.9866074000624323,v=0.9048405415491704,w=0.5026479964525619,x=3.8971718375534503 color=red,shape=triangle,flag=0,i=28933,u=0.6010052893949556,v=0.45313889523796325,w=0.5177194901393425,x=5.387599773135471 color=blue,shape=triangle,flag=1,i=28938,u=0.83970698437518,v=0.8605273621938,w=0.4993030619297307,x=4.2636942261972575 color=green,shape=circle,flag=0,i=28950,u=0.06048151605792207,v=0.5496286632556652,w=0.48885752580835623,x=4.881327938140004 color=yellow,shape=circle,flag=0,i=28960,u=0.5685696262018551,v=0.3615634458306888,w=0.5224889106979393,x=5.240556990437562 color=yellow,shape=square,flag=1,i=28964,u=0.23260532778127208,v=0.14471852025946008,w=0.4721501628687404,x=4.094010848551506 color=yellow,shape=circle,flag=1,i=28989,u=0.7375423729453301,v=0.1547304786896896,w=0.5266972007074195,x=4.910478492695728 color=red,shape=square,flag=0,i=28991,u=0.7333848300888832,v=0.7577830768995295,w=0.5043754812940772,x=6.916116425809036 color=red,shape=triangle,flag=0,i=28992,u=0.047493325966395994,v=0.01339901819414746,w=0.5226556002753617,x=6.896576321225491 color=red,shape=square,flag=0,i=29009,u=0.967010822069736,v=0.20834003921694721,w=0.5129159759673435,x=4.196738316261908 color=yellow,shape=triangle,flag=1,i=29018,u=0.6251948074595004,v=0.39379628196691974,w=0.4817350011030718,x=3.559609927977327 color=red,shape=triangle,flag=0,i=29025,u=0.18795762906756586,v=0.6816232557388878,w=0.513069094501169,x=3.824453301290785 color=red,shape=circle,flag=0,i=29027,u=0.8907508892002952,v=0.9103227266687736,w=0.5003594922691517,x=2.921623838308927 color=red,shape=square,flag=1,i=29046,u=0.6205763124315744,v=0.8750577460978215,w=0.5105961405064133,x=3.438063265558912 color=red,shape=triangle,flag=0,i=29053,u=0.536998466751463,v=0.21260903230242956,w=0.5174728217832933,x=2.8965095580760205 color=purple,shape=triangle,flag=0,i=29072,u=0.28868344480040287,v=0.6515567652417326,w=0.5337921851714044,x=4.827509877339264 color=red,shape=triangle,flag=0,i=29083,u=0.4128684878609814,v=0.15831517319687705,w=0.517168686172276,x=6.111325206020439 color=orange,shape=square,flag=1,i=29084,u=0.5544759360176078,v=0.3879294106933915,w=0.47367898941866904,x=3.850575297664433 color=red,shape=circle,flag=0,i=29087,u=0.8442961850889149,v=0.9211853852377734,w=0.513023774474256,x=4.67605032745099 color=red,shape=triangle,flag=0,i=29097,u=0.7116352590682079,v=0.6968519252423728,w=0.5167586512729616,x=5.351935187745752 color=green,shape=triangle,flag=0,i=29117,u=0.8890443071256672,v=0.4059821142795865,w=0.4895360904090859,x=6.7361965321945645 color=red,shape=circle,flag=0,i=29120,u=0.17001534880056657,v=0.09509308046699194,w=0.5150981648158417,x=4.540104411367356 color=red,shape=circle,flag=1,i=29127,u=0.3027848718935999,v=0.38632094440380577,w=0.5142607773786037,x=5.336150858051432 color=yellow,shape=circle,flag=1,i=29148,u=0.22844561342706882,v=0.03373482377106363,w=0.5235083488338232,x=3.609216314372453 color=green,shape=square,flag=1,i=29155,u=0.7652166571880631,v=0.5205160934567817,w=0.4389380692685188,x=5.110816505630562 color=red,shape=triangle,flag=0,i=29169,u=0.14993492488041094,v=0.9522037282232144,w=0.5212752361427919,x=4.197940675836989 color=red,shape=square,flag=1,i=29170,u=0.42449985737250007,v=0.37993195712480254,w=0.5216935556606677,x=6.401308353090935 color=blue,shape=triangle,flag=1,i=29181,u=0.9191718701757283,v=0.3507778006364465,w=0.508947630687695,x=3.305380565048965 color=purple,shape=triangle,flag=0,i=29188,u=0.10405006910190873,v=0.0989291305444161,w=0.5282855529095846,x=5.85950934637179 color=red,shape=square,flag=0,i=29190,u=0.6103391230374575,v=0.24321145925900345,w=0.5198293990495322,x=5.565941969578737 color=red,shape=circle,flag=1,i=29194,u=0.7345324373176755,v=0.6848713724324484,w=0.5182995572301282,x=6.010468108010923 color=red,shape=square,flag=1,i=29211,u=0.040892145299960214,v=0.08769672404207951,w=0.52472320010642,x=4.3013110270557045 color=yellow,shape=square,flag=0,i=29229,u=0.20572299024789398,v=0.04063121378724688,w=0.4779765376227126,x=6.995608150734949 color=blue,shape=square,flag=1,i=29232,u=0.23563382296451874,v=0.40269448294757626,w=0.5153712844818279,x=6.583952920697662 color=green,shape=triangle,flag=0,i=29235,u=0.5098376714442905,v=0.4413895380969317,w=0.47709407018436606,x=5.776635608162773 color=green,shape=circle,flag=0,i=29241,u=0.4869799736767464,v=0.46460778026228566,w=0.4820819630867842,x=5.218998228321822 color=red,shape=triangle,flag=0,i=29246,u=0.42063578804348967,v=0.686722550476034,w=0.5242797362851747,x=2.9640388504853026 color=red,shape=square,flag=0,i=29251,u=0.5788924633356175,v=0.4387942346286279,w=0.522098394638534,x=3.6449052201269474 color=purple,shape=square,flag=0,i=29266,u=0.05757123737932757,v=0.5347868515607477,w=0.49873505757516123,x=4.681783465239761 color=green,shape=square,flag=0,i=29271,u=0.07944596322095798,v=0.43612401065227724,w=0.4477435516575735,x=4.533079292312345 color=green,shape=triangle,flag=0,i=29285,u=0.7317958102801904,v=0.8857330888047565,w=0.4739073656584723,x=5.158622325287397 color=red,shape=triangle,flag=0,i=29295,u=0.5961907954222443,v=0.4284237720726396,w=0.5218886057670831,x=4.653690663478196 color=green,shape=triangle,flag=0,i=29303,u=0.7282365279615635,v=0.23844314050421345,w=0.4740329911182216,x=3.9528466067825216 color=blue,shape=circle,flag=0,i=29308,u=0.509926504223778,v=0.7611953888370436,w=0.5088669165482629,x=5.905041755023697 color=red,shape=triangle,flag=0,i=29320,u=0.2121522897086795,v=0.2684182945189899,w=0.5195398195519959,x=6.608822214135164 color=purple,shape=triangle,flag=0,i=29323,u=0.6830294309255329,v=0.775679808410577,w=0.5325456015236554,x=7.890569948348088 color=yellow,shape=triangle,flag=0,i=29324,u=0.6419903566927515,v=0.1388854726679677,w=0.49894990364901726,x=5.781778375798997 color=orange,shape=square,flag=1,i=29326,u=0.5575885117103254,v=0.6337165921269444,w=0.4704135138012962,x=5.518048123035133 color=red,shape=triangle,flag=0,i=29327,u=0.9858604425566663,v=0.6950368294498945,w=0.5207873085930961,x=6.47088038302435 color=red,shape=triangle,flag=0,i=29338,u=0.8754579607080465,v=0.43136199359132943,w=0.5222736195093759,x=6.788377767991445 color=red,shape=triangle,flag=0,i=29349,u=0.547371438476399,v=0.8837882300132288,w=0.5216647911783672,x=5.654792046823208 color=blue,shape=triangle,flag=0,i=29350,u=0.213178409911158,v=0.38311577989553414,w=0.5168770549447369,x=4.504396475273677 color=red,shape=triangle,flag=0,i=29351,u=0.30636312848825176,v=0.6778355136614823,w=0.5229651641401726,x=5.533291489414755 color=yellow,shape=triangle,flag=1,i=29375,u=0.9375131092402302,v=0.8298702555736749,w=0.5014923386563265,x=6.003667707510409 color=purple,shape=square,flag=0,i=29376,u=0.6906419545463135,v=0.002627950645080257,w=0.48707640086389775,x=3.2685374131930467 color=red,shape=circle,flag=0,i=29377,u=0.31917165163209604,v=0.3181528144304471,w=0.5221809675214947,x=7.713420122508251 color=purple,shape=square,flag=0,i=29396,u=0.7005408993695096,v=0.6214721124588273,w=0.48381148322077444,x=6.1575917605577635 color=purple,shape=triangle,flag=0,i=29416,u=0.2698009708541149,v=0.9184834137984218,w=0.5380879564273844,x=6.3752631737619465 color=blue,shape=circle,flag=1,i=29418,u=0.9208117165394312,v=0.1500342494124729,w=0.5029888822096371,x=4.668006421360798 color=red,shape=circle,flag=0,i=29431,u=0.37992588141635897,v=0.4621092885060484,w=0.5244298248611731,x=5.787139082459711 color=red,shape=triangle,flag=0,i=29435,u=0.6033161080944892,v=0.908086594516721,w=0.5205284317594274,x=4.603599447724595 color=purple,shape=square,flag=0,i=29440,u=0.7663056748567126,v=0.5228817639784796,w=0.4853791515867845,x=4.7537605263894305 color=red,shape=square,flag=1,i=29463,u=0.5940784768486077,v=0.7950023781325019,w=0.5184868753111943,x=5.921459456017554 color=blue,shape=square,flag=1,i=29469,u=0.03096021057027154,v=0.8698958307719932,w=0.5244663662254642,x=4.80105659779744 color=red,shape=circle,flag=0,i=29492,u=0.7431228129642022,v=0.66282091721515,w=0.519385088806541,x=3.081281871621522 color=red,shape=square,flag=0,i=29506,u=0.18414286445228867,v=0.5439263685451944,w=0.5142522160125361,x=6.31795492767845 color=red,shape=triangle,flag=1,i=29509,u=0.8229158005651677,v=0.5296418966706153,w=0.5263650920070448,x=4.920673641333984 color=red,shape=circle,flag=1,i=29512,u=0.6150568263705181,v=0.6426552855844806,w=0.5187425632585658,x=4.287822886345743 color=red,shape=square,flag=1,i=29521,u=0.4210838290352793,v=0.6698904561435841,w=0.5109098565338447,x=3.225364527552239 color=purple,shape=square,flag=0,i=29530,u=0.6733360800094544,v=0.681708177032319,w=0.48602321404467064,x=5.271419797629661 color=blue,shape=square,flag=1,i=29541,u=0.21220839536376723,v=0.4567711453708774,w=0.5265327618268626,x=3.135476309872564 color=red,shape=circle,flag=0,i=29549,u=0.8742717427360113,v=0.9302430417547757,w=0.5196860677393458,x=5.516121902941492 color=purple,shape=triangle,flag=0,i=29561,u=0.4513617376250799,v=0.3319877007295401,w=0.532290161585172,x=5.850451112686195 color=purple,shape=circle,flag=0,i=29578,u=0.18178438177762435,v=0.45439238386916025,w=0.512912953421344,x=5.2531512898673745 color=red,shape=square,flag=1,i=29583,u=0.0034019037355421666,v=0.372980961867854,w=0.5087102952780208,x=4.811340334353258 color=purple,shape=triangle,flag=0,i=29590,u=0.44687363035531613,v=0.16483290678374607,w=0.5291137612729291,x=5.924271068238883 color=red,shape=triangle,flag=0,i=29593,u=0.08478579259449859,v=0.030280726143774084,w=0.5220587031425125,x=5.683160475911261 color=blue,shape=triangle,flag=1,i=29603,u=0.3870166741784411,v=0.7780611833095648,w=0.5222349597624755,x=3.2736604694145206 color=purple,shape=circle,flag=0,i=29607,u=0.016501338804909116,v=0.2747537419490832,w=0.5133167183991689,x=5.204587366417591 color=green,shape=triangle,flag=1,i=29623,u=0.9244494860196397,v=0.04760227483518442,w=0.46587444441461673,x=5.870242362954625 color=yellow,shape=triangle,flag=1,i=29639,u=0.6574356205809735,v=0.17607080316040014,w=0.493287320358233,x=3.769050981090595 color=purple,shape=triangle,flag=0,i=29644,u=0.275751722451941,v=0.5841750109724062,w=0.5260437970275496,x=5.4541860506335285 color=red,shape=square,flag=0,i=29653,u=0.5865399307774417,v=0.8745844630545466,w=0.5168541966341402,x=3.295922878024351 color=blue,shape=triangle,flag=1,i=29657,u=0.11255405091871984,v=0.054952836091728074,w=0.5202741897928987,x=6.404243381702867 color=yellow,shape=triangle,flag=1,i=29659,u=0.266140692870774,v=0.6928470129413267,w=0.4944124834527488,x=4.799213117300116 color=yellow,shape=triangle,flag=1,i=29661,u=0.585797330965652,v=0.6485153370388037,w=0.49588227128232515,x=5.0665872920028185 color=green,shape=square,flag=1,i=29665,u=0.702974968407844,v=0.3304672973864793,w=0.4654244780542738,x=4.884596019592617 color=blue,shape=circle,flag=1,i=29667,u=0.7210614003295094,v=0.23590427496902744,w=0.4971013421815183,x=6.691829906116394 color=blue,shape=square,flag=1,i=29704,u=0.4027022037362268,v=0.7691703955959995,w=0.5259079205460773,x=5.897790666959815 color=yellow,shape=square,flag=1,i=29721,u=0.49473596281744403,v=0.27469069367657206,w=0.49372817525374924,x=5.209634503095014 color=red,shape=circle,flag=0,i=29729,u=0.4326293732706511,v=0.4056719258575794,w=0.5074613360998372,x=6.835725069911573 color=blue,shape=triangle,flag=1,i=29739,u=0.05156349574935992,v=0.09004906045829553,w=0.5155149833666632,x=4.582831435013014 color=blue,shape=square,flag=1,i=29752,u=0.5149817204989489,v=0.0016624922524925978,w=0.5250081992812912,x=3.098185998821226 color=yellow,shape=square,flag=1,i=29770,u=0.41111508110444195,v=0.32045965506363006,w=0.4938881936066751,x=5.385870358510869 color=blue,shape=triangle,flag=1,i=29777,u=0.41741426213421784,v=0.7467042913032289,w=0.5182128525405643,x=4.534055684590649 color=green,shape=square,flag=0,i=29787,u=0.8190293834797779,v=0.8859257609952934,w=0.4675732077569812,x=3.6654444072825556 color=orange,shape=triangle,flag=1,i=29821,u=0.5959848300384338,v=0.1822578625482384,w=0.5646184212494092,x=3.99977302240179 color=red,shape=square,flag=0,i=29829,u=0.7301789779665903,v=0.41857022858194914,w=0.520276546060603,x=6.808112650060683 color=purple,shape=square,flag=0,i=29840,u=0.5992454335855963,v=0.8056146895093382,w=0.49104006125759775,x=4.321982281031561 color=red,shape=triangle,flag=0,i=29843,u=0.8589377860466937,v=0.9527401031865766,w=0.4875687935554442,x=5.978286660638037 color=red,shape=circle,flag=1,i=29856,u=0.20604687792627696,v=0.2373665356831624,w=0.5030511797803342,x=3.03434307113751 color=green,shape=circle,flag=0,i=29889,u=0.3545794601134278,v=0.9685736930775674,w=0.5073623923359062,x=5.5755280931640145 color=red,shape=circle,flag=0,i=29896,u=0.9539709666522029,v=0.8899989164341081,w=0.4919316856408472,x=3.283701202922275 color=red,shape=square,flag=1,i=29913,u=0.6319459054255879,v=0.6835283549035489,w=0.49452003747397744,x=4.59335912122535 color=yellow,shape=circle,flag=1,i=29934,u=0.12903282043132014,v=0.0684388640589505,w=0.530523425220845,x=6.368948623377881 color=green,shape=triangle,flag=0,i=29957,u=0.17852338581332783,v=0.9301404799503399,w=0.4734426664644052,x=6.2035626244904725 color=purple,shape=square,flag=0,i=29958,u=0.753396065263036,v=0.4036467990991589,w=0.48954473928718306,x=3.070313888675163 color=red,shape=circle,flag=0,i=29964,u=0.48545239079349856,v=0.5262122761226822,w=0.4831083745020635,x=5.009029679869083 color=red,shape=circle,flag=0,i=29971,u=0.30551307645402237,v=0.3664800199847265,w=0.47708800376088945,x=5.363253467760244 color=yellow,shape=triangle,flag=1,i=29972,u=0.29346228242489947,v=0.9818633639509691,w=0.5008219842080108,x=4.5232974897894875 color=orange,shape=square,flag=0,i=29988,u=0.7290924974104981,v=0.625384244713551,w=0.4783605235815646,x=4.105279093671387 color=blue,shape=triangle,flag=1,i=29992,u=0.2770027690563145,v=0.9785601760579371,w=0.5111913134260267,x=3.8791792989907066 color=blue,shape=triangle,flag=1,i=29993,u=0.8035252551383874,v=0.3004863823453163,w=0.5073352358653068,x=5.661137070882127 color=red,shape=square,flag=0,i=30007,u=0.20063414310531924,v=0.30756246832020584,w=0.4888795796415844,x=4.980829921930858 color=red,shape=triangle,flag=1,i=30017,u=0.13832770125613314,v=0.768651597657867,w=0.4931892297340393,x=5.430528950141588 color=blue,shape=square,flag=1,i=30018,u=0.8449273676275564,v=0.621166096994931,w=0.5053151982311194,x=5.902846882297393 color=yellow,shape=square,flag=1,i=30052,u=0.7152808611391698,v=0.532517528197617,w=0.488992500041547,x=5.184232637479634 color=red,shape=square,flag=0,i=30058,u=0.7814474459558515,v=0.20856273010326976,w=0.49253348431011335,x=4.179526995756143 color=green,shape=square,flag=0,i=30065,u=0.6810829962381632,v=0.8087890938005086,w=0.489259397961584,x=3.5977529048923635 color=red,shape=square,flag=0,i=30068,u=0.5196833892850999,v=0.9367150794714201,w=0.4965574827287151,x=3.3105954392389383 color=yellow,shape=square,flag=1,i=30086,u=0.9343130317958508,v=0.7832383505783216,w=0.48723591291649976,x=5.040240159713332 color=purple,shape=square,flag=0,i=30111,u=0.7986076861179164,v=0.7394174552605486,w=0.48306023430082523,x=5.470637712656124 color=red,shape=triangle,flag=1,i=30122,u=0.22451841677562268,v=0.4008485681662449,w=0.5017897486594739,x=1.5004632464886598 color=green,shape=square,flag=0,i=30143,u=0.33142749879811806,v=0.9020200038557241,w=0.49089941359372596,x=5.482553755806546 color=purple,shape=circle,flag=0,i=30146,u=0.1477189654942207,v=0.47251966803487366,w=0.5063245255562299,x=5.346019341182475 color=red,shape=square,flag=0,i=30151,u=0.5012244366768477,v=0.10415321475197947,w=0.4931749062560858,x=7.1595278694387305 color=green,shape=triangle,flag=1,i=30157,u=0.6016650438179475,v=0.3669857434335294,w=0.4714022304049529,x=2.756406893326831 color=purple,shape=circle,flag=0,i=30164,u=0.09156249040649578,v=0.229210690055338,w=0.5047227095739586,x=4.091959353137588 color=orange,shape=triangle,flag=0,i=30166,u=0.4347367801621198,v=0.2790962095748857,w=0.5509229954930609,x=5.487200986388664 color=red,shape=square,flag=0,i=30178,u=0.449207014107289,v=0.8428339809879006,w=0.49641758965516214,x=4.916088070652804 color=red,shape=triangle,flag=1,i=30186,u=0.16590029994298372,v=0.2781810509850351,w=0.4959275804808212,x=4.995636120274436 color=blue,shape=square,flag=1,i=30188,u=0.29844354274224605,v=0.16676696472197183,w=0.5036755539129283,x=5.674581541296543 color=yellow,shape=triangle,flag=1,i=30192,u=0.46806203481637454,v=0.539568921643238,w=0.49715104248877445,x=5.005214696185409 color=red,shape=square,flag=1,i=30198,u=0.2691135454136523,v=0.957159613663821,w=0.49224999822326776,x=5.247577586031528 color=blue,shape=square,flag=1,i=30245,u=0.8656475748205655,v=0.9449542382343803,w=0.495117579326984,x=5.3753339335411825 color=green,shape=triangle,flag=0,i=30262,u=0.307873059783773,v=0.9592139872606779,w=0.47922305165858636,x=5.850901069980025 color=blue,shape=circle,flag=0,i=30263,u=0.6614015839422331,v=0.028552863313809906,w=0.5005600732195173,x=4.291423610723483 color=red,shape=square,flag=0,i=30269,u=0.003830227522392371,v=0.7660957908256116,w=0.5006200173117727,x=6.233722971033761 color=purple,shape=triangle,flag=0,i=30270,u=0.288177704672979,v=0.9459586009729012,w=0.5348338672571158,x=4.687882426913988 color=red,shape=circle,flag=1,i=30281,u=0.5583883212944449,v=0.5896671246335984,w=0.48001088182143503,x=6.449324219113862 color=green,shape=square,flag=0,i=30282,u=0.051033325162624155,v=0.7959475980378004,w=0.4982038524948576,x=6.247442473289776 color=red,shape=square,flag=0,i=30285,u=0.39342596666005913,v=0.29269349946258305,w=0.49462703207301845,x=2.7358713106589576 color=red,shape=square,flag=1,i=30286,u=0.027880527907372277,v=0.6415699409412685,w=0.4940481739540081,x=4.61169149889735 color=red,shape=triangle,flag=0,i=30291,u=0.1470352078876791,v=0.8125500250619784,w=0.512394319131293,x=5.98236469224189 color=yellow,shape=square,flag=1,i=30302,u=0.8302639347377956,v=0.8334333735657777,w=0.4891615217157213,x=6.485489844364913 color=red,shape=circle,flag=0,i=30332,u=0.8895447722814571,v=0.9717354540107599,w=0.4854406758431147,x=4.824398026515303 color=purple,shape=triangle,flag=0,i=30333,u=0.11950000546734574,v=0.3244988246632423,w=0.5152415980846886,x=3.5206566048485786 color=red,shape=square,flag=0,i=30343,u=0.008260435602335026,v=0.7244644428748056,w=0.5028917688036276,x=5.493305286497622 color=green,shape=triangle,flag=0,i=30348,u=0.4450670665515626,v=0.20264718068515652,w=0.4745790973762201,x=5.2402577730237265 color=yellow,shape=circle,flag=1,i=30350,u=0.7778309469057162,v=0.6796926768442973,w=0.5260855728112273,x=3.5272244096067413 color=red,shape=circle,flag=0,i=30354,u=0.301708448793656,v=0.29546375049306,w=0.4843449064349069,x=5.556597086323777 color=blue,shape=square,flag=0,i=30357,u=0.03698558276279085,v=0.282947385603037,w=0.4930610727463199,x=3.993359818266453 color=red,shape=square,flag=0,i=30375,u=0.15995068490840758,v=0.34931712073912613,w=0.5014310473810644,x=6.603087065113681 color=red,shape=square,flag=0,i=30382,u=0.49277923914690824,v=0.644292093697381,w=0.5044079305212555,x=3.2145361339453107 color=blue,shape=circle,flag=1,i=30385,u=0.7470845629328279,v=0.48578076348044175,w=0.5090265888617694,x=4.896898528388144 color=yellow,shape=triangle,flag=0,i=30388,u=0.8253595607371385,v=0.09275631826692166,w=0.4999218035048412,x=6.1051243915627795 color=green,shape=square,flag=0,i=30389,u=0.7778554677032801,v=0.8064929507105697,w=0.5000543529613237,x=5.50113587877009 color=yellow,shape=circle,flag=0,i=30390,u=0.7150936592962341,v=0.3224611554616321,w=0.5243652813373487,x=3.341000050851713 color=red,shape=square,flag=1,i=30399,u=0.34089854379698337,v=0.8647796046605544,w=0.5088227558623317,x=4.587514169567759 color=red,shape=circle,flag=0,i=30402,u=0.16947487546279205,v=0.07523081969366156,w=0.4839323463296248,x=6.084071449415837 color=red,shape=circle,flag=0,i=30405,u=0.5888921727408212,v=0.5751240662192442,w=0.48918397822006554,x=3.5960139251461034 color=green,shape=triangle,flag=1,i=30432,u=0.18348526800532372,v=0.22588163531340089,w=0.47036883363533216,x=5.819706510873556 color=red,shape=square,flag=1,i=30434,u=0.8120235545439471,v=0.14548108933387383,w=0.5091154210613482,x=3.818061629755697 color=blue,shape=triangle,flag=1,i=30435,u=0.7274927147102481,v=0.4750011734546318,w=0.4899643232412815,x=2.6562563731825377 color=purple,shape=square,flag=0,i=30444,u=0.22042132722165142,v=0.2575261498804785,w=0.47193038629235934,x=3.316979626952198 color=purple,shape=circle,flag=0,i=30483,u=0.21721064411561197,v=0.554777745881919,w=0.49663492704955686,x=4.291710904681601 color=purple,shape=triangle,flag=0,i=30487,u=0.8307657056891141,v=0.9447641439659609,w=0.5153151632804447,x=4.457897979223862 color=red,shape=circle,flag=0,i=30501,u=0.896657859923559,v=0.8723902077877677,w=0.49986885723510327,x=3.690066682201989 color=red,shape=square,flag=0,i=30506,u=0.8575325703791198,v=0.02833175026162782,w=0.5041695700951581,x=6.039720330089203 color=green,shape=square,flag=0,i=30516,u=0.4338140378282922,v=0.3928659303185025,w=0.48929794672694793,x=6.223465939692186 color=red,shape=square,flag=1,i=30520,u=0.9528955914171259,v=0.5531558822294478,w=0.5091922248456057,x=4.087593474489518 color=red,shape=square,flag=0,i=30569,u=0.6126940909687901,v=0.5570447826214673,w=0.511572204173628,x=6.284588801688897 color=red,shape=circle,flag=0,i=30585,u=0.3894503412249999,v=0.42039140372370654,w=0.49323703549648096,x=6.833595530194188 color=red,shape=triangle,flag=0,i=30592,u=0.27527967879076043,v=0.790248820403096,w=0.5024868329017081,x=5.314677105794 color=yellow,shape=circle,flag=1,i=30596,u=0.7957559797471911,v=0.5618444338292828,w=0.5285505391552109,x=6.382165742639831 color=red,shape=triangle,flag=0,i=30603,u=0.2845741974727857,v=0.3473550442036083,w=0.5012311856523145,x=4.7202795409718235 color=red,shape=triangle,flag=0,i=30607,u=0.1175938530648899,v=0.6518052989184085,w=0.5060915168345712,x=4.894007763795773 color=red,shape=square,flag=1,i=30621,u=0.7609148906025656,v=0.6512899641547996,w=0.5125386254645461,x=5.080977630677931 color=blue,shape=triangle,flag=1,i=30624,u=0.9600765693061948,v=0.08198983697064288,w=0.4955791731545013,x=6.057987291461597 color=red,shape=square,flag=0,i=30662,u=0.6094290702112861,v=0.7487913790450337,w=0.5138772370700087,x=5.3182863310449 color=red,shape=square,flag=0,i=30664,u=0.17217824127553671,v=0.5807344530586044,w=0.5110405596583685,x=4.426600886911363 color=purple,shape=circle,flag=0,i=30675,u=0.31403654472520426,v=0.11357922039355395,w=0.5058549636815446,x=5.527648782096251 color=red,shape=triangle,flag=0,i=30705,u=0.5725290396782309,v=0.048376064229432414,w=0.5184906763807028,x=3.5345940672180904 color=red,shape=square,flag=1,i=30714,u=0.04980999657679841,v=0.25767585619592825,w=0.515984584202646,x=3.7981948910822605 color=red,shape=triangle,flag=0,i=30719,u=0.21855866681958847,v=0.4982543964061553,w=0.523148157493496,x=5.329747612909604 color=green,shape=square,flag=0,i=30736,u=0.534375342718703,v=0.16303254609835027,w=0.4805388913432233,x=6.392284967248595 color=blue,shape=square,flag=0,i=30741,u=0.5950992758945963,v=0.7550950465466318,w=0.513987982901534,x=4.018636200757412 color=orange,shape=square,flag=1,i=30763,u=0.7827732095297112,v=0.6167773920685936,w=0.46831216596398845,x=3.5940444643544676 color=green,shape=triangle,flag=0,i=30764,u=0.2276334256884477,v=0.3404531276690478,w=0.4532130321998119,x=6.65168349766098 color=red,shape=square,flag=1,i=30774,u=0.9437243280470229,v=0.43960170554974154,w=0.5143556484426715,x=2.912002559941799 color=yellow,shape=square,flag=1,i=30778,u=0.6609143414169346,v=0.2192007192076071,w=0.5000548759558088,x=4.361794683171049 color=red,shape=square,flag=0,i=30787,u=0.4134945323539029,v=0.6679675565253959,w=0.5195582107837091,x=5.653513950764757 color=red,shape=square,flag=1,i=30816,u=0.469697258579583,v=0.7902222205684575,w=0.5355957165290308,x=5.01758689448523 color=red,shape=circle,flag=0,i=30854,u=0.18140350510768333,v=0.18168800517293002,w=0.5170824333522133,x=5.533912842640693 color=red,shape=triangle,flag=1,i=30877,u=0.6741179332464845,v=0.6461495367208291,w=0.5140053013282697,x=5.871825420274697 color=blue,shape=circle,flag=0,i=30893,u=0.7245453907354324,v=0.918340980961967,w=0.5165643432325667,x=4.9255026811854234 color=red,shape=square,flag=0,i=30896,u=0.485056411667279,v=0.3819608133877569,w=0.5462491902024431,x=4.42421979184498 color=green,shape=triangle,flag=0,i=30902,u=0.49568237875725185,v=0.5831455586945526,w=0.4596912935849979,x=6.9176465634698125 color=red,shape=triangle,flag=0,i=30928,u=0.14918364573664367,v=0.12634066592596216,w=0.5050016882791779,x=5.753544109278358 color=blue,shape=triangle,flag=1,i=30933,u=0.8405576935323963,v=0.7934462926694278,w=0.48525764684461326,x=3.8407633379337853 color=blue,shape=circle,flag=0,i=30944,u=0.1260653463516933,v=0.1693463988688123,w=0.5175684006583814,x=6.084164845246112 color=red,shape=circle,flag=0,i=30953,u=0.5602094334631412,v=0.6359658861779514,w=0.5274257762503781,x=5.645037486950211 color=red,shape=square,flag=0,i=30960,u=0.5803951853195812,v=0.7904139164895896,w=0.5364147140055715,x=6.046353563211684 color=red,shape=square,flag=1,i=30963,u=0.5553374144593168,v=0.522862844160655,w=0.5322882454574523,x=5.063691234912764 color=yellow,shape=square,flag=1,i=31000,u=0.02436920299593648,v=0.8831396964693253,w=0.5094730711991914,x=4.850603742648588 color=red,shape=circle,flag=0,i=31005,u=0.5133765183162307,v=0.46724056305178574,w=0.5326036951272493,x=3.799676680219985 color=blue,shape=square,flag=1,i=31008,u=0.170507123522057,v=0.8537386139649247,w=0.5009080264199828,x=6.371533374648447 color=green,shape=square,flag=0,i=31024,u=0.610840629667652,v=0.2638782169056768,w=0.4928716967591164,x=5.595505781716166 color=blue,shape=triangle,flag=1,i=31029,u=0.3389472459581383,v=0.5259091735902588,w=0.4921296219938035,x=4.408408542049037 color=yellow,shape=triangle,flag=1,i=31031,u=0.48263206745864784,v=0.52505649107279,w=0.5088058598602397,x=5.125746406540444 color=green,shape=square,flag=0,i=31046,u=0.5447546493131459,v=0.7029287311177661,w=0.496903661374872,x=5.559463121411629 color=purple,shape=circle,flag=0,i=31075,u=0.43228702999525037,v=0.9234244308233611,w=0.5065028225159918,x=3.336893020979776 color=blue,shape=triangle,flag=0,i=31079,u=0.6944413687865546,v=0.2890001568469157,w=0.4994660311746382,x=3.3129610345464635 color=red,shape=triangle,flag=0,i=31082,u=0.8705769138388587,v=0.9751811859145059,w=0.5099232476147225,x=4.637004797474901 color=blue,shape=triangle,flag=0,i=31106,u=0.9011950739572303,v=0.8947916221391885,w=0.4947526557052893,x=5.5981330467018084 color=yellow,shape=triangle,flag=1,i=31111,u=0.1600763094716232,v=0.6361466679701256,w=0.49953173184304145,x=4.288646727484488 color=red,shape=triangle,flag=0,i=31176,u=0.23533580621101424,v=0.2737770886965992,w=0.49911911237270923,x=6.814897422061496 color=green,shape=circle,flag=0,i=31178,u=0.5775271221995039,v=0.5570784045661324,w=0.4977260455158192,x=5.716532045272153 color=red,shape=triangle,flag=1,i=31180,u=0.811247343251775,v=0.05675863358810185,w=0.5043425462490259,x=6.217739907510967 color=red,shape=circle,flag=0,i=31181,u=0.44251755428275075,v=0.5049948328915848,w=0.5364249490422851,x=5.613606720003211 color=blue,shape=triangle,flag=1,i=31185,u=0.33679971121331065,v=0.8486508656001518,w=0.4906332183673078,x=3.339772963864308 color=green,shape=circle,flag=0,i=31193,u=0.7830329685372199,v=0.8768831590318761,w=0.4937646251096954,x=5.050285102640554 color=green,shape=square,flag=1,i=31199,u=0.9872641989143817,v=0.9063911516615576,w=0.47675701167179524,x=6.124551407295357 color=blue,shape=square,flag=0,i=31219,u=0.5175367176493351,v=0.6575966685560474,w=0.4992142767543194,x=8.318347612152106 color=purple,shape=square,flag=0,i=31235,u=0.8779783449906201,v=0.8023903932369643,w=0.4775146486723392,x=5.50699358032634 color=red,shape=square,flag=0,i=31236,u=0.563873640719193,v=0.608209846049118,w=0.5223207369684941,x=3.400498674702021 color=red,shape=circle,flag=0,i=31240,u=0.9957991931484116,v=1.0173926199780277,w=0.5242659965625325,x=4.701210712607983 color=red,shape=square,flag=1,i=31248,u=0.17295284830929858,v=0.18206483634331327,w=0.5206993001710004,x=7.330427152460064 color=red,shape=triangle,flag=0,i=31249,u=0.7592587621330351,v=0.9691470251130286,w=0.5081284088883297,x=4.211993275659857 color=red,shape=triangle,flag=0,i=31257,u=0.26502970111342083,v=0.4891472505186757,w=0.5106525316910329,x=4.762995330113068 color=red,shape=circle,flag=1,i=31263,u=0.21695287498289273,v=0.30114473327207275,w=0.5244355668432987,x=3.0124648383152395 color=red,shape=circle,flag=1,i=31265,u=0.8954827085470323,v=0.8385131757298496,w=0.5266003543974686,x=4.65424086438879 color=red,shape=circle,flag=0,i=31266,u=0.9748642235377072,v=0.9904893276325748,w=0.529975101878862,x=5.494366302028819 color=purple,shape=circle,flag=0,i=31301,u=0.5493291926941055,v=0.19057244404881668,w=0.5016018782618987,x=4.8455164204222525 color=red,shape=circle,flag=1,i=31315,u=0.4778945864664157,v=0.49839009704663917,w=0.5284871676906537,x=3.0953806464251845 color=red,shape=square,flag=1,i=31328,u=0.5543599891496866,v=0.5246616963380494,w=0.510248897880488,x=7.334943586038254 color=red,shape=square,flag=0,i=31347,u=0.1732076329323342,v=0.20547898691024935,w=0.5035173066241658,x=6.024678001200999 color=red,shape=triangle,flag=1,i=31351,u=0.31260573645858714,v=0.6480985337958689,w=0.5174385195282847,x=4.856585050666885 color=green,shape=circle,flag=0,i=31361,u=0.2275728625019101,v=0.1963649209210966,w=0.4997630181694436,x=5.192460479639976 color=orange,shape=triangle,flag=1,i=31379,u=0.23100832430228502,v=0.7360710148554332,w=0.5436575392763905,x=4.6651264183168415 color=orange,shape=triangle,flag=0,i=31380,u=0.6519225771058487,v=0.5145337606933655,w=0.546066660260992,x=3.503860128759937 color=yellow,shape=circle,flag=1,i=31385,u=0.3588056961812789,v=0.6105479148733278,w=0.5126077793184256,x=3.46234788913182 color=red,shape=square,flag=0,i=31406,u=0.3639534314697448,v=0.8392444450851481,w=0.521529631286661,x=5.334686284704513 color=blue,shape=square,flag=1,i=31441,u=0.1650510898821953,v=0.21577671065592197,w=0.5041305071414098,x=5.585231870189646 color=blue,shape=triangle,flag=0,i=31461,u=0.18437865374190476,v=0.6998235311408125,w=0.48350256970028316,x=4.578984084561866 color=red,shape=square,flag=0,i=31462,u=0.6695417057570011,v=0.9042026761823094,w=0.515182134008645,x=5.18694720568645 color=red,shape=triangle,flag=1,i=31472,u=0.10479902873544122,v=0.44268216477777955,w=0.49273094011637364,x=6.496818066105116 color=purple,shape=circle,flag=0,i=31488,u=0.03554948121060564,v=0.4991785612452486,w=0.4994553856707923,x=5.533032269585125 color=red,shape=square,flag=0,i=31492,u=0.25316932524554303,v=0.9328252579698911,w=0.5191884282865986,x=5.592492907689887 color=red,shape=square,flag=0,i=31500,u=0.33269864522957815,v=0.5906155921932702,w=0.520041120948019,x=3.917181628687565 color=blue,shape=triangle,flag=1,i=31506,u=0.7767827033953992,v=0.10636383285777307,w=0.48194182966348054,x=2.1699618582149935 color=red,shape=circle,flag=1,i=31509,u=0.773553183388423,v=0.7332440819841319,w=0.5283481595420471,x=3.285338291587969 color=yellow,shape=triangle,flag=1,i=31512,u=0.13634045207607548,v=0.9848515987730506,w=0.5284111256066597,x=6.486124999791548 color=red,shape=square,flag=0,i=31529,u=0.827029555223276,v=0.27396208015093737,w=0.521147767788051,x=4.001442657993596 color=green,shape=triangle,flag=0,i=31542,u=0.685093105738591,v=0.841175413796776,w=0.46197279904146615,x=4.198856066379299 color=red,shape=square,flag=0,i=31545,u=0.21535666328841163,v=0.7965087605307248,w=0.5172818376380691,x=5.674780751560892 color=red,shape=triangle,flag=0,i=31560,u=0.26717026424483004,v=0.666207719089041,w=0.49142150378785454,x=4.222843390519655 color=blue,shape=circle,flag=0,i=31582,u=0.4380626656933765,v=0.3784071248206897,w=0.5083846792348192,x=6.660367507616556 color=blue,shape=circle,flag=1,i=31590,u=0.9826682561493719,v=0.22447298467586185,w=0.5101864352642794,x=5.303306441693211 color=red,shape=circle,flag=0,i=31608,u=0.7281695461225278,v=0.7127504449019734,w=0.522886415099259,x=5.28095374119536 color=orange,shape=circle,flag=1,i=31644,u=0.37089566152670483,v=0.3587431317899764,w=0.5243279342307468,x=5.516444976320288 color=red,shape=square,flag=1,i=31666,u=0.4393141758478778,v=0.5127837166545216,w=0.5071355880697656,x=3.3377340324740215 color=blue,shape=circle,flag=0,i=31682,u=0.6887428002045259,v=0.13496513437879942,w=0.5039202926106429,x=3.6185745789652035 color=yellow,shape=square,flag=1,i=31688,u=0.503319496246963,v=0.8154543708627862,w=0.5038767262466363,x=5.055344010450682 color=red,shape=square,flag=1,i=31692,u=0.10571170419020703,v=0.12650267238699053,w=0.5115793514209701,x=4.084988330672991 color=red,shape=triangle,flag=0,i=31706,u=0.22098230763993387,v=0.5672838112436571,w=0.4911030718909937,x=5.589453644740485 color=blue,shape=triangle,flag=1,i=31715,u=0.3183370182824441,v=0.7996016086895069,w=0.48283196095496456,x=2.3958100747453916 color=blue,shape=circle,flag=0,i=31722,u=0.3650983697013428,v=0.13341944683810525,w=0.5037785972222049,x=6.8124900397988055 color=red,shape=square,flag=1,i=31749,u=0.0009893213602718554,v=0.49624776584522445,w=0.511169360409743,x=6.474948496483406 color=yellow,shape=square,flag=1,i=31754,u=0.062237368491465106,v=0.5671098933453232,w=0.5005165044307704,x=4.544714235918196 color=yellow,shape=square,flag=1,i=31756,u=0.3626218183080785,v=0.18705823876716987,w=0.5029280814495235,x=3.2714628470863967 color=red,shape=circle,flag=0,i=31762,u=0.8524379787637962,v=0.7729978482703204,w=0.5125242747434275,x=5.661880995310369 color=yellow,shape=square,flag=1,i=31763,u=0.903162259715378,v=0.4131659728496049,w=0.506974507225746,x=3.609871940324743 color=purple,shape=square,flag=0,i=31777,u=0.6168332877427288,v=0.7205833553099292,w=0.4739679368782447,x=4.911673619751092 color=green,shape=triangle,flag=0,i=31778,u=0.19590280469757537,v=0.9015498289893369,w=0.46553610900208986,x=5.194609391417984 color=purple,shape=square,flag=0,i=31779,u=0.08186676316007535,v=0.26263113109305225,w=0.47359721010482025,x=6.842602989797476 color=blue,shape=triangle,flag=0,i=31797,u=0.9174367887224559,v=0.35533358810982674,w=0.4723246924451188,x=6.156372544691018 color=purple,shape=square,flag=0,i=31805,u=0.0005996381983701671,v=0.032544102008075226,w=0.47037566553006377,x=3.874637299268216 color=blue,shape=square,flag=0,i=31810,u=0.2077541610621192,v=0.2596109544377776,w=0.503749542668205,x=2.313519357763424 color=red,shape=triangle,flag=0,i=31816,u=0.23275619227052258,v=0.8159419426892464,w=0.4956078927369827,x=4.144340176089642 color=yellow,shape=square,flag=1,i=31824,u=0.02354557000894919,v=0.29920837715434623,w=0.5109333065180163,x=3.2789882132277235 color=red,shape=circle,flag=0,i=31852,u=0.8403796102089048,v=0.8562070039323685,w=0.5229978219868584,x=6.837703124670132 color=red,shape=square,flag=1,i=31858,u=0.6642138997321104,v=0.38997532567208226,w=0.5034295270180834,x=5.252600907167657 color=red,shape=triangle,flag=0,i=31864,u=0.05104705794887088,v=0.734317115046029,w=0.5084999845164628,x=3.4539759012770843 color=red,shape=square,flag=0,i=31887,u=0.4126596385374226,v=0.7870263725239266,w=0.50427255750418,x=4.687687800797566 color=purple,shape=circle,flag=0,i=31902,u=0.8221075588952916,v=0.4189752616214162,w=0.4983864592590349,x=4.41324965214633 color=yellow,shape=circle,flag=1,i=31908,u=0.09700420236879748,v=0.32067446470589256,w=0.5135515943839901,x=7.780547039411862 color=blue,shape=triangle,flag=1,i=31914,u=0.7724776592201179,v=0.48949607583578236,w=0.4715532140993242,x=4.217104729413005 color=red,shape=square,flag=0,i=31924,u=0.33940484571730434,v=0.9744585971170209,w=0.5116798736107034,x=3.747450665383178 color=red,shape=triangle,flag=0,i=31927,u=0.21911386857004045,v=0.5953644413456816,w=0.5054367095762375,x=4.847275004927652 color=red,shape=triangle,flag=0,i=31936,u=0.2588727421514262,v=0.055671874326011506,w=0.5075489650989422,x=4.024506967834393 color=red,shape=square,flag=0,i=31937,u=0.45127198494198617,v=0.21730283632927083,w=0.519996677534921,x=4.915701738835918 color=purple,shape=triangle,flag=0,i=31943,u=0.6543595268509671,v=0.7152853419268527,w=0.5195989951680036,x=5.128138755133754 color=blue,shape=square,flag=1,i=31946,u=0.6620260539692875,v=0.8693508955051746,w=0.4991555703514362,x=6.327221842839101 color=yellow,shape=circle,flag=1,i=31954,u=0.21624658427387833,v=0.034722130898524495,w=0.5114356685979923,x=4.404708690578104 color=red,shape=triangle,flag=0,i=31969,u=0.7425685366781526,v=0.397818074328401,w=0.49523049119946966,x=4.435865270981544 color=green,shape=square,flag=0,i=31986,u=0.8877093863231819,v=0.6844471855848603,w=0.4648457624645645,x=6.935426749112351 color=blue,shape=circle,flag=1,i=32010,u=0.5592699421679179,v=0.2286932036249878,w=0.5093229522279306,x=4.418651102065964 color=blue,shape=triangle,flag=1,i=32055,u=0.9744028196315789,v=0.6387937214444578,w=0.4851322710547238,x=3.6747460920314197 color=red,shape=triangle,flag=1,i=32057,u=0.0041252571189362985,v=0.5391424218838407,w=0.5133411716482529,x=6.776644055679761 color=red,shape=triangle,flag=0,i=32073,u=0.5085780953194106,v=0.09085007059700079,w=0.5092288245379413,x=5.140647944455343 color=red,shape=square,flag=0,i=32098,u=0.03423285764799833,v=0.5774944713960741,w=0.513077234263766,x=6.30087731506244 color=red,shape=square,flag=0,i=32158,u=0.3877110921051712,v=0.4004256431664053,w=0.49751199493402815,x=4.034978135054424 color=red,shape=square,flag=0,i=32169,u=0.1344437968883816,v=0.7825682593214645,w=0.4940447526141323,x=5.0953394201999656 color=green,shape=circle,flag=1,i=32172,u=0.6675355500133372,v=0.3047046019493378,w=0.49804680236117094,x=4.429777247395564 color=green,shape=square,flag=1,i=32173,u=0.44053078812006696,v=0.8866445026384596,w=0.47065917690012504,x=3.628797199056707 color=red,shape=square,flag=0,i=32181,u=0.8149652435086298,v=0.802180739846241,w=0.49448691159004277,x=4.873513683897505 color=blue,shape=square,flag=0,i=32197,u=0.7637369756880534,v=0.217820199951122,w=0.4904284873619981,x=3.602777711637847 color=blue,shape=square,flag=0,i=32201,u=0.1424186527885838,v=0.457424737302245,w=0.4944334902375324,x=5.324203195198705 color=blue,shape=triangle,flag=1,i=32204,u=0.5480451851777264,v=0.4781116260315582,w=0.49168376898056776,x=5.258531733354391 color=yellow,shape=triangle,flag=1,i=32223,u=0.7776307339917085,v=0.5122875723494186,w=0.521256510567352,x=5.142866785301873 color=red,shape=circle,flag=1,i=32228,u=0.7243578792284022,v=0.7885349366162395,w=0.4961340246820813,x=5.434908019992243 color=red,shape=square,flag=0,i=32238,u=0.03744792426315624,v=0.7745425512761289,w=0.5216605800327686,x=3.46890547136746 color=yellow,shape=circle,flag=0,i=32244,u=0.9408144403377761,v=0.029859810634737527,w=0.5098562359310378,x=3.675363106392737 color=yellow,shape=triangle,flag=1,i=32245,u=0.8136901788954085,v=0.8755284272553082,w=0.5122538192380498,x=4.59068059600958 color=blue,shape=square,flag=1,i=32264,u=0.05721313280803708,v=0.3475060435636014,w=0.49026037159564245,x=3.5678014963715454 color=yellow,shape=circle,flag=1,i=32283,u=0.7291818747212584,v=0.3652864178443853,w=0.5102026389934516,x=5.2763314269174355 color=red,shape=square,flag=1,i=32289,u=0.10032335582298779,v=0.8055879209733166,w=0.5309754007011206,x=4.107884465353599 color=yellow,shape=square,flag=0,i=32293,u=0.7868494371238808,v=0.6987359627510948,w=0.5253008246713756,x=6.182785124274468 color=yellow,shape=circle,flag=1,i=32299,u=0.8372907608514316,v=0.7522312524730911,w=0.5114980747554854,x=5.2734945742830925 color=green,shape=triangle,flag=1,i=32300,u=0.19878286657954214,v=0.01733402077116275,w=0.45401278032540804,x=4.202165493582659 color=red,shape=square,flag=0,i=32309,u=0.23338362638033416,v=0.35595411691358436,w=0.5283070781469115,x=4.6917501698780955 color=red,shape=circle,flag=1,i=32331,u=0.9612663650163008,v=1.0610812102506386,w=0.4998157155415821,x=5.928187526631626 color=red,shape=square,flag=0,i=32332,u=0.1799800420212142,v=0.5916681502254145,w=0.5216584750735137,x=6.375642148068084 color=red,shape=square,flag=0,i=32339,u=0.605067817589507,v=0.40143764105090707,w=0.5250353859522513,x=4.5493440872246484 color=red,shape=triangle,flag=0,i=32342,u=0.48219494244677663,v=0.4760288258882689,w=0.49558056917940285,x=5.061334946669055 color=green,shape=square,flag=0,i=32344,u=0.47931925463972913,v=0.9719808760720149,w=0.4756384852406957,x=5.020660107159152 color=green,shape=square,flag=0,i=32353,u=0.7070814064550497,v=0.24067515548843532,w=0.479633550845076,x=6.305768264280075 color=red,shape=triangle,flag=0,i=32354,u=0.6000463470480698,v=0.6435697678704391,w=0.49602970977487293,x=7.100720620527883 color=red,shape=square,flag=0,i=32365,u=0.4305544310943289,v=0.19601186774000467,w=0.5147239264198963,x=5.174082789461681 color=red,shape=circle,flag=0,i=32381,u=0.148715951565217,v=0.06761300795991265,w=0.5087423149898872,x=5.753926182536837 color=red,shape=circle,flag=0,i=32388,u=0.05910820023726637,v=0.10675974838732578,w=0.5077082220675109,x=3.008224853464814 color=red,shape=square,flag=1,i=32398,u=0.021075722105496575,v=0.506201793177115,w=0.527038757353677,x=5.147460848560225 color=red,shape=triangle,flag=0,i=32404,u=0.2846087187598718,v=0.6153307092302611,w=0.5048651599161194,x=4.37839151032885 color=red,shape=circle,flag=1,i=32410,u=0.7355792920435406,v=0.7850551217919419,w=0.5078115837238074,x=3.264351747376816 color=blue,shape=square,flag=1,i=32420,u=0.6015559576137279,v=0.8815103418321111,w=0.48460961082413323,x=3.638946734291146 color=red,shape=square,flag=0,i=32423,u=0.2914080002358599,v=0.252593756086932,w=0.5184860448673824,x=4.126618428116534 color=red,shape=square,flag=0,i=32444,u=0.3818672794857729,v=0.8176103501336636,w=0.5083125077743214,x=5.583021694785802 color=green,shape=circle,flag=0,i=32454,u=0.04385066820236028,v=0.30964458914708637,w=0.494946082813775,x=6.348433461821028 color=yellow,shape=circle,flag=1,i=32456,u=0.9695278060802851,v=0.876078811998003,w=0.5028186754792242,x=5.723713820559005 color=yellow,shape=circle,flag=1,i=32457,u=0.07924092318114317,v=0.4972649107558108,w=0.5051305675339505,x=6.088499564809126 color=red,shape=square,flag=0,i=32461,u=0.335219993270342,v=0.4440177073636694,w=0.5015435405316938,x=2.0561891537921246 color=yellow,shape=square,flag=0,i=32462,u=0.8973529145692394,v=0.8665352070629379,w=0.5173193874373868,x=4.7939381992093955 color=yellow,shape=circle,flag=0,i=32470,u=0.7557946901342758,v=0.7961926856419823,w=0.5085077656411156,x=6.169062428566167 color=green,shape=square,flag=1,i=32471,u=0.5834781806368595,v=0.20528657408860163,w=0.4796995920217562,x=4.820787755000001 color=blue,shape=triangle,flag=1,i=32491,u=0.5639389326047842,v=0.14413245062047586,w=0.47403063626635655,x=4.636433589540896 color=purple,shape=square,flag=0,i=32496,u=0.6430224168736124,v=0.35563077150216527,w=0.4937300992729642,x=2.572575638535684 color=yellow,shape=circle,flag=1,i=32498,u=0.4413513144817637,v=0.5068822483287729,w=0.5085973271869176,x=2.981065614677336 color=green,shape=circle,flag=1,i=32503,u=0.04120634610433116,v=0.43901513919610846,w=0.4934139200541007,x=5.565045871657813 color=blue,shape=triangle,flag=1,i=32504,u=0.11408661972037026,v=0.36040947632358633,w=0.47284493448601417,x=5.20584624664455 color=red,shape=square,flag=0,i=32505,u=0.8880713128037928,v=0.16987367274053466,w=0.5064076964398891,x=4.7403114707213225 color=red,shape=circle,flag=0,i=32523,u=0.014293547624514402,v=0.07798787875174154,w=0.486186765296906,x=5.842357414177379 color=green,shape=triangle,flag=0,i=32534,u=0.5612345117373408,v=0.4302298430944852,w=0.4517043717301244,x=4.669697476946988 color=orange,shape=triangle,flag=0,i=32556,u=0.10938360149604309,v=0.689869491310625,w=0.5431900459374166,x=6.468341862911658 color=green,shape=triangle,flag=0,i=32567,u=0.8390024456403523,v=0.4450017751294524,w=0.46290717829798583,x=4.986551580250597 color=red,shape=circle,flag=0,i=32584,u=0.36455480601916623,v=0.27319782568555084,w=0.48816597650186155,x=4.500385344325669 color=red,shape=square,flag=0,i=32598,u=0.10250053721046726,v=0.7087364526238986,w=0.5210045166693695,x=4.643639332890903 color=red,shape=triangle,flag=0,i=32606,u=0.6913292356787187,v=0.06967166120187973,w=0.4824837907808066,x=5.465619898155914 color=red,shape=square,flag=0,i=32614,u=0.7747270426795929,v=0.23984074061613925,w=0.5236000839677001,x=4.6488885088208525 color=red,shape=circle,flag=1,i=32632,u=0.9783301116733789,v=0.8922845915833825,w=0.481496073298218,x=5.283521905278108 color=red,shape=square,flag=0,i=32639,u=0.11079274766957414,v=0.9207987973222405,w=0.5213225028042737,x=4.989071591906947 color=red,shape=square,flag=0,i=32645,u=0.8695831833744887,v=0.7193058887103329,w=0.5221190859923294,x=5.142116340894931 color=red,shape=circle,flag=1,i=32653,u=0.07296696400353986,v=0.11847925279677447,w=0.48314756070522863,x=4.026861982299126 color=red,shape=square,flag=0,i=32670,u=0.04609021013675829,v=0.23587858063498013,w=0.5270475593197261,x=4.735031857298412 color=red,shape=triangle,flag=0,i=32692,u=0.2584680516691501,v=0.40869061970140297,w=0.48716175022993646,x=6.369732083882231 color=red,shape=triangle,flag=0,i=32708,u=0.06202640106795365,v=0.5455881697620651,w=0.49321189803590004,x=6.194436991128733 color=red,shape=circle,flag=0,i=32709,u=0.829762112565778,v=0.9152054900746871,w=0.47820158721931305,x=5.546651140728074 color=red,shape=circle,flag=0,i=32725,u=0.8593655778622782,v=0.930922698018613,w=0.4854880522402113,x=3.7606042959751593 color=red,shape=square,flag=0,i=32736,u=0.5605287463932519,v=0.13416454976966774,w=0.5317901654025541,x=4.4131740756012094 color=blue,shape=circle,flag=1,i=32744,u=0.3275951864212775,v=0.8375232619451524,w=0.49105284245042846,x=6.2528523638112 color=red,shape=triangle,flag=0,i=32751,u=0.42355159046053836,v=0.13574632156384858,w=0.4947756144370737,x=6.80136136049152 color=blue,shape=circle,flag=1,i=32759,u=0.920443573748635,v=0.05732739801145137,w=0.4887044665223418,x=6.151365241637104 color=red,shape=circle,flag=0,i=32760,u=0.12605861345370017,v=0.1330606729262756,w=0.482834265404661,x=5.942869189338023 color=red,shape=square,flag=0,i=32785,u=0.4496305526517207,v=0.8694052470439929,w=0.5305896042927005,x=6.13742498281885 color=blue,shape=circle,flag=0,i=32797,u=0.7283349448900478,v=0.8782206753734855,w=0.47801707721757003,x=6.113102854628842 color=red,shape=square,flag=1,i=32808,u=0.11877132627548537,v=0.5562890622969119,w=0.5254728874960856,x=3.5607861390070803 color=red,shape=square,flag=1,i=32810,u=0.18638017786781336,v=0.15147107506841828,w=0.518594388590605,x=5.776604135254078 color=red,shape=triangle,flag=0,i=32823,u=0.019546512636961277,v=0.7297009882606014,w=0.5020076643313628,x=4.21173761178851 color=red,shape=circle,flag=0,i=32850,u=0.08561446532633354,v=0.09718124452985552,w=0.5112306260223481,x=5.611993204902898 color=red,shape=circle,flag=1,i=32858,u=0.022743711990624527,v=-0.07431716804508803,w=0.510613417409727,x=6.658890632436983 color=purple,shape=triangle,flag=0,i=32868,u=0.03580753056628516,v=0.9144736089299262,w=0.5220774021640889,x=5.273346771555825 color=yellow,shape=square,flag=1,i=32871,u=0.6016128178556441,v=0.6731243644083288,w=0.5176526479112705,x=5.243038233400318 color=red,shape=square,flag=0,i=32878,u=0.8908386918234684,v=0.2521529089942207,w=0.5229081191254045,x=2.6822998910699027 color=purple,shape=circle,flag=0,i=32893,u=0.9511630714573232,v=0.31720116651082364,w=0.5162633135890542,x=4.703289829994978 color=blue,shape=square,flag=1,i=32927,u=0.061298772069913854,v=0.8961443790039122,w=0.4721092867611639,x=5.550239755664254 color=red,shape=circle,flag=0,i=32954,u=0.4382790503346733,v=0.5280133474272716,w=0.5030571663102756,x=7.407521664233937 color=red,shape=circle,flag=0,i=32969,u=0.09086048446175976,v=0.17492728926937143,w=0.5005242760486518,x=3.8368044162916224 color=green,shape=triangle,flag=0,i=32979,u=0.9565877633142008,v=0.6930816314512078,w=0.4816087030171712,x=4.614660534339733 color=red,shape=triangle,flag=1,i=32995,u=0.0892500458749641,v=0.6616946215862346,w=0.5204257400970129,x=4.26005110843244 color=red,shape=square,flag=1,i=32997,u=0.9334755525105627,v=0.5056734437982556,w=0.5215779512398034,x=5.528773143662652 color=purple,shape=circle,flag=0,i=33000,u=0.1782957982498975,v=0.8780901538936552,w=0.5143171654754598,x=5.8768198236300755 color=purple,shape=triangle,flag=0,i=33009,u=0.8663737140507328,v=0.783807814279407,w=0.5272262140832616,x=5.536663010743935 color=yellow,shape=square,flag=0,i=33030,u=0.4651152927513983,v=0.3602632945931926,w=0.5331143301453313,x=7.6345432040879295 color=red,shape=square,flag=1,i=33036,u=0.03470841178099904,v=0.6341489915183246,w=0.5191651416832344,x=5.516463901783101 color=red,shape=triangle,flag=0,i=33052,u=0.2922274997969324,v=0.9846500142491651,w=0.5107062704090012,x=3.9360953088487793 color=red,shape=triangle,flag=1,i=33056,u=0.7850283001716426,v=0.7599520866476104,w=0.5124377690192731,x=5.041794869223895 color=red,shape=triangle,flag=1,i=33060,u=0.7852468915431168,v=0.7016513057112611,w=0.5074279656298706,x=4.045906807305639 color=red,shape=square,flag=1,i=33073,u=0.30132899917604317,v=0.18533002968899426,w=0.5146883212733246,x=6.2797647612309815 color=red,shape=circle,flag=0,i=33092,u=0.2905604215817402,v=0.26682598973926164,w=0.5201868694731542,x=3.792800013060998 color=purple,shape=circle,flag=0,i=33134,u=0.15618552072155845,v=0.06919621582317592,w=0.5125020002065729,x=5.212852970245521 color=red,shape=square,flag=0,i=33140,u=0.6585081332310359,v=0.9667074053765864,w=0.5163555554335203,x=6.098770797963791 color=purple,shape=square,flag=0,i=33157,u=0.46212890188485545,v=0.625137805129282,w=0.5053429697218541,x=4.29239939967925 color=blue,shape=square,flag=0,i=33160,u=0.7898244199380381,v=0.9188529669419712,w=0.46346768947896877,x=5.8308112695063015 color=purple,shape=circle,flag=0,i=33179,u=0.5438418523715753,v=0.3472092475117562,w=0.508455522738372,x=6.370039900273446 color=red,shape=circle,flag=1,i=33182,u=0.9367413023051921,v=0.9356999770483273,w=0.5326234780762712,x=5.417480842508904 color=red,shape=circle,flag=1,i=33184,u=0.874599632720004,v=0.9510434905248792,w=0.5334452736644045,x=1.978455829594094 color=purple,shape=square,flag=0,i=33185,u=0.7760270353900044,v=0.7661734308434004,w=0.5075931386160416,x=7.142709929123115 color=purple,shape=triangle,flag=0,i=33191,u=0.4106078619000615,v=0.32656593840243553,w=0.5153208494716195,x=3.9131538166197255 color=red,shape=square,flag=1,i=33216,u=0.6493394196009691,v=0.49000510937353015,w=0.5093941038753869,x=3.2861871044312365 color=red,shape=circle,flag=1,i=33222,u=0.26463638320350424,v=0.2236520811055912,w=0.5317671651383756,x=6.9064585829203935 color=red,shape=square,flag=0,i=33225,u=0.2810176899713178,v=0.9682968139514915,w=0.5103265085201572,x=3.538667671900324 color=red,shape=triangle,flag=1,i=33230,u=0.9092840920930229,v=0.932861340491937,w=0.5168416968265344,x=5.938329643718402 color=red,shape=circle,flag=0,i=33235,u=0.7605722298145382,v=0.6638542659368751,w=0.5310484146416167,x=3.732441352111149 color=blue,shape=triangle,flag=1,i=33239,u=0.0531960129300687,v=0.527087430298157,w=0.4952531521869843,x=6.643823645645008 color=purple,shape=square,flag=0,i=33255,u=0.7618637253516649,v=0.3435316755984419,w=0.49959534661166877,x=5.534841496457631 color=yellow,shape=square,flag=1,i=33263,u=0.14179071616906058,v=0.8161388617100427,w=0.5228064088293859,x=4.3496314869206785 color=green,shape=triangle,flag=0,i=33265,u=0.11232896330952147,v=0.9598717777536011,w=0.48561516946527766,x=4.959867117970179 color=yellow,shape=square,flag=1,i=33269,u=0.631256517492463,v=0.8483710019686178,w=0.518930047707305,x=5.359029599173894 color=red,shape=square,flag=0,i=33308,u=0.7955270591347272,v=0.22842133208530724,w=0.5092678013044601,x=5.0181528760107525 color=green,shape=square,flag=0,i=33316,u=0.1934525173207342,v=0.024859410552620087,w=0.4636646219951484,x=3.4364646805265813 color=blue,shape=square,flag=1,i=33323,u=0.6328985796809088,v=0.5371547030694789,w=0.47275191454349197,x=6.2070560605148755 color=blue,shape=circle,flag=0,i=33324,u=0.4355433014907806,v=0.14348702134236835,w=0.48347146016713394,x=4.583848526395438 color=red,shape=square,flag=0,i=33330,u=0.9547506060421391,v=0.15644715185217528,w=0.5074151029513085,x=4.988210476681349 color=red,shape=circle,flag=0,i=33339,u=0.395951382030177,v=0.4690457786021151,w=0.5263989691998087,x=3.830936051131918 color=yellow,shape=triangle,flag=1,i=33384,u=0.937053069014554,v=0.41421991895810684,w=0.5215462722781082,x=4.71658156473542 color=red,shape=triangle,flag=1,i=33387,u=0.11042373483238732,v=0.2196353856999005,w=0.507860582766067,x=4.909263467330887 color=red,shape=circle,flag=0,i=33392,u=0.3584193316943274,v=0.43342800755801575,w=0.5366763043446198,x=3.7127400894717844 color=red,shape=square,flag=0,i=33399,u=0.8407975280050823,v=0.550262211104605,w=0.5144722922275274,x=3.1307343891515074 color=red,shape=square,flag=0,i=33409,u=0.04837320004778167,v=0.9453096261457511,w=0.5226299334766344,x=4.145408001962476 color=red,shape=square,flag=0,i=33430,u=0.7557420951042636,v=0.6274011228438122,w=0.5190456129482628,x=5.710222217579241 color=yellow,shape=square,flag=1,i=33434,u=0.5925586618016372,v=0.8642705300196425,w=0.5075400894634231,x=4.376140424985202 color=green,shape=triangle,flag=0,i=33440,u=0.128734666956844,v=0.4935100822626092,w=0.49447441731960207,x=4.017749836578955 color=blue,shape=triangle,flag=1,i=33463,u=0.8327195325511809,v=0.5687789044576186,w=0.4812500380046313,x=6.715792283469528 color=green,shape=circle,flag=0,i=33465,u=0.7573090091397728,v=0.14217508067307683,w=0.46049494689890613,x=3.216325379030023 color=purple,shape=square,flag=0,i=33472,u=0.8053104216939593,v=0.5649751739490793,w=0.5009590951470976,x=4.731104486410476 color=blue,shape=square,flag=1,i=33485,u=0.33307147725126396,v=0.8578623991579769,w=0.4766061787566923,x=2.673292048720166 color=red,shape=square,flag=0,i=33488,u=0.0852817108198839,v=0.35831011255889866,w=0.5115311108701357,x=4.5710153259783075 color=red,shape=triangle,flag=0,i=33502,u=0.9453784991134617,v=0.5964991605997636,w=0.5256741456919752,x=5.0968835655930205 color=yellow,shape=square,flag=1,i=33510,u=0.476237863271449,v=0.2299353975160232,w=0.5019132696785426,x=4.546785402720325 color=green,shape=triangle,flag=0,i=33519,u=0.7861768808447998,v=0.501560557142545,w=0.492695619424411,x=4.18826723005946 color=yellow,shape=square,flag=1,i=33576,u=0.3098376725521097,v=0.8525628505287842,w=0.49774122460981685,x=4.494754378604669 color=orange,shape=square,flag=1,i=33581,u=0.8466575606120571,v=0.9824458415307831,w=0.48420912272421157,x=4.304261218143297 color=red,shape=triangle,flag=1,i=33585,u=0.940590719030772,v=0.5102080533960888,w=0.49762936689368364,x=5.95773795189861 color=red,shape=triangle,flag=0,i=33599,u=0.11126641426591499,v=0.7407708894185547,w=0.491885275344142,x=6.697885922365963 color=green,shape=triangle,flag=1,i=33624,u=0.8998354713692119,v=0.22574442291570274,w=0.5022537733586984,x=6.8576295941960845 color=purple,shape=square,flag=0,i=33625,u=0.5344328737677263,v=0.7475693042065513,w=0.5003826610245873,x=3.989829588981453 color=red,shape=triangle,flag=0,i=33630,u=0.5782696616005765,v=0.9760203785705569,w=0.4912191555946164,x=3.7160279478181315 color=red,shape=square,flag=0,i=33655,u=0.4958670139651731,v=0.6737689627330573,w=0.5090254268071853,x=3.2132077010541775 color=green,shape=square,flag=1,i=33697,u=0.7322935912265445,v=0.07626071869309903,w=0.47290935393202693,x=5.914213346338923 color=red,shape=circle,flag=0,i=33718,u=0.00991552445414945,v=0.02127099216301769,w=0.5016001757077556,x=6.001019008382052 color=blue,shape=triangle,flag=1,i=33719,u=0.5137958517836968,v=0.06885068919055182,w=0.49038853348429884,x=6.69133698373285 color=purple,shape=square,flag=0,i=33754,u=0.9561599641074756,v=0.5501048141712281,w=0.4993870720207535,x=5.045089062446263 color=purple,shape=square,flag=0,i=33772,u=0.7370742113118581,v=0.3730353916810043,w=0.5019065732030719,x=3.711468756834424 color=purple,shape=square,flag=0,i=33773,u=0.09447098819853716,v=0.790287428273776,w=0.49911439564292837,x=6.192472033553568 color=red,shape=circle,flag=0,i=33777,u=0.8847292101053823,v=0.806570693908014,w=0.5109699807126428,x=5.226442591485785 color=purple,shape=circle,flag=1,i=33778,u=0.5350822848202962,v=0.2245304196200576,w=0.506154683713476,x=6.126712791034255 color=red,shape=square,flag=1,i=33781,u=0.48994037628314646,v=0.25674747317596747,w=0.501410317035248,x=4.286095475400842 color=blue,shape=square,flag=1,i=33789,u=0.0504095165754711,v=0.01065457219964927,w=0.46672206122909715,x=4.1379560497738 color=red,shape=square,flag=0,i=33804,u=0.6835496616681078,v=0.517987895942444,w=0.4951210309275078,x=5.478495130930987 color=yellow,shape=square,flag=1,i=33825,u=0.30159369435658434,v=0.814191094573637,w=0.4818169513038904,x=4.9468734253592155 color=yellow,shape=triangle,flag=1,i=33832,u=0.44732346961311575,v=0.07696682381034459,w=0.5022999478095949,x=6.116966828681897 color=green,shape=triangle,flag=0,i=33850,u=0.9632529800944208,v=0.14027292499084576,w=0.49405564243040323,x=3.6760398361651596 color=red,shape=square,flag=1,i=33862,u=0.5332902509478825,v=0.8962620318569003,w=0.49812318796913635,x=6.1413247609702575 color=red,shape=square,flag=1,i=33870,u=0.048764699218243224,v=0.00624750884993408,w=0.5054941592025307,x=7.2525370892298255 color=orange,shape=square,flag=1,i=33873,u=0.8689076212131088,v=0.751516956021458,w=0.48262072178033993,x=3.5114467753569034 color=purple,shape=triangle,flag=0,i=33910,u=0.2535445131820081,v=0.6609382011095314,w=0.503900635875241,x=5.8161117638499436 color=yellow,shape=triangle,flag=0,i=33926,u=0.11435983140396122,v=0.6677516106391923,w=0.49421446223014703,x=5.948342155537765 color=purple,shape=triangle,flag=0,i=33930,u=0.6919528562978747,v=0.42388857969831006,w=0.502527103193109,x=4.151183644935942 color=red,shape=triangle,flag=1,i=33937,u=0.5279930616494033,v=0.6984021103897404,w=0.49975889556130276,x=6.054378852177866 color=red,shape=square,flag=0,i=33942,u=0.06132506684318162,v=0.3466748219296514,w=0.5063137864461251,x=3.3900907995206118 color=red,shape=square,flag=1,i=33947,u=0.7182598065996636,v=0.7680358019223692,w=0.502450819468748,x=3.378489779117633 color=purple,shape=triangle,flag=0,i=33957,u=0.601550340430716,v=0.3100317848575521,w=0.49661749460458937,x=5.991108325027587 color=red,shape=circle,flag=0,i=33968,u=0.014949678534078692,v=0.04279839083888062,w=0.49856663302714954,x=5.52360697936341 color=red,shape=triangle,flag=0,i=33976,u=0.2672791558404415,v=0.5597226424873892,w=0.49810445512555035,x=3.3653932619685194 color=red,shape=triangle,flag=0,i=33995,u=0.3990942754944298,v=0.45458509707451755,w=0.495453707149231,x=4.4974563970651475 color=yellow,shape=triangle,flag=0,i=34013,u=0.1452264823632976,v=0.6635087498710336,w=0.4966461006453434,x=3.4997941458263355 color=blue,shape=circle,flag=0,i=34028,u=0.05045555125321999,v=0.46714554109842454,w=0.48476865377311656,x=4.441997101725152 color=purple,shape=square,flag=0,i=34037,u=0.34037448933266845,v=0.816109018563805,w=0.49709454937519393,x=6.450892352191203 color=purple,shape=triangle,flag=1,i=34041,u=0.7910490665453144,v=0.5182527125227822,w=0.49506616730800096,x=5.343990675290571 color=red,shape=circle,flag=0,i=34051,u=0.7556445666799146,v=0.6980041368463658,w=0.4982567322353604,x=7.259476549187287 color=green,shape=triangle,flag=0,i=34059,u=0.532191386643586,v=0.8938163904668864,w=0.5021961708195306,x=3.483504218142245 color=red,shape=square,flag=0,i=34068,u=0.8552157555152661,v=0.7695094996534865,w=0.5001313006576039,x=4.091816379282249 color=red,shape=square,flag=0,i=34090,u=0.5189408663603009,v=0.4804978218013839,w=0.5054123840694835,x=6.821520734374373 color=green,shape=square,flag=1,i=34092,u=0.8631077859365033,v=0.753604971778308,w=0.4896272438099371,x=6.10654553074706 color=yellow,shape=square,flag=1,i=34098,u=0.31885193374206355,v=0.4097407686226072,w=0.49079824415735407,x=4.948081409291022 color=purple,shape=triangle,flag=0,i=34102,u=0.10443930837746984,v=0.8925107022331715,w=0.5037227782146368,x=5.676617131559723 color=blue,shape=circle,flag=1,i=34118,u=0.3983487912966074,v=0.6476964705855391,w=0.4840195339523367,x=4.90919899563209 color=red,shape=square,flag=1,i=34136,u=0.6109591847553382,v=0.8324457681899656,w=0.5175179059509419,x=5.867586887031312 color=blue,shape=triangle,flag=0,i=34140,u=0.7306166740899213,v=0.3443451697713036,w=0.48756257408856274,x=3.0108610334021755 color=red,shape=circle,flag=0,i=34141,u=0.39641500695082477,v=0.34055260239888746,w=0.48883418429693526,x=4.186706699937368 color=yellow,shape=triangle,flag=1,i=34146,u=0.21435960233958273,v=0.16803444133651257,w=0.4838956850780505,x=4.889177224954879 color=purple,shape=circle,flag=0,i=34154,u=0.4674506226952587,v=0.3245070224091263,w=0.5031079781804169,x=4.115207982087914 color=red,shape=circle,flag=1,i=34160,u=0.3060607345409456,v=0.3917873076953941,w=0.4819574328206247,x=5.6236685547090985 color=red,shape=circle,flag=1,i=34169,u=0.4881481202474147,v=0.3922065030797688,w=0.473840586325123,x=6.656590682792996 color=orange,shape=square,flag=1,i=34176,u=0.6674874615593233,v=0.024719925407742815,w=0.4843753664889284,x=7.464458307779386 color=red,shape=square,flag=0,i=34185,u=0.7148651055989332,v=0.9998235495379489,w=0.5040868761210272,x=5.532235888558179 color=green,shape=circle,flag=0,i=34190,u=0.7280427472907148,v=0.4567579911934213,w=0.45854535776078426,x=5.21813543103504 color=yellow,shape=triangle,flag=1,i=34202,u=0.7331384343207656,v=0.4332784698955704,w=0.4903244539747814,x=3.5884950102750444 color=red,shape=triangle,flag=0,i=34216,u=0.06472286549031248,v=0.5774469094535141,w=0.5263138982557002,x=4.310565034467615 color=purple,shape=triangle,flag=0,i=34219,u=0.1432972365093521,v=0.301439118277821,w=0.49417800803008266,x=4.9160695802641 color=red,shape=circle,flag=1,i=34237,u=0.9761788543112698,v=0.8778071736573624,w=0.4783976963137299,x=5.523065256801323 color=red,shape=circle,flag=0,i=34241,u=0.6619908107313948,v=0.61624698819128,w=0.48255339917169754,x=6.627922490385643 color=red,shape=square,flag=1,i=34249,u=0.4812995304756551,v=0.22961544612252704,w=0.5064937621560192,x=5.703153165167358 color=red,shape=square,flag=1,i=34251,u=0.820249401815597,v=0.9323267701725214,w=0.506319707203613,x=6.37611441097098 color=yellow,shape=square,flag=1,i=34261,u=0.3785806106206845,v=0.4162589031627225,w=0.4842083643320112,x=4.270000447679108 color=red,shape=square,flag=0,i=34269,u=0.8718026394051107,v=0.0470259567904977,w=0.5143702663858574,x=6.540272804662254 color=red,shape=circle,flag=0,i=34279,u=0.4059290930430718,v=0.48421466055444823,w=0.48325725681917764,x=6.513169741585334 color=red,shape=square,flag=0,i=34305,u=0.27563800803707195,v=0.011433321043400557,w=0.5214486399000018,x=5.59630435120645 color=yellow,shape=triangle,flag=0,i=34333,u=0.8946643080186434,v=0.6776637820177036,w=0.48954653582121926,x=7.350105343920716 color=red,shape=square,flag=1,i=34368,u=0.7732638239554772,v=0.14525452477212875,w=0.5345337694823336,x=5.510414436862223 color=blue,shape=square,flag=1,i=34370,u=0.4767559856843069,v=0.22973611722272336,w=0.49681109652176114,x=5.438582601401239 color=red,shape=circle,flag=0,i=34376,u=0.7577613993026762,v=0.6585598837700077,w=0.4726208497533086,x=3.964848170673694 color=yellow,shape=circle,flag=1,i=34397,u=0.317513693975086,v=0.6546923165741305,w=0.4816788980290248,x=6.571910646654488 color=red,shape=circle,flag=1,i=34403,u=0.21941503085911906,v=0.18869929431950108,w=0.48859306821800486,x=5.842740479412579 color=blue,shape=triangle,flag=1,i=34409,u=0.8469617797667944,v=0.16958776048164514,w=0.4793445672488068,x=4.773700655856586 color=yellow,shape=circle,flag=1,i=34430,u=0.6457931187435664,v=0.42841099095573854,w=0.4799835219408184,x=5.9649795373803265 color=blue,shape=square,flag=1,i=34431,u=0.8543938502155792,v=0.34692928235956055,w=0.502790984966972,x=5.437362331626982 color=yellow,shape=triangle,flag=1,i=34476,u=0.5967973077120329,v=0.5930523139610333,w=0.509088854020594,x=3.0432641922775545 color=red,shape=square,flag=1,i=34507,u=0.27936620925472266,v=0.4866543680579324,w=0.5156987596344246,x=6.9797896614208526 color=red,shape=triangle,flag=1,i=34522,u=0.2608818745635353,v=0.3364049381210744,w=0.5233605199609624,x=4.940278775742981 color=red,shape=square,flag=0,i=34523,u=0.22225796470244064,v=0.1332582605679279,w=0.5205748439676586,x=6.309789328434795 color=blue,shape=square,flag=1,i=34566,u=0.04107424026323203,v=0.11983843877519573,w=0.5078371311459742,x=3.7105058188189854 color=red,shape=triangle,flag=1,i=34567,u=0.7215146239803284,v=0.041272310151199476,w=0.5360961605003184,x=7.258734465807913 color=red,shape=triangle,flag=0,i=34570,u=0.7647156151988541,v=0.8448194374182678,w=0.5397274236176406,x=5.359253363235088 color=yellow,shape=circle,flag=0,i=34576,u=0.6530777146889488,v=0.7180653265277144,w=0.4859492262000971,x=3.855290951277588 color=red,shape=square,flag=0,i=34581,u=0.7470469353368995,v=0.9413484225599422,w=0.5232076227576647,x=6.132329217012842 color=green,shape=circle,flag=0,i=34589,u=0.6862005044395765,v=0.7819001574269004,w=0.4626182538011916,x=5.0849088715532105 color=yellow,shape=triangle,flag=1,i=34601,u=0.42386517751772645,v=0.5877864631161966,w=0.505340184155104,x=3.2936319015205733 color=red,shape=circle,flag=1,i=34608,u=0.10600943961119602,v=0.1331812284291659,w=0.48832218314379305,x=5.624601352964853 color=green,shape=square,flag=0,i=34612,u=0.8035669458432357,v=0.15886599247592115,w=0.4815248255178455,x=5.372758381787815 color=yellow,shape=circle,flag=1,i=34613,u=0.8806152218712957,v=0.029301932184296442,w=0.48573334959018694,x=4.570677922283701 color=yellow,shape=square,flag=1,i=34626,u=0.13059085790395775,v=0.4238075454419431,w=0.4836004295976302,x=4.338146853924343 color=purple,shape=circle,flag=0,i=34627,u=0.5900033669151352,v=0.699862983143041,w=0.5052280721198084,x=5.129133579277615 color=red,shape=triangle,flag=0,i=34638,u=0.3209495315365807,v=0.6480613429075162,w=0.5376903889704104,x=4.1118838396995985 color=purple,shape=triangle,flag=0,i=34666,u=0.04626449659658516,v=0.48307726625660397,w=0.49179329156097723,x=5.42509346790123 color=purple,shape=triangle,flag=0,i=34671,u=0.7964359374317203,v=0.747560253900851,w=0.49520275786403684,x=4.848034152189103 color=blue,shape=square,flag=0,i=34685,u=0.21451581925791252,v=0.893062049855773,w=0.5086448009960358,x=4.579116160585294 color=red,shape=square,flag=0,i=34695,u=0.7088033444564572,v=0.5732100097135284,w=0.4923197385560654,x=3.4356147648010213 color=yellow,shape=triangle,flag=1,i=34710,u=0.1737198440162111,v=0.22554513366711282,w=0.509951351802705,x=6.030722829976561 color=yellow,shape=square,flag=1,i=34713,u=0.49982766585059957,v=0.3567875401759866,w=0.4899891118211901,x=5.497034004272597 color=red,shape=circle,flag=0,i=34728,u=0.6556410666827029,v=0.7435466392991773,w=0.4885520392718432,x=3.1734941717153027 color=purple,shape=triangle,flag=0,i=34740,u=0.6889750347172782,v=0.7396549894769746,w=0.4984921030129261,x=5.115578423799099 color=yellow,shape=triangle,flag=1,i=34752,u=0.6164599768416416,v=0.5750169347854348,w=0.50450342241927,x=5.820965819877017 color=red,shape=triangle,flag=1,i=34780,u=0.3091558671767515,v=0.5618734327661591,w=0.5604418880514627,x=3.6930811706977047 color=red,shape=square,flag=0,i=34812,u=0.16887935202525606,v=0.4826833420664698,w=0.47990070043902017,x=5.208871401980609 color=red,shape=square,flag=0,i=34816,u=0.016924065380366393,v=0.49940285977919563,w=0.48149141539927376,x=4.876700004560515 color=red,shape=square,flag=1,i=34825,u=0.16586991590177458,v=0.9072323489467463,w=0.48305469099259585,x=4.817191956789259 color=blue,shape=circle,flag=1,i=34833,u=0.7879939112129746,v=0.6417667094234194,w=0.48251969023459085,x=5.853176007679122 color=red,shape=square,flag=0,i=34851,u=0.8363412245763133,v=0.7168488825346744,w=0.48637705536349857,x=4.6482727901073035 color=blue,shape=triangle,flag=0,i=34863,u=0.5996733651406758,v=0.12079044043743303,w=0.4762187048052572,x=5.072846598598342 color=yellow,shape=triangle,flag=1,i=34890,u=0.22220441627360665,v=0.0024720066691538145,w=0.5084801358731889,x=4.285505456496424 color=red,shape=circle,flag=1,i=34892,u=0.017067035996868873,v=-0.010872275596614411,w=0.5009184047671624,x=5.594557159864827 color=blue,shape=circle,flag=1,i=34904,u=0.6475103888218945,v=0.8358986744405981,w=0.4901718393276379,x=4.936780792820824 color=purple,shape=square,flag=0,i=34909,u=0.21548416630048384,v=0.7168881304141844,w=0.4847670958656207,x=6.03470578686936 color=red,shape=square,flag=0,i=34928,u=0.33826822157857617,v=0.24337084909399997,w=0.48795962184069913,x=5.860006625985281 color=green,shape=square,flag=0,i=34933,u=0.5282606201586797,v=0.13326302500684695,w=0.4969544006632784,x=4.636325315887119 color=yellow,shape=triangle,flag=1,i=34936,u=0.5977030363335227,v=0.3710969354393244,w=0.5134264596280065,x=2.898301446113752 color=red,shape=triangle,flag=1,i=34942,u=0.7096094547277375,v=0.23279768477872154,w=0.5519681198866045,x=3.7005620130868944 color=blue,shape=circle,flag=0,i=34946,u=0.7150669790785441,v=0.1505620611716597,w=0.4937139372147337,x=3.5124403430665354 color=red,shape=square,flag=0,i=34950,u=0.9954654645739696,v=0.9979895387752443,w=0.48489049569183607,x=4.125063551810273 color=red,shape=circle,flag=0,i=34951,u=0.9336534027163426,v=0.979886133911313,w=0.509769355264013,x=3.2463135803494603 color=red,shape=triangle,flag=1,i=34967,u=0.6144961282101254,v=0.5919567607401033,w=0.5547614845912089,x=5.133940701264204 color=purple,shape=triangle,flag=0,i=34979,u=0.7488960031617149,v=0.7169027469026279,w=0.4971962787920276,x=6.563317492327125 color=red,shape=triangle,flag=1,i=34998,u=0.2693593786685329,v=0.8722544148301712,w=0.5486259251165017,x=5.6337722270622095 color=red,shape=square,flag=0,i=35005,u=0.7034975533828274,v=0.8550829122275493,w=0.49809808081819124,x=3.7301181595835478 color=red,shape=square,flag=1,i=35021,u=0.9879862569942768,v=0.9930386644519742,w=0.501898815665082,x=3.7187441082345303 color=red,shape=circle,flag=1,i=35025,u=0.30488500886194114,v=0.20975391569347487,w=0.5014465035451617,x=4.270505116858137 color=red,shape=triangle,flag=1,i=35031,u=0.8623052609548261,v=0.29012940374779694,w=0.5570281973151101,x=4.643179994283906 color=red,shape=square,flag=0,i=35047,u=0.9655872321295176,v=0.2827679599658268,w=0.4967040448943348,x=4.663001085848208 color=red,shape=triangle,flag=0,i=35051,u=0.6567955755291046,v=0.814195441949847,w=0.5503388695574147,x=5.990816849318608 color=red,shape=square,flag=1,i=35059,u=0.36768548008275825,v=0.44440292324547337,w=0.4896219263281178,x=5.845965036568631 color=red,shape=square,flag=0,i=35068,u=0.655736294735662,v=0.4508986039388483,w=0.4890681706036116,x=3.8009093460037895 color=blue,shape=circle,flag=0,i=35072,u=0.44480284265145986,v=0.39821075947105034,w=0.4932134947430758,x=5.519185245571755 color=green,shape=square,flag=0,i=35075,u=0.24024543656366526,v=0.6589010388292955,w=0.498227805505063,x=4.469746225531193 color=red,shape=circle,flag=0,i=35087,u=0.38223948665874974,v=0.3400594344005033,w=0.4954786987998591,x=4.690808274663953 color=red,shape=square,flag=1,i=35091,u=0.27479080189356064,v=0.7431595817085408,w=0.5055568803511261,x=5.945629748823969 color=red,shape=triangle,flag=0,i=35093,u=0.9364565101134221,v=0.7605155975636313,w=0.5484947131859994,x=8.837284567094477 color=yellow,shape=square,flag=1,i=35094,u=0.7547643969215461,v=0.9360498110969584,w=0.47826146568795513,x=6.5809845192487515 color=yellow,shape=square,flag=1,i=35097,u=0.3061678382784907,v=0.35531037935800125,w=0.4798559275663495,x=6.188062952289637 color=green,shape=square,flag=0,i=35104,u=0.6975462310121865,v=0.9121585541626753,w=0.5026444540103487,x=4.717891933001945 color=blue,shape=triangle,flag=1,i=35105,u=0.8349796707463456,v=0.3620401657288581,w=0.48516381462957286,x=5.700140229447996 color=blue,shape=circle,flag=1,i=35120,u=0.27764955621903553,v=0.2561302057739422,w=0.49608993723368133,x=5.780915824648228 color=red,shape=square,flag=0,i=35130,u=0.45891455304048,v=0.22216580886164294,w=0.49618747027284893,x=4.444035957978259 color=red,shape=square,flag=1,i=35137,u=0.257354992842448,v=0.6173552745514805,w=0.4921628248843043,x=5.933105110161988 color=blue,shape=square,flag=0,i=35138,u=0.7705642362236201,v=0.3517590301253988,w=0.5013155679738115,x=4.043694758548754 color=yellow,shape=triangle,flag=1,i=35148,u=0.7762653468986148,v=0.40651535517352677,w=0.5234622308968215,x=5.903222111483259 color=red,shape=triangle,flag=0,i=35174,u=0.9183232167879394,v=0.2148677217517545,w=0.5601450263351141,x=3.38974840528139 color=green,shape=circle,flag=0,i=35200,u=0.23089445532810493,v=0.8577953992016389,w=0.46015046569051077,x=3.1613221552960744 color=red,shape=triangle,flag=0,i=35211,u=0.3705037168157047,v=0.885810166555292,w=0.5522418089539656,x=2.897925453018292 color=purple,shape=triangle,flag=0,i=35219,u=0.9725001132283482,v=0.13277639935330288,w=0.487747046641999,x=2.2015620155468665 color=red,shape=triangle,flag=0,i=35223,u=0.7040324213278444,v=0.8921678841206723,w=0.546727222145781,x=7.103099015035235 color=blue,shape=circle,flag=1,i=35231,u=0.996123815251446,v=0.6352617109220584,w=0.5014828022543371,x=5.352406799116789 color=blue,shape=square,flag=0,i=35251,u=0.5110585227045429,v=0.4027004366585739,w=0.5051066189703028,x=3.2446455260250744 color=red,shape=square,flag=0,i=35258,u=0.9389096383301606,v=0.3673634766381102,w=0.458035191864455,x=6.511817427595346 color=green,shape=triangle,flag=0,i=35262,u=0.7553734595769059,v=0.7395089724587098,w=0.5171563143940545,x=5.233390079591427 color=red,shape=square,flag=0,i=35263,u=0.5295481090921785,v=0.1808946419744767,w=0.45629723390052845,x=6.634876630177293 color=yellow,shape=square,flag=1,i=35265,u=0.15751361753859483,v=0.9747516389136786,w=0.4867899697485034,x=4.474685379889176 color=yellow,shape=square,flag=1,i=35268,u=0.16988476612564363,v=0.18747064858546736,w=0.4902998496021098,x=4.570701388995132 color=red,shape=circle,flag=1,i=35269,u=0.9696382540867533,v=1.013897094549336,w=0.5036081654433147,x=5.741380525592202 color=blue,shape=triangle,flag=1,i=35272,u=0.8734980610079883,v=0.7685454483649139,w=0.4771442252401473,x=4.408545021637006 color=green,shape=square,flag=0,i=35273,u=0.18196645736648154,v=0.27177407753971494,w=0.5057376136819023,x=4.937007914202822 color=orange,shape=triangle,flag=0,i=35286,u=0.17722959525105375,v=0.12637391729931358,w=0.5124620404892575,x=5.445145459864347 color=green,shape=triangle,flag=0,i=35297,u=0.12326812808571719,v=0.3968028504235963,w=0.5167279077327283,x=3.1556492835137235 color=red,shape=circle,flag=1,i=35320,u=0.19404162328155494,v=0.2593099200554975,w=0.49693745457872984,x=4.399716250313301 color=yellow,shape=circle,flag=1,i=35328,u=0.6305700239322426,v=0.21611845509758276,w=0.4977752260509924,x=4.151003456685091 color=yellow,shape=square,flag=1,i=35354,u=0.3018764613738272,v=0.5683737504450298,w=0.4893524201975025,x=4.358317141775494 color=red,shape=square,flag=1,i=35356,u=0.7611142043455059,v=0.3967923275407611,w=0.459699627955268,x=5.684971940704642 color=red,shape=square,flag=0,i=35363,u=0.8944654058022213,v=0.3403254490551689,w=0.45556327224719945,x=5.1492207412477 color=orange,shape=square,flag=0,i=35385,u=0.32563287458523493,v=0.3568824006318867,w=0.48049693943870253,x=5.082151895588843 color=green,shape=circle,flag=0,i=35391,u=0.4463217787124222,v=0.613546486639892,w=0.45482093402284224,x=4.1980895699935035 color=yellow,shape=square,flag=1,i=35401,u=0.9421482812092415,v=0.22494603773635746,w=0.4926965740191712,x=5.30536775361479 color=blue,shape=triangle,flag=1,i=35404,u=0.8068114917862665,v=0.7609159408005416,w=0.47039609338079186,x=3.1655767166448165 color=blue,shape=circle,flag=0,i=35424,u=0.9723740607051794,v=0.053951199263640226,w=0.4997814582794458,x=2.316503874939617 color=purple,shape=triangle,flag=1,i=35432,u=0.4803136037759438,v=0.2089621904779686,w=0.4868646845394705,x=4.740663342443059 color=green,shape=triangle,flag=0,i=35437,u=0.7201178699444909,v=0.6371143146612083,w=0.5145406588631537,x=7.720951121901103 color=purple,shape=square,flag=0,i=35452,u=0.7398544292415974,v=0.6129954757727973,w=0.49465464882327276,x=2.431532104087084 color=orange,shape=circle,flag=0,i=35458,u=0.9088178696541952,v=0.11739058465274177,w=0.5054053007716468,x=6.004553897248768 color=purple,shape=circle,flag=1,i=35463,u=0.17575284184125572,v=0.7490855955751995,w=0.49341047616880274,x=3.745845516993159 color=red,shape=circle,flag=1,i=35464,u=0.867454232885212,v=0.8556772595522998,w=0.48379126658027194,x=4.900604892587795 color=purple,shape=circle,flag=0,i=35465,u=0.0912784993740926,v=0.9873598165524754,w=0.49287247603294837,x=8.157119547407868 color=orange,shape=circle,flag=0,i=35468,u=0.2707774908576035,v=0.6259084157276901,w=0.5057382987928779,x=5.116109251101737 color=red,shape=square,flag=0,i=35477,u=0.2700867372360217,v=0.14583264800133733,w=0.4793403299870868,x=3.3595387864441437 color=blue,shape=circle,flag=1,i=35488,u=0.9182997597247113,v=0.456190689517743,w=0.4994482629664476,x=5.5173749528557705 color=purple,shape=circle,flag=0,i=35494,u=0.5596337099203815,v=0.30652748843028776,w=0.49301557255583467,x=5.2995898541630915 color=green,shape=circle,flag=0,i=35530,u=0.8096880908744482,v=0.9269545535917043,w=0.45284146096944833,x=6.151688024652061 color=purple,shape=square,flag=0,i=35549,u=0.2949423212891584,v=0.8690753440979728,w=0.4994569355666641,x=4.532049502555437 color=red,shape=square,flag=1,i=35565,u=0.47624089973644135,v=0.07916374297263873,w=0.48033923807806406,x=3.340440022458455 color=blue,shape=square,flag=1,i=35588,u=0.84021940790032,v=0.6679580099121151,w=0.5220327873203584,x=4.9001089389293755 color=blue,shape=circle,flag=1,i=35604,u=0.3552929550329027,v=0.08490058853155247,w=0.5020391780632532,x=5.798981787346546 color=green,shape=triangle,flag=0,i=35617,u=0.33663095632101814,v=0.20856825285674907,w=0.508746926050083,x=5.51081814817882 color=green,shape=square,flag=0,i=35622,u=0.4725956713095468,v=0.4936849785624218,w=0.5163346341007835,x=4.467197490481218 color=red,shape=square,flag=1,i=35623,u=0.3345155609075673,v=0.9689997713208467,w=0.4810680274755842,x=5.77684604798774 color=red,shape=square,flag=0,i=35626,u=0.4288850476194279,v=0.3830469074570414,w=0.4772361426201381,x=6.177358928126811 color=yellow,shape=circle,flag=1,i=35627,u=0.3013463329922611,v=0.03924149703408919,w=0.5021030236560009,x=4.834615846827212 color=red,shape=square,flag=1,i=35630,u=0.610915281182388,v=0.4622742234332208,w=0.4796858473431834,x=5.268669637381702 color=orange,shape=square,flag=1,i=35656,u=0.7407946412358015,v=0.1466537762257486,w=0.4830447558260019,x=3.8276703751800283 color=red,shape=circle,flag=0,i=35665,u=0.9486629504076773,v=1.032743271888732,w=0.47507950478696004,x=3.4237533802490154 color=yellow,shape=square,flag=0,i=35670,u=0.8017079455392203,v=0.8324565235405808,w=0.4890734297890044,x=4.062628347995121 color=purple,shape=circle,flag=1,i=35676,u=0.502751103981982,v=0.3067461377268961,w=0.4902836592750695,x=4.89617344970658 color=green,shape=circle,flag=0,i=35698,u=0.6442889241136163,v=0.7130825779855385,w=0.45297484218400647,x=5.670303347082715 color=yellow,shape=circle,flag=1,i=35708,u=0.622177923604868,v=0.697091953056837,w=0.5070376584353148,x=5.110215835456102 color=yellow,shape=triangle,flag=1,i=35723,u=0.19306483745605496,v=0.7376736766172787,w=0.5245521454800511,x=3.9998149075053937 color=purple,shape=circle,flag=0,i=35733,u=0.5844944241472961,v=0.8788136285229017,w=0.48488691076745927,x=5.64054487375537 color=yellow,shape=square,flag=1,i=35735,u=0.9753956607089511,v=0.3266330765039256,w=0.4876863330647485,x=3.441407669312291 color=red,shape=square,flag=1,i=35741,u=0.12597944458681098,v=0.2960746631341985,w=0.4619377851379353,x=4.609007097094427 color=purple,shape=triangle,flag=0,i=35760,u=0.8619606977209893,v=0.7462029528649634,w=0.4999957863388805,x=3.698901402666472 color=red,shape=square,flag=1,i=35766,u=0.34832036292221913,v=0.31136790366269496,w=0.4645221016628855,x=5.480759547085093 color=green,shape=circle,flag=0,i=35781,u=0.3272717107219767,v=0.05467904352401809,w=0.45791547095604446,x=5.430090159436973 color=green,shape=square,flag=0,i=35782,u=0.5503219618320905,v=0.9059490455665576,w=0.5109469960946523,x=4.628484361687513 color=red,shape=triangle,flag=0,i=35788,u=0.12010060730896133,v=0.2424853913592211,w=0.5252045454571971,x=6.358434479094371 color=red,shape=triangle,flag=0,i=35791,u=0.3685430910108468,v=0.7307990534978458,w=0.5285764092081605,x=5.382108987645677 color=green,shape=circle,flag=0,i=35796,u=0.14026451560374587,v=0.1504851407090676,w=0.4633073534402448,x=7.090406969481044 color=green,shape=circle,flag=0,i=35798,u=0.797455235154612,v=0.07388297272460043,w=0.4624729714543862,x=3.9310042421371683 color=red,shape=square,flag=1,i=35809,u=0.08929112801625261,v=0.9550390801310992,w=0.46334290065871,x=6.0876883218868025 color=green,shape=square,flag=1,i=35824,u=0.6769536678317906,v=0.24874245805869355,w=0.5030608094711576,x=4.65376960607422 color=purple,shape=triangle,flag=0,i=35832,u=0.2398209168856601,v=0.1391002515024441,w=0.49566991371157043,x=5.1119782623455245 color=blue,shape=square,flag=1,i=35867,u=0.007778509178521964,v=0.5590543125572744,w=0.5116875776993812,x=3.3067431120695012 color=yellow,shape=square,flag=1,i=35870,u=0.9762650267531341,v=0.1716058542230009,w=0.4866207017343421,x=3.3635993931178922 color=yellow,shape=circle,flag=1,i=35882,u=0.10489688052522406,v=0.09619165098821159,w=0.48899637844558314,x=3.7557063650425673 color=yellow,shape=square,flag=1,i=35898,u=0.05932649150936753,v=0.9646701819382054,w=0.48595412795995635,x=5.164634370129134 color=red,shape=triangle,flag=0,i=35930,u=0.9992266776567538,v=0.005608293769324368,w=0.5213259603323551,x=5.604037675138165 color=red,shape=circle,flag=1,i=35931,u=0.9596319956050603,v=0.9994251604788358,w=0.46790683802035243,x=5.183794707486837 color=red,shape=circle,flag=0,i=35936,u=0.3657739260107421,v=0.37924867922783556,w=0.46896422586596154,x=7.033610217385781 color=purple,shape=square,flag=0,i=35957,u=0.28522752645294935,v=0.8095838626240286,w=0.5138132851322226,x=5.834548403656761 color=red,shape=square,flag=1,i=35958,u=0.4508382814791214,v=0.6123379592216707,w=0.47051667092975547,x=7.015948231207051 color=red,shape=triangle,flag=0,i=35963,u=0.024968016274487637,v=0.48857846042435493,w=0.5130671432730287,x=4.584500243494941 color=green,shape=square,flag=0,i=35964,u=0.47071576124342795,v=0.043142879962644876,w=0.5099528685235624,x=4.253458849313737 color=red,shape=circle,flag=1,i=35966,u=0.466740249131704,v=0.3960382580872263,w=0.4697493332539897,x=4.543932421642148 color=red,shape=square,flag=0,i=35976,u=0.16781198202988123,v=0.7050050356392615,w=0.472561432923347,x=4.1792215407563775 color=red,shape=circle,flag=1,i=35978,u=0.053957398515282584,v=0.07177719969862469,w=0.47405812199744557,x=3.824791548083543 color=red,shape=square,flag=1,i=35985,u=0.13493528401182942,v=0.328225583427617,w=0.47716060280728373,x=5.624581062577337 color=red,shape=triangle,flag=1,i=35987,u=0.2642142159149524,v=0.8886508387835679,w=0.5138600972488298,x=2.942461536737969 color=red,shape=square,flag=0,i=35997,u=0.13139337751555846,v=0.6332295955532391,w=0.4783104211441366,x=6.141269941762608 color=blue,shape=circle,flag=0,i=36000,u=0.34447972571737606,v=0.7026410374365138,w=0.5013803384637279,x=5.587999353052944 color=yellow,shape=triangle,flag=1,i=36018,u=0.6081787154395466,v=0.7215775810614267,w=0.5347263059504765,x=4.972816677273092 color=yellow,shape=square,flag=1,i=36020,u=0.9312650593076067,v=0.8608806141795469,w=0.4887479113127106,x=5.1442815338472245 color=red,shape=circle,flag=1,i=36023,u=0.822527613824384,v=0.7464777498251306,w=0.47393901443714054,x=6.657369309873818 color=green,shape=square,flag=0,i=36026,u=0.11107014864143827,v=0.9784143095010472,w=0.5026888681937136,x=4.053399132765147 color=green,shape=triangle,flag=0,i=36056,u=0.7626117935882222,v=0.309550158241476,w=0.4845903943528254,x=3.155765217014325 color=red,shape=square,flag=0,i=36061,u=0.3170200561392382,v=0.7429318277623178,w=0.485182656439949,x=5.507732949948455 color=yellow,shape=triangle,flag=1,i=36069,u=0.11861173684922255,v=0.4554698760815262,w=0.5323254948829813,x=5.302950099647103 color=blue,shape=triangle,flag=0,i=36078,u=0.6442921363236699,v=0.9524720494525128,w=0.5093097125807204,x=5.176347585050365 color=yellow,shape=triangle,flag=1,i=36112,u=0.24720498520327272,v=0.581554475961664,w=0.5297442285935843,x=4.530641032502419 color=yellow,shape=triangle,flag=1,i=36129,u=0.48433358117690994,v=0.028872798166045044,w=0.5349045318602461,x=5.531715501503167 color=blue,shape=circle,flag=0,i=36134,u=0.08231896300240193,v=0.8768681886357066,w=0.4947753169052335,x=4.914117598252927 color=blue,shape=square,flag=1,i=36145,u=0.5827265635038165,v=0.2931613245670849,w=0.5083122528108311,x=5.0622286692130904 color=blue,shape=square,flag=0,i=36159,u=0.8656290081694464,v=0.27046859325223294,w=0.5085529440140144,x=6.398646218872774 color=blue,shape=circle,flag=1,i=36174,u=0.10996848628078926,v=0.5920409024544292,w=0.48952616019948114,x=4.741787840413854 color=red,shape=triangle,flag=0,i=36183,u=0.4432696365974439,v=0.755276220089996,w=0.5116173772804775,x=5.370739726083066 color=red,shape=circle,flag=0,i=36195,u=0.16273640922648558,v=0.22856514159926355,w=0.47852290088166755,x=8.363770289164274 color=green,shape=circle,flag=0,i=36197,u=0.28661979648870195,v=0.15287216905441703,w=0.45747883601914274,x=6.36714056548609 color=yellow,shape=square,flag=1,i=36206,u=0.08972911396329153,v=0.6829686415538448,w=0.4810882668332189,x=3.6295803958383224 color=red,shape=square,flag=1,i=36214,u=0.8096482657104355,v=0.8699371231194737,w=0.48352978017878057,x=3.7874598790180225 color=red,shape=circle,flag=0,i=36220,u=0.3366089676059959,v=0.24411493155388006,w=0.47751317870457594,x=4.989970087508334 color=blue,shape=triangle,flag=0,i=36222,u=0.885494699399685,v=0.586622883592311,w=0.5091687358179846,x=6.125939594495925 color=orange,shape=triangle,flag=0,i=36228,u=0.332373235154922,v=0.03799185693503282,w=0.503732822477797,x=5.926032729850331 color=purple,shape=circle,flag=0,i=36245,u=0.6610515032982477,v=0.5349123440965378,w=0.48119674893347175,x=5.009043458121987 color=blue,shape=square,flag=0,i=36249,u=0.9151206637542442,v=0.9233621394880314,w=0.510797431207716,x=6.855579633923043 color=green,shape=circle,flag=0,i=36262,u=0.6398082824373382,v=0.9872322676471937,w=0.4554814750136406,x=4.123749417311191 color=red,shape=triangle,flag=0,i=36269,u=0.9950179533308375,v=0.8492157367428346,w=0.5192388704493881,x=7.20682287351051 color=red,shape=square,flag=0,i=36271,u=0.47880305120222244,v=0.7537335820646339,w=0.4604291460210823,x=3.6692150761335163 color=purple,shape=square,flag=0,i=36295,u=0.751157094254534,v=0.2876663845708769,w=0.5320260009479819,x=4.647464618679696 color=blue,shape=triangle,flag=1,i=36300,u=0.2885172595147546,v=0.568389654989411,w=0.5090930436938382,x=6.321087408909778 color=purple,shape=square,flag=0,i=36301,u=0.09408267998025954,v=0.12100170196826776,w=0.5286103230734899,x=3.289868564502827 color=green,shape=circle,flag=0,i=36320,u=0.12417238686886067,v=0.13895383754582713,w=0.4582982312314858,x=2.6277938975607484 color=red,shape=square,flag=1,i=36332,u=0.6183984283164207,v=0.4077857019223098,w=0.45294280189526454,x=4.486889011425212 color=blue,shape=triangle,flag=1,i=36335,u=0.7009022683854048,v=0.44710919735898713,w=0.5094247735597784,x=5.764873355155639 color=yellow,shape=square,flag=1,i=36344,u=0.05678045495688133,v=0.3283502203736862,w=0.484045754713974,x=5.229813963591415 color=red,shape=square,flag=1,i=36348,u=0.6596157190562775,v=0.10394808464298388,w=0.45205307210229495,x=5.585133508704117 color=blue,shape=triangle,flag=1,i=36353,u=0.9292191615331855,v=0.2433103953230864,w=0.5124512147659767,x=5.635203037194194 color=red,shape=square,flag=0,i=36361,u=0.9097620304753045,v=0.4073058479727405,w=0.4493592880216265,x=4.247461112436097 color=red,shape=square,flag=0,i=36370,u=0.7795127411009333,v=0.6403293629766633,w=0.45150930965841496,x=3.0107310863397543 color=red,shape=square,flag=0,i=36379,u=0.06485730141567869,v=0.11085435876732552,w=0.4535408960110263,x=6.106000425837571 color=red,shape=triangle,flag=0,i=36398,u=0.9871256151996948,v=0.8961354018562923,w=0.521318986790278,x=4.617017041126522 color=red,shape=triangle,flag=0,i=36428,u=0.13816601084921998,v=0.7328007991694945,w=0.5212385014488661,x=4.93275187335988 color=green,shape=circle,flag=0,i=36433,u=0.3713985931656163,v=0.5695768950213503,w=0.4705738757169754,x=4.2470491540708935 color=yellow,shape=circle,flag=1,i=36439,u=0.6263103009567477,v=0.16069954346422588,w=0.4973043248458733,x=5.532482670949542 color=purple,shape=circle,flag=0,i=36440,u=0.7426701120984155,v=0.5788419299702354,w=0.48076849315067743,x=3.9814808142179303 color=green,shape=triangle,flag=0,i=36458,u=0.6385942738686113,v=0.6256491864636414,w=0.48363542839271007,x=5.689807273094277 color=purple,shape=triangle,flag=0,i=36459,u=0.6760530306163005,v=0.8475308246448228,w=0.48897168058732365,x=4.316920661327468 color=green,shape=square,flag=0,i=36463,u=0.6764888564952541,v=0.3377501667645332,w=0.4782767136419434,x=2.424985784964037 color=red,shape=triangle,flag=0,i=36475,u=0.7318186371279689,v=0.6224442436263078,w=0.5121507307098174,x=4.570394267133452 color=yellow,shape=triangle,flag=1,i=36488,u=0.6363799357654083,v=0.41477490737855516,w=0.5361994091659278,x=5.3541128610975335 color=red,shape=triangle,flag=0,i=36507,u=0.33732124325998514,v=0.5684843035668788,w=0.5112753680465155,x=5.841770886810079 color=red,shape=square,flag=0,i=36531,u=0.7264537270904323,v=0.3399132379111024,w=0.47402005274241243,x=4.008489810908823 color=green,shape=square,flag=0,i=36538,u=0.4114719229186691,v=0.22854288539809597,w=0.46814287953206934,x=4.26031265274266 color=red,shape=square,flag=0,i=36548,u=0.07479428672776522,v=0.030736133484613792,w=0.47064934313961604,x=4.948953391365716 color=purple,shape=square,flag=0,i=36556,u=0.857727400426818,v=0.07333956746865777,w=0.5136475677723563,x=4.99884359540335 color=red,shape=triangle,flag=1,i=36564,u=0.12055093967575436,v=0.6220197904079796,w=0.5066418834991658,x=6.116805117548381 color=red,shape=triangle,flag=1,i=36569,u=0.8417718896315662,v=0.5815705089585642,w=0.5006306981334182,x=6.232426819569056 color=yellow,shape=triangle,flag=1,i=36575,u=0.7201309058952723,v=0.9634681059201501,w=0.5333320887100327,x=6.942877119975308 color=red,shape=square,flag=0,i=36576,u=0.565885889567358,v=0.559105879089216,w=0.47477780669043396,x=6.0065371823305815 color=yellow,shape=circle,flag=1,i=36582,u=0.78038451123999,v=0.8793902556868812,w=0.498080765847204,x=5.279692577219706 color=red,shape=square,flag=0,i=36585,u=0.38653845198027803,v=0.18368330169183422,w=0.48302032892191776,x=5.681332753882344 color=yellow,shape=square,flag=1,i=36594,u=0.43700172579237917,v=0.06882933111154987,w=0.46966053460456797,x=8.231719488880193 color=purple,shape=triangle,flag=0,i=36595,u=0.2842408140902941,v=0.750757327989996,w=0.49875615076157814,x=4.170629737828956 color=red,shape=square,flag=0,i=36599,u=0.08033011257969547,v=0.7881433601568403,w=0.4868984875663315,x=6.7981227531301185 color=yellow,shape=triangle,flag=0,i=36609,u=0.8051443179755297,v=0.7458257415640093,w=0.5311876370295827,x=5.021086324775774 color=red,shape=circle,flag=0,i=36623,u=0.021430963799872305,v=0.11508144927710698,w=0.47303523263902325,x=4.965763451325536 color=red,shape=triangle,flag=1,i=36631,u=0.10681668179034898,v=0.6881371496783187,w=0.5009009985730479,x=6.750008081181491 color=orange,shape=square,flag=1,i=36638,u=0.19926421297813157,v=0.4212506345308833,w=0.47332110786931986,x=6.028219968380095 color=red,shape=square,flag=0,i=36641,u=0.6335278965204195,v=0.1568472183763444,w=0.475481522738315,x=5.204186118165796 color=red,shape=square,flag=0,i=36651,u=0.2837680149951288,v=0.025792332374715232,w=0.47478374095123144,x=7.382393175010345 color=red,shape=circle,flag=1,i=36673,u=0.44391573671177065,v=0.5226136795125732,w=0.4659297935903861,x=5.650229201649052 color=red,shape=square,flag=0,i=36676,u=0.06549851587900102,v=0.07597741266278202,w=0.46909000299305553,x=5.229708375740358 color=red,shape=triangle,flag=0,i=36693,u=0.10812932587353663,v=0.579766960059624,w=0.5037585304647251,x=5.349084757249533 color=orange,shape=circle,flag=1,i=36710,u=0.6629475389247007,v=0.6737613831063881,w=0.5264987997734101,x=5.259925415528492 color=red,shape=square,flag=0,i=36722,u=0.9534364940556542,v=0.6067863736724277,w=0.4732950362855124,x=2.561956537281525 color=red,shape=square,flag=0,i=36732,u=0.7431271447944012,v=0.26601303000154075,w=0.4778179044851428,x=4.576354427146499 color=red,shape=triangle,flag=0,i=36735,u=0.6459581779977813,v=0.22862623676499227,w=0.5121677350384127,x=5.917664506255178 color=red,shape=square,flag=0,i=36737,u=0.49220881265398886,v=0.8712377093570182,w=0.4720893776781397,x=4.266041087400654 color=purple,shape=circle,flag=0,i=36751,u=0.32272234505821573,v=0.5964445905325239,w=0.4698203439736098,x=5.9781161532389495 color=red,shape=triangle,flag=0,i=36752,u=0.10637415635000391,v=0.7696039656634384,w=0.5091672653612455,x=5.91306081429092 color=blue,shape=triangle,flag=1,i=36758,u=0.6761307036783781,v=0.03512104198878663,w=0.5164203712358599,x=7.537441527036219 color=blue,shape=square,flag=0,i=36759,u=0.48801207135789293,v=0.48790570230146313,w=0.494569984017705,x=5.612047443280563 color=red,shape=circle,flag=1,i=36766,u=0.4856527525588953,v=0.48830913715981883,w=0.4625373268692104,x=5.044454183562541 color=blue,shape=triangle,flag=1,i=36771,u=0.2297324651517394,v=0.2948124790776079,w=0.517513161664295,x=5.361494479511111 color=red,shape=circle,flag=0,i=36779,u=0.9983576004836738,v=1.0118780308493212,w=0.4581749231312331,x=5.689111498378435 color=red,shape=square,flag=0,i=36784,u=0.6865160898078319,v=0.9681689587798931,w=0.4897406585955326,x=3.1582636006103653 color=red,shape=triangle,flag=1,i=36817,u=0.9959495527910684,v=0.05123122826552229,w=0.5119874998109148,x=6.172320037476944 color=red,shape=circle,flag=0,i=36832,u=0.25160776570519783,v=0.35143833146071823,w=0.45591824020280797,x=5.936918696087108 color=blue,shape=square,flag=1,i=36837,u=0.37831515612745625,v=0.47435855433536867,w=0.49095130049270963,x=6.026640907336895 color=red,shape=circle,flag=0,i=36857,u=0.14005311210565763,v=0.22763248140208192,w=0.464773279811465,x=3.9383494797829073 color=red,shape=circle,flag=1,i=36901,u=0.3909233075396039,v=0.3193390976063586,w=0.4739178772482244,x=5.360319976437881 color=red,shape=triangle,flag=1,i=36904,u=0.40026732052605873,v=0.5775721407334361,w=0.5093919598946542,x=4.7420549329221675 color=red,shape=square,flag=1,i=36947,u=0.5285811941239325,v=0.07747041832828583,w=0.48160506568558104,x=3.962447914893231 color=orange,shape=square,flag=1,i=36959,u=0.8319686303211316,v=0.13009064565697037,w=0.4736475891694955,x=5.513559387282787 color=red,shape=triangle,flag=1,i=36960,u=0.20721031351842834,v=0.20563119659791018,w=0.5107003570939529,x=5.394475665671298 color=purple,shape=triangle,flag=0,i=36962,u=0.8383047347862198,v=0.8775121948045028,w=0.49553070242746894,x=6.0863808536528685 color=orange,shape=square,flag=0,i=36973,u=0.9953363767790046,v=0.5856603924709683,w=0.47656582617656057,x=5.784106873515358 color=green,shape=triangle,flag=0,i=36992,u=0.03231626528725373,v=0.5326267524379906,w=0.498519570048132,x=4.351520830156708 color=red,shape=circle,flag=0,i=36994,u=0.8623445321811245,v=0.7765652870522611,w=0.4878046807823772,x=5.692053058697806 color=yellow,shape=triangle,flag=0,i=36995,u=0.48699377543195665,v=0.7317101139022135,w=0.5405742662218538,x=4.773914755408491 color=blue,shape=square,flag=0,i=37013,u=0.32771817069700737,v=0.4390377511845567,w=0.49053121989807175,x=4.127975634669458 color=red,shape=circle,flag=1,i=37014,u=0.30209706103524725,v=0.3620471660009386,w=0.486122872016291,x=4.886967800140364 color=blue,shape=square,flag=0,i=37022,u=0.17064265099283038,v=0.892659595265854,w=0.4841459080674549,x=6.27670346100543 color=yellow,shape=triangle,flag=1,i=37031,u=0.5324477590924602,v=0.05974540470234002,w=0.5477027839787513,x=5.521765958241326 color=green,shape=circle,flag=0,i=37036,u=0.10606156398296063,v=0.7217641576757475,w=0.4673033518338816,x=4.5668732484511265 color=blue,shape=square,flag=0,i=37040,u=0.48785109558949846,v=0.6907117006800187,w=0.4800069469769406,x=6.44974385408032 color=green,shape=triangle,flag=0,i=37044,u=0.8946869613066204,v=0.8098471066223272,w=0.49451173726193576,x=2.891011807481231 color=red,shape=square,flag=0,i=37051,u=0.8796099432158769,v=0.12193308384451995,w=0.49815670114722,x=2.789603626401845 color=green,shape=triangle,flag=0,i=37064,u=0.60591585401936,v=0.3356633890867142,w=0.48974673022693804,x=7.24355616800586 color=red,shape=triangle,flag=0,i=37066,u=0.4235391066300558,v=0.553778356438792,w=0.5197305154099661,x=4.924006216420129 color=green,shape=triangle,flag=0,i=37084,u=0.3284787910597309,v=0.16528648498020426,w=0.48822374051846684,x=3.4179873836565093 color=red,shape=square,flag=0,i=37100,u=0.44512946876245985,v=0.6843771771102779,w=0.49440232404200146,x=5.462897963330664 color=blue,shape=circle,flag=1,i=37127,u=0.2679268045522243,v=0.08596909720323032,w=0.4878667797370085,x=3.8215456480526115 color=green,shape=square,flag=0,i=37132,u=0.4378194458238688,v=0.6835520934783675,w=0.48111752300750704,x=5.331321496458754 color=green,shape=circle,flag=0,i=37133,u=0.8892914833064786,v=0.4193271210346531,w=0.472362508113252,x=5.841069794674747 color=yellow,shape=circle,flag=1,i=37159,u=0.2726101911689758,v=0.5639791438536959,w=0.5004863639861948,x=7.201503320824382 color=red,shape=triangle,flag=0,i=37190,u=0.4590965400752065,v=0.5533863436024102,w=0.5281583386284135,x=4.361818453371206 color=green,shape=square,flag=1,i=37199,u=0.12163737564523602,v=0.4014462973141971,w=0.4858072409679675,x=7.673246371126193 color=red,shape=circle,flag=0,i=37203,u=0.9209054444714102,v=0.908772038431933,w=0.48789814992412456,x=5.2260458713698466 color=red,shape=triangle,flag=0,i=37204,u=0.34402022492252327,v=0.07012513866717396,w=0.5295997185499252,x=3.980541266720826 color=red,shape=square,flag=1,i=37207,u=0.8444415491778481,v=0.14153089082798664,w=0.5034675458363985,x=5.770147902100302 color=green,shape=circle,flag=1,i=37211,u=0.34905389412099075,v=0.6859795922179169,w=0.4775656820869437,x=4.963341915148402 color=blue,shape=square,flag=1,i=37226,u=0.6413615050163423,v=0.2933802918358043,w=0.4896583166077016,x=3.700619007817077 color=red,shape=square,flag=0,i=37227,u=0.9876672286695282,v=0.9428093794936758,w=0.5161090238215247,x=6.944280937158122 color=purple,shape=square,flag=0,i=37247,u=0.45460083937637286,v=0.7564213829665887,w=0.5047271066138581,x=6.970607562042409 color=red,shape=triangle,flag=1,i=37250,u=0.8325863986687886,v=0.43396032608141044,w=0.5210605619230178,x=4.63737979361521 color=yellow,shape=triangle,flag=1,i=37252,u=0.9715999345797057,v=0.00172447386987451,w=0.5230270739804954,x=3.335155453613923 color=red,shape=circle,flag=1,i=37269,u=0.5615822498213286,v=0.6164967334157775,w=0.4875093353752823,x=5.578981301797171 color=green,shape=triangle,flag=1,i=37297,u=0.9784143556444374,v=0.11230754985994384,w=0.49090505998248923,x=3.7878819194298576 color=red,shape=square,flag=0,i=37299,u=0.3811341846092945,v=0.3420777172507604,w=0.5106108100380538,x=4.767182011882721 color=red,shape=circle,flag=0,i=37316,u=0.2686560141159776,v=0.19890962929317363,w=0.47129590072192634,x=3.406904163825312 color=purple,shape=triangle,flag=0,i=37331,u=0.45330461089023766,v=0.44172965737918846,w=0.48902466740933015,x=3.6968190266633676 color=purple,shape=circle,flag=0,i=37338,u=0.5302845634519802,v=0.37082672810720874,w=0.46999739328217544,x=4.109615080407763 color=red,shape=triangle,flag=0,i=37339,u=0.24580844192998008,v=0.745932426091323,w=0.5318814387313013,x=3.439300063573949 color=red,shape=square,flag=0,i=37347,u=0.9113976116769003,v=0.5717441754557772,w=0.5011901188463853,x=6.241667652553901 color=red,shape=circle,flag=0,i=37361,u=0.5481129208721416,v=0.6294706620141673,w=0.47777439627161267,x=7.285373856753192 color=yellow,shape=circle,flag=0,i=37369,u=0.3375387132878296,v=0.21419235539428816,w=0.4954607929026692,x=3.746885091796307 color=red,shape=triangle,flag=0,i=37378,u=0.05851597245364226,v=0.3955398285561733,w=0.5318855359144191,x=4.974670625878876 color=red,shape=square,flag=0,i=37403,u=0.40652847571468975,v=0.5379331564038987,w=0.490028695382077,x=4.532615384566884 color=red,shape=triangle,flag=0,i=37415,u=0.1574014948290393,v=0.27830519590229796,w=0.5374805342297109,x=3.681427407515642 color=red,shape=triangle,flag=1,i=37440,u=0.7166979316876014,v=0.20762566325161025,w=0.531254823588659,x=2.501888071157458 color=purple,shape=triangle,flag=0,i=37444,u=0.5392537849080222,v=0.534992924377639,w=0.48521547991681174,x=5.194183322596916 color=red,shape=square,flag=1,i=37460,u=0.6971150295592662,v=0.4064389406511253,w=0.5006569470610013,x=5.753844623975136 color=red,shape=triangle,flag=0,i=37463,u=0.5554004914891789,v=0.5628719670833299,w=0.5293448461265443,x=7.115781077108316 color=blue,shape=square,flag=0,i=37471,u=0.41426849367180885,v=0.16065915650296003,w=0.4736842441116863,x=4.55770340433462 color=yellow,shape=triangle,flag=1,i=37487,u=0.24062409104057225,v=0.5010526365494592,w=0.5218186314632153,x=4.589373456459177 color=blue,shape=square,flag=1,i=37500,u=0.3393478754061173,v=0.2881246381446081,w=0.46414802630528995,x=6.243150446903364 color=green,shape=square,flag=0,i=37514,u=0.2693800001059923,v=0.04035180894988488,w=0.4833313258395809,x=4.092232864843839 color=purple,shape=circle,flag=1,i=37518,u=0.5920169010216106,v=0.10459423843488291,w=0.4631134663489581,x=3.091984479817586 color=green,shape=circle,flag=0,i=37521,u=0.6387119537418751,v=0.03714863275769187,w=0.48571899599410157,x=5.3937468048611406 color=yellow,shape=square,flag=1,i=37541,u=0.819692604290505,v=0.5279896879534377,w=0.4490464876251143,x=4.09422705638926 color=purple,shape=square,flag=0,i=37554,u=0.06034080193984881,v=0.033516594013897394,w=0.5042848921688678,x=6.9612489661961385 color=red,shape=square,flag=0,i=37556,u=0.9750019392032869,v=0.4862456051737566,w=0.4972424851649748,x=3.929103492684863 color=red,shape=square,flag=0,i=37558,u=0.6171598364673789,v=0.7250738618443542,w=0.49833147603219313,x=5.350267899964599 color=blue,shape=circle,flag=1,i=37575,u=0.6843694547276777,v=0.21151730073066077,w=0.4806111302132133,x=3.7669067819074455 color=red,shape=triangle,flag=0,i=37578,u=0.7665314034138527,v=0.7133409581940101,w=0.5377497844893196,x=6.346758117173912 color=purple,shape=triangle,flag=1,i=37592,u=0.08953170682751777,v=0.1373090786979091,w=0.4834399942163302,x=2.88185175743152 color=red,shape=circle,flag=0,i=37607,u=0.7337879389497028,v=0.6703890758114182,w=0.48323631140861006,x=4.59172351172061 color=red,shape=triangle,flag=0,i=37608,u=0.9217610153513968,v=0.8989503607846147,w=0.5376757847225038,x=4.74741642957461 color=blue,shape=square,flag=1,i=37613,u=0.2138076874342455,v=0.4958347828064372,w=0.4649597574914763,x=4.881855736157818 color=purple,shape=triangle,flag=0,i=37616,u=0.8938083665743075,v=0.029239534824987423,w=0.4826411892835148,x=3.903514489982015 color=red,shape=circle,flag=0,i=37618,u=0.28939222916565577,v=0.3329676477744654,w=0.4812724557340212,x=7.684625915207742 color=red,shape=square,flag=0,i=37632,u=0.07911426041264935,v=0.1539046407624154,w=0.47923762858867835,x=3.1607856742881317 color=red,shape=circle,flag=1,i=37647,u=0.719214252347564,v=0.7901868819983043,w=0.48358167828386855,x=5.7850786063311235 color=green,shape=circle,flag=0,i=37655,u=0.09352173829497468,v=0.2676763517236652,w=0.4932650468905362,x=6.916429524956963 color=red,shape=square,flag=0,i=37657,u=0.7136108560678266,v=0.2718872272660279,w=0.47769807610888887,x=5.346420772248663 color=yellow,shape=circle,flag=0,i=37664,u=0.4191808474039801,v=0.739255703619348,w=0.5077530286313371,x=3.66666668116901 color=orange,shape=circle,flag=0,i=37668,u=0.18007376885630966,v=0.8607135232102564,w=0.5281522937562019,x=3.4871488136155544 color=red,shape=triangle,flag=0,i=37674,u=0.20231653462572208,v=0.8623478249818624,w=0.5368339928800547,x=5.414782863697613 color=yellow,shape=circle,flag=0,i=37682,u=0.6248434447565645,v=0.3532431572350374,w=0.5172432757434454,x=4.084118842520906 color=green,shape=square,flag=0,i=37685,u=0.4843672401568342,v=0.5080747139655946,w=0.483286331765644,x=4.860660246113421 color=red,shape=circle,flag=0,i=37687,u=0.3489486185661024,v=0.323771076768919,w=0.4945300144788722,x=5.777523757759923 color=red,shape=triangle,flag=0,i=37698,u=0.45816684290595133,v=0.2281742816684985,w=0.5350465367424906,x=6.341573764293282 color=yellow,shape=square,flag=1,i=37704,u=0.7058346074133882,v=0.4965323642212405,w=0.4648549492625446,x=3.5046827972460073 color=red,shape=triangle,flag=0,i=37708,u=0.738864106607189,v=0.6822447880234197,w=0.5425989594707775,x=4.127956949700301 color=yellow,shape=triangle,flag=1,i=37712,u=0.5540042944833872,v=0.7949234874872454,w=0.5197699287875088,x=4.595715951910495 color=yellow,shape=square,flag=1,i=37713,u=0.47172434062297064,v=0.13688354742815667,w=0.46577505611307707,x=5.090030296491598 color=red,shape=circle,flag=1,i=37735,u=0.529071175011801,v=0.6257915577335662,w=0.4864639612273933,x=7.9492832752973195 color=purple,shape=triangle,flag=0,i=37746,u=0.6564229969262801,v=0.5114125000839184,w=0.49318205924255587,x=4.079333502553843 color=purple,shape=circle,flag=0,i=37751,u=0.26676268810918213,v=0.12674781998726992,w=0.46967993060868596,x=3.8387973966036473 color=orange,shape=circle,flag=0,i=37758,u=0.9851029040372477,v=0.09593472594818309,w=0.5324612053263172,x=4.012838441365473 color=green,shape=triangle,flag=0,i=37763,u=0.7790236271657485,v=0.37870381284129406,w=0.4971210197706475,x=5.1656570497710055 color=green,shape=square,flag=0,i=37765,u=0.48785848916548635,v=0.8043586020008786,w=0.4803894237893302,x=5.932806251695024 color=blue,shape=square,flag=1,i=37769,u=0.0010124921078813465,v=0.5003311052459606,w=0.45718856694064935,x=3.7276291403157935 color=purple,shape=triangle,flag=0,i=37783,u=0.06351683841635458,v=0.5745664486338214,w=0.4913794324817373,x=3.9700437087588405 color=blue,shape=triangle,flag=0,i=37792,u=0.07018903407844768,v=0.4178593082076467,w=0.51623104844378,x=4.423153846686451 color=red,shape=square,flag=0,i=37797,u=0.8846457829810535,v=0.3836708390038597,w=0.48851153130672803,x=5.524878267979573 color=yellow,shape=circle,flag=1,i=37826,u=0.475413165340109,v=0.6431636817661038,w=0.5358323966835233,x=4.016207572604287 color=yellow,shape=triangle,flag=1,i=37848,u=0.5301875061178689,v=0.7174358946480373,w=0.5204534980191006,x=5.123733284961607 color=red,shape=square,flag=0,i=37857,u=0.05661060905871662,v=0.4710547386694294,w=0.49083669966368476,x=5.811809648966007 color=red,shape=square,flag=1,i=37860,u=0.9105423239090816,v=0.5898894925016474,w=0.49093560580562834,x=2.784241420176178 color=purple,shape=triangle,flag=1,i=37874,u=0.8920613889121304,v=0.9769346868387789,w=0.48031545216099264,x=6.7204180236434325 color=red,shape=circle,flag=0,i=37879,u=0.5202040603671577,v=0.5036022298027305,w=0.47872938475253196,x=4.696322906932882 color=red,shape=circle,flag=0,i=37881,u=0.6355303017741958,v=0.5422679932363801,w=0.4814113386152919,x=4.6337482851262175 color=red,shape=circle,flag=0,i=37890,u=0.2679618284646147,v=0.20434926416351096,w=0.47872981372379353,x=5.239165025228325 color=red,shape=square,flag=1,i=37899,u=0.08937751343132816,v=0.659121762566092,w=0.48573418756702497,x=4.448799084662819 color=red,shape=square,flag=0,i=37900,u=0.3728047469420135,v=0.26721468211357013,w=0.488577145299949,x=4.335668206081306 color=red,shape=circle,flag=0,i=37904,u=0.38973313650324204,v=0.34818113846591997,w=0.47964161975394404,x=3.925209744193989 color=red,shape=square,flag=1,i=37921,u=0.42276415798324474,v=0.31936643953218746,w=0.4883701885674235,x=4.869112919312211 color=purple,shape=circle,flag=0,i=37929,u=0.5688491538886703,v=0.8435424572337955,w=0.47907239214577607,x=4.0856422045434835 color=yellow,shape=triangle,flag=1,i=37940,u=0.06644491248211615,v=0.30894326501321445,w=0.5010173719770583,x=4.618433011753282 color=red,shape=square,flag=1,i=37945,u=0.057877336618272435,v=0.32622237125734654,w=0.4830235607858425,x=3.2252275305890343 color=red,shape=circle,flag=0,i=37962,u=0.32541490790626215,v=0.2645515629620241,w=0.4644091257813923,x=5.502821402064531 color=red,shape=circle,flag=0,i=37991,u=0.07837608386530126,v=0.003129990899428267,w=0.4643253278238599,x=5.717808976937164 color=red,shape=triangle,flag=0,i=37996,u=0.7113145301435015,v=0.791731618541279,w=0.5184424442026617,x=5.835128716537877 color=purple,shape=circle,flag=0,i=38009,u=0.33697913513251365,v=0.06893260171284266,w=0.478784432217052,x=5.611396203650816 color=yellow,shape=circle,flag=1,i=38034,u=0.684195029105751,v=0.7233193748183292,w=0.5276825057882527,x=5.722804639501624 color=purple,shape=circle,flag=0,i=38038,u=0.6200315487640226,v=0.013067187966193994,w=0.47790013239599505,x=4.589665914470007 color=purple,shape=square,flag=1,i=38064,u=0.7057434590803936,v=0.42792501087695867,w=0.5174348950562011,x=3.2802671704499526 color=blue,shape=square,flag=1,i=38066,u=0.31668619949729515,v=0.11956444846336645,w=0.4594740359810732,x=5.186171127610534 color=red,shape=triangle,flag=1,i=38067,u=0.875794814367842,v=0.21641459361363635,w=0.5178752395612677,x=5.321137461419996 color=red,shape=square,flag=0,i=38071,u=0.3256626294752947,v=0.6148458085827894,w=0.5004939462835706,x=2.4499124766995695 color=yellow,shape=circle,flag=1,i=38082,u=0.04853033836650689,v=0.5983776442018087,w=0.5231959648615166,x=2.651862379271653 color=yellow,shape=triangle,flag=1,i=38087,u=0.32294116442437093,v=0.6700313175035897,w=0.502276254738623,x=2.756331697768259 color=red,shape=square,flag=0,i=38093,u=0.7499294156246596,v=0.6508728277299138,w=0.5064734180564547,x=7.382597747691133 color=blue,shape=circle,flag=0,i=38125,u=0.6344852606010264,v=0.6660916079421064,w=0.4807928674739172,x=5.600137266617754 color=yellow,shape=square,flag=1,i=38136,u=0.5735178978082498,v=0.5774844534624073,w=0.4784106163746017,x=5.9532220972827945 color=red,shape=square,flag=0,i=38138,u=0.8056362959350857,v=0.4174494412106985,w=0.5038079307699739,x=5.026394010510235 color=blue,shape=circle,flag=0,i=38146,u=0.2539024448077958,v=0.884643951894558,w=0.4848131943192717,x=4.543595966846689 color=orange,shape=square,flag=0,i=38155,u=0.01151138943702712,v=0.15843271602381304,w=0.4985979653977076,x=4.8762378756122375 color=yellow,shape=triangle,flag=0,i=38158,u=0.3691612234596072,v=0.2535009771881511,w=0.5059627126079003,x=6.673606513538689 color=blue,shape=square,flag=1,i=38163,u=0.4418109621078311,v=0.4079445387163324,w=0.4738897836881537,x=5.730483165187514 color=blue,shape=circle,flag=1,i=38170,u=0.8854240497164021,v=0.18093916440605629,w=0.4937564584620208,x=4.783455616430091 color=purple,shape=square,flag=1,i=38177,u=0.2529398200034281,v=0.4487866039308104,w=0.5117396167380375,x=4.63327672853102 color=red,shape=triangle,flag=0,i=38178,u=0.5100182852203953,v=0.5467970338830797,w=0.5311490298737129,x=5.481841631670299 color=blue,shape=square,flag=0,i=38179,u=0.44311997832909333,v=0.8822675357673682,w=0.4696302664911805,x=4.902853000731272 color=yellow,shape=triangle,flag=1,i=38192,u=0.3083388647811234,v=0.4008475196275283,w=0.5105726870440547,x=2.33862119270893 color=red,shape=square,flag=0,i=38195,u=0.8245719643294682,v=0.020460106436641756,w=0.5221084606309792,x=4.080764174039779 color=yellow,shape=square,flag=1,i=38199,u=0.012238308815962995,v=0.2713121713455563,w=0.4815208009898373,x=4.734545325452867 color=yellow,shape=circle,flag=1,i=38204,u=0.22930578122394973,v=0.5374967914492481,w=0.5176602906280251,x=4.654189519289205 color=yellow,shape=square,flag=1,i=38206,u=0.10397346835119414,v=0.8411680853188428,w=0.4806578866864495,x=2.972552893791658 color=red,shape=square,flag=0,i=38213,u=0.6616760821586517,v=0.8141486053201816,w=0.5121067455622184,x=5.173696312086968 color=red,shape=triangle,flag=0,i=38222,u=0.43708134051341363,v=0.27726363254231,w=0.5376767429588353,x=4.970385307123877 color=red,shape=circle,flag=1,i=38224,u=0.3315878136991349,v=0.38444839636873396,w=0.4931642161573426,x=4.634867995797333 color=blue,shape=square,flag=1,i=38225,u=0.3944086255999918,v=0.23096523530620183,w=0.4684293434454281,x=7.736460768940426 color=blue,shape=triangle,flag=0,i=38240,u=0.6034138327555548,v=0.07740707548700532,w=0.5374078324759183,x=6.0163596650900075 color=blue,shape=triangle,flag=1,i=38248,u=0.9444130181082422,v=0.6362851436246229,w=0.5444405207767633,x=7.097199805027187 color=red,shape=square,flag=1,i=38256,u=0.7630157570446002,v=0.6314772706185438,w=0.48880179137838625,x=4.950824723236743 color=purple,shape=triangle,flag=1,i=38280,u=0.44767951581214094,v=0.2618111624810212,w=0.48201754540885355,x=5.465800399013794 color=red,shape=triangle,flag=0,i=38283,u=0.05975605137424489,v=0.14920249696275234,w=0.5226984641337482,x=5.993304754102831 color=red,shape=square,flag=0,i=38288,u=0.7523123498098522,v=0.13214299693268383,w=0.484645478581809,x=4.729721018081452 color=red,shape=square,flag=0,i=38329,u=0.0904323592590498,v=0.5625067921820546,w=0.48023752756051724,x=3.0013981194136297 color=red,shape=circle,flag=0,i=38340,u=0.3718779852140627,v=0.2845722722367581,w=0.4840326007039287,x=2.6311172406519434 color=blue,shape=square,flag=0,i=38362,u=0.27691088100777006,v=0.17423641880397767,w=0.47142937713923433,x=6.406856001117499 color=red,shape=triangle,flag=0,i=38365,u=0.6301973919902031,v=0.6837001355048282,w=0.5252041051772034,x=6.165249187305097 color=red,shape=triangle,flag=0,i=38397,u=0.03933959336336268,v=0.8019190231722675,w=0.5278573389465854,x=3.6585746751325074 color=orange,shape=circle,flag=0,i=38398,u=0.32435590442219053,v=0.13240200445348405,w=0.5300177517942973,x=3.095166599968655 color=blue,shape=square,flag=0,i=38404,u=0.2961654979999577,v=0.767379671137321,w=0.47748248316065633,x=3.679766557118045 color=red,shape=triangle,flag=1,i=38416,u=0.8480106987964048,v=0.7880753021521691,w=0.5327232064519288,x=3.2784486569622655 color=blue,shape=square,flag=1,i=38418,u=0.03892693514917556,v=0.9327839698057228,w=0.4858211992579442,x=5.129305885128638 color=green,shape=triangle,flag=0,i=38437,u=0.9121928040529615,v=0.7492150146311876,w=0.46895704168875035,x=6.292158170903022 color=red,shape=circle,flag=1,i=38442,u=0.9328376819647649,v=0.9397539951616704,w=0.4709666044555381,x=4.7791385443263 color=purple,shape=square,flag=0,i=38447,u=0.3753623855254079,v=0.43836066536547025,w=0.50816038364672,x=4.086078520372214 color=blue,shape=circle,flag=0,i=38460,u=0.3274108699775241,v=0.8955352759871484,w=0.48438504053775594,x=4.33075542676652 color=yellow,shape=square,flag=0,i=38468,u=0.8616481308988164,v=0.06593252432760732,w=0.49258093054003455,x=4.264419728202852 color=red,shape=triangle,flag=0,i=38479,u=0.5515224755527709,v=0.6214207604744554,w=0.5422795277962215,x=5.477065778234362 color=red,shape=triangle,flag=0,i=38497,u=0.14555181559868924,v=0.33620742616330357,w=0.5250900758986774,x=4.981313085590917 color=purple,shape=square,flag=0,i=38501,u=0.4689339358886033,v=0.17276473586863939,w=0.5010008330089102,x=5.496998076900414 color=green,shape=triangle,flag=1,i=38508,u=0.7471676588317212,v=0.09486262903295972,w=0.4646017555378223,x=4.709132548687026 color=blue,shape=circle,flag=1,i=38522,u=0.9430620960892159,v=0.5650516037192317,w=0.4817430779521384,x=3.715760396312945 color=green,shape=circle,flag=1,i=38526,u=0.8112239397064422,v=0.44388434199823823,w=0.5147274104243988,x=5.41469831778723 color=red,shape=circle,flag=1,i=38529,u=0.6201453301474494,v=0.5514884958151548,w=0.4808571110565734,x=3.493435506996492 color=purple,shape=square,flag=0,i=38531,u=0.9649930376221458,v=0.08470567736017742,w=0.5015458132224414,x=5.347433759370861 color=green,shape=triangle,flag=0,i=38539,u=0.44957049999246235,v=0.5578831832346758,w=0.46170107859494736,x=3.9735797853073147 color=red,shape=circle,flag=1,i=38550,u=0.011024426724858483,v=-0.007015438410399956,w=0.4846832966233285,x=6.724607023990394 color=purple,shape=triangle,flag=0,i=38552,u=0.6798990230423072,v=0.2830766724009439,w=0.4771305824450562,x=5.918381912626522 color=blue,shape=triangle,flag=0,i=38576,u=0.957435908299061,v=0.5792749204252066,w=0.543778458514963,x=3.682739112099584 color=blue,shape=triangle,flag=1,i=38577,u=0.5735872226554793,v=0.16694377801618931,w=0.5419922146488843,x=3.041728610570415 color=red,shape=square,flag=1,i=38581,u=0.5445142030131437,v=0.7528656620079609,w=0.4766827102963688,x=7.855906132291646 color=green,shape=triangle,flag=0,i=38585,u=0.1984887330894427,v=0.4987380220449995,w=0.46144136154406673,x=3.7213611376525964 color=purple,shape=square,flag=0,i=38595,u=0.6802320560976709,v=0.8275125281885453,w=0.4976524446808186,x=6.551242347727435 color=red,shape=square,flag=0,i=38597,u=0.45738178272298546,v=0.19822849425140054,w=0.4831820401466904,x=4.961154469727897 color=red,shape=square,flag=0,i=38609,u=0.6674339925748345,v=0.1618083318450113,w=0.4753971221718779,x=5.603536312892259 color=red,shape=square,flag=0,i=38611,u=0.44503758460834086,v=0.8600393090018252,w=0.4741759511599409,x=2.9025418266670697 color=yellow,shape=triangle,flag=0,i=38624,u=0.11714521071879747,v=0.34942138100928744,w=0.5316971724836042,x=7.454140833709264 color=red,shape=circle,flag=0,i=38631,u=0.7648297947070223,v=0.6776771877066503,w=0.4915904089093778,x=3.8514837143856315 color=purple,shape=triangle,flag=0,i=38652,u=0.01594130911978997,v=0.5890795687313576,w=0.47608914341169645,x=3.927338633492965 color=purple,shape=square,flag=0,i=38663,u=0.15530651406707752,v=0.032180325518073816,w=0.507926038157922,x=4.224852492366136 color=blue,shape=square,flag=1,i=38676,u=0.33803008812467517,v=0.9430048066012642,w=0.4826416690794807,x=7.915449951670008 color=red,shape=square,flag=0,i=38698,u=0.4260617070738505,v=0.6679160107084341,w=0.4675325862982471,x=3.910816611978308 color=red,shape=triangle,flag=0,i=38703,u=0.889343915415998,v=0.6047262639753926,w=0.5168713393637955,x=7.049840190714019 color=red,shape=square,flag=0,i=38734,u=0.3564244365513213,v=0.44776358853917464,w=0.4617328476889762,x=5.007991880192758 color=red,shape=square,flag=0,i=38736,u=0.740126370948802,v=0.7705393077048693,w=0.46144045361425906,x=5.483986766874151 color=yellow,shape=square,flag=0,i=38748,u=0.2649295532261856,v=0.7818417150321095,w=0.5153526161795142,x=5.421038553603055 color=yellow,shape=circle,flag=1,i=38749,u=0.3727998029310805,v=0.9346956478077907,w=0.5162228730057041,x=5.640991448007491 color=red,shape=triangle,flag=0,i=38751,u=0.03734333974395809,v=0.1484023991549045,w=0.516697300114278,x=4.5812465361079635 color=purple,shape=circle,flag=0,i=38769,u=0.336135273863733,v=0.10478466359914584,w=0.4883418813688285,x=3.7004061367284944 color=red,shape=circle,flag=0,i=38773,u=0.8562965250990252,v=0.9079418463092541,w=0.494051799146844,x=4.4860224769938615 color=green,shape=circle,flag=1,i=38775,u=0.5758517203810649,v=0.863665290241774,w=0.5295105874705537,x=7.108026075104436 color=purple,shape=triangle,flag=0,i=38784,u=0.3217318967959222,v=0.9188365818667709,w=0.47572548117638436,x=2.8021200664712578 color=red,shape=circle,flag=0,i=38803,u=0.7915146404267683,v=0.861964617574392,w=0.49483406287811166,x=4.660011755943997 color=purple,shape=square,flag=0,i=38820,u=0.3273848048806479,v=0.721753425694558,w=0.506073146796731,x=5.063661923476471 color=blue,shape=square,flag=0,i=38841,u=0.6913762315865113,v=0.12001632989361599,w=0.4925570122420449,x=4.7586521020289405 color=purple,shape=square,flag=0,i=38846,u=0.9495507473776134,v=0.9392032827570884,w=0.5014704311333378,x=4.826822412761536 color=red,shape=triangle,flag=0,i=38853,u=0.41641136027077863,v=0.46384944083018376,w=0.5059150065959896,x=6.2449010207835975 color=orange,shape=circle,flag=1,i=38857,u=0.7561616060797361,v=0.6011829160290465,w=0.5170183460778673,x=5.464145004173815 color=purple,shape=triangle,flag=1,i=38873,u=0.3412836770559612,v=0.5106988751826204,w=0.48578647491703114,x=8.253247926402961 color=green,shape=triangle,flag=0,i=38883,u=0.45877660452687863,v=0.5211069169505502,w=0.4681733218056553,x=3.3275261814625985 color=green,shape=triangle,flag=0,i=38889,u=0.8883676445361395,v=0.6015417053453661,w=0.47105973239501653,x=6.078143505674809 color=purple,shape=circle,flag=0,i=38901,u=0.7319690780944992,v=0.4567889897970464,w=0.4912731260449902,x=4.184719957290204 color=yellow,shape=square,flag=1,i=38928,u=0.9240311975534296,v=0.7019360344691004,w=0.5077523736033206,x=4.472317293716402 color=green,shape=triangle,flag=0,i=38934,u=0.6380126796582992,v=0.9449695875523221,w=0.4624450508923107,x=4.273213691991617 color=yellow,shape=square,flag=1,i=38961,u=0.1268351843656087,v=0.5211273692895315,w=0.5033684401053728,x=5.625293954232506 color=green,shape=triangle,flag=0,i=38966,u=0.9096579654690838,v=0.6779907501390764,w=0.45893787607152725,x=4.725850414653185 color=red,shape=circle,flag=0,i=38978,u=0.3652891236125678,v=0.37234355884923465,w=0.4977688696494028,x=3.8844029674106095 color=red,shape=circle,flag=1,i=38980,u=0.15669341658400626,v=0.18744318394269907,w=0.49922521826079624,x=5.595762817968466 color=yellow,shape=square,flag=1,i=38983,u=0.5034768929988753,v=0.648289357062001,w=0.50383746914453,x=5.184546230870219 color=red,shape=triangle,flag=1,i=38997,u=0.11076561819085617,v=0.5599481660206294,w=0.5125690584242865,x=4.642475797173814 color=yellow,shape=square,flag=1,i=39009,u=0.08470525262121531,v=0.9546622912906018,w=0.5061945768566833,x=2.3578447423524653 color=red,shape=triangle,flag=1,i=39014,u=0.6613462567228076,v=0.47275595437501927,w=0.509598966206032,x=3.4577807597878283 color=red,shape=circle,flag=1,i=39017,u=0.1553047699109077,v=0.23426338864293275,w=0.5053760937764255,x=4.354064782280358 color=yellow,shape=circle,flag=1,i=39031,u=0.1895808365583801,v=0.41451067853476176,w=0.5193137946419872,x=5.994203236731685 color=yellow,shape=square,flag=1,i=39036,u=0.4366319397585604,v=0.8853642091072212,w=0.5070794369862943,x=5.939429312334467 color=red,shape=square,flag=1,i=39037,u=0.7634290148595653,v=0.5813909230046601,w=0.49179306499158965,x=5.997049936652246 color=red,shape=square,flag=1,i=39059,u=0.8315658666403111,v=0.8784952621893528,w=0.4892572830056315,x=2.880528359468393 color=red,shape=triangle,flag=0,i=39067,u=0.8704226366700998,v=0.533469043498947,w=0.5142011050681139,x=5.662784664121824 color=red,shape=square,flag=0,i=39071,u=0.7967456882344144,v=0.20866378466645807,w=0.4946225164856906,x=6.543629849066412 color=red,shape=square,flag=0,i=39072,u=0.030280521554805206,v=0.12321405546738207,w=0.48988027462368877,x=5.847872034205654 color=blue,shape=circle,flag=1,i=39075,u=0.37520524903253005,v=0.20556677021060044,w=0.4861060752648033,x=4.98529466970652 color=yellow,shape=circle,flag=1,i=39085,u=0.6761059171622457,v=0.4496309961242564,w=0.5177998244766702,x=3.8911030920443372 color=red,shape=square,flag=0,i=39096,u=0.8386893229214152,v=0.18037298392866496,w=0.488742788476033,x=5.5802668829031745 color=red,shape=square,flag=1,i=39101,u=0.3410758622142557,v=0.4265100182014795,w=0.4861798012237103,x=4.09281113615416 color=orange,shape=triangle,flag=1,i=39104,u=0.5375973260418243,v=0.025378580102561443,w=0.5209130105188473,x=4.374368093971907 color=red,shape=circle,flag=1,i=39108,u=0.06315594916114631,v=0.0473204457942318,w=0.5020600489686915,x=5.71888396030171 color=yellow,shape=circle,flag=1,i=39140,u=0.04163266536526933,v=0.3735542532689454,w=0.5129004344973573,x=6.2006094397134355 color=red,shape=circle,flag=0,i=39144,u=0.1252950270739791,v=0.2085369692489441,w=0.49511423232770985,x=5.6882736815440795 color=green,shape=square,flag=0,i=39145,u=0.5945283933600861,v=0.5702218044889795,w=0.49801271180610407,x=5.733330077212044 color=red,shape=square,flag=0,i=39147,u=0.32849756546704034,v=0.19330653960285815,w=0.49652552518608334,x=3.078153862828897 color=red,shape=square,flag=0,i=39162,u=0.5082347260570108,v=0.018104333171229392,w=0.5047709326931358,x=6.14569285722409 color=red,shape=square,flag=0,i=39169,u=0.35611963306648264,v=0.46415265378112647,w=0.5052790009618097,x=2.5208047949411108 color=red,shape=circle,flag=0,i=39179,u=0.9934462881309655,v=1.0724998185026013,w=0.49083561169685813,x=5.960896195845709 color=red,shape=square,flag=0,i=39193,u=0.8107253161858635,v=0.06119001723485462,w=0.5040571217154186,x=4.950845865162775 color=blue,shape=square,flag=0,i=39212,u=0.3666067516985615,v=0.9543687651909756,w=0.4904069701798997,x=4.5900604435108505 color=red,shape=square,flag=0,i=39214,u=0.3038520855773875,v=0.4570120300363385,w=0.5134766736400802,x=4.045412169596741 color=purple,shape=square,flag=0,i=39220,u=0.40811899601274493,v=0.42258580068959894,w=0.5079708471546207,x=5.8434095706944085 color=red,shape=circle,flag=0,i=39223,u=0.2548848991283086,v=0.23824052909393476,w=0.49368762796221016,x=3.9351541163129777 color=blue,shape=circle,flag=0,i=39231,u=0.5467918928636517,v=0.436802594210994,w=0.47161891289677615,x=7.006859054118415 color=yellow,shape=circle,flag=0,i=39251,u=0.995515315608599,v=0.664557028559361,w=0.515423435042191,x=5.169630751365037 color=purple,shape=triangle,flag=0,i=39260,u=0.6875459706351555,v=0.6177647301665427,w=0.5019041927371927,x=3.0241900924198646 color=yellow,shape=square,flag=1,i=39270,u=0.5118092734588805,v=0.25442788832414454,w=0.5019041582410692,x=5.87099123069972 color=blue,shape=circle,flag=0,i=39277,u=0.25862296537153906,v=0.9195126012211688,w=0.4710367246140722,x=2.9978468725276795 color=green,shape=circle,flag=0,i=39300,u=0.41020213039425923,v=0.6728517575614876,w=0.5265279632822963,x=4.921329419537524 color=green,shape=circle,flag=1,i=39301,u=0.5864952275788667,v=0.10513511084979821,w=0.523894875619943,x=5.497434710917061 color=green,shape=square,flag=0,i=39335,u=0.6400469949657999,v=0.06628578427370857,w=0.5148803991737776,x=4.132880393291873 color=yellow,shape=circle,flag=1,i=39352,u=0.6479856313540792,v=0.2373533542788151,w=0.5178086170960043,x=5.415760588876039 color=red,shape=square,flag=1,i=39353,u=0.9744182926995872,v=0.6439304774212721,w=0.4937014311429811,x=4.709992211021606 color=purple,shape=circle,flag=0,i=39363,u=0.8750696087366453,v=0.8443946111777411,w=0.5150081590379324,x=6.9769606087666 color=purple,shape=triangle,flag=0,i=39369,u=0.9160850795306806,v=0.9932014003101209,w=0.5018352998115054,x=4.793790312960973 color=purple,shape=square,flag=0,i=39384,u=0.22368754258934542,v=0.24624496014649055,w=0.49496439725646624,x=3.6102318824700483 color=purple,shape=circle,flag=0,i=39398,u=0.21517806608498646,v=0.8196968078409886,w=0.5187868513576659,x=5.9440824615539904 color=yellow,shape=triangle,flag=1,i=39411,u=0.5646911415753773,v=0.6113202067574828,w=0.515655244170274,x=4.547456465946942 color=red,shape=circle,flag=0,i=39414,u=0.08207536759740874,v=0.05545527956716427,w=0.5038531960132209,x=4.58456499360184 color=purple,shape=square,flag=0,i=39417,u=0.7065466075694898,v=0.4544578679835566,w=0.49740396282091665,x=6.211697830216022 color=red,shape=square,flag=0,i=39421,u=0.1514587929504907,v=0.015800774708563337,w=0.48889076339317666,x=6.278227085881568 color=red,shape=triangle,flag=1,i=39424,u=0.4036420254819122,v=0.2208297853446305,w=0.5351694405156383,x=5.73245815993143 color=red,shape=square,flag=0,i=39434,u=0.5092714136678518,v=0.08267959367777122,w=0.4897421326300275,x=6.189223273977316 color=green,shape=circle,flag=0,i=39437,u=0.47143849771730817,v=0.7206230774891145,w=0.5105775019030652,x=3.096843331850879 color=blue,shape=triangle,flag=1,i=39452,u=0.4108370944684231,v=0.17508398140092007,w=0.516846412069019,x=5.042433947122654 color=red,shape=circle,flag=0,i=39459,u=0.8677153645774535,v=0.900316895018318,w=0.4936890101328895,x=6.019595126076823 color=blue,shape=triangle,flag=1,i=39474,u=0.9553019148659684,v=0.45765246445471564,w=0.5142487080177939,x=4.825890094413331 color=blue,shape=square,flag=1,i=39477,u=0.34349584856688986,v=0.5427373929948094,w=0.4827067468359886,x=6.161423400652301 color=purple,shape=square,flag=0,i=39478,u=0.6181329264451106,v=0.2740582967902253,w=0.500325683569904,x=5.988873682044269 color=red,shape=circle,flag=0,i=39485,u=0.2933425185682206,v=0.19696260825815642,w=0.49378278435690165,x=4.99296788607792 color=blue,shape=square,flag=1,i=39508,u=0.6018296981161007,v=0.48671247321274247,w=0.4728499003115625,x=4.537908610131487 color=blue,shape=square,flag=0,i=39515,u=0.5917021785500398,v=0.7180729704428234,w=0.47038782817852604,x=6.572393320560106 color=blue,shape=triangle,flag=0,i=39523,u=0.7976643048373657,v=0.5657690973064404,w=0.5040865190265051,x=5.439688669204595 color=red,shape=circle,flag=0,i=39535,u=0.01734841963435818,v=0.020433763178842223,w=0.47923692839106113,x=6.954518602995847 color=red,shape=triangle,flag=0,i=39540,u=0.9975680760617336,v=0.5858113294982089,w=0.5239219495275551,x=3.583829045080017 color=red,shape=triangle,flag=0,i=39543,u=0.5037390448566906,v=0.40265455325217936,w=0.5253108909612321,x=3.9629273595743437 color=blue,shape=circle,flag=0,i=39547,u=0.44659669164426985,v=0.8581453296641002,w=0.4858215950748845,x=5.292404928997199 color=red,shape=triangle,flag=1,i=39552,u=0.8261355187097076,v=0.6093458112426304,w=0.5222035903278082,x=4.906427613398106 color=blue,shape=square,flag=0,i=39554,u=0.4847317606543907,v=0.4958025517192002,w=0.4738606886529594,x=5.414138281330171 color=red,shape=square,flag=1,i=39556,u=0.5443966580579718,v=0.45841680799768203,w=0.48637556520255476,x=3.024551071286789 color=purple,shape=square,flag=0,i=39561,u=0.8640637777725868,v=0.18496268115707704,w=0.498140287852323,x=4.364089163957901 color=green,shape=square,flag=1,i=39562,u=0.5905261188438536,v=0.6422245286081031,w=0.5138031687405284,x=6.26814868803615 color=red,shape=triangle,flag=0,i=39565,u=0.9561292202846399,v=0.9668194684210542,w=0.5178075470310429,x=5.60019581633746 color=red,shape=circle,flag=0,i=39569,u=0.9695832824925855,v=0.9054094881243873,w=0.48100492235765596,x=5.416982353829602 color=red,shape=square,flag=1,i=39576,u=0.004164445205783074,v=0.5358188259589823,w=0.4842846807116942,x=6.608741385162876 color=purple,shape=triangle,flag=0,i=39582,u=0.06949449473715041,v=0.19234858063365412,w=0.49795450728510976,x=6.45445327635169 color=purple,shape=square,flag=0,i=39603,u=0.06157543533408816,v=0.7314783967384737,w=0.49407401633436343,x=5.197801587627036 color=purple,shape=square,flag=0,i=39614,u=0.33658041714586906,v=0.019206731167908053,w=0.49694622901044894,x=5.9178360928726255 color=green,shape=circle,flag=0,i=39630,u=0.8845282032005826,v=0.172516015590907,w=0.5125949475751116,x=6.006543906800754 color=red,shape=triangle,flag=0,i=39631,u=0.7844979349161723,v=0.23750260632865972,w=0.515044332417428,x=3.5797982962971004 color=green,shape=circle,flag=0,i=39663,u=0.8889675338844115,v=0.8498083967833386,w=0.5048829219725421,x=4.346374870634605 color=green,shape=triangle,flag=0,i=39673,u=0.26766239120667257,v=0.06097946000033494,w=0.4585066889177896,x=5.894437062355936 color=red,shape=circle,flag=1,i=39698,u=0.1173908053575089,v=0.09611446635012184,w=0.47551198263215205,x=6.296276424483339 color=yellow,shape=square,flag=1,i=39703,u=0.20142964823164766,v=0.18058821918715284,w=0.49137384443342447,x=6.125731071772061 color=blue,shape=square,flag=0,i=39709,u=0.553868075349823,v=0.6606686727868244,w=0.4718475547749687,x=4.768194563131835 color=red,shape=square,flag=0,i=39711,u=0.9720787852898816,v=0.7072650378533071,w=0.4934676899614167,x=4.211604713055995 color=yellow,shape=square,flag=1,i=39717,u=0.15254906187727868,v=0.38871430549326036,w=0.49165626535368107,x=7.379618947124032 color=yellow,shape=triangle,flag=0,i=39729,u=0.3406651787908065,v=0.7799297058381454,w=0.5164275222630685,x=5.536565084664942 color=green,shape=square,flag=1,i=39733,u=0.7469905910748575,v=0.30802777422029715,w=0.5203235768840627,x=2.6697495842017864 color=blue,shape=square,flag=1,i=39737,u=0.211788611644823,v=0.16738311426935804,w=0.47511503302109503,x=6.23205188154503 color=red,shape=square,flag=0,i=39738,u=0.39159887437445307,v=0.7199605459574635,w=0.4872463773932245,x=5.423874298368646 color=blue,shape=square,flag=1,i=39752,u=0.3652915738067196,v=0.7443797186837637,w=0.47992192966429087,x=5.429858542746497 color=red,shape=triangle,flag=0,i=39769,u=0.08646867670314551,v=0.08843033220393537,w=0.5513404104853943,x=6.878343202242778 color=blue,shape=square,flag=0,i=39777,u=0.20484721225053282,v=0.4661712168180666,w=0.48665786202900607,x=5.2961271387389655 color=blue,shape=triangle,flag=1,i=39787,u=0.7567737011270878,v=0.32349488254926695,w=0.5129160929626151,x=3.8314523589367924 color=red,shape=square,flag=0,i=39789,u=0.9479363213355183,v=0.4795817752837438,w=0.4822656993247,x=6.830410436201902 color=green,shape=circle,flag=0,i=39792,u=0.2907685773558777,v=0.8731326700924537,w=0.5099500179293874,x=4.762207368025709 color=blue,shape=square,flag=1,i=39795,u=0.15491812175550101,v=0.023550742079665565,w=0.48865565972064195,x=5.089974987985447 color=purple,shape=triangle,flag=0,i=39815,u=0.35034166193227867,v=0.020341753938377338,w=0.5082622310079358,x=4.516956315272891 color=blue,shape=triangle,flag=0,i=39829,u=0.19022816832990286,v=0.27381243034108327,w=0.5084215290532271,x=6.643229485686764 color=purple,shape=triangle,flag=0,i=39849,u=0.011830854092107268,v=0.7466895614700884,w=0.5078861823801148,x=5.763338649318015 color=blue,shape=circle,flag=1,i=39864,u=0.5286269860092916,v=0.09174636536052938,w=0.4839097995215383,x=5.245328225982277 color=red,shape=square,flag=1,i=39874,u=0.017999673369659464,v=0.9022289169681199,w=0.4735626819075993,x=4.671385845088863 color=red,shape=triangle,flag=0,i=39894,u=0.5929205919651507,v=0.5603993820061481,w=0.5575999627986716,x=5.105302929576312 color=yellow,shape=square,flag=1,i=39900,u=0.8916354235969586,v=0.7857427902722474,w=0.47617734274964424,x=5.025706892371844 color=red,shape=triangle,flag=1,i=39959,u=0.012772170008167327,v=0.07051393834139175,w=0.5582320757985528,x=6.515365898567603 color=red,shape=square,flag=0,i=39963,u=0.3197367133413562,v=0.10412619413556723,w=0.4602761075396893,x=6.897129749637106 color=red,shape=circle,flag=1,i=39992,u=0.2622598902731341,v=0.3580980981637506,w=0.4722640402950396,x=5.06230000166988 color=yellow,shape=square,flag=1,i=39996,u=0.9738841115069133,v=0.30717572010172234,w=0.475067335019385,x=8.138199996818354 color=green,shape=triangle,flag=0,i=40003,u=0.2595720628019772,v=0.29233364319412536,w=0.4416916820683191,x=5.039227185057932 color=yellow,shape=circle,flag=1,i=40007,u=0.546523666600999,v=0.9608038475313697,w=0.4837411900879732,x=6.252574838238434 color=orange,shape=square,flag=1,i=40022,u=0.764742255673633,v=0.3735179888280705,w=0.49808223124190154,x=2.7290452358014146 color=green,shape=triangle,flag=0,i=40024,u=0.9369115965405426,v=0.543404003351943,w=0.44511272715032324,x=7.287797243559415 color=yellow,shape=circle,flag=1,i=40027,u=0.7912279944547849,v=0.4466997015900954,w=0.4871534480092622,x=6.783131459101508 color=red,shape=triangle,flag=1,i=40033,u=0.3461566834066091,v=0.33243600472851575,w=0.5461259501717964,x=3.0340888140346185 color=blue,shape=square,flag=0,i=40038,u=0.5308869492507371,v=0.6032038924105055,w=0.5005736474388827,x=4.973886006800854 color=red,shape=square,flag=0,i=40048,u=0.428795415660986,v=0.7380274411083768,w=0.4792342730468049,x=6.567457918921472 color=blue,shape=square,flag=1,i=40049,u=0.34166912207856603,v=0.8327014292637935,w=0.49592881928346727,x=5.92458450568603 color=yellow,shape=circle,flag=1,i=40054,u=0.5561122199642279,v=0.0028493163097591534,w=0.48751301099357564,x=5.6412088568231775 color=blue,shape=square,flag=1,i=40058,u=0.30987001700396655,v=0.8839709700753099,w=0.49914722174633824,x=4.013303794389007 color=blue,shape=triangle,flag=0,i=40070,u=0.2271139811341576,v=0.9972265275057707,w=0.5042128678302498,x=4.557252215397245 color=red,shape=square,flag=0,i=40074,u=0.8963642740150665,v=0.5964074652491322,w=0.47743036114879545,x=4.365911200789994 color=blue,shape=triangle,flag=0,i=40079,u=0.6415189362790564,v=0.2790523457099494,w=0.5044889560260606,x=4.4895918312870355 color=blue,shape=circle,flag=1,i=40099,u=0.7197685198379256,v=0.4347940506722363,w=0.4820463817553045,x=3.534448259614519 color=red,shape=square,flag=0,i=40112,u=0.39104810355783814,v=0.9851271188367299,w=0.4786667573710622,x=6.307719358232892 color=red,shape=square,flag=0,i=40117,u=0.600924830991792,v=0.23071159514109874,w=0.4770169798669659,x=5.569954665957255 color=red,shape=circle,flag=1,i=40123,u=0.5415517243642339,v=0.4830519911092873,w=0.4726137110014219,x=6.127840486254293 color=purple,shape=triangle,flag=0,i=40144,u=0.541761838940377,v=0.9264512959889604,w=0.5130323486392376,x=3.6586127405988536 color=blue,shape=triangle,flag=0,i=40162,u=0.29243460541559596,v=0.6744410500024415,w=0.5026381948680212,x=5.8265442314175955 color=red,shape=triangle,flag=0,i=40175,u=0.1564732328065278,v=0.24314808298011803,w=0.5418818025802538,x=4.441802754098668 color=yellow,shape=square,flag=1,i=40186,u=0.024433639695421228,v=0.9392705213913216,w=0.487225627309413,x=4.40986026307741 color=purple,shape=square,flag=0,i=40187,u=0.36494982158182254,v=0.7491013055030736,w=0.49892339544862074,x=4.481404168274309 color=yellow,shape=circle,flag=1,i=40188,u=0.30724989486511367,v=0.6087970132622745,w=0.5022534811698548,x=6.443804313933138 color=yellow,shape=square,flag=1,i=40205,u=0.7273005003868648,v=0.11698694546772603,w=0.49123970666869876,x=4.066446099379594 color=purple,shape=triangle,flag=0,i=40206,u=0.8419994001438059,v=0.4511699159384033,w=0.5075410555790757,x=4.920803384806212 color=red,shape=square,flag=0,i=40207,u=0.29546702649377976,v=0.7859074991032909,w=0.4779569219799509,x=3.769994999411825 color=purple,shape=square,flag=0,i=40209,u=0.25190692338867926,v=0.13564983177672008,w=0.4985303221261576,x=4.108993113180069 color=yellow,shape=triangle,flag=1,i=40211,u=0.22698355978729134,v=0.8416204814932413,w=0.5047416284030152,x=4.867176354458826 color=red,shape=square,flag=1,i=40265,u=0.9716859435742579,v=0.19469075755336318,w=0.489751512718313,x=5.71915087076871 color=green,shape=triangle,flag=1,i=40270,u=0.06627365668608731,v=0.9535496678537436,w=0.4481542899331256,x=4.558220149223964 color=yellow,shape=circle,flag=1,i=40315,u=0.6280807488381492,v=0.6758294962994147,w=0.5015582298229407,x=5.482064733393159 color=yellow,shape=circle,flag=1,i=40319,u=0.3929534020474553,v=0.5836415948143827,w=0.49983089220161,x=6.045990918282446 color=yellow,shape=square,flag=1,i=40328,u=0.5820644631862629,v=0.35706292051124566,w=0.5143514678699764,x=5.727779420801414 color=blue,shape=square,flag=1,i=40355,u=0.40252632111500486,v=0.06066838582196632,w=0.5104408352048592,x=7.184418484522475 color=green,shape=square,flag=0,i=40373,u=0.9368388199061015,v=0.285104100719457,w=0.4964870334481603,x=4.567357536587003 color=red,shape=triangle,flag=1,i=40377,u=0.12678209202773827,v=0.5502625053793366,w=0.5468920720728657,x=6.906806670792279 color=red,shape=circle,flag=0,i=40400,u=0.09973373500079907,v=0.07022044013142184,w=0.47181103539100266,x=6.510154327497104 color=blue,shape=triangle,flag=1,i=40413,u=0.9334210137035209,v=0.25830827175843374,w=0.5131736002358351,x=4.77041058079687 color=red,shape=square,flag=1,i=40416,u=0.7223755270344265,v=0.33344601000513996,w=0.4840363534853566,x=6.1459144800384315 color=blue,shape=square,flag=0,i=40439,u=0.7417279035246976,v=0.5451620706961755,w=0.5006347727358323,x=3.300636947393009 color=yellow,shape=circle,flag=1,i=40447,u=0.5975299201005286,v=0.40419080279383723,w=0.4934558348811598,x=3.6011551787102345 color=red,shape=square,flag=0,i=40450,u=0.19618094137590136,v=0.18934014312096203,w=0.4783131267124837,x=5.273132451051901 color=red,shape=triangle,flag=0,i=40469,u=0.8817838716003784,v=0.8071143104611547,w=0.5527616698688461,x=4.529886302096688 color=green,shape=triangle,flag=0,i=40472,u=0.8463293433841946,v=0.43079526044877614,w=0.45669726828682,x=6.658687275454419 color=orange,shape=triangle,flag=1,i=40482,u=0.09719669863578317,v=0.9542075038903742,w=0.5114357746931003,x=5.890787655368153 color=green,shape=square,flag=0,i=40486,u=0.8386341684414829,v=0.8072870935662964,w=0.5015772295856746,x=5.347370781343389 color=red,shape=square,flag=0,i=40495,u=0.42602920356188356,v=0.8046761689858815,w=0.4701341876184085,x=4.78536398896458 color=blue,shape=triangle,flag=1,i=40507,u=0.5781226458185247,v=0.5433493291092453,w=0.5213700198910548,x=4.269212880065585 color=red,shape=triangle,flag=0,i=40511,u=0.8078131796571932,v=0.6958244573624209,w=0.5434261697780716,x=4.212625508599345 color=blue,shape=square,flag=1,i=40513,u=0.8515404918503977,v=0.4950299440035032,w=0.49331137090636235,x=4.873688308765054 color=red,shape=square,flag=0,i=40536,u=0.29821255325239593,v=0.8099283947092014,w=0.4806279883656576,x=4.374504856035643 color=yellow,shape=triangle,flag=1,i=40544,u=0.5576353082726088,v=0.3970836971495675,w=0.49633374375687517,x=5.733379761426601 color=yellow,shape=triangle,flag=1,i=40593,u=0.9908727748501635,v=0.9676283907521892,w=0.5019612304905726,x=4.674444806193367 color=red,shape=circle,flag=0,i=40594,u=0.11674066618334178,v=0.09023372455557184,w=0.48049073688711536,x=5.13302778687985 color=purple,shape=square,flag=0,i=40597,u=0.3492940512796332,v=0.9673229033712439,w=0.49704641743407907,x=7.212836465274433 color=blue,shape=triangle,flag=1,i=40624,u=0.8162808189972856,v=0.49953643979915785,w=0.5105490880991683,x=4.731723838834704 color=red,shape=triangle,flag=0,i=40625,u=0.2989387938029462,v=0.21764995351122096,w=0.540044260381093,x=5.945125771878374 color=red,shape=triangle,flag=0,i=40639,u=0.3601192225847776,v=0.16956569410415367,w=0.537265707842095,x=3.017915454400304 color=green,shape=triangle,flag=1,i=40649,u=0.5245847279601498,v=0.6826424077937555,w=0.4544253043939622,x=4.389125679305141 color=yellow,shape=square,flag=1,i=40664,u=0.9885773514745881,v=0.6105612255252967,w=0.5257605978316502,x=3.5799857260243293 color=purple,shape=circle,flag=0,i=40678,u=0.243723853165545,v=0.1821879659809228,w=0.49447491359844953,x=5.986878367230524 color=yellow,shape=square,flag=1,i=40683,u=0.389139248822608,v=0.29929440304684873,w=0.5218816792050955,x=5.711407349146634 color=orange,shape=circle,flag=1,i=40689,u=0.2922946102013083,v=0.8984319222583506,w=0.5226900900636086,x=5.748448294105998 color=blue,shape=triangle,flag=1,i=40713,u=0.2638578555186999,v=0.32626221995511817,w=0.5092620078581488,x=5.781044482017951 color=red,shape=square,flag=0,i=40727,u=0.6248255135567757,v=0.6942025924840597,w=0.4689421346564869,x=4.928995571344981 color=green,shape=triangle,flag=0,i=40730,u=0.24689259155257304,v=0.9453777091780577,w=0.46326003770942237,x=3.9774920738405286 color=green,shape=circle,flag=0,i=40735,u=0.54361731859941,v=0.3292411229513592,w=0.5149143717230693,x=5.553641351015876 color=yellow,shape=square,flag=1,i=40742,u=0.24847094475505616,v=0.1468553413352739,w=0.5166088143870115,x=3.3302202837109767 color=green,shape=circle,flag=0,i=40750,u=0.1953446809965247,v=0.6669462160489693,w=0.5127609357344466,x=4.0648220863952185 color=red,shape=square,flag=1,i=40753,u=0.2482649569337365,v=0.5468200264929788,w=0.47888313529202103,x=6.244672991570411 color=red,shape=square,flag=0,i=40760,u=0.1565404857446866,v=0.9552720912259636,w=0.47887670604729,x=5.008396499448484 color=purple,shape=square,flag=0,i=40763,u=0.7980154023490905,v=0.18362842111060684,w=0.5034074859932886,x=3.1052490476115815 color=red,shape=triangle,flag=1,i=40766,u=0.10148508522988653,v=0.6749200091056718,w=0.5272583494058288,x=4.927605026849144 color=red,shape=circle,flag=0,i=40768,u=0.3685289658276566,v=0.42530915019818777,w=0.5008733065270098,x=6.60437741887262 color=red,shape=triangle,flag=0,i=40773,u=0.062414611390882,v=0.6447313268314849,w=0.5291563651803365,x=4.399995056769941 color=green,shape=square,flag=1,i=40782,u=0.3505984244685435,v=0.465967717842515,w=0.4841104719509502,x=4.62313535479982 color=red,shape=triangle,flag=0,i=40800,u=0.537964663415434,v=0.7519542908220004,w=0.526181268517801,x=4.443272861507481 color=green,shape=square,flag=1,i=40813,u=0.5289840309445121,v=0.10394129575246724,w=0.48932302701561703,x=5.552179894913315 color=blue,shape=circle,flag=0,i=40818,u=0.4864258195649044,v=0.3512910752065711,w=0.49431116334674097,x=5.708729268795683 color=purple,shape=triangle,flag=0,i=40833,u=0.9776358235580903,v=0.8314235657286768,w=0.5194161174800925,x=4.28697326542846 color=red,shape=circle,flag=1,i=40839,u=0.7319923668238524,v=0.6968009050681002,w=0.5000359440996291,x=4.595355498993931 color=red,shape=circle,flag=0,i=40856,u=0.6668808350266331,v=0.5721907312804069,w=0.505326872199448,x=5.506691730649756 color=purple,shape=triangle,flag=0,i=40857,u=0.7967412822368806,v=0.7119498900414054,w=0.520628165659509,x=4.675628286018475 color=red,shape=triangle,flag=0,i=40870,u=0.47957344269608304,v=0.839257710714516,w=0.5224376985630319,x=4.824603300802242 color=green,shape=square,flag=0,i=40872,u=0.27016769622638914,v=0.5437998876982383,w=0.48762848481292576,x=6.745588834970204 color=orange,shape=circle,flag=0,i=40878,u=0.36706621318023924,v=0.9698982896181795,w=0.5194393610321152,x=4.877797049432641 color=yellow,shape=square,flag=1,i=40897,u=0.4019283503485094,v=0.0037504417809507418,w=0.5068045481149688,x=5.661258661659244 color=red,shape=triangle,flag=1,i=40899,u=0.7622444977219807,v=0.13532047409663006,w=0.5231148573440267,x=3.8140192857716806 color=red,shape=triangle,flag=1,i=40907,u=0.5317162108988236,v=0.9032940349022393,w=0.5224512780828396,x=4.85896471624401 color=yellow,shape=square,flag=1,i=40917,u=0.8297382129568323,v=0.23528709172060958,w=0.5097151973847575,x=3.041190360751321 color=yellow,shape=circle,flag=1,i=40920,u=0.2187439834269861,v=0.30167565493257154,w=0.497839617549306,x=5.718425020284612 color=red,shape=circle,flag=0,i=40930,u=0.4507346145614457,v=0.356013765145489,w=0.5139243590852092,x=4.1811086790605865 color=red,shape=square,flag=1,i=40944,u=0.21612316339095672,v=0.5965080435398413,w=0.46558046836939543,x=5.068799087018072 color=blue,shape=square,flag=1,i=40956,u=0.36474176773331146,v=0.8454453581782515,w=0.49727071171338044,x=3.860739839507016 color=purple,shape=circle,flag=0,i=40959,u=0.19736177422410361,v=0.40712047453374944,w=0.49587377877530003,x=5.912429014001464 color=red,shape=circle,flag=0,i=40970,u=0.7005872436257956,v=0.6221475947158343,w=0.5092852407263053,x=6.0702945128230406 color=green,shape=square,flag=0,i=40979,u=0.1266107665974655,v=0.5356688591943147,w=0.48322227332103806,x=4.226742870121238 color=blue,shape=circle,flag=1,i=41020,u=0.00943323226941939,v=0.8446978189819311,w=0.5018599546418963,x=4.793760867241468 color=red,shape=square,flag=0,i=41024,u=0.11281835440030663,v=0.7789680950472638,w=0.44121932292225113,x=6.029666144555385 color=orange,shape=triangle,flag=1,i=41035,u=0.05837890310319416,v=0.07636249822975938,w=0.50241097071327,x=3.9056186685192973 color=red,shape=triangle,flag=0,i=41036,u=0.3588004771654896,v=0.029715204098169967,w=0.5098908448951518,x=5.977457621205759 color=yellow,shape=circle,flag=1,i=41055,u=0.6642375363825297,v=0.7473161264597635,w=0.4911355627721241,x=6.3925846505742 color=green,shape=triangle,flag=0,i=41068,u=0.6012568860610388,v=0.4071706777595179,w=0.4724788407174964,x=6.792622387122063 color=green,shape=triangle,flag=0,i=41077,u=0.006409854905215173,v=0.9953897812617374,w=0.46909694265629237,x=5.092367804520576 color=red,shape=circle,flag=0,i=41093,u=0.24774590349728343,v=0.25179334666781406,w=0.5074890714155886,x=3.7914211172739343 color=purple,shape=circle,flag=0,i=41096,u=0.7332071609186626,v=0.3050420015750761,w=0.4975460107229564,x=4.338931958302688 color=red,shape=square,flag=0,i=41110,u=0.3249535218520929,v=0.44695386243548285,w=0.44076515312824666,x=4.1232348383043345 color=red,shape=triangle,flag=0,i=41117,u=0.22603976881447552,v=0.21132377795592672,w=0.4983573859172499,x=6.015265385514934 color=green,shape=square,flag=0,i=41133,u=0.026186479360741366,v=0.13222331109096497,w=0.4905758343438278,x=6.121831330568276 color=red,shape=circle,flag=1,i=41136,u=0.8585729729210986,v=0.9336032925866591,w=0.5150254587145655,x=6.083129177033072 color=green,shape=circle,flag=0,i=41146,u=0.15200293613642057,v=0.41065522042278624,w=0.5056691493888975,x=4.142907611787745 color=red,shape=square,flag=0,i=41148,u=0.35932841489150524,v=0.7975816126465474,w=0.4544689761869863,x=5.1704614314369275 color=red,shape=triangle,flag=0,i=41166,u=0.6031154789698985,v=0.1632700399661593,w=0.4946392165868584,x=3.273113566179029 color=yellow,shape=square,flag=1,i=41169,u=0.844895226225717,v=0.5002456401704629,w=0.5018381245124144,x=3.9265681141717788 color=red,shape=circle,flag=1,i=41197,u=0.44272754321694174,v=0.4410411353162348,w=0.5103827820767027,x=7.336556085128362 color=red,shape=circle,flag=0,i=41213,u=0.16244570059444574,v=0.1913282359798194,w=0.5080641700004002,x=5.2106138487944635 color=yellow,shape=square,flag=1,i=41221,u=0.21378425914146149,v=0.2147182139306688,w=0.510938342839433,x=4.2407446250786895 color=green,shape=square,flag=0,i=41224,u=0.2955710804078491,v=0.3505625824576629,w=0.4961112083801156,x=4.579727033980405 color=red,shape=triangle,flag=0,i=41228,u=0.6589785137222948,v=0.7419091413749674,w=0.5012083314631209,x=3.459492032625103 color=red,shape=triangle,flag=1,i=41229,u=0.008697938962164087,v=0.35751804341911053,w=0.503546859053565,x=5.0754090219045205 color=red,shape=circle,flag=1,i=41233,u=0.20130571289997412,v=0.25983385732663467,w=0.5062401447372741,x=6.009491690988735 color=red,shape=square,flag=0,i=41237,u=0.2077942336550639,v=0.24631488672081348,w=0.4561562318488982,x=5.763009389137171 color=green,shape=triangle,flag=0,i=41240,u=0.1388091490042217,v=0.5367294697022725,w=0.47603068593969655,x=6.123297439839205 color=red,shape=square,flag=0,i=41261,u=0.9998822102016469,v=0.46815234994788446,w=0.45856223710290567,x=4.890051638015498 color=blue,shape=circle,flag=1,i=41280,u=0.1782114063356941,v=0.7877690766618495,w=0.5001458122603802,x=5.566726562619991 color=red,shape=square,flag=0,i=41285,u=0.7173099141802141,v=0.7078029654590525,w=0.46469373672667796,x=4.583449217191266 color=blue,shape=square,flag=0,i=41296,u=0.3454905642340733,v=0.19972304226274573,w=0.5088163812570099,x=5.946724813788657 color=red,shape=circle,flag=0,i=41298,u=0.04912985095575162,v=0.08025091062765384,w=0.5149809643358482,x=4.122100038033584 color=red,shape=triangle,flag=1,i=41302,u=0.9805547981785468,v=0.5788603877754698,w=0.5102740439436876,x=3.4387117775312728 color=purple,shape=square,flag=0,i=41313,u=0.32050134640300276,v=0.20960368204663338,w=0.5016947735048498,x=5.436728676291729 color=green,shape=circle,flag=0,i=41315,u=0.7558533887157577,v=0.8574758963562502,w=0.5058862878487302,x=5.372012723079794 color=red,shape=square,flag=0,i=41320,u=0.16571923046766424,v=0.3395442840950539,w=0.46027698929239264,x=6.614191202761383 color=red,shape=square,flag=0,i=41333,u=0.23539807857375017,v=0.029569983506120945,w=0.46424201371688983,x=4.664103309003582 color=red,shape=triangle,flag=0,i=41334,u=0.9414131231521559,v=0.5637319354725785,w=0.5100317333100488,x=4.461039880202075 color=red,shape=triangle,flag=0,i=41363,u=0.7496133321789066,v=0.5753027334048532,w=0.5082128925076759,x=5.68569856226981 color=green,shape=square,flag=0,i=41370,u=0.5888626949264554,v=0.49794962288359834,w=0.492272843933555,x=4.299793988615572 color=blue,shape=square,flag=0,i=41372,u=0.938522464304407,v=0.7997406406159722,w=0.5099388114091625,x=5.087434267728367 color=blue,shape=triangle,flag=1,i=41379,u=0.6386442129462215,v=0.38205346810160934,w=0.5055560189831071,x=7.08816823364052 color=yellow,shape=triangle,flag=1,i=41391,u=0.4967651674378841,v=0.7028857832766183,w=0.5050706908897531,x=2.617120492678897 color=red,shape=square,flag=0,i=41425,u=0.11697592862776163,v=0.776070583666844,w=0.4628193075484102,x=5.81393272425408 color=green,shape=triangle,flag=1,i=41430,u=0.8821014727718542,v=0.5879064792659994,w=0.48404470498269975,x=6.156342151205378 color=yellow,shape=triangle,flag=1,i=41431,u=0.7216829279521791,v=0.41186085630062563,w=0.5139955664129368,x=5.822589071239395 color=purple,shape=triangle,flag=0,i=41453,u=0.09799301117045978,v=0.5345676923879632,w=0.5169615184415605,x=5.250379441097196 color=blue,shape=triangle,flag=1,i=41457,u=0.17123644077345412,v=0.7036414440481312,w=0.5064731785419707,x=5.8713124874714735 color=red,shape=square,flag=1,i=41513,u=0.735640556687527,v=0.041482539910170924,w=0.46757039796840416,x=4.33615034009331 color=red,shape=circle,flag=0,i=41521,u=0.7248062933235758,v=0.6477521864058217,w=0.5280510519219362,x=5.202996256962501 color=red,shape=square,flag=0,i=41532,u=0.13939534134302878,v=0.7062580414788688,w=0.47014467278416444,x=5.333468435226506 color=green,shape=circle,flag=0,i=41538,u=0.7618927248516096,v=0.011134728343045519,w=0.5013483663583217,x=5.075399723761248 color=purple,shape=circle,flag=0,i=41543,u=0.1411284747024314,v=0.4776568215637865,w=0.49870883984795583,x=4.778201084034603 color=red,shape=circle,flag=1,i=41545,u=0.043954004304485705,v=0.0729807080198989,w=0.5274826135833207,x=4.882747543352472 color=yellow,shape=triangle,flag=1,i=41548,u=0.25542755651336757,v=0.5091813047427031,w=0.5176666495371838,x=6.074068520582077 color=red,shape=circle,flag=1,i=41552,u=0.25684060526053965,v=0.28832406331707605,w=0.5316181251961247,x=4.949857478419258 color=red,shape=square,flag=0,i=41559,u=0.9878723771262267,v=0.4030523061712127,w=0.47752596960788896,x=6.077950705004928 color=red,shape=circle,flag=0,i=41564,u=0.4112819635335717,v=0.3145849525983753,w=0.5368963226770362,x=4.079965299696652 color=red,shape=triangle,flag=0,i=41574,u=0.9442737382342208,v=0.5186928081995084,w=0.4959350376942421,x=6.218368622701866 color=red,shape=triangle,flag=0,i=41587,u=0.7822208691306908,v=0.428004048191177,w=0.4937386986245334,x=5.455295306438355 color=green,shape=circle,flag=1,i=41601,u=0.5523000602651791,v=0.1361133710703959,w=0.4979353732317967,x=3.1952963508563563 color=yellow,shape=circle,flag=1,i=41620,u=0.3826753901716061,v=0.30935628659403125,w=0.479668210489739,x=6.514367447632842 color=red,shape=circle,flag=0,i=41631,u=0.6446923855143726,v=0.7335233116379923,w=0.534095256070473,x=5.7265795413660685 color=red,shape=square,flag=0,i=41632,u=0.8394911218955688,v=0.04337216607437766,w=0.4754390079134481,x=6.491073865316974 color=red,shape=triangle,flag=0,i=41637,u=0.44348699682294734,v=0.37258376685737904,w=0.4883794578408287,x=4.686940646592702 color=red,shape=circle,flag=0,i=41638,u=0.0990833525633743,v=0.12774801101336,w=0.5376366806602688,x=5.155195637415368 color=yellow,shape=triangle,flag=1,i=41645,u=0.5936607610834136,v=0.864767408605107,w=0.508880796073613,x=4.887898650848888 color=blue,shape=square,flag=0,i=41649,u=0.8639977215568386,v=0.9180348177137787,w=0.5158446528523883,x=6.3337406072164875 color=blue,shape=circle,flag=1,i=41665,u=0.3480873714297278,v=0.8688101461893617,w=0.5050037849703162,x=5.9683006169880635 color=blue,shape=square,flag=1,i=41671,u=0.5402380371666339,v=0.5827398874456162,w=0.5146432891390627,x=6.186739275855484 color=blue,shape=square,flag=0,i=41695,u=0.8282270764147311,v=0.5912835709347535,w=0.5097168903307813,x=5.39833155523991 color=red,shape=triangle,flag=1,i=41703,u=0.8735866032564092,v=0.3398557403739403,w=0.49015802677843745,x=2.9362695676130577 color=red,shape=square,flag=1,i=41720,u=0.4100054829037967,v=0.7536418516648821,w=0.47518824456706443,x=4.311902979409429 color=yellow,shape=triangle,flag=1,i=41726,u=0.8628818508076298,v=0.6169269692001,w=0.5086607908606664,x=4.448466380814399 color=purple,shape=circle,flag=0,i=41738,u=0.5532393154222418,v=0.8064732451217115,w=0.5072042689758782,x=4.720496144538789 color=green,shape=triangle,flag=0,i=41739,u=0.9303739602629575,v=0.06492932788889794,w=0.48567256563654826,x=5.0358552544991 color=red,shape=circle,flag=0,i=41740,u=0.42298056691858954,v=0.5127969809049215,w=0.5338035318900609,x=3.4992734545454667 color=red,shape=square,flag=0,i=41743,u=0.4577318178536147,v=0.30540883843616484,w=0.48464583923709154,x=5.544881004230361 color=blue,shape=square,flag=0,i=41752,u=0.1912654647532387,v=0.440391285823696,w=0.5057045605970851,x=7.430903505000443 color=red,shape=triangle,flag=0,i=41769,u=0.5939250019320538,v=0.6875073265444706,w=0.49396486970302567,x=5.644836926635821 color=red,shape=triangle,flag=1,i=41786,u=0.6232155179969188,v=0.2928103736322655,w=0.48830623930381595,x=6.808422803040777 color=red,shape=circle,flag=0,i=41805,u=0.7426278169578489,v=0.7573390612579981,w=0.5240344135238483,x=5.584839302972811 color=red,shape=square,flag=1,i=41813,u=0.3230715545042646,v=0.7639435498121768,w=0.4917808347074572,x=3.966261819115246 color=green,shape=triangle,flag=0,i=41823,u=0.8783766193667714,v=0.7581210435585213,w=0.4836238433355995,x=6.347874058559537 color=red,shape=square,flag=0,i=41832,u=0.4616893914921477,v=0.4020793914327204,w=0.4868109611944463,x=3.731669480356746 color=green,shape=square,flag=0,i=41839,u=0.4676881398040288,v=0.3614626383306794,w=0.5064596558928773,x=7.53678961725901 color=purple,shape=square,flag=0,i=41849,u=0.003288508756311259,v=0.37258634553111547,w=0.5090223484494167,x=7.8797081122471715 color=red,shape=circle,flag=1,i=41861,u=0.28169183849623547,v=0.35325889859005005,w=0.5299929210108116,x=5.257460163808932 color=purple,shape=triangle,flag=0,i=41862,u=0.22744564505544673,v=0.01797650860414257,w=0.5150959385291496,x=3.9702671128207303 color=red,shape=triangle,flag=0,i=41877,u=0.11385261206982633,v=0.7112402721658284,w=0.4807881101613337,x=3.6070149711306825 color=red,shape=triangle,flag=1,i=41879,u=0.24562050029077143,v=0.5667948818409958,w=0.4823912935527294,x=5.318367451031023 color=yellow,shape=triangle,flag=1,i=41894,u=0.8646126546477628,v=0.7269447179629449,w=0.5108291726212594,x=6.127638586274023 color=blue,shape=triangle,flag=0,i=41897,u=0.28285200570649505,v=0.44071482628593517,w=0.5117921578186385,x=5.617456132495323 color=purple,shape=triangle,flag=0,i=41903,u=0.5116390379078616,v=0.20550452018540133,w=0.5208510624740549,x=4.257767862398783 color=purple,shape=square,flag=0,i=41923,u=0.30569947982029155,v=0.5156799057005967,w=0.5062834710742717,x=4.690419238125075 color=blue,shape=triangle,flag=0,i=41924,u=0.11068557008179569,v=0.4080695094558585,w=0.519796870395737,x=5.883800571929169 color=yellow,shape=circle,flag=1,i=41925,u=0.4148384583187227,v=0.8118160101737696,w=0.508391018785099,x=6.8992589282084635 color=blue,shape=square,flag=1,i=41927,u=0.4156682416469647,v=0.7155029979934212,w=0.5249391655564007,x=5.847298248959041 color=yellow,shape=circle,flag=1,i=41938,u=0.7240730664440489,v=0.0954108405747085,w=0.5044075596455153,x=5.037988878444145 color=green,shape=triangle,flag=1,i=41940,u=0.5087711655657692,v=0.06299897744361416,w=0.4884523462606048,x=3.6194235062659352 color=blue,shape=circle,flag=1,i=41942,u=0.10748851742570942,v=0.0014886830387470518,w=0.4907899756522415,x=5.147129598869486 color=blue,shape=square,flag=1,i=41948,u=0.1618700266561418,v=0.6596619275167799,w=0.524413037415482,x=4.829632618636293 color=yellow,shape=circle,flag=0,i=41966,u=0.8686333417471753,v=0.50451916147296,w=0.5074582137491923,x=4.0389301492297305 color=red,shape=square,flag=0,i=41975,u=0.07179086871991747,v=0.9050221786221867,w=0.49902452767173505,x=5.091848248050398 color=red,shape=circle,flag=0,i=41979,u=0.35849557351478467,v=0.3915700830767817,w=0.5155711207779339,x=3.6279069388602547 color=yellow,shape=square,flag=1,i=41990,u=0.3249074585870637,v=0.2479354812604172,w=0.5259007413477471,x=3.357312046934293 color=red,shape=triangle,flag=0,i=41995,u=0.8210388188038518,v=0.9264560839274985,w=0.48545525122054833,x=5.609078239739397 color=purple,shape=square,flag=0,i=42001,u=0.24400549338973887,v=0.6547900624259892,w=0.5078061180717653,x=6.473465250282286 color=blue,shape=square,flag=0,i=42010,u=0.804545068195525,v=0.2789632809940058,w=0.5196698875390361,x=5.502505953539515 color=yellow,shape=triangle,flag=1,i=42016,u=0.8138352630566955,v=0.11122173080521858,w=0.49303627323372623,x=4.683369931910622 color=red,shape=square,flag=0,i=42029,u=0.9657149301527435,v=0.7428716583258956,w=0.5032588575145742,x=4.462343563546749 color=orange,shape=circle,flag=1,i=42051,u=0.10824346659361117,v=0.6491374613453533,w=0.5173534861487004,x=5.391252279044385 color=blue,shape=square,flag=1,i=42052,u=0.24649880760239262,v=0.8185152468253247,w=0.5141870302109653,x=4.178383701874165 color=purple,shape=triangle,flag=0,i=42056,u=0.5274644404495278,v=0.7818800869208066,w=0.5200456145894452,x=4.884359859641973 color=yellow,shape=square,flag=1,i=42057,u=0.45982570719156546,v=0.7337423103803807,w=0.5334233891285076,x=4.221368007350595 color=red,shape=triangle,flag=0,i=42060,u=0.1966558378102382,v=0.1743411435069091,w=0.49505755338398205,x=4.727620489120925 color=red,shape=triangle,flag=0,i=42061,u=0.29013441804420415,v=0.4064257468993786,w=0.4942541475690011,x=4.386534253977956 color=orange,shape=circle,flag=1,i=42067,u=0.06427892830620807,v=0.22422462687582723,w=0.5161064980027307,x=3.4951627649894914 color=blue,shape=square,flag=1,i=42075,u=0.9595843180167247,v=0.8671714148718568,w=0.5119868162119788,x=4.448008039947396 color=red,shape=triangle,flag=0,i=42078,u=0.2870316302780749,v=0.4983034146991252,w=0.5019647692225542,x=5.921212951787301 color=red,shape=square,flag=0,i=42082,u=0.24613963773420355,v=0.572736625081269,w=0.5109733583358478,x=3.215723923036521 color=red,shape=triangle,flag=0,i=42084,u=0.7813207520755331,v=0.20543488540258859,w=0.5061264507399164,x=6.08319233906244 color=red,shape=triangle,flag=1,i=42085,u=0.6920020237888898,v=0.4893271280139224,w=0.502908749361798,x=7.265798781059612 color=orange,shape=square,flag=1,i=42096,u=0.28317050051236914,v=0.49130353724990683,w=0.48848619157769246,x=3.1488280930860593 color=blue,shape=circle,flag=0,i=42097,u=0.8561224052634198,v=0.4562308168928856,w=0.5037671325222282,x=5.551551588427199 color=red,shape=square,flag=0,i=42098,u=0.5628059609004298,v=0.20943837510989205,w=0.5182431387140615,x=6.700325702707506 color=purple,shape=square,flag=0,i=42101,u=0.39186894725720134,v=0.08228497730591156,w=0.5001365786428994,x=3.706860725633853 color=yellow,shape=square,flag=1,i=42102,u=0.32327567693788806,v=0.45532141332280684,w=0.5406603950169535,x=5.588945394944036 color=blue,shape=square,flag=0,i=42135,u=0.6256881072073424,v=0.3891003035192553,w=0.5071510914559967,x=3.793276830317215 color=blue,shape=triangle,flag=1,i=42141,u=0.37268630015463755,v=0.5455657642318807,w=0.5145877170362394,x=4.991480220852533 color=blue,shape=circle,flag=1,i=42154,u=0.1835088190477302,v=0.5343635866979393,w=0.49927038122453643,x=4.797613930176628 color=red,shape=square,flag=0,i=42156,u=0.22987643851528983,v=0.49272629871419515,w=0.5112880476053994,x=5.7474335839157575 color=yellow,shape=square,flag=1,i=42159,u=0.31004041847254893,v=0.3329373137909095,w=0.5439369602175674,x=4.086360975101474 color=red,shape=circle,flag=1,i=42169,u=0.9811332712167679,v=0.8960659018648415,w=0.5073426387967269,x=1.9611268845333025 color=green,shape=triangle,flag=0,i=42179,u=0.4311882306596425,v=0.8325541188326202,w=0.48651932154831173,x=3.5983701162626844 color=red,shape=square,flag=1,i=42185,u=0.7306542063394752,v=0.22269600400426715,w=0.5073063634045416,x=5.52869525607922 color=purple,shape=triangle,flag=1,i=42186,u=0.3740099087593247,v=0.45264429799441397,w=0.5062449830672904,x=6.8644775356862135 color=red,shape=square,flag=1,i=42191,u=0.3530223697771485,v=0.6936746785846358,w=0.5101431886014118,x=4.048246868319073 color=yellow,shape=circle,flag=1,i=42194,u=0.6678818956496095,v=0.6516547484612618,w=0.4974515489237669,x=5.101765929996367 color=yellow,shape=circle,flag=1,i=42196,u=0.877382563604881,v=0.5996579632656069,w=0.4943612587598006,x=5.464626776304558 color=green,shape=square,flag=0,i=42202,u=0.2977352298702497,v=0.5271662993559357,w=0.5043446098555483,x=5.34349681998629 color=red,shape=triangle,flag=1,i=42206,u=0.12109722011885438,v=0.7452757819258516,w=0.49064068573003666,x=4.369828803162965 color=yellow,shape=circle,flag=1,i=42209,u=0.9851396425761609,v=0.8378277502380294,w=0.49369530588921406,x=5.537998970979634 color=green,shape=triangle,flag=1,i=42211,u=0.5594474558227601,v=0.39579981340682346,w=0.4905472397301975,x=4.092668411095752 color=yellow,shape=square,flag=1,i=42217,u=0.2064235767216892,v=0.2942198804985633,w=0.5571095786148189,x=4.881917301545466 color=blue,shape=triangle,flag=0,i=42221,u=0.5061839741257745,v=0.7132032834589251,w=0.517434473287979,x=6.6176137456898765 color=blue,shape=square,flag=1,i=42228,u=0.5372127914061164,v=0.31798545221307706,w=0.5071770871208023,x=6.088877668388487 color=purple,shape=square,flag=0,i=42234,u=0.7924483105949925,v=0.44831963157256793,w=0.49915589445469194,x=3.8437634952087847 color=green,shape=square,flag=0,i=42238,u=0.31087680147123486,v=0.3733745090476206,w=0.5038560361860169,x=6.14863942793151 color=red,shape=square,flag=1,i=42256,u=0.20272583129062705,v=0.6957814450139853,w=0.5129421098600568,x=3.1604750234820975 color=red,shape=triangle,flag=0,i=42266,u=0.3110456644051389,v=0.1558679238461611,w=0.5061670312869957,x=4.0281842690507945 color=blue,shape=square,flag=0,i=42271,u=0.9633969839586846,v=0.22304038836166473,w=0.5040612215693834,x=4.34465914745054 color=yellow,shape=triangle,flag=1,i=42274,u=0.6843520205393837,v=0.48417356096788566,w=0.4996658609448684,x=5.994467966549343 color=green,shape=square,flag=1,i=42288,u=0.9615799148129933,v=0.48658794096284974,w=0.5037533065690141,x=5.910504420571343 color=green,shape=circle,flag=0,i=42289,u=0.6264750602597915,v=0.2151004100276106,w=0.49961881545835995,x=4.727481468034974 color=blue,shape=square,flag=1,i=42297,u=0.7989463108882865,v=0.993872833141726,w=0.5025051060500516,x=4.069860493171828 color=yellow,shape=circle,flag=0,i=42307,u=0.04007150493350675,v=0.8237919779094752,w=0.4913434132278825,x=4.7788667141447805 color=red,shape=square,flag=0,i=42315,u=0.853290114858519,v=0.8038525580475187,w=0.513076299428633,x=3.7162116616489436 color=red,shape=circle,flag=1,i=42324,u=0.7016969630728233,v=0.7355050769359464,w=0.5114210771160882,x=3.567562764483307 color=red,shape=square,flag=1,i=42330,u=0.6142088505930275,v=0.2488087445693039,w=0.5141705076112492,x=4.933548477358564 color=green,shape=square,flag=1,i=42342,u=0.35789294966397756,v=0.8703650300510167,w=0.5018347035919932,x=5.509126230497068 color=red,shape=square,flag=0,i=42350,u=0.3623009008963618,v=0.6518411581855592,w=0.520569596785157,x=6.269230702829037 color=green,shape=triangle,flag=0,i=42351,u=0.05844508921521008,v=0.7781592117631798,w=0.4818110430768114,x=7.964834790823628 color=yellow,shape=triangle,flag=1,i=42363,u=0.975387275234549,v=0.14607131683150198,w=0.5027421726947764,x=4.472918452294312 color=red,shape=triangle,flag=0,i=42379,u=0.5282407509990881,v=0.9197960692754503,w=0.5015631149952023,x=4.44603180596086 color=red,shape=circle,flag=0,i=42380,u=0.8997669834819321,v=0.9749021276369567,w=0.5107372219724358,x=4.825488009866284 color=green,shape=circle,flag=0,i=42394,u=0.10829075707431379,v=0.8195452548847731,w=0.4995022715506293,x=5.323340194644703 color=yellow,shape=square,flag=1,i=42419,u=0.5171009635983354,v=0.28899641033983037,w=0.5518763386032669,x=5.09491537089958 color=blue,shape=triangle,flag=0,i=42424,u=0.7162893401083892,v=0.8895666549128501,w=0.506362619234255,x=3.9277790101517778 color=yellow,shape=square,flag=1,i=42425,u=0.08415778887173675,v=0.9941728940685433,w=0.5499279220362472,x=5.30249618071178 color=yellow,shape=circle,flag=1,i=42433,u=0.789087683358848,v=0.13368795186008475,w=0.5044222917158122,x=6.080228577913922 color=green,shape=square,flag=0,i=42435,u=0.7049917627597331,v=0.2223930407896494,w=0.5053146309588311,x=5.519001324619848 color=red,shape=triangle,flag=0,i=42436,u=0.5185683439821897,v=0.3476523881538963,w=0.5075482605143149,x=5.201102669266679 color=yellow,shape=square,flag=1,i=42438,u=0.2170361761863001,v=0.03005445396804196,w=0.5556937343880387,x=2.7005296882404726 color=blue,shape=square,flag=1,i=42444,u=0.0865035276263465,v=0.7965071532225216,w=0.49211406753098264,x=4.452757281322867 color=green,shape=square,flag=0,i=42474,u=0.317697804001168,v=0.12752552572271403,w=0.5096292122301531,x=3.352766497042952 color=red,shape=circle,flag=0,i=42488,u=0.04304297300383053,v=0.06097411694834907,w=0.5154980384251677,x=4.503533593234685 color=red,shape=square,flag=0,i=42492,u=0.7198694290330712,v=0.8120020333622945,w=0.5066193785182714,x=5.694944969883846 color=blue,shape=square,flag=1,i=42496,u=0.5201540248376347,v=0.008429111686382051,w=0.4857916647454617,x=6.503721760550323 color=green,shape=circle,flag=0,i=42503,u=0.6757033967220526,v=0.04920503523053921,w=0.49382462826368495,x=5.709516468045661 color=red,shape=circle,flag=0,i=42510,u=0.05552434224298841,v=-0.014002814164676677,w=0.5154461470552877,x=6.334611672744182 color=red,shape=square,flag=0,i=42536,u=0.5673298724176823,v=0.8449456446431269,w=0.5067106788803608,x=4.900193295727598 color=red,shape=circle,flag=0,i=42552,u=0.8627770030241487,v=0.9430587269337052,w=0.5178492838837069,x=3.324773381565701 color=green,shape=square,flag=1,i=42556,u=0.5239969477822893,v=0.9754006365455012,w=0.5070579643594629,x=4.792201054634316 color=yellow,shape=square,flag=1,i=42565,u=0.8381155409838698,v=0.6560979478411256,w=0.5462285870559421,x=5.388218829027803 color=red,shape=circle,flag=0,i=42583,u=0.7059701122499131,v=0.6905088822827575,w=0.5152096889465899,x=6.5702327462383545 color=green,shape=circle,flag=0,i=42586,u=0.13597642818490763,v=0.008933755124756804,w=0.49884502922217605,x=5.321530606656419 color=yellow,shape=triangle,flag=0,i=42598,u=0.909003968499731,v=0.36227466045002754,w=0.49573016749337484,x=5.249535033378173 color=red,shape=triangle,flag=1,i=42604,u=0.7792729942102359,v=0.5053521848217665,w=0.5177893843145196,x=4.20792721829513 color=purple,shape=square,flag=0,i=42629,u=0.11833542451635248,v=0.7459885164135419,w=0.5051044639181268,x=5.595193816324342 color=blue,shape=circle,flag=0,i=42652,u=0.5036417020163063,v=0.20742157039852327,w=0.5302493538504605,x=4.457831081348835 color=red,shape=triangle,flag=1,i=42658,u=0.23304428739391048,v=0.010965450734547577,w=0.4903460167419052,x=4.705190621096396 color=red,shape=square,flag=0,i=42670,u=0.03981467696482632,v=0.19104720744757553,w=0.5031291051859914,x=4.705398588439117 color=blue,shape=triangle,flag=0,i=42672,u=0.2987122930310858,v=0.6949354506374711,w=0.5035787856259482,x=5.952352512636865 color=red,shape=square,flag=0,i=42690,u=0.07266307733882327,v=0.2745772820062482,w=0.49472352156758226,x=5.4950080494755404 color=red,shape=triangle,flag=0,i=42702,u=0.9073085809127872,v=0.2691902927780708,w=0.4946481874826101,x=5.2705055027985965 color=yellow,shape=circle,flag=1,i=42718,u=0.1284264192876422,v=0.5459402133636392,w=0.51100512699488,x=4.664695906856372 color=red,shape=circle,flag=0,i=42719,u=0.6132150311583803,v=0.5181246526847756,w=0.5228090571339126,x=5.384797895223571 color=purple,shape=circle,flag=0,i=42731,u=0.04326235111608934,v=0.6137422304173564,w=0.5048613478323388,x=6.540953126440567 color=red,shape=square,flag=1,i=42737,u=0.3345546824736423,v=0.7467622343574337,w=0.503608741902435,x=4.151938801502289 color=yellow,shape=square,flag=1,i=42754,u=0.022251531250828016,v=0.7806857442870315,w=0.5257402077720859,x=4.495234036224201 color=red,shape=square,flag=1,i=42756,u=0.4124501538304661,v=0.18337187519521858,w=0.49905923374347805,x=6.2193184717717545 color=red,shape=square,flag=0,i=42761,u=0.8463971868962755,v=0.4296289814593989,w=0.5001322843586747,x=5.228576020499294 color=purple,shape=triangle,flag=0,i=42763,u=0.7460751865123395,v=0.10709331520471066,w=0.5121074977443849,x=5.787749979879276 color=blue,shape=triangle,flag=1,i=42772,u=0.5936766343695294,v=0.906561121575526,w=0.5024528115467312,x=5.485568362223617 color=red,shape=square,flag=0,i=42792,u=0.6479552291518469,v=0.9890931501309627,w=0.4961342765882706,x=3.2400934460174944 color=red,shape=triangle,flag=1,i=42796,u=0.8255870170713169,v=0.6390300635867779,w=0.4995129376520485,x=5.68537479530974 color=blue,shape=circle,flag=1,i=42806,u=0.37736665072404263,v=0.039952365664955525,w=0.5370182006037794,x=6.050619889744202 color=red,shape=triangle,flag=0,i=42807,u=0.9159761208187744,v=0.9124000608215797,w=0.49887396133292944,x=4.082600076653383 color=blue,shape=triangle,flag=1,i=42814,u=0.47371048450981046,v=0.464403691924149,w=0.5110519097818691,x=3.1101925706600686 color=red,shape=triangle,flag=0,i=42824,u=0.7014228219301875,v=0.3441988119217,w=0.4964425168114189,x=3.3533613074818014 color=red,shape=triangle,flag=0,i=42829,u=0.9718156174444482,v=0.5701224534271866,w=0.49256474394053706,x=5.066201152447089 color=purple,shape=circle,flag=0,i=42836,u=0.09937685038703636,v=0.3417556566201373,w=0.5007171538088067,x=5.002896674672233 color=red,shape=square,flag=0,i=42843,u=0.7970969450505384,v=0.733100502812636,w=0.5026814529243655,x=5.54112572883582 color=blue,shape=triangle,flag=0,i=42845,u=0.6744808210268944,v=0.7889115724226872,w=0.5125209283952054,x=6.043335262375385 color=yellow,shape=square,flag=1,i=42854,u=0.30222772430360934,v=0.8193371200452921,w=0.5264809712388231,x=3.6019393748313533 color=yellow,shape=circle,flag=1,i=42899,u=0.7825638143960766,v=0.5153973349679857,w=0.5099924176581272,x=1.7691333573128656 color=purple,shape=triangle,flag=0,i=42900,u=0.34544132963111296,v=0.7351768724791737,w=0.516248955752243,x=3.130958980504314 color=green,shape=square,flag=0,i=42914,u=0.07732321450352886,v=0.5272848627168378,w=0.5013575205383178,x=6.720445838138212 color=green,shape=square,flag=0,i=42915,u=0.5020151016389706,v=0.5933915790046229,w=0.5043433998034534,x=4.4445152100011205 color=purple,shape=square,flag=0,i=42935,u=0.7705950515127238,v=0.15045227422756768,w=0.5079471116795059,x=3.195754737220289 color=red,shape=triangle,flag=0,i=42941,u=0.6321089328055236,v=0.4891740494631376,w=0.49809774078676705,x=4.302372998211033 color=red,shape=circle,flag=0,i=42950,u=0.5777357402100951,v=0.6179036911309645,w=0.5211491513146331,x=3.8952935315000112 color=green,shape=square,flag=1,i=42955,u=0.9999361779701204,v=0.1740186045369594,w=0.5122252746891209,x=3.508542308929412 color=green,shape=square,flag=0,i=42960,u=0.6296248667300545,v=0.06596337908912542,w=0.5149911452292064,x=5.321186164154646 color=purple,shape=square,flag=0,i=42964,u=0.5442543466949902,v=0.4833185612469808,w=0.5086589281294314,x=6.402489243844781 color=green,shape=triangle,flag=0,i=42975,u=0.8725372428037554,v=0.7805882819676262,w=0.4894450712255514,x=6.702477889769 color=red,shape=circle,flag=1,i=43000,u=0.24548714093928314,v=0.27547871426849185,w=0.5148379381705622,x=7.715087543236476 color=blue,shape=triangle,flag=0,i=43016,u=0.4583188188700552,v=0.923199871892756,w=0.5078088257113533,x=6.54443961118649 color=red,shape=triangle,flag=1,i=43018,u=0.7585985137511034,v=0.8950932595678361,w=0.5091018110425221,x=6.221675345334963 color=red,shape=square,flag=0,i=43030,u=0.06755819582194833,v=0.3007328200785029,w=0.4975973946247765,x=7.349860128935579 color=yellow,shape=triangle,flag=1,i=43043,u=0.48554744093841185,v=0.00928978343668263,w=0.5015183526199568,x=5.159322499162008 color=green,shape=circle,flag=0,i=43059,u=0.6685260928461136,v=0.7899163841948899,w=0.4956082348335964,x=6.241982624232588 color=purple,shape=circle,flag=0,i=43087,u=0.7126589004431414,v=0.9680582347661287,w=0.5034189303688038,x=2.480455836223791 color=red,shape=triangle,flag=1,i=43099,u=0.6188493831269095,v=0.6339438957021969,w=0.5115982653763845,x=2.340101421257748 color=red,shape=square,flag=0,i=43110,u=0.09874167367643705,v=0.48227211011885185,w=0.489090899530579,x=5.964936731083792 color=blue,shape=square,flag=0,i=43118,u=0.375533264014133,v=0.2524577903935834,w=0.5051295964731044,x=5.567730145109398 color=orange,shape=circle,flag=0,i=43119,u=0.2174777185936042,v=0.8786011677515203,w=0.5285638211878175,x=5.908393426445126 color=yellow,shape=circle,flag=1,i=43157,u=0.443829852552612,v=0.6859520889788074,w=0.5072978518951282,x=3.439137501119236 color=yellow,shape=circle,flag=1,i=43173,u=0.08245514628573791,v=0.7225877836250619,w=0.511052252776385,x=4.475092158137214 color=red,shape=square,flag=1,i=43187,u=0.6304046103545793,v=0.4370657018856887,w=0.48501649764297255,x=4.8811222636758025 color=purple,shape=square,flag=0,i=43205,u=0.5574418043111553,v=0.3245319104461557,w=0.4993988729853276,x=4.7902909105952345 color=green,shape=triangle,flag=1,i=43217,u=0.3396181693979178,v=0.49709357064701054,w=0.486448718696245,x=5.965996547883935 color=red,shape=triangle,flag=0,i=43230,u=0.3658430788155381,v=0.69999635639543,w=0.5090322588349434,x=4.072571405459782 color=red,shape=square,flag=1,i=43260,u=0.5551153411161501,v=0.986313668069793,w=0.49089025823823934,x=4.499275917557866 color=purple,shape=triangle,flag=0,i=43283,u=0.6243454529276911,v=0.013941953703447307,w=0.5055044931746869,x=6.752169392747628 color=blue,shape=square,flag=0,i=43291,u=0.19570206046322391,v=0.3243697139214208,w=0.5211419644940537,x=6.083066966868021 color=red,shape=square,flag=0,i=43299,u=0.28497844298599617,v=0.23594270054654964,w=0.4881248108616436,x=6.633998830778498 color=blue,shape=square,flag=1,i=43324,u=0.21265392007539652,v=0.11275837980087833,w=0.5202841202835982,x=4.487841095174716 color=green,shape=square,flag=0,i=43342,u=0.2855734704668428,v=0.7629036434961336,w=0.5330877132313677,x=3.399003458023499 color=purple,shape=square,flag=0,i=43352,u=0.03279630420385571,v=0.4253361333717529,w=0.4915264259517934,x=6.0757535526368 color=red,shape=triangle,flag=1,i=43369,u=0.21453609862365663,v=0.09654734427519795,w=0.5160653251927467,x=7.5220416325811215 color=red,shape=square,flag=1,i=43370,u=0.7788261941016054,v=0.11193394866730921,w=0.49069095387247047,x=2.964857188511713 color=red,shape=square,flag=1,i=43391,u=0.21276224882942307,v=0.8434894350978464,w=0.49924021433304683,x=4.1033854776421315 color=red,shape=triangle,flag=1,i=43398,u=0.057789855402812895,v=0.38681417996008827,w=0.5203287489629718,x=5.181712983035236 color=red,shape=triangle,flag=0,i=43399,u=0.6016936536512857,v=0.7947774880543197,w=0.5205564575623793,x=6.802486523060771 color=yellow,shape=square,flag=1,i=43405,u=0.17099094033580542,v=0.11783126262287535,w=0.5126831590242893,x=4.612637315365357 color=yellow,shape=square,flag=1,i=43409,u=0.6109987340035941,v=0.5389870546151903,w=0.5106363576158865,x=5.823334546899578 color=green,shape=circle,flag=1,i=43413,u=0.2464271224405592,v=0.5190300049522176,w=0.4886719958545684,x=5.513482563991414 color=green,shape=triangle,flag=1,i=43422,u=0.05560941293547561,v=0.7563505478151175,w=0.4883312298107751,x=4.285572423716245 color=red,shape=square,flag=0,i=43428,u=0.40048148673061734,v=0.02427467707505393,w=0.49634154357136356,x=3.8658492203827923 color=green,shape=square,flag=1,i=43440,u=0.4865996275601915,v=0.253335622085325,w=0.5282102705122441,x=5.74439352175034 color=red,shape=triangle,flag=0,i=43441,u=0.10947260546641757,v=0.3824336220967226,w=0.5293630557643787,x=4.3698131102209 color=purple,shape=triangle,flag=0,i=43445,u=0.1831057652639978,v=0.20996065131648944,w=0.5075695137803501,x=7.202913231742464 color=yellow,shape=square,flag=1,i=43468,u=0.4940864913496311,v=0.14604766440206818,w=0.5174455710929828,x=2.3542807923551377 color=red,shape=square,flag=1,i=43470,u=0.269540599587923,v=0.5448965124859114,w=0.49282210092251383,x=5.537091943390234 color=yellow,shape=circle,flag=1,i=43475,u=0.9159790379726092,v=0.37523795421438744,w=0.524319175230883,x=4.267359989715481 color=red,shape=triangle,flag=0,i=43478,u=0.3686506265463694,v=0.5668733945095445,w=0.5321224133202799,x=5.0080222415824975 color=red,shape=square,flag=0,i=43485,u=0.10450691071498597,v=0.7728890236460418,w=0.49325301834616636,x=4.091809742605316 color=yellow,shape=triangle,flag=1,i=43488,u=0.722302011195158,v=0.331032286474518,w=0.5194704870129169,x=4.349261596403674 color=red,shape=triangle,flag=1,i=43503,u=0.16436080173867562,v=0.3096968203615481,w=0.5224236863738517,x=4.952048077307234 color=blue,shape=circle,flag=0,i=43512,u=0.3256066078530232,v=0.9261831505485677,w=0.5413039843095864,x=6.837155921143882 color=red,shape=circle,flag=0,i=43517,u=0.26785192844622885,v=0.29202398791511974,w=0.5101730373631388,x=5.280859188628382 color=blue,shape=circle,flag=1,i=43520,u=0.664222767046329,v=0.3949386668630649,w=0.5408299529686497,x=2.6598816707652935 color=purple,shape=circle,flag=0,i=43524,u=0.052333802258738515,v=0.046906736262193216,w=0.4884477312907292,x=3.9584894405872384 color=yellow,shape=square,flag=1,i=43528,u=0.6060689964742009,v=0.8196299647976067,w=0.5140253089594942,x=4.281993627549725 color=purple,shape=square,flag=0,i=43534,u=0.6133972331910711,v=0.021598151701481716,w=0.5031963010702043,x=2.4477506978773564 color=green,shape=circle,flag=0,i=43546,u=0.7295203740570595,v=0.7614624369012326,w=0.48338079265400624,x=6.482068009908247 color=yellow,shape=circle,flag=1,i=43552,u=0.11427225576595679,v=0.12046847790249071,w=0.5300989056202788,x=4.0435713310099715 color=red,shape=square,flag=0,i=43585,u=0.2569282143086494,v=0.8356955248973711,w=0.49988988227987496,x=5.758029889276149 color=red,shape=square,flag=0,i=43610,u=0.4066651579035613,v=0.9821252098088572,w=0.4971325892932626,x=3.8355844366644285 color=blue,shape=circle,flag=0,i=43625,u=0.25813215119938915,v=0.44812223117479943,w=0.5468063458142752,x=2.071753655903521 color=blue,shape=square,flag=0,i=43643,u=0.8990438947452044,v=0.7932354106497107,w=0.478281459440448,x=5.309069073068615 color=green,shape=square,flag=0,i=43654,u=0.7477088100417613,v=0.6741243723476034,w=0.5244962909214225,x=2.7085672551848745 color=red,shape=triangle,flag=0,i=43669,u=0.16739577193567756,v=0.7848173059476037,w=0.5387387788747922,x=3.3126789418956775 color=red,shape=square,flag=1,i=43676,u=0.12117516414786389,v=0.2360233631803369,w=0.4927785293749649,x=4.201575280207279 color=blue,shape=circle,flag=0,i=43677,u=0.9194345322835871,v=0.18270434299753824,w=0.5480053700986861,x=4.197437995599496 color=blue,shape=triangle,flag=1,i=43692,u=0.7918251417402319,v=0.9985440814769564,w=0.5153980684316232,x=4.076983037941575 color=red,shape=circle,flag=1,i=43712,u=0.21906571058540392,v=0.1776774746383532,w=0.5221753029891931,x=6.040025216206015 color=red,shape=triangle,flag=0,i=43713,u=0.9253279125896651,v=0.22517805432802462,w=0.5283695741538778,x=3.8790026347750497 color=green,shape=square,flag=0,i=43714,u=0.7317008955916852,v=0.689787084674138,w=0.5169706828448152,x=5.4379745180684305 color=red,shape=triangle,flag=1,i=43738,u=0.3299945615037232,v=0.8872983606718703,w=0.5203576185354666,x=6.034626076559896 color=blue,shape=square,flag=0,i=43739,u=0.14780028281573,v=0.27491866587876024,w=0.47443949836759736,x=4.870244417503868 color=purple,shape=circle,flag=0,i=43762,u=0.17936303377288854,v=0.1436998550948676,w=0.48755600944216687,x=3.663137378160956 color=red,shape=square,flag=1,i=43764,u=0.09472711154976643,v=0.07947471553826624,w=0.5151653874708529,x=6.038494901522024 color=red,shape=triangle,flag=0,i=43775,u=0.058055975409571414,v=0.9983985077857104,w=0.5225126018826308,x=5.25940132628363 color=green,shape=triangle,flag=0,i=43776,u=0.8234163326320727,v=0.4287532297801402,w=0.4634462697525716,x=7.350481789269177 color=blue,shape=square,flag=0,i=43792,u=0.311214771225637,v=0.02107475184991836,w=0.47102739175469466,x=5.228169691312015 color=purple,shape=square,flag=0,i=43793,u=0.4178057527277276,v=0.7267418213089127,w=0.48635754559521877,x=5.562730898972807 color=blue,shape=square,flag=0,i=43813,u=0.4340500185082796,v=0.5600062577845731,w=0.4691320375662904,x=4.60105608981731 color=blue,shape=triangle,flag=1,i=43817,u=0.3880227798134268,v=0.15106213659034995,w=0.5189008882115655,x=3.92126341719537 color=purple,shape=square,flag=0,i=43826,u=0.3208522998794402,v=0.6024271158202898,w=0.4876176838995849,x=5.172424232628977 color=purple,shape=triangle,flag=0,i=43827,u=0.7368537409381595,v=0.24481331432747888,w=0.5120765560164056,x=5.5720435534912065 color=green,shape=square,flag=0,i=43837,u=0.3179061411787266,v=0.4929006814215642,w=0.5221893060928178,x=5.766094654781486 color=yellow,shape=triangle,flag=1,i=43840,u=0.9957624841248772,v=0.19989853802903979,w=0.5254515915885394,x=4.250999465020429 color=red,shape=square,flag=0,i=43848,u=0.8185568465311813,v=0.980985487530177,w=0.5164551481216141,x=3.7970403802077013 color=purple,shape=circle,flag=0,i=43855,u=0.23981274115974716,v=0.3599397660674801,w=0.48795907681975387,x=6.031291187545109 color=red,shape=triangle,flag=0,i=43880,u=0.6113618174906779,v=0.33657526355508605,w=0.5188482545853158,x=5.956198917780778 color=yellow,shape=square,flag=1,i=43884,u=0.43582170157434985,v=0.19905567878401975,w=0.5184715360454498,x=6.16835431728062 color=blue,shape=circle,flag=1,i=43885,u=0.22252270157150522,v=0.5302693249479362,w=0.5383136678634378,x=4.207656833298322 color=purple,shape=circle,flag=0,i=43887,u=0.1509900370436299,v=0.1678352120633062,w=0.49264854335407765,x=3.2513583593560096 color=yellow,shape=triangle,flag=1,i=43889,u=0.22433523884019957,v=0.10069412898125463,w=0.519623353752461,x=4.816280759718293 color=red,shape=circle,flag=0,i=43896,u=0.24232911273806235,v=0.1540012608889147,w=0.5250532861788867,x=4.21436664653267 color=yellow,shape=circle,flag=1,i=43920,u=0.959586012999079,v=0.6159726932360294,w=0.5417432523021469,x=5.3879090971619705 color=red,shape=square,flag=0,i=43924,u=0.5261377191454589,v=0.5369543069604715,w=0.5009948314214691,x=4.692850087583764 color=red,shape=square,flag=0,i=43926,u=0.21518247740388474,v=0.769381146325305,w=0.5031148812119657,x=4.7969709781084715 color=red,shape=circle,flag=0,i=43944,u=0.22727336629829564,v=0.2278034519943851,w=0.5263233877133829,x=6.441483382443116 color=red,shape=circle,flag=0,i=43950,u=0.14663023492980587,v=0.08575644111019984,w=0.5289998568347268,x=5.263940163320825 color=red,shape=square,flag=0,i=43955,u=0.5980035085951542,v=0.8188135506007557,w=0.5027243827823769,x=5.077626097902214 color=blue,shape=square,flag=1,i=43973,u=0.7998007760559414,v=0.48489428203215756,w=0.46860017547310107,x=5.666085785503477 color=green,shape=square,flag=0,i=43984,u=0.3290523041564759,v=0.4725386783499458,w=0.5143102645987679,x=3.3311889694198515 color=red,shape=circle,flag=0,i=43985,u=0.24955223690952666,v=0.2795037136983582,w=0.5335114153384782,x=5.739299320684356 color=green,shape=triangle,flag=0,i=43989,u=0.8668030782212506,v=0.8277101521033546,w=0.464487421690664,x=5.485884144057658 color=red,shape=triangle,flag=1,i=43991,u=0.5740800375972737,v=0.17376072787838903,w=0.5276546779207952,x=5.852438211575425 color=green,shape=circle,flag=0,i=44008,u=0.3411172798153771,v=0.9730140099804664,w=0.5120873063388043,x=3.7628249219959984 color=red,shape=square,flag=0,i=44040,u=0.15125408828859999,v=0.855852819576754,w=0.4709566216015036,x=5.633358901100782 color=red,shape=circle,flag=0,i=44044,u=0.2122875847334743,v=0.29920367143837723,w=0.5267012942189114,x=4.141742693628934 color=yellow,shape=triangle,flag=1,i=44052,u=0.9197673005755368,v=0.9903860499594775,w=0.5221330145104475,x=5.264595956426461 color=green,shape=triangle,flag=1,i=44070,u=0.46015174216033383,v=0.7864259897436401,w=0.4661422429080584,x=4.000848835103448 color=red,shape=square,flag=0,i=44077,u=0.28309021515022303,v=0.44095392917397835,w=0.4760124800701126,x=5.146890721598369 color=blue,shape=circle,flag=0,i=44078,u=0.7262537212988904,v=0.009454147229661647,w=0.5329253232395388,x=7.119014471227797 color=orange,shape=square,flag=1,i=44101,u=0.09707919217155736,v=0.06119442269828457,w=0.5115570910791472,x=4.970416187446491 color=yellow,shape=square,flag=1,i=44107,u=0.7921432366484691,v=0.2879939326546813,w=0.5173829969361902,x=4.966238748741917 color=purple,shape=triangle,flag=0,i=44122,u=0.24515658015980557,v=0.7458623388261014,w=0.5089056150059037,x=4.005710167740754 color=blue,shape=triangle,flag=1,i=44123,u=0.37255244182543634,v=0.4661842922625885,w=0.5117032157671845,x=5.464494944873894 color=red,shape=circle,flag=1,i=44133,u=0.3128838894629171,v=0.2507526158915925,w=0.5234867057757788,x=5.090334848558721 color=red,shape=triangle,flag=0,i=44178,u=0.9472068592621746,v=0.9004707124866083,w=0.5282594020561011,x=6.940393571300796 color=red,shape=circle,flag=0,i=44192,u=0.553522123705715,v=0.4757932194359984,w=0.5183056079562443,x=5.265288955854104 color=green,shape=square,flag=0,i=44215,u=0.23803052733996388,v=0.31886085535855424,w=0.4858553372710511,x=4.037327637892786 color=purple,shape=square,flag=0,i=44220,u=0.8310620088678032,v=0.8002604338765056,w=0.5011875570174721,x=5.606741438839616 color=blue,shape=circle,flag=1,i=44224,u=0.8959460851903286,v=0.9101141138264954,w=0.5325983322620735,x=5.561768665497113 color=red,shape=circle,flag=1,i=44233,u=0.7561612376678916,v=0.7319007512574625,w=0.5265758235617998,x=3.0859138544839158 color=green,shape=triangle,flag=0,i=44256,u=0.8816500699096232,v=0.11597815421053359,w=0.46795557880044064,x=5.341317078444804 color=blue,shape=square,flag=0,i=44285,u=0.5330166763628916,v=0.22155951925639394,w=0.4733414630845997,x=4.225798186511307 color=yellow,shape=circle,flag=1,i=44308,u=0.5055612332304337,v=0.7148802174379841,w=0.5305230755024368,x=3.8124055750730625 color=blue,shape=square,flag=0,i=44314,u=0.10451706428413021,v=0.28791827095029365,w=0.47667793795343166,x=5.635233046020487 color=red,shape=square,flag=0,i=44327,u=0.5191891059195163,v=0.7621392226051875,w=0.48239674973933916,x=4.992093323347892 color=green,shape=triangle,flag=1,i=44338,u=0.5194168874962816,v=0.6178439837946711,w=0.459980457165933,x=4.412632675932382 color=blue,shape=square,flag=1,i=44344,u=0.8759146828188182,v=0.4941540313853715,w=0.48344527618670596,x=6.610840828068064 color=yellow,shape=circle,flag=1,i=44345,u=0.8809150845492812,v=0.39249131279324656,w=0.5311835451023484,x=3.7856582081391257 color=red,shape=circle,flag=0,i=44375,u=0.8021276509013373,v=0.7573027582660581,w=0.518636305855153,x=3.5597809758185637 color=red,shape=square,flag=0,i=44377,u=0.4787161503774482,v=0.44449729493545076,w=0.493148755903377,x=6.004312971559493 color=blue,shape=square,flag=1,i=44391,u=0.004118706243226522,v=0.02513800294555546,w=0.4894725345334817,x=4.856908050965396 color=orange,shape=circle,flag=0,i=44392,u=0.2742200716671289,v=0.6328099318331863,w=0.518605025877578,x=5.945956069870239 color=orange,shape=circle,flag=1,i=44395,u=0.3284172795899255,v=0.4899180226956167,w=0.519783822356765,x=4.5617227268033576 color=red,shape=square,flag=0,i=44396,u=0.32009268523941015,v=0.3814163904037119,w=0.4908694830921067,x=4.611924787845079 color=red,shape=triangle,flag=0,i=44438,u=0.24027257183837814,v=0.21818158482375527,w=0.5132458986916885,x=4.3591820550187395 color=red,shape=square,flag=1,i=44444,u=0.7571303069622878,v=0.3517997580679546,w=0.4874351362441344,x=4.857781650917474 color=yellow,shape=circle,flag=1,i=44454,u=0.6319772746950029,v=0.6430990365761307,w=0.5233896886414907,x=3.87082362282355 color=purple,shape=square,flag=0,i=44467,u=0.026836543269280422,v=0.7893267098230756,w=0.495334904743655,x=3.7770625386085506 color=red,shape=square,flag=0,i=44500,u=0.06563573510369158,v=0.2484899718074014,w=0.49634022267762407,x=4.85578441358611 color=red,shape=square,flag=0,i=44506,u=0.7506982661163093,v=0.9296261595719112,w=0.491456898126784,x=5.711361713133169 color=blue,shape=square,flag=1,i=44507,u=0.8526918346098192,v=0.006090631709906091,w=0.485245940378111,x=5.480425823297286 color=blue,shape=circle,flag=0,i=44511,u=0.17556779407921252,v=0.8544916101479395,w=0.5248266370320656,x=4.591712339305005 color=yellow,shape=square,flag=1,i=44525,u=0.6138055226175024,v=0.2518408899858746,w=0.5202899004327896,x=5.068783420458643 color=blue,shape=circle,flag=0,i=44526,u=0.32842430586019467,v=0.49808305418701226,w=0.5247939727367301,x=5.185844779531198 color=red,shape=circle,flag=1,i=44566,u=0.7562262035901754,v=0.6997822237419802,w=0.5280998430297158,x=3.0998295171443986 color=red,shape=square,flag=0,i=44568,u=0.20670391642095465,v=0.1240047571423365,w=0.475555549283771,x=5.6103992702153755 color=red,shape=circle,flag=0,i=44583,u=0.7438403991426628,v=0.7267588754181725,w=0.5274991530869191,x=4.628048673728366 color=red,shape=square,flag=0,i=44585,u=0.6636353241567207,v=0.28128898438023553,w=0.4806459917753007,x=5.588665257037561 color=red,shape=circle,flag=1,i=44588,u=0.07016479646839524,v=0.015863532280976873,w=0.5221312273135886,x=4.791019138048099 color=red,shape=triangle,flag=0,i=44594,u=0.9567737501912198,v=0.980436914124649,w=0.49587813963819216,x=2.4907338638786114 color=orange,shape=square,flag=1,i=44625,u=0.48830064593906375,v=0.2993852388787641,w=0.509927679394459,x=2.8454961409041584 color=blue,shape=circle,flag=1,i=44630,u=0.42558802690355557,v=0.9393782393189878,w=0.52115813084553,x=4.938382049792471 color=yellow,shape=triangle,flag=1,i=44632,u=0.6395688201639387,v=0.7843029303915384,w=0.5313066272788163,x=5.730611522272919 color=red,shape=circle,flag=1,i=44634,u=0.36790591261093386,v=0.33705188498522076,w=0.5154340522183124,x=4.721844087566265 color=red,shape=square,flag=0,i=44649,u=0.0456118055634096,v=0.2042686380129506,w=0.47505074609138426,x=7.512377938810837 color=red,shape=circle,flag=0,i=44655,u=0.3579242999769078,v=0.2777509205825483,w=0.5205527196274308,x=5.663197859271363 color=blue,shape=square,flag=1,i=44663,u=0.6288702108731512,v=0.8910028672750042,w=0.48877388218574824,x=6.404309758663504 color=yellow,shape=square,flag=1,i=44664,u=0.10269788103089272,v=0.7923037298789898,w=0.5178956397322221,x=4.674234728629004 color=green,shape=triangle,flag=1,i=44665,u=0.9320728801982129,v=0.6636949374775633,w=0.47807593928535586,x=5.030582498624928 color=green,shape=square,flag=0,i=44685,u=0.5705052364288866,v=0.5423147982199279,w=0.5007490792280032,x=4.999141534061898 color=red,shape=square,flag=0,i=44686,u=0.4834685687045257,v=0.4548189570417823,w=0.4738343189308736,x=3.9379547987633785 color=yellow,shape=square,flag=1,i=44688,u=0.9549118451890415,v=0.9651575275886732,w=0.5135915510756244,x=6.291247850816909 color=yellow,shape=square,flag=1,i=44690,u=0.08960186475911591,v=0.7684575550314768,w=0.5139196703212905,x=5.341828374514144 color=green,shape=circle,flag=0,i=44694,u=0.619023283596957,v=0.3523073846645306,w=0.49174690296899976,x=4.77248127957025 color=yellow,shape=circle,flag=1,i=44714,u=0.2855480023002085,v=0.7450927731261932,w=0.5235022102880714,x=4.854784657440374 color=yellow,shape=circle,flag=1,i=44721,u=0.36778939287893353,v=0.2908808967359484,w=0.5248896981033209,x=6.583085414673263 color=red,shape=square,flag=0,i=44728,u=0.3696571044240461,v=0.47309836773508906,w=0.46826596740550164,x=6.743447125253634 color=yellow,shape=circle,flag=1,i=44744,u=0.9965576878403373,v=0.6109026547640025,w=0.5201658756555807,x=5.402179928596834 color=green,shape=triangle,flag=0,i=44773,u=0.35547899511722536,v=0.7704676786133092,w=0.4779667394153248,x=3.600543562246269 color=orange,shape=square,flag=0,i=44780,u=0.6765285593597932,v=0.1795856137383327,w=0.5110740821608745,x=4.510517502274008 color=red,shape=square,flag=1,i=44786,u=0.3209058790607138,v=0.12383583402998521,w=0.4821922856401145,x=4.546873006396432 color=blue,shape=triangle,flag=1,i=44802,u=0.6747312071584478,v=0.748625992663632,w=0.5240271715080355,x=5.2614671612861015 color=red,shape=triangle,flag=0,i=44803,u=0.6684141324998482,v=0.980704742273612,w=0.5014146429842454,x=5.372119829686997 color=purple,shape=square,flag=0,i=44810,u=0.9602860904337266,v=0.5458529483448885,w=0.4981028471007708,x=4.523468619140365 color=purple,shape=square,flag=0,i=44813,u=0.1721121032489782,v=0.06457716080047782,w=0.49485254164530884,x=5.212920559678786 color=yellow,shape=circle,flag=1,i=44818,u=0.13594006155726335,v=0.3790972579153782,w=0.5199885303112306,x=5.894693684111605 color=yellow,shape=triangle,flag=1,i=44834,u=0.10067618509380372,v=0.057919248569549,w=0.528807868107254,x=5.868977578493424 color=orange,shape=square,flag=1,i=44850,u=0.45399035205866234,v=0.8699876442896479,w=0.5145405641008581,x=4.9571900749992786 color=green,shape=triangle,flag=0,i=44858,u=0.9533590202309037,v=0.6531161401303006,w=0.47189450929094956,x=7.207353683199297 color=purple,shape=circle,flag=0,i=44860,u=0.9089099522101729,v=0.1052946245683678,w=0.5115842828177806,x=5.214853370398667 color=blue,shape=square,flag=1,i=44871,u=0.9995668390492636,v=0.4896572935308351,w=0.49350571249709796,x=5.3520690412975895 color=red,shape=circle,flag=0,i=44887,u=0.6578724337813551,v=0.6111820141418478,w=0.534496219521755,x=5.164843374119267 color=purple,shape=triangle,flag=1,i=44892,u=0.5645685107320864,v=0.6837227057123966,w=0.49626378588808984,x=6.466217097614532 color=red,shape=circle,flag=1,i=44893,u=0.07187286885052446,v=0.1653798395372183,w=0.5295534429482346,x=5.572032290963382 color=purple,shape=triangle,flag=0,i=44926,u=0.15722126805610137,v=0.1930311611998542,w=0.49228549443138814,x=4.608652529108745 color=red,shape=square,flag=0,i=44931,u=0.9992587134757783,v=0.25573645017899804,w=0.5028010910605972,x=4.870966330534756 color=red,shape=triangle,flag=0,i=44953,u=0.14261151438999453,v=0.974093920448945,w=0.5130076698647157,x=3.4742334364745573 color=purple,shape=triangle,flag=1,i=44970,u=0.12045875072155343,v=0.39778838343457,w=0.48870706279164017,x=5.163100339971365 color=blue,shape=square,flag=1,i=44971,u=0.7231465031324505,v=0.6426639050871611,w=0.5038035886995131,x=3.5812658871448186 color=blue,shape=triangle,flag=0,i=44972,u=0.5743885455381894,v=0.9015137740404365,w=0.5071523917818452,x=4.392104656872195 color=purple,shape=circle,flag=0,i=44980,u=0.0074105523414979,v=0.32140481843670354,w=0.5190865525638839,x=6.225849181673335 color=red,shape=triangle,flag=0,i=44990,u=0.45766025182867676,v=0.8922138791942553,w=0.526754944791934,x=4.076778039864557 color=red,shape=square,flag=0,i=45001,u=0.10029034484319854,v=0.21163060873318396,w=0.5035379821144141,x=7.3156656190152916 color=yellow,shape=square,flag=1,i=45006,u=0.5207334994132492,v=0.37083753519747875,w=0.5198342428223057,x=6.643362495480676 color=red,shape=triangle,flag=1,i=45017,u=0.3073491294273848,v=0.9642110929779293,w=0.5147568136313735,x=5.844190630797287 color=blue,shape=triangle,flag=1,i=45036,u=0.8703150078913209,v=0.9858732213750153,w=0.5090044202649895,x=5.444867667791815 color=yellow,shape=triangle,flag=1,i=45045,u=0.4308348851069683,v=0.8677031719818539,w=0.5277625058545177,x=7.056950967170884 color=blue,shape=circle,flag=1,i=45051,u=0.39595236354355856,v=0.04568653865058303,w=0.5146027583721374,x=5.158254949451661 color=red,shape=circle,flag=1,i=45057,u=0.21231142914114975,v=0.11827011540796274,w=0.5267563154507136,x=5.746953318743933 color=red,shape=triangle,flag=0,i=45073,u=0.220890926919993,v=0.6382545820361779,w=0.5137215122805884,x=6.054346454263514 color=red,shape=circle,flag=0,i=45085,u=0.10343414555356933,v=0.0854598736563924,w=0.5300173806571845,x=3.5211413915381757 color=orange,shape=square,flag=0,i=45103,u=0.5069015298753995,v=0.9865405823764551,w=0.5136088627911064,x=2.7395760893199395 color=green,shape=square,flag=1,i=45114,u=0.3710511813068966,v=0.10939008672183403,w=0.505077308978524,x=5.147776883112683 color=red,shape=circle,flag=0,i=45130,u=0.23294107329360947,v=0.14254881168157957,w=0.5211576772644613,x=7.544770757486581 color=red,shape=square,flag=1,i=45135,u=0.3285872756771737,v=0.474436698831299,w=0.5161246404740484,x=4.821317046014342 color=yellow,shape=triangle,flag=1,i=45156,u=0.11245635984984359,v=0.5462070414752629,w=0.5388022731378233,x=4.803443593518167 color=red,shape=circle,flag=0,i=45166,u=0.22483481608702138,v=0.26840902860157495,w=0.5158470239351043,x=4.353408794630831 color=blue,shape=triangle,flag=1,i=45171,u=0.5340356710976087,v=0.48580905213986625,w=0.5145988937234728,x=3.190753106200006 color=red,shape=circle,flag=0,i=45187,u=0.5218269179915481,v=0.48291141102199187,w=0.507988150814012,x=4.587852284602872 color=red,shape=triangle,flag=1,i=45200,u=0.4648785723600424,v=0.15662490716392385,w=0.502627273437666,x=5.126089774833094 color=yellow,shape=square,flag=1,i=45209,u=0.31641308456492667,v=0.41766007583201104,w=0.5156803473198549,x=4.486190964576527 color=red,shape=circle,flag=0,i=45213,u=0.9190642191601589,v=0.9249959964768593,w=0.5087206455879548,x=4.360823891813719 color=yellow,shape=circle,flag=1,i=45221,u=0.7406197210842403,v=0.797551650461032,w=0.5258520840789713,x=3.9996815312838936 color=yellow,shape=triangle,flag=1,i=45229,u=0.431785881677494,v=0.7623720784105696,w=0.5407768232109682,x=5.082742009776406 color=yellow,shape=circle,flag=1,i=45245,u=0.44370159095854655,v=0.6474270343771463,w=0.5270783585545887,x=4.916876931292912 color=blue,shape=square,flag=0,i=45264,u=0.008701117901218747,v=0.9089262580608287,w=0.5027294363670075,x=4.143508501082306 color=yellow,shape=square,flag=1,i=45266,u=0.3983240672849724,v=0.7317647492061637,w=0.5127567440121259,x=4.391866554668081 color=green,shape=triangle,flag=0,i=45267,u=0.3489922349651863,v=0.1309769729966016,w=0.48865326216766564,x=4.7341727518141585 color=red,shape=triangle,flag=0,i=45285,u=0.8529528906795177,v=0.2801201836212964,w=0.5120539688118472,x=5.4925318518139825 color=red,shape=square,flag=0,i=45295,u=0.14720808245767525,v=0.13030981307150258,w=0.5020906886514244,x=3.9605969064579374 color=red,shape=square,flag=1,i=45309,u=0.8764645684375807,v=0.01390401346575243,w=0.5042168097169483,x=7.2327564495502985 color=red,shape=circle,flag=0,i=45317,u=0.8371223163876399,v=0.8954721512674688,w=0.5118977462673061,x=3.1653446378461623 color=yellow,shape=square,flag=1,i=45333,u=0.8180300710172582,v=0.7992838268770319,w=0.5117228965198994,x=4.468813358314073 color=yellow,shape=triangle,flag=1,i=45344,u=0.8666476334611205,v=0.46834494344142696,w=0.5449812925825097,x=4.653466710193914 color=yellow,shape=circle,flag=0,i=45350,u=0.14151861441122293,v=0.8744775761628885,w=0.5434326905421337,x=4.870424755809928 color=blue,shape=triangle,flag=1,i=45351,u=0.4677081725165374,v=0.5525407044233562,w=0.5118667730089137,x=4.399699331041051 color=red,shape=square,flag=0,i=45358,u=0.14269181957750132,v=0.5528595463613156,w=0.5002238458574175,x=5.781514808117028 color=red,shape=triangle,flag=0,i=45377,u=0.18303080006452788,v=0.0058017354302783986,w=0.523422859718131,x=5.567913514190596 color=red,shape=circle,flag=0,i=45388,u=0.7345257254506266,v=0.7270179368277819,w=0.5103717529565557,x=5.834436684649049 color=red,shape=triangle,flag=0,i=45390,u=0.0011926732543450225,v=0.7367315651951601,w=0.5140608434970648,x=4.525430615794258 color=red,shape=circle,flag=0,i=45391,u=0.440836427255319,v=0.3980980657778506,w=0.5103697475822193,x=3.4113088721523446 color=red,shape=circle,flag=0,i=45396,u=0.7171493584343511,v=0.6690982478236214,w=0.5142219189214519,x=7.262984922316579 color=purple,shape=square,flag=0,i=45423,u=0.08585933998312123,v=0.18998814276855924,w=0.4863992757591215,x=4.425584886749749 color=blue,shape=triangle,flag=1,i=45431,u=0.2623059136543101,v=0.16922747555449835,w=0.5123319087703594,x=3.5678226818066983 color=blue,shape=square,flag=0,i=45484,u=0.9928718744290427,v=0.48793824130594465,w=0.4911507274128445,x=5.501928294793345 color=red,shape=circle,flag=0,i=45489,u=0.0436319444347707,v=0.00037559668726951795,w=0.5348331381916813,x=4.9904588127503695 color=red,shape=square,flag=0,i=45492,u=0.5611002805093157,v=0.445209175088075,w=0.4986559549516708,x=6.088023138558834 color=red,shape=circle,flag=1,i=45493,u=0.5928527636422501,v=0.5310546263819504,w=0.5358519083796585,x=4.899892211847459 color=yellow,shape=square,flag=1,i=45505,u=0.09791317778345843,v=0.6258372974259855,w=0.5355810783224939,x=4.878735628161608 color=green,shape=triangle,flag=0,i=45506,u=0.15860542487611384,v=0.3324888717858109,w=0.4872436692143982,x=4.933397410148279 color=blue,shape=square,flag=1,i=45513,u=0.8344454562492483,v=0.28991637424268,w=0.4930554835160037,x=6.630685398371834 color=yellow,shape=triangle,flag=1,i=45522,u=0.6960495755695266,v=0.35662949568438584,w=0.5417977413573635,x=4.993835937393338 color=green,shape=triangle,flag=0,i=45523,u=0.028726227233780266,v=0.8368987200063168,w=0.49144438317283956,x=4.91716778694866 color=red,shape=square,flag=0,i=45527,u=0.362470705664502,v=0.23288251635350998,w=0.4837192428495595,x=7.319810129361041 color=yellow,shape=triangle,flag=1,i=45541,u=0.3909461619111285,v=0.9603037348852396,w=0.5367475137335112,x=4.0747975295414625 color=yellow,shape=circle,flag=0,i=45565,u=0.49711884869257894,v=0.4063296635007877,w=0.541821282319149,x=4.321738392032457 color=red,shape=square,flag=1,i=45576,u=0.5910295406403523,v=0.5820570508367864,w=0.47872185401363015,x=6.416732335948374 color=blue,shape=circle,flag=1,i=45592,u=0.36989121704141326,v=0.4521335780997142,w=0.5116245532264182,x=3.6690127676325535 color=green,shape=square,flag=0,i=45593,u=0.07421018323124273,v=0.46250417315222725,w=0.49673545467011604,x=4.98690926513951 color=red,shape=square,flag=0,i=45595,u=0.5323677885521801,v=0.49733842971342646,w=0.4703215915790957,x=6.047016287313322 color=red,shape=circle,flag=0,i=45603,u=0.09807649946600483,v=0.0738983765849136,w=0.5272099757048196,x=5.235778755307683 color=red,shape=square,flag=1,i=45618,u=0.24282315957964595,v=0.5083741163423824,w=0.4823275084626719,x=4.9515457101449725 color=purple,shape=circle,flag=0,i=45619,u=0.320649306752549,v=0.7743856019807422,w=0.5166424857976284,x=6.792867234755408 color=red,shape=square,flag=0,i=45621,u=0.7383745629253389,v=0.5701217458562096,w=0.48157784431598083,x=4.292122708256567 color=blue,shape=triangle,flag=0,i=45635,u=0.1342696338557502,v=0.6255565877955351,w=0.505948628739885,x=3.1167301368582057 color=yellow,shape=triangle,flag=1,i=45662,u=0.9596903920589072,v=0.20890286278455095,w=0.5441530368442388,x=3.2197718265173614 color=red,shape=circle,flag=0,i=45672,u=0.9796340879843932,v=0.986480448637008,w=0.5319758182422377,x=4.3286292266413 color=red,shape=square,flag=0,i=45694,u=0.987846244876944,v=0.40707353674400504,w=0.48622715121594995,x=6.430780212787359 color=blue,shape=circle,flag=1,i=45697,u=0.4941716080492371,v=0.21045326175908352,w=0.4965027250181252,x=4.2251332758271944 color=yellow,shape=circle,flag=1,i=45700,u=0.8039432740368295,v=0.4333289174684781,w=0.5429410295464143,x=5.356049355257544 color=red,shape=square,flag=0,i=45722,u=0.29569528472445306,v=0.4214484911823976,w=0.49457823230290776,x=3.663297053844179 color=red,shape=triangle,flag=0,i=45727,u=0.5802258910642472,v=0.21105636278613848,w=0.5000166463948257,x=6.891751326191411 color=red,shape=triangle,flag=1,i=45729,u=0.7339480183316225,v=0.6604864835276257,w=0.5040423190425101,x=6.620850000868394 color=red,shape=square,flag=0,i=45752,u=0.7118992958554076,v=0.5811156591032097,w=0.4986281250416253,x=6.7767526816590475 color=red,shape=triangle,flag=1,i=45773,u=0.8841030289584918,v=0.5115932921587547,w=0.5134011019500868,x=4.998692873618105 color=purple,shape=square,flag=0,i=45774,u=0.9652743344304694,v=0.9070327064358358,w=0.4914980251629097,x=4.594248023738808 color=green,shape=square,flag=0,i=45789,u=0.993860338741655,v=0.3863846711806871,w=0.5106468829838453,x=3.4839113378701345 color=red,shape=circle,flag=0,i=45792,u=0.35788962798853874,v=0.4097501815910554,w=0.5485136576962423,x=6.919867339175146 color=yellow,shape=square,flag=1,i=45802,u=0.5078260148234183,v=0.8370292007945583,w=0.5267293179728605,x=5.240897554347324 color=yellow,shape=square,flag=1,i=45806,u=0.8472003239385223,v=0.5924479536428879,w=0.5274849365040836,x=4.649745368307674 color=red,shape=square,flag=1,i=45811,u=0.013178508944489242,v=0.5047094653724545,w=0.492524575441183,x=4.115776223728498 color=blue,shape=triangle,flag=1,i=45844,u=0.16143164451186653,v=0.24980047239449477,w=0.5163918925759441,x=5.429282303965134 color=orange,shape=square,flag=0,i=45900,u=0.9637822338407995,v=0.5231018284644444,w=0.4979551545626011,x=6.756277830301471 color=yellow,shape=square,flag=1,i=45904,u=0.2833747747934823,v=0.5376753675836141,w=0.5209102388331349,x=5.454760759531425 color=blue,shape=square,flag=0,i=45917,u=0.8511440112771441,v=0.9061136344992315,w=0.4801521277209463,x=4.48260411679007 color=yellow,shape=triangle,flag=1,i=45930,u=0.29916361695325044,v=0.9288443295649261,w=0.5431226997013537,x=5.616987212342591 color=yellow,shape=square,flag=1,i=45942,u=0.8574333219660808,v=0.5150315154654709,w=0.5193525317004768,x=5.205780956811961 color=green,shape=square,flag=0,i=45954,u=0.8276920325701533,v=0.12452654293773313,w=0.5053331285693116,x=3.7596364097908186 color=red,shape=square,flag=0,i=45960,u=0.5175434622957339,v=0.8379639703700468,w=0.507889195065473,x=3.3764141189485257 color=red,shape=square,flag=1,i=46003,u=0.6368728959804477,v=0.8926266834562082,w=0.49372893914259,x=5.230870112873864 color=red,shape=square,flag=0,i=46007,u=0.7095889763369441,v=0.9625515310526058,w=0.4972402606296109,x=6.724526949348188 color=blue,shape=triangle,flag=1,i=46024,u=0.4073120956522893,v=0.9698912133718399,w=0.5126193000247149,x=4.3408159610800405 color=red,shape=triangle,flag=0,i=46028,u=0.8846684524650361,v=0.47775334436491845,w=0.49773706374591903,x=3.6280666413795113 color=blue,shape=circle,flag=0,i=46055,u=0.7975326758590642,v=0.9196451416634517,w=0.495263239892926,x=3.5609442821157558 color=blue,shape=triangle,flag=1,i=46066,u=0.5471561931357293,v=0.09918859216347842,w=0.5085521251681956,x=8.20203872572708 color=red,shape=square,flag=0,i=46070,u=0.19240243971579907,v=0.4371017177409373,w=0.5195085119920236,x=3.9230151773397828 color=red,shape=triangle,flag=1,i=46081,u=0.9369185416860067,v=0.5901519010715599,w=0.49709603676515884,x=7.3089917028832785 color=red,shape=triangle,flag=0,i=46096,u=0.21734975243598598,v=0.6417983668578033,w=0.4930405105573353,x=6.826837459403799 color=red,shape=circle,flag=0,i=46130,u=0.37580495962606697,v=0.34301133566114617,w=0.5382518094318486,x=3.029951031097662 color=red,shape=circle,flag=1,i=46147,u=0.31235698837751125,v=0.27453736539046647,w=0.5411521130682586,x=3.1926330867391997 color=red,shape=triangle,flag=0,i=46154,u=0.20186480141864716,v=0.9720568082560206,w=0.4820419990538739,x=5.014978672294716 color=orange,shape=square,flag=1,i=46156,u=0.9493554866603044,v=0.6557118497720306,w=0.49630002152989666,x=4.70687551898535 color=yellow,shape=square,flag=1,i=46165,u=0.10451573025181304,v=0.8186215314993505,w=0.529385394822364,x=5.9327701376255355 color=red,shape=triangle,flag=0,i=46175,u=0.0682014789362606,v=0.21280202762482492,w=0.47569041097849757,x=4.610725585552525 color=red,shape=circle,flag=1,i=46188,u=0.8932859896364232,v=0.96711110915342,w=0.538656832247169,x=6.057830900285073 color=yellow,shape=square,flag=1,i=46198,u=0.36220392092927745,v=0.33583358669699814,w=0.5277859868922251,x=4.789342608170004 color=orange,shape=square,flag=1,i=46203,u=0.3439682252338231,v=0.2127262604833734,w=0.49359773227184034,x=5.784442614906929 color=red,shape=circle,flag=0,i=46210,u=0.45214634391790864,v=0.3648123201579528,w=0.5339460574984352,x=6.225920328371827 color=red,shape=circle,flag=0,i=46211,u=0.8839885326717482,v=0.8114201462773275,w=0.5286147811621462,x=5.198209243435775 color=red,shape=circle,flag=0,i=46226,u=0.7453306724355845,v=0.838808058667226,w=0.5265038117371149,x=4.246609213895595 color=red,shape=circle,flag=1,i=46234,u=0.07485087627191434,v=0.1032926259424846,w=0.5217006344754798,x=6.568839935962624 color=red,shape=circle,flag=0,i=46260,u=0.7599922991304641,v=0.6764688341560959,w=0.5234634777466669,x=5.244796316561899 color=yellow,shape=square,flag=0,i=46286,u=0.47874281763503257,v=0.3176732816778183,w=0.5230201215630013,x=6.629856645148432 color=purple,shape=square,flag=0,i=46288,u=0.12698519073184733,v=0.35205788100264856,w=0.49943691027597703,x=2.491455836861123 color=green,shape=square,flag=0,i=46289,u=0.38189833090065917,v=0.4229566494355128,w=0.5133842813534175,x=6.575277234204026 color=green,shape=square,flag=1,i=46292,u=0.7824142633222194,v=0.23009146591293173,w=0.508965414696369,x=3.771112420977745 color=green,shape=circle,flag=0,i=46306,u=0.5527630107732677,v=0.40671955338058496,w=0.5106215362988595,x=2.583959816031608 color=blue,shape=triangle,flag=1,i=46315,u=0.7245880944138003,v=0.8815411187912761,w=0.5193192268573201,x=4.7110743591170605 color=red,shape=circle,flag=0,i=46326,u=0.18518631901516835,v=0.19576651558603056,w=0.519588077699846,x=3.731996940759151 color=red,shape=square,flag=0,i=46331,u=0.7624011920122076,v=0.46950974545590196,w=0.5061554181244927,x=3.190782856635772 color=yellow,shape=circle,flag=1,i=46332,u=0.4099804092853969,v=0.6933342996241612,w=0.5548024496883684,x=5.402298994997285 color=red,shape=square,flag=1,i=46340,u=0.9544020158953853,v=0.483924102949422,w=0.5064587968063257,x=4.583924022275249 color=blue,shape=square,flag=0,i=46366,u=0.33586362388178603,v=0.43369563371293907,w=0.48094543516943067,x=7.1366620904277225 color=yellow,shape=circle,flag=1,i=46370,u=0.5130434797929835,v=0.65024334625538,w=0.5575224174831193,x=6.455492159404774 color=red,shape=circle,flag=0,i=46377,u=0.6320140373924674,v=0.5330833533595211,w=0.516867428593351,x=3.74951144436213 color=blue,shape=square,flag=0,i=46403,u=0.08322265729916467,v=0.26425191838002804,w=0.48888955728189154,x=3.9473720097346123 color=purple,shape=circle,flag=0,i=46404,u=0.6090234782866996,v=0.7001026135277432,w=0.5192966602472153,x=6.460675853622124 color=red,shape=circle,flag=0,i=46405,u=0.8244771162660871,v=0.8413514042645212,w=0.5207962044325894,x=3.4196031768594195 color=red,shape=square,flag=1,i=46407,u=0.7227584169355041,v=0.16881731256879295,w=0.4907749561317916,x=5.861970673069835 color=yellow,shape=triangle,flag=1,i=46408,u=0.6493040533623267,v=0.8401994169767789,w=0.5411352020873921,x=5.7227150751418465 color=red,shape=circle,flag=0,i=46420,u=0.47739989672422645,v=0.5216544167786235,w=0.528660721918708,x=5.566591599137276 color=red,shape=triangle,flag=0,i=46444,u=0.3577563230979893,v=0.11583709904789907,w=0.4871855940429217,x=5.271873155405054 color=yellow,shape=circle,flag=1,i=46457,u=0.8883488953241907,v=0.9129508551707828,w=0.5632938050523973,x=6.045349617286569 color=red,shape=triangle,flag=1,i=46466,u=0.29487297540900936,v=0.331972803702242,w=0.49082955801428246,x=6.870182167534151 color=blue,shape=circle,flag=0,i=46484,u=0.6995054328119791,v=0.9860819266589024,w=0.49938649158915105,x=4.144411290633849 color=red,shape=circle,flag=0,i=46488,u=0.3618559577189957,v=0.34060942084156476,w=0.5319289242148977,x=5.2542899345150085 color=red,shape=square,flag=0,i=46496,u=0.353832393958744,v=0.6707684943847947,w=0.49022094417422557,x=8.074957340314246 color=red,shape=triangle,flag=0,i=46502,u=0.16672582814841352,v=0.30648067323446815,w=0.49162485115299764,x=5.24371007841722 color=yellow,shape=circle,flag=1,i=46503,u=0.9448159797593451,v=0.1713081371340821,w=0.5620752132798074,x=4.531973046334346 color=blue,shape=triangle,flag=0,i=46513,u=0.79743578278037,v=0.16456392167276657,w=0.5138414960049742,x=5.664171127785084 color=purple,shape=triangle,flag=0,i=46515,u=0.08413793538334824,v=0.540634380103699,w=0.49386378244998147,x=6.954894581236826 color=red,shape=triangle,flag=0,i=46516,u=0.24522364774371652,v=0.2598492936505107,w=0.5011047025275889,x=7.083891385200946 color=red,shape=square,flag=0,i=46523,u=0.5934862679656275,v=0.18952844168090832,w=0.49068820402903646,x=5.115217884918773 color=blue,shape=square,flag=0,i=46526,u=0.753370385439251,v=0.3503688609910435,w=0.5000911289370165,x=3.9820500380181776 color=red,shape=circle,flag=0,i=46535,u=0.8114758209662933,v=0.8796999831036889,w=0.5238130521945566,x=5.340181402880078 color=red,shape=triangle,flag=0,i=46542,u=0.9583935780536258,v=0.4048631445115657,w=0.5005042168495568,x=5.419712202523548 color=blue,shape=square,flag=1,i=46547,u=0.9051582580631468,v=0.04438943953294161,w=0.5073988064076592,x=5.89213101038574 color=yellow,shape=circle,flag=1,i=46550,u=0.5356739092804041,v=0.13961146443267358,w=0.5593304070159836,x=5.466342135747884 color=red,shape=triangle,flag=0,i=46552,u=0.9028472567299615,v=0.8454530280611189,w=0.4996168807643213,x=4.4974549420168115 color=blue,shape=square,flag=0,i=46564,u=0.5160334223574716,v=0.0023946266563006358,w=0.5160300771932227,x=5.498406464953454 color=red,shape=triangle,flag=0,i=46580,u=0.07673636782664706,v=0.7982536179349987,w=0.48501538106572845,x=5.715335480385936 color=yellow,shape=square,flag=1,i=46601,u=0.26873096775100924,v=0.28503903348657367,w=0.525949032642645,x=5.429716705738756 color=red,shape=circle,flag=1,i=46614,u=0.7935061023857892,v=0.8361719143132195,w=0.5171550136919782,x=4.572290505656473 color=blue,shape=circle,flag=0,i=46618,u=0.8835668226666227,v=0.016239543782154642,w=0.48929064100345765,x=5.920305510030054 color=yellow,shape=square,flag=1,i=46620,u=0.4132160546802851,v=0.8735165822221441,w=0.5307585266488947,x=5.535900694529549 color=orange,shape=square,flag=0,i=46623,u=0.15407786197921036,v=0.8090674618517943,w=0.5007508980077587,x=3.5715702606520447 color=red,shape=square,flag=1,i=46629,u=0.5873323378987926,v=0.1915647703618364,w=0.48586002023725205,x=6.259105589465324 color=red,shape=triangle,flag=0,i=46632,u=0.7667546716590242,v=0.062438782532887926,w=0.48881290524462906,x=2.8667176620244477 color=purple,shape=square,flag=0,i=46633,u=0.794032810327964,v=0.6336521863502528,w=0.49823593067340505,x=2.981862945568826 color=blue,shape=circle,flag=1,i=46643,u=0.9238139432990654,v=0.8080327057089758,w=0.4929428786143888,x=4.180894290122365 color=green,shape=square,flag=0,i=46649,u=0.5433892863715665,v=0.13227472694614106,w=0.488304030493141,x=5.309734961677411 color=red,shape=square,flag=0,i=46666,u=0.22450194351401398,v=0.28648454784011335,w=0.4835254418696976,x=4.9609309010150335 color=red,shape=square,flag=1,i=46674,u=0.7027288261789671,v=0.816128180270261,w=0.48175651060847274,x=3.141949378893395 color=orange,shape=triangle,flag=0,i=46681,u=0.7708069576787248,v=0.09203676709685482,w=0.5012100263702118,x=6.498960205893897 color=red,shape=square,flag=0,i=46690,u=0.7180514052326967,v=0.6101693332816094,w=0.47942071411986864,x=5.223236710682899 color=red,shape=triangle,flag=0,i=46696,u=0.7027731323172753,v=0.17573990013385177,w=0.49934759854366717,x=5.968216164756009 color=yellow,shape=square,flag=1,i=46735,u=0.7499398624119413,v=0.684472265043443,w=0.5267408049252692,x=6.008447044231407 color=blue,shape=circle,flag=0,i=46738,u=0.8194578781259652,v=0.4789674548825732,w=0.5007236065661714,x=6.847128147406359 color=green,shape=square,flag=1,i=46741,u=0.7454021910487464,v=0.8504302160678308,w=0.5018832658371806,x=5.490400818579173 color=yellow,shape=circle,flag=1,i=46742,u=0.8923911614586726,v=0.19585347958062027,w=0.5490755587753834,x=4.883575949603913 color=red,shape=triangle,flag=0,i=46753,u=0.660969842579345,v=0.2712913961433966,w=0.4877660442676889,x=6.086473084504273 color=green,shape=circle,flag=0,i=46763,u=0.10328031304171426,v=0.791958435129027,w=0.5155468420952434,x=4.748070083377726 color=red,shape=square,flag=0,i=46766,u=0.7542937798918578,v=0.26771251517247974,w=0.4891611679957991,x=5.482268315816298 color=red,shape=square,flag=0,i=46767,u=0.25519457622631814,v=0.6209145155916119,w=0.48804806092480507,x=7.663681831035738 color=yellow,shape=triangle,flag=1,i=46815,u=0.8261702688121257,v=0.6417397171576062,w=0.5365649655692609,x=5.79497503679336 color=yellow,shape=square,flag=0,i=46858,u=0.4768098187004117,v=0.6065725565123735,w=0.5258266090028999,x=4.346599600873398 color=blue,shape=square,flag=1,i=46867,u=0.30219664549385616,v=0.6427937934434975,w=0.5090660253631316,x=2.7519410917381513 color=red,shape=square,flag=0,i=46870,u=0.3254728094068935,v=0.02521790834004045,w=0.49190811212289776,x=6.161406809024527 color=purple,shape=square,flag=0,i=46882,u=0.2885419361368933,v=0.1821784127387872,w=0.5011011056507825,x=6.596474587425309 color=purple,shape=triangle,flag=0,i=46894,u=0.7649996830318427,v=0.7057760289297997,w=0.47818491276444397,x=7.764410234493627 color=red,shape=circle,flag=1,i=46898,u=0.9173561068853706,v=0.8714539160783028,w=0.5217344831484071,x=5.983669217057653 color=purple,shape=square,flag=0,i=46899,u=0.832133970352546,v=0.5513734277901636,w=0.5026254156852757,x=4.131415702503828 color=blue,shape=triangle,flag=1,i=46918,u=0.17240803865256504,v=0.6714488880210832,w=0.5112204946266515,x=3.347056989012925 color=yellow,shape=circle,flag=1,i=46927,u=0.7631633257999872,v=0.7501666922024665,w=0.5593739992516134,x=2.4884751403765417 color=red,shape=square,flag=0,i=46934,u=0.3546037031992605,v=0.5904077190202255,w=0.5019602704950292,x=4.208827735873 color=yellow,shape=square,flag=0,i=46941,u=0.4436343054257048,v=0.44262994004598855,w=0.5286489396957849,x=5.831869786461987 color=yellow,shape=triangle,flag=1,i=46942,u=0.21767877193783636,v=0.22750832741862148,w=0.540032428858978,x=4.761954421542712 color=green,shape=square,flag=0,i=46946,u=0.7262334097102364,v=0.2353282855778408,w=0.4999245913322337,x=4.745533301778669 color=purple,shape=square,flag=0,i=46954,u=0.8186180239660209,v=0.10104364344236028,w=0.5104047484558277,x=3.9283208093090685 color=yellow,shape=triangle,flag=0,i=46963,u=0.8044380242056894,v=0.48925045393264954,w=0.5364201979495122,x=5.645636168247152 color=red,shape=square,flag=0,i=46985,u=0.06497557129893827,v=0.6991710199402009,w=0.507144569108046,x=5.677247556324136 color=green,shape=circle,flag=0,i=47029,u=0.9762921825491683,v=0.7107268626684553,w=0.5286941439319393,x=5.144456965314547 color=red,shape=circle,flag=0,i=47042,u=0.33490633893199995,v=0.3608104850818826,w=0.5205666360753458,x=7.4188199371195 color=green,shape=triangle,flag=0,i=47047,u=0.039767338119254814,v=0.46529001464307707,w=0.5185059008702475,x=5.148145249729516 color=purple,shape=triangle,flag=0,i=47075,u=0.4238377340456261,v=0.44971958577056437,w=0.48423243803313204,x=6.029563135645998 color=orange,shape=circle,flag=1,i=47092,u=0.8030671880585626,v=0.9891023960550895,w=0.5110299177240867,x=5.126979133167343 color=red,shape=circle,flag=0,i=47096,u=0.9471840359449452,v=1.032825306093868,w=0.5127214688113167,x=7.07887106904234 color=purple,shape=square,flag=0,i=47110,u=0.9245975180239253,v=0.5501934438638421,w=0.5077342321500599,x=4.756429181394977 color=red,shape=square,flag=1,i=47113,u=0.8807413193774567,v=0.3812022018313429,w=0.5028161723473694,x=6.616014823254446 color=purple,shape=circle,flag=0,i=47120,u=0.16516499233085713,v=0.7180170213039255,w=0.49334801265863043,x=7.353533367934015 color=green,shape=circle,flag=0,i=47133,u=0.8291327331666651,v=0.5404462685913383,w=0.5240367332104946,x=4.337129862861785 color=yellow,shape=square,flag=1,i=47155,u=0.1393480894867064,v=0.877654137532857,w=0.5226830661084343,x=3.262304949571476 color=red,shape=square,flag=0,i=47162,u=0.8175769322609224,v=0.546646526735896,w=0.5061686709812702,x=5.562478817447708 color=red,shape=circle,flag=0,i=47174,u=0.02593532114748942,v=0.07308388086340462,w=0.5136019938756533,x=4.369231541321697 color=red,shape=circle,flag=0,i=47183,u=0.26635567281883965,v=0.2563435326863076,w=0.5161011079146515,x=5.746347842276524 color=purple,shape=square,flag=1,i=47186,u=0.6950764409032439,v=0.5096850967074611,w=0.5075729930370032,x=2.599811429785023 color=red,shape=circle,flag=0,i=47208,u=0.9299636936493809,v=0.9971142934477801,w=0.5075293440101155,x=6.001482949241406 color=green,shape=triangle,flag=1,i=47215,u=0.19507944614347916,v=0.6522992823341746,w=0.5179612139929514,x=4.7025089827995865 color=red,shape=circle,flag=0,i=47216,u=0.14044300726542525,v=0.13484725741759343,w=0.5109732706855736,x=3.3028669887383555 color=red,shape=square,flag=0,i=47229,u=0.016232583887730856,v=0.9275553091747389,w=0.5221262900186803,x=4.627264747342033 color=red,shape=square,flag=0,i=47238,u=0.5864002275711035,v=0.7073043337719022,w=0.5136173048913757,x=5.114247824613758 color=blue,shape=square,flag=1,i=47244,u=0.4203268727093499,v=0.15741438185063883,w=0.5060829885362574,x=4.547389302114683 color=blue,shape=triangle,flag=1,i=47254,u=0.40195400941566617,v=0.012095128155866885,w=0.5071002461823524,x=6.8373947461241125 color=red,shape=square,flag=1,i=47266,u=0.6892298887239438,v=0.06749581071176824,w=0.5134438523168204,x=5.846820804341373 color=purple,shape=square,flag=0,i=47277,u=0.12928427203362913,v=0.36014711985384984,w=0.5160978398349982,x=4.723551855587213 color=red,shape=square,flag=0,i=47278,u=0.6236826731568171,v=0.27885719808888465,w=0.5090518616191644,x=4.920001701161076 color=green,shape=triangle,flag=0,i=47283,u=0.5398060712735295,v=0.4485334535555223,w=0.5178108058032534,x=5.021032207715689 color=red,shape=square,flag=0,i=47286,u=0.32149074697541336,v=0.16677447012619573,w=0.5167315619046612,x=4.779809890363825 color=yellow,shape=triangle,flag=1,i=47307,u=0.8098494450504433,v=0.7045128087832206,w=0.5340669794584956,x=4.392344316044515 color=purple,shape=circle,flag=0,i=47314,u=0.47017533749995866,v=0.517684914820752,w=0.4971441451769297,x=6.024705678937541 color=green,shape=circle,flag=0,i=47337,u=0.8366917068561538,v=0.3528213533573922,w=0.5327944049749043,x=4.964044336632469 color=red,shape=square,flag=0,i=47338,u=0.7278866542361956,v=0.15464997955561854,w=0.5133664050021653,x=6.858963122633693 color=blue,shape=square,flag=0,i=47346,u=0.5520878440143321,v=0.006707367587415192,w=0.5153431893106104,x=4.294330250353214 color=purple,shape=circle,flag=0,i=47350,u=0.24259937277502486,v=0.8091021896462627,w=0.49728397753578957,x=5.025337740979827 color=red,shape=circle,flag=1,i=47359,u=0.5170181142067491,v=0.454892013920827,w=0.5025080815457361,x=4.42293438162659 color=purple,shape=circle,flag=1,i=47363,u=0.7748924526441401,v=0.5509722174238556,w=0.4909915790533446,x=5.548677350535702 color=yellow,shape=square,flag=1,i=47371,u=0.3854236629925789,v=0.21570318517152565,w=0.5060967631551629,x=4.733777279077814 color=red,shape=circle,flag=1,i=47380,u=0.04315118224791137,v=-0.034752698984486796,w=0.4979484445565782,x=4.674524646900773 color=green,shape=square,flag=0,i=47401,u=0.5837047188683913,v=0.1491016258660176,w=0.505414130927496,x=5.2521255382489604 color=red,shape=square,flag=0,i=47403,u=0.8511067117927236,v=0.5483185788902639,w=0.5258086531059414,x=4.65198911405789 color=yellow,shape=triangle,flag=1,i=47411,u=0.5933459323270596,v=0.16725344350122384,w=0.5362386349574879,x=5.137955091297861 color=green,shape=triangle,flag=0,i=47416,u=0.7869700833298803,v=0.6793671355665465,w=0.52061176475139,x=4.132773703302157 color=red,shape=square,flag=1,i=47427,u=0.446071309064211,v=0.3204912632545579,w=0.5333678445883538,x=4.5565480665755 color=red,shape=square,flag=0,i=47430,u=0.5268630293399926,v=0.6323270862196834,w=0.5310174979895886,x=5.5909091259466805 color=red,shape=circle,flag=0,i=47437,u=0.0033475201684591838,v=0.03618362509207451,w=0.4901706767255952,x=4.699659209270325 color=yellow,shape=square,flag=1,i=47440,u=0.4532982304848068,v=0.34391951198732584,w=0.5044737130552028,x=4.2420672792299845 color=blue,shape=square,flag=0,i=47446,u=0.8812729694031037,v=0.45587457470399395,w=0.5198164188620964,x=5.679214137362975 color=green,shape=circle,flag=1,i=47452,u=0.7614596041992977,v=0.21989950923730928,w=0.5265555445195841,x=6.662307420045459 color=red,shape=square,flag=0,i=47465,u=0.6218962072373867,v=0.6724428584573833,w=0.536694507580103,x=5.178076509784404 color=red,shape=square,flag=0,i=47471,u=0.5872206380159184,v=0.7176345624867879,w=0.538797809675456,x=5.383789374510235 color=red,shape=triangle,flag=1,i=47481,u=0.6928641458980317,v=0.44484426295309343,w=0.4949000535279065,x=4.095925460442613 color=red,shape=circle,flag=0,i=47484,u=0.21513830590522154,v=0.23004368703877412,w=0.49735463616800524,x=5.513201421614358 color=red,shape=triangle,flag=1,i=47489,u=0.8590725669427592,v=0.13089164954576804,w=0.4955360747372989,x=3.658258041746844 color=red,shape=square,flag=0,i=47491,u=0.09092420109253252,v=0.6107014928682417,w=0.5342359763308872,x=3.9664304163467627 color=red,shape=square,flag=0,i=47493,u=0.07385313022791418,v=0.15527772839738208,w=0.5333571343089012,x=3.9477415123140234 color=red,shape=circle,flag=1,i=47509,u=0.5196031022428723,v=0.4771131849532491,w=0.5043906528681675,x=3.2496313211363073 color=blue,shape=triangle,flag=1,i=47511,u=0.7248176976849061,v=0.07478963524029203,w=0.49552344232871137,x=5.648361598236931 color=green,shape=triangle,flag=0,i=47533,u=0.9211388368315184,v=0.520081232078681,w=0.5108849083338292,x=5.8260786964863245 color=yellow,shape=square,flag=0,i=47569,u=0.21125667155172767,v=0.21424825678469328,w=0.5136158452229139,x=4.930873620977217 color=red,shape=triangle,flag=1,i=47584,u=0.1987478038711763,v=0.463728206606544,w=0.48407014874509446,x=4.526361699165051 color=yellow,shape=square,flag=1,i=47585,u=0.5730846239767229,v=0.2066868791782468,w=0.5136029921439264,x=4.269956990495315 color=blue,shape=triangle,flag=0,i=47604,u=0.543662409079566,v=0.8361371757686075,w=0.48465436179841076,x=6.097942602425896 color=yellow,shape=circle,flag=1,i=47608,u=0.403617662080057,v=0.4535962230302537,w=0.549302969457956,x=5.916501527412496 color=blue,shape=square,flag=1,i=47627,u=0.9854503157430848,v=0.8941983548946112,w=0.5314197042696979,x=5.023011547336865 color=purple,shape=square,flag=0,i=47635,u=0.16914141463889032,v=0.6038025749254585,w=0.5072717589504321,x=5.2920657228378465 color=purple,shape=triangle,flag=0,i=47647,u=0.8619200581587098,v=0.5229170149441354,w=0.4799315219056057,x=6.638035518689588 color=red,shape=square,flag=0,i=47660,u=0.9283720160571937,v=0.2474816210673465,w=0.5142575232470952,x=5.949403794221663 color=red,shape=triangle,flag=0,i=47665,u=0.6148262077456892,v=0.7162368103735482,w=0.48239204738099745,x=6.951029129333624 color=purple,shape=circle,flag=0,i=47667,u=0.5104938769063353,v=0.17631977959134892,w=0.49730585430084195,x=4.5704392887185135 color=red,shape=square,flag=0,i=47671,u=0.07171018216177005,v=0.9017996603635156,w=0.5103505646311814,x=4.632223102769466 color=red,shape=circle,flag=1,i=47682,u=0.04521087512440558,v=0.1377151964371221,w=0.5066743318122094,x=4.437634741641908 color=red,shape=triangle,flag=1,i=47698,u=0.8823863291842416,v=0.5626322764894532,w=0.4837985371234255,x=3.9117594647506664 color=purple,shape=square,flag=0,i=47706,u=0.2903609349180982,v=0.6942156762569489,w=0.5082670914676386,x=3.166451816968816 color=purple,shape=square,flag=0,i=47707,u=0.5680612248801317,v=0.16825159228840192,w=0.5080037620565654,x=3.3689909146437684 color=red,shape=triangle,flag=0,i=47718,u=0.18045844302485725,v=0.25176561793507424,w=0.48047039749789683,x=4.018882485998389 color=red,shape=square,flag=0,i=47736,u=0.7979189416795182,v=0.2999153597732107,w=0.487598215209931,x=3.694876969421642 color=green,shape=circle,flag=0,i=47741,u=0.4402030232136849,v=0.8421968533045011,w=0.5365266607533119,x=5.130174091558044 color=red,shape=circle,flag=0,i=47743,u=0.6604988783065447,v=0.5869142611857939,w=0.5148341312621858,x=7.03133519788192 color=blue,shape=triangle,flag=1,i=47756,u=0.05642048653696552,v=0.24325934491930334,w=0.47976502672925675,x=5.4922980433943716 color=blue,shape=triangle,flag=1,i=47778,u=0.388042077863479,v=0.17638619687646184,w=0.4865413686494398,x=3.879669643140455 color=red,shape=circle,flag=0,i=47792,u=0.9103375825942616,v=0.966657239609342,w=0.4995723626761557,x=4.552818628383551 color=blue,shape=circle,flag=0,i=47794,u=0.3344093035190303,v=0.09668660774653226,w=0.515861996875231,x=4.890175280882126 color=red,shape=triangle,flag=1,i=47799,u=0.6668862759788828,v=0.8772217943097802,w=0.48179917406062817,x=2.9279336035242203 color=red,shape=square,flag=0,i=47809,u=0.40756810598260595,v=0.8455926667865655,w=0.4894830400617358,x=6.068225102456052 color=purple,shape=circle,flag=0,i=47813,u=0.19929578139060056,v=0.8409397852537306,w=0.5006311511199087,x=4.232450014374734 color=red,shape=circle,flag=0,i=47822,u=0.6700704665243736,v=0.632104846882164,w=0.4997268018829444,x=7.500088103578668 color=yellow,shape=circle,flag=1,i=47823,u=0.082564141869508,v=0.6238747774166773,w=0.5417274677342676,x=6.8531184871841395 color=red,shape=square,flag=0,i=47833,u=0.5598679771914572,v=0.28172185660693794,w=0.505726456936834,x=5.073077577302645 color=red,shape=triangle,flag=0,i=47839,u=0.35988287648216055,v=0.472693908314731,w=0.4785657667365871,x=3.9517423057239234 color=red,shape=circle,flag=0,i=47852,u=0.2283406457167374,v=0.1344710945832132,w=0.4975132651088428,x=5.331223040114022 color=blue,shape=triangle,flag=0,i=47872,u=0.8512441006245143,v=0.4727090044181631,w=0.49410066653049767,x=4.77580289775587 color=red,shape=circle,flag=0,i=47880,u=0.744194953359183,v=0.7502829952645584,w=0.49533158637346303,x=6.180917386032007 color=red,shape=triangle,flag=0,i=47890,u=0.2620465608742797,v=0.20860132327691405,w=0.49223873600865087,x=4.935694587637626 color=blue,shape=square,flag=0,i=47891,u=0.7973007078819028,v=0.20546163538542517,w=0.5176526155509582,x=5.650941616357592 color=blue,shape=circle,flag=1,i=47894,u=0.1571961118348203,v=0.4607283986315843,w=0.5180755700440234,x=3.9649228862083192 color=red,shape=triangle,flag=0,i=47896,u=0.4464273362498433,v=0.3367447258949119,w=0.49120143220909585,x=4.999779952481166 color=red,shape=circle,flag=0,i=47904,u=0.9957422499995832,v=0.9185106240901652,w=0.49931738751417004,x=3.316584118400906 color=red,shape=square,flag=0,i=47909,u=0.8894873731882789,v=0.3619572285135665,w=0.48208603800568667,x=4.8455340087338135 color=blue,shape=triangle,flag=0,i=47913,u=0.4267903606219958,v=0.09060008208931469,w=0.4976247509688333,x=4.884935416810568 color=purple,shape=circle,flag=0,i=47914,u=0.719323716238728,v=0.5435526378275625,w=0.501159076138094,x=5.137585015143159 color=yellow,shape=triangle,flag=1,i=47920,u=0.5704764495151491,v=0.9870337429747029,w=0.5483222400846162,x=4.909570969761352 color=green,shape=circle,flag=0,i=47924,u=0.6648461649774816,v=0.4016890120555501,w=0.5384674815935445,x=2.9409744675681835 color=purple,shape=square,flag=0,i=47932,u=0.8751607622582941,v=0.21196254391444147,w=0.5063903415054063,x=5.921761672139258 color=green,shape=square,flag=0,i=47936,u=0.19772266974951547,v=0.17103089912894365,w=0.5067439727967291,x=5.248412776342183 color=red,shape=triangle,flag=0,i=47940,u=0.3186398493888438,v=0.02581181147895817,w=0.4974067484739183,x=6.309037778398963 color=purple,shape=triangle,flag=0,i=47943,u=0.1241380988180828,v=0.8874798316641104,w=0.47450703295315516,x=5.121479584720205 color=red,shape=square,flag=0,i=47988,u=0.5671311140404951,v=0.9207785390261547,w=0.49976963999832463,x=6.758332515741141 color=red,shape=triangle,flag=0,i=47998,u=0.6723571513032998,v=0.32740627194747185,w=0.48707944338721215,x=6.211317562050446 color=red,shape=triangle,flag=0,i=47999,u=0.7365727949580668,v=0.21766326398816216,w=0.4890421578389589,x=4.893501633400699 color=green,shape=triangle,flag=0,i=48000,u=0.8042780199288174,v=0.620576865015893,w=0.49104841582930553,x=3.828071785453805 color=yellow,shape=triangle,flag=1,i=48022,u=0.5334887947924264,v=0.06887897496797546,w=0.5474917486433377,x=5.947516235622001 color=red,shape=square,flag=1,i=48024,u=0.42509860286647616,v=0.9472463849018017,w=0.4950947762668159,x=4.101599527400148 color=green,shape=triangle,flag=0,i=48025,u=0.10178740645332085,v=0.8262483377093328,w=0.4878747646020304,x=7.4262084364493886 color=yellow,shape=square,flag=1,i=48073,u=0.878953189398098,v=0.36745367758286984,w=0.526429333457668,x=6.053603149690692 color=orange,shape=circle,flag=0,i=48080,u=0.5296672380020108,v=0.6436838062866405,w=0.5106530847743275,x=4.526397539243941 color=red,shape=circle,flag=0,i=48116,u=0.5153156142354977,v=0.531376501868268,w=0.47286628552010285,x=5.188184731973516 color=purple,shape=circle,flag=0,i=48133,u=0.1970919670272947,v=0.30697789820826293,w=0.49599805441535366,x=6.739055189801161 color=orange,shape=square,flag=1,i=48136,u=0.6274668790899468,v=0.767392992401935,w=0.4979790658572044,x=4.071368856773449 color=yellow,shape=triangle,flag=1,i=48155,u=0.49857993711361925,v=0.6631995822696762,w=0.5505388491606407,x=5.374198741748137 color=blue,shape=circle,flag=1,i=48158,u=0.7376114528022307,v=0.20888560433341807,w=0.5071530643751293,x=6.239048104947037 color=red,shape=square,flag=0,i=48163,u=0.30259715368291107,v=0.14425777907213877,w=0.48801482810319596,x=5.677003082121711 color=red,shape=triangle,flag=0,i=48177,u=0.7041990089142588,v=0.29101971679400485,w=0.48354802535438846,x=3.564950747772413 color=red,shape=triangle,flag=0,i=48179,u=0.4760079242416355,v=0.26481341756985877,w=0.48751130723309505,x=5.668848094481008 color=red,shape=square,flag=1,i=48190,u=0.4799210067638763,v=0.779157284108455,w=0.4902286094256423,x=5.649216661386859 color=purple,shape=triangle,flag=1,i=48192,u=0.4810586207870312,v=0.8153370799216061,w=0.4694653180578124,x=5.154970220330868 color=green,shape=square,flag=0,i=48201,u=0.851199762592381,v=0.8923194944321882,w=0.4987378609319515,x=5.3028738629011665 color=red,shape=square,flag=1,i=48233,u=0.39325006326518164,v=0.2665985973367109,w=0.4961654656442382,x=3.369537325857852 color=yellow,shape=square,flag=1,i=48286,u=0.1361348285487186,v=0.15308955253919432,w=0.5290892122421875,x=5.353960055561228 color=purple,shape=triangle,flag=0,i=48300,u=0.0018299515700209712,v=0.14328992498318616,w=0.46553051189247585,x=5.769945805719963 color=purple,shape=triangle,flag=0,i=48323,u=0.00313861392460113,v=0.34931635605986966,w=0.4670599982039622,x=4.761175746520117 color=orange,shape=circle,flag=0,i=48329,u=0.6297207639212663,v=0.8377381219572752,w=0.5086888522010742,x=3.634405391162001 color=green,shape=square,flag=0,i=48334,u=0.1461510750238506,v=0.33943725308829475,w=0.4962336799882166,x=6.787793056331956 color=yellow,shape=square,flag=1,i=48341,u=0.005678737451083715,v=0.18080360273427176,w=0.5252731559555475,x=4.733707380513718 color=purple,shape=square,flag=0,i=48344,u=0.6440206650882553,v=0.5446681940585668,w=0.5304311891785677,x=3.124189071269072 color=blue,shape=circle,flag=1,i=48347,u=0.420394688141821,v=0.7638162934379374,w=0.523931526791433,x=7.315932819495738 color=green,shape=square,flag=0,i=48367,u=0.6392199138084892,v=0.5096272731754125,w=0.49803721790934646,x=6.006117047060915 color=yellow,shape=circle,flag=1,i=48369,u=0.8516932806781125,v=0.914392829787277,w=0.5353110496329764,x=6.594555548207381 color=blue,shape=square,flag=1,i=48370,u=0.8192287115041461,v=0.8969290114824194,w=0.5192558334681245,x=5.837683470905648 color=green,shape=circle,flag=0,i=48392,u=0.02226553062925085,v=0.018885255866349038,w=0.5327886733374836,x=5.03898512398291 color=green,shape=square,flag=0,i=48394,u=0.7959359626739195,v=0.9265676736905113,w=0.5013990805007352,x=4.870654310957548 color=red,shape=circle,flag=0,i=48395,u=0.3330308055433241,v=0.4316772402238431,w=0.4629239713674204,x=4.017920859996644 color=blue,shape=triangle,flag=0,i=48396,u=0.7781870859131903,v=0.7061940703974626,w=0.4977475795794286,x=4.388716680048084 color=purple,shape=circle,flag=0,i=48411,u=0.6557444992833522,v=0.1424666921200025,w=0.48403253106941213,x=4.635019856522892 color=red,shape=square,flag=0,i=48414,u=0.9915453831267441,v=0.01746444655110857,w=0.5174706259846977,x=2.8044754044433127 color=blue,shape=square,flag=1,i=48420,u=0.2773151103818414,v=0.9604075839573473,w=0.5158980283602393,x=5.723286666956625 color=red,shape=circle,flag=0,i=48423,u=0.9707402131399189,v=0.8928315718049378,w=0.4684487910966547,x=5.465510451380452 color=purple,shape=circle,flag=0,i=48424,u=0.35441091608538144,v=0.8362085423431201,w=0.4837620049458438,x=6.829686813692745 color=red,shape=square,flag=0,i=48431,u=0.9252760103799889,v=0.7871168302458378,w=0.508433111154264,x=6.09250408594293 color=yellow,shape=square,flag=1,i=48434,u=0.1310168760157514,v=0.19125831238720814,w=0.5307792022058948,x=4.083837861868347 color=red,shape=triangle,flag=1,i=48456,u=0.6626825778722105,v=0.05835851093628497,w=0.5015754768598653,x=4.019294913325446 color=red,shape=square,flag=0,i=48465,u=0.4716901594344809,v=0.1360984962668913,w=0.5042388490867261,x=6.164164768264425 color=blue,shape=triangle,flag=1,i=48466,u=0.5621750646951064,v=0.924656503724102,w=0.4974725752677423,x=5.116454477881539 color=blue,shape=square,flag=0,i=48486,u=0.6328489014889085,v=0.569427034785481,w=0.5149315945651306,x=4.063893607403954 color=red,shape=square,flag=1,i=48495,u=0.8651395398249447,v=0.41858665882182566,w=0.49845271391445384,x=5.371864929574073 color=blue,shape=square,flag=1,i=48503,u=0.23175790087124892,v=0.43065203369185234,w=0.5068260393784609,x=5.404446177946749 color=orange,shape=triangle,flag=0,i=48511,u=0.4468678804082995,v=0.7904105523237679,w=0.4931264625596131,x=3.7564168137174025 color=red,shape=square,flag=0,i=48513,u=0.45177471152271464,v=0.7049019447388172,w=0.5006708329811198,x=5.6352144482256366 color=red,shape=square,flag=1,i=48516,u=0.2481503893149476,v=0.1850263315833549,w=0.5042609901406907,x=5.541969469930131 color=red,shape=square,flag=0,i=48527,u=0.7260659819913544,v=0.8326852084033661,w=0.49826228945898626,x=2.0753044147205277 color=red,shape=circle,flag=0,i=48532,u=0.2336235463270796,v=0.3179988859679837,w=0.4791283016385554,x=5.221790548342736 color=red,shape=square,flag=0,i=48548,u=0.5109009389785433,v=0.46149705659219753,w=0.4807524355169942,x=5.137727683476947 color=red,shape=square,flag=1,i=48555,u=0.7120937714470833,v=0.7102624675692046,w=0.481358478850383,x=4.287285854876532 color=purple,shape=square,flag=0,i=48558,u=0.7172448505589109,v=0.25664418888326046,w=0.5299342518224462,x=6.229292732123356 color=green,shape=circle,flag=0,i=48564,u=0.8578903708518397,v=0.9344574054809978,w=0.5266759426185877,x=4.2231117746842335 color=purple,shape=triangle,flag=0,i=48566,u=0.6317475058397665,v=0.20561366373556222,w=0.4705372300037366,x=2.3791634956727066 color=red,shape=circle,flag=1,i=48593,u=0.22611913660739424,v=0.2811616508492888,w=0.4884056164914672,x=5.002988024105577 color=green,shape=square,flag=1,i=48594,u=0.9146997086028177,v=0.5460414602258741,w=0.49962616155513506,x=5.7365892762882424 color=blue,shape=triangle,flag=1,i=48595,u=0.40184983765676585,v=0.35586201768189774,w=0.4937088376822604,x=4.716852988923189 color=blue,shape=square,flag=1,i=48609,u=0.8193904361598316,v=0.06938371747229877,w=0.5062554139989941,x=4.724885760428026 color=red,shape=square,flag=0,i=48642,u=0.8615550997590109,v=0.7660807177205972,w=0.48916474230367085,x=5.445726145993582 color=purple,shape=square,flag=0,i=48666,u=0.7025404242375245,v=0.895283075878103,w=0.5244784336208926,x=3.9768448928265485 color=yellow,shape=circle,flag=1,i=48675,u=0.9093274317332981,v=0.30642859401261335,w=0.5167663594592573,x=3.539275263311339 color=green,shape=triangle,flag=0,i=48689,u=0.14666525418216747,v=0.11519731769934427,w=0.5055995819717433,x=7.345703452411812 color=green,shape=circle,flag=0,i=48691,u=0.7590122519980227,v=0.31098808751077667,w=0.5352839763407974,x=3.9696783120269914 color=red,shape=square,flag=0,i=48695,u=0.21750185090231478,v=0.39145743210505357,w=0.4776447915650074,x=4.373734235592711 color=green,shape=circle,flag=0,i=48722,u=0.25116833823810303,v=0.7504751180135623,w=0.529639671860548,x=4.36187834014974 color=red,shape=circle,flag=1,i=48731,u=0.586032921474184,v=0.5177220606889043,w=0.5146031619309127,x=5.7917259706613535 color=red,shape=triangle,flag=0,i=48740,u=0.7053847488791184,v=0.3512812451507956,w=0.4938310272198147,x=5.081861421952902 color=green,shape=square,flag=0,i=48741,u=0.1835666996003048,v=0.7042974823519338,w=0.4987452527074754,x=4.077504296996638 color=blue,shape=circle,flag=1,i=48747,u=0.571585583500929,v=0.0967250711451324,w=0.5277929502367874,x=6.353210634940375 color=yellow,shape=triangle,flag=0,i=48777,u=0.5360703689306874,v=0.9758403436372661,w=0.5478451553806851,x=7.204139152423575 color=red,shape=square,flag=0,i=48786,u=0.8758379938899296,v=0.4297308881874612,w=0.49405172926839025,x=5.347410419711326 color=yellow,shape=square,flag=1,i=48789,u=0.850194158564887,v=0.3471656050084757,w=0.5083937478364037,x=5.9231422955706385 color=yellow,shape=circle,flag=1,i=48793,u=0.17197656062677302,v=0.3773445818618718,w=0.5204331472012487,x=5.537213045417211 color=red,shape=square,flag=1,i=48795,u=0.15968849416461606,v=0.49762928845241405,w=0.4904818983647905,x=2.4234625552522395 color=red,shape=square,flag=0,i=48796,u=0.35127783920672206,v=0.7909780551138718,w=0.4890451655569846,x=5.458342533009376 color=purple,shape=square,flag=0,i=48802,u=0.9899008389447401,v=0.6819884892271715,w=0.5199807793916681,x=3.776775459714525 color=yellow,shape=triangle,flag=1,i=48804,u=0.5550243580361256,v=0.8879319164006181,w=0.5476627579217056,x=5.225800918902723 color=red,shape=circle,flag=0,i=48807,u=0.5121849480165164,v=0.4854009772171398,w=0.499321294274982,x=4.771380521669399 color=red,shape=square,flag=0,i=48821,u=0.027954470851159208,v=0.18289875370865072,w=0.493632037028138,x=6.075187965168664 color=blue,shape=square,flag=0,i=48834,u=0.4517081405306025,v=0.4789033595105586,w=0.5104512121305513,x=3.169548824243132 color=red,shape=triangle,flag=0,i=48839,u=0.2838632533549299,v=0.8702137152429561,w=0.4956041504161319,x=4.5500072951389 color=green,shape=triangle,flag=0,i=48844,u=0.6572003438613823,v=0.6552237939405061,w=0.5087197315178495,x=4.711400043041627 color=yellow,shape=square,flag=1,i=48852,u=0.9918848319068965,v=0.44945341990465193,w=0.5067671231272616,x=5.0681480805735 color=red,shape=triangle,flag=1,i=48857,u=0.9426434232193396,v=0.8056058993361147,w=0.49946690700060753,x=4.535655321031028 color=blue,shape=square,flag=0,i=48866,u=0.26063993730576307,v=0.9228215544003301,w=0.5068822575344889,x=4.988369809688219 color=red,shape=square,flag=0,i=48876,u=0.4852575187771816,v=0.7202011781800157,w=0.4943741912186829,x=3.985077678185808 color=red,shape=triangle,flag=0,i=48881,u=0.925808881844663,v=0.19512682871488096,w=0.4984221536186269,x=5.190811576909501 color=red,shape=circle,flag=0,i=48888,u=0.7532550517681115,v=0.6945205805434272,w=0.4937598159402476,x=3.884304632957931 color=red,shape=triangle,flag=0,i=48902,u=0.35218291440542426,v=0.2912536347895085,w=0.5021630155521924,x=4.764738613260103 color=red,shape=circle,flag=0,i=48903,u=0.2551269068296582,v=0.2996842360799671,w=0.4967310547181671,x=7.806004952514143 color=red,shape=square,flag=1,i=48907,u=0.7467051750991411,v=0.8418329480122392,w=0.49438003381460965,x=4.701164712489955 color=red,shape=triangle,flag=0,i=48908,u=0.3935824957692202,v=0.3141532599522351,w=0.49779727447827266,x=6.096409068434248 color=purple,shape=square,flag=1,i=48911,u=0.5251776976908747,v=0.060727249472551814,w=0.5140716442813988,x=5.89194905919355 color=red,shape=triangle,flag=0,i=48916,u=0.8040006982467456,v=0.513111157827294,w=0.4920532798129258,x=5.673196905769039 color=red,shape=square,flag=0,i=48947,u=0.010173815375059236,v=0.7330036363420449,w=0.49387660603019323,x=5.798584541507935 color=red,shape=triangle,flag=1,i=48984,u=0.2735310050920434,v=0.054553170864756084,w=0.49442448328131583,x=3.892387353480809 color=orange,shape=triangle,flag=1,i=48995,u=0.39760734288917954,v=0.3371746200076561,w=0.48791561154442464,x=5.260859646860521 color=red,shape=triangle,flag=1,i=49003,u=0.06872646459313503,v=0.5392147800681325,w=0.4948153270917659,x=4.081119269485581 color=green,shape=square,flag=0,i=49024,u=0.3821880750205392,v=0.18275551465330375,w=0.5082545487641369,x=4.608951112925888 color=red,shape=triangle,flag=0,i=49076,u=0.9774733745602495,v=0.6770710217410209,w=0.49758257949481083,x=5.901737432951713 color=blue,shape=triangle,flag=0,i=49091,u=0.3069757458761392,v=0.975915320777544,w=0.49497155098184337,x=3.2544458977368116 color=purple,shape=triangle,flag=1,i=49110,u=0.5437191324592979,v=0.7452292907487643,w=0.46980054948311634,x=3.123213210792038 color=red,shape=triangle,flag=0,i=49115,u=0.9723164560234776,v=0.252223523806952,w=0.4993876820825114,x=6.517281701806074 color=red,shape=square,flag=0,i=49135,u=0.7139229738734771,v=0.18345268574285667,w=0.508209778062047,x=5.5626025115488575 color=red,shape=triangle,flag=0,i=49157,u=0.6970981390918413,v=0.3518574147809991,w=0.5009766884967909,x=5.497528793414663 color=red,shape=circle,flag=0,i=49164,u=0.647822123289506,v=0.6682539109127954,w=0.4933975034199711,x=3.219711890739834 color=red,shape=square,flag=0,i=49172,u=0.8908937086069729,v=0.9379530871180463,w=0.5098313738414236,x=5.973769977022911 color=red,shape=square,flag=1,i=49201,u=0.4454025085947698,v=0.4099923779264084,w=0.4910162129951342,x=4.481191310011913 color=orange,shape=square,flag=1,i=49206,u=0.802010661820528,v=0.23000091696383262,w=0.4927673407688356,x=4.216408381007006 color=green,shape=circle,flag=0,i=49214,u=0.5305743507867361,v=0.6491330644828276,w=0.5346855570498684,x=5.254963666890739 color=purple,shape=square,flag=0,i=49223,u=0.3877533919022079,v=0.5938677202573172,w=0.4989497077897815,x=5.671028555564367 color=blue,shape=triangle,flag=0,i=49235,u=0.5311947363805939,v=0.6703561600958575,w=0.4861320721695671,x=6.299587773146253 color=yellow,shape=square,flag=1,i=49242,u=0.9865451790312803,v=0.17219550870565814,w=0.4912477106521422,x=4.264105576136469 color=red,shape=triangle,flag=0,i=49246,u=0.406219998662978,v=0.27331208705285004,w=0.5007540658326034,x=5.6255485227686215 color=red,shape=square,flag=0,i=49252,u=0.8246068002195602,v=0.8537876488777733,w=0.5001482756076582,x=5.55268531381848 color=red,shape=square,flag=0,i=49288,u=0.7189907623048931,v=0.9789785037542742,w=0.5027097398153147,x=5.094206466597293 color=yellow,shape=square,flag=1,i=49289,u=0.7007760621559119,v=0.725695057192697,w=0.4918534717715291,x=5.460288167284148 color=blue,shape=square,flag=1,i=49294,u=0.7544683604570546,v=0.8600086961244224,w=0.48791610860242834,x=1.9556650133465148 color=red,shape=square,flag=0,i=49295,u=0.310840082072806,v=0.19091871488745316,w=0.49933179156429874,x=6.523159823757539 color=red,shape=triangle,flag=0,i=49311,u=0.7580251038778791,v=0.456167835826202,w=0.491624180505097,x=4.752075612365577 color=yellow,shape=square,flag=1,i=49313,u=0.7117641094007058,v=0.7232167368995583,w=0.4937092167173523,x=5.938512076586304 color=blue,shape=triangle,flag=1,i=49314,u=0.7318166275354759,v=0.25661529714867704,w=0.4790450213823,x=5.979998956866333 color=red,shape=square,flag=0,i=49315,u=0.869185123892576,v=0.8378741632389953,w=0.5063259541702672,x=4.270802085649039 color=red,shape=triangle,flag=0,i=49342,u=0.03320332728440745,v=0.07700944137920795,w=0.4910119560751279,x=4.9931301075275565 color=red,shape=triangle,flag=1,i=49343,u=0.9313955894332584,v=0.41708825118334014,w=0.48883576456581534,x=5.755297244847177 color=blue,shape=square,flag=1,i=49346,u=0.5497443049259817,v=0.7185820582707827,w=0.4836033179706641,x=5.663566217663256 color=green,shape=square,flag=0,i=49350,u=0.08112136150383897,v=0.5447208740740511,w=0.5125548833694299,x=5.179848110767936 color=red,shape=circle,flag=0,i=49355,u=0.8335649141129794,v=0.7570274858202322,w=0.4913087045300904,x=6.460193294575606 color=blue,shape=square,flag=1,i=49360,u=0.45760255041639575,v=0.7946968642759207,w=0.47913393136516214,x=6.026001715554631 color=blue,shape=square,flag=1,i=49369,u=0.7913352037589557,v=0.17849189377021557,w=0.48382559711653306,x=6.178075990951691 color=blue,shape=square,flag=1,i=49373,u=0.6201521382312329,v=0.5861889938228702,w=0.48557410380423754,x=5.64283843802005 color=yellow,shape=circle,flag=1,i=49377,u=0.03658591968793912,v=0.4058735993201916,w=0.49755749071881794,x=2.934903143221631 color=blue,shape=square,flag=1,i=49381,u=0.39266340298369873,v=0.7886695634267545,w=0.4939756217999521,x=4.665959995675293 color=red,shape=square,flag=0,i=49387,u=0.48219219328921015,v=0.4964378684587051,w=0.4980760491080519,x=3.4245589445501063 color=red,shape=triangle,flag=0,i=49391,u=0.7065030238931678,v=0.6679897375840088,w=0.48960031729214004,x=4.416020360931529 color=purple,shape=square,flag=0,i=49392,u=0.9210573729296656,v=0.6640920718150033,w=0.48730208489648125,x=5.196681075392454 color=blue,shape=square,flag=1,i=49395,u=0.05495841303769311,v=0.3741662454478858,w=0.4939719796348749,x=3.104140981640939 color=red,shape=square,flag=0,i=49400,u=0.28143319193979177,v=0.6418912250271882,w=0.495679472776123,x=4.658924131534239 color=yellow,shape=circle,flag=1,i=49409,u=0.5757606669791355,v=0.44044794269386733,w=0.5013379147566249,x=5.675339087153817 color=red,shape=triangle,flag=0,i=49416,u=0.29448978755687616,v=0.34393079463803833,w=0.4884291614826948,x=6.56773461946861 color=red,shape=square,flag=1,i=49421,u=0.33999596293922807,v=0.4588495048775292,w=0.4875083920547538,x=4.194832820327149 color=purple,shape=square,flag=0,i=49427,u=0.303115039166182,v=0.22809911637075353,w=0.48916609448408105,x=4.362707230050652 color=red,shape=square,flag=0,i=49430,u=0.7012489333175754,v=0.4015245116358245,w=0.48484489072046555,x=4.568861212782241 color=yellow,shape=circle,flag=1,i=49433,u=0.7811802488150853,v=0.5989464271880686,w=0.5001765320852266,x=4.2458181515784865 color=red,shape=triangle,flag=0,i=49434,u=0.8849717804674293,v=0.45575692001832646,w=0.495217638561584,x=3.7449167334267988 color=red,shape=circle,flag=0,i=49439,u=0.16528949894827216,v=0.22174842724882513,w=0.4870902339234367,x=4.777968970521575 color=yellow,shape=triangle,flag=1,i=49445,u=0.13580674088483946,v=0.7221635933202355,w=0.5221682823936992,x=4.585758296132934 color=purple,shape=square,flag=0,i=49451,u=0.4682284291312413,v=0.9154080748166535,w=0.49073126791938976,x=3.828544907465483 color=red,shape=square,flag=0,i=49472,u=0.332757078393244,v=0.7468663316925892,w=0.49183931364494754,x=6.171396444107888 color=red,shape=square,flag=1,i=49482,u=0.6532375778700675,v=0.9999738400353525,w=0.4979976227770923,x=6.313342717166062 color=red,shape=triangle,flag=1,i=49486,u=0.6564707086249122,v=0.31655210715956383,w=0.4913379802978528,x=5.6115301757155445 color=purple,shape=triangle,flag=0,i=49493,u=0.3190836882980076,v=0.1260070863226873,w=0.47634405006076563,x=3.5132129883372354 color=yellow,shape=circle,flag=1,i=49512,u=0.709982070473867,v=0.8159510563775967,w=0.5040094147134031,x=5.782111172819735 color=blue,shape=square,flag=1,i=49522,u=0.984731831321471,v=0.658544189262576,w=0.4922260214861222,x=6.965437099040508 color=red,shape=circle,flag=0,i=49527,u=0.1861926771650423,v=0.09290641241696035,w=0.4884765727327744,x=4.632297533831132 color=red,shape=square,flag=0,i=49530,u=0.22702746084676495,v=0.8600770689591424,w=0.49551656076421047,x=7.505218582567923 color=red,shape=circle,flag=0,i=49541,u=0.7915540173606261,v=0.732843771782058,w=0.4877864872814856,x=3.912488309470623 color=red,shape=square,flag=0,i=49548,u=0.6783829905365601,v=0.6282521586505893,w=0.4858966598398641,x=7.499229893949848 color=red,shape=triangle,flag=1,i=49557,u=0.9168205464461484,v=0.3954899702159489,w=0.4800129024410063,x=4.940693034855969 color=red,shape=triangle,flag=0,i=49563,u=0.6982611054222738,v=0.18741230873348302,w=0.47403507410215523,x=4.0847875639613 color=yellow,shape=circle,flag=1,i=49567,u=0.9131580785775962,v=0.5853871962993066,w=0.5070823024905516,x=3.8281865071523384 color=purple,shape=circle,flag=0,i=49571,u=0.32818065783603423,v=0.9573989305557657,w=0.49155943295905186,x=4.17882528417053 color=red,shape=triangle,flag=0,i=49572,u=0.6634954841195608,v=0.5633985761260297,w=0.47047195637596195,x=4.8809429444036745 color=red,shape=square,flag=0,i=49626,u=0.4836644768367475,v=0.09526250127802116,w=0.4795579389582386,x=4.783492481374331 color=red,shape=circle,flag=1,i=49633,u=0.8034199284139771,v=0.7152912335451821,w=0.48277915336402183,x=3.2180424485077572 color=yellow,shape=square,flag=1,i=49677,u=0.5162735060349285,v=0.969225339799034,w=0.49006888864034986,x=1.6592652333901825 color=yellow,shape=square,flag=1,i=49678,u=0.3685566804851548,v=0.9962704630789017,w=0.4852604333387848,x=5.408582834990164 color=purple,shape=square,flag=0,i=49693,u=0.0477754187285474,v=0.9325049416829603,w=0.510722380310676,x=4.91771588159503 color=red,shape=triangle,flag=0,i=49701,u=0.5776650690636927,v=0.9351857538188668,w=0.46310101707851714,x=6.118166499197383 color=yellow,shape=circle,flag=1,i=49713,u=0.39379418283321344,v=0.6537477108638561,w=0.4938079752836218,x=4.523284772542072 color=yellow,shape=triangle,flag=1,i=49714,u=0.61424215051692,v=0.6452268511398105,w=0.5201597759314346,x=5.575952503499533 color=yellow,shape=circle,flag=1,i=49718,u=0.4859216261926276,v=0.9568496375121113,w=0.49245658520614866,x=4.726719537053268 color=yellow,shape=square,flag=1,i=49719,u=0.5776440938962014,v=0.4834609926851269,w=0.49009737665743003,x=6.808705577498416 color=blue,shape=square,flag=1,i=49740,u=0.053358061199709206,v=0.43634653297530934,w=0.47908022747566364,x=3.9361571502835324 color=red,shape=triangle,flag=0,i=49744,u=0.7040096893862022,v=0.11201935331026636,w=0.46635021639773855,x=5.961057486092087 color=red,shape=triangle,flag=0,i=49745,u=0.21869200214312945,v=0.09431461320583334,w=0.47059577377557205,x=5.89150628794983 color=red,shape=square,flag=1,i=49751,u=0.5299705735494521,v=0.42798476745333747,w=0.5142637838470888,x=4.366499608508683 color=red,shape=square,flag=0,i=49752,u=0.3621898703570018,v=0.4364315628388641,w=0.5100652971080901,x=6.13409114857635 color=red,shape=circle,flag=0,i=49767,u=0.5042836787861152,v=0.5184618209834472,w=0.47566683045377595,x=7.3601320879659164 color=red,shape=circle,flag=0,i=49782,u=0.3557935611323194,v=0.4511683695605365,w=0.47342111246257573,x=5.175603678707147 color=green,shape=triangle,flag=0,i=49792,u=0.12196397768396838,v=0.5371007542741264,w=0.4909638178602071,x=5.195881819406623 color=green,shape=square,flag=0,i=49816,u=0.22898639454127634,v=0.18025397361757411,w=0.4922733194863845,x=6.060961718025254 color=red,shape=square,flag=0,i=49833,u=0.03806273225841361,v=0.7294088403732395,w=0.5060737754235056,x=5.712521708834092 color=yellow,shape=triangle,flag=1,i=49839,u=0.6678360776533244,v=0.7426186402365017,w=0.5170239491843038,x=6.7229904635227244 color=red,shape=square,flag=0,i=49845,u=0.38273861705716894,v=0.3671623001122907,w=0.5110999992179351,x=8.167918680659604 color=yellow,shape=square,flag=1,i=49848,u=0.5459812137659908,v=0.4937339730790854,w=0.48717960487934353,x=5.852822708070808 color=red,shape=triangle,flag=1,i=49851,u=0.15386077217334082,v=0.604164567044745,w=0.4718547189706239,x=3.8176403905423064 color=yellow,shape=square,flag=1,i=49856,u=0.40653949536229184,v=0.835665608149631,w=0.4852501321415279,x=3.771161247377052 color=red,shape=circle,flag=1,i=49875,u=0.2919845825347708,v=0.35797653690581893,w=0.48364467004318856,x=3.657855410853113 color=blue,shape=circle,flag=1,i=49876,u=0.950709524625065,v=0.4445897024345139,w=0.5168328686842913,x=5.2269066519488865 color=red,shape=triangle,flag=0,i=49879,u=0.6270614534308284,v=0.3101237596094326,w=0.4702605958065787,x=4.108876920441974 color=blue,shape=triangle,flag=1,i=49880,u=0.42997496746993313,v=0.8582037963654929,w=0.46450475434380323,x=5.200092942247525 color=red,shape=square,flag=0,i=49891,u=0.8711531051451334,v=0.7694789393993068,w=0.5241702412868067,x=5.210067330660774 color=red,shape=square,flag=0,i=49892,u=0.696204185232735,v=0.4020293107128635,w=0.5272820426683686,x=4.671871037346535 color=red,shape=circle,flag=0,i=49894,u=0.9838712016184571,v=0.9102199041447175,w=0.4819026370038073,x=5.139898547914162 color=yellow,shape=circle,flag=1,i=49901,u=0.1553073209969712,v=0.9207941064021002,w=0.4888748938449533,x=2.574451697687581 color=green,shape=square,flag=0,i=49902,u=0.5965728562798117,v=0.31255320784124785,w=0.4830499428521977,x=5.293251364672678 color=blue,shape=circle,flag=0,i=49904,u=0.9813370136605244,v=0.2412061292989396,w=0.5155493502964813,x=2.4664163933370307 color=red,shape=square,flag=0,i=49915,u=0.6299961848109598,v=0.37991257366573217,w=0.5230685503353465,x=4.908148742650008 color=blue,shape=square,flag=0,i=49922,u=0.8946995377719672,v=0.4265926315097449,w=0.4755563409955688,x=4.833969711287121 color=green,shape=square,flag=0,i=49930,u=0.24435091727833202,v=0.36568556548539066,w=0.49237748726052044,x=6.5950096999354635 color=yellow,shape=square,flag=1,i=49936,u=0.784723979200047,v=0.23787312267889693,w=0.49236002963033426,x=4.1501652196983345 color=purple,shape=square,flag=0,i=49937,u=0.15037541434572543,v=0.27170422440342046,w=0.5202769160188874,x=2.560059325529736 color=red,shape=circle,flag=1,i=49970,u=0.6980210230311733,v=0.7687717344134983,w=0.4839139632527132,x=3.0855679084295855 color=purple,shape=square,flag=0,i=49978,u=0.24013578526811474,v=0.052583120901067204,w=0.5290824836170074,x=5.801432369222202 color=yellow,shape=square,flag=1,i=49988,u=0.8144026047496149,v=0.15221705202083158,w=0.4973058446896879,x=6.951027215968963 color=red,shape=circle,flag=0,i=49989,u=0.47106726757868045,v=0.4402812166328639,w=0.4783227272318673,x=3.699648225218383 color=red,shape=square,flag=1,i=50004,u=0.7013748052499557,v=0.4034270198619889,w=0.5184488550259196,x=5.244514686222172 color=blue,shape=triangle,flag=1,i=50020,u=0.13641370409351217,v=0.5569752815416528,w=0.4751818989713624,x=7.0289558697823 color=orange,shape=square,flag=1,i=50024,u=0.6336369540269946,v=0.6195238857519708,w=0.49519247470112354,x=4.405870614825129 color=green,shape=circle,flag=0,i=50028,u=0.5357953654384863,v=0.6397942233162857,w=0.5112498903114473,x=4.254470533167981 color=red,shape=triangle,flag=0,i=50051,u=0.7937042229731515,v=0.05461553114970319,w=0.46034394267968093,x=5.309459435753332 color=red,shape=circle,flag=1,i=50053,u=0.6323230935113741,v=0.5671463096195212,w=0.4765344192746495,x=4.4890074520913 color=red,shape=circle,flag=0,i=50056,u=0.7800008362808605,v=0.7688763034210087,w=0.4766676723120258,x=6.259660119945244 color=red,shape=triangle,flag=0,i=50058,u=0.4012062610071546,v=0.48857092809633007,w=0.4651137256663065,x=4.521746040865337 color=red,shape=square,flag=0,i=50059,u=0.030801477985402115,v=0.4450925298840568,w=0.5139462106327378,x=5.765384660292173 color=red,shape=triangle,flag=1,i=50079,u=0.9295633650851368,v=0.4465677743626929,w=0.4671581635207841,x=4.828768170947682 color=red,shape=triangle,flag=0,i=50088,u=0.8522830355755283,v=0.8886608847411923,w=0.47296385265409335,x=5.123325386070224 color=blue,shape=circle,flag=1,i=50089,u=0.5907974301602479,v=0.18177179958161316,w=0.5166142163134199,x=5.358514538446458 color=red,shape=triangle,flag=0,i=50096,u=0.17499534404260897,v=0.58696812782145,w=0.47315665875831786,x=6.369426659509508 color=red,shape=circle,flag=0,i=50101,u=0.8934191685801599,v=0.862206333993704,w=0.4759856470849733,x=5.591123147785623 color=green,shape=square,flag=0,i=50151,u=0.9414833951003599,v=0.015676759070376134,w=0.4871686239600665,x=5.303980068715217 color=red,shape=circle,flag=0,i=50168,u=0.9309035945390308,v=0.9106242351573676,w=0.4638384713939216,x=6.594051530574089 color=yellow,shape=triangle,flag=1,i=50170,u=0.2729382919576864,v=0.8078255799681063,w=0.524625596873308,x=3.315998376803011 color=purple,shape=square,flag=0,i=50197,u=0.9193696449117117,v=0.42274361686784134,w=0.5265756803732765,x=4.080435326801061 color=red,shape=triangle,flag=1,i=50203,u=0.7608180397008772,v=0.14755623277866015,w=0.4707708829577415,x=6.875011922449908 color=purple,shape=square,flag=0,i=50206,u=0.22877762481215724,v=0.015126352415622324,w=0.5243979356397273,x=4.394135416814222 color=red,shape=triangle,flag=0,i=50229,u=0.07102165539037897,v=0.36011768221354434,w=0.4674087737947362,x=5.549161024383484 color=green,shape=circle,flag=0,i=50232,u=0.3593507685450774,v=0.418392921869985,w=0.5042648553292465,x=3.450781184695579 color=green,shape=circle,flag=0,i=50248,u=0.6456594515825015,v=0.0820729993527618,w=0.5071303473202191,x=6.247656511766292 color=yellow,shape=square,flag=1,i=50260,u=0.4611922050817028,v=0.5227057126357607,w=0.4979592648374241,x=5.952420482443102 color=red,shape=circle,flag=0,i=50270,u=0.20317572332075828,v=0.14294055851428855,w=0.4638252773859487,x=4.972612818726757 color=red,shape=square,flag=0,i=50293,u=0.4135205195409214,v=0.820787494460942,w=0.5144877997763713,x=4.884023587702603 color=purple,shape=circle,flag=0,i=50303,u=0.2508543748504978,v=0.6545550343704586,w=0.4857092988276182,x=6.349567176386176 color=red,shape=square,flag=0,i=50315,u=0.47133303467784793,v=0.27019170581093654,w=0.5218652839478982,x=6.334716811976421 color=green,shape=square,flag=0,i=50335,u=0.5940252800697978,v=0.12868818822249917,w=0.4840542504282353,x=5.465215904507521 color=red,shape=circle,flag=0,i=50343,u=0.87343258156755,v=0.7959017908879359,w=0.4711587098487996,x=4.684253907654964 color=red,shape=circle,flag=1,i=50346,u=0.24791976966800988,v=0.27718956956891944,w=0.47359723553040084,x=5.930786830052889 color=red,shape=square,flag=0,i=50348,u=0.7704209906946302,v=0.9766476084478978,w=0.5306035676843213,x=4.8300351514815345 color=blue,shape=triangle,flag=0,i=50349,u=0.12077841555563795,v=0.5177387059804798,w=0.4927447961584418,x=5.1632064660837935 color=green,shape=triangle,flag=0,i=50358,u=0.02748574027015671,v=0.9390257598837265,w=0.4865971592096993,x=4.961063050270659 color=purple,shape=triangle,flag=1,i=50363,u=0.6449573732415836,v=0.016448394449012138,w=0.4894746347705716,x=6.767456867759313 color=purple,shape=triangle,flag=0,i=50373,u=0.8748874366356839,v=0.5525225999813276,w=0.48868205150023436,x=2.527605160718528 color=red,shape=circle,flag=1,i=50374,u=0.8384770103507838,v=0.7634889116444994,w=0.4805909340794253,x=3.4834652531802326 color=red,shape=triangle,flag=1,i=50375,u=0.4318928204558009,v=0.6542202452731594,w=0.4866972375699526,x=6.320080557404322 color=yellow,shape=triangle,flag=1,i=50380,u=0.914181904742404,v=0.10831237121364024,w=0.5279995087276649,x=4.79409855936342 color=red,shape=circle,flag=0,i=50386,u=0.4138647728689233,v=0.43369085609932245,w=0.477876823925084,x=2.931802613098213 color=yellow,shape=square,flag=1,i=50396,u=0.5770019752306095,v=0.9625358495098011,w=0.501579697019034,x=6.100638786348616 color=yellow,shape=triangle,flag=1,i=50398,u=0.2264710327058158,v=0.36792648004543194,w=0.5250291016834897,x=3.901075929475869 color=blue,shape=square,flag=1,i=50403,u=0.3901434825842841,v=0.9099402944692845,w=0.4753329600288781,x=6.026259464550773 color=green,shape=circle,flag=0,i=50410,u=0.9676110961220725,v=0.32560035996749737,w=0.5096600461327119,x=3.533407503347091 color=yellow,shape=triangle,flag=0,i=50413,u=0.9829340648416501,v=0.09425380501741532,w=0.5240357774773491,x=3.8940758506063893 color=blue,shape=triangle,flag=1,i=50428,u=0.8039263712443915,v=0.7808678035055574,w=0.49026108607687585,x=5.8131616109363895 color=red,shape=square,flag=1,i=50431,u=0.5686249541193413,v=0.08427637225553308,w=0.5212980597185892,x=4.121873837196647 color=red,shape=triangle,flag=0,i=50436,u=0.7823816716154223,v=0.8744433199210387,w=0.5015593604848051,x=5.213747870365629 color=blue,shape=triangle,flag=1,i=50438,u=0.936214699098151,v=0.7502086695391157,w=0.4914269574675811,x=6.422841798647538 color=red,shape=triangle,flag=0,i=50441,u=0.42185070776876454,v=0.935454711407329,w=0.5021998693452546,x=5.988321030275532 color=orange,shape=square,flag=0,i=50455,u=0.8191624785498617,v=0.19961659304327606,w=0.4884942916814342,x=4.771518554714185 color=red,shape=square,flag=0,i=50456,u=0.17787972292938847,v=0.29877209573782126,w=0.5170261095741998,x=4.1353044725898975 color=red,shape=circle,flag=0,i=50473,u=0.7477748677573409,v=0.7626437912143071,w=0.47563557399231954,x=5.270389103012094 color=green,shape=triangle,flag=0,i=50477,u=0.6347852199352854,v=0.24340025095082585,w=0.4922862352125309,x=5.347679834248751 color=red,shape=triangle,flag=1,i=50482,u=0.3275636265752947,v=0.8951212056020474,w=0.5043605603375156,x=3.841778909020895 color=yellow,shape=square,flag=1,i=50497,u=0.8166224444830922,v=0.9055235707927637,w=0.5112238278508051,x=2.2161110388844443 color=yellow,shape=square,flag=1,i=50504,u=0.08611223547352909,v=0.36884810020179126,w=0.5053756287265811,x=4.974547297943633 color=blue,shape=circle,flag=0,i=50513,u=0.2750202282858297,v=0.5486011607204487,w=0.5064998858474193,x=6.294227761632087 color=red,shape=square,flag=0,i=50519,u=0.588539036402016,v=0.27551625156498993,w=0.5116306945698845,x=2.611724496686124 color=red,shape=square,flag=1,i=50525,u=0.6128253921395171,v=0.01135418737128302,w=0.5061720101509078,x=4.540392968708135 color=green,shape=square,flag=0,i=50526,u=0.3306297578439983,v=0.8407643269350541,w=0.48159196442731406,x=3.430110660320924 color=green,shape=square,flag=0,i=50528,u=0.16334324636669795,v=0.5691464360401864,w=0.48579790641528486,x=7.19008906984642 color=green,shape=triangle,flag=0,i=50533,u=0.6828397190827553,v=0.12658167213610316,w=0.49482436605694474,x=5.443268320596251 color=green,shape=square,flag=0,i=50544,u=0.3735395457575743,v=0.38008622138529813,w=0.4891771276954551,x=2.967425323670074 color=red,shape=triangle,flag=0,i=50547,u=0.736551146944394,v=0.11089018058115052,w=0.5012885848312164,x=5.303607683320858 color=red,shape=square,flag=1,i=50570,u=0.8452166071431323,v=0.7887625111934684,w=0.5071417945021927,x=3.5467589172327636 color=red,shape=triangle,flag=1,i=50571,u=0.43094206855343187,v=0.44081630803458705,w=0.4911024024851045,x=6.311380888682606 color=red,shape=square,flag=1,i=50594,u=0.08081009994244115,v=0.5586230318460015,w=0.5112859672129461,x=5.085165032884066 color=red,shape=triangle,flag=1,i=50608,u=0.10203423701992886,v=0.7766591108703994,w=0.49517477362691437,x=4.450112745037305 color=red,shape=square,flag=0,i=50633,u=0.5410937033988072,v=0.2510818531169222,w=0.5044599965754888,x=5.278660762201601 color=red,shape=circle,flag=1,i=50637,u=0.014157126433777867,v=-0.004027854421870591,w=0.47373829241227233,x=5.285192702359463 color=red,shape=triangle,flag=0,i=50639,u=0.1922670519057157,v=0.57587148444939,w=0.50391478749328,x=5.000854990281784 color=yellow,shape=triangle,flag=1,i=50660,u=0.6296237959124499,v=0.5899745988128372,w=0.517909799510696,x=4.980515950846882 color=blue,shape=square,flag=1,i=50677,u=0.8547187217886532,v=0.9229455730501026,w=0.4901220363061899,x=4.533703416593276 color=yellow,shape=circle,flag=0,i=50689,u=0.5768862140768666,v=0.7558901950286872,w=0.48697198883306003,x=3.8232674225777665 color=yellow,shape=square,flag=1,i=50698,u=0.971536725234087,v=0.9450518727159516,w=0.5061549237388152,x=3.168331767532198 color=orange,shape=triangle,flag=0,i=50700,u=0.28680386527684365,v=0.3184288338577611,w=0.49452855678469665,x=6.147396811086654 color=red,shape=square,flag=0,i=50704,u=0.45266490200206344,v=0.3955399863580963,w=0.5021679105101176,x=4.94503393604431 color=orange,shape=triangle,flag=0,i=50711,u=0.12125241072670401,v=0.4334721789048095,w=0.49692716203328496,x=3.075795899765114 color=red,shape=triangle,flag=0,i=50729,u=0.964856578918815,v=0.8860718969310118,w=0.514272148743661,x=6.130095479879784 color=yellow,shape=square,flag=1,i=50739,u=0.3633251539871051,v=0.5074568071938828,w=0.5071066856553837,x=5.417927138716871 color=red,shape=square,flag=1,i=50750,u=0.3124765870373666,v=0.7219133866261176,w=0.4962271670480276,x=4.290170160861088 color=yellow,shape=square,flag=1,i=50758,u=0.08734406056523925,v=0.17852809819350712,w=0.5166375105122211,x=2.511772136948832 color=purple,shape=square,flag=0,i=50765,u=0.2050117710394752,v=0.9221666221421174,w=0.5261591475586372,x=4.905732135963039 color=purple,shape=circle,flag=0,i=50784,u=0.5822698640607734,v=0.3527475647113385,w=0.48512751962693074,x=5.835390056926741 color=red,shape=triangle,flag=0,i=50785,u=0.9305174271457112,v=0.7602509581240362,w=0.5231414221309666,x=2.8578020337344996 color=red,shape=triangle,flag=0,i=50789,u=0.187327103221966,v=0.6964874955141749,w=0.5261435676131992,x=6.07188426053185 color=blue,shape=square,flag=1,i=50800,u=0.7578075117552626,v=0.434013491880886,w=0.48528541370334394,x=4.301026866416596 color=red,shape=circle,flag=0,i=50811,u=0.360202616329356,v=0.35989583296453714,w=0.49469391987465694,x=5.750914798889595 color=green,shape=square,flag=0,i=50826,u=0.1742972776948868,v=0.2232399674915918,w=0.47896122181254464,x=4.097314615101047 color=blue,shape=circle,flag=0,i=50827,u=0.5469195471712751,v=0.19403983266208824,w=0.5048591096566778,x=5.351786075998247 color=red,shape=triangle,flag=0,i=50838,u=0.8810406285432517,v=0.0027700109965168584,w=0.5267194633766432,x=3.6120173107084903 color=blue,shape=square,flag=1,i=50845,u=0.39895306951164056,v=0.053627472726518244,w=0.486468159305982,x=6.151304292398898 color=red,shape=square,flag=0,i=50849,u=0.1649745341106975,v=0.1781266223193606,w=0.4916745291400111,x=3.7522383651757125 color=green,shape=square,flag=0,i=50854,u=0.5778926708652365,v=0.16607730098833684,w=0.47786807950058424,x=4.641665940177721 color=purple,shape=square,flag=0,i=50865,u=0.03627784238228193,v=0.5940492724105999,w=0.5228772281548504,x=5.058984253510755 color=red,shape=triangle,flag=0,i=50879,u=0.9325719184637344,v=0.3972164381795129,w=0.523127919360907,x=6.571071966992455 color=red,shape=square,flag=0,i=50889,u=0.1823879844505808,v=0.9563954291022192,w=0.49775451776549595,x=2.121362746111849 color=purple,shape=circle,flag=0,i=50899,u=0.6744252969731875,v=0.8193923678767696,w=0.4885552072650017,x=2.595243680465718 color=red,shape=square,flag=1,i=50901,u=0.25815993917916347,v=0.06698404561250404,w=0.5033331506287694,x=2.271143467981933 color=red,shape=circle,flag=0,i=50904,u=0.1662808713397611,v=0.11721358536358262,w=0.49366295580769554,x=5.294905346001182 color=red,shape=circle,flag=0,i=50908,u=0.7475619196584694,v=0.7972671824017802,w=0.49400066291491174,x=5.160671352112246 color=red,shape=circle,flag=0,i=50911,u=0.992138580521617,v=0.977367722873699,w=0.5011341489407665,x=3.201061839890589 color=red,shape=circle,flag=0,i=50922,u=0.039169533054587924,v=0.10311427748500852,w=0.4957241053053567,x=6.047754364706992 color=red,shape=circle,flag=0,i=50959,u=0.5243401483121392,v=0.47795125901178614,w=0.5068006845133315,x=3.7770510589842843 color=red,shape=triangle,flag=0,i=50965,u=0.07523305097130395,v=0.8897061152490147,w=0.539508843493083,x=7.540765986282469 color=purple,shape=square,flag=0,i=50970,u=0.42685899525327364,v=0.8953390837018341,w=0.5239683589028498,x=4.707022506956129 color=red,shape=triangle,flag=1,i=50987,u=0.9637357047681995,v=0.963395431752885,w=0.5474893266383639,x=4.165759331704324 color=red,shape=triangle,flag=0,i=50994,u=0.07604778139495338,v=0.8961047832069696,w=0.5434631546274579,x=7.366686883283737 color=red,shape=square,flag=1,i=50995,u=0.69381809847172,v=0.24744691498124527,w=0.519935360760861,x=5.943587449581854 color=blue,shape=square,flag=1,i=50998,u=0.49537193661809464,v=0.08421382928387078,w=0.49128711930137836,x=7.732990515327043 color=yellow,shape=circle,flag=0,i=51012,u=0.35706118260793507,v=0.20800478766753572,w=0.48387856554823144,x=6.41215738105116 color=red,shape=circle,flag=1,i=51042,u=0.27533745197489723,v=0.1861882844753225,w=0.5039689230385741,x=6.230298878889761 color=red,shape=circle,flag=1,i=51055,u=0.5852144832809227,v=0.6738964192500938,w=0.5117878801289304,x=4.025024404299064 color=red,shape=triangle,flag=1,i=51057,u=0.6949978607748388,v=0.38605836265153837,w=0.535714765566648,x=7.683622248851269 color=orange,shape=triangle,flag=1,i=51071,u=0.8514572419083051,v=0.01775620980069781,w=0.4988008648114351,x=6.407697305792211 color=yellow,shape=triangle,flag=1,i=51072,u=0.5332454839284702,v=0.34538628637341273,w=0.5076223082605272,x=3.7576930767491348 color=blue,shape=circle,flag=1,i=51085,u=0.28831946679475484,v=0.9426142171440738,w=0.4826060414357284,x=5.9178437469062075 color=red,shape=triangle,flag=0,i=51092,u=0.7432687563111365,v=0.24816456477361093,w=0.5336436786526519,x=6.268906491708289 color=red,shape=triangle,flag=0,i=51106,u=0.95076327141838,v=0.06102907057275764,w=0.5272385698543371,x=3.6220153746320896 color=yellow,shape=triangle,flag=1,i=51110,u=0.734429401776723,v=0.08681255269814003,w=0.5085256103522185,x=5.4296018246596605 color=green,shape=triangle,flag=0,i=51113,u=0.12073873284373415,v=0.2111256741059272,w=0.49595372881916666,x=4.387137440051554 color=red,shape=square,flag=0,i=51118,u=0.704956644305658,v=0.4129288557104568,w=0.5214573504064933,x=5.393620300743894 color=red,shape=square,flag=0,i=51125,u=0.6821975511075066,v=0.7576292055914602,w=0.5137454727526782,x=6.563979457042922 color=blue,shape=triangle,flag=1,i=51133,u=0.7771767707606433,v=0.9302996310508366,w=0.4990336886341269,x=6.26915908413303 color=yellow,shape=square,flag=1,i=51140,u=0.6527249980388876,v=0.2624021751911615,w=0.5074708115647842,x=5.033931426394182 color=red,shape=circle,flag=0,i=51148,u=0.543891709896823,v=0.6422704000603097,w=0.519852927370641,x=5.921018269669783 color=yellow,shape=square,flag=1,i=51151,u=0.22639103742944633,v=0.2039674475056904,w=0.5065845129816348,x=4.758396830137906 color=blue,shape=square,flag=1,i=51152,u=0.8433720715706001,v=0.24308815255090832,w=0.49285882606892506,x=3.6064714102151663 color=red,shape=square,flag=0,i=51163,u=0.799980754891858,v=0.6799130546145269,w=0.5014090624175368,x=6.8914482838827835 color=red,shape=circle,flag=0,i=51182,u=0.0697214069483626,v=0.05696404011110066,w=0.5176388102937045,x=5.924685542753775 color=red,shape=circle,flag=0,i=51193,u=0.4676920009759702,v=0.5156982936717904,w=0.5222328642547288,x=5.108520836739551 color=red,shape=triangle,flag=0,i=51206,u=0.18746042030333698,v=0.2976196106567721,w=0.5312470349489933,x=4.159487169856136 color=green,shape=triangle,flag=0,i=51230,u=0.6158260052253477,v=0.3381165203892189,w=0.4981138951863388,x=7.585826281397896 color=red,shape=triangle,flag=0,i=51243,u=0.7250515468609884,v=0.6714252427201001,w=0.534232736438725,x=5.394736420427244 color=yellow,shape=triangle,flag=1,i=51260,u=0.4372175152402803,v=0.4869712529203526,w=0.5287255912322614,x=6.308871170834088 color=red,shape=square,flag=0,i=51265,u=0.31317592540252326,v=0.16928466634882766,w=0.5039790043763738,x=2.9853889074712456 color=green,shape=circle,flag=0,i=51269,u=0.9230774740190772,v=0.9102907614134161,w=0.5001118696899801,x=3.087312240937056 color=blue,shape=square,flag=0,i=51287,u=0.40022732626088375,v=0.27857733007954943,w=0.4988001143923414,x=3.8197671450059456 color=red,shape=triangle,flag=0,i=51290,u=0.8521492228633735,v=0.7223744245087477,w=0.5293165352539642,x=4.540872189577106 color=blue,shape=square,flag=0,i=51293,u=0.9750029940517997,v=0.9273663459949385,w=0.502473702535987,x=5.516816961545174 color=red,shape=triangle,flag=0,i=51307,u=0.7280363455551779,v=0.71944250891602,w=0.525161269846493,x=6.136741866183258 color=blue,shape=triangle,flag=0,i=51310,u=0.5138301434957004,v=0.007465860710565764,w=0.5091601132214234,x=5.306584609441324 color=red,shape=square,flag=1,i=51313,u=0.25360397340016905,v=0.7596184841291769,w=0.503441766105535,x=3.2728298348514397 color=red,shape=circle,flag=1,i=51357,u=0.6089574330058657,v=0.7066778975020571,w=0.522595005501187,x=5.846864187833653 color=red,shape=square,flag=0,i=51359,u=0.7572955027907539,v=0.38647424182386725,w=0.4957004922973847,x=5.210097520620325 color=green,shape=circle,flag=0,i=51369,u=0.4817830628089391,v=0.6027335740507863,w=0.5032580622706814,x=4.31121473585327 color=red,shape=square,flag=0,i=51372,u=0.8367799277448835,v=0.893248422318739,w=0.4883538473632337,x=4.464249116935543 color=purple,shape=square,flag=0,i=51373,u=0.7582890502650408,v=0.013912614811439017,w=0.5032163061648038,x=3.71956072761866 color=red,shape=circle,flag=0,i=51387,u=0.8868907232412273,v=0.9337531047564203,w=0.5194825384577602,x=5.749002170752891 color=blue,shape=circle,flag=0,i=51393,u=0.09401551660922158,v=0.5942674303033858,w=0.48175661160014704,x=8.031876042411836 color=yellow,shape=triangle,flag=0,i=51416,u=0.6924826566113799,v=0.37030167277457804,w=0.5301359082109466,x=5.891079351783599 color=red,shape=circle,flag=0,i=51419,u=0.7377761536940319,v=0.695730071033105,w=0.5114317564302873,x=3.714138215471475 color=blue,shape=triangle,flag=1,i=51430,u=0.745608902246744,v=0.30967953282463523,w=0.5002873369293498,x=5.060823437635704 color=red,shape=square,flag=0,i=51444,u=0.7149626242410154,v=0.6562048459217744,w=0.47517747061956994,x=5.048681271352033 color=yellow,shape=square,flag=1,i=51454,u=0.9666352566308892,v=0.4657148381139695,w=0.4969257048462832,x=5.68680175222796 color=green,shape=circle,flag=0,i=51460,u=0.8739180628664743,v=0.8186240265101146,w=0.5096171654550162,x=5.554756335890901 color=blue,shape=triangle,flag=0,i=51466,u=0.2295939922656317,v=0.48774256860637055,w=0.500643008555975,x=5.169995559730423 color=red,shape=triangle,flag=0,i=51487,u=0.7070632037089664,v=0.6113899806497552,w=0.5319638771233706,x=5.656018133449397 color=yellow,shape=circle,flag=1,i=51496,u=0.8457454058738507,v=0.038506022431195164,w=0.48467959505292885,x=6.452126321803834 color=red,shape=square,flag=1,i=51497,u=0.9571629531842557,v=0.5934000722492766,w=0.477240565418295,x=6.915223217908465 color=red,shape=square,flag=0,i=51500,u=0.1409008588671108,v=0.2886739693807736,w=0.47477808567218116,x=6.479804087829895 color=purple,shape=square,flag=0,i=51506,u=0.07879827202449086,v=0.7998478180303038,w=0.5099257311877712,x=5.098968328679642 color=red,shape=triangle,flag=0,i=51508,u=0.8158332387476945,v=0.4125759281503657,w=0.5298669202110973,x=5.342442650318176 color=red,shape=square,flag=0,i=51510,u=0.06573612991136613,v=0.7210550855091418,w=0.4784826563413761,x=6.802494441659632 color=red,shape=triangle,flag=1,i=51513,u=0.9130059330296822,v=0.73222830445564,w=0.5307689734849879,x=4.944200424828462 color=red,shape=circle,flag=0,i=51515,u=0.13157020410358145,v=0.13621387114226108,w=0.5251944493406018,x=4.783001779186537 color=green,shape=circle,flag=0,i=51524,u=0.6628162237858021,v=0.40479096499092715,w=0.51241764571164,x=3.3464733559838975 color=yellow,shape=circle,flag=1,i=51529,u=0.925419097026505,v=0.2746848777858075,w=0.48238559584587537,x=5.267512415070324 color=blue,shape=square,flag=1,i=51531,u=0.9146713488587618,v=0.4187850192783583,w=0.5052031708516168,x=4.328362140085191 color=red,shape=square,flag=0,i=51535,u=0.6697448292840856,v=0.783196991717567,w=0.4778892605182499,x=5.78918627694162 color=purple,shape=circle,flag=0,i=51549,u=0.5907774720389022,v=0.30662430611178715,w=0.48452106044624255,x=4.005681698791068 color=yellow,shape=square,flag=1,i=51557,u=0.6021343317889419,v=0.42178288814581477,w=0.5031743727430278,x=4.555450673506873 color=red,shape=square,flag=0,i=51568,u=0.9265366061151674,v=0.7473004708913986,w=0.4685681296948298,x=5.730653200107484 color=blue,shape=square,flag=1,i=51570,u=0.6969250127124594,v=0.29974935620697174,w=0.501147366772824,x=5.5280671016604535 color=green,shape=square,flag=0,i=51571,u=0.4663865424840806,v=0.3522304620611182,w=0.46961666322142337,x=4.62020713183416 color=red,shape=square,flag=0,i=51576,u=0.040342718477054396,v=0.5770444692907012,w=0.46354678813532385,x=7.151619484057629 color=red,shape=square,flag=1,i=51578,u=0.37325844093423755,v=0.9655933365333579,w=0.45965020235125087,x=4.710096652461195 color=red,shape=triangle,flag=0,i=51602,u=0.16302825549586486,v=0.5629489752483217,w=0.5258733416212248,x=4.174808681613526 color=red,shape=square,flag=1,i=51604,u=0.41701707671758126,v=0.9175694687844062,w=0.4528007666201084,x=4.880351352714453 color=purple,shape=square,flag=0,i=51605,u=0.8668838541588562,v=0.3658084272985406,w=0.508964753158348,x=5.839488746618781 color=red,shape=square,flag=0,i=51632,u=0.21352378353543333,v=0.39800789753979215,w=0.44849862316922917,x=4.404420202833314 color=orange,shape=circle,flag=0,i=51638,u=0.359563850875649,v=0.44183971037529857,w=0.4992925798624336,x=5.681907003428397 color=purple,shape=triangle,flag=0,i=51643,u=0.7372586930970393,v=0.4683270726622283,w=0.48300142321406325,x=6.171657852147866 color=red,shape=triangle,flag=0,i=51648,u=0.7109240438085478,v=0.9875131220035608,w=0.5293964074967556,x=3.587950604511093 color=yellow,shape=triangle,flag=1,i=51655,u=0.04160554817225104,v=0.6458323941474418,w=0.5326931302379652,x=4.929764786347565 color=blue,shape=triangle,flag=1,i=51660,u=0.24312357880726554,v=0.4234675253364347,w=0.506592134408511,x=6.421022808537366 color=green,shape=triangle,flag=0,i=51662,u=0.9844801427550086,v=0.34546435167199774,w=0.4847984777789095,x=5.919735945055961 color=red,shape=circle,flag=1,i=51673,u=0.9340217238631677,v=0.8696812631639652,w=0.5109516438715346,x=3.7853018086657926 color=red,shape=triangle,flag=1,i=51674,u=0.15428409179982372,v=0.05503714886890332,w=0.5181907153123715,x=6.288109148235346 color=red,shape=square,flag=0,i=51684,u=0.9741380597538469,v=0.018224040848909384,w=0.4478676183228643,x=5.420496133850821 color=red,shape=circle,flag=1,i=51690,u=0.025187890752278563,v=0.011294397111185005,w=0.5148855518017568,x=6.167252011589368 color=yellow,shape=triangle,flag=1,i=51703,u=0.10946808840217115,v=0.9672780362266309,w=0.5305167810495778,x=3.6903066711320576 color=yellow,shape=square,flag=0,i=51711,u=0.5302403582175178,v=0.5556234547580495,w=0.5187480947758757,x=4.092016767656543 color=red,shape=circle,flag=0,i=51713,u=0.5114496655001461,v=0.6064810358189353,w=0.5154031721277909,x=6.285577951416542 color=red,shape=triangle,flag=0,i=51715,u=0.6354942383242759,v=0.426669705402724,w=0.5202883781268917,x=5.288680750052341 color=red,shape=square,flag=1,i=51743,u=0.35914104559973503,v=0.7004399526603373,w=0.44049459546058434,x=4.280750263509971 color=yellow,shape=triangle,flag=1,i=51745,u=0.5009413686804034,v=0.3124850966197281,w=0.5340891489458927,x=4.6986624047815555 color=yellow,shape=circle,flag=0,i=51760,u=0.7276510081242807,v=0.9518224172477104,w=0.4887173847508473,x=4.153208149862749 color=yellow,shape=circle,flag=1,i=51762,u=0.9227496226557272,v=0.023779447605717707,w=0.4917481819631273,x=4.855652911187007 color=yellow,shape=circle,flag=1,i=51786,u=0.1522396936270799,v=0.3653112653568289,w=0.499439773612058,x=4.769269389187627 color=blue,shape=circle,flag=1,i=51790,u=0.8409690881801342,v=0.5957994405022468,w=0.4768411624161044,x=5.321977867069022 color=red,shape=circle,flag=0,i=51796,u=0.815549154524023,v=0.8642599037138339,w=0.5286541659427871,x=4.823636519927796 color=yellow,shape=square,flag=1,i=51806,u=0.4922586095143108,v=0.1316807235586278,w=0.5135475132263021,x=5.5906743328888595 color=green,shape=circle,flag=0,i=51807,u=0.9141731688670173,v=0.46523676900830624,w=0.5077395025666828,x=4.984733037268875 color=red,shape=triangle,flag=0,i=51809,u=0.4476504009558353,v=0.511371954116705,w=0.5224315595765628,x=3.7472200693775193 color=red,shape=triangle,flag=0,i=51814,u=0.7316700800263944,v=0.2814708929184262,w=0.52716560361122,x=6.0596550534655025 color=blue,shape=triangle,flag=0,i=51821,u=0.6693424678597197,v=0.13615228256254785,w=0.4984427234099002,x=3.0604416817461346 color=red,shape=square,flag=0,i=51837,u=0.9224420773691162,v=0.9751573249131247,w=0.4489943719777926,x=5.94297121407402 color=yellow,shape=square,flag=1,i=51843,u=0.04529504186463029,v=0.2590147781397363,w=0.5106422562337171,x=5.05728472428805 color=red,shape=square,flag=0,i=51871,u=0.4746160331781294,v=0.8021430706647209,w=0.4625385235041772,x=5.667349691950577 color=blue,shape=triangle,flag=0,i=51894,u=0.03383802891646104,v=0.42815637397252193,w=0.5094869894118408,x=5.777914893347396 color=red,shape=triangle,flag=1,i=51903,u=0.8654831367586814,v=0.21572479821068768,w=0.5422185981143006,x=5.395930425008316 color=red,shape=triangle,flag=0,i=51905,u=0.7695971083833717,v=0.052280825893191496,w=0.5386653755584211,x=6.092696713021861 color=red,shape=circle,flag=1,i=51913,u=0.42948597579972114,v=0.3389620002510328,w=0.5401730116239795,x=5.563662675850257 color=green,shape=square,flag=0,i=51917,u=0.7509214654693568,v=0.9689894364551752,w=0.47791040325486656,x=6.245239164023682 color=red,shape=square,flag=0,i=51926,u=0.07061408599678454,v=0.7013437939967658,w=0.48334129428323963,x=4.630264980712026 color=blue,shape=square,flag=1,i=51930,u=0.03325950548093659,v=0.5302944639989472,w=0.49722888857410935,x=5.523889009938737 color=red,shape=square,flag=0,i=51935,u=0.6288367073509661,v=0.5077078229492129,w=0.491203682248102,x=5.850726350369469 color=green,shape=triangle,flag=0,i=51937,u=0.8110395177542319,v=0.8604262031679589,w=0.487705153062008,x=3.489013738388873 color=red,shape=square,flag=0,i=51942,u=0.6284513175632728,v=0.8151131978741082,w=0.49000450174459026,x=4.753297819942608 color=red,shape=circle,flag=0,i=51943,u=0.8129242840695271,v=0.7335036396443173,w=0.5388169192822269,x=6.662138084224714 color=red,shape=triangle,flag=1,i=51950,u=0.6562712647630088,v=0.10117226646252886,w=0.5347273826326017,x=4.715389834504573 color=yellow,shape=triangle,flag=1,i=51967,u=0.11678633023821827,v=0.31817702727595565,w=0.5295828201364886,x=6.99484642465337 color=orange,shape=triangle,flag=0,i=51969,u=0.847444056702493,v=0.14137315674846596,w=0.49954109149852305,x=2.276290051910118 color=yellow,shape=square,flag=1,i=51982,u=0.174803713787973,v=0.08488496442701599,w=0.5063942438660864,x=2.606033666755291 color=yellow,shape=circle,flag=1,i=51986,u=0.5961635979844375,v=0.7630965022578878,w=0.4960337158868015,x=2.6491961183101957 color=red,shape=circle,flag=1,i=51998,u=0.8582493166271552,v=0.7727476425494122,w=0.5311230162106322,x=5.312889792932207 color=purple,shape=circle,flag=1,i=52000,u=0.00567006363171263,v=0.5852174051876605,w=0.4894640623922945,x=5.292625739249313 color=purple,shape=circle,flag=0,i=52008,u=0.243996126869515,v=0.7263759935383862,w=0.4913110412259708,x=6.255297398939461 color=red,shape=circle,flag=0,i=52031,u=0.5721855743496772,v=0.49853084187327373,w=0.5181973759061438,x=2.881267732496781 color=red,shape=triangle,flag=1,i=52046,u=0.8474843575971506,v=0.7361385748930228,w=0.528659969589093,x=6.944834759284755 color=red,shape=square,flag=0,i=52051,u=0.32980154524681793,v=0.9032738530198129,w=0.48305224884247205,x=5.767735093424061 color=red,shape=square,flag=0,i=52056,u=0.4623444192072558,v=0.3231819396802911,w=0.4783859580866062,x=5.165766139792251 color=red,shape=triangle,flag=0,i=52057,u=0.20690559658118024,v=0.623127527189831,w=0.5196151241770021,x=4.9453116514137365 color=purple,shape=triangle,flag=0,i=52076,u=0.8503606604703292,v=0.944320244344703,w=0.48486955348868793,x=5.466595461830436 color=blue,shape=square,flag=0,i=52103,u=0.5916309128884358,v=0.6500248651392257,w=0.49722515289836583,x=2.3999301835688915 color=purple,shape=square,flag=1,i=52107,u=0.8588525745090811,v=0.5843369394083263,w=0.5179769913654745,x=5.148189365249592 color=yellow,shape=square,flag=1,i=52114,u=0.8035308395661721,v=0.18182376894894947,w=0.5102668719159817,x=5.331062198055418 color=red,shape=triangle,flag=1,i=52115,u=0.2933628823238398,v=0.92061551444389,w=0.5219463050710126,x=5.299837853971599 color=yellow,shape=square,flag=1,i=52132,u=0.2024318088395488,v=0.1394320792052257,w=0.5140818090996991,x=5.323213095294748 color=blue,shape=circle,flag=1,i=52134,u=0.42824825635872665,v=0.5800456605198561,w=0.4760686370564184,x=4.634730378496663 color=red,shape=circle,flag=0,i=52143,u=0.09344004386067162,v=0.1741478533803294,w=0.5163961184470978,x=5.249623109348912 color=red,shape=square,flag=0,i=52149,u=0.7377702473496214,v=0.009139564993111304,w=0.4772451858173621,x=5.60467292150054 color=purple,shape=square,flag=0,i=52161,u=0.9512453342353719,v=0.8974241044880871,w=0.513593758113193,x=5.327884430880368 color=red,shape=square,flag=0,i=52182,u=0.015522137619518928,v=0.1333793748758263,w=0.47904672116639313,x=4.424595485702003 color=yellow,shape=circle,flag=1,i=52204,u=0.506835411816078,v=0.5631128409246836,w=0.49955121464053626,x=6.202554467791249 color=green,shape=triangle,flag=0,i=52205,u=0.06877662852325894,v=0.9789054101866604,w=0.49464180611131714,x=5.387164967368842 color=blue,shape=square,flag=0,i=52207,u=0.9542380394771601,v=0.9317909386399712,w=0.4909167630766677,x=6.734110505802306 color=orange,shape=square,flag=1,i=52214,u=0.4496744014145475,v=0.08276236027308737,w=0.4904474474074879,x=3.5165422496211907 color=yellow,shape=square,flag=1,i=52215,u=0.8042519668244892,v=0.2884491811449357,w=0.5109149758546478,x=6.283163848995784 color=orange,shape=square,flag=1,i=52218,u=0.3157722639507038,v=0.9855837216848163,w=0.4951830337617732,x=5.800109088562794 color=red,shape=circle,flag=0,i=52224,u=0.1728389118875222,v=0.11317941482199459,w=0.5244091560274324,x=6.5046882900817735 color=green,shape=triangle,flag=0,i=52229,u=0.7110449580320812,v=0.20453192165165845,w=0.49406753937433706,x=4.387637067650083 color=red,shape=triangle,flag=0,i=52237,u=0.36817863186231503,v=0.1971623626175223,w=0.5136900170452919,x=5.262223682053327 color=purple,shape=square,flag=0,i=52239,u=0.08935440578648401,v=0.09541224385714908,w=0.5188380366660397,x=5.038428222166403 color=blue,shape=triangle,flag=1,i=52252,u=0.2741723615556444,v=0.3130824117898964,w=0.5088615413102675,x=5.308579482081409 color=red,shape=triangle,flag=1,i=52253,u=0.9779713440415067,v=0.774072177853534,w=0.5173897702213924,x=6.398087944020965 color=yellow,shape=triangle,flag=1,i=52254,u=0.5287946617232347,v=0.3550702617349799,w=0.5282529415454152,x=5.400839490006583 color=red,shape=circle,flag=0,i=52255,u=0.626097973401072,v=0.7195464329351933,w=0.5158838566430032,x=4.794338368698951 color=yellow,shape=circle,flag=1,i=52279,u=0.7355076761897926,v=0.3806420101754633,w=0.49416060379455956,x=4.901707450592116 color=yellow,shape=square,flag=1,i=52282,u=0.07807384582003984,v=0.4741934618504674,w=0.5077249877932862,x=3.672397302171495 color=red,shape=triangle,flag=0,i=52283,u=0.36701413886903766,v=0.9336745582297516,w=0.5148719445492097,x=5.20172509300433 color=red,shape=triangle,flag=0,i=52285,u=0.0990156465556884,v=0.8410130899820469,w=0.5178978077124209,x=2.6869689830232826 color=red,shape=square,flag=0,i=52295,u=0.6049304927234905,v=0.7047521436520041,w=0.5112053089842875,x=4.079730178367164 color=purple,shape=triangle,flag=0,i=52298,u=0.2149756915623633,v=0.04499740833010657,w=0.4802334336165949,x=4.836185658744674 color=red,shape=circle,flag=0,i=52302,u=0.7514101864560648,v=0.677243471681068,w=0.5010317275494404,x=3.099854727323486 color=red,shape=triangle,flag=1,i=52313,u=0.1881359166209492,v=0.9341342254208683,w=0.5139926118968475,x=5.393136232461404 color=purple,shape=triangle,flag=0,i=52335,u=0.15791960711376474,v=0.6277523258484347,w=0.4816148562296628,x=5.388935116172032 color=blue,shape=triangle,flag=1,i=52340,u=0.8733222646587602,v=0.9619949384736779,w=0.4943784949906086,x=3.767936800157836 color=red,shape=triangle,flag=0,i=52345,u=0.08029122420389123,v=0.1439100337383613,w=0.5170842898800784,x=4.6692782396176815 color=red,shape=triangle,flag=1,i=52356,u=0.5483739692174197,v=0.28495883359281626,w=0.5131064921453254,x=4.024261456239268 color=red,shape=triangle,flag=1,i=52358,u=0.1032619734864989,v=0.9513537765332436,w=0.5153764600639816,x=3.7232419605329703 color=red,shape=triangle,flag=1,i=52362,u=0.908869029920776,v=0.7826716483137682,w=0.5102402231247036,x=4.234752980025949 color=orange,shape=square,flag=0,i=52379,u=0.7936665112690795,v=0.8426748908373884,w=0.4919550296572429,x=4.22790829887506 color=red,shape=triangle,flag=0,i=52381,u=0.6475202334821598,v=0.8462874561504913,w=0.504320793146567,x=5.019939817941728 color=orange,shape=triangle,flag=1,i=52387,u=0.5749983657581855,v=0.35987460533527227,w=0.5001348947428911,x=3.884981002818647 color=green,shape=circle,flag=0,i=52418,u=0.67662155386729,v=0.6653302398275254,w=0.5029959671149259,x=3.856832287406202 color=purple,shape=circle,flag=0,i=52440,u=0.688424437348071,v=0.17308065202330447,w=0.4865435847528421,x=5.154124046467038 color=red,shape=triangle,flag=0,i=52468,u=0.6135810074552136,v=0.2764450176273855,w=0.5121002409489613,x=5.59186554887647 color=red,shape=square,flag=0,i=52483,u=0.8733657386221578,v=0.6541739165106865,w=0.4906602023294829,x=4.9125395426848675 color=red,shape=circle,flag=0,i=52498,u=0.6831138147452418,v=0.5904990386922024,w=0.5050111802695261,x=3.3111095677596736 color=yellow,shape=square,flag=1,i=52502,u=0.9064391998762573,v=0.9888162512981494,w=0.49853393097373594,x=5.620736021863709 color=red,shape=circle,flag=1,i=52518,u=0.077649783869285,v=0.11628539212179528,w=0.5107983708588363,x=5.932608047497987 color=blue,shape=square,flag=1,i=52527,u=0.1301495953740337,v=0.5556767639288793,w=0.49003740246433636,x=5.367606120411192 color=blue,shape=triangle,flag=0,i=52532,u=0.000881025170573424,v=0.5517627694496242,w=0.49305724181885535,x=6.371797048974764 color=red,shape=triangle,flag=0,i=52547,u=0.23040699709948176,v=0.07246442447096735,w=0.5187151376071768,x=3.716213167206817 color=red,shape=triangle,flag=0,i=52556,u=0.9830142148411835,v=0.02031325964142372,w=0.5232400897178063,x=4.994413026228556 color=purple,shape=square,flag=0,i=52569,u=0.49564524082536643,v=0.6234083323619819,w=0.5216969741068767,x=6.5731584112566575 color=red,shape=triangle,flag=0,i=52570,u=0.5276478009697795,v=0.1126643886907388,w=0.5205912546090715,x=4.219592271352261 color=yellow,shape=circle,flag=1,i=52573,u=0.2959161260074732,v=0.10868429966375115,w=0.5006732080078359,x=3.161686835298362 color=yellow,shape=square,flag=0,i=52575,u=0.5757324905306846,v=0.663209725308498,w=0.4964954775303364,x=4.477070389969837 color=red,shape=square,flag=1,i=52576,u=0.6043095647210869,v=0.3042736836391958,w=0.48075738645409366,x=6.806321430196472 color=yellow,shape=triangle,flag=1,i=52593,u=0.07387916169910536,v=0.3061990051362209,w=0.519022887342692,x=5.982167038244008 color=green,shape=circle,flag=0,i=52598,u=0.13040318272752338,v=0.05666980978760916,w=0.5029184904909978,x=3.456664689530404 color=red,shape=square,flag=0,i=52606,u=0.04512710904729755,v=0.1467837302768299,w=0.4869756818027536,x=3.9934943061059704 color=blue,shape=triangle,flag=1,i=52609,u=0.9084407078949894,v=0.7424532654182623,w=0.48855863503507835,x=3.080847988790612 color=red,shape=square,flag=1,i=52614,u=0.37869001838466576,v=0.8993972654399166,w=0.48922243951821953,x=3.917005683291519 color=purple,shape=square,flag=0,i=52617,u=0.5907293854809421,v=0.8731493250391283,w=0.5243215380601083,x=5.696455073689237 color=blue,shape=square,flag=1,i=52631,u=0.7837074900310228,v=0.312303888278461,w=0.485149227601041,x=4.497896357070947 color=red,shape=square,flag=1,i=52646,u=0.39986058026787674,v=0.00873367373951961,w=0.49260168125349185,x=5.247702567202491 color=purple,shape=square,flag=0,i=52652,u=0.08227296864945932,v=0.0027498863046688804,w=0.5276786142546909,x=4.8131204967338865 color=orange,shape=square,flag=1,i=52676,u=0.3647329727753311,v=0.9760225945493155,w=0.4993673587267736,x=3.404664579955616 color=red,shape=triangle,flag=0,i=52683,u=0.22436709765289364,v=0.2634707491686573,w=0.5116341805377761,x=6.7641946273908955 color=blue,shape=triangle,flag=1,i=52687,u=0.7210912614188684,v=0.2687333044849789,w=0.4787611535711431,x=5.073167960937283 color=red,shape=circle,flag=0,i=52691,u=0.5222832712871655,v=0.4309615584864218,w=0.5189220366355285,x=4.2400120909055685 color=orange,shape=triangle,flag=1,i=52707,u=0.9214487852161317,v=0.09343660662775943,w=0.5012255358092673,x=3.7225883213157878 color=purple,shape=square,flag=0,i=52708,u=0.14643777542001046,v=0.08700818141116695,w=0.5292311920140658,x=5.016131054958602 color=red,shape=square,flag=1,i=52709,u=0.08897300301121103,v=0.7814700000383876,w=0.49895900444216007,x=2.2865095711177674 color=red,shape=square,flag=0,i=52772,u=0.5786910734396149,v=0.05729958812990188,w=0.4933345442226914,x=3.386828921534422 color=red,shape=square,flag=0,i=52785,u=0.03581062837884763,v=0.5926768901310614,w=0.4870356571675463,x=5.656973762384574 color=blue,shape=triangle,flag=1,i=52787,u=0.22066838727428473,v=0.9724585787430184,w=0.4778306446037541,x=3.6993194051344243 color=red,shape=circle,flag=0,i=52810,u=0.9339593499075624,v=0.8543023949591325,w=0.5286370929643673,x=5.377735499739121 color=green,shape=circle,flag=0,i=52812,u=0.02781734924224788,v=0.20488543547914717,w=0.5192762517758809,x=2.633093512339452 color=red,shape=circle,flag=1,i=52833,u=0.03451473868527677,v=-0.024521956623567445,w=0.5304534885529195,x=5.487298960378328 color=blue,shape=square,flag=0,i=52846,u=0.7814824453356772,v=0.7248701534651746,w=0.4935167498542997,x=6.4853693993086665 color=green,shape=square,flag=1,i=52847,u=0.3808836987911267,v=0.11601888960788242,w=0.4981033152354464,x=5.340503985443173 color=green,shape=circle,flag=0,i=52850,u=0.6658425480876631,v=0.06879813186716244,w=0.5193911647959466,x=5.66886374349196 color=yellow,shape=square,flag=1,i=52891,u=0.9432256294057052,v=0.51461277320613,w=0.48421920005995467,x=5.1984849938911 color=blue,shape=square,flag=0,i=52895,u=0.3175335461687372,v=0.6642955604895936,w=0.48825253654031747,x=4.0172336283039485 color=yellow,shape=square,flag=1,i=52903,u=0.7294708569272657,v=0.6834369198111935,w=0.48395310346914544,x=5.029639996887844 color=red,shape=circle,flag=1,i=52925,u=0.3888344685340427,v=0.36685711824773165,w=0.5286078650116836,x=5.6297440077353365 color=yellow,shape=square,flag=1,i=52926,u=0.40288126706358307,v=0.4725773225275295,w=0.4900308463285277,x=4.8423480629276545 color=purple,shape=triangle,flag=0,i=52930,u=0.6243223554286969,v=0.01674605079475988,w=0.48784423798029597,x=5.813101129306321 color=red,shape=triangle,flag=0,i=52950,u=0.4137729289410823,v=0.5381877940494273,w=0.5016704145897024,x=5.937617197460704 color=purple,shape=square,flag=0,i=52951,u=0.7721308028509409,v=0.16645166096201747,w=0.5343470851456465,x=5.924206524129342 color=red,shape=square,flag=0,i=52954,u=0.7152566018456312,v=0.9461356788286511,w=0.5057789928561544,x=2.803100018283603 color=yellow,shape=triangle,flag=1,i=52960,u=0.007166004664540759,v=0.1468412366931977,w=0.5378776097852618,x=4.586780118277933 color=yellow,shape=circle,flag=1,i=52981,u=0.5173462993422445,v=0.10318929741795924,w=0.5038983234708592,x=3.0644798227158656 color=red,shape=circle,flag=0,i=52997,u=0.09245310798264372,v=0.08668137004811208,w=0.5220291354834344,x=6.290938076708495 color=green,shape=circle,flag=0,i=53021,u=0.8577994488156397,v=0.5888623404030089,w=0.5152289064080161,x=5.337059411360258 color=red,shape=triangle,flag=0,i=53029,u=0.0427220406033213,v=0.5996915527020832,w=0.5078774477298722,x=5.290998502312482 color=green,shape=square,flag=0,i=53041,u=0.043570248003231504,v=0.5701860157154788,w=0.48611390263711507,x=5.246505110710838 color=green,shape=circle,flag=1,i=53042,u=0.04875603581062338,v=0.15194792481958064,w=0.5147169283788311,x=3.7735864371362666 color=yellow,shape=square,flag=1,i=53043,u=0.2558796969555164,v=0.23811733022208437,w=0.4856843295730806,x=2.203984897937227 color=red,shape=square,flag=0,i=53047,u=0.15046233620422622,v=0.8317631511838962,w=0.5131889828276508,x=3.926268570051162 color=blue,shape=square,flag=1,i=53061,u=0.995737268290847,v=0.9774029199356878,w=0.49361106199859145,x=5.444058955485115 color=purple,shape=triangle,flag=0,i=53072,u=0.9413442697917878,v=0.6860665086684452,w=0.48544826702059524,x=4.591111804379497 color=red,shape=circle,flag=0,i=53121,u=0.9835676379232661,v=0.9433763581069705,w=0.518576456967524,x=5.901150831764511 color=red,shape=triangle,flag=1,i=53126,u=0.6105149066369585,v=0.9220560324294793,w=0.5130380585566496,x=5.928863577445601 color=purple,shape=square,flag=1,i=53143,u=0.12530813144984565,v=0.3370136990801531,w=0.5331873228500835,x=4.672746340928424 color=yellow,shape=triangle,flag=1,i=53154,u=0.41125103363273674,v=0.6822319800697034,w=0.5212070340660843,x=2.9674899677127056 color=green,shape=triangle,flag=0,i=53162,u=0.028160872816518467,v=0.2362809112646198,w=0.5073427834924018,x=5.441330972245684 color=green,shape=triangle,flag=1,i=53168,u=0.9190637778749419,v=0.19669683997132703,w=0.5115504561103202,x=4.732555979100018 color=blue,shape=circle,flag=1,i=53172,u=0.6720223230340686,v=0.5738592422850695,w=0.4806935362352563,x=3.202817196382547 color=red,shape=circle,flag=1,i=53175,u=0.2953529994616553,v=0.22808842205456112,w=0.51039702482179,x=3.1812281832600298 color=blue,shape=square,flag=1,i=53185,u=0.2219380141638697,v=0.702824526761126,w=0.49697554673650995,x=6.847691045252694 color=purple,shape=square,flag=0,i=53207,u=0.11425260785878544,v=0.49571714997225946,w=0.5307216360443998,x=4.4708469947821134 color=red,shape=triangle,flag=0,i=53211,u=0.04347576894022498,v=0.7642076887432399,w=0.5085319918983586,x=6.590880005622975 color=red,shape=circle,flag=0,i=53230,u=0.7917571475278645,v=0.8713469392168643,w=0.5107429288468274,x=3.9649950733894372 color=red,shape=circle,flag=1,i=53236,u=0.4661241690495891,v=0.3895805149926871,w=0.5133996307698135,x=6.269463050471795 color=red,shape=circle,flag=0,i=53239,u=0.6853093986187075,v=0.6712156691019893,w=0.5120264432661308,x=6.595980582926875 color=red,shape=square,flag=1,i=53254,u=0.9524026372334484,v=0.7514457850648184,w=0.513176785350573,x=3.2079296611637993 color=red,shape=circle,flag=0,i=53256,u=0.3023023021720317,v=0.26244344172585254,w=0.5151187899783981,x=4.576705251242261 color=yellow,shape=square,flag=1,i=53264,u=0.4008409982664709,v=0.5280681718870366,w=0.4876154177872036,x=4.986710582672633 color=red,shape=square,flag=0,i=53269,u=0.6041363127894107,v=0.4585492322173157,w=0.5106007139585819,x=5.6615486864247435 color=blue,shape=triangle,flag=0,i=53272,u=0.9335538133176621,v=0.2848253193452338,w=0.46996588658449084,x=3.4058035578959767 color=purple,shape=triangle,flag=0,i=53287,u=0.21012403509584532,v=0.8397203498651571,w=0.5008524047640063,x=6.7952218460292855 color=red,shape=triangle,flag=0,i=53292,u=0.3429024667053624,v=0.47929843531181116,w=0.4828950353937109,x=6.383553259773147 color=red,shape=triangle,flag=1,i=53295,u=0.18515384746521146,v=0.2532353230054266,w=0.4828736091474691,x=2.2107331839070894 color=red,shape=square,flag=0,i=53296,u=0.054102905751847286,v=0.8200177614071831,w=0.509151958879271,x=5.453649617983902 color=yellow,shape=square,flag=1,i=53327,u=0.5772437567081796,v=0.5598269088393589,w=0.49016335121085813,x=4.931818467865426 color=red,shape=square,flag=0,i=53331,u=0.3775906125856252,v=0.2277540602251794,w=0.517292396112212,x=4.786477715205364 color=red,shape=circle,flag=0,i=53337,u=0.453345289834169,v=0.48601281854322814,w=0.5254787905876568,x=3.5330797913065966 color=red,shape=circle,flag=1,i=53338,u=0.1591571590783415,v=0.11740867795278917,w=0.5218605514830672,x=5.5504999324619275 color=purple,shape=square,flag=0,i=53354,u=0.28528270410924894,v=0.7661302410766112,w=0.5385840766003268,x=5.740480574967503 color=red,shape=triangle,flag=1,i=53357,u=0.5066315005500213,v=0.04587541647680238,w=0.4812503658479811,x=4.754679006982214 color=yellow,shape=square,flag=1,i=53362,u=0.6637704535508312,v=0.5407507500216353,w=0.4976937531795198,x=5.925247151519417 color=red,shape=square,flag=1,i=53383,u=0.39219176534827616,v=0.5476639535947663,w=0.5230376941274663,x=5.474048906674746 color=red,shape=circle,flag=1,i=53391,u=0.9137916852709447,v=0.9478944588313902,w=0.5138826744560256,x=5.757539560086493 color=red,shape=triangle,flag=0,i=53415,u=0.48092043523977046,v=0.41546775043329853,w=0.4747383481844223,x=2.9233854855550976 color=blue,shape=square,flag=0,i=53426,u=0.8701931550778623,v=0.7792656037809297,w=0.502850839995768,x=4.763677718881973 color=red,shape=triangle,flag=1,i=53444,u=0.37193805384657874,v=0.10708982250113408,w=0.47867695348317274,x=4.347290549442402 color=purple,shape=circle,flag=0,i=53450,u=0.521272069501937,v=0.43007771234635894,w=0.48909289524535227,x=4.740719352360605 color=purple,shape=circle,flag=0,i=53458,u=0.9050968120029785,v=0.09421191810403817,w=0.48511453320140385,x=4.011780724389438 color=red,shape=triangle,flag=1,i=53479,u=0.619441644216284,v=0.2256311772293219,w=0.4832298027114756,x=2.7386664317490106 color=red,shape=square,flag=0,i=53503,u=0.7139285914828621,v=0.3310777579816968,w=0.5137639984652621,x=4.6206541558997705 color=red,shape=square,flag=0,i=53512,u=0.6643624860989904,v=0.580030202494807,w=0.5118441674036535,x=4.916144162544415 color=purple,shape=circle,flag=0,i=53513,u=0.791819631623404,v=0.7956857548926921,w=0.48561619093919245,x=4.379655863178406 color=red,shape=square,flag=0,i=53515,u=0.16980860287951083,v=0.28553949719489335,w=0.5148676871963515,x=4.758698950147402 color=yellow,shape=circle,flag=1,i=53538,u=0.7307990296707214,v=0.7879215454293108,w=0.503632811970671,x=3.20953410050493 color=yellow,shape=square,flag=1,i=53554,u=0.7963479367054498,v=0.49705860805537194,w=0.49680589593806285,x=6.520699023429686 color=green,shape=triangle,flag=0,i=53559,u=0.9908112170890696,v=0.04601082055484296,w=0.5220844009523338,x=5.5664733389094465 color=green,shape=square,flag=0,i=53562,u=0.9769859281555444,v=0.35172539040876183,w=0.5067621341649307,x=4.3539870595965295 color=blue,shape=square,flag=0,i=53565,u=0.8706555987332689,v=0.757912235267193,w=0.5138498986973996,x=5.380743054745994 color=red,shape=circle,flag=0,i=53567,u=0.0024676387987249138,v=0.05083429612273676,w=0.5039487592076144,x=2.619398230450757 color=yellow,shape=circle,flag=1,i=53586,u=0.7297528117486306,v=0.14599466772121383,w=0.5026238525575261,x=5.233726078552931 color=red,shape=triangle,flag=0,i=53587,u=0.5697980727474699,v=0.05589927899812319,w=0.49751109178158837,x=3.8853532836870808 color=red,shape=square,flag=0,i=53597,u=0.2535867038890457,v=0.8688668103097184,w=0.49095495064502237,x=3.4563482752750816 color=red,shape=circle,flag=0,i=53602,u=0.8734679331491012,v=0.9155012385468725,w=0.49792935205451705,x=5.866269132508942 color=red,shape=circle,flag=0,i=53605,u=0.7170488710600035,v=0.6226868750484842,w=0.49682420642292735,x=5.324163770643963 color=orange,shape=square,flag=0,i=53610,u=0.9988853487546249,v=0.15523943034690246,w=0.48807563823534394,x=2.7538513348864178 color=red,shape=triangle,flag=0,i=53645,u=0.057152019703461954,v=0.7930713948164714,w=0.49888824941667814,x=5.510583133411919 color=yellow,shape=square,flag=1,i=53659,u=0.7167298708974419,v=0.4536367065782505,w=0.4997763573482059,x=3.8338036542606724 color=red,shape=triangle,flag=0,i=53670,u=0.6589006128983669,v=0.3352318775626706,w=0.4964646181879287,x=4.393022798543047 color=red,shape=square,flag=0,i=53674,u=0.5666299747228207,v=0.3548557720214315,w=0.49798441027119517,x=6.219337458737967 color=yellow,shape=circle,flag=1,i=53677,u=0.6746074516906357,v=0.8039286022479225,w=0.5051494977434232,x=5.764614291344667 color=orange,shape=triangle,flag=1,i=53680,u=0.4431316693540571,v=0.3405488363333343,w=0.5128223130959686,x=3.9888930729618792 color=red,shape=square,flag=0,i=53685,u=0.11657230495747417,v=0.45547628044542365,w=0.5084283018333108,x=6.669178540369981 color=red,shape=triangle,flag=1,i=53689,u=0.21441583621150195,v=0.6239369274123343,w=0.5079931155014976,x=4.538675252448592 color=green,shape=triangle,flag=0,i=53699,u=0.28462824993024594,v=0.07155955139375159,w=0.5151259593399791,x=6.021502904209325 color=red,shape=triangle,flag=0,i=53702,u=0.18530003172725173,v=0.1850664287997309,w=0.507149064091653,x=3.7370196359860515 color=purple,shape=triangle,flag=0,i=53720,u=0.07745692851639341,v=0.23790525694735942,w=0.48096875726637234,x=5.120135770251367 color=red,shape=square,flag=0,i=53746,u=0.840797681742386,v=0.29353690430270774,w=0.5145304051265439,x=3.5203394220279804 color=red,shape=square,flag=0,i=53749,u=0.4815363338880647,v=0.5299469809870514,w=0.5155044425846441,x=4.587977751351524 color=red,shape=square,flag=0,i=53752,u=0.1163048156377906,v=0.21960117297230908,w=0.5134399107386405,x=5.435305480649757 color=yellow,shape=circle,flag=1,i=53761,u=0.005122263098804036,v=0.6574735360653137,w=0.5103057475906442,x=4.951171156869705 color=red,shape=square,flag=0,i=53810,u=0.964138306044566,v=0.4241014236028319,w=0.5288574667285163,x=4.780194606008348 color=yellow,shape=square,flag=1,i=53817,u=0.565635480367983,v=0.8704653766551137,w=0.4973676075069901,x=5.8204865981743685 color=blue,shape=circle,flag=1,i=53827,u=0.34908840275893527,v=0.5179528026928115,w=0.48140705231662767,x=4.860777277169732 color=yellow,shape=square,flag=1,i=53835,u=0.10507907315420106,v=0.0007109695568577878,w=0.4922016811946543,x=5.836957315329459 color=red,shape=circle,flag=1,i=53843,u=0.42044755874971507,v=0.3210808861558468,w=0.4996128360671105,x=6.604429307955042 color=blue,shape=triangle,flag=0,i=53860,u=0.405274913883538,v=0.9975527859615919,w=0.47049502937321885,x=6.417363687440029 color=blue,shape=square,flag=1,i=53863,u=0.88346768840092,v=0.8838828523547749,w=0.5209974150890856,x=6.272164759081348 color=red,shape=square,flag=0,i=53866,u=0.24774929573044369,v=0.7029593322064707,w=0.5152669699524176,x=5.195079854140742 color=red,shape=triangle,flag=1,i=53869,u=0.9935353142906873,v=0.142579247897212,w=0.5106771319334639,x=5.444897893078017 color=green,shape=circle,flag=0,i=53873,u=0.8682771446512328,v=0.2466008572375623,w=0.5085008460973088,x=4.134816763927122 color=red,shape=triangle,flag=1,i=53903,u=0.0417837627871912,v=0.8544738543752746,w=0.5097579661620304,x=6.503285475394995 color=red,shape=square,flag=1,i=53908,u=0.254612181128988,v=0.7919180344301464,w=0.5225309978797998,x=5.028268149079994 color=orange,shape=circle,flag=0,i=53924,u=0.6330475778581115,v=0.998475130432018,w=0.5014512347016831,x=7.461311238284132 color=green,shape=triangle,flag=0,i=53929,u=0.20542197996154754,v=0.9883916746417903,w=0.5131160034219836,x=5.504788980700801 color=red,shape=circle,flag=1,i=53939,u=0.7714809149922723,v=0.7469712349863759,w=0.5090878532311098,x=5.905824916190011 color=red,shape=circle,flag=0,i=53941,u=0.9539246515732512,v=0.9995384958625388,w=0.5115435117396863,x=6.238837197673072 color=yellow,shape=circle,flag=1,i=53950,u=0.16863623405708605,v=0.8500771517127843,w=0.504955747996841,x=6.428143152605753 color=red,shape=circle,flag=0,i=53956,u=0.8864290977691268,v=0.8279829613181919,w=0.5087521850055658,x=2.849052445007865 color=blue,shape=triangle,flag=1,i=53968,u=0.12066366003229945,v=0.6913183985162518,w=0.4754819404248616,x=4.859523758020624 color=purple,shape=triangle,flag=0,i=53969,u=0.7906059108618957,v=0.3675018760374894,w=0.4934992714294153,x=4.32890628174515 color=red,shape=circle,flag=1,i=53974,u=0.4955425961672869,v=0.4443882860346085,w=0.5056892565205361,x=4.165998830530639 color=red,shape=triangle,flag=0,i=53986,u=0.6668311049269761,v=0.24200514606006396,w=0.5108715503568901,x=6.3833822487873695 color=red,shape=square,flag=0,i=53994,u=0.10800887067401232,v=0.7569626287163034,w=0.5307660611121297,x=4.26824794541685 color=purple,shape=circle,flag=0,i=53996,u=0.08752767189934352,v=0.5511965878076084,w=0.47916876612626685,x=6.509316389088983 color=purple,shape=square,flag=0,i=54002,u=0.2789941535351438,v=0.9319339117099625,w=0.5097019006700386,x=5.9798739676589845 color=red,shape=triangle,flag=0,i=54012,u=0.8345082860853451,v=0.4179764553333968,w=0.5269146516236533,x=6.864484717771276 color=red,shape=square,flag=1,i=54013,u=0.9491144634945626,v=0.7621112475028795,w=0.5332520907479015,x=4.388301774638622 color=yellow,shape=triangle,flag=1,i=54041,u=0.7230902638375496,v=0.08437511339144799,w=0.4972306924507012,x=3.4142817598659043 color=red,shape=circle,flag=1,i=54050,u=0.18995478119414777,v=0.14879476624196236,w=0.4998992043066113,x=2.5810167412681726 color=red,shape=circle,flag=0,i=54061,u=0.2491793966332707,v=0.20804943966535303,w=0.4988335601325387,x=4.098066625603907 color=red,shape=triangle,flag=0,i=54067,u=0.6228668840765779,v=0.9135500394213574,w=0.5223329798324069,x=5.783153356283957 color=green,shape=square,flag=0,i=54076,u=0.23849768154569584,v=0.17328522232309207,w=0.5081790134619015,x=6.252168083218025 color=green,shape=circle,flag=0,i=54084,u=0.414321460415063,v=0.9651694664754853,w=0.5056045333529777,x=2.409679215791203 color=red,shape=square,flag=0,i=54098,u=0.6343206916621129,v=0.5981898159489216,w=0.5369018644914485,x=3.681971461097613 color=blue,shape=triangle,flag=0,i=54112,u=0.700617127347313,v=0.3137516432711571,w=0.4786212022287465,x=5.531785479928818 color=blue,shape=square,flag=0,i=54141,u=0.34908693292224724,v=0.15605048233966923,w=0.5155216268127413,x=4.7536894652426644 color=green,shape=square,flag=0,i=54164,u=0.4978177033542378,v=0.36864351427063813,w=0.5088662785366886,x=3.3946087933985982 color=purple,shape=triangle,flag=0,i=54165,u=0.4823345660859609,v=0.4339435241650227,w=0.4966658912054024,x=7.244160447208348 color=red,shape=circle,flag=1,i=54169,u=0.7778160951427734,v=0.7128511887786196,w=0.5204318295919914,x=2.6504079688494886 color=yellow,shape=square,flag=1,i=54170,u=0.25551628884221045,v=0.7592248875502413,w=0.49378170743512373,x=5.304759077576299 color=yellow,shape=square,flag=1,i=54171,u=0.853622259205767,v=0.39804044140495753,w=0.4970022667226532,x=5.6936059209304135 color=red,shape=square,flag=0,i=54184,u=0.13857295136544323,v=0.15635585931005902,w=0.5360771564634886,x=4.867330183520015 color=red,shape=circle,flag=0,i=54186,u=0.9673658593119613,v=1.0451821155548664,w=0.5229923818064347,x=6.950140295239923 color=purple,shape=triangle,flag=0,i=54191,u=0.9110876197948057,v=0.537068970516768,w=0.49858273655801005,x=6.4228667834720525 color=yellow,shape=square,flag=1,i=54210,u=0.29733161997679036,v=0.41907120074265025,w=0.49883577976743254,x=6.939327349112527 color=blue,shape=square,flag=0,i=54214,u=0.7722959662108736,v=0.9980012276147741,w=0.528609477304339,x=3.639299837632295 color=red,shape=triangle,flag=0,i=54217,u=0.1634861686411484,v=0.33120837760256094,w=0.526744101766661,x=6.4919450728932775 color=red,shape=triangle,flag=0,i=54220,u=0.3519224403652488,v=0.32008494980496593,w=0.531310657963342,x=4.048240560651588 color=blue,shape=square,flag=1,i=54227,u=0.976602396487405,v=0.8842595703606668,w=0.5289619584948578,x=4.843158687731266 color=red,shape=triangle,flag=0,i=54237,u=0.6460095812313906,v=0.8544900861009376,w=0.521158482879284,x=4.022131751280413 color=red,shape=square,flag=0,i=54254,u=0.905173553936471,v=0.5355582083568032,w=0.5393257506448982,x=4.255180427409536 color=green,shape=triangle,flag=0,i=54274,u=0.3876576931416468,v=0.3918596665178963,w=0.5132365830335854,x=5.784765127245741 color=blue,shape=circle,flag=0,i=54285,u=0.852766370520137,v=0.8135878645805505,w=0.4851581296740543,x=3.759177559170018 color=red,shape=circle,flag=1,i=54286,u=0.3995101891937829,v=0.3733543220280349,w=0.540102136343489,x=5.423881521985339 color=purple,shape=square,flag=0,i=54289,u=0.08869490426013016,v=0.878807563006648,w=0.5097486539846641,x=4.036375095266521 color=red,shape=square,flag=0,i=54290,u=0.5206101225107433,v=0.8711000701138165,w=0.5360211371635281,x=4.857617416535469 color=blue,shape=square,flag=1,i=54295,u=0.08819930606664927,v=0.5197551678746145,w=0.5289568825254514,x=7.3411078001010575 color=red,shape=triangle,flag=0,i=54331,u=0.564201189521744,v=0.3152180529689288,w=0.5170213520004779,x=7.1335073634844335 color=green,shape=triangle,flag=0,i=54332,u=0.06632998688651393,v=0.4031212517185745,w=0.5104869141912932,x=5.410769969133124 color=purple,shape=circle,flag=0,i=54335,u=0.6431193383945193,v=0.7816474893411354,w=0.48065553706385544,x=4.356718054747709 color=blue,shape=square,flag=1,i=54337,u=0.5163838002924002,v=0.36704452192662873,w=0.5249656443446242,x=3.9971352960083064 color=green,shape=triangle,flag=0,i=54359,u=0.587899431669839,v=0.5834593234099636,w=0.5079504802221093,x=7.6908518425868495 color=red,shape=triangle,flag=0,i=54370,u=0.07939613383519628,v=0.792382271979842,w=0.5068197608207315,x=3.7796059916196634 color=yellow,shape=circle,flag=1,i=54375,u=0.28039897289684146,v=0.878319192775941,w=0.5087256947812533,x=3.1654664532423413 color=blue,shape=circle,flag=0,i=54379,u=0.887833045983946,v=0.05235560575569076,w=0.48924670117002356,x=1.8758586365535759 color=red,shape=triangle,flag=0,i=54383,u=0.5719263429762795,v=0.49508855878960933,w=0.5176344236668424,x=5.105277973154455 color=yellow,shape=square,flag=1,i=54389,u=0.70243282572162,v=0.12208141892313373,w=0.510065577587627,x=4.869449203773317 color=red,shape=triangle,flag=0,i=54391,u=0.015467589697611306,v=0.10639995635503474,w=0.513416123035257,x=5.20393222720596 color=red,shape=square,flag=0,i=54423,u=0.15564986578484818,v=0.2888005527864398,w=0.5245288466574893,x=4.88596218353195 color=yellow,shape=triangle,flag=1,i=54426,u=0.2674211987634295,v=0.6375640400393053,w=0.5042841168223927,x=6.563419460136988 color=yellow,shape=circle,flag=1,i=54433,u=0.9174633626426539,v=0.23054425107300924,w=0.5081487367676373,x=3.3496674028300455 color=red,shape=triangle,flag=1,i=54435,u=0.12188863469673472,v=0.7585169862504959,w=0.5137119149857992,x=5.581951672769995 color=yellow,shape=square,flag=1,i=54436,u=0.5268161165014636,v=0.8785588662666121,w=0.5058773791931063,x=7.019185838783636 color=red,shape=circle,flag=0,i=54445,u=0.39670442231034553,v=0.4098947862552379,w=0.5288957675147329,x=5.261542939867193 color=blue,shape=square,flag=1,i=54465,u=0.8312166718564842,v=0.033317195606369254,w=0.5235051533411317,x=4.008303806634128 color=purple,shape=triangle,flag=0,i=54472,u=0.15614161875046106,v=0.23516881335415285,w=0.4911661823426195,x=7.462777545802294 color=red,shape=circle,flag=0,i=54490,u=0.05470827588117133,v=0.1261958848741258,w=0.5217194345166385,x=6.025527306040547 color=blue,shape=square,flag=0,i=54498,u=0.2902590841835594,v=0.14374611197559284,w=0.5214587937763869,x=4.949951019871169 color=red,shape=triangle,flag=0,i=54515,u=0.8465006783703279,v=0.9724051160762706,w=0.5232041443742209,x=4.866180450160544 color=red,shape=circle,flag=1,i=54519,u=0.12892764519698774,v=0.12466340898629369,w=0.532539575568873,x=4.3457239674645365 color=red,shape=square,flag=0,i=54533,u=0.08875167500584946,v=0.4596281162088727,w=0.5147630150665891,x=6.477057451534829 color=red,shape=square,flag=0,i=54555,u=0.8857264627523018,v=0.04487754119375453,w=0.5224105898494541,x=4.208046451574389 color=blue,shape=square,flag=0,i=54571,u=0.17487432111811152,v=0.624671925563803,w=0.5152628327989822,x=3.3802622855485285 color=blue,shape=square,flag=1,i=54572,u=0.30966946995538036,v=0.899157442548078,w=0.5149934889102513,x=7.66539587702979 color=red,shape=circle,flag=0,i=54575,u=0.21710396974197987,v=0.24640589580162442,w=0.5267483181717957,x=4.994489514933451 color=red,shape=square,flag=1,i=54579,u=0.7871071803483068,v=0.6012720122300076,w=0.5247264331152747,x=5.034650919661394 color=blue,shape=triangle,flag=0,i=54585,u=0.5452237848214723,v=0.537739934474744,w=0.48372824761253064,x=4.821167468295924 color=red,shape=square,flag=0,i=54588,u=0.4123024496965355,v=0.7930259021034676,w=0.5315900258756656,x=4.486811032597063 color=orange,shape=circle,flag=1,i=54593,u=0.6209846653766937,v=0.7532947521450949,w=0.5081633322025949,x=4.017462592550577 color=red,shape=square,flag=1,i=54604,u=0.09878338104963091,v=0.09461200210241949,w=0.5368662592636505,x=5.8713897370150745 color=red,shape=triangle,flag=1,i=54609,u=0.8078485867658558,v=0.3146397951164116,w=0.5180359037837303,x=4.419055740348531 color=green,shape=triangle,flag=0,i=54616,u=0.008815582121518895,v=0.3351474610360117,w=0.5107505128564379,x=5.41150822475658 color=red,shape=triangle,flag=1,i=54621,u=0.8757208482717299,v=0.7224311856730294,w=0.5183730449717274,x=3.2314847145299903 color=red,shape=square,flag=0,i=54643,u=0.0016769682856588863,v=0.4062416143816475,w=0.5328763050189145,x=5.971581308961723 color=yellow,shape=square,flag=1,i=54644,u=0.5547690556030465,v=0.383155411082328,w=0.5065232862262112,x=5.849401582746474 color=yellow,shape=triangle,flag=1,i=54652,u=0.1845511835999143,v=0.1929059079085862,w=0.5151953137405589,x=5.049827624304032 color=yellow,shape=square,flag=1,i=54658,u=0.26779702507825665,v=0.7162722527037098,w=0.5065254034827779,x=4.749739778942277 color=red,shape=square,flag=0,i=54668,u=0.783395435356002,v=0.626299514823744,w=0.5295158987683225,x=3.828796123066978 color=yellow,shape=square,flag=0,i=54674,u=0.498456045578728,v=0.539046645596661,w=0.516895643658785,x=5.942635508464914 color=red,shape=triangle,flag=0,i=54680,u=0.19669769955250094,v=0.9354873908418636,w=0.5106611097235272,x=2.945552185578556 color=yellow,shape=square,flag=1,i=54691,u=0.6091834979360137,v=0.2566723873307417,w=0.5161050534577085,x=5.031674540290492 color=red,shape=circle,flag=1,i=54702,u=0.2893717897186381,v=0.3317770544966995,w=0.5109108042365773,x=6.091937588417157 color=red,shape=square,flag=0,i=54711,u=0.14973294830107453,v=0.5899725236893825,w=0.5280524169581828,x=5.480189238550888 color=red,shape=triangle,flag=0,i=54727,u=0.3782523515887105,v=0.00932837890979521,w=0.5120040412855404,x=4.96518872246986 color=red,shape=triangle,flag=1,i=54742,u=0.22631139194355598,v=0.5040830302389918,w=0.5190608474678889,x=4.912829498689536 color=blue,shape=triangle,flag=1,i=54754,u=0.7280619739056884,v=0.05621086289650323,w=0.49474704979810236,x=5.974094841247102 color=green,shape=circle,flag=0,i=54791,u=0.04855959877458027,v=0.31630970368507483,w=0.4795217024774788,x=3.7647295408310817 color=red,shape=triangle,flag=1,i=54801,u=0.5314933478013397,v=0.5129823261270892,w=0.5109384418975104,x=4.844811478344437 color=purple,shape=circle,flag=0,i=54803,u=0.2730300791176786,v=0.03093712240566171,w=0.4798891709464476,x=4.490506813960657 color=red,shape=circle,flag=0,i=54806,u=0.6733556323940694,v=0.5972087074567061,w=0.49581701424235325,x=6.015281164265031 color=blue,shape=square,flag=1,i=54808,u=0.7952018617346195,v=0.6053258258742458,w=0.5085443739195697,x=5.892957552739641 color=red,shape=triangle,flag=0,i=54810,u=0.878253352719066,v=0.32921449458391117,w=0.5060746422906507,x=3.0903805828575037 color=red,shape=triangle,flag=0,i=54824,u=0.07300198333997798,v=0.12108880039320902,w=0.5121110563062768,x=4.810188031513911 color=yellow,shape=square,flag=0,i=54826,u=0.5738360121336274,v=0.6229060874048589,w=0.5111293923421002,x=6.267278978817212 color=green,shape=square,flag=0,i=54854,u=0.07190403045510674,v=0.5006125758409876,w=0.5061714198788955,x=6.057752870387191 color=blue,shape=circle,flag=1,i=54877,u=0.33715041809877655,v=0.1636174722134922,w=0.5008539493361065,x=3.1961637878420497 color=red,shape=square,flag=0,i=54900,u=0.30049595174919064,v=0.06930424937144253,w=0.5040792478563368,x=5.438021025802396 color=blue,shape=triangle,flag=0,i=54906,u=0.5397242441468856,v=0.17376729124948875,w=0.48467063448593534,x=4.478741052031034 color=red,shape=circle,flag=0,i=54913,u=0.5008917079236528,v=0.43574891231807084,w=0.49437554516039545,x=4.552431345082269 color=yellow,shape=circle,flag=1,i=54918,u=0.612034983774875,v=0.5970370650250671,w=0.49513768015357135,x=4.429047871920659 color=red,shape=triangle,flag=1,i=54927,u=0.38401515881057513,v=0.5375651145934137,w=0.512904194784432,x=3.0230779863388797 color=green,shape=square,flag=0,i=54928,u=0.7667770742608941,v=0.6711749608749514,w=0.5066147320570372,x=5.703618968829413 color=red,shape=square,flag=0,i=54933,u=0.26538835653318327,v=0.4659559661346837,w=0.5016039802794988,x=2.567129681994347 color=green,shape=square,flag=1,i=54938,u=0.7267687245426453,v=0.5261619207171709,w=0.5112347025148704,x=8.921094681787602 color=red,shape=circle,flag=0,i=54948,u=0.16719649952006788,v=0.13547028822215385,w=0.47957745854464096,x=5.673700584327684 color=red,shape=triangle,flag=0,i=54958,u=0.4325448552435456,v=0.28455732112813403,w=0.5103299684146705,x=6.328857259586061 color=red,shape=square,flag=0,i=54963,u=0.9362364382138753,v=0.6019020246619172,w=0.504269302409123,x=5.311025339338761 color=blue,shape=square,flag=0,i=54971,u=0.11826414749280811,v=0.5529619954954097,w=0.501050181029679,x=4.68420076737738 color=purple,shape=triangle,flag=0,i=54987,u=0.5274872947345021,v=0.9884402473965985,w=0.49438975781752975,x=3.8029186660774226 color=green,shape=square,flag=0,i=55005,u=0.0748748386314243,v=0.7397130215942403,w=0.5132750513808505,x=4.878370506934766 color=purple,shape=triangle,flag=0,i=55029,u=0.4600608414941606,v=0.21657853582503905,w=0.4901631665848423,x=5.580631059968616 color=blue,shape=triangle,flag=1,i=55082,u=0.76329867593739,v=0.36868460283998494,w=0.47844635074027714,x=3.6905895397115516 color=red,shape=circle,flag=1,i=55085,u=0.06602714113251362,v=0.020030421901805325,w=0.4791716079684297,x=7.752086928983793 color=red,shape=triangle,flag=1,i=55094,u=0.0707028839327134,v=0.7635155934574812,w=0.5103980648847103,x=6.235629281818734 color=red,shape=circle,flag=0,i=55100,u=0.09152091750208424,v=0.05543803075781528,w=0.48312870860215307,x=7.150819586602147 color=yellow,shape=square,flag=0,i=55101,u=0.919191895577424,v=0.8295859952435531,w=0.5109429149296737,x=5.820284236639371 color=blue,shape=square,flag=0,i=55124,u=0.22272873596803544,v=0.24138434018389743,w=0.518645518154923,x=4.247015482469394 color=orange,shape=triangle,flag=1,i=55135,u=0.06388160709174939,v=0.23908466406508555,w=0.5048813287217734,x=5.7077317134792205 color=blue,shape=square,flag=0,i=55143,u=0.7054189258248026,v=0.637609256323884,w=0.5175906051033486,x=3.94582893615266 color=red,shape=circle,flag=0,i=55149,u=0.703973803251823,v=0.6947288347723674,w=0.49084500664170255,x=4.551397811405671 color=red,shape=triangle,flag=0,i=55150,u=0.8626501161550487,v=0.7018378516107286,w=0.5105989574604536,x=3.349114578194707 color=red,shape=triangle,flag=0,i=55152,u=0.028919239340594927,v=0.5643833415406265,w=0.5086122992007506,x=3.755066195459468 color=purple,shape=triangle,flag=1,i=55160,u=0.503057970285384,v=0.7009260562516104,w=0.5050273021517575,x=4.992063727962121 color=purple,shape=square,flag=0,i=55172,u=0.44347643006823345,v=0.6758886496866708,w=0.4940371977711606,x=4.142874556417575 color=red,shape=triangle,flag=0,i=55180,u=0.8984858044483035,v=0.8531665272910918,w=0.5095340075539027,x=5.457822338663282 color=red,shape=square,flag=0,i=55181,u=0.49398940985685225,v=0.5085582545001526,w=0.5010870263631043,x=6.450638502264784 color=red,shape=triangle,flag=0,i=55215,u=0.4431206317548032,v=0.9628752521414382,w=0.5045272373912738,x=4.561468567472974 color=yellow,shape=triangle,flag=0,i=55222,u=0.6005669475974964,v=0.7296625756779209,w=0.49427084710281965,x=4.355947219404446 color=green,shape=square,flag=0,i=55223,u=0.22618766365175058,v=0.8088554614292689,w=0.5131254106170233,x=7.641072149513505 color=yellow,shape=square,flag=0,i=55243,u=0.399725540602879,v=0.14194013668059835,w=0.5096808521092445,x=4.586658893124853 color=purple,shape=triangle,flag=0,i=55245,u=0.18786744216200502,v=0.20737220026144143,w=0.4956183985078717,x=4.758069786282985 color=blue,shape=triangle,flag=0,i=55247,u=0.5435214601492427,v=0.30982708123901115,w=0.4894672980021366,x=3.0710666568980773 color=red,shape=triangle,flag=0,i=55259,u=0.43293535417692786,v=0.7120110825377013,w=0.49604357486040584,x=5.632933107247049 color=red,shape=square,flag=0,i=55273,u=0.7577378760965514,v=0.5256070458979509,w=0.4791069248324443,x=4.380542667977143 color=red,shape=circle,flag=0,i=55286,u=0.6708664560419884,v=0.5954096292016795,w=0.4676398215737821,x=3.8516263858082733 color=red,shape=triangle,flag=0,i=55290,u=0.7659146528706552,v=0.762772763553792,w=0.5043443289321522,x=4.095123944519207 color=green,shape=triangle,flag=0,i=55291,u=0.7109134057124564,v=0.15187738369327775,w=0.5100097726260219,x=5.522141045560848 color=red,shape=circle,flag=0,i=55306,u=0.39005330647211667,v=0.3302482350949184,w=0.46560280550051075,x=3.9421432456617516 color=orange,shape=triangle,flag=1,i=55323,u=0.9098686012935904,v=0.6783954193618972,w=0.5151313424146066,x=4.768731677173737 color=red,shape=circle,flag=0,i=55324,u=0.10409608577871055,v=0.1902664743162913,w=0.4701527872707176,x=3.3300033484125944 color=red,shape=circle,flag=0,i=55344,u=0.2949441000241585,v=0.3470963649118102,w=0.4778404541602554,x=5.556800434911691 color=yellow,shape=square,flag=1,i=55352,u=0.6087824980326788,v=0.7697094995557414,w=0.5160134271069344,x=6.646393748457489 color=red,shape=triangle,flag=0,i=55361,u=0.7318489001096495,v=0.4738975746105495,w=0.5135155478638224,x=4.889336294350405 color=purple,shape=circle,flag=0,i=55404,u=0.7936605132922776,v=0.8476399761563178,w=0.5030183819674996,x=4.32454077466622 color=red,shape=square,flag=0,i=55408,u=0.422784320473623,v=0.4200749652687161,w=0.46988200178668765,x=5.246554730320105 color=red,shape=triangle,flag=0,i=55410,u=0.8968080761181384,v=0.6244745650698577,w=0.5167763405420956,x=6.391722352020554 color=red,shape=triangle,flag=0,i=55420,u=0.015979341292861937,v=0.23922052296373097,w=0.5123591846025574,x=4.233901250365271 color=red,shape=circle,flag=0,i=55427,u=0.6074917582395695,v=0.578917534323402,w=0.4822399753848357,x=3.8000481578793264 color=green,shape=triangle,flag=0,i=55428,u=0.17073939879776,v=0.8657342539490759,w=0.5002172019238377,x=5.227842650174012 color=purple,shape=circle,flag=0,i=55429,u=0.19597158721524732,v=0.5993437214659064,w=0.49814456864038525,x=3.9780976530522945 color=red,shape=square,flag=0,i=55440,u=0.696007371916118,v=0.5708905041377343,w=0.4715038386045447,x=2.894791365740644 color=red,shape=triangle,flag=1,i=55450,u=0.28837892193430104,v=0.05026172153923969,w=0.5121781302224944,x=3.3248860978053414 color=red,shape=circle,flag=1,i=55458,u=0.1212165116190187,v=0.10483351567899724,w=0.49061845285656874,x=5.1395393630932835 color=red,shape=circle,flag=0,i=55463,u=0.7260734009077561,v=0.7400802948875371,w=0.4923503029273603,x=4.110028267194617 color=blue,shape=circle,flag=1,i=55473,u=0.4112702874032924,v=0.5100316200910434,w=0.4803498370952482,x=5.148836539738202 color=blue,shape=square,flag=0,i=55479,u=0.19315338993612674,v=0.06290539413366214,w=0.507616604214517,x=5.469641715962468 color=yellow,shape=square,flag=1,i=55491,u=0.0025440267883102274,v=0.05474106287787284,w=0.5102729153751984,x=3.526301273728043 color=red,shape=triangle,flag=1,i=55516,u=0.8057550214518604,v=0.6530293954985826,w=0.5095020226271539,x=4.271759727442382 color=red,shape=triangle,flag=0,i=55530,u=0.9457644760390884,v=0.9616505356071466,w=0.5090762911413765,x=3.981889322777672 color=red,shape=circle,flag=1,i=55532,u=0.514083307970093,v=0.4485718972021694,w=0.4870195930639722,x=6.166190923992491 color=red,shape=circle,flag=0,i=55545,u=0.07372385318757546,v=-0.02582775087576042,w=0.4833545057425041,x=5.024135036175388 color=blue,shape=circle,flag=0,i=55555,u=0.8325779464249566,v=0.5004428332569696,w=0.4906098473141438,x=5.023685053968186 color=blue,shape=square,flag=1,i=55566,u=0.41249599112419333,v=0.2571885770323481,w=0.5123988308126495,x=3.639941887422522 color=blue,shape=triangle,flag=1,i=55570,u=0.6209067098681805,v=0.8320092553387912,w=0.47037697831630704,x=6.102916184689209 color=red,shape=triangle,flag=0,i=55576,u=0.5492888305915383,v=0.3608440713737123,w=0.5021675668602483,x=3.7844584467280735 color=blue,shape=square,flag=1,i=55582,u=0.8028839804644307,v=0.5603697890990146,w=0.5154500321453434,x=2.931211310051449 color=red,shape=square,flag=1,i=55584,u=0.8565413137049229,v=0.8386116780970948,w=0.43626706140877497,x=6.301179901836098 color=red,shape=square,flag=0,i=55618,u=0.5712787047695906,v=0.8957119536381241,w=0.43357485487313535,x=6.243071445465681 color=red,shape=triangle,flag=0,i=55643,u=0.5118396963435251,v=0.9606779488440411,w=0.49522090409337827,x=3.945093591841642 color=green,shape=triangle,flag=0,i=55648,u=0.09041696723310955,v=0.7755113333504334,w=0.49816042300026203,x=5.070909974229001 color=red,shape=triangle,flag=0,i=55669,u=0.9332677721561746,v=0.9679994498357146,w=0.49483780003122824,x=3.244585209763837 color=orange,shape=triangle,flag=0,i=55687,u=0.27267781031546623,v=0.7813464180011345,w=0.4996375454783771,x=4.661784753828535 color=red,shape=square,flag=0,i=55708,u=0.9839258939427176,v=0.16332820343543863,w=0.4463957263096923,x=4.539950669868682 color=yellow,shape=square,flag=1,i=55717,u=0.03870934074215293,v=0.5809797670449286,w=0.5140857391224181,x=3.785908532353401 color=blue,shape=square,flag=1,i=55721,u=0.8066345310251971,v=0.10183314005794164,w=0.5187219015873368,x=5.37740829587483 color=red,shape=square,flag=1,i=55732,u=0.6527689711674508,v=0.30385700532582105,w=0.4581006689816416,x=5.862767311886287 color=orange,shape=triangle,flag=1,i=55748,u=0.6263559570955815,v=0.1516116880262247,w=0.49629424300074565,x=6.307471501377414 color=purple,shape=triangle,flag=0,i=55757,u=0.26224310140155405,v=0.635012274594874,w=0.47849105401466574,x=4.159639149256694 color=green,shape=circle,flag=0,i=55770,u=0.5918202914685192,v=0.5583787765896122,w=0.48952164277907384,x=6.0478759847039285 color=red,shape=square,flag=0,i=55774,u=0.3996382178437635,v=0.714745942996061,w=0.46763429724619965,x=5.6225531919251095 color=yellow,shape=square,flag=1,i=55779,u=0.882965353298848,v=0.643699074091605,w=0.519441483130259,x=5.361371000809978 color=red,shape=square,flag=0,i=55784,u=0.057478735463183606,v=0.5753843191107093,w=0.4687520476034903,x=4.296129741408247 color=yellow,shape=triangle,flag=1,i=55785,u=0.2359793854714849,v=0.8817194363273055,w=0.5015346733275015,x=5.827126581489421 color=red,shape=square,flag=0,i=55796,u=0.02338747915938122,v=0.0653181470290759,w=0.47194211901037203,x=4.9959406342969155 color=yellow,shape=circle,flag=1,i=55848,u=0.053438861570863194,v=0.2837359939899178,w=0.489990232439038,x=5.165439129405239 color=green,shape=square,flag=0,i=55854,u=0.91784778624634,v=0.6904928289106833,w=0.5271666045798626,x=5.301754547519857 color=yellow,shape=triangle,flag=0,i=55856,u=0.7101012751717551,v=0.9698261438645679,w=0.5025408896588757,x=4.205495079028961 color=red,shape=circle,flag=0,i=55863,u=0.07286248453107336,v=0.08868289521299681,w=0.4788519143641167,x=3.5217669605766866 color=green,shape=circle,flag=0,i=55876,u=0.9999075930926061,v=0.7951411545290447,w=0.4968959435862534,x=5.600737846731193 color=red,shape=circle,flag=1,i=55879,u=0.3323627366421906,v=0.39724005213377805,w=0.4719396091598217,x=5.850277301902327 color=red,shape=circle,flag=0,i=55907,u=0.028554771245874244,v=0.039705377504417536,w=0.4667803467199131,x=5.919590958570892 color=blue,shape=square,flag=0,i=55909,u=0.7793907641777834,v=0.4630823003814567,w=0.516290481069534,x=4.971497033431556 color=yellow,shape=square,flag=1,i=55918,u=0.13054808563653153,v=0.34384249697053704,w=0.5167132668626603,x=5.85992965274032 color=green,shape=triangle,flag=1,i=55924,u=0.7963630493773972,v=0.7764018178252802,w=0.4942799480085401,x=6.605681724956578 color=red,shape=square,flag=0,i=55927,u=0.9533081418342814,v=0.9845886508421707,w=0.49078148662281984,x=3.9105553977649588 color=green,shape=triangle,flag=0,i=55938,u=0.8769501498223685,v=0.8376004959939759,w=0.4960456476893017,x=6.56085861617322 color=green,shape=circle,flag=0,i=55941,u=0.30964490361119745,v=0.35207661176726923,w=0.5070406171765169,x=6.322950174413548 color=yellow,shape=triangle,flag=1,i=55948,u=0.8123442020868297,v=0.6412668596562257,w=0.500873812975386,x=4.880819474499927 color=red,shape=square,flag=0,i=55972,u=0.9796185838306837,v=0.9906595820809593,w=0.49670143026297237,x=4.948776264216938 color=yellow,shape=triangle,flag=1,i=55980,u=0.25362233277876967,v=0.4482485856938603,w=0.4971388559208474,x=3.7560884705481747 color=red,shape=triangle,flag=0,i=55989,u=0.3617971523882211,v=0.880547472991682,w=0.49733934930192464,x=5.291759060482392 color=yellow,shape=circle,flag=1,i=55992,u=0.3818801474606376,v=0.8254638029404613,w=0.48590292532119767,x=5.973752056658978 color=yellow,shape=square,flag=1,i=55995,u=0.9705535495907963,v=0.30350852723439314,w=0.5144716357279938,x=4.440266882014721 color=red,shape=square,flag=0,i=56010,u=0.45913899381354406,v=0.8157811720434384,w=0.5068188383213508,x=5.728965401521253 color=red,shape=square,flag=0,i=56013,u=0.8499367721851534,v=0.27894392008453595,w=0.5051553370073166,x=6.164712923395321 color=purple,shape=triangle,flag=0,i=56037,u=0.3520135214352045,v=0.31712824656085803,w=0.48148499614041457,x=5.87369638902408 color=purple,shape=square,flag=0,i=56045,u=0.6924422807264176,v=0.5238445684222774,w=0.4931401493487204,x=4.964424425635917 color=red,shape=circle,flag=0,i=56065,u=0.5291122289148481,v=0.557221330086876,w=0.47699308366800103,x=5.190422655927031 color=red,shape=circle,flag=0,i=56081,u=0.14743580029379144,v=0.19157246628102145,w=0.47021107319489885,x=3.9791016101032 color=orange,shape=square,flag=1,i=56084,u=0.0470860317861852,v=0.08913803250375951,w=0.48153705749039766,x=4.701231440439263 color=green,shape=circle,flag=0,i=56106,u=0.551224271070333,v=0.23271973109026156,w=0.499196492302761,x=5.161238750091768 color=green,shape=square,flag=0,i=56110,u=0.6020030334322408,v=0.9517388114578516,w=0.5351881627117776,x=5.384521025243752 color=red,shape=circle,flag=1,i=56119,u=0.5019221249749239,v=0.4731304899660218,w=0.46443583678984746,x=5.803288960614924 color=yellow,shape=square,flag=1,i=56135,u=0.9018836471858397,v=0.7211590153593105,w=0.513203152737238,x=5.369196632319536 color=red,shape=circle,flag=0,i=56137,u=0.3599432568767288,v=0.3306088539379391,w=0.46781120117646824,x=3.5266002715749245 color=blue,shape=triangle,flag=1,i=56147,u=0.7724092517817623,v=0.8469990918582153,w=0.4610607522407421,x=5.5726950123343455 color=red,shape=square,flag=1,i=56150,u=0.9317847378493062,v=0.906339948683953,w=0.4868930087667855,x=5.916312425647438 color=red,shape=circle,flag=1,i=56154,u=0.4689612988400361,v=0.3734679509332499,w=0.4667566194941723,x=4.096156546146602 color=red,shape=triangle,flag=0,i=56158,u=0.6775827621631926,v=0.6887802617936221,w=0.48372757521468257,x=6.072210893263811 color=red,shape=circle,flag=1,i=56168,u=0.9502327595214659,v=0.9503902210948304,w=0.47099130612220075,x=5.4369083409897625 color=red,shape=square,flag=1,i=56169,u=0.025922897186713256,v=0.6568704261491838,w=0.4866555082243846,x=3.871642450381844 color=red,shape=square,flag=0,i=56193,u=0.3556025238324271,v=0.19445611896971127,w=0.48153393561919106,x=4.181191686311995 color=blue,shape=square,flag=1,i=56200,u=0.6907062034941703,v=0.18385000999192347,w=0.5294009754698966,x=4.874109533787477 color=red,shape=triangle,flag=0,i=56214,u=0.5836220016055733,v=0.6886458201977214,w=0.4910787214710552,x=5.911831869022606 color=yellow,shape=square,flag=1,i=56223,u=0.8395099623387113,v=0.7661778468478677,w=0.5143395485409306,x=4.921271930929959 color=green,shape=circle,flag=0,i=56239,u=0.13043451247655424,v=0.9926387162371304,w=0.5016382631712446,x=4.296273657523788 color=blue,shape=square,flag=0,i=56253,u=0.892019364247622,v=0.6883949588983121,w=0.5240954993569905,x=3.849117023318049 color=red,shape=circle,flag=0,i=56276,u=0.10237593390867661,v=0.009332569303519375,w=0.48308302663518365,x=3.797957581910026 color=purple,shape=square,flag=0,i=56293,u=0.4423510378137281,v=0.6602641707640811,w=0.49475165894014145,x=4.250271651999045 color=red,shape=square,flag=1,i=56295,u=0.035901721026623146,v=0.06208684894558103,w=0.4811180660331609,x=5.08786595608084 color=red,shape=triangle,flag=0,i=56304,u=0.475278505152111,v=0.6300368516180012,w=0.47666186625274737,x=5.962182471623468 color=yellow,shape=triangle,flag=0,i=56327,u=0.9825607881222167,v=0.6716370631949607,w=0.4971989507690275,x=5.311808345026688 color=red,shape=triangle,flag=1,i=56333,u=0.4416813098236648,v=0.007612137993538437,w=0.4824728808559309,x=3.5925175826122207 color=green,shape=square,flag=0,i=56335,u=0.4928813233685484,v=0.44175179736303394,w=0.513833052476633,x=6.040051723910193 color=blue,shape=triangle,flag=0,i=56361,u=0.3860740201200319,v=0.9555767054915603,w=0.4565982286468696,x=4.108596171640287 color=red,shape=triangle,flag=1,i=56364,u=0.0036050258267615876,v=0.9399580071261083,w=0.4791517385396412,x=4.998343359890288 color=blue,shape=square,flag=1,i=56365,u=0.008174890287940495,v=0.4292433844364618,w=0.5278054152837448,x=5.903745938453992 color=blue,shape=square,flag=1,i=56387,u=0.17294379957387085,v=0.7592373876625672,w=0.51484699011673,x=5.4099497576339575 color=blue,shape=triangle,flag=0,i=56401,u=0.21249982428624348,v=0.9875464749685668,w=0.45337372459256964,x=5.259427443771463 color=red,shape=circle,flag=1,i=56413,u=0.5275352921582073,v=0.4362477048131487,w=0.4775526021744573,x=3.0224781835694525 color=purple,shape=circle,flag=0,i=56443,u=0.7292078370864499,v=0.9131430203424354,w=0.5016343168633657,x=6.532992270761079 color=red,shape=triangle,flag=0,i=56457,u=0.08970938605945822,v=0.47686299599450144,w=0.49160104989408443,x=4.709479438939208 color=blue,shape=square,flag=1,i=56459,u=0.8349053224300648,v=0.9466490126470953,w=0.5157413104081363,x=3.9539657304020692 color=red,shape=circle,flag=0,i=56473,u=0.7338932145548156,v=0.6415923313232216,w=0.4831745752496531,x=4.271073181042245 color=red,shape=square,flag=0,i=56492,u=0.5495964475302019,v=0.07347131140840091,w=0.4677965255376068,x=5.59013044342102 color=green,shape=square,flag=0,i=56536,u=0.8107534537095848,v=0.09446807387302414,w=0.5257334875144043,x=4.780691710128859 color=red,shape=square,flag=0,i=56537,u=0.30719905307363227,v=0.3298352740856826,w=0.4661478895233752,x=5.681649510225867 color=red,shape=square,flag=0,i=56552,u=0.7678071632851629,v=0.4612159104758833,w=0.47570444575412274,x=5.161684307388276 color=red,shape=square,flag=0,i=56568,u=0.028786675924196592,v=0.4856422295181674,w=0.476410489928568,x=5.081911534256035 color=blue,shape=circle,flag=1,i=56573,u=0.7023788412762049,v=0.7914631958127581,w=0.49237490105138765,x=5.952259950409154 color=red,shape=square,flag=1,i=56585,u=0.02749936714996104,v=0.8509857328609852,w=0.4639809122487109,x=4.97406088680667 color=orange,shape=square,flag=0,i=56586,u=0.3854536327509306,v=0.18001284797279415,w=0.4808020104690101,x=5.181146944747667 color=orange,shape=square,flag=0,i=56591,u=0.30507471609822634,v=0.7582234508798396,w=0.4779339786169748,x=5.147422435342539 color=red,shape=circle,flag=0,i=56598,u=0.28903343040251384,v=0.29213655346318623,w=0.4865268017134947,x=5.92132059059805 color=blue,shape=circle,flag=1,i=56617,u=0.04695354800936935,v=0.6425152243385953,w=0.4936125213980512,x=4.1763020576531495 color=yellow,shape=circle,flag=1,i=56628,u=0.41164175726881913,v=0.5604421398634948,w=0.4983818762709919,x=5.187580583842933 color=blue,shape=triangle,flag=1,i=56638,u=0.5733754175892306,v=0.4088410551277101,w=0.45314392294121913,x=5.521680822941849 color=red,shape=square,flag=0,i=56641,u=0.8772444983691737,v=0.9330400578228586,w=0.46431956627578636,x=4.129574117926221 color=red,shape=triangle,flag=1,i=56642,u=0.7956132660816322,v=0.06352767300677908,w=0.5058126580883646,x=5.930729856087858 color=red,shape=triangle,flag=0,i=56651,u=0.15938196491812728,v=0.8231701416310142,w=0.5017963144497639,x=4.281361033745148 color=red,shape=square,flag=0,i=56664,u=0.0906107258626494,v=0.2965946422551351,w=0.46545720696107185,x=5.574587696364536 color=red,shape=square,flag=0,i=56675,u=0.4350346833944073,v=0.8251058719961641,w=0.4697759620192235,x=4.25994800673227 color=yellow,shape=square,flag=0,i=56679,u=0.09071549503099097,v=0.6030104576807922,w=0.5303749901085183,x=5.789436954035075 color=green,shape=square,flag=0,i=56691,u=0.2623304115693713,v=0.8692167890452746,w=0.5278381888601276,x=5.231196714676524 color=red,shape=square,flag=0,i=56728,u=0.8265228034076931,v=0.2756747808382448,w=0.4775213175126215,x=5.348262191400402 color=red,shape=triangle,flag=0,i=56730,u=0.11444329223125427,v=0.10092609807738806,w=0.5198100949826048,x=5.147965247632212 color=red,shape=triangle,flag=1,i=56761,u=0.9226877392568987,v=0.5569729312214099,w=0.5164574681390561,x=5.3145474037736795 color=yellow,shape=triangle,flag=1,i=56768,u=0.8577573056014351,v=0.4240808134972043,w=0.5143732653660601,x=3.410256536516419 color=blue,shape=triangle,flag=1,i=56775,u=0.7103849580538455,v=0.627067107769321,w=0.45524479919427063,x=4.7423317732863 color=green,shape=square,flag=0,i=56793,u=0.4305896462753718,v=0.30330627037423874,w=0.5239866021833908,x=3.1195884051528773 color=green,shape=square,flag=0,i=56800,u=0.16880072940989221,v=0.423767426944905,w=0.526501492128006,x=4.975561025671241 color=red,shape=triangle,flag=0,i=56824,u=0.6902062956497429,v=0.22233802607241515,w=0.5269841328438786,x=6.5025408278087236 color=purple,shape=circle,flag=0,i=56830,u=0.8716189964351342,v=0.8482222162972167,w=0.49342512194980254,x=5.12646014192254 color=red,shape=triangle,flag=0,i=56833,u=0.15307709151035487,v=0.10939470350347325,w=0.5231742195552982,x=4.432072889440078 color=yellow,shape=triangle,flag=1,i=56851,u=0.2094533637488054,v=0.4598661695930325,w=0.5128926740646055,x=4.5216670549598 color=blue,shape=triangle,flag=0,i=56868,u=0.8888754827007322,v=0.23370783367578984,w=0.4584574653147142,x=4.891265910645562 color=purple,shape=square,flag=0,i=56882,u=0.28349543779278685,v=0.4550865872925278,w=0.507735244158975,x=3.82092076307304 color=green,shape=triangle,flag=0,i=56883,u=0.5200463472803509,v=0.027328094014438253,w=0.4789202131261215,x=4.81002575128225 color=red,shape=circle,flag=1,i=56886,u=0.39792133290042564,v=0.45019258935720663,w=0.472466648430075,x=5.453982301283424 color=red,shape=circle,flag=0,i=56890,u=0.8050991905458178,v=0.7474642748848684,w=0.4697779205322726,x=6.072733542760872 color=red,shape=square,flag=0,i=56893,u=0.421739812613543,v=0.28530057425095035,w=0.4959406944276449,x=3.396941877489479 color=red,shape=triangle,flag=1,i=56902,u=0.5633974451409782,v=0.809683375886919,w=0.522995494066022,x=3.5359342803756824 color=red,shape=triangle,flag=1,i=56922,u=0.6673346896452196,v=0.32499342283441834,w=0.5244168003137538,x=5.074393659408346 color=green,shape=square,flag=0,i=56928,u=0.32857277286176967,v=0.33255534059463365,w=0.5169607688548151,x=2.566944453291659 color=blue,shape=circle,flag=0,i=56929,u=0.9527921392004068,v=0.5456859654162112,w=0.5080747275824269,x=3.7892848890893944 color=orange,shape=circle,flag=0,i=56930,u=0.8351770152013697,v=0.5712312164309754,w=0.5060167332680503,x=6.569894599761807 color=yellow,shape=square,flag=1,i=56957,u=0.7983144929858307,v=0.5339720846840327,w=0.5307346506874707,x=6.165290611869111 color=red,shape=circle,flag=0,i=56970,u=0.9645348672691165,v=0.9677780525296367,w=0.45749838713863294,x=7.621475926415006 color=red,shape=square,flag=0,i=56986,u=0.4018434511701289,v=0.6576444371055434,w=0.4885995657012773,x=6.906668009315234 color=red,shape=triangle,flag=0,i=56988,u=0.02749422557600889,v=0.7045721179591373,w=0.520403932703198,x=4.872474569039121 color=purple,shape=triangle,flag=0,i=56993,u=0.5828964952744673,v=0.13758486326890618,w=0.47703384396283555,x=6.752267898515059 color=yellow,shape=triangle,flag=1,i=57005,u=0.7517392165052279,v=0.7267227628890004,w=0.5060141050917312,x=4.745992459101271 color=yellow,shape=square,flag=1,i=57026,u=0.9541583877298896,v=0.5760140001786096,w=0.5282467962179505,x=3.8938053481225765 color=blue,shape=square,flag=1,i=57030,u=0.48695597423022874,v=0.08844546578461421,w=0.5425393953321049,x=5.877098806908617 color=green,shape=triangle,flag=0,i=57041,u=0.0033388293078778775,v=0.933896354599408,w=0.4922603130880413,x=5.05781464079432 color=blue,shape=circle,flag=0,i=57042,u=0.5901418240007674,v=0.5638573553123257,w=0.4992871485240841,x=6.843458415083828 color=red,shape=circle,flag=0,i=57049,u=0.5234989354153977,v=0.5013872148712362,w=0.45558732325544266,x=4.022174600497456 color=green,shape=triangle,flag=0,i=57070,u=0.6793028781891647,v=0.8966963246342607,w=0.49049432235610496,x=4.7595315484090515 color=red,shape=triangle,flag=1,i=57072,u=0.9894870180524885,v=0.12448031200177812,w=0.5278646069763161,x=6.5079674124606095 color=yellow,shape=square,flag=1,i=57074,u=0.7635076661052428,v=0.34100637493184516,w=0.5364141341389145,x=4.973597414939134 color=yellow,shape=square,flag=1,i=57081,u=0.45587453331616634,v=0.3719269791702716,w=0.5305794111781517,x=6.818298776457883 color=red,shape=triangle,flag=0,i=57097,u=0.43763430414406546,v=0.3355450325004481,w=0.5322349637512487,x=4.144267240289442 color=purple,shape=triangle,flag=0,i=57099,u=0.01726445002433008,v=0.6061670254318432,w=0.48593179134149195,x=5.818141198433318 color=green,shape=triangle,flag=1,i=57119,u=0.10582645587507367,v=0.521006587052829,w=0.49292885747088644,x=3.952132493715093 color=green,shape=square,flag=1,i=57128,u=0.8777788174730123,v=0.6053559241858126,w=0.5041838406916876,x=5.025422132747454 color=yellow,shape=square,flag=1,i=57129,u=0.04370246851186399,v=0.9244275032393586,w=0.5190230729648553,x=3.568376893796305 color=red,shape=square,flag=0,i=57131,u=0.574928682414844,v=0.8441844909829774,w=0.49537442335669113,x=3.856032522133598 color=blue,shape=circle,flag=1,i=57133,u=0.4305620562125635,v=0.7631207453798586,w=0.49905957592729966,x=5.16672919673186 color=red,shape=square,flag=1,i=57143,u=0.011133646443627465,v=0.7141590196476079,w=0.49737333569489073,x=6.170355522542974 color=red,shape=square,flag=1,i=57146,u=0.5231044166750242,v=0.19463966358945672,w=0.49623456672129695,x=5.150253929407074 color=yellow,shape=triangle,flag=1,i=57171,u=0.26286275903750933,v=0.13487837447926443,w=0.503134444072826,x=4.551438247550485 color=red,shape=square,flag=0,i=57203,u=0.6823163349826873,v=0.7525422127169011,w=0.5040709330470553,x=4.095461272966488 color=green,shape=square,flag=0,i=57219,u=0.3349518079477095,v=0.1744883654218755,w=0.49436840112567093,x=3.817607547323984 color=green,shape=square,flag=0,i=57223,u=0.32690487224136544,v=0.4141834589506679,w=0.4933218182035997,x=7.376539251590466 color=purple,shape=triangle,flag=0,i=57224,u=0.7573665233415403,v=0.8354143305321534,w=0.4890312780408859,x=8.0931254697284 color=orange,shape=triangle,flag=0,i=57234,u=0.5749728727062464,v=0.48146164961201965,w=0.5011606874777892,x=6.180701217648733 color=red,shape=triangle,flag=0,i=57239,u=0.5371578220267906,v=0.8628290492646968,w=0.506724492496839,x=5.746764910184286 color=red,shape=triangle,flag=0,i=57257,u=0.5992834970253335,v=0.39212689720661953,w=0.5056845878304536,x=4.234837524377951 color=red,shape=triangle,flag=1,i=57258,u=0.9431390078364953,v=0.2263825266731717,w=0.5087258217097054,x=4.327778442628588 color=red,shape=square,flag=0,i=57302,u=0.024310814110374945,v=0.4095077705745581,w=0.4888377553630069,x=5.735408709508672 color=blue,shape=square,flag=0,i=57304,u=0.8405784101472124,v=0.7771487531548834,w=0.5454224573178974,x=5.14223922534172 color=blue,shape=circle,flag=1,i=57315,u=0.1943125705810267,v=0.874892905922052,w=0.4947312666483951,x=5.113473234066195 color=purple,shape=circle,flag=0,i=57348,u=0.08012648429205915,v=0.43419035849512433,w=0.4962768431042337,x=1.8218709525461902 color=red,shape=square,flag=1,i=57367,u=0.5331769343069407,v=0.15913725305046733,w=0.4856533100600407,x=4.4664660072676705 color=red,shape=circle,flag=1,i=57374,u=0.505448780648294,v=0.4137611479270784,w=0.46210978040392303,x=5.0505399265465085 color=blue,shape=circle,flag=0,i=57375,u=0.819962506396029,v=0.45907589643516133,w=0.49844446032542133,x=3.786287200260798 color=blue,shape=triangle,flag=0,i=57401,u=0.991684390968233,v=0.6615833277935615,w=0.46034698962148457,x=4.606985970888641 color=red,shape=square,flag=0,i=57408,u=0.46827162958802415,v=0.14502708271779496,w=0.4880037830804171,x=2.9217207711082662 color=orange,shape=triangle,flag=1,i=57414,u=0.7526477184435457,v=0.17303880234425795,w=0.5056005475852575,x=6.404295427295288 color=red,shape=square,flag=1,i=57431,u=0.6708732581311403,v=0.3848803051856632,w=0.4947665693719608,x=3.6033512472322364 color=yellow,shape=triangle,flag=1,i=57435,u=0.7167064211543328,v=0.7110980170684112,w=0.5123207949126591,x=4.591761803535008 color=blue,shape=triangle,flag=0,i=57446,u=0.9290923551978754,v=0.6248957884857331,w=0.45465587739088054,x=3.9510839966005236 color=yellow,shape=circle,flag=1,i=57463,u=0.15064392046205055,v=0.08745106422655047,w=0.5063690026859407,x=3.5526915331132614 color=orange,shape=triangle,flag=0,i=57473,u=0.4835478569328253,v=0.7394294029674733,w=0.5094490708298437,x=3.634359237734911 color=blue,shape=triangle,flag=1,i=57474,u=0.3047030252517603,v=0.7854749436564218,w=0.45509954569842925,x=7.047348711029993 color=yellow,shape=triangle,flag=1,i=57506,u=0.3557250664804664,v=0.8613722336217875,w=0.5188848321598005,x=4.13511689990692 color=red,shape=triangle,flag=0,i=57531,u=0.34310465354277797,v=0.14601516898030686,w=0.48776139903739407,x=3.7085713178943247 color=yellow,shape=square,flag=1,i=57555,u=0.1074819150883004,v=0.14331800130044148,w=0.5194270050530218,x=3.8204075185975 color=red,shape=circle,flag=0,i=57571,u=0.29389097072910497,v=0.3752129737476142,w=0.4563436788366135,x=5.522596038156965 color=red,shape=circle,flag=0,i=57580,u=0.5958110886414048,v=0.5054359815521408,w=0.45319937957392453,x=5.354176766053418 color=red,shape=square,flag=0,i=57596,u=0.7811301545207279,v=0.2980362509854374,w=0.49207538225570135,x=6.027243437914091 color=red,shape=circle,flag=0,i=57610,u=0.8233649279576193,v=0.73904582248031,w=0.4541318258963891,x=7.642428407307745 color=purple,shape=triangle,flag=0,i=57631,u=0.8540315697044478,v=0.04609427008330358,w=0.488262583172852,x=5.539949286347295 color=red,shape=square,flag=0,i=57637,u=0.9420434567416045,v=0.8981000140354319,w=0.48941050607015335,x=7.555764361279043 color=yellow,shape=triangle,flag=1,i=57642,u=0.38968010081327076,v=0.9540814651604933,w=0.514159643781292,x=6.532882011297591 color=yellow,shape=circle,flag=1,i=57651,u=0.9347185453750891,v=0.5447342237797289,w=0.497977505982243,x=3.8019142886853423 color=red,shape=triangle,flag=0,i=57654,u=0.8222235435440701,v=0.3333960510494647,w=0.4995854831609417,x=4.833720416434571 color=red,shape=triangle,flag=1,i=57660,u=0.27702587689935565,v=0.19614331479441227,w=0.5065239584390209,x=5.5927229063235515 color=red,shape=square,flag=0,i=57670,u=0.6366283515101797,v=0.6535462532929339,w=0.5006712583969031,x=4.912964686166155 color=red,shape=triangle,flag=1,i=57679,u=0.04334757937389089,v=0.7158486850175766,w=0.5119599316397105,x=5.1203072145074975 color=red,shape=circle,flag=1,i=57681,u=0.2210413188660827,v=0.2915898689504459,w=0.45556445015967656,x=4.681601871130785 color=purple,shape=triangle,flag=1,i=57692,u=0.8628936629670622,v=0.1966642019894962,w=0.48856646652539204,x=5.970464010626437 color=yellow,shape=square,flag=1,i=57698,u=0.7242860726730068,v=0.5339888683866254,w=0.501527012580424,x=5.345921023483595 color=green,shape=triangle,flag=0,i=57710,u=0.37101762957900253,v=0.3443520380884232,w=0.47797586146427484,x=3.870324394854277 color=red,shape=circle,flag=0,i=57731,u=0.4821465757067268,v=0.39316657572010405,w=0.4571060516885655,x=5.00958653366266 color=red,shape=circle,flag=0,i=57746,u=0.34511084840221895,v=0.4140085082708238,w=0.46754512089738315,x=5.977675868607181 color=yellow,shape=square,flag=1,i=57767,u=0.9499162157354892,v=0.8075609279750459,w=0.4931056053774451,x=3.7522855466153664 color=red,shape=square,flag=1,i=57772,u=0.6814429124267467,v=0.44075167328087106,w=0.51896667418475,x=6.784776699806738 color=yellow,shape=triangle,flag=1,i=57774,u=0.3460115788163808,v=0.03989743806852186,w=0.5114632861912366,x=4.15447347610549 color=red,shape=triangle,flag=0,i=57789,u=0.8223596537644666,v=0.2917985221516214,w=0.5275780753259222,x=4.855470806583331 color=blue,shape=square,flag=1,i=57802,u=0.7814522755751936,v=0.4011480871235916,w=0.5415249320577042,x=3.6637416731066588 color=purple,shape=triangle,flag=0,i=57808,u=0.20389189152079468,v=0.9808875832638677,w=0.48579353711463447,x=5.269943112967642 color=green,shape=circle,flag=1,i=57809,u=0.5341964740458628,v=0.3473966837132799,w=0.5275397137823564,x=6.386015994285457 color=red,shape=circle,flag=0,i=57815,u=0.3619390582070744,v=0.33255552951042255,w=0.45620209335071493,x=5.261101692283105 color=yellow,shape=square,flag=0,i=57848,u=0.6966389553248836,v=0.8908193594966756,w=0.49985893675191756,x=4.860279612009441 color=red,shape=circle,flag=0,i=57856,u=0.722947859807555,v=0.773463345237181,w=0.45605999833559924,x=6.91278234216967 color=red,shape=square,flag=0,i=57868,u=0.14254976689213528,v=0.4043076443225304,w=0.5104583797348571,x=6.065852860375048 color=red,shape=triangle,flag=0,i=57917,u=0.6174810588832751,v=0.9687278093726709,w=0.525284631043206,x=5.2050143792971495 color=blue,shape=triangle,flag=1,i=57926,u=0.6912373499388854,v=0.2827176950147081,w=0.46290998325400357,x=4.9373944996986525 color=red,shape=circle,flag=1,i=57939,u=0.5646429245654448,v=0.6299242940932583,w=0.46545787411508893,x=5.4817928223811885 color=red,shape=triangle,flag=0,i=57941,u=0.28613750402421345,v=0.7420133839544106,w=0.5236049145924581,x=4.972331408060795 color=yellow,shape=triangle,flag=1,i=57976,u=0.02328897123233986,v=0.8728876102816807,w=0.5124783146272579,x=2.0501167711259147 color=red,shape=square,flag=1,i=57977,u=0.6018861306238275,v=0.04060100984613002,w=0.5068073649563413,x=5.670692988748578 color=blue,shape=triangle,flag=1,i=57984,u=0.5041221527024292,v=0.22928520241395167,w=0.46383528432360316,x=4.563692432051018 color=red,shape=square,flag=0,i=57990,u=0.6292919350374835,v=0.16731851752737936,w=0.5066900825728794,x=4.2326378211670335 color=red,shape=square,flag=0,i=58005,u=0.056491194565309044,v=0.5682866397729098,w=0.5030114013487311,x=5.056221590340435 color=blue,shape=square,flag=1,i=58021,u=0.03453216727901298,v=0.6170675254270521,w=0.5377164525247832,x=3.812252287605825 color=red,shape=circle,flag=0,i=58027,u=0.9342661181784879,v=0.8352788276045955,w=0.4661641058179585,x=2.5817231019526594 color=red,shape=triangle,flag=0,i=58046,u=0.07843948971308079,v=0.4995848419188429,w=0.5217584461237067,x=4.531222533167488 color=red,shape=triangle,flag=0,i=58047,u=0.9078974894907839,v=0.0879068083362109,w=0.5226871726803604,x=6.2939959995419335 color=red,shape=square,flag=0,i=58075,u=0.7013672841889225,v=0.29465664118913204,w=0.5125841365207433,x=5.053586573263087 color=blue,shape=square,flag=0,i=58078,u=0.753189614429923,v=0.7024283523871544,w=0.541288289102727,x=3.311674915905701 color=green,shape=circle,flag=0,i=58094,u=0.7744418231840695,v=0.3324840149989756,w=0.5307729247001642,x=4.848679905277873 color=purple,shape=triangle,flag=0,i=58104,u=0.669227967847044,v=0.3237591477708297,w=0.47793061337111314,x=2.365978168115422 color=red,shape=triangle,flag=0,i=58113,u=0.9614312210130712,v=0.20261199579282851,w=0.5270456824641488,x=6.454928663423767 color=orange,shape=triangle,flag=0,i=58118,u=0.8527805448627521,v=0.9945548365280416,w=0.5067710924833986,x=6.565683264595286 color=green,shape=circle,flag=0,i=58125,u=0.016829507182027248,v=0.6631387994706708,w=0.5317288275743672,x=5.076598194600096 color=red,shape=triangle,flag=1,i=58128,u=0.38953541435785677,v=0.08064794347039539,w=0.5270273656555923,x=3.8576852102002053 color=green,shape=circle,flag=0,i=58172,u=0.7692883104468107,v=0.9704200386450227,w=0.5301771736237355,x=3.0787169782653705 color=blue,shape=square,flag=1,i=58205,u=0.9139907247345335,v=0.0631186842959306,w=0.5355092665657734,x=3.874123653800236 color=purple,shape=triangle,flag=0,i=58235,u=0.5590233167117773,v=0.5530982609728853,w=0.477038335154019,x=5.100754652066263 color=red,shape=circle,flag=0,i=58247,u=0.7888680495919136,v=0.7970614189925921,w=0.4874588405896818,x=5.006356308204476 color=purple,shape=square,flag=0,i=58251,u=0.4501224039416202,v=0.7555272334404862,w=0.5220107834612485,x=3.510281002395835 color=red,shape=square,flag=0,i=58261,u=0.6228628555349012,v=0.8257224503666623,w=0.5019733390119124,x=3.58731584511304 color=yellow,shape=square,flag=1,i=58262,u=0.4084622196476705,v=0.6203721816193781,w=0.5058602094520064,x=5.1071266294854505 color=red,shape=triangle,flag=1,i=58267,u=0.0990239735967664,v=0.5928044158065129,w=0.5277814029048679,x=4.129341735861966 color=yellow,shape=triangle,flag=1,i=58269,u=0.28863622879125594,v=0.5219089913113051,w=0.501181056281952,x=6.805928625406299 color=red,shape=triangle,flag=0,i=58291,u=0.7488317523088905,v=0.4244727651395648,w=0.5292518064783566,x=4.163104463278721 color=red,shape=square,flag=0,i=58293,u=0.4523751608592228,v=0.37396633862360074,w=0.498832444910943,x=1.689435892425134 color=red,shape=square,flag=0,i=58305,u=0.3663341440656648,v=0.9286463325463061,w=0.49866636736612063,x=6.025152801409885 color=red,shape=square,flag=0,i=58307,u=0.8371059671758849,v=0.8171431625057642,w=0.5027239947717429,x=7.358223709838609 color=purple,shape=square,flag=0,i=58310,u=0.8650044776033571,v=0.17748234761700155,w=0.519046758735384,x=5.47792772385575 color=green,shape=circle,flag=1,i=58319,u=0.536286085982837,v=0.3933444036103214,w=0.5298185420316195,x=4.82429925301114 color=green,shape=square,flag=0,i=58324,u=0.8529107372710464,v=0.5405310906383437,w=0.4817690340074414,x=5.672703995607141 color=blue,shape=triangle,flag=0,i=58327,u=0.9836306342365648,v=0.5580768581604194,w=0.4779274157234226,x=6.683490874494278 color=purple,shape=square,flag=0,i=58328,u=0.7273236786663938,v=0.882744937276109,w=0.5184927030846959,x=5.134432288561755 color=red,shape=triangle,flag=0,i=58334,u=0.3024102692037406,v=0.6041772421910551,w=0.5288266186541732,x=4.134730630542767 color=red,shape=triangle,flag=1,i=58335,u=0.7760809534743702,v=0.9209548838435749,w=0.5242428182140852,x=3.724709105963436 color=red,shape=square,flag=1,i=58341,u=0.38455578067821794,v=0.10309244931028216,w=0.49100402236276647,x=3.300544412714942 color=green,shape=square,flag=0,i=58342,u=0.041770092456995256,v=0.5653991838616541,w=0.482779161285375,x=5.829280550418571 color=red,shape=square,flag=0,i=58403,u=0.22119036413199444,v=0.45549972236039427,w=0.4967131757267248,x=3.6395484393390958 color=red,shape=triangle,flag=0,i=58412,u=0.34515999026724253,v=0.8067283710107612,w=0.517895299072838,x=5.126823397695507 color=purple,shape=triangle,flag=0,i=58433,u=0.22283510207794788,v=0.741953760223494,w=0.4640615700408663,x=4.158819477747105 color=blue,shape=circle,flag=1,i=58453,u=0.8392015555058513,v=0.5455764168759512,w=0.5245742206618093,x=4.628803773278881 color=purple,shape=triangle,flag=1,i=58455,u=0.8893469901719875,v=0.18434977141471764,w=0.46176350669815247,x=6.356909114263387 color=green,shape=square,flag=1,i=58462,u=0.5765420268540784,v=0.8831731033254521,w=0.4884692983115413,x=6.528111288020533 color=red,shape=circle,flag=0,i=58468,u=0.6789937093939847,v=0.731985813167086,w=0.5003190530763734,x=2.997453097180325 color=orange,shape=triangle,flag=1,i=58471,u=0.7080025391419025,v=0.48091255603363914,w=0.5068436073986482,x=4.692879025150829 color=green,shape=square,flag=0,i=58478,u=0.8844980262525789,v=0.652029271902799,w=0.4873767399101722,x=5.300677709842588 color=blue,shape=circle,flag=0,i=58495,u=0.24613519589961708,v=0.39875643763618507,w=0.5278567895651531,x=3.4742887516143646 color=red,shape=circle,flag=0,i=58512,u=0.9217057340403986,v=0.9602433928493403,w=0.5023738971546923,x=6.261719743721753 color=blue,shape=triangle,flag=1,i=58515,u=0.8901273559874665,v=0.6476409389872694,w=0.4874259285482577,x=5.056998927734246 color=green,shape=circle,flag=0,i=58525,u=0.16680279431025324,v=0.599957009048826,w=0.538139640406762,x=4.852636257864416 color=red,shape=square,flag=0,i=58541,u=0.9731259228381611,v=0.7817514446657341,w=0.4852653696528141,x=4.3114959477113475 color=red,shape=square,flag=0,i=58546,u=0.9125850124338356,v=0.4409835879738838,w=0.48112557584212456,x=5.1008125395301604 color=yellow,shape=triangle,flag=1,i=58574,u=0.21184116734669112,v=0.34350488899414156,w=0.4926646864103738,x=4.652611868947775 color=red,shape=triangle,flag=1,i=58590,u=0.42507658367336476,v=0.21016489604327915,w=0.5035631971135429,x=4.682735965201783 color=red,shape=triangle,flag=0,i=58600,u=0.8138242171256701,v=0.15298589168226517,w=0.5011786952142664,x=6.183038756572543 color=blue,shape=circle,flag=0,i=58618,u=0.8055517396574174,v=0.25190528517481103,w=0.5317737094468621,x=6.232033008546204 color=red,shape=triangle,flag=0,i=58629,u=0.8333627464577654,v=0.8048486676246054,w=0.49081665542292613,x=4.753468945440081 color=red,shape=square,flag=0,i=58635,u=0.8283882073520143,v=0.7664605134595852,w=0.4710204681907803,x=4.03515813210888 color=purple,shape=square,flag=0,i=58647,u=0.7341327240760214,v=0.08849070682205296,w=0.5274713300012743,x=5.885548222539512 color=red,shape=triangle,flag=1,i=58651,u=0.160406193480767,v=0.9313706492934899,w=0.49582790954757083,x=7.237443140445843 color=orange,shape=circle,flag=0,i=58678,u=0.8526598416126374,v=0.846180672330378,w=0.5038970535979693,x=6.965075082684908 color=yellow,shape=circle,flag=1,i=58702,u=0.6540249477176301,v=0.7676035130825353,w=0.4997081039816843,x=2.9261088871125622 color=red,shape=triangle,flag=0,i=58707,u=0.48020589114775214,v=0.0642982089297347,w=0.4963296052523536,x=4.323968118097352 color=green,shape=square,flag=1,i=58729,u=0.24081441277584592,v=0.7535243105422101,w=0.49602410655824525,x=8.433989906307671 color=red,shape=square,flag=1,i=58732,u=0.6044893290864333,v=0.31575083068632737,w=0.4666483148997662,x=4.2872093119365795 color=blue,shape=circle,flag=1,i=58761,u=0.7736819807853733,v=0.27121674871610024,w=0.5304317528332403,x=3.433947168154671 color=red,shape=triangle,flag=0,i=58766,u=0.7923922344707054,v=0.6590670763835446,w=0.49577917620346657,x=6.119542141095465 color=red,shape=square,flag=0,i=58770,u=0.8882460551360579,v=0.14372946573581613,w=0.46817836161335413,x=5.343391547798532 color=red,shape=square,flag=0,i=58786,u=0.7266871347048595,v=0.25953672310532006,w=0.4691136530008869,x=5.819682185014687 color=green,shape=triangle,flag=1,i=58790,u=0.8623520577678409,v=0.95679961338491,w=0.4899748423624019,x=2.5710146291060245 color=red,shape=square,flag=0,i=58791,u=0.0847414066198453,v=0.6677842249273277,w=0.46471543190025083,x=6.260401915212237 color=red,shape=square,flag=0,i=58819,u=0.5123300445781311,v=0.3118425790761661,w=0.4594267189708461,x=5.009860473207472 color=purple,shape=triangle,flag=0,i=58851,u=0.9799352597926767,v=0.1588428171799734,w=0.4475443411229563,x=5.4227244989926 color=red,shape=triangle,flag=0,i=58862,u=0.8112589931962002,v=0.12831513933525085,w=0.4922712354464417,x=3.538258302561511 color=blue,shape=square,flag=1,i=58871,u=0.5473903377576527,v=0.6909896477605875,w=0.5345265456708845,x=4.388932767057418 color=purple,shape=triangle,flag=0,i=58881,u=0.8777280580134494,v=0.3955145992873986,w=0.44738938938831824,x=4.620651176690026 color=blue,shape=square,flag=1,i=58895,u=0.7291766541236148,v=0.29922655475786664,w=0.5436646021049597,x=3.7845402706451114 color=green,shape=square,flag=0,i=58905,u=0.6294930752661401,v=0.22304826646157672,w=0.4993973336074978,x=5.329000184983069 color=green,shape=square,flag=0,i=58913,u=0.340246931270076,v=0.7477935410227243,w=0.4958621026062283,x=4.902393591550665 color=red,shape=square,flag=1,i=58937,u=0.25005493192702166,v=0.6009872970522427,w=0.47523361850663626,x=5.1648570823276865 color=red,shape=triangle,flag=0,i=58965,u=0.10110453502245331,v=0.7832535542117784,w=0.49604315405130983,x=5.8613494883678925 color=purple,shape=square,flag=0,i=58967,u=0.9366059760590085,v=0.3874098466275303,w=0.5120726336459891,x=3.0627487531820283 color=blue,shape=circle,flag=1,i=58975,u=0.06780676925715112,v=0.568931748987323,w=0.5385689010987372,x=3.709861800026573 color=yellow,shape=triangle,flag=1,i=58980,u=0.7068476708732563,v=0.9999189897724752,w=0.46884528404855447,x=4.330113594485119 color=red,shape=triangle,flag=1,i=58983,u=0.9680396921055037,v=0.5004152074794316,w=0.4883577740670396,x=5.062226901519312 color=purple,shape=triangle,flag=0,i=58984,u=0.6485406826372255,v=0.26055023531394605,w=0.44964428159147796,x=3.679771822144931 color=red,shape=square,flag=1,i=58990,u=0.09822042499794581,v=0.4721308614555967,w=0.4716577332666743,x=5.038923484700747 color=yellow,shape=triangle,flag=1,i=58998,u=0.5428921513623008,v=0.44422778344940905,w=0.4689031432263098,x=5.328961305576487 color=blue,shape=square,flag=1,i=59001,u=0.8566177608383426,v=0.8271499907892523,w=0.5466309172928557,x=3.742076008326857 color=blue,shape=circle,flag=1,i=59010,u=0.20746697621757848,v=0.0416450436545337,w=0.5350822997282313,x=3.987876556185007 color=green,shape=triangle,flag=0,i=59021,u=0.2861756112499002,v=0.5720629411750932,w=0.5085520503326988,x=6.3610492698092465 color=green,shape=square,flag=0,i=59032,u=0.9294703650367374,v=0.15595264499897765,w=0.495347833271314,x=5.13528728899091 color=red,shape=triangle,flag=1,i=59040,u=0.6693516488305271,v=0.9363959410830951,w=0.4834568941426011,x=3.832096208108085 color=purple,shape=square,flag=0,i=59069,u=0.9475916179839136,v=0.29865429028869617,w=0.5146889666558835,x=2.539750454831528 color=red,shape=triangle,flag=0,i=59071,u=0.3130709106299676,v=0.38871256610085025,w=0.48164877534132167,x=3.3211790766925318 color=red,shape=square,flag=0,i=59074,u=0.39113693958859785,v=0.7761577445177983,w=0.4663004474487686,x=4.693395763208141 color=purple,shape=square,flag=0,i=59076,u=0.30019674425684617,v=0.6262114315377585,w=0.5160162501758863,x=2.943606204006251 color=red,shape=square,flag=0,i=59087,u=0.5652931995020114,v=0.9310644767615538,w=0.46371883276660253,x=4.587457379634179 color=orange,shape=square,flag=0,i=59108,u=0.8523526718052418,v=0.045441157692545864,w=0.4901543677067723,x=5.437648718691428 color=purple,shape=circle,flag=0,i=59120,u=0.6132680906024632,v=0.24071681251837995,w=0.4852945274864665,x=4.7293442246217 color=blue,shape=triangle,flag=1,i=59136,u=0.9027038969310971,v=0.5682822528015326,w=0.49163730560647995,x=4.775580298639574 color=yellow,shape=square,flag=1,i=59137,u=0.4328651737515983,v=0.30369182610863665,w=0.49387608114631815,x=4.563515629843871 color=red,shape=square,flag=0,i=59139,u=0.3386320831614862,v=0.7172145445087343,w=0.4588487112561816,x=4.326448248575368 color=orange,shape=square,flag=1,i=59144,u=0.21621923205720683,v=0.612406871210008,w=0.48875106135898644,x=5.566531426339076 color=blue,shape=square,flag=0,i=59169,u=0.12743812900976104,v=0.3704811127026947,w=0.5505346354396387,x=3.754022129962694 color=blue,shape=circle,flag=1,i=59187,u=0.3545446952494561,v=0.5803454111094273,w=0.5291069870863622,x=5.770355484262528 color=purple,shape=square,flag=0,i=59198,u=0.09607190841293178,v=0.13684392353269614,w=0.5147065416334244,x=4.494554722658508 color=red,shape=square,flag=1,i=59204,u=0.21662850506626408,v=0.21442710835724388,w=0.46647522160934335,x=4.186516102379482 color=purple,shape=circle,flag=0,i=59228,u=0.9859248949980823,v=0.4472860339755894,w=0.4850433406069708,x=5.0427622870286655 color=orange,shape=square,flag=1,i=59241,u=0.40227896915373196,v=0.8396533887004508,w=0.49137323091255614,x=5.735128743806576 color=yellow,shape=square,flag=1,i=59248,u=0.1586216027165228,v=0.578425993724517,w=0.4982541930814546,x=5.720989004286217 color=blue,shape=circle,flag=1,i=59278,u=0.024773368142677055,v=0.40036101451109285,w=0.5285292887238052,x=5.6213133291368464 color=yellow,shape=triangle,flag=1,i=59293,u=0.7864088027130408,v=0.9554833709529619,w=0.4766187647235236,x=3.739850054462682 color=red,shape=triangle,flag=0,i=59298,u=0.11189153471928626,v=0.29773142203006864,w=0.4940937002097084,x=3.7831513988412806 color=red,shape=square,flag=1,i=59315,u=0.23259496109788058,v=0.4741853404934552,w=0.49431057508140075,x=4.561900354549574 color=purple,shape=triangle,flag=0,i=59319,u=0.4057531538385848,v=0.30910095231087875,w=0.4424574385120491,x=5.534218913750713 color=red,shape=circle,flag=0,i=59337,u=0.9486119039495877,v=1.0468280305327768,w=0.511655208248468,x=4.611930670204417 color=purple,shape=square,flag=1,i=59342,u=0.37978890485357586,v=0.8128658675617892,w=0.5234976358529531,x=6.111507237953888 color=blue,shape=circle,flag=0,i=59362,u=0.9641680881641452,v=0.4150589103472394,w=0.5259584938612869,x=5.551265241044931 color=red,shape=triangle,flag=0,i=59366,u=0.562197139585697,v=0.41255288922228106,w=0.4906806182909494,x=5.546655679971994 color=red,shape=circle,flag=0,i=59378,u=0.48078922559343307,v=0.4229723230857455,w=0.5069760450637796,x=3.2154294107148407 color=red,shape=triangle,flag=1,i=59380,u=0.6766474296955985,v=0.17302563156129103,w=0.4881119613024596,x=3.7959813405567853 color=yellow,shape=triangle,flag=1,i=59381,u=0.2926450242309324,v=0.2911575047655115,w=0.475505781890316,x=5.692694144796749 color=red,shape=square,flag=0,i=59390,u=0.5697875239428923,v=0.679689053555388,w=0.4831269467552712,x=5.362638083319464 color=green,shape=triangle,flag=0,i=59406,u=0.4856847425607669,v=0.7602160955896392,w=0.5116839474995949,x=6.707703894930925 color=red,shape=triangle,flag=0,i=59409,u=0.11662290117546481,v=0.279683717617913,w=0.48578708535661336,x=4.025282919744382 color=yellow,shape=square,flag=1,i=59411,u=0.10242685846591137,v=0.14244272059015983,w=0.49332686687271954,x=5.046470073616738 color=green,shape=triangle,flag=0,i=59416,u=0.5036024284493329,v=0.000716883409890845,w=0.5078436931234223,x=5.386783602754711 color=red,shape=square,flag=1,i=59421,u=0.9565992780801307,v=0.391888547519641,w=0.4882428536993298,x=4.678069335734491 color=red,shape=square,flag=1,i=59431,u=0.045645722259456956,v=0.7678316856228136,w=0.49301891154484795,x=5.0994860621646 color=green,shape=square,flag=0,i=59437,u=0.8965429844923264,v=0.8594422863253137,w=0.504237440861051,x=4.052025996361799 color=yellow,shape=triangle,flag=1,i=59447,u=0.26519000677552373,v=0.5146021817953338,w=0.47031253457870803,x=6.906317931075872 color=red,shape=square,flag=0,i=59456,u=0.19319589868062348,v=0.27109174465708263,w=0.49075623527344225,x=3.5055432443081127 color=red,shape=square,flag=0,i=59461,u=0.8342347266008945,v=0.050210087252675284,w=0.4829427458824445,x=6.258562385907329 color=red,shape=triangle,flag=0,i=59463,u=0.47152394364522066,v=0.11591939306515076,w=0.4653369317500246,x=7.077570170395727 color=red,shape=square,flag=1,i=59465,u=0.47119118618167777,v=0.7221904681946161,w=0.4813686074054236,x=4.238091218942955 color=red,shape=square,flag=0,i=59469,u=0.28328416261445555,v=0.7499332799763361,w=0.47773188592199,x=5.9402790022423275 color=blue,shape=circle,flag=1,i=59485,u=0.18499600179476738,v=0.26821367317511613,w=0.52838909703659,x=5.819455103995662 color=orange,shape=triangle,flag=0,i=59489,u=0.19018417868188553,v=0.11667221083622226,w=0.5108476884795996,x=6.895272007440184 color=red,shape=square,flag=1,i=59511,u=0.9721017469870473,v=0.21329374223958908,w=0.4729102824029775,x=5.80962377361852 color=red,shape=circle,flag=0,i=59513,u=0.669909552192451,v=0.5714566604335872,w=0.49609823369631634,x=4.630498467935303 color=blue,shape=square,flag=1,i=59538,u=0.2781074948353178,v=0.5853700862533163,w=0.5272440504419877,x=5.051385157745677 color=yellow,shape=triangle,flag=1,i=59543,u=0.8121305258287984,v=0.9439243790359957,w=0.47002328233164337,x=4.808869080797949 color=yellow,shape=square,flag=1,i=59562,u=0.5588039639966413,v=0.21895882842418446,w=0.4924397608576836,x=5.930823306177107 color=red,shape=circle,flag=0,i=59585,u=0.8431743909773395,v=0.8429992075973789,w=0.49564124784555214,x=5.06138198461682 color=blue,shape=triangle,flag=0,i=59590,u=0.2623185427858544,v=0.36658803068427936,w=0.4956368567290423,x=4.954940895755882 color=red,shape=circle,flag=0,i=59595,u=0.26959762349647964,v=0.2530065846482056,w=0.49063917380089617,x=4.081586199641363 color=green,shape=triangle,flag=0,i=59603,u=0.6092615715256717,v=0.21159160957338474,w=0.5118969562633681,x=4.6856635517272425 color=red,shape=square,flag=0,i=59612,u=0.12160457464683472,v=0.7153362033575198,w=0.4786915873610719,x=4.145958039579617 color=blue,shape=triangle,flag=1,i=59620,u=0.709404390250226,v=0.16203635906555813,w=0.4978395544167789,x=4.23006581964683 color=green,shape=triangle,flag=0,i=59632,u=0.23199631072772864,v=0.4803312745946785,w=0.5099247581319517,x=4.091101499560562 color=red,shape=triangle,flag=0,i=59633,u=0.8859601371346695,v=0.22373794956094917,w=0.46891562801991576,x=4.3483032931649825 color=green,shape=square,flag=0,i=59639,u=0.9957463277412469,v=0.24723951040588443,w=0.5016546264278595,x=3.4834589129389477 color=blue,shape=triangle,flag=1,i=59643,u=0.35522185926251837,v=0.871845694415609,w=0.5040840399863876,x=4.315572437101423 color=purple,shape=circle,flag=0,i=59658,u=0.036063302356188154,v=0.23811982898511808,w=0.48315474999216695,x=4.07325211122341 color=blue,shape=square,flag=1,i=59662,u=0.7688878054881069,v=0.05073358446579801,w=0.5151669446320261,x=5.734002017117182 color=yellow,shape=triangle,flag=1,i=59675,u=0.09661187384420866,v=0.0708294155067768,w=0.4656499827251335,x=4.479820656523532 color=red,shape=square,flag=0,i=59700,u=0.7697779674760553,v=0.6087426987674531,w=0.48009991096523863,x=5.276041632364311 color=red,shape=triangle,flag=0,i=59704,u=0.6145378722431138,v=0.2522093198037776,w=0.46342618533547025,x=4.750063816585814 color=red,shape=triangle,flag=0,i=59721,u=0.6074021231045044,v=0.4459202208723996,w=0.46478686150331816,x=5.633280256071977 color=yellow,shape=circle,flag=0,i=59725,u=0.16312410076670225,v=0.9525579123223971,w=0.515915123861317,x=3.4930911846115293 color=red,shape=square,flag=1,i=59730,u=0.14767562172521354,v=0.11163258893136208,w=0.4735042506096502,x=4.1215875375541735 color=red,shape=square,flag=0,i=59731,u=0.7717895506774058,v=0.3209651966078415,w=0.4777527155377761,x=3.277936085505915 color=red,shape=square,flag=1,i=59734,u=0.19754839918290767,v=0.11239951507997248,w=0.4783758644194376,x=6.128778661460413 color=red,shape=square,flag=1,i=59738,u=0.28519754752302573,v=0.3798685944960586,w=0.48184288043656176,x=6.185457242216272 color=blue,shape=circle,flag=1,i=59772,u=0.9327138914480179,v=0.660543523574067,w=0.5326944508585649,x=4.61914047857024 color=red,shape=square,flag=1,i=59780,u=0.5831547754084914,v=0.16283501386351695,w=0.4686528960135068,x=5.409508252510452 color=red,shape=square,flag=0,i=59787,u=0.017975872307126717,v=0.09938042362589927,w=0.4672523732912803,x=5.293585731193196 color=yellow,shape=circle,flag=1,i=59803,u=0.9321732779863839,v=0.2741867762484177,w=0.5165428172575693,x=3.3187550721737034 color=orange,shape=square,flag=0,i=59812,u=0.06314784014201447,v=0.15811283944090349,w=0.4935201981856332,x=5.164577796001799 color=green,shape=triangle,flag=0,i=59814,u=0.299391082596862,v=0.41163536573041415,w=0.5046643056866701,x=4.512986146614555 color=red,shape=square,flag=0,i=59830,u=0.14517045684523344,v=0.013670877743999998,w=0.4817437539295141,x=6.326949796935388 color=blue,shape=square,flag=0,i=59854,u=0.4476611337505636,v=0.7801221096820661,w=0.5191395482079683,x=5.539605026604586 color=red,shape=square,flag=1,i=59871,u=0.859232642447632,v=0.22003881191397745,w=0.4914506540710125,x=5.8982398632018525 color=red,shape=square,flag=0,i=59872,u=0.49753080437928054,v=0.6587404206820608,w=0.4866024176735825,x=3.6797731454982743 color=red,shape=square,flag=0,i=59873,u=0.7044923244705168,v=0.9340596054256529,w=0.4883296575590863,x=3.905597431766193 color=green,shape=circle,flag=0,i=59877,u=0.42103210314596606,v=0.8357212534144285,w=0.5480406068658668,x=5.378146498354905 color=red,shape=circle,flag=1,i=59910,u=0.7263060939063148,v=0.7536136460986113,w=0.49644669950941334,x=3.8757988386798465 color=red,shape=square,flag=1,i=59921,u=0.24880260275220722,v=0.023725022806381113,w=0.487536845817757,x=6.016966219740868 color=green,shape=square,flag=0,i=59936,u=0.7763864793820608,v=0.31561068312737994,w=0.4989935942600376,x=5.933257794344787 color=red,shape=triangle,flag=0,i=59947,u=0.12528610031358367,v=0.8906913922061578,w=0.47948130182690357,x=5.9629837948227005 color=purple,shape=triangle,flag=0,i=59956,u=0.5816387676459744,v=0.9511327115745335,w=0.4603331122226516,x=7.179647177872418 color=red,shape=square,flag=0,i=59959,u=0.2578253136093108,v=0.5892041381039295,w=0.4831056459328499,x=5.441853050502611 color=red,shape=square,flag=0,i=59977,u=0.8973190947190652,v=0.5018151811839017,w=0.4853163651983584,x=4.61669823550631 color=purple,shape=circle,flag=0,i=59984,u=0.8300008706180275,v=0.1275332490304978,w=0.4750718152173571,x=4.511563227189963 color=red,shape=square,flag=0,i=59989,u=0.5273822465701745,v=0.9286734523645935,w=0.48890214223520034,x=5.427272197226707 color=blue,shape=square,flag=1,i=59993,u=0.01812674786184776,v=0.06313323303656337,w=0.5029760870794235,x=6.1291662183615365 color=red,shape=square,flag=1,i=59996,u=0.10191295874723083,v=0.01178821607847469,w=0.4889066278006681,x=3.513404926195023 color=red,shape=square,flag=1,i=60023,u=0.7838214512210948,v=0.5825956262321237,w=0.48391871259128105,x=4.63728636336322 color=green,shape=square,flag=0,i=60031,u=0.2812562665580939,v=0.2756903188251216,w=0.5049104712505684,x=4.958042604347722 color=red,shape=triangle,flag=1,i=60033,u=0.5149792094014062,v=0.08030516396604948,w=0.4783715629622743,x=6.001861021926376 color=red,shape=square,flag=0,i=60036,u=0.25865300869772023,v=0.2810863103838145,w=0.4906321649433822,x=6.512943775572094 color=red,shape=triangle,flag=0,i=60041,u=0.7121380140783574,v=0.3914785923081784,w=0.4741953774617361,x=6.576617109348067 color=blue,shape=triangle,flag=0,i=60043,u=0.36869112608804,v=0.8001615458818079,w=0.48635626298799045,x=3.57447294161479 color=purple,shape=triangle,flag=0,i=60057,u=0.6891384831640978,v=0.3357481194274481,w=0.460734939938052,x=6.0371079828721435 color=red,shape=circle,flag=1,i=60079,u=0.6938631031492669,v=0.6208774028350542,w=0.5004387524845038,x=5.956376933506028 color=purple,shape=triangle,flag=0,i=60083,u=0.5856512822237091,v=0.36554759366219336,w=0.4640443816913114,x=6.100398057947508 color=red,shape=square,flag=0,i=60092,u=0.8660709900065859,v=0.9273650846271052,w=0.49045899266672016,x=3.694815146011953 color=green,shape=square,flag=1,i=60104,u=0.08753092756593095,v=0.7785159087286321,w=0.509951811134412,x=4.7146650347883785 color=red,shape=circle,flag=0,i=60110,u=0.06721694669057832,v=0.15719799892416475,w=0.4962263043647782,x=3.556245430527886 color=red,shape=triangle,flag=0,i=60116,u=0.06713184793043103,v=0.5791242899788971,w=0.48704038064901384,x=3.9321200064963686 color=orange,shape=triangle,flag=1,i=60125,u=0.4602726170278648,v=0.944503432262257,w=0.5034391366080336,x=5.6848123231107195 color=red,shape=triangle,flag=0,i=60126,u=0.9996614910922645,v=0.07233426867697246,w=0.48617011659381976,x=5.751868107675523 color=red,shape=square,flag=1,i=60127,u=0.7823409978929143,v=0.4792437505690891,w=0.4972645493601718,x=6.0799965297228775 color=red,shape=square,flag=1,i=60161,u=0.7330074587171623,v=0.9074755779508309,w=0.4978493810854733,x=7.00513807387306 color=yellow,shape=triangle,flag=1,i=60169,u=0.2591390012141541,v=0.04055506669904452,w=0.4695202283472291,x=4.402007284014633 color=red,shape=triangle,flag=0,i=60171,u=0.9980645351223236,v=0.8691009559567416,w=0.47937656476978113,x=5.755333219904422 color=green,shape=square,flag=0,i=60183,u=0.3374471439395277,v=0.1486784869787705,w=0.5081179655250804,x=5.276210095435389 color=purple,shape=square,flag=0,i=60188,u=0.3162527134231783,v=0.6221869218763099,w=0.528659860431892,x=5.659532063374793 color=red,shape=triangle,flag=0,i=60189,u=0.7552699472402814,v=0.2368027970925739,w=0.4864831923304649,x=5.841106271389741 color=red,shape=circle,flag=0,i=60196,u=0.19340501200990967,v=0.28034400077865584,w=0.4850449344289182,x=6.485939862731996 color=red,shape=square,flag=0,i=60216,u=0.8810670865088781,v=0.5412594578961352,w=0.4836614115462953,x=5.581688877735268 color=green,shape=circle,flag=1,i=60217,u=0.4100057587606315,v=0.05121955440675141,w=0.542951158152421,x=3.3192357074885486 color=red,shape=square,flag=0,i=60218,u=0.0646847306637629,v=0.08358166281191581,w=0.48069838295384115,x=6.374792858788698 color=yellow,shape=square,flag=1,i=60234,u=0.29763588162061483,v=0.4822968296523553,w=0.5249462934370704,x=4.186304568925794 color=red,shape=circle,flag=0,i=60235,u=0.35973802236716823,v=0.32695281407603277,w=0.48776351920577343,x=4.553275861705693 color=red,shape=square,flag=0,i=60240,u=0.8686348409722066,v=0.05122503167764181,w=0.4764515029063973,x=5.150059327536076 color=blue,shape=triangle,flag=0,i=60245,u=0.8822469399477052,v=0.2089840757936804,w=0.47413946278818964,x=6.015399920849606 color=red,shape=square,flag=0,i=60251,u=0.07858733610112978,v=0.22513000306533348,w=0.4742518390027568,x=5.738642465958939 color=purple,shape=square,flag=0,i=60260,u=0.9724754765129763,v=0.8598431190680944,w=0.5251303307557621,x=5.74004652341167 color=red,shape=square,flag=1,i=60283,u=0.8217857343122882,v=0.4724766569907044,w=0.48985911924632036,x=5.7550665953206215 color=red,shape=triangle,flag=1,i=60293,u=0.4174436320443585,v=0.0818948555259601,w=0.4897210966784838,x=3.4750819465734133 color=red,shape=circle,flag=0,i=60312,u=0.5290365243844631,v=0.45561976370868545,w=0.4791553279544811,x=3.5030805602028288 color=yellow,shape=triangle,flag=0,i=60318,u=0.46752802370690716,v=0.6437835090336509,w=0.4645950031622949,x=4.410657423983349 color=yellow,shape=circle,flag=1,i=60322,u=0.33938525828694033,v=0.4927467967496709,w=0.5148269280658283,x=3.2759392762935633 color=purple,shape=square,flag=1,i=60342,u=0.11858156996972902,v=0.9689500949945644,w=0.5264544801289793,x=4.57981700555419 color=red,shape=square,flag=0,i=60345,u=0.10725828146672467,v=0.5671134023892811,w=0.48131623171961896,x=3.773835861866853 color=blue,shape=square,flag=0,i=60348,u=0.29498028590741554,v=0.9111176851694784,w=0.5117503689661391,x=3.575451838518792 color=red,shape=square,flag=0,i=60352,u=0.6599065507527369,v=0.08582757282514442,w=0.4775027095988978,x=4.576116562350592 color=yellow,shape=triangle,flag=1,i=60362,u=0.9668415009904369,v=0.391203983395248,w=0.4682704916987754,x=4.706540200035216 color=red,shape=triangle,flag=1,i=60372,u=0.8175755771981199,v=0.36754896811257676,w=0.4908202755762249,x=5.34889526826722 color=blue,shape=triangle,flag=0,i=60411,u=0.5571999022273035,v=0.9628178133371085,w=0.4888087442471147,x=4.597365840125252 color=red,shape=triangle,flag=0,i=60413,u=0.9408621238999432,v=0.603858306633542,w=0.4729294664039747,x=4.288024716188104 color=blue,shape=triangle,flag=1,i=60419,u=0.2052972681365467,v=0.4362325116244431,w=0.49139311799476687,x=5.019068470514523 color=red,shape=square,flag=0,i=60423,u=0.59381746802724,v=0.595260563747876,w=0.5017081107203388,x=6.094864844860684 color=green,shape=triangle,flag=0,i=60430,u=0.8955355233771013,v=0.19218078824011886,w=0.4893653739016167,x=4.533760129865052 color=red,shape=triangle,flag=0,i=60443,u=0.05696209730598478,v=0.2588562361734128,w=0.47520079488500244,x=3.964653850358843 color=purple,shape=square,flag=0,i=60475,u=0.2830105981314246,v=0.1961643783533038,w=0.5217528894561918,x=5.50138828879668 color=red,shape=triangle,flag=1,i=60491,u=0.4396484351555848,v=0.6148028100358339,w=0.47826159551440234,x=4.6085143798648085 color=red,shape=square,flag=1,i=60498,u=0.19095923398793668,v=0.12027518718769892,w=0.5224695416498987,x=3.5244114880365216 color=yellow,shape=square,flag=1,i=60499,u=0.9169751356807347,v=0.010467376639013648,w=0.519285668323052,x=6.256884862925893 color=red,shape=circle,flag=0,i=60515,u=0.9849290487302916,v=1.004163590473081,w=0.4749339818918633,x=3.265781671299751 color=red,shape=square,flag=1,i=60525,u=0.4230107948511078,v=0.6970638994945618,w=0.5293475768351691,x=5.59859575642475 color=blue,shape=square,flag=1,i=60532,u=0.5654488582651724,v=0.16309904880804227,w=0.5062287771058848,x=5.578740309742421 color=purple,shape=circle,flag=0,i=60534,u=0.04931802554582421,v=0.7314770503214695,w=0.4884183130029546,x=5.811049354827598 color=red,shape=triangle,flag=1,i=60541,u=0.2779413333385813,v=0.16341649987902007,w=0.4815424217173877,x=5.467411398187516 color=yellow,shape=circle,flag=1,i=60545,u=0.689556271739904,v=0.10784055865500419,w=0.5091532973255217,x=4.266690380912545 color=purple,shape=square,flag=0,i=60564,u=0.6736399194722431,v=0.8166936455969278,w=0.5236412485915501,x=4.6300408702139535 color=red,shape=square,flag=0,i=60577,u=0.006960154447920863,v=0.18854556453965643,w=0.5294222230141536,x=5.453903226031674 color=green,shape=triangle,flag=0,i=60581,u=0.9459083712699817,v=0.35490705899504815,w=0.4948107369495015,x=5.052121599496897 color=red,shape=triangle,flag=0,i=60586,u=0.10764049505353857,v=0.0956138006790711,w=0.49511874551605556,x=5.555512700444382 color=blue,shape=triangle,flag=1,i=60594,u=0.7323865110586989,v=0.3551990668965117,w=0.4914224346805326,x=4.775053747320865 color=red,shape=circle,flag=0,i=60596,u=0.22438662961075506,v=0.29079315097619196,w=0.48122732502564625,x=4.171483480337229 color=blue,shape=circle,flag=1,i=60601,u=0.6106848977747265,v=0.7876941758796613,w=0.5312822823466608,x=6.188801400604075 color=red,shape=square,flag=0,i=60620,u=0.6400543618312639,v=0.24143436548567,w=0.5220150168760616,x=4.339685182825391 color=red,shape=square,flag=1,i=60623,u=0.41027956538631183,v=0.9518356784881522,w=0.5119945310324343,x=4.700489664112699 color=blue,shape=square,flag=0,i=60637,u=0.6838808494976234,v=0.5358387115323204,w=0.5064096875079349,x=4.742006631924768 color=yellow,shape=square,flag=1,i=60640,u=0.34755132599157,v=0.8609430106915147,w=0.49720119277707453,x=5.633606132762609 color=red,shape=triangle,flag=0,i=60650,u=0.6423624245958586,v=0.8024822218116717,w=0.48060748553357413,x=5.45092641049676 color=red,shape=square,flag=1,i=60678,u=0.07629736340083904,v=0.8642438572119743,w=0.5168411288934797,x=3.517023458390583 color=red,shape=square,flag=0,i=60679,u=0.07367362091358842,v=0.8983540537729365,w=0.5154650442185652,x=5.893253759620215 color=red,shape=circle,flag=0,i=60727,u=0.016614927787423794,v=-0.04547000496606706,w=0.4849661234279177,x=6.355241846601054 color=purple,shape=triangle,flag=0,i=60751,u=0.038533667680094474,v=0.20724377674189576,w=0.46603362985770486,x=5.429067161296178 color=purple,shape=square,flag=0,i=60762,u=0.8497140275956977,v=0.9763779461261324,w=0.5399639176626764,x=7.5129161373355435 color=red,shape=square,flag=0,i=60778,u=0.9731686307900813,v=0.40459426277744837,w=0.5040836926411789,x=6.5617114075336636 color=red,shape=triangle,flag=0,i=60787,u=0.9795834792511154,v=0.01684817576288289,w=0.47861205080311614,x=3.7273739440080966 color=red,shape=square,flag=1,i=60788,u=0.5444699705095233,v=0.6098074518426574,w=0.5037006414065412,x=3.5432373534458192 color=purple,shape=square,flag=0,i=60798,u=0.9682023322453407,v=0.6346154333987898,w=0.5308698174084637,x=5.384724936478967 color=purple,shape=circle,flag=0,i=60800,u=0.19550633393403594,v=0.338729312866061,w=0.49173512204007286,x=4.807989215253477 color=green,shape=triangle,flag=0,i=60812,u=0.13133219197811485,v=0.6336708439984976,w=0.4954725307705143,x=5.275380054723782 color=red,shape=square,flag=1,i=60817,u=0.652937670494351,v=0.4175649118056507,w=0.506289718755797,x=5.4752026302174635 color=green,shape=triangle,flag=0,i=60818,u=0.07282458371524225,v=0.20417586575315572,w=0.49807778054674634,x=5.090679675026739 color=red,shape=square,flag=0,i=60820,u=0.2516239640465522,v=0.24859650062343153,w=0.5098131578750846,x=4.414335638772218 color=red,shape=circle,flag=1,i=60830,u=0.8142117218255019,v=0.8873630457342749,w=0.4903123237152411,x=7.190824475389927 color=purple,shape=triangle,flag=0,i=60876,u=0.2416322662263728,v=0.30381167794267727,w=0.47021632219011344,x=4.1054767902279865 color=red,shape=triangle,flag=0,i=60877,u=0.5862793977888927,v=0.8002261969651429,w=0.4900026313553891,x=4.973786421586735 color=red,shape=square,flag=1,i=60888,u=0.7023934775730509,v=0.7021373087346692,w=0.5120889673210968,x=4.647736820752722 color=purple,shape=square,flag=0,i=60908,u=0.2619271896052734,v=0.5404501025713073,w=0.515012193771817,x=4.164463504439264 color=red,shape=square,flag=0,i=60921,u=0.6425660122558448,v=0.6695126675524524,w=0.52483335391632,x=5.731219329753633 color=red,shape=circle,flag=0,i=60935,u=0.44797253232491463,v=0.42270944990698744,w=0.4899650743991284,x=5.09036197594088 color=red,shape=triangle,flag=0,i=60946,u=0.8042902254720634,v=0.7166082669926087,w=0.49661375481353576,x=5.209323225833944 color=orange,shape=triangle,flag=1,i=60950,u=0.5201915748923396,v=0.26754408712925837,w=0.5108516350911392,x=6.819727886144155 color=orange,shape=triangle,flag=1,i=60960,u=0.904731906772507,v=0.9620610146052339,w=0.514950425722935,x=4.7406826739650265 color=red,shape=triangle,flag=0,i=60985,u=0.3484291016880289,v=0.1783452957121321,w=0.5008003803252687,x=3.654103873966568 color=yellow,shape=circle,flag=1,i=60986,u=0.17801517756216867,v=0.6008023288667509,w=0.5045357850698797,x=7.417381404988291 color=red,shape=square,flag=0,i=61014,u=0.8485374895960776,v=0.9156155528971213,w=0.5086498143578984,x=6.3346179099081725 color=purple,shape=triangle,flag=0,i=61025,u=0.7874902342591952,v=0.21665795000622023,w=0.4569266419562924,x=4.770474670295125 color=red,shape=circle,flag=0,i=61028,u=0.18140494952400665,v=0.08866788385859563,w=0.49366355213393215,x=2.860607311875004 color=green,shape=square,flag=0,i=61030,u=0.09133863193933855,v=0.694373715130335,w=0.5145616649789181,x=6.632328342374033 color=red,shape=triangle,flag=0,i=61034,u=0.5248296551985476,v=0.8029863176823646,w=0.5127702749492332,x=3.912010138699948 color=orange,shape=square,flag=0,i=61044,u=0.2898748045089715,v=0.8536701379191667,w=0.49890774503602914,x=6.149901939106962 color=purple,shape=square,flag=0,i=61050,u=0.8448465595667581,v=0.5170364857814286,w=0.5042921422037655,x=5.18596154763907 color=purple,shape=circle,flag=0,i=61055,u=0.25508956914459247,v=0.24024794821806583,w=0.504727953767809,x=3.8681131994737292 color=green,shape=circle,flag=0,i=61059,u=0.2886442963069412,v=0.9418778015541577,w=0.49846086314124705,x=6.349863185330958 color=red,shape=triangle,flag=0,i=61065,u=0.8575952324207371,v=0.6588020716675531,w=0.5207722049947101,x=4.2276328828804735 color=green,shape=triangle,flag=0,i=61066,u=0.2662809669984314,v=0.1987284669605881,w=0.5057777398809051,x=3.3848005984338765 color=red,shape=triangle,flag=1,i=61085,u=0.19488650871393232,v=0.4726402997083098,w=0.5138063121553798,x=5.165860778048057 color=red,shape=triangle,flag=0,i=61087,u=0.3031556352264796,v=0.7196635061168956,w=0.51088090222633,x=6.1998207701112085 color=orange,shape=square,flag=1,i=61094,u=0.8779403876123824,v=0.7798192554185158,w=0.49718772298242214,x=5.1018235586077365 color=red,shape=circle,flag=0,i=61097,u=0.15548983287316043,v=0.10911602713099237,w=0.490617004397277,x=4.4318058511393055 color=red,shape=triangle,flag=1,i=61099,u=0.6585576916445907,v=0.5338615856748484,w=0.5129113061633741,x=4.18244520719598 color=yellow,shape=square,flag=0,i=61101,u=0.012536744410525325,v=0.2433144520608007,w=0.4990267345214811,x=6.126888840918949 color=red,shape=square,flag=0,i=61116,u=0.9797924913789501,v=0.22232880990887227,w=0.5222487249549825,x=3.621860673676309 color=red,shape=circle,flag=1,i=61127,u=0.3930768144390525,v=0.4554647978804084,w=0.4963411758276519,x=5.486692374627584 color=red,shape=square,flag=0,i=61134,u=0.3067684059767384,v=0.9172846509418883,w=0.5267657540899479,x=3.866675043547861 color=yellow,shape=square,flag=1,i=61151,u=0.8262122856166667,v=0.05980134224575373,w=0.5048474180113024,x=6.434022674428818 color=red,shape=triangle,flag=1,i=61156,u=0.8912190721179941,v=0.0634747296927507,w=0.5196621111365651,x=4.26893774976731 color=red,shape=circle,flag=0,i=61165,u=0.26669807742281604,v=0.2990826380900149,w=0.5032289635505375,x=4.004513394884534 color=green,shape=square,flag=1,i=61168,u=0.8540259347627556,v=0.5321654340814977,w=0.5135082711211014,x=4.234551468444308 color=yellow,shape=square,flag=1,i=61176,u=0.190434565438922,v=0.7654894204047193,w=0.49856498258069676,x=6.111066606323395 color=yellow,shape=triangle,flag=1,i=61183,u=0.7015332343471989,v=0.8632199990272507,w=0.48495781664928933,x=5.063714991777166 color=yellow,shape=square,flag=1,i=61190,u=0.5154372964414472,v=0.23924871976585527,w=0.49471251054831755,x=6.106156861066687 color=green,shape=circle,flag=0,i=61203,u=0.4815355864808283,v=0.6144924765717046,w=0.4937778373680289,x=4.574622551809915 color=blue,shape=circle,flag=0,i=61209,u=0.6708269149700532,v=0.49124797248493635,w=0.532411661628068,x=8.199510512113994 color=blue,shape=circle,flag=0,i=61214,u=0.2664318774840565,v=0.8817824151982447,w=0.5288885391042243,x=4.750227751871143 color=blue,shape=circle,flag=1,i=61220,u=0.5666796420060147,v=0.44228918409920337,w=0.5324450569077825,x=6.2270721922416366 color=red,shape=circle,flag=1,i=61224,u=0.01752009255670739,v=0.012003433338529424,w=0.49818512336643095,x=5.744755900379748 color=blue,shape=triangle,flag=1,i=61278,u=0.6153931662265688,v=0.4457963077074518,w=0.4768612589726274,x=7.427865684424334 color=yellow,shape=triangle,flag=1,i=61281,u=0.6788862712314652,v=0.4116741778150316,w=0.4855399156424676,x=4.248117990214868 color=purple,shape=square,flag=0,i=61295,u=0.5062418674625349,v=0.08904801167462162,w=0.5180705629762576,x=3.497194833123453 color=green,shape=square,flag=0,i=61301,u=0.6238365472963749,v=0.8736654333706457,w=0.5035753695801006,x=5.624999791044096 color=yellow,shape=square,flag=1,i=61313,u=0.2517342409381401,v=0.5607854671328018,w=0.4863569738074924,x=5.342195972264192 color=red,shape=square,flag=0,i=61318,u=0.9505419452167662,v=0.679779407076754,w=0.521654288615688,x=5.3809428613227395 color=red,shape=square,flag=1,i=61329,u=0.6047566003389032,v=0.7766057306299667,w=0.527040506395118,x=5.507599575188592 color=blue,shape=triangle,flag=0,i=61334,u=0.337316210469482,v=0.6267681207152156,w=0.47353032471912027,x=5.062344070600751 color=red,shape=triangle,flag=1,i=61337,u=0.016161402703349093,v=0.8548922014389212,w=0.5298979679549719,x=3.2641953115109756 color=red,shape=circle,flag=0,i=61339,u=0.02567761097810839,v=-0.03655897410556717,w=0.4926471028706084,x=3.0354622575591432 color=blue,shape=triangle,flag=0,i=61351,u=0.7932092952421166,v=0.4380255564355239,w=0.4802627712178217,x=5.546435385768809 color=red,shape=square,flag=0,i=61353,u=0.9204264182079643,v=0.4018584502141255,w=0.5243590791041091,x=3.5849988439432985 color=yellow,shape=circle,flag=0,i=61357,u=0.16587039072607757,v=0.663664050422724,w=0.4987946747111364,x=5.291600456899086 color=green,shape=triangle,flag=0,i=61362,u=0.7299202050218979,v=0.6552680850374167,w=0.5003637812412703,x=4.886295254176624 color=yellow,shape=square,flag=1,i=61366,u=0.21811593993643819,v=0.17547386290873968,w=0.487260370873267,x=5.249231279209982 color=red,shape=square,flag=1,i=61369,u=0.5058724526255617,v=0.6129664323550472,w=0.5254787222987124,x=7.663968872616754 color=red,shape=circle,flag=1,i=61415,u=0.9676760423225215,v=1.0475429032640997,w=0.4986227555350541,x=3.577868740338316 color=red,shape=square,flag=1,i=61422,u=0.11886395244680237,v=0.3900272500889973,w=0.5234791847519441,x=3.072662158492658 color=red,shape=circle,flag=0,i=61424,u=0.09936195107484114,v=0.05744379933681094,w=0.5033330692596379,x=5.643635287839078 color=blue,shape=triangle,flag=0,i=61425,u=0.5771409404126412,v=0.11760707686727356,w=0.48475608421831184,x=4.460017797219344 color=red,shape=triangle,flag=0,i=61426,u=0.762804204487993,v=0.7809558764276042,w=0.5063507913255922,x=5.145310374210368 color=red,shape=square,flag=0,i=61431,u=0.900799522559889,v=0.38618958860399644,w=0.5222527711160118,x=4.961621920724561 color=green,shape=triangle,flag=0,i=61444,u=0.5270179878980258,v=0.10052818496180849,w=0.5023819910843416,x=3.4923362070071136 color=red,shape=circle,flag=1,i=61457,u=0.6566857444348829,v=0.6729806090763196,w=0.5038144544580992,x=6.193904013666604 color=blue,shape=triangle,flag=0,i=61472,u=0.1911714345722222,v=0.7715257323545277,w=0.49130390736052193,x=4.422388311122001 color=yellow,shape=square,flag=1,i=61475,u=0.5171052700708267,v=0.25554476579258234,w=0.48970608678347916,x=5.036532735831131 color=red,shape=square,flag=1,i=61479,u=0.2610815163955674,v=0.503074712438503,w=0.517828018995584,x=3.973960441261171 color=yellow,shape=triangle,flag=1,i=61483,u=0.519313490412225,v=0.87933187127998,w=0.48771296185269913,x=6.534530792176736 color=orange,shape=square,flag=0,i=61503,u=0.6197602176490566,v=0.7795540660347835,w=0.4963122713166586,x=7.390044813411266 color=red,shape=circle,flag=0,i=61525,u=0.48739846973074064,v=0.465361757932242,w=0.5023423634876732,x=4.630956041174142 color=yellow,shape=triangle,flag=1,i=61527,u=0.12739507818779683,v=0.1173985798756847,w=0.4952982067434773,x=3.944866416793379 color=red,shape=triangle,flag=1,i=61535,u=0.33804896935526785,v=0.03732253381609851,w=0.48239195355097997,x=5.793156035393705 color=red,shape=square,flag=0,i=61548,u=0.4651417535641841,v=0.07133907568851139,w=0.530744518298765,x=4.743418278295491 color=blue,shape=square,flag=1,i=61549,u=0.3707408775242743,v=0.49362478651153885,w=0.49587747960735457,x=3.9321869738237925 color=orange,shape=square,flag=0,i=61568,u=0.8888385367297386,v=0.34270045850419917,w=0.4933264096015811,x=7.229833779056122 color=red,shape=square,flag=0,i=61579,u=0.8152304447693551,v=0.8464616377854375,w=0.5200260049466741,x=6.1930063800980735 color=orange,shape=circle,flag=0,i=61584,u=0.9799542974777731,v=0.5631117008263572,w=0.5083318815358503,x=6.151762981660114 color=red,shape=circle,flag=0,i=61596,u=0.8390768284706766,v=0.8355328733352815,w=0.4910259931175871,x=2.7763269232413346 color=blue,shape=square,flag=0,i=61600,u=0.9401414287917517,v=0.6556333863888074,w=0.48738484797112674,x=6.331561672320703 color=purple,shape=triangle,flag=1,i=61628,u=0.9608504870227901,v=0.8879020064555192,w=0.45513052916821123,x=4.546442239319432 color=red,shape=square,flag=1,i=61643,u=0.33341608047187854,v=0.9146588007328265,w=0.5248379423489885,x=5.5586352879388565 color=green,shape=square,flag=1,i=61649,u=0.6473958664771461,v=0.43314657244792587,w=0.4977987270169415,x=3.9042555214124284 color=red,shape=triangle,flag=0,i=61659,u=0.8610127571485326,v=0.9753251811562222,w=0.48505406455789435,x=5.701706364739529 color=yellow,shape=triangle,flag=1,i=61664,u=0.019966081909734368,v=0.7900350537304219,w=0.49414474669405634,x=5.625946820854317 color=red,shape=square,flag=0,i=61669,u=0.570969903227153,v=0.1173371837329994,w=0.5238531001038308,x=5.2480280636640835 color=yellow,shape=square,flag=1,i=61672,u=0.8139158540272159,v=0.13388403451215614,w=0.4884567964312617,x=5.932513833114542 color=red,shape=triangle,flag=0,i=61688,u=0.48028863400702104,v=0.7865251623168836,w=0.4831142966051367,x=5.24616219807332 color=red,shape=square,flag=0,i=61697,u=0.23046740317570558,v=0.15606819151927054,w=0.5272004102723183,x=4.411628790173593 color=red,shape=square,flag=0,i=61702,u=0.1546280693721046,v=0.8913675994706256,w=0.5225725331373712,x=5.4333335302840196 color=red,shape=triangle,flag=0,i=61708,u=0.5471240843420443,v=0.3327729472814235,w=0.469663504191194,x=3.6272696237402733 color=yellow,shape=triangle,flag=0,i=61714,u=0.9429733797903551,v=0.19709094011834438,w=0.49437998774077196,x=5.047868963299641 color=orange,shape=circle,flag=1,i=61716,u=0.30825285073289554,v=0.11497565384418063,w=0.5108191806126069,x=4.703363374380971 color=red,shape=square,flag=1,i=61737,u=0.6510434435597998,v=0.5456212090941364,w=0.5150287503883463,x=5.936227367102567 color=red,shape=square,flag=0,i=61809,u=0.9965013982405774,v=0.6809694313684723,w=0.5209128718546598,x=4.935376841731837 color=yellow,shape=triangle,flag=1,i=61810,u=0.07792819621552127,v=0.26181505152828544,w=0.4933310003789433,x=4.609218090023302 color=red,shape=circle,flag=0,i=61815,u=0.1848788266184207,v=0.1249622316055749,w=0.5134887995047095,x=2.966850998643373 color=red,shape=circle,flag=0,i=61816,u=0.449212787550498,v=0.38322795122897707,w=0.5150248112002551,x=5.009587731920402 color=blue,shape=circle,flag=1,i=61818,u=0.8534363554971895,v=0.2263431230033489,w=0.5410603220327522,x=4.816601810884746 color=red,shape=square,flag=0,i=61833,u=0.4451879247858581,v=0.11726299169004328,w=0.5300535469286223,x=4.487810030799225 color=purple,shape=circle,flag=0,i=61835,u=0.6511017701858289,v=0.19418601516093892,w=0.5153960480448987,x=7.225402183189696 color=red,shape=triangle,flag=0,i=61836,u=0.004171787933958004,v=0.5663383523540735,w=0.4865556516253405,x=7.118214175470552 color=red,shape=circle,flag=0,i=61853,u=0.345559838619691,v=0.2508853560238945,w=0.503913744966538,x=5.44463784456043 color=green,shape=circle,flag=1,i=61869,u=0.817380657759987,v=0.10544621627598816,w=0.48973381007222,x=3.2584664923826057 color=red,shape=circle,flag=1,i=61871,u=0.08366616020436324,v=0.10742385561455178,w=0.5041942028737925,x=5.588329685146665 color=red,shape=circle,flag=0,i=61884,u=0.9599580117658257,v=0.8956373603658663,w=0.510071088152013,x=5.625943395628897 color=red,shape=square,flag=0,i=61891,u=0.36576069934033495,v=0.35809365200980947,w=0.5232769997016458,x=6.932004575561117 color=yellow,shape=square,flag=1,i=61897,u=0.13464086236823825,v=0.15650924065865113,w=0.4835104953095868,x=5.889263490765791 color=orange,shape=square,flag=0,i=61918,u=0.18640602854348598,v=0.2672271622271526,w=0.5030058785289381,x=4.326083882616069 color=red,shape=triangle,flag=0,i=61925,u=0.04746071475927671,v=0.5367543900755519,w=0.48581705431478733,x=5.630710628608316 color=red,shape=triangle,flag=1,i=61936,u=0.356381744385441,v=0.26813337819748007,w=0.48971389404584026,x=4.580274896046053 color=blue,shape=circle,flag=0,i=61938,u=0.5295366501170954,v=0.4735172172627693,w=0.5370203616295891,x=6.7412581801620055 color=purple,shape=circle,flag=0,i=61954,u=0.9353238472782092,v=0.9124694467231034,w=0.5157439552390941,x=3.83882578956262 color=purple,shape=circle,flag=1,i=61980,u=0.7867447915994401,v=0.17554390367142436,w=0.5114776859288765,x=5.478594520165248 color=yellow,shape=triangle,flag=0,i=61994,u=0.9890464545334569,v=0.8023850293870773,w=0.4988618909788258,x=4.166279351226079 color=red,shape=square,flag=1,i=61995,u=0.02062837024103603,v=0.2984043381983892,w=0.5295629576749717,x=5.881978788925136 color=purple,shape=circle,flag=0,i=61997,u=0.46741352656817403,v=0.018808978834384593,w=0.5075786262030751,x=6.149918814819884 color=green,shape=square,flag=0,i=62009,u=0.3585964350991907,v=0.1941680966793713,w=0.4991629820690804,x=4.966840885787054 color=blue,shape=square,flag=0,i=62013,u=0.5622781351587085,v=0.8052890967176738,w=0.493901760566586,x=3.976849572787254 color=green,shape=circle,flag=0,i=62017,u=0.34006592038936656,v=0.3204413264209244,w=0.48229410183663773,x=5.237564677155148 color=blue,shape=triangle,flag=1,i=62019,u=0.0426531732390083,v=0.15171870407048826,w=0.4948472041070654,x=2.8507447122043423 color=green,shape=square,flag=1,i=62029,u=0.2835571115639437,v=0.47155549882567127,w=0.49623530121712217,x=6.028679636526424 color=purple,shape=square,flag=0,i=62043,u=0.704537451002878,v=0.5229872604390595,w=0.5297127404570943,x=4.648907585804309 color=red,shape=circle,flag=0,i=62050,u=0.5643784714302795,v=0.5012497913882893,w=0.518136912453673,x=3.925065918220419 color=red,shape=square,flag=0,i=62062,u=0.9531264061878373,v=0.974142690969671,w=0.523931211666261,x=3.367303302553521 color=purple,shape=triangle,flag=0,i=62075,u=0.6234285019734616,v=0.9419453626430792,w=0.4581269392232534,x=5.1527756955510355 color=purple,shape=square,flag=0,i=62093,u=0.15205925058803949,v=0.6150394904958729,w=0.526110447227855,x=4.1154186380623665 color=red,shape=triangle,flag=0,i=62097,u=0.908145221611164,v=0.12983617465009645,w=0.4846339020774075,x=4.446892273216744 color=blue,shape=square,flag=0,i=62101,u=0.4543743951049868,v=0.11843388872347449,w=0.4992715642172183,x=5.136386084128629 color=red,shape=triangle,flag=0,i=62108,u=0.167357771442878,v=0.968288578412845,w=0.48428631555807067,x=3.187524544500509 color=red,shape=circle,flag=0,i=62121,u=0.5979099497775078,v=0.6794539039958924,w=0.5242018264009921,x=5.280042401144994 color=blue,shape=square,flag=1,i=62126,u=0.036113790200399065,v=0.16910869536960704,w=0.502918336080108,x=1.8672835436541029 color=green,shape=triangle,flag=0,i=62134,u=0.6048830568385326,v=0.729874240054699,w=0.5159393385770069,x=4.257994071557856 color=red,shape=square,flag=1,i=62154,u=0.8775160541846945,v=0.9806110363238945,w=0.5327824889664153,x=3.3435869551092536 color=green,shape=square,flag=0,i=62166,u=0.4330001902467715,v=0.6376378265760058,w=0.49276627036701437,x=5.9411261297465 color=yellow,shape=triangle,flag=1,i=62167,u=0.5614588863279815,v=0.7608824536408751,w=0.5037189316894571,x=4.821830950875217 color=red,shape=square,flag=0,i=62188,u=0.40744592792362677,v=0.6744828103129084,w=0.5302394945174181,x=6.231715197692458 color=red,shape=triangle,flag=0,i=62200,u=0.23988771374155948,v=0.8533403056991652,w=0.49368384416477895,x=6.4310693402923365 color=orange,shape=triangle,flag=1,i=62204,u=0.05483042340149369,v=0.06378038360469551,w=0.5298994743718047,x=6.402343677154847 color=red,shape=circle,flag=0,i=62212,u=0.11868607588693214,v=0.16008078324282432,w=0.5230138690384019,x=5.573261510373027 color=red,shape=square,flag=0,i=62235,u=0.05781825160678089,v=0.9812159629061238,w=0.528849248056283,x=3.6240024153043655 color=yellow,shape=triangle,flag=1,i=62256,u=0.18729558177233296,v=0.9635241693178325,w=0.5067570914450856,x=6.8510085898613235 color=red,shape=square,flag=1,i=62261,u=0.42032239218584777,v=0.41881499558405855,w=0.5318614609301553,x=3.8751212362484946 color=red,shape=triangle,flag=0,i=62284,u=0.6219982876210621,v=0.6405049256535393,w=0.48168248154296756,x=6.218527099708347 color=red,shape=circle,flag=0,i=62310,u=0.8796648595608879,v=0.8960933890140106,w=0.5224014162804669,x=5.680682297922847 color=red,shape=triangle,flag=0,i=62316,u=0.19184117907032205,v=0.06402197475999527,w=0.4766580720878818,x=5.502526429341152 color=red,shape=circle,flag=1,i=62317,u=0.24245419168304982,v=0.17592089644676354,w=0.5234713664732507,x=3.3228402967788644 color=red,shape=triangle,flag=0,i=62333,u=0.3081433543019789,v=0.17475252323788693,w=0.4807335630203863,x=3.3559216335905027 color=red,shape=square,flag=0,i=62374,u=0.05127427063072498,v=0.5098696172787879,w=0.5373294457332315,x=4.430513110438568 color=red,shape=triangle,flag=1,i=62375,u=0.23661559056090142,v=0.9855861026865775,w=0.47743130333143724,x=4.190599069091753 color=orange,shape=square,flag=1,i=62383,u=0.023685079195092218,v=0.026937947780171778,w=0.4919021407386805,x=4.627379567957559 color=purple,shape=circle,flag=0,i=62386,u=0.6352835250630797,v=0.9147156642130767,w=0.5234945884182443,x=5.798712173600094 color=red,shape=triangle,flag=1,i=62404,u=0.058402282344989676,v=0.532894108788653,w=0.4836000966532128,x=6.7646632689431385 color=orange,shape=square,flag=1,i=62415,u=0.623264816515352,v=0.01029168112753609,w=0.49028138372204577,x=4.64314623932384 color=yellow,shape=triangle,flag=1,i=62420,u=0.5922537439254313,v=0.7931024659310686,w=0.5174533409684671,x=7.0776406088871004 color=red,shape=triangle,flag=1,i=62435,u=0.6566103647142346,v=0.3093046962173661,w=0.4890548784170205,x=4.430438008663087 color=yellow,shape=circle,flag=1,i=62440,u=0.9195091050599192,v=0.6284006272763784,w=0.4910750656033562,x=5.9488601492085875 color=orange,shape=square,flag=1,i=62444,u=0.8198924252182687,v=0.9403939619690145,w=0.49483627897599086,x=5.385190500599406 color=red,shape=circle,flag=1,i=62446,u=0.25695039848198686,v=0.17690972548675077,w=0.5107397978022713,x=5.379986286167665 color=purple,shape=square,flag=1,i=62450,u=0.4679304831122051,v=0.2520485779531624,w=0.5265733936128689,x=4.523746787611793 color=red,shape=triangle,flag=0,i=62453,u=0.2719444687249306,v=0.2727615921669144,w=0.49218570449784094,x=4.132534482868859 color=red,shape=square,flag=0,i=62460,u=0.1095132438049864,v=0.5990961326315646,w=0.5487367811634232,x=5.30813078014137 color=red,shape=square,flag=0,i=62477,u=0.1681727567517537,v=0.459575124418405,w=0.5399539027694862,x=3.0640498749206455 color=red,shape=square,flag=0,i=62521,u=0.9394264527956095,v=0.35691204119685405,w=0.5447973167051736,x=5.509032937560587 color=yellow,shape=circle,flag=1,i=62544,u=0.6372716681357813,v=0.23390888746555438,w=0.49294978983371884,x=4.412810738362551 color=red,shape=circle,flag=0,i=62551,u=0.01233752976713054,v=-0.0057486829804792375,w=0.5126452670422521,x=5.570141909643815 color=yellow,shape=triangle,flag=1,i=62560,u=0.9396323804778914,v=0.085811621835723,w=0.5175845777084611,x=5.27077636400634 color=red,shape=circle,flag=0,i=62575,u=0.07034914442806128,v=-0.004086988597465882,w=0.5238122498045377,x=3.797765987178355 color=blue,shape=square,flag=0,i=62613,u=0.6811858095759061,v=0.7887531811761556,w=0.49361127715826314,x=4.355142569541913 color=purple,shape=circle,flag=0,i=62617,u=0.714587824554388,v=0.9313613753470926,w=0.5194524554371356,x=4.015819963177061 color=purple,shape=square,flag=0,i=62632,u=0.3985259326969677,v=0.5444232350161109,w=0.5314123884676734,x=4.492798714605738 color=red,shape=square,flag=0,i=62647,u=0.5291260503620531,v=0.013794840772883843,w=0.5407737287180777,x=5.102488976688594 color=red,shape=square,flag=1,i=62683,u=0.11355392145660848,v=0.8669393022115569,w=0.5320901384179496,x=4.356001846362568 color=red,shape=square,flag=1,i=62698,u=0.653364670305655,v=0.6124356991252056,w=0.5287119902302228,x=4.007826612460133 color=red,shape=circle,flag=0,i=62701,u=0.003951253933919596,v=0.04522770982418345,w=0.5258906687903119,x=3.7990821290093546 color=purple,shape=triangle,flag=0,i=62716,u=0.8823544350221625,v=0.1118404389612665,w=0.4586347777216839,x=3.2594503465151825 color=purple,shape=triangle,flag=0,i=62730,u=0.636759249610899,v=0.06469280402168953,w=0.46135189192740805,x=4.312389513007878 color=red,shape=triangle,flag=0,i=62735,u=0.8189085838177863,v=0.9399067495737984,w=0.4617192345326423,x=4.849007284652777 color=red,shape=triangle,flag=0,i=62749,u=0.6703354930086899,v=0.5368154670226469,w=0.4574999605240849,x=3.207734868653835 color=red,shape=square,flag=1,i=62768,u=0.9551936046838428,v=0.9319414615167267,w=0.5190503305114829,x=5.846548662129798 color=red,shape=circle,flag=1,i=62777,u=0.18133834128167947,v=0.26477984785201514,w=0.531294217269015,x=6.008486744113405 color=red,shape=circle,flag=0,i=62780,u=0.5170426364721215,v=0.6036794769162875,w=0.5269285591637343,x=4.583458820391482 color=green,shape=triangle,flag=0,i=62782,u=0.42042232286231107,v=0.9347763946491507,w=0.5040717113848027,x=7.523280788788996 color=yellow,shape=square,flag=1,i=62797,u=0.9311901039381898,v=0.5711913554470899,w=0.49929217899612793,x=4.948899182820194 color=red,shape=circle,flag=0,i=62830,u=0.8526471187916753,v=0.8809963270663802,w=0.5182405502050984,x=4.179081514411876 color=red,shape=square,flag=1,i=62837,u=0.5492872519519799,v=0.330190328959171,w=0.5273996033970642,x=5.290135392615926 color=red,shape=square,flag=0,i=62841,u=0.34626047307667374,v=0.892390856973551,w=0.5304223359053766,x=3.402558165132803 color=green,shape=square,flag=0,i=62844,u=0.18924796767097984,v=0.8273744526178146,w=0.4920170035408091,x=6.040914722549808 color=red,shape=square,flag=0,i=62856,u=0.021636620168551723,v=0.7236946094748882,w=0.5284752005412547,x=5.677699797339172 color=green,shape=circle,flag=0,i=62882,u=0.9295860315045217,v=0.025690266107089244,w=0.497645272785663,x=5.320746340884946 color=yellow,shape=triangle,flag=1,i=62884,u=0.8422450133883254,v=0.7184760862620894,w=0.517631549601741,x=4.6335430681225125 color=blue,shape=triangle,flag=0,i=62890,u=0.9435960887336685,v=0.16011742032923715,w=0.5041171987880846,x=4.723921873053907 color=red,shape=circle,flag=0,i=62903,u=0.6229907355548229,v=0.6089807098214721,w=0.5003728523104544,x=4.489645633365675 color=red,shape=square,flag=0,i=62910,u=0.9332192658756376,v=0.33365715523135997,w=0.5234511225329016,x=3.785653711839109 color=red,shape=square,flag=0,i=62920,u=0.43226258201365564,v=0.5011363797109236,w=0.5277935121014361,x=5.322289568074705 color=red,shape=square,flag=1,i=62923,u=0.4729688221358348,v=0.8082247750242778,w=0.5273715962644718,x=4.643643565339712 color=blue,shape=circle,flag=1,i=62935,u=0.18167566189367645,v=0.7569900365744251,w=0.538237704000588,x=8.127688766703892 color=yellow,shape=triangle,flag=1,i=62937,u=0.22154114504521083,v=0.340772002724789,w=0.5207086040146836,x=6.4729265882176135 color=purple,shape=triangle,flag=1,i=62945,u=0.21555300092636231,v=0.20483990731212587,w=0.4562467436503796,x=4.525005146165923 color=orange,shape=triangle,flag=0,i=62947,u=0.14478704880216064,v=0.2044324703382988,w=0.5394246020147753,x=5.651896509979963 color=blue,shape=square,flag=1,i=62950,u=0.6178240188407061,v=0.9944428415377913,w=0.4852047757312502,x=2.718796906504569 color=purple,shape=triangle,flag=0,i=62958,u=0.04184135931479238,v=0.4391855754156955,w=0.45360908771268516,x=4.924092734588453 color=red,shape=square,flag=1,i=62971,u=0.10046091286823744,v=0.8609250387942977,w=0.5180430599900656,x=5.992000469626208 color=red,shape=square,flag=0,i=62973,u=0.7424499126672801,v=0.1809899807448302,w=0.519415823485699,x=6.852372532872102 color=red,shape=square,flag=0,i=62976,u=0.7443486017365128,v=0.48920301606010896,w=0.5234426858165389,x=5.039298499368262 color=red,shape=square,flag=1,i=62992,u=0.9146580735998954,v=0.24536011183661321,w=0.5211570622432113,x=4.766820404263631 color=blue,shape=circle,flag=0,i=63033,u=0.5305454206207826,v=0.8200238314591863,w=0.5347077688264033,x=4.591968684117361 color=purple,shape=square,flag=0,i=63035,u=0.32005025763871653,v=0.15647470360006588,w=0.5167848779664501,x=6.684007339790288 color=purple,shape=square,flag=0,i=63039,u=0.15240895214791716,v=0.29919244949961166,w=0.5121863211192852,x=6.159969568372798 color=yellow,shape=square,flag=1,i=63049,u=0.6828108211160484,v=0.4015796847989789,w=0.49659371409731,x=5.257250967168765 color=red,shape=triangle,flag=1,i=63057,u=0.6919746500336635,v=0.055960241491301965,w=0.5063304835655412,x=3.5035930223060276 color=yellow,shape=circle,flag=1,i=63063,u=0.11616430991193993,v=0.5887832221524038,w=0.4964918954928837,x=6.3899289491183024 color=red,shape=triangle,flag=1,i=63071,u=0.018672373269410625,v=0.9092165171697827,w=0.5118839892370847,x=4.722531198828153 color=red,shape=square,flag=0,i=63072,u=0.8427844846500919,v=0.5992584871080688,w=0.5204742345347062,x=4.173435918614957 color=red,shape=square,flag=0,i=63092,u=0.41951588383617777,v=0.03589601186018754,w=0.516942061824854,x=4.8376214446814565 color=red,shape=triangle,flag=0,i=63096,u=0.7529650295448971,v=0.9431215182519007,w=0.49788731296415195,x=4.5347574004159545 color=red,shape=circle,flag=0,i=63099,u=0.9309288783393869,v=0.8730077851333838,w=0.5076944717355235,x=5.654391605110433 color=red,shape=circle,flag=0,i=63113,u=0.1033485563735913,v=0.06697824662028311,w=0.5055526799192447,x=3.517999338707257 color=red,shape=circle,flag=1,i=63116,u=0.09384641871081734,v=0.08801379322138762,w=0.5014132780158835,x=3.993779177395526 color=purple,shape=triangle,flag=0,i=63123,u=0.8961539423393202,v=0.7906187187333196,w=0.4567045808453017,x=5.149069214549051 color=yellow,shape=triangle,flag=1,i=63148,u=0.9844731667969369,v=0.33541222586489206,w=0.5325186683372911,x=3.9812266558026486 color=blue,shape=triangle,flag=0,i=63153,u=0.6735264887492048,v=0.39303923267692786,w=0.4986446566249354,x=6.201349714039229 color=purple,shape=triangle,flag=1,i=63156,u=0.9714046347882829,v=0.27764276534699883,w=0.4597202347461114,x=4.659991375203884 color=green,shape=triangle,flag=0,i=63165,u=0.6072741742180652,v=0.13442242488002998,w=0.4916312823761641,x=4.704378970892795 color=red,shape=square,flag=1,i=63185,u=0.650261949898459,v=0.9794670276459893,w=0.5098135457039272,x=5.180812607593896 color=red,shape=triangle,flag=0,i=63186,u=0.5251361946156848,v=0.2544468570870363,w=0.49071187482834566,x=4.943535099881426 color=green,shape=circle,flag=0,i=63192,u=0.4628765932777914,v=0.5009559466597028,w=0.4792149363823281,x=4.479643917875211 color=purple,shape=square,flag=0,i=63196,u=0.6560744766739839,v=0.17830975975236907,w=0.5042125314907943,x=5.985763097936512 color=red,shape=circle,flag=1,i=63204,u=0.7164135106143265,v=0.6830955315025736,w=0.4878851428933129,x=3.775819536462746 color=yellow,shape=triangle,flag=1,i=63220,u=0.4892590459180154,v=0.5065529413283534,w=0.5357798002844943,x=3.5732158909433434 color=red,shape=square,flag=1,i=63223,u=0.7690690369913366,v=0.3055912466129418,w=0.5061163364523721,x=6.174020583937238 color=red,shape=triangle,flag=0,i=63242,u=0.1064618484753983,v=0.6706095691549498,w=0.48721578275580185,x=5.274640214979204 color=yellow,shape=circle,flag=1,i=63260,u=0.7419118468860325,v=0.4921678134634284,w=0.48746178071049073,x=3.822538553667331 color=yellow,shape=circle,flag=1,i=63266,u=0.7052472262240931,v=0.3591091119235702,w=0.4921315753736453,x=3.897337107792995 color=blue,shape=square,flag=0,i=63308,u=0.008287052333036948,v=0.36269407929162556,w=0.48380293397067686,x=4.804535386767394 color=green,shape=circle,flag=0,i=63310,u=0.6591083265083223,v=0.6420080793229909,w=0.4811638732876288,x=3.927447690754425 color=red,shape=triangle,flag=0,i=63317,u=0.10982625662686818,v=0.9960010135922871,w=0.4913318746186599,x=4.718179918484908 color=red,shape=square,flag=0,i=63320,u=0.7893941269986001,v=0.9354940582614681,w=0.5235952465041683,x=4.115492450913288 color=red,shape=square,flag=0,i=63332,u=0.970888211877224,v=0.6857596689710466,w=0.5228003194736635,x=2.668264923871252 color=yellow,shape=square,flag=1,i=63337,u=0.0874924263896879,v=0.950183958407756,w=0.510721718370206,x=4.687215641469513 color=blue,shape=square,flag=1,i=63343,u=0.14114074518146535,v=0.655241608504671,w=0.4852961463128133,x=4.005104442608682 color=red,shape=circle,flag=0,i=63350,u=0.8796945751428287,v=0.8923085930699057,w=0.4687078728895611,x=4.764711681488481 color=red,shape=triangle,flag=1,i=63373,u=0.6595832092253243,v=0.06801374618261546,w=0.49126597353639273,x=3.59910120629142 color=red,shape=circle,flag=0,i=63386,u=0.2764553187950215,v=0.3353116438105522,w=0.4770231965668702,x=4.71820724688136 color=yellow,shape=triangle,flag=1,i=63403,u=0.07339514161166527,v=0.44152339049489187,w=0.5160645007944001,x=5.7446544144498235 color=red,shape=circle,flag=0,i=63404,u=0.09355951248555727,v=0.04769500731061244,w=0.4785452562682194,x=5.592835865813732 color=blue,shape=circle,flag=1,i=63421,u=0.5236272820681089,v=0.2817463347056647,w=0.5384011232085524,x=4.728088219772792 color=yellow,shape=square,flag=1,i=63425,u=0.10463534688361364,v=0.6759023798945356,w=0.5118460945285656,x=5.0010213467351425 color=red,shape=square,flag=0,i=63447,u=0.07821593216320089,v=0.41749452211592886,w=0.5115398197381817,x=3.0271934060020254 color=green,shape=square,flag=0,i=63449,u=0.28280413381317115,v=0.9556857697539318,w=0.4957326089443081,x=5.215505460596041 color=yellow,shape=triangle,flag=1,i=63452,u=0.9273827654059374,v=0.8835971806115526,w=0.5119031140441194,x=5.685017178429618 color=red,shape=triangle,flag=0,i=63461,u=0.3175544716298998,v=0.5365224802620152,w=0.4838196449828189,x=3.589982889198821 color=yellow,shape=triangle,flag=1,i=63473,u=0.4684268930197133,v=0.3996793351218243,w=0.5118596889991462,x=6.225859492489028 color=orange,shape=square,flag=1,i=63477,u=0.07928933894273849,v=0.0514072129984835,w=0.490949314628272,x=6.608600888579531 color=purple,shape=square,flag=0,i=63504,u=0.9700830866905408,v=0.9797449445666488,w=0.5028390388130227,x=5.835149255056467 color=red,shape=square,flag=0,i=63514,u=0.0378176948932033,v=0.1427414392172779,w=0.5130201815984372,x=5.715139555750857 color=red,shape=square,flag=0,i=63520,u=0.3397124390805968,v=0.2714845545300445,w=0.5170010396204573,x=5.561806237121956 color=red,shape=square,flag=0,i=63552,u=0.32371787599694224,v=0.507907498039507,w=0.5045012450134124,x=6.395184987087981 color=red,shape=triangle,flag=0,i=63565,u=0.48020871013960653,v=0.9884932297951934,w=0.4982588641272306,x=6.137621853716542 color=purple,shape=square,flag=0,i=63574,u=0.15379335750978063,v=0.5281964960658879,w=0.4994394965067309,x=2.0727416448885454 color=red,shape=square,flag=1,i=63581,u=0.802394784163531,v=0.6939027134332991,w=0.4966973402746471,x=7.32803597295909 color=red,shape=square,flag=0,i=63585,u=0.4189667395959692,v=0.0045752361451588675,w=0.4994227523808975,x=2.4327208837196515 color=yellow,shape=triangle,flag=1,i=63587,u=0.7167050254544781,v=0.5549538255428227,w=0.5100523850015138,x=3.5714062736529097 color=red,shape=triangle,flag=0,i=63625,u=0.29649511175488363,v=0.7077525174728829,w=0.4948358938306383,x=7.19674170777774 color=yellow,shape=triangle,flag=1,i=63636,u=0.3190657421387958,v=0.9766789545324229,w=0.5146995473706589,x=3.139905763814006 color=red,shape=circle,flag=1,i=63653,u=0.7124949067752695,v=0.7354776104940559,w=0.46776554713874124,x=4.160604070493101 color=red,shape=triangle,flag=0,i=63654,u=0.627050404609583,v=0.13035775383831516,w=0.5008612680386838,x=4.642981482508208 color=red,shape=square,flag=0,i=63685,u=0.9497956342657677,v=0.7842243295282431,w=0.4927051141152887,x=4.014959212256174 color=blue,shape=square,flag=1,i=63689,u=0.6426554468489805,v=0.379984431650072,w=0.503239329678487,x=4.5235969349819705 color=red,shape=triangle,flag=0,i=63707,u=0.2096771803308467,v=0.7973446680349758,w=0.5153683037016645,x=5.81953942794393 color=blue,shape=triangle,flag=0,i=63708,u=0.22170963254835463,v=0.08469046744317732,w=0.5054861869194943,x=5.957782715737459 color=red,shape=triangle,flag=0,i=63716,u=0.9608586826415092,v=0.5778298988776719,w=0.5059131561374438,x=7.582299416281928 color=red,shape=triangle,flag=1,i=63719,u=0.8306323684682014,v=0.07878243923100481,w=0.5030716956841577,x=5.376611272914098 color=red,shape=square,flag=0,i=63739,u=0.39726637906191364,v=0.9974072581707458,w=0.49092955531644206,x=4.742988813801126 color=blue,shape=square,flag=1,i=63748,u=0.038958390272422316,v=0.6899245148086993,w=0.511877267123885,x=6.201614716402648 color=red,shape=triangle,flag=1,i=63763,u=0.8260508879078403,v=0.7122915266979948,w=0.5036212844700014,x=4.681609009062412 color=blue,shape=circle,flag=0,i=63792,u=0.19728458061068666,v=0.16181839296814904,w=0.5348196368757366,x=4.674163075607887 color=red,shape=circle,flag=0,i=63799,u=0.7784454827895895,v=0.8011778292745955,w=0.4662777472228059,x=6.100564869441399 color=red,shape=square,flag=1,i=63806,u=0.6141650607593339,v=0.9142559360340724,w=0.4928580365712914,x=2.8435797160193492 color=green,shape=square,flag=0,i=63810,u=0.8331122386607416,v=0.5796137503861937,w=0.5017164714242858,x=4.731477885461558 color=green,shape=circle,flag=1,i=63816,u=0.40266172833400726,v=0.42381083247437346,w=0.492115379639235,x=7.571613470933646 color=red,shape=circle,flag=0,i=63822,u=0.9437821789349579,v=0.9969487167272225,w=0.4729779526387773,x=5.4405712549070735 color=red,shape=circle,flag=1,i=63839,u=0.3041192394162371,v=0.2647701882074305,w=0.4680206081922557,x=4.044029861775884 color=red,shape=circle,flag=0,i=63853,u=0.5492798216939365,v=0.6217327646534917,w=0.46506013977555066,x=5.631350743071785 color=red,shape=square,flag=0,i=63855,u=0.442889751448163,v=0.36586238799084936,w=0.48412448099437144,x=3.7324822580201364 color=blue,shape=circle,flag=1,i=63856,u=0.6855547858747592,v=0.2707295407356246,w=0.5336873724393838,x=3.8762418109589163 color=blue,shape=circle,flag=1,i=63859,u=0.7459299364313137,v=0.3072131190087173,w=0.5341191395549857,x=5.53068068586547 color=purple,shape=triangle,flag=0,i=63865,u=0.7092757264208321,v=0.23235465548151513,w=0.46216513190126063,x=3.4202946860209327 color=red,shape=triangle,flag=0,i=63886,u=0.45946135793073595,v=0.2588272307510143,w=0.5013865092069411,x=6.440630111447324 color=red,shape=triangle,flag=0,i=63888,u=0.969619606173608,v=0.21558215623761867,w=0.49863958446076706,x=6.1485718143846455 color=red,shape=square,flag=0,i=63899,u=0.3982583133796107,v=0.5549078775856298,w=0.48613666613912915,x=5.303023386962724 color=blue,shape=circle,flag=1,i=63910,u=0.6863886117058431,v=0.37206295297347436,w=0.5293565980248977,x=4.282396951942643 color=red,shape=square,flag=0,i=63934,u=0.28362300522034134,v=0.9776435032329341,w=0.49500489717812485,x=4.22874121836814 color=red,shape=square,flag=0,i=63938,u=0.44540466147148683,v=0.2602174184280942,w=0.49636965013518813,x=5.678133972691477 color=red,shape=square,flag=0,i=63950,u=0.5945643984227755,v=0.07057457546776025,w=0.5025606472334991,x=6.562575077178184 color=red,shape=triangle,flag=0,i=63955,u=0.4748958361621747,v=0.5026362244360355,w=0.493515269580427,x=5.387268214423738 color=red,shape=square,flag=0,i=63970,u=0.8833261553905527,v=0.7186996387121306,w=0.5011426431160687,x=5.02885669106661 color=purple,shape=triangle,flag=1,i=63973,u=0.09727017174152641,v=0.46447544054366596,w=0.47035211902337365,x=4.381689376612946 color=red,shape=square,flag=0,i=63975,u=0.38211363356881844,v=0.1851051930756088,w=0.5088977332933559,x=6.033395726606865 color=yellow,shape=circle,flag=1,i=63982,u=0.05475943205246048,v=0.4827379884980324,w=0.4839250759959782,x=5.461357807406426 color=yellow,shape=square,flag=0,i=63983,u=0.9759577775531386,v=0.5346636072398493,w=0.5090356632542478,x=4.3427832507791475 color=purple,shape=triangle,flag=0,i=63991,u=0.6450211290963586,v=0.7647205800081447,w=0.47397787262422303,x=7.512466509854714 color=yellow,shape=circle,flag=1,i=64000,u=0.6072697294590961,v=0.7735604234985045,w=0.4782161481440966,x=4.028959539850409 color=green,shape=square,flag=0,i=64021,u=0.7279543112915372,v=0.6448926086368608,w=0.4867345558653957,x=5.34349840321175 color=red,shape=square,flag=0,i=64022,u=0.9963151094127419,v=0.5614860220224002,w=0.5162238695986654,x=4.799168980917745 color=red,shape=square,flag=1,i=64023,u=0.4876345274932703,v=0.4723527804131543,w=0.5188911764015784,x=4.5079013835331745 color=blue,shape=triangle,flag=0,i=64036,u=0.7478597761606541,v=0.7144990122993502,w=0.5008458260525993,x=5.568158772053908 color=red,shape=triangle,flag=0,i=64041,u=0.8912540679796508,v=0.13308974592620937,w=0.4966351988438118,x=4.740432531230698 color=red,shape=triangle,flag=0,i=64042,u=0.45734507250285783,v=0.2594904818337578,w=0.4989310014114306,x=2.456291754405488 color=yellow,shape=triangle,flag=1,i=64045,u=0.5308586812797977,v=0.7725052654525788,w=0.5133303452297842,x=5.510681131225151 color=blue,shape=circle,flag=0,i=64046,u=0.23449582206897412,v=0.9588065538630066,w=0.5386645118591479,x=5.561227745195509 color=red,shape=circle,flag=0,i=64066,u=0.9240927253960263,v=0.8320418784551288,w=0.46142196509973243,x=4.878844901170772 color=red,shape=square,flag=1,i=64077,u=0.5735278128678156,v=0.05680994750733448,w=0.5033359042288733,x=6.090509801075051 color=green,shape=square,flag=1,i=64085,u=0.38079080255192166,v=0.18905354331113844,w=0.4907037858557233,x=5.263999791996457 color=red,shape=square,flag=0,i=64087,u=0.5960898446331889,v=0.7903397230154193,w=0.5017152619611266,x=3.059881005175774 color=blue,shape=triangle,flag=1,i=64090,u=0.8848908085564067,v=0.8923312132333386,w=0.4990548475069474,x=5.002427345515826 color=blue,shape=triangle,flag=1,i=64094,u=0.1569268443018389,v=0.3196742984588615,w=0.49493793352365983,x=3.756729477592257 color=green,shape=circle,flag=1,i=64100,u=0.5647815083385339,v=0.4863408108927847,w=0.4978077398156158,x=5.285395987891518 color=red,shape=square,flag=0,i=64107,u=0.3136389492477193,v=0.8459831062057569,w=0.5054226352575494,x=2.583552870227812 color=purple,shape=circle,flag=0,i=64111,u=0.08274291700283631,v=0.011981531702173531,w=0.5310308500191578,x=5.987754772763229 color=green,shape=circle,flag=0,i=64129,u=0.09629011688513611,v=0.7869194660837012,w=0.5003479541242317,x=6.49648483163907 color=red,shape=square,flag=1,i=64136,u=0.35692812504153615,v=0.5554943275309325,w=0.5134677416671467,x=4.496888235107965 color=red,shape=triangle,flag=0,i=64147,u=0.020012867427591008,v=0.9805642371114248,w=0.5040291259439584,x=4.231686261830181 color=purple,shape=circle,flag=0,i=64153,u=0.009337255555096569,v=0.13918972136927654,w=0.5283727377866156,x=5.103066168043456 color=red,shape=triangle,flag=1,i=64162,u=0.2985305141624415,v=0.8555467295075686,w=0.49579115054307554,x=5.960945321253074 color=yellow,shape=square,flag=1,i=64167,u=0.9011278559567346,v=0.7285422107675157,w=0.503217543589724,x=4.7521316916146725 color=red,shape=square,flag=0,i=64175,u=0.7059444692365139,v=0.46370555304500527,w=0.5115203103971437,x=4.22356701299343 color=yellow,shape=square,flag=0,i=64197,u=0.015601479148791952,v=0.03483907379197315,w=0.5008076421823484,x=4.66396019719809 color=red,shape=triangle,flag=0,i=64200,u=0.6847297348626562,v=0.7932145655465365,w=0.4908329573718279,x=5.445535502726784 color=red,shape=square,flag=1,i=64213,u=0.45342505049552717,v=0.5125225107549417,w=0.5190128579359139,x=4.118315119598916 color=yellow,shape=triangle,flag=1,i=64215,u=0.6705071617575188,v=0.8803817427148197,w=0.5013233583723586,x=6.298922709137407 color=blue,shape=square,flag=1,i=64221,u=0.8702136360214097,v=0.49692647582661886,w=0.5299607495813312,x=6.6131819422058244 color=blue,shape=triangle,flag=1,i=64224,u=0.24947955591329274,v=0.48029654076629635,w=0.49494007087366737,x=3.669811326668052 color=red,shape=square,flag=0,i=64230,u=0.17131051116198714,v=0.8517566554649438,w=0.5215963440875848,x=5.548306467460223 color=blue,shape=triangle,flag=0,i=64240,u=0.4363641687828099,v=0.019544474085960273,w=0.4883218526438222,x=7.387452606559268 color=blue,shape=square,flag=1,i=64245,u=0.5322542720406609,v=0.21065509258665627,w=0.5269834892915934,x=2.5326375376948724 color=red,shape=triangle,flag=0,i=64256,u=0.710143402260618,v=0.8534076581081995,w=0.49975492780193975,x=3.707913732714907 color=red,shape=circle,flag=0,i=64262,u=0.7984166628795825,v=0.8623991335719142,w=0.4791416501521122,x=4.167364845068389 color=yellow,shape=square,flag=1,i=64296,u=0.972916353164527,v=0.3684926942422071,w=0.49736489968193426,x=5.618405006881453 color=yellow,shape=triangle,flag=1,i=64305,u=0.4692257097702849,v=0.3232319653088911,w=0.4956778330548818,x=6.740500416957165 color=red,shape=triangle,flag=0,i=64326,u=0.9683081350452416,v=0.06627198553757219,w=0.4948835589424861,x=5.660492884833842 color=green,shape=triangle,flag=0,i=64328,u=0.9715889849359332,v=0.6309264306921687,w=0.46616568176306455,x=6.371837539270937 color=purple,shape=square,flag=0,i=64338,u=0.9336239383135657,v=0.12656727153155733,w=0.5179953179287038,x=5.373824217752926 color=green,shape=circle,flag=0,i=64342,u=0.9644393199588971,v=0.8066328910947824,w=0.5097391666721242,x=7.7391571591368065 color=blue,shape=triangle,flag=1,i=64343,u=0.04233891284097735,v=0.6565482518638562,w=0.49572672756256864,x=5.852762818653058 color=green,shape=square,flag=0,i=64348,u=0.8223999917274492,v=0.3277495051022389,w=0.5011804726006969,x=6.29409308520921 color=red,shape=circle,flag=0,i=64370,u=0.8730393727931256,v=0.8846982456315251,w=0.46943485903510607,x=3.469662858803927 color=green,shape=square,flag=0,i=64394,u=0.8759037505341121,v=0.2768411564827987,w=0.4941481492696853,x=4.356843922601224 color=yellow,shape=triangle,flag=1,i=64401,u=0.9164000913872118,v=0.5224988236587411,w=0.4936227158934918,x=2.569989762935232 color=purple,shape=circle,flag=0,i=64407,u=0.45050526713854444,v=0.3810065490600414,w=0.5216637275515531,x=4.309329417360491 color=red,shape=square,flag=0,i=64426,u=0.38755407348408877,v=0.4052117319250018,w=0.5420427752432667,x=2.6621468072160517 color=yellow,shape=square,flag=1,i=64433,u=0.8463768288412885,v=0.19634946726177027,w=0.5073074847287324,x=3.1131903296146803 color=red,shape=square,flag=1,i=64434,u=0.2899660655195041,v=0.2607739531495955,w=0.5308400515996639,x=5.378602804959737 color=green,shape=square,flag=0,i=64435,u=0.2686419363736554,v=0.5884194571306015,w=0.49156965416921433,x=7.33472067034177 color=blue,shape=circle,flag=0,i=64449,u=0.5312097691912956,v=0.2866998766884393,w=0.5300547771100046,x=4.809521088514162 color=red,shape=triangle,flag=0,i=64452,u=0.46335425384275486,v=0.6625945608407157,w=0.5221104204691589,x=4.006153695745944 color=red,shape=circle,flag=0,i=64457,u=0.1531298558749995,v=0.07053912927400352,w=0.46452585900732735,x=5.256278983755565 color=red,shape=circle,flag=0,i=64477,u=0.5940629877888385,v=0.601296637083989,w=0.46630411447173187,x=4.436644125785411 color=purple,shape=square,flag=0,i=64481,u=0.37065765846951126,v=0.4067283952673201,w=0.5274680100421396,x=3.9896762684542346 color=purple,shape=square,flag=0,i=64534,u=0.2015145831423374,v=0.3960021303646689,w=0.5319611531145543,x=3.64698269911374 color=red,shape=circle,flag=1,i=64539,u=0.2607995955602843,v=0.22400239384539683,w=0.45787860930613217,x=5.45651471941169 color=yellow,shape=square,flag=1,i=64541,u=0.4001773190623412,v=0.25630894165050044,w=0.5182528477901761,x=4.875544406373321 color=red,shape=circle,flag=1,i=64542,u=0.7842388254663052,v=0.6881628448515157,w=0.45689713863516374,x=4.956630170345078 color=blue,shape=triangle,flag=1,i=64543,u=0.9351764837201605,v=0.3413938482854869,w=0.5091841787274728,x=2.481757224688957 color=purple,shape=triangle,flag=0,i=64566,u=0.3791540064862967,v=0.2937931357505441,w=0.48337957209757326,x=5.707400788309904 color=red,shape=triangle,flag=0,i=64572,u=0.978883263957583,v=0.17208215251297787,w=0.5254050061158511,x=3.76829801681267 color=blue,shape=circle,flag=0,i=64578,u=0.852192730327997,v=0.875831829797369,w=0.5307611835100067,x=4.588894350897245 color=red,shape=square,flag=0,i=64601,u=0.5918043606292889,v=0.7000468134049758,w=0.5169782111633763,x=4.543946337259999 color=red,shape=triangle,flag=1,i=64615,u=0.45739248862444637,v=0.8672414109138011,w=0.5215251455748212,x=2.7227260734492176 color=red,shape=circle,flag=0,i=64619,u=0.24723301084060134,v=0.2841229280120296,w=0.4664359479037898,x=3.1377552847749857 color=red,shape=triangle,flag=0,i=64627,u=0.6380693842353886,v=0.624769350221581,w=0.5166966282202463,x=5.933012199227495 color=red,shape=square,flag=0,i=64639,u=0.8792987396666089,v=0.07680337370292156,w=0.5151463811642052,x=5.915825493566256 color=red,shape=circle,flag=0,i=64646,u=0.02946597584823507,v=-0.00964173446964052,w=0.4598542294953604,x=6.066656368439051 color=red,shape=square,flag=0,i=64656,u=0.9957593004096548,v=0.5457792865191033,w=0.5202985812877525,x=5.876195227853195 color=red,shape=triangle,flag=0,i=64659,u=0.316076570954698,v=0.49451312023591176,w=0.5197858997736655,x=5.432327494908552 color=blue,shape=square,flag=1,i=64675,u=0.9894146584394644,v=0.1598456849653801,w=0.5190465620260806,x=5.321717094729606 color=red,shape=triangle,flag=0,i=64685,u=0.9667942870792993,v=0.45834058366298125,w=0.5193796874853984,x=2.7752124774275586 color=orange,shape=circle,flag=1,i=64698,u=0.9530300915157188,v=0.6157661209513193,w=0.5000750694642581,x=5.501506237847437 color=green,shape=square,flag=0,i=64706,u=0.025466555741951558,v=0.9314023931438274,w=0.4918391536631408,x=4.003904813492953 color=purple,shape=square,flag=0,i=64720,u=0.16261944210584722,v=0.9622114930511119,w=0.5159587490104004,x=4.5962545116326945 color=blue,shape=triangle,flag=1,i=64723,u=0.30303255688848285,v=0.08693611578817917,w=0.51113716940579,x=4.255873939755748 color=red,shape=square,flag=1,i=64746,u=0.11150300883706599,v=0.812752471011457,w=0.5251511912985377,x=5.962202895801816 color=red,shape=circle,flag=1,i=64755,u=0.49783467917086743,v=0.5674595761425589,w=0.4802455708585952,x=3.662032559009031 color=yellow,shape=circle,flag=1,i=64764,u=0.7002826909415023,v=0.8114218848057422,w=0.4878827731446801,x=5.561974666181925 color=red,shape=square,flag=0,i=64769,u=0.6178092770759732,v=0.24994269586172424,w=0.5272017256334964,x=5.718707747559576 color=blue,shape=square,flag=1,i=64775,u=0.36765547446107316,v=0.8335993289522815,w=0.5120397252558292,x=4.279514054167786 color=yellow,shape=circle,flag=1,i=64781,u=0.6474511034851618,v=0.9441289636599535,w=0.48706589514743537,x=6.857391291304986 color=red,shape=triangle,flag=0,i=64816,u=0.9990007970649004,v=0.5984063560112501,w=0.5192765965918773,x=6.02505866341543 color=red,shape=triangle,flag=0,i=64821,u=0.9025392010053739,v=0.08866257265615829,w=0.5160043250545797,x=5.720386334787676 color=yellow,shape=triangle,flag=1,i=64831,u=0.5134958791049719,v=0.8682061667809065,w=0.49802201640066407,x=5.261964049553423 color=green,shape=square,flag=0,i=64832,u=0.931142864151507,v=0.24549905593507126,w=0.478110673194234,x=3.437685703888444 color=green,shape=circle,flag=1,i=64838,u=0.3254608716787136,v=0.41431860395529174,w=0.498711875491115,x=6.53041911957271 color=yellow,shape=square,flag=1,i=64842,u=0.947359937140417,v=0.7724299503572887,w=0.5068265682251539,x=4.243199493337334 color=red,shape=triangle,flag=0,i=64848,u=0.9494992003261125,v=0.17488470368341058,w=0.5063790096338582,x=6.847445460858204 color=red,shape=square,flag=1,i=64859,u=0.632974858484807,v=8.930277299445954e-05,w=0.5290750594438621,x=4.610258616114966 color=red,shape=triangle,flag=0,i=64861,u=0.35914496258462403,v=0.31383948785887983,w=0.5031666087844853,x=4.208162268033191 color=green,shape=square,flag=0,i=64871,u=0.5132468772575083,v=0.734496148973709,w=0.47531369383510536,x=5.4639852903521495 color=yellow,shape=square,flag=1,i=64873,u=0.16463447410131382,v=0.22800574067939772,w=0.5049253759450267,x=6.212815695863007 color=blue,shape=triangle,flag=1,i=64890,u=0.20956241202265335,v=0.2726171005354915,w=0.5144404976118491,x=5.822733204105899 color=red,shape=triangle,flag=1,i=64893,u=0.5354715208728439,v=0.24613133287194167,w=0.5012996540359805,x=5.808934763221032 color=red,shape=triangle,flag=0,i=64899,u=0.5460430282095673,v=0.916400948528702,w=0.4968924116236075,x=4.948528140292663 color=red,shape=square,flag=1,i=64907,u=0.48750530053116925,v=0.8354207519202246,w=0.5329904601574204,x=4.5400396422906 color=purple,shape=square,flag=0,i=64912,u=0.6290497451733703,v=0.04900077904469091,w=0.5362106970499977,x=3.9536667555229728 color=red,shape=triangle,flag=0,i=64925,u=0.7356531907462553,v=0.8973901227620534,w=0.4890626288215829,x=4.240885522928878 color=red,shape=square,flag=1,i=64929,u=0.8525662903112224,v=0.9487130591701535,w=0.5327118930797484,x=4.536914619191142 color=red,shape=circle,flag=1,i=64951,u=0.2753183104553981,v=0.24022062075193212,w=0.47358419495404414,x=3.949768957643478 color=purple,shape=triangle,flag=0,i=64957,u=0.058320987548133085,v=0.6123565767998979,w=0.46733568865542235,x=4.233692005189134 color=red,shape=square,flag=0,i=64958,u=0.44240926277505943,v=0.9523325413193555,w=0.5326671561332541,x=4.2894849799572015 color=blue,shape=square,flag=0,i=64963,u=0.024426947590495796,v=0.5316266848361411,w=0.5124139001677811,x=5.619054311325499 color=blue,shape=circle,flag=0,i=64964,u=0.5063412718934043,v=0.7486730533820664,w=0.5069041429725936,x=4.443930448302951 color=red,shape=square,flag=1,i=64976,u=0.7773778380327702,v=0.5907033048263742,w=0.5306760834520597,x=5.766312964627865 color=red,shape=circle,flag=0,i=64978,u=0.4119729859087361,v=0.479541486794416,w=0.47274220675869755,x=5.604600467622807 color=purple,shape=square,flag=0,i=64985,u=0.16842275192459144,v=0.7888948967618983,w=0.5335551370240443,x=3.8748462668508084 color=yellow,shape=circle,flag=1,i=64992,u=0.3395358854734897,v=0.4717722447811884,w=0.47183492669344995,x=5.1030090499269924 color=red,shape=square,flag=0,i=64995,u=0.0567647560319825,v=0.8852584386364303,w=0.5308195825619981,x=4.812497654502461 color=green,shape=circle,flag=0,i=65002,u=0.747777869980808,v=0.15672336812474486,w=0.4983671857021502,x=3.5524937270702743 color=purple,shape=circle,flag=0,i=65009,u=0.11448659042521758,v=0.37128980405316847,w=0.5280579389173199,x=6.7711738113629565 color=blue,shape=triangle,flag=1,i=65028,u=0.811814842995744,v=0.2538914035408405,w=0.49895245391075094,x=5.554581328507087 color=purple,shape=circle,flag=0,i=65051,u=0.16617239618475033,v=0.4346085580893905,w=0.531990236539049,x=3.9211115790816913 color=red,shape=square,flag=0,i=65053,u=0.2718576509578965,v=0.15577912026012075,w=0.5278939165818484,x=6.984378812791431 color=red,shape=triangle,flag=0,i=65055,u=0.4293332706716929,v=0.7463306612814803,w=0.5008319015861331,x=4.818548965080251 color=blue,shape=circle,flag=1,i=65058,u=0.5283589194442528,v=0.23472492897549846,w=0.5135573256417975,x=5.120523443235321 color=orange,shape=square,flag=1,i=65072,u=0.41479594499790895,v=0.48373183240935813,w=0.4920374216652845,x=3.4676338222668917 color=red,shape=square,flag=1,i=65073,u=0.36776326219296496,v=0.026864515735567918,w=0.5249304995524096,x=4.8976826634433985 color=blue,shape=circle,flag=1,i=65083,u=0.5809690675464005,v=0.9409031057132201,w=0.5126529986638552,x=5.4930181893311 color=yellow,shape=triangle,flag=1,i=65084,u=0.2924621514312543,v=0.4519628107299266,w=0.5060714279073292,x=4.022430968547574 color=red,shape=square,flag=0,i=65086,u=0.3616524063450083,v=0.6748725045521407,w=0.5220869562971677,x=6.466926281716532 color=green,shape=square,flag=0,i=65100,u=0.18992913486063678,v=0.6976525721214802,w=0.48573717600808036,x=4.604820235923111 color=red,shape=square,flag=0,i=65125,u=0.10613781365226538,v=0.06695608747900939,w=0.5245187213867367,x=4.677799445091317 color=red,shape=circle,flag=0,i=65128,u=0.23743225205268448,v=0.1783788641581944,w=0.49701046700655943,x=4.691433950645753 color=red,shape=circle,flag=1,i=65141,u=0.47632324588875885,v=0.4530808242615764,w=0.5050409997934431,x=4.270843356712796 color=red,shape=triangle,flag=0,i=65143,u=0.6275028105541011,v=0.7213672357227178,w=0.5002172762645051,x=3.440055274826553 color=yellow,shape=triangle,flag=0,i=65154,u=0.08575403258114778,v=0.4061910694743488,w=0.5000709824020975,x=5.452885175514719 color=blue,shape=circle,flag=0,i=65166,u=0.9627736861082165,v=0.3444540262018051,w=0.5169924498805815,x=5.244021008140907 color=purple,shape=triangle,flag=1,i=65197,u=0.02188951027035302,v=0.44449210075211454,w=0.4648009260304861,x=5.625409051079889 color=red,shape=triangle,flag=1,i=65199,u=0.22641941927027553,v=0.027411990493695804,w=0.49000303878724694,x=6.070081980144997 color=yellow,shape=square,flag=1,i=65202,u=0.5466110589119082,v=0.7993443396901851,w=0.5115614601985802,x=3.310085028681474 color=red,shape=square,flag=1,i=65204,u=0.5445462751290312,v=0.23545602382978847,w=0.5084121071928628,x=4.978951854769487 color=purple,shape=circle,flag=0,i=65213,u=0.24386271930329795,v=0.4948862591969918,w=0.5310211373033625,x=7.332289486054274 color=yellow,shape=square,flag=1,i=65243,u=0.4207977187353583,v=0.06559148241184698,w=0.5119971292357092,x=5.713981506956713 color=purple,shape=square,flag=0,i=65255,u=0.3694078438004057,v=0.8845307798454202,w=0.5196124743571258,x=3.772024658063442 color=yellow,shape=square,flag=1,i=65261,u=0.364342339312579,v=0.6778843851093698,w=0.5109535945540792,x=4.997107064745154 color=red,shape=square,flag=0,i=65264,u=0.9026517077683804,v=0.4662380200947325,w=0.5254560965412735,x=4.85920289078181 color=blue,shape=triangle,flag=1,i=65272,u=0.6171043031985003,v=0.6563591096612812,w=0.501899987292809,x=4.705629956098989 color=red,shape=square,flag=1,i=65274,u=0.7565377040169405,v=0.77687484140646,w=0.5247431613810872,x=6.385264763616131 color=red,shape=square,flag=0,i=65276,u=0.8857073415633464,v=0.0568738396449876,w=0.5225633155813637,x=4.457044827399879 color=red,shape=circle,flag=0,i=65297,u=0.8965680990892491,v=0.9866394224571755,w=0.5132353404710892,x=8.36378992550476 color=red,shape=square,flag=0,i=65302,u=0.4060476274644077,v=0.6921115525227287,w=0.5249918109489632,x=5.2400281554119195 color=orange,shape=square,flag=0,i=65330,u=0.6350121426552636,v=0.048032888259897044,w=0.48537979050664637,x=5.209091859880245 color=blue,shape=circle,flag=1,i=65336,u=0.2703392928886307,v=0.12155510214852938,w=0.5246866921197347,x=3.1267564242051695 color=red,shape=triangle,flag=0,i=65340,u=0.563117131148891,v=0.7939612650067187,w=0.4915541049563324,x=3.7090816210948603 color=red,shape=circle,flag=1,i=65357,u=0.02704338146223284,v=-0.04106383914389711,w=0.5196009194626682,x=5.195519463029234 color=yellow,shape=square,flag=1,i=65359,u=0.6837164121801776,v=0.8617931960386346,w=0.5129301527828952,x=5.427528440148539 color=purple,shape=square,flag=0,i=65363,u=0.9525761753790593,v=0.49451301162020544,w=0.522167193867163,x=4.640759310495134 color=red,shape=square,flag=1,i=65368,u=0.1628701489879193,v=0.4486789942169367,w=0.5329971644668731,x=6.4143655401408095 color=yellow,shape=square,flag=1,i=65372,u=0.23314746745489467,v=0.5140457025729221,w=0.5144697602469269,x=5.382406309641655 color=purple,shape=triangle,flag=0,i=65375,u=0.32710018093748117,v=0.682952682314051,w=0.4587534389825774,x=4.161987410672152 color=blue,shape=square,flag=1,i=65382,u=0.9499804206300224,v=0.8830151918905924,w=0.49493525846972275,x=7.2901199343317105 color=purple,shape=triangle,flag=0,i=65387,u=0.45117504834511646,v=0.7528625843741594,w=0.46369375666349016,x=6.018868590488388 color=red,shape=triangle,flag=0,i=65412,u=0.2673400311085029,v=0.9748084027835497,w=0.4858489835268026,x=3.454207420625662 color=yellow,shape=triangle,flag=1,i=65424,u=0.8521956893378505,v=0.31778334288020316,w=0.5045010392783321,x=7.740849571194886 color=red,shape=circle,flag=1,i=65425,u=0.6621048080269045,v=0.6793782554213099,w=0.5361145560063162,x=3.989075765882611 color=purple,shape=square,flag=0,i=65445,u=0.07770708160455186,v=0.15686282473056257,w=0.5219192637211514,x=7.565571153685286 color=red,shape=square,flag=1,i=65452,u=0.5070802815676585,v=0.0991009994388381,w=0.5142618220957491,x=4.005160234130259 color=yellow,shape=triangle,flag=1,i=65460,u=0.21670855056612637,v=0.4229092229670731,w=0.5090821428584934,x=4.171376694980853 color=red,shape=triangle,flag=0,i=65463,u=0.47594230481617894,v=0.26577985821357586,w=0.4793083008522725,x=3.312364535109152 color=yellow,shape=triangle,flag=1,i=65469,u=0.35486872424687865,v=0.35645941772963985,w=0.5126031740370534,x=6.913966157444608 color=red,shape=square,flag=0,i=65470,u=0.8177422009952898,v=0.77502762265133,w=0.5201128676434438,x=4.281609650116536 color=red,shape=square,flag=1,i=65480,u=0.6608780225835991,v=0.25110646468794273,w=0.5248571536023938,x=5.681629426309661 color=green,shape=square,flag=0,i=65485,u=0.19684165053851022,v=0.0658455013679633,w=0.482523956636488,x=6.074793796362852 color=red,shape=triangle,flag=0,i=65490,u=0.48503770531462564,v=0.2097154454813771,w=0.48426800355276983,x=4.432375055866024 color=yellow,shape=square,flag=1,i=65523,u=0.1187328949230666,v=0.9371930150464581,w=0.5117171183989658,x=5.2214576049932315 color=orange,shape=square,flag=0,i=65529,u=0.6422253013524792,v=0.3262956938191697,w=0.49531878153527514,x=5.072003145791108 color=yellow,shape=square,flag=1,i=65532,u=0.04911615336020381,v=0.0740469691539487,w=0.5119210394408731,x=4.181382559173605 color=green,shape=circle,flag=0,i=65544,u=0.9130327920089024,v=0.1547003795449442,w=0.48815423889993104,x=5.164413079351491 color=green,shape=square,flag=0,i=65549,u=0.9806626403344759,v=0.7092852901524583,w=0.47924229221639825,x=4.249550586613052 color=yellow,shape=circle,flag=1,i=65555,u=0.5475144808182765,v=0.874686834933429,w=0.48702762694608687,x=3.6028032373094185 color=green,shape=triangle,flag=0,i=65569,u=0.7710719710129457,v=0.09701565689653802,w=0.4952347592409199,x=7.914435535668112 color=blue,shape=square,flag=0,i=65578,u=0.596264040060545,v=0.2007539589978875,w=0.4816977457008478,x=6.328477665108153 color=orange,shape=square,flag=0,i=65594,u=0.033244875883853386,v=0.1976111706760848,w=0.49694125371360376,x=6.915507637934556 color=yellow,shape=circle,flag=1,i=65597,u=0.7128461133000341,v=0.7379828956763212,w=0.4921527474600759,x=5.810573662243253 color=red,shape=triangle,flag=1,i=65598,u=0.2813099806314614,v=0.40467576543705563,w=0.4862179676409222,x=3.025497259794875 color=yellow,shape=triangle,flag=1,i=65606,u=0.650388664784633,v=0.748753198306179,w=0.5110256564418473,x=3.8444908893851584 color=red,shape=circle,flag=0,i=65609,u=0.038891398021832724,v=-0.0047455971530552254,w=0.5376717895435597,x=6.972551732184367 color=red,shape=square,flag=0,i=65611,u=0.3610852846643944,v=0.8191668782064966,w=0.5159380801099495,x=2.4549765988995085 color=red,shape=circle,flag=0,i=65618,u=0.8154109490283452,v=0.8613841121586385,w=0.5417314957392083,x=3.212581844644406 color=yellow,shape=triangle,flag=1,i=65622,u=0.9417779749131687,v=0.5989427790361583,w=0.5123731859941992,x=5.652941363127328 color=purple,shape=circle,flag=0,i=65640,u=0.8032016297505784,v=0.20018915268808912,w=0.5504532139490572,x=6.3672926809200305 color=red,shape=triangle,flag=1,i=65675,u=0.8904964369108095,v=0.7717976078033741,w=0.4831082951099408,x=4.903953345673804 color=purple,shape=square,flag=0,i=65680,u=0.3078085627958542,v=0.3513847980538256,w=0.52968501849301,x=5.791490385475154 color=red,shape=triangle,flag=0,i=65682,u=0.5630094998177576,v=0.39810214349093065,w=0.4840927278330533,x=2.8641043493827794 color=green,shape=triangle,flag=0,i=65688,u=0.3495391028098135,v=0.04847993696677777,w=0.4909365492240992,x=2.6334722384675815 color=purple,shape=circle,flag=0,i=65713,u=0.20780248179986993,v=0.9641870358252208,w=0.5491676250640222,x=5.355817321209251 color=red,shape=square,flag=1,i=65718,u=0.9631572523989812,v=0.1988227554831976,w=0.5169183681327704,x=4.413010187336062 color=red,shape=square,flag=1,i=65719,u=0.6610719375001668,v=0.9466620977827448,w=0.5191538795175775,x=6.181558463760098 color=blue,shape=triangle,flag=0,i=65735,u=0.532217274575207,v=0.9215165572456875,w=0.49769189054544016,x=2.951659057688412 color=yellow,shape=square,flag=1,i=65748,u=0.8565215838409299,v=0.547557706752661,w=0.5284014936577571,x=5.139861303617188 color=blue,shape=circle,flag=0,i=65758,u=0.11493638715498466,v=0.9068576192504535,w=0.5238762042749868,x=5.002189566230604 color=blue,shape=square,flag=1,i=65777,u=0.31889897017136026,v=0.316537088637698,w=0.4838142844156904,x=5.200245777483391 color=red,shape=triangle,flag=0,i=65786,u=0.9723832339657721,v=0.9216069378968924,w=0.4763934397254572,x=4.936530481775569 color=blue,shape=square,flag=0,i=65805,u=0.2591789176525001,v=0.2944090414593282,w=0.4813982600767997,x=2.510009144578748 color=red,shape=square,flag=1,i=65818,u=0.23553567696241795,v=0.41739723335043155,w=0.5260361259322007,x=4.732313414838944 color=purple,shape=circle,flag=0,i=65826,u=0.9031037628536029,v=0.017696160981824693,w=0.5485179355840061,x=5.175351802162621 color=yellow,shape=square,flag=0,i=65831,u=0.870609726338584,v=0.401006888910205,w=0.5298318710186819,x=4.867283791678956 color=green,shape=square,flag=1,i=65844,u=0.8465149981805902,v=0.7637890006015269,w=0.46456320279830216,x=6.110137649663902 color=red,shape=square,flag=0,i=65850,u=0.4095920919277024,v=0.09660392615422109,w=0.5304399566102151,x=4.547702374449521 color=blue,shape=circle,flag=0,i=65860,u=0.4805512213466605,v=0.21737726353706888,w=0.5235499503604353,x=6.0818172193662825 color=red,shape=triangle,flag=1,i=65861,u=0.21789574557058644,v=0.2392185651492852,w=0.4896732875300848,x=3.8626313362452542 color=red,shape=triangle,flag=1,i=65870,u=0.39632844612386,v=0.9492528818969544,w=0.4998987826941821,x=5.008781245264196 color=red,shape=circle,flag=0,i=65888,u=0.23643734825428298,v=0.20261135185297066,w=0.5408689398703113,x=5.572425751726677 color=green,shape=triangle,flag=1,i=65913,u=0.5186176275777967,v=0.2054289898134315,w=0.4915810215318341,x=5.578258500530295 color=red,shape=square,flag=0,i=65935,u=0.3309357423883479,v=0.725713868060836,w=0.5260549831742616,x=2.663995747138903 color=purple,shape=square,flag=0,i=65941,u=0.7450693314454351,v=0.7874976347311841,w=0.5200618730968948,x=7.286778748858808 color=red,shape=triangle,flag=0,i=65944,u=0.9864367180455702,v=0.37045174487388777,w=0.49368088095638113,x=4.516041844745154 color=red,shape=circle,flag=0,i=65959,u=0.7255351327908097,v=0.6765720696316141,w=0.533735323931998,x=5.412834633959929 color=yellow,shape=square,flag=1,i=65973,u=0.8527274263056215,v=0.24925696247631246,w=0.5404171056841892,x=4.04240852877822 color=blue,shape=triangle,flag=1,i=65979,u=0.16931548166599253,v=0.9012430937935009,w=0.4975508276252114,x=3.48300168160711 color=red,shape=triangle,flag=0,i=65992,u=0.08157658671038037,v=0.8848745359917821,w=0.4905829398825815,x=4.929880364065919 color=red,shape=triangle,flag=0,i=66001,u=0.08289326883489034,v=0.2838100050711774,w=0.48575482154347827,x=2.088330588192684 color=red,shape=triangle,flag=0,i=66006,u=0.9455253272892942,v=0.3529829462119589,w=0.49077719478025816,x=5.266825104703118 color=purple,shape=triangle,flag=0,i=66015,u=0.10635533022443988,v=0.765912250372427,w=0.4735170744381001,x=3.609019408830163 color=red,shape=triangle,flag=0,i=66016,u=0.3584662810316416,v=0.34006804463021645,w=0.4867656248152798,x=5.250274043912767 color=red,shape=square,flag=1,i=66018,u=0.0300185210043572,v=0.5764237783253642,w=0.5128833371312603,x=7.4318991469801645 color=yellow,shape=square,flag=1,i=66034,u=0.7086307737392321,v=0.8361197500271356,w=0.5361286488166549,x=6.827805765791069 color=yellow,shape=circle,flag=1,i=66038,u=0.6600574003945087,v=0.9708996159541871,w=0.49875470972187536,x=6.482600605885213 color=blue,shape=square,flag=1,i=66046,u=0.6726727227871588,v=0.42156202307788926,w=0.4646818934036413,x=5.865547807266733 color=red,shape=circle,flag=0,i=66071,u=0.6826415438045406,v=0.7196333842311028,w=0.4999336999532344,x=5.507996239808637 color=red,shape=square,flag=0,i=66074,u=0.7556849406675512,v=0.5756232032160563,w=0.5224706806586751,x=4.541628910447802 color=red,shape=square,flag=1,i=66077,u=0.38934017968027124,v=0.14080289508555732,w=0.5216904519812638,x=3.4921097942148016 color=purple,shape=circle,flag=0,i=66082,u=0.954963362975394,v=0.1891919072927566,w=0.5408947025157844,x=5.8209278216532025 color=purple,shape=square,flag=1,i=66106,u=0.2900797292359212,v=0.18331788415779138,w=0.5270743920271593,x=3.659391675899025 color=red,shape=square,flag=0,i=66136,u=0.3729001003048925,v=0.002579446584631273,w=0.5294590180084595,x=4.95781140146564 color=green,shape=circle,flag=0,i=66142,u=0.03144618970573354,v=0.8101630773552404,w=0.48369241851009676,x=3.8429602486887213 color=red,shape=circle,flag=1,i=66175,u=0.9973354035694538,v=1.0250351309434942,w=0.4935338096568391,x=5.509620355031186 color=blue,shape=square,flag=1,i=66176,u=0.1479544549133024,v=0.32540757563244527,w=0.4437949228633597,x=6.318550963640885 color=blue,shape=square,flag=1,i=66200,u=0.44768572765841963,v=0.04397540764708863,w=0.444071830711182,x=6.195617335156531 color=red,shape=triangle,flag=0,i=66204,u=0.9417220624872231,v=0.4436263500097287,w=0.4786815325027116,x=3.318969107234588 color=red,shape=square,flag=1,i=66206,u=0.1354827939983685,v=0.6519926007293998,w=0.5167012747461797,x=5.3403656899448535 color=purple,shape=square,flag=0,i=66236,u=0.19725791130471593,v=0.8886735735471696,w=0.5202572576222524,x=6.1845270378912005 color=yellow,shape=circle,flag=1,i=66237,u=0.31705867680025823,v=0.48231965740539307,w=0.5005327965861784,x=5.381476542710105 color=green,shape=triangle,flag=0,i=66238,u=0.9347680034905226,v=0.36701360311453735,w=0.49502633335598634,x=3.683186013099862 color=purple,shape=square,flag=0,i=66239,u=0.5271711430700915,v=0.7227290178600558,w=0.524822340480443,x=4.8809938498534216 color=red,shape=square,flag=0,i=66258,u=0.23930771373547066,v=0.03683328236103234,w=0.5118633935383123,x=3.606252695220856 color=yellow,shape=triangle,flag=1,i=66262,u=0.3733808320786386,v=0.6931814674308489,w=0.5235631423725657,x=7.917140850139177 color=yellow,shape=circle,flag=1,i=66269,u=0.08782418290771077,v=0.8347630784912323,w=0.5004540813415114,x=5.197587756035834 color=red,shape=circle,flag=1,i=66271,u=0.36970893386210535,v=0.3603436727865095,w=0.5049689608408068,x=4.287473295735559 color=red,shape=square,flag=0,i=66309,u=0.07323232881509201,v=0.45224050849874353,w=0.5192136219354534,x=5.0383588764659315 color=red,shape=triangle,flag=1,i=66312,u=0.010374109347336735,v=0.7210057788853429,w=0.4960503172467584,x=6.670613483638313 color=purple,shape=square,flag=0,i=66313,u=0.04885589167611071,v=0.450398946587766,w=0.527895568997768,x=4.115753420734689 color=yellow,shape=circle,flag=1,i=66317,u=0.25762659294265433,v=0.44995364281875383,w=0.49951882697041644,x=4.430394540365172 color=red,shape=square,flag=1,i=66322,u=0.8233051235532824,v=0.8589839077847085,w=0.5254531384385038,x=7.852404771370387 color=green,shape=square,flag=0,i=66328,u=0.9498766864488037,v=0.20202855966978006,w=0.4641182359211531,x=3.6893558600419034 color=red,shape=square,flag=1,i=66335,u=0.899333701568108,v=0.7643239731785252,w=0.5248623623895429,x=6.6339667975807854 color=purple,shape=square,flag=0,i=66356,u=0.712394110164147,v=0.5297183088522027,w=0.5328788495605058,x=3.49423106887173 color=red,shape=circle,flag=0,i=66368,u=0.07898180234040808,v=0.04330381604433551,w=0.5036563874946085,x=4.824946004870912 color=red,shape=square,flag=1,i=66410,u=0.9783997467683435,v=0.5109396272243703,w=0.5082780131771135,x=7.3093713678681995 color=red,shape=square,flag=0,i=66415,u=0.9552966721697438,v=0.6160266342909247,w=0.5125112064128358,x=6.376790106211591 color=red,shape=square,flag=0,i=66417,u=0.1928267584415475,v=0.5594588538553201,w=0.5164678104978181,x=6.107762635342415 color=blue,shape=square,flag=0,i=66422,u=0.5984414550438949,v=0.2243290253995549,w=0.4623649717120488,x=6.384665642108395 color=blue,shape=square,flag=0,i=66430,u=0.9926547550299167,v=0.7908575923909869,w=0.46538090540242893,x=6.534229486435346 color=green,shape=triangle,flag=0,i=66501,u=0.41008743275463455,v=0.9540041122276325,w=0.49703293923627817,x=5.370225158636948 color=purple,shape=triangle,flag=0,i=66507,u=0.24145483884064445,v=0.6001331753869563,w=0.48397448747318994,x=4.39911885782561 color=red,shape=circle,flag=0,i=66530,u=0.5044534801229158,v=0.5143901636756646,w=0.5116229673513467,x=6.786266048750883 color=red,shape=circle,flag=0,i=66540,u=0.7547711528509382,v=0.658106530533973,w=0.508855987535961,x=4.945025033780427 color=red,shape=triangle,flag=0,i=66555,u=0.2500977730548797,v=0.9129695640597973,w=0.4818570020053532,x=4.6049692126986415 color=red,shape=triangle,flag=1,i=66560,u=0.012900503227791127,v=0.49515488453999823,w=0.4833487910286201,x=6.59986392957629 color=blue,shape=circle,flag=1,i=66563,u=0.5272222279462238,v=0.19555673939108975,w=0.49944987654326745,x=5.306056673576671 color=red,shape=circle,flag=1,i=66576,u=0.49990721572452335,v=0.42862780826648084,w=0.5044337668370974,x=7.431507202200861 color=red,shape=triangle,flag=1,i=66585,u=0.4061691395975665,v=0.292167854706467,w=0.47163984488873617,x=4.116284788376728 color=red,shape=circle,flag=0,i=66590,u=0.35630131104980933,v=0.4066879736950085,w=0.5002708510503441,x=3.543704086467416 color=red,shape=triangle,flag=1,i=66603,u=0.8906161103137673,v=0.6091053864328775,w=0.47440589735298,x=5.03094694195465 color=purple,shape=triangle,flag=0,i=66604,u=0.7042221664315672,v=0.5128106917394376,w=0.49303464394348323,x=4.96213723048833 color=orange,shape=triangle,flag=0,i=66606,u=0.423239265987457,v=0.8891023847447177,w=0.5250404727529637,x=5.085534737372059 color=purple,shape=square,flag=0,i=66609,u=0.22375288720964792,v=0.9883856917650247,w=0.5201514432059866,x=4.421756318535291 color=purple,shape=square,flag=0,i=66611,u=0.8938199953871618,v=0.381049212560979,w=0.5191836445300219,x=5.165541396421528 color=yellow,shape=square,flag=1,i=66623,u=0.7493992413628368,v=0.34141832595978716,w=0.5211239294918676,x=4.997086636179925 color=red,shape=circle,flag=1,i=66625,u=0.17556465854211778,v=0.23844407602915813,w=0.5139626884864597,x=4.24764900389517 color=red,shape=circle,flag=0,i=66626,u=0.4235176655820543,v=0.4772064134151415,w=0.5118853241853449,x=4.111991213514116 color=red,shape=circle,flag=0,i=66628,u=0.08997876672028216,v=0.07632424407363828,w=0.5069546439921603,x=5.03268986376001 color=blue,shape=triangle,flag=1,i=66632,u=0.15701626157887338,v=0.5665693404336789,w=0.5199247734183263,x=3.2898196461533256 color=red,shape=triangle,flag=0,i=66641,u=0.12305355931656947,v=0.7546996253454846,w=0.4834595339977609,x=5.826520670935331 color=purple,shape=square,flag=1,i=66642,u=0.8237609344817053,v=0.8952905197453466,w=0.5249501867410838,x=4.305402489854181 color=red,shape=triangle,flag=1,i=66645,u=0.5615683215035173,v=0.7731402026244802,w=0.48362704116604427,x=4.1488998631965694 color=red,shape=square,flag=0,i=66646,u=0.7212817424144539,v=0.9790669266804314,w=0.5042828690200761,x=5.774773784289639 color=red,shape=square,flag=0,i=66652,u=0.5882165289478377,v=0.17520631796148456,w=0.5004355579282849,x=3.924825599855493 color=red,shape=triangle,flag=0,i=66686,u=0.4613672842273536,v=0.669833618422066,w=0.4901214607244927,x=4.694922565569576 color=red,shape=circle,flag=0,i=66695,u=0.578488346712645,v=0.6610513101021155,w=0.5055864150843146,x=4.494855857746079 color=red,shape=square,flag=0,i=66717,u=0.8015276534098261,v=0.5544533228721135,w=0.5135878885650611,x=4.061493147797097 color=blue,shape=triangle,flag=1,i=66720,u=0.3033961340149909,v=0.04813475296608227,w=0.5181023143258533,x=4.199090848856527 color=blue,shape=triangle,flag=1,i=66742,u=0.20004802089064222,v=0.18591901263558663,w=0.5152060339598382,x=2.8361967165418167 color=blue,shape=triangle,flag=1,i=66758,u=0.384278856796202,v=0.1997036405316519,w=0.5149807018100885,x=4.758547711964797 color=red,shape=circle,flag=0,i=66759,u=0.9392853200813096,v=0.8441488997660864,w=0.5147058182557732,x=6.055767788257512 color=red,shape=triangle,flag=1,i=66761,u=0.41496885580986553,v=0.908640105447663,w=0.49122562762542893,x=5.488137961034415 color=yellow,shape=circle,flag=1,i=66764,u=0.2920932491763666,v=0.8692865023305532,w=0.5184907105511031,x=4.419363606849407 color=red,shape=square,flag=0,i=66768,u=0.8236716731833342,v=0.010021013848361404,w=0.4913160770922267,x=4.536101717194666 color=blue,shape=square,flag=1,i=66770,u=0.2836467007247855,v=0.6616205252454654,w=0.48050023726874946,x=6.094241352444784 color=blue,shape=triangle,flag=0,i=66773,u=0.4228313153164106,v=0.5823378028838815,w=0.5173136485447389,x=4.997980854606079 color=orange,shape=triangle,flag=1,i=66777,u=0.3129206488715679,v=0.6851397243598627,w=0.5348597832220764,x=3.8634075661511553 color=red,shape=square,flag=1,i=66790,u=0.19849719587767822,v=0.2613345844669408,w=0.4963769331116409,x=4.521006452169434 color=green,shape=triangle,flag=1,i=66791,u=0.5350318085773056,v=0.40944426110455967,w=0.4911000322013426,x=4.4354831966465085 color=red,shape=square,flag=1,i=66816,u=0.3923693055652152,v=0.7431305087616882,w=0.48679070193544083,x=3.8864520327295495 color=green,shape=square,flag=1,i=66821,u=0.007765892408628128,v=0.8401764747915572,w=0.4942199391753263,x=4.838354051366495 color=red,shape=triangle,flag=1,i=66823,u=0.1391237909022971,v=0.15538351629960645,w=0.4922103833419881,x=4.955411917951427 color=yellow,shape=circle,flag=1,i=66825,u=0.1248988838216819,v=0.40576231171468624,w=0.5136830797433093,x=3.7696375352121696 color=purple,shape=triangle,flag=1,i=66843,u=0.925946055444376,v=0.8766003133696987,w=0.5115061539967923,x=6.1215562358932445 color=blue,shape=square,flag=0,i=66864,u=0.48348983966127645,v=0.586655193224428,w=0.471635438741144,x=2.8926566286394753 color=green,shape=circle,flag=0,i=66869,u=0.5160009767781689,v=0.6683768427706686,w=0.49642460752018686,x=3.789795981353663 color=green,shape=square,flag=0,i=66877,u=0.08432995564391765,v=0.7209098806770929,w=0.49901137701973064,x=7.051168603111813 color=red,shape=circle,flag=1,i=66884,u=0.500308841080413,v=0.5789087430651415,w=0.5048963672347088,x=5.34770862406305 color=red,shape=square,flag=0,i=66885,u=0.15704232557193787,v=0.9279163649296636,w=0.46682827193566123,x=4.294848201027139 color=red,shape=circle,flag=1,i=66889,u=0.8363008102718889,v=0.7448809832606749,w=0.5022575338178311,x=5.988341310717203 color=red,shape=triangle,flag=0,i=66893,u=0.2988297716953924,v=0.05062817652271934,w=0.4901996459117237,x=5.996361597098165 color=red,shape=triangle,flag=0,i=66900,u=0.6459277405019923,v=0.6011640855254711,w=0.4884279565057329,x=4.315414524343859 color=red,shape=triangle,flag=0,i=66901,u=0.9162613996021998,v=0.17013938442276344,w=0.4934925932312003,x=4.0327922346751075 color=yellow,shape=square,flag=1,i=66909,u=0.7123377421608842,v=0.6128429843228138,w=0.5271290139614403,x=4.392578429555868 color=yellow,shape=triangle,flag=1,i=66910,u=0.4677420770661258,v=0.2680425528551549,w=0.49845515830540604,x=5.009527134273384 color=blue,shape=square,flag=1,i=66912,u=0.21137229454062545,v=0.05331880392125621,w=0.47136963398598053,x=6.452142277953546 color=red,shape=square,flag=0,i=66913,u=0.15232902422482852,v=0.11857431396554541,w=0.46763700404210046,x=4.725426738109991 color=purple,shape=triangle,flag=0,i=66944,u=0.9907578821712121,v=0.14032932272904886,w=0.5227359176347566,x=3.5000533821466036 color=red,shape=circle,flag=1,i=66947,u=0.29336379977804583,v=0.24268494782403655,w=0.4943785716258085,x=5.858778872787762 color=red,shape=square,flag=0,i=66952,u=0.9049431707410562,v=0.9552676497038975,w=0.47324246602048986,x=4.9610194866257205 color=green,shape=triangle,flag=0,i=66957,u=0.7658148534886452,v=0.7891249375971042,w=0.4878046404539158,x=6.250076176872376 color=red,shape=square,flag=0,i=66960,u=0.4937941137351646,v=0.03325026822216248,w=0.4688839061357942,x=4.572206627225068 color=green,shape=square,flag=0,i=66986,u=0.3519467974490942,v=0.35320049904664697,w=0.49558269425196494,x=4.038467707721917 color=red,shape=square,flag=0,i=66995,u=0.28102549377976715,v=0.553386256533946,w=0.4636924544578165,x=3.427570228572519 color=green,shape=square,flag=1,i=67002,u=0.2740658215359376,v=0.07503585705630522,w=0.5022185621358694,x=4.86518134871109 color=yellow,shape=square,flag=1,i=67003,u=0.2069003406845804,v=0.7432074188450274,w=0.5168554448090693,x=2.953162460698124 color=purple,shape=square,flag=0,i=67005,u=0.9096177095197674,v=0.862650424275686,w=0.5299990602415251,x=3.924517162091974 color=blue,shape=triangle,flag=1,i=67023,u=0.4831120794148649,v=0.5335144371880642,w=0.5244180686527155,x=5.421987782674819 color=blue,shape=square,flag=0,i=67030,u=0.39723710571507254,v=0.9361101556126938,w=0.4763485888200111,x=5.51714207553837 color=purple,shape=square,flag=0,i=67044,u=0.924188649223442,v=0.7533592504589738,w=0.5336386387891984,x=5.015165734368007 color=red,shape=square,flag=0,i=67047,u=0.8858955414751043,v=0.8457255661231017,w=0.4615924607942248,x=4.112605035145278 color=blue,shape=triangle,flag=1,i=67051,u=0.2420480657298678,v=0.5095052669433282,w=0.5191926241877622,x=5.350393668828462 color=blue,shape=triangle,flag=0,i=67064,u=0.3354051946445308,v=0.008655508816868385,w=0.5191864398021466,x=4.708090867466985 color=red,shape=triangle,flag=1,i=67068,u=0.450315313203289,v=0.5566798747518442,w=0.4989844006489304,x=4.638042385360747 color=red,shape=triangle,flag=1,i=67071,u=0.8147775263952478,v=0.3457072984660293,w=0.49493724176120396,x=4.925106639475966 color=red,shape=triangle,flag=0,i=67079,u=0.0743111590518225,v=0.42485486599808064,w=0.5031619419284431,x=7.034683618118856 color=red,shape=circle,flag=0,i=67087,u=0.19924064908250594,v=0.1629881689070343,w=0.5200192914775502,x=4.230488023729935 color=green,shape=circle,flag=0,i=67098,u=0.31256269335908493,v=0.25362247423785667,w=0.5004040051775326,x=5.308845777780988 color=red,shape=circle,flag=1,i=67110,u=0.044730829597704025,v=0.06555864543997994,w=0.5254451221566663,x=4.065249571884831 color=orange,shape=square,flag=0,i=67111,u=0.6198382187331319,v=0.2982527573262761,w=0.4899112286385977,x=4.588381252452653 color=red,shape=circle,flag=0,i=67116,u=0.23558327516561317,v=0.18191164629043607,w=0.5289976920989634,x=3.0849402550490734 color=red,shape=circle,flag=0,i=67120,u=0.7029499310102802,v=0.7855524632564224,w=0.532657601008814,x=4.552258901807314 color=red,shape=square,flag=0,i=67121,u=0.11017099160971788,v=0.9172209763950294,w=0.4675075683209409,x=3.3227826767726185 color=yellow,shape=circle,flag=1,i=67132,u=0.2034961029948661,v=0.24282265457691143,w=0.5110378006927006,x=2.202025080476504 color=red,shape=circle,flag=0,i=67151,u=0.21446023308587558,v=0.12871063260704096,w=0.5233480700607201,x=3.48131430457118 color=blue,shape=square,flag=0,i=67153,u=0.811294472237815,v=0.7609423218095801,w=0.47830852095003895,x=4.6169775499145524 color=red,shape=square,flag=1,i=67154,u=0.26748735061612194,v=0.011330267559624296,w=0.4592845818599402,x=5.022049367016508 color=green,shape=triangle,flag=0,i=67155,u=0.8760937276605476,v=0.6086758643745905,w=0.47851822969782437,x=6.8273365261346255 color=red,shape=triangle,flag=1,i=67161,u=0.8552653695574853,v=0.4317517129121736,w=0.5129891420711241,x=6.058565638729665 color=red,shape=triangle,flag=0,i=67167,u=0.8663868317145373,v=0.5469619396068313,w=0.5167213802988432,x=3.5781012411377433 color=purple,shape=square,flag=0,i=67172,u=0.6597405306363103,v=0.05231119312568355,w=0.5254846965803984,x=5.081634019722279 color=yellow,shape=triangle,flag=1,i=67173,u=0.6292665793608427,v=0.7527639860823551,w=0.4996179091451437,x=2.6596030955269874 color=purple,shape=square,flag=0,i=67175,u=0.8079679991649296,v=0.4339596087569675,w=0.5241812344253002,x=5.222991290029498 color=green,shape=square,flag=0,i=67183,u=0.1649130446013265,v=0.11559652340112836,w=0.48940576107196065,x=6.31013075194948 color=green,shape=square,flag=0,i=67200,u=0.36974074823157055,v=0.7778955532640902,w=0.4947591937299127,x=4.229129190538797 color=purple,shape=circle,flag=0,i=67202,u=0.8408466265047859,v=0.31378357368010923,w=0.5405773621668882,x=5.499239543728046 color=red,shape=square,flag=1,i=67219,u=0.09304559261759127,v=0.4274136001569173,w=0.45704577105724403,x=5.3430367229514255 color=blue,shape=square,flag=1,i=67221,u=0.9737998030627488,v=0.32321593804913995,w=0.47377265093112625,x=4.803134494759509 color=red,shape=square,flag=0,i=67247,u=0.7906914473459556,v=0.6238712972262597,w=0.45577226559151984,x=3.115842729362546 color=red,shape=square,flag=1,i=67254,u=0.4724820151758632,v=0.40418115474135274,w=0.4557220380207631,x=6.094464796848755 color=blue,shape=square,flag=1,i=67269,u=0.30239220543556244,v=0.008455494621451787,w=0.48059742367110847,x=4.613068554396242 color=purple,shape=square,flag=1,i=67274,u=0.1568446022488631,v=0.0676113463686161,w=0.5248261493135646,x=5.40857482613658 color=red,shape=circle,flag=0,i=67277,u=0.9743792957335071,v=0.9695009394097888,w=0.4918929260195619,x=6.460444786258642 color=blue,shape=square,flag=1,i=67290,u=0.8283126571971555,v=0.7168326787935714,w=0.481374917480795,x=4.277394052783378 color=blue,shape=square,flag=1,i=67318,u=0.9661317088764938,v=0.3280278868946216,w=0.4730325667871105,x=7.570326370156036 color=blue,shape=triangle,flag=0,i=67335,u=0.8502290633459983,v=0.5148133316609538,w=0.5112618091687502,x=3.089441479475988 color=red,shape=triangle,flag=0,i=67342,u=0.008427542977352487,v=0.7707074966308841,w=0.5307135816420264,x=4.402152853660554 color=red,shape=circle,flag=1,i=67350,u=0.23513357894063258,v=0.14435263549633578,w=0.5074254222022195,x=5.649303602045116 color=red,shape=triangle,flag=0,i=67383,u=0.730828399674826,v=0.5536174886909421,w=0.5480995744393308,x=5.19404293386826 color=green,shape=triangle,flag=0,i=67422,u=0.20922823103187416,v=0.30157307877967043,w=0.4732996886222535,x=4.9845880382881145 color=orange,shape=triangle,flag=0,i=67439,u=0.21051101433682518,v=0.896949830523208,w=0.5173441626125038,x=5.750977772451585 color=purple,shape=square,flag=0,i=67440,u=0.5793926926771701,v=0.8650714632066344,w=0.5161255494607535,x=6.65752128919885 color=blue,shape=circle,flag=1,i=67441,u=0.6605696382626751,v=0.49837549056668207,w=0.48787465412172504,x=7.605381432451677 color=red,shape=circle,flag=0,i=67460,u=0.8306200504893689,v=0.8796656250473595,w=0.49806694698115805,x=4.85942200136293 color=blue,shape=circle,flag=0,i=67468,u=0.4690602875832268,v=0.08148124959122183,w=0.48559495492927357,x=6.558285993609325 color=purple,shape=triangle,flag=1,i=67474,u=0.5901803154515517,v=0.846276534455526,w=0.5185387785287199,x=4.025614304581798 color=green,shape=triangle,flag=1,i=67492,u=0.49336257960897567,v=0.5862858408368612,w=0.4712553360668919,x=7.396479387845698 color=yellow,shape=circle,flag=1,i=67509,u=0.31573074505134635,v=0.5905395360515501,w=0.5135844980655543,x=5.221156442034755 color=purple,shape=triangle,flag=1,i=67532,u=0.5381553677997888,v=0.40134077017170555,w=0.5195272991285951,x=4.772200480028286 color=red,shape=square,flag=0,i=67540,u=0.14382481823543358,v=0.9460901256723131,w=0.4795216346610163,x=4.202636215954668 color=red,shape=triangle,flag=0,i=67541,u=0.3399283926992025,v=0.16422037044150006,w=0.536592033250578,x=3.9952006024221407 color=yellow,shape=square,flag=1,i=67556,u=0.42773585019214744,v=0.7408199581118642,w=0.49964441827321476,x=2.9838276386594136 color=red,shape=circle,flag=1,i=67561,u=0.26488584324669806,v=0.251126282519104,w=0.4958301992667927,x=6.588361810347281 color=red,shape=square,flag=0,i=67567,u=0.4209195503598534,v=0.8757342586804544,w=0.4645327569839821,x=4.106378452042522 color=green,shape=square,flag=0,i=67578,u=0.8509629782342558,v=0.5515418431137002,w=0.4839825597669376,x=3.3023385684066064 color=red,shape=square,flag=0,i=67590,u=0.09991600873732587,v=0.06384578733863078,w=0.46753788516703854,x=6.174200183451327 color=blue,shape=square,flag=1,i=67599,u=0.30638882765114106,v=0.10763270363327226,w=0.466334631251064,x=6.365675600648949 color=red,shape=triangle,flag=0,i=67604,u=0.4321783466485628,v=0.7014568178708425,w=0.5202357082193139,x=5.907564170935971 color=red,shape=square,flag=1,i=67624,u=0.4971741125411364,v=0.5811608655116559,w=0.45804152815932214,x=3.795977828471798 color=purple,shape=square,flag=0,i=67631,u=0.40722897743097586,v=0.2225330196760652,w=0.5148022004105537,x=4.077167939918903 color=red,shape=triangle,flag=0,i=67638,u=0.29759481172709,v=0.2082338663035449,w=0.5212116469794605,x=3.607383256658986 color=red,shape=circle,flag=1,i=67653,u=0.4530359205476763,v=0.41167029713608355,w=0.47670396666188697,x=5.2140836081200135 color=blue,shape=square,flag=0,i=67654,u=0.5382069084699173,v=0.14028017918246594,w=0.4700836846752964,x=2.8749297767695636 color=red,shape=circle,flag=0,i=67658,u=0.8460038734049266,v=0.9067816101077448,w=0.4760517876452035,x=4.4751149277776685 color=green,shape=triangle,flag=0,i=67661,u=0.19599119968689338,v=0.5384357358321801,w=0.47083636678830354,x=4.81248580971879 color=red,shape=square,flag=0,i=67675,u=0.5802937490466814,v=0.6044216074346045,w=0.46473660164977854,x=4.343324010574871 color=green,shape=triangle,flag=0,i=67688,u=0.19575790908233281,v=0.1380718680284786,w=0.4690077034300179,x=3.515254467587338 color=purple,shape=circle,flag=0,i=67689,u=0.3965317033177346,v=0.6969675855759648,w=0.5220227178286838,x=4.730578059630629 color=blue,shape=circle,flag=1,i=67698,u=0.7121384291276366,v=0.37101303387672635,w=0.4941902231781026,x=4.313664682837074 color=red,shape=triangle,flag=0,i=67723,u=0.06375920134231694,v=0.9164632411989492,w=0.5114568826512258,x=3.6191818358278502 color=red,shape=triangle,flag=1,i=67732,u=0.7955036927070805,v=0.12644458670870573,w=0.5032433890961331,x=6.647243383414671 color=red,shape=square,flag=0,i=67749,u=0.9108788341301611,v=0.7589036131879225,w=0.48346232183731586,x=5.453951638273309 color=blue,shape=circle,flag=1,i=67762,u=0.876557648513366,v=0.010226925181195501,w=0.49994301339533065,x=5.099098137981954 color=red,shape=square,flag=0,i=67778,u=0.9036817450407312,v=0.05657640702145672,w=0.4789658838147387,x=3.1618019754259605 color=red,shape=square,flag=0,i=67784,u=0.7509099093027015,v=0.5060859084930431,w=0.4841160159738699,x=4.391471974875909 color=red,shape=circle,flag=0,i=67785,u=0.1852448089686518,v=0.20935648175645089,w=0.46794039693624667,x=5.7026292714456055 color=orange,shape=triangle,flag=1,i=67792,u=0.6415179629775529,v=0.5370130515499791,w=0.5143329048103801,x=4.912780887917735 color=red,shape=triangle,flag=1,i=67796,u=0.5084882560830951,v=0.3245223154587864,w=0.49987988713491327,x=6.363930854581859 color=red,shape=triangle,flag=0,i=67802,u=0.6658650249803867,v=0.19862058901655777,w=0.5025258524105425,x=5.573042932024308 color=red,shape=triangle,flag=0,i=67804,u=0.9628239390445612,v=0.6914016615516959,w=0.5031805873452655,x=5.590106052947546 color=red,shape=square,flag=0,i=67806,u=0.03536694281345143,v=0.3112831253343247,w=0.4768333680564785,x=5.66150028085485 color=purple,shape=square,flag=0,i=67810,u=0.2928082624097207,v=0.59729366806836,w=0.5226321868942799,x=5.860873755778478 color=red,shape=circle,flag=0,i=67812,u=0.01581220245496673,v=0.04306459825296785,w=0.4739357245399127,x=2.9235751733266184 color=red,shape=square,flag=0,i=67821,u=0.20255535941826142,v=0.7589055563480288,w=0.47381283637295724,x=4.025758277912924 color=red,shape=triangle,flag=1,i=67830,u=0.15996978517117066,v=0.7591008185768334,w=0.5013304496228127,x=3.668401710802236 color=purple,shape=triangle,flag=0,i=67833,u=0.21338053705360005,v=0.2988226037993801,w=0.525778379588284,x=2.753908275383377 color=red,shape=triangle,flag=0,i=67841,u=0.5402158095684065,v=0.988717974750288,w=0.5016253274947949,x=5.497035672106951 color=orange,shape=triangle,flag=0,i=67847,u=0.36746306902109926,v=0.5161574810505635,w=0.5176199566173642,x=3.1748088656576567 color=purple,shape=square,flag=1,i=67852,u=0.19756755342177168,v=0.22278300313958432,w=0.5189691167910176,x=4.540737175404271 color=red,shape=square,flag=1,i=67853,u=0.13981060968839087,v=0.4978146846472551,w=0.4714417044084672,x=5.905401820908257 color=blue,shape=triangle,flag=1,i=67858,u=0.9612285128692593,v=0.9719369118711608,w=0.5227135321362504,x=4.753762935994645 color=blue,shape=square,flag=0,i=67864,u=0.4488411746283215,v=0.06480690186199511,w=0.4736281436258382,x=7.417715122257813 color=red,shape=triangle,flag=1,i=67870,u=0.0021843535603690567,v=0.5569773035323207,w=0.4976561831824928,x=4.041472724328929 color=purple,shape=triangle,flag=0,i=67873,u=0.5084209941651522,v=0.2005164153691117,w=0.5279330216569906,x=6.466293137371827 color=red,shape=square,flag=0,i=67878,u=0.878187436435287,v=0.46967493268125093,w=0.47241377518987776,x=4.900326908951866 color=red,shape=circle,flag=1,i=67894,u=0.16334219308017184,v=0.12827290211140027,w=0.47126629591091806,x=1.801509416788143 color=blue,shape=square,flag=1,i=67905,u=0.3359139042946343,v=0.29566956018031576,w=0.4693802177983527,x=3.219910729164217 color=green,shape=triangle,flag=0,i=67907,u=0.985700789078508,v=0.08881532345550991,w=0.47566567791056025,x=5.239205390291109 color=red,shape=triangle,flag=0,i=67913,u=0.8586410142217982,v=0.44541661998022286,w=0.5093962961678724,x=3.021149536827933 color=red,shape=triangle,flag=1,i=67917,u=0.9621472170623827,v=0.6183930948625491,w=0.5098833626277339,x=3.91824631325485 color=green,shape=circle,flag=0,i=67928,u=0.7185795012258754,v=0.22014963455723136,w=0.5114855523794521,x=6.756013786812303 color=red,shape=triangle,flag=0,i=67934,u=0.30787631344588684,v=0.22235291110968713,w=0.5072790086934953,x=2.7685538757973505 color=purple,shape=square,flag=0,i=67939,u=0.0910612863828183,v=0.2609391334321657,w=0.5188672866521942,x=6.666338514980583 color=purple,shape=circle,flag=0,i=67978,u=0.37561590531696576,v=0.05981056809685281,w=0.5161431107435306,x=4.55727271434604 color=purple,shape=triangle,flag=1,i=67982,u=0.8834419519412534,v=0.5040617053719859,w=0.532397177614643,x=4.944192871491981 color=red,shape=triangle,flag=0,i=67999,u=0.668845012440946,v=0.5611892452180305,w=0.4960641488241489,x=6.972812342221473 color=red,shape=triangle,flag=0,i=68000,u=0.5351149224657745,v=0.8313470284008747,w=0.49222493843884685,x=2.8888772231627655 color=red,shape=triangle,flag=1,i=68039,u=0.0011360340761349397,v=0.4302369371119399,w=0.49208247539912736,x=5.660693105334708 color=red,shape=circle,flag=1,i=68040,u=0.8297892987745266,v=0.8893828196261309,w=0.4795992454274786,x=6.59804591009307 color=blue,shape=circle,flag=0,i=68074,u=0.29864025520426674,v=0.07510692087434934,w=0.5038441805253064,x=3.8249638890030337 color=purple,shape=square,flag=0,i=68078,u=0.49345001551494017,v=0.07708064202491949,w=0.5066459348318622,x=5.340989529605572 color=blue,shape=circle,flag=1,i=68087,u=0.3740715129195079,v=0.4452639041615416,w=0.5047240420749676,x=6.20678425351764 color=blue,shape=square,flag=1,i=68091,u=0.23097613362920377,v=0.5557940853969917,w=0.4823596035342819,x=5.018269566032738 color=blue,shape=triangle,flag=1,i=68092,u=0.7768011035297442,v=0.5188285159700683,w=0.5230796978624578,x=5.575880578520308 color=yellow,shape=square,flag=1,i=68096,u=0.2659370596251577,v=0.9998381827889564,w=0.5220323129615507,x=4.022456641435475 color=green,shape=square,flag=0,i=68100,u=0.2944144191648722,v=0.8086115518520445,w=0.46532901062942533,x=4.197153751310898 color=purple,shape=square,flag=0,i=68109,u=0.6657314724345074,v=0.734073813410269,w=0.5059519178367344,x=6.406887007526845 color=red,shape=triangle,flag=0,i=68112,u=0.7867756158025541,v=0.6517850912042173,w=0.46983712409693407,x=3.8827409286198495 color=purple,shape=square,flag=0,i=68116,u=0.7927915957202445,v=0.3828753928547427,w=0.5096431992867221,x=6.474017858476223 color=green,shape=square,flag=1,i=68128,u=0.34555720729544626,v=0.5763110034334317,w=0.4614497863759154,x=5.727328362215346 color=red,shape=square,flag=0,i=68137,u=0.3063983514022208,v=0.32964409227594793,w=0.4690397819411294,x=6.096477652340938 color=green,shape=triangle,flag=0,i=68147,u=0.7845603405317797,v=0.02278255307330279,w=0.48014102641028333,x=5.565178377345814 color=purple,shape=square,flag=0,i=68151,u=0.764324077200473,v=0.24234318633612628,w=0.5058473015838383,x=5.549263008146947 color=yellow,shape=square,flag=1,i=68175,u=0.3338594528779868,v=0.11380983840700687,w=0.5135074425464116,x=7.048062037617432 color=red,shape=square,flag=0,i=68215,u=0.11332528494316718,v=0.017792348096119737,w=0.47592711342533944,x=5.517748304350454 color=green,shape=circle,flag=0,i=68246,u=0.32523526995278396,v=0.618590891280269,w=0.5064267774034495,x=4.702670779509249 color=green,shape=triangle,flag=0,i=68250,u=0.6199855371372242,v=0.28086165197811996,w=0.48440542914645784,x=4.210631680470752 color=yellow,shape=circle,flag=1,i=68262,u=0.8122626715990472,v=0.15728750646318734,w=0.49521116688420147,x=3.891315182091191 color=red,shape=square,flag=0,i=68268,u=0.40488371668974754,v=0.9350274816315169,w=0.484582442016185,x=5.557011337812445 color=purple,shape=square,flag=0,i=68279,u=0.8976047879003065,v=0.4952902381450467,w=0.49397446304812587,x=3.626636581286695 color=purple,shape=square,flag=0,i=68309,u=0.828135535713927,v=0.5461594658775379,w=0.4981642319899816,x=4.68406157466973 color=red,shape=triangle,flag=0,i=68310,u=0.02111807207745353,v=0.19503944330702794,w=0.47156637512548233,x=5.770927005349891 color=yellow,shape=triangle,flag=1,i=68315,u=0.10695321122262924,v=0.04401472363457726,w=0.47461610610691124,x=3.360348064106988 color=yellow,shape=triangle,flag=0,i=68317,u=0.1977806627227694,v=0.828148191266892,w=0.47914132973267015,x=3.769914478937698 color=green,shape=square,flag=0,i=68326,u=0.697680132484342,v=0.2753223251144453,w=0.47771955259966453,x=5.463519132240379 color=green,shape=circle,flag=0,i=68346,u=0.4161369316736381,v=0.1340738538807631,w=0.5117645990897882,x=6.876227879199813 color=blue,shape=triangle,flag=1,i=68355,u=0.10498752556757207,v=0.2703201968160799,w=0.5295901736415003,x=5.499988012389757 color=yellow,shape=square,flag=1,i=68357,u=0.9280128629061655,v=0.49850725872859847,w=0.526428056071611,x=5.1940408602986805 color=blue,shape=triangle,flag=1,i=68376,u=0.976513344745936,v=0.6585338787651902,w=0.5276956600771103,x=5.511983625834894 color=red,shape=square,flag=0,i=68382,u=0.7286990618924857,v=0.5570649699163673,w=0.5000181574673307,x=5.261649771937158 color=red,shape=square,flag=0,i=68389,u=0.1367802069170596,v=0.7142401863081582,w=0.5054326634850937,x=6.019281377848263 color=red,shape=circle,flag=0,i=68391,u=0.3355353570512608,v=0.2623289813225954,w=0.4744892345478426,x=3.473785303162208 color=green,shape=square,flag=0,i=68402,u=0.473489997589151,v=0.5762125908899266,w=0.47691118135321797,x=3.7804871994873412 color=red,shape=square,flag=0,i=68405,u=0.4652944663682248,v=0.7569681968978113,w=0.5185611498669923,x=3.656014666575231 color=red,shape=triangle,flag=0,i=68412,u=0.05702941272009865,v=0.44537417530679535,w=0.45588765898427475,x=6.567563312055866 color=yellow,shape=triangle,flag=1,i=68448,u=0.18776073140867766,v=0.7494400135054345,w=0.49463791144909613,x=4.388613491412687 color=green,shape=square,flag=0,i=68454,u=0.3781051733102999,v=0.26582164718146906,w=0.46772728930856416,x=5.59125372548202 color=green,shape=triangle,flag=1,i=68472,u=0.6983900098757269,v=0.6289056527563444,w=0.4830460689169057,x=3.144676445630877 color=yellow,shape=square,flag=1,i=68477,u=0.3628377432277585,v=0.06684589775364813,w=0.5183343779431111,x=4.3370769955264015 color=blue,shape=circle,flag=0,i=68492,u=0.9983300113363165,v=0.2542428343376858,w=0.5055328110782875,x=7.5870200820254325 color=yellow,shape=square,flag=1,i=68495,u=0.3529671400524197,v=0.3386075310696972,w=0.5124236052327679,x=3.836611999052964 color=blue,shape=triangle,flag=0,i=68509,u=0.7847102910400018,v=0.14220869349572907,w=0.5213294859665485,x=7.475707723402412 color=red,shape=triangle,flag=1,i=68511,u=0.9926670247732102,v=0.8910383667364378,w=0.4572484265951943,x=4.944826304327351 color=red,shape=square,flag=0,i=68519,u=0.22425852642483557,v=0.3426099466672562,w=0.5175712081835074,x=4.794319278978379 color=purple,shape=triangle,flag=0,i=68532,u=0.5334993732529922,v=0.13945970463701696,w=0.5336182492072351,x=3.4234447882956403 color=purple,shape=square,flag=0,i=68535,u=0.625625295935268,v=0.42532629361317775,w=0.5112185429091727,x=5.9231224388120545 color=red,shape=triangle,flag=0,i=68557,u=0.012928014813329836,v=0.6567404209726571,w=0.4547980982293529,x=2.686645936295603 color=purple,shape=triangle,flag=0,i=68563,u=0.5941850377067739,v=0.3993670492705633,w=0.5291643212180438,x=5.56227143262337 color=red,shape=circle,flag=0,i=68575,u=0.09559948946113006,v=0.10106289976297325,w=0.4718349560848555,x=3.53817067943994 color=red,shape=square,flag=0,i=68577,u=0.8376276345925656,v=0.3582182646212917,w=0.5151496768230458,x=7.2669339256273835 color=purple,shape=triangle,flag=0,i=68592,u=0.28382875564140386,v=0.5856736375729285,w=0.5289983001895936,x=6.894285022208653 color=purple,shape=square,flag=0,i=68597,u=0.40225357655868754,v=0.48207742744425686,w=0.5169124934666831,x=5.512893844372549 color=purple,shape=square,flag=0,i=68600,u=0.22148529017906327,v=0.8019312932109042,w=0.512149900791891,x=4.773464678154914 color=purple,shape=triangle,flag=0,i=68618,u=0.7614489113414785,v=0.9623021645343284,w=0.530167685095895,x=4.281326069788846 color=yellow,shape=triangle,flag=1,i=68623,u=0.2660480443335692,v=0.9222304725006795,w=0.5055172482367397,x=3.22429127314756 color=green,shape=circle,flag=0,i=68628,u=0.7641230740731968,v=0.5353101455582845,w=0.5113588475927884,x=4.846160843285455 color=red,shape=circle,flag=0,i=68668,u=0.9500489980255084,v=0.903446356456837,w=0.4881501907593259,x=3.3727762245931934 color=red,shape=triangle,flag=0,i=68683,u=0.4129642389409839,v=0.3892464671534208,w=0.468213053217685,x=5.447759504443021 color=red,shape=triangle,flag=1,i=68691,u=0.7600315259533497,v=0.3710709264092896,w=0.4646973831384869,x=5.8654463519229125 color=purple,shape=square,flag=0,i=68694,u=0.4030199075011802,v=0.06775246258424994,w=0.5069963278064568,x=5.610068041214974 color=blue,shape=square,flag=1,i=68702,u=0.7617100085931011,v=0.4249382302961203,w=0.4879080101761871,x=5.85245841399487 color=red,shape=triangle,flag=0,i=68710,u=0.6695191385624132,v=0.029246264919047138,w=0.46860213368980347,x=6.92114895242112 color=red,shape=square,flag=0,i=68728,u=0.8414284355674937,v=0.04032436235487513,w=0.5201041997323839,x=5.994154585022702 color=red,shape=square,flag=0,i=68731,u=0.018494278189453595,v=0.04784358651825715,w=0.5215761541362249,x=4.99676035192983 color=red,shape=circle,flag=0,i=68732,u=0.6329163121429047,v=0.6882188392357669,w=0.4823483666282965,x=4.084033058521265 color=red,shape=circle,flag=0,i=68737,u=0.8455809630074161,v=0.8858345858520237,w=0.47899125892467204,x=6.3619154995619285 color=red,shape=triangle,flag=0,i=68738,u=0.1375190930931086,v=0.877978400114902,w=0.4736324759462279,x=4.629438831663366 color=red,shape=square,flag=0,i=68755,u=0.09865805164903618,v=0.684841955415073,w=0.5166274355605394,x=5.963371434324311 color=red,shape=square,flag=0,i=68762,u=0.03263522972817534,v=0.07164894231538299,w=0.5171424337836874,x=4.833766916225087 color=yellow,shape=square,flag=1,i=68763,u=0.5533610297601814,v=0.701555630690594,w=0.5284683441472497,x=4.456958738082069 color=red,shape=triangle,flag=0,i=68766,u=0.8453844923183049,v=0.9319411188207832,w=0.47241453073709627,x=5.486948343923898 color=green,shape=square,flag=0,i=68770,u=0.5426928693992278,v=0.9162649382935716,w=0.47334851689722646,x=4.693403410838484 color=red,shape=triangle,flag=0,i=68779,u=0.4760694653532198,v=0.8030095761192232,w=0.4708036880823985,x=3.9931953989197786 color=red,shape=triangle,flag=1,i=68801,u=0.47723442788338033,v=0.7845935420188765,w=0.46913353509850775,x=6.5273753064857685 color=red,shape=circle,flag=0,i=68802,u=0.4760922812719409,v=0.49672867541833843,w=0.46680574403151737,x=6.915604252345591 color=red,shape=circle,flag=0,i=68805,u=0.13532064437291802,v=0.1615719977197794,w=0.47132291232384516,x=4.331543077612349 color=red,shape=square,flag=0,i=68819,u=0.7666884100197773,v=0.28451320002589364,w=0.5030926298040588,x=3.884116182180667 color=red,shape=triangle,flag=0,i=68820,u=0.38657177398652875,v=0.04894755172925214,w=0.4661726534877161,x=6.596289859578107 color=red,shape=square,flag=0,i=68822,u=0.5215992936741864,v=0.2856326211190313,w=0.5040118302781285,x=4.513434246673131 color=red,shape=triangle,flag=0,i=68835,u=0.6718416603920457,v=0.5216962119664431,w=0.4656868808590736,x=3.9972913459664148 color=yellow,shape=triangle,flag=1,i=68839,u=0.2881586787610234,v=0.5471584288917918,w=0.5081595722550083,x=6.295198888515725 color=red,shape=circle,flag=1,i=68840,u=0.6457236337320433,v=0.7431528875144406,w=0.46919569851031856,x=3.8891074728054034 color=red,shape=circle,flag=0,i=68842,u=0.09775429457503426,v=-0.0020524378823035816,w=0.47040561743747966,x=5.082402046500879 color=red,shape=triangle,flag=0,i=68851,u=0.1559640656902983,v=0.37991863616113775,w=0.46215011721325505,x=6.534293115763405 color=blue,shape=square,flag=0,i=68858,u=0.9092981641584647,v=0.32221595760350197,w=0.47801076838412243,x=5.373613025816827 color=red,shape=square,flag=0,i=68875,u=0.3099047825782869,v=0.2961812629075966,w=0.4855249179478112,x=3.6563096477504264 color=red,shape=circle,flag=0,i=68876,u=0.5177467961448814,v=0.5099872601269796,w=0.4764050653510098,x=5.5642968182624 color=yellow,shape=triangle,flag=1,i=68886,u=0.059726821797589036,v=0.8211672626399925,w=0.5156673338140635,x=6.2609667972142296 color=blue,shape=triangle,flag=0,i=68889,u=0.7134633373824785,v=0.5328742313315238,w=0.533171757183686,x=5.6541624976013125 color=green,shape=square,flag=1,i=68899,u=0.14185245884199305,v=0.09606096864832747,w=0.4800759751576183,x=3.963803606163611 color=green,shape=circle,flag=0,i=68907,u=0.6988260193676281,v=0.5285436197395215,w=0.5139192482516397,x=5.9630840816031885 color=red,shape=triangle,flag=0,i=68920,u=0.5211397634681679,v=0.758986596302163,w=0.4599308397258781,x=5.759341856375319 color=blue,shape=triangle,flag=1,i=68928,u=0.6510425415988589,v=0.9062124772068315,w=0.5282749493615922,x=3.6556157930082187 color=red,shape=circle,flag=1,i=68935,u=0.16677327299138378,v=0.14845197827952564,w=0.4783097208132937,x=3.7897283172667606 color=red,shape=triangle,flag=0,i=68975,u=0.24651780035484205,v=0.12624152516009202,w=0.4603921738184078,x=3.0095879766986826 color=red,shape=circle,flag=0,i=68977,u=0.09275798208673347,v=-0.002090729770024252,w=0.4870519173765326,x=5.151192972929663 color=blue,shape=circle,flag=1,i=68986,u=0.5655322547794535,v=0.9181929232092501,w=0.5283330413631823,x=4.49786172817804 color=green,shape=square,flag=0,i=68995,u=0.8739067295472751,v=0.16005246375419435,w=0.4872252272343391,x=3.4504146635686617 color=blue,shape=square,flag=0,i=69005,u=0.36073384533414266,v=0.4956431868677028,w=0.47917380454138014,x=4.877630842578681 color=red,shape=square,flag=0,i=69017,u=0.918359677682029,v=0.08726651880207492,w=0.48787291174522796,x=5.966882703544101 color=yellow,shape=circle,flag=1,i=69018,u=0.27965547911277056,v=0.1919615473803814,w=0.5144380638672983,x=6.810846662517374 color=green,shape=triangle,flag=1,i=69030,u=0.4986474511576042,v=0.9168035360952317,w=0.477854666893145,x=5.09415802151272 color=red,shape=square,flag=0,i=69046,u=0.02210119598479232,v=0.49061545926465844,w=0.4979407434728175,x=7.190117079808278 color=red,shape=triangle,flag=0,i=69048,u=0.8849816156878877,v=0.46870012123607485,w=0.4587588000824334,x=3.652186861619159 color=yellow,shape=triangle,flag=1,i=69051,u=0.49852385798529597,v=0.7803230047616176,w=0.5077746458439206,x=6.342513016850216 color=red,shape=circle,flag=0,i=69062,u=0.23595652722759153,v=0.21542355900335747,w=0.47953787376412843,x=5.440633616613831 color=red,shape=circle,flag=0,i=69064,u=0.0006711367180041172,v=-0.028023015666464146,w=0.4792649380793085,x=4.915306117440554 color=blue,shape=circle,flag=0,i=69066,u=0.33658755129596907,v=0.740311484519669,w=0.5371168347131089,x=4.17793368628434 color=red,shape=square,flag=0,i=69079,u=0.009779894076680451,v=0.667190141515633,w=0.4969965606017363,x=4.106394373976512 color=red,shape=triangle,flag=0,i=69083,u=0.47143920100465087,v=0.009957568472394929,w=0.4578295742128322,x=5.1971429135054015 color=red,shape=square,flag=0,i=69094,u=0.8061790981177414,v=0.5940705819003267,w=0.4930204202450082,x=4.947868683963813 color=blue,shape=triangle,flag=1,i=69098,u=0.7658001053348079,v=0.33740504420794826,w=0.5195701744262636,x=3.8315334406737143 color=yellow,shape=triangle,flag=1,i=69100,u=0.8799777468862519,v=0.8371877735336805,w=0.5113921544312108,x=5.881891279724761 color=yellow,shape=square,flag=1,i=69105,u=0.44601917373704403,v=0.28511146802981924,w=0.5208687052981408,x=4.848393167658788 color=purple,shape=triangle,flag=0,i=69106,u=0.29250907174717156,v=0.43841986906152064,w=0.5206153305504506,x=4.697284794661885 color=yellow,shape=triangle,flag=1,i=69119,u=0.13556721322971543,v=0.6048614115285981,w=0.5143676948375627,x=6.866589398994655 color=green,shape=square,flag=0,i=69122,u=0.9443317521353046,v=0.561292541128249,w=0.47880422831467084,x=6.095999920301009 color=blue,shape=circle,flag=1,i=69123,u=0.9369334616587377,v=0.7804787229682106,w=0.5365706540074183,x=7.029578083128769 color=purple,shape=triangle,flag=0,i=69126,u=0.497660533107116,v=0.31338072573649467,w=0.528526443516083,x=5.041662044267623 color=red,shape=square,flag=0,i=69143,u=0.6216454368164317,v=0.9608539884963702,w=0.47558845436920966,x=5.2188758653772105 color=red,shape=square,flag=0,i=69151,u=0.059026999948722514,v=0.10658989783039596,w=0.4716319123778163,x=5.067649940319932 color=blue,shape=triangle,flag=1,i=69167,u=0.08946041756959022,v=0.10118704842128567,w=0.5098947310986154,x=6.602260971173923 color=red,shape=circle,flag=0,i=69172,u=0.19509133273781787,v=0.12615932642522254,w=0.45811889322440624,x=4.774104105172287 color=blue,shape=triangle,flag=1,i=69179,u=0.9666694566440466,v=0.5843670667530714,w=0.5171527031821277,x=5.9572296221679615 color=red,shape=triangle,flag=1,i=69193,u=0.20854251977726201,v=0.8308784880530742,w=0.4669532798910778,x=5.334280001786786 color=red,shape=circle,flag=1,i=69198,u=0.7724314656419924,v=0.787612322543885,w=0.44520886502459867,x=6.34225269276731 color=red,shape=square,flag=0,i=69201,u=0.03561220969758283,v=0.8577325406783857,w=0.46524448665285945,x=5.4968567737069405 color=green,shape=circle,flag=0,i=69210,u=0.9827830702738234,v=0.14118427991724614,w=0.5039932043107836,x=6.11286504787189 color=blue,shape=square,flag=1,i=69213,u=0.5955781060646785,v=0.1631643351553299,w=0.4685909978146904,x=4.760338164940683 color=red,shape=square,flag=0,i=69214,u=0.5690609254023578,v=0.7176829571239673,w=0.46706020645301366,x=2.891694325083255 color=yellow,shape=triangle,flag=1,i=69228,u=0.061741592804722356,v=0.6497840944211585,w=0.5133026308117076,x=7.4798569993523865 color=blue,shape=circle,flag=0,i=69232,u=0.12621927057552473,v=0.26918991598572883,w=0.5335349542208438,x=4.60215649639514 color=red,shape=square,flag=0,i=69256,u=0.14394871521246977,v=0.6362466800046659,w=0.4762780678243511,x=3.451643404979985 color=yellow,shape=circle,flag=1,i=69258,u=0.4389388331307189,v=0.6900425260452325,w=0.5200368566408604,x=4.624641979988268 color=red,shape=triangle,flag=0,i=69260,u=0.5453639666555096,v=0.6308363411540232,w=0.4742871013489679,x=3.1105956071546537 color=blue,shape=square,flag=1,i=69284,u=0.5343652945627411,v=0.9260871677546342,w=0.46516820754265464,x=5.668219696078864 color=blue,shape=square,flag=1,i=69296,u=0.48110872673581706,v=0.5279332175280251,w=0.46713160689216376,x=3.374628314274664 color=blue,shape=triangle,flag=1,i=69302,u=0.31972254299951197,v=0.29063653872860684,w=0.5217710009178079,x=4.337592874970713 color=red,shape=square,flag=0,i=69313,u=0.05340157806832513,v=0.4348439989034647,w=0.4655866454606626,x=4.277654257365081 color=green,shape=triangle,flag=0,i=69315,u=0.5206472355245816,v=0.3520437165971796,w=0.47988621348603344,x=6.654344537657977 color=red,shape=square,flag=0,i=69329,u=0.07507013297557164,v=0.6538902796344467,w=0.4721540921348289,x=3.6604057939688293 color=red,shape=square,flag=0,i=69332,u=0.7697384633757886,v=0.4386267313320903,w=0.4712385338887111,x=3.6483381219756663 color=red,shape=circle,flag=0,i=69366,u=0.6072325796803902,v=0.6755849284472571,w=0.4387174181398574,x=6.353089622811791 color=red,shape=square,flag=1,i=69412,u=0.5623192542324812,v=0.8704045787594452,w=0.45218856436499505,x=3.968587094464315 color=yellow,shape=square,flag=1,i=69413,u=0.0818768857778348,v=0.0783936436757765,w=0.5076317502611338,x=5.058755790405443 color=red,shape=triangle,flag=0,i=69416,u=0.9819644201614285,v=0.636219170186856,w=0.4648596943425631,x=7.196424086256478 color=blue,shape=square,flag=0,i=69419,u=0.9283113482754644,v=0.4296763566281766,w=0.46194099896555124,x=5.202635143009017 color=red,shape=triangle,flag=0,i=69428,u=0.7956929045480968,v=0.7186188935075404,w=0.4674840488859866,x=4.914124758937222 color=red,shape=triangle,flag=0,i=69431,u=0.04800803049191993,v=0.47933790870604664,w=0.4635665650276448,x=5.80115161916817 color=purple,shape=triangle,flag=0,i=69439,u=0.4215032142713818,v=0.46272749061099705,w=0.522616227385514,x=7.119606450879161 color=red,shape=square,flag=0,i=69442,u=0.4497046319214262,v=0.840045763940314,w=0.4601046413833293,x=5.782061700594266 color=red,shape=square,flag=0,i=69448,u=0.8818526170729677,v=0.8322831311637614,w=0.4650497483764701,x=5.129504075985016 color=yellow,shape=square,flag=1,i=69454,u=0.8107763871550109,v=0.22561331651499195,w=0.5068366868692024,x=6.123542071306427 color=red,shape=circle,flag=0,i=69455,u=0.2911472217638337,v=0.3720351095560285,w=0.44890421610307735,x=4.4002387825964115 color=red,shape=triangle,flag=1,i=69456,u=0.4879913670796475,v=0.44554244347317673,w=0.4646245722914073,x=3.347448849989378 color=green,shape=square,flag=0,i=69458,u=0.7688657288100241,v=0.70965545241211,w=0.48054538042736333,x=4.218731339655735 color=green,shape=triangle,flag=0,i=69460,u=0.4122953819481596,v=0.5499824840751137,w=0.48516194823676473,x=2.958900291199454 color=purple,shape=square,flag=0,i=69462,u=0.600959810942846,v=0.5151284060595234,w=0.49258804502782116,x=3.836709058566605 color=purple,shape=square,flag=0,i=69478,u=0.929933974629326,v=0.03924294555892005,w=0.49158330662423105,x=6.305247351543206 color=red,shape=circle,flag=1,i=69486,u=0.7545810062790629,v=0.687411113750077,w=0.46133075223650144,x=5.276050293313197 color=orange,shape=circle,flag=1,i=69496,u=0.4324817003273569,v=0.3302611903833793,w=0.49890359164150405,x=6.118703989480785 color=red,shape=circle,flag=0,i=69501,u=0.814136224158346,v=0.850993325245652,w=0.45705196223466754,x=5.611084068493458 color=purple,shape=circle,flag=0,i=69512,u=0.1824866577759634,v=0.6508141587171782,w=0.5219347899099144,x=4.6298025328496735 color=blue,shape=square,flag=1,i=69544,u=0.3797186966689098,v=0.039858283310917564,w=0.4715666563949616,x=5.065767594788532 color=green,shape=square,flag=0,i=69553,u=0.24715997169611548,v=0.21161724515668323,w=0.4956862540070395,x=3.042423353646378 color=red,shape=triangle,flag=0,i=69554,u=0.8096588006268209,v=0.17796429849044226,w=0.4608969613607288,x=6.937385364429591 color=red,shape=circle,flag=0,i=69568,u=0.4990551540742264,v=0.5400396781251594,w=0.460149996409612,x=4.081343840360213 color=green,shape=square,flag=0,i=69578,u=0.7025718140001154,v=0.7889187578526875,w=0.4959657697515365,x=4.276896945716246 color=green,shape=square,flag=0,i=69583,u=0.5820130837551444,v=0.5515958146829859,w=0.49273129965879453,x=4.777282784027128 color=yellow,shape=triangle,flag=1,i=69605,u=0.6634226080943237,v=0.8253328918913303,w=0.5133258801154447,x=4.043723899620055 color=red,shape=triangle,flag=1,i=69637,u=0.5336968281506377,v=0.012718468676372607,w=0.47182098400103717,x=6.976448912843615 color=red,shape=triangle,flag=0,i=69639,u=0.3037688393349792,v=0.5707837057672708,w=0.47077687932071144,x=4.867738581652589 color=yellow,shape=square,flag=0,i=69652,u=0.4301534938159117,v=0.8774600177616122,w=0.4894989946219708,x=5.3226443514652555 color=blue,shape=triangle,flag=0,i=69659,u=0.8847081101733607,v=0.6606333927684054,w=0.5214476059473266,x=4.899736806234068 color=yellow,shape=square,flag=1,i=69661,u=0.5120017554584522,v=0.8935109639421571,w=0.4895631453745595,x=6.017421579470294 color=red,shape=circle,flag=1,i=69666,u=0.8973184372570012,v=0.874232933124548,w=0.45269896016310357,x=7.129393621203346 color=red,shape=square,flag=1,i=69667,u=0.6053184172889774,v=0.018361475148605866,w=0.47903939198546974,x=5.424039450162838 color=purple,shape=square,flag=0,i=69672,u=0.5672166069534896,v=0.34128344720370807,w=0.4908837690414435,x=6.359669182038199 color=purple,shape=square,flag=0,i=69684,u=0.18634132483074772,v=0.034616561508754584,w=0.49519749645430744,x=5.39285393218865 color=green,shape=square,flag=0,i=69703,u=0.3722992670621068,v=0.8142035946389312,w=0.48472094597820187,x=5.437069110693275 color=yellow,shape=square,flag=1,i=69713,u=0.4607518717752783,v=0.32231468596367274,w=0.4876113609152386,x=6.600285415903593 color=blue,shape=triangle,flag=1,i=69721,u=0.031817234745955325,v=0.49563236737951144,w=0.5191382681514833,x=5.102323737786801 color=yellow,shape=circle,flag=1,i=69740,u=0.19839657429917068,v=0.507399125690283,w=0.513004341377871,x=7.854744461260047 color=red,shape=circle,flag=0,i=69745,u=0.43321093254383936,v=0.4312311951841651,w=0.4601522763939675,x=5.870681050340848 color=red,shape=square,flag=0,i=69747,u=0.0033969810194677263,v=0.5576734202441213,w=0.46397392912819146,x=5.770210263730799 color=green,shape=circle,flag=0,i=69749,u=0.31195228332924463,v=0.34438639680563776,w=0.4988872194566121,x=4.228275571750981 color=blue,shape=square,flag=1,i=69754,u=0.23803534959272155,v=0.15635083726405385,w=0.4697949892497802,x=4.344280979409066 color=green,shape=square,flag=0,i=69755,u=0.05824898236792997,v=0.9901745564521951,w=0.4881026272243993,x=5.0841145684671725 color=red,shape=triangle,flag=0,i=69785,u=0.3277309937956212,v=0.06608620839396484,w=0.47684260238886017,x=4.589788918537699 color=green,shape=triangle,flag=0,i=69798,u=0.374622463516212,v=0.3759650945485026,w=0.48362435956581207,x=7.110279668730697 color=green,shape=triangle,flag=0,i=69799,u=0.6000201934150515,v=0.47634380979460755,w=0.4831529789309448,x=5.781075180579241 color=green,shape=triangle,flag=0,i=69804,u=0.6158281209636258,v=0.4699339650007536,w=0.482701088608407,x=3.005270129700188 color=red,shape=circle,flag=1,i=69811,u=0.5057174357673917,v=0.46014759488014645,w=0.45305185144573756,x=3.7692174686807345 color=orange,shape=square,flag=1,i=69812,u=0.12979313628882894,v=0.7127822716567956,w=0.4847977963945583,x=3.6479664203071045 color=red,shape=triangle,flag=0,i=69817,u=0.5945656363704701,v=0.9052596395874356,w=0.47386286060674215,x=5.927743882138195 color=green,shape=square,flag=0,i=69821,u=0.43226427321527605,v=0.0014318954638008474,w=0.483275331621697,x=5.660463244762102 color=red,shape=triangle,flag=0,i=69844,u=0.2322371463987839,v=0.25770388203203676,w=0.4772984088650054,x=4.76850930905141 color=green,shape=circle,flag=0,i=69864,u=0.7068180962371635,v=0.023451719540563243,w=0.5018411850443318,x=4.302412074156987 color=red,shape=square,flag=0,i=69875,u=0.5613761706070518,v=0.25279499318800525,w=0.46091061410189244,x=5.352226872612641 color=red,shape=circle,flag=1,i=69876,u=0.1952785512717301,v=0.2271607997456859,w=0.4489002707282888,x=5.421188669537877 color=red,shape=triangle,flag=1,i=69877,u=0.09616285653948198,v=0.8264679058634747,w=0.47727404777677523,x=6.620045357133544 color=green,shape=triangle,flag=0,i=69884,u=0.12616019698851932,v=0.904472633940801,w=0.48978609245475213,x=6.148228490515784 color=yellow,shape=square,flag=1,i=69892,u=0.24676035617307335,v=0.9408061148806862,w=0.512305181239476,x=4.9462372411489195 color=red,shape=triangle,flag=1,i=69902,u=0.439815272440947,v=0.4344324065428421,w=0.4808735240717272,x=6.213799559430444 color=yellow,shape=triangle,flag=1,i=69904,u=0.001300228762057487,v=0.2062778463807362,w=0.501407681655131,x=5.9095345942475825 color=blue,shape=circle,flag=0,i=69914,u=0.41971724674041433,v=0.9319054335523033,w=0.539462070053501,x=1.4173071784250093 color=red,shape=triangle,flag=0,i=69921,u=0.009361452526190361,v=0.5965779108821103,w=0.4715481439171798,x=5.519374819655067 color=blue,shape=triangle,flag=0,i=69934,u=0.6406480887508884,v=0.7546962668518489,w=0.5188758604918126,x=5.537662801543306 color=purple,shape=square,flag=0,i=69935,u=0.37988121844067013,v=0.02226646406720656,w=0.5156318560807699,x=5.668811695920972 color=blue,shape=square,flag=0,i=69949,u=0.030086538972189047,v=0.8118791094991538,w=0.46483096089673476,x=5.3567945011725016 color=red,shape=square,flag=0,i=69955,u=0.7036638631883033,v=0.004856929691393064,w=0.47633000604326803,x=5.626071953618396 color=purple,shape=square,flag=0,i=69988,u=0.2489015509955531,v=0.7568490872846169,w=0.5152912436488364,x=3.8566493738130236 color=red,shape=triangle,flag=0,i=70009,u=0.28843229951710103,v=0.7482334016767954,w=0.47653705075616476,x=3.94562059219324 color=blue,shape=triangle,flag=1,i=70015,u=0.7935828014602364,v=0.14693530926332676,w=0.5208818692545475,x=6.844514711530233 color=red,shape=triangle,flag=0,i=70039,u=0.33896859896208564,v=0.8144008393004512,w=0.47027353090421314,x=5.704509784389781 color=yellow,shape=triangle,flag=1,i=70057,u=0.41801286289636086,v=0.8713945317636304,w=0.5060218053756067,x=5.071653188434744 color=red,shape=triangle,flag=0,i=70063,u=0.27281585129215047,v=0.48073229906370984,w=0.47820529927426686,x=6.368837215359647 color=red,shape=circle,flag=1,i=70094,u=0.1296067149114526,v=0.2184913050919094,w=0.46907437185940687,x=6.0027119639172675 color=green,shape=square,flag=0,i=70097,u=0.3991884279483219,v=0.09112729509684525,w=0.4861274627904305,x=3.276707368273465 color=orange,shape=triangle,flag=0,i=70098,u=0.593285937191172,v=0.26421878516356845,w=0.5142195589656878,x=4.763758558738041 color=red,shape=square,flag=0,i=70131,u=0.8306451360531165,v=0.8641131731876416,w=0.4828972580357625,x=4.1764711471015 color=red,shape=triangle,flag=1,i=70132,u=0.3293301917344511,v=0.8639722133495149,w=0.48497071739703485,x=4.284756967994485 color=green,shape=triangle,flag=1,i=70167,u=0.0819418848539123,v=0.6668598059481504,w=0.4827603698364912,x=4.585792560353115 color=purple,shape=square,flag=0,i=70176,u=0.19979467952627794,v=0.9532631395456415,w=0.5236857005770857,x=4.779891558246537 color=green,shape=square,flag=0,i=70186,u=0.4971397223115398,v=0.7385307093498256,w=0.4904671941431531,x=6.091184888625186 color=red,shape=circle,flag=0,i=70232,u=0.47895903350709546,v=0.39915190865134625,w=0.46789761839139826,x=6.771695313720123 color=green,shape=circle,flag=0,i=70251,u=0.6122582536527329,v=0.08002207871938238,w=0.5202345069695744,x=4.086525989111807 color=red,shape=square,flag=0,i=70260,u=0.3383749796723805,v=0.3875133560367806,w=0.48900758357219504,x=5.529894776399036 color=blue,shape=square,flag=1,i=70261,u=0.5447251539404915,v=0.006059722228251241,w=0.47619769719724026,x=4.7661166405307815 color=red,shape=circle,flag=0,i=70263,u=0.7067346048622455,v=0.76716389704191,w=0.47003603675883254,x=2.7439544178395807 color=purple,shape=square,flag=1,i=70295,u=0.42838822900129525,v=0.62129010244363,w=0.5133571731134445,x=5.042874484503295 color=red,shape=circle,flag=0,i=70303,u=0.32679568006347026,v=0.4111216034890369,w=0.4653032513646058,x=6.115243255368423 color=red,shape=circle,flag=0,i=70304,u=0.9303422661422813,v=0.9584328358505106,w=0.46607141033196303,x=3.972684739317477 color=blue,shape=triangle,flag=0,i=70311,u=0.20741575838026827,v=0.76092037729762,w=0.5147986841875498,x=1.999197376053828 color=yellow,shape=circle,flag=1,i=70336,u=0.48445619111842453,v=0.3534518509560315,w=0.5015195472835544,x=4.922891134981402 color=red,shape=triangle,flag=0,i=70341,u=0.1041219723795922,v=0.5529578253060873,w=0.5026036179374485,x=5.9670715419675995 color=purple,shape=circle,flag=0,i=70348,u=0.9533892200777749,v=0.5735542815099814,w=0.5132094122283021,x=4.04531075756608 color=red,shape=triangle,flag=1,i=70350,u=0.8621549950984946,v=0.5621723342380833,w=0.49767486640132536,x=5.468406224600032 color=yellow,shape=triangle,flag=0,i=70356,u=0.0662145268661527,v=0.2543285042303731,w=0.5088129366861065,x=3.0142929374027205 color=green,shape=circle,flag=0,i=70369,u=0.20387644657041237,v=0.6327726229440156,w=0.5125926949365995,x=3.3309441046898147 color=red,shape=circle,flag=1,i=70403,u=0.03182564851492309,v=0.028769986756787456,w=0.4693275542989095,x=5.838711779702892 color=red,shape=circle,flag=0,i=70411,u=0.33124006750192214,v=0.2912219753575103,w=0.4635522256612755,x=3.04588452244588 color=purple,shape=square,flag=0,i=70428,u=0.17126363186301197,v=0.08294783428384,w=0.5077358977400327,x=4.604046489623582 color=yellow,shape=circle,flag=1,i=70455,u=0.6033446013550903,v=0.00221064395135695,w=0.4946696074733959,x=4.257804042412244 color=green,shape=triangle,flag=1,i=70468,u=0.08653907563957397,v=0.45754942090935835,w=0.4907660603322923,x=5.895955143582559 color=purple,shape=square,flag=0,i=70477,u=0.5839492033679627,v=0.8006458535536909,w=0.505755772205924,x=2.0853164777551614 color=yellow,shape=circle,flag=1,i=70486,u=0.20930617141526897,v=0.9979282889331919,w=0.49251319852125297,x=5.974648419959032 color=orange,shape=circle,flag=0,i=70504,u=0.48203830513556145,v=0.4497923540027192,w=0.49351750880563383,x=6.299390594748737 color=blue,shape=triangle,flag=1,i=70518,u=0.7776150866441245,v=0.11462301412408815,w=0.510077369386084,x=5.823944795901187 color=green,shape=square,flag=0,i=70519,u=0.168119656393256,v=0.5464456733619076,w=0.4809871498689162,x=5.645304580573757 color=red,shape=circle,flag=0,i=70527,u=0.652017001976078,v=0.614572626533121,w=0.45870958286741786,x=7.191618056214211 color=red,shape=square,flag=0,i=70529,u=0.17915768564879686,v=0.8368672884112376,w=0.5140331125492308,x=4.00728776976045 color=red,shape=triangle,flag=0,i=70534,u=0.8856658330982353,v=0.9691902080376713,w=0.4933038353541619,x=5.141974357872562 color=red,shape=triangle,flag=0,i=70552,u=0.13466344997959467,v=0.573630591842171,w=0.4881475642559347,x=3.2997965676447585 color=yellow,shape=square,flag=1,i=70571,u=0.6525197973673978,v=0.11164725299706191,w=0.5241287377042846,x=5.453063892632254 color=blue,shape=square,flag=0,i=70580,u=0.5209500611919252,v=0.8228809232278712,w=0.4740510499860352,x=4.2592361588703715 color=orange,shape=triangle,flag=1,i=70590,u=0.9758951524172744,v=0.13471085808299466,w=0.5173572634512178,x=4.129788272993497 color=red,shape=square,flag=1,i=70592,u=0.1263826954539895,v=0.9121154325973673,w=0.5019476697261506,x=6.072645811123195 color=red,shape=square,flag=0,i=70600,u=0.272471240348379,v=0.06896728422519727,w=0.5021769921302964,x=5.363789196287403 color=yellow,shape=triangle,flag=1,i=70615,u=0.19448918766599577,v=0.852752464976683,w=0.512915654884222,x=4.479304566211807 color=red,shape=square,flag=0,i=70627,u=0.5922362650531797,v=0.8849134363022688,w=0.48843486696991395,x=4.374758184062623 color=red,shape=triangle,flag=0,i=70661,u=0.38645245884150203,v=0.5350792753664514,w=0.5043933884170217,x=3.6813867291217917 color=green,shape=circle,flag=0,i=70663,u=0.9637119134420807,v=0.07596584200522494,w=0.507878171481228,x=7.065760953566021 color=red,shape=triangle,flag=0,i=70668,u=0.7834936808687326,v=0.5354067928816593,w=0.5002757718302819,x=6.64699312169981 color=purple,shape=circle,flag=0,i=70685,u=0.9752229353208299,v=0.1172947502198527,w=0.5077550243168627,x=4.303853168755417 color=purple,shape=circle,flag=0,i=70686,u=0.9888929892441335,v=0.9093725419603532,w=0.5091764498920349,x=5.080118069872132 color=red,shape=square,flag=0,i=70701,u=0.6381806910428824,v=0.8878900167147529,w=0.4965457374097267,x=3.2949925288207944 color=yellow,shape=triangle,flag=1,i=70704,u=0.6344849434194559,v=0.88495382846792,w=0.5169531941801474,x=4.483002793256385 color=green,shape=square,flag=0,i=70711,u=0.005480654895213211,v=0.8859303606376187,w=0.47756214670387553,x=4.01707495631635 color=blue,shape=square,flag=1,i=70718,u=0.7707453343279551,v=0.5643959084148585,w=0.4782643241798857,x=3.506250532270767 color=blue,shape=triangle,flag=0,i=70728,u=0.0490645206064928,v=0.45753599756783525,w=0.5141268105464349,x=6.941075095521338 color=purple,shape=square,flag=1,i=70731,u=0.5947653198164036,v=0.38445254549263574,w=0.4973185925952695,x=5.578662278010982 color=red,shape=triangle,flag=0,i=70734,u=0.19216432881525625,v=0.6919344256312707,w=0.4825020763385382,x=6.203885172513126 color=green,shape=square,flag=0,i=70748,u=0.2998349014437194,v=0.21479349504408973,w=0.4841252994353549,x=4.5404686282445725 color=red,shape=triangle,flag=0,i=70803,u=0.8392295956288878,v=0.9228427735197161,w=0.4904440254114455,x=5.105089064015293 color=green,shape=square,flag=0,i=70840,u=0.40006744398227756,v=0.9863947346163966,w=0.48858903710951673,x=4.510495843068351 color=red,shape=circle,flag=0,i=70854,u=0.38585784040946114,v=0.33941861552106123,w=0.4846306247585242,x=5.451864875397825 color=red,shape=square,flag=0,i=70859,u=0.9526994745048071,v=0.8489559983029092,w=0.4960922865567807,x=8.105752133535562 color=blue,shape=square,flag=1,i=70874,u=0.4311124668263351,v=0.3813025627528992,w=0.4781675777416238,x=5.925720080536299 color=blue,shape=triangle,flag=1,i=70880,u=0.212067960630421,v=0.20862234586039796,w=0.5159491333582178,x=5.534971467658803 color=red,shape=square,flag=0,i=70919,u=0.917761359583518,v=0.8682283083400067,w=0.4930497104666478,x=5.306099779499687 color=red,shape=square,flag=0,i=70920,u=0.09432017633032219,v=0.7415889035116207,w=0.49749113047635013,x=6.095547437484139 color=red,shape=square,flag=0,i=70945,u=0.3133108518977532,v=0.16079027748763086,w=0.500809226062123,x=3.5863753965994687 color=yellow,shape=triangle,flag=1,i=70959,u=0.0844080476194049,v=0.46772079614029494,w=0.510431133361715,x=5.376911557705742 color=yellow,shape=square,flag=1,i=70965,u=0.7572031924626978,v=0.8975815145478762,w=0.5044263990081977,x=4.331032130215704 color=red,shape=circle,flag=1,i=70970,u=0.7228914007596593,v=0.6429867373588052,w=0.4918742571405869,x=5.135408581262435 color=yellow,shape=circle,flag=1,i=70971,u=0.7008333595577442,v=0.9034965819535411,w=0.48955681376101967,x=4.219392523099354 color=red,shape=triangle,flag=0,i=70982,u=0.6564111716387253,v=0.11820024512269911,w=0.5185515548109318,x=6.891113452683467 color=red,shape=triangle,flag=0,i=70983,u=0.27808617333759267,v=0.07019584882321916,w=0.5225251830367279,x=8.837199304537544 color=red,shape=triangle,flag=1,i=70985,u=0.554197772278591,v=0.24248276297537252,w=0.5229372476924858,x=3.65199432488946 color=green,shape=circle,flag=0,i=70997,u=0.4541604304107233,v=0.2544407155523085,w=0.501436241890304,x=4.251751089374899 color=red,shape=circle,flag=1,i=71002,u=0.7310895368358641,v=0.6505678701396869,w=0.49217738854506776,x=4.75881509902728 color=red,shape=triangle,flag=0,i=71036,u=0.0263654235852141,v=0.8670942263538283,w=0.5173158038483301,x=5.582179561294879 color=red,shape=square,flag=0,i=71063,u=0.8233904920898184,v=0.8451845888402929,w=0.511007645071146,x=4.786434247754553 color=purple,shape=square,flag=0,i=71066,u=0.04139987240245935,v=0.062285631080705506,w=0.5045779143946145,x=5.808353661483579 color=orange,shape=square,flag=1,i=71074,u=0.8373589926703098,v=0.9379896142048211,w=0.47640820426142855,x=5.416088565132912 color=purple,shape=square,flag=0,i=71084,u=0.310751665508779,v=0.8768157856376457,w=0.5035380732114612,x=4.449333456387371 color=red,shape=square,flag=0,i=71087,u=0.30028045601841435,v=0.07326624509987845,w=0.51216015275223,x=5.782301182546941 color=yellow,shape=circle,flag=1,i=71100,u=0.8372038262903813,v=0.32135652221320476,w=0.49853515045954155,x=4.570883766883914 color=blue,shape=triangle,flag=0,i=71109,u=0.1411198080414786,v=0.6638382943305755,w=0.5327407255348998,x=5.18046003906776 color=red,shape=circle,flag=1,i=71126,u=0.7093571896426425,v=0.7079911155325735,w=0.49506425807567117,x=3.3098143694382736 color=yellow,shape=triangle,flag=1,i=71134,u=0.020145156942520615,v=0.8435478218136347,w=0.5106292411364343,x=4.259359304067164 color=purple,shape=triangle,flag=0,i=71137,u=0.07216171507084501,v=0.23208291925432978,w=0.5100320903797786,x=3.7598722639010176 color=red,shape=triangle,flag=1,i=71157,u=0.5758899677096482,v=0.5015242625760362,w=0.5207043996909565,x=3.1224246575456736 color=orange,shape=circle,flag=1,i=71171,u=0.6891402552181615,v=0.7507976766308857,w=0.5019472903995487,x=6.739718325051122 color=blue,shape=triangle,flag=0,i=71201,u=0.2741682056554611,v=0.4189701374788116,w=0.5275020503876324,x=5.663557221579059 color=green,shape=triangle,flag=0,i=71215,u=0.23320675219678966,v=0.8984783250081758,w=0.48864901685596684,x=4.57692580627106 color=blue,shape=square,flag=1,i=71218,u=0.3993454233714371,v=0.9571137353867507,w=0.47159435854702575,x=4.498779214203264 color=green,shape=circle,flag=0,i=71220,u=0.2757167605009151,v=0.8060906079363401,w=0.5169697994869984,x=6.852895808486612 color=red,shape=square,flag=1,i=71221,u=0.6430833014171399,v=0.6166573551009144,w=0.5004471291931618,x=5.275548737828118 color=red,shape=square,flag=0,i=71230,u=0.5505925178382273,v=0.9166918276578473,w=0.5059269880863613,x=7.509809000162676 color=red,shape=square,flag=1,i=71234,u=0.7218731064538846,v=0.6085165243254672,w=0.5107792636884733,x=4.909437537650276 color=purple,shape=triangle,flag=0,i=71266,u=0.46190404038050525,v=0.8892003311103399,w=0.5050063343741922,x=6.478574583620347 color=red,shape=square,flag=0,i=71279,u=0.9780796011793812,v=0.6059043104911305,w=0.4972084348381971,x=3.950570089273197 color=red,shape=square,flag=1,i=71296,u=0.3236362297804214,v=0.6745134084402382,w=0.4938888566051915,x=5.220429436387733 color=red,shape=square,flag=0,i=71301,u=0.10660180457004442,v=0.10312934597510115,w=0.49287967626033585,x=7.255280620760256 color=red,shape=triangle,flag=0,i=71313,u=0.5268453551868513,v=0.9611181643318456,w=0.5096349889063778,x=6.3642451967423215 color=blue,shape=triangle,flag=1,i=71330,u=0.8299366082877903,v=0.644388555112061,w=0.5192826663634306,x=3.2149017574920826 color=green,shape=circle,flag=0,i=71333,u=0.8233175050582501,v=0.10763797155481425,w=0.5184707403861915,x=4.429975773149633 color=red,shape=triangle,flag=0,i=71340,u=0.9320005723838692,v=0.44942146416850826,w=0.5155016616972926,x=3.1184412296992092 color=red,shape=triangle,flag=0,i=71346,u=0.8689610609302297,v=0.6765405455778964,w=0.514257567398497,x=4.058370923593006 color=blue,shape=triangle,flag=1,i=71361,u=0.6196637241523173,v=0.8015276929259406,w=0.5218314134132265,x=4.196263817751366 color=green,shape=square,flag=0,i=71366,u=0.9170324603559099,v=0.177699050649888,w=0.4867621234124314,x=3.787773639082021 color=red,shape=triangle,flag=0,i=71383,u=0.7919838469118691,v=0.9687928786502585,w=0.5102282071086157,x=4.963606376558527 color=green,shape=triangle,flag=0,i=71385,u=0.1863187436504804,v=0.3178395860928517,w=0.4864498006323157,x=7.583730889603243 color=blue,shape=circle,flag=0,i=71392,u=0.1428204439223032,v=0.46983737704317063,w=0.5388015187614065,x=5.023501082149909 color=red,shape=triangle,flag=0,i=71449,u=0.5530582494609316,v=0.22172232832478544,w=0.49957596679343397,x=5.599091116840739 color=green,shape=circle,flag=1,i=71457,u=0.43185645822537644,v=0.7968473841625647,w=0.5217128117637824,x=7.403662159537441 color=green,shape=triangle,flag=1,i=71476,u=0.2022190630498869,v=0.9755253595358716,w=0.48357427302557315,x=3.4821548170583756 color=yellow,shape=circle,flag=1,i=71489,u=0.9881034556938793,v=0.5616270495991024,w=0.49044363914657274,x=3.8128983452043035 color=purple,shape=circle,flag=0,i=71498,u=0.7679821242660411,v=0.8152066742702209,w=0.5104977752499912,x=5.701381658002021 color=red,shape=square,flag=0,i=71499,u=0.04962945954542297,v=0.7299398492852339,w=0.4668075735150984,x=3.4814335795937854 color=purple,shape=square,flag=0,i=71506,u=0.8386424793796523,v=0.9236910415654715,w=0.5263082570190778,x=5.604548786381753 color=green,shape=circle,flag=0,i=71511,u=0.8064356399481699,v=0.7021744499068829,w=0.5188749306872492,x=7.240904866750598 color=red,shape=square,flag=0,i=71512,u=0.15331491138861308,v=0.8505257936580274,w=0.4711092523930207,x=2.419359398792088 color=red,shape=square,flag=0,i=71528,u=0.6922829507132523,v=0.5086177138590715,w=0.482944535671648,x=6.1559378909445535 color=yellow,shape=square,flag=1,i=71548,u=0.940719964852526,v=0.6295413636428192,w=0.49496119923234727,x=5.73876217201141 color=red,shape=triangle,flag=0,i=71567,u=0.5226875272697896,v=0.5827838948281352,w=0.5152651615973485,x=5.126944984749388 color=orange,shape=square,flag=0,i=71578,u=0.9335953962173617,v=0.66503079510125,w=0.47753733174647284,x=6.193645367817166 color=blue,shape=square,flag=0,i=71589,u=0.587769405258297,v=0.8497084677665449,w=0.4963179808585544,x=6.607461916149375 color=red,shape=triangle,flag=1,i=71606,u=0.4060308985813511,v=0.7775430574839062,w=0.5075407093860688,x=6.833540513006433 color=blue,shape=square,flag=0,i=71632,u=0.6757367669495898,v=0.5392996320464976,w=0.4887572518391169,x=1.9198711349114832 color=blue,shape=triangle,flag=1,i=71639,u=0.610195874368423,v=0.16288612282955583,w=0.5190577031928474,x=6.114142291503789 color=red,shape=square,flag=0,i=71641,u=0.8589127057101466,v=0.20064877545151616,w=0.47726152202212846,x=7.234955631658913 color=red,shape=square,flag=0,i=71648,u=0.014145755254664771,v=0.9417633530987584,w=0.4772538761479938,x=4.734938536817874 color=yellow,shape=square,flag=1,i=71653,u=0.10238970486386823,v=0.6390895175804414,w=0.49193716035761287,x=4.843939192153916 color=green,shape=triangle,flag=0,i=71662,u=0.18327844889231804,v=0.4880799960054719,w=0.4857896640073938,x=5.99201830399105 color=blue,shape=square,flag=1,i=71665,u=0.5373406457990239,v=0.031913816252884586,w=0.4846862806613487,x=4.157751099019811 color=yellow,shape=square,flag=1,i=71685,u=0.9793687191958267,v=0.8231684840599436,w=0.4949038181410422,x=6.247143284408513 color=red,shape=square,flag=0,i=71687,u=0.5156429750858571,v=0.6001203735483422,w=0.4775755197336394,x=5.285976241067357 color=red,shape=square,flag=1,i=71699,u=0.6235239252554838,v=0.4189129850032297,w=0.47199685043654604,x=5.703255919608537 color=red,shape=circle,flag=1,i=71711,u=0.1782360713583011,v=0.27275767537164464,w=0.49995083748570746,x=4.294306617517748 color=red,shape=square,flag=0,i=71728,u=0.4934993917270485,v=0.5676711987087899,w=0.4508498747536485,x=4.568989818294916 color=red,shape=circle,flag=0,i=71739,u=0.45667845729016887,v=0.5195300112144212,w=0.5056454127164266,x=5.594830610757504 color=red,shape=square,flag=1,i=71790,u=0.7683512090579981,v=0.89460269386649,w=0.4497939291187564,x=3.159151176112882 color=blue,shape=square,flag=1,i=71802,u=0.8054901780082733,v=0.3897818045035222,w=0.48371695078730015,x=2.5967492896958597 color=red,shape=triangle,flag=0,i=71805,u=0.28529624548208654,v=0.26904677668238575,w=0.48197812563278014,x=5.1884477210654785 color=green,shape=triangle,flag=0,i=71808,u=0.1869638887973949,v=0.7178631837936446,w=0.49133362574055983,x=6.068233654841454 color=yellow,shape=square,flag=1,i=71816,u=0.6206981133539567,v=0.5527365406867808,w=0.5034970903979047,x=5.813109070294089 color=red,shape=triangle,flag=1,i=71831,u=0.2736670291180907,v=0.06591346589091218,w=0.4774885385533246,x=4.469274780966335 color=red,shape=circle,flag=0,i=71850,u=0.8971616950778091,v=0.9501536173703798,w=0.5027446233514858,x=6.294623587875706 color=purple,shape=triangle,flag=0,i=71856,u=0.6088960910019354,v=0.10605433326238001,w=0.5074756973107567,x=4.078096858672714 color=purple,shape=square,flag=1,i=71884,u=0.581291270259683,v=0.3192580058949176,w=0.5165459622593128,x=2.4303326247177695 color=red,shape=circle,flag=1,i=71898,u=0.3185643171809277,v=0.3469584244092953,w=0.5073645792223062,x=7.005110864106552 color=red,shape=circle,flag=0,i=71912,u=0.4227573742756736,v=0.4909845312410876,w=0.5030144151233247,x=4.348912205787133 color=blue,shape=square,flag=1,i=71920,u=0.5700580980882581,v=0.04630828203757942,w=0.49052936173964956,x=6.438852423166 color=red,shape=square,flag=0,i=71929,u=0.7606607304223528,v=0.6398544901590759,w=0.46877986208312883,x=4.364959869804138 color=blue,shape=square,flag=1,i=71939,u=0.6134131927883871,v=0.3685853813026815,w=0.4897787817066283,x=5.708872869160932 color=purple,shape=circle,flag=0,i=71945,u=0.4083167965966822,v=0.9401859407571762,w=0.5080721271874327,x=6.04702584451529 color=purple,shape=circle,flag=0,i=71962,u=0.7016249239486223,v=0.8742718342925873,w=0.5008291234912605,x=6.222017909710246 color=red,shape=circle,flag=1,i=71971,u=0.7047184325033955,v=0.6337496005172589,w=0.5033732759666719,x=4.040723314272406 color=red,shape=triangle,flag=0,i=71980,u=0.10551268791745183,v=0.07227443410232526,w=0.48946696946378915,x=4.859140771105152 color=blue,shape=triangle,flag=1,i=71982,u=0.41993798170645813,v=0.04455214525008511,w=0.5133023700702466,x=6.023101367696458 color=red,shape=circle,flag=0,i=71987,u=0.4695950581374321,v=0.5669907042763076,w=0.49573366460637935,x=4.577855537814462 color=red,shape=triangle,flag=0,i=71990,u=0.9843966650819161,v=0.12918745592135572,w=0.48840912798477515,x=6.429439242845484 color=blue,shape=triangle,flag=0,i=71993,u=0.620514405562138,v=0.7693591711432153,w=0.5174674939642929,x=5.73190496830431 color=red,shape=square,flag=0,i=71995,u=0.7742690221961455,v=0.2846877580589011,w=0.47530484584381805,x=4.899235588625699 color=green,shape=triangle,flag=0,i=72009,u=0.7431840593345334,v=0.9590230950575055,w=0.5008984583519989,x=5.625971554636142 color=red,shape=triangle,flag=0,i=72027,u=0.7273416781463514,v=0.7881215497775622,w=0.49198026661895833,x=5.663064059486664 color=red,shape=circle,flag=0,i=72029,u=0.057522207334796516,v=0.11395744120444962,w=0.5077705855872757,x=5.459393531305232 color=red,shape=square,flag=0,i=72050,u=0.3682795763044404,v=0.0844757731167679,w=0.4679178924527475,x=3.5909590699973872 color=red,shape=triangle,flag=0,i=72056,u=0.5935453258613138,v=0.3183768643456797,w=0.48702746597632485,x=6.243943733564163 color=red,shape=square,flag=1,i=72066,u=0.5837318236315873,v=0.02144957095217348,w=0.46652127025307916,x=7.315007800089179 color=red,shape=circle,flag=1,i=72073,u=0.15176831094800436,v=0.09608206780570924,w=0.5113246446621849,x=5.792667707356017 color=green,shape=triangle,flag=0,i=72075,u=0.3096650689346735,v=0.5066860501690279,w=0.49833294212598267,x=4.269849935028879 color=red,shape=square,flag=0,i=72083,u=0.5704980183999417,v=0.9060426665925241,w=0.46583151104430703,x=3.757772065843092 color=purple,shape=triangle,flag=0,i=72094,u=0.7681159228004103,v=0.696598070667945,w=0.49983694436019876,x=5.860226662740637 color=red,shape=triangle,flag=1,i=72102,u=0.5626005005489886,v=0.3463973348334999,w=0.4833606212379729,x=2.8294951842413645 color=blue,shape=square,flag=0,i=72103,u=0.10622884128780419,v=0.3403388881584658,w=0.4752815617968869,x=4.148737940916104 color=purple,shape=square,flag=0,i=72110,u=0.3701719453706033,v=0.7411443242414714,w=0.5185177725175872,x=5.926269951198743 color=red,shape=triangle,flag=1,i=72111,u=0.24211659645119632,v=0.9680010719181319,w=0.47694517231644107,x=5.346121224149105 color=red,shape=triangle,flag=0,i=72120,u=0.7446022010168153,v=0.49448153945666884,w=0.4882729836164162,x=3.8065482206424774 color=orange,shape=triangle,flag=1,i=72127,u=0.39119426252611345,v=0.48515137455399515,w=0.5094580296098834,x=5.550774612490744 color=orange,shape=triangle,flag=1,i=72131,u=0.9741666638794001,v=0.12706499195471666,w=0.507745761635562,x=4.360934867185619 color=red,shape=circle,flag=0,i=72138,u=0.6507816109518472,v=0.6080817206898531,w=0.5176709572313898,x=4.630544212533603 color=blue,shape=square,flag=1,i=72145,u=0.7266495338513433,v=0.6454085245082393,w=0.4721609002834268,x=4.471898234676016 color=blue,shape=circle,flag=1,i=72148,u=0.2981803433464918,v=0.5420492033743072,w=0.49683231807289474,x=4.569167316839617 color=red,shape=triangle,flag=0,i=72162,u=0.1048254397734687,v=0.5163078884252859,w=0.47368881447609745,x=4.720843051421998 color=red,shape=circle,flag=0,i=72164,u=0.6856483636289505,v=0.7678508144115663,w=0.5118957997176568,x=2.9064603487948375 color=red,shape=circle,flag=1,i=72168,u=0.2066529929015949,v=0.2845124725164412,w=0.5157767408768849,x=5.095268220584159 color=purple,shape=square,flag=0,i=72177,u=0.506117402387862,v=0.8683061705944894,w=0.5263750648218846,x=3.9305470987145763 color=red,shape=circle,flag=0,i=72201,u=0.007212468584910092,v=-0.09270905318501277,w=0.526821148743246,x=6.408899027084977 color=blue,shape=circle,flag=1,i=72204,u=0.8571356556740704,v=0.9922619348062551,w=0.5019522060049386,x=3.5123391890029336 color=blue,shape=square,flag=0,i=72207,u=0.2700487088580654,v=0.7766482893237935,w=0.4629839738836373,x=5.527289588935786 color=yellow,shape=triangle,flag=1,i=72214,u=0.5631605148153284,v=0.5170766876882995,w=0.5177992787639062,x=5.639328869111757 color=yellow,shape=square,flag=0,i=72223,u=0.3809061134560793,v=0.45195670798437837,w=0.4894571969656264,x=3.2912026101958074 color=red,shape=square,flag=0,i=72227,u=0.8599911746980318,v=0.10182239501353652,w=0.4668626511045798,x=4.724935046510523 color=yellow,shape=triangle,flag=1,i=72237,u=0.9857265188602886,v=0.9241710109683817,w=0.5127908044086285,x=6.537835565685955 color=red,shape=triangle,flag=0,i=72245,u=0.3329204908983361,v=0.20940520806088692,w=0.47082028411646815,x=5.698051285382731 color=purple,shape=square,flag=0,i=72262,u=0.4495317435923373,v=0.04939073616165468,w=0.5261428424160512,x=5.9398154928585996 color=red,shape=square,flag=0,i=72274,u=0.9572007574973389,v=0.10956507743667465,w=0.4640209844050756,x=3.7859692319368805 color=green,shape=circle,flag=0,i=72316,u=0.7487513991246616,v=0.9520670145567668,w=0.5223489163743699,x=3.7482706935485637 color=red,shape=circle,flag=0,i=72320,u=0.5593727999981427,v=0.5990223010878878,w=0.5193862255106959,x=4.809475773151121 color=red,shape=square,flag=1,i=72328,u=0.050771763223548816,v=0.4580589070395509,w=0.4799018613455928,x=3.9676018055848545 color=red,shape=circle,flag=0,i=72332,u=0.08944377441526308,v=0.09394577323776458,w=0.5199488742891534,x=4.7674230058662 color=red,shape=square,flag=1,i=72344,u=0.24915983719094792,v=0.8350204792914224,w=0.47909080899880857,x=6.321827920232859 color=blue,shape=square,flag=0,i=72352,u=0.9120756594803551,v=0.6094267790877336,w=0.46569099255904356,x=5.760392865724737 color=purple,shape=circle,flag=0,i=72353,u=0.726001928358824,v=0.9975323613899104,w=0.5038848893470722,x=4.7250193014261965 color=purple,shape=square,flag=0,i=72379,u=0.5816394016117985,v=0.8899999928484077,w=0.5144843217459071,x=6.791947771902887 color=red,shape=circle,flag=1,i=72389,u=0.2793990756083822,v=0.3557982917670405,w=0.5165501049970794,x=5.136375507742795 color=red,shape=circle,flag=0,i=72392,u=0.9774601689026017,v=0.8829915086818088,w=0.5168776217090721,x=6.378832482982435 color=purple,shape=square,flag=0,i=72398,u=0.8446149449117143,v=0.9681987243163415,w=0.5123187910160215,x=2.8422320045530824 color=green,shape=square,flag=0,i=72404,u=0.6233692670991832,v=0.4461944514615205,w=0.48668132798125824,x=4.85995442412096 color=red,shape=square,flag=0,i=72406,u=0.011205992248350505,v=0.7077100546922461,w=0.47879427792740337,x=5.688684150831193 color=blue,shape=circle,flag=1,i=72428,u=0.4307506113407853,v=0.8122537549871254,w=0.506914167064739,x=5.8951275307868345 color=blue,shape=square,flag=1,i=72435,u=0.1264929860724492,v=0.8278675579711217,w=0.46390204049080963,x=5.971530626825399 color=blue,shape=triangle,flag=1,i=72443,u=0.823808156686541,v=0.009166747224625404,w=0.4990467476279494,x=4.107750768369923 color=purple,shape=square,flag=0,i=72453,u=0.20445566622570988,v=0.5714374404238081,w=0.49856900446487107,x=6.115821566430142 color=red,shape=triangle,flag=0,i=72454,u=0.9883195242246663,v=0.46528690646822546,w=0.4701671670257296,x=3.9649375186771416 color=green,shape=square,flag=0,i=72467,u=0.8018179538564826,v=0.4776903700559191,w=0.4856038544965456,x=3.7577105591583333 color=purple,shape=square,flag=0,i=72478,u=0.8139711133469876,v=0.6826135821368494,w=0.5100199071910589,x=5.771256806775164 color=red,shape=square,flag=1,i=72482,u=0.47328429070939715,v=0.7699556261202214,w=0.47482301092413287,x=4.356230738358275 color=green,shape=triangle,flag=1,i=72498,u=0.4385493281520624,v=0.6379307906223648,w=0.4964576274592531,x=5.914061956514195 color=purple,shape=circle,flag=0,i=72504,u=0.7368014150031545,v=0.26432055827239886,w=0.49365301780658155,x=3.5202273437357685 color=orange,shape=circle,flag=1,i=72505,u=0.49810811312802905,v=0.48350461151912605,w=0.49767094924358934,x=6.154927127764089 color=yellow,shape=triangle,flag=1,i=72523,u=0.6774491625295976,v=0.4289333352305539,w=0.4919753398904435,x=6.035966540890378 color=yellow,shape=triangle,flag=1,i=72547,u=0.12462203771355929,v=0.7474705627340478,w=0.49030490998090365,x=5.478271011364921 color=yellow,shape=circle,flag=1,i=72554,u=0.9473554633188314,v=0.06905012766392826,w=0.4821619721531113,x=6.589265120851309 color=green,shape=square,flag=0,i=72572,u=0.2960577095496675,v=0.11776070373636338,w=0.48464646050238475,x=5.206019116330586 color=green,shape=circle,flag=0,i=72592,u=0.27230371997244107,v=0.8430216989002598,w=0.5248611669066987,x=3.734918784932097 color=blue,shape=circle,flag=0,i=72604,u=0.9277684947712729,v=0.08298835018060802,w=0.515032473244275,x=3.628706904158925 color=red,shape=square,flag=1,i=72613,u=0.902878030621165,v=0.6070439231754423,w=0.507830212038955,x=5.4475060097281025 color=blue,shape=triangle,flag=0,i=72631,u=0.6754216236406407,v=0.6454711951897404,w=0.5029213599951664,x=5.469943053541013 color=purple,shape=square,flag=0,i=72641,u=0.47291420354886293,v=0.8952440238846755,w=0.5105798103773396,x=4.322618883318763 color=blue,shape=triangle,flag=0,i=72644,u=0.5297760721253563,v=0.7959422479275593,w=0.5028924556416838,x=3.0638213158307743 color=red,shape=square,flag=1,i=72650,u=0.04989192827376143,v=0.27663728579119895,w=0.5151445293977063,x=4.328831199686278 color=purple,shape=triangle,flag=0,i=72658,u=0.858755203567509,v=0.9490152195465916,w=0.5005008213959479,x=3.757001828255658 color=orange,shape=square,flag=1,i=72660,u=0.00928430359520327,v=0.09648592370970421,w=0.4769044770493649,x=4.70294048426385 color=blue,shape=square,flag=0,i=72665,u=0.914693304088616,v=0.9279208005607608,w=0.483712475757045,x=6.288911702615664 color=red,shape=square,flag=0,i=72680,u=0.27743949493588715,v=0.7124275204250927,w=0.5171893242057247,x=5.094733956379064 color=blue,shape=triangle,flag=1,i=72692,u=0.8638191382478866,v=0.9984550897671751,w=0.4991318433069977,x=5.859607989157865 color=yellow,shape=triangle,flag=1,i=72702,u=0.2544731224671224,v=0.05573925021387982,w=0.48173491559423204,x=6.259231070134628 color=red,shape=triangle,flag=0,i=72726,u=0.3135634418540596,v=0.7811603857103299,w=0.46043446560175966,x=5.7203833798669725 color=blue,shape=circle,flag=0,i=72739,u=0.8409759058208828,v=0.06570230467810834,w=0.518127271598969,x=6.230249069357121 color=yellow,shape=square,flag=1,i=72753,u=0.8076665248831448,v=0.18562070816039222,w=0.48059685531962193,x=4.801588711872754 color=red,shape=square,flag=0,i=72754,u=0.6657937575344537,v=0.6839324213093635,w=0.5016594906681198,x=4.790078870715307 color=red,shape=circle,flag=0,i=72757,u=0.9070956024784969,v=0.861999741244341,w=0.5320729860764385,x=4.929840960818676 color=red,shape=circle,flag=0,i=72769,u=0.36349074142468374,v=0.37672871750028747,w=0.5325872604052474,x=4.37633351935909 color=green,shape=circle,flag=1,i=72777,u=0.025216295921019927,v=0.5478422998693638,w=0.5248591923981608,x=5.381140110173693 color=red,shape=circle,flag=1,i=72784,u=0.26373822486102383,v=0.18344208910848292,w=0.5294229146521763,x=4.037632084476621 color=red,shape=square,flag=1,i=72793,u=0.8742169240941673,v=0.380984820174165,w=0.5053650967861464,x=4.334431718774201 color=blue,shape=square,flag=1,i=72799,u=0.7966156504592768,v=0.8255818067694661,w=0.481041618391877,x=3.9073806957276944 color=red,shape=circle,flag=0,i=72817,u=0.5585823236053085,v=0.46055277285245,w=0.5227068112448294,x=4.690514071968136 color=red,shape=square,flag=1,i=72825,u=0.9203463819594913,v=0.696725652942245,w=0.49831781926220675,x=4.798487468854657 color=purple,shape=square,flag=0,i=72833,u=0.1076066798452584,v=0.5343202364829062,w=0.5015256648338,x=4.741579133759864 color=red,shape=circle,flag=0,i=72845,u=0.7296695528623173,v=0.7445745915538573,w=0.5219627492871897,x=4.0598798522134665 color=red,shape=square,flag=1,i=72877,u=0.9933876790230393,v=0.7140172351477977,w=0.47802179150624646,x=6.175994497440937 color=yellow,shape=square,flag=1,i=72889,u=0.858108245552053,v=0.21275998194956924,w=0.4832208090657703,x=7.24085860486491 color=red,shape=triangle,flag=0,i=72899,u=0.8268056703391791,v=0.5588665164299295,w=0.47428483730612836,x=5.054368684296835 color=red,shape=triangle,flag=0,i=72906,u=0.23118887929972798,v=0.17223576037076538,w=0.47235336093321695,x=6.887834865742074 color=blue,shape=square,flag=0,i=72911,u=0.833212349540034,v=0.08603278870401632,w=0.4731255720891816,x=2.715314892566983 color=purple,shape=square,flag=0,i=72918,u=0.34272203207651397,v=0.6179697916917083,w=0.5064652485390138,x=3.8316958502305476 color=blue,shape=triangle,flag=0,i=72935,u=0.5415420368585162,v=0.5893076726921904,w=0.49849339704148765,x=4.293722174007237 color=green,shape=triangle,flag=0,i=72969,u=0.32611786086655536,v=0.6792666645810701,w=0.5003684308061643,x=4.699130317837855 color=red,shape=circle,flag=0,i=72970,u=0.9961258888051265,v=1.0498318491312169,w=0.5043378086026293,x=4.863904894045845 color=red,shape=triangle,flag=0,i=72979,u=0.6407996963484139,v=0.4448129582597735,w=0.4690007678399177,x=4.336702771650028 color=red,shape=triangle,flag=0,i=72989,u=0.7816594595738134,v=0.1478841961630989,w=0.4696594371325213,x=5.532022773983765 color=purple,shape=triangle,flag=0,i=72992,u=0.0759845047491956,v=0.5775728861572089,w=0.5092218456305272,x=4.239048674824838 color=red,shape=square,flag=1,i=73004,u=0.9116471043472949,v=0.8928207405420929,w=0.47629130875441433,x=4.6420594628836405 color=green,shape=square,flag=0,i=73005,u=0.21339609547993565,v=0.9125717355872759,w=0.4795830544894485,x=4.520488661389336 color=red,shape=triangle,flag=0,i=73027,u=0.7734515847600993,v=0.8165714019035812,w=0.47791153264777664,x=6.626207732797006 color=red,shape=triangle,flag=1,i=73041,u=0.7382331862323227,v=0.6115116805949784,w=0.48534295923648857,x=4.700948261444632 color=red,shape=circle,flag=1,i=73046,u=0.47685082871462414,v=0.40653348336191336,w=0.5010050043207679,x=3.615478576455267 color=blue,shape=triangle,flag=0,i=73056,u=0.8660840120743803,v=0.7087550705129804,w=0.49469534751440397,x=7.850562118211282 color=red,shape=square,flag=0,i=73058,u=0.5724115044307474,v=0.14061042121837497,w=0.475222835160045,x=4.808813683700198 color=red,shape=triangle,flag=1,i=73081,u=0.10809337585472945,v=0.5263559248875243,w=0.48998168968065464,x=5.685385844800567 color=red,shape=circle,flag=0,i=73082,u=0.6134266017037263,v=0.6613676229907061,w=0.5080652246100984,x=3.599115030968829 color=red,shape=triangle,flag=0,i=73088,u=0.28627888471375007,v=0.11574180810961576,w=0.49215999716804654,x=2.7771562739618094 color=blue,shape=square,flag=1,i=73089,u=0.7312241055040474,v=0.3341860983717747,w=0.47288135493739936,x=4.593268831441955 color=red,shape=triangle,flag=0,i=73107,u=0.8229161839484023,v=0.09961796061708328,w=0.4992078285280151,x=5.486653228028314 color=blue,shape=square,flag=1,i=73125,u=0.2480872311626361,v=0.2896716253493766,w=0.4745171260373533,x=3.953163769464099 color=red,shape=square,flag=0,i=73126,u=0.7226548780755402,v=0.4328849907977659,w=0.5030008976049739,x=5.607731813197586 color=orange,shape=square,flag=1,i=73130,u=0.27133484364941185,v=0.22931916659578666,w=0.4936072702308622,x=5.081950490150782 color=red,shape=square,flag=0,i=73131,u=0.8092824445698978,v=0.4068811725051118,w=0.5013690859141154,x=3.849626790148212 color=blue,shape=square,flag=1,i=73145,u=0.33398575704430455,v=0.4410680068740741,w=0.4776831225459644,x=4.535974945207352 color=purple,shape=circle,flag=0,i=73148,u=0.07538657794927406,v=0.7837313714996098,w=0.5014372456268962,x=5.784883970926296 color=purple,shape=circle,flag=0,i=73177,u=0.25338520318979507,v=0.47637057576955844,w=0.5028831989695736,x=4.446518216759074 color=orange,shape=triangle,flag=1,i=73190,u=0.7760451236040097,v=0.2043651170692704,w=0.5008577984814421,x=3.5858763909052276 color=red,shape=square,flag=0,i=73198,u=0.12393622561371376,v=0.37017887804243077,w=0.489510625314009,x=5.596005794355364 color=green,shape=square,flag=0,i=73201,u=0.713207814191945,v=0.07519388335466493,w=0.48504226917198595,x=4.360076213861312 color=red,shape=circle,flag=0,i=73202,u=0.39289505842030115,v=0.2947356532400002,w=0.4871448462169997,x=4.473024024906055 color=red,shape=triangle,flag=0,i=73203,u=0.677149369350636,v=0.2884004409049301,w=0.49472845551993927,x=5.132085726779002 color=red,shape=square,flag=0,i=73210,u=0.1867089302087731,v=0.18357753948121114,w=0.49228407226862014,x=3.8300608987875315 color=yellow,shape=square,flag=1,i=73215,u=0.5677835833870515,v=0.9133416373621372,w=0.4758284635938738,x=4.346456505132783 color=blue,shape=square,flag=1,i=73217,u=0.2987504959521605,v=0.23837982354031273,w=0.47303585934056136,x=5.662891451791427 color=red,shape=triangle,flag=0,i=73219,u=0.2071186857990156,v=0.9776147044886387,w=0.5036873984858958,x=5.525109547990574 color=red,shape=square,flag=0,i=73223,u=0.24842057210112012,v=0.6212266125336219,w=0.4993977147879554,x=7.282954064166996 color=blue,shape=square,flag=1,i=73233,u=0.45732890871277954,v=0.779527850662401,w=0.4732625566106589,x=5.126047490657016 color=green,shape=square,flag=0,i=73235,u=0.6457059659870845,v=0.465168864383234,w=0.4930919365223765,x=5.7404127587893 color=green,shape=triangle,flag=0,i=73242,u=0.26870655219679274,v=0.9761871475918202,w=0.4941748882762842,x=4.756969912380434 color=red,shape=circle,flag=1,i=73256,u=0.4105523221866697,v=0.4000339621499748,w=0.484684070304413,x=3.8814050522478247 color=red,shape=square,flag=1,i=73259,u=0.737061451030215,v=0.47167364763342723,w=0.5031086475230642,x=3.644000558506836 color=red,shape=triangle,flag=1,i=73266,u=0.3739120330714697,v=0.08353943325514579,w=0.49935825878250684,x=2.518845857450657 color=yellow,shape=triangle,flag=1,i=73278,u=0.2224353313701355,v=0.6588932153198386,w=0.5001032147808447,x=3.8605775611912976 color=red,shape=circle,flag=0,i=73285,u=0.5152641780163079,v=0.5373869106517458,w=0.4797637137795361,x=4.08739490293446 color=blue,shape=circle,flag=1,i=73292,u=0.7930891102601632,v=0.047068939026991274,w=0.49724471200325515,x=6.937747535570582 color=blue,shape=triangle,flag=1,i=73294,u=0.8482866459700806,v=0.8370625432863222,w=0.481108489375018,x=5.586467149278353 color=red,shape=triangle,flag=0,i=73300,u=0.40437487551710605,v=0.5919758906282285,w=0.49480617692222506,x=4.564088412508501 color=purple,shape=circle,flag=0,i=73301,u=0.6417985791687332,v=0.5075200260409516,w=0.5100911374463913,x=6.264261317748019 color=red,shape=square,flag=1,i=73314,u=0.8051183568627752,v=0.5334895698192947,w=0.49960516776485075,x=6.3109677479783075 color=yellow,shape=square,flag=1,i=73330,u=0.6737546113802931,v=0.6528368087455942,w=0.47206702004536333,x=6.308596728951717 color=red,shape=square,flag=0,i=73344,u=0.6940889957771803,v=0.5186276320207436,w=0.48615106548672843,x=5.620521243886766 color=blue,shape=triangle,flag=1,i=73348,u=0.6934698862986908,v=0.7317966358404299,w=0.4796080814827919,x=4.253253710596258 color=red,shape=triangle,flag=0,i=73358,u=0.07674494935678555,v=0.4072161572364629,w=0.5068815087466405,x=6.260206898510124 color=red,shape=triangle,flag=0,i=73398,u=0.07605305599014578,v=0.08313912658315925,w=0.5046269804689287,x=5.035397854932586 color=red,shape=square,flag=0,i=73421,u=0.28412250903350234,v=0.06695902775055163,w=0.49955999811282736,x=6.081442659797958 color=yellow,shape=square,flag=1,i=73422,u=0.7059322154515407,v=0.37996526842060874,w=0.4798337174494267,x=3.6329416904647966 color=red,shape=triangle,flag=0,i=73459,u=0.642391425501434,v=0.043767096534954586,w=0.4972187064269506,x=3.7740191683991373 color=yellow,shape=square,flag=1,i=73460,u=0.7761989432029298,v=0.5279337773239262,w=0.4859124901428017,x=3.625881432843299 color=red,shape=triangle,flag=0,i=73461,u=0.014020713135102225,v=0.03442264993244459,w=0.4967695366663496,x=4.680240538509591 color=blue,shape=circle,flag=0,i=73467,u=0.10378634591381608,v=0.5743656926595915,w=0.49825105245392803,x=5.3980410219457005 color=yellow,shape=square,flag=1,i=73470,u=0.35652165358844257,v=0.9428124663410518,w=0.48352938301168036,x=5.225093370053339 color=red,shape=triangle,flag=1,i=73487,u=0.285390114164328,v=0.08607680093429271,w=0.4919644924806896,x=6.208169211500192 color=orange,shape=circle,flag=0,i=73503,u=0.7689211631000442,v=0.21579704582186632,w=0.48756968143741325,x=5.528835958251567 color=red,shape=circle,flag=0,i=73505,u=0.36277364787138233,v=0.3685023235550707,w=0.5041797964377719,x=5.598731517717937 color=red,shape=triangle,flag=1,i=73508,u=0.2976753200547928,v=0.8830544360707335,w=0.4954230928090637,x=3.4754490211784064 color=red,shape=circle,flag=0,i=73511,u=0.3098031741805707,v=0.2675765645447079,w=0.5039013524796738,x=7.445521971968751 color=red,shape=triangle,flag=1,i=73528,u=0.38602030673035703,v=0.19694465343570078,w=0.4956655404728734,x=2.0220160571696577 color=yellow,shape=square,flag=1,i=73538,u=0.09410104825295551,v=0.7794515208774729,w=0.4872326411228931,x=4.164005386141844 color=red,shape=square,flag=0,i=73555,u=0.5724509837165904,v=0.5105676887129689,w=0.5053447134795521,x=6.3500581033684504 color=blue,shape=triangle,flag=1,i=73581,u=0.12999432288622081,v=0.9990348486841953,w=0.48731486734200313,x=5.64657736458589 color=red,shape=square,flag=0,i=73591,u=0.8989909498962174,v=0.36920052049492713,w=0.5035522351774396,x=5.049760446451766 color=red,shape=circle,flag=0,i=73596,u=0.9628743127397472,v=0.8756883603336953,w=0.48711155022487523,x=3.802290150045721 color=purple,shape=triangle,flag=0,i=73611,u=0.12967141299212925,v=0.5451293215366149,w=0.4910990578065233,x=3.663065939687771 color=yellow,shape=square,flag=1,i=73613,u=0.7677260347684008,v=0.3846466530565561,w=0.48484969341049805,x=7.302856900739751 color=yellow,shape=triangle,flag=1,i=73624,u=0.6295337656375458,v=0.21297983704867607,w=0.505206110046823,x=4.22272845694787 color=red,shape=circle,flag=1,i=73632,u=0.5407046846479205,v=0.5711028753837529,w=0.5018562622577037,x=3.532671949677436 color=orange,shape=square,flag=0,i=73633,u=0.06939805372657937,v=0.7338128030499417,w=0.48644421007084726,x=3.502468389049794 color=red,shape=triangle,flag=0,i=73638,u=0.9962990422585004,v=0.9573072552649218,w=0.4858349737091535,x=4.340330747037244 color=red,shape=triangle,flag=0,i=73659,u=0.47655726575723556,v=0.26680165601778527,w=0.4862753334367252,x=4.0042188999592865 color=blue,shape=triangle,flag=1,i=73662,u=0.5545237073345199,v=0.8482821469792923,w=0.4872738747478104,x=5.998760540677206 color=red,shape=square,flag=0,i=73666,u=0.20247655318002322,v=0.5592349400550598,w=0.4972910633704216,x=4.7720702789266 color=red,shape=square,flag=1,i=73681,u=0.8431256175304304,v=0.9564545934523625,w=0.4932128944499044,x=5.656469896302969 color=green,shape=square,flag=0,i=73684,u=0.8916213324602849,v=0.4588203099732582,w=0.49570914609592487,x=4.4184849931812495 color=red,shape=triangle,flag=0,i=73687,u=0.9424167172925552,v=0.607344744392924,w=0.4851325542324003,x=4.830476994921856 color=yellow,shape=triangle,flag=1,i=73731,u=0.009681337380882504,v=0.3653326235396833,w=0.5010217651244245,x=3.9776096339372233 color=yellow,shape=circle,flag=1,i=73733,u=0.2686168510127359,v=0.3916782894656532,w=0.4982641362270937,x=5.076883774145872 color=blue,shape=triangle,flag=0,i=73751,u=0.9215647950195507,v=0.3905247807140644,w=0.4959433811364549,x=4.804840899751561 color=red,shape=triangle,flag=1,i=73775,u=0.034215305887544734,v=0.3210999355484824,w=0.4761246461210536,x=6.450831831666183 color=purple,shape=square,flag=0,i=73781,u=0.4911574876509637,v=0.6765193880370212,w=0.5225450018623883,x=3.2300474648631585 color=red,shape=square,flag=0,i=73800,u=0.7272346117146764,v=0.7154223615292531,w=0.4962356972660502,x=4.805217013434523 color=red,shape=triangle,flag=1,i=73810,u=0.19425743908285453,v=0.26700226617025435,w=0.47098572438582337,x=5.92000930101425 color=yellow,shape=square,flag=1,i=73814,u=0.30922206588272516,v=0.3885715325915504,w=0.48031566496221323,x=3.5021119175060647 color=red,shape=triangle,flag=0,i=73816,u=0.5950138526894632,v=0.7601983682220361,w=0.46821510255916216,x=4.514538567289188 color=yellow,shape=square,flag=0,i=73857,u=0.24262509476485994,v=0.9043456576492875,w=0.4835369088167234,x=4.749412371736739 color=red,shape=circle,flag=0,i=73859,u=0.20640610824543904,v=0.17711697163402487,w=0.49902918559354636,x=6.6239138557343535 color=red,shape=circle,flag=0,i=73868,u=0.47085905547554563,v=0.3939223633636871,w=0.4980892915350956,x=6.082009142106543 color=red,shape=circle,flag=0,i=73882,u=0.16783082711700814,v=0.07845062279807329,w=0.489843991858881,x=4.290215986207049 color=purple,shape=triangle,flag=0,i=73885,u=0.7319106217070923,v=0.8148112614595804,w=0.4871519125560546,x=5.91760314023933 color=blue,shape=square,flag=0,i=73893,u=0.12516576865925688,v=0.46666954188249266,w=0.4971144262354856,x=2.985491670179851 color=green,shape=square,flag=1,i=73906,u=0.46392558723663824,v=0.046747832340204964,w=0.49938087530550646,x=6.21713251739346 color=red,shape=square,flag=0,i=73917,u=0.4516847660001998,v=0.045973849391362065,w=0.4965108305295375,x=4.267796319425178 color=red,shape=square,flag=1,i=73918,u=0.9533499781216933,v=0.0027281080580259243,w=0.49667185922593776,x=5.1339131451979805 color=red,shape=square,flag=0,i=73922,u=0.6822225308850183,v=0.38001726432235505,w=0.49645024110110897,x=2.9732061640307657 color=red,shape=triangle,flag=0,i=73927,u=0.8548647082166396,v=0.984773716257365,w=0.46744965644811975,x=3.9556049115678658 color=blue,shape=circle,flag=0,i=73929,u=0.6699124194757352,v=0.13722203662564214,w=0.5121481948131902,x=5.656377569538088 color=red,shape=triangle,flag=0,i=73931,u=0.04412288751984583,v=0.5773400064111115,w=0.4681608961314278,x=4.578422167946148 color=yellow,shape=triangle,flag=1,i=73946,u=0.026323220440112927,v=0.2943030839877602,w=0.491641826346298,x=6.7266558823087585 color=red,shape=square,flag=0,i=73948,u=0.5995931742327236,v=0.6260253911771474,w=0.5073357829382608,x=5.49790017581537 color=yellow,shape=square,flag=1,i=73965,u=0.06091085838590138,v=0.24609391724975715,w=0.48365426626296254,x=4.012087318829319 color=yellow,shape=triangle,flag=1,i=73968,u=0.6481630575842057,v=0.011254568504986628,w=0.5007725549223798,x=3.963124376529929 color=red,shape=triangle,flag=0,i=73976,u=0.38401826239098913,v=0.606804998746147,w=0.45996255656885343,x=5.630524417288048 color=yellow,shape=triangle,flag=1,i=73981,u=0.9468422574413714,v=0.7871663270852913,w=0.5026240804535607,x=7.131826522379086 color=yellow,shape=square,flag=0,i=73983,u=0.5605182571004323,v=0.5144029280934599,w=0.4868655352189978,x=3.6100406404223264 color=yellow,shape=triangle,flag=1,i=73986,u=0.562795746360657,v=0.07147939514130686,w=0.49938144460274,x=3.4329658033991675 color=red,shape=triangle,flag=0,i=73991,u=0.5343658220263324,v=0.7130630242448898,w=0.46093199333821533,x=4.366849535911659 color=green,shape=square,flag=0,i=74023,u=0.544776152251061,v=0.8416317371472,w=0.4991598209288799,x=3.851396544303494 color=yellow,shape=square,flag=1,i=74040,u=0.10966248632397124,v=0.7379686518318879,w=0.4864300566842841,x=5.7441531934028065 color=green,shape=circle,flag=0,i=74064,u=0.19499703393627577,v=0.650736823611962,w=0.5261124326366297,x=5.37280066111514 color=red,shape=triangle,flag=0,i=74101,u=0.9578573725683837,v=0.9022521714491644,w=0.4786703734395629,x=5.929930586659921 color=blue,shape=circle,flag=0,i=74104,u=0.03180303629652925,v=0.2634392751669268,w=0.5099586206987196,x=5.708746243439055 color=red,shape=circle,flag=0,i=74122,u=0.7961928082819837,v=0.8366329828729749,w=0.5183789907229683,x=6.724341864974814 color=purple,shape=circle,flag=0,i=74135,u=0.8149059957235426,v=0.6321382282560014,w=0.4967871723905764,x=4.894664816866129 color=red,shape=triangle,flag=0,i=74146,u=0.8363241263823191,v=0.9317767897809397,w=0.47026181140492246,x=2.135478415238911 color=yellow,shape=triangle,flag=1,i=74150,u=0.9634762168199501,v=0.5822647727459717,w=0.49796252426159604,x=5.300855031754312 color=blue,shape=circle,flag=1,i=74155,u=0.10011927718805236,v=0.07500172749065825,w=0.5180593992652905,x=4.169458849533399 color=red,shape=triangle,flag=0,i=74158,u=0.9449591785210132,v=0.702856125955232,w=0.4730808836079962,x=5.1347387002909075 color=blue,shape=circle,flag=1,i=74163,u=0.1092563351885939,v=0.13884509384344856,w=0.5199822806284418,x=6.098778122728651 color=red,shape=square,flag=0,i=74174,u=0.8712826351031138,v=0.4436291520044644,w=0.5132309508314374,x=4.97465287966913 color=yellow,shape=triangle,flag=1,i=74181,u=0.7511281258442482,v=0.23840946915563233,w=0.4989955975567813,x=4.561469655978386 color=red,shape=triangle,flag=0,i=74188,u=0.4266118053404341,v=0.6881344305908903,w=0.47630582096994784,x=4.244907594909962 color=purple,shape=triangle,flag=0,i=74195,u=0.4037795203363368,v=0.05390781813228618,w=0.4996809422346196,x=6.077785983601697 color=blue,shape=square,flag=1,i=74201,u=0.5805067256511077,v=0.37808391930573826,w=0.5072967332958901,x=5.33517712393137 color=red,shape=circle,flag=0,i=74209,u=0.1342302134651655,v=0.06459187647814006,w=0.5334208170455429,x=4.440485437828833 color=red,shape=triangle,flag=0,i=74215,u=0.40765793598833056,v=0.7834863720200711,w=0.4888715175164901,x=3.8702767608330952 color=blue,shape=square,flag=1,i=74219,u=0.7353282171966982,v=0.4955007039351944,w=0.5067343724392008,x=5.652753390892282 color=purple,shape=triangle,flag=0,i=74225,u=0.7537454017576176,v=0.18320212007907832,w=0.49727465605478777,x=5.388678343443851 color=yellow,shape=square,flag=1,i=74235,u=0.35625431893337234,v=0.7854228436430979,w=0.491337294839168,x=3.7238017175135485 color=red,shape=circle,flag=0,i=74257,u=0.09453880825386307,v=0.11131070308675836,w=0.5313441267814368,x=5.708388758350463 color=red,shape=triangle,flag=1,i=74263,u=0.79716268521799,v=0.6377104160298015,w=0.4890250121970355,x=6.402402388487867 color=red,shape=triangle,flag=0,i=74275,u=0.6522863591653894,v=0.8079463098364482,w=0.4901996271362057,x=5.674600793103391 color=blue,shape=triangle,flag=0,i=74337,u=0.16303242596229017,v=0.8641563713235006,w=0.5241221367340247,x=5.17257583610434 color=green,shape=square,flag=0,i=74342,u=0.5569260573797796,v=0.431765970419284,w=0.48528542143808717,x=4.4786129438598 color=red,shape=square,flag=0,i=74360,u=0.6054830649877131,v=0.290171721052222,w=0.5075596149926536,x=6.4680819912203615 color=red,shape=triangle,flag=0,i=74364,u=0.7224317042523765,v=0.4213175990194369,w=0.4994275942565782,x=3.763757712745255 color=red,shape=circle,flag=1,i=74365,u=0.22976069233610774,v=0.3186458146707333,w=0.5270088327659848,x=5.448233564300657 color=red,shape=circle,flag=1,i=74381,u=0.9941763000591275,v=1.0480076548084407,w=0.524717272826327,x=4.736381080337667 color=red,shape=triangle,flag=1,i=74384,u=0.16902092605533459,v=0.7780701292295173,w=0.5094062702839045,x=5.7396609465179225 color=green,shape=square,flag=0,i=74390,u=0.12422815912527574,v=0.7465012698616101,w=0.4835980549100516,x=4.870676063552579 color=red,shape=triangle,flag=0,i=74398,u=0.9290878308409746,v=0.6177766702414434,w=0.5102960938565552,x=4.581709971949926 color=blue,shape=triangle,flag=1,i=74411,u=0.6108903492719456,v=0.6701572144070943,w=0.5208733075561003,x=4.6881833671233695 color=red,shape=square,flag=1,i=74413,u=0.23410956469104527,v=0.24580540619674573,w=0.5211736250788455,x=4.275816949445322 color=red,shape=triangle,flag=0,i=74417,u=0.5592005106035348,v=0.3180955066529366,w=0.5063035565909414,x=5.460277298718489 color=purple,shape=square,flag=0,i=74424,u=0.35002091459496454,v=0.3958790434470656,w=0.5098794193597085,x=4.474706250833276 color=red,shape=circle,flag=0,i=74437,u=0.79291025522697,v=0.8493005744918936,w=0.5263302149927336,x=4.602587432483611 color=green,shape=square,flag=1,i=74443,u=0.40291391742358695,v=0.6021815986441458,w=0.48626671272928873,x=5.612360053442166 color=blue,shape=triangle,flag=1,i=74450,u=0.06583186167773669,v=0.2992133757023169,w=0.5166522451567229,x=7.034692986210788 color=red,shape=triangle,flag=0,i=74458,u=0.5006374274046266,v=0.1546090633702616,w=0.5042697870488335,x=5.291583227203817 color=red,shape=triangle,flag=0,i=74465,u=0.9864723786100202,v=0.8250479892913812,w=0.49612436711205143,x=5.105525358933398 color=yellow,shape=square,flag=1,i=74471,u=0.5241133434511219,v=0.13718435454131117,w=0.49990225761923773,x=6.133552328593815 color=orange,shape=triangle,flag=0,i=74476,u=0.010474395956650007,v=0.10813919297176067,w=0.5089801531858591,x=4.436400330850538 color=red,shape=triangle,flag=1,i=74477,u=0.32943558295730657,v=0.9639409828615061,w=0.4957871460681552,x=2.9078262118445366 color=green,shape=circle,flag=0,i=74488,u=0.3289651954956777,v=0.0005012669003675585,w=0.5168396145304434,x=5.763564391334159 color=blue,shape=triangle,flag=1,i=74505,u=0.8644876769517047,v=0.2816080933358057,w=0.51584081453108,x=4.039672499886708 color=blue,shape=circle,flag=0,i=74509,u=0.5965385151564035,v=0.951036798339431,w=0.5149565701117595,x=5.30678271186835 color=green,shape=triangle,flag=0,i=74514,u=0.8649132779034757,v=0.09148676051735127,w=0.47719837345277005,x=6.622641694721412 color=blue,shape=circle,flag=0,i=74516,u=0.4500036001257083,v=0.9595646461419677,w=0.5145311776465503,x=3.0774155194558888 color=red,shape=triangle,flag=1,i=74519,u=0.9186764537850587,v=0.11238234017476367,w=0.49710736840479497,x=5.954795765343072 color=purple,shape=triangle,flag=0,i=74522,u=0.9699693146496409,v=0.32194205614852567,w=0.4921425489278764,x=7.188639100501519 color=yellow,shape=triangle,flag=1,i=74525,u=0.6183461492286181,v=0.7553582988924024,w=0.5068765649512922,x=6.798741976251505 color=red,shape=triangle,flag=0,i=74526,u=0.23008657394441356,v=0.8671538544785025,w=0.49797364430528185,x=5.915835529186908 color=blue,shape=circle,flag=1,i=74543,u=0.8510489726029078,v=0.6488404429484304,w=0.5067544548660893,x=3.9968082317052294 color=green,shape=square,flag=0,i=74544,u=0.6558736950046088,v=0.4426693570923439,w=0.48633782631649775,x=3.6796350041568684 color=yellow,shape=circle,flag=1,i=74547,u=0.23000152048303502,v=0.7264792541863004,w=0.499072587362543,x=6.0138648938010535 color=red,shape=triangle,flag=0,i=74565,u=0.5179873809927983,v=0.7117302875055687,w=0.5034995883795009,x=4.06281266643197 color=red,shape=square,flag=1,i=74572,u=0.2723551975430052,v=0.1897879757149683,w=0.5254401488733796,x=4.7372181328436085 color=red,shape=square,flag=0,i=74590,u=0.30983182228477213,v=0.0778484722085594,w=0.5308148030729908,x=4.517821672237914 color=red,shape=square,flag=1,i=74609,u=0.709120648229431,v=0.17004605025488417,w=0.5273920145694707,x=4.47368188880185 color=red,shape=circle,flag=1,i=74622,u=0.14764498315564645,v=0.1929774637478571,w=0.5292450006647548,x=4.0999308862013875 color=blue,shape=square,flag=0,i=74626,u=0.5294156983321282,v=0.8286313269472367,w=0.4982429879863127,x=5.793112969323659 color=red,shape=triangle,flag=0,i=74638,u=0.04867850900404547,v=0.9383175985076053,w=0.49563483918301704,x=5.8925709764789564 color=green,shape=square,flag=0,i=74652,u=0.5221295680710472,v=0.9888864052686629,w=0.4979885981986899,x=4.607816454947834 color=blue,shape=square,flag=1,i=74676,u=0.9420382598038157,v=0.379324794370812,w=0.49563464161249665,x=7.904342191233759 color=red,shape=triangle,flag=1,i=74677,u=0.9068279425614332,v=0.8563730677745992,w=0.4919221265912739,x=4.863947969500148 color=red,shape=circle,flag=0,i=74695,u=0.7563958208448414,v=0.6998420957844103,w=0.5251902558268223,x=5.894682368656684 color=purple,shape=square,flag=0,i=74701,u=0.45817334086480754,v=0.5170576990703348,w=0.4968839326757915,x=4.942121550003258 color=red,shape=square,flag=0,i=74740,u=0.43817873495487525,v=0.11641921116287135,w=0.5253951944272784,x=3.8899618805750404 color=red,shape=circle,flag=0,i=74754,u=0.07647795745176733,v=0.113566323029729,w=0.5129774099736205,x=4.183420642946919 color=red,shape=square,flag=0,i=74763,u=0.020592823584431152,v=0.975173817482053,w=0.5201764887296262,x=3.3376322773067817 color=blue,shape=square,flag=1,i=74771,u=0.24337781675897274,v=0.2177815017781496,w=0.5066889951636958,x=3.6461295802047498 color=red,shape=square,flag=0,i=74776,u=0.623543025423303,v=0.10433876527445662,w=0.517179691766531,x=4.624612095721415 color=yellow,shape=triangle,flag=1,i=74779,u=0.7512935510372817,v=0.734837885516518,w=0.49846560985990546,x=4.2636152571421855 color=red,shape=circle,flag=0,i=74790,u=0.10534648801385027,v=0.20524199587201541,w=0.5035367076184488,x=2.970228485933329 color=blue,shape=triangle,flag=0,i=74793,u=0.6772071447096011,v=0.7838638110987186,w=0.5104766569470135,x=5.85929135054377 color=green,shape=square,flag=0,i=74802,u=0.7263706240692465,v=0.030781064159093985,w=0.48667733318817413,x=3.3070100398451365 color=red,shape=triangle,flag=1,i=74814,u=0.2607019003379061,v=0.5339014318993949,w=0.48157592588909687,x=4.4358352560455 color=green,shape=square,flag=0,i=74820,u=0.9448557069603734,v=0.46144943854412324,w=0.4889583137136693,x=5.363334356029843 color=green,shape=circle,flag=0,i=74851,u=0.9771917335030909,v=0.6888322919339299,w=0.4975961982610521,x=3.449680357165145 color=red,shape=triangle,flag=1,i=74860,u=0.6026463336619938,v=0.1024166716399133,w=0.4732245130091161,x=5.835247136578104 color=red,shape=square,flag=1,i=74862,u=0.48262587595894835,v=0.37157525189736296,w=0.5297945671059928,x=4.224868771609265 color=green,shape=square,flag=0,i=74869,u=0.18288427925472805,v=0.015877164393682364,w=0.4909218346237854,x=5.441451111365079 color=blue,shape=square,flag=1,i=74871,u=0.7905099363493048,v=0.7896156225587122,w=0.5187914231141615,x=5.426423768480798 color=red,shape=circle,flag=0,i=74890,u=0.5516627345373434,v=0.5864021452580853,w=0.4983626770607954,x=3.4071241968360337 color=red,shape=circle,flag=0,i=74918,u=0.945429259821453,v=0.9719372848090725,w=0.4967795542266296,x=5.347800519043236 color=green,shape=square,flag=0,i=74924,u=0.1535922133019476,v=0.010668070394192819,w=0.4907173534845199,x=5.984633685060537 color=blue,shape=square,flag=0,i=74930,u=0.5981963559775522,v=0.11792577988732766,w=0.5190767792230858,x=6.830316594649006 color=purple,shape=square,flag=0,i=74941,u=0.19347104279068772,v=0.21573095612416882,w=0.4941875867798613,x=5.632709057232895 color=red,shape=square,flag=0,i=74952,u=0.09111599781438584,v=0.45811081075245175,w=0.5287255586227518,x=4.151652872382568 color=red,shape=triangle,flag=0,i=74960,u=0.8305238189559678,v=0.2823882612515901,w=0.4605735290481944,x=4.196752960002679 color=blue,shape=square,flag=1,i=74961,u=0.20763259922265842,v=0.9962466757568939,w=0.5203329282517026,x=5.161169723849628 color=red,shape=square,flag=1,i=74971,u=0.3322698897360169,v=0.5457527501700328,w=0.5285993508400428,x=5.633722348136948 color=purple,shape=square,flag=0,i=74972,u=0.563061970220946,v=0.6657924898046755,w=0.489399159568048,x=5.454305611354727 color=red,shape=triangle,flag=0,i=74989,u=0.20258116002912574,v=0.7232876317439324,w=0.4698974291569513,x=4.30383926696124 color=blue,shape=triangle,flag=0,i=75000,u=0.8625968637336654,v=0.8612979219248911,w=0.5003823503353495,x=4.2538705389806974 color=red,shape=square,flag=0,i=75004,u=0.6892800110198373,v=0.1251579760229029,w=0.5227290201720401,x=5.891890301810555 color=purple,shape=square,flag=0,i=75010,u=0.5715658727337238,v=0.5383962053561394,w=0.4882862473154879,x=4.379031207070903 color=purple,shape=square,flag=0,i=75015,u=0.01005264691899832,v=0.7023238764836227,w=0.49376657434988924,x=6.7332438589909644 color=red,shape=square,flag=1,i=75035,u=0.19227533016762532,v=0.9391381148603628,w=0.5247846045691217,x=4.562503628146505 color=blue,shape=triangle,flag=0,i=75044,u=0.5108493646092617,v=0.04514088017253726,w=0.503498744545002,x=4.8591549326123475 color=yellow,shape=triangle,flag=1,i=75051,u=0.38333447674132615,v=0.7628189688940775,w=0.492977771366999,x=4.083112374709039 color=purple,shape=square,flag=0,i=75052,u=0.03378335735159066,v=0.6605812699878494,w=0.48444801239592317,x=3.6137194488627067 color=purple,shape=square,flag=0,i=75076,u=0.11983350395662407,v=0.6776305066704684,w=0.4802682236113198,x=4.104738631543207 color=green,shape=triangle,flag=0,i=75092,u=0.8607417326531254,v=0.5949693667749962,w=0.48549329179404455,x=4.407897460367713 color=yellow,shape=square,flag=1,i=75101,u=0.4596765018887293,v=0.26422536386579976,w=0.5173476340952787,x=6.148702548461491 color=red,shape=triangle,flag=1,i=75103,u=0.15202526130769134,v=0.38063211337670755,w=0.4893375663310441,x=3.4519042360517695 color=red,shape=square,flag=1,i=75104,u=0.40175905204290274,v=0.40391774232223854,w=0.5279002982270758,x=3.778059594042656 color=blue,shape=square,flag=1,i=75106,u=0.9244395349673898,v=0.42443049923804577,w=0.5170664137792557,x=4.550639626971413 color=purple,shape=triangle,flag=0,i=75132,u=0.12671748229364066,v=0.4874007275096701,w=0.48601340180309904,x=5.919214501812422 color=green,shape=square,flag=1,i=75143,u=0.5134938685226365,v=0.8839705864814802,w=0.4782139684567321,x=4.226420194212593 color=red,shape=square,flag=0,i=75144,u=0.21301900232216486,v=0.12593123029841757,w=0.5220877510995696,x=3.6410497166169886 color=red,shape=circle,flag=1,i=75149,u=0.07693130714370355,v=0.10995103522411168,w=0.48038894775611385,x=4.228261653242684 color=red,shape=triangle,flag=0,i=75161,u=0.3874632390923548,v=0.4327220575708186,w=0.4924739242568785,x=5.35625158595733 color=red,shape=triangle,flag=0,i=75167,u=0.9701929769281673,v=0.9037417970215005,w=0.4847116714111441,x=5.725677359896707 color=orange,shape=triangle,flag=1,i=75171,u=0.18863723342263317,v=0.24846632036006866,w=0.5109649587971444,x=5.813016576370831 color=red,shape=circle,flag=0,i=75180,u=0.3287320520386863,v=0.3250446235760209,w=0.49127620877440253,x=2.5084090150515412 color=green,shape=triangle,flag=0,i=75189,u=0.25779790129408353,v=0.0674247087839257,w=0.4911262483264463,x=5.567269566215741 color=blue,shape=circle,flag=1,i=75193,u=0.357690113525865,v=0.5401196101290404,w=0.4993864466653269,x=3.7044565220355117 color=red,shape=circle,flag=0,i=75207,u=0.7510120944091546,v=0.7431781866112418,w=0.49058708243254423,x=6.810490235822786 color=purple,shape=triangle,flag=0,i=75208,u=0.1603043319255274,v=0.4625692979491671,w=0.48695883391154,x=4.96732957568248 color=yellow,shape=circle,flag=1,i=75248,u=0.676844164319526,v=0.936725146337167,w=0.5099969215041289,x=6.234240676254099 color=red,shape=square,flag=0,i=75256,u=0.6446659281006489,v=0.5175660435630324,w=0.5151958930781878,x=6.8611019790328145 color=red,shape=square,flag=0,i=75257,u=0.3409687777588285,v=0.8999995674758315,w=0.5156917920846991,x=6.7921599695275505 color=red,shape=square,flag=1,i=75259,u=0.45859657967610057,v=0.3656105550835457,w=0.5154729016657188,x=3.696978455287106 color=yellow,shape=triangle,flag=0,i=75303,u=0.2610907123027705,v=0.5237798928294737,w=0.5014752981619796,x=6.365781918924758 color=blue,shape=circle,flag=0,i=75317,u=0.15141833645024882,v=0.26378981580255034,w=0.48911646158067973,x=4.8737693597224485 color=yellow,shape=square,flag=1,i=75331,u=0.6964641888418144,v=0.2027409369455846,w=0.5118328475993918,x=4.799359812196501 color=blue,shape=triangle,flag=0,i=75342,u=0.5930466331147796,v=0.7567849694048852,w=0.5081372745594764,x=4.657691984751567 color=red,shape=triangle,flag=0,i=75352,u=0.10922834451652375,v=0.6103106443343256,w=0.4767723707613561,x=5.583897254866231 color=blue,shape=square,flag=1,i=75353,u=0.6375437277279246,v=0.7744805532740272,w=0.5038428932065878,x=5.04725085115049 color=red,shape=circle,flag=0,i=75372,u=0.7155677568355481,v=0.6598571030784607,w=0.49629260875176784,x=6.607036320640603 color=red,shape=triangle,flag=0,i=75402,u=0.8808261525746126,v=0.15523665320888558,w=0.473999401371741,x=6.287426943392451 color=purple,shape=triangle,flag=1,i=75403,u=0.5386779497713138,v=0.06733566374828381,w=0.4901505560981755,x=6.51914329025031 color=red,shape=triangle,flag=1,i=75414,u=0.38950713442883356,v=0.2666800464770108,w=0.4764081342261732,x=7.432812911521515 color=blue,shape=square,flag=0,i=75432,u=0.3554035819456608,v=0.5629294550493659,w=0.5048791235784019,x=4.818441659188746 color=red,shape=square,flag=0,i=75433,u=0.16482058499765828,v=0.7562790517306017,w=0.5043472942958557,x=6.147200440654905 color=red,shape=square,flag=0,i=75450,u=0.0009495799592779131,v=0.03406316353835148,w=0.4990426666507558,x=4.905440225098672 color=yellow,shape=square,flag=1,i=75459,u=0.6352053093764487,v=0.962711097993488,w=0.5085909817814864,x=3.7600148098726898 color=yellow,shape=square,flag=1,i=75473,u=0.004725539958056246,v=0.4576002449786595,w=0.5145504402085824,x=5.226666060773338 color=blue,shape=triangle,flag=0,i=75483,u=0.069577529834978,v=0.8771892135808287,w=0.5073546889309503,x=4.520959625846948 color=red,shape=circle,flag=1,i=75491,u=0.928088830749936,v=0.8896654695319893,w=0.501216303408147,x=3.7360966573202514 color=blue,shape=triangle,flag=0,i=75506,u=0.8553222803773598,v=0.10082373724243787,w=0.5083141981233915,x=5.959244981300554 color=yellow,shape=triangle,flag=1,i=75508,u=0.9026235012282425,v=0.014810326518428507,w=0.4975508044571711,x=5.853777038623881 color=yellow,shape=circle,flag=1,i=75517,u=0.2865333014524597,v=0.09746212379561847,w=0.5173857972860151,x=4.905216217374824 color=red,shape=square,flag=1,i=75522,u=0.10175448150457833,v=0.5751535160121101,w=0.5038512522281451,x=4.723603312684658 color=red,shape=square,flag=1,i=75529,u=0.38339531909138613,v=0.2639001311017938,w=0.5132283932993867,x=6.006291577090569 color=red,shape=square,flag=1,i=75538,u=0.2558592745784639,v=0.05311299722166407,w=0.5115484086707561,x=2.7016662817727286 color=green,shape=triangle,flag=0,i=75572,u=0.4305180890062592,v=0.9354143160561779,w=0.5172762833306427,x=4.359080074142157 color=red,shape=square,flag=1,i=75595,u=0.14405675430660847,v=0.3037167415128579,w=0.5101798085754583,x=5.70927704526992 color=yellow,shape=square,flag=1,i=75604,u=0.201035208887139,v=0.8480401023090458,w=0.5050193448739322,x=3.4944549796548596 color=blue,shape=square,flag=1,i=75628,u=0.8802285846004505,v=0.13407926435102302,w=0.49640083115194,x=6.087347708773302 color=yellow,shape=square,flag=1,i=75641,u=0.8960158694466789,v=0.9704766533218534,w=0.5042020194564072,x=5.029082053242115 color=yellow,shape=square,flag=1,i=75642,u=0.5978488198743882,v=0.37787829397501427,w=0.5004855381958734,x=4.389400795529668 color=red,shape=triangle,flag=0,i=75652,u=0.6240064191051112,v=0.5703501649929268,w=0.488843747208351,x=5.129025026851264 color=red,shape=triangle,flag=0,i=75658,u=0.5470569475832744,v=0.9756165926047606,w=0.4932618907149586,x=5.253286623148804 color=red,shape=square,flag=1,i=75663,u=0.7102481456297569,v=0.4911367230806417,w=0.5008489806383956,x=5.26961788741773 color=red,shape=triangle,flag=1,i=75678,u=0.6561003034425807,v=0.7972740338240779,w=0.49421066817522435,x=7.803822059996219 color=red,shape=square,flag=0,i=75698,u=0.4366390844393546,v=0.6906985181971231,w=0.4807420064596584,x=4.7393503683284095 color=blue,shape=square,flag=1,i=75711,u=0.6149584495093532,v=0.41934374368866256,w=0.5098315710175045,x=5.608160441574413 color=yellow,shape=square,flag=1,i=75722,u=0.6990257283371092,v=0.2962816179750801,w=0.4941817022232349,x=5.534226672377635 color=red,shape=square,flag=0,i=75736,u=0.4694271707680544,v=0.3208448478265661,w=0.4744399093376625,x=4.4734000147075825 color=green,shape=triangle,flag=0,i=75739,u=0.9325980125289542,v=0.863020102025737,w=0.5084650379055495,x=6.391887528533768 color=red,shape=square,flag=1,i=75762,u=0.16813249459460233,v=0.7374549851261671,w=0.4718190527883035,x=3.6718018956767327 color=red,shape=square,flag=1,i=75793,u=0.08894582109819293,v=0.6000135568343806,w=0.4795656502027283,x=4.335128625899531 color=purple,shape=square,flag=0,i=75795,u=0.3468131948434764,v=0.6006738188914619,w=0.4931816181929421,x=3.983448108356022 color=blue,shape=square,flag=1,i=75815,u=0.5149419880487021,v=0.5036298899468596,w=0.5088589858709743,x=4.408149743880865 color=blue,shape=triangle,flag=1,i=75824,u=0.8954548036364832,v=0.4408623314596646,w=0.4746441626388489,x=6.426931798648624 color=red,shape=circle,flag=0,i=75825,u=0.12287715187493742,v=0.04789986778155528,w=0.5196696158158836,x=4.560843478512571 color=red,shape=square,flag=0,i=75828,u=0.3985572566687491,v=0.12815682950766194,w=0.4756016974432333,x=5.377997650338762 color=purple,shape=triangle,flag=0,i=75844,u=0.8021072746184713,v=0.12070363535957285,w=0.4702399817686198,x=5.0113682597077185 color=green,shape=circle,flag=0,i=75847,u=0.18488866254057112,v=0.11468324436011201,w=0.49143001203031084,x=3.2943961749610438 color=red,shape=circle,flag=0,i=75848,u=0.1381322171900793,v=0.15022762256624764,w=0.5212530276762425,x=5.056600368873066 color=yellow,shape=square,flag=1,i=75857,u=0.03295318379313106,v=0.8850626143030532,w=0.49413067472286637,x=5.385128438317927 color=purple,shape=square,flag=0,i=75905,u=0.20200805455323,v=0.744647626765385,w=0.49206822092449926,x=8.220892842497657 color=blue,shape=circle,flag=1,i=75908,u=0.8052598880713813,v=0.057428685846987015,w=0.48831355100325613,x=6.611056168510579 color=red,shape=circle,flag=1,i=75911,u=0.4332171492101451,v=0.44534885763395476,w=0.5196597647356826,x=4.107100514199269 color=green,shape=circle,flag=0,i=75917,u=0.17705199786990788,v=0.4207031506723816,w=0.5014435007025267,x=3.546014256391011 color=red,shape=circle,flag=0,i=75943,u=0.7878904315943659,v=0.8055486594828597,w=0.5301132508138457,x=6.1134866317158405 color=purple,shape=square,flag=0,i=75976,u=0.06734587877410814,v=0.21288735833675743,w=0.4767770370956767,x=6.445437307417428 color=blue,shape=square,flag=0,i=75988,u=0.39575172885065846,v=0.4637412237308357,w=0.5032758150206922,x=5.499823719296377 color=red,shape=circle,flag=1,i=75991,u=0.9091170467174449,v=0.9741284357179678,w=0.5295212319647594,x=6.308852776865592 color=green,shape=square,flag=1,i=76031,u=0.2493610294300448,v=0.9204098762255356,w=0.47734531980910777,x=5.187007359259788 color=blue,shape=circle,flag=1,i=76036,u=0.9927854320007904,v=0.32506230148003556,w=0.4871355497015411,x=5.021868544862186 color=blue,shape=circle,flag=1,i=76037,u=0.6925251794010225,v=0.8804878900515186,w=0.4898651628380573,x=4.480835808161586 color=red,shape=square,flag=0,i=76051,u=0.9167587913426889,v=0.6490837121495829,w=0.4850515398929979,x=3.7837005627476956 color=green,shape=triangle,flag=0,i=76057,u=0.5177756935104152,v=0.8144260505173898,w=0.5101053061428206,x=3.8260057306518136 color=red,shape=circle,flag=0,i=76092,u=0.013500520841920438,v=0.07936605338912676,w=0.5274579583239124,x=5.384077958139304 color=blue,shape=triangle,flag=1,i=76172,u=0.42918097650983045,v=0.6765565737144372,w=0.4704877451252106,x=2.206541563902966 color=red,shape=square,flag=0,i=76173,u=0.2614546432113146,v=0.8779217806047592,w=0.4689909245888773,x=3.515801994314156 color=purple,shape=square,flag=0,i=76175,u=0.9230548490799251,v=0.20677485645913862,w=0.4918545620497562,x=4.8305498361765435 color=red,shape=circle,flag=1,i=76177,u=0.9873402214957514,v=0.989657002194948,w=0.5237403101147309,x=6.166278355280192 color=purple,shape=square,flag=0,i=76212,u=0.9431532816538241,v=0.21474141660271073,w=0.4930253515593033,x=3.7594040745083124 color=purple,shape=triangle,flag=0,i=76214,u=0.609821464183716,v=0.6389526317244818,w=0.48376135835783185,x=5.014872046499547 color=purple,shape=circle,flag=0,i=76219,u=0.20026725870065754,v=0.793205581150307,w=0.4969441153050769,x=5.6323833995846195 color=yellow,shape=triangle,flag=0,i=76231,u=0.3136266773812564,v=0.8272054379835488,w=0.49668967367362116,x=5.257403979198879 color=blue,shape=triangle,flag=1,i=76251,u=0.49434565499304994,v=0.41676771659597245,w=0.46723583175996675,x=4.335445528958487 color=orange,shape=triangle,flag=0,i=76287,u=0.7552996540912389,v=0.8935930400745189,w=0.5065363727687604,x=5.994057905754794 color=red,shape=triangle,flag=0,i=76318,u=0.335725690636258,v=0.41837153975083907,w=0.4959504523532034,x=4.519741043597379 color=purple,shape=square,flag=0,i=76320,u=0.8288363545777822,v=0.08577507565980647,w=0.48765964027079794,x=4.600099106336966 color=purple,shape=triangle,flag=0,i=76361,u=0.5715881630469227,v=0.14729620799909005,w=0.48039556454605437,x=6.146797804220459 color=red,shape=triangle,flag=0,i=76380,u=0.279101484797904,v=0.4109954206489326,w=0.5004782122977516,x=4.623599803175675 color=red,shape=triangle,flag=0,i=76392,u=0.9573963142758083,v=0.4935114236307473,w=0.49685789478221154,x=5.259212049815939 color=green,shape=square,flag=0,i=76399,u=0.2952553189706415,v=0.3715260554059431,w=0.4714357366530857,x=5.361695064178093 color=red,shape=square,flag=0,i=76422,u=0.3834635032257123,v=0.029416298554753473,w=0.45550242204102026,x=4.736058545702815 color=orange,shape=square,flag=1,i=76426,u=0.2850562919010694,v=0.7868728087902546,w=0.5183553119186447,x=4.795621189829819 color=red,shape=triangle,flag=0,i=76428,u=0.7410802738316075,v=0.9010013222494525,w=0.49696282194342084,x=5.504560178177751 color=purple,shape=square,flag=0,i=76437,u=0.2839796784965293,v=0.5781825327832731,w=0.4901380690647679,x=4.853108645301831 color=red,shape=square,flag=1,i=76442,u=0.7198502716552054,v=0.5269945982200485,w=0.4580120750821909,x=5.606712965703426 color=red,shape=square,flag=0,i=76450,u=0.882822684791914,v=0.7382766439307654,w=0.4606550342194117,x=6.058089929367234 color=yellow,shape=circle,flag=1,i=76454,u=0.7841204724506287,v=0.968116729443913,w=0.5291663496637445,x=5.05585812332319 color=blue,shape=square,flag=1,i=76456,u=0.7713878211892955,v=0.1825730748525337,w=0.5206337721721971,x=5.673757426079461 color=red,shape=square,flag=1,i=76474,u=0.12950794968832724,v=0.9732315184612382,w=0.46671396209064847,x=6.196978169535126 color=yellow,shape=triangle,flag=1,i=76488,u=0.16708369275300383,v=0.10000696220863614,w=0.5030373383268141,x=6.710254718636688 color=red,shape=triangle,flag=0,i=76502,u=0.16780794197173354,v=0.3692395976984879,w=0.5015701856233178,x=3.638292085279994 color=yellow,shape=square,flag=1,i=76524,u=0.19198671073585116,v=0.17932130955503012,w=0.49847691944723177,x=7.519202986839545 color=yellow,shape=circle,flag=1,i=76528,u=0.9903564738971828,v=0.7682144346892245,w=0.5168304712952871,x=4.961367236877486 color=red,shape=square,flag=0,i=76532,u=0.7533687620024123,v=0.5848577522418097,w=0.45942372500333273,x=7.215166600925446 color=red,shape=square,flag=0,i=76547,u=0.8905442476175128,v=0.3161612820671559,w=0.45922492218360644,x=4.5884612079356595 color=yellow,shape=triangle,flag=1,i=76562,u=0.5641945990626297,v=0.28371417959395917,w=0.5020034373981855,x=7.295391934824061 color=red,shape=square,flag=0,i=76601,u=0.4210588440059848,v=0.7639543920834846,w=0.45347407490917707,x=5.170145105502908 color=red,shape=square,flag=1,i=76609,u=0.7939565415336549,v=0.9475167748252384,w=0.4605768025184789,x=4.635759652301643 color=red,shape=square,flag=0,i=76619,u=0.09482789359701671,v=0.7810394740165318,w=0.46042606676004,x=4.348479427136168 color=green,shape=square,flag=0,i=76622,u=0.31546661809489795,v=0.3025053899297562,w=0.4846801333400167,x=4.7358072152506505 color=yellow,shape=square,flag=1,i=76642,u=0.004766043712697288,v=0.4285654945304932,w=0.4990474064849798,x=4.5790215377135475 color=red,shape=triangle,flag=0,i=76686,u=0.29815928993385976,v=0.49258608624814926,w=0.4940528476148049,x=4.410959847806137 color=purple,shape=triangle,flag=0,i=76696,u=0.9833449975502577,v=0.6904901237251319,w=0.4677075990679117,x=5.38305939403546 color=orange,shape=square,flag=0,i=76733,u=0.1340198537032199,v=0.6230296547623884,w=0.5191147587853986,x=4.317819627450959 color=red,shape=triangle,flag=0,i=76736,u=0.33712120934518763,v=0.6355057298358443,w=0.4885421721611272,x=5.462678747284495 color=red,shape=square,flag=0,i=76743,u=0.7076128300554048,v=0.3612592418390992,w=0.4534417088536488,x=3.553903621042796 color=red,shape=circle,flag=0,i=76745,u=0.7346994503904052,v=0.6709551075125401,w=0.5201947203592728,x=5.836860612469489 color=red,shape=square,flag=1,i=76748,u=0.3935879606692859,v=0.4113539802848414,w=0.45628730910451076,x=5.311646949788667 color=red,shape=circle,flag=1,i=76753,u=0.41235423667859183,v=0.493829133643183,w=0.5157115690246393,x=5.303995341566885 color=yellow,shape=triangle,flag=1,i=76769,u=0.305985160252608,v=0.8809371695402696,w=0.5081662679952208,x=7.822690417690133 color=purple,shape=square,flag=0,i=76770,u=0.3659882568404359,v=0.476692011500199,w=0.4884406863910534,x=3.1242199348560633 color=red,shape=square,flag=1,i=76783,u=0.959283579866316,v=0.770921589533541,w=0.46381838261628455,x=4.763967572986673 color=green,shape=square,flag=0,i=76819,u=0.6532515707206029,v=0.14428910080925705,w=0.4927813260498352,x=4.799584976230563 color=red,shape=circle,flag=0,i=76832,u=0.36559371364884163,v=0.37579210044452566,w=0.5101190603508893,x=6.863713650351852 color=green,shape=square,flag=1,i=76840,u=0.1682757425890279,v=0.8119245998051429,w=0.501864835850702,x=4.546026981081092 color=purple,shape=square,flag=0,i=76842,u=0.5227178082152303,v=0.29203156269608455,w=0.49532571929570274,x=5.026733299375825 color=yellow,shape=square,flag=1,i=76846,u=0.661282221648051,v=0.5356646035492276,w=0.5101232526911603,x=3.664937209856302 color=blue,shape=circle,flag=0,i=76849,u=0.15985966900502668,v=0.20680381891863253,w=0.4976140209855073,x=5.44375813420731 color=red,shape=square,flag=1,i=76866,u=0.47595884339009054,v=0.7788440380136896,w=0.4637651356713886,x=4.056418678235501 color=blue,shape=triangle,flag=0,i=76869,u=0.5148765705215134,v=0.8201343712473447,w=0.4833697262853864,x=4.444947868201772 color=red,shape=square,flag=0,i=76889,u=0.06276868823340664,v=0.21467726472252235,w=0.4677796759139046,x=3.984786234417578 color=red,shape=square,flag=0,i=76897,u=0.3528319674319337,v=0.10294828448589244,w=0.47574671852218026,x=4.831450986764156 color=green,shape=circle,flag=0,i=76907,u=0.11120179319678114,v=0.1857854246924422,w=0.5027494113393097,x=6.153389907420025 color=red,shape=circle,flag=1,i=76919,u=0.1513898702929034,v=0.09170235004311755,w=0.5280104857140738,x=4.721211513188092 color=red,shape=circle,flag=1,i=76936,u=0.7827812711822434,v=0.7263464027350637,w=0.5281972165627313,x=5.6435949386947755 color=red,shape=triangle,flag=0,i=76940,u=0.2607488809569648,v=0.3692085201022801,w=0.48136495022376974,x=7.8727596727241185 color=red,shape=circle,flag=1,i=76946,u=0.6550325045303718,v=0.7084881945203096,w=0.5269230330360379,x=4.587075827592058 color=red,shape=square,flag=0,i=76961,u=0.6335073543985587,v=0.21036469813066117,w=0.479503905024245,x=6.231482302904311 color=green,shape=square,flag=0,i=76972,u=0.9088008377276038,v=0.5469320319841137,w=0.4936443160847649,x=7.641369883045168 color=red,shape=triangle,flag=1,i=76999,u=0.9281446487255947,v=0.8585629394008908,w=0.47618411763181206,x=6.394502412078232 color=yellow,shape=square,flag=0,i=77003,u=0.19738235360934986,v=0.11021928539582238,w=0.5055229571562947,x=4.664690223675415 color=orange,shape=square,flag=1,i=77007,u=0.7375304044096296,v=0.36511415064301433,w=0.5136264196737452,x=5.342645643600903 color=red,shape=square,flag=0,i=77016,u=0.32752017620638896,v=0.9856779086957664,w=0.4823151627725228,x=5.010023735914677 color=red,shape=triangle,flag=1,i=77030,u=0.5469610403836389,v=0.9522044439683123,w=0.485575358704096,x=5.159358604405621 color=blue,shape=triangle,flag=0,i=77047,u=0.7938322489682957,v=0.46407313222969127,w=0.4758874717080517,x=3.5729030713180876 color=red,shape=circle,flag=0,i=77053,u=0.8831034522394201,v=0.9531503251783967,w=0.5279176082822314,x=4.524986670551221 color=red,shape=square,flag=0,i=77081,u=0.29516644811905557,v=0.5110105965402431,w=0.4769777390821584,x=4.253687086097668 color=red,shape=square,flag=0,i=77091,u=0.7825277204760981,v=0.7822768676055581,w=0.47481923731339115,x=5.079670205105158 color=red,shape=square,flag=0,i=77099,u=0.07302432520920188,v=0.39785580369448503,w=0.47842499657163207,x=5.71835421334615 color=blue,shape=triangle,flag=1,i=77112,u=0.39423653538152303,v=0.11795572601740678,w=0.4737626042420189,x=4.0947033853609645 color=red,shape=circle,flag=0,i=77116,u=0.9421489349811454,v=1.0070134143017686,w=0.5217223355804862,x=5.3218552534961745 color=blue,shape=circle,flag=0,i=77136,u=0.0379159016193118,v=0.7798608866751163,w=0.509728511574839,x=4.736924438644583 color=purple,shape=square,flag=0,i=77140,u=0.8946258375181065,v=0.18082688296579663,w=0.5048421067172387,x=6.573813893201475 color=red,shape=square,flag=1,i=77143,u=0.5575107832809912,v=0.2054568499609042,w=0.46947134425273107,x=6.170322550837511 color=blue,shape=triangle,flag=1,i=77160,u=0.6522799342859079,v=0.6472997601595853,w=0.4818153443925534,x=6.6272356859148465 color=yellow,shape=triangle,flag=1,i=77163,u=0.7491156796196939,v=0.8135376354490241,w=0.5114868676273986,x=5.838198702223457 color=red,shape=triangle,flag=0,i=77184,u=0.6917504998535641,v=0.013787670735251667,w=0.4978673714798339,x=3.344329605081361 color=yellow,shape=triangle,flag=1,i=77192,u=0.3072066911750212,v=0.32871805637486695,w=0.5083451332581012,x=4.5195331356617565 color=orange,shape=triangle,flag=0,i=77194,u=0.6446130972426188,v=0.7270919351343222,w=0.4987853860085344,x=6.983885845745921 color=green,shape=triangle,flag=0,i=77197,u=0.3009031556184564,v=0.6237406211754767,w=0.49489214109005336,x=5.6186287395451755 color=red,shape=triangle,flag=1,i=77203,u=0.5485532893952202,v=0.10777937836919693,w=0.5011720691330133,x=7.749001863831452 color=yellow,shape=square,flag=1,i=77210,u=0.6076597668411704,v=0.8319760196147771,w=0.5037714972963674,x=5.418550391547821 color=red,shape=triangle,flag=1,i=77222,u=0.80988229108039,v=0.6596996615507281,w=0.502707372277778,x=5.344332909793438 color=green,shape=square,flag=0,i=77229,u=0.5554816226317305,v=0.7913655706475917,w=0.47466356301209983,x=5.751465481275758 color=red,shape=triangle,flag=1,i=77231,u=0.9329857915909096,v=0.37436598445850366,w=0.5060516424261574,x=5.643318282782549 color=yellow,shape=circle,flag=1,i=77232,u=0.4558401430598601,v=0.4212612403995363,w=0.5284789105375716,x=4.61532583912487 color=yellow,shape=circle,flag=1,i=77286,u=0.6926199692441136,v=0.9308710026879694,w=0.5290527097598187,x=4.882279348854452 color=red,shape=circle,flag=0,i=77304,u=0.8956542163016912,v=0.8537758569578553,w=0.5106731868446719,x=4.892239666282779 color=blue,shape=circle,flag=1,i=77311,u=0.11561282844370702,v=0.3607453384892849,w=0.5097827693620435,x=3.175863668577604 color=red,shape=circle,flag=1,i=77314,u=0.5331088810981582,v=0.4730798674677947,w=0.5061594431176809,x=4.020397800630222 color=red,shape=triangle,flag=0,i=77316,u=0.968280211023668,v=0.05032418921882176,w=0.49601957682997005,x=3.8472715702079605 color=yellow,shape=circle,flag=1,i=77319,u=0.5701614887192601,v=0.3542393125377259,w=0.5257995256701111,x=2.8808568691332312 color=purple,shape=triangle,flag=0,i=77324,u=0.5974162886593449,v=0.6957137682534142,w=0.4944406849904481,x=3.217706487697329 color=yellow,shape=circle,flag=1,i=77341,u=0.7416742727996676,v=0.042077644178583284,w=0.5210366039030419,x=5.836723130229981 color=purple,shape=square,flag=0,i=77342,u=0.8437817412938233,v=0.5372651573035038,w=0.5038483946843023,x=3.4668181137543943 color=green,shape=triangle,flag=1,i=77343,u=0.8304648665831763,v=0.5571220069861031,w=0.4970822219104579,x=7.678924727076833 color=green,shape=square,flag=0,i=77353,u=0.31383630914270855,v=0.9320126658774085,w=0.48419044896910335,x=6.019436588292823 color=red,shape=square,flag=0,i=77363,u=0.9349481745701733,v=0.5197747794529468,w=0.4840420519147051,x=7.200716439674264 color=red,shape=triangle,flag=0,i=77370,u=0.027606628544258438,v=0.21072466641787524,w=0.5013165961470609,x=6.548724610890811 color=green,shape=square,flag=0,i=77371,u=0.975699067608121,v=0.383422099140901,w=0.4909791398855183,x=5.621084666025872 color=orange,shape=square,flag=1,i=77373,u=0.08047770282189626,v=0.793062492110941,w=0.5157356687352839,x=6.81235010781937 color=red,shape=circle,flag=1,i=77374,u=0.9400781515070912,v=0.9937705586525689,w=0.506866768577407,x=6.015225138650724 color=red,shape=square,flag=0,i=77394,u=0.9771929304404441,v=0.04584250823149516,w=0.4787690060978922,x=5.872117327313018 color=red,shape=triangle,flag=0,i=77407,u=0.6209929959828102,v=0.5315706426683636,w=0.49456277587745673,x=5.261144849257304 color=red,shape=triangle,flag=1,i=77409,u=0.5250678973758585,v=0.3074724562911556,w=0.4971848377915727,x=6.236980514084699 color=red,shape=triangle,flag=0,i=77430,u=0.6922825609674655,v=0.6191756664552196,w=0.4897381531488978,x=5.173187322230956 color=blue,shape=circle,flag=1,i=77435,u=0.29326301377252006,v=0.18764379074495874,w=0.4998037683537533,x=4.967728741567706 color=yellow,shape=triangle,flag=1,i=77441,u=0.6568385917730865,v=0.38603501449884037,w=0.504300851951063,x=6.617972042200967 color=yellow,shape=square,flag=1,i=77443,u=0.8086373354888161,v=0.5326267434636608,w=0.49826731674132146,x=5.466272639931759 color=red,shape=triangle,flag=0,i=77449,u=0.12783454755598145,v=0.15518016995699857,w=0.4945620418537517,x=4.520613296394768 color=red,shape=square,flag=1,i=77453,u=0.7535876571287363,v=0.9587404274991285,w=0.4828953368987452,x=7.774863579308164 color=red,shape=triangle,flag=1,i=77454,u=0.5913530687458667,v=0.2286859031300481,w=0.49347898440221705,x=4.752452355807436 color=red,shape=triangle,flag=0,i=77457,u=0.6845112304964417,v=0.7197492167199879,w=0.4948868982170782,x=3.3799971961615207 color=purple,shape=triangle,flag=0,i=77470,u=0.2709531771155317,v=0.2830805073235585,w=0.5046952892589561,x=5.823416136767672 color=green,shape=square,flag=0,i=77483,u=0.7810562792809393,v=0.9945846444761719,w=0.4895694917364415,x=3.9067195661716716 color=red,shape=triangle,flag=1,i=77504,u=0.5160926536255005,v=0.3425738694725817,w=0.5009294398462697,x=4.296389952769009 color=orange,shape=square,flag=0,i=77520,u=0.3046916484991026,v=0.022007322608711077,w=0.518102233366699,x=5.811935169365285 color=green,shape=circle,flag=0,i=77521,u=0.1847073823991494,v=0.6277665629404164,w=0.49561411904056657,x=5.302702802198399 color=purple,shape=square,flag=0,i=77533,u=0.19418624775109472,v=0.40598362848990033,w=0.48574326786845745,x=3.7112014346560205 color=red,shape=circle,flag=0,i=77556,u=0.2470181921781045,v=0.26861474422319465,w=0.4822202295907846,x=4.611908933883087 color=green,shape=circle,flag=0,i=77562,u=0.06706697303218212,v=0.2991750066193938,w=0.48631848107883785,x=5.087555678305484 color=purple,shape=triangle,flag=0,i=77583,u=0.498934408482288,v=0.44398600058670823,w=0.5075041081658945,x=5.917191652700367 color=yellow,shape=square,flag=0,i=77584,u=0.9187883771903261,v=0.9512686681524661,w=0.5062377803074822,x=5.690376112643951 color=yellow,shape=circle,flag=1,i=77587,u=0.617108774754534,v=0.5561639609600528,w=0.5128661764819804,x=4.871203993468564 color=red,shape=triangle,flag=1,i=77598,u=0.16028155177408732,v=0.7586084220507242,w=0.49359654375993006,x=4.112822440203012 color=blue,shape=triangle,flag=1,i=77601,u=0.7704374985124988,v=0.14875326540096667,w=0.4900491229537145,x=4.337224914834552 color=red,shape=circle,flag=1,i=77623,u=0.31605935880087166,v=0.23094444829271144,w=0.47216564115389187,x=6.171378882479556 color=red,shape=circle,flag=0,i=77633,u=0.3789869749517534,v=0.30556001010592937,w=0.4606437567191414,x=3.549907806626836 color=red,shape=square,flag=0,i=77637,u=0.42222644988739166,v=0.5776307774389853,w=0.4739427501946395,x=4.6556211646127075 color=red,shape=square,flag=0,i=77644,u=0.23949740134670738,v=0.8040688651973041,w=0.47582915437015594,x=5.118198059843437 color=purple,shape=circle,flag=0,i=77652,u=0.5654133645400323,v=0.5864252072985249,w=0.5189541424921014,x=4.441782794376311 color=yellow,shape=square,flag=1,i=77653,u=0.7545532758263411,v=0.3809261963117392,w=0.5003507386396013,x=4.860571830101594 color=purple,shape=square,flag=0,i=77682,u=0.15362166225812446,v=0.953304120678275,w=0.468433510834353,x=2.029232283175198 color=purple,shape=square,flag=0,i=77683,u=0.5948768035457942,v=0.7875120569217479,w=0.4730640436383393,x=3.628939653649251 color=yellow,shape=square,flag=1,i=77686,u=0.9643190178476154,v=0.9895091024459554,w=0.49608726683679294,x=5.989422198987494 color=yellow,shape=square,flag=1,i=77687,u=0.5283933507512453,v=0.9357567666401563,w=0.4932828831862534,x=4.256644629940401 color=red,shape=square,flag=0,i=77707,u=0.42832799289107804,v=0.6911480641381447,w=0.4727426709468536,x=4.867022461021341 color=red,shape=triangle,flag=1,i=77713,u=0.06005610379110382,v=0.9290427781433881,w=0.508106383899453,x=3.923142028906728 color=yellow,shape=circle,flag=1,i=77715,u=0.5824507944605519,v=0.33036925359945146,w=0.5207630881651547,x=4.506288025168842 color=blue,shape=triangle,flag=1,i=77717,u=0.8169194900881884,v=0.6562802772541768,w=0.4909568306631267,x=3.6994105319054165 color=yellow,shape=triangle,flag=1,i=77724,u=0.20626226201954412,v=0.10627033212268189,w=0.5201865113813897,x=6.576264450279848 color=red,shape=circle,flag=1,i=77725,u=0.6329069317746927,v=0.5904613849683402,w=0.4622840002175637,x=5.317070896496403 color=red,shape=square,flag=0,i=77733,u=0.8119042486209389,v=0.08674696906313295,w=0.4744983606299709,x=5.460845682331897 color=red,shape=square,flag=0,i=77744,u=0.5169866320853493,v=0.9903358500297689,w=0.46666405521906595,x=5.063859609553524 color=yellow,shape=square,flag=1,i=77751,u=0.7312031190861369,v=0.29551859041115225,w=0.4872724688038252,x=6.093214875935353 color=red,shape=square,flag=1,i=77775,u=0.15908942773660728,v=0.3555485917665824,w=0.4749996833976505,x=6.241436735526784 color=red,shape=square,flag=0,i=77778,u=0.632555727291959,v=0.7445617396779969,w=0.4762180709299892,x=3.9950859060840216 color=red,shape=square,flag=0,i=77788,u=0.6692951498082319,v=0.33974444942480664,w=0.4742385589548459,x=3.5887931577232646 color=orange,shape=square,flag=1,i=77793,u=0.11058735435983735,v=0.5961427322054564,w=0.5148986707983465,x=5.663541742240869 color=blue,shape=circle,flag=1,i=77799,u=0.6582307214407296,v=0.9120939175274341,w=0.48178010815093913,x=7.025552654046845 color=red,shape=circle,flag=1,i=77815,u=0.7214603496315611,v=0.7266824220555177,w=0.4718515455092195,x=4.426497271087648 color=orange,shape=square,flag=1,i=77817,u=0.010721538735855907,v=0.006231260234710323,w=0.5133732359584059,x=3.634738606032416 color=red,shape=triangle,flag=1,i=77818,u=0.6894477612063545,v=0.3466947464453557,w=0.5023635515762704,x=5.732609940743846 color=yellow,shape=circle,flag=1,i=77820,u=0.1805495217652382,v=0.7356976980899061,w=0.5113463297982055,x=4.287067699934512 color=green,shape=circle,flag=0,i=77822,u=0.8381807923274504,v=0.24799701284383524,w=0.4937220905991134,x=4.9168942702912295 color=blue,shape=square,flag=0,i=77827,u=0.8377691267068565,v=0.16853365106050433,w=0.5096345672312499,x=5.92659233789247 color=red,shape=circle,flag=0,i=77846,u=0.40161141025848024,v=0.3568366471118537,w=0.47702946462799095,x=6.7201255638955 color=yellow,shape=square,flag=1,i=77848,u=0.08717387543489763,v=0.18903835663899238,w=0.5002446132706532,x=5.394152429229117 color=blue,shape=square,flag=1,i=77858,u=0.7159764146658746,v=0.17361214699001926,w=0.5154234380129497,x=6.102118432767727 color=red,shape=square,flag=0,i=77860,u=0.68609942993425,v=0.7935778898771765,w=0.47812940732287995,x=3.5889712576734603 color=blue,shape=square,flag=0,i=77861,u=0.002114299434209821,v=0.39882240519050904,w=0.5191756265908456,x=4.824742410244574 color=blue,shape=triangle,flag=0,i=77870,u=0.775360758763765,v=0.2783291526656304,w=0.48944612263499926,x=5.338678435610491 color=red,shape=circle,flag=0,i=77872,u=0.8680476325600849,v=0.8167415390870927,w=0.472608720728658,x=3.328455099895193 color=red,shape=square,flag=0,i=77875,u=0.5835400490623033,v=0.0312166650136545,w=0.4761746270310046,x=5.016665320337946 color=yellow,shape=square,flag=1,i=77884,u=0.31879462180245877,v=0.7497260747609514,w=0.5004369925444385,x=2.3434768309767144 color=yellow,shape=triangle,flag=1,i=77886,u=0.152957773366603,v=0.6122166796629332,w=0.5101679681372908,x=5.825939818868314 color=green,shape=triangle,flag=1,i=77912,u=0.31303350334407654,v=0.42620281563653317,w=0.4831708192702349,x=4.6305260410503335 color=red,shape=triangle,flag=0,i=77929,u=0.8156248518553473,v=0.8338480696227472,w=0.4960040063482286,x=3.8624072514656915 color=yellow,shape=square,flag=1,i=77934,u=0.4267965736488637,v=0.7759427068971257,w=0.5049441010008491,x=3.8387119284945057 color=yellow,shape=circle,flag=1,i=77954,u=0.6357057475847177,v=0.30246148703502485,w=0.5169708499405329,x=4.5702132329167915 color=yellow,shape=circle,flag=1,i=77957,u=0.9348750604828651,v=0.864792119493025,w=0.5156532495188857,x=3.2672143629402606 color=red,shape=square,flag=0,i=77960,u=0.793461757186159,v=0.5882045693931537,w=0.4752212538739568,x=3.626033253384827 color=red,shape=triangle,flag=0,i=77963,u=0.6028216253895896,v=0.0008956982834695815,w=0.5064966176711667,x=4.717284871910093 color=red,shape=square,flag=0,i=77968,u=0.8874850920712726,v=0.6257795451871339,w=0.47102547495804714,x=4.9502066220776 color=red,shape=square,flag=0,i=77970,u=0.08802088099264205,v=0.7504791948832154,w=0.47005532441178166,x=6.302068634173157 color=green,shape=triangle,flag=0,i=77983,u=0.5583560511282069,v=0.5194434953425001,w=0.4857027160000571,x=5.388647618137455 color=red,shape=circle,flag=0,i=77995,u=0.8601538501589202,v=0.867692667916776,w=0.4617847774762544,x=5.997970042411047 color=red,shape=square,flag=1,i=78001,u=0.9650874187152643,v=0.19725884833035134,w=0.47771668723042016,x=5.330336419986309 color=red,shape=triangle,flag=0,i=78017,u=0.9448438101498315,v=0.9165771363591984,w=0.5200575691349669,x=6.387160423485304 color=red,shape=square,flag=0,i=78020,u=0.902350650742806,v=0.5942270825728875,w=0.47940275222439077,x=2.506107516235967 color=green,shape=triangle,flag=0,i=78027,u=0.39774192879339965,v=0.04396508243794717,w=0.4847775550914205,x=6.064109580345679 color=green,shape=square,flag=0,i=78061,u=0.30331859546608275,v=0.9476643498124749,w=0.49946514667160014,x=3.581179436461072 color=green,shape=triangle,flag=0,i=78063,u=0.7422084300066089,v=0.6197886024036005,w=0.4785118760711613,x=3.9198983089500623 color=green,shape=square,flag=0,i=78068,u=0.455890556156204,v=0.594152071809712,w=0.500047875264678,x=5.580889617184944 color=blue,shape=square,flag=1,i=78100,u=0.5748057642537174,v=0.6579858236199554,w=0.5250573555363868,x=6.346387149130874 color=purple,shape=circle,flag=0,i=78107,u=0.6229735336939355,v=0.5081215772406867,w=0.5226386765471286,x=5.2918090841924394 color=red,shape=square,flag=0,i=78122,u=0.4136255316258376,v=0.18924320591093313,w=0.4776272438166506,x=4.693634338428173 color=purple,shape=circle,flag=0,i=78123,u=0.1781525896540036,v=0.455359511218705,w=0.5252335990346062,x=4.088265961874737 color=blue,shape=circle,flag=1,i=78128,u=0.20655620779317196,v=0.18529062673063934,w=0.48938279798533735,x=3.9040042259508003 color=blue,shape=triangle,flag=0,i=78140,u=0.8719402071240042,v=0.09624769525464993,w=0.4874478932545316,x=3.9723927812052584 color=red,shape=square,flag=0,i=78144,u=0.33200414822064583,v=0.03849564448066456,w=0.473922058709498,x=4.483174645483503 color=yellow,shape=square,flag=1,i=78149,u=0.33132053647279525,v=0.9636604208244348,w=0.49142093193025177,x=3.864359212067503 color=red,shape=circle,flag=0,i=78154,u=0.880614881751517,v=0.826790628981774,w=0.4808911221776618,x=4.7919899475481875 color=blue,shape=square,flag=1,i=78155,u=0.17517437142632575,v=0.9409823435375293,w=0.5340917285542284,x=5.310267403861228 color=orange,shape=square,flag=0,i=78157,u=0.9551186469628827,v=0.8047168842805802,w=0.5200144869107375,x=4.397281337808794 color=red,shape=triangle,flag=0,i=78164,u=0.44974511345509494,v=0.37202469748821687,w=0.5079764789790872,x=3.5351994712542982 color=yellow,shape=square,flag=1,i=78166,u=0.8065854147386377,v=0.2586081844491136,w=0.49125795981591963,x=5.1673578771629955 color=red,shape=square,flag=0,i=78171,u=0.6084936209239225,v=0.8123508534370562,w=0.46337837471641785,x=4.844607854033959 color=orange,shape=square,flag=0,i=78173,u=0.9534734041941707,v=0.6813228979385701,w=0.5220430655265749,x=3.7388281088696473 color=red,shape=triangle,flag=1,i=78190,u=0.469076822150737,v=0.9014958009225952,w=0.5094461425380735,x=6.385199362908412 color=green,shape=square,flag=0,i=78196,u=0.6489584015758096,v=0.17430902865833275,w=0.5076612696198981,x=4.620246764582878 color=green,shape=square,flag=0,i=78197,u=0.32913285689323646,v=0.6692022820261171,w=0.5039070564585555,x=4.521863568836199 color=red,shape=triangle,flag=1,i=78214,u=0.02580275955219513,v=0.18264797646663433,w=0.5051595249796011,x=5.002558902923959 color=red,shape=square,flag=1,i=78215,u=0.9703815570506079,v=0.8483012206318402,w=0.4622112607112254,x=4.6924594132754605 color=blue,shape=square,flag=1,i=78239,u=0.6243951764080419,v=0.011851169660828664,w=0.5334909761035769,x=6.587862330883272 color=yellow,shape=square,flag=1,i=78257,u=0.23893548367235995,v=0.5297986408287602,w=0.48617233410436944,x=2.636653095746359 color=red,shape=triangle,flag=0,i=78266,u=0.38742970677841326,v=0.2549029681350147,w=0.5049438702835601,x=4.88431428392951 color=red,shape=triangle,flag=0,i=78289,u=0.029356572941512837,v=0.14591883140580164,w=0.5083036708090861,x=3.5317344427344097 color=red,shape=square,flag=0,i=78307,u=0.8035297876735588,v=0.6717776829023981,w=0.48037007764595596,x=4.143543403359177 color=orange,shape=triangle,flag=0,i=78311,u=0.984001598799322,v=0.7250361897254229,w=0.49133482057985,x=6.014093637465911 color=orange,shape=triangle,flag=0,i=78322,u=0.40153579492834746,v=0.7319097010431299,w=0.4825230255849636,x=3.9062320331599665 color=blue,shape=triangle,flag=1,i=78330,u=0.5518413674592594,v=0.5930351919261024,w=0.48331968982811896,x=3.73463466862135 color=green,shape=circle,flag=0,i=78364,u=0.030808083341177683,v=0.20251333031277108,w=0.4902278147110733,x=5.923016419884884 color=yellow,shape=square,flag=1,i=78372,u=0.41255524734832605,v=0.8418945325639113,w=0.4920198699975043,x=5.348714662895561 color=blue,shape=circle,flag=0,i=78375,u=0.518247872583379,v=0.47761844149072596,w=0.4872554212820434,x=4.793137115257515 color=purple,shape=circle,flag=0,i=78405,u=0.7788163508509055,v=0.5376361669925529,w=0.5234782140474772,x=4.732569945626591 color=yellow,shape=square,flag=1,i=78411,u=0.9882975696723743,v=0.17819609349016996,w=0.49687706833219186,x=3.589027943508762 color=yellow,shape=square,flag=1,i=78425,u=0.5968597917433949,v=0.635016909815138,w=0.5012927561314738,x=3.836154775929804 color=purple,shape=square,flag=0,i=78454,u=0.5237458884612408,v=0.8033059083760481,w=0.4711650609911605,x=4.587703418439682 color=yellow,shape=circle,flag=1,i=78475,u=0.11830995316370829,v=0.7575277109788863,w=0.5352868669656894,x=5.946236618246123 color=green,shape=circle,flag=0,i=78476,u=0.6320793422390463,v=0.9975984576955893,w=0.4858688394848248,x=4.19913711326596 color=red,shape=circle,flag=0,i=78478,u=0.34707670638239585,v=0.4418709351761112,w=0.47257454302801893,x=3.849868045499098 color=green,shape=circle,flag=1,i=78485,u=0.9907635833945612,v=0.789320027688391,w=0.48776867732277673,x=5.8390016307995785 color=red,shape=triangle,flag=0,i=78488,u=0.8133526347154115,v=0.3564041438426686,w=0.5125114426998465,x=3.9911295023040307 color=red,shape=triangle,flag=0,i=78492,u=0.2206240895931414,v=0.4111724798224238,w=0.5098029648429543,x=4.714522761935395 color=red,shape=circle,flag=0,i=78494,u=0.4002350148435839,v=0.3131625894244392,w=0.47340601417718475,x=4.263144541276149 color=blue,shape=triangle,flag=1,i=78506,u=0.8850341362471923,v=0.37261339174406405,w=0.48591115218918823,x=4.974425529999273 color=yellow,shape=triangle,flag=1,i=78511,u=0.3090135607651209,v=0.319584244585589,w=0.5037872859100175,x=3.6659777896615613 color=purple,shape=circle,flag=0,i=78518,u=0.02997378362120917,v=0.2849862631715253,w=0.5210476640477564,x=6.078375426069524 color=red,shape=triangle,flag=0,i=78519,u=0.36535188450024225,v=0.6497654795848965,w=0.5118617642203704,x=5.583918267247114 color=green,shape=circle,flag=0,i=78543,u=0.3073270814401341,v=0.17546376191912805,w=0.48056072159350577,x=7.176281687856657 color=yellow,shape=square,flag=1,i=78547,u=0.13282556754354702,v=0.9397981737932565,w=0.4853677203748385,x=4.704527629556687 color=red,shape=square,flag=0,i=78574,u=0.7569730973714514,v=0.28387901410752936,w=0.4896860772487533,x=2.399632724285245 color=purple,shape=square,flag=0,i=78587,u=0.7355184641902509,v=0.8667308844638129,w=0.48040716902888597,x=5.630089592509133 color=purple,shape=circle,flag=0,i=78607,u=0.6395519936094233,v=0.1356787278742081,w=0.5199648818553185,x=7.668084970600297 color=red,shape=square,flag=0,i=78612,u=0.47530034099251073,v=0.5027952553898097,w=0.481021281974662,x=5.576210983759033 color=red,shape=triangle,flag=1,i=78614,u=0.4989748467062284,v=0.5669518955374244,w=0.5361012250619259,x=4.5704219095663525 color=blue,shape=square,flag=1,i=78618,u=0.9748286383197624,v=0.49788586961809767,w=0.5127826880144537,x=5.0302576741161475 color=red,shape=triangle,flag=0,i=78621,u=0.8281590339412406,v=0.33150732441922304,w=0.5302294387919646,x=3.807563159727275 color=purple,shape=circle,flag=0,i=78636,u=0.45569968348308565,v=0.721551340416129,w=0.5114370843244953,x=5.273815430434352 color=yellow,shape=circle,flag=1,i=78666,u=0.5186048502264816,v=0.7108834302471597,w=0.5379739558462163,x=4.682291852346103 color=blue,shape=triangle,flag=0,i=78673,u=0.6794412492092253,v=0.04913814530242255,w=0.48676103108023333,x=6.044560312835642 color=red,shape=square,flag=1,i=78675,u=0.4695366829497617,v=0.6515037752856159,w=0.48505664023964234,x=1.1132941036620763 color=blue,shape=square,flag=0,i=78691,u=0.4931797922903194,v=0.5089204399306346,w=0.5133268038924338,x=6.087833963069808 color=red,shape=circle,flag=0,i=78692,u=0.6767400847978318,v=0.6020890855531064,w=0.47248071373744044,x=6.8287916640813044 color=purple,shape=square,flag=0,i=78718,u=0.8967685342713414,v=0.8709093934964588,w=0.48398481664548265,x=2.0978736704389136 color=yellow,shape=triangle,flag=1,i=78728,u=0.15431974888539235,v=0.6290652046968342,w=0.49834984222823364,x=4.771077868403118 color=blue,shape=square,flag=0,i=78729,u=0.011127578786497838,v=0.3804970445991629,w=0.5121523979759478,x=2.8930631384568133 color=yellow,shape=triangle,flag=0,i=78732,u=0.8607044590768693,v=0.35579776123387674,w=0.502156275375239,x=5.021614890364703 color=red,shape=triangle,flag=0,i=78743,u=0.006407233865938555,v=0.3805170919425195,w=0.5080342527620084,x=2.6188600831210653 color=blue,shape=circle,flag=0,i=78755,u=0.8077579792612988,v=0.27358325538981876,w=0.4744143093917175,x=3.5054136432182434 color=yellow,shape=square,flag=1,i=78766,u=0.059408461514058986,v=0.8154295145258834,w=0.4886042406379574,x=6.070185318503744 color=orange,shape=triangle,flag=1,i=78776,u=0.7620238194322251,v=0.8886560286032301,w=0.4818367746429384,x=3.831342492780672 color=purple,shape=circle,flag=0,i=78778,u=0.3591853262732747,v=0.42900409186154564,w=0.515109496418418,x=4.7391181805104425 color=purple,shape=triangle,flag=0,i=78779,u=0.1487264446206331,v=0.6547189200253156,w=0.512635712721492,x=6.589435914769717 color=yellow,shape=square,flag=1,i=78780,u=0.9124063702109222,v=0.7723557563057873,w=0.4866835002111276,x=5.55042027283877 color=purple,shape=circle,flag=0,i=78809,u=0.6054028830430566,v=0.17509150076499358,w=0.5136396295754986,x=5.988679150218251 color=red,shape=square,flag=0,i=78824,u=0.7975694132287922,v=0.36067760105922897,w=0.5062509124675325,x=5.574468513407841 color=red,shape=triangle,flag=0,i=78827,u=0.09224952297092448,v=0.2729071335254831,w=0.5156253872284782,x=3.2897089404732522 color=blue,shape=square,flag=1,i=78844,u=0.16659716319004625,v=0.7748445504157822,w=0.5142652785660647,x=6.66097206271499 color=green,shape=triangle,flag=0,i=78849,u=0.4435473664731624,v=0.41347152717235636,w=0.48223904442941073,x=4.006726741119238 color=purple,shape=circle,flag=0,i=78850,u=0.943553550286837,v=0.10544929080493914,w=0.5190718420719124,x=6.0451921114602944 color=yellow,shape=square,flag=1,i=78860,u=0.0585832513649065,v=0.6474958047240276,w=0.49220072738490284,x=4.568219073738864 color=yellow,shape=square,flag=1,i=78864,u=0.5099682078558174,v=0.7001189979289515,w=0.4957162434212332,x=5.365185853750901 color=purple,shape=triangle,flag=0,i=78871,u=0.9333415825480972,v=0.9700311705333038,w=0.5103879915262132,x=6.07730214846839 color=purple,shape=square,flag=0,i=78881,u=0.6170354361847651,v=0.45342414469779957,w=0.4811556900653034,x=5.116399204100104 color=green,shape=circle,flag=0,i=78885,u=0.42942817004051803,v=0.6028826289495663,w=0.49199068923681555,x=4.224041498560072 color=blue,shape=triangle,flag=0,i=78888,u=0.8134201319114985,v=0.8213739103688027,w=0.4828251444520929,x=6.339805363413824 color=blue,shape=square,flag=1,i=78904,u=0.48117018883394225,v=0.1853716874275697,w=0.5071294386414359,x=3.8935840387677785 color=yellow,shape=triangle,flag=1,i=78911,u=0.5252787192402597,v=0.3203486748855435,w=0.5087749233644241,x=5.601303590159087 color=red,shape=triangle,flag=0,i=78916,u=0.8967439828977617,v=0.6222625716112746,w=0.5193843377667596,x=5.871054898606155 color=orange,shape=circle,flag=0,i=78924,u=0.6545453967991703,v=0.2867944566035391,w=0.4743715180305014,x=5.352136458694123 color=yellow,shape=triangle,flag=0,i=78926,u=0.8958867934253948,v=0.10746979653290634,w=0.5046171347183478,x=6.052478922172219 color=blue,shape=square,flag=1,i=78928,u=0.7086999416718613,v=0.1285870562315632,w=0.5057580997218196,x=3.8274562014905933 color=blue,shape=circle,flag=1,i=78934,u=0.6740778042345809,v=0.19996267031658865,w=0.46636276853581987,x=6.014731640556275 color=blue,shape=triangle,flag=0,i=78935,u=0.15035382200358538,v=0.4096368944186668,w=0.4834475946120639,x=2.7484092712834176 color=blue,shape=triangle,flag=1,i=78937,u=0.9384197362965879,v=0.2946936045173627,w=0.4835553873322687,x=6.480964392023829 color=red,shape=circle,flag=0,i=78954,u=0.6174878699286632,v=0.6983784143207769,w=0.4993917513080853,x=4.068449784886343 color=yellow,shape=triangle,flag=1,i=78971,u=0.7828844802795552,v=0.6456594443219873,w=0.5046676416687235,x=5.769783442243234 color=blue,shape=square,flag=1,i=78974,u=0.26119742104092325,v=0.23775889051050825,w=0.5142127056452043,x=6.325423443506 color=yellow,shape=square,flag=1,i=78977,u=0.27745763826887204,v=0.5258880293681799,w=0.5012656771704572,x=4.623099240411954 color=red,shape=square,flag=0,i=78987,u=0.4890945668630936,v=0.8462112891876167,w=0.5059371357777522,x=4.738106673225415 color=blue,shape=circle,flag=1,i=78988,u=0.7392551502685211,v=0.2884451315196527,w=0.4696460499819925,x=4.157670926261769 color=purple,shape=circle,flag=0,i=78989,u=0.5239269467434411,v=0.12194627567096217,w=0.5186145964223063,x=2.860527323988938 color=purple,shape=square,flag=1,i=78991,u=0.7245239497949775,v=0.9900719301718675,w=0.49951408699053557,x=5.071267402261118 color=purple,shape=triangle,flag=0,i=79002,u=0.16266169671633302,v=0.8929664290886613,w=0.5127198203118545,x=5.22989298990311 color=red,shape=triangle,flag=1,i=79006,u=0.5358183473401142,v=0.7980309789542206,w=0.5111166549169541,x=5.086362784504239 color=red,shape=triangle,flag=1,i=79009,u=0.5560476744525559,v=0.020714619871965545,w=0.5099561431182376,x=3.7931117798082767 color=red,shape=square,flag=0,i=79017,u=0.4258790047671537,v=0.6520098494886234,w=0.4984074273349598,x=4.505869704612273 color=red,shape=square,flag=0,i=79022,u=0.7424390908363775,v=0.5984268063149127,w=0.5010650034056413,x=4.89925152173891 color=green,shape=square,flag=0,i=79023,u=0.4610479147534501,v=0.943900513077834,w=0.5030645986196268,x=4.755916605811492 color=yellow,shape=square,flag=1,i=79047,u=0.17375789907264516,v=0.6520212237260526,w=0.4943061627310351,x=4.51650982224826 color=red,shape=square,flag=0,i=79071,u=0.6156755920110408,v=0.8875180722680661,w=0.48793252872533105,x=5.58771609194477 color=yellow,shape=square,flag=1,i=79081,u=0.5877485327198827,v=0.6662970180636223,w=0.49253991018112214,x=7.171552773839032 color=yellow,shape=circle,flag=0,i=79096,u=0.03148183941160598,v=0.6082202098818508,w=0.5311468948151284,x=6.3539378438110345 color=green,shape=square,flag=0,i=79101,u=0.9730598969081158,v=0.2475685374260561,w=0.4964283442857959,x=3.164485787625679 color=blue,shape=triangle,flag=0,i=79122,u=0.8071404691242077,v=0.2744377649312486,w=0.48611397696260467,x=6.146215988906477 color=yellow,shape=circle,flag=1,i=79131,u=0.38576815006939125,v=0.26317615945804984,w=0.5256497972917057,x=6.21976242364832 color=blue,shape=square,flag=1,i=79156,u=0.7889153676149613,v=0.38024626195661315,w=0.49453841493333456,x=5.160063711659489 color=blue,shape=circle,flag=1,i=79166,u=0.3956980557805423,v=0.30467683831929016,w=0.47720041000468705,x=3.295349566013487 color=green,shape=circle,flag=0,i=79170,u=0.7447373508800587,v=0.2479806371057497,w=0.4959471189926129,x=6.3149741158844845 color=red,shape=square,flag=0,i=79191,u=0.7272981520260766,v=0.9146553500494844,w=0.4789888614054285,x=3.280849483936364 color=red,shape=triangle,flag=0,i=79199,u=0.058347954591589146,v=0.33543986840004614,w=0.5095995229136923,x=3.6941500494377544 color=red,shape=circle,flag=1,i=79201,u=0.39660402982233844,v=0.4376837839769812,w=0.5018749698934021,x=4.2386855611061085 color=blue,shape=triangle,flag=1,i=79203,u=0.4214364163268637,v=0.32370795542344566,w=0.4870665506510103,x=7.8471832711619145 color=red,shape=triangle,flag=0,i=79229,u=0.3224087408609303,v=0.9322104070718528,w=0.5142666321007043,x=5.2066085793174635 color=purple,shape=triangle,flag=0,i=79240,u=0.5278051157923712,v=0.4801124541920866,w=0.5260585122427309,x=3.949301724816762 color=red,shape=triangle,flag=0,i=79241,u=0.6823237191056968,v=0.6237557048298875,w=0.5089074668844323,x=6.988118207680359 color=red,shape=square,flag=0,i=79261,u=0.23604184263762729,v=0.7065381003913147,w=0.4843472565321945,x=3.10221460495729 color=yellow,shape=square,flag=1,i=79285,u=0.5754178025720357,v=0.25692588609685396,w=0.4865771364699389,x=4.818831415267984 color=red,shape=circle,flag=1,i=79288,u=0.7923924944720981,v=0.8153849543138612,w=0.5097698278905594,x=4.320376694529966 color=red,shape=square,flag=1,i=79293,u=0.08276877045706355,v=0.8300083834421527,w=0.47864426023029505,x=4.011645661459549 color=blue,shape=triangle,flag=1,i=79310,u=0.302302269103624,v=0.12749257150961324,w=0.4894941107169753,x=3.2084134917991043 color=red,shape=square,flag=0,i=79311,u=0.09619032284802886,v=0.5034145674410632,w=0.4663228710752538,x=6.1631969831902 color=yellow,shape=triangle,flag=1,i=79312,u=0.2033885527538184,v=0.18932579661468651,w=0.4969740105828321,x=7.5198734677343 color=blue,shape=triangle,flag=1,i=79313,u=0.9846547748836074,v=0.4169770959345305,w=0.4935500529621402,x=6.67534437770552 color=yellow,shape=square,flag=1,i=79316,u=0.9021696568169558,v=0.39939774692887364,w=0.4862560527322492,x=5.125095237594603 color=red,shape=square,flag=0,i=79317,u=0.4143546387275874,v=0.1900846094333244,w=0.4681448453579504,x=7.3047454107224405 color=red,shape=triangle,flag=0,i=79319,u=0.6176221455637819,v=0.7568725792652309,w=0.5105802264984762,x=5.051303585630667 color=blue,shape=square,flag=1,i=79325,u=0.8899735076542671,v=0.31767407575956963,w=0.5000652207751421,x=4.886804862237104 color=red,shape=square,flag=0,i=79335,u=0.622005311603634,v=0.8600197259002501,w=0.46434698368213034,x=4.945882803655408 color=red,shape=square,flag=1,i=79346,u=0.6788617665004296,v=0.23752400227706738,w=0.4618530345276877,x=7.562080945878709 color=yellow,shape=square,flag=1,i=79355,u=0.003843266145860502,v=0.11031077277988544,w=0.4780646050115228,x=5.537787491226869 color=blue,shape=circle,flag=1,i=79356,u=0.18536216857603882,v=0.766683800229544,w=0.47894262484882694,x=4.845417400769171 color=red,shape=triangle,flag=0,i=79389,u=0.08390279424627389,v=0.42128820339301964,w=0.5301501586156777,x=5.955357810985476 color=purple,shape=triangle,flag=0,i=79391,u=0.4114177867065415,v=0.6208023328132486,w=0.5292858463152981,x=4.907496282964897 color=red,shape=square,flag=0,i=79395,u=0.3399895409812538,v=0.5835278917409553,w=0.4604881603059351,x=3.470841473463859 color=blue,shape=square,flag=1,i=79397,u=0.5976538062013957,v=0.018446772908260467,w=0.5047032856867655,x=5.647345848907235 color=red,shape=square,flag=0,i=79409,u=0.3393818117339277,v=0.029519295484499053,w=0.4597172202042671,x=4.016968861789205 color=red,shape=triangle,flag=0,i=79419,u=0.45797621996903226,v=0.9716933472003787,w=0.5301435759685531,x=4.757786619819228 color=green,shape=square,flag=0,i=79430,u=0.17479008715482935,v=0.37270908756264987,w=0.49645323741937925,x=4.940492146668691 color=blue,shape=square,flag=1,i=79437,u=0.7850470706131807,v=0.4109944246121302,w=0.5005269616825161,x=4.987884724347951 color=purple,shape=square,flag=0,i=79462,u=0.605194065511209,v=0.7107823860739754,w=0.5120682313044231,x=6.0802605860822245 color=red,shape=circle,flag=0,i=79481,u=0.9288091142870283,v=0.855206444390143,w=0.5111567326661041,x=6.695596290347343 color=red,shape=circle,flag=0,i=79498,u=0.558019909019613,v=0.4593248665826407,w=0.5199755823371071,x=7.919128399765235 color=yellow,shape=triangle,flag=1,i=79508,u=0.6436766603182998,v=0.44465339319781105,w=0.5046666572164952,x=3.8879478747231393 color=green,shape=triangle,flag=1,i=79509,u=0.09731595843961205,v=0.6461191795308754,w=0.47098447685180966,x=6.899896991680443 color=yellow,shape=square,flag=0,i=79519,u=0.5176399386787562,v=0.44453628697996483,w=0.47033778575495144,x=3.7420359667387206 color=red,shape=triangle,flag=0,i=79525,u=0.5936884074604519,v=0.7078740650967525,w=0.5260029570220314,x=5.1026549528846665 color=green,shape=square,flag=0,i=79541,u=0.2882516102599727,v=0.2777661423178951,w=0.49783135593555417,x=4.024689781740826 color=green,shape=circle,flag=0,i=79547,u=0.3438974955989943,v=0.0813639105363434,w=0.5030798588971864,x=8.150963821504002 color=red,shape=square,flag=0,i=79553,u=0.20883250533979125,v=0.8362310032413758,w=0.46354353838381235,x=4.903372469209553 color=red,shape=square,flag=1,i=79556,u=0.8497185651541359,v=0.2718889152936008,w=0.4643907226308197,x=6.83054693652392 color=red,shape=circle,flag=1,i=79572,u=0.9605717848579287,v=1.0112713173932795,w=0.5176800276706987,x=4.838156817294856 color=red,shape=triangle,flag=0,i=79576,u=0.3278641394468932,v=0.40171121510569163,w=0.5252098744191269,x=5.226328014597578 color=purple,shape=circle,flag=0,i=79586,u=0.3376814788001681,v=0.042577799296216634,w=0.5210180415497392,x=4.277102481445268 color=purple,shape=square,flag=0,i=79587,u=0.05076109484633573,v=0.3185921079309624,w=0.5179047094595288,x=4.534790004968021 color=purple,shape=square,flag=0,i=79598,u=0.02461768720734958,v=0.4497138793212936,w=0.5167117828111896,x=5.4924049294601645 color=yellow,shape=circle,flag=1,i=79604,u=0.3333607940710924,v=0.7969360620675239,w=0.5252844159593557,x=5.642652918933352 color=red,shape=triangle,flag=1,i=79634,u=0.7944811169957301,v=0.8726220975852376,w=0.5058710548383101,x=5.663673584390932 color=green,shape=triangle,flag=1,i=79646,u=0.08381170034644447,v=0.8605287123539986,w=0.4906448508763901,x=3.6425119498491356 color=red,shape=triangle,flag=0,i=79647,u=0.7849593560917905,v=0.0025612740347946694,w=0.5059731235562696,x=2.522111924576022 color=red,shape=square,flag=1,i=79655,u=0.3348404262303303,v=0.9846610188547051,w=0.48442710235037906,x=3.9092426564514215 color=yellow,shape=square,flag=1,i=79657,u=0.6428593308131003,v=0.6608182035006832,w=0.46542380962791785,x=3.7132619009894317 color=yellow,shape=square,flag=0,i=79659,u=0.13102872237599117,v=0.7510757252421997,w=0.4667098016885225,x=7.415144742635231 color=red,shape=square,flag=0,i=79660,u=0.3660120644975239,v=0.1869192482321721,w=0.485978626583954,x=6.1516685326283165 color=green,shape=triangle,flag=1,i=79675,u=0.4482510459302451,v=0.7921301599545691,w=0.48793861625658314,x=4.258579582022921 color=red,shape=square,flag=0,i=79679,u=0.2564327054997859,v=0.9365773527927684,w=0.4810803033607526,x=6.579012966050112 color=red,shape=square,flag=0,i=79685,u=0.503601749388099,v=0.7857858924833435,w=0.4845884461100247,x=6.313669872269866 color=blue,shape=square,flag=0,i=79705,u=0.05235505097958093,v=0.6435790814493085,w=0.4968956465602559,x=4.006439315816361 color=red,shape=triangle,flag=0,i=79718,u=0.7872173489030302,v=0.9307698624445959,w=0.5167758988963995,x=3.704579256038856 color=blue,shape=triangle,flag=1,i=79722,u=0.08682653813852848,v=0.2389586792017674,w=0.4931419882010198,x=6.537997081938009 color=green,shape=square,flag=1,i=79724,u=0.19599689663002906,v=0.4400931201352687,w=0.5020444891530043,x=4.838334686559436 color=green,shape=triangle,flag=0,i=79729,u=0.3134960451266987,v=0.1878719518108959,w=0.4944935903784199,x=4.816401760550203 color=yellow,shape=circle,flag=1,i=79738,u=0.3139003060867519,v=0.1387885682212998,w=0.5148213060322916,x=3.234764624781852 color=red,shape=square,flag=0,i=79749,u=0.37244882772007937,v=0.08682910359838336,w=0.47317683383021586,x=3.7312406550641373 color=blue,shape=circle,flag=1,i=79752,u=0.3949899989515271,v=0.09995812583168595,w=0.4772644403277299,x=5.22642124774037 color=yellow,shape=triangle,flag=1,i=79768,u=0.7918096020436663,v=0.24259367893593964,w=0.5059467526969904,x=4.4097596767099025 color=blue,shape=triangle,flag=1,i=79784,u=0.6603864282836619,v=0.9655492680898329,w=0.4899519471535957,x=5.219247395428643 color=red,shape=square,flag=0,i=79789,u=0.5940618421079977,v=0.5806676927481258,w=0.47313672290536224,x=4.603666849260115 color=yellow,shape=triangle,flag=1,i=79796,u=0.5489362122788316,v=0.4268281301587079,w=0.5050779889182377,x=6.695147685507092 color=red,shape=circle,flag=0,i=79802,u=0.3408090469398939,v=0.42535933528799263,w=0.4966867801941816,x=6.131910465507478 color=red,shape=triangle,flag=0,i=79803,u=0.9640371264465135,v=0.07417952975699449,w=0.526207315586203,x=4.566374130132015 color=red,shape=square,flag=0,i=79806,u=0.18950581000889566,v=0.2859698290975977,w=0.4680671506126159,x=3.8647882289363 color=yellow,shape=square,flag=1,i=79814,u=0.3101931471891194,v=0.1525418538953085,w=0.4875072321298923,x=3.253653655747412 color=red,shape=square,flag=0,i=79824,u=0.6587722857084605,v=0.8502483939877142,w=0.47356538928965186,x=7.200369579970798 color=purple,shape=circle,flag=1,i=79832,u=0.548120017531071,v=0.3552888905096304,w=0.5271553600172266,x=4.090689821696762 color=red,shape=triangle,flag=0,i=79842,u=0.3035354615610383,v=0.8710768842992129,w=0.5187216336697482,x=5.062091260847933 color=green,shape=square,flag=0,i=79847,u=0.019403500141540797,v=0.08209044789639452,w=0.4977700255104592,x=4.388952754305449 color=red,shape=triangle,flag=0,i=79854,u=0.6709647670273164,v=0.1110796622708431,w=0.5193251716421644,x=2.6797163666732238 color=red,shape=square,flag=0,i=79857,u=0.7971252951768416,v=0.15274520733521524,w=0.4724608631771495,x=3.176350219281487 color=red,shape=triangle,flag=1,i=79864,u=0.6996650236053583,v=0.4283218588579887,w=0.5157373423741389,x=5.442183846123078 color=purple,shape=square,flag=0,i=79870,u=0.2481769254548858,v=0.501606412821526,w=0.5028209702218303,x=2.9478008833323006 color=red,shape=circle,flag=0,i=79885,u=0.4120263946444137,v=0.49017316806310735,w=0.49754170394049424,x=4.688310355860282 color=blue,shape=circle,flag=0,i=79902,u=0.8629658597673444,v=0.2836167875349973,w=0.4926494587805149,x=4.634395691493609 color=red,shape=triangle,flag=0,i=79907,u=0.4588335351549798,v=0.27462418982501613,w=0.5263845567095322,x=5.3428757567820275 color=purple,shape=circle,flag=0,i=79909,u=0.499713165566278,v=0.3038215879482996,w=0.5313272949087348,x=4.470148893074704 color=red,shape=square,flag=0,i=79911,u=0.056007970832857135,v=0.6970083932352116,w=0.45091074161851635,x=2.589813910793146 color=red,shape=circle,flag=1,i=79913,u=0.8850562556128662,v=0.9763341628808809,w=0.49651821281400343,x=5.172694988602751 color=purple,shape=square,flag=0,i=79916,u=0.8994177515185625,v=0.5629709261388051,w=0.5051989045818918,x=5.523453822296372 color=green,shape=triangle,flag=0,i=79917,u=0.20592177853330706,v=0.407330595444347,w=0.49566689044128037,x=5.389858787896965 color=red,shape=square,flag=0,i=79920,u=0.4298275780314793,v=0.9899741753423438,w=0.4419098130277203,x=6.021336486536975 color=red,shape=square,flag=0,i=79926,u=0.22273303459411498,v=0.13536584170301613,w=0.4499575084470442,x=5.43218185696798 color=orange,shape=triangle,flag=0,i=79931,u=0.38034793624600294,v=0.4913476969577343,w=0.4875678068557107,x=4.328280298916137 color=red,shape=square,flag=1,i=79939,u=0.6583434730152657,v=0.9782445647506394,w=0.45056785610667854,x=3.9622808255847572 color=green,shape=triangle,flag=0,i=79943,u=0.21590085363811606,v=0.3448709809670565,w=0.49000202868366477,x=3.920988522632161 color=blue,shape=square,flag=1,i=79952,u=0.9315314855448646,v=0.9126090907248396,w=0.49356467446101127,x=4.565988537553371 color=red,shape=circle,flag=0,i=79960,u=0.42464460881481514,v=0.3396173000728427,w=0.49930712361417556,x=5.503567077503534 color=blue,shape=square,flag=1,i=79962,u=0.4301285151334293,v=0.9242135620568264,w=0.4956198435331367,x=3.994002151418744 color=yellow,shape=square,flag=1,i=79965,u=0.22622019411622307,v=0.0033001304901467687,w=0.49396072210544356,x=6.007721868583303 color=red,shape=triangle,flag=0,i=79973,u=0.36136224989693144,v=0.6981465309778118,w=0.5243270587516823,x=6.016940675183331 color=red,shape=triangle,flag=0,i=79997,u=0.1576494444367771,v=0.06222734327504997,w=0.5202057116676856,x=7.517636298288419 color=yellow,shape=square,flag=0,i=79998,u=0.4667791334724365,v=0.66972046140167,w=0.4894459598299596,x=6.315702677088665 color=red,shape=circle,flag=1,i=80010,u=0.7868279361217875,v=0.7959717975274792,w=0.4894647683126907,x=4.2743690418930775 color=blue,shape=triangle,flag=0,i=80020,u=0.9783921471346148,v=0.21683880583104198,w=0.47122758885543675,x=4.368489032947065 color=red,shape=triangle,flag=1,i=80030,u=0.8989500616599656,v=0.43774548519105005,w=0.5259436488412276,x=7.513032080229963 color=red,shape=triangle,flag=1,i=80031,u=0.9068187506928986,v=0.21898802740186774,w=0.5299595399291744,x=3.27141672734799 color=red,shape=circle,flag=0,i=80039,u=0.6718574199272026,v=0.6288496878061334,w=0.49254746165738167,x=3.0577187612044407 color=blue,shape=square,flag=1,i=80044,u=0.3274495434420571,v=0.6108724811302428,w=0.4994472565193502,x=3.388444244746052 color=red,shape=circle,flag=0,i=80048,u=0.8316208112929605,v=0.8418396635431125,w=0.49240943413007104,x=3.7039159684118066 color=green,shape=circle,flag=0,i=80057,u=0.26572090937736903,v=0.33287297303128516,w=0.4818400975353708,x=4.5338084407834485 color=green,shape=triangle,flag=0,i=80060,u=0.8932777757462668,v=0.43088475886050126,w=0.4924592053530206,x=5.165388023924138 color=purple,shape=triangle,flag=0,i=80063,u=0.7915510275950732,v=0.21744044632969017,w=0.5178078438536686,x=4.6965274122983365 color=purple,shape=square,flag=0,i=80074,u=0.37745605750823497,v=0.8729948628513216,w=0.5010841384609732,x=5.049496052528739 color=red,shape=triangle,flag=0,i=80089,u=0.886972552465994,v=0.9223375130080247,w=0.5175826912656052,x=5.63439157169535 color=red,shape=triangle,flag=0,i=80090,u=0.44979469055098475,v=0.22390458870419683,w=0.5209310244874763,x=5.752325012950348 color=purple,shape=triangle,flag=0,i=80095,u=0.30757471660098856,v=0.8766076841655448,w=0.5240116281148052,x=6.319367451714549 color=green,shape=square,flag=0,i=80104,u=0.5503343124819645,v=0.5021220030348597,w=0.4943678871873938,x=4.776408569474099 color=red,shape=square,flag=1,i=80132,u=0.8057464595148707,v=0.32703480324111667,w=0.4799108473346855,x=4.6207898690026825 color=green,shape=circle,flag=1,i=80151,u=0.31204011555646627,v=0.9694829436539054,w=0.48626047590682303,x=5.220829654645416 color=green,shape=square,flag=1,i=80157,u=0.2483243851579442,v=0.01651699407656204,w=0.49444045492375654,x=4.880587789735788 color=blue,shape=square,flag=0,i=80163,u=0.38998365593161477,v=0.6052995452458801,w=0.4913874615939241,x=3.1660192186716807 color=red,shape=triangle,flag=0,i=80186,u=0.24042834558616866,v=0.6120650342363653,w=0.49260734602938205,x=3.193384454484519 color=yellow,shape=triangle,flag=1,i=80188,u=0.022848118481146873,v=0.4632874207073766,w=0.4964950169440125,x=5.601571379617769 color=red,shape=circle,flag=0,i=80195,u=0.7694660952205691,v=0.713629559094739,w=0.48789347690001594,x=5.040152534821419 color=yellow,shape=triangle,flag=1,i=80224,u=0.8711192484765315,v=0.4924438431341892,w=0.5025745010194284,x=3.7684192583013214 color=red,shape=circle,flag=0,i=80232,u=0.7909891627314936,v=0.6967399709781779,w=0.48795335882350876,x=2.129944856995 color=purple,shape=circle,flag=0,i=80236,u=0.7250023187759362,v=0.4719935479721763,w=0.5156937019190284,x=3.2839184707766975 color=orange,shape=triangle,flag=1,i=80248,u=0.690990824052148,v=0.6523015134991966,w=0.48912678574092905,x=6.058105458863224 color=orange,shape=square,flag=1,i=80253,u=0.6615272419000529,v=0.09143617495971179,w=0.5091738235027199,x=3.979554693223335 color=red,shape=triangle,flag=0,i=80282,u=0.3761928060408076,v=0.2739392032581741,w=0.482668851289034,x=6.165974375258287 color=purple,shape=square,flag=0,i=80299,u=0.3416842440819282,v=0.9550556495942709,w=0.4996458047835978,x=4.348183474630548 color=green,shape=triangle,flag=0,i=80335,u=0.6006870409480494,v=0.005656146396773809,w=0.501414387418723,x=4.143834807239776 color=red,shape=triangle,flag=0,i=80361,u=0.6212867536081688,v=0.8346035922210256,w=0.48130044503609465,x=3.554730751346824 color=yellow,shape=circle,flag=1,i=80368,u=0.4506187362814901,v=0.9574905567495345,w=0.522705273579471,x=5.295362701749678 color=green,shape=circle,flag=0,i=80369,u=0.44907494005796145,v=0.6326957323133965,w=0.4898913514670375,x=4.665061005323544 color=yellow,shape=square,flag=0,i=80372,u=0.2928109790365885,v=0.4741500033357211,w=0.47034667996595264,x=5.909410894277826 color=red,shape=square,flag=0,i=80376,u=0.21917524756134998,v=0.2994065258861244,w=0.4814303423692874,x=4.793838162146657 color=blue,shape=square,flag=1,i=80379,u=0.11976300680737628,v=0.8390272412678051,w=0.49343597536419836,x=6.917578217608042 color=red,shape=square,flag=0,i=80391,u=0.9699115737738526,v=0.8214738093360542,w=0.4878503850985437,x=3.5864444538586135 color=red,shape=square,flag=0,i=80392,u=0.18835009762098598,v=0.4595575122650062,w=0.4890766865306696,x=5.396313657396367 color=blue,shape=triangle,flag=1,i=80415,u=0.003821253427345628,v=0.3457366428739148,w=0.4868916123767053,x=6.733474814312726 color=red,shape=square,flag=0,i=80416,u=0.7276519608703166,v=0.2804003014919929,w=0.47980196450454765,x=2.9975750720157097 color=red,shape=circle,flag=1,i=80419,u=0.5931971965534922,v=0.596169410899892,w=0.503255438061614,x=4.93076717815815 color=red,shape=circle,flag=0,i=80421,u=0.7143443397446484,v=0.8109939252650021,w=0.499975909788949,x=3.297748148109701 color=yellow,shape=circle,flag=1,i=80422,u=0.07476741533304199,v=0.5150419734511656,w=0.5156345723078775,x=3.6863057565111355 color=red,shape=triangle,flag=0,i=80423,u=0.15223312461894956,v=0.6885067716576594,w=0.48268591118049525,x=5.852628138931508 color=red,shape=circle,flag=1,i=80428,u=0.870763185999346,v=0.847930369727079,w=0.4965320536393585,x=4.7052358193175 color=blue,shape=square,flag=1,i=80442,u=0.15422360854574735,v=0.8215012254178151,w=0.48641673564503524,x=4.118061232137882 color=purple,shape=square,flag=0,i=80461,u=0.6060907653129965,v=0.8912975875554006,w=0.4927284992336668,x=4.624253628719714 color=purple,shape=circle,flag=0,i=80475,u=0.17365147913024592,v=0.6162643012858035,w=0.5213604483108598,x=6.856389963271934 color=green,shape=square,flag=0,i=80479,u=0.14761502249105485,v=0.02076685288738145,w=0.48300193177878625,x=4.002196520332066 color=red,shape=circle,flag=0,i=80483,u=0.3630537582837837,v=0.4442539362783049,w=0.5015674013509037,x=5.241719893804957 color=red,shape=square,flag=0,i=80486,u=0.5296312717280713,v=0.687352915743534,w=0.5004677822300945,x=4.710699075037799 color=red,shape=circle,flag=1,i=80487,u=0.5380076191014402,v=0.556704339362353,w=0.5059564481336482,x=4.868603531538355 color=red,shape=triangle,flag=1,i=80539,u=0.9600753999833448,v=0.8781008059492228,w=0.4798566146445525,x=5.443788305242998 color=blue,shape=square,flag=0,i=80541,u=0.4366913412646968,v=0.44062231562140364,w=0.5079708564146506,x=5.899330192660174 color=blue,shape=circle,flag=1,i=80543,u=0.5726470627314059,v=0.48516993577967726,w=0.5146473174155888,x=6.518649730178282 color=yellow,shape=triangle,flag=1,i=80552,u=0.5250765506134357,v=0.45260818585592133,w=0.5057693949523865,x=6.465116306039182 color=purple,shape=triangle,flag=0,i=80570,u=0.2913975034291644,v=0.6240564483648665,w=0.5200190639546951,x=4.734298252985626 color=blue,shape=circle,flag=1,i=80577,u=0.38257658465133737,v=0.22342161067094857,w=0.5134986105201723,x=5.299673503176932 color=green,shape=square,flag=0,i=80585,u=0.5845870841769435,v=0.16989910138000985,w=0.4842137639232346,x=6.533938932788195 color=red,shape=triangle,flag=1,i=80590,u=0.01211709305625508,v=0.6542842955383379,w=0.46683756906199836,x=6.694435487614079 color=red,shape=square,flag=0,i=80592,u=0.22100124014115852,v=0.8752589509570184,w=0.48380311383457325,x=2.8064383834836266 color=yellow,shape=square,flag=1,i=80599,u=0.20702757674793437,v=0.4556432121341488,w=0.475970376670478,x=6.099558421283923 color=red,shape=triangle,flag=1,i=80612,u=0.8493398658355825,v=0.7549886112265968,w=0.46706240377552416,x=5.122260995854644 color=yellow,shape=triangle,flag=1,i=80620,u=0.3628940097962684,v=0.5370714944020242,w=0.5025279239959358,x=6.606825693748306 color=green,shape=square,flag=0,i=80626,u=0.9780048126964492,v=0.141895498946788,w=0.48570359582727674,x=6.268722854758162 color=blue,shape=triangle,flag=0,i=80637,u=0.9291997875710609,v=0.7347377367941812,w=0.5033993272428519,x=4.152676077598887 color=red,shape=triangle,flag=0,i=80646,u=0.8795236343853282,v=0.989995020207047,w=0.46705123377769253,x=4.9250368129016735 color=red,shape=circle,flag=0,i=80649,u=0.3337430288480052,v=0.3935519602756101,w=0.5119701378758255,x=4.573256871979468 color=yellow,shape=triangle,flag=1,i=80651,u=0.9474523792919719,v=0.2341362231602162,w=0.49857903039142704,x=5.489545325585954 color=red,shape=square,flag=1,i=80659,u=0.09899205030204361,v=0.44634819776935863,w=0.4795918144654544,x=3.472980762354491 color=purple,shape=circle,flag=0,i=80676,u=0.9505735706366919,v=0.8140593727204981,w=0.5192695320870152,x=5.984019524223947 color=red,shape=circle,flag=0,i=80678,u=0.36295149702465124,v=0.40646382607705583,w=0.5059112323444674,x=6.269492223112832 color=red,shape=circle,flag=0,i=80680,u=0.49460239713735754,v=0.5858473027520993,w=0.5103140183313618,x=5.969527336505943 color=purple,shape=triangle,flag=0,i=80690,u=0.7813183541235384,v=0.6997154610346155,w=0.509569021204282,x=4.222041428961673 color=green,shape=square,flag=0,i=80703,u=0.7822540503348718,v=0.08013996555041669,w=0.49241047522758513,x=2.7597989252805486 color=green,shape=triangle,flag=1,i=80707,u=0.06260924555516012,v=0.7101003570056101,w=0.5131727957160952,x=5.0293390816826795 color=green,shape=triangle,flag=0,i=80713,u=0.03807871259249562,v=0.8976223083051812,w=0.5112083554477538,x=3.497888419816359 color=red,shape=triangle,flag=0,i=80732,u=0.785938553457258,v=0.16229784429792316,w=0.47259997127022535,x=3.324415447538995 color=yellow,shape=square,flag=0,i=80735,u=0.40881668370453206,v=0.7524785987059216,w=0.46533051220525096,x=3.328199759452083 color=yellow,shape=circle,flag=1,i=80740,u=0.5221258127500068,v=0.8125094586675005,w=0.5277675875460986,x=4.74253682823263 color=green,shape=triangle,flag=0,i=80749,u=0.5703422839342319,v=0.5454564484497564,w=0.5112587904530268,x=6.2911196875690285 color=red,shape=triangle,flag=0,i=80757,u=0.5317900235255633,v=0.5453638928280089,w=0.46787756269773456,x=2.933557903412217 color=yellow,shape=triangle,flag=1,i=80772,u=0.7950413330161353,v=0.04276419461600012,w=0.49056177043283267,x=5.903159849736873 color=red,shape=circle,flag=1,i=80794,u=0.6330247151181408,v=0.5332857027215929,w=0.5040563967389192,x=3.7534610955933503 color=red,shape=circle,flag=0,i=80802,u=0.21713525023295177,v=0.24068187508806013,w=0.49825346149351213,x=5.014860495232035 color=green,shape=circle,flag=0,i=80814,u=0.4574061763010573,v=0.9417799573750492,w=0.489674911091246,x=6.95460940681949 color=red,shape=circle,flag=1,i=80815,u=0.8453610587594265,v=0.7471583858532046,w=0.49535881803605625,x=4.08414183849149 color=purple,shape=circle,flag=0,i=80818,u=0.5115798925578537,v=0.36638325781829906,w=0.5265729123510134,x=4.990522307245661 color=blue,shape=triangle,flag=1,i=80824,u=0.603429424713317,v=0.21992051153814896,w=0.5100652075855192,x=3.620198797468316 color=red,shape=circle,flag=0,i=80825,u=0.7117420277337698,v=0.7375692252591715,w=0.4889105336210068,x=4.582913678497223 color=yellow,shape=square,flag=1,i=80836,u=0.43465836968032945,v=0.2944947078665102,w=0.46697650141474073,x=6.658973805782234 color=red,shape=square,flag=0,i=80839,u=0.8371620369493814,v=0.6771433708990082,w=0.5059990622054875,x=3.106148250800141 color=red,shape=triangle,flag=1,i=80852,u=0.35449890659767846,v=0.07336712962788716,w=0.46903218929105817,x=4.192224035496229 color=red,shape=triangle,flag=0,i=80853,u=0.16136751777606406,v=0.48175571562672914,w=0.46477231651483153,x=5.131614889172382 color=purple,shape=circle,flag=0,i=80854,u=0.3839059058165204,v=0.7114527036095148,w=0.5286248827284201,x=4.614031159897478 color=red,shape=triangle,flag=1,i=80856,u=0.30106948192181104,v=0.38283761752744194,w=0.46423951546746817,x=3.9816470731351203 color=blue,shape=circle,flag=1,i=80864,u=0.43424017075552024,v=0.7386606286551116,w=0.5256578678163965,x=4.360331312846383 color=purple,shape=triangle,flag=0,i=80875,u=0.4438546857091278,v=0.3983761756243145,w=0.5070794649556897,x=5.190230177446805 color=green,shape=square,flag=0,i=80877,u=0.1007375489625546,v=0.03141297060586479,w=0.4835687499927464,x=5.71881455330282 color=red,shape=triangle,flag=1,i=80889,u=0.318117456406819,v=0.8121194379610589,w=0.46832533745164906,x=4.897841618104257 color=green,shape=triangle,flag=1,i=80898,u=0.7331574867859811,v=0.007731669484874915,w=0.5081942839412676,x=3.964469330379886 color=orange,shape=square,flag=0,i=80904,u=0.9261109525714024,v=0.16902139574077724,w=0.519976661970576,x=4.609320571081436 color=yellow,shape=triangle,flag=1,i=80905,u=0.3510397345773142,v=0.06629861469260812,w=0.49387945441415654,x=6.089738612436837 color=red,shape=triangle,flag=0,i=80921,u=0.7295708066033625,v=0.6210928004006522,w=0.48063645401742666,x=5.047097096313824 color=green,shape=triangle,flag=0,i=80933,u=0.8685663483162033,v=0.7341494559127941,w=0.5048333947154192,x=6.081161567166447 color=purple,shape=circle,flag=0,i=80945,u=0.07296484848003104,v=0.6583384983125776,w=0.5171712867995383,x=4.175973363809756 color=blue,shape=circle,flag=0,i=80947,u=0.21335121388388822,v=0.0306064859968328,w=0.5236855132652346,x=4.760485925362123 color=green,shape=triangle,flag=0,i=80960,u=0.9781079124168008,v=0.7691822319895872,w=0.5070264988340502,x=3.3553852374472974 color=blue,shape=triangle,flag=1,i=80968,u=0.4682411828614066,v=0.8698965430522557,w=0.5062972996688164,x=4.535436595565735 color=green,shape=triangle,flag=0,i=80969,u=0.9305510412124427,v=0.805055390123565,w=0.511787932663312,x=5.3595341969361625 color=blue,shape=triangle,flag=1,i=80997,u=0.5354871615741676,v=0.6741058023591125,w=0.5052100419645796,x=5.716551834053451 color=red,shape=triangle,flag=1,i=80998,u=0.25439394796168535,v=0.445601055359785,w=0.4830174871083399,x=6.881969601049451 color=green,shape=square,flag=1,i=81011,u=0.16931285750707004,v=0.3932111283293588,w=0.48246980376488385,x=4.540884687311148 color=blue,shape=circle,flag=0,i=81031,u=0.48029339354185263,v=0.44990213404584367,w=0.5279659590533214,x=4.580907529525736 color=orange,shape=square,flag=1,i=81032,u=0.6733733597680485,v=0.11932676365927153,w=0.5212104567295263,x=4.778217035739361 color=red,shape=triangle,flag=0,i=81043,u=0.9826723310764041,v=0.7597238558443249,w=0.48173988485257707,x=3.9232671611948136 color=purple,shape=square,flag=0,i=81046,u=0.7691069167479181,v=0.032625541005836256,w=0.4862093878948887,x=6.304459636731554 color=blue,shape=circle,flag=1,i=81047,u=0.7511134566561493,v=0.849374323078136,w=0.5272258279560779,x=5.500474857166767 color=red,shape=triangle,flag=1,i=81050,u=0.9311215590875397,v=0.23976521113695926,w=0.476699887510756,x=2.7719362249268538 color=yellow,shape=square,flag=1,i=81060,u=0.9453487737189021,v=0.8534094187280329,w=0.4737613849671166,x=6.253098182151933 color=orange,shape=triangle,flag=0,i=81075,u=0.18455162894565746,v=0.8900612513224546,w=0.4802491971007073,x=6.460176596997393 color=red,shape=triangle,flag=0,i=81094,u=0.04880754225430084,v=0.8933576967724739,w=0.4878637072164853,x=6.133531821368554 color=yellow,shape=triangle,flag=1,i=81106,u=0.7344102721075413,v=0.4426238198478445,w=0.4942209732306668,x=3.0337258831598306 color=blue,shape=square,flag=0,i=81107,u=0.503762184381541,v=0.739686967268895,w=0.4945565834284612,x=6.831250561965329 color=blue,shape=square,flag=1,i=81110,u=0.9699949015565439,v=0.012275531396004569,w=0.4975542402582834,x=3.0954450837583702 color=red,shape=triangle,flag=0,i=81117,u=0.22075802373600872,v=0.43177808102968285,w=0.4920843807244184,x=3.3257267267795467 color=red,shape=circle,flag=0,i=81130,u=0.6889398213680793,v=0.6970537518456349,w=0.4963974017373721,x=4.911286103649867 color=purple,shape=square,flag=0,i=81157,u=0.9640184490993524,v=0.16215921660800925,w=0.4818539250098085,x=4.487679740771076 color=red,shape=square,flag=0,i=81160,u=0.4215482560635301,v=0.595620451511917,w=0.5200426592817691,x=4.946783272019761 color=red,shape=square,flag=0,i=81176,u=0.3282311760023535,v=0.1887749655018911,w=0.5192574597681919,x=4.987244211463204 color=purple,shape=triangle,flag=0,i=81199,u=0.7983660199431438,v=0.08097005074748809,w=0.5073715774247403,x=2.5949038482568954 color=purple,shape=square,flag=0,i=81208,u=0.1525077300705856,v=0.6559322775785215,w=0.4840115807432963,x=4.863790663371244 color=green,shape=square,flag=1,i=81213,u=0.9704203860986943,v=0.38149034726511344,w=0.4845375767505428,x=4.050148078245072 color=yellow,shape=square,flag=1,i=81217,u=0.2789887446731357,v=0.8993149491642233,w=0.4903002741463905,x=3.566559931788932 color=yellow,shape=circle,flag=1,i=81230,u=0.4371608508573076,v=0.8425572359734482,w=0.5388144093850497,x=4.718924920114666 color=yellow,shape=square,flag=1,i=81283,u=0.6765654484340974,v=0.4072997798037028,w=0.4992190864581606,x=3.720460443206887 color=blue,shape=square,flag=0,i=81295,u=0.7468634502298326,v=0.45874270106489135,w=0.4986880302610183,x=6.492520018164465 color=green,shape=triangle,flag=0,i=81313,u=0.28373655325255565,v=0.1756479577949659,w=0.5158588310027669,x=4.205533272838828 color=red,shape=square,flag=0,i=81317,u=0.5734455761672053,v=0.3951462921681146,w=0.5068549371021885,x=4.4474381043866105 color=blue,shape=triangle,flag=0,i=81328,u=0.5947997793104784,v=0.22877115751397348,w=0.49365699194985563,x=5.178076625308762 color=red,shape=triangle,flag=0,i=81333,u=0.5080757197799637,v=0.9593078266744622,w=0.5063717725934735,x=4.919330236232047 color=red,shape=circle,flag=0,i=81342,u=0.32922398844282796,v=0.42465918247230633,w=0.49580639616775063,x=5.785344684127675 color=red,shape=triangle,flag=0,i=81357,u=0.3989645338918619,v=0.07068375177736086,w=0.5014017028858937,x=4.833864274612641 color=red,shape=square,flag=0,i=81358,u=0.31216236772743844,v=0.5362913765535935,w=0.4976717195823757,x=5.569486386010156 color=yellow,shape=circle,flag=1,i=81388,u=0.6997189562713367,v=0.01571941399993837,w=0.5266868789549263,x=5.411158184044324 color=red,shape=triangle,flag=0,i=81394,u=0.17970011316136447,v=0.723950847402832,w=0.48781900887291796,x=5.955795221618423 color=red,shape=circle,flag=1,i=81397,u=0.48264763070207206,v=0.5029292318117448,w=0.49433451884229757,x=4.83575345381074 color=blue,shape=square,flag=0,i=81399,u=0.011889263693010022,v=0.41880540970805713,w=0.5075269936798311,x=5.784389369817901 color=blue,shape=triangle,flag=0,i=81400,u=0.17392580476712072,v=0.9206399419944473,w=0.4920361413777392,x=4.471542765820451 color=red,shape=triangle,flag=0,i=81401,u=0.47619512177381973,v=0.9351158079079561,w=0.4833701216798004,x=2.196355270074184 color=red,shape=triangle,flag=0,i=81417,u=0.502926094608134,v=0.5243801829291423,w=0.48326953616896057,x=6.08322449581254 color=red,shape=triangle,flag=0,i=81426,u=0.7663733947426048,v=0.91336590956359,w=0.4862324264646229,x=5.045292597110608 color=red,shape=square,flag=0,i=81496,u=0.246033088739135,v=0.5899145062026309,w=0.5181120767160675,x=1.9595663181925307 color=red,shape=square,flag=0,i=81500,u=0.582017958862124,v=0.04300196180732763,w=0.5175534675332268,x=7.197056489084802 color=blue,shape=triangle,flag=1,i=81503,u=0.7641177175953137,v=0.09071569377362021,w=0.4900951368217516,x=4.1980964255254 color=red,shape=square,flag=0,i=81507,u=0.1809065361834491,v=0.27499266249565435,w=0.5116891473905982,x=3.978241871622719 color=red,shape=triangle,flag=0,i=81510,u=0.47339962437298544,v=0.3901375718647604,w=0.5025023287674841,x=5.118451744127785 color=blue,shape=square,flag=1,i=81517,u=0.6825558927235732,v=0.06985223394546658,w=0.504645209945903,x=4.527684222491165 color=red,shape=square,flag=0,i=81556,u=0.9430581407698928,v=0.7993631368300492,w=0.5218151116199066,x=3.6950777816762947 color=red,shape=circle,flag=0,i=81567,u=0.04240981604118543,v=0.0763887721046691,w=0.49278547628798963,x=4.569112234104232 color=red,shape=circle,flag=1,i=81578,u=0.7512666250546094,v=0.7711025843096267,w=0.4924420245784761,x=6.456537045120279 color=red,shape=square,flag=0,i=81584,u=0.3342498426902266,v=0.6414676805488785,w=0.5135249968058191,x=5.872494934413659 color=red,shape=circle,flag=1,i=81592,u=0.6179929017424887,v=0.6340469718979167,w=0.49158265208247226,x=3.446285313916354 color=red,shape=circle,flag=0,i=81601,u=0.0843692809175206,v=0.12722422079605555,w=0.4971328331702479,x=5.212085571506336 color=red,shape=triangle,flag=0,i=81602,u=0.5573947494515696,v=0.38975752208434433,w=0.5126238186651708,x=4.3114345365676074 color=yellow,shape=triangle,flag=1,i=81615,u=0.9093571004282791,v=0.5792238831693498,w=0.5065612240067842,x=3.5392047193840526 color=blue,shape=square,flag=0,i=81622,u=0.7203276924049226,v=0.3667046445663138,w=0.5024950787070839,x=6.770523383903327 color=purple,shape=circle,flag=1,i=81635,u=0.2885798258082818,v=0.5234491704943466,w=0.4986284927430894,x=5.924520672568417 color=red,shape=square,flag=0,i=81637,u=0.3992984243757146,v=0.9729579454719782,w=0.5159546272861733,x=4.437287495329566 color=red,shape=circle,flag=0,i=81649,u=0.6438422794575033,v=0.6390754079028129,w=0.4988364843821413,x=4.840967245170557 color=red,shape=triangle,flag=0,i=81651,u=0.20680787475652063,v=0.43736532839455355,w=0.5123230089230779,x=4.3214131099058966 color=orange,shape=circle,flag=1,i=81670,u=0.08253999981609705,v=0.015013086252800734,w=0.47803139932336064,x=6.039640054015769 color=green,shape=circle,flag=0,i=81672,u=0.24282204821726772,v=0.5760225898635326,w=0.49110661997716804,x=4.067140097950282 color=red,shape=circle,flag=0,i=81679,u=0.4287948131329321,v=0.39157420285171596,w=0.4999610769875731,x=6.566369411159282 color=red,shape=square,flag=1,i=81685,u=0.6406098415169508,v=0.2646569768013902,w=0.5227351470330938,x=7.143978111596226 color=blue,shape=square,flag=0,i=81688,u=0.9393986457623662,v=0.1940300094536369,w=0.5153355130813149,x=4.804700133038835 color=red,shape=circle,flag=0,i=81689,u=0.6170877030169017,v=0.6543489033805715,w=0.4950052915117413,x=4.791477871234577 color=red,shape=square,flag=0,i=81691,u=0.374345610382843,v=0.011631740019972137,w=0.5201777618421457,x=7.07082573894231 color=red,shape=circle,flag=1,i=81694,u=0.18280117437795373,v=0.09420576052710888,w=0.49043042705050727,x=5.393871728240573 color=red,shape=circle,flag=0,i=81710,u=0.6858331568637801,v=0.7506297164980605,w=0.4929729300464558,x=6.569545491322146 color=red,shape=triangle,flag=0,i=81724,u=0.5797428109128266,v=0.6068332310914224,w=0.506283965445832,x=4.6435765729202805 color=red,shape=square,flag=0,i=81733,u=0.20765558352559554,v=0.8486359562121671,w=0.5168173575061112,x=3.660407027802499 color=yellow,shape=triangle,flag=1,i=81746,u=0.5732825888528483,v=0.7349810907346581,w=0.5065444772804333,x=4.949855575428452 color=red,shape=triangle,flag=0,i=81763,u=0.08358419311582332,v=0.6873249510167284,w=0.5129036464938158,x=4.264207740399289 color=red,shape=square,flag=1,i=81764,u=0.5551108619014528,v=0.07395531571137448,w=0.5156180686530784,x=3.8443549814108553 color=red,shape=triangle,flag=0,i=81793,u=0.49554086563547917,v=0.12309999661562765,w=0.5064709442306965,x=4.192379582131352 color=yellow,shape=circle,flag=1,i=81825,u=0.0362940768718778,v=0.3962533724798095,w=0.5229298626779088,x=6.354657807738413 color=red,shape=square,flag=0,i=81842,u=0.4706634671490242,v=0.9610960545204995,w=0.5214938003585593,x=4.713881772725928 color=green,shape=triangle,flag=0,i=81865,u=0.4052862901580394,v=0.08372119470326678,w=0.5184352990046684,x=6.2760282518420185 color=yellow,shape=square,flag=1,i=81869,u=0.4344578077628283,v=0.468695067925739,w=0.4976437962672821,x=4.748196718414499 color=red,shape=square,flag=1,i=81876,u=0.5855201233125406,v=0.5391142768421466,w=0.525480886650077,x=6.8056053921918425 color=red,shape=triangle,flag=1,i=81905,u=0.7052826337698797,v=0.22982219401729975,w=0.5099725921977243,x=6.9530028500423775 color=purple,shape=square,flag=0,i=81906,u=0.5854520927461457,v=0.11770299413055596,w=0.491699793546107,x=4.9698192732541715 color=red,shape=circle,flag=1,i=81907,u=0.37163847797251504,v=0.400829027269246,w=0.4962317770086797,x=6.4387239513669305 color=yellow,shape=circle,flag=1,i=81908,u=0.8190797984458409,v=0.23833106733842013,w=0.5295948377364428,x=4.056902855412558 color=red,shape=triangle,flag=0,i=81916,u=0.44469573301468945,v=0.37871469895814514,w=0.5092411510912408,x=5.147708122508301 color=red,shape=square,flag=1,i=81919,u=0.2529252950148785,v=0.7073796022463315,w=0.5289771707367834,x=4.004098830614893 color=blue,shape=circle,flag=0,i=81932,u=0.21938969030060307,v=0.928251409188362,w=0.5253520480994954,x=5.230595544239608 color=red,shape=triangle,flag=0,i=81935,u=0.8162341560427582,v=0.9906220905132913,w=0.5207408951203899,x=6.5217958463839425 color=red,shape=circle,flag=1,i=81945,u=0.892607462969383,v=0.8854819932923311,w=0.500242135793435,x=5.124708072040491 color=red,shape=triangle,flag=0,i=81958,u=0.6085217312591791,v=0.7251958321237331,w=0.5204825002103738,x=6.273496526985627 color=red,shape=triangle,flag=1,i=81975,u=0.942350369754318,v=0.9574679537705263,w=0.5270827537157838,x=5.557671721464943 color=red,shape=triangle,flag=0,i=81986,u=0.9206106365392773,v=0.3101350370481294,w=0.5260496270079443,x=5.211736062548158 color=red,shape=triangle,flag=1,i=82002,u=0.762944607447994,v=0.6822350804287131,w=0.5276045940814295,x=5.562549016450775 color=yellow,shape=circle,flag=1,i=82018,u=0.2941692879250857,v=0.03367571271482628,w=0.5323502644372534,x=4.7266609152183685 color=red,shape=square,flag=0,i=82021,u=0.4888604843882428,v=0.13420642199999677,w=0.53100892030084,x=8.20071612615397 color=purple,shape=triangle,flag=0,i=82030,u=0.2532387782477389,v=0.6613800791765458,w=0.5130003522926362,x=4.13827034318382 color=red,shape=triangle,flag=0,i=82037,u=0.8155834893387192,v=0.600747726377886,w=0.5243821093021257,x=5.267510724452422 color=red,shape=square,flag=0,i=82038,u=0.526952198917595,v=0.3883619866691551,w=0.5239548996324123,x=4.403288957344245 color=yellow,shape=triangle,flag=1,i=82089,u=0.8971913939212398,v=0.05343074617760546,w=0.49209975676351675,x=5.530133181969077 color=blue,shape=square,flag=1,i=82097,u=0.544679624468908,v=0.7855291101302742,w=0.49930976036776337,x=4.67214337820684 color=red,shape=square,flag=0,i=82119,u=0.6217318755332524,v=0.21018176009500322,w=0.5284072910671912,x=6.147988448529972 color=orange,shape=circle,flag=0,i=82146,u=0.6638572463312785,v=0.6500668188429215,w=0.47678322845435045,x=4.072461053508557 color=red,shape=square,flag=0,i=82149,u=0.33837204663982035,v=0.19197179643208517,w=0.524959855348316,x=4.925185675626268 color=red,shape=triangle,flag=0,i=82151,u=0.8570899840546615,v=0.04971801516907148,w=0.512822016136913,x=6.652061445418897 color=red,shape=square,flag=1,i=82159,u=0.7673434923667805,v=0.00037654356442629044,w=0.5236425156848175,x=5.163962278526361 color=yellow,shape=square,flag=1,i=82165,u=0.34653657882562194,v=0.6366966851406346,w=0.504017020524526,x=4.7146198841123965 color=red,shape=circle,flag=0,i=82186,u=0.546767776910464,v=0.45433043516472915,w=0.48859736669470427,x=4.507104913664541 color=red,shape=square,flag=0,i=82190,u=0.008316979455405882,v=0.9026225296964588,w=0.5193988762007243,x=6.365731955881866 color=red,shape=square,flag=0,i=82192,u=0.4659512785708738,v=0.9762037780131061,w=0.5167177043188586,x=5.090767697412583 color=purple,shape=circle,flag=1,i=82196,u=0.5209108557055107,v=0.979313898441847,w=0.5078318509679425,x=6.310739948473898 color=red,shape=triangle,flag=0,i=82213,u=0.9173715910230548,v=0.11661677647235802,w=0.5156311281151702,x=5.619900596208495 color=red,shape=triangle,flag=1,i=82236,u=0.9545142566635887,v=0.7132570354705988,w=0.5166409364290429,x=3.7830449602244705 color=blue,shape=triangle,flag=1,i=82259,u=0.33643667866979665,v=0.7222312015275271,w=0.4924811207747196,x=3.751718993504626 color=blue,shape=triangle,flag=0,i=82266,u=0.4855831948475259,v=0.9416541527042219,w=0.49421118348299153,x=4.2604083091027025 color=red,shape=square,flag=0,i=82268,u=0.7789843132831411,v=0.07723341037885179,w=0.5148967720656697,x=4.883961995706305 color=purple,shape=square,flag=0,i=82286,u=0.23294640945080303,v=0.20941660258541228,w=0.4904160264338973,x=4.492335472766562 color=purple,shape=triangle,flag=0,i=82287,u=0.0874416708178064,v=0.8608235934840683,w=0.5086228235469287,x=6.904058004901947 color=red,shape=triangle,flag=0,i=82315,u=0.16861637661800255,v=0.3425188083960208,w=0.5167684242004628,x=3.2500482408887645 color=red,shape=triangle,flag=1,i=82331,u=0.5442188179114065,v=0.7040962175423547,w=0.5166993190489322,x=4.9804760472696605 color=red,shape=square,flag=0,i=82347,u=0.6338308539195121,v=0.3108694477844265,w=0.5062422909508266,x=4.073143585425137 color=purple,shape=circle,flag=0,i=82349,u=0.7319347451086649,v=0.30788954817190783,w=0.507397221546586,x=4.479781538469108 color=blue,shape=triangle,flag=0,i=82360,u=0.8458567069898428,v=0.9112027663730352,w=0.4932980417220871,x=5.341155998830385 color=blue,shape=circle,flag=0,i=82373,u=0.7226277574624174,v=0.7768685909029331,w=0.5398936550335363,x=6.983909056804033 color=red,shape=circle,flag=0,i=82383,u=0.03421378357288907,v=0.047397902115352705,w=0.4752072100068521,x=4.464330295169857 color=blue,shape=circle,flag=1,i=82388,u=0.048454150163879994,v=0.7217662666742595,w=0.5443876638676958,x=5.126694888849488 color=purple,shape=circle,flag=0,i=82400,u=0.44708643968685247,v=0.1814357932083771,w=0.513103201251819,x=6.372625790974066 color=purple,shape=circle,flag=0,i=82403,u=0.7144845044389426,v=0.7813678023182257,w=0.5111258378878383,x=6.199025215732114 color=yellow,shape=circle,flag=1,i=82431,u=0.8505627687870435,v=0.6982094236081248,w=0.5203169643839746,x=4.829779398627252 color=red,shape=square,flag=0,i=82450,u=0.8504685039854782,v=0.052190358591393315,w=0.4902410595724105,x=3.5281760591869205 color=yellow,shape=triangle,flag=0,i=82459,u=0.2808921739138933,v=0.8195922791573089,w=0.48899755962846475,x=3.889749071345894 color=orange,shape=circle,flag=1,i=82475,u=0.6744306766532117,v=0.5522132513998601,w=0.4794634977776188,x=4.118434182022859 color=red,shape=square,flag=0,i=82484,u=0.10824529982235909,v=0.8365071905115189,w=0.4777329838523633,x=4.704951595091578 color=blue,shape=square,flag=0,i=82485,u=0.007070340657070795,v=0.8065032806733391,w=0.4907367854458501,x=5.17749184088046 color=red,shape=circle,flag=1,i=82487,u=0.3188422078407027,v=0.29284170828514816,w=0.4812742281794559,x=6.985842741046636 color=red,shape=square,flag=0,i=82489,u=0.9832543113563688,v=0.7671990130618139,w=0.4776401719501203,x=7.486513299459086 color=blue,shape=triangle,flag=1,i=82495,u=0.6346736052959036,v=0.2747382767489376,w=0.5010716625572224,x=6.199864235840695 color=red,shape=circle,flag=0,i=82499,u=0.3475022942148621,v=0.32761708689501046,w=0.47996439935936613,x=2.624558172779161 color=red,shape=triangle,flag=0,i=82501,u=0.3219698367494802,v=0.7224432607726242,w=0.503497480955817,x=5.476625302023457 color=green,shape=circle,flag=0,i=82502,u=0.33996989698495517,v=0.4224840119144194,w=0.49880075489530057,x=5.665653883382729 color=red,shape=square,flag=1,i=82511,u=0.060011186502833325,v=0.3966134759004424,w=0.4798480692984614,x=5.213159696306523 color=blue,shape=square,flag=1,i=82516,u=0.5657431765911797,v=0.6511695881996549,w=0.48706999168894954,x=3.7372147807759593 color=blue,shape=circle,flag=1,i=82527,u=0.6249413978117138,v=0.23596450396984647,w=0.5395796611792876,x=6.196345575821962 color=red,shape=circle,flag=0,i=82537,u=0.9101350700684699,v=0.9710791928275359,w=0.4797399447267551,x=3.53929078467614 color=blue,shape=triangle,flag=1,i=82538,u=0.3292474475923741,v=0.25173632519152445,w=0.506807093196346,x=3.2909743356840693 color=red,shape=triangle,flag=0,i=82540,u=0.4647489450337531,v=0.16404243944577412,w=0.5077628807075795,x=4.332450242736735 color=red,shape=square,flag=0,i=82556,u=0.6615645537979847,v=0.12878907174984167,w=0.48853149559786474,x=4.65578723005813 color=purple,shape=circle,flag=0,i=82568,u=0.23175045836804964,v=0.9691500402287213,w=0.5135755570127799,x=7.453538774375066 color=red,shape=triangle,flag=0,i=82583,u=0.7267047915389362,v=0.977249460120103,w=0.49605507598916354,x=4.368002766493595 color=purple,shape=square,flag=0,i=82596,u=0.523775033537616,v=0.5334317086213074,w=0.4895645833544572,x=4.655860125829382 color=red,shape=triangle,flag=0,i=82599,u=0.8496987888273095,v=0.4246320475803621,w=0.49200327365168206,x=4.229097853905992 color=red,shape=square,flag=0,i=82602,u=0.5398059090000749,v=0.13586944337249574,w=0.48385062819551933,x=5.997671347891504 color=red,shape=triangle,flag=0,i=82619,u=0.261705929435199,v=0.23008166052237766,w=0.4964270566324088,x=6.176768120730368 color=yellow,shape=square,flag=1,i=82626,u=0.7882518280260266,v=0.6719794319255251,w=0.4993886978493441,x=5.127601342482564 color=red,shape=square,flag=0,i=82627,u=0.9055698731289945,v=0.7007932093620781,w=0.4852146273743674,x=4.516386680724516 color=red,shape=triangle,flag=0,i=82630,u=0.955022379650656,v=0.03527091264062365,w=0.4928540831853299,x=4.479236639542448 color=red,shape=square,flag=0,i=82631,u=0.4935263016589604,v=0.8590568423649695,w=0.49228500147246274,x=7.485064960997819 color=yellow,shape=triangle,flag=1,i=82647,u=0.35196921796850955,v=0.27772075890541303,w=0.47205730357553066,x=3.870571261482733 color=blue,shape=triangle,flag=1,i=82653,u=0.6571069496666412,v=0.4823514127618985,w=0.5188596535405834,x=6.158960058773757 color=yellow,shape=square,flag=1,i=82685,u=0.7948337045418883,v=0.05084332874896913,w=0.5083391846457594,x=6.209108243280217 color=blue,shape=triangle,flag=1,i=82717,u=0.27775391443861974,v=0.34206760285904136,w=0.5166286588514517,x=4.504508652344163 color=red,shape=square,flag=0,i=82725,u=0.4832747660915765,v=0.337631290163507,w=0.5002363226947814,x=4.033507775381328 color=red,shape=square,flag=1,i=82727,u=0.3406456989651434,v=0.2014998126824079,w=0.5042958375996044,x=6.466292513024502 color=yellow,shape=circle,flag=1,i=82759,u=0.46021572333639893,v=0.884704669096846,w=0.5340660385807497,x=7.440102842860784 color=red,shape=triangle,flag=0,i=82764,u=0.6674025925569613,v=0.15530746467479817,w=0.4765301048927643,x=4.551772488508328 color=yellow,shape=square,flag=1,i=82783,u=0.3929210074560181,v=0.6147548679471491,w=0.5161098315561932,x=4.11886819040765 color=purple,shape=triangle,flag=0,i=82794,u=0.019535331958087876,v=0.6991357141620065,w=0.49963979860895197,x=2.8996262031203823 color=red,shape=triangle,flag=0,i=82800,u=0.6088982216874902,v=0.9784559732704764,w=0.4749560013042373,x=5.221133011472841 color=green,shape=square,flag=0,i=82805,u=0.7615265000602532,v=0.7782477383542531,w=0.5324580018121762,x=5.519010472287544 color=blue,shape=square,flag=1,i=82817,u=0.2587342615118756,v=0.951942151485277,w=0.470791036697166,x=4.944072536036763 color=red,shape=triangle,flag=1,i=82826,u=0.9407511495938944,v=0.03050893732240545,w=0.4715127113505447,x=4.54063268723984 color=blue,shape=triangle,flag=1,i=82836,u=0.8916457885505735,v=0.8395568828203379,w=0.5164919658990521,x=5.615096359022343 color=green,shape=triangle,flag=0,i=82837,u=0.9732434010964439,v=0.13258286148850296,w=0.5186563022891615,x=5.322145802264406 color=yellow,shape=circle,flag=1,i=82858,u=0.8943270776958472,v=0.15415856635871605,w=0.5338036582905477,x=8.895613215546922 color=red,shape=square,flag=0,i=82860,u=0.1522785546595561,v=0.4076949916621755,w=0.5062867997115744,x=3.72759091153538 color=yellow,shape=circle,flag=1,i=82866,u=0.3323961558364591,v=0.15073461294128987,w=0.5290453694522023,x=5.264995372745593 color=yellow,shape=triangle,flag=1,i=82868,u=0.10715872273516158,v=0.5866169535763028,w=0.4826283761096491,x=4.169264618577826 color=orange,shape=circle,flag=1,i=82871,u=0.3763549478929412,v=0.7505727822128362,w=0.48583050566254155,x=4.653394487480818 color=red,shape=square,flag=1,i=82872,u=0.7030570127735172,v=0.12858702930391686,w=0.5075341318315327,x=6.334703842431654 color=yellow,shape=triangle,flag=1,i=82878,u=0.3224569799869038,v=0.7935501733243558,w=0.49041629613951876,x=7.96242727900034 color=yellow,shape=triangle,flag=1,i=82892,u=0.9796416789195468,v=0.5557143709162574,w=0.49023563488756977,x=4.390198848248415 color=green,shape=triangle,flag=1,i=82909,u=0.6298784229837792,v=0.7521639720803523,w=0.5191358249030289,x=7.433811460606919 color=orange,shape=triangle,flag=0,i=82926,u=0.428500167119526,v=0.36607866845295145,w=0.47081347144738445,x=4.481033048286446 color=red,shape=square,flag=1,i=82929,u=0.28144443092516513,v=0.4472626824439989,w=0.5080662970436506,x=6.744925948024256 color=red,shape=circle,flag=1,i=82944,u=0.1102804286675072,v=0.09234797502378038,w=0.480737483906285,x=6.1526126375492325 color=red,shape=square,flag=0,i=82960,u=0.8956221368012316,v=0.3118665481409354,w=0.5084850820655602,x=4.995155059184679 color=blue,shape=square,flag=1,i=82973,u=0.8380663221334929,v=0.5532882632162486,w=0.4854303199774404,x=5.901151272085234 color=green,shape=square,flag=0,i=82986,u=0.926762603039401,v=0.7883352330499447,w=0.5351220122805623,x=3.6259157035866565 color=red,shape=triangle,flag=0,i=82992,u=0.42865346928153225,v=0.018536231765446498,w=0.4636237754596017,x=4.296858047706796 color=red,shape=triangle,flag=1,i=83008,u=0.34455620836566636,v=0.7508928532640805,w=0.4684564656600809,x=3.516141064947919 color=purple,shape=triangle,flag=0,i=83016,u=0.8400245605967229,v=0.8365978274030381,w=0.49420198830081785,x=4.833873683961947 color=red,shape=circle,flag=0,i=83018,u=0.02530312560074266,v=-0.020744347387753548,w=0.47267233327964453,x=6.380444688698895 color=blue,shape=square,flag=1,i=83021,u=0.022980864754761132,v=0.1472520029150809,w=0.48260481240710823,x=4.608710090282286 color=red,shape=triangle,flag=0,i=83027,u=0.2544090554838675,v=0.3915246991655562,w=0.4636566102279231,x=3.3439464090488413 color=yellow,shape=triangle,flag=0,i=83042,u=0.721780167694505,v=0.7165798894392567,w=0.4896651613952397,x=5.195098582544258 color=red,shape=triangle,flag=0,i=83058,u=0.6588398833636143,v=0.49372843789109044,w=0.4691619714090176,x=3.990637057658626 color=yellow,shape=triangle,flag=1,i=83068,u=0.5630791159911716,v=0.27766051432685335,w=0.49449852155501156,x=3.9389413540314884 color=red,shape=square,flag=0,i=83077,u=0.9705593796951105,v=0.6662762876494098,w=0.5096717055755128,x=5.334085589168752 color=blue,shape=circle,flag=1,i=83087,u=0.9714025422387434,v=0.8642377163674381,w=0.5413355579680965,x=5.2024624972859455 color=purple,shape=square,flag=0,i=83090,u=0.5226547821368325,v=0.7801297575816978,w=0.5008553672951415,x=6.027848591378281 color=blue,shape=triangle,flag=1,i=83095,u=0.8332807000442715,v=0.7498494025256474,w=0.5132796810911399,x=5.8977613781313165 color=red,shape=square,flag=1,i=83108,u=0.9862296300552067,v=0.5825351970438819,w=0.5033480758722415,x=5.428051039799477 color=red,shape=triangle,flag=0,i=83115,u=0.4760572296600407,v=0.33170820717220306,w=0.4717397184789229,x=4.0631750113093945 color=red,shape=triangle,flag=0,i=83116,u=0.990314309153224,v=0.07269972495938892,w=0.47416383470284945,x=4.106577102893966 color=red,shape=circle,flag=0,i=83117,u=0.3661906625602602,v=0.4025536714299455,w=0.47364288879216815,x=4.5910129949000895 color=blue,shape=square,flag=0,i=83118,u=0.49163801548879127,v=0.24330154714116303,w=0.4819515245455142,x=5.718476399136688 color=red,shape=circle,flag=0,i=83122,u=0.6195004711843787,v=0.5727866189621638,w=0.47401378896208646,x=5.542319267634021 color=red,shape=circle,flag=0,i=83149,u=0.8328788685536079,v=0.8641085074514573,w=0.46979413223846245,x=3.9706101547653767 color=blue,shape=triangle,flag=0,i=83150,u=0.43713699201805456,v=0.2660525142526584,w=0.5126656935668523,x=3.246619511051145 color=red,shape=triangle,flag=0,i=83166,u=0.5001685641935002,v=0.8698183381006106,w=0.4922326402370768,x=6.024953643905896 color=purple,shape=triangle,flag=0,i=83167,u=0.8020011720459099,v=0.22756270790291333,w=0.5033954027225506,x=6.068019207862608 color=blue,shape=triangle,flag=0,i=83212,u=0.006945114263260832,v=0.21170056978885798,w=0.5143509734188596,x=4.651095411918273 color=red,shape=circle,flag=0,i=83213,u=0.42812775359923905,v=0.37703136082457084,w=0.46449024799404914,x=5.15670466708205 color=red,shape=circle,flag=0,i=83217,u=0.3538487489824198,v=0.27518672100861263,w=0.4617118610651707,x=3.580507603681859 color=red,shape=circle,flag=0,i=83222,u=0.9430470015669334,v=0.9487467603887084,w=0.45897929561174744,x=4.365152675185844 color=green,shape=triangle,flag=0,i=83225,u=0.09619528634889285,v=0.057739380692552134,w=0.517122397340599,x=4.862942749772543 color=red,shape=circle,flag=1,i=83247,u=0.7574474611973291,v=0.8186996574524749,w=0.44832254622782247,x=4.7591596511939205 color=red,shape=square,flag=0,i=83258,u=0.6903995209230517,v=0.3143369559713949,w=0.48585522297270783,x=5.01810837305451 color=green,shape=circle,flag=0,i=83266,u=0.7205578548894788,v=0.828048458508868,w=0.5012711321138965,x=4.049348703616304 color=red,shape=square,flag=0,i=83287,u=0.6466422667540417,v=0.7334969056903076,w=0.4804811122167074,x=5.921120324045841 color=red,shape=triangle,flag=0,i=83289,u=0.2030025641518599,v=0.5930684242120423,w=0.49141472582738843,x=3.9874069634019995 color=yellow,shape=circle,flag=1,i=83298,u=0.35163840806684055,v=0.4033210378463076,w=0.5345431813618567,x=6.484809729397359 color=red,shape=triangle,flag=0,i=83312,u=0.8909271689139356,v=0.9156076344481769,w=0.4892871797467797,x=5.936154387085878 color=yellow,shape=circle,flag=1,i=83316,u=0.16400859146840308,v=0.5965219871671622,w=0.5335026812963714,x=3.9943511258275706 color=blue,shape=square,flag=1,i=83317,u=0.0980590317872454,v=0.41023458750011066,w=0.47707448980878275,x=6.175828247841214 color=orange,shape=square,flag=1,i=83318,u=0.05174991698657738,v=0.3328841163758609,w=0.5117641506357392,x=4.069100960802553 color=purple,shape=triangle,flag=0,i=83326,u=0.05804430334154431,v=0.7713956565531557,w=0.49517047333737396,x=3.770492286942417 color=red,shape=square,flag=0,i=83328,u=0.48179183318412167,v=0.3526213194215202,w=0.46248950728747634,x=4.838732082289352 color=yellow,shape=circle,flag=1,i=83358,u=0.005612599675430596,v=0.8088273404826914,w=0.5366467393279692,x=4.43178494213615 color=purple,shape=triangle,flag=0,i=83369,u=0.10367082337284161,v=0.5089532068397383,w=0.496226936926661,x=4.868745172566798 color=red,shape=square,flag=0,i=83370,u=0.08591998921287558,v=0.5901508592354079,w=0.4512489122504173,x=4.91564141561331 color=green,shape=square,flag=0,i=83375,u=0.12970926493292545,v=0.7482186387117108,w=0.5249988957291557,x=3.5014075062557324 color=red,shape=square,flag=1,i=83380,u=0.40319979689704244,v=0.7636111045492379,w=0.45211006913473917,x=5.412159529692301 color=red,shape=square,flag=0,i=83394,u=0.6383818321890626,v=0.34198783159892543,w=0.45641301029695575,x=3.6925029907519344 color=purple,shape=square,flag=1,i=83397,u=0.7572343826950665,v=0.6309017032820423,w=0.5028100170032692,x=3.334733544512153 color=red,shape=square,flag=0,i=83405,u=0.9113462113891848,v=0.5187228415960464,w=0.4560399174032374,x=3.122234019892994 color=red,shape=triangle,flag=1,i=83417,u=0.7495570465674024,v=0.8300551158843191,w=0.49245783860352277,x=6.175286703786654 color=blue,shape=triangle,flag=0,i=83421,u=0.419519799589274,v=0.7135029511659471,w=0.5086966262581886,x=2.8929187832748853 color=red,shape=square,flag=0,i=83426,u=0.3205151839886584,v=0.5645212911306043,w=0.4603770783617119,x=2.0661427685480716 color=purple,shape=triangle,flag=0,i=83431,u=0.5711017923040533,v=0.03865980639472766,w=0.4883347189303134,x=6.388751840905303 color=red,shape=circle,flag=0,i=83440,u=0.5855849793524782,v=0.6119243040112797,w=0.4280044413263959,x=8.323760491444853 color=red,shape=square,flag=0,i=83443,u=0.09306731483603303,v=0.05221619154508683,w=0.4580502735802006,x=2.9393596878019714 color=red,shape=square,flag=0,i=83451,u=0.5080993505480947,v=0.6662217093579649,w=0.4579274856433957,x=2.9869439946581493 color=red,shape=square,flag=1,i=83479,u=0.13627138255214732,v=0.48623242410050516,w=0.46423702487186497,x=6.623316593297788 color=red,shape=square,flag=0,i=83485,u=0.4932497928658681,v=0.15231118656399234,w=0.4664903573917578,x=5.417917228983158 color=red,shape=circle,flag=1,i=83507,u=0.34876404340306644,v=0.2703972493882617,w=0.42768403320036097,x=4.181572832249706 color=purple,shape=circle,flag=0,i=83510,u=0.49490645264980193,v=0.24752119385976667,w=0.4897046476479821,x=3.392519206652731 color=green,shape=triangle,flag=0,i=83512,u=0.15469913998663198,v=0.5275669232293471,w=0.5125965526021815,x=6.202048195261952 color=red,shape=square,flag=0,i=83515,u=0.4776565220971556,v=0.8019318489407621,w=0.4747333738063338,x=5.318639755539156 color=blue,shape=triangle,flag=1,i=83525,u=0.4243645471310227,v=0.37420782833898925,w=0.5136846948039873,x=4.926556373439734 color=red,shape=triangle,flag=0,i=83528,u=0.7263364294020428,v=0.468342904133927,w=0.5042821572045862,x=5.434048253892715 color=purple,shape=triangle,flag=1,i=83529,u=0.7260601135141455,v=0.9297385606947408,w=0.49353669051830046,x=4.882010401564516 color=green,shape=circle,flag=0,i=83530,u=0.7804965521411584,v=0.8854589402560958,w=0.5042453119891259,x=4.4590244881267 color=red,shape=circle,flag=1,i=83602,u=0.2256042182898581,v=0.24739727081194185,w=0.4315387829544891,x=2.32742869673782 color=yellow,shape=circle,flag=1,i=83608,u=0.3584799144288826,v=0.173946869402819,w=0.5317370022627771,x=3.7434801260034463 color=red,shape=circle,flag=0,i=83625,u=0.2486872223029497,v=0.3319274331187414,w=0.4250771454361501,x=4.909765695950619 color=yellow,shape=triangle,flag=1,i=83634,u=0.4787606665741654,v=0.6617860112773567,w=0.47158200435444225,x=6.721233713172783 color=purple,shape=square,flag=0,i=83655,u=0.6239062694658689,v=0.11065159041832395,w=0.510052521858901,x=8.029689766687161 color=purple,shape=square,flag=0,i=83657,u=0.11293849922481936,v=0.008855787273896243,w=0.5089106996804605,x=5.2066763491198556 color=yellow,shape=square,flag=1,i=83668,u=0.29222900592551015,v=0.1617721066226956,w=0.5125688323415893,x=5.257280559078665 color=red,shape=circle,flag=0,i=83692,u=0.4785698702803115,v=0.5340052689518955,w=0.43785075136677304,x=5.319094297656166 color=red,shape=square,flag=0,i=83693,u=0.644309699064817,v=0.5861256430759361,w=0.5160755245391613,x=2.4739604669907966 color=purple,shape=triangle,flag=0,i=83695,u=0.32765619699116266,v=0.04717576449588323,w=0.49510694729807003,x=3.3660856169364872 color=purple,shape=circle,flag=0,i=83700,u=0.34564049250131523,v=0.2100286091493202,w=0.4817621695949327,x=4.673931141789692 color=purple,shape=triangle,flag=0,i=83706,u=0.26916047972550294,v=0.4806804615006416,w=0.4962450194770319,x=5.193831246245857 color=red,shape=square,flag=1,i=83720,u=0.1341165155177233,v=0.6073081718250779,w=0.5175096422682183,x=6.831408929518912 color=blue,shape=triangle,flag=0,i=83723,u=0.5887476483923134,v=0.5074989436889473,w=0.515205098683211,x=6.4700679314894245 color=red,shape=circle,flag=0,i=83740,u=0.11918405593694148,v=0.08867615517788549,w=0.4394253247178085,x=5.950469582574622 color=yellow,shape=triangle,flag=1,i=83744,u=0.559465311034973,v=0.5851322286825043,w=0.4752743880183645,x=6.092580944596932 color=red,shape=circle,flag=0,i=83766,u=0.07245661514460844,v=0.028668585166640233,w=0.45062442800371105,x=4.221752994815294 color=red,shape=square,flag=1,i=83777,u=0.09272629825783374,v=0.5907352761204864,w=0.5166121740248965,x=5.732664933000755 color=blue,shape=square,flag=1,i=83780,u=0.5659067235626688,v=0.11794294903035007,w=0.4779849402704211,x=4.949091899397209 color=blue,shape=square,flag=0,i=83791,u=0.37971553000369285,v=0.1152171664862347,w=0.48012958722493926,x=5.193986950124411 color=blue,shape=circle,flag=0,i=83797,u=0.31274767760449274,v=0.27134123391623366,w=0.5243005052378935,x=6.402246284432516 color=green,shape=square,flag=0,i=83802,u=0.6065480850298873,v=0.7253560192089153,w=0.5198369024479206,x=4.400359463051699 color=blue,shape=triangle,flag=1,i=83810,u=0.17698236637235687,v=0.12033899861995145,w=0.5243035948387528,x=6.636269103850641 color=green,shape=square,flag=0,i=83811,u=0.03992098826862389,v=0.6263984646969762,w=0.5226431193254288,x=4.880216140629437 color=blue,shape=circle,flag=1,i=83814,u=0.48262252187422305,v=0.14844748834794808,w=0.5202308814447982,x=4.838675015261391 color=red,shape=square,flag=0,i=83823,u=0.6407951567603292,v=0.1174570878397333,w=0.5243827686373389,x=4.461836317974531 color=purple,shape=triangle,flag=1,i=83833,u=0.4112514620133395,v=0.4013960953774379,w=0.48959686815477893,x=4.719200306281575 color=yellow,shape=square,flag=1,i=83834,u=0.8128890125577551,v=0.5303271844237689,w=0.5043163802327053,x=4.515719801764994 color=red,shape=square,flag=0,i=83851,u=0.8459992691859014,v=0.5687235069114398,w=0.5179995879876328,x=5.810491948149306 color=purple,shape=circle,flag=0,i=83866,u=0.788659054238965,v=0.2057394713923727,w=0.4800188075984709,x=6.611217667011823 color=red,shape=triangle,flag=1,i=83868,u=0.34327808925073,v=0.4282106811267582,w=0.5073775830952365,x=5.025946486651326 color=blue,shape=circle,flag=0,i=83869,u=0.7435925250692076,v=0.050394473270299334,w=0.5252954908253112,x=6.023473823699479 color=red,shape=triangle,flag=1,i=83870,u=0.14759530436434143,v=0.30504333234305203,w=0.5098637272460711,x=5.501689760480581 color=green,shape=triangle,flag=0,i=83874,u=0.7851794194652867,v=0.40356871876936984,w=0.49856121844967827,x=4.422402863649022 color=red,shape=circle,flag=0,i=83877,u=0.5357206940841953,v=0.6159024616433673,w=0.4417066294586936,x=3.3008200348263563 color=red,shape=square,flag=0,i=83885,u=0.497728482478768,v=0.6568766816078183,w=0.5156409137941457,x=6.7459219401214865 color=yellow,shape=square,flag=0,i=83886,u=0.9831176109691093,v=0.12016879812103598,w=0.5063371582187389,x=4.002888361916657 color=red,shape=circle,flag=0,i=83890,u=0.18078963931854763,v=0.17975551799418893,w=0.4414635374896249,x=6.133341531260502 color=yellow,shape=square,flag=1,i=83897,u=0.0032107127687728276,v=0.6247875259079945,w=0.4994796987604175,x=3.8878280100714235 color=yellow,shape=circle,flag=1,i=83898,u=0.7283687030103658,v=0.3503603938864758,w=0.5425727711866225,x=5.465893082835568 color=purple,shape=circle,flag=0,i=83907,u=0.3182933578236352,v=0.13416345428779297,w=0.47941171551479606,x=3.9126176436354747 color=blue,shape=square,flag=1,i=83913,u=0.9492379398120842,v=0.39366296929477573,w=0.47239174506269305,x=4.893587209093668 color=blue,shape=square,flag=0,i=83931,u=0.4304997545174736,v=0.33396334081820134,w=0.4697097596494418,x=6.857989200005004 color=yellow,shape=square,flag=1,i=83959,u=0.8468832442546941,v=0.8625749446461438,w=0.4982585193965951,x=3.3999100448088395 color=red,shape=triangle,flag=1,i=83961,u=0.9900536015797581,v=0.13764424035406442,w=0.5150222548494368,x=3.7778205861620306 color=red,shape=square,flag=0,i=83964,u=0.10649203939316398,v=0.9104669542208729,w=0.5128459717086693,x=4.763743330455749 color=yellow,shape=triangle,flag=1,i=83972,u=0.5376717393736369,v=0.23656209596307531,w=0.4751502662070869,x=4.772911352493985 color=red,shape=circle,flag=1,i=83974,u=0.5387485677513972,v=0.6180599523806768,w=0.4500877751260209,x=4.911772553659389 color=blue,shape=square,flag=1,i=83982,u=0.3513514077826374,v=0.15208318703166146,w=0.45934192210156266,x=5.088986600009058 color=red,shape=circle,flag=0,i=83997,u=0.08951075543053155,v=0.07362376046190192,w=0.4482243519895226,x=4.487627218025021 color=red,shape=triangle,flag=1,i=83998,u=0.6824702806418353,v=0.7461089819377266,w=0.5065779501420412,x=4.372032553209347 color=blue,shape=circle,flag=1,i=84004,u=0.775461605625285,v=0.9760998075460481,w=0.5319321347612134,x=6.185012881228327 color=purple,shape=triangle,flag=0,i=84005,u=0.4450957908541562,v=0.7229964638814087,w=0.4963891458217236,x=5.555679568100611 color=red,shape=square,flag=0,i=84007,u=0.32138973910976965,v=0.3212980963551523,w=0.5093263822517776,x=4.280641488700887 color=blue,shape=circle,flag=1,i=84015,u=0.9388887458530584,v=0.8609702695830763,w=0.5323551392787857,x=6.279675473328702 color=blue,shape=square,flag=0,i=84021,u=0.20733027416885952,v=0.6309677439872041,w=0.46835732829307836,x=5.064016781771638 color=red,shape=triangle,flag=0,i=84024,u=0.15589321076051543,v=0.7721679170997856,w=0.5091670999777331,x=4.238585586171747 color=purple,shape=circle,flag=0,i=84035,u=0.6658447689157138,v=0.4278410789063032,w=0.48325704108040973,x=4.836444687375318 color=blue,shape=triangle,flag=1,i=84038,u=0.9923032048192627,v=0.5512066701071145,w=0.510110423338272,x=4.043821217028412 color=red,shape=circle,flag=0,i=84054,u=0.07815809188305467,v=-0.005166171309403611,w=0.4619224914145091,x=3.7302097734546904 color=red,shape=square,flag=0,i=84061,u=0.13973941028581927,v=0.5409886769252491,w=0.5008958149170422,x=6.190696250694951 color=green,shape=triangle,flag=0,i=84075,u=0.32956554788510006,v=0.5988667525692233,w=0.4889638022392036,x=3.9605060882435095 color=purple,shape=triangle,flag=0,i=84080,u=0.09376770845345361,v=0.865261456689735,w=0.4941171777736501,x=6.544276297520681 color=green,shape=square,flag=0,i=84091,u=0.4765715334261724,v=0.2432673706396874,w=0.5122487395509979,x=6.22276152269719 color=red,shape=triangle,flag=0,i=84103,u=0.1755073072365766,v=0.3661387851424014,w=0.5277425941847986,x=7.33320574592114 color=purple,shape=circle,flag=0,i=84114,u=0.7683281978547455,v=0.6652738892993179,w=0.4700499417260775,x=4.237591710833429 color=blue,shape=square,flag=0,i=84145,u=0.9634567292099476,v=0.7616512666481643,w=0.46593547717089623,x=5.8728163832941265 color=blue,shape=square,flag=1,i=84171,u=0.38062296360170167,v=0.5097475809004562,w=0.46279279351507085,x=5.593228683611702 color=red,shape=triangle,flag=0,i=84174,u=0.12120920680117409,v=0.38448436815394005,w=0.5226332746524399,x=5.174918896192733 color=blue,shape=triangle,flag=1,i=84182,u=0.4091216272376227,v=0.703010888647567,w=0.5045686882224233,x=5.640179590359914 color=red,shape=circle,flag=1,i=84191,u=0.9119375048120245,v=0.9495525581923282,w=0.47331221620880004,x=4.07959729392461 color=purple,shape=square,flag=0,i=84208,u=0.641806501032175,v=0.21250698695225523,w=0.5085333633812319,x=4.584715094139626 color=yellow,shape=circle,flag=1,i=84221,u=0.286405507549519,v=0.8082900367305083,w=0.5458348425158348,x=3.9570103139675035 color=yellow,shape=circle,flag=1,i=84223,u=0.0781039547881206,v=0.15460194406739203,w=0.5404475035429774,x=3.5772472136097964 color=green,shape=triangle,flag=0,i=84237,u=0.910538291083186,v=0.11227748033451224,w=0.4905020629512842,x=4.938672328482595 color=purple,shape=circle,flag=0,i=84238,u=0.39741723896475534,v=0.3119764265038476,w=0.45687560357417495,x=3.856373670994896 color=red,shape=triangle,flag=0,i=84258,u=0.22997337335951007,v=0.5241719142826281,w=0.5040589050882092,x=3.3428223385200373 color=blue,shape=triangle,flag=1,i=84293,u=0.3912066418534581,v=0.802309595939718,w=0.5023443886541941,x=5.803742771910691 color=red,shape=triangle,flag=0,i=84296,u=0.21349483413334447,v=0.6743255768847448,w=0.5002369988689419,x=5.07681927367883 color=red,shape=triangle,flag=0,i=84305,u=0.17887033117247464,v=0.18715285325045183,w=0.4974027151126915,x=6.057029567875758 color=red,shape=triangle,flag=1,i=84309,u=0.4512757646684652,v=0.993734601173005,w=0.5024266019217427,x=3.4502023559579036 color=yellow,shape=triangle,flag=1,i=84310,u=0.4901720145278564,v=0.09164867035655966,w=0.49313791481675356,x=4.920643217483616 color=purple,shape=square,flag=0,i=84315,u=0.3399808993062704,v=0.04127876859147306,w=0.511967519087579,x=5.762010673413871 color=blue,shape=triangle,flag=0,i=84326,u=0.13220137206634552,v=0.7793633267917444,w=0.49934759022397573,x=3.8042440474445236 color=purple,shape=circle,flag=0,i=84338,u=0.6312658643754951,v=0.6448690157921327,w=0.4596221953901663,x=3.6231321482262406 color=red,shape=circle,flag=0,i=84340,u=0.09078148278855669,v=0.15462268170062665,w=0.4586840392126474,x=3.5719558184920106 color=blue,shape=triangle,flag=0,i=84352,u=0.8519968700186483,v=0.5431421882717834,w=0.4976543166827394,x=5.411954000774678 color=blue,shape=circle,flag=1,i=84368,u=0.39823758629063866,v=0.17747700745079165,w=0.5263597303878068,x=4.942388839313421 color=yellow,shape=square,flag=0,i=84373,u=0.20276340976126683,v=0.08063057577027488,w=0.48693185304190123,x=3.9991522556540247 color=red,shape=triangle,flag=1,i=84387,u=0.6169476159181688,v=0.008157381504150352,w=0.5064232151310086,x=3.7602545156818388 color=blue,shape=triangle,flag=1,i=84394,u=0.9464696613785609,v=0.21875861695530463,w=0.5058011846350001,x=4.459892045268972 color=orange,shape=circle,flag=1,i=84396,u=0.6548669492595104,v=0.6625709068459517,w=0.4859572320930812,x=5.280507319360176 color=blue,shape=triangle,flag=1,i=84412,u=0.22842183738672617,v=0.8771339922454624,w=0.5064493565206147,x=5.087556726422471 color=red,shape=square,flag=0,i=84415,u=0.7265418504828559,v=0.5563096404688408,w=0.49143651361346413,x=5.568190299392107 color=blue,shape=circle,flag=0,i=84442,u=0.8248725344255894,v=0.39209379229874686,w=0.5227997397164804,x=3.4751205735705333 color=red,shape=triangle,flag=0,i=84444,u=0.522851906241407,v=0.43608383016782204,w=0.5063728656223513,x=4.274538495471897 color=red,shape=square,flag=0,i=84446,u=0.17335648238807821,v=0.2674430516701156,w=0.4908649331222643,x=4.198948537291329 color=blue,shape=square,flag=0,i=84450,u=0.4354867491224371,v=0.7856218965977316,w=0.4787273295512921,x=7.464601336288314 color=blue,shape=triangle,flag=1,i=84467,u=0.3063383753601002,v=0.10396312686133169,w=0.508702813038436,x=4.590321370903393 color=red,shape=square,flag=0,i=84472,u=0.6779119033983828,v=0.29502336421498343,w=0.49798236054183365,x=6.0887588906882675 color=yellow,shape=triangle,flag=1,i=84475,u=0.2793850272265196,v=0.33066593505469666,w=0.4951274187659189,x=6.733385215299943 color=purple,shape=square,flag=0,i=84493,u=0.7665570484926579,v=0.6267711899704203,w=0.5076242832573972,x=7.681767609263716 color=yellow,shape=triangle,flag=1,i=84499,u=0.8102589958124413,v=0.01822955537663462,w=0.4911328887302529,x=6.939255135064175 color=red,shape=square,flag=1,i=84502,u=0.09218611031858914,v=0.6843884932079767,w=0.5074768447817486,x=6.522408854573524 color=red,shape=circle,flag=1,i=84504,u=0.2391638935246463,v=0.21669966988784334,w=0.482075354587983,x=4.852284919389121 color=red,shape=square,flag=0,i=84510,u=0.8713369143741349,v=0.9961354978991265,w=0.5103807668011715,x=3.584766094737614 color=yellow,shape=triangle,flag=1,i=84526,u=0.691087851817801,v=0.7868338939692598,w=0.49859804610546365,x=3.9136303126874066 color=blue,shape=square,flag=0,i=84527,u=0.6232035322090675,v=0.5021788550619062,w=0.4771117909231017,x=5.260454617949134 color=blue,shape=square,flag=1,i=84538,u=0.9113227919157537,v=0.1214988747081529,w=0.4793201450679552,x=7.471518664410535 color=blue,shape=square,flag=0,i=84544,u=0.6274281898591093,v=0.1487238712848501,w=0.4717429292559921,x=5.980771630766033 color=red,shape=square,flag=0,i=84547,u=0.19572256430413804,v=0.6645880587282045,w=0.504048662582051,x=6.1478699023513625 color=red,shape=circle,flag=0,i=84553,u=0.39399389819049324,v=0.34108334384295924,w=0.47837647377149906,x=5.235365468205119 color=green,shape=triangle,flag=1,i=84555,u=0.8571075083886939,v=0.005432943350398345,w=0.49636770240542544,x=4.026075610733411 color=purple,shape=square,flag=0,i=84557,u=0.11422696544446342,v=0.5444423457254739,w=0.5061268494104082,x=2.4498703133255693 color=purple,shape=circle,flag=0,i=84568,u=0.7594442010862045,v=0.8850235308519641,w=0.4538532040618892,x=4.823699728083295 color=purple,shape=circle,flag=0,i=84576,u=0.25764872780491554,v=0.29643582593363893,w=0.45260252651905714,x=6.453082123422326 color=purple,shape=circle,flag=0,i=84581,u=0.057498107806975285,v=0.571385861245452,w=0.4491137507287069,x=6.1772982133642955 color=red,shape=circle,flag=1,i=84594,u=0.26047143915342275,v=0.31134032641931036,w=0.47647509800992915,x=4.860592225566909 color=yellow,shape=circle,flag=1,i=84613,u=0.8277135750293394,v=0.8097598068686582,w=0.5537927536438878,x=2.9018166469568984 color=red,shape=triangle,flag=0,i=84619,u=0.46158524348506424,v=0.48483994732571123,w=0.4960415246098488,x=4.902335667528943 color=red,shape=triangle,flag=0,i=84628,u=0.8081564672048231,v=0.6141752144426256,w=0.4971870322771153,x=4.866070269885102 color=red,shape=square,flag=1,i=84640,u=0.39519884055437904,v=0.9164095595828995,w=0.5024359751551882,x=4.947931539683516 color=red,shape=square,flag=0,i=84648,u=0.9663104055050857,v=0.9316063431259665,w=0.5037641668693889,x=6.52948065159558 color=red,shape=square,flag=0,i=84650,u=0.19768740184097222,v=0.33747053803626403,w=0.506008673145862,x=4.542667868842889 color=red,shape=circle,flag=0,i=84654,u=0.9981298611871363,v=1.033142534029489,w=0.48122454006344817,x=5.471859227093806 color=purple,shape=circle,flag=0,i=84658,u=0.0826198126900467,v=0.7663654733410326,w=0.45064182878433157,x=3.4997846877625736 color=red,shape=triangle,flag=0,i=84677,u=0.917366677399632,v=0.1600825446719557,w=0.49672429055898054,x=4.783865469383976 color=green,shape=triangle,flag=1,i=84681,u=0.5167232957507374,v=0.5906429506180194,w=0.49603446546416136,x=5.681356092497879 color=red,shape=circle,flag=0,i=84684,u=0.5618792437229114,v=0.47476376187724434,w=0.49077438408929325,x=4.1297581154108824 color=red,shape=triangle,flag=1,i=84687,u=0.6331540491606704,v=0.8228904217882436,w=0.4995613145029491,x=6.752619752644885 color=green,shape=triangle,flag=0,i=84694,u=0.8844290783131042,v=0.37751330116644166,w=0.5011864962969341,x=5.205704557499417 color=blue,shape=square,flag=1,i=84700,u=0.5595307154969456,v=0.8196583374164971,w=0.47222952702091925,x=7.331449811224478 color=blue,shape=circle,flag=0,i=84714,u=0.03861643834946327,v=0.4854506463568181,w=0.5329293059177043,x=5.111822930637758 color=red,shape=triangle,flag=0,i=84730,u=0.29244787054596133,v=0.4330977891452481,w=0.504130556248503,x=7.35082449854281 color=purple,shape=triangle,flag=0,i=84736,u=0.20430110446442407,v=0.3929882389934475,w=0.49385352607461636,x=4.517251449086623 color=blue,shape=triangle,flag=1,i=84763,u=0.2669042494119066,v=0.4590092691038372,w=0.5099980568432776,x=4.117594382024488 color=red,shape=triangle,flag=0,i=84765,u=0.9355705249257841,v=0.9369196923949129,w=0.503860900113285,x=3.8604615545931487 color=red,shape=circle,flag=1,i=84771,u=0.8383550173417015,v=0.808406855475372,w=0.4960280209975012,x=5.968965971904798 color=red,shape=circle,flag=0,i=84790,u=0.6529820277882176,v=0.628874774869151,w=0.49687396352278995,x=4.52261320381504 color=red,shape=square,flag=0,i=84804,u=0.25663181926400536,v=0.9727661599849248,w=0.5132658723080127,x=5.426257046930297 color=purple,shape=square,flag=0,i=84816,u=0.38326323260477413,v=0.046358787043141114,w=0.5107969443916618,x=4.9942743361256134 color=orange,shape=square,flag=0,i=84833,u=0.7135417290023929,v=0.5616180516712003,w=0.5053749607989979,x=2.8920973077666314 color=purple,shape=square,flag=0,i=84844,u=0.7894239820145166,v=0.1557304918328546,w=0.5080335051392121,x=6.390974330149276 color=red,shape=triangle,flag=0,i=84861,u=0.04171663848949825,v=0.18201975586900154,w=0.4993168012316726,x=7.073345153242407 color=red,shape=circle,flag=1,i=84862,u=0.6657520237052819,v=0.578339423566302,w=0.49881907484704463,x=5.128702343721816 color=blue,shape=triangle,flag=0,i=84878,u=0.9822248067469724,v=0.7124408927579092,w=0.5114109499406355,x=5.280662316539495 color=purple,shape=triangle,flag=0,i=84880,u=0.7384022185448347,v=0.627917108777412,w=0.49171489047163885,x=1.7460582889478633 color=red,shape=triangle,flag=0,i=84907,u=0.27355357853304085,v=0.24234572962600331,w=0.49627089393657586,x=6.559109634016019 color=red,shape=circle,flag=0,i=84915,u=0.948879045920595,v=0.8553745137306265,w=0.49419148495266274,x=3.888399632140649 color=red,shape=triangle,flag=0,i=84924,u=0.7773778755698789,v=0.3300384867893771,w=0.4924433033519024,x=6.059699763981318 color=purple,shape=square,flag=0,i=84925,u=0.7247670035450625,v=0.11974741035291536,w=0.5096314557272542,x=4.42453511961119 color=yellow,shape=square,flag=1,i=84933,u=0.01638922093087003,v=0.6259575289432724,w=0.47107959659631293,x=5.56966217227509 color=yellow,shape=square,flag=1,i=84943,u=0.593468380468002,v=0.2529719507654551,w=0.47441530516841673,x=5.678756268202779 color=purple,shape=triangle,flag=0,i=84978,u=0.6888067151424385,v=0.5778705905592166,w=0.4888276349872249,x=3.6004690047827936 color=yellow,shape=square,flag=1,i=84997,u=0.6948563903709681,v=0.4773120583924717,w=0.46799778516555024,x=5.200188934040355 color=blue,shape=triangle,flag=1,i=85001,u=0.4468466813667844,v=0.43362920993357335,w=0.515729505499019,x=4.81533198522991 color=red,shape=circle,flag=1,i=85007,u=0.32293035851090535,v=0.2695397847604287,w=0.49819765309459557,x=4.432970695645839 color=red,shape=circle,flag=0,i=85011,u=0.0934455553004091,v=0.09706827408347332,w=0.5002420671062757,x=2.9921874167667997 color=red,shape=square,flag=0,i=85029,u=0.4155861942682759,v=0.8323807540582205,w=0.5079107752577897,x=4.7743652931057206 color=red,shape=square,flag=0,i=85035,u=0.2547348661030797,v=0.8176917826597205,w=0.5065431430624738,x=6.072912280477126 color=red,shape=square,flag=0,i=85055,u=0.7347099053004672,v=0.20777365073206178,w=0.4983527615812199,x=6.906273367401151 color=yellow,shape=square,flag=1,i=85069,u=0.34708535893298476,v=0.7588761693759328,w=0.46509805840758206,x=5.958273799673441 color=red,shape=square,flag=1,i=85072,u=0.9702967271485906,v=0.8217949607270094,w=0.49749142383226713,x=7.923479574964664 color=red,shape=square,flag=1,i=85073,u=0.5595827772690272,v=0.8629834809138323,w=0.4963813746205957,x=3.643111682849435 color=yellow,shape=triangle,flag=1,i=85084,u=0.27016626275607336,v=0.2361061432725633,w=0.4975572638226982,x=4.899198302990696 color=red,shape=triangle,flag=1,i=85092,u=0.9783138836283432,v=0.06871908092818602,w=0.4723087234497161,x=2.429194040014615 color=yellow,shape=square,flag=1,i=85100,u=0.601341752261887,v=0.9871014256790142,w=0.4656642070109788,x=3.9584981516024524 color=yellow,shape=circle,flag=1,i=85109,u=0.2584121166844663,v=0.5770647909784982,w=0.5389870481057049,x=5.1688393644673765 color=purple,shape=triangle,flag=1,i=85114,u=0.6627940020983101,v=0.21742985611982912,w=0.48638370238500866,x=4.627590199271363 color=orange,shape=square,flag=0,i=85118,u=0.8669739809149121,v=0.9756108423175313,w=0.5053008946570394,x=5.409891613045471 color=red,shape=square,flag=1,i=85119,u=0.36555357466852056,v=0.07645205536172783,w=0.508337935006973,x=5.193246662529672 color=orange,shape=square,flag=0,i=85122,u=0.18957297427068343,v=0.011289215203845293,w=0.5014881603996104,x=5.156932876359062 color=red,shape=triangle,flag=1,i=85129,u=0.5417221364135402,v=0.05125548267174118,w=0.4713375130413683,x=4.392247287226662 color=red,shape=square,flag=0,i=85131,u=0.5773984901362054,v=0.2862726305555673,w=0.5072039719902021,x=2.682110304825743 color=red,shape=square,flag=0,i=85150,u=0.5342658852870467,v=0.40331767406650676,w=0.5071660161631717,x=4.263485716178285 color=red,shape=square,flag=0,i=85154,u=0.16538091099895547,v=0.21231903796909646,w=0.5077362885250679,x=3.4170918666907717 color=green,shape=triangle,flag=0,i=85169,u=0.9130901842355247,v=0.42733433771940554,w=0.5155023420439412,x=5.084294034388891 color=purple,shape=circle,flag=0,i=85199,u=0.8524367050494912,v=0.16889278277483777,w=0.468648674681958,x=4.608871038377759 color=red,shape=triangle,flag=0,i=85205,u=0.7170259743418136,v=0.48217035408733866,w=0.46432760927314887,x=5.7237002632622636 color=yellow,shape=square,flag=1,i=85215,u=0.5443243056501877,v=0.6274756987542268,w=0.46024736512963077,x=3.3378575398079207 color=blue,shape=circle,flag=1,i=85228,u=0.730781063090646,v=0.8305406720518591,w=0.5294685295586468,x=5.279958423374869 color=purple,shape=square,flag=0,i=85237,u=0.2115296774168054,v=0.3849712182704629,w=0.5205918866192383,x=4.174181627928343 color=purple,shape=square,flag=0,i=85244,u=0.20863695328870535,v=0.029838647145262076,w=0.5154733388357255,x=5.749372843102285 color=purple,shape=circle,flag=0,i=85263,u=0.11426478394849648,v=0.21050411490040977,w=0.4635914066485068,x=2.434820725773794 color=red,shape=circle,flag=0,i=85273,u=0.8361221943478852,v=0.8757821773856019,w=0.49332492821121826,x=4.710085487104611 color=orange,shape=square,flag=0,i=85303,u=0.630866106889544,v=0.3508645843901491,w=0.5002736025930848,x=3.1474729833495876 color=blue,shape=triangle,flag=1,i=85304,u=0.6577322326675539,v=0.5225108935589138,w=0.5156793109401394,x=5.460942893587558 color=purple,shape=triangle,flag=0,i=85306,u=0.8677775392639049,v=0.6198611554396952,w=0.48793011766344674,x=5.673571977672875 color=orange,shape=triangle,flag=1,i=85308,u=0.591971936852446,v=0.11662916228512576,w=0.4737029597625125,x=4.273321383567371 color=red,shape=triangle,flag=1,i=85332,u=0.2280079468651427,v=0.7814860351373184,w=0.45158159881824833,x=4.518228902849963 color=red,shape=circle,flag=1,i=85333,u=0.7132420929497385,v=0.7186658256455496,w=0.48848404033182935,x=5.0887037297452204 color=red,shape=triangle,flag=0,i=85348,u=0.8220190323544991,v=0.9925354915056449,w=0.45713990783701103,x=5.57264764814727 color=purple,shape=square,flag=0,i=85361,u=0.5574011458103179,v=0.7149337853086016,w=0.5309299835992229,x=5.408515297062594 color=red,shape=square,flag=0,i=85390,u=0.09687680238856133,v=0.891289484293177,w=0.49620176948822337,x=4.41081053227365 color=yellow,shape=triangle,flag=1,i=85420,u=0.9706115695543969,v=0.1247673124994404,w=0.5222142030313565,x=6.609298129619411 color=red,shape=triangle,flag=0,i=85441,u=0.28580596622573007,v=0.3907064570339188,w=0.4716269715918478,x=6.043439010813056 color=red,shape=square,flag=1,i=85442,u=0.4278639656009402,v=0.4774052494332929,w=0.5050408021489939,x=6.126742881761789 color=red,shape=triangle,flag=0,i=85446,u=0.17378473843917996,v=0.9701494204940466,w=0.4702290960944805,x=6.718528092966392 color=red,shape=square,flag=1,i=85457,u=0.24499921027124094,v=0.255208718562683,w=0.5008275824423128,x=3.9262527039462953 color=red,shape=circle,flag=1,i=85466,u=0.5277776840661931,v=0.42950624105860313,w=0.49914970743581427,x=3.5720884940081934 color=green,shape=square,flag=0,i=85473,u=0.0714693766989114,v=0.8434590154440507,w=0.5052443561253518,x=6.145472220740967 color=green,shape=square,flag=0,i=85478,u=0.32639389722343193,v=0.5267758335709026,w=0.5066189091332679,x=5.464966261201148 color=green,shape=square,flag=1,i=85510,u=0.6004974338488954,v=0.7787426708887795,w=0.509429189860972,x=4.965408694259128 color=yellow,shape=square,flag=1,i=85521,u=0.38092380568353834,v=0.3196930143459549,w=0.4560242699345026,x=4.204302702715086 color=red,shape=circle,flag=0,i=85524,u=0.4624156956849369,v=0.455344260258324,w=0.5040478108921573,x=6.410838916235206 color=red,shape=square,flag=0,i=85547,u=0.22301696363349044,v=0.8109135025164587,w=0.5013234191873367,x=4.7675392701979575 color=yellow,shape=square,flag=0,i=85553,u=0.5405534796417821,v=0.1406357376974694,w=0.45337132724477797,x=4.71939290164823 color=orange,shape=triangle,flag=1,i=85557,u=0.01590664870399494,v=0.4572765600077092,w=0.4840452019160308,x=5.782387968496991 color=yellow,shape=triangle,flag=1,i=85567,u=0.20242937347513024,v=0.32187513135938317,w=0.5189221860617227,x=4.473026779655001 color=red,shape=square,flag=1,i=85577,u=0.2041418104845184,v=0.4581217249811622,w=0.4895326428218526,x=4.83545893940905 color=yellow,shape=circle,flag=0,i=85585,u=0.8297487271228928,v=0.47265214548585377,w=0.5324445777405135,x=5.332570876788594 color=red,shape=square,flag=0,i=85586,u=0.60619770573938,v=0.7868679676557547,w=0.49445333773164496,x=3.564003050613175 color=red,shape=triangle,flag=0,i=85594,u=0.6857743746636775,v=0.8978983846092662,w=0.458790528254551,x=4.904617735550746 color=green,shape=square,flag=0,i=85607,u=0.9722726751360444,v=0.9583812069083181,w=0.5106020893074634,x=6.707855553111038 color=purple,shape=triangle,flag=0,i=85614,u=0.7187795651758097,v=0.5476835679019041,w=0.48872223232107664,x=4.555474941216741 color=blue,shape=square,flag=1,i=85618,u=0.8069624874650082,v=0.5437604410713842,w=0.47384612223623185,x=4.38964723496028 color=blue,shape=square,flag=1,i=85620,u=0.5029309949119753,v=0.5272989418629264,w=0.4737437693534424,x=6.251160899306548 color=orange,shape=square,flag=1,i=85624,u=0.42850197928902745,v=0.9327841104315517,w=0.4939073304491279,x=4.071958673876106 color=blue,shape=square,flag=1,i=85627,u=0.36979380303155596,v=0.2487632991955283,w=0.47112878559950194,x=5.458867702183956 color=red,shape=square,flag=0,i=85641,u=0.6892243942831818,v=0.12380871620827827,w=0.49126188466862863,x=5.786270563124558 color=yellow,shape=circle,flag=1,i=85655,u=0.7661219735643151,v=0.17461499712153228,w=0.5224586176582287,x=3.5546468931271082 color=red,shape=circle,flag=1,i=85664,u=0.2637257788219187,v=0.22562504866157346,w=0.49992691459899724,x=2.236094072428751 color=green,shape=circle,flag=0,i=85685,u=0.9438304606302973,v=0.21780940451843955,w=0.5104681714170178,x=5.200868325295786 color=yellow,shape=square,flag=1,i=85690,u=0.49407280185669855,v=0.632541357132386,w=0.4600063441141154,x=5.5178447148283984 color=yellow,shape=circle,flag=1,i=85694,u=0.8381672748863793,v=0.21755473462835673,w=0.5207229879030026,x=6.4984791392966805 color=yellow,shape=triangle,flag=0,i=85708,u=0.19514881275968465,v=0.025996136864955277,w=0.5191329727433874,x=3.565050187934149 color=red,shape=triangle,flag=0,i=85726,u=0.07567877986647131,v=0.42068268728195646,w=0.4696827504269808,x=6.609871290553852 color=red,shape=triangle,flag=0,i=85729,u=0.5709126090910467,v=0.5413260773979797,w=0.4697768627794909,x=7.947189574977039 color=yellow,shape=square,flag=1,i=85739,u=0.3246029901266696,v=0.9588994619184443,w=0.4603194775432964,x=5.897082314294825 color=green,shape=square,flag=1,i=85751,u=0.8462597371150543,v=0.721456519915196,w=0.5118679688546229,x=4.5177921623167885 color=green,shape=circle,flag=0,i=85753,u=0.8434747395858071,v=0.07402838892297958,w=0.5158831371942311,x=4.293753444251344 color=red,shape=circle,flag=1,i=85757,u=0.4680733653101632,v=0.5371720006634939,w=0.5026094351783746,x=3.3877495456668973 color=red,shape=circle,flag=1,i=85762,u=0.4191097569913754,v=0.47246119250979496,w=0.5044547720935116,x=3.7685738018741746 color=blue,shape=triangle,flag=0,i=85771,u=0.6461324979428906,v=0.8361442544262598,w=0.519335505911322,x=6.575771580595844 color=green,shape=triangle,flag=0,i=85772,u=0.8377644060982539,v=0.5503414418976728,w=0.4985261271489029,x=4.7498125701451706 color=blue,shape=square,flag=1,i=85783,u=0.6964744348337873,v=0.8868560515441671,w=0.47398401764450804,x=6.114045508861097 color=red,shape=square,flag=1,i=85798,u=0.013020691498634274,v=0.5495552753534988,w=0.5253784442607773,x=4.725617124076844 color=red,shape=circle,flag=1,i=85801,u=0.4738364893586757,v=0.4701732332869386,w=0.49639536384015565,x=6.8752987633081135 color=red,shape=circle,flag=1,i=85810,u=0.6656105725283946,v=0.75108137973318,w=0.4949443113514723,x=5.281658329539386 color=red,shape=square,flag=0,i=85811,u=0.25596923431129603,v=0.051093538322888876,w=0.5264823108099105,x=3.6654730030376803 color=purple,shape=circle,flag=0,i=85822,u=0.8938248057786501,v=0.42098153130622296,w=0.4802087471289647,x=5.863618478077068 color=blue,shape=circle,flag=1,i=85824,u=0.4708250203200308,v=0.19654657972700595,w=0.5051505439281154,x=3.585234005506477 color=red,shape=square,flag=0,i=85826,u=0.008350166019426397,v=0.09470629678221865,w=0.5181745987055807,x=5.191052375330684 color=red,shape=circle,flag=1,i=85850,u=0.37045404571025775,v=0.41743549979617406,w=0.4858214415189545,x=5.741370933050528 color=red,shape=circle,flag=0,i=85864,u=0.8942631011543773,v=0.8638887743711348,w=0.4966035867030875,x=2.9373743964041954 color=red,shape=triangle,flag=0,i=85865,u=0.957273783720544,v=0.7733201101963969,w=0.4713425199954149,x=6.175683625759825 color=purple,shape=square,flag=0,i=85869,u=0.5128409293908851,v=0.11497086312151694,w=0.531286691146988,x=7.656167922482241 color=red,shape=triangle,flag=0,i=85873,u=0.20784804688845426,v=0.7388074595717812,w=0.47014346630134474,x=3.694114890206754 color=red,shape=triangle,flag=1,i=85874,u=0.30082957301848523,v=0.5653276652271506,w=0.4734696065196633,x=6.357267490275895 color=red,shape=circle,flag=0,i=85881,u=0.23433800404204164,v=0.1393151182299473,w=0.4950474060233168,x=4.786690595721022 color=purple,shape=circle,flag=0,i=85884,u=0.6214496500365904,v=0.30742759739689407,w=0.4792694327595867,x=4.91100159602182 color=blue,shape=circle,flag=0,i=85898,u=0.7986458160900594,v=0.18585005223047135,w=0.5039231103949626,x=5.626741318070789 color=red,shape=square,flag=0,i=85903,u=0.6848533104329096,v=0.33056972283940667,w=0.5379726281281916,x=4.717831083697813 color=green,shape=triangle,flag=0,i=85916,u=0.2839822189749771,v=0.73775579533104,w=0.5049172441133688,x=6.716827851033396 color=red,shape=circle,flag=0,i=85927,u=0.5492331749387379,v=0.6457659939155009,w=0.48873057639053413,x=6.400011063657911 color=purple,shape=circle,flag=0,i=85954,u=0.33026844977478165,v=0.34444832024348426,w=0.4814777732869112,x=4.4048141888059265 color=yellow,shape=circle,flag=1,i=85955,u=0.9133316022820065,v=0.9649385884565533,w=0.524248057841048,x=4.101212085394714 color=purple,shape=circle,flag=0,i=85956,u=0.316217615121002,v=0.25815593493508604,w=0.4851282848578222,x=6.0113687193808145 color=red,shape=square,flag=0,i=85957,u=0.03892892550034732,v=0.5851772338257412,w=0.549080533872407,x=3.9391065302101325 color=blue,shape=square,flag=0,i=85962,u=0.5796519950537246,v=0.5225193068500436,w=0.46812592683127857,x=3.5333053612012635 color=green,shape=square,flag=0,i=85964,u=0.9940685289652789,v=0.3196874106138835,w=0.5106399734383792,x=6.627733957167792 color=red,shape=square,flag=0,i=85968,u=0.24608812446195005,v=0.1800137254303592,w=0.5446206058541022,x=4.893937149938307 color=purple,shape=triangle,flag=0,i=86013,u=0.6506952388147397,v=0.6296636866615741,w=0.4914499285808656,x=4.012082590394638 color=red,shape=triangle,flag=1,i=86025,u=0.2514261207127588,v=0.6535792580599258,w=0.46582790524260004,x=2.9258416449390894 color=red,shape=square,flag=0,i=86029,u=0.8029325391323049,v=0.9263691643301364,w=0.5578502339843877,x=3.186559900751657 color=red,shape=triangle,flag=0,i=86032,u=0.882105188724888,v=0.04775054632160425,w=0.46798223198899663,x=6.252781391016099 color=red,shape=triangle,flag=0,i=86055,u=0.1674972380102433,v=0.2609421092907568,w=0.4699456074449321,x=5.078946056985045 color=purple,shape=circle,flag=0,i=86080,u=0.12397971577750255,v=0.9708882164743036,w=0.48617682829403663,x=5.257074069129675 color=blue,shape=square,flag=0,i=86082,u=0.7340898571795469,v=0.4757366760248247,w=0.46296304032021257,x=6.244017326913152 color=red,shape=triangle,flag=0,i=86089,u=0.08891645540192639,v=0.7531671348537611,w=0.4682200355584395,x=2.907319480910244 color=yellow,shape=circle,flag=1,i=86099,u=0.0254896318150033,v=0.8823210564149404,w=0.5211398295543085,x=5.378323465527184 color=yellow,shape=circle,flag=1,i=86101,u=0.5349134399214438,v=0.5923192653969284,w=0.5167487348865745,x=4.405082669340497 color=yellow,shape=triangle,flag=1,i=86104,u=0.6059341819703445,v=0.42433189146973194,w=0.5112106634865347,x=5.896060950562372 color=red,shape=square,flag=0,i=86126,u=0.03999643900721206,v=0.7132445010070424,w=0.5388732506134749,x=3.4010268008615916 color=purple,shape=circle,flag=0,i=86132,u=0.1041833210653601,v=0.6829350157801621,w=0.49201749557060254,x=3.781136668626683 color=red,shape=circle,flag=0,i=86142,u=0.3759087757093993,v=0.46423172399914614,w=0.48604745777303643,x=5.808747262283556 color=yellow,shape=square,flag=1,i=86144,u=0.4029289128797666,v=0.0013758815078774855,w=0.4645604940556546,x=4.368476056376362 color=purple,shape=triangle,flag=0,i=86152,u=0.058665436954591255,v=0.40989712209393114,w=0.4934392583554017,x=2.8678175407018283 color=green,shape=triangle,flag=0,i=86154,u=0.40322931048568733,v=0.27864472268185003,w=0.5062392349203582,x=4.248792381923482 color=blue,shape=circle,flag=1,i=86155,u=0.29812139403575255,v=0.5632206087816237,w=0.49860214007931175,x=8.146885882174693 color=yellow,shape=triangle,flag=1,i=86156,u=0.3154182356974319,v=0.5474863972186107,w=0.5093497549932269,x=5.050591329344595 color=purple,shape=circle,flag=0,i=86176,u=0.21380841899332537,v=0.4513242975790873,w=0.4965056985119337,x=4.5494233554288295 color=purple,shape=triangle,flag=0,i=86189,u=0.28655987765812085,v=0.16266134693515133,w=0.4932688699946626,x=6.321522974744133 color=blue,shape=circle,flag=1,i=86195,u=0.000690052898613347,v=0.7789329485527191,w=0.4996831517213931,x=5.861801301751025 color=red,shape=triangle,flag=0,i=86199,u=0.2798998249390876,v=0.23113290298367495,w=0.4921642951191572,x=4.9619101130679555 color=red,shape=square,flag=0,i=86201,u=0.9356844302485094,v=0.9211556757351993,w=0.5286359285573382,x=4.095001154333659 color=yellow,shape=square,flag=1,i=86205,u=0.1721818367237269,v=0.9124919327239045,w=0.4706789831435059,x=4.327202260637639 color=red,shape=square,flag=0,i=86213,u=0.407164590915292,v=0.020187542465808894,w=0.5236383119561624,x=3.6898982852695568 color=purple,shape=circle,flag=0,i=86216,u=0.9061186371270176,v=0.9312798715094261,w=0.4983599282061592,x=4.53529395941221 color=red,shape=square,flag=0,i=86217,u=0.6342717782829218,v=0.5039073408150256,w=0.5226067930252241,x=4.492831683399684 color=purple,shape=triangle,flag=0,i=86235,u=0.736999489217027,v=0.9288874856518851,w=0.49342172835776904,x=4.895402544925116 color=red,shape=triangle,flag=1,i=86240,u=0.09511647804434442,v=0.8624159415485466,w=0.49925655183443063,x=3.5898618000696856 color=red,shape=circle,flag=1,i=86244,u=0.7436229251357463,v=0.7932897198188944,w=0.483432704305946,x=4.833950135623271 color=yellow,shape=circle,flag=1,i=86281,u=0.3223478910035237,v=0.013718487106361699,w=0.5071570059762378,x=4.6248122736214965 color=yellow,shape=circle,flag=1,i=86282,u=0.031442165109897946,v=0.538171663420788,w=0.5071514616236765,x=4.491465925327968 color=red,shape=square,flag=0,i=86297,u=0.7215000632812368,v=0.9783446977147177,w=0.520997153003067,x=5.550844082665016 color=red,shape=circle,flag=0,i=86311,u=0.5958837608067776,v=0.5709302556286382,w=0.48900804484503757,x=5.042102449732762 color=red,shape=square,flag=0,i=86317,u=0.6046801460521182,v=0.028027083129846586,w=0.5115028321305282,x=5.004572163125208 color=red,shape=circle,flag=1,i=86336,u=0.22553877314772253,v=0.1394629716917561,w=0.4866804974288476,x=6.997607529360064 color=red,shape=circle,flag=0,i=86342,u=0.15050749354087012,v=0.2429233771101954,w=0.49180627238182884,x=4.141027438779219 color=red,shape=square,flag=0,i=86347,u=0.5734807473265005,v=0.7050556756360538,w=0.5117582718270743,x=3.795151568207107 color=green,shape=circle,flag=0,i=86371,u=0.6033823900126042,v=0.16207432846592873,w=0.5134011972671004,x=4.735523286095609 color=purple,shape=triangle,flag=0,i=86377,u=0.3689413424208302,v=0.055498762494094134,w=0.4957949619575204,x=5.292643120408306 color=green,shape=square,flag=0,i=86382,u=0.0994751006178235,v=0.6511327561927346,w=0.4938150397937878,x=7.268578505820497 color=blue,shape=square,flag=1,i=86383,u=0.6047195197378054,v=0.660608346804571,w=0.4663422523744924,x=5.6997159281568 color=yellow,shape=circle,flag=1,i=86388,u=0.6564709385781753,v=0.994190627211483,w=0.5018065000024834,x=4.073076131944515 color=yellow,shape=circle,flag=1,i=86392,u=0.9159440153422648,v=0.7208506227267477,w=0.49994664904904,x=5.8765737127761595 color=red,shape=square,flag=0,i=86393,u=0.23969864901411753,v=0.4352870885496487,w=0.5049458261730994,x=4.210419201281581 color=red,shape=triangle,flag=0,i=86400,u=0.6940160483165602,v=0.08575494812049977,w=0.501242183887338,x=3.9464616531747096 color=blue,shape=triangle,flag=1,i=86402,u=0.8605317944477321,v=0.2271908329075828,w=0.5073438854913153,x=4.1888063190023805 color=red,shape=triangle,flag=0,i=86410,u=0.14299995143384658,v=0.8867698601893216,w=0.49966092838729625,x=4.199278798485914 color=red,shape=circle,flag=1,i=86468,u=0.02771278651557585,v=0.03429131662711673,w=0.4706123757423119,x=5.170327939421174 color=red,shape=triangle,flag=1,i=86477,u=0.44699388675486385,v=0.14982804239628988,w=0.491861371753282,x=5.358698469407348 color=red,shape=square,flag=0,i=86496,u=0.9001852868513311,v=0.1563407769787356,w=0.5017492852481726,x=5.869252325467563 color=green,shape=circle,flag=1,i=86508,u=0.7845871626702107,v=0.019979627232190045,w=0.5115787320434757,x=4.2030315831903735 color=green,shape=square,flag=0,i=86510,u=0.8116052190275128,v=0.8935586352512453,w=0.4942763185069306,x=4.52279110202832 color=red,shape=square,flag=0,i=86547,u=0.7660819275029396,v=0.3115107074174447,w=0.4978429768605359,x=3.3946909305862696 color=green,shape=square,flag=0,i=86554,u=0.20726603123512322,v=0.42379106773486197,w=0.4972105620776079,x=4.555006054175362 color=green,shape=square,flag=1,i=86563,u=0.5546738511920734,v=0.7079784162616318,w=0.5007437090007817,x=4.940556766517629 color=yellow,shape=circle,flag=1,i=86585,u=0.6546501013144669,v=0.09128249159926538,w=0.4925300405426629,x=3.202670367906642 color=red,shape=square,flag=1,i=86587,u=0.16661565181086957,v=0.8444460150291666,w=0.48899516856978387,x=4.605005124717778 color=purple,shape=circle,flag=0,i=86595,u=0.046096169230748996,v=0.6330365289927855,w=0.49763304811033415,x=5.287341985182163 color=yellow,shape=square,flag=1,i=86619,u=0.6644835752780938,v=0.4066231631531583,w=0.498414931297478,x=3.9208640839403675 color=blue,shape=circle,flag=1,i=86628,u=0.6360027207753243,v=0.7040623704100735,w=0.5079478269038831,x=5.369460230158197 color=red,shape=circle,flag=0,i=86634,u=0.6102336275941573,v=0.5426461613898843,w=0.4787986920317028,x=6.91946947575433 color=blue,shape=square,flag=0,i=86642,u=0.12358187244307994,v=0.02035756741710959,w=0.47691608451661566,x=3.637759428157294 color=green,shape=square,flag=0,i=86652,u=0.49987543705384985,v=0.27028489536048905,w=0.49681960723694485,x=3.3080913569405497 color=blue,shape=square,flag=1,i=86657,u=0.05946106617345159,v=0.4532670390203296,w=0.4776134074601565,x=6.671658709259874 color=blue,shape=triangle,flag=1,i=86674,u=0.27971271459463276,v=0.35402444918062537,w=0.4999477642634154,x=4.092460843085399 color=red,shape=triangle,flag=0,i=86682,u=0.43368658742377975,v=0.8826609374254298,w=0.5193062129437737,x=1.2146763609358853 color=purple,shape=triangle,flag=0,i=86694,u=0.4361122074666044,v=0.6917074618192002,w=0.49239944720507756,x=3.084716917371697 color=red,shape=triangle,flag=1,i=86701,u=0.2765643106345562,v=0.5939979701878836,w=0.5146188457161298,x=6.8359795324213835 color=blue,shape=triangle,flag=1,i=86708,u=0.5786771300643293,v=0.6142600340649169,w=0.4991815807818477,x=5.290739355892209 color=yellow,shape=triangle,flag=0,i=86720,u=0.7711922622191889,v=0.2251062751896522,w=0.4939260197702981,x=3.160490042738331 color=green,shape=circle,flag=0,i=86730,u=0.09860641262650338,v=0.5449504130478615,w=0.5045129181223662,x=5.165867446005227 color=yellow,shape=circle,flag=1,i=86743,u=0.3665007718315332,v=0.7514930942145615,w=0.4848596594877264,x=4.842455768318108 color=red,shape=square,flag=0,i=86749,u=0.8389029960044865,v=0.860750605855949,w=0.501458353783284,x=3.19218817124321 color=yellow,shape=triangle,flag=1,i=86759,u=0.07227170639272118,v=0.2816426208022663,w=0.48605622671986337,x=5.354836096912901 color=purple,shape=circle,flag=0,i=86764,u=0.17201355773495508,v=0.24756271742805946,w=0.4944297443915493,x=4.918458155450148 color=green,shape=square,flag=0,i=86778,u=0.6635615363258186,v=0.19657031432664474,w=0.49589837786327046,x=6.642454900130587 color=red,shape=triangle,flag=0,i=86785,u=0.360773189183068,v=0.5248461207576682,w=0.5090292387452188,x=4.430519083215832 color=green,shape=triangle,flag=0,i=86788,u=0.9226419634151455,v=0.06741602036717442,w=0.5091812925736865,x=3.4154247812656515 color=red,shape=triangle,flag=1,i=86797,u=0.2780736090059539,v=0.6747335930438723,w=0.508377691060558,x=3.322333341339808 color=orange,shape=circle,flag=0,i=86798,u=0.20748653676403406,v=0.4123003163495188,w=0.494195797219976,x=6.232117654654036 color=red,shape=circle,flag=0,i=86803,u=0.5152339306361557,v=0.5750573240341217,w=0.4895081853111887,x=6.406757210484545 color=purple,shape=triangle,flag=0,i=86804,u=0.053563008562753645,v=0.08131649748602454,w=0.48618442533423495,x=4.762474218129651 color=red,shape=square,flag=0,i=86820,u=0.7487535986212616,v=0.5149128090498354,w=0.5091472709116461,x=4.175425294558464 color=blue,shape=square,flag=1,i=86823,u=0.9782709459666242,v=0.5258073459494389,w=0.47581614867538397,x=6.20605772925591 color=blue,shape=square,flag=1,i=86833,u=0.9652355409798492,v=0.2729426369750859,w=0.48104940270659097,x=5.400030744031735 color=yellow,shape=square,flag=1,i=86844,u=0.9659526616525094,v=0.8275642198610555,w=0.4978229875585131,x=3.253920147246891 color=purple,shape=square,flag=0,i=86853,u=0.5638980409308909,v=0.1361063038780117,w=0.5381885216746034,x=3.5002808094746194 color=green,shape=square,flag=0,i=86855,u=0.7837064000167976,v=0.7644152694922427,w=0.49875527920017143,x=4.6183863066724244 color=red,shape=triangle,flag=0,i=86864,u=0.2976658081930511,v=0.36850196425385795,w=0.4973013602419118,x=4.661139636780618 color=blue,shape=square,flag=1,i=86866,u=0.7365425661310253,v=0.45583970199582713,w=0.48565503296948664,x=5.209628722186546 color=green,shape=circle,flag=0,i=86869,u=0.8479196770587611,v=0.9933079612771681,w=0.5048446284964669,x=5.567739255489422 color=red,shape=square,flag=1,i=86886,u=0.991096511437496,v=0.025105301614998132,w=0.5179123967745594,x=5.931435348137742 color=red,shape=triangle,flag=1,i=86910,u=0.39767185862779686,v=0.9376186130941725,w=0.4994102614655188,x=3.399354147428521 color=red,shape=circle,flag=1,i=86911,u=0.781160381108894,v=0.725985369836209,w=0.4955132160741051,x=4.732900556687531 color=red,shape=square,flag=0,i=86919,u=0.6549377334854134,v=0.09084926769783574,w=0.5174924922748046,x=3.475455623251961 color=red,shape=circle,flag=0,i=86923,u=0.6017358132650914,v=0.5219351035857995,w=0.4958945620205581,x=6.38592524546268 color=blue,shape=circle,flag=0,i=86931,u=0.8012162042283488,v=0.3480468507230474,w=0.5046025568164396,x=5.073914226625629 color=red,shape=circle,flag=0,i=86953,u=0.11509170888080389,v=0.13995988845008878,w=0.49467070579276473,x=4.672111397578845 color=red,shape=triangle,flag=0,i=86956,u=0.6955703797996894,v=0.3362958683867011,w=0.4995226901985453,x=7.19957078603985 color=green,shape=square,flag=0,i=86958,u=0.5277957486992041,v=0.3793846240217911,w=0.4962027804037736,x=6.103713989801951 color=red,shape=triangle,flag=1,i=86968,u=0.9585030343837033,v=0.34914529683213924,w=0.4980864448121288,x=7.888527058456321 color=red,shape=triangle,flag=1,i=86975,u=0.6316751169638901,v=0.15769747029531256,w=0.49936074424643995,x=2.737391868241301 color=blue,shape=circle,flag=1,i=86977,u=0.30488416058328904,v=0.4558390636812145,w=0.506877310972472,x=5.65093335347233 color=green,shape=circle,flag=0,i=86981,u=0.6255236855282953,v=0.6010377242870991,w=0.5090970434834531,x=4.754334188386776 color=red,shape=square,flag=1,i=86988,u=0.20098946351521962,v=0.13185884973284479,w=0.501977508680943,x=5.137385350112086 color=purple,shape=triangle,flag=0,i=87000,u=0.6994711351679362,v=0.6618277787917952,w=0.47045540593326923,x=6.577365405041516 color=purple,shape=circle,flag=0,i=87009,u=0.15060201263445305,v=0.9526823209642867,w=0.5091184802785791,x=2.3268436901379306 color=blue,shape=triangle,flag=1,i=87013,u=0.020116121842534085,v=0.25635180042008754,w=0.4948032078553967,x=5.439475014913131 color=purple,shape=square,flag=0,i=87017,u=0.783648275792587,v=0.02340576806594241,w=0.5340442822042968,x=4.881974126747804 color=blue,shape=circle,flag=1,i=87022,u=0.42136803817120383,v=0.7131486953510967,w=0.5093248294858664,x=5.468675937919926 color=red,shape=circle,flag=0,i=87080,u=0.50695904929708,v=0.45362813092781795,w=0.5002424650267973,x=4.416628162677404 color=blue,shape=square,flag=1,i=87082,u=0.5911521642027565,v=0.4720656349088185,w=0.49510426570538496,x=5.7692674352098985 color=blue,shape=triangle,flag=1,i=87083,u=0.4296989532318465,v=0.9371168543502997,w=0.49531661348596145,x=5.2322044274594575 color=yellow,shape=circle,flag=1,i=87108,u=0.3246411752422569,v=0.3644432284212491,w=0.4968276436683879,x=2.8080934642277473 color=red,shape=triangle,flag=1,i=87109,u=0.4493685440024452,v=0.16826268546764256,w=0.48580962454749893,x=5.166151101612523 color=red,shape=circle,flag=1,i=87113,u=0.5317233378110757,v=0.45055848630920664,w=0.4930285204979886,x=4.585538506531893 color=purple,shape=square,flag=0,i=87119,u=0.7427966349427934,v=0.2222935928238179,w=0.5330710139192982,x=5.4924322667759355 color=red,shape=circle,flag=0,i=87149,u=0.9236325375565893,v=0.9832729896877908,w=0.497548945316094,x=6.71540062485585 color=red,shape=square,flag=0,i=87154,u=0.8028538910089711,v=0.6025610722494016,w=0.5014357913252403,x=4.8481044995948155 color=red,shape=square,flag=0,i=87156,u=0.2681937779542889,v=0.46910428355996714,w=0.49944434596958537,x=3.8667157964383563 color=red,shape=circle,flag=0,i=87160,u=0.7913245583599238,v=0.8821033627387526,w=0.5002065748823282,x=5.878072480622866 color=red,shape=square,flag=0,i=87166,u=0.2337740963749929,v=0.7911502694649526,w=0.4997634201960948,x=5.67127583019391 color=yellow,shape=square,flag=1,i=87171,u=0.014463649390616617,v=0.9837926714492485,w=0.49980358969649386,x=5.0111706027673275 color=red,shape=square,flag=0,i=87174,u=0.1562566929126603,v=0.4290665500761336,w=0.5022801380970983,x=6.902420474152438 color=yellow,shape=triangle,flag=1,i=87175,u=0.2375611414097496,v=0.9852052086053142,w=0.48030668773323715,x=5.435750356155446 color=red,shape=circle,flag=0,i=87196,u=0.5697177596331662,v=0.637137927512288,w=0.504765268428757,x=6.521184641043341 color=purple,shape=circle,flag=0,i=87212,u=0.23853054657683792,v=0.30855453350224804,w=0.5174371327855982,x=3.803679566057577 color=red,shape=triangle,flag=0,i=87219,u=0.038974881726389854,v=0.4389225463461832,w=0.4918740234305623,x=5.4559847697751165 color=red,shape=square,flag=0,i=87245,u=0.4243200031812161,v=0.6031112292826726,w=0.5052494099934095,x=6.593335216985331 color=blue,shape=triangle,flag=0,i=87258,u=0.7138077066588048,v=0.3378096019743009,w=0.500106561267031,x=4.272743149102255 color=red,shape=square,flag=0,i=87268,u=0.6205255682269005,v=0.14147893469504425,w=0.4986622808073623,x=4.0627699524514505 color=orange,shape=triangle,flag=1,i=87269,u=0.47319505589017075,v=0.9294545364714185,w=0.47238614038576715,x=6.537923118990357 color=yellow,shape=triangle,flag=0,i=87272,u=0.9428402660452866,v=0.32186434896555915,w=0.4816828497633597,x=6.098183066730402 color=red,shape=triangle,flag=1,i=87282,u=0.15992551794282983,v=0.19890216072920908,w=0.48335744664048497,x=3.07125232146341 color=purple,shape=triangle,flag=0,i=87312,u=0.3129854564713729,v=0.3792399653791011,w=0.46563231823560597,x=4.324967003807103 color=green,shape=triangle,flag=0,i=87316,u=0.2758544471060357,v=0.01365600095224595,w=0.5145523126691295,x=4.40742003013768 color=blue,shape=square,flag=0,i=87319,u=0.7766391040883234,v=0.5644225008050158,w=0.49294593580993085,x=4.788165323074899 color=purple,shape=triangle,flag=0,i=87329,u=0.5094893133094806,v=0.22450526042029795,w=0.46577525630662003,x=4.628604062422395 color=blue,shape=circle,flag=1,i=87332,u=0.3112964381397433,v=0.2709314163445954,w=0.5011548045349941,x=5.540669535555615 color=red,shape=square,flag=0,i=87333,u=0.7583388587589652,v=0.9390969035285209,w=0.49886046786225685,x=3.5612480004500107 color=yellow,shape=triangle,flag=1,i=87338,u=0.9526867008363316,v=0.853135758386563,w=0.4799509587136798,x=5.439724371904723 color=green,shape=circle,flag=0,i=87345,u=0.08237352314777191,v=0.47981501485082045,w=0.5192264472047406,x=6.017654059187713 color=green,shape=square,flag=0,i=87346,u=0.4837984364895892,v=0.08212342594685296,w=0.4989424517518087,x=4.591124046680975 color=purple,shape=square,flag=0,i=87366,u=0.7989598073281962,v=0.5096502141039582,w=0.5316381787772568,x=3.8789339926634394 color=purple,shape=triangle,flag=0,i=87376,u=0.3034489146837266,v=0.46111355683416066,w=0.48148090892523454,x=5.720528951331072 color=red,shape=square,flag=1,i=87379,u=0.5459049549584437,v=0.8615964143320817,w=0.49783457770364803,x=5.134484027998303 color=green,shape=circle,flag=0,i=87406,u=0.9629137203360748,v=0.8123086572355038,w=0.5142570052810861,x=4.1534557070311955 color=red,shape=square,flag=1,i=87407,u=0.14770150341212673,v=0.903512495403854,w=0.49567081691264325,x=6.258395988913281 color=yellow,shape=square,flag=1,i=87417,u=0.28002856110177954,v=0.29795833570702346,w=0.4910092411864575,x=6.3136532508126875 color=red,shape=circle,flag=1,i=87420,u=0.25127736636236975,v=0.32061491138408477,w=0.4943838040606187,x=4.189096851109034 color=blue,shape=circle,flag=1,i=87446,u=0.4232332637130508,v=0.8264736455737158,w=0.5016118864032161,x=4.170665868518532 color=blue,shape=circle,flag=1,i=87448,u=0.7457723861278099,v=0.8397272154116819,w=0.5035069083706825,x=6.556715538294082 color=red,shape=square,flag=1,i=87450,u=0.5095886815351525,v=0.6065178517378399,w=0.5085299762015498,x=3.817158298641582 color=red,shape=triangle,flag=0,i=87455,u=0.3305395678687296,v=0.062119313495134,w=0.49220585645772924,x=4.723193491004722 color=purple,shape=triangle,flag=0,i=87474,u=0.9216356208770554,v=0.30720940279440767,w=0.4910691774582122,x=5.872878787578732 color=red,shape=square,flag=0,i=87477,u=0.9137390773740979,v=0.843296298890668,w=0.510708864248982,x=5.2314432010903555 color=red,shape=triangle,flag=0,i=87483,u=0.4498803349383491,v=0.8349484721387818,w=0.49481789053919684,x=4.473596701715838 color=red,shape=triangle,flag=0,i=87488,u=0.9856802834929906,v=0.817445756075083,w=0.49833987780253874,x=4.842297329187473 color=green,shape=square,flag=0,i=87501,u=0.41969716607526797,v=0.41246822835741026,w=0.4729790463334082,x=5.841410534093214 color=red,shape=triangle,flag=1,i=87504,u=0.446005237631788,v=0.8272206360039658,w=0.4974427116274343,x=6.098135903248214 color=red,shape=square,flag=0,i=87506,u=0.6357719216821314,v=0.6970867759393995,w=0.4940826462055272,x=6.351579417310387 color=green,shape=triangle,flag=1,i=87508,u=0.07749125283097746,v=0.7997042551392148,w=0.5288478155217743,x=5.007411503973972 color=green,shape=circle,flag=0,i=87513,u=0.9584890321396345,v=0.9071482496705534,w=0.5028355537497216,x=7.487895566803419 color=blue,shape=square,flag=1,i=87537,u=0.49259738352949933,v=0.30088238308609916,w=0.5063911292326709,x=5.952328499006593 color=red,shape=circle,flag=0,i=87540,u=0.5905461065786989,v=0.623179466125097,w=0.47874817004071524,x=3.5231833476979104 color=green,shape=square,flag=0,i=87544,u=0.5133449964213642,v=0.49937712662022526,w=0.46134939808677317,x=5.78306778786595 color=red,shape=triangle,flag=0,i=87546,u=0.9969563940686739,v=0.7499973912247889,w=0.49448365391989535,x=7.36954257910979 color=yellow,shape=triangle,flag=1,i=87561,u=0.13496025290854552,v=0.5217498986523218,w=0.48551447548341087,x=3.5577946657011092 color=blue,shape=square,flag=0,i=87567,u=0.7463183377611071,v=0.825252332938222,w=0.5068189472967893,x=6.93171207010579 color=yellow,shape=square,flag=1,i=87580,u=0.4416790184735747,v=0.13950659864761872,w=0.5085852140115215,x=4.931998239207409 color=red,shape=triangle,flag=0,i=87585,u=0.3357458308660205,v=0.987787257675211,w=0.4982976228692731,x=5.199558010519528 color=red,shape=square,flag=0,i=87592,u=0.4901879899763838,v=0.14587122114775153,w=0.49458437920692955,x=4.845752511490685 color=blue,shape=circle,flag=1,i=87599,u=0.07372513228168276,v=0.5864060917603757,w=0.5045085623235273,x=6.42278126360607 color=yellow,shape=square,flag=1,i=87621,u=0.9075173707301951,v=0.05143325135168264,w=0.5122879298678802,x=5.276269449222794 color=purple,shape=square,flag=0,i=87638,u=0.6499955143261992,v=0.5178349881169059,w=0.5369289114554097,x=4.349514278885358 color=blue,shape=triangle,flag=0,i=87651,u=0.17807658049029917,v=0.579104218035652,w=0.4870918822315874,x=4.675223662724696 color=green,shape=circle,flag=0,i=87655,u=0.2884037929853277,v=0.6397445195072545,w=0.5098688603427093,x=3.574153588066576 color=yellow,shape=triangle,flag=1,i=87661,u=0.5672323779767716,v=0.2814294745384365,w=0.4838183495729003,x=4.974573059595241 color=yellow,shape=square,flag=1,i=87667,u=0.7705906347934989,v=0.667636326193905,w=0.5082772307126497,x=6.125310716375598 color=orange,shape=square,flag=0,i=87676,u=0.06101771810283574,v=0.68747202343077,w=0.4977162098081796,x=5.86366195486773 color=purple,shape=square,flag=0,i=87677,u=0.3611207259034017,v=0.42341141436130003,w=0.5280384429543278,x=4.8796170389126745 color=red,shape=circle,flag=1,i=87679,u=0.6327931231418402,v=0.6354081948441541,w=0.479977026205797,x=4.971796343510399 color=green,shape=circle,flag=0,i=87694,u=0.05850798902155985,v=0.1494250980937728,w=0.5062962141692333,x=4.791005887808977 color=red,shape=circle,flag=0,i=87703,u=0.022716756783163983,v=-0.04550339558289733,w=0.4763622882951251,x=5.041071040355236 color=red,shape=square,flag=0,i=87705,u=0.18562161738142502,v=0.21310243818378483,w=0.4723122607157748,x=4.132081540406548 color=red,shape=square,flag=0,i=87708,u=0.6374982811884574,v=0.6099608499400054,w=0.47461686349453747,x=5.949395991206852 color=red,shape=square,flag=0,i=87718,u=0.8053219066168321,v=0.1720154947794349,w=0.46953125756802383,x=4.5503332287909375 color=yellow,shape=square,flag=1,i=87763,u=0.6622352625341551,v=0.7516914590682935,w=0.5018600368415771,x=5.900068161467413 color=red,shape=triangle,flag=1,i=87769,u=0.030763315524464097,v=0.048046419497038806,w=0.5014969377401141,x=3.453336043496867 color=red,shape=circle,flag=1,i=87779,u=0.7596985781043656,v=0.676769507947792,w=0.4926600813762199,x=4.828095546150267 color=red,shape=circle,flag=0,i=87787,u=0.8039494723040335,v=0.8386905755444028,w=0.4944790747453228,x=6.269379475769703 color=yellow,shape=square,flag=1,i=87790,u=0.7921866752048135,v=0.6308460604509636,w=0.4984727741059736,x=3.276324692412942 color=blue,shape=square,flag=0,i=87830,u=0.10265836567897935,v=0.32638461078657655,w=0.5119714005506554,x=4.269124842881164 color=yellow,shape=square,flag=1,i=87849,u=0.35442688806057465,v=0.24892532566113024,w=0.5074146618757114,x=4.348844746556087 color=yellow,shape=square,flag=0,i=87850,u=0.2832641207530461,v=0.6254350874744813,w=0.5107725636659052,x=5.194552452114789 color=blue,shape=triangle,flag=1,i=87859,u=0.265352957757781,v=0.4494794970773357,w=0.4993155680014865,x=5.6815388090161525 color=green,shape=circle,flag=0,i=87891,u=0.7827620634015832,v=0.1489433297198135,w=0.524003633111052,x=6.9472992082066725 color=red,shape=square,flag=0,i=87896,u=0.7293072220778287,v=0.37238776377168914,w=0.48681184506762265,x=3.926077542116739 color=yellow,shape=square,flag=1,i=87897,u=0.3135922615958485,v=0.7797854070367942,w=0.5188429177276422,x=3.8320867814208697 color=blue,shape=square,flag=1,i=87900,u=0.8731750371736396,v=0.14612363064889267,w=0.5149166820164824,x=5.291640592692446 color=purple,shape=circle,flag=0,i=87903,u=0.5710166912494727,v=0.6649825509600855,w=0.5029678144574063,x=6.331869454074109 color=red,shape=square,flag=0,i=87914,u=0.08985452983154363,v=0.3799670228687487,w=0.4815387999436772,x=4.998463990527032 color=red,shape=circle,flag=1,i=87918,u=0.41139881394532307,v=0.38247378288693273,w=0.49395132915690565,x=5.076191747456232 color=blue,shape=square,flag=0,i=87941,u=0.5958795474789534,v=0.9650288792488426,w=0.5130935495028425,x=3.602812164366276 color=red,shape=circle,flag=0,i=87945,u=0.40006256299770415,v=0.38006292020666504,w=0.4995942008798641,x=4.673738376435888 color=red,shape=square,flag=0,i=87947,u=0.08272216273078481,v=0.3112842492079485,w=0.4807278094010713,x=7.0405840627018 color=red,shape=triangle,flag=0,i=87970,u=0.2990669127338327,v=0.2983260640711731,w=0.4499446747220163,x=3.542906066728784 color=red,shape=triangle,flag=0,i=87977,u=0.6720015430475421,v=0.6546768141747031,w=0.4523995233843355,x=6.011678720585611 color=red,shape=circle,flag=1,i=87979,u=0.07247979286484463,v=0.0471698508108894,w=0.5088250436340264,x=4.75519501453581 color=red,shape=circle,flag=1,i=87981,u=0.6068989294457883,v=0.6460422663340607,w=0.5128038279280751,x=4.661192874383532 color=red,shape=square,flag=0,i=87984,u=0.9737256059273646,v=0.7729558779616146,w=0.4764367960911733,x=5.3797986546814585 color=blue,shape=circle,flag=0,i=87992,u=0.9985033118469864,v=0.02168487276952369,w=0.4949114601289796,x=5.364779836670457 color=green,shape=circle,flag=1,i=87994,u=0.7531148833988812,v=0.9261500889434449,w=0.5166640413149932,x=4.396605345009767 color=yellow,shape=square,flag=1,i=87996,u=0.38369376198210003,v=0.5566287163925541,w=0.5158700170155865,x=4.792051124659165 color=orange,shape=triangle,flag=0,i=88012,u=0.6557121007590262,v=0.8965621337880214,w=0.470066456294922,x=6.929231187046221 color=red,shape=circle,flag=1,i=88027,u=0.21452854786405895,v=0.1321154858776587,w=0.5060835569286852,x=7.478139592018818 color=red,shape=triangle,flag=1,i=88030,u=0.50005049712499,v=0.3839754040397897,w=0.4538518356649542,x=3.4029927914529083 color=blue,shape=circle,flag=0,i=88033,u=0.03295136399070908,v=0.009081578674498325,w=0.49940792861127686,x=3.1228103797439855 color=green,shape=circle,flag=0,i=88036,u=0.9579150604888034,v=0.9750840934204242,w=0.5123161351823644,x=5.335261121705259 color=red,shape=square,flag=0,i=88043,u=0.5082609379666647,v=0.3346382317779304,w=0.4719707245196532,x=4.190726172776387 color=blue,shape=square,flag=1,i=88058,u=0.4362165492248087,v=0.9819564009555275,w=0.5024352513790827,x=5.873017249856111 color=purple,shape=square,flag=0,i=88064,u=0.611716423366671,v=0.7664955317248566,w=0.5321640403274255,x=4.691068621855334 color=red,shape=circle,flag=0,i=88074,u=0.6522860975095488,v=0.6400444572683154,w=0.5119191624131018,x=4.654239128564439 color=green,shape=square,flag=0,i=88077,u=0.41702052797594,v=0.3608576346836717,w=0.4652760468633792,x=3.231321835357653 color=blue,shape=triangle,flag=0,i=88079,u=0.11834371397672705,v=0.36934516933707107,w=0.4968956949052766,x=5.861846605882917 color=blue,shape=square,flag=1,i=88111,u=0.7737321083499213,v=0.7449057893591654,w=0.5001277224089868,x=3.614796219609024 color=purple,shape=square,flag=1,i=88154,u=0.5007069292369971,v=0.8848441362135548,w=0.5336571678728803,x=3.903699498236351 color=red,shape=triangle,flag=0,i=88157,u=0.0040382138447428995,v=0.49961042780152,w=0.4649976121869656,x=5.229330772299352 color=red,shape=triangle,flag=0,i=88169,u=0.632171508310568,v=0.22423952987051454,w=0.45894490445334934,x=4.965656457765346 color=purple,shape=circle,flag=0,i=88177,u=0.7193478718530358,v=0.7037935662217834,w=0.5125738582429837,x=6.948251558917331 color=yellow,shape=circle,flag=1,i=88183,u=0.300966752521977,v=0.605296042977697,w=0.5098839352828569,x=4.8694716549020525 color=purple,shape=triangle,flag=1,i=88218,u=0.707582945503699,v=0.16975279619447947,w=0.486476878621979,x=5.2344891495961505 color=red,shape=triangle,flag=1,i=88237,u=0.9906153518323846,v=0.13380935887238754,w=0.4723496902095573,x=4.760369181150268 color=red,shape=square,flag=1,i=88272,u=0.2715281311275948,v=0.2802889951960974,w=0.49818875677272034,x=3.3657936216185127 color=blue,shape=square,flag=1,i=88275,u=0.5163824267332552,v=0.49087223410583103,w=0.49415676301769174,x=5.236009850217315 color=red,shape=square,flag=0,i=88298,u=0.8673710607527264,v=0.8391348445986926,w=0.49626304176160374,x=4.984579988423242 color=red,shape=square,flag=1,i=88301,u=0.3769469350596182,v=0.6593199090560792,w=0.49786516711451045,x=2.867732981018023 color=red,shape=triangle,flag=1,i=88306,u=0.1292428394146602,v=0.34457066502641287,w=0.46476446363278606,x=3.312102546024265 color=red,shape=circle,flag=1,i=88314,u=0.14627648175402486,v=0.14624736644861613,w=0.49126944914279785,x=4.033456311496372 color=yellow,shape=square,flag=0,i=88333,u=0.25041763463660793,v=0.9495420481713808,w=0.5065378670818175,x=4.583058663808659 color=red,shape=square,flag=0,i=88336,u=0.6433292334580075,v=0.5885111352213954,w=0.5013705027763812,x=5.878979246545559 color=purple,shape=square,flag=0,i=88340,u=0.056072203415901356,v=0.48033821150897216,w=0.5212617413156152,x=5.538166407723655 color=yellow,shape=circle,flag=1,i=88347,u=0.060741073922975675,v=0.49782097598943464,w=0.5061057524132392,x=5.480905699232227 color=red,shape=square,flag=1,i=88361,u=0.8352673940161575,v=0.527743128001706,w=0.49877548072170935,x=6.852602576121783 color=purple,shape=triangle,flag=1,i=88375,u=0.9101887436521007,v=0.17622880698439491,w=0.48815545596037374,x=3.604371076687747 color=blue,shape=circle,flag=1,i=88378,u=0.9915167482992112,v=0.014069971967963224,w=0.49481925379443886,x=5.37913964666594 color=red,shape=square,flag=0,i=88394,u=0.6632149147813329,v=0.08794973470826617,w=0.47895434146417604,x=3.5061002170922304 color=red,shape=square,flag=1,i=88400,u=0.10095891837842952,v=0.6169852840627512,w=0.48349268052813876,x=4.03206087029174 color=blue,shape=triangle,flag=0,i=88406,u=0.6993042699745837,v=0.544764220669782,w=0.4907896571214816,x=4.996625876449597 color=yellow,shape=triangle,flag=1,i=88437,u=0.6822545874837266,v=0.6251588777823828,w=0.49375391144443836,x=2.7494710587771016 color=red,shape=triangle,flag=1,i=88444,u=0.039918692115316734,v=0.5875031989615571,w=0.4842669497874155,x=4.718663395905376 color=blue,shape=circle,flag=1,i=88458,u=0.3846298871904309,v=0.8956562953164224,w=0.489377318417961,x=4.3378875540250945 color=purple,shape=triangle,flag=0,i=88465,u=0.7400965090278344,v=0.2307244941921872,w=0.48832278194004997,x=3.724216634214372 color=red,shape=triangle,flag=0,i=88476,u=0.2159949287669335,v=0.9360632312665199,w=0.48737371383798067,x=5.54180270857389 color=orange,shape=square,flag=1,i=88490,u=0.6062372900083869,v=0.9765246338376521,w=0.49947082060985737,x=5.719071638903 color=green,shape=circle,flag=0,i=88501,u=0.9821750218017179,v=0.8705095781919526,w=0.5114787011440788,x=5.11356123121372 color=red,shape=circle,flag=0,i=88503,u=0.04864990921591128,v=0.14600142797984408,w=0.4974380001512097,x=5.781925216655537 color=yellow,shape=circle,flag=1,i=88508,u=0.26385912551351187,v=0.8814871931558996,w=0.5159777449917443,x=5.103907573502464 color=orange,shape=circle,flag=0,i=88514,u=0.8215904602436896,v=0.3876439912523567,w=0.49517085430527685,x=4.472961309508148 color=yellow,shape=square,flag=0,i=88526,u=0.8773724758592496,v=0.7373423563352277,w=0.4946927555356018,x=4.698380929213007 color=purple,shape=triangle,flag=0,i=88536,u=0.6077129492869676,v=0.9083735281192004,w=0.4949179846207753,x=4.259416062243471 color=red,shape=triangle,flag=1,i=88544,u=0.5627375390411199,v=0.8386631019958997,w=0.4828884370601367,x=2.6548670752056753 color=blue,shape=triangle,flag=0,i=88551,u=0.82630636997486,v=0.6291173904518748,w=0.47591740974177127,x=3.6505045385805275 color=red,shape=square,flag=0,i=88567,u=0.5644112393570121,v=0.18322688507602947,w=0.5044452008196995,x=5.673381218978144 color=red,shape=square,flag=0,i=88570,u=0.259308940351339,v=0.7875302838370638,w=0.5058220613074879,x=5.152908148900953 color=purple,shape=triangle,flag=0,i=88578,u=0.6627371565900392,v=0.9310278364107417,w=0.49904926629768687,x=4.206143897803815 color=purple,shape=circle,flag=0,i=88579,u=0.9312823471550226,v=0.7789533782872469,w=0.5020912237035545,x=3.5164498199179213 color=red,shape=square,flag=1,i=88597,u=0.46098167944675017,v=0.07283217942437248,w=0.5057623997420375,x=3.1861470177463507 color=green,shape=triangle,flag=0,i=88598,u=0.2779705597866634,v=0.8301719320663272,w=0.5404614949138474,x=3.729476436503088 color=blue,shape=square,flag=1,i=88601,u=0.9109874211020059,v=0.5098284367933799,w=0.4956215027885098,x=3.918788094046096 color=yellow,shape=triangle,flag=1,i=88604,u=0.3525556620209537,v=0.3867002936036744,w=0.4940104932522002,x=4.616777243034125 color=yellow,shape=triangle,flag=1,i=88631,u=0.2555074756813629,v=0.4507924446521573,w=0.4954163395035782,x=5.455912284252989 color=yellow,shape=triangle,flag=1,i=88649,u=0.9541692664215917,v=0.758698677489762,w=0.5000814389058308,x=6.215063038946362 color=blue,shape=square,flag=0,i=88657,u=0.37752845687915515,v=0.5931136641898378,w=0.486148312478229,x=7.669653349683045 color=yellow,shape=square,flag=1,i=88658,u=0.2962771241075962,v=0.47394598039108493,w=0.5077184527911259,x=5.673908119166579 color=red,shape=square,flag=0,i=88660,u=0.8012595968633182,v=0.9295623324899136,w=0.5103369532672469,x=3.843542927629272 color=yellow,shape=circle,flag=1,i=88668,u=0.832863678136198,v=0.9270281236704438,w=0.5131235089092736,x=6.206566962678607 color=green,shape=circle,flag=0,i=88675,u=0.2779058390325091,v=0.7727500037862135,w=0.5173837450201316,x=5.331243044083203 color=blue,shape=triangle,flag=1,i=88706,u=0.5022897075484847,v=0.7398779485309679,w=0.4825058422158058,x=4.182932971790497 color=purple,shape=square,flag=0,i=88717,u=0.9988289623611757,v=0.4988894788232766,w=0.5124386181279549,x=3.2182954663505434 color=green,shape=circle,flag=0,i=88726,u=0.7864078589372331,v=0.7882769931966768,w=0.5203253586083161,x=5.5144131250341255 color=purple,shape=triangle,flag=0,i=88729,u=0.7110849578310664,v=0.534067477762772,w=0.490380122311564,x=3.0835743066496364 color=orange,shape=triangle,flag=0,i=88731,u=0.730641446947837,v=0.02055110282292305,w=0.479931591934255,x=6.924750095021172 color=purple,shape=square,flag=0,i=88737,u=0.30370509236896226,v=0.8120553356278055,w=0.5075231511444706,x=4.533714981212117 color=green,shape=square,flag=0,i=88744,u=0.7057167651257295,v=0.4838942291361874,w=0.46921129053654415,x=7.978526733640109 color=purple,shape=square,flag=0,i=88777,u=0.774379949039789,v=0.8717785176743207,w=0.515407615352064,x=5.711434410734145 color=purple,shape=square,flag=0,i=88787,u=0.8371630597755065,v=0.6943153660331514,w=0.5193481029899407,x=6.417195174812719 color=red,shape=triangle,flag=0,i=88792,u=0.21918936774909303,v=0.7786280833469691,w=0.48410862668392096,x=6.720409924536409 color=blue,shape=square,flag=0,i=88797,u=0.08552224821362053,v=0.9087191374852543,w=0.4886691930034402,x=6.464754293558916 color=blue,shape=triangle,flag=0,i=88800,u=0.10468181952469902,v=0.21650350166773713,w=0.47951057763321253,x=6.243838155254253 color=red,shape=triangle,flag=0,i=88806,u=0.022022736320014946,v=0.8985328771999243,w=0.487504551771972,x=3.719350478839578 color=blue,shape=triangle,flag=0,i=88809,u=0.7408579450275424,v=0.09014740028937729,w=0.4773694923779749,x=4.849912525703252 color=green,shape=circle,flag=1,i=88814,u=0.888135437977485,v=0.5535016119426845,w=0.5192864338601159,x=4.5509814659145595 color=blue,shape=square,flag=0,i=88829,u=0.9535279568548674,v=0.15048532155582217,w=0.48971550709894085,x=5.865885884538478 color=purple,shape=triangle,flag=0,i=88837,u=0.4093518607280927,v=0.08880414630880318,w=0.48341927521745753,x=5.361301869286393 color=purple,shape=triangle,flag=0,i=88841,u=0.18324546638714145,v=0.035391140611822136,w=0.4826496591937977,x=2.5072569345106923 color=red,shape=square,flag=0,i=88870,u=0.939072169241531,v=0.973363940636961,w=0.5123100100025192,x=2.852636585719953 color=red,shape=square,flag=1,i=88871,u=0.7336985093936491,v=0.07183632110641358,w=0.5118799741224445,x=5.148500229718575 color=red,shape=square,flag=0,i=88875,u=0.6683138367209588,v=0.9606514391691601,w=0.5075376322572759,x=6.8283250705078915 color=green,shape=circle,flag=0,i=88886,u=0.9954509019734094,v=0.989326006815659,w=0.5249846241275673,x=5.193775448437145 color=green,shape=square,flag=0,i=88887,u=0.20167268551713202,v=0.48024813055520477,w=0.47603451899533994,x=3.330281753131296 color=blue,shape=square,flag=1,i=88899,u=0.0001881939925673093,v=0.011642740454585132,w=0.48760710891177944,x=3.8824332474753724 color=green,shape=triangle,flag=0,i=88900,u=0.15685186323460454,v=0.23951406231195416,w=0.5145058917451085,x=5.61328595501674 color=red,shape=triangle,flag=1,i=88901,u=0.6750501788591787,v=0.45652468849441274,w=0.48782070685331175,x=4.63126163820595 color=blue,shape=triangle,flag=1,i=88911,u=0.14553976478384933,v=0.843240912542431,w=0.4848300110946718,x=3.668749854578589 color=green,shape=square,flag=0,i=88919,u=0.04188189450383273,v=0.5241212375589694,w=0.48221761163587984,x=4.210961178884712 color=red,shape=triangle,flag=0,i=88929,u=0.4514220268704663,v=0.45625772873157455,w=0.49847921318025606,x=3.6719466196879433 color=red,shape=circle,flag=1,i=88943,u=0.9688549980967243,v=1.0286459256891882,w=0.4905745574823278,x=2.9692068183076246 color=red,shape=square,flag=1,i=88949,u=0.4588253638837526,v=0.8608710332573164,w=0.49810480756865183,x=5.014791203332805 color=green,shape=triangle,flag=0,i=88970,u=0.6533937418009187,v=0.6959936468051435,w=0.520186454910893,x=6.086419264019727 color=red,shape=triangle,flag=0,i=88986,u=0.22177929590252532,v=0.002299553729503745,w=0.4911305349864925,x=5.316233104081186 color=red,shape=triangle,flag=0,i=88989,u=0.5929008035969083,v=0.8799512854665865,w=0.49435635418647006,x=6.111757131042782 color=yellow,shape=square,flag=1,i=88993,u=0.6984705400493004,v=0.46321722682722677,w=0.505696986850224,x=6.309180698105859 color=purple,shape=triangle,flag=0,i=88997,u=0.8846615099739226,v=0.5383981091673841,w=0.48035176954474035,x=6.296836836948955 color=blue,shape=square,flag=0,i=89000,u=0.3121216311085495,v=0.7587451701463619,w=0.4953390075820551,x=6.537922019910994 color=green,shape=circle,flag=0,i=89010,u=0.698922603424709,v=0.1099616325320324,w=0.51675316993946,x=3.755133998984684 color=yellow,shape=circle,flag=1,i=89023,u=0.7782015356083248,v=0.3618989464534593,w=0.49678376836570737,x=6.636603653767602 color=orange,shape=triangle,flag=1,i=89047,u=0.3330941702327105,v=0.02833885861372576,w=0.4849023805442175,x=5.110456238441714 color=red,shape=circle,flag=0,i=89080,u=0.04330257542826388,v=0.12759922430013998,w=0.4800401127378481,x=6.1837272662888765 color=red,shape=triangle,flag=1,i=89089,u=0.03549709072673535,v=0.5154466593325573,w=0.484443296847137,x=5.692110499604396 color=red,shape=triangle,flag=0,i=89100,u=0.8436577119045815,v=0.8615992331585086,w=0.48541591264052014,x=4.947538335385587 color=blue,shape=circle,flag=1,i=89101,u=0.8727359786172227,v=0.06222594055627939,w=0.49714720518634276,x=4.5827531498795375 color=red,shape=square,flag=0,i=89119,u=0.42155946361675223,v=0.38935174715012955,w=0.49516123934045936,x=4.13693934062463 color=red,shape=triangle,flag=0,i=89145,u=0.3731165384253897,v=0.04169630232505683,w=0.4809022469322787,x=3.8663124019589574 color=red,shape=triangle,flag=0,i=89149,u=0.049802211389571416,v=0.42060538701272976,w=0.48568249392618523,x=4.551942896755848 color=purple,shape=triangle,flag=0,i=89154,u=0.4758808978776726,v=0.23910297509300804,w=0.48301566137970414,x=5.774411077261264 color=yellow,shape=square,flag=1,i=89156,u=0.7428578549992408,v=0.8620632674915779,w=0.5086395397469757,x=5.669823563821919 color=red,shape=square,flag=0,i=89161,u=0.15774359481765832,v=0.9371804513993472,w=0.507388374891406,x=4.981898876618663 color=red,shape=triangle,flag=1,i=89162,u=0.04177782773807748,v=0.520993421335663,w=0.483141383554438,x=4.8138020275768065 color=red,shape=triangle,flag=1,i=89167,u=0.009718102420543606,v=0.0861070024391587,w=0.4863618768682354,x=6.301609716480578 color=red,shape=square,flag=0,i=89188,u=0.9920351410141162,v=0.5355857031762932,w=0.49213289682984623,x=4.403213905031578 color=purple,shape=circle,flag=0,i=89191,u=0.165614540877152,v=0.23211381880542892,w=0.5094817000748718,x=3.9239741532289796 color=green,shape=square,flag=0,i=89203,u=0.6506481185492858,v=0.08136335408786188,w=0.49342981285369464,x=4.930528223872577 color=red,shape=square,flag=0,i=89227,u=0.8157497657540733,v=0.993822325658967,w=0.48275573434263963,x=3.3473140285453318 color=red,shape=square,flag=1,i=89242,u=0.7422649121079717,v=0.928729372288155,w=0.48255448793009226,x=5.367694373384597 color=purple,shape=square,flag=0,i=89254,u=0.709522561361518,v=0.5841387945197102,w=0.5227834622350629,x=3.9183653583589617 color=red,shape=circle,flag=0,i=89270,u=0.26766304588677525,v=0.2931224020148894,w=0.49467775224965294,x=6.2894810850804355 color=red,shape=triangle,flag=1,i=89271,u=0.5543210532891159,v=0.35239372696630067,w=0.4900184062341633,x=5.145154515991534 color=red,shape=circle,flag=1,i=89285,u=0.2904610383624747,v=0.36651291446621154,w=0.492997225144362,x=4.785746587497086 color=red,shape=triangle,flag=0,i=89294,u=0.8229433094768309,v=0.7157285621811823,w=0.49239457003609943,x=5.81756397199988 color=red,shape=square,flag=0,i=89295,u=0.14595392167202892,v=0.04299005731318595,w=0.4936833751547652,x=3.5234047640517345 color=red,shape=circle,flag=1,i=89301,u=0.7186925246474581,v=0.7711611862820316,w=0.48824777155271804,x=4.995108959536832 color=red,shape=square,flag=0,i=89324,u=0.1264975061870569,v=0.9655632668160816,w=0.5025961142188484,x=5.5438565525161 color=yellow,shape=square,flag=0,i=89359,u=0.3672555343730993,v=0.23477276791238189,w=0.5017554974672566,x=4.605279929439107 color=green,shape=square,flag=0,i=89367,u=0.1472478300497796,v=0.2904489594227754,w=0.48353992788891126,x=5.187965304496066 color=purple,shape=square,flag=0,i=89372,u=0.9714797414438361,v=0.9127078177889117,w=0.526987160867719,x=6.227534026265386 color=purple,shape=square,flag=0,i=89396,u=0.5171045995792689,v=0.5937636516263206,w=0.5278451368899363,x=4.4676615107009505 color=green,shape=circle,flag=0,i=89398,u=0.1987689325626627,v=0.47719159828682356,w=0.5092297342386748,x=3.048411407762402 color=red,shape=triangle,flag=0,i=89400,u=0.0019438518296458485,v=0.4004359510760367,w=0.494379567558679,x=5.874772155590041 color=yellow,shape=triangle,flag=1,i=89416,u=0.13575226120459194,v=0.16210411194059415,w=0.5084848690320436,x=6.270440295079358 color=red,shape=triangle,flag=1,i=89423,u=0.4082297034059267,v=0.1303373109056687,w=0.4861950038528154,x=4.862219156423197 color=red,shape=square,flag=1,i=89432,u=0.6866882539759991,v=0.46814437228637296,w=0.5012549506028816,x=5.599682066189068 color=purple,shape=triangle,flag=0,i=89443,u=0.025326489777993566,v=0.9281749697689827,w=0.4920211863446441,x=2.9054869594098247 color=red,shape=triangle,flag=1,i=89463,u=0.5752115786540709,v=0.4866678216887339,w=0.4933909721995991,x=6.805064707529792 color=purple,shape=square,flag=0,i=89468,u=0.6029258317191418,v=0.9202105009591189,w=0.5275366717839259,x=2.6930687460118965 color=red,shape=circle,flag=1,i=89472,u=0.23599622934598585,v=0.21026494183424715,w=0.4945905759652379,x=6.968680553472493 color=red,shape=triangle,flag=0,i=89474,u=0.05699425071104147,v=0.4232870356766806,w=0.4972148939655111,x=4.707009608677642 color=green,shape=circle,flag=0,i=89491,u=0.24201211293506764,v=0.5395674338577402,w=0.5093550332081724,x=5.152275005935069 color=yellow,shape=square,flag=1,i=89493,u=0.2808229998933893,v=0.1851635544347222,w=0.49398036951730545,x=3.453856926780093 color=purple,shape=circle,flag=0,i=89494,u=0.8652334830838943,v=0.39197818124783146,w=0.5079842532565122,x=4.643017885441312 color=red,shape=circle,flag=1,i=89499,u=0.5325067884305689,v=0.5682824793337954,w=0.506835987695379,x=5.527214827915017 color=purple,shape=triangle,flag=1,i=89506,u=0.7276524648761041,v=0.16642757876490766,w=0.4896709470836472,x=4.957014088573877 color=orange,shape=circle,flag=0,i=89524,u=0.5185893756925903,v=0.8259011938287191,w=0.497517953583872,x=5.98959438949182 color=red,shape=circle,flag=1,i=89530,u=0.36643160507537975,v=0.33315339269392114,w=0.4998978225566717,x=3.366789782844395 color=blue,shape=triangle,flag=1,i=89537,u=0.2895967231160067,v=0.19333516954326402,w=0.5016399412530849,x=3.8500024543136795 color=purple,shape=triangle,flag=0,i=89542,u=0.645510433576818,v=0.2169787920181585,w=0.4964131478510544,x=4.792044016643982 color=purple,shape=square,flag=0,i=89543,u=0.9607729491239191,v=0.10073543431297738,w=0.5332405753196187,x=2.847024112917248 color=yellow,shape=circle,flag=1,i=89549,u=0.38275345435331254,v=0.7754708003903482,w=0.4700033436411555,x=5.1108013552959255 color=purple,shape=triangle,flag=1,i=89556,u=0.8368006806250886,v=0.20136398649445264,w=0.4967183477588903,x=4.221320314681726 color=red,shape=square,flag=1,i=89557,u=0.9430156453314023,v=0.4285376246925712,w=0.5049798596749927,x=6.095571788398876 color=blue,shape=circle,flag=1,i=89569,u=0.3370688195446372,v=0.21534325310840896,w=0.5092287946067081,x=6.747226057993529 color=red,shape=square,flag=0,i=89607,u=0.7375634914925461,v=0.7499876766360295,w=0.5117929428525317,x=5.88407163354148 color=red,shape=square,flag=1,i=89613,u=0.09688595796452038,v=0.8021124881038976,w=0.5110397665789819,x=5.265856001805414 color=red,shape=triangle,flag=1,i=89614,u=0.46858131180267737,v=0.6529653826382829,w=0.488165696030253,x=5.258786671430322 color=green,shape=triangle,flag=0,i=89616,u=0.9708058592611087,v=0.26858102507132053,w=0.5055915727727762,x=4.547747752778398 color=blue,shape=square,flag=0,i=89633,u=0.2159489656464776,v=0.9134817567510763,w=0.5225551378566878,x=6.048240230169964 color=yellow,shape=square,flag=1,i=89643,u=0.3643136265693401,v=0.2570533120910926,w=0.4935938818978104,x=3.5065146012606943 color=red,shape=triangle,flag=0,i=89690,u=0.872646473460946,v=0.8976179865624867,w=0.4785419582204308,x=5.106423955556792 color=blue,shape=circle,flag=0,i=89715,u=0.5271742504887879,v=0.8375171373215283,w=0.4980544932090869,x=1.5805938541131141 color=orange,shape=circle,flag=1,i=89721,u=0.36871790565452167,v=0.9676600384399547,w=0.49212998870484037,x=5.435061672516423 color=purple,shape=circle,flag=0,i=89722,u=0.8843255980609986,v=0.21308751152267535,w=0.4976755590131926,x=5.5450908514011985 color=yellow,shape=triangle,flag=1,i=89725,u=0.5578863133084223,v=0.9115572113450849,w=0.5186292898896853,x=7.333641762114863 color=blue,shape=square,flag=0,i=89733,u=0.5217112154592198,v=0.09486439657285706,w=0.5173974824591157,x=3.041308565438131 color=red,shape=triangle,flag=0,i=89742,u=0.19162780991670503,v=0.6373278702216745,w=0.4897417415251563,x=3.8486004485523364 color=purple,shape=square,flag=0,i=89754,u=0.8700037571776598,v=0.16656929485139116,w=0.5113150912109558,x=6.13129821591691 color=red,shape=square,flag=0,i=89761,u=0.8767695232320187,v=0.45478718825421904,w=0.4976413466523611,x=6.372841963746882 color=red,shape=circle,flag=0,i=89767,u=0.772318913665505,v=0.7995766031455851,w=0.5023608091218965,x=2.572856833660525 color=red,shape=triangle,flag=0,i=89769,u=0.31607013930460104,v=0.7778893200423551,w=0.47963242861827393,x=3.5355435969503315 color=red,shape=circle,flag=0,i=89771,u=0.004458599352718862,v=0.0599186543161407,w=0.49996590557240617,x=4.811493438558459 color=red,shape=circle,flag=1,i=89773,u=0.3663274238879526,v=0.4290027156868429,w=0.5017278005792333,x=4.36742152252372 color=blue,shape=square,flag=0,i=89777,u=0.48303418589821845,v=0.29632953976721466,w=0.5134830480126882,x=4.047561359874297 color=red,shape=circle,flag=0,i=89782,u=0.7252373511978643,v=0.7371043475022744,w=0.4953133029535336,x=6.193311560073211 color=red,shape=circle,flag=0,i=89788,u=0.15495864734490983,v=0.09012796305978421,w=0.49216233794231784,x=5.705060761556267 color=red,shape=square,flag=0,i=89796,u=0.6112489222623326,v=0.869655807437518,w=0.5107268937590611,x=4.644490105247546 color=green,shape=triangle,flag=0,i=89801,u=0.76680181513751,v=0.2588676541402922,w=0.5125946410501047,x=5.033891879438619 color=yellow,shape=circle,flag=1,i=89830,u=0.8782139644049379,v=0.05198242018238697,w=0.48268944090968946,x=7.312346872558417 color=red,shape=square,flag=1,i=89831,u=0.4535556036831109,v=0.4378627365277633,w=0.5211577860322459,x=3.46283701270737 color=blue,shape=circle,flag=1,i=89856,u=0.6741055832559035,v=0.42368855134376904,w=0.5003520044696009,x=4.2467341378249355 color=yellow,shape=triangle,flag=1,i=89874,u=0.5858143598332209,v=0.3888970086546677,w=0.530669235415513,x=5.855218122757549 color=yellow,shape=square,flag=1,i=89875,u=0.10903073040937439,v=0.616637758826171,w=0.49834887243197634,x=2.161542870232784 color=red,shape=square,flag=0,i=89878,u=0.9204332308249449,v=0.7253152544743801,w=0.5172478183655352,x=3.470744353802786 color=red,shape=square,flag=0,i=89891,u=0.8887499018702762,v=0.9425581242916636,w=0.5145710486886484,x=5.556780226599233 color=purple,shape=triangle,flag=0,i=89910,u=0.7812478494730575,v=0.00912951722420452,w=0.5112169022303502,x=5.068791667508587 color=purple,shape=square,flag=0,i=89915,u=0.679049425764766,v=0.5101671973862475,w=0.5201903014303277,x=6.294013360441816 color=red,shape=square,flag=0,i=89974,u=0.08626982425407559,v=0.8791010117764225,w=0.5115809823214129,x=7.680116039751927 color=purple,shape=square,flag=1,i=89983,u=0.28452302516828565,v=0.35097593798880866,w=0.5143489248136583,x=5.764566301226548 color=red,shape=square,flag=0,i=89987,u=0.8891411478263056,v=0.6244456675692178,w=0.5051654730104275,x=5.026299373009687 color=blue,shape=circle,flag=1,i=89990,u=0.12378997604975961,v=0.5865543345730155,w=0.49274029275901693,x=5.044803686365359 color=red,shape=triangle,flag=0,i=89993,u=0.0427909749227402,v=0.33612511638045894,w=0.49990058020429884,x=6.526299001101261 color=purple,shape=square,flag=0,i=89994,u=0.658842906559141,v=0.047243179268898094,w=0.517508729401253,x=5.496981800136941 color=red,shape=square,flag=0,i=89997,u=0.340789502875009,v=0.3593713921823164,w=0.5044492590475607,x=5.731317775015861 color=red,shape=circle,flag=0,i=90000,u=0.17836540748161522,v=0.08775766352456943,w=0.48489469236172666,x=4.532847521368993 color=green,shape=triangle,flag=0,i=90006,u=0.09672658588835337,v=0.6802493827824281,w=0.49974769192223695,x=5.652047000673833 color=red,shape=triangle,flag=1,i=90014,u=0.16762030193322497,v=0.9085113550458388,w=0.4950414511211123,x=4.747421363587864 color=blue,shape=triangle,flag=1,i=90015,u=0.3558121388962219,v=0.36000093792579346,w=0.49273128475991207,x=5.218863990723695 color=green,shape=triangle,flag=0,i=90018,u=0.7653994122571245,v=0.9104009891319974,w=0.502822523881717,x=5.507104152535064 color=red,shape=square,flag=1,i=90020,u=0.39587839065615826,v=0.014449645507643383,w=0.5048293371521958,x=2.0502841201810287 color=red,shape=square,flag=0,i=90036,u=0.8420540846709074,v=0.9195475149980085,w=0.5002779408819791,x=5.375773847505244 color=purple,shape=square,flag=0,i=90045,u=0.16297741206463356,v=0.7596519333461603,w=0.5150153396874657,x=3.3463300748721987 color=yellow,shape=square,flag=1,i=90046,u=0.7076098069685339,v=0.7993374083205312,w=0.5017245264570126,x=5.400179483823213 color=red,shape=square,flag=0,i=90065,u=0.5043915250951406,v=0.9126647850429106,w=0.5088897027119359,x=5.505000599463879 color=red,shape=circle,flag=0,i=90071,u=0.15756716501853762,v=0.252972495274118,w=0.47760356254137737,x=6.1196922896522965 color=red,shape=square,flag=0,i=90077,u=0.1954418391020637,v=0.7941955610167312,w=0.5074307953077141,x=5.429488005545071 color=purple,shape=square,flag=0,i=90111,u=0.3447424863473555,v=0.6982847731330748,w=0.5055716767280367,x=4.547393206386748 color=red,shape=triangle,flag=0,i=90114,u=0.1397987823444078,v=0.23708880317593284,w=0.49397481784556085,x=6.780381366779236 color=yellow,shape=triangle,flag=1,i=90116,u=0.31901180939395335,v=0.9507107777740856,w=0.5414418960924794,x=4.6419297851089425 color=purple,shape=triangle,flag=0,i=90122,u=0.9986871176198068,v=0.3037738877233719,w=0.5154934457238382,x=5.365962021016529 color=red,shape=triangle,flag=1,i=90139,u=0.11691116433975857,v=0.2652804740538689,w=0.4872423546889221,x=4.774434894224382 color=red,shape=circle,flag=0,i=90156,u=0.4202678645487803,v=0.5004979209475295,w=0.5001783526500607,x=5.690468379315669 color=red,shape=square,flag=0,i=90163,u=0.07789228347129029,v=0.36245374853617474,w=0.5201278001103601,x=4.170355335199179 color=red,shape=square,flag=1,i=90171,u=0.3953541732267084,v=0.3378344487108793,w=0.5159913925552971,x=4.799366367893301 color=green,shape=triangle,flag=0,i=90174,u=0.24867350894483742,v=0.7415252835872189,w=0.5002241307468654,x=4.895033316702443 color=red,shape=triangle,flag=0,i=90192,u=0.49353128832835935,v=0.6799621297476228,w=0.48926531808194296,x=7.217058026916234 color=red,shape=triangle,flag=0,i=90207,u=0.20985585683143892,v=0.7263842666073457,w=0.48489185402160373,x=2.75533147005426 color=yellow,shape=square,flag=0,i=90242,u=0.5423225650824823,v=0.27294860846791,w=0.5021850959347206,x=6.685798062719805 color=red,shape=triangle,flag=0,i=90246,u=0.3154346275797085,v=0.15666893407471405,w=0.47786323925788016,x=6.530383213503373 color=purple,shape=square,flag=0,i=90249,u=0.9367672823637156,v=0.18863879978884768,w=0.4985702617034263,x=4.860873842294733 color=red,shape=circle,flag=0,i=90252,u=0.08987042311561,v=-0.008246897960893798,w=0.4819419130896962,x=5.273455773583588 color=yellow,shape=triangle,flag=1,i=90253,u=0.16191958799143635,v=0.6275776709316752,w=0.5413394718309322,x=8.65047297738678 color=red,shape=triangle,flag=0,i=90257,u=0.40335891184008055,v=0.9732935203552395,w=0.48387764102401926,x=5.385082976946599 color=purple,shape=circle,flag=0,i=90285,u=0.19936322068358658,v=0.724498693995839,w=0.4945654263388173,x=4.3524220087124235 color=red,shape=square,flag=0,i=90305,u=0.1640108239430247,v=0.5826328862746135,w=0.5028453751657805,x=5.123345558127809 color=red,shape=square,flag=0,i=90314,u=0.5492348475981281,v=0.2535871852925128,w=0.5008059539861747,x=4.693174310253581 color=green,shape=triangle,flag=0,i=90320,u=0.035638622196488945,v=0.46870823481388035,w=0.5097694111239055,x=7.160854483636338 color=red,shape=triangle,flag=1,i=90324,u=0.8793042111308871,v=0.11029097764481455,w=0.4926947143836904,x=4.057171191884191 color=green,shape=square,flag=1,i=90334,u=0.9057446807762088,v=0.37127876736977017,w=0.501301970192802,x=5.70767295293032 color=red,shape=triangle,flag=0,i=90336,u=0.807736252233716,v=0.7500087321259287,w=0.4942722581208215,x=4.397641346235832 color=orange,shape=circle,flag=1,i=90339,u=0.5190593265581473,v=0.23334499334978265,w=0.5035025531991322,x=4.568574034780903 color=purple,shape=circle,flag=0,i=90344,u=0.8592098223452053,v=0.7151851887380719,w=0.5015056754941445,x=6.352846311690776 color=green,shape=square,flag=1,i=90345,u=0.29045605871455193,v=0.48232613684644843,w=0.5024295542244392,x=4.15100841237567 color=red,shape=square,flag=1,i=90347,u=0.28769819749964864,v=0.4771887384714104,w=0.5052316266452762,x=4.524501149974622 color=red,shape=triangle,flag=0,i=90348,u=0.23944554472984803,v=0.463739039867444,w=0.5026475196611454,x=4.217571671433153 color=red,shape=circle,flag=0,i=90362,u=0.13079678554889984,v=0.07440200201809144,w=0.4785706956254339,x=4.752427208523464 color=blue,shape=circle,flag=0,i=90377,u=0.05990808090028965,v=0.043446084425751264,w=0.48203889622340756,x=3.696046636449399 color=purple,shape=square,flag=0,i=90378,u=0.08252205370039623,v=0.5258699246447656,w=0.49721032942964094,x=5.59424690257691 color=red,shape=triangle,flag=0,i=90379,u=0.7979614464096105,v=0.5087409492566641,w=0.5078580087116009,x=4.799983946720443 color=red,shape=square,flag=1,i=90386,u=0.11007004558158795,v=0.92470739384724,w=0.507876720207312,x=5.199404415159344 color=red,shape=circle,flag=0,i=90391,u=0.6856904730485566,v=0.6263620137783436,w=0.4826019012674464,x=6.210356566607657 color=blue,shape=square,flag=1,i=90407,u=0.023206669758393028,v=0.24876449154620495,w=0.512427823263119,x=3.8387536308008614 color=red,shape=square,flag=0,i=90415,u=0.12294413040305086,v=0.18854613952093002,w=0.5062323224233299,x=5.8580150999782825 color=orange,shape=triangle,flag=1,i=90418,u=0.1886265771379605,v=0.6328604190683784,w=0.4732386249993919,x=5.1922956858463705 color=green,shape=triangle,flag=1,i=90422,u=0.27992478348208594,v=0.6788238710899672,w=0.5034138303596242,x=3.392851049663188 color=purple,shape=circle,flag=0,i=90427,u=0.9352840909256329,v=0.5865811199708838,w=0.5001339373784378,x=5.451972791058954 color=red,shape=circle,flag=1,i=90460,u=0.6347056033348353,v=0.7345534078310048,w=0.48230890153809247,x=4.586144495033316 color=red,shape=triangle,flag=1,i=90470,u=0.2878097690702818,v=0.2992114392069204,w=0.49670607807559214,x=4.835707986216085 color=red,shape=square,flag=1,i=90508,u=0.5100807341593498,v=0.39097195027203246,w=0.515960701791966,x=5.088042746021345 color=blue,shape=square,flag=1,i=90520,u=0.3554110708449719,v=0.4731059392140229,w=0.5097235855616599,x=4.77911769479472 color=purple,shape=square,flag=0,i=90530,u=0.8050304477823438,v=0.6486635533163133,w=0.5006720825425117,x=5.343433954678218 color=red,shape=square,flag=0,i=90535,u=0.827977949714675,v=0.8311787073170042,w=0.5184286766818691,x=3.758603397555909 color=red,shape=square,flag=1,i=90538,u=0.5298178608473539,v=0.32404775134609776,w=0.5179907302280644,x=1.9381545474723956 color=red,shape=triangle,flag=0,i=90545,u=0.588917154337286,v=0.0646395517234003,w=0.4895318500518509,x=5.788286795016194 color=red,shape=square,flag=0,i=90553,u=0.9270783024036149,v=0.20508066298602778,w=0.5135153518020926,x=3.2803911454259853 color=red,shape=circle,flag=0,i=90556,u=0.7651862922780163,v=0.753562407403163,w=0.47422605173968296,x=4.5878152848088005 color=green,shape=triangle,flag=0,i=90561,u=0.5112283956303908,v=0.3400224283402157,w=0.49216956129386397,x=2.5085918747322347 color=yellow,shape=triangle,flag=1,i=90565,u=0.5542130058209688,v=0.41696685686448587,w=0.549649260831491,x=7.336351465867044 color=red,shape=triangle,flag=1,i=90597,u=0.48583326649249703,v=0.30019368849376593,w=0.505567964720742,x=4.585150542351635 color=blue,shape=circle,flag=0,i=90611,u=0.2218207425069817,v=0.9429675704580606,w=0.48934724654471073,x=4.389644324818581 color=purple,shape=circle,flag=0,i=90618,u=0.8738298264345629,v=0.3252577861318232,w=0.502949035655393,x=3.733972947841442 color=red,shape=triangle,flag=0,i=90621,u=0.5755477797623524,v=0.26260623042467757,w=0.49987465754881394,x=3.516897529532771 color=yellow,shape=triangle,flag=1,i=90622,u=0.2761477810660815,v=0.5764531765395416,w=0.5486543503150296,x=4.838837171160761 color=green,shape=square,flag=1,i=90625,u=0.721868804133974,v=0.013003890842041232,w=0.5023529996131063,x=4.638992558795287 color=red,shape=triangle,flag=0,i=90653,u=0.5989100280751152,v=0.45340281931249515,w=0.49634869409361465,x=3.831281536644813 color=red,shape=triangle,flag=0,i=90658,u=0.24017797574133604,v=0.0922736585524595,w=0.5003442429775836,x=5.670421108884522 color=red,shape=triangle,flag=0,i=90685,u=0.3053688875062811,v=0.6960561114445247,w=0.5071561659791778,x=3.9375725064892992 color=yellow,shape=triangle,flag=1,i=90688,u=0.22514505494168546,v=0.11692334049201614,w=0.5513777190429429,x=3.4695806352977727 color=red,shape=circle,flag=0,i=90690,u=0.6073411157321065,v=0.5304651732136773,w=0.48607353148084365,x=4.965102919330073 color=yellow,shape=square,flag=1,i=90704,u=0.7458578133193874,v=0.7749028967733181,w=0.5036532585654224,x=4.779455321041035 color=yellow,shape=square,flag=1,i=90755,u=0.809700941822523,v=0.8893906089910453,w=0.4997778408684163,x=5.386448418230657 color=blue,shape=triangle,flag=0,i=90761,u=0.16244083849413704,v=0.6019240942196404,w=0.5118952265834457,x=6.814995548516496 color=red,shape=triangle,flag=0,i=90776,u=0.7338605641043282,v=0.9883685875456313,w=0.5025296466527208,x=6.831623976912691 color=purple,shape=triangle,flag=0,i=90779,u=0.5827259443404007,v=0.47210499365646064,w=0.5346443733145939,x=3.2276532363943375 color=red,shape=triangle,flag=0,i=90781,u=0.7251561928570949,v=0.6177066881930315,w=0.4988902762038017,x=6.697805098343282 color=yellow,shape=triangle,flag=1,i=90791,u=0.02383448839891633,v=0.5599171056645973,w=0.5556961557821248,x=7.240232112812035 color=blue,shape=circle,flag=1,i=90798,u=0.06906212685270718,v=0.1462349090513304,w=0.5015274180475309,x=6.250182377795521 color=red,shape=square,flag=1,i=90811,u=0.160455322083089,v=0.16291730823626482,w=0.5177837149188115,x=4.728512114677581 color=blue,shape=triangle,flag=1,i=90822,u=0.7747928487657679,v=0.7642079426865998,w=0.5150590902672858,x=5.641539130666282 color=purple,shape=circle,flag=0,i=90842,u=0.06255306943569905,v=0.9620995674244678,w=0.48874859411328214,x=6.021293641284653 color=purple,shape=triangle,flag=0,i=90852,u=0.2787985045712791,v=0.8724661952121843,w=0.5310524799287406,x=6.808757858235606 color=red,shape=square,flag=0,i=90890,u=0.7885689440673699,v=0.840308785070548,w=0.5113386323382079,x=7.947678682407606 color=red,shape=circle,flag=0,i=90892,u=0.2677676779374627,v=0.2877834454738195,w=0.49413387041625034,x=5.400371358473737 color=orange,shape=circle,flag=1,i=90903,u=0.886804278072299,v=0.3203936921657189,w=0.5018734979515417,x=4.506241395925766 color=red,shape=circle,flag=0,i=90907,u=0.3100184663492891,v=0.2293333236715393,w=0.48379278616357707,x=4.452125831977417 color=purple,shape=triangle,flag=0,i=90909,u=0.13065092513182774,v=0.6041768208129114,w=0.525563926528807,x=3.814828096868639 color=red,shape=circle,flag=0,i=90914,u=0.9350315691758353,v=0.9696530842260699,w=0.4876501207723808,x=2.7432917622859385 color=yellow,shape=square,flag=1,i=90916,u=0.3160488353087332,v=0.8810799285539127,w=0.4995785741408299,x=6.285357533235178 color=red,shape=triangle,flag=0,i=90920,u=0.83921933370351,v=0.39865610111471816,w=0.49428007343403463,x=4.645784642171786 color=yellow,shape=square,flag=1,i=90921,u=0.5144188887415021,v=0.4052440833167297,w=0.49779974462126353,x=5.666068683211667 color=purple,shape=square,flag=0,i=90939,u=0.11300536391477212,v=0.3376600323469505,w=0.5008026741607734,x=4.69226890825451 color=purple,shape=square,flag=0,i=90959,u=0.7233088730417938,v=0.8174321610875676,w=0.4965787064914473,x=6.47617484547926 color=red,shape=square,flag=0,i=90976,u=0.9233187441765867,v=0.8186289075210802,w=0.518434465363418,x=6.267753892417456 color=blue,shape=circle,flag=1,i=90980,u=0.18558288122356947,v=0.8961549063476867,w=0.4973855285240476,x=7.31746097949041 color=blue,shape=triangle,flag=1,i=90997,u=0.2420870107274563,v=0.49521794103038264,w=0.5135155049387067,x=5.7746793310856575 color=yellow,shape=square,flag=1,i=90998,u=0.10702810775030158,v=0.04350653673585947,w=0.49776205527238104,x=4.6469190183886635 color=red,shape=circle,flag=0,i=91012,u=0.7854819422442846,v=0.8342796869306377,w=0.49249565228106357,x=4.600961737053408 color=blue,shape=circle,flag=0,i=91025,u=0.32718666016242026,v=0.21211963780727683,w=0.4927886026858033,x=6.116603766820709 color=green,shape=triangle,flag=0,i=91026,u=0.6241876365295881,v=0.4576714194981364,w=0.49281571815124664,x=5.4819287050410965 color=red,shape=square,flag=0,i=91038,u=0.9062368572869695,v=0.11658464275912994,w=0.49972952685754635,x=3.0012654962462997 color=yellow,shape=circle,flag=1,i=91045,u=0.37580230728286446,v=0.24840676685696939,w=0.4710603546802674,x=5.9902292069685315 color=purple,shape=square,flag=0,i=91071,u=0.16229709813147586,v=0.298713475161028,w=0.497734146531199,x=6.493413200196891 color=red,shape=square,flag=0,i=91072,u=0.400797403203887,v=0.8884294894746171,w=0.4885835046667912,x=2.315111925336007 color=red,shape=triangle,flag=0,i=91083,u=0.5994805553084954,v=0.8085302706707413,w=0.495401530490264,x=2.819925848338199 color=red,shape=triangle,flag=0,i=91084,u=0.26986934773740356,v=0.7855248535717263,w=0.49297565725569004,x=4.891534717975175 color=yellow,shape=square,flag=1,i=91089,u=0.25370903732564076,v=0.10956929699009377,w=0.49174589404172653,x=5.0838711418159095 color=yellow,shape=square,flag=1,i=91104,u=0.23992710389429817,v=0.8908123695225105,w=0.4889228404111286,x=5.215181711548609 color=red,shape=triangle,flag=0,i=91106,u=0.533247728358512,v=0.02041605159071358,w=0.4887756060360072,x=4.569246204347969 color=yellow,shape=square,flag=1,i=91112,u=0.07578651471934816,v=0.3277052165546407,w=0.48614349757915915,x=5.080252692659559 color=red,shape=triangle,flag=0,i=91115,u=0.8436737428956873,v=0.3663356851628098,w=0.4852749987647031,x=6.869461051528152 color=blue,shape=triangle,flag=1,i=91131,u=0.6329609667001268,v=0.6178775793718218,w=0.5028497482610984,x=5.710427769374764 color=red,shape=square,flag=0,i=91132,u=0.00427944806862568,v=0.20913790319307657,w=0.5011473140315142,x=3.3302266626930677 color=yellow,shape=square,flag=0,i=91135,u=0.358542821055,v=0.6483871600513494,w=0.48777511630696985,x=4.573855665853982 color=green,shape=circle,flag=1,i=91150,u=0.6181342024294035,v=0.17264429878491294,w=0.48042965447083186,x=5.930947335211152 color=red,shape=triangle,flag=1,i=91159,u=0.25250077823736283,v=0.9167718033394358,w=0.4777447511522709,x=3.652792092111459 color=red,shape=triangle,flag=0,i=91161,u=0.18870802888773774,v=0.365304575071729,w=0.4752002381259525,x=4.55204930986767 color=orange,shape=triangle,flag=0,i=91164,u=0.038822520942587424,v=0.15418584144460235,w=0.48491288450593595,x=5.599474556341277 color=purple,shape=circle,flag=1,i=91169,u=0.8153145827646127,v=0.6997637912910207,w=0.49365621494796,x=4.8649843617752495 color=red,shape=circle,flag=1,i=91185,u=0.3246505282022073,v=0.3502084319312681,w=0.49507857434621455,x=3.930448297282758 color=green,shape=square,flag=1,i=91190,u=0.33081898348726224,v=0.44299978995758893,w=0.5027397240630732,x=6.467556815361878 color=red,shape=square,flag=1,i=91191,u=0.3052679178476624,v=0.9532394840350259,w=0.49401926965829684,x=4.631747456905484 color=red,shape=triangle,flag=0,i=91202,u=0.18916630968802117,v=0.59383212847744,w=0.4815982607707376,x=4.331998181377281 color=red,shape=square,flag=0,i=91209,u=0.9398253403615706,v=0.42555599292790947,w=0.49332026236945403,x=7.485717497992588 color=red,shape=triangle,flag=0,i=91213,u=0.9863195080326516,v=0.0051668701701588216,w=0.485361190011576,x=3.761552734849012 color=blue,shape=circle,flag=1,i=91215,u=0.2778481624887428,v=0.6171677875772678,w=0.49084586603345837,x=4.2824173260817355 color=green,shape=triangle,flag=0,i=91219,u=0.49565892890081975,v=0.967965195820225,w=0.4791653636678037,x=6.74060657225258 color=yellow,shape=circle,flag=1,i=91224,u=0.4497877446201469,v=0.9258725758511029,w=0.4749507961085395,x=6.513484627194484 color=red,shape=circle,flag=0,i=91227,u=0.9240919042439283,v=0.855019639416469,w=0.49307138532208566,x=6.0363023015794655 color=red,shape=square,flag=0,i=91283,u=0.7994803855502892,v=0.9026461086411324,w=0.5008968394507144,x=5.479940567848111 color=purple,shape=triangle,flag=0,i=91286,u=0.8511074940387708,v=0.22868249181661215,w=0.5323644690233761,x=6.431782449433335 color=red,shape=triangle,flag=0,i=91316,u=0.9624114979199616,v=0.0936084877947696,w=0.4700903722135018,x=4.644299516792057 color=blue,shape=triangle,flag=0,i=91329,u=0.20637133641536598,v=0.34091663361170943,w=0.5092943679104792,x=5.221524304665318 color=orange,shape=circle,flag=1,i=91330,u=0.8767044967708005,v=0.30710153995642675,w=0.4955553797179159,x=5.089276810389023 color=blue,shape=triangle,flag=1,i=91336,u=0.7814091143824703,v=0.5108862395778669,w=0.5039613396992398,x=2.908779569869387 color=red,shape=triangle,flag=0,i=91354,u=0.6629649874424657,v=0.6788690419543433,w=0.4770912550596344,x=4.411620603793001 color=red,shape=circle,flag=0,i=91364,u=0.43422779158406644,v=0.4774617947145634,w=0.5093434721634299,x=2.8207581201408174 color=red,shape=circle,flag=1,i=91377,u=0.3860307048422146,v=0.3903416725354504,w=0.510361697022731,x=5.883462988566008 color=blue,shape=square,flag=1,i=91378,u=0.694772085833029,v=0.7746997407475625,w=0.5203776491906638,x=5.694762515704891 color=red,shape=square,flag=0,i=91393,u=0.6824239723971212,v=0.394288926200405,w=0.5088759730211957,x=6.58293092192962 color=green,shape=circle,flag=0,i=91396,u=0.6364026087046742,v=0.24481198353190614,w=0.4823153681763248,x=3.210681512547708 color=red,shape=square,flag=0,i=91406,u=0.3006986477945419,v=0.44483541969061113,w=0.5108849572172346,x=4.4847160532079435 color=green,shape=circle,flag=1,i=91407,u=0.735661409506189,v=0.4401762466032022,w=0.47762995132730485,x=7.09191263711682 color=blue,shape=square,flag=1,i=91411,u=0.9905644099169285,v=0.2896062766982779,w=0.513319674610675,x=7.547753788255066 color=red,shape=triangle,flag=0,i=91417,u=0.36203899437581344,v=0.43064437625210006,w=0.46253402977711366,x=3.434195204419042 color=blue,shape=square,flag=0,i=91419,u=0.444036983006567,v=0.069817884832169,w=0.5156465029260499,x=4.6749549224092695 color=yellow,shape=square,flag=1,i=91425,u=0.24304003259488005,v=0.7591206936098678,w=0.5100772778172763,x=7.854300032726772 color=blue,shape=triangle,flag=0,i=91428,u=0.2820565192241996,v=0.4925946507939064,w=0.5108752968082304,x=4.971216012650028 color=green,shape=circle,flag=1,i=91446,u=0.8479269539496317,v=0.7380964884411712,w=0.4842517944590293,x=4.110059847432784 color=yellow,shape=circle,flag=1,i=91449,u=0.18090402508265702,v=0.06572564836888284,w=0.4703096961523589,x=4.0155953689850445 color=orange,shape=triangle,flag=0,i=91451,u=0.17176534740593108,v=0.28941693918342226,w=0.48212754741221825,x=5.508330146794736 color=yellow,shape=square,flag=1,i=91458,u=0.8592018567316879,v=0.41535934742931246,w=0.5058849035126034,x=6.031420714557252 color=red,shape=triangle,flag=1,i=91471,u=0.5950943681823347,v=0.2896550372662995,w=0.46496099715610895,x=6.6052724912283916 color=red,shape=square,flag=0,i=91486,u=0.36385650975566386,v=0.049984214587354026,w=0.5104589230194905,x=5.507624098924034 color=yellow,shape=triangle,flag=1,i=91489,u=0.9179146539778262,v=0.31280853999011815,w=0.5374871891513899,x=4.440286950959973 color=red,shape=triangle,flag=1,i=91529,u=0.20297909435871497,v=0.1543382897636152,w=0.45015996046379725,x=4.760113780949169 color=green,shape=circle,flag=0,i=91547,u=0.24564579945840082,v=0.6605816403918892,w=0.481854964312864,x=4.329166941013414 color=red,shape=triangle,flag=1,i=91549,u=0.4758056288898427,v=0.3567587304608373,w=0.4519995075787081,x=4.555222216187146 color=red,shape=circle,flag=1,i=91559,u=0.5580590999040709,v=0.5804261663194424,w=0.5000949764325087,x=5.788907409896858 color=purple,shape=triangle,flag=0,i=91570,u=0.18325975883523482,v=0.7107227013159194,w=0.5203302715119601,x=5.357967957714937 color=blue,shape=circle,flag=1,i=91575,u=0.3630241631202715,v=0.6433766613042373,w=0.4978535614215523,x=4.443620092292179 color=yellow,shape=triangle,flag=1,i=91593,u=0.2545529702047109,v=0.28171672777337275,w=0.5246939143338366,x=4.316309837756274 color=yellow,shape=triangle,flag=1,i=91615,u=0.6161022313500286,v=0.06612934762383571,w=0.5220682826096286,x=4.637669044418764 color=red,shape=triangle,flag=1,i=91621,u=0.14273557448127117,v=0.5366764805665182,w=0.46742511928290736,x=5.713997632996233 color=red,shape=square,flag=0,i=91626,u=0.1656622731110724,v=0.536288996696253,w=0.5235401546593665,x=4.663030082770255 color=red,shape=triangle,flag=1,i=91640,u=0.9880567081131927,v=0.07363726990358421,w=0.4624652344823099,x=4.411470011663428 color=red,shape=square,flag=1,i=91642,u=0.4693877772439784,v=0.522442790337406,w=0.5186062694807124,x=5.36362021792682 color=yellow,shape=circle,flag=1,i=91644,u=0.8766522519775174,v=0.9571664582213368,w=0.4772865416409325,x=4.603053316014542 color=red,shape=circle,flag=0,i=91648,u=0.5261001781029132,v=0.45163711568351644,w=0.5043785643488391,x=4.96998738926161 color=yellow,shape=triangle,flag=1,i=91653,u=0.8628770817598326,v=0.8819327945932551,w=0.5254641032080442,x=4.178156454940569 color=green,shape=circle,flag=0,i=91661,u=0.8023580980939091,v=0.6996956709770846,w=0.481525499643165,x=5.8775206641349085 color=red,shape=square,flag=0,i=91668,u=0.09783686108043887,v=0.530025152416621,w=0.5210424632841472,x=5.316359630278907 color=yellow,shape=square,flag=1,i=91675,u=0.6132742840309455,v=0.08070659496836463,w=0.5088026118846664,x=3.092904758938053 color=green,shape=square,flag=0,i=91711,u=0.2824022859932803,v=0.18005009447061449,w=0.5024952378395806,x=3.814401215652659 color=red,shape=square,flag=0,i=91712,u=0.7427098330918429,v=0.11149548010084931,w=0.5229359885877523,x=5.993827222740602 color=red,shape=triangle,flag=0,i=91718,u=0.7008881314272662,v=0.5979627916619819,w=0.4682990283680194,x=6.348179694917609 color=red,shape=square,flag=1,i=91730,u=0.5583393349507647,v=0.26698333284373976,w=0.5265489966121711,x=4.973224539375698 color=red,shape=square,flag=1,i=91733,u=0.20260378961582914,v=0.022873917331863947,w=0.5246194038713854,x=5.513971534135039 color=purple,shape=circle,flag=0,i=91734,u=0.09776285081800018,v=0.4932058484136499,w=0.4959515236016569,x=3.0564681465623678 color=red,shape=square,flag=0,i=91736,u=0.7216339567549901,v=0.06842141141286417,w=0.5292942059522587,x=6.698134986022218 color=red,shape=circle,flag=0,i=91744,u=0.21181220113532762,v=0.29004649808129196,w=0.5142370871792684,x=4.571793704366557 color=blue,shape=square,flag=1,i=91748,u=0.9952236487822826,v=0.7393893347987025,w=0.5118379426146453,x=4.225401078450837 color=red,shape=circle,flag=0,i=91753,u=0.8105353320888463,v=0.74202532136776,w=0.5107772825088437,x=5.847123691210849 color=yellow,shape=circle,flag=1,i=91772,u=0.9348860641048993,v=0.23343410103541873,w=0.4698149863961367,x=4.302568705572054 color=red,shape=triangle,flag=0,i=91778,u=0.19611428787063734,v=0.6974799834590074,w=0.48323186716508787,x=6.186358405338665 color=red,shape=circle,flag=1,i=91791,u=0.6441346265887943,v=0.5644621703156312,w=0.5211665809597502,x=4.496026070258934 color=red,shape=triangle,flag=0,i=91817,u=0.3182834990173712,v=0.10148407384605473,w=0.5037527835634726,x=4.610432898731612 color=red,shape=square,flag=0,i=91820,u=0.9116021350082723,v=0.4480013956954678,w=0.5181149505466778,x=6.396620086344207 color=red,shape=circle,flag=1,i=91824,u=0.9994612061005654,v=0.9592224706415884,w=0.5051473710730526,x=7.0918663369179065 color=red,shape=triangle,flag=1,i=91829,u=0.03107725595847166,v=0.276768272001487,w=0.5046530327725621,x=3.4365165514285834 color=red,shape=circle,flag=1,i=91832,u=0.8632632536336465,v=0.8446376076233072,w=0.5019122193806458,x=5.798376120058726 color=red,shape=triangle,flag=0,i=91857,u=0.41057451735385875,v=0.8484088548755442,w=0.5061162471325613,x=5.025848868646665 color=yellow,shape=triangle,flag=1,i=91874,u=0.04363439387123724,v=0.7917850965793704,w=0.5127769582181586,x=4.180738606220763 color=red,shape=triangle,flag=1,i=91875,u=0.35131577748658727,v=0.6162270448251954,w=0.4983799652098564,x=4.725937491407109 color=red,shape=triangle,flag=0,i=91880,u=0.08197456433785766,v=0.7500621019108593,w=0.49656423587453546,x=3.9503880566002234 color=red,shape=square,flag=0,i=91886,u=0.20634247716004317,v=0.1645474405943148,w=0.5260342445678624,x=6.896099469782151 color=purple,shape=triangle,flag=0,i=91892,u=0.8823190968633116,v=0.671099311868697,w=0.5407071049555798,x=7.204233579981788 color=red,shape=square,flag=0,i=91908,u=0.3370994637738046,v=0.6083133047234414,w=0.5172415955963661,x=6.210860238783639 color=purple,shape=triangle,flag=0,i=91910,u=0.7678543577032402,v=0.6163521376387997,w=0.5420632850381245,x=4.702062249546853 color=green,shape=circle,flag=0,i=91930,u=0.9681370877868263,v=0.08573176997472465,w=0.49609755869542993,x=4.666371701354854 color=green,shape=triangle,flag=0,i=91938,u=0.9772952210959027,v=0.5631809925746565,w=0.5042759811756851,x=6.0692636261403194 color=yellow,shape=square,flag=1,i=91972,u=0.31078322955061566,v=0.6809230335753754,w=0.5006899841251623,x=6.230431765922893 color=red,shape=square,flag=0,i=91975,u=0.667204468381998,v=0.6204835430536997,w=0.5229311356159404,x=6.581019246693914 color=blue,shape=triangle,flag=0,i=91977,u=0.22452323374052807,v=0.775845223005245,w=0.5180028762706006,x=4.9475704423005356 color=red,shape=square,flag=0,i=91986,u=0.015801093152288725,v=0.971167268927586,w=0.5282008131839773,x=4.973936971213001 color=red,shape=circle,flag=0,i=91991,u=0.31870124675600886,v=0.30486111389878146,w=0.5117870165623808,x=4.095300083170412 color=yellow,shape=square,flag=1,i=92003,u=0.057429590146707676,v=0.6948719918278353,w=0.5020751132516253,x=3.853930429186416 color=yellow,shape=square,flag=0,i=92004,u=0.41885733943308734,v=0.34365528573412096,w=0.5060582893423151,x=4.8396921202898655 color=red,shape=triangle,flag=0,i=92008,u=0.9406380961352001,v=0.7985118962465688,w=0.4963134081440155,x=5.114645730283114 color=yellow,shape=square,flag=1,i=92009,u=0.14407143754217755,v=0.8446226564205986,w=0.5029943923322807,x=4.235142121429885 color=red,shape=square,flag=0,i=92016,u=0.1621248875476391,v=0.21464296483413225,w=0.5302583490345193,x=6.189845971890642 color=orange,shape=square,flag=0,i=92018,u=0.9936350141409035,v=0.7965161313201811,w=0.507241378987466,x=4.573375347076401 color=green,shape=square,flag=0,i=92020,u=0.5037391620989604,v=0.1545022691115584,w=0.5048282966431534,x=6.171225513328001 color=purple,shape=square,flag=0,i=92027,u=0.904080501847882,v=0.0003641137096487279,w=0.5110947496270191,x=4.546882851246963 color=red,shape=square,flag=0,i=92036,u=0.34766775585296683,v=0.024637837713211708,w=0.5298011734960065,x=5.090435375273604 color=purple,shape=square,flag=0,i=92047,u=0.4408077437876803,v=0.41559679251477255,w=0.5136793595478374,x=4.69008713690436 color=purple,shape=square,flag=0,i=92055,u=0.9661101196938342,v=0.8718373473728233,w=0.5116778439765637,x=5.669109212196023 color=red,shape=triangle,flag=0,i=92071,u=0.7985781211924962,v=0.35827199712772884,w=0.503244848388862,x=6.864423175741454 color=blue,shape=circle,flag=0,i=92084,u=0.9551257808863871,v=0.08329033874270686,w=0.4757333294104717,x=5.143296035524737 color=blue,shape=circle,flag=1,i=92089,u=0.6578081662214453,v=0.28105221560733384,w=0.4731904367563546,x=6.205429943565818 color=purple,shape=triangle,flag=0,i=92095,u=0.9695828465816689,v=0.45164347112830405,w=0.5428049164236736,x=3.8727288079726327 color=red,shape=square,flag=0,i=92131,u=0.8851120303886465,v=0.9900534444123827,w=0.5329218953586609,x=4.91715017352908 color=red,shape=triangle,flag=0,i=92133,u=0.018660777403799678,v=0.22033128187680862,w=0.4852951873882128,x=7.565787716855552 color=green,shape=triangle,flag=1,i=92140,u=0.20225096363936002,v=0.426589662046562,w=0.5034010858470748,x=4.548687108007283 color=green,shape=circle,flag=0,i=92146,u=0.47316698396367085,v=0.17017670369396543,w=0.505410348493332,x=5.87097046802118 color=red,shape=circle,flag=0,i=92151,u=0.3063173889975037,v=0.322971980124509,w=0.5008340611718457,x=4.811384233564396 color=purple,shape=square,flag=0,i=92158,u=0.4876358930136361,v=0.07143269678147524,w=0.5194326580751527,x=5.593525888765722 color=red,shape=circle,flag=0,i=92161,u=0.5782559882905408,v=0.5572684026056344,w=0.4999665666656498,x=5.971280815682376 color=yellow,shape=triangle,flag=1,i=92188,u=0.1546352035429529,v=0.7614118132207637,w=0.5103450444907335,x=3.9386396343519436 color=red,shape=triangle,flag=0,i=92193,u=0.4114570194206454,v=0.1643985160794008,w=0.487651535003318,x=6.192091366674923 color=yellow,shape=square,flag=1,i=92207,u=0.7607670947909257,v=0.3330458741547624,w=0.5043800911114551,x=4.83260073369964 color=red,shape=triangle,flag=0,i=92211,u=0.29880763752176087,v=0.5565947269821077,w=0.4770125214159317,x=4.319237166817335 color=blue,shape=circle,flag=1,i=92228,u=0.6013823346938687,v=0.03694488190439982,w=0.4774086111769818,x=3.475820508311775 color=red,shape=square,flag=1,i=92245,u=0.7961877224295332,v=0.7070632441200317,w=0.5149390478858223,x=5.677540601346222 color=yellow,shape=triangle,flag=1,i=92254,u=0.15326317994623084,v=0.8110679924897019,w=0.5039151512231504,x=3.248213299635964 color=green,shape=triangle,flag=0,i=92256,u=0.8517874621186892,v=0.7429907448393668,w=0.4991747674473293,x=5.306090477467658 color=orange,shape=triangle,flag=0,i=92268,u=0.16513620273716123,v=0.1088324925021571,w=0.48314751526264116,x=4.528111869504131 color=blue,shape=triangle,flag=1,i=92270,u=0.03137096951445939,v=0.015178453173292805,w=0.5197708539156422,x=4.586874060593856 color=green,shape=triangle,flag=0,i=92277,u=0.24617576360789872,v=0.575053102410867,w=0.49727005821305376,x=5.0817951672332144 color=blue,shape=triangle,flag=0,i=92279,u=0.18910359054034243,v=0.857055364316783,w=0.5288206247883013,x=6.639857301622398 color=blue,shape=square,flag=0,i=92286,u=0.5301528580525783,v=0.4975650586832604,w=0.4970342834457019,x=6.067740841687204 color=blue,shape=circle,flag=1,i=92292,u=0.5959005449495492,v=0.04149008704490953,w=0.47466327278231685,x=4.2966234373857075 color=green,shape=triangle,flag=0,i=92318,u=0.4150619571543004,v=0.4771523156481643,w=0.5008583240388441,x=3.3388519128404677 color=red,shape=square,flag=1,i=92319,u=0.47287165320109836,v=0.18159150038154392,w=0.5038470806308768,x=2.8806534294051 color=purple,shape=triangle,flag=0,i=92327,u=0.05761765717059886,v=0.7143162058196174,w=0.5166700588437635,x=5.222879480116811 color=yellow,shape=square,flag=1,i=92335,u=0.5466631161636603,v=0.2494339978848218,w=0.5036639348713162,x=5.082181303040596 color=red,shape=square,flag=0,i=92338,u=0.7643701160252161,v=0.612162225482781,w=0.49679512063851927,x=4.722092810491887 color=yellow,shape=square,flag=1,i=92354,u=0.2739911611659992,v=0.6753834443612994,w=0.508456368184811,x=2.3417038003893644 color=purple,shape=square,flag=0,i=92360,u=0.2031974808069621,v=0.9756168089473269,w=0.5047373057063923,x=5.763432027776442 color=red,shape=triangle,flag=0,i=92369,u=0.22793449535306032,v=0.7380592625353234,w=0.5144759209326154,x=7.557222620904095 color=red,shape=circle,flag=1,i=92375,u=0.15480386085221798,v=0.07711216469128883,w=0.49574537165250765,x=6.645911888014537 color=red,shape=triangle,flag=0,i=92382,u=0.053419499784761126,v=0.8062155893570594,w=0.5145173301638083,x=4.529566110748772 color=red,shape=triangle,flag=0,i=92393,u=0.5382320437869095,v=0.09987302865394376,w=0.5224850816574071,x=3.706690197276604 color=red,shape=circle,flag=0,i=92398,u=0.6443723678042178,v=0.5938518534031301,w=0.4863800626197255,x=4.83719485934379 color=red,shape=square,flag=0,i=92402,u=0.4257768620476886,v=0.10536792875086354,w=0.498514740689355,x=4.550360005282122 color=green,shape=square,flag=1,i=92425,u=0.5726072783935123,v=0.29848380955676024,w=0.5180631508418188,x=3.4695996692799085 color=red,shape=triangle,flag=1,i=92426,u=0.7959615576462308,v=0.9226158388596538,w=0.5300927664325107,x=4.534824812213121 color=red,shape=circle,flag=0,i=92446,u=0.10841739950267182,v=0.03245882446936885,w=0.48856373496143407,x=4.8329225099364175 color=green,shape=square,flag=0,i=92459,u=0.7954227952686221,v=0.048758535169457606,w=0.5217434442272614,x=7.407826079329731 color=purple,shape=square,flag=1,i=92510,u=0.13899564089860716,v=0.8942760780015213,w=0.5090806308225366,x=5.184812958189893 color=blue,shape=circle,flag=1,i=92519,u=0.469508851635727,v=0.6060128836516456,w=0.47568685391621157,x=6.158734204238261 color=blue,shape=circle,flag=1,i=92520,u=0.635988188067897,v=0.6153770350297673,w=0.480520976793717,x=5.514426888518556 color=red,shape=square,flag=0,i=92535,u=0.5545564397859419,v=0.004975058750256167,w=0.5021996196417431,x=3.4913706546421897 color=yellow,shape=triangle,flag=1,i=92554,u=0.0508505318161705,v=0.5263444036615852,w=0.48955628228349646,x=7.604937349444351 color=red,shape=circle,flag=1,i=92608,u=0.2822691801658972,v=0.34855564797154814,w=0.4748559704366241,x=5.556851992239643 color=green,shape=square,flag=0,i=92638,u=0.029424758781300686,v=0.11934556673090824,w=0.5101799612232227,x=5.057554973622578 color=red,shape=square,flag=0,i=92645,u=0.09180410298341202,v=0.5724164077251228,w=0.5122394828590608,x=4.532359856579168 color=red,shape=circle,flag=0,i=92659,u=0.31350006300167166,v=0.3272104744822449,w=0.4825076800166879,x=5.809479499335666 color=red,shape=square,flag=0,i=92661,u=0.02282478666148624,v=0.19699177428237968,w=0.5146061147481212,x=7.767973891890201 color=green,shape=circle,flag=0,i=92672,u=0.9153683684039098,v=0.18453213315330053,w=0.49127124481601797,x=6.118977960477081 color=red,shape=triangle,flag=1,i=92717,u=0.6795899441943761,v=0.4682537414974407,w=0.5209558399487871,x=4.112178597388621 color=blue,shape=circle,flag=1,i=92726,u=0.9996778243345615,v=0.9635197665367478,w=0.4763386520182622,x=5.499485586527228 color=red,shape=square,flag=0,i=92742,u=0.7321911720522182,v=0.930143072499428,w=0.5198188275747119,x=3.0432406647346877 color=red,shape=triangle,flag=0,i=92748,u=0.4538098580684852,v=0.0467629130011904,w=0.5236593729797778,x=5.2074414955021 color=purple,shape=triangle,flag=0,i=92751,u=0.7614298089465806,v=0.13614291655875688,w=0.5175877223594458,x=4.870697582921675 color=blue,shape=triangle,flag=1,i=92757,u=0.21810762014610507,v=0.8486704950725418,w=0.5262841573779571,x=4.745195483335376 color=green,shape=triangle,flag=1,i=92764,u=0.8318920297622162,v=0.07065159489357287,w=0.5266471559552776,x=4.903809205618754 color=yellow,shape=circle,flag=1,i=92769,u=0.5283882491643586,v=0.9596697427917676,w=0.4597097311306728,x=3.9661418161181743 color=yellow,shape=square,flag=1,i=92770,u=0.40726751668994143,v=0.004504819016453276,w=0.48425820424305643,x=4.178275044109716 color=red,shape=triangle,flag=0,i=92775,u=0.11885081653923701,v=0.6634541882476465,w=0.5312863980180776,x=3.412433822839326 color=yellow,shape=square,flag=0,i=92776,u=0.3149888324070357,v=0.8891663083686959,w=0.487684662001148,x=3.7934257303984045 color=blue,shape=square,flag=1,i=92782,u=0.2616790176590942,v=0.9288893597920503,w=0.5047140751760347,x=5.462105621360529 color=green,shape=triangle,flag=1,i=92783,u=0.8152409830126898,v=0.22809947431131516,w=0.5233213578941764,x=7.84271096801136 color=red,shape=triangle,flag=0,i=92792,u=0.7670053051575968,v=0.34381238969062633,w=0.5224213908901688,x=6.671527132141768 color=blue,shape=triangle,flag=1,i=92793,u=0.9681200784557468,v=0.06514897515076978,w=0.5211512954592566,x=5.427151990471681 color=yellow,shape=triangle,flag=0,i=92832,u=0.8355741503985865,v=0.14353757878206297,w=0.48983561930149894,x=3.639550295648638 color=purple,shape=circle,flag=0,i=92833,u=0.933956065069158,v=0.7444615049007317,w=0.49051910849701874,x=5.359581909913964 color=red,shape=square,flag=0,i=92842,u=0.9163350445516149,v=0.0693224312097972,w=0.5353111211040978,x=5.06624745150635 color=purple,shape=circle,flag=0,i=92852,u=0.19509610173714598,v=0.8963782829333146,w=0.49562647480060795,x=4.757839412385918 color=yellow,shape=square,flag=1,i=92865,u=0.9653441843366023,v=0.6814992311554665,w=0.48607508128545984,x=5.242837461923397 color=red,shape=circle,flag=1,i=92879,u=0.2989184007375316,v=0.20499177748267272,w=0.47599987191778625,x=5.801420620548199 color=blue,shape=triangle,flag=1,i=92880,u=0.7574828586453414,v=0.4703249280658751,w=0.5161843621984696,x=5.7918408385145 color=yellow,shape=square,flag=1,i=92886,u=0.03437818736756382,v=0.7542842790682457,w=0.4851924034983134,x=5.316392358603744 color=red,shape=square,flag=0,i=92894,u=0.5259715974448427,v=0.6676927167048409,w=0.5374419000570985,x=3.117727175798819 color=yellow,shape=square,flag=1,i=92907,u=0.8941569514930652,v=0.09136754623771648,w=0.4854992788549717,x=5.9287181478082935 color=red,shape=circle,flag=0,i=92926,u=0.4571281201653624,v=0.3640667092811309,w=0.4845875076376031,x=6.0338208463432865 color=blue,shape=square,flag=1,i=92951,u=0.8027753059592647,v=0.9522259177922886,w=0.4951835502591678,x=5.257062426736476 color=red,shape=triangle,flag=0,i=92957,u=0.02852601873387428,v=0.40192847564997536,w=0.5261071981010705,x=4.565911708491163 color=green,shape=triangle,flag=0,i=92962,u=0.9665394439249344,v=0.2504479751848746,w=0.529951697558247,x=3.149697511119832 color=red,shape=square,flag=0,i=92971,u=0.5392918163547559,v=0.67779843613693,w=0.5248689331932467,x=6.669369791867976 color=red,shape=triangle,flag=0,i=92978,u=0.9508062326874523,v=0.03555208804734766,w=0.5144286948493904,x=4.0898018115026575 color=orange,shape=triangle,flag=1,i=92984,u=0.07633389276796809,v=0.445759093824172,w=0.49283755242261584,x=4.563217539559333 color=yellow,shape=square,flag=1,i=92994,u=0.9013019685248668,v=0.5813894564487491,w=0.4835026958147206,x=4.811509040226049 color=green,shape=circle,flag=0,i=92996,u=0.14622635812306606,v=0.8756168106429231,w=0.49747785768357394,x=3.9194806776713165 color=blue,shape=square,flag=1,i=93001,u=0.6997340636540766,v=0.2330670364480757,w=0.49690507255975425,x=2.9551172908143335 color=red,shape=square,flag=0,i=93009,u=0.8505020593786509,v=0.7804319053229719,w=0.5288208989296913,x=5.203149388234519 color=red,shape=circle,flag=0,i=93015,u=0.2906422110687059,v=0.19856199376085376,w=0.49696495402199636,x=4.402764098571768 color=red,shape=circle,flag=0,i=93017,u=0.3839105921853829,v=0.39272548180902345,w=0.5041956956711864,x=4.237576891218751 color=green,shape=square,flag=0,i=93042,u=0.7623626386073344,v=0.0996208726354616,w=0.5183905784919866,x=5.810487712022876 color=green,shape=square,flag=0,i=93044,u=0.4965074040960592,v=0.11795140763996548,w=0.5230714792430993,x=6.727380670166152 color=red,shape=circle,flag=0,i=93062,u=0.8513884070513233,v=0.8675652973774632,w=0.4993418892074519,x=5.146272663977379 color=red,shape=triangle,flag=0,i=93094,u=0.25520808229759373,v=0.7870163214307724,w=0.4955130665205509,x=5.165412775005804 color=red,shape=square,flag=0,i=93108,u=0.9643936510115555,v=0.4734974290131616,w=0.5274669502661687,x=5.282533997276936 color=red,shape=square,flag=0,i=93123,u=0.8222251004216543,v=0.9749139546679646,w=0.5205783559126494,x=3.84769168143684 color=red,shape=square,flag=0,i=93124,u=0.8662887556479304,v=0.5862258230484788,w=0.5209048840653713,x=5.518343672215752 color=orange,shape=square,flag=0,i=93128,u=0.5059794215688194,v=0.4369215031571725,w=0.4891070507778887,x=6.015340178717828 color=yellow,shape=square,flag=1,i=93135,u=0.2312012161150525,v=0.5795106123362668,w=0.49039908385128095,x=3.853333744017356 color=red,shape=square,flag=1,i=93143,u=0.3541430883400659,v=0.02262336757086958,w=0.5130678711987102,x=6.024604807210472 color=red,shape=triangle,flag=0,i=93151,u=0.44121314725292793,v=0.9439416972289323,w=0.5032953044014319,x=3.8331430269314573 color=blue,shape=circle,flag=0,i=93161,u=0.6165234627284528,v=0.7552642230512452,w=0.4883359791673761,x=3.2367430762645752 color=red,shape=square,flag=0,i=93168,u=0.11409431369441736,v=0.7569309648297614,w=0.5175339791669048,x=5.785829205432354 color=blue,shape=square,flag=0,i=93173,u=0.6540565113170111,v=0.7201095564252947,w=0.4832297478890186,x=6.062736184419772 color=green,shape=square,flag=1,i=93175,u=0.8974314194464692,v=0.8349160188793906,w=0.5125667527740619,x=6.728679564471983 color=yellow,shape=square,flag=1,i=93183,u=0.4937187266731211,v=0.8436237722811973,w=0.4903840434805118,x=4.264969466944225 color=blue,shape=square,flag=0,i=93190,u=0.9766163480003753,v=0.5268862063863686,w=0.4765947594358578,x=6.745225341428919 color=blue,shape=triangle,flag=1,i=93213,u=0.11907254956563906,v=0.8144139418586077,w=0.5079494483200321,x=4.676249224493708 color=yellow,shape=triangle,flag=1,i=93214,u=0.33103726921483967,v=0.9616065799366738,w=0.4899165036528938,x=5.134708601742912 color=green,shape=triangle,flag=0,i=93215,u=0.37710680288805665,v=0.1566898063975043,w=0.5163657815354505,x=6.064064740413205 color=green,shape=triangle,flag=0,i=93229,u=0.0013258871306677245,v=0.5798172276769943,w=0.5138419019643939,x=6.122818515520134 color=red,shape=square,flag=1,i=93230,u=0.8275992424509893,v=0.39872438964098533,w=0.5330883620249358,x=4.968673737934752 color=blue,shape=circle,flag=0,i=93254,u=0.7384732397492123,v=0.13190215454573573,w=0.48280945124405006,x=4.992524345138505 color=red,shape=triangle,flag=0,i=93256,u=0.9865530869255993,v=0.5743289208964387,w=0.49140389376624477,x=5.543740809426006 color=red,shape=square,flag=0,i=93271,u=0.4443044458467864,v=0.015610202954379648,w=0.5389352125188843,x=3.143567386481036 color=red,shape=triangle,flag=0,i=93284,u=0.6928566123391451,v=0.38269886332409164,w=0.4935787951216088,x=3.824109249591025 color=yellow,shape=triangle,flag=1,i=93289,u=0.06577524528643552,v=0.728178454196101,w=0.4937156220549639,x=4.854591083166828 color=orange,shape=square,flag=1,i=93291,u=0.5944176543007182,v=0.17744449786454086,w=0.49262281749172077,x=3.1548117990710653 color=red,shape=square,flag=0,i=93294,u=0.060123683254037275,v=0.7336514016462937,w=0.5343524865320674,x=3.33763544917446 color=red,shape=circle,flag=1,i=93313,u=0.9426343485223739,v=0.9337632293605146,w=0.49172331416952686,x=5.852198581267326 color=red,shape=triangle,flag=0,i=93321,u=0.6469324887469351,v=0.9870276206294317,w=0.494198111917428,x=4.9216750513143195 color=red,shape=square,flag=1,i=93341,u=0.9012516845235167,v=0.3343117410561025,w=0.5505884613347477,x=2.6723750372674187 color=purple,shape=circle,flag=0,i=93343,u=0.45490256047283373,v=0.09341179841698799,w=0.5075655467130734,x=3.6904298527934998 color=yellow,shape=square,flag=1,i=93345,u=0.6234008496744187,v=0.9050961984801064,w=0.4881886254730515,x=4.1532052120224 color=red,shape=square,flag=1,i=93348,u=0.43769972149913183,v=0.30241245777007375,w=0.5476086702138897,x=5.6874062529006 color=green,shape=square,flag=1,i=93357,u=0.4797820346792012,v=0.9257894695131084,w=0.5133701095281766,x=4.262304435220472 color=red,shape=square,flag=1,i=93368,u=0.8921223557391114,v=0.8833200555987885,w=0.5437774224849312,x=3.698668134727517 color=purple,shape=triangle,flag=0,i=93373,u=0.3967550710841131,v=0.8773985303929602,w=0.5101006115433356,x=5.833640908762368 color=green,shape=square,flag=0,i=93389,u=0.04951293420840053,v=0.625564248733943,w=0.5101249581630469,x=4.204217702244588 color=green,shape=circle,flag=0,i=93390,u=0.04960840913639242,v=0.7509652156689688,w=0.4981353201164877,x=5.837736020714733 color=red,shape=triangle,flag=1,i=93408,u=0.9719968115768202,v=0.5533383291375743,w=0.4853573356235901,x=2.47556385529334 color=green,shape=square,flag=0,i=93419,u=0.07862983651361821,v=0.9726746956569318,w=0.506618710198194,x=4.230466529238665 color=yellow,shape=square,flag=1,i=93422,u=0.7707399302971367,v=0.74454757636542,w=0.49026468607370105,x=4.905992608161124 color=blue,shape=square,flag=1,i=93430,u=0.4776634860537742,v=0.15008982307836605,w=0.46962613311952284,x=3.684577760467564 color=red,shape=triangle,flag=0,i=93462,u=0.16949647933386958,v=0.5500932564894656,w=0.48993496095662503,x=7.820293074733988 color=orange,shape=triangle,flag=1,i=93471,u=0.3317570325318646,v=0.8874313110698134,w=0.4917960233719517,x=6.150180241447093 color=blue,shape=circle,flag=1,i=93474,u=0.7951874520684338,v=0.10991976813353188,w=0.46246243465321546,x=5.312471106905913 color=blue,shape=circle,flag=1,i=93483,u=0.19819444535883923,v=0.9650442796073642,w=0.45960864116555084,x=5.885303740852502 color=green,shape=circle,flag=1,i=93489,u=0.7946899755101324,v=0.7062447187970816,w=0.5041569797892488,x=6.635187739927555 color=yellow,shape=square,flag=1,i=93492,u=0.1391217816721203,v=0.3490258416387182,w=0.5058287137137161,x=4.376778666894332 color=yellow,shape=triangle,flag=1,i=93493,u=0.2869046503640855,v=0.8991814710011304,w=0.49178644118689196,x=5.005051283145076 color=orange,shape=circle,flag=1,i=93495,u=0.06123132666421649,v=0.2821051915517929,w=0.4928871506359694,x=3.860615227561887 color=red,shape=square,flag=0,i=93501,u=0.9804810165190108,v=0.9575533653990974,w=0.551511309670641,x=4.909064942581761 color=yellow,shape=square,flag=0,i=93510,u=0.3870469742262176,v=0.7395313029925318,w=0.5143245997387486,x=3.8823841202648333 color=yellow,shape=triangle,flag=1,i=93512,u=0.3551782043885905,v=0.3860661616455179,w=0.4898839563251213,x=6.309612880605467 color=red,shape=triangle,flag=0,i=93523,u=0.31019402808218133,v=0.0017066744945283263,w=0.48718463296886166,x=5.366521614930793 color=yellow,shape=triangle,flag=1,i=93532,u=0.6734190129695646,v=0.8127365178402746,w=0.4877103797644284,x=4.286242165738341 color=blue,shape=triangle,flag=0,i=93539,u=0.0776556252320888,v=0.5263248088118108,w=0.5069126298706793,x=3.464696010612767 color=orange,shape=circle,flag=1,i=93545,u=0.9800645989862569,v=0.3320947616535743,w=0.4849232347773755,x=6.7351973771244 color=purple,shape=circle,flag=0,i=93553,u=0.6303209046293548,v=0.9760157836122396,w=0.5106195949566945,x=5.124970200047329 color=red,shape=circle,flag=0,i=93565,u=0.7026920687017486,v=0.6369658130150313,w=0.47290967661829403,x=4.801407443392416 color=red,shape=circle,flag=0,i=93574,u=0.6028234204669851,v=0.5940159567370489,w=0.4747189259116316,x=6.33256070968014 color=purple,shape=square,flag=0,i=93595,u=0.846258015505779,v=0.6219819168177243,w=0.5101388644661239,x=6.214315476041591 color=green,shape=circle,flag=0,i=93600,u=0.5670351172290983,v=0.7525719360010829,w=0.5151070091575891,x=5.194525795959978 color=red,shape=triangle,flag=0,i=93622,u=0.8397793180453716,v=0.2298114067470377,w=0.5042924065590354,x=4.450936896369874 color=red,shape=square,flag=0,i=93628,u=0.3764132629098499,v=0.2061263831967045,w=0.5556804473939273,x=7.086494163900947 color=red,shape=triangle,flag=1,i=93630,u=0.8000515157591985,v=0.3299830905077069,w=0.5003150965773266,x=5.056555067066446 color=yellow,shape=triangle,flag=1,i=93641,u=0.2852969801675491,v=0.7251859514901501,w=0.4859277604790131,x=5.6898535468645655 color=blue,shape=circle,flag=0,i=93675,u=0.6593652182186537,v=0.4840409484505477,w=0.47220631400727414,x=6.338461158631241 color=blue,shape=square,flag=1,i=93680,u=0.5004081971443053,v=0.39590146186375463,w=0.48578090209402663,x=6.849620799402179 color=purple,shape=square,flag=0,i=93721,u=0.7119956695985707,v=0.9510172307531325,w=0.5118257462801897,x=5.5848143476602985 color=green,shape=square,flag=1,i=93723,u=0.3387637382868649,v=0.409859465673577,w=0.5032410769749635,x=5.48676071013304 color=yellow,shape=square,flag=1,i=93748,u=0.419789310541153,v=0.2712707372716193,w=0.523300517369533,x=5.435398027595331 color=orange,shape=triangle,flag=0,i=93751,u=0.7576589887629124,v=0.13341827054829603,w=0.49161736806866035,x=6.243172713132708 color=red,shape=square,flag=0,i=93759,u=0.5739837642797534,v=0.11257651047118522,w=0.551379593054145,x=3.073780043803366 color=purple,shape=square,flag=0,i=93765,u=0.88450672427772,v=0.7074934904557063,w=0.5149872326094626,x=5.10564513026127 color=red,shape=triangle,flag=0,i=93768,u=0.14490986690222107,v=0.6264602380089783,w=0.5052576483618616,x=5.455976673270964 color=yellow,shape=square,flag=1,i=93769,u=0.6925053131313421,v=0.0590393306122966,w=0.5126015924600923,x=2.2972082930216287 color=purple,shape=square,flag=0,i=93781,u=0.6769527169521316,v=0.15017489841352472,w=0.5149308401611511,x=5.15973196698775 color=red,shape=triangle,flag=0,i=93785,u=0.6820969607290105,v=0.9692933367083294,w=0.49418514046151085,x=5.244448761021533 color=yellow,shape=circle,flag=1,i=93799,u=0.19250341230696455,v=0.8914620645317418,w=0.4759772558860603,x=4.397251919348142 color=red,shape=square,flag=1,i=93828,u=0.4843819007850958,v=0.21359464813149265,w=0.560814452111647,x=5.430842361999297 color=yellow,shape=circle,flag=1,i=93851,u=0.4024019516054841,v=0.1825374420345245,w=0.48456018586205823,x=3.578853310866885 color=red,shape=triangle,flag=0,i=93852,u=0.11952950915222171,v=0.6185272814895332,w=0.49741882875022647,x=5.0121198411566334 color=blue,shape=triangle,flag=1,i=93859,u=0.09029863080652811,v=0.22567055830278748,w=0.48893493169194147,x=6.446439246029592 color=orange,shape=triangle,flag=0,i=93870,u=0.8259861912431266,v=0.9343182166720388,w=0.4929060477123214,x=4.995155582067377 color=red,shape=square,flag=0,i=93871,u=0.8949022645096748,v=0.6167442271717923,w=0.5537527502067653,x=6.7191312344797725 color=red,shape=triangle,flag=0,i=93875,u=0.18506301278734083,v=0.25312152583462066,w=0.4956811843542052,x=7.107063398379303 color=orange,shape=square,flag=1,i=93877,u=0.6146269026026114,v=0.9831570446610254,w=0.48068478651677626,x=2.2631522425725774 color=red,shape=square,flag=0,i=93879,u=0.7123353951988787,v=0.8043752849371905,w=0.5573239389293855,x=6.910626363495999 color=blue,shape=circle,flag=0,i=93880,u=0.6204195601559785,v=0.640348104956813,w=0.47812898788824953,x=4.344053549229683 color=blue,shape=circle,flag=1,i=93884,u=0.23502896721065203,v=0.19105574636443756,w=0.475404629082949,x=4.94288997758962 color=red,shape=square,flag=0,i=93887,u=0.9981209646945113,v=0.006068840188553359,w=0.5529009750438596,x=4.056257971130269 color=yellow,shape=circle,flag=0,i=93898,u=0.9565614763131942,v=0.02969877386503017,w=0.49133615993289326,x=4.519062466134162 color=orange,shape=square,flag=0,i=93901,u=0.2999452881728999,v=0.7373598643188187,w=0.47695222134422094,x=4.2081548632214245 color=red,shape=square,flag=0,i=93917,u=0.6648739426025233,v=0.7120710767117031,w=0.5479377375551202,x=2.3356981534561068 color=red,shape=square,flag=1,i=93928,u=0.9732214443819778,v=0.3973479454498102,w=0.5508834309603914,x=6.523232212249323 color=yellow,shape=circle,flag=1,i=93940,u=0.5618903283784817,v=0.8414430025793512,w=0.48804353012559665,x=3.9904572853451654 color=red,shape=triangle,flag=0,i=93955,u=0.0011440315528401523,v=0.6207181938203082,w=0.5060629786876807,x=4.727110155278569 color=red,shape=triangle,flag=1,i=93956,u=0.5074579736789474,v=0.3305676691911855,w=0.5025715037410848,x=4.271352606640998 color=green,shape=square,flag=0,i=93958,u=0.6079825212562244,v=0.5575270220373377,w=0.5098082205063277,x=4.61681197798782 color=red,shape=circle,flag=0,i=93962,u=0.40055818460746717,v=0.39910862230813293,w=0.4905404411620984,x=6.0603024799097005 color=green,shape=triangle,flag=1,i=93987,u=0.5454807147881016,v=0.6207105676173871,w=0.5225719151339943,x=4.069721679825503 color=red,shape=circle,flag=1,i=93992,u=0.2763361078610522,v=0.2666879169300569,w=0.4917675415517746,x=5.579288808426948 color=green,shape=triangle,flag=0,i=94000,u=0.596867165023715,v=0.3143330563356329,w=0.5176841286592171,x=5.369235743300724 color=blue,shape=square,flag=0,i=94020,u=0.5756750119027304,v=0.7597294424669012,w=0.47363668336805564,x=5.6956721237176 color=red,shape=triangle,flag=0,i=94021,u=0.019665959645606135,v=0.709096231096199,w=0.5132178431121155,x=5.7815869865312886 color=red,shape=square,flag=0,i=94035,u=0.06202231884381981,v=0.45881411578088305,w=0.5430055483069299,x=4.5312835409983565 color=purple,shape=triangle,flag=0,i=94056,u=0.7333756860381885,v=0.4355040438341987,w=0.5037252999182574,x=4.207334203288932 color=red,shape=square,flag=1,i=94057,u=0.8870712075654925,v=0.3742052239190763,w=0.5367893127742382,x=4.973851642082246 color=red,shape=square,flag=1,i=94062,u=0.036237343693436785,v=0.1045713876831671,w=0.5298576710817157,x=5.13455908393862 color=green,shape=square,flag=0,i=94065,u=0.4585932299592197,v=0.12564001882630038,w=0.504402442320757,x=5.331034089536822 color=purple,shape=square,flag=0,i=94068,u=0.5513014169727752,v=0.5718537966970478,w=0.5060666646311373,x=5.393288486858334 color=red,shape=square,flag=1,i=94071,u=0.08747924241901106,v=0.44693950378812997,w=0.5288899014580909,x=3.1801187710324945 color=red,shape=square,flag=0,i=94074,u=0.40837336355933873,v=0.7289826885634818,w=0.5222326650165192,x=5.709660083354817 color=red,shape=square,flag=1,i=94087,u=0.05638885574133767,v=0.7306385271934962,w=0.5210498318999434,x=5.969087548189066 color=orange,shape=circle,flag=1,i=94089,u=0.27898512998075076,v=0.2584110932734265,w=0.4721934103684907,x=5.513768608251465 color=red,shape=triangle,flag=0,i=94090,u=0.011579423006631506,v=0.1461924744427231,w=0.50680797233544,x=5.392685691328301 color=green,shape=square,flag=0,i=94100,u=0.037726806682094716,v=0.23709186351754974,w=0.5041152111424824,x=6.484096787948876 color=red,shape=square,flag=0,i=94112,u=0.7199989054206615,v=0.991854573709443,w=0.5113764101595197,x=4.6865206360636575 color=blue,shape=triangle,flag=1,i=94114,u=0.7382669242389647,v=0.7462570727414071,w=0.4876544853162869,x=5.172390184290637 color=purple,shape=triangle,flag=0,i=94117,u=0.4330002456835155,v=0.036183005402333435,w=0.5029683977003918,x=2.9789436077830285 color=blue,shape=triangle,flag=1,i=94119,u=0.1617402064868817,v=0.8062815967450566,w=0.49255678594325925,x=6.74287289463116 color=green,shape=triangle,flag=0,i=94123,u=0.1566992041830444,v=0.6502079277615944,w=0.503984894552716,x=7.484419265837637 color=red,shape=circle,flag=1,i=94130,u=0.15025294659968402,v=0.1826767485274198,w=0.49834962988783793,x=4.395734848632275 color=yellow,shape=circle,flag=1,i=94140,u=0.316070340832189,v=0.7101629932380786,w=0.48915255791936957,x=4.2400283270050565 color=purple,shape=triangle,flag=0,i=94172,u=0.7130775460451007,v=0.45847194779652833,w=0.5000733607237531,x=6.380990883251704 color=red,shape=circle,flag=0,i=94222,u=0.4801940809555969,v=0.38905265587066573,w=0.51272480213867,x=5.0973318023038905 color=green,shape=circle,flag=0,i=94244,u=0.4584926300361336,v=0.5870594531146602,w=0.4988618595197844,x=4.738058113092706 color=red,shape=square,flag=0,i=94247,u=0.8644573371403343,v=0.20775632350917972,w=0.49001702979812234,x=4.882984810120678 color=red,shape=square,flag=0,i=94258,u=0.10974848478001653,v=0.9238792277853174,w=0.4931964816545601,x=5.005871005846089 color=purple,shape=circle,flag=0,i=94260,u=0.03026821410397551,v=0.6601671837266547,w=0.5013582146221717,x=5.825536992273702 color=red,shape=circle,flag=1,i=94265,u=0.8952216177780481,v=0.8090882896574163,w=0.5089747905882614,x=4.778298116541301 color=red,shape=triangle,flag=0,i=94277,u=0.007709963688652177,v=0.9029200616419227,w=0.4990300005410127,x=5.545512050968591 color=blue,shape=circle,flag=0,i=94285,u=0.24574478706342118,v=0.6679910258383416,w=0.4916341120587314,x=6.7966231451877706 color=red,shape=square,flag=0,i=94288,u=0.28309302811729564,v=0.5085532188072315,w=0.49135330990857284,x=4.361399595396993 color=red,shape=circle,flag=1,i=94292,u=0.6568717051446402,v=0.6902297122905847,w=0.5089085375512069,x=2.7577249665674337 color=yellow,shape=triangle,flag=1,i=94296,u=0.6370176934677825,v=0.614556634906679,w=0.4967281062437877,x=4.90842228979405 color=red,shape=triangle,flag=0,i=94297,u=0.6390569892003273,v=0.2800883357076729,w=0.4996117534180357,x=2.84246196222414 color=green,shape=triangle,flag=0,i=94302,u=0.18746119677416706,v=0.3855462437973667,w=0.5112384808411182,x=6.331189281337317 color=yellow,shape=square,flag=1,i=94309,u=0.8866337057460133,v=0.6189719844623301,w=0.5183884097335458,x=5.959968983741753 color=green,shape=triangle,flag=0,i=94313,u=0.6039146830681794,v=0.6591951564269052,w=0.5069562547481516,x=5.426924829725192 color=red,shape=circle,flag=0,i=94328,u=0.1178044938851679,v=0.09765788832777922,w=0.5096548007181898,x=6.162578475662966 color=red,shape=triangle,flag=0,i=94331,u=0.15621371120778282,v=0.754212713361215,w=0.5096398159401533,x=3.6887648385047043 color=red,shape=triangle,flag=1,i=94357,u=0.2996787317674632,v=0.7691044755514256,w=0.5058095516173593,x=5.827341785600333 color=red,shape=square,flag=0,i=94366,u=0.31608323212142986,v=0.8715833046771758,w=0.4978348162138525,x=5.553252896036036 color=red,shape=triangle,flag=1,i=94367,u=0.6662377473177329,v=0.4702165198335524,w=0.5051974170750035,x=5.754693755771456 color=red,shape=circle,flag=1,i=94371,u=0.8294280325421534,v=0.8606920580175302,w=0.5037941657003376,x=5.366318775628849 color=green,shape=square,flag=0,i=94374,u=0.04120083857891943,v=0.7819031687459034,w=0.5068380006622194,x=5.3211837250040235 color=yellow,shape=triangle,flag=1,i=94377,u=0.561842232414588,v=0.33463441831305163,w=0.5062941803470954,x=7.047894151343674 color=red,shape=square,flag=0,i=94384,u=0.15092231087778962,v=0.9340875197091294,w=0.5000959746053216,x=5.449726038865738 color=green,shape=circle,flag=0,i=94390,u=0.7445986819096515,v=0.5103769969234335,w=0.4899875928840483,x=4.926734628338052 color=red,shape=triangle,flag=0,i=94424,u=0.22017046612119995,v=0.8742365917352823,w=0.5006016387170509,x=4.335172534725971 color=purple,shape=triangle,flag=0,i=94427,u=0.9935914290043147,v=0.9342657400938085,w=0.5118327447890746,x=2.0134488376685247 color=red,shape=square,flag=0,i=94442,u=0.34365020022019244,v=0.9326683227116795,w=0.49537084356699923,x=3.95370253836643 color=red,shape=square,flag=1,i=94443,u=0.04794827187476092,v=0.8019147552612818,w=0.49057813770779696,x=2.8574798883721173 color=red,shape=square,flag=1,i=94453,u=0.3054788812346224,v=0.24512087312543007,w=0.48799474653991864,x=5.555475461380162 color=red,shape=square,flag=0,i=94481,u=0.4840969077705247,v=0.5255163652043569,w=0.48227193978663613,x=5.145849918594299 color=red,shape=circle,flag=1,i=94497,u=0.8480077230984338,v=0.9312751854302335,w=0.4967372515496152,x=4.124199971516984 color=yellow,shape=circle,flag=0,i=94534,u=0.38861816691240514,v=0.7567099874157627,w=0.4852223209453526,x=4.538396661892992 color=yellow,shape=triangle,flag=0,i=94538,u=0.2672799595387756,v=0.10443191846080979,w=0.5073074570120953,x=6.346063034361737 color=yellow,shape=circle,flag=1,i=94552,u=0.1712882335567838,v=0.3259475088295717,w=0.482824218920368,x=3.291686965324202 color=green,shape=square,flag=0,i=94567,u=0.0038661826908737984,v=0.2492595243587501,w=0.5011076376431046,x=6.351171996193123 color=green,shape=triangle,flag=1,i=94590,u=0.07343742625437688,v=0.23343054548193543,w=0.5037820674281168,x=4.89002956905163 color=blue,shape=triangle,flag=0,i=94607,u=0.6631920507557296,v=0.4369451571175079,w=0.4988225129478721,x=6.472272684702357 color=red,shape=triangle,flag=0,i=94610,u=0.544646967828129,v=0.20310412230863117,w=0.5140842686550952,x=5.518515038283496 color=yellow,shape=square,flag=0,i=94631,u=0.6131922881261986,v=0.8829452805834902,w=0.5402682177789455,x=2.8697984248805546 color=red,shape=triangle,flag=0,i=94649,u=0.37680586149507656,v=0.531873848826147,w=0.5164075447477771,x=3.18077524958789 color=blue,shape=circle,flag=0,i=94657,u=0.6856076866129293,v=0.7529799784201368,w=0.48531361009112406,x=5.186956673568379 color=red,shape=square,flag=1,i=94658,u=0.1314205100276179,v=0.77631958671169,w=0.4786633165232282,x=6.530427842311236 color=purple,shape=circle,flag=0,i=94686,u=0.283186607515193,v=0.9269615978919837,w=0.4950964993082637,x=5.070609618417811 color=red,shape=square,flag=0,i=94689,u=0.30882279665974666,v=0.39737758625652664,w=0.48539674823193363,x=6.196100423711762 color=red,shape=circle,flag=0,i=94695,u=0.5206530070612057,v=0.48652278324879217,w=0.5122921729017607,x=5.033313205622764 color=purple,shape=square,flag=0,i=94705,u=0.8761909968441094,v=0.7935235409462378,w=0.49173438927674956,x=3.63647136539369 color=red,shape=circle,flag=0,i=94713,u=0.3137063900928977,v=0.366181626284267,w=0.49932326037455843,x=5.24781522779401 color=purple,shape=circle,flag=0,i=94717,u=0.5675782394285436,v=0.9664918468422924,w=0.4928726435866197,x=2.924947001995275 color=red,shape=square,flag=1,i=94724,u=0.7903522556392034,v=0.31382994092682914,w=0.48810859660059247,x=5.418578189391887 color=orange,shape=triangle,flag=1,i=94728,u=0.6147952572304167,v=0.8124737047060224,w=0.5055720258945624,x=6.652973421501709 color=red,shape=circle,flag=1,i=94733,u=0.8994797966638701,v=0.9983461696475617,w=0.4959427260304219,x=4.432052402667912 color=red,shape=triangle,flag=0,i=94746,u=0.8794538103662065,v=0.33466829860805336,w=0.5223415478465803,x=5.713245666496277 color=blue,shape=square,flag=1,i=94773,u=0.8336971507856067,v=0.663403839465149,w=0.5006522631854345,x=5.458211184283616 color=red,shape=triangle,flag=1,i=94776,u=0.09071028397115666,v=0.8967033302080704,w=0.5186715318445669,x=6.989417880277936 color=red,shape=circle,flag=0,i=94779,u=0.5823372950326793,v=0.6740514019239459,w=0.5064685529523256,x=5.331017166908641 color=red,shape=square,flag=1,i=94784,u=0.30371275947244813,v=0.5034727917273265,w=0.481131269675275,x=4.962293804099515 color=yellow,shape=triangle,flag=1,i=94790,u=0.3322725154831089,v=0.8823377013102264,w=0.5009485797470198,x=5.779120363231121 color=blue,shape=square,flag=1,i=94804,u=0.9296809251812996,v=0.12257445659613919,w=0.498561566168998,x=5.121694224083096 color=red,shape=triangle,flag=1,i=94813,u=0.21382240047675283,v=0.013747014227901588,w=0.5168355835879442,x=4.559371640094053 color=red,shape=circle,flag=0,i=94821,u=0.5427294680901177,v=0.5846906690312902,w=0.5151429523730308,x=4.540204950104281 color=purple,shape=square,flag=0,i=94836,u=0.9589364512377747,v=0.8992749036434428,w=0.49913083145091747,x=2.991314573147467 color=red,shape=square,flag=0,i=94841,u=0.5453932721227068,v=0.1170152774877814,w=0.4889908334563191,x=5.709273342310534 color=red,shape=triangle,flag=0,i=94843,u=0.493262149490416,v=0.011832543612560475,w=0.5211706349493206,x=6.751266943293774 color=red,shape=triangle,flag=0,i=94883,u=0.08579176463726834,v=0.9462601501846178,w=0.5156905411971057,x=8.317120491404644 color=red,shape=triangle,flag=1,i=94893,u=0.08462118503806337,v=0.5031727971245549,w=0.5201656177638505,x=3.994941407188952 color=blue,shape=triangle,flag=1,i=94897,u=0.3491300124700786,v=0.6730402529320697,w=0.5083649532317387,x=5.543764417034228 color=blue,shape=circle,flag=0,i=94902,u=0.40794873898572936,v=0.7878724521540721,w=0.4745816531957584,x=5.806567795021444 color=blue,shape=square,flag=1,i=94904,u=0.8703689730540912,v=0.06863351477175472,w=0.5031774300991061,x=5.287292351512755 color=blue,shape=triangle,flag=0,i=94906,u=0.3522477548518742,v=0.8398156224627885,w=0.5110082619972443,x=4.170139664987736 color=red,shape=square,flag=0,i=94933,u=0.8207051907469852,v=0.6714645520414942,w=0.48801120394288877,x=4.63621338421315 color=green,shape=square,flag=1,i=94937,u=0.3289070354445588,v=0.8292630098024294,w=0.4962475252528494,x=4.862447599534005 color=purple,shape=square,flag=0,i=94957,u=0.20768211872859366,v=0.6499999060660224,w=0.49368674988959443,x=6.494327950599405 color=yellow,shape=square,flag=1,i=94963,u=0.40733279263945354,v=0.3186454624205395,w=0.5382223738809148,x=4.308974276404359 color=green,shape=square,flag=0,i=94969,u=0.03264992823656221,v=0.42486754230411117,w=0.48959948211148785,x=3.1653282971243404 color=red,shape=circle,flag=1,i=94995,u=0.40018494514183234,v=0.3480321407370032,w=0.5246486261630341,x=5.560277002593004 color=red,shape=triangle,flag=0,i=95002,u=0.6855407751847372,v=0.9464659022555953,w=0.5269400607233719,x=4.63468662541698 color=red,shape=circle,flag=0,i=95012,u=0.7224846297526336,v=0.7219864465393859,w=0.5195749900489327,x=4.902925843596016 color=blue,shape=square,flag=0,i=95022,u=0.728288231234988,v=0.5065821144524781,w=0.5039210773062858,x=6.242217985806318 color=orange,shape=square,flag=0,i=95024,u=0.25728281287165866,v=0.20625420973668496,w=0.47709369091696907,x=4.391356923921371 color=blue,shape=square,flag=1,i=95030,u=0.8497378924791577,v=0.8333678484852933,w=0.49752889449149,x=4.707818407401047 color=red,shape=square,flag=1,i=95034,u=0.25533669227738776,v=0.27258380537926363,w=0.48520197325696696,x=6.535404826584711 color=blue,shape=triangle,flag=0,i=95057,u=0.1369196405633063,v=0.6162470540747264,w=0.4981850993726346,x=5.702007281253594 color=green,shape=square,flag=1,i=95068,u=0.9373976679412133,v=0.06035623015974323,w=0.49984563506697693,x=6.004911983193927 color=red,shape=square,flag=0,i=95086,u=0.8837368704356093,v=0.9686455453605962,w=0.4881631668996269,x=4.999466746102727 color=purple,shape=triangle,flag=0,i=95087,u=0.04335295621534607,v=0.9792751193896676,w=0.501766859767471,x=6.6708700239603225 color=red,shape=triangle,flag=0,i=95088,u=0.2649450054099186,v=0.15161228510007507,w=0.5195177264686487,x=6.380042443361127 color=red,shape=square,flag=1,i=95121,u=0.21303014597832648,v=0.7311358637438857,w=0.48754645962691634,x=6.111526162212111 color=blue,shape=square,flag=1,i=95125,u=0.5955700798695953,v=0.8134808776264878,w=0.49339314186848326,x=5.8017966955992195 color=red,shape=triangle,flag=0,i=95141,u=0.29481998221536876,v=0.09137433215243673,w=0.5118901394297206,x=4.355213237069349 color=purple,shape=triangle,flag=0,i=95151,u=0.5897354668458885,v=0.11543551902136306,w=0.5036141198980587,x=7.413682874456235 color=red,shape=circle,flag=0,i=95159,u=0.6580958028021712,v=0.5979317066374599,w=0.522622054598586,x=6.2092608840357855 color=red,shape=triangle,flag=0,i=95174,u=0.2624235602005557,v=0.5925909658759327,w=0.49724034980788917,x=6.124609884272918 color=red,shape=circle,flag=0,i=95178,u=0.5914399755031541,v=0.5898156594042067,w=0.5234331561925322,x=3.421463339154903 color=red,shape=circle,flag=1,i=95183,u=0.4857063606352723,v=0.4390647619053223,w=0.5253408182083623,x=5.963401300829486 color=purple,shape=square,flag=0,i=95215,u=0.9341323936426884,v=0.972813669639962,w=0.5017288605008587,x=5.734994402979431 color=red,shape=triangle,flag=0,i=95216,u=0.07841751130870456,v=0.42060655680140135,w=0.5022107131398774,x=4.6792402972527825 color=blue,shape=square,flag=1,i=95217,u=0.002667137924713292,v=0.5014182755245598,w=0.4880693833559115,x=4.881973194125624 color=red,shape=square,flag=0,i=95220,u=0.412263864780532,v=0.7785638206166626,w=0.48212397564704074,x=4.611284397417477 color=purple,shape=square,flag=0,i=95229,u=0.3624747282603584,v=0.5939038093671826,w=0.49821052158468077,x=4.374313894877282 color=red,shape=square,flag=0,i=95251,u=0.3685822458693424,v=0.5613292278042047,w=0.47839914095991976,x=5.024453624479713 color=purple,shape=square,flag=0,i=95261,u=0.8651707322542452,v=0.8561690535945209,w=0.4993389329792418,x=4.913920786901495 color=red,shape=square,flag=1,i=95263,u=0.7056606241226618,v=0.9131802494473958,w=0.4767798774936042,x=3.279070825509402 color=red,shape=square,flag=0,i=95287,u=0.8890251343676947,v=0.9376401531381994,w=0.4836685892842009,x=3.942407879007797 color=red,shape=square,flag=0,i=95296,u=0.5051401432321563,v=0.14651534990658466,w=0.4871240751226292,x=5.918087358747563 color=red,shape=circle,flag=1,i=95297,u=0.44925183921642853,v=0.5169020729434569,w=0.5366717598225503,x=5.9616844890939475 color=red,shape=triangle,flag=0,i=95313,u=0.6522284708651094,v=0.16923004476845127,w=0.5134734546535809,x=4.905143145646957 color=red,shape=square,flag=0,i=95316,u=0.6892255042303376,v=0.033837867513929476,w=0.4816445312543678,x=6.080410840680348 color=purple,shape=square,flag=0,i=95335,u=0.12447081577623254,v=0.4865239679315827,w=0.49567244611016287,x=4.625897653478866 color=red,shape=circle,flag=0,i=95340,u=0.23803259383291164,v=0.1927099302240184,w=0.5437750683231967,x=3.579218558870553 color=purple,shape=triangle,flag=0,i=95341,u=0.4048454403699504,v=0.007033073257603495,w=0.4925772685601072,x=1.643332528737662 color=red,shape=circle,flag=0,i=95350,u=0.37570136111425056,v=0.4205590285282056,w=0.5436174164147097,x=5.202928530061143 color=red,shape=triangle,flag=0,i=95352,u=0.01809102467202106,v=0.5240977500610657,w=0.5106305766528645,x=6.169422572683959 color=red,shape=triangle,flag=0,i=95362,u=0.597437393156178,v=0.9114017582517434,w=0.5060223311345061,x=5.990425557359262 color=red,shape=square,flag=1,i=95394,u=0.43087387419591494,v=0.7799068618205608,w=0.473510360726394,x=3.9821117889142705 color=red,shape=triangle,flag=0,i=95413,u=0.48645724495841736,v=0.37479955178501734,w=0.5136315068754431,x=2.547267875687577 color=purple,shape=triangle,flag=0,i=95429,u=0.6324607515918962,v=0.9619671858094646,w=0.49282856219274584,x=6.834662683629477 color=red,shape=circle,flag=1,i=95434,u=0.7951595910186059,v=0.7293016881795313,w=0.5422550745559764,x=5.624573389906437 color=red,shape=square,flag=0,i=95441,u=0.8120401678127536,v=0.06334723509015716,w=0.48399060925776144,x=3.8171986500868837 color=red,shape=circle,flag=0,i=95443,u=0.7999996233802388,v=0.8478632472527992,w=0.5419826987461797,x=5.189927429602718 color=green,shape=triangle,flag=0,i=95454,u=0.021820495826963993,v=0.247973120267464,w=0.48863389666214974,x=3.9858728454058965 color=red,shape=triangle,flag=0,i=95455,u=0.5880337984059256,v=0.3979594286222955,w=0.5107003730173946,x=3.9146303503754187 color=red,shape=square,flag=0,i=95489,u=0.38937956844509736,v=0.7439014662120559,w=0.49749690214338643,x=2.08599486568694 color=blue,shape=triangle,flag=1,i=95500,u=0.6723111785672105,v=0.9208224128407376,w=0.5162501058657194,x=3.8836463081731956 color=yellow,shape=square,flag=1,i=95501,u=0.698850017364642,v=0.27440040121581477,w=0.5118851821238122,x=5.329166449998421 color=yellow,shape=square,flag=0,i=95511,u=0.4603948184700003,v=0.49007080527570546,w=0.5114651386198127,x=6.118980676097276 color=orange,shape=circle,flag=0,i=95518,u=0.7677021168866173,v=0.1525069385499992,w=0.4692760523145991,x=3.826875524783335 color=red,shape=square,flag=0,i=95528,u=0.8299728998149455,v=0.5941379319705079,w=0.4883684011509505,x=4.119105391794861 color=red,shape=triangle,flag=0,i=95531,u=0.38633998695999805,v=0.755881127616098,w=0.5224722412362447,x=4.0529339900811685 color=blue,shape=square,flag=0,i=95533,u=0.1706273080172087,v=0.27422112273499943,w=0.49118868750712774,x=4.040895932069326 color=purple,shape=square,flag=0,i=95549,u=0.2933916978683071,v=0.2971101531880507,w=0.5107156672668544,x=4.0783722737591885 color=red,shape=triangle,flag=0,i=95554,u=0.4336516522618147,v=0.36564087249127863,w=0.5231860955089859,x=3.828429839171689 color=red,shape=square,flag=0,i=95556,u=0.8110403312925802,v=0.07422675259198352,w=0.49276361425070986,x=6.291640296267218 color=red,shape=square,flag=0,i=95567,u=0.6298377141604105,v=0.22435450875520302,w=0.49238530491492405,x=4.760177677140182 color=green,shape=circle,flag=0,i=95574,u=0.08723182565571463,v=0.0006094934266722696,w=0.4824320986207452,x=4.071748509925414 color=yellow,shape=square,flag=1,i=95580,u=0.1973977898574082,v=0.9817446192748276,w=0.5082030600746619,x=3.9187500216584232 color=red,shape=circle,flag=0,i=95609,u=0.4768456124311581,v=0.4039576678577314,w=0.5302862787106399,x=6.49732439627864 color=purple,shape=square,flag=0,i=95635,u=0.8111369256022484,v=0.193745686230979,w=0.5013701310782523,x=4.0452536100578085 color=blue,shape=square,flag=0,i=95639,u=0.44854536144294777,v=0.8133097125608071,w=0.49850422530326555,x=5.324877126207013 color=green,shape=triangle,flag=0,i=95652,u=0.42831050632895995,v=0.6025341497610506,w=0.48494414585066087,x=7.223783905266928 color=red,shape=circle,flag=0,i=95653,u=0.05362336509312238,v=-0.043310883828218,w=0.5304203962378913,x=4.934405825487166 color=red,shape=circle,flag=0,i=95654,u=0.4433411320722124,v=0.44825754039189947,w=0.5326836182516868,x=5.776396139848291 color=red,shape=square,flag=0,i=95661,u=0.5918935990633056,v=0.4733480030338092,w=0.48170754885858796,x=3.4317974666052766 color=blue,shape=triangle,flag=0,i=95677,u=0.11758649380606867,v=0.2564395323353277,w=0.5168535618031888,x=2.9460769960805293 color=yellow,shape=square,flag=1,i=95688,u=0.08805025615564177,v=0.8681852991004899,w=0.5066765273061633,x=3.2422160219759273 color=red,shape=square,flag=0,i=95715,u=0.09515556834057048,v=0.2476069131448505,w=0.4694731137835921,x=6.258881681726623 color=purple,shape=square,flag=0,i=95716,u=0.8661051890893713,v=0.2548893019964037,w=0.4961224261867851,x=4.90815280336836 color=red,shape=circle,flag=0,i=95726,u=0.5729003917059892,v=0.48102977701485233,w=0.5190850523208961,x=5.7189671324680305 color=red,shape=square,flag=0,i=95738,u=0.6036878845436557,v=0.519282753397272,w=0.4695051406703007,x=3.8153909034622253 color=red,shape=circle,flag=0,i=95744,u=0.5316089582888708,v=0.5849715421326843,w=0.5227757989885363,x=5.963378791330766 color=blue,shape=square,flag=1,i=95746,u=0.893044466429303,v=0.5614463993752504,w=0.5052916700308168,x=3.988417964607063 color=yellow,shape=circle,flag=1,i=95757,u=0.6434932765584167,v=0.5034054921640212,w=0.4809738855512452,x=4.035531593145203 color=purple,shape=circle,flag=0,i=95764,u=0.501319018852234,v=0.33688514834799477,w=0.4787809380726825,x=3.0898069848448624 color=purple,shape=triangle,flag=0,i=95776,u=0.38084018073898485,v=0.580626025410974,w=0.5018086361771342,x=6.27371689970268 color=purple,shape=triangle,flag=0,i=95809,u=0.7895510446195199,v=0.8017870470521001,w=0.5058125219353772,x=4.608350393771451 color=red,shape=square,flag=0,i=95855,u=0.6708696653307745,v=0.864290005125367,w=0.46002377498082186,x=4.371903851161853 color=blue,shape=circle,flag=0,i=95856,u=0.48468979737859186,v=0.7050802087044364,w=0.4903873948315253,x=4.310859903954784 color=blue,shape=circle,flag=0,i=95869,u=0.433699314724719,v=0.9815830528860979,w=0.4859165997731851,x=4.249701542758067 color=blue,shape=triangle,flag=1,i=95876,u=0.7607275569966165,v=0.3444373072309326,w=0.5176824027954439,x=5.178559864617614 color=yellow,shape=square,flag=1,i=95880,u=0.2708214888936329,v=0.33893901007098237,w=0.5071423755655081,x=3.878089050267082 color=green,shape=square,flag=0,i=95913,u=0.977812714071183,v=0.8213216550332649,w=0.5037895209853568,x=4.501399772902655 color=green,shape=triangle,flag=0,i=95916,u=0.41209521739690724,v=0.009840812423060674,w=0.4923116593995726,x=6.121704104855858 color=yellow,shape=triangle,flag=1,i=95922,u=0.770196523924362,v=0.5366579950148794,w=0.4940098259506026,x=6.450025232982571 color=blue,shape=square,flag=1,i=95933,u=0.4460982583770846,v=0.06284278404643429,w=0.5131543736940538,x=6.5981643517007535 color=red,shape=square,flag=0,i=95959,u=0.9778390717447472,v=0.5267474727962671,w=0.48899476248113577,x=6.986010326962725 color=blue,shape=triangle,flag=1,i=95988,u=0.19822067579147096,v=0.05887446013478115,w=0.5123538284044189,x=5.862640977432053 color=green,shape=triangle,flag=0,i=95999,u=0.2777888980702661,v=0.6036755664651436,w=0.5004330266521184,x=5.594060009477997 color=red,shape=triangle,flag=0,i=96001,u=0.07201289135218536,v=0.9578500735124724,w=0.5024362973163085,x=5.319861055814207 color=red,shape=square,flag=0,i=96022,u=0.4709205322315836,v=0.7937369877489687,w=0.49007862193940366,x=3.973003372311459 color=blue,shape=square,flag=1,i=96035,u=0.4423886625964605,v=0.9366746323015379,w=0.5050051256716289,x=5.313988804185247 color=red,shape=square,flag=1,i=96048,u=0.4573455212892237,v=0.8689836365200174,w=0.5026099292380142,x=4.284593437243346 color=red,shape=triangle,flag=1,i=96071,u=0.7014027677589221,v=0.7050266694844497,w=0.4991756884347118,x=3.9612918655374205 color=yellow,shape=square,flag=1,i=96086,u=0.7833683478375343,v=0.6149748333528218,w=0.49362651600138596,x=5.189911883843258 color=red,shape=square,flag=0,i=96090,u=0.2362815181764243,v=0.08052300595014228,w=0.5064439828465793,x=3.4067046807656305 color=yellow,shape=circle,flag=1,i=96095,u=0.0036354395410326257,v=0.6635853765373362,w=0.48103253822812914,x=5.359085246783725 color=red,shape=triangle,flag=0,i=96121,u=0.3505461523143154,v=0.93233366310048,w=0.5126317356885189,x=4.297395337314128 color=red,shape=circle,flag=0,i=96141,u=0.39597887757686256,v=0.39562748029305544,w=0.5351730203208921,x=3.394427748518069 color=red,shape=square,flag=0,i=96142,u=0.820574896008899,v=0.9178219586117422,w=0.5066322293802394,x=7.0697506748462935 color=green,shape=square,flag=1,i=96146,u=0.4694324766526824,v=0.5658438480255048,w=0.5321410697850847,x=4.106989909501264 color=red,shape=circle,flag=1,i=96159,u=0.5122412779436548,v=0.4638787927655735,w=0.5367372010647821,x=5.637915664281828 color=red,shape=triangle,flag=1,i=96163,u=0.6053873173220439,v=0.7748744349075521,w=0.5063751364943072,x=5.780191564409791 color=red,shape=triangle,flag=0,i=96189,u=0.6799282412050941,v=0.15346921699793092,w=0.495885574165823,x=4.7011577154887645 color=red,shape=square,flag=0,i=96201,u=0.1537994073527562,v=0.9791783796380524,w=0.5080221713445994,x=4.316219815138682 color=red,shape=triangle,flag=0,i=96205,u=0.9853517582765164,v=0.8117688328600086,w=0.49210970081556293,x=4.346809360490263 color=red,shape=circle,flag=0,i=96219,u=0.2540037235882736,v=0.16291780516875548,w=0.5234860327068843,x=2.9306178016011946 color=yellow,shape=triangle,flag=1,i=96220,u=0.04510353065983863,v=0.6982109032332625,w=0.4883775242226292,x=4.088662097165213 color=red,shape=square,flag=0,i=96223,u=0.09402120561917393,v=0.05313157052444151,w=0.5039799968651898,x=4.8771799749006055 color=purple,shape=circle,flag=0,i=96233,u=0.11571093831848556,v=0.5113038026470524,w=0.46862217953527663,x=3.392490400038291 color=red,shape=circle,flag=0,i=96238,u=0.01573142157455376,v=0.0768552496541719,w=0.5217362210575832,x=4.403578027256978 color=red,shape=triangle,flag=0,i=96244,u=0.19524302626749834,v=0.3758656097497919,w=0.4983507551303781,x=2.304522394049828 color=red,shape=triangle,flag=0,i=96250,u=0.8337474618350973,v=0.9600628954017896,w=0.49456350408513333,x=4.8508758297677215 color=red,shape=circle,flag=1,i=96257,u=0.18506914976633337,v=0.15877971707154517,w=0.5236120006634366,x=3.336001097280219 color=green,shape=circle,flag=0,i=96267,u=0.1347991479459697,v=0.4980375318782472,w=0.47939951705788325,x=3.60633618172144 color=red,shape=square,flag=0,i=96277,u=0.03850189729758602,v=0.7178419532250438,w=0.5079281526733028,x=4.5290403972179885 color=yellow,shape=square,flag=1,i=96278,u=0.6454657419549751,v=0.983018108485444,w=0.4774335826811351,x=2.955729927262149 color=yellow,shape=circle,flag=0,i=96314,u=0.8205284107378986,v=0.7083231637415845,w=0.4890166781426609,x=5.225617763479977 color=red,shape=square,flag=1,i=96317,u=0.13741722855999394,v=0.6973181200378114,w=0.5211802110632608,x=3.9668210915973128 color=yellow,shape=triangle,flag=1,i=96320,u=0.5973408278919474,v=0.5730119857753153,w=0.4824021977514047,x=5.592620345137888 color=purple,shape=triangle,flag=0,i=96321,u=0.22122636521068006,v=0.3915798896420922,w=0.5059835132049681,x=5.114537322072974 color=red,shape=square,flag=1,i=96353,u=0.49625834974236394,v=0.26548572878487686,w=0.5209824742084431,x=4.989615126271908 color=red,shape=triangle,flag=0,i=96358,u=0.9531132081452546,v=0.31613044984587446,w=0.496200227805815,x=6.7151425135946745 color=yellow,shape=square,flag=1,i=96359,u=0.8408871035291287,v=0.9755149608180735,w=0.48851094419217744,x=6.0403806170332155 color=blue,shape=circle,flag=1,i=96370,u=0.4256799445593342,v=0.8440931690888698,w=0.48925221027347976,x=4.0988964628309725 color=red,shape=circle,flag=0,i=96374,u=0.5394311155541947,v=0.6206571237155135,w=0.5147480752868391,x=4.942284674972361 color=red,shape=square,flag=1,i=96377,u=0.07817501039392116,v=0.29586063255101147,w=0.5233383643238237,x=5.0987289913082074 color=blue,shape=square,flag=1,i=96387,u=0.8279662404044754,v=0.1336329890718898,w=0.5133205197150905,x=5.412347036816107 color=red,shape=triangle,flag=0,i=96397,u=0.5550176624219795,v=0.3759031486752258,w=0.4910617171658142,x=2.9951560160680053 color=red,shape=triangle,flag=1,i=96431,u=0.3206443033037468,v=0.6609938133553613,w=0.500129219027092,x=4.093189058880722 color=red,shape=square,flag=0,i=96440,u=0.5527743240009251,v=0.5617708584536918,w=0.5064558542785705,x=5.0849946219112825 color=yellow,shape=circle,flag=1,i=96461,u=0.4213770360462241,v=0.5643111647745723,w=0.4911471936490873,x=4.359268750812394 color=red,shape=square,flag=1,i=96462,u=0.9049197708860998,v=0.9754284660267258,w=0.5068111207191822,x=6.069349019779153 color=red,shape=square,flag=1,i=96476,u=0.44075709413911857,v=0.4868365504334653,w=0.5067130449725873,x=4.856440652889357 color=red,shape=circle,flag=1,i=96481,u=0.8671250136807436,v=0.9442368143550283,w=0.5024024616048917,x=6.281369351378448 color=red,shape=circle,flag=1,i=96483,u=0.257923630044134,v=0.20425375031078905,w=0.5022896654545875,x=4.653332394665 color=yellow,shape=triangle,flag=1,i=96492,u=0.9222129750986249,v=0.3148953740017284,w=0.48113731450222064,x=6.9539559011754415 color=blue,shape=square,flag=1,i=96498,u=0.875846620932736,v=0.2886080825394486,w=0.5225328851711897,x=5.641928193172539 color=red,shape=triangle,flag=0,i=96499,u=0.54370234369147,v=0.9830996930683974,w=0.5119538464738257,x=5.3725541404567965 color=purple,shape=square,flag=1,i=96509,u=0.25213949940984015,v=0.5600094467964819,w=0.483611074389497,x=5.463995937804239 color=red,shape=circle,flag=0,i=96513,u=0.5840255152025253,v=0.64379073239883,w=0.5125190766820626,x=4.686287327540726 color=purple,shape=triangle,flag=0,i=96518,u=0.7811323759842613,v=0.7008683738425372,w=0.5121591861656576,x=3.6940357853817924 color=blue,shape=circle,flag=1,i=96534,u=0.763586420854788,v=0.3548512130831012,w=0.48909414385967737,x=4.21153573427312 color=purple,shape=triangle,flag=0,i=96548,u=0.8853360655849348,v=0.21596139123580305,w=0.5094280911754115,x=6.868205543959447 color=red,shape=triangle,flag=0,i=96557,u=0.7072217595654958,v=0.9122544763954878,w=0.5150148516633359,x=5.3407435655052495 color=red,shape=square,flag=0,i=96561,u=0.6271868228292494,v=0.2126169635646109,w=0.5040037335246169,x=6.154218037849257 color=green,shape=triangle,flag=0,i=96599,u=0.5506321480028791,v=0.8625866013557643,w=0.48788637049117073,x=4.358405203753322 color=green,shape=circle,flag=1,i=96602,u=0.4971419875895393,v=0.8477666091538062,w=0.4774357227021727,x=3.363433494675512 color=blue,shape=square,flag=0,i=96605,u=0.09933759395928465,v=0.004100487542805453,w=0.5276495494792367,x=3.832435218383292 color=red,shape=triangle,flag=1,i=96621,u=0.2313996645622367,v=0.16044417338891637,w=0.5081820702418738,x=6.868830432605786 color=purple,shape=square,flag=1,i=96646,u=0.8153799649374639,v=0.37606604371496444,w=0.49495402472012084,x=6.607505990567295 color=red,shape=triangle,flag=0,i=96650,u=0.9573758464230904,v=0.011650017863653161,w=0.5042523373034675,x=6.053236752187001 color=green,shape=circle,flag=1,i=96656,u=0.15301253370395795,v=0.9360480916991148,w=0.47996540675389343,x=4.964909635026444 color=red,shape=circle,flag=0,i=96660,u=0.9339160633706772,v=0.9400747392523728,w=0.5072699914900494,x=5.696583467192387 color=blue,shape=circle,flag=1,i=96674,u=0.6578842880061873,v=0.7430280001393442,w=0.4927840002992643,x=4.933691349038118 color=red,shape=circle,flag=0,i=96681,u=0.9093417723765131,v=0.9312061484621479,w=0.5013956927167295,x=3.968201236086754 color=yellow,shape=triangle,flag=1,i=96688,u=0.5441493781561474,v=0.7088517900510397,w=0.4900280653093751,x=4.315969716960768 color=red,shape=triangle,flag=0,i=96710,u=0.2094719376918206,v=0.6082243970055167,w=0.5159501284164395,x=3.181489653403958 color=blue,shape=triangle,flag=0,i=96713,u=0.21223246933503637,v=0.3103920219698435,w=0.5168260373272008,x=5.880069791255057 color=yellow,shape=triangle,flag=1,i=96721,u=0.33556301493448626,v=0.7304677916147592,w=0.49932965008316815,x=3.8903214671557933 color=yellow,shape=triangle,flag=1,i=96740,u=0.9664443538532672,v=0.5845457292223816,w=0.4968884965550576,x=5.8459770548241 color=red,shape=square,flag=0,i=96766,u=0.22515664670363855,v=0.3233909748386826,w=0.5116507298661361,x=6.398730903199202 color=purple,shape=circle,flag=0,i=96768,u=0.33608049960076525,v=0.6371986348667935,w=0.45349282172603966,x=6.781829725175949 color=green,shape=square,flag=0,i=96774,u=0.2154734180741319,v=0.8781674700172086,w=0.5326455027398711,x=3.936220468122993 color=purple,shape=square,flag=0,i=96782,u=0.27623451642617936,v=0.13894980550912983,w=0.5107294732254406,x=3.0829420270559056 color=blue,shape=square,flag=0,i=96784,u=0.4193489666956077,v=0.10629875093142627,w=0.5317360271949962,x=3.876647954589947 color=blue,shape=triangle,flag=1,i=96796,u=0.41206622235504087,v=0.3603765642834287,w=0.513749246897892,x=4.245544314256821 color=red,shape=triangle,flag=0,i=96797,u=0.8390250766619783,v=0.8204339989162104,w=0.5019774546766443,x=6.234464210198609 color=purple,shape=square,flag=0,i=96801,u=0.1696382894249373,v=0.6615691688116003,w=0.5153534841236239,x=4.335865319920412 color=green,shape=triangle,flag=0,i=96811,u=0.9595897649215346,v=0.5455859308302632,w=0.48839988183493277,x=3.50764881622457 color=red,shape=square,flag=1,i=96812,u=0.6633006211474649,v=0.3924932082381519,w=0.5000987314047961,x=4.524240244136892 color=blue,shape=triangle,flag=0,i=96819,u=0.4213681511663504,v=0.23313744252939783,w=0.5088472157695753,x=4.398928665675311 color=red,shape=square,flag=0,i=96845,u=0.3339797831018281,v=0.2588719544248831,w=0.4954868820621749,x=4.127128968682313 color=red,shape=square,flag=0,i=96848,u=0.07791643009408067,v=0.1560682540432935,w=0.49666969974421393,x=5.572885243477472 color=yellow,shape=square,flag=1,i=96851,u=0.5388018181776875,v=0.5546247073558797,w=0.48064667292004665,x=2.0579684303789714 color=purple,shape=circle,flag=0,i=96870,u=0.5847649579675587,v=0.9875482745532688,w=0.4565858410190943,x=3.797353743957879 color=blue,shape=square,flag=1,i=96875,u=0.9142142223643162,v=0.8731989992783917,w=0.5232963609026355,x=5.931479720806045 color=purple,shape=triangle,flag=0,i=96886,u=0.7620914159993625,v=0.2589179659624974,w=0.5060775126241244,x=5.801846079964444 color=red,shape=circle,flag=1,i=96887,u=0.008915214662668425,v=-0.06271145266677931,w=0.48755793492550203,x=3.5158895775946895 color=purple,shape=square,flag=0,i=96892,u=0.9295795784913928,v=0.5567736910666704,w=0.5116561868187911,x=4.378387402108497 color=orange,shape=circle,flag=1,i=96897,u=0.16818297872450094,v=0.810633088388253,w=0.4675226650638352,x=6.07189029851303 color=yellow,shape=circle,flag=1,i=96901,u=0.2018414695350964,v=0.4057862820377357,w=0.5004512182623366,x=3.0974982927217423 color=red,shape=square,flag=0,i=96903,u=0.9860464850796222,v=0.951976247614596,w=0.5212279100883831,x=8.578089301488708 color=blue,shape=circle,flag=1,i=96915,u=0.006866076456939152,v=0.007289346396799012,w=0.49547388319366714,x=5.884116143801638 color=purple,shape=triangle,flag=0,i=96930,u=0.5055845700264154,v=0.4552677253123145,w=0.5068760828442833,x=6.302386576403815 color=red,shape=triangle,flag=0,i=96934,u=0.9607457187268132,v=0.38616109086537587,w=0.5080702805466717,x=3.9224562048526743 color=red,shape=circle,flag=0,i=96945,u=0.6809384119739392,v=0.6554448624275744,w=0.48081192375711385,x=5.330509785976479 color=red,shape=triangle,flag=1,i=96949,u=0.8436280439405668,v=0.8627029373150187,w=0.5007828226892923,x=5.965284103870897 color=blue,shape=circle,flag=0,i=96953,u=0.09053061144662133,v=0.053288751024586634,w=0.49901702449999247,x=4.566063051710288 color=red,shape=triangle,flag=0,i=96958,u=0.0329567371644508,v=0.48380256164528723,w=0.5054524565225944,x=5.913939544134682 color=blue,shape=square,flag=1,i=96961,u=0.03575219860906198,v=0.015273446978771754,w=0.5244294295109888,x=4.8942594680635 color=yellow,shape=triangle,flag=1,i=96964,u=0.6753010144630732,v=0.8088645160439986,w=0.49357119216876405,x=4.973181581826535 color=blue,shape=circle,flag=0,i=96978,u=0.9982633408245939,v=0.4362474578687586,w=0.5044673207376004,x=4.461821832481811 color=green,shape=square,flag=0,i=97000,u=0.6290508849121716,v=0.5975249117583501,w=0.5346361734874436,x=5.092610428669288 color=red,shape=triangle,flag=1,i=97003,u=0.49391957222866134,v=0.3517329710102629,w=0.5067788753681516,x=5.849695362146246 color=red,shape=triangle,flag=1,i=97016,u=0.9873458756911708,v=0.022119209398065,w=0.506457654513772,x=5.915977124768982 color=yellow,shape=triangle,flag=1,i=97024,u=0.38811420132912866,v=0.7051529503359618,w=0.4926659114806118,x=7.386209603734446 color=red,shape=circle,flag=0,i=97025,u=0.48790356365516274,v=0.5548030066184464,w=0.4970032883214445,x=3.8679936376690534 color=red,shape=triangle,flag=1,i=97026,u=0.08818720098756072,v=0.415248186499631,w=0.5034342518985538,x=4.617569322681561 color=red,shape=circle,flag=1,i=97028,u=0.392026413515555,v=0.42006604703125006,w=0.501221476705388,x=5.007722271208663 color=purple,shape=triangle,flag=0,i=97029,u=0.1798377909811557,v=0.7675681621527558,w=0.509208691532998,x=5.688833082887121 color=red,shape=triangle,flag=0,i=97041,u=0.32876541948093685,v=0.004890115461912536,w=0.49982816588472173,x=3.9469309159597246 color=yellow,shape=triangle,flag=1,i=97048,u=0.7932219576138572,v=0.969102802862149,w=0.49328967669718116,x=4.834697688075342 color=green,shape=square,flag=0,i=97055,u=0.24118869910422647,v=0.8159199718066013,w=0.5309988727295452,x=6.068079177044434 color=red,shape=square,flag=0,i=97060,u=0.11827652670713684,v=0.442615493329682,w=0.48777601263636,x=4.631940118607367 color=blue,shape=triangle,flag=0,i=97061,u=0.8741193108337573,v=0.7994579077417499,w=0.49637326188864817,x=5.084328756762589 color=red,shape=square,flag=1,i=97082,u=0.09580776868114327,v=0.3127038023023665,w=0.49597039606379695,x=7.3113914677542295 color=blue,shape=square,flag=0,i=97084,u=0.018387098959581127,v=0.46331768179852206,w=0.5141904006106274,x=6.823278545150015 color=blue,shape=triangle,flag=1,i=97122,u=0.6293976558954338,v=0.1987399668110742,w=0.4751446156062487,x=4.8111959438878955 color=red,shape=triangle,flag=0,i=97127,u=0.7406867607291928,v=0.7869628368930285,w=0.48725187375451035,x=6.373002723583167 color=red,shape=square,flag=0,i=97131,u=0.07099747423767344,v=0.21023697449405598,w=0.5083224815615155,x=5.500497178920348 color=red,shape=circle,flag=0,i=97142,u=0.09833987353193874,v=0.1147791068458756,w=0.49978560088685176,x=6.649395472152787 color=red,shape=square,flag=0,i=97145,u=0.1095278718757351,v=0.4712615049049269,w=0.500997151201516,x=6.152237213506827 color=blue,shape=square,flag=1,i=97149,u=0.1886728827395836,v=0.720803500813239,w=0.5140856399205782,x=5.255487499247563 color=red,shape=triangle,flag=0,i=97151,u=0.13342444052386448,v=0.07884187380217789,w=0.492165846333622,x=5.9595039299953365 color=purple,shape=square,flag=0,i=97154,u=0.28042409017376335,v=0.9412376677981548,w=0.5277662963859316,x=4.737930471132928 color=red,shape=triangle,flag=0,i=97166,u=0.30970638691215,v=0.32341380412269727,w=0.49912091515574897,x=6.01117247150778 color=green,shape=square,flag=0,i=97168,u=0.1912513634038605,v=0.49303796342198103,w=0.5352330183500308,x=3.326483531615287 color=red,shape=circle,flag=0,i=97176,u=0.45579218349119677,v=0.3869630943022203,w=0.49883949059815036,x=6.494520740802528 color=red,shape=triangle,flag=1,i=97177,u=0.12668139785697063,v=0.6323225812171959,w=0.4984072671432093,x=5.671608659509612 color=red,shape=triangle,flag=0,i=97214,u=0.5348072571734852,v=0.5927012513329605,w=0.5108259339428247,x=6.735193656056778 color=purple,shape=square,flag=0,i=97230,u=0.35470524541749526,v=0.20010542749315596,w=0.5303222548334717,x=6.428357947355543 color=yellow,shape=triangle,flag=1,i=97234,u=0.47631436173471964,v=0.7765559018355477,w=0.47732119043101473,x=4.806593955730334 color=purple,shape=circle,flag=0,i=97243,u=0.8230092004181703,v=0.9381872267787872,w=0.45712006521814225,x=6.174824436263681 color=blue,shape=triangle,flag=1,i=97266,u=0.6909701381885082,v=0.8240221760455293,w=0.48619698532670647,x=4.259612407736948 color=blue,shape=square,flag=1,i=97276,u=0.8516966151374171,v=0.10016699452463229,w=0.508175647297329,x=3.43208556464738 color=yellow,shape=triangle,flag=1,i=97277,u=0.3860135243757694,v=0.14162591139520508,w=0.4764937593207753,x=4.009840029937227 color=red,shape=circle,flag=1,i=97280,u=0.5917993310006303,v=0.5194695413216914,w=0.5010615202598578,x=5.698417328761084 color=purple,shape=triangle,flag=0,i=97294,u=0.9755702075513683,v=0.24584559293392982,w=0.5214214048541824,x=4.723840504286124 color=purple,shape=square,flag=0,i=97300,u=0.42027484356278855,v=0.22270130081509798,w=0.5242214498337153,x=3.5625814547603514 color=orange,shape=circle,flag=1,i=97301,u=0.9553848886986518,v=0.7799807659966358,w=0.4608595151265397,x=4.604757742088484 color=red,shape=circle,flag=1,i=97309,u=0.04777252740431659,v=0.11857770295836605,w=0.49994976976023503,x=3.5012074061713405 color=yellow,shape=circle,flag=1,i=97312,u=0.7273664187957455,v=0.6821231276230334,w=0.4900791531096476,x=5.129983466787765 color=red,shape=square,flag=0,i=97331,u=0.37926688266873265,v=0.4864574679061694,w=0.4942426957567359,x=5.269920041356692 color=red,shape=square,flag=0,i=97343,u=0.6241079278926611,v=0.8018744306885754,w=0.4909620282552845,x=2.6395618832093914 color=green,shape=square,flag=0,i=97344,u=0.8616687764933793,v=0.5685012317353809,w=0.5257345134696678,x=5.616811142165216 color=red,shape=circle,flag=1,i=97363,u=0.16491847512221658,v=0.21048409982526964,w=0.5031948314548698,x=7.349845996160004 color=red,shape=square,flag=0,i=97372,u=0.8269241296383256,v=0.6967117814030773,w=0.4965201109007503,x=5.1784863070239355 color=red,shape=square,flag=0,i=97376,u=0.19609500207002672,v=0.19023274723169536,w=0.5070041538850066,x=5.223435346279785 color=red,shape=triangle,flag=0,i=97380,u=0.8919455096083191,v=0.5924857368525175,w=0.5106536844624204,x=5.8747646648899865 color=blue,shape=triangle,flag=0,i=97384,u=0.3215611431884712,v=0.21973012811149484,w=0.48887320823151775,x=5.387662287666793 color=blue,shape=square,flag=1,i=97390,u=0.5683638775808385,v=0.2784245223252638,w=0.5229640465145601,x=3.438195606907572 color=yellow,shape=circle,flag=1,i=97396,u=0.9432514765439831,v=0.4255263132934115,w=0.4910916056568584,x=8.311929483038284 color=purple,shape=triangle,flag=0,i=97400,u=0.6861602139534393,v=0.9421516880329144,w=0.5131445004303671,x=4.548344352898108 color=blue,shape=circle,flag=1,i=97403,u=0.9772545408148562,v=0.02667878239259458,w=0.4800751827681361,x=5.4068923530300586 color=red,shape=triangle,flag=0,i=97415,u=0.4202070093270537,v=0.5567466106741579,w=0.5083881941755304,x=6.015079574597386 color=purple,shape=square,flag=0,i=97437,u=0.7147659294214207,v=0.22750813482497856,w=0.5097905756139546,x=5.571440660985307 color=purple,shape=square,flag=0,i=97456,u=0.7723035279117967,v=0.050217423978692555,w=0.5144639026111142,x=5.993029032868384 color=green,shape=square,flag=0,i=97460,u=0.0782987251399535,v=0.12876499173112188,w=0.5220400684813095,x=5.789980053367799 color=red,shape=square,flag=0,i=97462,u=0.08965807151828942,v=0.10643707279095249,w=0.5008978912962472,x=5.616013051283294 color=red,shape=circle,flag=0,i=97467,u=0.7766741505785799,v=0.7484017480681512,w=0.5030197226971365,x=3.496080359290433 color=green,shape=triangle,flag=0,i=97479,u=0.44152744337097793,v=0.5844495248568005,w=0.4940033847922217,x=4.315221374690091 color=purple,shape=square,flag=0,i=97516,u=0.28402613483717465,v=0.4272049677002838,w=0.5091847486779658,x=4.300723570993671 color=red,shape=triangle,flag=0,i=97518,u=0.13164672554701873,v=0.22921222398891972,w=0.5150332966927038,x=4.163427956316571 color=red,shape=triangle,flag=0,i=97521,u=0.8298504144125524,v=0.6334400989390334,w=0.5138879233833277,x=4.580764024404662 color=blue,shape=circle,flag=0,i=97522,u=0.6161536601333419,v=0.10011125645874996,w=0.48975848692141466,x=4.272053125774312 color=red,shape=square,flag=0,i=97528,u=0.5026882085865776,v=0.09627587585336217,w=0.5006311175911682,x=5.209893874383046 color=yellow,shape=triangle,flag=1,i=97537,u=0.2618325583909621,v=0.8139707712866776,w=0.47221599116161334,x=4.814572637440977 color=red,shape=square,flag=1,i=97541,u=0.26012815842242976,v=0.5746267570070889,w=0.5058301006804881,x=7.894284173816768 color=red,shape=square,flag=0,i=97579,u=0.5562711220007341,v=0.904963651078646,w=0.5058172540812761,x=5.924094256885994 color=red,shape=circle,flag=0,i=97609,u=0.8961614931968467,v=0.979176636525386,w=0.5025893437530877,x=3.8290612156016643 color=red,shape=square,flag=0,i=97621,u=0.9214089464989041,v=0.9071850948395918,w=0.5001465142808271,x=5.764287284989577 color=orange,shape=triangle,flag=0,i=97626,u=0.9630188333882982,v=0.27386939920704134,w=0.5064392730701361,x=4.538819506187884 color=red,shape=square,flag=1,i=97680,u=0.3209211121736111,v=0.3899516029122365,w=0.5198867447086687,x=7.06857285048642 color=red,shape=square,flag=0,i=97688,u=0.5911520575244686,v=0.33186590764785806,w=0.5180611691981245,x=5.04041766542527 color=purple,shape=triangle,flag=0,i=97711,u=0.04797693766549749,v=0.4056005979165126,w=0.5273590237315651,x=6.255121933383456 color=blue,shape=triangle,flag=1,i=97720,u=0.594943728773139,v=0.021015724656598733,w=0.49445682186947093,x=4.686014512170725 color=red,shape=square,flag=1,i=97728,u=0.18091463089999837,v=0.7024748500590835,w=0.5213011945044698,x=3.816509651620779 color=green,shape=triangle,flag=0,i=97743,u=0.4660292875154822,v=0.9055364869739684,w=0.5027993217625732,x=3.9121321558708826 color=blue,shape=circle,flag=0,i=97757,u=0.21642242605405448,v=0.7011683595472,w=0.49092845735927554,x=5.149654671760703 color=red,shape=triangle,flag=0,i=97769,u=0.2758974960696885,v=0.14252263841836466,w=0.5092202307326151,x=3.9296557153052114 color=green,shape=circle,flag=0,i=97782,u=0.9229506182027291,v=0.7709550496964023,w=0.48690715626806763,x=5.003019797233288 color=red,shape=triangle,flag=1,i=97785,u=0.6687944994434781,v=0.4292208180608189,w=0.5060053205603642,x=6.445192505384767 color=purple,shape=square,flag=0,i=97787,u=0.1626976458292152,v=0.7169415062126457,w=0.505993441989183,x=6.757878157483494 color=green,shape=triangle,flag=0,i=97792,u=0.6942834648605322,v=0.35075423520437954,w=0.5025883258793723,x=3.851474577720205 color=red,shape=triangle,flag=0,i=97804,u=0.32617072932399793,v=0.9068176837587851,w=0.5064110510788882,x=6.24923704998471 color=red,shape=square,flag=0,i=97811,u=0.9110657161485545,v=0.3361415665550729,w=0.5223693330863728,x=4.719245115124646 color=blue,shape=circle,flag=1,i=97814,u=0.2336720213891289,v=0.017690895141252994,w=0.49160496509972607,x=3.368817659596946 color=green,shape=square,flag=1,i=97831,u=0.791839678998911,v=0.09716252851029294,w=0.5529004211039809,x=5.806767943682989 color=red,shape=triangle,flag=1,i=97850,u=0.27791068733728586,v=0.43087228249903153,w=0.507797637334018,x=4.20709013302241 color=red,shape=triangle,flag=0,i=97865,u=0.6706345591784993,v=0.14657495989907243,w=0.5103829126613852,x=3.489613130965964 color=red,shape=square,flag=0,i=97871,u=0.6580510350061215,v=0.24238942484632964,w=0.508294984179414,x=3.0467382134923864 color=green,shape=square,flag=0,i=97889,u=0.49524086289950964,v=0.26821675698893166,w=0.552217601994032,x=7.590476710621381 color=purple,shape=square,flag=0,i=97900,u=0.6356407072311071,v=0.25518813062704515,w=0.49942290791391064,x=5.847117102786026 color=red,shape=square,flag=1,i=97907,u=0.34307032893968903,v=0.7647008654150338,w=0.5050882613982243,x=4.866015539792325 color=red,shape=square,flag=0,i=97919,u=0.7820969385206633,v=0.10597975297762219,w=0.5036810391453648,x=3.460596463977654 color=green,shape=square,flag=0,i=97925,u=0.6057162184564446,v=0.3400418548484976,w=0.5480957487864978,x=5.268311384911246 color=blue,shape=triangle,flag=1,i=97937,u=0.1785561921637433,v=0.775634933829922,w=0.47680078029824097,x=3.490791433897275 color=green,shape=square,flag=0,i=97956,u=0.09790995734527219,v=0.5256502236653826,w=0.5544820469204593,x=3.8546594386452635 color=yellow,shape=circle,flag=1,i=97959,u=0.8883170086471701,v=0.6035152092966669,w=0.4808478413838625,x=5.770285032852261 color=red,shape=square,flag=0,i=97967,u=0.7402283154845064,v=0.1604949757057924,w=0.5140215805849698,x=6.116271657363665 color=yellow,shape=square,flag=1,i=97971,u=0.08311863804936337,v=0.0643552871363311,w=0.5034505068151336,x=6.00942969226669 color=red,shape=circle,flag=0,i=98022,u=0.596592697008244,v=0.6436328707837564,w=0.47959785785757963,x=4.964166660347895 color=green,shape=circle,flag=0,i=98027,u=0.40649882186404573,v=0.09562074476567484,w=0.49007555940735587,x=4.98731748857221 color=purple,shape=square,flag=0,i=98028,u=0.7931704431696368,v=0.7928491541153797,w=0.4959683700173671,x=8.2086458340531 color=green,shape=triangle,flag=1,i=98062,u=0.5750083677475532,v=0.1258784060108571,w=0.5120529416099076,x=4.675720601321245 color=blue,shape=circle,flag=0,i=98064,u=0.008471805828746404,v=0.31301781762169756,w=0.4988495921835018,x=6.22981100786252 color=red,shape=triangle,flag=0,i=98070,u=0.8890180051875659,v=0.641894541546162,w=0.5230969157729751,x=6.492158723647763 color=green,shape=circle,flag=0,i=98079,u=0.9638868362687497,v=0.7509965571682672,w=0.49409764753305424,x=6.392330683917962 color=red,shape=square,flag=0,i=98088,u=0.7138491163783625,v=0.5660995446533844,w=0.5322588559331034,x=4.3846152618851955 color=yellow,shape=triangle,flag=1,i=98116,u=0.5119224643680647,v=0.8325885087413708,w=0.5027608321302205,x=4.182137286239789 color=yellow,shape=square,flag=1,i=98125,u=0.8649783193074638,v=0.8296944841891143,w=0.5071693423344046,x=4.818995357800668 color=blue,shape=circle,flag=1,i=98142,u=0.11903130827090902,v=0.0794600640138523,w=0.5045210513824391,x=3.858197748626988 color=yellow,shape=square,flag=1,i=98149,u=0.9029710888023735,v=0.8717011042953099,w=0.49652962702863235,x=6.619770189242416 color=orange,shape=triangle,flag=0,i=98151,u=0.43642298258222634,v=0.2193997453172266,w=0.499106748704397,x=4.3030028275210475 color=red,shape=triangle,flag=0,i=98154,u=0.30232977366424907,v=0.3959937521763154,w=0.5258396790372201,x=4.282090119984676 color=red,shape=triangle,flag=0,i=98163,u=0.15968459410082014,v=0.6593181353960239,w=0.5302854614163199,x=4.175227952430347 color=red,shape=square,flag=1,i=98196,u=0.11040543455660845,v=0.2918881950971337,w=0.5227695638617097,x=4.369949207705616 color=purple,shape=square,flag=0,i=98202,u=0.30751541181208664,v=0.9197690237746908,w=0.4991078400590991,x=5.914550009254785 color=green,shape=circle,flag=0,i=98207,u=0.9911573976993934,v=0.17411590095256702,w=0.48569904607795705,x=4.556901286375683 color=yellow,shape=square,flag=1,i=98208,u=0.05702815869116118,v=0.23117048329632328,w=0.4914488924620556,x=5.995338563130926 color=red,shape=square,flag=0,i=98209,u=0.3156966222570933,v=0.2698358712069102,w=0.5205166475872047,x=3.179376363487068 color=red,shape=square,flag=1,i=98219,u=0.3585605891873931,v=0.7849025301242254,w=0.5247071043755026,x=3.6436009871680306 color=yellow,shape=circle,flag=0,i=98225,u=0.5101004345114215,v=0.8276951221554976,w=0.48994504198333605,x=5.217640747985201 color=purple,shape=triangle,flag=0,i=98237,u=0.6056701129171512,v=0.17760094149129158,w=0.5064293455604001,x=4.787472118135386 color=red,shape=circle,flag=0,i=98246,u=0.8396846017362914,v=0.7948287790783244,w=0.48174517695444125,x=6.232121886626242 color=red,shape=triangle,flag=0,i=98264,u=0.6925214882912937,v=0.7060504603224776,w=0.5194984955295038,x=5.129705681175931 color=red,shape=square,flag=1,i=98270,u=0.8333327091854051,v=0.9073243527476074,w=0.5092593522702931,x=5.447554624882591 color=blue,shape=circle,flag=0,i=98277,u=0.8833050862568871,v=0.32423120247830917,w=0.5045031620937903,x=4.151562791435151 color=yellow,shape=triangle,flag=1,i=98292,u=0.027845065631730836,v=0.04910793281989667,w=0.5016167941049705,x=4.032763706389033 color=red,shape=triangle,flag=1,i=98304,u=0.960050401343297,v=0.878848157843013,w=0.5092386650812065,x=5.734219891862999 color=blue,shape=square,flag=0,i=98307,u=0.30723347276213786,v=0.3227401321430875,w=0.5083917433216159,x=3.6616507743396816 color=blue,shape=square,flag=0,i=98316,u=0.5174898118201812,v=0.5205216914321144,w=0.5060395164659975,x=6.791077771912952 color=yellow,shape=square,flag=1,i=98322,u=0.5024867844104095,v=0.859915626689891,w=0.48031937822922294,x=5.63959426909231 color=yellow,shape=square,flag=1,i=98325,u=0.2693442027373001,v=0.18337718642091838,w=0.48013256486796685,x=3.764308344824317 color=red,shape=triangle,flag=0,i=98332,u=0.32667214044077975,v=0.05130212052518457,w=0.527595893109353,x=6.130190313809526 color=red,shape=square,flag=1,i=98342,u=0.12841792565501742,v=0.008480499687680498,w=0.4965187584425047,x=4.692798781705341 color=purple,shape=square,flag=1,i=98346,u=0.7582084573585267,v=0.5214721652872817,w=0.4908777054805034,x=6.948015382313787 color=green,shape=circle,flag=0,i=98365,u=0.11274608726768476,v=0.2548579470940253,w=0.4900444734968059,x=2.8952501845025704 color=red,shape=circle,flag=0,i=98375,u=0.3445971803963863,v=0.2706372068659536,w=0.4799366072558581,x=4.584488823465119 color=green,shape=circle,flag=0,i=98378,u=0.14799431378210703,v=0.7006060042757039,w=0.48690198078433355,x=4.694771460754332 color=yellow,shape=triangle,flag=1,i=98395,u=0.2983265373399384,v=0.6070296404204049,w=0.5040106455993951,x=6.178216789219749 color=red,shape=square,flag=0,i=98405,u=0.3656304933774207,v=0.9265696681158306,w=0.4965558078481272,x=6.3116669969858785 color=red,shape=square,flag=1,i=98407,u=0.7314842259220952,v=0.7974038161823683,w=0.4939948999334246,x=4.93517526162906 color=yellow,shape=triangle,flag=1,i=98414,u=0.009369601388535709,v=0.202361826029956,w=0.5070663603552441,x=7.25521627101551 color=red,shape=circle,flag=0,i=98435,u=0.7330783388812637,v=0.6595531078341765,w=0.5003030690931154,x=4.374039636250854 color=red,shape=square,flag=0,i=98444,u=0.7068916459367539,v=0.10909506233927113,w=0.4934182655187043,x=6.594235035626636 color=blue,shape=square,flag=1,i=98475,u=0.8486649164434737,v=0.6603138829940969,w=0.5143953511210234,x=3.8853877436383013 color=blue,shape=triangle,flag=1,i=98476,u=0.1706498432969359,v=0.9313273233962576,w=0.46953105665730394,x=4.421531563835029 color=green,shape=square,flag=0,i=98477,u=0.7968165647564313,v=0.6920218355838409,w=0.5353477482292824,x=5.326952229760757 color=red,shape=circle,flag=0,i=98489,u=0.5040210327435094,v=0.5080539671354949,w=0.4953259570701542,x=2.686190680986473 color=green,shape=triangle,flag=1,i=98502,u=0.5791988541078736,v=0.2075863271917444,w=0.5179011746463379,x=6.829881907712913 color=red,shape=circle,flag=0,i=98510,u=0.8022565155247456,v=0.833447459978276,w=0.49209858648418725,x=5.0105549808616905 color=red,shape=square,flag=0,i=98513,u=0.7411176091737193,v=0.9081116317859208,w=0.4763468049657452,x=4.174979354461981 color=red,shape=triangle,flag=0,i=98521,u=0.7618365018681525,v=0.6532884547101894,w=0.5180203507031043,x=1.97042672080589 color=red,shape=square,flag=0,i=98523,u=0.7505947513859343,v=0.8838996599672665,w=0.4725185204387244,x=5.278352800864932 color=blue,shape=square,flag=1,i=98530,u=0.19902590179507995,v=0.7675412314816443,w=0.5072773038301646,x=4.41905381308439 color=blue,shape=triangle,flag=0,i=98532,u=0.3387489623595159,v=0.8056357479122686,w=0.4708233015007791,x=6.3592144032863445 color=red,shape=triangle,flag=1,i=98543,u=0.5573891226375833,v=0.513218875199012,w=0.525218791919852,x=6.302312930645479 color=red,shape=triangle,flag=0,i=98556,u=0.773584819993225,v=0.954863754652885,w=0.5387324719083295,x=4.168274102156399 color=purple,shape=triangle,flag=0,i=98603,u=0.4709942129781579,v=0.5776538348539528,w=0.4903421367001042,x=4.22875298100828 color=red,shape=triangle,flag=1,i=98604,u=0.21617190570220934,v=0.8118320769990091,w=0.5302895785660899,x=4.994739916648304 color=red,shape=square,flag=1,i=98614,u=0.7717997271506307,v=0.694889660989654,w=0.49182606233464893,x=5.586762853077823 color=yellow,shape=square,flag=1,i=98618,u=0.7158601697212569,v=0.6198863169592298,w=0.5017311396656775,x=3.1657203518557764 color=red,shape=square,flag=0,i=98641,u=0.5903083379634668,v=0.40294970262148055,w=0.49124292307181483,x=7.460997468162266 color=green,shape=square,flag=1,i=98650,u=0.17462174347448733,v=0.17291197841103367,w=0.5365201920196407,x=4.219315695577421 color=blue,shape=triangle,flag=0,i=98651,u=0.850163636671208,v=0.7437087441707033,w=0.48493078635184755,x=5.356779484241809 color=red,shape=square,flag=0,i=98666,u=0.44755524137388003,v=0.7290060921550455,w=0.4895362079521921,x=4.540070940732686 color=red,shape=triangle,flag=0,i=98673,u=0.9522918108313615,v=0.6632409839961452,w=0.5160995929179415,x=5.453980519882566 color=yellow,shape=square,flag=1,i=98679,u=0.7257230636415277,v=0.15821791451345935,w=0.5041210057325703,x=4.658210493083602 color=red,shape=triangle,flag=0,i=98691,u=0.7056870482058987,v=0.6121270004524071,w=0.5107845688446131,x=3.202611395785899 color=red,shape=square,flag=1,i=98694,u=0.9255603190188986,v=0.7578759177697019,w=0.4810597353437104,x=7.343140375626663 color=red,shape=circle,flag=0,i=98700,u=0.6081536638347593,v=0.5793295448994082,w=0.46847664251643806,x=6.103593510786826 color=blue,shape=triangle,flag=1,i=98715,u=0.025345432928356004,v=0.04590075545663996,w=0.4807235119165878,x=3.7631866957272027 color=green,shape=square,flag=0,i=98739,u=0.6181931897553943,v=0.19631572035713352,w=0.5376470373273067,x=5.060939091160315 color=red,shape=circle,flag=0,i=98751,u=0.08589407452496844,v=0.16138463561292965,w=0.4624927933033351,x=5.525860659224803 color=red,shape=circle,flag=1,i=98753,u=0.629930398213001,v=0.6490202846783595,w=0.46158517170089164,x=1.9479107880796083 color=yellow,shape=triangle,flag=1,i=98764,u=0.22411239108292103,v=0.6541807772205734,w=0.5204002524770049,x=6.780293402854686 color=blue,shape=circle,flag=1,i=98786,u=0.5684202039796897,v=0.5431289702655762,w=0.48376204053409183,x=5.9318278617135585 color=green,shape=circle,flag=1,i=98788,u=0.8002481149533739,v=0.70249445769141,w=0.47109923260072795,x=6.711355283725356 color=orange,shape=triangle,flag=0,i=98803,u=0.584108170545539,v=0.6170673393043582,w=0.5017516669982233,x=6.399187526134138 color=purple,shape=triangle,flag=0,i=98840,u=0.745183310848143,v=0.7851594618870195,w=0.48610608245077697,x=5.171335378864255 color=red,shape=triangle,flag=1,i=98846,u=0.2635165971815081,v=0.6682494697333642,w=0.5217979550147812,x=5.346978866248844 color=red,shape=square,flag=0,i=98859,u=0.5576207204193139,v=0.2779344828569307,w=0.48737356354465594,x=4.958860724637386 color=blue,shape=square,flag=1,i=98861,u=0.4534982983108291,v=0.1821425448485171,w=0.5077049428376395,x=4.392226779015571 color=red,shape=square,flag=0,i=98874,u=0.9766648327855758,v=0.7538581370395677,w=0.4734546946880415,x=2.708026978057306 color=red,shape=square,flag=0,i=98875,u=0.9177867276372873,v=0.28688458940185124,w=0.4715348727021706,x=4.944174406898203 color=red,shape=square,flag=1,i=98889,u=0.8298108266101528,v=0.2609649733736763,w=0.4731757812181874,x=4.121731738027449 color=blue,shape=triangle,flag=1,i=98917,u=0.30352961806180756,v=0.7222121763294063,w=0.4937171857379458,x=3.889977642599162 color=red,shape=circle,flag=0,i=98918,u=0.5395892607693311,v=0.4679800027559581,w=0.45650436231680047,x=4.291241711911771 color=purple,shape=square,flag=0,i=98919,u=0.9215020298105698,v=0.41359427330555776,w=0.5105720245647634,x=4.053039115224837 color=red,shape=square,flag=0,i=98924,u=0.16323720289059396,v=0.5399433188460773,w=0.4706758338100679,x=3.6793976137362208 color=red,shape=triangle,flag=0,i=98930,u=0.5071704346461817,v=0.7475614109700602,w=0.5075627708923901,x=5.727124769296046 color=orange,shape=triangle,flag=1,i=98938,u=0.03682067994139049,v=0.8058252534406598,w=0.5013635617853365,x=3.957012035092648 color=red,shape=circle,flag=0,i=98951,u=0.6502988217727155,v=0.6738339190891354,w=0.4642859620025278,x=4.578867404302979 color=yellow,shape=circle,flag=1,i=98959,u=0.052607659809360774,v=0.7429411241873004,w=0.4770783523327097,x=3.540971072333878 color=red,shape=circle,flag=0,i=98970,u=0.030517997188448054,v=-0.019938543236686895,w=0.46025313863193423,x=5.192876447732735 color=yellow,shape=square,flag=1,i=98972,u=0.7923703839245609,v=0.9496086708617593,w=0.4926256087476328,x=5.884152411212029 color=red,shape=triangle,flag=0,i=98973,u=0.9646647324293749,v=0.23353083519222173,w=0.5082820599508759,x=4.243920290934238 color=red,shape=circle,flag=0,i=98982,u=0.87531761397145,v=0.8410483054865789,w=0.4688967315014258,x=5.515906047564568 color=red,shape=square,flag=0,i=98991,u=0.38950844371289317,v=0.2095912314566527,w=0.4746905213482261,x=6.416946106030669 color=purple,shape=triangle,flag=0,i=98999,u=0.8373888270995616,v=0.9004631711504962,w=0.500910407607595,x=6.404667123458629 color=yellow,shape=triangle,flag=1,i=99018,u=0.3703359855470002,v=0.7567799821125469,w=0.5305932826585406,x=4.704801613062089 color=blue,shape=square,flag=0,i=99019,u=0.4126019275484226,v=0.47466901454349353,w=0.517700140254291,x=6.40040516807471 color=red,shape=triangle,flag=1,i=99021,u=0.2746609317921088,v=0.27535794611277764,w=0.5102809797353317,x=4.194039625007223 color=purple,shape=triangle,flag=0,i=99029,u=0.814872228954333,v=0.6437340043868705,w=0.4992262140974474,x=3.476020918161739 color=purple,shape=square,flag=0,i=99044,u=0.18298976791687627,v=0.08620598646493649,w=0.508255493932817,x=5.74997950238174 color=red,shape=square,flag=0,i=99060,u=0.1861052169166879,v=0.5578501417003999,w=0.4830831596641846,x=5.638164559647614 color=red,shape=square,flag=0,i=99063,u=0.8691209244378582,v=0.7255397901285395,w=0.48473307117656084,x=5.554244905866582 color=purple,shape=square,flag=0,i=99084,u=0.140135809141123,v=0.8796690116315877,w=0.5090719448370761,x=3.592292833797416 color=red,shape=triangle,flag=0,i=99089,u=0.9604861106351722,v=0.7895720428617851,w=0.5044234430734816,x=6.979556771038148 color=red,shape=square,flag=0,i=99096,u=0.3968012085621694,v=0.05957411372935073,w=0.4848470893576292,x=4.623878746546619 color=red,shape=square,flag=0,i=99101,u=0.0011651940899418678,v=0.11229628959018367,w=0.4788050982043006,x=5.095099652910183 color=blue,shape=triangle,flag=1,i=99113,u=0.3978290825561349,v=0.9374672741761598,w=0.4906901634524283,x=6.166006351081285 color=red,shape=triangle,flag=0,i=99114,u=0.3179370117598467,v=0.7521866058794734,w=0.5013292175628846,x=3.924316170342216 color=purple,shape=square,flag=0,i=99122,u=0.5067956247665032,v=0.40978981981124984,w=0.512695182649365,x=4.644094764497326 color=red,shape=circle,flag=0,i=99132,u=0.8183473866720897,v=0.8004326135444801,w=0.4681417601305023,x=6.636958016528148 color=blue,shape=triangle,flag=1,i=99149,u=0.9347833190023043,v=0.17759947718311153,w=0.48342825690505387,x=4.294291297643057 color=red,shape=triangle,flag=0,i=99160,u=0.9118601081739102,v=0.21866307347201497,w=0.5126438139193853,x=3.7614015818050635 color=blue,shape=circle,flag=1,i=99178,u=0.5522042974181056,v=0.5110264204106798,w=0.454725293617378,x=5.497867112649582 color=red,shape=square,flag=0,i=99182,u=0.8284785228042405,v=0.11334020374011111,w=0.4743863622973718,x=4.490154043481057 color=purple,shape=circle,flag=1,i=99196,u=0.9895554723278063,v=0.6080605951457241,w=0.4579125157028215,x=3.623307368175551 color=red,shape=triangle,flag=0,i=99199,u=0.8796844690129273,v=0.78836214798338,w=0.49821688429188404,x=4.873427084229231 color=yellow,shape=triangle,flag=1,i=99228,u=0.5983123975020165,v=0.3800340402706248,w=0.5252102605288587,x=4.64246012097752 color=red,shape=circle,flag=0,i=99251,u=0.6324438847732219,v=0.6814258727283171,w=0.46724065035984785,x=3.7384566384604434 color=purple,shape=circle,flag=1,i=99253,u=0.2795693874420423,v=0.29814197666682773,w=0.45853317683334,x=3.851117815506532 color=red,shape=square,flag=0,i=99256,u=0.21274424557691052,v=0.5976191487889706,w=0.4719030343187279,x=4.081821670992002 color=yellow,shape=triangle,flag=1,i=99259,u=0.32430798930823,v=0.9520335926581642,w=0.5234824129992659,x=4.264556022626916 color=green,shape=square,flag=0,i=99262,u=0.007623723341571131,v=0.4139260214166408,w=0.545108727764001,x=3.1603213699973236 color=red,shape=circle,flag=0,i=99268,u=0.4355482865958541,v=0.33867909144166575,w=0.47066794301154957,x=4.481125137057083 color=yellow,shape=square,flag=1,i=99272,u=0.7095694323926698,v=0.4534111967446265,w=0.5076592155958451,x=4.335544569970653 color=red,shape=triangle,flag=0,i=99278,u=0.9548394302661511,v=0.2548985622086267,w=0.5080298283382719,x=5.050137551587912 color=red,shape=square,flag=0,i=99280,u=0.3133923167715389,v=0.0653636454921509,w=0.4687503117971006,x=4.468325259930274 color=yellow,shape=circle,flag=1,i=99284,u=0.6530503199545348,v=0.23908588907834516,w=0.4799125551304738,x=6.379888206335166 color=yellow,shape=triangle,flag=1,i=99291,u=0.7614050649292594,v=0.10253010428320819,w=0.5273143616350555,x=5.691701516753241 color=blue,shape=square,flag=0,i=99313,u=0.7901772384605223,v=0.3528868403443989,w=0.5270429175217797,x=4.451400324939132 color=blue,shape=triangle,flag=1,i=99332,u=0.2841324877296606,v=0.2094373026612476,w=0.4864008357821705,x=5.608657584231664 color=blue,shape=triangle,flag=0,i=99343,u=0.3835355889880442,v=0.9627143534778757,w=0.4845060869373707,x=5.821407210159099 color=blue,shape=circle,flag=0,i=99346,u=0.14926698328541177,v=0.3173338938597636,w=0.4592474153396285,x=2.9937797037782476 color=red,shape=triangle,flag=1,i=99350,u=0.5591628968416275,v=0.15274073137276667,w=0.5201633734512585,x=6.427777836179761 color=yellow,shape=circle,flag=1,i=99353,u=0.5188661038632155,v=0.6454466534583754,w=0.48192389963375143,x=5.417220745930677 color=green,shape=circle,flag=0,i=99356,u=0.9287483786191593,v=0.5448422718795073,w=0.48572595180883404,x=4.232961138381335 color=orange,shape=square,flag=1,i=99364,u=0.21062547263510378,v=0.057097772636379496,w=0.4800603180908969,x=5.929286003481908 color=blue,shape=square,flag=1,i=99374,u=0.9014855376883767,v=0.3843193381166754,w=0.5302549095013845,x=5.617111099160013 color=red,shape=square,flag=0,i=99387,u=0.7284775790688164,v=0.5830407198778343,w=0.47264024729354126,x=4.749638973634444 color=red,shape=triangle,flag=1,i=99389,u=0.969493522972176,v=0.14580711732352647,w=0.516274600964966,x=4.431460556073614 color=purple,shape=square,flag=0,i=99399,u=0.37261182117473546,v=0.5122761495638001,w=0.5186797952023794,x=4.832424434642822 color=red,shape=circle,flag=1,i=99413,u=0.04515578822892985,v=0.1027674776150671,w=0.4824507480155599,x=3.2750466098772306 color=green,shape=circle,flag=0,i=99421,u=0.49007843311537935,v=0.2767289990629622,w=0.4845426312972711,x=3.2754112510228803 color=red,shape=square,flag=0,i=99424,u=0.5512592927823597,v=0.01821904923581552,w=0.46774548667175353,x=3.6895821421292747 color=red,shape=circle,flag=1,i=99434,u=0.3792243153960161,v=0.466831985895362,w=0.4925736244351452,x=6.327652379516802 color=green,shape=triangle,flag=0,i=99441,u=0.5146116108450614,v=0.4987895969345195,w=0.5458469449083049,x=4.325609904488275 color=blue,shape=triangle,flag=1,i=99442,u=0.7487344013310542,v=0.2085025891392418,w=0.4867242313908085,x=5.2295149366099976 color=yellow,shape=circle,flag=1,i=99458,u=0.005660571937996628,v=0.9022898196092912,w=0.48706905915563037,x=4.579708935331985 color=red,shape=square,flag=1,i=99470,u=0.8119142504046272,v=0.8362806282160352,w=0.46096046558142645,x=4.612507390997711 color=yellow,shape=triangle,flag=1,i=99476,u=0.2024424684853019,v=0.4234637932716139,w=0.520849384463336,x=5.314646088506813 color=red,shape=circle,flag=0,i=99484,u=0.7551632127081732,v=0.6974814333958862,w=0.487473970650931,x=7.374009786587409 color=yellow,shape=triangle,flag=1,i=99491,u=0.12007298876629291,v=0.3559014176804719,w=0.5168219132382291,x=5.940741085759094 color=red,shape=circle,flag=0,i=99508,u=0.8587979286309798,v=0.8851429506115143,w=0.48047251565051924,x=3.295818956537587 color=red,shape=triangle,flag=0,i=99513,u=0.6934187000138446,v=0.734327396129899,w=0.5148028596289214,x=4.9893445490629285 color=red,shape=square,flag=1,i=99546,u=0.5226384738105205,v=0.8368705748998306,w=0.4788787393405911,x=5.385597013594741 color=red,shape=square,flag=1,i=99550,u=0.09927742729294176,v=0.08334068303333408,w=0.47963609129774487,x=2.1640218691086637 color=red,shape=circle,flag=0,i=99560,u=0.9990202831729463,v=1.0660108878409864,w=0.48700006218753306,x=5.990375609679333 color=red,shape=triangle,flag=1,i=99568,u=0.918622141544091,v=0.09170747993234607,w=0.5126931035458203,x=4.093198958956755 color=red,shape=square,flag=0,i=99569,u=0.8774917490203964,v=0.4741856843373682,w=0.4765875113105786,x=7.15960642862528 color=red,shape=circle,flag=1,i=99574,u=0.7261362203352475,v=0.6688528726234391,w=0.48463087593733783,x=4.950691779690078 color=red,shape=circle,flag=0,i=99575,u=0.2862321158163894,v=0.22602228805678667,w=0.4862857875485638,x=4.877584139614217 color=red,shape=circle,flag=0,i=99583,u=0.20560442475704344,v=0.18707407434171675,w=0.48497548694697634,x=4.2634620543479125 color=blue,shape=triangle,flag=1,i=99596,u=0.9936929747471016,v=0.5782013223299753,w=0.47733286108085177,x=4.353289748867776 color=blue,shape=circle,flag=1,i=99597,u=0.6175129674140937,v=0.8783236614148164,w=0.4873937147367046,x=6.918267492102772 color=yellow,shape=triangle,flag=1,i=99614,u=0.12566638292604648,v=0.5370862994594293,w=0.5122647540391286,x=4.365715410728572 color=yellow,shape=triangle,flag=1,i=99621,u=0.20627664554814118,v=0.35410036072858564,w=0.5097694279541631,x=3.7798087754661402 color=yellow,shape=triangle,flag=1,i=99641,u=0.0736393350308906,v=0.49031595380876525,w=0.5104133711102727,x=4.950276263785367 color=green,shape=circle,flag=1,i=99648,u=0.9641579443310726,v=0.3242629907787482,w=0.48240604262015435,x=6.919585546894953 color=red,shape=square,flag=0,i=99649,u=0.934800701949643,v=0.48441573208482147,w=0.4960238751196558,x=5.184238195675467 color=orange,shape=square,flag=0,i=99653,u=0.789722064722879,v=0.1772884294744761,w=0.473493062083468,x=5.824390067813731 color=green,shape=square,flag=0,i=99661,u=0.9334760677782648,v=0.6636912260358271,w=0.5189444654944722,x=4.339282513908433 color=blue,shape=triangle,flag=0,i=99667,u=0.6647853588616123,v=0.12951977333017117,w=0.4823202919144525,x=5.503462561380917 color=yellow,shape=triangle,flag=1,i=99669,u=0.2950046077841554,v=0.5169302532253321,w=0.5099820713902785,x=5.008819660736467 color=purple,shape=square,flag=0,i=99670,u=0.13481616615250724,v=0.3696670704944679,w=0.5233050032196054,x=2.0019206676443346 color=yellow,shape=triangle,flag=1,i=99676,u=0.0544866311571256,v=0.5050551065757343,w=0.507418730447903,x=3.985785711266788 color=blue,shape=circle,flag=0,i=99697,u=0.630939787187507,v=0.4422449497231823,w=0.4854213185772358,x=5.388775571792507 color=red,shape=triangle,flag=1,i=99699,u=0.44046451701881817,v=0.6693620880735209,w=0.4939501843398234,x=3.4298583527006112 color=green,shape=circle,flag=0,i=99707,u=0.7262197524235358,v=0.003176104402091151,w=0.48663192680473805,x=3.7299165991633174 color=yellow,shape=triangle,flag=1,i=99716,u=0.5327221391974075,v=0.6129975879822656,w=0.49795086174788955,x=5.491213639071156 color=purple,shape=circle,flag=0,i=99722,u=0.7486045159615866,v=0.02653501689939608,w=0.4572205993722214,x=6.223327501534848 color=yellow,shape=square,flag=1,i=99737,u=0.7817216417913274,v=0.5151975809561844,w=0.5120362880736075,x=5.094375748508235 color=purple,shape=square,flag=0,i=99752,u=0.2933784074149981,v=0.28316289440376663,w=0.5195849897897076,x=4.466194613824574 color=red,shape=triangle,flag=0,i=99771,u=0.7499528240734045,v=0.510649322249461,w=0.48848536220862615,x=5.379912183986147 color=blue,shape=circle,flag=1,i=99792,u=0.3076962240598582,v=0.8882325633423691,w=0.4920877813292329,x=4.835327839887664 color=green,shape=circle,flag=0,i=99794,u=0.8350677370237658,v=0.18712252292764242,w=0.4857238383933379,x=3.9041984421067504 color=red,shape=square,flag=0,i=99820,u=0.4110846740079569,v=0.1409845690629965,w=0.5148459393384885,x=5.755754455114368 color=red,shape=triangle,flag=0,i=99854,u=0.0580164801671621,v=0.10149907122466983,w=0.48474226744746424,x=4.175624509332196 color=yellow,shape=square,flag=1,i=99855,u=0.654308310890614,v=0.04227513301555064,w=0.5186850271601244,x=3.129028558096429 color=red,shape=square,flag=0,i=99856,u=0.38201892995720876,v=0.049740344297180106,w=0.5230065047547933,x=4.7461113502869905 color=green,shape=triangle,flag=0,i=99873,u=0.07195979341157455,v=0.44813762004548474,w=0.5447437466480782,x=3.403048855248761 color=yellow,shape=square,flag=1,i=99879,u=0.6617832193311329,v=0.01108165945780859,w=0.517245611263905,x=2.819903015712994 color=yellow,shape=circle,flag=1,i=99882,u=0.5635339096217307,v=0.5750498291651793,w=0.5061095841354115,x=1.741510100620954 color=red,shape=circle,flag=0,i=99896,u=0.3229231533121689,v=0.33710663161056176,w=0.4781650530426834,x=5.350071553734736 color=red,shape=square,flag=0,i=99907,u=0.6389417074123076,v=0.16310270270306293,w=0.5267980152655629,x=3.7422859875313157 color=yellow,shape=circle,flag=1,i=99922,u=0.5177420062217538,v=0.5626371673235627,w=0.5068390067489178,x=3.9636645948617457 color=purple,shape=square,flag=0,i=99923,u=0.22587344110808483,v=0.3529160737725947,w=0.519883718053089,x=3.421331967577624 color=blue,shape=circle,flag=1,i=99925,u=0.41222408674206745,v=0.4302961063823483,w=0.5006899693333398,x=3.2881616182365114 color=green,shape=circle,flag=0,i=99938,u=0.31517128587360044,v=0.9370877470212836,w=0.4970914108233537,x=5.006451117858268 color=red,shape=triangle,flag=0,i=99948,u=0.9107115544023052,v=0.32519669604939616,w=0.49373516335938644,x=2.931371497952684 color=purple,shape=triangle,flag=0,i=99955,u=0.516433078636893,v=0.10057092319662564,w=0.5052269474197051,x=4.048839550090146 color=blue,shape=circle,flag=1,i=99969,u=0.4845171309004245,v=0.8572710188113218,w=0.49452921927634125,x=4.034770268996462 color=blue,shape=square,flag=1,i=99974,u=0.6189062525431605,v=0.2637962404841453,w=0.5311465405784674,x=6.210738209085753 color=blue,shape=triangle,flag=0,i=99976,u=0.008110504040268474,v=0.8267274952432482,w=0.4732962944898885,x=6.146956761817328 color=yellow,shape=triangle,flag=0,i=99990,u=0.3839424618160777,v=0.55952913620132,w=0.5113763011485609,x=4.307973891915119 color=yellow,shape=circle,flag=1,i=99994,u=0.764950884927175,v=0.25284227383991364,w=0.49969878539567425,x=5.013809741826425 miller-5.6.2/doc/data/colours.csv000066400000000000000000000003161354153536500167030ustar00rootroot00000000000000KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah miller-5.6.2/doc/data/current_counters.csv000066400000000000000000000000641354153536500206210ustar00rootroot00000000000000color,count red,3467 orange,670 yellow,27 blue,6944 miller-5.6.2/doc/data/currtemp.csv000066400000000000000000000000741354153536500170570ustar00rootroot00000000000000color,current_count red,3467 orange,670 yellow,27 blue,6944 miller-5.6.2/doc/data/delimiter-examples.txt000066400000000000000000000033611354153536500210360ustar00rootroot00000000000000# Use the `file` command to see if there are CR/LF terminators (in this case, # there are not): $ file data/colours.csv data/colours.csv: UTF-8 Unicode text # Look at the file to find names of fields $ cat data/colours.csv KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah # Extract a few fields: $ mlr --csv cut -f KEY,PL,RO data/colours.csv (only blank lines appear) # Use XTAB output format to get a sharper picture of where records/fields # are being split: $ mlr --icsv --oxtab cat data/colours.csv KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah # Using XTAB output format makes it clearer that KEY;DE;...;RO;TR is being # treated as a single field name in the CSV header, and likewise each # subsequent line is being treated as a single field value. This is because # the default field separator is a comma but we have semicolons here. # Use XTAB again with different field separator (--fs semicolon): mlr --icsv --ifs semicolon --oxtab cat data/colours.csv KEY masterdata_colourcode_1 DE Weiß EN White ES Blanco FI Valkoinen FR Blanc IT Bianco NL Wit PL Biały RO Alb TR Beyaz KEY masterdata_colourcode_2 DE Schwarz EN Black ES Negro FI Musta FR Noir IT Nero NL Zwart PL Czarny RO Negru TR Siyah # Using the new field-separator, retry the cut: mlr --csv --fs semicolon cut -f KEY,PL,RO data/colours.csv KEY;PL;RO masterdata_colourcode_1;Biały;Alb masterdata_colourcode_2;Czarny;Negru miller-5.6.2/doc/data/dollar-sign.txt000066400000000000000000000047661354153536500174710ustar00rootroot00000000000000$ cat sample.csv EventOccurred,EventType,Description,Status,PaymentType,NameonAccount,TransactionNumber,Amount 10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,John,1,$230.36 10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,Fred,2,$32.25 10/1/2015,Charged Back,Reason: Customer Advises Not Authorized,Disputed,Checking,Bob,3,$39.02 10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,Alice,4,$57.54 10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,Jungle,5,$230.36 10/1/2015,Charged Back,Reason: Payment Stopped,Disputed,Checking,Joe,6,$281.96 10/2/2015,Charged Back,Reason: Customer Advises Not Authorized,Disputed,Checking,Joseph,7,$188.19 10/2/2015,Charged Back,Reason: Customer Advises Not Authorized,Disputed,Checking,Joseph,8,$188.19 10/2/2015,Charged Back,Reason: Payment Stopped,Disputed,Checking,Anthony,9,$250.00 $ mlr --icsv --opprint cat sample.csv EventOccurred EventType Description Status PaymentType NameonAccount TransactionNumber Amount 10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking John 1 $230.36 10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking Fred 2 $32.25 10/1/2015 Charged Back Reason: Customer Advises Not Authorized Disputed Checking Bob 3 $39.02 10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking Alice 4 $57.54 10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking Jungle 5 $230.36 10/1/2015 Charged Back Reason: Payment Stopped Disputed Checking Joe 6 $281.96 10/2/2015 Charged Back Reason: Customer Advises Not Authorized Disputed Checking Joseph 7 $188.19 10/2/2015 Charged Back Reason: Customer Advises Not Authorized Disputed Checking Joseph 8 $188.19 10/2/2015 Charged Back Reason: Payment Stopped Disputed Checking Anthony 9 $250.00 $ mlr --csv put '$Amount = sub(string($Amount), "\$", "")' then stats1 -a sum -f Amount sample.csv Amount_sum 1497.870000 $ mlr --csv --ofmt '%.2lf' put '$Amount = sub(string($Amount), "\$", "")' then stats1 -a sum -f Amount sample.csv Amount_sum 1497.87 miller-5.6.2/doc/data/dynamic-nr.sh000066400000000000000000000002541354153536500170760ustar00rootroot00000000000000mlr --opprint --from data/small put ' begin{ @nr1 = 0 } @nr1 += 1; $nr1 = @nr1 ' \ then filter '$x>0.5' \ then put ' begin{ @nr2 = 0 } @nr2 += 1; $nr2 = @nr2 ' miller-5.6.2/doc/data/emit-lashed.sh000066400000000000000000000003761354153536500172360ustar00rootroot00000000000000mlr --from data/medium --opprint put -q ' @x_count[$a][$b] += 1; @x_sum[$a][$b] += $x; end { for ((a, b), _ in @x_count) { @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b] } emit (@x_sum, @x_count, @x_mean), "a", "b" } ' miller-5.6.2/doc/data/english-words.txt000066400000000000000000104507531354153536500200450ustar00rootroot00000000000000a aa aal aalii aam aardvark aardwolf aba abac abaca abacate abacay abacinate abacination abaciscus abacist aback abactinal abactinally abaction abactor abaculus abacus abaff abaft abaisance abaiser abaissed abalienate abalienation abalone abampere abandon abandonable abandoned abandonedly abandonee abandoner abandonment abaptiston abarthrosis abarticular abarticulation abas abase abased abasedly abasedness abasement abaser abash abashed abashedly abashedness abashless abashlessly abashment abasia abasic abask abastardize abatable abate abatement abater abatis abatised abaton abator abattoir abature abave abaxial abaxile abaze abb abbacomes abbacy abbas abbasi abbassi abbatial abbatical abbess abbey abbeystede abbot abbotcy abbotnullius abbotship abbreviate abbreviately abbreviation abbreviator abbreviatory abbreviature abcoulomb abdal abdat abdest abdicable abdicant abdicate abdication abdicative abdicator abditive abditory abdomen abdominal abdominalian abdominally abdominoanterior abdominocardiac abdominocentesis abdominocystic abdominogenital abdominohysterectomy abdominohysterotomy abdominoposterior abdominoscope abdominoscopy abdominothoracic abdominous abdominovaginal abdominovesical abduce abducens abducent abduct abduction abductor abeam abear abearance abecedarian abecedarium abecedary abed abeigh abele abelite abelmosk abeltree abenteric abepithymia aberdevine aberrance aberrancy aberrant aberrate aberration aberrational aberrator aberrometer aberroscope aberuncator abet abetment abettal abettor abevacuation abey abeyance abeyancy abeyant abfarad abhenry abhiseka abhominable abhor abhorrence abhorrency abhorrent abhorrently abhorrer abhorrible abhorring abidal abidance abide abider abidi abiding abidingly abidingness abietate abietene abietic abietin abietineous abietinic abigail abigailship abigeat abigeus abilao ability abilla abilo abintestate abiogenesis abiogenesist abiogenetic abiogenetical abiogenetically abiogenist abiogenous abiogeny abiological abiologically abiology abiosis abiotic abiotrophic abiotrophy abir abirritant abirritate abirritation abirritative abiston abiuret abject abjectedness abjection abjective abjectly abjectness abjoint abjudge abjudicate abjudication abjunction abjunctive abjuration abjuratory abjure abjurement abjurer abkar abkari ablach ablactate ablactation ablare ablastemic ablastous ablate ablation ablatitious ablatival ablative ablator ablaut ablaze able ableeze ablegate ableness ablepharia ablepharon ablepharous ablepsia ableptical ableptically abler ablest ablewhackets ablins abloom ablow ablude abluent ablush ablution ablutionary abluvion ably abmho abnegate abnegation abnegative abnegator abnerval abnet abneural abnormal abnormalism abnormalist abnormality abnormalize abnormally abnormalness abnormity abnormous abnumerable aboard abode abodement abody abohm aboil abolish abolisher abolishment abolition abolitionary abolitionism abolitionist abolitionize abolla aboma abomasum abomasus abominable abominableness abominably abominate abomination abominator abomine aboon aborad aboral aborally abord aboriginal aboriginality aboriginally aboriginary aborigine abort aborted aborticide abortient abortifacient abortin abortion abortional abortionist abortive abortively abortiveness abortus abouchement abound abounder abounding aboundingly about abouts above aboveboard abovedeck aboveground aboveproof abovestairs abox abracadabra abrachia abradant abrade abrader abraid abranchial abranchialism abranchian abranchiate abranchious abrasax abrase abrash abrasiometer abrasion abrasive abrastol abraum abraxas abreact abreaction abreast abrenounce abret abrico abridge abridgeable abridged abridgedly abridger abridgment abrim abrin abristle abroach abroad abrocome abrogable abrogate abrogation abrogative abrogator abrook abrotanum abrotine abrupt abruptedly abruption abruptly abruptness absampere absarokite abscess abscessed abscession abscessroot abscind abscise abscision absciss abscissa abscissae abscisse abscission absconce abscond absconded abscondedly abscondence absconder absconsa abscoulomb absence absent absentation absentee absenteeism absenteeship absenter absently absentment absentmindedly absentness absfarad abshenry absinthe absinthial absinthian absinthiate absinthic absinthin absinthine absinthism absinthismic absinthium absinthol absit absmho absohm absolute absolutely absoluteness absolution absolutism absolutist absolutistic absolutistically absolutive absolutization absolutize absolutory absolvable absolvatory absolve absolvent absolver absolvitor absolvitory absonant absonous absorb absorbability absorbable absorbed absorbedly absorbedness absorbefacient absorbency absorbent absorber absorbing absorbingly absorbition absorpt absorptance absorptiometer absorptiometric absorption absorptive absorptively absorptiveness absorptivity absquatulate abstain abstainer abstainment abstemious abstemiously abstemiousness abstention abstentionist abstentious absterge abstergent abstersion abstersive abstersiveness abstinence abstinency abstinent abstinential abstinently abstract abstracted abstractedly abstractedness abstracter abstraction abstractional abstractionism abstractionist abstractitious abstractive abstractively abstractiveness abstractly abstractness abstractor abstrahent abstricted abstriction abstruse abstrusely abstruseness abstrusion abstrusity absume absumption absurd absurdity absurdly absurdness absvolt abterminal abthain abthainrie abthainry abthanage abu abucco abulia abulic abulomania abuna abundance abundancy abundant abundantly abura aburabozu aburban aburst aburton abusable abuse abusedly abusee abuseful abusefully abusefulness abuser abusion abusious abusive abusively abusiveness abut abutment abuttal abutter abutting abuzz abvolt abwab aby abysm abysmal abysmally abyss abyssal abyssobenthonic abyssolith abyssopelagic acacatechin acacatechol acacetin acaciin acacin academe academial academian academic academical academically academicals academician academicism academism academist academite academization academize academy acadialite acajou acaleph acalephan acalephoid acalycal acalycine acalycinous acalyculate acalyptrate acampsia acana acanaceous acanonical acanth acantha acanthaceous acanthad acanthial acanthin acanthine acanthion acanthite acanthocarpous acanthocephalan acanthocephalous acanthocladous acanthodean acanthodian acanthoid acanthological acanthology acantholysis acanthoma acanthon acanthophorous acanthopod acanthopodous acanthopomatous acanthopore acanthopteran acanthopterous acanthopterygian acanthosis acanthous acanthus acapnia acapnial acapsular acapu acapulco acara acardia acardiac acari acarian acariasis acaricidal acaricide acarid acaridean acaridomatium acariform acarine acarinosis acarocecidium acarodermatitis acaroid acarol acarologist acarology acarophilous acarophobia acarotoxic acarpelous acarpous acatalectic acatalepsia acatalepsy acataleptic acatallactic acatamathesia acataphasia acataposis acatastasia acatastatic acate acategorical acatery acatharsia acatharsy acatholic acaudal acaudate acaulescent acauline acaulose acaulous acca accede accedence acceder accelerable accelerando accelerant accelerate accelerated acceleratedly acceleration accelerative accelerator acceleratory accelerograph accelerometer accend accendibility accendible accension accensor accent accentless accentor accentuable accentual accentuality accentually accentuate accentuation accentuator accentus accept acceptability acceptable acceptableness acceptably acceptance acceptancy acceptant acceptation accepted acceptedly accepter acceptilate acceptilation acception acceptive acceptor acceptress accerse accersition accersitor access accessarily accessariness accessary accessaryship accessibility accessible accessibly accession accessional accessioner accessive accessively accessless accessorial accessorily accessoriness accessorius accessory accidence accidency accident accidental accidentalism accidentalist accidentality accidentally accidentalness accidented accidential accidentiality accidently accidia accidie accinge accipient accipitral accipitrary accipitrine accismus accite acclaim acclaimable acclaimer acclamation acclamator acclamatory acclimatable acclimatation acclimate acclimatement acclimation acclimatizable acclimatization acclimatize acclimatizer acclimature acclinal acclinate acclivitous acclivity acclivous accloy accoast accoil accolade accoladed accolated accolent accolle accombination accommodable accommodableness accommodate accommodately accommodateness accommodating accommodatingly accommodation accommodational accommodative accommodativeness accommodator accompanier accompaniment accompanimental accompanist accompany accompanyist accompletive accomplice accompliceship accomplicity accomplish accomplishable accomplished accomplisher accomplishment accomplisht accompt accord accordable accordance accordancy accordant accordantly accorder according accordingly accordion accordionist accorporate accorporation accost accostable accosted accouche accouchement accoucheur accoucheuse account accountability accountable accountableness accountably accountancy accountant accountantship accounting accountment accouple accouplement accouter accouterment accoy accredit accreditate accreditation accredited accreditment accrementitial accrementition accresce accrescence accrescent accretal accrete accretion accretionary accretive accroach accroides accrual accrue accruement accruer accubation accubitum accubitus accultural acculturate acculturation acculturize accumbency accumbent accumber accumulable accumulate accumulation accumulativ accumulative accumulatively accumulativeness accumulator accuracy accurate accurately accurateness accurse accursed accursedly accursedness accusable accusably accusal accusant accusation accusatival accusative accusatively accusatorial accusatorially accusatory accusatrix accuse accused accuser accusingly accusive accustom accustomed accustomedly accustomedness ace aceacenaphthene aceanthrene aceanthrenequinone acecaffine aceconitic acedia acediamine acediast acedy acenaphthene acenaphthenyl acenaphthylene acentric acentrous aceologic aceology acephal acephalan acephalia acephaline acephalism acephalist acephalocyst acephalous acephalus aceraceous acerate acerathere aceratosis acerb acerbate acerbic acerbity acerdol acerin acerose acerous acerra acertannin acervate acervately acervation acervative acervose acervuline acervulus acescence acescency acescent aceship acesodyne acetabular acetabuliferous acetabuliform acetabulous acetabulum acetacetic acetal acetaldehydase acetaldehyde acetaldehydrase acetalization acetalize acetamide acetamidin acetamidine acetamido acetaminol acetanilid acetanilide acetanion acetaniside acetanisidide acetannin acetarious acetarsone acetate acetated acetation acetbromamide acetenyl acethydrazide acetic acetification acetifier acetify acetimeter acetimetry acetin acetize acetmethylanilide acetnaphthalide acetoacetanilide acetoacetate acetoacetic acetoamidophenol acetoarsenite acetobenzoic acetobromanilide acetochloral acetocinnamene acetoin acetol acetolysis acetolytic acetometer acetometrical acetometrically acetometry acetomorphine acetonaphthone acetonate acetonation acetone acetonemia acetonemic acetonic acetonitrile acetonization acetonize acetonuria acetonurometer acetonyl acetonylacetone acetonylidene acetophenetide acetophenin acetophenine acetophenone acetopiperone acetopyrin acetosalicylic acetose acetosity acetosoluble acetothienone acetotoluide acetotoluidine acetous acetoveratrone acetoxime acetoxyl acetoxyphthalide acetphenetid acetphenetidin acetract acettoluide acetum aceturic acetyl acetylacetonates acetylacetone acetylamine acetylate acetylation acetylator acetylbenzene acetylbenzoate acetylbenzoic acetylbiuret acetylcarbazole acetylcellulose acetylcholine acetylcyanide acetylenation acetylene acetylenediurein acetylenic acetylenyl acetylfluoride acetylglycine acetylhydrazine acetylic acetylide acetyliodide acetylizable acetylization acetylize acetylizer acetylmethylcarbinol acetylperoxide acetylphenol acetylphenylhydrazine acetylrosaniline acetylsalicylate acetylsalol acetyltannin acetylthymol acetyltropeine acetylurea ach achaetous achage achalasia achar achate ache acheilia acheilous acheiria acheirous acheirus achene achenial achenium achenocarp achenodium acher achete acheweed achievable achieve achievement achiever achigan achilary achill achilleine achillobursitis achillodynia achime aching achingly achira achlamydate achlamydeous achlorhydria achlorophyllous achloropsia acholia acholic acholous acholuria acholuric achondrite achondritic achondroplasia achondroplastic achor achordal achordate achree achroacyte achrodextrin achrodextrinase achroglobin achroiocythaemia achroiocythemia achroite achroma achromacyte achromasia achromat achromate achromatic achromatically achromaticity achromatin achromatinic achromatism achromatizable achromatization achromatize achromatocyte achromatolysis achromatope achromatophile achromatopia achromatopsia achromatopsy achromatosis achromatous achromaturia achromia achromic achromoderma achromophilous achromotrichia achromous achronical achroodextrin achroodextrinase achroous achropsia achtehalber achtel achtelthaler achy achylia achylous achymia achymous acichloride acicula acicular acicularly aciculate aciculated aciculum acid acidemia acider acidic acidiferous acidifiable acidifiant acidific acidification acidifier acidify acidimeter acidimetric acidimetrical acidimetrically acidimetry acidite acidity acidize acidly acidness acidoid acidology acidometer acidometry acidophile acidophilic acidophilous acidoproteolytic acidosis acidosteophyte acidotic acidproof acidulate acidulent acidulous aciduric acidyl acier acierage acierate acieration aciform aciliate aciliated acinaceous acinaces acinacifolious acinaciform acinar acinarious acinary acinetan acinetarian acinetic acinetiform acinetinan acinic aciniform acinose acinotubular acinous acinus acipenserid acipenserine acipenseroid aciurgy acker ackey ackman acknow acknowledge acknowledgeable acknowledged acknowledgedly acknowledger aclastic acle acleidian acleistous aclidian aclinal aclinic acloud aclys acmatic acme acmesthesia acmic acmite acne acneform acneiform acnemia acnodal acnode acocantherin acock acockbill acocotl acoelomate acoelomatous acoelomous acoelous acoin acoine acold acologic acology acolous acoluthic acolyte acolythate acoma acomia acomous aconative acondylose acondylous acone aconic aconin aconine aconital aconite aconitia aconitic aconitin aconitine acontium aconuresis acopic acopon acopyrin acopyrine acor acorea acoria acorn acorned acosmic acosmism acosmist acosmistic acotyledon acotyledonous acouasm acouchi acouchy acoumeter acoumetry acouometer acouophonia acoupa acousmata acousmatic acoustic acoustical acoustically acoustician acousticolateral acoustics acquaint acquaintance acquaintanceship acquaintancy acquaintant acquainted acquaintedness acquest acquiesce acquiescement acquiescence acquiescency acquiescent acquiescently acquiescer acquiescingly acquirability acquirable acquire acquired acquirement acquirenda acquirer acquisible acquisite acquisited acquisition acquisitive acquisitively acquisitiveness acquisitor acquisitum acquist acquit acquitment acquittal acquittance acquitter acracy acraein acraldehyde acranial acraniate acrasia acraspedote acratia acraturesis acrawl acraze acre acreable acreage acreak acream acred acreman acrestaff acrid acridan acridian acridic acridine acridinic acridinium acridity acridly acridness acridone acridonium acridophagus acridyl acriflavin acriflavine acrimonious acrimoniously acrimoniousness acrimony acrindoline acrinyl acrisia acritan acrite acritical acritol acroaesthesia acroama acroamatic acroamatics acroanesthesia acroarthritis acroasphyxia acroataxia acroatic acrobacy acrobat acrobatholithic acrobatic acrobatical acrobatically acrobatics acrobatism acroblast acrobryous acrobystitis acrocarpous acrocephalia acrocephalic acrocephalous acrocephaly acrochordon acroconidium acrocontracture acrocoracoid acrocyanosis acrocyst acrodactylum acrodermatitis acrodont acrodontism acrodrome acrodromous acrodynia acroesthesia acrogamous acrogamy acrogen acrogenic acrogenous acrogenously acrography acrogynae acrogynous acrolein acrolith acrolithan acrolithic acrologic acrologically acrologism acrologue acrology acromania acromastitis acromegalia acromegalic acromegaly acromelalgia acrometer acromial acromicria acromioclavicular acromiocoracoid acromiodeltoid acromiohumeral acromiohyoid acromion acromioscapular acromiosternal acromiothoracic acromonogrammatic acromphalus acromyodian acromyodic acromyodous acromyotonia acromyotonus acron acronarcotic acroneurosis acronical acronically acronyc acronych acronyctous acronym acronymic acronymize acronymous acronyx acrook acroparalysis acroparesthesia acropathology acropathy acropetal acropetally acrophobia acrophonetic acrophonic acrophony acropodium acropoleis acropolis acropolitan acrorhagus acrorrheuma acrosarc acrosarcum acroscleriasis acroscleroderma acroscopic acrose acrosome acrosphacelus acrospire acrospore acrosporous across acrostic acrostical acrostically acrostichal acrostichic acrostichoid acrosticism acrostolion acrostolium acrotarsial acrotarsium acroteleutic acroterial acroteric acroterium acrotic acrotism acrotomous acrotrophic acrotrophoneurosis acryl acrylaldehyde acrylate acrylic acrylonitrile acrylyl act acta actability actable actification actifier actify actin actinal actinally actinautographic actinautography actine actinenchyma acting actinian actiniarian actinic actinically actiniferous actiniform actinine actiniochrome actiniohematin actinism actinium actinobacillosis actinoblast actinobranch actinobranchia actinocarp actinocarpic actinocarpous actinochemistry actinocrinid actinocrinite actinocutitis actinodermatitis actinodielectric actinodrome actinodromous actinoelectric actinoelectrically actinoelectricity actinogonidiate actinogram actinograph actinography actinoid actinolite actinolitic actinologous actinologue actinology actinomere actinomeric actinometer actinometric actinometrical actinometry actinomorphic actinomorphous actinomorphy actinomycete actinomycetous actinomycin actinomycoma actinomycosis actinomycotic actinon actinoneuritis actinophone actinophonic actinophore actinophorous actinophryan actinopraxis actinopteran actinopterous actinopterygian actinopterygious actinoscopy actinosoma actinosome actinost actinostereoscopy actinostomal actinostome actinotherapeutic actinotherapeutics actinotherapy actinotoxemia actinotrichium actinotrocha actinouranium actinozoal actinozoan actinozoon actinula action actionable actionably actional actionary actioner actionize actionless activable activate activation activator active actively activeness activin activism activist activital activity activize actless actomyosin acton actor actorship actress actu actual actualism actualist actualistic actuality actualization actualize actually actualness actuarial actuarially actuarian actuary actuaryship actuation actuator acture acturience actutate acuaesthesia acuate acuation acuclosure acuductor acuesthesia acuity aculea aculeate aculeated aculeiform aculeolate aculeolus aculeus acumen acuminate acumination acuminose acuminous acuminulate acupress acupressure acupunctuate acupunctuation acupuncturation acupuncturator acupuncture acurative acushla acutangular acutate acute acutely acutenaculum acuteness acutiator acutifoliate acutilingual acutilobate acutiplantar acutish acutograve acutonodose acutorsion acyanoblepsia acyanopsia acyclic acyesis acyetic acyl acylamido acylamidobenzene acylamino acylate acylation acylogen acyloin acyloxy acyloxymethane acyrological acyrology acystia ad adactyl adactylia adactylism adactylous adad adage adagial adagietto adagio adamant adamantean adamantine adamantinoma adamantoblast adamantoblastoma adamantoid adamantoma adamas adambulacral adamellite adamine adamite adamsite adance adangle adapid adapt adaptability adaptable adaptation adaptational adaptationally adaptative adaptedness adapter adaption adaptional adaptionism adaptitude adaptive adaptively adaptiveness adaptometer adaptor adaptorial adarme adat adati adatom adaunt adaw adawe adawlut adawn adaxial aday adays adazzle adcraft add adda addability addable addax addebted added addedly addend addenda addendum adder adderbolt adderfish adderspit adderwort addibility addible addicent addict addicted addictedness addiction addiment additament additamentary addition additional additionally additionary additionist addititious additive additively additivity additory addle addlebrain addlebrained addlehead addleheaded addleheadedly addleheadedness addlement addleness addlepate addlepated addlepatedness addleplot addlings addlins addorsed address addressee addresser addressful addressor addrest adduce adducent adducer adducible adduct adduction adductive adductor ade adead adeem adeep adelarthrosomatous adeling adelite adelocerous adelocodonic adelomorphic adelomorphous adelopod adelphogamy adelpholite adelphophagy ademonist adempted ademption adenalgia adenalgy adenase adenasthenia adendric adendritic adenectomy adenectopia adenectopic adenemphractic adenemphraxis adenia adeniform adenine adenitis adenization adenoacanthoma adenoblast adenocancroid adenocarcinoma adenocarcinomatous adenocele adenocellulitis adenochondroma adenochondrosarcoma adenochrome adenocyst adenocystoma adenocystomatous adenodermia adenodiastasis adenodynia adenofibroma adenofibrosis adenogenesis adenogenous adenographer adenographic adenographical adenography adenohypersthenia adenoid adenoidal adenoidism adenoliomyofibroma adenolipoma adenolipomatosis adenologaditis adenological adenology adenolymphocele adenolymphoma adenoma adenomalacia adenomatome adenomatous adenomeningeal adenometritis adenomycosis adenomyofibroma adenomyoma adenomyxoma adenomyxosarcoma adenoncus adenoneural adenoneure adenopathy adenopharyngeal adenopharyngitis adenophlegmon adenophore adenophorous adenophthalmia adenophyllous adenophyma adenopodous adenosarcoma adenosclerosis adenose adenosine adenosis adenostemonous adenotome adenotomic adenotomy adenotyphoid adenotyphus adenyl adenylic adephagan adephagia adephagous adept adeptness adeptship adequacy adequate adequately adequateness adequation adequative adermia adermin adet adevism adfected adfix adfluxion adglutinate adhaka adhamant adharma adhere adherence adherency adherent adherently adherer adherescence adherescent adhesion adhesional adhesive adhesively adhesivemeter adhesiveness adhibit adhibition adiabatic adiabatically adiabolist adiactinic adiadochokinesis adiagnostic adiantiform adiaphon adiaphonon adiaphoral adiaphoresis adiaphoretic adiaphorism adiaphorist adiaphoristic adiaphorite adiaphoron adiaphorous adiate adiathermal adiathermancy adiathermanous adiathermic adiathetic adiation adicity adieu adieux adigranth adinidan adinole adion adipate adipescent adipic adipinic adipocele adipocellulose adipocere adipoceriform adipocerous adipocyte adipofibroma adipogenic adipogenous adipoid adipolysis adipolytic adipoma adipomatous adipometer adipopexia adipopexis adipose adiposeness adiposis adiposity adiposogenital adiposuria adipous adipsia adipsic adipsous adipsy adipyl adit adital aditus adjacency adjacent adjacently adjag adject adjection adjectional adjectival adjectivally adjective adjectively adjectivism adjectivitis adjiger adjoin adjoined adjoinedly adjoining adjoint adjourn adjournal adjournment adjudge adjudgeable adjudger adjudgment adjudicate adjudication adjudicative adjudicator adjudicature adjunct adjunction adjunctive adjunctively adjunctly adjuration adjuratory adjure adjurer adjust adjustable adjustably adjustage adjustation adjuster adjustive adjustment adjutage adjutancy adjutant adjutantship adjutorious adjutory adjutrice adjuvant adlay adless adlet adlumidine adlumine adman admarginate admaxillary admeasure admeasurement admeasurer admedial admedian admensuration admi adminicle adminicula adminicular adminiculary adminiculate adminiculation adminiculum administer administerd administerial administrable administrant administrate administration administrational administrative administratively administrator administratorship administratress administratrices administratrix admirability admirable admirableness admirably admiral admiralship admiralty admiration admirative admirator admire admired admiredly admirer admiring admiringly admissibility admissible admissibleness admissibly admission admissive admissory admit admittable admittance admitted admittedly admittee admitter admittible admix admixtion admixture admonish admonisher admonishingly admonishment admonition admonitioner admonitionist admonitive admonitively admonitor admonitorial admonitorily admonitory admonitrix admortization adnascence adnascent adnate adnation adnephrine adnerval adneural adnex adnexal adnexed adnexitis adnexopexy adnominal adnominally adnomination adnoun ado adobe adolesce adolescence adolescency adolescent adolescently adonidin adonin adonite adonitol adonize adoperate adoperation adopt adoptability adoptable adoptant adoptative adopted adoptedly adoptee adopter adoptian adoptianism adoptianist adoption adoptional adoptionism adoptionist adoptious adoptive adoptively adorability adorable adorableness adorably adoral adorally adorant adoration adoratory adore adorer adoringly adorn adorner adorningly adornment adosculation adossed adoulie adown adoxaceous adoxography adoxy adoze adpao adpress adpromission adradial adradially adradius adread adream adreamed adreamt adrectal adrenal adrenalectomize adrenalectomy adrenaline adrenalize adrenalone adrenergic adrenin adrenine adrenochrome adrenocortical adrenocorticotropic adrenolysis adrenolytic adrenotropic adrift adrip adroit adroitly adroitness adroop adrop adrostral adrowse adrue adry adsbud adscendent adscititious adscititiously adscript adscripted adscription adscriptitious adscriptitius adscriptive adsessor adsheart adsignification adsignify adsmith adsmithing adsorb adsorbable adsorbate adsorbent adsorption adsorptive adstipulate adstipulation adstipulator adterminal adtevac adular adularescence adularia adulate adulation adulator adulatory adulatress adult adulter adulterant adulterate adulterately adulterateness adulteration adulterator adulterer adulteress adulterine adulterize adulterous adulterously adultery adulthood adulticidal adulticide adultness adultoid adumbral adumbrant adumbrate adumbration adumbrative adumbratively adunc aduncate aduncated aduncity aduncous adusk adust adustion adustiosis advance advanceable advanced advancedness advancement advancer advancing advancingly advancive advantage advantageous advantageously advantageousness advection advectitious advective advehent advene advenience advenient advential adventitia adventitious adventitiously adventitiousness adventive adventual adventure adventureful adventurement adventurer adventureship adventuresome adventuresomely adventuresomeness adventuress adventurish adventurous adventurously adventurousness adverb adverbial adverbiality adverbialize adverbially adverbiation adversant adversaria adversarious adversary adversative adversatively adverse adversely adverseness adversifoliate adversifolious adversity advert advertence advertency advertent advertently advertisable advertise advertisee advertisement advertiser advertising advice adviceful advisability advisable advisableness advisably advisal advisatory advise advised advisedly advisedness advisee advisement adviser advisership advisive advisiveness advisor advisorily advisory advocacy advocate advocateship advocatess advocation advocator advocatory advocatress advocatrice advocatrix advolution advowee advowson ady adynamia adynamic adynamy adyta adyton adytum adz adze adzer adzooks ae aecial aecidial aecidioform aecidiospore aecidiostage aecidium aeciospore aeciostage aecioteliospore aeciotelium aecium aedeagus aedicula aedile aedileship aedilian aedilic aedilitian aedility aedoeagus aefald aefaldness aefaldy aefauld aegagropila aegagropile aegagrus aegerian aegeriid aegicrania aegirine aegirinolite aegirite aegis aegithognathism aegithognathous aegrotant aegyptilla aegyrite aeluroid aelurophobe aelurophobia aeluropodous aenach aenean aeneolithic aeneous aenigmatite aeolharmonica aeolid aeolina aeoline aeolipile aeolistic aeolodicon aeolodion aeolomelodicon aeolopantalon aeolotropic aeolotropism aeolotropy aeolsklavier aeon aeonial aeonian aeonist aequoreal aer aerage aerarian aerarium aerate aeration aerator aerenchyma aerenterectasia aerial aerialist aeriality aerially aerialness aeric aerical aerie aeried aerifaction aeriferous aerification aeriform aerify aero aerobate aerobatic aerobatics aerobe aerobian aerobic aerobically aerobiologic aerobiological aerobiologically aerobiologist aerobiology aerobion aerobiont aerobioscope aerobiosis aerobiotic aerobiotically aerobious aerobium aeroboat aerobranchiate aerobus aerocamera aerocartograph aerocolpos aerocraft aerocurve aerocyst aerodermectasia aerodone aerodonetic aerodonetics aerodrome aerodromics aerodynamic aerodynamical aerodynamicist aerodynamics aerodyne aeroembolism aeroenterectasia aerofoil aerogel aerogen aerogenes aerogenesis aerogenic aerogenically aerogenous aerogeologist aerogeology aerognosy aerogram aerograph aerographer aerographic aerographical aerographics aerography aerogun aerohydrodynamic aerohydropathy aerohydroplane aerohydrotherapy aerohydrous aeroides aerolite aerolith aerolithology aerolitic aerolitics aerologic aerological aerologist aerology aeromaechanic aeromancer aeromancy aeromantic aeromarine aeromechanical aeromechanics aerometeorograph aerometer aerometric aerometry aeromotor aeronat aeronaut aeronautic aeronautical aeronautically aeronautics aeronautism aeronef aeroneurosis aeropathy aeroperitoneum aeroperitonia aerophagia aerophagist aerophagy aerophane aerophilatelic aerophilatelist aerophilately aerophile aerophilic aerophilous aerophobia aerophobic aerophone aerophor aerophore aerophotography aerophysical aerophysics aerophyte aeroplane aeroplaner aeroplanist aeropleustic aeroporotomy aeroscepsis aeroscepsy aeroscope aeroscopic aeroscopically aeroscopy aerose aerosiderite aerosiderolite aerosol aerosphere aerosporin aerostat aerostatic aerostatical aerostatics aerostation aerosteam aerotactic aerotaxis aerotechnical aerotherapeutics aerotherapy aerotonometer aerotonometric aerotonometry aerotropic aerotropism aeroyacht aeruginous aerugo aery aes aeschynomenous aesculaceous aesthete aesthetic aesthetical aesthetically aesthetician aestheticism aestheticist aestheticize aesthetics aesthiology aesthophysiology aethalioid aethalium aetheogam aetheogamic aetheogamous aethered aethogen aethrioscope aetiogenic aetiotropic aetiotropically aetosaur aetosaurian aevia aface afaint afar afara afear afeard afeared afebrile afernan afetal affa affability affable affableness affably affabrous affair affaite affect affectable affectate affectation affectationist affected affectedly affectedness affecter affectibility affectible affecting affectingly affection affectional affectionally affectionate affectionately affectionateness affectioned affectious affective affectively affectivity affeer affeerer affeerment affeir affenpinscher affenspalte afferent affettuoso affiance affiancer affiant affidation affidavit affidavy affiliable affiliate affiliation affinal affination affine affined affinely affinitative affinitatively affinite affinition affinitive affinity affirm affirmable affirmably affirmance affirmant affirmation affirmative affirmatively affirmatory affirmer affirmingly affix affixal affixation affixer affixion affixture afflation afflatus afflict afflicted afflictedness afflicter afflicting afflictingly affliction afflictionless afflictive afflictively affluence affluent affluently affluentness afflux affluxion afforce afforcement afford affordable afforest afforestable afforestation afforestment afformative affranchise affranchisement affray affrayer affreight affreighter affreightment affricate affricated affrication affricative affright affrighted affrightedly affrighter affrightful affrightfully affrightingly affrightment affront affronte affronted affrontedly affrontedness affronter affronting affrontingly affrontingness affrontive affrontiveness affrontment affuse affusion affy afghani afield afikomen afire aflagellar aflame aflare aflat aflaunt aflicker aflight afloat aflow aflower afluking aflush aflutter afoam afoot afore aforehand aforenamed aforesaid aforethought aforetime aforetimes afortiori afoul afraid afraidness afreet afresh afret afront afrown aft aftaba after afteract afterage afterattack afterband afterbeat afterbirth afterblow afterbody afterbrain afterbreach afterbreast afterburner afterburning aftercare aftercareer aftercast aftercataract aftercause afterchance afterchrome afterchurch afterclap afterclause aftercome aftercomer aftercoming aftercooler aftercost aftercourse aftercrop aftercure afterdamp afterdate afterdays afterdeck afterdinner afterdrain afterdrops aftereffect afterend aftereye afterfall afterfame afterfeed afterfermentation afterform afterfriend afterfruits afterfuture aftergame aftergas afterglide afterglow aftergo aftergood aftergrass aftergrave aftergrief aftergrind aftergrowth afterguard afterguns afterhand afterharm afterhatch afterhelp afterhend afterhold afterhope afterhours afterimage afterimpression afterings afterking afterknowledge afterlife afterlifetime afterlight afterloss afterlove aftermark aftermarriage aftermass aftermast aftermath aftermatter aftermeal aftermilk aftermost afternight afternoon afternoons afternose afternote afteroar afterpain afterpart afterpast afterpeak afterpiece afterplanting afterplay afterpressure afterproof afterrake afterreckoning afterrider afterripening afterroll afterschool aftersend aftersensation aftershaft aftershafted aftershine aftership aftershock aftersong aftersound afterspeech afterspring afterstain afterstate afterstorm afterstrain afterstretch afterstudy afterswarm afterswarming afterswell aftertan aftertask aftertaste afterthinker afterthought afterthoughted afterthrift aftertime aftertimes aftertouch aftertreatment aftertrial afterturn aftervision afterwale afterwar afterward afterwards afterwash afterwhile afterwisdom afterwise afterwit afterwitted afterwork afterworking afterworld afterwrath afterwrist aftmost aftosa aftward aftwards afunction afunctional afwillite aga agabanee agacante agacella again against againstand agal agalactia agalactic agalactous agalawood agalaxia agalaxy agalite agalloch agallochum agallop agalma agalmatolite agalwood agama agamete agami agamian agamic agamically agamid agamobium agamogenesis agamogenetic agamogenetically agamogony agamoid agamont agamospore agamous agamy aganglionic agape agapetae agapeti agapetid agar agaric agaricaceae agaricaceous agaricic agariciform agaricin agaricine agaricoid agarita agarwal agasp agastric agastroneuria agate agateware agathin agathism agathist agathodaemon agathodaemonic agathokakological agathology agatiferous agatiform agatine agatize agatoid agaty agavose agaze agazed age aged agedly agedness agee ageless agelessness agelong agen agency agenda agendum agenesia agenesic agenesis agennetic agent agentess agential agentival agentive agentry agentship ageometrical ager ageusia ageusic ageustia agger aggerate aggeration aggerose agglomerant agglomerate agglomerated agglomeratic agglomeration agglomerative agglomerator agglutinability agglutinable agglutinant agglutinate agglutination agglutinationist agglutinative agglutinator agglutinin agglutinize agglutinogen agglutinogenic agglutinoid agglutinoscope agglutogenic aggradation aggradational aggrade aggrandizable aggrandize aggrandizement aggrandizer aggrate aggravate aggravating aggravatingly aggravation aggravative aggravator aggregable aggregant aggregate aggregately aggregateness aggregation aggregative aggregator aggregatory aggress aggressin aggression aggressionist aggressive aggressively aggressiveness aggressor aggrievance aggrieve aggrieved aggrievedly aggrievedness aggrievement aggroup aggroupment aggry aggur agha aghanee aghast aghastness agilawood agile agilely agileness agility agillawood aging agio agiotage agist agistator agistment agistor agitable agitant agitate agitatedly agitation agitational agitationist agitative agitator agitatorial agitatrix agitprop agla aglance aglaozonia aglare agleaf agleam aglet aglethead agley aglimmer aglint aglitter aglobulia aglossal aglossate aglossia aglow aglucon aglutition aglycosuric aglyphodont aglyphous agmatine agmatology agminate agminated agnail agname agnamed agnate agnathia agnathic agnathostomatous agnathous agnatic agnatically agnation agnel agnification agnize agnoiology agnomen agnomical agnominal agnomination agnosia agnosis agnostic agnostically agnosticism agnosy agnus ago agog agoge agogic agogics agoho agoing agomensin agomphiasis agomphious agomphosis agon agonal agone agoniada agoniadin agoniatite agonic agonied agonist agonistarch agonistic agonistically agonistics agonium agonize agonizedly agonizer agonizingly agonothete agonothetic agony agora agoranome agoraphobia agouara agouta agouti agpaite agpaitic agraffee agrah agral agrammatical agrammatism agranulocyte agranulocytosis agranuloplastic agraphia agraphic agrarian agrarianism agrarianize agrarianly agre agree agreeability agreeable agreeableness agreeably agreed agreeing agreeingly agreement agreer agregation agrege agrestal agrestial agrestian agrestic agria agricere agricole agricolist agricolite agricolous agricultor agricultural agriculturalist agriculturally agriculture agriculturer agriculturist agrimony agrimotor agrin agriological agriologist agriology agrionid agrise agrito agroan agrobiologic agrobiological agrobiologically agrobiologist agrobiology agrogeological agrogeologically agrogeology agrologic agrological agrologically agrology agrom agromyzid agronome agronomial agronomic agronomical agronomics agronomist agronomy agroof agrope agrosteral agrostographer agrostographic agrostographical agrostography agrostologic agrostological agrostologist agrostology agrotechny aground agrufe agruif agrypnia agrypnotic agsam agua aguacate aguavina ague aguelike agueproof agueweed aguey aguilarite aguilawood aguinaldo aguirage aguish aguishly aguishness agunah agush agust agy agynarious agynary agynous agyrate agyria ah aha ahaaina ahankara ahartalav ahaunch ahead aheap ahem ahey ahimsa ahind ahint ahluwalia ahmadi aho ahong ahorse ahorseback ahoy ahsan ahu ahuatle ahuehuete ahull ahum ahungered ahungry ahunt ahura ahush ahwal ahypnia ai aichmophobia aid aidable aidance aidant aide aider aidful aidless aiel aigialosaur aiglet aigremore aigrette aiguille aiguillesque aiguillette aiguilletted aikinite ail ailantery ailanthic ailantine ailanto aile aileron ailette ailing aillt ailment ailsyte ailuro ailuroid ailweed aim aimara aimer aimful aimfully aiming aimless aimlessly aimlessness aimworthiness ainaleh ainhum ainoi ainsell aint aion aionial air airable airampo airan airbound airbrained airbrush aircraft aircraftman aircraftsman aircraftswoman aircraftwoman aircrew aircrewman airdock airdrome airdrop aire airedale airer airfield airfoil airframe airfreight airfreighter airgraphics airhead airiferous airified airily airiness airing airish airless airlift airlike airliner airmail airman airmanship airmark airmarker airmonger airohydrogen airometer airpark airphobia airplane airplanist airport airproof airscape airscrew airship airsick airsickness airstrip airt airtight airtightly airtightness airward airwards airway airwayman airwoman airworthiness airworthy airy aischrolatreia aiseweed aisle aisled aisleless aisling aisteoir ait aitch aitchbone aitchless aitchpiece aitesis aithochroi aition aitiotropic aiwan aizle aizoaceous ajaja ajangle ajar ajari ajava ajhar ajivika ajog ajoint ajowan ajutment ak aka akala akalimba akamatsu akaroa akasa akazga akazgine akcheh ake akeake akebi akee akeki akeley akenobeite akepiro akerite akey akhoond akhrot akhyana akia akimbo akin akindle akinesia akinesic akinesis akinete akinetic akmudar akmuddar aknee ako akoasm akoasma akoluthia akonge akov akpek akra akroasis akrochordite akroterion aku akuammine akule akund al ala alabamide alabamine alabandite alabarch alabaster alabastos alabastrian alabastrine alabastrites alabastron alabastrum alacha alack alackaday alacreatine alacreatinine alacrify alacritous alacrity alada alaihi alaite alala alalite alalonga alalunga alalus alameda alamo alamodality alamonti alamosite alamoth alan aland alangin alangine alani alanine alannah alantic alantin alantol alantolactone alantolic alanyl alar alares alarm alarmable alarmed alarmedly alarming alarmingly alarmism alarmist alarum alary alas alaskaite alaskite alastrim alate alated alatern alaternus alation alaudine alb alba albacore albahaca alban albanite albarco albardine albarello albarium albaspidin albata albatross albe albedo albedograph albee albeit albertin albertite albertustaler albertype albescence albescent albespine albetad albicans albicant albication albiculi albification albificative albiflorous albify albinal albiness albinic albinism albinistic albino albinoism albinotic albinuria albite albitic albitite albitization albitophyre albocarbon albocinereous albocracy albolite albolith albopannin albopruinose alboranite albronze albuginea albugineous albuginitis albugo album albumean albumen albumenization albumenize albumenizer albumimeter albumin albuminate albuminaturia albuminiferous albuminiform albuminimeter albuminimetry albuminiparous albuminization albuminize albuminocholia albuminofibrin albuminogenous albuminoid albuminoidal albuminolysis albuminometer albuminometry albuminone albuminorrhea albuminoscope albuminose albuminosis albuminous albuminousness albuminuria albuminuric albumoid albumoscope albumose albumosuria alburn alburnous alburnum albus albutannin alcaide alcalde alcaldeship alcaldia alcalizate alcamine alcanna alcarraza alcatras alcazar alcelaphine alchemic alchemical alchemically alchemist alchemistic alchemistical alchemistry alchemize alchemy alchera alcheringa alchimy alchitran alchochoden alchymy alcidine alcine alclad alco alcoate alcogel alcogene alcohate alcohol alcoholate alcoholature alcoholdom alcoholemia alcoholic alcoholically alcoholicity alcoholimeter alcoholism alcoholist alcoholizable alcoholization alcoholize alcoholmeter alcoholmetric alcoholomania alcoholometer alcoholometric alcoholometrical alcoholometry alcoholophilia alcoholuria alcoholysis alcoholytic alcornoco alcornoque alcosol alcove alcovinometer alcyon alcyonacean alcyonarian alcyonic alcyoniform alcyonoid aldamine aldane aldazin aldazine aldeament aldebaranium aldehol aldehydase aldehyde aldehydic aldehydine aldehydrol alder alderman aldermanate aldermancy aldermaness aldermanic aldermanical aldermanity aldermanlike aldermanly aldermanry aldermanship aldern alderwoman aldim aldime aldimine aldine aldoheptose aldohexose aldoketene aldol aldolization aldolize aldononose aldopentose aldose aldoside aldoxime ale aleak aleatory alebench aleberry alec alecithal alecize aleconner alecost alectoria alectoridine alectorioid alectoromachy alectoromancy alectoromorphous alectoropodous alectryomachy alectryomancy alecup alee alef alefnull aleft alefzero alegar alehoof alehouse alem alemana alembic alembicate alembroth alemite alemmal alemonger alen aleph alephs alephzero alepidote alepole alepot alerce alerse alert alertly alertness alesan alestake aletap aletaster alethiology alethopteis alethopteroid alethoscope aletocyte alette aleukemic aleuritic aleuromancy aleurometer aleuronat aleurone aleuronic aleuroscope aleutite alevin alewife alexanders alexandrite alexia alexic alexin alexinic alexipharmacon alexipharmacum alexipharmic alexipharmical alexipyretic alexiteric alexiterical aleyard aleyrodid alf alfa alfaje alfalfa alfaqui alfaquin alfenide alfet alfilaria alfileria alfilerilla alfilerillo alfiona alfonsin alfonso alforja alfresco alfridaric alfridary alga algae algaecide algaeological algaeologist algaeology algaesthesia algaesthesis algal algalia algarroba algarrobilla algarrobin algate algebra algebraic algebraical algebraically algebraist algebraization algebraize algedo algedonic algedonics algefacient algerine algesia algesic algesis algesthesis algetic algic algid algidity algidness algific algin alginate algine alginic alginuresis algiomuscular algist algivorous algocyan algodoncillo algodonite algoesthesiometer algogenic algoid algolagnia algolagnic algolagnist algolagny algological algologist algology algometer algometric algometrical algometrically algometry algophilia algophilist algophobia algor algorism algorismic algorist algoristic algorithm algorithmic algosis algous algovite algraphic algraphy alguazil algum alhenna alias alibangbang alibi alibility alible alichel alicoche alictisal alicyclic alidade alien alienability alienable alienage alienate alienation alienator aliency alienee aliener alienicola alienigenate alienism alienist alienize alienor alienship aliethmoid aliethmoidal alif aliferous aliform aligerous alight align aligner alignment aligreek aliipoe alike alikeness alikewise alilonghi alima aliment alimental alimentally alimentariness alimentary alimentation alimentative alimentatively alimentativeness alimenter alimentic alimentive alimentiveness alimentotherapy alimentum alimonied alimony alin alinasal alineation alintatao aliofar alipata aliped aliphatic alipterion aliptes aliptic aliquant aliquot aliseptal alish alisier alismaceous alismad alismal alismoid aliso alison alisonite alisp alisphenoid alisphenoidal alist alit alite alitrunk aliturgic aliturgical aliunde alive aliveness alivincular aliyah alizarate alizari alizarin aljoba alk alkahest alkahestic alkahestica alkahestical alkalamide alkalemia alkalescence alkalescency alkalescent alkali alkalic alkaliferous alkalifiable alkalify alkaligen alkaligenous alkalimeter alkalimetric alkalimetrical alkalimetrically alkalimetry alkaline alkalinity alkalinization alkalinize alkalinuria alkalizable alkalizate alkalization alkalize alkalizer alkaloid alkaloidal alkalometry alkalosis alkalous alkamin alkamine alkane alkanet alkannin alkapton alkaptonuria alkaptonuric alkargen alkarsin alkekengi alkene alkenna alkenyl alkermes alkide alkine alkool alkoxide alkoxy alkoxyl alky alkyd alkyl alkylamine alkylate alkylation alkylene alkylic alkylidene alkylize alkylogen alkyloxy alkyne all allabuta allactite allaeanthus allagite allagophyllous allagostemonous allalinite allamotti allan allanite allanitic allantiasis allantochorion allantoic allantoid allantoidal allantoidean allantoidian allantoin allantoinase allantoinuria allantois allantoxaidin allanturic allassotonic allative allatrate allay allayer allayment allbone allecret allectory allegate allegation allegator allege allegeable allegedly allegement alleger allegiance allegiancy allegiant allegoric allegorical allegorically allegoricalness allegorism allegorist allegorister allegoristic allegorization allegorize allegorizer allegory allegretto allegro allele allelic allelism allelocatalytic allelomorph allelomorphic allelomorphism allelotropic allelotropism allelotropy alleluia alleluiatic allemand allemande allemontite allenarly allene aller allergen allergenic allergia allergic allergin allergist allergy allerion allesthesia alleviate alleviatingly alleviation alleviative alleviator alleviatory alley alleyed alleyite alleyway allgood allheal alliable alliably alliaceous alliance alliancer allicampane allice allicholly alliciency allicient allied allies alligate alligator alligatored allineate allineation allision alliteral alliterate alliteration alliterational alliterationist alliterative alliteratively alliterativeness alliterator allivalite allmouth allness allocable allocaffeine allocatable allocate allocatee allocation allocator allochetia allochetite allochezia allochiral allochirally allochiria allochlorophyll allochroic allochroite allochromatic allochroous allochthonous allocinnamic alloclase alloclasite allocochick allocrotonic allocryptic allocute allocution allocutive allocyanine allodelphite allodesmism alloeosis alloeostropha alloeotic alloerotic alloerotism allogamous allogamy allogene allogeneity allogeneous allogenic allogenically allograph alloiogenesis alloisomer alloisomeric alloisomerism allokinesis allokinetic allokurtic allomerism allomerous allometric allometry allomorph allomorphic allomorphism allomorphite allomucic allonomous allonym allonymous allopalladium allopath allopathetic allopathetically allopathic allopathically allopathist allopathy allopatric allopatrically allopatry allopelagic allophanamide allophanates allophane allophanic allophone allophyle allophylian allophylic allophytoid alloplasm alloplasmatic alloplasmic alloplast alloplastic alloplasty alloploidy allopolyploid allopsychic alloquial alloquialism alloquy allorhythmia allorrhyhmia allorrhythmic allosaur allose allosematic allosome allosyndesis allosyndetic allot allotee allotelluric allotheism allothigene allothigenetic allothigenetically allothigenic allothigenous allothimorph allothimorphic allothogenic allothogenous allotment allotriodontia allotriomorphic allotriophagia allotriophagy allotriuria allotrope allotrophic allotropic allotropical allotropically allotropicity allotropism allotropize allotropous allotropy allotrylic allottable allottee allotter allotype allotypical allover allow allowable allowableness allowably allowance allowedly allower alloxan alloxanate alloxanic alloxantin alloxuraemia alloxuremia alloxuric alloxyproteic alloy alloyage allozooid allseed allspice allthing allthorn alltud allude allure allurement allurer alluring alluringly alluringness allusion allusive allusively allusiveness alluvia alluvial alluviate alluviation alluvion alluvious alluvium allwhere allwhither allwork ally allyl allylamine allylate allylation allylene allylic allylthiourea alma almaciga almacigo almadia almadie almagest almagra almanac almandine almandite alme almeidina almemar almeriite almightily almightiness almighty almique almirah almochoden almoign almon almond almondy almoner almonership almonry almost almous alms almsdeed almsfolk almsful almsgiver almsgiving almshouse almsman almswoman almucantar almuce almud almude almug almuten aln alnage alnager alnagership alnein alnico alniresinol alniviridol alnoite alnuin alo alochia alod alodial alodialism alodialist alodiality alodially alodian alodiary alodification alodium alody aloe aloed aloelike aloemodin aloeroot aloesol aloeswood aloetic aloetical aloewood aloft alogia alogical alogically alogism alogy aloid aloin aloisiite aloma alomancy alone aloneness along alongshore alongshoreman alongside alongst aloof aloofly aloofness aloose alop alopecia alopecist alopecoid alopeke alose alouatte aloud alow alowe alp alpaca alpasotes alpeen alpenglow alpenhorn alpenstock alpenstocker alpestral alpestrian alpestrine alpha alphabet alphabetarian alphabetic alphabetical alphabetically alphabetics alphabetiform alphabetism alphabetist alphabetization alphabetize alphabetizer alphatoluic alphenic alphitomancy alphitomorphous alphol alphorn alphos alphosis alphyl alpieu alpigene alpine alpinely alpinery alpinesque alpist alqueire alquier alquifou alraun alreadiness already alright alrighty alroot alruna alsbachite alsinaceous also alsoon alstonidine alstonine alstonite alsweill alt altaite altar altarage altared altarist altarlet altarpiece altarwise altazimuth alter alterability alterable alterableness alterably alterant alterate alteration alterative altercate altercation altercative alteregoism alteregoistic alterer alterity altern alternacy alternance alternant alternariose alternate alternately alternateness alternating alternatingly alternation alternationist alternative alternatively alternativeness alternativity alternator alterne alternifoliate alternipetalous alternipinnate alternisepalous alternize alterocentric althaein althea althein altheine althionic altho althorn although altigraph altilik altiloquence altiloquent altimeter altimetrical altimetrically altimetry altin altincar altingiaceous altininck altiplano altiscope altisonant altisonous altissimo altitude altitudinal altitudinarian alto altogether altogetherness altometer altoun altrices altricial altropathy altrose altruism altruist altruistic altruistically altschin altun aludel alula alular alulet alum alumbloom alumic alumiferous alumina aluminaphone aluminate alumine aluminic aluminide aluminiferous aluminiform aluminish aluminite aluminium aluminize aluminoferric aluminographic aluminography aluminose aluminosilicate aluminosis aluminosity aluminothermic aluminothermics aluminothermy aluminotype aluminous aluminum aluminyl alumish alumite alumium alumna alumnae alumnal alumni alumniate alumnus alumohydrocalcite alumroot aluniferous alunite alunogen alupag alure alurgite alushtite aluta alutaceous alvar alvearium alveary alveloz alveola alveolar alveolariform alveolary alveolate alveolated alveolation alveole alveolectomy alveoli alveoliform alveolite alveolitis alveoloclasia alveolocondylean alveolodental alveololabial alveololingual alveolonasal alveolosubnasal alveolotomy alveolus alveus alviducous alvine alvite alvus alway always aly alycompaine alymphia alymphopotent alypin alysson alytarch am ama amaas amability amacratic amacrinal amacrine amadavat amadelphous amadou amaga amah amain amaister amakebe amala amalaita amalaka amalgam amalgamable amalgamate amalgamation amalgamationist amalgamative amalgamatize amalgamator amalgamist amalgamization amalgamize amaltas amamau amandin amang amani amania amanitin amanitine amanori amanous amantillo amanuenses amanuensis amapa amar amarantaceous amaranth amaranthaceous amaranthine amaranthoid amarantite amarelle amarevole amargoso amarillo amarin amarine amaritude amarity amaroid amaroidal amarthritis amaryllid amaryllidaceous amaryllideous amasesis amass amassable amasser amassment amasthenic amastia amasty amaterialistic amateur amateurish amateurishly amateurishness amateurism amateurship amative amatively amativeness amatol amatorial amatorially amatorian amatorious amatory amatrice amatungula amaurosis amaurotic amaze amazed amazedly amazedness amazeful amazement amazia amazing amazingly amazonite amba ambage ambagiosity ambagious ambagiously ambagiousness ambagitory ambalam amban ambar ambaree ambarella ambary ambash ambassade ambassador ambassadorial ambassadorially ambassadorship ambassadress ambassage ambassy ambatch ambatoarinite ambay ambeer amber amberfish ambergris amberiferous amberite amberoid amberous ambery ambicolorate ambicoloration ambidexter ambidexterity ambidextral ambidextrous ambidextrously ambidextrousness ambience ambiency ambiens ambient ambier ambigenous ambiguity ambiguous ambiguously ambiguousness ambilateral ambilateralaterally ambilaterality ambilevous ambilian ambilogy ambiopia ambiparous ambisinister ambisinistrous ambisporangiate ambisyllabic ambit ambital ambitendency ambition ambitionist ambitionless ambitionlessly ambitious ambitiously ambitiousness ambitty ambitus ambivalence ambivalency ambivalent ambivert amble ambler ambling amblingly amblotic amblyacousia amblyaphia amblychromatic amblygeusia amblygon amblygonal amblygonite amblyocarpous amblyope amblyopia amblyopic amblyoscope amblypod amblypodous amblystegite ambo amboceptoid amboceptor ambomalleal ambon ambonite ambos ambosexous ambosexual ambrain ambrein ambrette ambrite ambroid ambrology ambrose ambrosia ambrosiac ambrosiaceous ambrosial ambrosially ambrosian ambrosiate ambrosin ambrosine ambrosterol ambrotype ambry ambsace ambulacral ambulacriform ambulacrum ambulance ambulancer ambulant ambulate ambulatio ambulation ambulative ambulator ambulatorial ambulatorium ambulatory ambuling ambulomancy amburbial ambury ambuscade ambuscader ambush ambusher ambushment amchoor ame amebiform ameed ameen amelcorn amelia amelification ameliorable ameliorableness ameliorant ameliorate amelioration ameliorativ ameliorative ameliorator amellus ameloblast ameloblastic amelu amelus amen amenability amenable amenableness amenably amend amendable amendableness amendatory amende amender amendment amends amene amenia amenity amenorrhea amenorrheal amenorrheic amenorrhoea ament amentaceous amental amentia amentiferous amentiform amentulum amentum amerce amerceable amercement amercer amerciament americium amerism ameristic amesite ametabole ametabolia ametabolian ametabolic ametabolism ametabolous ametaboly ametallous amethodical amethodically amethyst amethystine ametoecious ametria ametrometer ametrope ametropia ametropic ametrous amgarn amhar amherstite amhran ami amiability amiable amiableness amiably amianth amianthiform amianthine amianthoid amianthoidal amianthus amic amicability amicable amicableness amicably amical amice amiced amicicide amicrobic amicron amicronucleate amid amidase amidate amidation amide amidic amidid amidide amidin amidine amido amidoacetal amidoacetic amidoacetophenone amidoaldehyde amidoazo amidoazobenzene amidoazobenzol amidocaffeine amidocapric amidofluorid amidofluoride amidogen amidoguaiacol amidohexose amidoketone amidol amidomyelin amidon amidophenol amidophosphoric amidoplast amidoplastid amidopyrine amidosuccinamic amidosulphonal amidothiazole amidoxime amidoxy amidoxyl amidrazone amidship amidships amidst amidstream amidulin amil amimia amimide amin aminate amination amine amini aminic aminity aminization aminize amino aminoacetal aminoacetanilide aminoacetic aminoacetone aminoacetophenetidine aminoacetophenone aminoacidemia aminoaciduria aminoanthraquinone aminoazobenzene aminobarbituric aminobenzaldehyde aminobenzamide aminobenzene aminobenzoic aminocaproic aminodiphenyl aminoethionic aminoformic aminogen aminoglutaric aminoguanidine aminoid aminoketone aminolipin aminolysis aminolytic aminomalonic aminomyelin aminophenol aminoplast aminoplastic aminopropionic aminopurine aminopyrine aminoquinoline aminosis aminosuccinamic aminosulphonic aminothiophen aminovaleric aminoxylol amir amiray amirship amiss amissibility amissible amissness amitosis amitotic amitotically amity amixia amla amli amlikar amlong amma amman ammelide ammelin ammeline ammer ammeter ammiaceous ammine amminochloride amminolysis amminolytic ammiolite ammo ammochaeta ammochryse ammocoete ammocoetes ammocoetid ammocoetiform ammocoetoid ammodytoid ammonal ammonate ammonation ammonia ammoniacal ammoniacum ammoniate ammoniation ammonic ammonical ammoniemia ammonification ammonifier ammonify ammoniojarosite ammonion ammonionitrate ammonite ammonitic ammoniticone ammonitiferous ammonitoid ammonium ammoniuria ammonization ammono ammonobasic ammonocarbonic ammonocarbonous ammonoid ammonoidean ammonolysis ammonolytic ammonolyze ammophilous ammoresinol ammotherapy ammu ammunition amnemonic amnesia amnesic amnestic amnesty amnia amniac amniatic amnic amnioallantoic amniocentesis amniochorial amnioclepsis amniomancy amnion amnionate amnionic amniorrhea amniote amniotic amniotitis amniotome amober amobyr amoeba amoebae amoebaean amoebaeum amoebalike amoeban amoebian amoebiasis amoebic amoebicide amoebid amoebiform amoebocyte amoeboid amoeboidism amoebous amoebula amok amoke amole amolilla amomal amomum among amongst amontillado amor amorado amoraic amoraim amoral amoralism amoralist amorality amoralize amoret amoretto amorism amorist amoristic amorosity amoroso amorous amorously amorousness amorphia amorphic amorphinism amorphism amorphophyte amorphotae amorphous amorphously amorphousness amorphus amorphy amort amortisseur amortizable amortization amortize amortizement amotion amotus amount amour amourette amovability amovable amove ampalaya ampalea ampangabeite ampasimenite ampelidaceous ampelideous ampelite ampelitic ampelographist ampelography ampelopsidin ampelopsin ampelotherapy amper amperage ampere amperemeter amperometer ampersand ampery amphanthium ampheclexis ampherotokous ampherotoky amphetamine amphiarthrodial amphiarthrosis amphiaster amphibalus amphibial amphibian amphibichnite amphibiety amphibiological amphibiology amphibion amphibiotic amphibious amphibiously amphibiousness amphibium amphiblastic amphiblastula amphiblestritis amphibole amphibolia amphibolic amphiboliferous amphiboline amphibolite amphibolitic amphibological amphibologically amphibologism amphibology amphibolous amphiboly amphibrach amphibrachic amphibryous amphicarpic amphicarpium amphicarpogenous amphicarpous amphicentric amphichroic amphichrom amphichromatic amphichrome amphicoelian amphicoelous amphicondylous amphicrania amphicreatinine amphicribral amphictyon amphictyonian amphictyonic amphictyony amphicyrtic amphicyrtous amphicytula amphid amphide amphidesmous amphidetic amphidiarthrosis amphidiploid amphidiploidy amphidisc amphidiscophoran amphierotic amphierotism amphigam amphigamous amphigastrium amphigastrula amphigean amphigen amphigene amphigenesis amphigenetic amphigenous amphigenously amphigonic amphigonium amphigonous amphigony amphigoric amphigory amphigouri amphikaryon amphilogism amphilogy amphimacer amphimictic amphimictical amphimictically amphimixis amphimorula amphineurous amphinucleus amphioxus amphipeptone amphiphloic amphiplatyan amphiploid amphiploidy amphipneust amphipneustic amphipod amphipodal amphipodan amphipodiform amphipodous amphiprostylar amphiprostyle amphiprotic amphipyrenin amphirhinal amphirhine amphisarca amphisbaena amphisbaenian amphisbaenic amphisbaenoid amphisbaenous amphiscians amphiscii amphispermous amphisporangiate amphispore amphistomatic amphistome amphistomoid amphistomous amphistylar amphistylic amphistyly amphitene amphitheater amphitheatered amphitheatral amphitheatric amphitheatrical amphitheatrically amphithecial amphithecium amphithect amphithyron amphitokal amphitokous amphitoky amphitriaene amphitrichous amphitropal amphitropous amphivasal amphivorous amphodarch amphodelite amphodiplopia amphogenous ampholyte amphopeptone amphophil amphophile amphophilic amphophilous amphora amphoral amphore amphorette amphoric amphoricity amphoriloquy amphorophony amphorous amphoteric ample amplectant ampleness amplexation amplexicaudate amplexicaul amplexicauline amplexifoliate amplexus ampliate ampliation ampliative amplicative amplidyne amplification amplificative amplificator amplificatory amplifier amplify amplitude amply ampollosity ampongue ampoule ampul ampulla ampullaceous ampullar ampullary ampullate ampullated ampulliform ampullitis ampullula amputate amputation amputational amputative amputator amputee ampyx amra amreeta amrita amsath amsel amt amtman amuck amuguis amula amulet amuletic amulla amunam amurca amurcosity amurcous amusable amuse amused amusedly amusee amusement amuser amusette amusia amusing amusingly amusingness amusive amusively amusiveness amutter amuyon amuyong amuze amvis amy amyelencephalia amyelencephalic amyelencephalous amyelia amyelic amyelinic amyelonic amyelous amygdal amygdala amygdalaceous amygdalase amygdalate amygdalectomy amygdalic amygdaliferous amygdaliform amygdalin amygdaline amygdalinic amygdalitis amygdaloid amygdaloidal amygdalolith amygdaloncus amygdalopathy amygdalothripsis amygdalotome amygdalotomy amygdonitrile amygdophenin amygdule amyl amylaceous amylamine amylan amylase amylate amylemia amylene amylenol amylic amylidene amyliferous amylin amylo amylocellulose amyloclastic amylocoagulase amylodextrin amylodyspepsia amylogen amylogenesis amylogenic amylohydrolysis amylohydrolytic amyloid amyloidal amyloidosis amyloleucite amylolysis amylolytic amylom amylometer amylon amylopectin amylophagia amylophosphate amylophosphoric amyloplast amyloplastic amyloplastid amylopsin amylose amylosis amylosynthesis amylum amyluria amynodont amyosthenia amyosthenic amyotaxia amyotonia amyotrophia amyotrophic amyotrophy amyous amyrin amyrol amyroot amyxorrhea amyxorrhoea an ana anabaptize anabasine anabasis anabasse anabata anabathmos anabatic anaberoga anabibazon anabiosis anabiotic anabo anabohitsite anabolic anabolin anabolism anabolite anabolize anabong anabranch anabrosis anabrotic anacahuita anacahuite anacalypsis anacampsis anacamptic anacamptically anacamptics anacamptometer anacanth anacanthine anacanthous anacara anacard anacardiaceous anacardic anacatadidymus anacatharsis anacathartic anacephalaeosis anacephalize anachorism anachromasis anachronic anachronical anachronically anachronism anachronismatical anachronist anachronistic anachronistical anachronistically anachronize anachronous anachronously anachueta anacid anacidity anaclasis anaclastic anaclastics anacleticum anaclinal anaclisis anaclitic anacoenosis anacoluthia anacoluthic anacoluthically anacoluthon anaconda anacrisis anacrogynae anacrogynous anacromyodian anacrotic anacrotism anacrusis anacrustic anacrustically anaculture anacusia anacusic anacusis anadem anadenia anadicrotic anadicrotism anadidymus anadiplosis anadipsia anadipsic anadrom anadromous anaematosis anaemia anaemic anaeretic anaerobation anaerobe anaerobia anaerobian anaerobic anaerobically anaerobies anaerobion anaerobiont anaerobiosis anaerobiotic anaerobiotically anaerobious anaerobism anaerobium anaerophyte anaeroplastic anaeroplasty anaesthesia anaesthesiant anaesthetically anaesthetizer anaetiological anagalactic anagap anagenesis anagenetic anagep anagignoskomena anaglyph anaglyphic anaglyphical anaglyphics anaglyphoscope anaglyphy anaglyptic anaglyptical anaglyptics anaglyptograph anaglyptographic anaglyptography anaglypton anagnorisis anagnost anagoge anagogic anagogical anagogically anagogics anagogy anagram anagrammatic anagrammatical anagrammatically anagrammatism anagrammatist anagrammatize anagrams anagraph anagua anagyrin anagyrine anahau anakinesis anakinetic anakinetomer anakinetomeric anakoluthia anakrousis anaktoron anal analabos analav analcime analcimite analcite analcitite analecta analectic analects analemma analemmatic analepsis analepsy analeptic analeptical analgen analgesia analgesic analgesis analgesist analgetic analgia analgic analgize analkalinity anallagmatic anallantoic anallantoidean anallergic anally analogic analogical analogically analogicalness analogion analogism analogist analogistic analogize analogon analogous analogously analogousness analogue analogy analphabet analphabete analphabetic analphabetical analphabetism analysability analysable analysand analysation analyse analyser analyses analysis analyst analytic analytical analytically analytics analyzability analyzable analyzation analyze analyzer anam anama anamesite anametadromous anamirtin anamite anammonid anammonide anamnesis anamnestic anamnestically anamnionic anamniote anamniotic anamorphic anamorphism anamorphoscope anamorphose anamorphosis anamorphote anamorphous anan anana ananaplas ananaples ananas ananda anandrarious anandria anandrous ananepionic anangioid anangular anankastic anantherate anantherous ananthous ananym anapaest anapaestic anapaestical anapaestically anapaganize anapaite anapanapa anapeiratic anaphalantiasis anaphase anaphia anaphora anaphoral anaphoria anaphoric anaphorical anaphrodisia anaphrodisiac anaphroditic anaphroditous anaphylactic anaphylactin anaphylactogen anaphylactogenic anaphylactoid anaphylatoxin anaphylaxis anaphyte anaplasia anaplasis anaplasm anaplasmosis anaplastic anaplasty anaplerosis anaplerotic anapnea anapneic anapnoeic anapnograph anapnoic anapnometer anapodeictic anapophysial anapophysis anapsid anapsidan anapterygote anapterygotism anapterygotous anaptotic anaptychus anaptyctic anaptyctical anaptyxis anaqua anarcestean anarch anarchal anarchial anarchic anarchical anarchically anarchism anarchist anarchistic anarchize anarchoindividualist anarchosocialist anarchosyndicalism anarchosyndicalist anarchy anarcotin anareta anaretic anaretical anargyros anarthria anarthric anarthropod anarthropodous anarthrosis anarthrous anarthrously anarthrousness anartismos anarya anasarca anasarcous anaschistic anaseismic anaspadias anaspalin anastalsis anastaltic anastasimon anastasimos anastasis anastate anastatic anastigmat anastigmatic anastomose anastomosis anastomotic anastrophe anatase anatexis anathema anathematic anathematical anathematically anathematism anathematization anathematize anathematizer anatheme anathemize anatifa anatifer anatiferous anatine anatocism anatomic anatomical anatomically anatomicobiological anatomicochirurgical anatomicomedical anatomicopathologic anatomicopathological anatomicophysiologic anatomicophysiological anatomicosurgical anatomism anatomist anatomization anatomize anatomizer anatomopathologic anatomopathological anatomy anatopism anatox anatoxin anatreptic anatripsis anatripsology anatriptic anatron anatropal anatropia anatropous anaudia anaunter anaunters anaxial anaxon anaxone anay anazoturia anba anbury ancestor ancestorial ancestorially ancestral ancestrally ancestress ancestrial ancestrian ancestry anchietin anchietine anchieutectic anchimonomineral anchithere anchitherioid anchor anchorable anchorage anchorate anchored anchorer anchoress anchoret anchoretic anchoretical anchoretish anchoretism anchorhold anchorite anchoritess anchoritic anchoritical anchoritish anchoritism anchorless anchorlike anchorwise anchovy anchusin anchusine anchylose anchylosis ancience anciency ancient ancientism anciently ancientness ancientry ancienty ancile ancilla ancillary ancipital ancipitous ancistrocladaceous ancistroid ancon anconad anconagra anconal ancone anconeal anconeous anconeus anconitis anconoid ancony ancora ancoral ancylopod ancylostome ancylostomiasis and anda andabatarian andalusite andante andantino andesine andesinite andesite andesitic andirin andirine andiroba andiron andorite andouillet andradite andranatomy andrarchy andrenid andrewsite andric androcentric androcephalous androcephalum androclinium androconium androcracy androcratic androcyte androdioecious androdioecism androdynamous androecial androecium androgametangium androgametophore androgen androgenesis androgenetic androgenic androgenous androginous androgone androgonia androgonial androgonidium androgonium andrographolide androgynal androgynary androgyne androgyneity androgynia androgynism androgynous androgynus androgyny android androidal androkinin androl androlepsia androlepsy andromania andromedotoxin andromonoecious andromonoecism andromorphous andron andronitis andropetalar andropetalous androphagous androphobia androphonomania androphore androphorous androphorum androphyll androseme androsin androsphinx androsporangium androspore androsterone androtauric androtomy anear aneath anecdota anecdotage anecdotal anecdotalism anecdote anecdotic anecdotical anecdotically anecdotist anele anelectric anelectrode anelectrotonic anelectrotonus anelytrous anematosis anemia anemic anemobiagraph anemochord anemoclastic anemogram anemograph anemographic anemographically anemography anemological anemology anemometer anemometric anemometrical anemometrically anemometrograph anemometrographic anemometrographically anemometry anemonal anemone anemonin anemonol anemony anemopathy anemophile anemophilous anemophily anemoscope anemosis anemotaxis anemotropic anemotropism anencephalia anencephalic anencephalotrophia anencephalous anencephalus anencephaly anend anenergia anenst anent anenterous anepia anepigraphic anepigraphous anepiploic anepithymia anerethisia aneretic anergia anergic anergy anerly aneroid aneroidograph anerotic anerythroplasia anerythroplastic anes anesis anesthesia anesthesiant anesthesimeter anesthesiologist anesthesiology anesthesis anesthetic anesthetically anesthetist anesthetization anesthetize anesthetizer anesthyl anethole anetiological aneuploid aneuploidy aneuria aneuric aneurilemmic aneurin aneurism aneurismally aneurysm aneurysmal aneurysmally aneurysmatic anew anfractuose anfractuosity anfractuous anfractuousness anfracture angaralite angaria angary angekok angel angelate angeldom angelet angeleyes angelfish angelhood angelic angelica angelical angelically angelicalness angelicic angelicize angelico angelin angeline angelique angelize angellike angelocracy angelographer angelolater angelolatry angelologic angelological angelology angelomachy angelophany angelot angelship anger angerly angeyok angiasthenia angico angiectasis angiectopia angiemphraxis angiitis angild angili angina anginal anginiform anginoid anginose anginous angioasthenia angioataxia angioblast angioblastic angiocarditis angiocarp angiocarpian angiocarpic angiocarpous angiocavernous angiocholecystitis angiocholitis angiochondroma angioclast angiocyst angiodermatitis angiodiascopy angioelephantiasis angiofibroma angiogenesis angiogenic angiogeny angioglioma angiograph angiography angiohyalinosis angiohydrotomy angiohypertonia angiohypotonia angioid angiokeratoma angiokinesis angiokinetic angioleucitis angiolipoma angiolith angiology angiolymphitis angiolymphoma angioma angiomalacia angiomatosis angiomatous angiomegaly angiometer angiomyocardiac angiomyoma angiomyosarcoma angioneoplasm angioneurosis angioneurotic angionoma angionosis angioparalysis angioparalytic angioparesis angiopathy angiophorous angioplany angioplasty angioplerosis angiopoietic angiopressure angiorrhagia angiorrhaphy angiorrhea angiorrhexis angiosarcoma angiosclerosis angiosclerotic angioscope angiosis angiospasm angiospastic angiosperm angiospermal angiospermatous angiospermic angiospermous angiosporous angiostegnosis angiostenosis angiosteosis angiostomize angiostomy angiostrophy angiosymphysis angiotasis angiotelectasia angiothlipsis angiotome angiotomy angiotonic angiotonin angiotribe angiotripsy angiotrophic anglaise angle angleberry angled anglehook anglepod angler anglesite anglesmith angletouch angletwitch anglewing anglewise angleworm anglicization anglicize anglimaniac angling angloid ango angolar angor angostura angrily angriness angrite angry angst angster angstrom anguid anguiform anguilliform anguilloid anguine anguineal anguineous anguiped anguis anguish anguished anguishful anguishous anguishously angula angular angulare angularity angularization angularize angularly angularness angulate angulated angulately angulateness angulation angulatogibbous angulatosinuous anguliferous angulinerved angulodentate angulometer angulosity angulosplenial angulous anguria angusticlave angustifoliate angustifolious angustirostrate angustisellate angustiseptal angustiseptate angwantibo anhalamine anhaline anhalonine anhalouidine anhang anharmonic anhedonia anhedral anhedron anhelation anhelous anhematosis anhemolytic anhidrosis anhidrotic anhima anhinga anhistic anhistous anhungered anhungry anhydrate anhydration anhydremia anhydremic anhydric anhydride anhydridization anhydridize anhydrite anhydrization anhydrize anhydroglocose anhydromyelia anhydrous anhydroxime anhysteretic ani aniconic aniconism anicular anicut anidian anidiomatic anidiomatical anidrosis aniente anigh anight anights anil anilao anilau anile anileness anilic anilid anilide anilidic anilidoxime aniline anilinism anilinophile anilinophilous anility anilla anilopyrin anilopyrine anima animability animable animableness animadversion animadversional animadversive animadversiveness animadvert animadverter animal animalcula animalculae animalcular animalcule animalculine animalculism animalculist animalculous animalculum animalhood animalian animalic animalier animalish animalism animalist animalistic animality animalivore animalivorous animalization animalize animally animastic animastical animate animated animatedly animately animateness animater animating animatingly animation animatism animatistic animative animatograph animator anime animi animikite animism animist animistic animize animosity animotheism animous animus anion anionic aniridia anis anisal anisalcohol anisaldehyde anisaldoxime anisamide anisandrous anisanilide anisate anischuria anise aniseed aniseikonia aniseikonic aniselike aniseroot anisette anisic anisidin anisidine anisil anisilic anisobranchiate anisocarpic anisocarpous anisocercal anisochromatic anisochromia anisocoria anisocotyledonous anisocotyly anisocratic anisocycle anisocytosis anisodactyl anisodactylic anisodactylous anisodont anisogamete anisogamous anisogamy anisogenous anisogeny anisognathism anisognathous anisogynous anisoin anisole anisoleucocytosis anisomelia anisomelus anisomeric anisomerous anisometric anisometrope anisometropia anisometropic anisomyarian anisomyodian anisomyodous anisopetalous anisophyllous anisophylly anisopia anisopleural anisopleurous anisopod anisopodal anisopodous anisopogonous anisopterous anisosepalous anisospore anisostaminous anisostemonous anisosthenic anisostichous anisostomous anisotonic anisotropal anisotrope anisotropic anisotropical anisotropically anisotropism anisotropous anisotropy anisoyl anisum anisuria anisyl anisylidene anither anitrogenous anjan ankaramite ankaratrite ankee anker ankerite ankh ankle anklebone anklejack anklet anklong ankus ankusha ankylenteron ankyloblepharon ankylocheilia ankylodactylia ankylodontia ankyloglossia ankylomele ankylomerism ankylophobia ankylopodia ankylopoietic ankyloproctia ankylorrhinia ankylose ankylosis ankylostoma ankylotia ankylotic ankylotome ankylotomy ankylurethria ankyroid anlace anlaut ann anna annabergite annal annale annaline annalism annalist annalistic annalize annals annat annates annatto anneal annealer annectent annection annelid annelidan annelidian annelidous annelism anneloid annerodite annet annex annexa annexable annexal annexation annexational annexationist annexer annexion annexionist annexitis annexive annexment annexure annidalin annihilability annihilable annihilate annihilation annihilationism annihilationist annihilative annihilator annihilatory annite anniversarily anniversariness anniversary anniverse annodated annona annonaceous annotate annotater annotation annotative annotator annotatory annotine annotinous announce announceable announcement announcer annoy annoyance annoyancer annoyer annoyful annoying annoyingly annoyingness annoyment annual annualist annualize annually annuary annueler annuent annuitant annuity annul annular annularity annularly annulary annulate annulated annulation annulet annulettee annulism annullable annullate annullation annuller annulment annuloid annulosan annulose annulus annunciable annunciate annunciation annunciative annunciator annunciatory anoa anocarpous anociassociation anococcygeal anodal anode anodendron anodic anodically anodize anodontia anodos anodyne anodynia anodynic anodynous anoegenetic anoesia anoesis anoestrous anoestrum anoestrus anoetic anogenic anogenital anoil anoine anoint anointer anointment anole anoli anolian anolyte anomaliflorous anomaliped anomalism anomalist anomalistic anomalistical anomalistically anomalocephalus anomaloflorous anomalogonatous anomalonomy anomaloscope anomalotrophy anomalous anomalously anomalousness anomalure anomaly anomite anomocarpous anomodont anomophyllous anomorhomboid anomorhomboidal anomphalous anomural anomuran anomurous anomy anon anonang anoncillo anonol anonychia anonym anonyma anonymity anonymous anonymously anonymousness anonymuncule anoopsia anoperineal anophele anopheline anophoria anophthalmia anophthalmos anophyte anopia anopisthographic anoplocephalic anoplonemertean anoplothere anoplotherioid anoplotheroid anopluriform anopsia anopubic anorak anorchia anorchism anorchous anorchus anorectal anorectic anorectous anorexia anorexy anorgana anorganic anorganism anorganology anormal anormality anorogenic anorth anorthic anorthite anorthitic anorthitite anorthoclase anorthographic anorthographical anorthographically anorthography anorthophyre anorthopia anorthoscope anorthose anorthosite anoscope anoscopy anosmatic anosmia anosmic anosphrasia anosphresia anospinal anostosis anoterite another anotherkins anotia anotropia anotta anotto anotus anounou anovesical anoxemia anoxemic anoxia anoxic anoxidative anoxybiosis anoxybiotic anoxyscope ansa ansar ansarian ansate ansation anserated anserine anserous anspessade ansu ansulate answer answerability answerable answerableness answerably answerer answeringly answerless answerlessly ant anta antacid antacrid antadiform antagonism antagonist antagonistic antagonistical antagonistically antagonization antagonize antagonizer antagony antal antalgesic antalgol antalkali antalkaline antambulacral antanacathartic antanaclasis antanemic antapex antaphrodisiac antaphroditic antapocha antapodosis antapology antapoplectic antarchism antarchist antarchistic antarchistical antarchy antarctic antarctica antarctical antarctically antarthritic antasphyctic antasthenic antasthmatic antatrophic antdom ante anteact anteal anteambulate anteambulation anteater antebaptismal antebath antebrachial antebrachium antebridal antecabinet antecaecal antecardium antecavern antecedaneous antecedaneously antecede antecedence antecedency antecedent antecedental antecedently antecessor antechamber antechapel antechoir antechurch anteclassical antecloset antecolic antecommunion anteconsonantal antecornu antecourt antecoxal antecubital antecurvature antedate antedawn antediluvial antediluvially antediluvian antedonin antedorsal antefebrile antefix antefixal anteflected anteflexed anteflexion antefurca antefurcal antefuture antegarden antegrade antehall antehistoric antehuman antehypophysis anteinitial antejentacular antejudiciary antejuramentum antelabium antelegal antelocation antelope antelopian antelucan antelude anteluminary antemarginal antemarital antemedial antemeridian antemetallic antemetic antemillennial antemingent antemortal antemundane antemural antenarial antenatal antenatalitial antenati antenave antenna antennae antennal antennariid antennary antennate antenniferous antenniform antennula antennular antennulary antennule antenodal antenoon antenumber anteoccupation anteocular anteopercle anteoperculum anteorbital antepagmenta antepagments antepalatal antepaschal antepast antepatriarchal antepectoral antepectus antependium antepenult antepenultima antepenultimate antephialtic antepileptic antepirrhema anteporch anteportico anteposition anteposthumous anteprandial antepredicament antepredicamental antepreterit antepretonic anteprohibition anteprostate anteprostatic antepyretic antequalm antereformation antereformational anteresurrection anterethic anterevolutional anterevolutionary anteriad anterior anteriority anteriorly anteriorness anteroclusion anterodorsal anteroexternal anterofixation anteroflexion anterofrontal anterograde anteroinferior anterointerior anterointernal anterolateral anterolaterally anteromedial anteromedian anteroom anteroparietal anteroposterior anteroposteriorly anteropygal anterospinal anterosuperior anteroventral anteroventrally antes antescript antesignanus antespring antestature antesternal antesternum antesunrise antesuperior antetemple antetype antevenient anteversion antevert antevocalic antewar anthecological anthecologist anthecology anthela anthelion anthelmintic anthem anthema anthemene anthemia anthemion anthemwise anthemy anther antheral antherid antheridial antheridiophore antheridium antheriferous antheriform antherless antherogenous antheroid antherozoid antherozoidal antherozooid antherozooidal anthesis anthesterin anthesterol antheximeter anthill anthine anthobiology anthocarp anthocarpous anthocephalous anthocerote anthochlor anthochlorine anthoclinium anthocyan anthocyanidin anthocyanin anthodium anthoecological anthoecologist anthoecology anthogenesis anthogenetic anthogenous anthography anthoid anthokyan antholite anthological anthologically anthologion anthologist anthologize anthology antholysis anthomania anthomaniac anthomedusan anthomyiid anthood anthophagous anthophile anthophilian anthophilous anthophobia anthophore anthophorous anthophyllite anthophyllitic anthophyte anthorine anthosiderite anthotaxis anthotaxy anthotropic anthotropism anthoxanthin anthozoan anthozoic anthozooid anthozoon anthracemia anthracene anthraceniferous anthrachrysone anthracia anthracic anthraciferous anthracin anthracite anthracitic anthracitiferous anthracitious anthracitism anthracitization anthracnose anthracnosis anthracocide anthracoid anthracolithic anthracomancy anthracomartian anthracometer anthracometric anthraconecrosis anthraconite anthracosis anthracothere anthracotic anthracyl anthradiol anthradiquinone anthraflavic anthragallol anthrahydroquinone anthramine anthranil anthranilate anthranilic anthranol anthranone anthranoyl anthranyl anthraphenone anthrapurpurin anthrapyridine anthraquinol anthraquinone anthraquinonyl anthrarufin anthratetrol anthrathiophene anthratriol anthrax anthraxolite anthraxylon anthribid anthrohopobiological anthroic anthrol anthrone anthropic anthropical anthropobiologist anthropobiology anthropocentric anthropocentrism anthropoclimatologist anthropoclimatology anthropocosmic anthropodeoxycholic anthropogenesis anthropogenetic anthropogenic anthropogenist anthropogenous anthropogeny anthropogeographer anthropogeographical anthropogeography anthropoglot anthropogony anthropography anthropoid anthropoidal anthropoidean anthropolater anthropolatric anthropolatry anthropolite anthropolithic anthropolitic anthropological anthropologically anthropologist anthropology anthropomancy anthropomantic anthropomantist anthropometer anthropometric anthropometrical anthropometrically anthropometrist anthropometry anthropomorph anthropomorphic anthropomorphical anthropomorphically anthropomorphism anthropomorphist anthropomorphite anthropomorphitic anthropomorphitical anthropomorphitism anthropomorphization anthropomorphize anthropomorphological anthropomorphologically anthropomorphology anthropomorphosis anthropomorphotheist anthropomorphous anthropomorphously anthroponomical anthroponomics anthroponomist anthroponomy anthropopathia anthropopathic anthropopathically anthropopathism anthropopathite anthropopathy anthropophagi anthropophagic anthropophagical anthropophaginian anthropophagism anthropophagist anthropophagistic anthropophagite anthropophagize anthropophagous anthropophagously anthropophagy anthropophilous anthropophobia anthropophuism anthropophuistic anthropophysiography anthropophysite anthropopsychic anthropopsychism anthroposcopy anthroposociologist anthroposociology anthroposomatology anthroposophical anthroposophist anthroposophy anthropoteleoclogy anthropoteleological anthropotheism anthropotomical anthropotomist anthropotomy anthropotoxin anthropurgic anthroropolith anthroxan anthroxanic anthryl anthrylene anthypophora anthypophoretic anti antiabolitionist antiabrasion antiabrin antiabsolutist antiacid antiadiaphorist antiaditis antiadministration antiae antiaesthetic antiager antiagglutinating antiagglutinin antiaggression antiaggressionist antiaggressive antiaircraft antialbumid antialbumin antialbumose antialcoholic antialcoholism antialcoholist antialdoxime antialexin antialien antiamboceptor antiamusement antiamylase antianaphylactogen antianaphylaxis antianarchic antianarchist antiangular antiannexation antiannexationist antianopheline antianthrax antianthropocentric antianthropomorphism antiantibody antiantidote antiantienzyme antiantitoxin antiaphrodisiac antiaphthic antiapoplectic antiapostle antiaquatic antiar antiarin antiaristocrat antiarthritic antiascetic antiasthmatic antiastronomical antiatheism antiatheist antiatonement antiattrition antiautolysin antibacchic antibacchius antibacterial antibacteriolytic antiballooner antibalm antibank antibasilican antibenzaldoxime antiberiberin antibibliolatry antibigotry antibilious antibiont antibiosis antibiotic antibishop antiblastic antiblennorrhagic antiblock antiblue antibody antiboxing antibreakage antibridal antibromic antibubonic antic anticachectic antical anticalcimine anticalculous anticalligraphic anticancer anticapital anticapitalism anticapitalist anticardiac anticardium anticarious anticarnivorous anticaste anticatalase anticatalyst anticatalytic anticatalyzer anticatarrhal anticathexis anticathode anticaustic anticensorship anticentralization anticephalalgic anticeremonial anticeremonialism anticeremonialist anticheater antichlor antichlorine antichloristic antichlorotic anticholagogue anticholinergic antichoromanic antichorus antichresis antichretic antichrist antichristian antichristianity antichristianly antichrome antichronical antichronically antichthon antichurch antichurchian antichymosin anticipant anticipatable anticipate anticipation anticipative anticipatively anticipator anticipatorily anticipatory anticivic anticivism anticize anticker anticlactic anticlassical anticlassicist anticlergy anticlerical anticlericalism anticlimactic anticlimax anticlinal anticline anticlinorium anticlockwise anticlogging anticly anticnemion anticness anticoagulant anticoagulating anticoagulative anticoagulin anticogitative anticolic anticombination anticomet anticomment anticommercial anticommunist anticomplement anticomplementary anticomplex anticonceptionist anticonductor anticonfederationist anticonformist anticonscience anticonscription anticonscriptive anticonstitutional anticonstitutionalist anticonstitutionally anticontagion anticontagionist anticontagious anticonventional anticonventionalism anticonvulsive anticor anticorn anticorrosion anticorrosive anticorset anticosine anticosmetic anticouncil anticourt anticourtier anticous anticovenanter anticovenanting anticreation anticreative anticreator anticreep anticreeper anticreeping anticrepuscular anticrepuscule anticrisis anticritic anticritique anticrochet anticrotalic anticryptic anticum anticyclic anticyclone anticyclonic anticyclonically anticynic anticytolysin anticytotoxin antidactyl antidancing antidecalogue antideflation antidemocrat antidemocratic antidemocratical antidemoniac antidetonant antidetonating antidiabetic antidiastase antidictionary antidiffuser antidinic antidiphtheria antidiphtheric antidiphtherin antidiphtheritic antidisciplinarian antidivine antidivorce antidogmatic antidomestic antidominican antidoron antidotal antidotally antidotary antidote antidotical antidotically antidotism antidraft antidrag antidromal antidromic antidromically antidromous antidromy antidrug antiduke antidumping antidynamic antidynastic antidyscratic antidysenteric antidysuric antiecclesiastic antiecclesiastical antiedemic antieducation antieducational antiegotism antiejaculation antiemetic antiemperor antiempirical antiendotoxin antiendowment antienergistic antienthusiastic antienzyme antienzymic antiepicenter antiepileptic antiepiscopal antiepiscopist antiepithelial antierosion antierysipelas antiethnic antieugenic antievangelical antievolution antievolutionist antiexpansionist antiexporting antiextreme antieyestrain antiface antifaction antifame antifanatic antifat antifatigue antifebrile antifederal antifederalism antifederalist antifelon antifelony antifeminism antifeminist antiferment antifermentative antifertilizer antifeudal antifeudalism antifibrinolysin antifibrinolysis antifideism antifire antiflash antiflattering antiflatulent antiflux antifoam antifoaming antifogmatic antiforeign antiforeignism antiformin antifouler antifouling antifowl antifreeze antifreezing antifriction antifrictional antifrost antifundamentalist antifungin antigalactagogue antigalactic antigambling antiganting antigen antigenic antigenicity antighostism antigigmanic antiglare antiglyoxalase antigod antigonococcic antigonorrheic antigorite antigovernment antigraft antigrammatical antigraph antigravitate antigravitational antigropelos antigrowth antiguggler antigyrous antihalation antiharmonist antihectic antihelix antihelminthic antihemagglutinin antihemisphere antihemoglobin antihemolysin antihemolytic antihemorrhagic antihemorrheidal antihero antiheroic antiheroism antiheterolysin antihidrotic antihierarchical antihierarchist antihistamine antihistaminic antiholiday antihormone antihuff antihum antihuman antihumbuggist antihunting antihydrophobic antihydropic antihydropin antihygienic antihylist antihypnotic antihypochondriac antihypophora antihysteric antikathode antikenotoxin antiketogen antiketogenesis antiketogenic antikinase antiking antiknock antilabor antilaborist antilacrosse antilacrosser antilactase antilapsarian antileague antilegalist antilegomena antilemic antilens antilepsis antileptic antilethargic antileveling antiliberal antilibration antilift antilipase antilipoid antiliquor antilithic antiliturgical antiliturgist antilobium antiloemic antilogarithm antilogic antilogical antilogism antilogous antilogy antiloimic antilottery antiluetin antilynching antilysin antilysis antilyssic antilytic antimacassar antimachine antimachinery antimagistratical antimalaria antimalarial antimallein antimaniac antimaniacal antimark antimartyr antimask antimasker antimasque antimasquer antimasquerade antimaterialist antimaterialistic antimatrimonial antimatrimonialist antimedical antimedieval antimelancholic antimellin antimeningococcic antimension antimensium antimephitic antimere antimerger antimeric antimerism antimeristem antimetabole antimetathesis antimetathetic antimeter antimethod antimetrical antimetropia antimetropic antimiasmatic antimicrobic antimilitarism antimilitarist antimilitary antiministerial antiministerialist antiminsion antimiscegenation antimission antimissionary antimissioner antimixing antimnemonic antimodel antimodern antimonarchial antimonarchic antimonarchical antimonarchically antimonarchicalness antimonarchist antimonate antimonial antimoniate antimoniated antimonic antimonid antimonide antimoniferous antimonious antimonite antimonium antimoniuret antimoniureted antimoniuretted antimonopolist antimonopoly antimonsoon antimony antimonyl antimoral antimoralism antimoralist antimosquito antimusical antimycotic antimythic antimythical antinarcotic antinarrative antinational antinationalist antinationalistic antinatural antinegro antinegroism antineologian antinephritic antinepotic antineuralgic antineuritic antineurotoxin antineutral antinial antinicotine antinion antinode antinoise antinome antinomian antinomianism antinomic antinomical antinomist antinomy antinormal antinosarian antiodont antiodontalgic antiopelmous antiophthalmic antiopium antiopiumist antiopiumite antioptimist antioptionist antiorgastic antiorthodox antioxidant antioxidase antioxidizer antioxidizing antioxygen antioxygenation antioxygenator antioxygenic antipacifist antipapacy antipapal antipapalist antipapism antipapist antipapistical antiparabema antiparagraphe antiparagraphic antiparallel antiparallelogram antiparalytic antiparalytical antiparasitic antiparastatitis antiparliament antiparliamental antiparliamentarist antiparliamentary antipart antipass antipastic antipatharian antipathetic antipathetical antipathetically antipatheticalness antipathic antipathist antipathize antipathogen antipathy antipatriarch antipatriarchal antipatriot antipatriotic antipatriotism antipedal antipeduncular antipellagric antipepsin antipeptone antiperiodic antiperistalsis antiperistaltic antiperistasis antiperistatic antiperistatical antiperistatically antipersonnel antiperthite antipestilential antipetalous antipewism antiphagocytic antipharisaic antipharmic antiphase antiphilosophic antiphilosophical antiphlogistian antiphlogistic antiphon antiphonal antiphonally antiphonary antiphoner antiphonetic antiphonic antiphonical antiphonically antiphonon antiphony antiphrasis antiphrastic antiphrastical antiphrastically antiphthisic antiphthisical antiphylloxeric antiphysic antiphysical antiphysician antiplague antiplanet antiplastic antiplatelet antipleion antiplenist antiplethoric antipleuritic antiplurality antipneumococcic antipodagric antipodagron antipodal antipode antipodean antipodes antipodic antipodism antipodist antipoetic antipoints antipolar antipole antipolemist antipolitical antipollution antipolo antipolygamy antipolyneuritic antipool antipooling antipope antipopery antipopular antipopulationist antiportable antiposition antipoverty antipragmatic antipragmatist antiprecipitin antipredeterminant antiprelate antiprelatic antiprelatist antipreparedness antiprestidigitation antipriest antipriestcraft antiprime antiprimer antipriming antiprinciple antiprism antiproductionist antiprofiteering antiprohibition antiprohibitionist antiprojectivity antiprophet antiprostate antiprostatic antiprotease antiproteolysis antiprotozoal antiprudential antipruritic antipsalmist antipsoric antiptosis antipudic antipuritan antiputrefaction antiputrefactive antiputrescent antiputrid antipyic antipyonin antipyresis antipyretic antipyrotic antipyryl antiqua antiquarian antiquarianism antiquarianize antiquarianly antiquarism antiquartan antiquary antiquate antiquated antiquatedness antiquation antique antiquely antiqueness antiquer antiquing antiquist antiquitarian antiquity antirabic antirabies antiracemate antiracer antirachitic antirachitically antiracing antiradiating antiradiation antiradical antirailwayist antirational antirationalism antirationalist antirationalistic antirattler antireactive antirealism antirealistic antirebating antirecruiting antired antireducer antireform antireformer antireforming antireformist antireligion antireligious antiremonstrant antirennet antirennin antirent antirenter antirentism antirepublican antireservationist antirestoration antireticular antirevisionist antirevolutionary antirevolutionist antirheumatic antiricin antirickets antiritual antiritualistic antirobin antiromance antiromantic antiromanticism antiroyal antiroyalist antirumor antirun antirust antisacerdotal antisacerdotalist antisaloon antisalooner antisavage antiscabious antiscale antischolastic antischool antiscians antiscientific antiscion antiscolic antiscorbutic antiscorbutical antiscrofulous antiseismic antiselene antisensitizer antisensuous antisensuousness antisepalous antisepsin antisepsis antiseptic antiseptical antiseptically antisepticism antisepticist antisepticize antiseption antiseptize antiserum antishipping antisialagogue antisialic antisiccative antisideric antisilverite antisimoniacal antisine antisiphon antisiphonal antiskeptical antiskid antiskidding antislavery antislaveryism antislickens antislip antismoking antisnapper antisocial antisocialist antisocialistic antisocialistically antisociality antisolar antisophist antisoporific antispace antispadix antispasis antispasmodic antispast antispastic antispectroscopic antispermotoxin antispiritual antispirochetic antisplasher antisplenetic antisplitting antispreader antispreading antisquama antisquatting antistadholder antistadholderian antistalling antistaphylococcic antistate antistatism antistatist antisteapsin antisterility antistes antistimulant antistock antistreptococcal antistreptococcic antistreptococcin antistreptococcus antistrike antistrophal antistrophe antistrophic antistrophically antistrophize antistrophon antistrumatic antistrumous antisubmarine antisubstance antisudoral antisudorific antisuffrage antisuffragist antisun antisupernaturalism antisupernaturalist antisurplician antisymmetrical antisyndicalism antisyndicalist antisynod antisyphilitic antitabetic antitabloid antitangent antitank antitarnish antitartaric antitax antiteetotalism antitegula antitemperance antitetanic antitetanolysin antithalian antitheft antitheism antitheist antitheistic antitheistical antitheistically antithenar antitheologian antitheological antithermic antithermin antitheses antithesis antithesism antithesize antithet antithetic antithetical antithetically antithetics antithrombic antithrombin antitintinnabularian antitobacco antitobacconal antitobacconist antitonic antitorpedo antitoxic antitoxin antitrade antitrades antitraditional antitragal antitragic antitragicus antitragus antitrismus antitrochanter antitropal antitrope antitropic antitropical antitropous antitropy antitrust antitrypsin antitryptic antituberculin antituberculosis antituberculotic antituberculous antiturnpikeism antitwilight antitypal antitype antityphoid antitypic antitypical antitypically antitypy antityrosinase antiunion antiunionist antiuratic antiurease antiusurious antiutilitarian antivaccination antivaccinationist antivaccinator antivaccinist antivariolous antivenefic antivenereal antivenin antivenom antivenomous antivermicular antivibrating antivibrator antivibratory antivice antiviral antivirus antivitalist antivitalistic antivitamin antivivisection antivivisectionist antivolition antiwar antiwarlike antiwaste antiwedge antiweed antiwit antixerophthalmic antizealot antizymic antizymotic antler antlered antlerite antlerless antlia antliate antling antluetic antodontalgic antoeci antoecian antoecians antoninianus antonomasia antonomastic antonomastical antonomastically antonomasy antonym antonymous antonymy antorbital antproof antra antral antralgia antre antrectomy antrin antritis antrocele antronasal antrophore antrophose antrorse antrorsely antroscope antroscopy antrotome antrotomy antrotympanic antrotympanitis antrum antrustion antrustionship antship antu antwise anubing anucleate anukabiet anuloma anuran anuresis anuretic anuria anuric anurous anury anus anusim anusvara anutraminosa anvasser anvil anvilsmith anxietude anxiety anxious anxiously anxiousness any anybody anyhow anyone anyplace anything anythingarian anythingarianism anyway anyways anywhen anywhere anywhereness anywheres anywhy anywise anywither aogiri aonach aorist aoristic aoristically aorta aortal aortarctia aortectasia aortectasis aortic aorticorenal aortism aortitis aortoclasia aortoclasis aortolith aortomalacia aortomalaxis aortopathy aortoptosia aortoptosis aortorrhaphy aortosclerosis aortostenosis aortotomy aosmic aoudad apa apabhramsa apace apache apachism apachite apadana apagoge apagogic apagogical apagogically apaid apalit apandry apanthropia apanthropy apar aparaphysate aparejo aparithmesis apart apartheid aparthrosis apartment apartmental apartness apasote apastron apatan apatetic apathetic apathetical apathetically apathic apathism apathist apathistical apathogenic apathy apatite ape apeak apectomy apedom apehood apeiron apelet apelike apeling apellous apenteric apepsia apepsinia apepsy apeptic aper aperch aperea aperient aperiodic aperiodically aperiodicity aperispermic aperistalsis aperitive apert apertly apertness apertometer apertural aperture apertured apery apesthesia apesthetic apesthetize apetaloid apetalose apetalous apetalousness apetaly apex apexed aphaeresis aphaeretic aphagia aphakia aphakial aphakic aphanesite aphanipterous aphanite aphanitic aphanitism aphanophyre aphanozygous aphasia aphasiac aphasic aphelian aphelion apheliotropic apheliotropically apheliotropism aphemia aphemic aphengescope aphengoscope aphenoscope apheresis apheretic aphesis apheta aphetic aphetically aphetism aphetize aphicidal aphicide aphid aphides aphidian aphidicide aphidicolous aphidid aphidious aphidivorous aphidolysin aphidophagous aphidozer aphilanthropy aphlaston aphlebia aphlogistic aphnology aphodal aphodian aphodus aphonia aphonic aphonous aphony aphoria aphorism aphorismatic aphorismer aphorismic aphorismical aphorismos aphorist aphoristic aphoristically aphorize aphorizer aphotic aphototactic aphototaxis aphototropic aphototropism aphrasia aphrite aphrizite aphrodisia aphrodisiac aphrodisiacal aphrodisian aphroditic aphroditous aphrolite aphronia aphrosiderite aphtha aphthic aphthitalite aphthoid aphthong aphthongal aphthongia aphthous aphydrotropic aphydrotropism aphyllose aphyllous aphylly aphyric apiaceous apian apiarian apiarist apiary apiator apicad apical apically apices apicifixed apicilar apicillary apicitis apickaback apicoectomy apicolysis apicula apicular apiculate apiculated apiculation apicultural apiculture apiculturist apiculus apiece apieces apigenin apii apiin apikoros apilary apinch aping apinoid apio apioid apioidal apiole apiolin apiologist apiology apionol apiose apiphobia apish apishamore apishly apishness apism apitong apitpat apivorous apjohnite aplacental aplacophoran aplacophorous aplanat aplanatic aplanatically aplanatism aplanogamete aplanospore aplasia aplastic aplenty aplite aplitic aplobasalt aplodiorite aplomb aplome aploperistomatous aplostemonous aplotaxene aplotomy aplustre apnea apneal apneic apneumatic apneumatosis apneumonous apneustic apoaconitine apoatropine apobiotic apoblast apocaffeine apocalypse apocalypst apocalypt apocalyptic apocalyptical apocalyptically apocalypticism apocalyptism apocalyptist apocamphoric apocarp apocarpous apocarpy apocatastasis apocatastatic apocatharsis apocenter apocentric apocentricity apocha apocholic apochromat apochromatic apochromatism apocinchonine apocodeine apocopate apocopated apocopation apocope apocopic apocrenic apocrisiary apocrustic apocryph apocryphal apocryphalist apocryphally apocryphalness apocryphate apocryphon apocynaceous apocyneous apod apodal apodan apodeipnon apodeixis apodema apodemal apodematal apodeme apodia apodictic apodictical apodictically apodictive apodixis apodosis apodous apodyterium apoembryony apofenchene apogaeic apogalacteum apogamic apogamically apogamous apogamously apogamy apogeal apogean apogee apogeic apogenous apogeny apogeotropic apogeotropically apogeotropism apograph apographal apoharmine apohyal apoise apojove apokrea apokreos apolar apolarity apolaustic apolegamic apollonicon apologal apologete apologetic apologetical apologetically apologetics apologia apologist apologize apologizer apologue apology apolousis apolysis apolytikion apomecometer apomecometry apometabolic apometabolism apometabolous apometaboly apomictic apomictical apomixis apomorphia apomorphine aponeurology aponeurorrhaphy aponeurosis aponeurositis aponeurotic aponeurotome aponeurotomy aponia aponic aponogetonaceous apoop apopenptic apopetalous apophantic apophasis apophatic apophlegmatic apophonia apophony apophorometer apophthegm apophthegmatist apophyge apophylactic apophylaxis apophyllite apophyllous apophysary apophysate apophyseal apophysis apophysitis apoplasmodial apoplastogamous apoplectic apoplectical apoplectically apoplectiform apoplectoid apoplex apoplexy apopyle apoquinamine apoquinine aporetic aporetical aporhyolite aporia aporobranchian aporose aporphin aporphine aporrhaoid aporrhegma aport aportoise aposafranine aposaturn aposaturnium aposematic aposematically aposepalous aposia aposiopesis aposiopetic apositia apositic aposoro aposporogony aposporous apospory apostasis apostasy apostate apostatic apostatical apostatically apostatism apostatize apostaxis apostemate apostematic apostemation apostematous aposteme aposteriori aposthia apostil apostle apostlehood apostleship apostolate apostoless apostoli apostolic apostolical apostolically apostolicalness apostolicism apostolicity apostolize apostrophal apostrophation apostrophe apostrophic apostrophied apostrophize apostrophus apotelesm apotelesmatic apotelesmatical apothecal apothecary apothecaryship apothece apothecial apothecium apothegm apothegmatic apothegmatical apothegmatically apothegmatist apothegmatize apothem apotheose apotheoses apotheosis apotheosize apothesine apothesis apotome apotracheal apotropaic apotropaion apotropaism apotropous apoturmeric apotype apotypic apout apoxesis apozem apozema apozemical apozymase appall appalling appallingly appallment appalment appanage appanagist apparatus apparel apparelment apparence apparency apparent apparently apparentness apparition apparitional apparitor appassionata appassionato appay appeal appealability appealable appealer appealing appealingly appealingness appear appearance appearanced appearer appeasable appeasableness appeasably appease appeasement appeaser appeasing appeasingly appeasive appellability appellable appellancy appellant appellate appellation appellational appellative appellatived appellatively appellativeness appellatory appellee appellor append appendage appendaged appendalgia appendance appendancy appendant appendectomy appendical appendicalgia appendice appendicectasis appendicectomy appendices appendicial appendicious appendicitis appendicle appendicocaecostomy appendicostomy appendicular appendicularian appendiculate appendiculated appenditious appendix appendorontgenography appendotome appentice apperceive apperception apperceptionism apperceptionist apperceptionistic apperceptive apperceptively appercipient appersonation appertain appertainment appertinent appet appete appetence appetency appetent appetently appetibility appetible appetibleness appetite appetition appetitional appetitious appetitive appetize appetizement appetizer appetizingly appinite applanate applanation applaud applaudable applaudably applauder applaudingly applause applausive applausively apple appleberry appleblossom applecart appledrane applegrower applejack applejohn applemonger applenut appleringy appleroot applesauce applewife applewoman appliable appliableness appliably appliance appliant applicability applicable applicableness applicably applicancy applicant applicate application applicative applicatively applicator applicatorily applicatory applied appliedly applier applique applosion applosive applot applotment apply applyingly applyment appoggiatura appoint appointable appointe appointee appointer appointive appointment appointor apport apportion apportionable apportioner apportionment apposability apposable appose apposer apposiopestic apposite appositely appositeness apposition appositional appositionally appositive appositively appraisable appraisal appraise appraisement appraiser appraising appraisingly appraisive appreciable appreciably appreciant appreciate appreciatingly appreciation appreciational appreciativ appreciative appreciatively appreciativeness appreciator appreciatorily appreciatory appredicate apprehend apprehender apprehendingly apprehensibility apprehensible apprehensibly apprehension apprehensive apprehensively apprehensiveness apprend apprense apprentice apprenticehood apprenticement apprenticeship appressed appressor appressorial appressorium appreteur apprise apprize apprizement apprizer approach approachability approachabl approachable approachableness approacher approaching approachless approachment approbate approbation approbative approbativeness approbator approbatory approof appropinquate appropinquation appropinquity appropre appropriable appropriate appropriately appropriateness appropriation appropriative appropriativeness appropriator approvable approvableness approval approvance approve approvedly approvedness approvement approver approvingly approximal approximate approximately approximation approximative approximatively approximativeness approximator appulse appulsion appulsive appulsively appurtenance appurtenant apractic apraxia apraxic apricate aprication aprickle apricot apriori apriorism apriorist aprioristic apriority aproctia aproctous apron aproneer apronful apronless apronlike apropos aprosexia aprosopia aprosopous aproterodont apse apselaphesia apselaphesis apsidal apsidally apsides apsidiole apsis apsychia apsychical apt apteral apteran apterial apterium apteroid apterous apterygial apterygote apterygotous aptitude aptitudinal aptitudinally aptly aptness aptote aptotic aptyalia aptyalism aptychus apulmonic apulse apurpose apyonin apyrene apyretic apyrexia apyrexial apyrexy apyrotype apyrous aqua aquabelle aquabib aquacade aquacultural aquaculture aquaemanale aquafortist aquage aquagreen aquamarine aquameter aquaplane aquapuncture aquarelle aquarellist aquaria aquarial aquarian aquariist aquarium aquarter aquascutum aquatic aquatical aquatically aquatile aquatint aquatinta aquatinter aquation aquativeness aquatone aquavalent aquavit aqueduct aqueoglacial aqueoigneous aqueomercurial aqueous aqueously aqueousness aquicolous aquicultural aquiculture aquiculturist aquifer aquiferous aquifoliaceous aquiform aquilawood aquilege aquiline aquilino aquincubital aquincubitalism aquintocubital aquintocubitalism aquiparous aquiver aquo aquocapsulitis aquocarbonic aquocellolitis aquopentamminecobaltic aquose aquosity aquotization aquotize ar ara araba araban arabana arabesque arabesquely arabesquerie arability arabin arabinic arabinose arabinosic arabit arabitol arabiyeh arable araca aracanga aracari araceous arachic arachidonic arachin arachnactis arachnean arachnid arachnidan arachnidial arachnidism arachnidium arachnism arachnitis arachnoid arachnoidal arachnoidea arachnoidean arachnoiditis arachnological arachnologist arachnology arachnophagous arachnopia arad arado araeostyle araeosystyle aragonite araguato arain arakawaite arake araliaceous araliad aralie aralkyl aralkylated aramayoite aramina araneid araneidan araneiform aranein araneologist araneology araneous aranga arango aranzada arapahite arapaima araphorostic arapunga arar arara araracanga ararao ararauna arariba araroba arati aration aratory araucarian arba arbacin arbalest arbalester arbalestre arbalestrier arbalist arbalister arbalo arbiter arbitrable arbitrager arbitragist arbitral arbitrament arbitrarily arbitrariness arbitrary arbitrate arbitration arbitrational arbitrationist arbitrative arbitrator arbitratorship arbitratrix arbitrement arbitrer arbitress arboloco arbor arboraceous arboral arborary arborator arboreal arboreally arborean arbored arboreous arborescence arborescent arborescently arboresque arboret arboreta arboretum arborical arboricole arboricoline arboricolous arboricultural arboriculture arboriculturist arboriform arborist arborization arborize arboroid arborolatry arborous arborvitae arborway arbuscle arbuscula arbuscular arbuscule arbusterol arbustum arbutase arbute arbutean arbutin arbutinase arbutus arc arca arcade arcadian arcana arcanal arcane arcanite arcanum arcate arcature arch archabomination archae archaecraniate archaeogeology archaeographic archaeographical archaeography archaeolatry archaeolith archaeolithic archaeologer archaeologian archaeologic archaeological archaeologically archaeologist archaeology archaeostoma archaeostomatous archagitator archaic archaical archaically archaicism archaism archaist archaistic archaize archaizer archangel archangelic archangelical archangelship archantagonist archantiquary archapostate archapostle archarchitect archarios archartist archband archbeacon archbeadle archbishop archbishopess archbishopric archbishopry archbotcher archboutefeu archbuffoon archbuilder archchampion archchaplain archcharlatan archcheater archchemic archchief archchronicler archcity archconfraternity archconsoler archconspirator archcorrupter archcorsair archcount archcozener archcriminal archcritic archcrown archcupbearer archdapifer archdapifership archdeacon archdeaconate archdeaconess archdeaconry archdeaconship archdean archdeanery archdeceiver archdefender archdemon archdepredator archdespot archdetective archdevil archdiocesan archdiocese archdiplomatist archdissembler archdisturber archdivine archdogmatist archdolt archdruid archducal archduchess archduchy archduke archdukedom arche archeal archearl archebiosis archecclesiastic archecentric arched archegone archegonial archegoniate archegoniophore archegonium archegony archeion archelogy archemperor archencephalic archenemy archengineer archenteric archenteron archeocyte archer archeress archerfish archership archery arches archespore archesporial archesporium archetypal archetypally archetype archetypic archetypical archetypically archetypist archeunuch archeus archexorcist archfelon archfiend archfire archflamen archflatterer archfoe archfool archform archfounder archfriend archgenethliac archgod archgomeral archgovernor archgunner archhead archheart archheresy archheretic archhost archhouse archhumbug archhypocrisy archhypocrite archiater archibenthal archibenthic archibenthos archiblast archiblastic archiblastoma archiblastula archicantor archicarp archicerebrum archichlamydeous archicleistogamous archicleistogamy archicoele archicontinent archicyte archicytula archidiaconal archidiaconate archididascalian archididascalos archidome archiepiscopacy archiepiscopal archiepiscopally archiepiscopate archiereus archigaster archigastrula archigenesis archigonic archigonocyte archigony archiheretical archikaryon archil archilithic archilowe archimage archimagus archimandrite archimime archimorphic archimorula archimperial archimperialism archimperialist archimperialistic archimpressionist archineuron archinfamy archinformer arching archipallial archipallium archipelagian archipelagic archipelago archipin archiplasm archiplasmic archiprelatical archipresbyter archipterygial archipterygium archisperm archisphere archispore archistome archisupreme archisymbolical architect architective architectonic architectonically architectonics architectress architectural architecturalist architecturally architecture architecturesque architis architraval architrave architraved architypographer archival archive archivist archivolt archizoic archjockey archking archknave archleader archlecher archleveler archlexicographer archliar archlute archly archmachine archmagician archmagirist archmarshal archmediocrity archmessenger archmilitarist archmime archminister archmock archmocker archmockery archmonarch archmonarchist archmonarchy archmugwump archmurderer archmystagogue archness archocele archocystosyrinx archology archon archonship archont archontate archontic archoplasm archoplasmic archoptoma archoptosis archorrhagia archorrhea archostegnosis archostenosis archosyrinx archoverseer archpall archpapist archpastor archpatriarch archpatron archphilosopher archphylarch archpiece archpilferer archpillar archpirate archplagiarist archplagiary archplayer archplotter archplunderer archplutocrat archpoet archpolitician archpontiff archpractice archprelate archprelatic archprelatical archpresbyter archpresbyterate archpresbytery archpretender archpriest archpriesthood archpriestship archprimate archprince archprophet archprotopope archprototype archpublican archpuritan archradical archrascal archreactionary archrebel archregent archrepresentative archrobber archrogue archruler archsacrificator archsacrificer archsaint archsatrap archscoundrel archseducer archsee archsewer archshepherd archsin archsnob archspirit archspy archsteward archswindler archsynagogue archtempter archthief archtraitor archtreasurer archtreasurership archturncoat archtyrant archurger archvagabond archvampire archvestryman archvillain archvillainy archvisitor archwag archway archwench archwise archworker archworkmaster archy arciferous arcifinious arciform arcing arcked arcking arcocentrous arcocentrum arcograph arctation arctian arctic arctically arctician arcticize arcticward arcticwards arctiid arctoid arctoidean arcual arcuale arcuate arcuated arcuately arcuation arcubalist arcubalister arcula arculite ardassine ardeb ardella ardency ardennite ardent ardently ardentness ardish ardoise ardor ardri ardu arduinite arduous arduously arduousness ardurous are area areach aread areal areality arear areasoner areaway arecaceous arecaidin arecaidine arecain arecaine arecolidin arecolidine arecolin arecoline ared areek areel arefact arefaction aregenerative aregeneratory areito arena arenaceous arenae arenariae arenarious arenation arend arendalite areng arenicole arenicolite arenicolous arenilitic arenoid arenose arenosity arent areocentric areographer areographic areographical areographically areography areola areolar areolate areolated areolation areole areolet areologic areological areologically areologist areology areometer areometric areometrical areometry areotectonics areroscope aretaics arete arfvedsonite argal argala argali argans argasid argeers argel argemony argenol argent argental argentamid argentamide argentamin argentamine argentate argentation argenteous argenter argenteum argentic argenticyanide argentide argentiferous argentine argentinitrate argention argentite argentojarosite argentol argentometric argentometrically argentometry argenton argentoproteinum argentose argentous argentum arghan arghel arghool argil argillaceous argilliferous argillite argillitic argilloarenaceous argillocalcareous argillocalcite argilloferruginous argilloid argillomagnesian argillous arginine argininephosphoric argo argol argolet argon argosy argot argotic arguable argue arguer argufier argufy argument argumental argumentation argumentatious argumentative argumentatively argumentativeness argumentator argumentatory argusfish argute argutely arguteness argyranthemous argyranthous argyria argyric argyrite argyrocephalous argyrodite argyrose argyrosis argyrythrose arhar arhat arhatship arhythmic aria aribine aricine arid aridge aridian aridity aridly aridness ariegite ariel arienzo arietation arietinous arietta aright arightly arigue aril ariled arillary arillate arillated arilliform arillode arillodium arilloid arillus ariose arioso ariot aripple arisard arise arisen arist arista aristarchy aristate aristocracy aristocrat aristocratic aristocratical aristocratically aristocraticalness aristocraticism aristocraticness aristocratism aristodemocracy aristodemocratical aristogenesis aristogenetic aristogenic aristogenics aristolochiaceous aristolochin aristolochine aristological aristologist aristology aristomonarchy aristorepublicanism aristotype aristulate arite arithmetic arithmetical arithmetically arithmetician arithmetization arithmetize arithmic arithmocracy arithmocratic arithmogram arithmograph arithmography arithmomania arithmometer arizonite arjun ark arkansite arkite arkose arkosic arksutite arles arm armada armadilla armadillo armagnac armament armamentarium armamentary armangite armariolum armarium armature armbone armchair armchaired armed armeniaceous armer armet armful armgaunt armhole armhoop armied armiferous armiger armigeral armigerous armil armilla armillary armillate armillated arming armipotence armipotent armisonant armisonous armistice armless armlet armload armoire armonica armor armored armorer armorial armoried armorist armorproof armorwise armory armozeen armpiece armpit armplate armrack armrest arms armscye armure army arn arna arnberry arnee arni arnica arnotta arnotto arnut aroar aroast arock aroeira aroid aroideous aroint arolium arolla aroma aromacity aromadendrin aromatic aromatically aromaticness aromatite aromatites aromatization aromatize aromatizer aromatophor aromatophore aroon arose around arousal arouse arousement arouser arow aroxyl arpeggiando arpeggiated arpeggiation arpeggio arpeggioed arpen arpent arquerite arquifoux arracach arracacha arrack arrah arraign arraigner arraignment arrame arrange arrangeable arrangement arranger arrant arrantly arras arrased arrasene arrastra arrastre arratel arrau array arrayal arrayer arrayment arrear arrearage arrect arrector arrendation arrenotokous arrenotoky arrent arrentable arrentation arreptitious arrest arrestable arrestation arrestee arrester arresting arrestingly arrestive arrestment arrestor arrhenal arrhenoid arrhenotokous arrhenotoky arrhinia arrhizal arrhizous arrhythmia arrhythmic arrhythmical arrhythmically arrhythmous arrhythmy arriage arriba arride arridge arrie arriere arrimby arris arrish arrisways arriswise arrival arrive arriver arroba arrogance arrogancy arrogant arrogantly arrogantness arrogate arrogatingly arrogation arrogative arrogator arrojadite arrope arrosive arrow arrowbush arrowed arrowhead arrowheaded arrowleaf arrowless arrowlet arrowlike arrowplate arrowroot arrowsmith arrowstone arrowweed arrowwood arrowworm arrowy arroyo arsanilic arse arsedine arsenal arsenate arsenation arseneted arsenetted arsenfast arsenferratose arsenhemol arseniasis arseniate arsenic arsenical arsenicalism arsenicate arsenicism arsenicize arsenicophagy arsenide arseniferous arsenillo arseniopleite arseniosiderite arsenious arsenism arsenite arsenium arseniuret arseniureted arsenization arseno arsenobenzene arsenobenzol arsenobismite arsenoferratin arsenofuran arsenohemol arsenolite arsenophagy arsenophen arsenophenol arsenophenylglycin arsenopyrite arsenostyracol arsenotherapy arsenotungstates arsenotungstic arsenous arsenoxide arsenyl arses arsesmart arsheen arshin arshine arsine arsinic arsino arsis arsle arsmetrik arsmetrike arsnicker arsoite arson arsonate arsonation arsonic arsonist arsonite arsonium arsono arsonvalization arsphenamine arsyl arsylene art artaba artabe artal artar artarine artcraft artefact artel artemisic artemisin arteriagra arterial arterialization arterialize arterially arteriarctia arteriasis arteriectasia arteriectasis arteriectopia arterin arterioarctia arteriocapillary arteriococcygeal arteriodialysis arteriodiastasis arteriofibrosis arteriogenesis arteriogram arteriograph arteriography arteriole arteriolith arteriology arteriolosclerosis arteriomalacia arteriometer arteriomotor arterionecrosis arteriopalmus arteriopathy arteriophlebotomy arterioplania arterioplasty arteriopressor arteriorenal arteriorrhagia arteriorrhaphy arteriorrhexis arteriosclerosis arteriosclerotic arteriospasm arteriostenosis arteriostosis arteriostrepsis arteriosympathectomy arteriotome arteriotomy arteriotrepsis arterious arteriovenous arterioversion arterioverter arteritis artery artesian artful artfully artfulness artha arthel arthemis arthragra arthral arthralgia arthralgic arthrectomy arthredema arthrempyesis arthresthesia arthritic arthritical arthriticine arthritis arthritism arthrobacterium arthrobranch arthrobranchia arthrocace arthrocarcinoma arthrocele arthrochondritis arthroclasia arthrocleisis arthroclisis arthroderm arthrodesis arthrodia arthrodial arthrodic arthrodiran arthrodire arthrodirous arthrodynia arthrodynic arthroempyema arthroempyesis arthroendoscopy arthrogastran arthrogenous arthrography arthrogryposis arthrolite arthrolith arthrolithiasis arthrology arthromeningitis arthromere arthromeric arthrometer arthrometry arthroncus arthroneuralgia arthropathic arthropathology arthropathy arthrophlogosis arthrophyma arthroplastic arthroplasty arthropleura arthropleure arthropod arthropodal arthropodan arthropodous arthropomatous arthropterous arthropyosis arthrorheumatism arthrorrhagia arthrosclerosis arthrosia arthrosis arthrospore arthrosporic arthrosporous arthrosteitis arthrosterigma arthrostome arthrostomy arthrosynovitis arthrosyrinx arthrotome arthrotomy arthrotrauma arthrotropic arthrotyphoid arthrous arthroxerosis arthrozoan arthrozoic artiad artichoke article articled articulability articulable articulacy articulant articular articulare articularly articulary articulate articulated articulately articulateness articulation articulationist articulative articulator articulatory articulite articulus artifact artifactitious artifice artificer artificership artificial artificialism artificiality artificialize artificially artificialness artiller artillerist artillery artilleryman artilleryship artiness artinite artiodactyl artiodactylous artiphyllous artisan artisanship artist artistdom artiste artistic artistical artistically artistry artless artlessly artlessness artlet artlike artocarpad artocarpeous artocarpous artolater artophagous artophorion artotype artotypy artware arty aru arui aruke arumin arundiferous arundinaceous arundineous arupa arusa arusha arustle arval arvel arvicole arvicoline arvicolous arviculture arx ary aryballoid aryballus aryepiglottic aryl arylamine arylamino arylate arytenoid arytenoidal arzan arzrunite arzun as asaddle asafetida asak asale asana asaphia asaphid asaprol asarabacca asarite asaron asarone asarotum asbest asbestic asbestiform asbestine asbestinize asbestoid asbestoidal asbestos asbestosis asbestous asbestus asbolin asbolite ascan ascare ascariasis ascaricidal ascaricide ascarid ascarides ascaridiasis ascaridole ascaron ascellus ascend ascendable ascendance ascendancy ascendant ascendence ascendency ascendent ascender ascendible ascending ascendingly ascension ascensional ascensionist ascensive ascent ascertain ascertainable ascertainableness ascertainably ascertainer ascertainment ascescency ascescent ascetic ascetical ascetically asceticism aschaffite ascham aschistic asci ascian ascidian ascidiate ascidicolous ascidiferous ascidiform ascidioid ascidiozooid ascidium asciferous ascigerous ascii ascites ascitic ascitical ascititious asclent asclepiad asclepiadaceous asclepiadeous asclepidin asclepidoid asclepin ascocarp ascocarpous ascogenous ascogone ascogonial ascogonidium ascogonium ascolichen ascoma ascomycetal ascomycete ascomycetous ascon ascophore ascophorous ascorbic ascospore ascosporic ascosporous ascot ascribable ascribe ascript ascription ascriptitii ascriptitious ascriptitius ascry ascula ascus ascyphous asdic ase asearch asecretory aseethe aseismatic aseismic aseismicity aseity aselgeia asellate asem asemasia asemia asepsis aseptate aseptic aseptically asepticism asepticize aseptify aseptol aseptolin asexual asexuality asexualization asexualize asexually asfetida ash ashake ashame ashamed ashamedly ashamedness ashamnu ashberry ashcake ashen asherah ashery ashes ashet ashily ashimmer ashine ashiness ashipboard ashiver ashkoko ashlar ashlared ashlaring ashless ashling ashman ashore ashpan ashpit ashplant ashraf ashrafi ashthroat ashur ashweed ashwort ashy asialia aside asidehand asideness asiderite asideu asiento asilid asimen asimmer asinego asinine asininely asininity asiphonate asiphonogama asitia ask askable askance askant askar askari asker askew askingly askip asklent askos aslant aslantwise aslaver asleep aslop aslope aslumber asmack asmalte asmear asmile asmoke asmolder asniffle asnort asoak asocial asok asoka asomatophyte asomatous asonant asonia asop asor asouth asp aspace aspalathus asparagic asparagine asparaginic asparaginous asparagus asparagyl asparkle aspartate aspartic aspartyl aspect aspectable aspectant aspection aspectual aspen asper asperate asperation aspergation asperge asperger aspergil aspergill aspergilliform aspergillin aspergillosis aspergillum aspergillus asperifoliate asperifolious asperite asperity aspermatic aspermatism aspermatous aspermia aspermic aspermous asperous asperously asperse aspersed asperser aspersion aspersive aspersively aspersor aspersorium aspersory asperuloside asperulous asphalt asphaltene asphalter asphaltic asphaltite asphaltum aspheterism aspheterize asphodel asphyctic asphyctous asphyxia asphyxial asphyxiant asphyxiate asphyxiation asphyxiative asphyxiator asphyxied asphyxy aspic aspiculate aspiculous aspidate aspidiaria aspidinol aspidium aspidobranchiate aspidomancy aspidospermine aspirant aspirata aspirate aspiration aspirator aspiratory aspire aspirer aspirin aspiring aspiringly aspiringness aspish asplanchnic asplenioid asporogenic asporogenous asporous asport asportation asporulate aspout asprawl aspread aspring asprout asquare asquat asqueal asquint asquirm ass assacu assagai assai assail assailable assailableness assailant assailer assailment assapan assapanic assarion assart assary assassin assassinate assassination assassinative assassinator assassinatress assassinist assate assation assault assaultable assaulter assaut assay assayable assayer assaying assbaa asse assecuration assecurator assedation assegai asself assemblable assemblage assemble assembler assembly assemblyman assent assentaneous assentation assentatious assentator assentatorily assentatory assented assenter assentient assenting assentingly assentive assentiveness assentor assert assertable assertative asserter assertible assertion assertional assertive assertively assertiveness assertor assertorial assertorially assertoric assertorical assertorically assertorily assertory assertress assertrix assertum assess assessable assessably assessed assessee assession assessionary assessment assessor assessorial assessorship assessory asset assets assever asseverate asseveratingly asseveration asseverative asseveratively asseveratory asshead assi assibilate assibilation assident assidual assidually assiduity assiduous assiduously assiduousness assientist assiento assify assign assignability assignable assignably assignat assignation assigned assignee assigneeship assigner assignment assignor assilag assimilability assimilable assimilate assimilation assimilationist assimilative assimilativeness assimilator assimilatory assis assise assish assishly assishness assist assistance assistant assistanted assistantship assistency assister assistful assistive assistless assistor assize assizement assizer assizes asslike assman assmanship associability associable associableness associate associated associatedness associateship association associational associationalism associationalist associationism associationist associationistic associative associatively associativeness associator associatory assoil assoilment assoilzie assonance assonanced assonant assonantal assonantic assonate assort assortative assorted assortedness assorter assortive assortment assuade assuage assuagement assuager assuasive assubjugate assuetude assumable assumably assume assumed assumedly assumer assuming assumingly assumingness assumpsit assumption assumptious assumptiousness assumptive assumptively assurable assurance assurant assure assured assuredly assuredness assurer assurge assurgency assurgent assuring assuringly assyntite assythment ast asta astalk astarboard astare astart astasia astatic astatically astaticism astatine astatize astatizer astay asteam asteatosis asteep asteer asteism astelic astely aster asteraceous astereognosis asteria asterial asteriated asterikos asterin asterioid asterion asterisk asterism asterismal astern asternal asternia asteroid asteroidal asteroidean asterophyllite asterospondylic asterospondylous asterwort asthenia asthenic asthenical asthenobiosis asthenobiotic asthenolith asthenology asthenopia asthenopic asthenosphere astheny asthma asthmatic asthmatical asthmatically asthmatoid asthmogenic asthore asthorin astichous astigmatic astigmatical astigmatically astigmatism astigmatizer astigmatometer astigmatoscope astigmatoscopy astigmia astigmism astigmometer astigmometry astilbe astint astipulate astir astite astomatal astomatous astomia astomous astonied astonish astonishedly astonisher astonishing astonishingly astonishingness astonishment astony astoop astor astound astoundable astounding astoundingly astoundment astraddle astraean astraeid astraeiform astragal astragalar astragalectomy astragali astragalocalcaneal astragalocentral astragalomancy astragalonavicular astragaloscaphoid astragalotibial astragalus astrain astrakanite astrakhan astral astrally astrand astraphobia astrapophobia astray astream astrer astrict astriction astrictive astrictively astrictiveness astride astrier astriferous astrild astringe astringency astringent astringently astringer astroalchemist astroblast astrochemist astrochemistry astrochronological astrocyte astrocytoma astrocytomata astrodiagnosis astrodome astrofel astrogeny astroglia astrognosy astrogonic astrogony astrograph astrographic astrography astroid astroite astrolabe astrolabical astrolater astrolatry astrolithology astrologaster astrologer astrologian astrologic astrological astrologically astrologistic astrologize astrologous astrology astromancer astromancy astromantic astrometeorological astrometeorologist astrometeorology astrometer astrometrical astrometry astronaut astronautics astronomer astronomic astronomical astronomically astronomics astronomize astronomy astrophil astrophobia astrophotographic astrophotography astrophotometer astrophotometrical astrophotometry astrophyllite astrophysical astrophysicist astrophysics astroscope astroscopy astrospectral astrospectroscopic astrosphere astrotheology astrut astucious astuciously astucity astute astutely astuteness astylar asudden asunder aswail aswarm asway asweat aswell aswim aswing aswirl aswoon aswooned asyla asyllabia asyllabic asyllabical asylum asymbiotic asymbolia asymbolic asymbolical asymmetric asymmetrical asymmetrically asymmetry asymptomatic asymptote asymptotic asymptotical asymptotically asynapsis asynaptic asynartete asynartetic asynchronism asynchronous asyndesis asyndetic asyndetically asyndeton asynergia asynergy asyngamic asyngamy asyntactic asyntrophy asystole asystolic asystolism asyzygetic at atabal atabeg atabek atacamite atactic atactiform atafter ataman atamasco atangle atap ataraxia ataraxy atatschite ataunt atavi atavic atavism atavist atavistic atavistically atavus ataxaphasia ataxia ataxiagram ataxiagraph ataxiameter ataxiaphasia ataxic ataxinomic ataxite ataxonomic ataxophemia ataxy atazir atbash atchison ate atebrin atechnic atechnical atechny ateeter atef atelectasis atelectatic ateleological atelestite atelets atelier ateliosis atelo atelocardia atelocephalous ateloglossia atelognathia atelomitic atelomyelia atelopodia ateloprosopia atelorachidia atelostomia atemporal ates ateuchi ateuchus athalamous athalline athanasia athanasy athanor athar athecate atheism atheist atheistic atheistical atheistically atheisticalness atheize atheizer athelia atheling athematic athenaeum athenee athenor atheological atheologically atheology atheous athericeran athericerous atherine athermancy athermanous athermic athermous atheroma atheromasia atheromata atheromatosis atheromatous atherosclerosis athetesis athetize athetoid athetosic athetosis athing athirst athlete athletehood athletic athletical athletically athleticism athletics athletism athletocracy athlothete athlothetes athodyd athort athrepsia athreptic athrill athrive athrob athrocyte athrocytosis athrogenic athrong athrough athwart athwarthawse athwartship athwartships athwartwise athymia athymic athymy athyreosis athyria athyrid athyroid athyroidism athyrosis atilt atimon atinga atingle atinkle atip atis atlantad atlantal atlantes atlantic atlantite atlantoaxial atlantodidymus atlantomastoid atlantoodontoid atlas atlatl atle atlee atloaxoid atloid atloidean atloidoaxoid atma atman atmiatrics atmiatry atmid atmidalbumin atmidometer atmidometry atmo atmocausis atmocautery atmoclastic atmogenic atmograph atmologic atmological atmologist atmology atmolysis atmolyzation atmolyze atmolyzer atmometer atmometric atmometry atmos atmosphere atmosphereful atmosphereless atmospheric atmospherical atmospherically atmospherics atmospherology atmostea atmosteal atmosteon atocha atocia atokal atoke atokous atoll atom atomatic atomechanics atomerg atomic atomical atomically atomician atomicism atomicity atomics atomiferous atomism atomist atomistic atomistical atomistically atomistics atomity atomization atomize atomizer atomology atomy atonable atonal atonalism atonalistic atonality atonally atone atonement atoneness atoner atonia atonic atonicity atoningly atony atop atophan atopic atopite atopy atour atoxic atoxyl atrabilarian atrabilarious atrabiliar atrabiliarious atrabiliary atrabilious atrabiliousness atracheate atragene atrail atrament atramental atramentary atramentous atraumatic atrematous atremble atrepsy atreptic atresia atresic atresy atretic atria atrial atrichia atrichosis atrichous atrickle atrienses atriensis atriocoelomic atrioporal atriopore atrioventricular atrip atrium atrocha atrochal atrochous atrocious atrociously atrociousness atrocity atrolactic atropaceous atropal atropamine atrophia atrophiated atrophic atrophied atrophoderma atrophy atropia atropic atropine atropinism atropinization atropinize atropism atropous atrorubent atrosanguineous atroscine atrous atry atta attacco attach attachable attachableness attache attached attachedly attacher attacheship attachment attack attackable attacker attacolite attacus attagen attaghan attain attainability attainable attainableness attainder attainer attainment attaint attaintment attainture attaleh attar attargul attask attemper attemperament attemperance attemperate attemperately attemperation attemperator attempt attemptability attemptable attempter attemptless attend attendance attendancy attendant attendantly attender attendingly attendment attendress attensity attent attention attentional attentive attentively attentiveness attently attenuable attenuant attenuate attenuation attenuative attenuator atter attercop attercrop atterminal attermine atterminement attern attery attest attestable attestant attestation attestative attestator attester attestive attic atticism atticize atticomastoid attid attinge attingence attingency attingent attire attired attirement attirer attitude attitudinal attitudinarian attitudinarianism attitudinize attitudinizer attorn attorney attorneydom attorneyism attorneyship attornment attract attractability attractable attractableness attractant attracter attractile attractingly attraction attractionally attractive attractively attractiveness attractivity attractor attrahent attrap attributable attributal attribute attributer attribution attributive attributively attributiveness attrist attrite attrited attriteness attrition attritive attritus attune attunely attunement atule atumble atune atwain atweel atween atwin atwirl atwist atwitch atwitter atwixt atwo atypic atypical atypically atypy auantic aube aubepine aubrietia aubrite auburn aubusson auca auchenia auchenium auchlet auction auctionary auctioneer auctorial aucuba aucupate audacious audaciously audaciousness audacity audibility audible audibleness audibly audience audiencier audient audile audio audiogenic audiogram audiologist audiology audiometer audiometric audiometry audion audiophile audiphone audit audition auditive auditor auditoria auditorial auditorially auditorily auditorium auditorship auditory auditress auditual audivise audiviser audivision auganite auge augelite augen augend auger augerer augh aught aughtlins augite augitic augitite augitophyre augment augmentable augmentation augmentationer augmentative augmentatively augmented augmentedly augmenter augmentive augur augural augurate augurial augurous augurship augury august augustal augustly augustness auh auhuhu auk auklet aula aulacocarpous aulae aularian auld auldfarrantlike auletai aulete auletes auletic auletrides auletris aulic aulicism auloi aulophyte aulos aulostomid aulu aum aumaga aumail aumbry aumery aumil aumildar aumous aumrie auncel aune aunt aunthood auntie auntish auntlike auntly auntsary auntship aupaka aura aurae aural aurally auramine aurantiaceous aurantium aurar aurate aurated aureate aureately aureateness aureation aureity aurelia aurelian aureola aureole aureolin aureoline aureomycin aureous aureously auresca aureus auribromide auric aurichalcite aurichalcum aurichloride aurichlorohydric auricle auricled auricomous auricula auriculae auricular auriculare auriculares auricularia auriculariae auricularian auricularis auricularly auriculate auriculated auriculately auriculocranial auriculoparietal auriculotemporal auriculoventricular auriculovertical auricyanhydric auricyanic auricyanide auride auriferous aurific aurification auriform aurify aurigal aurigation aurigerous aurilave aurin aurinasal auriphone auriphrygia auriphrygiate auripuncture aurir auriscalp auriscalpia auriscalpium auriscope auriscopy aurist aurite aurivorous auroauric aurobromide aurochloride aurochs aurocyanide aurodiamine auronal aurophobia aurophore aurora aurorae auroral aurorally aurore aurorean aurorium aurotellurite aurothiosulphate aurothiosulphuric aurous aurrescu aurulent aurum aurure auryl auscult auscultascope auscultate auscultation auscultative auscultator auscultatory auscultoscope auslaut auslaute auspex auspicate auspice auspices auspicial auspicious auspiciously auspiciousness auspicy austenite austenitic austere austerely austereness austerity austral australene australite australopithecine austrium austromancy ausu ausubo autacoid autacoidal autallotriomorphic autantitypy autarch autarchic autarchical autarchy autarkic autarkical autarkist autarky aute autechoscope autecious auteciously auteciousness autecism autecologic autecological autecologically autecologist autecology autecy autem authentic authentical authentically authenticalness authenticate authentication authenticator authenticity authenticly authenticness authigene authigenetic authigenic authigenous author authorcraft authoress authorhood authorial authorially authorish authorism authoritarian authoritarianism authoritative authoritatively authoritativeness authority authorizable authorization authorize authorized authorizer authorless authorling authorly authorship authotype autism autist autistic auto autoabstract autoactivation autoactive autoaddress autoagglutinating autoagglutination autoagglutinin autoalarm autoalkylation autoallogamous autoallogamy autoanalysis autoanalytic autoantibody autoanticomplement autoantitoxin autoasphyxiation autoaspiration autoassimilation autobahn autobasidia autobasidiomycetous autobasidium autobiographal autobiographer autobiographic autobiographical autobiographically autobiographist autobiography autobiology autoblast autoboat autoboating autobolide autobus autocab autocade autocall autocamp autocamper autocamping autocar autocarist autocarpian autocarpic autocarpous autocatalepsy autocatalysis autocatalytic autocatalytically autocatalyze autocatheterism autocephalia autocephality autocephalous autocephaly autoceptive autochemical autocholecystectomy autochrome autochromy autochronograph autochthon autochthonal autochthonic autochthonism autochthonous autochthonously autochthonousness autochthony autocide autocinesis autoclasis autoclastic autoclave autocoenobium autocoherer autocoid autocollimation autocollimator autocolony autocombustible autocombustion autocomplexes autocondensation autoconduction autoconvection autoconverter autocopist autocoprophagous autocorrosion autocracy autocrat autocratic autocratical autocratically autocrator autocratoric autocratorical autocratrix autocratship autocremation autocriticism autocystoplasty autocytolysis autocytolytic autodecomposition autodepolymerization autodermic autodestruction autodetector autodiagnosis autodiagnostic autodiagrammatic autodidact autodidactic autodifferentiation autodiffusion autodigestion autodigestive autodrainage autodrome autodynamic autodyne autoecholalia autoecic autoecious autoeciously autoeciousness autoecism autoecous autoecy autoeducation autoeducative autoelectrolysis autoelectrolytic autoelectronic autoelevation autoepigraph autoepilation autoerotic autoerotically autoeroticism autoerotism autoexcitation autofecundation autofermentation autoformation autofrettage autogamic autogamous autogamy autogauge autogeneal autogenesis autogenetic autogenetically autogenic autogenous autogenously autogeny autogiro autognosis autognostic autograft autografting autogram autograph autographal autographer autographic autographical autographically autographism autographist autographometer autography autogravure autoharp autoheader autohemic autohemolysin autohemolysis autohemolytic autohemorrhage autohemotherapy autoheterodyne autoheterosis autohexaploid autohybridization autohypnosis autohypnotic autohypnotism autohypnotization autoicous autoignition autoimmunity autoimmunization autoinduction autoinductive autoinfection autoinfusion autoinhibited autoinoculable autoinoculation autointellectual autointoxicant autointoxication autoirrigation autoist autojigger autojuggernaut autokinesis autokinetic autokrator autolaryngoscope autolaryngoscopic autolaryngoscopy autolater autolatry autolavage autolesion autolimnetic autolith autoloading autological autologist autologous autology autoluminescence autoluminescent autolysate autolysin autolysis autolytic autolyzate autolyze automa automacy automanual automat automata automatic automatical automatically automaticity automatin automatism automatist automatization automatize automatograph automaton automatonlike automatous automechanical automelon autometamorphosis autometric autometry automobile automobilism automobilist automobilistic automobility automolite automonstration automorph automorphic automorphically automorphism automotive automotor automower automysophobia autonegation autonephrectomy autonephrotoxin autoneurotoxin autonitridation autonoetic autonomasy autonomic autonomical autonomically autonomist autonomize autonomous autonomously autonomy autonym autoparasitism autopathic autopathography autopathy autopelagic autopepsia autophagi autophagia autophagous autophagy autophobia autophoby autophon autophone autophonoscope autophonous autophony autophotoelectric autophotograph autophotometry autophthalmoscope autophyllogeny autophyte autophytic autophytically autophytograph autophytography autopilot autoplagiarism autoplasmotherapy autoplast autoplastic autoplasty autopneumatic autopoint autopoisonous autopolar autopolo autopoloist autopolyploid autopore autoportrait autoportraiture autopositive autopotent autoprogressive autoproteolysis autoprothesis autopsic autopsical autopsy autopsychic autopsychoanalysis autopsychology autopsychorhythmia autopsychosis autoptic autoptical autoptically autopticity autopyotherapy autoracemization autoradiograph autoradiographic autoradiography autoreduction autoregenerator autoregulation autoreinfusion autoretardation autorhythmic autorhythmus autoriser autorotation autorrhaphy autoschediasm autoschediastic autoschediastical autoschediastically autoschediaze autoscience autoscope autoscopic autoscopy autosender autosensitization autosensitized autosepticemia autoserotherapy autoserum autosexing autosight autosign autosite autositic autoskeleton autosled autoslip autosomal autosomatognosis autosomatognostic autosome autosoteric autosoterism autospore autosporic autospray autostability autostage autostandardization autostarter autostethoscope autostylic autostylism autostyly autosuggestibility autosuggestible autosuggestion autosuggestionist autosuggestive autosuppression autosymbiontic autosymbolic autosymbolical autosymbolically autosymnoia autosyndesis autotelegraph autotelic autotetraploid autotetraploidy autothaumaturgist autotheater autotheism autotheist autotherapeutic autotherapy autothermy autotomic autotomize autotomous autotomy autotoxaemia autotoxic autotoxication autotoxicity autotoxicosis autotoxin autotoxis autotractor autotransformer autotransfusion autotransplant autotransplantation autotrepanation autotriploid autotriploidy autotroph autotrophic autotrophy autotropic autotropically autotropism autotruck autotuberculin autoturning autotype autotyphization autotypic autotypography autotypy autourine autovaccination autovaccine autovalet autovalve autovivisection autoxeny autoxidation autoxidator autoxidizability autoxidizable autoxidize autoxidizer autozooid autrefois autumn autumnal autumnally autumnian autumnity autunite auxamylase auxanogram auxanology auxanometer auxesis auxetic auxetical auxetically auxiliar auxiliarly auxiliary auxiliate auxiliation auxiliator auxiliatory auxilium auximone auxin auxinic auxinically auxoaction auxoamylase auxoblast auxobody auxocardia auxochrome auxochromic auxochromism auxochromous auxocyte auxoflore auxofluor auxograph auxographic auxohormone auxology auxometer auxospore auxosubstance auxotonic auxotox ava avadana avadavat avadhuta avahi avail availability available availableness availably availingly availment aval avalanche avalent avalvular avania avanious avanturine avaremotemo avarice avaricious avariciously avariciousness avascular avast avaunt ave avellan avellane avellaneous avellano avelonge aveloz avenaceous avenage avenalin avener avenge avengeful avengement avenger avengeress avenging avengingly avenin avenolith avenous avens aventail aventurine avenue aver avera average averagely averager averah averil averin averment averrable averral averruncate averruncation averruncator aversant aversation averse aversely averseness aversion aversive avert avertable averted avertedly averter avertible avian avianization avianize aviarist aviary aviate aviatic aviation aviator aviatorial aviatoriality aviatory aviatress aviatrices aviatrix avichi avicide avick avicolous avicular avicularia avicularian avicularium aviculture aviculturist avid avidious avidiously avidity avidly avidous avidya avifauna avifaunal avigate avigation avigator avijja avine aviolite avirulence avirulent aviso avital avitaminosis avitaminotic avitic avives avizandum avo avocado avocate avocation avocative avocatory avocet avodire avogadrite avoid avoidable avoidably avoidance avoider avoidless avoidment avoirdupois avolate avolation avolitional avondbloem avouch avouchable avoucher avouchment avourneen avow avowable avowableness avowably avowal avowance avowant avowed avowedly avowedness avower avowry avoyer avoyership avulse avulsion avuncular avunculate aw awa awabi awaft awag await awaiter awakable awake awaken awakenable awakener awakening awakeningly awakenment awald awalim awalt awane awanting awapuhi award awardable awarder awardment aware awaredom awareness awaruite awash awaste awat awatch awater awave away awayness awber awd awe awearied aweary aweather aweband awedness awee aweek aweel aweigh awesome awesomely awesomeness awest aweto awfu awful awfully awfulness awheel awheft awhet awhile awhir awhirl awide awiggle awikiwiki awin awing awink awiwi awkward awkwardish awkwardly awkwardness awl awless awlessness awlwort awmous awn awned awner awning awninged awnless awnlike awny awoke awork awreck awrist awrong awry ax axal axbreaker axe axed axenic axes axfetch axhammer axhammered axhead axial axiality axially axiate axiation axiform axifugal axil axile axilemma axilemmata axilla axillae axillant axillar axillary axine axinite axinomancy axiolite axiolitic axiological axiologically axiologist axiology axiom axiomatic axiomatical axiomatically axiomatization axiomatize axion axiopisty axis axised axisymmetric axisymmetrical axite axle axled axlesmith axletree axmaker axmaking axman axmanship axmaster axodendrite axofugal axogamy axoid axoidean axolemma axolotl axolysis axometer axometric axometry axon axonal axoneure axoneuron axonolipous axonometric axonometry axonophorous axonost axopetal axophyte axoplasm axopodia axopodium axospermous axostyle axseed axstone axtree axunge axweed axwise axwort ay ayacahuite ayah aye ayegreen ayelp ayenbite ayin ayless aylet ayllu ayond ayont ayous ayu azadrachta azafrin azalea azarole azedarach azelaic azelate azeotrope azeotropic azeotropism azeotropy azide aziethane azilut azimene azimethylene azimide azimine azimino aziminobenzene azimuth azimuthal azimuthally azine aziola azlactone azo azobacter azobenzene azobenzil azobenzoic azobenzol azoblack azoch azocochineal azocoralline azocorinth azocyanide azocyclic azodicarboxylic azodiphenyl azodisulphonic azoeosin azoerythrin azofication azofier azoflavine azoformamide azoformic azofy azogallein azogreen azogrenadine azohumic azoic azoimide azoisobutyronitrile azole azolitmin azomethine azon azonal azonaphthalene azonic azonium azoospermia azoparaffin azophen azophenetole azophenine azophenol azophenyl azophenylene azophosphin azophosphore azoprotein azorite azorubine azosulphine azosulphonic azotate azote azoted azotemia azotenesis azotetrazole azoth azothionium azotic azotine azotite azotize azotoluene azotometer azotorrhoea azotous azoturia azovernine azox azoxazole azoxime azoxine azoxonium azoxy azoxyanisole azoxybenzene azoxybenzoic azoxynaphthalene azoxyphenetole azoxytoluidine azteca azthionium azulene azulite azulmic azumbre azure azurean azured azureous azurine azurite azurmalachite azurous azury azygobranchiate azygomatous azygos azygosperm azygospore azygous azyme azymite azymous b ba baa baahling baal baar baba babacoote babai babasco babassu babaylan babbitt babbitter babblative babble babblement babbler babblesome babbling babblingly babblish babblishly babbly babby babe babehood babelet babelike babery babeship babesiasis babiche babied babillard babingtonite babirusa babish babished babishly babishness bablah babloh baboen baboo baboodom babooism baboon baboonery baboonish baboonroot baboot babouche babroot babu babudom babuina babuism babul babushka baby babydom babyfied babyhood babyhouse babyish babyishly babyishness babyism babylike babyolatry babyship bac bacaba bacach bacalao bacao bacbakiri bacca baccaceous baccae baccalaurean baccalaureate baccara baccarat baccate baccated bacchanal bacchanalian bacchanalianism bacchanalianly bacchanalism bacchanalization bacchanalize bacchant bacchante bacchantes bacchantic bacchar baccharis baccharoid baccheion bacchiac bacchian bacchic bacchii bacchius bacciferous bacciform baccivorous bach bache bachel bachelor bachelordom bachelorhood bachelorism bachelorize bachelorlike bachelorly bachelorship bachelorwise bachelry bacillar bacillariaceous bacillary bacillemia bacilli bacillian bacillicidal bacillicide bacillicidic bacilliculture bacilliform bacilligenic bacilliparous bacillite bacillogenic bacillogenous bacillophobia bacillosis bacilluria bacillus bacitracin back backache backaching backachy backage backband backbearing backbencher backbite backbiter backbitingly backblow backboard backbone backboned backboneless backbonelessness backbrand backbreaker backbreaking backcap backcast backchain backchat backcourt backcross backdoor backdown backdrop backed backen backer backet backfall backfatter backfield backfill backfiller backfilling backfire backfiring backflap backflash backflow backfold backframe backfriend backfurrow backgame backgammon background backhand backhanded backhandedly backhandedness backhander backhatch backheel backhooker backhouse backie backiebird backing backjaw backjoint backlands backlash backlashing backless backlet backlings backlog backlotter backmost backpedal backpiece backplate backrope backrun backsaw backscraper backset backsetting backsettler backshift backside backsight backslap backslapper backslapping backslide backslider backslidingness backspace backspacer backspang backspier backspierer backspin backspread backspringing backstaff backstage backstamp backstay backster backstick backstitch backstone backstop backstrap backstretch backstring backstrip backstroke backstromite backswept backswing backsword backswording backswordman backswordsman backtack backtender backtenter backtrack backtracker backtrick backup backveld backvelder backwall backward backwardation backwardly backwardness backwards backwash backwasher backwashing backwater backwatered backway backwood backwoods backwoodsiness backwoodsman backwoodsy backword backworm backwort backyarder baclin bacon baconer baconize baconweed bacony bacteremia bacteria bacteriaceous bacterial bacterially bacterian bacteric bactericholia bactericidal bactericide bactericidin bacterid bacteriemia bacteriform bacterin bacterioagglutinin bacterioblast bacteriocyte bacteriodiagnosis bacteriofluorescin bacteriogenic bacteriogenous bacteriohemolysin bacterioid bacterioidal bacteriologic bacteriological bacteriologically bacteriologist bacteriology bacteriolysin bacteriolysis bacteriolytic bacteriolyze bacteriopathology bacteriophage bacteriophagia bacteriophagic bacteriophagous bacteriophagy bacteriophobia bacterioprecipitin bacterioprotein bacteriopsonic bacteriopsonin bacteriopurpurin bacterioscopic bacterioscopical bacterioscopically bacterioscopist bacterioscopy bacteriosis bacteriosolvent bacteriostasis bacteriostat bacteriostatic bacteriotherapeutic bacteriotherapy bacteriotoxic bacteriotoxin bacteriotropic bacteriotropin bacteriotrypsin bacterious bacteritic bacterium bacteriuria bacterization bacterize bacteroid bacteroidal bactriticone bactritoid bacula bacule baculi baculiferous baculiform baculine baculite baculitic baculiticone baculoid baculum baculus bacury bad badan badarrah baddeleyite badderlocks baddish baddishly baddishness baddock bade badenite badge badgeless badgeman badger badgerbrush badgerer badgeringly badgerlike badgerly badgerweed badiaga badian badigeon badinage badious badland badlands badly badminton badness bae baetuli baetulus baetyl baetylic baetylus baetzner bafaro baff baffeta baffle bafflement baffler baffling bafflingly bafflingness baffy baft bafta bag baga bagani bagasse bagataway bagatelle bagatine bagattini bagattino bagel bagful baggage baggageman baggagemaster baggager baggala bagganet bagged bagger baggie baggily bagginess bagging baggit baggy baghouse bagleaves baglike bagmaker bagmaking bagman bagnio bagnut bago bagonet bagpipe bagpiper bagpipes bagplant bagrationite bagre bagreef bagroom baguette bagwig bagwigged bagworm bagwyn bah bahan bahar bahawder bahay bahera bahiaite bahisti bahnung baho bahoe bahoo baht bahur bahut bahuvrihi baidarka baiginet baignet baikalite baikerinite baikerite baikie bail bailable bailage bailee bailer bailey bailie bailiery bailieship bailiff bailiffry bailiffship bailiwick bailliage baillone bailment bailor bailpiece bailsman bailwood bain bainie baioc baiocchi baiocco bairagi bairn bairnie bairnish bairnishness bairnliness bairnly bairnteam bairntime bairnwort baister bait baiter baith baittle baitylos baize bajada bajan bajarigar bajra bajree bajri bajury baka bakal bake bakeboard baked bakehouse bakelite bakelize baken bakeoven bakepan baker bakerdom bakeress bakerite bakerless bakerly bakership bakery bakeshop bakestone bakie baking bakingly bakli baksheesh baktun baku bakula bakupari bal balachong balaclava baladine balaenid balaenoid balaenoidean balafo balagan balaghat balai balalaika balance balanceable balanced balancedness balancelle balanceman balancement balancer balancewise balancing balander balandra balandrana balaneutics balangay balanic balanid balaniferous balanism balanite balanitis balanoblennorrhea balanocele balanoid balanophoraceous balanophore balanophorin balanoplasty balanoposthitis balanopreputial balanorrhagia balantidial balantidiasis balantidic balantidiosis balao balas balata balatong balatron balatronic balausta balaustine balaustre balboa balbriggan balbutiate balbutient balbuties balconet balconied balcony bald baldachin baldachined baldachini baldachino baldberry baldcrown balden balder balderdash baldhead baldicoot baldish baldling baldly baldmoney baldness baldpate baldrib baldric baldricked baldricwise balductum baldy bale baleen balefire baleful balefully balefulness balei baleise baleless baler balete bali balibago baline balinger balinghasay balisaur balistarius balistid balistraria balita balk balker balkingly balky ball ballad ballade balladeer ballader balladeroyal balladic balladical balladier balladism balladist balladize balladlike balladling balladmonger balladmongering balladry balladwise ballahoo ballam ballan ballant ballast ballastage ballaster ballasting ballata ballate ballatoon balldom balled baller ballerina ballet balletic balletomane balli ballist ballista ballistae ballistic ballistically ballistician ballistics ballistocardiograph ballium ballmine ballogan ballonet balloon balloonation ballooner balloonery balloonet balloonfish balloonflower balloonful ballooning balloonish balloonist balloonlike ballot ballotade ballotage balloter balloting ballotist ballottement ballow ballplayer ballproof ballroom ballstock ballup ballweed bally ballyhack ballyhoo ballyhooer ballywack ballywrack balm balmacaan balmily balminess balmlike balmony balmy balneal balneary balneation balneatory balneographer balneography balneologic balneological balneologist balneology balneophysiology balneotechnics balneotherapeutics balneotherapia balneotherapy balonea baloney baloo balow balsa balsam balsamation balsameaceous balsamer balsamic balsamical balsamically balsamiferous balsamina balsaminaceous balsamine balsamitic balsamiticness balsamize balsamo balsamous balsamroot balsamum balsamweed balsamy baltei balter balteus baltimorite balu baluchithere baluchitheria baluchitherium balushai baluster balustered balustrade balustraded balustrading balut balwarra balza balzarine bam bamban bambini bambino bambocciade bamboo bamboozle bamboozlement bamboozler bamboula bamoth ban banaba banago banak banakite banal banality banally banana bananist bananivorous banat banatite banausic banc banca bancal banchi banco bancus band banda bandage bandager bandagist bandaite bandaka bandala bandalore bandanna bandannaed bandar bandarlog bandbox bandboxical bandboxy bandcase bandcutter bande bandeau banded bandelet bander banderole bandersnatch bandfish bandhava bandhook bandhu bandi bandicoot bandicoy bandie bandikai bandiness banding bandit banditism banditry banditti bandle bandless bandlessly bandlessness bandlet bandman bandmaster bando bandog bandoleer bandoleered bandoline bandonion bandore bandrol bandsman bandstand bandster bandstring bandwork bandy bandyball bandyman bane baneberry baneful banefully banefulness banewort bang banga bangalay bangalow bangboard bange banger banghy bangiaceous banging bangkok bangle bangled bangling bangster bangtail bani banian banig banilad banish banisher banishment banister baniwa baniya banjo banjoist banjore banjorine banjuke bank bankable bankbook banked banker bankera bankerdom bankeress banket bankfull banking bankman bankrider bankrupt bankruptcy bankruptism bankruptlike bankruptly bankruptship bankrupture bankshall bankside banksman bankweed banky banner bannered bannerer banneret bannerfish bannerless bannerlike bannerman bannerol bannerwise bannet banning bannister bannock banns bannut banovina banquet banqueteer banqueteering banqueter banquette bansalague banshee banstickle bant bantam bantamize bantamweight bantay bantayan banteng banter banterer banteringly bantery bantingize bantling banty banuyo banxring banya banyan banzai baobab bap baptisin baptism baptismal baptismally baptistery baptistic baptizable baptize baptizee baptizement baptizer bar bara barabara barabora barad baragnosis baragouin baragouinish barajillo barandos barangay barasingha barathea barathra barathrum barauna barb barbacou barbal barbaloin barbaralalia barbaresque barbarian barbarianism barbarianize barbaric barbarical barbarically barbarious barbariousness barbarism barbarity barbarization barbarize barbarous barbarously barbarousness barbary barbas barbasco barbastel barbate barbated barbatimao barbe barbecue barbed barbeiro barbel barbellate barbellula barbellulate barber barberess barberfish barberish barberry barbershop barbet barbette barbican barbicel barbigerous barbion barbital barbitalism barbiton barbitone barbitos barbiturate barbituric barbless barblet barbone barbotine barbudo barbulate barbule barbulyie barbwire barcarole barcella barcelona bard bardane bardash bardcraft bardel bardess bardic bardie bardiglio bardily bardiness barding bardish bardism bardlet bardlike bardling bardo bardship bardy bare bareback barebacked bareboat barebone bareboned bareca barefaced barefacedly barefacedness barefit barefoot barefooted barehanded barehead bareheaded bareheadedness barelegged barely barenecked bareness barer baresark baresma baretta barff barfish barfly barful bargain bargainee bargainer bargainor bargainwise bargander barge bargeboard bargee bargeer bargeese bargehouse bargelike bargeload bargeman bargemaster barger bargh bargham barghest bargoose bari baria baric barid barie barile barilla baring baris barish barit barite baritone barium bark barkbound barkcutter barkeeper barken barkentine barker barkery barkevikite barkevikitic barkey barkhan barking barkingly barkle barkless barklyite barkometer barkpeel barkpeeler barkpeeling barksome barky barlafumble barlafummil barless barley barleybird barleybreak barleycorn barleyhood barleymow barleysick barling barlock barlow barm barmaid barman barmaster barmbrack barmcloth barmkin barmote barmskin barmy barmybrained barn barnacle barnard barnbrack barney barnful barnhardtite barnman barnstorm barnstormer barnstorming barny barnyard barocyclonometer barodynamic barodynamics barognosis barogram barograph barographic baroi barolo barology barometer barometric barometrical barometrically barometrograph barometrography barometry barometz baromotor baron baronage baroness baronet baronetage baronetcy baronethood baronetical baronetship barong baronial baronize baronry baronship barony baroque baroscope baroscopic baroscopical barosmin barotactic barotaxis barotaxy barothermograph barothermohygrograph baroto barouche barouchet baroxyton barpost barquantine barra barrabkie barrable barrabora barracan barrack barracker barraclade barracoon barracouta barracuda barrad barragan barrage barragon barramunda barramundi barranca barrandite barras barrator barratrous barratrously barratry barred barrel barrelage barreled barreler barrelet barrelful barrelhead barrelmaker barrelmaking barrelwise barren barrenly barrenness barrenwort barrer barret barrette barretter barricade barricader barricado barrico barrier barriguda barrigudo barrikin barriness barring barrio barrister barristerial barristership barristress barroom barrow barrowful barrowman barrulee barrulet barrulety barruly barry barse barsom bartender bartending barter barterer barth barthite bartholinitis bartizan bartizaned barton baru baruria barvel barwal barway barways barwise barwood barycenter barycentric barye baryecoia baryglossia barylalia barylite baryphonia baryphonic baryphony barysilite barysphere baryta barytes barythymia barytic barytine barytocalcite barytocelestine barytocelestite baryton barytone barytophyllite barytostrontianite barytosulphate bas basal basale basalia basally basalt basaltes basaltic basaltiform basaltine basaltoid basanite basaree bascule base baseball baseballdom baseballer baseboard baseborn basebred based basehearted baseheartedness baselard baseless baselessly baselessness baselike baseliner basellaceous basely baseman basement basementward baseness basenji bases bash bashaw bashawdom bashawism bashawship bashful bashfully bashfulness bashlyk basial basialveolar basiarachnitis basiarachnoiditis basiate basiation basibranchial basibranchiate basibregmatic basic basically basichromatic basichromatin basichromatinic basichromiole basicity basicranial basicytoparaplastin basidia basidial basidigital basidigitale basidiogenetic basidiolichen basidiomycete basidiomycetous basidiophore basidiospore basidiosporous basidium basidorsal basifacial basification basifier basifixed basifugal basify basigamous basigamy basigenic basigenous basiglandular basigynium basihyal basihyoid basil basilar basilary basilateral basilemma basileus basilic basilica basilical basilican basilicate basilicon basilinna basiliscan basiliscine basilisk basilissa basilweed basilysis basilyst basimesostasis basin basinasal basinasial basined basinerved basinet basinlike basioccipital basion basiophitic basiophthalmite basiophthalmous basiotribe basiotripsy basiparachromatin basiparaplastin basipetal basiphobia basipodite basipoditic basipterygial basipterygium basipterygoid basiradial basirhinal basirostral basis basiscopic basisphenoid basisphenoidal basitemporal basiventral basivertebral bask basker basket basketball basketballer basketful basketing basketmaker basketmaking basketry basketware basketwoman basketwood basketwork basketworm basoid basommatophorous bason basophile basophilia basophilic basophilous basophobia basos basote basque basqued basquine bass bassan bassanello bassanite bassara bassarid bassarisk basset bassetite bassetta bassie bassine bassinet bassist bassness basso bassoon bassoonist bassorin bassus basswood bast basta bastard bastardism bastardization bastardize bastardliness bastardly bastardy baste basten baster bastide bastille bastinade bastinado basting bastion bastionary bastioned bastionet bastite bastnasite basto baston basurale bat bataan batad batakan bataleur batara batata batatilla batch batcher bate batea bateau bateaux bated batel bateman batement bater batfish batfowl batfowler batfowling bath bathe batheable bather bathetic bathflower bathhouse bathic bathing bathless bathman bathmic bathmism bathmotropic bathmotropism bathochromatic bathochromatism bathochrome bathochromic bathochromy bathoflore bathofloric batholite batholith batholithic batholitic bathometer bathophobia bathorse bathos bathrobe bathroom bathroomed bathroot bathtub bathukolpian bathukolpic bathvillite bathwort bathyal bathyanesthesia bathybian bathybic bathybius bathycentesis bathychrome bathycolpian bathycolpic bathycurrent bathyesthesia bathygraphic bathyhyperesthesia bathyhypesthesia bathylimnetic bathylite bathylith bathylithic bathylitic bathymeter bathymetric bathymetrical bathymetrically bathymetry bathyorographical bathypelagic bathyplankton bathyseism bathysmal bathysophic bathysophical bathysphere bathythermograph batidaceous batik batiker batikulin batikuling bating batino batiste batitinan batlan batlike batling batlon batman batoid baton batonistic batonne batophobia batrachian batrachiate batrachoid batrachophagous batrachophobia batrachoplasty bats batsman batsmanship batster batswing batt batta battailous battalia battalion battarism battarismus battel batteler batten battener battening batter batterable battercake batterdock battered batterer batterfang batteried batterman battery batteryman battik batting battish battle battled battledore battlefield battleful battleground battlement battlemented battleplane battler battleship battlesome battlestead battlewagon battleward battlewise battological battologist battologize battology battue batty batukite batule batwing batyphone batz batzen bauble baublery baubling bauch bauchle bauckie bauckiebird baud baudekin baudrons baul bauleah baumhauerite baun bauno bauson bausond bauta bauxite bauxitite bavaroy bavary bavenite baviaantje bavian baviere bavin bavoso baw bawarchi bawbee bawcock bawd bawdily bawdiness bawdry bawdship bawdyhouse bawl bawler bawley bawn bawtie baxter baxtone bay baya bayadere bayal bayamo bayard bayardly bayberry baybolt baybush baycuru bayed bayeta baygall bayhead bayish bayldonite baylet baylike bayman bayness bayok bayonet bayoneted bayoneteer bayou baywood bazaar baze bazoo bazooka bazzite bdellid bdellium bdelloid bdellotomy be beach beachcomb beachcomber beachcombing beached beachhead beachlamar beachless beachman beachmaster beachward beachy beacon beaconage beaconless beaconwise bead beaded beader beadflush beadhouse beadily beadiness beading beadle beadledom beadlehood beadleism beadlery beadleship beadlet beadlike beadman beadroll beadrow beadsman beadswoman beadwork beady beagle beagling beak beaked beaker beakerful beakerman beakermen beakful beakhead beakiron beaklike beaky beal beala bealing beallach bealtared beam beamage beambird beamed beamer beamfilling beamful beamhouse beamily beaminess beaming beamingly beamish beamless beamlet beamlike beamman beamsman beamster beamwork beamy bean beanbag beanbags beancod beanery beanfeast beanfeaster beanfield beanie beano beansetter beanshooter beanstalk beant beanweed beany beaproned bear bearable bearableness bearably bearance bearbaiter bearbaiting bearbane bearberry bearbind bearbine bearcoot beard bearded bearder beardie bearding beardless beardlessness beardom beardtongue beardy bearer bearess bearfoot bearherd bearhide bearhound bearing bearish bearishly bearishness bearlet bearlike bearm bearship bearskin beartongue bearward bearwood bearwort beast beastbane beastdom beasthood beastie beastily beastish beastishness beastlike beastlily beastliness beastling beastlings beastly beastman beastship beat beata beatable beatae beatee beaten beater beaterman beath beatific beatifical beatifically beatificate beatification beatify beatinest beating beatitude beatster beatus beau beaufin beauish beauism beaupere beauseant beauship beauteous beauteously beauteousness beauti beautician beautied beautification beautifier beautiful beautifully beautifulness beautify beautihood beauty beautydom beautyship beaux beaver beaverboard beavered beaverette beaverish beaverism beaverite beaverize beaverkin beaverlike beaverpelt beaverroot beaverteen beaverwood beavery beback bebait beballed bebang bebannered bebar bebaron bebaste bebat bebathe bebatter bebay bebeast bebed bebeerine bebeeru bebelted bebilya bebite bebization beblain beblear bebled bebless beblister beblood bebloom beblotch beblubber bebog bebop beboss bebotch bebothered bebouldered bebrave bebreech bebrine bebrother bebrush bebump bebusy bebuttoned becall becalm becalmment becap becard becarpet becarve becassocked becater because beccafico becense bechained bechalk bechance becharm bechase bechatter bechauffeur becheck becher bechern bechignoned bechirp becircled becivet beck beckelite becker becket beckiron beckon beckoner beckoning beckoningly beclad beclamor beclamour beclang beclart beclasp beclatter beclaw becloak beclog beclothe becloud beclout beclown becluster becobweb becoiffed becollier becolme becolor becombed become becomes becoming becomingly becomingness becomma becompass becompliment becoom becoresh becost becousined becovet becoward becquerelite becram becramp becrampon becrawl becreep becrime becrimson becrinolined becripple becroak becross becrowd becrown becrush becrust becry becudgel becuffed becuiba becumber becuna becurl becurry becurse becurtained becushioned becut bed bedabble bedad bedaggered bedamn bedamp bedangled bedare bedark bedarken bedash bedaub bedawn beday bedaze bedazement bedazzle bedazzlement bedazzling bedazzlingly bedboard bedbug bedcap bedcase bedchair bedchamber bedclothes bedcord bedcover bedded bedder bedding bedead bedeaf bedeafen bedebt bedeck bedecorate bedeguar bedel beden bedene bedesman bedevil bedevilment bedew bedewer bedewoman bedfast bedfellow bedfellowship bedflower bedfoot bedframe bedgery bedgoer bedgown bediademed bediamonded bediaper bedight bedikah bedim bedimple bedin bedip bedirt bedirter bedirty bedismal bedizen bedizenment bedkey bedlam bedlamer bedlamism bedlamite bedlamitish bedlamize bedlar bedless bedlids bedmaker bedmaking bedman bedmate bedoctor bedog bedolt bedot bedote bedouse bedown bedoyo bedpan bedplate bedpost bedquilt bedrabble bedraggle bedragglement bedrail bedral bedrape bedravel bedrench bedress bedribble bedrid bedridden bedriddenness bedrift bedright bedrip bedrivel bedrizzle bedrock bedroll bedroom bedrop bedrown bedrowse bedrug bedscrew bedsick bedside bedsite bedsock bedsore bedspread bedspring bedstaff bedstand bedstaves bedstead bedstock bedstraw bedstring bedtick bedticking bedtime bedub beduchess beduck beduke bedull bedumb bedunce bedunch bedung bedur bedusk bedust bedwarf bedway bedways bedwell bedye bee beearn beebread beech beechdrops beechen beechnut beechwood beechwoods beechy beedged beedom beef beefeater beefer beefhead beefheaded beefily beefin beefiness beefish beefishness beefless beeflower beefsteak beeftongue beefwood beefy beegerite beehead beeheaded beeherd beehive beehouse beeish beeishness beek beekeeper beekeeping beekite beelbow beelike beeline beelol beeman beemaster been beennut beer beerage beerbachite beerbibber beerhouse beerily beeriness beerish beerishly beermaker beermaking beermonger beerocracy beerpull beery bees beest beestings beeswax beeswing beeswinged beet beeth beetle beetled beetlehead beetleheaded beetler beetlestock beetlestone beetleweed beetmister beetrave beetroot beetrooty beety beeve beevish beeware beeway beeweed beewise beewort befall befame befamilied befamine befan befancy befanned befathered befavor befavour befeather beferned befetished befetter befezzed befiddle befilch befile befilleted befilmed befilth befinger befire befist befit befitting befittingly befittingness beflag beflannel beflap beflatter beflea befleck beflounce beflour beflout beflower beflum befluster befoam befog befool befoolment befop before beforehand beforeness beforested beforetime beforetimes befortune befoul befouler befoulment befountained befraught befreckle befreeze befreight befret befriend befriender befriendment befrill befringe befriz befrocked befrogged befrounce befrumple befuddle befuddlement befuddler befume befurbelowed befurred beg begabled begad begall begani begar begari begarlanded begarnish begartered begash begat begaud begaudy begay begaze begeck begem beget begettal begetter beggable beggar beggardom beggarer beggaress beggarhood beggarism beggarlike beggarliness beggarly beggarman beggarweed beggarwise beggarwoman beggary beggiatoaceous begging beggingly beggingwise begift begiggle begild begin beginger beginner beginning begird begirdle beglad beglamour beglare beglerbeg beglerbeglic beglerbegluc beglerbegship beglerbey beglic beglide beglitter beglobed begloom begloze begluc beglue begnaw bego begob begobs begoggled begohm begone begonia begoniaceous begorra begorry begotten begottenness begoud begowk begowned begrace begrain begrave begray begrease begreen begrett begrim begrime begrimer begroan begrown begrudge begrudgingly begruntle begrutch begrutten beguard beguess beguile beguileful beguilement beguiler beguiling beguilingly beguine begulf begum begun begunk begut behale behalf behallow behammer behap behatted behave behavior behavioral behaviored behaviorism behaviorist behavioristic behavioristically behead beheadal beheader beheadlined behear behears behearse behedge beheld behelp behemoth behen behenate behenic behest behind behinder behindhand behindsight behint behn behold beholdable beholden beholder beholding beholdingness behoney behoof behooped behoot behoove behooveful behoovefully behoovefulness behooves behooving behoovingly behorn behorror behowl behung behusband behymn behypocrite beice beige being beingless beingness beinked beira beisa bejabers bejade bejan bejant bejaundice bejazz bejel bejewel bejezebel bejig bejuggle bejumble bekah bekerchief bekick bekilted beking bekinkinite bekiss bekko beknave beknight beknit beknived beknotted beknottedly beknottedness beknow beknown bel bela belabor belaced beladle belady belage belah belam belanda belar belard belash belate belated belatedly belatedness belatticed belaud belauder belavendered belay belayer belch belcher beld beldam beldamship belderroot belduque beleaf beleaguer beleaguerer beleaguerment beleap beleave belecture beledgered belee belemnid belemnite belemnitic belemnoid beletter belfried belfry belga belibel belick belie belief beliefful belieffulness beliefless belier believability believable believableness believe believer believing believingly belight beliked belimousined belion beliquor belite belitter belittle belittlement belittler belive bell belladonna bellarmine bellbind bellbird bellbottle bellboy belle belled belledom bellehood belleric belletrist belletristic bellflower bellhanger bellhanging bellhop bellhouse bellicism bellicose bellicosely bellicoseness bellicosity bellied belliferous belligerence belligerency belligerent belligerently belling bellipotent bellite bellmaker bellmaking bellman bellmanship bellmaster bellmouth bellmouthed bellonion bellote bellow bellower bellows bellowsful bellowslike bellowsmaker bellowsmaking bellowsman bellpull belltail belltopper belltopperdom bellware bellwaver bellweed bellwether bellwind bellwine bellwood bellwort belly bellyache bellyband bellyer bellyfish bellyflaught bellyful bellying bellyland bellylike bellyman bellypiece bellypinch beloam beloeilite beloid belomancy belonesite belong belonger belonging belonid belonite belonoid belonosphaerite belord belout belove beloved below belowstairs belozenged belsire belt belted belter beltie beltine belting beltmaker beltmaking beltman belton beltwise beluga belugite belute belve belvedere bely belying belyingly belzebuth bema bemad bemadam bemaddening bemail bemaim bemajesty beman bemangle bemantle bemar bemartyr bemask bemaster bemat bemata bemaul bemazed bemeal bemean bemedaled bemedalled bementite bemercy bemingle beminstrel bemire bemirement bemirror bemirrorment bemist bemistress bemitered bemitred bemix bemoan bemoanable bemoaner bemoaning bemoaningly bemoat bemock bemoil bemoisten bemole bemolt bemonster bemoon bemotto bemoult bemouth bemuck bemud bemuddle bemuddlement bemuddy bemuffle bemurmur bemuse bemused bemusedly bemusement bemusk bemuslined bemuzzle ben bena benab bename benami benamidar benasty benben bench benchboard bencher benchership benchfellow benchful benching benchland benchlet benchman benchwork benchy bencite bend benda bendability bendable bended bender bending bendingly bendlet bendsome bendwise bendy bene beneaped beneath beneception beneceptive beneceptor benedicite benedict benediction benedictional benedictionary benedictive benedictively benedictory benedight benefaction benefactive benefactor benefactorship benefactory benefactress benefic benefice beneficed beneficeless beneficence beneficent beneficential beneficently beneficial beneficially beneficialness beneficiary beneficiaryship beneficiate beneficiation benefit benefiter beneighbored benempt benempted beneplacito benet benettle benevolence benevolent benevolently benevolentness benevolist beng bengaline beni benight benighted benightedness benighten benighter benightmare benightment benign benignancy benignant benignantly benignity benignly benison benitoite benj benjamin benjaminite benjy benmost benn benne bennel bennet bennettitaceous bennetweed benny beno benorth benote bensel bensh benshea benshee benshi bent bentang benthal benthic benthon benthonic benthos bentiness benting bentonite bentstar bentwood benty benumb benumbed benumbedness benumbing benumbingly benumbment benward benweed benzacridine benzal benzalacetone benzalacetophenone benzalaniline benzalazine benzalcohol benzalcyanhydrin benzaldehyde benzaldiphenyl benzaldoxime benzalethylamine benzalhydrazine benzalphenylhydrazone benzalphthalide benzamide benzamido benzamine benzaminic benzamino benzanalgen benzanilide benzanthrone benzantialdoxime benzazide benzazimide benzazine benzazole benzbitriazole benzdiazine benzdifuran benzdioxazine benzdioxdiazine benzdioxtriazine benzein benzene benzenediazonium benzenoid benzenyl benzhydrol benzhydroxamic benzidine benzidino benzil benzilic benzimidazole benziminazole benzinduline benzine benzo benzoate benzoated benzoazurine benzobis benzocaine benzocoumaran benzodiazine benzodiazole benzoflavine benzofluorene benzofulvene benzofuran benzofuroquinoxaline benzofuryl benzoglycolic benzoglyoxaline benzohydrol benzoic benzoid benzoin benzoinated benzoiodohydrin benzol benzolate benzole benzolize benzomorpholine benzonaphthol benzonitrile benzonitrol benzoperoxide benzophenanthrazine benzophenanthroline benzophenazine benzophenol benzophenone benzophenothiazine benzophenoxazine benzophloroglucinol benzophosphinic benzophthalazine benzopinacone benzopyran benzopyranyl benzopyrazolone benzopyrylium benzoquinoline benzoquinone benzoquinoxaline benzosulphimide benzotetrazine benzotetrazole benzothiazine benzothiazole benzothiazoline benzothiodiazole benzothiofuran benzothiophene benzothiopyran benzotoluide benzotriazine benzotriazole benzotrichloride benzotrifuran benzoxate benzoxy benzoxyacetic benzoxycamphor benzoxyphenanthrene benzoyl benzoylate benzoylation benzoylformic benzoylglycine benzpinacone benzthiophen benztrioxazine benzyl benzylamine benzylic benzylidene benzylpenicillin beode bepaid bepale bepaper beparch beparody beparse bepart bepaste bepastured bepat bepatched bepaw bepearl bepelt bepen bepepper beperiwigged bepester bepewed bephilter bephrase bepicture bepiece bepierce bepile bepill bepillared bepimple bepinch bepistoled bepity beplague beplaided beplaster beplumed bepommel bepowder bepraise bepraisement bepraiser beprank bepray bepreach bepress bepretty bepride beprose bepuddle bepuff bepun bepurple bepuzzle bepuzzlement bequalm bequeath bequeathable bequeathal bequeather bequeathment bequest bequirtle bequote ber berain berairou berakah berake berakoth berapt berascal berat berate berattle beraunite beray berbamine berberid berberidaceous berberine berberry berdache bere bereason bereave bereavement bereaven bereaver bereft berend berengelite beresite beret berewick berg bergalith bergamiol bergamot bergander bergaptene berger berghaan berginization berginize berglet bergschrund bergut bergy bergylt berhyme beribanded beribboned beriberi beriberic beride berigora beringed beringite beringleted berinse berith berkelium berkovets berkowitz berley berlin berline berlinite berm bermudite berne bernicle berobed beroll berouged beround berrendo berret berri berried berrier berrigan berrugate berry berrybush berryless berrylike berrypicker berrypicking berseem berserk berserker berth berthage berthed berther berthierite berthing bertram bertrandite bertrum beruffed beruffled berust bervie berycid beryciform berycine berycoid berycoidean beryl berylate beryllia berylline berylliosis beryllium berylloid beryllonate beryllonite beryllosis berzelianite berzeliite bes besa besagne besaiel besaint besan besanctify besauce bescab bescarf bescatter bescent bescorch bescorn bescoundrel bescour bescourge bescramble bescrape bescratch bescrawl bescreen bescribble bescurf bescurvy bescutcheon beseam besee beseech beseecher beseeching beseechingly beseechingness beseechment beseem beseeming beseemingly beseemingness beseemliness beseemly beseen beset besetment besetter besetting beshackle beshade beshadow beshag beshake beshame beshawled beshear beshell beshield beshine beshiver beshlik beshod beshout beshow beshower beshrew beshriek beshrivel beshroud besiclometer beside besides besiege besieged besiegement besieger besieging besiegingly besigh besilver besin besing besiren besit beslab beslap beslash beslave beslaver besleeve beslime beslimer beslings beslipper beslobber beslow beslubber beslur beslushed besmear besmearer besmell besmile besmirch besmircher besmirchment besmoke besmooth besmother besmouch besmudge besmut besmutch besnare besneer besnivel besnow besnuff besodden besogne besognier besoil besom besomer besonnet besoot besoothe besoothement besot besotment besotted besottedly besottedness besotting besottingly besought besoul besour bespangle bespate bespatter bespatterer bespatterment bespawl bespeak bespeakable bespeaker bespecked bespeckle bespecklement bespectacled besped bespeech bespeed bespell bespelled bespend bespete bespew bespice bespill bespin bespirit bespit besplash besplatter besplit bespoke bespoken bespot bespottedness bespouse bespout bespray bespread besprent besprinkle besprinkler bespurred besputter bespy besqueeze besquib besra bessemer bessemerize best bestab bestain bestamp bestar bestare bestarve bestatued bestay bestayed bestead besteer bestench bester bestial bestialism bestialist bestiality bestialize bestially bestiarian bestiarianism bestiary bestick bestill bestink bestir bestness bestock bestore bestorm bestove bestow bestowable bestowage bestowal bestower bestowing bestowment bestraddle bestrapped bestraught bestraw bestreak bestream bestrew bestrewment bestride bestripe bestrode bestubbled bestuck bestud besugar besuit besully beswarm besweatered besweeten beswelter beswim beswinge beswitch bet beta betacism betacismus betafite betag betail betailor betaine betainogen betalk betallow betangle betanglement betask betassel betatron betattered betaxed betear beteela beteem betel beth bethabara bethankit bethel bethflower bethink bethought bethrall bethreaten bethroot bethumb bethump bethunder bethwack betide betimber betimes betinge betipple betire betis betitle betocsin betoil betoken betokener betone betongue betony betorcin betorcinol betoss betowel betowered betrace betrail betrample betrap betravel betray betrayal betrayer betrayment betread betrend betrim betrinket betroth betrothal betrothed betrothment betrough betrousered betrumpet betrunk betso betted better betterer bettergates bettering betterly betterment bettermost betterness betters betting bettong bettonga bettor betty betuckered betulaceous betulin betulinamaric betulinic betulinol beturbaned betusked betutor betutored betwattled between betweenbrain betweenity betweenmaid betweenness betweenwhiles betwine betwit betwixen betwixt beudantite beuniformed bevatron beveil bevel beveled beveler bevelled bevelment bevenom bever beverage beverse bevesseled bevesselled beveto bevillain bevined bevoiled bevomit bevue bevy bewail bewailable bewailer bewailing bewailingly bewailment bewaitered bewall beware bewash bewaste bewater beweary beweep beweeper bewelcome bewelter bewept bewest bewet bewhig bewhiskered bewhisper bewhistle bewhite bewhiten bewidow bewig bewigged bewilder bewildered bewilderedly bewilderedness bewildering bewilderingly bewilderment bewimple bewinged bewinter bewired bewitch bewitchedness bewitcher bewitchery bewitchful bewitching bewitchingly bewitchingness bewitchment bewith bewizard bework beworm beworn beworry beworship bewrap bewrathed bewray bewrayer bewrayingly bewrayment bewreath bewreck bewrite bey beydom beylic beylical beyond beyrichite beyship bezant bezantee bezanty bezel bezesteen bezetta bezique bezoar bezoardic bezonian bezzi bezzle bezzo bhabar bhagavat bhagavata bhaiachari bhaiyachara bhakta bhakti bhalu bhandar bhandari bhang bhangi bhara bharal bhat bhava bheesty bhikku bhikshu bhoosa bhoy bhungi bhungini bhut bhutatathata biabo biacetyl biacetylene biacid biacromial biacuminate biacuru bialate biallyl bialveolar bianchite bianco biangular biangulate biangulated biangulous bianisidine biannual biannually biannulate biarchy biarcuate biarcuated biarticular biarticulate biarticulated bias biasness biasteric biaswise biatomic biauricular biauriculate biaxal biaxial biaxiality biaxially biaxillary bib bibacious bibacity bibasic bibation bibb bibber bibble bibbler bibbons bibcock bibenzyl bibi bibionid bibiri bibitory bibless biblioclasm biblioclast bibliofilm bibliogenesis bibliognost bibliognostic bibliogony bibliograph bibliographer bibliographic bibliographical bibliographically bibliographize bibliography biblioklept bibliokleptomania bibliokleptomaniac bibliolater bibliolatrous bibliolatry bibliological bibliologist bibliology bibliomancy bibliomane bibliomania bibliomaniac bibliomaniacal bibliomanian bibliomanianism bibliomanism bibliomanist bibliopegic bibliopegist bibliopegistic bibliopegy bibliophage bibliophagic bibliophagist bibliophagous bibliophile bibliophilic bibliophilism bibliophilist bibliophilistic bibliophily bibliophobia bibliopolar bibliopole bibliopolery bibliopolic bibliopolical bibliopolically bibliopolism bibliopolist bibliopolistic bibliopoly bibliosoph bibliotaph bibliotaphic bibliothec bibliotheca bibliothecal bibliothecarial bibliothecarian bibliothecary bibliotherapeutic bibliotherapist bibliotherapy bibliothetic bibliotic bibliotics bibliotist biblus biborate bibracteate bibracteolate bibulosity bibulous bibulously bibulousness bicalcarate bicameral bicameralism bicamerist bicapitate bicapsular bicarbonate bicarbureted bicarinate bicarpellary bicarpellate bicaudal bicaudate bice bicellular bicentenary bicentennial bicephalic bicephalous biceps bicetyl bichir bichloride bichord bichromate bichromatic bichromatize bichrome bichromic bichy biciliate biciliated bicipital bicipitous bicircular bicirrose bick bicker bickerer bickern biclavate biclinium bicollateral bicollaterality bicolligate bicolor bicolored bicolorous biconcave biconcavity bicondylar bicone biconic biconical biconically biconjugate biconsonantal biconvex bicorn bicornate bicorne bicorned bicornous bicornuate bicornuous bicornute bicorporal bicorporate bicorporeal bicostate bicrenate bicrescentic bicrofarad bicron bicrural bicursal bicuspid bicuspidate bicyanide bicycle bicycler bicyclic bicyclism bicyclist bicyclo bicycloheptane bicylindrical bid bidactyl bidactyle bidactylous bidar bidarka bidcock biddable biddableness biddably biddance bidder bidding biddy bide bident bidental bidentate bidented bidential bidenticulate bider bidet bidigitate bidimensional biding bidirectional bidiurnal bidri biduous bieberite bield bieldy bielectrolysis bielenite bien bienly bienness biennia biennial biennially biennium bier bierbalk biethnic bietle bifacial bifanged bifara bifarious bifariously bifer biferous biff biffin bifid bifidate bifidated bifidity bifidly bifilar bifilarly bifistular biflabellate biflagellate biflecnode biflected biflex biflorate biflorous bifluoride bifocal bifoil bifold bifolia bifoliate bifoliolate bifolium biforked biform biformed biformity biforous bifront bifrontal bifronted bifurcal bifurcate bifurcated bifurcately bifurcation big biga bigamic bigamist bigamistic bigamize bigamous bigamously bigamy bigarade bigaroon bigarreau bigbloom bigemina bigeminal bigeminate bigeminated bigeminum bigener bigeneric bigential bigeye bigg biggah biggen bigger biggest biggin biggish biggonet bigha bighead bighearted bigheartedness bighorn bight biglandular biglenoid biglot bigmouth bigmouthed bigness bignoniaceous bignoniad bignou bigoniac bigonial bigot bigoted bigotedly bigotish bigotry bigotty bigroot bigthatch biguanide biguttate biguttulate bigwig bigwigged bigwiggedness bigwiggery bigwiggism bihamate biharmonic bihourly bihydrazine bija bijasal bijou bijouterie bijoux bijugate bijugular bike bikh bikhaconitine bikini bilabe bilabial bilabiate bilalo bilamellar bilamellate bilamellated bilaminar bilaminate bilaminated bilander bilateral bilateralism bilaterality bilaterally bilateralness bilberry bilbie bilbo bilboquet bilby bilch bilcock bildar bilders bile bilestone bilge bilgy bilharzial bilharziasis bilharzic bilharziosis bilianic biliary biliate biliation bilic bilicyanin bilifaction biliferous bilification bilifuscin bilify bilihumin bilimbi bilimbing biliment bilinear bilineate bilingual bilingualism bilingually bilinguar bilinguist bilinigrin bilinite bilio bilious biliously biliousness biliprasin bilipurpurin bilipyrrhin bilirubin bilirubinemia bilirubinic bilirubinuria biliteral biliteralism bilith bilithon biliverdic biliverdin bilixanthin bilk bilker bill billa billable billabong billback billbeetle billboard billbroking billbug billed biller billet billeter billethead billeting billetwood billety billfish billfold billhead billheading billholder billhook billian billiard billiardist billiardly billiards billikin billing billingsgate billion billionaire billionism billionth billitonite billman billon billot billow billowiness billowy billposter billposting billsticker billsticking billy billyboy billycan billycock billyer billyhood billywix bilo bilobated bilobe bilobed bilobiate bilobular bilocation bilocellate bilocular biloculate biloculine bilophodont bilsh bilsted biltong biltongue bimaculate bimaculated bimalar bimanal bimane bimanous bimanual bimanually bimarginate bimarine bimastic bimastism bimastoid bimasty bimaxillary bimbil bimeby bimensal bimester bimestrial bimetalic bimetallism bimetallist bimetallistic bimillenary bimillennium bimillionaire bimodal bimodality bimolecular bimonthly bimotored bimotors bimucronate bimuscular bin binal binaphthyl binarium binary binate binately bination binational binaural binauricular binbashi bind binder bindery bindheimite binding bindingly bindingness bindle bindlet bindoree bindweb bindweed bindwith bindwood bine binervate bineweed bing binge bingey binghi bingle bingo bingy binh biniodide bink binman binna binnacle binning binnite binnogue bino binocle binocular binocularity binocularly binoculate binodal binode binodose binodous binomenclature binomial binomialism binomially binominal binominated binominous binormal binotic binotonous binous binoxalate binoxide bint bintangor binturong binuclear binucleate binucleated binucleolate binukau biobibliographical biobibliography bioblast bioblastic biocatalyst biocellate biocentric biochemic biochemical biochemically biochemics biochemist biochemistry biochemy biochore bioclimatic bioclimatology biocoenose biocoenosis biocoenotic biocycle biod biodynamic biodynamical biodynamics biodyne bioecologic bioecological bioecologically bioecologist bioecology biogen biogenase biogenesis biogenesist biogenetic biogenetical biogenetically biogenetics biogenous biogeny biogeochemistry biogeographic biogeographical biogeographically biogeography biognosis biograph biographee biographer biographic biographical biographically biographist biographize biography bioherm biokinetics biolinguistics biolith biologese biologic biological biologically biologicohumanistic biologism biologist biologize biology bioluminescence bioluminescent biolysis biolytic biomagnetic biomagnetism biomathematics biome biomechanical biomechanics biometeorology biometer biometric biometrical biometrically biometrician biometricist biometrics biometry biomicroscopy bion bionergy bionomic bionomical bionomically bionomics bionomist bionomy biophagism biophagous biophagy biophilous biophore biophotophone biophysical biophysicochemical biophysics biophysiography biophysiological biophysiologist biophysiology biophyte bioplasm bioplasmic bioplast bioplastic bioprecipitation biopsic biopsy biopsychic biopsychical biopsychological biopsychologist biopsychology biopyribole bioral biorbital biordinal bioreaction biorgan bios bioscope bioscopic bioscopy biose biosis biosocial biosociological biosphere biostatic biostatical biostatics biostatistics biosterin biosterol biostratigraphy biosynthesis biosynthetic biosystematic biosystematics biosystematist biosystematy biota biotaxy biotechnics biotic biotical biotics biotin biotite biotitic biotome biotomy biotope biotype biotypic biovular biovulate bioxalate bioxide bipack bipaleolate bipalmate biparasitic biparental biparietal biparous biparted bipartible bipartient bipartile bipartisan bipartisanship bipartite bipartitely bipartition biparty bipaschal bipectinate bipectinated biped bipedal bipedality bipedism bipeltate bipennate bipennated bipenniform biperforate bipersonal bipetalous biphase biphasic biphenol biphenyl biphenylene bipinnaria bipinnate bipinnated bipinnately bipinnatifid bipinnatiparted bipinnatipartite bipinnatisect bipinnatisected biplanal biplanar biplane biplicate biplicity biplosion biplosive bipod bipolar bipolarity bipolarize biporose biporous biprism biprong bipunctal bipunctate bipunctual bipupillate bipyramid bipyramidal bipyridine bipyridyl biquadrantal biquadrate biquadratic biquarterly biquartz biquintile biracial biracialism biradial biradiate biradiated biramous birational birch birchbark birchen birching birchman birchwood bird birdbander birdbanding birdbath birdberry birdcall birdcatcher birdcatching birdclapper birdcraft birddom birdeen birder birdglue birdhood birdhouse birdie birdikin birding birdland birdless birdlet birdlike birdlime birdling birdlore birdman birdmouthed birdnest birdnester birdseed birdstone birdweed birdwise birdwoman birdy birectangular birefracting birefraction birefractive birefringence birefringent bireme biretta biri biriba birimose birk birken birkie birkremite birl birle birler birlie birlieman birlinn birma birn birny birostrate birostrated birotation birotatory birr birse birsle birsy birth birthbed birthday birthland birthless birthmark birthmate birthnight birthplace birthright birthroot birthstone birthstool birthwort birthy bis bisabol bisaccate bisacromial bisalt bisantler bisaxillary bisbeeite biscacha biscayen bischofite biscotin biscuit biscuiting biscuitlike biscuitmaker biscuitmaking biscuitroot biscuitry bisdiapason bisdimethylamino bisect bisection bisectional bisectionally bisector bisectrices bisectrix bisegment biseptate biserial biserially biseriate biseriately biserrate bisetose bisetous bisexed bisext bisexual bisexualism bisexuality bisexually bisexuous bisglyoxaline bishop bishopdom bishopess bishopful bishophood bishopless bishoplet bishoplike bishopling bishopric bishopship bishopweed bisiliac bisilicate bisiliquous bisimine bisinuate bisinuation bisischiadic bisischiatic bislings bismar bismarine bismerpund bismillah bismite bismuth bismuthal bismuthate bismuthic bismuthide bismuthiferous bismuthine bismuthinite bismuthite bismuthous bismuthyl bismutite bismutoplagionite bismutosmaltite bismutosphaerite bisnaga bison bisonant bisontine bisphenoid bispinose bispinous bispore bisporous bisque bisquette bissext bissextile bisson bistate bistephanic bister bistered bistetrazole bisti bistipular bistipulate bistipuled bistort bistournage bistoury bistratal bistratose bistriate bistriazole bistro bisubstituted bisubstitution bisulcate bisulfid bisulphate bisulphide bisulphite bisyllabic bisyllabism bisymmetric bisymmetrical bisymmetrically bisymmetry bit bitable bitangent bitangential bitanhol bitartrate bitbrace bitch bite bitemporal bitentaculate biter biternate biternately bitesheep bitewing bitheism biti biting bitingly bitingness bitless bito bitolyl bitonality bitreadle bitripartite bitripinnatifid bitriseptate bitrochanteric bitstock bitstone bitt bitted bitten bitter bitterbark bitterblain bitterbloom bitterbur bitterbush bitterful bitterhead bitterhearted bitterheartedness bittering bitterish bitterishness bitterless bitterling bitterly bittern bitterness bitternut bitterroot bitters bittersweet bitterweed bitterwood bitterworm bitterwort bitthead bittie bittock bitty bitubercular bituberculate bituberculated bitulithic bitume bitumed bitumen bituminate bituminiferous bituminization bituminize bituminoid bituminous bitwise bityite bitypic biune biunial biunity biunivocal biurate biurea biuret bivalence bivalency bivalent bivalve bivalved bivalvian bivalvous bivalvular bivariant bivariate bivascular bivaulted bivector biventer biventral biverbal bivinyl bivious bivittate bivocal bivocalized bivoltine bivoluminous bivouac biwa biweekly biwinter bixaceous bixbyite bixin biyearly biz bizardite bizarre bizarrely bizarreness bizet bizonal bizone bizygomatic bizz blab blabber blabberer blachong black blackacre blackamoor blackback blackball blackballer blackband blackbelly blackberry blackbine blackbird blackbirder blackbirding blackboard blackboy blackbreast blackbush blackbutt blackcap blackcoat blackcock blackdamp blacken blackener blackening blacker blacketeer blackey blackeyes blackface blackfellow blackfellows blackfin blackfire blackfish blackfisher blackfishing blackfoot blackguard blackguardism blackguardize blackguardly blackguardry blackhead blackheads blackheart blackhearted blackheartedness blackie blacking blackish blackishly blackishness blackit blackjack blackland blackleg blackleggery blacklegism blacklegs blackly blackmail blackmailer blackneb blackneck blackness blacknob blackout blackpoll blackroot blackseed blackshirted blacksmith blacksmithing blackstick blackstrap blacktail blackthorn blacktongue blacktree blackwash blackwasher blackwater blackwood blackwork blackwort blacky blad bladder bladderet bladderless bladderlike bladdernose bladdernut bladderpod bladderseed bladderweed bladderwort bladdery blade bladebone bladed bladelet bladelike blader bladesmith bladewise blading bladish blady bladygrass blae blaeberry blaeness blaewort blaff blaffert blaflum blah blahlaut blain blair blairmorite blake blakeberyed blamable blamableness blamably blame blamed blameful blamefully blamefulness blameless blamelessly blamelessness blamer blameworthiness blameworthy blaming blamingly blan blanc blanca blancard blanch blancher blanching blanchingly blancmange blancmanger blanco bland blanda blandiloquence blandiloquious blandiloquous blandish blandisher blandishing blandishingly blandishment blandly blandness blank blankard blankbook blanked blankeel blanket blanketed blanketeer blanketflower blanketing blanketless blanketmaker blanketmaking blanketry blanketweed blankety blanking blankish blankite blankly blankness blanky blanque blanquillo blare blarney blarneyer blarnid blarny blart blas blase blash blashy blaspheme blasphemer blasphemous blasphemously blasphemousness blasphemy blast blasted blastema blastemal blastematic blastemic blaster blastful blasthole blastid blastie blasting blastment blastocarpous blastocheme blastochyle blastocoele blastocolla blastocyst blastocyte blastoderm blastodermatic blastodermic blastodisk blastogenesis blastogenetic blastogenic blastogeny blastogranitic blastoid blastoma blastomata blastomere blastomeric blastomycete blastomycetic blastomycetous blastomycosis blastomycotic blastoneuropore blastophitic blastophoral blastophore blastophoric blastophthoria blastophthoric blastophyllum blastoporal blastopore blastoporic blastoporphyritic blastosphere blastospheric blastostylar blastostyle blastozooid blastplate blastula blastulae blastular blastulation blastule blasty blat blatancy blatant blatantly blate blately blateness blather blatherer blatherskite blathery blatjang blatta blatter blatterer blatti blattid blattiform blattoid blaubok blauwbok blaver blaw blawort blay blaze blazer blazing blazingly blazon blazoner blazoning blazonment blazonry blazy bleaberry bleach bleachability bleachable bleached bleacher bleacherite bleacherman bleachery bleachfield bleachground bleachhouse bleaching bleachman bleachworks bleachyard bleak bleakish bleakly bleakness bleaky blear bleared blearedness bleareye bleariness blearness bleary bleat bleater bleating bleatingly bleaty bleb blebby blechnoid bleck blee bleed bleeder bleeding bleekbok bleery bleeze bleezy blellum blemish blemisher blemishment blench blencher blenching blenchingly blencorn blend blendcorn blende blended blender blending blendor blendure blendwater blennadenitis blennemesis blennenteria blennenteritis blenniid blenniiform blennioid blennocele blennocystitis blennoemesis blennogenic blennogenous blennoid blennoma blennometritis blennophlogisma blennophlogosis blennophthalmia blennoptysis blennorrhagia blennorrhagic blennorrhea blennorrheal blennorrhinia blennosis blennostasis blennostatic blennothorax blennotorrhea blennuria blenny blennymenitis blent bleo blephara blepharadenitis blepharal blepharanthracosis blepharedema blepharelcosis blepharemphysema blepharism blepharitic blepharitis blepharoadenitis blepharoadenoma blepharoatheroma blepharoblennorrhea blepharocarcinoma blepharochalasis blepharochromidrosis blepharoclonus blepharocoloboma blepharoconjunctivitis blepharodiastasis blepharodyschroia blepharohematidrosis blepharolithiasis blepharomelasma blepharoncosis blepharoncus blepharophimosis blepharophryplasty blepharophthalmia blepharophyma blepharoplast blepharoplastic blepharoplasty blepharoplegia blepharoptosis blepharopyorrhea blepharorrhaphy blepharospasm blepharospath blepharosphincterectomy blepharostat blepharostenosis blepharosymphysis blepharosyndesmitis blepharosynechia blepharotomy blepharydatis blesbok blesbuck bless blessed blessedly blessedness blesser blessing blessingly blest blet bletheration blewits blibe blick blickey blight blightbird blighted blighter blighting blightingly blighty blimbing blimp blimy blind blindage blindball blinded blindedly blinder blindeyes blindfast blindfish blindfold blindfolded blindfoldedness blindfolder blindfoldly blinding blindingly blindish blindless blindling blindly blindness blindstory blindweed blindworm blink blinkard blinked blinker blinkered blinking blinkingly blinks blinky blinter blintze blip bliss blissful blissfully blissfulness blissless blissom blister blistered blistering blisteringly blisterweed blisterwort blistery blite blithe blithebread blitheful blithefully blithehearted blithelike blithely blithemeat blithen blitheness blither blithering blithesome blithesomely blithesomeness blitter blitz blitzbuggy blitzkrieg blizz blizzard blizzardly blizzardous blizzardy blo bloat bloated bloatedness bloater bloating blob blobbed blobber blobby bloc block blockade blockader blockage blockbuster blocked blocker blockhead blockheaded blockheadedly blockheadedness blockheadish blockheadishness blockheadism blockholer blockhouse blockiness blocking blockish blockishly blockishness blocklayer blocklike blockmaker blockmaking blockman blockpate blockship blocky blodite bloke blolly blomstrandine blonde blondeness blondine blood bloodalley bloodalp bloodbeat bloodberry bloodbird bloodcurdler bloodcurdling blooddrop blooddrops blooded bloodfin bloodflower bloodguilt bloodguiltiness bloodguiltless bloodguilty bloodhound bloodied bloodily bloodiness bloodleaf bloodless bloodlessly bloodlessness bloodletter bloodletting bloodline bloodmobile bloodmonger bloodnoun bloodripe bloodripeness bloodroot bloodshed bloodshedder bloodshedding bloodshot bloodshotten bloodspiller bloodspilling bloodstain bloodstained bloodstainedness bloodstanch bloodstock bloodstone bloodstroke bloodsuck bloodsucker bloodsucking bloodthirst bloodthirster bloodthirstily bloodthirstiness bloodthirsting bloodthirsty bloodweed bloodwite bloodwood bloodworm bloodwort bloodworthy bloody bloodybones blooey bloom bloomage bloomer bloomerism bloomers bloomery bloomfell blooming bloomingly bloomingness bloomkin bloomless bloomy bloop blooper blooping blore blosmy blossom blossombill blossomed blossomhead blossomless blossomry blossomtime blossomy blot blotch blotched blotchy blotless blotter blottesque blottesquely blotting blottingly blotto blotty bloubiskop blouse bloused blousing blout blow blowback blowball blowcock blowdown blowen blower blowfish blowfly blowgun blowhard blowhole blowiness blowing blowings blowiron blowlamp blowline blown blowoff blowout blowpipe blowpoint blowproof blowspray blowth blowtorch blowtube blowup blowy blowze blowzed blowzing blowzy blub blubber blubberer blubbering blubberingly blubberman blubberous blubbery blucher bludgeon bludgeoned bludgeoneer bludgeoner blue blueback bluebead bluebeard bluebell bluebelled blueberry bluebill bluebird blueblaw bluebonnet bluebook bluebottle bluebreast bluebuck bluebush bluebutton bluecap bluecoat bluecup bluefish bluegill bluegown bluegrass bluehearted bluehearts blueing bluejack bluejacket bluejoint blueleg bluelegs bluely blueness bluenose blueprint blueprinter bluer blues bluesides bluestem bluestocking bluestockingish bluestockingism bluestone bluestoner bluet bluethroat bluetongue bluetop blueweed bluewing bluewood bluey bluff bluffable bluffer bluffly bluffness bluffy bluggy bluing bluish bluishness bluism blunder blunderbuss blunderer blunderful blunderhead blunderheaded blunderheadedness blundering blunderingly blundersome blunge blunger blunk blunker blunks blunnen blunt blunter blunthead blunthearted bluntie bluntish bluntly bluntness blup blur blurb blurbist blurred blurredness blurrer blurry blurt blush blusher blushful blushfully blushfulness blushiness blushing blushingly blushless blushwort blushy bluster blusteration blusterer blustering blusteringly blusterous blusterously blustery blype bo boa boagane boanergism boar boarcite board boardable boarder boarding boardinghouse boardlike boardly boardman boardwalk boardy boarfish boarhound boarish boarishly boarishness boarship boarskin boarspear boarstaff boarwood boast boaster boastful boastfully boastfulness boasting boastive boastless boat boatable boatage boatbill boatbuilder boatbuilding boater boatfalls boatful boathead boatheader boathouse boatie boating boatkeeper boatless boatlike boatlip boatload boatloader boatloading boatly boatman boatmanship boatmaster boatowner boatsetter boatshop boatside boatsman boatswain boattail boatward boatwise boatwoman boatwright bob boba bobac bobbed bobber bobbery bobbin bobbiner bobbinet bobbing bobbinwork bobbish bobbishly bobble bobby bobcat bobcoat bobeche bobfly bobierrite bobization bobjerom bobo bobolink bobotie bobsled bobsleigh bobstay bobtail bobtailed bobwhite bobwood bocaccio bocal bocardo bocasine bocca boccale boccarella boccaro bocce boce bocedization bocher bock bockerel bockeret bocking bocoy bod bodach bodacious bodaciously bode bodeful bodega bodement boden bodenbenderite boder bodewash bodge bodger bodgery bodhi bodhisattva bodice bodiced bodicemaker bodicemaking bodied bodier bodieron bodikin bodiless bodilessness bodiliness bodily bodiment boding bodingly bodkin bodkinwise bodle bodock body bodybending bodybuilder bodyguard bodyhood bodyless bodymaker bodymaking bodyplate bodywise bodywood bodywork boeotarch bog boga bogan bogard bogart bogberry bogey bogeyman boggart boggin bogginess boggish boggle bogglebo boggler boggy boghole bogie bogieman bogier bogland boglander bogle bogledom boglet bogman bogmire bogo bogong bogsucker bogtrot bogtrotter bogtrotting bogue bogum bogus bogusness bogway bogwood bogwort bogy bogydom bogyism bogyland bohawn bohea bohemium bohereen bohireen boho bohor bohunk boid boil boilable boildown boiled boiler boilerful boilerhouse boilerless boilermaker boilermaking boilerman boilersmith boilerworks boilery boiling boilinglike boilingly boilover boily boist boisterous boisterously boisterousness bojite bojo bokadam bokard bokark boke bokom bola bolar bold bolden boldhearted boldine boldly boldness boldo bole bolection bolectioned boled boleite bolelike bolero boletaceous bolete boleweed bolewort bolide bolimba bolis bolivar bolivarite bolivia boliviano bolk boll bollard bolled boller bolling bollock bollworm bolly bolo bolograph bolographic bolographically bolography boloman bolometer bolometric boloney boloroot bolson bolster bolsterer bolsterwork bolt boltage boltant boltcutter boltel bolter bolthead boltheader boltheading bolthole bolti bolting boltless boltlike boltmaker boltmaking boltonite boltrope boltsmith boltstrake boltuprightness boltwork bolus bom boma bomb bombable bombacaceous bombard bombarde bombardelle bombarder bombardier bombardment bombardon bombast bombaster bombastic bombastically bombastry bombazet bombazine bombed bomber bombiccite bombilate bombilation bombinate bombination bombo bombola bombonne bombous bombproof bombshell bombsight bombycid bombyciform bombycine bon bonaci bonagh bonaght bonair bonairly bonairness bonally bonang bonanza bonasus bonaventure bonavist bonbon bonce bond bondage bondager bondar bonded bonder bonderman bondfolk bondholder bondholding bonding bondless bondman bondmanship bondsman bondstone bondswoman bonduc bondwoman bone boneache bonebinder boneblack bonebreaker boned bonedog bonefish boneflower bonehead boneheaded boneless bonelessly bonelessness bonelet bonelike boner boneset bonesetter bonesetting boneshaker boneshaw bonetail bonewood bonework bonewort bonfire bong bongo bonhomie boniata bonification boniform bonify boniness boninite bonitarian bonitary bonito bonk bonnaz bonnet bonneted bonneter bonnethead bonnetless bonnetlike bonnetman bonnibel bonnily bonniness bonny bonnyclabber bonnyish bonnyvis bonsai bonspiel bontebok bontebuck bontequagga bonus bonxie bony bonyfish bonze bonzer bonzery bonzian boo boob boobery boobily boobook booby boobyalla boobyish boobyism bood boodie boodle boodledom boodleism boodleize boodler boody boof booger boogiewoogie boohoo boojum book bookable bookbinder bookbindery bookbinding bookboard bookcase bookcraft bookdealer bookdom booked booker bookery bookfold bookful bookholder bookhood bookie bookiness booking bookish bookishly bookishness bookism bookkeeper bookkeeping bookland bookless booklet booklike bookling booklore booklover bookmaker bookmaking bookman bookmark bookmarker bookmate bookmobile bookmonger bookplate bookpress bookrack bookrest bookroom bookseller booksellerish booksellerism bookselling bookshelf bookshop bookstack bookstall bookstand bookstore bookward bookwards bookways bookwise bookwork bookworm bookwright booky bool booly boolya boom boomable boomage boomah boomboat boomdas boomer boomerang booming boomingly boomless boomlet boomorah boomslang boomslange boomster boomy boon boondock boondocks boondoggle boondoggler boonfellow boongary boonk boonless boopis boor boorish boorishly boorishness boort boose boost booster boosterism boosy boot bootblack bootboy booted bootee booter bootery bootful booth boother boothite bootholder boothose bootied bootikin booting bootjack bootlace bootleg bootlegger bootlegging bootless bootlessly bootlessness bootlick bootlicker bootmaker bootmaking boots bootstrap booty bootyless booze boozed boozer boozily booziness boozy bop bopeep boppist bopyrid bopyridian bor bora borable borachio boracic boraciferous boracous borage boraginaceous borak boral borasca borasque borate borax borborygmic borborygmus bord bordage bordar bordarius bordel bordello border bordered borderer bordering borderism borderland borderlander borderless borderline bordermark bordroom bordure bordured bore boreable boread boreal borealis borean borecole boredom boree boreen boregat borehole boreism borele borer boresome borg borgh borghalpenny borh boric borickite boride borine boring boringly boringness borish borism bority borize borlase born borne borneol borning bornite bornitic bornyl boro borocalcite borocarbide borocitrate borofluohydric borofluoric borofluoride borofluorin boroglycerate boroglyceride boroglycerine borolanite boron boronatrocalcite boronic borophenol borophenylic borosalicylate borosalicylic borosilicate borosilicic borotungstate borotungstic borough boroughlet boroughmaster boroughmonger boroughmongering boroughmongery boroughship borowolframic borracha borrel borrow borrowable borrower borrowing borsch borscht borsholder borsht borstall bort bortsch borty bortz borwort boryl borzoi boscage bosch boschbok boschvark boschveld bose boser bosh bosher bosjesman bosk bosker bosket boskiness bosky bosn bosom bosomed bosomer bosomy bosporus boss bossage bossdom bossed bosselated bosselation bosser bosset bossiness bossing bossism bosslet bossship bossy bostangi bostanji bosthoon boston bostonite bostrychid bostrychoid bostrychoidal bostryx bosun bot bota botanic botanical botanically botanist botanize botanizer botanomancy botanophile botanophilist botany botargo botch botched botchedly botcher botcherly botchery botchily botchiness botchka botchy bote botella boterol botfly both bother botheration botherer botherheaded botherment bothersome bothlike bothrenchyma bothrium bothropic bothros bothsided bothsidedness bothway bothy botonee botong botryogen botryoid botryoidal botryoidally botryolite botryomycoma botryomycosis botryomycotic botryopterid botryose botryotherapy bott bottekin bottine bottle bottlebird bottled bottleflower bottleful bottlehead bottleholder bottlelike bottlemaker bottlemaking bottleman bottleneck bottlenest bottlenose bottler bottling bottom bottomchrome bottomed bottomer bottoming bottomless bottomlessly bottomlessness bottommost bottomry bottstick botuliform botulin botulinum botulism botulismus bouchal bouchaleen boucharde bouche boucher boucherism boucherize bouchette boud boudoir bouffancy bouffant bougar bouge bouget bough boughed boughless boughpot bought boughten boughy bougie bouillabaisse bouillon bouk boukit boulangerite boulder boulderhead bouldering bouldery boule boulevard boulevardize boultel boulter boulterer boun bounce bounceable bounceably bouncer bouncing bouncingly bound boundable boundary bounded boundedly boundedness bounden bounder bounding boundingly boundless boundlessly boundlessness boundly boundness bounteous bounteously bounteousness bountied bountiful bountifully bountifulness bountith bountree bounty bountyless bouquet bourasque bourbon bourbonize bourd bourder bourdon bourette bourg bourgeois bourgeoise bourgeoisie bourgeoisitic bourn bournless bournonite bourock bourse bourtree bouse bouser boussingaultite boustrophedon boustrophedonic bousy bout boutade bouto boutonniere boutylka bouw bovarism bovarysm bovate bovenland bovicide boviculture bovid boviform bovine bovinely bovinity bovoid bovovaccination bovovaccine bow bowable bowback bowbells bowbent bowboy bowdlerism bowdlerization bowdlerize bowed bowedness bowel boweled bowelless bowellike bowels bowenite bower bowerbird bowerlet bowermaiden bowermay bowerwoman bowery bowet bowfin bowgrace bowhead bowie bowieful bowing bowingly bowk bowkail bowker bowknot bowl bowla bowleg bowlegged bowleggedness bowler bowless bowlful bowlike bowline bowling bowllike bowlmaker bowls bowly bowmaker bowmaking bowman bowpin bowralite bowshot bowsprit bowstave bowstring bowstringed bowwoman bowwood bowwort bowwow bowyer boxberry boxboard boxbush boxcar boxen boxer boxfish boxful boxhaul boxhead boxing boxkeeper boxlike boxmaker boxmaking boxman boxthorn boxty boxwallah boxwood boxwork boxy boy boyang boyar boyard boyardism boyardom boyarism boycott boycottage boycotter boycottism boydom boyer boyhood boyish boyishly boyishness boyism boyla boylike boyology boysenberry boyship boza bozal bozo bozze bra brab brabagious brabant brabble brabblement brabbler brabblingly braca braccate braccia bracciale braccianite braccio brace braced bracelet braceleted bracer bracero braces brach brachelytrous bracherer brachering brachet brachial brachialgia brachialis brachiate brachiation brachiator brachiferous brachigerous brachiocephalic brachiocrural brachiocubital brachiocyllosis brachiofacial brachiofaciolingual brachioganoid brachiolaria brachiolarian brachiopod brachiopode brachiopodist brachiopodous brachioradial brachioradialis brachiorrhachidian brachiorrheuma brachiosaur brachiostrophosis brachiotomy brachistocephali brachistocephalic brachistocephalous brachistocephaly brachistochrone brachistochronic brachistochronous brachium brachtmema brachyaxis brachycardia brachycatalectic brachycephal brachycephalic brachycephalism brachycephalization brachycephalize brachycephalous brachycephaly brachyceral brachyceric brachycerous brachychronic brachycnemic brachycranial brachydactyl brachydactylic brachydactylism brachydactylous brachydactyly brachydiagonal brachydodrome brachydodromous brachydomal brachydomatic brachydome brachydont brachydontism brachyfacial brachyglossal brachygnathia brachygnathism brachygnathous brachygrapher brachygraphic brachygraphical brachygraphy brachyhieric brachylogy brachymetropia brachymetropic brachyphalangia brachypinacoid brachypinacoidal brachypleural brachypnea brachypodine brachypodous brachyprism brachyprosopic brachypterous brachypyramid brachyrrhinia brachysclereid brachyskelic brachysm brachystaphylic brachystochrone brachystomatous brachystomous brachytic brachytypous brachyural brachyuran brachyuranic brachyure brachyurous bracing bracingly bracingness brack brackebuschite bracken brackened bracker bracket bracketing bracketwise brackish brackishness brackmard bracky braconid bract bractea bracteal bracteate bracted bracteiform bracteolate bracteole bracteose bractless bractlet brad bradawl bradenhead bradmaker bradsot bradyacousia bradycardia bradycauma bradycinesia bradycrotic bradydactylia bradyesthesia bradyglossia bradykinesia bradykinetic bradylalia bradylexia bradylogia bradynosus bradypepsia bradypeptic bradyphagia bradyphasia bradyphemia bradyphrasia bradyphrenia bradypnea bradypnoea bradypod bradypode bradypodoid bradyseism bradyseismal bradyseismic bradyseismical bradyseismism bradyspermatism bradysphygmia bradystalsis bradyteleocinesia bradyteleokinesis bradytocia bradytrophic bradyuria brae braeface braehead braeman braeside brag braggardism braggart braggartism braggartly braggartry braggat bragger braggery bragget bragging braggingly braggish braggishly bragite bragless braguette brahmachari braid braided braider braiding brail brain brainache braincap braincraft brainer brainfag brainge braininess brainless brainlessly brainlessness brainlike brainpan brains brainsick brainsickly brainsickness brainstone brainward brainwash brainwasher brainwashing brainwater brainwood brainwork brainworker brainy braird braireau brairo braise brake brakeage brakehand brakehead brakeless brakeload brakemaker brakemaking brakeman braker brakeroot brakesman brakie braky bramble brambleberry bramblebush brambled brambling brambly brambrack bran brancard branch branchage branched brancher branchery branchful branchi branchia branchiae branchial branchiate branchicolous branchiferous branchiform branchihyal branchiness branching branchiocardiac branchiogenous branchiomere branchiomeric branchiomerism branchiopallial branchiopod branchiopodan branchiopodous branchiopulmonate branchiosaur branchiosaurian branchiostegal branchiostegite branchiostegous branchiostomid branchireme branchiurous branchless branchlet branchlike branchling branchman branchstand branchway branchy brand branded brander brandering brandied brandify brandise brandish brandisher brandisite brandless brandling brandreth brandy brandyball brandyman brandywine brangle brangled branglement brangler brangling branial brank brankie brankursine branle branner brannerite branny bransle bransolder brant brantail brantness brash brashiness brashness brashy brasiletto brasque brass brassage brassard brassart brassbound brassbounder brasse brasser brasset brassic brassicaceous brassidic brassie brassiere brassily brassiness brassish brasslike brassware brasswork brassworker brassworks brassy brassylic brat bratling bratstvo brattach brattice bratticer bratticing brattie brattish brattishing brattle brauna braunite bravade bravado bravadoism brave bravehearted bravely braveness braver bravery braving bravish bravo bravoite bravura bravuraish braw brawl brawler brawling brawlingly brawlsome brawly brawlys brawn brawned brawnedness brawner brawnily brawniness brawny braws braxy bray brayer brayera brayerin braystone braza braze brazen brazenface brazenfaced brazenfacedly brazenly brazenness brazer brazera brazier braziery brazil brazilein brazilette brazilin brazilite brazilwood breach breacher breachful breachy bread breadbasket breadberry breadboard breadbox breadearner breadearning breaden breadfruit breadless breadlessness breadmaker breadmaking breadman breadnut breadroot breadseller breadstuff breadth breadthen breadthless breadthriders breadthways breadthwise breadwinner breadwinning breaghe break breakable breakableness breakably breakage breakaway breakax breakback breakbones breakdown breaker breakerman breakfast breakfaster breakfastless breaking breakless breakneck breakoff breakout breakover breakshugh breakstone breakthrough breakup breakwater breakwind bream breards breast breastband breastbeam breastbone breasted breaster breastfeeding breastful breastheight breasthook breastie breasting breastless breastmark breastpiece breastpin breastplate breastplow breastrail breastrope breastsummer breastweed breastwise breastwood breastwork breath breathable breathableness breathe breathed breather breathful breathiness breathing breathingly breathless breathlessly breathlessness breathseller breathy breba breccia breccial brecciated brecciation brecham breck brecken bred bredbergite brede bredi bree breech breechblock breechcloth breechclout breeched breeches breechesflower breechesless breeching breechless breechloader breed breedable breedbate breeder breediness breeding breedy breek breekless breekums breeze breezeful breezeless breezelike breezeway breezily breeziness breezy bregma bregmata bregmate bregmatic brehon brehonship brei breislakite breithauptite brekkle brelaw breloque breme bremely bremeness bremsstrahlung brennage brent brephic bret bretelle bretesse breth brethren brett brettice breunnerite breva breve brevet brevetcy breviary breviate breviature brevicaudate brevicipitid breviconic brevier brevifoliate breviger brevilingual breviloquence breviloquent breviped brevipen brevipennate breviradiate brevirostral brevirostrate brevit brevity brew brewage brewer brewership brewery brewhouse brewing brewis brewmaster brewst brewster brewsterite brey briar briarberry briarroot bribe bribee bribegiver bribegiving bribemonger briber bribery bribetaker bribetaking bribeworthy brichen brichette brick brickbat brickcroft brickel bricken brickfield brickfielder brickhood bricking brickish brickkiln bricklayer bricklaying brickle brickleness bricklike brickliner bricklining brickly brickmaker brickmaking brickmason brickset bricksetter bricktimber brickwise brickwork bricky brickyard bricole bridal bridale bridaler bridally bride bridebed bridebowl bridecake bridechamber bridecup bridegod bridegroom bridegroomship bridehead bridehood brideknot bridelace brideless bridelike bridely bridemaid bridemaiden bridemaidship brideship bridesmaid bridesmaiding bridesman bridestake bridewain brideweed bridewell bridewort bridge bridgeable bridgeboard bridgebote bridgebuilder bridgebuilding bridged bridgehead bridgekeeper bridgeless bridgelike bridgemaker bridgemaking bridgeman bridgemaster bridgepot bridger bridgetree bridgeward bridgewards bridgeway bridgework bridging bridle bridled bridleless bridleman bridler bridling bridoon brief briefing briefless brieflessly brieflessness briefly briefness briefs brier brierberry briered brierroot brierwood briery brieve brig brigade brigadier brigadiership brigalow brigand brigandage brigander brigandine brigandish brigandishly brigandism brigantine brigatry brigbote brigetty bright brighten brightener brightening brighteyes brightish brightly brightness brightsmith brightsome brightsomeness brightwork brill brilliance brilliancy brilliandeer brilliant brilliantine brilliantly brilliantness brilliantwise brilliolette brillolette brills brim brimborion brimborium brimful brimfully brimfulness briming brimless brimmed brimmer brimming brimmingly brimstone brimstonewort brimstony brin brindlish brine brinehouse brineless brineman briner bring bringal bringall bringer brininess brinish brinishness brinjal brinjarry brink brinkless briny brioche briolette brique briquette brisk brisken brisket briskish briskly briskness brisling brisque briss bristle bristlebird bristlecone bristled bristleless bristlelike bristler bristletail bristlewort bristliness bristly brisure brit britchka brith brither britska britten brittle brittlebush brittlely brittleness brittlestem brittlewood brittlewort brittling brizz broach broacher broad broadacre broadax broadbill broadbrim broadcast broadcaster broadcloth broaden broadhead broadhearted broadhorn broadish broadleaf broadloom broadly broadmouth broadness broadpiece broadshare broadsheet broadside broadspread broadsword broadtail broadthroat broadway broadways broadwife broadwise brob brocade brocaded brocard brocardic brocatel brocatello broccoli broch brochan brochant brochantite broche brochette brochidodromous brocho brochure brock brockage brocked brocket brockle brod brodder brodeglass brodequin broderer brog brogan brogger broggerite broggle brogue brogueful brogueneer broguer broguery broguish broider broiderer broideress broidery broigne broil broiler broiling broilingly brokage broke broken brokenhearted brokenheartedly brokenheartedness brokenly brokenness broker brokerage brokeress brokership broking brolga broll brolly broma bromacetanilide bromacetate bromacetic bromacetone bromal bromalbumin bromamide bromargyrite bromate bromaurate bromauric brombenzamide brombenzene brombenzyl bromcamphor bromcresol brome bromeigon bromeikon bromeliaceous bromeliad bromelin bromellite bromethyl bromethylene bromgelatin bromhidrosis bromhydrate bromhydric bromic bromide bromidic bromidically bromidrosis brominate bromination bromindigo bromine brominism brominize bromiodide bromism bromite bromization bromize bromizer bromlite bromoacetone bromoaurate bromoauric bromobenzene bromobenzyl bromocamphor bromochlorophenol bromocresol bromocyanidation bromocyanide bromocyanogen bromoethylene bromoform bromogelatin bromohydrate bromohydrin bromoil bromoiodide bromoiodism bromoiodized bromoketone bromol bromomania bromomenorrhea bromomethane bromometric bromometrical bromometrically bromometry bromonaphthalene bromophenol bromopicrin bromopnea bromoprotein bromothymol bromous bromphenol brompicrin bromthymol bromuret bromvogel bromyrite bronc bronchadenitis bronchi bronchia bronchial bronchially bronchiarctia bronchiectasis bronchiectatic bronchiloquy bronchiocele bronchiocrisis bronchiogenic bronchiolar bronchiole bronchioli bronchiolitis bronchiolus bronchiospasm bronchiostenosis bronchitic bronchitis bronchium bronchoadenitis bronchoalveolar bronchoaspergillosis bronchoblennorrhea bronchocavernous bronchocele bronchocephalitis bronchoconstriction bronchoconstrictor bronchodilatation bronchodilator bronchoegophony bronchoesophagoscopy bronchogenic bronchohemorrhagia broncholemmitis broncholith broncholithiasis bronchomotor bronchomucormycosis bronchomycosis bronchopathy bronchophonic bronchophony bronchophthisis bronchoplasty bronchoplegia bronchopleurisy bronchopneumonia bronchopneumonic bronchopulmonary bronchorrhagia bronchorrhaphy bronchorrhea bronchoscope bronchoscopic bronchoscopist bronchoscopy bronchospasm bronchostenosis bronchostomy bronchotetany bronchotome bronchotomist bronchotomy bronchotracheal bronchotyphoid bronchotyphus bronchovesicular bronchus bronco broncobuster brongniardite bronk bronteon brontephobia bronteum brontide brontogram brontograph brontolite brontology brontometer brontophobia brontoscopy bronze bronzed bronzelike bronzen bronzer bronzesmith bronzewing bronzify bronzine bronzing bronzite bronzitite bronzy broo brooch brood brooder broodiness brooding broodingly broodless broodlet broodling broody brook brookable brooked brookflower brookie brookite brookless brooklet brooklike brooklime brookside brookweed brooky brool broom broombush broomcorn broomer broommaker broommaking broomrape broomroot broomshank broomstaff broomstick broomstraw broomtail broomweed broomwood broomwort broomy broon broose broozled brose brosot brosy brot brotan brotany broth brothel brotheler brothellike brothelry brother brotherhood brotherless brotherlike brotherliness brotherly brothership brotherwort brothy brotocrystal brotulid brotuliform brough brougham brought brow browache browallia browband browbeat browbeater browbound browden browed browis browless browman brown brownback browner brownie browniness browning brownish brownly brownness brownout brownstone browntail browntop brownweed brownwort browny browpiece browpost browse browser browsick browsing browst bruang brucellosis brucia brucina brucine brucite bruckle bruckled bruckleness brugh brugnatellite bruin bruise bruiser bruisewort bruising bruit bruiter bruke brulee brulyie brulyiement brumal brumby brume brummagem brumous brumstane brumstone brunch brunelliaceous brunet brunetness brunette brunetteness brunissure brunneous brunswick brunt bruscus brush brushable brushball brushbird brushbush brushed brusher brushes brushet brushful brushiness brushing brushite brushland brushless brushlessness brushlet brushlike brushmaker brushmaking brushman brushoff brushproof brushwood brushwork brushy brusque brusquely brusqueness brustle brut brutage brutal brutalism brutalist brutalitarian brutality brutalization brutalize brutally brute brutedom brutelike brutely bruteness brutification brutify bruting brutish brutishly brutishness brutism brutter bruzz bryaceous bryogenin bryological bryologist bryology bryonidin bryonin bryony bryophyte bryophytic bryozoan bryozoon bryozoum bu bual buaze bub buba bubal bubaline bubalis bubble bubbleless bubblement bubbler bubbling bubblingly bubblish bubbly bubby bubbybush bubinga bubo buboed bubonalgia bubonic bubonocele bubukle bucare bucca buccal buccally buccan buccaneer buccaneerish buccate buccina buccinal buccinator buccinatory bucciniform buccinoid buccobranchial buccocervical buccogingival buccolabial buccolingual bucconasal buccopharyngeal buccula bucentaur buchite buchnerite buchonite buchu buck buckaroo buckberry buckboard buckbrush buckbush bucked buckeen bucker bucket bucketer bucketful bucketing bucketmaker bucketmaking bucketman buckety buckeye buckhorn buckhound buckie bucking buckish buckishly buckishness buckjump buckjumper bucklandite buckle buckled buckleless buckler buckling bucklum bucko buckplate buckpot buckra buckram bucksaw buckshee buckshot buckskin buckskinned buckstall buckstay buckstone bucktail buckthorn bucktooth buckwagon buckwash buckwasher buckwashing buckwheat buckwheater buckwheatlike bucky bucoliast bucolic bucolical bucolically bucolicism bucrane bucranium bud buda buddage budder buddhi budding buddle buddleman buddler buddy budge budger budgeree budgereegah budgerigar budgerow budget budgetary budgeteer budgeter budgetful budless budlet budlike budmash budtime budwood budworm budzat bufagin buff buffable buffalo buffaloback buffball buffcoat buffed buffer buffet buffeter buffing buffle bufflehead bufflehorn buffont buffoon buffoonery buffoonesque buffoonish buffoonism buffware buffy bufidin bufo bufonite bufotalin bug bugaboo bugan bugbane bugbear bugbeardom bugbearish bugbite bugdom bugfish bugger buggery bugginess buggy buggyman bughead bughouse bugle bugled bugler buglet bugleweed buglewort bugloss bugologist bugology bugproof bugre bugseed bugweed bugwort buhl buhr buhrstone build buildable builder building buildingless buildress buildup built buirdly buisson buist bukh bukshi bulak bulb bulbaceous bulbar bulbed bulbiferous bulbiform bulbil bulbilla bulbless bulblet bulblike bulbocapnin bulbocapnine bulbocavernosus bulbocavernous bulbomedullary bulbomembranous bulbonuclear bulborectal bulbose bulbospinal bulbotuber bulbous bulbul bulbule bulby bulchin bulge bulger bulginess bulgy bulimia bulimiac bulimic bulimiform bulimoid bulimy bulk bulked bulker bulkhead bulkheaded bulkily bulkiness bulkish bulky bull bulla bullace bullamacow bullan bullary bullate bullated bullation bullback bullbaiting bullbat bullbeggar bullberry bullbird bullboat bullcart bullcomber bulldog bulldogged bulldoggedness bulldoggy bulldogism bulldoze bulldozer buller bullet bulleted bullethead bulletheaded bulletheadedness bulletin bulletless bulletlike bulletmaker bulletmaking bulletproof bulletwood bullety bullfeast bullfight bullfighter bullfighting bullfinch bullfist bullflower bullfoot bullfrog bullhead bullheaded bullheadedly bullheadedness bullhide bullhoof bullhorn bulliform bullimong bulling bullion bullionism bullionist bullionless bullish bullishly bullishness bullism bullit bullneck bullnose bullnut bullock bullocker bullockman bullocky bullous bullpates bullpoll bullpout bullskin bullsticker bullsucker bullswool bulltoad bullule bullweed bullwhack bullwhacker bullwhip bullwort bully bullyable bullydom bullyhuff bullying bullyism bullyrag bullyragger bullyragging bullyrook bulrush bulrushlike bulrushy bulse bult bulter bultey bultong bultow bulwand bulwark bum bumbailiff bumbailiffship bumbarge bumbaste bumbaze bumbee bumbershoot bumble bumblebee bumbleberry bumblefoot bumblekite bumblepuppy bumbler bumbo bumboat bumboatman bumboatwoman bumclock bumicky bummalo bummaree bummed bummer bummerish bummie bumming bummler bummock bump bumpee bumper bumperette bumpily bumpiness bumping bumpingly bumpkin bumpkinet bumpkinish bumpkinly bumpology bumptious bumptiously bumptiousness bumpy bumtrap bumwood bun buna buncal bunce bunch bunchberry buncher bunchflower bunchily bunchiness bunchy buncombe bund bunder bundle bundler bundlerooted bundlet bundobust bundook bundweed bundy bunemost bung bungaloid bungalow bungarum bungee bungerly bungey bungfu bungfull bunghole bungle bungler bunglesome bungling bunglingly bungmaker bungo bungwall bungy bunion bunk bunker bunkerman bunkery bunkhouse bunkie bunkload bunko bunkum bunnell bunny bunnymouth bunodont bunolophodont bunoselenodont bunsenite bunt buntal bunted bunter bunting buntline bunton bunty bunya bunyah bunyip buoy buoyage buoyance buoyancy buoyant buoyantly buoyantness buphthalmia buphthalmic bupleurol buplever buprestid buprestidan bur buran burao burbank burbankian burbark burble burbler burbly burbot burbush burd burdalone burden burdener burdenless burdenous burdensome burdensomely burdensomeness burdie burdock burdon bure bureau bureaucracy bureaucrat bureaucratic bureaucratical bureaucratically bureaucratism bureaucratist bureaucratization bureaucratize bureaux burel burele buret burette burfish burg burgage burgality burgall burgee burgensic burgeon burgess burgessdom burggrave burgh burghal burghalpenny burghbote burghemot burgher burgherage burgherdom burgheress burgherhood burghermaster burghership burghmaster burghmoot burglar burglarious burglariously burglarize burglarproof burglary burgle burgomaster burgomastership burgonet burgoo burgoyne burgrave burgraviate burgul burgus burgware burhead buri burial burian buried burier burin burinist burion buriti burka burke burker burkundaz burl burlap burled burler burlesque burlesquely burlesquer burlet burletta burlily burliness burly burmanniaceous burmite burn burnable burnbeat burned burner burnet burnetize burnfire burnie burniebee burning burningly burnish burnishable burnisher burnishing burnishment burnoose burnoosed burnous burnout burnover burnside burnsides burnt burntweed burnut burnwood burny buro burp burr burrah burrawang burred burrel burrer burrgrailer burring burrish burrito burrknot burro burrobrush burrow burroweed burrower burrowstown burry bursa bursal bursar bursarial bursarship bursary bursate bursattee bursautee burse burseed bursicle bursiculate bursiform bursitis burst burster burstwort burt burthenman burton burtonization burtonize burucha burweed bury burying bus busby buscarl buscarle bush bushbeater bushbuck bushcraft bushed bushel busheler bushelful bushelman bushelwoman busher bushfighter bushfighting bushful bushhammer bushi bushily bushiness bushing bushland bushless bushlet bushlike bushmaker bushmaking bushmanship bushmaster bushment bushranger bushranging bushrope bushveld bushwa bushwhack bushwhacker bushwhacking bushwife bushwoman bushwood bushy busied busily busine business businesslike businesslikeness businessman businesswoman busk busked busker busket buskin buskined buskle busky busman buss busser bussock bussu bust bustard busted bustee buster busthead bustic busticate bustle bustled bustler bustling bustlingly busy busybodied busybody busybodyish busybodyism busybodyness busyhead busying busyish busyness busywork but butadiene butadiyne butanal butane butanoic butanol butanolid butanolide butanone butch butcher butcherbird butcherdom butcherer butcheress butchering butcherless butcherliness butcherly butcherous butchery butein butene butenyl buteonine butic butine butler butlerage butlerdom butleress butlerism butlerlike butlership butlery butment butomaceous butoxy butoxyl butt butte butter butteraceous butterback butterball butterbill butterbird butterbox butterbump butterbur butterbush buttercup buttered butterfat butterfingered butterfingers butterfish butterflower butterfly butterflylike butterhead butterine butteriness butteris butterjags butterless butterlike buttermaker buttermaking butterman buttermilk buttermonger buttermouth butternose butternut butterroot butterscotch butterweed butterwife butterwoman butterworker butterwort butterwright buttery butteryfingered buttgenbachite butting buttinsky buttle buttock buttocked buttocker button buttonball buttonbur buttonbush buttoned buttoner buttonhold buttonholder buttonhole buttonholer buttonhook buttonless buttonlike buttonmold buttons buttonweed buttonwood buttony buttress buttressless buttresslike buttstock buttwoman buttwood butty buttyman butyl butylamine butylation butylene butylic butyne butyr butyraceous butyral butyraldehyde butyrate butyric butyrically butyrin butyrinase butyrochloral butyrolactone butyrometer butyrometric butyrone butyrous butyrousness butyryl buxaceous buxerry buxom buxomly buxomness buy buyable buyer buzane buzylene buzz buzzard buzzardlike buzzardly buzzer buzzerphone buzzgloak buzzies buzzing buzzingly buzzle buzzwig buzzy by bycoket bye byee byegaein byeman byepath byerite byerlite byestreet byeworker byeworkman bygane byganging bygo bygoing bygone byhand bylaw bylawman byname bynedestin byon byordinar byordinary byous byously bypass bypasser bypast bypath byplay byre byreman byrewards byrewoman byrlaw byrlawman byrnie byroad byrrus byrthynsak bysen bysmalith byspell byssaceous byssal byssiferous byssin byssine byssinosis byssogenous byssoid byssolite byssus bystander bystreet byth bytime bytownite bytownitite bywalk bywalker byway bywoner byword bywork c ca caam caama caaming caapeba caatinga cab caba cabaan caback cabaho cabal cabala cabalassou cabaletta cabalic cabalism cabalist cabalistic cabalistical cabalistically caballer caballine caban cabana cabaret cabas cabasset cabassou cabbage cabbagehead cabbagewood cabbagy cabber cabble cabbler cabby cabda cabdriver cabdriving cabellerote caber cabernet cabestro cabezon cabilliau cabin cabinet cabinetmaker cabinetmaking cabinetry cabinetwork cabinetworker cabinetworking cabio cable cabled cablegram cableless cablelike cableman cabler cablet cableway cabling cabman cabob caboceer cabochon cabocle caboodle cabook caboose caboshed cabot cabotage cabree cabrerite cabreuva cabrilla cabriole cabriolet cabrit cabstand cabureiba cabuya cacam cacanthrax cacao cacesthesia cacesthesis cachalot cachaza cache cachectic cachemia cachemic cachet cachexia cachexic cachexy cachibou cachinnate cachinnation cachinnator cachinnatory cacholong cachou cachrys cachucha cachunde cacidrosis caciocavallo cacique caciqueship caciquism cack cackerel cackle cackler cacocholia cacochroia cacochylia cacochymia cacochymic cacochymical cacochymy cacocnemia cacodaemoniac cacodaemonial cacodaemonic cacodemon cacodemonia cacodemoniac cacodemonial cacodemonic cacodemonize cacodemonomania cacodontia cacodorous cacodoxian cacodoxical cacodoxy cacodyl cacodylate cacodylic cacoeconomy cacoepist cacoepistic cacoepy cacoethes cacoethic cacogalactia cacogastric cacogenesis cacogenic cacogenics cacogeusia cacoglossia cacographer cacographic cacographical cacography cacology cacomagician cacomelia cacomistle cacomixl cacomixle cacomorphia cacomorphosis caconychia caconym caconymic cacoon cacopathy cacopharyngia cacophonia cacophonic cacophonical cacophonically cacophonist cacophonize cacophonous cacophonously cacophony cacophthalmia cacoplasia cacoplastic cacoproctia cacorhythmic cacorrhachis cacorrhinia cacosmia cacospermia cacosplanchnia cacostomia cacothansia cacotheline cacothesis cacothymia cacotrichia cacotrophia cacotrophic cacotrophy cacotype cacoxene cacoxenite cacozeal cacozealous cacozyme cactaceous cacti cactiform cactoid cacuminal cacuminate cacumination cacuminous cacur cad cadalene cadamba cadastral cadastration cadastre cadaver cadaveric cadaverine cadaverize cadaverous cadaverously cadaverousness cadbait cadbit cadbote caddice caddiced caddie caddis caddised caddish caddishly caddishness caddle caddow caddy cade cadelle cadence cadenced cadency cadent cadential cadenza cader caderas cadet cadetcy cadetship cadette cadew cadge cadger cadgily cadginess cadgy cadi cadilesker cadinene cadism cadiueio cadjan cadlock cadmia cadmic cadmide cadmiferous cadmium cadmiumize cados cadrans cadre cadua caduac caduca caducary caducean caduceus caduciary caducibranch caducibranchiate caducicorn caducity caducous cadus cadweed caeca caecal caecally caecectomy caeciform caecilian caecitis caecocolic caecostomy caecotomy caecum caelometer caenostylic caenostyly caeoma caeremoniarius caesalpiniaceous caesaropapacy caesaropapism caesaropopism caesious caesura caesural caesuric cafeneh cafenet cafeteria caffa caffeate caffeic caffeina caffeine caffeinic caffeinism caffeism caffeol caffeone caffetannic caffetannin caffiso caffle caffoline caffoy cafh cafiz caftan caftaned cag cage caged cageful cageless cagelike cageling cageman cager cagester cagework cagey caggy cagily cagit cagmag cahincic cahiz cahoot cahot cahow caickle caid cailcedra cailleach caimacam caimakam caiman caimitillo caimito cain caique caiquejee caird cairn cairned cairngorm cairngorum cairny caisson caissoned caitiff cajeput cajole cajolement cajoler cajolery cajoling cajolingly cajuela cajun cajuput cajuputene cajuputol cake cakebox cakebread cakehouse cakemaker cakemaking caker cakette cakewalk cakewalker cakey caky cal calaba calabash calabaza calabazilla calaber calaboose calabrasella calabrese calade calais calalu calamanco calamansi calamariaceous calamarian calamarioid calamaroid calamary calambac calambour calamiferous calamiform calaminary calamine calamint calamistral calamistrum calamite calamitean calamitoid calamitous calamitously calamitousness calamity calamondin calamus calander calandria calangay calantas calapite calascione calash calathian calathidium calathiform calathiscus calathus calaverite calbroben calcaneal calcaneoastragalar calcaneoastragaloid calcaneocuboid calcaneofibular calcaneonavicular calcaneoplantar calcaneoscaphoid calcaneotibial calcaneum calcaneus calcar calcarate calcareoargillaceous calcareobituminous calcareocorneous calcareosiliceous calcareosulphurous calcareous calcareously calcareousness calcariferous calcariform calcarine calced calceiform calcemia calceolate calcic calciclase calcicole calcicolous calcicosis calciferol calciferous calcific calcification calcified calciform calcifugal calcifuge calcifugous calcify calcigenous calcigerous calcimeter calcimine calciminer calcinable calcination calcinatory calcine calcined calciner calcinize calciobiotite calciocarnotite calcioferrite calcioscheelite calciovolborthite calcipexy calciphile calciphilia calciphilous calciphobe calciphobous calciphyre calciprivic calcisponge calcite calcitestaceous calcitic calcitrant calcitrate calcitreation calcium calcivorous calcographer calcographic calcography calcrete calculability calculable calculary calculate calculated calculatedly calculating calculatingly calculation calculational calculative calculator calculatory calculi calculiform calculist calculous calculus calden caldron calean caledonite calefacient calefaction calefactive calefactor calefactory calelectric calelectrical calelectricity calendal calendar calendarer calendarial calendarian calendaric calender calenderer calendric calendrical calendry calends calendulin calentural calenture calenturist calepin calescence calescent calf calfbound calfhood calfish calfkill calfless calflike calfling calfskin caliber calibered calibogus calibrate calibration calibrator calibre calicate calices caliciform calicle calico calicoback calicoed calicular caliculate calid calidity caliduct californite californium caliga caligated caliginous caliginously caligo calinda calinut caliological caliologist caliology calipash calipee caliper caliperer calipers caliph caliphal caliphate caliphship calistheneum calisthenic calisthenical calisthenics caliver calix calk calkage calker calkin calking call callable callainite callant callboy caller callet calli callid callidity callidness calligraph calligrapha calligrapher calligraphic calligraphical calligraphically calligraphist calligraphy calling calliophone calliper calliperer calliphorid calliphorine callipygian callipygous callisection callisteia callithump callithumpian callitrichaceous callitype callo callosal callose callosity callosomarginal callosum callous callously callousness callow callower callowman callowness callus calm calmant calmative calmer calmierer calmingly calmly calmness calmy calodemon calography calomba calomel calomorphic calool calor calorescence calorescent caloric caloricity calorie calorifacient calorific calorifical calorifically calorification calorifics calorifier calorify calorigenic calorimeter calorimetric calorimetrical calorimetrically calorimetry calorimotor caloris calorisator calorist calorize calorizer calotermitid calotte calotype calotypic calotypist caloyer calp calpac calpack calpacked calpulli caltrap caltrop calumba calumet calumniate calumniation calumniative calumniator calumniatory calumnious calumniously calumniousness calumny calutron calvaria calvarium calve calved calver calves calvish calvities calvity calvous calx calycanth calycanthaceous calycanthemous calycanthemy calycanthine calycate calyceraceous calyces calyciferous calycifloral calyciflorate calyciflorous calyciform calycinal calycine calycle calycled calycoid calycoideous calycophoran calycozoan calycozoic calycozoon calycular calyculate calyculated calycule calyculus calymma calyphyomy calypsist calypso calypsonian calypter calyptoblastic calyptra calyptrate calyptriform calyptrimorphous calyptro calyptrogen calyx cam camaca camagon camail camailed camalote caman camansi camara camaraderie camarilla camass camata camatina camb cambaye camber cambial cambiform cambiogenetic cambism cambist cambistry cambium cambogia cambrel cambresine cambricleaf cambuca came cameist camel camelback cameleer cameline camelish camelishness camelkeeper camellike camellin camelman cameloid camelopard camelry cameo cameograph cameography camera cameral cameralism cameralist cameralistic cameralistics cameraman camerate camerated cameration camerier camerist camerlingo camilla camillus camion camisado camise camisia camisole camlet camleteen cammed cammock cammocky camomile camoodi camoodie camouflage camouflager camp campagna campagnol campaign campaigner campana campane campanero campaniform campanile campaniliform campanilla campanini campanist campanistic campanologer campanological campanologically campanologist campanology campanulaceous campanular campanularian campanulate campanulated campanulous campbellite campcraft campephagine camper campestral campfight campfire campground camphane camphanic camphanone camphanyl camphene camphine camphire campho camphocarboxylic camphoid camphol campholic campholide campholytic camphor camphoraceous camphorate camphoric camphorize camphorone camphoronic camphoroyl camphorphorone camphorwood camphory camphoryl camphylene campimeter campimetrical campimetry campion cample campmaster campo campodeid campodeiform campodeoid campody campoo camporee campshed campshedding campsheeting campshot campstool camptodrome camptonite campulitropal campulitropous campus campward campylite campylodrome campylometer campylospermous campylotropal campylotropous camshach camshachle camshaft camstane camstone camuning camus camused camwood can canaba canada canadine canadite canadol canaigre canaille canajong canal canalage canalboat canalicular canaliculate canaliculated canaliculation canaliculi canaliculization canaliculus canaliferous canaliform canalization canalize canaller canalling canalman canalside canamo canape canapina canard canari canarin canary canasta canaster canaut canavalin cancan cancel cancelable cancelation canceleer canceler cancellarian cancellate cancellated cancellation cancelli cancellous cancellus cancelment cancer cancerate canceration cancerdrops cancered cancerigenic cancerism cancerophobe cancerophobia cancerous cancerously cancerousness cancerroot cancerweed cancerwort canch canchalagua cancriform cancrinite cancrisocial cancrivorous cancrizans cancroid cancrophagous cancrum cand candareen candela candelabra candelabrum candelilla candent candescence candescent candescently candid candidacy candidate candidateship candidature candidly candidness candied candier candify candiru candle candleball candlebeam candleberry candlebomb candlebox candlefish candleholder candlelight candlelighted candlelighter candlelighting candlelit candlemaker candlemaking candlenut candlepin candler candlerent candleshine candleshrift candlestand candlestick candlesticked candlestickward candlewaster candlewasting candlewick candlewood candlewright candock candolleaceous candor candroy candy candymaker candymaking candys candystick candytuft candyweed cane canebrake canel canelike canella canellaceous canelo caneology canephor canephore canephoros canephroi caner canescence canescent canette canewise canework canfieldite canful cangan cangia cangle cangler cangue canhoop canicola canicular canicule canid canille caninal canine caniniform caninity caninus canioned canions canistel canister canities canjac cank canker cankerberry cankerbird cankereat cankered cankeredly cankeredness cankerflower cankerous cankerroot cankerweed cankerworm cankerwort cankery canmaker canmaking canman canna cannabic cannabinaceous cannabine cannabinol cannabism cannaceous cannach canned cannel cannelated cannelure cannelured cannequin canner cannery cannet cannibal cannibalean cannibalic cannibalish cannibalism cannibalistic cannibalistically cannibality cannibalization cannibalize cannibally cannikin cannily canniness canning cannon cannonade cannoned cannoneer cannoneering cannonproof cannonry cannot cannula cannular cannulate cannulated canny canoe canoeing canoeist canoeload canoeman canoewood canon canoncito canoness canonic canonical canonically canonicalness canonicals canonicate canonicity canonics canonist canonistic canonistical canonizant canonization canonize canonizer canonlike canonry canonship canoodle canoodler canopic canopy canorous canorously canorousness canroy canroyer canso cant cantabank cantabile cantala cantalite cantaloupe cantankerous cantankerously cantankerousness cantar cantara cantaro cantata cantation cantative cantatory cantboard canted canteen cantefable canter canterer canthal cantharidal cantharidate cantharides cantharidian cantharidin cantharidism cantharidize cantharis cantharophilous cantharus canthectomy canthitis cantholysis canthoplasty canthorrhaphy canthotomy canthus cantic canticle cantico cantilena cantilene cantilever cantilevered cantillate cantillation cantily cantina cantiness canting cantingly cantingness cantion cantish cantle cantlet canto canton cantonal cantonalism cantoned cantoner cantonment cantoon cantor cantoral cantoris cantorous cantorship cantred cantref cantrip cantus cantwise canty canun canvas canvasback canvasman canvass canvassy cany canyon canzon canzonet caoba caoutchouc caoutchoucin cap capability capable capableness capably capacious capaciously capaciousness capacitance capacitate capacitation capacitative capacitativly capacitive capacitor capacity capanna capanne caparison capax capcase cape caped capel capelet capelin capeline capellet caper caperbush capercaillie capercally capercut caperer capering caperingly capernoited capernoitie capernoity capersome caperwort capes capeskin capeweed capewise capful caph caphar caphite capias capicha capillaceous capillaire capillament capillarectasia capillarily capillarimeter capillariness capillariomotor capillarity capillary capillation capilliculture capilliform capillitial capillitium capillose capistrate capital capitaldom capitaled capitalism capitalist capitalistic capitalistically capitalizable capitalization capitalize capitally capitalness capitan capitate capitated capitatim capitation capitative capitatum capitellar capitellate capitelliform capitellum capitoul capitoulate capitulant capitular capitularly capitulary capitulate capitulation capitulator capitulatory capituliform capitulum capivi capkin capless caplin capmaker capmaking capman capmint capnomancy capocchia capomo capon caponier caponize caponizer caporal capot capote cappadine capparidaceous capped cappelenite capper cappie capping capple cappy caprate caprelline capreol capreolar capreolary capreolate capreoline capric capriccetto capricci capriccio caprice capricious capriciously capriciousness caprid caprificate caprification caprificator caprifig caprifoliaceous caprifolium capriform caprigenous caprimulgine caprin caprine caprinic capriole capriped capripede caprizant caproate caproic caproin caprone capronic capronyl caproyl capryl caprylate caprylene caprylic caprylin caprylone caprylyl capsa capsaicin capsheaf capshore capsicin capsicum capsid capsizal capsize capstan capstone capsula capsulae capsular capsulate capsulated capsulation capsule capsulectomy capsuler capsuliferous capsuliform capsuligerous capsulitis capsulociliary capsulogenous capsulolenticular capsulopupillary capsulorrhaphy capsulotome capsulotomy capsumin captaculum captain captaincy captainess captainly captainry captainship captance captation caption captious captiously captiousness captivate captivately captivating captivatingly captivation captivative captivator captivatrix captive captivity captor captress capturable capture capturer capuche capuched capuchin capucine capulet capulin capybara car carabao carabeen carabid carabidan carabideous carabidoid carabin carabineer caraboid carabus caracal caracara caracol caracole caracoler caracoli caracolite caracoller caracore caract caracter carafe caraguata caraibe caraipi carajura caramba carambola carambole caramel caramelan caramelen caramelin caramelization caramelize caramoussal carancha caranda caranday carane carangid carangoid caranna carapace carapaced carapacic carapato carapax carapine carapo carat caratch caraunda caravan caravaneer caravanist caravanner caravansary caravanserai caravanserial caravel caraway carbacidometer carbamate carbamic carbamide carbamido carbamine carbamino carbamyl carbanil carbanilic carbanilide carbarn carbasus carbazic carbazide carbazine carbazole carbazylic carbeen carbene carberry carbethoxy carbethoxyl carbide carbimide carbine carbinol carbinyl carbo carboazotine carbocinchomeronic carbodiimide carbodynamite carbogelatin carbohemoglobin carbohydrase carbohydrate carbohydraturia carbohydrazide carbohydride carbohydrogen carbolate carbolated carbolfuchsin carbolic carbolineate carbolize carboluria carbolxylol carbomethene carbomethoxy carbomethoxyl carbon carbona carbonaceous carbonade carbonado carbonatation carbonate carbonation carbonatization carbonator carbonemia carbonero carbonic carbonide carboniferous carbonification carbonify carbonigenous carbonimeter carbonimide carbonite carbonitride carbonium carbonizable carbonization carbonize carbonizer carbonless carbonometer carbonometry carbonous carbonuria carbonyl carbonylene carbonylic carbophilous carbora carborundum carbosilicate carbostyril carboxide carboxy carboxyhemoglobin carboxyl carboxylase carboxylate carboxylation carboxylic carboy carboyed carbro carbromal carbuilder carbuncle carbuncled carbuncular carbungi carburant carburate carburation carburator carbure carburet carburetant carburetor carburization carburize carburizer carburometer carbyl carbylamine carcajou carcake carcanet carcaneted carcass carceag carcel carceral carcerate carceration carchariid carcharioid carcharodont carcinemia carcinogen carcinogenesis carcinogenic carcinoid carcinological carcinologist carcinology carcinolysin carcinolytic carcinoma carcinomata carcinomatoid carcinomatosis carcinomatous carcinomorphic carcinophagous carcinopolypus carcinosarcoma carcinosarcomata carcinosis carcoon card cardaissin cardamom cardboard cardcase cardecu carded cardel carder cardholder cardia cardiac cardiacal cardiacean cardiagra cardiagram cardiagraph cardiagraphy cardial cardialgia cardialgy cardiameter cardiamorphia cardianesthesia cardianeuria cardiant cardiaplegia cardiarctia cardiasthenia cardiasthma cardiataxia cardiatomy cardiatrophia cardiauxe cardicentesis cardiectasis cardiectomize cardiectomy cardielcosis cardiemphraxia cardiform cardigan cardin cardinal cardinalate cardinalic cardinalism cardinalist cardinalitial cardinalitian cardinally cardinalship cardines carding cardioaccelerator cardioarterial cardioblast cardiocarpum cardiocele cardiocentesis cardiocirrhosis cardioclasia cardioclasis cardiodilator cardiodynamics cardiodynia cardiodysesthesia cardiodysneuria cardiogenesis cardiogenic cardiogram cardiograph cardiographic cardiography cardiohepatic cardioid cardiokinetic cardiolith cardiological cardiologist cardiology cardiolysis cardiomalacia cardiomegaly cardiomelanosis cardiometer cardiometric cardiometry cardiomotility cardiomyoliposis cardiomyomalacia cardioncus cardionecrosis cardionephric cardioneural cardioneurosis cardionosus cardioparplasis cardiopathic cardiopathy cardiopericarditis cardiophobe cardiophobia cardiophrenia cardioplasty cardioplegia cardiopneumatic cardiopneumograph cardioptosis cardiopulmonary cardiopuncture cardiopyloric cardiorenal cardiorespiratory cardiorrhaphy cardiorrheuma cardiorrhexis cardioschisis cardiosclerosis cardioscope cardiospasm cardiosphygmogram cardiosphygmograph cardiosymphysis cardiotherapy cardiotomy cardiotonic cardiotoxic cardiotrophia cardiotrophotherapy cardiovascular cardiovisceral cardipaludism cardipericarditis cardisophistical carditic carditis cardlike cardmaker cardmaking cardo cardol cardon cardona cardoncillo cardooer cardoon cardophagus cardplayer cardroom cardsharp cardsharping cardstock carduaceous care carecloth careen careenage careener career careerer careering careeringly careerist carefree careful carefully carefulness careless carelessly carelessness carene carer caress caressant caresser caressing caressingly caressive caressively carest caret caretaker caretaking careworn carfare carfax carfuffle carful carga cargo cargoose carhop carhouse cariacine cariama caribou caricaceous caricatura caricaturable caricatural caricature caricaturist caricetum caricographer caricography caricologist caricology caricous carid caridean caridoid caries carillon carillonneur carina carinal carinate carinated carination cariniform cariole carioling cariosity carious cariousness caritative caritive cark carking carkingly carkled carl carless carlet carlie carlin carline carling carlings carlish carlishness carload carloading carloadings carlot carls carmagnole carmalum carman carmele carmeloite carminative carmine carminette carminic carminite carminophilous carmoisin carmot carnage carnaged carnal carnalism carnalite carnality carnalize carnallite carnally carnalness carnaptious carnassial carnate carnation carnationed carnationist carnauba carnaubic carnaubyl carnelian carneol carneole carneous carney carnic carniferous carniferrin carnifex carnification carnifices carnificial carniform carnify carnival carnivaler carnivalesque carnivoracity carnivoral carnivore carnivorism carnivorous carnivorously carnivorousness carnose carnosine carnosity carnotite carnous caroa carob caroba caroche carol caroler caroli carolin caroline carolus carom carombolette carone caronic caroome caroon carotene carotenoid carotic carotid carotidal carotidean carotin carotinemia carotinoid caroubier carousal carouse carouser carousing carousingly carp carpaine carpal carpale carpalia carpel carpellary carpellate carpent carpenter carpentering carpentership carpentry carper carpet carpetbag carpetbagger carpetbaggery carpetbaggism carpetbagism carpetbeater carpeting carpetlayer carpetless carpetmaker carpetmaking carpetmonger carpetweb carpetweed carpetwork carpetwoven carpholite carphosiderite carpid carpidium carpincho carping carpingly carpintero carpitis carpium carpocace carpocarpal carpocephala carpocephalum carpocerite carpocervical carpogam carpogamy carpogenic carpogenous carpogone carpogonial carpogonium carpolite carpolith carpological carpologically carpologist carpology carpomania carpometacarpal carpometacarpus carpopedal carpophagous carpophalangeal carpophore carpophyll carpophyte carpopodite carpopoditic carpoptosia carpoptosis carport carpos carposperm carposporangia carposporangial carposporangium carpospore carposporic carposporous carpostome carpus carquaise carr carrack carrageen carrageenin carrel carriable carriage carriageable carriageful carriageless carriagesmith carriageway carrick carried carrier carrion carritch carritches carriwitchet carrizo carroch carrollite carronade carrot carrotage carroter carrotiness carrottop carrotweed carrotwood carroty carrousel carrow carry carryall carrying carrytale carse carshop carsick carsmith cart cartable cartaceous cartage cartboot cartbote carte cartel cartelism cartelist cartelization cartelize carter cartful carthame carthamic carthamin cartilage cartilaginean cartilagineous cartilaginification cartilaginoid cartilaginous cartisane cartload cartmaker cartmaking cartman cartobibliography cartogram cartograph cartographer cartographic cartographical cartographically cartography cartomancy carton cartonnage cartoon cartoonist cartouche cartridge cartsale cartulary cartway cartwright cartwrighting carty carua carucage carucal carucate carucated caruncle caruncula carunculae caruncular carunculate carunculated carunculous carvacrol carvacryl carval carve carvel carven carvene carver carvership carvestrene carving carvoepra carvol carvomenthene carvone carvyl carwitchet caryatic caryatid caryatidal caryatidean caryatidic caryl caryocaraceous caryophyllaceous caryophyllene caryophylleous caryophyllin caryophyllous caryopilite caryopses caryopsides caryopsis casaba casabe casal casalty casate casaun casava casave casavi casbah cascabel cascade cascadite cascado cascalho cascalote cascara cascarilla cascaron casco cascol case casease caseate caseation casebook casebox cased caseful casefy caseharden caseic casein caseinate caseinogen casekeeper caseless caselessly casemaker casemaking casemate casemated casement casemented caseolysis caseose caseous caser casern caseum caseweed casewood casework caseworker caseworm cash casha cashable cashableness cashaw cashbook cashbox cashboy cashcuttee cashel cashew cashgirl cashier cashierer cashierment cashkeeper cashment cashmere cashmerette casing casino casiri cask casket casking casklike casque casqued casquet casquetel casquette cass cassabanana cassabully cassady cassareep cassation casse casselty cassena casserole cassia cassican cassideous cassidid cassidony cassiduloid cassie cassimere cassina cassine cassinette cassino cassinoid cassioberry cassiopeium cassis cassiterite cassock cassolette casson cassonade cassoon cassowary cassumunar cast castable castagnole castanean castaneous castanet castaway caste casteless castelet castellan castellano castellanship castellany castellar castellate castellated castellation caster casterless casthouse castice castigable castigate castigation castigative castigator castigatory casting castle castled castlelike castlet castlewards castlewise castling castock castoff castor castoreum castorial castorin castorite castorized castory castra castral castrametation castrate castrater castration castrator castrensial castrensian castrum castuli casual casualism casualist casuality casually casualness casualty casuarinaceous casuary casuist casuistess casuistic casuistical casuistically casuistry casula caswellite cat catabaptist catabases catabasis catabatic catabibazon catabiotic catabolic catabolically catabolin catabolism catabolite catabolize catacaustic catachreses catachresis catachrestic catachrestical catachrestically catachthonian cataclasm cataclasmic cataclastic cataclinal cataclysm cataclysmal cataclysmatic cataclysmatist cataclysmic cataclysmically cataclysmist catacomb catacorolla catacoustics catacromyodian catacrotic catacrotism catacumbal catadicrotic catadicrotism catadioptric catadioptrical catadioptrics catadromous catafalco catafalque catagenesis catagenetic catagmatic catakinesis catakinetic catakinetomer catakinomeric catalase catalecta catalectic catalecticant catalepsis catalepsy cataleptic cataleptiform cataleptize cataleptoid catalexis catalina catalineta catalinite catallactic catallactically catallactics catallum catalogia catalogic catalogical catalogist catalogistic catalogue cataloguer cataloguish cataloguist cataloguize catalowne catalpa catalufa catalyses catalysis catalyst catalyte catalytic catalytical catalytically catalyzator catalyze catalyzer catamaran catamenia catamenial catamite catamited catamiting catamount catamountain catan catapan catapasm catapetalous cataphasia cataphatic cataphora cataphoresis cataphoretic cataphoria cataphoric cataphract cataphrenia cataphrenic cataphrygianism cataphyll cataphylla cataphyllary cataphyllum cataphysical cataplasia cataplasis cataplasm catapleiite cataplexy catapult catapultic catapultier cataract cataractal cataracted cataractine cataractous cataractwise cataria catarinite catarrh catarrhal catarrhally catarrhed catarrhine catarrhinian catarrhous catasarka catasta catastaltic catastasis catastate catastatic catasterism catastrophal catastrophe catastrophic catastrophical catastrophically catastrophism catastrophist catathymic catatonia catatoniac catatonic catawampous catawampously catawamptious catawamptiously catawampus catberry catbird catboat catcall catch catchable catchall catchcry catcher catchfly catchiness catching catchingly catchingness catchland catchment catchpenny catchplate catchpole catchpolery catchpoleship catchpoll catchpollery catchup catchwater catchweed catchweight catchword catchwork catchy catclaw catdom cate catechesis catechetic catechetical catechetically catechin catechism catechismal catechist catechistic catechistical catechistically catechizable catechization catechize catechizer catechol catechu catechumen catechumenal catechumenate catechumenical catechumenically catechumenism catechumenship catechutannic categorem categorematic categorematical categorematically categorial categoric categorical categorically categoricalness categorist categorization categorize category catelectrotonic catelectrotonus catella catena catenae catenarian catenary catenate catenated catenation catenoid catenulate catepuce cater cateran catercap catercorner caterer caterership cateress caterpillar caterpillared caterpillarlike caterva caterwaul caterwauler caterwauling cateye catface catfaced catfacing catfall catfish catfoot catfooted catgut catharization catharize catharpin catharping catharsis cathartic cathartical cathartically catharticalness cathead cathect cathectic cathection cathedra cathedral cathedraled cathedralesque cathedralic cathedrallike cathedralwise cathedratic cathedratica cathedratical cathedratically cathedraticum cathepsin catheter catheterism catheterization catheterize catheti cathetometer cathetometric cathetus cathexion cathexis cathidine cathin cathine cathinine cathion cathisma cathodal cathode cathodic cathodical cathodically cathodofluorescence cathodograph cathodography cathodoluminescence cathograph cathography cathole catholic catholical catholically catholicalness catholicate catholicism catholicist catholicity catholicize catholicizer catholicly catholicness catholicon catholicos catholicus catholyte cathood cathop cathro cation cationic cativo catjang catkin catkinate catlap catlike catlin catling catlinite catmalison catmint catnip catoblepas catocalid catocathartic catoctin catodont catogene catogenic catoptric catoptrical catoptrically catoptrics catoptrite catoptromancy catoptromantic catostomid catostomoid catpiece catpipe catproof catskin catstep catstick catstitch catstitcher catstone catsup cattabu cattail cattalo cattery cattily cattimandoo cattiness catting cattish cattishly cattishness cattle cattlebush cattlegate cattleless cattleman cattleya cattleyak catty cattyman catvine catwalk catwise catwood catwort caubeen cauboge cauch cauchillo caucho caucus cauda caudad caudae caudal caudally caudalward caudata caudate caudated caudation caudatolenticular caudatory caudatum caudex caudices caudicle caudiform caudillism caudle caudocephalad caudodorsal caudofemoral caudolateral caudotibial caudotibialis caught cauk caul cauld cauldrife cauldrifeness caulerpaceous caules caulescent caulicle caulicole caulicolous caulicule cauliculus cauliferous cauliflorous cauliflory cauliflower cauliform cauligenous caulinar caulinary cauline caulis caulivorous caulocarpic caulocarpous caulome caulomer caulomic caulophylline caulopteris caulosarc caulotaxis caulotaxy caulote caum cauma caumatic caunch caup caupo caupones caurale causability causable causal causalgia causality causally causate causation causational causationism causationist causative causatively causativeness causativity cause causeful causeless causelessly causelessness causer causerie causeway causewayman causey causidical causing causingness causse causson caustic caustical caustically causticiser causticism causticity causticization causticize causticizer causticly causticness caustification caustify cautel cautelous cautelously cautelousness cauter cauterant cauterization cauterize cautery caution cautionary cautioner cautionry cautious cautiously cautiousness cautivo cava cavae caval cavalcade cavalero cavalier cavalierish cavalierishness cavalierism cavalierly cavalierness cavaliero cavaliership cavalla cavalry cavalryman cavascope cavate cavatina cave caveat caveator cavekeeper cavel cavelet cavelike cavendish cavern cavernal caverned cavernicolous cavernitis cavernlike cavernoma cavernous cavernously cavernulous cavesson cavetto caviar cavicorn cavie cavil caviler caviling cavilingly cavilingness cavillation caving cavings cavish cavitary cavitate cavitation cavitied cavity caviya cavort cavus cavy caw cawk cawky cawney cawquaw caxiri caxon cay cayenne cayenned cayman caza cazimi ce cearin cease ceaseless ceaselessly ceaselessness ceasmic cebell cebian cebid cebil cebine ceboid cebollite cebur cecidiologist cecidiology cecidium cecidogenous cecidologist cecidology cecidomyian cecidomyiid cecidomyiidous cecilite cecils cecity cecograph cecomorphic cecostomy cecutiency cedar cedarbird cedared cedarn cedarware cedarwood cedary cede cedent ceder cedilla cedrat cedrate cedre cedrene cedrin cedrine cedriret cedrium cedrol cedron cedry cedula cee ceibo ceil ceile ceiler ceilidh ceiling ceilinged ceilingward ceilingwards ceilometer celadon celadonite celandine celastraceous celation celative celature celebrant celebrate celebrated celebratedness celebrater celebration celebrative celebrator celebratory celebrity celemin celemines celeomorph celeomorphic celeriac celerity celery celesta celeste celestial celestiality celestialize celestially celestialness celestina celestine celestite celestitude celiac celiadelphus celiagra celialgia celibacy celibatarian celibate celibatic celibatist celibatory celidographer celidography celiectasia celiectomy celiemia celiitis celiocele celiocentesis celiocolpotomy celiocyesis celiodynia celioelytrotomy celioenterotomy celiogastrotomy celiohysterotomy celiolymph celiomyalgia celiomyodynia celiomyomectomy celiomyomotomy celiomyositis celioncus celioparacentesis celiopyosis celiorrhaphy celiorrhea celiosalpingectomy celiosalpingotomy celioschisis celioscope celioscopy celiotomy celite cell cella cellae cellar cellarage cellarer cellaress cellaret cellaring cellarless cellarman cellarous cellarway cellarwoman cellated celled cellepore celliferous celliform cellifugal cellipetal cellist cello cellobiose celloid celloidin celloist cellophane cellose cellular cellularity cellularly cellulase cellulate cellulated cellulation cellule cellulicidal celluliferous cellulifugal cellulifugally cellulin cellulipetal cellulipetally cellulitis cellulocutaneous cellulofibrous celluloid celluloided cellulose cellulosic cellulosity cellulotoxic cellulous celotomy celsian celt celtiform celtium celtuce cembalist cembalo cement cemental cementation cementatory cementer cementification cementin cementite cementitious cementless cementmaker cementmaking cementoblast cementoma cementum cemeterial cemetery cenacle cenaculum cenanthous cenanthy cencerro cendre cenobian cenobite cenobitic cenobitical cenobitically cenobitism cenobium cenoby cenogenesis cenogenetic cenogenetically cenogonous cenosite cenosity cenospecies cenospecific cenospecifically cenotaph cenotaphic cenotaphy cenozoology cense censer censerless censive censor censorable censorate censorial censorious censoriously censoriousness censorship censual censurability censurable censurableness censurably censure censureless censurer censureship census cent centage cental centare centaur centaurdom centauress centauri centaurial centaurian centauric centauromachia centauromachy centaurus centaury centavo centena centenar centenarian centenarianism centenary centenier centenionalis centennial centennially center centerable centerboard centered centerer centering centerless centermost centerpiece centervelic centerward centerwise centesimal centesimally centesimate centesimation centesimi centesimo centesis centetid centgener centiar centiare centibar centifolious centigrade centigram centile centiliter centillion centillionth centime centimeter centimo centimolar centinormal centipedal centipede centiplume centipoise centistere centistoke centner cento centonical centonism centrad central centrale centralism centralist centralistic centrality centralization centralize centralizer centrally centralness centranth centrarchid centrarchoid centraxonial centric centrical centricality centrically centricalness centricipital centriciput centricity centriffed centrifugal centrifugalization centrifugalize centrifugaller centrifugally centrifugate centrifugation centrifuge centrifugence centriole centripetal centripetalism centripetally centripetence centripetency centriscid centrisciform centriscoid centrist centroacinar centrobaric centrobarical centroclinal centrode centrodesmose centrodesmus centrodorsal centrodorsally centroid centroidal centrolecithal centrolepidaceous centrolinead centrolineal centromere centronucleus centroplasm centrosome centrosomic centrosphere centrosymmetric centrosymmetry centrum centry centum centumvir centumviral centumvirate centuple centuplicate centuplication centuply centuria centurial centuriate centuriation centuriator centuried centurion century ceorl ceorlish cep cepa cepaceous cepe cephaeline cephalad cephalagra cephalalgia cephalalgic cephalalgy cephalanthium cephalanthous cephalate cephaldemae cephalemia cephaletron cephalhematoma cephalhydrocele cephalic cephalin cephaline cephalism cephalitis cephalization cephaloauricular cephalobranchiate cephalocathartic cephalocaudal cephalocele cephalocentesis cephalocercal cephalochord cephalochordal cephalochordate cephaloclasia cephaloclast cephalocone cephaloconic cephalocyst cephalodiscid cephalodymia cephalodymus cephalodynia cephalofacial cephalogenesis cephalogram cephalograph cephalohumeral cephalohumeralis cephaloid cephalology cephalomancy cephalomant cephalomelus cephalomenia cephalomeningitis cephalomere cephalometer cephalometric cephalometry cephalomotor cephalomyitis cephalon cephalonasal cephalopagus cephalopathy cephalopharyngeal cephalophine cephalophorous cephalophyma cephaloplegia cephaloplegic cephalopod cephalopodan cephalopodic cephalopodous cephalorachidian cephalorhachidian cephalosome cephalospinal cephalostyle cephalotaceous cephalotheca cephalothecal cephalothoracic cephalothoracopagus cephalothorax cephalotome cephalotomy cephalotractor cephalotribe cephalotripsy cephalotrocha cephalous cephid ceps ceptor cequi ceraceous cerago ceral ceramal cerambycid ceramiaceous ceramic ceramicite ceramics ceramidium ceramist ceramographic ceramography cerargyrite ceras cerasein cerasin cerastes cerata cerate ceratectomy cerated ceratiasis ceratiid ceratioid ceration ceratite ceratitic ceratitoid ceratoblast ceratobranchial ceratocricoid ceratofibrous ceratoglossal ceratoglossus ceratohyal ceratohyoid ceratoid ceratomandibular ceratomania ceratophyllaceous ceratophyte ceratopsian ceratopsid ceratopteridaceous ceratorhine ceratospongian ceratotheca ceratothecal ceraunia ceraunics ceraunogram ceraunograph ceraunomancy ceraunophone ceraunoscope ceraunoscopy cercal cercaria cercarial cercarian cercariform cercelee cerci cercomonad cercopid cercopithecid cercopithecoid cercopod cercus cere cereal cerealian cerealin cerealism cerealist cerealose cerebella cerebellar cerebellifugal cerebellipetal cerebellocortex cerebellopontile cerebellopontine cerebellorubral cerebellospinal cerebellum cerebra cerebral cerebralgia cerebralism cerebralist cerebralization cerebralize cerebrally cerebrasthenia cerebrasthenic cerebrate cerebration cerebrational cerebric cerebricity cerebriform cerebriformly cerebrifugal cerebrin cerebripetal cerebritis cerebrize cerebrocardiac cerebrogalactose cerebroganglion cerebroganglionic cerebroid cerebrology cerebroma cerebromalacia cerebromedullary cerebromeningeal cerebromeningitis cerebrometer cerebron cerebronic cerebroparietal cerebropathy cerebropedal cerebrophysiology cerebropontile cerebropsychosis cerebrorachidian cerebrosclerosis cerebroscope cerebroscopy cerebrose cerebrosensorial cerebroside cerebrosis cerebrospinal cerebrospinant cerebrosuria cerebrotomy cerebrotonia cerebrotonic cerebrovisceral cerebrum cerecloth cered cereless cerement ceremonial ceremonialism ceremonialist ceremonialize ceremonially ceremonious ceremoniously ceremoniousness ceremony cereous cerer ceresin cerevis ceria cerianthid cerianthoid ceric ceride ceriferous cerigerous cerillo ceriman cerin cerine ceriops cerise cerite cerithioid cerium cermet cern cerniture cernuous cero cerograph cerographic cerographist cerography ceroline cerolite ceroma ceromancy cerophilous ceroplast ceroplastic ceroplastics ceroplasty cerotate cerote cerotene cerotic cerotin cerotype cerous ceroxyle cerrero cerrial cerris certain certainly certainty certie certifiable certifiableness certifiably certificate certification certificative certificator certificatory certified certifier certify certiorari certiorate certioration certis certitude certosina certosino certy cerule cerulean cerulein ceruleite ceruleolactite ceruleous cerulescent ceruleum cerulignol cerulignone cerumen ceruminal ceruminiferous ceruminous cerumniparous ceruse cerussite cervantite cervical cervicaprine cervicectomy cervicicardiac cervicide cerviciplex cervicispinal cervicitis cervicoauricular cervicoaxillary cervicobasilar cervicobrachial cervicobregmatic cervicobuccal cervicodorsal cervicodynia cervicofacial cervicohumeral cervicolabial cervicolingual cervicolumbar cervicomuscular cerviconasal cervicorn cervicoscapular cervicothoracic cervicovaginal cervicovesical cervid cervine cervisia cervisial cervix cervoid cervuline ceryl cesarevitch cesarolite cesious cesium cespititous cespitose cespitosely cespitulose cess cessantly cessation cessative cessavit cesser cession cessionaire cessionary cessor cesspipe cesspit cesspool cest cestode cestoid cestoidean cestraciont cestrum cestus cetacean cetaceous cetaceum cetane cetene ceterach ceti cetic ceticide cetin cetiosaurian cetological cetologist cetology cetomorphic cetonian cetorhinid cetorhinoid cetotolite cetraric cetrarin cetyl cetylene cetylic cevadilla cevadilline cevadine cevine cevitamic ceylanite ceylonite ceyssatite cha chaa chab chabasie chabazite chabot chabouk chabuk chabutra chacate chachalaca chack chacker chackle chackler chacma chacona chacte chad chadacryst chaeta chaetiferous chaetodont chaetodontid chaetognath chaetognathan chaetognathous chaetophoraceous chaetophorous chaetopod chaetopodan chaetopodous chaetopterin chaetosema chaetotactic chaetotaxy chafe chafer chafery chafewax chafeweed chaff chaffcutter chaffer chafferer chaffinch chaffiness chaffing chaffingly chaffless chafflike chaffman chaffseed chaffwax chaffweed chaffy chaft chafted chagan chagrin chaguar chagul chahar chai chain chainage chained chainer chainette chainless chainlet chainmaker chainmaking chainman chainon chainsmith chainwale chainwork chair chairer chairless chairmaker chairmaking chairman chairmanship chairmender chairmending chairwarmer chairwoman chais chaise chaiseless chaitya chaja chaka chakar chakari chakazi chakdar chakobu chakra chakram chakravartin chaksi chal chalaco chalana chalastic chalaza chalazal chalaze chalazian chalaziferous chalazion chalazogam chalazogamic chalazogamy chalazoidite chalcanthite chalcedonic chalcedonous chalcedony chalcedonyx chalchuite chalcid chalcidicum chalcidid chalcidiform chalcidoid chalcites chalcocite chalcograph chalcographer chalcographic chalcographical chalcographist chalcography chalcolite chalcolithic chalcomancy chalcomenite chalcon chalcone chalcophanite chalcophyllite chalcopyrite chalcosiderite chalcosine chalcostibite chalcotrichite chalcotript chalcus chalder chaldron chalet chalice chaliced chalicosis chalicothere chalicotheriid chalicotherioid chalinine chalk chalkcutter chalker chalkiness chalklike chalkography chalkosideric chalkstone chalkstony chalkworker chalky challah challenge challengeable challengee challengeful challenger challengingly challie challis challote chalmer chalon chalone chalque chalta chalumeau chalutz chalutzim chalybeate chalybeous chalybite cham chamaecranial chamaeprosopic chamaerrhine chamal chamar chamber chamberdeacon chambered chamberer chambering chamberlain chamberlainry chamberlainship chamberlet chamberleted chamberletted chambermaid chamberwoman chambray chambrel chambul chamecephalic chamecephalous chamecephalus chamecephaly chameleon chameleonic chameleonize chameleonlike chamfer chamferer chamfron chamisal chamiso chamite chamma chamois chamoisite chamoline champ champac champaca champacol champagne champagneless champagnize champaign champain champaka champer champertor champertous champerty champignon champion championess championize championless championlike championship champleve champy chance chanceful chancefully chancefulness chancel chanceled chanceless chancellery chancellor chancellorate chancelloress chancellorism chancellorship chancer chancery chancewise chanche chanchito chanco chancre chancriform chancroid chancroidal chancrous chancy chandala chandam chandelier chandi chandler chandleress chandlering chandlery chandoo chandu chandul chanfrin chang changa changar change changeability changeable changeableness changeably changedale changedness changeful changefully changefulness changeless changelessly changelessness changeling changement changer chank chankings channel channelbill channeled channeler channeling channelization channelize channelled channeller channelling channelwards channer chanson chansonnette chanst chant chantable chanter chanterelle chantership chantey chanteyman chanticleer chanting chantingly chantlate chantress chantry chao chaogenous chaology chaos chaotic chaotical chaotically chaoticness chap chapah chaparral chaparro chapatty chapbook chape chapeau chapeaux chaped chapel chapeless chapelet chapelgoer chapelgoing chapellage chapellany chapelman chapelmaster chapelry chapelward chaperno chaperon chaperonage chaperone chaperonless chapfallen chapin chapiter chapitral chaplain chaplaincy chaplainry chaplainship chapless chaplet chapleted chapman chapmanship chapournet chapournetted chappaul chapped chapper chappie chappin chapping chappow chappy chaps chapt chaptalization chaptalize chapter chapteral chapterful chapwoman char charabanc charabancer charac characeous characetum characin characine characinid characinoid character characterful characterial characterical characterism characterist characteristic characteristical characteristically characteristicalness characteristicness characterizable characterization characterize characterizer characterless characterlessness characterological characterologist characterology charactery charade charadriiform charadrine charadrioid charas charbon charcoal charcoaly charcutier chard chardock chare charer charet charette charge chargeability chargeable chargeableness chargeably chargee chargeless chargeling chargeman charger chargeship charging charier charily chariness chariot charioted chariotee charioteer charioteership chariotlike chariotman chariotry chariotway charism charisma charismatic charisticary charitable charitableness charitably charity charityless charivari chark charka charkha charkhana charlady charlatan charlatanic charlatanical charlatanically charlatanish charlatanism charlatanistic charlatanry charlatanship charlock charm charmedly charmel charmer charmful charmfully charmfulness charming charmingly charmingness charmless charmlessly charmwise charnel charnockite charpit charpoy charqued charqui charr charry charshaf charsingha chart chartaceous charter charterable charterage chartered charterer charterhouse charterless chartermaster charthouse charting chartist chartless chartographist chartology chartometer chartophylax chartreuse chartroom chartula chartulary charuk charwoman chary chasable chase chaseable chaser chasing chasm chasma chasmal chasmed chasmic chasmogamic chasmogamous chasmogamy chasmophyte chasmy chasse chassepot chasseur chassignite chassis chaste chastely chasten chastener chasteness chasteningly chastenment chasteweed chastisable chastise chastisement chastiser chastity chasuble chasubled chat chataka chateau chateaux chatelain chatelaine chatelainry chatellany chathamite chati chatoyance chatoyancy chatoyant chatsome chatta chattable chattation chattel chattelhood chattelism chattelization chattelize chattelship chatter chatteration chatterbag chatterbox chatterer chattering chatteringly chattermag chattermagging chattery chattily chattiness chatting chattingly chatty chatwood chaudron chauffer chauffeur chauffeurship chauk chaukidari chaulmoogra chaulmoograte chaulmoogric chaus chausseemeile chaute chauth chauvinism chauvinist chauvinistic chauvinistically chavender chavibetol chavicin chavicine chavicol chavish chaw chawan chawbacon chawer chawk chawl chawstick chay chaya chayaroot chayote chayroot chazan che cheap cheapen cheapener cheapery cheaping cheapish cheaply cheapness cheat cheatable cheatableness cheatee cheater cheatery cheating cheatingly cheatrie chebec chebel chebog chebule chebulinic check checkable checkage checkbird checkbite checkbook checked checker checkerbelly checkerberry checkerbloom checkerboard checkerbreast checkered checkerist checkers checkerwise checkerwork checkhook checkless checkman checkmate checkoff checkrack checkrein checkroll checkroom checkrope checkrow checkrowed checkrower checkstone checkstrap checkstring checkup checkweigher checkwork checky cheddaring cheddite cheder chedlock chee cheecha cheechako cheek cheekbone cheeker cheekily cheekiness cheekish cheekless cheekpiece cheeky cheep cheeper cheepily cheepiness cheepy cheer cheered cheerer cheerful cheerfulize cheerfully cheerfulness cheerfulsome cheerily cheeriness cheering cheeringly cheerio cheerleader cheerless cheerlessly cheerlessness cheerly cheery cheese cheeseboard cheesebox cheeseburger cheesecake cheesecloth cheesecurd cheesecutter cheeseflower cheeselip cheesemonger cheesemongering cheesemongerly cheesemongery cheeseparer cheeseparing cheeser cheesery cheesewood cheesiness cheesy cheet cheetah cheeter cheetie chef chegoe chegre cheilitis cheilostomatous cheir cheiragra cheirognomy cheirography cheirolin cheirology cheiromancy cheiromegaly cheiropatagium cheiropodist cheiropody cheiropompholyx cheiropterygium cheirosophy cheirospasm chekan cheke cheki chekmak chela chelaship chelate chelation chelem chelerythrine chelicer chelicera cheliceral chelicerate chelicere chelide chelidon chelidonate chelidonian chelidonic chelidonine cheliferous cheliform chelingo cheliped chello chelodine chelone chelonian chelonid cheloniid chelonin chelophore chelp chelydroid chelys chemasthenia chemawinite chemesthesis chemiatric chemiatrist chemiatry chemic chemical chemicalization chemicalize chemically chemicker chemicoastrological chemicobiologic chemicobiology chemicocautery chemicodynamic chemicoengineering chemicoluminescence chemicomechanical chemicomineralogical chemicopharmaceutical chemicophysical chemicophysics chemicophysiological chemicovital chemigraph chemigraphic chemigraphy chemiloon chemiluminescence chemiotactic chemiotaxic chemiotaxis chemiotropic chemiotropism chemiphotic chemis chemise chemisette chemism chemisorb chemisorption chemist chemistry chemitype chemitypy chemoceptor chemokinesis chemokinetic chemolysis chemolytic chemolyze chemoreception chemoreceptor chemoreflex chemoresistance chemoserotherapy chemosis chemosmosis chemosmotic chemosynthesis chemosynthetic chemotactic chemotactically chemotaxis chemotaxy chemotherapeutic chemotherapeutics chemotherapist chemotherapy chemotic chemotropic chemotropically chemotropism chemurgic chemurgical chemurgy chena chende chenevixite cheng chenica chenille cheniller chenopod chenopodiaceous cheoplastic chepster cheque chercock cherem cherimoya cherish cherishable cherisher cherishing cherishingly cherishment chernozem cheroot cherried cherry cherryblossom cherrylike chersonese chert cherte cherty cherub cherubic cherubical cherubically cherubim cherubimic cherubimical cherubin chervil chervonets cheson chess chessboard chessdom chessel chesser chessist chessman chessmen chesstree chessylite chest chester chesterfield chesterlite chestful chestily chestiness chestnut chestnutty chesty cheth chettik chetty chetverik chetvert chevage cheval chevalier chevaline chevance cheve cheven chevener chevesaile chevin chevisance chevise chevon chevrette chevron chevrone chevronel chevronelly chevronwise chevrony chevrotain chevy chew chewbark chewer chewink chewstick chewy cheyney chhatri chi chia chiaroscurist chiaroscuro chiasm chiasma chiasmal chiasmatype chiasmatypy chiasmic chiasmodontid chiasmus chiastic chiastolite chiastoneural chiastoneurous chiastoneury chiaus chibinite chibouk chibrit chic chicane chicaner chicanery chicaric chicayote chichi chichicaste chichimecan chichipate chichipe chichituna chick chickabiddy chickadee chickaree chickasaw chickell chicken chickenberry chickenbill chickenbreasted chickenhearted chickenheartedly chickenheartedness chickenhood chickenweed chickenwort chicker chickhood chickling chickstone chickweed chickwit chicky chicle chicness chico chicory chicot chicote chicqued chicquer chicquest chicquing chid chidden chide chider chiding chidingly chidingness chidra chief chiefdom chiefery chiefess chiefest chiefish chiefless chiefling chiefly chiefship chieftain chieftaincy chieftainess chieftainry chieftainship chieftess chield chien chiffer chiffon chiffonade chiffonier chiffony chifforobe chigetai chiggak chigger chiggerweed chignon chignoned chigoe chih chihfu chikara chil chilacavote chilalgia chilarium chilblain child childbearing childbed childbirth childcrowing childe childed childhood childing childish childishly childishness childkind childless childlessness childlike childlikeness childly childness childrenite childridden childship childward chile chilectropion chilenite chili chiliad chiliadal chiliadic chiliagon chiliahedron chiliarch chiliarchia chiliarchy chiliasm chiliast chiliastic chilicote chilicothe chilidium chiliomb chilitis chill chilla chillagite chilled chiller chillily chilliness chilling chillingly chillish chillness chillo chillroom chillsome chillum chillumchee chilly chilognath chilognathan chilognathous chilogrammo chiloma chiloncus chiloplasty chilopod chilopodan chilopodous chilostomatous chilostome chilotomy chilver chimaera chimaerid chimaeroid chimango chimble chime chimer chimera chimeric chimerical chimerically chimericalness chimesmaster chiminage chimney chimneyhead chimneyless chimneyman chimopeelagic chimpanzee chin china chinaberry chinalike chinamania chinamaniac chinampa chinanta chinaphthol chinar chinaroot chinaware chinawoman chinband chinch chincha chinchayote chinche chincherinchee chinchilla chinching chincloth chincough chine chined ching chingma chinik chinin chink chinkara chinker chinkerinchee chinking chinkle chinks chinky chinless chinnam chinned chinny chino chinoa chinol chinotoxine chinotti chinpiece chinquapin chinse chint chintz chinwood chiococcine chiolite chionablepsia chiotilla chip chipchap chipchop chiplet chipling chipmunk chippable chippage chipped chipper chipping chippy chips chipwood chiragra chiral chiralgia chirality chirapsia chirarthritis chirata chirimen chirinola chiripa chirivita chirk chirm chiro chirocosmetics chirogale chirognomic chirognomically chirognomist chirognomy chirognostic chirograph chirographary chirographer chirographic chirographical chirography chirogymnast chirological chirologically chirologist chirology chiromance chiromancer chiromancist chiromancy chiromant chiromantic chiromantical chiromegaly chirometer chironomic chironomid chironomy chironym chiropatagium chiroplasty chiropod chiropodial chiropodic chiropodical chiropodist chiropodistry chiropodous chiropody chiropompholyx chiropractic chiropractor chiropraxis chiropter chiropteran chiropterite chiropterophilous chiropterous chiropterygian chiropterygious chiropterygium chirosophist chirospasm chirotherian chirothesia chirotonsor chirotonsory chirotony chirotype chirp chirper chirpily chirpiness chirping chirpingly chirpling chirpy chirr chirrup chirruper chirrupy chirurgeon chirurgery chisel chiseled chiseler chisellike chiselly chiselmouth chit chitak chital chitchat chitchatty chitin chitinization chitinized chitinocalcareous chitinogenous chitinoid chitinous chiton chitosamine chitosan chitose chitra chittamwood chitter chitterling chitty chivalresque chivalric chivalrous chivalrously chivalrousness chivalry chive chivey chiviatite chkalik chladnite chlamyd chlamydate chlamydeous chlamydobacteriaceous chlamydospore chlamydozoan chlamyphore chlamys chloanthite chloasma chlor chloracetate chloragogen chloral chloralformamide chloralide chloralism chloralization chloralize chloralose chloralum chloramide chloramine chloramphenicol chloranemia chloranemic chloranhydride chloranil chloranthaceous chloranthy chlorapatite chlorastrolite chlorate chlorazide chlorcosane chlordan chlordane chlore chlorellaceous chloremia chlorenchyma chlorhydrate chlorhydric chloric chloridate chloridation chloride chlorider chloridize chlorimeter chlorimetric chlorimetry chlorinate chlorination chlorinator chlorine chlorinize chlorinous chloriodide chlorite chloritic chloritization chloritize chloritoid chlorize chlormethane chlormethylic chloroacetate chloroacetic chloroacetone chloroacetophenone chloroamide chloroamine chloroanaemia chloroanemia chloroaurate chloroauric chloroaurite chlorobenzene chlorobromide chlorocalcite chlorocarbonate chlorochromates chlorochromic chlorochrous chlorocresol chlorocruorin chlorodize chloroform chloroformate chloroformic chloroformism chloroformist chloroformization chloroformize chlorogenic chlorogenine chlorohydrin chlorohydrocarbon chloroiodide chloroleucite chloroma chloromelanite chlorometer chloromethane chlorometric chlorometry chloronitrate chloropal chloropalladates chloropalladic chlorophane chlorophenol chlorophoenicite chlorophyceous chlorophyl chlorophyll chlorophyllaceous chlorophyllan chlorophyllase chlorophyllian chlorophyllide chlorophylliferous chlorophylligenous chlorophylligerous chlorophyllin chlorophyllite chlorophylloid chlorophyllose chlorophyllous chloropia chloropicrin chloroplast chloroplastic chloroplastid chloroplatinate chloroplatinic chloroplatinite chloroplatinous chloroprene chloropsia chloroquine chlorosilicate chlorosis chlorospinel chlorosulphonic chlorotic chlorous chlorozincate chlorsalol chloryl cho choachyte choana choanate choanocytal choanocyte choanoflagellate choanoid choanophorous choanosomal choanosome choate choaty chob choca chocard chocho chock chockablock chocker chockler chockman chocolate choel choenix choffer choga chogak chogset choice choiceful choiceless choicelessness choicely choiceness choicy choil choiler choir choirboy choirlike choirman choirmaster choirwise chokage choke chokeberry chokebore chokecherry chokedamp choker chokered chokerman chokestrap chokeweed chokidar choking chokingly chokra choky chol chola cholagogic cholagogue cholalic cholane cholangioitis cholangitis cholanic cholanthrene cholate chold choleate cholecyanine cholecyst cholecystalgia cholecystectasia cholecystectomy cholecystenterorrhaphy cholecystenterostomy cholecystgastrostomy cholecystic cholecystitis cholecystnephrostomy cholecystocolostomy cholecystocolotomy cholecystoduodenostomy cholecystogastrostomy cholecystogram cholecystography cholecystoileostomy cholecystojejunostomy cholecystokinin cholecystolithiasis cholecystolithotripsy cholecystonephrostomy cholecystopexy cholecystorrhaphy cholecystostomy cholecystotomy choledoch choledochal choledochectomy choledochitis choledochoduodenostomy choledochoenterostomy choledocholithiasis choledocholithotomy choledocholithotripsy choledochoplasty choledochorrhaphy choledochostomy choledochotomy cholehematin choleic choleine choleinic cholelith cholelithiasis cholelithic cholelithotomy cholelithotripsy cholelithotrity cholemia choleokinase cholepoietic choler cholera choleraic choleric cholericly cholericness choleriform cholerigenous cholerine choleroid choleromania cholerophobia cholerrhagia cholestane cholestanol cholesteatoma cholesteatomatous cholestene cholesterate cholesteremia cholesteric cholesterin cholesterinemia cholesterinic cholesterinuria cholesterol cholesterolemia cholesteroluria cholesterosis cholesteryl choletelin choletherapy choleuria choli choliamb choliambic choliambist cholic choline cholinergic cholinesterase cholinic cholla choller cholochrome cholocyanine chologenetic choloidic choloidinic chololith chololithic cholophein cholorrhea choloscopy cholterheaded cholum choluria chomp chondral chondralgia chondrarsenite chondre chondrectomy chondrenchyma chondric chondrification chondrify chondrigen chondrigenous chondrin chondrinous chondriocont chondriome chondriomere chondriomite chondriosomal chondriosome chondriosphere chondrite chondritic chondritis chondroadenoma chondroalbuminoid chondroangioma chondroarthritis chondroblast chondroblastoma chondrocarcinoma chondrocele chondroclasis chondroclast chondrocoracoid chondrocostal chondrocranial chondrocranium chondrocyte chondrodite chondroditic chondrodynia chondrodystrophia chondrodystrophy chondroendothelioma chondroepiphysis chondrofetal chondrofibroma chondrofibromatous chondrogen chondrogenesis chondrogenetic chondrogenous chondrogeny chondroglossal chondroglossus chondrography chondroid chondroitic chondroitin chondrolipoma chondrology chondroma chondromalacia chondromatous chondromucoid chondromyoma chondromyxoma chondromyxosarcoma chondropharyngeal chondropharyngeus chondrophore chondrophyte chondroplast chondroplastic chondroplasty chondroprotein chondropterygian chondropterygious chondrosamine chondrosarcoma chondrosarcomatous chondroseptum chondrosin chondrosis chondroskeleton chondrostean chondrosteoma chondrosteous chondrosternal chondrotome chondrotomy chondroxiphoid chondrule chondrus chonolith chonta chontawood choop choosable choosableness choose chooser choosing choosingly choosy chop chopa chopboat chopfallen chophouse chopin chopine choplogic chopped chopper choppered chopping choppy chopstick choragic choragion choragium choragus choragy choral choralcelo choraleon choralist chorally chord chorda chordacentrous chordacentrum chordaceous chordal chordally chordamesoderm chordate chorded chorditis chordoid chordomesoderm chordotomy chordotonal chore chorea choreal choreatic choree choregic choregus choregy choreic choreiform choreograph choreographer choreographic choreographical choreography choreoid choreomania chorepiscopal chorepiscopus choreus choreutic chorial choriamb choriambic choriambize choriambus choric chorine chorioadenoma chorioallantoic chorioallantoid chorioallantois choriocapillaris choriocapillary choriocarcinoma choriocele chorioepithelioma chorioid chorioidal chorioiditis chorioidocyclitis chorioidoiritis chorioidoretinitis chorioma chorion chorionepithelioma chorionic chorioptic chorioretinal chorioretinitis choripetalous choriphyllous chorisepalous chorisis chorism chorist choristate chorister choristership choristic choristoblastoma choristoma choristry chorization chorizont chorizontal chorizontes chorizontic chorizontist chorogi chorograph chorographer chorographic chorographical chorographically chorography choroid choroidal choroidea choroiditis choroidocyclitis choroidoiritis choroidoretinitis chorological chorologist chorology choromania choromanic chorometry chorook chort chorten chortle chortler chortosterol chorus choruser choruslike choryos chose chosen chott chouette chough chouka choultry choup chouquette chous chouse chouser chousingha chow chowchow chowder chowderhead chowderheaded chowk chowry choya choyroot chrematheism chrematist chrematistic chrematistics chreotechnics chresmology chrestomathic chrestomathics chrestomathy chria chrimsel chrism chrisma chrismal chrismary chrismatine chrismation chrismatite chrismatize chrismatory chrismon chrisom chrisomloosing chrisroot christcross christen christened christener christening christianite chroatol chroma chromaffin chromaffinic chromammine chromaphil chromaphore chromascope chromate chromatic chromatical chromatically chromatician chromaticism chromaticity chromatics chromatid chromatin chromatinic chromatism chromatist chromatize chromatocyte chromatodysopia chromatogenous chromatogram chromatograph chromatographic chromatography chromatoid chromatology chromatolysis chromatolytic chromatometer chromatone chromatopathia chromatopathic chromatopathy chromatophil chromatophile chromatophilia chromatophilic chromatophilous chromatophobia chromatophore chromatophoric chromatophorous chromatoplasm chromatopsia chromatoptometer chromatoptometry chromatoscope chromatoscopy chromatosis chromatosphere chromatospheric chromatrope chromaturia chromatype chromazurine chromdiagnosis chrome chromene chromesthesia chromic chromicize chromid chromidial chromidiogamy chromidiosome chromidium chromidrosis chromiferous chromiole chromism chromite chromitite chromium chromo chromoblast chromocenter chromocentral chromochalcographic chromochalcography chromocollograph chromocollographic chromocollography chromocollotype chromocollotypy chromocratic chromocyte chromocytometer chromodermatosis chromodiascope chromogen chromogene chromogenesis chromogenetic chromogenic chromogenous chromogram chromograph chromoisomer chromoisomeric chromoisomerism chromoleucite chromolipoid chromolith chromolithic chromolithograph chromolithographer chromolithographic chromolithography chromolysis chromomere chromometer chromone chromonema chromoparous chromophage chromophane chromophile chromophilic chromophilous chromophobic chromophore chromophoric chromophorous chromophotograph chromophotographic chromophotography chromophotolithograph chromophyll chromoplasm chromoplasmic chromoplast chromoplastid chromoprotein chromopsia chromoptometer chromoptometrical chromosantonin chromoscope chromoscopic chromoscopy chromosomal chromosome chromosphere chromospheric chromotherapist chromotherapy chromotrope chromotropic chromotropism chromotropy chromotype chromotypic chromotypographic chromotypography chromotypy chromous chromoxylograph chromoxylography chromule chromy chromyl chronal chronanagram chronaxia chronaxie chronaxy chronic chronical chronically chronicity chronicle chronicler chronicon chronisotherm chronist chronobarometer chronocinematography chronocrator chronocyclegraph chronodeik chronogeneous chronogenesis chronogenetic chronogram chronogrammatic chronogrammatical chronogrammatically chronogrammatist chronogrammic chronograph chronographer chronographic chronographical chronographically chronography chronoisothermal chronologer chronologic chronological chronologically chronologist chronologize chronology chronomancy chronomantic chronometer chronometric chronometrical chronometrically chronometry chrononomy chronopher chronophotograph chronophotographic chronophotography chronoscope chronoscopic chronoscopically chronoscopy chronosemic chronostichon chronothermal chronothermometer chronotropic chronotropism chroococcaceous chroococcoid chrotta chrysal chrysalid chrysalidal chrysalides chrysalidian chrysaline chrysalis chrysaloid chrysamine chrysammic chrysamminic chrysaniline chrysanisic chrysanthemin chrysanthemum chrysanthous chrysarobin chrysatropic chrysazin chrysazol chryselectrum chryselephantine chrysene chrysenic chrysid chrysidid chrysin chrysoaristocracy chrysoberyl chrysobull chrysocarpous chrysochlore chrysochlorous chrysochrous chrysocolla chrysocracy chrysoeriol chrysogen chrysograph chrysographer chrysography chrysohermidin chrysoidine chrysolite chrysolitic chrysology chrysomelid chrysomonad chrysomonadine chrysopal chrysopee chrysophan chrysophanic chrysophenine chrysophilist chrysophilite chrysophyll chrysopid chrysopoeia chrysopoetic chrysopoetics chrysoprase chrysorin chrysosperm chrysotile chrystocrene chthonian chthonic chthonophagia chthonophagy chub chubbed chubbedness chubbily chubbiness chubby chuck chucker chuckhole chuckies chucking chuckingly chuckle chucklehead chuckleheaded chuckler chucklingly chuckrum chuckstone chuckwalla chucky chuddar chufa chuff chuffy chug chugger chuhra chukar chukker chukor chulan chullpa chum chummage chummer chummery chummily chummy chump chumpaka chumpish chumpishness chumpy chumship chun chunari chunga chunk chunkhead chunkily chunkiness chunky chunner chunnia chunter chupak chupon chuprassie chuprassy church churchanity churchcraft churchdom churchful churchgoer churchgoing churchgrith churchianity churchified churchiness churching churchish churchism churchite churchless churchlet churchlike churchliness churchly churchman churchmanly churchmanship churchmaster churchscot churchward churchwarden churchwardenism churchwardenize churchwardenship churchwards churchway churchwise churchwoman churchy churchyard churel churinga churl churled churlhood churlish churlishly churlishness churly churm churn churnability churnful churning churnmilk churnstaff churr churruck churrus churrworm chut chute chuter chutney chyack chyak chylaceous chylangioma chylaqueous chyle chylemia chylidrosis chylifaction chylifactive chylifactory chyliferous chylific chylification chylificatory chyliform chylify chylocaulous chylocauly chylocele chylocyst chyloid chylomicron chylopericardium chylophyllous chylophylly chylopoiesis chylopoietic chylosis chylothorax chylous chyluria chymaqueous chymase chyme chymia chymic chymiferous chymification chymify chymosin chymosinogen chymotrypsin chymotrypsinogen chymous chypre chytra chytrid chytridiaceous chytridial chytridiose chytridiosis cibarial cibarian cibarious cibation cibol cibophobia ciborium cibory ciboule cicad cicada cicadid cicala cicatrice cicatrices cicatricial cicatricle cicatricose cicatricula cicatricule cicatrisive cicatrix cicatrizant cicatrizate cicatrization cicatrize cicatrizer cicatrose cicely cicer ciceronage cicerone ciceroni ciceronism ciceronize cichlid cichloid cichoraceous cichoriaceous cicindelid cicindelidae cicisbeism ciclatoun ciconian ciconiid ciconiiform ciconine ciconioid cicutoxin cidarid cidaris cider ciderish ciderist ciderkin cig cigala cigar cigaresque cigarette cigarfish cigarillo cigarito cigarless cigua ciguatera cilectomy cilia ciliary ciliate ciliated ciliately ciliation cilice cilicious ciliella ciliferous ciliform ciliiferous ciliiform cilioflagellate ciliograde ciliolate ciliolum cilioretinal cilioscleral ciliospinal ciliotomy cilium cillosis cimbia cimelia cimex cimicid cimicide cimiciform cimicifugin cimicoid ciminite cimline cimolite cinch cincher cincholoipon cincholoiponic cinchomeronic cinchonaceous cinchonamine cinchonate cinchonia cinchonic cinchonicine cinchonidia cinchonidine cinchonine cinchoninic cinchonism cinchonization cinchonize cinchonology cinchophen cinchotine cinchotoxine cincinnal cincinnus cinclis cinct cincture cinder cinderlike cinderman cinderous cindery cine cinecamera cinefilm cinel cinema cinematic cinematical cinematically cinematize cinematograph cinematographer cinematographic cinematographical cinematographically cinematographist cinematography cinemelodrama cinemize cinemograph cinenchyma cinenchymatous cinene cinenegative cineole cineolic cinephone cinephotomicrography cineplastics cineplasty cineraceous cinerarium cinerary cineration cinerator cinerea cinereal cinereous cineritious cinevariety cingle cingular cingulate cingulated cingulum cinnabar cinnabaric cinnabarine cinnamal cinnamaldehyde cinnamate cinnamein cinnamene cinnamenyl cinnamic cinnamol cinnamomic cinnamon cinnamoned cinnamonic cinnamonlike cinnamonroot cinnamonwood cinnamyl cinnamylidene cinnoline cinnyl cinquain cinque cinquecentism cinquecentist cinquecento cinquefoil cinquefoiled cinquepace cinter cinuran cinurous cion cionectomy cionitis cionocranial cionocranian cionoptosis cionorrhaphia cionotome cionotomy cipher cipherable cipherdom cipherer cipherhood cipo cipolin cippus circa circinal circinate circinately circination circiter circle circled circler circlet circlewise circling circovarian circuit circuitable circuital circuiteer circuiter circuition circuitman circuitor circuitous circuitously circuitousness circuity circulable circulant circular circularism circularity circularization circularize circularizer circularly circularness circularwise circulate circulation circulative circulator circulatory circumagitate circumagitation circumambages circumambagious circumambience circumambiency circumambient circumambulate circumambulation circumambulator circumambulatory circumanal circumantarctic circumarctic circumarticular circumaviate circumaviation circumaviator circumaxial circumaxile circumaxillary circumbasal circumbendibus circumboreal circumbuccal circumbulbar circumcallosal circumcenter circumcentral circumcinct circumcincture circumcircle circumcise circumciser circumcision circumclude circumclusion circumcolumnar circumcone circumconic circumcorneal circumcrescence circumcrescent circumdenudation circumdiction circumduce circumduct circumduction circumesophagal circumesophageal circumference circumferential circumferentially circumferentor circumflant circumflect circumflex circumflexion circumfluence circumfluent circumfluous circumforaneous circumfulgent circumfuse circumfusile circumfusion circumgenital circumgyrate circumgyration circumgyratory circumhorizontal circumincession circuminsession circuminsular circumintestinal circumitineration circumjacence circumjacency circumjacent circumlental circumlitio circumlittoral circumlocute circumlocution circumlocutional circumlocutionary circumlocutionist circumlocutory circummeridian circummeridional circummigration circummundane circummure circumnatant circumnavigable circumnavigate circumnavigation circumnavigator circumnavigatory circumneutral circumnuclear circumnutate circumnutation circumnutatory circumocular circumoesophagal circumoral circumorbital circumpacific circumpallial circumparallelogram circumpentagon circumplicate circumplication circumpolar circumpolygon circumpose circumposition circumradius circumrenal circumrotate circumrotation circumrotatory circumsail circumscissile circumscribable circumscribe circumscribed circumscriber circumscript circumscription circumscriptive circumscriptively circumscriptly circumsinous circumspangle circumspatial circumspect circumspection circumspective circumspectively circumspectly circumspectness circumspheral circumstance circumstanced circumstantiability circumstantiable circumstantial circumstantiality circumstantially circumstantialness circumstantiate circumstantiation circumtabular circumterraneous circumterrestrial circumtonsillar circumtropical circumumbilical circumundulate circumundulation circumvallate circumvallation circumvascular circumvent circumventer circumvention circumventive circumventor circumviate circumvolant circumvolute circumvolution circumvolutory circumvolve circumzenithal circus circusy cirque cirrate cirrated cirrhosed cirrhosis cirrhotic cirrhous cirri cirribranch cirriferous cirriform cirrigerous cirrigrade cirriped cirripedial cirrolite cirropodous cirrose cirrous cirrus cirsectomy cirsocele cirsoid cirsomphalos cirsophthalmia cirsotome cirsotomy ciruela cirurgian cisalpine cisandine cisatlantic cisco cise cisele cisgangetic cisjurane cisleithan cismarine cismontane cisoceanic cispadane cisplatine cispontine cisrhenane cissing cissoid cissoidal cist cista cistaceous cistae cisted cistern cisterna cisternal cistic cistophoric cistophorus cistvaen cit citable citadel citation citator citatory cite citee citer citess cithara citharist citharista citharoedi citharoedic citharoedus cither citied citification citified citify citigrade citizen citizendom citizeness citizenhood citizenish citizenism citizenize citizenly citizenry citizenship citole citraconate citraconic citral citramide citramontane citrange citrangeade citrate citrated citrean citrene citreous citric citriculture citriculturist citril citrin citrination citrine citrinin citrinous citrometer citron citronade citronella citronellal citronelle citronellic citronellol citronin citronwood citropten citrous citrullin citrus citrylidene cittern citua city citycism citydom cityfolk cityful cityish cityless cityness cityscape cityward citywards cive civet civetlike civetone civic civically civicism civics civil civilian civility civilizable civilization civilizational civilizatory civilize civilized civilizedness civilizee civilizer civilly civilness civism civvy cixiid clabber clabbery clachan clack clackdish clacker clacket clackety clad cladanthous cladautoicous cladding cladine cladocarpous cladoceran cladocerous cladode cladodial cladodont cladodontid cladogenous cladoniaceous cladonioid cladophoraceous cladophyll cladophyllum cladoptosis cladose cladoselachian cladosiphonic cladus clag claggum claggy claim claimable claimant claimer claimless clairaudience clairaudient clairaudiently clairce clairecole clairecolle clairschach clairschacher clairsentience clairsentient clairvoyance clairvoyancy clairvoyant clairvoyantly claith claithes claiver clam clamant clamantly clamative clamatorial clamatory clamb clambake clamber clamberer clamcracker clame clamer clammed clammer clammily clamminess clamming clammish clammy clammyweed clamor clamorer clamorist clamorous clamorously clamorousness clamorsome clamp clamper clamshell clamworm clan clancular clancularly clandestine clandestinely clandestineness clandestinity clanfellow clang clangful clangingly clangor clangorous clangorously clanjamfray clanjamfrey clanjamfrie clanjamphrey clank clankety clanking clankingly clankingness clankless clanless clanned clanning clannishly clannishness clansfolk clanship clansman clansmanship clanswoman clap clapboard clapbread clapmatch clapnet clapped clapper clapperclaw clapperclawer clapperdudgeon clappermaclaw clapping clapt claptrap clapwort claque claquer clarabella clarain clarendon claret claribella clarifiant clarification clarifier clarify clarigation clarin clarinet clarinetist clarinettist clarion clarionet clarity clark clarkeite claro clarshech clart clarty clary clash clasher clashingly clashy clasmatocyte clasmatosis clasp clasper clasping claspt class classable classbook classed classer classes classfellow classic classical classicalism classicalist classicality classicalize classically classicalness classicism classicist classicistic classicize classicolatry classifiable classific classifically classification classificational classificator classificatory classified classifier classis classism classman classmanship classmate classroom classwise classwork classy clastic clat clatch clathraceous clathrarian clathrate clathroid clathrose clathrulate clatter clatterer clatteringly clattertrap clattery clatty claudent claudetite claudicant claudicate claudication claught clausal clause clausthalite claustra claustral claustration claustrophobia claustrum clausula clausular clausule clausure claut clava clavacin claval clavariaceous clavate clavated clavately clavation clave clavecin clavecinist clavel clavelization clavelize clavellate clavellated claver clavial claviature clavicembalo clavichord clavichordist clavicithern clavicle clavicorn clavicornate clavicotomy clavicular clavicularium claviculate claviculus clavicylinder clavicymbal clavicytherium clavier clavierist claviform claviger clavigerous claviharp clavilux claviol clavipectoral clavis clavodeltoid clavodeltoideus clavola clavolae clavolet clavus clavy claw clawed clawer clawk clawker clawless clay claybank claybrained clayen clayer clayey clayiness clayish claylike clayman claymore claypan clayware clayweed cleach clead cleaded cleading cleam cleamer clean cleanable cleaner cleanhanded cleanhandedness cleanhearted cleaning cleanish cleanlily cleanliness cleanly cleanness cleanout cleansable cleanse cleanser cleansing cleanskins cleanup clear clearable clearage clearance clearcole clearedness clearer clearheaded clearheadedly clearheadedness clearhearted clearing clearinghouse clearish clearly clearness clearskins clearstarch clearweed clearwing cleat cleavability cleavable cleavage cleave cleaveful cleavelandite cleaver cleavers cleaverwort cleaving cleavingly cleche cleck cled cledge cledgy cledonism clee cleek cleeked cleeky clef cleft clefted cleg cleidagra cleidarthritis cleidocostal cleidocranial cleidohyoid cleidomancy cleidomastoid cleidorrhexis cleidoscapular cleidosternal cleidotomy cleidotripsy cleistocarp cleistocarpous cleistogamic cleistogamically cleistogamous cleistogamously cleistogamy cleistogene cleistogenous cleistogeny cleistothecium cleithral cleithrum clem clematite clemence clemency clement clemently clench cleoid clep clepsydra cleptobiosis cleptobiotic clerestoried clerestory clergy clergyable clergylike clergyman clergywoman cleric clerical clericalism clericalist clericality clericalize clerically clericate clericature clericism clericity clerid clerihew clerisy clerk clerkage clerkdom clerkery clerkess clerkhood clerking clerkish clerkless clerklike clerkliness clerkly clerkship cleromancy cleronomy cleruch cleruchial cleruchic cleruchy cletch clethraceous cleuch cleve cleveite clever cleverality cleverish cleverishly cleverly cleverness clevis clew cliack clianthus cliche click clicker clicket clickless clicky cliency client clientage cliental cliented clientelage clientele clientless clientry clientship cliff cliffed cliffless clifflet clifflike cliffside cliffsman cliffweed cliffy clift cliftonite clifty clima climaciaceous climacteric climacterical climacterically climactic climactical climactically climacus climata climatal climate climath climatic climatical climatically climatize climatographical climatography climatologic climatological climatologically climatologist climatology climatometer climatotherapeutics climatotherapy climature climax climb climbable climber climbing clime climograph clinal clinamen clinamina clinandria clinandrium clinanthia clinanthium clinch clincher clinchingly clinchingness cline cling clinger clingfish clinging clingingly clingingness clingstone clingy clinia clinic clinical clinically clinician clinicist clinicopathological clinium clink clinker clinkerer clinkery clinking clinkstone clinkum clinoaxis clinocephalic clinocephalism clinocephalous clinocephalus clinocephaly clinochlore clinoclase clinoclasite clinodiagonal clinodomatic clinodome clinograph clinographic clinohedral clinohedrite clinohumite clinoid clinologic clinology clinometer clinometric clinometrical clinometry clinopinacoid clinopinacoidal clinoprism clinopyramid clinopyroxene clinorhombic clinospore clinostat clinquant clint clinting clintonite clinty clip clipei clipeus clippable clipped clipper clipperman clipping clips clipse clipsheet clipsome clipt clique cliquedom cliqueless cliquish cliquishly cliquishness cliquism cliquy cliseometer clisere clishmaclaver clit clitch clite clitella clitellar clitelliferous clitelline clitellum clitellus clites clithe clithral clithridiate clitia clition clitoridauxe clitoridean clitoridectomy clitoriditis clitoridotomy clitoris clitorism clitoritis clitter clitterclatter clival clive clivers clivis clivus cloaca cloacal cloacaline cloacean cloacinal cloacinean cloacitis cloak cloakage cloaked cloakedly cloaking cloakless cloaklet cloakmaker cloakmaking cloakroom cloakwise cloam cloamen cloamer clobber clobberer clochan cloche clocher clochette clock clockbird clockcase clocked clocker clockface clockhouse clockkeeper clockless clocklike clockmaker clockmaking clockmutch clockroom clocksmith clockwise clockwork clod clodbreaker clodder cloddily cloddiness cloddish cloddishly cloddishness cloddy clodhead clodhopper clodhopping clodlet clodpate clodpated clodpoll cloff clog clogdogdo clogger cloggily clogginess cloggy cloghad cloglike clogmaker clogmaking clogwood clogwyn cloiochoanitic cloisonless cloisonne cloister cloisteral cloistered cloisterer cloisterless cloisterlike cloisterliness cloisterly cloisterwise cloistral cloistress cloit clomb clomben clonal clone clonic clonicity clonicotonic clonism clonorchiasis clonus cloof cloop cloot clootie clop cloragen clorargyrite cloriodid closable close closecross closed closefisted closefistedly closefistedness closehanded closehearted closely closemouth closemouthed closen closeness closer closestool closet closewing closh closish closter clostridial closure clot clotbur clote cloth clothbound clothe clothes clothesbag clothesbasket clothesbrush clotheshorse clothesline clothesman clothesmonger clothespin clothespress clothesyard clothier clothify clothing clothmaker clothmaking clothworker clothy clottage clottedness clotter clotty cloture clotweed cloud cloudage cloudberry cloudburst cloudcap clouded cloudful cloudily cloudiness clouding cloudland cloudless cloudlessly cloudlessness cloudlet cloudlike cloudling cloudology cloudscape cloudship cloudward cloudwards cloudy clough clour clout clouted clouter clouterly clouty clove cloven clovene clover clovered cloverlay cloverleaf cloveroot cloverroot clovery clow clown clownade clownage clownery clownheal clownish clownishly clownishness clownship clowring cloy cloyedness cloyer cloying cloyingly cloyingness cloyless cloysome club clubbability clubbable clubbed clubber clubbily clubbing clubbish clubbism clubbist clubby clubdom clubfellow clubfisted clubfoot clubfooted clubhand clubhaul clubhouse clubionid clubland clubman clubmate clubmobile clubmonger clubridden clubroom clubroot clubstart clubster clubweed clubwoman clubwood cluck clue cluff clump clumpish clumproot clumpy clumse clumsily clumsiness clumsy clunch clung clunk clupanodonic clupeid clupeiform clupeine clupeoid cluricaune clusiaceous cluster clusterberry clustered clusterfist clustering clusteringly clustery clutch clutchman cluther clutter clutterer clutterment cluttery cly clyer clyfaker clyfaking clype clypeal clypeastroid clypeate clypeiform clypeolar clypeolate clypeole clypeus clysis clysma clysmian clysmic clyster clysterize cnemapophysis cnemial cnemidium cnemis cneoraceous cnicin cnida cnidarian cnidoblast cnidocell cnidocil cnidocyst cnidophore cnidophorous cnidopod cnidosac cnidosis coabode coabound coabsume coacceptor coacervate coacervation coach coachability coachable coachbuilder coachbuilding coachee coacher coachfellow coachful coaching coachlet coachmaker coachmaking coachman coachmanship coachmaster coachsmith coachsmithing coachway coachwhip coachwise coachwoman coachwork coachwright coachy coact coaction coactive coactively coactivity coactor coadamite coadapt coadaptation coadequate coadjacence coadjacency coadjacent coadjacently coadjudicator coadjust coadjustment coadjutant coadjutator coadjute coadjutement coadjutive coadjutor coadjutorship coadjutress coadjutrix coadjuvancy coadjuvant coadjuvate coadminister coadministration coadministrator coadministratrix coadmiration coadmire coadmit coadnate coadore coadsorbent coadunate coadunation coadunative coadunatively coadunite coadventure coadventurer coadvice coaffirmation coafforest coaged coagency coagent coaggregate coaggregated coaggregation coagitate coagitator coagment coagonize coagriculturist coagula coagulability coagulable coagulant coagulase coagulate coagulation coagulative coagulator coagulatory coagulin coagulometer coagulose coagulum coaid coaita coak coakum coal coalbag coalbagger coalbin coalbox coaldealer coaler coalesce coalescence coalescency coalescent coalfish coalfitter coalhole coalification coalify coalition coalitional coalitioner coalitionist coalize coalizer coalless coalmonger coalmouse coalpit coalrake coalsack coalternate coalternation coalternative coaltitude coaly coalyard coambassador coambulant coamiable coaming coanimate coannex coannihilate coapostate coapparition coappear coappearance coapprehend coapprentice coappriser coapprover coapt coaptate coaptation coaration coarb coarbiter coarbitrator coarctate coarctation coardent coarrange coarrangement coarse coarsely coarsen coarseness coarsish coascend coassert coasserter coassession coassessor coassignee coassist coassistance coassistant coassume coast coastal coastally coaster coastguardman coasting coastland coastman coastside coastwaiter coastward coastwards coastways coastwise coat coated coatee coater coati coatie coatimondie coatimundi coating coatless coatroom coattail coattailed coattend coattest coattestation coattestator coaudience coauditor coaugment coauthor coauthority coauthorship coawareness coax coaxal coaxation coaxer coaxial coaxially coaxing coaxingly coaxy cob cobaea cobalt cobaltammine cobaltic cobalticyanic cobalticyanides cobaltiferous cobaltinitrite cobaltite cobaltocyanic cobaltocyanide cobaltous cobang cobbed cobber cobberer cobbing cobble cobbler cobblerfish cobblerism cobblerless cobblership cobblery cobblestone cobbling cobbly cobbra cobby cobcab cobego cobelief cobeliever cobelligerent cobenignity coberger cobewail cobhead cobia cobiron cobishop coble cobleman cobless cobloaf cobnut cobola coboundless cobourg cobra cobreathe cobridgehead cobriform cobrother cobstone coburg coburgess coburgher coburghership cobweb cobwebbery cobwebbing cobwebby cobwork coca cocaceous cocaine cocainism cocainist cocainization cocainize cocainomania cocainomaniac cocamine cocarboxylase cocash cocashweed cocause cocautioner coccagee coccal coccerin cocci coccid coccidia coccidial coccidian coccidioidal coccidiosis coccidium coccidology cocciferous cocciform coccigenic coccinella coccinellid coccionella cocco coccobacillus coccochromatic coccogone coccogonium coccoid coccolite coccolith coccolithophorid coccosphere coccostean coccosteid coccothraustine coccous coccule cocculiferous cocculus coccus coccydynia coccygalgia coccygeal coccygean coccygectomy coccygerector coccyges coccygeus coccygine coccygodynia coccygomorph coccygomorphic coccygotomy coccyodynia coccyx cocentric cochairman cochal cochief cochineal cochlea cochlear cochleare cochlearifoliate cochleariform cochleate cochleated cochleiform cochleitis cochleous cochlidiid cochliodont cochlospermaceous cochurchwarden cocillana cocircular cocircularity cocitizen cocitizenship cock cockade cockaded cockal cockalorum cockamaroo cockarouse cockateel cockatoo cockatrice cockawee cockbell cockbill cockbird cockboat cockbrain cockchafer cockcrow cockcrower cockcrowing cocked cocker cockerel cockermeg cockernony cocket cockeye cockeyed cockfight cockfighting cockhead cockhorse cockieleekie cockily cockiness cocking cockish cockle cockleboat cocklebur cockled cockler cockleshell cocklet cocklewife cocklight cockling cockloft cockly cockmaster cockmatch cockmate cockneian cockneity cockney cockneybred cockneydom cockneyese cockneyess cockneyfication cockneyfy cockneyish cockneyishly cockneyism cockneyize cockneyland cockneyship cockpit cockroach cockscomb cockscombed cocksfoot cockshead cockshot cockshut cockshy cockshying cockspur cockstone cocksure cocksuredom cocksureism cocksurely cocksureness cocksurety cocktail cockthrowing cockup cockweed cocky coco cocoa cocoach cocobolo coconnection coconqueror coconscious coconsciously coconsciousness coconsecrator coconspirator coconstituent cocontractor coconut cocoon cocoonery cocorico cocoroot cocotte cocovenantor cocowood cocowort cocozelle cocreate cocreator cocreatorship cocreditor cocrucify coctile coction coctoantigen coctoprecipitin cocuisa cocullo cocurator cocurrent cocuswood cocuyo cod coda codamine codbank codder codding coddle coddler code codebtor codeclination codecree codefendant codeine codeless codelight codelinquency codelinquent codenization codeposit coder coderive codescendant codespairer codex codfish codfisher codfishery codger codhead codheaded codiaceous codical codices codicil codicilic codicillary codictatorship codification codifier codify codilla codille codiniac codirectional codirector codiscoverer codisjunct codist codivine codling codman codo codol codomestication codominant codon codpiece codpitchings codshead codworm coe coecal coecum coed coeditor coeditorship coeducate coeducation coeducational coeducationalism coeducationalize coeducationally coeffect coefficacy coefficient coefficiently coeffluent coeffluential coelacanth coelacanthid coelacanthine coelacanthoid coelacanthous coelanaglyphic coelar coelarium coelastraceous coelder coeldership coelect coelection coelector coelectron coelelminth coelelminthic coelenterate coelenteric coelenteron coelestine coelevate coelho coelia coeliac coelialgia coelian coeligenous coelin coeline coeliomyalgia coeliorrhea coeliorrhoea coelioscopy coeliotomy coeloblastic coeloblastula coelodont coelogastrula coelom coeloma coelomate coelomatic coelomatous coelomesoblast coelomic coelomopore coelonavigation coelongated coeloplanula coelosperm coelospermous coelostat coelozoic coemanate coembedded coembody coembrace coeminency coemperor coemploy coemployee coemployment coempt coemption coemptional coemptionator coemptive coemptor coenact coenactor coenaculous coenamor coenamorment coenamourment coenanthium coendear coendure coenenchym coenenchyma coenenchymal coenenchymatous coenenchyme coenesthesia coenesthesis coenflame coengage coengager coenjoy coenobe coenobiar coenobic coenobioid coenobium coenoblast coenoblastic coenocentrum coenocyte coenocytic coenodioecism coenoecial coenoecic coenoecium coenogamete coenomonoecism coenosarc coenosarcal coenosarcous coenosite coenospecies coenospecific coenospecifically coenosteal coenosteum coenotrope coenotype coenotypic coenthrone coenurus coenzyme coequal coequality coequalize coequally coequalness coequate coequated coequation coerce coercement coercer coercibility coercible coercibleness coercibly coercion coercionary coercionist coercitive coercive coercively coerciveness coercivity coeruleolactite coessential coessentiality coessentially coessentialness coestablishment coestate coetaneity coetaneous coetaneously coetaneousness coeternal coeternally coeternity coetus coeval coevality coevally coexchangeable coexclusive coexecutant coexecutor coexecutrix coexert coexertion coexist coexistence coexistency coexistent coexpand coexpanded coexperiencer coexpire coexplosion coextend coextension coextensive coextensively coextensiveness coextent cofactor cofaster cofather cofathership cofeature cofeoffee coferment cofermentation coff coffee coffeebush coffeecake coffeegrower coffeegrowing coffeehouse coffeeleaf coffeepot coffeeroom coffeetime coffeeweed coffeewood coffer cofferdam cofferer cofferfish coffering cofferlike cofferwork coffin coffinless coffinmaker coffinmaking coffle coffret cofighter coforeknown coformulator cofounder cofoundress cofreighter coft cofunction cog cogence cogency cogener cogeneric cogent cogently cogged cogger coggie cogging coggle coggledy cogglety coggly coghle cogitability cogitable cogitabund cogitabundity cogitabundly cogitabundous cogitant cogitantly cogitate cogitatingly cogitation cogitative cogitatively cogitativeness cogitativity cogitator coglorify coglorious cogman cognac cognate cognateness cognatic cognatical cognation cognisable cognisance cognition cognitional cognitive cognitively cognitum cognizability cognizable cognizableness cognizably cognizance cognizant cognize cognizee cognizer cognizor cognomen cognominal cognominate cognomination cognosce cognoscent cognoscibility cognoscible cognoscitive cognoscitively cogon cogonal cogovernment cogovernor cogracious cograil cogrediency cogredient cogroad coguarantor coguardian cogue cogway cogwheel cogwood cohabit cohabitancy cohabitant cohabitation coharmonious coharmoniously coharmonize coheartedness coheir coheiress coheirship cohelper cohelpership cohenite coherald cohere coherence coherency coherent coherently coherer coheretic coheritage coheritor cohesibility cohesible cohesion cohesive cohesively cohesiveness cohibit cohibition cohibitive cohibitor coho cohoba cohobate cohobation cohobator cohol cohort cohortation cohortative cohosh cohune cohusband coidentity coif coifed coiffure coign coigue coil coiled coiler coiling coilsmith coimmense coimplicant coimplicate coimplore coin coinable coinage coincide coincidence coincidency coincident coincidental coincidentally coincidently coincider coinclination coincline coinclude coincorporate coindicant coindicate coindication coindwelling coiner coinfeftment coinfer coinfinite coinfinity coinhabit coinhabitant coinhabitor coinhere coinherence coinherent coinheritance coinheritor coining coinitial coinmaker coinmaking coinmate coinspire coinstantaneity coinstantaneous coinstantaneously coinstantaneousness coinsurance coinsure cointense cointension cointensity cointer cointerest cointersecting cointise coinventor coinvolve coiny coir coislander coistrel coistril coital coition coiture coitus cojudge cojuror cojusticiar coke cokelike cokeman coker cokernut cokery coking coky col cola colaborer colalgia colander colane colarin colate colation colatitude colatorium colature colauxe colback colberter colbertine colcannon colchicine colchyte colcothar cold colder coldfinch coldhearted coldheartedly coldheartedness coldish coldly coldness coldproof coldslaw cole coleader colecannon colectomy colegatee colegislator colemanite colemouse coleochaetaceous coleopter coleopteral coleopteran coleopterist coleopteroid coleopterological coleopterology coleopteron coleopterous coleoptile coleoptilum coleorhiza coleplant coleseed coleslaw colessee colessor coletit coleur colewort coli colibacillosis colibacterin colibri colic colical colichemarde colicky colicolitis colicroot colicweed colicwort colicystitis colicystopyelitis coliform colilysin colima colin colinear colinephritis coling coliplication colipuncture colipyelitis colipyuria colisepsis coliseum colitic colitis colitoxemia coliuria colk coll collaborate collaboration collaborationism collaborationist collaborative collaboratively collaborator collage collagen collagenic collagenous collapse collapsibility collapsible collar collarband collarbird collarbone collard collare collared collaret collarino collarless collarman collatable collate collatee collateral collaterality collaterally collateralness collation collationer collatitious collative collator collatress collaud collaudation colleague colleagueship collect collectability collectable collectanea collectarium collected collectedly collectedness collectibility collectible collection collectional collectioner collective collectively collectiveness collectivism collectivist collectivistic collectivistically collectivity collectivization collectivize collector collectorate collectorship collectress colleen collegatary college colleger collegial collegialism collegiality collegian collegianer collegiate collegiately collegiateness collegiation collegium collembolan collembole collembolic collembolous collenchyma collenchymatic collenchymatous collenchyme collencytal collencyte collery collet colleter colleterial colleterium colletic colletin colletside colley collibert colliculate colliculus collide collidine collie collied collier colliery collieshangie colliform colligate colligation colligative colligible collimate collimation collimator collin collinal colline collinear collinearity collinearly collineate collineation colling collingly collingual collins collinsite colliquate colliquation colliquative colliquativeness collision collisional collisive colloblast collobrierite collocal collocate collocation collocationable collocative collocatory collochemistry collochromate collock collocution collocutor collocutory collodiochloride collodion collodionization collodionize collodiotype collodium collogue colloid colloidal colloidality colloidize colloidochemical collop colloped collophanite collophore colloque colloquia colloquial colloquialism colloquialist colloquiality colloquialize colloquially colloquialness colloquist colloquium colloquize colloquy collothun collotype collotypic collotypy colloxylin colluctation collude colluder collum collumelliaceous collusion collusive collusively collusiveness collutorium collutory colluvial colluvies colly collyba collyrite collyrium collywest collyweston collywobbles colmar colobin colobium coloboma colocentesis colocephalous coloclysis colocola colocolic colocynth colocynthin colodyspepsia coloenteritis cologarithm cololite colombier colombin colometric colometrically colometry colon colonalgia colonate colonel colonelcy colonelship colongitude colonial colonialism colonialist colonialize colonially colonialness colonic colonist colonitis colonizability colonizable colonization colonizationist colonize colonizer colonnade colonnaded colonnette colonopathy colonopexy colonoscope colonoscopy colony colopexia colopexotomy colopexy colophane colophany colophene colophenic colophon colophonate colophonic colophonist colophonite colophonium colophony coloplication coloproctitis coloptosis colopuncture coloquintid coloquintida color colorability colorable colorableness colorably colorado coloradoite colorant colorate coloration colorational colorationally colorative coloratura colorature colorcast colorectitis colorectostomy colored colorer colorfast colorful colorfully colorfulness colorific colorifics colorimeter colorimetric colorimetrical colorimetrically colorimetrics colorimetrist colorimetry colorin coloring colorist coloristic colorization colorize colorless colorlessly colorlessness colormaker colormaking colorman colorrhaphy colors colortype colory coloss colossal colossality colossally colossean colossi colossus colostomy colostral colostration colostric colostrous colostrum colotomy colotyphoid colove colp colpenchyma colpeo colpeurynter colpeurysis colpindach colpitis colpocele colpocystocele colpohyperplasia colpohysterotomy colpoperineoplasty colpoperineorrhaphy colpoplastic colpoplasty colpoptosis colporrhagia colporrhaphy colporrhea colporrhexis colport colportage colporter colporteur colposcope colposcopy colpotomy colpus colt colter colthood coltish coltishly coltishness coltpixie coltpixy coltsfoot coltskin colubrid colubriform colubrine colubroid colugo columbaceous columbarium columbary columbate columbeion columbiad columbic columbier columbiferous columbin columbine columbite columbium columbo columboid columbotantalate columbotitanate columella columellar columellate columelliform column columnal columnar columnarian columnarity columnated columned columner columniation columniferous columniform columning columnist columnization columnwise colunar colure coly colymbiform colymbion colyone colyonic colytic colyum colyumist colza coma comacine comagistracy comagmatic comaker comal comamie comanic comart comate comatose comatosely comatoseness comatosity comatous comatula comatulid comb combaron combat combatable combatant combater combative combatively combativeness combativity combed comber combfish combflower combinable combinableness combinant combinantive combinate combination combinational combinative combinator combinatorial combinatory combine combined combinedly combinedness combinement combiner combing combining comble combless comblessness combmaker combmaking comboloio comboy combretaceous combure comburendo comburent comburgess comburimeter comburimetry comburivorous combust combustibility combustible combustibleness combustibly combustion combustive combustor combwise combwright comby come comeback comedial comedian comediant comedic comedical comedienne comedietta comedist comedo comedown comedy comelily comeliness comeling comely comendite comenic comephorous comer comes comestible comet cometarium cometary comether cometic cometical cometlike cometographer cometographical cometography cometoid cometology cometwise comeuppance comfit comfiture comfort comfortable comfortableness comfortably comforter comfortful comforting comfortingly comfortless comfortlessly comfortlessness comfortress comfortroot comfrey comfy comic comical comicality comically comicalness comicocratic comicocynical comicodidactic comicography comicoprosaic comicotragedy comicotragic comicotragical comicry comiferous coming comingle comino comism comital comitant comitatensian comitative comitatus comitia comitial comitragedy comity comma command commandable commandant commandedness commandeer commander commandership commandery commanding commandingly commandingness commandless commandment commando commandoman commandress commassation commassee commatic commation commatism commeasurable commeasure commeddle commelinaceous commemorable commemorate commemoration commemorational commemorative commemoratively commemorativeness commemorator commemoratory commemorize commence commenceable commencement commencer commend commendable commendableness commendably commendador commendam commendatary commendation commendator commendatory commender commendingly commendment commensal commensalism commensalist commensalistic commensality commensally commensurability commensurable commensurableness commensurably commensurate commensurately commensurateness commensuration comment commentarial commentarialism commentary commentate commentation commentator commentatorial commentatorially commentatorship commenter commerce commerceless commercer commerciable commercial commercialism commercialist commercialistic commerciality commercialization commercialize commercially commercium commerge commie comminate commination comminative comminator comminatory commingle comminglement commingler comminister comminuate comminute comminution comminutor commiserable commiserate commiseratingly commiseration commiserative commiseratively commiserator commissar commissarial commissariat commissary commissaryship commission commissionaire commissional commissionate commissioner commissionership commissionship commissive commissively commissural commissure commissurotomy commit commitment committable committal committee committeeism committeeman committeeship committeewoman committent committer committible committor commix commixt commixtion commixture commodatary commodate commodation commodatum commode commodious commodiously commodiousness commoditable commodity commodore common commonable commonage commonality commonalty commoner commonership commoney commonish commonition commonize commonly commonness commonplace commonplaceism commonplacely commonplaceness commonplacer commons commonsensible commonsensibly commonsensical commonsensically commonty commonweal commonwealth commonwealthism commorancy commorant commorient commorth commot commotion commotional commotive commove communa communal communalism communalist communalistic communality communalization communalize communalizer communally communard commune communer communicability communicable communicableness communicably communicant communicate communicatee communicating communication communicative communicatively communicativeness communicator communicatory communion communionist communique communism communist communistery communistic communistically communital communitarian communitary communitive communitorium community communization communize commutability commutable commutableness commutant commutate commutation commutative commutatively commutator commute commuter commuting commutual commutuality comoid comolecule comortgagee comose comourn comourner comournful comous compact compacted compactedly compactedness compacter compactible compaction compactly compactness compactor compacture compages compaginate compagination companator companion companionability companionable companionableness companionably companionage companionate companionize companionless companionship companionway company comparability comparable comparableness comparably comparascope comparate comparatival comparative comparatively comparativeness comparativist comparator compare comparer comparison comparition comparograph compart compartition compartment compartmental compartmentalization compartmentalize compartmentally compartmentize compass compassable compasser compasses compassing compassion compassionable compassionate compassionately compassionateness compassionless compassive compassivity compassless compaternity compatibility compatible compatibleness compatibly compatriot compatriotic compatriotism compear compearance compearant compeer compel compellable compellably compellation compellative compellent compeller compelling compellingly compend compendency compendent compendia compendiary compendiate compendious compendiously compendiousness compendium compenetrate compenetration compensable compensate compensating compensatingly compensation compensational compensative compensativeness compensator compensatory compense compenser compesce compete competence competency competent competently competentness competition competitioner competitive competitively competitiveness competitor competitorship competitory competitress competitrix compilation compilator compilatory compile compilement compiler compital compitum complacence complacency complacent complacential complacentially complacently complain complainable complainant complainer complainingly complainingness complaint complaintive complaintiveness complaisance complaisant complaisantly complaisantness complanar complanate complanation complect complected complement complemental complementally complementalness complementariness complementarism complementary complementation complementative complementer complementoid complete completedness completely completement completeness completer completion completive completively completory complex complexedness complexification complexify complexion complexionably complexional complexionally complexioned complexionist complexionless complexity complexively complexly complexness complexus compliable compliableness compliably compliance compliancy compliant compliantly complicacy complicant complicate complicated complicatedly complicatedness complication complicative complice complicitous complicity complier compliment complimentable complimental complimentally complimentalness complimentarily complimentariness complimentary complimentation complimentative complimenter complimentingly complin complot complotter compluvium comply compo compoer compole compone componed componency componendo component componental componented compony comport comportment compos compose composed composedly composedness composer composita composite compositely compositeness composition compositional compositionally compositive compositively compositor compositorial compositous composograph compossibility compossible compost composture composure compotation compotationship compotator compotatory compote compotor compound compoundable compoundedness compounder compounding compoundness comprachico comprador comprecation compreg compregnate comprehend comprehender comprehendible comprehendingly comprehense comprehensibility comprehensible comprehensibleness comprehensibly comprehension comprehensive comprehensively comprehensiveness comprehensor compresbyter compresbyterial compresence compresent compress compressed compressedly compressibility compressible compressibleness compressingly compression compressional compressive compressively compressometer compressor compressure comprest compriest comprisable comprisal comprise comprised compromise compromiser compromising compromisingly compromissary compromission compromissorial compromit compromitment comprovincial compter comptroller comptrollership compulsative compulsatively compulsatorily compulsatory compulsed compulsion compulsitor compulsive compulsively compulsiveness compulsorily compulsoriness compulsory compunction compunctionary compunctionless compunctious compunctiously compunctive compurgation compurgator compurgatorial compurgatory compursion computability computable computably computation computational computative computativeness compute computer computist computus comrade comradely comradery comradeship comstockery comurmurer con conacaste conacre conal conalbumin conamed conarial conarium conation conational conationalistic conative conatus conaxial concamerate concamerated concameration concanavalin concaptive concassation concatenary concatenate concatenation concatenator concausal concause concavation concave concavely concaveness concaver concavity conceal concealable concealed concealedly concealedness concealer concealment concede conceded concededly conceder conceit conceited conceitedly conceitedness conceitless conceity conceivability conceivable conceivableness conceivably conceive conceiver concelebrate concelebration concent concenter concentive concentralization concentrate concentrated concentration concentrative concentrativeness concentrator concentric concentrically concentricity concentual concentus concept conceptacle conceptacular conceptaculum conception conceptional conceptionist conceptism conceptive conceptiveness conceptual conceptualism conceptualist conceptualistic conceptuality conceptualization conceptualize conceptually conceptus concern concerned concernedly concernedness concerning concerningly concerningness concernment concert concerted concertedly concertgoer concertina concertinist concertist concertize concertizer concertmaster concertmeister concertment concerto concertstuck concessible concession concessionaire concessional concessionary concessioner concessionist concessive concessively concessiveness concessor concettism concettist conch concha conchal conchate conche conched concher conchiferous conchiform conchinine conchiolin conchitic conchitis conchoid conchoidal conchoidally conchological conchologically conchologist conchologize conchology conchometer conchometry conchotome conchuela conchy conchyliated conchyliferous conchylium concierge concile conciliable conciliabule conciliabulum conciliar conciliate conciliating conciliatingly conciliation conciliationist conciliative conciliator conciliatorily conciliatoriness conciliatory concilium concinnity concinnous concionator concipiency concipient concise concisely conciseness concision conclamant conclamation conclave conclavist concludable conclude concluder concluding concludingly conclusion conclusional conclusionally conclusive conclusively conclusiveness conclusory concoagulate concoagulation concoct concocter concoction concoctive concoctor concolor concolorous concomitance concomitancy concomitant concomitantly conconscious concord concordal concordance concordancer concordant concordantial concordantly concordat concordatory concorder concordial concordist concordity concorporate concourse concreate concremation concrement concresce concrescence concrescible concrescive concrete concretely concreteness concreter concretion concretional concretionary concretism concretive concretively concretize concretor concubinage concubinal concubinarian concubinary concubinate concubine concubinehood concubitancy concubitant concubitous concubitus concupiscence concupiscent concupiscible concupiscibleness concupy concur concurrence concurrency concurrent concurrently concurrentness concurring concurringly concursion concurso concursus concuss concussant concussion concussional concussive concutient concyclic concyclically cond condemn condemnable condemnably condemnate condemnation condemnatory condemned condemner condemning condemningly condensability condensable condensance condensary condensate condensation condensational condensative condensator condense condensed condensedly condensedness condenser condensery condensity condescend condescendence condescendent condescender condescending condescendingly condescendingness condescension condescensive condescensively condescensiveness condiction condictious condiddle condiddlement condign condigness condignity condignly condiment condimental condimentary condisciple condistillation condite condition conditional conditionalism conditionalist conditionality conditionalize conditionally conditionate conditioned conditioner condivision condolatory condole condolement condolence condolent condoler condoling condolingly condominate condominium condonable condonance condonation condonative condone condonement condoner condor conduce conducer conducing conducingly conducive conduciveness conduct conductance conductibility conductible conductility conductimeter conductio conduction conductional conductitious conductive conductively conductivity conductometer conductometric conductor conductorial conductorless conductorship conductory conductress conductus conduit conduplicate conduplicated conduplication condurangin condurango condylar condylarth condylarthrosis condylarthrous condyle condylectomy condylion condyloid condyloma condylomatous condylome condylopod condylopodous condylos condylotomy condylure cone coned coneen coneflower conehead coneighboring coneine conelet conemaker conemaking conenose conepate coner cones conessine confab confabular confabulate confabulation confabulator confabulatory confact confarreate confarreation confated confect confection confectionary confectioner confectionery confederacy confederal confederalist confederate confederater confederatio confederation confederationist confederatism confederative confederatize confederator confelicity conferee conference conferential conferment conferrable conferral conferrer conferruminate conferted confervaceous conferval confervoid confervous confess confessable confessant confessarius confessary confessedly confesser confessing confessingly confession confessional confessionalian confessionalism confessionalist confessionary confessionist confessor confessorship confessory confidant confide confidence confidency confident confidential confidentiality confidentially confidentialness confidentiary confidently confidentness confider confiding confidingly confidingness configural configurate configuration configurational configurationally configurationism configurationist configurative configure confinable confine confineable confined confinedly confinedness confineless confinement confiner confining confinity confirm confirmable confirmand confirmation confirmative confirmatively confirmatorily confirmatory confirmed confirmedly confirmedness confirmee confirmer confirming confirmingly confirmity confirmment confirmor confiscable confiscatable confiscate confiscation confiscator confiscatory confitent confiteor confiture confix conflagrant conflagrate conflagration conflagrative conflagrator conflagratory conflate conflated conflation conflict conflicting conflictingly confliction conflictive conflictory conflow confluence confluent confluently conflux confluxibility confluxible confluxibleness confocal conform conformability conformable conformableness conformably conformal conformance conformant conformate conformation conformator conformer conformist conformity confound confoundable confounded confoundedly confoundedness confounder confounding confoundingly confrater confraternal confraternity confraternization confrere confriar confrication confront confrontal confrontation confronte confronter confrontment confusability confusable confusably confuse confused confusedly confusedness confusingly confusion confusional confusticate confustication confutable confutation confutative confutator confute confuter conga congeable congeal congealability congealable congealableness congealedness congealer congealment congee congelation congelative congelifraction congeliturbate congeliturbation congener congeneracy congeneric congenerical congenerous congenerousness congenetic congenial congeniality congenialize congenially congenialness congenital congenitally congenitalness conger congeree congest congested congestible congestion congestive congiary congius conglobate conglobately conglobation conglobe conglobulate conglomerate conglomeratic conglomeration conglutin conglutinant conglutinate conglutination conglutinative congou congratulable congratulant congratulate congratulation congratulational congratulator congratulatory congredient congreet congregable congreganist congregant congregate congregation congregational congregationalism congregationalize congregationally congregationist congregative congregativeness congregator congress congresser congressional congressionalist congressionally congressionist congressist congressive congressman congresswoman congroid congruence congruency congruent congruential congruently congruism congruist congruistic congruity congruous congruously congruousness conhydrine conic conical conicality conically conicalness coniceine conichalcite conicine conicity conicle conicoid conicopoly conics conidia conidial conidian conidiiferous conidioid conidiophore conidiophorous conidiospore conidium conifer coniferin coniferophyte coniferous conification coniform conima conimene conin conine coniosis coniroster conirostral conject conjective conjecturable conjecturably conjectural conjecturalist conjecturality conjecturally conjecture conjecturer conjobble conjoin conjoined conjoinedly conjoiner conjoint conjointly conjointment conjointness conjubilant conjugable conjugacy conjugal conjugality conjugally conjugant conjugata conjugate conjugated conjugately conjugateness conjugation conjugational conjugationally conjugative conjugator conjugial conjugium conjunct conjunction conjunctional conjunctionally conjunctiva conjunctival conjunctive conjunctively conjunctiveness conjunctivitis conjunctly conjunctur conjunctural conjuncture conjuration conjurator conjure conjurement conjurer conjurership conjuror conjury conk conkanee conker conkers conky conn connach connaraceous connarite connascency connascent connatal connate connately connateness connation connatural connaturality connaturalize connaturally connaturalness connature connaught connect connectable connectant connected connectedly connectedness connectible connection connectional connectival connective connectively connectivity connector connellite conner connex connexion connexionalism connexity connexive connexivum connexus conning conniption connivance connivancy connivant connivantly connive connivent conniver connoissance connoisseur connoisseurship connotation connotative connotatively connote connotive connotively connubial connubiality connubially connubiate connubium connumerate connumeration conoclinium conocuneus conodont conoid conoidal conoidally conoidic conoidical conoidically conominee cononintelligent conopid conoplain conopodium conormal conoscope conourish conphaseolin conplane conquedle conquer conquerable conquerableness conqueress conquering conqueringly conquerment conqueror conquest conquian conquinamine conquinine conquistador conrector conrectorship conred consanguine consanguineal consanguinean consanguineous consanguineously consanguinity conscience conscienceless consciencelessly consciencelessness consciencewise conscient conscientious conscientiously conscientiousness conscionable conscionableness conscionably conscious consciously consciousness conscribe conscript conscription conscriptional conscriptionist conscriptive consecrate consecrated consecratedness consecrater consecration consecrative consecrator consecratory consectary consecute consecution consecutive consecutively consecutiveness consecutives consenescence consenescency consension consensual consensually consensus consent consentable consentaneity consentaneous consentaneously consentaneousness consentant consenter consentful consentfully consentience consentient consentiently consenting consentingly consentingness consentive consentively consentment consequence consequency consequent consequential consequentiality consequentially consequentialness consequently consertal conservable conservacy conservancy conservant conservate conservation conservational conservationist conservatism conservatist conservative conservatively conservativeness conservatize conservatoire conservator conservatorio conservatorium conservatorship conservatory conservatrix conserve conserver consider considerability considerable considerableness considerably considerance considerate considerately considerateness consideration considerative consideratively considerativeness considerator considered considerer considering consideringly consign consignable consignatary consignation consignatory consignee consigneeship consigner consignificant consignificate consignification consignificative consignificator consignify consignment consignor consiliary consilience consilient consimilar consimilarity consimilate consist consistence consistency consistent consistently consistorial consistorian consistory consociate consociation consociational consociationism consociative consocies consol consolable consolableness consolably consolation consolatorily consolatoriness consolatory consolatrix console consolement consoler consolidant consolidate consolidated consolidation consolidationist consolidative consolidator consoling consolingly consolute consomme consonance consonancy consonant consonantal consonantic consonantism consonantize consonantly consonantness consonate consonous consort consortable consorter consortial consortion consortism consortium consortship consound conspecies conspecific conspectus consperse conspersion conspicuity conspicuous conspicuously conspicuousness conspiracy conspirant conspiration conspirative conspirator conspiratorial conspiratorially conspiratory conspiratress conspire conspirer conspiring conspiringly conspue constable constablery constableship constabless constablewick constabular constabulary constancy constant constantan constantly constantness constat constatation constate constatory constellate constellation constellatory consternate consternation constipate constipation constituency constituent constituently constitute constituter constitution constitutional constitutionalism constitutionalist constitutionality constitutionalization constitutionalize constitutionally constitutionary constitutioner constitutionist constitutive constitutively constitutiveness constitutor constrain constrainable constrained constrainedly constrainedness constrainer constraining constrainingly constrainment constraint constrict constricted constriction constrictive constrictor constringe constringency constringent construability construable construct constructer constructible construction constructional constructionally constructionism constructionist constructive constructively constructiveness constructivism constructivist constructor constructorship constructure construe construer constuprate constupration consubsist consubsistency consubstantial consubstantialism consubstantialist consubstantiality consubstantially consubstantiate consubstantiation consubstantiationist consubstantive consuete consuetitude consuetude consuetudinal consuetudinary consul consulage consular consularity consulary consulate consulship consult consultable consultant consultary consultation consultative consultatory consultee consulter consulting consultive consultively consultor consultory consumable consume consumedly consumeless consumer consuming consumingly consumingness consummate consummately consummation consummative consummatively consummativeness consummator consummatory consumpt consumpted consumptible consumption consumptional consumptive consumptively consumptiveness consumptivity consute contabescence contabescent contact contactor contactual contactually contagion contagioned contagionist contagiosity contagious contagiously contagiousness contagium contain containable container containment contakion contaminable contaminant contaminate contamination contaminative contaminator contaminous contangential contango conte contect contection contemn contemner contemnible contemnibly contemning contemningly contemnor contemper contemperate contemperature contemplable contemplamen contemplant contemplate contemplatingly contemplation contemplatist contemplative contemplatively contemplativeness contemplator contemplature contemporanean contemporaneity contemporaneous contemporaneously contemporaneousness contemporarily contemporariness contemporary contemporize contempt contemptful contemptibility contemptible contemptibleness contemptibly contemptuous contemptuously contemptuousness contendent contender contending contendingly contendress content contentable contented contentedly contentedness contentful contention contentional contentious contentiously contentiousness contentless contently contentment contentness contents conter conterminal conterminant contermine conterminous conterminously conterminousness contest contestable contestableness contestably contestant contestation contestee contester contestingly contestless context contextive contextual contextually contextural contexture contextured conticent contignation contiguity contiguous contiguously contiguousness continence continency continent continental continentalism continentalist continentality continentally continently contingence contingency contingent contingential contingentialness contingently contingentness continuable continual continuality continually continualness continuance continuancy continuando continuant continuantly continuate continuately continuateness continuation continuative continuatively continuativeness continuator continue continued continuedly continuedness continuer continuingly continuist continuity continuous continuously continuousness continuum contise contline conto contorniate contorsive contort contorted contortedly contortedness contortion contortional contortionate contortioned contortionist contortionistic contortive contour contourne contra contraband contrabandage contrabandery contrabandism contrabandist contrabandista contrabass contrabassist contrabasso contracapitalist contraception contraceptionist contraceptive contracivil contraclockwise contract contractable contractant contractation contracted contractedly contractedness contractee contracter contractibility contractible contractibleness contractibly contractile contractility contraction contractional contractionist contractive contractively contractiveness contractor contractual contractually contracture contractured contradebt contradict contradictable contradictedness contradicter contradiction contradictional contradictious contradictiously contradictiousness contradictive contradictively contradictiveness contradictor contradictorily contradictoriness contradictory contradiscriminate contradistinct contradistinction contradistinctive contradistinctively contradistinctly contradistinguish contradivide contrafacture contrafagotto contrafissura contraflexure contraflow contrafocal contragredience contragredient contrahent contrail contraindicate contraindication contraindicative contralateral contralto contramarque contranatural contrantiscion contraoctave contraparallelogram contraplex contrapolarization contrapone contraponend contrapose contraposit contraposita contraposition contrapositive contraprogressist contraprop contraproposal contraption contraptious contrapuntal contrapuntalist contrapuntally contrapuntist contrapunto contrarational contraregular contraregularity contraremonstrance contraremonstrant contrarevolutionary contrariant contrariantly contrariety contrarily contrariness contrarious contrariously contrariousness contrariwise contrarotation contrary contrascriptural contrast contrastable contrastably contrastedly contrastimulant contrastimulation contrastimulus contrastingly contrastive contrastively contrastment contrasty contrasuggestible contratabular contrate contratempo contratenor contravalence contravallation contravariant contravene contravener contravention contraversion contravindicate contravindication contrawise contrayerva contrectation contreface contrefort contretemps contributable contribute contribution contributional contributive contributively contributiveness contributor contributorial contributorship contributory contrite contritely contriteness contrition contriturate contrivance contrivancy contrive contrivement contriver control controllability controllable controllableness controllably controller controllership controlless controllingly controlment controversial controversialism controversialist controversialize controversially controversion controversional controversionalism controversionalist controversy controvert controverter controvertible controvertibly controvertist contubernal contubernial contubernium contumacious contumaciously contumaciousness contumacity contumacy contumelious contumeliously contumeliousness contumely contund conturbation contuse contusion contusioned contusive conubium conumerary conumerous conundrum conundrumize conurbation conure conus conusable conusance conusant conusee conusor conutrition conuzee conuzor convalesce convalescence convalescency convalescent convalescently convallamarin convallariaceous convallarin convect convection convectional convective convectively convector convenable convenably convene convenee convener convenership convenience conveniency convenient conveniently convenientness convent conventical conventically conventicle conventicler conventicular convention conventional conventionalism conventionalist conventionality conventionalization conventionalize conventionally conventionary conventioner conventionism conventionist conventionize conventual conventually converge convergement convergence convergency convergent convergescence converging conversable conversableness conversably conversance conversancy conversant conversantly conversation conversationable conversational conversationalist conversationally conversationism conversationist conversationize conversative converse conversely converser conversibility conversible conversion conversional conversionism conversionist conversive convert converted convertend converter convertibility convertible convertibleness convertibly converting convertingness convertise convertism convertite convertive convertor conveth convex convexed convexedly convexedness convexity convexly convexness convey conveyable conveyal conveyance conveyancer conveyancing conveyer convict convictable conviction convictional convictism convictive convictively convictiveness convictment convictor convince convinced convincedly convincedness convincement convincer convincibility convincible convincing convincingly convincingness convival convive convivial convivialist conviviality convivialize convivially convocant convocate convocation convocational convocationally convocationist convocative convocator convoke convoker convolute convoluted convolutely convolution convolutional convolutionary convolutive convolve convolvement convolvulaceous convolvulad convolvuli convolvulic convolvulin convolvulinic convolvulinolic convoy convulsant convulse convulsedly convulsibility convulsible convulsion convulsional convulsionary convulsionism convulsionist convulsive convulsively convulsiveness cony conycatcher conyrine coo cooba coodle cooee cooer coof cooing cooingly cooja cook cookable cookbook cookdom cookee cookeite cooker cookery cookhouse cooking cookish cookishly cookless cookmaid cookout cookroom cookshack cookshop cookstove cooky cool coolant coolen cooler coolerman coolheaded coolheadedly coolheadedness coolhouse coolibah coolie cooling coolingly coolingness coolish coolly coolness coolth coolung coolweed coolwort cooly coom coomb coomy coon cooncan coonily cooniness coonroot coonskin coontail coontie coony coop cooper cooperage coopering coopery cooree coorie cooruptibly cooser coost coot cooter cootfoot coothay cootie cop copa copable copacetic copaene copaiba copaibic copaivic copaiye copal copalche copalcocote copaliferous copalite copalm coparallel coparcenary coparcener coparceny coparent copart copartaker copartner copartnership copartnery coparty copassionate copastor copastorate copatain copatentee copatriot copatron copatroness cope copei copelate copellidine copeman copemate copen copending copenetrate copepod copepodan copepodous coper coperception coperiodic coperta copesman copesmate copestone copetitioner cophasal cophosis copiability copiable copiapite copied copier copilot coping copiopia copiopsia copiosity copious copiously copiousness copis copist copita coplaintiff coplanar coplanarity copleased coplotter coploughing coplowing copolar copolymer copolymerization copolymerize coppaelite copped copper copperas copperbottom copperer copperhead copperheadism coppering copperish copperization copperize copperleaf coppernose coppernosed copperplate copperproof coppersidesman copperskin coppersmith coppersmithing copperware copperwing copperworks coppery copperytailed coppet coppice coppiced coppicing coppin copping copple copplecrown coppled coppy copr copra coprecipitate coprecipitation copremia copremic copresbyter copresence copresent coprincipal coprincipate coprisoner coprodaeum coproduce coproducer coprojector coprolagnia coprolagnist coprolalia coprolaliac coprolite coprolith coprolitic coprology copromisor copromoter coprophagan coprophagia coprophagist coprophagous coprophagy coprophilia coprophiliac coprophilic coprophilism coprophilous coprophyte coproprietor coproprietorship coprose coprostasis coprosterol coprozoic copse copsewood copsewooded copsing copsy copter copula copulable copular copularium copulate copulation copulative copulatively copulatory copunctal copurchaser copus copy copybook copycat copygraph copygraphed copyhold copyholder copyholding copyism copyist copyman copyreader copyright copyrightable copyrighter copywise coque coquecigrue coquelicot coqueluche coquet coquetoon coquetry coquette coquettish coquettishly coquettishness coquicken coquilla coquille coquimbite coquina coquita coquito cor cora corach coracial coraciiform coracine coracle coracler coracoacromial coracobrachial coracobrachialis coracoclavicular coracocostal coracohumeral coracohyoid coracoid coracoidal coracomandibular coracomorph coracomorphic coracopectoral coracoprocoracoid coracoradialis coracoscapular coracovertebral coradical coradicate corah coraise coral coralberry coralbush coraled coralflower coralist corallet corallic corallidomous coralliferous coralliform coralligenous coralligerous corallike corallinaceous coralline corallite coralloid coralloidal corallum coralroot coralwort coram coranto corban corbeau corbeil corbel corbeling corbicula corbiculate corbiculum corbie corbiestep corbovinum corbula corcass corcir corcopali cord cordage cordaitaceous cordaitalean cordaitean cordant cordate cordately cordax corded cordel cordeliere cordelle corder cordewane cordial cordiality cordialize cordially cordialness cordiceps cordicole cordierite cordies cordiform cordigeri cordillera cordilleran cordiner cording cordite corditis cordleaf cordmaker cordoba cordon cordonnet corduroy corduroyed cordwain cordwainer cordwainery cordwood cordy cordyl core corebel coreceiver coreciprocal corectome corectomy corector cored coredeem coredeemer coredemptress coreductase coreflexed coregence coregency coregent coregnancy coregnant coregonid coregonine coregonoid coreid coreign coreigner corejoice coreless coreligionist corella corelysis coremaker coremaking coremium coremorphosis corenounce coreometer coreplastic coreplasty corer coresidence coresidual coresign coresonant coresort corespect corespondency corespondent coretomy coreveler coreveller corevolve corf corge corgi coriaceous corial coriamyrtin coriander coriandrol coriariaceous coriin corindon coring corinne coriparian corium cork corkage corkboard corke corked corker corkiness corking corkish corkite corkmaker corkmaking corkscrew corkscrewy corkwing corkwood corky corm cormel cormidium cormoid cormophyte cormophytic cormorant cormous cormus corn cornaceous cornage cornbell cornberry cornbin cornbinks cornbird cornbole cornbottle cornbrash corncake corncob corncracker corncrib corncrusher corndodger cornea corneagen corneal cornein corneitis cornel cornelian cornemuse corneocalcareous corneosclerotic corneosiliceous corneous corner cornerbind cornered cornerer cornerpiece cornerstone cornerways cornerwise cornet cornetcy cornettino cornettist corneule corneum cornfield cornfloor cornflower corngrower cornhouse cornhusk cornhusker cornhusking cornic cornice cornicle corniculate corniculer corniculum cornific cornification cornified corniform cornigerous cornin corning corniplume cornland cornless cornloft cornmaster cornmonger cornopean cornpipe cornrick cornroot cornstalk cornstarch cornstook cornu cornual cornuate cornuated cornubianite cornucopia cornucopian cornucopiate cornule cornulite cornupete cornute cornuted cornutine cornuto cornwallis cornwallite corny coroa corocleisis corodiary corodiastasis corodiastole corody corol corolla corollaceous corollarial corollarially corollary corollate corollated corolliferous corolliform corollike corolline corollitic corometer corona coronach coronad coronadite coronae coronagraph coronagraphic coronal coronale coronaled coronally coronamen coronary coronate coronated coronation coronatorial coroner coronership coronet coroneted coronetted coronetty coroniform coronillin coronion coronitis coronium coronize coronobasilar coronofacial coronofrontal coronoid coronule coroparelcysis coroplast coroplasta coroplastic coroscopy corotomy corozo corp corpora corporal corporalism corporality corporally corporalship corporas corporate corporately corporateness corporation corporational corporationer corporationism corporative corporator corporature corporeal corporealist corporeality corporealization corporealize corporeally corporealness corporeals corporeity corporeous corporification corporify corporosity corposant corps corpsbruder corpse corpsman corpulence corpulency corpulent corpulently corpulentness corpus corpuscle corpuscular corpuscularian corpuscularity corpusculated corpuscule corpusculous corpusculum corrade corradial corradiate corradiation corral corrasion corrasive correal correality correct correctable correctant corrected correctedness correctible correcting correctingly correction correctional correctionalist correctioner correctitude corrective correctively correctiveness correctly correctness corrector correctorship correctress correctrice corregidor correlatable correlate correlated correlation correlational correlative correlatively correlativeness correlativism correlativity correligionist corrente correption corresol correspond correspondence correspondency correspondent correspondential correspondentially correspondently correspondentship corresponder corresponding correspondingly corresponsion corresponsive corresponsively corridor corridored corrie corrige corrigenda corrigendum corrigent corrigibility corrigible corrigibleness corrigibly corrival corrivality corrivalry corrivalship corrivate corrivation corrobboree corroborant corroborate corroboration corroborative corroboratively corroborator corroboratorily corroboratory corroboree corrode corrodent corroder corrodiary corrodibility corrodible corrodier corroding corrosibility corrosible corrosibleness corrosion corrosional corrosive corrosively corrosiveness corrosivity corrugate corrugated corrugation corrugator corrupt corrupted corruptedly corruptedness corrupter corruptful corruptibility corruptible corruptibleness corrupting corruptingly corruption corruptionist corruptive corruptively corruptly corruptness corruptor corruptress corsac corsage corsaint corsair corse corselet corsepresent corsesque corset corseting corsetless corsetry corsie corsite corta cortege cortex cortez cortical cortically corticate corticated corticating cortication cortices corticiferous corticiform corticifugal corticifugally corticipetal corticipetally corticoafferent corticoefferent corticoline corticopeduncular corticose corticospinal corticosterone corticostriate corticous cortin cortina cortinarious cortinate cortisone cortlandtite coruco coruler corundophilite corundum corupay coruscant coruscate coruscation corver corvette corvetto corviform corvillosum corvina corvine corvoid corybantiasm corybantic corybantish corybulbin corybulbine corycavamine corycavidin corycavidine corycavine corydalin corydaline corydine coryl corylaceous corylin corymb corymbed corymbiate corymbiated corymbiferous corymbiform corymbose corymbous corynebacterial corynine corynocarpaceous coryphaenid coryphaenoid coryphaeus coryphee coryphene coryphodont coryphylly corytuberine coryza cos cosalite cosaque cosavior coscet coscinomancy coscoroba coseasonal coseat cosec cosecant cosech cosectarian cosectional cosegment coseism coseismal coseismic cosenator cosentiency cosentient coservant cosession coset cosettler cosh cosharer cosheath cosher cosherer coshering coshery cosignatory cosigner cosignitary cosily cosinage cosine cosiness cosingular cosinusoid cosmecology cosmesis cosmetic cosmetical cosmetically cosmetician cosmetiste cosmetological cosmetologist cosmetology cosmic cosmical cosmicality cosmically cosmism cosmist cosmocracy cosmocrat cosmocratic cosmogenesis cosmogenetic cosmogenic cosmogeny cosmogonal cosmogoner cosmogonic cosmogonical cosmogonist cosmogonize cosmogony cosmographer cosmographic cosmographical cosmographically cosmographist cosmography cosmolabe cosmolatry cosmologic cosmological cosmologically cosmologist cosmology cosmometry cosmopathic cosmoplastic cosmopoietic cosmopolicy cosmopolis cosmopolitan cosmopolitanism cosmopolitanization cosmopolitanize cosmopolitanly cosmopolite cosmopolitic cosmopolitical cosmopolitics cosmopolitism cosmorama cosmoramic cosmorganic cosmos cosmoscope cosmosophy cosmosphere cosmotellurian cosmotheism cosmotheist cosmotheistic cosmothetic cosmotron cosmozoan cosmozoic cosmozoism cosonant cosounding cosovereign cosovereignty cospecies cospecific cosphered cosplendor cosplendour coss cossas cosse cosset cossette cossid cossnent cossyrite cost costa costal costalgia costally costander costar costard costate costated costean costeaning costectomy costellate coster costerdom costermonger costicartilage costicartilaginous costicervical costiferous costiform costing costipulator costispinal costive costively costiveness costless costlessness costliness costly costmary costoabdominal costoapical costocentral costochondral costoclavicular costocolic costocoracoid costodiaphragmatic costogenic costoinferior costophrenic costopleural costopneumopexy costopulmonary costoscapular costosternal costosuperior costothoracic costotome costotomy costotrachelian costotransversal costotransverse costovertebral costoxiphoid costraight costrel costula costulation costume costumer costumery costumic costumier costumiere costuming costumist costusroot cosubject cosubordinate cosuffer cosufferer cosuggestion cosuitor cosurety cosustain coswearer cosy cosymmedian cot cotangent cotangential cotarius cotarnine cotch cote coteful coteline coteller cotemporane cotemporanean cotemporaneous cotemporaneously cotemporary cotenancy cotenant cotenure coterell coterie coterminous coth cothamore cothe cotheorist cothish cothon cothurn cothurnal cothurnate cothurned cothurnian cothurnus cothy cotidal cotillage cotillion cotingid cotingoid cotise cotitular cotland cotman coto cotoin cotonier cotorment cotoro cotorture cotquean cotraitor cotransfuse cotranslator cotranspire cotransubstantiate cotrine cotripper cotrustee cotset cotsetla cotsetle cotta cottabus cottage cottaged cottager cottagers cottagey cotte cotted cotter cotterel cotterite cotterway cottid cottier cottierism cottiform cottoid cotton cottonade cottonbush cottonee cottoneer cottoner cottonization cottonize cottonless cottonmouth cottonocracy cottonseed cottontail cottontop cottonweed cottonwood cottony cotty cotuit cotula cotunnite cotutor cotwin cotwinned cotwist cotyla cotylar cotyledon cotyledonal cotyledonar cotyledonary cotyledonous cotyliform cotyligerous cotyliscus cotyloid cotylophorous cotylopubic cotylosacral cotylosaur cotylosaurian cotype couac coucal couch couchancy couchant couched couchee coucher couching couchmaker couchmaking couchmate couchy coude coudee coue cougar cough cougher coughroot coughweed coughwort cougnar coul could couldron coulee coulisse coulomb coulometer coulterneb coulure couma coumalic coumalin coumara coumaran coumarate coumaric coumarilic coumarin coumarinic coumarone coumarou council councilist councilman councilmanic councilor councilorship councilwoman counderstand counite couniversal counsel counselable counselee counselful counselor counselorship count countable countableness countably countdom countenance countenancer counter counterabut counteraccusation counteracquittance counteract counteractant counteracter counteracting counteractingly counteraction counteractive counteractively counteractivity counteractor counteraddress counteradvance counteradvantage counteradvice counteradvise counteraffirm counteraffirmation counteragency counteragent counteragitate counteragitation counteralliance counterambush counterannouncement counteranswer counterappeal counterappellant counterapproach counterapse counterarch counterargue counterargument counterartillery counterassertion counterassociation counterassurance counterattack counterattestation counterattired counterattraction counterattractive counterattractively counteraverment counteravouch counteravouchment counterbalance counterbarrage counterbase counterbattery counterbeating counterbend counterbewitch counterbid counterblast counterblow counterbond counterborder counterbore counterboycott counterbrace counterbranch counterbrand counterbreastwork counterbuff counterbuilding countercampaign countercarte countercause counterchange counterchanged countercharge countercharm countercheck countercheer counterclaim counterclaimant counterclockwise countercolored countercommand countercompetition countercomplaint countercompony countercondemnation counterconquest counterconversion countercouchant countercoupe countercourant countercraft countercriticism countercross countercry countercurrent countercurrently countercurrentwise counterdance counterdash counterdecision counterdeclaration counterdecree counterdefender counterdemand counterdemonstration counterdeputation counterdesire counterdevelopment counterdifficulty counterdigged counterdike counterdiscipline counterdisengage counterdisengagement counterdistinction counterdistinguish counterdoctrine counterdogmatism counterdraft counterdrain counterdrive counterearth counterefficiency countereffort counterembattled counterembowed counterenamel counterend counterenergy counterengagement counterengine counterenthusiasm counterentry counterequivalent counterermine counterespionage counterestablishment counterevidence counterexaggeration counterexcitement counterexcommunication counterexercise counterexplanation counterexposition counterexpostulation counterextend counterextension counterfact counterfallacy counterfaller counterfeit counterfeiter counterfeitly counterfeitment counterfeitness counterferment counterfessed counterfire counterfix counterflange counterflashing counterflight counterflory counterflow counterflux counterfoil counterforce counterformula counterfort counterfugue countergabble countergabion countergambit countergarrison countergauge countergauger countergift countergirded counterglow counterguard counterhaft counterhammering counterhypothesis counteridea counterideal counterimagination counterimitate counterimitation counterimpulse counterindentation counterindented counterindicate counterindication counterinfluence counterinsult counterintelligence counterinterest counterinterpretation counterintrigue counterinvective counterirritant counterirritate counterirritation counterjudging counterjumper counterlath counterlathing counterlatration counterlaw counterleague counterlegislation counterlife counterlocking counterlode counterlove counterly countermachination counterman countermand countermandable countermaneuver countermanifesto countermarch countermark countermarriage countermeasure countermeet countermessage countermigration countermine countermission countermotion countermount countermove countermovement countermure countermutiny counternaiant counternarrative counternatural counternecromancy counternoise counternotice counterobjection counterobligation counteroffensive counteroffer counteropening counteropponent counteropposite counterorator counterorder counterorganization counterpaled counterpaly counterpane counterpaned counterparadox counterparallel counterparole counterparry counterpart counterpassant counterpassion counterpenalty counterpendent counterpetition counterpicture counterpillar counterplan counterplay counterplayer counterplea counterplead counterpleading counterplease counterplot counterpoint counterpointe counterpointed counterpoise counterpoison counterpole counterponderate counterpose counterposition counterposting counterpotence counterpotency counterpotent counterpractice counterpray counterpreach counterpreparation counterpressure counterprick counterprinciple counterprocess counterproject counterpronunciamento counterproof counterpropaganda counterpropagandize counterprophet counterproposal counterproposition counterprotection counterprotest counterprove counterpull counterpunch counterpuncture counterpush counterquartered counterquarterly counterquery counterquestion counterquip counterradiation counterraid counterraising counterrampant counterrate counterreaction counterreason counterreckoning counterrecoil counterreconnaissance counterrefer counterreflected counterreform counterreformation counterreligion counterremonstrant counterreply counterreprisal counterresolution counterrestoration counterretreat counterrevolution counterrevolutionary counterrevolutionist counterrevolutionize counterriposte counterroll counterround counterruin countersale countersalient counterscale counterscalloped counterscarp counterscoff countersconce counterscrutiny countersea counterseal countersecure countersecurity counterselection countersense counterservice countershade countershaft countershafting countershear countershine countershout counterside countersiege countersign countersignal countersignature countersink countersleight counterslope countersmile countersnarl counterspying counterstain counterstamp counterstand counterstatant counterstatement counterstatute counterstep counterstimulate counterstimulation counterstimulus counterstock counterstratagem counterstream counterstrike counterstroke counterstruggle countersubject countersuggestion countersuit countersun countersunk countersurprise counterswing countersworn countersympathy countersynod countertack countertail countertally countertaste countertechnicality countertendency countertenor counterterm counterterror countertheme countertheory counterthought counterthreat counterthrust counterthwarting countertierce countertime countertouch countertraction countertrades countertransference countertranslation countertraverse countertreason countertree countertrench countertrespass countertrippant countertripping countertruth countertug counterturn counterturned countertype countervail countervair countervairy countervallation countervaunt countervene countervengeance countervenom countervibration counterview countervindication countervolition countervolley countervote counterwager counterwall counterwarmth counterwave counterweigh counterweight counterweighted counterwheel counterwill counterwilling counterwind counterwitness counterword counterwork counterworker counterwrite countess countfish counting countinghouse countless countor countrified countrifiedness country countryfolk countryman countrypeople countryseat countryside countryward countrywoman countship county coup coupage coupe couped coupee coupelet couper couple coupled couplement coupler coupleress couplet coupleteer coupling coupon couponed couponless coupstick coupure courage courageous courageously courageousness courager courant courante courap couratari courb courbache courbaril courbash courge courida courier couril courlan course coursed courser coursing court courtbred courtcraft courteous courteously courteousness courtepy courter courtesan courtesanry courtesanship courtesy courtezanry courtezanship courthouse courtier courtierism courtierly courtiership courtin courtless courtlet courtlike courtliness courtling courtly courtman courtroom courtship courtyard courtzilite couscous couscousou couseranite cousin cousinage cousiness cousinhood cousinly cousinry cousinship cousiny coussinet coustumier coutel coutelle couter couth couthie couthily couthiness couthless coutil coutumier couvade couxia covado covalence covalent covariable covariance covariant covariation covassal cove coved covelline covellite covenant covenantal covenanted covenantee covenanter covenanting covenantor covent coventrate coventrize cover coverage coveralls coverchief covercle covered coverer covering coverless coverlet coverlid coversed coverside coversine coverslut covert covertical covertly covertness coverture covet covetable coveter coveting covetingly covetiveness covetous covetously covetousness covey covibrate covibration covid covillager covin coving covinous covinously covisit covisitor covite covolume covotary cow cowal coward cowardice cowardliness cowardly cowardness cowardy cowbane cowbell cowberry cowbind cowbird cowboy cowcatcher cowdie coween cower cowfish cowgate cowgram cowhage cowheart cowhearted cowheel cowherb cowherd cowhide cowhiding cowhorn cowish cowitch cowkeeper cowl cowle cowled cowleech cowleeching cowlick cowlicks cowlike cowling cowlstaff cowman cowpath cowpea cowpen cowperitis cowpock cowpox cowpuncher cowquake cowrie cowroid cowshed cowskin cowslip cowslipped cowsucker cowtail cowthwort cowtongue cowweed cowwheat cowy cowyard cox coxa coxal coxalgia coxalgic coxankylometer coxarthritis coxarthrocace coxarthropathy coxbones coxcomb coxcombess coxcombhood coxcombic coxcombical coxcombicality coxcombically coxcombity coxcombry coxcomby coxcomical coxcomically coxite coxitis coxocerite coxoceritic coxodynia coxofemoral coxopodite coxswain coxy coy coyan coydog coyish coyishness coyly coyness coynye coyo coyol coyote coyotillo coyoting coypu coyure coz coze cozen cozenage cozener cozening cozeningly cozier cozily coziness cozy crab crabbed crabbedly crabbedness crabber crabbery crabbing crabby crabcatcher crabeater craber crabhole crablet crablike crabman crabmill crabsidle crabstick crabweed crabwise crabwood crack crackable crackajack crackbrain crackbrained crackbrainedness crackdown cracked crackedness cracker crackerberry crackerjack crackers crackhemp crackiness cracking crackjaw crackle crackled crackless crackleware crackling crackly crackmans cracknel crackpot crackskull cracksman cracky cracovienne craddy cradge cradle cradleboard cradlechild cradlefellow cradleland cradlelike cradlemaker cradlemaking cradleman cradlemate cradler cradleside cradlesong cradletime cradling craft craftily craftiness craftless craftsman craftsmanship craftsmaster craftswoman craftwork craftworker crafty crag craggan cragged craggedness craggily cragginess craggy craglike cragsman cragwork craichy craigmontite crain craisey craizey crajuru crake crakefeet crakow cram cramasie crambambulee crambambuli crambe cramberry crambid cramble crambly crambo crammer cramp cramped crampedness cramper crampet crampfish cramping crampingly crampon cramponnee crampy cran cranage cranberry crance crandall crandallite crane cranelike craneman craner cranesman craneway craney crania craniacromial craniad cranial cranially cranian craniate cranic craniectomy craniocele craniocerebral cranioclasis cranioclasm cranioclast cranioclasty craniodidymus craniofacial craniognomic craniognomy craniognosy craniograph craniographer craniography craniological craniologically craniologist craniology craniomalacia craniomaxillary craniometer craniometric craniometrical craniometrically craniometrist craniometry craniopagus craniopathic craniopathy craniopharyngeal craniophore cranioplasty craniopuncture craniorhachischisis craniosacral cranioschisis cranioscopical cranioscopist cranioscopy craniospinal craniostenosis craniostosis craniotabes craniotome craniotomy craniotopography craniotympanic craniovertebral cranium crank crankbird crankcase cranked cranker crankery crankily crankiness crankle crankless crankly crankman crankous crankpin crankshaft crankum cranky crannage crannied crannock crannog crannoger cranny cranreuch crantara crants crap crapaud crapaudine crape crapefish crapehanger crapelike crappie crappin crapple crappo craps crapshooter crapulate crapulence crapulent crapulous crapulously crapulousness crapy craquelure crare crash crasher crasis craspedal craspedodromous craspedon craspedotal craspedote crass crassamentum crassier crassilingual crassitude crassly crassness crassulaceous cratch cratchens cratches crate crateful cratemaker cratemaking crateman crater crateral cratered crateriform crateris craterkin craterless craterlet craterlike craterous craticular cratometer cratometric cratometry craunch craunching craunchingly cravat crave craven cravenette cravenhearted cravenly cravenness craver craving cravingly cravingness cravo craw crawberry crawdad crawfish crawfoot crawful crawl crawler crawlerize crawley crawleyroot crawling crawlingly crawlsome crawly crawm crawtae crayer crayfish crayon crayonist crayonstone craze crazed crazedly crazedness crazily craziness crazingmill crazy crazycat crazyweed crea creagh creaght creak creaker creakily creakiness creakingly creaky cream creambush creamcake creamcup creamer creamery creameryman creamfruit creamily creaminess creamless creamlike creammaker creammaking creamometer creamsacs creamware creamy creance creancer creant crease creaseless creaser creashaks creasing creasy creat creatable create createdness creatic creatine creatinephosphoric creatinine creatininemia creatinuria creation creational creationary creationism creationist creationistic creative creatively creativeness creativity creatophagous creator creatorhood creatorrhea creatorship creatotoxism creatress creatrix creatural creature creaturehood creatureless creatureliness creatureling creaturely creatureship creaturize crebricostate crebrisulcate crebrity crebrous creche creddock credence credencive credenciveness credenda credensive credensiveness credent credential credently credenza credibility credible credibleness credibly credit creditability creditable creditableness creditably creditive creditless creditor creditorship creditress creditrix crednerite credulity credulous credulously credulousness cree creed creedal creedalism creedalist creeded creedist creedite creedless creedlessness creedmore creedsman creek creeker creekfish creekside creekstuff creeky creel creeler creem creen creep creepage creeper creepered creeperless creephole creepie creepiness creeping creepingly creepmouse creepmousy creepy creese creesh creeshie creeshy creirgist cremaster cremasterial cremasteric cremate cremation cremationism cremationist cremator crematorial crematorium crematory crembalum cremnophobia cremocarp cremometer cremone cremor cremorne cremule crena crenate crenated crenately crenation crenature crenel crenelate crenelated crenelation crenele creneled crenelet crenellate crenellation crenic crenitic crenology crenotherapy crenula crenulate crenulated crenulation creodont creole creoleize creolian creolism creolization creolize creophagia creophagism creophagist creophagous creophagy creosol creosote creosoter creosotic crepance crepe crepehanger crepine crepiness crepitaculum crepitant crepitate crepitation crepitous crepitus crepon crept crepuscle crepuscular crepuscule crepusculine crepusculum crepy cresamine crescendo crescent crescentade crescentader crescentic crescentiform crescentlike crescentoid crescentwise crescive crescograph crescographic cresegol cresol cresolin cresorcinol cresotate cresotic cresotinic cresoxide cresoxy cresphontes cress cressed cresselle cresset cresson cressweed cresswort cressy crest crested crestfallen crestfallenly crestfallenness cresting crestless crestline crestmoreite cresyl cresylate cresylene cresylic cresylite creta cretaceous cretaceously cretefaction cretic cretification cretify cretin cretinic cretinism cretinization cretinize cretinoid cretinous cretion cretionary cretonne crevalle crevasse crevice creviced crew crewel crewelist crewellery crewelwork crewer crewless crewman crib cribbage cribber cribbing cribble cribellum cribo cribral cribrate cribrately cribration cribriform cribrose cribwork cric cricetine crick cricket cricketer cricketing crickety crickey crickle cricoarytenoid cricoid cricopharyngeal cricothyreoid cricothyreotomy cricothyroid cricothyroidean cricotomy cricotracheotomy cried crier criey crig crile crime crimeful crimeless crimelessness crimeproof criminal criminaldom criminalese criminalism criminalist criminalistic criminalistician criminalistics criminality criminally criminalness criminaloid criminate crimination criminative criminator criminatory crimine criminogenesis criminogenic criminologic criminological criminologist criminology criminosis criminous criminously criminousness crimogenic crimp crimpage crimper crimping crimple crimpness crimpy crimson crimsonly crimsonness crimsony crin crinal crinanite crinated crinatory crine crined crinet cringe cringeling cringer cringing cringingly cringingness cringle crinicultural criniculture criniferous crinigerous criniparous crinite crinitory crinivorous crink crinkle crinkleroot crinkly crinoid crinoidal crinoidean crinoline crinose crinosity crinula criobolium criocephalus crioceratite crioceratitic criophore criosphinx cripes crippingly cripple crippledom crippleness crippler crippling cripply crises crisic crisis crisp crispate crispated crispation crispature crisped crisper crispily crispine crispiness crisping crisply crispness crispy criss crissal crisscross crissum crista cristate cristiform cristobalite critch criteria criteriology criterion criterional criterium crith crithmene crithomancy critic critical criticality critically criticalness criticaster criticasterism criticastry criticisable criticism criticist criticizable criticize criticizer criticizingly critickin criticship criticule critique critling crizzle cro croak croaker croakily croakiness croaky croc crocard croceic crocein croceine croceous crocetin croche crochet crocheter crocheting croci crocidolite crocin crock crocker crockery crockeryware crocket crocketed crocky crocodile crocodilian crocodiline crocodilite crocodiloid crocoisite crocoite croconate croconic crocus crocused croft crofter crofterization crofterize crofting croftland croisette croissante cromaltite crome cromfordite cromlech cromorna cromorne crone croneberry cronet cronish cronk cronkness cronstedtite crony crood croodle crook crookback crookbacked crookbill crookbilled crooked crookedly crookedness crooken crookesite crookfingered crookheaded crookkneed crookle crooklegged crookneck crooknecked crooknosed crookshouldered crooksided crooksterned crooktoothed crool croon crooner crooning crooningly crop crophead cropland cropman croppa cropper croppie cropplecrown croppy cropshin cropsick cropsickness cropweed croquet croquette crore crosa crosier crosiered crosnes cross crossability crossable crossarm crossband crossbar crossbeak crossbeam crossbelt crossbill crossbolt crossbolted crossbones crossbow crossbowman crossbred crossbreed crosscurrent crosscurrented crosscut crosscutter crosscutting crosse crossed crosser crossette crossfall crossfish crossflow crossflower crossfoot crosshackle crosshand crosshatch crosshaul crosshauling crosshead crossing crossite crossjack crosslegs crosslet crossleted crosslight crosslighted crossline crossly crossness crossopodia crossopterygian crossosomataceous crossover crosspatch crosspath crosspiece crosspoint crossrail crossroad crossroads crossrow crossruff crosstail crosstie crosstied crosstoes crosstrack crosstree crosswalk crossway crossways crossweb crossweed crosswise crossword crosswort crostarie crotal crotalic crotaliform crotaline crotalism crotalo crotaloid crotalum crotaphic crotaphion crotaphite crotaphitic crotch crotched crotchet crotcheteer crotchetiness crotchety crotchy crotin crotonaldehyde crotonate crotonic crotonization crotonyl crotonylene crottels crottle crotyl crouch crouchant crouched croucher crouching crouchingly crounotherapy croup croupade croupal croupe crouperbush croupier croupily croupiness croupous croupy crouse crousely crout croute crouton crow crowbait crowbar crowberry crowbill crowd crowded crowdedly crowdedness crowder crowdweed crowdy crower crowflower crowfoot crowfooted crowhop crowing crowingly crowkeeper crowl crown crownbeard crowned crowner crownless crownlet crownling crownmaker crownwork crownwort crowshay crowstep crowstepped crowstick crowstone crowtoe croy croyden croydon croze crozer crozzle crozzly crubeen cruce cruces crucethouse cruche crucial cruciality crucially crucian cruciate cruciately cruciation crucible crucifer cruciferous crucificial crucified crucifier crucifix crucifixion cruciform cruciformity cruciformly crucify crucigerous crucilly crucily cruck crude crudely crudeness crudity crudwort cruel cruelhearted cruelize cruelly cruelness cruels cruelty cruent cruentation cruet cruety cruise cruiser cruisken cruive cruller crum crumb crumbable crumbcloth crumber crumble crumblement crumblet crumbliness crumblingness crumblings crumbly crumby crumen crumenal crumlet crummie crummier crummiest crummock crummy crump crumper crumpet crumple crumpled crumpler crumpling crumply crumpy crunch crunchable crunchiness crunching crunchingly crunchingness crunchweed crunchy crunk crunkle crunodal crunode crunt cruor crupper crural crureus crurogenital cruroinguinal crurotarsal crus crusade crusader crusado cruse crush crushability crushable crushed crusher crushing crushingly crusie crusily crust crusta crustaceal crustacean crustaceological crustaceologist crustaceology crustaceous crustade crustal crustalogical crustalogist crustalogy crustate crustated crustation crusted crustedly cruster crustific crustification crustily crustiness crustless crustose crustosis crusty crutch crutched crutcher crutching crutchlike cruth crutter crux cruzeiro cry cryable cryaesthesia cryalgesia cryanesthesia crybaby cryesthesia crying cryingly crymodynia crymotherapy cryoconite cryogen cryogenic cryogenics cryogeny cryohydrate cryohydric cryolite cryometer cryophile cryophilic cryophoric cryophorus cryophyllite cryophyte cryoplankton cryoscope cryoscopic cryoscopy cryosel cryostase cryostat crypt crypta cryptal cryptamnesia cryptamnesic cryptanalysis cryptanalyst cryptarch cryptarchy crypted cryptesthesia cryptesthetic cryptic cryptical cryptically cryptoagnostic cryptobatholithic cryptobranch cryptobranchiate cryptocarp cryptocarpic cryptocarpous cryptocephalous cryptocerous cryptoclastic cryptococci cryptococcic cryptococcus cryptocommercial cryptocrystalline cryptocrystallization cryptodeist cryptodiran cryptodire cryptodirous cryptodouble cryptodynamic cryptogam cryptogamian cryptogamic cryptogamical cryptogamist cryptogamous cryptogamy cryptogenetic cryptogenic cryptogenous cryptoglioma cryptogram cryptogrammatic cryptogrammatical cryptogrammatist cryptogrammic cryptograph cryptographal cryptographer cryptographic cryptographical cryptographically cryptographist cryptography cryptoheresy cryptoheretic cryptoinflationist cryptolite cryptologist cryptology cryptolunatic cryptomere cryptomerous cryptomnesia cryptomnesic cryptomonad cryptonema cryptoneurous cryptonym cryptonymous cryptopapist cryptoperthite cryptophthalmos cryptophyte cryptopine cryptoporticus cryptoproselyte cryptoproselytism cryptopyic cryptopyrrole cryptorchid cryptorchidism cryptorchis cryptorrhesis cryptorrhetic cryptoscope cryptoscopy cryptosplenetic cryptostoma cryptostomate cryptostome cryptous cryptovalence cryptovalency cryptozonate cryptozygosity cryptozygous crystal crystallic crystalliferous crystalliform crystalligerous crystallin crystalline crystallinity crystallite crystallitic crystallitis crystallizability crystallizable crystallization crystallize crystallized crystallizer crystalloblastic crystallochemical crystallochemistry crystallogenesis crystallogenetic crystallogenic crystallogenical crystallogeny crystallogram crystallographer crystallographic crystallographical crystallographically crystallography crystalloid crystalloidal crystallology crystalloluminescence crystallomagnetic crystallomancy crystallometric crystallometry crystallophyllian crystallose crystallurgy crystalwort crystic crystograph crystoleum crystosphene csardas ctene ctenidial ctenidium cteniform ctenocyst ctenodactyl ctenodont ctenoid ctenoidean ctenoidian ctenolium ctenophoral ctenophoran ctenophore ctenophoric ctenophorous ctenostomatous ctenostome ctetology cuadra cuapinole cuarenta cuarta cuarteron cuartilla cuartillo cub cubage cubangle cubanite cubatory cubature cubbing cubbish cubbishly cubbishness cubby cubbyhole cubbyhouse cubbyyew cubdom cube cubeb cubelet cuber cubhood cubi cubic cubica cubical cubically cubicalness cubicity cubicle cubicly cubicone cubicontravariant cubicovariant cubicular cubiculum cubiform cubism cubist cubit cubital cubitale cubited cubitiere cubito cubitocarpal cubitocutaneous cubitodigital cubitometacarpal cubitopalmar cubitoplantar cubitoradial cubitus cubmaster cubocalcaneal cuboctahedron cubocube cubocuneiform cubododecahedral cuboid cuboidal cuboides cubomancy cubomedusan cubometatarsal cubonavicular cuck cuckhold cuckold cuckoldom cuckoldry cuckoldy cuckoo cuckooflower cuckoomaid cuckoopint cuckoopintle cuckstool cucoline cuculiform cuculine cuculla cucullaris cucullate cucullately cuculliform cucullus cuculoid cucumber cucumiform cucurbit cucurbitaceous cucurbite cucurbitine cud cudava cudbear cudden cuddle cuddleable cuddlesome cuddly cuddy cuddyhole cudgel cudgeler cudgerie cudweed cue cueball cueca cueist cueman cuemanship cuerda cuesta cuff cuffer cuffin cuffy cuffyism cuggermugger cuichunchulli cuinage cuir cuirass cuirassed cuirassier cuisinary cuisine cuissard cuissart cuisse cuissen cuisten cuittikin cuke culbut culebra culet culeus culgee culicid culicidal culicide culiciform culicifugal culicifuge culicine culilawan culinarily culinary cull culla cullage culler cullet culling cullion cullis cully culm culmen culmicolous culmiferous culmigenous culminal culminant culminate culmination culmy culotte culottes culottic culottism culpa culpability culpable culpableness culpably culpatory culpose culprit cult cultch cultellation cultellus culteranismo cultic cultigen cultirostral cultish cultism cultismo cultist cultivability cultivable cultivably cultivar cultivatability cultivatable cultivate cultivated cultivation cultivator cultrate cultrated cultriform cultrirostral cultual culturable cultural culturally culture cultured culturine culturist culturization culturize culturological culturologically culturologist culturology cultus culver culverfoot culverhouse culverin culverineer culverkey culvert culvertage culverwort cum cumacean cumaceous cumal cumaldehyde cumaphyte cumaphytic cumaphytism cumay cumbent cumber cumberer cumberlandite cumberless cumberment cumbersome cumbersomely cumbersomeness cumberworld cumbha cumbly cumbraite cumbrance cumbre cumbrous cumbrously cumbrousness cumbu cumene cumengite cumenyl cumflutter cumhal cumic cumidin cumidine cumin cuminal cuminic cuminoin cuminol cuminole cuminseed cuminyl cummer cummerbund cummin cummingtonite cumol cump cumshaw cumulant cumular cumulate cumulately cumulation cumulatist cumulative cumulatively cumulativeness cumuli cumuliform cumulite cumulophyric cumulose cumulous cumulus cumyl cunabular cunctation cunctatious cunctative cunctator cunctatorship cunctatury cunctipotent cundeamor cuneal cuneate cuneately cuneatic cuneator cuneiform cuneiformist cuneocuboid cuneonavicular cuneoscaphoid cunette cuneus cungeboi cunicular cuniculus cunila cunjah cunjer cunjevoi cunner cunnilinctus cunnilingus cunning cunningly cunningness cunoniaceous cunye cuorin cup cupay cupbearer cupboard cupcake cupel cupeler cupellation cupflower cupful cuphead cupholder cupidinous cupidity cupidon cupidone cupless cupmaker cupmaking cupman cupmate cupola cupolaman cupolar cupolated cupped cupper cupping cuppy cuprammonia cuprammonium cupreine cuprene cupreous cupressineous cupric cupride cupriferous cuprite cuproammonium cuprobismutite cuprocyanide cuprodescloizite cuproid cuproiodargyrite cupromanganese cupronickel cuproplumbite cuproscheelite cuprose cuprosilicon cuprotungstite cuprous cuprum cupseed cupstone cupula cupulate cupule cupuliferous cupuliform cur curability curable curableness curably curacao curacy curare curarine curarization curarize curassow curatage curate curatel curateship curatess curatial curatic curation curative curatively curativeness curatize curatolatry curator curatorial curatorium curatorship curatory curatrix curb curbable curber curbing curbless curblike curbstone curbstoner curby curcas curch curcuddoch curculionid curculionist curcumin curd curdiness curdle curdler curdly curdwort curdy cure cureless curelessly curemaster curer curettage curette curettement curfew curial curialism curialist curialistic curiality curiate curiboca curie curiescopy curietherapy curin curine curing curio curiologic curiologically curiologics curiology curiomaniac curiosa curiosity curioso curious curiously curiousness curite curium curl curled curledly curledness curler curlew curlewberry curlicue curliewurly curlike curlily curliness curling curlingly curlpaper curly curlycue curlyhead curlylocks curmudgeon curmudgeonery curmudgeonish curmudgeonly curmurring curn curney curnock curple curr currach currack curragh currant curratow currawang currency current currently currentness currentwise curricle curricula curricular curricularization curricularize curriculum curried currier curriery currish currishly currishness curry currycomb curryfavel cursal curse cursed cursedly cursedness curser curship cursitor cursive cursively cursiveness cursor cursorary cursorial cursorily cursoriness cursorious cursory curst curstful curstfully curstly curstness cursus curt curtail curtailed curtailedly curtailer curtailment curtain curtaining curtainless curtainwise curtal curtate curtation curtesy curtilage curtly curtness curtsy curua curuba curucucu curule cururo curvaceous curvaceousness curvacious curvant curvate curvation curvature curve curved curvedly curvedness curver curvesome curvesomeness curvet curvicaudate curvicostate curvidentate curvifoliate curviform curvilineal curvilinear curvilinearity curvilinearly curvimeter curvinervate curvinerved curvirostral curviserial curvital curvity curvograph curvometer curvous curvulate curvy curwhibble curwillet cuscohygrine cusconine cuscus cuscutaceous cusec cuselite cush cushag cushat cushaw cushewbird cushion cushioned cushionflower cushionless cushionlike cushiony cushlamochree cushy cusie cusinero cusk cusp cuspal cusparidine cusparine cuspate cusped cuspid cuspidal cuspidate cuspidation cuspidine cuspidor cuspule cuss cussed cussedly cussedness cusser cusso custard custerite custodee custodes custodial custodiam custodian custodianship custodier custody custom customable customarily customariness customary customer customhouse customs custumal cut cutaneal cutaneous cutaneously cutaway cutback cutch cutcher cutcherry cute cutely cuteness cutheal cuticle cuticolor cuticula cuticular cuticularization cuticularize cuticulate cutidure cutie cutification cutigeral cutin cutinization cutinize cutireaction cutis cutisector cutitis cutization cutlass cutler cutleress cutleriaceous cutlery cutlet cutling cutlips cutocellulose cutoff cutout cutover cutpurse cuttable cuttage cuttail cuttanee cutted cutter cutterhead cutterman cutthroat cutting cuttingly cuttingness cuttle cuttlebone cuttlefish cuttler cuttoo cutty cuttyhunk cutup cutwater cutweed cutwork cutworm cuvette cuvy cuya cwierc cwm cyamelide cyan cyanacetic cyanamide cyananthrol cyanate cyanaurate cyanauric cyanbenzyl cyancarbonic cyanean cyanemia cyaneous cyanephidrosis cyanformate cyanformic cyanhidrosis cyanhydrate cyanhydric cyanhydrin cyanic cyanicide cyanidation cyanide cyanidin cyanidine cyanidrosis cyanimide cyanin cyanine cyanite cyanize cyanmethemoglobin cyanoacetate cyanoacetic cyanoaurate cyanoauric cyanobenzene cyanocarbonic cyanochlorous cyanochroia cyanochroic cyanocrystallin cyanoderma cyanogen cyanogenesis cyanogenetic cyanogenic cyanoguanidine cyanohermidin cyanohydrin cyanol cyanole cyanomaclurin cyanometer cyanomethaemoglobin cyanomethemoglobin cyanometric cyanometry cyanopathic cyanopathy cyanophile cyanophilous cyanophoric cyanophose cyanophycean cyanophyceous cyanophycin cyanopia cyanoplastid cyanoplatinite cyanoplatinous cyanopsia cyanose cyanosed cyanosis cyanotic cyanotrichite cyanotype cyanuramide cyanurate cyanuret cyanuric cyanurine cyanus cyaphenine cyath cyatheaceous cyathiform cyathium cyathoid cyatholith cyathophylline cyathophylloid cyathos cyathozooid cyathus cybernetic cyberneticist cybernetics cycad cycadaceous cycadean cycadeoid cycadeous cycadiform cycadlike cycadofilicale cycadofilicinean cyclamen cyclamin cyclamine cyclammonium cyclane cyclanthaceous cyclar cyclarthrodial cyclarthrsis cyclas cycle cyclecar cycledom cyclene cycler cyclesmith cyclian cyclic cyclical cyclically cyclicism cyclide cycling cyclism cyclist cyclistic cyclitic cyclitis cyclization cyclize cycloalkane cyclobutane cyclocoelic cyclocoelous cyclodiolefin cycloganoid cyclogram cyclograph cyclographer cycloheptane cycloheptanone cyclohexane cyclohexanol cyclohexanone cyclohexene cyclohexyl cycloid cycloidal cycloidally cycloidean cycloidian cycloidotrope cyclolith cyclomania cyclometer cyclometric cyclometrical cyclometry cyclomyarian cyclonal cyclone cyclonic cyclonical cyclonically cyclonist cyclonite cyclonologist cyclonology cyclonometer cyclonoscope cycloolefin cycloparaffin cyclope cyclopean cyclopedia cyclopedic cyclopedical cyclopedically cyclopedist cyclopentadiene cyclopentane cyclopentanone cyclopentene cyclopes cyclophoria cyclophoric cyclophrenia cyclopia cyclopism cyclopite cycloplegia cycloplegic cyclopoid cyclopropane cyclopteroid cyclopterous cyclopy cyclorama cycloramic cyclorrhaphous cycloscope cyclose cyclosis cyclospermous cyclospondylic cyclospondylous cyclosporous cyclostomate cyclostomatous cyclostome cyclostomous cyclostrophic cyclostyle cyclothem cyclothure cyclothurine cyclothyme cyclothymia cyclothymiac cyclothymic cyclotome cyclotomic cyclotomy cyclotron cyclovertebral cyclus cydippian cydippid cydonium cyesiology cyesis cygneous cygnet cygnine cyke cylinder cylindered cylinderer cylinderlike cylindraceous cylindrarthrosis cylindrelloid cylindrenchyma cylindric cylindrical cylindricality cylindrically cylindricalness cylindricity cylindricule cylindriform cylindrite cylindrocellular cylindrocephalic cylindroconical cylindroconoidal cylindrocylindric cylindrodendrite cylindrograph cylindroid cylindroidal cylindroma cylindromatous cylindrometric cylindroogival cylindruria cylix cyllosis cyma cymagraph cymaphen cymaphyte cymaphytic cymaphytism cymar cymation cymatium cymba cymbaeform cymbal cymbaleer cymbaler cymbaline cymbalist cymballike cymbalo cymbalon cymbate cymbiform cymbling cymbocephalic cymbocephalous cymbocephaly cyme cymelet cymene cymiferous cymling cymogene cymograph cymographic cymoid cymometer cymophane cymophanous cymophenol cymoscope cymose cymosely cymotrichous cymotrichy cymous cymule cymulose cynanche cynanthropy cynaraceous cynarctomachy cynareous cynaroid cynebot cynegetic cynegetics cynegild cynhyena cyniatria cyniatrics cynic cynical cynically cynicalness cynicism cynicist cynipid cynipidous cynipoid cynism cynocephalic cynocephalous cynocephalus cynoclept cynocrambaceous cynodont cynogenealogist cynogenealogy cynography cynoid cynology cynomoriaceous cynomorphic cynomorphous cynophile cynophilic cynophilist cynophobe cynophobia cynopithecoid cynopodous cynorrhodon cynosural cynosure cynotherapy cyp cyperaceous cyphella cyphellate cyphonautes cyphonism cypraeid cypraeiform cypraeoid cypre cypres cypress cypressed cypressroot cypridinoid cyprine cyprinid cypriniform cyprinine cyprinodont cyprinodontoid cyprinoid cyprinoidean cypsela cypseliform cypseline cypseloid cypselomorph cypselomorphic cypselous cyptozoic cyrillaceous cyriologic cyriological cyrtoceracone cyrtoceratite cyrtoceratitic cyrtograph cyrtolite cyrtometer cyrtopia cyrtosis cyrus cyst cystadenoma cystadenosarcoma cystal cystalgia cystamine cystaster cystatrophia cystatrophy cystectasia cystectasy cystectomy cysted cysteine cysteinic cystelcosis cystenchyma cystenchymatous cystencyte cysterethism cystic cysticarpic cysticarpium cysticercoid cysticercoidal cysticercosis cysticercus cysticolous cystid cystidean cystidicolous cystidium cystiferous cystiform cystigerous cystignathine cystine cystinuria cystirrhea cystis cystitis cystitome cystoadenoma cystocarcinoma cystocarp cystocarpic cystocele cystocolostomy cystocyte cystodynia cystoelytroplasty cystoenterocele cystoepiplocele cystoepithelioma cystofibroma cystoflagellate cystogenesis cystogenous cystogram cystoid cystoidean cystolith cystolithectomy cystolithiasis cystolithic cystoma cystomatous cystomorphous cystomyoma cystomyxoma cystonectous cystonephrosis cystoneuralgia cystoparalysis cystophore cystophotography cystophthisis cystoplasty cystoplegia cystoproctostomy cystoptosis cystopyelitis cystopyelography cystopyelonephritis cystoradiography cystorrhagia cystorrhaphy cystorrhea cystosarcoma cystoschisis cystoscope cystoscopic cystoscopy cystose cystospasm cystospastic cystospore cystostomy cystosyrinx cystotome cystotomy cystotrachelotomy cystoureteritis cystourethritis cystous cytase cytasic cytinaceous cytioderm cytisine cytitis cytoblast cytoblastema cytoblastemal cytoblastematous cytoblastemic cytoblastemous cytochemistry cytochrome cytochylema cytocide cytoclasis cytoclastic cytococcus cytocyst cytode cytodendrite cytoderm cytodiagnosis cytodieresis cytodieretic cytogamy cytogene cytogenesis cytogenetic cytogenetical cytogenetically cytogeneticist cytogenetics cytogenic cytogenous cytogeny cytoglobin cytohyaloplasm cytoid cytokinesis cytolist cytologic cytological cytologically cytologist cytology cytolymph cytolysin cytolysis cytolytic cytoma cytomere cytometer cytomicrosome cytomitome cytomorphosis cyton cytoparaplastin cytopathologic cytopathological cytopathologically cytopathology cytophagous cytophagy cytopharynx cytophil cytophysics cytophysiology cytoplasm cytoplasmic cytoplast cytoplastic cytoproct cytopyge cytoreticulum cytoryctes cytosine cytosome cytost cytostomal cytostome cytostroma cytostromatic cytotactic cytotaxis cytotoxic cytotoxin cytotrophoblast cytotrophy cytotropic cytotropism cytozoic cytozoon cytozymase cytozyme cytula cyzicene czar czardas czardom czarevitch czarevna czarian czaric czarina czarinian czarish czarism czarist czaristic czaritza czarowitch czarowitz czarship d da daalder dab dabb dabba dabber dabble dabbler dabbling dabblingly dabblingness dabby dabchick dablet daboia daboya dabster dace dacelonine dachshound dachshund dacite dacitic dacker dacoit dacoitage dacoity dacryadenalgia dacryadenitis dacryagogue dacrycystalgia dacryelcosis dacryoadenalgia dacryoadenitis dacryoblenorrhea dacryocele dacryocyst dacryocystalgia dacryocystitis dacryocystoblennorrhea dacryocystocele dacryocystoptosis dacryocystorhinostomy dacryocystosyringotomy dacryocystotome dacryocystotomy dacryohelcosis dacryohemorrhea dacryolite dacryolith dacryolithiasis dacryoma dacryon dacryops dacryopyorrhea dacryopyosis dacryosolenitis dacryostenosis dacryosyrinx dacryuria dactyl dactylar dactylate dactylic dactylically dactylioglyph dactylioglyphic dactylioglyphist dactylioglyphtic dactylioglyphy dactyliographer dactyliographic dactyliography dactyliology dactyliomancy dactylion dactyliotheca dactylist dactylitic dactylitis dactylogram dactylograph dactylographic dactylography dactyloid dactylology dactylomegaly dactylonomy dactylopatagium dactylopodite dactylopore dactylorhiza dactyloscopic dactyloscopy dactylose dactylosternal dactylosymphysis dactylotheca dactylous dactylozooid dactylus dacyorrhea dad dada dadap dadder daddle daddock daddocky daddy daddynut dade dadenhudd dado daduchus dae daedal daedaloid daemon daemonic daemonurgist daemonurgy daemony daer daff daffery daffing daffish daffle daffodil daffodilly daffy daffydowndilly daft daftberry daftlike daftly daftness dag dagaba dagame dagassa dagesh dagga dagger daggerbush daggered daggerlike daggerproof daggers daggle daggletail daggletailed daggly daggy daghesh daglock dagoba dags daguerreotype daguerreotyper daguerreotypic daguerreotypist daguerreotypy dah dahabeah dahoon daidle daidly daiker daikon dailiness daily daimen daimiate daimio daimon daimonic daimonion daimonistic daimonology dain daincha dainteth daintify daintihood daintily daintiness daintith dainty daira dairi dairy dairying dairymaid dairyman dairywoman dais daisied daisy daisybush daitya daiva dak daker dakir daktylon daktylos dal dalar dale daleman daler dalesfolk dalesman dalespeople daleswoman daleth dali dalk dallack dalle dalles dalliance dallier dally dallying dallyingly dalmatic dalt dalteen dalton dam dama damage damageability damageable damageableness damageably damagement damager damages damagingly daman damascene damascened damascener damascenine damask damaskeen damasse damassin dambonitol dambose dambrod dame damenization damewort damiana damie damier damine damkjernite damlike dammar damme dammer dammish damn damnability damnable damnableness damnably damnation damnatory damned damner damnification damnify damning damningly damningness damnonians damnous damnously damoiseau damonico damourite damp dampang damped dampen dampener damper damping dampish dampishly dampishness damply dampness dampproof dampproofer dampproofing dampy damsel damselfish damselhood damson dan danaid danaide danaine danaite danalite danburite dancalite dance dancer danceress dancery dancette dancing dancingly dand danda dandelion dander dandiacal dandiacally dandically dandification dandify dandilly dandily dandiprat dandizette dandle dandler dandling dandlingly dandruff dandruffy dandy dandydom dandyish dandyism dandyize dandyling dang danger dangerful dangerfully dangerless dangerous dangerously dangerousness dangersome dangle dangleberry danglement dangler danglin dangling danglingly danicism danio dank dankish dankishness dankly dankness danli dannemorite danner dannock danoranja dansant danseuse danta danton dao daoine dap daphnetin daphnin daphnioid daphnoid dapicho dapico dapifer dapper dapperling dapperly dapperness dapple dappled dar darabukka darac daraf darat darbha darby dardanarius dardanium dardaol dare dareall daredevil daredevilism daredevilry daredeviltry dareful darer daresay darg dargah darger dargsman dargue dari daribah daric daring daringly daringness dariole dark darken darkener darkening darkful darkhearted darkheartedness darkish darkishness darkle darkling darklings darkly darkmans darkness darkroom darkskin darksome darksomeness darky darling darlingly darlingness darn darnation darned darnel darner darnex darning daroga daroo darr darrein darshana darst dart dartars dartboard darter darting dartingly dartingness dartle dartlike dartman dartoic dartoid dartos dartre dartrose dartrous darts dartsman darzee das dash dashboard dashed dashedly dashee dasheen dasher dashing dashingly dashmaker dashplate dashpot dashwheel dashy dasi dasnt dassie dassy dastard dastardize dastardliness dastardly dastur dasturi dasycladaceous dasymeter dasypaedal dasypaedes dasypaedic dasyphyllous dasypodoid dasyproctine dasyure dasyurine dasyuroid data datable datableness datably dataria datary datch datcha date dateless datemark dater datil dating dation datiscaceous datiscetin datiscin datiscoside datival dative datively dativogerundial datolite datolitic dattock datum daturic daturism daub daube dauber daubery daubing daubingly daubreeite daubreelite daubster dauby daud daughter daughterhood daughterkin daughterless daughterlike daughterliness daughterling daughterly daughtership daunch dauncy daunt daunter daunting dauntingly dauntingness dauntless dauntlessly dauntlessness daunton dauphin dauphine dauphiness daut dautie dauw davach daven davenport daver daverdy davidsonite daviesite davit davoch davy davyne daw dawdle dawdler dawdling dawdlingly dawdy dawish dawkin dawn dawning dawnlight dawnlike dawnstreak dawnward dawny dawsoniaceous dawsonite dawtet dawtit dawut day dayabhaga dayal daybeam dayberry dayblush daybook daybreak daydawn daydream daydreamer daydreamy daydrudge dayflower dayfly daygoing dayless daylight daylit daylong dayman daymare daymark dayroom days dayshine daysman dayspring daystar daystreak daytale daytide daytime daytimes dayward daywork dayworker daywrit daze dazed dazedly dazedness dazement dazingly dazy dazzle dazzlement dazzler dazzlingly de deacetylate deacetylation deacidification deacidify deacon deaconal deaconate deaconess deaconhood deaconize deaconry deaconship deactivate deactivation dead deadbeat deadborn deadcenter deaden deadener deadening deader deadeye deadfall deadhead deadheadism deadhearted deadheartedly deadheartedness deadhouse deading deadish deadishly deadishness deadlatch deadlight deadlily deadline deadliness deadlock deadly deadman deadmelt deadness deadpan deadpay deadtongue deadwood deadwort deaerate deaeration deaerator deaf deafen deafening deafeningly deafforest deafforestation deafish deafly deafness deair deal dealable dealate dealated dealation dealbate dealbation dealbuminize dealcoholist dealcoholization dealcoholize dealer dealerdom dealership dealfish dealing dealkalize dealkylate dealkylation dealt deambulation deambulatory deamidase deamidate deamidation deamidization deamidize deaminase deaminate deamination deaminization deaminize deammonation dean deanathematize deaner deanery deaness deanimalize deanship deanthropomorphic deanthropomorphism deanthropomorphization deanthropomorphize deappetizing deaquation dear dearborn dearie dearly dearness dearomatize dearsenicate dearsenicator dearsenicize dearth dearthfu dearticulation dearworth dearworthily dearworthiness deary deash deasil deaspirate deaspiration deassimilation death deathbed deathblow deathday deathful deathfully deathfulness deathify deathin deathiness deathless deathlessly deathlessness deathlike deathliness deathling deathly deathroot deathshot deathsman deathtrap deathward deathwards deathwatch deathweed deathworm deathy deave deavely deb debacle debadge debamboozle debar debarbarization debarbarize debark debarkation debarkment debarment debarrance debarrass debarration debase debasedness debasement debaser debasingly debatable debate debateful debatefully debatement debater debating debatingly debauch debauched debauchedly debauchedness debauchee debaucher debauchery debauchment debby debeige debellate debellation debellator deben debenture debentured debenzolize debile debilissima debilitant debilitate debilitated debilitation debilitative debility debind debit debiteuse debituminization debituminize deblaterate deblateration deboistly deboistness debonair debonaire debonairity debonairly debonairness debonnaire debord debordment debosh deboshed debouch debouchment debride debrief debris debrominate debromination debruise debt debtee debtful debtless debtor debtorship debullition debunk debunker debunkment debus debut debutant debutante decachord decad decadactylous decadal decadally decadarch decadarchy decadary decadation decade decadence decadency decadent decadentism decadently decadescent decadianome decadic decadist decadrachm decadrachma decaesarize decaffeinate decaffeinize decafid decagon decagonal decagram decagramme decahedral decahedron decahydrate decahydrated decahydronaphthalene decal decalcification decalcifier decalcify decalcomania decalcomaniac decalescence decalescent decaliter decalitre decalobate decalvant decalvation decameral decamerous decameter decametre decamp decampment decan decanal decanally decanate decane decangular decani decanically decannulation decanonization decanonize decant decantate decantation decanter decantherous decap decapetalous decaphyllous decapitable decapitalization decapitalize decapitate decapitation decapitator decapod decapodal decapodan decapodiform decapodous decapper decapsulate decapsulation decarbonate decarbonator decarbonization decarbonize decarbonized decarbonizer decarboxylate decarboxylation decarboxylization decarboxylize decarburation decarburization decarburize decarch decarchy decardinalize decare decarhinus decarnate decarnated decart decasemic decasepalous decaspermal decaspermous decast decastellate decastere decastich decastyle decasualization decasualize decasyllabic decasyllable decasyllabon decate decathlon decatholicize decatize decatizer decatoic decator decatyl decaudate decaudation decay decayable decayed decayedness decayer decayless decease deceased decedent deceit deceitful deceitfully deceitfulness deceivability deceivable deceivableness deceivably deceive deceiver deceiving deceivingly decelerate deceleration decelerator decelerometer decemcostate decemdentate decemfid decemflorous decemfoliate decemfoliolate decemjugate decemlocular decempartite decempeda decempedal decempedate decempennate decemplex decemplicate decempunctate decemstriate decemuiri decemvir decemviral decemvirate decemvirship decenary decence decency decene decennal decennary decennia decenniad decennial decennially decennium decennoval decent decenter decently decentness decentralism decentralist decentralization decentralize decentration decentre decenyl decephalization deceptibility deceptible deception deceptious deceptiously deceptitious deceptive deceptively deceptiveness deceptivity decerebrate decerebration decerebrize decern decerniture decernment decess decession dechemicalization dechemicalize dechenite dechlore dechlorination dechoralize dechristianization dechristianize deciare deciatine decibel deciceronize decidable decide decided decidedly decidedness decider decidingly decidua decidual deciduary deciduate deciduitis deciduoma deciduous deciduously deciduousness decigram decigramme decil decile deciliter decillion decillionth decima decimal decimalism decimalist decimalization decimalize decimally decimate decimation decimator decimestrial decimeter decimolar decimole decimosexto decinormal decipher decipherability decipherable decipherably decipherer decipherment decipium decipolar decision decisional decisive decisively decisiveness decistere decitizenize decivilization decivilize deck decke decked deckel decker deckhead deckhouse deckie decking deckle deckload deckswabber declaim declaimant declaimer declamation declamatoriness declamatory declarable declarant declaration declarative declaratively declarator declaratorily declaratory declare declared declaredly declaredness declarer declass declassicize declassify declension declensional declensionally declericalize declimatize declinable declinal declinate declination declinational declinatory declinature decline declined declinedness decliner declinograph declinometer declivate declive declivitous declivity declivous declutch decoagulate decoagulation decoat decocainize decoct decoctible decoction decoctive decoctum decode decohere decoherence decoherer decohesion decoic decoke decollate decollated decollation decollator decolletage decollete decolor decolorant decolorate decoloration decolorimeter decolorization decolorize decolorizer decolour decommission decompensate decompensation decomplex decomponible decomposability decomposable decompose decomposed decomposer decomposite decomposition decomposure decompound decompoundable decompoundly decompress decompressing decompression decompressive deconcatenate deconcentrate deconcentration deconcentrator decongestive deconsecrate deconsecration deconsider deconsideration decontaminate decontamination decontrol deconventionalize decopperization decopperize decorability decorable decorably decorament decorate decorated decoration decorationist decorative decoratively decorativeness decorator decoratory decorist decorous decorously decorousness decorrugative decorticate decortication decorticator decorticosis decorum decostate decoy decoyer decoyman decrassify decream decrease decreaseless decreasing decreasingly decreation decreative decree decreeable decreement decreer decreet decrement decrementless decremeter decrepit decrepitate decrepitation decrepitly decrepitness decrepitude decrescence decrescendo decrescent decretal decretalist decrete decretist decretive decretively decretorial decretorily decretory decretum decrew decrial decried decrier decrown decrudescence decrustation decry decrystallization decubital decubitus decultivate deculturate decuman decumana decumanus decumary decumbence decumbency decumbent decumbently decumbiture decuple decuplet decuria decurion decurionate decurrence decurrency decurrent decurrently decurring decursion decursive decursively decurtate decurvation decurvature decurve decury decus decussate decussated decussately decussation decussis decussorium decyl decylene decylenic decylic decyne dedecorate dedecoration dedecorous dedendum dedentition dedicant dedicate dedicatee dedication dedicational dedicative dedicator dedicatorial dedicatorily dedicatory dedicature dedifferentiate dedifferentiation dedimus deditician dediticiancy dedition dedo dedoggerelize dedogmatize dedolation deduce deducement deducibility deducible deducibleness deducibly deducive deduct deductible deduction deductive deductively deductory deduplication dee deed deedbox deedeed deedful deedfully deedily deediness deedless deedy deem deemer deemie deemster deemstership deep deepen deepener deepening deepeningly deeping deepish deeplier deeply deepmost deepmouthed deepness deepsome deepwater deepwaterman deer deerberry deerdog deerdrive deerfood deerhair deerherd deerhorn deerhound deerlet deermeat deerskin deerstalker deerstalking deerstand deerstealer deertongue deerweed deerwood deeryard deevey deevilick deface defaceable defacement defacer defacing defacingly defalcate defalcation defalcator defalk defamation defamatory defame defamed defamer defamingly defassa defat default defaultant defaulter defaultless defaulture defeasance defeasanced defease defeasibility defeasible defeasibleness defeat defeater defeatism defeatist defeatment defeature defecant defecate defecation defecator defect defectibility defectible defection defectionist defectious defective defectively defectiveness defectless defectology defector defectoscope defedation defeminize defence defend defendable defendant defender defendress defenestration defensative defense defenseless defenselessly defenselessness defensibility defensible defensibleness defensibly defension defensive defensively defensiveness defensor defensorship defensory defer deferable deference deferent deferentectomy deferential deferentiality deferentially deferentitis deferment deferrable deferral deferred deferrer deferrization deferrize defervesce defervescence defervescent defeudalize defiable defial defiance defiant defiantly defiantness defiber defibrinate defibrination defibrinize deficience deficiency deficient deficiently deficit defier defiguration defilade defile defiled defiledness defilement defiler defiliation defiling defilingly definability definable definably define defined definedly definement definer definiendum definiens definite definitely definiteness definition definitional definitiones definitive definitively definitiveness definitization definitize definitor definitude deflagrability deflagrable deflagrate deflagration deflagrator deflate deflation deflationary deflationist deflator deflect deflectable deflected deflection deflectionization deflectionize deflective deflectometer deflector deflesh deflex deflexibility deflexible deflexion deflexure deflocculant deflocculate deflocculation deflocculator deflorate defloration deflorescence deflower deflowerer defluent defluous defluvium defluxion defoedation defog defoliage defoliate defoliated defoliation defoliator deforce deforcement deforceor deforcer deforciant deforest deforestation deforester deform deformability deformable deformalize deformation deformational deformative deformed deformedly deformedness deformer deformeter deformism deformity defortify defoul defraud defraudation defrauder defraudment defray defrayable defrayal defrayer defrayment defreeze defrication defrock defrost defroster deft defterdar deftly deftness defunct defunction defunctionalization defunctionalize defunctness defuse defusion defy defyingly deg deganglionate degarnish degas degasification degasifier degasify degasser degauss degelatinize degelation degeneracy degeneralize degenerate degenerately degenerateness degeneration degenerationist degenerative degenerescence degenerescent degentilize degerm degerminate degerminator degged degger deglaciation deglaze deglutinate deglutination deglutition deglutitious deglutitive deglutitory deglycerin deglycerine degorge degradable degradand degradation degradational degradative degrade degraded degradedly degradedness degradement degrader degrading degradingly degradingness degraduate degraduation degrain degrease degreaser degree degreeless degreewise degression degressive degressively degu deguelin degum degummer degust degustation dehair dehairer deheathenize dehematize dehepatize dehisce dehiscence dehiscent dehistoricize dehnstufe dehonestate dehonestation dehorn dehorner dehors dehort dehortation dehortative dehortatory dehorter dehull dehumanization dehumanize dehumidification dehumidifier dehumidify dehusk dehydrant dehydrase dehydrate dehydration dehydrator dehydroascorbic dehydrocorydaline dehydrofreezing dehydrogenase dehydrogenate dehydrogenation dehydrogenization dehydrogenize dehydromucic dehydrosparteine dehypnotize deice deicer deicidal deicide deictic deictical deictically deidealize deific deifical deification deificatory deifier deiform deiformity deify deign deincrustant deindividualization deindividualize deindividuate deindustrialization deindustrialize deink deinos deinsularize deintellectualization deintellectualize deionize deiparous deipnodiplomatic deipnophobia deipnosophism deipnosophist deipnosophistic deipotent deiseal deisidaimonia deism deist deistic deistical deistically deisticalness deity deityship deject dejecta dejected dejectedly dejectedness dejectile dejection dejectly dejectory dejecture dejerate dejeration dejerator dejeune dejeuner dejunkerize dekaparsec dekapode dekko dekle deknight delabialization delabialize delacrimation delactation delaine delaminate delamination delapse delapsion delate delater delatinization delatinize delation delator delatorian delawn delay delayable delayage delayer delayful delaying delayingly dele delead delectability delectable delectableness delectably delectate delectation delectus delegable delegacy delegalize delegant delegate delegatee delegateship delegation delegative delegator delegatory delenda delesseriaceous delete deleterious deleteriously deleteriousness deletion deletive deletory delf delft delftware deliberalization deliberalize deliberant deliberate deliberately deliberateness deliberation deliberative deliberatively deliberativeness deliberator delible delicacy delicate delicately delicateness delicatesse delicatessen delicense delicioso delicious deliciously deliciousness delict delictum deligated deligation delight delightable delighted delightedly delightedness delighter delightful delightfully delightfulness delighting delightingly delightless delightsome delightsomely delightsomeness delignate delignification delime delimit delimitate delimitation delimitative delimiter delimitize delineable delineament delineate delineation delineative delineator delineatory delineature delinquence delinquency delinquent delinquently delint delinter deliquesce deliquescence deliquescent deliquium deliracy delirament deliration deliriant delirifacient delirious deliriously deliriousness delirium delitescence delitescency delitescent deliver deliverable deliverance deliverer deliveress deliveror delivery deliveryman dell dellenite delocalization delocalize delomorphic delomorphous deloul delouse delphacid delphine delphinic delphinin delphinine delphinite delphinoid delphinoidine delphocurarine delta deltafication deltaic deltal deltarium deltation delthyrial delthyrium deltic deltidial deltidium deltiology deltohedron deltoid deltoidal delubrum deludable delude deluder deludher deluding deludingly deluge deluminize delundung delusion delusional delusionist delusive delusively delusiveness delusory deluster deluxe delve delver demagnetizable demagnetization demagnetize demagnetizer demagog demagogic demagogical demagogically demagogism demagogue demagoguery demagogy demal demand demandable demandant demander demanding demandingly demanganization demanganize demantoid demarcate demarcation demarcator demarch demarchy demargarinate demark demarkation demast dematerialization dematerialize dematiaceous deme demean demeanor demegoric demency dement dementate dementation demented dementedly dementedness dementholize dementia demephitize demerit demeritorious demeritoriously demersal demersed demersion demesman demesmerize demesne demesnial demetallize demethylate demethylation demetricize demi demiadult demiangel demiassignation demiatheism demiatheist demibarrel demibastion demibastioned demibath demibeast demibelt demibob demibombard demibrassart demibrigade demibrute demibuckram demicadence demicannon demicanon demicanton demicaponier demichamfron demicircle demicircular demicivilized demicolumn demicoronal demicritic demicuirass demiculverin demicylinder demicylindrical demidandiprat demideify demideity demidevil demidigested demidistance demiditone demidoctor demidog demidolmen demidome demieagle demifarthing demifigure demiflouncing demifusion demigardebras demigauntlet demigentleman demiglobe demigod demigoddess demigoddessship demigorge demigriffin demigroat demihag demihearse demiheavenly demihigh demihogshead demihorse demihuman demijambe demijohn demikindred demiking demilance demilancer demilawyer demilegato demilion demilitarization demilitarize demiliterate demilune demiluster demilustre demiman demimark demimentoniere demimetope demimillionaire demimondaine demimonde demimonk deminatured demineralization demineralize deminude deminudity demioctagonal demioctangular demiofficial demiorbit demiourgoi demiowl demiox demipagan demiparallel demipauldron demipectinate demipesade demipike demipillar demipique demiplacate demiplate demipomada demipremise demipremiss demipriest demipronation demipuppet demiquaver demiracle demiram demirelief demirep demirevetment demirhumb demirilievo demirobe demisability demisable demisacrilege demisang demisangue demisavage demise demiseason demisecond demisemiquaver demisemitone demisheath demishirt demisovereign demisphere demiss demission demissionary demissly demissness demissory demisuit demit demitasse demitint demitoilet demitone demitrain demitranslucence demitube demiturned demiurge demiurgeous demiurgic demiurgical demiurgically demiurgism demivambrace demivirgin demivoice demivol demivolt demivotary demiwivern demiwolf demnition demob demobilization demobilize democracy democrat democratian democratic democratical democratically democratifiable democratism democratist democratization democratize demodectic demoded demodulation demodulator demogenic demographer demographic demographical demographically demographist demography demoid demoiselle demolish demolisher demolishment demolition demolitionary demolitionist demological demology demon demonastery demoness demonetization demonetize demoniac demoniacal demoniacally demoniacism demonial demonian demonianism demoniast demonic demonical demonifuge demonish demonism demonist demonize demonkind demonland demonlike demonocracy demonograph demonographer demonography demonolater demonolatrous demonolatrously demonolatry demonologer demonologic demonological demonologically demonologist demonology demonomancy demonophobia demonry demonship demonstrability demonstrable demonstrableness demonstrably demonstrant demonstratable demonstrate demonstratedly demonstrater demonstration demonstrational demonstrationist demonstrative demonstratively demonstrativeness demonstrator demonstratorship demonstratory demophil demophilism demophobe demoralization demoralize demoralizer demorphinization demorphism demos demote demotic demotics demotion demotist demount demountability demountable dempster demulce demulcent demulsibility demulsify demulsion demure demurely demureness demurity demurrable demurrage demurral demurrant demurrer demurring demurringly demutization demy demyship den denarcotization denarcotize denarius denaro denary denat denationalization denationalize denaturalization denaturalize denaturant denaturate denaturation denature denaturization denaturize denaturizer denazify denda dendrachate dendral dendraxon dendric dendriform dendrite dendritic dendritical dendritically dendritiform dendrobe dendroceratine dendrochronological dendrochronologist dendrochronology dendroclastic dendrocoelan dendrocoele dendrocoelous dendrocolaptine dendrodont dendrograph dendrography dendroid dendroidal dendrolatry dendrolite dendrologic dendrological dendrologist dendrologous dendrology dendrometer dendron dendrophil dendrophile dendrophilous dene denegate denegation denehole denervate denervation deneutralization dengue deniable denial denicotinize denier denierage denierer denigrate denigration denigrator denim denitrate denitration denitrator denitrificant denitrification denitrificator denitrifier denitrify denitrize denization denizen denizenation denizenize denizenship dennet denominable denominate denomination denominational denominationalism denominationalist denominationalize denominationally denominative denominatively denominator denotable denotation denotative denotatively denotativeness denotatum denote denotement denotive denouement denounce denouncement denouncer dense densely densen denseness denshare densher denshire densification densifier densify densimeter densimetric densimetrically densimetry densitometer density dent dentagra dental dentale dentalgia dentalism dentality dentalization dentalize dentally dentaphone dentary dentata dentate dentated dentately dentation dentatoangulate dentatocillitate dentatocostate dentatocrenate dentatoserrate dentatosetaceous dentatosinuate dentel dentelated dentelle dentelure denter dentex dentical denticate denticle denticular denticulate denticulately denticulation denticule dentiferous dentification dentiform dentifrice dentigerous dentil dentilabial dentilated dentilation dentile dentilingual dentiloquist dentiloquy dentimeter dentin dentinal dentinalgia dentinasal dentine dentinitis dentinoblast dentinocemental dentinoid dentinoma dentiparous dentiphone dentiroster dentirostral dentirostrate dentiscalp dentist dentistic dentistical dentistry dentition dentoid dentolabial dentolingual dentonasal dentosurgical dentural denture denty denucleate denudant denudate denudation denudative denude denuder denumerable denumerably denumeral denumerant denumerantive denumeration denumerative denunciable denunciant denunciate denunciation denunciative denunciatively denunciator denunciatory denutrition deny denyingly deobstruct deobstruent deoccidentalize deoculate deodand deodara deodorant deodorization deodorize deodorizer deontological deontologist deontology deoperculate deoppilant deoppilate deoppilation deoppilative deordination deorganization deorganize deorientalize deorsumvergence deorsumversion deorusumduction deossification deossify deota deoxidant deoxidate deoxidation deoxidative deoxidator deoxidization deoxidize deoxidizer deoxygenate deoxygenation deoxygenization deozonization deozonize deozonizer depa depaganize depaint depancreatization depancreatize depark deparliament depart departed departer departisanize departition department departmental departmentalism departmentalization departmentalize departmentally departmentization departmentize departure depas depascent depass depasturable depasturage depasturation depasture depatriate depauperate depauperation depauperization depauperize depencil depend dependability dependable dependableness dependably dependence dependency dependent dependently depender depending dependingly depeople deperdite deperditely deperition depersonalization depersonalize depersonize depetalize depeter depetticoat dephase dephilosophize dephlegmate dephlegmation dephlegmatize dephlegmator dephlegmatory dephlegmedness dephlogisticate dephlogisticated dephlogistication dephosphorization dephosphorize dephysicalization dephysicalize depickle depict depicter depiction depictive depicture depiedmontize depigment depigmentate depigmentation depigmentize depilate depilation depilator depilatory depilitant depilous deplaceable deplane deplasmolysis deplaster deplenish deplete deplethoric depletion depletive depletory deploitation deplorability deplorable deplorableness deplorably deploration deplore deplored deploredly deploredness deplorer deploringly deploy deployment deplumate deplumated deplumation deplume deplump depoetize depoh depolarization depolarize depolarizer depolish depolishing depolymerization depolymerize depone deponent depopularize depopulate depopulation depopulative depopulator deport deportable deportation deportee deporter deportment deposable deposal depose deposer deposit depositary depositation depositee deposition depositional depositive depositor depository depositum depositure depot depotentiate depotentiation depravation deprave depraved depravedly depravedness depraver depravingly depravity deprecable deprecate deprecatingly deprecation deprecative deprecator deprecatorily deprecatoriness deprecatory depreciable depreciant depreciate depreciatingly depreciation depreciative depreciatively depreciator depreciatoriness depreciatory depredate depredation depredationist depredator depredatory depress depressant depressed depressibility depressible depressing depressingly depressingness depression depressive depressively depressiveness depressomotor depressor depreter deprint depriorize deprivable deprival deprivate deprivation deprivative deprive deprivement depriver deprovincialize depside depth depthen depthing depthless depthometer depthwise depullulation depurant depurate depuration depurative depurator depuratory depursement deputable deputation deputational deputationist deputationize deputative deputatively deputator depute deputize deputy deputyship dequeen derabbinize deracialize deracinate deracination deradelphus deradenitis deradenoncus derah deraign derail derailer derailment derange derangeable deranged derangement deranger derat derate derater derationalization derationalize deratization deray derby derbylite dere deregister deregulationize dereism dereistic dereistically derelict dereliction derelictly derelictness dereligion dereligionize derencephalocele derencephalus deresinate deresinize deric deride derider deridingly derisible derision derisive derisively derisiveness derisory derivability derivable derivably derival derivant derivate derivately derivation derivational derivationally derivationist derivatist derivative derivatively derivativeness derive derived derivedly derivedness deriver derm derma dermad dermahemia dermal dermalgia dermalith dermamyiasis dermanaplasty dermapostasis dermapteran dermapterous dermaskeleton dermasurgery dermatagra dermatalgia dermataneuria dermatatrophia dermatauxe dermathemia dermatic dermatine dermatitis dermatocele dermatocellulitis dermatoconiosis dermatocoptic dermatocyst dermatodynia dermatogen dermatoglyphics dermatograph dermatographia dermatography dermatoheteroplasty dermatoid dermatological dermatologist dermatology dermatolysis dermatoma dermatome dermatomere dermatomic dermatomuscular dermatomyces dermatomycosis dermatomyoma dermatoneural dermatoneurology dermatoneurosis dermatonosus dermatopathia dermatopathic dermatopathology dermatopathophobia dermatophobia dermatophone dermatophony dermatophyte dermatophytic dermatophytosis dermatoplasm dermatoplast dermatoplastic dermatoplasty dermatopnagic dermatopsy dermatoptic dermatorrhagia dermatorrhea dermatorrhoea dermatosclerosis dermatoscopy dermatosis dermatoskeleton dermatotherapy dermatotome dermatotomy dermatotropic dermatoxerasia dermatozoon dermatozoonosis dermatrophia dermatrophy dermenchysis dermestid dermestoid dermic dermis dermitis dermoblast dermobranchiata dermobranchiate dermochrome dermococcus dermogastric dermographia dermographic dermographism dermography dermohemal dermohemia dermohumeral dermoid dermoidal dermoidectomy dermol dermolysis dermomuscular dermomycosis dermoneural dermoneurosis dermonosology dermoosseous dermoossification dermopathic dermopathy dermophlebitis dermophobe dermophyte dermophytic dermoplasty dermopteran dermopterous dermoreaction dermorhynchous dermosclerite dermoskeletal dermoskeleton dermostenosis dermostosis dermosynovitis dermotropic dermovaccine dermutation dern dernier derodidymus derogate derogately derogation derogative derogatively derogator derogatorily derogatoriness derogatory derotremate derotrematous derotreme derout derrick derricking derrickman derride derries derringer derry dertrotheca dertrum deruinate deruralize derust dervish dervishhood dervishism dervishlike desaccharification desacralization desacralize desalt desamidization desand desaturate desaturation desaurin descale descant descanter descantist descend descendable descendance descendant descendence descendent descendental descendentalism descendentalist descendentalistic descender descendibility descendible descending descendingly descension descensional descensionist descensive descent descloizite descort describability describable describably describe describer descrier descript description descriptionist descriptionless descriptive descriptively descriptiveness descriptory descrive descry deseasonalize desecrate desecrater desecration desectionalize deseed desegmentation desegmented desensitization desensitize desensitizer desentimentalize deseret desert deserted desertedly desertedness deserter desertful desertfully desertic deserticolous desertion desertism desertless desertlessly desertlike desertness desertress desertrice desertward deserve deserved deservedly deservedness deserveless deserver deserving deservingly deservingness desex desexualization desexualize deshabille desi desiccant desiccate desiccation desiccative desiccator desiccatory desiderant desiderata desiderate desideration desiderative desideratum desight desightment design designable designate designation designative designator designatory designatum designed designedly designedness designee designer designful designfully designfulness designing designingly designless designlessly designlessness desilicate desilicification desilicify desiliconization desiliconize desilver desilverization desilverize desilverizer desinence desinent desiodothyroxine desipience desipiency desipient desirability desirable desirableness desirably desire desired desiredly desiredness desireful desirefulness desireless desirer desiringly desirous desirously desirousness desist desistance desistive desition desize desk desklike deslime desma desmachymatous desmachyme desmacyte desman desmarestiaceous desmectasia desmepithelium desmic desmid desmidiaceous desmidiologist desmidiology desmine desmitis desmocyte desmocytoma desmodont desmodynia desmogen desmogenous desmognathism desmognathous desmography desmohemoblast desmoid desmology desmoma desmon desmoneoplasm desmonosology desmopathologist desmopathology desmopathy desmopelmous desmopexia desmopyknosis desmorrhexis desmosis desmosite desmotomy desmotrope desmotropic desmotropism desocialization desocialize desolate desolately desolateness desolater desolating desolatingly desolation desolative desonation desophisticate desophistication desorption desoxalate desoxyanisoin desoxybenzoin desoxycinchonine desoxycorticosterone desoxymorphine desoxyribonucleic despair despairer despairful despairfully despairfulness despairing despairingly despairingness despecialization despecialize despecificate despecification despect desperacy desperado desperadoism desperate desperately desperateness desperation despicability despicable despicableness despicably despiritualization despiritualize despisable despisableness despisal despise despisedness despisement despiser despisingly despite despiteful despitefully despitefulness despiteous despiteously despoil despoiler despoilment despoliation despond despondence despondency despondent despondently desponder desponding despondingly despot despotat despotic despotically despoticalness despoticly despotism despotist despotize despumate despumation desquamate desquamation desquamative desquamatory dess dessa dessert dessertspoon dessertspoonful dessiatine dessil destabilize destain destandardize desterilization desterilize destinate destination destine destinezite destinism destinist destiny destitute destitutely destituteness destitution destour destress destrier destroy destroyable destroyer destroyingly destructibility destructible destructibleness destruction destructional destructionism destructionist destructive destructively destructiveness destructivism destructivity destructor destructuralize desubstantiate desucration desuete desuetude desugar desugarize desulphur desulphurate desulphuration desulphurization desulphurize desulphurizer desultor desultorily desultoriness desultorious desultory desuperheater desyatin desyl desynapsis desynaptic desynonymization desynonymize detach detachability detachable detachableness detachably detached detachedly detachedness detacher detachment detail detailed detailedly detailedness detailer detailism detailist detain detainable detainal detainer detainingly detainment detar detassel detax detect detectability detectable detectably detectaphone detecter detectible detection detective detectivism detector detenant detent detention detentive deter deterge detergence detergency detergent detergible deteriorate deterioration deteriorationist deteriorative deteriorator deteriorism deteriority determent determinability determinable determinableness determinably determinacy determinant determinantal determinate determinately determinateness determination determinative determinatively determinativeness determinator determine determined determinedly determinedness determiner determinism determinist deterministic determinoid deterrence deterrent detersion detersive detersively detersiveness detest detestability detestable detestableness detestably detestation detester dethronable dethrone dethronement dethroner dethyroidism detin detinet detinue detonable detonate detonation detonative detonator detorsion detour detoxicant detoxicate detoxication detoxicator detoxification detoxify detract detracter detractingly detraction detractive detractively detractiveness detractor detractory detractress detrain detrainment detribalization detribalize detriment detrimental detrimentality detrimentally detrimentalness detrital detrited detrition detritus detrude detruncate detruncation detrusion detrusive detrusor detubation detumescence detune detur deuce deuced deucedly deul deurbanize deutencephalic deutencephalon deuteragonist deuteranomal deuteranomalous deuteranope deuteranopia deuteranopic deuteric deuteride deuterium deuteroalbumose deuterocanonical deuterocasease deuterocone deuteroconid deuterodome deuteroelastose deuterofibrinose deuterogamist deuterogamy deuterogelatose deuterogenic deuteroglobulose deuteromorphic deuteromyosinose deuteron deuteropathic deuteropathy deuteroplasm deuteroprism deuteroproteose deuteroscopic deuteroscopy deuterostoma deuterostomatous deuterotokous deuterotoky deuterotype deuterovitellose deuterozooid deutobromide deutocarbonate deutochloride deutomala deutomalal deutomalar deutomerite deuton deutonephron deutonymph deutonymphal deutoplasm deutoplasmic deutoplastic deutoscolex deutoxide dev deva devachan devadasi devall devaloka devalorize devaluate devaluation devalue devance devaporate devaporation devast devastate devastating devastatingly devastation devastative devastator devastavit devaster devata develin develop developability developable developedness developer developist development developmental developmentalist developmentally developmentarian developmentary developmentist developoid devertebrated devest deviability deviable deviancy deviant deviate deviation deviationism deviationist deviative deviator deviatory device deviceful devicefully devicefulness devil devilbird devildom deviled deviler deviless devilet devilfish devilhood deviling devilish devilishly devilishness devilism devilize devilkin devillike devilman devilment devilmonger devilry devilship deviltry devilward devilwise devilwood devily devious deviously deviousness devirginate devirgination devirginator devirilize devisable devisal deviscerate devisceration devise devisee deviser devisor devitalization devitalize devitalized devitaminize devitrification devitrify devocalization devocalize devoice devoid devoir devolatilize devolute devolution devolutionary devolutionist devolve devolvement devonite devonport devonshire devorative devote devoted devotedly devotedness devotee devoteeism devotement devoter devotion devotional devotionalism devotionalist devotionality devotionally devotionalness devotionate devotionist devour devourable devourer devouress devouring devouringly devouringness devourment devout devoutless devoutlessly devoutlessness devoutly devoutness devow devulcanization devulcanize devulgarize devvel dew dewan dewanee dewanship dewater dewaterer dewax dewbeam dewberry dewclaw dewclawed dewcup dewdamp dewdrop dewdropper dewer deweylite dewfall dewflower dewily dewiness dewlap dewlapped dewless dewlight dewlike dewool deworm dewret dewtry dewworm dewy dexiocardia dexiotrope dexiotropic dexiotropism dexiotropous dexter dexterical dexterity dexterous dexterously dexterousness dextrad dextral dextrality dextrally dextran dextraural dextrin dextrinase dextrinate dextrinize dextrinous dextro dextroaural dextrocardia dextrocardial dextrocerebral dextrocular dextrocularity dextroduction dextroglucose dextrogyrate dextrogyration dextrogyratory dextrogyrous dextrolactic dextrolimonene dextropinene dextrorotary dextrorotatary dextrorotation dextrorsal dextrorse dextrorsely dextrosazone dextrose dextrosinistral dextrosinistrally dextrosuria dextrotartaric dextrotropic dextrotropous dextrous dextrously dextrousness dextroversion dey deyhouse deyship deywoman dezinc dezincation dezincification dezincify dezymotize dha dhabb dhai dhak dhamnoo dhan dhangar dhanuk dhanush dharana dharani dharma dharmakaya dharmashastra dharmasmriti dharmasutra dharmsala dharna dhaura dhauri dhava dhaw dheri dhobi dhole dhoni dhoon dhoti dhoul dhow dhu dhunchee dhunchi dhurra dhyal dhyana di diabase diabasic diabetes diabetic diabetogenic diabetogenous diabetometer diablerie diabolarch diabolarchy diabolatry diabolepsy diaboleptic diabolic diabolical diabolically diabolicalness diabolification diabolify diabolism diabolist diabolization diabolize diabological diabology diabolology diabrosis diabrotic diacanthous diacaustic diacetamide diacetate diacetic diacetin diacetine diacetonuria diaceturia diacetyl diacetylene diachoretic diachronic diachylon diachylum diacid diacipiperazine diaclase diaclasis diaclastic diacle diaclinal diacodion diacoele diacoelia diaconal diaconate diaconia diaconicon diaconicum diacope diacranterian diacranteric diacrisis diacritic diacritical diacritically diacromyodian diact diactin diactinal diactinic diactinism diadelphian diadelphic diadelphous diadem diaderm diadermic diadoche diadochite diadochokinesia diadochokinetic diadromous diadumenus diaene diaereses diaeresis diaeretic diaetetae diagenesis diagenetic diageotropic diageotropism diaglyph diaglyphic diagnosable diagnose diagnoseable diagnoses diagnosis diagnostic diagnostically diagnosticate diagnostication diagnostician diagnostics diagometer diagonal diagonality diagonalize diagonally diagonalwise diagonic diagram diagrammatic diagrammatical diagrammatician diagrammatize diagrammeter diagrammitically diagraph diagraphic diagraphical diagraphics diagredium diagrydium diaheliotropic diaheliotropically diaheliotropism diakinesis dial dialcohol dialdehyde dialect dialectal dialectalize dialectally dialectic dialectical dialectically dialectician dialecticism dialecticize dialectics dialectologer dialectological dialectologist dialectology dialector dialer dialin dialing dialist dialkyl dialkylamine diallage diallagic diallagite diallagoid diallel diallelon diallelus diallyl dialogic dialogical dialogically dialogism dialogist dialogistic dialogistical dialogistically dialogite dialogize dialogue dialoguer dialuric dialycarpous dialypetalous dialyphyllous dialysepalous dialysis dialystaminous dialystelic dialystely dialytic dialytically dialyzability dialyzable dialyzate dialyzation dialyzator dialyze dialyzer diamagnet diamagnetic diamagnetically diamagnetism diamantiferous diamantine diamantoid diamb diambic diamesogamous diameter diametral diametrally diametric diametrical diametrically diamicton diamide diamidogen diamine diaminogen diaminogene diammine diamminobromide diamminonitrate diammonium diamond diamondback diamonded diamondiferous diamondize diamondlike diamondwise diamondwork diamorphine diamylose dian diander diandrian diandrous dianetics dianilid dianilide dianisidin dianisidine dianite dianodal dianoetic dianoetical dianoetically diapalma diapase diapasm diapason diapasonal diapause diapedesis diapedetic diapensiaceous diapente diaper diapering diaphane diaphaneity diaphanie diaphanometer diaphanometric diaphanometry diaphanoscope diaphanoscopy diaphanotype diaphanous diaphanously diaphanousness diaphany diaphone diaphonia diaphonic diaphonical diaphony diaphoresis diaphoretic diaphoretical diaphorite diaphote diaphototropic diaphototropism diaphragm diaphragmal diaphragmatic diaphragmatically diaphtherin diaphysial diaphysis diaplasma diaplex diaplexal diaplexus diapnoic diapnotic diapophysial diapophysis diapositive diapsid diapsidan diapyesis diapyetic diarch diarchial diarchic diarchy diarhemia diarial diarian diarist diaristic diarize diarrhea diarrheal diarrheic diarrhetic diarsenide diarthric diarthrodial diarthrosis diarticular diary diaschisis diaschisma diaschistic diascope diascopy diascord diascordium diaskeuasis diaskeuast diaspidine diaspine diaspirin diaspore diastaltic diastase diastasic diastasimetry diastasis diastataxic diastataxy diastatic diastatically diastem diastema diastematic diastematomyelia diaster diastole diastolic diastomatic diastral diastrophe diastrophic diastrophism diastrophy diasynthesis diasyrm diatessaron diathermacy diathermal diathermancy diathermaneity diathermanous diathermic diathermize diathermometer diathermotherapy diathermous diathermy diathesic diathesis diathetic diatom diatomacean diatomaceoid diatomaceous diatomean diatomic diatomicity diatomiferous diatomin diatomist diatomite diatomous diatonic diatonical diatonically diatonous diatoric diatreme diatribe diatribist diatropic diatropism diaulic diaulos diaxial diaxon diazenithal diazeuctic diazeuxis diazide diazine diazoamine diazoamino diazoaminobenzene diazoanhydride diazoate diazobenzene diazohydroxide diazoic diazoimide diazoimido diazole diazoma diazomethane diazonium diazotate diazotic diazotizability diazotizable diazotization diazotize diazotype dib dibase dibasic dibasicity dibatag dibber dibble dibbler dibbuk dibenzophenazine dibenzopyrrole dibenzoyl dibenzyl dibhole diblastula diborate dibrach dibranch dibranchiate dibranchious dibrom dibromid dibromide dibromoacetaldehyde dibromobenzene dibs dibstone dibutyrate dibutyrin dicacodyl dicaeology dicalcic dicalcium dicarbonate dicarbonic dicarboxylate dicarboxylic dicarpellary dicaryon dicaryophase dicaryophyte dicaryotic dicast dicastery dicastic dicatalectic dicatalexis dice diceboard dicebox dicecup dicellate diceman dicentrine dicephalism dicephalous dicephalus diceplay dicer dicerion dicerous dicetyl dich dichas dichasial dichasium dichastic dichlamydeous dichloramine dichlorhydrin dichloride dichloroacetic dichlorohydrin dichloromethane dichocarpism dichocarpous dichogamous dichogamy dichopodial dichoptic dichord dichoree dichotic dichotomal dichotomic dichotomically dichotomist dichotomistic dichotomization dichotomize dichotomous dichotomously dichotomy dichroic dichroiscope dichroism dichroite dichroitic dichromasy dichromat dichromate dichromatic dichromatism dichromic dichromism dichronous dichrooscope dichroous dichroscope dichroscopic dicing dick dickcissel dickens dicker dickey dickeybird dickinsonite dicky diclinic diclinism diclinous dicoccous dicodeine dicoelious dicolic dicolon dicondylian dicot dicotyl dicotyledon dicotyledonary dicotyledonous dicotylous dicoumarin dicranaceous dicranoid dicranterian dicrotal dicrotic dicrotism dicrotous dicta dictate dictatingly dictation dictational dictative dictator dictatorial dictatorialism dictatorially dictatorialness dictatorship dictatory dictatress dictatrix dictature dictic diction dictionary dictum dictynid dictyoceratine dictyodromous dictyogen dictyogenous dictyoid dictyonine dictyopteran dictyosiphonaceous dictyosome dictyostele dictyostelic dictyotaceous dictyotic dicyanide dicyanine dicyanodiamide dicyanogen dicycle dicyclic dicyclist dicyemid dicynodont did didactic didactical didacticality didactically didactician didacticism didacticity didactics didactive didactyl didactylism didactylous didapper didascalar didascaliae didascalic didascalos didascaly didder diddle diddler diddy didelph didelphian didelphic didelphid didelphine didelphoid didelphous didepsid didepside didie didine didle didna didnt didodecahedral didodecahedron didrachma didrachmal didromy didst diductor didym didymate didymia didymitis didymium didymoid didymolite didymous didymus didynamian didynamic didynamous didynamy die dieb dieback diectasis diedral diedric diehard dielectric dielectrically dielike diem diemaker diemaking diencephalic diencephalon diene dier diesel dieselization dieselize diesinker diesinking diesis diestock diet dietal dietarian dietary dieter dietetic dietetically dietetics dietetist diethanolamine diethyl diethylamine diethylenediamine diethylstilbestrol dietic dietician dietics dietine dietist dietitian dietotherapeutics dietotherapy dietotoxic dietotoxicity dietrichite dietzeite diewise diezeugmenon diferrion diffame diffarreation differ difference differencingly different differentia differentiable differential differentialize differentially differentiant differentiate differentiation differentiator differently differentness differingly difficile difficileness difficult difficultly difficultness difficulty diffidation diffide diffidence diffident diffidently diffidentness diffinity diffluence diffluent difform difformed difformity diffract diffraction diffractive diffractively diffractiveness diffractometer diffrangibility diffrangible diffugient diffusate diffuse diffused diffusedly diffusely diffuseness diffuser diffusibility diffusible diffusibleness diffusibly diffusimeter diffusiometer diffusion diffusionism diffusionist diffusive diffusively diffusiveness diffusivity diffusor diformin dig digallate digallic digametic digamist digamma digammated digammic digamous digamy digastric digeneous digenesis digenetic digenic digenous digeny digerent digest digestant digested digestedly digestedness digester digestibility digestible digestibleness digestibly digestion digestional digestive digestively digestiveness digestment diggable digger digging diggings dight dighter digit digital digitalein digitalin digitalis digitalism digitalization digitalize digitally digitate digitated digitately digitation digitiform digitigrade digitigradism digitinervate digitinerved digitipinnate digitize digitizer digitogenin digitonin digitoplantar digitorium digitoxin digitoxose digitule digitus digladiate digladiation digladiator diglossia diglot diglottic diglottism diglottist diglucoside diglyceride diglyph diglyphic digmeat dignification dignified dignifiedly dignifiedness dignify dignitarial dignitarian dignitary dignity digoneutic digoneutism digonoporous digonous digram digraph digraphic digredience digrediency digredient digress digressingly digression digressional digressionary digressive digressively digressiveness digressory digs diguanide digynian digynous dihalide dihalo dihalogen dihedral dihedron dihexagonal dihexahedral dihexahedron dihybrid dihybridism dihydrate dihydrated dihydrazone dihydric dihydride dihydrite dihydrocupreine dihydrocuprin dihydrogen dihydrol dihydronaphthalene dihydronicotine dihydrotachysterol dihydroxy dihydroxysuccinic dihydroxytoluene dihysteria diiamb diiambus diiodide diiodo diiodoform diipenates diisatogen dijudicate dijudication dika dikage dikamali dikaryon dikaryophase dikaryophasic dikaryophyte dikaryophytic dikaryotic dike dikegrave dikelocephalid diker dikereeve dikeside diketo diketone dikkop diktyonite dilacerate dilaceration dilambdodont dilamination dilapidate dilapidated dilapidation dilapidator dilatability dilatable dilatableness dilatably dilatancy dilatant dilatate dilatation dilatative dilatator dilatatory dilate dilated dilatedly dilatedness dilater dilatingly dilation dilative dilatometer dilatometric dilatometry dilator dilatorily dilatoriness dilatory dildo dilection dilemma dilemmatic dilemmatical dilemmatically dilettant dilettante dilettanteish dilettanteism dilettanteship dilettanti dilettantish dilettantism dilettantist diligence diligency diligent diligentia diligently diligentness dilker dill dilleniaceous dilleniad dilli dillier dilligrout dilling dillseed dillue dilluer dillweed dilly dillydallier dillydally dillyman dilo dilogy diluent dilute diluted dilutedly dilutedness dilutee dilutely diluteness dilutent diluter dilution dilutive dilutor diluvia diluvial diluvialist diluvian diluvianism diluvion diluvium dim dimagnesic dimanganion dimanganous dimastigate dimber dimberdamber dimble dime dimensible dimension dimensional dimensionality dimensionally dimensioned dimensionless dimensive dimer dimeran dimercuric dimercurion dimercury dimeric dimeride dimerism dimerization dimerlie dimerous dimetallic dimeter dimethoxy dimethyl dimethylamine dimethylamino dimethylaniline dimethylbenzene dimetria dimetric dimication dimidiate dimidiation diminish diminishable diminishableness diminisher diminishingly diminishment diminuendo diminutal diminute diminution diminutival diminutive diminutively diminutiveness diminutivize dimiss dimission dimissorial dimissory dimit dimity dimly dimmed dimmedness dimmer dimmest dimmet dimmish dimness dimolecular dimoric dimorph dimorphic dimorphism dimorphous dimple dimplement dimply dimps dimpsy dimyarian dimyaric din dinamode dinaphthyl dinar dinder dindle dine diner dinergate dineric dinero dinette dineuric ding dingar dingbat dingdong dinge dingee dinghee dinghy dingily dinginess dingle dingleberry dinglebird dingledangle dingly dingmaul dingo dingus dingy dinheiro dinic dinical dining dinitrate dinitril dinitrile dinitro dinitrobenzene dinitrocellulose dinitrophenol dinitrotoluene dink dinkey dinkum dinky dinmont dinner dinnerless dinnerly dinnertime dinnerware dinnery dinoceratan dinoceratid dinoflagellate dinomic dinornithic dinornithid dinornithine dinornithoid dinosaur dinosaurian dinothere dinotherian dinsome dint dintless dinus diobely diobol diocesan diocese dioctahedral diode diodont dioecian dioeciodimorphous dioeciopolygamous dioecious dioeciously dioeciousness dioecism dioecy dioestrous dioestrum dioestrus diogenite dioicous diol diolefin diolefinic dionise dionym dionymal diopside dioptase diopter dioptograph dioptometer dioptometry dioptoscopy dioptra dioptral dioptrate dioptric dioptrical dioptrically dioptrics dioptrometer dioptrometry dioptroscopy dioptry diorama dioramic diordinal diorite dioritic diorthosis diorthotic dioscoreaceous dioscorein dioscorine diose diosmin diosmose diosmosis diosmotic diosphenol diospyraceous diota diotic diovular dioxane dioxide dioxime dioxindole dioxy dip diparentum dipartite dipartition dipaschal dipentene dipeptid dipeptide dipetalous dipetto diphase diphaser diphasic diphead diphenol diphenyl diphenylamine diphenylchloroarsine diphenylene diphenylenimide diphenylguanidine diphenylmethane diphenylquinomethane diphenylthiourea diphosgene diphosphate diphosphide diphosphoric diphosphothiamine diphrelatic diphtheria diphtherial diphtherian diphtheric diphtheritic diphtheritically diphtheritis diphtheroid diphtheroidal diphtherotoxin diphthong diphthongal diphthongalize diphthongally diphthongation diphthongic diphthongization diphthongize diphycercal diphycercy diphygenic diphyletic diphyllous diphyodont diphyozooid diphyzooid dipicrate dipicrylamin dipicrylamine diplacusis diplanar diplanetic diplanetism diplantidian diplarthrism diplarthrous diplasiasmus diplasic diplasion diplegia dipleidoscope dipleura dipleural dipleurogenesis dipleurogenetic diplex diplobacillus diplobacterium diploblastic diplocardia diplocardiac diplocaulescent diplocephalous diplocephalus diplocephaly diplochlamydeous diplococcal diplococcemia diplococcic diplococcoid diplococcus diploconical diplocoria diploe diploetic diplogangliate diplogenesis diplogenetic diplogenic diploglossate diplograph diplographic diplographical diplography diplohedral diplohedron diploic diploid diploidic diploidion diploidy diplois diplokaryon diploma diplomacy diplomat diplomate diplomatic diplomatical diplomatically diplomatics diplomatism diplomatist diplomatize diplomatology diplomyelia diplonema diplonephridia diploneural diplont diploperistomic diplophase diplophyte diplopia diplopic diploplacula diploplacular diploplaculate diplopod diplopodic diplopterous diplopy diplosis diplosome diplosphenal diplosphene diplospondylic diplospondylism diplostemonous diplostemony diplostichous diplotegia diplotene diplumbic dipneumonous dipneustal dipnoan dipnoid dipnoous dipode dipodic dipody dipolar dipolarization dipolarize dipole diporpa dipotassic dipotassium dipped dipper dipperful dipping diprimary diprismatic dipropargyl dipropyl diprotodont dipsacaceous dipsaceous dipsas dipsetic dipsey dipsomania dipsomaniac dipsomaniacal dipsosis dipter dipteraceous dipterad dipteral dipteran dipterist dipterocarp dipterocarpaceous dipterocarpous dipterocecidium dipterological dipterologist dipterology dipteron dipteros dipterous diptote diptych dipware dipygus dipylon dipyre dipyrenous dipyridyl dird dirdum dire direct directable directed directer direction directional directionally directionless directitude directive directively directiveness directivity directly directness director directoral directorate directorial directorially directorship directory directress directrices directrix direful direfully direfulness direly dirempt diremption direness direption dirge dirgeful dirgelike dirgeman dirgler dirhem dirigent dirigibility dirigible dirigomotor diriment dirk dirl dirndl dirt dirtbird dirtboard dirten dirtily dirtiness dirtplate dirty dis disability disable disabled disablement disabusal disabuse disacceptance disaccharide disaccharose disaccommodate disaccommodation disaccord disaccordance disaccordant disaccustom disaccustomed disaccustomedness disacidify disacknowledge disacknowledgement disacquaint disacquaintance disadjust disadorn disadvance disadvantage disadvantageous disadvantageously disadvantageousness disadventure disadventurous disadvise disaffect disaffectation disaffected disaffectedly disaffectedness disaffection disaffectionate disaffiliate disaffiliation disaffirm disaffirmance disaffirmation disaffirmative disafforest disafforestation disafforestment disagglomeration disaggregate disaggregation disaggregative disagio disagree disagreeability disagreeable disagreeableness disagreeably disagreed disagreement disagreer disalicylide disalign disalignment disalike disallow disallowable disallowableness disallowance disally disamenity disanagrammatize disanalogous disangularize disanimal disanimate disanimation disannex disannexation disannul disannuller disannulment disanoint disanswerable disapostle disapparel disappear disappearance disappearer disappearing disappoint disappointed disappointedly disappointer disappointing disappointingly disappointingness disappointment disappreciate disappreciation disapprobation disapprobative disapprobatory disappropriate disappropriation disapprovable disapproval disapprove disapprover disapprovingly disaproned disarchbishop disarm disarmament disarmature disarmed disarmer disarming disarmingly disarrange disarrangement disarray disarticulate disarticulation disarticulator disasinate disasinize disassemble disassembly disassimilate disassimilation disassimilative disassociate disassociation disaster disastimeter disastrous disastrously disastrousness disattaint disattire disattune disauthenticate disauthorize disavow disavowable disavowal disavowedly disavower disavowment disawa disazo disbalance disbalancement disband disbandment disbar disbark disbarment disbelief disbelieve disbeliever disbelieving disbelievingly disbench disbenchment disbloom disbody disbosom disbowel disbrain disbranch disbud disbudder disburden disburdenment disbursable disburse disbursement disburser disburthen disbury disbutton disc discage discal discalceate discalced discanonization discanonize discanter discantus discapacitate discard discardable discarder discardment discarnate discarnation discase discastle discept disceptation disceptator discern discerner discernible discernibleness discernibly discerning discerningly discernment discerp discerpibility discerpible discerpibleness discerptibility discerptible discerptibleness discerption discharacter discharge dischargeable dischargee discharger discharging discharity discharm dischase discifloral disciform discigerous discinct discinoid disciple disciplelike discipleship disciplinability disciplinable disciplinableness disciplinal disciplinant disciplinarian disciplinarianism disciplinarily disciplinary disciplinative disciplinatory discipline discipliner discipular discircumspection discission discitis disclaim disclaimant disclaimer disclamation disclamatory disclass disclassify disclike disclimax discloister disclose disclosed discloser disclosive disclosure discloud discoach discoactine discoblastic discoblastula discobolus discocarp discocarpium discocarpous discocephalous discodactyl discodactylous discogastrula discoglossid discoglossoid discographical discography discohexaster discoid discoidal discolichen discolith discolor discolorate discoloration discolored discoloredness discolorization discolorment discolourization discomedusan discomedusoid discomfit discomfiter discomfiture discomfort discomfortable discomfortableness discomforting discomfortingly discommend discommendable discommendableness discommendably discommendation discommender discommode discommodious discommodiously discommodiousness discommodity discommon discommons discommunity discomorula discompliance discompose discomposed discomposedly discomposedness discomposing discomposingly discomposure discomycete discomycetous disconanthous disconcert disconcerted disconcertedly disconcertedness disconcerting disconcertingly disconcertingness disconcertion disconcertment disconcord disconduce disconducive disconform disconformable disconformity discongruity disconjure disconnect disconnected disconnectedly disconnectedness disconnecter disconnection disconnective disconnectiveness disconnector disconsider disconsideration disconsolate disconsolately disconsolateness disconsolation disconsonancy disconsonant discontent discontented discontentedly discontentedness discontentful discontenting discontentive discontentment discontiguity discontiguous discontiguousness discontinuable discontinuance discontinuation discontinue discontinuee discontinuer discontinuity discontinuor discontinuous discontinuously discontinuousness disconula disconvenience disconvenient disconventicle discophile discophoran discophore discophorous discoplacenta discoplacental discoplacentalian discoplasm discopodous discord discordance discordancy discordant discordantly discordantness discordful discording discorporate discorrespondency discorrespondent discount discountable discountenance discountenancer discounter discouple discourage discourageable discouragement discourager discouraging discouragingly discouragingness discourse discourseless discourser discoursive discoursively discoursiveness discourteous discourteously discourteousness discourtesy discous discovenant discover discoverability discoverable discoverably discovered discoverer discovert discoverture discovery discreate discreation discredence discredit discreditability discreditable discreet discreetly discreetness discrepance discrepancy discrepant discrepantly discrepate discrepation discrested discrete discretely discreteness discretion discretional discretionally discretionarily discretionary discretive discretively discretiveness discriminability discriminable discriminal discriminant discriminantal discriminate discriminately discriminateness discriminating discriminatingly discrimination discriminational discriminative discriminatively discriminator discriminatory discrown disculpate disculpation disculpatory discumber discursative discursativeness discursify discursion discursive discursively discursiveness discursory discursus discurtain discus discuss discussable discussant discusser discussible discussion discussional discussionism discussionist discussive discussment discutable discutient disdain disdainable disdainer disdainful disdainfully disdainfulness disdainly disdeceive disdenominationalize disdiaclast disdiaclastic disdiapason disdiazo disdiplomatize disdodecahedroid disdub disease diseased diseasedly diseasedness diseaseful diseasefulness disecondary disedge disedification disedify diseducate diselder diselectrification diselectrify diselenide disematism disembargo disembark disembarkation disembarkment disembarrass disembarrassment disembattle disembed disembellish disembitter disembocation disembodiment disembody disembogue disemboguement disembosom disembowel disembowelment disembower disembroil disemburden diseme disemic disemplane disemploy disemployment disempower disenable disenablement disenact disenactment disenamor disenamour disenchain disenchant disenchanter disenchantingly disenchantment disenchantress disencharm disenclose disencumber disencumberment disencumbrance disendow disendower disendowment disenfranchise disenfranchisement disengage disengaged disengagedness disengagement disengirdle disenjoy disenjoyment disenmesh disennoble disennui disenshroud disenslave disensoul disensure disentail disentailment disentangle disentanglement disentangler disenthral disenthrall disenthrallment disenthralment disenthrone disenthronement disentitle disentomb disentombment disentrain disentrainment disentrammel disentrance disentrancement disentwine disenvelop disepalous disequalize disequalizer disequilibrate disequilibration disequilibrium disestablish disestablisher disestablishment disestablishmentarian disesteem disesteemer disestimation disexcommunicate disfaith disfame disfashion disfavor disfavorer disfeature disfeaturement disfellowship disfen disfiguration disfigurative disfigure disfigurement disfigurer disfiguringly disflesh disfoliage disforest disforestation disfranchise disfranchisement disfranchiser disfrequent disfriar disfrock disfurnish disfurnishment disgarland disgarnish disgarrison disgavel disgeneric disgenius disgig disglorify disglut disgood disgorge disgorgement disgorger disgospel disgown disgrace disgraceful disgracefully disgracefulness disgracement disgracer disgracious disgradation disgrade disgregate disgregation disgruntle disgruntlement disguisable disguisal disguise disguised disguisedly disguisedness disguiseless disguisement disguiser disguising disgulf disgust disgusted disgustedly disgustedness disguster disgustful disgustfully disgustfulness disgusting disgustingly disgustingness dish dishabilitate dishabilitation dishabille dishabituate dishallow dishallucination disharmonic disharmonical disharmonious disharmonism disharmonize disharmony dishboard dishcloth dishclout disheart dishearten disheartener disheartening dishearteningly disheartenment disheaven dished dishellenize dishelm disher disherent disherison disherit disheritment dishevel disheveled dishevelment dishexecontahedroid dishful dishlike dishling dishmaker dishmaking dishmonger dishome dishonest dishonestly dishonor dishonorable dishonorableness dishonorably dishonorary dishonorer dishorn dishorner dishorse dishouse dishpan dishpanful dishrag dishumanize dishwasher dishwashing dishwashings dishwater dishwatery dishwiper dishwiping disidentify disilane disilicane disilicate disilicic disilicid disilicide disillude disilluminate disillusion disillusionist disillusionize disillusionizer disillusionment disillusive disimagine disimbitter disimitate disimitation disimmure disimpark disimpassioned disimprison disimprisonment disimprove disimprovement disincarcerate disincarceration disincarnate disincarnation disinclination disincline disincorporate disincorporation disincrust disincrustant disincrustion disindividualize disinfect disinfectant disinfecter disinfection disinfective disinfector disinfest disinfestation disinfeudation disinflame disinflate disinflation disingenuity disingenuous disingenuously disingenuousness disinherison disinherit disinheritable disinheritance disinhume disinsulation disinsure disintegrable disintegrant disintegrate disintegration disintegrationist disintegrative disintegrator disintegratory disintegrity disintegrous disintensify disinter disinterest disinterested disinterestedly disinterestedness disinteresting disinterment disintertwine disintrench disintricate disinvagination disinvest disinvestiture disinvigorate disinvite disinvolve disjasked disject disjection disjoin disjoinable disjoint disjointed disjointedly disjointedness disjointly disjointure disjunct disjunction disjunctive disjunctively disjunctor disjuncture disjune disk diskelion diskless disklike dislaurel disleaf dislegitimate dislevelment dislicense dislikable dislike dislikelihood disliker disliking dislimn dislink dislip disload dislocability dislocable dislocate dislocated dislocatedly dislocatedness dislocation dislocator dislocatory dislodge dislodgeable dislodgement dislove disloyal disloyalist disloyally disloyalty disluster dismain dismal dismality dismalize dismally dismalness disman dismantle dismantlement dismantler dismarble dismark dismarket dismask dismast dismastment dismay dismayable dismayed dismayedness dismayful dismayfully dismayingly disme dismember dismembered dismemberer dismemberment dismembrate dismembrator disminion disminister dismiss dismissable dismissal dismissible dismissingly dismission dismissive dismissory dismoded dismount dismountable dismutation disna disnaturalization disnaturalize disnature disnest disnew disniche disnosed disnumber disobedience disobedient disobediently disobey disobeyal disobeyer disobligation disoblige disobliger disobliging disobligingly disobligingness disoccupation disoccupy disodic disodium disomatic disomatous disomic disomus disoperculate disorb disorchard disordained disorder disordered disorderedly disorderedness disorderer disorderliness disorderly disordinated disordination disorganic disorganization disorganize disorganizer disorient disorientate disorientation disown disownable disownment disoxygenate disoxygenation disozonize dispapalize disparage disparageable disparagement disparager disparaging disparagingly disparate disparately disparateness disparation disparity dispark dispart dispartment dispassionate dispassionately dispassionateness dispassioned dispatch dispatcher dispatchful dispatriated dispauper dispauperize dispeace dispeaceful dispel dispeller dispend dispender dispendious dispendiously dispenditure dispensability dispensable dispensableness dispensary dispensate dispensation dispensational dispensative dispensatively dispensator dispensatorily dispensatory dispensatress dispensatrix dispense dispenser dispensingly dispeople dispeoplement dispeopler dispergate dispergation dispergator dispericraniate disperiwig dispermic dispermous dispermy dispersal dispersant disperse dispersed dispersedly dispersedness dispersement disperser dispersibility dispersible dispersion dispersity dispersive dispersively dispersiveness dispersoid dispersoidological dispersoidology dispersonalize dispersonate dispersonification dispersonify dispetal disphenoid dispiece dispireme dispirit dispirited dispiritedly dispiritedness dispiritingly dispiritment dispiteous dispiteously dispiteousness displace displaceability displaceable displacement displacency displacer displant display displayable displayed displayer displease displeased displeasedly displeaser displeasing displeasingly displeasingness displeasurable displeasurably displeasure displeasurement displenish displicency displume displuviate dispondaic dispondee dispone disponee disponent disponer dispope dispopularize disporous disport disportive disportment disposability disposable disposableness disposal dispose disposed disposedly disposedness disposer disposingly disposition dispositional dispositioned dispositive dispositively dispossess dispossession dispossessor dispossessory dispost disposure dispowder dispractice dispraise dispraiser dispraisingly dispread dispreader disprejudice disprepare disprince disprison disprivacied disprivilege disprize disprobabilization disprobabilize disprobative dispromise disproof disproportion disproportionable disproportionableness disproportionably disproportional disproportionality disproportionally disproportionalness disproportionate disproportionately disproportionateness disproportionation disprovable disproval disprove disprovement disproven disprover dispulp dispunct dispunishable dispunitive disputability disputable disputableness disputably disputant disputation disputatious disputatiously disputatiousness disputative disputatively disputativeness disputator dispute disputeless disputer disqualification disqualify disquantity disquiet disquieted disquietedly disquietedness disquieten disquieter disquieting disquietingly disquietly disquietness disquietude disquiparancy disquiparant disquiparation disquisite disquisition disquisitional disquisitionary disquisitive disquisitively disquisitor disquisitorial disquisitory disquixote disrank disrate disrealize disrecommendation disregard disregardable disregardance disregardant disregarder disregardful disregardfully disregardfulness disrelated disrelation disrelish disrelishable disremember disrepair disreputability disreputable disreputableness disreputably disreputation disrepute disrespect disrespecter disrespectful disrespectfully disrespectfulness disrestore disring disrobe disrobement disrober disroof disroost disroot disrudder disrump disrupt disruptability disruptable disrupter disruption disruptionist disruptive disruptively disruptiveness disruptment disruptor disrupture diss dissatisfaction dissatisfactoriness dissatisfactory dissatisfied dissatisfiedly dissatisfiedness dissatisfy dissaturate disscepter disseat dissect dissected dissectible dissecting dissection dissectional dissective dissector disseize disseizee disseizin disseizor disseizoress disselboom dissemblance dissemble dissembler dissemblingly dissembly dissemilative disseminate dissemination disseminative disseminator disseminule dissension dissensualize dissent dissentaneous dissentaneousness dissenter dissenterism dissentience dissentiency dissentient dissenting dissentingly dissentious dissentiously dissentism dissentment dissepiment dissepimental dissert dissertate dissertation dissertational dissertationist dissertative dissertator disserve disservice disserviceable disserviceableness disserviceably dissettlement dissever disseverance disseverment disshadow dissheathe disshroud dissidence dissident dissidently dissight dissightly dissiliency dissilient dissimilar dissimilarity dissimilarly dissimilars dissimilate dissimilation dissimilatory dissimile dissimilitude dissimulate dissimulation dissimulative dissimulator dissimule dissimuler dissipable dissipate dissipated dissipatedly dissipatedness dissipater dissipation dissipative dissipativity dissipator dissociability dissociable dissociableness dissocial dissociality dissocialize dissociant dissociate dissociation dissociative dissoconch dissogeny dissogony dissolubility dissoluble dissolubleness dissolute dissolutely dissoluteness dissolution dissolutional dissolutionism dissolutionist dissolutive dissolvable dissolvableness dissolve dissolveability dissolvent dissolver dissolving dissolvingly dissonance dissonancy dissonant dissonantly dissonous dissoul dissuade dissuader dissuasion dissuasive dissuasively dissuasiveness dissuasory dissuit dissuitable dissuited dissyllabic dissyllabification dissyllabify dissyllabism dissyllabize dissyllable dissymmetric dissymmetrical dissymmetrically dissymmetry dissympathize dissympathy distad distaff distain distal distale distally distalwards distance distanceless distancy distannic distant distantly distantness distaste distasted distasteful distastefully distastefulness distater distemonous distemper distemperature distempered distemperedly distemperedness distemperer distenant distend distendedly distender distensibility distensible distensive distent distention disthene disthrall disthrone distich distichous distichously distill distillable distillage distilland distillate distillation distillatory distilled distiller distillery distilling distillmint distinct distinctify distinction distinctional distinctionless distinctive distinctively distinctiveness distinctly distinctness distingue distinguish distinguishability distinguishable distinguishableness distinguishably distinguished distinguishedly distinguisher distinguishing distinguishingly distinguishment distoclusion distomatosis distomatous distome distomian distomiasis distort distorted distortedly distortedness distorter distortion distortional distortionist distortionless distortive distract distracted distractedly distractedness distracter distractibility distractible distractingly distraction distractive distractively distrain distrainable distrainee distrainer distrainment distrainor distraint distrait distraite distraught distress distressed distressedly distressedness distressful distressfully distressfulness distressing distressingly distributable distributary distribute distributed distributedly distributee distributer distribution distributional distributionist distributival distributive distributively distributiveness distributor distributress district distrouser distrust distruster distrustful distrustfully distrustfulness distrustingly distune disturb disturbance disturbative disturbed disturbedly disturber disturbing disturbingly disturn disturnpike disubstituted disubstitution disulfonic disulfuric disulphate disulphide disulphonate disulphone disulphonic disulphoxide disulphuret disulphuric disuniform disuniformity disunify disunion disunionism disunionist disunite disuniter disunity disusage disusance disuse disutility disutilize disvaluation disvalue disvertebrate disvisage disvoice disvulnerability diswarren diswench diswood disworth disyllabic disyllable disyoke dit dita dital ditch ditchbank ditchbur ditchdigger ditchdown ditcher ditchless ditchside ditchwater dite diter diterpene ditertiary ditetragonal dithalous dithecal ditheism ditheist ditheistic ditheistical dithematic dither dithery dithiobenzoic dithioglycol dithioic dithion dithionate dithionic dithionite dithionous dithymol dithyramb dithyrambic dithyrambically ditokous ditolyl ditone ditrematous ditremid ditrichotomous ditriglyph ditriglyphic ditrigonal ditrigonally ditrochean ditrochee ditrochous ditroite dittamy dittander dittany dittay dittied ditto dittogram dittograph dittographic dittography dittology ditty diumvirate diuranate diureide diuresis diuretic diuretically diureticalness diurnal diurnally diurnalness diurnation diurne diurnule diuturnal diuturnity div diva divagate divagation divalence divalent divan divariant divaricate divaricately divaricating divaricatingly divarication divaricator divata dive divekeeper divel divellent divellicate diver diverge divergement divergence divergency divergent divergently diverging divergingly divers diverse diversely diverseness diversicolored diversifiability diversifiable diversification diversified diversifier diversiflorate diversiflorous diversifoliate diversifolious diversiform diversify diversion diversional diversionary diversipedate diversisporous diversity diversly diversory divert divertedly diverter divertibility divertible diverticle diverticular diverticulate diverticulitis diverticulosis diverticulum diverting divertingly divertingness divertisement divertive divertor divest divestible divestitive divestiture divestment divesture dividable dividableness divide divided dividedly dividedness dividend divider dividing dividingly dividual dividualism dividually dividuity dividuous divinable divinail divination divinator divinatory divine divinely divineness diviner divineress diving divinify divining diviningly divinity divinityship divinization divinize divinyl divisibility divisible divisibleness divisibly division divisional divisionally divisionary divisionism divisionist divisionistic divisive divisively divisiveness divisor divisorial divisory divisural divorce divorceable divorcee divorcement divorcer divorcible divorcive divot divoto divulgate divulgater divulgation divulgatory divulge divulgement divulgence divulger divulse divulsion divulsive divulsor divus divvy diwata dixenite dixie dixit dixy dizain dizen dizenment dizoic dizygotic dizzard dizzily dizziness dizzy djasakid djave djehad djerib djersa do doab doable doarium doat doated doater doating doatish dob dobbed dobber dobbin dobbing dobby dobe dobla doblon dobra dobrao dobson doby doc docent docentship dochmiac dochmiacal dochmiasis dochmius docibility docible docibleness docile docilely docility docimasia docimastic docimastical docimasy docimology docity dock dockage docken docker docket dockhead dockhouse dockization dockize dockland dockmackie dockman dockmaster dockside dockyard dockyardman docmac docoglossan docoglossate docosane doctor doctoral doctorally doctorate doctorbird doctordom doctoress doctorfish doctorhood doctorial doctorially doctorization doctorize doctorless doctorlike doctorly doctorship doctress doctrinaire doctrinairism doctrinal doctrinalism doctrinalist doctrinality doctrinally doctrinarian doctrinarianism doctrinarily doctrinarity doctrinary doctrinate doctrine doctrinism doctrinist doctrinization doctrinize doctrix document documental documentalist documentarily documentary documentation documentize dod dodd doddart dodded dodder doddered dodderer doddering doddery doddie dodding doddle doddy doddypoll dodecade dodecadrachm dodecafid dodecagon dodecagonal dodecahedral dodecahedric dodecahedron dodecahydrate dodecahydrated dodecamerous dodecane dodecanoic dodecant dodecapartite dodecapetalous dodecarch dodecarchy dodecasemic dodecastyle dodecastylos dodecasyllabic dodecasyllable dodecatemory dodecatoic dodecatyl dodecatylic dodecuplet dodecyl dodecylene dodecylic dodge dodgeful dodger dodgery dodgily dodginess dodgy dodkin dodlet dodman dodo dodoism dodrans doe doebird doeglic doegling doer does doeskin doesnt doest doff doffer doftberry dog dogal dogate dogbane dogberry dogbite dogblow dogboat dogbolt dogbush dogcart dogcatcher dogdom doge dogedom dogeless dogeship dogface dogfall dogfight dogfish dogfoot dogged doggedly doggedness dogger doggerel doggereler doggerelism doggerelist doggerelize doggerelizer doggery doggess doggish doggishly doggishness doggo doggone doggoned doggrel doggrelize doggy doghead doghearted doghole doghood doghouse dogie dogless doglike dogly dogma dogman dogmata dogmatic dogmatical dogmatically dogmaticalness dogmatician dogmatics dogmatism dogmatist dogmatization dogmatize dogmatizer dogmouth dogplate dogproof dogs dogship dogshore dogskin dogsleep dogstone dogtail dogtie dogtooth dogtoothing dogtrick dogtrot dogvane dogwatch dogwood dogy doigt doiled doily doina doing doings doit doited doitkin doitrified doke dokhma dokimastic dola dolabra dolabrate dolabriform dolcan dolcian dolciano dolcino doldrum doldrums dole dolefish doleful dolefully dolefulness dolefuls dolent dolently dolerite doleritic dolerophanite dolesman dolesome dolesomely dolesomeness doless doli dolia dolichoblond dolichocephal dolichocephali dolichocephalic dolichocephalism dolichocephalize dolichocephalous dolichocephaly dolichocercic dolichocnemic dolichocranial dolichofacial dolichohieric dolichopellic dolichopodous dolichoprosopic dolichos dolichosaur dolichostylous dolichotmema dolichuric dolichurus dolina doline dolioform dolium doll dollar dollarbird dollardee dollardom dollarfish dollarleaf dollbeer dolldom dollface dollfish dollhood dollhouse dollier dolliness dollish dollishly dollishness dollmaker dollmaking dollop dollship dolly dollyman dollyway dolman dolmen dolmenic dolomite dolomitic dolomitization dolomitize dolomization dolomize dolor doloriferous dolorific dolorifuge dolorous dolorously dolorousness dolose dolous dolphin dolphinlike dolt dolthead doltish doltishly doltishness dom domain domainal domal domanial domatium domatophobia domba dome domelike doment domer domesday domestic domesticable domesticality domestically domesticate domestication domesticative domesticator domesticity domesticize domett domeykite domic domical domically domicile domicilement domiciliar domiciliary domiciliate domiciliation dominance dominancy dominant dominantly dominate dominated dominatingly domination dominative dominator domine domineer domineerer domineering domineeringly domineeringness dominial dominical dominicale dominie dominion dominionism dominionist dominium domino dominus domitable domite domitic domn domnei domoid dompt domy don donable donaciform donary donatary donate donated donatee donation donative donatively donator donatory donatress donax doncella done donee doney dong donga dongon donjon donkey donkeyback donkeyish donkeyism donkeyman donkeywork donna donnered donnert donnish donnishness donnism donnot donor donorship donought donship donsie dont donum doob doocot doodab doodad doodle doodlebug doodler doodlesack doohickey doohickus doohinkey doohinkus dooja dook dooket dookit dool doolee dooley dooli doolie dooly doom doomage doombook doomer doomful dooms doomsday doomsman doomstead doon door doorba doorbell doorboy doorbrand doorcase doorcheek doored doorframe doorhead doorjamb doorkeeper doorknob doorless doorlike doormaid doormaker doormaking doorman doornail doorplate doorpost doorsill doorstead doorstep doorstone doorstop doorward doorway doorweed doorwise dooryard dop dopa dopamelanin dopaoxidase dopatta dope dopebook doper dopester dopey doppelkummel dopper doppia dopplerite dor dorab dorad dorado doraphobia dorbeetle dorcastry doree dorestane dorhawk doria dorje dorlach dorlot dorm dormancy dormant dormer dormered dormie dormient dormilona dormition dormitive dormitory dormouse dormy dorn dorneck dornic dornick dornock dorp dorsabdominal dorsabdominally dorsad dorsal dorsale dorsalgia dorsalis dorsally dorsalmost dorsalward dorsalwards dorsel dorser dorsibranch dorsibranchiate dorsicollar dorsicolumn dorsicommissure dorsicornu dorsiduct dorsiferous dorsifixed dorsiflex dorsiflexion dorsiflexor dorsigrade dorsilateral dorsilumbar dorsimedian dorsimesal dorsimeson dorsiparous dorsispinal dorsiventral dorsiventrality dorsiventrally dorsoabdominal dorsoanterior dorsoapical dorsocaudad dorsocaudal dorsocentral dorsocephalad dorsocephalic dorsocervical dorsocervically dorsodynia dorsoepitrochlear dorsointercostal dorsointestinal dorsolateral dorsolumbar dorsomedial dorsomedian dorsomesal dorsonasal dorsonuchal dorsopleural dorsoposteriad dorsoposterior dorsoradial dorsosacral dorsoscapular dorsosternal dorsothoracic dorsoventrad dorsoventral dorsoventrally dorsulum dorsum dorsumbonal dorter dortiness dortiship dorts dorty doruck dory doryphorus dos dosa dosadh dosage dose doser dosimeter dosimetric dosimetrician dosimetrist dosimetry dosiology dosis dosology doss dossal dossel dosser dosseret dossier dossil dossman dot dotage dotal dotard dotardism dotardly dotardy dotate dotation dotchin dote doted doter dothideaceous dothienenteritis dotiness doting dotingly dotingness dotish dotishness dotkin dotless dotlike dotriacontane dotted dotter dotterel dottily dottiness dotting dottle dottler dotty doty douar double doubled doubledamn doubleganger doublegear doublehanded doublehandedly doublehandedness doublehatching doublehearted doubleheartedness doublehorned doubleleaf doublelunged doubleness doubler doublet doubleted doubleton doubletone doubletree doublets doubling doubloon doubly doubt doubtable doubtably doubtedly doubter doubtful doubtfully doubtfulness doubting doubtingly doubtingness doubtless doubtlessly doubtlessness doubtmonger doubtous doubtsome douc douce doucely douceness doucet douche doucin doucine doudle dough doughbird doughboy doughface doughfaceism doughfoot doughhead doughiness doughlike doughmaker doughmaking doughman doughnut dought doughtily doughtiness doughty doughy doulocracy doum doundake doup douping dour dourine dourly dourness douse douser dout douter doutous douzepers douzieme dove dovecot doveflower dovefoot dovehouse dovekey dovekie dovelet dovelike doveling dover dovetail dovetailed dovetailer dovetailwise doveweed dovewood dovish dow dowable dowager dowagerism dowcet dowd dowdily dowdiness dowdy dowdyish dowdyism dowed dowel dower doweral doweress dowerless dowery dowf dowie dowily dowiness dowitch dowitcher dowl dowlas dowless down downbear downbeard downbeat downby downcast downcastly downcastness downcome downcomer downcoming downcry downcurved downcut downdale downdraft downer downface downfall downfallen downfalling downfeed downflow downfold downfolded downgate downgone downgrade downgrowth downhanging downhaul downheaded downhearted downheartedly downheartedness downhill downily downiness downland downless downlie downlier downligging downlike downline downlooked downlooker downlying downmost downness downpour downpouring downright downrightly downrightness downrush downrushing downset downshare downshore downside downsinking downsitting downsliding downslip downslope downsman downspout downstage downstairs downstate downstater downstream downstreet downstroke downswing downtake downthrow downthrown downthrust downtown downtrampling downtreading downtrend downtrodden downtroddenness downturn downward downwardly downwardness downway downweed downweigh downweight downweighted downwind downwith downy dowp dowry dowsabel dowse dowser dowset doxa doxastic doxasticon doxographer doxographical doxography doxological doxologically doxologize doxology doxy doze dozed dozen dozener dozenth dozer dozily doziness dozy dozzled drab drabbet drabbish drabble drabbler drabbletail drabbletailed drabby drably drabness drachm drachma drachmae drachmai drachmal dracma draconic draconites draconitic dracontian dracontiasis dracontic dracontine dracontites dracunculus draegerman draff draffman draffy draft draftage draftee drafter draftily draftiness drafting draftman draftmanship draftproof draftsman draftsmanship draftswoman draftswomanship draftwoman drafty drag dragade dragbar dragbolt dragged dragger draggily dragginess dragging draggingly draggle draggletail draggletailed draggletailedly draggletailedness draggly draggy draghound dragline dragman dragnet drago dragoman dragomanate dragomanic dragomanish dragon dragonesque dragoness dragonet dragonfish dragonfly dragonhead dragonhood dragonish dragonism dragonize dragonkind dragonlike dragonnade dragonroot dragontail dragonwort dragoon dragoonable dragoonade dragoonage dragooner dragrope dragsaw dragsawing dragsman dragstaff drail drain drainable drainage drainboard draine drained drainer drainerman drainless drainman drainpipe draintile draisine drake drakestone drakonite dram drama dramalogue dramatic dramatical dramatically dramaticism dramatics dramaticule dramatism dramatist dramatizable dramatization dramatize dramatizer dramaturge dramaturgic dramaturgical dramaturgist dramaturgy dramm drammage dramme drammed drammer dramming drammock dramseller dramshop drang drank drant drapable drape drapeable draper draperess draperied drapery drapetomania drapping drassid drastic drastically drat dratchell drate dratted dratting draught draughtboard draughthouse draughtman draughtmanship draughts draughtsman draughtsmanship draughtswoman draughtswomanship dravya draw drawable drawarm drawback drawbar drawbeam drawbench drawboard drawbolt drawbore drawboy drawbridge drawcut drawdown drawee drawer drawers drawfile drawfiling drawgate drawgear drawglove drawhead drawhorse drawing drawk drawknife drawknot drawl drawlatch drawler drawling drawlingly drawlingness drawlink drawloom drawly drawn drawnet drawoff drawout drawplate drawpoint drawrod drawshave drawsheet drawspan drawspring drawstop drawstring drawtongs drawtube dray drayage drayman drazel dread dreadable dreader dreadful dreadfully dreadfulness dreadingly dreadless dreadlessly dreadlessness dreadly dreadness dreadnought dream dreamage dreamer dreamery dreamful dreamfully dreamfulness dreamhole dreamily dreaminess dreamingly dreamish dreamland dreamless dreamlessly dreamlessness dreamlet dreamlike dreamlit dreamlore dreamsily dreamsiness dreamsy dreamt dreamtide dreamwhile dreamwise dreamworld dreamy drear drearfully drearily dreariment dreariness drearisome drearly drearness dreary dredge dredgeful dredger dredging dree dreep dreepiness dreepy dreg dreggily dregginess dreggish dreggy dregless dregs dreiling dreissiger drench drencher drenching drenchingly dreng drengage drepaniform drepanium drepanoid dress dressage dressed dresser dressership dressily dressiness dressing dressline dressmaker dressmakership dressmakery dressmaking dressy drest drew drewite drias drib dribble dribblement dribbler driblet driddle dried drier drierman driest drift driftage driftbolt drifter drifting driftingly driftland driftless driftlessness driftlet driftman driftpiece driftpin driftway driftweed driftwind driftwood drifty drightin drill driller drillet drilling drillman drillmaster drillstock dringle drink drinkability drinkable drinkableness drinkably drinker drinking drinkless drinkproof drinn drip dripper dripping dripple dripproof drippy dripstick dripstone drisheen drisk drivable drivage drive driveaway driveboat drivebolt drivehead drivel driveler drivelingly driven drivepipe driver driverless drivership drivescrew driveway drivewell driving drivingly drizzle drizzly drochuil droddum drofland drogh drogher drogherman drogue droit droitsman droitural droiturel droll drollery drollingly drollish drollishness drollist drollness drolly dromaeognathism dromaeognathous drome dromedarian dromedarist dromedary drometer dromic dromograph dromomania dromometer dromond dromos dromotropic drona dronage drone dronepipe droner drongo droningly dronish dronishly dronishness dronkgrass drony drool droop drooper drooping droopingly droopingness droopt droopy drop dropberry dropcloth dropflower drophead droplet droplight droplike dropling dropman dropout dropper dropping droppingly droppy dropseed dropsical dropsically dropsicalness dropsied dropsy dropsywort dropt dropwise dropworm dropwort droseraceous droshky drosky drosograph drosometer dross drossel drosser drossiness drossless drossy drostdy droud drought droughtiness droughty drouk drove drover drovy drow drown drowner drowningly drowse drowsily drowsiness drowsy drub drubber drubbing drubbly drucken drudge drudger drudgery drudgingly drudgism druery drug drugeteria drugger druggery drugget druggeting druggist druggister druggy drugless drugman drugshop drugstore druid druidess druidic druidical druidism druidry druith drum drumbeat drumble drumbledore drumbler drumfire drumfish drumhead drumheads drumlike drumlin drumline drumlinoid drumloid drumloidal drumly drummer drumming drummy drumskin drumstick drumwood drung drungar drunk drunkard drunken drunkenly drunkenness drunkensome drunkenwise drunkery drupaceous drupal drupe drupel drupelet drupeole drupetum drupiferous druse drusy druxiness druxy dry dryad dryadetum dryadic dryas dryasdust drybeard drybrained drycoal dryfoot drygoodsman dryhouse drying dryish dryly dryness dryopithecid dryopithecine dryopteroid drysalter drysaltery dryster dryth dryworker duad duadic dual duali dualin dualism dualist dualistic dualistically duality dualization dualize dually dualogue duarch duarchy dub dubash dubb dubba dubbah dubbeltje dubber dubbing dubby dubiety dubiocrystalline dubiosity dubious dubiously dubiousness dubitable dubitably dubitancy dubitant dubitate dubitatingly dubitation dubitative dubitatively duboisin duboisine dubs ducal ducally ducamara ducape ducat ducato ducatoon ducdame duces duchess duchesse duchesslike duchy duck duckbill duckblind duckboard duckboat ducker duckery duckfoot duckhearted duckhood duckhouse duckhunting duckie ducking duckling ducklingship duckmeat duckpin duckpond duckstone duckweed duckwife duckwing duct ducted ductibility ductible ductile ductilely ductileness ductilimeter ductility ductilize duction ductless ductor ductule dud dudaim dudder duddery duddies dude dudeen dudgeon dudine dudish dudishness dudism dudler dudley dudleyite dudman due duel dueler dueling duelist duelistic duello dueness duenna duennadom duennaship duer duet duettist duff duffadar duffel duffer dufferdom duffing dufoil dufrenite dufrenoysite dufter dufterdar duftery dug dugal dugdug duggler dugong dugout dugway duhat duiker duikerbok duim duit dujan duke dukedom dukeling dukely dukery dukeship dukhn dukker dukkeripen dulbert dulcet dulcetly dulcetness dulcian dulciana dulcification dulcifluous dulcify dulcigenic dulcimer dulcitol dulcitude dulcose duledge duler dulia dull dullard dullardism dullardness dullbrained duller dullery dullhead dullhearted dullification dullify dullish dullity dullness dullpate dullsome dully dulosis dulotic dulse dulseman dult dultie dulwilly duly dum duma dumaist dumb dumba dumbbell dumbbeller dumbcow dumbfounder dumbfounderment dumbhead dumbledore dumbly dumbness dumdum dumetose dumfound dumfounder dumfounderment dummel dummered dumminess dummy dummyism dummyweed dumontite dumortierite dumose dumosity dump dumpage dumpcart dumper dumpily dumpiness dumping dumpish dumpishly dumpishness dumple dumpling dumpoke dumpy dumsola dun dunair dunal dunbird dunce duncedom duncehood duncery dunch duncical duncify duncish duncishly duncishness dundasite dunder dunderhead dunderheaded dunderheadedness dunderpate dune dunelike dunfish dung dungannonite dungaree dungbeck dungbird dungbred dungeon dungeoner dungeonlike dunger dunghill dunghilly dungol dungon dungy dungyard dunite dunk dunkadoo dunker dunlin dunnage dunne dunner dunness dunnish dunnite dunnock dunny dunpickle dunst dunstable dunt duntle duny dunziekte duo duocosane duodecahedral duodecahedron duodecane duodecennial duodecillion duodecimal duodecimality duodecimally duodecimfid duodecimo duodecimole duodecuple duodena duodenal duodenary duodenate duodenation duodene duodenectomy duodenitis duodenocholangitis duodenocholecystostomy duodenocholedochotomy duodenocystostomy duodenoenterostomy duodenogram duodenojejunal duodenojejunostomy duodenopancreatectomy duodenoscopy duodenostomy duodenotomy duodenum duodrama duograph duogravure duole duoliteral duologue duomachy duopod duopolistic duopoly duopsonistic duopsony duosecant duotone duotriacontane duotype dup dupability dupable dupe dupedom duper dupery dupion dupla duplation duple duplet duplex duplexity duplicability duplicable duplicand duplicate duplication duplicative duplicator duplicature duplicia duplicident duplicidentate duplicipennate duplicitas duplicity duplification duplify duplone dupondius duppy dura durability durable durableness durably durain dural duramatral duramen durance durangite durant duraplasty duraquara duraspinalis duration durational durationless durative durax durbachite durbar durdenite dure durene durenol duress duressor durgan durian duridine during duringly durity durmast durn duro durometer duroquinone durra durrie durrin durry durst durukuli durwaun duryl dusack duscle dush dusio dusk dusken duskily duskiness duskingtide duskish duskishly duskishness duskly duskness dusky dust dustbin dustbox dustcloth dustee duster dusterman dustfall dustily dustiness dusting dustless dustlessness dustman dustpan dustproof dustuck dustwoman dusty dustyfoot dutch duteous duteously duteousness dutiability dutiable dutied dutiful dutifully dutifulness dutra duty dutymonger duumvir duumviral duumvirate duvet duvetyn dux duyker dvaita dvandva dwale dwalm dwang dwarf dwarfish dwarfishly dwarfishness dwarfism dwarfling dwarfness dwarfy dwayberry dwell dwelled dweller dwelling dwelt dwindle dwindlement dwine dyad dyadic dyakisdodecahedron dyarchic dyarchical dyarchy dyaster dyce dye dyeable dyehouse dyeing dyeleaves dyemaker dyemaking dyer dyester dyestuff dyeware dyeweed dyewood dygogram dying dyingly dyingness dyke dykehopper dyker dykereeve dynagraph dynameter dynametric dynametrical dynamic dynamical dynamically dynamics dynamis dynamism dynamist dynamistic dynamitard dynamite dynamiter dynamitic dynamitical dynamitically dynamiting dynamitish dynamitism dynamitist dynamization dynamize dynamo dynamoelectric dynamoelectrical dynamogenesis dynamogenic dynamogenous dynamogenously dynamogeny dynamometamorphic dynamometamorphism dynamometamorphosed dynamometer dynamometric dynamometrical dynamometry dynamomorphic dynamoneure dynamophone dynamostatic dynamotor dynast dynastical dynastically dynasticism dynastid dynastidan dynasty dynatron dyne dyophone dyotheism dyphone dysacousia dysacousis dysanalyte dysaphia dysarthria dysarthric dysarthrosis dysbulia dysbulic dyschiria dyschroa dyschroia dyschromatopsia dyschromatoptic dyschronous dyscrasia dyscrasial dyscrasic dyscrasite dyscratic dyscrystalline dysenteric dysenterical dysentery dysepulotic dysepulotical dyserethisia dysergasia dysergia dysesthesia dysesthetic dysfunction dysgenesic dysgenesis dysgenetic dysgenic dysgenical dysgenics dysgeogenous dysgnosia dysgraphia dysidrosis dyskeratosis dyskinesia dyskinetic dyslalia dyslexia dyslogia dyslogistic dyslogistically dyslogy dysluite dyslysin dysmenorrhea dysmenorrheal dysmerism dysmeristic dysmerogenesis dysmerogenetic dysmeromorph dysmeromorphic dysmetria dysmnesia dysmorphism dysmorphophobia dysneuria dysnomy dysodile dysodontiasis dysorexia dysorexy dysoxidation dysoxidizable dysoxidize dyspathetic dyspathy dyspepsia dyspepsy dyspeptic dyspeptical dyspeptically dysphagia dysphagic dysphasia dysphasic dysphemia dysphonia dysphonic dysphoria dysphoric dysphotic dysphrasia dysphrenia dyspituitarism dysplasia dysplastic dyspnea dyspneal dyspneic dyspnoic dysprosia dysprosium dysraphia dyssnite dysspermatism dyssynergia dyssystole dystaxia dystectic dysteleological dysteleologist dysteleology dysthyroidism dystocia dystocial dystome dystomic dystomous dystrophia dystrophic dystrophy dysuria dysuric dysyntribite dytiscid dzeren e ea each eachwhere eager eagerly eagerness eagle eaglelike eagless eaglestone eaglet eaglewood eagre ean ear earache earbob earcap earcockle eardrop eardropper eardrum eared earflower earful earhole earing earjewel earl earlap earldom earless earlet earlike earliness earlish earlock earlship early earmark earn earner earnest earnestly earnestness earnful earning earnings earphone earpick earpiece earplug earreach earring earringed earscrew earshot earsore earsplitting eartab earth earthboard earthborn earthbred earthdrake earthed earthen earthenhearted earthenware earthfall earthfast earthgall earthgrubber earthian earthiness earthkin earthless earthlight earthlike earthliness earthling earthly earthmaker earthmaking earthnut earthpea earthquake earthquaked earthquaken earthquaking earthshine earthshock earthslide earthsmoke earthstar earthtongue earthwall earthward earthwards earthwork earthworm earthy earwax earwig earwigginess earwiggy earwitness earworm earwort ease easeful easefully easefulness easel easeless easement easer easier easiest easily easiness easing east eastabout eastbound easter easterling easterly eastern easterner easternmost easting eastland eastmost eastward eastwardly easy easygoing easygoingness eat eatability eatable eatableness eatage eatberry eaten eater eatery eating eats eave eaved eavedrop eaver eaves eavesdrop eavesdropper eavesdropping ebb ebbman ebenaceous ebeneous eboe ebon ebonist ebonite ebonize ebony ebracteate ebracteolate ebriate ebriety ebriosity ebrious ebriously ebullate ebullience ebulliency ebullient ebulliently ebulliometer ebullioscope ebullioscopic ebullioscopy ebullition ebullitive ebulus eburated eburine eburnated eburnation eburnean eburneoid eburneous eburnian eburnification ecad ecalcarate ecanda ecardinal ecarinate ecarte ecaudate ecbatic ecblastesis ecbole ecbolic eccaleobion eccentrate eccentric eccentrical eccentrically eccentricity eccentring eccentrometer ecchondroma ecchondrosis ecchondrotome ecchymoma ecchymose ecchymosis ecclesia ecclesial ecclesiarch ecclesiarchy ecclesiast ecclesiastic ecclesiastical ecclesiastically ecclesiasticism ecclesiasticize ecclesiastics ecclesiastry ecclesioclastic ecclesiography ecclesiolater ecclesiolatry ecclesiologic ecclesiological ecclesiologically ecclesiologist ecclesiology ecclesiophobia eccoprotic eccoproticophoric eccrinology eccrisis eccritic eccyclema eccyesis ecdemic ecdemite ecderon ecderonic ecdysiast ecdysis ecesic ecesis ecgonine eche echea echelette echelon echelonment echeneidid echeneidoid echidna echinal echinate echinid echinital echinite echinochrome echinococcus echinoderm echinodermal echinodermatous echinodermic echinoid echinologist echinology echinopsine echinostome echinostomiasis echinulate echinulated echinulation echinuliform echinus echitamine echiurid echiuroid echo echoer echoic echoingly echoism echoist echoize echolalia echolalic echoless echometer echopractic echopraxia echowise eciliate ecize ecklein eclair eclampsia eclamptic eclat eclectic eclectical eclectically eclecticism eclecticize eclectism eclectist eclegm eclegma eclipsable eclipsareon eclipsation eclipse eclipser eclipsis ecliptic ecliptical ecliptically eclogite eclogue eclosion ecmnesia ecoid ecole ecologic ecological ecologically ecologist ecology econometer econometric econometrician econometrics economic economical economically economics economism economist economization economize economizer economy ecophene ecophobia ecorticate ecospecies ecospecific ecospecifically ecostate ecosystem ecotonal ecotone ecotype ecotypic ecotypically ecphonesis ecphorable ecphore ecphoria ecphorization ecphorize ecphrasis ecrasite ecru ecrustaceous ecstasis ecstasize ecstasy ecstatic ecstatica ecstatical ecstatically ecstaticize ecstrophy ectad ectadenia ectal ectally ectasia ectasis ectatic ectene ectental ectepicondylar ectethmoid ectethmoidal ecthetically ecthlipsis ecthyma ectiris ectobatic ectoblast ectoblastic ectobronchium ectocardia ectocarpaceous ectocarpic ectocarpous ectocinerea ectocinereal ectocoelic ectocondylar ectocondyle ectocondyloid ectocornea ectocranial ectocuneiform ectocuniform ectocyst ectodactylism ectoderm ectodermal ectodermic ectodermoidal ectodermosis ectodynamomorphic ectoentad ectoenzyme ectoethmoid ectogenesis ectogenic ectogenous ectoglia ectolecithal ectoloph ectomere ectomeric ectomesoblast ectomorph ectomorphic ectomorphy ectonephridium ectoparasite ectoparasitic ectopatagium ectophloic ectophyte ectophytic ectopia ectopic ectoplacenta ectoplasm ectoplasmatic ectoplasmic ectoplastic ectoplasy ectoproctan ectoproctous ectopterygoid ectopy ectoretina ectorganism ectorhinal ectosarc ectosarcous ectoskeleton ectosomal ectosome ectosphenoid ectosphenotic ectosphere ectosteal ectosteally ectostosis ectotheca ectotoxin ectotrophic ectozoa ectozoan ectozoic ectozoon ectrodactylia ectrodactylism ectrodactyly ectrogenic ectrogeny ectromelia ectromelian ectromelic ectromelus ectropion ectropium ectropometer ectrosyndactyly ectypal ectype ectypography ecuelling ecumenic ecumenical ecumenicalism ecumenicality ecumenically ecumenicity ecyphellate eczema eczematization eczematoid eczematosis eczematous edacious edaciously edaciousness edacity edaphic edaphology edaphon edder eddish eddo eddy eddyroot edea edeagra edeitis edelweiss edema edematous edemic edenite edental edentalous edentate edentulate edentulous edeodynia edeology edeomania edeoscopy edeotomy edestan edestin edge edgebone edged edgeless edgemaker edgemaking edgeman edger edgerman edgeshot edgestone edgeways edgeweed edgewise edginess edging edgingly edgrew edgy edh edibility edible edibleness edict edictal edictally edicule edificable edification edificator edificatory edifice edificial edifier edify edifying edifyingly edifyingness edingtonite edit edital edition editor editorial editorialize editorially editorship editress edriophthalmatous edriophthalmian edriophthalmic edriophthalmous educabilian educability educable educand educatable educate educated educatee education educationable educational educationalism educationalist educationally educationary educationist educative educator educatory educatress educe educement educible educive educt eduction eductive eductor edulcorate edulcoration edulcorative edulcorator eegrass eel eelboat eelbob eelbobber eelcake eelcatcher eeler eelery eelfare eelfish eelgrass eellike eelpot eelpout eelshop eelskin eelspear eelware eelworm eely eer eerie eerily eeriness eerisome effable efface effaceable effacement effacer effect effecter effectful effectible effective effectively effectiveness effectivity effectless effector effects effectual effectuality effectualize effectually effectualness effectuate effectuation effeminacy effeminate effeminately effeminateness effemination effeminatize effeminization effeminize effendi efferent effervesce effervescence effervescency effervescent effervescible effervescingly effervescive effete effeteness effetman efficacious efficaciously efficaciousness efficacity efficacy efficience efficiency efficient efficiently effigial effigiate effigiation effigurate effiguration effigy efflate efflation effloresce efflorescence efflorescency efflorescent efflower effluence effluency effluent effluvia effluvial effluviate effluviography effluvious effluvium efflux effluxion effodient efform efformation efformative effort effortful effortless effortlessly effossion effraction effranchise effranchisement effrontery effulge effulgence effulgent effulgently effund effuse effusiometer effusion effusive effusively effusiveness eflagelliferous efoliolate efoliose efoveolate eft eftest eftsoons egad egalitarian egalitarianism egality egence egeran egest egesta egestion egestive egg eggberry eggcup eggcupful eggeater egger eggfish eggfruit egghead egghot egging eggler eggless egglike eggnog eggplant eggshell eggy egilops egipto eglandular eglandulose eglantine eglatere eglestonite egma ego egocentric egocentricity egocentrism egohood egoism egoist egoistic egoistical egoistically egoity egoize egoizer egol egolatrous egomania egomaniac egomaniacal egomism egophonic egophony egosyntonic egotheism egotism egotist egotistic egotistical egotistically egotize egregious egregiously egregiousness egress egression egressive egressor egret egrimony egueiite egurgitate eguttulate eh eheu ehlite ehrwaldite ehuawa eichbergite eichwaldite eicosane eident eidently eider eidetic eidograph eidolic eidolism eidology eidolology eidolon eidoptometry eidouranion eigenfunction eigenvalue eight eighteen eighteenfold eighteenmo eighteenth eighteenthly eightfoil eightfold eighth eighthly eightieth eightling eightpenny eightscore eightsman eightsome eighty eightyfold eigne eikonology eimer einkorn eiresione eisegesis eisegetical eisodic eisteddfod eisteddfodic eisteddfodism either ejaculate ejaculation ejaculative ejaculator ejaculatory eject ejecta ejectable ejection ejective ejectively ejectivity ejectment ejector ejicient ejoo ekaboron ekacaesium ekaha ekamanganese ekasilicon ekatantalum eke ekebergite eker ekerite eking ekka ekphore ektene ektenes ektodynamorphic el elaborate elaborately elaborateness elaboration elaborative elaborator elaboratory elabrate elachistaceous elaeagnaceous elaeoblast elaeoblastic elaeocarpaceous elaeodochon elaeomargaric elaeometer elaeoptene elaeosaccharum elaeothesium elaidate elaidic elaidin elaidinic elain elaine elaioleucite elaioplast elaiosome elance eland elanet elaphine elaphure elaphurine elapid elapine elapoid elapse elasmobranch elasmobranchian elasmobranchiate elasmosaur elasmothere elastance elastic elastica elastically elastician elasticin elasticity elasticize elasticizer elasticness elastin elastivity elastomer elastomeric elastometer elastometry elastose elatcha elate elated elatedly elatedness elater elaterid elaterin elaterite elaterium elateroid elatinaceous elation elative elator elatrometer elb elbow elbowboard elbowbush elbowchair elbowed elbower elbowpiece elbowroom elbowy elcaja elchee eld elder elderberry elderbrotherhood elderbrotherish elderbrotherly elderbush elderhood elderliness elderly elderman eldership eldersisterly elderwoman elderwood elderwort eldest eldin elding eldress eldritch elecampane elect electable electee electicism election electionary electioneer electioneerer elective electively electiveness electivism electivity electly elector electoral electorally electorate electorial electorship electragist electragy electralize electrepeter electress electret electric electrical electricalize electrically electricalness electrician electricity electricize electrics electriferous electrifiable electrification electrifier electrify electrion electrionic electrizable electrization electrize electrizer electro electroacoustic electroaffinity electroamalgamation electroanalysis electroanalytic electroanalytical electroanesthesia electroballistic electroballistics electrobath electrobiological electrobiologist electrobiology electrobioscopy electroblasting electrobrasser electrobus electrocapillarity electrocapillary electrocardiogram electrocardiograph electrocardiographic electrocardiography electrocatalysis electrocatalytic electrocataphoresis electrocataphoretic electrocauterization electrocautery electroceramic electrochemical electrochemically electrochemist electrochemistry electrochronograph electrochronographic electrochronometer electrochronometric electrocoagulation electrocoating electrocolloidal electrocontractility electrocorticogram electroculture electrocute electrocution electrocutional electrocutioner electrocystoscope electrode electrodeless electrodentistry electrodeposit electrodepositable electrodeposition electrodepositor electrodesiccate electrodesiccation electrodiagnosis electrodialysis electrodialyze electrodialyzer electrodiplomatic electrodispersive electrodissolution electrodynamic electrodynamical electrodynamics electrodynamism electrodynamometer electroencephalogram electroencephalograph electroencephalography electroendosmose electroendosmosis electroendosmotic electroengrave electroengraving electroergometer electroetching electroethereal electroextraction electroform electroforming electrofuse electrofused electrofusion electrogalvanic electrogalvanize electrogenesis electrogenetic electrogild electrogilding electrogilt electrograph electrographic electrographite electrography electroharmonic electrohemostasis electrohomeopathy electrohorticulture electrohydraulic electroimpulse electroindustrial electroionic electroirrigation electrokinematics electrokinetic electrokinetics electrolier electrolithotrity electrologic electrological electrologist electrology electroluminescence electroluminescent electrolysis electrolyte electrolytic electrolytical electrolytically electrolyzability electrolyzable electrolyzation electrolyze electrolyzer electromagnet electromagnetic electromagnetical electromagnetically electromagnetics electromagnetism electromagnetist electromassage electromechanical electromechanics electromedical electromer electromeric electromerism electrometallurgical electrometallurgist electrometallurgy electrometer electrometric electrometrical electrometrically electrometry electromobile electromobilism electromotion electromotive electromotivity electromotograph electromotor electromuscular electromyographic electron electronarcosis electronegative electronervous electronic electronics electronographic electrooptic electrooptical electrooptically electrooptics electroosmosis electroosmotic electroosmotically electrootiatrics electropathic electropathology electropathy electropercussive electrophobia electrophone electrophore electrophoresis electrophoretic electrophoric electrophorus electrophotometer electrophotometry electrophototherapy electrophrenic electrophysics electrophysiological electrophysiologist electrophysiology electropism electroplate electroplater electroplating electroplax electropneumatic electropneumatically electropoion electropolar electropositive electropotential electropower electropsychrometer electropult electropuncturation electropuncture electropuncturing electropyrometer electroreceptive electroreduction electrorefine electroscission electroscope electroscopic electrosherardizing electroshock electrosmosis electrostatic electrostatical electrostatically electrostatics electrosteel electrostenolysis electrostenolytic electrostereotype electrostriction electrosurgery electrosurgical electrosynthesis electrosynthetic electrosynthetically electrotactic electrotautomerism electrotaxis electrotechnic electrotechnical electrotechnician electrotechnics electrotechnology electrotelegraphic electrotelegraphy electrotelethermometer electrotellurograph electrotest electrothanasia electrothanatosis electrotherapeutic electrotherapeutical electrotherapeutics electrotherapeutist electrotherapist electrotherapy electrothermal electrothermancy electrothermic electrothermics electrothermometer electrothermostat electrothermostatic electrothermotic electrotitration electrotonic electrotonicity electrotonize electrotonus electrotrephine electrotropic electrotropism electrotype electrotyper electrotypic electrotyping electrotypist electrotypy electrovalence electrovalency electrovection electroviscous electrovital electrowin electrum electuary eleemosynarily eleemosynariness eleemosynary elegance elegancy elegant elegantly elegiac elegiacal elegiambic elegiambus elegiast elegist elegit elegize elegy eleidin element elemental elementalism elementalist elementalistic elementalistically elementality elementalize elementally elementarily elementariness elementary elementoid elemi elemicin elemin elench elenchi elenchic elenchical elenchically elenchize elenchtic elenchtical elenctic elenge eleoblast eleolite eleomargaric eleometer eleonorite eleoptene eleostearate eleostearic elephant elephanta elephantiac elephantiasic elephantiasis elephantic elephanticide elephantine elephantlike elephantoid elephantoidal elephantous elephantry eleutherarch eleutherism eleutherodactyl eleutheromania eleutheromaniac eleutheromorph eleutheropetalous eleutherophyllous eleutherosepalous eleutherozoan elevate elevated elevatedly elevatedness elevating elevatingly elevation elevational elevator elevatory eleven elevener elevenfold eleventh eleventhly elevon elf elfenfolk elfhood elfic elfin elfinwood elfish elfishly elfishness elfkin elfland elflike elflock elfship elfwife elfwort eliasite elicit elicitable elicitate elicitation elicitor elicitory elide elidible eligibility eligible eligibleness eligibly eliminable eliminand eliminant eliminate elimination eliminative eliminator eliminatory eliquate eliquation elision elisor elite elixir elk elkhorn elkhound elkslip elkwood ell ellachick ellagate ellagic ellagitannin elle elleck ellenyard ellfish ellipse ellipses ellipsis ellipsograph ellipsoid ellipsoidal ellipsone ellipsonic elliptic elliptical elliptically ellipticalness ellipticity elliptograph elliptoid ellops ellwand elm elmy elocular elocute elocution elocutionary elocutioner elocutionist elocutionize elod eloge elogium eloign eloigner eloignment elongate elongated elongation elongative elope elopement eloper elops eloquence eloquent eloquential eloquently eloquentness elotillo elpasolite elpidite els else elsehow elsewards elseways elsewhen elsewhere elsewheres elsewhither elsewise elsin elt eluate elucidate elucidation elucidative elucidator elucidatory elucubrate elucubration elude eluder elusion elusive elusively elusiveness elusoriness elusory elute elution elutor elutriate elutriation elutriator eluvial eluviate eluviation eluvium elvan elvanite elvanitic elver elves elvet elvish elvishly elydoric elysia elytral elytriferous elytriform elytrigerous elytrin elytrocele elytroclasia elytroid elytron elytroplastic elytropolypus elytroposis elytrorhagia elytrorrhagia elytrorrhaphy elytrostenosis elytrotomy elytrous elytrum em emaciate emaciation emajagua emanant emanate emanation emanational emanationism emanationist emanatism emanatist emanatistic emanativ emanative emanatively emanator emanatory emancipate emancipation emancipationist emancipatist emancipative emancipator emancipatory emancipatress emancipist emandibulate emanium emarcid emarginate emarginately emargination emasculate emasculation emasculative emasculator emasculatory emball emballonurid emballonurine embalm embalmer embalmment embank embankment embannered embar embargo embargoist embark embarkation embarkment embarras embarrass embarrassed embarrassedly embarrassing embarrassingly embarrassment embarrel embassage embassy embastioned embathe embatholithic embattle embattled embattlement embay embayment embed embedment embeggar embelic embellish embellisher embellishment ember embergoose emberizidae emberizine embezzle embezzlement embezzler embind embiotocid embiotocoid embira embitter embitterer embitterment emblaze emblazer emblazon emblazoner emblazonment emblazonry emblem emblema emblematic emblematical emblematically emblematicalness emblematicize emblematist emblematize emblematology emblement emblemist emblemize emblemology emblic emblossom embodier embodiment embody embog emboitement embolden emboldener embole embolectomy embolemia embolic emboliform embolism embolismic embolismus embolite embolium embolize embolo embololalia embolomerism embolomerous embolomycotic embolum embolus emboly emborder emboscata embosom emboss embossage embosser embossing embossman embossment embosture embottle embouchure embound embow embowed embowel emboweler embowelment embower embowerment embowment embox embrace embraceable embraceably embracement embraceor embracer embracery embracing embracingly embracingness embracive embrail embranchment embrangle embranglement embrasure embreathe embreathement embright embrittle embrittlement embroaden embrocate embrocation embroider embroiderer embroideress embroidery embroil embroiler embroilment embronze embrown embryectomy embryo embryocardia embryoctonic embryoctony embryoferous embryogenesis embryogenetic embryogenic embryogeny embryogony embryographer embryographic embryography embryoid embryoism embryologic embryological embryologically embryologist embryology embryoma embryon embryonal embryonary embryonate embryonated embryonic embryonically embryoniferous embryoniform embryony embryopathology embryophagous embryophore embryophyte embryoplastic embryoscope embryoscopic embryotega embryotic embryotome embryotomy embryotrophic embryotrophy embryous embryulcia embryulcus embubble embuia embus embusk embuskin emcee eme emeer emeership emend emendable emendandum emendate emendation emendator emendatory emender emerald emeraldine emeraude emerge emergence emergency emergent emergently emergentness emerited emeritus emerize emerse emersed emersion emery emesis emetatrophia emetic emetically emetine emetocathartic emetology emetomorphine emgalla emication emiction emictory emigrant emigrate emigration emigrational emigrationist emigrative emigrator emigratory emigree eminence eminency eminent eminently emir emirate emirship emissarium emissary emissaryship emissile emission emissive emissivity emit emittent emitter emma emmarble emmarvel emmenagogic emmenagogue emmenic emmeniopathy emmenology emmensite emmer emmergoose emmet emmetrope emmetropia emmetropic emmetropism emmetropy emodin emollescence emolliate emollient emoloa emolument emolumental emolumentary emote emotion emotionable emotional emotionalism emotionalist emotionality emotionalization emotionalize emotionally emotioned emotionist emotionize emotionless emotionlessness emotive emotively emotiveness emotivity empacket empaistic empall empanel empanelment empanoply empaper emparadise emparchment empark empasm empathic empathically empathize empathy empeirema emperor emperorship empery empetraceous emphases emphasis emphasize emphatic emphatical emphatically emphaticalness emphlysis emphractic emphraxis emphysema emphysematous emphyteusis emphyteuta emphyteutic empicture empiecement empire empirema empiric empirical empiricalness empiricism empiricist empirics empiriocritcism empiriocritical empiriological empirism empiristic emplace emplacement emplane emplastic emplastration emplastrum emplectite empleomania employ employability employable employed employee employer employless employment emplume empocket empodium empoison empoisonment emporetic emporeutic emporia emporial emporium empower empowerment empress emprise emprosthotonic emprosthotonos emprosthotonus empt emptier emptily emptiness emptings emptins emption emptional emptor empty emptyhearted emptysis empurple empyema empyemic empyesis empyocele empyreal empyrean empyreuma empyreumatic empyreumatical empyreumatize empyromancy emu emulable emulant emulate emulation emulative emulatively emulator emulatory emulatress emulgence emulgent emulous emulously emulousness emulsibility emulsible emulsifiability emulsifiable emulsification emulsifier emulsify emulsin emulsion emulsionize emulsive emulsoid emulsor emunctory emundation emyd emydian emydosaurian en enable enablement enabler enact enactable enaction enactive enactment enactor enactory enaena enage enalid enaliosaur enaliosaurian enallachrome enallage enaluron enam enamber enambush enamdar enamel enameler enameling enamelist enamelless enamellist enameloma enamelware enamor enamorato enamored enamoredness enamorment enamourment enanguish enanthem enanthema enanthematous enanthesis enantiobiosis enantioblastic enantioblastous enantiomer enantiomeride enantiomorph enantiomorphic enantiomorphism enantiomorphous enantiomorphously enantiomorphy enantiopathia enantiopathic enantiopathy enantiosis enantiotropic enantiotropy enantobiosis enapt enarbor enarbour enarch enarched enargite enarm enarme enarthrodia enarthrodial enarthrosis enate enatic enation enbrave encaenia encage encake encalendar encallow encamp encampment encanker encanthis encapsulate encapsulation encapsule encarditis encarnadine encarnalize encarpium encarpus encase encasement encash encashable encashment encasserole encastage encatarrhaphy encauma encaustes encaustic encaustically encave encefalon encell encenter encephala encephalalgia encephalasthenia encephalic encephalin encephalitic encephalitis encephalocele encephalocoele encephalodialysis encephalogram encephalograph encephalography encephaloid encephalolith encephalology encephaloma encephalomalacia encephalomalacosis encephalomalaxis encephalomeningitis encephalomeningocele encephalomere encephalomeric encephalometer encephalometric encephalomyelitis encephalomyelopathy encephalon encephalonarcosis encephalopathia encephalopathic encephalopathy encephalophyma encephalopsychesis encephalopyosis encephalorrhagia encephalosclerosis encephaloscope encephaloscopy encephalosepsis encephalospinal encephalothlipsis encephalotome encephalotomy encephalous enchain enchainment enchair enchalice enchannel enchant enchanter enchanting enchantingly enchantingness enchantment enchantress encharge encharnel enchase enchaser enchasten enchequer enchest enchilada enchiridion enchondroma enchondromatous enchondrosis enchorial enchurch enchylema enchylematous enchymatous enchytrae enchytraeid encina encinal encincture encinder encinillo encipher encircle encirclement encircler encist encitadel enclaret enclasp enclave enclavement enclisis enclitic enclitical enclitically encloak encloister enclose encloser enclosure enclothe encloud encoach encode encoffin encoignure encoil encolden encollar encolor encolpion encolumn encomendero encomia encomiast encomiastic encomiastical encomiastically encomic encomienda encomiologic encomium encommon encompass encompasser encompassment encoop encorbelment encore encoronal encoronate encoronet encounter encounterable encounterer encourage encouragement encourager encouraging encouragingly encowl encraal encradle encranial encratic encraty encreel encrimson encrinal encrinic encrinidae encrinital encrinite encrinitic encrinitical encrinoid encrisp encroach encroacher encroachingly encroachment encrotchet encrown encrownment encrust encrustment encrypt encryption encuirassed encumber encumberer encumberingly encumberment encumbrance encumbrancer encup encurl encurtain encushion encyclic encyclical encyclopedia encyclopediac encyclopediacal encyclopedial encyclopedian encyclopediast encyclopedic encyclopedically encyclopedism encyclopedist encyclopedize encyrtid encyst encystation encystment end endable endamage endamageable endamagement endamask endameba endamebic endamoebiasis endamoebic endanger endangerer endangerment endangium endaortic endaortitis endarch endarchy endarterial endarteritis endarterium endaspidean endaze endboard endbrain endear endearance endeared endearedly endearedness endearing endearingly endearingness endearment endeavor endeavorer ended endeictic endellionite endemial endemic endemically endemicity endemiological endemiology endemism endenizen ender endere endermatic endermic endermically enderon enderonic endevil endew endgate endiadem endiaper ending endite endive endless endlessly endlessness endlichite endlong endmatcher endmost endoabdominal endoangiitis endoaortitis endoappendicitis endoarteritis endoauscultation endobatholithic endobiotic endoblast endoblastic endobronchial endobronchially endobronchitis endocannibalism endocardiac endocardial endocarditic endocarditis endocardium endocarp endocarpal endocarpic endocarpoid endocellular endocentric endoceratite endoceratitic endocervical endocervicitis endochondral endochorion endochorionic endochrome endochylous endoclinal endocline endocoelar endocoele endocoeliac endocolitis endocolpitis endocondensation endocone endoconidium endocorpuscular endocortex endocranial endocranium endocrinal endocrine endocrinic endocrinism endocrinological endocrinologist endocrinology endocrinopathic endocrinopathy endocrinotherapy endocrinous endocritic endocycle endocyclic endocyemate endocyst endocystitis endoderm endodermal endodermic endodermis endodontia endodontic endodontist endodynamomorphic endoenteritis endoenzyme endoesophagitis endofaradism endogalvanism endogamic endogamous endogamy endogastric endogastrically endogastritis endogen endogenesis endogenetic endogenic endogenous endogenously endogeny endoglobular endognath endognathal endognathion endogonidium endointoxication endokaryogamy endolabyrinthitis endolaryngeal endolemma endolumbar endolymph endolymphangial endolymphatic endolymphic endolysin endomastoiditis endome endomesoderm endometrial endometritis endometrium endometry endomitosis endomitotic endomixis endomorph endomorphic endomorphism endomorphy endomysial endomysium endoneurial endoneurium endonuclear endonucleolus endoparasite endoparasitic endopathic endopelvic endopericarditis endoperidial endoperidium endoperitonitis endophagous endophagy endophasia endophasic endophlebitis endophragm endophragmal endophyllous endophytal endophyte endophytic endophytically endophytous endoplasm endoplasma endoplasmic endoplast endoplastron endoplastular endoplastule endopleura endopleural endopleurite endopleuritic endopod endopodite endopoditic endoproct endoproctous endopsychic endopterygote endopterygotic endopterygotism endopterygotous endorachis endoral endore endorhinitis endorsable endorsation endorse endorsed endorsee endorsement endorser endorsingly endosalpingitis endosarc endosarcode endosarcous endosclerite endoscope endoscopic endoscopy endosecretory endosepsis endosiphon endosiphonal endosiphonate endosiphuncle endoskeletal endoskeleton endosmometer endosmometric endosmosic endosmosis endosmotic endosmotically endosome endosperm endospermic endospore endosporium endosporous endoss endosteal endosteally endosteitis endosteoma endosternite endosternum endosteum endostitis endostoma endostome endostosis endostracal endostracum endostylar endostyle endostylic endotheca endothecal endothecate endothecial endothecium endothelia endothelial endothelioblastoma endotheliocyte endothelioid endotheliolysin endotheliolytic endothelioma endotheliomyoma endotheliomyxoma endotheliotoxin endothelium endothermal endothermic endothermous endothermy endothoracic endothorax endothys endotoxic endotoxin endotoxoid endotracheitis endotrachelitis endotrophic endotys endovaccination endovasculitis endovenous endow endower endowment endozoa endpiece endue enduement endungeon endura endurability endurable endurableness endurably endurance endurant endure endurer enduring enduringly enduringness endways endwise endyma endymal endysis eneclann enema enemy enemylike enemyship enepidermic energeia energesis energetic energetical energetically energeticalness energeticist energetics energetistic energic energical energid energism energist energize energizer energumen energumenon energy enervate enervation enervative enervator eneuch eneugh enface enfacement enfamous enfasten enfatico enfeature enfeeble enfeeblement enfeebler enfelon enfeoff enfeoffment enfester enfetter enfever enfigure enfilade enfilading enfile enfiled enflagellate enflagellation enflesh enfleurage enflower enfoil enfold enfolden enfolder enfoldment enfonced enforce enforceability enforceable enforced enforcedly enforcement enforcer enforcibility enforcible enforcingly enfork enfoul enframe enframement enfranchisable enfranchise enfranchisement enfranchiser enfree enfrenzy enfuddle enfurrow engage engaged engagedly engagedness engagement engager engaging engagingly engagingness engaol engarb engarble engarland engarment engarrison engastrimyth engastrimythic engaud engaze engem engender engenderer engenderment engerminate enghosted engild engine engineer engineering engineership enginehouse engineless enginelike engineman enginery enginous engird engirdle engirt engjateigur englacial englacially englad engladden englobe englobement engloom englory englut englyn engnessang engobe engold engolden engore engorge engorgement engouled engrace engraff engraft engraftation engrafter engraftment engrail engrailed engrailment engrain engrained engrainedly engrainer engram engramma engrammatic engrammic engrandize engrandizement engraphia engraphic engraphically engraphy engrapple engrasp engrave engraved engravement engraver engraving engreen engrieve engroove engross engrossed engrossedly engrosser engrossing engrossingly engrossingness engrossment enguard engulf engulfment engyscope engysseismology enhallow enhalo enhamper enhance enhanced enhancement enhancer enhancive enharmonic enharmonical enharmonically enhat enhaunt enhearse enheart enhearten enhedge enhelm enhemospore enherit enheritage enheritance enhorror enhunger enhusk enhydrite enhydritic enhydros enhydrous enhypostasia enhypostasis enhypostatic enhypostatize eniac enigma enigmatic enigmatical enigmatically enigmaticalness enigmatist enigmatization enigmatize enigmatographer enigmatography enigmatology enisle enjail enjamb enjambed enjambment enjelly enjeopard enjeopardy enjewel enjoin enjoinder enjoiner enjoinment enjoy enjoyable enjoyableness enjoyably enjoyer enjoying enjoyingly enjoyment enkerchief enkernel enkindle enkindler enkraal enlace enlacement enlard enlarge enlargeable enlargeableness enlarged enlargedly enlargedness enlargement enlarger enlarging enlargingly enlaurel enleaf enleague enlevement enlief enlife enlight enlighten enlightened enlightenedly enlightenedness enlightener enlightening enlighteningly enlightenment enlink enlinkment enlist enlisted enlister enlistment enliven enlivener enlivening enliveningly enlivenment enlock enlodge enlodgement enmarble enmask enmass enmesh enmeshment enmist enmity enmoss enmuffle enneacontahedral enneacontahedron ennead enneadianome enneadic enneagon enneagynous enneahedral enneahedria enneahedron enneapetalous enneaphyllous enneasemic enneasepalous enneaspermous enneastyle enneastylos enneasyllabic enneateric enneatic enneatical ennerve enniche ennoble ennoblement ennobler ennobling ennoblingly ennoic ennomic ennui enocyte enodal enodally enoil enol enolate enolic enolizable enolization enolize enomania enomaniac enomotarch enomoty enophthalmos enophthalmus enoplan enoptromancy enorganic enorm enormity enormous enormously enormousness enostosis enough enounce enouncement enow enphytotic enplane enquicken enquire enquirer enquiry enrace enrage enraged enragedly enragement enrange enrank enrapt enrapture enrapturer enravish enravishingly enravishment enray enregiment enregister enregistration enregistry enrib enrich enricher enriching enrichingly enrichment enring enrive enrobe enrobement enrober enrockment enrol enroll enrolled enrollee enroller enrollment enrolment enroot enrough enruin enrut ens ensaffron ensaint ensample ensand ensandal ensanguine ensate enscene ensconce enscroll ensculpture ense enseam enseat enseem ensellure ensemble ensepulcher ensepulchre enseraph enserf ensete enshade enshadow enshawl ensheathe enshell enshelter enshield enshrine enshrinement enshroud ensiform ensign ensigncy ensignhood ensignment ensignry ensignship ensilage ensilate ensilation ensile ensilist ensilver ensisternum ensky enslave enslavedness enslavement enslaver ensmall ensnare ensnarement ensnarer ensnaring ensnaringly ensnarl ensnow ensorcelize ensorcell ensoul enspell ensphere enspirit enstamp enstar enstate enstatite enstatitic enstatolite ensteel enstool enstore enstrengthen ensuable ensuance ensuant ensue ensuer ensuingly ensulphur ensure ensurer enswathe enswathement ensweep entablature entablatured entablement entach entad entail entailable entailer entailment ental entame entamoebiasis entamoebic entangle entangled entangledly entangledness entanglement entangler entangling entanglingly entapophysial entapophysis entarthrotic entasia entasis entelam entelechy entellus entelodont entempest entemple entente entepicondylar enter enterable enteraden enteradenographic enteradenography enteradenological enteradenology enteral enteralgia enterate enterauxe enterclose enterectomy enterer entergogenic enteria enteric entericoid entering enteritidis enteritis entermete enteroanastomosis enterobiliary enterocele enterocentesis enterochirurgia enterochlorophyll enterocholecystostomy enterocinesia enterocinetic enterocleisis enteroclisis enteroclysis enterocoele enterocoelic enterocoelous enterocolitis enterocolostomy enterocrinin enterocyst enterocystoma enterodynia enteroepiplocele enterogastritis enterogastrone enterogenous enterogram enterograph enterography enterohelcosis enterohemorrhage enterohepatitis enterohydrocele enteroid enterointestinal enteroischiocele enterokinase enterokinesia enterokinetic enterolith enterolithiasis enterology enteromegalia enteromegaly enteromere enteromesenteric enteromycosis enteromyiasis enteron enteroneuritis enteroparalysis enteroparesis enteropathy enteropexia enteropexy enterophthisis enteroplasty enteroplegia enteropneust enteropneustan enteroptosis enteroptotic enterorrhagia enterorrhaphy enterorrhea enteroscope enterosepsis enterospasm enterostasis enterostenosis enterostomy enterosyphilis enterotome enterotomy enterotoxemia enterotoxication enterozoa enterozoan enterozoic enterprise enterpriseless enterpriser enterprising enterprisingly enterritoriality entertain entertainable entertainer entertaining entertainingly entertainingness entertainment enthalpy entheal enthelmintha enthelminthes enthelminthic enthetic enthral enthraldom enthrall enthralldom enthraller enthralling enthrallingly enthrallment enthralment enthrone enthronement enthronization enthronize enthuse enthusiasm enthusiast enthusiastic enthusiastical enthusiastically enthusiastly enthymematic enthymematical enthymeme entia entice enticeable enticeful enticement enticer enticing enticingly enticingness entifical entification entify entincture entire entirely entireness entirety entiris entitative entitatively entitle entitlement entity entoblast entoblastic entobranchiate entobronchium entocalcaneal entocarotid entocele entocnemial entocoele entocoelic entocondylar entocondyle entocondyloid entocone entoconid entocornea entocranial entocuneiform entocuniform entocyemate entocyst entoderm entodermal entodermic entogastric entogenous entoglossal entohyal entoil entoilment entomb entombment entomere entomeric entomic entomical entomion entomogenous entomoid entomologic entomological entomologically entomologist entomologize entomology entomophagan entomophagous entomophilous entomophily entomophthoraceous entomophthorous entomophytous entomostracan entomostracous entomotaxy entomotomist entomotomy entone entonement entoolitic entoparasite entoparasitic entoperipheral entophytal entophyte entophytic entophytically entophytous entopic entopical entoplasm entoplastic entoplastral entoplastron entopopliteal entoproctous entopterygoid entoptic entoptical entoptically entoptics entoptoscope entoptoscopic entoptoscopy entoretina entorganism entosarc entosclerite entosphenal entosphenoid entosphere entosternal entosternite entosternum entothorax entotic entotympanic entourage entozoa entozoal entozoan entozoarian entozoic entozoological entozoologically entozoologist entozoology entozoon entracte entrail entrails entrain entrainer entrainment entrammel entrance entrancedly entrancement entranceway entrancing entrancingly entrant entrap entrapment entrapper entrappingly entreasure entreat entreating entreatingly entreatment entreaty entree entremets entrench entrenchment entrepas entrepot entrepreneur entrepreneurial entrepreneurship entresol entrochite entrochus entropion entropionize entropium entropy entrough entrust entrustment entry entryman entryway enturret entwine entwinement entwist enucleate enucleation enucleator enumerable enumerate enumeration enumerative enumerator enunciability enunciable enunciate enunciation enunciative enunciatively enunciator enunciatory enure enuresis enuretic enurny envapor envapour envassal envassalage envault enveil envelop envelope enveloper envelopment envenom envenomation enverdure envermeil enviable enviableness enviably envied envier envineyard envious enviously enviousness environ environage environal environic environment environmental environmentalism environmentalist environmentally environs envisage envisagement envision envolume envoy envoyship envy envying envyingly enwallow enwiden enwind enwisen enwoman enwomb enwood enworthed enwound enwrap enwrapment enwreathe enwrite enwrought enzone enzootic enzooty enzym enzymatic enzyme enzymic enzymically enzymologist enzymology enzymolysis enzymolytic enzymosis enzymotic eoan eolation eolith eolithic eon eonism eophyte eophytic eophyton eorhyolite eosate eoside eosin eosinate eosinic eosinoblast eosinophile eosinophilia eosinophilic eosinophilous eosphorite eozoon eozoonal epacmaic epacme epacrid epacridaceous epact epactal epagoge epagogic epagomenae epagomenal epagomenic epagomenous epaleaceous epalpate epanadiplosis epanalepsis epanaleptic epanaphora epanaphoral epanastrophe epanisognathism epanisognathous epanodos epanody epanorthosis epanorthotic epanthous epapillate epappose eparch eparchate eparchial eparchy eparcuale eparterial epaule epaulement epaulet epauleted epauletted epauliere epaxial epaxially epedaphic epee epeeist epeiric epeirid epeirogenesis epeirogenetic epeirogenic epeirogeny epeisodion epembryonic epencephal epencephalic epencephalon ependyma ependymal ependyme ependymitis ependymoma ependytes epenthesis epenthesize epenthetic epephragmal epepophysial epepophysis epergne eperotesis epexegesis epexegetic epexegetical epexegetically epha ephah epharmonic epharmony ephebe ephebeion ephebeum ephebic ephebos ephebus ephectic ephedrine ephelcystic ephelis ephemera ephemerae ephemeral ephemerality ephemerally ephemeralness ephemeran ephemerid ephemerides ephemeris ephemerist ephemeromorph ephemeromorphic ephemeron ephemerous ephetae ephete ephetic ephialtes ephidrosis ephippial ephippium ephod ephor ephoral ephoralty ephorate ephoric ephorship ephorus ephphatha ephthianure ephydriad ephydrid ephymnium ephyra ephyrula epibasal epibatholithic epibenthic epibenthos epiblast epiblastema epiblastic epiblema epibole epibolic epibolism epiboly epiboulangerite epibranchial epic epical epically epicalyx epicanthic epicanthus epicardia epicardiac epicardial epicardium epicarid epicaridan epicarp epicede epicedial epicedian epicedium epicele epicene epicenism epicenity epicenter epicentral epicentrum epicerebral epicheirema epichil epichile epichilium epichindrotic epichirema epichondrosis epichordal epichorial epichoric epichorion epichoristic epicism epicist epiclastic epicleidian epicleidium epiclesis epiclidal epiclinal epicly epicnemial epicoelar epicoele epicoelia epicoeliac epicoelian epicoeloma epicoelous epicolic epicondylar epicondyle epicondylian epicondylic epicontinental epicoracohumeral epicoracoid epicoracoidal epicormic epicorolline epicortical epicostal epicotyl epicotyleal epicotyledonary epicranial epicranium epicranius epicrisis epicritic epicrystalline epicure epicurish epicurishly epicycle epicyclic epicyclical epicycloid epicycloidal epicyemate epicyesis epicystotomy epicyte epideictic epideictical epideistic epidemic epidemical epidemically epidemicalness epidemicity epidemiographist epidemiography epidemiological epidemiologist epidemiology epidemy epidendral epidendric epiderm epiderma epidermal epidermatic epidermatoid epidermatous epidermic epidermical epidermically epidermidalization epidermis epidermization epidermoid epidermoidal epidermolysis epidermomycosis epidermophytosis epidermose epidermous epidesmine epidialogue epidiascope epidiascopic epidictic epidictical epididymal epididymectomy epididymis epididymite epididymitis epididymodeferentectomy epididymodeferential epididymovasostomy epidiorite epidiorthosis epidosite epidote epidotic epidotiferous epidotization epidural epidymides epifascial epifocal epifolliculitis epigamic epigaster epigastraeum epigastral epigastrial epigastric epigastrical epigastriocele epigastrium epigastrocele epigeal epigean epigeic epigene epigenesis epigenesist epigenetic epigenetically epigenic epigenist epigenous epigeous epiglottal epiglottic epiglottidean epiglottiditis epiglottis epiglottitis epignathous epigonal epigonation epigone epigonic epigonium epigonos epigonous epigram epigrammatic epigrammatical epigrammatically epigrammatism epigrammatist epigrammatize epigrammatizer epigraph epigrapher epigraphic epigraphical epigraphically epigraphist epigraphy epiguanine epigyne epigynous epigynum epigyny epihyal epihydric epihydrinic epikeia epiklesis epilabrum epilamellar epilaryngeal epilate epilation epilatory epilegomenon epilemma epilemmal epilepsy epileptic epileptically epileptiform epileptogenic epileptogenous epileptoid epileptologist epileptology epilimnion epilobe epilogation epilogic epilogical epilogist epilogistic epilogize epilogue epimacus epimandibular epimanikia epimer epimeral epimere epimeric epimeride epimerite epimeritic epimeron epimerum epimorphic epimorphosis epimysium epimyth epinaos epinastic epinastically epinasty epineolithic epinephrine epinette epineural epineurial epineurium epinglette epinicial epinician epinicion epinine epiopticon epiotic epipaleolithic epiparasite epiparodos epipastic epiperipheral epipetalous epiphanous epipharyngeal epipharynx epiphenomenal epiphenomenalism epiphenomenalist epiphenomenon epiphloedal epiphloedic epiphloeum epiphonema epiphora epiphragm epiphylline epiphyllous epiphysary epiphyseal epiphyseolysis epiphysial epiphysis epiphysitis epiphytal epiphyte epiphytic epiphytical epiphytically epiphytism epiphytology epiphytotic epiphytous epipial epiplankton epiplanktonic epiplasm epiplasmic epiplastral epiplastron epiplectic epipleura epipleural epiplexis epiploce epiplocele epiploic epiploitis epiploon epiplopexy epipodial epipodiale epipodite epipoditic epipodium epipolic epipolism epipolize epiprecoracoid epipteric epipterous epipterygoid epipubic epipubis epirhizous epirogenic epirogeny epirotulian epirrhema epirrhematic epirrheme episarcine episcenium episclera episcleral episcleritis episcopable episcopacy episcopal episcopalian episcopalism episcopality episcopally episcopate episcopature episcope episcopicide episcopization episcopize episcopolatry episcotister episematic episepalous episiocele episiohematoma episioplasty episiorrhagia episiorrhaphy episiostenosis episiotomy episkeletal episkotister episodal episode episodial episodic episodical episodically epispadiac epispadias epispastic episperm epispermic epispinal episplenitis episporangium epispore episporium epistapedial epistasis epistatic epistaxis epistemic epistemolog epistemological epistemologically epistemologist epistemology epistemonic epistemonical epistemophilia epistemophiliac epistemophilic episternal episternalia episternite episternum epistilbite epistlar epistle epistler epistolarian epistolarily epistolary epistolatory epistoler epistolet epistolic epistolical epistolist epistolizable epistolization epistolize epistolizer epistolographer epistolographic epistolographist epistolography epistoma epistomal epistome epistomian epistroma epistrophe epistropheal epistropheus epistrophic epistrophy epistylar epistyle episyllogism episynaloephe episynthetic episyntheton epitactic epitaph epitapher epitaphial epitaphian epitaphic epitaphical epitaphist epitaphize epitaphless epitasis epitela epitendineum epitenon epithalamia epithalamial epithalamiast epithalamic epithalamion epithalamium epithalamize epithalamus epithalamy epithalline epitheca epithecal epithecate epithecium epithelia epithelial epithelioblastoma epithelioceptor epitheliogenetic epithelioglandular epithelioid epitheliolysin epitheliolysis epitheliolytic epithelioma epitheliomatous epitheliomuscular epitheliosis epitheliotoxin epithelium epithelization epithelize epitheloid epithem epithesis epithet epithetic epithetical epithetically epithetician epithetize epitheton epithumetic epithyme epithymetic epithymetical epitimesis epitoke epitomator epitomatory epitome epitomic epitomical epitomically epitomist epitomization epitomize epitomizer epitonic epitonion epitoxoid epitrachelion epitrichial epitrichium epitrite epitritic epitrochlea epitrochlear epitrochoid epitrochoidal epitrope epitrophic epitrophy epituberculosis epituberculous epitympanic epitympanum epityphlitis epityphlon epiural epivalve epixylous epizeuxis epizoa epizoal epizoan epizoarian epizoic epizoicide epizoon epizootic epizootiology epoch epocha epochal epochally epochism epochist epode epodic epollicate eponychium eponym eponymic eponymism eponymist eponymize eponymous eponymus eponymy epoophoron epopee epopoean epopoeia epopoeist epopt epoptes epoptic epoptist epornitic epornitically epos epruinose epsilon epsomite epulary epulation epulis epulo epuloid epulosis epulotic epupillate epural epurate epuration epyllion equability equable equableness equably equaeval equal equalable equaling equalist equalitarian equalitarianism equality equalization equalize equalizer equalizing equalling equally equalness equangular equanimity equanimous equanimously equanimousness equant equatable equate equation equational equationally equationism equationist equator equatorial equatorially equatorward equatorwards equerry equerryship equestrial equestrian equestrianism equestrianize equestrianship equestrienne equianchorate equiangle equiangular equiangularity equianharmonic equiarticulate equiatomic equiaxed equiaxial equibalance equibiradiate equicellular equichangeable equicohesive equiconvex equicostate equicrural equicurve equid equidense equidensity equidiagonal equidifferent equidimensional equidistance equidistant equidistantial equidistantly equidistribution equidiurnal equidivision equidominant equidurable equielliptical equiexcellency equiform equiformal equiformity equiglacial equigranular equijacent equilateral equilaterally equilibrant equilibrate equilibration equilibrative equilibrator equilibratory equilibria equilibrial equilibriate equilibrio equilibrious equilibrist equilibristat equilibristic equilibrity equilibrium equilibrize equilobate equilobed equilocation equilucent equimodal equimolar equimolecular equimomental equimultiple equinate equine equinecessary equinely equinia equinity equinoctial equinoctially equinovarus equinox equinumerally equinus equiomnipotent equip equipaga equipage equiparant equiparate equiparation equipartile equipartisan equipartition equiped equipedal equiperiodic equipluve equipment equipoise equipollence equipollency equipollent equipollently equipollentness equiponderance equiponderancy equiponderant equiponderate equiponderation equipostile equipotent equipotential equipotentiality equipper equiprobabilism equiprobabilist equiprobability equiproducing equiproportional equiproportionality equiradial equiradiate equiradical equirotal equisegmented equisetaceous equisetic equisided equisignal equisized equison equisonance equisonant equispaced equispatial equisufficiency equisurface equitable equitableness equitably equitangential equitant equitation equitative equitemporal equitemporaneous equites equitist equitriangular equity equivalence equivalenced equivalency equivalent equivalently equivaliant equivalue equivaluer equivalve equivalved equivalvular equivelocity equivocacy equivocal equivocality equivocally equivocalness equivocate equivocatingly equivocation equivocator equivocatory equivoluminal equivoque equivorous equivote equoid equoidean equuleus er era erade eradiate eradiation eradicable eradicant eradicate eradication eradicative eradicator eradicatory eradiculose eral eranist erasable erase erased erasement eraser erasion erasure erbia erbium erd erdvark ere erect erectable erecter erectile erectility erecting erection erective erectly erectness erectopatent erector erelong eremacausis eremic eremital eremite eremiteship eremitic eremitical eremitish eremitism eremochaetous eremology eremophyte erenach erenow erepsin erept ereptase ereptic ereption erethic erethisia erethism erethismic erethistic erethitic erewhile erewhiles erg ergal ergamine ergasia ergasterion ergastic ergastoplasm ergastoplasmic ergastulum ergatandromorph ergatandromorphic ergatandrous ergatandry ergates ergatocracy ergatocrat ergatogyne ergatogynous ergatogyny ergatoid ergatomorph ergatomorphic ergatomorphism ergmeter ergodic ergogram ergograph ergographic ergoism ergology ergomaniac ergometer ergometric ergometrine ergon ergonovine ergophile ergophobia ergophobiac ergoplasm ergostat ergosterin ergosterol ergot ergotamine ergotaminine ergoted ergothioneine ergotic ergotin ergotinine ergotism ergotist ergotization ergotize ergotoxin ergotoxine ergusia eria eric ericaceous ericad erical ericetal ericeticolous ericetum erichthus erichtoid ericineous ericius ericoid ericolin ericophyte erigible eriglossate erika erikite erinaceous erineum erinite erinose eriocaulaceous erioglaucine eriometer erionite eriophyllous eristic eristical eristically erizo erlking ermelin ermine ermined erminee ermines erminites erminois erne erode eroded erodent erodible erogeneity erogenesis erogenetic erogenic erogenous erogeny eros erose erosely erosible erosion erosional erosionist erosive erostrate eroteme erotesis erotetic erotic erotica erotical erotically eroticism eroticize eroticomania erotism erotogenesis erotogenetic erotogenic erotogenicity erotomania erotomaniac erotopath erotopathic erotopathy erpetologist err errability errable errableness errabund errancy errand errant errantly errantness errantry errata erratic erratical erratically erraticalness erraticism erraticness erratum errhine erring erringly errite erroneous erroneously erroneousness error errorful errorist errorless ers ersatz erth erthen erthling erthly erubescence erubescent erubescite eruc eruca erucic eruciform erucin erucivorous eruct eructance eructation eructative eruction erudit erudite eruditely eruditeness eruditical erudition eruditional eruditionist erugate erugation erugatory erumpent erupt eruption eruptional eruptive eruptively eruptiveness eruptivity ervenholder eryhtrism eryngo erysipelas erysipelatoid erysipelatous erysipeloid erysipelous erythema erythematic erythematous erythemic erythrasma erythrean erythremia erythremomelalgia erythrene erythrin erythrine erythrismal erythristic erythrite erythritic erythritol erythroblast erythroblastic erythroblastosis erythrocarpous erythrocatalysis erythrochroic erythrochroism erythroclasis erythroclastic erythrocyte erythrocytic erythrocytoblast erythrocytolysin erythrocytolysis erythrocytolytic erythrocytometer erythrocytorrhexis erythrocytoschisis erythrocytosis erythrodegenerative erythrodermia erythrodextrin erythrogenesis erythrogenic erythroglucin erythrogonium erythroid erythrol erythrolein erythrolitmin erythrolysin erythrolysis erythrolytic erythromelalgia erythron erythroneocytosis erythronium erythropenia erythrophage erythrophagous erythrophilous erythrophleine erythrophobia erythrophore erythrophyll erythrophyllin erythropia erythroplastid erythropoiesis erythropoietic erythropsia erythropsin erythrorrhexis erythroscope erythrose erythrosiderite erythrosin erythrosinophile erythrosis erythroxylaceous erythroxyline erythrozincite erythrozyme erythrulose es esca escadrille escalade escalader escalado escalan escalate escalator escalin escalloniaceous escalop escaloped escambio escambron escapable escapade escapage escape escapee escapeful escapeless escapement escaper escapingly escapism escapist escarbuncle escargatoire escarole escarp escarpment eschalot eschar eschara escharine escharoid escharotic eschatocol eschatological eschatologist eschatology escheat escheatable escheatage escheatment escheator escheatorship eschew eschewal eschewance eschewer eschynite esclavage escoba escobadura escobilla escobita escolar esconson escopette escort escortage escortee escortment escribe escritoire escritorial escrol escropulo escrow escruage escudo esculent esculetin esculin escutcheon escutcheoned escutellate esdragol esemplastic esemplasy eseptate esere eserine esexual eshin esiphonal esker esmeraldite esne esoanhydride esocataphoria esociform esocyclic esodic esoenteritis esoethmoiditis esogastritis esonarthex esoneural esophagal esophagalgia esophageal esophagean esophagectasia esophagectomy esophagi esophagism esophagismus esophagitis esophago esophagocele esophagodynia esophagogastroscopy esophagogastrostomy esophagomalacia esophagometer esophagomycosis esophagopathy esophagoplasty esophagoplegia esophagoplication esophagoptosis esophagorrhagia esophagoscope esophagoscopy esophagospasm esophagostenosis esophagostomy esophagotome esophagotomy esophagus esophoria esophoric esoteric esoterica esoterical esoterically esotericism esotericist esoterics esoterism esoterist esoterize esotery esothyropexy esotrope esotropia esotropic espacement espadon espalier espantoon esparcet esparsette esparto espathate espave especial especially especialness esperance espial espichellite espier espinal espingole espinillo espino espionage esplanade esplees esponton espousal espouse espousement espouser espringal espundia espy esquamate esquamulose esquire esquirearchy esquiredom esquireship ess essang essay essayer essayette essayical essayish essayism essayist essayistic essayistical essaylet essed essence essency essentia essential essentialism essentialist essentiality essentialize essentially essentialness essenwood essexite essling essoin essoinee essoiner essoinment essonite essorant establish establishable established establisher establishment establishmentarian establishmentarianism establishmentism estacade estadal estadio estado estafette estafetted estamene estamp estampage estampede estampedero estate estatesman esteem esteemable esteemer ester esterase esterellite esteriferous esterification esterify esterization esterize esterlin esterling estevin esthematology estherian esthesia esthesio esthesioblast esthesiogen esthesiogenic esthesiogeny esthesiography esthesiology esthesiometer esthesiometric esthesiometry esthesioneurosis esthesiophysiology esthesis esthetology esthetophore esthiomene estimable estimableness estimably estimate estimatingly estimation estimative estimator estipulate estivage estival estivate estivation estivator estmark estoc estoile estop estoppage estoppel estovers estrade estradiol estradiot estragole estrange estrangedness estrangement estranger estrapade estray estre estreat estrepe estrepement estriate estriche estrin estriol estrogen estrogenic estrone estrous estrual estruate estruation estuarial estuarine estuary estufa estuous estus esugarization esurience esurient esuriently eta etaballi etacism etacist etalon etamine etch etcher etching eternal eternalism eternalist eternalization eternalize eternally eternalness eternity eternization eternize etesian ethal ethaldehyde ethanal ethanamide ethane ethanedial ethanediol ethanedithiol ethanethial ethanethiol ethanol ethanolamine ethanolysis ethanoyl ethel ethene ethenic ethenoid ethenoidal ethenol ethenyl etheostomoid ether etherate ethereal etherealism ethereality etherealization etherealize ethereally etherealness etherean ethered ethereous etheric etherification etheriform etherify etherin etherion etherism etherization etherize etherizer etherolate etherous ethic ethical ethicalism ethicality ethically ethicalness ethician ethicism ethicist ethicize ethicoaesthetic ethicophysical ethicopolitical ethicoreligious ethicosocial ethics ethid ethide ethidene ethine ethiodide ethionic ethiops ethmofrontal ethmoid ethmoidal ethmoiditis ethmolachrymal ethmolith ethmomaxillary ethmonasal ethmopalatal ethmopalatine ethmophysal ethmopresphenoidal ethmosphenoid ethmosphenoidal ethmoturbinal ethmoturbinate ethmovomer ethmovomerine ethmyphitis ethnal ethnarch ethnarchy ethnic ethnical ethnically ethnicism ethnicist ethnicize ethnicon ethnize ethnobiological ethnobiology ethnobotanic ethnobotanical ethnobotanist ethnobotany ethnocentric ethnocentrism ethnocracy ethnodicy ethnoflora ethnogenic ethnogeny ethnogeographer ethnogeographic ethnogeographical ethnogeographically ethnogeography ethnographer ethnographic ethnographical ethnographically ethnographist ethnography ethnologer ethnologic ethnological ethnologically ethnologist ethnology ethnomaniac ethnopsychic ethnopsychological ethnopsychology ethnos ethnotechnics ethnotechnography ethnozoological ethnozoology ethography etholide ethologic ethological ethology ethonomic ethonomics ethopoeia ethos ethoxide ethoxycaffeine ethoxyl ethrog ethyl ethylamide ethylamine ethylate ethylation ethylene ethylenediamine ethylenic ethylenimine ethylenoid ethylhydrocupreine ethylic ethylidene ethylidyne ethylin ethylmorphine ethylsulphuric ethyne ethynyl etiogenic etiolate etiolation etiolin etiolize etiological etiologically etiologist etiologue etiology etiophyllin etioporphyrin etiotropic etiotropically etiquette etiquettical etna ettle etua etude etui etym etymic etymography etymologer etymologic etymological etymologically etymologicon etymologist etymologization etymologize etymology etymon etymonic etypic etypical etypically eu euangiotic euaster eubacterium eucaine eucairite eucalypt eucalypteol eucalyptian eucalyptic eucalyptography eucalyptol eucalyptole eucalyptus eucatropine eucephalous eucharistial eucharistic eucharistical eucharistically eucharistize euchlorhydria euchloric euchlorine euchological euchologion euchology euchre euchred euchroic euchroite euchromatic euchromatin euchrome euchromosome euchrone euclase eucolite eucone euconic eucosmid eucrasia eucrasite eucrasy eucrite eucryphiaceous eucryptite eucrystalline euctical eucyclic eudaemon eudaemonia eudaemonic eudaemonical eudaemonics eudaemonism eudaemonist eudaemonistic eudaemonistical eudaemonistically eudaemonize eudaemony eudaimonia eudaimonism eudaimonist eudiagnostic eudialyte eudiaphoresis eudidymite eudiometer eudiometric eudiometrical eudiometrically eudiometry eudipleural euge eugenesic eugenesis eugenetic eugenic eugenical eugenically eugenicist eugenics eugenism eugenist eugenol eugenolate eugeny euglenoid euglobulin eugranitic euharmonic euhedral euhemerism euhemerist euhemeristic euhemeristically euhemerize euhyostylic euhyostyly euktolite eulachon eulalia eulamellibranch eulogia eulogic eulogical eulogically eulogious eulogism eulogist eulogistic eulogistical eulogistically eulogium eulogization eulogize eulogizer eulogy eulysite eulytine eulytite eumenid eumenorrhea eumerism eumeristic eumerogenesis eumerogenetic eumeromorph eumeromorphic eumitosis eumitotic eumoiriety eumoirous eumorphous eumycete eumycetic eunicid eunomy eunuch eunuchal eunuchism eunuchize eunuchoid eunuchoidism eunuchry euomphalid euonym euonymin euonymous euonymy euornithic euosmite euouae eupad eupathy eupatoriaceous eupatorin eupatory eupatrid eupatridae eupepsia eupepsy eupeptic eupepticism eupepticity euphausiid euphemian euphemious euphemiously euphemism euphemist euphemistic euphemistical euphemistically euphemize euphemizer euphemous euphemy euphon euphone euphonetic euphonetics euphonia euphonic euphonical euphonically euphonicalness euphonious euphoniously euphoniousness euphonism euphonium euphonize euphonon euphonous euphony euphonym euphorbiaceous euphorbium euphoria euphoric euphory euphrasy euphroe euphuism euphuist euphuistic euphuistical euphuistically euphuize eupione eupittonic euplastic euploid euploidy eupnea eupolyzoan eupractic eupraxia eupsychics eupyrchroite eupyrene eupyrion eureka eurhodine eurhodol euripus eurite eurobin europium euryalean euryalidan eurybathic eurybenthic eurycephalic eurycephalous eurygnathic eurygnathism eurygnathous euryhaline eurylaimoid euryon euryprognathous euryprosopic eurypterid eurypteroid eurypylous euryscope eurystomatous eurythermal eurythermic eurythmic eurythmical eurythmics eurythmy eurytomid euryzygous eusol eusporangiate eustachium eustatic eustomatous eustyle eusuchian eusynchite eutannin eutaxic eutaxite eutaxitic eutaxy eutechnic eutechnics eutectic eutectoid eutexia euthanasia euthanasy euthenics euthenist eutherian euthermic euthycomic euthyneural euthyneurous euthytatic euthytropic eutomous eutony eutrophic eutrophy eutropic eutropous euxanthate euxanthic euxanthone euxenite evacuant evacuate evacuation evacuative evacuator evacue evacuee evadable evade evader evadingly evagation evaginable evaginate evagination evaluable evaluate evaluation evaluative evalue evanesce evanescence evanescency evanescent evanescently evanescible evangel evangelary evangelian evangeliarium evangeliary evangelical evangelicalism evangelicality evangelically evangelicalness evangelican evangelicism evangelicity evangelion evangelism evangelist evangelistarion evangelistarium evangelistary evangelistic evangelistically evangelistics evangelistship evangelium evangelization evangelize evangelizer evanish evanishment evanition evansite evaporability evaporable evaporate evaporation evaporative evaporativity evaporator evaporimeter evaporize evaporometer evase evasible evasion evasional evasive evasively evasiveness eve evechurr evection evectional evejar evelight evelong even evenblush evendown evener evenfall evenforth evenglow evenhanded evenhandedly evenhandedness evening evenlight evenlong evenly evenmete evenminded evenmindedness evenness evens evensong event eventful eventfully eventfulness eventide eventime eventless eventlessly eventlessness eventognath eventognathous eventration eventual eventuality eventualize eventually eventuate eventuation evenwise evenworthy eveque ever everbearer everbearing everbloomer everblooming everduring everglade evergreen evergreenery evergreenite everlasting everlastingly everlastingness everliving evermore evernioid eversible eversion eversive eversporting evert evertebral evertebrate evertile evertor everwhich everwho every everybody everyday everydayness everyhow everylike everyman everyness everyone everything everywhen everywhence everywhere everywhereness everywheres everywhither evestar evetide eveweed evict eviction evictor evidence evidencive evident evidential evidentially evidentiary evidently evidentness evil evildoer evilhearted evilly evilmouthed evilness evilproof evilsayer evilspeaker evilspeaking evilwishing evince evincement evincible evincibly evincingly evincive evirate eviration eviscerate evisceration evisite evitable evitate evitation evittate evocable evocate evocation evocative evocatively evocator evocatory evocatrix evoe evoke evoker evolute evolution evolutional evolutionally evolutionary evolutionism evolutionist evolutionize evolutive evolutoid evolvable evolve evolvement evolvent evolver evovae evulgate evulgation evulse evulsion evzone ewder ewe ewelease ewer ewerer ewery ewry ex exacerbate exacerbation exacerbescence exacerbescent exact exactable exacter exacting exactingly exactingness exaction exactitude exactive exactiveness exactly exactment exactness exactor exactress exadversum exaggerate exaggerated exaggeratedly exaggerating exaggeratingly exaggeration exaggerative exaggeratively exaggerativeness exaggerator exaggeratory exagitate exagitation exairesis exalate exalbuminose exalbuminous exallotriote exalt exaltation exaltative exalted exaltedly exaltedness exalter exam examen examinability examinable examinant examinate examination examinational examinationism examinationist examinative examinator examinatorial examinatory examine examinee examiner examinership examining examiningly example exampleless exampleship exanimate exanimation exanthem exanthema exanthematic exanthematous exappendiculate exarate exaration exarch exarchal exarchate exarchateship exarchist exarchy exareolate exarillate exaristate exarteritis exarticulate exarticulation exasperate exasperated exasperatedly exasperater exasperating exasperatingly exasperation exasperative exaspidean exaugurate exauguration excalate excalation excalcarate excalceate excalceation excamb excamber excambion excandescence excandescency excandescent excantation excarnate excarnation excathedral excaudate excavate excavation excavationist excavator excavatorial excavatory excave excecate excecation excedent exceed exceeder exceeding exceedingly exceedingness excel excelente excellence excellency excellent excellently excelsin excelsior excelsitude excentral excentric excentrical excentricity except exceptant excepting exception exceptionable exceptionableness exceptionably exceptional exceptionality exceptionally exceptionalness exceptionary exceptionless exceptious exceptiousness exceptive exceptively exceptiveness exceptor excerebration excerpt excerptible excerption excerptive excerptor excess excessive excessively excessiveness excessman exchange exchangeability exchangeable exchangeably exchanger exchequer excide excipient exciple excipular excipule excipuliform excipulum excircle excisable excise exciseman excisemanship excision excisor excitability excitable excitableness excitancy excitant excitation excitative excitator excitatory excite excited excitedly excitedness excitement exciter exciting excitingly excitive excitoglandular excitometabolic excitomotion excitomotor excitomotory excitomuscular excitonutrient excitor excitory excitosecretory excitovascular exclaim exclaimer exclaiming exclaimingly exclamation exclamational exclamative exclamatively exclamatorily exclamatory exclave exclosure excludable exclude excluder excluding excludingly exclusion exclusionary exclusioner exclusionism exclusionist exclusive exclusively exclusiveness exclusivism exclusivist exclusivity exclusory excogitable excogitate excogitation excogitative excogitator excommunicable excommunicant excommunicate excommunication excommunicative excommunicator excommunicatory exconjugant excoriable excoriate excoriation excoriator excorticate excortication excrement excremental excrementary excrementitial excrementitious excrementitiously excrementitiousness excrementive excresce excrescence excrescency excrescent excrescential excreta excretal excrete excreter excretes excretion excretionary excretitious excretive excretory excriminate excruciable excruciate excruciating excruciatingly excruciation excruciator excubant excudate exculpable exculpate exculpation exculpative exculpatorily exculpatory excurrent excurse excursion excursional excursionary excursioner excursionism excursionist excursionize excursive excursively excursiveness excursory excursus excurvate excurvated excurvation excurvature excurved excusability excusable excusableness excusably excusal excusative excusator excusatory excuse excuseful excusefully excuseless excuser excusing excusingly excusive excuss excyst excystation excysted excystment exdelicto exdie exeat execrable execrableness execrably execrate execration execrative execratively execrator execratory executable executancy executant execute executed executer execution executional executioneering executioner executioneress executionist executive executively executiveness executiveship executor executorial executorship executory executress executrices executrix executrixship executry exedent exedra exegeses exegesis exegesist exegete exegetic exegetical exegetically exegetics exegetist exemplar exemplaric exemplarily exemplariness exemplarism exemplarity exemplary exemplifiable exemplification exemplificational exemplificative exemplificator exemplifier exemplify exempt exemptible exemptile exemption exemptionist exemptive exencephalia exencephalic exencephalous exencephalus exendospermic exendospermous exenterate exenteration exequatur exequial exequy exercisable exercise exerciser exercitant exercitation exercitor exercitorial exercitorian exeresis exergual exergue exert exertion exertionless exertive exes exeunt exfiguration exfigure exfiltration exflagellate exflagellation exflect exfodiate exfodiation exfoliate exfoliation exfoliative exfoliatory exgorgitation exhalable exhalant exhalation exhalatory exhale exhaust exhausted exhaustedly exhaustedness exhauster exhaustibility exhaustible exhausting exhaustingly exhaustion exhaustive exhaustively exhaustiveness exhaustless exhaustlessly exhaustlessness exheredate exheredation exhibit exhibitable exhibitant exhibiter exhibition exhibitional exhibitioner exhibitionism exhibitionist exhibitionistic exhibitionize exhibitive exhibitively exhibitor exhibitorial exhibitorship exhibitory exhilarant exhilarate exhilarating exhilaratingly exhilaration exhilarative exhilarator exhilaratory exhort exhortation exhortative exhortatively exhortator exhortatory exhorter exhortingly exhumate exhumation exhumator exhumatory exhume exhumer exigence exigency exigent exigenter exigently exigible exiguity exiguous exiguously exiguousness exilarch exilarchate exile exiledom exilement exiler exilian exilic exility eximious eximiously eximiousness exinanite exinanition exindusiate exinguinal exist existability existence existent existential existentialism existentialist existentialistic existentialize existentially existently exister existibility existible existlessness exit exite exition exitus exlex exmeridian exoarteritis exoascaceous exocannibalism exocardia exocardiac exocardial exocarp exocataphoria exoccipital exocentric exochorion exoclinal exocline exocoelar exocoele exocoelic exocoelom exocolitis exocone exocrine exoculate exoculation exocyclic exode exoderm exodermis exodic exodist exodontia exodontist exodos exodromic exodromy exodus exody exoenzyme exoenzymic exoerythrocytic exogamic exogamous exogamy exogastric exogastrically exogastritis exogen exogenetic exogenic exogenous exogenously exogeny exognathion exognathite exolemma exometritis exomion exomis exomologesis exomorphic exomorphism exomphalos exomphalous exomphalus exon exonarthex exoner exonerate exoneration exonerative exonerator exoneural exonship exopathic exoperidium exophagous exophagy exophasia exophasic exophoria exophoric exophthalmic exophthalmos exoplasm exopod exopodite exopoditic exopterygotic exopterygotism exopterygotous exorability exorable exorableness exorbital exorbitance exorbitancy exorbitant exorbitantly exorbitate exorbitation exorcisation exorcise exorcisement exorciser exorcism exorcismal exorcisory exorcist exorcistic exorcistical exordia exordial exordium exordize exorganic exorhason exormia exornation exosepsis exoskeletal exoskeleton exosmic exosmose exosmosis exosmotic exosperm exosporal exospore exosporium exosporous exostome exostosed exostosis exostotic exostra exostracism exostracize exoteric exoterical exoterically exotericism exoterics exotheca exothecal exothecate exothecium exothermal exothermic exothermous exotic exotically exoticalness exoticism exoticist exoticity exoticness exotism exotospore exotoxic exotoxin exotropia exotropic exotropism expalpate expand expanded expandedly expandedness expander expanding expandingly expanse expansibility expansible expansibleness expansibly expansile expansion expansional expansionary expansionism expansionist expansive expansively expansiveness expansivity expansometer expansure expatiate expatiater expatiatingly expatiation expatiative expatiator expatiatory expatriate expatriation expect expectable expectance expectancy expectant expectantly expectation expectative expectedly expecter expectingly expective expectorant expectorate expectoration expectorative expectorator expede expediate expedience expediency expedient expediential expedientially expedientist expediently expeditate expeditation expedite expedited expeditely expediteness expediter expedition expeditionary expeditionist expeditious expeditiously expeditiousness expel expellable expellant expellee expeller expend expendability expendable expender expendible expenditor expenditrix expenditure expense expenseful expensefully expensefulness expenseless expensilation expensive expensively expensiveness expenthesis expergefacient expergefaction experience experienceable experienced experienceless experiencer experiencible experient experiential experientialism experientialist experientially experiment experimental experimentalism experimentalist experimentalize experimentally experimentarian experimentation experimentative experimentator experimented experimentee experimenter experimentist experimentize experimently expert expertism expertize expertly expertness expertship expiable expiate expiation expiational expiatist expiative expiator expiatoriness expiatory expilate expilation expilator expirable expirant expirate expiration expirator expiratory expire expiree expirer expiring expiringly expiry expiscate expiscation expiscator expiscatory explain explainable explainer explaining explainingly explanate explanation explanative explanatively explanator explanatorily explanatoriness explanatory explant explantation explement explemental expletive expletively expletiveness expletory explicable explicableness explicate explication explicative explicatively explicator explicatory explicit explicitly explicitness explodable explode exploded explodent exploder exploit exploitable exploitage exploitation exploitationist exploitative exploiter exploitive exploiture explorable exploration explorational explorative exploratively explorativeness explorator exploratory explore explorement explorer exploring exploringly explosibility explosible explosion explosionist explosive explosively explosiveness expone exponence exponency exponent exponential exponentially exponentiation exponible export exportability exportable exportation exporter exposal expose exposed exposedness exposer exposit exposition expositional expositionary expositive expositively expositor expositorial expositorially expositorily expositoriness expository expositress expostulate expostulating expostulatingly expostulation expostulative expostulatively expostulator expostulatory exposure expound expoundable expounder express expressable expressage expressed expresser expressibility expressible expressibly expression expressionable expressional expressionful expressionism expressionist expressionistic expressionless expressionlessly expressionlessness expressive expressively expressiveness expressivism expressivity expressless expressly expressman expressness expressway exprimable exprobrate exprobration exprobratory expromission expromissor expropriable expropriate expropriation expropriator expugn expugnable expuition expulsatory expulse expulser expulsion expulsionist expulsive expulsory expunction expunge expungeable expungement expunger expurgate expurgation expurgative expurgator expurgatorial expurgatory expurge exquisite exquisitely exquisiteness exquisitism exquisitively exradio exradius exrupeal exsanguinate exsanguination exsanguine exsanguineous exsanguinity exsanguinous exsanguious exscind exscissor exscriptural exsculptate exscutellate exsect exsectile exsection exsector exsequatur exsert exserted exsertile exsertion exship exsibilate exsibilation exsiccant exsiccatae exsiccate exsiccation exsiccative exsiccator exsiliency exsomatic exspuition exsputory exstipulate exstrophy exsuccous exsuction exsufflate exsufflation exsufflicate exsurge exsurgent extant extemporal extemporally extemporalness extemporaneity extemporaneous extemporaneously extemporaneousness extemporarily extemporariness extemporary extempore extemporization extemporize extemporizer extend extended extendedly extendedness extender extendibility extendible extending extense extensibility extensible extensibleness extensile extensimeter extension extensional extensionist extensity extensive extensively extensiveness extensometer extensor extensory extensum extent extenuate extenuating extenuatingly extenuation extenuative extenuator extenuatory exter exterior exteriorate exterioration exteriority exteriorization exteriorize exteriorly exteriorness exterminable exterminate extermination exterminative exterminator exterminatory exterminatress exterminatrix exterminist extern external externalism externalist externalistic externality externalization externalize externally externals externate externation externe externity externization externize externomedian externum exteroceptist exteroceptive exteroceptor exterraneous exterrestrial exterritorial exterritoriality exterritorialize exterritorially extima extinct extinction extinctionist extinctive extinctor extine extinguish extinguishable extinguishant extinguished extinguisher extinguishment extipulate extirpate extirpation extirpationist extirpative extirpator extirpatory extispex extispicious extispicy extogenous extol extoll extollation extoller extollingly extollment extolment extoolitic extorsive extorsively extort extorter extortion extortionary extortionate extortionately extortioner extortionist extortive extra extrabold extrabranchial extrabronchial extrabuccal extrabulbar extrabureau extraburghal extracalendar extracalicular extracanonical extracapsular extracardial extracarpal extracathedral extracellular extracellularly extracerebral extracivic extracivically extraclassroom extraclaustral extracloacal extracollegiate extracolumella extraconscious extraconstellated extraconstitutional extracorporeal extracorpuscular extracosmic extracosmical extracostal extracranial extract extractable extractant extracted extractible extractiform extraction extractive extractor extractorship extracultural extracurial extracurricular extracurriculum extracutaneous extracystic extradecretal extradialectal extraditable extradite extradition extradomestic extrados extradosed extradotal extraduction extradural extraembryonic extraenteric extraepiphyseal extraequilibrium extraessential extraessentially extrafascicular extrafloral extrafocal extrafoliaceous extraforaneous extraformal extragalactic extragastric extrait extrajudicial extrajudicially extralateral extralite extrality extramarginal extramatrical extramedullary extramental extrameridian extrameridional extrametaphysical extrametrical extrametropolitan extramodal extramolecular extramorainal extramorainic extramoral extramoralist extramundane extramural extramurally extramusical extranational extranatural extranean extraneity extraneous extraneously extraneousness extranidal extranormal extranuclear extraocular extraofficial extraoral extraorbital extraorbitally extraordinarily extraordinariness extraordinary extraorganismal extraovate extraovular extraparenchymal extraparental extraparietal extraparliamentary extraparochial extraparochially extrapatriarchal extrapelvic extraperineal extraperiodic extraperiosteal extraperitoneal extraphenomenal extraphysical extraphysiological extrapituitary extraplacental extraplanetary extrapleural extrapoetical extrapolar extrapolate extrapolation extrapolative extrapolator extrapopular extraprofessional extraprostatic extraprovincial extrapulmonary extrapyramidal extraquiz extrared extraregarding extraregular extraregularly extrarenal extraretinal extrarhythmical extrasacerdotal extrascholastic extraschool extrascientific extrascriptural extrascripturality extrasensible extrasensory extrasensuous extraserous extrasocial extrasolar extrasomatic extraspectral extraspherical extraspinal extrastapedial extrastate extrasterile extrastomachal extrasyllabic extrasyllogistic extrasyphilitic extrasystole extrasystolic extratabular extratarsal extratellurian extratelluric extratemporal extratension extratensive extraterrene extraterrestrial extraterritorial extraterritoriality extraterritorially extrathecal extratheistic extrathermodynamic extrathoracic extratorrid extratracheal extratribal extratropical extratubal extratympanic extrauterine extravagance extravagancy extravagant extravagantly extravagantness extravaganza extravagate extravaginal extravasate extravasation extravascular extraventricular extraversion extravert extravillar extraviolet extravisceral extrazodiacal extreme extremeless extremely extremeness extremism extremist extremistic extremital extremity extricable extricably extricate extricated extrication extrinsic extrinsical extrinsicality extrinsically extrinsicalness extrinsicate extrinsication extroitive extropical extrorsal extrorse extrorsely extrospect extrospection extrospective extroversion extroversive extrovert extrovertish extrude extruder extruding extrusile extrusion extrusive extrusory extubate extubation extumescence extund extusion exuberance exuberancy exuberant exuberantly exuberantness exuberate exuberation exudate exudation exudative exude exudence exulcerate exulceration exulcerative exulceratory exult exultance exultancy exultant exultantly exultation exultet exultingly exululate exumbral exumbrella exumbrellar exundance exundancy exundate exundation exuviability exuviable exuviae exuvial exuviate exuviation exzodiacal ey eyah eyalet eyas eye eyeball eyebalm eyebar eyebeam eyeberry eyeblink eyebolt eyebree eyebridled eyebright eyebrow eyecup eyed eyedness eyedot eyedrop eyeflap eyeful eyeglance eyeglass eyehole eyelash eyeless eyelessness eyelet eyeleteer eyeletter eyelid eyelight eyelike eyeline eyemark eyen eyepiece eyepit eyepoint eyer eyereach eyeroot eyesalve eyeseed eyeservant eyeserver eyeservice eyeshade eyeshield eyeshot eyesight eyesome eyesore eyespot eyestalk eyestone eyestrain eyestring eyetooth eyewaiter eyewash eyewater eyewear eyewink eyewinker eyewitness eyewort eyey eying eyn eyne eyot eyoty eyra eyre eyrie eyrir ezba f fa fabaceous fabella fabes fabiform fable fabled fabledom fableist fableland fablemaker fablemonger fablemongering fabler fabliau fabling fabric fabricant fabricate fabrication fabricative fabricator fabricatress fabrikoid fabular fabulist fabulosity fabulous fabulously fabulousness faburden facadal facade face faceable facebread facecloth faced faceless facellite facemaker facemaking faceman facemark facepiece faceplate facer facet facete faceted facetely faceteness facetiae facetiation facetious facetiously facetiousness facewise facework facia facial facially faciation faciend facient facies facile facilely facileness facilitate facilitation facilitative facilitator facility facing facingly facinorous facinorousness faciobrachial faciocervical faciolingual facioplegia facioscapulohumeral fack fackeltanz fackings fackins facks facsimile facsimilist facsimilize fact factable factabling factful facticide faction factional factionalism factionary factioneer factionist factionistism factious factiously factiousness factish factitial factitious factitiously factitive factitively factitude factive factor factorability factorable factorage factordom factoress factorial factorially factorist factorization factorize factorship factory factoryship factotum factrix factual factuality factually factualness factum facture facty facula facular faculous facultate facultative facultatively facultied facultize faculty facund facy fad fadable faddiness faddish faddishness faddism faddist faddle faddy fade fadeaway faded fadedly fadedness fadeless faden fader fadge fading fadingly fadingness fadmonger fadmongering fadmongery fadridden fady fae faerie faery faeryland faff faffle faffy fag fagaceous fagald fage fager fagger faggery fagging faggingly fagine fagopyrism fagopyrismus fagot fagoter fagoting fagottino fagottist fagoty faham fahlerz fahlore fahlunite faience fail failing failingly failingness faille failure fain fainaigue fainaiguer faineance faineancy faineant faineantism fainly fainness fains faint fainter faintful faintheart fainthearted faintheartedly faintheartedness fainting faintingly faintish faintishness faintly faintness faints fainty faipule fair fairer fairfieldite fairgoer fairgoing fairgrass fairground fairily fairing fairish fairishly fairkeeper fairlike fairling fairly fairm fairness fairstead fairtime fairwater fairway fairy fairydom fairyfolk fairyhood fairyish fairyism fairyland fairylike fairyologist fairyology fairyship faith faithbreach faithbreaker faithful faithfully faithfulness faithless faithlessly faithlessness faithwise faithworthiness faithworthy faitour fake fakement faker fakery fakiness fakir fakirism faky falanaka falbala falcade falcate falcated falcation falcer falces falchion falcial falciform falciparum falcon falconbill falconelle falconer falconet falconine falconlike falconoid falconry falcopern falcula falcular falculate faldage falderal faldfee faldstool fall fallace fallacious fallaciously fallaciousness fallacy fallage fallation fallaway fallback fallectomy fallen fallenness faller fallfish fallibility fallible fallibleness fallibly falling fallostomy fallotomy fallow fallowist fallowness falltime fallway fally falsary false falsehearted falseheartedly falseheartedness falsehood falsely falsen falseness falser falsettist falsetto falsework falsidical falsie falsifiable falsificate falsification falsificator falsifier falsify falsism faltboat faltche falter falterer faltering falteringly falutin falx fam famatinite famble fame fameflower fameful fameless famelessly famelessness fameworthy familia familial familiar familiarism familiarity familiarization familiarize familiarizer familiarizingly familiarly familiarness familism familist familistery familistic familistical family familyish famine famish famishment famous famously famousness famulary famulus fan fana fanal fanam fanatic fanatical fanatically fanaticalness fanaticism fanaticize fanback fanbearer fanciable fancical fancied fancier fanciful fancifully fancifulness fancify fanciless fancy fancymonger fancysick fancywork fand fandangle fandango fandom fanega fanegada fanfarade fanfare fanfaron fanfaronade fanfaronading fanflower fanfoot fang fanged fangle fangled fanglement fangless fanglet fanglomerate fangot fangy fanhouse faniente fanion fanioned fanlight fanlike fanmaker fanmaking fanman fannel fanner fannier fanning fanon fant fantail fantasia fantasie fantasied fantasist fantasque fantassin fantast fantastic fantastical fantasticality fantastically fantasticalness fantasticate fantastication fantasticism fantasticly fantasticness fantastico fantastry fantasy fantigue fantoccini fantocine fantod fantoddish fanweed fanwise fanwork fanwort fanwright faon far farad faradaic faraday faradic faradism faradization faradize faradizer faradmeter faradocontractility faradomuscular faradonervous faradopalpation farandole farasula faraway farawayness farce farcelike farcer farcetta farcial farcialize farcical farcicality farcically farcicalness farcied farcify farcing farcinoma farcist farctate farcy farde fardel fardelet fardh fardo fare farer farewell farfara farfel farfetched farfetchedness fargoing fargood farina farinaceous farinaceously faring farinometer farinose farinosely farinulent farish farkleberry farl farleu farm farmable farmage farmer farmeress farmerette farmerlike farmership farmery farmhold farmhouse farmhousey farming farmost farmplace farmstead farmsteading farmtown farmy farmyard farmyardy farnesol farness faro farolito farraginous farrago farrand farrandly farrantly farreate farreation farrier farrierlike farriery farrisite farrow farruca farsalah farse farseeing farseeingness farseer farset farsighted farsightedly farsightedness farther farthermost farthest farthing farthingale farthingless farweltered fasces fascet fascia fascial fasciate fasciated fasciately fasciation fascicle fascicled fascicular fascicularly fasciculate fasciculated fasciculately fasciculation fascicule fasciculus fascinate fascinated fascinatedly fascinating fascinatingly fascination fascinative fascinator fascinatress fascine fascinery fasciodesis fasciola fasciolar fasciole fasciolet fascioliasis fascioloid fascioplasty fasciotomy fascis fascism fascist fascisticization fascisticize fascistization fascistize fash fasher fashery fashion fashionability fashionable fashionableness fashionably fashioned fashioner fashionist fashionize fashionless fashionmonger fashionmonging fashious fashiousness fasibitikite fasinite fass fassalite fast fasten fastener fastening faster fastgoing fasthold fastidiosity fastidious fastidiously fastidiousness fastidium fastigate fastigated fastigiate fastigium fasting fastingly fastish fastland fastness fastuous fastuously fastuousness fastus fat fatal fatalism fatalist fatalistic fatalistically fatality fatalize fatally fatalness fatbird fatbrained fate fated fateful fatefully fatefulness fatelike fathead fatheaded fatheadedness fathearted father fathercraft fathered fatherhood fatherland fatherlandish fatherless fatherlessness fatherlike fatherliness fatherling fatherly fathership fathmur fathom fathomable fathomage fathomer fathomless fathomlessly fathomlessness fatidic fatidical fatidically fatiferous fatigability fatigable fatigableness fatigue fatigueless fatiguesome fatiguing fatiguingly fatiha fatil fatiloquent fatiscence fatiscent fatless fatling fatly fatness fatsia fattable fatten fattenable fattener fatter fattily fattiness fattish fattishness fattrels fatty fatuism fatuitous fatuitousness fatuity fatuoid fatuous fatuously fatuousness fatwood faucal faucalize fauces faucet fauchard faucial faucitis faucre faugh faujasite fauld fault faultage faulter faultfind faultfinder faultfinding faultful faultfully faultily faultiness faulting faultless faultlessly faultlessness faultsman faulty faun faunal faunally faunated faunish faunist faunistic faunistical faunistically faunlike faunological faunology faunule fause faussebraie faussebrayed faust fauterer fautor fautorship fauve favaginous favella favellidium favelloid faveolate faveolus faviform favilla favillous favism favissa favn favonian favor favorable favorableness favorably favored favoredly favoredness favorer favoress favoring favoringly favorite favoritism favorless favose favosely favosite favositoid favous favus fawn fawner fawnery fawning fawningly fawningness fawnlike fawnskin fawny fay fayalite fayles faze fazenda fe feaberry feague feak feal fealty fear fearable feared fearedly fearedness fearer fearful fearfully fearfulness fearingly fearless fearlessly fearlessness fearnought fearsome fearsomely fearsomeness feasance feasibility feasible feasibleness feasibly feasor feast feasten feaster feastful feastfully feastless feat feather featherback featherbed featherbedding featherbird featherbone featherbrain featherbrained featherdom feathered featheredge featheredged featherer featherfew featherfoil featherhead featherheaded featheriness feathering featherleaf featherless featherlessness featherlet featherlike featherman feathermonger featherpate featherpated featherstitch featherstitching feathertop featherway featherweed featherweight featherwing featherwise featherwood featherwork featherworker feathery featliness featly featness featous featural featurally feature featured featureful featureless featureliness featurely featy feaze feazings febricant febricide febricity febricula febrifacient febriferous febrific febrifugal febrifuge febrile febrility februation fecal fecalith fecaloid feces feck feckful feckfully feckless fecklessly fecklessness feckly fecula feculence feculency feculent fecund fecundate fecundation fecundative fecundator fecundatory fecundify fecundity fecundize fed feddan federacy federal federalism federalist federalization federalize federally federalness federate federation federationist federatist federative federatively federator fee feeable feeble feeblebrained feeblehearted feebleheartedly feebleheartedness feebleness feebling feeblish feebly feed feedable feedback feedbin feedboard feedbox feeder feedhead feeding feedman feedsman feedstuff feedway feedy feel feelable feeler feeless feeling feelingful feelingless feelinglessly feelingly feelingness feer feere feering feetage feetless feeze fefnicute fegary fei feif feigher feign feigned feignedly feignedness feigner feigning feigningly feil feint feis feist feisty feldsher feldspar feldsparphyre feldspathic feldspathization feldspathoid felicide felicific felicitate felicitation felicitator felicitous felicitously felicitousness felicity felid feliform feline felinely felineness felinity felinophile felinophobe fell fellable fellage fellah fellaheen fellahin fellatio fellation fellen feller fellic felliducous fellifluous felling fellingbird fellinic fellmonger fellmongering fellmongery fellness felloe fellow fellowcraft fellowess fellowheirship fellowless fellowlike fellowship fellside fellsman felly feloid felon feloness felonious feloniously feloniousness felonry felonsetter felonsetting felonweed felonwood felonwort felony fels felsite felsitic felsobanyite felsophyre felsophyric felsosphaerite felstone felt felted felter felting feltlike feltmaker feltmaking feltmonger feltness feltwork feltwort felty feltyfare felucca felwort female femalely femaleness femality femalize feme femerell femic femicide feminacy feminal feminality feminate femineity feminie feminility feminin feminine femininely feminineness femininism femininity feminism feminist feministic feministics feminity feminization feminize feminologist feminology feminophobe femora femoral femorocaudal femorocele femorococcygeal femorofibular femoropopliteal femororotulian femorotibial femur fen fenbank fenberry fence fenceful fenceless fencelessness fencelet fenceplay fencer fenceress fenchene fenchone fenchyl fencible fencing fend fendable fender fendering fenderless fendillate fendillation fendy feneration fenestella fenestra fenestral fenestrate fenestrated fenestration fenestrato fenestrule fenite fenks fenland fenlander fenman fennec fennel fennelflower fennig fennish fenny fenouillet fensive fent fenter fenugreek feod feodal feodality feodary feodatory feoff feoffee feoffeeship feoffment feoffor feower feracious feracity feral feralin ferash ferberite ferdwit feretory feretrum ferfathmur ferfet ferganite fergusite fergusonite feria ferial feridgi ferie ferine ferinely ferineness ferity ferk ferling ferly fermail ferme ferment fermentability fermentable fermentarian fermentation fermentative fermentatively fermentativeness fermentatory fermenter fermentescible fermentitious fermentive fermentology fermentor fermentum fermerer fermery fermila fermorite fern fernandinite fernbird fernbrake ferned fernery ferngale ferngrower fernland fernleaf fernless fernlike fernshaw fernsick ferntickle ferntickled fernwort ferny ferocious ferociously ferociousness ferocity feroher ferrado ferrament ferrate ferrated ferrateen ferratin ferrean ferreous ferret ferreter ferreting ferretto ferrety ferri ferriage ferric ferrichloride ferricyanate ferricyanhydric ferricyanic ferricyanide ferricyanogen ferrier ferriferous ferrihydrocyanic ferriprussiate ferriprussic ferrite ferritization ferritungstite ferrivorous ferroalloy ferroaluminum ferroboron ferrocalcite ferrocerium ferrochrome ferrochromium ferroconcrete ferroconcretor ferrocyanate ferrocyanhydric ferrocyanic ferrocyanide ferrocyanogen ferroglass ferrogoslarite ferrohydrocyanic ferroinclave ferromagnesian ferromagnetic ferromagnetism ferromanganese ferromolybdenum ferronatrite ferronickel ferrophosphorus ferroprint ferroprussiate ferroprussic ferrosilicon ferrotitanium ferrotungsten ferrotype ferrotyper ferrous ferrovanadium ferrozirconium ferruginate ferrugination ferruginean ferruginous ferrule ferruler ferrum ferruminate ferrumination ferry ferryboat ferryhouse ferryman ferryway ferthumlungur fertile fertilely fertileness fertility fertilizable fertilization fertilizational fertilize fertilizer feru ferula ferulaceous ferule ferulic fervanite fervency fervent fervently ferventness fervescence fervescent fervid fervidity fervidly fervidness fervor fervorless fescenninity fescue fess fessely fesswise fest festal festally fester festerment festilogy festinance festinate festinately festination festine festival festivally festive festively festiveness festivity festivous festology festoon festoonery festoony festuca festucine fet fetal fetalism fetalization fetation fetch fetched fetcher fetching fetchingly feteless feterita fetial fetiales fetichmonger feticidal feticide fetid fetidity fetidly fetidness fetiferous fetiparous fetish fetisheer fetishic fetishism fetishist fetishistic fetishization fetishize fetishmonger fetishry fetlock fetlocked fetlow fetography fetometry fetoplacental fetor fetter fetterbush fetterer fetterless fetterlock fetticus fettle fettler fettling fetus feu feuage feuar feucht feud feudal feudalism feudalist feudalistic feudality feudalizable feudalization feudalize feudally feudatorial feudatory feudee feudist feudovassalism feued feuille feuilletonism feuilletonist feuilletonistic feulamort fever feverberry feverbush fevercup feveret feverfew fevergum feverish feverishly feverishness feverless feverlike feverous feverously feverroot fevertrap fevertwig fevertwitch feverweed feverwort few fewness fewsome fewter fewterer fewtrils fey feyness fez fezzed fezzy fi fiacre fiance fiancee fianchetto fiar fiard fiasco fiat fiatconfirmatio fib fibber fibbery fibdom fiber fiberboard fibered fiberize fiberizer fiberless fiberware fibration fibreless fibreware fibriform fibril fibrilla fibrillar fibrillary fibrillate fibrillated fibrillation fibrilled fibrilliferous fibrilliform fibrillose fibrillous fibrin fibrinate fibrination fibrine fibrinemia fibrinoalbuminous fibrinocellular fibrinogen fibrinogenetic fibrinogenic fibrinogenous fibrinolysin fibrinolysis fibrinolytic fibrinoplastic fibrinoplastin fibrinopurulent fibrinose fibrinosis fibrinous fibrinuria fibroadenia fibroadenoma fibroadipose fibroangioma fibroareolar fibroblast fibroblastic fibrobronchitis fibrocalcareous fibrocarcinoma fibrocartilage fibrocartilaginous fibrocaseose fibrocaseous fibrocellular fibrochondritis fibrochondroma fibrochondrosteal fibrocrystalline fibrocyst fibrocystic fibrocystoma fibrocyte fibroelastic fibroenchondroma fibrofatty fibroferrite fibroglia fibroglioma fibrohemorrhagic fibroid fibroin fibrointestinal fibroligamentous fibrolipoma fibrolipomatous fibrolite fibrolitic fibroma fibromata fibromatoid fibromatosis fibromatous fibromembrane fibromembranous fibromucous fibromuscular fibromyectomy fibromyitis fibromyoma fibromyomatous fibromyomectomy fibromyositis fibromyotomy fibromyxoma fibromyxosarcoma fibroneuroma fibronuclear fibronucleated fibropapilloma fibropericarditis fibroplastic fibropolypus fibropsammoma fibropurulent fibroreticulate fibrosarcoma fibrose fibroserous fibrosis fibrositis fibrotic fibrotuberculosis fibrous fibrously fibrousness fibrovasal fibrovascular fibry fibster fibula fibulae fibular fibulare fibulocalcaneal ficary fice ficelle fiche fichtelite fichu ficiform fickle ficklehearted fickleness ficklety ficklewise fickly fico ficoid ficoides fictation fictile fictileness fictility fiction fictional fictionalize fictionally fictionary fictioneer fictioner fictionist fictionistic fictionization fictionize fictionmonger fictious fictitious fictitiously fictitiousness fictive fictively fid fidalgo fidate fidation fiddle fiddleback fiddlebrained fiddlecome fiddledeedee fiddlefaced fiddlehead fiddleheaded fiddler fiddlerfish fiddlery fiddlestick fiddlestring fiddlewood fiddley fiddling fide fideicommiss fideicommissary fideicommission fideicommissioner fideicommissor fideicommissum fideism fideist fidejussion fidejussionary fidejussor fidejussory fidelity fidepromission fidepromissor fidfad fidge fidget fidgeter fidgetily fidgetiness fidgeting fidgetingly fidgety fidicinal fidicinales fidicula fiducia fiducial fiducially fiduciarily fiduciary fiducinales fie fiedlerite fiefdom field fieldball fieldbird fielded fielder fieldfare fieldish fieldman fieldpiece fieldsman fieldward fieldwards fieldwork fieldworker fieldwort fieldy fiend fiendful fiendfully fiendhead fiendish fiendishly fiendishness fiendism fiendlike fiendliness fiendly fiendship fient fierasferid fierasferoid fierce fiercehearted fiercely fiercen fierceness fierding fierily fieriness fiery fiesta fieulamort fife fifer fifie fifish fifo fifteen fifteener fifteenfold fifteenth fifteenthly fifth fifthly fiftieth fifty fiftyfold fig figaro figbird figeater figent figged figgery figging figgle figgy fight fightable fighter fighteress fighting fightingly fightwite figless figlike figment figmental figpecker figshell figulate figulated figuline figurability figurable figural figurant figurante figurate figurately figuration figurative figuratively figurativeness figure figured figuredly figurehead figureheadless figureheadship figureless figurer figuresome figurette figurial figurine figurism figurist figurize figury figworm figwort fike fikie filace filaceous filacer filament filamentar filamentary filamented filamentiferous filamentoid filamentose filamentous filamentule filander filanders filao filar filaria filarial filarian filariasis filaricidal filariform filariid filarious filasse filate filator filature filbert filch filcher filchery filching filchingly file filefish filelike filemaker filemaking filemot filer filesmith filet filial filiality filially filialness filiate filiation filibeg filibranch filibranchiate filibuster filibusterer filibusterism filibusterous filical filicauline filicic filicidal filicide filiciform filicin filicinean filicite filicologist filicology filiety filiferous filiform filiformed filigerous filigree filing filings filionymic filiopietistic filioque filipendulous filippo filipuncture filite fill fillable filled fillemot filler fillercap fillet filleter filleting filletlike filletster filleul filling fillingly fillingness fillip fillipeen fillister fillmass fillock fillowite filly film filmable filmdom filmet filmgoer filmgoing filmic filmiform filmily filminess filmish filmist filmize filmland filmlike filmogen filmslide filmstrip filmy filo filoplumaceous filoplume filopodium filose filoselle fils filter filterability filterable filterableness filterer filtering filterman filth filthify filthily filthiness filthless filthy filtrability filtrable filtratable filtrate filtration fimble fimbria fimbrial fimbriate fimbriated fimbriation fimbriatum fimbricate fimbricated fimbrilla fimbrillate fimbrilliferous fimbrillose fimbriodentate fimetarious fimicolous fin finable finableness finagle finagler final finale finalism finalist finality finalize finally finance financial financialist financially financier financiery financist finback finch finchbacked finched finchery find findability findable findal finder findfault finding findjan fine fineable finebent fineish fineleaf fineless finely finement fineness finer finery finespun finesse finesser finestill finestiller finetop finfish finfoot fingent finger fingerable fingerberry fingerbreadth fingered fingerer fingerfish fingerflower fingerhold fingerhook fingering fingerleaf fingerless fingerlet fingerlike fingerling fingernail fingerparted fingerprint fingerprinting fingerroot fingersmith fingerspin fingerstall fingerstone fingertip fingerwise fingerwork fingery fingrigo finial finialed finical finicality finically finicalness finicism finick finickily finickiness finicking finickingly finickingness finific finify finikin finiking fining finis finish finishable finished finisher finishing finite finitely finiteness finitesimal finitive finitude finity finjan fink finkel finland finless finlet finlike finnac finned finner finnesko finnip finny finochio fiord fiorded fiorin fiorite fip fipenny fipple fique fir firca fire fireable firearm firearmed fireback fireball firebird fireblende fireboard fireboat firebolt firebolted firebote firebox fireboy firebrand firebrat firebreak firebrick firebug fireburn firecoat firecracker firecrest fired firedamp firedog firedrake firefall firefang firefanged fireflaught fireflirt fireflower firefly fireguard firehouse fireless firelight firelike fireling firelit firelock fireman firemanship firemaster fireplace fireplug firepower fireproof fireproofing fireproofness firer fireroom firesafe firesafeness firesafety fireshaft fireshine fireside firesider firesideship firespout firestone firestopping firetail firetop firetrap firewarden firewater fireweed firewood firework fireworkless fireworky fireworm firing firk firker firkin firlot firm firmament firmamental firman firmance firmer firmhearted firmisternal firmisternial firmisternous firmly firmness firn firring firry first firstcomer firsthand firstling firstly firstness firstship firth fisc fiscal fiscalify fiscalism fiscalization fiscalize fiscally fischerite fise fisetin fish fishable fishback fishbed fishberry fishbolt fishbone fisheater fished fisher fisherboat fisherboy fisheress fisherfolk fishergirl fisherman fisherpeople fisherwoman fishery fishet fisheye fishfall fishful fishgarth fishgig fishhood fishhook fishhooks fishhouse fishify fishily fishiness fishing fishingly fishless fishlet fishlike fishline fishling fishman fishmonger fishmouth fishplate fishpond fishpool fishpot fishpotter fishpound fishskin fishtail fishway fishweed fishweir fishwife fishwoman fishwood fishworker fishworks fishworm fishy fishyard fisnoga fissate fissicostate fissidactyl fissidentaceous fissile fissileness fissilingual fissility fission fissionable fissipalmate fissipalmation fissiparation fissiparism fissiparity fissiparous fissiparously fissiparousness fissiped fissipedal fissipedate fissipedial fissirostral fissirostrate fissive fissural fissuration fissure fissureless fissuriform fissury fist fisted fister fistful fistiana fistic fistical fisticuff fisticuffer fisticuffery fistify fistiness fisting fistlike fistmele fistnote fistuca fistula fistular fistularioid fistulate fistulated fistulatome fistulatous fistule fistuliform fistulize fistulose fistulous fistwise fisty fit fitch fitched fitchee fitcher fitchery fitchet fitchew fitful fitfully fitfulness fitly fitment fitness fitout fitroot fittable fittage fitted fittedness fitten fitter fitters fittily fittiness fitting fittingly fittingness fitty fittyfied fittyways fittywise fitweed five fivebar fivefold fivefoldness fiveling fivepence fivepenny fivepins fiver fives fivescore fivesome fivestones fix fixable fixage fixate fixatif fixation fixative fixator fixature fixed fixedly fixedness fixer fixidity fixing fixity fixture fixtureless fixure fizelyite fizgig fizz fizzer fizzle fizzy fjarding fjeld fjerding flabbergast flabbergastation flabbily flabbiness flabby flabellarium flabellate flabellation flabellifoliate flabelliform flabellinerved flabellum flabrum flaccid flaccidity flaccidly flaccidness flacherie flack flacked flacker flacket flacourtiaceous flaff flaffer flag flagboat flagellant flagellantism flagellar flagellariaceous flagellate flagellated flagellation flagellative flagellator flagellatory flagelliferous flagelliform flagellist flagellosis flagellula flagellum flageolet flagfall flagger flaggery flaggily flagginess flagging flaggingly flaggish flaggy flagitate flagitation flagitious flagitiously flagitiousness flagleaf flagless flaglet flaglike flagmaker flagmaking flagman flagon flagonet flagonless flagpole flagrance flagrancy flagrant flagrantly flagrantness flagroot flagship flagstaff flagstick flagstone flagworm flail flaillike flair flaith flaithship flajolotite flak flakage flake flakeless flakelet flaker flakily flakiness flaky flam flamant flamb flambeau flambeaux flamberg flamboyance flamboyancy flamboyant flamboyantism flamboyantize flamboyantly flamboyer flame flamed flameflower flameless flamelet flamelike flamen flamenco flamenship flameproof flamer flamfew flamineous flaming flamingly flamingo flaminica flaminical flammability flammable flammeous flammiferous flammulated flammulation flammule flamy flan flancard flanch flanched flanconade flandan flandowser flane flange flangeless flanger flangeway flank flankard flanked flanker flanking flankwise flanky flannel flannelbush flanneled flannelette flannelflower flannelleaf flannelly flannelmouth flannelmouthed flannels flanque flap flapcake flapdock flapdoodle flapdragon flapjack flapmouthed flapper flapperdom flapperhood flapperish flapperism flare flareback flareboard flareless flaring flaringly flary flaser flash flashboard flasher flashet flashily flashiness flashing flashingly flashlight flashlike flashly flashness flashover flashpan flashproof flashtester flashy flask flasker flasket flasklet flasque flat flatboat flatbottom flatcap flatcar flatdom flated flatfish flatfoot flathat flathead flatiron flatland flatlet flatling flatly flatman flatness flatnose flatten flattener flattening flatter flatterable flattercap flatterdock flatterer flattering flatteringly flatteringness flattery flattie flatting flattish flattop flatulence flatulency flatulent flatulently flatulentness flatus flatware flatway flatways flatweed flatwise flatwoods flatwork flatworm flaught flaughter flaunt flaunter flauntily flauntiness flaunting flauntingly flaunty flautino flautist flavanilin flavaniline flavanthrene flavanthrone flavedo flavescence flavescent flavic flavicant flavid flavin flavine flavo flavone flavoprotein flavopurpurin flavor flavored flavorer flavorful flavoring flavorless flavorous flavorsome flavory flavour flaw flawed flawflower flawful flawless flawlessly flawlessness flawn flawy flax flaxboard flaxbush flaxdrop flaxen flaxlike flaxman flaxseed flaxtail flaxweed flaxwench flaxwife flaxwoman flaxwort flaxy flay flayer flayflint flea fleabane fleabite fleadock fleam fleaseed fleaweed fleawood fleawort fleay flebile fleche flechette fleck flecken flecker fleckiness fleckled fleckless flecklessly flecky flecnodal flecnode flection flectional flectionless flector fled fledge fledgeless fledgling fledgy flee fleece fleeceable fleeced fleeceflower fleeceless fleecelike fleecer fleech fleechment fleecily fleeciness fleecy fleer fleerer fleering fleeringly fleet fleeter fleetful fleeting fleetingly fleetingness fleetings fleetly fleetness fleetwing flemish flench flense flenser flerry flesh fleshbrush fleshed fleshen flesher fleshful fleshhood fleshhook fleshiness fleshing fleshings fleshless fleshlike fleshlily fleshliness fleshly fleshment fleshmonger fleshpot fleshy flet fletch fletcher flether fleuret fleurettee fleuronnee fleury flew flewed flewit flews flex flexanimous flexed flexibility flexible flexibleness flexibly flexile flexility flexion flexionless flexor flexuose flexuosity flexuous flexuously flexuousness flexural flexure flexured fley fleyedly fleyedness fleyland fleysome flibbertigibbet flicflac flick flicker flickering flickeringly flickerproof flickertail flickery flicky flidder flier fligger flight flighted flighter flightful flightily flightiness flighting flightless flightshot flighty flimflam flimflammer flimflammery flimmer flimp flimsily flimsiness flimsy flinch flincher flinching flinchingly flinder flindosa flindosy fling flinger flingy flinkite flint flinter flinthearted flintify flintily flintiness flintless flintlike flintlock flintwood flintwork flintworker flinty flioma flip flipe flipjack flippancy flippant flippantly flippantness flipper flipperling flippery flirt flirtable flirtation flirtational flirtationless flirtatious flirtatiously flirtatiousness flirter flirtigig flirting flirtingly flirtish flirtishness flirtling flirty flisk flisky flit flitch flitchen flite flitfold fliting flitter flitterbat flittermouse flittern flitting flittingly flitwite flivver flix flixweed float floatability floatable floatage floatation floatative floatboard floater floatiness floating floatingly floative floatless floatmaker floatman floatplane floatsman floatstone floaty flob flobby floc floccillation floccipend floccose floccosely flocculable flocculant floccular flocculate flocculation flocculator floccule flocculence flocculency flocculent flocculently flocculose flocculus floccus flock flocker flocking flockless flocklike flockman flockmaster flockowner flockwise flocky flocoon flodge floe floeberg floey flog floggable flogger flogging floggingly flogmaster flogster flokite flong flood floodable floodage floodboard floodcock flooded flooder floodgate flooding floodless floodlet floodlight floodlighting floodlike floodmark floodometer floodproof floodtime floodwater floodway floodwood floody floor floorage floorcloth floorer floorhead flooring floorless floorman floorwalker floorward floorway floorwise floozy flop flophouse flopover flopper floppers floppily floppiness floppy flopwing flora floral floralize florally floramor floran florate floreal floreate florence florent florentium flores florescence florescent floressence floret floreted floretum floriate floriated floriation florican floricin floricultural floriculturally floriculture floriculturist florid floridean florideous floridity floridly floridness floriferous floriferously floriferousness florification floriform florigen florigenic florigraphy florikan floriken florilegium florimania florimanist florin floriparous floripondio floriscope florist floristic floristically floristics floristry florisugent florivorous floroon floroscope florula florulent flory floscular floscularian floscule flosculose flosculous flosh floss flosser flossflower flossification flossing flossy flot flota flotage flotant flotation flotative flotilla flotorial flotsam flounce flouncey flouncing flounder floundering flounderingly flour flourish flourishable flourisher flourishing flourishingly flourishment flourishy flourlike floury flouse flout flouter flouting floutingly flow flowable flowage flower flowerage flowered flowerer floweret flowerful flowerily floweriness flowering flowerist flowerless flowerlessness flowerlet flowerlike flowerpecker flowerpot flowerwork flowery flowing flowingly flowingness flowmanostat flowmeter flown flowoff flu fluate fluavil flub flubdub flubdubbery flucan fluctiferous fluctigerous fluctisonant fluctisonous fluctuability fluctuable fluctuant fluctuate fluctuation fluctuosity fluctuous flue flued flueless fluellen fluellite flueman fluency fluent fluently fluentness fluer fluework fluey fluff fluffer fluffily fluffiness fluffy flugelman fluible fluid fluidacetextract fluidal fluidally fluidextract fluidglycerate fluidible fluidic fluidification fluidifier fluidify fluidimeter fluidism fluidist fluidity fluidization fluidize fluidly fluidness fluidram fluigram fluitant fluke fluked flukeless flukeworm flukewort flukily flukiness fluking fluky flumdiddle flume flumerin fluminose flummadiddle flummer flummery flummox flummydiddle flump flung flunk flunker flunkeydom flunkeyhood flunkeyish flunkeyize flunky flunkydom flunkyhood flunkyish flunkyism flunkyistic flunkyite flunkyize fluoaluminate fluoaluminic fluoarsenate fluoborate fluoboric fluoborid fluoboride fluoborite fluobromide fluocarbonate fluocerine fluocerite fluochloride fluohydric fluophosphate fluor fluoran fluoranthene fluorapatite fluorate fluorbenzene fluorene fluorenyl fluoresage fluoresce fluorescein fluorescence fluorescent fluorescigenic fluorescigenous fluorescin fluorhydric fluoric fluoridate fluoridation fluoride fluoridization fluoridize fluorimeter fluorinate fluorination fluorindine fluorine fluorite fluormeter fluorobenzene fluoroborate fluoroform fluoroformol fluorogen fluorogenic fluorography fluoroid fluorometer fluoroscope fluoroscopic fluoroscopy fluorosis fluorotype fluorspar fluoryl fluosilicate fluosilicic fluotantalate fluotantalic fluotitanate fluotitanic fluozirconic flurn flurr flurried flurriedly flurriment flurry flush flushboard flusher flusherman flushgate flushing flushingly flushness flushy flusk flusker fluster flusterate flusteration flusterer flusterment flustery flustrine flustroid flustrum flute flutebird fluted flutelike flutemouth fluter flutework flutina fluting flutist flutter flutterable flutteration flutterer fluttering flutteringly flutterless flutterment fluttersome fluttery fluty fluvial fluvialist fluviatic fluviatile fluvicoline fluvioglacial fluviograph fluviolacustrine fluviology fluviomarine fluviometer fluviose fluvioterrestrial fluviovolcanic flux fluxation fluxer fluxibility fluxible fluxibleness fluxibly fluxile fluxility fluxion fluxional fluxionally fluxionary fluxionist fluxmeter fluxroot fluxweed fly flyable flyaway flyback flyball flybane flybelt flyblow flyblown flyboat flyboy flycatcher flyeater flyer flyflap flyflapper flyflower flying flyingly flyleaf flyless flyman flyness flypaper flype flyproof flyspeck flytail flytier flytrap flyway flyweight flywheel flywinch flywort foal foalfoot foalhood foaly foam foambow foamer foamflower foamily foaminess foaming foamingly foamless foamlike foamy fob focal focalization focalize focally focaloid foci focimeter focimetry focoids focometer focometry focsle focus focusable focuser focusless fod fodda fodder fodderer foddering fodderless foder fodge fodgel fodient foe foehn foehnlike foeish foeless foelike foeman foemanship foenngreek foeship foetalization fog fogbound fogbow fogdog fogdom fogeater fogey fogfruit foggage fogged fogger foggily fogginess foggish foggy foghorn fogle fogless fogman fogo fogon fogou fogproof fogram fogramite fogramity fogscoffer fogus fogy fogydom fogyish fogyism fohat foible foil foilable foiler foiling foilsman foining foiningly foison foisonless foist foister foistiness foisty foiter fold foldable foldage foldboat foldcourse folded foldedly folden folder folding foldless foldskirt foldure foldwards foldy fole folgerite folia foliaceous foliaceousness foliage foliaged foliageous folial foliar foliary foliate foliated foliation foliature folie foliicolous foliiferous foliiform folio foliobranch foliobranchiate foliocellosis foliolate foliole folioliferous foliolose foliose foliosity foliot folious foliously folium folk folkcraft folkfree folkland folklore folkloric folklorish folklorism folklorist folkloristic folkmoot folkmooter folkmot folkmote folkmoter folkright folksiness folksy folkway folky folles folletage follicle follicular folliculate folliculated follicule folliculin folliculitis folliculose folliculosis folliculous folliful follis follow followable follower followership following followingly folly follyproof foment fomentation fomenter fomes fomites fondak fondant fondish fondle fondler fondlesome fondlike fondling fondlingly fondly fondness fondu fondue fonduk fonly fonnish fono fons font fontal fontally fontanel fontange fonted fontful fonticulus fontinal fontinalaceous fontlet foo food fooder foodful foodless foodlessness foodstuff foody foofaraw fool fooldom foolery fooless foolfish foolhardihood foolhardily foolhardiness foolhardiship foolhardy fooling foolish foolishly foolishness foollike foolocracy foolproof foolproofness foolscap foolship fooner fooster foosterer foot footage footback football footballer footballist footband footblower footboard footboy footbreadth footbridge footcloth footed footeite footer footfall footfarer footfault footfolk footful footganger footgear footgeld foothalt foothill foothold foothook foothot footing footingly footings footle footler footless footlicker footlight footlights footling footlining footlock footmaker footman footmanhood footmanry footmanship footmark footnote footnoted footpace footpad footpaddery footpath footpick footplate footprint footrail footrest footrill footroom footrope foots footscald footslog footslogger footsore footsoreness footstalk footstall footstep footstick footstock footstone footstool footwalk footwall footway footwear footwork footworn footy fooyoung foozle foozler fop fopling foppery foppish foppishly foppishness foppy fopship for fora forage foragement forager foralite foramen foraminated foramination foraminifer foraminiferal foraminiferan foraminiferous foraminose foraminous foraminulate foraminule foraminulose foraminulous forane foraneen foraneous forasmuch foray forayer forb forbade forbar forbathe forbear forbearable forbearance forbearant forbearantly forbearer forbearing forbearingly forbearingness forbesite forbid forbiddable forbiddal forbiddance forbidden forbiddenly forbiddenness forbidder forbidding forbiddingly forbiddingness forbit forbled forblow forbore forborne forbow forby force forceable forced forcedly forcedness forceful forcefully forcefulness forceless forcemeat forcement forceps forcepslike forcer forchase forche forcibility forcible forcibleness forcibly forcing forcingly forcipate forcipated forcipes forcipiform forcipressure forcipulate forcleave forconceit ford fordable fordableness fordays fording fordless fordo fordone fordwine fordy fore foreaccounting foreaccustom foreacquaint foreact foreadapt foreadmonish foreadvertise foreadvice foreadvise foreallege foreallot foreannounce foreannouncement foreanswer foreappoint foreappointment forearm foreassign foreassurance forebackwardly forebay forebear forebemoan forebemoaned forebespeak forebitt forebitten forebitter forebless foreboard forebode forebodement foreboder foreboding forebodingly forebodingness forebody foreboot forebowels forebowline forebrace forebrain forebreast forebridge foreburton forebush forecar forecarriage forecast forecaster forecasting forecastingly forecastle forecastlehead forecastleman forecatching forecatharping forechamber forechase forechoice forechoose forechurch forecited foreclaw foreclosable foreclose foreclosure forecome forecomingness forecommend foreconceive foreconclude forecondemn foreconscious foreconsent foreconsider forecontrive forecool forecooler forecounsel forecount forecourse forecourt forecover forecovert foredate foredawn foreday foredeck foredeclare foredecree foredeep foredefeated foredefine foredenounce foredescribe foredeserved foredesign foredesignment foredesk foredestine foredestiny foredetermination foredetermine foredevised foredevote forediscern foredispose foredivine foredone foredoom foredoomer foredoor foreface forefather forefatherly forefault forefeel forefeeling forefeelingly forefelt forefield forefigure forefin forefinger forefit foreflank foreflap foreflipper forefoot forefront foregallery foregame foreganger foregate foregift foregirth foreglance foregleam foreglimpse foreglow forego foregoer foregoing foregone foregoneness foreground foreguess foreguidance forehalf forehall forehammer forehand forehanded forehandedness forehandsel forehard forehatch forehatchway forehead foreheaded forehear forehearth foreheater forehill forehinting forehold forehood forehoof forehook foreign foreigneering foreigner foreignership foreignism foreignization foreignize foreignly foreignness foreimagination foreimagine foreimpressed foreimpression foreinclined foreinstruct foreintend foreiron forejudge forejudgment forekeel foreking foreknee foreknow foreknowable foreknower foreknowing foreknowingly foreknowledge forel forelady foreland forelay foreleech foreleg forelimb forelive forellenstein forelock forelook foreloop forelooper foreloper foremade foreman foremanship foremarch foremark foremartyr foremast foremasthand foremastman foremean foremeant foremelt foremention forementioned foremessenger foremilk foremisgiving foremistress foremost foremostly foremother forename forenamed forenews forenight forenoon forenote forenoted forenotice forenotion forensal forensic forensical forensicality forensically foreordain foreordainment foreorder foreordinate foreordination foreorlop forepad forepale foreparents forepart forepassed forepast forepaw forepayment forepeak foreperiod forepiece foreplace foreplan foreplanting forepole foreporch forepossessed forepost forepredicament forepreparation foreprepare forepretended foreproduct foreproffer forepromise forepromised foreprovided foreprovision forepurpose forequarter forequoted foreran forerank forereach forereaching foreread forereading forerecited forereckon forerehearsed foreremembered forereport forerequest forerevelation forerib forerigging foreright foreroom foreroyal forerun forerunner forerunnership forerunnings foresaddle foresaid foresail foresay forescene forescent foreschool foreschooling forescript foreseason foreseat foresee foreseeability foreseeable foreseeingly foreseer foreseize foresend foresense foresentence foreset foresettle foresettled foreshadow foreshadower foreshaft foreshank foreshape foresheet foreshift foreship foreshock foreshoe foreshop foreshore foreshorten foreshortening foreshot foreshoulder foreshow foreshower foreshroud foreside foresight foresighted foresightedness foresightful foresightless foresign foresignify foresin foresing foresinger foreskin foreskirt foresleeve foresound forespeak forespecified forespeed forespencer forest forestaff forestage forestair forestal forestall forestaller forestallment forestarling forestate forestation forestay forestaysail forestcraft forested foresteep forestem forestep forester forestership forestful forestial forestick forestine forestish forestless forestlike forestology forestral forestress forestry forestside forestudy forestwards foresty foresummer foresummon foresweat foretack foretackle foretalk foretalking foretaste foretaster foretell foretellable foreteller forethink forethinker forethought forethoughted forethoughtful forethoughtfully forethoughtfulness forethoughtless forethrift foretime foretimed foretoken foretold foretop foretopman foretrace foretrysail foreturn foretype foretypified foreuse foreutter forevalue forever forevermore foreview forevision forevouch forevouched forevow forewarm forewarmer forewarn forewarner forewarning forewarningly forewaters foreween foreweep foreweigh forewing forewinning forewisdom forewish forewoman forewonted foreword foreworld foreworn forewritten forewrought foreyard foreyear forfairn forfar forfare forfars forfault forfaulture forfeit forfeiter forfeits forfeiture forfend forficate forficated forfication forficiform forficulate forfouchten forfoughen forfoughten forgainst forgather forge forgeability forgeable forged forgedly forgeful forgeman forger forgery forget forgetful forgetfully forgetfulness forgetive forgetness forgettable forgetter forgetting forgettingly forgie forging forgivable forgivableness forgivably forgive forgiveless forgiveness forgiver forgiving forgivingly forgivingness forgo forgoer forgot forgotten forgottenness forgrow forgrown forhoo forhooy forhow forinsec forint forisfamiliate forisfamiliation forjesket forjudge forjudger fork forkable forkbeard forked forkedly forkedness forker forkful forkhead forkiness forkless forklike forkman forksmith forktail forkwise forky forleft forlet forlorn forlornity forlornly forlornness form formability formable formably formagen formagenic formal formalazine formaldehyde formaldehydesulphoxylate formaldehydesulphoxylic formaldoxime formalesque formalism formalist formalistic formalith formality formalization formalize formalizer formally formalness formamide formamidine formamido formamidoxime formanilide formant format formate formation formational formative formatively formativeness formature formazyl forme formed formedon formee formel formene formenic former formeret formerly formerness formful formiate formic formican formicarian formicarioid formicarium formicaroid formicary formicate formication formicative formicicide formicid formicide formicine formicivorous formidability formidable formidableness formidably formin forminate forming formless formlessly formlessness formolite formonitrile formose formoxime formula formulable formulae formulaic formular formularism formularist formularistic formularization formularize formulary formulate formulation formulator formulatory formule formulism formulist formulistic formulization formulize formulizer formwork formy formyl formylal formylate formylation fornacic fornaxid fornenst fornent fornical fornicate fornicated fornication fornicator fornicatress fornicatrix forniciform forninst fornix forpet forpine forpit forprise forrad forrard forride forrit forritsome forrue forsake forsaken forsakenly forsakenness forsaker forset forslow forsooth forspeak forspend forspread forsterite forswear forswearer forsworn forswornness fort fortalice forte fortescue fortescure forth forthbring forthbringer forthcome forthcomer forthcoming forthcomingness forthcut forthfare forthfigured forthgaze forthgo forthgoing forthink forthputting forthright forthrightly forthrightness forthrights forthtell forthteller forthwith forthy forties fortieth fortifiable fortification fortifier fortify fortifying fortifyingly fortin fortis fortissimo fortitude fortitudinous fortlet fortnight fortnightly fortravail fortread fortress fortuitism fortuitist fortuitous fortuitously fortuitousness fortuity fortunate fortunately fortunateness fortune fortuned fortuneless fortunetell fortuneteller fortunetelling fortunite forty fortyfold forum forumize forwander forward forwardal forwardation forwarder forwarding forwardly forwardness forwards forwean forweend forwent forwoden forworden fosh fosie fossa fossage fossane fossarian fosse fossed fossette fossick fossicker fossiform fossil fossilage fossilated fossilation fossildom fossiled fossiliferous fossilification fossilify fossilism fossilist fossilizable fossilization fossilize fossillike fossilogist fossilogy fossilological fossilologist fossilology fossor fossorial fossorious fossula fossulate fossule fossulet fostell foster fosterable fosterage fosterer fosterhood fostering fosteringly fosterite fosterland fosterling fostership fostress fot fotch fother fotmal fotui fou foud foudroyant fouette fougade fougasse fought foughten foughty foujdar foujdary foul foulage foulard fouler fouling foulish foully foulmouthed foulmouthedly foulmouthedness foulness foulsome foumart foun found foundation foundational foundationally foundationary foundationed foundationer foundationless foundationlessness founder founderous foundership foundery founding foundling foundress foundry foundryman fount fountain fountained fountaineer fountainhead fountainless fountainlet fountainous fountainously fountainwise fountful fouquieriaceous four fourble fourche fourchee fourcher fourchette fourchite fourer fourflusher fourfold fourling fourpence fourpenny fourpounder fourre fourrier fourscore foursome foursquare foursquarely foursquareness fourstrand fourteen fourteener fourteenfold fourteenth fourteenthly fourth fourther fourthly foussa foute fouter fouth fovea foveal foveate foveated foveation foveiform foveola foveolarious foveolate foveolated foveole foveolet fow fowk fowl fowler fowlerite fowlery fowlfoot fowling fox foxbane foxberry foxchop foxer foxery foxfeet foxfinger foxfish foxglove foxhole foxhound foxily foxiness foxing foxish foxlike foxproof foxship foxskin foxtail foxtailed foxtongue foxwood foxy foy foyaite foyaitic foyboat foyer foziness fozy fra frab frabbit frabjous frabjously frabous fracas fracedinous frache frack fractable fractabling fracted fractile fraction fractional fractionalism fractionalize fractionally fractionary fractionate fractionating fractionation fractionator fractionization fractionize fractionlet fractious fractiously fractiousness fractocumulus fractonimbus fractostratus fractuosity fracturable fractural fracture fractureproof frae fraghan fragile fragilely fragileness fragility fragment fragmental fragmentally fragmentarily fragmentariness fragmentary fragmentation fragmented fragmentist fragmentitious fragmentize fragrance fragrancy fragrant fragrantly fragrantness fraid fraik frail frailejon frailish frailly frailness frailty fraise fraiser framable framableness frambesia frame framea frameable frameableness framed frameless framer framesmith framework framing frammit frampler frampold franc franchisal franchise franchisement franchiser francisc francisca francium franco francolin francolite frangent frangibility frangible frangibleness frangipane frangipani frangula frangulic frangulin frangulinic frank frankability frankable frankalmoign frankeniaceous franker frankfurter frankhearted frankheartedly frankheartedness frankincense frankincensed franking franklandite franklin franklinite frankly frankmarriage frankness frankpledge frantic frantically franticly franticness franzy frap frappe frapping frasco frase frasier frass frat fratch fratched fratcheous fratcher fratchety fratchy frater fraternal fraternalism fraternalist fraternality fraternally fraternate fraternation fraternism fraternity fraternization fraternize fraternizer fratery fratority fratricidal fratricide fratry fraud fraudful fraudfully fraudless fraudlessly fraudlessness fraudproof fraudulence fraudulency fraudulent fraudulently fraudulentness fraughan fraught frawn fraxetin fraxin fraxinella fray frayed frayedly frayedness fraying frayn frayproof fraze frazer frazil frazzle frazzling freak freakdom freakery freakful freakily freakiness freakish freakishly freakishness freaky fream freath freck frecken freckened frecket freckle freckled freckledness freckleproof freckling frecklish freckly frederik fredricite free freeboard freeboot freebooter freebootery freebooting freeborn freed freedman freedom freedwoman freehand freehanded freehandedly freehandedness freehearted freeheartedly freeheartedness freehold freeholder freeholdership freeholding freeing freeish freelage freeloving freelovism freely freeman freemanship freemartin freemason freemasonic freemasonical freemasonism freemasonry freeness freer freesilverism freesilverite freestanding freestone freet freethinker freethinking freetrader freety freeward freeway freewheel freewheeler freewheeling freewill freewoman freezable freeze freezer freezing freezingly freibergite freieslebenite freight freightage freighter freightless freightment freir freit freity fremd fremdly fremdness fremescence fremescent fremitus frenal frenate frenched frenchification frenchify frenching frenetic frenetical frenetically frenular frenulum frenum frenzelite frenzied frenziedly frenzy frequence frequency frequent frequentable frequentage frequentation frequentative frequenter frequently frequentness frescade fresco frescoer frescoist fresh freshen freshener freshet freshhearted freshish freshly freshman freshmanhood freshmanic freshmanship freshness freshwoman fresnel fresno fret fretful fretfully fretfulness fretless fretsome frett frettage frettation frette fretted fretter fretting frettingly fretty fretum fretways fretwise fretwork fretworked freyalite friability friable friableness friand friandise friar friarbird friarhood friarling friarly friary frib fribble fribbleism fribbler fribblery fribbling fribblish fribby fricandeau fricandel fricassee frication fricative fricatrice friction frictionable frictional frictionally frictionize frictionless frictionlessly frictionproof fridstool fried friedcake friedelite friedrichsdor friend friended friendless friendlessness friendlike friendlily friendliness friendliwise friendly friendship frier frieseite frieze friezer friezy frig frigate frigatoon friggle fright frightable frighten frightenable frightened frightenedly frightenedness frightener frightening frighteningly frighter frightful frightfully frightfulness frightless frightment frighty frigid frigidarium frigidity frigidly frigidness frigiferous frigolabile frigoric frigorific frigorifical frigorify frigorimeter frigostable frigotherapy frijol frijolillo frijolito frike frill frillback frilled friller frillery frillily frilliness frilling frilly frim fringe fringed fringeflower fringeless fringelet fringent fringepod fringillaceous fringilliform fringilline fringilloid fringing fringy fripperer frippery frisca frisette frisk frisker frisket friskful friskily friskiness frisking friskingly frisky frisolee frison frist frisure frit frith frithborh frithbot frithles frithsoken frithstool frithwork fritillary fritt fritter fritterer frivol frivoler frivolism frivolist frivolity frivolize frivolous frivolously frivolousness frixion friz frize frizer frizz frizzer frizzily frizziness frizzing frizzle frizzler frizzly frizzy fro frock frocking frockless frocklike frockmaker froe frog frogbit frogeater frogeye frogface frogfish frogflower frogfoot frogged froggery frogginess frogging froggish froggy froghood froghopper frogland frogleaf frogleg froglet froglike frogling frogman frogmouth frognose frogskin frogstool frogtongue frogwort froise frolic frolicful frolicker frolicky frolicly frolicness frolicsome frolicsomely frolicsomeness from fromward fromwards frond frondage fronded frondent frondesce frondescence frondescent frondiferous frondiform frondigerous frondivorous frondlet frondose frondosely frondous front frontad frontage frontager frontal frontalis frontality frontally frontbencher fronted fronter frontier frontierlike frontierman frontiersman fronting frontingly frontispiece frontless frontlessly frontlessness frontlet frontoauricular frontoethmoid frontogenesis frontolysis frontomallar frontomaxillary frontomental frontonasal frontooccipital frontoorbital frontoparietal frontopontine frontosphenoidal frontosquamosal frontotemporal frontozygomatic frontpiece frontsman frontstall frontward frontways frontwise froom frore frory frosh frost frostation frostbird frostbite frostbow frosted froster frostfish frostflower frostily frostiness frosting frostless frostlike frostproof frostproofing frostroot frostweed frostwork frostwort frosty frot froth frother frothily frothiness frothing frothless frothsome frothy frotton froufrou frough froughy frounce frounceless frow froward frowardly frowardness frower frowl frown frowner frownful frowning frowningly frownless frowny frowst frowstily frowstiness frowsty frowy frowze frowzily frowziness frowzled frowzly frowzy froze frozen frozenhearted frozenly frozenness fruchtschiefer fructed fructescence fructescent fructicultural fructiculture fructiferous fructiferously fructification fructificative fructifier fructiform fructify fructiparous fructivorous fructose fructoside fructuary fructuosity fructuous fructuously fructuousness frugal frugalism frugalist frugality frugally frugalness fruggan frugivorous fruit fruitade fruitage fruitarian fruitarianism fruitcake fruited fruiter fruiterer fruiteress fruitery fruitful fruitfullness fruitfully fruitgrower fruitgrowing fruitiness fruiting fruition fruitist fruitive fruitless fruitlessly fruitlessness fruitlet fruitling fruitstalk fruittime fruitwise fruitwoman fruitwood fruitworm fruity frumentaceous frumentarious frumentation frumenty frump frumpery frumpily frumpiness frumpish frumpishly frumpishness frumple frumpy frush frustrate frustrately frustrater frustration frustrative frustratory frustule frustulent frustulose frustum frutescence frutescent fruticetum fruticose fruticous fruticulose frutify fry fryer fu fub fubby fubsy fucaceous fucate fucation fucatious fuchsin fuchsine fuchsinophil fuchsinophilous fuchsite fuchsone fuci fucinita fuciphagous fucoid fucoidal fucosan fucose fucous fucoxanthin fucus fud fuddle fuddler fuder fudge fudger fudgy fuel fueler fuelizer fuerte fuff fuffy fugacious fugaciously fugaciousness fugacity fugal fugally fuggy fugient fugitate fugitation fugitive fugitively fugitiveness fugitivism fugitivity fugle fugleman fuglemanship fugler fugu fugue fuguist fuidhir fuirdays fuji fulciform fulcral fulcrate fulcrum fulcrumage fulfill fulfiller fulfillment fulgent fulgently fulgentness fulgid fulgide fulgidity fulgor fulgorid fulgorous fulgural fulgurant fulgurantly fulgurata fulgurate fulgurating fulguration fulgurator fulgurite fulgurous fulham fulicine fuliginosity fuliginous fuliginously fuliginousness fuliguline fulk full fullam fullback fuller fullering fullery fullface fullhearted fulling fullish fullmouth fullmouthed fullmouthedly fullness fullom fully fulmar fulmicotton fulminancy fulminant fulminate fulminating fulmination fulminator fulminatory fulmine fulmineous fulminic fulminous fulminurate fulminuric fulsome fulsomely fulsomeness fulth fulvene fulvescent fulvid fulvidness fulvous fulwa fulyie fulzie fum fumacious fumado fumage fumagine fumarate fumariaceous fumaric fumarine fumarium fumaroid fumaroidal fumarole fumarolic fumaryl fumatorium fumatory fumble fumbler fumbling fume fumeless fumer fumeroot fumet fumette fumewort fumiduct fumiferous fumigant fumigate fumigation fumigator fumigatorium fumigatory fumily fuminess fuming fumingly fumistery fumitory fumose fumosity fumous fumously fumy fun funambulate funambulation funambulator funambulatory funambulic funambulism funambulist funambulo funariaceous function functional functionalism functionalist functionality functionalize functionally functionarism functionary functionate functionation functionize functionless fund fundable fundal fundament fundamental fundamentalism fundamentalist fundamentality fundamentally fundamentalness fundatorial fundatrix funded funder fundholder fundi fundic fundiform funditor fundless fundmonger fundmongering funds funduline fundungi fundus funebrial funeral funeralize funerary funereal funereally funest fungaceous fungal fungate fungation fungi fungian fungibility fungible fungic fungicidal fungicide fungicolous fungiferous fungiform fungilliform fungin fungistatic fungivorous fungo fungoid fungoidal fungological fungologist fungology fungose fungosity fungous fungus fungused funguslike fungusy funicle funicular funiculate funicule funiculitis funiculus funiform funipendulous funis funk funker funkiness funky funmaker funmaking funnel funneled funnelform funnellike funnelwise funnily funniment funniness funny funnyman funori funt fur furacious furaciousness furacity fural furaldehyde furan furanoid furazan furazane furbelow furbish furbishable furbisher furbishment furca furcal furcate furcately furcation furcellate furciferine furciferous furciform furcula furcular furculum furdel furfur furfuraceous furfuraceously furfural furfuralcohol furfuraldehyde furfuramide furfuran furfuration furfurine furfuroid furfurole furfurous furfuryl furfurylidene furiant furibund furied furify furil furilic furiosa furiosity furioso furious furiously furiousness furison furl furlable furler furless furlong furlough furnace furnacelike furnaceman furnacer furnacite furnage furner furnish furnishable furnished furnisher furnishing furnishment furniture furnitureless furodiazole furoic furoid furoin furole furomethyl furomonazole furor furore furphy furred furrier furriered furriery furrily furriness furring furrow furrower furrowless furrowlike furrowy furry furstone further furtherance furtherer furtherest furtherly furthermore furthermost furthersome furthest furtive furtively furtiveness furuncle furuncular furunculoid furunculosis furunculous fury furyl furze furzechat furzed furzeling furzery furzetop furzy fusain fusarial fusariose fusariosis fusarole fusate fusc fuscescent fuscin fuscohyaline fuscous fuse fuseboard fused fusee fuselage fuseplug fusht fusibility fusible fusibleness fusibly fusiform fusil fusilier fusillade fusilly fusinist fusion fusional fusionism fusionist fusionless fusoid fuss fusser fussification fussify fussily fussiness fussock fussy fust fustanella fustee fusteric fustet fustian fustianish fustianist fustianize fustic fustigate fustigation fustigator fustigatory fustilugs fustily fustin fustiness fustle fusty fusuma fusure fut futchel fute futhorc futile futilely futileness futilitarian futilitarianism futility futilize futtermassel futtock futural future futureless futureness futuric futurism futurist futuristic futurition futurity futurize futwa fuye fuze fuzz fuzzball fuzzily fuzziness fuzzy fyke fylfot fyrd g ga gab gabardine gabbard gabber gabble gabblement gabbler gabbro gabbroic gabbroid gabbroitic gabby gabelle gabelled gabelleman gabeller gaberdine gaberlunzie gabgab gabi gabion gabionade gabionage gabioned gablatores gable gableboard gablelike gablet gablewise gablock gaby gad gadabout gadbee gadbush gadded gadder gaddi gadding gaddingly gaddish gaddishness gade gadfly gadge gadger gadget gadid gadinine gadling gadman gadoid gadolinia gadolinic gadolinite gadolinium gadroon gadroonage gadsman gaduin gadwall gaen gaet gaff gaffe gaffer gaffle gaffsman gag gagate gage gageable gagee gageite gagelike gager gagership gagger gaggery gaggle gaggler gagman gagor gagroot gagtooth gahnite gaiassa gaiety gaily gain gainable gainage gainbirth gaincall gaincome gaine gainer gainful gainfully gainfulness gaining gainless gainlessness gainliness gainly gains gainsay gainsayer gainset gainsome gainspeaker gainspeaking gainst gainstrive gainturn gaintwist gainyield gair gairfish gaisling gait gaited gaiter gaiterless gaiting gaize gaj gal gala galactagogue galactagoguic galactan galactase galactemia galacthidrosis galactic galactidrosis galactite galactocele galactodendron galactodensimeter galactogenetic galactohemia galactoid galactolipide galactolipin galactolysis galactolytic galactoma galactometer galactometry galactonic galactopathy galactophagist galactophagous galactophlebitis galactophlysis galactophore galactophoritis galactophorous galactophthysis galactophygous galactopoiesis galactopoietic galactopyra galactorrhea galactorrhoea galactoscope galactose galactoside galactosis galactostasis galactosuria galactotherapy galactotrophy galacturia galagala galah galanas galanga galangin galant galantine galany galapago galatea galatotrophic galaxian galaxy galban galbanum galbulus gale galea galeage galeate galeated galee galeeny galegine galeid galeiform galempung galena galenic galenical galenite galenobismutite galenoid galeoid galeproof galera galericulate galerum galerus galet galewort galey galgal gali galilee galimatias galingale galiongee galiot galipidine galipine galipoidin galipoidine galipoipin galipot gall galla gallacetophenone gallah gallanilide gallant gallantize gallantly gallantness gallantry gallate gallature gallberry gallbush galleass galled gallein galleon galler gallerian galleried gallery gallerylike gallet galley galleylike galleyman galleyworm gallflower gallfly galliambic galliambus galliard galliardise galliardly galliardness gallic gallicola gallicole gallicolous galliferous gallification galliform galligaskin gallimaufry gallinacean gallinaceous gallinazo galline galling gallingly gallingness gallinipper gallinule gallinuline gallipot gallisin gallium gallivant gallivanter gallivat gallivorous galliwasp gallnut gallocyanin gallocyanine galloflavine galloglass gallon gallonage galloner galloon gallooned gallop gallopade galloper galloping galloptious gallotannate gallotannic gallotannin gallous galloway gallowglass gallows gallowsmaker gallowsness gallowsward gallstone galluses gallweed gallwort gally gallybagger gallybeggar gallycrow galoot galop galore galosh galp galravage galravitch galt galuchat galumph galumptious galuth galvanic galvanical galvanically galvanism galvanist galvanization galvanize galvanized galvanizer galvanocauterization galvanocautery galvanocontractility galvanofaradization galvanoglyph galvanoglyphy galvanograph galvanographic galvanography galvanologist galvanology galvanolysis galvanomagnet galvanomagnetic galvanomagnetism galvanometer galvanometric galvanometrical galvanometrically galvanometry galvanoplastic galvanoplastical galvanoplastically galvanoplastics galvanoplasty galvanopsychic galvanopuncture galvanoscope galvanoscopic galvanoscopy galvanosurgery galvanotactic galvanotaxis galvanotherapy galvanothermometer galvanothermy galvanotonic galvanotropic galvanotropism galvayne galvayning galyac galyak galziekte gam gamahe gamashes gamasid gamb gamba gambade gambado gambang gambeer gambeson gambet gambette gambia gambier gambist gambit gamble gambler gamblesome gamblesomeness gambling gambodic gamboge gambogian gambogic gamboised gambol gambrel gambreled gambroon gamdeboo game gamebag gameball gamecock gamecraft gameful gamekeeper gamekeeping gamelang gameless gamelike gamelotte gamely gamene gameness gamesome gamesomely gamesomeness gamester gamestress gametal gametange gametangium gamete gametic gametically gametocyst gametocyte gametogenesis gametogenic gametogenous gametogeny gametogonium gametogony gametoid gametophagia gametophore gametophyll gametophyte gametophytic gamic gamily gamin gaminesque gaminess gaming gaminish gamma gammacism gammacismus gammadion gammarid gammarine gammaroid gammation gammelost gammer gammerel gammerstang gammick gammock gammon gammoner gammoning gammy gamobium gamodesmic gamodesmy gamogenesis gamogenetic gamogenetical gamogenetically gamogony gamomania gamont gamopetalous gamophagia gamophagy gamophyllous gamori gamosepalous gamostele gamostelic gamostely gamotropic gamotropism gamp gamphrel gamut gamy gan ganam ganancial ganch gander ganderess gandergoose gandermooner ganderteeth gandul gandum gandurah gane ganef gang ganga gangan gangava gangboard gangdom gange ganger ganggang ganging gangism gangland ganglander ganglia gangliac ganglial gangliar gangliasthenia gangliate gangliated gangliectomy gangliform gangliitis gangling ganglioblast gangliocyte ganglioform ganglioid ganglioma ganglion ganglionary ganglionate ganglionectomy ganglioneural ganglioneure ganglioneuroma ganglioneuron ganglionic ganglionitis ganglionless ganglioplexus gangly gangman gangmaster gangplank gangrel gangrene gangrenescent gangrenous gangsman gangster gangsterism gangtide gangue gangway gangwayman ganister ganja ganner gannet ganocephalan ganocephalous ganodont ganoid ganoidal ganoidean ganoidian ganoin ganomalite ganophyllite ganosis gansel gansey gansy gant ganta gantang gantlet gantline ganton gantries gantry gantryman gantsl ganza ganzie gaol gaolbird gaoler gap gapa gape gaper gapes gapeseed gapeworm gaping gapingly gapingstock gapo gappy gapy gar gara garabato garad garage garageman garance garancine garapata garava garavance garawi garb garbage garbardine garbel garbell garbill garble garbleable garbler garbless garbling garboard garboil garbure garce gardant gardeen garden gardenable gardencraft gardened gardener gardenership gardenesque gardenful gardenhood gardenin gardening gardenize gardenless gardenlike gardenly gardenmaker gardenmaking gardenwards gardenwise gardeny garderobe gardevin gardy gardyloo gare garefowl gareh garetta garewaite garfish garganey garget gargety gargle gargol gargoyle gargoyled gargoyley gargoylish gargoylishly gargoylism garial gariba garibaldi garish garishly garishness garland garlandage garlandless garlandlike garlandry garlandwise garle garlic garlicky garliclike garlicmonger garlicwort garment garmentless garmentmaker garmenture garmentworker garn garnel garner garnerage garnet garnetberry garneter garnetiferous garnets garnett garnetter garnetwork garnetz garnice garniec garnierite garnish garnishable garnished garnishee garnisheement garnisher garnishment garnishry garniture garoo garookuh garrafa garran garret garreted garreteer garretmaster garrison garrot garrote garroter garruline garrulity garrulous garrulously garrulousness garrupa garse garsil garston garten garter gartered gartering garterless garth garthman garum garvanzo garvey garvock gas gasbag gascoigny gasconade gasconader gascromh gaseity gaselier gaseosity gaseous gaseousness gasfiring gash gashes gashful gashliness gashly gasholder gashouse gashy gasifiable gasification gasifier gasiform gasify gasket gaskin gasking gaskins gasless gaslight gaslighted gaslighting gaslit gaslock gasmaker gasman gasogenic gasoliery gasoline gasolineless gasoliner gasometer gasometric gasometrical gasometry gasp gasparillo gasper gaspereau gaspergou gaspiness gasping gaspingly gasproof gaspy gasser gassiness gassing gassy gast gastaldite gastaldo gaster gasteralgia gasteromycete gasteromycetous gasteropod gasterosteid gasterosteiform gasterosteoid gasterotheca gasterothecal gasterotrichan gasterozooid gastight gastightness gastradenitis gastraea gastraead gastraeal gastraeum gastral gastralgia gastralgic gastralgy gastraneuria gastrasthenia gastratrophia gastrectasia gastrectasis gastrectomy gastrelcosis gastric gastricism gastrilegous gastriloquial gastriloquism gastriloquist gastriloquous gastriloquy gastrin gastritic gastritis gastroadenitis gastroadynamic gastroalbuminorrhea gastroanastomosis gastroarthritis gastroatonia gastroatrophia gastroblennorrhea gastrocatarrhal gastrocele gastrocentrous gastrocnemial gastrocnemian gastrocnemius gastrocoel gastrocolic gastrocoloptosis gastrocolostomy gastrocolotomy gastrocolpotomy gastrocystic gastrocystis gastrodialysis gastrodiaphanoscopy gastrodidymus gastrodisk gastroduodenal gastroduodenitis gastroduodenoscopy gastroduodenotomy gastrodynia gastroelytrotomy gastroenteralgia gastroenteric gastroenteritic gastroenteritis gastroenteroanastomosis gastroenterocolitis gastroenterocolostomy gastroenterological gastroenterologist gastroenterology gastroenteroptosis gastroenterostomy gastroenterotomy gastroepiploic gastroesophageal gastroesophagostomy gastrogastrotomy gastrogenital gastrograph gastrohelcosis gastrohepatic gastrohepatitis gastrohydrorrhea gastrohyperneuria gastrohypertonic gastrohysterectomy gastrohysteropexy gastrohysterorrhaphy gastrohysterotomy gastroid gastrointestinal gastrojejunal gastrojejunostomy gastrolater gastrolatrous gastrolienal gastrolith gastrologer gastrological gastrologist gastrology gastrolysis gastrolytic gastromalacia gastromancy gastromelus gastromenia gastromyces gastromycosis gastromyxorrhea gastronephritis gastronome gastronomer gastronomic gastronomical gastronomically gastronomist gastronomy gastronosus gastropancreatic gastropancreatitis gastroparalysis gastroparesis gastroparietal gastropathic gastropathy gastroperiodynia gastropexy gastrophile gastrophilism gastrophilist gastrophilite gastrophrenic gastrophthisis gastroplasty gastroplenic gastropleuritis gastroplication gastropneumatic gastropneumonic gastropod gastropodan gastropodous gastropore gastroptosia gastroptosis gastropulmonary gastropulmonic gastropyloric gastrorrhagia gastrorrhaphy gastrorrhea gastroschisis gastroscope gastroscopic gastroscopy gastrosoph gastrosopher gastrosophy gastrospasm gastrosplenic gastrostaxis gastrostegal gastrostege gastrostenosis gastrostomize gastrostomy gastrosuccorrhea gastrotheca gastrothecal gastrotome gastrotomic gastrotomy gastrotrichan gastrotubotomy gastrotympanites gastrovascular gastroxynsis gastrozooid gastrula gastrular gastrulate gastrulation gasworker gasworks gat gata gatch gatchwork gate gateado gateage gated gatehouse gatekeeper gateless gatelike gatemaker gateman gatepost gater gatetender gateward gatewards gateway gatewayman gatewise gatewoman gateworks gatewright gather gatherable gatherer gathering gating gator gatter gatteridge gau gaub gauby gauche gauchely gaucheness gaucherie gaud gaudery gaudful gaudily gaudiness gaudless gaudsman gaudy gaufer gauffer gauffered gauffre gaufre gaufrette gauge gaugeable gauger gaugership gauging gaulding gauleiter gaulin gault gaulter gaultherase gaultherin gaum gaumish gaumless gaumlike gaumy gaun gaunt gaunted gauntlet gauntleted gauntly gauntness gauntry gaunty gaup gaupus gaur gaus gauss gaussage gaussbergite gauster gausterer gaut gauteite gauze gauzelike gauzewing gauzily gauziness gauzy gavall gave gavel gaveler gavelkind gavelkinder gavelman gavelock gavial gavialoid gavotte gavyuti gaw gawby gawcie gawk gawkhammer gawkihood gawkily gawkiness gawkish gawkishly gawkishness gawky gawm gawn gawney gawsie gay gayal gayatri gaybine gaycat gaydiang gayish gaylussite gayment gayness gaysome gaywings gayyou gaz gazabo gazangabin gaze gazebo gazee gazehound gazel gazeless gazelle gazelline gazement gazer gazettal gazette gazetteer gazetteerage gazetteerish gazetteership gazi gazing gazingly gazingstock gazogene gazon gazophylacium gazy gazzetta ge geadephagous geal gean geanticlinal geanticline gear gearbox geared gearing gearksutite gearless gearman gearset gearshift gearwheel gease geason geat gebang gebanga gebbie gebur geck gecko geckoid geckotian geckotid geckotoid ged gedackt gedanite gedder gedeckt gedecktwork gedrite gee geebong geebung geejee geek geelbec geeldikkop geelhout geepound geerah geest geet geezer gegg geggee gegger geggery gehlenite geikielite gein geira geisha geison geisotherm geisothermal geissospermin geissospermine geitjie geitonogamous geitonogamy gekkonid gekkonoid gel gelable gelada gelandejump gelandelaufer gelandesprung gelastic gelatification gelatigenous gelatin gelatinate gelatination gelatined gelatiniferous gelatiniform gelatinify gelatinigerous gelatinity gelatinizability gelatinizable gelatinization gelatinize gelatinizer gelatinobromide gelatinochloride gelatinoid gelatinotype gelatinous gelatinously gelatinousness gelation gelatose geld geldability geldable geldant gelder gelding gelechiid gelid gelidity gelidly gelidness gelignite gelilah gelinotte gell gelly gelogenic gelong geloscopy gelose gelosin gelotherapy gelotometer gelotoscopy gelototherapy gelsemic gelsemine gelseminic gelseminine gelt gem gematria gematrical gemauve gemel gemeled gemellione gemellus geminate geminated geminately gemination geminative geminiflorous geminiform geminous gemitorial gemless gemlike gemma gemmaceous gemmae gemmate gemmation gemmative gemmeous gemmer gemmiferous gemmiferousness gemmification gemmiform gemmily gemminess gemmipara gemmipares gemmiparity gemmiparous gemmiparously gemmoid gemmology gemmula gemmulation gemmule gemmuliferous gemmy gemot gemsbok gemsbuck gemshorn gemul gemuti gemwork gen gena genal genapp genapper genarch genarcha genarchaship genarchship gendarme gendarmery gender genderer genderless gene genealogic genealogical genealogically genealogist genealogize genealogizer genealogy genear geneat genecologic genecological genecologically genecologist genecology geneki genep genera generability generable generableness general generalate generalcy generale generalia generalific generalism generalissima generalissimo generalist generalistic generality generalizable generalization generalize generalized generalizer generall generally generalness generalship generalty generant generate generating generation generational generationism generative generatively generativeness generator generatrix generic generical generically genericalness generification generosity generous generously generousness geneserine genesial genesic genesiology genesis genesiurgic genet genethliac genethliacal genethliacally genethliacon genethliacs genethlialogic genethlialogical genethlialogy genethlic genetic genetical genetically geneticism geneticist genetics genetmoil genetous genetrix geneva genevoise genial geniality genialize genially genialness genian genic genicular geniculate geniculated geniculately geniculation geniculum genie genii genin genioglossal genioglossi genioglossus geniohyoglossal geniohyoglossus geniohyoid geniolatry genion genioplasty genip genipa genipap genipapada genisaro genista genistein genital genitalia genitals genitival genitivally genitive genitocrural genitofemoral genitor genitorial genitory genitourinary geniture genius genizah genizero genoblast genoblastic genocidal genocide genoese genom genome genomic genonema genos genotype genotypic genotypical genotypically genovino genre genro gens genson gent genteel genteelish genteelism genteelize genteelly genteelness gentes genthite gentian gentianaceous gentianella gentianic gentianin gentianose gentianwort gentile gentiledom gentilesse gentilic gentilism gentilitial gentilitian gentilitious gentility gentilization gentilize gentiobiose gentiopicrin gentisein gentisic gentisin gentle gentlefolk gentlehearted gentleheartedly gentleheartedness gentlehood gentleman gentlemanhood gentlemanism gentlemanize gentlemanlike gentlemanlikeness gentlemanliness gentlemanly gentlemanship gentlemens gentlemouthed gentleness gentlepeople gentleship gentlewoman gentlewomanhood gentlewomanish gentlewomanlike gentlewomanliness gentlewomanly gently gentman gentrice gentry genty genu genua genual genuclast genuflect genuflection genuflector genuflectory genuflex genuflexuous genuine genuinely genuineness genus genyantrum genyoplasty genys geo geoaesthesia geoagronomic geobiologic geobiology geobiont geobios geoblast geobotanic geobotanical geobotanist geobotany geocarpic geocentric geocentrical geocentrically geocentricism geocerite geochemical geochemist geochemistry geochronic geochronology geochrony geocoronium geocratic geocronite geocyclic geodaesia geodal geode geodesic geodesical geodesist geodesy geodete geodetic geodetical geodetically geodetician geodetics geodiatropism geodic geodiferous geodist geoduck geodynamic geodynamical geodynamics geoethnic geoffroyin geoffroyine geoform geogenesis geogenetic geogenic geogenous geogeny geoglyphic geognosis geognosist geognost geognostic geognostical geognostically geognosy geogonic geogonical geogony geographer geographic geographical geographically geographics geographism geographize geography geohydrologist geohydrology geoid geoidal geoisotherm geolatry geologer geologian geologic geological geologically geologician geologist geologize geology geomagnetic geomagnetician geomagnetics geomagnetist geomalic geomalism geomaly geomance geomancer geomancy geomant geomantic geomantical geomantically geometer geometric geometrical geometrically geometrician geometricize geometrid geometriform geometrine geometrize geometroid geometry geomoroi geomorphic geomorphist geomorphogenic geomorphogenist geomorphogeny geomorphological geomorphology geomorphy geomyid geonavigation geonegative geonoma geonyctinastic geonyctitropic geoparallelotropic geophagia geophagism geophagist geophagous geophagy geophilid geophilous geophone geophysical geophysicist geophysics geophyte geophytic geoplagiotropism geopolar geopolitic geopolitical geopolitically geopolitician geopolitics geoponic geoponical geoponics geopony geopositive georama georgiadesite georgic geoscopic geoscopy geoselenic geosid geoside geosphere geostatic geostatics geostrategic geostrategist geostrategy geostrophic geosynclinal geosyncline geotactic geotactically geotaxis geotaxy geotechnic geotechnics geotectology geotectonic geotectonics geotherm geothermal geothermic geothermometer geotic geotical geotilla geotonic geotonus geotropic geotropically geotropism geotropy geoty gephyrean gephyrocercal gephyrocercy ger gerah geraniaceous geranial geranic geraniol geranium geranomorph geranomorphic geranyl gerardia gerastian gerate gerated geratic geratologic geratologous geratology geraty gerb gerbe gerbil gercrow gereagle gerefa gerenda gerendum gerent gerenuk gerfalcon gerhardtite geriatric geriatrician geriatrics gerim gerip germ germal german germander germane germanely germaneness germanic germanious germanite germanity germanium germanization germanize germanous germanyl germarium germen germfree germicidal germicide germifuge germigenous germin germina germinability germinable germinal germinally germinance germinancy germinant germinate germination germinative germinatively germinator germing germinogony germiparity germless germlike germling germon germproof germule germy gernitz gerocomia gerocomical gerocomy geromorphism geront gerontal gerontes gerontic gerontine gerontism geronto gerontocracy gerontocrat gerontocratic gerontogeous gerontology gerontophilia gerontoxon gerrhosaurid gerrymander gerrymanderer gers gersdorffite gersum gerund gerundial gerundially gerundival gerundive gerundively gerusia gervao gerygone geryonid gesith gesithcund gesithcundman gesneraceous gesneria gesneriaceous gesning gessamine gesso gest gestalter gestaltist gestant gestate gestation gestational gestative gestatorial gestatorium gestatory geste gested gesten gestening gestic gestical gesticulacious gesticulant gesticular gesticularious gesticulate gesticulation gesticulative gesticulatively gesticulator gesticulatory gestion gestning gestural gesture gestureless gesturer get geta getah getaway gether gethsemane gethsemanic getling getpenny gettable getter getting getup geum gewgaw gewgawed gewgawish gewgawry gewgawy gey geyan geyerite geyser geyseral geyseric geyserine geyserish geyserite gez ghafir ghaist ghalva gharial gharnao gharry ghastily ghastlily ghastliness ghastly ghat ghatti ghatwal ghatwazi ghazi ghazism ghebeta ghee gheleem gherkin ghetchoo ghetti ghetto ghettoization ghettoize ghizite ghoom ghost ghostcraft ghostdom ghoster ghostess ghostfish ghostflower ghosthood ghostified ghostily ghostish ghostism ghostland ghostless ghostlet ghostlify ghostlike ghostlily ghostliness ghostly ghostmonger ghostology ghostship ghostweed ghostwrite ghosty ghoul ghoulery ghoulish ghoulishly ghoulishness ghrush ghurry giant giantesque giantess gianthood giantish giantism giantize giantkind giantlike giantly giantry giantship giardia giardiasis giarra giarre gib gibaro gibbals gibbed gibber gibbergunyah gibberish gibberose gibberosity gibbet gibbetwise gibblegabble gibblegabbler gibbles gibbon gibbose gibbosity gibbous gibbously gibbousness gibbsite gibbus gibby gibe gibel gibelite giber gibing gibingly gibleh giblet giblets gibstaff gibus gid giddap giddea giddify giddily giddiness giddy giddyberry giddybrain giddyhead giddyish gidgee gie gied gien gieseckite gif giffgaff gift gifted giftedly giftedness giftie giftless giftling giftware gig gigantean gigantesque gigantic gigantical gigantically giganticidal giganticide giganticness gigantism gigantize gigantoblast gigantocyte gigantolite gigantological gigantology gigantomachy gigantostracan gigantostracous gigartinaceous gigback gigelira gigeria gigerium gigful gigger giggish giggit giggle giggledom gigglement giggler gigglesome giggling gigglingly gigglish giggly giglet gigliato giglot gigman gigmaness gigmanhood gigmania gigmanic gigmanically gigmanism gigmanity gignate gignitive gigolo gigot gigsman gigster gigtree gigunu gilbert gilbertage gilbertite gild gildable gilded gilden gilder gilding gilguy gilia gilim gill gillaroo gillbird gilled giller gillflirt gillhooter gillie gilliflirt gilling gilliver gillotage gillotype gillstoup gilly gillyflower gillygaupus gilo gilpy gilravage gilravager gilse gilsonite gilt giltcup gilthead gilttail gim gimbal gimbaled gimbaljawed gimberjawed gimble gimcrack gimcrackery gimcrackiness gimcracky gimel gimlet gimleteyed gimlety gimmal gimmer gimmerpet gimmick gimp gimped gimper gimping gin ging ginger gingerade gingerberry gingerbread gingerbready gingerin gingerleaf gingerline gingerliness gingerly gingerness gingernut gingerol gingerous gingerroot gingersnap gingerspice gingerwork gingerwort gingery gingham ginghamed gingili gingiva gingivae gingival gingivalgia gingivectomy gingivitis gingivoglossitis gingivolabial ginglyform ginglymoarthrodia ginglymoarthrodial ginglymodian ginglymoid ginglymoidal ginglymostomoid ginglymus ginglyni ginhouse gink ginkgo ginkgoaceous ginned ginner ginners ginnery ginney ginning ginnle ginny ginseng ginward gio giobertite giornata giornatate gip gipon gipper gipser gipsire gipsyweed giraffe giraffesque giraffine giraffoid girandola girandole girasol girasole girba gird girder girderage girderless girding girdingly girdle girdlecake girdlelike girdler girdlestead girdling girdlingly girl girleen girlery girlfully girlhood girlie girliness girling girlish girlishly girlishness girlism girllike girly girn girny giro giroflore girouette girouettism girr girse girsh girsle girt girth girtline gisarme gish gisla gisler gismondine gismondite gist git gitaligenin gitalin gith gitonin gitoxigenin gitoxin gittern gittith giustina give giveable giveaway given givenness giver givey giving gizz gizzard gizzen gizzern glabella glabellae glabellar glabellous glabellum glabrate glabrescent glabrous glace glaceed glaceing glaciable glacial glacialism glacialist glacialize glacially glaciaria glaciarium glaciate glaciation glacier glaciered glacieret glacierist glacification glacioaqueous glaciolacustrine glaciological glaciologist glaciology glaciomarine glaciometer glacionatant glacis glack glad gladden gladdener gladdon gladdy glade gladelike gladeye gladful gladfully gladfulness gladhearted gladiate gladiator gladiatorial gladiatorism gladiatorship gladiatrix gladify gladii gladiola gladiolar gladiole gladioli gladiolus gladius gladkaite gladless gladly gladness gladsome gladsomely gladsomeness glady glaga glaieul glaik glaiket glaiketness glair glaireous glairiness glairy glaister glaive glaived glaked glaky glam glamberry glamorize glamorous glamorously glamour glamoury glance glancer glancing glancingly gland glandaceous glandarious glandered glanderous glanders glandes glandiferous glandiform glandless glandlike glandular glandularly glandule glanduliferous glanduliform glanduligerous glandulose glandulosity glandulous glandulousness glans glar glare glareless glareole glareous glareproof glareworm glarily glariness glaring glaringly glaringness glarry glary glaserite glashan glass glassen glasser glasses glassfish glassful glasshouse glassie glassily glassine glassiness glassless glasslike glassmaker glassmaking glassman glassophone glassrope glassteel glassware glassweed glasswork glassworker glassworking glassworks glasswort glassy glauberite glaucescence glaucescent glaucin glaucine glaucochroite glaucodot glaucolite glaucoma glaucomatous glauconiferous glauconite glauconitic glauconitization glaucophane glaucophanite glaucophanization glaucophanize glaucophyllous glaucosuria glaucous glaucously glaum glaumrie glaur glaury glaver glaze glazed glazen glazer glazework glazier glaziery glazily glaziness glazing glazy gleam gleamily gleaminess gleaming gleamingly gleamless gleamy glean gleanable gleaner gleaning gleary gleba glebal glebe glebeless glebous glede gledy glee gleed gleeful gleefully gleefulness gleeishly gleek gleemaiden gleeman gleesome gleesomely gleesomeness gleet gleety gleewoman gleg glegly glegness glen glenohumeral glenoid glenoidal glent glessite gleyde glia gliadin glial glib glibbery glibly glibness glidder gliddery glide glideless glideness glider gliderport glidewort gliding glidingly gliff gliffing glime glimmer glimmering glimmeringly glimmerite glimmerous glimmery glimpse glimpser glink glint glioma gliomatous gliosa gliosis gliriform glirine glisk glisky glissade glissader glissando glissette glisten glistening glisteningly glister glisteringly glitter glitterance glittering glitteringly glittersome glittery gloam gloaming gloat gloater gloating gloatingly global globally globate globated globe globed globefish globeflower globeholder globelet globiferous globigerine globin globoid globose globosely globoseness globosite globosity globosphaerite globous globously globousness globular globulariaceous globularity globularly globularness globule globulet globulicidal globulicide globuliferous globuliform globulimeter globulin globulinuria globulite globulitic globuloid globulolysis globulose globulous globulousness globulysis globy glochid glochideous glochidia glochidial glochidian glochidiate glochidium glochis glockenspiel gloea gloeal gloeocapsoid gloeosporiose glom glome glomerate glomeration glomeroporphyritic glomerular glomerulate glomerule glomerulitis glomerulonephritis glomerulose glomerulus glommox glomus glonoin glonoine gloom gloomful gloomfully gloomily gloominess glooming gloomingly gloomless gloomth gloomy glop gloppen glor glore gloriation gloriette glorifiable glorification glorifier glorify gloriole gloriosity glorious gloriously gloriousness glory gloryful glorying gloryingly gloryless gloss glossa glossagra glossal glossalgia glossalgy glossanthrax glossarial glossarially glossarian glossarist glossarize glossary glossate glossator glossatorial glossectomy glossed glosser glossic glossily glossiness glossing glossingly glossist glossitic glossitis glossless glossmeter glossocarcinoma glossocele glossocoma glossocomon glossodynamometer glossodynia glossoepiglottic glossoepiglottidean glossograph glossographer glossographical glossography glossohyal glossoid glossokinesthetic glossolabial glossolabiolaryngeal glossolabiopharyngeal glossolalia glossolalist glossolaly glossolaryngeal glossological glossologist glossology glossolysis glossoncus glossopalatine glossopalatinus glossopathy glossopetra glossophagine glossopharyngeal glossopharyngeus glossophorous glossophytia glossoplasty glossoplegia glossopode glossopodium glossoptosis glossopyrosis glossorrhaphy glossoscopia glossoscopy glossospasm glossosteresis glossotomy glossotype glossy glost glottal glottalite glottalize glottic glottid glottidean glottis glottiscope glottogonic glottogonist glottogony glottologic glottological glottologist glottology glout glove gloveless glovelike glovemaker glovemaking glover gloveress glovey gloving glow glower glowerer glowering gloweringly glowfly glowing glowingly glowworm gloy gloze glozing glozingly glub glucase glucemia glucid glucide glucidic glucina glucine glucinic glucinium glucinum gluck glucofrangulin glucokinin glucolipid glucolipide glucolipin glucolipine glucolysis glucosaemia glucosamine glucosan glucosane glucosazone glucose glucosemia glucosic glucosid glucosidal glucosidase glucoside glucosidic glucosidically glucosin glucosine glucosone glucosuria glucuronic glue glued gluemaker gluemaking gluepot gluer gluey glueyness glug gluish gluishness glum gluma glumaceous glumal glume glumiferous glumly glummy glumness glumose glumosity glump glumpily glumpiness glumpish glumpy glunch glusid gluside glut glutamic glutamine glutaminic glutaric glutathione glutch gluteal glutelin gluten glutenin glutenous gluteofemoral gluteoinguinal gluteoperineal gluteus glutin glutinate glutination glutinative glutinize glutinose glutinosity glutinous glutinously glutinousness glutition glutoid glutose glutter gluttery glutting gluttingly glutton gluttoness gluttonish gluttonism gluttonize gluttonous gluttonously gluttonousness gluttony glyceraldehyde glycerate glyceric glyceride glycerin glycerinate glycerination glycerine glycerinize glycerite glycerize glycerizin glycerizine glycerogel glycerogelatin glycerol glycerolate glycerole glycerolize glycerophosphate glycerophosphoric glycerose glyceroxide glyceryl glycid glycide glycidic glycidol glycine glycinin glycocholate glycocholic glycocin glycocoll glycogelatin glycogen glycogenesis glycogenetic glycogenic glycogenize glycogenolysis glycogenous glycogeny glycohaemia glycohemia glycol glycolaldehyde glycolate glycolic glycolide glycolipid glycolipide glycolipin glycolipine glycoluric glycoluril glycolyl glycolylurea glycolysis glycolytic glycolytically glyconic glyconin glycoproteid glycoprotein glycosaemia glycose glycosemia glycosin glycosine glycosuria glycosuric glycuresis glycuronic glycyl glycyphyllin glycyrrhizin glyoxal glyoxalase glyoxalic glyoxalin glyoxaline glyoxim glyoxime glyoxyl glyoxylic glyph glyphic glyphograph glyphographer glyphographic glyphography glyptic glyptical glyptician glyptodont glyptodontoid glyptograph glyptographer glyptographic glyptography glyptolith glyptological glyptologist glyptology glyptotheca glyster gmelinite gnabble gnaphalioid gnar gnarl gnarled gnarliness gnarly gnash gnashingly gnat gnatcatcher gnatflower gnathal gnathalgia gnathic gnathidium gnathion gnathism gnathite gnathitis gnathobase gnathobasic gnathometer gnathonic gnathonical gnathonically gnathonism gnathonize gnathophorous gnathoplasty gnathopod gnathopodite gnathopodous gnathostegite gnathostomatous gnathostome gnathostomous gnathotheca gnatling gnatproof gnatsnap gnatsnapper gnatter gnatty gnatworm gnaw gnawable gnawer gnawing gnawingly gnawn gneiss gneissic gneissitic gneissoid gneissose gneissy gnetaceous gnocchetti gnome gnomed gnomesque gnomic gnomical gnomically gnomide gnomish gnomist gnomologic gnomological gnomologist gnomology gnomon gnomonic gnomonical gnomonics gnomonological gnomonologically gnomonology gnosiological gnosiology gnosis gnostic gnostical gnostically gnosticity gnosticize gnosticizer gnostology gnu go goa goad goadsman goadster goaf goal goalage goalee goalie goalkeeper goalkeeping goalless goalmouth goanna goat goatbeard goatbrush goatbush goatee goateed goatfish goatherd goatherdess goatish goatishly goatishness goatland goatlike goatling goatly goatroot goatsbane goatsbeard goatsfoot goatskin goatstone goatsucker goatweed goaty goave gob goback goban gobang gobbe gobber gobbet gobbin gobbing gobble gobbledygook gobbler gobby gobelin gobernadora gobi gobiesocid gobiesociform gobiid gobiiform gobioid goblet gobleted gobletful goblin gobline goblinesque goblinish goblinism goblinize goblinry gobmouthed gobo gobonated gobony gobstick goburra goby gobylike gocart god godchild goddard goddaughter godded goddess goddesshood goddessship goddikin goddize gode godet godfather godfatherhood godfathership godhead godhood godkin godless godlessly godlessness godlet godlike godlikeness godlily godliness godling godly godmaker godmaking godmamma godmother godmotherhood godmothership godown godpapa godparent godsend godship godson godsonship godwit goeduck goel goelism goer goes goetia goetic goetical goety goff goffer goffered gofferer goffering goffle gog gogga goggan goggle goggled goggler gogglers goggly goglet gogo goi goiabada going goitcho goiter goitered goitral goitrogen goitrogenic goitrous gol gola golach goladar golandaas golandause gold goldbeater goldbeating goldbrick goldbricker goldbug goldcrest goldcup golden goldenback goldeneye goldenfleece goldenhair goldenknop goldenlocks goldenly goldenmouthed goldenness goldenpert goldenrod goldenseal goldentop goldenwing golder goldfielder goldfinch goldfinny goldfish goldflower goldhammer goldhead goldie goldilocks goldin goldish goldless goldlike goldseed goldsinny goldsmith goldsmithery goldsmithing goldspink goldstone goldtail goldtit goldwater goldweed goldwork goldworker goldy golee golem golf golfdom golfer goli goliard goliardery goliardic goliath goliathize golkakra golland gollar golliwogg golly goloe golpe gomari gomart gomashta gomavel gombay gombeen gombeenism gombroon gomer gomeral gomlah gommelin gomphodont gomphosis gomuti gon gonad gonadal gonadial gonadic gonadotropic gonadotropin gonaduct gonagra gonakie gonal gonalgia gonangial gonangium gonapod gonapophysal gonapophysial gonapophysis gonarthritis gondang gondite gondola gondolet gondolier gone goneness goneoclinic gonepoiesis gonepoietic goner gonesome gonfalcon gonfalonier gonfalonierate gonfaloniership gonfanon gong gongman gongoristic gonia goniac gonial goniale goniatite goniatitic goniatitid goniatitoid gonid gonidangium gonidia gonidial gonidic gonidiferous gonidiogenous gonidioid gonidiophore gonidiose gonidiospore gonidium gonimic gonimium gonimolobe gonimous goniocraniometry goniometer goniometric goniometrical goniometrically goniometry gonion goniostat goniotropous gonitis gonium gonnardite gonne gonoblast gonoblastic gonoblastidial gonoblastidium gonocalycine gonocalyx gonocheme gonochorism gonochorismal gonochorismus gonochoristic gonococcal gonococcic gonococcoid gonococcus gonocoel gonocyte gonoecium gonomere gonomery gonophore gonophoric gonophorous gonoplasm gonopoietic gonorrhea gonorrheal gonorrheic gonosomal gonosome gonosphere gonostyle gonotheca gonothecal gonotokont gonotome gonotype gonozooid gony gonyalgia gonydeal gonydial gonyocele gonyoncus gonys gonystylaceous gonytheca goo goober good goodeniaceous goodhearted goodheartedly goodheartedness gooding goodish goodishness goodlihead goodlike goodliness goodly goodman goodmanship goodness goods goodsome goodwife goodwill goodwillit goodwilly goody goodyear goodyish goodyism goodyness goodyship goof goofer goofily goofiness goofy googly googol googolplex googul gook gool goolah gools gooma goon goondie goonie goosander goose goosebeak gooseberry goosebill goosebird goosebone gooseboy goosecap goosefish gooseflower goosefoot goosegirl goosegog gooseherd goosehouse gooselike goosemouth gooseneck goosenecked gooserumped goosery goosetongue gooseweed goosewing goosewinged goosish goosishly goosishness goosy gopher gopherberry gopherroot gopherwood gopura gor gora goracco goral goran gorb gorbal gorbellied gorbelly gorbet gorble gorblimy gorce gorcock gorcrow gordiacean gordiaceous gordolobo gordunite gore gorer gorevan gorfly gorge gorgeable gorged gorgedly gorgelet gorgeous gorgeously gorgeousness gorger gorgerin gorget gorgeted gorglin gorgonacean gorgonaceous gorgonesque gorgoneum gorgoniacean gorgoniaceous gorgonian gorgonin gorgonize gorgonlike gorhen goric gorilla gorillaship gorillian gorilline gorilloid gorily goriness goring gorlin gorlois gormandize gormandizer gormaw gormed gorra gorraf gorry gorse gorsebird gorsechat gorsedd gorsehatch gorsy gory gos gosain goschen gosh goshawk goshenite goslarite goslet gosling gosmore gospel gospeler gospelist gospelize gospellike gospelly gospelmonger gospelwards gospodar gosport gossamer gossamered gossamery gossampine gossan gossaniferous gossard gossip gossipdom gossipee gossiper gossiphood gossipiness gossiping gossipingly gossipmonger gossipred gossipry gossipy gossoon gossy gossypine gossypol gossypose got gotch gote gothite gotra gotraja gotten gouaree gouge gouger goujon goulash goumi goup gourami gourd gourde gourdful gourdhead gourdiness gourdlike gourdworm gourdy gourmand gourmander gourmanderie gourmandism gourmet gourmetism gourounut goustrous gousty gout goutify goutily goutiness goutish goutte goutweed goutwort gouty gove govern governability governable governableness governably governail governance governess governessdom governesshood governessy governing governingly government governmental governmentalism governmentalist governmentalize governmentally governmentish governor governorate governorship gowan gowdnie gowf gowfer gowiddie gowk gowked gowkedly gowkedness gowkit gowl gown gownlet gownsman gowpen goy goyazite goyim goyin goyle gozell gozzard gra grab grabbable grabber grabble grabbler grabbling grabbots graben grabhook grabouche grace graceful gracefully gracefulness graceless gracelessly gracelessness gracelike gracer gracilariid gracile gracileness gracilescent gracilis gracility graciosity gracioso gracious graciously graciousness grackle grad gradable gradal gradate gradation gradational gradationally gradationately gradative gradatively gradatory graddan grade graded gradefinder gradely grader gradgrind gradient gradienter gradin gradine grading gradiometer gradiometric gradometer gradual gradualism gradualist gradualistic graduality gradually gradualness graduand graduate graduated graduateship graduatical graduating graduation graduator gradus graff graffage graffer graffito grafship graft graftage graftdom grafted grafter grafting graftonite graftproof graham grahamite grail grailer grailing grain grainage grained grainedness grainer grainering grainery grainfield graininess graining grainland grainless grainman grainsick grainsickness grainsman grainways grainy graip graisse graith grallatorial grallatory grallic gralline gralloch gram grama gramarye gramashes grame gramenite gramicidin graminaceous gramineal gramineous gramineousness graminicolous graminiferous graminifolious graminiform graminin graminivore graminivorous graminological graminology graminous grammalogue grammar grammarian grammarianism grammarless grammatic grammatical grammatically grammaticalness grammaticaster grammaticism grammaticize grammatics grammatist grammatistical grammatite grammatolator grammatolatry gramme gramoches gramophone gramophonic gramophonical gramophonically gramophonist gramp grampa grampus granada granadilla granadillo granage granary granate granatum granch grand grandam grandame grandaunt grandchild granddad granddaddy granddaughter granddaughterly grandee grandeeism grandeeship grandesque grandeur grandeval grandfather grandfatherhood grandfatherish grandfatherless grandfatherly grandfathership grandfer grandfilial grandiloquence grandiloquent grandiloquently grandiloquous grandiose grandiosely grandiosity grandisonant grandisonous grandly grandma grandmaternal grandmother grandmotherhood grandmotherism grandmotherliness grandmotherly grandnephew grandness grandniece grandpa grandparent grandparentage grandparental grandpaternal grandsire grandson grandsonship grandstand grandstander granduncle grane grange granger grangerism grangerite grangerization grangerize grangerizer graniform granilla granite granitelike graniteware granitic granitical graniticoline granitiferous granitification granitiform granitite granitization granitize granitoid granivore granivorous granjeno grank grannom granny grannybush grano granoblastic granodiorite granogabbro granolite granolith granolithic granomerite granophyre granophyric granose granospherite grant grantable grantedly grantee granter grantor granula granular granularity granularly granulary granulate granulated granulater granulation granulative granulator granule granulet granuliferous granuliform granulite granulitic granulitis granulitization granulitize granulize granuloadipose granulocyte granuloma granulomatous granulometric granulosa granulose granulous granza granzita grape graped grapeflower grapefruit grapeful grapeless grapelet grapelike grapenuts graperoot grapery grapeshot grapeskin grapestalk grapestone grapevine grapewise grapewort graph graphalloy graphic graphical graphically graphicalness graphicly graphicness graphics graphiological graphiologist graphiology graphite graphiter graphitic graphitization graphitize graphitoid graphitoidal graphologic graphological graphologist graphology graphomania graphomaniac graphometer graphometric graphometrical graphometry graphomotor graphophone graphophonic graphorrhea graphoscope graphospasm graphostatic graphostatical graphostatics graphotype graphotypic graphy graping grapnel grappa grapple grappler grappling grapsoid graptolite graptolitic graptomancy grapy grasp graspable grasper grasping graspingly graspingness graspless grass grassant grassation grassbird grasschat grasscut grasscutter grassed grasser grasset grassflat grassflower grasshop grasshopper grasshopperdom grasshopperish grasshouse grassiness grassing grassland grassless grasslike grassman grassnut grassplot grassquit grasswards grassweed grasswidowhood grasswork grassworm grassy grat grate grateful gratefully gratefulness grateless grateman grater gratewise grather graticulate graticulation graticule gratification gratified gratifiedly gratifier gratify gratifying gratifyingly gratility gratillity gratinate grating gratiolin gratiosolin gratis gratitude gratten grattoir gratuitant gratuitous gratuitously gratuitousness gratuity gratulant gratulate gratulation gratulatorily gratulatory graupel gravamen gravamina grave graveclod gravecloth graveclothes graved gravedigger gravegarth gravel graveless gravelike graveling gravelish gravelliness gravelly gravelroot gravelstone gravelweed gravely gravemaker gravemaking graveman gravemaster graven graveness graveolence graveolency graveolent graver graveship graveside gravestead gravestone graveward gravewards graveyard gravic gravicembalo gravid gravidity gravidly gravidness gravigrade gravimeter gravimetric gravimetrical gravimetrically gravimetry graving gravitate gravitater gravitation gravitational gravitationally gravitative gravitometer gravity gravure gravy grawls gray grayback graybeard graycoat grayfish grayfly grayhead grayish graylag grayling grayly graymalkin graymill grayness graypate graywacke grayware graywether grazable graze grazeable grazer grazier grazierdom graziery grazing grazingly grease greasebush greasehorn greaseless greaselessness greaseproof greaseproofness greaser greasewood greasily greasiness greasy great greatcoat greatcoated greaten greater greathead greatheart greathearted greatheartedness greatish greatly greatmouthed greatness greave greaved greaves grebe grece gree greed greedily greediness greedless greedsome greedy greedygut greedyguts green greenable greenage greenalite greenback greenbark greenbone greenbrier greencoat greener greenery greeney greenfinch greenfish greengage greengill greengrocer greengrocery greenhead greenheaded greenheart greenhearted greenhew greenhide greenhood greenhorn greenhornism greenhouse greening greenish greenishness greenkeeper greenkeeping greenlandite greenleek greenless greenlet greenling greenly greenness greenockite greenovite greenroom greensand greensauce greenshank greensick greensickness greenside greenstone greenstuff greensward greenswarded greentail greenth greenuk greenweed greenwing greenwithe greenwood greenwort greeny greenyard greet greeter greeting greetingless greetingly greffier greffotome gregal gregale gregaloid gregarian gregarianism gregarine gregarinidal gregariniform gregarinosis gregarinous gregarious gregariously gregariousness gregaritic grege greggle grego greige grein greisen gremial gremlin grenade grenadier grenadierial grenadierly grenadiership grenadin grenadine gressorial gressorious greund grew grewhound grey greyhound greyly greyness gribble grice grid griddle griddlecake griddler gride gridelin gridiron griece grieced grief griefful grieffully griefless grieflessness grieshoch grievance grieve grieved grievedly griever grieveship grieving grievingly grievous grievously grievousness griff griffade griffado griffaun griffe griffin griffinage griffinesque griffinhood griffinish griffinism griffithite griffon griffonage griffonne grift grifter grig griggles grignet grigri grihastha grihyasutra grike grill grillade grillage grille grilled griller grillroom grillwork grilse grim grimace grimacer grimacier grimacing grimacingly grimalkin grime grimful grimgribber grimily griminess grimliness grimly grimme grimmiaceous grimmish grimness grimp grimy grin grinagog grinch grind grindable grinder grinderman grindery grinding grindingly grindle grindstone gringo gringolee gringophobia grinner grinning grinningly grinny grintern grip gripe gripeful griper gripgrass griphite griping gripingly gripless gripman gripment grippal grippe gripper grippiness gripping grippingly grippingness gripple grippleness grippotoxin grippy gripsack gripy griquaite gris grisaille grisard griseous grisette grisettish grisgris griskin grisliness grisly grison grisounite grisoutine grissens grissons grist gristbite grister gristle gristliness gristly gristmill gristmiller gristmilling gristy grit grith grithbreach grithman gritless gritrock grits gritstone gritten gritter grittily grittiness grittle gritty grivet grivna grizzle grizzled grizzler grizzly grizzlyman groan groaner groanful groaning groaningly groat groats groatsworth grobian grobianism grocer grocerdom groceress grocerly grocerwise grocery groceryman groff grog groggery groggily grogginess groggy grogram grogshop groin groined groinery groining gromatic gromatics grommet gromwell groom groomer groomish groomishly groomlet groomling groomsman groomy groop groose groot grooty groove grooveless groovelike groover grooverhead grooviness grooving groovy grope groper groping gropingly gropple grorudite gros grosbeak groschen groser groset grosgrain grosgrained gross grossart grossen grosser grossification grossify grossly grossness grosso grossulaceous grossular grossularia grossulariaceous grossularious grossularite grosz groszy grot grotesque grotesquely grotesqueness grotesquerie grothine grothite grottesco grotto grottoed grottolike grottowork grouch grouchily grouchiness grouchingly grouchy grouf grough ground groundable groundably groundage groundberry groundbird grounded groundedly groundedness groundenell grounder groundflower grounding groundless groundlessly groundlessness groundliness groundling groundly groundman groundmass groundneedle groundnut groundplot grounds groundsel groundsill groundsman groundward groundwood groundwork groundy group groupage groupageness grouped grouper grouping groupist grouplet groupment groupwise grouse grouseberry grouseless grouser grouseward grousewards grousy grout grouter grouthead grouts grouty grouze grove groved grovel groveler groveless groveling grovelingly grovelings grovy grow growable growan growed grower growing growingly growingupness growl growler growlery growling growlingly growly grown grownup growse growsome growth growthful growthiness growthless growthy grozart grozet grr grub grubbed grubber grubbery grubbily grubbiness grubby grubhood grubless grubroot grubs grubstake grubstaker grubstreet grubworm grudge grudgeful grudgefully grudgekin grudgeless grudger grudgery grudging grudgingly grudgingness grudgment grue gruel grueler grueling gruelly gruesome gruesomely gruesomeness gruff gruffily gruffiness gruffish gruffly gruffness gruffs gruffy grufted grugru gruiform gruine grum grumble grumbler grumblesome grumbling grumblingly grumbly grume grumly grummel grummels grummet grummeter grumness grumose grumous grumousness grump grumph grumphie grumphy grumpily grumpiness grumpish grumpy grun grundy grunerite gruneritization grunion grunt grunter grunting gruntingly gruntle gruntled gruntling grush grushie gruss grutch grutten gryde grylli gryllid gryllos gryllus grypanian gryposis grysbok guaba guacacoa guachamaca guacharo guachipilin guacimo guacin guaco guaconize guadalcazarite guaiac guaiacol guaiacolize guaiaconic guaiacum guaiaretic guaiasanol guaiol guaka guama guan guana guanabana guanabano guanaco guanajuatite guanamine guanase guanay guaneide guango guanidine guanidopropionic guaniferous guanine guanize guano guanophore guanosine guanyl guanylic guao guapena guapilla guapinol guar guara guarabu guaracha guaraguao guarana guarani guaranine guarantee guaranteeship guarantor guarantorship guaranty guarapucu guard guardable guardant guarded guardedly guardedness guardeen guarder guardfish guardful guardfully guardhouse guardian guardiancy guardianess guardianless guardianly guardianship guarding guardingly guardless guardlike guardo guardrail guardroom guardship guardsman guardstone guariba guarinite guarneri guarri guasa guatambu guativere guava guavaberry guavina guayaba guayabi guayabo guayacan guayroto guayule guaza gubbertush gubbo gubernacula gubernacular gubernaculum gubernative gubernator gubernatorial gubernatrix guberniya gucki gud gudame guddle gude gudebrother gudefather gudemother gudesake gudesakes gudesire gudewife gudge gudgeon gudget gudok gue guebucu guejarite guemal guenepe guenon guepard guerdon guerdonable guerdoner guerdonless guereza guernsey guernseyed guerrilla guerrillaism guerrillaship guess guessable guesser guessing guessingly guesswork guessworker guest guestchamber guesten guester guesthouse guesting guestive guestless guestling guestmaster guestship guestwise gufa guff guffaw guffer guffin guffy gugal guggle gugglet guglet guglia guglio gugu guhr guib guiba guidable guidage guidance guide guideboard guidebook guidebookish guidecraft guideless guideline guidepost guider guideress guidership guideship guideway guidman guidon guidwilly guige guignol guijo guild guilder guildhall guildic guildry guildship guildsman guile guileful guilefully guilefulness guileless guilelessly guilelessness guilery guillemet guillemot guillevat guilloche guillochee guillotinade guillotine guillotinement guillotiner guillotinism guillotinist guilt guiltily guiltiness guiltless guiltlessly guiltlessness guiltsick guilty guily guimbard guimpe guinea guipure guisard guise guiser guising guitar guitarfish guitarist guitermanite guitguit gul gula gulae gulaman gulancha gular gularis gulch gulden guldengroschen gule gules gulf gulflike gulfside gulfwards gulfweed gulfy gulgul gulinula gulinulae gulinular gulix gull gullery gullet gulleting gullibility gullible gullibly gullion gullish gullishly gullishness gully gullyhole gulonic gulose gulosity gulp gulper gulpin gulping gulpingly gulpy gulravage gulsach gum gumbo gumboil gumbotil gumby gumchewer gumdigger gumdigging gumdrop gumfield gumflower gumihan gumless gumlike gumly gumma gummage gummaker gummaking gummata gummatous gummed gummer gummiferous gumminess gumming gummite gummose gummosis gummosity gummous gummy gump gumphion gumption gumptionless gumptious gumpus gumshoe gumweed gumwood gun guna gunate gunation gunbearer gunboat gunbright gunbuilder guncotton gundi gundy gunebo gunfire gunflint gunge gunhouse gunite gunj gunk gunl gunless gunlock gunmaker gunmaking gunman gunmanship gunnage gunne gunnel gunner gunneress gunnership gunnery gunnies gunning gunnung gunny gunocracy gunong gunpaper gunplay gunpowder gunpowderous gunpowdery gunpower gunrack gunreach gunrunner gunrunning gunsel gunshop gunshot gunsman gunsmith gunsmithery gunsmithing gunster gunstick gunstock gunstocker gunstocking gunstone gunter gunwale gunyah gunyang gunyeh gup guppy guptavidya gur gurdfish gurdle gurdwara gurge gurgeon gurgeons gurges gurgitation gurgle gurglet gurgling gurglingly gurgly gurgoyle gurgulation gurjun gurk gurl gurly gurnard gurnet gurnetty gurniad gurr gurrah gurry gurt guru guruship gush gusher gushet gushily gushiness gushing gushingly gushingness gushy gusla gusle guss gusset gussie gust gustable gustation gustative gustativeness gustatory gustful gustfully gustfulness gustily gustiness gustless gusto gustoish gusty gut gutless gutlike gutling gutt gutta guttable guttate guttated guttatim guttation gutte gutter gutterblood guttering gutterlike gutterling gutterman guttersnipe guttersnipish gutterspout gutterwise guttery gutti guttide guttie guttiferal guttiferous guttiform guttiness guttle guttler guttula guttulae guttular guttulate guttule guttural gutturalism gutturality gutturalization gutturalize gutturally gutturalness gutturize gutturonasal gutturopalatal gutturopalatine gutturotetany guttus gutty gutweed gutwise gutwort guvacine guvacoline guy guydom guyer guytrash guz guze guzmania guzzle guzzledom guzzler gwag gweduc gweed gweeon gwely gwine gwyniad gyascutus gyle gym gymel gymkhana gymnanthous gymnasia gymnasial gymnasiarch gymnasiarchy gymnasiast gymnasic gymnasium gymnast gymnastic gymnastically gymnastics gymnemic gymnetrous gymnic gymnical gymnics gymnite gymnoblastic gymnocarpic gymnocarpous gymnoceratous gymnocidium gymnodiniaceous gymnodont gymnogen gymnogenous gymnoglossate gymnogynous gymnolaematous gymnopaedic gymnophiona gymnoplast gymnorhinal gymnosoph gymnosophist gymnosophy gymnosperm gymnospermal gymnospermic gymnospermism gymnospermy gymnospore gymnosporous gymnostomous gymnotid gymnotokous gymnure gymnurine gympie gyn gynaecea gynaeceum gynaecocoenic gynander gynandrarchic gynandrarchy gynandria gynandrian gynandrism gynandroid gynandromorph gynandromorphic gynandromorphism gynandromorphous gynandromorphy gynandrophore gynandrosporous gynandrous gynandry gynantherous gynarchic gynarchy gyne gynecic gynecidal gynecide gynecocentric gynecocracy gynecocrat gynecocratic gynecocratical gynecoid gynecolatry gynecologic gynecological gynecologist gynecology gynecomania gynecomastia gynecomastism gynecomasty gynecomazia gynecomorphous gyneconitis gynecopathic gynecopathy gynecophore gynecophoric gynecophorous gynecotelic gynecratic gyneocracy gyneolater gyneolatry gynephobia gynethusia gyniatrics gyniatry gynic gynics gynobase gynobaseous gynobasic gynocardia gynocardic gynocracy gynocratic gynodioecious gynodioeciously gynodioecism gynoecia gynoecium gynogenesis gynomonecious gynomonoeciously gynomonoecism gynophagite gynophore gynophoric gynosporangium gynospore gynostegia gynostegium gynostemium gyp gype gypper gyps gypseian gypseous gypsiferous gypsine gypsiologist gypsite gypsography gypsologist gypsology gypsophila gypsophilous gypsophily gypsoplast gypsous gypster gypsum gypsy gypsydom gypsyesque gypsyfy gypsyhead gypsyhood gypsyish gypsyism gypsylike gypsyry gypsyweed gypsywise gypsywort gyral gyrally gyrant gyrate gyration gyrational gyrator gyratory gyre gyrencephalate gyrencephalic gyrencephalous gyrene gyrfalcon gyri gyric gyrinid gyro gyrocar gyroceracone gyroceran gyrochrome gyrocompass gyrogonite gyrograph gyroidal gyroidally gyrolite gyrolith gyroma gyromagnetic gyromancy gyromele gyrometer gyron gyronny gyrophoric gyropigeon gyroplane gyroscope gyroscopic gyroscopically gyroscopics gyrose gyrostabilizer gyrostat gyrostatic gyrostatically gyrostatics gyrous gyrovagi gyrovagues gyrowheel gyrus gyte gytling gyve h ha haab haaf habanera habble habdalah habeas habena habenal habenar habendum habenula habenular haberdash haberdasher haberdasheress haberdashery haberdine habergeon habilable habilatory habile habiliment habilimentation habilimented habilitate habilitation habilitator hability habille habit habitability habitable habitableness habitably habitacle habitacule habitally habitan habitance habitancy habitant habitat habitate habitation habitational habitative habited habitual habituality habitualize habitually habitualness habituate habituation habitude habitudinal habitue habitus habnab haboob habronemiasis habronemic habu habutai habutaye hache hachure hacienda hack hackamatak hackamore hackbarrow hackberry hackbolt hackbush hackbut hackbuteer hacked hackee hacker hackery hackin hacking hackingly hackle hackleback hackler hacklog hackly hackmack hackman hackmatack hackney hackneyed hackneyer hackneyism hackneyman hacksaw hacksilber hackster hackthorn hacktree hackwood hacky had hadbot hadden haddie haddo haddock haddocker hade hadentomoid hading hadj hadji hadland hadrome hadromycosis hadrosaur haec haecceity haem haemaspectroscope haematherm haemathermal haemathermous haematinon haematinum haematite haematobranchiate haematocryal haematophiline haematorrhachis haematosepsis haematothermal haematoxylic haematoxylin haemoconcentration haemodilution haemodoraceous haemoglobin haemogram haemonchiasis haemonchosis haemony haemophile haemorrhage haemorrhagia haemorrhagic haemorrhoid haemorrhoidal haemosporid haemosporidian haemuloid haeremai haet haff haffet haffkinize haffle hafiz hafnium hafnyl haft hafter hag hagberry hagboat hagborn hagbush hagdon hageen hagfish haggada haggaday haggadic haggadical haggadist haggadistic haggard haggardly haggardness hagged hagger haggis haggish haggishly haggishness haggister haggle haggler haggly haggy hagi hagia hagiarchy hagiocracy hagiographal hagiographer hagiographic hagiographical hagiographist hagiography hagiolater hagiolatrous hagiolatry hagiologic hagiological hagiologist hagiology hagiophobia hagioscope hagioscopic haglet haglike haglin hagride hagrope hagseed hagship hagstone hagtaper hagweed hagworm hah haidingerite haik haikai haikal haikwan hail hailer hailproof hailse hailshot hailstone hailstorm hailweed haily hain hainberry haine hair hairband hairbeard hairbird hairbrain hairbreadth hairbrush haircloth haircut haircutter haircutting hairdo hairdress hairdresser hairdressing haire haired hairen hairhoof hairhound hairif hairiness hairlace hairless hairlessness hairlet hairline hairlock hairmeal hairmonger hairpin hairsplitter hairsplitting hairspring hairstone hairstreak hairtail hairup hairweed hairwood hairwork hairworm hairy haje hajib hajilij hak hakam hakdar hake hakeem hakenkreuz hakim hako haku hala halakah halakic halakist halakistic halal halalcor halation halazone halberd halberdier halberdman halberdsman halbert halch halcyon halcyonian halcyonic halcyonine hale halebi haleness haler halerz halesome half halfback halfbeak halfer halfheaded halfhearted halfheartedly halfheartedness halfling halfman halfness halfpace halfpaced halfpenny halfpennyworth halfway halfwise halibios halibiotic halibiu halibut halibuter halichondrine halichondroid halide halidom halieutic halieutically halieutics halimous halinous haliographer haliography haliotoid haliplankton haliplid halisteresis halisteretic halite halitosis halituosity halituous halitus hall hallabaloo hallage hallah hallan hallanshaker hallebardier hallecret halleflinta halleflintoid hallel hallelujah hallelujatic hallex halliblash halling hallman hallmark hallmarked hallmarker hallmoot halloo hallopodous hallow hallowed hallowedly hallowedness hallower halloysite hallucal hallucinate hallucination hallucinational hallucinative hallucinator hallucinatory hallucined hallucinosis hallux hallway halma halmalille halmawise halo halobios halobiotic halochromism halochromy haloesque halogen halogenate halogenation halogenoid halogenous halohydrin haloid halolike halolimnic halomancy halometer halomorphic halophile halophilism halophilous halophyte halophytic halophytism haloragidaceous haloscope halotrichite haloxene hals halse halsen halsfang halt halter halterbreak halteres halterproof halting haltingly haltingness haltless halucket halukkah halurgist halurgy halutz halvaner halvans halve halved halvelings halver halves halyard ham hamacratic hamadryad hamal hamald hamamelidaceous hamamelidin hamamelin hamartiologist hamartiology hamartite hamate hamated hamatum hambergite hamble hambroline hamburger hame hameil hamel hamesucken hamewith hamfat hamfatter hami hamiform hamingja hamirostrate hamlah hamlet hamleted hamleteer hamletization hamletize hamlinite hammada hammam hammer hammerable hammerbird hammercloth hammerdress hammerer hammerfish hammerhead hammerheaded hammering hammeringly hammerkop hammerless hammerlike hammerman hammersmith hammerstone hammertoe hammerwise hammerwork hammerwort hammochrysos hammock hammy hamose hamous hamper hamperedly hamperedness hamperer hamperman hamrongite hamsa hamshackle hamster hamstring hamular hamulate hamule hamulose hamulus hamus hamza han hanaper hanaster hanbury hance hanced hanch hancockite hand handbag handball handballer handbank handbanker handbarrow handbill handblow handbolt handbook handbow handbreadth handcar handcart handclap handclasp handcloth handcraft handcraftman handcraftsman handcuff handed handedness hander handersome handfast handfasting handfastly handfastness handflower handful handgrasp handgravure handgrip handgriping handgun handhaving handhold handhole handicap handicapped handicapper handicraft handicraftship handicraftsman handicraftsmanship handicraftswoman handicuff handily handiness handistroke handiwork handkercher handkerchief handkerchiefful handlaid handle handleable handled handleless handler handless handlike handling handmade handmaid handmaiden handmaidenly handout handpost handprint handrail handrailing handreader handreading handsale handsaw handsbreadth handscrape handsel handseller handset handshake handshaker handshaking handsmooth handsome handsomeish handsomely handsomeness handspade handspike handspoke handspring handstaff handstand handstone handstroke handwear handwheel handwhile handwork handworkman handwrist handwrite handwriting handy handyblow handybook handygrip hangability hangable hangalai hangar hangbird hangby hangdog hange hangee hanger hangfire hangie hanging hangingly hangkang hangle hangman hangmanship hangment hangnail hangnest hangout hangul hangwoman hangworm hangworthy hanif hanifism hanifite hanifiya hank hanker hankerer hankering hankeringly hankie hankle hanksite hanky hanna hannayite hansa hanse hansel hansgrave hansom hant hantle hao haole haoma haori hap hapalote hapaxanthous haphazard haphazardly haphazardness haphtarah hapless haplessly haplessness haplite haplocaulescent haplochlamydeous haplodont haplodonty haplography haploid haploidic haploidy haplolaly haplologic haplology haploma haplomid haplomous haplont haploperistomic haploperistomous haplopetalous haplophase haplophyte haploscope haploscopic haplosis haplostemonous haplotype haply happen happening happenstance happier happiest happify happiless happily happiness happing happy hapten haptene haptenic haptere hapteron haptic haptics haptometer haptophor haptophoric haptophorous haptotropic haptotropically haptotropism hapu hapuku haqueton harakeke harangue harangueful haranguer harass harassable harassedly harasser harassingly harassment haratch harbergage harbi harbinge harbinger harbingership harbingery harbor harborage harborer harborless harborous harborside harborward hard hardanger hardback hardbake hardbeam hardberry harden hardenable hardener hardening hardenite harder hardfern hardfist hardfisted hardfistedness hardhack hardhanded hardhandedness hardhead hardheaded hardheadedly hardheadedness hardhearted hardheartedly hardheartedness hardihood hardily hardim hardiment hardiness hardish hardishrew hardly hardmouth hardmouthed hardness hardock hardpan hardship hardstand hardstanding hardtack hardtail hardware hardwareman hardwood hardy hardystonite hare harebell harebottle harebrain harebrained harebrainedly harebrainedness harebur harefoot harefooted harehearted harehound harelike harelip harelipped harem haremism haremlik harengiform harfang haricot harigalds hariolate hariolation hariolize harish hark harka harl harlequin harlequina harlequinade harlequinery harlequinesque harlequinic harlequinism harlequinize harling harlock harlot harlotry harm harmal harmala harmaline harman harmattan harmel harmer harmful harmfully harmfulness harmine harminic harmless harmlessly harmlessness harmonia harmoniacal harmonial harmonic harmonica harmonical harmonically harmonicalness harmonichord harmonici harmonicism harmonicon harmonics harmonious harmoniously harmoniousness harmoniphon harmoniphone harmonist harmonistic harmonistically harmonium harmonizable harmonization harmonize harmonizer harmonogram harmonograph harmonometer harmony harmost harmotome harmotomic harmproof harn harness harnesser harnessry harnpan harp harpago harpagon harper harperess harpier harpings harpist harpless harplike harpoon harpooner harpress harpsichord harpsichordist harpula harpwaytuning harpwise harpylike harquebus harquebusade harquebusier harr harrateen harridan harrier harrisite harrow harrower harrowing harrowingly harrowingness harrowment harry harsh harshen harshish harshly harshness harshweed harstigite hart hartal hartberry hartebeest hartin hartite hartshorn hartstongue harttite haruspex haruspical haruspicate haruspication haruspice haruspices haruspicy harvest harvestbug harvester harvestless harvestman harvestry harvesttime harzburgite hasan hasenpfeffer hash hashab hasher hashish hashy hask haskness hasky haslet haslock hasp hassar hassel hassle hassock hassocky hasta hastate hastately hastati hastatolanceolate hastatosagittate haste hasteful hastefully hasteless hastelessness hasten hastener hasteproof haster hastilude hastily hastiness hastings hastingsite hastish hastler hasty hat hatable hatband hatbox hatbrim hatbrush hatch hatchability hatchable hatchel hatcheler hatcher hatchery hatcheryman hatchet hatchetback hatchetfish hatchetlike hatchetman hatchettine hatchettolite hatchety hatchgate hatching hatchling hatchman hatchment hatchminder hatchway hatchwayman hate hateable hateful hatefully hatefulness hateless hatelessness hater hatful hath hatherlite hathi hatless hatlessness hatlike hatmaker hatmaking hatpin hatrack hatrail hatred hatress hatstand hatt hatted hatter hattery hatting hattock hatty hau hauberget hauberk hauchecornite hauerite haugh haughland haught haughtily haughtiness haughtly haughtness haughtonite haughty haul haulabout haulage haulageway haulback hauld hauler haulier haulm haulmy haulster haunch haunched hauncher haunching haunchless haunchy haunt haunter hauntingly haunty hauriant haurient hause hausen hausmannite hausse haustellate haustellated haustellous haustellum haustement haustorial haustorium haustral haustrum hautboy hautboyist hauteur hauynite hauynophyre havage have haveable haveage havel haveless havelock haven havenage havener havenership havenet havenful havenless havent havenward haver havercake haverel haverer havergrass havermeal havers haversack haversine havier havildar havingness havoc havocker haw hawaiite hawbuck hawcubite hawer hawfinch hawk hawkbill hawkbit hawked hawker hawkery hawkie hawking hawkish hawklike hawknut hawkweed hawkwise hawky hawm hawok hawse hawsehole hawseman hawsepiece hawsepipe hawser hawserwise hawthorn hawthorned hawthorny hay haya hayband haybird haybote haycap haycart haycock haydenite hayey hayfield hayfork haygrower haylift hayloft haymaker haymaking haymarket haymow hayrack hayrake hayraker hayrick hayseed haysel haystack haysuck haytime hayward hayweed haywire hayz hazard hazardable hazarder hazardful hazardize hazardless hazardous hazardously hazardousness hazardry haze hazel hazeled hazeless hazelly hazelnut hazelwood hazelwort hazen hazer hazily haziness hazing hazle haznadar hazy hazzan he head headache headachy headband headbander headboard headborough headcap headchair headcheese headchute headcloth headdress headed headender header headfirst headforemost headframe headful headgear headily headiness heading headkerchief headland headledge headless headlessness headlight headlighting headlike headline headliner headlock headlong headlongly headlongs headlongwise headman headmark headmaster headmasterly headmastership headmistress headmistressship headmold headmost headnote headpenny headphone headpiece headplate headpost headquarter headquarters headrace headrail headreach headrent headrest headright headring headroom headrope headsail headset headshake headship headsill headskin headsman headspring headstall headstand headstick headstock headstone headstream headstrong headstrongly headstrongness headwaiter headwall headward headwark headwater headway headwear headwork headworker headworking heady heaf heal healable heald healder healer healful healing healingly healless healsome healsomeness health healthcraft healthful healthfully healthfulness healthguard healthily healthiness healthless healthlessness healthsome healthsomely healthsomeness healthward healthy heap heaper heaps heapstead heapy hear hearable hearer hearing hearingless hearken hearkener hearsay hearse hearsecloth hearselike hearst heart heartache heartaching heartbeat heartbird heartblood heartbreak heartbreaker heartbreaking heartbreakingly heartbroken heartbrokenly heartbrokenness heartburn heartburning heartdeep heartease hearted heartedly heartedness hearten heartener heartening hearteningly heartfelt heartful heartfully heartfulness heartgrief hearth hearthless hearthman hearthpenny hearthrug hearthstead hearthstone hearthward hearthwarming heartikin heartily heartiness hearting heartland heartleaf heartless heartlessly heartlessness heartlet heartling heartly heartnut heartpea heartquake heartroot hearts heartscald heartsease heartseed heartsette heartsick heartsickening heartsickness heartsome heartsomely heartsomeness heartsore heartstring heartthrob heartward heartwater heartweed heartwise heartwood heartwort hearty heat heatable heatdrop heatedly heater heaterman heatful heath heathberry heathbird heathen heathendom heatheness heathenesse heathenhood heathenish heathenishly heathenishness heathenism heathenize heathenness heathenry heathenship heather heathered heatheriness heathery heathless heathlike heathwort heathy heating heatingly heatless heatlike heatmaker heatmaking heatproof heatronic heatsman heatstroke heaume heaumer heautarit heautomorphism heautophany heave heaveless heaven heavenful heavenhood heavenish heavenishly heavenize heavenless heavenlike heavenliness heavenly heavens heavenward heavenwardly heavenwardness heavenwards heaver heavies heavily heaviness heaving heavisome heavity heavy heavyback heavyhanded heavyhandedness heavyheaded heavyhearted heavyheartedness heavyweight hebamic hebdomad hebdomadal hebdomadally hebdomadary hebdomader hebdomarian hebdomary hebeanthous hebecarpous hebecladous hebegynous hebenon hebeosteotomy hebepetalous hebephrenia hebephrenic hebetate hebetation hebetative hebete hebetic hebetomy hebetude hebetudinous hebronite hecastotheism hecatomb hecatomped hecatompedon hecatonstylon hecatontarchy hecatontome hecatophyllous hech heck heckelphone heckimal heckle heckler hectare hecte hectic hectical hectically hecticly hecticness hectocotyl hectocotyle hectocotyliferous hectocotylization hectocotylize hectocotylus hectogram hectograph hectographic hectography hectoliter hectometer hector hectoringly hectorism hectorly hectorship hectostere hectowatt heddle heddlemaker heddler hedebo hedenbergite heder hederaceous hederaceously hederated hederic hederiferous hederiform hederigerent hederin hederose hedge hedgeberry hedgeborn hedgebote hedgebreaker hedgehog hedgehoggy hedgehop hedgehopper hedgeless hedgemaker hedgemaking hedger hedgerow hedgesmith hedgeweed hedgewise hedgewood hedging hedgingly hedgy hedonic hedonical hedonically hedonics hedonism hedonist hedonistic hedonistically hedonology hedriophthalmous hedrocele hedrumite hedyphane heed heeder heedful heedfully heedfulness heedily heediness heedless heedlessly heedlessness heedy heehaw heel heelball heelband heelcap heeled heeler heelgrip heelless heelmaker heelmaking heelpath heelpiece heelplate heelpost heelprint heelstrap heeltap heeltree heemraad heer heeze heezie heezy heft hefter heftily heftiness hefty hegari hegemon hegemonic hegemonical hegemonist hegemonizer hegemony hegira hegumen hegumene hei heiau heifer heiferhood heigh heighday height heighten heightener heii heimin heinous heinously heinousness heintzite heir heirdom heiress heiressdom heiresshood heirless heirloom heirship heirskip heitiki hekteus helbeh helcoid helcology helcoplasty helcosis helcotic heldentenor helder hele helenin helenioid helepole heliacal heliacally heliaean helianthaceous helianthic helianthin heliast heliastic heliazophyte helical helically heliced helices helichryse helichrysum heliciform helicin helicine helicitic helicline helicograph helicogyrate helicogyre helicoid helicoidal helicoidally helicometry helicon heliconist helicoprotein helicopter helicorubin helicotrema helictite helide heling helio heliocentric heliocentrical heliocentrically heliocentricism heliocentricity heliochrome heliochromic heliochromoscope heliochromotype heliochromy helioculture heliodon heliodor helioelectric helioengraving heliofugal heliogram heliograph heliographer heliographic heliographical heliographically heliography heliogravure helioid heliolater heliolatrous heliolatry heliolite heliolithic heliologist heliology heliometer heliometric heliometrical heliometrically heliometry heliomicrometer heliophilia heliophiliac heliophilous heliophobe heliophobia heliophobic heliophobous heliophotography heliophyllite heliophyte heliopticon helioscope helioscopic helioscopy heliosis heliostat heliostatic heliotactic heliotaxis heliotherapy heliothermometer heliotrope heliotroper heliotropian heliotropic heliotropical heliotropically heliotropine heliotropism heliotropy heliotype heliotypic heliotypically heliotypography heliotypy heliozoan heliozoic heliport helispheric helispherical helium helix helizitic hell hellandite hellanodic hellbender hellborn hellbox hellbred hellbroth hellcat helldog helleboraceous helleboraster hellebore helleborein helleboric helleborin helleborism heller helleri hellgrammite hellhag hellhole hellhound hellicat hellier hellion hellish hellishly hellishness hellkite hellness hello hellroot hellship helluo hellward hellweed helly helm helmage helmed helmet helmeted helmetlike helmetmaker helmetmaking helminth helminthagogic helminthagogue helminthiasis helminthic helminthism helminthite helminthoid helminthologic helminthological helminthologist helminthology helminthosporiose helminthosporoid helminthous helmless helmsman helmsmanship helobious heloderm helodermatoid helodermatous helodes heloe heloma helonin helosis helotage helotism helotize helotomy helotry help helpable helper helpful helpfully helpfulness helping helpingly helpless helplessly helplessness helply helpmate helpmeet helpsome helpworthy helsingkite helve helvell helvellaceous helvellic helver helvite hem hemabarometer hemachate hemachrome hemachrosis hemacite hemad hemadrometer hemadrometry hemadromograph hemadromometer hemadynameter hemadynamic hemadynamics hemadynamometer hemafibrite hemagglutinate hemagglutination hemagglutinative hemagglutinin hemagogic hemagogue hemal hemalbumen hemamoeba hemangioma hemangiomatosis hemangiosarcoma hemaphein hemapod hemapodous hemapoiesis hemapoietic hemapophyseal hemapophysial hemapophysis hemarthrosis hemase hemaspectroscope hemastatics hematachometer hematachometry hematal hematein hematemesis hematemetic hematencephalon hematherapy hematherm hemathermal hemathermous hemathidrosis hematic hematid hematidrosis hematimeter hematin hematinic hematinometer hematinometric hematinuria hematite hematitic hematobic hematobious hematobium hematoblast hematobranchiate hematocatharsis hematocathartic hematocele hematochezia hematochrome hematochyluria hematoclasia hematoclasis hematocolpus hematocrit hematocryal hematocrystallin hematocyanin hematocyst hematocystis hematocyte hematocytoblast hematocytogenesis hematocytometer hematocytotripsis hematocytozoon hematocyturia hematodynamics hematodynamometer hematodystrophy hematogen hematogenesis hematogenetic hematogenic hematogenous hematoglobulin hematography hematohidrosis hematoid hematoidin hematolin hematolite hematological hematologist hematology hematolymphangioma hematolysis hematolytic hematoma hematomancy hematometer hematometra hematometry hematomphalocele hematomyelia hematomyelitis hematonephrosis hematonic hematopathology hematopericardium hematopexis hematophobia hematophyte hematoplast hematoplastic hematopoiesis hematopoietic hematoporphyrin hematoporphyrinuria hematorrhachis hematorrhea hematosalpinx hematoscope hematoscopy hematose hematosepsis hematosin hematosis hematospectrophotometer hematospectroscope hematospermatocele hematospermia hematostibiite hematotherapy hematothermal hematothorax hematoxic hematozoal hematozoan hematozoic hematozoon hematozymosis hematozymotic hematuresis hematuria hematuric hemautogram hemautograph hemautographic hemautography heme hemellitene hemellitic hemelytral hemelytron hemen hemera hemeralope hemeralopia hemeralopic hemerologium hemerology hemerythrin hemiablepsia hemiacetal hemiachromatopsia hemiageusia hemiageustia hemialbumin hemialbumose hemialbumosuria hemialgia hemiamaurosis hemiamb hemiamblyopia hemiamyosthenia hemianacusia hemianalgesia hemianatropous hemianesthesia hemianopia hemianopic hemianopsia hemianoptic hemianosmia hemiapraxia hemiasynergia hemiataxia hemiataxy hemiathetosis hemiatrophy hemiazygous hemibasidium hemibathybian hemibenthic hemibenthonic hemibranch hemibranchiate hemic hemicanities hemicardia hemicardiac hemicarp hemicatalepsy hemicataleptic hemicellulose hemicentrum hemicephalous hemicerebrum hemichordate hemichorea hemichromatopsia hemicircle hemicircular hemiclastic hemicollin hemicrane hemicrania hemicranic hemicrany hemicrystalline hemicycle hemicyclic hemicyclium hemicylindrical hemidactylous hemidemisemiquaver hemidiapente hemidiaphoresis hemiditone hemidomatic hemidome hemidrachm hemidysergia hemidysesthesia hemidystrophy hemiekton hemielliptic hemiepilepsy hemifacial hemiform hemigastrectomy hemigeusia hemiglossal hemiglossitis hemiglyph hemignathous hemihdry hemihedral hemihedrally hemihedric hemihedrism hemihedron hemiholohedral hemihydrate hemihydrated hemihydrosis hemihypalgesia hemihyperesthesia hemihyperidrosis hemihypertonia hemihypertrophy hemihypesthesia hemihypoesthesia hemihypotonia hemikaryon hemikaryotic hemilaminectomy hemilaryngectomy hemilethargy hemiligulate hemilingual hemimellitene hemimellitic hemimelus hemimetabole hemimetabolic hemimetabolism hemimetabolous hemimetaboly hemimetamorphic hemimetamorphosis hemimetamorphous hemimorph hemimorphic hemimorphism hemimorphite hemimorphy hemin hemina hemine heminee hemineurasthenia hemiobol hemiolia hemiolic hemionus hemiope hemiopia hemiopic hemiorthotype hemiparalysis hemiparanesthesia hemiparaplegia hemiparasite hemiparasitic hemiparasitism hemiparesis hemiparesthesia hemiparetic hemipenis hemipeptone hemiphrase hemipic hemipinnate hemiplane hemiplankton hemiplegia hemiplegic hemiplegy hemipodan hemipode hemiprism hemiprismatic hemiprotein hemipter hemipteral hemipteran hemipteroid hemipterological hemipterology hemipteron hemipterous hemipyramid hemiquinonoid hemiramph hemiramphine hemisaprophyte hemisaprophytic hemiscotosis hemisect hemisection hemispasm hemispheral hemisphere hemisphered hemispherical hemispherically hemispheroid hemispheroidal hemispherule hemistater hemistich hemistichal hemistrumectomy hemisymmetrical hemisymmetry hemisystole hemiterata hemiteratic hemiteratics hemiteria hemiterpene hemitery hemithyroidectomy hemitone hemitremor hemitrichous hemitriglyph hemitropal hemitrope hemitropic hemitropism hemitropous hemitropy hemitype hemitypic hemivagotony heml hemlock hemmel hemmer hemoalkalimeter hemoblast hemochromatosis hemochrome hemochromogen hemochromometer hemochromometry hemoclasia hemoclasis hemoclastic hemocoel hemocoele hemocoelic hemocoelom hemoconcentration hemoconia hemoconiosis hemocry hemocrystallin hemoculture hemocyanin hemocyte hemocytoblast hemocytogenesis hemocytolysis hemocytometer hemocytotripsis hemocytozoon hemocyturia hemodiagnosis hemodilution hemodrometer hemodrometry hemodromograph hemodromometer hemodynameter hemodynamic hemodynamics hemodystrophy hemoerythrin hemoflagellate hemofuscin hemogastric hemogenesis hemogenetic hemogenic hemogenous hemoglobic hemoglobin hemoglobinemia hemoglobiniferous hemoglobinocholia hemoglobinometer hemoglobinophilic hemoglobinous hemoglobinuria hemoglobinuric hemoglobulin hemogram hemogregarine hemoid hemokonia hemokoniosis hemol hemoleucocyte hemoleucocytic hemologist hemology hemolymph hemolymphatic hemolysin hemolysis hemolytic hemolyze hemomanometer hemometer hemometry hemonephrosis hemopathology hemopathy hemopericardium hemoperitoneum hemopexis hemophage hemophagia hemophagocyte hemophagocytosis hemophagous hemophagy hemophile hemophilia hemophiliac hemophilic hemophobia hemophthalmia hemophthisis hemopiezometer hemoplasmodium hemoplastic hemopneumothorax hemopod hemopoiesis hemopoietic hemoproctia hemoptoe hemoptysis hemopyrrole hemorrhage hemorrhagic hemorrhagin hemorrhea hemorrhodin hemorrhoid hemorrhoidal hemorrhoidectomy hemosalpinx hemoscope hemoscopy hemosiderin hemosiderosis hemospasia hemospastic hemospermia hemosporid hemosporidian hemostasia hemostasis hemostat hemostatic hemotachometer hemotherapeutics hemotherapy hemothorax hemotoxic hemotoxin hemotrophe hemotropic hemozoon hemp hempbush hempen hemplike hempseed hempstring hempweed hempwort hempy hemstitch hemstitcher hen henad henbane henbill henbit hence henceforth henceforward henceforwards henchboy henchman henchmanship hencoop hencote hend hendecacolic hendecagon hendecagonal hendecahedron hendecane hendecasemic hendecasyllabic hendecasyllable hendecatoic hendecoic hendecyl hendiadys hendly hendness heneicosane henequen henfish henhearted henhouse henhussy henism henlike henmoldy henna hennery hennin hennish henny henogeny henotheism henotheist henotheistic henotic henpeck henpen henroost henry hent henter hentriacontane henware henwife henwise henwoodite henyard heortological heortologion heortology hep hepar heparin heparinize hepatalgia hepatatrophia hepatatrophy hepatauxe hepatectomy hepatic hepatica hepatical hepaticoduodenostomy hepaticoenterostomy hepaticogastrostomy hepaticologist hepaticology hepaticopulmonary hepaticostomy hepaticotomy hepatite hepatitis hepatization hepatize hepatocele hepatocirrhosis hepatocolic hepatocystic hepatoduodenal hepatoduodenostomy hepatodynia hepatodysentery hepatoenteric hepatoflavin hepatogastric hepatogenic hepatogenous hepatography hepatoid hepatolenticular hepatolith hepatolithiasis hepatolithic hepatological hepatologist hepatology hepatolysis hepatolytic hepatoma hepatomalacia hepatomegalia hepatomegaly hepatomelanosis hepatonephric hepatopathy hepatoperitonitis hepatopexia hepatopexy hepatophlebitis hepatophlebotomy hepatophyma hepatopneumonic hepatoportal hepatoptosia hepatoptosis hepatopulmonary hepatorenal hepatorrhagia hepatorrhaphy hepatorrhea hepatorrhexis hepatorrhoea hepatoscopy hepatostomy hepatotherapy hepatotomy hepatotoxemia hepatoumbilical hepcat hephthemimer hephthemimeral hepialid heppen hepper heptacapsular heptace heptachord heptachronous heptacolic heptacosane heptad heptadecane heptadecyl heptaglot heptagon heptagonal heptagynous heptahedral heptahedrical heptahedron heptahexahedral heptahydrate heptahydrated heptahydric heptahydroxy heptal heptameride heptamerous heptameter heptamethylene heptametrical heptanaphthene heptandrous heptane heptangular heptanoic heptanone heptapetalous heptaphyllous heptaploid heptaploidy heptapodic heptapody heptarch heptarchal heptarchic heptarchical heptarchist heptarchy heptasemic heptasepalous heptaspermous heptastich heptastrophic heptastylar heptastyle heptasulphide heptasyllabic heptatomic heptatonic heptavalent heptene hepteris heptine heptite heptitol heptoic heptorite heptose heptoxide heptyl heptylene heptylic heptyne her herald heraldess heraldic heraldical heraldically heraldist heraldize heraldress heraldry heraldship herapathite herb herbaceous herbaceously herbage herbaged herbager herbagious herbal herbalism herbalist herbalize herbane herbaria herbarial herbarian herbarism herbarist herbarium herbarize herbary herbescent herbicidal herbicide herbicolous herbiferous herbish herbist herbivore herbivority herbivorous herbless herblet herblike herbman herborist herborization herborize herborizer herbose herbosity herbous herbwife herbwoman herby hercogamous hercogamy hercynite herd herdbook herdboy herder herderite herdic herding herdship herdsman herdswoman herdwick here hereabout hereadays hereafter hereafterward hereamong hereat hereaway hereaways herebefore hereby heredipetous heredipety hereditability hereditable hereditably hereditament hereditarian hereditarianism hereditarily hereditariness hereditarist hereditary hereditation hereditative hereditism hereditist hereditivity heredity heredium heredofamilial heredolues heredoluetic heredosyphilis heredosyphilitic heredosyphilogy heredotuberculosis herefrom heregeld herein hereinabove hereinafter hereinbefore hereinto herem hereness hereniging hereof hereon hereright heresiarch heresimach heresiographer heresiography heresiologer heresiologist heresiology heresy heresyphobia heresyproof heretic heretical heretically hereticalness hereticate heretication hereticator hereticide hereticize hereto heretoch heretofore heretoforetime heretoga heretrix hereunder hereunto hereupon hereward herewith herewithal herile heriot heriotable herisson heritability heritable heritably heritage heritance heritor heritress heritrix herl herling herma hermaean hermaic hermaphrodite hermaphroditic hermaphroditical hermaphroditically hermaphroditish hermaphroditism hermaphroditize hermeneut hermeneutic hermeneutical hermeneutically hermeneutics hermeneutist hermetic hermetical hermetically hermeticism hermidin hermit hermitage hermitary hermitess hermitic hermitical hermitically hermitish hermitism hermitize hermitry hermitship hermodact hermodactyl hermoglyphic hermoglyphist hermokopid hern hernandiaceous hernanesell hernani hernant herne hernia hernial herniarin herniary herniate herniated herniation hernioenterotomy hernioid herniology herniopuncture herniorrhaphy herniotome herniotomist herniotomy hero heroarchy herodian herodionine heroess herohead herohood heroic heroical heroically heroicalness heroicity heroicly heroicness heroicomic heroicomical heroid heroify heroin heroine heroineship heroinism heroinize heroism heroistic heroization heroize herolike heromonger heron heroner heronite heronry heroogony heroologist heroology heroship herotheism herpes herpestine herpetic herpetiform herpetism herpetography herpetoid herpetologic herpetological herpetologically herpetologist herpetology herpetomonad herpetophobia herpetotomist herpetotomy herpolhode herrengrundite herring herringbone herringer hers herschelite herse hersed herself hership hersir hertz hertzian hesitance hesitancy hesitant hesitantly hesitate hesitater hesitating hesitatingly hesitatingness hesitation hesitative hesitatively hesitatory hesperid hesperidate hesperidene hesperideous hesperidin hesperidium hesperiid hesperinon hesperitin hesperornithid hesperornithoid hessite hessonite hest hestern hesternal hesthogenous hesychastic het hetaera hetaeria hetaeric hetaerism hetaerist hetaeristic hetaerocracy hetaerolite hetaery heteradenia heteradenic heterakid heterandrous heterandry heteratomic heterauxesis heteraxial heteric heterically hetericism hetericist heterism heterization heterize hetero heteroagglutinin heteroalbumose heteroauxin heteroblastic heteroblastically heteroblasty heterocarpism heterocarpous heterocaseose heterocellular heterocentric heterocephalous heterocerc heterocercal heterocercality heterocercy heterocerous heterochiral heterochlamydeous heterochromatic heterochromatin heterochromatism heterochromatization heterochromatized heterochrome heterochromia heterochromic heterochromosome heterochromous heterochromy heterochronic heterochronism heterochronistic heterochronous heterochrony heterochrosis heterochthon heterochthonous heterocline heteroclinous heteroclital heteroclite heteroclitica heteroclitous heterocoelous heterocycle heterocyclic heterocyst heterocystous heterodactyl heterodactylous heterodont heterodontism heterodontoid heterodox heterodoxal heterodoxical heterodoxly heterodoxness heterodoxy heterodromous heterodromy heterodyne heteroecious heteroeciously heteroeciousness heteroecism heteroecismal heteroecy heteroepic heteroepy heteroerotic heteroerotism heterofermentative heterofertilization heterogalactic heterogamete heterogametic heterogametism heterogamety heterogamic heterogamous heterogamy heterogangliate heterogen heterogene heterogeneal heterogenean heterogeneity heterogeneous heterogeneously heterogeneousness heterogenesis heterogenetic heterogenic heterogenicity heterogenist heterogenous heterogeny heteroglobulose heterognath heterogone heterogonism heterogonous heterogonously heterogony heterograft heterographic heterographical heterography heterogynal heterogynous heteroicous heteroimmune heteroinfection heteroinoculable heteroinoculation heterointoxication heterokaryon heterokaryosis heterokaryotic heterokinesis heterokinetic heterokontan heterolalia heterolateral heterolecithal heterolith heterolobous heterologic heterological heterologically heterologous heterology heterolysin heterolysis heterolytic heteromallous heteromastigate heteromastigote heteromeral heteromeric heteromerous heterometabole heterometabolic heterometabolism heterometabolous heterometaboly heterometric heteromorphic heteromorphism heteromorphite heteromorphosis heteromorphous heteromorphy heteromyarian heteronereid heteronereis heteronomous heteronomously heteronomy heteronuclear heteronym heteronymic heteronymous heteronymously heteronymy heteroousia heteroousian heteroousious heteropathic heteropathy heteropelmous heteropetalous heterophagous heterophasia heterophemism heterophemist heterophemistic heterophemize heterophemy heterophile heterophoria heterophoric heterophylesis heterophyletic heterophyllous heterophylly heterophyly heterophyte heterophytic heteroplasia heteroplasm heteroplastic heteroplasty heteroploid heteroploidy heteropod heteropodal heteropodous heteropolar heteropolarity heteropoly heteroproteide heteroproteose heteropter heteropterous heteroptics heteropycnosis heteroscope heteroscopy heterosexual heterosexuality heteroside heterosis heterosomatous heterosome heterosomous heterosporic heterosporous heterospory heterostatic heterostemonous heterostracan heterostrophic heterostrophous heterostrophy heterostyled heterostylism heterostylous heterostyly heterosuggestion heterosyllabic heterotactic heterotactous heterotaxia heterotaxic heterotaxis heterotaxy heterotelic heterothallic heterothallism heterothermal heterothermic heterotic heterotopia heterotopic heterotopism heterotopous heterotopy heterotransplant heterotransplantation heterotrich heterotrichosis heterotrichous heterotropal heterotroph heterotrophic heterotrophy heterotropia heterotropic heterotropous heterotype heterotypic heterotypical heteroxanthine heteroxenous heterozetesis heterozygosis heterozygosity heterozygote heterozygotic heterozygous heterozygousness hething hetman hetmanate hetmanship hetter hetterly heuau heugh heulandite heumite heuretic heuristic heuristically hevi hew hewable hewel hewer hewettite hewhall hewn hewt hex hexa hexabasic hexabiose hexabromide hexacanth hexacanthous hexacapsular hexacarbon hexace hexachloride hexachlorocyclohexane hexachloroethane hexachord hexachronous hexacid hexacolic hexacorallan hexacosane hexacosihedroid hexact hexactinal hexactine hexactinellid hexactinellidan hexactinelline hexactinian hexacyclic hexad hexadactyle hexadactylic hexadactylism hexadactylous hexadactyly hexadecahedroid hexadecane hexadecanoic hexadecene hexadecyl hexadic hexadiene hexadiyne hexafoil hexaglot hexagon hexagonal hexagonally hexagonial hexagonical hexagonous hexagram hexagrammoid hexagyn hexagynian hexagynous hexahedral hexahedron hexahydrate hexahydrated hexahydric hexahydride hexahydrite hexahydrobenzene hexahydroxy hexakisoctahedron hexakistetrahedron hexameral hexameric hexamerism hexameron hexamerous hexameter hexamethylenamine hexamethylene hexamethylenetetramine hexametral hexametric hexametrical hexametrist hexametrize hexametrographer hexamitiasis hexammine hexammino hexanaphthene hexandric hexandrous hexandry hexane hexanedione hexangular hexangularly hexanitrate hexanitrodiphenylamine hexapartite hexaped hexapetaloid hexapetaloideous hexapetalous hexaphyllous hexapla hexaplar hexaplarian hexaplaric hexaploid hexaploidy hexapod hexapodal hexapodan hexapodous hexapody hexapterous hexaradial hexarch hexarchy hexaseme hexasemic hexasepalous hexaspermous hexastemonous hexaster hexastich hexastichic hexastichon hexastichous hexastichy hexastigm hexastylar hexastyle hexastylos hexasulphide hexasyllabic hexatetrahedron hexathlon hexatomic hexatriacontane hexatriose hexavalent hexecontane hexenbesen hexene hexer hexerei hexeris hexestrol hexicological hexicology hexine hexiological hexiology hexis hexitol hexoctahedral hexoctahedron hexode hexoestrol hexogen hexoic hexokinase hexone hexonic hexosamine hexosaminic hexosan hexose hexosediphosphoric hexosemonophosphoric hexosephosphatase hexosephosphoric hexoylene hexpartite hexyl hexylene hexylic hexylresorcinol hexyne hey heyday hi hia hiant hiatal hiate hiation hiatus hibbin hibernacle hibernacular hibernaculum hibernal hibernate hibernation hibernator hic hicatee hiccup hick hickey hickory hickwall hidable hidage hidalgism hidalgo hidalgoism hidated hidation hidden hiddenite hiddenly hiddenmost hiddenness hide hideaway hidebind hidebound hideboundness hided hideland hideless hideling hideosity hideous hideously hideousness hider hidling hidlings hidradenitis hidrocystoma hidromancy hidropoiesis hidrosis hidrotic hie hieder hielaman hield hielmite hiemal hiemation hieracosphinx hierapicra hierarch hierarchal hierarchic hierarchical hierarchically hierarchism hierarchist hierarchize hierarchy hieratic hieratical hieratically hieraticism hieratite hierocracy hierocratic hierocratical hierodule hierodulic hierogamy hieroglyph hieroglypher hieroglyphic hieroglyphical hieroglyphically hieroglyphist hieroglyphize hieroglyphology hieroglyphy hierogram hierogrammat hierogrammate hierogrammateus hierogrammatic hierogrammatical hierogrammatist hierograph hierographer hierographic hierographical hierography hierolatry hierologic hierological hierologist hierology hieromachy hieromancy hieromnemon hieromonach hieron hieropathic hierophancy hierophant hierophantes hierophantic hierophantically hierophanticly hieros hieroscopy hierurgical hierurgy hifalutin higdon higgaion higginsite higgle higglehaggle higgler higglery high highball highbelia highbinder highborn highboy highbred higher highermost highest highfalutin highfaluting highfalutinism highflying highhanded highhandedly highhandedness highhearted highheartedly highheartedness highish highjack highjacker highland highlander highlandish highlight highliving highly highman highmoor highmost highness highroad hight hightoby hightop highway highwayman higuero hijack hike hiker hilarious hilariously hilariousness hilarity hilasmic hilch hilding hiliferous hill hillberry hillbilly hillculture hillebrandite hiller hillet hilliness hillman hillock hillocked hillocky hillsale hillsalesman hillside hillsman hilltop hilltrot hillward hillwoman hilly hilsa hilt hiltless hilum hilus him himation himp himself himward himwards hin hinau hinch hind hindberry hindbrain hindcast hinddeck hinder hinderance hinderer hinderest hinderful hinderfully hinderingly hinderlands hinderlings hinderlins hinderly hinderment hindermost hindersome hindhand hindhead hindmost hindquarter hindrance hindsaddle hindsight hindward hing hinge hingecorner hingeflower hingeless hingelike hinger hingeways hingle hinney hinnible hinny hinoid hinoideous hinoki hinsdalite hint hintedly hinter hinterland hintingly hintproof hintzeite hiodont hiortdahlite hip hipbone hipe hiper hiphalt hipless hipmold hippalectryon hipparch hipped hippen hippian hippiater hippiatric hippiatrical hippiatrics hippiatrist hippiatry hippic hipping hippish hipple hippo hippoboscid hippocamp hippocampal hippocampi hippocampine hippocampus hippocastanaceous hippocaust hippocentaur hippocentauric hippocerf hippocoprosterol hippocras hippocrateaceous hippocrepian hippocrepiform hippodamous hippodrome hippodromic hippodromist hippogastronomy hippogriff hippogriffin hippoid hippolite hippolith hippological hippologist hippology hippomachy hippomancy hippomanes hippomelanin hippometer hippometric hippometry hipponosological hipponosology hippopathological hippopathology hippophagi hippophagism hippophagist hippophagistical hippophagous hippophagy hippophile hippophobia hippopod hippopotami hippopotamian hippopotamic hippopotamine hippopotamoid hippopotamus hippotigrine hippotomical hippotomist hippotomy hippotragine hippurate hippuric hippurid hippurite hippuritic hippuritoid hippus hippy hipshot hipwort hirable hiragana hircarra hircine hircinous hircocerf hircocervus hircosity hire hired hireless hireling hireman hirer hirmologion hirmos hiro hirondelle hirple hirrient hirse hirsel hirsle hirsute hirsuteness hirsuties hirsutism hirsutulous hirtellous hirudine hirudinean hirudiniculture hirudinize hirudinoid hirundine hirundinous his hish hisingerite hisn hispanidad hispid hispidity hispidulate hispidulous hiss hisser hissing hissingly hissproof hist histaminase histamine histaminic histidine histie histiocyte histiocytic histioid histiology histoblast histochemic histochemical histochemistry histoclastic histocyte histodiagnosis histodialysis histodialytic histogen histogenesis histogenetic histogenetically histogenic histogenous histogeny histogram histographer histographic histographical histography histoid histologic histological histologically histologist histology histolysis histolytic histometabasis histomorphological histomorphologically histomorphology histon histonal histone histonomy histopathologic histopathological histopathologist histopathology histophyly histophysiological histophysiology histoplasmin histoplasmosis historial historian historiated historic historical historically historicalness historician historicism historicity historicize historicocabbalistical historicocritical historicocultural historicodogmatic historicogeographical historicophilosophica historicophysical historicopolitical historicoprophetic historicoreligious historics historicus historied historier historiette historify historiograph historiographer historiographership historiographic historiographical historiographically historiography historiological historiology historiometric historiometry historionomer historious historism historize history histotherapist histotherapy histotome histotomy histotrophic histotrophy histotropic histozoic histozyme histrio histrion histrionic histrionical histrionically histrionicism histrionism hit hitch hitcher hitchhike hitchhiker hitchily hitchiness hitchproof hitchy hithe hither hithermost hitherto hitherward hitless hittable hitter hive hiveless hiver hives hiveward hizz ho hoar hoard hoarder hoarding hoardward hoarfrost hoarhead hoarheaded hoarhound hoarily hoariness hoarish hoarness hoarse hoarsely hoarsen hoarseness hoarstone hoarwort hoary hoaryheaded hoast hoastman hoatzin hoax hoaxee hoaxer hoaxproof hob hobber hobbet hobbil hobble hobblebush hobbledehoy hobbledehoydom hobbledehoyhood hobbledehoyish hobbledehoyishness hobbledehoyism hobbledygee hobbler hobbling hobblingly hobbly hobby hobbyhorse hobbyhorsical hobbyhorsically hobbyism hobbyist hobbyless hobgoblin hoblike hobnail hobnailed hobnailer hobnob hobo hoboism hobthrush hocco hock hockelty hocker hocket hockey hockshin hocky hocus hod hodden hodder hoddle hoddy hodening hodful hodgepodge hodgkinsonite hodiernal hodman hodmandod hodograph hodometer hodometrical hoe hoecake hoedown hoeful hoer hoernesite hog hoga hogan hogback hogbush hogfish hogframe hogged hogger hoggerel hoggery hogget hoggie hoggin hoggish hoggishly hoggishness hoggism hoggy hogherd hoghide hoghood hoglike hogling hogmace hogmanay hognose hognut hogpen hogreeve hogrophyte hogshead hogship hogshouther hogskin hogsty hogward hogwash hogweed hogwort hogyard hoi hoick hoin hoise hoist hoistaway hoister hoisting hoistman hoistway hoit hoju hokey hokeypokey hokum holagogue holarctic holard holarthritic holarthritis holaspidean holcad holcodont hold holdable holdall holdback holden holdenite holder holdership holdfast holdfastness holding holdingly holdout holdover holdsman holdup hole holeable holectypoid holeless holeman holeproof holer holethnic holethnos holewort holey holia holiday holidayer holidayism holidaymaker holidaymaking holily holiness holing holinight holism holistic holistically holl holla hollaite hollandaise hollandite holler hollin holliper hollo hollock hollong hollow hollower hollowfaced hollowfoot hollowhearted hollowheartedness hollowly hollowness holluschick holly hollyhock holm holmberry holmgang holmia holmic holmium holmos holobaptist holobenthic holoblastic holoblastically holobranch holocaine holocarpic holocarpous holocaust holocaustal holocaustic holocentrid holocentroid holocephalan holocephalian holocephalous holochoanitic holochoanoid holochoanoidal holochordate holochroal holoclastic holocrine holocryptic holocrystalline holodactylic holodedron hologamous hologamy hologastrula hologastrular holognathous hologonidium holograph holographic holographical holohedral holohedric holohedrism holohemihedral holohyaline holomastigote holometabole holometabolian holometabolic holometabolism holometabolous holometaboly holometer holomorph holomorphic holomorphism holomorphosis holomorphy holomyarian holoparasite holoparasitic holophane holophotal holophote holophotometer holophrase holophrasis holophrasm holophrastic holophyte holophytic holoplankton holoplanktonic holoplexia holopneustic holoproteide holoptic holoptychian holoptychiid holoquinoid holoquinoidal holoquinonic holoquinonoid holorhinal holosaprophyte holosaprophytic holosericeous holoside holosiderite holosiphonate holosomatous holospondaic holostean holosteous holosteric holostomate holostomatous holostome holostomous holostylic holosymmetric holosymmetrical holosymmetry holosystematic holosystolic holothecal holothoracic holothurian holothurioid holotonia holotonic holotony holotrich holotrichal holotrichous holotype holour holozoic holster holstered holt holy holyday holyokeite holystone holytide homage homageable homager homalogonatous homalographic homaloid homaloidal homalosternal homarine homaroid homatomic homaxial homaxonial homaxonic home homebody homeborn homebound homebred homecomer homecraft homecroft homecrofter homecrofting homefarer homefelt homegoer homekeeper homekeeping homeland homelander homeless homelessly homelessness homelet homelike homelikeness homelily homeliness homeling homely homelyn homemade homemaker homemaking homeoblastic homeochromatic homeochromatism homeochronous homeocrystalline homeogenic homeogenous homeoid homeoidal homeoidality homeokinesis homeokinetic homeomerous homeomorph homeomorphic homeomorphism homeomorphous homeomorphy homeopath homeopathic homeopathically homeopathician homeopathicity homeopathist homeopathy homeophony homeoplasia homeoplastic homeoplasy homeopolar homeosis homeostasis homeostatic homeotic homeotransplant homeotransplantation homeotype homeotypic homeotypical homeowner homeozoic homer homeseeker homesick homesickly homesickness homesite homesome homespun homestall homestead homesteader homester homestretch homeward homewardly homework homeworker homewort homey homeyness homicidal homicidally homicide homicidious homiculture homilete homiletic homiletical homiletically homiletics homiliarium homiliary homilist homilite homilize homily hominal hominess hominid hominiform hominify hominine hominisection hominivorous hominoid hominy homish homishness homo homoanisaldehyde homoanisic homoarecoline homobaric homoblastic homoblasty homocarpous homocategoric homocentric homocentrical homocentrically homocerc homocercal homocercality homocercy homocerebrin homochiral homochlamydeous homochromatic homochromatism homochrome homochromic homochromosome homochromous homochromy homochronous homoclinal homocline homocoelous homocreosol homocyclic homodermic homodermy homodont homodontism homodox homodoxian homodromal homodrome homodromous homodromy homodynamic homodynamous homodynamy homodyne homoecious homoeoarchy homoeoblastic homoeochromatic homoeochronous homoeocrystalline homoeogenic homoeogenous homoeography homoeokinesis homoeomerae homoeomeria homoeomerian homoeomerianism homoeomeric homoeomerical homoeomerous homoeomery homoeomorph homoeomorphic homoeomorphism homoeomorphous homoeomorphy homoeopath homoeopathic homoeopathically homoeopathician homoeopathicity homoeopathist homoeopathy homoeophony homoeophyllous homoeoplasia homoeoplastic homoeoplasy homoeopolar homoeosis homoeotel homoeoteleutic homoeoteleuton homoeotic homoeotopy homoeotype homoeotypic homoeotypical homoeozoic homoerotic homoerotism homofermentative homogametic homogamic homogamous homogamy homogangliate homogen homogenate homogene homogeneal homogenealness homogeneate homogeneity homogeneization homogeneize homogeneous homogeneously homogeneousness homogenesis homogenetic homogenetical homogenic homogenization homogenize homogenizer homogenous homogentisic homogeny homoglot homogone homogonous homogonously homogony homograft homograph homographic homography homohedral homoiotherm homoiothermal homoiothermic homoiothermism homoiothermous homoiousia homoiousian homoiousious homolateral homolecithal homolegalis homologate homologation homologic homological homologically homologist homologize homologizer homologon homologoumena homologous homolographic homolography homologue homology homolosine homolysin homolysis homomallous homomeral homomerous homometrical homometrically homomorph homomorphic homomorphism homomorphosis homomorphous homomorphy homonomous homonomy homonuclear homonym homonymic homonymous homonymously homonymy homoousia homoousious homopathy homoperiodic homopetalous homophene homophenous homophone homophonic homophonous homophony homophthalic homophylic homophyllous homophyly homopiperonyl homoplasis homoplasmic homoplasmy homoplast homoplastic homoplasy homopolar homopolarity homopolic homopter homopteran homopteron homopterous homorganic homoseismal homosexual homosexualism homosexualist homosexuality homosporous homospory homostyled homostylic homostylism homostylous homostyly homosystemic homotactic homotatic homotaxeous homotaxia homotaxial homotaxially homotaxic homotaxis homotaxy homothallic homothallism homothetic homothety homotonic homotonous homotonously homotony homotopic homotransplant homotransplantation homotropal homotropous homotypal homotype homotypic homotypical homotypy homovanillic homovanillin homoveratric homoveratrole homozygosis homozygosity homozygote homozygous homozygousness homrai homuncle homuncular homunculus homy honda hondo hone honest honestly honestness honestone honesty honewort honey honeybee honeyberry honeybind honeyblob honeybloom honeycomb honeycombed honeydew honeydewed honeydrop honeyed honeyedly honeyedness honeyfall honeyflower honeyfogle honeyful honeyhearted honeyless honeylike honeylipped honeymoon honeymooner honeymoonlight honeymoonshine honeymoonstruck honeymoony honeymouthed honeypod honeypot honeystone honeysuck honeysucker honeysuckle honeysuckled honeysweet honeyware honeywood honeywort hong honied honily honk honker honor honorability honorable honorableness honorableship honorably honorance honoraria honorarily honorarium honorary honoree honorer honoress honorific honorifically honorless honorous honorsman honorworthy hontish hontous hooch hoochinoo hood hoodcap hooded hoodedness hoodful hoodie hoodless hoodlike hoodlum hoodlumish hoodlumism hoodlumize hoodman hoodmold hoodoo hoodsheaf hoodshy hoodshyness hoodwink hoodwinkable hoodwinker hoodwise hoodwort hooey hoof hoofbeat hoofbound hoofed hoofer hoofiness hoofish hoofless hooflet hooflike hoofmark hoofprint hoofrot hoofs hoofworm hoofy hook hookah hookaroon hooked hookedness hookedwise hooker hookerman hookers hookheal hookish hookless hooklet hooklike hookmaker hookmaking hookman hooknose hooksmith hooktip hookum hookup hookweed hookwise hookworm hookwormer hookwormy hooky hooligan hooliganism hooliganize hoolock hooly hoon hoonoomaun hoop hooped hooper hooping hoopla hoople hoopless hooplike hoopmaker hoopman hoopoe hoopstick hoopwood hoose hoosegow hoosh hoot hootay hooter hootingly hoove hooven hoovey hop hopbine hopbush hopcrease hope hoped hopeful hopefully hopefulness hopeite hopeless hopelessly hopelessness hoper hopi hopingly hoplite hoplitic hoplitodromos hoplology hoplomachic hoplomachist hoplomachos hoplomachy hoplonemertean hoplonemertine hopoff hopped hopper hopperburn hopperdozer hopperette hoppergrass hopperings hopperman hoppers hoppestere hoppet hoppingly hoppity hopple hoppy hopscotch hopscotcher hoptoad hopvine hopyard hora horal horary horbachite hordarian hordary horde hordeaceous hordeiform hordein hordenine horehound horismology horizometer horizon horizonless horizontal horizontalism horizontality horizontalization horizontalize horizontally horizontalness horizontic horizontical horizontically horizonward horme hormic hormigo hormion hormist hormogon hormogonium hormogonous hormonal hormone hormonic hormonize hormonogenesis hormonogenic hormonology hormonopoiesis hormonopoietic hormos horn hornbeam hornbill hornblende hornblendic hornblendite hornblendophyre hornblower hornbook horned hornedness horner hornerah hornet hornety hornfair hornfels hornfish hornful horngeld hornify hornily horniness horning hornish hornist hornito hornless hornlessness hornlet hornlike hornotine hornpipe hornplant hornsman hornstay hornstone hornswoggle horntail hornthumb horntip hornwood hornwork hornworm hornwort horny hornyhanded hornyhead horograph horographer horography horokaka horologe horologer horologic horological horologically horologiography horologist horologium horologue horology horometrical horometry horopito horopter horopteric horoptery horoscopal horoscope horoscoper horoscopic horoscopical horoscopist horoscopy horrendous horrendously horrent horrescent horreum horribility horrible horribleness horribly horrid horridity horridly horridness horrific horrifically horrification horrify horripilant horripilate horripilation horrisonant horror horrorful horrorish horrorist horrorize horrormonger horrormongering horrorous horrorsome horse horseback horsebacker horseboy horsebreaker horsecar horsecloth horsecraft horsedom horsefair horsefettler horsefight horsefish horseflesh horsefly horsefoot horsegate horsehair horsehaired horsehead horseherd horsehide horsehood horsehoof horsejockey horsekeeper horselaugh horselaugher horselaughter horseleech horseless horselike horseload horseman horsemanship horsemastership horsemint horsemonger horseplay horseplayful horsepond horsepower horsepox horser horseshoe horseshoer horsetail horsetongue horsetree horseway horseweed horsewhip horsewhipper horsewoman horsewomanship horsewood horsfordite horsify horsily horsiness horsing horst horsy horsyism hortation hortative hortatively hortator hortatorily hortatory hortensial hortensian horticultural horticulturally horticulture horticulturist hortite hortonolite hortulan hory hosanna hose hosed hosel hoseless hoselike hoseman hosier hosiery hosiomartyr hospice hospitable hospitableness hospitably hospitage hospital hospitalary hospitaler hospitalism hospitality hospitalization hospitalize hospitant hospitate hospitation hospitator hospitious hospitium hospitize hospodar hospodariat hospodariate host hostage hostager hostageship hostel hosteler hostelry hoster hostess hostie hostile hostilely hostileness hostility hostilize hosting hostler hostlership hostlerwife hostless hostly hostry hostship hot hotbed hotblood hotbox hotbrained hotch hotchpot hotchpotch hotchpotchly hotel hoteldom hotelhood hotelier hotelization hotelize hotelkeeper hotelless hotelward hotfoot hothead hotheaded hotheadedly hotheadedness hothearted hotheartedly hotheartedness hothouse hoti hotly hotmouthed hotness hotspur hotspurred hotter hottery hottish houbara hough houghband hougher houghite houghmagandy hounce hound hounder houndfish hounding houndish houndlike houndman houndsbane houndsberry houndshark houndy houppelande hour hourful hourglass houri hourless hourly housage housal house houseball houseboat houseboating housebote housebound houseboy housebreak housebreaker housebreaking housebroke housebroken housebug housebuilder housebuilding housecarl housecoat housecraft housefast housefather housefly houseful housefurnishings household householder householdership householding householdry housekeep housekeeper housekeeperlike housekeeperly housekeeping housel houseleek houseless houselessness houselet houseline houseling housemaid housemaidenly housemaiding housemaidy houseman housemaster housemastership housemate housemating houseminder housemistress housemother housemotherly houseowner houser houseridden houseroom housesmith housetop houseward housewares housewarm housewarmer housewarming housewear housewife housewifeliness housewifely housewifery housewifeship housewifish housewive housework housewright housing housty housy houtou houvari hove hovedance hovel hoveler hoven hover hoverer hovering hoveringly hoverly how howadji howardite howbeit howdah howder howdie howdy howe howel however howff howish howitzer howk howkit howl howler howlet howling howlingly howlite howso howsoever howsomever hox hoy hoyden hoydenhood hoydenish hoydenism hoyle hoyman huaca huaco huajillo huamuchil huantajayite huaracho huarizo hub hubb hubba hubber hubble hubbly hubbub hubbuboo hubby hubmaker hubmaking hubnerite hubristic hubshi huccatoon huchen hucho huck huckaback huckle huckleback hucklebacked huckleberry hucklebone huckmuck huckster hucksterage hucksterer hucksteress hucksterize huckstery hud huddle huddledom huddlement huddler huddling huddlingly huddock huddroun huddup hudsonite hue hued hueful hueless huelessness huer huff huffier huffily huffiness huffingly huffish huffishly huffishness huffle huffler huffy hug huge hugelite hugely hugeness hugeous hugeously hugeousness huggable hugger huggermugger huggermuggery hugging huggingly huggle hugsome huh huia huipil huisache huiscoyol huitain huke hula huldee hulk hulkage hulking hulky hull hullabaloo huller hullock hulloo hulotheism hulsite hulster hulu hulver hulverhead hulverheaded hum human humane humanely humaneness humanhood humanics humanification humaniform humaniformian humanify humanish humanism humanist humanistic humanistical humanistically humanitarian humanitarianism humanitarianist humanitarianize humanitary humanitian humanity humanitymonger humanization humanize humanizer humankind humanlike humanly humanness humanoid humate humble humblebee humblehearted humblemouthed humbleness humbler humblie humblingly humbly humbo humboldtilite humboldtine humboldtite humbug humbugability humbugable humbugger humbuggery humbuggism humbuzz humdinger humdrum humdrumminess humdrummish humdrummishness humdudgeon humect humectant humectate humectation humective humeral humeri humeroabdominal humerocubital humerodigital humerodorsal humerometacarpal humeroradial humeroscapular humeroulnar humerus humet humetty humhum humic humicubation humid humidate humidification humidifier humidify humidistat humidity humidityproof humidly humidness humidor humific humification humifuse humify humiliant humiliate humiliating humiliatingly humiliation humiliative humiliator humiliatory humilific humilitude humility humin humistratous humite humlie hummel hummeler hummer hummie humming hummingbird hummock hummocky humor humoral humoralism humoralist humoralistic humoresque humoresquely humorful humorific humorism humorist humoristic humoristical humorize humorless humorlessness humorology humorous humorously humorousness humorproof humorsome humorsomely humorsomeness humourful humous hump humpback humpbacked humped humph humpiness humpless humpty humpy humstrum humulene humulone humus humuslike hunch hunchback hunchbacked hunchet hunchy hundi hundred hundredal hundredary hundreder hundredfold hundredman hundredpenny hundredth hundredweight hundredwork hung hungarite hunger hungerer hungeringly hungerless hungerly hungerproof hungerweed hungrify hungrily hungriness hungry hunh hunk hunker hunkerous hunkerousness hunkers hunkies hunks hunky hunt huntable huntedly hunterlike huntilite hunting huntress huntsman huntsmanship huntswoman hup hupaithric hura hurcheon hurdies hurdis hurdle hurdleman hurdler hurdlewise hurds hure hureaulite hureek hurgila hurkle hurl hurlbarrow hurled hurler hurley hurleyhouse hurling hurlock hurly huron hurr hurrah hurricane hurricanize hurricano hurried hurriedly hurriedness hurrier hurrisome hurrock hurroo hurroosh hurry hurryingly hurryproof hursinghar hurst hurt hurtable hurted hurter hurtful hurtfully hurtfulness hurting hurtingest hurtle hurtleberry hurtless hurtlessly hurtlessness hurtlingly hurtsome hurty husband husbandable husbandage husbander husbandfield husbandhood husbandland husbandless husbandlike husbandliness husbandly husbandman husbandress husbandry husbandship huse hush hushable hushaby hushcloth hushedly husheen hushel husher hushful hushfully hushing hushingly hushion husho husk huskanaw husked huskened husker huskershredder huskily huskiness husking huskroot huskwort husky huso huspil huss hussar hussy hussydom hussyness husting hustle hustlecap hustlement hustler hut hutch hutcher hutchet hutchinsonite huthold hutholder hutia hutkeeper hutlet hutment huttoning huttonweed hutukhtu huvelyk huzoor huzz huzza huzzard hyacinth hyacinthian hyacinthine hyaena hyaenodont hyaenodontoid hyalescence hyalescent hyaline hyalinization hyalinize hyalinocrystalline hyalinosis hyalite hyalitis hyaloandesite hyalobasalt hyalocrystalline hyalodacite hyalogen hyalograph hyalographer hyalography hyaloid hyaloiditis hyaloliparite hyalolith hyalomelan hyalomucoid hyalophagia hyalophane hyalophyre hyalopilitic hyaloplasm hyaloplasma hyaloplasmic hyalopsite hyalopterous hyalosiderite hyalotekite hyalotype hyaluronic hyaluronidase hybodont hybosis hybrid hybridal hybridation hybridism hybridist hybridity hybridizable hybridization hybridize hybridizer hybridous hydantoate hydantoic hydantoin hydathode hydatid hydatidiform hydatidinous hydatidocele hydatiform hydatigenous hydatogenesis hydatogenic hydatogenous hydatoid hydatomorphic hydatomorphism hydatopneumatic hydatopneumatolytic hydatopyrogenic hydatoscopy hydnaceous hydnocarpate hydnocarpic hydnoid hydnoraceous hydracetin hydrachnid hydracid hydracoral hydracrylate hydracrylic hydractinian hydradephagan hydradephagous hydragogue hydragogy hydramine hydramnion hydramnios hydrangeaceous hydrant hydranth hydrarch hydrargillite hydrargyrate hydrargyria hydrargyriasis hydrargyric hydrargyrism hydrargyrosis hydrargyrum hydrarthrosis hydrarthrus hydrastine hydrate hydrated hydration hydrator hydratropic hydraucone hydraulic hydraulically hydraulician hydraulicity hydraulicked hydraulicon hydraulics hydraulist hydraulus hydrazide hydrazidine hydrazimethylene hydrazine hydrazino hydrazo hydrazoate hydrazobenzene hydrazoic hydrazone hydrazyl hydremia hydremic hydrencephalocele hydrencephaloid hydrencephalus hydria hydriatric hydriatrist hydriatry hydric hydrically hydride hydriform hydrindene hydriodate hydriodic hydriodide hydriotaphia hydro hydroa hydroadipsia hydroaeric hydroalcoholic hydroaromatic hydroatmospheric hydroaviation hydrobarometer hydrobenzoin hydrobilirubin hydrobiological hydrobiologist hydrobiology hydrobiosis hydrobiplane hydrobomb hydroboracite hydroborofluoric hydrobranchiate hydrobromate hydrobromic hydrobromide hydrocarbide hydrocarbon hydrocarbonaceous hydrocarbonate hydrocarbonic hydrocarbonous hydrocarbostyril hydrocardia hydrocaryaceous hydrocatalysis hydrocauline hydrocaulus hydrocele hydrocellulose hydrocephalic hydrocephalocele hydrocephaloid hydrocephalous hydrocephalus hydrocephaly hydroceramic hydrocerussite hydrocharidaceous hydrocharitaceous hydrochemical hydrochemistry hydrochlorate hydrochlorauric hydrochloric hydrochloride hydrochlorplatinic hydrochlorplatinous hydrocholecystis hydrocinchonine hydrocinnamic hydrocirsocele hydrocladium hydroclastic hydroclimate hydrocobalticyanic hydrocoele hydrocollidine hydroconion hydrocoralline hydrocorisan hydrocotarnine hydrocoumaric hydrocupreine hydrocyanate hydrocyanic hydrocyanide hydrocycle hydrocyclic hydrocyclist hydrocyst hydrocystic hydrodrome hydrodromican hydrodynamic hydrodynamical hydrodynamics hydrodynamometer hydroeconomics hydroelectric hydroelectricity hydroelectrization hydroergotinine hydroextract hydroextractor hydroferricyanic hydroferrocyanate hydroferrocyanic hydrofluate hydrofluoboric hydrofluoric hydrofluorid hydrofluoride hydrofluosilicate hydrofluosilicic hydrofluozirconic hydrofoil hydroforming hydrofranklinite hydrofuge hydrogalvanic hydrogel hydrogen hydrogenase hydrogenate hydrogenation hydrogenator hydrogenic hydrogenide hydrogenium hydrogenization hydrogenize hydrogenolysis hydrogenous hydrogeological hydrogeology hydroglider hydrognosy hydrogode hydrograph hydrographer hydrographic hydrographical hydrographically hydrography hydrogymnastics hydrohalide hydrohematite hydrohemothorax hydroid hydroidean hydroiodic hydrokinetic hydrokinetical hydrokinetics hydrol hydrolase hydrolatry hydrolize hydrologic hydrological hydrologically hydrologist hydrology hydrolysis hydrolyst hydrolyte hydrolytic hydrolyzable hydrolyzate hydrolyzation hydrolyze hydromagnesite hydromancer hydromancy hydromania hydromaniac hydromantic hydromantical hydromantically hydrome hydromechanical hydromechanics hydromedusa hydromedusan hydromedusoid hydromel hydromeningitis hydromeningocele hydrometallurgical hydrometallurgically hydrometallurgy hydrometamorphism hydrometeor hydrometeorological hydrometeorology hydrometer hydrometra hydrometric hydrometrical hydrometrid hydrometry hydromica hydromicaceous hydromonoplane hydromorph hydromorphic hydromorphous hydromorphy hydromotor hydromyelia hydromyelocele hydromyoma hydrone hydronegative hydronephelite hydronephrosis hydronephrotic hydronitric hydronitroprussic hydronitrous hydronium hydroparacoumaric hydropath hydropathic hydropathical hydropathist hydropathy hydropericarditis hydropericardium hydroperiod hydroperitoneum hydroperitonitis hydroperoxide hydrophane hydrophanous hydrophid hydrophil hydrophile hydrophilic hydrophilid hydrophilism hydrophilite hydrophiloid hydrophilous hydrophily hydrophobe hydrophobia hydrophobic hydrophobical hydrophobist hydrophobophobia hydrophobous hydrophoby hydrophoid hydrophone hydrophoran hydrophore hydrophoria hydrophorous hydrophthalmia hydrophthalmos hydrophthalmus hydrophylacium hydrophyll hydrophyllaceous hydrophylliaceous hydrophyllium hydrophysometra hydrophyte hydrophytic hydrophytism hydrophyton hydrophytous hydropic hydropical hydropically hydropigenous hydroplane hydroplanula hydroplatinocyanic hydroplutonic hydropneumatic hydropneumatosis hydropneumopericardium hydropneumothorax hydropolyp hydroponic hydroponicist hydroponics hydroponist hydropositive hydropot hydropropulsion hydrops hydropsy hydroptic hydropult hydropultic hydroquinine hydroquinol hydroquinoline hydroquinone hydrorachis hydrorhiza hydrorhizal hydrorrhachis hydrorrhachitis hydrorrhea hydrorrhoea hydrorubber hydrosalpinx hydrosalt hydrosarcocele hydroscope hydroscopic hydroscopical hydroscopicity hydroscopist hydroselenic hydroselenide hydroselenuret hydroseparation hydrosilicate hydrosilicon hydrosol hydrosomal hydrosomatous hydrosome hydrosorbic hydrosphere hydrospire hydrospiric hydrostat hydrostatic hydrostatical hydrostatically hydrostatician hydrostatics hydrostome hydrosulphate hydrosulphide hydrosulphite hydrosulphocyanic hydrosulphurated hydrosulphuret hydrosulphureted hydrosulphuric hydrosulphurous hydrosulphuryl hydrotachymeter hydrotactic hydrotalcite hydrotasimeter hydrotaxis hydrotechnic hydrotechnical hydrotechnologist hydrotechny hydroterpene hydrotheca hydrothecal hydrotherapeutic hydrotherapeutics hydrotherapy hydrothermal hydrothoracic hydrothorax hydrotic hydrotical hydrotimeter hydrotimetric hydrotimetry hydrotomy hydrotropic hydrotropism hydroturbine hydrotype hydrous hydrovane hydroxamic hydroxamino hydroxide hydroximic hydroxy hydroxyacetic hydroxyanthraquinone hydroxybutyricacid hydroxyketone hydroxyl hydroxylactone hydroxylamine hydroxylate hydroxylation hydroxylic hydroxylization hydroxylize hydrozincite hydrozoal hydrozoan hydrozoic hydrozoon hydrula hydurilate hydurilic hyena hyenadog hyenanchin hyenic hyeniform hyenine hyenoid hyetal hyetograph hyetographic hyetographical hyetographically hyetography hyetological hyetology hyetometer hyetometrograph hygeiolatry hygeist hygeistic hygeology hygiantic hygiantics hygiastic hygiastics hygieist hygienal hygiene hygienic hygienical hygienically hygienics hygienist hygienization hygienize hygiologist hygiology hygric hygrine hygroblepharic hygrodeik hygroexpansivity hygrograph hygrology hygroma hygromatous hygrometer hygrometric hygrometrical hygrometrically hygrometry hygrophaneity hygrophanous hygrophilous hygrophobia hygrophthalmic hygrophyte hygrophytic hygroplasm hygroplasma hygroscope hygroscopic hygroscopical hygroscopically hygroscopicity hygroscopy hygrostat hygrostatics hygrostomia hygrothermal hygrothermograph hying hyke hylactic hylactism hylarchic hylarchical hyle hyleg hylegiacal hylic hylicism hylicist hylism hylist hylobatian hylobatic hylobatine hylogenesis hylogeny hyloid hylology hylomorphic hylomorphical hylomorphism hylomorphist hylomorphous hylopathism hylopathist hylopathy hylophagous hylotheism hylotheist hylotheistic hylotheistical hylotomous hylozoic hylozoism hylozoist hylozoistic hylozoistically hymen hymenal hymeneal hymeneally hymeneals hymenean hymenial hymenic hymenicolar hymeniferous hymeniophore hymenium hymenogeny hymenoid hymenomycetal hymenomycete hymenomycetoid hymenomycetous hymenophore hymenophorum hymenophyllaceous hymenopter hymenopteran hymenopterist hymenopterological hymenopterologist hymenopterology hymenopteron hymenopterous hymenotomy hymn hymnal hymnarium hymnary hymnbook hymner hymnic hymnist hymnless hymnlike hymnode hymnodical hymnodist hymnody hymnographer hymnography hymnologic hymnological hymnologically hymnologist hymnology hymnwise hynde hyne hyobranchial hyocholalic hyocholic hyoepiglottic hyoepiglottidean hyoglossal hyoglossus hyoglycocholic hyoid hyoidal hyoidan hyoideal hyoidean hyoides hyolithid hyolithoid hyomandibula hyomandibular hyomental hyoplastral hyoplastron hyoscapular hyoscine hyoscyamine hyosternal hyosternum hyostylic hyostyly hyothere hyothyreoid hyothyroid hyp hypabyssal hypaethral hypaethron hypaethros hypaethrum hypalgesia hypalgia hypalgic hypallactic hypallage hypanthial hypanthium hypantrum hypapophysial hypapophysis hyparterial hypaspist hypate hypaton hypautomorphic hypaxial hyper hyperabelian hyperabsorption hyperaccurate hyperacid hyperacidaminuria hyperacidity hyperacoustics hyperaction hyperactive hyperactivity hyperacuity hyperacusia hyperacusis hyperacute hyperacuteness hyperadenosis hyperadiposis hyperadiposity hyperadrenalemia hyperaeolism hyperalbuminosis hyperalgebra hyperalgesia hyperalgesic hyperalgesis hyperalgetic hyperalimentation hyperalkalinity hyperaltruism hyperaminoacidemia hyperanabolic hyperanarchy hyperangelical hyperaphia hyperaphic hyperapophyseal hyperapophysial hyperapophysis hyperarchaeological hyperarchepiscopal hyperazotemia hyperbarbarous hyperbatic hyperbatically hyperbaton hyperbola hyperbolaeon hyperbole hyperbolic hyperbolically hyperbolicly hyperbolism hyperbolize hyperboloid hyperboloidal hyperboreal hyperborean hyperbrachycephal hyperbrachycephalic hyperbrachycephaly hyperbrachycranial hyperbrachyskelic hyperbranchia hyperbrutal hyperbulia hypercalcemia hypercarbamidemia hypercarbureted hypercarburetted hypercarnal hypercatalectic hypercatalexis hypercatharsis hypercathartic hypercathexis hypercenosis hyperchamaerrhine hyperchlorhydria hyperchloric hypercholesterinemia hypercholesterolemia hypercholia hypercivilization hypercivilized hyperclassical hyperclimax hypercoagulability hypercoagulable hypercomplex hypercomposite hyperconcentration hypercone hyperconfident hyperconformist hyperconscientious hyperconscientiousness hyperconscious hyperconsciousness hyperconservatism hyperconstitutional hypercoracoid hypercorrect hypercorrection hypercorrectness hypercosmic hypercreaturely hypercritic hypercritical hypercritically hypercriticism hypercriticize hypercryalgesia hypercube hypercyanotic hypercycle hypercylinder hyperdactyl hyperdactylia hyperdactyly hyperdeify hyperdelicacy hyperdelicate hyperdemocracy hyperdemocratic hyperdeterminant hyperdiabolical hyperdialectism hyperdiapason hyperdiapente hyperdiastole hyperdiatessaron hyperdiazeuxis hyperdicrotic hyperdicrotism hyperdicrotous hyperdimensional hyperdimensionality hyperdissyllable hyperdistention hyperditone hyperdivision hyperdolichocephal hyperdolichocephalic hyperdolichocephaly hyperdolichocranial hyperdoricism hyperdulia hyperdulic hyperdulical hyperelegant hyperelliptic hyperemesis hyperemetic hyperemia hyperemic hyperemotivity hyperemphasize hyperenthusiasm hypereosinophilia hyperephidrosis hyperequatorial hypererethism hyperessence hyperesthesia hyperesthetic hyperethical hypereuryprosopic hypereutectic hypereutectoid hyperexaltation hyperexcitability hyperexcitable hyperexcitement hyperexcursive hyperexophoria hyperextend hyperextension hyperfastidious hyperfederalist hyperfine hyperflexion hyperfocal hyperfunction hyperfunctional hyperfunctioning hypergalactia hypergamous hypergamy hypergenesis hypergenetic hypergeometric hypergeometrical hypergeometry hypergeusia hypergeustia hyperglycemia hyperglycemic hyperglycorrhachia hyperglycosuria hypergoddess hypergol hypergolic hypergrammatical hyperhedonia hyperhemoglobinemia hyperhilarious hyperhypocrisy hypericaceous hypericin hypericism hypericum hyperidealistic hyperideation hyperimmune hyperimmunity hyperimmunization hyperimmunize hyperingenuity hyperinosis hyperinotic hyperinsulinization hyperinsulinize hyperintellectual hyperintelligence hyperinvolution hyperirritability hyperirritable hyperisotonic hyperite hyperkeratosis hyperkinesia hyperkinesis hyperkinetic hyperlactation hyperleptoprosopic hyperleucocytosis hyperlipemia hyperlipoidemia hyperlithuria hyperlogical hyperlustrous hypermagical hypermakroskelic hypermedication hypermenorrhea hypermetabolism hypermetamorphic hypermetamorphism hypermetamorphosis hypermetamorphotic hypermetaphorical hypermetaphysical hypermetaplasia hypermeter hypermetric hypermetrical hypermetron hypermetrope hypermetropia hypermetropic hypermetropical hypermetropy hypermiraculous hypermixolydian hypermnesia hypermnesic hypermnesis hypermnestic hypermodest hypermonosyllable hypermoral hypermorph hypermorphism hypermorphosis hypermotile hypermotility hypermyotonia hypermyotrophy hypermyriorama hypermystical hypernatural hypernephroma hyperneuria hyperneurotic hypernic hypernitrogenous hypernomian hypernomic hypernormal hypernote hypernutrition hyperoartian hyperobtrusive hyperodontogeny hyperoon hyperope hyperopia hyperopic hyperorganic hyperorthognathic hyperorthognathous hyperorthognathy hyperosmia hyperosmic hyperostosis hyperostotic hyperothodox hyperothodoxy hyperotretan hyperotretous hyperoxidation hyperoxide hyperoxygenate hyperoxygenation hyperoxygenize hyperpanegyric hyperparasite hyperparasitic hyperparasitism hyperparasitize hyperparoxysm hyperpathetic hyperpatriotic hyperpencil hyperpepsinia hyperper hyperperistalsis hyperperistaltic hyperpersonal hyperphalangeal hyperphalangism hyperpharyngeal hyperphenomena hyperphoria hyperphoric hyperphosphorescence hyperphysical hyperphysically hyperphysics hyperpiesia hyperpiesis hyperpietic hyperpietist hyperpigmentation hyperpigmented hyperpinealism hyperpituitarism hyperplagiarism hyperplane hyperplasia hyperplasic hyperplastic hyperplatyrrhine hyperploid hyperploidy hyperpnea hyperpnoea hyperpolysyllabic hyperpredator hyperprism hyperproduction hyperprognathous hyperprophetical hyperprosexia hyperpulmonary hyperpure hyperpurist hyperpyramid hyperpyretic hyperpyrexia hyperpyrexial hyperquadric hyperrational hyperreactive hyperrealize hyperresonance hyperresonant hyperreverential hyperrhythmical hyperridiculous hyperritualism hypersacerdotal hypersaintly hypersalivation hypersceptical hyperscholastic hyperscrupulosity hypersecretion hypersensibility hypersensitive hypersensitiveness hypersensitivity hypersensitization hypersensitize hypersensual hypersensualism hypersensuous hypersentimental hypersolid hypersomnia hypersonic hypersophisticated hyperspace hyperspatial hyperspeculative hypersphere hyperspherical hyperspiritualizing hypersplenia hypersplenism hypersthene hypersthenia hypersthenic hypersthenite hyperstoic hyperstrophic hypersubtlety hypersuggestibility hypersuperlative hypersurface hypersusceptibility hypersusceptible hypersystole hypersystolic hypertechnical hypertelic hypertely hypertense hypertensin hypertension hypertensive hyperterrestrial hypertetrahedron hyperthermal hyperthermalgesia hyperthermesthesia hyperthermia hyperthermic hyperthermy hyperthesis hyperthetic hyperthetical hyperthyreosis hyperthyroid hyperthyroidism hyperthyroidization hyperthyroidize hypertonia hypertonic hypertonicity hypertonus hypertorrid hypertoxic hypertoxicity hypertragical hypertragically hypertranscendent hypertrichosis hypertridimensional hypertrophic hypertrophied hypertrophous hypertrophy hypertropia hypertropical hypertype hypertypic hypertypical hyperurbanism hyperuresis hypervascular hypervascularity hypervenosity hyperventilate hyperventilation hypervigilant hyperviscosity hypervitalization hypervitalize hypervitaminosis hypervolume hyperwrought hypesthesia hypesthesic hypethral hypha hyphaeresis hyphal hyphedonia hyphema hyphen hyphenate hyphenated hyphenation hyphenic hyphenism hyphenization hyphenize hypho hyphodrome hyphomycete hyphomycetic hyphomycetous hyphomycosis hypidiomorphic hypidiomorphically hypinosis hypinotic hypnaceous hypnagogic hypnesthesis hypnesthetic hypnoanalysis hypnobate hypnocyst hypnody hypnoetic hypnogenesis hypnogenetic hypnoid hypnoidal hypnoidization hypnoidize hypnologic hypnological hypnologist hypnology hypnone hypnophobia hypnophobic hypnophoby hypnopompic hypnoses hypnosis hypnosperm hypnosporangium hypnospore hypnosporic hypnotherapy hypnotic hypnotically hypnotism hypnotist hypnotistic hypnotizability hypnotizable hypnotization hypnotize hypnotizer hypnotoid hypnotoxin hypo hypoacid hypoacidity hypoactive hypoactivity hypoadenia hypoadrenia hypoaeolian hypoalimentation hypoalkaline hypoalkalinity hypoaminoacidemia hypoantimonate hypoazoturia hypobasal hypobatholithic hypobenthonic hypobenthos hypoblast hypoblastic hypobole hypobranchial hypobranchiate hypobromite hypobromous hypobulia hypobulic hypocalcemia hypocarp hypocarpium hypocarpogean hypocatharsis hypocathartic hypocathexis hypocaust hypocentrum hypocephalus hypochil hypochilium hypochlorhydria hypochlorhydric hypochloric hypochlorite hypochlorous hypochloruria hypochnose hypochondria hypochondriac hypochondriacal hypochondriacally hypochondriacism hypochondrial hypochondriasis hypochondriast hypochondrium hypochondry hypochordal hypochromia hypochrosis hypochylia hypocist hypocleidian hypocleidium hypocoelom hypocondylar hypocone hypoconid hypoconule hypoconulid hypocoracoid hypocorism hypocoristic hypocoristical hypocoristically hypocotyl hypocotyleal hypocotyledonary hypocotyledonous hypocotylous hypocrater hypocrateriform hypocraterimorphous hypocreaceous hypocrisis hypocrisy hypocrital hypocrite hypocritic hypocritical hypocritically hypocrize hypocrystalline hypocycloid hypocycloidal hypocystotomy hypocytosis hypodactylum hypoderm hypoderma hypodermal hypodermatic hypodermatically hypodermatoclysis hypodermatomy hypodermic hypodermically hypodermis hypodermoclysis hypodermosis hypodermous hypodiapason hypodiapente hypodiastole hypodiatessaron hypodiazeuxis hypodicrotic hypodicrotous hypoditone hypodorian hypodynamia hypodynamic hypoeliminator hypoendocrinism hypoeosinophilia hypoeutectic hypoeutectoid hypofunction hypogastric hypogastrium hypogastrocele hypogeal hypogean hypogee hypogeic hypogeiody hypogene hypogenesis hypogenetic hypogenic hypogenous hypogeocarpous hypogeous hypogeum hypogeusia hypoglobulia hypoglossal hypoglossitis hypoglossus hypoglottis hypoglycemia hypoglycemic hypognathism hypognathous hypogonation hypogynic hypogynium hypogynous hypogyny hypohalous hypohemia hypohidrosis hypohyal hypohyaline hypoid hypoiodite hypoiodous hypoionian hypoischium hypoisotonic hypokeimenometry hypokinesia hypokinesis hypokinetic hypokoristikon hypolemniscus hypoleptically hypoleucocytosis hypolimnion hypolocrian hypolydian hypomania hypomanic hypomelancholia hypomeral hypomere hypomeron hypometropia hypomixolydian hypomnematic hypomnesis hypomochlion hypomorph hypomotility hypomyotonia hyponastic hyponastically hyponasty hyponeuria hyponitric hyponitrite hyponitrous hyponoetic hyponoia hyponome hyponomic hyponychial hyponychium hyponym hyponymic hyponymous hypopepsia hypopepsinia hypopepsy hypopetalous hypopetaly hypophalangism hypophamin hypophamine hypophare hypopharyngeal hypopharynx hypophloeodal hypophloeodic hypophloeous hypophonic hypophonous hypophora hypophoria hypophosphate hypophosphite hypophosphoric hypophosphorous hypophrenia hypophrenic hypophrenosis hypophrygian hypophyge hypophyll hypophyllium hypophyllous hypophyllum hypophyse hypophyseal hypophysectomize hypophysectomy hypophyseoprivic hypophyseoprivous hypophysial hypophysical hypophysics hypophysis hypopial hypopinealism hypopituitarism hypoplankton hypoplanktonic hypoplasia hypoplastic hypoplastral hypoplastron hypoplasty hypoplasy hypoploid hypoploidy hypopodium hypopraxia hypoprosexia hypopselaphesia hypopteral hypopteron hypoptilar hypoptilum hypoptosis hypoptyalism hypopus hypopygial hypopygidium hypopygium hypopyon hyporadial hyporadiolus hyporadius hyporchema hyporchematic hyporcheme hyporchesis hyporhachidian hyporhachis hyporhined hyporit hyporrhythmic hyposcenium hyposcleral hyposcope hyposecretion hyposensitization hyposensitize hyposkeletal hyposmia hypospadiac hypospadias hyposphene hypospray hypostase hypostasis hypostasization hypostasize hypostasy hypostatic hypostatical hypostatically hypostatization hypostatize hyposternal hyposternum hyposthenia hyposthenic hyposthenuria hypostigma hypostilbite hypostoma hypostomatic hypostomatous hypostome hypostomial hypostomous hypostrophe hypostyle hypostypsis hypostyptic hyposulphite hyposulphurous hyposuprarenalism hyposyllogistic hyposynaphe hyposynergia hyposystole hypotactic hypotarsal hypotarsus hypotaxia hypotaxic hypotaxis hypotension hypotensive hypotensor hypotenusal hypotenuse hypothalamic hypothalamus hypothalline hypothallus hypothec hypotheca hypothecal hypothecary hypothecate hypothecation hypothecative hypothecator hypothecatory hypothecial hypothecium hypothenal hypothenar hypothermal hypothermia hypothermic hypothermy hypotheses hypothesis hypothesist hypothesize hypothesizer hypothetic hypothetical hypothetically hypothetics hypothetist hypothetize hypothetizer hypothyreosis hypothyroid hypothyroidism hypotonia hypotonic hypotonicity hypotonus hypotony hypotoxic hypotoxicity hypotrachelium hypotrich hypotrichosis hypotrichous hypotrochanteric hypotrochoid hypotrochoidal hypotrophic hypotrophy hypotympanic hypotypic hypotypical hypotyposis hypovalve hypovanadate hypovanadic hypovanadious hypovanadous hypovitaminosis hypoxanthic hypoxanthine hypozeugma hypozeuxis hypozoan hypozoic hyppish hypsibrachycephalic hypsibrachycephalism hypsibrachycephaly hypsicephalic hypsicephaly hypsidolichocephalic hypsidolichocephalism hypsidolichocephaly hypsiliform hypsiloid hypsilophodont hypsilophodontid hypsilophodontoid hypsistenocephalic hypsistenocephalism hypsistenocephaly hypsobathymetric hypsocephalous hypsochrome hypsochromic hypsochromy hypsodont hypsodontism hypsodonty hypsographic hypsographical hypsography hypsoisotherm hypsometer hypsometric hypsometrical hypsometrically hypsometrist hypsometry hypsophobia hypsophonous hypsophyll hypsophyllar hypsophyllary hypsophyllous hypsophyllum hypsothermometer hypural hyraces hyraceum hyracid hyraciform hyracodont hyracodontid hyracodontoid hyracoid hyracoidean hyracothere hyracotherian hyrax hyson hyssop hystazarin hysteralgia hysteralgic hysteranthous hysterectomy hysterelcosis hysteresial hysteresis hysteretic hysteretically hysteria hysteriac hysteric hysterical hysterically hystericky hysterics hysteriform hysterioid hysterocatalepsy hysterocele hysterocleisis hysterocrystalline hysterocystic hysterodynia hysterogen hysterogenetic hysterogenic hysterogenous hysterogeny hysteroid hysterolaparotomy hysterolith hysterolithiasis hysterology hysterolysis hysteromania hysterometer hysterometry hysteromorphous hysteromyoma hysteromyomectomy hysteron hysteroneurasthenia hysteropathy hysteropexia hysteropexy hysterophore hysterophytal hysterophyte hysteroproterize hysteroptosia hysteroptosis hysterorrhaphy hysterorrhexis hysteroscope hysterosis hysterotome hysterotomy hysterotraumatism hystriciasis hystricid hystricine hystricism hystricismus hystricoid hystricomorph hystricomorphic hystricomorphous i iamatology iamb iambelegus iambi iambic iambically iambist iambize iambographer iambus ianthine ianthinite iao iatraliptic iatraliptics iatric iatrical iatrochemic iatrochemical iatrochemist iatrochemistry iatrological iatrology iatromathematical iatromathematician iatromathematics iatromechanical iatromechanist iatrophysical iatrophysicist iatrophysics iatrotechnics iba iberite ibex ibices ibid ibidine ibis ibisbill ibolium ibota icacinaceous icaco ice iceberg iceblink iceboat icebone icebound icebox icebreaker icecap icecraft iced icefall icefish icehouse iceland iceleaf iceless icelike iceman icequake iceroot icework ich ichneumon ichneumoned ichneumonid ichneumonidan ichneumoniform ichneumonized ichneumonoid ichneumonology ichneumous ichneutic ichnite ichnographic ichnographical ichnographically ichnography ichnolite ichnolithology ichnolitic ichnological ichnology ichnomancy icho ichoglan ichor ichorous ichorrhea ichorrhemia ichthulin ichthulinic ichthus ichthyal ichthyic ichthyism ichthyismus ichthyization ichthyized ichthyobatrachian ichthyocephalous ichthyocol ichthyocolla ichthyocoprolite ichthyodian ichthyodont ichthyodorulite ichthyofauna ichthyoform ichthyographer ichthyographia ichthyographic ichthyography ichthyoid ichthyoidal ichthyolatrous ichthyolatry ichthyolite ichthyolitic ichthyologic ichthyological ichthyologically ichthyologist ichthyology ichthyomancy ichthyomantic ichthyomorphic ichthyomorphous ichthyonomy ichthyopaleontology ichthyophagan ichthyophagi ichthyophagian ichthyophagist ichthyophagize ichthyophagous ichthyophagy ichthyophile ichthyophobia ichthyophthalmite ichthyophthiriasis ichthyopolism ichthyopolist ichthyopsid ichthyopsidan ichthyopterygian ichthyopterygium ichthyornithic ichthyornithoid ichthyosaur ichthyosaurian ichthyosaurid ichthyosauroid ichthyosis ichthyosism ichthyotic ichthyotomist ichthyotomous ichthyotomy ichthyotoxin ichthyotoxism ichthytaxidermy ichu icica icicle icicled icily iciness icing icon iconic iconical iconism iconoclasm iconoclast iconoclastic iconoclastically iconoclasticism iconodule iconodulic iconodulist iconoduly iconograph iconographer iconographic iconographical iconographist iconography iconolater iconolatrous iconolatry iconological iconologist iconology iconomachal iconomachist iconomachy iconomania iconomatic iconomatically iconomaticism iconomatography iconometer iconometric iconometrical iconometrically iconometry iconophile iconophilism iconophilist iconophily iconoplast iconoscope iconostas iconostasion iconostasis iconotype icosahedral icosasemic icosian icositetrahedron icosteid icosteine icotype icteric icterical icterine icteritious icterode icterogenetic icterogenic icterogenous icterohematuria icteroid icterus ictic ictuate ictus icy id idalia idant iddat ide idea ideaed ideaful ideagenous ideal idealess idealism idealist idealistic idealistical idealistically ideality idealization idealize idealizer idealless ideally idealness ideamonger ideate ideation ideational ideationally ideative ideist idempotent identic identical identicalism identically identicalness identifiable identifiableness identification identifier identify identism identity ideogenetic ideogenical ideogenous ideogeny ideoglyph ideogram ideogrammic ideograph ideographic ideographical ideographically ideography ideolatry ideologic ideological ideologically ideologist ideologize ideologue ideology ideomotion ideomotor ideophone ideophonetics ideophonous ideoplastia ideoplastic ideoplastics ideoplasty ideopraxist ides idgah idiasm idic idiobiology idioblast idioblastic idiochromatic idiochromatin idiochromosome idiocrasis idiocrasy idiocratic idiocratical idiocy idiocyclophanous idioelectric idioelectrical idiogenesis idiogenetic idiogenous idioglossia idioglottic idiograph idiographic idiographical idiohypnotism idiolalia idiolatry idiologism idiolysin idiom idiomatic idiomatical idiomatically idiomaticalness idiomelon idiometer idiomography idiomology idiomorphic idiomorphically idiomorphism idiomorphous idiomuscular idiopathetic idiopathic idiopathical idiopathically idiopathy idiophanism idiophanous idiophonic idioplasm idioplasmatic idioplasmic idiopsychological idiopsychology idioreflex idiorepulsive idioretinal idiorrhythmic idiosome idiospasm idiospastic idiostatic idiosyncrasy idiosyncratic idiosyncratical idiosyncratically idiot idiotcy idiothalamous idiothermous idiothermy idiotic idiotical idiotically idioticalness idioticon idiotish idiotism idiotize idiotropian idiotry idiotype idiotypic idite iditol idle idleful idleheaded idlehood idleman idlement idleness idler idleset idleship idlety idlish idly idocrase idol idola idolaster idolater idolatress idolatric idolatrize idolatrizer idolatrous idolatrously idolatrousness idolatry idolify idolism idolist idolistic idolization idolize idolizer idoloclast idoloclastic idolodulia idolographical idololatrical idololatry idolomancy idolomania idolothyte idolothytic idolous idolum idoneal idoneity idoneous idoneousness idorgan idosaccharic idose idrialin idrialine idrialite idryl idyl idyler idylism idylist idylize idyllian idyllic idyllical idyllically idyllicism ie if ife iffy igelstromite igloo ignatia ignavia igneoaqueous igneous ignescent ignicolist igniferous igniferousness igniform ignifuge ignify ignigenous ignipotent ignipuncture ignitability ignite igniter ignitibility ignitible ignition ignitive ignitor ignitron ignivomous ignivomousness ignobility ignoble ignobleness ignoblesse ignobly ignominious ignominiously ignominiousness ignominy ignorable ignoramus ignorance ignorant ignorantism ignorantist ignorantly ignorantness ignoration ignore ignorement ignorer ignote iguana iguanian iguanid iguaniform iguanodont iguanodontoid iguanoid ihi ihleite ihram iiwi ijma ijolite ijussite ikat ikey ikeyness ikona ikra ileac ileectomy ileitis ileocaecal ileocaecum ileocolic ileocolitis ileocolostomy ileocolotomy ileon ileosigmoidostomy ileostomy ileotomy ilesite ileum ileus ilex ilia iliac iliacus iliahi ilial iliau ilicaceous ilicic ilicin ilima iliocaudal iliocaudalis iliococcygeal iliococcygeus iliococcygian iliocostal iliocostalis iliodorsal iliofemoral iliohypogastric ilioinguinal ilioischiac ilioischiatic iliolumbar iliopectineal iliopelvic ilioperoneal iliopsoas iliopsoatic iliopubic iliosacral iliosciatic ilioscrotal iliospinal iliotibial iliotrochanteric ilium ilk ilka ilkane ill illaborate illachrymable illachrymableness illapsable illapse illapsive illaqueate illaqueation illation illative illatively illaudable illaudably illaudation illaudatory illecebrous illeck illegal illegality illegalize illegally illegalness illegibility illegible illegibleness illegibly illegitimacy illegitimate illegitimately illegitimateness illegitimation illegitimatize illeism illeist illess illfare illguide illiberal illiberalism illiberality illiberalize illiberally illiberalness illicit illicitly illicitness illimitability illimitable illimitableness illimitably illimitate illimitation illimited illimitedly illimitedness illinition illinium illipene illiquation illiquid illiquidity illiquidly illish illision illiteracy illiteral illiterate illiterately illiterateness illiterature illium illness illocal illocality illocally illogic illogical illogicality illogically illogicalness illogician illogicity illoricate illoricated illoyal illoyalty illth illucidate illucidation illucidative illude illudedly illuder illume illumer illuminability illuminable illuminance illuminant illuminate illuminated illuminati illuminating illuminatingly illumination illuminational illuminatism illuminatist illuminative illuminato illuminator illuminatory illuminatus illumine illuminee illuminer illuminist illuminometer illuminous illupi illure illurement illusible illusion illusionable illusional illusionary illusioned illusionism illusionist illusionistic illusive illusively illusiveness illusor illusorily illusoriness illusory illustrable illustratable illustrate illustration illustrational illustrative illustratively illustrator illustratory illustratress illustre illustricity illustrious illustriously illustriousness illutate illutation illuvial illuviate illuviation illy ilmenite ilmenitite ilmenorutile ilot ilvaite ilysioid image imageable imageless imager imagerial imagerially imagery imaginability imaginable imaginableness imaginably imaginal imaginant imaginarily imaginariness imaginary imaginate imagination imaginational imaginationalism imaginative imaginatively imaginativeness imaginator imagine imaginer imagines imaginist imaginous imagism imagist imagistic imago imam imamah imamate imambarah imamic imamship imaret imbalance imban imband imbannered imbarge imbark imbarn imbased imbastardize imbat imbauba imbe imbecile imbecilely imbecilic imbecilitate imbecility imbed imbellious imber imbibe imbiber imbibition imbibitional imbibitory imbirussu imbitter imbitterment imbolish imbondo imbonity imbordure imborsation imbosom imbower imbreathe imbreviate imbrex imbricate imbricated imbricately imbrication imbricative imbroglio imbrue imbruement imbrute imbrutement imbue imbuement imburse imbursement imi imidazole imidazolyl imide imidic imidogen iminazole imine imino iminohydrin imitability imitable imitableness imitancy imitant imitate imitatee imitation imitational imitationist imitative imitatively imitativeness imitator imitatorship imitatress imitatrix immaculacy immaculance immaculate immaculately immaculateness immalleable immanacle immanation immane immanely immanence immanency immaneness immanent immanental immanentism immanentist immanently immanifest immanifestness immanity immantle immarble immarcescible immarcescibly immarcibleness immarginate immask immatchable immaterial immaterialism immaterialist immateriality immaterialize immaterially immaterialness immaterials immateriate immatriculate immatriculation immature immatured immaturely immatureness immaturity immeability immeasurability immeasurable immeasurableness immeasurably immeasured immechanical immechanically immediacy immedial immediate immediately immediateness immediatism immediatist immedicable immedicableness immedicably immelodious immember immemorable immemorial immemorially immense immensely immenseness immensity immensive immensurability immensurable immensurableness immensurate immerd immerge immergence immergent immerit immerited immeritorious immeritoriously immeritous immerse immersement immersible immersion immersionism immersionist immersive immethodic immethodical immethodically immethodicalness immethodize immetrical immetrically immetricalness immew immi immigrant immigrate immigration immigrator immigratory imminence imminency imminent imminently imminentness immingle imminution immiscibility immiscible immiscibly immission immit immitigability immitigable immitigably immix immixable immixture immobile immobility immobilization immobilize immoderacy immoderate immoderately immoderateness immoderation immodest immodestly immodesty immodulated immolate immolation immolator immoment immomentous immonastered immoral immoralism immoralist immorality immoralize immorally immorigerous immorigerousness immortability immortable immortal immortalism immortalist immortality immortalizable immortalization immortalize immortalizer immortally immortalness immortalship immortelle immortification immortified immotile immotioned immotive immound immovability immovable immovableness immovably immund immundity immune immunist immunity immunization immunize immunochemistry immunogen immunogenetic immunogenetics immunogenic immunogenically immunogenicity immunologic immunological immunologically immunologist immunology immunoreaction immunotoxin immuration immure immurement immusical immusically immutability immutable immutableness immutably immutation immute immutilate immutual imonium imp impacability impacable impack impackment impact impacted impaction impactionize impactment impactual impages impaint impair impairable impairer impairment impala impalace impalatable impale impalement impaler impall impalm impalpability impalpable impalpably impalsy impaludism impanate impanation impanator impane impanel impanelment impapase impapyrate impar imparadise imparalleled imparasitic impardonable impardonably imparidigitate imparipinnate imparisyllabic imparity impark imparkation imparl imparlance imparsonee impart impartable impartance impartation imparter impartial impartialism impartialist impartiality impartially impartialness impartibilibly impartibility impartible impartibly imparticipable impartite impartive impartivity impartment impassability impassable impassableness impassably impasse impassibilibly impassibility impassible impassibleness impassion impassionable impassionate impassionately impassioned impassionedly impassionedness impassionment impassive impassively impassiveness impassivity impastation impaste impasto impasture impaternate impatible impatience impatiency impatient impatientaceous impatiently impatientness impatronize impave impavid impavidity impavidly impawn impayable impeach impeachability impeachable impeacher impeachment impearl impeccability impeccable impeccably impeccance impeccancy impeccant impectinate impecuniary impecuniosity impecunious impecuniously impecuniousness impedance impede impeder impedibility impedible impedient impediment impedimenta impedimental impedimentary impeding impedingly impedite impedition impeditive impedometer impeevish impel impellent impeller impen impend impendence impendency impendent impending impenetrability impenetrable impenetrableness impenetrably impenetrate impenetration impenetrative impenitence impenitent impenitently impenitentness impenitible impenitibleness impennate impent imperance imperant imperate imperation imperatival imperative imperatively imperativeness imperator imperatorial imperatorially imperatorian imperatorious imperatorship imperatory imperatrix imperceivable imperceivableness imperceivably imperceived imperceiverant imperceptibility imperceptible imperceptibleness imperceptibly imperception imperceptive imperceptiveness imperceptivity impercipience impercipient imperence imperent imperfect imperfected imperfectibility imperfectible imperfection imperfectious imperfective imperfectly imperfectness imperforable imperforate imperforated imperforation imperformable imperia imperial imperialin imperialine imperialism imperialist imperialistic imperialistically imperiality imperialization imperialize imperially imperialness imperialty imperil imperilment imperious imperiously imperiousness imperish imperishability imperishable imperishableness imperishably imperite imperium impermanence impermanency impermanent impermanently impermeability impermeabilization impermeabilize impermeable impermeableness impermeably impermeated impermeator impermissible impermutable imperscriptible imperscrutable impersonable impersonal impersonality impersonalization impersonalize impersonally impersonate impersonation impersonative impersonator impersonatress impersonatrix impersonification impersonify impersonization impersonize imperspicuity imperspicuous imperspirability imperspirable impersuadable impersuadableness impersuasibility impersuasible impersuasibleness impersuasibly impertinacy impertinence impertinency impertinent impertinently impertinentness impertransible imperturbability imperturbable imperturbableness imperturbably imperturbation imperturbed imperverse impervertible impervestigable imperviability imperviable imperviableness impervial impervious imperviously imperviousness impest impestation impester impeticos impetiginous impetigo impetition impetrate impetration impetrative impetrator impetratory impetre impetulant impetulantly impetuosity impetuous impetuously impetuousness impetus imphee impi impicture impierceable impiety impignorate impignoration impinge impingement impingence impingent impinger impinguate impious impiously impiousness impish impishly impishness impiteous impitiably implacability implacable implacableness implacably implacement implacental implacentate implant implantation implanter implastic implasticity implate implausibility implausible implausibleness implausibly impleach implead impleadable impleader impledge implement implemental implementation implementiferous implete impletion impletive implex impliable implial implicant implicate implicately implicateness implication implicational implicative implicatively implicatory implicit implicitly implicitness impliedly impliedness impling implode implodent implorable imploration implorator imploratory implore implorer imploring imploringly imploringness implosion implosive implosively implume implumed implunge impluvium imply impocket impofo impoison impoisoner impolarizable impolicy impolished impolite impolitely impoliteness impolitic impolitical impolitically impoliticalness impoliticly impoliticness impollute imponderabilia imponderability imponderable imponderableness imponderably imponderous impone imponent impoor impopular impopularly imporosity imporous import importability importable importableness importably importance importancy important importantly importation importer importless importment importraiture importray importunacy importunance importunate importunately importunateness importunator importune importunely importunement importuner importunity imposable imposableness imposal impose imposement imposer imposing imposingly imposingness imposition impositional impositive impossibilification impossibilism impossibilist impossibilitate impossibility impossible impossibleness impossibly impost imposter imposterous impostor impostorism impostorship impostress impostrix impostrous impostumate impostumation impostume imposture imposturism imposturous imposure impot impotable impotence impotency impotent impotently impotentness impound impoundable impoundage impounder impoundment impoverish impoverisher impoverishment impracticability impracticable impracticableness impracticably impractical impracticality impracticalness imprecant imprecate imprecation imprecator imprecatorily imprecatory imprecise imprecisely imprecision impredicability impredicable impreg impregn impregnability impregnable impregnableness impregnably impregnant impregnate impregnation impregnative impregnator impregnatory imprejudice impremeditate impreparation impresa impresario imprescience imprescribable imprescriptibility imprescriptible imprescriptibly imprese impress impressable impressedly impresser impressibility impressible impressibleness impressibly impression impressionability impressionable impressionableness impressionably impressional impressionalist impressionality impressionally impressionary impressionism impressionist impressionistic impressionistically impressionless impressive impressively impressiveness impressment impressor impressure imprest imprestable impreventability impreventable imprevisibility imprevisible imprevision imprimatur imprime imprimitive imprimitivity imprint imprinter imprison imprisonable imprisoner imprisonment improbability improbabilize improbable improbableness improbably improbation improbative improbatory improbity improcreant improcurability improcurable improducible improficience improficiency improgressive improgressively improgressiveness improlificical impromptitude impromptu impromptuary impromptuist improof improper improperation improperly improperness impropriate impropriation impropriator impropriatrix impropriety improvability improvable improvableness improvably improve improvement improver improvership improvidence improvident improvidentially improvidently improving improvingly improvisate improvisation improvisational improvisator improvisatorial improvisatorially improvisatorize improvisatory improvise improvisedly improviser improvision improviso improvisor imprudence imprudency imprudent imprudential imprudently imprudentness impship impuberal impuberate impuberty impubic impudence impudency impudent impudently impudentness impudicity impugn impugnability impugnable impugnation impugner impugnment impuissance impuissant impulse impulsion impulsive impulsively impulsiveness impulsivity impulsory impunctate impunctual impunctuality impunely impunible impunibly impunity impure impurely impureness impuritan impuritanism impurity imputability imputable imputableness imputably imputation imputative imputatively imputativeness impute imputedly imputer imputrescence imputrescibility imputrescible imputrid impy imshi imsonic imu in inability inabordable inabstinence inaccentuated inaccentuation inacceptable inaccessibility inaccessible inaccessibleness inaccessibly inaccordance inaccordancy inaccordant inaccordantly inaccuracy inaccurate inaccurately inaccurateness inachid inachoid inacquaintance inacquiescent inactinic inaction inactionist inactivate inactivation inactive inactively inactiveness inactivity inactuate inactuation inadaptability inadaptable inadaptation inadaptive inadept inadequacy inadequate inadequately inadequateness inadequation inadequative inadequatively inadherent inadhesion inadhesive inadjustability inadjustable inadmissibility inadmissible inadmissibly inadventurous inadvertence inadvertency inadvertent inadvertently inadvisability inadvisable inadvisableness inadvisedly inaesthetic inaffability inaffable inaffectation inagglutinability inagglutinable inaggressive inagile inaidable inaja inalacrity inalienability inalienable inalienableness inalienably inalimental inalterability inalterable inalterableness inalterably inamissibility inamissible inamissibleness inamorata inamorate inamoration inamorato inamovability inamovable inane inanely inanga inangulate inanimadvertence inanimate inanimated inanimately inanimateness inanimation inanition inanity inantherate inapathy inapostate inapparent inappealable inappeasable inappellability inappellable inappendiculate inapperceptible inappertinent inappetence inappetency inappetent inappetible inapplicability inapplicable inapplicableness inapplicably inapplication inapposite inappositely inappositeness inappreciable inappreciably inappreciation inappreciative inappreciatively inappreciativeness inapprehensible inapprehension inapprehensive inapprehensiveness inapproachability inapproachable inapproachably inappropriable inappropriableness inappropriate inappropriately inappropriateness inapt inaptitude inaptly inaptness inaqueous inarable inarch inarculum inarguable inarguably inarm inarticulacy inarticulate inarticulated inarticulately inarticulateness inarticulation inartificial inartificiality inartificially inartificialness inartistic inartistical inartisticality inartistically inasmuch inassimilable inassimilation inassuageable inattackable inattention inattentive inattentively inattentiveness inaudibility inaudible inaudibleness inaudibly inaugur inaugural inaugurate inauguration inaugurative inaugurator inauguratory inaugurer inaurate inauration inauspicious inauspiciously inauspiciousness inauthentic inauthenticity inauthoritative inauthoritativeness inaxon inbe inbeaming inbearing inbeing inbending inbent inbirth inblow inblowing inblown inboard inbond inborn inbound inbread inbreak inbreaking inbreathe inbreather inbred inbreed inbring inbringer inbuilt inburning inburnt inburst inby incalculability incalculable incalculableness incalculably incalescence incalescency incalescent incaliculate incalver incalving incameration incandent incandesce incandescence incandescency incandescent incandescently incanous incantation incantational incantator incantatory incanton incapability incapable incapableness incapably incapacious incapaciousness incapacitate incapacitation incapacity incapsulate incapsulation incaptivate incarcerate incarceration incarcerator incardinate incardination incarmined incarn incarnadine incarnant incarnate incarnation incarnational incarnationist incarnative incase incasement incast incatenate incatenation incaution incautious incautiously incautiousness incavate incavated incavation incavern incedingly incelebrity incendiarism incendiary incendivity incensation incense incenseless incensement incensory incensurable incensurably incenter incentive incentively incentor incept inception inceptive inceptively inceptor inceration incertitude incessable incessably incessancy incessant incessantly incessantness incest incestuous incestuously incestuousness inch inched inchmeal inchoacy inchoant inchoate inchoately inchoateness inchoation inchoative inchpin inchworm incide incidence incident incidental incidentalist incidentally incidentalness incidentless incidently incinerable incinerate incineration incinerator incipience incipient incipiently incircumscription incircumspect incircumspection incircumspectly incircumspectness incisal incise incisely incisiform incision incisive incisively incisiveness incisor incisorial incisory incisure incitability incitable incitant incitation incite incitement inciter incitingly incitive incitress incivic incivility incivilization incivism inclemency inclement inclemently inclementness inclinable inclinableness inclination inclinational inclinator inclinatorily inclinatorium inclinatory incline incliner inclinograph inclinometer inclip inclose inclosure includable include included includedness includer inclusa incluse inclusion inclusionist inclusive inclusively inclusiveness inclusory incoagulable incoalescence incoercible incog incogent incogitability incogitable incogitancy incogitant incogitantly incogitative incognita incognitive incognito incognizability incognizable incognizance incognizant incognoscent incognoscibility incognoscible incoherence incoherency incoherent incoherentific incoherently incoherentness incohering incohesion incohesive incoincidence incoincident incombustibility incombustible incombustibleness incombustibly incombustion income incomeless incomer incoming incommensurability incommensurable incommensurableness incommensurably incommensurate incommensurately incommensurateness incommiscibility incommiscible incommodate incommodation incommode incommodement incommodious incommodiously incommodiousness incommodity incommunicability incommunicable incommunicableness incommunicably incommunicado incommunicative incommunicatively incommunicativeness incommutability incommutable incommutableness incommutably incompact incompactly incompactness incomparability incomparable incomparableness incomparably incompassionate incompassionately incompassionateness incompatibility incompatible incompatibleness incompatibly incompendious incompensated incompensation incompetence incompetency incompetent incompetently incompetentness incompletability incompletable incompletableness incomplete incompleted incompletely incompleteness incompletion incomplex incompliance incompliancy incompliant incompliantly incomplicate incomplying incomposed incomposedly incomposedness incomposite incompossibility incompossible incomprehended incomprehending incomprehendingly incomprehensibility incomprehensible incomprehensibleness incomprehensibly incomprehension incomprehensive incomprehensively incomprehensiveness incompressibility incompressible incompressibleness incompressibly incomputable inconcealable inconceivability inconceivable inconceivableness inconceivably inconcinnate inconcinnately inconcinnity inconcinnous inconcludent inconcluding inconclusion inconclusive inconclusively inconclusiveness inconcrete inconcurrent inconcurring incondensability incondensable incondensibility incondensible incondite inconditionate inconditioned inconducive inconfirm inconformable inconformably inconformity inconfused inconfusedly inconfusion inconfutable inconfutably incongealable incongealableness incongenerous incongenial incongeniality inconglomerate incongruence incongruent incongruently incongruity incongruous incongruously incongruousness inconjoinable inconnected inconnectedness inconnu inconscience inconscient inconsciently inconscious inconsciously inconsecutive inconsecutively inconsecutiveness inconsequence inconsequent inconsequential inconsequentiality inconsequentially inconsequently inconsequentness inconsiderable inconsiderableness inconsiderably inconsiderate inconsiderately inconsiderateness inconsideration inconsidered inconsistence inconsistency inconsistent inconsistently inconsistentness inconsolability inconsolable inconsolableness inconsolably inconsolate inconsolately inconsonance inconsonant inconsonantly inconspicuous inconspicuously inconspicuousness inconstancy inconstant inconstantly inconstantness inconstruable inconsultable inconsumable inconsumably inconsumed incontaminable incontaminate incontaminateness incontemptible incontestability incontestable incontestableness incontestably incontinence incontinency incontinent incontinently incontinuity incontinuous incontracted incontractile incontraction incontrollable incontrollably incontrolled incontrovertibility incontrovertible incontrovertibleness incontrovertibly inconvenience inconveniency inconvenient inconveniently inconvenientness inconversable inconversant inconversibility inconvertibility inconvertible inconvertibleness inconvertibly inconvinced inconvincedly inconvincibility inconvincible inconvincibly incopresentability incopresentable incoronate incoronated incoronation incorporable incorporate incorporated incorporatedness incorporation incorporative incorporator incorporeal incorporealism incorporealist incorporeality incorporealize incorporeally incorporeity incorporeous incorpse incorrect incorrection incorrectly incorrectness incorrespondence incorrespondency incorrespondent incorresponding incorrigibility incorrigible incorrigibleness incorrigibly incorrodable incorrodible incorrosive incorrupt incorrupted incorruptibility incorruptible incorruptibleness incorruptibly incorruption incorruptly incorruptness incourteous incourteously incrash incrassate incrassated incrassation incrassative increasable increasableness increase increasedly increaseful increasement increaser increasing increasingly increate increately increative incredibility incredible incredibleness incredibly increditable incredited incredulity incredulous incredulously incredulousness increep incremate incremation increment incremental incrementation increpate increpation increscence increscent increst incretion incretionary incretory incriminate incrimination incriminator incriminatory incross incrossbred incrossing incrotchet incruent incruental incruentous incrust incrustant incrustate incrustation incrustator incrustive incrustment incrystal incrystallizable incubate incubation incubational incubative incubator incubatorium incubatory incubi incubous incubus incudal incudate incudectomy incudes incudomalleal incudostapedial inculcate inculcation inculcative inculcator inculcatory inculpability inculpable inculpableness inculpably inculpate inculpation inculpative inculpatory incult incultivation inculture incumbence incumbency incumbent incumbentess incumbently incumber incumberment incumbrance incumbrancer incunable incunabula incunabular incunabulist incunabulum incuneation incur incurability incurable incurableness incurably incuriosity incurious incuriously incuriousness incurrable incurrence incurrent incurse incursion incursionist incursive incurvate incurvation incurvature incurve incus incuse incut incutting indaba indaconitine indagate indagation indagative indagator indagatory indamine indan indane indanthrene indart indazin indazine indazol indazole inde indebt indebted indebtedness indebtment indecence indecency indecent indecently indecentness indeciduate indeciduous indecipherability indecipherable indecipherableness indecipherably indecision indecisive indecisively indecisiveness indeclinable indeclinableness indeclinably indecomponible indecomposable indecomposableness indecorous indecorously indecorousness indecorum indeed indeedy indefaceable indefatigability indefatigable indefatigableness indefatigably indefeasibility indefeasible indefeasibleness indefeasibly indefeatable indefectibility indefectible indefectibly indefective indefensibility indefensible indefensibleness indefensibly indefensive indeficiency indeficient indeficiently indefinable indefinableness indefinably indefinite indefinitely indefiniteness indefinitive indefinitively indefinitiveness indefinitude indefinity indeflectible indefluent indeformable indehiscence indehiscent indelectable indelegability indelegable indeliberate indeliberately indeliberateness indeliberation indelibility indelible indelibleness indelibly indelicacy indelicate indelicately indelicateness indemnification indemnificator indemnificatory indemnifier indemnify indemnitee indemnitor indemnity indemnization indemoniate indemonstrability indemonstrable indemonstrableness indemonstrably indene indent indentation indented indentedly indentee indenter indention indentment indentor indenture indentured indentureship indentwise independable independence independency independent independentism independently indeposable indeprehensible indeprivability indeprivable inderivative indescribability indescribable indescribableness indescribably indescript indescriptive indesert indesignate indesirable indestructibility indestructible indestructibleness indestructibly indetectable indeterminable indeterminableness indeterminably indeterminacy indeterminate indeterminately indeterminateness indetermination indeterminative indetermined indeterminism indeterminist indeterministic indevirginate indevoted indevotion indevotional indevout indevoutly indevoutness index indexed indexer indexical indexically indexing indexless indexlessness indexterity indiadem indianaite indianite indianization indianize indic indicable indican indicant indicanuria indicate indication indicative indicatively indicator indicatory indicatrix indices indicia indicial indicible indicium indicolite indict indictable indictably indictee indicter indiction indictional indictive indictment indictor indiferous indifference indifferency indifferent indifferential indifferentism indifferentist indifferentistic indifferently indigena indigenal indigenate indigence indigency indigene indigeneity indigenist indigenity indigenous indigenously indigenousness indigent indigently indigested indigestedness indigestibility indigestible indigestibleness indigestibly indigestion indigestive indigitamenta indigitate indigitation indign indignance indignancy indignant indignantly indignation indignatory indignify indignity indignly indigo indigoberry indigoferous indigoid indigotic indigotin indigotindisulphonic indiguria indimensible indimensional indiminishable indimple indirect indirected indirection indirectly indirectness indirubin indiscernibility indiscernible indiscernibleness indiscernibly indiscerptibility indiscerptible indiscerptibleness indiscerptibly indisciplinable indiscipline indisciplined indiscoverable indiscoverably indiscovered indiscreet indiscreetly indiscreetness indiscrete indiscretely indiscretion indiscretionary indiscriminate indiscriminated indiscriminately indiscriminateness indiscriminating indiscriminatingly indiscrimination indiscriminative indiscriminatively indiscriminatory indiscussable indiscussible indispellable indispensability indispensable indispensableness indispensably indispose indisposed indisposedness indisposition indisputability indisputable indisputableness indisputably indissipable indissociable indissolubility indissoluble indissolubleness indissolubly indissolute indissolvability indissolvable indissolvableness indissolvably indissuadable indissuadably indistinct indistinction indistinctive indistinctively indistinctiveness indistinctly indistinctness indistinguishability indistinguishable indistinguishableness indistinguishably indistinguished indistortable indistributable indisturbable indisturbance indisturbed indite inditement inditer indium indivertible indivertibly individable individua individual individualism individualist individualistic individualistically individuality individualization individualize individualizer individualizingly individually individuate individuation individuative individuator individuity individuum indivinable indivisibility indivisible indivisibleness indivisibly indivision indocibility indocible indocibleness indocile indocility indoctrinate indoctrination indoctrinator indoctrine indoctrinization indoctrinize indogen indogenide indole indolence indolent indolently indoles indoline indoloid indolyl indomitability indomitable indomitableness indomitably indoor indoors indophenin indophenol indorsation indorse indoxyl indoxylic indoxylsulphuric indraft indraught indrawal indrawing indrawn indri indubious indubiously indubitable indubitableness indubitably indubitatively induce induced inducedly inducement inducer induciae inducible inducive induct inductance inductee inducteous inductile inductility induction inductional inductionally inductionless inductive inductively inductiveness inductivity inductometer inductophone inductor inductorium inductory inductoscope indue induement indulge indulgeable indulgement indulgence indulgenced indulgency indulgent indulgential indulgentially indulgently indulgentness indulger indulging indulgingly induline indult indulto indument indumentum induna induplicate induplication induplicative indurable indurate induration indurative indurite indusial indusiate indusiated indusiform indusioid indusium industrial industrialism industrialist industrialization industrialize industrially industrialness industrious industriously industriousness industrochemical industry induviae induvial induviate indwell indweller indy indyl indylic inearth inebriacy inebriant inebriate inebriation inebriative inebriety inebrious ineconomic ineconomy inedibility inedible inedited ineducabilian ineducability ineducable ineducation ineffability ineffable ineffableness ineffably ineffaceability ineffaceable ineffaceably ineffectible ineffectibly ineffective ineffectively ineffectiveness ineffectual ineffectuality ineffectually ineffectualness ineffervescence ineffervescent ineffervescibility ineffervescible inefficacious inefficaciously inefficaciousness inefficacity inefficacy inefficience inefficiency inefficient inefficiently ineffulgent inelaborate inelaborated inelaborately inelastic inelasticate inelasticity inelegance inelegancy inelegant inelegantly ineligibility ineligible ineligibleness ineligibly ineliminable ineloquence ineloquent ineloquently ineluctability ineluctable ineluctably ineludible ineludibly inembryonate inemendable inemotivity inemulous inenarrable inenergetic inenubilable inenucleable inept ineptitude ineptly ineptness inequable inequal inequalitarian inequality inequally inequalness inequation inequiaxial inequicostate inequidistant inequigranular inequilateral inequilibrium inequilobate inequilobed inequipotential inequipotentiality inequitable inequitableness inequitably inequity inequivalent inequivalve inequivalvular ineradicable ineradicableness ineradicably inerasable inerasableness inerasably inerasible inerm inermous inerrability inerrable inerrableness inerrably inerrancy inerrant inerrantly inerratic inerring inerringly inerroneous inert inertance inertia inertial inertion inertly inertness inerubescent inerudite ineruditely inerudition inescapable inescapableness inescapably inesculent inescutcheon inesite inessential inessentiality inestimability inestimable inestimableness inestimably inestivation inethical ineunt ineuphonious inevadible inevadibly inevaporable inevasible inevidence inevident inevitability inevitable inevitableness inevitably inexact inexacting inexactitude inexactly inexactness inexcellence inexcitability inexcitable inexclusive inexclusively inexcommunicable inexcusability inexcusable inexcusableness inexcusably inexecutable inexecution inexertion inexhausted inexhaustedly inexhaustibility inexhaustible inexhaustibleness inexhaustibly inexhaustive inexhaustively inexigible inexist inexistence inexistency inexistent inexorability inexorable inexorableness inexorably inexpansible inexpansive inexpectancy inexpectant inexpectation inexpected inexpectedly inexpectedness inexpedience inexpediency inexpedient inexpediently inexpensive inexpensively inexpensiveness inexperience inexperienced inexpert inexpertly inexpertness inexpiable inexpiableness inexpiably inexpiate inexplainable inexplicability inexplicable inexplicableness inexplicables inexplicably inexplicit inexplicitly inexplicitness inexplorable inexplosive inexportable inexposable inexposure inexpress inexpressibility inexpressible inexpressibleness inexpressibles inexpressibly inexpressive inexpressively inexpressiveness inexpugnability inexpugnable inexpugnableness inexpugnably inexpungeable inexpungible inextant inextended inextensibility inextensible inextensile inextension inextensional inextensive inexterminable inextinct inextinguishable inextinguishably inextirpable inextirpableness inextricability inextricable inextricableness inextricably inface infall infallibilism infallibilist infallibility infallible infallibleness infallibly infalling infalsificable infame infamiliar infamiliarity infamize infamonize infamous infamously infamousness infamy infancy infand infandous infang infanglement infangthief infant infanta infantado infante infanthood infanticidal infanticide infantile infantilism infantility infantine infantlike infantry infantryman infarct infarctate infarcted infarction infare infatuate infatuatedly infatuation infatuator infaust infeasibility infeasible infeasibleness infect infectant infected infectedness infecter infectible infection infectionist infectious infectiously infectiousness infective infectiveness infectivity infector infectress infectuous infecund infecundity infeed infeft infeftment infelicific infelicitous infelicitously infelicitousness infelicity infelonious infelt infeminine infer inferable inference inferent inferential inferentialism inferentialist inferentially inferior inferiorism inferiority inferiorize inferiorly infern infernal infernalism infernality infernalize infernally infernalry infernalship inferno inferoanterior inferobranchiate inferofrontal inferolateral inferomedian inferoposterior inferrer inferribility inferrible inferringly infertile infertilely infertileness infertility infest infestant infestation infester infestive infestivity infestment infeudation infibulate infibulation inficete infidel infidelic infidelical infidelism infidelistic infidelity infidelize infidelly infield infielder infieldsman infighter infighting infill infilling infilm infilter infiltrate infiltration infiltrative infinitant infinitarily infinitary infinitate infinitation infinite infinitely infiniteness infinitesimal infinitesimalism infinitesimality infinitesimally infinitesimalness infiniteth infinitieth infinitival infinitivally infinitive infinitively infinitize infinitude infinituple infinity infirm infirmarer infirmaress infirmarian infirmary infirmate infirmation infirmative infirmity infirmly infirmness infissile infit infitter infix infixion inflame inflamed inflamedly inflamedness inflamer inflaming inflamingly inflammability inflammable inflammableness inflammably inflammation inflammative inflammatorily inflammatory inflatable inflate inflated inflatedly inflatedness inflater inflatile inflatingly inflation inflationary inflationism inflationist inflative inflatus inflect inflected inflectedness inflection inflectional inflectionally inflectionless inflective inflector inflex inflexed inflexibility inflexible inflexibleness inflexibly inflexive inflict inflictable inflicter infliction inflictive inflood inflorescence inflorescent inflow inflowering influence influenceable influencer influencive influent influential influentiality influentially influenza influenzal influenzic influx influxable influxible influxibly influxion influxionism infold infolder infolding infoldment infoliate inform informable informal informality informalize informally informant information informational informative informatively informatory informed informedly informer informidable informingly informity infortiate infortitude infortunate infortunately infortunateness infortune infra infrabasal infrabestial infrabranchial infrabuccal infracanthal infracaudal infracelestial infracentral infracephalic infraclavicle infraclavicular infraclusion infraconscious infracortical infracostal infracostalis infracotyloid infract infractible infraction infractor infradentary infradiaphragmatic infragenual infraglacial infraglenoid infraglottic infragrant infragular infrahuman infrahyoid infralabial infralapsarian infralapsarianism infralinear infralittoral inframammary inframammillary inframandibular inframarginal inframaxillary inframedian inframercurial inframercurian inframolecular inframontane inframundane infranatural infranaturalism infrangibility infrangible infrangibleness infrangibly infranodal infranuclear infraoccipital infraocclusion infraocular infraoral infraorbital infraordinary infrapapillary infrapatellar infraperipherial infrapose infraposition infraprotein infrapubian infraradular infrared infrarenal infrarenally infrarimal infrascapular infrascapularis infrascientific infraspinal infraspinate infraspinatus infraspinous infrastapedial infrasternal infrastigmatal infrastipular infrastructure infrasutral infratemporal infraterrene infraterritorial infrathoracic infratonsillar infratracheal infratrochanteric infratrochlear infratubal infraturbinal infravaginal infraventral infrequency infrequent infrequently infrigidate infrigidation infrigidative infringe infringement infringer infringible infructiferous infructuose infructuosity infructuous infructuously infrugal infrustrable infrustrably infula infumate infumated infumation infundibular infundibulate infundibuliform infundibulum infuriate infuriately infuriatingly infuriation infuscate infuscation infuse infusedly infuser infusibility infusible infusibleness infusile infusion infusionism infusionist infusive infusorial infusorian infusoriform infusorioid infusorium infusory ing ingallantry ingate ingather ingatherer ingathering ingeldable ingeminate ingemination ingenerability ingenerable ingenerably ingenerate ingenerately ingeneration ingenerative ingeniosity ingenious ingeniously ingeniousness ingenit ingenue ingenuity ingenuous ingenuously ingenuousness ingerminate ingest ingesta ingestible ingestion ingestive ingiver ingiving ingle inglenook ingleside inglobate inglobe inglorious ingloriously ingloriousness inglutition ingluvial ingluvies ingluviitis ingoing ingot ingotman ingraft ingrain ingrained ingrainedly ingrainedness ingrammaticism ingrandize ingrate ingrateful ingratefully ingratefulness ingrately ingratiate ingratiating ingratiatingly ingratiation ingratiatory ingratitude ingravescent ingravidate ingravidation ingredient ingress ingression ingressive ingressiveness ingross ingrow ingrown ingrownness ingrowth inguen inguinal inguinoabdominal inguinocrural inguinocutaneous inguinodynia inguinolabial inguinoscrotal ingulf ingulfment ingurgitate ingurgitation inhabit inhabitability inhabitable inhabitancy inhabitant inhabitation inhabitative inhabitativeness inhabited inhabitedness inhabiter inhabitiveness inhabitress inhalant inhalation inhalator inhale inhalement inhalent inhaler inharmonic inharmonical inharmonious inharmoniously inharmoniousness inharmony inhaul inhauler inhaust inhaustion inhearse inheaven inhere inherence inherency inherent inherently inherit inheritability inheritable inheritableness inheritably inheritage inheritance inheritor inheritress inheritrice inheritrix inhesion inhiate inhibit inhibitable inhibiter inhibition inhibitionist inhibitive inhibitor inhibitory inhomogeneity inhomogeneous inhomogeneously inhospitable inhospitableness inhospitably inhospitality inhuman inhumane inhumanely inhumanism inhumanity inhumanize inhumanly inhumanness inhumate inhumation inhumationist inhume inhumer inhumorous inhumorously inial inidoneity inidoneous inimicable inimical inimicality inimically inimicalness inimitability inimitable inimitableness inimitably iniome iniomous inion iniquitable iniquitably iniquitous iniquitously iniquitousness iniquity inirritability inirritable inirritant inirritative inissuable initial initialer initialist initialize initially initiant initiary initiate initiation initiative initiatively initiator initiatorily initiatory initiatress initiatrix initis initive inject injectable injection injector injelly injudicial injudicially injudicious injudiciously injudiciousness injunct injunction injunctive injunctively injurable injure injured injuredly injuredness injurer injurious injuriously injuriousness injury injustice ink inkberry inkbush inken inker inket inkfish inkholder inkhorn inkhornism inkhornist inkhornize inkhornizer inkindle inkiness inkish inkle inkless inklike inkling inkmaker inkmaking inknot inkosi inkpot inkroot inks inkshed inkslinger inkslinging inkstain inkstand inkstandish inkstone inkweed inkwell inkwood inkwriter inky inlagation inlaid inlaik inlake inland inlander inlandish inlaut inlaw inlawry inlay inlayer inlaying inleague inleak inleakage inlet inlier inlook inlooker inly inlying inmate inmeats inmixture inmost inn innascibility innascible innate innately innateness innatism innative innatural innaturality innaturally inneity inner innerly innermore innermost innermostly innerness innervate innervation innervational innerve inness innest innet innholder inning inninmorite innkeeper innless innocence innocency innocent innocently innocentness innocuity innocuous innocuously innocuousness innominable innominables innominata innominate innominatum innovant innovate innovation innovational innovationist innovative innovator innovatory innoxious innoxiously innoxiousness innuendo innumerability innumerable innumerableness innumerably innumerous innutrient innutrition innutritious innutritive innyard inobedience inobedient inobediently inoblast inobnoxious inobscurable inobservable inobservance inobservancy inobservant inobservantly inobservantness inobservation inobtainable inobtrusive inobtrusively inobtrusiveness inobvious inoccupation inochondritis inochondroma inoculability inoculable inoculant inocular inoculate inoculation inoculative inoculator inoculum inocystoma inocyte inodorous inodorously inodorousness inoepithelioma inoffending inoffensive inoffensively inoffensiveness inofficial inofficially inofficiosity inofficious inofficiously inofficiousness inogen inogenesis inogenic inogenous inoglia inohymenitic inolith inoma inominous inomyoma inomyositis inomyxoma inone inoneuroma inoperable inoperative inoperativeness inopercular inoperculate inopinable inopinate inopinately inopine inopportune inopportunely inopportuneness inopportunism inopportunist inopportunity inoppressive inoppugnable inopulent inorb inorderly inordinacy inordinary inordinate inordinately inordinateness inorganic inorganical inorganically inorganizable inorganization inorganized inoriginate inornate inosclerosis inoscopy inosculate inosculation inosic inosin inosinic inosite inositol inostensible inostensibly inotropic inower inoxidability inoxidable inoxidizable inoxidize inparabola inpardonable inpatient inpayment inpensioner inphase inpolygon inpolyhedron inport inpour inpush input inquaintance inquartation inquest inquestual inquiet inquietation inquietly inquietness inquietude inquiline inquilinism inquilinity inquilinous inquinate inquination inquirable inquirant inquiration inquire inquirendo inquirent inquirer inquiring inquiringly inquiry inquisite inquisition inquisitional inquisitionist inquisitive inquisitively inquisitiveness inquisitor inquisitorial inquisitorially inquisitorialness inquisitorious inquisitorship inquisitory inquisitress inquisitrix inquisiturient inradius inreality inrigged inrigger inrighted inring inro inroad inroader inroll inrooted inrub inrun inrunning inruption inrush insack insagacity insalivate insalivation insalubrious insalubrity insalutary insalvability insalvable insane insanely insaneness insanify insanitariness insanitary insanitation insanity insapiency insapient insatiability insatiable insatiableness insatiably insatiate insatiated insatiately insatiateness insatiety insatisfaction insatisfactorily insaturable inscenation inscibile inscience inscient inscribable inscribableness inscribe inscriber inscript inscriptible inscription inscriptional inscriptioned inscriptionist inscriptionless inscriptive inscriptively inscriptured inscroll inscrutability inscrutable inscrutableness inscrutables inscrutably insculp insculpture insea inseam insect insectan insectarium insectary insectean insected insecticidal insecticide insectiferous insectiform insectifuge insectile insectine insection insectival insectivore insectivorous insectlike insectmonger insectologer insectologist insectology insectproof insecure insecurely insecureness insecurity insee inseer inselberg inseminate insemination insenescible insensate insensately insensateness insense insensibility insensibilization insensibilize insensibilizer insensible insensibleness insensibly insensitive insensitiveness insensitivity insensuous insentience insentiency insentient inseparability inseparable inseparableness inseparably inseparate inseparately insequent insert insertable inserted inserter insertion insertional insertive inserviceable insessor insessorial inset insetter inseverable inseverably inshave insheathe inshell inshining inship inshoe inshoot inshore inside insider insidiosity insidious insidiously insidiousness insight insightful insigne insignia insignificance insignificancy insignificant insignificantly insimplicity insincere insincerely insincerity insinking insinuant insinuate insinuating insinuatingly insinuation insinuative insinuatively insinuativeness insinuator insinuatory insinuendo insipid insipidity insipidly insipidness insipience insipient insipiently insist insistence insistency insistent insistently insister insistingly insistive insititious insnare insnarement insnarer insobriety insociability insociable insociableness insociably insocial insocially insofar insolate insolation insole insolence insolency insolent insolently insolentness insolid insolidity insolubility insoluble insolubleness insolubly insolvability insolvable insolvably insolvence insolvency insolvent insomnia insomniac insomnious insomnolence insomnolency insomnolent insomuch insonorous insooth insorb insorbent insouciance insouciant insouciantly insoul inspan inspeak inspect inspectability inspectable inspectingly inspection inspectional inspectioneer inspective inspector inspectoral inspectorate inspectorial inspectorship inspectress inspectrix inspheration insphere inspirability inspirable inspirant inspiration inspirational inspirationalism inspirationally inspirationist inspirative inspirator inspiratory inspiratrix inspire inspired inspiredly inspirer inspiring inspiringly inspirit inspiriter inspiriting inspiritingly inspiritment inspirometer inspissant inspissate inspissation inspissator inspissosis inspoke inspoken inspreith instability instable install installant installation installer installment instance instancy instanding instant instantaneity instantaneous instantaneously instantaneousness instanter instantial instantly instantness instar instate instatement instaurate instauration instaurator instead instealing insteam insteep instellation instep instigant instigate instigatingly instigation instigative instigator instigatrix instill instillation instillator instillatory instiller instillment instinct instinctive instinctively instinctivist instinctivity instinctual instipulate institor institorial institorian institory institute instituter institution institutional institutionalism institutionalist institutionality institutionalization institutionalize institutionally institutionary institutionize institutive institutively institutor institutress institutrix instonement instratified instreaming instrengthen instressed instroke instruct instructed instructedly instructedness instructer instructible instruction instructional instructionary instructive instructively instructiveness instructor instructorship instructress instrument instrumental instrumentalism instrumentalist instrumentality instrumentalize instrumentally instrumentary instrumentate instrumentation instrumentative instrumentist instrumentman insuavity insubduable insubjection insubmergible insubmersible insubmission insubmissive insubordinate insubordinately insubordinateness insubordination insubstantial insubstantiality insubstantiate insubstantiation insubvertible insuccess insuccessful insucken insuetude insufferable insufferableness insufferably insufficience insufficiency insufficient insufficiently insufflate insufflation insufflator insula insulance insulant insular insularism insularity insularize insularly insulary insulate insulated insulating insulation insulator insulin insulize insulse insulsity insult insultable insultant insultation insulter insulting insultingly insultproof insunk insuperability insuperable insuperableness insuperably insupportable insupportableness insupportably insupposable insuppressible insuppressibly insuppressive insurability insurable insurance insurant insure insured insurer insurge insurgence insurgency insurgent insurgentism insurgescence insurmountability insurmountable insurmountableness insurmountably insurpassable insurrect insurrection insurrectional insurrectionally insurrectionary insurrectionism insurrectionist insurrectionize insurrectory insusceptibility insusceptible insusceptibly insusceptive inswamp inswarming insweeping inswell inswept inswing inswinger intabulate intact intactile intactly intactness intagliated intagliation intaglio intagliotype intake intaker intangibility intangible intangibleness intangibly intarissable intarsia intarsiate intarsist intastable intaxable intechnicality integer integrability integrable integral integrality integralization integralize integrally integrand integrant integraph integrate integration integrative integrator integrifolious integrious integriously integripalliate integrity integrodifferential integropallial integropalliate integument integumental integumentary integumentation inteind intellect intellectation intellected intellectible intellection intellective intellectively intellectual intellectualism intellectualist intellectualistic intellectualistically intellectuality intellectualization intellectualize intellectualizer intellectually intellectualness intelligence intelligenced intelligencer intelligency intelligent intelligential intelligently intelligentsia intelligibility intelligible intelligibleness intelligibly intelligize intemerate intemerately intemerateness intemeration intemperable intemperably intemperament intemperance intemperate intemperately intemperateness intemperature intempestive intempestively intempestivity intemporal intemporally intenability intenable intenancy intend intendance intendancy intendant intendantism intendantship intended intendedly intendedness intendence intender intendible intending intendingly intendit intendment intenerate inteneration intenible intensate intensation intensative intense intensely intenseness intensification intensifier intensify intension intensional intensionally intensitive intensity intensive intensively intensiveness intent intention intentional intentionalism intentionality intentionally intentioned intentionless intentive intentively intentiveness intently intentness inter interabsorption interacademic interaccessory interaccuse interacinar interacinous interact interaction interactional interactionism interactionist interactive interactivity interadaptation interadditive interadventual interaffiliation interagency interagent interagglutinate interagglutination interagree interagreement interalar interallied interally interalveolar interambulacral interambulacrum interamnian interangular interanimate interannular interantagonism interantennal interantennary interapophyseal interapplication interarboration interarch interarcualis interarmy interarticular interartistic interarytenoid interassociation interassure interasteroidal interastral interatomic interatrial interattrition interaulic interaural interauricular interavailability interavailable interaxal interaxial interaxillary interaxis interbalance interbanded interbank interbedded interbelligerent interblend interbody interbonding interborough interbourse interbrachial interbrain interbranch interbranchial interbreath interbreed interbrigade interbring interbronchial intercadence intercadent intercalare intercalarily intercalarium intercalary intercalate intercalation intercalative intercalatory intercale intercalm intercanal intercanalicular intercapillary intercardinal intercarotid intercarpal intercarpellary intercarrier intercartilaginous intercaste intercatenated intercausative intercavernous intercede interceder intercellular intercensal intercentral intercentrum intercept intercepter intercepting interception interceptive interceptor interceptress intercerebral intercession intercessional intercessionary intercessionment intercessive intercessor intercessorial intercessory interchaff interchange interchangeability interchangeable interchangeableness interchangeably interchanger interchapter intercharge interchase intercheck interchoke interchondral interchurch interciliary intercilium intercircle intercirculate intercirculation intercision intercitizenship intercity intercivic intercivilization interclash interclasp interclass interclavicle interclavicular interclerical intercloud interclub intercoastal intercoccygeal intercoccygean intercohesion intercollege intercollegian intercollegiate intercolline intercolonial intercolonially intercolonization intercolumn intercolumnal intercolumnar intercolumniation intercom intercombat intercombination intercombine intercome intercommission intercommon intercommonable intercommonage intercommoner intercommunal intercommune intercommuner intercommunicability intercommunicable intercommunicate intercommunication intercommunicative intercommunicator intercommunion intercommunity intercompany intercomparable intercompare intercomparison intercomplexity intercomplimentary interconal interconciliary intercondenser intercondylar intercondylic intercondyloid interconfessional interconfound interconnect interconnection intercontinental intercontorted intercontradiction intercontradictory interconversion interconvertibility interconvertible interconvertibly intercooler intercooling intercoracoid intercorporate intercorpuscular intercorrelate intercorrelation intercortical intercosmic intercosmically intercostal intercostally intercostobrachial intercostohumeral intercotylar intercounty intercourse intercoxal intercranial intercreate intercrescence intercrinal intercrop intercross intercrural intercrust intercrystalline intercrystallization intercrystallize intercultural interculture intercurl intercurrence intercurrent intercurrently intercursation intercuspidal intercutaneous intercystic interdash interdebate interdenominational interdental interdentally interdentil interdepartmental interdepartmentally interdepend interdependable interdependence interdependency interdependent interdependently interderivative interdespise interdestructive interdestructiveness interdetermination interdetermine interdevour interdict interdiction interdictive interdictor interdictory interdictum interdifferentiation interdiffuse interdiffusion interdiffusive interdiffusiveness interdigital interdigitate interdigitation interdine interdiscal interdispensation interdistinguish interdistrict interdivision interdome interdorsal interdrink intereat interelectrode interelectrodic interempire interenjoy interentangle interentanglement interepidemic interepimeral interepithelial interequinoctial interessee interest interested interestedly interestedness interester interesting interestingly interestingness interestless interestuarine interface interfacial interfactional interfamily interfascicular interfault interfector interfederation interfemoral interfenestral interfenestration interferant interfere interference interferent interferential interferer interfering interferingly interferingness interferometer interferometry interferric interfertile interfertility interfibrillar interfibrillary interfibrous interfilamentar interfilamentary interfilamentous interfilar interfiltrate interfinger interflange interflashing interflow interfluence interfluent interfluminal interfluous interfluve interfluvial interflux interfold interfoliaceous interfoliar interfoliate interfollicular interforce interfraternal interfraternity interfret interfretted interfriction interfrontal interfruitful interfulgent interfuse interfusion interganglionic intergenerant intergenerating intergeneration intergential intergesture intergilt interglacial interglandular interglobular interglyph intergossip intergovernmental intergradation intergrade intergradient intergraft intergranular intergrapple intergrave intergroupal intergrow intergrown intergrowth intergular intergyral interhabitation interhemal interhemispheric interhostile interhuman interhyal interhybridize interim interimist interimistic interimistical interimistically interimperial interincorporation interindependence interindicate interindividual interinfluence interinhibition interinhibitive interinsert interinsular interinsurance interinsurer interinvolve interionic interior interiority interiorize interiorly interiorness interirrigation interisland interjacence interjacency interjacent interjaculate interjaculatory interjangle interjealousy interject interjection interjectional interjectionalize interjectionally interjectionary interjectionize interjectiveness interjector interjectorily interjectory interjectural interjoin interjoist interjudgment interjunction interkinesis interkinetic interknit interknot interknow interknowledge interlaboratory interlace interlaced interlacedly interlacement interlacery interlacustrine interlaid interlake interlamellar interlamellation interlaminar interlaminate interlamination interlanguage interlap interlapse interlard interlardation interlardment interlatitudinal interlaudation interlay interleaf interleague interleave interleaver interlibel interlibrary interlie interligamentary interligamentous interlight interlimitation interline interlineal interlineally interlinear interlinearily interlinearly interlineary interlineate interlineation interlinement interliner interlingual interlinguist interlinguistic interlining interlink interloan interlobar interlobate interlobular interlocal interlocally interlocate interlocation interlock interlocker interlocular interloculus interlocution interlocutive interlocutor interlocutorily interlocutory interlocutress interlocutrice interlocutrix interloop interlope interloper interlot interlucation interlucent interlude interluder interludial interlunar interlunation interlying intermalleolar intermammary intermammillary intermandibular intermanorial intermarginal intermarine intermarriage intermarriageable intermarry intermason intermastoid intermat intermatch intermaxilla intermaxillar intermaxillary intermaze intermeasurable intermeasure intermeddle intermeddlement intermeddler intermeddlesome intermeddlesomeness intermeddling intermeddlingly intermediacy intermediae intermedial intermediary intermediate intermediately intermediateness intermediation intermediator intermediatory intermedium intermedius intermeet intermelt intermembral intermembranous intermeningeal intermenstrual intermenstruum interment intermental intermention intermercurial intermesenterial intermesenteric intermesh intermessage intermessenger intermetacarpal intermetallic intermetameric intermetatarsal intermew intermewed intermewer intermezzo intermigration interminability interminable interminableness interminably interminant interminate intermine intermingle intermingledom interminglement interminister interministerial interministerium intermission intermissive intermit intermitted intermittedly intermittence intermittency intermittent intermittently intermitter intermitting intermittingly intermix intermixedly intermixtly intermixture intermobility intermodification intermodillion intermodulation intermolar intermolecular intermomentary intermontane intermorainic intermotion intermountain intermundane intermundial intermundian intermundium intermunicipal intermunicipality intermural intermuscular intermutation intermutual intermutually intermutule intern internal internality internalization internalize internally internalness internals internarial internasal internation international internationalism internationalist internationality internationalization internationalize internationally interneciary internecinal internecine internecion internecive internee internetted interneural interneuronic internidal internist internment internobasal internodal internode internodial internodian internodium internodular internship internuclear internuncial internunciary internunciatory internuncio internuncioship internuncius internuptial interobjective interoceanic interoceptive interoceptor interocular interoffice interolivary interopercle interopercular interoperculum interoptic interorbital interorbitally interoscillate interosculant interosculate interosculation interosseal interosseous interownership interpage interpalatine interpalpebral interpapillary interparenchymal interparental interparenthetical interparenthetically interparietal interparietale interparliament interparliamentary interparoxysmal interparty interpause interpave interpeal interpectoral interpeduncular interpel interpellant interpellate interpellation interpellator interpenetrable interpenetrant interpenetrate interpenetration interpenetrative interpenetratively interpermeate interpersonal interpervade interpetaloid interpetiolar interpetiolary interphalangeal interphase interphone interpiece interpilaster interpilastering interplacental interplait interplanetary interplant interplanting interplay interplea interplead interpleader interpledge interpleural interplical interplicate interplication interplight interpoint interpolable interpolar interpolary interpolate interpolater interpolation interpolative interpolatively interpolator interpole interpolitical interpolity interpollinate interpolymer interpone interportal interposable interposal interpose interposer interposing interposingly interposition interposure interpour interprater interpressure interpret interpretability interpretable interpretableness interpretably interpretament interpretation interpretational interpretative interpretatively interpreter interpretership interpretive interpretively interpretorial interpretress interprismatic interproduce interprofessional interproglottidal interproportional interprotoplasmic interprovincial interproximal interproximate interpterygoid interpubic interpulmonary interpunct interpunction interpunctuate interpunctuation interpupillary interquarrel interquarter interrace interracial interracialism interradial interradially interradiate interradiation interradium interradius interrailway interramal interramicorn interramification interreceive interreflection interregal interregimental interregional interregna interregnal interregnum interreign interrelate interrelated interrelatedly interrelatedness interrelation interrelationship interreligious interrenal interrenalism interrepellent interrepulsion interrer interresponsibility interresponsible interreticular interreticulation interrex interrhyme interright interriven interroad interrogability interrogable interrogant interrogate interrogatedness interrogatee interrogatingly interrogation interrogational interrogative interrogatively interrogator interrogatorily interrogatory interrogatrix interrogee interroom interrule interrun interrupt interrupted interruptedly interruptedness interrupter interruptible interrupting interruptingly interruption interruptive interruptively interruptor interruptory intersale intersalute interscapilium interscapular interscapulum interscene interscholastic interschool interscience interscribe interscription interseaboard interseamed intersect intersectant intersection intersectional intersegmental interseminal intersentimental interseptal intersertal intersesamoid intersession intersessional interset intersex intersexual intersexualism intersexuality intershade intershifting intershock intershoot intershop intersidereal intersituate intersocial intersocietal intersociety intersole intersolubility intersoluble intersomnial intersomnious intersonant intersow interspace interspatial interspatially interspeaker interspecial interspecific interspersal intersperse interspersedly interspersion interspheral intersphere interspicular interspinal interspinalis interspinous interspiral interspiration intersporal intersprinkle intersqueeze interstadial interstage interstaminal interstapedial interstate interstation interstellar interstellary intersterile intersterility intersternal interstice intersticed interstimulate interstimulation interstitial interstitially interstitious interstratification interstratify interstreak interstream interstreet interstrial interstriation interstrive intersubjective intersubsistence intersubstitution intersuperciliary intersusceptation intersystem intersystematical intertalk intertangle intertanglement intertarsal interteam intertentacular intertergal interterminal interterritorial intertessellation intertexture interthing interthreaded interthronging intertidal intertie intertill intertillage intertinge intertissued intertone intertongue intertonic intertouch intertown intertrabecular intertrace intertrade intertrading intertraffic intertragian intertransformability intertransformable intertransmissible intertransmission intertranspicuous intertransversal intertransversalis intertransversary intertransverse intertrappean intertribal intertriginous intertriglyph intertrigo intertrinitarian intertrochanteric intertropic intertropical intertropics intertrude intertuberal intertubercular intertubular intertwin intertwine intertwinement intertwining intertwiningly intertwist intertwistingly interungular interungulate interunion interuniversity interurban interureteric intervaginal interval intervale intervalley intervallic intervallum intervalvular intervarietal intervary intervascular intervein interveinal intervenant intervene intervener intervenience interveniency intervenient intervenium intervention interventional interventionism interventionist interventive interventor interventral interventralia interventricular intervenular interverbal interversion intervert intervertebra intervertebral intervertebrally intervesicular interview interviewable interviewee interviewer intervillous intervisibility intervisible intervisit intervisitation intervital intervocal intervocalic intervolute intervolution intervolve interwar interweave interweavement interweaver interweaving interweavingly interwed interweld interwhiff interwhile interwhistle interwind interwish interword interwork interworks interworld interworry interwound interwove interwoven interwovenly interwrap interwreathe interwrought interxylary interzonal interzone interzooecial interzygapophysial intestable intestacy intestate intestation intestinal intestinally intestine intestineness intestiniform intestinovesical intext intextine intexture inthrall inthrallment inthrong inthronistic inthronization inthronize inthrow inthrust intil intima intimacy intimal intimate intimately intimateness intimater intimation intimidate intimidation intimidator intimidatory intimidity intimity intinction intine intitule into intoed intolerability intolerable intolerableness intolerably intolerance intolerancy intolerant intolerantly intolerantness intolerated intolerating intoleration intonable intonate intonation intonator intone intonement intoner intoothed intorsion intort intortillage intown intoxation intoxicable intoxicant intoxicate intoxicated intoxicatedly intoxicatedness intoxicating intoxicatingly intoxication intoxicative intoxicator intrabiontic intrabranchial intrabred intrabronchial intrabuccal intracalicular intracanalicular intracanonical intracapsular intracardiac intracardial intracarpal intracarpellary intracartilaginous intracellular intracellularly intracephalic intracerebellar intracerebral intracerebrally intracervical intrachordal intracistern intracity intraclitelline intracloacal intracoastal intracoelomic intracolic intracollegiate intracommunication intracompany intracontinental intracorporeal intracorpuscular intracortical intracosmic intracosmical intracosmically intracostal intracranial intracranially intractability intractable intractableness intractably intractile intracutaneous intracystic intrada intradepartmental intradermal intradermally intradermic intradermically intradermo intradistrict intradivisional intrados intraduodenal intradural intraecclesiastical intraepiphyseal intraepithelial intrafactory intrafascicular intrafissural intrafistular intrafoliaceous intraformational intrafusal intragastric intragemmal intraglacial intraglandular intraglobular intragroup intragroupal intragyral intrahepatic intrahyoid intraimperial intrait intrajugular intralamellar intralaryngeal intralaryngeally intraleukocytic intraligamentary intraligamentous intralingual intralobar intralobular intralocular intralogical intralumbar intramammary intramarginal intramastoid intramatrical intramatrically intramedullary intramembranous intrameningeal intramental intrametropolitan intramolecular intramontane intramorainic intramundane intramural intramuralism intramuscular intramuscularly intramyocardial intranarial intranasal intranatal intranational intraneous intraneural intranidal intranquil intranquillity intranscalency intranscalent intransferable intransformable intransfusible intransgressible intransient intransigency intransigent intransigentism intransigentist intransigently intransitable intransitive intransitively intransitiveness intransitivity intranslatable intransmissible intransmutability intransmutable intransparency intransparent intrant intranuclear intraoctave intraocular intraoral intraorbital intraorganization intraossal intraosseous intraosteal intraovarian intrapair intraparenchymatous intraparietal intraparochial intraparty intrapelvic intrapericardiac intrapericardial intraperineal intraperiosteal intraperitoneal intraperitoneally intrapetiolar intraphilosophic intrapial intraplacental intraplant intrapleural intrapolar intrapontine intraprostatic intraprotoplasmic intrapsychic intrapsychical intrapsychically intrapulmonary intrapyretic intrarachidian intrarectal intrarelation intrarenal intraretinal intrarhachidian intraschool intrascrotal intrasegmental intraselection intrasellar intraseminal intraseptal intraserous intrashop intraspecific intraspinal intrastate intrastromal intrasusception intrasynovial intratarsal intratelluric intraterritorial intratesticular intrathecal intrathoracic intrathyroid intratomic intratonsillar intratrabecular intratracheal intratracheally intratropical intratubal intratubular intratympanic intravaginal intravalvular intravasation intravascular intravenous intravenously intraventricular intraverbal intraversable intravertebral intravertebrally intravesical intravital intravitelline intravitreous intraxylary intreat intrench intrenchant intrencher intrenchment intrepid intrepidity intrepidly intrepidness intricacy intricate intricately intricateness intrication intrigant intrigue intrigueproof intriguer intriguery intriguess intriguing intriguingly intrine intrinse intrinsic intrinsical intrinsicality intrinsically intrinsicalness introactive introceptive introconversion introconvertibility introconvertible introdden introduce introducee introducement introducer introducible introduction introductive introductively introductor introductorily introductoriness introductory introductress introflex introflexion introgression introgressive introinflection introit introitus introject introjection introjective intromissibility intromissible intromission intromissive intromit intromittence intromittent intromitter intropression intropulsive introreception introrsal introrse introrsely introsensible introsentient introspect introspectable introspection introspectional introspectionism introspectionist introspective introspectively introspectiveness introspectivism introspectivist introspector introsuction introsuscept introsusception introthoracic introtraction introvenient introverse introversibility introversible introversion introversive introversively introvert introverted introvertive introvision introvolution intrudance intrude intruder intruding intrudingly intrudress intruse intrusion intrusional intrusionism intrusionist intrusive intrusively intrusiveness intrust intubate intubation intubationist intubator intube intue intuent intuicity intuit intuitable intuition intuitional intuitionalism intuitionalist intuitionally intuitionism intuitionist intuitionistic intuitionless intuitive intuitively intuitiveness intuitivism intuitivist intumesce intumescence intumescent inturbidate inturn inturned inturning intussuscept intussusception intussusceptive intwist inula inulaceous inulase inulin inuloid inumbrate inumbration inunct inunction inunctum inunctuosity inunctuous inundable inundant inundate inundation inundator inundatory inunderstandable inurbane inurbanely inurbaneness inurbanity inure inured inuredness inurement inurn inusitate inusitateness inusitation inustion inutile inutilely inutility inutilized inutterable invaccinate invaccination invadable invade invader invaginable invaginate invagination invalescence invalid invalidate invalidation invalidator invalidcy invalidhood invalidish invalidism invalidity invalidly invalidness invalidship invalorous invaluable invaluableness invaluably invalued invariability invariable invariableness invariably invariance invariancy invariant invariantive invariantively invariantly invaried invasion invasionist invasive invecked invected invection invective invectively invectiveness invectivist invector inveigh inveigher inveigle inveiglement inveigler inveil invein invendibility invendible invendibleness invenient invent inventable inventary inventer inventful inventibility inventible inventibleness invention inventional inventionless inventive inventively inventiveness inventor inventoriable inventorial inventorially inventory inventress inventurous inveracious inveracity inverisimilitude inverity inverminate invermination invernacular inversable inversatile inverse inversed inversedly inversely inversion inversionist inversive invert invertase invertebracy invertebral invertebrate invertebrated inverted invertedly invertend inverter invertibility invertible invertile invertin invertive invertor invest investable investible investigable investigatable investigate investigating investigatingly investigation investigational investigative investigator investigatorial investigatory investitive investitor investiture investment investor inveteracy inveterate inveterately inveterateness inviability invictive invidious invidiously invidiousness invigilance invigilancy invigilation invigilator invigor invigorant invigorate invigorating invigoratingly invigoratingness invigoration invigorative invigoratively invigorator invinate invination invincibility invincible invincibleness invincibly inviolability inviolable inviolableness inviolably inviolacy inviolate inviolated inviolately inviolateness invirile invirility invirtuate inviscate inviscation inviscid inviscidity invised invisibility invisible invisibleness invisibly invitable invital invitant invitation invitational invitatory invite invitee invitement inviter invitiate inviting invitingly invitingness invitress invitrifiable invivid invocable invocant invocate invocation invocative invocator invocatory invoice invoke invoker involatile involatility involucel involucellate involucellated involucral involucrate involucre involucred involucriform involucrum involuntarily involuntariness involuntary involute involuted involutedly involutely involution involutional involutionary involutorial involutory involve involved involvedly involvedness involvement involvent involver invulnerability invulnerable invulnerableness invulnerably invultuation inwale inwall inwandering inward inwardly inwardness inwards inweave inwedged inweed inweight inwick inwind inwit inwith inwood inwork inworn inwound inwoven inwrap inwrapment inwreathe inwrit inwrought inyoite inyoke io iodate iodation iodhydrate iodhydric iodhydrin iodic iodide iodiferous iodinate iodination iodine iodinium iodinophil iodinophilic iodinophilous iodism iodite iodization iodize iodizer iodo iodobehenate iodobenzene iodobromite iodocasein iodochloride iodochromate iodocresol iododerma iodoethane iodoform iodogallicin iodohydrate iodohydric iodohydrin iodol iodomercurate iodomercuriate iodomethane iodometric iodometrical iodometry iodonium iodopsin iodoso iodosobenzene iodospongin iodotannic iodotherapy iodothyrin iodous iodoxy iodoxybenzene iodyrite iolite ion ionic ionium ionizable ionization ionize ionizer ionogen ionogenic ionone ionosphere ionospheric iontophoresis iota iotacism iotacismus iotacist iotization iotize ipecac ipecacuanha ipecacuanhic ipid ipil ipomea ipomoein ipseand ipsedixitish ipsedixitism ipsedixitist ipseity ipsilateral iracund iracundity iracundulous irade irascent irascibility irascible irascibleness irascibly irate irately ire ireful irefully irefulness ireless irenarch irene irenic irenical irenically irenicism irenicist irenicon irenics irenicum irian irid iridaceous iridadenosis iridal iridalgia iridate iridauxesis iridectome iridectomize iridectomy iridectropium iridemia iridencleisis iridentropium irideous irideremia irides iridesce iridescence iridescency iridescent iridescently iridial iridian iridiate iridic iridical iridin iridine iridiocyte iridiophore iridioplatinum iridious iridite iridium iridization iridize iridoavulsion iridocapsulitis iridocele iridoceratitic iridochoroiditis iridocoloboma iridoconstrictor iridocyclitis iridocyte iridodesis iridodiagnosis iridodialysis iridodonesis iridokinesia iridomalacia iridomotor iridoncus iridoparalysis iridophore iridoplegia iridoptosis iridopupillary iridorhexis iridosclerotomy iridosmine iridosmium iridotasis iridotome iridotomy iris irisated irisation iriscope irised irisin irislike irisroot iritic iritis irk irksome irksomely irksomeness irok iroko iron ironback ironbark ironbound ironbush ironclad irone ironer ironfisted ironflower ironhanded ironhandedly ironhandedness ironhard ironhead ironheaded ironhearted ironheartedly ironheartedness ironical ironically ironicalness ironice ironish ironism ironist ironize ironless ironlike ironly ironmaker ironmaking ironman ironmaster ironmonger ironmongering ironmongery ironness ironshod ironshot ironside ironsided ironsides ironsmith ironstone ironware ironweed ironwood ironwork ironworked ironworker ironworking ironworks ironwort irony irradiance irradiancy irradiant irradiate irradiated irradiatingly irradiation irradiative irradiator irradicable irradicate irrarefiable irrationability irrationable irrationably irrational irrationalism irrationalist irrationalistic irrationality irrationalize irrationally irrationalness irreality irrealizable irrebuttable irreceptive irreceptivity irreciprocal irreciprocity irreclaimability irreclaimable irreclaimableness irreclaimably irreclaimed irrecognition irrecognizability irrecognizable irrecognizably irrecognizant irrecollection irreconcilability irreconcilable irreconcilableness irreconcilably irreconcile irreconcilement irreconciliability irreconciliable irreconciliableness irreconciliably irreconciliation irrecordable irrecoverable irrecoverableness irrecoverably irrecusable irrecusably irredeemability irredeemable irredeemableness irredeemably irredeemed irredenta irredential irredressibility irredressible irredressibly irreducibility irreducible irreducibleness irreducibly irreductibility irreductible irreduction irreferable irreflection irreflective irreflectively irreflectiveness irreflexive irreformability irreformable irrefragability irrefragable irrefragableness irrefragably irrefrangibility irrefrangible irrefrangibleness irrefrangibly irrefusable irrefutability irrefutable irrefutableness irrefutably irregardless irregeneracy irregenerate irregeneration irregular irregularism irregularist irregularity irregularize irregularly irregularness irregulate irregulated irregulation irrelate irrelated irrelation irrelative irrelatively irrelativeness irrelevance irrelevancy irrelevant irrelevantly irreliability irrelievable irreligion irreligionism irreligionist irreligionize irreligiosity irreligious irreligiously irreligiousness irreluctant irremeable irremeably irremediable irremediableness irremediably irrememberable irremissibility irremissible irremissibleness irremissibly irremission irremissive irremovability irremovable irremovableness irremovably irremunerable irrenderable irrenewable irrenunciable irrepair irrepairable irreparability irreparable irreparableness irreparably irrepassable irrepealability irrepealable irrepealableness irrepealably irrepentance irrepentant irrepentantly irreplaceable irreplaceably irrepleviable irreplevisable irreportable irreprehensible irreprehensibleness irreprehensibly irrepresentable irrepresentableness irrepressibility irrepressible irrepressibleness irrepressibly irrepressive irreproachability irreproachable irreproachableness irreproachably irreproducible irreproductive irreprovable irreprovableness irreprovably irreptitious irrepublican irresilient irresistance irresistibility irresistible irresistibleness irresistibly irresoluble irresolubleness irresolute irresolutely irresoluteness irresolution irresolvability irresolvable irresolvableness irresolved irresolvedly irresonance irresonant irrespectability irrespectable irrespectful irrespective irrespectively irrespirable irrespondence irresponsibility irresponsible irresponsibleness irresponsibly irresponsive irresponsiveness irrestrainable irrestrainably irrestrictive irresultive irresuscitable irresuscitably irretention irretentive irretentiveness irreticence irreticent irretraceable irretraceably irretractable irretractile irretrievability irretrievable irretrievableness irretrievably irrevealable irrevealably irreverence irreverend irreverendly irreverent irreverential irreverentialism irreverentially irreverently irreversibility irreversible irreversibleness irreversibly irrevertible irreviewable irrevisable irrevocability irrevocable irrevocableness irrevocably irrevoluble irrigable irrigably irrigant irrigate irrigation irrigational irrigationist irrigative irrigator irrigatorial irrigatory irriguous irriguousness irrision irrisor irrisory irritability irritable irritableness irritably irritament irritancy irritant irritate irritatedly irritating irritatingly irritation irritative irritativeness irritator irritatory irritomotile irritomotility irrorate irrotational irrotationally irrubrical irrupt irruptible irruption irruptive irruptively is isabelina isabelita isabnormal isaconitine isacoustic isadelphous isagoge isagogic isagogical isagogically isagogics isagon isallobar isallotherm isamine isandrous isanemone isanomal isanomalous isanthous isapostolic isarioid isatate isatic isatide isatin isatinic isatogen isatogenic isazoxy isba ischemia ischemic ischiac ischiadic ischiadicus ischial ischialgia ischialgic ischiatic ischidrosis ischioanal ischiobulbar ischiocapsular ischiocaudal ischiocavernosus ischiocavernous ischiocele ischiocerite ischiococcygeal ischiofemoral ischiofibular ischioiliac ischioneuralgia ischioperineal ischiopodite ischiopubic ischiopubis ischiorectal ischiorrhogic ischiosacral ischiotibial ischiovaginal ischiovertebral ischium ischocholia ischuretic ischuria ischury isenergic isentropic isepiptesial isepiptesis iserine iserite isethionate isethionic ishpingo ishshakku isidiiferous isidioid isidiophorous isidiose isidium isidoid isindazole isinglass island islander islandhood islandic islandish islandless islandlike islandman islandress islandry islandy islay isle isleless islesman islet isleted isleward islot ism ismal ismatic ismatical ismaticalness ismdom ismy iso isoabnormal isoagglutination isoagglutinative isoagglutinin isoagglutinogen isoalantolactone isoallyl isoamarine isoamide isoamyl isoamylamine isoamylene isoamylethyl isoamylidene isoantibody isoantigen isoapiole isoasparagine isoaurore isobar isobarbaloin isobarbituric isobare isobaric isobarism isobarometric isobase isobath isobathic isobathytherm isobathythermal isobathythermic isobenzofuran isobilateral isobilianic isobiogenetic isoborneol isobornyl isobront isobronton isobutane isobutyl isobutylene isobutyraldehyde isobutyrate isobutyric isobutyryl isocamphor isocamphoric isocaproic isocarbostyril isocarpic isocarpous isocellular isocephalic isocephalism isocephalous isocephaly isocercal isocercy isochasm isochasmic isocheim isocheimal isocheimenal isocheimic isocheimonal isochlor isochlorophyll isochlorophyllin isocholanic isocholesterin isocholesterol isochor isochoric isochromatic isochronal isochronally isochrone isochronic isochronical isochronism isochronize isochronon isochronous isochronously isochroous isocinchomeronic isocinchonine isocitric isoclasite isoclimatic isoclinal isocline isoclinic isocodeine isocola isocolic isocolon isocoria isocorybulbin isocorybulbine isocorydine isocoumarin isocracy isocrat isocratic isocreosol isocrotonic isocrymal isocryme isocrymic isocyanate isocyanic isocyanide isocyanine isocyano isocyanogen isocyanurate isocyanuric isocyclic isocymene isocytic isodactylism isodactylous isodiabatic isodialuric isodiametric isodiametrical isodiazo isodiazotate isodimorphic isodimorphism isodimorphous isodomic isodomous isodomum isodont isodontous isodrome isodulcite isodurene isodynamia isodynamic isodynamical isoelectric isoelectrically isoelectronic isoelemicin isoemodin isoenergetic isoerucic isoeugenol isoflavone isoflor isogamete isogametic isogametism isogamic isogamous isogamy isogen isogenesis isogenetic isogenic isogenotype isogenotypic isogenous isogeny isogeotherm isogeothermal isogeothermic isogloss isoglossal isognathism isognathous isogon isogonal isogonality isogonally isogonic isogoniostat isogonism isograft isogram isograph isographic isographical isographically isography isogynous isohaline isohalsine isohel isohemopyrrole isoheptane isohesperidin isohexyl isohydric isohydrocyanic isohydrosorbic isohyet isohyetal isoimmune isoimmunity isoimmunization isoimmunize isoindazole isoindigotin isoindole isoionone isokeraunic isokeraunographic isokeraunophonic isokontan isokurtic isolability isolable isolapachol isolate isolated isolatedly isolating isolation isolationism isolationist isolative isolecithal isoleucine isolichenin isolinolenic isologous isologue isology isolysin isolysis isomagnetic isomaltose isomastigate isomelamine isomenthone isomer isomere isomeric isomerical isomerically isomeride isomerism isomerization isomerize isomeromorphism isomerous isomery isometric isometrical isometrically isometrograph isometropia isometry isomorph isomorphic isomorphism isomorphous isomyarian isoneph isonephelic isonergic isonicotinic isonitramine isonitrile isonitroso isonomic isonomous isonomy isonuclear isonym isonymic isonymy isooleic isoosmosis isopachous isopag isoparaffin isopectic isopelletierin isopelletierine isopentane isoperimeter isoperimetric isoperimetrical isoperimetry isopetalous isophanal isophane isophasal isophene isophenomenal isophoria isophorone isophthalic isophthalyl isophyllous isophylly isopicramic isopiestic isopiestically isopilocarpine isoplere isopleth isopleural isopleuran isopleurous isopod isopodan isopodiform isopodimorphous isopodous isopogonous isopolite isopolitical isopolity isopoly isoprene isopropenyl isopropyl isopropylacetic isopropylamine isopsephic isopsephism isopterous isoptic isopulegone isopurpurin isopycnic isopyre isopyromucic isopyrrole isoquercitrin isoquinine isoquinoline isorcinol isorhamnose isorhodeose isorithm isorosindone isorrhythmic isorropic isosaccharic isosaccharin isoscele isosceles isoscope isoseismal isoseismic isoseismical isoseist isoserine isosmotic isospondylous isospore isosporic isosporous isospory isostasist isostasy isostatic isostatical isostatically isostemonous isostemony isostere isosteric isosterism isostrychnine isosuccinic isosulphide isosulphocyanate isosulphocyanic isosultam isotac isoteles isotely isotheral isothere isotherm isothermal isothermally isothermic isothermical isothermobath isothermobathic isothermous isotherombrose isothiocyanates isothiocyanic isothiocyano isothujone isotimal isotome isotomous isotonia isotonic isotonicity isotony isotope isotopic isotopism isotopy isotrehalose isotrimorphic isotrimorphism isotrimorphous isotron isotrope isotropic isotropism isotropous isotropy isotype isotypic isotypical isovalerate isovalerianate isovalerianic isovaleric isovalerone isovaline isovanillic isovoluminal isoxanthine isoxazine isoxazole isoxime isoxylene isoyohimbine isozooid ispaghul ispravnik issanguila issei issite issuable issuably issuance issuant issue issueless issuer issuing ist isthmi isthmial isthmian isthmiate isthmic isthmoid isthmus istiophorid istle istoke isuret isuretine isuroid it itabirite itacism itacist itacistic itacolumite itaconate itaconic italicization italicize italics italite itamalate itamalic itatartaric itatartrate itch itchiness itching itchingly itchless itchproof itchreed itchweed itchy itcze item iteming itemization itemize itemizer itemy iter iterable iterance iterancy iterant iterate iteration iterative iteratively iterativeness ithagine ither ithomiid ithyphallic ithyphyllous itineracy itinerancy itinerant itinerantly itinerarian itinerary itinerate itineration itmo itonidid itoubou its itself iturite itzebu iva ivied ivin ivoried ivorine ivoriness ivorist ivory ivorylike ivorytype ivorywood ivy ivybells ivyberry ivyflower ivylike ivyweed ivywood ivywort iwa iwaiwa iwis ixodian ixodic ixodid iyo izar izard izle izote iztle izzard j jab jabbed jabber jabberer jabbering jabberingly jabberment jabberwockian jabbing jabbingly jabble jabers jabia jabiru jaborandi jaborine jabot jaboticaba jabul jacal jacamar jacameropine jacami jacamin jacana jacare jacate jacchus jacent jacinth jacinthe jack jackal jackanapes jackanapish jackaroo jackass jackassery jackassification jackassism jackassness jackbird jackbox jackboy jackdaw jackeen jacker jacket jacketed jacketing jacketless jacketwise jackety jackfish jackhammer jackknife jackleg jackman jacko jackpudding jackpuddinghood jackrod jacksaw jackscrew jackshaft jackshay jacksnipe jackstay jackstone jackstraw jacktan jackweed jackwood jacobaea jacobaean jacobsite jacobus jacoby jaconet jactance jactancy jactant jactation jactitate jactitation jacu jacuaru jaculate jaculation jaculative jaculator jaculatorial jaculatory jaculiferous jacutinga jadder jade jaded jadedly jadedness jadeite jadery jadesheen jadeship jadestone jadish jadishly jadishness jady jaeger jag jagat jager jagged jaggedly jaggedness jagger jaggery jaggy jagir jagirdar jagla jagless jagong jagrata jagua jaguar jaguarete jail jailage jailbird jaildom jailer jaileress jailering jailership jailhouse jailish jailkeeper jaillike jailmate jailward jailyard jajman jake jakes jako jalap jalapa jalapin jalkar jalloped jalopy jalouse jalousie jalousied jalpaite jam jama jaman jamb jambalaya jambeau jambo jambolan jambone jambool jamboree jambosa jambstone jamdani jamesonite jami jamlike jammedness jammer jammy jampan jampani jamrosade jamwood janapa janapan jane jangada jangkar jangle jangler jangly janiceps janissary janitor janitorial janitorship janitress janitrix jank janker jann jannock jantu janua jaob jap japaconine japaconitine japan japanned japanner japannery jape japer japery japing japingly japish japishly japishness japonica japygoid jaquima jar jara jaragua jararaca jararacussu jarbird jarble jarbot jardiniere jarfly jarful jarg jargon jargonal jargoneer jargonelle jargoner jargonesque jargonic jargonish jargonist jargonistic jargonium jargonization jargonize jarkman jarl jarldom jarless jarlship jarnut jarool jarosite jarra jarrah jarring jarringly jarringness jarry jarvey jasey jaseyed jasmine jasmined jasminewood jasmone jaspachate jaspagate jasper jasperated jaspered jasperize jasperoid jaspery jaspidean jaspideous jaspilite jaspis jaspoid jasponyx jaspopal jass jassid jassoid jatamansi jateorhizine jatha jati jato jatrophic jatrorrhizine jaudie jauk jaun jaunce jaunder jaundice jaundiceroot jaunt jauntie jauntily jauntiness jauntingly jaunty jaup javali javelin javelina javeline javelineer javer jaw jawab jawbation jawbone jawbreaker jawbreaking jawbreakingly jawed jawfall jawfallen jawfish jawfoot jawfooted jawless jawsmith jawy jay jayhawk jayhawker jaypie jaywalk jaywalker jazerant jazz jazzer jazzily jazziness jazzy jealous jealously jealousness jealousy jean jeans jecoral jecorin jecorize jed jedcock jedding jeddock jeel jeep jeer jeerer jeering jeeringly jeerproof jeery jeewhillijers jeewhillikens jeff jefferisite jeffersonite jehu jehup jejunal jejunator jejune jejunely jejuneness jejunitis jejunity jejunoduodenal jejunoileitis jejunostomy jejunotomy jejunum jelab jelerang jelick jell jellica jellico jellied jelliedness jellification jellify jellily jelloid jelly jellydom jellyfish jellyleaf jellylike jelutong jemadar jemmily jemminess jemmy jenkin jenna jennerization jennerize jennet jenneting jennier jenny jentacular jeofail jeopard jeoparder jeopardize jeopardous jeopardously jeopardousness jeopardy jequirity jerboa jereed jeremejevite jeremiad jerez jerib jerk jerker jerkily jerkin jerkined jerkiness jerkingly jerkish jerksome jerkwater jerky jerl jerm jermonal jerque jerquer jerry jerryism jersey jerseyed jert jervia jervina jervine jess jessakeed jessamine jessamy jessant jessed jessur jest jestbook jestee jester jestful jesting jestingly jestingstock jestmonger jestproof jestwise jestword jet jetbead jete jetsam jettage jetted jetter jettied jettiness jettingly jettison jetton jetty jettyhead jettywise jetware jewbird jewbush jewel jeweler jewelhouse jeweling jewelless jewellike jewelry jewelsmith jewelweed jewely jewfish jezail jezekite jeziah jharal jheel jhool jhow jib jibbah jibber jibbings jibby jibe jibhead jibi jibman jiboa jibstay jicama jicara jiff jiffle jiffy jig jigamaree jigger jiggerer jiggerman jiggers jigget jiggety jigginess jiggish jiggle jiggly jiggumbob jiggy jiglike jigman jihad jikungu jillet jillflirt jilt jiltee jilter jiltish jimbang jimberjaw jimberjawed jimjam jimmy jimp jimply jimpness jimpricute jimsedge jina jincamas jing jingal jingbang jingle jingled jinglejangle jingler jinglet jingling jinglingly jingly jingo jingodom jingoish jingoism jingoist jingoistic jinja jinjili jink jinker jinket jinkle jinks jinn jinnestan jinni jinniwink jinniyeh jinny jinriki jinrikiman jinrikisha jinshang jinx jipijapa jipper jiqui jirble jirga jirkinet jiti jitneur jitneuse jitney jitneyman jitro jitter jitterbug jitters jittery jiva jive jixie jo joaquinite job jobade jobarbe jobation jobber jobbernowl jobbernowlism jobbery jobbet jobbing jobbish jobble jobholder jobless joblessness jobman jobmaster jobmistress jobmonger jobo jobsmith joch jock jocker jockey jockeydom jockeyish jockeyism jockeylike jockeyship jocko jockteleg jocoque jocose jocosely jocoseness jocoseriosity jocoserious jocosity jocote jocu jocular jocularity jocularly jocularness joculator jocum jocuma jocund jocundity jocundly jocundness jodel jodelr jodhpurs joe joebush joewood joey jog jogger joggle joggler jogglety jogglework joggly jogtrottism johannes johannite johnin johnnycake johnnydom johnstrupite join joinable joinant joinder joiner joinery joining joiningly joint jointage jointed jointedly jointedness jointer jointing jointist jointless jointly jointress jointure jointureless jointuress jointweed jointworm jointy joist joisting joistless jojoba joke jokeless jokelet jokeproof joker jokesmith jokesome jokesomeness jokester jokingly jokish jokist jokul joky joll jolleyman jollier jollification jollify jollily jolliness jollity jollop jolloped jolly jollytail jolt jolter jolterhead jolterheaded jolterheadedness jolthead joltiness jolting joltingly joltless joltproof jolty jonglery jongleur jonque jonquil jonquille jonvalization jonvalize jookerie joola joom jordan jordanite joree jorum josefite joseite josephinite josh josher joshi josie joskin joss jossakeed josser jostle jostlement jostler jot jota jotation jotisi jotter jotting jotty joubarb joug jough jouk joukerypawkery joule joulean joulemeter jounce journal journalese journalish journalism journalist journalistic journalistically journalization journalize journalizer journey journeycake journeyer journeying journeyman journeywoman journeywork journeyworker jours joust jouster jovial jovialist jovialistic joviality jovialize jovially jovialness jovialty jovilabe jow jowar jowari jowel jower jowery jowl jowler jowlish jowlop jowly jowpy jowser jowter joy joyance joyancy joyant joyful joyfully joyfulness joyhop joyleaf joyless joylessly joylessness joylet joyous joyously joyousness joyproof joysome joyweed juba jubate jubbah jubbe jube juberous jubilance jubilancy jubilant jubilantly jubilarian jubilate jubilatio jubilation jubilatory jubilean jubilee jubilist jubilization jubilize jubilus juck juckies jucundity jud judcock judex judge judgeable judgelike judger judgeship judgingly judgmatic judgmatical judgmatically judgment judicable judicate judication judicative judicator judicatorial judicatory judicature judices judiciable judicial judiciality judicialize judicially judicialness judiciarily judiciary judicious judiciously judiciousness judo jufti jug jugal jugale jugate jugated jugation juger jugerum jugful jugger juggernaut juggins juggle jugglement juggler jugglery juggling jugglingly juglandaceous juglandin juglone jugular jugulary jugulate jugulum jugum juice juiceful juiceless juicily juiciness juicy jujitsu juju jujube jujuism jujuist juke jukebox julep julid julidan julienite julienne julio juloid juloidian julole julolidin julolidine julolin juloline jumart jumba jumble jumblement jumbler jumblingly jumbly jumbo jumboesque jumboism jumbuck jumby jumelle jument jumentous jumfru jumillite jumma jump jumpable jumper jumperism jumpiness jumpingly jumpness jumprock jumpseed jumpsome jumpy juncaceous juncaginaceous juncagineous junciform juncite juncous junction junctional junctive juncture june junectomy jungermanniaceous jungle jungled jungleside junglewards junglewood jungli jungly juniata junior juniorate juniority juniorship juniper junk junkboard junker junkerdom junkerish junkerism junket junketer junketing junking junkman junt junta junto jupati jupe jupon jural jurally jurament juramentado juramental juramentally juramentum jurant jurara jurat juration jurative jurator juratorial juratory jure jurel juridic juridical juridically juring jurisconsult jurisdiction jurisdictional jurisdictionalism jurisdictionally jurisdictive jurisprudence jurisprudent jurisprudential jurisprudentialist jurisprudentially jurist juristic juristical juristically juror jurupaite jury juryless juryman jurywoman jusquaboutisme jusquaboutist jussel jussion jussive jussory just justen justice justicehood justiceless justicelike justicer justiceship justiceweed justiciability justiciable justicial justiciar justiciarship justiciary justiciaryship justicies justifiability justifiable justifiableness justifiably justification justificative justificator justificatory justifier justify justifying justifyingly justly justment justness justo jut jute jutka jutting juttingly jutty juvenal juvenate juvenescence juvenescent juvenile juvenilely juvenileness juvenilify juvenilism juvenility juvenilize juventude juvia juvite juxtalittoral juxtamarine juxtapose juxtaposit juxtaposition juxtapositional juxtapositive juxtapyloric juxtaspinal juxtaterrestrial juxtatropical jyngine jynx k ka kabaragoya kabaya kabel kaberu kabiet kabuki kachin kadaya kadein kadikane kadischi kados kaempferol kaferita kaffir kaffiyeh kafir kafirin kafiz kafta kago kagu kaha kahar kahau kahikatea kahili kahu kahuna kai kaid kaik kaikara kaikawaka kail kailyard kailyarder kailyardism kainga kainite kainsi kainyn kairine kairoline kaiser kaiserdom kaiserism kaisership kaitaka kaiwhiria kaiwi kajawah kajugaru kaka kakapo kakar kakarali kakariki kakawahie kaki kakidrosis kakistocracy kakkak kakke kakortokite kala kaladana kalamalo kalamansanai kalashnikov kalasie kale kaleidophon kaleidophone kaleidoscope kaleidoscopic kaleidoscopical kaleidoscopically kalema kalends kalewife kaleyard kali kalian kaliborite kalidium kaliform kaligenous kalinite kaliophilite kalipaya kalium kallah kallege kallilite kallitype kalo kalogeros kalokagathia kalon kalong kalpis kalsomine kalsominer kalumpang kalumpit kalymmaukion kalymmocyte kamachile kamacite kamahi kamala kamaloka kamansi kamao kamarezite kamarupa kamarupic kamas kamassi kambal kamboh kame kameeldoorn kameelthorn kamelaukion kamerad kamias kamichi kamik kamikaze kammalan kammererite kamperite kampong kamptomorph kan kana kanae kanagi kanap kanara kanari kanat kanchil kande kandol kaneh kanephore kanephoros kang kanga kangani kangaroo kangarooer kankie kannume kanoon kans kantele kanteletar kanten kaoliang kaolin kaolinate kaolinic kaolinite kaolinization kaolinize kapa kapai kapeika kapok kapp kappa kappe kappland kapur kaput karagan karaka karakul karamu karaoke karate karaya karbi karch kareao kareeta karela karite karma karmic karmouth karo kaross karou karree karri karroo karrusel karsha karst karstenite karstic kartel kartometer kartos karwar karyaster karyenchyma karyochrome karyochylema karyogamic karyogamy karyokinesis karyokinetic karyologic karyological karyologically karyology karyolymph karyolysis karyolytic karyomere karyomerite karyomicrosome karyomitoic karyomitome karyomiton karyomitosis karyomitotic karyon karyoplasm karyoplasma karyoplasmatic karyoplasmic karyopyknosis karyorrhexis karyoschisis karyosome karyotin karyotype kasa kasbah kasbeke kascamiol kasher kashga kashi kashima kashruth kasida kasm kasolite kassabah kassu kastura kat katabasis katabatic katabella katabolic katabolically katabolism katabolite katabolize katabothron katachromasis katacrotic katacrotism katagenesis katagenetic katakana katakinesis katakinetic katakinetomer katakinetomeric katakiribori katalase katalysis katalyst katalytic katalyze katamorphism kataphoresis kataphoretic kataphoric kataphrenia kataplasia kataplectic kataplexy katar katastate katastatic katathermometer katatonia katatonic katatype katchung katcina kath katha kathal katharometer katharsis kathartic kathemoglobin kathenotheism kathodic katipo katmon katogle katsup katuka katun katurai katydid kauri kava kavaic kavass kawaka kawika kay kayak kayaker kayles kayo kazi kazoo kea keach keacorn keawe keb kebab kebbie kebbuck kechel keck keckle keckling kecksy kecky ked keddah kedge kedger kedgeree kedlock keech keek keeker keel keelage keelbill keelblock keelboat keelboatman keeled keeler keelfat keelhale keelhaul keelie keeling keelivine keelless keelman keelrake keelson keen keena keened keener keenly keenness keep keepable keeper keeperess keepering keeperless keepership keeping keepsake keepsaky keepworthy keerogue keeshond keest keet keeve kef keffel kefir kefiric keg kegler kehaya kehillah kehoeite keilhauite keita keitloa kekotene kekuna kelchin keld kele kelebe kelectome keleh kelek kelep kelk kell kella kellion kellupweed kelly keloid keloidal kelp kelper kelpfish kelpie kelpware kelpwort kelpy kelt kelter kelty kelvin kelyphite kemb kemp kemperyman kempite kemple kempster kempt kempy ken kenaf kenareh kench kend kendir kendyr kenlore kenmark kennebecker kennebunker kennel kennelly kennelman kenner kenning kenningwort kenno keno kenogenesis kenogenetic kenogenetically kenogeny kenosis kenotic kenoticism kenoticist kenotism kenotist kenotoxin kenotron kensington kenspac kenspeck kenspeckle kent kentallenite kentledge kentrogon kentrolite kenyte kep kepi kept keracele keralite kerana keraphyllocele keraphyllous kerasin kerasine kerat keratalgia keratectasia keratectomy keratin keratinization keratinize keratinoid keratinose keratinous keratitis keratoangioma keratocele keratocentesis keratoconjunctivitis keratoconus keratocricoid keratode keratodermia keratogenic keratogenous keratoglobus keratoglossus keratohelcosis keratohyal keratoid keratoiritis keratoleukoma keratolysis keratolytic keratoma keratomalacia keratome keratometer keratometry keratomycosis keratoncus keratonosus keratonyxis keratophyre keratoplastic keratoplasty keratorrhexis keratoscope keratoscopy keratose keratosis keratotome keratotomy keratto keraulophon keraulophone keraunion keraunograph keraunographic keraunography keraunophone keraunophonic keraunoscopia keraunoscopy kerbstone kerchief kerchiefed kerchoo kerchug kerchunk kerectomy kerel kerf kerflap kerflop kerflummox kermes kermesic kermesite kermis kern kernel kerneled kernelless kernelly kerner kernetty kernish kernite kernos kerogen kerosene kerplunk kerrie kerrikerri kerril kerrite kerry kersantite kersey kerseymere kerslam kerslosh kersmash kerugma kerwham kerygma kerygmatic kerykeion kerystic kerystics kesslerman kestrel ket keta ketal ketapang ketazine ketch ketchcraft ketchup ketembilla keten ketene ketimide ketimine ketipate ketipic keto ketogen ketogenesis ketogenic ketoheptose ketohexose ketoketene ketol ketole ketolysis ketolytic ketone ketonemia ketonic ketonimid ketonimide ketonimin ketonimine ketonization ketonize ketonuria ketose ketoside ketosis ketosuccinic ketoxime kette ketting kettle kettlecase kettledrum kettledrummer kettleful kettlemaker kettlemaking kettler ketty ketuba ketupa ketyl keup keurboom kevalin kevel kevelhead kevutzah keweenawite kewpie kex kexy key keyage keyboard keyed keyhole keyless keylet keylock keynote keynoter keyseater keyserlick keysmith keystone keystoned keyway khaddar khadi khagiarite khahoon khaiki khair khaja khajur khakanship khaki khakied khalifa khalsa khamsin khan khanate khanda khandait khanjar khanjee khankah khansamah khanum khar kharaj kharouba kharroubah kharua khass khat khatib khatri khediva khedival khedivate khedive khediviah khedivial khediviate khepesh khet khidmatgar khilat khir khirka khoja khoka khot khu khubber khula khuskhus khutbah khutuktu khvat kiack kiaki kialee kiang kiaugh kibber kibble kibbler kibblerman kibe kibei kibitka kibitz kibitzer kiblah kibosh kiby kick kickable kickback kickee kicker kicking kickish kickless kickoff kickout kickseys kickshaw kickup kidder kiddier kiddish kiddush kiddushin kiddy kidhood kidlet kidling kidnap kidnapee kidnaper kidney kidneyroot kidneywort kidskin kidsman kiefekil kiekie kiel kier kieselguhr kieserite kiestless kieye kikar kikawaeo kike kiki kiku kikuel kikumon kil kiladja kilah kilampere kilan kilbrickenite kildee kilderkin kileh kilerg kiley kilhig kiliare kilim kill killable killadar killas killcalf killcrop killcu killdeer killeekillee killeen killer killick killifish killing killingly killingness killinite killogie killweed killwort killy kiln kilneye kilnhole kilnman kilnrib kilo kiloampere kilobar kilocalorie kilocycle kilodyne kilogauss kilogram kilojoule kiloliter kilolumen kilometer kilometrage kilometric kilometrical kiloparsec kilostere kiloton kilovar kilovolt kilowatt kilp kilt kilter kiltie kilting kim kimbang kimberlin kimberlite kimigayo kimnel kimono kimonoed kin kina kinaesthesia kinaesthesis kinah kinase kinbote kinch kinchin kinchinmort kincob kind kindergarten kindergartener kindergartening kindergartner kindheart kindhearted kindheartedly kindheartedness kindle kindler kindlesome kindlily kindliness kindling kindly kindness kindred kindredless kindredly kindredness kindredship kinematic kinematical kinematically kinematics kinematograph kinemometer kineplasty kinepox kinesalgia kinescope kinesiatric kinesiatrics kinesic kinesics kinesimeter kinesiologic kinesiological kinesiology kinesiometer kinesis kinesitherapy kinesodic kinesthesia kinesthesis kinesthetic kinetic kinetical kinetically kinetics kinetochore kinetogenesis kinetogenetic kinetogenetically kinetogenic kinetogram kinetograph kinetographer kinetographic kinetography kinetomer kinetomeric kinetonema kinetonucleus kinetophone kinetophonograph kinetoplast kinetoscope kinetoscopic king kingbird kingbolt kingcob kingcraft kingcup kingdom kingdomed kingdomful kingdomless kingdomship kingfish kingfisher kinghead kinghood kinghunter kingless kinglessness kinglet kinglihood kinglike kinglily kingliness kingling kingly kingmaker kingmaking kingpiece kingpin kingrow kingship kingsman kingweed kingwood kink kinkable kinkaider kinkajou kinkcough kinkhab kinkhost kinkily kinkiness kinkle kinkled kinkly kinksbush kinky kinless kinnikinnick kino kinofluous kinology kinoplasm kinoplasmic kinospore kinotannic kinsfolk kinship kinsman kinsmanly kinsmanship kinspeople kinswoman kintar kioea kiosk kiotome kip kipage kipe kippeen kipper kipperer kippy kipsey kipskin kiri kirimon kirk kirker kirkify kirking kirkinhead kirklike kirkman kirktown kirkward kirkyard kirmew kirn kirombo kirsch kirtle kirtled kirve kirver kischen kish kishen kishon kishy kiskatom kismet kismetic kisra kiss kissability kissable kissableness kissage kissar kisser kissing kissingly kissproof kisswise kissy kist kistful kiswa kit kitab kitabis kitar kitcat kitchen kitchendom kitchener kitchenette kitchenful kitchenless kitchenmaid kitchenman kitchenry kitchenward kitchenwards kitchenware kitchenwife kitcheny kite kiteflier kiteflying kith kithe kithless kitish kitling kittel kitten kittendom kittenhearted kittenhood kittenish kittenishly kittenishness kittenless kittenship kitter kittereen kitthoge kittiwake kittle kittlepins kittles kittlish kittly kittock kittul kitty kittysol kiva kiver kivikivi kivu kiwi kiwikiwi kiyas kiyi kjeldahlization kjeldahlize klafter klaftern klam klaprotholite klavern klaxon kleeneboc klendusic klendusity klendusive klepht klephtic klephtism kleptic kleptistic kleptomania kleptomaniac kleptomanist kleptophobia klicket klip klipbok klipdachs klipdas klipfish klippe klippen klipspringer klister klockmannite klom klootchman klop klops klosh klystron kmet knab knabble knack knackebrod knacker knackery knacky knag knagged knaggy knap knapbottle knape knappan knapper knappish knappishly knapsack knapsacked knapsacking knapweed knar knark knarred knarry knave knavery knaveship knavess knavish knavishly knavishness knawel knead kneadability kneadable kneader kneading kneadingly knebelite knee kneebrush kneecap kneed kneehole kneel kneeler kneelet kneeling kneelingly kneepad kneepan kneepiece kneestone knell knelt knet knew knez knezi kniaz kniazi knick knicker knickerbockered knickerbockers knickered knickers knickknack knickknackatory knickknacked knickknackery knickknacket knickknackish knickknacky knickpoint knife knifeboard knifeful knifeless knifelike knifeman knifeproof knifer knifesmith knifeway knight knightage knightess knighthead knighthood knightless knightlihood knightlike knightliness knightling knightly knightship knightswort knit knitback knitch knitted knitter knitting knittle knitwear knitweed knitwork knived knivey knob knobbed knobber knobbiness knobble knobbler knobbly knobby knobkerrie knoblike knobstick knobstone knobular knobweed knobwood knock knockabout knockdown knockemdown knocker knocking knockless knockoff knockout knockstone knockup knoll knoller knolly knop knopite knopped knopper knoppy knopweed knorhaan knosp knosped knot knotberry knotgrass knothole knothorn knotless knotlike knotroot knotted knotter knottily knottiness knotting knotty knotweed knotwork knotwort knout know knowability knowable knowableness knowe knower knowing knowingly knowingness knowledge knowledgeable knowledgeableness knowledgeably knowledged knowledgeless knowledgement knowledging known knowperts knoxvillite knub knubbly knubby knublet knuckle knucklebone knuckled knuckler knuckling knuckly knuclesome knur knurl knurled knurling knurly knut knutty knyaz knyazi ko koa koae koala koali kob koban kobellite kobi kobird kobold kobong kobu kochliarion koda kodak kodaker kodakist kodakry kodro kodurite koeberliniaceous koechlinite koel koenenite koff koft koftgar koftgari koggelmannetje kohemp kohl kohlrabi kohua koi koil koila koilanaglyphic koilon koimesis koine koinon koinonia kojang kokako kokam kokan kokerboom kokil kokio koklas koklass koko kokoon kokoromiko kokowai kokra koksaghyz koku kokum kokumin kokumingun kola kolach kolea koleroga kolhoz kolinski kolinsky kolkhos kolkhoz kollast kollaster koller kollergang kolo kolobion kolobus kolokolo kolsun koltunna koltunnor komatik kombu kominuter kommetje kommos komondor kompeni kon kona konak kongoni kongsbergite kongu konimeter koninckite konini koniology koniscope konjak konstantin kontakion kooka kookaburra kookeree kookery kookri koolah kooletah kooliman koolokamba koombar koomkie kootcha kop kopeck koph kopi koppa koppen koppite kor kora koradji korait korakan korari kore korec koreci korero kori korimako korin kornerupine kornskeppa kornskeppur korntonde korntonder korntunna korntunnur koromika koromiko korona korova korrel korrigum korumburra koruna korymboi korymbos korzec kos kosher kosin kosmokrator kosong kosotoxin koswite kotal koto kotschubeite kottigite kotuku kotukutuku kotwal kotwalee kotyle kotylos kou koulan kouza kovil kowhai kowtow koyan kozo kra kraal kraft kragerite krageroite krait kraken krakowiak kral krama krameriaceous kran krantzite kras krasis kratogen kratogenic kraurite kraurosis kraurotic krausen krausite kraut kreis kreistle kreittonite krelos kremersite kremlin krems kreng krennerite kreplech kreutzer kriegspiel krieker krimmer krina krisuvigite kritarchy kritrima krobyloi krobylos krocket krohnkite krome kromeski kromogram kromskop krona krone kronen kroner kronor kronur kroon krosa krouchka kroushka krummhorn kryokonite krypsis kryptic krypticism kryptocyanine kryptol kryptomere krypton kuan kuba kubba kubuklion kuchen kudize kudos kudu kudzu kuei kuge kugel kuichua kukoline kukri kuku kukui kukupa kula kulack kulah kulaite kulak kulakism kulang kulimit kulkarni kullaite kulm kulmet kumbi kumhar kumiss kummel kumquat kumrah kunai kung kunk kunkur kunzite kupfernickel kupfferite kuphar kupper kurbash kurchicine kurchine kurgan kurmburra kurrajong kurtosis kuruma kurumaya kurung kurus kurvey kurveyor kusa kusam kusha kusimansel kuskite kuskos kuskus kusti kusum kutcha kuttab kuttar kuttaur kuvasz kvass kvint kvinter kwamme kwan kwarta kwarterka kwazoku kyack kyah kyar kyat kyaung kyl kyle kylite kylix kymation kymatology kymbalon kymogram kymograph kymographic kynurenic kynurine kyphoscoliosis kyphoscoliotic kyphosis kyphotic kyrine kyschtymite kyte l la laager laang lab labara labarum labba labber labdacism labdacismus labdanum labefact labefactation labefaction labefy label labeler labella labellate labeller labelloid labellum labia labial labialism labialismus labiality labialization labialize labially labiate labiated labidophorous labiella labile lability labilization labilize labioalveolar labiocervical labiodental labioglossal labioglossolaryngeal labioglossopharyngeal labiograph labioguttural labiolingual labiomancy labiomental labionasal labiopalatal labiopalatalize labiopalatine labiopharyngeal labioplasty labiose labiotenaculum labiovelar labioversion labis labium lablab labor laborability laborable laborage laborant laboratorial laboratorian laboratory labordom labored laboredly laboredness laborer laboress laborhood laboring laboringly laborious laboriously laboriousness laborism laborist laborite laborless laborous laborously laborousness laborsaving laborsome laborsomely laborsomeness laboulbeniaceous labour labra labradorite labradoritic labral labret labretifery labroid labrosaurid labrosauroid labrose labrum labrusca labrys labyrinth labyrinthal labyrinthally labyrinthian labyrinthibranch labyrinthibranchiate labyrinthic labyrinthical labyrinthically labyrinthiform labyrinthine labyrinthitis labyrinthodont labyrinthodontian labyrinthodontid labyrinthodontoid lac lacca laccaic laccainic laccase laccol laccolith laccolithic laccolitic lace lacebark laced laceflower laceleaf laceless lacelike lacemaker lacemaking laceman lacepiece lacepod lacer lacerability lacerable lacerant lacerate lacerated lacerately laceration lacerative lacertian lacertiform lacertilian lacertiloid lacertine lacertoid lacertose lacery lacet lacewing lacewoman lacewood lacework laceworker laceybark lache laches lachryma lachrymae lachrymaeform lachrymal lachrymally lachrymalness lachrymary lachrymation lachrymator lachrymatory lachrymiform lachrymist lachrymogenic lachrymonasal lachrymosal lachrymose lachrymosely lachrymosity lachrymous lachsa lacily laciness lacing lacinia laciniate laciniated laciniation laciniform laciniola laciniolate laciniose lacinula lacinulate lacinulose lacis lack lackadaisical lackadaisicality lackadaisically lackadaisicalness lackadaisy lackaday lacker lackey lackeydom lackeyed lackeyism lackeyship lackland lackluster lacklusterness lacklustrous lacksense lackwit lackwittedly lackwittedness lacmoid lacmus laconic laconica laconically laconicalness laconicism laconicum laconism laconize laconizer lacquer lacquerer lacquering lacquerist lacroixite lacrosse lacrosser lacrym lactagogue lactalbumin lactam lactamide lactant lactarene lactarious lactarium lactary lactase lactate lactation lactational lacteal lactean lactenin lacteous lactesce lactescence lactescency lactescent lactic lacticinia lactid lactide lactiferous lactiferousness lactific lactifical lactification lactiflorous lactifluous lactiform lactifuge lactify lactigenic lactigenous lactigerous lactim lactimide lactinate lactivorous lacto lactobacilli lactobacillus lactobutyrometer lactocele lactochrome lactocitrate lactodensimeter lactoflavin lactoglobulin lactoid lactol lactometer lactone lactonic lactonization lactonize lactophosphate lactoproteid lactoprotein lactoscope lactose lactoside lactosuria lactothermometer lactotoxin lactovegetarian lactucarium lactucerin lactucin lactucol lactucon lactyl lacuna lacunae lacunal lacunar lacunaria lacunary lacune lacunose lacunosity lacunule lacunulose lacuscular lacustral lacustrian lacustrine lacwork lacy lad ladakin ladanigerous ladanum ladder laddered laddering ladderlike ladderway ladderwise laddery laddess laddie laddikie laddish laddock lade lademan laden lader ladhood ladies ladify lading ladkin ladle ladleful ladler ladlewood ladrone ladronism ladronize lady ladybird ladybug ladyclock ladydom ladyfinger ladyfish ladyfly ladyfy ladyhood ladyish ladyism ladykin ladykind ladyless ladylike ladylikely ladylikeness ladyling ladylintywhite ladylove ladyly ladyship laemodipod laemodipodan laemodipodiform laemodipodous laemoparalysis laemostenosis laeotropic laeotropism laet laeti laetic laevoduction laevogyrate laevogyre laevogyrous laevolactic laevorotation laevorotatory laevotartaric laevoversion lafayette lag lagan lagarto lagen lagena lagend lageniform lager lagetto laggar laggard laggardism laggardly laggardness lagged laggen lagger laggin lagging laglast lagna lagniappe lagomorph lagomorphic lagomorphous lagonite lagoon lagoonal lagoonside lagophthalmos lagopode lagopodous lagopous lagostoma lagwort lai laic laical laicality laically laich laicism laicity laicization laicize laicizer laid laigh lain laine laiose lair lairage laird lairdess lairdie lairdly lairdocracy lairdship lairless lairman lairstone lairy laitance laity lak lakarpite lakatoi lake lakeland lakelander lakeless lakelet lakelike lakemanship laker lakeside lakeward lakeweed lakie laking lakish lakishness lakism lakist laky lalang lall lallation lalling lalo laloneurosis lalopathy lalophobia laloplegia lam lama lamaic lamantin lamany lamasary lamasery lamastery lamb lamba lambale lambaste lambda lambdacism lambdoid lambdoidal lambeau lambency lambent lambently lamber lambert lambhood lambie lambiness lambish lambkill lambkin lambliasis lamblike lambling lambly lamboys lambrequin lambsdown lambskin lambsuccory lamby lame lamedh lameduck lamel lamella lamellar lamellarly lamellary lamellate lamellated lamellately lamellation lamellibranch lamellibranchiate lamellicorn lamellicornate lamellicornous lamelliferous lamelliform lamellirostral lamellirostrate lamelloid lamellose lamellosity lamellule lamely lameness lament lamentable lamentableness lamentably lamentation lamentational lamentatory lamented lamentedly lamenter lamentful lamenting lamentingly lamentive lamentory lamester lamestery lameter lametta lamia lamiaceous lamiger lamiid lamin lamina laminability laminable laminae laminar laminariaceous laminarian laminarin laminarioid laminarite laminary laminate laminated lamination laminboard laminectomy laminiferous laminiform laminiplantar laminiplantation laminitis laminose laminous lamish lamiter lammas lammer lammergeier lammock lammy lamnectomy lamnid lamnoid lamp lampad lampadary lampadedromy lampadephore lampadephoria lampadite lampas lampatia lampblack lamper lampern lampers lampflower lampfly lampful lamphole lamping lampion lampist lampistry lampless lamplet lamplight lamplighted lamplighter lamplit lampmaker lampmaking lampman lampoon lampooner lampoonery lampoonist lamppost lamprey lamprophony lamprophyre lamprophyric lamprotype lampstand lampwick lampyrid lampyrine lamziekte lan lanameter lanarkite lanas lanate lanated lanaz lance lanced lancegay lancelet lancelike lancely lanceman lanceolar lanceolate lanceolated lanceolately lanceolation lancepesade lancepod lanceproof lancer lances lancet lanceted lanceteer lancewood lancha lanciers lanciferous lanciform lancinate lancination land landamman landau landaulet landaulette landblink landbook landdrost landed lander landesite landfall landfast landflood landgafol landgravate landgrave landgraveship landgravess landgraviate landgravine landholder landholdership landholding landimere landing landlady landladydom landladyhood landladyish landladyship landless landlessness landlike landline landlock landlocked landlook landlooker landloper landlord landlordism landlordly landlordry landlordship landlouper landlouping landlubber landlubberish landlubberly landlubbing landman landmark landmil landmonger landocracy landocrat landolphia landowner landownership landowning landplane landraker landreeve landright landsale landscape landscapist landshard landship landsick landside landskip landslide landslip landsman landspout landspringy landstorm landwaiter landward landwash landways landwhin landwire landwrack lane lanete laneway laney langaha langarai langbanite langbeinite langca langi langite langlauf langlaufer langle langoon langooty langrage langsat langsettle langspiel langsyne language languaged languageless langued languescent languet languid languidly languidness languish languisher languishing languishingly languishment languor languorous languorously langur laniariform laniary laniate laniferous lanific laniflorous laniform lanigerous laniiform lanioid lanista lank lanket lankily lankiness lankish lankly lankness lanky lanner lanneret lanolin lanose lanosity lansat lansdowne lanseh lansfordite lansknecht lanson lansquenet lant lantaca lanterloo lantern lanternflower lanternist lanternleaf lanternman lanthana lanthanide lanthanite lanthanum lanthopine lantum lanuginose lanuginous lanuginousness lanugo lanum lanx lanyard lap lapacho lapachol lapactic laparectomy laparocele laparocholecystotomy laparocolectomy laparocolostomy laparocolotomy laparocolpohysterotomy laparocolpotomy laparocystectomy laparocystotomy laparoelytrotomy laparoenterostomy laparoenterotomy laparogastroscopy laparogastrotomy laparohepatotomy laparohysterectomy laparohysteropexy laparohysterotomy laparoileotomy laparomyitis laparomyomectomy laparomyomotomy laparonephrectomy laparonephrotomy laparorrhaphy laparosalpingectomy laparosalpingotomy laparoscopy laparosplenectomy laparosplenotomy laparostict laparothoracoscopy laparotome laparotomist laparotomize laparotomy laparotrachelotomy lapboard lapcock lapel lapeler lapelled lapful lapicide lapidarian lapidarist lapidary lapidate lapidation lapidator lapideon lapideous lapidescent lapidicolous lapidific lapidification lapidify lapidist lapidity lapidose lapilliform lapillo lapillus lapon lappaceous lappage lapped lapper lappet lappeted lapping lapsability lapsable lapsation lapse lapsed lapser lapsi lapsing lapsingly lapstone lapstreak lapstreaked lapstreaker laputically lapwing lapwork laquear laquearian laqueus lar larboard larbolins larbowlines larcener larcenic larcenish larcenist larcenous larcenously larceny larch larchen lard lardacein lardaceous larder larderellite larderer larderful larderlike lardiform lardite lardizabalaceous lardon lardworm lardy lareabell large largebrained largehanded largehearted largeheartedness largely largemouth largemouthed largen largeness largess larghetto largifical largish largition largitional largo lari lariat larick larid laridine larigo larigot lariid larin larine larithmics larixin lark larker larkiness larking larkingly larkish larkishness larklike larkling larksome larkspur larky larmier larmoyant larnax laroid larrigan larrikin larrikinalian larrikiness larrikinism larriman larrup larry larsenite larva larvae larval larvarium larvate larve larvicidal larvicide larvicolous larviform larvigerous larvikite larviparous larviposit larviposition larvivorous larvule laryngal laryngalgia laryngeal laryngeally laryngean laryngeating laryngectomy laryngemphraxis laryngendoscope larynges laryngic laryngismal laryngismus laryngitic laryngitis laryngocele laryngocentesis laryngofission laryngofissure laryngograph laryngography laryngological laryngologist laryngology laryngometry laryngoparalysis laryngopathy laryngopharyngeal laryngopharyngitis laryngophony laryngophthisis laryngoplasty laryngoplegia laryngorrhagia laryngorrhea laryngoscleroma laryngoscope laryngoscopic laryngoscopical laryngoscopist laryngoscopy laryngospasm laryngostasis laryngostenosis laryngostomy laryngostroboscope laryngotome laryngotomy laryngotracheal laryngotracheitis laryngotracheoscopy laryngotracheotomy laryngotyphoid laryngovestibulitis larynx las lasa lasarwort lascar lascivious lasciviously lasciviousness laser laserwort lash lasher lashingly lashless lashlite lasianthous lasiocampid lasiocarpous lask lasket laspring lasque lass lasset lassie lassiehood lassieish lassitude lasslorn lasso lassock lassoer last lastage laster lasting lastingly lastingness lastly lastness lastre lastspring lasty lat lata latah latch latcher latchet latching latchkey latchless latchman latchstring late latebra latebricole latecomer latecoming lated lateen lateener lately laten latence latency lateness latensification latent latentize latently latentness later latera laterad lateral lateralis laterality lateralization lateralize laterally latericumbent lateriflexion laterifloral lateriflorous laterifolious laterigrade laterinerved laterite lateritic lateritious lateriversion laterization lateroabdominal lateroanterior laterocaudal laterocervical laterodeviation laterodorsal lateroduction lateroflexion lateromarginal lateronuchal lateroposition lateroposterior lateropulsion laterostigmatal laterostigmatic laterotemporal laterotorsion lateroventral lateroversion latescence latescent latesome latest latewhile latex latexosis lath lathe lathee latheman lathen lather latherability latherable lathereeve latherer latherin latheron latherwort lathery lathesman lathhouse lathing lathwork lathy lathyric lathyrism latibulize latices laticiferous laticlave laticostate latidentate latifundian latifundium latigo latinism lation latipennate latiplantar latirostral latirostrous latisept latiseptal latiseptate latish latisternal latitancy latitant latitat latite latitude latitudinal latitudinally latitudinarian latitudinarianisn latitudinary latitudinous latomy latrant latration latreutic latria latrine latro latrobe latrobite latrocinium latron latten lattener latter latterkin latterly lattermath lattermost latterness lattice latticed latticewise latticework latticing latticinio latus lauan laubanite laud laudability laudable laudableness laudably laudanidine laudanin laudanine laudanosine laudanum laudation laudative laudator laudatorily laudatory lauder laudification laudist laugh laughable laughableness laughably laughee laugher laughful laughing laughingly laughingstock laughsome laughter laughterful laughterless laughworthy laughy lauia laumonite laumontite laun launce launch launcher launchful launchways laund launder launderability launderable launderer laundry laundrymaid laundryman laundryowner laundrywoman laur laura lauraceous lauraldehyde laurate laurdalite laureate laureated laureateship laureation laurel laureled laurellike laurelship laurelwood laureole lauric laurin laurinoxylon laurionite laurite laurone laurotetanine laurustine laurustinus laurvikite lauryl lautarite lautitious lava lavable lavabo lavacre lavage lavaliere lavalike lavanga lavant lavaret lavatic lavation lavational lavatorial lavatory lave laveer lavement lavender lavenite laver laverock laverwort lavialite lavic lavish lavisher lavishing lavishingly lavishly lavishment lavishness lavolta lavrovite law lawbook lawbreaker lawbreaking lawcraft lawful lawfully lawfulness lawgiver lawgiving lawing lawish lawk lawlants lawless lawlessly lawlessness lawlike lawmaker lawmaking lawman lawmonger lawn lawned lawner lawnlet lawnlike lawny lawproof lawrencite lawrightman lawsonite lawsuit lawsuiting lawter lawyer lawyeress lawyerism lawyerlike lawyerling lawyerly lawyership lawyery lawzy lax laxate laxation laxative laxatively laxativeness laxiflorous laxifoliate laxifolious laxism laxist laxity laxly laxness lay layaway layback layboy layer layerage layered layery layette laying layland layman laymanship layne layoff layout layover layship laystall laystow laywoman lazar lazaret lazaretto lazarlike lazarly lazarole laze lazily laziness lazule lazuli lazuline lazulite lazulitic lazurite lazy lazybird lazybones lazyboots lazyhood lazyish lazylegs lazyship lazzarone lazzaroni lea leach leacher leachman leachy lead leadable leadableness leadage leadback leaded leaden leadenhearted leadenheartedness leadenly leadenness leadenpated leader leaderess leaderette leaderless leadership leadhillite leadin leadiness leading leadingly leadless leadman leadoff leadout leadproof leadsman leadstone leadway leadwood leadwork leadwort leady leaf leafage leafboy leafcup leafdom leafed leafen leafer leafery leafgirl leafit leafless leaflessness leaflet leafleteer leaflike leafstalk leafwork leafy league leaguelong leaguer leak leakage leakance leaker leakiness leakless leakproof leaky leal lealand leally lealness lealty leam leamer lean leaner leaning leanish leanly leanness leant leap leapable leaper leapfrog leapfrogger leapfrogging leaping leapingly leapt lear learn learnable learned learnedly learnedness learner learnership learning learnt leasable lease leasehold leaseholder leaseholding leaseless leasemonger leaser leash leashless leasing leasow least leastways leastwise leat leath leather leatherback leatherbark leatherboard leatherbush leathercoat leathercraft leatherer leatherfish leatherflower leatherhead leatherine leatheriness leathering leatherize leatherjacket leatherleaf leatherlike leathermaker leathermaking leathern leatherneck leatherroot leatherside leatherware leatherwing leatherwood leatherwork leatherworker leatherworking leathery leathwake leatman leave leaved leaveless leavelooker leaven leavening leavenish leavenless leavenous leaver leaverwood leaves leaving leavy leawill leban lebbek lebensraum lebrancho lecama lecaniid lecanine lecanomancer lecanomancy lecanomantic lecanoraceous lecanorine lecanoroid lecanoscopic lecanoscopy lech lecher lecherous lecherously lecherousness lechery lechriodont lechuguilla lechwe lecideaceous lecideiform lecideine lecidioid lecithal lecithalbumin lecithality lecithin lecithinase lecithoblast lecithoprotein leck lecker lecontite lecotropal lectern lection lectionary lectisternium lector lectorate lectorial lectorship lectotype lectress lectrice lectual lecture lecturee lectureproof lecturer lectureship lecturess lecturette lecyth lecythid lecythidaceous lecythoid lecythus led lede leden lederite ledge ledged ledgeless ledger ledgerdom ledging ledgment ledgy ledol lee leeangle leeboard leech leecheater leecher leechery leeches leechkin leechlike leechwort leed leefang leeftail leek leekish leeky leep leepit leer leerily leeringly leerish leerness leeroway leery lees leet leetman leewan leeward leewardly leewardmost leewardness leeway leewill left leftish leftism leftist leftments leftmost leftness leftover leftward leftwardly leftwards leg legacy legal legalese legalism legalist legalistic legalistically legality legalization legalize legally legalness legantine legatary legate legatee legateship legatine legation legationary legative legato legator legatorial legend legenda legendarian legendary legendic legendist legendless legendry leger legerdemain legerdemainist legerity leges legged legger legginess legging legginged leggy leghorn legibility legible legibleness legibly legific legion legionary legioned legioner legionnaire legionry legislate legislation legislational legislativ legislative legislatively legislator legislatorial legislatorially legislatorship legislatress legislature legist legit legitim legitimacy legitimate legitimately legitimateness legitimation legitimatist legitimatize legitimism legitimist legitimistic legitimity legitimization legitimize leglen legless leglessness leglet leglike legman legoa legpiece legpull legpuller legpulling legrope legua leguan leguleian leguleious legume legumelin legumen legumin leguminiform leguminose leguminous lehr lehrbachite lehrman lehua lei leighton leimtype leiocephalous leiocome leiodermatous leiodermia leiomyofibroma leiomyoma leiomyomatous leiomyosarcoma leiophyllous leiotrichine leiotrichous leiotrichy leiotropic leishmaniasis leister leisterer leisurable leisurably leisure leisured leisureful leisureless leisureliness leisurely leisureness leitmotiv leitneriaceous lek lekach lekane lekha leman lemel lemma lemmata lemming lemmitis lemmoblastic lemmocyte lemnaceous lemnad lemniscate lemniscatic lemniscus lemography lemology lemon lemonade lemonish lemonlike lemonweed lemonwood lemony lempira lemur lemures lemurian lemurid lemuriform lemurine lemuroid lenad lenard lench lend lendable lendee lender lene length lengthen lengthener lengther lengthful lengthily lengthiness lengthsman lengthsome lengthsomeness lengthways lengthwise lengthy lenience leniency lenient leniently lenify lenis lenitic lenitive lenitively lenitiveness lenitude lenity lennilite lennoaceous lennow leno lens lensed lensless lenslike lent lenth lenthways lentibulariaceous lenticel lenticellate lenticle lenticonus lenticula lenticular lenticulare lenticularis lenticularly lenticulate lenticulated lenticule lenticulostriate lenticulothalamic lentiform lentigerous lentiginous lentigo lentil lentisc lentiscine lentisco lentiscus lentisk lentitude lentitudinous lento lentoid lentor lentous lenvoi lenvoy leoncito leonhardite leonine leoninely leonines leonite leontiasis leontocephalous leopard leoparde leopardess leopardine leopardite leopardwood leopoldite leotard lepa lepadoid lepargylic leper leperdom lepered lepidene lepidine lepidoblastic lepidodendraceous lepidodendrid lepidodendroid lepidoid lepidolite lepidomelane lepidophyllous lepidophyte lepidophytic lepidoporphyrin lepidopter lepidopteral lepidopteran lepidopterid lepidopterist lepidopterological lepidopterologist lepidopterology lepidopteron lepidopterous lepidosaurian lepidosirenoid lepidosis lepidosteoid lepidote lepidotic lepismoid lepocyte leporid leporide leporiform leporine lepospondylous lepothrix lepra lepralian leprechaun lepric leproid leprologic leprologist leprology leproma lepromatous leprosarium leprose leprosery leprosied leprosis leprosity leprosy leprous leprously leprousness leptandrin leptid leptiform leptinolite leptite leptocardian leptocentric leptocephalan leptocephali leptocephalia leptocephalic leptocephalid leptocephaloid leptocephalous leptocephalus leptocephaly leptocercal leptochlorite leptochroa leptochrous leptoclase leptodactyl leptodactylous leptodermatous leptodermous leptokurtic leptomatic leptome leptomedusan leptomeningeal leptomeninges leptomeningitis leptomeninx leptometer leptomonad lepton leptonecrosis leptonema leptopellic leptophyllous leptoprosope leptoprosopic leptoprosopous leptoprosopy leptorrhin leptorrhine leptorrhinian leptorrhinism leptosome leptosperm leptospirosis leptosporangiate leptostracan leptostracous leptotene leptus leptynite lernaeiform lernaeoid lerot lerp lerret lesche lesion lesional lesiy leskeaceous less lessee lesseeship lessen lessener lesser lessive lessn lessness lesson lessor lest lestiwarite lestobiosis lestobiotic lestrad let letch letchy letdown lete lethal lethality lethalize lethally lethargic lethargical lethargically lethargicalness lethargize lethargus lethargy lethiferous lethologica letoff lettable letten letter lettered letterer letteret lettergram letterhead letterin lettering letterleaf letterless letterpress letterspace letterweight letterwood lettrin lettsomite lettuce letup leu leucaemia leucaemic leucaethiop leucaethiopic leucaniline leucanthous leucaugite leucaurin leucemia leucemic leuch leuchaemia leuchemia leuchtenbergite leucine leucism leucite leucitic leucitis leucitite leucitohedron leucitoid leuco leucobasalt leucoblast leucoblastic leucocarpous leucochalcite leucocholic leucocholy leucochroic leucocidic leucocidin leucocism leucocrate leucocratic leucocyan leucocytal leucocyte leucocythemia leucocythemic leucocytic leucocytoblast leucocytogenesis leucocytoid leucocytology leucocytolysin leucocytolysis leucocytolytic leucocytometer leucocytopenia leucocytopenic leucocytoplania leucocytopoiesis leucocytosis leucocytotherapy leucocytotic leucoderma leucodermatous leucodermic leucoencephalitis leucogenic leucoid leucoindigo leucoindigotin leucolytic leucoma leucomaine leucomatous leucomelanic leucomelanous leucon leucopenia leucopenic leucophane leucophanite leucophoenicite leucophore leucophyllous leucophyre leucoplakia leucoplakial leucoplast leucoplastid leucopoiesis leucopoietic leucopyrite leucoquinizarin leucorrhea leucorrheal leucoryx leucosis leucospermous leucosphenite leucosphere leucospheric leucostasis leucosyenite leucotactic leucotic leucotome leucotomy leucotoxic leucous leucoxene leucyl leud leuk leukemia leukemic leukocidic leukocidin leukosis leukotic leuma lev levance levant levanter levator levee level leveler levelheaded levelheadedly levelheadedness leveling levelish levelism levelly levelman levelness lever leverage leverer leveret leverman levers leverwood leviable leviathan levier levigable levigate levigation levigator levin levining levir levirate leviratical leviration levitant levitate levitation levitational levitative levitator levity levo levoduction levogyrate levogyre levogyrous levolactic levolimonene levorotation levorotatory levotartaric levoversion levulic levulin levulinic levulose levulosuria levy levyist levynite lew lewd lewdly lewdness lewis lewisite lewisson lewth lexia lexical lexicalic lexicality lexicographer lexicographian lexicographic lexicographical lexicographically lexicographist lexicography lexicologic lexicological lexicologist lexicology lexicon lexiconist lexiconize lexigraphic lexigraphical lexigraphically lexigraphy lexiphanic lexiphanicism ley leyland leysing lherzite lherzolite li liability liable liableness liaison liana liang liar liard libament libaniferous libanophorous libanotophorous libant libate libation libationary libationer libatory libber libbet libbra libel libelant libelee libeler libelist libellary libellate libellulid libelluloid libelous libelously liber liberal liberalism liberalist liberalistic liberality liberalization liberalize liberalizer liberally liberalness liberate liberation liberationism liberationist liberative liberator liberatory liberatress liberomotor libertarian libertarianism liberticidal liberticide libertinage libertine libertinism liberty libertyless libethenite libidibi libidinal libidinally libidinosity libidinous libidinously libidinousness libido libken libra libral librarian librarianess librarianship librarious librarius library libraryless librate libration libratory libretti librettist libretto libriform libroplast licareol licca licensable license licensed licensee licenseless licenser licensor licensure licentiate licentiateship licentiation licentious licentiously licentiousness lich licham lichanos lichen lichenaceous lichened licheniasis lichenic lichenicolous licheniform lichenin lichenism lichenist lichenivorous lichenization lichenize lichenlike lichenographer lichenographic lichenographical lichenographist lichenography lichenoid lichenologic lichenological lichenologist lichenology lichenose licheny lichi licit licitation licitly licitness lick licker lickerish lickerishly lickerishness licking lickpenny lickspit lickspittle lickspittling licorice licorn licorne lictor lictorian lid lidded lidder lidflower lidgate lidless lie liebenerite liebigite lied lief liege liegedom liegeful liegefully liegeless liegely liegeman lieger lien lienal lienculus lienee lienic lienitis lienocele lienogastric lienointestinal lienomalacia lienomedullary lienomyelogenous lienopancreatic lienor lienorenal lienotoxin lienteria lienteric lientery lieproof lieprooflier lieproofliest lier lierne lierre liesh liespfund lieu lieue lieutenancy lieutenant lieutenantry lieutenantship lieve lievrite life lifeblood lifeboat lifeboatman lifeday lifedrop lifeful lifefully lifefulness lifeguard lifehold lifeholder lifeless lifelessly lifelessness lifelet lifelike lifelikeness lifeline lifelong lifer liferent liferenter liferentrix liferoot lifesaver lifesaving lifesome lifesomely lifesomeness lifespring lifetime lifeward lifework lifey lifo lift liftable lifter lifting liftless liftman ligable ligament ligamental ligamentary ligamentous ligamentously ligamentum ligas ligate ligation ligator ligature ligeance ligger light lightable lightboat lightbrained lighten lightener lightening lighter lighterage lighterful lighterman lightface lightful lightfulness lighthead lightheaded lightheadedly lightheadedness lighthearted lightheartedly lightheartedness lighthouse lighthouseman lighting lightish lightkeeper lightless lightlessness lightly lightman lightmanship lightmouthed lightness lightning lightninglike lightningproof lightproof lightroom lightscot lightship lightsman lightsome lightsomely lightsomeness lighttight lightwards lightweight lightwood lightwort lignaloes lignatile ligne ligneous lignescent lignicole lignicoline lignicolous ligniferous lignification ligniform lignify lignin ligninsulphonate ligniperdous lignite lignitic lignitiferous lignitize lignivorous lignocellulose lignoceric lignography lignone lignose lignosity lignosulphite lignosulphonate lignum ligroine ligula ligular ligulate ligulated ligule liguliflorous liguliform ligulin liguloid ligure ligurite ligurition ligustrin liin lija likability likable likableness like likelihead likelihood likeliness likely liken likeness liker likesome likeways likewise likin liking liknon lilac lilaceous lilacin lilacky lilacthroat lilactide lile liliaceous lilied liliform lill lillianite lillibullero lilt liltingly liltingness lily lilyfy lilyhanded lilylike lilywood lilywort lim limacel limaceous limaciform limacine limacinid limacoid limacon limaille liman limation limb limbal limbat limbate limbation limbeck limbed limber limberham limberly limberness limbers limbic limbie limbiferous limbless limbmeal limbo limboinfantum limbous limburgite limbus limby lime limeade limeberry limebush limehouse limekiln limeless limelight limelighter limelike limeman limen limequat limer limes limestone limetta limettin limewash limewater limewort limey limicoline limicolous liminal liminary liminess liming limit limitable limitableness limital limitarian limitary limitate limitation limitative limitatively limited limitedly limitedness limiter limiting limitive limitless limitlessly limitlessness limitrophe limivorous limma limmer limmock limmu limn limnanth limnanthaceous limner limnery limnetic limniad limnimeter limnimetric limnite limnobiologic limnobiological limnobiologically limnobiology limnobios limnograph limnologic limnological limnologically limnologist limnology limnometer limnophile limnophilid limnophilous limnoplankton limnorioid limoid limonene limoniad limonin limonite limonitic limonitization limonium limose limous limousine limp limper limpet limphault limpid limpidity limpidly limpidness limpily limpin limpiness limping limpingly limpingness limpish limpkin limply limpness limpsy limpwort limpy limsy limu limulid limuloid limurite limy lin lina linable linaceous linaga linage linaloa linalol linalool linamarin linarite linch linchbolt linchet linchpin linchpinned lincloth linctus lindackerite lindane linden linder lindo lindoite line linea lineage lineaged lineal lineality lineally lineament lineamental lineamentation lineameter linear linearifolius linearity linearization linearize linearly lineate lineated lineation lineature linecut lined lineiform lineless linelet lineman linen linenette linenize linenizer linenman lineocircular lineograph lineolate lineolated liner linesman linewalker linework ling linga lingberry lingbird linge lingel lingenberry linger lingerer lingerie lingo lingonberry lingtow lingtowman lingua linguacious linguaciousness linguadental linguaeform lingual linguale linguality lingualize lingually linguanasal linguatuline linguatuloid linguet linguidental linguiform linguipotence linguist linguister linguistic linguistical linguistically linguistician linguistics linguistry lingula lingulate lingulated lingulid linguliferous linguliform linguloid linguodental linguodistal linguogingival linguopalatal linguopapillitis linguoversion lingwort lingy linha linhay linie liniment linin lininess lining linitis liniya linja linje link linkable linkage linkboy linked linkedness linker linking linkman links linksmith linkwork linky linn linnaeite linnet lino linolate linoleic linolein linolenate linolenic linolenin linoleum linolic linolin linometer linon linotype linotyper linotypist linous linoxin linoxyn linpin linseed linsey linstock lint lintel linteled linteling linten linter lintern lintie lintless lintonite lintseed lintwhite linty linwood liny liodermia liomyofibroma liomyoma lion lioncel lionel lionesque lioness lionet lionheart lionhearted lionheartedness lionhood lionism lionizable lionization lionize lionizer lionlike lionly lionproof lionship liotrichine lip lipa lipacidemia lipaciduria liparian liparid liparite liparocele liparoid liparomphalus liparous lipase lipectomy lipemia lipide lipin lipless liplet liplike lipoblast lipoblastoma lipocaic lipocardiac lipocele lipoceratous lipocere lipochondroma lipochrome lipochromogen lipoclasis lipoclastic lipocyte lipodystrophia lipodystrophy lipoferous lipofibroma lipogenesis lipogenetic lipogenic lipogenous lipogram lipogrammatic lipogrammatism lipogrammatist lipography lipohemia lipoid lipoidal lipoidemia lipoidic lipolysis lipolytic lipoma lipomata lipomatosis lipomatous lipometabolic lipometabolism lipomorph lipomyoma lipomyxoma lipopexia lipophagic lipophore lipopod lipoprotein liposarcoma liposis liposome lipostomy lipothymial lipothymic lipothymy lipotrophic lipotrophy lipotropic lipotropy lipotype lipovaccine lipoxenous lipoxeny lipped lippen lipper lipperings lippiness lipping lippitude lippitudo lippy lipsanographer lipsanotheca lipstick lipuria lipwork liquable liquamen liquate liquation liquefacient liquefaction liquefactive liquefiable liquefier liquefy liquesce liquescence liquescency liquescent liqueur liquid liquidable liquidamber liquidate liquidation liquidator liquidatorship liquidity liquidize liquidizer liquidless liquidly liquidness liquidogenic liquidogenous liquidy liquiform liquor liquorer liquorish liquorishly liquorishness liquorist liquorless lira lirate liration lire lirella lirellate lirelliform lirelline lirellous liripipe liroconite lis lisere lish lisk lisle lisp lisper lispingly lispund liss lissamphibian lissencephalic lissencephalous lissoflagellate lissom lissome lissomely lissomeness lissotrichan lissotrichous lissotrichy list listable listed listedness listel listen listener listening lister listerellosis listing listless listlessly listlessness listred listwork lit litaneutical litany litanywise litas litation litch litchi lite liter literacy literaily literal literalism literalist literalistic literality literalization literalize literalizer literally literalminded literalmindedness literalness literarian literariness literary literaryism literate literati literation literatist literato literator literature literatus literose literosity lith lithagogue lithangiuria lithanthrax litharge lithe lithectasy lithectomy lithely lithemia lithemic litheness lithesome lithesomeness lithi lithia lithiasis lithiastic lithiate lithic lithifaction lithification lithify lithite lithium litho lithobiid lithobioid lithocenosis lithochemistry lithochromatic lithochromatics lithochromatographic lithochromatography lithochromography lithochromy lithoclase lithoclast lithoclastic lithoclasty lithoculture lithocyst lithocystotomy lithodesma lithodialysis lithodid lithodomous lithofracteur lithofractor lithogenesis lithogenetic lithogenous lithogeny lithoglyph lithoglypher lithoglyphic lithoglyptic lithoglyptics lithograph lithographer lithographic lithographical lithographically lithographize lithography lithogravure lithoid lithoidite litholabe litholapaxy litholatrous litholatry lithologic lithological lithologically lithologist lithology litholysis litholyte litholytic lithomancy lithomarge lithometer lithonephria lithonephritis lithonephrotomy lithontriptic lithontriptist lithontriptor lithopedion lithopedium lithophagous lithophane lithophanic lithophany lithophilous lithophone lithophotography lithophotogravure lithophthisis lithophyl lithophyllous lithophysa lithophysal lithophyte lithophytic lithophytous lithopone lithoprint lithoscope lithosian lithosiid lithosis lithosol lithosperm lithospermon lithospermous lithosphere lithotint lithotome lithotomic lithotomical lithotomist lithotomize lithotomous lithotomy lithotony lithotresis lithotripsy lithotriptor lithotrite lithotritic lithotritist lithotrity lithotype lithotypic lithotypy lithous lithoxyl lithsman lithuresis lithuria lithy liticontestation litigable litigant litigate litigation litigationist litigator litigatory litigiosity litigious litigiously litigiousness litiscontest litiscontestation litiscontestational litmus litorinoid litotes litra litster litten litter litterateur litterer littermate littery little littleleaf littleneck littleness littlewale littling littlish littoral littress lituiform lituite lituoline lituoloid liturate liturgical liturgically liturgician liturgics liturgiological liturgiologist liturgiology liturgism liturgist liturgistic liturgistical liturgize liturgy litus lituus litz livability livable livableness live liveborn lived livedo livelihood livelily liveliness livelong lively liven liveness liver liverance liverberry livered liverhearted liverheartedness liveried liverish liverishness liverleaf liverless liverwort liverwurst livery liverydom liveryless liveryman livestock livid lividity lividly lividness livier living livingless livingly livingness livingstoneite livor livre liwan lixive lixivial lixiviate lixiviation lixiviator lixivious lixivium lizard lizardtail llama llano llautu llyn lo loa loach load loadage loaded loaden loader loading loadless loadpenny loadsome loadstone loaf loafer loaferdom loaferish loafing loafingly loaflet loaghtan loam loamily loaminess loaming loamless loamy loan loanable loaner loanin loanmonger loanword loasaceous loath loathe loather loathful loathfully loathfulness loathing loathingly loathliness loathly loathness loathsome loathsomely loathsomeness loave lob lobal lobar lobate lobated lobately lobation lobber lobbish lobby lobbyer lobbyism lobbyist lobbyman lobcock lobe lobectomy lobed lobefoot lobefooted lobeless lobelet lobeliaceous lobelin lobeline lobellated lobfig lobiform lobigerous lobing lobiped loblolly lobo lobola lobopodium lobose lobotomy lobscourse lobscouse lobscouser lobster lobstering lobsterish lobsterlike lobsterproof lobtail lobular lobularly lobulate lobulated lobulation lobule lobulette lobulose lobulous lobworm loca locable local locale localism localist localistic locality localizable localization localize localizer locally localness locanda locate location locational locative locator locellate locellus loch lochage lochan lochetic lochia lochial lochiocolpos lochiocyte lochiometra lochiometritis lochiopyra lochiorrhagia lochiorrhea lochioschesis lochometritis lochoperitonitis lochopyra lochus lochy loci lociation lock lockable lockage lockbox locked locker lockerman locket lockful lockhole locking lockjaw lockless locklet lockmaker lockmaking lockman lockout lockpin lockram locksman locksmith locksmithery locksmithing lockspit lockup lockwork locky loco locodescriptive locofoco locoism locomobile locomobility locomote locomotility locomotion locomotive locomotively locomotiveman locomotiveness locomotivity locomotor locomotory locomutation locoweed loculament loculamentose loculamentous locular loculate loculated loculation locule loculicidal loculicidally loculose loculus locum locus locust locusta locustal locustberry locustelle locustid locusting locustlike locution locutor locutorship locutory lod lode lodemanage lodesman lodestar lodestone lodestuff lodge lodgeable lodged lodgeful lodgeman lodgepole lodger lodgerdom lodging lodginghouse lodgings lodgment lodicule loess loessal loessial loessic loessland loessoid lof lofstelle loft lofter loftily loftiness lofting loftless loftman loftsman lofty log loganberry loganiaceous loganin logaoedic logarithm logarithmal logarithmetic logarithmetical logarithmetically logarithmic logarithmical logarithmically logarithmomancy logbook logcock loge logeion logeum loggat logged logger loggerhead loggerheaded loggia loggin logging loggish loghead logheaded logia logic logical logicalist logicality logicalization logicalize logically logicalness logicaster logician logicism logicist logicity logicize logicless logie login logion logistic logistical logistician logistics logium loglet loglike logman logocracy logodaedaly logogogue logogram logogrammatic logograph logographer logographic logographical logographically logography logogriph logogriphic logoi logolatry logology logomach logomacher logomachic logomachical logomachist logomachize logomachy logomancy logomania logomaniac logometer logometric logometrical logometrically logopedia logopedics logorrhea logos logothete logotype logotypy logroll logroller logrolling logway logwise logwood logwork logy lohan lohoch loimic loimography loimology loin loincloth loined loir loiter loiterer loiteringly loiteringness loka lokao lokaose lokapala loke loket lokiec loll loller lollingite lollingly lollipop lollop lollopy lolly loma lomastome lomatine lomatinous lombard lomboy loment lomentaceous lomentariaceous lomentum lomita lommock lone lonelihood lonelily loneliness lonely loneness lonesome lonesomely lonesomeness long longa longan longanimity longanimous longbeak longbeard longboat longbow longcloth longe longear longer longeval longevity longevous longfelt longfin longful longhair longhand longhead longheaded longheadedly longheadedness longhorn longicaudal longicaudate longicone longicorn longilateral longilingual longiloquence longimanous longimetric longimetry longing longingly longingness longinquity longipennate longipennine longirostral longirostrate longirostrine longisection longish longitude longitudinal longitudinally longjaw longleaf longlegs longly longmouthed longness longs longshanks longshore longshoreman longsome longsomely longsomeness longspun longspur longtail longue longulite longway longways longwise longwool longwork longwort lonquhard lontar loo looby lood loof loofah loofie loofness look looker looking lookout lookum loom loomer loomery looming loon loonery looney loony loop looper loopful loophole looping loopist looplet looplike loopy loose loosely loosemouthed loosen loosener looseness looser loosestrife loosing loosish loot lootable looten looter lootie lootiewallah lootsman lop lope loper lophiid lophine lophiodont lophiodontoid lophiostomate lophiostomous lophobranch lophobranchiate lophocalthrops lophocercal lophodont lophophoral lophophore lophophorine lophophytosis lophosteon lophotriaene lophotrichic lophotrichous lopolith loppard lopper loppet lopping loppy lopseed lopsided lopsidedly lopsidedness lopstick loquacious loquaciously loquaciousness loquacity loquat loquence loquent loquently lora loral loran lorandite loranskite loranthaceous lorarius lorate lorcha lord lording lordkin lordless lordlet lordlike lordlily lordliness lordling lordly lordolatry lordosis lordotic lordship lordwood lordy lore loreal lored loreless lorenzenite lorettoite lorgnette lori loric lorica loricarian loricarioid loricate lorication loricoid lorikeet lorilet lorimer loriot loris lormery lorn lornness loro lorriker lorry lors lorum lory losable losableness lose losel loselism losenger loser losh losing loss lossenite lossless lossproof lost lostling lostness lot lota lotase lote lotebush lotic lotiform lotion lotment lotophagous lotophagously lotrite lots lotter lottery lotto lotus lotusin lotuslike louch louchettes loud louden loudering loudish loudly loudmouthed loudness louey lough lougheen louisine louk loukoum loulu lounder lounderer lounge lounger lounging loungingly loungy loup loupe lour lourdy louse louseberry lousewort lousily lousiness louster lousy lout louter louther loutish loutishly loutishness loutrophoros louty louvar louver louvered louvering louverwork lovability lovable lovableness lovably lovage love lovebird loveflower loveful lovelass loveless lovelessly lovelessness lovelihead lovelily loveliness loveling lovelock lovelorn lovelornness lovely loveman lovemate lovemonger loveproof lover loverdom lovered loverhood lovering loverless loverliness loverly lovership loverwise lovesick lovesickness lovesome lovesomely lovesomeness loveworth loveworthy loving lovingly lovingness low lowa lowan lowbell lowborn lowboy lowbred lowdah lowder loweite lower lowerable lowerclassman lowerer lowering loweringly loweringness lowermost lowery lowigite lowish lowishly lowishness lowland lowlander lowlily lowliness lowly lowmen lowmost lown lowness lownly lowth lowwood lowy lox loxia loxic loxoclase loxocosm loxodograph loxodont loxodontous loxodrome loxodromic loxodromical loxodromically loxodromics loxodromism loxolophodont loxophthalmus loxotic loxotomy loy loyal loyalism loyalist loyalize loyally loyalness loyalty lozenge lozenged lozenger lozengeways lozengewise lozengy lubber lubbercock lubberlike lubberliness lubberly lube lubra lubric lubricant lubricate lubrication lubricational lubricative lubricator lubricatory lubricious lubricity lubricous lubrifaction lubrification lubrify lubritorian lubritorium lucanid lucarne lucban luce lucence lucency lucent lucently lucern lucernal lucernarian lucerne lucet lucible lucid lucida lucidity lucidly lucidness lucifee luciferase luciferin luciferoid luciferous luciferously luciferousness lucific luciform lucifugal lucifugous lucigen lucimeter lucinoid lucivee luck lucken luckful luckie luckily luckiness luckless lucklessly lucklessness lucky lucration lucrative lucratively lucrativeness lucre lucriferous lucriferousness lucrific lucrify luctation luctiferous luctiferousness lucubrate lucubration lucubrator lucubratory lucule luculent luculently lucullite lucumia lucumony lucy ludden ludefisk ludibrious ludibry ludicropathetic ludicroserious ludicrosity ludicrosplenetic ludicrous ludicrously ludicrousness ludification ludlamite ludo ludwigite lue lues luetic luetically lufberry lufbery luff lug luge luger luggage luggageless luggar lugged lugger luggie lugmark lugsail lugsome lugubriosity lugubrious lugubriously lugubriousness lugworm luhinga luigino lujaurite luke lukely lukeness lukewarm lukewarmish lukewarmly lukewarmness lukewarmth lulab lull lullaby luller lulliloo lullingly lulu lum lumachel lumbaginous lumbago lumbang lumbar lumbarization lumbayao lumber lumberdar lumberdom lumberer lumbering lumberingly lumberingness lumberjack lumberless lumberly lumberman lumbersome lumberyard lumbocolostomy lumbocolotomy lumbocostal lumbodorsal lumbodynia lumbosacral lumbovertebral lumbrical lumbricalis lumbriciform lumbricine lumbricoid lumbricosis lumbrous lumen luminaire luminal luminance luminant luminarious luminarism luminarist luminary luminate lumination luminative luminator lumine luminesce luminescence luminescent luminiferous luminificent luminism luminist luminologist luminometer luminosity luminous luminously luminousness lummox lummy lump lumper lumpet lumpfish lumpily lumpiness lumping lumpingly lumpish lumpishly lumpishness lumpkin lumpman lumpsucker lumpy luna lunacy lunambulism lunar lunare lunarian lunarist lunarium lunary lunate lunatellus lunately lunatic lunatically lunation lunatize lunatum lunch luncheon luncheoner luncheonette luncheonless luncher lunchroom lundress lundyfoot lune lunes lunette lung lunge lunged lungeous lunger lungfish lungflower lungful lungi lungie lungis lungless lungmotor lungsick lungworm lungwort lungy lunicurrent luniform lunisolar lunistice lunistitial lunitidal lunkhead lunn lunoid lunt lunula lunular lunulate lunulated lunule lunulet lunulite lupanarian lupanine lupe lupeol lupeose lupetidine lupicide lupiform lupinaster lupine lupinin lupinine lupinosis lupinous lupis lupoid lupous lupulic lupulin lupuline lupulinic lupulinous lupulinum lupulus lupus lupuserythematosus lura lural lurch lurcher lurchingfully lurchingly lurchline lurdan lurdanism lure lureful lurement lurer luresome lurg lurgworm lurid luridity luridly luridness luringly lurk lurker lurkingly lurkingness lurky lurrier lurry luscious lusciously lusciousness lush lushburg lusher lushly lushness lushy lusk lusky lusory lust luster lusterer lusterless lusterware lustful lustfully lustfulness lustihead lustily lustiness lustless lustra lustral lustrant lustrate lustration lustrative lustratory lustreless lustrical lustrification lustrify lustrine lustring lustrous lustrously lustrousness lustrum lusty lut lutaceous lutanist lutany lutation lute luteal lutecia lutecium lutein luteinization luteinize lutelet lutemaker lutemaking luteo luteocobaltic luteofulvous luteofuscescent luteofuscous luteolin luteolous luteoma luteorufescent luteous luteovirescent luter lutescent lutestring lutetium luteway lutfisk luthern luthier lutianid lutianoid lutidine lutidinic luting lutist lutose lutrin lutrine lutulence lutulent lux luxate luxation luxe luxulianite luxuriance luxuriancy luxuriant luxuriantly luxuriantness luxuriate luxuriation luxurious luxuriously luxuriousness luxurist luxury luxus ly lyam lyard lycaenid lycanthrope lycanthropia lycanthropic lycanthropist lycanthropize lycanthropous lycanthropy lyceal lyceum lychnomancy lychnoscope lychnoscopic lycid lycodoid lycopene lycoperdaceous lycoperdoid lycoperdon lycopin lycopod lycopode lycopodiaceous lycorine lycosid lyctid lyddite lydite lye lyencephalous lyery lygaeid lying lyingly lymantriid lymhpangiophlebitis lymnaean lymnaeid lymph lymphad lymphadenectasia lymphadenectasis lymphadenia lymphadenitis lymphadenoid lymphadenoma lymphadenopathy lymphadenosis lymphaemia lymphagogue lymphangeitis lymphangial lymphangiectasis lymphangiectatic lymphangiectodes lymphangiitis lymphangioendothelioma lymphangiofibroma lymphangiology lymphangioma lymphangiomatous lymphangioplasty lymphangiosarcoma lymphangiotomy lymphangitic lymphangitis lymphatic lymphatical lymphation lymphatism lymphatitis lymphatolysin lymphatolysis lymphatolytic lymphectasia lymphedema lymphemia lymphenteritis lymphoblast lymphoblastic lymphoblastoma lymphoblastosis lymphocele lymphocyst lymphocystosis lymphocyte lymphocythemia lymphocytic lymphocytoma lymphocytomatosis lymphocytosis lymphocytotic lymphocytotoxin lymphodermia lymphoduct lymphogenic lymphogenous lymphoglandula lymphogranuloma lymphoid lymphoidectomy lymphology lymphoma lymphomatosis lymphomatous lymphomonocyte lymphomyxoma lymphopathy lymphopenia lymphopenial lymphopoiesis lymphopoietic lymphoprotease lymphorrhage lymphorrhagia lymphorrhagic lymphorrhea lymphosarcoma lymphosarcomatosis lymphosarcomatous lymphosporidiosis lymphostasis lymphotaxis lymphotome lymphotomy lymphotoxemia lymphotoxin lymphotrophic lymphotrophy lymphous lymphuria lymphy lyncean lynch lynchable lyncher lyncine lynnhaven lynx lyomerous lyonetiid lyonnaise lyophile lyophilization lyophilize lyophobe lyopomatous lyotrope lypemania lypothymia lyra lyrate lyrated lyrately lyraway lyre lyrebird lyreflower lyreman lyretail lyric lyrical lyrically lyricalness lyrichord lyricism lyricist lyricize lyriform lyrism lyrist lys lysate lyse lysidine lysigenic lysigenous lysigenously lysimeter lysin lysine lysis lysogen lysogenesis lysogenetic lysogenic lysozyme lyssa lyssic lyssophobia lyterian lythraceous lytic lytta lyxose m ma maam maamselle mabi mabolo mac macaasim macabre macabresque macaco macadam macadamite macadamization macadamize macadamizer macan macana macao macaque macarism macarize macaroni macaronic macaronical macaronically macaronicism macaronism macaroon macaw maccaboy macco maccoboy mace macedoine macehead maceman macer macerate macerater maceration machairodont machan machar machete machi machiavellist machicolate machicolation machicoulis machila machin machinability machinable machinal machinate machination machinator machine machineful machineless machinelike machinely machineman machinemonger machiner machinery machinification machinify machinism machinist machinization machinize machinoclast machinofacture machinotechnique machinule machopolyp machree macies macilence macilency macilent mack mackenboy mackerel mackereler mackereling mackins mackintosh mackintoshite mackle macklike macle macled maclurin maco maconite macracanthrorhynchiasis macradenous macrame macrander macrandrous macrauchene macraucheniid macraucheniiform macrauchenioid macrencephalic macrencephalous macro macroanalysis macroanalyst macroanalytical macrobacterium macrobian macrobiosis macrobiote macrobiotic macrobiotics macroblast macrobrachia macrocarpous macrocephalia macrocephalic macrocephalism macrocephalous macrocephalus macrocephaly macrochaeta macrocheilia macrochemical macrochemically macrochemistry macrochiran macrochiria macrochiropteran macrocladous macroclimate macroclimatic macrococcus macrocoly macroconidial macroconidium macroconjugant macrocornea macrocosm macrocosmic macrocosmical macrocosmology macrocosmos macrocrystalline macrocyst macrocyte macrocythemia macrocytic macrocytosis macrodactyl macrodactylia macrodactylic macrodactylism macrodactylous macrodactyly macrodiagonal macrodomatic macrodome macrodont macrodontia macrodontism macroelement macroergate macroevolution macrofarad macrogamete macrogametocyte macrogamy macrogastria macroglossate macroglossia macrognathic macrognathism macrognathous macrogonidium macrograph macrographic macrography macrolepidoptera macrolepidopterous macrology macromandibular macromania macromastia macromazia macromelia macromeral macromere macromeric macromerite macromeritic macromesentery macrometer macromethod macromolecule macromyelon macromyelonal macron macronuclear macronucleus macronutrient macropetalous macrophage macrophagocyte macrophagus macrophotograph macrophotography macrophyllous macrophysics macropia macropinacoid macropinacoidal macroplankton macroplasia macroplastia macropleural macropodia macropodine macropodous macroprism macroprosopia macropsia macropteran macropterous macropyramid macroreaction macrorhinia macroscelia macroscian macroscopic macroscopical macroscopically macroseism macroseismic macroseismograph macrosepalous macroseptum macrosmatic macrosomatia macrosomatous macrosomia macrosplanchnic macrosporange macrosporangium macrospore macrosporic macrosporophore macrosporophyl macrosporophyll macrostomatous macrostomia macrostructural macrostructure macrostylospore macrostylous macrosymbiont macrothere macrotherioid macrotherm macrotia macrotin macrotome macrotone macrotous macrourid macrozoogonidium macrozoospore macrural macruran macruroid macrurous mactation mactroid macuca macula macular maculate maculated maculation macule maculicole maculicolous maculiferous maculocerebral maculopapular maculose macuta mad madam madame madapollam madarosis madarotic madbrain madbrained madcap madden maddening maddeningly maddeningness madder madderish madderwort madding maddingly maddish maddle made madefaction madefy madeline madescent madhouse madhuca madid madidans madisterium madling madly madman madnep madness mado madoqua madrague madrasah madreperl madreporacean madreporarian madrepore madreporian madreporic madreporiform madreporite madreporitic madrier madrigal madrigaler madrigaletto madrigalian madrigalist madrona madship madstone maduro madweed madwoman madwort mae maeandrine maeandriniform maeandrinoid maeandroid maegbote maenad maenadic maenadism maenaite maestri maestro maffia maffick mafficker maffle mafflin mafic mafoo mafura mag magadis magadize magani magas magazinable magazinage magazine magazinelet magaziner magazinette magazinish magazinism magazinist magaziny mage magenta magged maggle maggot maggotiness maggotpie maggoty magi magic magical magicalize magically magicdom magician magicianship magicked magicking magiric magirics magirist magiristic magirological magirologist magirology magister magisterial magisteriality magisterially magisterialness magistery magistracy magistral magistrality magistrally magistrand magistrant magistrate magistrateship magistratic magistratical magistratically magistrative magistrature magma magmatic magnanimity magnanimous magnanimously magnanimousness magnascope magnascopic magnate magnecrystallic magnelectric magneoptic magnes magnesia magnesial magnesian magnesic magnesioferrite magnesite magnesium magnet magneta magnetic magnetical magnetically magneticalness magnetician magnetics magnetiferous magnetification magnetify magnetimeter magnetism magnetist magnetite magnetitic magnetizability magnetizable magnetization magnetize magnetizer magneto magnetobell magnetochemical magnetochemistry magnetod magnetodynamo magnetoelectric magnetoelectrical magnetoelectricity magnetogenerator magnetogram magnetograph magnetographic magnetoid magnetomachine magnetometer magnetometric magnetometrical magnetometrically magnetometry magnetomotive magnetomotor magneton magnetooptic magnetooptical magnetooptics magnetophone magnetophonograph magnetoplumbite magnetoprinter magnetoscope magnetostriction magnetotelegraph magnetotelephone magnetotherapy magnetotransmitter magnetron magnicaudate magnicaudatous magnifiable magnific magnifical magnifically magnification magnificative magnifice magnificence magnificent magnificently magnificentness magnifico magnifier magnify magniloquence magniloquent magniloquently magniloquy magnipotence magnipotent magnirostrate magnisonant magnitude magnitudinous magnochromite magnoferrite magnolia magnoliaceous magnum magot magpie magpied magpieish magsman maguari maguey maha mahaleb mahalla mahant mahar maharaja maharajrana maharana maharanee maharani maharao maharawal maharawat mahatma mahatmaism mahmal mahmudi mahoe mahoganize mahogany mahoitre maholi maholtine mahone mahout mahseer mahua mahuang maid maidan maiden maidenhair maidenhead maidenhood maidenish maidenism maidenlike maidenliness maidenly maidenship maidenweed maidhood maidish maidism maidkin maidlike maidling maidservant maidy maiefic maieutic maieutical maieutics maigre maiid mail mailable mailbag mailbox mailclad mailed mailer mailguard mailie maillechort mailless mailman mailplane maim maimed maimedly maimedness maimer maimon main mainferre mainlander mainly mainmast mainmortable mainour mainpast mainpernable mainpernor mainpin mainport mainpost mainprise mains mainsail mainsheet mainspring mainstay maint maintain maintainable maintainableness maintainer maintainment maintainor maintenance maintop maintopman maioid maioidean mairatour maire maisonette maitlandite maize maizebird maizenic maizer majagua majestic majestical majestically majesticalness majesticness majestious majesty majestyship majo majolica majolist majoon major majorate majoration majorette majority majorize majorship majuscular majuscule makable make makebate makedom makefast maker makeress makership makeshift makeshiftiness makeshiftness makeshifty makeweight makhzan maki makimono making makluk mako makroskelic makuk mal mala malaanonang malabathrum malacanthid malacanthine malaccident malaceous malachite malacia malacoderm malacodermatous malacodermous malacoid malacolite malacological malacologist malacology malacon malacophilous malacophonous malacophyllous malacopod malacopodous malacopterygian malacopterygious malacostracan malacostracology malacostracous malactic maladaptation maladdress maladive maladjust maladjusted maladjustive maladjustment maladminister maladministration maladministrator maladroit maladroitly maladroitness maladventure malady malagma malaguena malahack malaise malakin malalignment malambo malandered malanders malandrous malanga malapaho malapert malapertly malapertness malapi malapplication malappointment malappropriate malappropriation malaprop malapropian malapropish malapropism malapropoism malapropos malar malaria malarial malariaproof malarin malarioid malariologist malariology malarious malarkey malaroma malarrangement malasapsap malassimilation malassociation malate malati malattress malax malaxable malaxage malaxate malaxation malaxator malaxerman malbehavior malbrouck malchite malconceived malconduct malconformation malconstruction malcontent malcontented malcontentedly malcontentedness malcontentism malcontently malcontentment malconvenance malcreated malcultivation maldeveloped maldevelopment maldigestion maldirection maldistribution maldonite malduck male malease maleate maledicent maledict malediction maledictive maledictory maleducation malefaction malefactor malefactory malefactress malefical malefically maleficence maleficent maleficial maleficiate maleficiation maleic maleinoid malella maleness malengine maleo maleruption malesherbiaceous malevolence malevolency malevolent malevolently malexecution malfeasance malfeasant malfed malformation malformed malfortune malfunction malgovernment malgrace malguzar malguzari malhonest malhygiene mali malic malice maliceful maliceproof malicho malicious maliciously maliciousness malicorium malidentification maliferous maliform malign malignance malignancy malignant malignantly malignation maligner malignify malignity malignly malignment malik malikadna malikala malikana maline malines malinfluence malinger malingerer malingery malinowskite malinstitution malinstruction malintent malism malison malist malistic malkin mall malladrite mallangong mallard mallardite malleability malleabilization malleable malleableize malleableized malleableness malleablize malleal mallear malleate malleation mallee malleiferous malleiform mallein malleinization malleinize mallemaroking mallemuck malleoincudal malleolable malleolar malleolus mallet malleus mallophagan mallophagous malloseismic mallow mallowwort mallum mallus malm malmignatte malmsey malmstone malmy malnourished malnourishment malnutrite malnutrition malo malobservance malobservation maloccluded malocclusion malodor malodorant malodorous malodorously malodorousness malojilla malonate malonic malonyl malonylurea maloperation malorganization malorganized malouah malpais malpighiaceous malplaced malpoise malposed malposition malpractice malpractioner malpraxis malpresentation malproportion malproportioned malpropriety malpublication malreasoning malrotation malshapen malt maltable maltase malter maltha malthouse maltiness malting maltman maltobiose maltodextrin maltodextrine maltolte maltose maltreat maltreatment maltreator maltster malturned maltworm malty malunion malurine malvaceous malvasia malvasian malversation malverse malvoisie malvolition mamba mambo mameliere mamelonation mameluco mamlatdar mamma mammal mammalgia mammalian mammaliferous mammality mammalogical mammalogist mammalogy mammary mammate mammectomy mammee mammer mammiferous mammiform mammilla mammillaplasty mammillar mammillary mammillate mammillated mammillation mammilliform mammilloid mammitis mammock mammogen mammogenic mammogenically mammon mammondom mammoniacal mammonish mammonism mammonist mammonistic mammonite mammonitish mammonization mammonize mammonolatry mammoth mammothrept mammula mammular mammy mamo man mana manacle manage manageability manageable manageableness manageably managee manageless management managemental manager managerdom manageress managerial managerially managership managery manaism manakin manal manas manatee manatine manatoid manavel manavelins manbird manbot manche manchet manchineel mancinism mancipable mancipant mancipate mancipation mancipative mancipatory mancipee mancipium manciple mancipleship mancipular mancono mancus mand mandala mandament mandamus mandant mandarah mandarin mandarinate mandarindom mandariness mandarinic mandarinism mandarinize mandarinship mandatary mandate mandatee mandation mandative mandator mandatorily mandatory mandatum mandelate mandelic mandible mandibula mandibular mandibulary mandibulate mandibulated mandibuliform mandibulohyoid mandibulomaxillary mandibulopharyngeal mandibulosuspensorial mandil mandilion mandola mandolin mandolinist mandolute mandom mandora mandore mandra mandragora mandrake mandrel mandriarch mandrill mandrin mandruka mandua manducable manducate manducation manducatory mandyas mane maned manege manei maneless manent manerial manes manesheet maness maneuver maneuverability maneuverable maneuverer maneuvrability maneuvrable maney manful manfully manfulness mang manga mangabeira mangabey mangal manganapatite manganate manganblende manganbrucite manganeisen manganese manganesian manganetic manganhedenbergite manganic manganiferous manganite manganium manganize manganocalcite manganocolumbite manganophyllite manganosiderite manganosite manganostibiite manganotantalite manganous manganpectolite mange mangeao mangel mangelin manger mangerite mangi mangily manginess mangle mangleman mangler mangling manglingly mango mangona mangonel mangonism mangonization mangonize mangosteen mangrass mangrate mangrove mangue mangy manhandle manhead manhole manhood mani mania maniable maniac maniacal maniacally manic manicate manichord manicole manicure manicurist manid manienie manifest manifestable manifestant manifestation manifestational manifestationist manifestative manifestatively manifested manifestedness manifester manifestive manifestly manifestness manifesto manifold manifolder manifoldly manifoldness manifoldwise maniform manify manikin manikinism manila manilla manille manioc maniple manipulable manipular manipulatable manipulate manipulation manipulative manipulatively manipulator manipulatory manism manist manistic manito manitrunk maniu manjak mank mankeeper mankin mankind manless manlessly manlessness manlet manlihood manlike manlikely manlikeness manlily manliness manling manly manna mannan mannequin manner mannerable mannered mannerhood mannering mannerism mannerist manneristic manneristical manneristically mannerize mannerless mannerlessness mannerliness mannerly manners mannersome manness mannide mannie manniferous mannify mannikinism manning mannish mannishly mannishness mannite mannitic mannitol mannitose mannoheptite mannoheptitol mannoheptose mannoketoheptose mannonic mannosan mannose manny mano manoc manograph manometer manometric manometrical manometry manomin manor manorial manorialism manorialize manorship manoscope manostat manostatic manque manred manrent manroot manrope mansard mansarded manscape manse manservant manship mansion mansional mansionary mansioned mansioneer mansionry manslaughter manslaughterer manslaughtering manslaughterous manslayer manslaying manso mansonry manstealer manstealing manstopper manstopping mansuete mansuetely mansuetude mant manta mantal manteau mantel mantelet manteline mantelletta mantellone mantelpiece mantelshelf manteltree manter mantes mantevil mantic manticism manticore mantid mantilla mantis mantispid mantissa mantistic mantle mantled mantlet mantling manto mantoid mantologist mantology mantra mantrap mantua mantuamaker mantuamaking manual manualii manualism manualist manualiter manually manuao manubrial manubriated manubrium manucaption manucaptor manucapture manucode manucodiata manuduce manuduction manuductor manuductory manufactory manufacturable manufactural manufacture manufacturer manufacturess manuka manul manuma manumea manumisable manumission manumissive manumit manumitter manumotive manurable manurage manurance manure manureless manurer manurial manurially manus manuscript manuscriptal manuscription manuscriptural manusina manustupration manutagi manward manwards manway manweed manwise many manyberry manyfold manyness manyplies manyroot manyways manywhere manywise manzana manzanilla manzanillo manzanita manzil mao maomao map mapach mapau maphrian mapland maple maplebush mapo mappable mapper mappist mappy mapwise maquahuitl maquette maqui maquis mar marabotin marabou marabuto maraca maracan maracock marae marajuana marakapas maral maranatha marang marantaceous marantic marara mararie marasca maraschino marasmic marasmoid marasmous marasmus marathon marathoner marattiaceous maraud marauder maravedi marbelize marble marbled marblehead marbleheader marblehearted marbleization marbleize marbleizer marblelike marbleness marbler marbles marblewood marbling marblish marbly marbrinus marc marcantant marcasite marcasitic marcasitical marcel marceline marcella marceller marcello marcescence marcescent marcgraviaceous march marchantiaceous marcher marchetto marchioness marchite marchland marchman marchpane marcid marco marconi marconigram marconigraph marconigraphy marcor marcottage mardy mare mareblob marechal marekanite maremma maremmatic maremmese marengo marennin marfire margarate margaric margarin margarine margarita margaritaceous margarite margaritiferous margaritomancy margarodid margarodite margarosanite margay marge margeline margent margin marginal marginalia marginality marginalize marginally marginate marginated margination margined marginelliform marginiform margining marginirostral marginoplasty margosa margravate margrave margravely margravial margraviate margravine marguerite marhala maria marialite maricolous marid mariengroschen marigenous marigold marigram marigraph marigraphic marijuana marikina marimba marimonda marina marinade marinate marinated marine mariner marinheiro marinist marinorama mariola marionette mariposite maris marish marishness maritage marital maritality maritally mariticidal mariticide maritime maritorious mariupolite marjoram mark marka markdown marked markedly markedness marker market marketability marketable marketableness marketably marketeer marketer marketing marketman marketstead marketwise markfieldite markhor marking markka markless markman markmoot markshot marksman marksmanly marksmanship markswoman markup markweed markworthy marl marlaceous marlberry marled marler marli marlin marline marlinespike marlite marlitic marllike marlock marlpit marly marm marmalade marmalady marmarization marmarize marmarosis marmatite marmelos marmennill marmit marmite marmolite marmoraceous marmorate marmorated marmoration marmoreal marmoreally marmorean marmoric marmose marmoset marmot maro marocain marok maroon marooner maroquin marplot marplotry marque marquee marquess marquetry marquis marquisal marquisate marquisdom marquise marquisette marquisina marquisotte marquisship marquito marranism marranize marrano marree marrer marriable marriage marriageability marriageable marriageableness marriageproof married marrier marron marrot marrow marrowbone marrowed marrowfat marrowish marrowless marrowlike marrowsky marrowskyer marrowy marry marryer marrying marrymuffe marseilles marsh marshal marshalate marshalcy marshaler marshaless marshalman marshalment marshalship marshberry marshbuck marshfire marshflower marshiness marshite marshland marshlander marshlike marshlocks marshman marshwort marshy marsileaceous marsipobranch marsipobranchiate marsoon marsupial marsupialian marsupialization marsupialize marsupian marsupiate marsupium mart martagon martel marteline martellate martellato marten martensite martensitic martext martial martialism martiality martialization martialize martially martialness martin martinet martineta martinetish martinetishness martinetism martinetship martingale martinico martinoe martite martlet martyniaceous martyr martyrdom martyress martyrium martyrization martyrize martyrizer martyrlike martyrly martyrolatry martyrologic martyrological martyrologist martyrologistic martyrologium martyrology martyrship martyry maru marvel marvelment marvelous marvelously marvelousness marvelry marver mary marybud marysole marzipan mas masa masaridid mascagnine mascagnite mascally mascara mascaron mascled mascleless mascot mascotism mascotry mascularity masculate masculation masculine masculinely masculineness masculinism masculinist masculinity masculinization masculinize masculist masculofeminine masculonucleus masculy masdeu mash masha mashal mashallah mashelton masher mashie mashing mashman mashru mashy masjid mask masked maskelynite masker maskette maskflower masklike maskoid maslin masochism masochist masochistic mason masoned masoner masonic masonite masonry masonwork masooka masoola masque masquer masquerade masquerader mass massa massacre massacrer massage massager massageuse massagist massaranduba massasauga masse massebah massecuite massedly massedness massel masser masseter masseteric masseur masseuse massicot massier massiest massif massily massiness massive massively massiveness massivity masskanne massless masslike massotherapy massoy massula massy mast mastaba mastadenitis mastadenoma mastage mastalgia mastatrophia mastatrophy mastauxe mastax mastectomy masted master masterable masterate masterdom masterer masterful masterfully masterfulness masterhood masterless masterlessness masterlike masterlily masterliness masterling masterly masterman mastermind masterous masterpiece masterproof mastership masterwork masterwort mastery mastful masthead masthelcosis mastic masticability masticable masticate mastication masticator masticatory mastiche masticic masticurous mastiff mastigate mastigium mastigobranchia mastigobranchial mastigophoran mastigophoric mastigophorous mastigopod mastigopodous mastigote mastigure masting mastitis mastless mastlike mastman mastocarcinoma mastoccipital mastochondroma mastochondrosis mastodon mastodonsaurian mastodont mastodontic mastodontine mastodontoid mastodynia mastoid mastoidal mastoidale mastoideal mastoidean mastoidectomy mastoideocentesis mastoideosquamous mastoiditis mastoidohumeral mastoidohumeralis mastoidotomy mastological mastologist mastology mastomenia mastoncus mastooccipital mastoparietal mastopathy mastopexy mastoplastia mastorrhagia mastoscirrhus mastosquamose mastotomy mastotympanic masturbate masturbation masturbational masturbator masturbatory mastwood masty masu masurium mat matachin matachina mataco matadero matador mataeological mataeologue mataeology matagory matagouri matai matajuelo matalan matamata matamoro matanza matapan matapi matara matax matboard match matchable matchableness matchably matchboard matchboarding matchbook matchbox matchcloth matchcoat matcher matching matchless matchlessly matchlessness matchlock matchmaker matchmaking matchmark matchsafe matchstick matchwood matchy mate mategriffon matehood mateless matelessness matelote mately mater materfamilias material materialism materialist materialistic materialistical materialistically materiality materialization materialize materializee materializer materially materialman materialness materiate materiation materiel maternal maternality maternalize maternally maternalness maternity maternology mateship matey matezite matfelon matgrass math mathematic mathematical mathematically mathematicals mathematician mathematicize mathematics mathematize mathemeg mathes mathesis mathetic matico matildite matin matinal matinee mating matins matipo matka matless matlockite matlow matmaker matmaking matra matral matranee matrass matreed matriarch matriarchal matriarchalism matriarchate matriarchic matriarchist matriarchy matric matrical matrices matricidal matricide matricula matriculable matriculant matricular matriculate matriculation matriculator matriculatory matriheritage matriherital matrilineal matrilineally matrilinear matrilinearism matriliny matrilocal matrimonial matrimonially matrimonious matrimoniously matrimony matriotism matripotestal matris matrix matroclinic matroclinous matrocliny matron matronage matronal matronhood matronism matronize matronlike matronliness matronly matronship matronymic matross matsu matsuri matta mattamore mattaro mattboard matte matted mattedly mattedness matter matterate matterative matterful matterfulness matterless mattery matti matting mattock mattoid mattoir mattress mattulla maturable maturate maturation maturative mature maturely maturement matureness maturer maturescence maturescent maturing maturish maturity matutinal matutinally matutinary matutine matutinely matweed maty matzo matzoon matzos matzoth mau maucherite maud maudle maudlin maudlinism maudlinize maudlinly maudlinwort mauger maugh maul mauler mauley mauling maulstick maumet maumetry maun maund maunder maunderer maundful maundy maunge mausolea mausoleal mausolean mausoleum mauther mauve mauveine mauvette mauvine maux maverick mavis mavournin mavrodaphne maw mawbound mawk mawkish mawkishly mawkishness mawky mawp maxilla maxillar maxillary maxilliferous maxilliform maxilliped maxillipedary maxillodental maxillofacial maxillojugal maxillolabial maxillomandibular maxillopalatal maxillopalatine maxillopharyngeal maxillopremaxillary maxilloturbinal maxillozygomatic maxim maxima maximal maximally maximate maximation maximed maximist maximistic maximite maximization maximize maximizer maximum maximus maxixe maxwell may maya mayacaceous maybe maybush maycock mayday mayfish mayhap mayhappen mayhem maynt mayonnaise mayor mayoral mayoralty mayoress mayorship maypop maysin mayten mayweed maza mazalgia mazame mazapilite mazard mazarine maze mazed mazedly mazedness mazeful mazement mazer mazic mazily maziness mazocacothesis mazodynia mazolysis mazolytic mazopathia mazopathic mazopexy mazuca mazuma mazurka mazut mazy mazzard mbalolo mbori me meable meaching mead meader meadow meadowbur meadowed meadower meadowing meadowink meadowland meadowless meadowsweet meadowwort meadowy meadsman meager meagerly meagerness meagre meak meal mealable mealberry mealer mealies mealily mealiness mealless mealman mealmonger mealmouth mealmouthed mealproof mealtime mealy mealymouth mealymouthed mealymouthedly mealymouthedness mealywing mean meander meanderingly meandrine meandriniform meandrite meandrous meaned meaner meaning meaningful meaningfully meaningless meaninglessly meaninglessness meaningly meaningness meanish meanly meanness meant meantone meanwhile mease measle measled measledness measles measlesproof measly measondue measurability measurable measurableness measurably measuration measure measured measuredly measuredness measureless measurelessly measurelessness measurely measurement measurer measuring meat meatal meatbird meatcutter meated meathook meatily meatiness meatless meatman meatometer meatorrhaphy meatoscope meatoscopy meatotome meatotomy meatus meatworks meaty mecate mechanal mechanality mechanalize mechanic mechanical mechanicalism mechanicalist mechanicality mechanicalization mechanicalize mechanically mechanicalness mechanician mechanicochemical mechanicocorpuscular mechanicointellectual mechanicotherapy mechanics mechanism mechanist mechanistic mechanistically mechanization mechanize mechanizer mechanolater mechanology mechanomorphic mechanomorphism mechanotherapeutic mechanotherapeutics mechanotherapist mechanotherapy mechoacan meckelectomy mecodont mecometer mecometry mecon meconic meconidium meconin meconioid meconium meconology meconophagism meconophagist mecopteran mecopteron mecopterous medal medaled medalet medalist medalize medallary medallic medallically medallion medallionist meddle meddlecome meddlement meddler meddlesome meddlesomely meddlesomeness meddling meddlingly media mediacid mediacy mediad mediaevalize mediaevally medial medialization medialize medialkaline medially median medianic medianimic medianimity medianism medianity medianly mediant mediastinal mediastine mediastinitis mediastinotomy mediastinum mediate mediately mediateness mediating mediatingly mediation mediative mediatization mediatize mediator mediatorial mediatorialism mediatorially mediatorship mediatory mediatress mediatrice mediatrix medic medicable medical medically medicament medicamental medicamentally medicamentary medicamentation medicamentous medicaster medicate medication medicative medicator medicatory medicinable medicinableness medicinal medicinally medicinalness medicine medicinelike medicinemonger mediciner medico medicobotanical medicochirurgic medicochirurgical medicodental medicolegal medicolegally medicomania medicomechanic medicomechanical medicomoral medicophysical medicopsychological medicopsychology medicostatistic medicosurgical medicotopographic medicozoologic mediety medieval medievalism medievalist medievalistic medievalize medievally medifixed mediglacial medimn medimno medimnos medimnus medino medio medioanterior mediocarpal medioccipital mediocre mediocrist mediocrity mediocubital mediodepressed mediodigital mediodorsal mediodorsally mediofrontal mediolateral mediopalatal mediopalatine mediopassive mediopectoral medioperforate mediopontine medioposterior mediosilicic mediostapedial mediotarsal medioventral medisance medisect medisection meditant meditate meditating meditatingly meditation meditationist meditatist meditative meditatively meditativeness meditator mediterranean mediterraneous medithorax meditullium medium mediumism mediumistic mediumization mediumize mediumship medius medjidie medlar medley medregal medrick medrinaque medulla medullar medullary medullate medullated medullation medullispinal medullitis medullization medullose medusal medusalike medusan medusiferous medusiform medusoid meebos meece meed meedless meek meeken meekhearted meekheartedness meekling meekly meekness meered meerkat meerschaum meese meet meetable meeten meeter meeterly meethelp meethelper meeting meetinger meetinghouse meetly meetness megabar megacephalia megacephalic megacephaly megacerine megacerotine megachilid megachiropteran megachiropterous megacolon megacosm megacoulomb megacycle megadont megadynamics megadyne megaerg megafarad megafog megagamete megagametophyte megajoule megakaryocyte megaleme megalerg megalesthete megalethoscope megalith megalithic megaloblast megaloblastic megalocardia megalocarpous megalocephalia megalocephalic megalocephalous megalocephaly megalochirous megalocornea megalocyte megalocytosis megalodactylia megalodactylism megalodactylous megalodont megalodontia megaloenteron megalogastria megaloglossia megalograph megalography megalohepatia megalokaryocyte megalomania megalomaniac megalomaniacal megalomelia megalopa megalopenis megalophonic megalophonous megalophthalmus megalopia megalopic megalopine megaloplastocyte megalopolis megalopolitan megalopolitanism megalopore megalops megalopsia megalosaur megalosaurian megalosauroid megaloscope megaloscopy megalosphere megalospheric megalosplenia megalosyndactyly megaloureter megamastictoral megamere megameter megampere meganucleus megaparsec megaphone megaphonic megaphotographic megaphotography megaphyllous megapod megapode megaprosopous megapterine megaron megasclere megascleric megasclerous megasclerum megascope megascopic megascopical megascopically megaseism megaseismic megaseme megasporange megasporangium megaspore megasporic megasporophyll megasynthetic megathere megatherian megatherine megatherioid megatherm megathermic megatheroid megaton megatype megatypy megavolt megawatt megaweber megazooid megazoospore megerg megilp megmho megohm megohmit megohmmeter megophthalmus megotalc megrim megrimish mehalla mehari meharist mehmandar mehtar mehtarship meile mein meinie meio meiobar meionite meiophylly meiosis meiotaxy meiotic meith meizoseismal meizoseismic mejorana mekometer mel mela melaconite melada meladiorite melagabbro melagra melagranite melalgia melam melamed melamine melampodium melampyritol melanagogal melanagogue melancholia melancholiac melancholic melancholically melancholily melancholiness melancholious melancholiously melancholiousness melancholish melancholist melancholize melancholomaniac melancholy melancholyish melanconiaceous melanemia melanemic melange melanger melangeur melanian melanic melaniferous melanilin melaniline melanin melanism melanistic melanite melanitic melanize melano melanoblast melanocarcinoma melanocerite melanochroite melanochroous melanocomous melanocrate melanocratic melanocyte melanoderma melanodermia melanodermic melanogen melanoid melanoidin melanoma melanopathia melanopathy melanophore melanoplakia melanorrhagia melanorrhea melanosarcoma melanosarcomatosis melanoscope melanose melanosed melanosis melanosity melanospermous melanotekite melanotic melanotrichous melanous melanterite melanthaceous melanure melanuresis melanuria melanuric melaphyre melasma melasmic melassigenic melastomaceous melastomad melatope melaxuma melch meld melder meldometer meldrop mele meleagrine melebiose melee melena melene melenic melezitase melezitose meliaceous melianthaceous meliatin melibiose melic melicera meliceric meliceris melicerous melichrous melicitose melicraton melilite melilitite melilot meline melinite meliorability meliorable meliorant meliorate meliorater melioration meliorative meliorator meliorism meliorist melioristic meliority meliphagan meliphagidan meliphagous meliphanite meliponine melisma melismatic melismatics melissyl melissylic melitemia melithemia melitis melitose melitriose melittologist melittology melituria melituric mell mellaginous mellate mellay melleous meller melliferous mellificate mellification mellifluence mellifluent mellifluently mellifluous mellifluously mellifluousness mellimide mellisonant mellisugent mellit mellitate mellite mellitic mellivorous mellon mellonides mellophone mellow mellowly mellowness mellowy mellsman melocoton melodeon melodia melodial melodially melodic melodica melodically melodicon melodics melodiograph melodion melodious melodiously melodiousness melodism melodist melodize melodizer melodram melodrama melodramatic melodramatical melodramatically melodramaticism melodramatics melodramatist melodramatize melodrame melody melodyless meloe melogram melograph melographic meloid melologue melolonthidan melolonthine melomane melomania melomaniac melomanic melon meloncus melongena melongrower melonist melonite melonlike melonmonger melonry melophone melophonic melophonist melopiano meloplast meloplastic meloplasty melopoeia melopoeic melos melosa melotragedy melotragic melotrope melt meltability meltable meltage melted meltedness melteigite melter melters melting meltingly meltingness melton mem member membered memberless membership membracid membracine membral membrally membrana membranaceous membranaceously membranate membrane membraned membraneless membranelike membranelle membraneous membraniferous membraniform membranin membranocalcareous membranocartilaginous membranocoriaceous membranocorneous membranogenic membranoid membranology membranonervous membranosis membranous membranously membranula membranule membretto memento meminna memo memoir memoirism memoirist memorabilia memorability memorable memorableness memorably memoranda memorandist memorandize memorandum memorative memoria memorial memorialist memorialization memorialize memorializer memorially memoried memorious memorist memorizable memorization memorize memorizer memory memoryless men menaccanite menaccanitic menace menaceable menaceful menacement menacer menacing menacingly menacme menadione menage menagerie menagerist menald menarche mend mendable mendacious mendaciously mendaciousness mendacity mendee mendelyeevite mender mendicancy mendicant mendicate mendication mendicity mending mendipite mendole mendozite mends meneghinite menfolk meng menhaden menhir menial menialism meniality menially menilite meningeal meninges meningic meningina meningism meningitic meningitis meningocele meningocephalitis meningocerebritis meningococcal meningococcemia meningococcic meningococcus meningocortical meningoencephalitis meningoencephalocele meningomalacia meningomyclitic meningomyelitis meningomyelocele meningomyelorrhaphy meningorachidian meningoradicular meningorhachidian meningorrhagia meningorrhea meningorrhoea meningosis meningospinal meningotyphoid meninting meninx meniscal meniscate menisciform meniscitis meniscoid meniscoidal meniscus menisperm menispermaceous menispermine menkind mennom menognath menognathous menologium menology menometastasis menopausal menopause menopausic menophania menoplania menorhynchous menorrhagia menorrhagic menorrhagy menorrhea menorrheic menorrhoea menorrhoeic menoschesis menoschetic menosepsis menostasia menostasis menostatic menostaxis menotyphlic menoxenia mensa mensal mensalize mense menseful menseless menses mensk menstrual menstruant menstruate menstruation menstruous menstruousness menstruum mensual mensurability mensurable mensurableness mensurably mensural mensuralist mensurate mensuration mensurational mensurative mentagra mental mentalis mentalism mentalist mentalistic mentality mentalization mentalize mentally mentary mentation menthaceous menthadiene menthane menthene menthenol menthenone menthol mentholated menthone menthyl menticide menticultural menticulture mentiferous mentiform mentigerous mentimeter mentimutation mention mentionability mentionable mentionless mentoanterior mentobregmatic mentocondylial mentohyoid mentolabial mentomeckelian mentonniere mentoposterior mentor mentorial mentorism mentorship mentum menu meny menyie menzie mephitic mephitical mephitine mephitis mephitism meralgia meraline merbaby mercal mercantile mercantilely mercantilism mercantilist mercantilistic mercantility mercaptal mercaptan mercaptides mercaptids mercapto mercaptol mercaptole mercatorial mercenarily mercenariness mercenary mercer merceress mercerization mercerize mercerizer mercership mercery merch merchandisable merchandise merchandiser merchant merchantable merchantableness merchanter merchanthood merchantish merchantlike merchantly merchantman merchantry merchantship merchet merciful mercifully mercifulness merciless mercilessly mercilessness merciment mercurate mercuration mercurial mercurialism mercuriality mercurialization mercurialize mercurially mercurialness mercuriamines mercuriammonium mercuriate mercuric mercuride mercurification mercurify mercurization mercurize mercurophen mercurous mercy mercyproof merdivorous mere merel merely merenchyma merenchymatous meresman merestone meretricious meretriciously meretriciousness meretrix merfold merfolk merganser merge mergence merger mergh meriah mericarp merice meridian meridional meridionality meridionally meril meringue meringued meriquinoid meriquinoidal meriquinone meriquinonic meriquinonoid merism merismatic merismoid merist meristele meristelic meristem meristematic meristematically meristic meristically meristogenous merit meritable merited meritedly meriter meritful meritless meritmonger meritmongering meritmongery meritorious meritoriously meritoriousness merk merkhet merkin merl merle merlette merlin merlon mermaid mermaiden merman mermithaner mermithergate mermithization mermithized mermithogyne mermother mero meroblastic meroblastically merocele merocelic merocerite meroceritic merocrystalline merocyte merogamy merogastrula merogenesis merogenetic merogenic merognathite merogonic merogony merohedral merohedric merohedrism meroistic meromorphic meromyarian merop meropia meropidan meroplankton meroplanktonic meropodite meropoditic merorganization merorganize meros merosomal merosomatous merosome merosthenic merostomatous merostome merostomous merosymmetrical merosymmetry merosystematic merotomize merotomy merotropism merotropy meroxene merozoite merpeople merribauks merribush merriless merrily merriment merriness merrow merry merrymake merrymaker merrymaking merryman merrymeeting merrythought merrytrotter merrywing merse meruline merulioid merveileux merwinite merwoman merycism merycismus mesa mesabite mesaconate mesaconic mesad mesadenia mesail mesal mesalike mesally mesameboid mesange mesaortitis mesaraic mesaraical mesarch mesarteritic mesarteritis mesaticephal mesaticephali mesaticephalic mesaticephalism mesaticephalous mesaticephaly mesatipellic mesatipelvic mesatiskelic mesaxonic mescal mescaline mescalism mesdames mese mesectoderm mesem mesembryo mesembryonic mesencephalic mesencephalon mesenchyma mesenchymal mesenchymatal mesenchymatic mesenchymatous mesenchyme mesendoderm mesenna mesenterial mesenteric mesenterical mesenterically mesenteriform mesenteriolum mesenteritic mesenteritis mesenteron mesenteronic mesentery mesentoderm mesepimeral mesepimeron mesepisternal mesepisternum mesepithelial mesepithelium mesethmoid mesethmoidal mesh meshed meshrabiyeh meshwork meshy mesiad mesial mesially mesian mesic mesically mesilla mesiobuccal mesiocervical mesioclusion mesiodistal mesiodistally mesiogingival mesioincisal mesiolabial mesiolingual mesion mesioocclusal mesiopulpal mesioversion mesitite mesityl mesitylene mesitylenic mesmerian mesmeric mesmerical mesmerically mesmerism mesmerist mesmerite mesmerizability mesmerizable mesmerization mesmerize mesmerizee mesmerizer mesmeromania mesmeromaniac mesnality mesnalty mesne meso mesoappendicitis mesoappendix mesoarial mesoarium mesobar mesobenthos mesoblast mesoblastema mesoblastemic mesoblastic mesobranchial mesobregmate mesocaecal mesocaecum mesocardia mesocardium mesocarp mesocentrous mesocephal mesocephalic mesocephalism mesocephalon mesocephalous mesocephaly mesochilium mesochondrium mesochroic mesocoele mesocoelian mesocoelic mesocolic mesocolon mesocoracoid mesocranial mesocratic mesocuneiform mesode mesoderm mesodermal mesodermic mesodic mesodisilicic mesodont mesofurca mesofurcal mesogaster mesogastral mesogastric mesogastrium mesogloea mesogloeal mesognathic mesognathion mesognathism mesognathous mesognathy mesogyrate mesohepar mesokurtic mesolabe mesole mesolecithal mesolimnion mesolite mesolithic mesologic mesological mesology mesomere mesomeric mesomerism mesometral mesometric mesometrium mesomorph mesomorphic mesomorphous mesomorphy mesomyodian mesomyodous meson mesonasal mesonephric mesonephridium mesonephritic mesonephros mesonic mesonotal mesonotum mesoparapteral mesoparapteron mesopectus mesoperiodic mesopetalum mesophile mesophilic mesophilous mesophragm mesophragma mesophragmal mesophryon mesophyll mesophyllous mesophyllum mesophyte mesophytic mesophytism mesopic mesoplankton mesoplanktonic mesoplast mesoplastic mesoplastral mesoplastron mesopleural mesopleuron mesoplodont mesopodial mesopodiale mesopodium mesopotamia mesopotamic mesoprescutal mesoprescutum mesoprosopic mesopterygial mesopterygium mesopterygoid mesorchial mesorchium mesorectal mesorectum mesorrhin mesorrhinal mesorrhinian mesorrhinism mesorrhinium mesorrhiny mesosalpinx mesosaur mesoscapula mesoscapular mesoscutal mesoscutellar mesoscutellum mesoscutum mesoseismal mesoseme mesosiderite mesosigmoid mesoskelic mesosoma mesosomatic mesosome mesosperm mesospore mesosporic mesosporium mesostasis mesosternal mesosternebra mesosternebral mesosternum mesostethium mesostomid mesostyle mesostylous mesosuchian mesotarsal mesotartaric mesothelial mesothelium mesotherm mesothermal mesothesis mesothet mesothetic mesothetical mesothoracic mesothoracotheca mesothorax mesothorium mesotonic mesotroch mesotrocha mesotrochal mesotrochous mesotron mesotropic mesotympanic mesotype mesovarian mesovarium mesoventral mesoventrally mesoxalate mesoxalic mesoxalyl mesozoan mespil mesquite mess message messagery messaline messan messe messelite messenger messengership messer messet messianically messieurs messily messin messiness messing messman messmate messor messroom messrs messtin messuage messy mestee mester mestiza mestizo mestome mesymnion met meta metabasis metabasite metabatic metabiological metabiology metabiosis metabiotic metabiotically metabismuthic metabisulphite metabletic metabola metabole metabolian metabolic metabolism metabolite metabolizable metabolize metabolon metabolous metaboly metaborate metaboric metabranchial metabrushite metabular metacarpal metacarpale metacarpophalangeal metacarpus metacenter metacentral metacentric metacentricity metachemic metachemistry metachlamydeous metachromasis metachromatic metachromatin metachromatinic metachromatism metachrome metachronism metachrosis metacinnabarite metacism metacismus metaclase metacneme metacoele metacoelia metaconal metacone metaconid metaconule metacoracoid metacrasis metacresol metacromial metacromion metacryst metacyclic metacymene metad metadiabase metadiazine metadiorite metadiscoidal metadromous metafluidal metaformaldehyde metafulminuric metagalactic metagalaxy metagaster metagastric metagastrula metage metagelatin metagenesis metagenetic metagenetically metagenic metageometer metageometrical metageometry metagnath metagnathism metagnathous metagnomy metagnostic metagnosticism metagram metagrammatism metagrammatize metagraphic metagraphy metahewettite metahydroxide metaigneous metainfective metakinesis metakinetic metal metalammonium metalanguage metalbumin metalcraft metaldehyde metalepsis metaleptic metaleptical metaleptically metaler metaline metalined metaling metalinguistic metalinguistics metalism metalist metalization metalize metallary metalleity metallic metallical metallically metallicity metallicize metallicly metallics metallide metallifacture metalliferous metallification metalliform metallify metallik metalline metallism metallization metallize metallochrome metallochromy metallogenetic metallogenic metallogeny metallograph metallographer metallographic metallographical metallographist metallography metalloid metalloidal metallometer metallophone metalloplastic metallorganic metallotherapeutic metallotherapy metallurgic metallurgical metallurgically metallurgist metallurgy metalmonger metalogic metalogical metaloph metalorganic metaloscope metaloscopy metaluminate metaluminic metalware metalwork metalworker metalworking metalworks metamathematical metamathematics metamer metameral metamere metameric metamerically metameride metamerism metamerization metamerized metamerous metamery metamorphic metamorphism metamorphize metamorphopsia metamorphopsy metamorphosable metamorphose metamorphoser metamorphoses metamorphosian metamorphosic metamorphosical metamorphosis metamorphostical metamorphotic metamorphous metamorphy metanalysis metanauplius metanephric metanephritic metanephron metanephros metanepionic metanilic metanitroaniline metanomen metanotal metanotum metantimonate metantimonic metantimonious metantimonite metantimonous metanym metaorganism metaparapteral metaparapteron metapectic metapectus metapepsis metapeptone metaperiodic metaphase metaphenomenal metaphenomenon metaphenylene metaphenylenediamin metaphenylenediamine metaphloem metaphonical metaphonize metaphony metaphor metaphoric metaphorical metaphorically metaphoricalness metaphorist metaphorize metaphosphate metaphosphoric metaphosphorous metaphragm metaphragmal metaphrase metaphrasis metaphrast metaphrastic metaphrastical metaphrastically metaphyseal metaphysic metaphysical metaphysically metaphysician metaphysicianism metaphysicist metaphysicize metaphysicous metaphysics metaphysis metaphyte metaphytic metaphyton metaplasia metaplasis metaplasm metaplasmic metaplast metaplastic metapleural metapleure metapleuron metaplumbate metaplumbic metapneumonic metapneustic metapodial metapodiale metapodium metapolitic metapolitical metapolitician metapolitics metapophyseal metapophysial metapophysis metapore metapostscutellar metapostscutellum metaprescutal metaprescutum metaprotein metapsychic metapsychical metapsychics metapsychism metapsychist metapsychological metapsychology metapsychosis metapterygial metapterygium metapterygoid metarabic metarhyolite metarossite metarsenic metarsenious metarsenite metasaccharinic metascutal metascutellar metascutellum metascutum metasedimentary metasilicate metasilicic metasoma metasomal metasomasis metasomatic metasomatism metasomatosis metasome metasperm metaspermic metaspermous metastability metastable metastannate metastannic metastasis metastasize metastatic metastatical metastatically metasternal metasternum metasthenic metastibnite metastigmate metastoma metastome metastrophe metastrophic metastyle metatantalic metatarsal metatarsale metatarse metatarsophalangeal metatarsus metatatic metatatically metataxic metate metathalamus metatheology metatherian metatheses metathesis metathetic metathetical metathetically metathoracic metathorax metatitanate metatitanic metatoluic metatoluidine metatracheal metatrophic metatungstic metatype metatypic metavanadate metavanadic metavauxite metavoltine metaxenia metaxite metaxylem metaxylene metayer metazoal metazoan metazoea metazoic metazoon mete metel metempiric metempirical metempirically metempiricism metempiricist metempirics metempsychic metempsychosal metempsychose metempsychoses metempsychosical metempsychosis metempsychosize metemptosis metencephalic metencephalon metensarcosis metensomatosis metenteron metenteronic meteogram meteograph meteor meteorgraph meteoric meteorical meteorically meteorism meteorist meteoristic meteorital meteorite meteoritic meteoritics meteorization meteorize meteorlike meteorogram meteorograph meteorographic meteorography meteoroid meteoroidal meteorolite meteorolitic meteorologic meteorological meteorologically meteorologist meteorology meteorometer meteoroscope meteoroscopy meteorous metepencephalic metepencephalon metepimeral metepimeron metepisternal metepisternum meter meterage metergram meterless meterman metership metestick metewand meteyard methacrylate methacrylic methadone methanal methanate methane methanoic methanolysis methanometer metheglin methemoglobin methemoglobinemia methemoglobinuria methenamine methene methenyl mether methid methide methine methinks methiodide methionic methionine methobromide method methodaster methodeutic methodic methodical methodically methodicalness methodics methodism methodist methodization methodize methodizer methodless methodological methodologically methodologist methodology methought methoxide methoxychlor methoxyl methronic methyl methylacetanilide methylal methylamine methylaniline methylanthracene methylate methylation methylator methylcholanthrene methylene methylenimine methylenitan methylethylacetic methylglycine methylglycocoll methylglyoxal methylic methylmalonic methylnaphthalene methylol methylolurea methylosis methylotic methylpentose methylpentoses methylpropane methylsulfanol metic meticulosity meticulous meticulously meticulousness metier metis metochous metochy metoestrous metoestrum metonym metonymic metonymical metonymically metonymous metonymously metonymy metope metopic metopion metopism metopomancy metopon metoposcopic metoposcopical metoposcopist metoposcopy metosteal metosteon metoxazine metoxenous metoxeny metra metralgia metranate metranemia metratonia metrectasia metrectatic metrectomy metrectopia metrectopic metrectopy metreless metreship metreta metrete metretes metria metric metrical metrically metrician metricism metricist metricize metrics metrification metrifier metrify metriocephalic metrist metritis metrocampsis metrocarat metrocarcinoma metrocele metroclyst metrocolpocele metrocracy metrocratic metrocystosis metrodynia metrofibroma metrological metrologist metrologue metrology metrolymphangitis metromalacia metromalacoma metromalacosis metromania metromaniac metromaniacal metrometer metroneuria metronome metronomic metronomical metronomically metronymic metronymy metroparalysis metropathia metropathic metropathy metroperitonitis metrophlebitis metrophotography metropole metropolis metropolitan metropolitanate metropolitancy metropolitanism metropolitanize metropolitanship metropolite metropolitic metropolitical metropolitically metroptosia metroptosis metroradioscope metrorrhagia metrorrhagic metrorrhea metrorrhexis metrorthosis metrosalpingitis metrosalpinx metroscirrhus metroscope metroscopy metrostaxis metrostenosis metrosteresis metrostyle metrosynizesis metrotherapist metrotherapy metrotome metrotomy mettar mettle mettled mettlesome mettlesomely mettlesomeness metusia metze meuse meute mew meward mewer mewl mewler meyerhofferite mezcal mezereon mezereum mezuzah mezzanine mezzo mezzograph mezzotint mezzotinter mezzotinto mho mhometer mi miamia mian miaow miaower miargyrite miarolitic mias miaskite miasm miasma miasmal miasmata miasmatic miasmatical miasmatically miasmatize miasmatology miasmatous miasmic miasmology miasmous miaul miauler mib mica micaceous micacious micacite micasization micasize micate mication mice micellar micelle miche micher michigan miching micht mick mickle mico miconcave micramock micranatomy micrander micrandrous micraner micranthropos micrencephalia micrencephalic micrencephalous micrencephalus micrencephaly micrergate micresthete micrify micro microammeter microampere microanalysis microanalyst microanalytical microangstrom microapparatus microbal microbalance microbar microbarograph microbattery microbe microbeless microbeproof microbial microbian microbic microbicidal microbicide microbiologic microbiological microbiologically microbiologist microbiology microbion microbiosis microbiota microbiotic microbious microbism microbium microblast microblepharia microblepharism microblephary microbrachia microbrachius microburet microburette microburner microcaltrop microcardia microcardius microcarpous microcellular microcentrosome microcentrum microcephal microcephalia microcephalic microcephalism microcephalous microcephalus microcephaly microceratous microchaeta microcharacter microcheilia microcheiria microchemic microchemical microchemically microchemistry microchiria microchiropteran microchiropterous microchromosome microchronometer microcinema microcinematograph microcinematographic microcinematography microclastic microclimate microclimatic microclimatologic microclimatological microclimatology microcline microcnemia microcoat micrococcal microcoleoptera microcolon microcolorimeter microcolorimetric microcolorimetrically microcolorimetry microcolumnar microcombustion microconidial microconidium microconjugant microconstituent microcopy microcoria microcosm microcosmal microcosmian microcosmic microcosmical microcosmography microcosmology microcosmos microcosmus microcoulomb microcranous microcrith microcryptocrystalline microcrystal microcrystalline microcrystallogeny microcrystallography microcrystalloscopy microcurie microcyst microcyte microcythemia microcytosis microdactylia microdactylism microdactylous microdentism microdentous microdetection microdetector microdetermination microdiactine microdissection microdistillation microdont microdontism microdontous microdose microdrawing microdrive microelectrode microelectrolysis microelectroscope microelement microerg microestimation microeutaxitic microevolution microexamination microfarad microfauna microfelsite microfelsitic microfilaria microfilm microflora microfluidal microfoliation microfossil microfungus microfurnace microgalvanometer microgamete microgametocyte microgametophyte microgamy microgastria microgastrine microgeological microgeologist microgeology microgilbert microglia microglossia micrognathia micrognathic micrognathous microgonidial microgonidium microgram microgramme microgranite microgranitic microgranitoid microgranular microgranulitic micrograph micrographer micrographic micrographical micrographically micrographist micrography micrograver microgravimetric microgroove microgyne microgyria microhenry microhepatia microhistochemical microhistology microhm microhmmeter microhymenopteron microinjection microjoule microlepidopter microlepidoptera microlepidopteran microlepidopterist microlepidopteron microlepidopterous microleukoblast microlevel microlite microliter microlith microlithic microlitic micrologic micrological micrologically micrologist micrologue micrology microlux micromania micromaniac micromanipulation micromanipulator micromanometer micromazia micromeasurement micromechanics micromelia micromelic micromelus micromembrane micromeral micromere micromeric micromerism micromeritic micromeritics micromesentery micrometallographer micrometallography micrometallurgy micrometer micromethod micrometrical micrometrically micrometry micromicrofarad micromicron micromil micromillimeter micromineralogical micromineralogy micromorph micromotion micromotoscope micromyelia micromyeloblast micron micronization micronize micronometer micronuclear micronucleus micronutrient microorganic microorganism microorganismal micropaleontology micropantograph microparasite microparasitic micropathological micropathologist micropathology micropegmatite micropegmatitic micropenis microperthite microperthitic micropetalous micropetrography micropetrologist micropetrology microphage microphagocyte microphagous microphagy microphakia microphallus microphone microphonic microphonics microphonograph microphot microphotograph microphotographic microphotography microphotometer microphotoscope microphthalmia microphthalmic microphthalmos microphthalmus microphyllous microphysical microphysics microphysiography microphytal microphyte microphytic microphytology micropia micropin micropipette microplakite microplankton microplastocyte microplastometer micropodal micropodia micropoecilitic micropoicilitic micropoikilitic micropolariscope micropolarization micropore microporosity microporous microporphyritic microprint microprojector micropsia micropsy micropterism micropterous micropterygid micropterygious micropylar micropyle micropyrometer microradiometer microreaction microrefractometer microrhabdus microrheometer microrheometric microrheometrical microsaurian microsclere microsclerous microsclerum microscopal microscope microscopial microscopic microscopical microscopically microscopics microscopist microscopize microscopy microsecond microsection microseism microseismic microseismical microseismograph microseismology microseismometer microseismometrograph microseismometry microseme microseptum microsmatic microsmatism microsoma microsomatous microsome microsomia microsommite microspecies microspectroscope microspectroscopic microspectroscopy microspermous microsphaeric microsphere microspheric microspherulitic microsplanchnic microsplenia microsplenic microsporange microsporangium microspore microsporiasis microsporic microsporidian microsporophore microsporophyll microsporosis microsporous microstat microsthene microsthenic microstomatous microstome microstomia microstomous microstructural microstructure microstylospore microstylous microsublimation microtasimeter microtechnic microtechnique microtelephone microtelephonic microtheos microtherm microthermic microthorax microtia microtine microtitration microtome microtomic microtomical microtomist microtomy microtone microtypal microtype microtypical microvolt microvolume microvolumetric microwatt microwave microweber microzoa microzoal microzoan microzoaria microzoarian microzoary microzoic microzone microzooid microzoology microzoon microzoospore microzyma microzyme microzymian micrurgic micrurgical micrurgist micrurgy miction micturate micturition mid midafternoon midautumn midaxillary midbrain midday midden middenstead middle middlebreaker middlebuster middleman middlemanism middlemanship middlemost middler middlesplitter middlewards middleway middleweight middlewoman middling middlingish middlingly middlingness middlings middorsal middy mide midevening midewiwin midfacial midforenoon midfrontal midge midget midgety midgy midheaven midiron midland midlandward midlatitude midleg midlenting midmain midmandibular midmonth midmonthly midmorn midmorning midmost midnight midnightly midnoon midparent midparentage midparental midpit midrange midrash midrashic midrib midribbed midriff mids midseason midsentence midship midshipman midshipmanship midshipmite midships midspace midst midstory midstout midstream midstreet midstroke midstyled midsummer midsummerish midsummery midtap midvein midverse midward midwatch midway midweek midweekly midwestward midwife midwifery midwinter midwinterly midwintry midwise midyear mien miersite miff miffiness miffy mig might mightily mightiness mightless mightnt mighty mightyhearted mightyship miglio migmatite migniardise mignon mignonette mignonne mignonness migraine migrainoid migrainous migrant migrate migration migrational migrationist migrative migrator migratorial migratory miharaite mihrab mijakite mijl mikado mikadoate mikadoism mike mikie mil mila milady milammeter milarite milch milcher milchy mild milden milder mildew mildewer mildewy mildhearted mildheartedness mildish mildly mildness mile mileage milepost miler milesima milestone mileway milfoil milha miliaceous miliarensis miliaria miliarium miliary milieu milioliform milioline miliolite miliolitic militancy militant militantly militantness militarily militariness militarism militarist militaristic militaristically militarization militarize military militaryism militaryment militaster militate militation militia militiaman militiate milium milk milkbush milken milker milkeress milkfish milkgrass milkhouse milkily milkiness milking milkless milklike milkmaid milkman milkness milkshed milkshop milksick milksop milksopism milksoppery milksopping milksoppish milksoppy milkstone milkweed milkwood milkwort milky mill milla millable millage millboard millclapper millcourse milldam mille milled millefiori milleflorous millefoliate millenarian millenarianism millenarist millenary millennia millennial millennialism millennialist millennially millennian millenniarism millenniary millennium millepede millepore milleporiform milleporine milleporite milleporous millepunctate miller milleress millering millerite millerole millesimal millesimally millet millfeed millful millhouse milliad milliammeter milliamp milliampere milliamperemeter milliangstrom milliard milliardaire milliare milliarium milliary millibar millicron millicurie millieme milliequivalent millifarad millifold milliform milligal milligrade milligram milligramage millihenry millilambert millile milliliter millilux millimeter millimicron millimolar millimole millincost milline milliner millinerial millinering millinery milling millinormal millinormality millioctave millioersted million millionaire millionairedom millionairess millionairish millionairism millionary millioned millioner millionfold millionism millionist millionize millionocracy millions millionth milliphot millipoise millisecond millistere millithrum millivolt millivoltmeter millman millocracy millocrat millocratism millosevichite millowner millpond millpool millpost millrace millrynd millsite millstock millstone millstream milltail millward millwork millworker millwright millwrighting milner milo milord milpa milreis milsey milsie milt milter miltlike miltsick miltwaste milty milvine milvinous milzbrand mim mima mimbar mimble mime mimeo mimeograph mimeographic mimeographically mimeographist mimer mimesis mimester mimetene mimetesite mimetic mimetical mimetically mimetism mimetite mimiambi mimiambic mimiambics mimic mimical mimically mimicism mimicker mimicry mimine miminypiminy mimly mimmation mimmest mimmock mimmocking mimmocky mimmood mimmoud mimmouthed mimmouthedness mimodrama mimographer mimography mimologist mimosaceous mimosis mimosite mimotype mimotypic mimp mimsey min mina minable minacious minaciously minaciousness minacity minar minaret minareted minargent minasragrite minatorial minatorially minatorily minatory minaway mince mincemeat mincer minchery minchiate mincing mincingly mincingness mind minded minder mindful mindfully mindfulness minding mindless mindlessly mindlessness mindsight mine mineowner miner mineragraphic mineragraphy mineraiogic mineral mineralizable mineralization mineralize mineralizer mineralogical mineralogically mineralogist mineralogize mineralogy minerval minery mines minette mineworker ming minge mingelen mingle mingleable mingledly minglement mingler minglingly minguetite mingwort mingy minhag minhah miniaceous miniate miniator miniature miniaturist minibus minicam minicamera minienize minification minify minikin minikinly minim minima minimacid minimal minimalism minimalkaline minimally minimetric minimifidian minimifidianism minimism minimistic minimitude minimization minimize minimizer minimum minimus minimuscular mining minion minionette minionism minionly minionship minish minisher minishment minister ministeriable ministerial ministerialism ministerialist ministeriality ministerially ministerialness ministerium ministership ministrable ministrant ministration ministrative ministrator ministrer ministress ministry ministryship minitant minium miniver minivet mink minkery minkish minnesinger minnesong minnie minniebush minning minnow minny mino minoize minometer minor minorage minorate minoration minoress minority minorship minot minsitive minster minsteryard minstrel minstreless minstrelship minstrelsy mint mintage mintbush minter mintmaker mintmaking mintman mintmaster minty minuend minuet minuetic minuetish minus minuscular minuscule minutary minutation minute minutely minuteman minuteness minuter minuthesis minutia minutiae minutial minutiose minutiously minutissimic minverite minx minxish minxishly minxishness minxship miny minyan miocardia miolithic mioplasmia miothermic miqra miquelet mir mirabiliary mirabilite mirach miracidial miracidium miracle miraclemonger miraclemongering miraclist miraculist miraculize miraculosity miraculous miraculously miraculousness mirador mirage miragy mirandous mirate mirbane mird mirdaha mire mirepoix mirid mirific miriness mirish mirk mirkiness mirksome mirliton miro mirror mirrored mirrorize mirrorlike mirrorscope mirrory mirth mirthful mirthfully mirthfulness mirthless mirthlessly mirthlessness mirthsome mirthsomeness miry miryachit mirza misaccent misaccentuation misachievement misacknowledge misact misadapt misadaptation misadd misaddress misadjust misadmeasurement misadministration misadvantage misadventure misadventurer misadventurous misadventurously misadvertence misadvice misadvise misadvised misadvisedly misadvisedness misaffected misaffection misaffirm misagent misaim misalienate misalignment misallegation misallege misalliance misallotment misallowance misally misalphabetize misalter misanalyze misandry misanswer misanthrope misanthropia misanthropic misanthropical misanthropically misanthropism misanthropist misanthropize misanthropy misapparel misappear misappearance misappellation misapplication misapplier misapply misappoint misappointment misappraise misappraisement misappreciate misappreciation misappreciative misapprehend misapprehendingly misapprehensible misapprehension misapprehensive misapprehensively misapprehensiveness misappropriate misappropriately misappropriation misarchism misarchist misarrange misarrangement misarray misascribe misascription misasperse misassay misassent misassert misassign misassociate misassociation misatone misattend misattribute misattribution misaunter misauthorization misauthorize misaward misbandage misbaptize misbecome misbecoming misbecomingly misbecomingness misbefitting misbeget misbegin misbegotten misbehave misbehavior misbeholden misbelief misbelieve misbeliever misbelievingly misbelove misbeseem misbestow misbestowal misbetide misbias misbill misbind misbirth misbode misborn misbrand misbuild misbusy miscalculate miscalculation miscalculator miscall miscaller miscanonize miscarriage miscarriageable miscarry miscast miscasualty misceability miscegenate miscegenation miscegenationist miscegenator miscegenetic miscegine miscellanarian miscellanea miscellaneity miscellaneous miscellaneously miscellaneousness miscellanist miscellany mischallenge mischance mischanceful mischancy mischaracterization mischaracterize mischarge mischief mischiefful mischieve mischievous mischievously mischievousness mischio mischoice mischoose mischristen miscibility miscible miscipher misclaim misclaiming misclass misclassification misclassify miscognizant miscoin miscoinage miscollocation miscolor miscoloration miscommand miscommit miscommunicate miscompare miscomplacence miscomplain miscomplaint miscompose miscomprehend miscomprehension miscomputation miscompute misconceive misconceiver misconception misconclusion miscondition misconduct misconfer misconfidence misconfident misconfiguration misconjecture misconjugate misconjugation misconjunction misconsecrate misconsequence misconstitutional misconstruable misconstruct misconstruction misconstructive misconstrue misconstruer miscontinuance misconvenient misconvey miscook miscookery miscorrect miscorrection miscounsel miscount miscovet miscreancy miscreant miscreate miscreation miscreative miscreator miscredited miscredulity miscreed miscript miscrop miscue miscultivated misculture miscurvature miscut misdate misdateful misdaub misdeal misdealer misdecide misdecision misdeclaration misdeclare misdeed misdeem misdeemful misdefine misdeformed misdeliver misdelivery misdemean misdemeanant misdemeanist misdemeanor misdentition misderivation misderive misdescribe misdescriber misdescription misdescriptive misdesire misdetermine misdevise misdevoted misdevotion misdiet misdirect misdirection misdispose misdisposition misdistinguish misdistribute misdistribution misdivide misdivision misdo misdoer misdoing misdoubt misdower misdraw misdread misdrive mise misease misecclesiastic misedit miseducate miseducation miseducative miseffect misemphasis misemphasize misemploy misemployment misencourage misendeavor misenforce misengrave misenite misenjoy misenroll misentitle misenunciation miser miserabilism miserabilist miserabilistic miserability miserable miserableness miserably miserdom miserected miserhood misericord miserism miserliness miserly misery misesteem misestimate misestimation misexample misexecute misexecution misexpectation misexpend misexpenditure misexplain misexplanation misexplication misexposition misexpound misexpress misexpression misexpressive misfaith misfare misfashion misfather misfault misfeasance misfeasor misfeature misfield misfigure misfile misfire misfit misfond misform misformation misfortunate misfortunately misfortune misfortuned misfortuner misframe misgauge misgesture misgive misgiving misgivingly misgo misgotten misgovern misgovernance misgovernment misgovernor misgracious misgraft misgrave misground misgrow misgrown misgrowth misguess misguggle misguidance misguide misguided misguidedly misguidedness misguider misguiding misguidingly mishandle mishap mishappen mishmash mishmee misidentification misidentify misimagination misimagine misimpression misimprove misimprovement misimputation misimpute misincensed misincite misinclination misincline misinfer misinference misinflame misinform misinformant misinformation misinformer misingenuity misinspired misinstruct misinstruction misinstructive misintelligence misintelligible misintend misintention misinter misinterment misinterpret misinterpretable misinterpretation misinterpreter misintimation misjoin misjoinder misjudge misjudgement misjudger misjudgingly misjudgment miskeep misken miskenning miskill miskindle misknow misknowledge misky mislabel mislabor mislanguage mislay mislayer mislead misleadable misleader misleading misleadingly misleadingness mislear misleared mislearn misled mislest mislight mislike misliken mislikeness misliker mislikingly mislippen mislive mislocate mislocation mislodge mismade mismake mismanage mismanageable mismanagement mismanager mismarriage mismarry mismatch mismatchment mismate mismeasure mismeasurement mismenstruation misminded mismingle mismotion mismove misname misnarrate misnatured misnavigation misnomed misnomer misnumber misnurture misnutrition misobedience misobey misobservance misobserve misocapnic misocapnist misocatholic misoccupy misogallic misogamic misogamist misogamy misogyne misogynic misogynical misogynism misogynist misogynistic misogynistical misogynous misogyny misohellene misologist misology misomath misoneism misoneist misoneistic misopaterist misopedia misopedism misopedist misopinion misopolemical misorder misordination misorganization misorganize misoscopist misosophist misosophy misotheism misotheist misotheistic misotramontanism misotyranny misoxene misoxeny mispage mispagination mispaint misparse mispart mispassion mispatch mispay misperceive misperception misperform misperformance mispersuade misperuse misphrase mispick mispickel misplace misplacement misplant misplay misplead mispleading misplease mispoint mispoise mispolicy misposition mispossessed mispractice mispraise misprejudiced misprincipled misprint misprisal misprision misprize misprizer misproceeding misproduce misprofess misprofessor mispronounce mispronouncement mispronunciation misproportion misproposal mispropose misproud misprovide misprovidence misprovoke mispunctuate mispunctuation mispurchase mispursuit misput misqualify misquality misquotation misquote misquoter misraise misrate misread misreader misrealize misreason misreceive misrecital misrecite misreckon misrecognition misrecognize misrecollect misrefer misreference misreflect misreform misregulate misrehearsal misrehearse misrelate misrelation misreliance misremember misremembrance misrender misrepeat misreport misreporter misreposed misrepresent misrepresentation misrepresentative misrepresenter misreprint misrepute misresemblance misresolved misresult misreward misrhyme misrhymer misrule miss missable missal missay missayer misseem missel missemblance missentence misserve misservice misset misshape misshapen misshapenly misshapenness misshood missible missile missileproof missiness missing missingly mission missional missionarize missionary missionaryship missioner missionize missionizer missis missish missishness missive missmark missment missourite misspeak misspeech misspell misspelling misspend misspender misstate misstatement misstater misstay misstep missuade missuggestion missummation missuppose missy missyish missyllabication missyllabify mist mistakable mistakableness mistakably mistake mistakeful mistaken mistakenly mistakenness mistakeproof mistaker mistaking mistakingly mistassini mistaught mistbow misteach misteacher misted mistell mistempered mistend mistendency mister misterm mistetch mistfall mistflower mistful misthink misthought misthread misthrift misthrive misthrow mistic mistide mistify mistigris mistily mistime mistiness mistitle mistle mistless mistletoe mistone mistonusk mistook mistouch mistradition mistrain mistral mistranscribe mistranscript mistranscription mistranslate mistranslation mistreat mistreatment mistress mistressdom mistresshood mistressless mistressly mistrial mistrist mistrust mistruster mistrustful mistrustfully mistrustfulness mistrusting mistrustingly mistrustless mistry mistryst misturn mistutor misty mistyish misunderstand misunderstandable misunderstander misunderstanding misunderstandingly misunderstood misunderstoodness misura misusage misuse misuseful misusement misuser misusurped misvaluation misvalue misventure misventurous misvouch miswed miswisdom miswish misword misworship misworshiper misworshipper miswrite misyoke miszealous mitapsis mitchboard mite miteproof miter mitered miterer miterflower miterwort mithridate mithridatic mithridatism mithridatize miticidal miticide mitigable mitigant mitigate mitigatedly mitigation mitigative mitigator mitigatory mitis mitochondria mitochondrial mitogenetic mitome mitosis mitosome mitotic mitotically mitra mitrailleuse mitral mitrate mitre mitrer mitriform mitsumata mitt mittelhand mitten mittened mittimus mitty mity miurus mix mixable mixableness mixblood mixed mixedly mixedness mixen mixer mixeress mixhill mixible mixite mixobarbaric mixochromosome mixolydian mixoploid mixoploidy mixotrophic mixtiform mixtilineal mixtilion mixtion mixture mixy mizmaze mizzen mizzenmast mizzenmastman mizzentopman mizzle mizzler mizzly mizzonite mizzy mlechchha mneme mnemic mnemonic mnemonical mnemonicalist mnemonically mnemonicon mnemonics mnemonism mnemonist mnemonization mnemonize mnemotechnic mnemotechnical mnemotechnics mnemotechnist mnemotechny mnesic mnestic mniaceous mnioid mo moan moanful moanfully moanification moaning moaningly moanless moat mob mobable mobbable mobber mobbish mobbishly mobbishness mobbism mobbist mobby mobcap mobed mobile mobilianer mobiliary mobility mobilizable mobilization mobilize mobilometer moble moblike mobocracy mobocrat mobocratic mobocratical mobolatry mobproof mobship mobsman mobster moccasin mocha mochras mock mockable mockado mockbird mocker mockernut mockery mockful mockfully mockground mockingbird mockingstock mocmain mocomoco mocuck modal modalism modalist modalistic modality modalize modally mode model modeler modeless modelessness modeling modelist modeller modelmaker modelmaking modena moderant moderantism moderantist moderate moderately moderateness moderation moderationist moderatism moderatist moderato moderator moderatorship moderatrix modern moderner modernicide modernish modernism modernist modernistic modernity modernizable modernization modernize modernizer modernly modernness modest modestly modestness modesty modiation modicity modicum modifiability modifiable modifiableness modifiably modificability modificable modification modificationist modificative modificator modificatory modifier modify modillion modiolar modiolus modish modishly modishness modist modiste modistry modius modulability modulant modular modulate modulation modulative modulator modulatory module modulo modulus modumite moellon moerithere moeritherian mofette moff mofussil mofussilite mog mogador mogadore mogdad moggan moggy mogigraphia mogigraphic mogigraphy mogilalia mogilalism mogiphonia mogitocia mogo mogographia moguey mogulship moha mohabat mohair mohar mohawkite mohel mohnseed moho mohr mohur moider moidore moieter moiety moil moiler moiles moiley moiling moilingly moilsome moineau moio moire moirette moise moissanite moist moisten moistener moistful moistify moistish moistishness moistless moistly moistness moisture moistureless moistureproof moisty moit moity mojarra mojo mokaddam moke moki mokihana moko moksha mokum moky mola molal molality molar molariform molarimeter molarity molary molasses molassied molassy molave mold moldability moldable moldableness moldavite moldboard molder moldery moldiness molding moldmade moldproof moldwarp moldy mole molecast molecula molecular molecularist molecularity molecularly molecule molehead moleheap molehill molehillish molehilly moleism molelike molendinar molendinary molengraaffite moleproof moler moleskin molest molestation molester molestful molestfully molimen moliminous molinary moline molka molland molle mollescence mollescent molleton mollichop mollicrush mollie mollienisia mollient molliently mollifiable mollification mollifiedly mollifier mollify mollifying mollifyingly mollifyingness molligrant molligrubs mollipilose mollisiose mollities mollitious mollitude molluscan molluscivorous molluscoid molluscoidal molluscoidan molluscoidean molluscous molluscousness molluscum mollusk molly mollycoddle mollycoddler mollycoddling mollycosset mollycot mollyhawk molman moloid moloker molompi molosse molossic molossine molossoid molossus molpe molrooken molt molten moltenly molter moly molybdate molybdena molybdenic molybdeniferous molybdenite molybdenous molybdenum molybdic molybdite molybdocardialgia molybdocolic molybdodyspepsia molybdomancy molybdomenite molybdonosus molybdoparesis molybdophyllite molybdosis molybdous molysite mombin momble mome moment momenta momental momentally momentaneall momentaneity momentaneous momentaneously momentaneousness momentarily momentariness momentary momently momentous momentously momentousness momentum momiology momism momme mommet mommy momo mon mona monacanthid monacanthine monacanthous monachal monachate monachism monachist monachization monachize monactin monactine monactinellid monactinellidan monad monadelph monadelphian monadelphous monadic monadical monadically monadiform monadigerous monadism monadistic monadnock monadology monaene monal monamniotic monander monandrian monandric monandrous monandry monanthous monapsal monarch monarchal monarchally monarchess monarchial monarchian monarchianism monarchianist monarchianistic monarchic monarchical monarchically monarchism monarchist monarchistic monarchize monarchizer monarchlike monarchomachic monarchomachist monarchy monarthritis monarticular monas monascidian monase monaster monasterial monasterially monastery monastic monastical monastically monasticism monasticize monatomic monatomicity monatomism monaulos monaural monaxial monaxile monaxon monaxonial monaxonic monazine monazite monchiquite mone monel monembryary monembryonic monembryony monepic monepiscopacy monepiscopal moner moneral moneran monergic monergism monergist monergistic moneric moneron monerozoan monerozoic monerula monesia monetarily monetary monetite monetization monetize money moneyage moneybag moneybags moneyed moneyer moneyflower moneygrub moneygrubber moneygrubbing moneylender moneylending moneyless moneymonger moneymongering moneysaving moneywise moneywort mong mongcorn monger mongering mongery mongler mongoose mongrel mongreldom mongrelish mongrelism mongrelity mongrelization mongrelize mongrelly mongrelness mongst monheimite monial moniker monilated monilethrix moniliaceous monilicorn moniliform moniliformly monilioid moniment monimiaceous monimolite monimostylic monism monist monistic monistical monistically monition monitive monitor monitorial monitorially monitorish monitorship monitory monitress monitrix monk monkbird monkcraft monkdom monkery monkess monkey monkeyboard monkeyface monkeyfy monkeyhood monkeyish monkeyishly monkeyishness monkeylike monkeynut monkeypod monkeypot monkeyry monkeyshine monkeytail monkfish monkflower monkhood monkish monkishly monkishness monkism monklike monkliness monkly monkmonger monkship monkshood monmouthite monny mono monoacetate monoacetin monoacid monoacidic monoamide monoamine monoamino monoammonium monoazo monobacillary monobase monobasic monobasicity monoblastic monoblepsia monoblepsis monobloc monobranchiate monobromacetone monobromated monobromide monobrominated monobromination monobromized monobromoacetanilide monobromoacetone monobutyrin monocalcium monocarbide monocarbonate monocarbonic monocarboxylic monocardian monocarp monocarpal monocarpellary monocarpian monocarpic monocarpous monocellular monocentric monocentrid monocentroid monocephalous monocercous monoceros monocerous monochasial monochasium monochlamydeous monochlor monochloracetic monochloranthracene monochlorbenzene monochloride monochlorinated monochlorination monochloro monochloroacetic monochlorobenzene monochloromethane monochoanitic monochord monochordist monochordize monochroic monochromasy monochromat monochromate monochromatic monochromatically monochromatism monochromator monochrome monochromic monochromical monochromically monochromist monochromous monochromy monochronic monochronous monociliated monocle monocled monocleid monoclinal monoclinally monocline monoclinian monoclinic monoclinism monoclinometric monoclinous monocoelian monocoelic monocondylar monocondylian monocondylic monocondylous monocormic monocot monocotyledon monocotyledonous monocracy monocrat monocratic monocrotic monocrotism monocular monocularity monocularly monoculate monocule monoculist monoculous monocultural monoculture monoculus monocyanogen monocycle monocyclic monocystic monocyte monocytic monocytopoiesis monodactyl monodactylate monodactyle monodactylism monodactylous monodactyly monodelph monodelphian monodelphic monodelphous monodermic monodic monodically monodimetric monodist monodize monodomous monodont monodontal monodram monodrama monodramatic monodramatist monodromic monodromy monody monodynamic monodynamism monoecian monoecious monoeciously monoeciousness monoecism monoeidic monoestrous monoethanolamine monoethylamine monofilament monofilm monoflagellate monoformin monogamian monogamic monogamist monogamistic monogamous monogamously monogamousness monogamy monoganglionic monogastric monogene monogeneity monogeneous monogenesis monogenesist monogenesy monogenetic monogenic monogenism monogenist monogenistic monogenous monogeny monoglot monoglycerid monoglyceride monogoneutic monogonoporic monogonoporous monogony monogram monogrammatic monogrammatical monogrammed monogrammic monograph monographer monographic monographical monographically monographist monography monograptid monogynic monogynious monogynist monogynoecial monogynous monogyny monohybrid monohydrate monohydrated monohydric monohydrogen monohydroxy monoicous monoid monoketone monolater monolatrist monolatrous monolatry monolayer monoline monolingual monolinguist monoliteral monolith monolithal monolithic monolobular monolocular monologian monologic monological monologist monologize monologue monologuist monology monomachist monomachy monomania monomaniac monomaniacal monomastigate monomeniscous monomer monomeric monomerous monometallic monometallism monometallist monometer monomethyl monomethylated monomethylic monometric monometrical monomial monomict monomineral monomineralic monomolecular monomolybdate monomorphic monomorphism monomorphous monomyarian mononaphthalene mononch mononeural mononitrate mononitrated mononitration mononitride mononitrobenzene mononomial mononomian monont mononuclear mononucleated mononucleosis mononychous mononym mononymic mononymization mononymize mononymy monoousian monoousious monoparental monoparesis monoparesthesia monopathic monopathy monopectinate monopersonal monopersulfuric monopersulphuric monopetalous monophagism monophagous monophagy monophase monophasia monophasic monophobia monophone monophonic monophonous monophony monophotal monophote monophthalmic monophthalmus monophthong monophthongal monophthongization monophthongize monophyletic monophyleticism monophylite monophyllous monophyodont monophyodontism monopitch monoplacula monoplacular monoplaculate monoplane monoplanist monoplasmatic monoplast monoplastic monoplegia monoplegic monopneumonian monopneumonous monopode monopodial monopodially monopodic monopodium monopodous monopody monopolar monopolaric monopolarity monopole monopolism monopolist monopolistic monopolistically monopolitical monopolizable monopolization monopolize monopolizer monopolous monopoly monopolylogist monopolylogue monopotassium monoprionid monoprionidian monopsonistic monopsony monopsychism monopteral monopteroid monopteron monopteros monopterous monoptic monoptical monoptote monoptotic monopylean monopyrenous monorail monorailroad monorailway monorchid monorchidism monorchis monorchism monorganic monorhinal monorhine monorhyme monorhymed monorhythmic monosaccharide monosaccharose monoschemic monoscope monose monosemic monosepalous monoservice monosilane monosilicate monosilicic monosiphonic monosiphonous monosodium monosomatic monosomatous monosome monosomic monosperm monospermal monospermic monospermous monospermy monospherical monospondylic monosporangium monospore monospored monosporiferous monosporous monostele monostelic monostelous monostely monostich monostichous monostomatous monostome monostomous monostromatic monostrophe monostrophic monostrophics monostylous monosubstituted monosubstitution monosulfone monosulfonic monosulphide monosulphone monosulphonic monosyllabic monosyllabical monosyllabically monosyllabism monosyllabize monosyllable monosymmetric monosymmetrical monosymmetrically monosymmetry monosynthetic monotelephone monotelephonic monotellurite monothalamian monothalamous monothecal monotheism monotheist monotheistic monotheistical monotheistically monothelious monothetic monotic monotint monotocardiac monotocardian monotocous monotomous monotone monotonic monotonical monotonically monotonist monotonize monotonous monotonously monotonousness monotony monotremal monotremate monotrematous monotreme monotremous monotrichous monotriglyph monotriglyphic monotrochal monotrochian monotrochous monotropaceous monotrophic monotropic monotropy monotypal monotype monotypic monotypical monotypous monoureide monovalence monovalency monovalent monovariant monoverticillate monovoltine monovular monoxenous monoxide monoxime monoxyle monoxylic monoxylon monoxylous monozoan monozoic monozygotic monrolite monseigneur monsieur monsieurship monsignor monsignorial monsoon monsoonal monsoonish monsoonishly monster monsterhood monsterlike monstership monstrance monstrate monstration monstrator monstricide monstriferous monstrification monstrify monstrosity monstrous monstrously monstrousness montage montana montane montanic montanin montanite montant montbretia monte montebrasite monteith montem montgolfier month monthly monthon monticellite monticle monticoline monticulate monticule monticuliporidean monticuliporoid monticulose monticulous monticulus montiform montigeneous montilla montjoy montmartrite montmorilonite monton montroydite monture monument monumental monumentalism monumentality monumentalization monumentalize monumentally monumentary monumentless monumentlike monzodiorite monzogabbro monzonite monzonitic moo mooch moocha moocher moochulka mood mooder moodily moodiness moodish moodishly moodishness moodle moody mooing mool moolet moolings mools moolum moon moonack moonbeam moonbill moonblink mooncalf mooncreeper moondown moondrop mooned mooner moonery mooneye moonface moonfaced moonfall moonfish moonflower moonglade moonglow moonhead moonily mooniness mooning moonish moonite moonja moonjah moonless moonlet moonlight moonlighted moonlighter moonlighting moonlighty moonlike moonlikeness moonlit moonlitten moonman moonpath moonpenny moonproof moonraker moonraking moonrise moonsail moonscape moonseed moonset moonshade moonshine moonshiner moonshining moonshiny moonsick moonsickness moonstone moontide moonwalker moonwalking moonward moonwards moonway moonwort moony moop moor moorage moorball moorband moorberry moorbird moorburn moorburner moorburning moorflower moorfowl mooring moorish moorishly moorishness moorland moorlander moorman moorn moorpan moors moorsman moorstone moortetter moorup moorwort moory moosa moose mooseberry moosebird moosebush moosecall mooseflower moosehood moosemise moosetongue moosewob moosewood moosey moost moot mootable mooter mooth mooting mootman mootstead mootworthy mop mopane mopboard mope moper moph mophead mopheaded moping mopingly mopish mopishly mopishness mopla mopper moppet moppy mopstick mopsy mopus moquette mor mora moraceous morainal moraine morainic moral morale moralism moralist moralistic moralistically morality moralization moralize moralizer moralizingly moralless morally moralness morals morass morassic morassweed morassy morat morate moration moratoria moratorium moratory moravite moray morbid morbidity morbidize morbidly morbidness morbiferal morbiferous morbific morbifical morbifically morbify morbility morbillary morbilli morbilliform morbillous morcellate morcellated morcellation mordacious mordaciously mordacity mordancy mordant mordantly mordellid mordelloid mordenite mordent mordicate mordication mordicative mordore more moreen morefold moreish morel morella morello morencite moreness morenita morenosite moreover morepork mores morfrey morg morga morgan morganatic morganatical morganatically morganic morganite morganize morgay morgen morgengift morgenstern morglay morgue moribund moribundity moribundly moric moriche moriform morigerate morigeration morigerous morigerously morigerousness morillon morin morindin morindone morinel moringaceous moringad moringuid moringuoid morion morkin morlop mormaor mormaordom mormaorship mormo mormon mormyr mormyre mormyrian mormyrid mormyroid morn morne morned morning morningless morningly mornings morningtide morningward mornless mornlike morntime mornward moro moroc morocco morocota morological morologically morologist morology moromancy moron moroncy morong moronic moronism moronity moronry morosaurian morosauroid morose morosely moroseness morosis morosity moroxite morph morphallaxis morphea morpheme morphemic morphemics morphetic morphew morphia morphiate morphic morphically morphinate morphine morphinic morphinism morphinist morphinization morphinize morphinomania morphinomaniac morphiomania morphiomaniac morphogenesis morphogenetic morphogenic morphogeny morphographer morphographic morphographical morphographist morphography morpholine morphologic morphological morphologically morphologist morphology morphometrical morphometry morphon morphonomic morphonomy morphophonemic morphophonemically morphophonemics morphophyly morphoplasm morphoplasmic morphosis morphotic morphotropic morphotropism morphotropy morphous morrhuate morrhuine morricer morris morrow morrowing morrowless morrowmass morrowspeech morrowtide morsal morse morsel morselization morselize morsing morsure mort mortacious mortal mortalism mortalist mortality mortalize mortally mortalness mortalwise mortar mortarboard mortarize mortarless mortarlike mortarware mortary mortbell mortcloth mortersheen mortgage mortgageable mortgagee mortgagor morth morthwyrtha mortician mortier mortiferous mortiferously mortiferousness mortific mortification mortified mortifiedly mortifiedness mortifier mortify mortifying mortifyingly mortise mortiser mortling mortmain mortmainer mortuarian mortuary mortuous morula morular morulation morule moruloid morvin morwong mosaic mosaical mosaically mosaicism mosaicist mosaist mosandrite mosasaur mosasaurian mosasaurid mosasauroid moschate moschatel moschatelline moschiferous moschine mosesite mosette mosey moskeneer mosker moslings mosque mosquelet mosquish mosquital mosquito mosquitobill mosquitocidal mosquitocide mosquitoey mosquitoish mosquitoproof moss mossback mossberry mossbunker mossed mosser mossery mossful mosshead mossiness mossless mosslike mosstrooper mosstroopery mosstrooping mosswort mossy mossyback most moste mostlike mostlings mostly mostness mot motacillid motacilline motatorious motatory mote moted motel moteless moter motet motettist motey moth mothed mother motherdom mothered motherer mothergate motherhood motheriness mothering motherkin motherland motherless motherlessness motherlike motherliness motherling motherly mothership mothersome motherward motherwise motherwort mothery mothless mothlike mothproof mothworm mothy motif motific motile motility motion motionable motional motionless motionlessly motionlessness motitation motivate motivation motivational motive motiveless motivelessly motivelessness motiveness motivity motley motleyness motmot motofacient motograph motographic motomagnetic motoneuron motophone motor motorable motorboat motorboatman motorbus motorcab motorcade motorcar motorcycle motorcyclist motordom motordrome motored motorial motoric motoring motorism motorist motorium motorization motorize motorless motorman motorneer motorphobe motorphobia motorphobiac motorway motory motricity mott motte mottle mottled mottledness mottlement mottler mottling motto mottoed mottoless mottolike mottramite motyka mou moucharaby mouchardism mouche mouchrabieh moud moudie moudieman moudy mouflon mouillation mouille mouillure moujik moul mould moulded moule moulin moulinage moulinet moulleen moulrush mouls moulter mouly mound moundiness moundlet moundwork moundy mount mountable mountably mountain mountained mountaineer mountainet mountainette mountainless mountainlike mountainous mountainously mountainousness mountainside mountaintop mountainward mountainwards mountainy mountant mountebank mountebankery mountebankish mountebankism mountebankly mounted mounter mounting mountingly mountlet mounture moup mourn mourner mourneress mournful mournfully mournfulness mourning mourningly mournival mournsome mouse mousebane mousebird mousefish mousehawk mousehole mousehound mousekin mouselet mouselike mouseproof mouser mousery mouseship mousetail mousetrap mouseweb mousey mousily mousiness mousing mousingly mousle mousmee mousquetaire mousse moustoc mousy mout moutan mouth mouthable mouthbreeder mouthed mouther mouthful mouthily mouthiness mouthing mouthingly mouthishly mouthless mouthlike mouthpiece mouthroot mouthwash mouthwise mouthy mouton moutonnee mouzah mouzouna movability movable movableness movably movant move moveability moveableness moveably moveless movelessly movelessness movement mover movie moviedom movieize movieland moving movingly movingness mow mowable mowana mowburn mowburnt mowch mowcht mower mowha mowie mowing mowland mown mowra mowrah mowse mowstead mowt mowth moxa moxieberry moy moyen moyenless moyenne moyite moyle moyo mozambique mozemize mozing mozzetta mpret mu muang mubarat mucago mucaro mucedin mucedinaceous mucedine mucedinous much muchfold muchly muchness mucic mucid mucidness muciferous mucific muciform mucigen mucigenous mucilage mucilaginous mucilaginously mucilaginousness mucin mucinogen mucinoid mucinous muciparous mucivore mucivorous muck muckender mucker muckerish muckerism mucket muckiness muckite muckle muckluck muckman muckment muckmidden muckna muckrake muckraker mucksweat mucksy muckthrift muckweed muckworm mucky mucluc mucocele mucocellulose mucocellulosic mucocutaneous mucodermal mucofibrous mucoflocculent mucoid mucomembranous muconic mucoprotein mucopurulent mucopus mucor mucoraceous mucorine mucorioid mucormycosis mucorrhea mucosa mucosal mucosanguineous mucose mucoserous mucosity mucosocalcareous mucosogranular mucosopurulent mucososaccharine mucous mucousness mucro mucronate mucronately mucronation mucrones mucroniferous mucroniform mucronulate mucronulatous muculent mucus mucusin mud mudar mudbank mudcap mudd mudde mudden muddify muddily muddiness mudding muddish muddle muddlebrained muddledom muddlehead muddleheaded muddleheadedness muddlement muddleproof muddler muddlesome muddlingly muddy muddybrained muddybreast muddyheaded mudee mudfish mudflow mudguard mudhead mudhole mudhopper mudir mudiria mudland mudlark mudlarker mudless mudproof mudra mudsill mudskipper mudslinger mudslinging mudspate mudstain mudstone mudsucker mudtrack mudweed mudwort muermo muezzin muff muffed muffet muffetee muffin muffineer muffish muffishness muffle muffled muffleman muffler mufflin muffy mufti mufty mug muga mugearite mugful mugg mugger mugget muggily mugginess muggins muggish muggles muggy mughouse mugience mugiency mugient mugiliform mugiloid mugweed mugwort mugwump mugwumpery mugwumpian mugwumpism muhammadi muid muir muirburn muircock muirfowl muishond muist mujtahid mukluk muktar muktatma mukti mulaprakriti mulatta mulatto mulattoism mulattress mulberry mulch mulcher mulct mulctable mulctary mulctation mulctative mulctatory mulctuary mulder mule muleback mulefoot mulefooted muleman muleta muleteer muletress muletta mulewort muley mulga muliebral muliebria muliebrile muliebrity muliebrous mulier mulierine mulierose mulierosity mulish mulishly mulishness mulism mulita mulk mull mulla mullah mullar mullein mullenize muller mullet mulletry mullets mulley mullid mulligan mulligatawny mulligrubs mullion mullite mullock mullocker mullocky mulloid mulloway mulmul mulse mulsify mult multangular multangularly multangularness multangulous multangulum multanimous multarticulate multeity multiangular multiareolate multiarticular multiarticulate multiarticulated multiaxial multiblade multibladed multibranched multibranchiate multibreak multicamerate multicapitate multicapsular multicarinate multicarinated multicellular multicentral multicentric multicharge multichord multichrome multiciliate multiciliated multicipital multicircuit multicoccous multicoil multicolor multicolored multicolorous multicomponent multiconductor multiconstant multicore multicorneal multicostate multicourse multicrystalline multicuspid multicuspidate multicycle multicylinder multicylindered multidentate multidenticulate multidenticulated multidigitate multidimensional multidirectional multidisperse multiengine multiengined multiexhaust multifaced multifaceted multifactorial multifamilial multifarious multifariously multifariousness multiferous multifetation multifibered multifid multifidly multifidous multifidus multifilament multifistular multiflagellate multiflagellated multiflash multiflorous multiflow multiflue multifocal multifoil multifoiled multifold multifoliate multifoliolate multiform multiformed multiformity multifurcate multiganglionic multigap multigranulate multigranulated multigraph multigrapher multiguttulate multigyrate multihead multihearth multihued multijet multijugate multijugous multilaciniate multilamellar multilamellate multilamellous multilaminar multilaminate multilaminated multilateral multilaterally multilighted multilineal multilinear multilingual multilinguist multilirate multiliteral multilobar multilobate multilobe multilobed multilobular multilobulate multilobulated multilocation multilocular multiloculate multiloculated multiloquence multiloquent multiloquious multiloquous multiloquy multimacular multimammate multimarble multimascular multimedial multimetalic multimetallism multimetallist multimillion multimillionaire multimodal multimodality multimolecular multimotor multimotored multinational multinervate multinervose multinodal multinodate multinodous multinodular multinomial multinominal multinominous multinuclear multinucleate multinucleated multinucleolar multinucleolate multinucleolated multiovular multiovulate multipara multiparient multiparity multiparous multipartisan multipartite multiped multiperforate multiperforated multipersonal multiphase multiphaser multiphotography multipinnate multiplane multiple multiplepoinding multiplet multiplex multipliable multipliableness multiplicability multiplicable multiplicand multiplicate multiplication multiplicational multiplicative multiplicatively multiplicator multiplicity multiplier multiply multiplying multipointed multipolar multipole multiported multipotent multipresence multipresent multiradial multiradiate multiradiated multiradicate multiradicular multiramified multiramose multiramous multirate multireflex multirooted multirotation multirotatory multisaccate multisacculate multisacculated multiscience multiseated multisect multisector multisegmental multisegmentate multisegmented multisensual multiseptate multiserial multiserially multiseriate multishot multisiliquous multisonous multispeed multispermous multispicular multispiculate multispindle multispinous multispiral multispired multistage multistaminate multistoried multistory multistratified multistratous multistriate multisulcate multisulcated multisyllabic multisyllability multisyllable multitarian multitentaculate multitheism multithreaded multititular multitoed multitoned multitube multituberculate multituberculated multituberculism multituberculy multitubular multitude multitudinal multitudinary multitudinism multitudinist multitudinistic multitudinosity multitudinous multitudinously multitudinousness multiturn multivagant multivalence multivalency multivalent multivalve multivalved multivalvular multivane multivariant multivarious multiversant multiverse multivibrator multivincular multivious multivocal multivocalness multivoiced multivolent multivoltine multivolumed multivorous multocular multum multungulate multure multurer mum mumble mumblebee mumblement mumbler mumbling mumblingly mummer mummery mummichog mummick mummied mummification mummiform mummify mumming mummy mummydom mummyhood mummylike mumness mump mumper mumphead mumpish mumpishly mumpishness mumps mumpsimus mumruffin mun munch muncheel muncher munchet mund mundane mundanely mundaneness mundanism mundanity mundatory mundic mundificant mundification mundifier mundify mundil mundivagant mundle mung munga munge mungey mungo mungofa munguba mungy municipal municipalism municipalist municipality municipalization municipalize municipalizer municipally municipium munific munificence munificency munificent munificently munificentness muniment munition munitionary munitioneer munitioner munitions munity munj munjeet munjistin munnion munshi munt muntin muntjac mura muraenoid murage mural muraled muralist murally murasakite murchy murder murderer murderess murdering murderingly murderish murderment murderous murderously murderousness murdrum mure murenger murex murexan murexide murga murgavi murgeon muriate muriated muriatic muricate muricid muriciform muricine muricoid muriculate murid muridism muriform muriformly murine murinus muriti murium murk murkily murkiness murkish murkly murkness murksome murky murlin murly murmur murmuration murmurator murmurer murmuring murmuringly murmurish murmurless murmurlessly murmurous murmurously muromontite murphy murra murrain murre murrelet murrey murrhine murrina murrnong murshid murumuru muruxi murva murza musaceous musal musang musar muscade muscadel muscadine muscardine muscariform muscarine muscat muscatel muscatorium muscicapine muscicide muscicole muscicoline muscicolous muscid musciform muscle muscled muscleless musclelike muscling muscly muscoid muscologic muscological muscologist muscology muscone muscose muscoseness muscosity muscot muscovadite muscovado muscovite muscovitization muscovitize muscovy muscular muscularity muscularize muscularly musculation musculature muscule musculin musculoarterial musculocellular musculocutaneous musculodermic musculoelastic musculofibrous musculointestinal musculoligamentous musculomembranous musculopallial musculophrenic musculospinal musculospiral musculotegumentary musculotendinous muse mused museful musefully museist museless muselike museographist museography museologist museology muser musery musette museum museumize mush musha mushaa mushed musher mushhead mushheaded mushheadedness mushily mushiness mushla mushmelon mushrebiyeh mushroom mushroomer mushroomic mushroomlike mushroomy mushru mushy music musical musicale musicality musicalization musicalize musically musicalness musicate musician musiciana musicianer musicianly musicianship musicker musicless musiclike musicmonger musico musicoartistic musicodramatic musicofanatic musicographer musicography musicological musicologist musicologue musicology musicomania musicomechanical musicophilosophical musicophobia musicophysical musicopoetic musicotherapy musicproof musie musily musimon musing musingly musk muskat muskeg muskeggy muskellunge musket musketade musketeer musketlike musketoon musketproof musketry muskflower muskie muskiness muskish musklike muskmelon muskrat muskroot muskwood musky muslin muslined muslinet musnud musophagine musquash musquashroot musquashweed musquaspen musquaw musrol muss mussable mussably mussal mussalchee mussel musseled musseler mussily mussiness mussitate mussitation mussuk mussurana mussy must mustache mustached mustachial mustachio mustachioed mustafina mustang mustanger mustard mustarder mustee mustelid musteline mustelinous musteloid muster musterable musterdevillers musterer mustermaster mustify mustily mustiness mustnt musty muta mutability mutable mutableness mutably mutafacient mutage mutagenic mutant mutarotate mutarotation mutase mutate mutation mutational mutationally mutationism mutationist mutative mutatory mutawalli mutch mute mutedly mutely muteness mutesarif mutescence mutessarifat muth muthmannite muthmassel mutic muticous mutilate mutilation mutilative mutilator mutilatory mutillid mutilous mutineer mutinous mutinously mutinousness mutiny mutism mutist mutistic mutive mutivity mutoscope mutoscopic mutsje mutsuddy mutt mutter mutterer muttering mutteringly mutton muttonbird muttonchop muttonfish muttonhead muttonheaded muttonhood muttonmonger muttonwood muttony mutual mutualism mutualist mutualistic mutuality mutualization mutualize mutually mutualness mutuary mutuatitious mutulary mutule mutuum mux muyusa muzhik muzz muzzily muzziness muzzle muzzler muzzlewood muzzy my myal myalgia myalgic myalism myall myarian myasthenia myasthenic myatonia myatonic myatony myatrophy mycele mycelia mycelial mycelian mycelioid mycelium myceloid mycetism mycetocyte mycetogenesis mycetogenetic mycetogenic mycetogenous mycetoid mycetological mycetology mycetoma mycetomatous mycetophagous mycetophilid mycetous mycetozoan mycetozoon mycocecidium mycocyte mycoderm mycoderma mycodermatoid mycodermatous mycodermic mycodermitis mycodesmoid mycodomatium mycogastritis mycohaemia mycohemia mycoid mycologic mycological mycologically mycologist mycologize mycology mycomycete mycomycetous mycomyringitis mycophagist mycophagous mycophagy mycophyte mycoplasm mycoplasmic mycoprotein mycorhiza mycorhizal mycorrhizal mycose mycosin mycosis mycosozin mycosterol mycosymbiosis mycotic mycotrophic mycteric mycterism myctophid mydaleine mydatoxine mydine mydriasine mydriasis mydriatic mydriatine myectomize myectomy myectopia myectopy myelalgia myelapoplexy myelasthenia myelatrophy myelauxe myelemia myelencephalic myelencephalon myelencephalous myelic myelin myelinate myelinated myelination myelinic myelinization myelinogenesis myelinogenetic myelinogeny myelitic myelitis myeloblast myeloblastic myelobrachium myelocele myelocerebellar myelocoele myelocyst myelocystic myelocystocele myelocyte myelocythaemia myelocythemia myelocytic myelocytosis myelodiastasis myeloencephalitis myeloganglitis myelogenesis myelogenetic myelogenous myelogonium myeloic myeloid myelolymphangioma myelolymphocyte myeloma myelomalacia myelomatoid myelomatosis myelomenia myelomeningitis myelomeningocele myelomere myelon myelonal myeloneuritis myelonic myeloparalysis myelopathic myelopathy myelopetal myelophthisis myeloplast myeloplastic myeloplax myeloplegia myelopoiesis myelopoietic myelorrhagia myelorrhaphy myelosarcoma myelosclerosis myelospasm myelospongium myelosyphilis myelosyphilosis myelosyringosis myelotherapy myelozoan myentasis myenteric myenteron myesthesia mygale mygalid mygaloid myiasis myiferous myiodesopsia myiosis myitis mykiss myliobatid myliobatine myliobatoid mylodont mylohyoid mylohyoidean mylonite mylonitic mymarid myna mynpacht mynpachtbrief myoalbumin myoalbumose myoatrophy myoblast myoblastic myocardiac myocardial myocardiogram myocardiograph myocarditic myocarditis myocardium myocele myocellulitis myoclonic myoclonus myocoele myocoelom myocolpitis myocomma myocyte myodegeneration myodiastasis myodynamia myodynamic myodynamics myodynamiometer myodynamometer myoedema myoelectric myoendocarditis myoepicardial myoepithelial myofibril myofibroma myogen myogenesis myogenetic myogenic myogenous myoglobin myoglobulin myogram myograph myographer myographic myographical myographist myography myohematin myoid myoidema myokinesis myolemma myolipoma myoliposis myologic myological myologist myology myolysis myoma myomalacia myomancy myomantic myomatous myomectomy myomelanosis myomere myometritis myometrium myomohysterectomy myomorph myomorphic myomotomy myoneme myoneural myoneuralgia myoneurasthenia myoneure myoneuroma myoneurosis myonosus myopachynsis myoparalysis myoparesis myopathia myopathic myopathy myope myoperitonitis myophan myophore myophorous myophysical myophysics myopia myopic myopical myopically myoplasm myoplastic myoplasty myopolar myoporaceous myoporad myoproteid myoprotein myoproteose myops myopy myorrhaphy myorrhexis myosalpingitis myosarcoma myosarcomatous myosclerosis myoscope myoseptum myosin myosinogen myosinose myosis myositic myositis myosote myospasm myospasmia myosuture myosynizesis myotacismus myotasis myotenotomy myothermic myotic myotome myotomic myotomy myotonia myotonic myotonus myotony myotrophy myowun myoxine myrabalanus myrabolam myrcene myrcia myriacanthous myriacoulomb myriad myriaded myriadfold myriadly myriadth myriagram myriagramme myrialiter myrialitre myriameter myriametre myriapod myriapodan myriapodous myriarch myriarchy myriare myrica myricaceous myricetin myricin myricyl myricylic myringa myringectomy myringitis myringodectomy myringodermatitis myringomycosis myringoplasty myringotome myringotomy myriological myriologist myriologue myriophyllite myriophyllous myriopodous myriorama myrioscope myriosporous myriotheism myriotrichiaceous myristate myristic myristica myristicaceous myristicivorous myristin myristone myrmecobine myrmecochorous myrmecochory myrmecoid myrmecoidy myrmecological myrmecologist myrmecology myrmecophagine myrmecophagoid myrmecophagous myrmecophile myrmecophilism myrmecophilous myrmecophily myrmecophobic myrmecophyte myrmecophytic myrmekite myrmicid myrmicine myrmicoid myrmotherine myrobalan myron myronate myronic myrosin myrosinase myrothamnaceous myrrh myrrhed myrrhic myrrhine myrrhol myrrhophore myrrhy myrsinaceous myrsinad myrtaceous myrtal myrtiform myrtle myrtleberry myrtlelike myrtol mysel myself mysell mysid mysidean mysogynism mysoid mysophobia mysosophist mysost myst mystacial mystagogic mystagogical mystagogically mystagogue mystagogy mystax mysterial mysteriarch mysteriosophic mysteriosophy mysterious mysteriously mysteriousness mysterize mystery mystes mystic mystical mysticality mystically mysticalness mysticete mysticetous mysticism mysticity mysticize mysticly mystific mystifically mystification mystificator mystificatory mystifiedly mystifier mystify mystifyingly mytacism myth mythical mythicalism mythicality mythically mythicalness mythicism mythicist mythicize mythicizer mythification mythify mythism mythist mythize mythland mythmaker mythmaking mythoclast mythoclastic mythogenesis mythogonic mythogony mythographer mythographist mythography mythogreen mythoheroic mythohistoric mythologema mythologer mythological mythologically mythologist mythologize mythologizer mythologue mythology mythomania mythomaniac mythometer mythonomy mythopastoral mythopoeic mythopoeism mythopoeist mythopoem mythopoesis mythopoesy mythopoet mythopoetic mythopoetize mythopoetry mythos mythus mytilacean mytilaceous mytilid mytiliform mytiloid mytilotoxine myxa myxadenitis myxadenoma myxaemia myxamoeba myxangitis myxasthenia myxedema myxedematoid myxedematous myxedemic myxemia myxinoid myxo myxobacteriaceous myxoblastoma myxochondroma myxochondrosarcoma myxocystoma myxocyte myxoenchondroma myxofibroma myxofibrosarcoma myxoflagellate myxogaster myxogastric myxogastrous myxoglioma myxoid myxoinoma myxolipoma myxoma myxomatosis myxomatous myxomycete myxomycetous myxomyoma myxoneuroma myxopapilloma myxophycean myxopod myxopodan myxopodium myxopodous myxopoiesis myxorrhea myxosarcoma myxospongian myxospore myxosporidian myxosporous myxotheca myzodendraceous myzont myzostomatous myzostome myzostomid myzostomidan myzostomous n na naa naam nab nabak nabber nabk nabla nable nabob nabobery nabobess nabobical nabobish nabobishly nabobism nabobry nabobship nabs nacarat nacarine nace nacelle nach nachani nacket nacre nacred nacreous nacrine nacrite nacrous nacry nadder nadir nadiral nadorite nae naebody naegate naegates nael naemorhedine naether naething nag naga nagaika nagana nagara nagatelite nagger naggin nagging naggingly naggingness naggish naggle naggly naggy naght nagkassar nagmaal nagman nagnag nagnail nagor nagsman nagster nagual nagualism nagualist nagyagite naiad naiadaceous naiant naid naif naifly naig naigie naik nail nailbin nailbrush nailer naileress nailery nailhead nailing nailless naillike nailprint nailproof nailrod nailshop nailsick nailsmith nailwort naily nain nainsel nainsook naio naipkin nairy nais naish naissance naissant naither naive naively naiveness naivete naivety nak nake naked nakedish nakedize nakedly nakedness nakedweed nakedwood naker nakhlite nakhod nakhoda nako nakong nakoo nallah nam namability namable namaqua namaycush namaz namazlik namda name nameability nameable nameboard nameless namelessly namelessness nameling namely namer namesake naming nammad nan nana nanawood nancy nandi nandine nandow nandu nane nanes nanga nanism nanization nankeen nankin nannander nannandrium nannandrous nannoplankton nanny nannyberry nannybush nanocephalia nanocephalic nanocephalism nanocephalous nanocephalus nanocephaly nanoid nanomelia nanomelous nanomelus nanosoma nanosomia nanosomus nanpie nant nantle nantokite naological naology naometry naos nap napa napal napalm nape napead napecrest napellus naperer napery naphtha naphthacene naphthalate naphthalene naphthaleneacetic naphthalenesulphonic naphthalenic naphthalenoid naphthalic naphthalidine naphthalin naphthaline naphthalization naphthalize naphthalol naphthamine naphthanthracene naphthene naphthenic naphthinduline naphthionate naphtho naphthoic naphthol naphtholate naphtholize naphtholsulphonate naphtholsulphonic naphthoquinone naphthoresorcinol naphthosalol naphthous naphthoxide naphthyl naphthylamine naphthylaminesulphonic naphthylene naphthylic naphtol napiform napkin napkining napless naplessness napoleon napoleonite napoo nappe napped napper nappiness napping nappishness nappy naprapath naprapathy napron napthionic napu nar narceine narcism narcissi narcissism narcissist narcissistic narcist narcistic narcoanalysis narcoanesthesia narcohypnia narcohypnosis narcolepsy narcoleptic narcoma narcomania narcomaniac narcomaniacal narcomatous narcomedusan narcose narcosis narcostimulant narcosynthesis narcotherapy narcotia narcotic narcotical narcotically narcoticalness narcoticism narcoticness narcotina narcotine narcotinic narcotism narcotist narcotization narcotize narcous nard nardine nardoo nares narghile nargil narial naric narica naricorn nariform narine naringenin naringin nark narky narr narra narras narratable narrate narrater narration narrational narrative narratively narrator narratory narratress narratrix narrawood narrow narrower narrowhearted narrowheartedness narrowingness narrowish narrowly narrowness narrowy narsarsukite narsinga narthecal narthex narwhal narwhalian nary nasab nasal nasalis nasalism nasality nasalization nasalize nasally nasalward nasalwards nasard nascence nascency nascent nasch naseberry nasethmoid nash nashgab nashgob nasi nasial nasicorn nasicornous nasiform nasilabial nasillate nasillation nasioalveolar nasiobregmatic nasioinial nasiomental nasion nasitis nasoalveola nasoantral nasobasilar nasobronchial nasobuccal nasoccipital nasociliary nasoethmoidal nasofrontal nasolabial nasolachrymal nasological nasologist nasology nasomalar nasomaxillary nasonite nasoorbital nasopalatal nasopalatine nasopharyngeal nasopharyngitis nasopharynx nasoprognathic nasoprognathism nasorostral nasoscope nasoseptal nasosinuitis nasosinusitis nasosubnasal nasoturbinal nasrol nassellarian nassology nast nastaliq nastic nastika nastily nastiness nasturtion nasturtium nasty nasus nasute nasuteness nasutiform nasutus nat natability nataka natal natality nataloin natals natant natantly natation natational natator natatorial natatorious natatorium natatory natch natchbone natchnee nates nathe nather nathless naticiform naticine naticoid natiform natimortality nation national nationalism nationalist nationalistic nationalistically nationality nationalization nationalize nationalizer nationally nationalness nationalty nationhood nationless nationwide native natively nativeness nativism nativist nativistic nativity natr natricine natrium natrochalcite natrojarosite natrolite natron natter nattered natteredness natterjack nattily nattiness nattle natty natuary natural naturalesque naturalism naturalist naturalistic naturalistically naturality naturalization naturalize naturalizer naturally naturalness nature naturecraft naturelike naturing naturism naturist naturistic naturistically naturize naturopath naturopathic naturopathist naturopathy naucrar naucrary naufragous nauger naught naughtily naughtiness naughty naujaite naumachia naumachy naumannite naumk naumkeag naumkeager naunt nauntle naupathia nauplial naupliiform nauplioid nauplius nauropometer nauscopy nausea nauseant nauseaproof nauseate nauseatingly nauseation nauseous nauseously nauseousness naut nautch nauther nautic nautical nauticality nautically nautics nautiform nautilacean nautilicone nautiliform nautilite nautiloid nautiloidean nautilus naval navalese navalism navalist navalistic navalistically navally navar navarch navarchy nave navel naveled navellike navelwort navet navette navew navicella navicert navicula naviculaeform navicular naviculare naviculoid naviform navigability navigable navigableness navigably navigant navigate navigation navigational navigator navigerous navipendular navipendulum navite navvy navy naw nawab nawabship nawt nay nayaur naysay naysayer nayward nayword naze nazim nazir ne nea neal neallotype neanic neanthropic neap neaped nearable nearabout nearabouts nearaivays nearaway nearby nearest nearish nearly nearmost nearness nearsighted nearsightedly nearsightedness nearthrosis neat neaten neath neatherd neatherdess neathmost neatify neatly neatness neb neback nebalian nebalioid nebbed nebbuck nebbuk nebby nebel nebelist nebenkern nebris nebula nebulae nebular nebularization nebularize nebulated nebulation nebule nebulescent nebuliferous nebulite nebulium nebulization nebulize nebulizer nebulose nebulosity nebulous nebulously nebulousness necessar necessarian necessarianism necessarily necessariness necessary necessism necessist necessitarian necessitarianism necessitate necessitatedly necessitatingly necessitation necessitative necessitous necessitously necessitousness necessitude necessity neck neckar neckatee neckband neckcloth necked necker neckercher neckerchief neckful neckguard necking neckinger necklace necklaced necklaceweed neckless necklet necklike neckline neckmold neckpiece neckstock necktie necktieless neckward neckwear neckweed neckyoke necrectomy necremia necrobacillary necrobacillosis necrobiosis necrobiotic necrogenic necrogenous necrographer necrolatry necrologic necrological necrologically necrologist necrologue necrology necromancer necromancing necromancy necromantic necromantically necromorphous necronite necropathy necrophagan necrophagous necrophile necrophilia necrophilic necrophilism necrophilistic necrophilous necrophily necrophobia necrophobic necropoleis necropoles necropolis necropolitan necropsy necroscopic necroscopical necroscopy necrose necrosis necrotic necrotization necrotize necrotomic necrotomist necrotomy necrotype necrotypic nectar nectareal nectarean nectared nectareous nectareously nectareousness nectarial nectarian nectaried nectariferous nectarine nectarious nectarium nectarivorous nectarize nectarlike nectarous nectary nectiferous nectocalycine nectocalyx nectophore nectopod nectriaceous nedder neddy nee neebor neebour need needer needfire needful needfully needfulness needgates needham needily neediness needing needle needlebill needlebook needlebush needlecase needled needlefish needleful needlelike needlemaker needlemaking needleman needlemonger needleproof needler needles needless needlessly needlessness needlestone needlewoman needlewood needlework needleworked needleworker needling needly needments needs needsome needy neeger neeld neele neelghan neem neencephalic neencephalon neep neepour neer neese neet neetup neeze nef nefandous nefandousness nefarious nefariously nefariousness nefast neffy neftgil negate negatedness negation negationalist negationist negative negatively negativeness negativer negativism negativist negativistic negativity negator negatory negatron neger neginoth neglect neglectable neglectedly neglectedness neglecter neglectful neglectfully neglectfulness neglectingly neglection neglective neglectively neglector neglectproof negligee negligence negligency negligent negligently negligibility negligible negligibleness negligibly negotiability negotiable negotiant negotiate negotiation negotiator negotiatory negotiatress negotiatrix negrillo negrine negro negrodom negrohead negrohood negroish negrolike negus nehiloth nei neif neigh neighbor neighbored neighborer neighboress neighborhood neighboring neighborless neighborlike neighborliness neighborly neighborship neighborstained neighbourless neighbourlike neighbourship neigher neiper neist neither nekton nektonic nelson nelsonite nelumbian nema nemaline nemalite nematelminth nemathece nemathecial nemathecium nemathelminth nematic nematoblast nematoblastic nematoceran nematocerous nematocide nematocyst nematocystic nematode nematodiasis nematogene nematogenic nematogenous nematognath nematognathous nematogone nematogonous nematoid nematoidean nematologist nematology nematophyton nematozooid nemertean nemertine nemertinean nemertoid nemeses nemesic nemoceran nemocerous nemophilist nemophilous nemophily nemoral nemoricole nenta nenuphar neo neoacademic neoanthropic neoarsphenamine neoblastic neobotanist neobotany neocerotic neoclassic neoclassicism neoclassicist neocosmic neocracy neocriticism neocyanine neocyte neocytosis neodamode neodidymium neodymium neofetal neofetus neoformation neoformative neogamous neogamy neogenesis neogenetic neognathic neognathous neogrammarian neogrammatical neographic neohexane neoholmia neoholmium neoimpressionism neoimpressionist neolalia neolater neolatry neolith neolithic neologian neologianism neologic neological neologically neologism neologist neologistic neologistical neologization neologize neology neomedievalism neomenia neomenian neomiracle neomodal neomorph neomorphic neomorphism neon neonatal neonate neonatus neonomian neonomianism neontology neonychium neopagan neopaganism neopaganize neopallial neopallium neoparaffin neophilism neophilological neophilologist neophobia neophobic neophrastic neophyte neophytic neophytish neophytism neoplasia neoplasm neoplasma neoplasmata neoplastic neoplasticism neoplasty neoprene neorama neorealism neornithic neossin neossology neossoptile neostriatum neostyle neoteinia neoteinic neotenia neotenic neoteny neoteric neoterically neoterism neoterist neoteristic neoterize neothalamus neotype neovitalism neovolcanic neoytterbium neoza nep nepenthaceous nepenthe nepenthean nepenthes neper nephalism nephalist nephele nepheligenous nepheline nephelinic nephelinite nephelinitic nephelinitoid nephelite nephelognosy nepheloid nephelometer nephelometric nephelometrical nephelometrically nephelometry nephelorometer nepheloscope nephesh nephew nephewship nephogram nephograph nephological nephologist nephology nephoscope nephradenoma nephralgia nephralgic nephrapostasis nephratonia nephrauxe nephrectasia nephrectasis nephrectomize nephrectomy nephrelcosis nephremia nephremphraxis nephria nephric nephridia nephridial nephridiopore nephridium nephrism nephrite nephritic nephritical nephritis nephroabdominal nephrocardiac nephrocele nephrocoele nephrocolic nephrocolopexy nephrocoloptosis nephrocystitis nephrocystosis nephrocyte nephrodinic nephroerysipelas nephrogastric nephrogenetic nephrogenic nephrogenous nephrogonaduct nephrohydrosis nephrohypertrophy nephroid nephrolith nephrolithic nephrolithotomy nephrologist nephrology nephrolysin nephrolysis nephrolytic nephromalacia nephromegaly nephromere nephron nephroncus nephroparalysis nephropathic nephropathy nephropexy nephrophthisis nephropore nephroptosia nephroptosis nephropyelitis nephropyeloplasty nephropyosis nephrorrhagia nephrorrhaphy nephros nephrosclerosis nephrosis nephrostoma nephrostome nephrostomial nephrostomous nephrostomy nephrotome nephrotomize nephrotomy nephrotoxic nephrotoxicity nephrotoxin nephrotuberculosis nephrotyphoid nephrotyphus nephrozymosis nepionic nepman nepotal nepote nepotic nepotious nepotism nepotist nepotistical nepouite neptunism neptunist neptunium nereidiform nereite nerine neritic neritoid nerterology nerval nervate nervation nervature nerve nerveless nervelessly nervelessness nervelet nerveproof nerver nerveroot nervid nerviduct nervily nervimotion nervimotor nervimuscular nervine nerviness nerving nervish nervism nervomuscular nervosanguineous nervose nervosism nervosity nervous nervously nervousness nervular nervule nervulet nervulose nervuration nervure nervy nescience nescient nese nesh neshly neshness nesiote nesquehonite ness nesslerization nesslerize nest nestable nestage nester nestful nestiatria nestitherapy nestle nestler nestlike nestling nestorine nesty net netball netbraider netbush netcha nete neter netful neth netheist nether nethermore nethermost netherstock netherstone netherward netherwards neti netleaf netlike netmaker netmaking netman netmonger netop netsman netsuke nettable netted netter netting nettle nettlebed nettlebird nettlefire nettlefish nettlefoot nettlelike nettlemonger nettler nettlesome nettlewort nettling nettly netty netwise network neugroschen neuma neumatic neumatize neume neumic neurad neuradynamia neural neurale neuralgia neuralgiac neuralgic neuralgiform neuralgy neuralist neurapophyseal neurapophysial neurapophysis neurarthropathy neurasthenia neurasthenic neurasthenical neurasthenically neurataxia neurataxy neuration neuratrophia neuratrophic neuratrophy neuraxial neuraxis neuraxon neuraxone neurectasia neurectasis neurectasy neurectome neurectomic neurectomy neurectopia neurectopy neurenteric neurepithelium neurergic neurexairesis neurhypnology neurhypnotist neuriatry neuric neurilema neurilematic neurilemma neurilemmal neurilemmatic neurilemmatous neurilemmitis neurility neurin neurine neurinoma neurism neurite neuritic neuritis neuroanatomical neuroanatomy neurobiotactic neurobiotaxis neuroblast neuroblastic neuroblastoma neurocanal neurocardiac neurocele neurocentral neurocentrum neurochemistry neurochitin neurochondrite neurochord neurochorioretinitis neurocirculatory neurocity neuroclonic neurocoele neurocoelian neurocyte neurocytoma neurodegenerative neurodendrite neurodendron neurodermatitis neurodermatosis neurodermitis neurodiagnosis neurodynamic neurodynia neuroepidermal neuroepithelial neuroepithelium neurofibril neurofibrilla neurofibrillae neurofibrillar neurofibroma neurofibromatosis neurofil neuroganglion neurogastralgia neurogastric neurogenesis neurogenetic neurogenic neurogenous neuroglandular neuroglia neurogliac neuroglial neurogliar neuroglic neuroglioma neurogliosis neurogram neurogrammic neurographic neurography neurohistology neurohumor neurohumoral neurohypnology neurohypnotic neurohypnotism neurohypophysis neuroid neurokeratin neurokyme neurological neurologist neurologize neurology neurolymph neurolysis neurolytic neuroma neuromalacia neuromalakia neuromast neuromastic neuromatosis neuromatous neuromere neuromerism neuromerous neuromimesis neuromimetic neuromotor neuromuscular neuromusculature neuromyelitis neuromyic neuron neuronal neurone neuronic neuronism neuronist neuronophagia neuronophagy neuronym neuronymy neuroparalysis neuroparalytic neuropath neuropathic neuropathical neuropathically neuropathist neuropathological neuropathologist neuropathology neuropathy neurophagy neurophil neurophile neurophilic neurophysiological neurophysiology neuropile neuroplasm neuroplasmic neuroplasty neuroplexus neuropodial neuropodium neuropodous neuropore neuropsychiatric neuropsychiatrist neuropsychiatry neuropsychic neuropsychological neuropsychologist neuropsychology neuropsychopathic neuropsychopathy neuropsychosis neuropter neuropteran neuropterist neuropteroid neuropterological neuropterology neuropteron neuropterous neuroretinitis neurorrhaphy neurorthopteran neurorthopterous neurosal neurosarcoma neurosclerosis neuroses neurosis neuroskeletal neuroskeleton neurosome neurospasm neurospongium neurosthenia neurosurgeon neurosurgery neurosurgical neurosuture neurosynapse neurosyphilis neurotendinous neurotension neurotherapeutics neurotherapist neurotherapy neurothlipsis neurotic neurotically neuroticism neuroticize neurotization neurotome neurotomical neurotomist neurotomize neurotomy neurotonic neurotoxia neurotoxic neurotoxin neurotripsy neurotrophic neurotrophy neurotropic neurotropism neurovaccination neurovaccine neurovascular neurovisceral neurula neurypnological neurypnologist neurypnology neuter neuterdom neuterlike neuterly neuterness neutral neutralism neutralist neutrality neutralization neutralize neutralizer neutrally neutralness neutrino neutroceptive neutroceptor neutroclusion neutrologistic neutron neutropassive neutrophile neutrophilia neutrophilic neutrophilous nevadite neve nevel never neverland nevermore nevertheless nevo nevoid nevoy nevus nevyanskite new newberyite newcal newcome newcomer newel newelty newfangle newfangled newfangledism newfangledly newfangledness newfanglement newing newings newish newlandite newly newlywed newmarket newness news newsbill newsboard newsboat newsboy newscast newscaster newscasting newsful newsiness newsless newslessness newsletter newsman newsmonger newsmongering newsmongery newspaper newspaperdom newspaperese newspaperish newspaperized newspaperman newspaperwoman newspapery newsprint newsreader newsreel newsroom newssheet newsstand newsteller newsworthiness newsworthy newsy newt newtake newton newtonite nexal next nextly nextness nexum nexus neyanda ngai ngaio ngapi ni niacin niata nib nibbana nibbed nibber nibble nibbler nibblingly nibby niblick niblike nibong nibs nibsome niccolic niccoliferous niccolite niccolous nice niceish niceling nicely niceness nicesome nicetish nicety niche nichelino nicher nick nickel nickelage nickelic nickeliferous nickeline nickeling nickelization nickelize nickellike nickelodeon nickelous nickeltype nicker nickerpecker nickey nicking nickle nickname nicknameable nicknamee nicknameless nicknamer nickstick nicky nicolayite nicolo nicotia nicotian nicotianin nicotic nicotinamide nicotine nicotinean nicotined nicotineless nicotinian nicotinic nicotinism nicotinize nicotism nicotize nictate nictation nictitant nictitate nictitation nid nidal nidamental nidana nidation nidatory niddering niddick niddle nide nidge nidget nidgety nidi nidicolous nidificant nidificate nidification nidificational nidifugous nidify niding nidologist nidology nidor nidorosity nidorous nidorulent nidulant nidulariaceous nidulate nidulation nidulus nidus niece nieceless nieceship niellated nielled niellist niello niepa nieve nieveta nievling nife nifesima niffer nific nifle nifling nifty nig niggard niggardize niggardliness niggardling niggardly niggardness nigger niggerdom niggerfish niggergoose niggerhead niggerish niggerism niggerling niggertoe niggerweed niggery niggle niggler niggling nigglingly niggly nigh nighly nighness night nightcap nightcapped nightcaps nightchurr nightdress nighted nightfall nightfish nightflit nightfowl nightgown nighthawk nightie nightingale nightingalize nightjar nightless nightlessness nightlike nightlong nightly nightman nightmare nightmarish nightmarishly nightmary nights nightshade nightshine nightshirt nightstock nightstool nighttide nighttime nightwalker nightwalking nightward nightwards nightwear nightwork nightworker nignay nignye nigori nigranilin nigraniline nigre nigrescence nigrescent nigresceous nigrescite nigrification nigrified nigrify nigrine nigrities nigritude nigritudinous nigrosine nigrous nigua nihilianism nihilianistic nihilification nihilify nihilism nihilist nihilistic nihilitic nihility nikau nikethamide niklesite nil nilgai nilpotent nim nimb nimbated nimbed nimbi nimbiferous nimbification nimble nimblebrained nimbleness nimbly nimbose nimbosity nimbus nimbused nimiety niminy nimious nimmer nimshi nincom nincompoop nincompoopery nincompoophood nincompoopish nine ninebark ninefold nineholes ninepegs ninepence ninepenny ninepin ninepins ninescore nineted nineteen nineteenfold nineteenth nineteenthly ninetieth ninety ninetyfold ninetyish ninetyknot ninny ninnyhammer ninnyish ninnyism ninnyship ninnywatch ninon ninth ninthly nintu ninut niobate niobic niobite niobium niobous niog niota nip nipa nipcheese niphablepsia niphotyphlosis nipper nipperkin nippers nippily nippiness nipping nippingly nippitate nipple nippleless nipplewort nipponium nippy nipter nirles nirmanakaya nirvana nirvanic nisei nishiki nisnas nispero nisse nisus nit nitch nitchevo nitency nitently niter niterbush nitered nither nithing nitid nitidous nitidulid nito niton nitramine nitramino nitranilic nitraniline nitrate nitratine nitration nitrator nitriary nitric nitridation nitride nitriding nitridization nitridize nitrifaction nitriferous nitrifiable nitrification nitrifier nitrify nitrile nitrite nitro nitroalizarin nitroamine nitroaniline nitrobacteria nitrobarite nitrobenzene nitrobenzol nitrobenzole nitrocalcite nitrocellulose nitrocellulosic nitrochloroform nitrocotton nitroform nitrogelatin nitrogen nitrogenate nitrogenation nitrogenic nitrogenization nitrogenize nitrogenous nitroglycerin nitrohydrochloric nitrolamine nitrolic nitrolime nitromagnesite nitrometer nitrometric nitromuriate nitromuriatic nitronaphthalene nitroparaffin nitrophenol nitrophilous nitrophyte nitrophytic nitroprussiate nitroprussic nitroprusside nitrosamine nitrosate nitrosification nitrosify nitrosite nitrosobacteria nitrosochloride nitrososulphuric nitrostarch nitrosulphate nitrosulphonic nitrosulphuric nitrosyl nitrosylsulphuric nitrotoluene nitrous nitroxyl nitryl nitter nitty nitwit nival nivation nivellate nivellation nivellator nivellization nivenite niveous nivicolous nivosity nix nixie niyoga nizam nizamate nizamut nizy njave no noa nob nobber nobbily nobble nobbler nobbut nobby nobiliary nobilify nobilitate nobilitation nobility noble noblehearted nobleheartedly nobleheartedness nobleman noblemanly nobleness noblesse noblewoman nobley nobly nobody nobodyness nobs nocake nocardiosis nocent nocerite nociassociation nociceptive nociceptor nociperception nociperceptive nock nocket nocktat noctambulant noctambulation noctambule noctambulism noctambulist noctambulistic noctambulous noctidial noctidiurnal noctiferous noctiflorous noctiluca noctilucal noctilucan noctilucence noctilucent noctilucin noctilucine noctilucous noctiluminous noctipotent noctivagant noctivagation noctivagous noctograph noctovision noctuid noctuiform noctule nocturia nocturn nocturnal nocturnally nocturne nocuity nocuous nocuously nocuousness nod nodal nodality nodated nodder nodding noddingly noddle noddy node noded nodi nodiak nodical nodicorn nodiferous nodiflorous nodiform nodosarian nodosariform nodosarine nodose nodosity nodous nodular nodulate nodulated nodulation nodule noduled nodulize nodulose nodulous nodulus nodus noegenesis noegenetic noel noematachograph noematachometer noematachometic noetic noetics nog nogada nogal noggen noggin nogging noghead nogheaded nohow noibwood noil noilage noiler noily noint nointment noir noise noiseful noisefully noiseless noiselessly noiselessness noisemaker noisemaking noiseproof noisette noisily noisiness noisome noisomely noisomeness noisy nokta nolition noll nolle nolleity nollepros nolo noma nomad nomadian nomadic nomadical nomadically nomadism nomadization nomadize nomancy nomarch nomarchy nomarthral nombril nome nomenclate nomenclative nomenclator nomenclatorial nomenclatorship nomenclatory nomenclatural nomenclature nomenclaturist nomial nomic nomina nominable nominal nominalism nominalist nominalistic nominality nominally nominate nominated nominately nomination nominatival nominative nominatively nominator nominatrix nominature nominee nomineeism nominy nomism nomisma nomismata nomistic nomocanon nomocracy nomogenist nomogenous nomogeny nomogram nomograph nomographer nomographic nomographical nomographically nomography nomological nomologist nomology nomopelmous nomophylax nomophyllous nomos nomotheism nomothete nomothetes nomothetic nomothetical non nonabandonment nonabdication nonabiding nonability nonabjuration nonabjurer nonabolition nonabridgment nonabsentation nonabsolute nonabsolution nonabsorbable nonabsorbent nonabsorptive nonabstainer nonabstaining nonabstemious nonabstention nonabstract nonacademic nonacceding nonacceleration nonaccent nonacceptance nonacceptant nonacceptation nonaccess nonaccession nonaccessory nonaccidental nonaccompaniment nonaccompanying nonaccomplishment nonaccredited nonaccretion nonachievement nonacid nonacknowledgment nonacosane nonacoustic nonacquaintance nonacquiescence nonacquiescent nonacquisitive nonacquittal nonact nonactinic nonaction nonactionable nonactive nonactuality nonaculeate nonacute nonadditive nonadecane nonadherence nonadherent nonadhesion nonadhesive nonadjacent nonadjectival nonadjournment nonadjustable nonadjustive nonadjustment nonadministrative nonadmiring nonadmission nonadmitted nonadoption nonadornment nonadult nonadvancement nonadvantageous nonadventitious nonadventurous nonadverbial nonadvertence nonadvertency nonadvocate nonaerating nonaerobiotic nonaesthetic nonaffection nonaffiliated nonaffirmation nonage nonagenarian nonagency nonagent nonagesimal nonagglutinative nonagglutinator nonaggression nonaggressive nonagon nonagrarian nonagreement nonagricultural nonahydrate nonaid nonair nonalarmist nonalcohol nonalcoholic nonalgebraic nonalienating nonalienation nonalignment nonalkaloidal nonallegation nonallegorical nonalliterated nonalliterative nonallotment nonalluvial nonalphabetic nonaltruistic nonaluminous nonamalgamable nonamendable nonamino nonamotion nonamphibious nonamputation nonanalogy nonanalytical nonanalyzable nonanalyzed nonanaphoric nonanaphthene nonanatomical nonancestral nonane nonanesthetized nonangelic nonangling nonanimal nonannexation nonannouncement nonannuitant nonannulment nonanoic nonanonymity nonanswer nonantagonistic nonanticipative nonantigenic nonapologetic nonapostatizing nonapostolic nonapparent nonappealable nonappearance nonappearer nonappearing nonappellate nonappendicular nonapplication nonapply nonappointment nonapportionable nonapposable nonappraisal nonappreciation nonapprehension nonappropriation nonapproval nonaqueous nonarbitrable nonarcing nonargentiferous nonaristocratic nonarithmetical nonarmament nonarmigerous nonaromatic nonarraignment nonarrival nonarsenical nonarterial nonartesian nonarticulated nonarticulation nonartistic nonary nonascendancy nonascertainable nonascertaining nonascetic nonascription nonaseptic nonaspersion nonasphalt nonaspirate nonaspiring nonassault nonassent nonassentation nonassented nonassenting nonassertion nonassertive nonassessable nonassessment nonassignable nonassignment nonassimilable nonassimilating nonassimilation nonassistance nonassistive nonassociable nonassortment nonassurance nonasthmatic nonastronomical nonathletic nonatmospheric nonatonement nonattached nonattachment nonattainment nonattendance nonattendant nonattention nonattestation nonattribution nonattributive nonaugmentative nonauricular nonauriferous nonauthentication nonauthoritative nonautomatic nonautomotive nonavoidance nonaxiomatic nonazotized nonbachelor nonbacterial nonbailable nonballoting nonbanishment nonbankable nonbarbarous nonbaronial nonbase nonbasement nonbasic nonbasing nonbathing nonbearded nonbearing nonbeing nonbeliever nonbelieving nonbelligerent nonbending nonbenevolent nonbetrayal nonbeverage nonbilabiate nonbilious nonbinomial nonbiological nonbitter nonbituminous nonblack nonblameless nonbleeding nonblended nonblockaded nonblocking nonblooded nonblooming nonbodily nonbookish nonborrower nonbotanical nonbourgeois nonbranded nonbreakable nonbreeder nonbreeding nonbroodiness nonbroody nonbrowsing nonbudding nonbulbous nonbulkhead nonbureaucratic nonburgage nonburgess nonburnable nonburning nonbursting nonbusiness nonbuying noncabinet noncaffeine noncaking noncalcareous noncalcified noncallability noncallable noncancellable noncannibalistic noncanonical noncanonization noncanvassing noncapillarity noncapillary noncapital noncapitalist noncapitalistic noncapitulation noncapsizable noncapture noncarbonate noncareer noncarnivorous noncarrier noncartelized noncaste noncastigation noncataloguer noncatarrhal noncatechizable noncategorical noncathedral noncatholicity noncausality noncausation nonce noncelebration noncelestial noncellular noncellulosic noncensored noncensorious noncensus noncentral noncereal noncerebral nonceremonial noncertain noncertainty noncertified nonchafing nonchalance nonchalant nonchalantly nonchalantness nonchalky nonchallenger nonchampion nonchangeable nonchanging noncharacteristic nonchargeable nonchastisement nonchastity nonchemical nonchemist nonchivalrous nonchokable nonchokebore nonchronological nonchurch nonchurched nonchurchgoer nonciliate noncircuit noncircuital noncircular noncirculation noncitation noncitizen noncivilized nonclaim nonclaimable nonclassable nonclassical nonclassifiable nonclassification nonclastic nonclearance noncleistogamic nonclergyable nonclerical nonclimbable nonclinical nonclose nonclosure nonclotting noncoagulability noncoagulable noncoagulation noncoalescing noncock noncoercion noncoercive noncognate noncognition noncognitive noncognizable noncognizance noncoherent noncohesion noncohesive noncoinage noncoincidence noncoincident noncoincidental noncoking noncollaboration noncollaborative noncollapsible noncollectable noncollection noncollegiate noncollinear noncolloid noncollusion noncollusive noncolonial noncoloring noncom noncombat noncombatant noncombination noncombining noncombustible noncombustion noncome noncoming noncommemoration noncommencement noncommendable noncommensurable noncommercial noncommissioned noncommittal noncommittalism noncommittally noncommittalness noncommonable noncommorancy noncommunal noncommunicable noncommunicant noncommunicating noncommunication noncommunion noncommunist noncommunistic noncommutative noncompearance noncompensating noncompensation noncompetency noncompetent noncompeting noncompetitive noncompetitively noncomplaisance noncompletion noncompliance noncomplicity noncomplying noncomposite noncompoundable noncompounder noncomprehension noncompressible noncompression noncompulsion noncomputation noncon nonconcealment nonconceiving nonconcentration nonconception nonconcern nonconcession nonconciliating nonconcludency nonconcludent nonconcluding nonconclusion nonconcordant nonconcur nonconcurrence nonconcurrency nonconcurrent noncondensable noncondensation noncondensible noncondensing noncondimental nonconditioned noncondonation nonconducive nonconductibility nonconductible nonconducting nonconduction nonconductive nonconductor nonconfederate nonconferrable nonconfession nonconficient nonconfident nonconfidential nonconfinement nonconfirmation nonconfirmative nonconfiscable nonconfiscation nonconfitent nonconflicting nonconform nonconformable nonconformably nonconformance nonconformer nonconforming nonconformism nonconformist nonconformistical nonconformistically nonconformitant nonconformity nonconfutation noncongealing noncongenital noncongestion noncongratulatory noncongruent nonconjectural nonconjugal nonconjugate nonconjunction nonconnection nonconnective nonconnivance nonconnotative nonconnubial nonconscientious nonconscious nonconscription nonconsecration nonconsecutive nonconsent nonconsenting nonconsequence nonconsequent nonconservation nonconservative nonconserving nonconsideration nonconsignment nonconsistorial nonconsoling nonconsonant nonconsorting nonconspirator nonconspiring nonconstituent nonconstitutional nonconstraint nonconstruable nonconstruction nonconstructive nonconsular nonconsultative nonconsumable nonconsumption noncontact noncontagion noncontagionist noncontagious noncontagiousness noncontamination noncontemplative noncontending noncontent noncontention noncontentious noncontentiously nonconterminous noncontiguity noncontiguous noncontinental noncontingent noncontinuance noncontinuation noncontinuous noncontraband noncontraction noncontradiction noncontradictory noncontributing noncontribution noncontributor noncontributory noncontrivance noncontrolled noncontrolling noncontroversial nonconvective nonconvenable nonconventional nonconvergent nonconversable nonconversant nonconversational nonconversion nonconvertible nonconveyance nonconviction nonconvivial noncoplanar noncopying noncoring noncorporate noncorporeality noncorpuscular noncorrection noncorrective noncorrelation noncorrespondence noncorrespondent noncorresponding noncorroboration noncorroborative noncorrodible noncorroding noncorrosive noncorruption noncortical noncosmic noncosmopolitism noncostraight noncottager noncotyledonous noncounty noncranking noncreation noncreative noncredence noncredent noncredibility noncredible noncreditor noncreeping noncrenate noncretaceous noncriminal noncriminality noncrinoid noncritical noncrucial noncruciform noncrusading noncrushability noncrushable noncrustaceous noncrystalline noncrystallizable noncrystallized noncrystallizing nonculmination nonculpable noncultivated noncultivation nonculture noncumulative noncurantist noncurling noncurrency noncurrent noncursive noncurtailment noncuspidate noncustomary noncutting noncyclic noncyclical nonda nondamageable nondamnation nondancer nondangerous nondatival nondealer nondebtor nondecadence nondecadent nondecalcified nondecane nondecasyllabic nondecatoic nondecaying nondeceivable nondeception nondeceptive nondeciduate nondeciduous nondecision nondeclarant nondeclaration nondeclarer nondecomposition nondecoration nondedication nondeduction nondefalcation nondefamatory nondefaulting nondefection nondefendant nondefense nondefensive nondeference nondeferential nondefiance nondefilement nondefining nondefinition nondefinitive nondeforestation nondegenerate nondegeneration nondegerming nondegradation nondegreased nondehiscent nondeist nondelegable nondelegate nondelegation nondeleterious nondeliberate nondeliberation nondelineation nondeliquescent nondelirious nondeliverance nondelivery nondemand nondemise nondemobilization nondemocratic nondemonstration nondendroid nondenial nondenominational nondenominationalism nondense nondenumerable nondenunciation nondepartmental nondeparture nondependence nondependent nondepletion nondeportation nondeported nondeposition nondepositor nondepravity nondepreciating nondepressed nondepression nondeprivable nonderivable nonderivative nonderogatory nondescript nondesecration nondesignate nondesigned nondesire nondesirous nondesisting nondespotic nondesquamative nondestructive nondesulphurized nondetachable nondetailed nondetention nondetermination nondeterminist nondeterrent nondetest nondetonating nondetrimental nondevelopable nondevelopment nondeviation nondevotional nondexterous nondiabetic nondiabolic nondiagnosis nondiagonal nondiagrammatic nondialectal nondialectical nondialyzing nondiametral nondiastatic nondiathermanous nondiazotizable nondichogamous nondichogamy nondichotomous nondictation nondictatorial nondictionary nondidactic nondieting nondifferentation nondifferentiable nondiffractive nondiffusing nondigestion nondilatable nondilution nondiocesan nondiphtheritic nondiphthongal nondiplomatic nondipterous nondirection nondirectional nondisagreement nondisappearing nondisarmament nondisbursed nondiscernment nondischarging nondisciplinary nondisclaim nondisclosure nondiscontinuance nondiscordant nondiscountable nondiscovery nondiscretionary nondiscrimination nondiscriminatory nondiscussion nondisestablishment nondisfigurement nondisfranchised nondisingenuous nondisintegration nondisinterested nondisjunct nondisjunction nondisjunctional nondisjunctive nondismemberment nondismissal nondisparaging nondisparate nondispensation nondispersal nondispersion nondisposal nondisqualifying nondissenting nondissolution nondistant nondistinctive nondistortion nondistribution nondistributive nondisturbance nondivergence nondivergent nondiversification nondivinity nondivisible nondivisiblity nondivision nondivisional nondivorce nondo nondoctrinal nondocumentary nondogmatic nondoing nondomestic nondomesticated nondominant nondonation nondramatic nondrinking nondropsical nondrying nonduality nondumping nonduplication nondutiable nondynastic nondyspeptic none nonearning noneastern noneatable nonecclesiastical nonechoic noneclectic noneclipsing nonecompense noneconomic nonedible noneditor noneditorial noneducable noneducation noneducational noneffective noneffervescent noneffete nonefficacious nonefficacy nonefficiency nonefficient noneffusion nonego nonegoistical nonejection nonelastic nonelasticity nonelect nonelection nonelective nonelector nonelectric nonelectrical nonelectrification nonelectrified nonelectrized nonelectrocution nonelectrolyte noneleemosynary nonelemental nonelementary nonelimination nonelopement nonemanating nonemancipation nonembarkation nonembellishment nonembezzlement nonembryonic nonemendation nonemergent nonemigration nonemission nonemotional nonemphatic nonemphatical nonempirical nonemploying nonemployment nonemulative nonenactment nonenclosure nonencroachment nonencyclopedic nonendemic nonendorsement nonenduring nonene nonenemy nonenergic nonenforceability nonenforceable nonenforcement nonengagement nonengineering nonenrolled nonent nonentailed nonenteric nonentertainment nonentitative nonentitive nonentitize nonentity nonentityism nonentomological nonentrant nonentres nonentry nonenumerated nonenunciation nonenvious nonenzymic nonephemeral nonepic nonepicurean nonepileptic nonepiscopal nonepiscopalian nonepithelial nonepochal nonequal nonequation nonequatorial nonequestrian nonequilateral nonequilibrium nonequivalent nonequivocating nonerasure nonerecting nonerection nonerotic nonerroneous nonerudite noneruption nones nonescape nonespionage nonespousal nonessential nonesthetic nonesuch nonet noneternal noneternity nonetheless nonethereal nonethical nonethnological nonethyl noneugenic noneuphonious nonevacuation nonevanescent nonevangelical nonevaporation nonevasion nonevasive noneviction nonevident nonevidential nonevil nonevolutionary nonevolutionist nonevolving nonexaction nonexaggeration nonexamination nonexcavation nonexcepted nonexcerptible nonexcessive nonexchangeability nonexchangeable nonexciting nonexclamatory nonexclusion nonexclusive nonexcommunicable nonexculpation nonexcusable nonexecution nonexecutive nonexemplary nonexemplificatior nonexempt nonexercise nonexertion nonexhibition nonexistence nonexistent nonexistential nonexisting nonexoneration nonexotic nonexpansion nonexpansive nonexpansively nonexpectation nonexpendable nonexperience nonexperienced nonexperimental nonexpert nonexpiation nonexpiry nonexploitation nonexplosive nonexportable nonexportation nonexposure nonexpulsion nonextant nonextempore nonextended nonextensile nonextension nonextensional nonextensive nonextenuatory nonexteriority nonextermination nonexternal nonexternality nonextinction nonextortion nonextracted nonextraction nonextraditable nonextradition nonextraneous nonextreme nonextrication nonextrinsic nonexuding nonexultation nonfabulous nonfacetious nonfacial nonfacility nonfacing nonfact nonfactious nonfactory nonfactual nonfacultative nonfaculty nonfaddist nonfading nonfailure nonfalse nonfamily nonfamous nonfanatical nonfanciful nonfarm nonfastidious nonfat nonfatal nonfatalistic nonfatty nonfavorite nonfeasance nonfeasor nonfeatured nonfebrile nonfederal nonfederated nonfeldspathic nonfelonious nonfelony nonfenestrated nonfermentability nonfermentable nonfermentation nonfermentative nonferrous nonfertile nonfertility nonfestive nonfeudal nonfibrous nonfiction nonfictional nonfiduciary nonfighter nonfigurative nonfilamentous nonfimbriate nonfinancial nonfinding nonfinishing nonfinite nonfireproof nonfiscal nonfisherman nonfissile nonfixation nonflaky nonflammable nonfloatation nonfloating nonfloriferous nonflowering nonflowing nonfluctuating nonfluid nonfluorescent nonflying nonfocal nonfood nonforeclosure nonforeign nonforeknowledge nonforest nonforested nonforfeitable nonforfeiting nonforfeiture nonform nonformal nonformation nonformulation nonfortification nonfortuitous nonfossiliferous nonfouling nonfrat nonfraternity nonfrauder nonfraudulent nonfreedom nonfreeman nonfreezable nonfreeze nonfreezing nonfricative nonfriction nonfrosted nonfruition nonfrustration nonfulfillment nonfunctional nonfundable nonfundamental nonfungible nonfuroid nonfusion nonfuturition nonfuturity nongalactic nongalvanized nonganglionic nongas nongaseous nongassy nongelatinizing nongelatinous nongenealogical nongenerative nongenetic nongentile nongeographical nongeological nongeometrical nongermination nongerundial nongildsman nongipsy nonglacial nonglandered nonglandular nonglare nonglucose nonglucosidal nonglucosidic nongod nongold nongolfer nongospel nongovernmental nongraduate nongraduated nongraduation nongrain nongranular nongraphitic nongrass nongratuitous nongravitation nongravity nongray nongreasy nongreen nongregarious nongremial nongrey nongrooming nonguarantee nonguard nonguttural nongymnast nongypsy nonhabitable nonhabitual nonhalation nonhallucination nonhandicap nonhardenable nonharmonic nonharmonious nonhazardous nonheading nonhearer nonheathen nonhedonistic nonhepatic nonhereditarily nonhereditary nonheritable nonheritor nonhero nonhieratic nonhistoric nonhistorical nonhomaloidal nonhomogeneity nonhomogeneous nonhomogenous nonhostile nonhouseholder nonhousekeeping nonhuman nonhumanist nonhumorous nonhumus nonhunting nonhydrogenous nonhydrolyzable nonhygrometric nonhygroscopic nonhypostatic nonic noniconoclastic nonideal nonidealist nonidentical nonidentity nonidiomatic nonidolatrous nonidyllic nonignitible nonignominious nonignorant nonillion nonillionth nonillumination nonillustration nonimaginary nonimbricating nonimitative nonimmateriality nonimmersion nonimmigrant nonimmigration nonimmune nonimmunity nonimmunized nonimpact nonimpairment nonimpartment nonimpatience nonimpeachment nonimperative nonimperial nonimplement nonimportation nonimporting nonimposition nonimpregnated nonimpressionist nonimprovement nonimputation nonincandescent nonincarnated nonincitement noninclination noninclusion noninclusive nonincrease nonincreasing nonincrusting nonindependent nonindictable nonindictment nonindividual nonindividualistic noninductive noninductively noninductivity nonindurated nonindustrial noninfallibilist noninfallible noninfantry noninfected noninfection noninfectious noninfinite noninfinitely noninflammability noninflammable noninflammatory noninflectional noninfluence noninformative noninfraction noninhabitant noninheritable noninherited noninitial noninjurious noninjury noninoculation noninquiring noninsect noninsertion noninstitution noninstruction noninstructional noninstructress noninstrumental noninsurance nonintegrable nonintegrity nonintellectual nonintelligence nonintelligent nonintent nonintention noninterchangeability noninterchangeable nonintercourse noninterference noninterferer noninterfering nonintermittent noninternational noninterpolation noninterposition noninterrupted nonintersecting nonintersector nonintervention noninterventionalist noninterventionist nonintoxicant nonintoxicating nonintrospective nonintrospectively nonintrusion nonintrusionism nonintrusionist nonintuitive noninverted noninvidious noninvincibility noniodized nonion nonionized nonionizing nonirate nonirradiated nonirrational nonirreparable nonirrevocable nonirrigable nonirrigated nonirrigating nonirrigation nonirritable nonirritant nonirritating nonisobaric nonisotropic nonissuable nonius nonjoinder nonjudicial nonjurable nonjurant nonjuress nonjuring nonjurist nonjuristic nonjuror nonjurorism nonjury nonjurying nonknowledge nonkosher nonlabeling nonlactescent nonlaminated nonlanguage nonlaying nonleaded nonleaking nonlegal nonlegato nonlegume nonlepidopterous nonleprous nonlevel nonlevulose nonliability nonliable nonliberation nonlicensed nonlicentiate nonlicet nonlicking nonlife nonlimitation nonlimiting nonlinear nonlipoidal nonliquefying nonliquid nonliquidating nonliquidation nonlister nonlisting nonliterary nonlitigious nonliturgical nonliving nonlixiviated nonlocal nonlocalized nonlogical nonlosable nonloser nonlover nonloving nonloxodromic nonluminescent nonluminosity nonluminous nonluster nonlustrous nonly nonmagnetic nonmagnetizable nonmaintenance nonmajority nonmalarious nonmalicious nonmalignant nonmalleable nonmammalian nonmandatory nonmanifest nonmanifestation nonmanila nonmannite nonmanual nonmanufacture nonmanufactured nonmanufacturing nonmarine nonmarital nonmaritime nonmarket nonmarriage nonmarriageable nonmarrying nonmartial nonmastery nonmaterial nonmaterialistic nonmateriality nonmaternal nonmathematical nonmathematician nonmatrimonial nonmatter nonmechanical nonmechanistic nonmedical nonmedicinal nonmedullated nonmelodious nonmember nonmembership nonmenial nonmental nonmercantile nonmetal nonmetallic nonmetalliferous nonmetallurgical nonmetamorphic nonmetaphysical nonmeteoric nonmeteorological nonmetric nonmetrical nonmetropolitan nonmicrobic nonmicroscopical nonmigratory nonmilitant nonmilitary nonmillionaire nonmimetic nonmineral nonmineralogical nonminimal nonministerial nonministration nonmiraculous nonmischievous nonmiscible nonmissionary nonmobile nonmodal nonmodern nonmolar nonmolecular nonmomentary nonmonarchical nonmonarchist nonmonastic nonmonist nonmonogamous nonmonotheistic nonmorainic nonmoral nonmorality nonmortal nonmotile nonmotoring nonmotorist nonmountainous nonmucilaginous nonmucous nonmulched nonmultiple nonmunicipal nonmuscular nonmusical nonmussable nonmutationally nonmutative nonmutual nonmystical nonmythical nonmythological nonnant nonnarcotic nonnasal nonnat nonnational nonnative nonnatural nonnaturalism nonnaturalistic nonnaturality nonnaturalness nonnautical nonnaval nonnavigable nonnavigation nonnebular nonnecessary nonnecessity nonnegligible nonnegotiable nonnegotiation nonnephritic nonnervous nonnescience nonnescient nonneutral nonneutrality nonnitrogenized nonnitrogenous nonnoble nonnomination nonnotification nonnotional nonnucleated nonnumeral nonnutrient nonnutritious nonnutritive nonobedience nonobedient nonobjection nonobjective nonobligatory nonobservable nonobservance nonobservant nonobservation nonobstetrical nonobstructive nonobvious nonoccidental nonocculting nonoccupant nonoccupation nonoccupational nonoccurrence nonodorous nonoecumenic nonoffender nonoffensive nonofficeholding nonofficial nonofficially nonofficinal nonoic nonoily nonolfactory nonomad nononerous nonopacity nonopening nonoperating nonoperative nonopposition nonoppressive nonoptical nonoptimistic nonoptional nonorchestral nonordination nonorganic nonorganization nonoriental nonoriginal nonornamental nonorthodox nonorthographical nonoscine nonostentation nonoutlawry nonoutrage nonoverhead nonoverlapping nonowner nonoxidating nonoxidizable nonoxidizing nonoxygenated nonoxygenous nonpacific nonpacification nonpacifist nonpagan nonpaid nonpainter nonpalatal nonpapal nonpapist nonpar nonparallel nonparalytic nonparasitic nonparasitism nonpareil nonparent nonparental nonpariello nonparishioner nonparliamentary nonparlor nonparochial nonparous nonpartial nonpartiality nonparticipant nonparticipating nonparticipation nonpartisan nonpartisanship nonpartner nonparty nonpassenger nonpasserine nonpastoral nonpatentable nonpatented nonpaternal nonpathogenic nonpause nonpaying nonpayment nonpeak nonpeaked nonpearlitic nonpecuniary nonpedestrian nonpedigree nonpelagic nonpeltast nonpenal nonpenalized nonpending nonpensionable nonpensioner nonperception nonperceptual nonperfection nonperforated nonperforating nonperformance nonperformer nonperforming nonperiodic nonperiodical nonperishable nonperishing nonperjury nonpermanent nonpermeability nonpermeable nonpermissible nonpermission nonperpendicular nonperpetual nonperpetuity nonpersecution nonperseverance nonpersistence nonpersistent nonperson nonpersonal nonpersonification nonpertinent nonperversive nonphagocytic nonpharmaceutical nonphenolic nonphenomenal nonphilanthropic nonphilological nonphilosophical nonphilosophy nonphonetic nonphosphatic nonphosphorized nonphotobiotic nonphysical nonphysiological nonpickable nonpigmented nonplacental nonplacet nonplanar nonplane nonplanetary nonplantowning nonplastic nonplate nonplausible nonpleading nonplus nonplusation nonplushed nonplutocratic nonpoet nonpoetic nonpoisonous nonpolar nonpolarizable nonpolarizing nonpolitical nonponderosity nonponderous nonpopery nonpopular nonpopularity nonporous nonporphyritic nonport nonportability nonportable nonportrayal nonpositive nonpossession nonposthumous nonpostponement nonpotential nonpower nonpractical nonpractice nonpraedial nonpreaching nonprecious nonprecipitation nonpredatory nonpredestination nonpredicative nonpredictable nonpreference nonpreferential nonpreformed nonpregnant nonprehensile nonprejudicial nonprelatical nonpremium nonpreparation nonprepayment nonprepositional nonpresbyter nonprescribed nonprescriptive nonpresence nonpresentation nonpreservation nonpresidential nonpress nonpressure nonprevalence nonprevalent nonpriestly nonprimitive nonprincipiate nonprincipled nonprobable nonprocreation nonprocurement nonproducer nonproducing nonproduction nonproductive nonproductively nonproductiveness nonprofane nonprofessed nonprofession nonprofessional nonprofessionalism nonprofessorial nonproficience nonproficiency nonproficient nonprofit nonprofiteering nonprognostication nonprogressive nonprohibitable nonprohibition nonprohibitive nonprojection nonprojective nonprojectively nonproletarian nonproliferous nonprolific nonprolongation nonpromiscuous nonpromissory nonpromotion nonpromulgation nonpronunciation nonpropagandistic nonpropagation nonprophetic nonpropitiation nonproportional nonproprietary nonproprietor nonprorogation nonproscriptive nonprosecution nonprospect nonprotection nonprotective nonproteid nonprotein nonprotestation nonprotractile nonprotractility nonproven nonprovided nonprovidential nonprovocation nonpsychic nonpsychological nonpublic nonpublication nonpublicity nonpueblo nonpulmonary nonpulsating nonpumpable nonpunctual nonpunctuation nonpuncturable nonpunishable nonpunishing nonpunishment nonpurchase nonpurchaser nonpurgative nonpurification nonpurposive nonpursuit nonpurulent nonpurveyance nonputrescent nonputrescible nonputting nonpyogenic nonpyritiferous nonqualification nonquality nonquota nonracial nonradiable nonradiating nonradical nonrailroader nonranging nonratability nonratable nonrated nonratifying nonrational nonrationalist nonrationalized nonrayed nonreaction nonreactive nonreactor nonreader nonreading nonrealistic nonreality nonrealization nonreasonable nonreasoner nonrebel nonrebellious nonreceipt nonreceiving nonrecent nonreception nonrecess nonrecipient nonreciprocal nonreciprocating nonreciprocity nonrecital nonreclamation nonrecluse nonrecognition nonrecognized nonrecoil nonrecollection nonrecommendation nonreconciliation nonrecourse nonrecoverable nonrecovery nonrectangular nonrectified nonrecuperation nonrecurrent nonrecurring nonredemption nonredressing nonreducing nonreference nonrefillable nonreflector nonreformation nonrefraction nonrefrigerant nonrefueling nonrefutation nonregardance nonregarding nonregenerating nonregenerative nonregent nonregimented nonregistered nonregistrability nonregistrable nonregistration nonregression nonregulation nonrehabilitation nonreigning nonreimbursement nonreinforcement nonreinstatement nonrejection nonrejoinder nonrelapsed nonrelation nonrelative nonrelaxation nonrelease nonreliance nonreligion nonreligious nonreligiousness nonrelinquishment nonremanie nonremedy nonremembrance nonremission nonremonstrance nonremuneration nonremunerative nonrendition nonrenewable nonrenewal nonrenouncing nonrenunciation nonrepair nonreparation nonrepayable nonrepealing nonrepeat nonrepeater nonrepentance nonrepetition nonreplacement nonreplicate nonreportable nonreprehensible nonrepresentation nonrepresentational nonrepresentationalism nonrepresentative nonrepression nonreprisal nonreproduction nonreproductive nonrepublican nonrepudiation nonrequirement nonrequisition nonrequital nonrescue nonresemblance nonreservation nonreserve nonresidence nonresidency nonresident nonresidental nonresidenter nonresidential nonresidentiary nonresidentor nonresidual nonresignation nonresinifiable nonresistance nonresistant nonresisting nonresistive nonresolvability nonresolvable nonresonant nonrespectable nonrespirable nonresponsibility nonrestitution nonrestraint nonrestricted nonrestriction nonrestrictive nonresumption nonresurrection nonresuscitation nonretaliation nonretention nonretentive nonreticence nonretinal nonretirement nonretiring nonretraceable nonretractation nonretractile nonretraction nonretrenchment nonretroactive nonreturn nonreturnable nonrevaluation nonrevealing nonrevelation nonrevenge nonrevenue nonreverse nonreversed nonreversible nonreversing nonreversion nonrevertible nonreviewable nonrevision nonrevival nonrevocation nonrevolting nonrevolutionary nonrevolving nonrhetorical nonrhymed nonrhyming nonrhythmic nonriding nonrigid nonrioter nonriparian nonritualistic nonrival nonromantic nonrotatable nonrotating nonrotative nonround nonroutine nonroyal nonroyalist nonrubber nonruminant nonrun nonrupture nonrural nonrustable nonsabbatic nonsaccharine nonsacerdotal nonsacramental nonsacred nonsacrifice nonsacrificial nonsailor nonsalable nonsalaried nonsale nonsaline nonsalutary nonsalutation nonsalvation nonsanctification nonsanction nonsanctity nonsane nonsanguine nonsanity nonsaponifiable nonsatisfaction nonsaturated nonsaturation nonsaving nonsawing nonscalding nonscaling nonscandalous nonschematized nonschismatic nonscholastic nonscience nonscientific nonscientist nonscoring nonscraping nonscriptural nonscripturalist nonscrutiny nonseasonal nonsecession nonseclusion nonsecrecy nonsecret nonsecretarial nonsecretion nonsecretive nonsecretory nonsectarian nonsectional nonsectorial nonsecular nonsecurity nonsedentary nonseditious nonsegmented nonsegregation nonseizure nonselected nonselection nonselective nonself nonselfregarding nonselling nonsenatorial nonsense nonsensible nonsensical nonsensicality nonsensically nonsensicalness nonsensification nonsensify nonsensitive nonsensitiveness nonsensitized nonsensorial nonsensuous nonsentence nonsentient nonseparation nonseptate nonseptic nonsequacious nonsequaciousness nonsequestration nonserial nonserif nonserious nonserous nonserviential nonservile nonsetter nonsetting nonsettlement nonsexual nonsexually nonshaft nonsharing nonshatter nonshedder nonshipper nonshipping nonshredding nonshrinkable nonshrinking nonsiccative nonsidereal nonsignatory nonsignature nonsignificance nonsignificant nonsignification nonsignificative nonsilicated nonsiliceous nonsilver nonsimplification nonsine nonsinging nonsingular nonsinkable nonsinusoidal nonsiphonage nonsister nonsitter nonsitting nonskeptical nonskid nonskidding nonskipping nonslaveholding nonslip nonslippery nonslipping nonsludging nonsmoker nonsmoking nonsmutting nonsocial nonsocialist nonsocialistic nonsociety nonsociological nonsolar nonsoldier nonsolicitation nonsolid nonsolidified nonsolution nonsolvency nonsolvent nonsonant nonsovereign nonspalling nonsparing nonsparking nonspeaker nonspeaking nonspecial nonspecialist nonspecialized nonspecie nonspecific nonspecification nonspecificity nonspecified nonspectacular nonspectral nonspeculation nonspeculative nonspherical nonspill nonspillable nonspinning nonspinose nonspiny nonspiral nonspirit nonspiritual nonspirituous nonspontaneous nonspored nonsporeformer nonsporeforming nonsporting nonspottable nonsprouting nonstainable nonstaining nonstampable nonstandard nonstandardized nonstanzaic nonstaple nonstarch nonstarter nonstarting nonstatement nonstatic nonstationary nonstatistical nonstatutory nonstellar nonsticky nonstimulant nonstipulation nonstock nonstooping nonstop nonstrategic nonstress nonstretchable nonstretchy nonstriated nonstriker nonstriking nonstriped nonstructural nonstudent nonstudious nonstylized nonsubject nonsubjective nonsubmission nonsubmissive nonsubordination nonsubscriber nonsubscribing nonsubscription nonsubsiding nonsubsidy nonsubsistence nonsubstantial nonsubstantialism nonsubstantialist nonsubstantiality nonsubstantiation nonsubstantive nonsubstitution nonsubtraction nonsuccess nonsuccessful nonsuccession nonsuccessive nonsuccour nonsuction nonsuctorial nonsufferance nonsuffrage nonsugar nonsuggestion nonsuit nonsulphurous nonsummons nonsupplication nonsupport nonsupporter nonsupporting nonsuppositional nonsuppressed nonsuppression nonsuppurative nonsurface nonsurgical nonsurrender nonsurvival nonsurvivor nonsuspect nonsustaining nonsustenance nonswearer nonswearing nonsweating nonswimmer nonswimming nonsyllabic nonsyllabicness nonsyllogistic nonsyllogizing nonsymbiotic nonsymbiotically nonsymbolic nonsymmetrical nonsympathetic nonsympathizer nonsympathy nonsymphonic nonsymptomatic nonsynchronous nonsyndicate nonsynodic nonsynonymous nonsyntactic nonsyntactical nonsynthesized nonsyntonic nonsystematic nontabular nontactical nontan nontangential nontannic nontannin nontariff nontarnishable nontarnishing nontautomeric nontautomerizable nontax nontaxability nontaxable nontaxonomic nonteachable nonteacher nonteaching nontechnical nontechnological nonteetotaler nontelegraphic nonteleological nontelephonic nontemporal nontemporizing nontenant nontenure nontenurial nonterm nonterminating nonterrestrial nonterritorial nonterritoriality nontestamentary nontextual nontheatrical nontheistic nonthematic nontheological nontheosophical nontherapeutic nonthinker nonthinking nonthoracic nonthoroughfare nonthreaded nontidal nontillable nontimbered nontitaniferous nontitular nontolerated nontopographical nontourist nontoxic nontraction nontrade nontrader nontrading nontraditional nontragic nontrailing nontransferability nontransferable nontransgression nontransient nontransitional nontranslocation nontransmission nontransparency nontransparent nontransportation nontransposing nontransposition nontraveler nontraveling nontreasonable nontreated nontreatment nontreaty nontrespass nontrial nontribal nontribesman nontributary nontrier nontrigonometrical nontronite nontropical nontrunked nontruth nontuberculous nontuned nonturbinated nontutorial nontyphoidal nontypical nontypicalness nontypographical nontyrannical nonubiquitous nonulcerous nonultrafilterable nonumbilical nonumbilicate nonumbrellaed nonunanimous nonuncial nonundergraduate nonunderstandable nonunderstanding nonunderstandingly nonunderstood nonundulatory nonuniform nonuniformist nonuniformitarian nonuniformity nonuniformly nonunion nonunionism nonunionist nonunique nonunison nonunited nonuniversal nonuniversity nonupholstered nonuple nonuplet nonupright nonurban nonurgent nonusage nonuse nonuser nonusing nonusurping nonuterine nonutile nonutilitarian nonutility nonutilized nonutterance nonvacant nonvaccination nonvacuous nonvaginal nonvalent nonvalidity nonvaluation nonvalve nonvanishing nonvariable nonvariant nonvariation nonvascular nonvassal nonvegetative nonvenereal nonvenomous nonvenous nonventilation nonverbal nonverdict nonverminous nonvernacular nonvertebral nonvertical nonvertically nonvesicular nonvesting nonvesture nonveteran nonveterinary nonviable nonvibratile nonvibration nonvibrator nonvibratory nonvicarious nonvictory nonvillager nonvillainous nonvindication nonvinous nonvintage nonviolation nonviolence nonvirginal nonvirile nonvirtue nonvirtuous nonvirulent nonviruliferous nonvisaed nonvisceral nonviscid nonviscous nonvisional nonvisitation nonvisiting nonvisual nonvisualized nonvital nonvitreous nonvitrified nonviviparous nonvocal nonvocalic nonvocational nonvolant nonvolatile nonvolatilized nonvolcanic nonvolition nonvoluntary nonvortical nonvortically nonvoter nonvoting nonvulcanizable nonvulvar nonwalking nonwar nonwasting nonwatertight nonweakness nonwestern nonwetted nonwhite nonwinged nonwoody nonworker nonworking nonworship nonwrinkleable nonya nonyielding nonyl nonylene nonylenic nonylic nonzealous nonzero nonzodiacal nonzonal nonzonate nonzoological noodle noodledom noodleism nook nooked nookery nooking nooklet nooklike nooky noological noologist noology noometry noon noonday noonflower nooning noonlight noonlit noonstead noontide noontime noonwards noop nooscopic noose nooser nopal nopalry nope nopinene nor norard norate noration norbergite norcamphane nordcaper nordenskioldine nordmarkite noreast noreaster norelin norgine nori noria norie norimon norite norland norlander norlandism norleucine norm norma normal normalcy normalism normalist normality normalization normalize normalizer normally normalness normated normative normatively normativeness normless normoblast normoblastic normocyte normocytic normotensive nornicotine nornorwest noropianic norpinic norsel norseler north northbound northeast northeaster northeasterly northeastern northeasternmost northeastward northeastwardly northeastwards norther northerliness northerly northern northerner northernize northernly northernmost northernness northest northfieldite northing northland northlander northlight northmost northness northupite northward northwardly northwards northwest northwester northwesterly northwestern northwestward northwestwardly northwestwards norward norwards norwest norwester norwestward nosarian nose nosean noseanite noseband nosebanded nosebleed nosebone noseburn nosed nosegay nosegaylike noseherb nosehole noseless noselessly noselessness noselike noselite nosepiece nosepinch noser nosesmart nosethirl nosetiology nosewards nosewheel nosewise nosey nosine nosing nosism nosocomial nosocomium nosogenesis nosogenetic nosogenic nosogeny nosogeography nosographer nosographic nosographical nosographically nosography nosohaemia nosohemia nosological nosologically nosologist nosology nosomania nosomycosis nosonomy nosophobia nosophyte nosopoetic nosopoietic nosotaxy nosotrophy nostalgia nostalgic nostalgically nostalgy nostic nostocaceous nostochine nostologic nostology nostomania nostrificate nostrification nostril nostriled nostrility nostrilsome nostrum nostrummonger nostrummongership nostrummongery nosy not notabilia notability notable notableness notably notacanthid notacanthoid notacanthous notaeal notaeum notal notalgia notalgic notan notandum notanencephalia notarial notarially notariate notarikon notarize notary notaryship notate notation notational notative notator notch notchboard notched notchel notcher notchful notching notchweed notchwing notchy note notebook notecase noted notedly notedness notehead noteholder notekin noteless notelessly notelessness notelet notencephalocele notencephalus noter notewise noteworthily noteworthiness noteworthy notharctid nother nothing nothingarian nothingarianism nothingism nothingist nothingize nothingless nothingly nothingness nothingology nothosaur nothosaurian nothous notice noticeability noticeable noticeably noticer notidanian notidanid notidanidan notidanoid notifiable notification notified notifier notify notifyee notion notionable notional notionalist notionality notionally notionalness notionary notionate notioned notionist notionless notitia notocentrous notocentrum notochord notochordal notodontian notodontid notodontoid notommatid notonectal notonectid notopodial notopodium notopterid notopteroid notorhizal notoriety notorious notoriously notoriousness nototribe notour notourly notself notum notungulate notwithstanding nougat nougatine nought noumeaite noumeite noumenal noumenalism noumenalist noumenality noumenalize noumenally noumenism noumenon noun nounal nounally nounize nounless noup nourice nourish nourishable nourisher nourishing nourishingly nourishment nouriture nous nouther nova novaculite novalia novantique novarsenobenzene novate novation novative novator novatory novatrix novcic novel novelcraft noveldom novelese novelesque novelet novelette noveletter novelettish novelettist noveletty novelish novelism novelist novelistic novelistically novelization novelize novella novelless novellike novelly novelmongering novelness novelry novelty novelwright novem novemarticulate novemcostate novemdigitate novemfid novemlobate novemnervate novemperfoliate novena novenary novendial novene novennial novercal novice novicehood novicelike noviceship noviciate novilunar novitial novitiate novitiateship novitiation novity novodamus now nowaday nowadays nowanights noway noways nowed nowel nowhat nowhen nowhence nowhere nowhereness nowheres nowhit nowhither nowise nowness nowt nowy noxa noxal noxally noxious noxiously noxiousness noy noyade noyau nozzle nozzler nth nu nuance nub nubbin nubble nubbling nubbly nubby nubecula nubia nubiferous nubiform nubigenous nubilate nubilation nubile nubility nubilous nucal nucament nucamentaceous nucellar nucellus nucha nuchal nuchalgia nuciculture nuciferous nuciform nucin nucivorous nucleal nuclear nucleary nuclease nucleate nucleation nucleator nuclei nucleiferous nucleiform nuclein nucleinase nucleoalbumin nucleoalbuminuria nucleofugal nucleohistone nucleohyaloplasm nucleohyaloplasma nucleoid nucleoidioplasma nucleolar nucleolated nucleole nucleoli nucleolinus nucleolocentrosome nucleoloid nucleolus nucleolysis nucleomicrosome nucleon nucleone nucleonics nucleopetal nucleoplasm nucleoplasmatic nucleoplasmic nucleoprotein nucleoside nucleotide nucleus nuclide nuclidic nuculanium nucule nuculid nuculiform nuculoid nudate nudation nuddle nude nudely nudeness nudge nudger nudibranch nudibranchian nudibranchiate nudicaudate nudicaul nudifier nudiflorous nudiped nudish nudism nudist nuditarian nudity nugacious nugaciousness nugacity nugator nugatoriness nugatory nuggar nugget nuggety nugify nugilogue nuisance nuisancer nuke nul null nullable nullah nullibicity nullibility nullibiquitous nullibist nullification nullificationist nullificator nullifidian nullifier nullify nullipara nulliparity nulliparous nullipennate nulliplex nullipore nulliporous nullism nullisome nullisomic nullity nulliverse nullo numb number numberable numberer numberful numberless numberous numbersome numbfish numbing numbingly numble numbles numbly numbness numda numdah numen numerable numerableness numerably numeral numerant numerary numerate numeration numerative numerator numerical numerically numericalness numerist numero numerology numerose numerosity numerous numerously numerousness numinism numinous numinously numismatic numismatical numismatically numismatician numismatics numismatist numismatography numismatologist numismatology nummary nummi nummiform nummular nummulary nummulated nummulation nummuline nummulite nummulitic nummulitoid nummuloidal nummus numskull numskulled numskulledness numskullery numskullism numud nun nunatak nunbird nunch nuncheon nunciate nunciative nunciatory nunciature nuncio nuncioship nuncle nuncupate nuncupation nuncupative nuncupatively nundinal nundination nundine nunhood nunky nunlet nunlike nunnari nunnated nunnation nunnery nunni nunnify nunnish nunnishness nunship nuptial nuptiality nuptialize nuptially nuptials nuque nuraghe nurhag nurly nursable nurse nursedom nursegirl nursehound nursekeeper nursekin nurselet nurselike nursemaid nurser nursery nurserydom nurseryful nurserymaid nurseryman nursetender nursing nursingly nursle nursling nursy nurturable nurtural nurture nurtureless nurturer nurtureship nusfiah nut nutant nutarian nutate nutation nutational nutbreaker nutcake nutcrack nutcracker nutcrackers nutcrackery nutgall nuthatch nuthook nutjobber nutlet nutlike nutmeg nutmegged nutmeggy nutpecker nutpick nutramin nutria nutrice nutricial nutricism nutrient nutrify nutriment nutrimental nutritial nutrition nutritional nutritionally nutritionist nutritious nutritiously nutritiousness nutritive nutritively nutritiveness nutritory nutseed nutshell nuttalliasis nuttalliosis nutted nutter nuttery nuttily nuttiness nutting nuttish nuttishness nutty nuzzer nuzzerana nuzzle nyanza nychthemer nychthemeral nychthemeron nyctaginaceous nyctalope nyctalopia nyctalopic nyctalopy nycteribiid nycterine nyctinastic nyctinasty nyctipelagic nyctipithecine nyctitropic nyctitropism nyctophobia nycturia nye nylast nylon nymil nymph nympha nymphae nymphaeaceous nymphaeum nymphal nymphalid nymphaline nympheal nymphean nymphet nymphic nymphical nymphid nymphine nymphiparous nymphish nymphitis nymphlike nymphlin nymphly nympholepsia nympholepsy nympholept nympholeptic nymphomania nymphomaniac nymphomaniacal nymphosis nymphotomy nymphwise nystagmic nystagmus nyxis o oadal oaf oafdom oafish oafishly oafishness oak oakberry oaken oakenshaw oaklet oaklike oakling oaktongue oakum oakweb oakwood oaky oam oar oarage oarcock oared oarfish oarhole oarial oarialgia oaric oariocele oariopathic oariopathy oariotomy oaritic oaritis oarium oarless oarlike oarlock oarlop oarman oarsman oarsmanship oarswoman oarweed oary oasal oasean oases oasis oasitic oast oasthouse oat oatbin oatcake oatear oaten oatenmeal oatfowl oath oathay oathed oathful oathlet oathworthy oatland oatlike oatmeal oatseed oaty obambulate obambulation obambulatory oban obbligato obclavate obclude obcompressed obconical obcordate obcordiform obcuneate obdeltoid obdiplostemonous obdiplostemony obdormition obduction obduracy obdurate obdurately obdurateness obduration obe obeah obeahism obeche obedience obediency obedient obediential obedientially obedientialness obedientiar obedientiary obediently obeisance obeisant obeisantly obeism obelia obeliac obelial obelion obeliscal obeliscar obelisk obeliskoid obelism obelize obelus obese obesely obeseness obesity obex obey obeyable obeyer obeyingly obfuscable obfuscate obfuscation obfuscator obfuscity obfuscous obi obispo obit obitual obituarian obituarily obituarist obituarize obituary object objectable objectation objectative objectee objecthood objectification objectify objection objectionability objectionable objectionableness objectionably objectional objectioner objectionist objectival objectivate objectivation objective objectively objectiveness objectivism objectivist objectivistic objectivity objectivize objectization objectize objectless objectlessly objectlessness objector objicient objuration objure objurgate objurgation objurgative objurgatively objurgator objurgatorily objurgatory objurgatrix oblanceolate oblate oblately oblateness oblation oblational oblationary oblatory oblectate oblectation obley obligable obligancy obligant obligate obligation obligational obligative obligativeness obligator obligatorily obligatoriness obligatory obligatum oblige obliged obligedly obligedness obligee obligement obliger obliging obligingly obligingness obligistic obligor obliquangular obliquate obliquation oblique obliquely obliqueness obliquitous obliquity obliquus obliterable obliterate obliteration obliterative obliterator oblivescence oblivial obliviality oblivion oblivionate oblivionist oblivionize oblivious obliviously obliviousness obliviscence obliviscible oblocutor oblong oblongatal oblongated oblongish oblongitude oblongitudinal oblongly oblongness obloquial obloquious obloquy obmutescence obmutescent obnebulate obnounce obnoxiety obnoxious obnoxiously obnoxiousness obnubilate obnubilation obnunciation oboe oboist obol obolary obole obolet obolus obomegoid oboval obovate obovoid obpyramidal obpyriform obreption obreptitious obreptitiously obrogate obrogation obrotund obscene obscenely obsceneness obscenity obscurancy obscurant obscurantic obscurantism obscurantist obscuration obscurative obscure obscuredly obscurely obscurement obscureness obscurer obscurism obscurist obscurity obsecrate obsecration obsecrationary obsecratory obsede obsequence obsequent obsequial obsequience obsequiosity obsequious obsequiously obsequiousness obsequity obsequium obsequy observability observable observableness observably observance observancy observandum observant observantly observantness observation observational observationalism observationally observative observatorial observatory observe observedly observer observership observing observingly obsess obsessingly obsession obsessional obsessionist obsessive obsessor obsidian obsidianite obsidional obsidionary obsidious obsignate obsignation obsignatory obsolesce obsolescence obsolescent obsolescently obsolete obsoletely obsoleteness obsoletion obsoletism obstacle obstetric obstetrical obstetrically obstetricate obstetrication obstetrician obstetrics obstetricy obstetrist obstetrix obstinacious obstinacy obstinance obstinate obstinately obstinateness obstination obstinative obstipation obstreperate obstreperosity obstreperous obstreperously obstreperousness obstriction obstringe obstruct obstructant obstructedly obstructer obstructingly obstruction obstructionism obstructionist obstructive obstructively obstructiveness obstructivism obstructivity obstructor obstruent obstupefy obtain obtainable obtainal obtainance obtainer obtainment obtect obtected obtemper obtemperate obtenebrate obtenebration obtention obtest obtestation obtriangular obtrude obtruder obtruncate obtruncation obtruncator obtrusion obtrusionist obtrusive obtrusively obtrusiveness obtund obtundent obtunder obtundity obturate obturation obturator obturatory obturbinate obtusangular obtuse obtusely obtuseness obtusifid obtusifolious obtusilingual obtusilobous obtusion obtusipennate obtusirostrate obtusish obtusity obumbrant obumbrate obumbration obvallate obvelation obvention obverse obversely obversion obvert obvertend obviable obviate obviation obviative obviator obvious obviously obviousness obvolute obvoluted obvolution obvolutive obvolve obvolvent ocarina occamy occasion occasionable occasional occasionalism occasionalist occasionalistic occasionality occasionally occasionalness occasionary occasioner occasionless occasive occident occidental occidentality occidentally occiduous occipital occipitalis occipitally occipitoanterior occipitoatlantal occipitoatloid occipitoaxial occipitoaxoid occipitobasilar occipitobregmatic occipitocalcarine occipitocervical occipitofacial occipitofrontal occipitofrontalis occipitohyoid occipitoiliac occipitomastoid occipitomental occipitonasal occipitonuchal occipitootic occipitoparietal occipitoposterior occipitoscapular occipitosphenoid occipitosphenoidal occipitotemporal occipitothalamic occiput occitone occlude occludent occlusal occluse occlusion occlusive occlusiveness occlusocervical occlusocervically occlusogingival occlusometer occlusor occult occultate occultation occulter occulting occultism occultist occultly occultness occupable occupance occupancy occupant occupation occupational occupationalist occupationally occupationless occupative occupiable occupier occupy occur occurrence occurrent occursive ocean oceaned oceanet oceanful oceanic oceanity oceanographer oceanographic oceanographical oceanographically oceanographist oceanography oceanology oceanophyte oceanside oceanward oceanwards oceanways oceanwise ocellar ocellary ocellate ocellated ocellation ocelli ocellicyst ocellicystic ocelliferous ocelliform ocelligerous ocellus oceloid ocelot och ochava ochavo ocher ocherish ocherous ochery ochidore ochlesis ochlesitic ochletic ochlocracy ochlocrat ochlocratic ochlocratical ochlocratically ochlophobia ochlophobist ochnaceous ochone ochraceous ochrea ochreate ochreous ochro ochrocarpous ochroid ochroleucous ochrolite ochronosis ochronosus ochronotic ochrous ocht ock oclock ocote ocotillo ocque ocracy ocrea ocreaceous ocreate ocreated octachloride octachord octachordal octachronous octacolic octactinal octactine octactinian octad octadecahydrate octadecane octadecanoic octadecyl octadic octadrachm octaemeron octaeteric octaeterid octagon octagonal octagonally octahedral octahedric octahedrical octahedrite octahedroid octahedron octahedrous octahydrate octahydrated octakishexahedron octamerism octamerous octameter octan octanaphthene octandrian octandrious octane octangle octangular octangularness octant octantal octapla octaploid octaploidic octaploidy octapodic octapody octarch octarchy octarius octarticulate octary octasemic octastich octastichon octastrophic octastyle octastylos octateuch octaval octavalent octavarium octave octavic octavina octavo octenary octene octennial octennially octet octic octillion octillionth octine octingentenary octoad octoalloy octoate octobass octobrachiate octocentenary octocentennial octochord octocorallan octocoralline octocotyloid octodactyl octodactyle octodactylous octodecimal octodecimo octodentate octodianome octodont octoechos octofid octofoil octofoiled octogamy octogenarian octogenarianism octogenary octogild octoglot octogynian octogynious octogynous octoic octoid octolateral octolocular octomeral octomerous octometer octonal octonare octonarian octonarius octonary octonematous octonion octonocular octoon octopartite octopean octoped octopede octopetalous octophthalmous octophyllous octopi octopine octoploid octoploidic octoploidy octopod octopodan octopodes octopodous octopolar octopus octoradial octoradiate octoradiated octoreme octoroon octose octosepalous octospermous octospore octosporous octostichous octosyllabic octosyllable octovalent octoyl octroi octroy octuor octuple octuplet octuplex octuplicate octuplication octuply octyl octylene octyne ocuby ocular ocularist ocularly oculary oculate oculated oculauditory oculiferous oculiform oculigerous oculinid oculinoid oculist oculistic oculocephalic oculofacial oculofrontal oculomotor oculomotory oculonasal oculopalpebral oculopupillary oculospinal oculozygomatic oculus ocydrome ocydromine ocypodan ocypodian ocypodoid od oda odacoid odal odalborn odalisk odalisque odaller odalman odalwoman odd oddish oddity oddlegs oddly oddman oddment oddments oddness odds oddsman ode odel odelet odeon odeum odic odically odinite odiometer odious odiously odiousness odist odium odiumproof odograph odology odometer odometrical odometry odontagra odontalgia odontalgic odontatrophia odontatrophy odontexesis odontiasis odontic odontist odontitis odontoblast odontoblastic odontocele odontocete odontocetous odontochirurgic odontoclasis odontoclast odontodynia odontogen odontogenesis odontogenic odontogeny odontoglossal odontoglossate odontognathic odontognathous odontograph odontographic odontography odontohyperesthesia odontoid odontolcate odontolcous odontolite odontolith odontological odontologist odontology odontoloxia odontoma odontomous odontonecrosis odontoneuralgia odontonosology odontopathy odontophoral odontophore odontophorine odontophorous odontoplast odontoplerosis odontorhynchous odontornithic odontorrhagia odontorthosis odontoschism odontoscope odontosis odontostomatous odontostomous odontotechny odontotherapia odontotherapy odontotomy odontotripsis odontotrypy odoom odophone odor odorant odorate odorator odored odorful odoriferant odoriferosity odoriferous odoriferously odoriferousness odorific odorimeter odorimetry odoriphore odorivector odorize odorless odorometer odorosity odorous odorously odorousness odorproof odso odum odyl odylic odylism odylist odylization odylize oe oecist oecodomic oecodomical oecoparasite oecoparasitism oecophobia oecumenian oecumenic oecumenical oecumenicalism oecumenicity oecus oedemerid oedicnemine oedogoniaceous oenanthaldehyde oenanthate oenanthic oenanthol oenanthole oenanthyl oenanthylate oenanthylic oenin oenochoe oenocyte oenocytic oenolin oenological oenologist oenology oenomancy oenomel oenometer oenophilist oenophobist oenopoetic oenotheraceous oer oersted oes oesophageal oesophagi oesophagismus oesophagostomiasis oesophagus oestradiol oestrian oestriasis oestrid oestrin oestriol oestroid oestrous oestrual oestruate oestruation oestrum oestrus of off offal offaling offbeat offcast offcome offcut offend offendable offendant offended offendedly offendedness offender offendible offendress offense offenseful offenseless offenselessly offenseproof offensible offensive offensively offensiveness offer offerable offeree offerer offering offeror offertorial offertory offgoing offgrade offhand offhanded offhandedly offhandedness office officeholder officeless officer officerage officeress officerhood officerial officerism officerless officership official officialdom officialese officialism officiality officialization officialize officially officialty officiant officiary officiate officiation officiator officinal officinally officious officiously officiousness offing offish offishly offishness offlet offlook offprint offsaddle offscape offscour offscourer offscouring offscum offset offshoot offshore offsider offspring offtake offtype offuscate offuscation offward offwards oflete oft often oftenness oftens oftentime oftentimes ofter oftest oftly oftness ofttime ofttimes oftwhiles ogaire ogam ogamic ogdoad ogdoas ogee ogeed ogganition ogham oghamic ogival ogive ogived ogle ogler ogmic ogre ogreish ogreishly ogreism ogress ogrish ogrism ogtiern ogum oh ohelo ohia ohm ohmage ohmic ohmmeter oho ohoy oidioid oidiomycosis oidiomycotic oii oikology oikoplast oil oilberry oilbird oilcan oilcloth oilcoat oilcup oildom oiled oiler oilery oilfish oilhole oilily oiliness oilless oillessness oillet oillike oilman oilmonger oilmongery oilometer oilpaper oilproof oilproofing oilseed oilskin oilskinned oilstock oilstone oilstove oiltight oiltightness oilway oily oilyish oime oinochoe oinology oinomancy oinomania oinomel oint ointment oisin oisivity oitava oiticica oka okapi okee okenite oket oki okia okoniosis okonite okra okrug okshoofd okthabah okupukupu olacaceous olam olamic old olden older oldermost oldfangled oldfangledness oldhamite oldhearted oldish oldland oldness oldster oldwife oleaceous oleaginous oleaginousness oleana oleander oleandrin olease oleaster oleate olecranal olecranarthritis olecranial olecranian olecranoid olecranon olefiant olefin olefine olefinic oleic oleiferous olein olena olenellidian olenid olenidian olent oleo oleocalcareous oleocellosis oleocyst oleoduct oleograph oleographer oleographic oleography oleomargaric oleomargarine oleometer oleoptene oleorefractometer oleoresin oleoresinous oleosaccharum oleose oleosity oleostearate oleostearin oleothorax oleous oleraceous olericultural olericulturally olericulture olethreutid olfact olfactible olfaction olfactive olfactology olfactometer olfactometric olfactometry olfactor olfactorily olfactory olfacty oliban olibanum olid oligacanthous oligaemia oligandrous oliganthous oligarch oligarchal oligarchic oligarchical oligarchically oligarchism oligarchist oligarchize oligarchy oligemia oligidria oligist oligistic oligistical oligocarpous oligochaete oligochaetous oligochete oligocholia oligochrome oligochromemia oligochronometer oligochylia oligoclase oligoclasite oligocystic oligocythemia oligocythemic oligodactylia oligodendroglia oligodendroglioma oligodipsia oligodontous oligodynamic oligogalactia oligohemia oligohydramnios oligolactia oligomenorrhea oligomerous oligomery oligometochia oligometochic oligomyodian oligomyoid oligonephric oligonephrous oligonite oligopepsia oligopetalous oligophagous oligophosphaturia oligophrenia oligophrenic oligophyllous oligoplasmia oligopnea oligopolistic oligopoly oligoprothesy oligoprothetic oligopsonistic oligopsony oligopsychia oligopyrene oligorhizous oligosepalous oligosialia oligosideric oligosiderite oligosite oligospermia oligospermous oligostemonous oligosyllabic oligosyllable oligosynthetic oligotokous oligotrichia oligotrophic oligotrophy oligotropic oliguresis oliguretic oliguria oliniaceous olio oliphant oliprance olitory oliva olivaceous olivary olive olived oliveness olivenite oliverman oliversmith olivescent olivet olivewood oliviferous oliviform olivil olivile olivilin olivine olivinefels olivinic olivinite olivinitic olla ollamh ollapod ollenite ollock olm ological ologist ologistic ology olomao olona oloroso olpe oltonde oltunna olycook olykoek om omadhaun omagra omalgia omao omarthritis omasitis omasum omber ombrette ombrifuge ombrograph ombrological ombrology ombrometer ombrophile ombrophilic ombrophilous ombrophily ombrophobe ombrophobous ombrophoby ombrophyte ombudsman ombudsmanship omega omegoid omelet omelette omen omened omenology omental omentectomy omentitis omentocele omentofixation omentopexy omentoplasty omentorrhaphy omentosplenopexy omentotomy omentulum omentum omer omicron omina ominous ominously ominousness omissible omission omissive omissively omit omitis omittable omitter omlah ommateal ommateum ommatidial ommatidium ommatophore ommatophorous omneity omniactive omniactuality omniana omniarch omnibenevolence omnibenevolent omnibus omnibusman omnicausality omnicompetence omnicompetent omnicorporeal omnicredulity omnicredulous omnidenominational omnierudite omniessence omnifacial omnifarious omnifariously omnifariousness omniferous omnific omnificent omnifidel omniform omniformal omniformity omnify omnigenous omnigerent omnigraph omnihuman omnihumanity omnilegent omnilingual omniloquent omnilucent omnimental omnimeter omnimode omnimodous omninescience omninescient omniparent omniparient omniparity omniparous omnipatient omnipercipience omnipercipiency omnipercipient omniperfect omnipotence omnipotency omnipotent omnipotentiality omnipotently omnipregnant omnipresence omnipresent omnipresently omniprevalence omniprevalent omniproduction omniprudent omnirange omniregency omnirepresentative omnirepresentativeness omnirevealing omniscience omnisciency omniscient omnisciently omniscope omniscribent omniscriptive omnisentience omnisentient omnisignificance omnisignificant omnispective omnist omnisufficiency omnisufficient omnitemporal omnitenent omnitolerant omnitonal omnitonality omnitonic omnitude omnium omnivagant omnivalence omnivalent omnivalous omnivarious omnividence omnivident omnivision omnivolent omnivoracious omnivoracity omnivorant omnivore omnivorous omnivorously omnivorousness omodynia omohyoid omoideum omophagia omophagist omophagous omophagy omophorion omoplate omoplatoscopy omostegite omosternal omosternum omphacine omphacite omphalectomy omphalic omphalism omphalitis omphalocele omphalode omphalodium omphalogenous omphaloid omphaloma omphalomesaraic omphalomesenteric omphaloncus omphalopagus omphalophlebitis omphalopsychic omphalopsychite omphalorrhagia omphalorrhea omphalorrhexis omphalos omphalosite omphaloskepsis omphalospinous omphalotomy omphalotripsy omphalus on ona onager onagra onagraceous onanism onanist onanistic onca once oncetta onchocerciasis onchocercosis oncia oncin oncograph oncography oncologic oncological oncology oncome oncometer oncometric oncometry oncoming oncosimeter oncosis oncosphere oncost oncostman oncotomy ondagram ondagraph ondameter ondascope ondatra ondine ondogram ondograph ondometer ondoscope ondy one oneanother oneberry onefold onefoldness onegite onehearted onehow oneiric oneirocrit oneirocritic oneirocritical oneirocritically oneirocriticism oneirocritics oneirodynia oneirologist oneirology oneiromancer oneiromancy oneiroscopic oneiroscopist oneiroscopy oneirotic oneism onement oneness oner onerary onerative onerosity onerous onerously onerousness onery oneself onesigned onetime onewhere oneyer onfall onflemed onflow onflowing ongaro ongoing onhanger onicolo oniomania oniomaniac onion onionet onionized onionlike onionpeel onionskin oniony onirotic onisciform oniscoid oniscoidean onium onkilonite onkos onlay onlepy onliest onliness onlook onlooker onlooking only onmarch onocentaur onofrite onolatry onomancy onomantia onomastic onomasticon onomatologist onomatology onomatomania onomatope onomatoplasm onomatopoeia onomatopoeial onomatopoeian onomatopoeic onomatopoeical onomatopoeically onomatopoesis onomatopoesy onomatopoetic onomatopoetically onomatopy onomatous onomomancy onrush onrushing ons onset onsetter onshore onside onsight onslaught onstand onstanding onstead onsweep onsweeping ontal onto ontocycle ontocyclic ontogenal ontogenesis ontogenetic ontogenetical ontogenetically ontogenic ontogenically ontogenist ontogeny ontography ontologic ontological ontologically ontologism ontologist ontologistic ontologize ontology ontosophy onus onwaiting onward onwardly onwardness onwards onycha onychatrophia onychauxis onychia onychin onychitis onychium onychogryposis onychoid onycholysis onychomalacia onychomancy onychomycosis onychonosus onychopathic onychopathology onychopathy onychophagist onychophagy onychophoran onychophorous onychophyma onychoptosis onychorrhexis onychoschizia onychosis onychotrophy onym onymal onymancy onymatic onymity onymize onymous onymy onyx onyxis onyxitis onza ooangium ooblast ooblastic oocyesis oocyst oocystaceous oocystic oocyte oodles ooecial ooecium oofbird ooftish oofy oogamete oogamous oogamy oogenesis oogenetic oogeny ooglea oogone oogonial oogoniophore oogonium oograph ooid ooidal ookinesis ookinete ookinetic oolak oolemma oolite oolitic oolly oologic oological oologically oologist oologize oology oolong oomancy oomantia oometer oometric oometry oomycete oomycetous oons oont oopak oophoralgia oophorauxe oophore oophorectomy oophoreocele oophorhysterectomy oophoric oophoridium oophoritis oophoroepilepsy oophoroma oophoromalacia oophoromania oophoron oophoropexy oophororrhaphy oophorosalpingectomy oophorostomy oophorotomy oophyte oophytic ooplasm ooplasmic ooplast oopod oopodal ooporphyrin oorali oord ooscope ooscopy oosperm oosphere oosporange oosporangium oospore oosporic oosporiferous oosporous oostegite oostegitic ootheca oothecal ootid ootocoid ootocoidean ootocous ootype ooze oozily ooziness oozooid oozy opacate opacification opacifier opacify opacite opacity opacous opacousness opah opal opaled opalesce opalescence opalescent opalesque opaline opalinid opalinine opalish opalize opaloid opaque opaquely opaqueness opdalite ope opeidoscope opelet open openable openband openbeak openbill opencast opener openhanded openhandedly openhandedness openhead openhearted openheartedly openheartedness opening openly openmouthed openmouthedly openmouthedness openness openside openwork opera operability operabily operable operae operagoer operalogue operameter operance operancy operand operant operatable operate operatee operatic operatical operatically operating operation operational operationalism operationalist operationism operationist operative operatively operativeness operativity operatize operator operatory operatrix opercle opercled opercula opercular operculate operculated operculiferous operculiform operculigenous operculigerous operculum operetta operette operettist operose operosely operoseness operosity ophelimity ophiasis ophic ophicalcite ophicephaloid ophichthyoid ophicleide ophicleidean ophicleidist ophidian ophidioid ophidiophobia ophidious ophidologist ophidology ophioglossaceous ophiography ophioid ophiolater ophiolatrous ophiolatry ophiolite ophiolitic ophiologic ophiological ophiologist ophiology ophiomancy ophiomorph ophiomorphic ophiomorphous ophionid ophionine ophiophagous ophiophilism ophiophilist ophiophobe ophiophobia ophiophoby ophiopluteus ophiostaphyle ophiouride ophite ophitic ophiuran ophiurid ophiuroid ophiuroidean ophryon ophthalaiater ophthalmagra ophthalmalgia ophthalmalgic ophthalmatrophia ophthalmectomy ophthalmencephalon ophthalmetrical ophthalmia ophthalmiac ophthalmiatrics ophthalmic ophthalmious ophthalmist ophthalmite ophthalmitic ophthalmitis ophthalmoblennorrhea ophthalmocarcinoma ophthalmocele ophthalmocopia ophthalmodiagnosis ophthalmodiastimeter ophthalmodynamometer ophthalmodynia ophthalmography ophthalmoleucoscope ophthalmolith ophthalmologic ophthalmological ophthalmologist ophthalmology ophthalmomalacia ophthalmometer ophthalmometric ophthalmometry ophthalmomycosis ophthalmomyositis ophthalmomyotomy ophthalmoneuritis ophthalmopathy ophthalmophlebotomy ophthalmophore ophthalmophorous ophthalmophthisis ophthalmoplasty ophthalmoplegia ophthalmoplegic ophthalmopod ophthalmoptosis ophthalmorrhagia ophthalmorrhea ophthalmorrhexis ophthalmoscope ophthalmoscopic ophthalmoscopical ophthalmoscopist ophthalmoscopy ophthalmostasis ophthalmostat ophthalmostatometer ophthalmothermometer ophthalmotomy ophthalmotonometer ophthalmotonometry ophthalmotrope ophthalmotropometer ophthalmy opianic opianyl opiate opiateproof opiatic opificer opiism opiliaceous opilionine opinability opinable opinably opinant opination opinative opinatively opinator opine opiner opiniaster opiniastre opiniastrety opiniastrous opiniater opiniative opiniatively opiniativeness opiniatreness opiniatrety opinion opinionable opinionaire opinional opinionate opinionated opinionatedly opinionatedness opinionately opinionative opinionatively opinionativeness opinioned opinionedness opinionist opiomania opiomaniac opiophagism opiophagy opiparous opisometer opisthenar opisthion opisthobranch opisthobranchiate opisthocoelian opisthocoelous opisthocome opisthocomine opisthocomous opisthodetic opisthodome opisthodomos opisthodomus opisthodont opisthogastric opisthoglossal opisthoglossate opisthoglyph opisthoglyphic opisthoglyphous opisthognathism opisthognathous opisthograph opisthographal opisthographic opisthographical opisthography opisthogyrate opisthogyrous opisthoparian opisthophagic opisthoporeia opisthorchiasis opisthosomal opisthotic opisthotonic opisthotonoid opisthotonos opisthotonus opium opiumism opobalsam opodeldoc opodidymus opodymus opopanax opossum opotherapy oppidan oppilate oppilation oppilative opponency opponent opportune opportuneless opportunely opportuneness opportunism opportunist opportunistic opportunistically opportunity opposability opposable oppose opposed opposeless opposer opposing opposingly opposit opposite oppositely oppositeness oppositiflorous oppositifolious opposition oppositional oppositionary oppositionism oppositionist oppositionless oppositious oppositipetalous oppositipinnate oppositipolar oppositisepalous oppositive oppositively oppositiveness opposure oppress oppressed oppressible oppression oppressionist oppressive oppressively oppressiveness oppressor opprobriate opprobrious opprobriously opprobriousness opprobrium opprobry oppugn oppugnacy oppugnance oppugnancy oppugnant oppugnate oppugnation oppugner opsigamy opsimath opsimathy opsiometer opsisform opsistype opsonic opsoniferous opsonification opsonify opsonin opsonist opsonium opsonization opsonize opsonogen opsonoid opsonology opsonometry opsonophilia opsonophilic opsonophoric opsonotherapy opsy opt optable optableness optably optant optate optation optative optatively opthalmophorium opthalmoplegy opthalmothermometer optic optical optically optician opticist opticity opticochemical opticociliary opticon opticopapillary opticopupillary optics optigraph optimacy optimal optimate optimates optime optimism optimist optimistic optimistical optimistically optimity optimization optimize optimum option optional optionality optionalize optionally optionary optionee optionor optive optoblast optogram optography optological optologist optology optomeninx optometer optometrical optometrist optometry optophone optotechnics optotype opulence opulency opulent opulently opulus opuntioid opus opuscular opuscule opusculum oquassa or ora orabassu orach oracle oracular oracularity oracularly oracularness oraculate oraculous oraculously oraculousness oraculum orad orage oragious oral oraler oralism oralist orality oralization oralize orally oralogist oralogy orang orange orangeade orangebird orangeleaf orangeman oranger orangeroot orangery orangewoman orangewood orangey orangism orangist orangite orangize orangutan orant orarian orarion orarium orary orate oration orational orationer orator oratorial oratorially oratorian oratoric oratorical oratorically oratorio oratorize oratorlike oratorship oratory oratress oratrix orb orbed orbic orbical orbicle orbicular orbicularis orbicularity orbicularly orbicularness orbiculate orbiculated orbiculately orbiculation orbiculatocordate orbiculatoelliptical orbific orbit orbital orbitale orbitar orbitary orbite orbitelar orbitelarian orbitele orbitelous orbitofrontal orbitolite orbitomalar orbitomaxillary orbitonasal orbitopalpebral orbitosphenoid orbitosphenoidal orbitostat orbitotomy orbitozygomatic orbless orblet orby orc orcanet orcein orchamus orchard orcharding orchardist orchardman orchat orchel orchella orchesis orchesography orchester orchestian orchestic orchestiid orchestra orchestral orchestraless orchestrally orchestrate orchestrater orchestration orchestrator orchestre orchestric orchestrina orchestrion orchialgia orchic orchichorea orchid orchidacean orchidaceous orchidalgia orchidectomy orchideous orchideously orchidist orchiditis orchidocele orchidocelioplasty orchidologist orchidology orchidomania orchidopexy orchidoplasty orchidoptosis orchidorrhaphy orchidotherapy orchidotomy orchiectomy orchiencephaloma orchiepididymitis orchil orchilla orchilytic orchiocatabasis orchiocele orchiodynia orchiomyeloma orchioncus orchioneuralgia orchiopexy orchioplasty orchiorrhaphy orchioscheocele orchioscirrhus orchiotomy orchitic orchitis orchotomy orcin orcinol ordain ordainable ordainer ordainment ordanchite ordeal order orderable ordered orderedness orderer orderless orderliness orderly ordinable ordinal ordinally ordinance ordinand ordinant ordinar ordinarily ordinariness ordinarius ordinary ordinaryship ordinate ordinately ordination ordinative ordinatomaculate ordinator ordinee ordines ordnance ordonnance ordonnant ordosite ordu ordure ordurous ore oread orecchion orectic orective oreillet orellin oreman orenda orendite oreodont oreodontine oreodontoid oreophasine oreotragine oreweed orewood orexis orf orfgild organ organal organbird organdy organella organelle organer organette organic organical organically organicalness organicism organicismal organicist organicistic organicity organific organing organism organismal organismic organist organistic organistrum organistship organity organizability organizable organization organizational organizationally organizationist organizatory organize organized organizer organless organoantimony organoarsenic organobismuth organoboron organochordium organogel organogen organogenesis organogenetic organogenic organogenist organogeny organogold organographic organographical organographist organography organoid organoiron organolead organoleptic organolithium organologic organological organologist organology organomagnesium organomercury organometallic organon organonomic organonomy organonym organonymal organonymic organonymy organopathy organophil organophile organophilic organophone organophonic organophyly organoplastic organoscopy organosilicon organosilver organosodium organosol organotherapy organotin organotrophic organotropic organotropically organotropism organotropy organozinc organry organule organum organzine orgasm orgasmic orgastic orgeat orgia orgiac orgiacs orgiasm orgiast orgiastic orgiastical orgic orgue orguinette orgulous orgulously orgy orgyia oribi orichalceous orichalch orichalcum oriconic oricycle oriel oriency orient oriental orientalism orientalist orientality orientalization orientalize orientally orientate orientation orientative orientator orientite orientization orientize oriently orientness orifacial orifice orificial oriflamb oriflamme oriform origan origanized origin originable original originalist originality originally originalness originant originarily originary originate origination originative originatively originator originatress originist orignal orihon orihyperbola orillion orillon orinasal orinasality oriole orismologic orismological orismology orison orisphere oristic orle orlean orlet orleways orlewise orlo orlop ormer ormolu orna ornament ornamental ornamentalism ornamentalist ornamentality ornamentalize ornamentally ornamentary ornamentation ornamenter ornamentist ornate ornately ornateness ornation ornature orneriness ornery ornis orniscopic orniscopist orniscopy ornithic ornithichnite ornithine ornithischian ornithivorous ornithobiographical ornithobiography ornithocephalic ornithocephalous ornithocoprolite ornithocopros ornithodelph ornithodelphian ornithodelphic ornithodelphous ornithogeographic ornithogeographical ornithography ornithoid ornitholite ornitholitic ornithologic ornithological ornithologically ornithologist ornithology ornithomancy ornithomantia ornithomantic ornithomantist ornithomorph ornithomorphic ornithomyzous ornithon ornithophile ornithophilist ornithophilite ornithophilous ornithophily ornithopod ornithopter ornithorhynchous ornithosaur ornithosaurian ornithoscelidan ornithoscopic ornithoscopist ornithoscopy ornithosis ornithotomical ornithotomist ornithotomy ornithotrophy ornithuric ornithurous ornoite oroanal orobanchaceous orobancheous orobathymetric orocratic orodiagnosis orogen orogenesis orogenesy orogenetic orogenic orogeny orograph orographic orographical orographically orography oroheliograph orohydrographic orohydrographical orohydrography oroide orolingual orological orologist orology orometer orometric orometry oronasal oronoco oropharyngeal oropharynx orotherapy orotund orotundity orphan orphancy orphandom orphange orphanhood orphanism orphanize orphanry orphanship orpharion orpheon orpheonist orpheum orphrey orphreyed orpiment orpine orrery orrhoid orrhology orrhotherapy orris orrisroot orseille orseilline orsel orselle orseller orsellic orsellinate orsellinic ort ortalid ortalidian ortet orthal orthantimonic orthian orthic orthicon orthid orthite orthitic ortho orthoarsenite orthoaxis orthobenzoquinone orthobiosis orthoborate orthobrachycephalic orthocarbonic orthocarpous orthocenter orthocentric orthocephalic orthocephalous orthocephaly orthoceracone orthoceratite orthoceratitic orthoceratoid orthochlorite orthochromatic orthochromatize orthoclase orthoclasite orthoclastic orthocoumaric orthocresol orthocymene orthodiaene orthodiagonal orthodiagram orthodiagraph orthodiagraphic orthodiagraphy orthodiazin orthodiazine orthodolichocephalic orthodomatic orthodome orthodontia orthodontic orthodontics orthodontist orthodox orthodoxal orthodoxality orthodoxally orthodoxian orthodoxical orthodoxically orthodoxism orthodoxist orthodoxly orthodoxness orthodoxy orthodromic orthodromics orthodromy orthoepic orthoepical orthoepically orthoepist orthoepistic orthoepy orthoformic orthogamous orthogamy orthogenesis orthogenetic orthogenic orthognathic orthognathism orthognathous orthognathus orthognathy orthogneiss orthogonal orthogonality orthogonally orthogonial orthograde orthogranite orthograph orthographer orthographic orthographical orthographically orthographist orthographize orthography orthohydrogen orthologer orthologian orthological orthology orthometopic orthometric orthometry orthonitroaniline orthopath orthopathic orthopathically orthopathy orthopedia orthopedic orthopedical orthopedically orthopedics orthopedist orthopedy orthophenylene orthophonic orthophony orthophoria orthophoric orthophosphate orthophosphoric orthophyre orthophyric orthopinacoid orthopinacoidal orthoplastic orthoplasy orthoplumbate orthopnea orthopneic orthopod orthopraxis orthopraxy orthoprism orthopsychiatric orthopsychiatrical orthopsychiatrist orthopsychiatry orthopter orthopteral orthopteran orthopterist orthopteroid orthopterological orthopterologist orthopterology orthopteron orthopterous orthoptic orthopyramid orthopyroxene orthoquinone orthorhombic orthorrhaphous orthorrhaphy orthoscope orthoscopic orthose orthosemidin orthosemidine orthosilicate orthosilicic orthosis orthosite orthosomatic orthospermous orthostatic orthostichous orthostichy orthostyle orthosubstituted orthosymmetric orthosymmetrical orthosymmetrically orthosymmetry orthotactic orthotectic orthotic orthotolidin orthotolidine orthotoluic orthotoluidin orthotoluidine orthotomic orthotomous orthotone orthotonesis orthotonic orthotonus orthotropal orthotropic orthotropism orthotropous orthotropy orthotype orthotypous orthovanadate orthovanadic orthoveratraldehyde orthoveratric orthoxazin orthoxazine orthoxylene orthron ortiga ortive ortolan ortstein ortygan ortygine orvietan orvietite ory oryctics oryctognostic oryctognostical oryctognostically oryctognosy oryssid oryzenin oryzivorous os osamin osamine osazone oscella oscheal oscheitis oscheocarcinoma oscheocele oscheolith oscheoma oscheoncus oscheoplasty oscillance oscillancy oscillant oscillariaceous oscillate oscillating oscillation oscillative oscillatively oscillator oscillatoriaceous oscillatorian oscillatory oscillogram oscillograph oscillographic oscillography oscillometer oscillometric oscillometry oscilloscope oscin oscine oscinian oscinine oscitance oscitancy oscitant oscitantly oscitate oscitation oscnode osculable osculant oscular oscularity osculate osculation osculatory osculatrix oscule osculiferous osculum oscurrantist ose osela oshac oside osier osiered osierlike osiery osmate osmatic osmatism osmazomatic osmazomatous osmazome osmesis osmeterium osmetic osmic osmidrosis osmin osmina osmious osmiridium osmium osmodysphoria osmogene osmograph osmolagnia osmology osmometer osmometric osmometry osmondite osmophore osmoregulation osmoscope osmose osmosis osmotactic osmotaxis osmotherapy osmotic osmotically osmous osmund osmundaceous osmundine osoberry osone osophy osotriazine osotriazole osphradial osphradium osphresiolagnia osphresiologic osphresiologist osphresiology osphresiometer osphresiometry osphresiophilia osphresis osphretic osphyalgia osphyalgic osphyarthritis osphyitis osphyocele osphyomelitis osprey ossal ossarium ossature osse ossein osselet ossements osseoalbuminoid osseoaponeurotic osseocartilaginous osseofibrous osseomucoid osseous osseously ossicle ossicular ossiculate ossicule ossiculectomy ossiculotomy ossiculum ossiferous ossific ossification ossified ossifier ossifluence ossifluent ossiform ossifrage ossifrangent ossify ossivorous ossuarium ossuary ossypite ostalgia ostariophysan ostariophysial ostariophysous ostarthritis osteal ostealgia osteanabrosis osteanagenesis ostearthritis ostearthrotomy ostectomy osteectomy osteectopia osteectopy ostein osteitic osteitis ostemia ostempyesis ostensibility ostensible ostensibly ostension ostensive ostensively ostensorium ostensory ostent ostentate ostentation ostentatious ostentatiously ostentatiousness ostentive ostentous osteoaneurysm osteoarthritis osteoarthropathy osteoarthrotomy osteoblast osteoblastic osteoblastoma osteocachetic osteocarcinoma osteocartilaginous osteocele osteocephaloma osteochondritis osteochondrofibroma osteochondroma osteochondromatous osteochondropathy osteochondrophyte osteochondrosarcoma osteochondrous osteoclasia osteoclasis osteoclast osteoclastic osteoclasty osteocolla osteocomma osteocranium osteocystoma osteodentin osteodentinal osteodentine osteoderm osteodermal osteodermatous osteodermia osteodermis osteodiastasis osteodynia osteodystrophy osteoencephaloma osteoenchondroma osteoepiphysis osteofibroma osteofibrous osteogangrene osteogen osteogenesis osteogenetic osteogenic osteogenist osteogenous osteogeny osteoglossid osteoglossoid osteographer osteography osteohalisteresis osteoid osteolite osteologer osteologic osteological osteologically osteologist osteology osteolysis osteolytic osteoma osteomalacia osteomalacial osteomalacic osteomancy osteomanty osteomatoid osteomere osteometric osteometrical osteometry osteomyelitis osteoncus osteonecrosis osteoneuralgia osteopaedion osteopath osteopathic osteopathically osteopathist osteopathy osteopedion osteoperiosteal osteoperiostitis osteopetrosis osteophage osteophagia osteophlebitis osteophone osteophony osteophore osteophyma osteophyte osteophytic osteoplaque osteoplast osteoplastic osteoplasty osteoporosis osteoporotic osteorrhaphy osteosarcoma osteosarcomatous osteosclerosis osteoscope osteosis osteosteatoma osteostixis osteostomatous osteostomous osteostracan osteosuture osteosynovitis osteosynthesis osteothrombosis osteotome osteotomist osteotomy osteotribe osteotrite osteotrophic osteotrophy ostial ostiary ostiate ostiolar ostiolate ostiole ostitis ostium ostleress ostmark ostosis ostracean ostraceous ostracine ostracioid ostracism ostracizable ostracization ostracize ostracizer ostracod ostracode ostracoderm ostracodous ostracoid ostracon ostracophore ostracophorous ostracum ostraite ostreaceous ostreger ostreicultural ostreiculture ostreiculturist ostreiform ostreodynamometer ostreoid ostreophage ostreophagist ostreophagous ostrich ostrichlike otacoustic otacousticon otalgia otalgic otalgy otarian otariine otarine otarioid otary otate otectomy otelcosis othelcosis othematoma othemorrhea otheoscope other otherdom otherest othergates otherguess otherhow otherism otherist otherness othersome othertime otherwards otherwhence otherwhere otherwhereness otherwheres otherwhile otherwhiles otherwhither otherwise otherwiseness otherworld otherworldliness otherworldly otherworldness othmany othygroma otiant otiatric otiatrics otiatry otic oticodinia otidiform otidine otidium otiorhynchid otiose otiosely otioseness otiosity otitic otitis otkon otoantritis otoblennorrhea otocariasis otocephalic otocephaly otocerebritis otocleisis otoconial otoconite otoconium otocrane otocranial otocranic otocranium otocyst otocystic otodynia otodynic otoencephalitis otogenic otogenous otographical otography otohemineurasthenia otolaryngologic otolaryngologist otolaryngology otolite otolith otolitic otological otologist otology otomassage otomucormycosis otomyces otomycosis otonecrectomy otoneuralgia otoneurasthenia otopathic otopathy otopharyngeal otophone otopiesis otoplastic otoplasty otopolypus otopyorrhea otopyosis otorhinolaryngologic otorhinolaryngologist otorhinolaryngology otorrhagia otorrhea otorrhoea otosalpinx otosclerosis otoscope otoscopic otoscopy otosis otosphenal otosteal otosteon ototomy ottajanite ottar ottavarima otter otterer otterhound ottinger ottingkar otto ottrelife oturia ouabain ouabaio ouabe ouachitite ouakari ouananiche oubliette ouch oudenarde oudenodont ouenite ouf ough ought oughtness oughtnt ouistiti oukia oulap ounce ounds ouphe ouphish our ourie ouroub ours ourself ourselves oust ouster out outact outadmiral outage outambush outarde outargue outask outawe outbabble outback outbacker outbake outbalance outban outbanter outbar outbargain outbark outbawl outbeam outbear outbearing outbeg outbeggar outbelch outbellow outbent outbetter outbid outbidder outbirth outblacken outblaze outbleat outbleed outbless outbloom outblossom outblot outblow outblowing outblown outbluff outblunder outblush outbluster outboard outboast outbolting outbond outbook outborn outborough outbound outboundaries outbounds outbow outbowed outbowl outbox outbrag outbranch outbranching outbrave outbray outbrazen outbreak outbreaker outbreaking outbreath outbreathe outbreather outbred outbreed outbreeding outbribe outbridge outbring outbrother outbud outbuild outbuilding outbulge outbulk outbully outburn outburst outbustle outbuy outbuzz outby outcant outcaper outcarol outcarry outcase outcast outcaste outcasting outcastness outcavil outchamber outcharm outchase outchatter outcheat outchide outcity outclamor outclass outclerk outclimb outcome outcomer outcoming outcompass outcomplete outcompliment outcorner outcountry outcourt outcrawl outcricket outcrier outcrop outcropper outcross outcrossing outcrow outcrowd outcry outcull outcure outcurse outcurve outcut outdaciousness outdance outdare outdate outdated outdazzle outdevil outdispatch outdistance outdistrict outdo outdodge outdoer outdoor outdoorness outdoors outdoorsman outdraft outdragon outdraw outdream outdress outdrink outdrive outdure outdwell outdweller outdwelling outeat outecho outed outedge outen outer outerly outermost outerness outerwear outeye outeyed outfable outface outfall outfame outfangthief outfast outfawn outfeast outfeat outfeeding outfence outferret outfiction outfield outfielder outfieldsman outfight outfighter outfighting outfigure outfish outfit outfitter outflame outflank outflanker outflanking outflare outflash outflatter outfling outfloat outflourish outflow outflue outflung outflunky outflush outflux outfly outfold outfool outfoot outform outfort outfreeman outfront outfroth outfrown outgabble outgain outgallop outgamble outgame outgang outgarment outgarth outgas outgate outgauge outgaze outgeneral outgive outgiving outglad outglare outgleam outglitter outgloom outglow outgnaw outgo outgoer outgoing outgoingness outgone outgreen outgrin outground outgrow outgrowing outgrowth outguard outguess outgun outgush outhammer outhasten outhaul outhauler outhear outheart outhector outheel outher outhire outhiss outhit outhold outhorror outhouse outhousing outhowl outhue outhumor outhunt outhurl outhut outhymn outhyperbolize outimage outing outinvent outish outissue outjazz outjest outjet outjetting outjinx outjockey outjourney outjuggle outjump outjut outkeeper outkick outkill outking outkiss outkitchen outknave outknee outlabor outlaid outlance outland outlander outlandish outlandishlike outlandishly outlandishness outlash outlast outlaugh outlaunch outlaw outlawry outlay outlean outleap outlearn outlegend outlength outlengthen outler outlet outlie outlier outlighten outlimb outlimn outline outlinear outlined outlineless outliner outlinger outlip outlipped outlive outliver outlodging outlook outlooker outlord outlove outlung outluster outly outlying outmagic outmalaprop outman outmaneuver outmantle outmarch outmarriage outmarry outmaster outmatch outmate outmeasure outmerchant outmiracle outmode outmoded outmost outmount outmouth outmove outname outness outnight outnoise outnook outnumber outoffice outoven outpace outpage outpaint outparagon outparamour outparish outpart outpass outpassion outpath outpatient outpay outpayment outpeal outpeep outpeer outpension outpensioner outpeople outperform outpick outpicket outpipe outpitch outpity outplace outplan outplay outplayed outplease outplod outplot outpocketing outpoint outpoise outpoison outpoll outpomp outpop outpopulate outporch outport outporter outportion outpost outpouching outpour outpourer outpouring outpractice outpraise outpray outpreach outpreen outprice outprodigy outproduce outpromise outpry outpull outpupil outpurl outpurse outpush output outputter outquaff outquarters outqueen outquestion outquibble outquote outrace outrage outrageous outrageously outrageousness outrageproof outrager outraging outrail outrance outrange outrank outrant outrap outrate outraught outrave outray outre outreach outread outreason outreckon outredden outrede outreign outrelief outremer outreness outrhyme outrick outride outrider outriding outrig outrigger outriggered outriggerless outrigging outright outrightly outrightness outring outrival outroar outrogue outroll outromance outrooper outroot outrove outrow outroyal outrun outrunner outrush outsail outsaint outsally outsatisfy outsavor outsay outscent outscold outscore outscorn outscour outscouring outscream outsea outseam outsearch outsee outseek outsell outsentry outsert outservant outset outsetting outsettlement outsettler outshadow outshake outshame outshape outsharp outsharpen outsheathe outshift outshine outshiner outshoot outshot outshoulder outshout outshove outshow outshower outshriek outshrill outshut outside outsided outsidedness outsideness outsider outsift outsigh outsight outsin outsing outsit outsize outsized outskill outskip outskirmish outskirmisher outskirt outskirter outslander outslang outsleep outslide outslink outsmart outsmell outsmile outsnatch outsnore outsoar outsole outsoler outsonnet outsophisticate outsound outspan outsparkle outspeak outspeaker outspeech outspeed outspell outspend outspent outspill outspin outspirit outspit outsplendor outspoken outspokenly outspokenness outsport outspout outspread outspring outsprint outspue outspurn outspurt outstagger outstair outstand outstander outstanding outstandingly outstandingness outstare outstart outstarter outstartle outstate outstation outstatistic outstature outstay outsteal outsteam outstep outsting outstink outstood outstorm outstrain outstream outstreet outstretch outstretcher outstride outstrike outstrip outstrive outstroke outstrut outstudent outstudy outstunt outsubtle outsuck outsucken outsuffer outsuitor outsulk outsum outsuperstition outswagger outswarm outswear outsweep outsweeping outsweeten outswell outswift outswim outswindle outswing outswirl outtaken outtalent outtalk outtask outtaste outtear outtease outtell outthieve outthink outthreaten outthrob outthrough outthrow outthrust outthruster outthunder outthwack outtinkle outtire outtoil outtongue outtop outtower outtrade outtrail outtravel outtrick outtrot outtrump outturn outturned outtyrannize outusure outvalue outvanish outvaunt outvelvet outvenom outvictor outvie outvier outvigil outvillage outvillain outvociferate outvoice outvote outvoter outvoyage outwait outwake outwale outwalk outwall outwallop outwander outwar outwarble outward outwardly outwardmost outwardness outwards outwash outwaste outwatch outwater outwave outwealth outweapon outwear outweary outweave outweed outweep outweigh outweight outwell outwent outwhirl outwick outwile outwill outwind outwindow outwing outwish outwit outwith outwittal outwitter outwoe outwoman outwood outword outwore outwork outworker outworld outworn outworth outwrangle outwrench outwrest outwrestle outwriggle outwring outwrite outwrought outyard outyell outyelp outyield outzany ouzel ova oval ovalbumin ovalescent ovaliform ovalish ovalization ovalize ovally ovalness ovaloid ovalwise ovant ovarial ovarian ovarin ovarioabdominal ovariocele ovariocentesis ovariocyesis ovariodysneuria ovariohysterectomy ovariole ovariolumbar ovariorrhexis ovariosalpingectomy ovariosteresis ovariostomy ovariotomist ovariotomize ovariotomy ovariotubal ovarious ovaritis ovarium ovary ovate ovateconical ovated ovately ovation ovational ovationary ovatoacuminate ovatoconical ovatocordate ovatocylindraceous ovatodeltoid ovatoellipsoidal ovatoglobose ovatolanceolate ovatooblong ovatoorbicular ovatopyriform ovatoquadrangular ovatorotundate ovatoserrate ovatotriangular oven ovenbird ovenful ovenlike ovenly ovenman ovenpeel ovenstone ovenware ovenwise over overability overable overabound overabsorb overabstain overabstemious overabstemiousness overabundance overabundant overabundantly overabuse overaccentuate overaccumulate overaccumulation overaccuracy overaccurate overaccurately overact overaction overactive overactiveness overactivity overacute overaddiction overadvance overadvice overaffect overaffirmation overafflict overaffliction overage overageness overaggravate overaggravation overagitate overagonize overall overalled overalls overambitioned overambitious overambling overanalyze overangelic overannotate overanswer overanxiety overanxious overanxiously overappareled overappraisal overappraise overapprehended overapprehension overapprehensive overapt overarch overargue overarm overartificial overartificiality overassail overassert overassertion overassertive overassertively overassertiveness overassess overassessment overassumption overattached overattachment overattention overattentive overattentively overawe overawful overawn overawning overbake overbalance overballast overbalm overbanded overbandy overbank overbanked overbark overbarren overbarrenness overbase overbaseness overbashful overbashfully overbashfulness overbattle overbear overbearance overbearer overbearing overbearingly overbearingness overbeat overbeating overbeetling overbelief overbend overbepatched overberg overbet overbias overbid overbig overbigness overbillow overbit overbite overbitten overbitter overbitterly overbitterness overblack overblame overblaze overbleach overblessed overblessedness overblind overblindly overblithe overbloom overblouse overblow overblowing overblown overboard overboast overboastful overbodice overboding overbody overboil overbold overboldly overboldness overbook overbookish overbooming overborne overborrow overbought overbound overbounteous overbounteously overbounteousness overbow overbowed overbowl overbrace overbragging overbrained overbranch overbrave overbravely overbravery overbray overbreak overbreathe overbred overbreed overbribe overbridge overbright overbrightly overbrightness overbrilliancy overbrilliant overbrilliantly overbrim overbrimmingly overbroaden overbroil overbrood overbrow overbrown overbrowse overbrush overbrutal overbrutality overbrutalize overbrutally overbubbling overbuild overbuilt overbulk overbulky overbumptious overburden overburdeningly overburdensome overburn overburned overburningly overburnt overburst overburthen overbusily overbusiness overbusy overbuy overby overcall overcanny overcanopy overcap overcapable overcapably overcapacity overcape overcapitalization overcapitalize overcaptious overcaptiously overcaptiousness overcard overcare overcareful overcarefully overcareless overcarelessly overcarelessness overcaring overcarking overcarry overcast overcasting overcasual overcasually overcatch overcaution overcautious overcautiously overcautiousness overcentralization overcentralize overcertification overcertify overchafe overchannel overchant overcharge overchargement overcharger overcharitable overcharitably overcharity overchase overcheap overcheaply overcheapness overcheck overcherish overchidden overchief overchildish overchildishness overchill overchlorinate overchoke overchrome overchurch overcirculate overcircumspect overcircumspection overcivil overcivility overcivilization overcivilize overclaim overclamor overclasp overclean overcleanly overcleanness overcleave overclever overcleverness overclimb overcloak overclog overclose overclosely overcloseness overclothe overclothes overcloud overcloy overcluster overcoached overcoat overcoated overcoating overcoil overcold overcoldly overcollar overcolor overcomable overcome overcomer overcomingly overcommand overcommend overcommon overcommonly overcommonness overcompensate overcompensation overcompensatory overcompetition overcompetitive overcomplacency overcomplacent overcomplacently overcomplete overcomplex overcomplexity overcompliant overcompound overconcentrate overconcentration overconcern overconcerned overcondensation overcondense overconfidence overconfident overconfidently overconfute overconquer overconscientious overconscious overconsciously overconsciousness overconservatism overconservative overconservatively overconsiderate overconsiderately overconsideration overconsume overconsumption overcontented overcontentedly overcontentment overcontract overcontraction overcontribute overcontribution overcook overcool overcoolly overcopious overcopiously overcopiousness overcorned overcorrect overcorrection overcorrupt overcorruption overcorruptly overcostly overcount overcourteous overcourtesy overcover overcovetous overcovetousness overcow overcoy overcoyness overcram overcredit overcredulity overcredulous overcredulously overcreed overcreep overcritical overcritically overcriticalness overcriticism overcriticize overcrop overcross overcrow overcrowd overcrowded overcrowdedly overcrowdedness overcrown overcrust overcry overcull overcultivate overcultivation overculture overcultured overcumber overcunning overcunningly overcunningness overcup overcured overcurious overcuriously overcuriousness overcurl overcurrency overcurrent overcurtain overcustom overcut overcutter overcutting overdaintily overdaintiness overdainty overdamn overdance overdangle overdare overdaringly overdarken overdash overdazed overdazzle overdeal overdear overdearly overdearness overdeck overdecorate overdecoration overdecorative overdeeming overdeep overdeepen overdeeply overdeliberate overdeliberation overdelicacy overdelicate overdelicately overdelicious overdeliciously overdelighted overdelightedly overdemand overdemocracy overdepress overdepressive overdescant overdesire overdesirous overdesirousness overdestructive overdestructively overdestructiveness overdetermination overdetermined overdevelop overdevelopment overdevoted overdevotedly overdevotion overdiffuse overdiffusely overdiffuseness overdigest overdignified overdignifiedly overdignifiedness overdignify overdignity overdiligence overdiligent overdiligently overdilute overdilution overdischarge overdiscipline overdiscount overdiscourage overdiscouragement overdistance overdistant overdistantly overdistantness overdistempered overdistention overdiverse overdiversely overdiversification overdiversify overdiversity overdo overdoctrinize overdoer overdogmatic overdogmatically overdogmatism overdome overdominate overdone overdoor overdosage overdose overdoubt overdoze overdraft overdrain overdrainage overdramatic overdramatically overdrape overdrapery overdraw overdrawer overdream overdrench overdress overdrifted overdrink overdrip overdrive overdriven overdroop overdrowsed overdry overdubbed overdue overdunged overdure overdust overdye overeager overeagerly overeagerness overearnest overearnestly overearnestness overeasily overeasiness overeasy overeat overeaten overedge overedit overeducate overeducated overeducation overeducative overeffort overegg overelaborate overelaborately overelaboration overelate overelegance overelegancy overelegant overelegantly overelliptical overembellish overembellishment overembroider overemotional overemotionality overemotionalize overemphasis overemphasize overemphatic overemphatically overemphaticness overempired overemptiness overempty overenter overenthusiasm overenthusiastic overentreat overentry overequal overestimate overestimation overexcelling overexcitability overexcitable overexcitably overexcite overexcitement overexercise overexert overexerted overexertedly overexertedness overexertion overexpand overexpansion overexpansive overexpect overexpectant overexpectantly overexpenditure overexpert overexplain overexplanation overexpose overexposure overexpress overexquisite overexquisitely overextend overextension overextensive overextreme overexuberant overeye overeyebrowed overface overfacile overfacilely overfacility overfactious overfactiousness overfag overfagged overfaint overfaith overfaithful overfaithfully overfall overfamed overfamiliar overfamiliarity overfamiliarly overfamous overfanciful overfancy overfar overfast overfastidious overfastidiously overfastidiousness overfasting overfat overfatigue overfatten overfavor overfavorable overfavorably overfear overfearful overfearfully overfearfulness overfeast overfeatured overfed overfee overfeed overfeel overfellowlike overfellowly overfelon overfeminine overfeminize overfertile overfertility overfestoon overfew overfierce overfierceness overfile overfill overfilm overfine overfinished overfish overfit overfix overflatten overfleece overfleshed overflexion overfling overfloat overflog overflood overflorid overfloridness overflourish overflow overflowable overflower overflowing overflowingly overflowingness overflown overfluency overfluent overfluently overflush overflutter overfly overfold overfond overfondle overfondly overfondness overfoolish overfoolishly overfoolishness overfoot overforce overforged overformed overforward overforwardly overforwardness overfought overfoul overfoully overfrail overfrailty overfranchised overfrank overfrankly overfrankness overfraught overfree overfreedom overfreely overfreight overfrequency overfrequent overfrequently overfret overfrieze overfrighted overfrighten overfroth overfrown overfrozen overfruited overfruitful overfull overfullness overfunctioning overfurnish overgaiter overgalled overgamble overgang overgarment overgarrison overgaze overgeneral overgeneralize overgenerally overgenerosity overgenerous overgenerously overgenial overgeniality overgentle overgently overget overgifted overgild overgilted overgird overgirded overgirdle overglad overgladly overglance overglass overglaze overglide overglint overgloom overgloominess overgloomy overglorious overgloss overglut overgo overgoad overgod overgodliness overgodly overgood overgorge overgovern overgovernment overgown overgrace overgracious overgrade overgrain overgrainer overgrasping overgrateful overgratefully overgratification overgratify overgratitude overgraze overgreasiness overgreasy overgreat overgreatly overgreatness overgreed overgreedily overgreediness overgreedy overgrieve overgrievous overgrind overgross overgrossly overgrossness overground overgrow overgrown overgrowth overguilty overgun overhair overhalf overhand overhanded overhandicap overhandle overhang overhappy overharass overhard overharden overhardness overhardy overharsh overharshly overharshness overhaste overhasten overhastily overhastiness overhasty overhate overhatted overhaughty overhaul overhauler overhead overheadiness overheadman overheady overheap overhear overhearer overheartily overhearty overheat overheatedly overheave overheaviness overheavy overheight overheighten overheinous overheld overhelp overhelpful overhigh overhighly overhill overhit overholiness overhollow overholy overhomeliness overhomely overhonest overhonestly overhonesty overhonor overhorse overhot overhotly overhour overhouse overhover overhuge overhuman overhumanity overhumanize overhung overhunt overhurl overhurriedly overhurry overhusk overhysterical overidealism overidealistic overidle overidly overillustrate overillustration overimaginative overimaginativeness overimitate overimitation overimitative overimitatively overimport overimportation overimpress overimpressible overinclinable overinclination overinclined overincrust overincurious overindividualism overindividualistic overindulge overindulgence overindulgent overindulgently overindustrialization overindustrialize overinflate overinflation overinflative overinfluence overinfluential overinform overink overinsist overinsistence overinsistent overinsistently overinsolence overinsolent overinsolently overinstruct overinstruction overinsurance overinsure overintellectual overintellectuality overintense overintensely overintensification overintensity overinterest overinterested overinterestedness overinventoried overinvest overinvestment overiodize overirrigate overirrigation overissue overitching overjacket overjade overjaded overjawed overjealous overjealously overjealousness overjob overjocular overjoy overjoyful overjoyfully overjoyous overjudge overjudging overjudgment overjudicious overjump overjust overjutting overkeen overkeenness overkeep overkick overkind overkindly overkindness overking overknavery overknee overknow overknowing overlabor overlace overlactation overlade overlaid overlain overland overlander overlanguaged overlap overlard overlarge overlargely overlargeness overlascivious overlast overlate overlaudation overlaudatory overlaugh overlaunch overlave overlavish overlavishly overlax overlaxative overlaxly overlaxness overlay overlayer overlead overleaf overlean overleap overlearn overlearned overlearnedly overlearnedness overleather overleave overleaven overleer overleg overlegislation overleisured overlength overlettered overlewd overlewdly overlewdness overliberal overliberality overliberally overlicentious overlick overlie overlier overlift overlight overlighted overlightheaded overlightly overlightsome overliking overline overling overlinger overlinked overlip overlipping overlisted overlisten overliterary overlittle overlive overliveliness overlively overliver overload overloath overlock overlocker overlofty overlogical overlogically overlong overlook overlooker overloose overlord overlordship overloud overloup overlove overlover overlow overlowness overloyal overloyally overloyalty overlubricatio overluscious overlush overlustiness overlusty overluxuriance overluxuriant overluxurious overly overlying overmagnify overmagnitude overmajority overmalapert overman overmantel overmantle overmany overmarch overmark overmarking overmarl overmask overmast overmaster overmasterful overmasterfully overmasterfulness overmastering overmasteringly overmatch overmatter overmature overmaturity overmean overmeanly overmeanness overmeasure overmeddle overmeek overmeekly overmeekness overmellow overmellowness overmelodied overmelt overmerciful overmercifulness overmerit overmerrily overmerry overmettled overmickle overmighty overmild overmill overminute overminutely overminuteness overmix overmoccasin overmodest overmodestly overmodesty overmodulation overmoist overmoisten overmoisture overmortgage overmoss overmost overmotor overmount overmounts overmourn overmournful overmournfully overmuch overmuchness overmultiplication overmultiply overmultitude overname overnarrow overnarrowly overnationalization overnear overneat overneatness overneglect overnegligence overnegligent overnervous overnervously overnervousness overnet overnew overnice overnicely overniceness overnicety overnigh overnight overnimble overnipping overnoise overnotable overnourish overnoveled overnumber overnumerous overnumerousness overnurse overobedience overobedient overobediently overobese overobjectify overoblige overobsequious overobsequiously overobsequiousness overoffend overoffensive overofficered overofficious overorder overornamented overpained overpainful overpainfully overpainfulness overpaint overpamper overpart overparted overpartial overpartiality overpartially overparticular overparticularly overpass overpassionate overpassionately overpassionateness overpast overpatient overpatriotic overpay overpayment overpeer overpending overpensive overpensiveness overpeople overpepper overperemptory overpersuade overpersuasion overpert overpessimism overpessimistic overpet overphysic overpick overpicture overpinching overpitch overpitched overpiteous overplace overplaced overplacement overplain overplant overplausible overplay overplease overplenitude overplenteous overplenteously overplentiful overplenty overplot overplow overplumb overplume overplump overplumpness overplus overply overpointed overpoise overpole overpolemical overpolish overpolitic overponderous overpopular overpopularity overpopularly overpopulate overpopulation overpopulous overpopulousness overpositive overpossess overpot overpotent overpotential overpour overpower overpowerful overpowering overpoweringly overpoweringness overpraise overpray overpreach overprecise overpreciseness overpreface overpregnant overpreoccupation overpreoccupy overpress overpressure overpresumption overpresumptuous overprice overprick overprint overprize overprizer overprocrastination overproduce overproduction overproductive overproficient overprolific overprolix overprominence overprominent overprominently overpromise overprompt overpromptly overpromptness overprone overproneness overpronounced overproof overproportion overproportionate overproportionated overproportionately overproportioned overprosperity overprosperous overprotect overprotract overprotraction overproud overproudly overprove overprovender overprovide overprovident overprovidently overprovision overprovocation overprovoke overprune overpublic overpublicity overpuff overpuissant overpunish overpunishment overpurchase overquantity overquarter overquell overquick overquickly overquiet overquietly overquietness overrace overrack overrake overrange overrank overrankness overrapture overrapturize overrash overrashly overrashness overrate overrational overrationalize overravish overreach overreacher overreaching overreachingly overreachingness overread overreader overreadily overreadiness overready overrealism overrealistic overreckon overrecord overrefine overrefined overrefinement overreflection overreflective overregister overregistration overregular overregularity overregularly overregulate overregulation overrelax overreliance overreliant overreligion overreligious overremiss overremissly overremissness overrennet overrent overreplete overrepletion overrepresent overrepresentation overrepresentative overreserved overresolute overresolutely overrestore overrestrain overretention overreward overrich overriches overrichness override overrife overrigged overright overrighteous overrighteously overrighteousness overrigid overrigidity overrigidly overrigorous overrigorously overrim overriot overripe overripely overripen overripeness overrise overroast overroll overroof overrooted overrough overroughly overroughness overroyal overrude overrudely overrudeness overruff overrule overruler overruling overrulingly overrun overrunner overrunning overrunningly overrush overrusset overrust oversad oversadly oversadness oversaid oversail oversale oversaliva oversalt oversalty oversand oversanded oversanguine oversanguinely oversapless oversated oversatisfy oversaturate oversaturation oversauce oversauciness oversaucy oversave overscare overscatter overscented oversceptical overscepticism overscore overscour overscratch overscrawl overscream overscribble overscrub overscruple overscrupulosity overscrupulous overscrupulously overscrupulousness overscurf overscutched oversea overseal overseam overseamer oversearch overseas overseason overseasoned overseated oversecure oversecurely oversecurity oversee overseed overseen overseer overseerism overseership overseethe oversell oversend oversensible oversensibly oversensitive oversensitively oversensitiveness oversententious oversentimental oversentimentalism oversentimentalize oversentimentally overserious overseriously overseriousness overservice overservile overservility overset oversetter oversettle oversettled oversevere overseverely overseverity oversew overshade overshadow overshadower overshadowing overshadowingly overshadowment overshake oversharp oversharpness overshave oversheet overshelving overshepherd overshine overshirt overshoe overshoot overshort overshorten overshortly overshot overshoulder overshowered overshrink overshroud oversick overside oversight oversilence oversilent oversilver oversimple oversimplicity oversimplification oversimplify oversimply oversize oversized overskim overskip overskipper overskirt overslack overslander overslaugh overslavish overslavishly oversleep oversleeve overslide overslight overslip overslope overslow overslowly overslowness overslur oversmall oversman oversmite oversmitten oversmoke oversmooth oversmoothly oversmoothness oversnow oversoak oversoar oversock oversoft oversoftly oversoftness oversold oversolemn oversolemnity oversolemnly oversolicitous oversolicitously oversolicitousness oversoon oversoothing oversophisticated oversophistication oversorrow oversorrowed oversot oversoul oversound oversour oversourly oversourness oversow overspacious overspaciousness overspan overspangled oversparing oversparingly oversparingness oversparred overspatter overspeak overspecialization overspecialize overspeculate overspeculation overspeculative overspeech overspeed overspeedily overspeedy overspend overspill overspin oversplash overspread overspring oversprinkle oversprung overspun oversqueak oversqueamish oversqueamishness overstaff overstaid overstain overstale overstalled overstand overstaring overstate overstately overstatement overstay overstayal oversteadfast oversteadfastness oversteady overstep overstiff overstiffness overstifle overstimulate overstimulation overstimulative overstir overstitch overstock overstoop overstoping overstore overstory overstout overstoutly overstowage overstowed overstrain overstrait overstraiten overstraitly overstraitness overstream overstrength overstress overstretch overstrew overstrict overstrictly overstrictness overstride overstrident overstridently overstrike overstring overstriving overstrong overstrongly overstrung overstud overstudied overstudious overstudiously overstudiousness overstudy overstuff oversublime oversubscribe oversubscriber oversubscription oversubtile oversubtle oversubtlety oversubtly oversufficiency oversufficient oversufficiently oversuperstitious oversupply oversure oversurety oversurge oversurviving oversusceptibility oversusceptible oversuspicious oversuspiciously overswarm overswarth oversway oversweated oversweep oversweet oversweeten oversweetly oversweetness overswell overswift overswim overswimmer overswing overswinging overswirling oversystematic oversystematically oversystematize overt overtakable overtake overtaker overtalk overtalkative overtalkativeness overtalker overtame overtamely overtameness overtapped overtare overtariff overtarry overtart overtask overtax overtaxation overteach overtechnical overtechnicality overtedious overtediously overteem overtell overtempt overtenacious overtender overtenderly overtenderness overtense overtensely overtenseness overtension overterrible overtest overthick overthin overthink overthought overthoughtful overthriftily overthriftiness overthrifty overthrong overthrow overthrowable overthrowal overthrower overthrust overthwart overthwartly overthwartness overthwartways overthwartwise overtide overtight overtightly overtill overtimbered overtime overtimer overtimorous overtimorously overtimorousness overtinseled overtint overtip overtipple overtire overtiredness overtitle overtly overtness overtoe overtoil overtoise overtone overtongued overtop overtopple overtorture overtower overtrace overtrack overtrade overtrader overtrailed overtrain overtrample overtravel overtread overtreatment overtrick overtrim overtrouble overtrue overtrump overtrust overtrustful overtruthful overtruthfully overtumble overture overturn overturnable overturner overtutor overtwine overtwist overtype overuberous overunionized overunsuitable overurbanization overurge overuse overusual overusually overvaliant overvaluable overvaluation overvalue overvariety overvault overvehemence overvehement overveil overventilate overventilation overventuresome overventurous overview overvoltage overvote overwade overwages overwake overwalk overwander overward overwash overwasted overwatch overwatcher overwater overwave overway overwealth overwealthy overweaponed overwear overweary overweather overweave overweb overween overweener overweening overweeningly overweeningness overweep overweigh overweight overweightage overwell overwelt overwet overwetness overwheel overwhelm overwhelmer overwhelming overwhelmingly overwhelmingness overwhipped overwhirl overwhisper overwide overwild overwilily overwilling overwillingly overwily overwin overwind overwing overwinter overwiped overwisdom overwise overwisely overwithered overwoman overwomanize overwomanly overwood overwooded overwoody overword overwork overworld overworn overworry overworship overwound overwove overwoven overwrap overwrest overwrested overwrestle overwrite overwroth overwrought overyear overyoung overyouthful overzeal overzealous overzealously overzealousness ovest ovey ovibovine ovicapsular ovicapsule ovicell ovicellular ovicidal ovicide ovicular oviculated oviculum ovicyst ovicystic oviducal oviduct oviductal oviferous ovification oviform ovigenesis ovigenetic ovigenic ovigenous ovigerm ovigerous ovile ovine ovinia ovipara oviparal oviparity oviparous oviparously oviparousness oviposit oviposition ovipositor ovisac oviscapt ovism ovispermary ovispermiduct ovist ovistic ovivorous ovocyte ovoelliptic ovoflavin ovogenesis ovogenetic ovogenous ovogonium ovoid ovoidal ovolemma ovolo ovological ovologist ovology ovolytic ovomucoid ovoplasm ovoplasmic ovopyriform ovorhomboid ovorhomboidal ovotesticular ovotestis ovovitellin ovoviviparism ovoviviparity ovoviviparous ovoviviparously ovoviviparousness ovular ovularian ovulary ovulate ovulation ovule ovuliferous ovuligerous ovulist ovum ow owd owe owelty ower owerance owerby owercome owergang owerloup owertaen owerword owght owing owk owl owldom owler owlery owlet owlhead owling owlish owlishly owlishness owlism owllight owllike owly own owner ownerless ownership ownhood ownness ownself ownwayish owregane owrehip owrelay owse owsen owser owtchah owyheeite ox oxacid oxadiazole oxalacetic oxalaldehyde oxalamid oxalamide oxalan oxalate oxaldehyde oxalemia oxalic oxalidaceous oxalite oxalodiacetic oxalonitril oxalonitrile oxaluramid oxaluramide oxalurate oxaluria oxaluric oxalyl oxalylurea oxamate oxamethane oxamic oxamid oxamide oxamidine oxammite oxan oxanate oxane oxanic oxanilate oxanilic oxanilide oxazine oxazole oxbane oxberry oxbird oxbiter oxblood oxbow oxboy oxbrake oxcart oxcheek oxdiacetic oxdiazole oxea oxeate oxen oxeote oxer oxetone oxeye oxfly oxgang oxgoad oxharrow oxhead oxheal oxheart oxhide oxhoft oxhorn oxhouse oxhuvud oxidability oxidable oxidant oxidase oxidate oxidation oxidational oxidative oxidator oxide oxidic oxidimetric oxidimetry oxidizability oxidizable oxidization oxidize oxidizement oxidizer oxidizing oxidoreductase oxidoreduction oxidulated oximate oximation oxime oxland oxlike oxlip oxman oxmanship oxoindoline oxonic oxonium oxozone oxozonide oxpecker oxphony oxreim oxshoe oxskin oxtail oxter oxtongue oxwort oxy oxyacanthine oxyacanthous oxyacetylene oxyacid oxyaldehyde oxyamine oxyanthracene oxyanthraquinone oxyaphia oxyaster oxybaphon oxybenzaldehyde oxybenzene oxybenzoic oxybenzyl oxyberberine oxyblepsia oxybromide oxybutyria oxybutyric oxycalcium oxycalorimeter oxycamphor oxycaproic oxycarbonate oxycellulose oxycephalic oxycephalism oxycephalous oxycephaly oxychlorate oxychloric oxychloride oxycholesterol oxychromatic oxychromatin oxychromatinic oxycinnamic oxycobaltammine oxycopaivic oxycoumarin oxycrate oxycyanide oxydactyl oxydiact oxyesthesia oxyether oxyethyl oxyfatty oxyfluoride oxygas oxygen oxygenant oxygenate oxygenation oxygenator oxygenerator oxygenic oxygenicity oxygenium oxygenizable oxygenize oxygenizement oxygenizer oxygenous oxygeusia oxygnathous oxyhalide oxyhaloid oxyhematin oxyhemocyanin oxyhemoglobin oxyhexactine oxyhexaster oxyhydrate oxyhydric oxyhydrogen oxyiodide oxyketone oxyl oxyluciferin oxyluminescence oxyluminescent oxymandelic oxymel oxymethylene oxymoron oxymuriate oxymuriatic oxynaphthoic oxynaphtoquinone oxynarcotine oxyneurin oxyneurine oxynitrate oxyntic oxyophitic oxyopia oxyosphresia oxypetalous oxyphenol oxyphenyl oxyphile oxyphilic oxyphilous oxyphonia oxyphosphate oxyphthalic oxyphyllous oxyphyte oxypicric oxyproline oxypropionic oxypurine oxypycnos oxyquinaseptol oxyquinoline oxyquinone oxyrhine oxyrhinous oxyrhynch oxyrhynchous oxyrhynchus oxyrrhynchid oxysalicylic oxysalt oxystearic oxystomatous oxystome oxysulphate oxysulphide oxyterpene oxytocia oxytocic oxytocin oxytocous oxytoluene oxytoluic oxytone oxytonesis oxytonical oxytonize oxytylotate oxytylote oxyuriasis oxyuricide oxyurous oxywelding oyapock oyer oyster oysterage oysterbird oystered oysterer oysterfish oystergreen oysterhood oysterhouse oystering oysterish oysterishness oysterlike oysterling oysterman oysterous oysterroot oysterseed oystershell oysterwife oysterwoman ozarkite ozena ozobrome ozocerite ozokerit ozokerite ozonate ozonation ozonator ozone ozoned ozonic ozonide ozoniferous ozonification ozonify ozonization ozonize ozonizer ozonometer ozonometry ozonoscope ozonoscopic ozonous ozophen ozophene ozostomia ozotype p pa paal paar paauw pabble pablo pabouch pabular pabulary pabulation pabulatory pabulous pabulum pac paca pacable pacate pacation pacative pacay pacaya pace paceboard paced pacemaker pacemaking pacer pachak pachisi pachnolite pachometer pachyacria pachyaemia pachyblepharon pachycarpous pachycephal pachycephalia pachycephalic pachycephalous pachycephaly pachychilia pachycholia pachychymia pachycladous pachydactyl pachydactylous pachydactyly pachyderm pachyderma pachydermal pachydermatocele pachydermatoid pachydermatosis pachydermatous pachydermatously pachydermia pachydermial pachydermic pachydermoid pachydermous pachyemia pachyglossal pachyglossate pachyglossia pachyglossous pachyhaemia pachyhaemic pachyhaemous pachyhematous pachyhemia pachyhymenia pachyhymenic pachylosis pachymenia pachymenic pachymeningitic pachymeningitis pachymeninx pachymeter pachynathous pachynema pachynsis pachyntic pachyodont pachyotia pachyotous pachyperitonitis pachyphyllous pachypleuritic pachypod pachypodous pachypterous pachyrhynchous pachysalpingitis pachysaurian pachysomia pachysomous pachystichous pachytene pachytrichous pachyvaginitis pacifiable pacific pacifical pacifically pacificate pacification pacificator pacificatory pacificism pacificist pacificity pacifier pacifism pacifist pacifistic pacifistically pacify pacifyingly pack packable package packbuilder packcloth packer packery packet packhouse packless packly packmaker packmaking packman packmanship packness packsack packsaddle packstaff packthread packwall packwaller packware packway paco pacouryuva pact paction pactional pactionally pad padcloth padder padding paddle paddlecock paddled paddlefish paddlelike paddler paddlewood paddling paddock paddockride paddockstone paddockstool paddy paddybird paddymelon paddywatch paddywhack padella padfoot padge padishah padle padlike padlock padmasana padmelon padnag padpiece padre padroadist padroado padronism padstone padtree paduasoy paean paeanism paeanize paedarchy paedatrophia paedatrophy paediatry paedogenesis paedogenetic paedometer paedometrical paedomorphic paedomorphism paedonymic paedonymy paedopsychologist paedotribe paedotrophic paedotrophist paedotrophy paegel paegle paenula paeon paeonic paetrick paga pagan pagandom paganic paganical paganically paganish paganishly paganism paganist paganistic paganity paganization paganize paganizer paganly paganry pagatpat page pageant pageanted pageanteer pageantic pageantry pagedom pageful pagehood pageless pagelike pager pageship pagina paginal paginary paginate pagination pagiopod pagoda pagodalike pagodite pagoscope pagrus pagurian pagurid pagurine paguroid pagus pah paha pahi pahlavi pahmi paho pahoehoe pahutan paideutic paideutics paidological paidologist paidology paidonosology paigle paik pail pailful paillasse paillette pailletted pailou paimaneh pain pained painful painfully painfulness paining painingly painkiller painless painlessly painlessness painproof painstaker painstaking painstakingly painstakingness painsworthy paint paintability paintable paintableness paintably paintbox paintbrush painted paintedness painter painterish painterlike painterly paintership paintiness painting paintingness paintless paintpot paintproof paintress paintrix paintroot painty paip pair paired pairedness pairer pairment pairwise pais paisa paisanite paiwari pajahuello pajama pajamaed pajock pakchoi pakeha paktong pal palace palaced palacelike palaceous palaceward palacewards paladin palaeanthropic palaeechinoid palaeechinoidean palaeentomology palaeethnologic palaeethnological palaeethnologist palaeethnology palaeichthyan palaeichthyic palaemonid palaemonoid palaeoalchemical palaeoanthropic palaeoanthropography palaeoanthropology palaeoatavism palaeoatavistic palaeobiogeography palaeobiologist palaeobiology palaeobotanic palaeobotanical palaeobotanically palaeobotanist palaeobotany palaeoceanography palaeochorology palaeoclimatic palaeoclimatology palaeocosmic palaeocosmology palaeocrystal palaeocrystallic palaeocrystalline palaeocrystic palaeocyclic palaeodendrologic palaeodendrological palaeodendrologically palaeodendrologist palaeodendrology palaeodictyopteran palaeodictyopteron palaeodictyopterous palaeoencephalon palaeoeremology palaeoethnic palaeoethnologic palaeoethnological palaeoethnologist palaeoethnology palaeofauna palaeogene palaeogenesis palaeogenetic palaeogeographic palaeogeography palaeoglaciology palaeoglyph palaeognathic palaeognathous palaeograph palaeographer palaeographic palaeographical palaeographically palaeographist palaeography palaeoherpetologist palaeoherpetology palaeohistology palaeohydrography palaeolatry palaeolimnology palaeolith palaeolithic palaeolithical palaeolithist palaeolithoid palaeolithy palaeological palaeologist palaeology palaeometallic palaeometeorological palaeometeorology palaeonemertean palaeonemertine palaeoniscid palaeoniscoid palaeontographic palaeontographical palaeontography palaeopathology palaeopedology palaeophile palaeophilist palaeophysiography palaeophysiology palaeophytic palaeophytological palaeophytologist palaeophytology palaeoplain palaeopotamology palaeopsychic palaeopsychological palaeopsychology palaeoptychology palaeornithine palaeornithological palaeornithology palaeosaur palaeosophy palaeostracan palaeostriatal palaeostriatum palaeostylic palaeostyly palaeotechnic palaeothalamus palaeothere palaeotherian palaeotheriodont palaeotherioid palaeotheroid palaeotype palaeotypic palaeotypical palaeotypically palaeotypographical palaeotypographist palaeotypography palaeovolcanic palaeozoological palaeozoologist palaeozoology palaestra palaestral palaestrian palaestric palaestrics palaetiological palaetiologist palaetiology palafitte palagonite palagonitic palaiotype palaite palama palamate palame palamedean palampore palander palanka palankeen palanquin palapalai palar palas palatability palatable palatableness palatably palatal palatalism palatality palatalization palatalize palate palated palateful palatefulness palateless palatelike palatial palatially palatialness palatian palatic palatinal palatinate palatine palatineship palatinite palation palatist palatitis palative palatization palatize palatoalveolar palatodental palatoglossal palatoglossus palatognathous palatogram palatograph palatography palatomaxillary palatometer palatonasal palatopharyngeal palatopharyngeus palatoplasty palatoplegia palatopterygoid palatoquadrate palatorrhaphy palatoschisis palaver palaverer palaverist palaverment palaverous palay palazzi palberry palch pale palea paleaceous paleanthropic paleate palebelly palebuck palechinoid paled paledness paleencephalon paleentomology paleethnographer paleethnologic paleethnological paleethnologist paleethnology paleface palehearted paleichthyologic paleichthyologist paleichthyology paleiform palely paleness paleoalchemical paleoandesite paleoanthropic paleoanthropography paleoanthropological paleoanthropologist paleoanthropology paleoatavism paleoatavistic paleobiogeography paleobiologist paleobiology paleobotanic paleobotanical paleobotanically paleobotanist paleobotany paleoceanography paleochorology paleoclimatic paleoclimatologist paleoclimatology paleocosmic paleocosmology paleocrystal paleocrystallic paleocrystalline paleocrystic paleocyclic paleodendrologic paleodendrological paleodendrologically paleodendrologist paleodendrology paleoecologist paleoecology paleoencephalon paleoeremology paleoethnic paleoethnography paleoethnologic paleoethnological paleoethnologist paleoethnology paleofauna paleogenesis paleogenetic paleogeographic paleogeography paleoglaciology paleoglyph paleograph paleographer paleographic paleographical paleographically paleographist paleography paleoherpetologist paleoherpetology paleohistology paleohydrography paleoichthyology paleokinetic paleola paleolate paleolatry paleolimnology paleolith paleolithic paleolithical paleolithist paleolithoid paleolithy paleological paleologist paleology paleomammalogy paleometallic paleometeorological paleometeorology paleontographic paleontographical paleontography paleontologic paleontological paleontologically paleontologist paleontology paleopathology paleopedology paleophysiography paleophysiology paleophytic paleophytological paleophytologist paleophytology paleopicrite paleoplain paleopotamoloy paleopsychic paleopsychological paleopsychology paleornithological paleornithology paleostriatal paleostriatum paleostylic paleostyly paleotechnic paleothalamus paleothermal paleothermic paleovolcanic paleoytterbium paleozoological paleozoologist paleozoology paler palestra palestral palestrian palestric palet paletiology paletot palette paletz palewise palfrey palfreyed palgat pali palification paliform paligorskite palikar palikarism palikinesia palila palilalia palillogia palilogetic palilogy palimbacchic palimbacchius palimpsest palimpsestic palinal palindrome palindromic palindromical palindromically palindromist paling palingenesia palingenesian palingenesis palingenesist palingenesy palingenetic palingenetically palingenic palingenist palingeny palinode palinodial palinodic palinodist palinody palinurid palinuroid paliphrasia palirrhea palisade palisading palisado palisander palisfy palish palistrophia palkee pall palla palladammine palladia palladic palladiferous palladinize palladion palladious palladium palladiumize palladize palladodiammine palladosammine palladous pallae pallah pallall pallanesthesia pallasite pallbearer palled pallescence pallescent pallesthesia pallet palleting palletize pallette pallholder palli pallial palliard palliasse palliata palliate palliation palliative palliatively palliator palliatory pallid pallidiflorous pallidipalpate palliditarsate pallidity pallidiventrate pallidly pallidness palliness palliobranchiate palliocardiac pallioessexite pallion palliopedal palliostratus pallium pallograph pallographic pallometric pallone pallor pallwise pally palm palma palmaceous palmad palmanesthesia palmar palmarian palmary palmate palmated palmately palmatifid palmatiform palmatilobate palmatilobed palmation palmatiparted palmatipartite palmatisect palmatisected palmature palmcrist palmed palmellaceous palmelloid palmer palmerite palmery palmesthesia palmette palmetto palmetum palmful palmicolous palmiferous palmification palmiform palmigrade palmilobate palmilobated palmilobed palminervate palminerved palmiped palmipes palmist palmister palmistry palmitate palmite palmitic palmitin palmitinic palmito palmitoleic palmitone palmiveined palmivorous palmlike palmo palmodic palmoscopy palmospasmus palmula palmus palmwise palmwood palmy palmyra palolo palombino palometa palomino palosapis palouser paloverde palp palpability palpable palpableness palpably palpacle palpal palpate palpation palpatory palpebra palpebral palpebrate palpebration palpebritis palped palpi palpicorn palpifer palpiferous palpiform palpiger palpigerous palpitant palpitate palpitatingly palpitation palpless palpocil palpon palpulus palpus palsgrave palsgravine palsied palsification palstave palster palsy palsylike palsywort palt palter palterer palterly paltrily paltriness paltry paludal paludament paludamentum paludial paludian paludic paludicole paludicoline paludicolous paludiferous paludinal paludine paludinous paludism paludose paludous paludrin paludrine palule palulus palus palustral palustrian palustrine paly palynology pam pambanmanche pament pameroon pamment pampas pampean pamper pampered pamperedly pamperedness pamperer pamperize pampero pamphagous pampharmacon pamphlet pamphletage pamphletary pamphleteer pamphleter pamphletful pamphletic pamphletical pamphletize pamphletwise pamphysical pamphysicism pampilion pampiniform pampinocele pamplegia pampootee pampootie pampre pamprodactyl pamprodactylism pamprodactylous pampsychism pampsychist pan panace panacea panacean panaceist panache panached panachure panada panade panagiarion panama panapospory panarchic panarchy panaris panaritium panarteritis panarthritis panary panatela panatrophy panautomorphic panax panbabylonian panbabylonism pancake pancarditis panchama panchayat pancheon panchion panchromatic panchromatism panchromatization panchromatize panchway panclastic panconciliatory pancosmic pancosmism pancosmist pancratian pancratiast pancratiastic pancratic pancratical pancratically pancration pancratism pancratist pancratium pancreas pancreatalgia pancreatectomize pancreatectomy pancreatemphraxis pancreathelcosis pancreatic pancreaticoduodenal pancreaticoduodenostomy pancreaticogastrostomy pancreaticosplenic pancreatin pancreatism pancreatitic pancreatitis pancreatization pancreatize pancreatoduodenectomy pancreatoenterostomy pancreatogenic pancreatogenous pancreatoid pancreatolipase pancreatolith pancreatomy pancreatoncus pancreatopathy pancreatorrhagia pancreatotomy pancreectomy pancreozymin pancyclopedic pand panda pandal pandan pandanaceous pandaram pandaric pandation pandect pandemia pandemian pandemic pandemicity pandemoniac pandemonic pandemonism pandemonium pandemy pandenominational pander panderage panderer panderess panderism panderize panderly pandermite panderous pandership pandestruction pandiabolism pandiculation pandita pandle pandlewhew pandora pandour pandowdy pandrop pandura pandurate pandurated panduriform pandy pane panecclesiastical paned panegoism panegoist panegyric panegyrical panegyrically panegyricize panegyricon panegyricum panegyris panegyrist panegyrize panegyrizer panegyry paneity panel panela panelation paneler paneless paneling panelist panellation panelling panelwise panelwork panentheism panesthesia panesthetic paneulogism panfil panfish panful pang pangamic pangamous pangamously pangamy pangane pangen pangene pangenesis pangenetic pangenetically pangenic pangful pangi pangless panglessly panglima pangolin pangrammatist panhandle panhandler panharmonic panharmonicon panhead panheaded panhidrosis panhuman panhygrous panhyperemia panhysterectomy panic panical panically panicful panichthyophagous panicked panicky panicle panicled paniclike panicmonger panicmongering paniconograph paniconographic paniconography paniculate paniculated paniculately paniculitis panidiomorphic panidrosis panification panimmunity panisc panisca paniscus panisic panivorous panjandrum pank pankin pankration panleucopenia panlogical panlogism panlogistical panman panmelodicon panmelodion panmerism panmeristic panmixia panmixy panmnesia panmug panmyelophthisis pannade pannage pannam pannationalism panne pannel panner pannery panneuritic panneuritis pannicle pannicular pannier panniered pannierman pannikin panning pannose pannosely pannum pannus pannuscorium panocha panoche panococo panoistic panomphaic panomphean panomphic panophobia panophthalmia panophthalmitis panoplied panoplist panoply panoptic panoptical panopticon panoram panorama panoramic panoramical panoramically panoramist panornithic panorpian panorpid panosteitis panostitis panotitis panotype panouchi panpathy panpharmacon panphenomenalism panphobia panplegia panpneumatism panpolism panpsychic panpsychism panpsychist panpsychistic panscientist pansciolism pansciolist pansclerosis pansclerotic panse pansexism pansexual pansexualism pansexualist pansexuality pansexualize panshard panside pansideman pansied pansinuitis pansinusitis pansmith pansophic pansophical pansophically pansophism pansophist pansophy panspermatism panspermatist panspermia panspermic panspermism panspermist panspermy pansphygmograph panstereorama pansy pansylike pant pantachromatic pantacosm pantagamy pantagogue pantagraph pantagraphic pantagraphical pantagruelion pantaleon pantaletless pantalets pantaletted pantalgia pantalon pantaloon pantalooned pantaloonery pantaloons pantameter pantamorph pantamorphia pantamorphic pantanemone pantanencephalia pantanencephalic pantaphobia pantarbe pantarchy pantas pantascope pantascopic pantatrophia pantatrophy pantatype pantechnic pantechnicon pantelegraph pantelegraphy panteleologism pantelephone pantelephonic pantellerite panter panterer pantheic pantheism pantheist pantheistic pantheistical pantheistically panthelematism panthelism pantheologist pantheology pantheon pantheonic pantheonization pantheonize panther pantheress pantherine pantherish pantherlike pantherwood pantheum pantie panties pantile pantiled pantiling panting pantingly pantisocracy pantisocrat pantisocratic pantisocratical pantisocratist pantle pantler panto pantochrome pantochromic pantochromism pantochronometer pantod pantoffle pantofle pantoganglitis pantogelastic pantoglossical pantoglot pantoglottism pantograph pantographer pantographic pantographical pantographically pantography pantoiatrical pantologic pantological pantologist pantology pantomancer pantometer pantometric pantometrical pantometry pantomime pantomimic pantomimical pantomimically pantomimicry pantomimish pantomimist pantomimus pantomnesia pantomnesic pantomorph pantomorphia pantomorphic panton pantoon pantopelagian pantophagic pantophagist pantophagous pantophagy pantophile pantophobia pantophobic pantophobous pantoplethora pantopod pantopragmatic pantopterous pantoscope pantoscopic pantosophy pantostomate pantostomatous pantostome pantotactic pantothenate pantothenic pantotherian pantotype pantoum pantropic pantropical pantry pantryman pantrywoman pants pantun panty pantywaist panung panurgic panurgy panyar panzoism panzootia panzootic panzooty paolo paon pap papa papability papable papabot papacy papagallo papain papal papalism papalist papalistic papalization papalize papalizer papally papalty papane papaphobia papaphobist papaprelatical papaprelatist paparchical paparchy papaship papaveraceous papaverine papaverous papaw papaya papayaceous papayotin papboat pape papelonne paper paperback paperbark paperboard papered paperer paperful paperiness papering paperlike papermaker papermaking papermouth papern papershell paperweight papery papess papeterie papey papicolar papicolist papilionaceous papilionid papilionine papilionoid papilla papillae papillar papillary papillate papillated papillectomy papilledema papilliferous papilliform papillitis papilloadenocystoma papillocarcinoma papilloedema papilloma papillomatosis papillomatous papillon papilloretinitis papillosarcoma papillose papillosity papillote papillous papillulate papillule papion papish papisher papism papist papistic papistical papistically papistlike papistly papistry papize papless papmeat papolater papolatrous papolatry papoose papooseroot pappescent pappi pappiferous pappiform pappose pappox pappus pappy papreg paprica paprika papula papular papulate papulated papulation papule papuliferous papuloerythematous papulopustular papulopustule papulose papulosquamous papulous papulovesicular papyr papyraceous papyral papyrean papyri papyrian papyrin papyrine papyritious papyrocracy papyrograph papyrographer papyrographic papyrography papyrological papyrologist papyrology papyrophobia papyroplastics papyrotamia papyrotint papyrotype papyrus paquet par para paraaminobenzoic parabanate parabanic parabaptism parabaptization parabasal parabasic parabasis parabema parabematic parabenzoquinone parabiosis parabiotic parablast parablastic parable parablepsia parablepsis parablepsy parableptic parabola parabolanus parabolic parabolical parabolicalism parabolically parabolicness paraboliform parabolist parabolization parabolize parabolizer paraboloid paraboloidal parabomb parabotulism parabranchia parabranchial parabranchiate parabulia parabulic paracanthosis paracarmine paracasein paracaseinate paracentesis paracentral paracentric paracentrical paracephalus paracerebellar paracetaldehyde parachaplain paracholia parachor parachordal parachrea parachroia parachroma parachromatism parachromatophorous parachromatopsia parachromatosis parachrome parachromoparous parachromophoric parachromophorous parachronism parachronistic parachrose parachute parachutic parachutism parachutist paraclete paracmasis paracme paracoele paracoelian paracolitis paracolon paracolpitis paracolpium paracondyloid paracone paraconic paraconid paraconscious paracorolla paracotoin paracoumaric paracresol paracusia paracusic paracyanogen paracyesis paracymene paracystic paracystitis paracystium parade paradeful paradeless paradelike paradenitis paradental paradentitis paradentium parader paraderm paradiastole paradiazine paradichlorbenzene paradichlorbenzol paradichlorobenzene paradichlorobenzol paradidymal paradidymis paradigm paradigmatic paradigmatical paradigmatically paradigmatize parading paradingly paradiplomatic paradisaic paradisaically paradisal paradise paradisean paradisiac paradisiacal paradisiacally paradisial paradisian paradisic paradisical parado paradoctor parados paradoses paradox paradoxal paradoxer paradoxial paradoxic paradoxical paradoxicalism paradoxicality paradoxically paradoxicalness paradoxician paradoxidian paradoxism paradoxist paradoxographer paradoxographical paradoxology paradoxure paradoxurine paradoxy paradromic paraenesis paraenesize paraenetic paraenetical paraengineer paraffin paraffine paraffiner paraffinic paraffinize paraffinoid paraffiny paraffle parafle parafloccular paraflocculus paraform paraformaldehyde parafunction paragammacism paraganglion paragaster paragastral paragastric paragastrula paragastrular parage paragenesia paragenesis paragenetic paragenic paragerontic parageusia parageusic parageusis paragglutination paraglenal paraglobin paraglobulin paraglossa paraglossal paraglossate paraglossia paraglycogen paragnath paragnathism paragnathous paragnathus paragneiss paragnosia paragoge paragogic paragogical paragogically paragogize paragon paragonimiasis paragonite paragonitic paragonless paragram paragrammatist paragraph paragrapher paragraphia paragraphic paragraphical paragraphically paragraphism paragraphist paragraphistical paragraphize parah paraheliotropic paraheliotropism parahematin parahemoglobin parahepatic parahopeite parahormone parahydrogen paraiba parakeet parakeratosis parakilya parakinesia parakinetic paralactate paralalia paralambdacism paralambdacismus paralaurionite paraldehyde parale paralectotype paraleipsis paralepsis paralexia paralexic paralgesia paralgesic paralinin paralipomena paralipsis paralitical parallactic parallactical parallactically parallax parallel parallelable parallelepiped parallelepipedal parallelepipedic parallelepipedon parallelepipedonal paralleler parallelinervate parallelinerved parallelinervous parallelism parallelist parallelistic parallelith parallelization parallelize parallelizer parallelless parallelly parallelodrome parallelodromous parallelogram parallelogrammatic parallelogrammatical parallelogrammic parallelogrammical parallelograph parallelometer parallelopiped parallelopipedon parallelotropic parallelotropism parallelwise parallepipedous paralogia paralogical paralogician paralogism paralogist paralogistic paralogize paralogy paraluminite paralyses paralysis paralytic paralytical paralytically paralyzant paralyzation paralyze paralyzedly paralyzer paralyzingly param paramagnet paramagnetic paramagnetism paramandelic paramarine paramastigate paramastitis paramastoid paramatta paramedian paramelaconite paramenia parament paramere parameric parameron paramese paramesial parameter parametric parametrical parametritic parametritis parametrium paramide paramilitary paramimia paramine paramiographer paramitome paramnesia paramo paramorph paramorphia paramorphic paramorphine paramorphism paramorphosis paramorphous paramount paramountcy paramountly paramountness paramountship paramour paramuthetic paramyelin paramylum paramyoclonus paramyosinogen paramyotone paramyotonia paranasal paranatellon parandrus paranema paranematic paranephric paranephritic paranephritis paranephros paranepionic paranete parang paranitraniline paranitrosophenol paranoia paranoiac paranoid paranoidal paranoidism paranomia paranormal paranosic paranthelion paranthracene paranuclear paranucleate paranucleic paranuclein paranucleinic paranucleus paranymph paranymphal parao paraoperation paraparesis paraparetic parapathia parapathy parapegm parapegma paraperiodic parapet parapetalous parapeted parapetless paraph paraphasia paraphasic paraphemia paraphenetidine paraphenylene paraphenylenediamine parapherna paraphernal paraphernalia paraphernalian paraphia paraphilia paraphimosis paraphonia paraphonic paraphototropism paraphrasable paraphrase paraphraser paraphrasia paraphrasian paraphrasis paraphrasist paraphrast paraphraster paraphrastic paraphrastical paraphrastically paraphrenia paraphrenic paraphrenitis paraphyllium paraphysate paraphysical paraphysiferous paraphysis paraplasis paraplasm paraplasmic paraplastic paraplastin paraplectic paraplegia paraplegic paraplegy parapleuritis parapleurum parapod parapodial parapodium parapophysial parapophysis parapraxia parapraxis paraproctitis paraproctium paraprostatitis parapsidal parapsidan parapsis parapsychical parapsychism parapsychological parapsychology parapsychosis parapteral parapteron parapterum paraquadrate paraquinone pararectal pararek parareka pararhotacism pararosaniline pararosolic pararthria parasaboteur parasalpingitis parasang parascene parascenium parasceve paraschematic parasecretion paraselene paraselenic parasemidin parasemidine parasexuality parashah parasigmatism parasigmatismus parasital parasitary parasite parasitelike parasitemia parasitic parasitical parasitically parasiticalness parasiticidal parasiticide parasitism parasitize parasitogenic parasitoid parasitoidism parasitological parasitologist parasitology parasitophobia parasitosis parasitotrope parasitotropic parasitotropism parasitotropy paraskenion parasol parasoled parasolette paraspecific parasphenoid parasphenoidal paraspotter paraspy parastas parastatic parastemon parastemonal parasternal parasternum parastichy parastyle parasubphonate parasubstituted parasuchian parasympathetic parasympathomimetic parasynapsis parasynaptic parasynaptist parasyndesis parasynesis parasynetic parasynovitis parasynthesis parasynthetic parasyntheton parasyphilis parasyphilitic parasyphilosis parasystole paratactic paratactical paratactically paratartaric parataxis parate paraterminal paratherian parathesis parathetic parathion parathormone parathymic parathyroid parathyroidal parathyroidectomize parathyroidectomy parathyroprival parathyroprivia parathyroprivic paratitla paratitles paratoloid paratoluic paratoluidine paratomial paratomium paratonic paratonically paratorium paratory paratracheal paratragedia paratragoedia paratransversan paratrichosis paratrimma paratriptic paratroop paratrooper paratrophic paratrophy paratuberculin paratuberculosis paratuberculous paratungstate paratungstic paratype paratyphlitis paratyphoid paratypic paratypical paratypically paravaginitis paravail paravane paravauxite paravent paravertebral paravesical paraxial paraxially paraxon paraxonic paraxylene parazoan parazonium parbake parboil parbuckle parcel parceling parcellary parcellate parcellation parcelling parcellization parcellize parcelment parcelwise parcenary parcener parcenership parch parchable parchedly parchedness parcheesi parchemin parcher parchesi parching parchingly parchisi parchment parchmenter parchmentize parchmentlike parchmenty parchy parcidentate parciloquy parclose parcook pard pardalote pardao parded pardesi pardine pardner pardnomastic pardo pardon pardonable pardonableness pardonably pardonee pardoner pardoning pardonless pardonmonger pare paregoric pareiasaurian parel parelectronomic parelectronomy parella paren parencephalic parencephalon parenchym parenchyma parenchymal parenchymatic parenchymatitis parenchymatous parenchymatously parenchyme parenchymous parent parentage parental parentalism parentality parentally parentdom parentela parentelic parenteral parenterally parentheses parenthesis parenthesize parenthetic parenthetical parentheticality parenthetically parentheticalness parenthood parenticide parentless parentlike parentship parepididymal parepididymis parepigastric parer parerethesis parergal parergic parergon paresis paresthesia paresthesis paresthetic parethmoid paretic paretically pareunia parfait parfilage parfleche parfocal pargana pargasite parge pargeboard parget pargeter pargeting pargo parhelia parheliacal parhelic parhelion parhomologous parhomology parhypate pari pariah pariahdom pariahism pariahship parial parian paridigitate paridrosis paries parietal parietary parietes parietofrontal parietojugal parietomastoid parietoquadrate parietosphenoid parietosphenoidal parietosplanchnic parietosquamosal parietotemporal parietovaginal parietovisceral parify parigenin pariglin parilla parillin parimutuel parine paring paripinnate parish parished parishen parishional parishionally parishionate parishioner parishionership parisis parisology parison parisonic paristhmic paristhmion parisyllabic parisyllabical parity parivincular park parka parkee parker parkin parking parkish parklike parkward parkway parky parlamento parlance parlando parlatory parlay parle parley parleyer parliament parliamental parliamentarian parliamentarianism parliamentarily parliamentariness parliamentarism parliamentarization parliamentarize parliamentary parliamenteer parliamenteering parliamenter parling parlish parlor parlorish parlormaid parlous parlously parlousness parly parma parmacety parmak parmeliaceous parmelioid parnas parnassiaceous parnel parnorpine paroarion paroarium paroccipital paroch parochial parochialic parochialism parochialist parochiality parochialization parochialize parochially parochialness parochin parochine parochiner parode parodiable parodial parodic parodical parodinia parodist parodistic parodistically parodize parodontitis parodos parody parodyproof paroecious paroeciously paroeciousness paroecism paroecy paroemia paroemiac paroemiographer paroemiography paroemiologist paroemiology paroicous parol parolable parole parolee parolfactory paroli parolist paromoeon paromologetic paromologia paromology paromphalocele paromphalocelic paronomasia paronomasial paronomasian paronomasiastic paronomastical paronomastically paronychia paronychial paronychium paronym paronymic paronymization paronymize paronymous paronymy paroophoric paroophoritis paroophoron paropsis paroptesis paroptic parorchid parorchis parorexia parosmia parosmic parosteal parosteitis parosteosis parostosis parostotic parotic parotid parotidean parotidectomy parotiditis parotis parotitic parotitis parotoid parous parousia parousiamania parovarian parovariotomy parovarium paroxazine paroxysm paroxysmal paroxysmalist paroxysmally paroxysmic paroxysmist paroxytone paroxytonic paroxytonize parpal parquet parquetage parquetry parr parrel parrhesia parrhesiastic parriable parricidal parricidally parricide parricided parricidial parricidism parrier parrock parrot parroter parrothood parrotism parrotize parrotlet parrotlike parrotry parrotwise parroty parry parsable parse parsec parser parsettensite parsimonious parsimoniously parsimoniousness parsimony parsley parsleylike parsleywort parsnip parson parsonage parsonarchy parsondom parsoned parsonese parsoness parsonet parsonhood parsonic parsonical parsonically parsoning parsonish parsonity parsonize parsonlike parsonly parsonolatry parsonology parsonry parsonship parsonsite parsony part partakable partake partaker partan partanfull partanhanded parted partedness parter parterre parterred partheniad parthenian parthenic parthenocarpelly parthenocarpic parthenocarpical parthenocarpically parthenocarpous parthenocarpy parthenogenesis parthenogenetic parthenogenetically parthenogenic parthenogenitive parthenogenous parthenogeny parthenogonidium parthenology parthenoparous parthenosperm parthenospore partial partialism partialist partialistic partiality partialize partially partialness partiary partible particate participability participable participance participancy participant participantly participate participatingly participation participative participatively participator participatory participatress participial participiality participialize participially participle particle particled particular particularism particularist particularistic particularistically particularity particularization particularize particularly particularness particulate partigen partile partimembered partimen partinium partisan partisanism partisanize partisanship partite partition partitional partitionary partitioned partitioner partitioning partitionist partitionment partitive partitively partitura partiversal partivity partless partlet partly partner partnerless partnership parto partook partridge partridgeberry partridgelike partridgewood partridging partschinite parture parturiate parturience parturiency parturient parturifacient parturition parturitive party partyism partyist partykin partyless partymonger partyship parulis parumbilical parure paruria parvanimity parvenu parvenudom parvenuism parvicellular parviflorous parvifoliate parvifolious parvipotent parvirostrate parvis parviscient parvitude parvolin parvoline parvule paryphodrome pasan pasang paschal paschalist paschite pascoite pascuage pascual pascuous pasgarde pash pasha pashadom pashalik pashaship pashm pashmina pasi pasigraphic pasigraphical pasigraphy pasilaly pasmo pasqueflower pasquil pasquilant pasquiler pasquilic pasquin pasquinade pasquinader pass passable passableness passably passade passado passage passageable passageway passalid passant passback passbook passe passee passegarde passement passementerie passen passenger passer passeriform passerine passewa passibility passible passibleness passifloraceous passimeter passing passingly passingness passion passional passionary passionate passionately passionateness passionative passioned passionflower passionful passionfully passionfulness passionist passionless passionlessly passionlessness passionlike passionometer passionproof passionwise passionwort passir passival passivate passivation passive passively passiveness passivism passivist passivity passkey passless passman passo passometer passout passover passoverish passpenny passport passportless passulate passulation passus passway passwoman password passworts passymeasure past paste pasteboard pasteboardy pasted pastedness pastedown pastel pastelist paster pasterer pastern pasterned pasteur pasteurellosis pasteurism pasteurization pasteurize pasteurizer pastiche pasticheur pastil pastile pastille pastime pastimer pastiness pasting pastness pastophor pastophorion pastophorium pastophorus pastor pastorage pastoral pastorale pastoralism pastoralist pastorality pastoralize pastorally pastoralness pastorate pastoress pastorhood pastorium pastorize pastorless pastorlike pastorling pastorly pastorship pastose pastosity pastrami pastry pastryman pasturability pasturable pasturage pastural pasture pastureless pasturer pasturewise pasty pasul pat pata pataca patacao pataco patagial patagiate patagium patagon pataka patamar patao patapat pataque patas patashte patavinity patball patballer patch patchable patcher patchery patchily patchiness patchleaf patchless patchouli patchwise patchword patchwork patchworky patchy pate patefaction patefy patel patella patellar patellaroid patellate patellidan patelliform patelline patellofemoral patelloid patellula patellulate paten patency patener patent patentability patentable patentably patentee patently patentor pater patera patercove paterfamiliar paterfamiliarly paterfamilias pateriform paterissa paternal paternalism paternalist paternalistic paternalistically paternality paternalize paternally paternity paternoster paternosterer patesi patesiate path pathbreaker pathed pathema pathematic pathematically pathematology pathetic pathetical pathetically patheticalness patheticate patheticly patheticness pathetism pathetist pathetize pathfarer pathfinder pathfinding pathic pathicism pathless pathlessness pathlet pathoanatomical pathoanatomy pathobiological pathobiologist pathobiology pathochemistry pathodontia pathogen pathogene pathogenesis pathogenesy pathogenetic pathogenic pathogenicity pathogenous pathogeny pathogerm pathogermic pathognomic pathognomical pathognomonic pathognomonical pathognomy pathognostic pathographical pathography pathologic pathological pathologically pathologicoanatomic pathologicoanatomical pathologicoclinical pathologicohistological pathologicopsychological pathologist pathology patholysis patholytic pathomania pathometabolism pathomimesis pathomimicry pathoneurosis pathonomia pathonomy pathophobia pathophoresis pathophoric pathophorous pathoplastic pathoplastically pathopoeia pathopoiesis pathopoietic pathopsychology pathopsychosis pathoradiography pathos pathosocial pathway pathwayed pathy patible patibulary patibulate patience patiency patient patientless patiently patientness patina patinate patination patine patined patinize patinous patio patisserie patly patness patnidar pato patois patola patonce patria patrial patriarch patriarchal patriarchalism patriarchally patriarchate patriarchdom patriarched patriarchess patriarchic patriarchical patriarchically patriarchism patriarchist patriarchship patriarchy patrice patrician patricianhood patricianism patricianly patricianship patriciate patricidal patricide patrico patrilineal patrilineally patrilinear patriliny patrilocal patrimonial patrimonially patrimony patrin patriolatry patriot patrioteer patriotess patriotic patriotical patriotically patriotics patriotism patriotly patriotship patrist patristic patristical patristically patristicalness patristicism patristics patrix patrizate patrization patrocinium patroclinic patroclinous patrocliny patrogenesis patrol patroller patrollotism patrolman patrologic patrological patrologist patrology patron patronage patronal patronate patrondom patroness patronessship patronite patronizable patronization patronize patronizer patronizing patronizingly patronless patronly patronomatology patronship patronym patronymic patronymically patronymy patroon patroonry patroonship patruity patta pattable patte pattee patten pattened pattener patter patterer patterist pattern patternable patterned patterner patterning patternize patternless patternlike patternmaker patternmaking patternwise patterny pattu patty pattypan patu patulent patulous patulously patulousness patwari paty pau pauciarticulate pauciarticulated paucidentate pauciflorous paucifoliate paucifolious paucify paucijugate paucilocular pauciloquent pauciloquently pauciloquy paucinervate paucipinnate pauciplicate pauciradiate pauciradiated paucispiral paucispirated paucity paughty paukpan paular pauldron paulie paulin paulopast paulopost paulospore paunch paunched paunchful paunchily paunchiness paunchy paup pauper pauperage pauperate pauperdom pauperess pauperism pauperitic pauperization pauperize pauperizer paurometabolic paurometabolism paurometabolous paurometaboly pauropod pauropodous pausably pausal pausation pause pauseful pausefully pauseless pauselessly pausement pauser pausingly paussid paut pauxi pavage pavan pavane pave pavement pavemental paver pavestone pavid pavidity pavier pavilion paving pavior paviour pavis pavisade pavisado paviser pavisor pavonated pavonazzetto pavonazzo pavonian pavonine pavonize pavy paw pawdite pawer pawing pawk pawkery pawkily pawkiness pawkrie pawky pawl pawn pawnable pawnage pawnbroker pawnbrokerage pawnbrokeress pawnbrokering pawnbrokery pawnbroking pawnee pawner pawnie pawnor pawnshop pawpaw pax paxilla paxillar paxillary paxillate paxilliferous paxilliform paxillose paxillus paxiuba paxwax pay payability payable payableness payably payday payed payee payeny payer paying paymaster paymastership payment paymistress paynim paynimhood paynimry payoff payong payor payroll paysagist pea peaberry peace peaceable peaceableness peaceably peacebreaker peacebreaking peaceful peacefully peacefulness peaceless peacelessness peacelike peacemaker peacemaking peaceman peacemonger peacemongering peacetime peach peachberry peachblossom peachblow peachen peacher peachery peachick peachify peachiness peachlet peachlike peachwood peachwort peachy peacoat peacock peacockery peacockish peacockishly peacockishness peacockism peacocklike peacockly peacockwise peacocky peacod peafowl peag peage peahen peai peaiism peak peaked peakedly peakedness peaker peakily peakiness peaking peakish peakishly peakishness peakless peaklike peakward peaky peakyish peal pealike pean peanut pear pearceite pearl pearlberry pearled pearler pearlet pearlfish pearlfruit pearlike pearlin pearliness pearling pearlish pearlite pearlitic pearlsides pearlstone pearlweed pearlwort pearly pearmain pearmonger peart pearten peartly peartness pearwood peasant peasantess peasanthood peasantism peasantize peasantlike peasantly peasantry peasantship peasecod peaselike peasen peashooter peason peastake peastaking peastick peasticking peastone peasy peat peatery peathouse peatman peatship peatstack peatwood peaty peavey peavy peba pebble pebbled pebblehearted pebblestone pebbleware pebbly pebrine pebrinous pecan peccability peccable peccadillo peccancy peccant peccantly peccantness peccary peccation peccavi pech pecht pecite peck pecked pecker peckerwood pecket peckful peckhamite peckiness peckish peckishly peckishness peckle peckled peckly pecky pecopteroid pectase pectate pecten pectic pectin pectinacean pectinaceous pectinal pectinase pectinate pectinated pectinately pectination pectinatodenticulate pectinatofimbricate pectinatopinnate pectineal pectineus pectinibranch pectinibranchian pectinibranchiate pectinic pectinid pectiniferous pectiniform pectinirostrate pectinite pectinogen pectinoid pectinose pectinous pectizable pectization pectize pectocellulose pectolite pectora pectoral pectoralgia pectoralis pectoralist pectorally pectoriloquial pectoriloquism pectoriloquous pectoriloquy pectosase pectose pectosic pectosinase pectous pectunculate pectus peculate peculation peculator peculiar peculiarism peculiarity peculiarize peculiarly peculiarness peculiarsome peculium pecuniarily pecuniary pecuniosity pecunious ped peda pedage pedagog pedagogal pedagogic pedagogical pedagogically pedagogics pedagogism pedagogist pedagogue pedagoguery pedagoguish pedagoguism pedagogy pedal pedaler pedalfer pedalferic pedaliaceous pedalian pedalier pedalism pedalist pedaliter pedality pedanalysis pedant pedantesque pedantess pedanthood pedantic pedantical pedantically pedanticalness pedanticism pedanticly pedanticness pedantism pedantize pedantocracy pedantocrat pedantocratic pedantry pedary pedate pedated pedately pedatifid pedatiform pedatilobate pedatilobed pedatinerved pedatipartite pedatisect pedatisected pedatrophia pedder peddle peddler peddleress peddlerism peddlery peddling peddlingly pedee pedelion pederast pederastic pederastically pederasty pedes pedesis pedestal pedestrial pedestrially pedestrian pedestrianate pedestrianism pedestrianize pedetentous pediadontia pediadontic pediadontist pedialgia pediatric pediatrician pediatrics pediatrist pediatry pedicab pedicel pediceled pedicellar pedicellaria pedicellate pedicellated pedicellation pedicelled pedicelliform pedicellus pedicle pedicular pediculate pediculated pedicule pediculicidal pediculicide pediculid pediculine pediculofrontal pediculoid pediculoparietal pediculophobia pediculosis pediculous pedicure pedicurism pedicurist pediferous pediform pedigerous pedigraic pedigree pedigreeless pediluvium pedimanous pediment pedimental pedimented pedimentum pedion pedionomite pedipalp pedipalpal pedipalpate pedipalpous pedipalpus pedipulate pedipulation pedipulator pedlar pedlary pedobaptism pedobaptist pedocal pedocalcic pedodontia pedodontic pedodontist pedodontology pedograph pedological pedologist pedologistical pedologistically pedology pedometer pedometric pedometrical pedometrically pedometrician pedometrist pedomorphic pedomorphism pedomotive pedomotor pedophilia pedophilic pedotribe pedotrophic pedotrophist pedotrophy pedrail pedregal pedrero pedro pedule pedum peduncle peduncled peduncular pedunculate pedunculated pedunculation pedunculus pee peed peek peekaboo peel peelable peele peeled peeledness peeler peelhouse peeling peelman peen peenge peeoy peep peeper peepeye peephole peepy peer peerage peerdom peeress peerhood peerie peeringly peerless peerlessly peerlessness peerling peerly peership peery peesash peesoreh peesweep peetweet peeve peeved peevedly peevedness peever peevish peevishly peevishness peewee peg pega pegall peganite pegasid pegasoid pegboard pegbox pegged pegger pegging peggle peggy pegless peglet peglike pegman pegmatite pegmatitic pegmatization pegmatize pegmatoid pegmatophyre pegology pegomancy pegwood peho peignoir peine peirameter peirastic peirastically peisage peise peiser peixere pejorate pejoration pejorationist pejorative pejoratively pejorism pejorist pejority pekan pekin pekoe peladic pelage pelagial pelagian pelagic pelamyd pelanos pelargic pelargomorph pelargomorphic pelargonate pelargonic pelargonidin pelargonin pelargonium pelean pelecan pelecypod pelecypodous pelelith pelerine pelf pelican pelicanry pelick pelicometer pelike peliom pelioma peliosis pelisse pelite pelitic pell pellage pellagra pellagragenic pellagrin pellagrose pellagrous pellar pellard pellas pellate pellation peller pellet pelleted pelletierine pelletlike pellety pellicle pellicula pellicular pellicularia pelliculate pellicule pellile pellitory pellmell pellock pellotine pellucent pellucid pellucidity pellucidly pellucidness pelmatic pelmatogram pelmatozoan pelmatozoic pelmet pelobatid pelobatoid pelodytid pelodytoid pelomedusid pelomedusoid pelon peloria pelorian peloriate peloric pelorism pelorization pelorize pelorus pelota pelotherapy peloton pelt pelta peltast peltate peltated peltately peltatifid peltation peltatodigitate pelter pelterer peltiferous peltifolious peltiform peltigerine peltigerous peltinerved pelting peltingly peltless peltmonger peltry pelu peludo pelveoperitonitis pelves pelvic pelviform pelvigraph pelvigraphy pelvimeter pelvimetry pelviolithotomy pelvioperitonitis pelvioplasty pelvioradiography pelvioscopy pelviotomy pelviperitonitis pelvirectal pelvis pelvisacral pelvisternal pelvisternum pelycogram pelycography pelycology pelycometer pelycometry pelycosaur pelycosaurian pembina pemican pemmican pemmicanization pemmicanize pemphigoid pemphigous pemphigus pen penacute penaeaceous penal penalist penality penalizable penalization penalize penally penalty penance penanceless penang penannular penates penbard pencatite pence pencel penceless penchant penchute pencil penciled penciler penciliform penciling pencilled penciller pencillike pencilling pencilry pencilwood pencraft pend penda pendant pendanted pendanting pendantlike pendecagon pendeloque pendency pendent pendentive pendently pendicle pendicler pending pendle pendom pendragon pendragonish pendragonship pendulant pendular pendulate pendulation pendule penduline pendulosity pendulous pendulously pendulousness pendulum pendulumlike penelopine peneplain peneplanation peneplane peneseismic penetrability penetrable penetrableness penetrably penetral penetralia penetralian penetrance penetrancy penetrant penetrate penetrating penetratingly penetratingness penetration penetrative penetratively penetrativeness penetrativity penetrator penetrology penetrometer penfieldite penfold penful penghulu pengo penguin penguinery penhead penholder penial penicillate penicillated penicillately penicillation penicilliform penicillin penide penile peninsula peninsular peninsularism peninsularity peninsulate penintime peninvariant penis penistone penitence penitencer penitent penitential penitentially penitentiary penitentiaryship penitently penk penkeeper penknife penlike penmaker penmaking penman penmanship penmaster penna pennaceous pennae pennage pennant pennate pennated pennatifid pennatilobate pennatipartite pennatisect pennatisected pennatulacean pennatulaceous pennatularian pennatulid pennatuloid penneech penneeck penner pennet penni pennia pennied penniferous penniform pennigerous penniless pennilessly pennilessness pennill penninervate penninerved penning penninite pennipotent penniveined pennon pennoned pennopluma pennoplume pennorth penny pennybird pennycress pennyearth pennyflower pennyhole pennyleaf pennyrot pennyroyal pennysiller pennystone pennyweight pennywinkle pennywort pennyworth penologic penological penologist penology penorcon penrack penroseite penscript penseful pensefulness penship pensile pensileness pensility pension pensionable pensionably pensionary pensioner pensionership pensionless pensive pensived pensively pensiveness penster penstick penstock pensum pensy pent penta pentabasic pentabromide pentacapsular pentacarbon pentacarbonyl pentacarpellary pentace pentacetate pentachenium pentachloride pentachord pentachromic pentacid pentacle pentacoccous pentacontane pentacosane pentacrinite pentacrinoid pentacron pentacrostic pentactinal pentactine pentacular pentacyanic pentacyclic pentad pentadactyl pentadactylate pentadactyle pentadactylism pentadactyloid pentadecagon pentadecahydrate pentadecahydrated pentadecane pentadecatoic pentadecoic pentadecyl pentadecylic pentadelphous pentadicity pentadiene pentadodecahedron pentadrachm pentadrachma pentaerythrite pentaerythritol pentafid pentafluoride pentagamist pentaglossal pentaglot pentaglottical pentagon pentagonal pentagonally pentagonohedron pentagonoid pentagram pentagrammatic pentagyn pentagynian pentagynous pentahalide pentahedral pentahedrical pentahedroid pentahedron pentahedrous pentahexahedral pentahexahedron pentahydrate pentahydrated pentahydric pentahydroxy pentail pentaiodide pentalobate pentalogue pentalogy pentalpha pentameral pentameran pentamerid pentamerism pentameroid pentamerous pentameter pentamethylene pentamethylenediamine pentametrist pentametrize pentander pentandrian pentandrous pentane pentanedione pentangle pentangular pentanitrate pentanoic pentanolide pentanone pentapetalous pentaphylacaceous pentaphyllous pentaploid pentaploidic pentaploidy pentapody pentapolis pentapolitan pentapterous pentaptote pentaptych pentaquine pentarch pentarchical pentarchy pentasepalous pentasilicate pentaspermous pentaspheric pentaspherical pentastich pentastichous pentastichy pentastome pentastomoid pentastomous pentastyle pentastylos pentasulphide pentasyllabic pentasyllabism pentasyllable pentateuchal pentathionate pentathionic pentathlete pentathlon pentathlos pentatomic pentatomid pentatone pentatonic pentatriacontane pentavalence pentavalency pentavalent penteconter pentecontoglossal pentecostal pentecostalism pentecostalist pentecostarion pentecoster pentecostys pentene penteteric penthemimer penthemimeral penthemimeris penthiophen penthiophene penthouse penthouselike penthrit penthrite pentimento pentine pentiodide pentit pentite pentitol pentlandite pentobarbital pentode pentoic pentol pentosan pentosane pentose pentoside pentosuria pentoxide pentremital pentremite pentrit pentrite pentrough pentstock penttail pentyl pentylene pentylic pentylidene pentyne penuchi penult penultima penultimate penultimatum penumbra penumbrae penumbral penumbrous penurious penuriously penuriousness penury penwiper penwoman penwomanship penworker penwright peon peonage peonism peony people peopledom peoplehood peopleize peopleless peopler peoplet peoplish peotomy pep peperine peperino pepful pepinella pepino peplos peplosed peplum peplus pepo peponida peponium pepper pepperbox peppercorn peppercornish peppercorny pepperer peppergrass pepperidge pepperily pepperiness pepperish pepperishly peppermint pepperoni pepperproof pepperroot pepperweed pepperwood pepperwort peppery peppily peppin peppiness peppy pepsin pepsinate pepsinhydrochloric pepsiniferous pepsinogen pepsinogenic pepsinogenous pepsis peptic peptical pepticity peptidase peptide peptizable peptization peptize peptizer peptogaster peptogenic peptogenous peptogeny peptohydrochloric peptolysis peptolytic peptonaemia peptonate peptone peptonemia peptonic peptonization peptonize peptonizer peptonoid peptonuria peptotoxine per peracephalus peracetate peracetic peracid peracidite peract peracute peradventure peragrate peragration peramble perambulant perambulate perambulation perambulator perambulatory perameline perameloid perbend perborate perborax perbromide percale percaline percarbide percarbonate percarbonic perceivability perceivable perceivableness perceivably perceivance perceivancy perceive perceivedly perceivedness perceiver perceiving perceivingness percent percentable percentably percentage percentaged percental percentile percentual percept perceptibility perceptible perceptibleness perceptibly perception perceptional perceptionalism perceptionism perceptive perceptively perceptiveness perceptivity perceptual perceptually percesocine perch percha perchable perchance percher perchlorate perchlorethane perchlorethylene perchloric perchloride perchlorinate perchlorination perchloroethane perchloroethylene perchromate perchromic percid perciform percipience percipiency percipient perclose percnosome percoct percoid percoidean percolable percolate percolation percolative percolator percomorph percomorphous percompound percontation percontatorial percribrate percribration percrystallization perculsion perculsive percur percurration percurrent percursory percuss percussion percussional percussioner percussionist percussionize percussive percussively percussiveness percussor percutaneous percutaneously percutient percylite perdicine perdition perditionable perdricide perdu perduellion perdurability perdurable perdurableness perdurably perdurance perdurant perdure perduring perduringly peregrin peregrina peregrinate peregrination peregrinator peregrinatory peregrine peregrinity peregrinoid pereion pereiopod pereira pereirine peremptorily peremptoriness peremptory perendinant perendinate perendination perendure perennate perennation perennial perenniality perennialize perennially perennibranch perennibranchiate perequitate peres perezone perfect perfectation perfected perfectedly perfecter perfecti perfectibilian perfectibilism perfectibilist perfectibilitarian perfectibility perfectible perfecting perfection perfectionate perfectionation perfectionator perfectioner perfectionism perfectionist perfectionistic perfectionize perfectionizement perfectionizer perfectionment perfectism perfectist perfective perfectively perfectiveness perfectivity perfectivize perfectly perfectness perfecto perfector perfectuation perfervent perfervid perfervidity perfervidly perfervidness perfervor perfervour perfidious perfidiously perfidiousness perfidy perfilograph perflate perflation perfluent perfoliate perfoliation perforable perforant perforate perforated perforation perforationproof perforative perforator perforatorium perforatory perforce perforcedly perform performable performance performant performative performer perfrication perfumatory perfume perfumed perfumeless perfumer perfumeress perfumery perfumy perfunctionary perfunctorily perfunctoriness perfunctorious perfunctoriously perfunctorize perfunctory perfuncturate perfusate perfuse perfusion perfusive pergameneous pergamentaceous pergamyn pergola perhalide perhalogen perhaps perhazard perhorresce perhydroanthracene perhydrogenate perhydrogenation perhydrogenize peri periacinal periacinous periactus periadenitis periamygdalitis perianal periangiocholitis periangioma periangitis perianth perianthial perianthium periaortic periaortitis periapical periappendicitis periappendicular periapt periareum periarterial periarteritis periarthric periarthritis periarticular periaster periastral periastron periastrum periatrial periauricular periaxial periaxillary periaxonal periblast periblastic periblastula periblem peribolos peribolus peribranchial peribronchial peribronchiolar peribronchiolitis peribronchitis peribulbar peribursal pericaecal pericaecitis pericanalicular pericapsular pericardia pericardiac pericardiacophrenic pericardial pericardicentesis pericardiectomy pericardiocentesis pericardiolysis pericardiomediastinitis pericardiophrenic pericardiopleural pericardiorrhaphy pericardiosymphysis pericardiotomy pericarditic pericarditis pericardium pericardotomy pericarp pericarpial pericarpic pericarpium pericarpoidal pericecal pericecitis pericellular pericemental pericementitis pericementoclasia pericementum pericenter pericentral pericentric pericephalic pericerebral perichaete perichaetial perichaetium perichete pericholangitis pericholecystitis perichondral perichondrial perichondritis perichondrium perichord perichordal perichoresis perichorioidal perichoroidal perichylous pericladium periclase periclasia periclasite periclaustral periclinal periclinally pericline periclinium periclitate periclitation pericolitis pericolpitis periconchal periconchitis pericopal pericope pericopic pericorneal pericowperitis pericoxitis pericranial pericranitis pericranium pericristate periculant pericycle pericycloid pericyclone pericyclonic pericystic pericystitis pericystium pericytial peridendritic peridental peridentium peridentoclasia periderm peridermal peridermic peridesm peridesmic peridesmitis peridesmium peridial peridiastole peridiastolic perididymis perididymitis peridiiform peridiniaceous peridinial peridinian peridinid peridiole peridiolum peridium peridot peridotic peridotite peridotitic periductal periegesis periegetic perielesis periencephalitis perienteric perienteritis perienteron periependymal periesophageal periesophagitis perifistular perifoliary perifollicular perifolliculitis perigangliitis periganglionic perigastric perigastritis perigastrula perigastrular perigastrulation perigeal perigee perigemmal perigenesis perigenital perigeum periglandular perigloea periglottic periglottis perignathic perigon perigonadial perigonal perigone perigonial perigonium perigraph perigraphic perigynial perigynium perigynous perigyny perihelial perihelian perihelion perihelium perihepatic perihepatitis perihermenial perihernial perihysteric perijejunitis perijove perikaryon perikronion peril perilabyrinth perilabyrinthitis perilaryngeal perilaryngitis perilenticular periligamentous perilless perilobar perilous perilously perilousness perilsome perilymph perilymphangial perilymphangitis perilymphatic perimartium perimastitis perimedullary perimeningitis perimeter perimeterless perimetral perimetric perimetrical perimetrically perimetritic perimetritis perimetrium perimetry perimorph perimorphic perimorphism perimorphous perimyelitis perimysial perimysium perine perineal perineocele perineoplastic perineoplasty perineorrhaphy perineoscrotal perineostomy perineosynthesis perineotomy perineovaginal perineovulvar perinephral perinephrial perinephric perinephritic perinephritis perinephrium perineptunium perineum perineural perineurial perineuritis perineurium perinium perinuclear periocular period periodate periodic periodical periodicalism periodicalist periodicalize periodically periodicalness periodicity periodide periodize periodogram periodograph periodology periodontal periodontia periodontic periodontist periodontitis periodontium periodontoclasia periodontologist periodontology periodontum periodoscope perioeci perioecians perioecic perioecid perioecus perioesophageal perioikoi periomphalic perionychia perionychium perionyx perionyxis perioophoritis periophthalmic periophthalmitis periople perioplic perioptic perioptometry perioral periorbit periorbita periorbital periorchitis periost periostea periosteal periosteitis periosteoalveolar periosteoma periosteomedullitis periosteomyelitis periosteophyte periosteorrhaphy periosteotome periosteotomy periosteous periosteum periostitic periostitis periostoma periostosis periostotomy periostracal periostracum periotic periovular peripachymeningitis peripancreatic peripancreatitis peripapillary peripatetic peripatetical peripatetically peripateticate peripatize peripatoid peripenial peripericarditis peripetalous peripetasma peripeteia peripetia peripety periphacitis peripharyngeal peripherad peripheral peripherally peripherial peripheric peripherical peripherically peripherocentral peripheroceptor peripheromittor peripheroneural peripherophose periphery periphlebitic periphlebitis periphractic periphrase periphrases periphrasis periphrastic periphrastical periphrastically periphraxy periphyllum periphyse periphysis periplasm periplast periplastic periplegmatic peripleural peripleuritis periplus peripneumonia peripneumonic peripneumony peripneustic peripolar peripolygonal periportal periproct periproctal periproctitis periproctous periprostatic periprostatitis peripteral peripterous periptery peripylephlebitis peripyloric perique perirectal perirectitis perirenal perisalpingitis perisarc perisarcal perisarcous perisaturnium periscian periscians periscii perisclerotic periscopal periscope periscopic periscopical periscopism perish perishability perishable perishableness perishably perished perishing perishingly perishless perishment perisigmoiditis perisinuitis perisinuous perisinusitis perisoma perisomal perisomatic perisome perisomial perisperm perispermal perispermatitis perispermic perisphere perispheric perispherical perisphinctean perisphinctoid perisplanchnic perisplanchnitis perisplenetic perisplenic perisplenitis perispome perispomenon perispondylic perispondylitis perispore perisporiaceous perissad perissodactyl perissodactylate perissodactyle perissodactylic perissodactylism perissodactylous perissologic perissological perissology perissosyllabic peristalith peristalsis peristaltic peristaltically peristaphyline peristaphylitis peristele peristerite peristeromorph peristeromorphic peristeromorphous peristeronic peristerophily peristeropod peristeropodan peristeropode peristeropodous peristethium peristole peristoma peristomal peristomatic peristome peristomial peristomium peristrephic peristrephical peristrumitis peristrumous peristylar peristyle peristylium peristylos peristylum perisynovial perisystole perisystolic perit perite peritectic peritendineum peritenon perithece perithecial perithecium perithelial perithelioma perithelium perithoracic perithyreoiditis perithyroiditis peritomize peritomous peritomy peritoneal peritonealgia peritoneally peritoneocentesis peritoneoclysis peritoneomuscular peritoneopathy peritoneopericardial peritoneopexy peritoneoplasty peritoneoscope peritoneoscopy peritoneotomy peritoneum peritonism peritonital peritonitic peritonitis peritonsillar peritonsillitis peritracheal peritrema peritrematous peritreme peritrich peritrichan peritrichic peritrichous peritrichously peritroch peritrochal peritrochanteric peritrochium peritrochoid peritropal peritrophic peritropous perityphlic perityphlitic perityphlitis periumbilical periungual periuranium periureteric periureteritis periurethral periurethritis periuterine periuvular perivaginal perivaginitis perivascular perivasculitis perivenous perivertebral perivesical perivisceral perivisceritis perivitellin perivitelline periwig periwigpated periwinkle periwinkled periwinkler perizonium perjink perjinkety perjinkities perjinkly perjure perjured perjuredly perjuredness perjurer perjuress perjurious perjuriously perjuriousness perjurous perjury perjurymonger perjurymongering perk perkily perkin perkiness perking perkingly perkish perknite perky perlaceous perle perlection perlid perligenous perlingual perlingually perlite perlitic perloir perlustrate perlustration perlustrator perm permafrost permalloy permanence permanency permanent permanently permanentness permanganate permanganic permansive permeability permeable permeableness permeably permeameter permeance permeant permeate permeation permeative permeator permillage permirific permissibility permissible permissibleness permissibly permission permissioned permissive permissively permissiveness permissory permit permittable permitted permittedly permittee permitter permittivity permixture permonosulphuric permoralize permutability permutable permutableness permutably permutate permutation permutational permutationist permutator permutatorial permutatory permute permuter pern pernancy pernasal pernavigate pernicious perniciously perniciousness pernicketiness pernickety pernine pernitrate pernitric pernoctation pernor pernyi peroba perobrachius perocephalus perochirus perodactylus peromelous peromelus peronate peroneal peroneocalcaneal peroneotarsal peroneotibial peronial peronium peronosporaceous peropod peropodous peropus peroral perorally perorate peroration perorational perorative perorator peroratorical peroratorically peroratory perosis perosmate perosmic perosomus perotic perovskite peroxidase peroxidate peroxidation peroxide peroxidic peroxidize peroxidizement peroxy peroxyl perozonid perozonide perpend perpendicular perpendicularity perpendicularly perpera perperfect perpetrable perpetrate perpetration perpetrator perpetratress perpetratrix perpetuable perpetual perpetualism perpetualist perpetuality perpetually perpetualness perpetuana perpetuance perpetuant perpetuate perpetuation perpetuator perpetuity perplantar perplex perplexable perplexed perplexedly perplexedness perplexer perplexing perplexingly perplexity perplexment perplication perquadrat perquest perquisite perquisition perquisitor perradial perradially perradiate perradius perridiculous perrier perron perruche perrukery perruthenate perruthenic perry perryman persalt perscent perscribe perscrutate perscrutation perscrutator perse persecute persecutee persecuting persecutingly persecution persecutional persecutive persecutiveness persecutor persecutory persecutress persecutrix perseite perseitol perseity persentiscency perseverance perseverant perseverate perseveration persevere persevering perseveringly persicary persico persicot persienne persiennes persiflage persiflate persilicic persimmon persis persist persistence persistency persistent persistently persister persisting persistingly persistive persistively persistiveness persnickety person persona personable personableness personably personage personal personalia personalism personalist personalistic personality personalization personalize personally personalness personalty personate personately personating personation personative personator personed personeity personifiable personifiant personification personificative personificator personifier personify personization personize personnel personship perspection perspective perspectived perspectiveless perspectively perspectivity perspectograph perspectometer perspicacious perspicaciously perspicaciousness perspicacity perspicuity perspicuous perspicuously perspicuousness perspirability perspirable perspirant perspirate perspiration perspirative perspiratory perspire perspiringly perspiry perstringe perstringement persuadability persuadable persuadableness persuadably persuade persuaded persuadedly persuadedness persuader persuadingly persuasibility persuasible persuasibleness persuasibly persuasion persuasive persuasively persuasiveness persuasory persulphate persulphide persulphocyanate persulphocyanic persulphuric persymmetric persymmetrical pert pertain pertaining pertainment perten perthiocyanate perthiocyanic perthiotophyre perthite perthitic perthitically perthosite pertinacious pertinaciously pertinaciousness pertinacity pertinence pertinency pertinent pertinently pertinentness pertish pertly pertness perturb perturbability perturbable perturbance perturbancy perturbant perturbate perturbation perturbational perturbatious perturbative perturbator perturbatory perturbatress perturbatrix perturbed perturbedly perturbedness perturber perturbing perturbingly perturbment pertuse pertused pertusion pertussal pertussis perty peruke perukeless perukier perukiership perula perulate perule perusable perusal peruse peruser pervade pervadence pervader pervading pervadingly pervadingness pervagate pervagation pervalvar pervasion pervasive pervasively pervasiveness perverse perversely perverseness perversion perversity perversive pervert perverted pervertedly pervertedness perverter pervertibility pervertible pervertibly pervertive perviability perviable pervicacious pervicaciously pervicaciousness pervicacity pervigilium pervious perviously perviousness pervulgate pervulgation perwitsky pes pesa pesade pesage peseta peshkar peshkash peshwa peshwaship peskily peskiness pesky peso pess pessary pessimal pessimism pessimist pessimistic pessimistically pessimize pessimum pessomancy pessoner pessular pessulus pest peste pester pesterer pesteringly pesterment pesterous pestersome pestful pesthole pesthouse pesticidal pesticide pestiduct pestiferous pestiferously pestiferousness pestifugous pestify pestilence pestilenceweed pestilencewort pestilent pestilential pestilentially pestilentialness pestilently pestle pestological pestologist pestology pestproof pet petal petalage petaled petaliferous petaliform petaline petalism petalite petalled petalless petallike petalocerous petalodic petalodont petalodontid petalodontoid petalody petaloid petaloidal petaloideous petalomania petalon petalous petalwise petaly petard petardeer petardier petary petasos petasus petaurine petaurist petchary petcock pete peteca petechiae petechial petechiate peteman peter peterman peternet petersham peterwort petful petiolar petiolary petiolate petiolated petiole petioled petiolular petiolulate petiolule petiolus petit petite petiteness petitgrain petition petitionable petitional petitionarily petitionary petitionee petitioner petitionist petitionproof petitor petitory petkin petling peto petrary petre petrean petreity petrel petrescence petrescent petricolous petrie petrifaction petrifactive petrifiable petrific petrificant petrificate petrification petrified petrifier petrify petrissage petrochemical petrochemistry petrogenesis petrogenic petrogeny petroglyph petroglyphic petroglyphy petrograph petrographer petrographic petrographical petrographically petrography petrohyoid petrol petrolage petrolatum petrolean petrolene petroleous petroleum petrolic petroliferous petrolific petrolist petrolithic petrolization petrolize petrologic petrological petrologically petromastoid petromyzont petromyzontoid petronel petronella petropharyngeal petrophilous petrosa petrosal petrosilex petrosiliceous petrosilicious petrosphenoid petrosphenoidal petrosphere petrosquamosal petrosquamous petrostearin petrostearine petrosum petrotympanic petrous petroxolin pettable petted pettedly pettedness petter pettichaps petticoat petticoated petticoaterie petticoatery petticoatism petticoatless petticoaty pettifog pettifogger pettifoggery pettifogging pettifogulize pettifogulizer pettily pettiness pettingly pettish pettitoes pettle petty pettyfog petulance petulancy petulant petulantly petune petuntse petwood petzite peucites peuhl pew pewage pewdom pewee pewfellow pewful pewholder pewing pewit pewless pewmate pewter pewterer pewterwort pewtery pewy peyote peyotl peyton peytrel pezantic pezizaceous pezizaeform peziziform pezizoid pezograph pfeffernuss pfennig pfui pfund phacelite phacella phacitis phacoanaphylaxis phacocele phacochere phacocherine phacochoere phacochoerid phacochoerine phacochoeroid phacocyst phacocystectomy phacocystitis phacoglaucoma phacoid phacoidal phacoidoscope phacolite phacolith phacolysis phacomalacia phacometer phacopid phacosclerosis phacoscope phacotherapy phaeism phaenantherous phaenanthery phaenogam phaenogamian phaenogamic phaenogamous phaenogenesis phaenogenetic phaenological phaenology phaenomenal phaenomenism phaenomenon phaenozygous phaeochrous phaeodarian phaeophore phaeophycean phaeophyceous phaeophyll phaeophytin phaeoplast phaeospore phaeosporous phaeton phage phagedena phagedenic phagedenical phagedenous phagocytable phagocytal phagocyte phagocyter phagocytic phagocytism phagocytize phagocytoblast phagocytolysis phagocytolytic phagocytose phagocytosis phagodynamometer phagolysis phagolytic phagomania phainolion phalacrocoracine phalacrosis phalaenopsid phalangal phalange phalangeal phalangean phalanger phalangerine phalanges phalangette phalangian phalangic phalangid phalangidan phalangidean phalangiform phalangigrade phalangigrady phalangiid phalangist phalangistine phalangite phalangitic phalangitis phalangologist phalangology phalansterial phalansterian phalansterianism phalansteric phalansterism phalansterist phalanstery phalanx phalanxed phalarica phalarope phalera phalerate phalerated phallaceous phallalgia phallaneurysm phallephoric phallic phallical phallicism phallicist phallin phallism phallist phallitis phallocrypsis phallodynia phalloid phalloncus phalloplasty phallorrhagia phallus phanatron phaneric phanerite phanerocephalous phanerocodonic phanerocryst phanerocrystalline phanerogam phanerogamian phanerogamic phanerogamous phanerogamy phanerogenetic phanerogenic phaneroglossal phaneroglossate phaneromania phaneromere phaneromerous phaneroscope phanerosis phanerozoic phanerozonate phanic phano phansigar phantascope phantasia phantasist phantasize phantasm phantasma phantasmagoria phantasmagorial phantasmagorially phantasmagorian phantasmagoric phantasmagorical phantasmagorist phantasmagory phantasmal phantasmalian phantasmality phantasmally phantasmascope phantasmata phantasmatic phantasmatical phantasmatically phantasmatography phantasmic phantasmical phantasmically phantasmogenesis phantasmogenetic phantasmograph phantasmological phantasmology phantast phantasy phantom phantomatic phantomic phantomical phantomically phantomize phantomizer phantomland phantomlike phantomnation phantomry phantomship phantomy phantoplex phantoscope phare pharisaical pharisaically pharisaicalness pharisee pharmacal pharmaceutic pharmaceutical pharmaceutically pharmaceutics pharmaceutist pharmacic pharmacist pharmacite pharmacodiagnosis pharmacodynamic pharmacodynamical pharmacodynamics pharmacoendocrinology pharmacognosia pharmacognosis pharmacognosist pharmacognostical pharmacognostically pharmacognostics pharmacognosy pharmacography pharmacolite pharmacologia pharmacologic pharmacological pharmacologically pharmacologist pharmacology pharmacomania pharmacomaniac pharmacomaniacal pharmacometer pharmacopedia pharmacopedic pharmacopedics pharmacopeia pharmacopeial pharmacopeian pharmacophobia pharmacopoeia pharmacopoeial pharmacopoeian pharmacopoeist pharmacopolist pharmacoposia pharmacopsychology pharmacosiderite pharmacotherapy pharmacy pharmakos pharmic pharmuthi pharology pharos pharyngal pharyngalgia pharyngalgic pharyngeal pharyngectomy pharyngemphraxis pharynges pharyngic pharyngismus pharyngitic pharyngitis pharyngoamygdalitis pharyngobranch pharyngobranchial pharyngobranchiate pharyngocele pharyngoceratosis pharyngodynia pharyngoepiglottic pharyngoepiglottidean pharyngoesophageal pharyngoglossal pharyngoglossus pharyngognath pharyngognathous pharyngographic pharyngography pharyngokeratosis pharyngolaryngeal pharyngolaryngitis pharyngolith pharyngological pharyngology pharyngomaxillary pharyngomycosis pharyngonasal pharyngopalatine pharyngopalatinus pharyngoparalysis pharyngopathy pharyngoplasty pharyngoplegia pharyngoplegic pharyngoplegy pharyngopleural pharyngopneustal pharyngorhinitis pharyngorhinoscopy pharyngoscleroma pharyngoscope pharyngoscopy pharyngospasm pharyngotherapy pharyngotomy pharyngotonsillitis pharyngotyphoid pharyngoxerosis pharynogotome pharynx phascaceous phascolome phase phaseal phaseless phaselin phasemeter phasemy phaseolin phaseolous phaseolunatin phaseometer phases phasianic phasianid phasianine phasianoid phasic phasis phasm phasma phasmatid phasmatoid phasmatrope phasmid phasmoid phasogeneous phasotropy pheal pheasant pheasantry pheasantwood phellandrene phellem phelloderm phellodermal phellogen phellogenetic phellogenic phellonic phelloplastic phelloplastics phelonion phemic phenacaine phenacetin phenaceturic phenacite phenacyl phenakism phenakistoscope phenanthrene phenanthridine phenanthridone phenanthrol phenanthroline phenarsine phenate phenazine phenazone phene phenegol phenene phenethyl phenetidine phenetole phengite phengitical phenic phenicate phenicious phenicopter phenin phenmiazine phenobarbital phenocoll phenocopy phenocryst phenocrystalline phenogenesis phenogenetic phenol phenolate phenolic phenolization phenolize phenological phenologically phenologist phenology phenoloid phenolphthalein phenolsulphonate phenolsulphonephthalein phenolsulphonic phenomena phenomenal phenomenalism phenomenalist phenomenalistic phenomenalistically phenomenality phenomenalization phenomenalize phenomenally phenomenic phenomenical phenomenism phenomenist phenomenistic phenomenize phenomenological phenomenologically phenomenology phenomenon phenoplast phenoplastic phenoquinone phenosafranine phenosal phenospermic phenospermy phenothiazine phenotype phenotypic phenotypical phenotypically phenoxazine phenoxid phenoxide phenozygous phenyl phenylacetaldehyde phenylacetamide phenylacetic phenylalanine phenylamide phenylamine phenylate phenylation phenylboric phenylcarbamic phenylcarbimide phenylene phenylenediamine phenylethylene phenylglycine phenylglycolic phenylglyoxylic phenylhydrazine phenylhydrazone phenylic phenylmethane pheon pheophyl pheophyll pheophytin pheretrer phew phi phial phiale phialful phialide phialine phiallike phialophore phialospore philadelphite philadelphy philalethist philamot philander philanderer philanthid philanthrope philanthropian philanthropic philanthropical philanthropically philanthropinism philanthropinist philanthropism philanthropist philanthropistic philanthropize philanthropy philantomba philarchaist philaristocracy philatelic philatelical philatelically philatelism philatelist philatelistic philately philathletic philematology philharmonic philhellene philhellenic philhellenism philhellenist philhippic philhymnic philiater philippicize philippize philippizer philippus philliloo phillipsine phillipsite phillyrin philobiblian philobiblic philobiblical philobiblist philobotanic philobotanist philobrutish philocalic philocalist philocaly philocathartic philocatholic philocomal philocubist philocynic philocynical philocynicism philocyny philodemic philodespot philodestructiveness philodox philodoxer philodoxical philodramatic philodramatist philofelist philofelon philogarlic philogastric philogeant philogenitive philogenitiveness philograph philographic philogynaecic philogynist philogynous philogyny philohellenian philokleptic philoleucosis philologaster philologastry philologer philologian philologic philological philologically philologist philologistic philologize philologue philology philomath philomathematic philomathematical philomathic philomathical philomathy philomel philomelanist philomuse philomusical philomystic philonatural philoneism philonium philonoist philopagan philopater philopatrian philopena philophilosophos philopig philoplutonic philopoet philopogon philopolemic philopolemical philopornist philoprogeneity philoprogenitive philoprogenitiveness philopterid philopublican philoradical philorchidaceous philornithic philorthodox philosoph philosophaster philosophastering philosophastry philosophedom philosopheme philosopher philosopheress philosophership philosophic philosophical philosophically philosophicalness philosophicide philosophicohistorical philosophicojuristic philosophicolegal philosophicoreligious philosophicotheological philosophism philosophist philosophister philosophistic philosophistical philosophization philosophize philosophizer philosophling philosophobia philosophocracy philosophuncule philosophunculist philosophy philotadpole philotechnic philotechnical philotechnist philothaumaturgic philotheism philotheist philotheistic philotheosophical philotherian philotherianism philoxygenous philozoic philozoist philozoonist philter philterer philterproof philtra philtrum philydraceous phimosed phimosis phimotic phit phiz phizes phizog phlebalgia phlebangioma phlebarteriectasia phlebarteriodialysis phlebectasia phlebectasis phlebectasy phlebectomy phlebectopia phlebectopy phlebemphraxis phlebenteric phlebenterism phlebitic phlebitis phlebogram phlebograph phlebographical phlebography phleboid phleboidal phlebolite phlebolith phlebolithiasis phlebolithic phlebolitic phlebological phlebology phlebometritis phlebopexy phleboplasty phleborrhage phleborrhagia phleborrhaphy phleborrhexis phlebosclerosis phlebosclerotic phlebostasia phlebostasis phlebostenosis phlebostrepsis phlebothrombosis phlebotome phlebotomic phlebotomical phlebotomically phlebotomist phlebotomization phlebotomize phlebotomus phlebotomy phlegm phlegma phlegmagogue phlegmasia phlegmatic phlegmatical phlegmatically phlegmaticalness phlegmaticly phlegmaticness phlegmatism phlegmatist phlegmatous phlegmless phlegmon phlegmonic phlegmonoid phlegmonous phlegmy phlobaphene phlobatannin phloem phloeophagous phloeoterma phlogisma phlogistian phlogistic phlogistical phlogisticate phlogistication phlogiston phlogistonism phlogistonist phlogogenetic phlogogenic phlogogenous phlogopite phlogosed phloretic phloroglucic phloroglucin phlorone phloxin pho phobiac phobic phobism phobist phobophobia phoby phoca phocacean phocaceous phocaenine phocal phocenate phocenic phocenin phocid phociform phocine phocodont phocodontic phocoid phocomelia phocomelous phocomelus phoebe phoenicaceous phoenicean phoenicite phoenicochroite phoenicopteroid phoenicopterous phoenicurous phoenigm phoenix phoenixity phoenixlike phoh pholad pholadian pholadid pholadoid pholcid pholcoid pholido pholidolite pholidosis pholidote phon phonal phonasthenia phonate phonation phonatory phonautogram phonautograph phonautographic phonautographically phone phoneidoscope phoneidoscopic phoneme phonemic phonemics phonendoscope phonesis phonestheme phonetic phonetical phonetically phonetician phoneticism phoneticist phoneticization phoneticize phoneticogrammatical phoneticohieroglyphic phonetics phonetism phonetist phonetization phonetize phoniatrics phoniatry phonic phonics phonikon phonism phono phonocamptic phonocinematograph phonodeik phonodynamograph phonoglyph phonogram phonogramic phonogramically phonogrammatic phonogrammatical phonogrammic phonogrammically phonograph phonographer phonographic phonographical phonographically phonographist phonography phonolite phonolitic phonologer phonologic phonological phonologically phonologist phonology phonometer phonometric phonometry phonomimic phonomotor phonopathy phonophile phonophobia phonophone phonophore phonophoric phonophorous phonophote phonophotography phonophotoscope phonophotoscopic phonoplex phonoscope phonotelemeter phonotype phonotyper phonotypic phonotypical phonotypically phonotypist phonotypy phony phoo phoranthium phoresis phoresy phoria phorid phorminx phorology phorometer phorometric phorometry phorone phoronic phoronid phoronomia phoronomic phoronomically phoronomics phoronomy phoroscope phorozooid phos phose phosgene phosgenic phosgenite phosis phosphagen phospham phosphamic phosphamide phosphamidic phosphammonium phosphatase phosphate phosphated phosphatemia phosphatese phosphatic phosphatide phosphation phosphatization phosphatize phosphaturia phosphaturic phosphene phosphenyl phosphide phosphinate phosphine phosphinic phosphite phospho phosphoaminolipide phosphocarnic phosphocreatine phosphoferrite phosphoglycerate phosphoglyceric phosphoglycoprotein phospholipide phospholipin phosphomolybdate phosphomolybdic phosphonate phosphonic phosphonium phosphophyllite phosphoprotein phosphor phosphorate phosphore phosphoreal phosphorent phosphoreous phosphoresce phosphorescence phosphorescent phosphorescently phosphoreted phosphorhidrosis phosphori phosphoric phosphorical phosphoriferous phosphorism phosphorite phosphoritic phosphorize phosphorogen phosphorogenic phosphorograph phosphorographic phosphorography phosphoroscope phosphorous phosphoruria phosphorus phosphoryl phosphorylase phosphorylation phosphosilicate phosphotartaric phosphotungstate phosphotungstic phosphowolframic phosphuranylite phosphuret phosphuria phosphyl phossy phot photaesthesia photaesthesis photaesthetic photal photalgia photechy photelectrograph photeolic photerythrous photesthesis photic photics photism photistic photo photoactinic photoactivate photoactivation photoactive photoactivity photoaesthetic photoalbum photoalgraphy photoanamorphosis photoaquatint photobathic photobiotic photobromide photocampsis photocatalysis photocatalyst photocatalytic photocatalyzer photocell photocellulose photoceptor photoceramic photoceramics photoceramist photochemic photochemical photochemically photochemigraphy photochemist photochemistry photochloride photochlorination photochromascope photochromatic photochrome photochromic photochromography photochromolithograph photochromoscope photochromotype photochromotypy photochromy photochronograph photochronographic photochronographical photochronographically photochronography photocollograph photocollographic photocollography photocollotype photocombustion photocompose photocomposition photoconductivity photocopier photocopy photocrayon photocurrent photodecomposition photodensitometer photodermatic photodermatism photodisintegration photodissociation photodrama photodramatic photodramatics photodramatist photodramaturgic photodramaturgy photodrome photodromy photodynamic photodynamical photodynamically photodynamics photodysphoria photoelastic photoelasticity photoelectric photoelectrical photoelectrically photoelectricity photoelectron photoelectrotype photoemission photoemissive photoengrave photoengraver photoengraving photoepinastic photoepinastically photoepinasty photoesthesis photoesthetic photoetch photoetcher photoetching photofilm photofinish photofinisher photofinishing photofloodlamp photogalvanograph photogalvanographic photogalvanography photogastroscope photogelatin photogen photogene photogenetic photogenic photogenically photogenous photoglyph photoglyphic photoglyphography photoglyphy photoglyptic photoglyptography photogram photogrammeter photogrammetric photogrammetrical photogrammetry photograph photographable photographee photographer photographeress photographess photographic photographical photographically photographist photographize photographometer photography photogravure photogravurist photogyric photohalide photoheliograph photoheliographic photoheliography photoheliometer photohyponastic photohyponastically photohyponasty photoimpression photoinactivation photoinduction photoinhibition photointaglio photoionization photoisomeric photoisomerization photokinesis photokinetic photolith photolitho photolithograph photolithographer photolithographic photolithography photologic photological photologist photology photoluminescence photoluminescent photolysis photolyte photolytic photoma photomacrograph photomagnetic photomagnetism photomap photomapper photomechanical photomechanically photometeor photometer photometric photometrical photometrically photometrician photometrist photometrograph photometry photomezzotype photomicrogram photomicrograph photomicrographer photomicrographic photomicrography photomicroscope photomicroscopic photomicroscopy photomontage photomorphosis photomural photon photonastic photonasty photonegative photonephograph photonephoscope photoneutron photonosus photooxidation photooxidative photopathic photopathy photoperceptive photoperimeter photoperiod photoperiodic photoperiodism photophane photophile photophilic photophilous photophily photophobe photophobia photophobic photophobous photophone photophonic photophony photophore photophoresis photophosphorescent photophygous photophysical photophysicist photopia photopic photopile photopitometer photoplay photoplayer photoplaywright photopography photopolarigraph photopolymerization photopositive photoprint photoprinter photoprinting photoprocess photoptometer photoradio photoradiogram photoreception photoreceptive photoreceptor photoregression photorelief photoresistance photosalt photosantonic photoscope photoscopic photoscopy photosculptural photosculpture photosensitive photosensitiveness photosensitivity photosensitization photosensitize photosensitizer photosensory photospectroheliograph photospectroscope photospectroscopic photospectroscopical photospectroscopy photosphere photospheric photostability photostable photostat photostationary photostereograph photosurveying photosyntax photosynthate photosynthesis photosynthesize photosynthetic photosynthetically photosynthometer phototachometer phototachometric phototachometrical phototachometry phototactic phototactically phototactism phototaxis phototaxy phototechnic phototelegraph phototelegraphic phototelegraphically phototelegraphy phototelephone phototelephony phototelescope phototelescopic phototheodolite phototherapeutic phototherapeutics phototherapic phototherapist phototherapy photothermic phototonic phototonus phototopographic phototopographical phototopography phototrichromatic phototrope phototrophic phototrophy phototropic phototropically phototropism phototropy phototube phototype phototypic phototypically phototypist phototypographic phototypography phototypy photovisual photovitrotype photovoltaic photoxylography photozinco photozincograph photozincographic photozincography photozincotype photozincotypy photuria phragma phragmocone phragmoconic phragmocyttarous phragmoid phragmosis phrasable phrasal phrasally phrase phraseable phraseless phrasemaker phrasemaking phraseman phrasemonger phrasemongering phrasemongery phraseogram phraseograph phraseographic phraseography phraseological phraseologically phraseologist phraseology phraser phrasify phrasiness phrasing phrasy phrator phratral phratria phratriac phratrial phratry phreatic phreatophyte phrenesia phrenesiac phrenesis phrenetic phrenetically phreneticness phrenic phrenicectomy phrenicocolic phrenicocostal phrenicogastric phrenicoglottic phrenicohepatic phrenicolienal phrenicopericardiac phrenicosplenic phrenicotomy phrenics phrenitic phrenitis phrenocardia phrenocardiac phrenocolic phrenocostal phrenodynia phrenogastric phrenoglottic phrenogram phrenograph phrenography phrenohepatic phrenologer phrenologic phrenological phrenologically phrenologist phrenologize phrenology phrenomagnetism phrenomesmerism phrenopathia phrenopathic phrenopathy phrenopericardiac phrenoplegia phrenoplegy phrenosin phrenosinic phrenospasm phrenosplenic phronesis phrontisterion phrontisterium phrontistery phryganeid phryganeoid phrygium phrymaceous phrynid phrynin phrynoid phthalacene phthalan phthalanilic phthalate phthalazin phthalazine phthalein phthaleinometer phthalic phthalid phthalide phthalimide phthalin phthalocyanine phthalyl phthanite phthinoid phthiocol phthiriasis phthirophagous phthisic phthisical phthisicky phthisiogenesis phthisiogenetic phthisiogenic phthisiologist phthisiology phthisiophobia phthisiotherapeutic phthisiotherapy phthisipneumonia phthisipneumony phthisis phthongal phthongometer phthor phthoric phu phugoid phulkari phulwa phulwara phut phycite phycitol phycochromaceae phycochromaceous phycochrome phycochromophyceous phycocyanin phycocyanogen phycoerythrin phycography phycological phycologist phycology phycomycete phycomycetous phycophaein phycoxanthin phycoxanthine phygogalactic phyla phylacobiosis phylacobiotic phylacteric phylacterical phylacteried phylacterize phylactery phylactic phylactocarp phylactocarpal phylactolaematous phylarch phylarchic phylarchical phylarchy phyle phylephebic phylesis phyletic phyletically phyletism phylic phyllade phyllary phylliform phyllin phylline phyllite phyllitic phyllobranchia phyllobranchial phyllobranchiate phyllocarid phyllocaridan phyllocerate phylloclad phylloclade phyllocladioid phyllocladium phyllocladous phyllocyanic phyllocyanin phyllocyst phyllocystic phyllode phyllodial phyllodination phyllodineous phyllodiniation phyllodinous phyllodium phyllody phylloerythrin phyllogenetic phyllogenous phylloid phylloidal phylloideous phyllomancy phyllomania phyllome phyllomic phyllomorph phyllomorphic phyllomorphosis phyllomorphy phyllophagous phyllophore phyllophorous phyllophyllin phyllophyte phyllopod phyllopodan phyllopode phyllopodiform phyllopodium phyllopodous phylloporphyrin phylloptosis phyllopyrrole phyllorhine phyllorhinine phylloscopine phyllosiphonic phyllosoma phyllosome phyllospondylous phyllostomatoid phyllostomatous phyllostome phyllostomine phyllostomous phyllotactic phyllotactical phyllotaxis phyllotaxy phyllous phylloxanthin phylloxeran phylloxeric phyllozooid phylogenetic phylogenetical phylogenetically phylogenic phylogenist phylogeny phylogerontic phylogerontism phylography phylology phylon phyloneanic phylonepionic phylum phyma phymata phymatic phymatid phymatoid phymatorhysin phymatosis physagogue physalian physalite physcioid physeterine physeteroid physharmonica physianthropy physiatric physiatrical physiatrics physic physical physicalism physicalist physicalistic physicalistically physicality physically physicalness physician physicianary physiciancy physicianed physicianer physicianess physicianless physicianly physicianship physicism physicist physicked physicker physicking physicky physicoastronomical physicobiological physicochemic physicochemical physicochemically physicochemist physicochemistry physicogeographical physicologic physicological physicomathematical physicomathematics physicomechanical physicomedical physicomental physicomorph physicomorphic physicomorphism physicooptics physicophilosophical physicophilosophy physicophysiological physicopsychical physicosocial physicotheological physicotheologist physicotheology physicotherapeutic physicotherapeutics physicotherapy physics physiform physiochemical physiochemically physiocracy physiocrat physiocratic physiocratism physiocratist physiogenesis physiogenetic physiogenic physiogeny physiognomic physiognomical physiognomically physiognomics physiognomist physiognomize physiognomonic physiognomonical physiognomy physiogony physiographer physiographic physiographical physiographically physiography physiolater physiolatrous physiolatry physiologer physiologian physiological physiologically physiologicoanatomic physiologist physiologize physiologue physiologus physiology physiopathological physiophilist physiophilosopher physiophilosophical physiophilosophy physiopsychic physiopsychical physiopsychological physiopsychology physiosociological physiosophic physiosophy physiotherapeutic physiotherapeutical physiotherapeutics physiotherapist physiotherapy physiotype physiotypy physique physiqued physitheism physitheistic physitism physiurgic physiurgy physocarpous physocele physoclist physoclistic physoclistous physogastric physogastrism physogastry physometra physonectous physophoran physophore physophorous physopod physopodan physostigmine physostomatous physostome physostomous phytalbumose phytase phytic phytiferous phytiform phytin phytivorous phytobacteriology phytobezoar phytobiological phytobiology phytochemical phytochemistry phytochlorin phytocidal phytodynamics phytoecological phytoecologist phytoecology phytogamy phytogenesis phytogenetic phytogenetical phytogenetically phytogenic phytogenous phytogeny phytogeographer phytogeographic phytogeographical phytogeographically phytogeography phytoglobulin phytograph phytographer phytographic phytographical phytographist phytography phytohormone phytoid phytol phytolaccaceous phytolatrous phytolatry phytolithological phytolithologist phytolithology phytologic phytological phytologically phytologist phytology phytoma phytome phytomer phytometer phytometric phytometry phytomonad phytomorphic phytomorphology phytomorphosis phyton phytonic phytonomy phytooecology phytopaleontologic phytopaleontological phytopaleontologist phytopaleontology phytoparasite phytopathogen phytopathogenic phytopathologic phytopathological phytopathologist phytopathology phytophagan phytophagic phytophagous phytophagy phytopharmacologic phytopharmacology phytophenological phytophenology phytophil phytophilous phytophylogenetic phytophylogenic phytophylogeny phytophysiological phytophysiology phytoplankton phytopsyche phytoptid phytoptose phytoptosis phytorhodin phytosaur phytosaurian phytoserologic phytoserological phytoserologically phytoserology phytosis phytosociologic phytosociological phytosociologically phytosociologist phytosociology phytosterin phytosterol phytostrote phytosynthesis phytotaxonomy phytotechny phytoteratologic phytoteratological phytoteratologist phytoteratology phytotomist phytotomy phytotopographical phytotopography phytotoxic phytotoxin phytovitellin phytozoan phytozoon phytyl pi pia piaba piacaba piacle piacular piacularity piacularly piacularness piaculum piaffe piaffer pial pialyn pian pianette pianic pianino pianism pianissimo pianist pianiste pianistic pianistically piannet piano pianoforte pianofortist pianograph pianola pianolist pianologue piarhemia piarhemic piassava piaster piastre piation piazine piazza piazzaed piazzaless piazzalike piazzian pibcorn piblokto pibroch pic pica picador picadura pical picamar picara picarel picaresque picarian picaro picaroon picary picayune picayunish picayunishly picayunishness piccadill piccadilly piccalilli piccolo piccoloist pice picene piceoferruginous piceotestaceous piceous piceworth pichi pichiciago pichuric pichurim piciform picine pick pickaback pickable pickableness pickage pickaninny pickaroon pickaway pickax picked pickedly pickedness pickee pickeer picker pickerel pickerelweed pickering pickeringite pickery picket picketboat picketeer picketer pickfork pickietar pickings pickle picklelike pickleman pickler pickleweed pickleworm picklock pickman pickmaw picknick picknicker pickover pickpocket pickpocketism pickpocketry pickpole pickpurse pickshaft picksman picksmith picksome picksomeness pickthank pickthankly pickthankness pickthatch picktooth pickup pickwick pickwork picky picnic picnicker picnickery picnickish picnicky pico picofarad picoid picoline picolinic picot picotah picotee picotite picqueter picra picramic picrasmin picrate picrated picric picrite picrocarmine picroerythrin picrol picrolite picromerite picropodophyllin picrorhiza picrorhizin picrotin picrotoxic picrotoxin picrotoxinin picryl pict pictarnie pictogram pictograph pictographic pictographically pictography pictoradiogram pictorial pictorialism pictorialist pictorialization pictorialize pictorially pictorialness pictoric pictorical pictorically picturability picturable picturableness picturably pictural picture picturecraft pictured picturedom picturedrome pictureful pictureless picturelike picturely picturemaker picturemaking picturer picturesque picturesquely picturesqueness picturesquish picturization picturize pictury picucule picuda picudilla picudo picul piculet piculule pidan piddle piddler piddling piddock pidgin pidjajap pie piebald piebaldism piebaldly piebaldness piece pieceable pieceless piecemaker piecemeal piecemealwise piecen piecener piecer piecette piecewise piecework pieceworker piecing piecrust pied piedfort piedly piedmont piedmontal piedmontite piedness piehouse pieless pielet pielum piemag pieman piemarker pien pienanny piend piepan pieplant piepoudre piepowder pieprint pier pierage pierce pierceable pierced piercel pierceless piercent piercer piercing piercingly piercingness pierdrop pierhead pierid pieridine pierine pierless pierlike pierrot pierrotic pieshop piet pietas pietic pietism pietist pietistic pietistical pietistically pietose piety piewife piewipe piewoman piezo piezochemical piezochemistry piezocrystallization piezoelectric piezoelectrically piezoelectricity piezometer piezometric piezometrical piezometry piff piffle piffler pifine pig pigbelly pigdan pigdom pigeon pigeonable pigeonberry pigeoneer pigeoner pigeonfoot pigeongram pigeonhearted pigeonhole pigeonholer pigeonman pigeonry pigeontail pigeonweed pigeonwing pigeonwood pigface pigfish pigflower pigfoot pigful piggery piggin pigging piggish piggishly piggishness piggle piggy pighead pigheaded pigheadedly pigheadedness pigherd pightle pigless piglet pigling piglinghood pigly pigmaker pigmaking pigman pigment pigmental pigmentally pigmentary pigmentation pigmentize pigmentolysis pigmentophage pigmentose pignolia pignon pignorate pignoration pignoratitious pignorative pignus pignut pigpen pigritude pigroot pigsconce pigskin pigsney pigstick pigsticker pigsty pigtail pigwash pigweed pigwidgeon pigyard piitis pik pika pike piked pikel pikelet pikeman pikemonger piker pikestaff piketail pikey piki piking pikle piky pilage pilandite pilapil pilar pilary pilaster pilastered pilastering pilastrade pilastraded pilastric pilau pilaued pilch pilchard pilcher pilcorn pilcrow pile pileata pileate pileated piled pileiform pileolated pileolus pileorhiza pileorhize pileous piler piles pileus pileweed pilework pileworm pilewort pilfer pilferage pilferer pilfering pilferingly pilferment pilgarlic pilgarlicky pilger pilgrim pilgrimage pilgrimager pilgrimatic pilgrimatical pilgrimdom pilgrimer pilgrimess pilgrimism pilgrimize pilgrimlike pilgrimwise pili pilidium pilifer piliferous piliform piligan piliganine piligerous pilikai pililloo pilimiction pilin piline piling pilipilula pilkins pill pillage pillageable pillagee pillager pillar pillared pillaret pillaring pillarist pillarize pillarlet pillarlike pillarwise pillary pillas pillbox pilled pilledness pillet pilleus pillion pilliver pilliwinks pillmaker pillmaking pillmonger pillorization pillorize pillory pillow pillowcase pillowing pillowless pillowmade pillowwork pillowy pillworm pillwort pilm pilmy pilocarpidine pilocarpine pilocystic piloerection pilomotor pilon pilonidal pilori pilose pilosebaceous pilosine pilosis pilosism pilosity pilot pilotage pilotaxitic pilotee pilothouse piloting pilotism pilotless pilotman pilotry pilotship pilotweed pilous pilpul pilpulist pilpulistic piltock pilula pilular pilule pilulist pilulous pilum pilus pilwillet pily pimaric pimelate pimelic pimelite pimelitis pimento pimenton pimgenet pimienta pimiento pimlico pimola pimp pimperlimpimp pimpernel pimpery pimping pimpish pimple pimpleback pimpled pimpleproof pimpliness pimplo pimploe pimplous pimply pimpship pin pina pinaceous pinaces pinachrome pinacle pinacocytal pinacocyte pinacoid pinacoidal pinacol pinacolate pinacolic pinacolin pinacone pinacoteca pinaculum pinafore pinakiolite pinakoidal pinakotheke pinang pinaster pinatype pinaverdol pinax pinball pinbefore pinbone pinbush pincase pincement pincer pincerlike pincers pincerweed pinch pinchable pinchback pinchbeck pinchbelly pinchcock pinchcommons pinchcrust pinche pinched pinchedly pinchedness pinchem pincher pinchfist pinchfisted pinchgut pinching pinchingly pinchpenny pincoffin pincpinc pincushion pincushiony pind pinda pindarical pindarically pinder pindling pindy pine pineal pinealism pinealoma pineapple pined pinedrops pineland pinene piner pinery pinesap pinetum pineweed pinewoods piney pinfall pinfeather pinfeathered pinfeatherer pinfeathery pinfish pinfold ping pingle pingler pingue pinguecula pinguedinous pinguefaction pinguefy pinguescence pinguescent pinguicula pinguiculaceous pinguid pinguidity pinguiferous pinguin pinguinitescent pinguite pinguitude pinguitudinous pinhead pinheaded pinheadedness pinhold pinhole pinhook pinic pinicoline pinicolous piniferous piniform pining piningly pinion pinioned pinionless pinionlike pinipicrin pinitannic pinite pinitol pinivorous pinjane pinjra pink pinkberry pinked pinkeen pinken pinker pinkeye pinkfish pinkie pinkify pinkily pinkiness pinking pinkish pinkishness pinkly pinkness pinkroot pinksome pinkweed pinkwood pinkwort pinky pinless pinlock pinmaker pinna pinnace pinnacle pinnaclet pinnae pinnaglobin pinnal pinnate pinnated pinnatedly pinnately pinnatifid pinnatifidly pinnatilobate pinnatilobed pinnation pinnatipartite pinnatiped pinnatisect pinnatisected pinnatodentate pinnatopectinate pinnatulate pinned pinnel pinner pinnet pinniferous pinniform pinnigerous pinnigrade pinninervate pinninerved pinning pinningly pinniped pinnipedian pinnisect pinnisected pinnitarsal pinnitentaculate pinniwinkis pinnock pinnoite pinnotere pinnothere pinnotherian pinnula pinnular pinnulate pinnulated pinnule pinnulet pinny pino pinochle pinocytosis pinole pinoleum pinolia pinolin pinon pinonic pinpillow pinpoint pinprick pinproof pinrail pinrowed pinscher pinsons pint pinta pintadera pintado pintadoite pintail pintano pinte pintle pinto pintura pinulus pinweed pinwing pinwork pinworm piny pinyl pinyon pioneer pioneerdom pioneership pionnotes pioscope pioted piotine piotty pioury pious piously piousness pip pipa pipage pipal pipe pipeage pipecoline pipecolinic piped pipefish pipeful pipelayer pipeless pipelike pipeline pipeman pipemouth piper piperaceous piperate piperazin piperazine piperic piperide piperideine piperidge piperidide piperidine piperine piperitious piperitone piperly piperno piperoid piperonal piperonyl pipery piperylene pipestapple pipestem pipestone pipet pipette pipewalker pipewood pipework pipewort pipi piping pipingly pipingness pipiri pipistrel pipistrelle pipit pipkin pipkinet pipless pipped pipper pippin pippiner pippinface pippy piprine piproid pipsissewa pipunculid pipy piquable piquance piquancy piquant piquantly piquantness pique piquet piquia piqure pir piracy piragua piranha pirate piratelike piratery piratess piratical piratically piratism piratize piraty pirijiri piripiri piririgua pirl pirn pirner pirnie pirny pirogue pirol piroplasm piroplasmosis pirouette pirouetter pirouettist pirr pirraura pirrmaw pirssonite pisaca pisachee pisang pisanite pisay piscary piscation piscatology piscator piscatorial piscatorialist piscatorially piscatorian piscatorious piscatory piscian piscicapture piscicapturist piscicolous piscicultural pisciculturally pisciculture pisciculturist piscifauna pisciferous pisciform piscina piscinal piscine piscinity piscivorous pisco pise pish pishaug pishogue pishu pisiform pisk pisky pismire pismirism piso pisolite pisolitic piss pissabed pissant pist pistache pistachio pistacite pistareen pistic pistil pistillaceous pistillar pistillary pistillate pistillid pistilliferous pistilliform pistilligerous pistilline pistillode pistillody pistilloid pistilogy pistle pistol pistole pistoleer pistolet pistolgram pistolgraph pistollike pistolography pistology pistolproof pistolwise piston pistonhead pistonlike pistrix pit pita pitahaya pitanga pitangua pitapat pitapatation pitarah pitau pitaya pitayita pitch pitchable pitchblende pitcher pitchered pitcherful pitcherlike pitcherman pitchfork pitchhole pitchi pitchiness pitching pitchlike pitchman pitchometer pitchout pitchpike pitchpole pitchpoll pitchstone pitchwork pitchy piteous piteously piteousness pitfall pith pithecan pithecanthrope pithecanthropic pithecanthropid pithecanthropoid pithecian pitheciine pithecism pithecoid pithecological pithecometric pithecomorphic pithecomorphism pithful pithily pithiness pithless pithlessly pithole pithos pithsome pithwork pithy pitiability pitiable pitiableness pitiably pitiedly pitiedness pitier pitiful pitifully pitifulness pitikins pitiless pitilessly pitilessness pitless pitlike pitmaker pitmaking pitman pitmark pitmirk pitometer pitpan pitpit pitside pittacal pittance pittancer pitted pitter pitticite pittine pitting pittite pittoid pittosporaceous pittospore pituital pituitary pituite pituitous pituitousness pituri pitwood pitwork pitwright pity pitying pityingly pityocampa pityproof pityriasic pityriasis pityroid piuri piuricapsular pivalic pivot pivotal pivotally pivoter pix pixie pixilated pixilation pixy pize pizza pizzeria pizzicato pizzle placability placable placableness placably placard placardeer placarder placate placater placation placative placatively placatory placcate place placeable placebo placeful placeless placelessly placemaker placemaking placeman placemanship placement placemonger placemongering placenta placental placentalian placentary placentate placentation placentiferous placentiform placentigerous placentitis placentoid placentoma placer placet placewoman placid placidity placidly placidness placitum plack placket plackless placochromatic placode placoderm placodermal placodermatous placodermoid placodont placoganoid placoganoidean placoid placoidal placoidean placophoran placoplast placula placuntitis placuntoma pladaroma pladarosis plaga plagal plagate plage plagiaplite plagiarical plagiarism plagiarist plagiaristic plagiaristically plagiarization plagiarize plagiarizer plagiary plagihedral plagiocephalic plagiocephalism plagiocephaly plagioclase plagioclasite plagioclastic plagioclinal plagiodont plagiograph plagioliparite plagionite plagiopatagium plagiophyre plagiostomatous plagiostome plagiostomous plagiotropic plagiotropically plagiotropism plagiotropous plagium plagose plagosity plague plagued plagueful plagueless plagueproof plaguer plaguesome plaguesomeness plaguily plaguy plaice plaid plaided plaidie plaiding plaidman plaidy plain plainback plainbacks plainer plainful plainhearted plainish plainly plainness plainscraft plainsfolk plainsman plainsoled plainstones plainswoman plaint plaintail plaintiff plaintiffship plaintile plaintive plaintively plaintiveness plaintless plainward plaister plait plaited plaiter plaiting plaitless plaitwork plak plakat plan planable planaea planar planarian planaridan planariform planarioid planarity planate planation planch plancheite plancher planchet planchette planching planchment plancier plandok plane planeness planer planet planeta planetable planetabler planetal planetaria planetarian planetarily planetarium planetary planeted planetesimal planeticose planeting planetist planetkin planetless planetlike planetogeny planetography planetoid planetoidal planetologic planetologist planetology planetule planform planful planfully planfulness plang plangency plangent plangently plangor plangorous planicaudate planicipital planidorsate planifolious planiform planigraph planilla planimetric planimetrical planimetry planineter planipennate planipennine planipetalous planiphyllous planirostral planirostrate planiscope planiscopic planish planisher planispheral planisphere planispheric planispherical planispiral planity plank plankage plankbuilt planker planking plankless planklike planksheer plankter planktologist planktology plankton planktonic planktont plankways plankwise planky planless planlessly planlessness planner planoblast planoblastic planoconical planocylindric planoferrite planogamete planograph planographic planographist planography planohorizontal planolindrical planometer planometry planomiller planoorbicular planorbiform planorbine planorboid planorotund planosol planosome planospiral planospore planosubulate plant planta plantable plantad plantage plantaginaceous plantagineous plantain plantal plantar plantaris plantarium plantation plantationlike plantdom planter planterdom planterly plantership plantigrade plantigrady planting plantivorous plantless plantlet plantlike plantling plantocracy plantsman plantula plantular plantule planula planulan planular planulate planuliform planuloid planuria planury planxty plap plappert plaque plaquette plash plasher plashet plashingly plashment plashy plasm plasma plasmagene plasmapheresis plasmase plasmatic plasmatical plasmation plasmatoparous plasmatorrhexis plasmic plasmocyte plasmocytoma plasmode plasmodesm plasmodesma plasmodesmal plasmodesmic plasmodesmus plasmodia plasmodial plasmodiate plasmodic plasmodiocarp plasmodiocarpous plasmodium plasmogen plasmolysis plasmolytic plasmolytically plasmolyzability plasmolyzable plasmolyze plasmoma plasmophagous plasmophagy plasmoptysis plasmosoma plasmosome plasmotomy plasome plass plasson plastein plaster plasterbill plasterboard plasterer plasteriness plastering plasterlike plasterwise plasterwork plastery plastic plastically plasticimeter plasticine plasticism plasticity plasticization plasticize plasticizer plasticly plastics plastid plastidium plastidome plastidular plastidule plastify plastin plastinoid plastisol plastochondria plastochron plastochrone plastodynamia plastodynamic plastogamic plastogamy plastogene plastomere plastometer plastosome plastotype plastral plastron plastrum plat plataleiform plataleine platan platanaceous platane platanist platano platband platch plate platea plateasm plateau plateaux plated plateful plateholder plateiasmus platelayer plateless platelet platelike platemaker platemaking plateman platen plater platerer plateresque platery plateway platework plateworker platform platformally platformed platformer platformish platformism platformist platformistic platformless platformy platic platicly platilla platina platinamine platinammine platinate plating platinic platinichloric platinichloride platiniferous platiniridium platinite platinization platinize platinochloric platinochloride platinocyanic platinocyanide platinoid platinotype platinous platinum platinumsmith platitude platitudinal platitudinarian platitudinarianism platitudinism platitudinist platitudinization platitudinize platitudinizer platitudinous platitudinously platitudinousness platode platoid platonesque platoon platopic platosamine platosammine platted platten platter platterface platterful platting plattnerite platty platurous platy platybasic platybrachycephalic platybrachycephalous platybregmatic platycarpous platycelian platycelous platycephalic platycephalism platycephaloid platycephalous platycephaly platycercine platycheiria platycnemia platycnemic platycoria platycrania platycranial platycyrtean platydactyl platydactyle platydactylous platydolichocephalic platydolichocephalous platyfish platyglossal platyglossate platyglossia platyhelminth platyhelminthic platyhieric platykurtic platylobate platymeria platymeric platymery platymesaticephalic platymesocephalic platymeter platymyoid platynite platynotal platyodont platyope platyopia platyopic platypellic platypetalous platyphyllous platypod platypodia platypodous platypus platypygous platyrhynchous platyrrhin platyrrhine platyrrhinian platyrrhinic platyrrhinism platyrrhiny platysma platysmamyoides platysomid platystaphyline platystencephalia platystencephalic platystencephalism platystencephaly platysternal platystomous platytrope platytropy plaud plaudation plaudit plaudite plauditor plauditory plauenite plausibility plausible plausibleness plausibly plausive plaustral play playa playability playable playback playbill playbook playbox playboy playboyism playbroker playcraft playcraftsman playday playdown player playerdom playeress playfellow playfellowship playfield playfolk playful playfully playfulness playgoer playgoing playground playhouse playingly playless playlet playlike playmaker playmaking playman playmare playmate playmonger playmongering playock playpen playreader playroom playscript playsome playsomely playsomeness playstead plaything playtime playward playwoman playwork playwright playwrightess playwrighting playwrightry playwriter playwriting plaza plazolite plea pleach pleached pleacher plead pleadable pleadableness pleader pleading pleadingly pleadingness pleaproof pleasable pleasableness pleasance pleasant pleasantable pleasantish pleasantly pleasantness pleasantry pleasantsome please pleasedly pleasedness pleaseman pleaser pleaship pleasing pleasingly pleasingness pleasurability pleasurable pleasurableness pleasurably pleasure pleasureful pleasurehood pleasureless pleasurelessly pleasureman pleasurement pleasuremonger pleasureproof pleasurer pleasuring pleasurist pleasurous pleat pleater pleatless pleb plebe plebeian plebeiance plebeianize plebeianly plebeianness plebeity plebianism plebicolar plebicolist plebificate plebification plebify plebiscitarian plebiscitarism plebiscitary plebiscite plebiscitic plebiscitum plebs pleck plecopteran plecopterid plecopterous plecotine plectognath plectognathic plectognathous plectopter plectopteran plectopterous plectospondyl plectospondylous plectre plectridial plectridium plectron plectrum pled pledge pledgeable pledgee pledgeless pledgeor pledger pledgeshop pledget pledgor plegaphonia plegometer pleiobar pleiochromia pleiochromic pleiomastia pleiomazia pleiomerous pleiomery pleion pleionian pleiophyllous pleiophylly pleiotaxis pleiotropic pleiotropically pleiotropism pleistoseist plemochoe plemyrameter plenarily plenariness plenarium plenarty plenary plenicorn pleniloquence plenilunal plenilunar plenilunary plenilune plenipo plenipotence plenipotent plenipotential plenipotentiality plenipotentiarily plenipotentiarize plenipotentiary plenipotentiaryship plenish plenishing plenishment plenism plenist plenitide plenitude plenitudinous plenshing plenteous plenteously plenteousness plentiful plentifully plentifulness plentify plenty plenum pleny pleochroic pleochroism pleochroitic pleochromatic pleochromatism pleochroous pleocrystalline pleodont pleomastia pleomastic pleomazia pleometrosis pleometrotic pleomorph pleomorphic pleomorphism pleomorphist pleomorphous pleomorphy pleon pleonal pleonasm pleonast pleonaste pleonastic pleonastical pleonastically pleonectic pleonexia pleonic pleophyletic pleopod pleopodite plerergate plerocercoid pleroma pleromatic plerome pleromorph plerophoric plerophory plerosis plerotic plesiobiosis plesiobiotic plesiomorphic plesiomorphism plesiomorphous plesiosaur plesiosaurian plesiosauroid plesiotype plessigraph plessimeter plessimetric plessimetry plessor plethodontid plethora plethoretic plethoretical plethoric plethorical plethorically plethorous plethory plethysmograph plethysmographic plethysmographically plethysmography pleura pleuracanthoid pleural pleuralgia pleuralgic pleurapophysial pleurapophysis pleurectomy pleurenchyma pleurenchymatous pleuric pleuriseptate pleurisy pleurite pleuritic pleuritical pleuritically pleuritis pleurobranch pleurobranchia pleurobranchial pleurobranchiate pleurobronchitis pleurocapsaceous pleurocarp pleurocarpous pleurocele pleurocentesis pleurocentral pleurocentrum pleurocerebral pleuroceroid pleurococcaceous pleurodiran pleurodire pleurodirous pleurodiscous pleurodont pleurodynia pleurodynic pleurogenic pleurogenous pleurohepatitis pleuroid pleurolith pleurolysis pleuron pleuronectid pleuronectoid pleuropedal pleuropericardial pleuropericarditis pleuroperitonaeal pleuroperitoneal pleuroperitoneum pleuropneumonia pleuropneumonic pleuropodium pleuropterygian pleuropulmonary pleurorrhea pleurospasm pleurosteal pleurostict pleurothotonic pleurothotonus pleurotomarioid pleurotomine pleurotomoid pleurotomy pleurotonic pleurotonus pleurotribal pleurotribe pleurotropous pleurotyphoid pleurovisceral pleurum pleuston pleustonic plew plex plexal plexicose plexiform pleximeter pleximetric pleximetry plexodont plexometer plexor plexure plexus pliability pliable pliableness pliably pliancy pliant pliantly pliantness plica plicable plical plicate plicated plicately plicateness plicater plicatile plication plicative plicatocontorted plicatocristate plicatolacunose plicatolobate plicatopapillose plicator plicatoundulate plicatulate plicature pliciferous pliciform plied plier plies pliers plight plighted plighter plim plimsoll plinth plinther plinthiform plinthless plinthlike pliosaur pliosaurian pliothermic pliskie plisky ploat ploce ploceiform plock plod plodder plodderly plodding ploddingly ploddingness plodge ploimate plomb plook plop ploration ploratory plosion plosive plot plote plotful plotless plotlessness plotproof plottage plotted plotter plottery plotting plottingly plotty plough ploughmanship ploughtail plouk plouked plouky plounce plousiocracy plout plouter plover ploverlike plovery plow plowable plowbote plowboy plower plowfish plowfoot plowgang plowgate plowgraith plowhead plowing plowjogger plowland plowlight plowline plowmaker plowman plowmanship plowmell plowpoint plowshare plowshoe plowstaff plowstilt plowtail plowwise plowwoman plowwright ploy ployment pluck pluckage plucked pluckedness plucker pluckily pluckiness pluckless plucklessness plucky plud pluff pluffer pluffy plug plugboard plugdrawer pluggable plugged plugger plugging pluggingly pluggy plughole plugless pluglike plugman plugtray plugtree plum pluma plumaceous plumach plumade plumage plumaged plumagery plumasite plumate plumatellid plumatelloid plumb plumbable plumbage plumbaginaceous plumbagine plumbaginous plumbago plumbate plumbean plumbeous plumber plumbership plumbery plumbet plumbic plumbiferous plumbing plumbism plumbisolvent plumbite plumbless plumbness plumbog plumbojarosite plumboniobate plumbosolvency plumbosolvent plumbous plumbum plumcot plumdamas plumdamis plume plumed plumeless plumelet plumelike plumemaker plumemaking plumeopicean plumeous plumer plumery plumet plumette plumicorn plumier plumieride plumification plumiform plumiformly plumify plumigerous pluminess plumiped plumipede plumist plumless plumlet plumlike plummer plummet plummeted plummetless plummy plumose plumosely plumoseness plumosity plumous plump plumpen plumper plumping plumpish plumply plumpness plumps plumpy plumula plumulaceous plumular plumularian plumulate plumule plumuliform plumulose plumy plunder plunderable plunderage plunderbund plunderer plunderess plundering plunderingly plunderless plunderous plunderproof plunge plunger plunging plungingly plunk plunther plup plupatriotic pluperfect pluperfectly pluperfectness plural pluralism pluralist pluralistic pluralistically plurality pluralization pluralize pluralizer plurally plurative plurennial pluriaxial pluricarinate pluricarpellary pluricellular pluricentral pluricipital pluricuspid pluricuspidate pluridentate pluries plurifacial plurifetation plurification pluriflagellate pluriflorous plurifoliate plurifoliolate plurify pluriglandular pluriguttulate plurilateral plurilingual plurilingualism plurilingualist plurilocular plurimammate plurinominal plurinucleate pluripara pluriparity pluriparous pluripartite pluripetalous pluripotence pluripotent pluripresence pluriseptate pluriserial pluriseriate pluriseriated plurisetose plurispiral plurisporous plurisyllabic plurisyllable plurivalent plurivalve plurivorous plurivory plus plush plushed plushette plushily plushiness plushlike plushy plusquamperfect plussage plutarchy pluteal plutean pluteiform pluteus plutocracy plutocrat plutocratic plutocratical plutocratically plutolatry plutological plutologist plutology plutomania plutonian plutonic plutonism plutonist plutonite plutonium plutonometamorphism plutonomic plutonomist plutonomy pluvial pluvialiform pluvialine pluvian pluvine pluviograph pluviographic pluviographical pluviography pluviometer pluviometric pluviometrical pluviometrically pluviometry pluvioscope pluviose pluviosity pluvious ply plyer plying plyingly plywood pneodynamics pneograph pneomanometer pneometer pneometry pneophore pneoscope pneuma pneumarthrosis pneumathaemia pneumatic pneumatical pneumatically pneumaticity pneumatics pneumatism pneumatist pneumatize pneumatized pneumatocardia pneumatocele pneumatochemical pneumatochemistry pneumatocyst pneumatocystic pneumatode pneumatogenic pneumatogenous pneumatogram pneumatograph pneumatographer pneumatographic pneumatography pneumatolitic pneumatologic pneumatological pneumatologist pneumatology pneumatolysis pneumatolytic pneumatometer pneumatometry pneumatomorphic pneumatonomy pneumatophany pneumatophilosophy pneumatophobia pneumatophonic pneumatophony pneumatophore pneumatophorous pneumatorrhachis pneumatoscope pneumatosic pneumatosis pneumatotactic pneumatotherapeutics pneumatotherapy pneumaturia pneumectomy pneumobacillus pneumocele pneumocentesis pneumochirurgia pneumococcal pneumococcemia pneumococcic pneumococcous pneumococcus pneumoconiosis pneumoderma pneumodynamic pneumodynamics pneumoencephalitis pneumoenteritis pneumogastric pneumogram pneumograph pneumographic pneumography pneumohemothorax pneumohydropericardium pneumohydrothorax pneumolith pneumolithiasis pneumological pneumology pneumolysis pneumomalacia pneumomassage pneumomycosis pneumonalgia pneumonectasia pneumonectomy pneumonedema pneumonia pneumonic pneumonitic pneumonitis pneumonocace pneumonocarcinoma pneumonocele pneumonocentesis pneumonocirrhosis pneumonoconiosis pneumonodynia pneumonoenteritis pneumonoerysipelas pneumonographic pneumonography pneumonokoniosis pneumonolith pneumonolithiasis pneumonolysis pneumonomelanosis pneumonometer pneumonomycosis pneumonoparesis pneumonopathy pneumonopexy pneumonophorous pneumonophthisis pneumonopleuritis pneumonorrhagia pneumonorrhaphy pneumonosis pneumonotherapy pneumonotomy pneumony pneumopericardium pneumoperitoneum pneumoperitonitis pneumopexy pneumopleuritis pneumopyothorax pneumorrachis pneumorrhachis pneumorrhagia pneumotactic pneumotherapeutics pneumotherapy pneumothorax pneumotomy pneumotoxin pneumotropic pneumotropism pneumotyphoid pneumotyphus pneumoventriculography po poaceous poach poachable poacher poachiness poachy poalike pob pobby poblacion pobs pochade pochard pochay poche pochette pocilliform pock pocket pocketable pocketableness pocketbook pocketed pocketer pocketful pocketing pocketknife pocketless pocketlike pockety pockhouse pockily pockiness pockmanteau pockmantie pockmark pockweed pockwood pocky poco pococurante pococuranteism pococurantic pococurantish pococurantism pococurantist pocosin poculary poculation poculent poculiform pod podagra podagral podagric podagrical podagrous podal podalgia podalic podargine podargue podarthral podarthritis podarthrum podatus podaxonial podded podder poddidge poddish poddle poddy podelcoma podeon podesta podesterate podetiiform podetium podex podge podger podgily podginess podgy podial podiatrist podiatry podical podices podilegous podite poditic poditti podium podler podley podlike podobranch podobranchia podobranchial podobranchiate podocarp podocarpous podocephalous pododerm pododynia podogyn podogyne podogynium podolite podology podomancy podomere podometer podometry podophthalmate podophthalmatous podophthalmian podophthalmic podophthalmite podophthalmitic podophthalmous podophyllic podophyllin podophyllotoxin podophyllous podophyllum podoscaph podoscapher podoscopy podosomatous podosperm podostemaceous podostemad podostemonaceous podostomatous podotheca podothecal podsol podsolic podsolization podsolize poduran podurid podware podzol podzolic podzolization podzolize poe poecilitic poecilocyttarous poecilogonous poecilogony poecilomere poecilonym poecilonymic poecilonymy poecilopod poecilopodous poem poematic poemet poemlet poephagous poesie poesiless poesis poesy poet poetaster poetastering poetasterism poetastery poetastress poetastric poetastrical poetastry poetcraft poetdom poetesque poetess poethood poetic poetical poeticality poetically poeticalness poeticism poeticize poeticness poetics poeticule poetito poetization poetize poetizer poetless poetlike poetling poetly poetomachia poetress poetry poetryless poetship poetwise pogamoggan pogge poggy pogoniasis pogoniate pogonion pogonip pogoniris pogonite pogonological pogonologist pogonology pogonotomy pogonotrophy pogrom pogromist pogromize pogy poh poha pohickory pohna pohutukawa poi poietic poignance poignancy poignant poignantly poignet poikilitic poikiloblast poikiloblastic poikilocyte poikilocythemia poikilocytosis poikilotherm poikilothermic poikilothermism poil poilu poimenic poimenics poind poindable poinder poinding point pointable pointage pointed pointedly pointedness pointel pointer pointful pointfully pointfulness pointillism pointillist pointing pointingly pointless pointlessly pointlessness pointlet pointleted pointmaker pointman pointment pointrel pointsman pointswoman pointways pointwise pointy poisable poise poised poiser poison poisonable poisonful poisonfully poisoning poisonless poisonlessness poisonmaker poisonous poisonously poisonousness poisonproof poisonweed poisonwood poitrail poitrel poivrade pokable poke pokeberry poked pokeful pokeloken pokeout poker pokerish pokerishly pokerishness pokeroot pokeweed pokey pokily pokiness poking pokomoo pokunt poky pol polacca polack polacre polar polaric polarigraphic polarimeter polarimetric polarimetry polariscope polariscopic polariscopically polariscopist polariscopy polaristic polaristrobometer polarity polarizability polarizable polarization polarize polarizer polarly polarogram polarograph polarographic polarographically polarography polarward polaxis poldavis poldavy polder polderboy polderman pole polearm poleax poleaxe poleaxer poleburn polecat polehead poleless poleman polemarch polemic polemical polemically polemician polemicist polemics polemist polemize polemoniaceous polemoscope polenta poler polesetter polesman polestar poleward polewards poley poliad poliadic polianite police policed policedom policeless policeman policemanish policemanism policemanlike policemanship policewoman policial policize policizer policlinic policy policyholder poliencephalitis poliencephalomyelitis poligar poligarship poligraphical polio polioencephalitis polioencephalomyelitis poliomyelitis poliomyelopathy polioneuromere poliorcetic poliorcetics poliosis polis polish polishable polished polishedly polishedness polisher polishment polisman polissoir politarch politarchic polite politeful politely politeness politesse politic political politicalism politicalize politically politicaster politician politicious politicist politicize politicizer politicly politico politicomania politicophobia politics politied politist politize polity politzerization politzerize polk polka poll pollable pollack polladz pollage pollakiuria pollam pollan pollarchy pollard pollbook polled pollen pollened polleniferous pollenigerous pollenite pollenivorous pollenless pollenlike pollenproof pollent poller polleten pollex pollical pollicar pollicate pollicitation pollinar pollinarium pollinate pollination pollinator pollinctor pollincture polling pollinia pollinic pollinical polliniferous pollinigerous pollinium pollinivorous pollinization pollinize pollinizer pollinodial pollinodium pollinoid pollinose pollinosis polliwig polliwog pollock polloi pollster pollucite pollutant pollute polluted pollutedly pollutedness polluter polluting pollutingly pollution pollux pollywog polo poloconic polocyte poloist polonaise polonium polony polos polska polt poltergeist poltfoot poltfooted poltina poltinnik poltophagic poltophagist poltophagy poltroon poltroonery poltroonish poltroonishly poltroonism poluphloisboic poluphloisboiotatotic poluphloisboiotic polverine poly polyacanthus polyacid polyacoustic polyacoustics polyact polyactinal polyactine polyad polyadelph polyadelphian polyadelphous polyadenia polyadenitis polyadenoma polyadenous polyadic polyaffectioned polyalcohol polyamide polyamylose polyandria polyandrian polyandrianism polyandric polyandrious polyandrism polyandrist polyandrium polyandrous polyandry polyangular polyantha polyanthous polyanthus polyanthy polyarch polyarchal polyarchical polyarchist polyarchy polyarteritis polyarthric polyarthritic polyarthritis polyarthrous polyarticular polyatomic polyatomicity polyautographic polyautography polyaxial polyaxon polyaxone polyaxonic polybasic polybasicity polybasite polyblast polyborine polybranch polybranchian polybranchiate polybromid polybromide polybunous polybuny polybuttoned polycarboxylic polycarpellary polycarpic polycarpous polycarpy polycellular polycentral polycentric polycephalic polycephalous polycephaly polychaete polychaetous polychasial polychasium polychloride polychoerany polychord polychotomous polychotomy polychrest polychrestic polychrestical polychresty polychroic polychroism polychromasia polychromate polychromatic polychromatism polychromatist polychromatize polychromatophil polychromatophile polychromatophilia polychromatophilic polychrome polychromia polychromic polychromism polychromize polychromous polychromy polychronious polyciliate polycitral polyclad polycladine polycladose polycladous polyclady polyclinic polyclona polycoccous polyconic polycormic polycotyl polycotyledon polycotyledonary polycotyledonous polycotyledony polycotylous polycotyly polycracy polycrase polycratic polycrotic polycrotism polycrystalline polyctenid polycttarian polycyanide polycyclic polycycly polycyesis polycystic polycythemia polycythemic polydactyl polydactyle polydactylism polydactylous polydactyly polydaemoniac polydaemonism polydaemonist polydaemonistic polydemic polydenominational polydental polydermous polydermy polydigital polydimensional polydipsia polydisperse polydomous polydymite polydynamic polyeidic polyeidism polyembryonate polyembryonic polyembryony polyemia polyemic polyenzymatic polyergic polyester polyesthesia polyesthetic polyethnic polyethylene polyfenestral polyflorous polyfoil polyfold polygalaceous polygalic polygam polygamian polygamic polygamical polygamically polygamist polygamistic polygamize polygamodioecious polygamous polygamously polygamy polyganglionic polygastric polygene polygenesic polygenesis polygenesist polygenetic polygenetically polygenic polygenism polygenist polygenistic polygenous polygeny polyglandular polyglobulia polyglobulism polyglossary polyglot polyglotry polyglottal polyglottally polyglotted polyglotter polyglottery polyglottic polyglottically polyglottism polyglottist polyglottonic polyglottous polyglotwise polyglycerol polygon polygonaceous polygonal polygonally polygoneutic polygoneutism polygonic polygonically polygonoid polygonous polygony polygram polygrammatic polygraph polygrapher polygraphic polygraphy polygroove polygrooved polygyn polygynaiky polygynian polygynic polygynious polygynist polygynoecial polygynous polygyny polygyral polygyria polyhaemia polyhaemic polyhalide polyhalite polyhalogen polyharmonic polyharmony polyhedral polyhedric polyhedrical polyhedroid polyhedron polyhedrosis polyhedrous polyhemia polyhidrosis polyhistor polyhistorian polyhistoric polyhistory polyhybrid polyhydric polyhydroxy polyideic polyideism polyidrosis polyiodide polykaryocyte polylaminated polylemma polylepidous polylinguist polylith polylithic polylobular polylogy polyloquent polymagnet polymastia polymastic polymastigate polymastigous polymastism polymastodont polymasty polymath polymathic polymathist polymathy polymazia polymelia polymelian polymely polymer polymere polymeria polymeric polymeride polymerism polymerization polymerize polymerous polymetallism polymetameric polymeter polymethylene polymetochia polymetochic polymicrian polymicrobial polymicrobic polymicroscope polymignite polymixiid polymnite polymolecular polymolybdate polymorph polymorphean polymorphic polymorphism polymorphistic polymorphonuclear polymorphonucleate polymorphosis polymorphous polymorphy polymyarian polymyodian polymyodous polymyoid polymyositis polymythic polymythy polynaphthene polynemid polynemoid polynesic polyneural polyneuric polyneuritic polyneuritis polyneuropathy polynodal polynoid polynome polynomial polynomialism polynomialist polynomic polynucleal polynuclear polynucleate polynucleated polynucleolar polynucleosis polyodont polyodontal polyodontia polyodontoid polyoecious polyoeciously polyoeciousness polyoecism polyoecy polyoicous polyommatous polyonomous polyonomy polyonychia polyonym polyonymal polyonymic polyonymist polyonymous polyonymy polyophthalmic polyopia polyopic polyopsia polyopsy polyorama polyorchidism polyorchism polyorganic polyose polyoxide polyoxymethylene polyp polypage polypaged polypapilloma polyparasitic polyparasitism polyparesis polyparia polyparian polyparium polyparous polypary polypean polyped polypeptide polypetal polypetalous polyphage polyphagia polyphagian polyphagic polyphagist polyphagous polyphagy polyphalangism polypharmacal polypharmacist polypharmacon polypharmacy polypharmic polyphasal polyphase polyphaser polyphemian polyphemic polyphemous polyphenol polyphloesboean polyphloisboioism polyphloisboism polyphobia polyphobic polyphone polyphoned polyphonia polyphonic polyphonical polyphonism polyphonist polyphonium polyphonous polyphony polyphore polyphosphoric polyphotal polyphote polyphylesis polyphyletic polyphyletically polyphylety polyphylline polyphyllous polyphylly polyphylogeny polyphyly polyphyodont polypi polypian polypide polypidom polypiferous polypigerous polypinnate polypite polyplacophoran polyplacophore polyplacophorous polyplastic polyplegia polyplegic polyploid polyploidic polyploidy polypnoea polypnoeic polypod polypodia polypodiaceous polypodous polypody polypoid polypoidal polypomorphic polyporaceous polypore polyporite polyporoid polyporous polypose polyposis polypotome polypous polypragmacy polypragmatic polypragmatical polypragmatically polypragmatism polypragmatist polypragmaty polypragmist polypragmon polypragmonic polypragmonist polyprene polyprism polyprismatic polyprothetic polyprotodont polypseudonymous polypsychic polypsychical polypsychism polypterid polypteroid polyptote polyptoton polyptych polypus polyrhizal polyrhizous polyrhythmic polyrhythmical polysaccharide polysaccharose polysalicylide polysarcia polysarcous polyschematic polyschematist polyscope polyscopic polysemant polysemantic polysemeia polysemia polysemous polysemy polysensuous polysensuousness polysepalous polyseptate polyserositis polysided polysidedness polysilicate polysilicic polysiphonic polysiphonous polysomatic polysomatous polysomaty polysomia polysomic polysomitic polysomous polysomy polyspast polyspaston polyspermal polyspermatous polyspermia polyspermic polyspermous polyspermy polyspondylic polyspondylous polyspondyly polysporangium polyspore polyspored polysporic polysporous polystachyous polystaurion polystele polystelic polystemonous polystichoid polystichous polystomatous polystome polystomium polystylar polystyle polystylous polystyrene polysulphide polysulphuration polysulphurization polysyllabic polysyllabical polysyllabically polysyllabicism polysyllabicity polysyllabism polysyllable polysyllogism polysyllogistic polysymmetrical polysymmetrically polysymmetry polysyndetic polysyndetically polysyndeton polysynthesis polysynthesism polysynthetic polysynthetical polysynthetically polysyntheticism polysynthetism polysynthetize polytechnic polytechnical polytechnics polytechnist polyterpene polythalamian polythalamic polythalamous polythecial polytheism polytheist polytheistic polytheistical polytheistically polytheize polythelia polythelism polythely polythene polythionic polytitanic polytocous polytokous polytoky polytomous polytomy polytonal polytonalism polytonality polytone polytonic polytony polytope polytopic polytopical polytrichaceous polytrichia polytrichous polytrochal polytrochous polytrope polytrophic polytropic polytungstate polytungstic polytype polytypic polytypical polytypy polyuresis polyuria polyuric polyvalence polyvalent polyvinyl polyvinylidene polyvirulent polyvoltine polyzoal polyzoan polyzoarial polyzoarium polyzoary polyzoic polyzoism polyzonal polyzooid polyzoon polzenite pom pomace pomacentrid pomacentroid pomaceous pomade pomander pomane pomarine pomarium pomate pomato pomatomid pomatorhine pomatum pombe pombo pome pomegranate pomelo pomeridian pomerium pomewater pomey pomfret pomiculture pomiculturist pomiferous pomiform pomivorous pomme pommee pommel pommeled pommeler pommet pommey pommy pomological pomologically pomologist pomology pomonal pomonic pomp pompa pompadour pompal pompano pompelmous pompey pompholix pompholygous pompholyx pomphus pompier pompilid pompiloid pompion pompist pompless pompoleon pompon pomposity pompous pompously pompousness pompster pomster pon ponce ponceau poncelet poncho ponchoed pond pondage pondbush ponder ponderability ponderable ponderableness ponderal ponderance ponderancy ponderant ponderary ponderate ponderation ponderative ponderer pondering ponderingly ponderling ponderment ponderomotive ponderosapine ponderosity ponderous ponderously ponderousness pondfish pondful pondgrass pondlet pondman pondok pondokkie pondside pondus pondweed pondwort pondy pone ponent ponerid ponerine poneroid ponerology poney pong ponga pongee poniard ponica ponier ponja pont pontage pontal pontederiaceous pontee pontes pontianak pontic ponticello ponticular ponticulus pontifex pontiff pontific pontifical pontificalia pontificalibus pontificality pontifically pontificate pontification pontifices pontificial pontificially pontificious pontify pontil pontile pontin pontine pontist pontlevis ponto pontocerebellar ponton pontonier pontoon pontooneer pontooner pontooning pontvolant pony ponzite pooa pooch pooder poodle poodledom poodleish poodleship poof poogye pooh poohpoohist pook pooka pookaun pookoo pool pooler pooli poolroom poolroot poolside poolwort pooly poon poonac poonga poonghie poop pooped poophyte poophytic poor poorhouse poorish poorliness poorling poorly poorlyish poormaster poorness poorweed poorwill poot pop popadam popal popcorn popdock pope popedom popeholy popehood popeism popeler popeless popelike popeline popely popery popeship popess popeye popeyed popglove popgun popgunner popgunnery popify popinac popinjay popish popishly popishness popjoy poplar poplared poplin poplinette popliteal popliteus poplolly popomastic popover poppa poppability poppable poppean poppel popper poppet poppethead poppied poppin popple popply poppy poppycock poppycockish poppyfish poppyhead poppylike poppywort popshop populace popular popularism popularity popularization popularize popularizer popularly popularness populate population populational populationist populationistic populationless populator populicide populin populous populously populousness popweed poral porbeagle porcate porcated porcelain porcelainization porcelainize porcelainlike porcelainous porcelaneous porcelanic porcelanite porcelanous porcellanian porcellanid porcellanize porch porched porching porchless porchlike porcine porcupine porcupinish pore pored porelike porencephalia porencephalic porencephalitis porencephalon porencephalous porencephalus porencephaly porer porge porger porgy poricidal poriferal poriferan poriferous poriform porimania poriness poring poringly poriomanic porism porismatic porismatical porismatically poristic poristical porite poritoid pork porkburger porker porkery porket porkfish porkish porkless porkling porkman porkpie porkwood porky pornerastic pornocracy pornocrat pornograph pornographer pornographic pornographically pornographist pornography pornological porodine porodite porogam porogamic porogamous porogamy porokaiwhiria porokeratosis poroma porometer porophyllous poroplastic poroporo pororoca poros poroscope poroscopic poroscopy porose poroseness porosimeter porosis porosity porotic porotype porous porously porousness porpentine porphine porphyraceous porphyratin porphyria porphyrian porphyrin porphyrine porphyrinuria porphyrion porphyrite porphyritic porphyroblast porphyroblastic porphyrogene porphyrogenite porphyrogenitic porphyrogenitism porphyrogeniture porphyrogenitus porphyroid porphyrophore porphyrous porphyry porpitoid porpoise porpoiselike porporate porr porraceous porrect porrection porrectus porret porridge porridgelike porridgy porriginous porrigo porringer porriwiggle porry port porta portability portable portableness portably portage portague portahepatis portail portal portaled portalled portalless portamento portance portass portatile portative portcrayon portcullis porteacid ported porteligature portend portendance portendment portension portent portention portentosity portentous portentously portentousness porteous porter porterage porteress porterhouse porterlike porterly portership portfire portfolio portglaive portglave portgrave porthole porthook porthors porthouse portia portico porticoed portiere portiered portifory portify portio portiomollis portion portionable portional portionally portioner portionist portionize portionless portitor portlast portless portlet portligature portlily portliness portly portman portmanmote portmanteau portmanteaux portmantle portmantologism portment portmoot porto portoise portolan portolano portrait portraitist portraitlike portraiture portray portrayable portrayal portrayer portrayist portrayment portreeve portreeveship portress portside portsider portsman portuary portugais portulacaceous portulan portunian portway porty porule porulose porulous porus porwigle pory posadaship posca pose posement poser poseur posey posh posing posingly posit position positional positioned positioner positionless positival positive positively positiveness positivism positivist positivistic positivistically positivity positivize positor positron positum positure posnet posole posologic posological posologist posology pospolite poss posse posseman possess possessable possessed possessedly possessedness possessing possessingly possessingness possession possessional possessionalism possessionalist possessionary possessionate possessioned possessioner possessionist possessionless possessionlessness possessival possessive possessively possessiveness possessor possessoress possessorial possessoriness possessorship possessory posset possibilism possibilist possibilitate possibility possible possibleness possibly possum possumwood post postabdomen postabdominal postable postabortal postacetabular postadjunct postage postal postallantoic postally postalveolar postament postamniotic postanal postanesthetic postantennal postaortic postapoplectic postappendicular postarterial postarthritic postarticular postarytenoid postaspirate postaspirated postasthmatic postatrial postauditory postauricular postaxiad postaxial postaxially postaxillary postbag postbaptismal postbox postboy postbrachial postbrachium postbranchial postbreakfast postbronchial postbuccal postbulbar postbursal postcaecal postcalcaneal postcalcarine postcanonical postcardiac postcardinal postcarnate postcarotid postcart postcartilaginous postcatarrhal postcava postcaval postcecal postcenal postcentral postcentrum postcephalic postcerebellar postcerebral postcesarean postcibal postclassic postclassical postclassicism postclavicle postclavicula postclavicular postclimax postclitellian postclival postcolon postcolonial postcolumellar postcomitial postcommissural postcommissure postcommunicant postconceptive postcondylar postconfinement postconnubial postconsonantal postcontact postcontract postconvalescent postconvulsive postcordial postcornu postcosmic postcostal postcoxal postcritical postcrural postcubital postdate postdental postdepressive postdetermined postdevelopmental postdiagnostic postdiaphragmatic postdiastolic postdicrotic postdigestive postdigital postdiluvial postdiluvian postdiphtheric postdiphtheritic postdisapproved postdisseizin postdisseizor postdoctoral postdoctorate postdural postdysenteric posted posteen postelection postelementary postembryonal postembryonic postemporal postencephalitic postencephalon postenteral postentry postepileptic poster posterette posteriad posterial posterior posterioric posteriorically posterioristic posterioristically posteriority posteriorly posteriormost posteriors posteriorums posterish posterishness posterist posterity posterize postern posteroclusion posterodorsad posterodorsal posterodorsally posteroexternal posteroinferior posterointernal posterolateral posteromedial posteromedian posteromesial posteroparietal posterosuperior posterotemporal posteroterminal posteroventral posteruptive postesophageal posteternity postethmoid postexilian postexilic postexist postexistence postexistency postexistent postface postfact postfebrile postfemoral postfetal postfix postfixal postfixation postfixed postfixial postflection postflexion postform postfoveal postfrontal postfurca postfurcal postganglionic postgangrenal postgastric postgeminum postgenial postgeniture postglacial postglenoid postglenoidal postgonorrheic postgracile postgraduate postgrippal posthabit posthaste posthemiplegic posthemorrhagic posthepatic posthetomist posthetomy posthexaplaric posthippocampal posthitis postholder posthole posthouse posthumeral posthumous posthumously posthumousness posthumus posthyoid posthypnotic posthypnotically posthypophyseal posthypophysis posthysterical postic postical postically posticous posticteric posticum postil postilion postilioned postillate postillation postillator postimpressionism postimpressionist postimpressionistic postinfective postinfluenzal posting postingly postintestinal postique postischial postjacent postjugular postlabial postlachrymal postlaryngeal postlegitimation postlenticular postless postlike postliminary postliminiary postliminious postliminium postliminous postliminy postloitic postloral postlude postludium postluetic postmalarial postmamillary postmammary postman postmandibular postmaniacal postmarital postmark postmarriage postmaster postmasterlike postmastership postmastoid postmaturity postmaxillary postmaximal postmeatal postmedia postmedial postmedian postmediastinal postmediastinum postmedullary postmeiotic postmeningeal postmenstrual postmental postmeridian postmeridional postmesenteric postmillenarian postmillenarianism postmillennial postmillennialism postmillennialist postmillennian postmineral postmistress postmortal postmortuary postmundane postmuscular postmutative postmycotic postmyxedematous postnarial postnaris postnasal postnatal postnate postnati postnecrotic postnephritic postneural postneuralgic postneuritic postneurotic postnodular postnominal postnotum postnuptial postnuptially postobituary postocular postolivary postomental postoperative postoptic postoral postorbital postordination postorgastic postosseous postotic postpagan postpaid postpalatal postpalatine postpalpebral postpaludal postparalytic postparietal postparotid postparotitic postparoxysmal postparturient postpatellar postpathological postpericardial postpharyngeal postphlogistic postphragma postphrenic postphthisic postpituitary postplace postplegic postpneumonic postponable postpone postponement postponence postponer postpontile postpose postposited postposition postpositional postpositive postpositively postprandial postprandially postpredicament postprophesy postprostate postpubertal postpubescent postpubic postpubis postpuerperal postpulmonary postpupillary postpycnotic postpyloric postpyramidal postpyretic postrachitic postramus postrectal postreduction postremogeniture postremote postrenal postresurrection postresurrectional postretinal postrheumatic postrhinal postrider postrorse postrostral postrubeolar postsaccular postsacral postscalenus postscapula postscapular postscapularis postscarlatinal postscenium postscorbutic postscribe postscript postscriptum postscutellar postscutellum postseason postsigmoid postsign postspasmodic postsphenoid postsphenoidal postsphygmic postspinous postsplenial postsplenic poststernal poststertorous postsuppurative postsurgical postsynaptic postsynsacral postsyphilitic postsystolic posttabetic posttarsal posttetanic postthalamic postthoracic postthyroidal posttibial posttonic posttoxic posttracheal posttrapezoid posttraumatic posttreaty posttubercular posttussive posttympanic posttyphoid postulancy postulant postulantship postulata postulate postulation postulational postulator postulatory postulatum postulnar postumbilical postumbonal postural posture posturer postureteric posturist posturize postuterine postvaccinal postvaricellar postvarioloid postvelar postvenereal postvenous postverbal postvertebral postvesical postvide postvocalic postwar postward postwise postwoman postxyphoid postyard postzygapophysial postzygapophysis posy pot potability potable potableness potagerie potagery potamic potamogetonaceous potamological potamologist potamology potamometer potamophilous potamoplankton potash potashery potass potassa potassamide potassic potassiferous potassium potate potation potative potato potatoes potator potatory potbank potbellied potbelly potboil potboiler potboy potboydom potch potcher potcherman potcrook potdar pote potecary poteen potence potency potent potentacy potentate potential potentiality potentialization potentialize potentially potentialness potentiate potentiation potentiometer potentiometric potentize potently potentness poter potestal potestas potestate potestative poteye potful potgirl potgun pothanger pothead pothecary potheen pother potherb potherment pothery pothole pothook pothookery pothouse pothousey pothunt pothunter pothunting poticary potichomania potichomanist potifer potion potlatch potleg potlicker potlid potlike potluck potmaker potmaking potman potomania potomato potometer potong potoo potoroo potpie potpourri potrack potsherd potshoot potshooter potstick potstone pott pottage pottagy pottah potted potter potterer potteress potteringly pottery potting pottinger pottle pottled potto potty potwaller potwalling potware potwhisky potwork potwort pouce poucer poucey pouch pouched pouchful pouchless pouchlike pouchy poudrette pouf poulaine poulard poulardize poulp poulpe poult poulter poulterer poulteress poultice poulticewise poultry poultrydom poultryist poultryless poultrylike poultryman poultryproof pounamu pounce pounced pouncer pouncet pouncing pouncingly pound poundage poundal poundcake pounder pounding poundkeeper poundless poundlike poundman poundmaster poundmeal poundstone poundworth pour pourer pourie pouring pouringly pourparler pourparley pourpiece pourpoint pourpointer pouser poussette pout pouter poutful pouting poutingly pouty poverish poverishment poverty povertyweed pow powder powderable powdered powderer powderiness powdering powderization powderize powderizer powderlike powderman powdery powdike powdry powellite power powerboat powered powerful powerfully powerfulness powerhouse powerless powerlessly powerlessness powermonger powitch powldoody pownie powsoddy powsowdy powwow powwower powwowism pox poxy poy poyou pozzolanic pozzuolana pozzuolanic praam prabble prabhu practic practicability practicable practicableness practicably practical practicalism practicalist practicality practicalization practicalize practicalizer practically practicalness practicant practice practiced practicedness practicer practician practicianism practicum practitional practitioner practitionery prad pradhana praeabdomen praeacetabular praeanal praecava praecipe praecipuum praecoces praecocial praecognitum praecoracoid praecordia praecordial praecordium praecornu praecox praecuneus praedial praedialist praediality praeesophageal praefect praefectorial praefectus praefervid praefloration praefoliation praehallux praelabrum praelection praelector praelectorship praelectress praeludium praemaxilla praemolar praemunire praenarial praeneural praenomen praenomina praenominal praeoperculum praepositor praepostor praepostorial praepubis praepuce praescutum praesertim praesidium praesphenoid praesternal praesternum praestomium praesystolic praetaxation praetexta praetor praetorial praetorian praetorianism praetorium praetorship praezygapophysis pragmatic pragmatica pragmatical pragmaticality pragmatically pragmaticalness pragmaticism pragmatics pragmatism pragmatist pragmatistic pragmatize pragmatizer prairie prairiecraft prairied prairiedom prairielike prairieweed prairillon praisable praisableness praisably praise praiseful praisefully praisefulness praiseless praiseproof praiser praiseworthy praising praisingly praisworthily praisworthiness prajna prakriti praline pralltriller pram prana prance pranceful prancer prancing prancingly prancy prandial prandially prank pranked pranker prankful prankfulness pranking prankingly prankish prankishly prankishness prankle pranksome pranksomeness prankster pranky prase praseocobaltic praseodidymium praseodymia praseodymium praseolite prasine prasinous prasoid prasophagous prasophagy prastha prat pratal prate prateful pratement pratensian prater pratey pratfall pratiloma pratincole pratincoline pratincolous prating pratingly pratique pratiyasamutpada prattfall prattle prattlement prattler prattling prattlingly prattly prau pravity prawn prawner prawny praxinoscope praxiology praxis pray praya prayer prayerful prayerfully prayerfulness prayerless prayerlessly prayerlessness prayermaker prayermaking prayerwise prayful praying prayingly prayingwise preabdomen preabsorb preabsorbent preabstract preabundance preabundant preabundantly preaccept preacceptance preaccess preaccessible preaccidental preaccidentally preaccommodate preaccommodating preaccommodatingly preaccommodation preaccomplish preaccomplishment preaccord preaccordance preaccount preaccounting preaccredit preaccumulate preaccumulation preaccusation preaccuse preaccustom preaccustomed preacetabular preach preachable preacher preacherdom preacheress preacherize preacherless preacherling preachership preachieved preachification preachify preachily preachiness preaching preachingly preachman preachment preachy preacid preacidity preacidly preacidness preacknowledge preacknowledgment preacquaint preacquaintance preacquire preacquired preacquit preacquittal preact preaction preactive preactively preactivity preacute preacutely preacuteness preadamic preadamite preadamitic preadamitical preadamitism preadapt preadaptable preadaptation preaddition preadditional preaddress preadequacy preadequate preadequately preadhere preadherence preadherent preadjectival preadjective preadjourn preadjournment preadjunct preadjust preadjustable preadjustment preadministration preadministrative preadministrator preadmire preadmirer preadmission preadmit preadmonish preadmonition preadolescent preadopt preadoption preadoration preadore preadorn preadornment preadult preadulthood preadvance preadvancement preadventure preadvertency preadvertent preadvertise preadvertisement preadvice preadvisable preadvise preadviser preadvisory preadvocacy preadvocate preaestival preaffect preaffection preaffidavit preaffiliate preaffiliation preaffirm preaffirmation preaffirmative preafflict preaffliction preafternoon preaged preaggravate preaggravation preaggression preaggressive preagitate preagitation preagonal preagony preagree preagreement preagricultural preagriculture prealarm prealcohol prealcoholic prealgebra prealgebraic prealkalic preallable preallably preallegation preallege prealliance preallied preallot preallotment preallow preallowable preallowably preallowance preallude preallusion preally prealphabet prealphabetical prealtar prealteration prealveolar preamalgamation preambassadorial preambition preambitious preamble preambled preambling preambular preambulary preambulate preambulation preambulatory preanal preanaphoral preanesthetic preanimism preannex preannounce preannouncement preannouncer preantepenult preantepenultimate preanterior preanticipate preantiquity preantiseptic preaortic preappearance preapperception preapplication preappoint preappointment preapprehension preapprise preapprobation preapproval preapprove preaptitude prearm prearrange prearrangement prearrest prearrestment prearticulate preartistic preascertain preascertainment preascitic preaseptic preassigned preassume preassurance preassure preataxic preattachment preattune preaudience preauditory preaver preavowal preaxiad preaxial preaxially prebachelor prebacillary prebake prebalance preballot preballoting prebankruptcy prebaptismal prebaptize prebarbaric prebarbarous prebargain prebasal prebasilar prebeleve prebelief prebeliever prebelieving prebellum prebeloved prebend prebendal prebendary prebendaryship prebendate prebenediction prebeneficiary prebenefit prebeset prebestow prebestowal prebetray prebetrayal prebetrothal prebid prebidding prebill prebless preblessing preblockade preblooming preboast preboding preboil preborn preborrowing preboyhood prebrachial prebrachium prebreathe prebridal prebroadcasting prebromidic prebronchial prebronze prebrute prebuccal prebudget prebudgetary prebullying preburlesque preburn precalculable precalculate precalculation precampaign precancel precancellation precancerous precandidacy precandidature precanning precanonical precant precantation precanvass precapillary precapitalist precapitalistic precaptivity precapture precarcinomatous precardiac precaria precarious precariously precariousness precarium precarnival precartilage precartilaginous precary precast precation precative precatively precatory precaudal precausation precaution precautional precautionary precautious precautiously precautiousness precava precaval precedable precede precedence precedency precedent precedentable precedentary precedented precedential precedentless precedently preceder preceding precelebrant precelebrate precelebration precensure precensus precent precentor precentorial precentorship precentory precentral precentress precentrix precentrum precept preception preceptist preceptive preceptively preceptor preceptoral preceptorate preceptorial preceptorially preceptorship preceptory preceptress preceptual preceptually preceramic precerebellar precerebral precerebroid preceremonial preceremony precertification precertify preces precess precession precessional prechallenge prechampioned prechampionship precharge prechart precheck prechemical precherish prechildhood prechill prechloric prechloroform prechoice prechoose prechordal prechoroid preciation precinct precinction precinctive preciosity precious preciously preciousness precipe precipice precipiced precipitability precipitable precipitance precipitancy precipitant precipitantly precipitantness precipitate precipitated precipitatedly precipitately precipitation precipitative precipitator precipitin precipitinogen precipitinogenic precipitous precipitously precipitousness precirculate precirculation precis precise precisely preciseness precisian precisianism precisianist precision precisional precisioner precisionism precisionist precisionize precisive precitation precite precited precivilization preclaim preclaimant preclaimer preclassic preclassical preclassification preclassified preclassify preclean precleaner precleaning preclerical preclimax preclinical preclival precloacal preclose preclosure preclothe precludable preclude preclusion preclusive preclusively precoagulation precoccygeal precocial precocious precociously precociousness precocity precogitate precogitation precognition precognitive precognizable precognizant precognize precognosce precoil precoiler precoincidence precoincident precoincidently precollapsable precollapse precollect precollectable precollection precollector precollege precollegiate precollude precollusion precollusive precolor precolorable precoloration precoloring precombat precombatant precombination precombine precombustion precommand precommend precomment precommercial precommissural precommissure precommit precommune precommunicate precommunication precommunion precompare precomparison precompass precompel precompensate precompensation precompilation precompile precompiler precompleteness precompletion precompliance precompliant precomplicate precomplication precompose precomposition precompound precompounding precompoundly precomprehend precomprehension precomprehensive precompress precompulsion precomradeship preconceal preconcealment preconcede preconceivable preconceive preconceived preconcentrate preconcentrated preconcentratedly preconcentration preconcept preconception preconceptional preconceptual preconcern preconcernment preconcert preconcerted preconcertedly preconcertedness preconcertion preconcertive preconcession preconcessive preconclude preconclusion preconcur preconcurrence preconcurrent preconcurrently precondemn precondemnation precondensation precondense precondition preconditioned preconduct preconduction preconductor precondylar precondyloid preconfer preconference preconfess preconfession preconfide preconfiguration preconfigure preconfine preconfinedly preconfinemnt preconfirm preconfirmation preconflict preconform preconformity preconfound preconfuse preconfusedly preconfusion precongenial precongested precongestion precongestive precongratulate precongratulation precongressional preconizance preconization preconize preconizer preconjecture preconnection preconnective preconnubial preconquer preconquest preconquestal preconquestual preconscious preconsciously preconsciousness preconsecrate preconsecration preconsent preconsider preconsideration preconsign preconsolation preconsole preconsolidate preconsolidated preconsolidation preconsonantal preconspiracy preconspirator preconspire preconstituent preconstitute preconstruct preconstruction preconsult preconsultation preconsultor preconsume preconsumer preconsumption precontact precontain precontained precontemn precontemplate precontemplation precontemporaneous precontemporary precontend precontent precontention precontently precontentment precontest precontinental precontract precontractive precontractual precontribute precontribution precontributive precontrivance precontrive precontrol precontrolled precontroversial precontroversy preconvention preconversation preconversational preconversion preconvert preconvey preconveyal preconveyance preconvict preconviction preconvince precook precooker precool precooler precooling precopy precoracoid precordia precordial precordiality precordially precordium precorneal precornu precoronation precorrect precorrection precorrectly precorrectness precorrespond precorrespondence precorrespondent precorridor precorrupt precorruption precorruptive precorruptly precoruptness precosmic precosmical precostal precounsel precounsellor precourse precover precovering precox precreate precreation precreative precredit precreditor precreed precritical precriticism precriticize precrucial precrural precrystalline precultivate precultivation precultural preculturally preculture precuneal precuneate precuneus precure precurrent precurricular precurriculum precursal precurse precursive precursor precursory precurtain precut precyclone precyclonic precynical precyst precystic predable predacean predaceous predaceousness predacity predamage predamn predamnation predark predarkness predata predate predation predatism predative predator predatorily predatoriness predatory predawn preday predaylight predaytime predazzite predealer predealing predeath predeathly predebate predebater predebit predebtor predecay predecease predeceaser predeceive predeceiver predeception predecession predecessor predecessorship predecide predecision predecisive predeclaration predeclare predeclination predecline predecree prededicate prededuct prededuction predefault predefeat predefect predefective predefence predefend predefense predefiance predeficiency predeficient predefine predefinite predefinition predefray predefrayal predefy predegeneracy predegenerate predegree predeication predelay predelegate predelegation predeliberate predeliberately predeliberation predelineate predelineation predelinquency predelinquent predelinquently predeliver predelivery predella predelude predelusion predemand predemocracy predemocratic predemonstrate predemonstration predemonstrative predenial predental predentary predentate predeny predepart predepartmental predeparture predependable predependence predependent predeplete predepletion predeposit predepository predepreciate predepreciation predepression predeprivation predeprive prederivation prederive predescend predescent predescribe predescription predesert predeserter predesertion predeserve predeserving predesign predesignate predesignation predesignatory predesirous predesolate predesolation predespair predesperate predespicable predespise predespond predespondency predespondent predestinable predestinarian predestinarianism predestinate predestinately predestination predestinational predestinationism predestinationist predestinative predestinator predestine predestiny predestitute predestitution predestroy predestruction predetach predetachment predetail predetain predetainer predetect predetention predeterminability predeterminable predeterminant predeterminate predeterminately predetermination predeterminative predetermine predeterminer predeterminism predeterministic predetest predetestation predetrimental predevelop predevelopment predevise predevote predevotion predevour prediagnosis prediagnostic predial prediastolic prediatory predicability predicable predicableness predicably predicament predicamental predicamentally predicant predicate predication predicational predicative predicatively predicator predicatory predicrotic predict predictability predictable predictably predictate predictation prediction predictional predictive predictively predictiveness predictor predictory prediet predietary predifferent predifficulty predigest predigestion predikant predilect predilected predilection prediligent prediligently prediluvial prediluvian prediminish prediminishment prediminution predine predinner prediphtheritic prediploma prediplomacy prediplomatic predirect predirection predirector predisability predisable predisadvantage predisadvantageous predisadvantageously predisagree predisagreeable predisagreement predisappointment predisaster predisastrous prediscern prediscernment predischarge prediscipline predisclose predisclosure prediscontent prediscontented prediscontentment prediscontinuance prediscontinuation prediscontinue prediscount prediscountable prediscourage prediscouragement prediscourse prediscover prediscoverer prediscovery prediscreet prediscretion prediscretionary prediscriminate prediscrimination prediscriminator prediscuss prediscussion predisgrace predisguise predisgust predislike predismiss predismissal predismissory predisorder predisordered predisorderly predispatch predispatcher predisperse predispersion predisplace predisplacement predisplay predisponency predisponent predisposable predisposal predispose predisposed predisposedly predisposedness predisposition predispositional predisputant predisputation predispute predisregard predisrupt predisruption predissatisfaction predissolution predissolve predissuade predistinct predistinction predistinguish predistress predistribute predistribution predistributor predistrict predistrust predistrustful predisturb predisturbance prediversion predivert predivide predividend predivider predivinable predivinity predivision predivorce predivorcement predoctorate predocumentary predomestic predominance predominancy predominant predominantly predominate predominately predominatingly predomination predominator predonate predonation predonor predoom predorsal predoubt predoubter predoubtful predraft predrainage predramatic predraw predrawer predread predreadnought predrill predriller predrive predriver predry preduplicate preduplication predusk predwell predynamite predynastic preen preener preeze prefab prefabricate prefabrication prefabricator preface prefaceable prefacer prefacial prefacist prefactor prefactory prefamiliar prefamiliarity prefamiliarly prefamous prefashion prefatial prefator prefatorial prefatorially prefatorily prefatory prefavor prefavorable prefavorably prefavorite prefearful prefearfully prefeast prefect prefectly prefectoral prefectorial prefectorially prefectorian prefectship prefectual prefectural prefecture prefecundation prefecundatory prefederal prefelic prefer preferability preferable preferableness preferably preferee preference preferent preferential preferentialism preferentialist preferentially preferment prefermentation preferred preferredly preferredness preferrer preferrous prefertile prefertility prefertilization prefertilize prefervid prefestival prefeudal prefeudalic prefeudalism prefiction prefictional prefigurate prefiguration prefigurative prefiguratively prefigurativeness prefigure prefigurement prefiller prefilter prefinal prefinance prefinancial prefine prefinish prefix prefixable prefixal prefixally prefixation prefixed prefixedly prefixion prefixture preflagellate preflatter preflattery preflavor preflavoring preflection preflexion preflight preflood prefloration preflowering prefoliation prefool preforbidden preforceps preforgive preforgiveness preforgotten preform preformant preformation preformationary preformationism preformationist preformative preformed preformism preformist preformistic preformulate preformulation prefortunate prefortunately prefortune prefoundation prefounder prefragrance prefragrant prefrankness prefraternal prefraternally prefraud prefreeze prefreshman prefriendly prefriendship prefright prefrighten prefrontal prefulfill prefulfillment prefulgence prefulgency prefulgent prefunction prefunctional prefuneral prefungoidal prefurlough prefurnish pregain pregainer pregalvanize preganglionic pregather pregathering pregeminum pregenerate pregeneration pregenerosity pregenerous pregenerously pregenial pregeniculatum pregeniculum pregenital pregeological pregirlhood preglacial pregladden pregladness preglenoid preglenoidal preglobulin pregnability pregnable pregnance pregnancy pregnant pregnantly pregnantness pregolden pregolfing pregracile pregracious pregrade pregraduation pregranite pregranitic pregratification pregratify pregreet pregreeting pregrievance pregrowth preguarantee preguarantor preguard preguess preguidance preguide preguilt preguiltiness preguilty pregust pregustant pregustation pregustator pregustic prehallux prehalter prehandicap prehandle prehaps preharden preharmonious preharmoniousness preharmony preharsh preharshness preharvest prehatred prehaunt prehaunted prehaustorium prehazard prehazardous preheal prehearing preheat preheated preheater prehemiplegic prehend prehensible prehensile prehensility prehension prehensive prehensiveness prehensor prehensorial prehensory prehepatic prehepaticus preheroic prehesitancy prehesitate prehesitation prehexameral prehistorian prehistoric prehistorical prehistorically prehistorics prehistory prehnite prehnitic preholder preholding preholiday prehorizon prehorror prehostile prehostility prehuman prehumiliate prehumiliation prehumor prehunger prehydration prehypophysis preidea preidentification preidentify preignition preilluminate preillumination preillustrate preillustration preimage preimaginary preimagination preimagine preimbibe preimbue preimitate preimitation preimitative preimmigration preimpair preimpairment preimpart preimperial preimport preimportance preimportant preimportantly preimportation preimposal preimpose preimposition preimpress preimpression preimpressive preimprove preimprovement preinaugural preinaugurate preincarnate preincentive preinclination preincline preinclude preinclusion preincorporate preincorporation preincrease preindebted preindebtedness preindemnification preindemnify preindemnity preindependence preindependent preindependently preindesignate preindicant preindicate preindication preindispose preindisposition preinduce preinducement preinduction preinductive preindulge preindulgence preindulgent preindustrial preindustry preinfect preinfection preinfer preinference preinflection preinflectional preinflict preinfluence preinform preinformation preinhabit preinhabitant preinhabitation preinhere preinherit preinheritance preinitial preinitiate preinitiation preinjure preinjurious preinjury preinquisition preinscribe preinscription preinsert preinsertion preinsinuate preinsinuating preinsinuatingly preinsinuation preinsinuative preinspect preinspection preinspector preinspire preinstall preinstallation preinstill preinstillation preinstruct preinstruction preinstructional preinstructive preinsula preinsular preinsulate preinsulation preinsult preinsurance preinsure preintellectual preintelligence preintelligent preintelligently preintend preintention preintercede preintercession preinterchange preintercourse preinterest preinterfere preinterference preinterpret preinterpretation preinterpretative preinterview preintone preinvent preinvention preinventive preinventory preinvest preinvestigate preinvestigation preinvestigator preinvestment preinvitation preinvite preinvocation preinvolve preinvolvement preiotization preiotize preirrigation preirrigational preissuance preissue prejacent prejournalistic prejudge prejudgement prejudger prejudgment prejudication prejudicative prejudicator prejudice prejudiced prejudicedly prejudiceless prejudiciable prejudicial prejudicially prejudicialness prejudicious prejudiciously prejunior prejurisdiction prejustification prejustify prejuvenile prekindergarten prekindle preknit preknow preknowledge prelabel prelabial prelabor prelabrum prelachrymal prelacrimal prelacteal prelacy prelanguage prelapsarian prelate prelatehood prelateship prelatess prelatial prelatic prelatical prelatically prelaticalness prelation prelatish prelatism prelatist prelatize prelatry prelature prelaunch prelaunching prelawful prelawfully prelawfulness prelease prelect prelection prelector prelectorship prelectress prelecture prelegacy prelegal prelegate prelegatee prelegend prelegendary prelegislative preliability preliable prelibation preliberal preliberality preliberally preliberate preliberation prelicense prelim preliminarily preliminary prelimit prelimitate prelimitation prelingual prelinguistic prelinpinpin preliquidate preliquidation preliteral preliterally preliteralness preliterary preliterate preliterature prelithic prelitigation preloan prelocalization prelocate prelogic prelogical preloral preloreal preloss prelude preluder preludial preludious preludiously preludium preludize prelumbar prelusion prelusive prelusively prelusorily prelusory preluxurious premachine premadness premaintain premaintenance premake premaker premaking premandibular premanhood premaniacal premanifest premanifestation premankind premanufacture premanufacturer premanufacturing premarital premarriage premarry premastery prematch premate prematerial prematernity prematrimonial prematuration premature prematurely prematureness prematurity premaxilla premaxillary premeasure premeasurement premechanical premedia premedial premedian premedic premedical premedicate premedication premedieval premedievalism premeditate premeditatedly premeditatedness premeditatingly premeditation premeditative premeditator premegalithic prememorandum premenace premenstrual premention premeridian premerit premetallic premethodical premial premiant premiate premidnight premidsummer premier premieral premiere premieress premierjus premiership premilitary premillenarian premillenarianism premillennial premillennialism premillennialist premillennialize premillennially premillennian preminister preministry premious premisal premise premisory premisrepresent premisrepresentation premiss premium premix premixer premixture premodel premodern premodification premodify premolar premold premolder premolding premonarchial premonetary premonish premonishment premonition premonitive premonitor premonitorily premonitory premonopolize premonopoly premonumental premoral premorality premorally premorbid premorbidly premorbidness premorning premorse premortal premortification premortify premortuary premosaic premotion premourn premove premovement premover premuddle premultiplication premultiplier premultiply premundane premunicipal premunition premunitory premusical premuster premutative premutiny premycotic premyelocyte premythical prename prenares prenarial prenaris prenasal prenatal prenatalist prenatally prenational prenative prenatural prenaval prender prendre prenebular prenecessitate preneglect preneglectful prenegligence prenegligent prenegotiate prenegotiation preneolithic prenephritic preneural preneuralgic prenight prenoble prenodal prenominal prenominate prenomination prenominical prenotation prenotice prenotification prenotify prenotion prentice prenticeship prenumber prenumbering prenuncial prenuptial prenursery preobedience preobedient preobject preobjection preobjective preobligate preobligation preoblige preobservance preobservation preobservational preobserve preobstruct preobstruction preobtain preobtainable preobtrude preobtrusion preobtrusive preobviate preobvious preobviously preobviousness preoccasioned preoccipital preocclusion preoccultation preoccupancy preoccupant preoccupate preoccupation preoccupative preoccupied preoccupiedly preoccupiedness preoccupier preoccupy preoccur preoccurrence preoceanic preocular preodorous preoffend preoffense preoffensive preoffensively preoffensiveness preoffer preoffering preofficial preofficially preominate preomission preomit preopen preopening preoperate preoperation preoperative preoperatively preoperator preopercle preopercular preoperculum preopinion preopinionated preoppose preopposition preoppress preoppression preoppressor preoptic preoptimistic preoption preoral preorally preorbital preordain preorder preordination preorganic preorganization preorganize preoriginal preoriginally preornamental preoutfit preoutline preoverthrow prep prepainful prepalatal prepalatine prepaleolithic prepanic preparable preparation preparationist preparative preparatively preparator preparatorily preparatory prepardon prepare prepared preparedly preparedness preparement preparental preparer preparietal preparingly preparliamentary preparoccipital preparoxysmal prepartake preparticipation prepartisan prepartition prepartnership prepatellar prepatent prepatriotic prepave prepavement prepay prepayable prepayment prepeduncle prepenetrate prepenetration prepenial prepense prepensely prepeople preperceive preperception preperceptive preperitoneal prepersuade prepersuasion prepersuasive preperusal preperuse prepetition prephragma prephthisical prepigmental prepink prepious prepituitary preplace preplacement preplacental preplan preplant prepledge preplot prepoetic prepoetical prepoison prepolice prepolish prepolitic prepolitical prepolitically prepollence prepollency prepollent prepollex preponder preponderance preponderancy preponderant preponderantly preponderate preponderately preponderating preponderatingly preponderation preponderous preponderously prepontile prepontine preportray preportrayal prepose preposition prepositional prepositionally prepositive prepositively prepositor prepositorial prepositure prepossess prepossessed prepossessing prepossessingly prepossessingness prepossession prepossessionary prepossessor preposterous preposterously preposterousness prepostorship prepotence prepotency prepotent prepotential prepotently prepractical prepractice preprandial prepreference prepreparation preprice preprimary preprimer preprimitive preprint preprofess preprofessional preprohibition prepromise prepromote prepromotion prepronounce prepronouncement preprophetic preprostatic preprove preprovide preprovision preprovocation preprovoke preprudent preprudently prepsychological prepsychology prepuberal prepubertal prepuberty prepubescent prepubic prepubis prepublication prepublish prepuce prepunctual prepunish prepunishment prepupa prepupal prepurchase prepurchaser prepurpose preputial preputium prepyloric prepyramidal prequalification prequalify prequarantine prequestion prequotation prequote preracing preradio prerailroad prerailroadite prerailway preramus prerational prereadiness preready prerealization prerealize prerebellion prereceipt prereceive prereceiver prerecital prerecite prereckon prereckoning prerecognition prerecognize prerecommend prerecommendation prereconcile prereconcilement prereconciliation prerectal preredeem preredemption prereduction prerefer prereference prerefine prerefinement prereform prereformation prereformatory prerefusal prerefuse preregal preregister preregistration preregulate preregulation prereject prerejection prerejoice prerelate prerelation prerelationship prerelease prereligious prereluctation preremit preremittance preremorse preremote preremoval preremove preremunerate preremuneration prerenal prerent prerental prereport prerepresent prerepresentation prereption prerepublican prerequest prerequire prerequirement prerequisite prerequisition preresemblance preresemble preresolve preresort prerespectability prerespectable prerespiration prerespire preresponsibility preresponsible prerestoration prerestrain prerestraint prerestrict prerestriction prereturn prereveal prerevelation prerevenge prereversal prereverse prereview prerevise prerevision prerevival prerevolutionary prerheumatic prerich prerighteous prerighteously prerighteousness prerogatival prerogative prerogatived prerogatively prerogativity prerolandic preromantic preromanticism preroute preroutine preroyal preroyally preroyalty prerupt preruption presacral presacrifice presacrificial presage presageful presagefully presager presagient presaging presagingly presalvation presanctification presanctified presanctify presanguine presanitary presartorial presatisfaction presatisfactory presatisfy presavage presavagery presay presbyacousia presbyacusia presbycousis presbycusis presbyope presbyophrenia presbyophrenic presbyopia presbyopic presbyopy presbyte presbyter presbyteral presbyterate presbyterated presbyteress presbyteria presbyterial presbyterially presbyterium presbytership presbytery presbytia presbytic presbytism prescapula prescapular prescapularis prescholastic preschool prescience prescient prescientific presciently prescind prescindent prescission prescored prescout prescribable prescribe prescriber prescript prescriptibility prescriptible prescription prescriptionist prescriptive prescriptively prescriptiveness prescriptorial prescrive prescutal prescutum preseal presearch preseason preseasonal presecular presecure presee preselect presell preseminal preseminary presence presenced presenceless presenile presenility presensation presension present presentability presentable presentableness presentably presental presentation presentational presentationism presentationist presentative presentatively presentee presentence presenter presential presentiality presentially presentialness presentient presentiment presentimental presentist presentive presentively presentiveness presently presentment presentness presentor preseparate preseparation preseparator preservability preservable preserval preservation preservationist preservative preservatize preservatory preserve preserver preserveress preses presession preset presettle presettlement presexual preshadow preshape preshare presharpen preshelter preship preshipment preshortage preshorten preshow preside presidence presidencia presidency president presidente presidentess presidential presidentially presidentiary presidentship presider presidial presidially presidiary presidio presidium presift presign presignal presignificance presignificancy presignificant presignification presignificative presignificator presignify presimian preslavery presmooth presocial presocialism presocialist presolar presolicit presolicitation presolution presolve presophomore presound prespecialist prespecialize prespecific prespecifically prespecification prespecify prespeculate prespeculation presphenoid presphenoidal presphygmic prespinal prespinous prespiracular presplendor presplenomegalic prespoil prespontaneity prespontaneous prespontaneously prespread presprinkle prespur press pressable pressboard pressdom pressel presser pressfat pressful pressgang pressible pressing pressingly pressingness pression pressive pressman pressmanship pressmark pressor presspack pressroom pressurage pressural pressure pressureless pressureproof pressurize pressurizer presswoman presswork pressworker prest prestabilism prestability prestable prestamp prestandard prestandardization prestandardize prestant prestate prestation prestatistical presteam presteel prester presternal presternum prestidigital prestidigitate prestidigitation prestidigitator prestidigitatorial prestige prestigiate prestigiation prestigiator prestigious prestigiously prestigiousness prestimulate prestimulation prestimulus prestissimo presto prestock prestomial prestomium prestorage prestore prestraighten prestrain prestrengthen prestress prestretch prestricken prestruggle prestubborn prestudious prestudiously prestudiousness prestudy presubdue presubiculum presubject presubjection presubmission presubmit presubordinate presubordination presubscribe presubscriber presubscription presubsist presubsistence presubsistent presubstantial presubstitute presubstitution presuccess presuccessful presuccessfully presuffer presuffering presufficiency presufficient presufficiently presuffrage presuggest presuggestion presuggestive presuitability presuitable presuitably presumable presumably presume presumedly presumer presuming presumption presumptious presumptiously presumptive presumptively presumptuous presumptuously presumptuousness presuperficial presuperficiality presuperficially presuperfluity presuperfluous presuperfluously presuperintendence presuperintendency presupervise presupervision presupervisor presupplemental presupplementary presupplicate presupplication presupply presupport presupposal presuppose presupposition presuppositionless presuppress presuppression presuppurative presupremacy presupreme presurgery presurgical presurmise presurprisal presurprise presurrender presurround presurvey presusceptibility presusceptible presuspect presuspend presuspension presuspicion presuspicious presuspiciously presuspiciousness presustain presutural preswallow presylvian presympathize presympathy presymphonic presymphony presymphysial presymptom presymptomatic presynapsis presynaptic presystematic presystematically presystole presystolic pretabulate pretabulation pretan pretangible pretangibly pretannage pretardily pretardiness pretardy pretariff pretaste preteach pretechnical pretechnically pretelegraph pretelegraphic pretelephone pretelephonic pretell pretemperate pretemperately pretemporal pretend pretendant pretended pretendedly pretender pretendership pretendingly pretendingness pretense pretenseful pretenseless pretension pretensional pretensionless pretensive pretensively pretensiveness pretentative pretentious pretentiously pretentiousness pretercanine preterchristian preterconventional preterdetermined preterdeterminedly preterdiplomatic preterdiplomatically preterequine preteressential pretergress pretergression preterhuman preterience preterient preterintentional preterist preterit preteriteness preterition preteritive preteritness preterlabent preterlegal preterlethal preterminal pretermission pretermit pretermitter preternative preternatural preternaturalism preternaturalist preternaturality preternaturally preternaturalness preternormal preternotorious preternuptial preterpluperfect preterpolitical preterrational preterregular preterrestrial preterritorial preterroyal preterscriptural preterseasonable pretersensual pretervection pretest pretestify pretestimony pretext pretexted pretextuous pretheological prethoracic prethoughtful prethoughtfully prethoughtfulness prethreaten prethrill prethrust pretibial pretimeliness pretimely pretincture pretire pretoken pretone pretonic pretorial pretorship pretorsional pretorture pretournament pretrace pretracheal pretraditional pretrain pretraining pretransact pretransaction pretranscribe pretranscription pretranslate pretranslation pretransmission pretransmit pretransport pretransportation pretravel pretreat pretreatment pretreaty pretrematic pretribal pretry prettification prettifier prettify prettikin prettily prettiness pretty prettyface prettyish prettyism pretubercular pretuberculous pretympanic pretyphoid pretypify pretypographical pretyrannical pretyranny pretzel preultimate preultimately preumbonal preunderstand preundertake preunion preunite preutilizable preutilization preutilize prevacate prevacation prevaccinate prevaccination prevail prevailance prevailer prevailingly prevailingness prevailment prevalence prevalency prevalent prevalently prevalentness prevalescence prevalescent prevalid prevalidity prevalidly prevaluation prevalue prevariation prevaricate prevarication prevaricator prevaricatory prevascular prevegetation prevelar prevenance prevenancy prevene prevenience prevenient preveniently prevent preventability preventable preventative preventer preventible preventingly prevention preventionism preventionist preventive preventively preventiveness preventorium preventure preverb preverbal preverification preverify prevernal preversion prevertebral prevesical preveto previctorious previde previdence preview previgilance previgilant previgilantly previolate previolation previous previously previousness previse previsibility previsible previsibly prevision previsional previsit previsitor previsive previsor prevocal prevocalic prevocally prevocational prevogue prevoid prevoidance prevolitional prevolunteer prevomer prevotal prevote prevoyance prevoyant prevue prewar prewarn prewarrant prewash preweigh prewelcome prewhip prewilling prewillingly prewillingness prewire prewireless prewitness prewonder prewonderment preworldliness preworldly preworship preworthily preworthiness preworthy prewound prewrap prexy prey preyer preyful preyingly preyouthful prezonal prezone prezygapophysial prezygapophysis prezygomatic priacanthid priacanthine priapism priapulid priapuloid price priceable priceably priced priceite priceless pricelessness pricer prich prick prickant pricked pricker pricket prickfoot pricking prickingly prickish prickle prickleback prickled pricklefish prickless prickliness prickling pricklingly pricklouse prickly pricklyback prickmadam prickmedainty prickproof pricks prickseam prickshot prickspur pricktimber prickwood pricky pride prideful pridefully pridefulness prideless pridelessly prideling prideweed pridian priding pridingly pridy pried prier priest priestal priestcap priestcraft priestdom priesteen priestery priestess priestfish priesthood priestianity priestish priestism priestless priestlet priestlike priestliness priestling priestly priestship priestshire prig prigdom prigger priggery priggess priggish priggishly priggishness priggism prighood prigman prill prillion prim prima primacy primage primal primality primar primarian primaried primarily primariness primary primatal primate primateship primatial primatic primatical primavera primaveral prime primegilt primely primeness primer primero primerole primeval primevalism primevally primeverose primevity primevous primevrin primigene primigenial primigenian primigenious primigenous primigravida primine priming primipara primiparity primiparous primipilar primitiae primitial primitias primitive primitively primitivism primitivist primitivistic primitivity primly primness primogenetrix primogenial primogenital primogenitary primogenitive primogenitor primogeniture primogenitureship primogenous primoprime primoprimitive primordality primordia primordial primordialism primordially primordiate primordium primosity primost primp primrose primrosed primrosetide primrosetime primrosy primsie primula primulaceous primulaverin primulaveroside primulic primuline primus primwort primy prince princeage princecraft princedom princehood princekin princeless princelet princelike princeliness princeling princely princeps princeship princess princessdom princesse princesslike princessly princewood princified princify principal principality principally principalness principalship principate principes principia principiant principiate principiation principium principle principulus princock princox prine pringle prink prinker prinkle prinky print printability printable printableness printed printer printerdom printerlike printery printing printless printline printscript printworks priodont prion prionid prionine prionodesmacean prionodesmaceous prionodesmatic prionodont prionopine prior prioracy prioral priorate prioress prioristic prioristically priorite priority priorly priorship priory prisable prisage prisal priscan prism prismal prismatic prismatical prismatically prismatization prismatize prismatoid prismatoidal prismed prismoid prismoidal prismy prisometer prison prisonable prisondom prisoner prisonful prisonlike prisonment prisonous priss prissily prissiness prissy pristane pristine pritch pritchel prithee prius privacity privacy privant private privateer privateersman privately privateness privation privative privatively privativeness privet privilege privileged privileger privily priviness privity privy prizable prize prizeable prizeholder prizeman prizer prizery prizetaker prizeworthy pro proa proabolitionist proabsolutism proabsolutist proabstinence proacademic proacceptance proacquisition proacquittal proaction proactor proaddition proadjournment proadministration proadmission proadoption proadvertising proaesthetic proaggressionist proagitation proagrarian proagreement proagricultural proagule proairesis proairplane proal proalcoholism proalien proalliance proallotment proalteration proamateur proambient proamendment proamnion proamniotic proamusement proanaphora proanaphoral proanarchic proangiosperm proangiospermic proangiospermous proanimistic proannexation proannexationist proantarctic proanthropos proapostolic proappointment proapportionment proappreciation proappropriation proapproval proaquatic proarbitration proarbitrationist proarchery proarctic proaristocratic proarmy proassessment proassociation proatheist proatheistic proathletic proatlas proattack proattendance proauction proaudience proaulion proauthor proauthority proautomobile proavian proaviation proaward prob probabiliorism probabiliorist probabilism probabilist probabilistic probability probabilize probabl probable probableness probably probachelor probal proballoon probang probanishment probankruptcy probant probargaining probaseball probasketball probate probathing probatical probation probational probationary probationer probationerhood probationership probationism probationist probationship probative probatively probator probatory probattle probattleship probe probeable probeer prober probetting probiology probituminous probity problem problematic problematical problematically problematist problematize problemdom problemist problemistic problemize problemwise problockade probonding probonus proborrowing proboscidal proboscidate proboscidean proboscideous proboscides proboscidial proboscidian proboscidiferous proboscidiform probosciform probosciformed proboscis proboscislike probouleutic proboulevard probowling proboxing proboycott probrick probridge probroadcasting probudget probudgeting probuilding probusiness probuying procacious procaciously procacity procaine procambial procambium procanal procancellation procapital procapitalism procapitalist procarnival procarp procarpium procarrier procatalectic procatalepsis procatarctic procatarxis procathedral procedendo procedural procedure proceed proceeder proceeding proceeds proceleusmatic procellarian procellarid procellariine procellas procello procellose procellous procensorship procensure procentralization procephalic procercoid procereal procerebral procerebrum proceremonial proceremonialism proceremonialist proceres procerite proceritic procerity procerus process processal procession processional processionalist processionally processionary processioner processionist processionize processionwise processive processor processual procharity prochein prochemical prochlorite prochondral prochoos prochordal prochorion prochorionic prochromosome prochronic prochronism prochronize prochurch prochurchian procidence procident procidentia procivic procivilian procivism proclaim proclaimable proclaimant proclaimer proclaiming proclaimingly proclamation proclamator proclamatory proclassic proclassical proclergy proclerical proclericalism procline proclisis proclitic proclive proclivitous proclivity proclivous proclivousness procnemial procoelia procoelian procoelous procoercive procollectivistic procollegiate procombat procombination procomedy procommemoration procomment procommercial procommission procommittee procommunal procommunism procommunist procommutation procompensation procompetition procompromise procompulsion proconcentration proconcession proconciliation procondemnation proconfederationist proconference proconfession proconfessionist proconfiscation proconformity proconquest proconscription proconscriptive proconservation proconservationist proconsolidation proconstitutional proconstitutionalism proconsul proconsular proconsulary proconsulate proconsulship proconsultation procontinuation proconvention proconventional proconviction procoracoid procoracoidal procorporation procosmetic procosmopolitan procotton procourt procrastinate procrastinating procrastinatingly procrastination procrastinative procrastinatively procrastinator procrastinatory procreant procreate procreation procreative procreativeness procreator procreatory procreatress procreatrix procremation procritic procritique procrypsis procryptic procryptically proctal proctalgia proctalgy proctatresia proctatresy proctectasia proctectomy procteurynter proctitis proctocele proctoclysis proctocolitis proctocolonoscopy proctocystoplasty proctocystotomy proctodaeal proctodaeum proctodynia proctoelytroplastic proctologic proctological proctologist proctology proctoparalysis proctoplastic proctoplasty proctoplegia proctopolypus proctoptoma proctoptosis proctor proctorage proctoral proctorial proctorially proctorical proctorization proctorize proctorling proctorrhagia proctorrhaphy proctorrhea proctorship proctoscope proctoscopic proctoscopy proctosigmoidectomy proctosigmoiditis proctospasm proctostenosis proctostomy proctotome proctotomy proctotresia proctotrypid proctotrypoid proctovalvotomy procumbent procurable procuracy procural procurance procurate procuration procurative procurator procuratorate procuratorial procuratorship procuratory procuratrix procure procurement procurer procuress procurrent procursive procurvation procurved procyoniform procyonine proczarist prod prodatary prodder proddle prodecoration prodefault prodefiance prodelay prodelision prodemocratic prodenominational prodentine prodeportation prodespotic prodespotism prodialogue prodigal prodigalish prodigalism prodigality prodigalize prodigally prodigiosity prodigious prodigiously prodigiousness prodigus prodigy prodisarmament prodisplay prodissoconch prodissolution prodistribution prodition proditorious proditoriously prodivision prodivorce prodproof prodramatic prodroma prodromal prodromatic prodromatically prodrome prodromic prodromous prodromus producal produce produceable produceableness produced producent producer producership producibility producible producibleness product producted productibility productible productid productile production productional productionist productive productively productiveness productivity productoid productor productory productress proecclesiastical proeconomy proeducation proeducational proegumenal proelectric proelectrical proelectrification proelectrocution proelimination proem proembryo proembryonic proemial proemium proemployee proemptosis proenforcement proenlargement proenzym proenzyme proepimeron proepiscopist proepisternum proequality proethical proethnic proethnically proetid proevolution proevolutionist proexamination proexecutive proexemption proexercise proexperiment proexpert proexporting proexposure proextension proextravagance prof profaculty profanable profanableness profanably profanation profanatory profanchise profane profanely profanement profaneness profaner profanism profanity profanize profarmer profection profectional profectitious profederation profeminism profeminist proferment profert profess professable professed professedly profession professional professionalism professionalist professionality professionalization professionalize professionally professionist professionize professionless professive professively professor professorate professordom professoress professorial professorialism professorially professoriate professorlike professorling professorship professory proffer profferer proficience proficiency proficient proficiently proficientness profiction proficuous proficuously profile profiler profilist profilograph profit profitability profitable profitableness profitably profiteer profiteering profiter profiting profitless profitlessly profitlessness profitmonger profitmongering profitproof proflated proflavine profligacy profligate profligately profligateness profligation proflogger profluence profluent profluvious profluvium proforeign profound profoundly profoundness profraternity profugate profulgent profunda profundity profuse profusely profuseness profusion profusive profusively profusiveness prog progambling progamete progamic proganosaur progenerate progeneration progenerative progenital progenitive progenitiveness progenitor progenitorial progenitorship progenitress progenitrix progeniture progenity progeny progeotropic progeotropism progeria progermination progestational progesterone progestin progger proglottic proglottid proglottidean proglottis prognathi prognathic prognathism prognathous prognathy progne prognose prognosis prognostic prognosticable prognostically prognosticate prognostication prognosticative prognosticator prognosticatory progoneate progospel progovernment program programist programistic programma programmar programmatic programmatically programmatist programmer progrede progrediency progredient progress progresser progression progressional progressionally progressionary progressionism progressionist progressism progressist progressive progressively progressiveness progressivism progressivist progressivity progressor proguardian progymnosperm progymnospermic progymnospermous progypsy prohaste prohibit prohibiter prohibition prohibitionary prohibitionism prohibitionist prohibitive prohibitively prohibitiveness prohibitor prohibitorily prohibitory proholiday prohostility prohuman prohumanistic prohydrotropic prohydrotropism proidealistic proimmunity proinclusion proincrease proindemnity proindustrial proinjunction proinnovationist proinquiry proinsurance prointervention proinvestment proirrigation projacient project projectable projectedly projectile projecting projectingly projection projectional projectionist projective projectively projectivity projector projectress projectrix projecture projicience projicient projiciently projournalistic projudicial proke prokeimenon proker prokindergarten proklausis prolabium prolabor prolacrosse prolactin prolamin prolan prolapse prolapsus prolarva prolarval prolate prolately prolateness prolation prolative prolatively proleague proleaguer prolectite proleg prolegate prolegislative prolegomena prolegomenal prolegomenary prolegomenist prolegomenon prolegomenous proleniency prolepsis proleptic proleptical proleptically proleptics proletairism proletarian proletarianism proletarianization proletarianize proletarianly proletarianness proletariat proletariatism proletarization proletarize proletary proletcult proleucocyte proleukocyte prolicense prolicidal prolicide proliferant proliferate proliferation proliferative proliferous proliferously prolific prolificacy prolifical prolifically prolificalness prolificate prolification prolificity prolificly prolificness prolificy prolify proligerous proline proliquor proliterary proliturgical proliturgist prolix prolixity prolixly prolixness prolocution prolocutor prolocutorship prolocutress prolocutrix prologist prologize prologizer prologos prologue prologuelike prologuer prologuist prologuize prologuizer prologus prolong prolongable prolongableness prolongably prolongate prolongation prolonge prolonger prolongment prolusion prolusionize prolusory prolyl promachinery promachos promagisterial promagistracy promagistrate promajority promammal promammalian promarriage promatrimonial promatrimonialist promaximum promemorial promenade promenader promenaderess promercantile promercy promerger promeristem promerit promeritor promethium promic promilitarism promilitarist promilitary prominence prominency prominent prominently prominimum proministry prominority promisable promiscuity promiscuous promiscuously promiscuousness promise promisee promiseful promiseless promisemonger promiseproof promiser promising promisingly promisingness promisor promissionary promissive promissor promissorily promissory promitosis promittor promnesia promoderation promoderationist promodernist promodernistic promonarchic promonarchical promonarchicalness promonarchist promonopolist promonopoly promontoried promontory promoral promorph promorphological promorphologically promorphologist promorphology promotable promote promotement promoter promotion promotional promotive promotiveness promotor promotorial promotress promotrix promovable promovent prompt promptbook prompter promptitude promptive promptly promptness promptress promptuary prompture promulgate promulgation promulgator promulge promulger promuscidate promuscis promycelial promycelium promythic pronaos pronate pronation pronational pronationalism pronationalist pronationalistic pronative pronatoflexor pronator pronaval pronavy prone pronegotiation pronegro pronegroism pronely proneness pronephric pronephridiostome pronephron pronephros proneur prong prongbuck pronged pronger pronghorn pronglike pronic pronograde pronominal pronominalize pronominally pronomination pronotal pronotum pronoun pronounal pronounce pronounceable pronounced pronouncedly pronouncement pronounceness pronouncer pronpl pronto pronuba pronubial pronuclear pronucleus pronumber pronunciability pronunciable pronuncial pronunciamento pronunciation pronunciative pronunciator pronunciatory pronymph pronymphal proo prooemiac prooemion prooemium proof proofer proofful proofing proofless prooflessly proofness proofread proofreader proofreading proofroom proofy prop propadiene propaedeutic propaedeutical propaedeutics propagability propagable propagableness propagand propaganda propagandic propagandism propagandist propagandistic propagandistically propagandize propagate propagation propagational propagative propagator propagatory propagatress propago propagulum propale propalinal propane propanedicarboxylic propanol propanone propapist proparasceve propargyl propargylic proparian proparliamental proparoxytone proparoxytonic proparticipation propatagial propatagian propatagium propatriotic propatriotism propatronage propayment propellable propellant propellent propeller propelment propend propendent propene propenoic propense propensely propenseness propension propensitude propensity propenyl propenylic proper properispome properispomenon properitoneal properly properness propertied property propertyless propertyship propessimism propessimist prophase prophasis prophecy prophecymonger prophesiable prophesier prophesy prophet prophetess prophethood prophetic prophetical propheticality prophetically propheticalness propheticism propheticly prophetism prophetize prophetless prophetlike prophetry prophetship prophilosophical prophloem prophoric prophototropic prophototropism prophylactic prophylactical prophylactically prophylaxis prophylaxy prophyll prophyllum propination propine propinoic propinquant propinque propinquity propinquous propiolaldehyde propiolate propiolic propionate propione propionic propionitril propionitrile propionyl propitiable propitial propitiate propitiatingly propitiation propitiative propitiator propitiatorily propitiatory propitious propitiously propitiousness proplasm proplasma proplastic propless propleural propleuron proplex proplexus propodeal propodeon propodeum propodial propodiale propodite propoditic propodium propolis propolitical propolization propolize propone proponement proponent proponer propons propooling propopery proportion proportionability proportionable proportionableness proportionably proportional proportionalism proportionality proportionally proportionate proportionately proportionateness proportioned proportioner proportionless proportionment proposable proposal proposant propose proposer proposition propositional propositionally propositionize propositus propound propounder propoundment propoxy proppage propper propraetor propraetorial propraetorian proprecedent propriation proprietage proprietarian proprietariat proprietarily proprietary proprietor proprietorial proprietorially proprietorship proprietory proprietous proprietress proprietrix propriety proprioception proprioceptive proprioceptor propriospinal proprium proprivilege proproctor proprofit proprovincial proprovost props propterygial propterygium proptosed proptosis propublication propublicity propugnacled propugnaculum propugnation propugnator propugner propulsation propulsatory propulsion propulsity propulsive propulsor propulsory propunishment propupa propupal propurchase propwood propygidium propyl propylacetic propylaeum propylamine propylation propylene propylic propylidene propylite propylitic propylitization propylon propyne propynoic proquaestor proracing prorailroad prorata proratable prorate proration prore proreader prorealism prorealist prorealistic proreality prorean prorebate prorebel prorecall proreciprocation prorecognition proreconciliation prorector prorectorate proredemption proreduction proreferendum proreform proreformist proregent prorelease proreptilian proreption prorepublican proresearch proreservationist proresignation prorestoration prorestriction prorevision prorevisionist prorevolution prorevolutionary prorevolutionist prorhinal proritual proritualistic prorogate prorogation prorogator prorogue proroguer proromance proromantic proromanticism proroyal proroyalty prorrhesis prorsad prorsal proruption prosabbath prosabbatical prosacral prosaic prosaical prosaically prosaicalness prosaicism prosaicness prosaism prosaist prosar prosateur proscapula proscapular proscenium proscholastic proschool proscientific proscolecine proscolex proscribable proscribe proscriber proscript proscription proscriptional proscriptionist proscriptive proscriptively proscriptiveness proscutellar proscutellum proscynemata prose prosecrecy prosecretin prosect prosection prosector prosectorial prosectorium prosectorship prosecutable prosecute prosecution prosecutor prosecutrix proselenic proselike proselyte proselyter proselytical proselytingly proselytism proselytist proselytistic proselytization proselytize proselytizer proseman proseminar proseminary proseminate prosemination prosencephalic prosencephalon prosenchyma prosenchymatous proseneschal proser prosethmoid proseucha proseuche prosification prosifier prosify prosiliency prosilient prosiliently prosilverite prosily prosimian prosiness prosing prosingly prosiphon prosiphonal prosiphonate prosish prosist proslambanomenos proslave proslaver proslavery proslaveryism prosneusis proso prosobranch prosobranchiate prosocele prosodal prosode prosodemic prosodetic prosodiac prosodiacal prosodiacally prosodial prosodially prosodian prosodic prosodical prosodically prosodion prosodist prosodus prosody prosogaster prosogyrate prosogyrous prosoma prosomal prosomatic prosonomasia prosopalgia prosopalgic prosopantritis prosopectasia prosophist prosopic prosopically prosopite prosoplasia prosopography prosopon prosoponeuralgia prosopoplegia prosopoplegic prosopopoeia prosopopoeial prosoposchisis prosopospasm prosopotocia prosopyl prosopyle prosorus prospect prospection prospective prospectively prospectiveness prospectless prospector prospectus prospectusless prospeculation prosper prosperation prosperity prosperous prosperously prosperousness prospicience prosporangium prosport pross prossy prostatauxe prostate prostatectomy prostatelcosis prostatic prostaticovesical prostatism prostatitic prostatitis prostatocystitis prostatocystotomy prostatodynia prostatolith prostatomegaly prostatometer prostatomyomectomy prostatorrhea prostatorrhoea prostatotomy prostatovesical prostatovesiculectomy prostatovesiculitis prostemmate prostemmatic prosternal prosternate prosternum prostheca prosthenic prosthesis prosthetic prosthetically prosthetics prosthetist prosthion prosthionic prosthodontia prosthodontist prostitute prostitutely prostitution prostitutor prostomial prostomiate prostomium prostrate prostration prostrative prostrator prostrike prostyle prostylos prosubmission prosubscription prosubstantive prosubstitution prosuffrage prosupervision prosupport prosurgical prosurrender prosy prosyllogism prosyndicalism prosyndicalist protactic protactinium protagon protagonism protagonist protalbumose protamine protandric protandrism protandrous protandrously protandry protanomal protanomalous protanope protanopia protanopic protargentum protargin protariff protarsal protarsus protasis protaspis protatic protatically protax protaxation protaxial protaxis prote protea proteaceous protead protean proteanly proteanwise protease protechnical protect protectant protectible protecting protectingly protectingness protection protectional protectionate protectionism protectionist protectionize protectionship protective protectively protectiveness protector protectoral protectorate protectorial protectorian protectorless protectorship protectory protectress protectrix protege protegee protegulum proteic proteide proteidean proteidogenous proteiform protein proteinaceous proteinase proteinic proteinochromogen proteinous proteinuria protelytropteran protelytropteron protelytropterous protemperance protempirical protemporaneous protend protension protensity protensive protensively proteoclastic proteogenous proteolysis proteolytic proteopectic proteopexic proteopexis proteopexy proteosaurid proteose proteosomal proteosome proteosuria protephemeroid proterandrous proterandrousness proterandry proteranthous proterobase proteroglyph proteroglyphic proteroglyphous proterogynous proterogyny proterothesis proterotype protervity protest protestable protestancy protestant protestantism protestation protestator protestatory protester protestingly protestive protestor protetrarch protevangel protevangelion protevangelium protext prothalamia prothalamion prothalamium prothallia prothallial prothallic prothalline prothallium prothalloid prothallus protheatrical protheca prothesis prothetic prothetical prothetically prothonotarial prothonotariat prothonotary prothonotaryship prothoracic prothorax prothrift prothrombin prothrombogen prothyl prothysteron protide protiodide protist protistan protistic protistological protistologist protistology protiston protium proto protoactinium protoalbumose protoamphibian protoanthropic protoapostate protoarchitect protobacco protobasidiomycetous protobasidium protobishop protoblast protoblastic protoblattoid protobranchiate protocalcium protocanonical protocaseose protocatechualdehyde protocatechuic protocercal protocerebral protocerebrum protochemist protochemistry protochloride protochlorophyll protochordate protochromium protochronicler protocitizen protoclastic protocneme protococcaceous protococcal protococcoid protocol protocolar protocolary protocoleopteran protocoleopteron protocoleopterous protocolist protocolization protocolize protoconch protoconchal protocone protoconid protoconule protoconulid protocopper protocorm protodeacon protoderm protodevil protodonatan protodonate protodont protodramatic protodynastic protoelastose protoepiphyte protoforaminifer protoforester protogaster protogelatose protogenal protogenes protogenesis protogenetic protogenic protogenist protogine protoglobulose protogod protogonous protogospel protograph protogynous protogyny protohematoblast protohemipteran protohemipteron protohemipterous protoheresiarch protohistorian protohistoric protohistory protohomo protohuman protohydrogen protohymenopteran protohymenopteron protohymenopterous protoiron protoleration protoleucocyte protoleukocyte protolithic protoliturgic protolog protologist protoloph protoma protomagister protomagnate protomagnesium protomala protomalal protomalar protomammal protomammalian protomanganese protomartyr protome protomeristem protomerite protomeritic protometal protometallic protometaphrast protomonostelic protomorph protomorphic protomyosinose proton protone protonegroid protonema protonemal protonematal protonematoid protoneme protonephridial protonephridium protonephros protoneuron protoneurone protonic protonickel protonitrate protonotater protonym protonymph protonymphal protopapas protopappas protoparent protopathia protopathic protopathy protopatriarchal protopatrician protopattern protopectin protopectinase protopepsia protoperlarian protophilosophic protophloem protophyll protophyte protophytic protopin protopine protoplasm protoplasma protoplasmal protoplasmatic protoplasmic protoplast protoplastic protopod protopodial protopodite protopoditic protopoetic protopope protoporphyrin protopragmatic protopresbyter protopresbytery protoprism protoproteose protoprotestant protopteran protopteridophyte protopterous protopyramid protore protorebel protoreligious protoreptilian protorosaur protorosaurian protorosauroid protorthopteran protorthopteron protorthopterous protosalt protosaurian protoscientific protosilicate protosilicon protosinner protosiphonaceous protosocial protosolution protospasm protospore protostele protostelic protostome protostrontium protosulphate protosulphide protosyntonose prototaxites prototheca protothecal prototheme protothere prototherian prototitanium prototraitor prototroch prototrochal prototrophic prototypal prototype prototypic prototypical prototypically prototypographer prototyrant protovanadium protoveratrine protovertebra protovertebral protovestiary protovillain protovum protoxide protoxylem protozoacidal protozoacide protozoal protozoan protozoea protozoean protozoiasis protozoic protozoological protozoologist protozoology protozoon protozoonal protracheate protract protracted protractedly protractedness protracter protractible protractile protractility protraction protractive protractor protrade protradition protraditional protragedy protragical protragie protransfer protranslation protransubstantiation protravel protreasurer protreaty protreptic protreptical protriaene protropical protrudable protrude protrudent protrusible protrusile protrusion protrusive protrusively protrusiveness protuberance protuberancy protuberant protuberantial protuberantly protuberantness protuberate protuberosity protuberous proturan protutor protutory protyl protyle protype proudful proudhearted proudish proudishly proudling proudly proudness prouniformity prounion prounionist prouniversity proustite provability provable provableness provably provaccinist provand provant provascular prove provect provection proved proveditor provedly provedor provedore proven provenance provender provenience provenient provenly proventricular proventricule proventriculus prover proverb proverbial proverbialism proverbialist proverbialize proverbially proverbic proverbiologist proverbiology proverbize proverblike provicar provicariate providable providance provide provided providence provident providential providentialism providentially providently providentness provider providing providore providoring province provincial provincialate provincialism provincialist provinciality provincialization provincialize provincially provincialship provinciate provinculum provine proving provingly provision provisional provisionality provisionally provisionalness provisionary provisioner provisioneress provisionless provisionment provisive proviso provisor provisorily provisorship provisory provitamin provivisection provivisectionist provocant provocation provocational provocative provocatively provocativeness provocator provocatory provokable provoke provokee provoker provoking provokingly provokingness provolunteering provost provostal provostess provostorial provostry provostship prow prowar prowarden prowaterpower prowed prowersite prowess prowessed prowessful prowl prowler prowling prowlingly proxenet proxenete proxenetism proxenos proxenus proxeny proxically proximad proximal proximally proximate proximately proximateness proximation proximity proximo proximobuccal proximolabial proximolingual proxy proxyship proxysm prozone prozoning prozygapophysis prozymite prude prudelike prudely prudence prudent prudential prudentialism prudentialist prudentiality prudentially prudentialness prudently prudery prudish prudishly prudishness prudist prudity pruh pruinate pruinescence pruinose pruinous prulaurasin prunable prunableness prunably prunase prunasin prune prunell prunella prunelle prunello pruner prunetin prunetol pruniferous pruniform pruning prunitrin prunt prunted prurience pruriency prurient pruriently pruriginous prurigo pruriousness pruritic pruritus prusiano prussiate prussic prut prutah pry pryer prying pryingly pryingness pryler pryproof pryse prytaneum prytanis prytanize prytany psalis psalm psalmic psalmist psalmister psalmistry psalmless psalmodial psalmodic psalmodical psalmodist psalmodize psalmody psalmograph psalmographer psalmography psalmy psaloid psalter psalterial psalterian psalterion psalterist psalterium psaltery psaltes psaltress psammite psammitic psammocarcinoma psammocharid psammogenous psammolithic psammologist psammology psammoma psammophile psammophilous psammophyte psammophytic psammosarcoma psammotherapy psammous pschent psellism psellismus psephism psephisma psephite psephitic psephomancy pseudaconine pseudaconitine pseudacusis pseudalveolar pseudambulacral pseudambulacrum pseudamoeboid pseudamphora pseudandry pseudangina pseudankylosis pseudaphia pseudaposematic pseudaposporous pseudapospory pseudapostle pseudarachnidan pseudarthrosis pseudataxic pseudatoll pseudaxine pseudaxis pseudelephant pseudelminth pseudelytron pseudembryo pseudembryonic pseudencephalic pseudencephalus pseudepigraph pseudepigrapha pseudepigraphal pseudepigraphic pseudepigraphical pseudepigraphous pseudepigraphy pseudepiploic pseudepiploon pseudepiscopacy pseudepiscopy pseudepisematic pseudesthesia pseudhalteres pseudhemal pseudimaginal pseudimago pseudisodomum pseudo pseudoacaccia pseudoacademic pseudoacademical pseudoaccidental pseudoacid pseudoaconitine pseudoacromegaly pseudoadiabatic pseudoaesthetic pseudoaffectionate pseudoalkaloid pseudoalum pseudoalveolar pseudoamateurish pseudoamatory pseudoanaphylactic pseudoanaphylaxis pseudoanatomic pseudoanatomical pseudoancestral pseudoanemia pseudoanemic pseudoangelic pseudoangina pseudoankylosis pseudoanthorine pseudoanthropoid pseudoanthropological pseudoanthropology pseudoantique pseudoapologetic pseudoapoplectic pseudoapoplexy pseudoappendicitis pseudoaquatic pseudoarchaic pseudoarchaism pseudoarchaist pseudoaristocratic pseudoarthrosis pseudoarticulation pseudoartistic pseudoascetic pseudoastringent pseudoasymmetrical pseudoasymmetry pseudoataxia pseudobacterium pseudobasidium pseudobenevolent pseudobenthonic pseudobenthos pseudobinary pseudobiological pseudoblepsia pseudoblepsis pseudobrachial pseudobrachium pseudobranch pseudobranchia pseudobranchial pseudobranchiate pseudobrookite pseudobrotherly pseudobulb pseudobulbar pseudobulbil pseudobulbous pseudobutylene pseudocandid pseudocapitulum pseudocarbamide pseudocarcinoid pseudocarp pseudocarpous pseudocartilaginous pseudocele pseudocelian pseudocelic pseudocellus pseudocentric pseudocentrous pseudocentrum pseudoceratitic pseudocercaria pseudoceryl pseudocharitable pseudochemical pseudochina pseudochromesthesia pseudochromia pseudochromosome pseudochronism pseudochronologist pseudochrysalis pseudochrysolite pseudochylous pseudocirrhosis pseudoclassic pseudoclassical pseudoclassicism pseudoclerical pseudococtate pseudocollegiate pseudocolumella pseudocolumellar pseudocommissure pseudocommisural pseudocompetitive pseudoconcha pseudoconclude pseudocone pseudoconglomerate pseudoconglomeration pseudoconhydrine pseudoconjugation pseudoconservative pseudocorneous pseudocortex pseudocosta pseudocotyledon pseudocotyledonal pseudocritical pseudocroup pseudocrystalline pseudocubic pseudocultivated pseudocultural pseudocumene pseudocumenyl pseudocumidine pseudocumyl pseudocyclosis pseudocyesis pseudocyst pseudodeltidium pseudodementia pseudodemocratic pseudoderm pseudodermic pseudodiagnosis pseudodiastolic pseudodiphtheria pseudodiphtheritic pseudodipteral pseudodipterally pseudodipteros pseudodont pseudodox pseudodoxal pseudodoxy pseudodramatic pseudodysentery pseudoedema pseudoelectoral pseudoembryo pseudoembryonic pseudoemotional pseudoencephalitic pseudoenthusiastic pseudoephedrine pseudoepiscopal pseudoequalitarian pseudoerotic pseudoeroticism pseudoerysipelas pseudoerysipelatous pseudoerythrin pseudoethical pseudoetymological pseudoeugenics pseudoevangelical pseudofamous pseudofarcy pseudofeminine pseudofever pseudofeverish pseudofilaria pseudofilarian pseudofinal pseudofluctuation pseudofluorescence pseudofoliaceous pseudoform pseudofossil pseudogalena pseudoganglion pseudogaseous pseudogaster pseudogastrula pseudogeneral pseudogeneric pseudogenerous pseudogenteel pseudogenus pseudogeometry pseudogermanic pseudogeusia pseudogeustia pseudoglanders pseudoglioma pseudoglobulin pseudoglottis pseudograph pseudographeme pseudographer pseudographia pseudographize pseudography pseudograsserie pseudogyne pseudogynous pseudogyny pseudogyrate pseudohallucination pseudohallucinatory pseudohalogen pseudohemal pseudohermaphrodite pseudohermaphroditic pseudohermaphroditism pseudoheroic pseudohexagonal pseudohistoric pseudohistorical pseudoholoptic pseudohuman pseudohydrophobia pseudohyoscyamine pseudohypertrophic pseudohypertrophy pseudoidentical pseudoimpartial pseudoindependent pseudoinfluenza pseudoinsane pseudoinsoluble pseudoisatin pseudoism pseudoisomer pseudoisomeric pseudoisomerism pseudoisotropy pseudojervine pseudolabial pseudolabium pseudolalia pseudolamellibranchiate pseudolaminated pseudolateral pseudolatry pseudolegal pseudolegendary pseudoleucite pseudoleucocyte pseudoleukemia pseudoleukemic pseudoliberal pseudolichen pseudolinguistic pseudoliterary pseudolobar pseudological pseudologically pseudologist pseudologue pseudology pseudolunule pseudomalachite pseudomalaria pseudomancy pseudomania pseudomaniac pseudomantic pseudomantist pseudomasculine pseudomedical pseudomedieval pseudomelanosis pseudomembrane pseudomembranous pseudomeningitis pseudomenstruation pseudomer pseudomeric pseudomerism pseudomery pseudometallic pseudometameric pseudometamerism pseudomica pseudomilitarist pseudomilitaristic pseudomilitary pseudoministerial pseudomiraculous pseudomitotic pseudomnesia pseudomodern pseudomodest pseudomonastic pseudomonoclinic pseudomonocotyledonous pseudomonocyclic pseudomonotropy pseudomoral pseudomorph pseudomorphia pseudomorphic pseudomorphine pseudomorphism pseudomorphose pseudomorphosis pseudomorphous pseudomorula pseudomorular pseudomucin pseudomucoid pseudomultilocular pseudomultiseptate pseudomythical pseudonarcotic pseudonational pseudonavicella pseudonavicellar pseudonavicula pseudonavicular pseudoneuropter pseudoneuropteran pseudoneuropterous pseudonitrole pseudonitrosite pseudonuclein pseudonucleolus pseudonychium pseudonym pseudonymal pseudonymic pseudonymity pseudonymous pseudonymously pseudonymousness pseudonymuncle pseudonymuncule pseudopapaverine pseudoparalysis pseudoparalytic pseudoparaplegia pseudoparasitic pseudoparasitism pseudoparenchyma pseudoparenchymatous pseudoparenchyme pseudoparesis pseudoparthenogenesis pseudopatriotic pseudopediform pseudopelletierine pseudopercular pseudoperculate pseudoperculum pseudoperianth pseudoperidium pseudoperiodic pseudoperipteral pseudopermanent pseudoperoxide pseudoperspective pseudophallic pseudophellandrene pseudophenanthrene pseudophenanthroline pseudophenocryst pseudophilanthropic pseudophilosophical pseudopionnotes pseudopious pseudoplasm pseudoplasma pseudoplasmodium pseudopneumonia pseudopod pseudopodal pseudopodia pseudopodial pseudopodian pseudopodiospore pseudopodium pseudopoetic pseudopoetical pseudopolitic pseudopolitical pseudopopular pseudopore pseudoporphyritic pseudopregnancy pseudopregnant pseudopriestly pseudoprimitive pseudoprimitivism pseudoprincely pseudoproboscis pseudoprofessional pseudoprofessorial pseudoprophetic pseudoprophetical pseudoprosperous pseudopsia pseudopsychological pseudoptics pseudoptosis pseudopupa pseudopupal pseudopurpurin pseudopyriform pseudoquinol pseudorabies pseudoracemic pseudoracemism pseudoramose pseudoramulus pseudorealistic pseudoreduction pseudoreformed pseudoregal pseudoreligious pseudoreminiscence pseudorganic pseudorheumatic pseudorhombohedral pseudoromantic pseudorunic pseudosacred pseudosacrilegious pseudosalt pseudosatirical pseudoscarlatina pseudoscholarly pseudoscholastic pseudoscientific pseudoscinine pseudosclerosis pseudoscope pseudoscopic pseudoscopically pseudoscopy pseudoscorpion pseudoscutum pseudosematic pseudosensational pseudoseptate pseudoservile pseudosessile pseudosiphonal pseudosiphuncal pseudoskeletal pseudoskeleton pseudoskink pseudosmia pseudosocial pseudosocialistic pseudosolution pseudosoph pseudosopher pseudosophical pseudosophist pseudosophy pseudospectral pseudosperm pseudospermic pseudospermium pseudospermous pseudosphere pseudospherical pseudospiracle pseudospiritual pseudosporangium pseudospore pseudosquamate pseudostalactite pseudostalactitical pseudostalagmite pseudostalagmitical pseudostereoscope pseudostereoscopic pseudostereoscopism pseudostigma pseudostigmatic pseudostoma pseudostomatous pseudostomous pseudostratum pseudosubtle pseudosuchian pseudosweating pseudosyllogism pseudosymmetric pseudosymmetrical pseudosymmetry pseudosymptomatic pseudosyphilis pseudosyphilitic pseudotabes pseudotachylite pseudotetanus pseudotetragonal pseudotetrameral pseudotetramerous pseudotrachea pseudotracheal pseudotribal pseudotributary pseudotrimeral pseudotrimerous pseudotropine pseudotubercular pseudotuberculosis pseudotuberculous pseudoturbinal pseudotyphoid pseudoval pseudovarian pseudovary pseudovelar pseudovelum pseudoventricle pseudoviaduct pseudoviperine pseudoviscosity pseudoviscous pseudovolcanic pseudovolcano pseudovum pseudowhorl pseudoxanthine pseudoyohimbine pseudozealot pseudozoea pseudozoogloeal psha pshaw psi psilanthropic psilanthropism psilanthropist psilanthropy psiloceran psiloceratan psiloceratid psiloi psilology psilomelane psilomelanic psilophyte psilosis psilosopher psilosophy psilotaceous psilothrum psilotic psithurism psittaceous psittaceously psittacine psittacinite psittacism psittacistic psittacomorphic psittacosis psoadic psoas psoatic psocid psocine psoitis psomophagic psomophagist psomophagy psora psoriasic psoriasiform psoriasis psoriatic psoriatiform psoric psoroid psorophthalmia psorophthalmic psoroptic psorosis psorosperm psorospermial psorospermiasis psorospermic psorospermiform psorospermosis psorous pssimistical pst psych psychagogic psychagogos psychagogue psychagogy psychal psychalgia psychanalysis psychanalysist psychanalytic psychasthenia psychasthenic psyche psycheometry psychesthesia psychesthetic psychiasis psychiater psychiatria psychiatric psychiatrical psychiatrically psychiatrist psychiatrize psychiatry psychic psychical psychically psychicism psychicist psychics psychid psychism psychist psychoanalysis psychoanalyst psychoanalytic psychoanalytical psychoanalytically psychoanalyze psychoanalyzer psychoautomatic psychobiochemistry psychobiologic psychobiological psychobiology psychobiotic psychocatharsis psychoclinic psychoclinical psychoclinicist psychodiagnostics psychodispositional psychodrama psychodynamic psychodynamics psychoeducational psychoepilepsy psychoethical psychofugal psychogalvanic psychogalvanometer psychogenesis psychogenetic psychogenetical psychogenetically psychogenetics psychogenic psychogeny psychognosis psychognostic psychognosy psychogonic psychogonical psychogony psychogram psychograph psychographer psychographic psychographist psychography psychoid psychokinesia psychokinesis psychokinetic psychokyme psycholepsy psycholeptic psychologer psychologian psychologic psychological psychologically psychologics psychologism psychologist psychologize psychologue psychology psychomachy psychomancy psychomantic psychometer psychometric psychometrical psychometrically psychometrician psychometrics psychometrist psychometrize psychometry psychomonism psychomoral psychomorphic psychomorphism psychomotility psychomotor psychon psychoneural psychoneurological psychoneurosis psychoneurotic psychonomic psychonomics psychonomy psychony psychoorganic psychopannychian psychopannychism psychopannychist psychopannychistic psychopannychy psychopanychite psychopath psychopathia psychopathic psychopathist psychopathologic psychopathological psychopathologist psychopathy psychopetal psychophobia psychophysic psychophysical psychophysically psychophysicist psychophysics psychophysiologic psychophysiological psychophysiologically psychophysiologist psychophysiology psychoplasm psychopomp psychopompos psychorealism psychorealist psychorealistic psychoreflex psychorhythm psychorhythmia psychorhythmic psychorhythmical psychorhythmically psychorrhagic psychorrhagy psychosarcous psychosensorial psychosensory psychoses psychosexual psychosexuality psychosexually psychosis psychosocial psychosomatic psychosomatics psychosome psychosophy psychostasy psychostatic psychostatical psychostatically psychostatics psychosurgeon psychosurgery psychosynthesis psychosynthetic psychotaxis psychotechnical psychotechnician psychotechnics psychotechnological psychotechnology psychotheism psychotherapeutic psychotherapeutical psychotherapeutics psychotherapeutist psychotherapist psychotherapy psychotic psychotrine psychovital psychroesthesia psychrograph psychrometer psychrometric psychrometrical psychrometry psychrophile psychrophilic psychrophobia psychrophore psychrophyte psychurgy psykter psylla psyllid psyllium ptarmic ptarmical ptarmigan ptenoglossate pteranodont pteraspid ptereal pterergate pteric pterideous pteridium pteridography pteridoid pteridological pteridologist pteridology pteridophilism pteridophilist pteridophilistic pteridophyte pteridophytic pteridophytous pteridosperm pteridospermaphytic pteridospermous pterion pterobranchiate pterocarpous pteroclomorphic pterodactyl pterodactylian pterodactylic pterodactylid pterodactyloid pterodactylous pterographer pterographic pterographical pterography pteroid pteroma pteromalid pteropaedes pteropaedic pteropegal pteropegous pteropegum pterophorid pteropid pteropine pteropod pteropodal pteropodan pteropodial pteropodium pteropodous pterosaur pterosaurian pterospermous pterostigma pterostigmal pterostigmatic pterostigmatical pterotheca pterothorax pterotic pteroylglutamic pterygial pterygiophore pterygium pterygobranchiate pterygode pterygodum pterygoid pterygoidal pterygoidean pterygomalar pterygomandibular pterygomaxillary pterygopalatal pterygopalatine pterygopharyngeal pterygopharyngean pterygophore pterygopodium pterygoquadrate pterygosphenoid pterygospinous pterygostaphyline pterygote pterygotous pterygotrabecular pteryla pterylographic pterylographical pterylography pterylological pterylology pterylosis ptilinal ptilinum ptilopaedes ptilopaedic ptilosis ptinid ptinoid ptisan ptochocracy ptochogony ptochology ptomain ptomaine ptomainic ptomatropine ptosis ptotic ptyalagogic ptyalagogue ptyalectasis ptyalin ptyalism ptyalize ptyalocele ptyalogenic ptyalolith ptyalolithiasis ptyalorrhea ptychoparid ptychopariid ptychopterygial ptychopterygium ptysmagogue ptyxis pu pua puan pub pubal pubble puberal pubertal pubertic puberty puberulent puberulous pubes pubescence pubescency pubescent pubian pubic pubigerous pubiotomy pubis public publican publicanism publication publichearted publicheartedness publicism publicist publicity publicize publicly publicness publish publishable publisher publisheress publishership publishment pubococcygeal pubofemoral puboiliac puboischiac puboischial puboischiatic puboprostatic puborectalis pubotibial pubourethral pubovesical pucciniaceous puccinoid puccoon puce pucelage pucellas pucelle pucherite puchero puck pucka puckball pucker puckerbush puckerel puckerer puckermouth puckery puckfist puckish puckishly puckishness puckle pucklike puckling puckneedle puckrel puckster pud puddee puddening pudder pudding puddingberry puddinghead puddingheaded puddinghouse puddinglike puddingwife puddingy puddle puddled puddlelike puddler puddling puddly puddock puddy pudency pudenda pudendal pudendous pudendum pudent pudge pudgily pudginess pudgy pudiano pudibund pudibundity pudic pudical pudicitia pudicity pudsey pudsy pudu pueblito pueblo puebloization puebloize puerer puericulture puerile puerilely puerileness puerilism puerility puerman puerpera puerperal puerperalism puerperant puerperium puerperous puerpery puff puffback puffball puffbird puffed puffer puffery puffily puffin puffiness puffinet puffing puffingly pufflet puffwig puffy pug pugged pugger puggi pugginess pugging puggish puggle puggree puggy pugh pugil pugilant pugilism pugilist pugilistic pugilistical pugilistically puglianite pugman pugmill pugmiller pugnacious pugnaciously pugnaciousness pugnacity puisne puissance puissant puissantly puissantness puist puistie puja puka pukatea pukateine puke pukeko puker pukeweed pukish pukishness pukras puku puky pul pulahan pulahanism pulasan pulaskite pulchrify pulchritude pulchritudinous pule pulegol pulegone puler pulghere puli pulicarious pulicat pulicene pulicid pulicidal pulicide pulicine pulicoid pulicose pulicosity pulicous puling pulingly pulish pulk pulka pull pullable pullback pullboat pulldevil pulldoo pulldown pulldrive pullen puller pullery pullet pulley pulleyless pulli pullorum pullulant pullulate pullulation pullus pulmobranchia pulmobranchial pulmobranchiate pulmocardiac pulmocutaneous pulmogastric pulmometer pulmometry pulmonal pulmonar pulmonarian pulmonary pulmonate pulmonated pulmonectomy pulmonic pulmonifer pulmoniferous pulmonitis pulmotracheal pulmotracheary pulmotracheate pulp pulpaceous pulpal pulpalgia pulpamenta pulpboard pulpectomy pulpefaction pulper pulpifier pulpify pulpily pulpiness pulpit pulpital pulpitarian pulpiteer pulpiter pulpitful pulpitic pulpitical pulpitically pulpitis pulpitish pulpitism pulpitize pulpitless pulpitly pulpitolatry pulpitry pulpless pulplike pulpotomy pulpous pulpousness pulpstone pulpwood pulpy pulque pulsant pulsatance pulsate pulsatile pulsatility pulsation pulsational pulsative pulsatively pulsator pulsatory pulse pulseless pulselessly pulselessness pulselike pulsellum pulsidge pulsific pulsimeter pulsion pulsive pulsojet pulsometer pultaceous pulton pulu pulveraceous pulverant pulverate pulveration pulvereous pulverin pulverizable pulverizate pulverization pulverizator pulverize pulverizer pulverous pulverulence pulverulent pulverulently pulvic pulvil pulvillar pulvilliform pulvillus pulvinar pulvinarian pulvinate pulvinated pulvinately pulvination pulvinic pulviniform pulvino pulvinule pulvinulus pulvinus pulviplume pulwar puly puma pumicate pumice pumiced pumiceous pumicer pumiciform pumicose pummel pummice pump pumpable pumpage pumpellyite pumper pumpernickel pumpkin pumpkinification pumpkinify pumpkinish pumpkinity pumple pumpless pumplike pumpman pumpsman pumpwright pun puna punaise punalua punaluan punatoo punch punchable punchboard puncheon puncher punchinello punching punchless punchlike punchproof punchy punct punctal punctate punctated punctation punctator puncticular puncticulate puncticulose punctiform punctiliar punctilio punctiliomonger punctiliosity punctilious punctiliously punctiliousness punctist punctographic punctual punctualist punctuality punctually punctualness punctuate punctuation punctuational punctuationist punctuative punctuator punctuist punctulate punctulated punctulation punctule punctulum punctum puncturation puncture punctured punctureless punctureproof puncturer pundigrion pundit pundita punditic punditically punditry pundonor pundum puneca pung punga pungapung pungar pungence pungency pungent pungently punger pungey pungi pungle pungled punicaceous puniceous punicial punicin punicine punily puniness punish punishability punishable punishableness punishably punisher punishment punishmentproof punition punitional punitionally punitive punitively punitiveness punitory punjum punk punkah punketto punkie punkwood punky punless punlet punnable punnage punner punnet punnic punnical punnigram punningly punnology punproof punster punstress punt punta puntabout puntal puntel punter punti puntil puntist punto puntout puntsman punty puny punyish punyism pup pupa pupahood pupal puparial puparium pupate pupation pupelo pupiferous pupiform pupigenous pupigerous pupil pupilability pupilage pupilar pupilate pupildom pupiled pupilize pupillarity pupillary pupilless pupillometer pupillometry pupilloscope pupilloscoptic pupilloscopy pupiparous pupivore pupivorous pupoid puppet puppetdom puppeteer puppethood puppetish puppetism puppetize puppetlike puppetly puppetman puppetmaster puppetry puppify puppily puppy puppydom puppyfish puppyfoot puppyhood puppyish puppyism puppylike puppysnatch pupulo pupunha pur purana puranic puraque purblind purblindly purblindness purchasability purchasable purchase purchaser purchasery purdah purdy pure pureblood purebred pured puree purehearted purely pureness purer purfle purfled purfler purfling purfly purga purgation purgative purgatively purgatorial purgatorian purgatory purge purgeable purger purgery purging purificant purification purificative purificator purificatory purifier puriform purify purine puriri purism purist puristic puristical puritandom puritanic puritanical puritanically puritanicalness puritanism puritanlike puritano purity purl purler purlhouse purlicue purlieu purlieuman purlin purlman purloin purloiner purohepatitis purolymph puromucous purpart purparty purple purplelip purplely purpleness purplescent purplewood purplewort purplish purplishness purply purport purportless purpose purposedly purposeful purposefully purposefulness purposeless purposelessly purposelessness purposelike purposely purposer purposive purposively purposiveness purposivism purposivist purposivistic purpresture purpura purpuraceous purpurate purpure purpureal purpurean purpureous purpurescent purpuric purpuriferous purpuriform purpurigenous purpurin purpurine purpuriparous purpurite purpurize purpurogallin purpurogenous purpuroid purpuroxanthin purr purre purree purreic purrel purrer purring purringly purrone purry purse pursed purseful purseless purselike purser pursership pursily pursiness purslane purslet pursley pursuable pursual pursuance pursuant pursuantly pursue pursuer pursuit pursuitmeter pursuivant pursy purtenance purulence purulency purulent purulently puruloid purusha purushartha purvey purveyable purveyal purveyance purveyancer purveyor purveyoress purview purvoe purwannah pus push pushball pushcart pusher pushful pushfully pushfulness pushing pushingly pushingness pushmobile pushover pushpin pushwainling pusillanimity pusillanimous pusillanimously pusillanimousness puss pusscat pussley pusslike pussy pussycat pussyfoot pussyfooted pussyfooter pussyfooting pussyfootism pussytoe pustulant pustular pustulate pustulated pustulation pustulatous pustule pustuled pustulelike pustuliform pustulose pustulous put putage putamen putaminous putanism putation putationary putative putatively putback putchen putcher puteal putelee puther puthery putid putidly putidness putlog putois putredinal putredinous putrefacient putrefactible putrefaction putrefactive putrefactiveness putrefiable putrefier putrefy putresce putrescence putrescency putrescent putrescibility putrescible putrescine putricide putrid putridity putridly putridness putrifacted putriform putrilage putrilaginous putrilaginously putschism putschist putt puttee putter putterer putteringly puttier puttock putty puttyblower puttyhead puttyhearted puttylike puttyroot puttywork puture puxy puzzle puzzleation puzzled puzzledly puzzledness puzzledom puzzlehead puzzleheaded puzzleheadedly puzzleheadedness puzzleman puzzlement puzzlepate puzzlepated puzzlepatedness puzzler puzzling puzzlingly puzzlingness pya pyal pyarthrosis pyche pycnia pycnial pycnid pycnidia pycnidial pycnidiophore pycnidiospore pycnidium pycniospore pycnite pycnium pycnoconidium pycnodont pycnodontoid pycnogonid pycnogonidium pycnogonoid pycnometer pycnometochia pycnometochic pycnomorphic pycnomorphous pycnonotine pycnosis pycnospore pycnosporic pycnostyle pycnotic pyelectasis pyelic pyelitic pyelitis pyelocystitis pyelogram pyelograph pyelographic pyelography pyelolithotomy pyelometry pyelonephritic pyelonephritis pyelonephrosis pyeloplasty pyeloscopy pyelotomy pyeloureterogram pyemesis pyemia pyemic pygal pygalgia pygarg pygargus pygidial pygidid pygidium pygmaean pygmoid pygmy pygmydom pygmyhood pygmyish pygmyism pygmyship pygmyweed pygobranchiate pygofer pygopagus pygopod pygopodine pygopodous pygostyle pygostyled pygostylous pyic pyin pyjama pyjamaed pyke pyknatom pyknic pyknotic pyla pylagore pylangial pylangium pylar pylephlebitic pylephlebitis pylethrombophlebitis pylethrombosis pylic pylon pyloralgia pylorectomy pyloric pyloristenosis pyloritis pylorocleisis pylorodilator pylorogastrectomy pyloroplasty pyloroptosis pyloroschesis pyloroscirrhus pyloroscopy pylorospasm pylorostenosis pylorostomy pylorus pyobacillosis pyocele pyoctanin pyocyanase pyocyanin pyocyst pyocyte pyodermatitis pyodermatosis pyodermia pyodermic pyogenesis pyogenetic pyogenic pyogenin pyogenous pyohemothorax pyoid pyolabyrinthitis pyolymph pyometra pyometritis pyonephritis pyonephrosis pyonephrotic pyopericarditis pyopericardium pyoperitoneum pyoperitonitis pyophagia pyophthalmia pyophylactic pyoplania pyopneumocholecystitis pyopneumocyst pyopneumopericardium pyopneumoperitoneum pyopneumoperitonitis pyopneumothorax pyopoiesis pyopoietic pyoptysis pyorrhea pyorrheal pyorrheic pyosalpingitis pyosalpinx pyosepticemia pyosepticemic pyosis pyospermia pyotherapy pyothorax pyotoxinemia pyoureter pyovesiculosis pyoxanthose pyr pyracanth pyracene pyral pyralid pyralidan pyralidid pyralidiform pyralis pyraloid pyramid pyramidaire pyramidal pyramidale pyramidalis pyramidally pyramidate pyramidellid pyramider pyramides pyramidia pyramidic pyramidical pyramidically pyramidicalness pyramidion pyramidize pyramidlike pyramidoattenuate pyramidoidal pyramidologist pyramidoprismatic pyramidwise pyramoidal pyran pyranometer pyranyl pyrargyrite pyrazine pyrazole pyrazoline pyrazolone pyrazolyl pyre pyrectic pyrena pyrene pyrenematous pyrenic pyrenin pyrenocarp pyrenocarpic pyrenocarpous pyrenodean pyrenodeine pyrenodeous pyrenoid pyrenolichen pyrenomycete pyrenomycetous pyrethrin pyrethrum pyretic pyreticosis pyretogenesis pyretogenetic pyretogenic pyretogenous pyretography pyretology pyretolysis pyretotherapy pyrewinkes pyrex pyrexia pyrexial pyrexic pyrexical pyrgeometer pyrgocephalic pyrgocephaly pyrgoidal pyrgologist pyrgom pyrheliometer pyrheliometric pyrheliometry pyrheliophor pyribole pyridazine pyridic pyridine pyridinium pyridinize pyridone pyridoxine pyridyl pyriform pyriformis pyrimidine pyrimidyl pyritaceous pyrite pyrites pyritic pyritical pyritiferous pyritization pyritize pyritohedral pyritohedron pyritoid pyritology pyritous pyro pyroacetic pyroacid pyroantimonate pyroantimonic pyroarsenate pyroarsenic pyroarsenious pyroarsenite pyrobelonite pyrobituminous pyroborate pyroboric pyrocatechin pyrocatechinol pyrocatechol pyrocatechuic pyrocellulose pyrochemical pyrochemically pyrochlore pyrochromate pyrochromic pyrocinchonic pyrocitric pyroclastic pyrocoll pyrocollodion pyrocomenic pyrocondensation pyroconductivity pyrocotton pyrocrystalline pyroelectric pyroelectricity pyrogallate pyrogallic pyrogallol pyrogen pyrogenation pyrogenesia pyrogenesis pyrogenetic pyrogenetically pyrogenic pyrogenous pyroglutamic pyrognomic pyrognostic pyrognostics pyrograph pyrographer pyrographic pyrography pyrogravure pyroguaiacin pyroheliometer pyroid pyrolaceous pyrolater pyrolatry pyroligneous pyrolignic pyrolignite pyrolignous pyrolite pyrollogical pyrologist pyrology pyrolusite pyrolysis pyrolytic pyrolyze pyromachy pyromagnetic pyromancer pyromancy pyromania pyromaniac pyromaniacal pyromantic pyromeconic pyromellitic pyrometallurgy pyrometamorphic pyrometamorphism pyrometer pyrometric pyrometrical pyrometrically pyrometry pyromorphism pyromorphite pyromorphous pyromotor pyromucate pyromucic pyromucyl pyronaphtha pyrone pyronine pyronomics pyronyxis pyrope pyropen pyrophanite pyrophanous pyrophile pyrophilous pyrophobia pyrophone pyrophoric pyrophorous pyrophorus pyrophosphate pyrophosphoric pyrophosphorous pyrophotograph pyrophotography pyrophotometer pyrophyllite pyrophysalite pyropuncture pyropus pyroracemate pyroracemic pyroscope pyroscopy pyrosis pyrosmalite pyrosome pyrosomoid pyrosphere pyrostat pyrostereotype pyrostilpnite pyrosulphate pyrosulphite pyrosulphuric pyrosulphuryl pyrotantalate pyrotartaric pyrotartrate pyrotechnian pyrotechnic pyrotechnical pyrotechnically pyrotechnician pyrotechnics pyrotechnist pyrotechny pyroterebic pyrotheology pyrotic pyrotoxin pyrotritaric pyrotritartric pyrouric pyrovanadate pyrovanadic pyroxanthin pyroxene pyroxenic pyroxenite pyroxmangite pyroxonium pyroxyle pyroxylene pyroxylic pyroxylin pyrrhic pyrrhichian pyrrhichius pyrrhicist pyrrhotine pyrrhotism pyrrhotist pyrrhotite pyrrhous pyrrodiazole pyrrol pyrrole pyrrolic pyrrolidine pyrrolidone pyrrolidyl pyrroline pyrrolylene pyrrophyllin pyrroporphyrin pyrrotriazole pyrroyl pyrryl pyrrylene pyruline pyruloid pyruvaldehyde pyruvate pyruvic pyruvil pyruvyl pyrylium pythogenesis pythogenetic pythogenic pythogenous python pythoness pythonic pythonical pythonid pythoniform pythonine pythonism pythonist pythonize pythonoid pythonomorph pythonomorphic pythonomorphous pyuria pyvuril pyx pyxidate pyxides pyxidium pyxie pyxis q qasida qere qeri qintar qoph qua quab quabird quachil quack quackery quackhood quackish quackishly quackishness quackism quackle quacksalver quackster quacky quad quadded quaddle quadmeter quadra quadrable quadragenarian quadragenarious quadragesimal quadragintesimal quadral quadrangle quadrangled quadrangular quadrangularly quadrangularness quadrangulate quadrans quadrant quadrantal quadrantes quadrantile quadrantlike quadrantly quadrat quadrate quadrated quadrateness quadratic quadratical quadratically quadratics quadratiferous quadratojugal quadratomandibular quadratosquamosal quadratrix quadratum quadrature quadratus quadrauricular quadrennia quadrennial quadrennially quadrennium quadriad quadrialate quadriannulate quadriarticulate quadriarticulated quadribasic quadric quadricapsular quadricapsulate quadricarinate quadricellular quadricentennial quadriceps quadrichord quadriciliate quadricinium quadricipital quadricone quadricorn quadricornous quadricostate quadricotyledonous quadricovariant quadricrescentic quadricrescentoid quadricuspid quadricuspidal quadricuspidate quadricycle quadricycler quadricyclist quadridentate quadridentated quadriderivative quadridigitate quadriennial quadriennium quadrienniumutile quadrifarious quadrifariously quadrifid quadrifilar quadrifocal quadrifoil quadrifoliate quadrifoliolate quadrifolious quadrifolium quadriform quadrifrons quadrifrontal quadrifurcate quadrifurcated quadrifurcation quadriga quadrigabled quadrigamist quadrigate quadrigatus quadrigeminal quadrigeminate quadrigeminous quadrigeminum quadrigenarious quadriglandular quadrihybrid quadrijugal quadrijugate quadrijugous quadrilaminar quadrilaminate quadrilateral quadrilaterally quadrilateralness quadrilingual quadriliteral quadrille quadrilled quadrillion quadrillionth quadrilobate quadrilobed quadrilocular quadriloculate quadrilogue quadrilogy quadrimembral quadrimetallic quadrimolecular quadrimum quadrinodal quadrinomial quadrinomical quadrinominal quadrinucleate quadrioxalate quadriparous quadripartite quadripartitely quadripartition quadripennate quadriphosphate quadriphyllous quadripinnate quadriplanar quadriplegia quadriplicate quadriplicated quadripolar quadripole quadriportico quadriporticus quadripulmonary quadriquadric quadriradiate quadrireme quadrisect quadrisection quadriseptate quadriserial quadrisetose quadrispiral quadristearate quadrisulcate quadrisulcated quadrisulphide quadrisyllabic quadrisyllabical quadrisyllable quadrisyllabous quadriternate quadritubercular quadrituberculate quadriurate quadrivalence quadrivalency quadrivalent quadrivalently quadrivalve quadrivalvular quadrivial quadrivious quadrivium quadrivoltine quadroon quadrual quadrum quadrumanal quadrumane quadrumanous quadruped quadrupedal quadrupedan quadrupedant quadrupedantic quadrupedantical quadrupedate quadrupedation quadrupedism quadrupedous quadruplane quadruplator quadruple quadrupleness quadruplet quadruplex quadruplicate quadruplication quadruplicature quadruplicity quadruply quadrupole quaedam quaesitum quaestor quaestorial quaestorian quaestorship quaestuary quaff quaffer quaffingly quag quagga quagginess quaggle quaggy quagmire quagmiry quahog quail quailberry quailery quailhead quaillike quaily quaint quaintance quaintise quaintish quaintly quaintness quake quakeful quakeproof quaker quakerbird quaketail quakiness quaking quakingly quaky quale qualifiable qualification qualificative qualificator qualificatory qualified qualifiedly qualifiedness qualifier qualify qualifyingly qualimeter qualitative qualitatively qualitied quality qualityless qualityship qualm qualminess qualmish qualmishly qualmishness qualmproof qualmy qualmyish qualtagh quan quandary quandong quandy quannet quant quanta quantic quantical quantifiable quantifiably quantification quantifier quantify quantimeter quantitate quantitative quantitatively quantitativeness quantitied quantitive quantitively quantity quantivalence quantivalency quantivalent quantization quantize quantometer quantulum quantum quaquaversal quaquaversally quar quarantinable quarantine quarantiner quaranty quardeel quare quarenden quarender quarentene quark quarl quarle quarred quarrel quarreled quarreler quarreling quarrelingly quarrelproof quarrelsome quarrelsomely quarrelsomeness quarriable quarried quarrier quarry quarryable quarrying quarryman quarrystone quart quartan quartane quartation quartenylic quarter quarterage quarterback quarterdeckish quartered quarterer quartering quarterization quarterland quarterly quarterman quartermaster quartermasterlike quartermastership quartern quarterpace quarters quartersaw quartersawed quarterspace quarterstaff quarterstetch quartet quartette quartetto quartful quartic quartile quartine quartiparous quarto quartodecimanism quartole quartz quartzic quartziferous quartzite quartzitic quartzless quartzoid quartzose quartzous quartzy quash quashey quashy quasi quasijudicial quasky quassation quassative quassiin quassin quat quata quatch quatercentenary quatern quaternal quaternarian quaternarius quaternary quaternate quaternion quaternionic quaternionist quaternitarian quaternity quaters quatertenses quatorzain quatorze quatrain quatral quatrayle quatre quatrefeuille quatrefoil quatrefoiled quatrefoliated quatrible quatrin quatrino quatrocentism quatrocentist quatrocento quattie quattrini quatuor quatuorvirate quauk quave quaver quaverer quavering quaveringly quaverous quavery quaverymavery quaw quawk quay quayage quayful quaylike quayman quayside quaysider qubba queach queachy queak queal quean queanish queasily queasiness queasom queasy quebrachamine quebrachine quebrachitol quebracho quebradilla quedful queechy queen queencake queencraft queencup queendom queenfish queenhood queening queenite queenless queenlet queenlike queenliness queenly queenright queenroot queensberry queenship queenweed queenwood queer queerer queerish queerishness queerity queerly queerness queersome queery queest queesting queet queeve quegh quei queintise quelch quell queller quemado queme quemeful quemefully quemely quench quenchable quenchableness quencher quenchless quenchlessly quenchlessness quenelle quenselite quercetagetin quercetic quercetin quercetum quercic quercimeritrin quercin quercine quercinic quercitannic quercitannin quercite quercitin quercitol quercitrin quercitron quercivorous querent querier queriman querimonious querimoniously querimoniousness querimony querist querken querl quern quernal quernstone querulent querulential querulist querulity querulosity querulous querulously querulousness query querying queryingly queryist quesited quesitive quest quester questeur questful questingly question questionability questionable questionableness questionably questionary questionee questioner questioningly questionist questionless questionlessly questionnaire questionous questionwise questman questor questorial questorship quet quetch quetenite quetzal queue quey quiapo quib quibble quibbleproof quibbler quibblingly quiblet quica quick quickbeam quickborn quicken quickenance quickenbeam quickener quickfoot quickhatch quickhearted quickie quicklime quickly quickness quicksand quicksandy quickset quicksilver quicksilvering quicksilverish quicksilverishness quicksilvery quickstep quickthorn quickwork quid quiddative quidder quiddit quidditative quidditatively quiddity quiddle quiddler quidnunc quiesce quiescence quiescency quiescent quiescently quiet quietable quieten quietener quieter quieting quietism quietist quietistic quietive quietlike quietly quietness quietsome quietude quietus quiff quiffing quiinaceous quila quiles quilkin quill quillai quillaic quillaja quillback quilled quiller quillet quilleted quillfish quilling quilltail quillwork quillwort quilly quilt quilted quilter quilting quin quina quinacrine quinaldic quinaldine quinaldinic quinaldinium quinaldyl quinamicine quinamidine quinamine quinanisole quinaquina quinarian quinarius quinary quinate quinatoxine quinazoline quinazolyl quince quincentenary quincentennial quincewort quinch quincubital quincubitalism quincuncial quincuncially quincunx quincunxial quindecad quindecagon quindecangle quindecasyllabic quindecemvir quindecemvirate quindecennial quindecim quindecima quindecylic quindene quinetum quingentenary quinhydrone quinia quinible quinic quinicine quinidia quinidine quinin quinina quinine quininiazation quininic quininism quininize quiniretin quinisext quinisextine quinism quinite quinitol quinizarin quinize quink quinnat quinnet quinoa quinocarbonium quinoform quinogen quinoid quinoidal quinoidation quinoidine quinol quinoline quinolinic quinolinium quinolinyl quinologist quinology quinolyl quinometry quinone quinonediimine quinonic quinonimine quinonization quinonize quinonoid quinonyl quinopyrin quinotannic quinotoxine quinova quinovatannic quinovate quinovic quinovin quinovose quinoxaline quinoxalyl quinoyl quinquagenarian quinquagenary quinquagesimal quinquarticular quinquecapsular quinquecostate quinquedentate quinquedentated quinquefarious quinquefid quinquefoliate quinquefoliated quinquefoliolate quinquegrade quinquejugous quinquelateral quinqueliteral quinquelobate quinquelobated quinquelobed quinquelocular quinqueloculine quinquenary quinquenerval quinquenerved quinquennalia quinquennia quinquenniad quinquennial quinquennialist quinquennially quinquennium quinquepartite quinquepedal quinquepedalian quinquepetaloid quinquepunctal quinquepunctate quinqueradial quinqueradiate quinquereme quinquertium quinquesect quinquesection quinqueseptate quinqueserial quinqueseriate quinquesyllabic quinquesyllable quinquetubercular quinquetuberculate quinquevalence quinquevalency quinquevalent quinquevalve quinquevalvous quinquevalvular quinqueverbal quinqueverbial quinquevir quinquevirate quinquiliteral quinquina quinquino quinse quinsied quinsy quinsyberry quinsywort quint quintad quintadena quintadene quintain quintal quintan quintant quintary quintato quinte quintelement quintennial quinternion quinteron quinteroon quintessence quintessential quintessentiality quintessentially quintessentiate quintet quintette quintetto quintic quintile quintillion quintillionth quintin quintiped quinto quintocubital quintocubitalism quintole quinton quintroon quintuple quintuplet quintuplicate quintuplication quintuplinerved quintupliribbed quintus quinuclidine quinyl quinze quinzieme quip quipful quipo quipper quippish quippishness quippy quipsome quipsomeness quipster quipu quira quire quirewise quirinca quiritarian quiritary quirk quirkiness quirkish quirksey quirksome quirky quirl quirquincho quirt quis quisby quiscos quisle quisling quisqueite quisquilian quisquiliary quisquilious quisquous quisutsch quit quitch quitclaim quite quitrent quits quittable quittance quitted quitter quittor quiver quivered quiverer quiverful quivering quiveringly quiverish quiverleaf quivery quixotic quixotical quixotically quixotism quixotize quixotry quiz quizzability quizzable quizzacious quizzatorial quizzee quizzer quizzery quizzical quizzicality quizzically quizzicalness quizzification quizzify quizziness quizzingly quizzish quizzism quizzity quizzy quo quod quoddies quoddity quodlibet quodlibetal quodlibetarian quodlibetary quodlibetic quodlibetical quodlibetically quoilers quoin quoined quoining quoit quoiter quoitlike quoits quondam quondamly quondamship quoniam quop quorum quot quota quotability quotable quotableness quotably quotation quotational quotationally quotationist quotative quote quotee quoteless quotennial quoter quoteworthy quoth quotha quotidian quotidianly quotidianness quotient quotiety quotingly quotity quotlibet quotum r ra raad raash rab raband rabanna rabat rabatine rabatte rabattement rabbanist rabbanite rabbet rabbeting rabbi rabbin rabbinate rabbindom rabbinic rabbinical rabbinically rabbinism rabbinist rabbinistic rabbinistical rabbinite rabbinize rabbinship rabbiship rabbit rabbitberry rabbiter rabbithearted rabbitlike rabbitmouth rabbitproof rabbitroot rabbitry rabbitskin rabbitweed rabbitwise rabbitwood rabbity rabble rabblelike rabblement rabbleproof rabbler rabblesome rabboni rabbonim rabic rabid rabidity rabidly rabidness rabies rabietic rabific rabiform rabigenic rabinet rabirubia rabitic rabulistic rabulous raccoon raccoonberry raccroc race raceabout racebrood racecourse racegoer racegoing racelike racemate racemation raceme racemed racemic racemiferous racemiform racemism racemization racemize racemocarbonate racemocarbonic racemomethylate racemose racemosely racemous racemously racemule racemulose racer raceway rach rache rachial rachialgia rachialgic rachianalgesia rachianesthesia rachicentesis rachides rachidial rachidian rachiform rachiglossate rachigraph rachilla rachiocentesis rachiococainize rachiocyphosis rachiodont rachiodynia rachiometer rachiomyelitis rachioparalysis rachioplegia rachioscoliosis rachiotome rachiotomy rachipagus rachis rachischisis rachitic rachitis rachitism rachitogenic rachitome rachitomous rachitomy racial racialism racialist raciality racialization racialize racially racily raciness racing racinglike racism racist rack rackabones rackan rackboard racker racket racketeer racketeering racketer racketing racketlike racketproof racketry rackett rackettail rackety rackful racking rackingly rackle rackless rackmaster rackproof rackrentable rackway rackwork racloir racon raconteur racoon racy rad rada radar radarman radarscope raddle raddleman raddlings radectomy radiability radiable radial radiale radialia radiality radialization radialize radially radian radiance radiancy radiant radiantly radiate radiated radiately radiateness radiatics radiatiform radiation radiational radiative radiatopatent radiatoporose radiatoporous radiator radiatory radiatostriate radiatosulcate radiature radical radicalism radicality radicalization radicalize radically radicalness radicand radicant radicate radicated radicating radication radicel radices radicicola radicicolous radiciferous radiciflorous radiciform radicivorous radicle radicolous radicose radicular radicule radiculectomy radiculitis radiculose radiectomy radiescent radiferous radii radio radioacoustics radioactinium radioactivate radioactive radioactively radioactivity radioamplifier radioanaphylaxis radioautograph radioautographic radioautography radiobicipital radiobroadcast radiobroadcaster radiobroadcasting radiobserver radiocarbon radiocarpal radiocast radiocaster radiochemical radiochemistry radiocinematograph radioconductor radiode radiodermatitis radiodetector radiodiagnosis radiodigital radiodontia radiodontic radiodontist radiodynamic radiodynamics radioelement radiogenic radiogoniometer radiogoniometric radiogoniometry radiogram radiograph radiographer radiographic radiographical radiographically radiography radiohumeral radioisotope radiolarian radiolead radiolite radiolitic radiolocation radiolocator radiologic radiological radiologist radiology radiolucency radiolucent radioluminescence radioluminescent radioman radiomedial radiometallography radiometeorograph radiometer radiometric radiometrically radiometry radiomicrometer radiomovies radiomuscular radionecrosis radioneuritis radionics radiopacity radiopalmar radiopaque radiopelvimetry radiophare radiophone radiophonic radiophony radiophosphorus radiophotograph radiophotography radiopraxis radioscope radioscopic radioscopical radioscopy radiosensibility radiosensitive radiosensitivity radiosonde radiosonic radiostereoscopy radiosurgery radiosurgical radiosymmetrical radiotechnology radiotelegram radiotelegraph radiotelegraphic radiotelegraphy radiotelephone radiotelephonic radiotelephony radioteria radiothallium radiotherapeutic radiotherapeutics radiotherapeutist radiotherapist radiotherapy radiothermy radiothorium radiotoxemia radiotransparency radiotransparent radiotrician radiotropic radiotropism radiovision radish radishlike radium radiumization radiumize radiumlike radiumproof radiumtherapy radius radix radknight radman radome radon radsimir radula radulate raduliferous raduliform raff raffe raffee raffery raffia raffinase raffinate raffing raffinose raffish raffishly raffishness raffle raffler rafflesia rafflesiaceous raft raftage rafter raftiness raftlike raftman raftsman rafty rag raga ragabash ragabrash ragamuffin ragamuffinism ragamuffinly rage rageful ragefully rageless rageous rageously rageousness rageproof rager ragesome ragfish ragged raggedly raggedness raggedy raggee ragger raggery raggety raggil raggily ragging raggle raggled raggy raghouse raging ragingly raglan raglanite raglet raglin ragman ragout ragpicker ragseller ragshag ragsorter ragstone ragtag ragtime ragtimer ragtimey ragule raguly ragweed ragwort rah rahdar rahdaree raia raid raider raidproof raiiform rail railage railbird railer railhead railing railingly raillery railless raillike railly railman railroad railroadana railroader railroadiana railroading railroadish railroadship railway railwaydom railwayless raiment raimentless rain rainband rainbird rainbound rainbow rainbowlike rainbowweed rainbowy rainburst raincoat raindrop rainer rainfall rainfowl rainful rainily raininess rainless rainlessness rainlight rainproof rainproofer rainspout rainstorm raintight rainwash rainworm rainy raioid rais raisable raise raised raiseman raiser raisin raising raisiny raj raja rajah rajaship rajbansi rakan rake rakeage rakeful rakehell rakehellish rakehelly raker rakery rakesteel rakestele rakh raki rakily raking rakish rakishly rakishness rakit rakshasa raku rallentando ralliance rallier ralliform ralline rally ralph ralstonite ram ramada ramage ramal ramanas ramarama ramass ramate rambeh ramberge ramble rambler rambling ramblingly ramblingness rambong rambooze rambunctious rambutan ramdohrite rame rameal ramed ramekin ramellose rament ramentaceous ramental ramentiferous ramentum rameous ramequin ramet ramex ramfeezled ramgunshoch ramhead ramhood rami ramicorn ramie ramiferous ramificate ramification ramified ramiflorous ramiform ramify ramigerous ramiparous ramisection ramisectomy ramlike ramline rammack rammel rammelsbergite rammer rammerman rammish rammishly rammishness rammy ramose ramosely ramosity ramosopalmate ramosopinnate ramososubdivided ramous ramp rampacious rampaciously rampage rampageous rampageously rampageousness rampager rampagious rampancy rampant rampantly rampart ramped ramper rampick rampike ramping rampingly rampion rampire rampler ramplor rampsman ramrace ramrod ramroddy ramscallion ramsch ramshackle ramshackled ramshackleness ramshackly ramson ramstam ramtil ramular ramule ramuliferous ramulose ramulous ramulus ramus ramuscule ran rana ranal ranarian ranarium rance rancel rancellor rancelman rancer rancescent ranch ranche rancher rancheria ranchero ranchless ranchman rancho ranchwoman rancid rancidification rancidify rancidity rancidly rancidness rancor rancorous rancorously rancorousness rancorproof rand randan randannite randem rander randing randir randle random randomish randomization randomize randomly randomness randomwise randy rane rang rangatira range ranged rangeless rangeman ranger rangership rangework rangey rangiferine ranginess ranging rangle rangler rangy rani ranid raniferous raniform ranine raninian ranivorous rank ranked ranker rankish rankle rankless ranklingly rankly rankness ranksman rankwise rann rannel rannigal ranny ransack ransacker ransackle ransel ranselman ransom ransomable ransomer ransomfree ransomless ranstead rant rantan rantankerous rantepole ranter ranting rantingly rantipole rantock ranty ranula ranular ranunculaceous ranunculi rap rapaceus rapacious rapaciously rapaciousness rapacity rapakivi rapateaceous rape rapeful raper rapeseed raphania raphany raphe raphide raphides raphidiferous raphidiid raphis rapic rapid rapidity rapidly rapidness rapier rapiered rapillo rapine rapiner raping rapinic rapist raploch rappage rapparee rappe rappel rapper rapping rappist rapport rapscallion rapscallionism rapscallionly rapscallionry rapt raptatorial raptatory raptly raptness raptor raptorial raptorious raptril rapture raptured raptureless rapturist rapturize rapturous rapturously rapturousness raptury raptus rare rarebit rarefaction rarefactional rarefactive rarefiable rarefication rarefier rarefy rarely rareness rareripe rariconstant rarish rarity ras rasa rasamala rasant rascacio rascal rascaldom rascaless rascalion rascalism rascality rascalize rascallike rascallion rascally rascalry rascalship rasceta rascette rase rasen raser rasgado rash rasher rashful rashing rashlike rashly rashness rasion rasorial rasp raspatorium raspatory raspberriade raspberry raspberrylike rasped rasper rasping raspingly raspingness raspings raspish raspite raspy rasse rassle raster rastik rastle rasure rat rata ratability ratable ratableness ratably ratafee ratafia ratal ratanhia rataplan ratbite ratcatcher ratcatching ratch ratchel ratchelly ratcher ratchet ratchetlike ratchety ratching ratchment rate rated ratel rateless ratement ratepayer ratepaying rater ratfish rath rathe rathed rathely ratheness rather ratherest ratheripe ratherish ratherly rathest rathite rathole rathskeller raticidal raticide ratification ratificationist ratifier ratify ratihabition ratine rating ratio ratiocinant ratiocinate ratiocination ratiocinative ratiocinator ratiocinatory ratiometer ration rationable rationably rational rationale rationalism rationalist rationalistic rationalistical rationalistically rationalisticism rationality rationalizable rationalization rationalize rationalizer rationally rationalness rationate rationless rationment ratite ratitous ratlike ratline ratliner ratoon ratooner ratproof ratsbane ratskeller rattage rattail rattan ratteen ratten rattener ratter rattery ratti rattinet rattish rattle rattlebag rattlebones rattlebox rattlebrain rattlebrained rattlebush rattled rattlehead rattleheaded rattlejack rattlemouse rattlenut rattlepate rattlepated rattlepod rattleproof rattler rattleran rattleroot rattlertree rattles rattleskull rattleskulled rattlesnake rattlesome rattletrap rattleweed rattlewort rattling rattlingly rattlingness rattly ratton rattoner rattrap ratty ratwa ratwood raucid raucidity raucity raucous raucously raucousness raught raugrave rauk raukle rauli raun raunge raupo rauque ravage ravagement ravager rave ravehook raveinelike ravel raveler ravelin raveling ravelly ravelment ravelproof raven ravendom ravenduck ravener ravenhood ravening ravenish ravenlike ravenous ravenously ravenousness ravenry ravens ravensara ravenstone ravenwise raver ravigote ravin ravinate ravine ravined ravinement raviney raving ravingly ravioli ravish ravishedly ravisher ravishing ravishingly ravishment ravison ravissant raw rawboned rawbones rawhead rawhide rawhider rawish rawishness rawness rax ray raya rayage rayed rayful rayless raylessness raylet rayon rayonnance rayonnant raze razee razer razoo razor razorable razorback razorbill razoredge razorless razormaker razormaking razorman razorstrop razz razzia razzly re rea reaal reabandon reabolish reabolition reabridge reabsence reabsent reabsolve reabsorb reabsorption reabuse reacceptance reaccess reaccession reacclimatization reacclimatize reaccommodate reaccompany reaccomplish reaccomplishment reaccord reaccost reaccount reaccredit reaccrue reaccumulate reaccumulation reaccusation reaccuse reaccustom reacetylation reach reachable reacher reachieve reachievement reaching reachless reachy reacidification reacidify reacknowledge reacknowledgment reacquaint reacquaintance reacquire reacquisition react reactance reactant reaction reactional reactionally reactionariness reactionarism reactionarist reactionary reactionaryism reactionism reactionist reactivate reactivation reactive reactively reactiveness reactivity reactological reactology reactor reactualization reactualize reactuate read readability readable readableness readably readapt readaptability readaptable readaptation readaptive readaptiveness readd readdition readdress reader readerdom readership readhere readhesion readily readiness reading readingdom readjourn readjournment readjudicate readjust readjustable readjuster readjustment readmeasurement readminister readmiration readmire readmission readmit readmittance readopt readoption readorn readvance readvancement readvent readventure readvertency readvertise readvertisement readvise readvocate ready reaeration reaffect reaffection reaffiliate reaffiliation reaffirm reaffirmance reaffirmation reaffirmer reafflict reafford reafforest reafforestation reaffusion reagency reagent reaggravate reaggravation reaggregate reaggregation reaggressive reagin reagitate reagitation reagree reagreement reak real realarm reales realest realgar realienate realienation realign realignment realism realist realistic realistically realisticize reality realive realizability realizable realizableness realizably realization realize realizer realizing realizingly reallegation reallege reallegorize realliance reallocate reallocation reallot reallotment reallow reallowance reallude reallusion really realm realmless realmlet realness realter realteration realtor realty ream reamage reamalgamate reamalgamation reamass reambitious reamend reamendment reamer reamerer reaminess reamputation reamuse reamy reanalysis reanalyze reanchor reanimalize reanimate reanimation reanneal reannex reannexation reannotate reannounce reannouncement reannoy reannoyance reanoint reanswer reanvil reanxiety reap reapable reapdole reaper reapologize reapology reapparel reapparition reappeal reappear reappearance reappease reapplaud reapplause reappliance reapplicant reapplication reapplier reapply reappoint reappointment reapportion reapportionment reapposition reappraisal reappraise reappraisement reappreciate reappreciation reapprehend reapprehension reapproach reapprobation reappropriate reappropriation reapproval reapprove rear rearbitrate rearbitration rearer reargue reargument rearhorse rearisal rearise rearling rearm rearmament rearmost rearousal rearouse rearrange rearrangeable rearrangement rearranger rearray rearrest rearrival rearrive rearward rearwardly rearwardness rearwards reascend reascendancy reascendant reascendency reascendent reascension reascensional reascent reascertain reascertainment reashlar reasiness reask reason reasonability reasonable reasonableness reasonably reasoned reasonedly reasoner reasoning reasoningly reasonless reasonlessly reasonlessness reasonproof reaspire reassail reassault reassay reassemblage reassemble reassembly reassent reassert reassertion reassertor reassess reassessment reasseverate reassign reassignation reassignment reassimilate reassimilation reassist reassistance reassociate reassociation reassort reassortment reassume reassumption reassurance reassure reassured reassuredly reassurement reassurer reassuring reassuringly reastiness reastonish reastonishment reastray reasty reasy reattach reattachment reattack reattain reattainment reattempt reattend reattendance reattention reattentive reattest reattire reattract reattraction reattribute reattribution reatus reaudit reauthenticate reauthentication reauthorization reauthorize reavail reavailable reave reaver reavoid reavoidance reavouch reavow reawait reawake reawaken reawakening reawakenment reaward reaware reb rebab reback rebag rebait rebake rebalance rebale reballast reballot reban rebandage rebanish rebanishment rebankrupt rebankruptcy rebaptism rebaptismal rebaptization rebaptize rebaptizer rebar rebarbarization rebarbarize rebarbative rebargain rebase rebasis rebatable rebate rebateable rebatement rebater rebathe rebato rebawl rebeamer rebear rebeat rebeautify rebec rebeck rebecome rebed rebeg rebeget rebeggar rebegin rebeginner rebeginning rebeguile rebehold rebel rebeldom rebelief rebelieve rebeller rebellike rebellion rebellious rebelliously rebelliousness rebellow rebelly rebelong rebelove rebelproof rebemire rebend rebenediction rebenefit rebeset rebesiege rebestow rebestowal rebetake rebetray rebewail rebia rebias rebid rebill rebillet rebilling rebind rebirth rebite reblade reblame reblast rebleach reblend rebless reblock rebloom reblossom reblot reblow reblue rebluff reblunder reboant reboantic reboard reboast rebob reboil reboiler reboise reboisement rebold rebolt rebone rebook rebop rebore reborn reborrow rebottle rebounce rebound reboundable rebounder reboundingness rebourbonize rebox rebrace rebraid rebranch rebrand rebrandish rebreathe rebreed rebrew rebribe rebrick rebridge rebring rebringer rebroach rebroadcast rebronze rebrown rebrush rebrutalize rebubble rebuckle rebud rebudget rebuff rebuffable rebuffably rebuffet rebuffproof rebuild rebuilder rebuilt rebukable rebuke rebukeable rebukeful rebukefully rebukefulness rebukeproof rebuker rebukingly rebulk rebunch rebundle rebunker rebuoy rebuoyage reburden reburgeon reburial reburn reburnish reburst rebury rebus rebush rebusy rebut rebute rebutment rebuttable rebuttal rebutter rebutton rebuy recable recadency recage recalcination recalcine recalcitrance recalcitrant recalcitrate recalcitration recalculate recalculation recalesce recalescence recalescent recalibrate recalibration recalk recall recallable recallist recallment recampaign recancel recancellation recandescence recandidacy recant recantation recanter recantingly recanvas recap recapacitate recapitalization recapitalize recapitulate recapitulation recapitulationist recapitulative recapitulator recapitulatory recappable recapper recaption recaptivate recaptivation recaptor recapture recapturer recarbon recarbonate recarbonation recarbonization recarbonize recarbonizer recarburization recarburize recarburizer recarnify recarpet recarriage recarrier recarry recart recarve recase recash recasket recast recaster recasting recatalogue recatch recaulescence recausticize recce recco reccy recede recedence recedent receder receipt receiptable receiptless receiptor receipts receivability receivable receivables receivablness receival receive received receivedness receiver receivership recelebrate recelebration recement recementation recency recense recension recensionist recensor recensure recensus recent recenter recently recentness recentralization recentralize recentre recept receptacle receptacular receptaculite receptaculitid receptaculitoid receptaculum receptant receptibility receptible reception receptionism receptionist receptitious receptive receptively receptiveness receptivity receptor receptoral receptorial receptual receptually recercelee recertificate recertify recess recesser recession recessional recessionary recessive recessively recessiveness recesslike recessor rechafe rechain rechal rechallenge rechamber rechange rechant rechaos rechar recharge recharter rechase rechaser rechasten rechaw recheat recheck recheer recherche rechew rechip rechisel rechoose rechristen rechuck rechurn recidivation recidive recidivism recidivist recidivistic recidivity recidivous recipe recipiangle recipience recipiency recipiend recipiendary recipient recipiomotor reciprocable reciprocal reciprocality reciprocalize reciprocally reciprocalness reciprocate reciprocation reciprocative reciprocator reciprocatory reciprocitarian reciprocity recircle recirculate recirculation recision recission recissory recitable recital recitalist recitatif recitation recitationalism recitationist recitative recitatively recitativical recitativo recite recitement reciter recivilization recivilize reck reckla reckless recklessly recklessness reckling reckon reckonable reckoner reckoning reclaim reclaimable reclaimableness reclaimably reclaimant reclaimer reclaimless reclaimment reclama reclamation reclang reclasp reclass reclassification reclassify reclean recleaner recleanse reclear reclearance reclimb reclinable reclinate reclinated reclination recline recliner reclose reclothe reclothing recluse reclusely recluseness reclusery reclusion reclusive reclusiveness reclusory recoach recoagulation recoal recoast recoat recock recoct recoction recode recodification recodify recogitate recogitation recognition recognitive recognitor recognitory recognizability recognizable recognizably recognizance recognizant recognize recognizedly recognizee recognizer recognizingly recognizor recognosce recohabitation recoil recoiler recoilingly recoilment recoin recoinage recoiner recoke recollapse recollate recollation recollectable recollected recollectedly recollectedness recollectible recollection recollective recollectively recollectiveness recolonization recolonize recolor recomb recombination recombine recomember recomfort recommand recommence recommencement recommencer recommend recommendability recommendable recommendableness recommendably recommendation recommendatory recommendee recommender recommission recommit recommitment recommittal recommunicate recommunion recompact recompare recomparison recompass recompel recompensable recompensate recompensation recompense recompenser recompensive recompete recompetition recompetitor recompilation recompile recompilement recomplain recomplaint recomplete recompletion recompliance recomplicate recomplication recomply recompose recomposer recomposition recompound recomprehend recomprehension recompress recompression recomputation recompute recon reconceal reconcealment reconcede reconceive reconcentrate reconcentration reconception reconcert reconcession reconcilability reconcilable reconcilableness reconcilably reconcile reconcilee reconcileless reconcilement reconciler reconciliability reconciliable reconciliate reconciliation reconciliative reconciliator reconciliatory reconciling reconcilingly reconclude reconclusion reconcoct reconcrete reconcur recondemn recondemnation recondensation recondense recondite reconditely reconditeness recondition recondole reconduct reconduction reconfer reconfess reconfide reconfine reconfinement reconfirm reconfirmation reconfiscate reconfiscation reconform reconfound reconfront reconfuse reconfusion recongeal recongelation recongest recongestion recongratulate recongratulation reconjoin reconjunction reconnaissance reconnect reconnection reconnoissance reconnoiter reconnoiterer reconnoiteringly reconnoitre reconnoitrer reconnoitringly reconquer reconqueror reconquest reconsecrate reconsecration reconsent reconsider reconsideration reconsign reconsignment reconsole reconsolidate reconsolidation reconstituent reconstitute reconstitution reconstruct reconstructed reconstruction reconstructional reconstructionary reconstructionist reconstructive reconstructiveness reconstructor reconstrue reconsult reconsultation recontact recontemplate recontemplation recontend recontest recontinuance recontinue recontract recontraction recontrast recontribute recontribution recontrivance recontrive recontrol reconvalesce reconvalescence reconvalescent reconvene reconvention reconventional reconverge reconverse reconversion reconvert reconvertible reconvey reconveyance reconvict reconviction reconvince reconvoke recook recool recooper recopper recopy recopyright record recordable recordant recordation recordative recordatively recordatory recordedly recorder recordership recording recordist recordless recork recorporification recorporify recorrect recorrection recorrupt recorruption recostume recounsel recount recountable recountal recountenance recounter recountless recoup recoupable recouper recouple recoupment recourse recover recoverability recoverable recoverableness recoverance recoveree recoverer recoveringly recoverless recoveror recovery recramp recrank recrate recreance recreancy recreant recreantly recreantness recrease recreate recreation recreational recreationist recreative recreatively recreativeness recreator recreatory recredit recrement recremental recrementitial recrementitious recrescence recrew recriminate recrimination recriminative recriminator recriminatory recriticize recroon recrop recross recrowd recrown recrucify recrudency recrudesce recrudescence recrudescency recrudescent recruit recruitable recruitage recruital recruitee recruiter recruithood recruiting recruitment recruity recrush recrusher recrystallization recrystallize rect recta rectal rectalgia rectally rectangle rectangled rectangular rectangularity rectangularly rectangularness rectangulate rectangulometer rectectomy recti rectifiable rectification rectificative rectificator rectificatory rectified rectifier rectify rectigrade rectilineal rectilineally rectilinear rectilinearism rectilinearity rectilinearly rectilinearness rectilineation rectinerved rection rectipetality rectirostral rectischiac rectiserial rectitic rectitis rectitude rectitudinous recto rectoabdominal rectocele rectoclysis rectococcygeal rectococcygeus rectocolitic rectocolonic rectocystotomy rectogenital rectopexy rectoplasty rector rectoral rectorate rectoress rectorial rectorrhaphy rectorship rectory rectoscope rectoscopy rectosigmoid rectostenosis rectostomy rectotome rectotomy rectovaginal rectovesical rectress rectricial rectrix rectum rectus recubant recubate recultivate recultivation recumbence recumbency recumbent recumbently recuperability recuperance recuperate recuperation recuperative recuperativeness recuperator recuperatory recur recure recureful recureless recurl recurrence recurrency recurrent recurrently recurrer recurring recurringly recurse recursion recursive recurtain recurvant recurvate recurvation recurvature recurve recurvirostral recurvopatent recurvoternate recurvous recusance recusancy recusant recusation recusative recusator recuse recushion recussion recut recycle red redact redaction redactional redactor redactorial redamage redamnation redan redare redargue redargution redargutive redargutory redarken redarn redart redate redaub redawn redback redbait redbeard redbelly redberry redbill redbird redbone redbreast redbrush redbuck redbud redcap redcoat redd redden reddendo reddendum reddening redder redding reddingite reddish reddishness reddition reddleman reddock reddsman reddy rede redeal redebate redebit redeceive redecide redecimate redecision redeck redeclaration redeclare redecline redecorate redecoration redecrease redecussate rededicate rededication rededicatory rededuct rededuction redeed redeem redeemability redeemable redeemableness redeemably redeemer redeemeress redeemership redeemless redefault redefeat redefecate redefer redefiance redefine redefinition redeflect redefy redeify redelay redelegate redelegation redeliberate redeliberation redeliver redeliverance redeliverer redelivery redemand redemandable redemise redemolish redemonstrate redemonstration redemptible redemption redemptional redemptioner redemptionless redemptive redemptively redemptor redemptorial redemptory redemptress redemptrice redenigrate redeny redepend redeploy redeployment redeposit redeposition redepreciate redepreciation redeprive rederivation redescend redescent redescribe redescription redesertion redeserve redesign redesignate redesignation redesire redesirous redesman redespise redetect redetention redetermination redetermine redevelop redeveloper redevelopment redevise redevote redevotion redeye redfin redfinch redfish redfoot redhead redheaded redheadedly redheadedness redhearted redhibition redhibitory redhoop redia redictate redictation redient redifferentiate redifferentiation redig redigest redigestion rediminish redingote redintegrate redintegration redintegrative redintegrator redip redipper redirect redirection redisable redisappear redisburse redisbursement redischarge rediscipline rediscount rediscourage rediscover rediscoverer rediscovery rediscuss rediscussion redisembark redismiss redispatch redispel redisperse redisplay redispose redisposition redispute redissect redissection redisseise redisseisin redisseisor redisseize redisseizin redisseizor redissoluble redissolution redissolvable redissolve redistend redistill redistillation redistiller redistinguish redistrain redistrainer redistribute redistributer redistribution redistributive redistributor redistributory redistrict redisturb redive rediversion redivert redivertible redivide redivision redivive redivivous redivivus redivorce redivorcement redivulge redivulgence redjacket redknees redleg redlegs redly redmouth redness redo redock redocket redolence redolency redolent redolently redominate redondilla redoom redouble redoublement redoubler redoubling redoubt redoubtable redoubtableness redoubtably redoubted redound redowa redox redpoll redraft redrag redrape redraw redrawer redream redredge redress redressable redressal redresser redressible redressive redressless redressment redressor redrill redrive redroot redry redsear redshank redshirt redskin redstart redstreak redtab redtail redthroat redtop redub redubber reduce reduceable reduceableness reduced reducement reducent reducer reducibility reducible reducibleness reducibly reducing reduct reductant reductase reductibility reduction reductional reductionism reductionist reductionistic reductive reductively reductor reductorial redue redundance redundancy redundant redundantly reduplicate reduplication reduplicative reduplicatively reduplicatory reduplicature reduviid reduvioid redux redward redware redweed redwing redwithe redwood redye ree reechy reed reedbird reedbuck reedbush reeded reeden reeder reediemadeasy reedily reediness reeding reedish reedition reedless reedlike reedling reedmaker reedmaking reedman reedplot reedwork reedy reef reefable reefer reefing reefy reek reeker reekingly reeky reel reelable reeled reeler reelingly reelrall reem reeming reemish reen reenge reeper reese reeshle reesk reesle reest reester reestle reesty reet reetam reetle reeve reeveland reeveship ref reface refacilitate refall refallow refan refascinate refascination refashion refashioner refashionment refasten refathered refavor refect refection refectionary refectioner refective refectorarian refectorary refectorer refectorial refectorian refectory refederate refeed refeel refeign refel refence refer referable referee reference referenda referendal referendary referendaryship referendum referent referential referentially referently referment referral referrer referrible referribleness refertilization refertilize refetch refight refigure refill refillable refilm refilter refinable refinage refinance refind refine refined refinedly refinedness refinement refiner refinery refinger refining refiningly refinish refire refit refitment refix refixation refixture reflag reflagellate reflame reflash reflate reflation reflationism reflect reflectance reflected reflectedly reflectedness reflectent reflecter reflectibility reflectible reflecting reflectingly reflection reflectional reflectionist reflectionless reflective reflectively reflectiveness reflectivity reflectometer reflectometry reflector reflectoscope refledge reflee reflex reflexed reflexibility reflexible reflexism reflexive reflexively reflexiveness reflexivity reflexly reflexness reflexogenous reflexological reflexologist reflexology refling refloat refloatation reflog reflood refloor reflorescence reflorescent reflourish reflourishment reflow reflower refluctuation refluence refluency refluent reflush reflux refluxed refly refocillate refocillation refocus refold refoment refont refool refoot reforbid reforce reford reforecast reforest reforestation reforestization reforestize reforestment reforfeit reforfeiture reforge reforger reforget reforgive reform reformability reformable reformableness reformado reformandum reformation reformational reformationary reformationist reformative reformatively reformatness reformatory reformed reformedly reformer reformeress reformingly reformism reformist reformistic reformproof reformulate reformulation reforsake refortification refortify reforward refound refoundation refounder refract refractable refracted refractedly refractedness refractile refractility refracting refraction refractional refractionate refractionist refractive refractively refractiveness refractivity refractometer refractometric refractometry refractor refractorily refractoriness refractory refracture refragability refragable refragableness refrain refrainer refrainment reframe refrangent refrangibility refrangible refrangibleness refreeze refrenation refrenzy refresh refreshant refreshen refreshener refresher refreshful refreshfully refreshing refreshingly refreshingness refreshment refrigerant refrigerate refrigerating refrigeration refrigerative refrigerator refrigeratory refrighten refringence refringency refringent refront refrustrate reft refuel refueling refuge refugee refugeeism refugeeship refulge refulgence refulgency refulgent refulgently refulgentness refunction refund refunder refundment refurbish refurbishment refurl refurnish refurnishment refusable refusal refuse refuser refusing refusingly refusion refusive refutability refutable refutably refutal refutation refutative refutatory refute refuter reg regain regainable regainer regainment regal regale regalement regaler regalia regalian regalism regalist regality regalize regallop regally regalness regalvanization regalvanize regard regardable regardance regardancy regardant regarder regardful regardfully regardfulness regarding regardless regardlessly regardlessness regarment regarnish regarrison regather regatta regauge regelate regelation regency regeneracy regenerance regenerant regenerate regenerateness regeneration regenerative regeneratively regenerator regeneratory regeneratress regeneratrix regenesis regent regental regentess regentship regerminate regermination reges reget regia regicidal regicide regicidism regift regifuge regild regill regime regimen regimenal regiment regimental regimentaled regimentalled regimentally regimentals regimentary regimentation regiminal regin reginal region regional regionalism regionalist regionalistic regionalization regionalize regionally regionary regioned register registered registerer registership registrability registrable registral registrant registrar registrarship registrary registrate registration registrational registrationist registrator registrer registry regive regladden reglair reglaze regle reglement reglementary reglementation reglementist reglet reglorified regloss reglove reglow reglue regma regmacarp regnal regnancy regnant regnerable regolith regorge regovern regradation regrade regraduate regraduation regraft regrant regrasp regrass regrate regrater regratification regratify regrating regratingly regrator regratress regravel regrede regreen regreet regress regression regressionist regressive regressively regressiveness regressivity regressor regret regretful regretfully regretfulness regretless regrettable regrettableness regrettably regretter regrettingly regrind regrinder regrip regroup regroupment regrow regrowth reguarantee reguard reguardant reguide regula regulable regular regularity regularization regularize regularizer regularly regularness regulatable regulate regulated regulation regulationist regulative regulatively regulator regulatorship regulatory regulatress regulatris reguli reguline regulize regulus regur regurge regurgitant regurgitate regurgitation regush reh rehabilitate rehabilitation rehabilitative rehair rehale rehallow rehammer rehandicap rehandle rehandler rehandling rehang rehappen reharden reharm reharmonize reharness reharrow reharvest rehash rehaul rehazard rehead reheal reheap rehear rehearing rehearsal rehearse rehearser rehearten reheat reheater rehedge reheel reheighten rehoe rehoist rehollow rehonor rehonour rehood rehook rehoop rehouse rehumanize rehumble rehumiliate rehumiliation rehung rehybridize rehydrate rehydration rehypothecate rehypothecation rehypothecator reichsgulden reichsmark reichspfennig reichstaler reidentification reidentify reif reification reify reign reignite reignition reignore reillume reilluminate reillumination reillumine reillustrate reillustration reim reimage reimagination reimagine reimbark reimbarkation reimbibe reimbody reimbursable reimburse reimbursement reimburser reimbush reimbushment reimkennar reimmerge reimmerse reimmersion reimmigrant reimmigration reimpact reimpark reimpart reimpatriate reimpatriation reimpel reimplant reimplantation reimply reimport reimportation reimportune reimpose reimposition reimposure reimpregnate reimpress reimpression reimprint reimprison reimprisonment reimprove reimprovement reimpulse rein reina reinability reinaugurate reinauguration reincapable reincarnadine reincarnate reincarnation reincarnationism reincarnationist reincense reincentive reincidence reincidency reincite reinclination reincline reinclude reinclusion reincorporate reincorporation reincrease reincrudate reincrudation reinculcate reincur reindebted reindebtedness reindeer reindependence reindicate reindication reindict reindictment reindifferent reindorse reinduce reinducement reindue reindulge reindulgence reinette reinfect reinfection reinfectious reinfer reinfest reinfestation reinflame reinflate reinflation reinflict reinfliction reinfluence reinforce reinforcement reinforcer reinform reinfuse reinfusion reingraft reingratiate reingress reinhabit reinhabitation reinherit reinitiate reinitiation reinject reinjure reinless reinoculate reinoculation reinquire reinquiry reins reinsane reinsanity reinscribe reinsert reinsertion reinsist reinsman reinspect reinspection reinspector reinsphere reinspiration reinspire reinspirit reinstall reinstallation reinstallment reinstalment reinstate reinstatement reinstation reinstator reinstauration reinstil reinstill reinstitute reinstitution reinstruct reinstruction reinsult reinsurance reinsure reinsurer reintegrate reintegration reintend reinter reintercede reintercession reinterchange reinterest reinterfere reinterference reinterment reinterpret reinterpretation reinterrogate reinterrogation reinterrupt reinterruption reintervene reintervention reinterview reinthrone reintimate reintimation reintitule reintrench reintroduce reintroduction reintrude reintrusion reintuition reintuitive reinvade reinvasion reinvent reinvention reinventor reinversion reinvert reinvest reinvestigate reinvestigation reinvestiture reinvestment reinvigorate reinvigoration reinvitation reinvite reinvoice reinvolve reirrigate reirrigation reis reisolation reissuable reissue reissuement reissuer reit reitbok reitbuck reitemize reiter reiterable reiterance reiterant reiterate reiterated reiteratedly reiteratedness reiteration reiterative reiteratively reiver rejail reject rejectable rejectableness rejectage rejectamenta rejecter rejectingly rejection rejective rejectment rejector rejerk rejoice rejoiceful rejoicement rejoicer rejoicing rejoicingly rejoin rejoinder rejolt rejourney rejudge rejumble rejunction rejustification rejustify rejuvenant rejuvenate rejuvenation rejuvenative rejuvenator rejuvenesce rejuvenescence rejuvenescent rejuvenize rekick rekill rekindle rekindlement rekindler reking rekiss reknit reknow rel relabel relace relacquer relade reladen relais relament relamp reland relap relapper relapsable relapse relapseproof relapser relapsing relast relaster relata relatability relatable relatch relate related relatedness relater relatinization relation relational relationality relationally relationary relationism relationist relationless relationship relatival relative relatively relativeness relativism relativist relativistic relativity relativization relativize relator relatrix relatum relaunch relax relaxable relaxant relaxation relaxative relaxatory relaxed relaxedly relaxedness relaxer relay relayman relbun relead releap relearn releasable release releasee releasement releaser releasor releather relection relegable relegate relegation relend relent relenting relentingly relentless relentlessly relentlessness relentment relessee relessor relet reletter relevance relevancy relevant relevantly relevate relevation relevator relevel relevy reliability reliable reliableness reliably reliance reliant reliantly reliberate relic relicary relicense relick reliclike relicmonger relict relicted reliction relief reliefless relier relievable relieve relieved relievedly reliever relieving relievingly relievo relift religate religation relight relightable relighten relightener relighter religion religionary religionate religioner religionism religionist religionistic religionize religionless religiose religiosity religious religiously religiousness relime relimit relimitation reline reliner relink relinquent relinquish relinquisher relinquishment reliquaire reliquary reliquefy reliquiae reliquian reliquidate reliquidation reliquism relish relishable relisher relishing relishingly relishsome relishy relist relisten relitigate relive reload reloan relocable relocate relocation relocator relock relodge relook relose relost relot relove relower relucent reluct reluctance reluctancy reluctant reluctantly reluctate reluctation reluctivity relume relumine rely remade remagnetization remagnetize remagnification remagnify remail remain remainder remainderman remaindership remainer remains remaintain remaintenance remake remaker reman remanage remanagement remanation remancipate remancipation remand remandment remanence remanency remanent remanet remanipulate remanipulation remantle remanufacture remanure remap remarch remargin remark remarkability remarkable remarkableness remarkably remarkedly remarker remarket remarque remarriage remarry remarshal remask remass remast remasticate remastication rematch rematerialize remble remeant remeasure remeasurement remede remediable remediableness remediably remedial remedially remediation remediless remedilessly remedilessness remeditate remeditation remedy remeet remelt remember rememberability rememberable rememberably rememberer remembrance remembrancer remembrancership rememorize remenace remend remerge remetal remex remica remicate remication remicle remiform remigate remigation remiges remigial remigrant remigrate remigration remilitarization remilitarize remill remimic remind remindal reminder remindful remindingly remineralization remineralize remingle reminisce reminiscence reminiscenceful reminiscencer reminiscency reminiscent reminiscential reminiscentially reminiscently reminiscer reminiscitory remint remiped remirror remise remisrepresent remisrepresentation remiss remissful remissibility remissible remissibleness remission remissive remissively remissiveness remissly remissness remissory remisunderstand remit remitment remittable remittal remittance remittancer remittee remittence remittency remittent remittently remitter remittitur remittor remix remixture remnant remnantal remobilization remobilize remock remodel remodeler remodeller remodelment remodification remodify remolade remold remollient remonetization remonetize remonstrance remonstrant remonstrantly remonstrate remonstrating remonstratingly remonstration remonstrative remonstratively remonstrator remonstratory remontado remontant remontoir remop remora remord remorse remorseful remorsefully remorsefulness remorseless remorselessly remorselessness remorseproof remortgage remote remotely remoteness remotion remotive remould remount removability removable removableness removably removal remove removed removedly removedness removement remover removing remultiplication remultiply remunerability remunerable remunerably remunerate remuneration remunerative remuneratively remunerativeness remunerator remuneratory remurmur remuster remutation renable renably renail renaissance renal rename renascence renascency renascent renascible renascibleness renature renavigate renavigation rencontre rencounter renculus rend render renderable renderer rendering renderset rendezvous rendibility rendible rendition rendlewood rendrock rendzina reneague renecessitate reneg renegade renegadism renegado renegation renege reneger reneglect renegotiable renegotiate renegotiation renegotiations renegue renerve renes renet renew renewability renewable renewably renewal renewedly renewedness renewer renewment renicardiac renickel renidification renidify reniform renin renipericardial reniportal renipuncture renish renishly renitence renitency renitent renk renky renne rennet renneting rennin renniogen renocutaneous renogastric renography renointestinal renominate renomination renopericardial renopulmonary renormalize renotation renotice renotification renotify renounce renounceable renouncement renouncer renourish renovate renovater renovatingly renovation renovative renovator renovatory renovize renown renowned renownedly renownedness renowner renownful renownless rensselaerite rent rentability rentable rentage rental rentaler rentaller rented rentee renter rentless rentrant rentrayeuse renumber renumerate renumeration renunciable renunciance renunciant renunciate renunciation renunciative renunciator renunciatory renunculus renverse renvoi renvoy reobject reobjectivization reobjectivize reobligate reobligation reoblige reobscure reobservation reobserve reobtain reobtainable reobtainment reoccasion reoccupation reoccupy reoccur reoccurrence reoffend reoffense reoffer reoffset reoil reometer reomission reomit reopen reoperate reoperation reoppose reopposition reoppress reoppression reorchestrate reordain reorder reordinate reordination reorganization reorganizationist reorganize reorganizer reorient reorientation reornament reoutfit reoutline reoutput reoutrage reovercharge reoverflow reovertake reoverwork reown reoxidation reoxidize reoxygenate reoxygenize rep repace repacification repacify repack repackage repacker repaganization repaganize repaganizer repage repaint repair repairable repairableness repairer repairman repale repand repandly repandodentate repandodenticulate repandolobate repandous repandousness repanel repaper reparability reparable reparably reparagraph reparate reparation reparative reparatory repark repartable repartake repartee reparticipate reparticipation repartition repartitionable repass repassable repassage repasser repast repaste repasture repatch repatency repatent repatriable repatriate repatriation repatronize repattern repave repavement repawn repay repayable repayal repaying repayment repeal repealability repealable repealableness repealer repealist repealless repeat repeatability repeatable repeatal repeated repeatedly repeater repeg repel repellance repellant repellence repellency repellent repellently repeller repelling repellingly repellingness repen repenetrate repension repent repentable repentance repentant repentantly repenter repentingly repeople reperceive repercept reperception repercolation repercuss repercussion repercussive repercussively repercussiveness repercutient reperform reperformance reperfume reperible repermission repermit reperplex repersonalization repersonalize repersuade repersuasion repertoire repertorial repertorily repertorium repertory reperusal reperuse repetend repetition repetitional repetitionary repetitious repetitiously repetitiousness repetitive repetitively repetitiveness repetitory repetticoat repew rephase rephonate rephosphorization rephosphorize rephotograph rephrase repic repick repicture repiece repile repin repine repineful repinement repiner repiningly repipe repique repitch repkie replace replaceability replaceable replacement replacer replait replan replane replant replantable replantation replanter replaster replate replay replead repleader repleat repledge repledger replenish replenisher replenishingly replenishment replete repletely repleteness repletion repletive repletively repletory repleviable replevin replevisable replevisor replevy repliant replica replicate replicated replicatile replication replicative replicatively replicatory replier replight replod replot replotment replotter replough replow replum replume replunder replunge reply replyingly repocket repoint repolish repoll repollute repolon repolymerization repolymerize reponder repone repope repopulate repopulation report reportable reportage reportedly reporter reporteress reporterism reportership reportingly reportion reportorial reportorially reposal repose reposed reposedly reposedness reposeful reposefully reposefulness reposer reposit repositary reposition repositor repository repossess repossession repossessor repost repostpone repot repound repour repowder repp repped repractice repray repreach reprecipitate reprecipitation repredict reprefer reprehend reprehendable reprehendatory reprehender reprehensibility reprehensible reprehensibleness reprehensibly reprehension reprehensive reprehensively reprehensory repreparation reprepare represcribe represent representability representable representamen representant representation representational representationalism representationalist representationary representationism representationist representative representatively representativeness representativeship representativity representer representment represide repress repressed repressedly represser repressible repressibly repression repressionary repressionist repressive repressively repressiveness repressment repressor repressory repressure reprice reprieval reprieve repriever reprimand reprimander reprimanding reprimandingly reprime reprimer reprint reprinter reprisal reprisalist reprise repristinate repristination reprivatization reprivatize reprivilege reproach reproachable reproachableness reproachably reproacher reproachful reproachfully reproachfulness reproachingly reproachless reproachlessness reprobacy reprobance reprobate reprobateness reprobater reprobation reprobationary reprobationer reprobative reprobatively reprobator reprobatory reproceed reprocess reproclaim reproclamation reprocurable reprocure reproduce reproduceable reproducer reproducibility reproducible reproduction reproductionist reproductive reproductively reproductiveness reproductivity reproductory reprofane reprofess reprohibit repromise repromulgate repromulgation repronounce repronunciation reproof reproofless repropagate repropitiate repropitiation reproportion reproposal repropose reprosecute reprosecution reprosper reprotect reprotection reprotest reprovable reprovableness reprovably reproval reprove reprover reprovide reprovingly reprovision reprovocation reprovoke reprune reps reptant reptatorial reptatory reptile reptiledom reptilelike reptilferous reptilian reptiliary reptiliform reptilious reptiliousness reptilism reptility reptilivorous reptiloid republic republican republicanism republicanization republicanize republicanizer republication republish republisher republishment repuddle repudiable repudiate repudiation repudiationist repudiative repudiator repudiatory repuff repugn repugnable repugnance repugnancy repugnant repugnantly repugnantness repugnate repugnatorial repugner repullulate repullulation repullulative repullulescent repulpit repulse repulseless repulseproof repulser repulsion repulsive repulsively repulsiveness repulsory repulverize repump repunish repunishment repurchase repurchaser repurge repurification repurify repurple repurpose repursue repursuit reputability reputable reputableness reputably reputation reputationless reputative reputatively repute reputed reputedly reputeless requalification requalify requarantine requeen requench request requester requestion requiem requiescence requin requirable require requirement requirer requisite requisitely requisiteness requisition requisitionary requisitioner requisitionist requisitor requisitorial requisitory requit requitable requital requitative requite requiteful requitement requiter requiz requotation requote rerack reracker reradiation rerail reraise rerake rerank rerate reread rereader rerebrace reredos reree rereel rereeve rerefief reregister reregistration reregulate reregulation rereign reremouse rerent rerental reresupper rerig rering rerise rerival rerivet rerob rerobe reroll reroof reroot rerope reroute rerow reroyalize rerub rerummage rerun resaca resack resacrifice resaddle resail resalable resale resalt resalutation resalute resalvage resample resanctify resanction resatisfaction resatisfy resaw resawer resawyer resay resazurin rescan reschedule rescind rescindable rescinder rescindment rescissible rescission rescissory rescore rescramble rescratch rescribe rescript rescription rescriptive rescriptively rescrub rescuable rescue rescueless rescuer reseal reseam research researcher researchful researchist reseat resecrete resecretion resect resection resectional reseda resedaceous resee reseed reseek resegment resegmentation reseise reseiser reseize reseizer reseizure reselect reselection reself resell reseller resemblable resemblance resemblant resemble resembler resemblingly reseminate resend resene resensation resensitization resensitize resent resentationally resentence resenter resentful resentfullness resentfully resentience resentingly resentless resentment resepulcher resequent resequester resequestration reserene reservable reserval reservation reservationist reservatory reserve reserved reservedly reservedness reservee reserveful reserveless reserver reservery reservice reservist reservoir reservor reset resettable resetter resettle resettlement resever resew resex resh reshake reshape reshare resharpen reshave reshear reshearer resheathe reshelve reshift reshine reshingle reship reshipment reshipper reshoe reshoot reshoulder reshovel reshower reshrine reshuffle reshun reshunt reshut reshuttle resiccate reside residence residencer residency resident residental residenter residential residentiality residentially residentiary residentiaryship residentship resider residua residual residuary residuation residue residuent residuous residuum resift resigh resign resignal resignatary resignation resignationism resigned resignedly resignedness resignee resigner resignful resignment resile resilement resilial resiliate resilience resiliency resilient resilifer resiliometer resilition resilium resilver resin resina resinaceous resinate resinbush resiner resinfiable resing resinic resiniferous resinification resinifluous resiniform resinify resinize resink resinlike resinoelectric resinoextractive resinogenous resinoid resinol resinolic resinophore resinosis resinous resinously resinousness resinovitreous resiny resipiscence resipiscent resist resistability resistable resistableness resistance resistant resistantly resister resistful resistibility resistible resistibleness resistibly resisting resistingly resistive resistively resistiveness resistivity resistless resistlessly resistlessness resistor resitting resize resizer resketch reskin reslash reslate reslay reslide reslot resmell resmelt resmile resmooth resnap resnatch resnatron resnub resoak resoap resoften resoil resojourn resolder resole resolemnize resolicit resolidification resolidify resolubility resoluble resolubleness resolute resolutely resoluteness resolution resolutioner resolutionist resolutory resolvability resolvable resolvableness resolvancy resolve resolved resolvedly resolvedness resolvent resolver resolvible resonance resonancy resonant resonantly resonate resonator resonatory resoothe resorb resorbence resorbent resorcin resorcine resorcinism resorcinol resorcinolphthalein resorcinum resorcylic resorption resorptive resort resorter resorufin resought resound resounder resounding resoundingly resource resourceful resourcefully resourcefulness resourceless resourcelessness resoutive resow resp respace respade respan respangle resparkle respeak respect respectability respectabilize respectable respectableness respectably respectant respecter respectful respectfully respectfulness respecting respective respectively respectiveness respectless respectlessly respectlessness respectworthy respell respersive respin respirability respirable respirableness respiration respirational respirative respirator respiratored respiratorium respiratory respire respirit respirometer respite respiteless resplend resplendence resplendency resplendent resplendently resplice resplit respoke respond responde respondence respondency respondent respondentia responder responsal responsary response responseless responser responsibility responsible responsibleness responsibly responsion responsive responsively responsiveness responsivity responsorial responsory respot respray respread respring resprout respue resquare resqueak ressaidar ressala ressaldar ressaut rest restable restack restaff restain restainable restake restamp restandardization restandardize restant restart restate restatement restaur restaurant restaurate restaurateur restauration restbalk resteal resteel resteep restem restep rester resterilize restes restful restfully restfulness restharrow resthouse restiaceous restiad restibrachium restiff restiffen restiffener restiffness restifle restiform restigmatize restimulate restimulation resting restingly restionaceous restipulate restipulation restipulatory restir restis restitch restitute restitution restitutionism restitutionist restitutive restitutor restitutory restive restively restiveness restless restlessly restlessness restock restopper restorable restorableness restoral restoration restorationer restorationism restorationist restorative restoratively restorativeness restorator restoratory restore restorer restow restowal restproof restraighten restrain restrainability restrained restrainedly restrainedness restrainer restraining restrainingly restraint restraintful restrap restratification restream restrengthen restress restretch restrict restricted restrictedly restrictedness restriction restrictionary restrictionist restrictive restrictively restrictiveness restrike restring restringe restringency restringent restrip restrive restroke restudy restuff restward restwards resty restyle resubject resubjection resubjugate resublimation resublime resubmerge resubmission resubmit resubordinate resubscribe resubscriber resubscription resubstitute resubstitution resucceed resuck resudation resue resuffer resufferance resuggest resuggestion resuing resuit result resultance resultancy resultant resultantly resultative resultful resultfully resulting resultingly resultive resultless resultlessly resultlessness resumability resumable resume resumer resummon resummons resumption resumptive resumptively resun resup resuperheat resupervise resupinate resupinated resupination resupine resupply resupport resuppose resupposition resuppress resuppression resurface resurge resurgence resurgency resurgent resurprise resurrect resurrectible resurrection resurrectional resurrectionary resurrectioner resurrectioning resurrectionism resurrectionist resurrectionize resurrective resurrector resurrender resurround resurvey resuscitable resuscitant resuscitate resuscitation resuscitative resuscitator resuspect resuspend resuspension reswage reswallow resward reswarm reswear resweat resweep reswell reswill reswim resyllabification resymbolization resymbolize resynthesis resynthesize ret retable retack retackle retag retail retailer retailment retailor retain retainability retainable retainableness retainal retainder retainer retainership retaining retake retaker retaliate retaliation retaliationist retaliative retaliator retaliatory retalk retama retame retan retanner retape retard retardance retardant retardate retardation retardative retardatory retarded retardence retardent retarder retarding retardingly retardive retardment retardure retare retariff retaste retation retattle retax retaxation retch reteach retecious retelegraph retelephone retell retelling retem retemper retempt retemptation retenant retender retene retent retention retentionist retentive retentively retentiveness retentivity retentor retepore retest retexture rethank rethatch rethaw rethe retheness rethicken rethink rethrash rethread rethreaten rethresh rethresher rethrill rethrive rethrone rethrow rethrust rethunder retia retial retiarian retiarius retiary reticella reticello reticence reticency reticent reticently reticket reticle reticula reticular reticularian reticularly reticulary reticulate reticulated reticulately reticulation reticulatocoalescent reticulatogranulate reticulatoramose reticulatovenose reticule reticuled reticulin reticulitis reticulocyte reticulocytosis reticuloramose reticulose reticulovenose reticulum retie retier retiform retighten retile retill retimber retime retin retina retinacular retinaculate retinaculum retinal retinalite retinasphalt retinasphaltum retincture retinene retinerved retinian retinispora retinite retinitis retinize retinker retinoblastoma retinochorioid retinochorioidal retinochorioiditis retinoid retinol retinopapilitis retinophoral retinophore retinoscope retinoscopic retinoscopically retinoscopist retinoscopy retinue retinula retinular retinule retip retiracied retiracy retirade retiral retire retired retiredly retiredness retirement retirer retiring retiringly retiringness retistene retoast retold retolerate retoleration retomb retonation retook retool retooth retoother retort retortable retorted retorter retortion retortive retorture retoss retotal retouch retoucher retouching retouchment retour retourable retrace retraceable retracement retrack retract retractability retractable retractation retracted retractibility retractible retractile retractility retraction retractive retractively retractiveness retractor retrad retrade retradition retrahent retrain retral retrally retramp retrample retranquilize retranscribe retranscription retransfer retransference retransfigure retransform retransformation retransfuse retransit retranslate retranslation retransmission retransmissive retransmit retransmute retransplant retransport retransportation retravel retraverse retraxit retread retreat retreatal retreatant retreater retreatful retreating retreatingness retreative retreatment retree retrench retrenchable retrencher retrenchment retrial retribute retribution retributive retributively retributor retributory retricked retrievability retrievable retrievableness retrievably retrieval retrieve retrieveless retrievement retriever retrieverish retrim retrimmer retrip retroact retroaction retroactive retroactively retroactivity retroalveolar retroauricular retrobronchial retrobuccal retrobulbar retrocaecal retrocardiac retrocecal retrocede retrocedence retrocedent retrocervical retrocession retrocessional retrocessionist retrocessive retrochoir retroclavicular retroclusion retrocognition retrocognitive retrocolic retroconsciousness retrocopulant retrocopulation retrocostal retrocouple retrocoupler retrocurved retrodate retrodeviation retrodisplacement retroduction retrodural retroesophageal retroflected retroflection retroflex retroflexed retroflexion retroflux retroform retrofract retrofracted retrofrontal retrogastric retrogenerative retrogradation retrogradatory retrograde retrogradely retrogradient retrogradingly retrogradism retrogradist retrogress retrogression retrogressionist retrogressive retrogressively retrohepatic retroinfection retroinsular retroiridian retroject retrojection retrojugular retrolabyrinthine retrolaryngeal retrolingual retrolocation retromammary retromammillary retromandibular retromastoid retromaxillary retromigration retromingent retromingently retromorphosed retromorphosis retronasal retroperitoneal retroperitoneally retropharyngeal retropharyngitis retroplacental retroplexed retroposed retroposition retropresbyteral retropubic retropulmonary retropulsion retropulsive retroreception retrorectal retroreflective retrorenal retrorse retrorsely retroserrate retroserrulate retrospect retrospection retrospective retrospectively retrospectiveness retrospectivity retrosplenic retrostalsis retrostaltic retrosternal retrosusception retrot retrotarsal retrotemporal retrothyroid retrotracheal retrotransfer retrotransference retrotympanic retrousse retrovaccinate retrovaccination retrovaccine retroverse retroversion retrovert retrovision retroxiphoid retrude retrue retrusible retrusion retrust retry retted retter rettery retting rettory retube retuck retumble retumescence retune returban returf returfer return returnability returnable returned returner returnless returnlessly retuse retwine retwist retying retype retzian reundercut reundergo reundertake reundulate reundulation reune reunfold reunification reunify reunion reunionism reunionist reunionistic reunitable reunite reunitedly reuniter reunition reunitive reunpack reuphold reupholster reuplift reurge reuse reutilization reutilize reutter reutterance rev revacate revaccinate revaccination revalenta revalescence revalescent revalidate revalidation revalorization revalorize revaluate revaluation revalue revamp revamper revampment revaporization revaporize revarnish revary reve reveal revealability revealable revealableness revealed revealedly revealer revealing revealingly revealingness revealment revegetate revegetation revehent reveil reveille revel revelability revelant revelation revelational revelationer revelationist revelationize revelative revelator revelatory reveler revellent revelly revelment revelrout revelry revenant revend revender revendicate revendication reveneer revenge revengeable revengeful revengefully revengefulness revengeless revengement revenger revengingly revent reventilate reventure revenual revenue revenued revenuer rever reverable reverb reverbatory reverberant reverberate reverberation reverberative reverberator reverberatory reverbrate reverdure revere revered reverence reverencer reverend reverendly reverendship reverent reverential reverentiality reverentially reverentialness reverently reverentness reverer reverie reverification reverify reverist revers reversability reversable reversal reverse reversed reversedly reverseful reverseless reversely reversement reverser reverseways reversewise reversi reversibility reversible reversibleness reversibly reversification reversifier reversify reversing reversingly reversion reversionable reversional reversionally reversionary reversioner reversionist reversis reversist reversive reverso revert revertal reverter revertibility revertible revertive revertively revery revest revestiary revestry revet revete revetement revetment revibrate revibration revibrational revictorious revictory revictual revictualment revie review reviewability reviewable reviewage reviewal reviewer revieweress reviewish reviewless revigorate revigoration revile revilement reviler reviling revilingly revindicate revindication reviolate reviolation revirescence revirescent revisable revisableness revisal revise revisee reviser revisership revisible revision revisional revisionary revisionism revisionist revisit revisitant revisitation revisor revisory revisualization revisualize revitalization revitalize revitalizer revivability revivable revivably revival revivalism revivalist revivalistic revivalize revivatory revive revivement reviver revivification revivifier revivify reviving revivingly reviviscence reviviscency reviviscent reviviscible revivor revocability revocable revocableness revocably revocation revocative revocatory revoice revokable revoke revokement revoker revokingly revolant revolatilize revolt revolter revolting revoltingly revoltress revolubility revoluble revolubly revolunteer revolute revoluted revolution revolutional revolutionally revolutionarily revolutionariness revolutionary revolutioneering revolutioner revolutionism revolutionist revolutionize revolutionizement revolutionizer revolvable revolvably revolve revolvement revolvency revolver revolving revolvingly revomit revote revue revuette revuist revulsed revulsion revulsionary revulsive revulsively rewade rewager rewake rewaken rewall rewallow reward rewardable rewardableness rewardably rewardedly rewarder rewardful rewardfulness rewarding rewardingly rewardless rewardproof rewarehouse rewarm rewarn rewash rewater rewave rewax rewaybill rewayle reweaken rewear reweave rewed reweigh reweigher reweight rewelcome reweld rewend rewet rewhelp rewhirl rewhisper rewhiten rewiden rewin rewind rewinder rewirable rewire rewish rewithdraw rewithdrawal rewood reword rework reworked rewound rewove rewoven rewrap rewrite rewriter rex rexen reyield reyoke reyouth rezbanyite rhabdite rhabditiform rhabdium rhabdocoelan rhabdocoele rhabdocoelidan rhabdocoelous rhabdoid rhabdoidal rhabdolith rhabdom rhabdomal rhabdomancer rhabdomancy rhabdomantic rhabdomantist rhabdomyoma rhabdomyosarcoma rhabdomysarcoma rhabdophane rhabdophanite rhabdophoran rhabdopod rhabdos rhabdosome rhabdosophy rhabdosphere rhabdus rhagades rhagadiform rhagiocrin rhagionid rhagite rhagon rhagonate rhagose rhamn rhamnaceous rhamnal rhamnetin rhamninase rhamninose rhamnite rhamnitol rhamnohexite rhamnohexitol rhamnohexose rhamnonic rhamnose rhamnoside rhamphoid rhamphotheca rhapontic rhaponticin rhapontin rhapsode rhapsodic rhapsodical rhapsodically rhapsodie rhapsodism rhapsodist rhapsodistic rhapsodize rhapsodomancy rhapsody rhason rhasophore rhatania rhatany rhe rhea rheadine rhebok rhebosis rheeboc rheebok rheen rhegmatype rhegmatypy rheic rhein rheinic rhema rhematic rhematology rheme rhenium rheobase rheocrat rheologist rheology rheometer rheometric rheometry rheophile rheophore rheophoric rheoplankton rheoscope rheoscopic rheostat rheostatic rheostatics rheotactic rheotan rheotaxis rheotome rheotrope rheotropic rheotropism rhesian rhesus rhetor rhetoric rhetorical rhetorically rhetoricalness rhetoricals rhetorician rhetorize rheum rheumarthritis rheumatalgia rheumatic rheumatical rheumatically rheumaticky rheumatism rheumatismal rheumatismoid rheumative rheumatiz rheumatize rheumatoid rheumatoidal rheumatoidally rheumed rheumic rheumily rheuminess rheumy rhexis rhigolene rhigosis rhigotic rhinal rhinalgia rhinarium rhincospasm rhine rhinencephalic rhinencephalon rhinencephalous rhinenchysis rhinestone rhineurynter rhinion rhinitis rhino rhinobyon rhinocaul rhinocele rhinocelian rhinocerial rhinocerian rhinocerine rhinoceroid rhinoceros rhinoceroslike rhinocerotic rhinocerotiform rhinocerotine rhinocerotoid rhinochiloplasty rhinodynia rhinogenous rhinolalia rhinolaryngology rhinolaryngoscope rhinolite rhinolith rhinolithic rhinological rhinologist rhinology rhinolophid rhinolophine rhinopharyngeal rhinopharyngitis rhinopharynx rhinophonia rhinophore rhinophyma rhinoplastic rhinoplasty rhinopolypus rhinorrhagia rhinorrhea rhinorrheal rhinoscleroma rhinoscope rhinoscopic rhinoscopy rhinosporidiosis rhinotheca rhinothecal rhipidate rhipidion rhipidistian rhipidium rhipidoglossal rhipidoglossate rhipidopterous rhipiphorid rhipipteran rhipipterous rhizanthous rhizautoicous rhizine rhizinous rhizocarp rhizocarpean rhizocarpian rhizocarpic rhizocarpous rhizocaul rhizocaulus rhizocephalan rhizocephalous rhizocorm rhizoctoniose rhizodermis rhizoflagellate rhizogen rhizogenetic rhizogenic rhizogenous rhizoid rhizoidal rhizoma rhizomatic rhizomatous rhizome rhizomelic rhizomic rhizomorph rhizomorphic rhizomorphoid rhizomorphous rhizoneure rhizophagous rhizophilous rhizophoraceous rhizophore rhizophorous rhizophyte rhizoplast rhizopod rhizopodal rhizopodan rhizopodist rhizopodous rhizosphere rhizostomatous rhizostome rhizostomous rhizotaxis rhizotaxy rhizote rhizotic rhizotomi rhizotomy rho rhodaline rhodamine rhodanate rhodanic rhodanine rhodanthe rhodeose rhodeswood rhodic rhoding rhodinol rhodite rhodium rhodizite rhodizonic rhodochrosite rhodocyte rhododendron rhodolite rhodomelaceous rhodonite rhodophane rhodophyceous rhodophyll rhodoplast rhodopsin rhodorhiza rhodosperm rhodospermin rhodospermous rhodymeniaceous rhomb rhombencephalon rhombenporphyr rhombic rhombical rhombiform rhomboclase rhomboganoid rhombogene rhombogenic rhombogenous rhombohedra rhombohedral rhombohedrally rhombohedric rhombohedron rhomboid rhomboidal rhomboidally rhomboideus rhomboidly rhomboquadratic rhomborectangular rhombos rhombovate rhombus rhonchal rhonchial rhonchus rhopalic rhopalism rhopalium rhopaloceral rhopalocerous rhotacism rhotacismus rhotacistic rhotacize rhubarb rhubarby rhumb rhumba rhumbatron rhyacolite rhyme rhymeless rhymelet rhymemaker rhymemaking rhymeproof rhymer rhymery rhymester rhymewise rhymic rhymist rhymy rhynchocephalian rhynchocephalic rhynchocephalous rhynchocoelan rhynchocoelic rhynchocoelous rhyncholite rhynchonelloid rhynchophoran rhynchophore rhynchophorous rhynchotal rhynchote rhynchotous rhynconellid rhyobasalt rhyodacite rhyolite rhyolitic rhyotaxitic rhyparographer rhyparographic rhyparographist rhyparography rhypography rhyptic rhyptical rhysimeter rhythm rhythmal rhythmic rhythmical rhythmicality rhythmically rhythmicity rhythmicize rhythmics rhythmist rhythmizable rhythmization rhythmize rhythmless rhythmometer rhythmopoeia rhythmproof rhytidome rhytidosis rhyton ria rial riancy riant riantly riata rib ribald ribaldish ribaldly ribaldrous ribaldry riband ribandlike ribandmaker ribandry ribat ribaudequin ribaudred ribband ribbandry ribbed ribber ribbet ribbidge ribbing ribble ribbon ribbonback ribboner ribbonfish ribbonlike ribbonmaker ribbonry ribbonweed ribbonwood ribbony ribby ribe ribless riblet riblike riboflavin ribonic ribonuclease ribonucleic ribose ribroast ribroaster ribroasting ribskin ribspare ribwork ribwort ricciaceous rice ricebird riceland ricer ricey rich richdom richellite richen riches richesse richling richly richness richt richterite richweed ricin ricine ricinelaidic ricinelaidinic ricinic ricinine ricininic ricinium ricinoleate ricinoleic ricinolein ricinolic ricinus rick rickardite ricker ricketily ricketiness ricketish rickets rickettsial rickettsialpox rickety rickey rickle rickmatic rickrack ricksha rickshaw rickstaddle rickstand rickstick rickyard ricochet ricolettaite ricrac rictal rictus rid ridable ridableness ridably riddam riddance riddel ridden ridder ridding riddle riddlemeree riddler riddling riddlingly riddlings ride rideable rideau riden rident rider ridered rideress riderless ridge ridgeband ridgeboard ridgebone ridged ridgel ridgelet ridgelike ridgeling ridgepiece ridgeplate ridgepole ridgepoled ridger ridgerope ridgetree ridgeway ridgewise ridgil ridging ridgingly ridgling ridgy ridibund ridicule ridiculer ridiculize ridiculosity ridiculous ridiculously ridiculousness riding ridingman ridotto rie riebeckite riem riempie rier rife rifely rifeness riff riffle riffler riffraff rifle riflebird rifledom rifleman riflemanship rifleproof rifler riflery rifleshot rifling rift rifter riftless rifty rig rigadoon rigamajig rigamarole rigation rigbane rigescence rigescent riggald rigger rigging riggish riggite riggot right rightabout righten righteous righteously righteousness righter rightful rightfully rightfulness rightheaded righthearted rightist rightle rightless rightlessness rightly rightmost rightness righto rightship rightward rightwardly rightwards righty rigid rigidify rigidist rigidity rigidly rigidness rigidulous rigling rigmaree rigmarole rigmarolery rigmarolic rigmarolish rigmarolishly rignum rigol rigolette rigor rigorism rigorist rigoristic rigorous rigorously rigorousness rigsby rigsdaler rigwiddie rigwiddy rikisha rikk riksha rikshaw rilawa rile riley rill rillet rillett rillette rillock rillstone rilly rim rima rimal rimate rimbase rime rimeless rimer rimester rimfire rimiform rimland rimless rimmaker rimmaking rimmed rimmer rimose rimosely rimosity rimous rimpi rimple rimption rimrock rimu rimula rimulose rimy rinceau rinch rincon rind rinded rinderpest rindle rindless rindy rine ring ringable ringbark ringbarker ringbill ringbird ringbolt ringbone ringboned ringcraft ringdove ringe ringed ringent ringer ringeye ringgiver ringgiving ringgoer ringhals ringhead ringiness ringing ringingly ringingness ringite ringle ringlead ringleader ringleaderless ringleadership ringless ringlet ringleted ringlety ringlike ringmaker ringmaking ringman ringmaster ringneck ringsail ringside ringsider ringster ringtail ringtaw ringtime ringtoss ringwalk ringwall ringwise ringworm ringy rink rinka rinker rinkite rinncefada rinneite rinner rinsable rinse rinser rinsing rinthereout rintherout rio riot rioter rioting riotingly riotist riotistic riotocracy riotous riotously riotousness riotproof riotry rip ripa ripal riparial riparian riparious ripcord ripe ripelike ripely ripen ripener ripeness ripening ripeningly riper ripgut ripicolous ripidolite ripienist ripieno ripier ripost riposte rippable ripper ripperman rippet rippier ripping rippingly rippingness rippit ripple rippleless rippler ripplet rippling ripplingly ripply rippon riprap riprapping ripsack ripsaw ripsnorter ripsnorting ripup riroriro risala risberm rise risen riser rishi rishtadar risibility risible risibleness risibles risibly rising risk risker riskful riskfulness riskily riskiness riskish riskless riskproof risky risorial risorius risp risper risque risquee rissel risser rissle rissoid rist ristori rit rita ritardando rite riteless ritelessness ritling ritornel ritornelle ritornello rittingerite ritual ritualism ritualist ritualistic ritualistically rituality ritualize ritualless ritually ritzy riva rivage rival rivalable rivaless rivalism rivality rivalize rivalless rivalrous rivalry rivalship rive rivel rivell riven river riverain riverbank riverbush riverdamp rivered riverhead riverhood riverine riverish riverless riverlet riverlike riverling riverly riverman riverscape riverside riversider riverward riverwards riverwash riverway riverweed riverwise rivery rivet riveter rivethead riveting rivetless rivetlike riving rivingly rivose rivulariaceous rivulation rivulet rivulose rix rixatrix rixy riyal riziform rizzar rizzle rizzom rizzomed rizzonite roach roachback road roadability roadable roadbed roadblock roadbook roadcraft roaded roader roadfellow roadhead roadhouse roading roadite roadless roadlessness roadlike roadman roadmaster roadside roadsider roadsman roadstead roadster roadstone roadtrack roadway roadweed roadwise roadworthiness roadworthy roam roamage roamer roaming roamingly roan roanoke roar roarer roaring roaringly roast roastable roaster roasting roastingly rob robalito robalo roband robber robberproof robbery robbin robbing robe robeless rober roberd robin robinet robing robinin robinoside roble robomb roborant roborate roboration roborative roborean roboreous robot robotesque robotian robotism robotistic robotization robotize robotlike robotry robur roburite robust robustful robustfully robustfulness robustic robusticity robustious robustiously robustiousness robustity robustly robustness roc rocambole roccellic roccellin roccelline rochelime rocher rochet rocheted rock rockable rockably rockaby rockabye rockallite rockaway rockbell rockberry rockbird rockborn rockbrush rockcist rockcraft rockelay rocker rockery rocket rocketeer rocketer rocketlike rocketor rocketry rockety rockfall rockfish rockfoil rockhair rockhearted rockiness rocking rockingly rockish rocklay rockless rocklet rocklike rockling rockman rockrose rockshaft rockslide rockstaff rocktree rockward rockwards rockweed rockwood rockwork rocky rococo rocta rod rodd roddikin roddin rodding rode rodent rodential rodentially rodentian rodenticidal rodenticide rodentproof rodeo rodge rodham roding rodingite rodknight rodless rodlet rodlike rodmaker rodman rodney rodomont rodomontade rodomontadist rodomontador rodsman rodster rodwood roe roeblingite roebuck roed roelike roentgen roentgenism roentgenization roentgenize roentgenogram roentgenograph roentgenographic roentgenographically roentgenography roentgenologic roentgenological roentgenologically roentgenologist roentgenology roentgenometer roentgenometry roentgenoscope roentgenoscopic roentgenoscopy roentgenotherapy roentgentherapy roer roestone roey rog rogan rogation rogative rogatory roger rogersite roggle rogue roguedom rogueling roguery rogueship roguing roguish roguishly roguishness rohan rohob rohun rohuna roi roid roil roily roister roisterer roistering roisteringly roisterly roisterous roisterously roit roka roke rokeage rokee rokelay roker rokey roky role roleo roll rollable rollback rolled rollejee roller rollerer rollermaker rollermaking rollerman rollerskater rollerskating rolley rolleyway rolleywayman rolliche rollichie rollick rollicker rollicking rollickingly rollickingness rollicksome rollicksomeness rollicky rolling rollingly rollix rollmop rollock rollway roloway romaika romaine romal romance romancealist romancean romanceful romanceish romanceishness romanceless romancelet romancelike romancemonger romanceproof romancer romanceress romancical romancing romancist romancy romanium romantic romantical romanticalism romanticality romantically romanticalness romanticism romanticist romanticistic romanticity romanticize romanticly romanticness romantism romantist romanza romaunt rombos rombowline romeite romerillo romero rommack romp romper romping rompingly rompish rompishly rompishness rompu rompy roncador roncet ronco rond rondache rondacher rondawel ronde rondeau rondel rondelet rondelier rondelle rondellier rondino rondle rondo rondoletto rondure rone rongeur ronquil rontgen ronyon rood roodebok roodle roodstone roof roofage roofer roofing roofless rooflet rooflike roofman rooftree roofward roofwise roofy rooibok rooinek rook rooker rookeried rookery rookie rookish rooklet rooklike rooky rool room roomage roomed roomer roomful roomie roomily roominess roomkeeper roomless roomlet roommate roomstead roomth roomthily roomthiness roomthy roomward roomy roon roorback roosa roost roosted rooster roosterfish roosterhood roosterless roosters roostership root rootage rootcap rooted rootedly rootedness rooter rootery rootfast rootfastness roothold rootiness rootle rootless rootlessness rootlet rootlike rootling rootstalk rootstock rootwalt rootward rootwise rootworm rooty roove ropable rope ropeable ropeband ropebark ropedance ropedancer ropedancing ropelayer ropelaying ropelike ropemaker ropemaking ropeman roper roperipe ropery ropes ropesmith ropetrick ropewalk ropewalker ropeway ropework ropily ropiness roping ropish ropishness ropp ropy roque roquelaure roquer roquet roquette roquist roral roratorio roric roriferous rorifluent roritorious rorqual rorty rorulent rory rosacean rosaceous rosal rosanilin rosaniline rosarian rosario rosarium rosaruby rosary rosated roscherite roscid roscoelite rose roseal roseate roseately rosebay rosebud rosebush rosed rosedrop rosefish rosehead rosehill rosehiller roseine rosel roseless roselet roselike roselite rosella rosellate roselle rosemary rosenbuschite roseola roseolar roseoliform roseolous roseous roseroot rosery roset rosetan rosetangle rosetime rosette rosetted rosetty rosetum rosety roseways rosewise rosewood rosewort rosied rosier rosieresite rosilla rosillo rosily rosin rosinate rosinduline rosiness rosinous rosinweed rosinwood rosiny rosland rosmarine rosoli rosolic rosolio rosolite rosorial ross rosser rossite rostel rostellar rostellarian rostellate rostelliform rostellum roster rostra rostral rostrally rostrate rostrated rostriferous rostriform rostroantennary rostrobranchial rostrocarinate rostrocaudal rostroid rostrolateral rostrular rostrulate rostrulum rostrum rosular rosulate rosy rot rota rotacism rotal rotalian rotaliform rotaliiform rotaman rotameter rotan rotang rotarianize rotary rotascope rotatable rotate rotated rotating rotation rotational rotative rotatively rotativism rotatodentate rotatoplane rotator rotatorian rotatory rotch rote rotella rotenone roter rotge rotgut rother rothermuck rotifer rotiferal rotiferan rotiferous rotiform rotisserie roto rotograph rotogravure rotor rotorcraft rotproof rottan rotten rottenish rottenly rottenness rottenstone rotter rotting rottle rottlera rottlerin rottock rottolo rotula rotulad rotular rotulet rotulian rotuliform rotulus rotund rotunda rotundate rotundifoliate rotundifolious rotundiform rotundify rotundity rotundly rotundness rotundo rotundotetragonal roub roucou roud roue rouelle rouge rougeau rougeberry rougelike rougemontite rougeot rough roughage roughcast roughcaster roughdraft roughdraw roughdress roughdry roughen roughener rougher roughet roughhearted roughheartedness roughhew roughhewer roughhewn roughhouse roughhouser roughhousing roughhousy roughie roughing roughings roughish roughishly roughishness roughleg roughly roughness roughometer roughride roughrider roughroot roughscuff roughsetter roughshod roughslant roughsome roughstring roughstuff roughtail roughtailed roughwork roughwrought roughy rougy rouille rouky roulade rouleau roulette roun rounce rounceval rouncy round roundabout roundaboutly roundaboutness rounded roundedly roundedness roundel roundelay roundeleer rounder roundfish roundhead roundheaded roundheadedness roundhouse rounding roundish roundishness roundlet roundline roundly roundmouthed roundness roundnose roundnosed roundridge roundseam roundsman roundtail roundtop roundtree roundup roundwise roundwood roundworm roundy roup rouper roupet roupily roupingwife roupit roupy rouse rouseabout rousedness rousement rouser rousing rousingly roussette roust roustabout rouster rousting rout route router routh routhercock routhie routhiness routhy routinary routine routineer routinely routing routinish routinism routinist routinization routinize routivarite routous routously rouvillite rove rover rovet rovetto roving rovingly rovingness row rowable rowan rowanberry rowboat rowdily rowdiness rowdy rowdydow rowdydowdy rowdyish rowdyishly rowdyishness rowdyism rowdyproof rowed rowel rowelhead rowen rower rowet rowiness rowing rowlandite rowlet rowlock rowport rowty rowy rox roxy royal royale royalet royalism royalist royalization royalize royally royalty royet royetness royetous royetously royt rozum ruach ruana rub rubasse rubato rubbed rubber rubberer rubberize rubberless rubberneck rubbernecker rubbernose rubbers rubberstone rubberwise rubbery rubbing rubbingstone rubbish rubbishing rubbishingly rubbishly rubbishry rubbishy rubble rubbler rubblestone rubblework rubbly rubdown rubedinous rubedity rubefacient rubefaction rubelet rubella rubelle rubellite rubellosis rubeola rubeolar rubeoloid ruberythric ruberythrinic rubescence rubescent rubiaceous rubianic rubiate rubiator rubican rubicelle rubiconed rubicund rubicundity rubidic rubidine rubidium rubied rubific rubification rubificative rubify rubiginous rubijervine rubine rubineous rubious ruble rublis rubor rubric rubrica rubrical rubricality rubrically rubricate rubrication rubricator rubrician rubricism rubricist rubricity rubricize rubricose rubrific rubrification rubrify rubrisher rubrospinal rubstone ruby rubylike rubytail rubythroat rubywise rucervine ruche ruching ruck rucker ruckle ruckling rucksack rucksey ruckus rucky ructation ruction rud rudas rudd rudder rudderhead rudderhole rudderless rudderlike rudderpost rudderstock ruddied ruddily ruddiness ruddle ruddleman ruddock ruddy ruddyish rude rudely rudeness rudented rudenture ruderal rudesby rudge rudiment rudimental rudimentarily rudimentariness rudimentary rudimentation rudish rudistan rudistid rudity rue rueful ruefully ruefulness ruelike ruelle ruen ruer ruesome ruesomeness ruewort rufescence rufescent ruff ruffable ruffed ruffer ruffian ruffianage ruffiandom ruffianhood ruffianish ruffianism ruffianize ruffianlike ruffianly ruffiano ruffin ruffle ruffled ruffleless rufflement ruffler rufflike ruffliness ruffling ruffly ruficarpous ruficaudate ruficoccin ruficornate rufigallic rufoferruginous rufofulvous rufofuscous rufopiceous rufotestaceous rufous rufter rufulous rufus rug ruga rugate rugged ruggedly ruggedness rugging ruggle ruggy rugheaded ruglike rugmaker rugmaking rugosa rugose rugosely rugosity rugous rugulose ruin ruinable ruinate ruination ruinatious ruinator ruined ruiner ruing ruiniform ruinlike ruinous ruinously ruinousness ruinproof rukh rulable rule ruledom ruleless rulemonger ruler rulership ruling rulingly rull ruller rullion rum rumal rumbelow rumble rumblegarie rumblegumption rumblement rumbler rumbling rumblingly rumbly rumbo rumbooze rumbowline rumbowling rumbullion rumbumptious rumbustical rumbustious rumbustiousness rumchunder rumen rumenitis rumenocentesis rumenotomy rumfustian rumgumption rumgumptious ruminal ruminant ruminantly ruminate ruminating ruminatingly rumination ruminative ruminatively ruminator rumkin rumless rumly rummage rummager rummagy rummer rummily rumminess rummish rummy rumness rumney rumor rumorer rumormonger rumorous rumorproof rumourmonger rump rumpad rumpadder rumpade rumple rumpless rumply rumpscuttle rumpuncheon rumpus rumrunner rumrunning rumshop rumswizzle rumtytoo run runabout runagate runaround runaway runback runboard runby runch runchweed runcinate rundale rundle rundlet rune runecraft runed runefolk runeless runelike runer runesmith runestaff runeword runfish rung runghead rungless runholder runic runically runiform runite runkeeper runkle runkly runless runlet runman runnable runnel runner runnet running runningly runny runoff runologist runology runout runover runproof runrig runround runt runted runtee runtiness runtish runtishly runtishness runty runway rupa rupee rupestral rupestrian rupestrine rupia rupiah rupial rupicaprine rupicoline rupicolous rupie rupitic ruptile ruption ruptive ruptuary rupturable rupture ruptured rupturewort rural ruralism ruralist ruralite rurality ruralization ruralize rurally ruralness rurban ruridecanal rurigenous ruru ruse rush rushbush rushed rushen rusher rushiness rushing rushingly rushingness rushland rushlight rushlighted rushlike rushlit rushy rusine rusk ruskin rusky rusma rusot ruspone russel russet russeting russetish russetlike russety russia russud rust rustable rustful rustic rustical rustically rusticalness rusticate rustication rusticator rusticial rusticism rusticity rusticize rusticly rusticness rusticoat rustily rustiness rustle rustler rustless rustling rustlingly rustlingness rustly rustproof rustre rustred rusty rustyback rustyish ruswut rut rutabaga rutaceous rutaecarpine rutate rutch rutelian ruth ruthenate ruthenic ruthenious ruthenium ruthenous ruther rutherford rutherfordine rutherfordite ruthful ruthfully ruthfulness ruthless ruthlessly ruthlessness rutic rutidosis rutilant rutilated rutile rutilous rutin rutinose ruttee rutter ruttiness ruttish ruttishly ruttishness rutty rutyl rutylene ruvid rux rvulsant ryal ryania rybat ryder rye ryen ryme rynchosporous rynd rynt ryot ryotwar ryotwari rype rypeck rytidosis s sa saa sab sabadilla sabadine sabadinine sabaigrass sabalo sabanut sabbat sabbath sabbatia sabbatic sabbatical sabbatine sabbatism sabbaton sabbitha sabdariffa sabe sabeca sabella sabellan sabellarian sabellid sabelloid saber saberbill sabered saberleg saberlike saberproof sabertooth saberwing sabiaceous sabicu sabina sabine sabino sable sablefish sableness sably sabora saboraim sabot sabotage saboted saboteur sabotine sabra sabretache sabromin sabuline sabulite sabulose sabulosity sabulous sabulum saburra saburral saburration sabutan sabzi sac sacalait sacaline sacaton sacatra sacbrood saccade saccadic saccate saccated saccharamide saccharase saccharate saccharated saccharephidrosis saccharic saccharide sacchariferous saccharification saccharifier saccharify saccharilla saccharimeter saccharimetric saccharimetrical saccharimetry saccharin saccharinate saccharinated saccharine saccharineish saccharinely saccharinic saccharinity saccharization saccharize saccharobacillus saccharobiose saccharobutyric saccharoceptive saccharoceptor saccharochemotropic saccharocolloid saccharofarinaceous saccharogalactorrhea saccharogenic saccharohumic saccharoid saccharoidal saccharolactonic saccharolytic saccharometabolic saccharometabolism saccharometer saccharometric saccharometry saccharomucilaginous saccharomyces saccharomycetaceous saccharomycete saccharomycetic saccharomycosis saccharon saccharonate saccharone saccharonic saccharophylly saccharorrhea saccharoscope saccharose saccharostarchy saccharosuria saccharotriose saccharous saccharulmic saccharulmin saccharum saccharuria sacciferous sacciform saccobranchiate saccoderm saccolabium saccomyian saccomyid saccomyine saccomyoid saccomyoidean saccos saccular sacculate sacculated sacculation saccule sacculoutricular sacculus saccus sacellum sacerdocy sacerdotage sacerdotal sacerdotalism sacerdotalist sacerdotalize sacerdotally sacerdotical sacerdotism sachamaker sachem sachemdom sachemic sachemship sachet sack sackage sackamaker sackbag sackbut sackcloth sackclothed sackdoudle sacked sacken sacker sackful sacking sackless sacklike sackmaker sackmaking sackman sacktime saclike saco sacope sacque sacra sacrad sacral sacralgia sacralization sacrament sacramental sacramentalism sacramentalist sacramentality sacramentally sacramentalness sacramentarian sacramentarianism sacramentarist sacramentary sacramenter sacramentism sacramentize sacramentum sacraria sacrarial sacrarium sacrectomy sacred sacredly sacredness sacrificable sacrificant sacrification sacrificator sacrificatory sacrificature sacrifice sacrificer sacrificial sacrificially sacrificing sacrilege sacrileger sacrilegious sacrilegiously sacrilegiousness sacrilegist sacrilumbal sacrilumbalis sacring sacrist sacristan sacristy sacro sacrocaudal sacrococcygeal sacrococcygean sacrococcygeus sacrococcyx sacrocostal sacrocotyloid sacrocotyloidean sacrocoxalgia sacrocoxitis sacrodorsal sacrodynia sacrofemoral sacroiliac sacroinguinal sacroischiac sacroischiadic sacroischiatic sacrolumbal sacrolumbalis sacrolumbar sacropectineal sacroperineal sacropictorial sacroposterior sacropubic sacrorectal sacrosanct sacrosanctity sacrosanctness sacrosciatic sacrosecular sacrospinal sacrospinalis sacrospinous sacrotomy sacrotuberous sacrovertebral sacrum sad sadden saddening saddeningly saddik saddirham saddish saddle saddleback saddlebag saddlebow saddlecloth saddled saddleleaf saddleless saddlelike saddlenose saddler saddlery saddlesick saddlesore saddlesoreness saddlestead saddletree saddlewise saddling sade sadh sadhe sadhearted sadhu sadic sadiron sadism sadist sadistic sadistically sadly sadness sado sadomasochism sadr saecula saeculum saernaite saeter saeume safari safe safeblower safeblowing safebreaker safebreaking safecracking safeguard safeguarder safehold safekeeper safekeeping safelight safely safemaker safemaking safen safener safeness safety saffian safflor safflorite safflow safflower saffron saffroned saffrontree saffronwood saffrony safranin safranine safranophile safrole saft sag saga sagaciate sagacious sagaciously sagaciousness sagacity sagaie sagaman sagamite sagamore sagapenum sagathy sage sagebrush sagebrusher sagebush sageleaf sagely sagene sageness sagenite sagenitic sagerose sageship sagewood sagger sagging saggon saggy saghavart saginate sagination saging sagitta sagittal sagittally sagittarius sagittary sagittate sagittiferous sagittiform sagittocyst sagittoid sagless sago sagoin sagolike saguaro sagum saguran sagvandite sagwire sagy sah sahh sahib sahme sahoukar sahukar sai saic said saiga sail sailable sailage sailboat sailcloth sailed sailer sailfish sailflying sailing sailingly sailless sailmaker sailmaking sailor sailoring sailorizing sailorless sailorlike sailorly sailorman sailorproof sailplane sailship sailsman saily saim saimiri saimy sain saint saintdom sainted saintess sainthood saintish saintism saintless saintlike saintlily saintliness saintling saintly saintologist saintology saintship saip sair sairly sairve sairy saithe saj sajou sake sakeber sakeen saker sakeret saki sakieh sakulya sal salaam salaamlike salability salable salableness salably salaceta salacious salaciously salaciousness salacity salacot salad salading salago salagrama salal salamandarin salamander salamanderlike salamandrian salamandriform salamandrine salamandroid salambao salamo salampore salangane salangid salar salariat salaried salary salaryless salat salay sale salegoer salele salema salenixon salep saleratus saleroom salesclerk saleslady salesman salesmanship salespeople salesperson salesroom saleswoman salework saleyard salfern salic salicaceous salicetum salicin salicional salicorn salicyl salicylal salicylaldehyde salicylamide salicylanilide salicylase salicylate salicylic salicylide salicylidene salicylism salicylize salicylous salicyluric salicylyl salience salient salientian saliently saliferous salifiable salification salify saligenin saligot salimeter salimetry salina salination saline salinelle salineness saliniferous salinification saliniform salinity salinize salinometer salinometry salinosulphureous salinoterreous salite salited saliva salival salivant salivary salivate salivation salivator salivatory salivous salix salle sallee salleeman sallenders sallet sallier salloo sallow sallowish sallowness sallowy sally sallyman sallywood salma salmagundi salmiac salmine salmis salmon salmonberry salmonella salmonellae salmonellosis salmonet salmonid salmoniform salmonlike salmonoid salmonsite salmwood salnatron salol salometer salometry salomon salon saloon saloonist saloonkeeper saloop salopian salp salpa salpacean salpian salpicon salpiform salpiglossis salpingectomy salpingemphraxis salpinges salpingian salpingion salpingitic salpingitis salpingocatheterism salpingocele salpingocyesis salpingomalleus salpingonasal salpingopalatal salpingopalatine salpingoperitonitis salpingopexy salpingopharyngeal salpingopharyngeus salpingopterygoid salpingorrhaphy salpingoscope salpingostaphyline salpingostenochoria salpingostomatomy salpingostomy salpingotomy salpinx salpoid salse salsifis salsify salsilla salsolaceous salsuginous salt salta saltant saltarella saltarello saltary saltate saltation saltativeness saltator saltatorial saltatorian saltatoric saltatorious saltatory saltbush saltcat saltcatch saltcellar salted saltee salten salter saltern saltery saltfat saltfoot salthouse saltier saltierra saltierwise saltigrade saltimbanco saltimbank saltimbankery saltine saltiness salting saltish saltishly saltishness saltless saltlessness saltly saltmaker saltmaking saltman saltmouth saltness saltometer saltorel saltpan saltpeter saltpetrous saltpond saltspoon saltspoonful saltsprinkler saltus saltweed saltwife saltworker saltworks saltwort salty salubrify salubrious salubriously salubriousness salubrity saluki salung salutarily salutariness salutary salutation salutational salutationless salutatious salutatorian salutatorily salutatorium salutatory salute saluter salutiferous salutiferously salvability salvable salvableness salvably salvadora salvadoraceous salvage salvageable salvagee salvageproof salvager salvaging salvarsan salvatella salvation salvational salvationism salvationist salvatory salve salveline salver salverform salvianin salvific salvifical salvifically salviniaceous salviol salvo salvor salvy salzfelle sam samadh samadhi samaj saman samara samaria samariform samarium samaroid samarra samarskite samba sambal sambaqui sambar sambhogakaya sambo sambuk sambuke sambunigrin same samekh samel sameliness samely samen sameness samesome samh samhita samiel samiresite samiri samisen samite samkara samlet sammel sammer sammier sammy samogonka samothere samovar samp sampaguita sampaloc sampan samphire sampi sample sampleman sampler samplery sampling samsara samshu samskara samson samsonite samurai san sanability sanable sanableness sanai sanative sanativeness sanatoria sanatorium sanatory sanbenito sancho sanct sancta sanctanimity sanctifiable sanctifiableness sanctifiably sanctificate sanctification sanctified sanctifiedly sanctifier sanctify sanctifyingly sanctilogy sanctiloquent sanctimonial sanctimonious sanctimoniously sanctimoniousness sanctimony sanction sanctionable sanctionary sanctionative sanctioner sanctionist sanctionless sanctionment sanctitude sanctity sanctologist sanctorium sanctuaried sanctuarize sanctuary sanctum sancyite sand sandak sandal sandaled sandaliform sandaling sandalwood sandalwort sandan sandarac sandaracin sandastros sandbag sandbagger sandbank sandbin sandblast sandboard sandbox sandboy sandbur sandclub sandculture sanded sander sanderling sanders sandfish sandflower sandglass sandheat sandhi sandiferous sandiness sanding sandiver sandix sandlapper sandless sandlike sandling sandman sandnatter sandnecker sandpaper sandpaperer sandpeep sandpiper sandproof sandrock sandspit sandspur sandstay sandstone sandstorm sandust sandweed sandweld sandwich sandwood sandworm sandwort sandy sandyish sane sanely saneness sang sanga sangar sangaree sangei sanger sangerbund sangerfest sangha sanglant sangley sangreeroot sangrel sangsue sanguicolous sanguifacient sanguiferous sanguification sanguifier sanguifluous sanguimotor sanguimotory sanguinaceous sanguinarily sanguinariness sanguinary sanguine sanguineless sanguinely sanguineness sanguineobilious sanguineophlegmatic sanguineous sanguineousness sanguineovascular sanguinicolous sanguiniferous sanguinification sanguinism sanguinity sanguinivorous sanguinocholeric sanguinolency sanguinolent sanguinopoietic sanguinous sanguisuge sanguisugent sanguisugous sanguivorous sanicle sanidine sanidinic sanidinite sanies sanification sanify sanious sanipractic sanitarian sanitarily sanitarist sanitarium sanitary sanitate sanitation sanitationist sanitist sanitize sanity sanjak sanjakate sanjakbeg sanjakship sank sankha sannaite sannup sannyasi sannyasin sanopurulent sanoserous sans sansei sanshach sansi sant santal santalaceous santalic santalin santalol santalwood santapee santene santimi santims santir santon santonica santonin santoninic santorinite sanukite sao sap sapa sapajou sapan sapanwood sapbush sapek sapful saphead sapheaded sapheadedness saphena saphenal saphenous saphie sapid sapidity sapidless sapidness sapience sapiency sapient sapiential sapientially sapientize sapiently sapin sapinda sapindaceous sapindaship sapiutan saple sapless saplessness sapling saplinghood sapo sapodilla sapogenin saponaceous saponaceousness saponacity saponarin saponary saponifiable saponification saponifier saponify saponin saponite sapophoric sapor saporific saporosity saporous sapota sapotaceous sapote sapotilha sapotilla sapotoxin sappanwood sappare sapper sapphic sapphire sapphireberry sapphired sapphirewing sapphiric sapphirine sappiness sapping sapples sappy sapremia sapremic saprine saprocoll saprodil saprodontia saprogenic saprogenous saprolegniaceous saprolegnious saprolite saprolitic sapropel sapropelic sapropelite saprophagan saprophagous saprophile saprophilous saprophyte saprophytic saprophytically saprophytism saprostomous saprozoic sapsago sapskull sapsuck sapsucker sapucaia sapucainha sapwood sapwort sar saraad sarabacan saraband saraf sarangi sarangousty sarawakite sarbacane sarbican sarcasm sarcasmproof sarcast sarcastic sarcastical sarcastically sarcasticalness sarcasticness sarcelle sarcenet sarcilis sarcine sarcitis sarcle sarcler sarcoadenoma sarcoblast sarcocarcinoma sarcocarp sarcocele sarcocollin sarcocyst sarcocystidean sarcocystidian sarcocystoid sarcocyte sarcode sarcoderm sarcodic sarcodictyum sarcodous sarcoenchondroma sarcogenic sarcogenous sarcoglia sarcoid sarcolactic sarcolemma sarcolemmic sarcolemmous sarcoline sarcolite sarcologic sarcological sarcologist sarcology sarcolysis sarcolyte sarcolytic sarcoma sarcomatoid sarcomatosis sarcomatous sarcomere sarcophagal sarcophagi sarcophagic sarcophagid sarcophagine sarcophagize sarcophagous sarcophagus sarcophagy sarcophile sarcophilous sarcoplasm sarcoplasma sarcoplasmatic sarcoplasmic sarcoplast sarcoplastic sarcopoietic sarcoptic sarcoptid sarcosepsis sarcosepta sarcoseptum sarcosine sarcosis sarcosoma sarcosperm sarcosporid sarcosporidial sarcosporidian sarcosporidiosis sarcostosis sarcostyle sarcotheca sarcotherapeutics sarcotherapy sarcotic sarcous sard sardachate sardel sardine sardinewise sardius sardonic sardonical sardonically sardonicism sardonyx sare sargasso sargassum sargo sargus sari sarif sarigue sarinda sarip sark sarkar sarkful sarkical sarkine sarking sarkinite sarkit sarkless sarlak sarlyk sarmatier sarment sarmenta sarmentaceous sarmentiferous sarmentose sarmentous sarmentum sarna sarod saron sarong saronic saronide saros sarothrum sarpler sarpo sarra sarracenia sarraceniaceous sarracenial sarraf sarrazin sarrusophone sarrusophonist sarsa sarsaparilla sarsaparillin sarsen sarsenet sart sartage sartain sartor sartoriad sartorial sartorially sartorian sartorite sartorius sarus sarwan sasa sasan sasani sasanqua sash sashay sashery sashing sashless sasin sasine saskatoon sassaby sassafac sassafrack sassafras sassolite sassy sassywood sat satable satan satang satanic satanical satanically satanicalness satanist satanize satara satchel satcheled sate sateen sateenwood sateless satelles satellitarian satellite satellited satellitesimal satellitian satellitic satellitious satellitium satellitoid satellitory satelloid satiability satiable satiableness satiably satiate satiation satient satiety satin satinbush satine satined satinette satinfin satinflower satinite satinity satinize satinleaf satinlike satinpod satinwood satiny satire satireproof satiric satirical satirically satiricalness satirist satirizable satirize satirizer satisdation satisdiction satisfaction satisfactional satisfactionist satisfactionless satisfactive satisfactorily satisfactoriness satisfactorious satisfactory satisfiable satisfice satisfied satisfiedly satisfiedness satisfier satisfy satisfying satisfyingly satisfyingness satispassion satlijk satrap satrapal satrapess satrapic satrapical satrapy satron sattle sattva satura saturability saturable saturant saturate saturated saturater saturation saturator saturnalia saturnalian saturnian saturniid saturnine saturninely saturnineness saturninity saturnism saturnity saturnize satyagrahi satyashodak satyr satyresque satyress satyriasis satyric satyrine satyrion satyrism satyrlike satyromaniac sauce sauceboat saucebox saucedish sauceless sauceline saucemaker saucemaking sauceman saucepan sauceplate saucer saucerful saucerleaf saucerless saucerlike saucily sauciness saucy sauerkraut sauf sauger saugh saughen sauld saulie sault saulter saum saumon saumont sauna saunders saunderswood saunter saunterer sauntering saunteringly sauqui saur saurel saurian sauriasis sauriosis saurischian saurodont saurognathism saurognathous saurophagous sauropod sauropodous sauropsid sauropsidan sauropsidian sauropterygian saurornithic saururaceous saururan saururous saury sausage sausagelike sausinger saussurite saussuritic saussuritization saussuritize saut saute sauterelle sauterne sauternes sauteur sauty sauve sauvegarde savable savableness savacu savage savagedom savagely savageness savagerous savagery savagess savagism savagize savanilla savanna savant savarin savation save saved saveloy saver savin saving savingly savingness savior savioress saviorhood saviorship savola savor savored savorer savorily savoriness savoringly savorless savorous savorsome savory savour savoy savoyed savoying savssat savvy saw sawah sawali sawarra sawback sawbelly sawbill sawbones sawbuck sawbwa sawder sawdust sawdustish sawdustlike sawdusty sawed sawer sawfish sawfly sawhorse sawing sawish sawlike sawmaker sawmaking sawman sawmill sawmiller sawmilling sawmon sawmont sawn sawney sawsetter sawsharper sawsmith sawt sawway sawworker sawwort sawyer sax saxatile saxboard saxcornet saxhorn saxicavous saxicole saxicoline saxicolous saxifragaceous saxifragant saxifrage saxifragous saxifrax saxigenous saxonite saxophone saxophonist saxotromba saxpence saxten saxtie saxtuba say saya sayability sayable sayableness sayer sayette sayid saying sazen sblood sbodikins scab scabbard scabbardless scabbed scabbedness scabbery scabbily scabbiness scabble scabbler scabbling scabby scabellum scaberulous scabid scabies scabietic scabinus scabiosity scabious scabish scabland scabrate scabrescent scabrid scabridity scabridulous scabrities scabriusculose scabriusculous scabrosely scabrous scabrously scabrousness scabwort scacchic scacchite scad scaddle scads scaff scaffer scaffery scaffie scaffle scaffold scaffoldage scaffolder scaffolding scaglia scagliola scagliolist scala scalable scalableness scalably scalage scalar scalare scalarian scalariform scalarwise scalation scalawag scalawaggery scalawaggy scald scaldberry scalded scalder scaldfish scaldic scalding scaldweed scaldy scale scaleback scalebark scaleboard scaled scaledrake scalefish scaleful scaleless scalelet scalelike scaleman scalena scalene scalenohedral scalenohedron scalenon scalenous scalenum scalenus scalepan scaleproof scaler scales scalesman scalesmith scaletail scalewing scalewise scalework scalewort scaliger scaliness scaling scall scalled scallion scallola scallom scallop scalloper scalloping scallopwise scalma scaloni scalp scalpeen scalpel scalpellar scalpellic scalpellum scalpellus scalper scalping scalpless scalpriform scalprum scalpture scalt scaly scalytail scam scamander scamble scambler scambling scamell scamler scamles scammoniate scammonin scammony scammonyroot scamp scampavia scamper scamperer scamphood scamping scampingly scampish scampishly scampishness scampsman scan scandal scandalization scandalize scandalizer scandalmonger scandalmongering scandalmongery scandalmonging scandalous scandalously scandalousness scandalproof scandaroon scandent scandia scandic scandicus scandium scanmag scannable scanner scanning scanningly scansion scansionist scansorial scansorious scant scanties scantily scantiness scantity scantle scantling scantlinged scantly scantness scanty scap scape scapegallows scapegoat scapegoatism scapegrace scapel scapeless scapement scapethrift scapha scaphion scaphism scaphite scaphitoid scaphocephalic scaphocephalism scaphocephalous scaphocephalus scaphocephaly scaphocerite scaphoceritic scaphognathite scaphognathitic scaphoid scapholunar scaphopod scaphopodous scapiform scapigerous scapoid scapolite scapolitization scapose scapple scappler scapula scapulalgia scapular scapulare scapulary scapulated scapulectomy scapulet scapulimancy scapuloaxillary scapulobrachial scapuloclavicular scapulocoracoid scapulodynia scapulohumeral scapulopexy scapuloradial scapulospinal scapulothoracic scapuloulnar scapulovertebral scapus scar scarab scarabaean scarabaei scarabaeid scarabaeidoid scarabaeiform scarabaeoid scarabaeus scarabee scaraboid scaramouch scarce scarcelins scarcely scarcement scarcen scarceness scarcity scare scarebabe scarecrow scarecrowish scarecrowy scareful scarehead scaremonger scaremongering scareproof scarer scaresome scarf scarface scarfed scarfer scarflike scarfpin scarfskin scarfwise scarfy scarid scarification scarificator scarifier scarify scarily scariose scarious scarlatina scarlatinal scarlatiniform scarlatinoid scarlatinous scarless scarlet scarletberry scarletseed scarlety scarman scarn scaroid scarp scarpines scarping scarpment scarproof scarred scarrer scarring scarry scart scarth scarus scarved scary scase scasely scat scatch scathe scatheful scatheless scathelessly scathing scathingly scatland scatologia scatologic scatological scatology scatomancy scatophagid scatophagoid scatophagous scatophagy scatoscopy scatter scatterable scatteration scatteraway scatterbrain scatterbrained scatterbrains scattered scatteredly scatteredness scatterer scattergood scattering scatteringly scatterling scattermouch scattery scatty scatula scaturient scaul scaum scaup scauper scaur scaurie scaut scavage scavel scavenage scavenge scavenger scavengerism scavengership scavengery scavenging scaw scawd scawl scazon scazontic sceat scelalgia scelerat scelidosaur scelidosaurian scelidosauroid sceloncus scelotyrbe scena scenario scenarioist scenarioization scenarioize scenarist scenarization scenarize scenary scend scene scenecraft sceneful sceneman scenery sceneshifter scenewright scenic scenical scenically scenist scenite scenograph scenographer scenographic scenographical scenographically scenography scent scented scenter scentful scenting scentless scentlessness scentproof scentwood scepsis scepter scepterdom sceptered scepterless sceptic sceptral sceptropherous sceptrosophy sceptry scerne sceuophorion sceuophylacium sceuophylax schaapsteker schairerite schalmei schalmey schalstein schanz schapbachite schappe schapped schapping scharf schatchen schediasm schediastic schedular schedulate schedule schedulize scheelite scheffel schefferite schelling schelly scheltopusik schema schemata schematic schematically schematism schematist schematization schematize schematizer schematogram schematograph schematologetically schematomancy schematonics scheme schemeful schemeless schemer schemery scheming schemingly schemist schemy schene schepel schepen scherm scherzando scherzi scherzo schesis scheuchzeriaceous schiavone schiffli schiller schillerfels schillerization schillerize schilling schimmel schindylesis schindyletic schipperke schism schisma schismatic schismatical schismatically schismaticalness schismatism schismatist schismatize schismic schismless schist schistaceous schistic schistocelia schistocephalus schistocoelia schistocormia schistocormus schistocyte schistocytosis schistoglossia schistoid schistomelia schistomelus schistoprosopia schistoprosopus schistorrhachis schistoscope schistose schistosity schistosome schistosomia schistosomiasis schistosomus schistosternia schistothorax schistous schistus schizaeaceous schizanthus schizaxon schizocarp schizocarpic schizocarpous schizochroal schizocoele schizocoelic schizocoelous schizocyte schizocytosis schizodinic schizogamy schizogenesis schizogenetic schizogenetically schizogenic schizogenous schizogenously schizognath schizognathism schizognathous schizogonic schizogony schizogregarine schizoid schizoidism schizolaenaceous schizolite schizolysigenous schizomycete schizomycetic schizomycetous schizomycosis schizonemertean schizonemertine schizont schizopelmous schizophasia schizophrene schizophrenia schizophreniac schizophrenic schizophyte schizophytic schizopod schizopodal schizopodous schizorhinal schizospore schizostele schizostelic schizostely schizothecal schizothoracic schizothyme schizothymia schizothymic schizotrichia schiztic schlemiel schlemihl schlenter schlieren schlieric schloop schmaltz schmelz schmelze schnabel schnapper schnapps schnauzer schneider schnitzel schnorchel schnorkel schnorrer scho schochat schochet schoenobatic schoenobatist schoenus schola scholae scholaptitude scholar scholarch scholardom scholarian scholarism scholarless scholarlike scholarliness scholarly scholarship scholasm scholastic scholastical scholastically scholasticate scholasticism scholasticly scholia scholiast scholiastic scholion scholium schone schonfelsite school schoolable schoolbag schoolbook schoolbookish schoolboy schoolboydom schoolboyhood schoolboyish schoolboyishly schoolboyishness schoolboyism schoolbutter schoolcraft schooldame schooldom schooled schoolery schoolfellow schoolfellowship schoolful schoolgirl schoolgirlhood schoolgirlish schoolgirlishly schoolgirlishness schoolgirlism schoolgirly schoolgoing schoolhouse schooling schoolingly schoolish schoolkeeper schoolkeeping schoolless schoollike schoolmaam schoolmaamish schoolmaid schoolman schoolmaster schoolmasterhood schoolmastering schoolmasterish schoolmasterishly schoolmasterishness schoolmasterism schoolmasterly schoolmastership schoolmastery schoolmate schoolmiss schoolmistress schoolmistressy schoolroom schoolteacher schoolteacherish schoolteacherly schoolteachery schoolteaching schooltide schooltime schoolward schoolwork schoolyard schoon schooner schoppen schorenbergite schorl schorlaceous schorlomite schorlous schorly schottische schottish schout schraubthaler schreiner schreinerize schriesheimite schtoff schuh schuhe schuit schule schultenite schungite schuss schute schwa schwabacher schwarz schweizer schweizerkase sciaenid sciaeniform sciaenoid scialytic sciamachy sciapod sciapodous sciarid sciatheric sciatherical sciatherically sciatic sciatica sciatical sciatically sciaticky scibile science scienced scient sciential scientician scientific scientifical scientifically scientificalness scientificogeographical scientificohistorical scientificophilosophical scientificopoetic scientificoreligious scientificoromantic scientintically scientism scientist scientistic scientistically scientize scientolism scilicet scillain scillipicrin scillitin scillitoxin scimitar scimitared scimitarpod scincid scincidoid scinciform scincoid scincoidian scind sciniph scintilla scintillant scintillantly scintillate scintillating scintillatingly scintillation scintillator scintillescent scintillize scintillometer scintilloscope scintillose scintillously scintle scintler scintling sciograph sciographic sciography sciolism sciolist sciolistic sciolous sciomachiology sciomachy sciomancy sciomantic scion sciophilous sciophyte scioptic sciopticon scioptics scioptric sciosophist sciosophy scioterical scioterique sciotheism sciotheric sciotherical sciotherically scious scirenga scirrhi scirrhogastria scirrhoid scirrhoma scirrhosis scirrhous scirrhus scirrosity scirtopod scirtopodous scissel scissible scissile scission scissiparity scissor scissorbill scissorbird scissorer scissoring scissorium scissorlike scissorlikeness scissors scissorsbird scissorsmith scissorstail scissortail scissorwise scissura scissure scissurellid sciurid sciurine sciuroid sciuromorph sciuromorphic sclaff sclate sclater sclaw scler sclera scleral scleranth scleratogenous sclere sclerectasia sclerectomy scleredema sclereid sclerema sclerencephalia sclerenchyma sclerenchymatous sclerenchyme sclererythrin scleretinite scleriasis sclerification sclerify sclerite scleritic scleritis sclerized sclerobase sclerobasic scleroblast scleroblastema scleroblastemic scleroblastic sclerocauly sclerochorioiditis sclerochoroiditis scleroconjunctival scleroconjunctivitis sclerocornea sclerocorneal sclerodactylia sclerodactyly scleroderm scleroderma sclerodermatitis sclerodermatous sclerodermia sclerodermic sclerodermite sclerodermitic sclerodermitis sclerodermous sclerogen sclerogenoid sclerogenous scleroid scleroiritis sclerokeratitis sclerokeratoiritis scleroma scleromata scleromeninx scleromere sclerometer sclerometric scleronychia scleronyxis sclerophthalmia sclerophyll sclerophyllous sclerophylly scleroprotein sclerosal sclerosarcoma scleroscope sclerose sclerosed scleroseptum sclerosis scleroskeletal scleroskeleton sclerostenosis sclerostomiasis sclerotal sclerote sclerotia sclerotial sclerotic sclerotica sclerotical scleroticectomy scleroticochorioiditis scleroticochoroiditis scleroticonyxis scleroticotomy sclerotinial sclerotiniose sclerotioid sclerotitic sclerotitis sclerotium sclerotized sclerotoid sclerotome sclerotomic sclerotomy sclerous scleroxanthin sclerozone scliff sclim sclimb scoad scob scobby scobicular scobiform scobs scoff scoffer scoffery scoffing scoffingly scoffingstock scofflaw scog scoggan scogger scoggin scogginism scogginist scoinson scoke scolb scold scoldable scoldenore scolder scolding scoldingly scoleces scoleciasis scolecid scoleciform scolecite scolecoid scolecology scolecophagous scolecospore scoleryng scolex scolia scolices scoliid scoliograptic scoliokyposis scoliometer scolion scoliorachitic scoliosis scoliotic scoliotone scolite scollop scolog scolopaceous scolopacine scolopendra scolopendrelloid scolopendrid scolopendriform scolopendrine scolopendroid scolophore scolopophore scolytid scolytoid scomberoid scombrid scombriform scombrine scombroid scombroidean scombrone sconce sconcer sconcheon sconcible scone scoon scoop scooped scooper scoopful scooping scoopingly scoot scooter scopa scoparin scoparius scopate scope scopeless scopelid scopeliform scopelism scopeloid scopet scopic scopiferous scopiform scopiformly scopine scopiped scopola scopolamine scopoleine scopoletin scopoline scopperil scops scoptical scoptically scoptophilia scoptophiliac scoptophilic scoptophobia scopula scopularian scopulate scopuliferous scopuliform scopuliped scopulite scopulous scopulousness scorbute scorbutic scorbutical scorbutically scorbutize scorbutus scorch scorched scorcher scorching scorchingly scorchingness scorchproof score scoreboard scorebook scored scorekeeper scorekeeping scoreless scorer scoria scoriac scoriaceous scoriae scorification scorifier scoriform scorify scoring scorious scorn scorned scorner scornful scornfully scornfulness scorningly scornproof scorny scorodite scorpaenid scorpaenoid scorpene scorper scorpioid scorpioidal scorpion scorpionic scorpionid scorpionweed scorpionwort scorse scortation scortatory scot scotale scotch scotcher scotching scotchman scote scoter scoterythrous scotia scotino scotodinia scotogram scotograph scotographic scotography scotoma scotomata scotomatic scotomatical scotomatous scotomia scotomic scotomy scotophobia scotopia scotopic scotoscope scotosis scouch scouk scoundrel scoundreldom scoundrelish scoundrelism scoundrelly scoundrelship scoup scour scourage scoured scourer scouress scourfish scourge scourger scourging scourgingly scouriness scouring scourings scourway scourweed scourwort scoury scouse scout scoutcraft scoutdom scouter scouth scouther scouthood scouting scoutingly scoutish scoutmaster scoutwatch scove scovel scovillite scovy scow scowbank scowbanker scowder scowl scowler scowlful scowling scowlingly scowlproof scowman scrab scrabble scrabbled scrabbler scrabe scrae scraffle scrag scragged scraggedly scraggedness scragger scraggily scragginess scragging scraggled scraggling scraggly scraggy scraily scram scramasax scramble scramblement scrambler scrambling scramblingly scrambly scrampum scran scranch scrank scranky scrannel scranning scranny scrap scrapable scrapbook scrape scrapeage scraped scrapepenny scraper scrapie scraping scrapingly scrapler scraplet scrapling scrapman scrapmonger scrappage scrapped scrapper scrappet scrappily scrappiness scrapping scrappingly scrapple scrappler scrappy scrapworks scrapy scrat scratch scratchable scratchably scratchback scratchboard scratchbrush scratchcard scratchcarding scratchcat scratcher scratches scratchification scratchiness scratching scratchingly scratchless scratchlike scratchman scratchproof scratchweed scratchwork scratchy scrath scratter scrattle scrattling scrauch scrauchle scraunch scraw scrawk scrawl scrawler scrawliness scrawly scrawm scrawnily scrawniness scrawny scray scraze screak screaking screaky scream screamer screaminess screaming screamingly screamproof screamy scree screech screechbird screecher screechily screechiness screeching screechingly screechy screed screek screel screeman screen screenable screenage screencraft screendom screened screener screening screenless screenlike screenman screenplay screensman screenwise screenwork screenwriter screeny screet screeve screeved screever screich screigh screve screver screw screwable screwage screwball screwbarrel screwdrive screwdriver screwed screwer screwhead screwiness screwing screwish screwless screwlike screwman screwmatics screwship screwsman screwstem screwstock screwwise screwworm screwy scribable scribacious scribaciousness scribal scribatious scribatiousness scribblage scribblative scribblatory scribble scribbleable scribbled scribbledom scribbleism scribblemania scribblement scribbleomania scribbler scribbling scribblingly scribbly scribe scriber scribeship scribing scribism scribophilous scride scrieve scriever scriggle scriggler scriggly scrike scrim scrime scrimer scrimmage scrimmager scrimp scrimped scrimpily scrimpiness scrimpingly scrimply scrimpness scrimption scrimpy scrimshander scrimshandy scrimshank scrimshanker scrimshaw scrimshon scrimshorn scrin scrinch scrine scringe scriniary scrip scripee scripless scrippage script scription scriptitious scriptitiously scriptitory scriptive scriptor scriptorial scriptorium scriptory scriptural scripturalism scripturalist scripturality scripturalize scripturally scripturalness scripture scriptured scripturiency scripturient scripturism scripula scripulum scritch scritoire scrivaille scrive scrivello scriven scrivener scrivenership scrivenery scrivening scrivenly scriver scrob scrobble scrobe scrobicula scrobicular scrobiculate scrobiculated scrobicule scrobiculus scrobis scrod scrodgill scroff scrofula scrofularoot scrofulaweed scrofulide scrofulism scrofulitic scrofuloderm scrofuloderma scrofulorachitic scrofulosis scrofulotuberculous scrofulous scrofulously scrofulousness scrog scroggy scrolar scroll scrolled scrollery scrollhead scrollwise scrollwork scrolly scronach scroo scrooch scrooge scroop scrophulariaceous scrota scrotal scrotectomy scrotiform scrotitis scrotocele scrotofemoral scrotum scrouge scrouger scrounge scrounger scrounging scrout scrow scroyle scrub scrubbable scrubbed scrubber scrubbery scrubbily scrubbiness scrubbird scrubbly scrubboard scrubby scrubgrass scrubland scrubwood scruf scruff scruffle scruffman scruffy scruft scrum scrummage scrummager scrump scrumple scrumption scrumptious scrumptiously scrumptiousness scrunch scrunchy scrunge scrunger scrunt scruple scrupleless scrupler scruplesome scruplesomeness scrupula scrupular scrupuli scrupulist scrupulosity scrupulous scrupulously scrupulousness scrupulum scrupulus scrush scrutability scrutable scrutate scrutation scrutator scrutatory scrutinant scrutinate scrutineer scrutinization scrutinize scrutinizer scrutinizingly scrutinous scrutinously scrutiny scruto scrutoire scruze scry scryer scud scuddaler scuddawn scudder scuddick scuddle scuddy scudi scudler scudo scuff scuffed scuffer scuffle scuffler scufflingly scuffly scuffy scuft scufter scug scuggery sculch sculduddery scull sculler scullery scullful scullion scullionish scullionize scullionship scullog sculp sculper sculpin sculpt sculptile sculptitory sculptograph sculptography sculptor sculptress sculptural sculpturally sculpturation sculpture sculptured sculpturer sculpturesque sculpturesquely sculpturesqueness sculpturing sculsh scum scumber scumble scumbling scumboard scumfish scumless scumlike scummed scummer scumming scummy scumproof scun scuncheon scunder scunner scup scupful scuppaug scupper scuppernong scuppet scuppler scur scurdy scurf scurfer scurfily scurfiness scurflike scurfy scurrier scurrile scurrilist scurrility scurrilize scurrilous scurrilously scurrilousness scurry scurvied scurvily scurviness scurvish scurvy scurvyweed scusation scuse scut scuta scutage scutal scutate scutated scutatiform scutation scutch scutcheon scutcheoned scutcheonless scutcheonlike scutcheonwise scutcher scutching scute scutel scutella scutellae scutellar scutellarin scutellate scutellated scutellation scutellerid scutelliform scutelligerous scutelliplantar scutelliplantation scutellum scutibranch scutibranchian scutibranchiate scutifer scutiferous scutiform scutiger scutigeral scutigerous scutiped scutter scuttle scuttlebutt scuttleful scuttleman scuttler scuttling scuttock scutty scutula scutular scutulate scutulated scutulum scutum scybala scybalous scybalum scye scyelite scyllarian scyllaroid scyllioid scylliorhinoid scyllite scyllitol scypha scyphae scyphate scyphi scyphiferous scyphiform scyphiphorous scyphistoma scyphistomae scyphistomoid scyphistomous scyphoi scyphomancy scyphomedusan scyphomedusoid scyphophore scyphophorous scyphopolyp scyphose scyphostoma scyphozoan scyphula scyphulus scyphus scyt scytale scythe scytheless scythelike scytheman scythesmith scythestone scythework scytitis scytoblastema scytodepsic scytonemataceous scytonematoid scytonematous scytopetalaceous sdeath sdrucciola se sea seabeach seabeard seaberry seaboard seaborderer seabound seacannie seacatch seacoast seaconny seacraft seacrafty seacunny seadog seadrome seafardinger seafare seafarer seafaring seaflood seaflower seafolk seafowl seagirt seagoer seagoing seah seahound seak seal sealable sealant sealch sealed sealer sealery sealess sealet sealette sealflower sealike sealine sealing sealless seallike sealskin sealwort seam seaman seamancraft seamanite seamanlike seamanly seamanship seamark seambiter seamed seamer seaminess seaming seamless seamlessly seamlessness seamlet seamlike seamost seamrend seamrog seamster seamstress seamy seance seapiece seaplane seaport seaquake sear searce searcer search searchable searchableness searchant searcher searcheress searcherlike searchership searchful searching searchingly searchingness searchless searchlight searchment searcloth seared searedness searer searing searlesite searness seary seascape seascapist seascout seascouting seashine seashore seasick seasickness seaside seasider season seasonable seasonableness seasonably seasonal seasonality seasonally seasonalness seasoned seasonedly seasoner seasoning seasoninglike seasonless seastrand seastroke seat seatang seated seater seathe seating seatless seatrain seatron seatsman seatwork seave seavy seawant seaward seawardly seaware seaway seaweed seaweedy seawife seawoman seaworn seaworthiness seaworthy seax sebacate sebaceous sebacic sebait sebastianite sebate sebesten sebiferous sebific sebilla sebiparous sebkha sebolith seborrhagia seborrhea seborrheal seborrheic seborrhoic sebum sebundy sec secability secable secalin secaline secalose secancy secant secantly secateur secede seceder secern secernent secernment secesh secesher secession secessional secessionalist secessioner secessionism secessionist sech seck seclude secluded secludedly secludedness secluding secluse seclusion seclusionist seclusive seclusively seclusiveness secodont secohm secohmmeter second secondar secondarily secondariness secondary seconde seconder secondhand secondhanded secondhandedly secondhandedness secondly secondment secondness secos secpar secque secre secrecy secret secreta secretage secretagogue secretarial secretarian secretariat secretariate secretary secretaryship secrete secretin secretion secretional secretionary secretitious secretive secretively secretiveness secretly secretmonger secretness secreto secretomotor secretor secretory secretum sect sectarial sectarian sectarianism sectarianize sectarianly sectarism sectarist sectary sectator sectile sectility section sectional sectionalism sectionalist sectionality sectionalization sectionalize sectionally sectionary sectionist sectionize sectioplanography sectism sectist sectiuncle sective sector sectoral sectored sectorial sectroid sectwise secular secularism secularist secularistic secularity secularization secularize secularizer secularly secularness secund secundate secundation secundiflorous secundigravida secundine secundipara secundiparity secundiparous secundly secundogeniture secundoprimary secundus securable securance secure securely securement secureness securer securicornate securifer securiferous securiform securigerous securitan security sedan sedanier sedate sedately sedateness sedation sedative sedent sedentarily sedentariness sedentary sedentation sederunt sedge sedged sedgelike sedging sedgy sedigitate sedigitated sedile sedilia sediment sedimental sedimentarily sedimentary sedimentate sedimentation sedimentous sedimetric sedimetrical sedition seditionary seditionist seditious seditiously seditiousness sedjadeh seduce seduceable seducee seducement seducer seducible seducing seducingly seducive seduct seduction seductionist seductive seductively seductiveness seductress sedulity sedulous sedulously sedulousness sedum see seeable seeableness seecatch seech seed seedage seedbed seedbird seedbox seedcake seedcase seedeater seeded seeder seedful seedgall seedily seediness seedkin seedless seedlessness seedlet seedlike seedling seedlip seedman seedness seedsman seedstalk seedtime seedy seege seeing seeingly seeingness seek seeker seeking seel seelful seely seem seemable seemably seemer seeming seemingly seemingness seemless seemlihead seemlily seemliness seemly seen seenie seep seepage seeped seepweed seepy seer seerband seercraft seeress seerfish seerhand seerhood seerlike seerpaw seership seersucker seesaw seesawiness seesee seethe seething seethingly seetulputty seg seggar seggard segged seggrom segment segmental segmentally segmentary segmentate segmentation segmented sego segol segolate segreant segregable segregant segregate segregateness segregation segregational segregationist segregative segregator seiche seidel seigneur seigneurage seigneuress seigneurial seigneury seignior seigniorage seignioral seignioralty seigniorial seigniority seigniorship seigniory seignorage seignoral seignorial seignorize seignory seilenoi seilenos seine seiner seirospore seirosporic seise seism seismal seismatical seismetic seismic seismically seismicity seismism seismochronograph seismogram seismograph seismographer seismographic seismographical seismography seismologic seismological seismologically seismologist seismologue seismology seismometer seismometric seismometrical seismometrograph seismometry seismomicrophone seismoscope seismoscopic seismotectonic seismotherapy seismotic seit seity seizable seize seizer seizin seizing seizor seizure sejant sejoin sejoined sejugate sejugous sejunct sejunctive sejunctively sejunctly sekos selachian selachoid selachostomous seladang selaginellaceous selagite selah selamin selamlik selbergite seldom seldomcy seldomer seldomly seldomness seldor seldseen sele select selectable selected selectedly selectee selection selectionism selectionist selective selectively selectiveness selectivity selectly selectman selectness selector selenate selenian seleniate selenic selenide seleniferous selenigenous selenion selenious selenite selenitic selenitical selenitiferous selenitish selenium seleniuret selenobismuthite selenocentric selenodont selenodonty selenograph selenographer selenographic selenographical selenographically selenographist selenography selenolatry selenological selenologist selenology selenomancy selenoscope selenosis selenotropic selenotropism selenotropy selensilver selensulphur self selfcide selfdom selfful selffulness selfheal selfhood selfish selfishly selfishness selfism selfist selfless selflessly selflessness selfly selfness selfpreservatory selfsame selfsameness selfward selfwards selictar seligmannite selihoth selion sell sella sellable sellably sellaite sellar sellate sellenders seller sellie selliform selling sellout selly selsoviet selsyn selt seltzogene selva selvage selvaged selvagee selvedge selzogene semanteme semantic semantical semantically semantician semanticist semantics semantological semantology semantron semaphore semaphoric semaphorical semaphorically semaphorist semarum semasiological semasiologically semasiologist semasiology semateme sematic sematographic sematography sematology sematrope semball semblable semblably semblance semblant semblative semble seme semeed semeia semeiography semeiologic semeiological semeiologist semeiology semeion semeiotic semeiotical semeiotics semelfactive semelincident semen semence semese semester semestral semestrial semi semiabstracted semiaccomplishment semiacid semiacidified semiacquaintance semiadherent semiadjectively semiadnate semiaerial semiaffectionate semiagricultural semialbinism semialcoholic semialien semiallegiance semialpine semialuminous semiamplexicaul semiamplitude semianarchist semianatomical semianatropal semianatropous semiangle semiangular semianimal semianimate semianimated semiannealed semiannual semiannually semiannular semianthracite semiantiministerial semiantique semiape semiaperiodic semiaperture semiappressed semiaquatic semiarborescent semiarc semiarch semiarchitectural semiarid semiaridity semiarticulate semiasphaltic semiatheist semiattached semiautomatic semiautomatically semiautonomous semiaxis semibacchanalian semibachelor semibald semibalked semiball semiballoon semiband semibarbarian semibarbarianism semibarbaric semibarbarism semibarbarous semibaronial semibarren semibase semibasement semibastion semibay semibeam semibejan semibelted semibifid semibituminous semibleached semiblind semiblunt semibody semiboiled semibolshevist semibolshevized semibouffant semibourgeois semibreve semibull semiburrowing semic semicadence semicalcareous semicalcined semicallipygian semicanal semicanalis semicannibalic semicantilever semicarbazide semicarbazone semicarbonate semicarbonize semicardinal semicartilaginous semicastrate semicastration semicatholicism semicaudate semicelestial semicell semicellulose semicentenarian semicentenary semicentennial semicentury semichannel semichaotic semichemical semicheviot semichevron semichiffon semichivalrous semichoric semichorus semichrome semicircle semicircled semicircular semicircularity semicircularly semicircularness semicircumference semicircumferentor semicircumvolution semicirque semicitizen semicivilization semicivilized semiclassic semiclassical semiclause semicleric semiclerical semiclimber semiclimbing semiclose semiclosed semiclosure semicoagulated semicoke semicollapsible semicollar semicollegiate semicolloid semicolloquial semicolon semicolonial semicolumn semicolumnar semicoma semicomatose semicombined semicombust semicomic semicomical semicommercial semicompact semicompacted semicomplete semicomplicated semiconceal semiconcrete semiconducting semiconductor semicone semiconfident semiconfinement semiconfluent semiconformist semiconformity semiconic semiconical semiconnate semiconnection semiconoidal semiconscious semiconsciously semiconsciousness semiconservative semiconsonant semiconsonantal semiconspicuous semicontinent semicontinuum semicontraction semicontradiction semiconvergence semiconvergent semiconversion semiconvert semicordate semicordated semicoriaceous semicorneous semicoronate semicoronated semicoronet semicostal semicostiferous semicotton semicotyle semicounterarch semicountry semicrepe semicrescentic semicretin semicretinism semicriminal semicroma semicrome semicrustaceous semicrystallinc semicubical semicubit semicup semicupium semicupola semicured semicurl semicursive semicurvilinear semicyclic semicycloid semicylinder semicylindric semicylindrical semicynical semidaily semidangerous semidark semidarkness semidead semideaf semidecay semidecussation semidefinite semideific semideification semideistical semideity semidelight semidelirious semideltaic semidemented semidenatured semidependence semidependent semideponent semidesert semidestructive semidetached semidetachment semideveloped semidiagrammatic semidiameter semidiapason semidiapente semidiaphaneity semidiaphanous semidiatessaron semidifference semidigested semidigitigrade semidigression semidilapidation semidine semidirect semidisabled semidisk semiditone semidiurnal semidivided semidivine semidocumentary semidodecagon semidole semidome semidomed semidomestic semidomesticated semidomestication semidomical semidormant semidouble semidrachm semidramatic semidress semidressy semidried semidry semidrying semiductile semidull semiduplex semiduration semieducated semieffigy semiegg semiegret semielastic semielision semiellipse semiellipsis semiellipsoidal semielliptic semielliptical semienclosed semiengaged semiequitant semierect semieremitical semiessay semiexecutive semiexpanded semiexplanation semiexposed semiexternal semiextinct semiextinction semifable semifabulous semifailure semifamine semifascia semifasciated semifashion semifast semifatalistic semiferal semiferous semifeudal semifeudalism semifib semifiction semifictional semifigurative semifigure semifinal semifinalist semifine semifinish semifinished semifiscal semifistular semifit semifitting semifixed semiflashproof semiflex semiflexed semiflexible semiflexion semiflexure semiflint semifloating semifloret semifloscular semifloscule semiflosculose semiflosculous semifluctuant semifluctuating semifluid semifluidic semifluidity semifoaming semiforbidding semiforeign semiform semiformal semiformed semifossil semifossilized semifrantic semifriable semifrontier semifuddle semifunctional semifused semifusion semify semigala semigelatinous semigentleman semigenuflection semigirder semiglaze semiglazed semiglobe semiglobose semiglobular semiglobularly semiglorious semiglutin semigod semigovernmental semigrainy semigranitic semigranulate semigravel semigroove semihand semihard semiharden semihardy semihastate semihepatization semiherbaceous semiheterocercal semihexagon semihexagonal semihiant semihiatus semihibernation semihigh semihistorical semihobo semihonor semihoral semihorny semihostile semihot semihuman semihumanitarian semihumanized semihumbug semihumorous semihumorously semihyaline semihydrate semihydrobenzoinic semihyperbola semihyperbolic semihyperbolical semijealousy semijubilee semijudicial semijuridical semilanceolate semilatent semilatus semileafless semilegendary semilegislative semilens semilenticular semilethal semiliberal semilichen semiligneous semilimber semilined semiliquid semiliquidity semiliterate semilocular semilogarithmic semilogical semilong semilooper semiloose semiloyalty semilucent semilunar semilunare semilunary semilunate semilunation semilune semiluxation semiluxury semimachine semimade semimadman semimagical semimagnetic semimajor semimalignant semimanufacture semimanufactured semimarine semimarking semimathematical semimature semimechanical semimedicinal semimember semimembranosus semimembranous semimenstrual semimercerized semimessianic semimetal semimetallic semimetamorphosis semimicrochemical semimild semimilitary semimill semimineral semimineralized semiminim semiminor semimolecule semimonastic semimonitor semimonopoly semimonster semimonthly semimoron semimucous semimute semimystic semimystical semimythical seminaked seminal seminality seminally seminaphthalidine seminaphthylamine seminar seminarcosis seminarial seminarian seminarianism seminarist seminaristic seminarize seminary seminasal seminase seminatant seminate semination seminationalization seminative seminebulous seminecessary seminegro seminervous seminiferal seminiferous seminific seminifical seminification seminist seminium seminivorous seminocturnal seminoma seminomad seminomadic seminomata seminonconformist seminonflammable seminonsensical seminormal seminose seminovel seminovelty seminude seminudity seminule seminuliferous seminuria seminvariant seminvariantive semioblivion semioblivious semiobscurity semioccasional semioccasionally semiocclusive semioctagonal semiofficial semiofficially semiography semiopacity semiopacous semiopal semiopalescent semiopaque semiopened semiorb semiorbicular semiorbicularis semiorbiculate semiordinate semiorganized semioriental semioscillation semiosseous semiostracism semiotic semiotician semioval semiovaloid semiovate semioviparous semiovoid semiovoidal semioxidated semioxidized semioxygenated semioxygenized semipagan semipalmate semipalmated semipalmation semipanic semipapal semipapist semiparallel semiparalysis semiparameter semiparasitic semiparasitism semipaste semipastoral semipasty semipause semipeace semipectinate semipectinated semipectoral semiped semipedal semipellucid semipellucidity semipendent semipenniform semiperfect semiperimeter semiperimetry semiperiphery semipermanent semipermeability semipermeable semiperoid semiperspicuous semipertinent semipervious semipetaloid semipetrified semiphase semiphilologist semiphilosophic semiphilosophical semiphlogisticated semiphonotypy semiphosphorescent semipinacolic semipinacolin semipinnate semipiscine semiplantigrade semiplastic semiplumaceous semiplume semipolar semipolitical semipolitician semipoor semipopish semipopular semiporcelain semiporous semiporphyritic semiportable semipostal semipractical semiprecious semipreservation semiprimigenous semiprivacy semiprivate semipro semiprofane semiprofessional semiprofessionalized semipronation semiprone semipronominal semiproof semiproselyte semiprosthetic semiprostrate semiprotectorate semiproven semipublic semipupa semipurulent semiputrid semipyramidal semipyramidical semipyritic semiquadrangle semiquadrantly semiquadrate semiquantitative semiquantitatively semiquartile semiquaver semiquietism semiquietist semiquinquefid semiquintile semiquote semiradial semiradiate semirapacious semirare semirattlesnake semiraw semirebellion semirecondite semirecumbent semirefined semireflex semiregular semirelief semireligious semireniform semirepublican semiresinous semiresolute semirespectability semirespectable semireticulate semiretirement semiretractile semireverberatory semirevolute semirevolution semirevolutionist semirhythm semiriddle semirigid semiring semiroll semirotary semirotating semirotative semirotatory semirotund semirotunda semiround semiroyal semiruin semirural semirustic semis semisacerdotal semisacred semisagittate semisaint semisaline semisaltire semisaprophyte semisaprophytic semisarcodic semisatiric semisaturation semisavage semisavagedom semisavagery semiscenic semischolastic semiscientific semiseafaring semisecondary semisecrecy semisecret semisection semisedentary semisegment semisensuous semisentient semisentimental semiseparatist semiseptate semiserf semiserious semiseriously semiseriousness semiservile semisevere semiseverely semiseverity semisextile semishady semishaft semisheer semishirker semishrub semishrubby semisightseeing semisilica semisimious semisimple semisingle semisixth semiskilled semislave semismelting semismile semisocial semisocialism semisociative semisocinian semisoft semisolemn semisolemnity semisolemnly semisolid semisolute semisomnambulistic semisomnolence semisomnous semisopor semisovereignty semispan semispeculation semisphere semispheric semispherical semispheroidal semispinalis semispiral semispiritous semispontaneity semispontaneous semispontaneously semispontaneousness semisport semisporting semisquare semistagnation semistaminate semistarvation semistarved semistate semisteel semistiff semistill semistock semistory semistratified semistriate semistriated semistuporous semisubterranean semisuburban semisuccess semisuccessful semisuccessfully semisucculent semisupernatural semisupinated semisupination semisupine semisuspension semisymmetric semita semitact semitae semitailored semital semitandem semitangent semitaur semitechnical semiteetotal semitelic semitendinosus semitendinous semiterete semiterrestrial semitertian semitesseral semitessular semitheological semithoroughfare semitime semitonal semitonally semitone semitonic semitonically semitontine semitorpid semitour semitrailer semitrained semitransept semitranslucent semitransparency semitransparent semitransverse semitreasonable semitrimmed semitropic semitropical semitropics semitruth semituberous semitubular semiuncial semiundressed semiuniversalist semiupright semiurban semiurn semivalvate semivault semivector semivegetable semivertebral semiverticillate semivibration semivirtue semiviscid semivital semivitreous semivitrification semivitrified semivocal semivocalic semivolatile semivolcanic semivoluntary semivowel semivulcanized semiwaking semiwarfare semiweekly semiwild semiwoody semiyearly semmet semmit semnopithecine semola semolella semolina semological semology semostomeous semostomous semperannual sempergreen semperidentical semperjuvenescent sempervirent sempervirid sempitern sempiternal sempiternally sempiternity sempiternize sempiternous sempstrywork semsem semuncia semuncial sen senaite senam senarian senarius senarmontite senary senate senator senatorial senatorially senatorian senatorship senatory senatress senatrices senatrix sence sencion send sendable sendal sendee sender sending senecioid senecionine senectitude senectude senectuous senega senegin senesce senescence senescent seneschal seneschally seneschalship seneschalsy seneschalty sengreen senicide senile senilely senilism senility senilize senior seniority seniorship senna sennegrass sennet sennight sennit sennite senocular sensa sensable sensal sensate sensation sensational sensationalism sensationalist sensationalistic sensationalize sensationally sensationary sensationish sensationism sensationist sensationistic sensationless sensatorial sensatory sense sensed senseful senseless senselessly senselessness sensibilia sensibilisin sensibilitist sensibilitous sensibility sensibilium sensibilization sensibilize sensible sensibleness sensibly sensical sensifacient sensiferous sensific sensificatory sensifics sensify sensigenous sensile sensilia sensilla sensillum sension sensism sensist sensistic sensitive sensitively sensitiveness sensitivity sensitization sensitize sensitizer sensitometer sensitometric sensitometry sensitory sensive sensize senso sensomobile sensomobility sensomotor sensoparalysis sensor sensoria sensorial sensoriglandular sensorimotor sensorimuscular sensorium sensorivascular sensorivasomotor sensorivolitional sensory sensual sensualism sensualist sensualistic sensuality sensualization sensualize sensually sensualness sensuism sensuist sensum sensuosity sensuous sensuously sensuousness sensyne sent sentence sentencer sentential sententially sententiarian sententiarist sententiary sententiosity sententious sententiously sententiousness sentience sentiendum sentient sentiently sentiment sentimental sentimentalism sentimentalist sentimentality sentimentalization sentimentalize sentimentalizer sentimentally sentimenter sentimentless sentinel sentinellike sentinelship sentinelwise sentisection sentition sentry sepad sepal sepaled sepaline sepalled sepalody sepaloid separability separable separableness separably separata separate separatedly separately separateness separates separatical separating separation separationism separationist separatism separatist separatistic separative separatively separativeness separator separatory separatress separatrix separatum sephen sephiric sephirothic sepia sepiaceous sepialike sepian sepiarian sepiary sepic sepicolous sepiment sepioid sepiolite sepion sepiost sepiostaire sepium sepone sepoy seppuku seps sepsine sepsis sept septa septal septan septane septangle septangled septangular septangularness septarian septariate septarium septate septated septation septatoarticulate septavalent septave septcentenary septectomy septemdecenary septemfid septemfluous septemfoliate septemfoliolate septemia septempartite septemplicate septemvious septemvir septemvirate septemviri septenar septenarian septenarius septenary septenate septendecennial septendecimal septennary septennate septenniad septennial septennialist septenniality septennially septennium septenous septentrional septentrionality septentrionally septentrionate septentrionic septerium septet septfoil septic septical septically septicemia septicemic septicidal septicidally septicity septicization septicolored septicopyemia septicopyemic septier septifarious septiferous septifluous septifolious septiform septifragal septifragally septilateral septile septillion septillionth septimal septimanal septimanarian septime septimetritis septimole septinsular septipartite septisyllabic septisyllable septivalent septleva septocosta septocylindrical septodiarrhea septogerm septoic septole septomarginal septomaxillary septonasal septotomy septship septuagenarian septuagenarianism septuagenary septuagesima septuagint septulate septulum septum septuncial septuor septuple septuplet septuplicate septuplication sepulcher sepulchral sepulchralize sepulchrally sepulchrous sepultural sepulture sequa sequacious sequaciously sequaciousness sequacity sequel sequela sequelae sequelant sequence sequencer sequency sequent sequential sequentiality sequentially sequently sequest sequester sequestered sequesterment sequestra sequestrable sequestral sequestrate sequestration sequestrator sequestratrices sequestratrix sequestrectomy sequestrotomy sequestrum sequin sequitur ser sera serab seragli seraglio serai serail seral seralbumin seralbuminous serang serape seraph seraphic seraphical seraphically seraphicalness seraphicism seraphicness seraphim seraphina seraphine seraphism seraphlike seraphtide serasker seraskerate seraskier seraskierat serau seraw sercial serdab sere sereh serenade serenader serenata serenate serendibite serendipity serendite serene serenely sereneness serenify serenissime serenissimi serenissimo serenity serenize sereward serf serfage serfdom serfhood serfish serfishly serfishness serfism serflike serfship serge sergeancy sergeant sergeantcy sergeantess sergeantry sergeantship sergeanty sergedesoy serger sergette serging serglobulin serial serialist seriality serialization serialize serially seriary seriate seriately seriatim seriation sericate sericated sericea sericeotomentose sericeous sericicultural sericiculture sericiculturist sericin sericipary sericite sericitic sericitization sericteria sericterium serictery sericultural sericulture sericulturist seriema series serif serific serigraph serigrapher serigraphy serimeter serin serine serinette seringa seringal seringhi serio seriocomedy seriocomic seriocomical seriocomically seriogrotesque serioline serioludicrous seriopantomimic serioridiculous seriosity serious seriously seriousness seripositor serjeant serment sermo sermocination sermocinatrix sermon sermoneer sermoner sermonesque sermonet sermonettino sermonic sermonically sermonics sermonish sermonism sermonist sermonize sermonizer sermonless sermonoid sermonolatry sermonology sermonproof sermonwise sermuncle sernamby sero seroalbumin seroalbuminuria seroanaphylaxis serobiological serocolitis serocyst serocystic serodermatosis serodermitis serodiagnosis serodiagnostic seroenteritis seroenzyme serofibrinous serofibrous serofluid serogelatinous serohemorrhagic serohepatitis seroimmunity serolactescent serolemma serolin serolipase serologic serological serologically serologist serology seromaniac seromembranous seromucous seromuscular seron seronegative seronegativity seroon seroot seroperitoneum serophthisis serophysiology seroplastic seropneumothorax seropositive seroprevention seroprognosis seroprophylaxis seroprotease seropuriform seropurulent seropus seroreaction serosa serosanguineous serosanguinolent seroscopy serositis serosity serosynovial serosynovitis serotherapeutic serotherapeutics serotherapist serotherapy serotina serotinal serotine serotinous serotoxin serous serousness serovaccine serow serozyme serpedinous serpent serpentaria serpentarium serpentary serpentcleide serpenteau serpentess serpenticidal serpenticide serpentiferous serpentiform serpentina serpentine serpentinely serpentinic serpentiningly serpentinization serpentinize serpentinoid serpentinous serpentivorous serpentize serpentlike serpently serpentoid serpentry serpentwood serphid serphoid serpierite serpiginous serpiginously serpigo serpivolant serpolet serpula serpulae serpulan serpulid serpulidan serpuline serpulite serpulitic serpuloid serra serradella serrage serran serrana serranid serrano serranoid serrate serrated serratic serratiform serratile serration serratirostral serratocrenate serratodentate serratodenticulate serratoglandulous serratospinose serrature serricorn serried serriedly serriedness serriferous serriform serriped serrirostrate serrulate serrulated serrulation serry sert serta sertularian sertularioid sertule sertulum sertum serum serumal serut servable servage serval servaline servant servantcy servantdom servantess servantless servantlike servantry servantship servation serve servente serventism server servery servet service serviceability serviceable serviceableness serviceably serviceberry serviceless servicelessness serviceman servidor servient serviential serviette servile servilely servileness servilism servility servilize serving servingman servist servitor servitorial servitorship servitress servitrix servitude serviture servo servomechanism servomotor servulate serwamby sesame sesamoid sesamoidal sesamoiditis sescuple sesma sesqui sesquialter sesquialtera sesquialteral sesquialteran sesquialterous sesquibasic sesquicarbonate sesquicentennial sesquichloride sesquiduplicate sesquihydrate sesquihydrated sesquinona sesquinonal sesquioctava sesquioctaval sesquioxide sesquipedal sesquipedalian sesquipedalianism sesquipedality sesquiplicate sesquiquadrate sesquiquarta sesquiquartal sesquiquartile sesquiquinta sesquiquintal sesquiquintile sesquisalt sesquiseptimal sesquisextal sesquisilicate sesquisquare sesquisulphate sesquisulphide sesquisulphuret sesquiterpene sesquitertia sesquitertial sesquitertian sesquitertianal sess sessile sessility session sessional sessionary sessions sesterce sestertium sestet sesti sestiad sestina sestine sestole sestuor set seta setaceous setaceously setae setal setarious setback setbolt setdown setfast seth sethead setier setiferous setiform setigerous setiparous setirostral setline setness setoff seton setophagine setose setous setout setover setscrew setsman sett settable settaine settee setter settergrass setterwort setting settle settleable settled settledly settledness settlement settler settlerdom settling settlings settlor settsman setula setule setuliform setulose setulous setup setwall setwise setwork seugh seven sevenbark sevener sevenfold sevenfolded sevenfoldness sevennight sevenpence sevenpenny sevenscore seventeen seventeenfold seventeenth seventeenthly seventh seventhly seventieth seventy seventyfold sever severable several severalfold severality severalize severally severalness severalth severalty severance severation severe severedly severely severeness severer severingly severish severity severization severize severy sew sewable sewage sewan sewed sewellel sewen sewer sewerage sewered sewerless sewerlike sewerman sewery sewing sewless sewn sewround sex sexadecimal sexagenarian sexagenarianism sexagenary sexagesimal sexagesimally sexagesimals sexagonal sexangle sexangled sexangular sexangularly sexannulate sexarticulate sexcentenary sexcuspidate sexdigital sexdigitate sexdigitated sexdigitism sexed sexenary sexennial sexennially sexennium sexern sexfarious sexfid sexfoil sexhood sexifid sexillion sexiped sexipolar sexisyllabic sexisyllable sexitubercular sexivalence sexivalency sexivalent sexless sexlessly sexlessness sexlike sexlocular sexly sexological sexologist sexology sexpartite sexradiate sext sextactic sextain sextan sextans sextant sextantal sextar sextarii sextarius sextary sextennial sextern sextet sextic sextile sextillion sextillionth sextipara sextipartite sextipartition sextiply sextipolar sexto sextodecimo sextole sextolet sexton sextoness sextonship sextry sextubercular sextuberculate sextula sextulary sextumvirate sextuple sextuplet sextuplex sextuplicate sextuply sexual sexuale sexualism sexualist sexuality sexualization sexualize sexually sexuous sexupara sexuparous sexy sey seybertite sfoot sgraffiato sgraffito sh sha shaatnez shab shabash shabbed shabbify shabbily shabbiness shabble shabby shabbyish shabrack shabunder shachle shachly shack shackanite shackatory shackbolt shackland shackle shacklebone shackledom shackler shacklewise shackling shackly shacky shad shadbelly shadberry shadbird shadbush shadchan shaddock shade shaded shadeful shadeless shadelessness shader shadetail shadflower shadily shadine shadiness shading shadkan shadoof shadow shadowable shadowbox shadowboxing shadowed shadower shadowfoot shadowgram shadowgraph shadowgraphic shadowgraphist shadowgraphy shadowily shadowiness shadowing shadowishly shadowist shadowland shadowless shadowlessness shadowlike shadowly shadowy shadrach shady shaffle shaft shafted shafter shaftfoot shafting shaftless shaftlike shaftman shaftment shaftsman shaftway shafty shag shaganappi shagbag shagbark shagged shaggedness shaggily shagginess shaggy shaglet shaglike shagpate shagrag shagreen shagreened shagroon shagtail shah shaharith shahdom shahi shahin shahzada shaikh shaitan shakable shake shakeable shakebly shakedown shakefork shaken shakenly shakeout shakeproof shaker shakerag shakers shakescene shakha shakily shakiness shaking shakingly shako shaksheer shakti shaku shaky shale shalelike shaleman shall shallal shallon shalloon shallop shallopy shallot shallow shallowbrained shallowhearted shallowish shallowist shallowly shallowness shallowpate shallowpated shallows shallowy shallu shalom shalt shalwar shaly sham shama shamable shamableness shamably shamal shamalo shaman shamaness shamanic shamanism shamanist shamanistic shamanize shamateur shamba shamble shambling shamblingly shambrier shame shameable shamed shameface shamefaced shamefacedly shamefacedness shamefast shamefastly shamefastness shameful shamefully shamefulness shameless shamelessly shamelessness shameproof shamer shamesick shameworthy shamianah shamir shammed shammer shammick shamming shammish shammock shammocking shammocky shammy shampoo shampooer shamrock shamroot shamsheer shan shanachas shanachie shandry shandrydan shandy shandygaff shangan shanghai shanghaier shank shanked shanker shankings shankpiece shanksman shanna shanny shansa shant shanty shantylike shantyman shantytown shap shapable shape shaped shapeful shapeless shapelessly shapelessness shapeliness shapely shapen shaper shapeshifter shapesmith shaping shapingly shapometer shaps shapy sharable shard sharded shardy share shareable sharebone sharebroker sharecrop sharecropper shareholder shareholdership shareman sharepenny sharer shareship sharesman sharewort shargar shark sharkful sharkish sharklet sharklike sharkship sharkskin sharky sharn sharnbud sharny sharp sharpen sharpener sharper sharpie sharpish sharply sharpness sharps sharpsaw sharpshin sharpshod sharpshooter sharpshooting sharptail sharpware sharpy sharrag sharry shastaite shaster shastra shastraik shastri shastrik shat shatan shathmont shatter shatterbrain shatterbrained shatterer shatterheaded shattering shatteringly shatterment shatterpated shatterproof shatterwit shattery shattuckite shauchle shaugh shaul shaup shauri shauwe shavable shave shaveable shaved shavee shaveling shaven shaver shavery shavester shavetail shaveweed shaving shavings shaw shawl shawled shawling shawlless shawllike shawlwise shawm shawneewood shawny shawy shay she shea sheading sheaf sheafage sheaflike sheafripe sheafy sheal shealing shear shearbill sheard shearer sheargrass shearhog shearing shearless shearling shearman shearmouse shears shearsman sheartail shearwater shearwaters sheat sheatfish sheath sheathbill sheathe sheathed sheather sheathery sheathing sheathless sheathlike sheathy sheave sheaved sheaveless sheaveman shebang shebeen shebeener shed shedded shedder shedding sheder shedhand shedlike shedman shedwise shee sheely sheen sheenful sheenless sheenly sheeny sheep sheepback sheepberry sheepbine sheepbiter sheepbiting sheepcote sheepcrook sheepfaced sheepfacedly sheepfacedness sheepfold sheepfoot sheepgate sheephead sheepheaded sheephearted sheepherder sheepherding sheephook sheephouse sheepify sheepish sheepishly sheepishness sheepkeeper sheepkeeping sheepkill sheepless sheeplet sheeplike sheepling sheepman sheepmaster sheepmonger sheepnose sheepnut sheeppen sheepshank sheepshead sheepsheadism sheepshear sheepshearer sheepshearing sheepshed sheepskin sheepsplit sheepsteal sheepstealer sheepstealing sheepwalk sheepwalker sheepweed sheepy sheer sheered sheering sheerly sheerness sheet sheetage sheeted sheeter sheetflood sheetful sheeting sheetless sheetlet sheetlike sheetling sheetways sheetwise sheetwork sheetwriting sheety shehitah sheik sheikdom sheikhlike sheikhly sheiklike sheikly shekel shela sheld sheldapple shelder sheldfowl sheldrake shelduck shelf shelfback shelffellow shelfful shelflist shelfmate shelfpiece shelfroom shelfworn shelfy shell shellac shellacker shellacking shellapple shellback shellblow shellblowing shellbound shellburst shellcracker shelleater shelled sheller shellfire shellfish shellfishery shellflower shellful shellhead shelliness shelling shellman shellmonger shellproof shellshake shellum shellwork shellworker shelly shellycoat shelta shelter shelterage sheltered shelterer shelteringly shelterless shelterlessness shelterwood sheltery sheltron shelty shelve shelver shelving shelvingly shelvingness shelvy sheminith shenanigan shend sheng sheolic shepherd shepherdage shepherddom shepherdess shepherdhood shepherdish shepherdism shepherdize shepherdless shepherdlike shepherdling shepherdly shepherdry sheppeck sheppey shepstare sher sherardize sherardizer sherbacha sherbet sherbetlee sherbetzide sheriat sherif sherifa sherifate sheriff sheriffalty sheriffdom sheriffess sheriffhood sheriffry sheriffship sheriffwick sherifi sherifian sherify sheristadar sherlock sherry sherryvallies sheth sheugh sheva shevel sheveled shevri shewa shewbread shewel sheyle shi shibah shibar shibboleth shibbolethic shibuichi shice shicer shicker shickered shide shied shiel shield shieldable shieldboard shielddrake shielded shielder shieldflower shielding shieldless shieldlessly shieldlessness shieldlike shieldling shieldmaker shieldmay shieldtail shieling shier shies shiest shift shiftable shiftage shifter shiftful shiftfulness shiftily shiftiness shifting shiftingly shiftingness shiftless shiftlessly shiftlessness shifty shiggaion shigram shih shikar shikara shikargah shikari shikasta shikimi shikimic shikimole shikimotoxin shikken shiko shikra shilf shilfa shill shilla shillaber shillelagh shillet shillety shillhouse shillibeer shilling shillingless shillingsworth shilloo shilpit shim shimal shimmer shimmering shimmeringly shimmery shimmy shimose shimper shin shinaniging shinarump shinbone shindig shindle shindy shine shineless shiner shingle shingled shingler shingles shinglewise shinglewood shingling shingly shinily shininess shining shiningly shiningness shinleaf shinner shinnery shinning shinny shinplaster shintiyan shinty shinwood shiny shinza ship shipboard shipbound shipboy shipbreaking shipbroken shipbuilder shipbuilding shipcraft shipentine shipful shipkeeper shiplap shipless shiplessly shiplet shipload shipman shipmanship shipmast shipmaster shipmate shipmatish shipment shipowner shipowning shippable shippage shipped shipper shipping shipplane shippo shippon shippy shipshape shipshapely shipside shipsmith shipward shipwards shipway shipwork shipworm shipwreck shipwrecky shipwright shipwrightery shipwrightry shipyard shirakashi shirallee shire shirehouse shireman shirewick shirk shirker shirky shirl shirlcock shirpit shirr shirring shirt shirtband shirtiness shirting shirtless shirtlessness shirtlike shirtmaker shirtmaking shirtman shirttail shirtwaist shirty shish shisham shisn shita shitepoke shither shittah shittim shittimwood shiv shivaree shive shiver shivereens shiverer shivering shiveringly shiverproof shiversome shiverweed shivery shivey shivoo shivy shivzoku sho shoad shoader shoal shoalbrain shoaler shoaliness shoalness shoalwise shoaly shoat shock shockability shockable shockedness shocker shockheaded shocking shockingly shockingness shocklike shockproof shod shodden shoddily shoddiness shoddy shoddydom shoddyism shoddyite shoddylike shoddyward shoddywards shode shoder shoe shoebill shoebinder shoebindery shoebinding shoebird shoeblack shoeboy shoebrush shoecraft shoeflower shoehorn shoeing shoeingsmith shoelace shoeless shoemaker shoemaking shoeman shoepack shoer shoescraper shoeshine shoeshop shoesmith shoestring shoewoman shoful shog shogaol shoggie shoggle shoggly shogi shogun shogunal shogunate shohet shoji shola shole shone shoneen shonkinite shoo shood shoofa shoofly shooi shook shool shooldarry shooler shoop shoopiltie shoor shoot shootable shootboard shootee shooter shoother shooting shootist shootman shop shopboard shopbook shopboy shopbreaker shopbreaking shopfolk shopful shopgirl shopgirlish shophar shopkeeper shopkeeperess shopkeeperish shopkeeperism shopkeepery shopkeeping shopland shoplet shoplifter shoplifting shoplike shopmaid shopman shopmark shopmate shopocracy shopocrat shoppe shopper shopping shoppish shoppishness shoppy shopster shoptalk shopwalker shopwear shopwife shopwindow shopwoman shopwork shopworker shopworn shoq shor shoran shore shoreberry shorebush shored shoregoing shoreland shoreless shoreman shorer shoreside shoresman shoreward shorewards shoreweed shoreyer shoring shorling shorn short shortage shortbread shortcake shortchange shortchanger shortclothes shortcoat shortcomer shortcoming shorten shortener shortening shorter shortfall shorthand shorthanded shorthandedness shorthander shorthead shorthorn shortish shortly shortness shorts shortschat shortsighted shortsightedly shortsightedness shortsome shortstaff shortstop shorttail shoshonite shot shotbush shote shotgun shotless shotlike shotmaker shotman shotproof shotsman shotstar shott shotted shotten shotter shotty shou should shoulder shouldered shoulderer shoulderette shouldering shouldna shouldnt shoupeltin shout shouter shouting shoutingly shoval shove shovegroat shovel shovelard shovelbill shovelboard shovelfish shovelful shovelhead shovelmaker shovelman shovelnose shovelweed shover show showable showance showbird showboard showboat showboater showboating showcase showdom showdown shower showerer showerful showeriness showerless showerlike showerproof showery showily showiness showing showish showless showman showmanism showmanry showmanship shown showpiece showroom showup showworthy showy showyard shoya shrab shraddha shradh shraf shrag shram shrank shrap shrapnel shrave shravey shreadhead shred shredcock shredder shredding shreddy shredless shredlike shree shreeve shrend shrew shrewd shrewdish shrewdly shrewdness shrewdom shrewdy shrewish shrewishly shrewishness shrewlike shrewly shrewmouse shrewstruck shriek shrieker shriekery shriekily shriekiness shriekingly shriekproof shrieky shrieval shrievalty shrift shrike shrill shrilling shrillish shrillness shrilly shrimp shrimper shrimpfish shrimpi shrimpish shrimpishness shrimplike shrimpy shrinal shrine shrineless shrinelet shrinelike shrink shrinkable shrinkage shrinkageproof shrinker shrinkhead shrinking shrinkingly shrinkproof shrinky shrip shrite shrive shrivel shriven shriver shriving shroff shrog shroud shrouded shrouding shroudless shroudlike shroudy shrove shrover shrub shrubbed shrubbery shrubbiness shrubbish shrubby shrubland shrubless shrublet shrublike shrubwood shruff shrug shruggingly shrunk shrunken shrups shtreimel shuba shubunkin shuck shucker shucking shuckins shuckpen shucks shudder shudderful shudderiness shudderingly shuddersome shuddery shuff shuffle shuffleboard shufflecap shuffler shufflewing shuffling shufflingly shug shul shuler shulwaurs shumac shun shune shunless shunnable shunner shunt shunter shunting shure shurf shush shusher shut shutdown shutness shutoff shutout shuttance shutten shutter shuttering shutterless shutterwise shutting shuttle shuttlecock shuttleheaded shuttlelike shuttlewise shwanpan shy shydepoke shyer shyish shyly shyness shyster si siak sial sialaden sialadenitis sialadenoncus sialagogic sialagogue sialagoguic sialemesis sialic sialid sialidan sialoangitis sialogenous sialoid sialolith sialolithiasis sialology sialorrhea sialoschesis sialosemeiology sialosis sialostenosis sialosyrinx sialozemia siamang sib sibbed sibbens sibber sibboleth sibby siberite sibilance sibilancy sibilant sibilantly sibilate sibilatingly sibilator sibilatory sibilous sibilus sibling sibness sibrede sibship sibyl sibylesque sibylic sibylism sibylla sibylline sibyllist sic sicarian sicarious sicarius sicca siccaneous siccant siccate siccation siccative siccimeter siccity sice sicilian siciliana sicilica sicilicum sicilienne sicinnian sick sickbed sicken sickener sickening sickeningly sicker sickerly sickerness sickhearted sickish sickishly sickishness sickle sicklebill sickled sicklelike sickleman sicklemia sicklemic sicklepod sickler sicklerite sickless sickleweed sicklewise sicklewort sicklied sicklily sickliness sickling sickly sickness sicknessproof sickroom sicsac sicula sicular sidder siddur side sideage sidearm sideboard sidebone sidebones sideburns sidecar sidecarist sidecheck sided sidedness sideflash sidehead sidehill sidekicker sidelang sideless sideline sideling sidelings sidelingwise sidelong sidenote sidepiece sider sideral sideration siderealize sidereally siderean siderin siderism siderite sideritic siderognost siderographic siderographical siderographist siderography siderolite siderology sideromagnetic sideromancy sideromelane sideronatrite sideronym sideroscope siderose siderosis siderostat siderostatic siderotechny siderous sidership siderurgical siderurgy sides sidesaddle sideshake sideslip sidesman sidesplitter sidesplitting sidesplittingly sidesway sideswipe sideswiper sidetrack sidewalk sideward sidewards sideway sideways sidewinder sidewipe sidewiper sidewise sidhe sidi siding sidle sidler sidling sidlingly sidth sidy sie siege siegeable siegecraft siegenite sieger siegework sienna sier siering sierozem sierra sierran siesta siestaland sieve sieveful sievelike siever sievings sievy sifac sifaka sife siffilate siffle sifflement sifflet sifflot sift siftage sifted sifter sifting sig sigatoka sigger sigh sigher sighful sighfully sighing sighingly sighingness sighless sighlike sight sightable sighted sighten sightening sighter sightful sightfulness sighthole sighting sightless sightlessly sightlessness sightlily sightliness sightly sightproof sightworthiness sightworthy sighty sigil sigilative sigillariaceous sigillarian sigillarid sigillarioid sigillarist sigillaroid sigillary sigillate sigillated sigillation sigillistic sigillographer sigillographical sigillography sigillum sigla siglarian siglos sigma sigmaspire sigmate sigmatic sigmation sigmatism sigmodont sigmoid sigmoidal sigmoidally sigmoidectomy sigmoiditis sigmoidopexy sigmoidoproctostomy sigmoidorectostomy sigmoidoscope sigmoidoscopy sigmoidostomy sign signable signal signalee signaler signalese signaletic signaletics signalism signalist signality signalize signally signalman signalment signary signatary signate signation signator signatory signatural signature signatureless signaturist signboard signee signer signet signetwise signifer signifiable significal significance significancy significant significantly significantness significate signification significatist significative significatively significativeness significator significatory significatrix significature significavit significian significs signifier signify signior signiorship signist signless signlike signman signorial signorship signory signpost signum signwriter sika sikar sikatch sike sikerly sikerness siket sikhara sikhra sil silage silaginoid silane silbergroschen silcrete sile silen silenaceous silence silenced silencer silency sileni silenic silent silential silentiary silentious silentish silently silentness silenus silesia silex silexite silhouette silhouettist silhouettograph silica silicam silicane silicate silication silicatization silicean siliceocalcareous siliceofelspathic siliceofluoric siliceous silicic silicicalcareous silicicolous silicide silicidize siliciferous silicification silicifluoric silicifluoride silicify siliciophite silicious silicium siliciuretted silicize silicle silico silicoacetic silicoalkaline silicoaluminate silicoarsenide silicocalcareous silicochloroform silicocyanide silicoethane silicoferruginous silicoflagellate silicofluoric silicofluoride silicohydrocarbon silicomagnesian silicomanganese silicomethane silicon silicone siliconize silicononane silicopropane silicosis silicotalcose silicotic silicotitanate silicotungstate silicotungstic silicula silicular silicule siliculose siliculous silicyl siliqua siliquaceous siliquae silique siliquiferous siliquiform siliquose siliquous silk silkalene silkaline silked silken silker silkflower silkgrower silkie silkily silkiness silklike silkman silkness silksman silktail silkweed silkwoman silkwood silkwork silkworks silkworm silky sill sillabub silladar sillandar sillar siller sillibouk sillikin sillily sillimanite silliness sillock sillograph sillographer sillographist sillometer sillon silly sillyhood sillyhow sillyish sillyism sillyton silo siloist silphid silphium silt siltage siltation silting siltlike silty silundum silurid siluroid silva silvan silvanity silvanry silvendy silver silverback silverbeater silverbelly silverberry silverbill silverboom silverbush silvered silverer silvereye silverfin silverfish silverhead silverily silveriness silvering silverish silverite silverize silverizer silverleaf silverless silverlike silverling silverly silvern silverness silverpoint silverrod silverside silversides silverskin silversmith silversmithing silverspot silvertail silvertip silvertop silvervine silverware silverweed silverwing silverwood silverwork silverworker silvery silvical silvicolous silvics silvicultural silviculturally silviculture silviculturist silyl sima simal simar simaroubaceous simball simbil simblin simblot sime simiad simial simian simianity simiesque similar similarity similarize similarly similative simile similimum similiter similitive similitude similitudinize simility similize similor simioid simious simiousness simity simkin simlin simling simmer simmeringly simmon simnel simnelwise simoleon simoniac simoniacal simoniacally simonious simonism simonist simony simool simoom simoon simous simp simpai simper simperer simperingly simple simplehearted simpleheartedly simpleheartedness simpleness simpler simpleton simpletonian simpletonianism simpletonic simpletonish simpletonism simplex simplexed simplexity simplicident simplicidentate simplicist simplicitarian simplicity simplicize simplification simplificative simplificator simplified simplifiedly simplifier simplify simplism simplist simplistic simply simsim simson simulacra simulacral simulacre simulacrize simulacrum simulance simulant simular simulate simulation simulative simulatively simulator simulatory simulcast simuler simuliid simulioid simultaneity simultaneous simultaneously simultaneousness sin sina sinaite sinal sinalbin sinamay sinamine sinapate sinapic sinapine sinapinic sinapis sinapism sinapize sinapoline sinarchism sinarchist sinarquism sinarquist sinarquista sinawa sincaline since sincere sincerely sincereness sincerity sincipital sinciput sind sinder sindle sindoc sindon sindry sine sinecural sinecure sinecureship sinecurism sinecurist sinew sinewed sinewiness sinewless sinewous sinewy sinfonia sinfonie sinfonietta sinful sinfully sinfulness sing singability singable singableness singally singarip singe singed singeing singeingly singer singey singh singillatim singing singingly singkamas single singlebar singled singlehanded singlehandedly singlehandedness singlehearted singleheartedly singleheartedness singlehood singleness singler singles singlestick singlesticker singlet singleton singletree singlings singly singsong singsongy singspiel singstress singular singularism singularist singularity singularization singularize singularly singularness singult singultous singultus sinh sinigrin sinigrinase sinigrosid sinigroside sinister sinisterly sinisterness sinisterwise sinistrad sinistral sinistrality sinistrally sinistration sinistrin sinistrocerebral sinistrocular sinistrodextral sinistrogyrate sinistrogyration sinistrogyric sinistromanual sinistrorsal sinistrorsally sinistrorse sinistrous sinistrously sinistruous sink sinkable sinkage sinker sinkerless sinkfield sinkhead sinkhole sinking sinkless sinklike sinkroom sinkstone sinky sinless sinlessly sinlessness sinlike sinnable sinnableness sinnen sinner sinneress sinnership sinnet sinningly sinningness sinoatrial sinoauricular sinoidal sinomenine sinopia sinopite sinople sinproof sinsion sinsring sinsyne sinter sintoc sinuate sinuated sinuatedentate sinuately sinuation sinuatocontorted sinuatodentate sinuatodentated sinuatopinnatifid sinuatoserrated sinuatoundulate sinuatrial sinuauricular sinuitis sinuose sinuosely sinuosity sinuous sinuously sinuousness sinupallial sinupalliate sinus sinusal sinusitis sinuslike sinusoid sinusoidal sinusoidally sinuventricular sinward siol sion sip sipage sipe siper siphoid siphon siphonaceous siphonage siphonal siphonapterous siphonariid siphonate siphoneous siphonet siphonia siphonial siphonic siphoniferous siphoniform siphonium siphonless siphonlike siphonobranchiate siphonogam siphonogamic siphonogamous siphonogamy siphonoglyph siphonoglyphe siphonognathid siphonognathous siphonophoran siphonophore siphonophorous siphonoplax siphonopore siphonorhinal siphonorhine siphonosome siphonostele siphonostelic siphonostely siphonostomatous siphonostome siphonostomous siphonozooid siphonula siphorhinal siphorhinian siphosome siphuncle siphuncled siphuncular siphunculate siphunculated sipid sipidity siping sipling sipper sippet sippingly sippio sipunculacean sipunculid sipunculoid sipylite sir sircar sirdar sirdarship sire sireless siren sirene sirenian sirenic sirenical sirenically sirening sirenize sirenlike sirenoid sireny sireship siress sirgang sirian siriasis siricid sirih siriometer siris sirkeer sirki sirky sirloin sirloiny siroc sirocco siroccoish siroccoishly sirpea sirple sirpoon sirrah sirree sirship siruaballi siruelas sirup siruped siruper sirupy sis sisal siscowet sise sisel siserara siserary siserskite sish sisham sisi siskin sismotherapy siss sissification sissify sissiness sissoo sissy sissyish sissyism sist sister sisterhood sisterin sistering sisterize sisterless sisterlike sisterliness sisterly sistern sistle sistomensin sistrum sisyrinchium sit sitao sitar sitatunga sitch site sitfast sith sithcund sithe sithement sithence sithens sitient sitio sitiology sitiomania sitiophobia sitology sitomania sitophobia sitophobic sitosterin sitosterol sitotoxism sittee sitten sitter sittine sitting sittringy situal situate situated situation situational situla situlae situs siva sivathere sivatherioid siver sivvens siwash six sixain sixer sixfoil sixfold sixhaend sixhynde sixpence sixpenny sixpennyworth sixscore sixsome sixte sixteen sixteener sixteenfold sixteenmo sixteenth sixteenthly sixth sixthet sixthly sixtieth sixty sixtyfold sixtypenny sizable sizableness sizably sizal sizar sizarship size sizeable sizeableness sized sizeman sizer sizes siziness sizing sizy sizygia sizygium sizz sizzard sizzing sizzle sizzling sizzlingly sjambok skaddle skaff skaffie skag skaillie skainsmate skair skaitbird skal skalawag skaldship skance skandhas skart skasely skat skate skateable skater skatikas skatiku skating skatist skatole skatosine skatoxyl skaw skean skeanockle skedaddle skedaddler skedge skedgewith skedlock skee skeed skeeg skeel skeeling skeely skeen skeenyie skeer skeered skeery skeesicks skeet skeeter skeezix skeg skegger skeif skeigh skeily skein skeiner skeipp skel skelder skelderdrake skeldrake skeletal skeletin skeletogenous skeletogeny skeletomuscular skeleton skeletonian skeletonic skeletonization skeletonize skeletonizer skeletonless skeletonweed skeletony skelf skelgoose skelic skell skellat skeller skelloch skellum skelly skelp skelper skelpin skelping skelter skemmel skemp sken skene skeo skeough skep skepful skeppist skeppund skeptic skeptical skeptically skepticalness skepticism skepticize sker skere skerret skerrick skerry sketch sketchability sketchable sketchbook sketchee sketcher sketchily sketchiness sketching sketchingly sketchist sketchlike sketchy skete sketiotai skeuomorph skeuomorphic skevish skew skewback skewbacked skewbald skewed skewer skewerer skewerwood skewings skewl skewly skewness skewwhiff skewwise skewy skey skeyting ski skiagram skiagraph skiagrapher skiagraphic skiagraphical skiagraphically skiagraphy skiameter skiametry skiapod skiapodous skiascope skiascopy skibby skibslast skice skid skidded skidder skidding skiddingly skiddoo skiddy skidpan skidproof skidway skied skieppe skiepper skier skies skiff skiffless skiffling skift skiing skijore skijorer skijoring skil skilder skildfel skilfish skill skillagalee skilled skillenton skillessness skillet skillful skillfully skillfulness skilligalee skilling skillion skilly skilpot skilts skim skimback skime skimmed skimmer skimmerton skimming skimmingly skimmington skimmity skimp skimpily skimpiness skimpingly skimpy skin skinbound skinch skinflint skinflintily skinflintiness skinflinty skinful skink skinker skinking skinkle skinless skinlike skinned skinner skinnery skinniness skinning skinny skintight skinworm skiogram skiograph skiophyte skip skipbrain skipjack skipjackly skipkennel skipman skippable skippel skipper skippered skippership skippery skippet skipping skippingly skipple skippund skippy skiptail skirl skirlcock skirling skirmish skirmisher skirmishing skirmishingly skirp skirr skirreh skirret skirt skirtboard skirted skirter skirting skirtingly skirtless skirtlike skirty skirwhit skirwort skit skite skiter skither skitter skittish skittishly skittishness skittle skittled skittler skittles skitty skittyboot skiv skive skiver skiverwood skiving skivvies sklate sklater sklent skleropelite sklinter skoal skogbolite skokiaan skomerite skoo skookum skoptsy skout skraeling skraigh skrike skrimshander skrupul skua skulduggery skulk skulker skulking skulkingly skull skullbanker skullcap skulled skullery skullfish skullful skully skulp skun skunk skunkbill skunkbush skunkdom skunkery skunkhead skunkish skunklet skunktop skunkweed skunky skuse skutterudite sky skybal skycraft skyey skyful skyish skylark skylarker skyless skylight skylike skylook skyman skyphoi skyphos skyplast skyre skyrgaliard skyrocket skyrockety skysail skyscape skyscraper skyscraping skyshine skyugle skyward skywards skyway skywrite skywriter skywriting sla slab slabbed slabber slabberer slabbery slabbiness slabbing slabby slabman slabness slabstone slack slackage slacked slacken slackener slacker slackerism slacking slackingly slackly slackness slad sladang slade slae slag slaggability slaggable slagger slagging slaggy slagless slaglessness slagman slain slainte slaister slaistery slait slake slakeable slakeless slaker slaking slaky slam slammakin slammerkin slammock slammocking slammocky slamp slampamp slampant slander slanderer slanderful slanderfully slandering slanderingly slanderous slanderously slanderousness slanderproof slane slang slangily slanginess slangish slangishly slangism slangkop slangous slangster slanguage slangular slangy slank slant slantindicular slantindicularly slanting slantingly slantingways slantly slantways slantwise slap slapdash slapdashery slape slaphappy slapjack slapper slapping slapstick slapsticky slare slart slarth slash slashed slasher slashing slashingly slashy slat slatch slate slateful slatelike slatemaker slatemaking slater slateworks slateyard slath slather slatify slatiness slating slatish slatted slatter slattern slatternish slatternliness slatternly slatternness slattery slatting slaty slaughter slaughterer slaughterhouse slaughteringly slaughterman slaughterous slaughterously slaughteryard slaum slave slaveborn slaved slaveholder slaveholding slaveland slaveless slavelet slavelike slaveling slavemonger slaveowner slaveownership slavepen slaver slaverer slavering slaveringly slavery slavey slavikite slaving slavish slavishly slavishness slavocracy slavocrat slavocratic slaw slay slayable slayer slaying sleathy sleave sleaved sleaziness sleazy sleck sled sledded sledder sledding sledful sledge sledgeless sledgemeter sledger sledging sledlike slee sleech sleechy sleek sleeken sleeker sleeking sleekit sleekly sleekness sleeky sleep sleeper sleepered sleepful sleepfulness sleepify sleepily sleepiness sleeping sleepingly sleepland sleepless sleeplessly sleeplessness sleeplike sleepmarken sleepproof sleepry sleepwaker sleepwaking sleepwalk sleepwalker sleepwalking sleepward sleepwort sleepy sleepyhead sleer sleet sleetiness sleeting sleetproof sleety sleeve sleeveband sleeveboard sleeved sleeveen sleevefish sleeveful sleeveless sleevelessness sleevelet sleevelike sleever sleigh sleigher sleighing sleight sleightful sleighty slendang slender slenderish slenderize slenderly slenderness slent slepez slept slete sleuth sleuthdog sleuthful sleuthhound sleuthlike slew slewed slewer slewing sley sleyer slice sliceable sliced slicer slich slicht slicing slicingly slick slicken slickens slickenside slicker slickered slickery slicking slickly slickness slid slidable slidableness slidably slidage slidden slidder sliddery slide slideable slideableness slideably slided slidehead slideman slideproof slider slideway sliding slidingly slidingness slidometer slifter slight slighted slighter slightily slightiness slighting slightingly slightish slightly slightness slighty slim slime slimeman slimer slimily sliminess slimish slimishness slimly slimmish slimness slimpsy slimsy slimy sline sling slingball slinge slinger slinging slingshot slingsman slingstone slink slinker slinkily slinkiness slinking slinkingly slinkskin slinkweed slinky slip slipback slipband slipboard slipbody slipcase slipcoach slipcoat slipe slipgibbet sliphorn sliphouse slipknot slipless slipman slipover slippage slipped slipper slippered slipperflower slipperily slipperiness slipperlike slipperweed slipperwort slippery slipperyback slipperyroot slippiness slipping slippingly slipproof slippy slipshod slipshoddiness slipshoddy slipshodness slipshoe slipslap slipslop slipsloppish slipsloppism slipsole slipstep slipstring sliptopped slipway slirt slish slit slitch slite slither slithering slitheroo slithers slithery slithy slitless slitlike slitshell slitted slitter slitting slitty slitwise slive sliver sliverer sliverlike sliverproof slivery sliving slivovitz sloan slob slobber slobberchops slobberer slobbers slobbery slobby slock slocken slod slodder slodge slodger sloe sloeberry sloebush sloetree slog slogan sloganeer sloganize slogger slogging slogwood sloka sloke slommock slon slone slonk sloo sloom sloomy sloop sloopman sloosh slop slopdash slope sloped slopely slopeness sloper slopeways slopewise sloping slopingly slopingness slopmaker slopmaking sloppage slopped sloppery sloppily sloppiness slopping sloppy slops slopseller slopselling slopshop slopstone slopwork slopworker slopy slorp slosh slosher sloshily sloshiness sloshy slot slote sloted sloth slothful slothfully slothfulness slothound slotted slotter slottery slotting slotwise slouch sloucher slouchily slouchiness slouching slouchingly slouchy slough sloughiness sloughy slour sloush sloven slovenlike slovenliness slovenly slovenwood slow slowbellied slowbelly slowdown slowgoing slowheaded slowhearted slowheartedness slowhound slowish slowly slowmouthed slowpoke slowrie slows slowworm sloyd slub slubber slubberdegullion slubberer slubbering slubberingly slubberly slubbery slubbing slubby slud sludder sluddery sludge sludged sludger sludgy slue sluer slug slugabed sluggard sluggarding sluggardize sluggardliness sluggardly sluggardness sluggardry slugged slugger slugging sluggingly sluggish sluggishly sluggishness sluggy sluglike slugwood sluice sluicelike sluicer sluiceway sluicing sluicy sluig sluit slum slumber slumberer slumberful slumbering slumberingly slumberland slumberless slumberous slumberously slumberousness slumberproof slumbersome slumbery slumbrous slumdom slumgullion slumgum slumland slummage slummer slumminess slumming slummock slummocky slummy slump slumpproof slumproof slumpwork slumpy slumward slumwise slung slungbody slunge slunk slunken slur slurbow slurp slurry slush slusher slushily slushiness slushy slut slutch slutchy sluther sluthood slutter sluttery sluttikin sluttish sluttishly sluttishness slutty sly slyboots slyish slyly slyness slype sma smachrie smack smackee smacker smackful smacking smackingly smacksman smaik small smallage smallclothes smallcoal smallen smaller smallhearted smallholder smalling smallish smallmouth smallmouthed smallness smallpox smalls smallsword smalltime smallware smally smalm smalt smalter smaltine smaltite smalts smaragd smaragdine smaragdite smaragdus smarm smarmy smart smarten smarting smartingly smartish smartism smartless smartly smartness smartweed smarty smash smashable smashage smashboard smasher smashery smashing smashingly smashment smashup smatter smatterer smattering smatteringly smattery smaze smear smearcase smeared smearer smeariness smearless smeary smectic smectis smectite smeddum smee smeech smeek smeeky smeer smeeth smegma smell smellable smellage smelled smeller smellful smellfungi smellfungus smelliness smelling smellproof smellsome smelly smelt smelter smelterman smeltery smeltman smeth smethe smeuse smew smich smicker smicket smiddie smiddum smidge smidgen smifligate smifligation smiggins smilacaceous smilaceous smilacin smilax smile smileable smileage smileful smilefulness smileless smilelessly smilelessness smilemaker smilemaking smileproof smiler smilet smiling smilingly smilingness smily sminthurid smirch smircher smirchless smirchy smiris smirk smirker smirking smirkingly smirkish smirkle smirkly smirky smirtle smit smitch smite smiter smith smitham smithcraft smither smithereens smithery smithing smithite smithsonite smithwork smithy smithydander smiting smitten smitting smock smocker smockface smocking smockless smocklike smog smokables smoke smokeable smokebox smokebush smoked smokefarthings smokehouse smokejack smokeless smokelessly smokelessness smokelike smokeproof smoker smokery smokestack smokestone smoketight smokewood smokily smokiness smoking smokish smoky smokyseeming smolder smolderingness smolt smooch smoochy smoodge smoodger smook smoorich smoot smooth smoothable smoothback smoothbore smoothbored smoothcoat smoothen smoother smoothification smoothify smoothing smoothingly smoothish smoothly smoothmouthed smoothness smoothpate smopple smore smorgasbord smote smother smotherable smotheration smothered smotherer smotheriness smothering smotheringly smothery smotter smouch smoucher smous smouse smouser smout smriti smudge smudged smudgedly smudgeless smudgeproof smudger smudgily smudginess smudgy smug smuggery smuggish smuggishly smuggishness smuggle smuggleable smuggler smugglery smuggling smugism smugly smugness smuisty smur smurr smurry smuse smush smut smutch smutchin smutchless smutchy smutproof smutted smutter smuttily smuttiness smutty smyth smytrie snab snabbie snabble snack snackle snackman snaff snaffle snaffles snafu snag snagbush snagged snagger snaggled snaggletooth snaggy snagrel snail snaileater snailery snailfish snailflower snailish snailishly snaillike snails snaily snaith snake snakebark snakeberry snakebird snakebite snakefish snakeflower snakehead snakeholing snakeleaf snakeless snakelet snakelike snakeling snakemouth snakeneck snakeology snakephobia snakepiece snakepipe snakeproof snaker snakeroot snakery snakeship snakeskin snakestone snakeweed snakewise snakewood snakeworm snakewort snakily snakiness snaking snakish snaky snap snapback snapbag snapberry snapdragon snape snaper snaphead snapholder snapjack snapless snappable snapped snapper snappily snappiness snapping snappingly snappish snappishly snappishness snapps snappy snaps snapsack snapshot snapshotter snapweed snapwood snapwort snapy snare snareless snarer snaringly snark snarl snarler snarleyyow snarlingly snarlish snarly snary snaste snatch snatchable snatched snatcher snatchily snatching snatchingly snatchproof snatchy snath snathe snavel snavvle snaw snead sneak sneaker sneakiness sneaking sneakingly sneakingness sneakish sneakishly sneakishness sneaksby sneaksman sneaky sneap sneath sneathe sneb sneck sneckdraw sneckdrawing sneckdrawn snecker snecket sned snee sneer sneerer sneerful sneerfulness sneering sneeringly sneerless sneery sneesh sneeshing sneest sneesty sneeze sneezeless sneezeproof sneezer sneezeweed sneezewood sneezewort sneezing sneezy snell snelly snerp snew snib snibble snibbled snibbler snibel snicher snick snickdraw snickdrawing snicker snickering snickeringly snickersnee snicket snickey snickle sniddle snide snideness sniff sniffer sniffily sniffiness sniffing sniffingly sniffish sniffishness sniffle sniffler sniffly sniffy snift snifter snifty snig snigger sniggerer sniggering sniggle sniggler sniggoringly snip snipe snipebill snipefish snipelike sniper sniperscope sniping snipish snipjack snipnose snipocracy snipper snippersnapper snipperty snippet snippetiness snippety snippiness snipping snippish snippy snipsnapsnorum sniptious snipy snirl snirt snirtle snitch snitcher snite snithe snithy snittle snivel sniveled sniveler sniveling snively snivy snob snobber snobbery snobbess snobbing snobbish snobbishly snobbishness snobbism snobby snobdom snobling snobocracy snobocrat snobographer snobography snobologist snobonomer snobscat snocher snock snocker snod snodly snoek snoeking snog snoga snoke snood snooded snooding snook snooker snookered snoop snooper snooperscope snoopy snoose snoot snootily snootiness snooty snoove snooze snoozer snooziness snoozle snoozy snop snore snoreless snorer snoring snoringly snork snorkel snorker snort snorter snorting snortingly snortle snorty snot snotter snottily snottiness snotty snouch snout snouted snouter snoutish snoutless snoutlike snouty snow snowball snowbank snowbell snowberg snowberry snowbird snowblink snowbound snowbreak snowbush snowcap snowcraft snowdrift snowdrop snowfall snowflake snowflight snowflower snowfowl snowhammer snowhouse snowie snowily snowiness snowish snowk snowl snowland snowless snowlike snowmanship snowmobile snowplow snowproof snowscape snowshade snowshed snowshine snowshoe snowshoed snowshoeing snowshoer snowslide snowslip snowstorm snowsuit snowworm snowy snozzle snub snubbable snubbed snubbee snubber snubbiness snubbing snubbingly snubbish snubbishly snubbishness snubby snubproof snuck snudge snuff snuffbox snuffboxer snuffcolored snuffer snuffers snuffiness snuffing snuffingly snuffish snuffle snuffler snuffles snuffless snuffliness snuffling snufflingly snuffly snuffman snuffy snug snugger snuggery snuggish snuggle snugify snugly snugness snum snup snupper snur snurl snurly snurp snurt snuzzle sny snying so soak soakage soakaway soaked soaken soaker soaking soakingly soakman soaky soally soam soap soapbark soapberry soapbox soapboxer soapbubbly soapbush soaper soapery soapfish soapily soapiness soaplees soapless soaplike soapmaker soapmaking soapmonger soaprock soaproot soapstone soapsud soapsuddy soapsuds soapsudsy soapweed soapwood soapwort soapy soar soarability soarable soarer soaring soaringly soary sob sobber sobbing sobbingly sobby sobeit sober soberer sobering soberingly soberize soberlike soberly soberness sobersault sobersided sobersides soberwise sobful soboles soboliferous sobproof sobralite sobrevest sobriety sobriquet sobriquetical soc socage socager soccer soccerist soccerite soce socht sociability sociable sociableness sociably social socialism socialist socialistic socialite sociality socializable socialization socialize socializer socially socialness sociation sociative societal societally societarian societarianism societary societified societism societist societologist societology society societyish societyless socii sociobiological sociocentric sociocracy sociocrat sociocratic sociocultural sociodrama sociodramatic socioeconomic socioeducational sociogenesis sociogenetic sociogeny sociography sociolatry sociolegal sociologian sociologic sociological sociologically sociologism sociologist sociologistic sociologize sociologizer sociologizing sociology sociomedical sociometric sociometry socionomic socionomics socionomy sociophagous sociopolitical socioreligious socioromantic sociostatic sociotechnical socius sock sockdolager socker socket socketful socketless sockeye sockless socklessness sockmaker sockmaking socky socle socman socmanry soco sod soda sodaclase sodaic sodaless sodalist sodalite sodalithite sodality sodamide sodbuster sodded sodden soddenly soddenness sodding soddite soddy sodic sodio sodioaluminic sodioaurous sodiocitrate sodiohydric sodioplatinic sodiosalicylate sodiotartrate sodium sodless sodoku sodomic sodomitess sodomitic sodomitical sodomitically sodomy sodwork sody soe soekoe soever sofa sofane sofar soffit soft softa softball softbrained soften softener softening softhead softheaded softhearted softheartedly softheartedness softhorn softish softling softly softner softness softship softtack softwood softy sog soger soget soggarth soggendalite soggily sogginess sogging soggy soh soho soiesette soil soilage soiled soiling soilless soilproof soilure soily soiree soixantine soja sojourn sojourner sojourney sojournment sok soka soke sokeman sokemanemot sokemanry soken sol sola solace solaceful solacement solaceproof solacer solacious solaciously solaciousness solan solanaceous solanal solander solaneine solaneous solanidine solanine solanum solar solarism solarist solaristic solaristically solaristics solarium solarization solarize solarometer solate solatia solation solatium solay sold soldado soldan soldanel soldanelle soldanrie solder solderer soldering solderless soldi soldier soldierbird soldierbush soldierdom soldieress soldierfish soldierhearted soldierhood soldiering soldierize soldierlike soldierliness soldierly soldierproof soldiership soldierwise soldierwood soldiery soldo sole solea soleas solecism solecist solecistic solecistical solecistically solecize solecizer soleiform soleil soleless solely solemn solemncholy solemnify solemnitude solemnity solemnization solemnize solemnizer solemnly solemnness solen solenacean solenaceous soleness solenette solenial solenite solenitis solenium solenoconch solenocyte solenodont solenogaster solenoglyph solenoglyphic solenoid solenoidal solenoidally solenostele solenostelic solenostomid solenostomoid solenostomous solent solentine solepiece soleplate soleprint soler soles soleus soleyn solfataric solfeggio solferino soli soliative solicit solicitant solicitation solicitationism solicited solicitee soliciter soliciting solicitor solicitorship solicitous solicitously solicitousness solicitress solicitrix solicitude solicitudinous solid solidago solidaric solidarily solidarism solidarist solidaristic solidarity solidarize solidary solidate solidi solidifiability solidifiable solidifiableness solidification solidifier solidiform solidify solidish solidism solidist solidistic solidity solidly solidness solidum solidungular solidungulate solidus solifidian solifidianism solifluction solifluctional soliform solifuge solifugean solifugid solifugous soliloquacious soliloquist soliloquium soliloquize soliloquizer soliloquizing soliloquizingly soliloquy solilunar solio soliped solipedal solipedous solipsism solipsismal solipsist solipsistic solist solitaire solitarian solitarily solitariness solitary soliterraneous solitidal solitude solitudinarian solitudinize solitudinous solivagant solivagous sollar solleret solmizate solmization solo solod solodi solodization solodize soloecophanes soloist solon solonchak solonetz solonetzic solonetzicity solonist soloth solotink solotnik solpugid solstice solsticion solstitia solstitial solstitially solstitium solubility solubilization solubilize soluble solubleness solubly solum solute solution solutional solutioner solutionist solutize solutizer solvability solvable solvableness solvate solvation solve solvement solvency solvend solvent solvently solventproof solver solvolysis solvolytic solvolyze solvsbergite soma somacule somal somaplasm somasthenia somata somatasthenia somatic somatical somatically somaticosplanchnic somaticovisceral somatics somatism somatist somatization somatochrome somatocyst somatocystic somatoderm somatogenetic somatogenic somatognosis somatognostic somatologic somatological somatologically somatologist somatology somatome somatomic somatophyte somatophytic somatoplasm somatopleural somatopleure somatopleuric somatopsychic somatosplanchnic somatotonia somatotonic somatotropic somatotropically somatotropism somatotype somatotyper somatotypy somatous somber somberish somberly somberness sombre sombrerite sombrero sombreroed sombrous sombrously sombrousness some somebody someday somedeal somegate somehow someone somepart someplace somers somersault somerset somervillite somesthesia somesthesis somesthetic something somethingness sometime sometimes someway someways somewhat somewhatly somewhatness somewhen somewhence somewhere somewheres somewhile somewhiles somewhither somewhy somewise somital somite somitic somma sommaite sommelier somnambulance somnambulancy somnambulant somnambular somnambulary somnambulate somnambulation somnambulator somnambule somnambulency somnambulic somnambulically somnambulism somnambulist somnambulistic somnambulize somnambulous somnial somniative somnifacient somniferous somniferously somnific somnifuge somnify somniloquacious somniloquence somniloquent somniloquism somniloquist somniloquize somniloquous somniloquy somnipathist somnipathy somnivolency somnivolent somnolence somnolency somnolent somnolently somnolescence somnolescent somnolism somnolize somnopathy somnorific somnus sompay sompne sompner son sonable sonance sonancy sonant sonantal sonantic sonantina sonantized sonar sonata sonatina sonation sond sondation sondeli sonderclass soneri song songbird songbook songcraft songfest songful songfully songfulness songish songland songle songless songlessly songlessness songlet songlike songman songster songstress songworthy songwright songy sonhood sonic soniferous sonification soniou sonk sonless sonlike sonlikeness sonly sonneratiaceous sonnet sonnetary sonneteer sonneteeress sonnetic sonneting sonnetish sonnetist sonnetize sonnetlike sonnetwise sonnikins sonny sonobuoy sonometer sonorant sonorescence sonorescent sonoric sonoriferous sonoriferously sonorific sonority sonorophone sonorosity sonorous sonorously sonorousness sons sonship sonsy sontag soodle soodly sook sooky sool sooloos soon sooner soonish soonly soorawn soord soorkee soot sooter sooterkin sooth soothe soother sootherer soothful soothing soothingly soothingness soothless soothsay soothsayer soothsayership soothsaying sootily sootiness sootless sootlike sootproof sooty sootylike sop sope soph sophia sophic sophical sophically sophiologic sophiology sophism sophister sophistic sophistical sophistically sophisticalness sophisticant sophisticate sophisticated sophistication sophisticative sophisticator sophisticism sophistress sophistry sophomore sophomoric sophomorical sophomorically sophoria sophronize sophy sopite sopition sopor soporiferous soporiferously soporiferousness soporific soporifical soporifically soporose sopper soppiness sopping soppy soprani sopranino sopranist soprano sora sorage soral sorb sorbate sorbefacient sorbent sorbic sorbile sorbin sorbinose sorbite sorbitic sorbitize sorbitol sorbose sorboside sorbus sorcer sorcerer sorceress sorcering sorcerous sorcerously sorcery sorchin sorda sordawalite sordellina sordes sordid sordidity sordidly sordidness sordine sordino sordor sore soredia soredial sorediate sorediferous sorediform soredioid soredium soree sorefalcon sorefoot sorehawk sorehead soreheaded soreheadedly soreheadedness sorehearted sorehon sorely sorema soreness sorgho sorghum sorgo sori soricid soricident soricine soricoid soriferous sorite sorites soritical sorn sornare sornari sorner sorning soroban sororal sororate sororial sororially sororicidal sororicide sorority sororize sorose sorosis sorosphere sorption sorra sorrel sorrento sorrily sorriness sorroa sorrow sorrower sorrowful sorrowfully sorrowfulness sorrowing sorrowingly sorrowless sorrowproof sorrowy sorry sorryhearted sorryish sort sortable sortably sortal sortation sorted sorter sortie sortilege sortileger sortilegic sortilegious sortilegus sortilegy sortiment sortition sortly sorty sorus sorva sory sosh soshed soso sosoish soss sossle sostenuto sot soterial soteriologic soteriological soteriology sotie sotnia sotnik sotol sots sottage sotted sotter sottish sottishly sottishness sou souari soubise soubrette soubrettish soucar souchet souchong souchy soud soudagur souffle souffleed sough sougher soughing sought soul soulack soulcake souled soulful soulfully soulfulness soulical soulish soulless soullessly soullessness soullike soulsaving soulward souly soum soumansite soumarque sound soundable soundage soundboard sounder soundful soundheaded soundheadedness soundhearted soundheartednes sounding soundingly soundingness soundless soundlessly soundlessness soundly soundness soundproof soundproofing soup soupbone soupcon souper souple soupless souplike soupspoon soupy sour sourbelly sourberry sourbread sourbush sourcake source sourceful sourcefulness sourceless sourcrout sourdeline sourdine soured souredness souren sourer sourhearted souring sourish sourishly sourishness sourjack sourling sourly sourness sourock soursop sourtop sourweed sourwood soury sousaphone sousaphonist souse souser souslik soutane souter souterrain south southard southbound southeast southeaster southeasterly southeastern southeasternmost southeastward southeastwardly southeastwards souther southerland southerliness southerly southermost southern southerner southernism southernize southernliness southernly southernmost southernness southernwood southing southland southlander southmost southness southpaw southron southward southwardly southwards southwest southwester southwesterly southwestern southwesternmost southwestward southwestwardly souvenir souverain souwester sov sovereign sovereigness sovereignly sovereignness sovereignship sovereignty soviet sovietdom sovietic sovietism sovietist sovietization sovietize sovite sovkhose sovkhoz sovran sovranty sow sowable sowan sowans sowar sowarry sowback sowbacked sowbane sowbelly sowbread sowdones sowel sowens sower sowfoot sowing sowins sowl sowle sowlike sowlth sown sowse sowt sowte soy soya soybean sozin sozolic sozzle sozzly spa space spaceband spaced spaceful spaceless spacer spacesaving spaceship spaciness spacing spaciosity spaciotemporal spacious spaciously spaciousness spack spacy spad spade spadebone spaded spadefish spadefoot spadeful spadelike spademan spader spadesman spadewise spadework spadger spadiceous spadices spadicifloral spadiciflorous spadiciform spadicose spadilla spadille spading spadix spadone spadonic spadonism spadrone spadroon spae spaebook spaecraft spaedom spaeman spaer spaewife spaewoman spaework spaewright spaghetti spagyric spagyrical spagyrically spagyrist spahi spaid spaik spairge spak spalacine spald spalder spalding spale spall spallation spaller spalling spalpeen spalt span spancel spandle spandrel spandy spane spanemia spanemy spang spanghew spangle spangled spangler spanglet spangly spangolite spaniel spaniellike spanielship spaning spanipelagic spank spanker spankily spanking spankingly spanky spanless spann spannel spanner spannerman spanopnoea spanpiece spantoon spanule spanworm spar sparable sparada sparadrap sparagrass sparagus sparassodont sparaxis sparch spare spareable spareless sparely spareness sparer sparerib sparesome sparganium sparganosis sparganum sparge sparger spargosis sparhawk sparid sparing sparingly sparingness spark sparkback sparked sparker sparkiness sparking sparkish sparkishly sparkishness sparkle sparkleberry sparkler sparkless sparklessly sparklet sparklike sparkliness sparkling sparklingly sparklingness sparkly sparkproof sparks sparky sparlike sparling sparm sparoid sparpiece sparred sparrer sparring sparringly sparrow sparrowbill sparrowcide sparrowdom sparrowgrass sparrowish sparrowless sparrowlike sparrowtail sparrowtongue sparrowwort sparrowy sparry sparse sparsedly sparsely sparsile sparsioplast sparsity spart spartacist sparteine sparterie sparth spartle sparver spary spasm spasmatic spasmatical spasmatomancy spasmed spasmic spasmodic spasmodical spasmodically spasmodicalness spasmodism spasmodist spasmolytic spasmophilia spasmophilic spasmotin spasmotoxin spasmous spastic spastically spasticity spat spatalamancy spatangoid spatangoidean spatchcock spate spatha spathaceous spathal spathe spathed spatheful spathic spathilae spathilla spathose spathous spathulate spatial spatiality spatialization spatialize spatially spatiate spatiation spatilomancy spatiotemporal spatling spatted spatter spatterdashed spatterdasher spatterdock spattering spatteringly spatterproof spatterwork spatting spattle spattlehoe spatula spatulamancy spatular spatulate spatulation spatule spatuliform spatulose spave spaver spavie spavied spaviet spavin spavindy spavined spawn spawneater spawner spawning spawny spay spayad spayard spaying speak speakable speakableness speakably speaker speakeress speakership speakhouse speakies speaking speakingly speakingness speakless speaklessly speal spealbone spean spear spearcast spearer spearfish spearflower spearhead spearing spearman spearmanship spearmint spearproof spearsman spearwood spearwort speary spec specchie spece special specialism specialist specialistic speciality specialization specialize specialized specializer specially specialness specialty speciation specie species speciestaler specifiable specific specifical specificality specifically specificalness specificate specification specificative specificatively specificity specificize specificly specificness specifier specifist specify specillum specimen specimenize speciology speciosity specious speciously speciousness speck specked speckedness speckfall speckiness specking speckle specklebelly specklebreast speckled speckledbill speckledness speckless specklessly specklessness speckling speckly speckproof specks specksioneer specky specs spectacle spectacled spectacleless spectaclelike spectaclemaker spectaclemaking spectacles spectacular spectacularism spectacularity spectacularly spectator spectatordom spectatorial spectatorship spectatory spectatress spectatrix specter spectered specterlike spectra spectral spectralism spectrality spectrally spectralness spectrobolograph spectrobolographic spectrobolometer spectrobolometric spectrochemical spectrochemistry spectrocolorimetry spectrocomparator spectroelectric spectrogram spectrograph spectrographic spectrographically spectrography spectroheliogram spectroheliograph spectroheliographic spectrohelioscope spectrological spectrologically spectrology spectrometer spectrometric spectrometry spectromicroscope spectromicroscopical spectrophobia spectrophone spectrophonic spectrophotoelectric spectrophotograph spectrophotography spectrophotometer spectrophotometric spectrophotometry spectropolarimeter spectropolariscope spectropyrheliometer spectropyrometer spectroradiometer spectroradiometric spectroradiometry spectroscope spectroscopic spectroscopically spectroscopist spectroscopy spectrotelescope spectrous spectrum spectry specula specular specularly speculate speculation speculatist speculative speculatively speculativeness speculativism speculator speculatory speculatrices speculatrix speculist speculum specus sped speech speechcraft speecher speechful speechfulness speechification speechifier speechify speeching speechless speechlessly speechlessness speechlore speechmaker speechmaking speechment speed speedaway speedboat speedboating speedboatman speeder speedful speedfully speedfulness speedily speediness speeding speedingly speedless speedometer speedster speedway speedwell speedy speel speelken speelless speen speer speering speerity speiskobalt speiss spekboom spelaean spelder spelding speldring speleological speleologist speleology spelk spell spellable spellbind spellbinder spellbinding spellbound spellcraft spelldown speller spellful spelling spellingdown spellingly spellmonger spellproof spellword spellwork spelt spelter spelterman speltoid speltz speluncar speluncean spelunk spelunker spence spencer spencerite spend spendable spender spendful spendible spending spendless spendthrift spendthrifty spense spent speos sperable sperate sperity sperket sperling sperm sperma spermaceti spermacetilike spermaduct spermalist spermaphyte spermaphytic spermarium spermary spermashion spermatangium spermatheca spermathecal spermatic spermatically spermatid spermatiferous spermatin spermatiogenous spermation spermatiophore spermatism spermatist spermatitis spermatium spermatize spermatoblast spermatoblastic spermatocele spermatocyst spermatocystic spermatocystitis spermatocytal spermatocyte spermatogemma spermatogenesis spermatogenetic spermatogenic spermatogenous spermatogeny spermatogonial spermatogonium spermatoid spermatolysis spermatolytic spermatophoral spermatophore spermatophorous spermatophyte spermatophytic spermatoplasm spermatoplasmic spermatoplast spermatorrhea spermatospore spermatotheca spermatova spermatovum spermatoxin spermatozoa spermatozoal spermatozoan spermatozoic spermatozoid spermatozoon spermaturia spermic spermidine spermiducal spermiduct spermigerous spermine spermiogenesis spermism spermist spermoblast spermoblastic spermocarp spermocenter spermoderm spermoduct spermogenesis spermogenous spermogone spermogoniferous spermogonium spermogonous spermologer spermological spermologist spermology spermolysis spermolytic spermophile spermophiline spermophore spermophorium spermophyte spermophytic spermosphere spermotheca spermotoxin spermous spermoviduct spermy speronara speronaro sperone sperrylite spessartite spet spetch spetrophoby speuchan spew spewer spewiness spewing spewy spex sphacel sphacelariaceous sphacelate sphacelated sphacelation sphacelia sphacelial sphacelism sphaceloderma sphacelotoxin sphacelous sphacelus sphaeraphides sphaerenchyma sphaeriaceous sphaeridia sphaeridial sphaeridium sphaeristerium sphaerite sphaeroblast sphaerocobaltite sphaerococcaceous sphaerolite sphaerolitic sphaerosiderite sphaerosome sphaerospore sphagion sphagnaceous sphagnicolous sphagnologist sphagnology sphagnous sphagnum sphalerite sphecid spheges sphegid sphendone sphene sphenethmoid sphenethmoidal sphenic sphenion spheniscine spheniscomorph spheniscomorphic sphenobasilar sphenobasilic sphenocephalia sphenocephalic sphenocephalous sphenocephaly sphenodon sphenodont sphenoethmoid sphenoethmoidal sphenofrontal sphenogram sphenographic sphenographist sphenography sphenoid sphenoidal sphenoiditis sphenolith sphenomalar sphenomandibular sphenomaxillary sphenopalatine sphenoparietal sphenopetrosal sphenophyllaceous sphenosquamosal sphenotemporal sphenotic sphenotribe sphenotripsy sphenoturbinal sphenovomerine sphenozygomatic spherable spheral spherality spheraster spheration sphere sphereless spheric spherical sphericality spherically sphericalness sphericist sphericity sphericle sphericocylindrical sphericotetrahedral sphericotriangular spherics spheriform spherify spheroconic spherocrystal spherograph spheroidal spheroidally spheroidic spheroidical spheroidically spheroidicity spheroidism spheroidity spheroidize spheromere spherometer spheroquartic spherula spherular spherulate spherule spherulite spherulitic spherulitize sphery spheterize sphexide sphincter sphincteral sphincteralgia sphincterate sphincterectomy sphincterial sphincteric sphincterismus sphincteroscope sphincteroscopy sphincterotomy sphindid sphingal sphinges sphingid sphingiform sphingine sphingoid sphingometer sphingomyelin sphingosine sphinx sphinxian sphinxianness sphinxlike sphragide sphragistic sphragistics sphygmia sphygmic sphygmochronograph sphygmodic sphygmogram sphygmograph sphygmographic sphygmography sphygmoid sphygmology sphygmomanometer sphygmomanometric sphygmomanometry sphygmometer sphygmometric sphygmophone sphygmophonic sphygmoscope sphygmus sphyraenid sphyraenoid spica spical spicant spicate spicated spiccato spice spiceable spiceberry spicebush spicecake spiced spiceful spicehouse spiceland spiceless spicelike spicer spicery spicewood spiciferous spiciform spicigerous spicilege spicily spiciness spicing spick spicket spickle spicknel spicose spicosity spicous spicousness spicula spiculae spicular spiculate spiculated spiculation spicule spiculiferous spiculiform spiculigenous spiculigerous spiculofiber spiculose spiculous spiculum spiculumamoris spicy spider spidered spiderflower spiderish spiderless spiderlike spiderling spiderly spiderweb spiderwork spiderwort spidery spidger spied spiegel spiegeleisen spiel spieler spier spiff spiffed spiffily spiffiness spiffing spiffy spiflicate spiflicated spiflication spig spiggoty spignet spigot spike spikebill spiked spikedness spikefish spikehorn spikelet spikelike spikenard spiker spiketail spiketop spikeweed spikewise spikily spikiness spiking spiky spile spilehole spiler spileworm spilikin spiling spilite spilitic spill spillage spiller spillet spillproof spillway spilly spiloma spilosite spilt spilth spilus spin spina spinacene spinaceous spinach spinachlike spinae spinage spinal spinales spinalis spinally spinate spinder spindlage spindle spindleage spindled spindleful spindlehead spindlelegs spindlelike spindler spindleshanks spindletail spindlewise spindlewood spindleworm spindliness spindling spindly spindrift spine spinebill spinebone spined spinel spineless spinelessly spinelessness spinelet spinelike spinescence spinescent spinet spinetail spingel spinibulbar spinicarpous spinicerebellar spinidentate spiniferous spinifex spiniform spinifugal spinigerous spinigrade spininess spinipetal spinitis spinituberculate spink spinnable spinnaker spinner spinneret spinnerular spinnerule spinnery spinney spinning spinningly spinobulbar spinocarpous spinocerebellar spinogalvanization spinoglenoid spinoid spinomuscular spinoneural spinoperipheral spinose spinosely spinoseness spinosity spinosodentate spinosodenticulate spinosotubercular spinosotuberculate spinosympathetic spinotectal spinothalamic spinotuberculous spinous spinousness spinster spinsterdom spinsterhood spinsterial spinsterish spinsterishly spinsterism spinsterlike spinsterly spinsterous spinstership spinstress spintext spinthariscope spinthariscopic spintherism spinulate spinulation spinule spinulescent spinuliferous spinuliform spinulose spinulosely spinulosociliate spinulosodentate spinulosodenticulate spinulosogranulate spinulososerrate spinulous spiny spionid spiracle spiracula spiracular spiraculate spiraculiferous spiraculiform spiraculum spiral spirale spiraled spiraliform spiralism spirality spiralization spiralize spirally spiraloid spiraltail spiralwise spiran spirant spiranthic spiranthy spirantic spirantize spiraster spirate spirated spiration spire spirea spired spiregrass spireless spirelet spireme spirepole spireward spirewise spiricle spiriferid spiriferoid spiriferous spiriform spirignath spirignathous spirilla spirillaceous spirillar spirillolysis spirillosis spirillotropic spirillotropism spirillum spiring spirit spiritally spiritdom spirited spiritedly spiritedness spiriter spiritful spiritfully spiritfulness spirithood spiriting spiritism spiritist spiritistic spiritize spiritland spiritleaf spiritless spiritlessly spiritlessness spiritlike spiritmonger spiritous spiritrompe spiritsome spiritual spiritualism spiritualist spiritualistic spiritualistically spirituality spiritualization spiritualize spiritualizer spiritually spiritualness spiritualship spiritualty spirituosity spirituous spirituously spirituousness spiritus spiritweed spirity spirivalve spirket spirketing spirling spiro spirobranchiate spirochaetal spirochetal spirochete spirochetemia spirochetic spirocheticidal spirocheticide spirochetosis spirochetotic spirogram spirograph spirographidin spirographin spiroid spiroloculine spirometer spirometric spirometrical spirometry spiropentane spiroscope spirous spirt spirulate spiry spise spissated spissitude spit spital spitball spitballer spitbox spitchcock spite spiteful spitefully spitefulness spiteless spiteproof spitfire spitful spithamai spithame spitish spitpoison spitscocked spitstick spitted spitten spitter spitting spittle spittlefork spittlestaff spittoon spitz spitzkop spiv spivery spizzerinctum splachnaceous splachnoid splacknuck splairge splanchnapophysial splanchnapophysis splanchnectopia splanchnemphraxis splanchnesthesia splanchnesthetic splanchnic splanchnoblast splanchnocoele splanchnoderm splanchnodiastasis splanchnodynia splanchnographer splanchnographical splanchnography splanchnolith splanchnological splanchnologist splanchnology splanchnomegalia splanchnomegaly splanchnopathy splanchnopleural splanchnopleure splanchnopleuric splanchnoptosia splanchnoptosis splanchnosclerosis splanchnoscopy splanchnoskeletal splanchnoskeleton splanchnosomatic splanchnotomical splanchnotomy splanchnotribe splash splashboard splashed splasher splashiness splashing splashingly splashproof splashy splat splatch splatcher splatchy splathering splatter splatterdash splatterdock splatterer splatterfaced splatterwork splay splayed splayer splayfoot splayfooted splaymouth splaymouthed spleen spleenful spleenfully spleenish spleenishly spleenishness spleenless spleenwort spleeny spleet spleetnew splenadenoma splenalgia splenalgic splenalgy splenatrophia splenatrophy splenauxe splenculus splendacious splendaciously splendaciousness splendent splendently splender splendescent splendid splendidly splendidness splendiferous splendiferously splendiferousness splendor splendorous splendorproof splendourproof splenectama splenectasis splenectomist splenectomize splenectomy splenectopia splenectopy splenelcosis splenemia splenemphraxis spleneolus splenepatitis splenetic splenetical splenetically splenetive splenial splenic splenical splenicterus splenification spleniform splenitis splenitive splenium splenius splenization splenoblast splenocele splenoceratosis splenocleisis splenocolic splenocyte splenodiagnosis splenodynia splenography splenohemia splenoid splenolaparotomy splenology splenolymph splenolymphatic splenolysin splenolysis splenoma splenomalacia splenomedullary splenomegalia splenomegalic splenomegaly splenomyelogenous splenoncus splenonephric splenopancreatic splenoparectama splenoparectasis splenopathy splenopexia splenopexis splenopexy splenophrenic splenopneumonia splenoptosia splenoptosis splenorrhagia splenorrhaphy splenotomy splenotoxin splenotyphoid splenulus splenunculus splet spleuchan splice spliceable splicer splicing splinder spline splineway splint splintage splinter splinterd splinterless splinternew splinterproof splintery splintwood splinty split splitbeak splitfinger splitfruit splitmouth splitnew splitsaw splittail splitten splitter splitting splitworm splodge splodgy splore splosh splotch splotchily splotchiness splotchy splother splunge splurge splurgily splurgy splurt spluther splutter splutterer spoach spode spodiosite spodium spodogenic spodogenous spodomancy spodomantic spodumene spoffish spoffle spoffy spogel spoil spoilable spoilage spoilation spoiled spoiler spoilfive spoilful spoiling spoilless spoilment spoilsman spoilsmonger spoilsport spoilt spoke spokeless spoken spokeshave spokesman spokesmanship spokester spokeswoman spokeswomanship spokewise spoky spole spolia spoliarium spoliary spoliate spoliation spoliator spoliatory spolium spondaic spondaical spondaize spondean spondee spondiac spondulics spondyl spondylalgia spondylarthritis spondylarthrocace spondylexarthrosis spondylic spondylid spondylioid spondylitic spondylitis spondylium spondylizema spondylocace spondylodiagnosis spondylodidymia spondylodymus spondyloid spondylolisthesis spondylolisthetic spondylopathy spondylopyosis spondyloschisis spondylosis spondylosyndesis spondylotherapeutics spondylotherapist spondylotherapy spondylotomy spondylous spondylus spong sponge spongecake sponged spongeful spongeless spongelet spongelike spongeous spongeproof sponger spongewood spongian spongicolous spongiculture spongiferous spongiform spongillid spongilline spongily spongin sponginblast sponginblastic sponginess sponging spongingly spongioblast spongioblastoma spongiocyte spongiolin spongiopilin spongioplasm spongioplasmic spongiose spongiosity spongiousness spongiozoon spongoblast spongoblastic spongoid spongology spongophore spongy sponsal sponsalia sponsibility sponsible sponsing sponsion sponsional sponson sponsor sponsorial sponsorship sponspeck spontaneity spontaneous spontaneously spontaneousness spontoon spoof spoofer spoofery spoofish spook spookdom spookery spookily spookiness spookish spookism spookist spookological spookologist spookology spooky spool spooler spoolful spoollike spoolwood spoom spoon spoonbill spoondrift spooner spoonerism spooneyism spooneyly spooneyness spoonflower spoonful spoonhutch spoonily spooniness spooning spoonism spoonless spoonlike spoonmaker spoonmaking spoonways spoonwood spoony spoonyism spoor spoorer spoot spor sporabola sporaceous sporades sporadial sporadic sporadical sporadically sporadicalness sporadicity sporadism sporadosiderite sporal sporange sporangia sporangial sporangidium sporangiferous sporangiform sporangioid sporangiola sporangiole sporangiolum sporangiophore sporangiospore sporangite sporangium sporation spore spored sporeformer sporeforming sporeling sporicide sporid sporidesm sporidia sporidial sporidiferous sporidiole sporidiolum sporidium sporiferous sporification sporiparity sporiparous sporoblast sporocarp sporocarpium sporocyst sporocystic sporocystid sporocyte sporodochia sporodochium sporoduct sporogenesis sporogenic sporogenous sporogeny sporogone sporogonial sporogonic sporogonium sporogony sporoid sporologist sporomycosis sporont sporophore sporophoric sporophorous sporophydium sporophyll sporophyllary sporophyllum sporophyte sporophytic sporoplasm sporosac sporostegium sporostrote sporotrichosis sporotrichotic sporous sporozoal sporozoan sporozoic sporozoite sporozoon sporran sport sportability sportable sportance sporter sportful sportfully sportfulness sportily sportiness sporting sportingly sportive sportively sportiveness sportless sportling sportly sports sportsman sportsmanlike sportsmanliness sportsmanly sportsmanship sportsome sportswear sportswoman sportswomanly sportswomanship sportula sportulae sporty sporular sporulate sporulation sporule sporuliferous sporuloid sposh sposhy spot spotless spotlessly spotlessness spotlight spotlighter spotlike spotrump spotsman spottable spotted spottedly spottedness spotteldy spotter spottily spottiness spotting spottle spotty spoucher spousage spousal spousally spouse spousehood spouseless spousy spout spouter spoutiness spouting spoutless spoutlike spoutman spouty sprachle sprack sprackish sprackle sprackly sprackness sprad spraddle sprag spragger spraggly spraich sprain spraint spraints sprang sprangle sprangly sprank sprat spratter spratty sprauchle sprawl sprawler sprawling sprawlingly sprawly spray sprayboard sprayer sprayey sprayful sprayfully sprayless spraylike sprayproof spread spreadation spreadboard spreaded spreader spreadhead spreading spreadingly spreadingness spreadover spready spreaghery spreath spreckle spree spreeuw spreng sprent spret sprew sprewl spridhogue spried sprier spriest sprig sprigged sprigger spriggy sprightful sprightfully sprightfulness sprightlily sprightliness sprightly sprighty spriglet sprigtail spring springal springald springboard springbok springbuck springe springer springerle springfinger springfish springful springhaas springhalt springhead springhouse springily springiness springing springingly springle springless springlet springlike springly springmaker springmaking springtail springtide springtime springtrap springwood springworm springwort springwurzel springy sprink sprinkle sprinkled sprinkleproof sprinkler sprinklered sprinkling sprint sprinter sprit sprite spritehood spritsail sprittail sprittie spritty sproat sprocket sprod sprogue sproil sprong sprose sprottle sprout sproutage sprouter sproutful sprouting sproutland sproutling sprowsy spruce sprucely spruceness sprucery sprucification sprucify sprue spruer sprug spruiker spruit sprung sprunny sprunt spruntly spry spryly spryness spud spudder spuddle spuddy spuffle spug spuilyie spuilzie spuke spume spumescence spumescent spumiferous spumification spumiform spumone spumose spumous spumy spun spung spunk spunkie spunkily spunkiness spunkless spunky spunny spur spurflower spurgall spurge spurgewort spuriae spuriosity spurious spuriously spuriousness spurl spurless spurlet spurlike spurling spurmaker spurmoney spurn spurner spurnpoint spurnwater spurproof spurred spurrer spurrial spurrier spurrings spurrite spurry spurt spurter spurtive spurtively spurtle spurway spurwing spurwinged spurwort sput sputa sputative sputter sputterer sputtering sputteringly sputtery sputum sputumary sputumose sputumous spy spyboat spydom spyer spyfault spyglass spyhole spyism spyproof spyship spytower squab squabash squabasher squabbed squabbish squabble squabbler squabbling squabblingly squabbly squabby squacco squad squaddy squadrate squadrism squadron squadrone squadroned squail squailer squalene squalid squalidity squalidly squalidness squaliform squall squaller squallery squallish squally squalm squalodont squaloid squalor squam squama squamaceous squamae squamate squamated squamatine squamation squamatogranulous squamatotuberculate squame squamella squamellate squamelliferous squamelliform squameous squamiferous squamiform squamify squamigerous squamipennate squamipinnate squamocellular squamoepithelial squamoid squamomastoid squamoparietal squamopetrosal squamosa squamosal squamose squamosely squamoseness squamosis squamosity squamosodentated squamosoimbricated squamosomaxillary squamosoparietal squamosoradiate squamosotemporal squamosozygomatic squamosphenoid squamosphenoidal squamotemporal squamous squamously squamousness squamozygomatic squamula squamulae squamulate squamulation squamule squamuliform squamulose squander squanderer squanderingly squandermania squandermaniac squantum squarable square squareage squarecap squared squaredly squareface squareflipper squarehead squarelike squarely squareman squaremouth squareness squarer squaretail squarewise squaring squarish squarishly squark squarrose squarrosely squarrous squarrulose squarson squarsonry squary squash squashberry squasher squashily squashiness squashy squat squatarole squatina squatinid squatinoid squatly squatment squatmore squatness squattage squatted squatter squatterarchy squatterdom squatterproof squattily squattiness squatting squattingly squattish squattocracy squattocratic squatty squatwise squaw squawberry squawbush squawdom squawfish squawflower squawk squawker squawkie squawking squawkingly squawky squawroot squawweed squdge squdgy squeak squeaker squeakery squeakily squeakiness squeaking squeakingly squeaklet squeakproof squeaky squeakyish squeal squeald squealer squealing squeam squeamish squeamishly squeamishness squeamous squeamy squeege squeegee squeezability squeezable squeezableness squeezably squeeze squeezeman squeezer squeezing squeezingly squeezy squelch squelcher squelchily squelchiness squelching squelchingly squelchingness squelchy squench squencher squeteague squib squibber squibbery squibbish squiblet squibling squid squiddle squidge squidgereen squidgy squiffed squiffer squiffy squiggle squiggly squilgee squilgeer squilla squillagee squillery squillian squillid squilloid squimmidge squin squinance squinancy squinch squinny squinsy squint squinted squinter squinting squintingly squintingness squintly squintness squinty squirage squiralty squire squirearch squirearchal squirearchical squirearchy squiredom squireen squirehood squireless squirelet squirelike squireling squirely squireocracy squireship squiress squiret squirewise squirish squirism squirk squirm squirminess squirming squirmingly squirmy squirr squirrel squirrelfish squirrelian squirreline squirrelish squirrellike squirrelproof squirreltail squirt squirter squirtiness squirting squirtingly squirtish squirty squish squishy squit squitch squitchy squitter squoze squush squushy sraddha sramana sri sruti ssu st staab stab stabber stabbing stabbingly stabile stabilify stabilist stabilitate stability stabilization stabilizator stabilize stabilizer stable stableboy stableful stablekeeper stablelike stableman stableness stabler stablestand stableward stablewards stabling stablishment stably staboy stabproof stabulate stabulation stabwort staccato stacher stachydrin stachydrine stachyose stachys stachyuraceous stack stackage stackencloud stacker stackfreed stackful stackgarth stackhousiaceous stackless stackman stackstand stackyard stacte stactometer stadda staddle staddling stade stadholder stadholderate stadholdership stadhouse stadia stadic stadimeter stadiometer stadion stadium stafette staff staffed staffelite staffer staffless staffman stag stagbush stage stageability stageable stageableness stageably stagecoach stagecoaching stagecraft staged stagedom stagehand stagehouse stageland stagelike stageman stager stagery stagese stagewise stageworthy stagewright staggard staggart staggarth stagger staggerbush staggerer staggering staggeringly staggers staggerweed staggerwort staggery staggie staggy staghead staghorn staghound staghunt staghunter staghunting stagiary stagily staginess staging staglike stagmometer stagnance stagnancy stagnant stagnantly stagnantness stagnate stagnation stagnatory stagnature stagnicolous stagnize stagnum stagskin stagworm stagy staia staid staidly staidness stain stainability stainable stainableness stainably stainer stainful stainierite staining stainless stainlessly stainlessness stainproof staio stair stairbeak stairbuilder stairbuilding staircase staired stairhead stairless stairlike stairstep stairway stairwise stairwork stairy staith staithman staiver stake stakehead stakeholder stakemaster staker stakerope stalactic stalactical stalactiform stalactital stalactite stalactited stalactitic stalactitical stalactitically stalactitiform stalactitious stalagma stalagmite stalagmitic stalagmitical stalagmitically stalagmometer stalagmometric stalagmometry stale stalely stalemate staleness staling stalk stalkable stalked stalker stalkily stalkiness stalking stalkingly stalkless stalklet stalklike stalko stalky stall stallage stallar stallboard stallenger staller stallership stalling stallion stallionize stallman stallment stalwart stalwartism stalwartize stalwartly stalwartness stam stambha stambouline stamen stamened stamin stamina staminal staminate stamineal stamineous staminiferous staminigerous staminode staminodium staminody stammel stammer stammerer stammering stammeringly stammeringness stammerwort stamnos stamp stampable stampage stampedable stampede stampeder stampedingly stampee stamper stampery stamphead stamping stample stampless stampman stampsman stampweed stance stanch stanchable stanchel stancheled stancher stanchion stanchless stanchly stanchness stand standage standard standardbred standardizable standardization standardize standardized standardizer standardwise standee standel standelwelks standelwort stander standergrass standerwort standfast standing standish standoff standoffish standoffishness standout standpat standpatism standpatter standpipe standpoint standpost standstill stane stanechat stang stanhope stanine stanjen stank stankie stannane stannary stannate stannator stannel stanner stannery stannic stannide stanniferous stannite stanno stannotype stannous stannoxyl stannum stannyl stanza stanzaed stanzaic stanzaical stanzaically stanze stap stapedectomy stapedial stapediform stapediovestibular stapedius stapelia stapes staphisagria staphyle staphyleaceous staphylectomy staphyledema staphylematoma staphylic staphyline staphylinic staphylinid staphylinideous staphylion staphylitis staphyloangina staphylococcal staphylococci staphylococcic staphylococcus staphylodermatitis staphylodialysis staphyloedema staphylohemia staphylolysin staphyloma staphylomatic staphylomatous staphylomycosis staphyloncus staphyloplastic staphyloplasty staphyloptosia staphyloptosis staphyloraphic staphylorrhaphic staphylorrhaphy staphyloschisis staphylosis staphylotome staphylotomy staphylotoxin staple stapled stapler staplewise stapling star starblind starbloom starboard starbolins starbright starch starchboard starched starchedly starchedness starcher starchflower starchily starchiness starchless starchlike starchly starchmaker starchmaking starchman starchness starchroot starchworks starchwort starchy starcraft stardom stare staree starer starets starfish starflower starfruit starful stargaze stargazer stargazing staring staringly stark starken starkly starkness starky starless starlessly starlessness starlet starlight starlighted starlights starlike starling starlit starlite starlitten starmonger starn starnel starnie starnose starost starosta starosty starred starrily starriness starring starringly starry starshake starshine starship starshoot starshot starstone starstroke start starter startful startfulness starthroat starting startingly startish startle startler startling startlingly startlingness startlish startlishness startly startor starty starvation starve starveacre starved starvedly starveling starver starvy starward starwise starworm starwort stary stases stash stashie stasidion stasimetric stasimon stasimorphy stasiphobia stasis stassfurtite statable statal statant statcoulomb state statecraft stated statedly stateful statefully statefulness statehood stateless statelet statelich statelily stateliness stately statement statemonger statequake stater stateroom statesboy stateside statesider statesman statesmanese statesmanlike statesmanly statesmanship statesmonger stateswoman stateway statfarad stathmoi stathmos static statical statically staticproof statics station stational stationarily stationariness stationary stationer stationery stationman stationmaster statiscope statism statist statistic statistical statistically statistician statisticize statistics statistology stative statoblast statocracy statocyst statolatry statolith statolithic statometer stator statoreceptor statorhab statoscope statospore statuarism statuarist statuary statue statuecraft statued statueless statuelike statuesque statuesquely statuesqueness statuette stature statured status statutable statutableness statutably statutary statute statutorily statutory statvolt staucher stauk staumer staun staunch staunchable staunchly staunchness staup stauracin stauraxonia stauraxonial staurion staurolatry staurolite staurolitic staurology stauromedusan stauropegial stauropegion stauroscope stauroscopic stauroscopically staurotide stauter stave staveable staveless staver stavers staverwort stavesacre stavewise stavewood staving stavrite staw stawn staxis stay stayable stayed stayer staylace stayless staylessness staymaker staymaking staynil stays staysail stayship stchi stead steadfast steadfastly steadfastness steadier steadily steadiment steadiness steading steadman steady steadying steadyingly steadyish steak steal stealability stealable stealage stealed stealer stealing stealingly stealth stealthful stealthfully stealthily stealthiness stealthless stealthlike stealthwise stealthy stealy steam steamboat steamboating steamboatman steamcar steamer steamerful steamerless steamerload steamily steaminess steaming steamless steamlike steampipe steamproof steamship steamtight steamtightness steamy stean steaning steapsin stearate stearic steariform stearin stearolactone stearone stearoptene stearrhea stearyl steatin steatite steatitic steatocele steatogenous steatolysis steatolytic steatoma steatomatous steatopathic steatopyga steatopygia steatopygic steatopygous steatorrhea steatosis stech stechados steckling steddle steed steedless steedlike steek steekkan steekkannen steel steeler steelhead steelhearted steelification steelify steeliness steeling steelless steellike steelmaker steelmaking steelproof steelware steelwork steelworker steelworks steely steelyard steen steenboc steenbock steenbok steenkirk steenstrupine steenth steep steepdown steepen steeper steepgrass steepish steeple steeplebush steeplechase steeplechaser steeplechasing steepled steepleless steeplelike steepletop steeply steepness steepweed steepwort steepy steer steerability steerable steerage steerageway steerer steering steeringly steerling steerman steermanship steersman steerswoman steeve steevely steever steeving steg steganogram steganographical steganographist steganography steganophthalmate steganophthalmatous steganopod steganopodan steganopodous stegnosis stegnotic stegocarpous stegocephalian stegocephalous stegodont stegodontine stegosaur stegosaurian stegosauroid steid steigh stein steinbok steinful steinkirk stekan stela stelae stelai stelar stele stell stella stellar stellary stellate stellated stellately stellature stelleridean stellerine stelliferous stellification stelliform stellify stelling stellionate stelliscript stellite stellular stellularly stellulate stelography stem stema stemhead stemless stemlet stemlike stemma stemmata stemmatiform stemmatous stemmed stemmer stemmery stemming stemmy stemonaceous stemple stempost stemson stemwards stemware sten stenar stench stenchel stenchful stenching stenchion stenchy stencil stenciler stencilmaker stencilmaking stend steng stengah stenion steno stenobathic stenobenthic stenobragmatic stenobregma stenocardia stenocardiac stenocephalia stenocephalic stenocephalous stenocephaly stenochoria stenochrome stenochromy stenocoriasis stenocranial stenocrotaphia stenog stenogastric stenogastry stenograph stenographer stenographic stenographical stenographically stenographist stenography stenohaline stenometer stenopaic stenopetalous stenophile stenophyllous stenorhyncous stenosed stenosepalous stenosis stenosphere stenostomatous stenostomia stenotelegraphy stenothermal stenothorax stenotic stenotype stenotypic stenotypist stenotypy stent stenter stenterer stenton stentorian stentorianly stentorine stentorious stentoriously stentoriousness stentoronic stentorophonic stentrel step stepaunt stepbairn stepbrother stepbrotherhood stepchild stepdame stepdaughter stepfather stepfatherhood stepfatherly stepgrandchild stepgrandfather stepgrandmother stepgrandson stephane stephanial stephanic stephanion stephanite stephanome stephanos stephanotis stepladder stepless steplike stepminnie stepmother stepmotherhood stepmotherless stepmotherliness stepmotherly stepnephew stepniece stepparent steppe stepped steppeland stepper stepping steppingstone steprelation steprelationship stepsire stepsister stepson stepstone stept stepuncle stepway stepwise steradian stercobilin stercolin stercophagic stercophagous stercoraceous stercoral stercorarious stercorary stercorate stercoration stercorean stercoremia stercoreous stercoricolous stercorite stercorol stercorous stercovorous sterculiaceous sterculiad stere stereagnosis sterelminthic sterelminthous stereo stereobate stereobatic stereoblastula stereocamera stereocampimeter stereochemic stereochemical stereochemically stereochemistry stereochromatic stereochromatically stereochrome stereochromic stereochromically stereochromy stereocomparagraph stereocomparator stereoelectric stereofluoroscopic stereofluoroscopy stereogastrula stereognosis stereognostic stereogoniometer stereogram stereograph stereographer stereographic stereographical stereographically stereography stereoisomer stereoisomeric stereoisomerical stereoisomeride stereoisomerism stereomatrix stereome stereomer stereomeric stereomerical stereomerism stereometer stereometric stereometrical stereometrically stereometry stereomicrometer stereomonoscope stereoneural stereophantascope stereophonic stereophony stereophotogrammetry stereophotograph stereophotographic stereophotography stereophotomicrograph stereophotomicrography stereophysics stereopicture stereoplanigraph stereoplanula stereoplasm stereoplasma stereoplasmic stereopsis stereoptician stereopticon stereoradiograph stereoradiography stereornithic stereoroentgenogram stereoroentgenography stereoscope stereoscopic stereoscopically stereoscopism stereoscopist stereoscopy stereospondylous stereostatic stereostatics stereotactic stereotactically stereotaxis stereotelemeter stereotelescope stereotomic stereotomical stereotomist stereotomy stereotropic stereotropism stereotypable stereotype stereotyped stereotyper stereotypery stereotypic stereotypical stereotyping stereotypist stereotypographer stereotypography stereotypy sterhydraulic steri steric sterically sterics steride sterigma sterigmata sterigmatic sterile sterilely sterileness sterilisable sterility sterilizability sterilizable sterilization sterilize sterilizer sterin sterk sterlet sterling sterlingly sterlingness stern sterna sternad sternage sternal sternalis sternbergite sterncastle sterneber sternebra sternebrae sternebral sterned sternforemost sternite sternitic sternly sternman sternmost sternness sternoclavicular sternocleidomastoid sternoclidomastoid sternocoracoid sternocostal sternofacial sternofacialis sternoglossal sternohumeral sternohyoid sternohyoidean sternomancy sternomastoid sternomaxillary sternonuchal sternopericardiac sternopericardial sternoscapular sternothere sternothyroid sternotracheal sternotribe sternovertebral sternoxiphoid sternpost sternson sternum sternutation sternutative sternutator sternutatory sternward sternway sternways sternworks stero steroid sterol sterrinck stert stertor stertorious stertoriously stertoriousness stertorous stertorously stertorousness sterve stet stetch stetharteritis stethogoniometer stethograph stethographic stethokyrtograph stethometer stethometric stethometry stethoparalysis stethophone stethophonometer stethoscope stethoscopic stethoscopical stethoscopically stethoscopist stethoscopy stethospasm stevedorage stevedore stevedoring stevel steven stevia stew stewable steward stewardess stewardly stewardry stewardship stewartry stewarty stewed stewpan stewpond stewpot stewy stey sthenia sthenic sthenochire stib stibbler stibblerig stibethyl stibial stibialism stibiate stibiated stibic stibiconite stibine stibious stibium stibnite stibonium sticcado stich sticharion sticheron stichic stichically stichid stichidium stichomancy stichometric stichometrical stichometrically stichometry stichomythic stichomythy stick stickability stickable stickadore stickadove stickage stickball sticked sticker stickers stickfast stickful stickily stickiness sticking stickit stickle stickleaf stickleback stickler stickless sticklike stickling stickly stickpin sticks stickseed sticksmanship sticktail sticktight stickum stickwater stickweed stickwork sticky stictiform stid stiddy stife stiff stiffen stiffener stiffening stiffhearted stiffish stiffleg stifflike stiffly stiffneck stiffness stiffrump stifftail stifle stifledly stifler stifling stiflingly stigma stigmai stigmal stigmaria stigmarian stigmarioid stigmasterol stigmata stigmatal stigmatic stigmatical stigmatically stigmaticalness stigmatiferous stigmatiform stigmatism stigmatist stigmatization stigmatize stigmatizer stigmatoid stigmatose stigme stigmeology stigmonose stigonomancy stilbene stilbestrol stilbite stilboestrol stile stileman stilet stiletto stilettolike still stillage stillatitious stillatory stillbirth stillborn stiller stillhouse stillicide stillicidium stilliform stilling stillion stillish stillman stillness stillroom stillstand stilly stilpnomelane stilpnosiderite stilt stiltbird stilted stilter stiltify stiltiness stiltish stiltlike stilty stim stime stimpart stimpert stimulability stimulable stimulance stimulancy stimulant stimulate stimulatingly stimulation stimulative stimulator stimulatory stimulatress stimulatrix stimuli stimulogenous stimulus stimy stine sting stingaree stingareeing stingbull stinge stinger stingfish stingily stinginess stinging stingingly stingingness stingless stingo stingproof stingray stingtail stingy stink stinkard stinkardly stinkball stinkberry stinkbird stinkbug stinkbush stinkdamp stinker stinkhorn stinking stinkingly stinkingness stinkpot stinkstone stinkweed stinkwood stinkwort stint stinted stintedly stintedness stinter stintingly stintless stinty stion stionic stipe stiped stipel stipellate stipend stipendial stipendiarian stipendiary stipendiate stipendium stipendless stipes stipiform stipitate stipitiform stipiture stippen stipple stippled stippler stippling stipply stipula stipulable stipulaceous stipulae stipular stipulary stipulate stipulation stipulator stipulatory stipule stipuled stipuliferous stipuliform stir stirabout stirk stirless stirlessly stirlessness stirp stirpicultural stirpiculture stirpiculturist stirps stirra stirrable stirrage stirrer stirring stirringly stirrup stirrupless stirruplike stirrupwise stitch stitchbird stitchdown stitcher stitchery stitching stitchlike stitchwhile stitchwork stitchwort stite stith stithy stive stiver stivy stoa stoach stoat stoater stob stocah stoccado stoccata stochastic stochastical stochastically stock stockade stockannet stockbow stockbreeder stockbreeding stockbroker stockbrokerage stockbroking stockcar stocker stockfather stockfish stockholder stockholding stockhouse stockily stockiness stockinet stocking stockinger stockingless stockish stockishly stockishness stockjobber stockjobbery stockjobbing stockjudging stockkeeper stockkeeping stockless stocklike stockmaker stockmaking stockman stockowner stockpile stockpot stockproof stockrider stockriding stocks stockstone stocktaker stocktaking stockwork stockwright stocky stockyard stod stodge stodger stodgery stodgily stodginess stodgy stoechas stoep stof stoff stog stoga stogie stogy stoic stoical stoically stoicalness stoicharion stoichiological stoichiology stoichiometric stoichiometrical stoichiometrically stoichiometry stoicism stoke stokehold stokehole stoker stokerless stokesite stola stolae stole stoled stolelike stolen stolenly stolenness stolenwise stolewise stolid stolidity stolidly stolidness stolist stolkjaerre stollen stolon stolonate stoloniferous stoloniferously stolonlike stolzite stoma stomacace stomach stomachable stomachal stomacher stomachful stomachfully stomachfulness stomachic stomachically stomachicness stomaching stomachless stomachlessness stomachy stomapod stomapodiform stomapodous stomata stomatal stomatalgia stomate stomatic stomatiferous stomatitic stomatitis stomatocace stomatodaeal stomatodaeum stomatode stomatodeum stomatodynia stomatogastric stomatograph stomatography stomatolalia stomatologic stomatological stomatologist stomatology stomatomalacia stomatomenia stomatomy stomatomycosis stomatonecrosis stomatopathy stomatophorous stomatoplastic stomatoplasty stomatopod stomatopodous stomatorrhagia stomatoscope stomatoscopy stomatose stomatosepsis stomatotomy stomatotyphus stomatous stomenorrhagia stomium stomodaea stomodaeal stomodaeum stomoxys stomp stomper stonable stond stone stoneable stonebird stonebiter stoneboat stonebow stonebrash stonebreak stonebrood stonecast stonechat stonecraft stonecrop stonecutter stoned stonedamp stonefish stonegale stonegall stonehand stonehatch stonehead stonehearted stonelayer stonelaying stoneless stonelessness stonelike stoneman stonemason stonemasonry stonen stonepecker stoner stoneroot stoneseed stoneshot stonesmatch stonesmich stonesmitch stonesmith stonewall stonewaller stonewally stoneware stoneweed stonewise stonewood stonework stoneworker stonewort stoneyard stong stonied stonifiable stonify stonily stoniness stoning stonish stonishment stonker stony stonyhearted stonyheartedly stonyheartedness stood stooded stooden stoof stooge stook stooker stookie stool stoolball stoollike stoon stoond stoop stooper stoopgallant stooping stoopingly stoory stoot stoothing stop stopa stopback stopblock stopboard stopcock stope stoper stopgap stophound stoping stopless stoplessness stopover stoppability stoppable stoppableness stoppably stoppage stopped stopper stopperless stoppeur stopping stoppit stopple stopwater stopwork storable storage storax store storeen storehouse storehouseman storekeep storekeeper storekeeping storeman storer storeroom storeship storesman storge storiate storiation storied storier storiette storify storiological storiologist storiology stork storken storkish storklike storkling storkwise storm stormable stormbird stormbound stormcock stormer stormful stormfully stormfulness stormily storminess storming stormingly stormish stormless stormlessness stormlike stormproof stormward stormwind stormwise stormy story storybook storyless storymaker storymonger storyteller storytelling storywise storywork stosh stoss stosston stot stotinka stotter stotterel stoun stound stoundmeal stoup stoupful stour stouring stourliness stourness stoury stoush stout stouten stouth stouthearted stoutheartedly stoutheartedness stoutish stoutly stoutness stoutwood stouty stove stovebrush stoveful stovehouse stoveless stovemaker stovemaking stoveman stoven stovepipe stover stovewood stow stowable stowage stowaway stowbord stowbordman stowce stowdown stower stowing stownlins stowwood stra strabism strabismal strabismally strabismic strabismical strabismometer strabismometry strabismus strabometer strabometry strabotome strabotomy strack strackling stract strad stradametrical straddle straddleback straddlebug straddler straddleways straddlewise straddling straddlingly strade stradine stradiot stradl stradld stradlings strae strafe strafer strag straggle straggler straggling stragglingly straggly stragular stragulum straight straightabout straightaway straightedge straighten straightener straightforward straightforwardly straightforwardness straightforwards straighthead straightish straightly straightness straighttail straightup straightwards straightway straightways straightwise straik strain strainable strainableness strainably strained strainedly strainedness strainer strainerman straining strainingly strainless strainlessly strainproof strainslip straint strait straiten straitlacedness straitlacing straitly straitness straitsman straitwork strake straked straky stram stramash stramazon stramineous stramineously strammel strammer stramonium stramony stramp strand strandage strander stranding strandless strandward strang strange strangeling strangely strangeness stranger strangerdom strangerhood strangerlike strangership strangerwise strangle strangleable stranglement strangler strangles strangletare strangleweed strangling stranglingly strangulable strangulate strangulation strangulative strangulatory strangullion strangurious strangury stranner strany strap straphang straphanger straphead strapless straplike strappable strappado strappan strapped strapper strapping strapple strapwork strapwort strass strata stratagem stratagematic stratagematical stratagematically stratagematist stratagemical stratagemically stratal stratameter stratege strategetic strategetics strategi strategian strategic strategical strategically strategics strategist strategize strategos strategy strath strathspey strati stratic straticulate straticulation stratification stratified stratiform stratify stratigrapher stratigraphic stratigraphical stratigraphically stratigraphist stratigraphy stratlin stratochamber stratocracy stratocrat stratocratic stratographic stratographical stratographically stratography stratonic stratopedarch stratoplane stratose stratosphere stratospheric stratospherical stratotrainer stratous stratum stratus straucht strauchten stravage strave straw strawberry strawberrylike strawbill strawboard strawbreadth strawen strawer strawflower strawfork strawless strawlike strawman strawmote strawsmall strawsmear strawstack strawstacker strawwalker strawwork strawworm strawy strawyard stray strayaway strayer strayling stre streahte streak streaked streakedly streakedness streaker streakily streakiness streaklike streakwise streaky stream streamer streamful streamhead streaminess streaming streamingly streamless streamlet streamlike streamline streamlined streamliner streamling streamside streamward streamway streamwort streamy streck streckly stree streek streel streeler streen streep street streetage streetcar streetful streetless streetlet streetlike streets streetside streetwalker streetwalking streetward streetway streetwise streite streke strelitzi streltzi stremma stremmatograph streng strengite strength strengthen strengthener strengthening strengtheningly strengthful strengthfulness strengthily strengthless strengthlessly strengthlessness strengthy strent strenth strenuity strenuosity strenuous strenuously strenuousness strepen strepent strepera streperous strephonade strephosymbolia strepitant strepitantly strepitation strepitous strepor strepsiceros strepsinema strepsipteral strepsipteran strepsipteron strepsipterous strepsis strepsitene streptaster streptobacilli streptobacillus streptococcal streptococci streptococcic streptococcus streptolysin streptomycin streptoneural streptoneurous streptosepticemia streptothricial streptothricin streptothricosis streptotrichal streptotrichosis stress stresser stressful stressfully stressless stresslessness stret stretch stretchable stretchberry stretcher stretcherman stretchiness stretchneck stretchproof stretchy stretman strette stretti stretto strew strewage strewer strewment strewn strey streyne stria striae strial striatal striate striated striation striatum striature strich striche strick stricken strickenly strickenness stricker strickle strickler strickless strict striction strictish strictly strictness stricture strictured strid stridden striddle stride strideleg stridelegs stridence stridency strident stridently strider strideways stridhan stridhana stridhanum stridingly stridling stridlins stridor stridulant stridulate stridulation stridulator stridulatory stridulent stridulous stridulously stridulousness strife strifeful strifeless strifemaker strifemaking strifemonger strifeproof striffen strig striga strigae strigal strigate striggle stright strigil strigilate strigilation strigilator strigiles strigilis strigillose strigilous strigine strigose strigous strigovite strigulose strike strikeboat strikebreaker strikebreaking strikeless striker striking strikingly strikingness strind string stringboard stringcourse stringed stringency stringene stringent stringently stringentness stringer stringful stringhalt stringhalted stringhaltedness stringiness stringing stringless stringlike stringmaker stringmaking stringman stringpiece stringsman stringways stringwood stringy stringybark strinkle striola striolae striolate striolated striolet strip stripe striped stripeless striper striplet stripling strippage stripped stripper stripping strippit strippler stript stripy strit strive strived striven striver striving strivingly strix stroam strobic strobila strobilaceous strobilae strobilate strobilation strobile strobili strobiliferous strobiliform strobiline strobilization strobiloid strobilus stroboscope stroboscopic stroboscopical stroboscopy strobotron strockle stroddle strode stroil stroke stroker strokesman stroking stroky strold stroll strolld stroller strom stroma stromal stromata stromateoid stromatic stromatiform stromatology stromatoporoid stromatous stromb strombiform strombite stromboid strombolian strombuliferous strombuliform strome stromeyerite stromming strone strong strongback strongbark strongbox strongbrained strongfully stronghand stronghead strongheadedly strongheadedness stronghearted stronghold strongish stronglike strongly strongness strongylate strongyle strongyliasis strongylid strongylidosis strongyloid strongyloidosis strongylon strongylosis strontia strontian strontianiferous strontianite strontic strontion strontitic strontium strook strooken stroot strop strophaic strophanhin strophe strophic strophical strophically strophiolate strophiolated strophiole strophoid strophomenid strophomenoid strophosis strophotaxis strophulus stropper stroppings stroth stroud strouding strounge stroup strouthiocamel strouthiocamelian strouthocamelian strove strow strowd strown stroy stroyer stroygood strub strubbly struck strucken structural structuralism structuralist structuralization structuralize structurally structuration structure structured structureless structurely structurist strudel strue struggle struggler struggling strugglingly strum struma strumae strumatic strumaticness strumectomy strumiferous strumiform strumiprivic strumiprivous strumitis strummer strumose strumous strumousness strumpet strumpetlike strumpetry strumstrum strumulose strung strunt strut struth struthian struthiform struthioid struthioniform struthious struthonine strutter strutting struttingly struv struvite strych strychnia strychnic strychnin strychnine strychninic strychninism strychninization strychninize strychnize strychnol stub stubachite stubb stubbed stubbedness stubber stubbiness stubble stubbleberry stubbled stubbleward stubbly stubborn stubbornhearted stubbornly stubbornness stubboy stubby stubchen stuber stuboy stubrunner stucco stuccoer stuccowork stuccoworker stuccoyer stuck stuckling stucturelessness stud studbook studder studdie studding studdle stude student studenthood studentless studentlike studentry studentship studerite studfish studflower studhorse studia studiable studied studiedly studiedness studier studio studious studiously studiousness studium studwork study stue stuff stuffed stuffender stuffer stuffgownsman stuffily stuffiness stuffing stuffy stug stuggy stuiver stull stuller stulm stultification stultifier stultify stultiloquence stultiloquently stultiloquious stultioquy stultloquent stum stumble stumbler stumbling stumblingly stumbly stumer stummer stummy stump stumpage stumper stumpily stumpiness stumpish stumpless stumplike stumpling stumpnose stumpwise stumpy stun stung stunk stunkard stunner stunning stunningly stunpoll stunsail stunsle stunt stunted stuntedly stuntedness stunter stuntiness stuntness stunty stupa stupe stupefacient stupefaction stupefactive stupefactiveness stupefied stupefiedness stupefier stupefy stupend stupendly stupendous stupendously stupendousness stupent stupeous stupex stupid stupidhead stupidish stupidity stupidly stupidness stupor stuporific stuporose stuporous stupose stupp stuprate stupration stuprum stupulose sturdied sturdily sturdiness sturdy sturdyhearted sturgeon sturine sturionine sturk sturniform sturnine sturnoid sturt sturtan sturtin sturtion sturtite stuss stut stutter stutterer stuttering stutteringly sty styan styca styceric stycerin stycerinol stychomythia styful styfziekte stylar stylate style stylebook styledom styleless stylelessness stylelike styler stylet stylewort stylidiaceous styliferous styliform styline styling stylish stylishly stylishness stylist stylistic stylistical stylistically stylistics stylite stylitic stylitism stylization stylize stylizer stylo styloauricularis stylobate styloglossal styloglossus stylogonidium stylograph stylographic stylographical stylographically stylography stylohyal stylohyoid stylohyoidean stylohyoideus styloid stylolite stylolitic stylomandibular stylomastoid stylomaxillary stylometer stylommatophorous stylomyloid stylopharyngeal stylopharyngeus stylopid stylopization stylopized stylopod stylopodium stylops stylospore stylosporous stylostegium stylotypite stylus stymie styphnate styphnic stypsis styptic styptical stypticalness stypticity stypticness styracaceous styracin styrax styrene styrogallol styrol styrolene styrone styryl styrylic stythe styward suability suable suably suade suaharo suant suantly suasible suasion suasionist suasive suasively suasiveness suasory suavastika suave suavely suaveness suaveolent suavify suaviloquence suaviloquent suavity sub subabbot subabdominal subability subabsolute subacademic subaccount subacetate subacid subacidity subacidly subacidness subacidulous subacrid subacrodrome subacromial subact subacuminate subacute subacutely subadditive subadjacent subadjutor subadministrate subadministration subadministrator subadult subaduncate subaerate subaeration subaerial subaerially subaetheric subaffluent subage subagency subagent subaggregate subah subahdar subahdary subahship subaid subalary subalate subalgebra subalkaline suballiance subalmoner subalpine subaltern subalternant subalternate subalternately subalternating subalternation subalternity subanal subandean subangled subangular subangulate subangulated subanniversary subantarctic subantichrist subantique subapical subaponeurotic subapostolic subapparent subappearance subappressed subapprobation subapterous subaquatic subaquean subaqueous subarachnoid subarachnoidal subarachnoidean subarboraceous subarboreal subarborescent subarch subarchesporial subarchitect subarctic subarcuate subarcuated subarcuation subarea subareolar subareolet subarmor subarouse subarrhation subartesian subarticle subarytenoid subascending subassemblage subassembly subassociation subastragalar subastragaloid subastral subastringent subatom subatomic subattenuate subattenuated subattorney subaud subaudible subaudition subauditionist subauditor subauditur subaural subauricular subautomatic subaverage subaxillar subaxillary subbailie subbailiff subbailiwick subballast subband subbank subbasal subbasaltic subbase subbasement subbass subbeadle subbeau subbias subbifid subbing subbituminous subbookkeeper subboreal subbourdon subbrachycephalic subbrachycephaly subbrachyskelic subbranch subbranched subbranchial subbreed subbrigade subbrigadier subbroker subbromid subbromide subbronchial subbureau subcaecal subcalcareous subcalcarine subcaliber subcallosal subcampanulate subcancellate subcandid subcantor subcapsular subcaptain subcaption subcarbide subcarbonate subcarbureted subcarburetted subcardinal subcarinate subcartilaginous subcase subcash subcashier subcasino subcast subcaste subcategory subcaudal subcaudate subcaulescent subcause subcavate subcavity subcelestial subcell subcellar subcenter subcentral subcentrally subchairman subchamberer subchancel subchanter subchapter subchaser subchela subchelate subcheliform subchief subchloride subchondral subchordal subchorioid subchorioidal subchorionic subchoroid subchoroidal subcinctorium subcineritious subcingulum subcircuit subcircular subcision subcity subclaim subclan subclass subclassify subclause subclavate subclavia subclavian subclavicular subclavioaxillary subclaviojugular subclavius subclerk subclimate subclimax subclinical subclover subcoastal subcollateral subcollector subcollegiate subcolumnar subcommander subcommendation subcommended subcommissary subcommissaryship subcommission subcommissioner subcommit subcommittee subcompany subcompensate subcompensation subcompressed subconcave subconcession subconcessionaire subconchoidal subconference subconformable subconical subconjunctival subconjunctively subconnate subconnect subconnivent subconscience subconscious subconsciously subconsciousness subconservator subconsideration subconstable subconstellation subconsul subcontained subcontest subcontiguous subcontinent subcontinental subcontinual subcontinued subcontinuous subcontract subcontracted subcontractor subcontraoctave subcontrariety subcontrarily subcontrary subcontrol subconvex subconvolute subcool subcoracoid subcordate subcordiform subcoriaceous subcorneous subcorporation subcortex subcortical subcortically subcorymbose subcosta subcostal subcostalis subcouncil subcranial subcreative subcreek subcrenate subcrepitant subcrepitation subcrescentic subcrest subcriminal subcrossing subcrureal subcrureus subcrust subcrustaceous subcrustal subcrystalline subcubical subcuboidal subcultrate subcultural subculture subcurate subcurator subcuratorship subcurrent subcutaneous subcutaneously subcutaneousness subcuticular subcutis subcyaneous subcyanide subcylindric subcylindrical subdatary subdate subdeacon subdeaconate subdeaconess subdeaconry subdeaconship subdealer subdean subdeanery subdeb subdebutante subdecanal subdecimal subdecuple subdeducible subdefinition subdelegate subdelegation subdelirium subdeltaic subdeltoid subdeltoidal subdemonstrate subdemonstration subdenomination subdentate subdentated subdented subdenticulate subdepartment subdeposit subdepository subdepot subdepressed subdeputy subderivative subdermal subdeterminant subdevil subdiaconal subdiaconate subdial subdialect subdialectal subdialectally subdiapason subdiapente subdiaphragmatic subdichotomize subdichotomous subdichotomously subdichotomy subdie subdilated subdirector subdiscoidal subdisjunctive subdistich subdistichous subdistinction subdistinguish subdistinguished subdistrict subdititious subdititiously subdivecious subdiversify subdividable subdivide subdivider subdividing subdividingly subdivine subdivisible subdivision subdivisional subdivisive subdoctor subdolent subdolichocephalic subdolichocephaly subdolous subdolously subdolousness subdominant subdorsal subdorsally subdouble subdrain subdrainage subdrill subdruid subduable subduableness subduably subdual subduce subduct subduction subdue subdued subduedly subduedness subduement subduer subduing subduingly subduple subduplicate subdural subdurally subecho subectodermal subedit subeditor subeditorial subeditorship subeffective subelection subelectron subelement subelementary subelliptic subelliptical subelongate subemarginate subencephalon subencephaltic subendocardial subendorse subendorsement subendothelial subendymal subenfeoff subengineer subentire subentitle subentry subepidermal subepiglottic subepithelial subepoch subequal subequality subequally subequatorial subequilateral subequivalve suber suberane suberate suberect subereous suberic suberiferous suberification suberiform suberin suberinization suberinize suberization suberize suberone suberose suberous subescheator subesophageal subessential subetheric subexaminer subexcitation subexcite subexecutor subexternal subface subfacies subfactor subfactorial subfactory subfalcate subfalcial subfalciform subfamily subfascial subfastigiate subfebrile subferryman subfestive subfeu subfeudation subfeudatory subfibrous subfief subfigure subfissure subfix subflavor subflexuose subfloor subflooring subflora subflush subfluvial subfocal subfoliar subforeman subform subformation subfossil subfossorial subfoundation subfraction subframe subfreshman subfrontal subfulgent subfumigation subfumose subfunctional subfusc subfuscous subfusiform subfusk subgalea subgallate subganger subgape subgelatinous subgeneric subgenerical subgenerically subgeniculate subgenital subgens subgenual subgenus subgeometric subget subgit subglabrous subglacial subglacially subglenoid subglobose subglobosely subglobular subglobulose subglossal subglossitis subglottic subglumaceous subgod subgoverness subgovernor subgrade subgranular subgrin subgroup subgular subgwely subgyre subgyrus subhalid subhalide subhall subharmonic subhastation subhatchery subhead subheading subheadquarters subheadwaiter subhealth subhedral subhemispherical subhepatic subherd subhero subhexagonal subhirsute subhooked subhorizontal subhornblendic subhouse subhuman subhumid subhyaline subhyaloid subhymenial subhymenium subhyoid subhyoidean subhypothesis subhysteria subicle subicteric subicular subiculum subidar subidea subideal subimaginal subimago subimbricate subimbricated subimposed subimpressed subincandescent subincident subincise subincision subincomplete subindex subindicate subindication subindicative subindices subindividual subinduce subinfer subinfeud subinfeudate subinfeudation subinfeudatory subinflammation subinflammatory subinform subingression subinguinal subinitial subinoculate subinoculation subinsert subinsertion subinspector subinspectorship subintegumental subintellection subintelligential subintelligitur subintent subintention subintercessor subinternal subinterval subintestinal subintroduce subintroduction subintroductory subinvoluted subinvolution subiodide subirrigate subirrigation subitane subitaneous subitem subjacency subjacent subjacently subjack subject subjectability subjectable subjectdom subjected subjectedly subjectedness subjecthood subjectibility subjectible subjectification subjectify subjectile subjection subjectional subjectist subjective subjectively subjectiveness subjectivism subjectivist subjectivistic subjectivistically subjectivity subjectivize subjectivoidealistic subjectless subjectlike subjectness subjectship subjee subjicible subjoin subjoinder subjoint subjudge subjudiciary subjugable subjugal subjugate subjugation subjugator subjugular subjunct subjunction subjunctive subjunctively subjunior subking subkingdom sublabial sublaciniate sublacustrine sublanate sublanceolate sublanguage sublapsarian sublapsarianism sublapsary sublaryngeal sublate sublateral sublation sublative subleader sublease sublecturer sublegislation sublegislature sublenticular sublessee sublessor sublet sublethal sublettable subletter sublevaminous sublevate sublevation sublevel sublibrarian sublicense sublicensee sublid sublieutenancy sublieutenant subligation sublighted sublimable sublimableness sublimant sublimate sublimation sublimational sublimationist sublimator sublimatory sublime sublimed sublimely sublimeness sublimer subliminal subliminally sublimish sublimitation sublimity sublimize sublinear sublineation sublingua sublinguae sublingual sublinguate sublittoral sublobular sublong subloral subloreal sublot sublumbar sublunar sublunary sublunate sublustrous subluxate subluxation submaid submain submakroskelic submammary subman submanager submania submanic submanor submarginal submarginally submarginate submargined submarine submariner submarinism submarinist submarshal submaster submaxilla submaxillary submaximal submeaning submedial submedian submediant submediation submediocre submeeting submember submembranaceous submembranous submeningeal submental submentum submerge submerged submergement submergence submergibility submergible submerse submersed submersibility submersible submersion submetallic submeter submetering submicron submicroscopic submicroscopically submiliary submind subminimal subminister submiss submissible submission submissionist submissive submissively submissiveness submissly submissness submit submittal submittance submitter submittingly submolecule submonition submontagne submontane submontanely submontaneous submorphous submortgage submotive submountain submucosa submucosal submucous submucronate submultiple submundane submuriate submuscular subnarcotic subnasal subnascent subnatural subnect subnervian subness subneural subnex subnitrate subnitrated subniveal subnivean subnormal subnormality subnotation subnote subnotochordal subnubilar subnucleus subnude subnumber subnuvolar suboblique subobscure subobscurely subobtuse suboccipital subocean suboceanic suboctave suboctile suboctuple subocular suboesophageal suboffice subofficer subofficial subolive subopaque subopercle subopercular suboperculum subopposite suboptic suboptimal suboptimum suboral suborbicular suborbiculate suborbiculated suborbital suborbitar suborbitary subordain suborder subordinacy subordinal subordinary subordinate subordinately subordinateness subordinating subordinatingly subordination subordinationism subordinationist subordinative suborganic suborn subornation subornative suborner suboval subovate subovated suboverseer subovoid suboxidation suboxide subpackage subpagoda subpallial subpalmate subpanel subparagraph subparallel subpart subpartition subpartitioned subpartitionment subparty subpass subpassage subpastor subpatron subpattern subpavement subpectinate subpectoral subpeduncle subpeduncular subpedunculate subpellucid subpeltate subpeltated subpentagonal subpentangular subpericardial subperiod subperiosteal subperiosteally subperitoneal subperitoneally subpermanent subpermanently subperpendicular subpetiolar subpetiolate subpharyngeal subphosphate subphratry subphrenic subphylar subphylum subpial subpilose subpimp subpiston subplacenta subplant subplantigrade subplat subpleural subplinth subplot subplow subpodophyllous subpoena subpoenal subpolar subpolygonal subpool subpopular subpopulation subporphyritic subport subpostmaster subpostmastership subpostscript subpotency subpotent subpreceptor subpreceptorial subpredicate subpredication subprefect subprefectorial subprefecture subprehensile subpress subprimary subprincipal subprior subprioress subproblem subproctor subproduct subprofessional subprofessor subprofessoriate subprofitable subproportional subprotector subprovince subprovincial subpubescent subpubic subpulmonary subpulverizer subpunch subpunctuation subpurchaser subpurlin subputation subpyramidal subpyriform subquadrangular subquadrate subquality subquestion subquinquefid subquintuple subrace subradial subradiance subradiate subradical subradius subradular subrailway subrameal subramose subramous subrange subrational subreader subreason subrebellion subrectangular subrector subreference subregent subregion subregional subregular subreguli subregulus subrelation subreligion subreniform subrent subrepand subrepent subreport subreptary subreption subreptitious subreputable subresin subretinal subrhombic subrhomboid subrhomboidal subrictal subrident subridently subrigid subrision subrisive subrisory subrogate subrogation subroot subrostral subround subrule subruler subsacral subsale subsaline subsalt subsample subsartorial subsatiric subsatirical subsaturated subsaturation subscapular subscapularis subscapulary subschedule subscheme subschool subscience subscleral subsclerotic subscribable subscribe subscriber subscribership subscript subscription subscriptionist subscriptive subscriptively subscripture subscrive subscriver subsea subsecive subsecretarial subsecretary subsect subsection subsecurity subsecute subsecutive subsegment subsemifusa subsemitone subsensation subsensible subsensual subsensuous subsept subseptuple subsequence subsequency subsequent subsequential subsequentially subsequently subsequentness subseries subserosa subserous subserrate subserve subserviate subservience subserviency subservient subserviently subservientness subsessile subset subsewer subsextuple subshaft subsheriff subshire subshrub subshrubby subside subsidence subsidency subsident subsider subsidiarie subsidiarily subsidiariness subsidiary subsiding subsidist subsidizable subsidization subsidize subsidizer subsidy subsilicate subsilicic subsill subsimilation subsimious subsimple subsinuous subsist subsistence subsistency subsistent subsistential subsistingly subsizar subsizarship subsmile subsneer subsocial subsoil subsoiler subsolar subsolid subsonic subsorter subsovereign subspace subspatulate subspecialist subspecialize subspecialty subspecies subspecific subspecifically subsphenoidal subsphere subspherical subspherically subspinous subspiral subspontaneous subsquadron substage substalagmite substalagmitic substance substanceless substanch substandard substandardize substant substantiability substantial substantialia substantialism substantialist substantiality substantialize substantially substantialness substantiate substantiation substantiative substantiator substantify substantious substantival substantivally substantive substantively substantiveness substantivity substantivize substantize substation substernal substituent substitutable substitute substituted substituter substituting substitutingly substitution substitutional substitutionally substitutionary substitutive substitutively substock substoreroom substory substract substraction substratal substrate substrati substrative substrator substratose substratosphere substratospheric substratum substriate substruct substruction substructional substructural substructure substylar substyle subsulfid subsulfide subsulphate subsulphid subsulphide subsult subsultive subsultorily subsultorious subsultory subsultus subsumable subsume subsumption subsumptive subsuperficial subsurety subsurface subsyndicate subsynod subsynodical subsystem subtack subtacksman subtangent subtarget subtartarean subtectal subtegminal subtegulaneous subtemperate subtenancy subtenant subtend subtense subtenure subtepid subteraqueous subterbrutish subtercelestial subterconscious subtercutaneous subterethereal subterfluent subterfluous subterfuge subterhuman subterjacent subtermarine subterminal subternatural subterpose subterposition subterrane subterraneal subterranean subterraneanize subterraneanly subterraneous subterraneously subterraneousness subterranity subterraqueous subterrene subterrestrial subterritorial subterritory subtersensual subtersensuous subtersuperlative subtersurface subtertian subtext subthalamic subthalamus subthoracic subthrill subtile subtilely subtileness subtilin subtilism subtilist subtility subtilization subtilize subtilizer subtill subtillage subtilty subtitle subtitular subtle subtleness subtlety subtlist subtly subtone subtonic subtorrid subtotal subtotem subtower subtract subtracter subtraction subtractive subtrahend subtranslucent subtransparent subtransverse subtrapezoidal subtread subtreasurer subtreasurership subtreasury subtrench subtriangular subtriangulate subtribal subtribe subtribual subtrifid subtrigonal subtrihedral subtriplicate subtriplicated subtriquetrous subtrist subtrochanteric subtrochlear subtropic subtropical subtropics subtrousers subtrude subtruncate subtrunk subtuberant subtunic subtunnel subturbary subturriculate subturriculated subtutor subtwined subtype subtypical subulate subulated subulicorn subuliform subultimate subumbellate subumbonal subumbral subumbrella subumbrellar subuncinate subunequal subungual subunguial subungulate subunit subuniverse suburb suburban suburbandom suburbanhood suburbanism suburbanite suburbanity suburbanization suburbanize suburbanly suburbed suburbia suburbican suburbicarian suburbicary suburethral subursine subvaginal subvaluation subvarietal subvariety subvassal subvassalage subvein subvendee subvene subvention subventionary subventioned subventionize subventitious subventive subventral subventricose subvermiform subversal subverse subversed subversion subversionary subversive subversivism subvert subvertebral subverter subvertible subvertical subverticillate subvesicular subvestment subvicar subvicarship subvillain subvirate subvirile subvisible subvitalized subvitreous subvocal subvola subwarden subwater subway subwealthy subweight subwink subworker subworkman subzonal subzone subzygomatic succade succedanea succedaneous succedaneum succedent succeed succeedable succeeder succeeding succeedingly succent succentor succenturiate succenturiation success successful successfully successfulness succession successional successionally successionist successionless successive successively successiveness successivity successless successlessly successlessness successor successoral successorship successory succi succin succinamate succinamic succinamide succinanil succinate succinct succinctly succinctness succinctorium succinctory succincture succinic succiniferous succinimide succinite succinoresinol succinosulphuric succinous succinyl succise succivorous succor succorable succorer succorful succorless succorrhea succory succotash succourful succourless succous succub succuba succubae succube succubine succubous succubus succula succulence succulency succulent succulently succulentness succulous succumb succumbence succumbency succumbent succumber succursal succuss succussation succussatory succussion succussive such suchlike suchness suchwise sucivilized suck suckable suckabob suckage suckauhock sucken suckener sucker suckerel suckerfish suckerlike suckfish suckhole sucking suckle suckler suckless suckling suckstone suclat sucramine sucrate sucre sucroacid sucrose suction suctional suctorial suctorian suctorious sucupira sucuri sucuriu sucuruju sud sudadero sudamen sudamina sudaminal sudarium sudary sudate sudation sudatorium sudatory sudburite sudd sudden suddenly suddenness suddenty sudder suddle suddy sudiform sudoral sudoresis sudoric sudoriferous sudoriferousness sudorific sudoriparous sudorous suds sudsman sudsy sue suede suer suet suety suff suffect suffection suffer sufferable sufferableness sufferably sufferance sufferer suffering sufferingly suffete suffice sufficeable sufficer sufficiency sufficient sufficiently sufficientness sufficing sufficingly sufficingness suffiction suffix suffixal suffixation suffixion suffixment sufflaminate sufflamination sufflate sufflation sufflue suffocate suffocating suffocatingly suffocation suffocative suffragan suffraganal suffraganate suffragancy suffraganeous suffragatory suffrage suffragette suffragettism suffragial suffragism suffragist suffragistic suffragistically suffragitis suffrago suffrutescent suffrutex suffruticose suffruticous suffruticulose suffumigate suffumigation suffusable suffuse suffused suffusedly suffusion suffusive sugamo sugan sugar sugarberry sugarbird sugarbush sugared sugarelly sugarer sugarhouse sugariness sugarless sugarlike sugarplum sugarsweet sugarworks sugary sugent sugescent suggest suggestable suggestedness suggester suggestibility suggestible suggestibleness suggestibly suggesting suggestingly suggestion suggestionability suggestionable suggestionism suggestionist suggestionize suggestive suggestively suggestiveness suggestivity suggestment suggestress suggestum suggillate suggillation sugh sugi suguaro suhuaro suicidal suicidalism suicidally suicidalwise suicide suicidical suicidism suicidist suid suidian suiform suilline suimate suine suing suingly suint suisimilar suist suit suitability suitable suitableness suitably suitcase suite suithold suiting suitor suitoress suitorship suity suji sukiyaki sukkenye sulbasutra sulcal sulcalization sulcalize sulcar sulcate sulcated sulcation sulcatoareolate sulcatocostate sulcatorimose sulciform sulcomarginal sulcular sulculate sulculus sulcus suld sulea sulfa sulfacid sulfadiazine sulfaguanidine sulfamate sulfamerazin sulfamerazine sulfamethazine sulfamethylthiazole sulfamic sulfamidate sulfamide sulfamidic sulfamine sulfaminic sulfamyl sulfanilamide sulfanilic sulfanilylguanidine sulfantimonide sulfapyrazine sulfapyridine sulfaquinoxaline sulfarsenide sulfarsenite sulfarseniuret sulfarsphenamine sulfatase sulfathiazole sulfatic sulfatize sulfato sulfazide sulfhydrate sulfhydric sulfhydryl sulfindigotate sulfindigotic sulfindylic sulfion sulfionide sulfoacid sulfoamide sulfobenzide sulfobenzoate sulfobenzoic sulfobismuthite sulfoborite sulfocarbamide sulfocarbimide sulfocarbolate sulfocarbolic sulfochloride sulfocyan sulfocyanide sulfofication sulfogermanate sulfohalite sulfohydrate sulfoindigotate sulfoleic sulfolysis sulfomethylic sulfonamic sulfonamide sulfonate sulfonation sulfonator sulfonephthalein sulfonethylmethane sulfonic sulfonium sulfonmethane sulfonyl sulfophthalein sulfopurpurate sulfopurpuric sulforicinate sulforicinic sulforicinoleate sulforicinoleic sulfoselenide sulfosilicide sulfostannide sulfotelluride sulfourea sulfovinate sulfovinic sulfowolframic sulfoxide sulfoxism sulfoxylate sulfoxylic sulfurage sulfuran sulfurate sulfuration sulfurator sulfurea sulfureous sulfureously sulfureousness sulfuret sulfuric sulfurization sulfurize sulfurosyl sulfurous sulfury sulfuryl sulk sulka sulker sulkily sulkiness sulky sulkylike sull sulla sullage sullen sullenhearted sullenly sullenness sulliable sullow sully sulpha sulphacid sulphaldehyde sulphamate sulphamic sulphamidate sulphamide sulphamidic sulphamine sulphaminic sulphamino sulphammonium sulphamyl sulphanilate sulphanilic sulphantimonate sulphantimonial sulphantimonic sulphantimonide sulphantimonious sulphantimonite sulpharsenate sulpharseniate sulpharsenic sulpharsenide sulpharsenious sulpharsenite sulpharseniuret sulpharsphenamine sulphatase sulphate sulphated sulphatic sulphation sulphatization sulphatize sulphato sulphatoacetic sulphatocarbonic sulphazide sulphazotize sulphbismuthite sulphethylate sulphethylic sulphhemoglobin sulphichthyolate sulphidation sulphide sulphidic sulphidize sulphimide sulphinate sulphindigotate sulphine sulphinic sulphinide sulphinyl sulphitation sulphite sulphitic sulphmethemoglobin sulpho sulphoacetic sulphoamid sulphoamide sulphoantimonate sulphoantimonic sulphoantimonious sulphoantimonite sulphoarsenic sulphoarsenious sulphoarsenite sulphoazotize sulphobenzide sulphobenzoate sulphobenzoic sulphobismuthite sulphoborite sulphobutyric sulphocarbamic sulphocarbamide sulphocarbanilide sulphocarbimide sulphocarbolate sulphocarbolic sulphocarbonate sulphocarbonic sulphochloride sulphochromic sulphocinnamic sulphocyan sulphocyanate sulphocyanic sulphocyanide sulphocyanogen sulphodichloramine sulphofication sulphofy sulphogallic sulphogel sulphogermanate sulphogermanic sulphohalite sulphohaloid sulphohydrate sulphoichthyolate sulphoichthyolic sulphoindigotate sulphoindigotic sulpholeate sulpholeic sulpholipin sulpholysis sulphonal sulphonalism sulphonamic sulphonamide sulphonamido sulphonamine sulphonaphthoic sulphonate sulphonated sulphonation sulphonator sulphoncyanine sulphone sulphonephthalein sulphonethylmethane sulphonic sulphonium sulphonmethane sulphonphthalein sulphonyl sulphoparaldehyde sulphophosphate sulphophosphite sulphophosphoric sulphophosphorous sulphophthalein sulphophthalic sulphopropionic sulphoproteid sulphopupuric sulphopurpurate sulphoricinate sulphoricinic sulphoricinoleate sulphoricinoleic sulphosalicylic sulphoselenide sulphoselenium sulphosilicide sulphosol sulphostannate sulphostannic sulphostannide sulphostannite sulphostannous sulphosuccinic sulphosulphurous sulphotannic sulphotelluride sulphoterephthalic sulphothionyl sulphotoluic sulphotungstate sulphotungstic sulphourea sulphovanadate sulphovinate sulphovinic sulphowolframic sulphoxide sulphoxism sulphoxylate sulphoxylic sulphoxyphosphate sulphozincate sulphur sulphurage sulphuran sulphurate sulphuration sulphurator sulphurea sulphurean sulphureity sulphureonitrous sulphureosaline sulphureosuffused sulphureous sulphureously sulphureousness sulphureovirescent sulphuret sulphureted sulphuric sulphuriferous sulphurity sulphurization sulphurize sulphurless sulphurlike sulphurosyl sulphurous sulphurously sulphurousness sulphurproof sulphurweed sulphurwort sulphury sulphuryl sulphydrate sulphydric sulphydryl sultam sultan sultana sultanaship sultanate sultane sultanesque sultaness sultanian sultanic sultanin sultanism sultanist sultanize sultanlike sultanry sultanship sultone sultrily sultriness sultry sulung sulvanite sulvasutra sum sumac sumatra sumbul sumbulic sumless sumlessness summability summable summage summand summar summarily summariness summarist summarization summarize summarizer summary summate summation summational summative summatory summed summer summerbird summercastle summerer summerhead summeriness summering summerings summerish summerite summerize summerland summerlay summerless summerlike summerliness summerling summerly summerproof summertide summertime summertree summerward summerwood summery summist summit summital summitless summity summon summonable summoner summoningly summons summula summulist summut sumner sump sumpage sumper sumph sumphish sumphishly sumphishness sumphy sumpit sumpitan sumple sumpman sumpsimus sumpter sumption sumptuary sumptuosity sumptuous sumptuously sumptuousness sun sunbeam sunbeamed sunbeamy sunberry sunbird sunblink sunbonnet sunbonneted sunbow sunbreak sunburn sunburned sunburnedness sunburnproof sunburnt sunburntness sunburst suncherchor suncup sundae sundang sundari sundek sunder sunderable sunderance sunderer sunderment sunderwise sundew sundial sundik sundog sundown sundowner sundowning sundra sundri sundries sundriesman sundrily sundriness sundrops sundry sundryman sune sunfall sunfast sunfish sunfisher sunfishery sunflower sung sungha sunglade sunglass sunglo sunglow sunk sunken sunket sunkland sunlamp sunland sunless sunlessly sunlessness sunlet sunlight sunlighted sunlike sunlit sunn sunnily sunniness sunnud sunny sunnyhearted sunnyheartedness sunproof sunquake sunray sunrise sunrising sunroom sunscald sunset sunsetting sunsetty sunshade sunshine sunshineless sunshining sunshiny sunsmit sunsmitten sunspot sunspotted sunspottedness sunspottery sunspotty sunsquall sunstone sunstricken sunstroke sunt sunup sunward sunwards sunway sunways sunweed sunwise sunyie suovetaurilia sup supa supari supawn supe supellex super superabduction superabhor superability superable superableness superably superabnormal superabominable superabomination superabound superabstract superabsurd superabundance superabundancy superabundant superabundantly superaccession superaccessory superaccommodating superaccomplished superaccrue superaccumulate superaccumulation superaccurate superacetate superachievement superacid superacidulated superacknowledgment superacquisition superacromial superactive superactivity superacute superadaptable superadd superaddition superadditional superadequate superadequately superadjacent superadministration superadmirable superadmiration superadorn superadornment superaerial superaesthetical superaffiliation superaffiuence superagency superaggravation superagitation superagrarian superalbal superalbuminosis superalimentation superalkaline superalkalinity superallowance superaltar superaltern superambitious superambulacral superanal superangelic superangelical superanimal superannuate superannuation superannuitant superannuity superapology superappreciation superaqueous superarbiter superarbitrary superarctic superarduous superarrogant superarseniate superartificial superartificially superaspiration superassertion superassociate superassume superastonish superastonishment superattachment superattainable superattendant superattraction superattractive superauditor superaural superaverage superavit superaward superaxillary superazotation superb superbelief superbeloved superbenefit superbenevolent superbenign superbias superbious superbity superblessed superblunder superbly superbness superbold superborrow superbrain superbrave superbrute superbuild superbungalow superbusy supercabinet supercalender supercallosal supercandid supercanine supercanonical supercanonization supercanopy supercapable supercaption supercarbonate supercarbonization supercarbonize supercarbureted supercargo supercargoship supercarpal supercatastrophe supercatholic supercausal supercaution supercelestial supercensure supercentral supercentrifuge supercerebellar supercerebral superceremonious supercharge supercharged supercharger superchemical superchivalrous superciliary superciliosity supercilious superciliously superciliousness supercilium supercivil supercivilization supercivilized superclaim superclass superclassified supercloth supercoincidence supercolossal supercolumnar supercolumniation supercombination supercombing supercommendation supercommentary supercommentator supercommercial supercompetition supercomplete supercomplex supercomprehension supercompression superconception superconductive superconductivity superconductor superconfident superconfirmation superconformable superconformist superconformity superconfusion supercongestion superconscious superconsciousness superconsecrated superconsequency superconservative superconstitutional supercontest supercontribution supercontrol supercool supercordial supercorporation supercow supercredit supercrescence supercrescent supercrime supercritic supercritical supercrowned supercrust supercube supercultivated supercurious supercycle supercynical superdainty superdanger superdebt superdeclamatory superdecoration superdeficit superdeity superdejection superdelegate superdelicate superdemand superdemocratic superdemonic superdemonstration superdensity superdeposit superdesirous superdevelopment superdevilish superdevotion superdiabolical superdiabolically superdicrotic superdifficult superdiplomacy superdirection superdiscount superdistention superdistribution superdividend superdivine superdivision superdoctor superdominant superdomineering superdonation superdose superdramatist superdreadnought superdubious superduplication superdural superdying superearthly supereconomy superedification superedify supereducation supereffective supereffluence supereffluently superego superelaborate superelastic superelated superelegance superelementary superelevated superelevation supereligible supereloquent supereminence supereminency supereminent supereminently superemphasis superemphasize superendorse superendorsement superendow superenergetic superenforcement superengrave superenrollment superepic superepoch superequivalent supererogant supererogantly supererogate supererogation supererogative supererogator supererogatorily supererogatory superespecial superessential superessentially superestablish superestablishment supereternity superether superethical superethmoidal superevangelical superevident superexacting superexalt superexaltation superexaminer superexceed superexceeding superexcellence superexcellency superexcellent superexcellently superexceptional superexcitation superexcited superexcitement superexcrescence superexert superexertion superexiguity superexist superexistent superexpand superexpansion superexpectation superexpenditure superexplicit superexport superexpressive superexquisite superexquisitely superexquisiteness superextend superextension superextol superextreme superfamily superfantastic superfarm superfat superfecundation superfecundity superfee superfeminine superfervent superfetate superfetation superfeudation superfibrination superficial superficialism superficialist superficiality superficialize superficially superficialness superficiary superficies superfidel superfinance superfine superfinical superfinish superfinite superfissure superfit superfix superfleet superflexion superfluent superfluid superfluitance superfluity superfluous superfluously superfluousness superflux superfoliaceous superfoliation superfolly superformal superformation superformidable superfortunate superfriendly superfrontal superfructified superfulfill superfulfillment superfunction superfunctional superfuse superfusibility superfusible superfusion supergaiety supergallant supergene supergeneric supergenerosity supergenerous supergenual supergiant superglacial superglorious superglottal supergoddess supergoodness supergovern supergovernment supergraduate supergrant supergratification supergratify supergravitate supergravitation superguarantee supergun superhandsome superhearty superheat superheater superheresy superhero superheroic superhet superheterodyne superhighway superhirudine superhistoric superhistorical superhive superhuman superhumanity superhumanize superhumanly superhumanness superhumeral superhypocrite superideal superignorant superillustrate superillustration superimpend superimpending superimpersonal superimply superimportant superimposable superimpose superimposed superimposition superimposure superimpregnated superimpregnation superimprobable superimproved superincentive superinclination superinclusive superincomprehensible superincrease superincumbence superincumbency superincumbent superincumbently superindependent superindiction superindifference superindifferent superindignant superindividual superindividualism superindividualist superinduce superinducement superinduct superinduction superindulgence superindulgent superindustrious superindustry superinenarrable superinfection superinfer superinference superinfeudation superinfinite superinfinitely superinfirmity superinfluence superinformal superinfuse superinfusion superingenious superingenuity superinitiative superinjustice superinnocent superinquisitive superinsaniated superinscription superinsist superinsistence superinsistent superinstitute superinstitution superintellectual superintend superintendence superintendency superintendent superintendential superintendentship superintender superintense superintolerable superinundation superior superioress superiority superiorly superiorness superiorship superirritability superius superjacent superjudicial superjurisdiction superjustification superknowledge superlabial superlaborious superlactation superlapsarian superlaryngeal superlation superlative superlatively superlativeness superlenient superlie superlikelihood superline superlocal superlogical superloyal superlucky superlunary superlunatical superluxurious supermagnificent supermagnificently supermalate superman supermanhood supermanifest supermanism supermanliness supermanly supermannish supermarginal supermarine supermarket supermarvelous supermasculine supermaterial supermathematical supermaxilla supermaxillary supermechanical supermedial supermedicine supermediocre supermental supermentality supermetropolitan supermilitary supermishap supermixture supermodest supermoisten supermolten supermoral supermorose supermunicipal supermuscan supermystery supernacular supernaculum supernal supernalize supernally supernatant supernatation supernation supernational supernationalism supernatural supernaturaldom supernaturalism supernaturalist supernaturality supernaturalize supernaturally supernaturalness supernature supernecessity supernegligent supernormal supernormally supernormalness supernotable supernova supernumeral supernumerariness supernumerary supernumeraryship supernumerous supernutrition superoanterior superobedience superobedient superobese superobject superobjection superobjectionable superobligation superobstinate superoccipital superoctave superocular superodorsal superoexternal superoffensive superofficious superofficiousness superofrontal superointernal superolateral superomedial superoposterior superopposition superoptimal superoptimist superoratorical superorbital superordain superorder superordinal superordinary superordinate superordination superorganic superorganism superorganization superorganize superornament superornamental superosculate superoutput superoxalate superoxide superoxygenate superoxygenation superparamount superparasite superparasitic superparasitism superparliamentary superpassage superpatient superpatriotic superpatriotism superperfect superperfection superperson superpersonal superpersonalism superpetrosal superphlogisticate superphlogistication superphosphate superphysical superpigmentation superpious superplausible superplease superplus superpolite superpolitic superponderance superponderancy superponderant superpopulation superposable superpose superposed superposition superpositive superpower superpowered superpraise superprecarious superprecise superprelatical superpreparation superprinting superprobability superproduce superproduction superproportion superprosperous superpublicity superpure superpurgation superquadrupetal superqualify superquote superradical superrational superrationally superreaction superrealism superrealist superrefine superrefined superrefinement superreflection superreform superreformation superregal superregeneration superregenerative superregistration superregulation superreliance superremuneration superrenal superrequirement superrespectable superresponsible superrestriction superreward superrheumatized superrighteous superromantic superroyal supersacerdotal supersacral supersacred supersacrifice supersafe supersagacious supersaint supersaintly supersalesman supersaliency supersalient supersalt supersanction supersanguine supersanity supersarcastic supersatisfaction supersatisfy supersaturate supersaturation superscandal superscholarly superscientific superscribe superscript superscription superscrive superseaman supersecret supersecretion supersecular supersecure supersedable supersede supersedeas supersedence superseder supersedure superselect superseminate supersemination superseminator supersensible supersensibly supersensitive supersensitiveness supersensitization supersensory supersensual supersensualism supersensualist supersensualistic supersensuality supersensually supersensuous supersensuousness supersentimental superseptal superseptuaginarian superseraphical superserious superservice superserviceable superserviceableness superserviceably supersesquitertial supersession supersessive supersevere supershipment supersignificant supersilent supersimplicity supersimplify supersincerity supersingular supersistent supersize supersmart supersocial supersoil supersolar supersolemn supersolemness supersolemnity supersolemnly supersolicit supersolicitation supersolid supersonant supersonic supersovereign supersovereignty superspecialize superspecies superspecification supersphenoid supersphenoidal superspinous superspiritual superspirituality supersquamosal superstage superstamp superstandard superstate superstatesman superstimulate superstimulation superstition superstitionist superstitionless superstitious superstitiously superstitiousness superstoical superstrain superstrata superstratum superstrenuous superstrict superstrong superstruct superstruction superstructor superstructory superstructural superstructure superstuff superstylish supersublimated supersuborder supersubsist supersubstantial supersubstantiality supersubstantiate supersubtilized supersubtle supersufficiency supersufficient supersulcus supersulphate supersulphuret supersulphureted supersulphurize supersuperabundance supersuperabundant supersuperabundantly supersuperb supersuperior supersupremacy supersupreme supersurprise supersuspicious supersweet supersympathy supersyndicate supersystem supertare supertartrate supertax supertaxation supertemporal supertempt supertemptation supertension superterranean superterraneous superterrene superterrestrial superthankful superthorough superthyroidism supertoleration supertonic supertotal supertower supertragic supertragical supertrain supertramp supertranscendent supertranscendently supertreason supertrivial supertuchun supertunic supertutelary superugly superultrafrostified superunfit superunit superunity superuniversal superuniverse superurgent supervalue supervast supervene supervenience supervenient supervenosity supervention supervestment supervexation supervictorious supervigilant supervigorous supervirulent supervisal supervisance supervise supervision supervisionary supervisive supervisor supervisorial supervisorship supervisory supervisual supervisure supervital supervive supervolition supervoluminous supervolute superwager superwealthy superweening superwise superwoman superworldly superwrought superyacht superzealous supinate supination supinator supine supinely supineness suppedaneum supper suppering supperless suppertime supperwards supping supplace supplant supplantation supplanter supplantment supple supplejack supplely supplement supplemental supplementally supplementarily supplementary supplementation supplementer suppleness suppletion suppletive suppletively suppletorily suppletory suppliable supplial suppliance suppliancy suppliant suppliantly suppliantness supplicancy supplicant supplicantly supplicat supplicate supplicating supplicatingly supplication supplicationer supplicative supplicator supplicatory supplicavit supplice supplier suppling supply support supportability supportable supportableness supportably supportance supporter supportful supporting supportingly supportive supportless supportlessly supportress supposable supposableness supposably supposal suppose supposed supposedly supposer supposing supposition suppositional suppositionally suppositionary suppositionless suppositious supposititious supposititiously supposititiousness suppositive suppositively suppository suppositum suppost suppress suppressal suppressed suppressedly suppresser suppressible suppression suppressionist suppressive suppressively suppressor supprise suppurant suppurate suppuration suppurative suppuratory suprabasidorsal suprabranchial suprabuccal supracaecal supracargo supracaudal supracensorious supracentenarian suprachorioid suprachorioidal suprachorioidea suprachoroid suprachoroidal suprachoroidea supraciliary supraclavicle supraclavicular supraclusion supracommissure supraconduction supraconductor supracondylar supracondyloid supraconscious supraconsciousness supracoralline supracostal supracoxal supracranial supracretaceous supradecompound supradental supradorsal supradural suprafeminine suprafine suprafoliaceous suprafoliar supraglacial supraglenoid supraglottic supragovernmental suprahepatic suprahistorical suprahuman suprahumanity suprahyoid suprailiac suprailium supraintellectual suprainterdorsal suprajural supralabial supralapsarian supralapsarianism supralateral supralegal supraliminal supraliminally supralineal supralinear supralocal supralocally supraloral supralunar supralunary supramammary supramarginal supramarine supramastoid supramaxilla supramaxillary supramaximal suprameatal supramechanical supramedial supramental supramolecular supramoral supramortal supramundane supranasal supranational supranatural supranaturalism supranaturalist supranaturalistic supranature supranervian supraneural supranormal supranuclear supraoccipital supraocclusion supraocular supraoesophagal supraoesophageal supraoptimal supraoptional supraoral supraorbital supraorbitar supraordinary supraordinate supraordination suprapapillary suprapedal suprapharyngeal supraposition supraprotest suprapubian suprapubic suprapygal supraquantivalence supraquantivalent suprarational suprarationalism suprarationality suprarenal suprarenalectomize suprarenalectomy suprarenalin suprarenine suprarimal suprasaturate suprascapula suprascapular suprascapulary suprascript suprasegmental suprasensible suprasensitive suprasensual suprasensuous supraseptal suprasolar suprasoriferous suprasphanoidal supraspinal supraspinate supraspinatus supraspinous suprasquamosal suprastandard suprastapedial suprastate suprasternal suprastigmal suprasubtle supratemporal supraterraneous supraterrestrial suprathoracic supratonsillar supratrochlear supratropical supratympanic supravaginal supraventricular supraversion supravital supraworld supremacy suprematism supreme supremely supremeness supremity sur sura suraddition surah surahi sural suralimentation suranal surangular surat surbase surbased surbasement surbate surbater surbed surcease surcharge surcharger surcingle surcoat surcrue surculi surculigerous surculose surculous surculus surd surdation surdeline surdent surdimutism surdity surdomute sure surely sureness sures surette surety suretyship surexcitation surf surface surfaced surfacedly surfaceless surfacely surfaceman surfacer surfacing surfactant surfacy surfbird surfboard surfboarding surfboat surfboatman surfeit surfeiter surfer surficial surfle surflike surfman surfmanship surfrappe surfuse surfusion surfy surge surgeful surgeless surgent surgeon surgeoncy surgeoness surgeonfish surgeonless surgeonship surgeproof surgerize surgery surgical surgically surginess surging surgy suricate suriga surinamine surlily surliness surly surma surmark surmaster surmisable surmisal surmisant surmise surmised surmisedly surmiser surmount surmountable surmountableness surmountal surmounted surmounter surmullet surname surnamer surnap surnay surnominal surpass surpassable surpasser surpassing surpassingly surpassingness surpeopled surplice surpliced surplicewise surplician surplus surplusage surpreciation surprint surprisable surprisal surprise surprisedly surprisement surpriseproof surpriser surprising surprisingly surprisingness surquedry surquidry surquidy surra surrealism surrealist surrealistic surrealistically surrebound surrebut surrebuttal surrebutter surrection surrejoin surrejoinder surrenal surrender surrenderee surrenderer surrenderor surreption surreptitious surreptitiously surreptitiousness surreverence surreverently surrey surrogacy surrogate surrogateship surrogation surrosion surround surrounded surroundedly surrounder surrounding surroundings sursaturation sursolid sursumduction sursumvergence sursumversion surtax surtout surturbrand surveillance surveillant survey surveyable surveyage surveyal surveyance surveying surveyor surveyorship survigrous survivability survivable survival survivalism survivalist survivance survivancy survive surviver surviving survivor survivoress survivorship susannite suscept susceptance susceptibility susceptible susceptibleness susceptibly susception susceptive susceptiveness susceptivity susceptor suscitate suscitation susi suslik susotoxin suspect suspectable suspected suspectedness suspecter suspectful suspectfulness suspectible suspectless suspector suspend suspended suspender suspenderless suspenders suspendibility suspendible suspensation suspense suspenseful suspensely suspensibility suspensible suspension suspensive suspensively suspensiveness suspensoid suspensor suspensorial suspensorium suspensory suspercollate suspicion suspicionable suspicional suspicionful suspicionless suspicious suspiciously suspiciousness suspiration suspiratious suspirative suspire suspirious sussexite sussultatory sussultorial sustain sustainable sustained sustainer sustaining sustainingly sustainment sustanedly sustenance sustenanceless sustentacula sustentacular sustentaculum sustentation sustentational sustentative sustentator sustention sustentive sustentor susu susurr susurrant susurrate susurration susurringly susurrous susurrus suterbery suther sutile sutler sutlerage sutleress sutlership sutlery sutor sutorial sutorian sutorious sutra suttee sutteeism sutten suttin suttle sutural suturally suturation suture suum suwarro suwe suz suzerain suzeraine suzerainship suzerainty svarabhakti svarabhaktic svelte sviatonosite swa swab swabber swabberly swabble swack swacken swacking swad swaddle swaddlebill swaddler swaddling swaddy swag swagbellied swagbelly swage swager swagger swaggerer swaggering swaggeringly swaggie swaggy swaglike swagman swagsman swaimous swain swainish swainishness swainship swainsona swaird swale swaler swaling swalingly swallet swallo swallow swallowable swallower swallowlike swallowling swallowpipe swallowtail swallowwort swam swami swamp swampable swampberry swamper swampish swampishness swampland swampside swampweed swampwood swampy swan swandown swanflower swang swangy swanherd swanhood swanimote swank swanker swankily swankiness swanking swanky swanlike swanmark swanmarker swanmarking swanneck swannecked swanner swannery swannish swanny swanskin swanweed swanwort swap swape swapper swapping swaraj swarajism swarajist swarbie sward swardy sware swarf swarfer swarm swarmer swarming swarmy swarry swart swartback swarth swarthily swarthiness swarthness swarthy swartish swartly swartness swartrutter swartrutting swarty swarve swash swashbuckle swashbuckler swashbucklerdom swashbucklering swashbucklery swashbuckling swasher swashing swashway swashwork swashy swastika swastikaed swat swatch swatcher swatchway swath swathable swathband swathe swatheable swather swathy swatter swattle swaver sway swayable swayed swayer swayful swaying swayingly swayless sweal sweamish swear swearer swearingly swearword sweat sweatband sweatbox sweated sweater sweatful sweath sweatily sweatiness sweating sweatless sweatproof sweatshop sweatweed sweaty swedge sweeny sweep sweepable sweepage sweepback sweepboard sweepdom sweeper sweeperess sweepforward sweeping sweepingly sweepingness sweepings sweepstake sweepwasher sweepwashings sweepy sweer sweered sweet sweetberry sweetbread sweetbrier sweetbriery sweeten sweetener sweetening sweetfish sweetful sweetheart sweetheartdom sweethearted sweetheartedness sweethearting sweetheartship sweetie sweeting sweetish sweetishly sweetishness sweetleaf sweetless sweetlike sweetling sweetly sweetmaker sweetmeat sweetmouthed sweetness sweetroot sweetshop sweetsome sweetsop sweetwater sweetweed sweetwood sweetwort sweety swego swelchie swell swellage swelldom swelldoodle swelled sweller swellfish swelling swellish swellishness swellmobsman swellness swelltoad swelly swelp swelt swelter sweltering swelteringly swelth sweltry swelty swep swept swerd swerve swerveless swerver swervily swick swidge swift swiften swifter swiftfoot swiftlet swiftlike swiftness swifty swig swigger swiggle swile swill swillbowl swiller swilltub swim swimmable swimmer swimmeret swimmily swimminess swimming swimmingly swimmingness swimmist swimmy swimsuit swimy swindle swindleable swindledom swindler swindlership swindlery swindling swindlingly swine swinebread swinecote swinehead swineherd swineherdship swinehood swinehull swinelike swinely swinepipe swinery swinestone swinesty swiney swing swingable swingback swingdevil swingdingle swinge swingeing swinger swinging swingingly swingle swinglebar swingletail swingletree swingstock swingtree swingy swinish swinishly swinishness swink swinney swipe swiper swipes swiple swipper swipy swird swire swirl swirlingly swirly swirring swish swisher swishing swishingly swishy swiss swissing switch switchback switchbacker switchboard switched switchel switcher switchgear switching switchkeeper switchlike switchman switchy switchyard swith swithe swithen swither swivel swiveled swiveleye swiveleyed swivellike swivet swivetty swiz swizzle swizzler swob swollen swollenly swollenness swom swonken swoon swooned swooning swooningly swoony swoop swooper swoosh sword swordbill swordcraft swordfish swordfisherman swordfishery swordfishing swordick swording swordless swordlet swordlike swordmaker swordmaking swordman swordmanship swordplay swordplayer swordproof swordsman swordsmanship swordsmith swordster swordstick swordswoman swordtail swordweed swore sworn swosh swot swotter swounds swow swum swung swungen swure syagush sybarism sybarist sybaritism sybotic sybotism sycamine sycamore syce sycee sychnocarpous sycock sycoma sycomancy syconarian syconate syconid syconium syconoid syconus sycophancy sycophant sycophantic sycophantical sycophantically sycophantish sycophantishly sycophantism sycophantize sycophantry sycosiform sycosis sye syenite syenitic syenodiorite syenogabbro sylid syllab syllabarium syllabary syllabatim syllabation syllabe syllabi syllabic syllabical syllabically syllabicate syllabication syllabicness syllabification syllabify syllabism syllabize syllable syllabled syllabus syllepsis sylleptic sylleptical sylleptically syllidian sylloge syllogism syllogist syllogistic syllogistical syllogistically syllogistics syllogization syllogize syllogizer sylph sylphic sylphid sylphidine sylphish sylphize sylphlike sylphy sylva sylvae sylvage sylvan sylvanesque sylvanite sylvanitic sylvanity sylvanize sylvanly sylvanry sylvate sylvatic sylvester sylvestral sylvestrene sylvestrian sylvic sylvicoline sylviine sylvine sylvinite sylvite symbasic symbasical symbasically symbasis symbiogenesis symbiogenetic symbiogenetically symbion symbiont symbiontic symbionticism symbiosis symbiot symbiote symbiotic symbiotically symbiotics symbiotism symbiotrophic symblepharon symbol symbolaeography symbolater symbolatrous symbolatry symbolic symbolical symbolically symbolicalness symbolicly symbolics symbolism symbolist symbolistic symbolistical symbolistically symbolization symbolize symbolizer symbolofideism symbological symbologist symbolography symbology symbololatry symbolology symbolry symbouleutic symbranch symbranchiate symbranchoid symbranchous symmachy symmedian symmelia symmelian symmelus symmetalism symmetral symmetric symmetrical symmetricality symmetrically symmetricalness symmetrist symmetrization symmetrize symmetroid symmetrophobia symmetry symmorphic symmorphism sympalmograph sympathectomize sympathectomy sympathetectomy sympathetic sympathetical sympathetically sympatheticism sympatheticity sympatheticness sympatheticotonia sympatheticotonic sympathetoblast sympathicoblast sympathicotonia sympathicotonic sympathicotripsy sympathism sympathist sympathize sympathizer sympathizing sympathizingly sympathoblast sympatholysis sympatholytic sympathomimetic sympathy sympatric sympatry sympetalous symphenomena symphenomenal symphile symphilic symphilism symphilous symphily symphogenous symphonetic symphonia symphonic symphonically symphonion symphonious symphoniously symphonist symphonize symphonous symphony symphoricarpous symphrase symphronistic symphyantherous symphycarpous symphylan symphyllous symphylous symphynote symphyogenesis symphyogenetic symphyostemonous symphyseal symphyseotomy symphysial symphysian symphysic symphysion symphysiotomy symphysis symphysodactylia symphysotomy symphysy symphytic symphytically symphytism symphytize sympiesometer symplasm symplectic symplesite symplocaceous symploce sympode sympodia sympodial sympodially sympodium sympolity symposia symposiac symposiacal symposial symposiarch symposiast symposiastic symposion symposium symptom symptomatic symptomatical symptomatically symptomatics symptomatize symptomatography symptomatological symptomatologically symptomatology symptomical symptomize symptomless symptosis symtomology synacme synacmic synacmy synactic synadelphite synaeresis synagogal synagogian synagogical synagogism synagogist synagogue synalgia synalgic synallactic synallagmatic synaloepha synanastomosis synange synangia synangial synangic synangium synanthema synantherological synantherologist synantherology synantherous synanthesis synanthetic synanthic synanthous synanthrose synanthy synaphea synaposematic synapse synapses synapsidan synapsis synaptai synaptase synapte synaptene synapterous synaptic synaptical synaptically synapticula synapticulae synapticular synapticulate synapticulum synaptychus synarchical synarchism synarchy synarmogoid synarquism synartesis synartete synartetic synarthrodia synarthrodial synarthrodially synarthrosis synascidian synastry synaxar synaxarion synaxarist synaxarium synaxary synaxis sync syncarp syncarpia syncarpium syncarpous syncarpy syncategorematic syncategorematical syncategorematically syncategoreme syncephalic syncephalus syncerebral syncerebrum synch synchitic synchondoses synchondrosial synchondrosially synchondrosis synchondrotomy synchoresis synchro synchroflash synchromesh synchronal synchrone synchronic synchronical synchronically synchronism synchronistic synchronistical synchronistically synchronizable synchronization synchronize synchronized synchronizer synchronograph synchronological synchronology synchronous synchronously synchronousness synchrony synchroscope synchrotron synchysis syncladous synclastic synclinal synclinally syncline synclinical synclinore synclinorial synclinorian synclinorium synclitic syncliticism synclitism syncoelom syncopal syncopate syncopated syncopation syncopator syncope syncopic syncopism syncopist syncopize syncotyledonous syncracy syncraniate syncranterian syncranteric syncrasy syncretic syncretical syncreticism syncretion syncretism syncretist syncretistic syncretistical syncretize syncrisis syncryptic syncytia syncytial syncytioma syncytiomata syncytium syndactyl syndactylia syndactylic syndactylism syndactylous syndactyly syndectomy synderesis syndesis syndesmectopia syndesmitis syndesmography syndesmology syndesmoma syndesmoplasty syndesmorrhaphy syndesmosis syndesmotic syndesmotomy syndetic syndetical syndetically syndic syndical syndicalism syndicalist syndicalistic syndicalize syndicate syndicateer syndication syndicator syndicship syndoc syndrome syndromic syndyasmian syne synecdoche synecdochic synecdochical synecdochically synecdochism synechia synechiological synechiology synechological synechology synechotomy synechthran synechthry synecology synecphonesis synectic synecticity synedral synedria synedrial synedrian synedrion synedrium synedrous syneidesis synema synemmenon synenergistic synenergistical synenergistically synentognath synentognathous syneresis synergastic synergetic synergia synergic synergically synergid synergidae synergidal synergism synergist synergistic synergistical synergistically synergize synergy synerize synesis synesthesia synesthetic synethnic syngamic syngamous syngamy syngenesian syngenesious syngenesis syngenetic syngenic syngenism syngenite syngnathid syngnathoid syngnathous syngraph synizesis synkaryon synkatathesis synkinesia synkinesis synkinetic synneurosis synneusis synochoid synochus synocreate synod synodal synodalian synodalist synodally synodical synodically synodist synodite synodontid synodontoid synodsman synoecete synoeciosis synoecious synoeciously synoeciousness synoecism synoecize synoecy synoicous synomosy synonym synonymatic synonymic synonymical synonymicon synonymics synonymist synonymity synonymize synonymous synonymously synonymousness synonymy synophthalmus synopses synopsis synopsize synopsy synoptic synoptical synoptically synoptist synorchidism synorchism synorthographic synosteology synosteosis synostose synostosis synostotic synostotical synostotically synousiacs synovectomy synovia synovial synovially synoviparous synovitic synovitis synpelmous synrhabdosome synsacral synsacrum synsepalous synspermous synsporous syntactic syntactical syntactically syntactician syntactics syntagma syntan syntasis syntax syntaxis syntaxist syntechnic syntectic syntelome syntenosis synteresis syntexis syntheme synthermal syntheses synthesis synthesism synthesist synthesization synthesize synthesizer synthete synthetic synthetical synthetically syntheticism synthetism synthetist synthetization synthetize synthetizer synthol synthroni synthronoi synthronos synthronus syntomia syntomy syntone syntonic syntonical syntonically syntonin syntonization syntonize syntonizer syntonolydian syntonous syntony syntripsis syntrope syntrophic syntropic syntropical syntropy syntype syntypic syntypicism synusia synusiast syodicon sypher syphilide syphilidography syphilidologist syphiliphobia syphilis syphilitic syphilitically syphilization syphilize syphiloderm syphilodermatous syphilogenesis syphilogeny syphilographer syphilography syphiloid syphilologist syphilology syphiloma syphilomatous syphilophobe syphilophobia syphilophobic syphilopsychosis syphilosis syphilous syre syringa syringadenous syringe syringeal syringeful syringes syringin syringitis syringium syringocoele syringomyelia syringomyelic syringotome syringotomy syrinx syrma syrphian syrphid syrt syrtic syrup syruped syruper syruplike syrupy syssarcosis syssel sysselman syssiderite syssitia syssition systaltic systasis systatic system systematic systematical systematicality systematically systematician systematicness systematics systematism systematist systematization systematize systematizer systematology systemed systemic systemically systemist systemizable systemization systemize systemizer systemless systemproof systemwise systilius systolated systole systolic systyle systylous syzygetic syzygetically syzygial syzygium syzygy szaibelyite szlachta szopelka t ta taa taar tab tabacin tabacosis tabacum tabanid tabaniform tabanuco tabard tabarded tabaret tabasheer tabashir tabaxir tabbarea tabber tabbinet tabby tabefaction tabefy tabella tabellion taberdar taberna tabernacle tabernacler tabernacular tabernariae tabes tabescence tabescent tabet tabetic tabetiform tabetless tabic tabid tabidly tabidness tabific tabifical tabinet tabitude tabla tablature table tableau tableaux tablecloth tableclothwise tableclothy tabled tablefellow tablefellowship tableful tableity tableland tableless tablelike tablemaid tablemaker tablemaking tableman tablemate tabler tables tablespoon tablespoonful tablet tabletary tableware tablewise tabling tablinum tabloid tabog taboo tabooism tabooist taboot taboparalysis taboparesis taboparetic tabophobia tabor taborer taboret taborin tabour tabourer tabouret tabret tabu tabula tabulable tabular tabulare tabularium tabularization tabularize tabularly tabulary tabulate tabulated tabulation tabulator tabulatory tabule tabuliform tabut tacahout tacamahac taccaceous taccada tach tache tacheless tacheography tacheometer tacheometric tacheometry tacheture tachhydrite tachibana tachinarian tachinid tachiol tachistoscope tachistoscopic tachogram tachograph tachometer tachometry tachoscope tachycardia tachycardiac tachygen tachygenesis tachygenetic tachygenic tachyglossal tachyglossate tachygraph tachygrapher tachygraphic tachygraphical tachygraphically tachygraphist tachygraphometer tachygraphometry tachygraphy tachyhydrite tachyiatry tachylalia tachylite tachylyte tachylytic tachymeter tachymetric tachymetry tachyphagia tachyphasia tachyphemia tachyphrasia tachyphrenia tachypnea tachyscope tachyseism tachysterol tachysystole tachythanatous tachytomy tachytype tacit tacitly tacitness taciturn taciturnist taciturnity taciturnly tack tacker tacket tackety tackey tackiness tacking tackingly tackle tackled tackleless tackleman tackler tackless tackling tackproof tacksman tacky taclocus tacmahack tacnode taconite tacso tact tactable tactful tactfully tactfulness tactic tactical tactically tactician tactics tactile tactilist tactility tactilogical tactinvariant taction tactite tactive tactless tactlessly tactlessness tactometer tactor tactosol tactual tactualist tactuality tactually tactus tacuacine tad tade tadpole tadpoledom tadpolehood tadpolelike tadpolism tae tael taen taenia taeniacidal taeniacide taeniafuge taenial taenian taeniasis taeniate taenicide taenidium taeniform taenifuge taeniiform taeniobranchiate taenioglossate taenioid taeniosome taeniosomous taenite taennin taffarel tafferel taffeta taffety taffle taffrail taffy taffylike taffymaker taffymaking taffywise tafia tafinagh taft tafwiz tag tagasaste tagatose tagboard tagetol tagetone tagged tagger taggle taggy tagilite taglet taglike taglock tagrag tagraggery tagsore tagtail tagua taguan tagwerk taha taheen tahil tahin tahkhana tahr tahseeldar tahsil tahsildar tahua tai taiaha taich taiga taigle taiglesome taihoa taikhana tail tailage tailband tailboard tailed tailender tailer tailet tailfirst tailflower tailforemost tailge tailhead tailing tailings taille tailless taillessly taillessness taillie taillight taillike tailor tailorage tailorbird tailorcraft tailordom tailoress tailorhood tailoring tailorism tailorization tailorize tailorless tailorlike tailorly tailorman tailorship tailorwise tailory tailpiece tailpin tailpipe tailrace tailsman tailstock tailward tailwards tailwise taily tailzee tailzie taimen taimyrite tain taint taintable taintless taintlessly taintlessness taintment taintor taintproof tainture taintworm taipan taipo tairge tairger tairn taisch taise taissle taistrel taistril tait taiver taivers taivert taj takable takamaka takar take takedown takedownable takeful taken taker takin taking takingly takingness takings takosis takt taky takyr tal tala talabon talahib talaje talak talalgia talanton talao talapoin talar talari talaria talaric talayot talbot talbotype talc talcer talcky talclike talcochlorite talcoid talcomicaceous talcose talcous talcum tald tale talebearer talebearing talebook talecarrier talecarrying taled taleful talemaster talemonger talemongering talent talented talentless talepyet taler tales talesman taleteller taletelling tali taliage taliation taliera taligrade talion talionic talipat taliped talipedic talipes talipomanus talipot talis talisay talisman talismanic talismanical talismanically talismanist talite talitol talk talkability talkable talkathon talkative talkatively talkativeness talker talkfest talkful talkie talkiness talking talkworthy talky tall tallage tallageability tallageable tallboy tallegalane taller tallero talles tallet talliable talliage talliar talliate tallier tallis tallish tallit tallith tallness talloel tallote tallow tallowberry tallower tallowiness tallowing tallowish tallowlike tallowmaker tallowmaking tallowman tallowroot tallowweed tallowwood tallowy tallwood tally tallyho tallyman tallymanship tallywag tallywalka tallywoman talma talmouse talocalcaneal talocalcanean talocrural talofibular talon talonavicular taloned talonic talonid taloscaphoid talose talotibial talpacoti talpatate talpetate talpicide talpid talpiform talpify talpine talpoid talthib taluk taluka talukdar talukdari talus taluto talwar talwood tam tamability tamable tamableness tamably tamacoare tamale tamandu tamandua tamanoas tamanoir tamanowus tamanu tamara tamarack tamaraite tamarao tamaricaceous tamarin tamarind tamarisk tamas tamasha tambac tambaroora tamber tambo tamboo tambookie tambor tambour tamboura tambourer tambouret tambourgi tambourin tambourinade tambourine tambourist tambreet tamburan tamburello tame tamehearted tameheartedness tamein tameless tamelessly tamelessness tamely tameness tamer tamidine tamis tamise tamlung tammie tammock tammy tamp tampala tampan tampang tamper tamperer tamperproof tampin tamping tampion tampioned tampon tamponade tamponage tamponment tampoon tan tana tanacetin tanacetone tanacetyl tanach tanager tanagrine tanagroid tanaist tanak tanan tanbark tanbur tancel tanchoir tandan tandem tandemer tandemist tandemize tandemwise tandle tandour tane tanekaha tang tanga tangalung tangantangan tanged tangeite tangelo tangence tangency tangent tangental tangentally tangential tangentiality tangentially tangently tanger tangfish tangham tanghan tanghin tanghinin tangi tangibile tangibility tangible tangibleness tangibly tangie tangilin tangka tanglad tangle tangleberry tanglefish tanglefoot tanglement tangleproof tangler tangleroot tanglesome tangless tanglewrack tangling tanglingly tangly tango tangoreceptor tangram tangs tangue tanguile tangum tangun tangy tanh tanha tanhouse tania tanica tanier tanist tanistic tanistry tanistship tanjib tanjong tank tanka tankage tankah tankard tanked tanker tankerabogus tankert tankette tankful tankle tankless tanklike tankmaker tankmaking tankman tankodrome tankroom tankwise tanling tannable tannage tannaic tannaim tannaitic tannalbin tannase tannate tanned tanner tannery tannic tannide tanniferous tannin tannined tanning tanninlike tannocaffeic tannogallate tannogallic tannogelatin tannogen tannoid tannometer tannyl tanoa tanproof tanquam tanquen tanrec tanstuff tansy tantadlin tantafflin tantalate tantalic tantaliferous tantalifluoride tantalite tantalization tantalize tantalizer tantalizingly tantalizingness tantalofluoride tantalum tantamount tantara tantarabobus tantarara tanti tantivy tantle tantra tantric tantrik tantrism tantrist tantrum tantum tanwood tanworks tanyard tanystomatous tanystome tanzeb tanzib tanzy tao taotai taoyin tap tapa tapacolo tapaculo tapadera tapadero tapalo tapamaker tapamaking tapas tapasvi tape tapeinocephalic tapeinocephalism tapeinocephaly tapeless tapelike tapeline tapemaker tapemaking tapeman tapen taper taperbearer tapered taperer tapering taperingly taperly tapermaker tapermaking taperness taperwise tapesium tapestring tapestry tapestrylike tapet tapetal tapete tapeti tapetless tapetum tapework tapeworm taphephobia taphole taphouse tapia tapinceophalism tapinocephalic tapinocephaly tapinophobia tapinophoby tapinosis tapioca tapir tapiridian tapirine tapiroid tapis tapism tapist taplash taplet tapmost tapnet tapoa tapoun tappa tappable tappableness tappall tappaul tappen tapper tapperer tappet tappietoorie tapping tappoon taproom taproot taprooted taps tapster tapsterlike tapsterly tapstress tapu tapul taqua tar tara tarabooka taraf tarafdar tarage tarairi tarakihi taramellite tarand tarantara tarantass tarantella tarantism tarantist tarantula tarantular tarantulary tarantulated tarantulid tarantulism tarantulite tarantulous tarapatch taraph tarapin tarassis tarata taratah taratantara taratantarize tarau taraxacerin taraxacin tarbadillo tarbet tarboard tarbogan tarboggin tarboosh tarbooshed tarboy tarbrush tarbush tarbuttite tardigrade tardigradous tardily tardiness tarditude tardive tardle tardy tare tarea tarefa tarefitch tarentala tarente tarentism tarentola tarepatch tarfa tarflower targe targeman targer target targeted targeteer targetlike targetman tarhood tari tarie tariff tariffable tariffication tariffism tariffist tariffite tariffize tariffless tarin tariric taririnic tarish tarkashi tarkeean tarkhan tarlatan tarlataned tarletan tarlike tarltonize tarmac tarman tarmined tarn tarnal tarnally tarnation tarnish tarnishable tarnisher tarnishment tarnishproof tarnlike tarnside taro taroc tarocco tarok taropatch tarot tarp tarpan tarpaulin tarpaulinmaker tarpon tarpot tarpum tarr tarrack tarradiddle tarradiddler tarragon tarragona tarras tarrass tarred tarrer tarri tarriance tarrie tarrier tarrify tarrily tarriness tarrish tarrock tarrow tarry tarrying tarryingly tarryingness tars tarsadenitis tarsal tarsale tarsalgia tarse tarsectomy tarsectopia tarsi tarsia tarsier tarsioid tarsitis tarsochiloplasty tarsoclasis tarsomalacia tarsome tarsometatarsal tarsometatarsus tarsonemid tarsophalangeal tarsophyma tarsoplasia tarsoplasty tarsoptosis tarsorrhaphy tarsotarsal tarsotibal tarsotomy tarsus tart tartago tartan tartana tartane tartar tartarated tartareous tartaret tartaric tartarish tartarization tartarize tartarly tartarous tartarproof tartarum tartemorion tarten tartish tartishly tartle tartlet tartly tartness tartramate tartramic tartramide tartrate tartrated tartratoferric tartrazine tartrazinic tartro tartronate tartronic tartronyl tartronylurea tartrous tartryl tartrylic tartufery tartufian tartufish tartufishly tartufism tartwoman tarve tarweed tarwhine tarwood tarworks taryard tasajo tascal tasco taseometer tash tasheriff tashie tashlik tashreef tashrif tasimeter tasimetric tasimetry task taskage tasker taskit taskless tasklike taskmaster taskmastership taskmistress tasksetter tasksetting taskwork taslet tasmanite tass tassago tassah tassal tassard tasse tassel tasseler tasselet tasselfish tassellus tasselmaker tasselmaking tassely tasser tasset tassie tassoo tastable tastableness tastably taste tasteable tasteableness tasteably tasted tasteful tastefully tastefulness tastekin tasteless tastelessly tastelessness tasten taster tastily tastiness tasting tastingly tasty tasu tat tataupa tatbeb tatchy tate tater tath tatie tatinek tatler tatou tatouay tatpurusha tatsman tatta tatter tatterdemalion tatterdemalionism tatterdemalionry tattered tatteredly tatteredness tatterly tatterwallop tattery tatther tattied tatting tattle tattlement tattler tattlery tattletale tattling tattlingly tattoo tattooage tattooer tattooing tattooist tattooment tattva tatty tatu tatukira tau taught taula taum taun taunt taunter taunting tauntingly tauntingness tauntress taupe taupo taupou taur tauranga taurean taurian tauric tauricide tauricornous tauriferous tauriform taurine taurite taurobolium tauroboly taurocephalous taurocholate taurocholic taurocol taurocolla taurodont tauroesque taurokathapsia taurolatry tauromachian tauromachic tauromachy tauromorphic tauromorphous taurophile taurophobe tauryl taut tautaug tauted tautegorical tautegory tauten tautirite tautit tautly tautness tautochrone tautochronism tautochronous tautog tautologic tautological tautologically tautologicalness tautologism tautologist tautologize tautologizer tautologous tautologously tautology tautomer tautomeral tautomeric tautomerism tautomerizable tautomerization tautomerize tautomery tautometer tautometric tautometrical tautomorphous tautonym tautonymic tautonymy tautoousian tautoousious tautophonic tautophonical tautophony tautopodic tautopody tautosyllabic tautotype tautourea tautousian tautousious tautozonal tautozonality tav tave tavell taver tavern taverner tavernize tavernless tavernlike tavernly tavernous tavernry tavernwards tavers tavert tavistockite tavola tavolatite taw tawa tawdered tawdrily tawdriness tawdry tawer tawery tawie tawite tawkee tawkin tawn tawney tawnily tawniness tawnle tawny tawpi tawpie taws tawse tawtie tax taxability taxable taxableness taxably taxaceous taxameter taxaspidean taxation taxational taxative taxatively taxator taxeater taxeating taxed taxeme taxemic taxeopod taxeopodous taxeopody taxer taxgatherer taxgathering taxi taxiable taxiarch taxiauto taxibus taxicab taxidermal taxidermic taxidermist taxidermize taxidermy taximan taximeter taximetered taxine taxing taxingly taxinomic taxinomist taxinomy taxiplane taxis taxite taxitic taxless taxlessly taxlessness taxman taxodont taxology taxometer taxon taxonomer taxonomic taxonomical taxonomically taxonomist taxonomy taxor taxpaid taxpayer taxpaying taxwax taxy tay tayer tayir taylorite tayra taysaam tazia tch tchai tcharik tchast tche tcheirek tchervonets tchervonetz tchick tchu tck te tea teaberry teaboard teabox teaboy teacake teacart teach teachability teachable teachableness teachably teache teacher teacherage teacherdom teacheress teacherhood teacherless teacherlike teacherly teachership teachery teaching teachingly teachless teachment teachy teacup teacupful tead teadish teaer teaey teagardeny teagle teahouse teaish teaism teak teakettle teakwood teal tealeafy tealery tealess teallite team teamaker teamaking teaman teameo teamer teaming teamland teamless teamman teammate teamsman teamster teamwise teamwork tean teanal teap teapot teapotful teapottykin teapoy tear tearable tearableness tearably tearage tearcat teardown teardrop tearer tearful tearfully tearfulness tearing tearless tearlessly tearlessness tearlet tearlike tearoom tearpit tearproof tearstain teart tearthroat tearthumb teary teasable teasableness teasably tease teaseable teaseableness teaseably teasehole teasel teaseler teaseller teasellike teaselwort teasement teaser teashop teasiness teasing teasingly teasler teaspoon teaspoonful teasy teat teataster teated teatfish teathe teather teatime teatlike teatling teatman teaty teave teaware teaze teazer tebbet tec teca tecali tech techily techiness technetium technic technica technical technicalism technicalist technicality technicalize technically technicalness technician technicism technicist technicological technicology technicon technics techniphone technique techniquer technism technist technocausis technochemical technochemistry technocracy technocrat technocratic technographer technographic technographical technographically technography technolithic technologic technological technologically technologist technologue technology technonomic technonomy technopsychology techous techy teck tecnoctonia tecnology tecomin tecon tectal tectibranch tectibranchian tectibranchiate tectiform tectocephalic tectocephaly tectological tectology tectonic tectonics tectorial tectorium tectosphere tectospinal tectospondylic tectospondylous tectrices tectricial tectum tecum tecuma ted tedder tedescan tedge tediosity tedious tediously tediousness tediousome tedisome tedium tee teedle teel teem teemer teemful teemfulness teeming teemingly teemingness teemless teems teen teenage teenet teens teensy teenty teeny teer teerer teest teet teetaller teetan teeter teeterboard teeterer teetertail teeth teethache teethbrush teethe teethful teethily teething teethless teethlike teethridge teethy teeting teetotal teetotaler teetotalism teetotalist teetotally teetotum teetotumism teetotumize teetotumwise teety teevee teewhaap teff teg tegmen tegmental tegmentum tegmina tegminal tegua teguexin tegula tegular tegularly tegulated tegumen tegument tegumental tegumentary tegumentum tegurium tehseel tehseeldar tehsil tehsildar teicher teiglech teil teind teindable teinder teinland teinoscope teioid tejon teju tekiah tekke tekken teknonymous teknonymy tektite tekya telacoustic telakucha telamon telang telangiectasia telangiectasis telangiectasy telangiectatic telangiosis telar telarian telary telautogram telautograph telautographic telautographist telautography telautomatic telautomatically telautomatics tele teleanemograph teleangiectasia telebarograph telebarometer telecast telecaster telechemic telechirograph telecinematography telecode telecommunication telecryptograph telectroscope teledendrion teledendrite teledendron teledu telega telegenic telegnosis telegnostic telegonic telegonous telegony telegram telegrammatic telegrammic telegraph telegraphee telegrapheme telegrapher telegraphese telegraphic telegraphical telegraphically telegraphist telegraphone telegraphophone telegraphoscope telegraphy telehydrobarometer teleianthous teleiosis telekinematography telekinesis telekinetic telelectric telelectrograph telelectroscope telemanometer telemark telemechanic telemechanics telemechanism telemetacarpal telemeteorograph telemeteorographic telemeteorography telemeter telemetric telemetrical telemetrist telemetrograph telemetrographic telemetrography telemetry telemotor telencephal telencephalic telencephalon telenergic telenergy teleneurite teleneuron telengiscope teleobjective teleocephalous teleodesmacean teleodesmaceous teleodont teleologic teleological teleologically teleologism teleologist teleology teleometer teleophobia teleophore teleophyte teleoptile teleorganic teleoroentgenogram teleoroentgenography teleosaur teleosaurian teleost teleostean teleosteous teleostomate teleostome teleostomian teleostomous teleotemporal teleotrocha teleozoic teleozoon telepathic telepathically telepathist telepathize telepathy telepheme telephone telephoner telephonic telephonical telephonically telephonist telephonograph telephonographic telephony telephote telephoto telephotograph telephotographic telephotography telepicture teleplasm teleplasmic teleplastic telepost teleprinter teleradiophone teleran telergic telergical telergically telergy telescope telescopic telescopical telescopically telescopiform telescopist telescopy telescriptor teleseism teleseismic teleseismology teleseme telesia telesis telesmeter telesomatic telespectroscope telestereograph telestereography telestereoscope telesterion telesthesia telesthetic telestial telestic telestich teletactile teletactor teletape teletherapy telethermogram telethermograph telethermometer telethermometry telethon teletopometer teletranscription teletype teletyper teletypesetter teletypewriter teletyping teleuto teleutoform teleutosorus teleutospore teleutosporic teleutosporiferous teleview televiewer televise television televisional televisionary televisor televisual televocal televox telewriter telfairic telfer telferage telford telfordize telharmonic telharmonium telharmony teli telial telic telical telically teliferous teliosorus teliospore teliosporic teliosporiferous teliostage telium tell tellable tellach tellee teller tellership telligraph tellinacean tellinaceous telling tellingly tellinoid tellsome tellt telltale telltalely telltruth tellural tellurate telluret tellureted tellurethyl telluretted tellurhydric tellurian telluric telluride telluriferous tellurion tellurism tellurist tellurite tellurium tellurize telluronium tellurous telmatological telmatology teloblast teloblastic telocentric telodendrion telodendron telodynamic telokinesis telolecithal telolemma telome telomic telomitic telonism telophase telophragma telopsis teloptic telosynapsis telosynaptic telosynaptist teloteropathic teloteropathically teloteropathy telotrematous telotroch telotrocha telotrochal telotrochous telotrophic telotype telpath telpher telpherage telpherman telpherway telson telsonic telt telurgy telyn temacha temalacatl teman tembe temblor temenos temerarious temerariously temerariousness temeritous temerity temerous temerously temerousness temiak temin temnospondylous temp temper tempera temperability temperable temperably temperality temperament temperamental temperamentalist temperamentally temperamented temperance temperate temperately temperateness temperative temperature tempered temperedly temperedness temperer temperish temperless tempersome tempery tempest tempestical tempestive tempestively tempestivity tempestuous tempestuously tempestuousness tempesty tempi templar templardom templarism templarlike templarlikeness templary template templater temple templed templeful templeless templelike templet templeward templize tempo tempora temporal temporale temporalism temporalist temporality temporalize temporally temporalness temporalty temporaneous temporaneously temporaneousness temporarily temporariness temporary temporator temporization temporizer temporizing temporizingly temporoalar temporoauricular temporocentral temporocerebellar temporofacial temporofrontal temporohyoid temporomalar temporomandibular temporomastoid temporomaxillary temporooccipital temporoparietal temporopontine temporosphenoid temporosphenoidal temporozygomatic tempre temprely tempt temptability temptable temptableness temptation temptational temptationless temptatious temptatory tempter tempting temptingly temptingness temptress temse temser temulence temulency temulent temulentive temulently ten tenability tenable tenableness tenably tenace tenacious tenaciously tenaciousness tenacity tenaculum tenai tenaille tenaillon tenancy tenant tenantable tenantableness tenanter tenantism tenantless tenantlike tenantry tenantship tench tenchweed tend tendance tendant tendence tendency tendent tendential tendentious tendentiously tendentiousness tender tenderability tenderable tenderably tenderee tenderer tenderfoot tenderfootish tenderful tenderfully tenderheart tenderhearted tenderheartedly tenderheartedness tenderish tenderize tenderling tenderloin tenderly tenderness tenderometer tendersome tendinal tending tendingly tendinitis tendinous tendinousness tendomucoid tendon tendonous tendoplasty tendosynovitis tendotome tendotomy tendour tendovaginal tendovaginitis tendresse tendril tendriled tendriliferous tendrillar tendrilly tendrilous tendron tenebra tenebricose tenebrific tenebrificate tenebrionid tenebrious tenebriously tenebrity tenebrose tenebrosity tenebrous tenebrously tenebrousness tenectomy tenement tenemental tenementary tenementer tenementization tenementize tenendas tenendum tenent teneral tenesmic tenesmus tenet tenfold tenfoldness teng tengere tengerite tengu teniacidal teniacide tenible tenio tenline tenmantale tennantite tenne tenner tennis tennisdom tennisy tenodesis tenodynia tenography tenology tenomyoplasty tenomyotomy tenon tenonectomy tenoner tenonitis tenonostosis tenontagra tenontitis tenontodynia tenontography tenontolemmitis tenontology tenontomyoplasty tenontomyotomy tenontophyma tenontoplasty tenontothecitis tenontotomy tenophony tenophyte tenoplastic tenoplasty tenor tenorist tenorister tenorite tenorless tenoroon tenorrhaphy tenositis tenostosis tenosuture tenotome tenotomist tenotomize tenotomy tenovaginitis tenpence tenpenny tenpin tenrec tense tenseless tenselessness tensely tenseness tensibility tensible tensibleness tensibly tensify tensile tensilely tensileness tensility tensimeter tensiometer tension tensional tensionless tensity tensive tenson tensor tent tentability tentable tentacle tentacled tentaclelike tentacula tentacular tentaculate tentaculated tentaculite tentaculocyst tentaculoid tentaculum tentage tentamen tentation tentative tentatively tentativeness tented tenter tenterbelly tenterer tenterhook tentful tenth tenthly tenthmeter tenthredinid tenthredinoid tentiform tentigo tentillum tention tentless tentlet tentlike tentmaker tentmaking tentmate tentorial tentorium tenture tentwards tentwise tentwork tentwort tenty tenuate tenues tenuicostate tenuifasciate tenuiflorous tenuifolious tenuious tenuiroster tenuirostral tenuirostrate tenuis tenuistriate tenuity tenuous tenuously tenuousness tenure tenurial tenurially teocalli teopan teosinte tepache tepal tepee tepefaction tepefy tepetate tephillin tephramancy tephrite tephritic tephroite tephromalacia tephromyelitic tephrosis tepid tepidarium tepidity tepidly tepidness tepomporize teponaztli tepor tequila tera teraglin terakihi teramorphous terap teraphim teras teratical teratism teratoblastoma teratogenesis teratogenetic teratogenic teratogenous teratogeny teratoid teratological teratologist teratology teratoma teratomatous teratoscopy teratosis terbia terbic terbium tercel tercelet tercentenarian tercentenarize tercentenary tercentennial tercer terceron tercet terchloride tercia tercine tercio terdiurnal terebate terebella terebellid terebelloid terebellum terebene terebenic terebenthene terebic terebilic terebinic terebinth terebinthial terebinthian terebinthic terebinthina terebinthinate terebinthine terebinthinous terebra terebral terebrant terebrate terebration terebratular terebratulid terebratuliform terebratuline terebratulite terebratuloid teredo terek terephthalate terephthalic terete teretial tereticaudate teretifolious teretipronator teretiscapular teretiscapularis teretish tereu terfez tergal tergant tergeminate tergeminous tergiferous tergite tergitic tergiversant tergiversate tergiversation tergiversator tergiversatory tergiverse tergolateral tergum terlinguaite term terma termagancy termagant termagantish termagantism termagantly termage termatic termen termer termillenary termin terminability terminable terminableness terminably terminal terminalization terminalized terminally terminant terminate termination terminational terminative terminatively terminator terminatory termine terminer termini terminine terminism terminist terministic terminize termino terminological terminologically terminologist terminology terminus termital termitarium termitary termite termitic termitid termitophagous termitophile termitophilous termless termlessly termlessness termly termolecular termon termor termtime tern terna ternal ternar ternariant ternarious ternary ternate ternately ternatipinnate ternatisect ternatopinnate terne terneplate ternery ternion ternize ternlet teroxide terp terpadiene terpane terpene terpeneless terphenyl terpilene terpin terpine terpinene terpineol terpinol terpinolene terpodion terpsichoreal terpsichoreally terpsichorean terrace terraceous terracer terracette terracewards terracewise terracework terraciform terracing terraculture terraefilial terraefilian terrage terrain terral terramara terramare terrane terranean terraneous terrapin terraquean terraqueous terraqueousness terrar terrarium terrazzo terrella terremotive terrene terrenely terreneness terreplein terrestrial terrestrialism terrestriality terrestrialize terrestrially terrestrialness terrestricity terrestrious terret terreted terribility terrible terribleness terribly terricole terricoline terricolous terrier terrierlike terrific terrifical terrifically terrification terrificly terrificness terrifiedly terrifier terrify terrifying terrifyingly terrigenous terrine territelarian territorial territorialism territorialist territoriality territorialization territorialize territorially territorian territoried territory terron terror terrorful terrorific terrorism terrorist terroristic terroristical terrorization terrorize terrorizer terrorless terrorproof terrorsome terry terse tersely terseness tersion tersulphate tersulphide tersulphuret tertenant tertia tertial tertian tertiana tertianship tertiarian tertiary tertiate tertius terton tertrinal teruncius terutero tervalence tervalency tervalent tervariant tervee terzetto terzina terzo tesack tesarovitch teschenite teschermacherite teskere teskeria tessara tessarace tessaraconter tessaradecad tessaraglot tessaraphthong tessarescaedecahedron tessel tessella tessellar tessellate tessellated tessellation tessera tesseract tesseradecade tesseraic tesseral tesserarian tesserate tesserated tesseratomic tesseratomy tessular test testa testable testacean testaceography testaceology testaceous testaceousness testacy testament testamental testamentally testamentalness testamentarily testamentary testamentate testamentation testamentum testamur testar testata testate testation testator testatorship testatory testatrices testatrix testatum teste tested testee tester testes testibrachial testibrachium testicardinate testicardine testicle testicond testicular testiculate testiculated testiere testificate testification testificator testificatory testifier testify testily testimonial testimonialist testimonialization testimonialize testimonializer testimonium testimony testiness testing testingly testis teston testone testoon testor testosterone testril testudinal testudinarious testudinate testudinated testudineal testudineous testudinous testudo testy tetanic tetanical tetanically tetaniform tetanigenous tetanilla tetanine tetanism tetanization tetanize tetanoid tetanolysin tetanomotor tetanospasmin tetanotoxin tetanus tetany tetarcone tetarconid tetard tetartemorion tetartocone tetartoconid tetartohedral tetartohedrally tetartohedrism tetartohedron tetartoid tetartosymmetry tetch tetchy tete tetel teterrimous teth tethelin tether tetherball tethery tethydan tetra tetraamylose tetrabasic tetrabasicity tetrabelodont tetrabiblos tetraborate tetraboric tetrabrach tetrabranch tetrabranchiate tetrabromid tetrabromide tetrabromo tetrabromoethane tetracadactylity tetracarboxylate tetracarboxylic tetracarpellary tetraceratous tetracerous tetrachical tetrachlorid tetrachloride tetrachloro tetrachloroethane tetrachloroethylene tetrachloromethane tetrachord tetrachordal tetrachordon tetrachoric tetrachotomous tetrachromatic tetrachromic tetrachronous tetracid tetracoccous tetracoccus tetracolic tetracolon tetracoral tetracoralline tetracosane tetract tetractinal tetractine tetractinellid tetractinellidan tetractinelline tetractinose tetracyclic tetrad tetradactyl tetradactylous tetradactyly tetradarchy tetradecane tetradecanoic tetradecapod tetradecapodan tetradecapodous tetradecyl tetradiapason tetradic tetradrachma tetradrachmal tetradrachmon tetradymite tetradynamian tetradynamious tetradynamous tetraedron tetraedrum tetraethylsilane tetrafluoride tetrafolious tetragamy tetragenous tetraglot tetraglottic tetragon tetragonal tetragonally tetragonalness tetragonidium tetragonous tetragonus tetragram tetragrammatic tetragrammatonic tetragyn tetragynian tetragynous tetrahedral tetrahedrally tetrahedric tetrahedrite tetrahedroid tetrahedron tetrahexahedral tetrahexahedron tetrahydrate tetrahydrated tetrahydric tetrahydride tetrahydro tetrahydroxy tetraiodid tetraiodide tetraiodo tetraiodophenolphthalein tetrakaidecahedron tetraketone tetrakisazo tetrakishexahedron tetralemma tetralogic tetralogue tetralogy tetralophodont tetramastia tetramastigote tetrameral tetrameralian tetrameric tetramerism tetramerous tetrameter tetramethyl tetramethylammonium tetramethylene tetramethylium tetramin tetramine tetrammine tetramorph tetramorphic tetramorphism tetramorphous tetrander tetrandrian tetrandrous tetrane tetranitrate tetranitro tetranitroaniline tetranuclear tetraodont tetraonid tetraonine tetrapartite tetrapetalous tetraphalangeate tetrapharmacal tetrapharmacon tetraphenol tetraphony tetraphosphate tetraphyllous tetrapla tetraplegia tetrapleuron tetraploid tetraploidic tetraploidy tetraplous tetrapneumonian tetrapneumonous tetrapod tetrapodic tetrapody tetrapolar tetrapolis tetrapolitan tetrapous tetraprostyle tetrapteran tetrapteron tetrapterous tetraptote tetraptych tetrapylon tetrapyramid tetrapyrenous tetraquetrous tetrarch tetrarchate tetrarchic tetrarchy tetrasaccharide tetrasalicylide tetraselenodont tetraseme tetrasemic tetrasepalous tetraskelion tetrasome tetrasomic tetrasomy tetraspermal tetraspermatous tetraspermous tetraspheric tetrasporange tetrasporangiate tetrasporangium tetraspore tetrasporic tetrasporiferous tetrasporous tetraster tetrastich tetrastichal tetrastichic tetrastichous tetrastoon tetrastyle tetrastylic tetrastylos tetrastylous tetrasubstituted tetrasubstitution tetrasulphide tetrasyllabic tetrasyllable tetrasymmetry tetrathecal tetratheism tetratheite tetrathionates tetrathionic tetratomic tetratone tetravalence tetravalency tetravalent tetraxial tetraxon tetraxonian tetraxonid tetrazane tetrazene tetrazin tetrazine tetrazo tetrazole tetrazolium tetrazolyl tetrazone tetrazotization tetrazotize tetrazyl tetremimeral tetrevangelium tetric tetrical tetricity tetricous tetrigid tetriodide tetrobol tetrobolon tetrode tetrodont tetrole tetrolic tetronic tetronymal tetrose tetroxalate tetroxide tetrsyllabical tetryl tetrylene tetter tetterish tetterous tetterwort tettery tettigoniid tettix teucrin teufit teuk teviss tew tewel tewer tewit tewly tewsome texguino text textarian textbook textbookless textiferous textile textilist textlet textman textorial textrine textual textualism textualist textuality textually textuarist textuary textural texturally texture textureless tez tezkere th tha thack thacker thackless thakur thakurate thalamencephalic thalamencephalon thalami thalamic thalamifloral thalamiflorous thalamite thalamium thalamocele thalamocoele thalamocortical thalamocrural thalamolenticular thalamomammillary thalamopeduncular thalamotegmental thalamotomy thalamus thalassal thalassian thalassic thalassinid thalassinidian thalassinoid thalassiophyte thalassiophytous thalasso thalassocracy thalassocrat thalassographer thalassographic thalassographical thalassography thalassometer thalassophilous thalassophobia thalassotherapy thalattology thalenite thaler thaliacean thalli thallic thalliferous thalliform thalline thallious thallium thallochlore thallodal thallogen thallogenic thallogenous thalloid thallome thallophyte thallophytic thallose thallous thallus thalposis thalpotic thalthan thameng thamnium thamnophile thamnophiline thamuria than thana thanadar thanage thanan thanatism thanatist thanatobiologic thanatognomonic thanatographer thanatography thanatoid thanatological thanatologist thanatology thanatomantic thanatometer thanatophidia thanatophidian thanatophobe thanatophobia thanatophobiac thanatophoby thanatopsis thanatosis thanatotic thanatousia thane thanedom thanehood thaneland thaneship thank thankee thanker thankful thankfully thankfulness thankless thanklessly thanklessness thanks thanksgiver thanksgiving thankworthily thankworthiness thankworthy thapes thapsia thar tharf tharfcake tharginyah tharm that thatch thatcher thatching thatchless thatchwood thatchwork thatchy thatn thatness thats thaught thaumasite thaumatogeny thaumatography thaumatolatry thaumatology thaumatrope thaumatropical thaumaturge thaumaturgia thaumaturgic thaumaturgical thaumaturgics thaumaturgism thaumaturgist thaumaturgy thaumoscopic thave thaw thawer thawless thawn thawy the theaceous theah theandric theanthropic theanthropical theanthropism theanthropist theanthropology theanthropophagy theanthropos theanthroposophy theanthropy thearchic thearchy theasum theat theater theatergoer theatergoing theaterless theaterlike theaterward theaterwards theaterwise theatral theatric theatricable theatrical theatricalism theatricality theatricalization theatricalize theatrically theatricalness theatricals theatrician theatricism theatricize theatrics theatrize theatrocracy theatrograph theatromania theatromaniac theatron theatrophile theatrophobia theatrophone theatrophonic theatropolis theatroscope theatry theave theb thebaine thebaism theca thecae thecal thecaphore thecasporal thecaspore thecaspored thecasporous thecate thecia thecitis thecium thecla theclan thecodont thecoglossate thecoid thecosomatous thee theek theeker theelin theelol theer theet theetsee theezan theft theftbote theftdom theftless theftproof theftuous theftuously thegether thegidder thegither thegn thegndom thegnhood thegnland thegnlike thegnly thegnship thegnworthy theiform theine theinism their theirn theirs theirselves theirsens theism theist theistic theistical theistically thelalgia thelemite theligonaceous thelitis thelium theloncus thelorrhagia thelphusian thelyblast thelyblastic thelyotokous thelyotoky thelyplasty thelytocia thelytoky thelytonic them thema themata thematic thematical thematically thematist theme themeless themelet themer themis themsel themselves then thenabouts thenadays thenal thenar thenardite thence thenceafter thenceforth thenceforward thenceforwards thencefrom thenceward thenness theoanthropomorphic theoanthropomorphism theoastrological theobromic theobromine theocentric theocentricism theocentrism theochristic theocollectivism theocollectivist theocracy theocrasia theocrasical theocrasy theocrat theocratic theocratical theocratically theocratist theodemocracy theodicaea theodicean theodicy theodidact theodolite theodolitic theodrama theody theogamy theogeological theognostic theogonal theogonic theogonism theogonist theogony theohuman theokrasia theoktonic theoktony theolatrous theolatry theolepsy theoleptic theologal theologaster theologastric theologate theologeion theologer theologi theologian theologic theological theologically theologician theologicoastronomical theologicoethical theologicohistorical theologicometaphysical theologicomilitary theologicomoral theologiconatural theologicopolitical theologics theologism theologist theologium theologization theologize theologizer theologoumena theologoumenon theologue theologus theology theomachia theomachist theomachy theomammomist theomancy theomania theomaniac theomantic theomastix theomicrist theomisanthropist theomorphic theomorphism theomorphize theomythologer theomythology theonomy theopantism theopathetic theopathic theopathy theophagic theophagite theophagous theophagy theophania theophanic theophanism theophanous theophany theophilanthrope theophilanthropic theophilanthropism theophilanthropist theophilanthropy theophile theophilist theophilosophic theophobia theophoric theophorous theophrastaceous theophylline theophysical theopneust theopneusted theopneustia theopneustic theopneusty theopolitician theopolitics theopolity theopsychism theorbist theorbo theorem theorematic theorematical theorematically theorematist theoremic theoretic theoretical theoreticalism theoretically theoretician theoreticopractical theoretics theoria theoriai theoric theorical theorically theorician theoricon theorics theorism theorist theorization theorize theorizer theorum theory theoryless theorymonger theosoph theosopheme theosophic theosophical theosophically theosophism theosophist theosophistic theosophistical theosophize theosophy theotechnic theotechnist theotechny theoteleological theoteleology theotherapy theow theowdom theowman theralite therapeusis therapeutic therapeutical therapeutically therapeutics therapeutism therapeutist theraphose theraphosid theraphosoid therapist therapsid therapy therblig there thereabouts thereabove thereacross thereafter thereafterward thereagainst thereamong thereamongst thereanent thereanents therearound thereas thereat thereaway thereaways therebeside therebesides therebetween thereby thereckly therefor therefore therefrom therehence therein thereinafter thereinbefore thereinto therence thereness thereof thereoid thereologist thereology thereon thereout thereover thereright theres therese therethrough theretill thereto theretofore theretoward thereunder thereuntil thereunto thereup thereupon therevid therewhile therewith therewithal therewithin theriac theriaca theriacal therial therianthropic therianthropism theriatrics theridiid theriodic theriodont theriolatry theriomancy theriomaniac theriomimicry theriomorph theriomorphic theriomorphism theriomorphosis theriomorphous theriotheism theriotrophical theriozoic therm thermacogenesis thermae thermal thermalgesia thermality thermally thermanalgesia thermanesthesia thermantic thermantidote thermatologic thermatologist thermatology thermesthesia thermesthesiometer thermetograph thermetrograph thermic thermically thermion thermionic thermionically thermionics thermistor thermit thermite thermo thermoammeter thermoanalgesia thermoanesthesia thermobarograph thermobarometer thermobattery thermocautery thermochemic thermochemical thermochemically thermochemist thermochemistry thermochroic thermochrosy thermocline thermocouple thermocurrent thermodiffusion thermoduric thermodynamic thermodynamical thermodynamically thermodynamician thermodynamicist thermodynamics thermodynamist thermoelectric thermoelectrical thermoelectrically thermoelectricity thermoelectrometer thermoelectromotive thermoelement thermoesthesia thermoexcitory thermogalvanometer thermogen thermogenerator thermogenesis thermogenetic thermogenic thermogenous thermogeny thermogeographical thermogeography thermogram thermograph thermography thermohyperesthesia thermojunction thermokinematics thermolabile thermolability thermological thermology thermoluminescence thermoluminescent thermolysis thermolytic thermolyze thermomagnetic thermomagnetism thermometamorphic thermometamorphism thermometer thermometerize thermometric thermometrical thermometrically thermometrograph thermometry thermomotive thermomotor thermomultiplier thermonastic thermonasty thermonatrite thermoneurosis thermoneutrality thermonous thermonuclear thermopair thermopalpation thermopenetration thermoperiod thermoperiodic thermoperiodicity thermoperiodism thermophile thermophilic thermophilous thermophobous thermophone thermophore thermophosphor thermophosphorescence thermopile thermoplastic thermoplasticity thermoplegia thermopleion thermopolymerization thermopolypnea thermopolypneic thermoradiotherapy thermoreduction thermoregulation thermoregulator thermoresistance thermoresistant thermos thermoscope thermoscopic thermoscopical thermoscopically thermosetting thermosiphon thermostability thermostable thermostat thermostatic thermostatically thermostatics thermostimulation thermosynthesis thermosystaltic thermosystaltism thermotactic thermotank thermotaxic thermotaxis thermotelephone thermotensile thermotension thermotherapeutics thermotherapy thermotic thermotical thermotically thermotics thermotropic thermotropism thermotropy thermotype thermotypic thermotypy thermovoltaic therodont theroid therolatry therologic therological therologist therology theromorph theromorphia theromorphic theromorphism theromorphological theromorphology theromorphous theropod theropodous thersitean thersitical thesauri thesaurus these theses thesial thesicle thesis thesmothetae thesmothete thesmothetes thesocyte thestreen theta thetch thetic thetical thetically thetics thetin thetine theurgic theurgical theurgically theurgist theurgy thevetin thew thewed thewless thewness thewy they theyll theyre thiacetic thiadiazole thialdine thiamide thiamin thiamine thianthrene thiasi thiasine thiasite thiasoi thiasos thiasote thiasus thiazine thiazole thiazoline thick thickbrained thicken thickener thickening thicket thicketed thicketful thickety thickhead thickheaded thickheadedly thickheadedness thickish thickleaf thicklips thickly thickneck thickness thicknessing thickset thickskin thickskull thickskulled thickwind thickwit thief thiefcraft thiefdom thiefland thiefmaker thiefmaking thiefproof thieftaker thiefwise thienone thienyl thievable thieve thieveless thiever thievery thieving thievingly thievish thievishly thievishness thig thigger thigging thigh thighbone thighed thight thightness thigmonegative thigmopositive thigmotactic thigmotactically thigmotaxis thigmotropic thigmotropically thigmotropism thilk thill thiller thilly thimber thimble thimbleberry thimbled thimbleflower thimbleful thimblelike thimblemaker thimblemaking thimbleman thimblerig thimblerigger thimbleriggery thimblerigging thimbleweed thin thinbrained thine thing thingal thingamabob thinghood thinginess thingish thingless thinglet thinglike thinglikeness thingliness thingly thingman thingness thingstead thingum thingumajig thingumbob thingummy thingy think thinkable thinkableness thinkably thinker thinkful thinking thinkingly thinkingpart thinkling thinly thinner thinness thinning thinnish thinolite thio thioacetal thioacetic thioalcohol thioaldehyde thioamide thioantimonate thioantimoniate thioantimonious thioantimonite thioarsenate thioarseniate thioarsenic thioarsenious thioarsenite thiobacteria thiobismuthite thiocarbamic thiocarbamide thiocarbamyl thiocarbanilide thiocarbimide thiocarbonate thiocarbonic thiocarbonyl thiochloride thiochrome thiocresol thiocyanate thiocyanation thiocyanic thiocyanide thiocyano thiocyanogen thiodiazole thiodiphenylamine thiofuran thiofurane thiofurfuran thiofurfurane thiogycolic thiohydrate thiohydrolysis thiohydrolyze thioindigo thioketone thiol thiolacetic thiolactic thiolic thionamic thionaphthene thionate thionation thioneine thionic thionine thionitrite thionium thionobenzoic thionthiolic thionurate thionyl thionylamine thiophen thiophene thiophenic thiophenol thiophosgene thiophosphate thiophosphite thiophosphoric thiophosphoryl thiophthene thiopyran thioresorcinol thiosinamine thiostannate thiostannic thiostannite thiostannous thiosulphate thiosulphonic thiosulphuric thiotolene thiotungstate thiotungstic thiouracil thiourea thiourethan thiourethane thioxene thiozone thiozonide thir third thirdborough thirdings thirdling thirdly thirdness thirdsman thirl thirlage thirling thirst thirster thirstful thirstily thirstiness thirsting thirstingly thirstland thirstle thirstless thirstlessness thirstproof thirsty thirt thirteen thirteener thirteenfold thirteenth thirteenthly thirtieth thirty thirtyfold thirtyish this thishow thislike thisn thisness thissen thistle thistlebird thistled thistledown thistlelike thistleproof thistlery thistlish thistly thiswise thither thitherto thitherward thitsiol thiuram thivel thixle thixolabile thixotropic thixotropy thlipsis tho thob thocht thof thoft thoftfellow thoke thokish thole tholeiite tholepin tholi tholoi tholos tholus thomasing thomisid thomsenolite thomsonite thon thonder thone thong thonged thongman thongy thoo thooid thoom thoracalgia thoracaorta thoracectomy thoracentesis thoraces thoracic thoracical thoracicoabdominal thoracicoacromial thoracicohumeral thoracicolumbar thoraciform thoracispinal thoracoabdominal thoracoacromial thoracobronchotomy thoracoceloschisis thoracocentesis thoracocyllosis thoracocyrtosis thoracodelphus thoracodidymus thoracodorsal thoracodynia thoracogastroschisis thoracograph thoracohumeral thoracolumbar thoracolysis thoracomelus thoracometer thoracometry thoracomyodynia thoracopagus thoracoplasty thoracoschisis thoracoscope thoracoscopy thoracostenosis thoracostomy thoracostracan thoracostracous thoracotomy thoral thorascope thorax thore thoria thorianite thoriate thoric thoriferous thorina thorite thorium thorn thornback thornbill thornbush thorned thornen thornhead thornily thorniness thornless thornlessness thornlet thornlike thornproof thornstone thorntail thorny thoro thorocopagous thorogummite thoron thorough thoroughbred thoroughbredness thoroughfare thoroughfarer thoroughfaresome thoroughfoot thoroughgoing thoroughgoingly thoroughgoingness thoroughgrowth thoroughly thoroughness thoroughpaced thoroughpin thoroughsped thoroughstem thoroughstitch thoroughstitched thoroughwax thoroughwort thorp thort thorter thortveitite those thou though thought thoughted thoughten thoughtful thoughtfully thoughtfulness thoughtkin thoughtless thoughtlessly thoughtlessness thoughtlet thoughtness thoughtsick thoughty thousand thousandfold thousandfoldly thousandth thousandweight thouse thow thowel thowless thowt thrack thraep thrail thrain thrall thrallborn thralldom thram thrammle thrang thrangity thranite thranitic thrap thrapple thrash thrashel thrasher thrasherman thrashing thrasonic thrasonical thrasonically thrast thrave thraver thraw thrawcrook thrawn thrawneen thread threadbare threadbareness threadbarity threaded threaden threader threadfin threadfish threadflower threadfoot threadiness threadle threadless threadlet threadlike threadmaker threadmaking threadway threadweed threadworm thready threap threaper threat threaten threatenable threatener threatening threateningly threatful threatfully threatless threatproof three threefold threefolded threefoldedness threefoldly threefoldness threeling threeness threepence threepenny threepennyworth threescore threesome thremmatology threne threnetic threnetical threnode threnodial threnodian threnodic threnodical threnodist threnody threnos threonin threonine threose threpsology threptic thresh threshel thresher thresherman threshingtime threshold threw thribble thrice thricecock thridacium thrift thriftbox thriftily thriftiness thriftless thriftlessly thriftlessness thriftlike thrifty thrill thriller thrillful thrillfully thrilling thrillingly thrillingness thrillproof thrillsome thrilly thrimble thrimp thring thrinter thrioboly thrip thripel thripple thrips thrive thriveless thriven thriver thriving thrivingly thrivingness thro throat throatal throatband throated throatful throatily throatiness throating throatlash throatlatch throatless throatlet throatroot throatstrap throatwort throaty throb throbber throbbingly throbless throck throdden throddy throe thrombase thrombin thromboangiitis thromboarteritis thrombocyst thrombocyte thrombocytopenia thrombogen thrombogenic thromboid thrombokinase thrombolymphangitis thrombopenia thrombophlebitis thromboplastic thromboplastin thrombose thrombosis thrombostasis thrombotic thrombus thronal throne thronedom throneless thronelet thronelike throneward throng thronger throngful throngingly thronize thropple throstle throstlelike throttle throttler throttling throttlingly throu throuch throucht through throughbear throughbred throughcome throughgang throughganging throughgoing throughgrow throughknow throughout throughput throve throw throwaway throwback throwdown thrower throwing thrown throwoff throwout throwster throwwort thrum thrummer thrummers thrummy thrumwort thrush thrushel thrushlike thrushy thrust thruster thrustful thrustfulness thrusting thrustings thrutch thrutchings thruv thrymsa thud thudding thuddingly thug thugdom thuggee thuggeeism thuggery thuggess thuggish thuggism thujene thujin thujone thujyl thulia thulir thulite thulium thulr thuluth thumb thumbbird thumbed thumber thumbkin thumble thumbless thumblike thumbmark thumbnail thumbpiece thumbprint thumbrope thumbscrew thumbstall thumbstring thumbtack thumby thumlungur thump thumper thumping thumpingly thunbergilene thunder thunderation thunderball thunderbearer thunderbearing thunderbird thunderblast thunderbolt thunderburst thunderclap thundercloud thundercrack thunderer thunderfish thunderflower thunderful thunderhead thunderheaded thundering thunderingly thunderless thunderlike thunderous thunderously thunderousness thunderpeal thunderplump thunderproof thundershower thundersmite thundersquall thunderstick thunderstone thunderstorm thunderstrike thunderstroke thunderstruck thunderwood thunderworm thunderwort thundery thundrous thundrously thung thunge thuoc thurible thuribuler thuribulum thurifer thuriferous thurificate thurificati thurification thurify thuringite thurl thurm thurmus thurrock thurse thurt thus thusgate thusly thusness thuswise thutter thwack thwacker thwacking thwackingly thwackstave thwaite thwart thwartedly thwarteous thwarter thwarting thwartingly thwartly thwartman thwartness thwartover thwartsaw thwartship thwartships thwartways thwartwise thwite thwittle thy thyine thylacine thylacitis thymacetin thymate thyme thymectomize thymectomy thymegol thymelaeaceous thymelcosis thymele thymelic thymelical thymelici thymene thymetic thymic thymicolymphatic thymine thymiosis thymitis thymocyte thymogenic thymol thymolate thymolize thymolphthalein thymolsulphonephthalein thymoma thymonucleic thymopathy thymoprivic thymoprivous thymopsyche thymoquinone thymotactic thymotic thymus thymy thymyl thymylic thynnid thyratron thyreoadenitis thyreoantitoxin thyreoarytenoid thyreoarytenoideus thyreocervical thyreocolloid thyreoepiglottic thyreogenic thyreogenous thyreoglobulin thyreoglossal thyreohyal thyreohyoid thyreoid thyreoidal thyreoideal thyreoidean thyreoidectomy thyreoiditis thyreoitis thyreolingual thyreoprotein thyreosis thyreotomy thyreotoxicosis thyreotropic thyridial thyridium thyrisiferous thyroadenitis thyroantitoxin thyroarytenoid thyroarytenoideus thyrocardiac thyrocele thyrocervical thyrocolloid thyrocricoid thyroepiglottic thyroepiglottidean thyrogenic thyroglobulin thyroglossal thyrohyal thyrohyoid thyrohyoidean thyroid thyroidal thyroidea thyroideal thyroidean thyroidectomize thyroidectomy thyroidism thyroiditis thyroidization thyroidless thyroidotomy thyroiodin thyrolingual thyronine thyroparathyroidectomize thyroparathyroidectomy thyroprival thyroprivia thyroprivic thyroprivous thyroprotein thyrostracan thyrotherapy thyrotomy thyrotoxic thyrotoxicosis thyrotropic thyroxine thyrse thyrsiflorous thyrsiform thyrsoid thyrsoidal thyrsus thysanopter thysanopteran thysanopteron thysanopterous thysanouran thysanourous thysanuran thysanurian thysanuriform thysanurous thysel thyself thysen ti tiang tiao tiar tiara tiaralike tiarella tib tibby tibet tibey tibia tibiad tibiae tibial tibiale tibicinist tibiocalcanean tibiofemoral tibiofibula tibiofibular tibiometatarsal tibionavicular tibiopopliteal tibioscaphoid tibiotarsal tibiotarsus tibourbou tiburon tic tical ticca tice ticement ticer tichodrome tichorrhine tick tickbean tickbird tickeater ticked ticken ticker ticket ticketer ticketing ticketless ticketmonger tickey tickicide tickie ticking tickle tickleback ticklebrain tickled ticklely ticklenburg tickleness tickleproof tickler ticklesome tickless tickleweed tickling ticklingly ticklish ticklishly ticklishness tickly tickney tickproof tickseed tickseeded ticktack ticktacker ticktacktoe ticktick ticktock tickweed ticky ticul tid tidal tidally tidbit tiddle tiddledywinks tiddler tiddley tiddling tiddlywink tiddlywinking tiddy tide tided tideful tidehead tideland tideless tidelessness tidelike tidely tidemaker tidemaking tidemark tiderace tidesman tidesurveyor tidewaiter tidewaitership tideward tidewater tideway tidiable tidily tidiness tiding tidingless tidings tidley tidological tidology tidy tidyism tidytips tie tieback tied tiemaker tiemaking tiemannite tien tiepin tier tierce tierced tierceron tiered tierer tierlike tiersman tietick tiewig tiewigged tiff tiffany tiffanyite tiffie tiffin tiffish tiffle tiffy tifinagh tift tifter tig tige tigella tigellate tigelle tigellum tigellus tiger tigerbird tigereye tigerflower tigerfoot tigerhearted tigerhood tigerish tigerishly tigerishness tigerism tigerkin tigerlike tigerling tigerly tigernut tigerproof tigerwood tigery tigger tight tighten tightener tightfisted tightish tightly tightness tightrope tights tightwad tightwire tiglaldehyde tiglic tiglinic tignum tigress tigresslike tigrine tigroid tigrolysis tigrolytic tigtag tikitiki tikka tikker tiklin tikolosh tikor tikur til tilaite tilaka tilasite tilbury tilde tile tiled tilefish tilelike tilemaker tilemaking tiler tileroot tilery tileseed tilestone tileways tilework tileworks tilewright tileyard tiliaceous tilikum tiling till tillable tillage tiller tillering tillerless tillerman tilletiaceous tilley tillite tillodont tillot tillotter tilly tilmus tilpah tilt tiltable tiltboard tilter tilth tilting tiltlike tiltmaker tiltmaking tiltup tilty tiltyard tilyer timable timaliine timaline timar timarau timawa timazite timbal timbale timbang timbe timber timbered timberer timberhead timbering timberjack timberland timberless timberlike timberling timberman timbermonger timbern timbersome timbertuned timberwood timberwork timberwright timbery timberyard timbo timbre timbrel timbreled timbreler timbrologist timbrology timbromania timbromaniac timbromanist timbrophilic timbrophilism timbrophilist timbrophily time timeable timecard timed timeful timefully timefulness timekeep timekeeper timekeepership timeless timelessly timelessness timeliine timelily timeliness timeling timely timenoguy timeous timeously timepiece timepleaser timeproof timer times timesaver timesaving timeserver timeserving timeservingness timetable timetaker timetaking timeward timework timeworker timeworn timid timidity timidly timidness timing timish timist timocracy timocratic timocratical timon timoneer timor timorous timorously timorousness timothy timpani timpanist timpano tin tinamine tinamou tinampipi tincal tinchel tinchill tinclad tinct tinction tinctorial tinctorially tinctorious tinctumutation tincture tind tindal tindalo tinder tinderbox tindered tinderish tinderlike tinderous tindery tine tinea tineal tinean tined tinegrass tineid tineine tineman tineoid tinetare tinety tineweed tinful ting tinge tinged tinger tingi tingibility tingible tingid tingitid tinglass tingle tingler tingletangle tingling tinglingly tinglish tingly tingtang tinguaite tinguaitic tinguy tinhorn tinhouse tinily tininess tining tink tinker tinkerbird tinkerdom tinkerer tinkerlike tinkerly tinkershire tinkershue tinkerwise tinkle tinkler tinklerman tinkling tinklingly tinkly tinlet tinlike tinman tinned tinner tinnery tinnet tinnified tinnily tinniness tinning tinnitus tinnock tinny tinosa tinsel tinsellike tinselly tinselmaker tinselmaking tinselry tinselweaver tinselwork tinsman tinsmith tinsmithing tinsmithy tinstone tinstuff tint tinta tintage tintamarre tintarron tinted tinter tintie tintiness tinting tintingly tintinnabula tintinnabulant tintinnabular tintinnabulary tintinnabulate tintinnabulation tintinnabulatory tintinnabulism tintinnabulist tintinnabulous tintinnabulum tintist tintless tintometer tintometric tintometry tinty tintype tintyper tinwald tinware tinwoman tinwork tinworker tinworking tiny tinzenite tip tipburn tipcart tipcat tipe tipful tiphead tipiti tiple tipless tiplet tipman tipmost tiponi tippable tipped tippee tipper tippet tipping tipple tippleman tippler tipply tipproof tippy tipsification tipsifier tipsify tipsily tipsiness tipstaff tipster tipstock tipsy tiptail tipteerer tiptilt tiptoe tiptoeing tiptoeingly tiptop tiptopness tiptopper tiptoppish tiptoppishness tiptopsome tipulid tipuloid tipup tirade tiralee tire tired tiredly tiredness tiredom tirehouse tireless tirelessly tirelessness tiremaid tiremaker tiremaking tireman tirer tireroom tiresmith tiresome tiresomely tiresomeness tiresomeweed tirewoman tiriba tiring tiringly tirl tirma tirocinium tirr tirralirra tirret tirrivee tirrlie tirrwirr tirthankara tirve tirwit tisane tisar tissual tissue tissued tissueless tissuelike tissuey tisswood tiswin tit titanate titanaugite titania titanic titaniferous titanifluoride titanite titanitic titanium titano titanocolumbate titanocyanide titanofluoride titanomagnetite titanoniobate titanosaur titanosilicate titanothere titanous titanyl titar titbit titbitty tite titer titeration titfish tithable tithal tithe tithebook titheless tithemonger tithepayer tither titheright tithing tithingman tithingpenny tithonic tithonicity tithonographic tithonometer titi titian titien titilate titillability titillant titillater titillating titillatingly titillation titillative titillator titillatory titivate titivation titivator titlark title titleboard titled titledom titleholder titleless titleproof titler titleship titlike titling titlist titmal titman titmouse titoki titrable titratable titrate titration titre titrimetric titrimetry titter titterel titterer tittering titteringly tittery tittie tittle tittlebat tittler tittup tittupy titty tittymouse titubancy titubant titubantly titubate titubation titular titularity titularly titulary titulation titule titulus tiver tivoli tivy tiza tizeur tizzy tjanting tji tjosite tlaco tmema tmesis to toa toad toadback toadeat toadeater toader toadery toadess toadfish toadflax toadflower toadhead toadier toadish toadless toadlet toadlike toadlikeness toadling toadpipe toadroot toadship toadstone toadstool toadstoollike toadwise toady toadyish toadyism toadyship toast toastable toastee toaster toastiness toastmaster toastmastery toastmistress toasty toat toatoa tobacco tobaccofied tobaccoism tobaccoite tobaccoless tobaccolike tobaccoman tobacconalian tobacconist tobacconistical tobacconize tobaccophil tobaccoroot tobaccoweed tobaccowood tobaccoy tobe tobine tobira toboggan tobogganeer tobogganer tobogganist toby tobyman tocalote toccata tocher tocherless tock toco tocodynamometer tocogenetic tocogony tocokinin tocological tocologist tocology tocome tocometer tocopherol tocororo tocsin tocusso tod today todayish todder toddick toddite toddle toddlekins toddler toddy toddyize toddyman tode tody toe toeboard toecap toecapped toed toeless toelike toellite toenail toeplate toernebohmite toetoe toff toffee toffeeman toffing toffish toffy toffyman toft tofter toftman toftstead tofu tog toga togaed togalike togata togate togated togawise together togetherhood togetheriness togetherness toggel toggery toggle toggler togless togs togt togue toher toheroa toho tohubohu tohunga toi toil toiled toiler toilet toileted toiletry toilette toiletted toiletware toilful toilfully toilinet toiling toilingly toilless toillessness toilsome toilsomely toilsomeness toilworn toise toit toitish toity tokay toke token tokened tokenless toko tokology tokonoma tokopat tol tolamine tolan tolane tolbooth told toldo tole tolerability tolerable tolerableness tolerablish tolerably tolerance tolerancy tolerant tolerantism tolerantly tolerate toleration tolerationism tolerationist tolerative tolerator tolerism tolfraedic tolguacha tolidine tolite toll tollable tollage tollbooth toller tollery tollgate tollgatherer tollhouse tolliker tolling tollkeeper tollman tollmaster tollpenny tolltaker tolly tolpatch tolpatchery tolsester tolsey tolt tolter tolu tolualdehyde toluate toluene toluic toluide toluidide toluidine toluidino toluido tolunitrile toluol toluquinaldine tolusafranine toluyl toluylene toluylenediamine toluylic tolyl tolylene tolylenediamine tolypeutine tomahawk tomahawker tomalley toman tomatillo tomato tomb tombac tombal tombe tombic tombless tomblet tomblike tombola tombolo tomboy tomboyful tomboyish tomboyishly tomboyishness tomboyism tombstone tomcat tomcod tome tomeful tomelet toment tomentose tomentous tomentulose tomentum tomfool tomfoolery tomfoolish tomfoolishness tomial tomin tomish tomium tomjohn tomkin tommy tommybag tommycod tommyrot tomnoddy tomnoup tomogram tomographic tomography tomorn tomorrow tomorrower tomorrowing tomorrowness tomosis tompiper tompon tomtate tomtit ton tonal tonalamatl tonalist tonalite tonalitive tonality tonally tonant tonation tondino tone toned toneless tonelessly tonelessness toneme toneproof toner tonetic tonetically tonetician tonetics tong tonga tonger tongkang tongman tongs tongsman tongue tonguecraft tongued tonguedoughty tonguefence tonguefencer tongueflower tongueful tongueless tonguelet tonguelike tongueman tonguemanship tongueplay tongueproof tonguer tongueshot tonguesman tonguesore tonguester tonguetip tonguey tonguiness tonguing tonic tonically tonicity tonicize tonicobalsamic tonicoclonic tonicostimulant tonify tonight tonish tonishly tonishness tonite tonitrocirrus tonitruant tonitruone tonitruous tonjon tonk tonkin tonlet tonnage tonneau tonneaued tonner tonnish tonnishly tonnishness tonoclonic tonogram tonograph tonological tonology tonometer tonometric tonometry tonophant tonoplast tonoscope tonotactic tonotaxis tonous tonsbergite tonsil tonsilectomy tonsilitic tonsillar tonsillary tonsillectome tonsillectomic tonsillectomize tonsillectomy tonsillith tonsillitic tonsillitis tonsillolith tonsillotome tonsillotomy tonsilomycosis tonsor tonsorial tonsurate tonsure tonsured tontine tontiner tonus tony tonyhoop too toodle toodleloodle took tooken tool toolbox toolbuilder toolbuilding tooler toolhead toolholder toolholding tooling toolless toolmaker toolmaking toolman toolmark toolmarking toolplate toolroom toolsetter toolslide toolsmith toolstock toolstone toom toomly toon toonwood toop toorie toorock tooroo toosh toot tooter tooth toothache toothaching toothachy toothbill toothbrush toothbrushy toothchiseled toothcomb toothcup toothdrawer toothdrawing toothed toother toothflower toothful toothill toothing toothless toothlessly toothlessness toothlet toothleted toothlike toothpick toothplate toothproof toothsome toothsomely toothsomeness toothstick toothwash toothwork toothwort toothy tootle tootler tootlish tootsy toozle toozoo top topalgia toparch toparchia toparchical toparchy topass topaz topazfels topazine topazite topazolite topazy topcap topcast topchrome topcoat topcoating tope topectomy topee topeewallah topeng topepo toper toperdom topesthesia topflight topfull topgallant toph tophaceous tophaike tophetic tophetize tophus tophyperidrosis topi topia topiarian topiarist topiarius topiary topic topical topicality topically topinambou topknot topknotted topless toplighted toplike topline toploftical toploftily toploftiness toplofty topmaker topmaking topman topmast topmost topmostly topnotch topnotcher topo topoalgia topochemical topognosia topognosis topograph topographer topographic topographical topographically topographics topographist topographize topographometric topography topolatry topologic topological topologist topology toponarcosis toponym toponymal toponymic toponymical toponymics toponymist toponymy topophobia topophone topotactic topotaxis topotype topotypic topotypical topped topper toppiece topping toppingly toppingness topple toppler topply toppy toprail toprope tops topsail topsailite topside topsl topsman topsoil topstone topswarm topsyturn toptail topwise toque tor tora torah toral toran torbanite torbanitic torbernite torc torcel torch torchbearer torchbearing torcher torchless torchlight torchlighted torchlike torchman torchon torchweed torchwood torchwort torcular torculus tordrillite tore toreador tored torero toreumatography toreumatology toreutic toreutics torfaceous torfel torgoch toric torii torma tormen torment tormenta tormentable tormentation tormentative tormented tormentedly tormentful tormentil tormentilla tormenting tormentingly tormentingness tormentive tormentor tormentous tormentress tormentry tormentum tormina torminal torminous tormodont torn tornachile tornade tornadic tornado tornadoesque tornadoproof tornal tornaria tornarian tornese torney tornillo tornote tornus toro toroid toroidal torolillo tororokombu torose torosity torotoro torous torpedineer torpedinous torpedo torpedoer torpedoist torpedolike torpedoplane torpedoproof torpent torpescence torpescent torpid torpidity torpidly torpidness torpify torpitude torpor torporific torporize torquate torquated torque torqued torques torrefaction torrefication torrefy torrent torrentful torrentfulness torrential torrentiality torrentially torrentine torrentless torrentlike torrentuous torrentwise torrid torridity torridly torridness torsade torse torsel torsibility torsigraph torsile torsimeter torsiogram torsiograph torsiometer torsion torsional torsionally torsioning torsionless torsive torsk torso torsoclusion torsometer torsoocclusion tort torta torteau torticollar torticollis torticone tortile tortility tortilla tortille tortious tortiously tortive tortoise tortoiselike tortrices tortricid tortricine tortricoid tortula tortulaceous tortulous tortuose tortuosity tortuous tortuously tortuousness torturable torturableness torture tortured torturedly tortureproof torturer torturesome torturing torturingly torturous torturously toru torula torulaceous torulaform toruliform torulin toruloid torulose torulosis torulous torulus torus torve torvid torvity torvous tory toryhillite toryweed tosaphist tosaphoth toscanite tosh toshakhana tosher toshery toshly toshnail toshy tosily toss tosser tossicated tossily tossing tossingly tossment tosspot tossup tossy tost tosticate tostication toston tosy tot total totalitarian totalitarianism totality totalization totalizator totalize totalizer totally totalness totanine totaquin totaquina totaquine totara totchka tote toteload totem totemic totemically totemism totemist totemistic totemite totemization totemy toter tother totient totipalmate totipalmation totipotence totipotency totipotent totipotential totipotentiality totitive toto totora totquot totter totterer tottergrass tottering totteringly totterish tottery totting tottle tottlish totty tottyhead totuava totum toty totyman tou toucan toucanet touch touchable touchableness touchback touchbell touchbox touchdown touched touchedness toucher touchhole touchily touchiness touching touchingly touchingness touchless touchline touchous touchpan touchpiece touchstone touchwood touchy toug tough toughen toughener toughhead toughhearted toughish toughly toughness tought tould toumnah toup toupee toupeed toupet tour touraco tourbillion tourer tourette touring tourism tourist touristdom touristic touristproof touristry touristship touristy tourize tourmaline tourmalinic tourmaliniferous tourmalinization tourmalinize tourmalite tourn tournament tournamental tournant tournasin tournay tournee tourney tourneyer tourniquet tourte tousche touse touser tousle tously tousy tout touter tovar tovariaceous tovarish tow towable towage towai towan toward towardliness towardly towardness towards towboat towcock towd towel towelette toweling towelry tower towered towering toweringly towerless towerlet towerlike towerman towerproof towerwise towerwork towerwort towery towght towhead towheaded towhee towing towkay towlike towline towmast town towned townee towner townet townfaring townfolk townful towngate townhood townify towniness townish townishly townishness townist townland townless townlet townlike townling townly townman townsboy townscape townsfellow townsfolk township townside townsite townsman townspeople townswoman townward townwards townwear towny towpath towrope towser towy tox toxa toxalbumic toxalbumin toxalbumose toxamin toxanemia toxaphene toxcatl toxemia toxemic toxic toxicaemia toxical toxically toxicant toxicarol toxication toxicemia toxicity toxicodendrol toxicoderma toxicodermatitis toxicodermatosis toxicodermia toxicodermitis toxicogenic toxicognath toxicohaemia toxicohemia toxicoid toxicologic toxicological toxicologically toxicologist toxicology toxicomania toxicopathic toxicopathy toxicophagous toxicophagy toxicophidia toxicophobia toxicosis toxicotraumatic toxicum toxidermic toxidermitis toxifer toxiferous toxigenic toxihaemia toxihemia toxiinfection toxiinfectious toxin toxinemia toxinfection toxinfectious toxinosis toxiphobia toxiphobiac toxiphoric toxitabellae toxity toxodont toxogenesis toxoglossate toxoid toxology toxolysis toxon toxone toxonosis toxophil toxophile toxophilism toxophilite toxophilitic toxophilitism toxophilous toxophily toxophoric toxophorous toxoplasmosis toxosis toxosozin toxotae toy toydom toyer toyful toyfulness toyhouse toying toyingly toyish toyishly toyishness toyland toyless toylike toymaker toymaking toyman toyon toyshop toysome toytown toywoman toywort toze tozee tozer tra trabacolo trabal trabant trabascolo trabea trabeae trabeatae trabeated trabeation trabecula trabecular trabecularism trabeculate trabeculated trabeculation trabecule trabuch trabucho trace traceability traceable traceableness traceably traceless tracelessly tracer traceried tracery trachea tracheaectasy tracheal trachealgia trachealis trachean trachearian tracheary tracheate tracheation tracheid tracheidal tracheitis trachelagra trachelate trachelectomopexia trachelectomy trachelismus trachelitis trachelium tracheloacromialis trachelobregmatic tracheloclavicular trachelocyllosis trachelodynia trachelology trachelomastoid trachelopexia tracheloplasty trachelorrhaphy tracheloscapular trachelotomy trachenchyma tracheobronchial tracheobronchitis tracheocele tracheochromatic tracheoesophageal tracheofissure tracheolar tracheolaryngeal tracheolaryngotomy tracheole tracheolingual tracheopathia tracheopathy tracheopharyngeal tracheophone tracheophonesis tracheophonine tracheophony tracheoplasty tracheopyosis tracheorrhagia tracheoschisis tracheoscopic tracheoscopist tracheoscopy tracheostenosis tracheostomy tracheotome tracheotomist tracheotomize tracheotomy trachinoid trachitis trachle trachodont trachodontid trachomatous trachomedusan trachyandesite trachybasalt trachycarpous trachychromatic trachydolerite trachyglossate trachyline trachymedusan trachyphonia trachyphonous trachypteroid trachyspermous trachyte trachytic trachytoid tracing tracingly track trackable trackage trackbarrow tracked tracker trackhound trackingscout tracklayer tracklaying trackless tracklessly tracklessness trackman trackmanship trackmaster trackscout trackshifter tracksick trackside trackwalker trackway trackwork tract tractability tractable tractableness tractably tractarian tractarianize tractate tractator tractatule tractellate tractellum tractiferous tractile tractility traction tractional tractioneering tractlet tractor tractoration tractorism tractorist tractorization tractorize tractory tractrix tradable tradal trade tradecraft tradeful tradeless trademaster trader tradership tradesfolk tradesman tradesmanlike tradesmanship tradesmanwise tradespeople tradesperson tradeswoman tradiment trading tradite tradition traditional traditionalism traditionalist traditionalistic traditionality traditionalize traditionally traditionarily traditionary traditionate traditionately traditioner traditionism traditionist traditionitis traditionize traditionless traditionmonger traditious traditive traditor traditores traditorship traduce traducement traducent traducer traducian traducianism traducianist traducianistic traducible traducing traducingly traduction traductionist trady traffic trafficability trafficable trafficableness trafficless trafficway trafflicker trafflike trag tragacanth tragacantha tragacanthin tragal tragedial tragedian tragedianess tragedical tragedienne tragedietta tragedist tragedization tragedize tragedy tragelaph tragelaphine tragi tragic tragical tragicality tragically tragicalness tragicaster tragicize tragicly tragicness tragicofarcical tragicoheroicomic tragicolored tragicomedian tragicomedy tragicomic tragicomical tragicomicality tragicomically tragicomipastoral tragicoromantic tragicose tragopan traguline traguloid tragus trah traheen traik trail trailer trailery trailiness trailing trailingly trailless trailmaker trailmaking trailman trailside trailsman traily train trainable trainage trainagraph trainband trainbearer trainbolt trainboy trained trainee trainer trainful training trainless trainload trainman trainmaster trainsick trainster traintime trainway trainy traipse trait traitless traitor traitorhood traitorism traitorize traitorlike traitorling traitorous traitorously traitorousness traitorship traitorwise traitress traject trajectile trajection trajectitious trajectory trajet tralatician tralaticiary tralatition tralatitious tralatitiously tralira tram trama tramal tramcar trame tramful tramless tramline tramman trammel trammeled trammeler trammelhead trammeling trammelingly trammelled trammellingly trammer tramming trammon tramontane tramp trampage trampdom tramper trampess tramphood trampish trampishly trampism trample trampler tramplike trampolin trampoline trampoose trampot tramroad tramsmith tramway tramwayman tramyard trance tranced trancedly tranceful trancelike tranchefer tranchet trancoidal traneen trank tranka tranker trankum tranky tranquil tranquility tranquilization tranquilize tranquilizer tranquilizing tranquilizingly tranquillity tranquillization tranquillize tranquilly tranquilness transaccidentation transact transaction transactional transactionally transactioneer transactor transalpine transalpinely transalpiner transamination transanimate transanimation transannular transapical transappalachian transaquatic transarctic transatlantic transatlantically transatlantican transatlanticism transaudient transbaikal transbaikalian transbay transboard transborder transcalency transcalent transcalescency transcalescent transceiver transcend transcendence transcendency transcendent transcendental transcendentalism transcendentalist transcendentalistic transcendentality transcendentalize transcendentally transcendently transcendentness transcendible transcending transcendingly transcendingness transcension transchannel transcolor transcoloration transconductance transcondylar transcondyloid transconscious transcontinental transcorporate transcorporeal transcortical transcreate transcribable transcribble transcribbler transcribe transcriber transcript transcription transcriptional transcriptionally transcriptitious transcriptive transcriptively transcriptural transcrystalline transcurrent transcurrently transcurvation transdermic transdesert transdialect transdiaphragmatic transdiurnal transducer transduction transect transection transelement transelementate transelementation transempirical transenna transept transeptal transeptally transequatorial transessentiate transeunt transexperiential transfashion transfeature transfer transferability transferable transferableness transferably transferal transferee transference transferent transferential transferography transferor transferotype transferred transferrer transferribility transferring transferror transferrotype transfigurate transfiguration transfigurative transfigure transfigurement transfiltration transfinite transfix transfixation transfixion transfixture transfluent transfluvial transflux transforation transform transformability transformable transformance transformation transformationist transformative transformator transformer transforming transformingly transformism transformist transformistic transfrontal transfrontier transfuge transfugitive transfuse transfuser transfusible transfusion transfusionist transfusive transfusively transgredient transgress transgressible transgressing transgressingly transgression transgressional transgressive transgressively transgressor transhape transhuman transhumanate transhumanation transhumance transhumanize transhumant transience transiency transient transiently transientness transigence transigent transiliac transilience transiliency transilient transilluminate transillumination transilluminator transimpression transincorporation transindividual transinsular transire transischiac transisthmian transistor transit transitable transiter transition transitional transitionally transitionalness transitionary transitionist transitival transitive transitively transitiveness transitivism transitivity transitman transitorily transitoriness transitory transitus translade translatable translatableness translate translater translation translational translationally translative translator translatorese translatorial translatorship translatory translatress translatrix translay transleithan transletter translinguate transliterate transliteration transliterator translocalization translocate translocation translocatory translucence translucency translucent translucently translucid transmarginal transmarine transmaterial transmateriation transmedial transmedian transmental transmentation transmeridional transmethylation transmigrant transmigrate transmigration transmigrationism transmigrationist transmigrative transmigratively transmigrator transmigratory transmissibility transmissible transmission transmissional transmissionist transmissive transmissively transmissiveness transmissivity transmissometer transmissory transmit transmittable transmittal transmittance transmittancy transmittant transmitter transmittible transmogrification transmogrifier transmogrify transmold transmontane transmorphism transmundane transmural transmuscle transmutability transmutable transmutableness transmutably transmutation transmutational transmutationist transmutative transmutatory transmute transmuter transmuting transmutive transmutual transnatation transnational transnatural transnaturation transnature transnihilation transnormal transocean transoceanic transocular transom transomed transonic transorbital transpacific transpadane transpalatine transpalmar transpanamic transparence transparency transparent transparentize transparently transparentness transparietal transparish transpeciate transpeciation transpeer transpenetrable transpeninsular transperitoneal transperitoneally transpersonal transphenomenal transphysical transpicuity transpicuous transpicuously transpierce transpirability transpirable transpiration transpirative transpiratory transpire transpirometer transplace transplant transplantability transplantable transplantar transplantation transplantee transplanter transplendency transplendent transplendently transpleural transpleurally transpolar transponibility transponible transpontine transport transportability transportable transportableness transportal transportance transportation transportational transportationist transportative transported transportedly transportedness transportee transporter transporting transportingly transportive transportment transposability transposable transposableness transposal transpose transposer transposition transpositional transpositive transpositively transpositor transpository transpour transprint transprocess transprose transproser transpulmonary transpyloric transradiable transrational transreal transrectification transrhenane transrhodanian transriverine transsegmental transsensual transseptal transsepulchral transshape transshift transship transshipment transsolid transstellar transsubjective transtemporal transthalamic transthoracic transubstantial transubstantially transubstantiate transubstantiation transubstantiationalist transubstantiationite transubstantiative transubstantiatively transubstantiatory transudate transudation transudative transudatory transude transumpt transumption transumptive transuranian transuranic transuranium transuterine transvaal transvaluate transvaluation transvalue transvasate transvasation transvase transvectant transvection transvenom transverbate transverbation transverberate transverberation transversal transversale transversalis transversality transversally transversan transversary transverse transversely transverseness transverser transversion transversive transversocubital transversomedial transversospinal transversovertical transversum transversus transvert transverter transvest transvestism transvestite transvestitism transvolation transwritten trant tranter trantlum trap trapaceous trapball trapes trapezate trapeze trapezia trapezial trapezian trapeziform trapezing trapeziometacarpal trapezist trapezium trapezius trapezohedral trapezohedron trapezoid trapezoidal trapezoidiform trapfall traphole trapiferous traplight traplike trapmaker trapmaking trappean trapped trapper trapperlike trappiness trapping trappingly trappist trappoid trappose trappous trappy traprock traps trapshoot trapshooter trapshooting trapstick trapunto trasformism trash trashery trashify trashily trashiness traship trashless trashrack trashy trass trasy traulism trauma traumasthenia traumatic traumatically traumaticin traumaticine traumatism traumatize traumatology traumatonesis traumatopnea traumatopyra traumatosis traumatotactic traumatotaxis traumatropic traumatropism travail travale travally travated trave travel travelability travelable traveldom traveled traveler traveleress travelerlike traveling travellability travellable travelled traveller travelogue traveloguer traveltime traversable traversal traversary traverse traversed traversely traverser traversewise traversework traversing traversion travertin travertine travestier travestiment travesty travis travois travoy trawl trawlboat trawler trawlerman trawlnet tray trayful traylike treacher treacherous treacherously treacherousness treachery treacle treaclelike treaclewort treacliness treacly tread treadboard treader treading treadle treadler treadmill treadwheel treason treasonable treasonableness treasonably treasonful treasonish treasonist treasonless treasonmonger treasonous treasonously treasonproof treasurable treasure treasureless treasurer treasurership treasuress treasurous treasury treasuryship treat treatable treatableness treatably treatee treater treating treatise treatiser treatment treator treaty treatyist treatyite treatyless treble trebleness trebletree trebly trebuchet trecentist trechmannite treckschuyt treddle tredecile tredille tree treebeard treebine treed treefish treeful treehair treehood treeify treeiness treeless treelessness treelet treelike treeling treemaker treemaking treeman treen treenail treescape treeship treespeeler treetop treeward treewards treey tref trefgordd trefle trefoil trefoiled trefoillike trefoilwise tregadyne tregerg tregohm trehala trehalase trehalose treillage trek trekker trekometer trekpath trellis trellised trellislike trelliswork tremandraceous trematode trematoid tremble tremblement trembler trembling tremblingly tremblingness tremblor trembly tremellaceous tremelliform tremelline tremellineous tremelloid tremellose tremendous tremendously tremendousness tremetol tremie tremolando tremolant tremolist tremolite tremolitic tremolo tremor tremorless tremorlessly tremulant tremulate tremulation tremulous tremulously tremulousness trenail trench trenchancy trenchant trenchantly trenchantness trenchboard trenched trencher trencherless trencherlike trenchermaker trenchermaking trencherman trencherside trencherwise trencherwoman trenchful trenchlet trenchlike trenchmaster trenchmore trenchward trenchwise trenchwork trend trendle trental trentepohliaceous trepan trepanation trepang trepanize trepanner trepanning trepanningly trephination trephine trephiner trephocyte trephone trepid trepidancy trepidant trepidate trepidation trepidatory trepidity trepidly trepidness treponematous treponemiasis treponemiatic treponemicidal treponemicide trepostomatous tresaiel trespass trespassage trespasser trespassory tress tressed tressful tressilate tressilation tressless tresslet tresslike tresson tressour tressure tressured tressy trest trestle trestletree trestlewise trestlework trestling tret trevally trevet trews trewsman trey tri triable triableness triace triacetamide triacetate triacetonamine triachenium triacid triacontaeterid triacontane triaconter triact triactinal triactine triad triadelphous triadic triadical triadically triadism triadist triaene triaenose triage triagonal triakisicosahedral triakisicosahedron triakisoctahedral triakisoctahedrid triakisoctahedron triakistetrahedral triakistetrahedron trial trialate trialism trialist triality trialogue triamid triamide triamine triamino triammonium triamylose triander triandrian triandrous triangle triangled triangler triangleways trianglewise trianglework triangular triangularity triangularly triangulate triangulately triangulation triangulator trianguloid triangulopyramidal triangulotriangular triannual triannulate triantelope trianthous triapsal triapsidal triarch triarchate triarchy triarctic triarcuated triareal triarii triarticulate triaster triatic triatomic triatomicity triaxial triaxon triaxonian triazane triazin triazine triazo triazoic triazole triazolic tribade tribadism tribady tribal tribalism tribalist tribally tribarred tribase tribasic tribasicity tribasilar tribble tribe tribeless tribelet tribelike tribesfolk tribeship tribesman tribesmanship tribespeople tribeswoman triblastic triblet triboelectric triboelectricity tribofluorescence tribofluorescent triboluminescence triboluminescent tribometer tribophosphorescence tribophosphorescent tribophosphoroscope triborough tribrac tribrach tribrachial tribrachic tribracteate tribracteolate tribromacetic tribromide tribromoethanol tribromophenol tribromphenate tribromphenol tribual tribually tribular tribulate tribulation tribuloid tribuna tribunal tribunate tribune tribuneship tribunitial tribunitian tribunitiary tribunitive tributable tributarily tributariness tributary tribute tributer tributist tributorian tributyrin trica tricae tricalcic tricalcium tricapsular tricar tricarballylic tricarbimide tricarbon tricarboxylic tricarinate tricarinated tricarpellary tricarpellate tricarpous tricaudal tricaudate trice tricellular tricenarious tricenarium tricenary tricennial tricentenarian tricentenary tricentennial tricentral tricephal tricephalic tricephalous tricephalus triceps triceria tricerion tricerium trichatrophia trichauxis trichechine trichechodont trichevron trichi trichia trichiasis trichina trichinae trichinal trichiniasis trichiniferous trichinization trichinize trichinoid trichinopoly trichinoscope trichinoscopy trichinosed trichinosis trichinotic trichinous trichite trichitic trichitis trichiurid trichiuroid trichloride trichlormethane trichloro trichloroacetic trichloroethylene trichloromethane trichloromethyl trichobacteria trichobezoar trichoblast trichobranchia trichobranchiate trichocarpous trichocephaliasis trichoclasia trichoclasis trichocyst trichocystic trichode trichoepithelioma trichogen trichogenous trichoglossia trichoglossine trichogyne trichogynial trichogynic trichoid trichological trichologist trichology trichoma trichomaphyte trichomatose trichomatosis trichomatous trichome trichomic trichomonad trichomoniasis trichomycosis trichonosus trichopathic trichopathy trichophore trichophoric trichophyllous trichophyte trichophytia trichophytic trichophytosis trichopore trichopter trichoptera trichopteran trichopteron trichopterous trichopterygid trichord trichorrhea trichorrhexic trichorrhexis trichoschisis trichosis trichosporange trichosporangial trichosporangium trichostasis trichostrongyle trichostrongylid trichothallic trichotillomania trichotomic trichotomism trichotomist trichotomize trichotomous trichotomously trichotomy trichroic trichroism trichromat trichromate trichromatic trichromatism trichromatist trichrome trichromic trichronous trichuriasis trichy tricinium tricipital tricircular trick tricker trickery trickful trickily trickiness tricking trickingly trickish trickishly trickishness trickle trickless tricklet tricklike trickling tricklingly trickly trickment trickproof tricksical tricksily tricksiness tricksome trickster trickstering trickstress tricksy tricktrack tricky triclad triclinate triclinia triclinial tricliniarch tricliniary triclinic triclinium triclinohedric tricoccose tricoccous tricolette tricolic tricolon tricolor tricolored tricolumnar tricompound triconch triconodont triconodontid triconodontoid triconodonty triconsonantal triconsonantalism tricophorous tricorn tricornered tricornute tricorporal tricorporate tricoryphean tricosane tricosanone tricostate tricosyl tricosylic tricot tricotine tricotyledonous tricresol tricrotic tricrotism tricrotous tricrural tricurvate tricuspal tricuspid tricuspidal tricuspidate tricuspidated tricussate tricyanide tricycle tricyclene tricycler tricyclic tricyclist tridactyl tridactylous tridaily triddler tridecane tridecene tridecilateral tridecoic tridecyl tridecylene tridecylic trident tridental tridentate tridentated tridentiferous tridepside tridermic tridiametral tridiapason tridigitate tridimensional tridimensionality tridimensioned tridiurnal tridominium tridrachm triduan triduum tridymite tridynamous tried triedly trielaidin triene triennial trienniality triennially triennium triens triental triequal trier trierarch trierarchal trierarchic trierarchy trierucin trieteric trieterics triethanolamine triethyl triethylamine triethylstibine trifa trifacial trifarious trifasciated triferous trifid trifilar trifistulary triflagellate trifle trifledom trifler triflet trifling triflingly triflingness trifloral triflorate triflorous trifluoride trifocal trifoil trifold trifoliate trifoliated trifoliolate trifoliosis trifolium trifoly triforial triforium triform triformed triformin triformity triformous trifoveolate trifuran trifurcal trifurcate trifurcation trig trigamist trigamous trigamy trigeminal trigeminous trigeneric trigesimal trigger triggered triggerfish triggerless trigintal trigintennial triglandular triglid triglochid triglochin triglot trigly triglyceride triglyceryl triglyph triglyphal triglyphed triglyphic triglyphical trigness trigon trigonal trigonally trigone trigonelline trigoneutic trigoneutism trigoniacean trigoniaceous trigonic trigonid trigonite trigonitis trigonocephalic trigonocephalous trigonocephaly trigonocerous trigonododecahedron trigonodont trigonoid trigonometer trigonometric trigonometrical trigonometrician trigonometry trigonon trigonotype trigonous trigonum trigram trigrammatic trigrammatism trigrammic trigraph trigraphic triguttulate trigyn trigynian trigynous trihalide trihedral trihedron trihemeral trihemimer trihemimeral trihemimeris trihemiobol trihemiobolion trihemitetartemorion trihoral trihourly trihybrid trihydrate trihydrated trihydric trihydride trihydrol trihydroxy trihypostatic trijugate trijugous trijunction trikaya trike triker trikeria trikerion triketo triketone trikir trilabe trilabiate trilamellar trilamellated trilaminar trilaminate trilarcenous trilateral trilaterality trilaterally trilateralness trilaurin trilby trilemma trilinear trilineate trilineated trilingual trilinguar trilinolate trilinoleate trilinolenate trilinolenin trilit trilite triliteral triliteralism triliterality triliterally triliteralness trilith trilithic trilithon trill trillachan trillet trilli trilliaceous trillibub trilliin trilling trillion trillionaire trillionize trillionth trillium trillo trilobate trilobated trilobation trilobe trilobed trilobite trilobitic trilocular triloculate trilogic trilogical trilogist trilogy trilophodont triluminar triluminous trim trimacer trimacular trimargarate trimargarin trimastigate trimellitic trimembral trimensual trimer trimercuric trimeric trimeride trimerite trimerization trimerous trimesic trimesinic trimesitic trimesitinic trimester trimestral trimestrial trimesyl trimetalism trimetallic trimeter trimethoxy trimethyl trimethylacetic trimethylamine trimethylbenzene trimethylene trimethylmethane trimethylstibine trimetric trimetrical trimetrogon trimly trimmer trimming trimmingly trimness trimodal trimodality trimolecular trimonthly trimoric trimorph trimorphic trimorphism trimorphous trimotor trimotored trimstone trimtram trimuscular trimyristate trimyristin trin trinal trinality trinalize trinary trinational trindle trine trinely trinervate trinerve trinerved trineural tringine tringle tringoid trinidado trinitarian trinitrate trinitration trinitride trinitrin trinitro trinitrocarbolic trinitrocellulose trinitrocresol trinitroglycerin trinitromethane trinitrophenol trinitroresorcin trinitrotoluene trinitroxylene trinitroxylol trinity trinityhood trink trinkerman trinket trinketer trinketry trinkety trinkle trinklement trinklet trinkums trinoctial trinodal trinode trinodine trinol trinomial trinomialism trinomialist trinomiality trinomially trinopticon trintle trinucleate trio triobol triobolon trioctile triocular triode triodia triodion triodontoid trioecious trioeciously trioecism triolcous triole trioleate triolefin trioleic triolein triolet triology trionychoid trionychoidean trionym trionymal trioperculate trior triorchis triorchism triorthogonal triose triovulate trioxazine trioxide trioxymethylene triozonide trip tripal tripaleolate tripalmitate tripalmitin tripara tripart triparted tripartedly tripartible tripartient tripartite tripartitely tripartition tripaschal tripe tripedal tripel tripelike tripeman tripemonger tripennate tripenny tripeptide tripersonal tripersonalism tripersonalist tripersonality tripersonally tripery tripeshop tripestone tripetaloid tripetalous tripewife tripewoman triphammer triphane triphase triphaser triphasic triphenyl triphenylamine triphenylated triphenylcarbinol triphenylmethane triphenylmethyl triphenylphosphine triphibian triphibious triphony triphthong triphyletic triphyline triphylite triphyllous tripinnate tripinnated tripinnately tripinnatifid tripinnatisect triplane triplasian triplasic triple tripleback triplefold triplegia tripleness triplet tripletail tripletree triplewise triplex triplexity triplicate triplication triplicative triplicature triplicity triplicostate tripliform triplinerved tripling triplite triploblastic triplocaulescent triplocaulous triploid triploidic triploidite triploidy triplopia triplopy triplum triplumbic triply tripmadam tripod tripodal tripodial tripodian tripodic tripodical tripody tripointed tripolar tripoli tripoline tripolite tripos tripotassium trippant tripper trippet tripping trippingly trippingness trippist tripple trippler tripsill tripsis tripsome tripsomely triptane tripterous triptote triptych triptyque tripudial tripudiant tripudiary tripudiate tripudiation tripudist tripudium tripunctal tripunctate tripy tripylaean tripylarian tripyrenous triquadrantal triquetra triquetral triquetric triquetrous triquetrously triquetrum triquinate triquinoyl triradial triradially triradiate triradiated triradiately triradiation trirectangular triregnum trireme trirhombohedral trirhomboidal triricinolein trisaccharide trisaccharose trisacramentarian trisalt trisazo trisceptral trisect trisected trisection trisector trisectrix triseme trisemic trisensory trisepalous triseptate triserial triserially triseriate triseriatim trisetose trishna trisilane trisilicane trisilicate trisilicic trisinuate trisinuated triskele triskelion trismegist trismegistic trismic trismus trisoctahedral trisoctahedron trisodium trisome trisomic trisomy trisonant trispast trispaston trispermous trispinose trisplanchnic trisporic trisporous trisquare trist tristachyous tristate tristearate tristearin tristeness tristetrahedron tristeza tristful tristfully tristfulness tristich tristichic tristichous tristigmatic tristigmatose tristiloquy tristisonous tristylous trisubstituted trisubstitution trisul trisula trisulcate trisulcated trisulphate trisulphide trisulphone trisulphonic trisulphoxide trisylabic trisyllabical trisyllabically trisyllabism trisyllabity trisyllable tritactic tritagonist tritangent tritangential tritanope tritanopia tritanopic tritaph trite tritely tritemorion tritencephalon triteness triternate triternately triterpene tritetartemorion tritheism tritheist tritheistic tritheistical tritheite tritheocracy trithing trithioaldehyde trithiocarbonate trithiocarbonic trithionate trithionic tritical triticality tritically triticalness triticeous triticeum triticin triticism triticoid triticum tritish tritium tritocerebral tritocerebrum tritocone tritoconid tritolo tritomite triton tritonal tritonality tritone tritonoid tritonous tritonymph tritonymphal tritopatores tritopine tritor tritoral tritorium tritoxide tritozooid tritriacontane trittichan tritubercular trituberculism trituberculy triturable tritural triturate trituration triturator triturature triturium trityl triumph triumphal triumphance triumphancy triumphant triumphantly triumphator triumpher triumphing triumphwise triumvir triumviral triumvirate triumviri triumvirship triunal triune triungulin triunification triunion triunitarian triunity triunsaturated triurid trivalence trivalency trivalent trivalerin trivalve trivalvular trivant trivantly trivariant triverbal triverbial trivet trivetwise trivia trivial trivialism trivialist triviality trivialize trivially trivialness trivirga trivirgate trivium trivoltine trivvet triweekly trizoic trizomal trizonal trizone troat troca trocaical trocar trochaic trochaicality trochal trochalopod trochalopodous trochanter trochanteric trochanterion trochantin trochantinian trochart trochate troche trocheameter trochee trocheeize trochelminth trochi trochid trochiferous trochiform trochili trochilic trochilics trochilidae trochilidine trochilidist trochiline trochilopodous trochilus troching trochiscation trochiscus trochite trochitic trochlea trochlear trochleariform trochlearis trochleary trochleate trochleiform trochocephalia trochocephalic trochocephalus trochocephaly trochodendraceous trochoid trochoidal trochoidally trochoides trochometer trochophore trochosphere trochospherical trochozoic trochozoon trochus trock troco troctolite trod trodden trode troegerite troft trog trogger troggin troglodytal troglodyte troglodytic troglodytical troglodytish troglodytism trogon trogonoid trogs trogue troika troilite troke troker troll trolldom trolleite troller trolley trolleyer trolleyful trolleyman trollflower trollimog trolling trollman trollol trollop trollopish trollops trollopy trolly tromba trombe trombiculid trombidiasis trombone trombonist trombony trommel tromometer tromometric tromometrical tromometry tromp trompe trompil trompillo tromple tron trona tronador tronage tronc trondhjemite trone troner troolie troop trooper trooperess troopfowl troopship troopwise troostite troostitic troot tropacocaine tropaeolaceae tropaeolaceous tropaeolin tropaion tropal troparia troparion tropary tropate trope tropeic tropeine troper tropesis trophaea trophaeum trophal trophallactic trophallaxis trophectoderm trophedema trophema trophesial trophesy trophi trophic trophical trophically trophicity trophied trophism trophobiont trophobiosis trophobiotic trophoblast trophoblastic trophochromatin trophocyte trophoderm trophodisc trophodynamic trophodynamics trophogenesis trophogenic trophogeny trophology trophonema trophoneurosis trophoneurotic trophonucleus trophopathy trophophore trophophorous trophophyte trophoplasm trophoplasmatic trophoplasmic trophoplast trophosomal trophosome trophosperm trophosphere trophospongia trophospongial trophospongium trophospore trophotaxis trophotherapy trophothylax trophotropic trophotropism trophozoite trophozooid trophy trophyless trophywort tropic tropical tropicality tropicalization tropicalize tropically tropicopolitan tropidine tropine tropism tropismatic tropist tropistic tropocaine tropologic tropological tropologically tropologize tropology tropometer tropopause tropophil tropophilous tropophyte tropophytic troposphere tropostereoscope tropoyl troptometer tropyl trostera trot trotcozy troth trothful trothless trothlike trothplight trotlet trotline trotol trotter trottie trottles trottoir trottoired trotty trotyl troubadour troubadourish troubadourism troubadourist trouble troubledly troubledness troublemaker troublemaking troublement troubleproof troubler troublesome troublesomely troublesomeness troubling troublingly troublous troublously troublousness troubly trough troughful troughing troughlike troughster troughway troughwise troughy trounce trouncer troupand troupe trouper troupial trouse trouser trouserdom trousered trouserettes trouserian trousering trouserless trousers trousseau trousseaux trout troutbird trouter troutflower troutful troutiness troutless troutlet troutlike trouty trouvere trouveur trove troveless trover trow trowel trowelbeak troweler trowelful trowelman trowing trowlesworthite trowman trowth troy truancy truandise truant truantcy truantism truantlike truantly truantness truantry truantship trub trubu truce trucebreaker trucebreaking truceless trucemaker trucemaking trucial trucidation truck truckage trucker truckful trucking truckle truckler trucklike truckling trucklingly truckload truckman truckmaster trucks truckster truckway truculence truculency truculent truculental truculently truculentness truddo trudellite trudge trudgen trudger true trueborn truebred truehearted trueheartedly trueheartedness truelike truelove trueness truepenny truer truff truffle truffled trufflelike truffler trufflesque trug truish truism truismatic truistic truistical trull truller trullization trullo truly trumbash trummel trump trumper trumperiness trumpery trumpet trumpetbush trumpeter trumpeting trumpetless trumpetlike trumpetry trumpetweed trumpetwood trumpety trumph trumpie trumpless trumplike trun truncage truncal truncate truncated truncately truncation truncator truncatorotund truncatosinuate truncature trunch trunched truncheon truncheoned truncher trunchman trundle trundlehead trundler trundleshot trundletail trundling trunk trunkback trunked trunkfish trunkful trunking trunkless trunkmaker trunknose trunkway trunkwork trunnel trunnion trunnioned trunnionless trush trusion truss trussed trussell trusser trussing trussmaker trussmaking trusswork trust trustability trustable trustableness trustably trustee trusteeism trusteeship trusten truster trustful trustfully trustfulness trustification trustify trustihood trustily trustiness trusting trustingly trustingness trustle trustless trustlessly trustlessness trustman trustmonger trustwoman trustworthily trustworthiness trustworthy trusty truth truthable truthful truthfully truthfulness truthify truthiness truthless truthlessly truthlessness truthlike truthlikeness truthsman truthteller truthtelling truthy truttaceous truvat truxillic truxilline try trygon tryhouse trying tryingly tryingness tryma tryout tryp trypa trypan trypaneid trypanocidal trypanocide trypanolysin trypanolysis trypanolytic trypanosoma trypanosomacidal trypanosomacide trypanosomal trypanosomatic trypanosomatosis trypanosomatous trypanosome trypanosomiasis trypanosomic trypetid trypiate trypograph trypographic trypsin trypsinize trypsinogen tryptase tryptic tryptogen tryptone tryptonize tryptophan trysail tryst tryster trysting tryt tryworks tsadik tsamba tsantsa tsar tsardom tsarevitch tsarina tsaritza tsarship tsatlee tscharik tscheffkinite tsere tsessebe tsetse tsia tsine tsingtauite tsiology tst tsuba tsubo tsumebite tsun tsunami tsungtu tu tua tuan tuarn tuart tuatara tuatera tuath tub tuba tubae tubage tubal tubaphone tubar tubate tubatoxin tubba tubbable tubbal tubbeck tubber tubbie tubbiness tubbing tubbish tubboe tubby tube tubeflower tubeform tubeful tubehead tubehearted tubeless tubelet tubelike tubemaker tubemaking tubeman tuber tuberaceous tuberation tubercle tubercled tuberclelike tubercula tubercular tuberculariaceous tubercularization tubercularize tubercularly tubercularness tuberculate tuberculated tuberculatedly tuberculately tuberculation tuberculatogibbous tuberculatonodose tuberculatoradiate tuberculatospinous tubercule tuberculed tuberculid tuberculide tuberculiferous tuberculiform tuberculin tuberculinic tuberculinization tuberculinize tuberculization tuberculize tuberculocele tuberculocidin tuberculoderma tuberculoid tuberculoma tuberculomania tuberculomata tuberculophobia tuberculoprotein tuberculose tuberculosectorial tuberculosed tuberculosis tuberculotherapist tuberculotherapy tuberculotoxin tuberculotrophic tuberculous tuberculously tuberculousness tuberculum tuberiferous tuberiform tuberin tuberization tuberize tuberless tuberoid tuberose tuberosity tuberous tuberously tuberousness tubesmith tubework tubeworks tubfish tubful tubicen tubicinate tubicination tubicolar tubicolous tubicorn tubicornous tubifacient tubifer tubiferous tubiflorous tubiform tubig tubik tubilingual tubinarial tubinarine tubing tubiparous tubipore tubiporid tubiporoid tubiporous tublet tublike tubmaker tubmaking tubman tuboabdominal tubocurarine tubolabellate tuboligamentous tuboovarial tuboovarian tuboperitoneal tuborrhea tubotympanal tubovaginal tubular tubularia tubularian tubularidan tubularity tubularly tubulate tubulated tubulation tubulator tubulature tubule tubulet tubuli tubulibranch tubulibranchian tubulibranchiate tubulidentate tubuliferan tubuliferous tubulifloral tubuliflorous tubuliform tubulipore tubuliporid tubuliporoid tubulization tubulodermoid tubuloracemose tubulosaccular tubulose tubulostriato tubulous tubulously tubulousness tubulure tubulus tubwoman tucandera tuchit tuchun tuchunate tuchunism tuchunize tuck tuckahoe tucker tuckermanity tucket tucking tuckner tuckshop tucktoo tucky tucum tucuma tucuman tudel tue tueiron tufa tufaceous tufalike tufan tuff tuffaceous tuffet tuffing tuft tuftaffeta tufted tufter tufthunter tufthunting tuftily tufting tuftlet tufty tug tugboat tugboatman tugger tuggery tugging tuggingly tughra tugless tuglike tugman tugrik tugui tugurium tui tuik tuille tuillette tuilyie tuism tuition tuitional tuitionary tuitive tuke tukra tula tulare tularemia tulasi tulchan tulchin tule tuliac tulip tulipflower tulipiferous tulipist tuliplike tulipomania tulipomaniac tulipwood tulipy tulisan tulle tullibee tulsi tulwar tum tumasha tumatakuru tumatukuru tumbak tumbester tumble tumblebug tumbled tumbledung tumbler tumblerful tumblerlike tumblerwise tumbleweed tumblification tumbling tumblingly tumbly tumbrel tume tumefacient tumefaction tumefy tumescence tumescent tumid tumidity tumidly tumidness tummals tummel tummer tummock tummy tumor tumored tumorlike tumorous tump tumpline tumtum tumular tumulary tumulate tumulation tumuli tumulose tumulosity tumulous tumult tumultuarily tumultuariness tumultuary tumultuate tumultuation tumultuous tumultuously tumultuousness tumulus tun tuna tunable tunableness tunably tunbellied tunbelly tunca tund tundagslatta tunder tundish tundra tundun tune tuned tuneful tunefully tunefulness tuneless tunelessly tunelessness tunemaker tunemaking tuner tunesome tunester tunful tung tungate tungo tungstate tungsten tungstenic tungsteniferous tungstenite tungstic tungstite tungstosilicate tungstosilicic tunhoof tunic tunicary tunicate tunicated tunicin tunicked tunicle tunicless tuniness tuning tunish tunist tunk tunket tunlike tunmoot tunna tunnel tunneled tunneler tunneling tunnelist tunnelite tunnellike tunnelly tunnelmaker tunnelmaking tunnelman tunnelway tunner tunnery tunnland tunnor tunny tuno tunu tuny tup tupakihi tupanship tupara tupek tupelo tupik tupman tuppence tuppenny tupuna tuque tur turacin turanose turb turban turbaned turbanesque turbanette turbanless turbanlike turbantop turbanwise turbary turbeh turbellarian turbellariform turbescency turbid turbidimeter turbidimetric turbidimetry turbidity turbidly turbidness turbinaceous turbinage turbinal turbinate turbinated turbination turbinatoconcave turbinatocylindrical turbinatoglobose turbinatostipitate turbine turbinectomy turbined turbinelike turbinelloid turbiner turbines turbiniform turbinoid turbinotome turbinotomy turbit turbith turbitteen turbo turboalternator turboblower turbocompressor turbodynamo turboexciter turbofan turbogenerator turbomachine turbomotor turbopump turbosupercharge turbosupercharger turbot turbotlike turboventilator turbulence turbulency turbulent turbulently turbulentness turco turcopole turcopolier turd turdiform turdine turdoid tureen tureenful turf turfage turfdom turfed turfen turfiness turfing turfite turfless turflike turfman turfwise turfy turgency turgent turgently turgesce turgescence turgescency turgescent turgescible turgid turgidity turgidly turgidness turgite turgoid turgor turgy turicata turio turion turioniferous turjaite turjite turk turken turkey turkeyback turkeyberry turkeybush turkeyfoot turkeylike turkis turkle turlough turm turma turment turmeric turmit turmoil turmoiler turn turnable turnabout turnagain turnaround turnaway turnback turnbout turnbuckle turncap turncoat turncoatism turncock turndown turndun turned turnel turner turneraceous turnerite turnery turney turngate turnhall turnicine turnicomorphic turning turningness turnip turniplike turnipweed turnipwise turnipwood turnipy turnix turnkey turnoff turnout turnover turnpike turnpiker turnpin turnplate turnplow turnrow turns turnscrew turnsheet turnskin turnsole turnspit turnstile turnstone turntable turntail turnup turnwrest turnwrist turp turpantineweed turpentine turpentineweed turpentinic turpeth turpethin turpid turpidly turpitude turps turquoise turquoiseberry turquoiselike turr turret turreted turrethead turretlike turrical turricle turricula turriculae turricular turriculate turriferous turriform turrigerous turrilite turriliticone turritella turritellid turritelloid turse tursio turtle turtleback turtlebloom turtledom turtledove turtlehead turtleize turtlelike turtler turtlet turtling turtosa tururi turus turwar tusche tush tushed tusher tushery tusk tuskar tusked tusker tuskish tuskless tusklike tuskwise tusky tussah tussal tusser tussicular tussis tussive tussle tussock tussocked tussocker tussocky tussore tussur tut tutania tutball tute tutee tutela tutelage tutelar tutelary tutenag tuth tutin tutiorism tutiorist tutly tutman tutor tutorage tutorer tutoress tutorhood tutorial tutorially tutoriate tutorism tutorization tutorize tutorless tutorly tutorship tutory tutoyer tutress tutrice tutrix tuts tutsan tutster tutti tuttiman tutty tutu tutulus tutwork tutworker tutworkman tuwi tux tuxedo tuyere tuza tuzzle twa twaddle twaddledom twaddleize twaddlement twaddlemonger twaddler twaddlesome twaddling twaddlingly twaddly twaddy twae twaesome twafauld twagger twain twaite twal twale twalpenny twalpennyworth twalt twang twanger twanginess twangle twangler twangy twank twanker twanking twankingly twankle twanky twant twarly twas twasome twat twatchel twatterlight twattle twattler twattling tway twayblade twazzy tweag tweak tweaker tweaky twee tweed tweeded tweedle tweedledee tweedledum tweedy tweeg tweel tween tweenlight tweeny tweesh tweesht tweest tweet tweeter tweeze tweezer tweezers tweil twelfhynde twelfhyndeman twelfth twelfthly twelve twelvefold twelvehynde twelvehyndeman twelvemo twelvemonth twelvepence twelvepenny twelvescore twentieth twentiethly twenty twentyfold twentymo twere twerp twibil twibilled twice twicer twicet twichild twick twiddle twiddler twiddling twiddly twifoil twifold twifoldly twig twigful twigged twiggen twigger twiggy twigless twiglet twiglike twigsome twigwithy twilight twilightless twilightlike twilighty twilit twill twilled twiller twilling twilly twilt twin twinable twinberry twinborn twindle twine twineable twinebush twineless twinelike twinemaker twinemaking twiner twinflower twinfold twinge twingle twinhood twiningly twinism twink twinkle twinkledum twinkleproof twinkler twinkles twinkless twinkling twinklingly twinkly twinleaf twinlike twinling twinly twinned twinner twinness twinning twinship twinsomeness twinter twiny twire twirk twirl twirler twirligig twirly twiscar twisel twist twistable twisted twistedly twistened twister twisterer twistical twistification twistily twistiness twisting twistingly twistiways twistiwise twistle twistless twisty twit twitch twitchel twitcheling twitcher twitchet twitchety twitchfire twitchily twitchiness twitchingly twitchy twite twitlark twitten twitter twitteration twitterboned twitterer twittering twitteringly twitterly twittery twittingly twitty twixt twixtbrain twizzened twizzle two twodecker twofold twofoldly twofoldness twoling twoness twopence twopenny twosome twyblade twyhynde tychism tychite tychoparthenogenesis tychopotamic tycoon tycoonate tyddyn tydie tye tyee tyg tying tyke tyken tykhana tyking tylarus tyleberry tylion tyloma tylopod tylopodous tylose tylosis tylosteresis tylostylar tylostyle tylostylote tylostylus tylotate tylote tylotic tylotoxea tylotoxeate tylotus tylus tymbalon tymp tympan tympana tympanal tympanectomy tympani tympanic tympanichord tympanichordal tympanicity tympaniform tympaning tympanism tympanist tympanites tympanitic tympanitis tympanocervical tympanohyal tympanomalleal tympanomandibular tympanomastoid tympanomaxillary tympanon tympanoperiotic tympanosis tympanosquamosal tympanostapedial tympanotemporal tympanotomy tympanum tympany tynd tyndallmeter typal typarchical type typecast typeholder typer typescript typeset typesetter typesetting typewrite typewriter typewriting typhaceous typhemia typhia typhic typhinia typhization typhlatonia typhlatony typhlectasis typhlectomy typhlenteritis typhlitic typhlitis typhloalbuminuria typhlocele typhloempyema typhloenteritis typhlohepatitis typhlolexia typhlolithiasis typhlology typhlomegaly typhlon typhlopexia typhlopexy typhlophile typhlopid typhloptosis typhlosis typhlosolar typhlosole typhlostenosis typhlostomy typhlotomy typhobacillosis typhoemia typhogenic typhoid typhoidal typhoidin typhoidlike typholysin typhomalaria typhomalarial typhomania typhonia typhonic typhoon typhoonish typhopneumonia typhose typhosepsis typhosis typhotoxine typhous typhus typic typica typical typicality typically typicalness typicon typicum typification typifier typify typist typo typobar typocosmy typographer typographia typographic typographical typographically typographist typography typolithographic typolithography typologic typological typologically typologist typology typomania typometry typonym typonymal typonymic typonymous typophile typorama typoscript typotelegraph typotelegraphy typothere typothetae typp typtological typtologist typtology typy tyramine tyranness tyrannial tyrannic tyrannical tyrannically tyrannicalness tyrannicidal tyrannicide tyrannicly tyrannine tyrannism tyrannize tyrannizer tyrannizing tyrannizingly tyrannoid tyrannophobia tyrannosaur tyrannous tyrannously tyrannousness tyranny tyrant tyrantcraft tyrantlike tyrantship tyre tyremesis tyriasis tyro tyrocidin tyrocidine tyroglyphid tyrolite tyrology tyroma tyromancy tyromatous tyrone tyronic tyronism tyrosinase tyrosine tyrosinuria tyrosyl tyrotoxicon tyrotoxine tysonite tyste tyt tzaritza tzolkin tzontle u uang uayeb uberant uberous uberously uberousness uberty ubi ubication ubiety ubiquarian ubiquious ubiquit ubiquitarian ubiquitariness ubiquitary ubiquitous ubiquitously ubiquitousness ubiquity ubussu uckia udal udaler udaller udalman udasi udder uddered udderful udderless udderlike udell udo udometer udometric udometry udomograph ug ugh uglification uglifier uglify uglily ugliness uglisome ugly ugsome ugsomely ugsomeness uhlan uhllo uhtensang uhtsong uily uinal uintaite uintathere uintjie uitspan uji ukase uke ukiyoye ukulele ula ulatrophia ulcer ulcerable ulcerate ulceration ulcerative ulcered ulceromembranous ulcerous ulcerously ulcerousness ulcery ulcuscle ulcuscule ule ulema ulemorrhagia ulerythema uletic ulex ulexine ulexite uliginose uliginous ulitis ull ulla ullage ullaged ullagone uller ulling ullmannite ulluco ulmaceous ulmic ulmin ulminic ulmo ulmous ulna ulnad ulnae ulnar ulnare ulnaria ulnocarpal ulnocondylar ulnometacarpal ulnoradial uloborid ulocarcinoma uloid uloncus ulorrhagia ulorrhagy ulorrhea ulotrichaceous ulotrichan ulotrichous ulotrichy ulrichite ulster ulstered ulsterette ulstering ulterior ulteriorly ultima ultimacy ultimata ultimate ultimately ultimateness ultimation ultimatum ultimity ultimo ultimobranchial ultimogenitary ultimogeniture ultimum ultra ultrabasic ultrabasite ultrabelieving ultrabenevolent ultrabrachycephalic ultrabrachycephaly ultrabrilliant ultracentenarian ultracentenarianism ultracentralizer ultracentrifuge ultraceremonious ultrachurchism ultracivil ultracomplex ultraconcomitant ultracondenser ultraconfident ultraconscientious ultraconservatism ultraconservative ultracordial ultracosmopolitan ultracredulous ultracrepidarian ultracrepidarianism ultracrepidate ultracritical ultradandyism ultradeclamatory ultrademocratic ultradespotic ultradignified ultradiscipline ultradolichocephalic ultradolichocephaly ultradolichocranial ultraeducationist ultraeligible ultraelliptic ultraemphasis ultraenergetic ultraenforcement ultraenthusiasm ultraenthusiastic ultraepiscopal ultraevangelical ultraexcessive ultraexclusive ultraexpeditious ultrafantastic ultrafashionable ultrafastidious ultrafederalist ultrafeudal ultrafidian ultrafidianism ultrafilter ultrafilterability ultrafilterable ultrafiltrate ultrafiltration ultraformal ultrafrivolous ultragallant ultragaseous ultragenteel ultragood ultragrave ultraheroic ultrahonorable ultrahuman ultraimperialism ultraimperialist ultraimpersonal ultrainclusive ultraindifferent ultraindulgent ultraingenious ultrainsistent ultraintimate ultrainvolved ultraism ultraist ultraistic ultralaborious ultralegality ultralenient ultraliberal ultraliberalism ultralogical ultraloyal ultraluxurious ultramarine ultramaternal ultramaximal ultramelancholy ultramicrochemical ultramicrochemist ultramicrochemistry ultramicrometer ultramicron ultramicroscope ultramicroscopic ultramicroscopical ultramicroscopy ultraminute ultramoderate ultramodern ultramodernism ultramodernist ultramodernistic ultramodest ultramontane ultramontanism ultramontanist ultramorose ultramulish ultramundane ultranational ultranationalism ultranationalist ultranatural ultranegligent ultranice ultranonsensical ultraobscure ultraobstinate ultraofficious ultraoptimistic ultraornate ultraorthodox ultraorthodoxy ultraoutrageous ultrapapist ultraparallel ultraperfect ultrapersuasive ultraphotomicrograph ultrapious ultraplanetary ultraplausible ultrapopish ultraproud ultraprudent ultraradical ultraradicalism ultrarapid ultrareactionary ultrared ultrarefined ultrarefinement ultrareligious ultraremuneration ultrarepublican ultrarevolutionary ultrarevolutionist ultraritualism ultraromantic ultraroyalism ultraroyalist ultrasanguine ultrascholastic ultraselect ultraservile ultrasevere ultrashrewd ultrasimian ultrasolemn ultrasonic ultrasonics ultraspartan ultraspecialization ultraspiritualism ultrasplendid ultrastandardization ultrastellar ultrasterile ultrastrenuous ultrastrict ultrasubtle ultrasystematic ultratechnical ultratense ultraterrene ultraterrestrial ultratotal ultratrivial ultratropical ultraugly ultrauncommon ultraurgent ultravicious ultraviolent ultraviolet ultravirtuous ultravirus ultravisible ultrawealthy ultrawise ultrayoung ultrazealous ultrazodiacal ultroneous ultroneously ultroneousness ulu ulua uluhi ululant ululate ululation ululative ululatory ululu ulvaceous um umangite umbeclad umbel umbeled umbella umbellar umbellate umbellated umbellately umbellet umbellic umbellifer umbelliferone umbelliferous umbelliflorous umbelliform umbelloid umbellulate umbellule umbelluliferous umbelwort umber umbethink umbilectomy umbilic umbilical umbilically umbilicar umbilicate umbilicated umbilication umbilici umbiliciform umbilicus umbiliform umbilroot umble umbo umbolateral umbonal umbonate umbonated umbonation umbone umbones umbonial umbonic umbonulate umbonule umbra umbracious umbraciousness umbraculate umbraculiferous umbraculiform umbraculum umbrae umbrage umbrageous umbrageously umbrageousness umbral umbrally umbratile umbrel umbrella umbrellaed umbrellaless umbrellalike umbrellawise umbrellawort umbrette umbriferous umbriferously umbriferousness umbril umbrine umbrose umbrosity umbrous ume umiak umiri umlaut ump umph umpirage umpire umpirer umpireship umpiress umpirism umpteen umpteenth umptekite umptieth umpty umquhile umu un unabandoned unabased unabasedly unabashable unabashed unabashedly unabatable unabated unabatedly unabating unabatingly unabbreviated unabetted unabettedness unabhorred unabiding unabidingly unabidingness unability unabject unabjured unable unableness unably unabolishable unabolished unabraded unabrased unabridgable unabridged unabrogated unabrupt unabsent unabsolute unabsolvable unabsolved unabsolvedness unabsorb unabsorbable unabsorbed unabsorbent unabstract unabsurd unabundance unabundant unabundantly unabused unacademic unacademical unaccelerated unaccent unaccented unaccentuated unaccept unacceptability unacceptable unacceptableness unacceptably unacceptance unacceptant unaccepted unaccessibility unaccessible unaccessibleness unaccessibly unaccessional unaccessory unaccidental unaccidentally unaccidented unacclimated unacclimation unacclimatization unacclimatized unaccommodable unaccommodated unaccommodatedness unaccommodating unaccommodatingly unaccommodatingness unaccompanable unaccompanied unaccompanying unaccomplishable unaccomplished unaccomplishedness unaccord unaccordable unaccordance unaccordant unaccorded unaccording unaccordingly unaccostable unaccosted unaccountability unaccountable unaccountableness unaccountably unaccounted unaccoutered unaccoutred unaccreditated unaccredited unaccrued unaccumulable unaccumulate unaccumulated unaccumulation unaccuracy unaccurate unaccurately unaccurateness unaccursed unaccusable unaccusably unaccuse unaccusing unaccustom unaccustomed unaccustomedly unaccustomedness unachievable unachieved unaching unacidulated unacknowledged unacknowledgedness unacknowledging unacknowledgment unacoustic unacquaint unacquaintable unacquaintance unacquainted unacquaintedly unacquaintedness unacquiescent unacquirable unacquirableness unacquirably unacquired unacquit unacquittable unacquitted unacquittedness unact unactability unactable unacted unacting unactinic unaction unactivated unactive unactively unactiveness unactivity unactorlike unactual unactuality unactually unactuated unacute unacutely unadapt unadaptability unadaptable unadaptableness unadaptably unadapted unadaptedly unadaptedness unadaptive unadd unaddable unadded unaddicted unaddictedness unadditional unaddress unaddressed unadequate unadequately unadequateness unadherence unadherent unadherently unadhesive unadjacent unadjacently unadjectived unadjourned unadjournment unadjudged unadjust unadjustably unadjusted unadjustment unadministered unadmirable unadmire unadmired unadmiring unadmissible unadmissibly unadmission unadmittable unadmittableness unadmittably unadmitted unadmittedly unadmitting unadmonished unadopt unadoptable unadoptably unadopted unadoption unadorable unadoration unadored unadoring unadorn unadornable unadorned unadornedly unadornedness unadornment unadult unadulterate unadulterated unadulteratedly unadulteratedness unadulterately unadulterous unadulterously unadvanced unadvancedly unadvancedness unadvancement unadvancing unadvantaged unadvantageous unadventured unadventuring unadventurous unadventurously unadverse unadversely unadverseness unadvertency unadvertised unadvertisement unadvertising unadvisability unadvisable unadvisableness unadvisably unadvised unadvisedly unadvisedness unadvocated unaerated unaesthetic unaesthetical unafeard unafeared unaffable unaffably unaffected unaffectedly unaffectedness unaffecting unaffectionate unaffectionately unaffectioned unaffianced unaffied unaffiliated unaffiliation unaffirmation unaffirmed unaffixed unafflicted unafflictedly unafflicting unaffliction unaffordable unafforded unaffranchised unaffrighted unaffrightedly unaffronted unafire unafloat unaflow unafraid unaged unaggravated unaggravating unaggregated unaggression unaggressive unaggressively unaggressiveness unaghast unagile unagility unaging unagitated unagitatedly unagitatedness unagitation unagonize unagrarian unagreeable unagreeableness unagreeably unagreed unagreeing unagreement unagricultural unaidable unaided unaidedly unaiding unailing unaimed unaiming unaired unaisled unakin unakite unal unalarm unalarmed unalarming unalcoholized unaldermanly unalert unalertly unalertness unalgebraical unalienable unalienableness unalienably unalienated unalignable unaligned unalike unalimentary unalist unalive unallayable unallayably unallayed unalleged unallegorical unalleviably unalleviated unalleviation unalliable unallied unalliedly unalliedness unallotment unallotted unallow unallowable unallowed unallowedly unallowing unalloyed unallurable unallured unalluring unalluringly unalmsed unalone unaloud unalphabeted unalphabetic unalphabetical unalterability unalterable unalterableness unalterably unalteration unaltered unaltering unalternated unamalgamable unamalgamated unamalgamating unamassed unamazed unamazedly unambiguity unambiguous unambiguously unambiguousness unambition unambitious unambitiously unambitiousness unambrosial unambush unamenability unamenable unamenableness unamenably unamend unamendable unamended unamendedly unamending unamendment unamerced unamiability unamiable unamiableness unamiably unamicable unamicably unamiss unamo unamortization unamortized unample unamplifiable unamplified unamply unamputated unamusable unamusably unamused unamusement unamusing unamusingly unamusive unanalogical unanalogous unanalogously unanalogousness unanalytic unanalytical unanalyzable unanalyzed unanalyzing unanatomizable unanatomized unancestored unancestried unanchor unanchored unanchylosed unancient unaneled unangelic unangelical unangrily unangry unangular unanimalized unanimate unanimated unanimatedly unanimatedness unanimately unanimism unanimist unanimistic unanimistically unanimity unanimous unanimously unanimousness unannealed unannex unannexed unannexedly unannexedness unannihilable unannihilated unannotated unannounced unannoyed unannoying unannullable unannulled unanointed unanswerability unanswerable unanswerableness unanswerably unanswered unanswering unantagonistic unantagonizable unantagonized unantagonizing unanticipated unanticipating unanticipatingly unanticipation unanticipative unantiquated unantiquatedness unantique unantiquity unanxiety unanxious unanxiously unanxiousness unapart unapocryphal unapologetic unapologizing unapostatized unapostolic unapostolical unapostolically unapostrophized unappalled unappareled unapparent unapparently unapparentness unappealable unappealableness unappealably unappealed unappealing unappeasable unappeasableness unappeasably unappeased unappeasedly unappeasedness unappendaged unapperceived unappertaining unappetizing unapplauded unapplauding unapplausive unappliable unappliableness unappliably unapplianced unapplicable unapplicableness unapplicably unapplied unapplying unappoint unappointable unappointableness unappointed unapportioned unapposite unappositely unappraised unappreciable unappreciableness unappreciably unappreciated unappreciating unappreciation unappreciative unappreciatively unappreciativeness unapprehendable unapprehendableness unapprehendably unapprehended unapprehending unapprehensible unapprehensibleness unapprehension unapprehensive unapprehensively unapprehensiveness unapprenticed unapprised unapprisedly unapprisedness unapproachability unapproachable unapproachableness unapproached unapproaching unapprobation unappropriable unappropriate unappropriated unappropriately unappropriateness unappropriation unapprovable unapprovableness unapprovably unapproved unapproving unapprovingly unapproximate unapproximately unaproned unapropos unapt unaptitude unaptly unaptness unarbitrarily unarbitrariness unarbitrary unarbitrated unarch unarchdeacon unarched unarchitectural unarduous unarguable unarguableness unarguably unargued unarguing unargumentative unargumentatively unarisen unarising unaristocratic unaristocratically unarithmetical unarithmetically unark unarm unarmed unarmedly unarmedness unarmored unarmorial unaromatized unarousable unaroused unarousing unarraignable unarraigned unarranged unarray unarrayed unarrestable unarrested unarresting unarrival unarrived unarriving unarrogance unarrogant unarrogating unarted unartful unartfully unartfulness unarticled unarticulate unarticulated unartificial unartificiality unartificially unartistic unartistical unartistically unartistlike unary unascendable unascendableness unascended unascertainable unascertainableness unascertainably unascertained unashamed unashamedly unashamedness unasinous unaskable unasked unasking unasleep unaspersed unasphalted unaspirated unaspiring unaspiringly unaspiringness unassailable unassailableness unassailably unassailed unassailing unassassinated unassaultable unassaulted unassayed unassaying unassembled unassented unassenting unasserted unassertive unassertiveness unassessable unassessableness unassessed unassibilated unassiduous unassignable unassignably unassigned unassimilable unassimilated unassimilating unassimilative unassisted unassisting unassociable unassociably unassociated unassociative unassociativeness unassoiled unassorted unassuageable unassuaged unassuaging unassuetude unassumable unassumed unassuming unassumingly unassumingness unassured unassuredly unassuredness unassuring unasterisk unastonish unastonished unastonishment unastray unathirst unathletically unatmospheric unatonable unatoned unatoning unattach unattachable unattached unattackable unattackableness unattackably unattacked unattainability unattainable unattainableness unattainably unattained unattaining unattainment unattaint unattainted unattaintedly unattempered unattemptable unattempted unattempting unattendance unattendant unattended unattentive unattenuated unattested unattestedness unattire unattired unattractable unattractableness unattracted unattracting unattractive unattractively unattractiveness unattributable unattributed unattuned unau unauctioned unaudible unaudibleness unaudibly unaudienced unaudited unaugmentable unaugmented unauspicious unauspiciously unauspiciousness unaustere unauthentic unauthentical unauthentically unauthenticated unauthenticity unauthorish unauthoritative unauthoritatively unauthoritativeness unauthoritied unauthoritiveness unauthorizable unauthorize unauthorized unauthorizedly unauthorizedness unautomatic unautumnal unavailability unavailable unavailableness unavailably unavailed unavailful unavailing unavailingly unavengeable unavenged unavenging unavenued unaveraged unaverred unaverted unavertible unavertibleness unavertibly unavian unavoidable unavoidableness unavoidably unavoidal unavoided unavoiding unavouchable unavouchableness unavouchably unavouched unavowable unavowableness unavowably unavowed unavowedly unawakable unawakableness unawake unawaked unawakened unawakenedness unawakening unawaking unawardable unawardableness unawardably unawarded unaware unawared unawaredly unawareness unawares unaway unawed unawful unawfully unawkward unawned unaxled unazotized unbackboarded unbacked unbackward unbadged unbaffled unbaffling unbag unbagged unbailable unbailableness unbailed unbain unbait unbaited unbaized unbaked unbalance unbalanceable unbalanceably unbalanced unbalancement unbalancing unbalconied unbale unbalked unballast unballasted unballoted unbandage unbandaged unbanded unbanished unbank unbankable unbankableness unbankably unbanked unbankrupt unbannered unbaptize unbaptized unbar unbarb unbarbarize unbarbarous unbarbed unbarbered unbare unbargained unbark unbarking unbaronet unbarrable unbarred unbarrel unbarreled unbarren unbarrenness unbarricade unbarricaded unbarricadoed unbase unbased unbasedness unbashful unbashfully unbashfulness unbasket unbastardized unbaste unbasted unbastilled unbastinadoed unbated unbathed unbating unbatted unbatten unbatterable unbattered unbattling unbay unbe unbeached unbeaconed unbeaded unbear unbearable unbearableness unbearably unbeard unbearded unbearing unbeast unbeatable unbeatableness unbeatably unbeaten unbeaued unbeauteous unbeauteously unbeauteousness unbeautified unbeautiful unbeautifully unbeautifulness unbeautify unbeavered unbeclogged unbeclouded unbecome unbecoming unbecomingly unbecomingness unbed unbedabbled unbedaggled unbedashed unbedaubed unbedded unbedecked unbedewed unbedimmed unbedinned unbedizened unbedraggled unbefit unbefitting unbefittingly unbefittingness unbefool unbefriend unbefriended unbefringed unbeget unbeggar unbegged unbegilt unbeginning unbeginningly unbeginningness unbegirded unbegirt unbegot unbegotten unbegottenly unbegottenness unbegreased unbegrimed unbegrudged unbeguile unbeguiled unbeguileful unbegun unbehaving unbeheaded unbeheld unbeholdable unbeholden unbeholdenness unbeholding unbehoveful unbehoving unbeing unbejuggled unbeknown unbeknownst unbelied unbelief unbeliefful unbelieffulness unbelievability unbelievable unbelievableness unbelievably unbelieve unbelieved unbeliever unbelieving unbelievingly unbelievingness unbell unbellicose unbelligerent unbelonging unbeloved unbelt unbemoaned unbemourned unbench unbend unbendable unbendableness unbendably unbended unbending unbendingly unbendingness unbendsome unbeneficed unbeneficent unbeneficial unbenefitable unbenefited unbenefiting unbenetted unbenevolence unbenevolent unbenevolently unbenight unbenighted unbenign unbenignant unbenignantly unbenignity unbenignly unbent unbenumb unbenumbed unbequeathable unbequeathed unbereaved unbereft unberouged unberth unberufen unbeseem unbeseeming unbeseemingly unbeseemingness unbeseemly unbeset unbesieged unbesmeared unbesmirched unbesmutted unbesot unbesought unbespeak unbespoke unbespoken unbesprinkled unbestarred unbestowed unbet unbeteared unbethink unbethought unbetide unbetoken unbetray unbetrayed unbetraying unbetrothed unbetterable unbettered unbeveled unbewailed unbewailing unbewilder unbewildered unbewilled unbewitch unbewitched unbewitching unbewrayed unbewritten unbias unbiasable unbiased unbiasedly unbiasedness unbibulous unbickered unbickering unbid unbidable unbiddable unbidden unbigged unbigoted unbilled unbillet unbilleted unbind unbindable unbinding unbiographical unbiological unbirdlike unbirdlimed unbirdly unbirthday unbishop unbishoply unbit unbiting unbitt unbitted unbitten unbitter unblacked unblackened unblade unblamable unblamableness unblamably unblamed unblaming unblanched unblanketed unblasphemed unblasted unblazoned unbleached unbleaching unbled unbleeding unblemishable unblemished unblemishedness unblemishing unblenched unblenching unblenchingly unblendable unblended unblent unbless unblessed unblessedness unblest unblighted unblightedly unblightedness unblind unblindfold unblinking unblinkingly unbliss unblissful unblistered unblithe unblithely unblock unblockaded unblocked unblooded unbloodied unbloodily unbloodiness unbloody unbloom unbloomed unblooming unblossomed unblossoming unblotted unbloused unblown unblued unbluestockingish unbluffed unbluffing unblunder unblundered unblundering unblunted unblurred unblush unblushing unblushingly unblushingness unboarded unboasted unboastful unboastfully unboasting unboat unbodied unbodiliness unbodily unboding unbodkined unbody unbodylike unbog unboggy unbohemianize unboiled unboisterous unbokel unbold unbolden unboldly unboldness unbolled unbolster unbolstered unbolt unbolted unbombast unbondable unbondableness unbonded unbone unboned unbonnet unbonneted unbonny unbooked unbookish unbooklearned unboot unbooted unboraxed unborder unbordered unbored unboring unborn unborne unborough unborrowed unborrowing unbosom unbosomer unbossed unbotanical unbothered unbothering unbottle unbottom unbottomed unbought unbound unboundable unboundableness unboundably unbounded unboundedly unboundedness unboundless unbounteous unbountiful unbountifully unbountifulness unbow unbowable unbowdlerized unbowed unbowel unboweled unbowered unbowing unbowingness unbowled unbowsome unbox unboxed unboy unboyish unboylike unbrace unbraced unbracedness unbracelet unbraceleted unbracing unbragged unbragging unbraid unbraided unbrailed unbrained unbran unbranched unbranching unbrand unbranded unbrandied unbrave unbraved unbravely unbraze unbreachable unbreached unbreaded unbreakable unbreakableness unbreakably unbreakfasted unbreaking unbreast unbreath unbreathable unbreathableness unbreathed unbreathing unbred unbreech unbreeched unbreezy unbrent unbrewed unbribable unbribableness unbribably unbribed unbribing unbrick unbridegroomlike unbridgeable unbridged unbridle unbridled unbridledly unbridledness unbridling unbrief unbriefed unbriefly unbright unbrightened unbrilliant unbrimming unbrined unbrittle unbroached unbroad unbroadcasted unbroidered unbroiled unbroke unbroken unbrokenly unbrokenness unbronzed unbrooch unbrooded unbrookable unbrookably unbrothered unbrotherlike unbrotherliness unbrotherly unbrought unbrown unbrowned unbruised unbrushed unbrutalize unbrutalized unbrute unbrutelike unbrutify unbrutize unbuckle unbuckramed unbud unbudded unbudgeability unbudgeable unbudgeableness unbudgeably unbudged unbudgeted unbudging unbuffed unbuffered unbuffeted unbuild unbuilded unbuilt unbulky unbulled unbulletined unbumped unbumptious unbunched unbundle unbundled unbung unbungling unbuoyant unbuoyed unburden unburdened unburdenment unburdensome unburdensomeness unburgessed unburiable unburial unburied unburlesqued unburly unburn unburnable unburned unburning unburnished unburnt unburrow unburrowed unburst unburstable unburstableness unburthen unbury unbush unbusied unbusily unbusiness unbusinesslike unbusk unbuskin unbuskined unbustling unbusy unbutchered unbutcherlike unbuttered unbutton unbuttoned unbuttonment unbuttressed unbuxom unbuxomly unbuxomness unbuyable unbuyableness unbuying unca uncabined uncabled uncadenced uncage uncaged uncake uncalcareous uncalcified uncalcined uncalculable uncalculableness uncalculably uncalculated uncalculating uncalculatingly uncalendered uncalk uncalked uncall uncalled uncallow uncallower uncalm uncalmed uncalmly uncalumniated uncambered uncamerated uncamouflaged uncanceled uncancellable uncancelled uncandid uncandidly uncandidness uncandied uncandor uncaned uncankered uncanned uncannily uncanniness uncanny uncanonic uncanonical uncanonically uncanonicalness uncanonize uncanonized uncanopied uncantoned uncantonized uncanvassably uncanvassed uncap uncapable uncapableness uncapably uncapacious uncapacitate uncaparisoned uncapitalized uncapped uncapper uncapsizable uncapsized uncaptained uncaptioned uncaptious uncaptiously uncaptivate uncaptivated uncaptivating uncaptived uncapturable uncaptured uncarbonated uncarboned uncarbureted uncarded uncardinal uncardinally uncareful uncarefully uncarefulness uncaressed uncargoed uncaricatured uncaring uncarnate uncarnivorous uncaroled uncarpentered uncarpeted uncarriageable uncarried uncart uncarted uncartooned uncarved uncase uncased uncasemated uncask uncasked uncasketed uncasque uncassock uncast uncaste uncastigated uncastle uncastled uncastrated uncasual uncatalogued uncatchable uncate uncatechised uncatechisedness uncatechized uncatechizedness uncategorized uncathedraled uncatholcity uncatholic uncatholical uncatholicalness uncatholicize uncatholicly uncaucusable uncaught uncausatively uncaused uncauterized uncautious uncautiously uncautiousness uncavalier uncavalierly uncave unceasable unceased unceasing unceasingly unceasingness unceded unceiled unceilinged uncelebrated uncelebrating uncelestial uncelestialized uncellar uncement uncemented uncementing uncensorable uncensored uncensorious uncensoriously uncensoriousness uncensurable uncensured uncensuring uncenter uncentered uncentral uncentrality uncentrally uncentred uncentury uncereclothed unceremented unceremonial unceremonious unceremoniously unceremoniousness uncertain uncertainly uncertainness uncertainty uncertifiable uncertifiableness uncertificated uncertified uncertifying uncertitude uncessant uncessantly uncessantness unchafed unchain unchainable unchained unchair unchaired unchalked unchallengeable unchallengeableness unchallengeably unchallenged unchallenging unchambered unchamfered unchampioned unchance unchancellor unchancy unchange unchangeability unchangeable unchangeableness unchangeably unchanged unchangedness unchangeful unchangefulness unchanging unchangingly unchangingness unchanneled unchannelled unchanted unchaperoned unchaplain unchapleted unchapter unchaptered uncharacter uncharactered uncharacteristic uncharacteristically uncharacterized uncharge unchargeable uncharged uncharging uncharily unchariness unchariot uncharitable uncharitableness uncharitably uncharity uncharm uncharmable uncharmed uncharming uncharnel uncharred uncharted unchartered unchary unchased unchaste unchastely unchastened unchasteness unchastisable unchastised unchastising unchastity unchatteled unchauffeured unchawed uncheat uncheated uncheating uncheck uncheckable unchecked uncheckered uncheerable uncheered uncheerful uncheerfully uncheerfulness uncheerily uncheeriness uncheering uncheery unchemical unchemically uncherished uncherishing unchested unchevroned unchewable unchewableness unchewed unchid unchidden unchided unchiding unchidingly unchild unchildish unchildishly unchildishness unchildlike unchilled unchiming unchinked unchipped unchiseled unchiselled unchivalric unchivalrous unchivalrously unchivalrousness unchivalry unchloridized unchoicely unchokable unchoked uncholeric unchoosable unchopped unchoral unchorded unchosen unchrisom unchristen unchristened unchristian unchristianity unchristianize unchristianized unchristianlike unchristianly unchristianness unchronicled unchronological unchronologically unchurch unchurched unchurchlike unchurchly unchurn unci uncia uncial uncialize uncially uncicatrized unciferous unciform unciliated uncinal uncinariasis uncinariatic uncinate uncinated uncinatum uncinch uncinct uncinctured uncini uncinus uncipher uncircular uncircularized uncirculated uncircumcised uncircumcisedness uncircumcision uncircumlocutory uncircumscribable uncircumscribed uncircumscribedness uncircumscript uncircumscriptible uncircumscription uncircumspect uncircumspection uncircumspectly uncircumspectness uncircumstanced uncircumstantial uncirostrate uncite uncited uncitied uncitizen uncitizenlike uncitizenly uncity uncivic uncivil uncivilish uncivility uncivilizable uncivilization uncivilize uncivilized uncivilizedly uncivilizedness uncivilly uncivilness unclad unclaimed unclaiming unclamorous unclamp unclamped unclarified unclarifying unclarity unclashing unclasp unclasped unclassable unclassableness unclassably unclassed unclassible unclassical unclassically unclassifiable unclassifiableness unclassification unclassified unclassify unclassifying unclawed unclay unclayed uncle unclead unclean uncleanable uncleaned uncleanlily uncleanliness uncleanly uncleanness uncleansable uncleanse uncleansed uncleansedness unclear uncleared unclearing uncleavable uncleave uncledom uncleft unclehood unclement unclemently unclementness unclench unclergy unclergyable unclerical unclericalize unclerically unclericalness unclerklike unclerkly uncleship unclever uncleverly uncleverness unclew unclick uncliented unclify unclimaxed unclimb unclimbable unclimbableness unclimbably unclimbed unclimbing unclinch uncling unclinical unclip unclipped unclipper uncloak uncloakable uncloaked unclog unclogged uncloister uncloistered uncloistral unclosable unclose unclosed uncloseted unclothe unclothed unclothedly unclothedness unclotted uncloud unclouded uncloudedly uncloudedness uncloudy unclout uncloven uncloyable uncloyed uncloying unclub unclubbable unclubby unclustered unclustering unclutch unclutchable unclutched unclutter uncluttered unco uncoach uncoachable uncoachableness uncoached uncoacted uncoagulable uncoagulated uncoagulating uncoat uncoated uncoatedness uncoaxable uncoaxed uncoaxing uncock uncocked uncockneyfy uncocted uncodded uncoddled uncoded uncodified uncoerced uncoffer uncoffin uncoffined uncoffle uncogent uncogged uncogitable uncognizable uncognizant uncognized uncognoscibility uncognoscible uncoguidism uncoherent uncoherently uncoherentness uncohesive uncoif uncoifed uncoil uncoiled uncoin uncoined uncoked uncoking uncollapsed uncollapsible uncollar uncollared uncollated uncollatedness uncollected uncollectedly uncollectedness uncollectible uncollectibleness uncollectibly uncolleged uncollegian uncollegiate uncolloquial uncolloquially uncolonellike uncolonial uncolonize uncolonized uncolorable uncolorably uncolored uncoloredly uncoloredness uncoloured uncolouredly uncolouredness uncolt uncoly uncombable uncombatable uncombated uncombed uncombinable uncombinableness uncombinably uncombine uncombined uncombining uncombiningness uncombustible uncome uncomelily uncomeliness uncomely uncomfort uncomfortable uncomfortableness uncomfortably uncomforted uncomforting uncomfy uncomic uncommanded uncommandedness uncommanderlike uncommemorated uncommenced uncommendable uncommendableness uncommendably uncommended uncommensurability uncommensurable uncommensurableness uncommensurate uncommented uncommenting uncommerciable uncommercial uncommercially uncommercialness uncommingled uncomminuted uncommiserated uncommiserating uncommissioned uncommitted uncommitting uncommixed uncommodious uncommodiously uncommodiousness uncommon uncommonable uncommonly uncommonness uncommonplace uncommunicable uncommunicableness uncommunicably uncommunicated uncommunicating uncommunicative uncommunicatively uncommunicativeness uncommutable uncommutative uncommuted uncompact uncompacted uncompahgrite uncompaniable uncompanied uncompanioned uncomparable uncomparably uncompared uncompass uncompassable uncompassed uncompassion uncompassionate uncompassionated uncompassionately uncompassionateness uncompassionating uncompassioned uncompatible uncompatibly uncompellable uncompelled uncompelling uncompensable uncompensated uncompetent uncompetitive uncompiled uncomplacent uncomplained uncomplaining uncomplainingly uncomplainingness uncomplaint uncomplaisance uncomplaisant uncomplaisantly uncomplemental uncompletable uncomplete uncompleted uncompletely uncompleteness uncomplex uncompliability uncompliable uncompliableness uncompliance uncompliant uncomplicated uncomplimentary uncomplimented uncomplimenting uncomplying uncomposable uncomposeable uncomposed uncompoundable uncompounded uncompoundedly uncompoundedness uncompounding uncomprehended uncomprehending uncomprehendingly uncomprehendingness uncomprehensible uncomprehension uncomprehensive uncomprehensively uncomprehensiveness uncompressed uncompressible uncomprised uncomprising uncomprisingly uncompromised uncompromising uncompromisingly uncompromisingness uncompulsive uncompulsory uncomputable uncomputableness uncomputably uncomputed uncomraded unconcatenated unconcatenating unconcealable unconcealableness unconcealably unconcealed unconcealing unconcealingly unconcealment unconceded unconceited unconceivable unconceivableness unconceivably unconceived unconceiving unconcern unconcerned unconcernedly unconcernedness unconcerning unconcernment unconcertable unconcerted unconcertedly unconcertedness unconcessible unconciliable unconciliated unconciliatedness unconciliating unconciliatory unconcludable unconcluded unconcluding unconcludingness unconclusive unconclusively unconclusiveness unconcocted unconcordant unconcrete unconcreted unconcurrent unconcurring uncondemnable uncondemned uncondensable uncondensableness uncondensed uncondensing uncondescending uncondescension uncondition unconditional unconditionality unconditionally unconditionalness unconditionate unconditionated unconditionately unconditioned unconditionedly unconditionedness uncondoled uncondoling unconducing unconducive unconduciveness unconducted unconductive unconductiveness unconfected unconfederated unconferred unconfess unconfessed unconfessing unconfided unconfidence unconfident unconfidential unconfidentialness unconfidently unconfiding unconfinable unconfine unconfined unconfinedly unconfinedness unconfinement unconfining unconfirm unconfirmative unconfirmed unconfirming unconfiscable unconfiscated unconflicting unconflictingly unconflictingness unconformability unconformable unconformableness unconformably unconformed unconformedly unconforming unconformist unconformity unconfound unconfounded unconfoundedly unconfrontable unconfronted unconfusable unconfusably unconfused unconfusedly unconfutable unconfuted unconfuting uncongeal uncongealable uncongealed uncongenial uncongeniality uncongenially uncongested unconglobated unconglomerated unconglutinated uncongratulate uncongratulated uncongratulating uncongregated uncongregational uncongressional uncongruous unconjecturable unconjectured unconjoined unconjugal unconjugated unconjunctive unconjured unconnected unconnectedly unconnectedness unconned unconnived unconniving unconquerable unconquerableness unconquerably unconquered unconscienced unconscient unconscientious unconscientiously unconscientiousness unconscionable unconscionableness unconscionably unconscious unconsciously unconsciousness unconsecrate unconsecrated unconsecratedly unconsecratedness unconsecration unconsecutive unconsent unconsentaneous unconsented unconsenting unconsequential unconsequentially unconsequentialness unconservable unconservative unconserved unconserving unconsiderable unconsiderate unconsiderately unconsiderateness unconsidered unconsideredly unconsideredness unconsidering unconsideringly unconsignable unconsigned unconsistent unconsociable unconsociated unconsolable unconsolably unconsolatory unconsoled unconsolidated unconsolidating unconsolidation unconsoling unconsonancy unconsonant unconsonantly unconsonous unconspicuous unconspicuously unconspicuousness unconspired unconspiring unconspiringly unconspiringness unconstancy unconstant unconstantly unconstantness unconstellated unconstipated unconstituted unconstitutional unconstitutionalism unconstitutionality unconstitutionally unconstrainable unconstrained unconstrainedly unconstrainedness unconstraining unconstraint unconstricted unconstruable unconstructed unconstructive unconstructural unconstrued unconsular unconsult unconsultable unconsulted unconsulting unconsumable unconsumed unconsuming unconsummate unconsummated unconsumptive uncontagious uncontainable uncontainableness uncontainably uncontained uncontaminable uncontaminate uncontaminated uncontemned uncontemnedly uncontemplated uncontemporaneous uncontemporary uncontemptuous uncontended uncontending uncontent uncontentable uncontented uncontentedly uncontentedness uncontenting uncontentingness uncontentious uncontentiously uncontentiousness uncontestable uncontestableness uncontestably uncontested uncontestedly uncontestedness uncontinence uncontinent uncontinental uncontinented uncontinently uncontinual uncontinued uncontinuous uncontorted uncontract uncontracted uncontractedness uncontractile uncontradictable uncontradictableness uncontradictably uncontradicted uncontradictedly uncontradictious uncontradictory uncontrastable uncontrasted uncontrasting uncontributed uncontributing uncontributory uncontrite uncontrived uncontriving uncontrol uncontrollability uncontrollable uncontrollableness uncontrollably uncontrolled uncontrolledly uncontrolledness uncontrolling uncontroversial uncontroversially uncontrovertable uncontrovertableness uncontrovertably uncontroverted uncontrovertedly uncontrovertible uncontrovertibleness uncontrovertibly unconvenable unconvened unconvenience unconvenient unconveniently unconventional unconventionalism unconventionality unconventionalize unconventionally unconventioned unconversable unconversableness unconversably unconversant unconversational unconversion unconvert unconverted unconvertedly unconvertedness unconvertibility unconvertible unconveyable unconveyed unconvicted unconvicting unconvince unconvinced unconvincedly unconvincedness unconvincibility unconvincible unconvincing unconvincingly unconvincingness unconvoluted unconvoyed unconvulsed uncookable uncooked uncooled uncoop uncooped uncoopered uncooping uncope uncopiable uncopied uncopious uncopyrighted uncoquettish uncoquettishly uncord uncorded uncordial uncordiality uncordially uncording uncore uncored uncork uncorked uncorker uncorking uncorned uncorner uncoronated uncoroneted uncorporal uncorpulent uncorrect uncorrectable uncorrected uncorrectible uncorrectly uncorrectness uncorrelated uncorrespondency uncorrespondent uncorresponding uncorrigible uncorrigibleness uncorrigibly uncorroborated uncorroded uncorrugated uncorrupt uncorrupted uncorruptedly uncorruptedness uncorruptibility uncorruptible uncorruptibleness uncorruptibly uncorrupting uncorruption uncorruptive uncorruptly uncorruptness uncorseted uncosseted uncost uncostliness uncostly uncostumed uncottoned uncouch uncouched uncouching uncounselable uncounseled uncounsellable uncounselled uncountable uncountableness uncountably uncounted uncountenanced uncounteracted uncounterbalanced uncounterfeit uncounterfeited uncountermandable uncountermanded uncountervailed uncountess uncountrified uncouple uncoupled uncoupler uncourageous uncoursed uncourted uncourteous uncourteously uncourteousness uncourtierlike uncourting uncourtlike uncourtliness uncourtly uncous uncousinly uncouth uncouthie uncouthly uncouthness uncouthsome uncovenant uncovenanted uncover uncoverable uncovered uncoveredly uncoveted uncoveting uncovetingly uncovetous uncowed uncowl uncoy uncracked uncradled uncraftily uncraftiness uncrafty uncram uncramp uncramped uncrampedness uncranked uncrannied uncrated uncravatted uncraven uncraving uncravingly uncrazed uncream uncreased uncreatability uncreatable uncreatableness uncreate uncreated uncreatedness uncreating uncreation uncreative uncreativeness uncreaturely uncredentialed uncredentialled uncredibility uncredible uncredibly uncreditable uncreditableness uncreditably uncredited uncrediting uncredulous uncreeping uncreosoted uncrest uncrested uncrevassed uncrib uncried uncrime uncriminal uncriminally uncrinkle uncrinkled uncrinkling uncrippled uncrisp uncritical uncritically uncriticisable uncriticised uncriticising uncriticisingly uncriticism uncriticizable uncriticized uncriticizing uncriticizingly uncrochety uncrook uncrooked uncrooking uncropped uncropt uncross uncrossable uncrossableness uncrossed uncrossexaminable uncrossexamined uncrossly uncrowded uncrown uncrowned uncrowning uncrucified uncrudded uncrude uncruel uncrumbled uncrumple uncrumpling uncrushable uncrushed uncrusted uncrying uncrystaled uncrystalled uncrystalline uncrystallizability uncrystallizable uncrystallized unction unctional unctioneer unctionless unctious unctiousness unctorium unctuose unctuosity unctuous unctuously unctuousness uncubbed uncubic uncuckold uncuckolded uncudgelled uncuffed uncular unculled uncultivability uncultivable uncultivate uncultivated uncultivation unculturable unculture uncultured uncumber uncumbered uncumbrous uncunning uncunningly uncunningness uncupped uncurable uncurableness uncurably uncurb uncurbable uncurbed uncurbedly uncurbing uncurd uncurdled uncurdling uncured uncurious uncuriously uncurl uncurled uncurling uncurrent uncurrently uncurrentness uncurricularized uncurried uncurse uncursed uncursing uncurst uncurtailed uncurtain uncurtained uncus uncushioned uncusped uncustomable uncustomarily uncustomariness uncustomary uncustomed uncut uncuth uncuticulate uncuttable uncynical uncynically uncypress undabbled undaggled undaily undaintiness undainty undallying undam undamageable undamaged undamaging undamasked undammed undamming undamn undamped undancing undandiacal undandled undangered undangerous undangerousness undared undaring undark undarken undarkened undarned undashed undatable undate undateable undated undatedness undaub undaubed undaughter undaughterliness undaughterly undauntable undaunted undauntedly undauntedness undaunting undawned undawning undazed undazing undazzle undazzled undazzling unde undead undeadened undeaf undealable undealt undean undear undebarred undebased undebatable undebated undebating undebauched undebilitated undebilitating undecagon undecanaphthene undecane undecatoic undecayable undecayableness undecayed undecayedness undecaying undeceased undeceitful undeceivable undeceivableness undeceivably undeceive undeceived undeceiver undeceiving undecency undecennary undecennial undecent undecently undeception undeceptious undeceptitious undeceptive undecidable undecide undecided undecidedly undecidedness undeciding undecimal undeciman undecimole undecipher undecipherability undecipherable undecipherably undeciphered undecision undecisive undecisively undecisiveness undeck undecked undeclaimed undeclaiming undeclamatory undeclarable undeclare undeclared undeclinable undeclinableness undeclinably undeclined undeclining undecocted undecoic undecolic undecomposable undecomposed undecompounded undecorated undecorative undecorous undecorously undecorousness undecorticated undecoyed undecreased undecreasing undecree undecreed undecried undecyl undecylenic undecylic undedicate undedicated undeducible undeducted undeeded undeemed undeemous undeemously undeep undefaceable undefaced undefalcated undefamed undefaming undefatigable undefaulted undefaulting undefeasible undefeat undefeatable undefeated undefeatedly undefeatedness undefecated undefectible undefective undefectiveness undefendable undefendableness undefendably undefended undefending undefense undefensed undefensible undeferential undeferentially undeferred undefiant undeficient undefied undefilable undefiled undefiledly undefiledness undefinable undefinableness undefinably undefine undefined undefinedly undefinedness undeflected undeflowered undeformed undeformedness undefrauded undefrayed undeft undegeneracy undegenerate undegenerated undegenerating undegraded undegrading undeification undeified undeify undeistical undejected undelated undelayable undelayed undelayedly undelaying undelayingly undelectable undelectably undelegated undeleted undeliberate undeliberated undeliberately undeliberateness undeliberating undeliberatingly undeliberative undeliberativeness undelible undelicious undelight undelighted undelightful undelightfully undelightfulness undelighting undelightsome undelimited undelineated undeliverable undeliverableness undelivered undelivery undeludable undelude undeluded undeluding undeluged undelusive undelusively undelve undelved undelylene undemagnetizable undemanded undemised undemocratic undemocratically undemocratize undemolishable undemolished undemonstrable undemonstrably undemonstratable undemonstrated undemonstrative undemonstratively undemonstrativeness undemure undemurring unden undeniable undeniableness undeniably undenied undeniedly undenizened undenominated undenominational undenominationalism undenominationalist undenominationalize undenominationally undenoted undenounced undenuded undepartableness undepartably undeparted undeparting undependable undependableness undependably undependent undepending undephlegmated undepicted undepleted undeplored undeported undeposable undeposed undeposited undepraved undepravedness undeprecated undepreciated undepressed undepressible undepressing undeprivable undeprived undepurated undeputed under underabyss underaccident underaccommodated underact underacted underacting underaction underactor underadjustment underadmiral underadventurer underage underagency underagent underagitation underaid underaim underair underalderman underanged underarch underargue underarm underaverage underback underbailiff underbake underbalance underballast underbank underbarber underbarring underbasal underbeadle underbeak underbeam underbear underbearer underbearing underbeat underbeaten underbed underbelly underbeveling underbid underbidder underbill underbillow underbishop underbishopric underbit underbite underbitted underbitten underboard underboated underbodice underbody underboil underboom underborn underborne underbottom underbough underbought underbound underbowed underbowser underbox underboy underbrace underbraced underbranch underbreath underbreathing underbred underbreeding underbrew underbridge underbrigadier underbright underbrim underbrush underbubble underbud underbuild underbuilder underbuilding underbuoy underburn underburned underburnt underbursar underbury underbush underbutler underbuy undercanopy undercanvass undercap undercapitaled undercapitalization undercapitalize undercaptain undercarder undercarriage undercarry undercarter undercarve undercarved undercase undercasing undercast undercause underceiling undercellar undercellarer underchamber underchamberlain underchancellor underchanter underchap undercharge undercharged underchief underchime underchin underchord underchurched undercircle undercitizen underclad underclass underclassman underclay underclearer underclerk underclerkship undercliff underclift undercloak undercloth underclothe underclothed underclothes underclothing underclub underclutch undercoachman undercoat undercoated undercoater undercoating undercollector undercolor undercolored undercoloring undercommander undercomment undercompounded underconcerned undercondition underconsciousness underconstable underconsume underconsumption undercook undercool undercooper undercorrect undercountenance undercourse undercourtier undercover undercovering undercovert undercrawl undercreep undercrest undercrier undercroft undercrop undercrust undercry undercrypt undercup undercurl undercurrent undercurve undercut undercutter undercutting underdauber underdeacon underdead underdebauchee underdeck underdepth underdevelop underdevelopment underdevil underdialogue underdig underdip underdish underdistinction underdistributor underditch underdive underdo underdoctor underdoer underdog underdoing underdone underdose underdot underdown underdraft underdrag underdrain underdrainage underdrainer underdraught underdraw underdrawers underdrawn underdress underdressed underdrift underdrive underdriven underdrudgery underdrumming underdry underdunged underearth undereat undereaten underedge undereducated underemployment underengraver underenter underer underescheator underestimate underestimation underexcited underexercise underexpose underexposure undereye underface underfaction underfactor underfaculty underfalconer underfall underfarmer underfeathering underfeature underfed underfeed underfeeder underfeeling underfeet underfellow underfiend underfill underfilling underfinance underfind underfire underfitting underflame underflannel underfleece underflood underfloor underflooring underflow underfold underfolded underfong underfoot underfootage underfootman underforebody underform underfortify underframe underframework underframing underfreight underfrequency underfringe underfrock underfur underfurnish underfurnisher underfurrow undergabble undergamekeeper undergaoler undergarb undergardener undergarment undergarnish undergauge undergear undergeneral undergentleman undergird undergirder undergirding undergirdle undergirth underglaze undergloom underglow undergnaw undergo undergod undergoer undergoing undergore undergoverness undergovernment undergovernor undergown undergrad undergrade undergraduate undergraduatedom undergraduateness undergraduateship undergraduatish undergraduette undergraining undergrass undergreen undergrieve undergroan underground undergrounder undergroundling undergrove undergrow undergrowl undergrown undergrowth undergrub underguard underguardian undergunner underhabit underhammer underhand underhanded underhandedly underhandedness underhang underhanging underhangman underhatch underhead underheat underheaven underhelp underhew underhid underhill underhint underhistory underhive underhold underhole underhonest underhorse underhorsed underhousemaid underhum underhung underided underinstrument underisive underissue underivable underivative underived underivedly underivedness underjacket underjailer underjanitor underjaw underjawed underjobbing underjudge underjungle underkeel underkeeper underkind underking underkingdom underlaborer underlaid underlain underland underlanguaged underlap underlapper underlash underlaundress underlawyer underlay underlayer underlaying underleaf underlease underleather underlegate underlessee underlet underletter underlevel underlever underlid underlie underlier underlieutenant underlife underlift underlight underliking underlimbed underlimit underline underlineation underlineman underlinement underlinen underliner underling underlining underlip underlive underload underlock underlodging underloft underlook underlooker underlout underlunged underly underlye underlying undermade undermaid undermaker underman undermanager undermanned undermanning undermark undermarshal undermarshalman undermasted undermaster undermatch undermatched undermate undermath undermeal undermeaning undermeasure undermediator undermelody undermentioned undermiller undermimic underminable undermine underminer undermining underminingly underminister underministry undermist undermoated undermoney undermoral undermost undermotion undermount undermountain undermusic undermuslin undern undername undernatural underneath underness underniceness undernote undernoted undernourish undernourished undernourishment undernsong underntide underntime undernurse undernutrition underoccupied underofficer underofficered underofficial underogating underogatory underopinion underorb underorganization underorseman underoverlooker underoxidize underpacking underpaid underpain underpainting underpan underpants underparticipation underpartner underpass underpassion underpay underpayment underpeep underpeer underpen underpeopled underpetticoat underpetticoated underpick underpier underpilaster underpile underpin underpinner underpinning underpitch underpitched underplain underplan underplant underplate underplay underplot underplotter underply underpoint underpole underpopulate underpopulation underporch underporter underpose underpossessor underpot underpower underpraise underprefect underprentice underpresence underpresser underpressure underprice underpriest underprincipal underprint underprior underprivileged underprize underproduce underproduction underproductive underproficient underprompt underprompter underproof underprop underproportion underproportioned underproposition underpropped underpropper underpropping underprospect underpry underpuke underqualified underqueen underquote underranger underrate underratement underrating underreach underread underreader underrealize underrealm underream underreamer underreceiver underreckon underrecompense underregion underregistration underrent underrented underrenting underrepresent underrepresentation underrespected underriddle underriding underrigged underring underripe underripened underriver underroarer underroast underrobe underrogue underroll underroller underroof underroom underroot underrooted underrower underrule underruler underrun underrunning undersacristan undersailed undersally undersap undersatisfaction undersaturate undersaturation undersavior undersaw undersawyer underscale underscheme underschool underscoop underscore underscribe underscript underscrub underscrupulous undersea underseam underseaman undersearch underseas underseated undersecretary undersecretaryship undersect undersee underseeded underseedman undersell underseller underselling undersense undersequence underservant underserve underservice underset undersetter undersetting undersettle undersettler undersettling undersexton undershapen undersharp undersheathing undershepherd undersheriff undersheriffry undersheriffship undersheriffwick undershield undershine undershining undershire undershirt undershoe undershoot undershore undershorten undershot undershrievalty undershrieve undershrievery undershrub undershrubbiness undershrubby undershunter undershut underside undersight undersighted undersign undersignalman undersigner undersill undersinging undersitter undersize undersized underskin underskirt undersky undersleep undersleeve underslip underslope undersluice underslung undersneer undersociety undersoil undersole undersomething undersong undersorcerer undersort undersoul undersound undersovereign undersow underspar undersparred underspecies underspecified underspend undersphere underspin underspinner undersplice underspore underspread underspring undersprout underspurleather undersquare understaff understage understain understairs understamp understand understandability understandable understandableness understandably understander understanding understandingly understandingness understate understatement understay understeer understem understep understeward understewardship understimulus understock understocking understood understory understrain understrap understrapper understrapping understratum understream understress understrew understride understriding understrife understrike understring understroke understrung understudy understuff understuffing undersuck undersuggestion undersuit undersupply undersupport undersurface underswain underswamp undersward underswearer undersweat undersweep underswell undertakable undertake undertakement undertaker undertakerish undertakerlike undertakerly undertakery undertaking undertakingly undertalk undertapster undertaxed underteacher underteamed underteller undertenancy undertenant undertenter undertenure underterrestrial undertest underthane underthaw underthief underthing underthink underthirst underthought underthroating underthrob underthrust undertide undertided undertie undertime undertimed undertint undertitle undertone undertoned undertook undertow undertrader undertrained undertread undertreasurer undertreat undertribe undertrick undertrodden undertruck undertrump undertruss undertub undertune undertunic underturf underturn underturnkey undertutor undertwig undertype undertyrant underusher undervaluation undervalue undervaluement undervaluer undervaluing undervaluinglike undervaluingly undervalve undervassal undervaulted undervaulting undervegetation underventilation underverse undervest undervicar underviewer undervillain undervinedresser undervitalized undervocabularied undervoice undervoltage underwage underwaist underwaistcoat underwalk underward underwarden underwarmth underwarp underwash underwatch underwatcher underwater underwave underway underweapon underwear underweft underweigh underweight underweighted underwent underwheel underwhistle underwind underwing underwit underwitch underwitted underwood underwooded underwork underworker underworking underworkman underworld underwrap underwrite underwriter underwriting underwrought underyield underyoke underzeal underzealot undescendable undescended undescendible undescribable undescribably undescribed undescried undescript undescriptive undescrying undesert undeserted undeserting undeserve undeserved undeservedly undeservedness undeserver undeserving undeservingly undeservingness undesign undesignated undesigned undesignedly undesignedness undesigning undesigningly undesigningness undesirability undesirable undesirableness undesirably undesire undesired undesiredly undesiring undesirous undesirously undesirousness undesisting undespaired undespairing undespairingly undespatched undespised undespising undespoiled undespondent undespondently undesponding undespotic undestined undestroyable undestroyed undestructible undestructive undetachable undetached undetailed undetainable undetained undetectable undetected undetectible undeteriorated undeteriorating undeterminable undeterminate undetermination undetermined undetermining undeterred undeterring undetested undetesting undethronable undethroned undetracting undetractingly undetrimental undevelopable undeveloped undeveloping undeviated undeviating undeviatingly undevil undevious undeviously undevisable undevised undevoted undevotion undevotional undevoured undevout undevoutly undevoutness undewed undewy undexterous undexterously undextrous undextrously undiademed undiagnosable undiagnosed undialed undialyzed undiametric undiamonded undiapered undiaphanous undiatonic undichotomous undictated undid undidactic undies undieted undifferenced undifferent undifferential undifferentiated undifficult undiffident undiffracted undiffused undiffusible undiffusive undig undigenous undigest undigestable undigested undigestible undigesting undigestion undigged undight undighted undigitated undignified undignifiedly undignifiedness undignify undiked undilapidated undilatable undilated undilatory undiligent undiligently undilute undiluted undilution undiluvial undim undimensioned undimerous undimidiate undiminishable undiminishableness undiminishably undiminished undiminishing undiminutive undimmed undimpled undine undined undinted undiocesed undiphthongize undiplomaed undiplomatic undipped undirect undirected undirectional undirectly undirectness undirk undisabled undisadvantageous undisagreeable undisappearing undisappointable undisappointed undisappointing undisarmed undisastrous undisbanded undisbarred undisburdened undisbursed undiscardable undiscarded undiscerned undiscernedly undiscernible undiscernibleness undiscernibly undiscerning undiscerningly undischargeable undischarged undiscipled undisciplinable undiscipline undisciplined undisciplinedness undisclaimed undisclosed undiscolored undiscomfitable undiscomfited undiscomposed undisconcerted undisconnected undiscontinued undiscordant undiscording undiscounted undiscourageable undiscouraged undiscouraging undiscoursed undiscoverable undiscoverableness undiscoverably undiscovered undiscreditable undiscredited undiscreet undiscreetly undiscreetness undiscretion undiscriminated undiscriminating undiscriminatingly undiscriminatingness undiscriminative undiscursive undiscussable undiscussed undisdained undisdaining undiseased undisestablished undisfigured undisfranchised undisfulfilled undisgorged undisgraced undisguisable undisguise undisguised undisguisedly undisguisedness undisgusted undisheartened undished undisheveled undishonored undisillusioned undisinfected undisinheritable undisinherited undisintegrated undisinterested undisjoined undisjointed undisliked undislocated undislodgeable undislodged undismantled undismay undismayable undismayed undismayedly undismembered undismissed undismounted undisobedient undisobeyed undisobliging undisordered undisorderly undisorganized undisowned undisowning undisparaged undisparity undispassionate undispatchable undispatched undispatching undispellable undispelled undispensable undispensed undispensing undispersed undispersing undisplaced undisplanted undisplay undisplayable undisplayed undisplaying undispleased undispose undisposed undisposedness undisprivacied undisprovable undisproved undisproving undisputable undisputableness undisputably undisputatious undisputatiously undisputed undisputedly undisputedness undisputing undisqualifiable undisqualified undisquieted undisreputable undisrobed undisrupted undissected undissembled undissembledness undissembling undissemblingly undisseminated undissenting undissevered undissimulated undissipated undissociated undissoluble undissolute undissolvable undissolved undissolving undissonant undissuadable undissuadably undissuade undistanced undistant undistantly undistasted undistasteful undistempered undistend undistended undistilled undistinct undistinctive undistinctly undistinctness undistinguish undistinguishable undistinguishableness undistinguishably undistinguished undistinguishing undistinguishingly undistorted undistorting undistracted undistractedly undistractedness undistracting undistractingly undistrained undistraught undistress undistressed undistributed undistrusted undistrustful undisturbable undisturbance undisturbed undisturbedly undisturbedness undisturbing undisturbingly unditched undithyrambic undittoed undiuretic undiurnal undivable undivergent undiverging undiverse undiversified undiverted undivertible undivertibly undiverting undivested undivestedly undividable undividableness undividably undivided undividedly undividedness undividing undivinable undivined undivinelike undivinely undivining undivisible undivisive undivorceable undivorced undivorcedness undivorcing undivulged undivulging undizened undizzied undo undoable undock undocked undoctor undoctored undoctrinal undoctrined undocumentary undocumented undocumentedness undodged undoer undoffed undog undogmatic undogmatical undoing undoingness undolled undolorous undomed undomestic undomesticate undomesticated undomestication undomicilable undomiciled undominated undomineering undominical undominoed undon undonated undonating undone undoneness undonkey undonnish undoomed undoped undormant undose undosed undoting undotted undouble undoubled undoubtable undoubtableness undoubtably undoubted undoubtedly undoubtedness undoubtful undoubtfully undoubtfulness undoubting undoubtingly undoubtingness undouched undoughty undovelike undoweled undowered undowned undowny undrab undraftable undrafted undrag undragoned undragooned undrainable undrained undramatic undramatical undramatically undramatizable undramatized undrape undraped undraperied undraw undrawable undrawn undreaded undreadful undreadfully undreading undreamed undreaming undreamlike undreamt undreamy undredged undreggy undrenched undress undressed undried undrillable undrilled undrinkable undrinkableness undrinkably undrinking undripping undrivable undrivableness undriven undronelike undrooping undropped undropsical undrossy undrowned undrubbed undrugged undrunk undrunken undry undryable undrying undualize undub undubbed undubitable undubitably unducal unduchess undue unduelling undueness undug unduke undulant undular undularly undulatance undulate undulated undulately undulating undulatingly undulation undulationist undulative undulatory undull undulled undullness unduloid undulose undulous unduly undumped unduncelike undunged undupable unduped unduplicability unduplicable unduplicity undurable undurableness undurably undust undusted unduteous undutiable undutiful undutifully undutifulness unduty undwarfed undwelt undwindling undy undye undyeable undyed undying undyingly undyingness uneager uneagerly uneagerness uneagled unearly unearned unearnest unearth unearthed unearthliness unearthly unease uneaseful uneasefulness uneasily uneasiness uneastern uneasy uneatable uneatableness uneaten uneath uneating unebbed unebbing unebriate uneccentric unecclesiastical unechoed unechoing uneclectic uneclipsed uneconomic uneconomical uneconomically uneconomicalness uneconomizing unecstatic unedge unedged unedible unedibleness unedibly unedified unedifying uneditable unedited uneducable uneducableness uneducably uneducate uneducated uneducatedly uneducatedness uneducative uneduced uneffaceable uneffaceably uneffaced uneffected uneffectible uneffective uneffectless uneffectual uneffectually uneffectualness uneffectuated uneffeminate uneffeminated uneffervescent uneffete unefficacious unefficient uneffigiated uneffused uneffusing uneffusive unegoist unegoistical unegoistically unegregious unejaculated unejected unelaborate unelaborated unelaborately unelaborateness unelapsed unelastic unelasticity unelated unelating unelbowed unelderly unelect unelectable unelected unelective unelectric unelectrical unelectrified unelectrify unelectrifying unelectrized unelectronic uneleemosynary unelegant unelegantly unelegantness unelemental unelementary unelevated unelicited unelided unelidible uneligibility uneligible uneligibly uneliminated unelongated uneloped uneloping uneloquent uneloquently unelucidated unelucidating uneluded unelusive unemaciated unemancipable unemancipated unemasculated unembalmed unembanked unembarrassed unembarrassedly unembarrassedness unembarrassing unembarrassment unembased unembattled unembayed unembellished unembezzled unembittered unemblazoned unembodied unembodiment unembossed unembowelled unembowered unembraceable unembraced unembroidered unembroiled unembryonic unemendable unemended unemerged unemerging unemigrating uneminent uneminently unemitted unemolumentary unemolumented unemotional unemotionalism unemotionally unemotionalness unemotioned unempaneled unemphatic unemphatical unemphatically unempirical unempirically unemploy unemployability unemployable unemployableness unemployably unemployed unemployment unempoisoned unempowered unempt unemptiable unemptied unempty unemulative unemulous unemulsified unenabled unenacted unenameled unenamored unencamped unenchafed unenchant unenchanted unencircled unenclosed unencompassed unencored unencounterable unencountered unencouraged unencouraging unencroached unencroaching unencumber unencumbered unencumberedly unencumberedness unencumbering unencysted unendable unendamaged unendangered unendeared unendeavored unended unending unendingly unendingness unendorsable unendorsed unendowed unendowing unendued unendurability unendurable unendurably unendured unenduring unenduringly unenergetic unenergized unenervated unenfeebled unenfiladed unenforceable unenforced unenforcedly unenforcedness unenforcibility unenfranchised unengaged unengaging unengendered unengineered unenglish unengraved unengraven unengrossed unenhanced unenjoined unenjoyable unenjoyed unenjoying unenjoyingly unenkindled unenlarged unenlightened unenlightening unenlisted unenlivened unenlivening unennobled unennobling unenounced unenquired unenquiring unenraged unenraptured unenrichable unenrichableness unenriched unenriching unenrobed unenrolled unenshrined unenslave unenslaved unensnared unensouled unensured unentailed unentangle unentangleable unentangled unentanglement unentangler unenterable unentered unentering unenterprise unenterprised unenterprising unenterprisingly unenterprisingness unentertainable unentertained unentertaining unentertainingly unentertainingness unenthralled unenthralling unenthroned unenthusiasm unenthusiastic unenthusiastically unenticed unenticing unentire unentitled unentombed unentomological unentrance unentranced unentrapped unentreated unentreating unentrenched unentwined unenumerable unenumerated unenveloped unenvenomed unenviable unenviably unenvied unenviedly unenvious unenviously unenvironed unenvying unenwoven unepauleted unephemeral unepic unepicurean unepigrammatic unepilogued unepiscopal unepiscopally unepistolary unepitaphed unepithelial unepitomized unequable unequableness unequably unequal unequalable unequaled unequality unequalize unequalized unequally unequalness unequated unequatorial unequestrian unequiangular unequiaxed unequilateral unequilibrated unequine unequipped unequitable unequitableness unequitably unequivalent unequivalve unequivalved unequivocal unequivocally unequivocalness uneradicable uneradicated unerasable unerased unerasing unerect unerected unermined uneroded unerrable unerrableness unerrably unerrancy unerrant unerratic unerring unerringly unerringness unerroneous unerroneously unerudite unerupted uneruptive unescaladed unescalloped unescapable unescapableness unescapably unescaped unescheated uneschewable uneschewably uneschewed unescorted unescutcheoned unesoteric unespied unespousable unespoused unessayed unessence unessential unessentially unessentialness unestablish unestablishable unestablished unestablishment unesteemed unestimable unestimableness unestimably unestimated unestopped unestranged unetched uneternal uneternized unethereal unethic unethical unethically unethicalness unethnological unethylated unetymological unetymologizable uneucharistical uneugenic uneulogized uneuphemistical uneuphonic uneuphonious uneuphoniously uneuphoniousness unevacuated unevadable unevaded unevaluated unevanescent unevangelic unevangelical unevangelized unevaporate unevaporated unevasive uneven unevenly unevenness uneventful uneventfully uneventfulness uneverted unevicted unevidenced unevident unevidential unevil unevinced unevirated uneviscerated unevitable unevitably unevokable unevoked unevolutionary unevolved unexacerbated unexact unexacted unexactedly unexacting unexactingly unexactly unexactness unexaggerable unexaggerated unexaggerating unexalted unexaminable unexamined unexamining unexampled unexampledness unexasperated unexasperating unexcavated unexceedable unexceeded unexcelled unexcellent unexcelling unexceptable unexcepted unexcepting unexceptionability unexceptionable unexceptionableness unexceptionably unexceptional unexceptionally unexceptionalness unexceptive unexcerpted unexcessive unexchangeable unexchangeableness unexchanged unexcised unexcitability unexcitable unexcited unexciting unexclaiming unexcludable unexcluded unexcluding unexclusive unexclusively unexclusiveness unexcogitable unexcogitated unexcommunicated unexcoriated unexcorticated unexcrescent unexcreted unexcruciating unexculpable unexculpably unexculpated unexcursive unexcusable unexcusableness unexcusably unexcused unexcusedly unexcusedness unexcusing unexecrated unexecutable unexecuted unexecuting unexecutorial unexemplary unexemplifiable unexemplified unexempt unexempted unexemptible unexempting unexercisable unexercise unexercised unexerted unexhalable unexhaled unexhausted unexhaustedly unexhaustedness unexhaustible unexhaustibleness unexhaustibly unexhaustion unexhaustive unexhaustiveness unexhibitable unexhibitableness unexhibited unexhilarated unexhilarating unexhorted unexhumed unexigent unexilable unexiled unexistence unexistent unexisting unexonerable unexonerated unexorable unexorableness unexorbitant unexorcisable unexorcisably unexorcised unexotic unexpandable unexpanded unexpanding unexpansive unexpectable unexpectant unexpected unexpectedly unexpectedness unexpecting unexpectingly unexpectorated unexpedient unexpeditated unexpedited unexpeditious unexpelled unexpendable unexpended unexpensive unexpensively unexpensiveness unexperience unexperienced unexperiencedness unexperient unexperiential unexperimental unexperimented unexpert unexpertly unexpertness unexpiable unexpiated unexpired unexpiring unexplainable unexplainableness unexplainably unexplained unexplainedly unexplainedness unexplaining unexplanatory unexplicable unexplicableness unexplicably unexplicated unexplicit unexplicitly unexplicitness unexploded unexploitation unexploited unexplorable unexplorative unexplored unexplosive unexportable unexported unexporting unexposable unexposed unexpostulating unexpoundable unexpounded unexpress unexpressable unexpressableness unexpressably unexpressed unexpressedly unexpressible unexpressibleness unexpressibly unexpressive unexpressively unexpressiveness unexpressly unexpropriable unexpropriated unexpugnable unexpunged unexpurgated unexpurgatedly unexpurgatedness unextended unextendedly unextendedness unextendible unextensible unextenuable unextenuated unextenuating unexterminable unexterminated unexternal unexternality unexterritoriality unextinct unextinctness unextinguishable unextinguishableness unextinguishably unextinguished unextirpated unextolled unextortable unextorted unextractable unextracted unextradited unextraneous unextraordinary unextravagance unextravagant unextravagating unextravasated unextreme unextricable unextricated unextrinsic unextruded unexuberant unexuded unexultant uneye uneyeable uneyed unfabled unfabling unfabricated unfabulous unfacaded unface unfaceable unfaced unfaceted unfacetious unfacile unfacilitated unfact unfactional unfactious unfactitious unfactorable unfactored unfactual unfadable unfaded unfading unfadingly unfadingness unfagged unfagoted unfailable unfailableness unfailably unfailed unfailing unfailingly unfailingness unfain unfaint unfainting unfaintly unfair unfairly unfairminded unfairness unfairylike unfaith unfaithful unfaithfully unfaithfulness unfaked unfallacious unfallaciously unfallen unfallenness unfallible unfallibleness unfallibly unfalling unfallowed unfalse unfalsifiable unfalsified unfalsifiedness unfalsity unfaltering unfalteringly unfamed unfamiliar unfamiliarity unfamiliarized unfamiliarly unfanatical unfanciable unfancied unfanciful unfancy unfanged unfanned unfantastic unfantastical unfantastically unfar unfarced unfarcical unfarewelled unfarmed unfarming unfarrowed unfarsighted unfasciated unfascinate unfascinated unfascinating unfashion unfashionable unfashionableness unfashionably unfashioned unfast unfasten unfastenable unfastened unfastener unfastidious unfastidiously unfastidiousness unfasting unfather unfathered unfatherlike unfatherliness unfatherly unfathomability unfathomable unfathomableness unfathomably unfathomed unfatigue unfatigueable unfatigued unfatiguing unfattable unfatted unfatten unfauceted unfaultfinding unfaulty unfavorable unfavorableness unfavorably unfavored unfavoring unfavorite unfawning unfealty unfeared unfearful unfearfully unfearing unfearingly unfeary unfeasable unfeasableness unfeasably unfeasibility unfeasible unfeasibleness unfeasibly unfeasted unfeather unfeathered unfeatured unfecund unfecundated unfed unfederal unfederated unfeeble unfeed unfeedable unfeeding unfeeing unfeelable unfeeling unfeelingly unfeelingness unfeignable unfeignableness unfeignably unfeigned unfeignedly unfeignedness unfeigning unfeigningly unfeigningness unfele unfelicitated unfelicitating unfelicitous unfelicitously unfelicitousness unfeline unfellable unfelled unfellied unfellow unfellowed unfellowlike unfellowly unfellowshiped unfelon unfelonious unfeloniously unfelony unfelt unfelted unfemale unfeminine unfemininely unfeminineness unfemininity unfeminist unfeminize unfence unfenced unfendered unfenestrated unfeoffed unfermentable unfermentableness unfermentably unfermented unfermenting unfernlike unferocious unferreted unferried unfertile unfertileness unfertility unfertilizable unfertilized unfervent unfervid unfester unfestered unfestival unfestive unfestively unfestooned unfetchable unfetched unfeted unfetter unfettered unfettled unfeudal unfeudalize unfeudalized unfeued unfevered unfeverish unfew unfibbed unfibbing unfiber unfibered unfibrous unfickle unfictitious unfidelity unfidgeting unfielded unfiend unfiendlike unfierce unfiery unfight unfightable unfighting unfigurable unfigurative unfigured unfilamentous unfilched unfile unfiled unfilial unfilially unfilialness unfill unfillable unfilled unfilleted unfilling unfilm unfilmed unfiltered unfiltrated unfinable unfinancial unfine unfined unfinessed unfingered unfinical unfinish unfinishable unfinished unfinishedly unfinishedness unfinite unfired unfireproof unfiring unfirm unfirmamented unfirmly unfirmness unfiscal unfishable unfished unfishing unfishlike unfissile unfistulous unfit unfitly unfitness unfittable unfitted unfittedness unfitten unfitting unfittingly unfittingness unfitty unfix unfixable unfixated unfixed unfixedness unfixing unfixity unflag unflagged unflagging unflaggingly unflaggingness unflagitious unflagrant unflaky unflamboyant unflaming unflanged unflank unflanked unflapping unflashing unflat unflated unflattened unflatterable unflattered unflattering unflatteringly unflaunted unflavored unflawed unflayed unflead unflecked unfledge unfledged unfledgedness unfleece unfleeced unfleeing unfleeting unflesh unfleshed unfleshliness unfleshly unfleshy unfletched unflexed unflexible unflexibleness unflexibly unflickering unflickeringly unflighty unflinching unflinchingly unflinchingness unflintify unflippant unflirtatious unflitched unfloatable unfloating unflock unfloggable unflogged unflooded unfloor unfloored unflorid unflossy unflounced unfloured unflourished unflourishing unflouted unflower unflowered unflowing unflown unfluctuating unfluent unfluid unfluked unflunked unfluorescent unflurried unflush unflushed unflustered unfluted unflutterable unfluttered unfluttering unfluvial unfluxile unflying unfoaled unfoaming unfocused unfoggy unfoilable unfoiled unfoisted unfold unfoldable unfolded unfolder unfolding unfoldment unfoldure unfoliaged unfoliated unfollowable unfollowed unfollowing unfomented unfond unfondled unfondness unfoodful unfool unfoolable unfooled unfooling unfoolish unfooted unfootsore unfoppish unforaged unforbade unforbearance unforbearing unforbid unforbidden unforbiddenly unforbiddenness unforbidding unforceable unforced unforcedly unforcedness unforceful unforcible unforcibleness unforcibly unfordable unfordableness unforded unforeboded unforeboding unforecasted unforegone unforeign unforeknowable unforeknown unforensic unforeordained unforesee unforeseeable unforeseeableness unforeseeably unforeseeing unforeseeingly unforeseen unforeseenly unforeseenness unforeshortened unforest unforestallable unforestalled unforested unforetellable unforethought unforethoughtful unforetold unforewarned unforewarnedness unforfeit unforfeitable unforfeited unforgeability unforgeable unforged unforget unforgetful unforgettable unforgettableness unforgettably unforgetting unforgettingly unforgivable unforgivableness unforgivably unforgiven unforgiveness unforgiver unforgiving unforgivingly unforgivingness unforgone unforgot unforgotten unfork unforked unforkedness unforlorn unform unformal unformality unformalized unformally unformalness unformative unformed unformidable unformulable unformularizable unformularize unformulated unformulistic unforsaken unforsaking unforsook unforsworn unforthright unfortifiable unfortified unfortify unfortuitous unfortunate unfortunately unfortunateness unfortune unforward unforwarded unfossiliferous unfossilized unfostered unfought unfoughten unfoul unfoulable unfouled unfound unfounded unfoundedly unfoundedness unfoundered unfountained unfowllike unfoxy unfractured unfragrance unfragrant unfragrantly unfrail unframable unframableness unframably unframe unframed unfranchised unfrank unfrankable unfranked unfrankly unfrankness unfraternal unfraternizing unfraudulent unfraught unfrayed unfreckled unfree unfreed unfreedom unfreehold unfreely unfreeman unfreeness unfreezable unfreeze unfreezing unfreighted unfrenchified unfrenzied unfrequency unfrequent unfrequented unfrequentedness unfrequently unfrequentness unfret unfretful unfretting unfriable unfriarlike unfricative unfrictioned unfried unfriend unfriended unfriendedness unfriending unfriendlike unfriendlily unfriendliness unfriendly unfriendship unfrighted unfrightenable unfrightened unfrightenedness unfrightful unfrigid unfrill unfrilled unfringe unfringed unfrisky unfrivolous unfrizz unfrizzled unfrizzy unfrock unfrocked unfroglike unfrolicsome unfronted unfrost unfrosted unfrosty unfrounced unfroward unfrowardly unfrowning unfroze unfrozen unfructed unfructified unfructify unfructuous unfructuously unfrugal unfrugally unfrugalness unfruitful unfruitfully unfruitfulness unfruity unfrustrable unfrustrably unfrustratable unfrustrated unfrutuosity unfuddled unfueled unfulfill unfulfillable unfulfilled unfulfilling unfulfillment unfull unfulled unfully unfulminated unfulsome unfumbled unfumbling unfumed unfumigated unfunctional unfundamental unfunded unfunnily unfunniness unfunny unfur unfurbelowed unfurbished unfurcate unfurious unfurl unfurlable unfurnish unfurnished unfurnishedness unfurnitured unfurred unfurrow unfurrowable unfurrowed unfurthersome unfused unfusible unfusibleness unfusibly unfussed unfussing unfussy unfutile unfuturistic ungabled ungag ungaged ungagged ungain ungainable ungained ungainful ungainfully ungainfulness ungaining ungainlike ungainliness ungainly ungainness ungainsaid ungainsayable ungainsayably ungainsaying ungainsome ungainsomely ungaite ungallant ungallantly ungallantness ungalling ungalvanized ungamboling ungamelike unganged ungangrened ungarbed ungarbled ungardened ungargled ungarland ungarlanded ungarment ungarmented ungarnered ungarnish ungarnished ungaro ungarrisoned ungarter ungartered ungashed ungassed ungastric ungathered ungaudy ungauged ungauntlet ungauntleted ungazetted ungazing ungear ungeared ungelatinizable ungelatinized ungelded ungelt ungeminated ungenerable ungeneral ungeneraled ungeneralized ungenerate ungenerated ungenerative ungeneric ungenerical ungenerosity ungenerous ungenerously ungenerousness ungenial ungeniality ungenially ungenialness ungenitured ungenius ungenteel ungenteelly ungenteelness ungentile ungentility ungentilize ungentle ungentled ungentleman ungentlemanize ungentlemanlike ungentlemanlikeness ungentlemanliness ungentlemanly ungentleness ungentlewomanlike ungently ungenuine ungenuinely ungenuineness ungeodetical ungeographic ungeographical ungeographically ungeological ungeometric ungeometrical ungeometrically ungeometricalness ungerminated ungerminating ungermlike ungerontic ungesting ungesturing unget ungettable unghostlike unghostly ungiant ungibbet ungiddy ungifted ungiftedness ungild ungilded ungill ungilt ungingled unginned ungird ungirded ungirdle ungirdled ungirlish ungirt ungirth ungirthed ungive ungiveable ungiven ungiving ungka unglaciated unglad ungladden ungladdened ungladly ungladness ungladsome unglamorous unglandular unglassed unglaze unglazed ungleaned unglee ungleeful unglimpsed unglistening unglittering ungloating unglobe unglobular ungloom ungloomed ungloomy unglorified unglorify unglorifying unglorious ungloriously ungloriousness unglory unglosed ungloss unglossaried unglossed unglossily unglossiness unglossy unglove ungloved unglowing unglozed unglue unglued unglutinate unglutted ungluttonous ungnarred ungnaw ungnawn ungnostic ungoaded ungoatlike ungod ungoddess ungodlike ungodlily ungodliness ungodly ungodmothered ungold ungolden ungone ungood ungoodliness ungoodly ungored ungorge ungorged ungorgeous ungospel ungospelized ungospelled ungospellike ungossiping ungot ungothic ungotten ungouged ungouty ungovernable ungovernableness ungovernably ungoverned ungovernedness ungoverning ungown ungowned ungrace ungraced ungraceful ungracefully ungracefulness ungracious ungraciously ungraciousness ungradated ungraded ungradual ungradually ungraduated ungraduating ungraft ungrafted ungrain ungrainable ungrained ungrammar ungrammared ungrammatic ungrammatical ungrammatically ungrammaticalness ungrammaticism ungrand ungrantable ungranted ungranulated ungraphic ungraphitized ungrapple ungrappled ungrappler ungrasp ungraspable ungrasped ungrasping ungrassed ungrassy ungrated ungrateful ungratefully ungratefulness ungratifiable ungratified ungratifying ungrating ungrave ungraved ungraveled ungravelly ungravely ungraven ungrayed ungrazed ungreased ungreat ungreatly ungreatness ungreeable ungreedy ungreen ungreenable ungreened ungreeted ungregarious ungrieve ungrieved ungrieving ungrilled ungrimed ungrindable ungrip ungripe ungrizzled ungroaning ungroined ungroomed ungrooved ungropeable ungross ungrotesque unground ungroundable ungroundably ungrounded ungroundedly ungroundedness ungroupable ungrouped ungrow ungrowing ungrown ungrubbed ungrudged ungrudging ungrudgingly ungrudgingness ungruesome ungruff ungrumbling ungual unguaranteed unguard unguardable unguarded unguardedly unguardedness ungueal unguent unguentaria unguentarium unguentary unguentiferous unguentous unguentum unguerdoned ungues unguessable unguessableness unguessed unguical unguicorn unguicular unguiculate unguiculated unguidable unguidableness unguidably unguided unguidedly unguiferous unguiform unguiled unguileful unguilefully unguilefulness unguillotined unguiltily unguiltiness unguilty unguinal unguinous unguirostral unguis ungula ungulae ungular ungulate ungulated unguled unguligrade ungull ungulous ungulp ungum ungummed ungushing ungutted unguttural unguyed unguzzled ungymnastic ungypsylike ungyve ungyved unhabit unhabitable unhabitableness unhabited unhabitual unhabitually unhabituate unhabituated unhacked unhackled unhackneyed unhackneyedness unhad unhaft unhafted unhaggled unhaggling unhailable unhailed unhair unhaired unhairer unhairily unhairiness unhairing unhairy unhallooed unhallow unhallowed unhallowedness unhaloed unhalsed unhalted unhalter unhaltered unhalting unhalved unhammered unhamper unhampered unhand unhandcuff unhandcuffed unhandicapped unhandily unhandiness unhandled unhandseled unhandsome unhandsomely unhandsomeness unhandy unhang unhanged unhap unhappen unhappily unhappiness unhappy unharangued unharassed unharbor unharbored unhard unharden unhardenable unhardened unhardihood unhardily unhardiness unhardness unhardy unharked unharmable unharmed unharmful unharmfully unharming unharmonic unharmonical unharmonious unharmoniously unharmoniousness unharmonize unharmonized unharmony unharness unharnessed unharped unharried unharrowed unharsh unharvested unhashed unhasp unhasped unhaste unhasted unhastened unhastily unhastiness unhasting unhasty unhat unhatchability unhatchable unhatched unhatcheled unhate unhated unhateful unhating unhatingly unhatted unhauled unhaunt unhaunted unhave unhawked unhayed unhazarded unhazarding unhazardous unhazardousness unhazed unhead unheaded unheader unheady unheal unhealable unhealableness unhealably unhealed unhealing unhealth unhealthful unhealthfully unhealthfulness unhealthily unhealthiness unhealthsome unhealthsomeness unhealthy unheaped unhearable unheard unhearing unhearsed unheart unhearten unheartsome unhearty unheatable unheated unheathen unheaved unheaven unheavenly unheavily unheaviness unheavy unhectored unhedge unhedged unheed unheeded unheededly unheedful unheedfully unheedfulness unheeding unheedingly unheedy unheeled unheelpieced unhefted unheightened unheired unheld unhele unheler unhelm unhelmed unhelmet unhelmeted unhelpable unhelpableness unhelped unhelpful unhelpfully unhelpfulness unhelping unhelved unhemmed unheppen unheralded unheraldic unherd unherded unhereditary unheretical unheritable unhermetic unhero unheroic unheroical unheroically unheroism unheroize unherolike unhesitant unhesitating unhesitatingly unhesitatingness unheuristic unhewable unhewed unhewn unhex unhid unhidable unhidableness unhidably unhidated unhidden unhide unhidebound unhideous unhieratic unhigh unhilarious unhinderable unhinderably unhindered unhindering unhinge unhingement unhinted unhipped unhired unhissed unhistoric unhistorical unhistorically unhistory unhistrionic unhit unhitch unhitched unhittable unhive unhoard unhoarded unhoarding unhoary unhoaxed unhobble unhocked unhoed unhogged unhoist unhoisted unhold unholiday unholily unholiness unhollow unhollowed unholy unhome unhomelike unhomelikeness unhomeliness unhomely unhomish unhomogeneity unhomogeneous unhomogeneously unhomologous unhoned unhonest unhonestly unhoneyed unhonied unhonorable unhonorably unhonored unhonoured unhood unhooded unhoodwink unhoodwinked unhoofed unhook unhooked unhoop unhooped unhooper unhooted unhoped unhopedly unhopedness unhopeful unhopefully unhopefulness unhoping unhopingly unhopped unhoppled unhorizoned unhorizontal unhorned unhorny unhoroscopic unhorse unhose unhosed unhospitable unhospitableness unhospitably unhostile unhostilely unhostileness unhostility unhot unhoundlike unhouse unhoused unhouseled unhouselike unhousewifely unhuddle unhugged unhull unhulled unhuman unhumanize unhumanized unhumanly unhumanness unhumble unhumbled unhumbledness unhumbleness unhumbly unhumbugged unhumid unhumiliated unhumored unhumorous unhumorously unhumorousness unhumoured unhung unhuntable unhunted unhurdled unhurled unhurried unhurriedly unhurriedness unhurrying unhurryingly unhurt unhurted unhurtful unhurtfully unhurtfulness unhurting unhusbanded unhusbandly unhushable unhushed unhushing unhusk unhusked unhustled unhustling unhutched unhuzzaed unhydraulic unhydrolyzed unhygienic unhygienically unhygrometric unhymeneal unhymned unhyphenated unhyphened unhypnotic unhypnotizable unhypnotize unhypocritical unhypocritically unhypothecated unhypothetical unhysterical uniambic uniambically uniangulate uniarticular uniarticulate uniat uniate uniauriculate uniauriculated uniaxal uniaxally uniaxial uniaxially unibasal unibivalent unible unibracteate unibracteolate unibranchiate unicalcarate unicameral unicameralism unicameralist unicamerate unicapsular unicarinate unicarinated unice uniced unicell unicellate unicelled unicellular unicellularity unicentral unichord uniciliate unicism unicist unicity uniclinal unicolor unicolorate unicolored unicolorous uniconstant unicorn unicorneal unicornic unicornlike unicornous unicornuted unicostate unicotyledonous unicum unicursal unicursality unicursally unicuspid unicuspidate unicycle unicyclist unidactyl unidactyle unidactylous unideaed unideal unidealism unidealist unidealistic unidealized unidentate unidentated unidenticulate unidentifiable unidentifiableness unidentifiably unidentified unidentifiedly unidentifying unideographic unidextral unidextrality unidigitate unidimensional unidiomatic unidiomatically unidirect unidirected unidirection unidirectional unidle unidleness unidly unidolatrous unidolized unidyllic unie uniembryonate uniequivalent uniface unifaced unifacial unifactorial unifarious unifiable unific unification unificationist unificator unified unifiedly unifiedness unifier unifilar uniflagellate unifloral uniflorate uniflorous uniflow uniflowered unifocal unifoliar unifoliate unifoliolate uniform uniformal uniformalization uniformalize uniformally uniformation uniformed uniformist uniformitarian uniformitarianism uniformity uniformization uniformize uniformless uniformly uniformness unify unigenesis unigenetic unigenist unigenistic unigenital unigeniture unigenous uniglandular uniglobular unignitable unignited unignitible unignominious unignorant unignored unigravida uniguttulate unijugate unijugous unilabiate unilabiated unilamellar unilamellate unilaminar unilaminate unilateral unilateralism unilateralist unilaterality unilateralization unilateralize unilaterally unilinear unilingual unilingualism uniliteral unilludedly unillumed unilluminated unilluminating unillumination unillumined unillusioned unillusory unillustrated unillustrative unillustrious unilobal unilobar unilobate unilobe unilobed unilobular unilocular unilocularity uniloculate unimacular unimaged unimaginable unimaginableness unimaginably unimaginary unimaginative unimaginatively unimaginativeness unimagine unimagined unimanual unimbanked unimbellished unimbezzled unimbibed unimbibing unimbittered unimbodied unimboldened unimbordered unimbosomed unimbowed unimbowered unimbroiled unimbrowned unimbrued unimbued unimedial unimitable unimitableness unimitably unimitated unimitating unimitative unimmaculate unimmanent unimmediate unimmerged unimmergible unimmersed unimmigrating unimmolated unimmortal unimmortalize unimmortalized unimmovable unimmured unimodal unimodality unimodular unimolecular unimolecularity unimpair unimpairable unimpaired unimpartable unimparted unimpartial unimpassionate unimpassioned unimpassionedly unimpassionedness unimpatient unimpawned unimpeachability unimpeachable unimpeachableness unimpeachably unimpeached unimpearled unimped unimpeded unimpededly unimpedible unimpedness unimpelled unimpenetrable unimperative unimperial unimperialistic unimperious unimpertinent unimpinging unimplanted unimplicable unimplicate unimplicated unimplicit unimplicitly unimplied unimplorable unimplored unimpoisoned unimportance unimportant unimportantly unimported unimporting unimportunate unimportunately unimportuned unimposed unimposedly unimposing unimpostrous unimpounded unimpoverished unimpowered unimprecated unimpregnable unimpregnate unimpregnated unimpressed unimpressibility unimpressible unimpressibleness unimpressibly unimpressionability unimpressionable unimpressive unimpressively unimpressiveness unimprinted unimprison unimprisonable unimprisoned unimpropriated unimprovable unimprovableness unimprovably unimproved unimprovedly unimprovedness unimprovement unimproving unimprovised unimpugnable unimpugned unimpulsive unimpurpled unimputable unimputed unimucronate unimultiplex unimuscular uninaugurated unincantoned unincarcerated unincarnate unincarnated unincensed uninchoative unincidental unincised unincisive unincited uninclinable uninclined uninclining uninclosed uninclosedness unincludable unincluded uninclusive uninclusiveness uninconvenienced unincorporate unincorporated unincorporatedly unincorporatedness unincreasable unincreased unincreasing unincubated uninculcated unincumbered unindebted unindebtedly unindebtedness unindemnified unindentable unindented unindentured unindexed unindicable unindicated unindicative unindictable unindicted unindifference unindifferency unindifferent unindifferently unindigent unindignant unindividual unindividualize unindividualized unindividuated unindorsed uninduced uninductive unindulged unindulgent unindulgently unindurated unindustrial unindustrialized unindustrious unindustriously unindwellable uninebriated uninebriating uninervate uninerved uninfallibility uninfallible uninfatuated uninfectable uninfected uninfectious uninfectiousness uninfeft uninferred uninfested uninfiltrated uninfinite uninfiniteness uninfixed uninflamed uninflammability uninflammable uninflated uninflected uninflectedness uninflicted uninfluenceable uninfluenced uninfluencing uninfluencive uninfluential uninfluentiality uninfolded uninformed uninforming uninfracted uninfringeable uninfringed uninfringible uninfuriated uninfused uningenious uningeniously uningeniousness uningenuity uningenuous uningenuously uningenuousness uningested uningrafted uningrained uninhabitability uninhabitable uninhabitableness uninhabitably uninhabited uninhabitedness uninhaled uninheritability uninheritable uninherited uninhibited uninhibitive uninhumed uninimical uniniquitous uninitialed uninitialled uninitiate uninitiated uninitiatedness uninitiation uninjectable uninjected uninjurable uninjured uninjuredness uninjuring uninjurious uninjuriously uninjuriousness uninked uninlaid uninn uninnate uninnocence uninnocent uninnocently uninnocuous uninnovating uninoculable uninoculated uninodal uninominal uninquired uninquiring uninquisitive uninquisitively uninquisitiveness uninquisitorial uninsane uninsatiable uninscribed uninserted uninshrined uninsinuated uninsistent uninsolvent uninspected uninspirable uninspired uninspiring uninspiringly uninspirited uninspissated uninstalled uninstanced uninstated uninstigated uninstilled uninstituted uninstructed uninstructedly uninstructedness uninstructible uninstructing uninstructive uninstructively uninstructiveness uninstrumental uninsular uninsulate uninsulated uninsultable uninsulted uninsulting uninsurability uninsurable uninsured unintegrated unintellective unintellectual unintellectualism unintellectuality unintellectually unintelligence unintelligent unintelligently unintelligentsia unintelligibility unintelligible unintelligibleness unintelligibly unintended unintendedly unintensive unintent unintentional unintentionality unintentionally unintentionalness unintently unintentness unintercalated unintercepted uninterchangeable uninterdicted uninterested uninterestedly uninterestedness uninteresting uninterestingly uninterestingness uninterferedwith uninterjected uninterlaced uninterlarded uninterleave uninterleaved uninterlined uninterlinked uninterlocked unintermarrying unintermediate unintermingled unintermission unintermissive unintermitted unintermittedly unintermittedness unintermittent unintermitting unintermittingly unintermittingness unintermixed uninternational uninterpleaded uninterpolated uninterposed uninterposing uninterpretable uninterpreted uninterred uninterrogable uninterrogated uninterrupted uninterruptedly uninterruptedness uninterruptible uninterruptibleness uninterrupting uninterruption unintersected uninterspersed unintervening uninterviewed unintervolved uninterwoven uninthroned unintimate unintimated unintimidated unintitled unintombed unintoned unintoxicated unintoxicatedness unintoxicating unintrenchable unintrenched unintricate unintrigued unintriguing unintroduced unintroducible unintroitive unintromitted unintrospective unintruded unintruding unintrusive unintrusively unintrusted unintuitive unintwined uninuclear uninucleate uninucleated uninundated uninured uninurned uninvadable uninvaded uninvaginated uninvalidated uninveighing uninveigled uninvented uninventful uninventibleness uninventive uninventively uninventiveness uninverted uninvested uninvestigable uninvestigated uninvestigating uninvestigative uninvidious uninvidiously uninvigorated uninvincible uninvite uninvited uninvitedly uninviting uninvoiced uninvoked uninvolved uninweaved uninwoven uninwrapped uninwreathed unio uniocular unioid union unioned unionic unionid unioniform unionism unionist unionistic unionization unionize unionoid unioval uniovular uniovulate unipara uniparental uniparient uniparous unipartite uniped unipeltate uniperiodic unipersonal unipersonalist unipersonality unipetalous uniphase uniphaser uniphonous uniplanar uniplicate unipod unipolar unipolarity uniporous unipotence unipotent unipotential unipulse uniquantic unique uniquely uniqueness uniquity uniradial uniradiate uniradiated uniradical uniramose uniramous unirascible unireme unirenic unirhyme uniridescent unironed unironical unirradiated unirrigated unirritable unirritant unirritated unirritatedly unirritating unisepalous uniseptate uniserial uniserially uniseriate uniseriately uniserrate uniserrulate unisexed unisexual unisexuality unisexually unisilicate unisoil unisolable unisolate unisolated unisomeric unisometrical unisomorphic unison unisonal unisonally unisonance unisonant unisonous unisotropic unisparker unispiculate unispinose unispiral unissuable unissued unistylist unisulcate unit unitage unital unitalicized unitarian unitarily unitariness unitarism unitarist unitary unite uniteability uniteable uniteably united unitedly unitedness unitemized unitentacular uniter uniting unitingly unition unitism unitistic unitive unitively unitiveness unitize unitooth unitrivalent unitrope unituberculate unitude unity uniunguiculate uniungulate univalence univalency univalent univalvate univalve univalvular univariant univerbal universal universalia universalism universalist universalistic universality universalization universalize universalizer universally universalness universanimous universe universeful universitarian universitarianism universitary universitize university universityless universitylike universityship universological universologist universology univied univocability univocacy univocal univocalized univocally univocity univoltine univorous unjacketed unjaded unjagged unjailed unjam unjapanned unjarred unjarring unjaundiced unjaunty unjealous unjealoused unjellied unjesting unjesuited unjesuitical unjesuitically unjewel unjeweled unjewelled unjilted unjocose unjocund unjogged unjogging unjoin unjoinable unjoint unjointed unjointedness unjointured unjoking unjokingly unjolly unjolted unjostled unjournalized unjovial unjovially unjoyed unjoyful unjoyfully unjoyfulness unjoyous unjoyously unjoyousness unjudgable unjudge unjudged unjudgelike unjudging unjudicable unjudicial unjudicially unjudicious unjudiciously unjudiciousness unjuggled unjuiced unjuicy unjumbled unjumpable unjust unjustice unjusticiable unjustifiable unjustifiableness unjustifiably unjustified unjustifiedly unjustifiedness unjustify unjustled unjustly unjustness unjuvenile unkaiserlike unkamed unked unkeeled unkembed unkempt unkemptly unkemptness unken unkenned unkennedness unkennel unkenneled unkenning unkensome unkept unkerchiefed unket unkey unkeyed unkicked unkid unkill unkillability unkillable unkilled unkilling unkilned unkin unkind unkindhearted unkindled unkindledness unkindlily unkindliness unkindling unkindly unkindness unkindred unkindredly unking unkingdom unkinged unkinger unkinglike unkingly unkink unkinlike unkirk unkiss unkissed unkist unknave unkneaded unkneeling unknelled unknew unknight unknighted unknightlike unknit unknittable unknitted unknitting unknocked unknocking unknot unknotted unknotty unknow unknowability unknowable unknowableness unknowably unknowing unknowingly unknowingness unknowledgeable unknown unknownly unknownness unknownst unkodaked unkoshered unlabeled unlabialize unlabiate unlaborable unlabored unlaboring unlaborious unlaboriously unlaboriousness unlace unlaced unlacerated unlackeyed unlacquered unlade unladen unladled unladyfied unladylike unlagging unlaid unlame unlamed unlamented unlampooned unlanced unland unlanded unlandmarked unlanguaged unlanguid unlanguishing unlanterned unlap unlapped unlapsed unlapsing unlarded unlarge unlash unlashed unlasher unlassoed unlasting unlatch unlath unlathed unlathered unlatinized unlatticed unlaudable unlaudableness unlaudably unlauded unlaugh unlaughing unlaunched unlaundered unlaureled unlaved unlaving unlavish unlavished unlaw unlawed unlawful unlawfully unlawfulness unlawlearned unlawlike unlawly unlawyered unlawyerlike unlay unlayable unleached unlead unleaded unleaderly unleaf unleafed unleagued unleaguer unleakable unleaky unleal unlean unleared unlearn unlearnability unlearnable unlearnableness unlearned unlearnedly unlearnedness unlearning unlearnt unleasable unleased unleash unleashed unleathered unleave unleaved unleavenable unleavened unlectured unled unleft unlegacied unlegal unlegalized unlegally unlegalness unlegate unlegislative unleisured unleisuredness unleisurely unlenient unlensed unlent unless unlessened unlessoned unlet unlettable unletted unlettered unletteredly unletteredness unlettering unletterlike unlevel unleveled unlevelly unlevelness unlevied unlevigated unlexicographical unliability unliable unlibeled unliberal unliberalized unliberated unlibidinous unlicensed unlicentiated unlicentious unlichened unlickable unlicked unlid unlidded unlie unlifelike unliftable unlifted unlifting unligable unligatured unlight unlighted unlightedly unlightedness unlightened unlignified unlikable unlikableness unlikably unlike unlikeable unlikeableness unlikeably unliked unlikelihood unlikeliness unlikely unliken unlikeness unliking unlimb unlimber unlime unlimed unlimitable unlimitableness unlimitably unlimited unlimitedly unlimitedness unlimitless unlimned unlimp unline unlineal unlined unlingering unlink unlinked unlionlike unliquefiable unliquefied unliquid unliquidatable unliquidated unliquidating unliquidation unliquored unlisping unlist unlisted unlistened unlistening unlisty unlit unliteral unliterally unliteralness unliterary unliterate unlitigated unlitten unlittered unliturgical unliturgize unlivable unlivableness unlivably unlive unliveable unliveableness unliveably unliveliness unlively unliveried unlivery unliving unlizardlike unload unloaded unloaden unloader unloafing unloanably unloaned unloaning unloath unloathed unloathful unloathly unloathsome unlobed unlocal unlocalizable unlocalize unlocalized unlocally unlocated unlock unlockable unlocked unlocker unlocking unlocomotive unlodge unlodged unlofty unlogged unlogic unlogical unlogically unlogicalness unlonely unlook unlooked unloop unlooped unloosable unloosably unloose unloosen unloosening unloosing unlooted unlopped unloquacious unlord unlorded unlordly unlosable unlosableness unlost unlotted unlousy unlovable unlovableness unlovably unlove unloveable unloveableness unloveably unloved unlovelily unloveliness unlovely unloverlike unloverly unloving unlovingly unlovingness unlowered unlowly unloyal unloyally unloyalty unlubricated unlucent unlucid unluck unluckful unluckily unluckiness unlucky unlucrative unludicrous unluffed unlugged unlugubrious unluminous unlumped unlunar unlured unlust unlustily unlustiness unlustrous unlusty unlute unluted unluxated unluxuriant unluxurious unlycanthropize unlying unlyrical unlyrically unmacadamized unmacerated unmachinable unmackly unmad unmadded unmaddened unmade unmagic unmagical unmagisterial unmagistratelike unmagnanimous unmagnetic unmagnetical unmagnetized unmagnified unmagnify unmaid unmaidenlike unmaidenliness unmaidenly unmail unmailable unmailableness unmailed unmaimable unmaimed unmaintainable unmaintained unmajestic unmakable unmake unmaker unmalevolent unmalicious unmalignant unmaligned unmalleability unmalleable unmalleableness unmalled unmaltable unmalted unmammalian unmammonized unman unmanacle unmanacled unmanageable unmanageableness unmanageably unmanaged unmancipated unmandated unmanducated unmaned unmaneged unmanful unmanfully unmangled unmaniable unmaniac unmaniacal unmanicured unmanifest unmanifested unmanipulatable unmanipulated unmanlike unmanlily unmanliness unmanly unmanned unmanner unmannered unmanneredly unmannerliness unmannerly unmannish unmanored unmantle unmantled unmanufacturable unmanufactured unmanumissible unmanumitted unmanurable unmanured unmappable unmapped unmarbled unmarch unmarching unmarginal unmarginated unmarine unmaritime unmarkable unmarked unmarketable unmarketed unmarled unmarred unmarriable unmarriageability unmarriageable unmarried unmarring unmarry unmarrying unmarshaled unmartial unmartyr unmartyred unmarvelous unmasculine unmashed unmask unmasked unmasker unmasking unmasquerade unmassacred unmassed unmast unmaster unmasterable unmastered unmasterful unmasticable unmasticated unmatchable unmatchableness unmatchably unmatched unmatchedness unmate unmated unmaterial unmaterialistic unmateriate unmaternal unmathematical unmathematically unmating unmatriculated unmatrimonial unmatronlike unmatted unmature unmatured unmaturely unmatureness unmaturing unmaturity unmauled unmaze unmeaning unmeaningly unmeaningness unmeant unmeasurable unmeasurableness unmeasurably unmeasured unmeasuredly unmeasuredness unmeated unmechanic unmechanical unmechanically unmechanistic unmechanize unmechanized unmedaled unmedalled unmeddle unmeddled unmeddlesome unmeddling unmeddlingly unmeddlingness unmediaeval unmediated unmediatized unmedicable unmedical unmedicated unmedicative unmedicinable unmedicinal unmeditated unmeditative unmediumistic unmedullated unmeek unmeekly unmeekness unmeet unmeetable unmeetly unmeetness unmelancholy unmeliorated unmellow unmellowed unmelodic unmelodious unmelodiously unmelodiousness unmelodized unmelodramatic unmeltable unmeltableness unmeltably unmelted unmeltedness unmelting unmember unmemoired unmemorable unmemorialized unmemoried unmemorized unmenaced unmenacing unmendable unmendableness unmendably unmendacious unmended unmenial unmenseful unmenstruating unmensurable unmental unmentionability unmentionable unmentionableness unmentionables unmentionably unmentioned unmercantile unmercenariness unmercenary unmercerized unmerchantable unmerchantlike unmerchantly unmerciful unmercifully unmercifulness unmercurial unmeretricious unmerge unmerged unmeridional unmerited unmeritedly unmeritedness unmeriting unmeritorious unmeritoriously unmeritoriousness unmerry unmesh unmesmeric unmesmerize unmesmerized unmet unmetaled unmetalized unmetalled unmetallic unmetallurgical unmetamorphosed unmetaphorical unmetaphysic unmetaphysical unmeted unmeteorological unmetered unmethodical unmethodically unmethodicalness unmethodized unmethodizing unmethylated unmeticulous unmetric unmetrical unmetrically unmetricalness unmetropolitan unmettle unmew unmewed unmicaceous unmicrobic unmicroscopic unmidwifed unmighty unmigrating unmildewed unmilitant unmilitarily unmilitariness unmilitaristic unmilitarized unmilitary unmilked unmilled unmillinered unmilted unmimicked unminable unminced unmincing unmind unminded unmindful unmindfully unmindfulness unminding unmined unmineralized unmingle unmingleable unmingled unmingling unminimized unminished unminister unministered unministerial unministerially unminted unminuted unmiracled unmiraculous unmiraculously unmired unmirrored unmirthful unmirthfully unmirthfulness unmiry unmisanthropic unmiscarrying unmischievous unmiscible unmisconceivable unmiserly unmisgiving unmisgivingly unmisguided unmisinterpretable unmisled unmissable unmissed unmissionary unmissionized unmist unmistakable unmistakableness unmistakably unmistakedly unmistaken unmistakingly unmistressed unmistrusted unmistrustful unmistrusting unmisunderstandable unmisunderstanding unmisunderstood unmiter unmitigable unmitigated unmitigatedly unmitigatedness unmitigative unmittened unmix unmixable unmixableness unmixed unmixedly unmixedness unmoaned unmoated unmobbed unmobilized unmocked unmocking unmockingly unmodel unmodeled unmodelled unmoderate unmoderately unmoderateness unmoderating unmodern unmodernity unmodernize unmodernized unmodest unmodifiable unmodifiableness unmodifiably unmodified unmodifiedness unmodish unmodulated unmoiled unmoist unmoisten unmold unmoldable unmolded unmoldered unmoldering unmoldy unmolested unmolestedly unmolesting unmollifiable unmollifiably unmollified unmollifying unmolten unmomentary unmomentous unmomentously unmonarch unmonarchical unmonastic unmonetary unmoneyed unmonistic unmonitored unmonkish unmonkly unmonopolize unmonopolized unmonopolizing unmonotonous unmonumented unmoor unmoored unmooted unmopped unmoral unmoralist unmorality unmoralize unmoralized unmoralizing unmorally unmoralness unmorbid unmordanted unmoribund unmorose unmorphological unmortal unmortared unmortgage unmortgageable unmortgaged unmortified unmortifiedly unmortifiedness unmortise unmortised unmossed unmothered unmotherly unmotionable unmotivated unmotivatedly unmotivatedness unmotived unmotorized unmottled unmounded unmount unmountable unmountainous unmounted unmounting unmourned unmournful unmourning unmouthable unmouthed unmouthpieced unmovability unmovable unmovableness unmovably unmoved unmovedly unmoving unmovingly unmovingness unmowed unmown unmucilaged unmudded unmuddied unmuddle unmuddled unmuddy unmuffle unmuffled unmulcted unmulish unmulled unmullioned unmultipliable unmultiplied unmultipliedly unmultiply unmummied unmummify unmunched unmundane unmundified unmunicipalized unmunificent unmunitioned unmurmured unmurmuring unmurmuringly unmurmurous unmuscled unmuscular unmusical unmusicality unmusically unmusicalness unmusicianly unmusked unmussed unmusted unmusterable unmustered unmutated unmutation unmuted unmutilated unmutinous unmuttered unmutual unmutualized unmuzzle unmuzzled unmuzzling unmyelinated unmysterious unmysteriously unmystery unmystical unmysticize unmystified unmythical unnabbed unnagged unnagging unnail unnailed unnaked unnamability unnamable unnamableness unnamably unname unnameability unnameable unnameableness unnameably unnamed unnapkined unnapped unnarcotic unnarrated unnarrow unnation unnational unnationalized unnative unnatural unnaturalism unnaturalist unnaturalistic unnaturality unnaturalizable unnaturalize unnaturalized unnaturally unnaturalness unnature unnautical unnavigability unnavigable unnavigableness unnavigably unnavigated unneaped unnearable unneared unnearly unnearness unneat unneatly unneatness unnebulous unnecessarily unnecessariness unnecessary unnecessitated unnecessitating unnecessity unneeded unneedful unneedfully unneedfulness unneedy unnefarious unnegated unneglected unnegligent unnegotiable unnegotiableness unnegotiably unnegotiated unnegro unneighbored unneighborlike unneighborliness unneighborly unnephritic unnerve unnerved unnervous unnest unnestle unnestled unneth unnethe unnethes unnethis unnetted unnettled unneurotic unneutral unneutralized unneutrally unnew unnewly unnewness unnibbed unnibbied unnice unnicely unniceness unniched unnicked unnickeled unnickelled unnicknamed unniggard unniggardly unnigh unnimbed unnimble unnimbleness unnimbly unnipped unnitrogenized unnobilitated unnobility unnoble unnobleness unnobly unnoised unnomadic unnominated unnonsensical unnoosed unnormal unnorthern unnose unnosed unnotable unnotched unnoted unnoteworthy unnoticeable unnoticeableness unnoticeably unnoticed unnoticing unnotified unnotify unnoting unnourishable unnourished unnourishing unnovel unnovercal unnucleated unnullified unnumberable unnumberableness unnumberably unnumbered unnumberedness unnumerical unnumerous unnurtured unnutritious unnutritive unnuzzled unnymphlike unoared unobdurate unobedience unobedient unobediently unobese unobeyed unobeying unobjected unobjectionable unobjectionableness unobjectionably unobjectional unobjective unobligated unobligatory unobliged unobliging unobligingly unobligingness unobliterable unobliterated unoblivious unobnoxious unobscene unobscure unobscured unobsequious unobsequiously unobsequiousness unobservable unobservance unobservant unobservantly unobservantness unobserved unobservedly unobserving unobservingly unobsessed unobsolete unobstinate unobstruct unobstructed unobstructedly unobstructedness unobstructive unobstruent unobtainable unobtainableness unobtainably unobtained unobtruded unobtruding unobtrusive unobtrusively unobtrusiveness unobtunded unobumbrated unobverted unobviated unobvious unoccasional unoccasioned unoccidental unoccluded unoccupancy unoccupation unoccupied unoccupiedly unoccupiedness unoccurring unoceanic unocular unode unodious unodoriferous unoecumenic unoecumenical unoffendable unoffended unoffendedly unoffender unoffending unoffendingly unoffensive unoffensively unoffensiveness unoffered unofficed unofficered unofficerlike unofficial unofficialdom unofficially unofficialness unofficiating unofficinal unofficious unofficiously unofficiousness unoffset unoften unogled unoil unoiled unoiling unoily unold unomened unominous unomitted unomnipotent unomniscient unonerous unontological unopaque unoped unopen unopenable unopened unopening unopenly unopenness unoperably unoperated unoperatic unoperating unoperative unoperculate unoperculated unopined unopinionated unoppignorated unopportune unopportunely unopportuneness unopposable unopposed unopposedly unopposedness unopposite unoppressed unoppressive unoppressively unoppressiveness unopprobrious unoppugned unopulence unopulent unoratorial unoratorical unorbed unorbital unorchestrated unordain unordainable unordained unorder unorderable unordered unorderly unordinarily unordinariness unordinary unordinate unordinately unordinateness unordnanced unorganic unorganical unorganically unorganicalness unorganizable unorganized unorganizedly unorganizedness unoriental unorientalness unoriented unoriginal unoriginality unoriginally unoriginalness unoriginate unoriginated unoriginatedness unoriginately unoriginateness unorigination unoriginative unoriginatively unoriginativeness unorn unornamental unornamentally unornamentalness unornamented unornate unornithological unornly unorphaned unorthodox unorthodoxically unorthodoxly unorthodoxness unorthodoxy unorthographical unorthographically unoscillating unosculated unossified unostensible unostentation unostentatious unostentatiously unostentatiousness unoutgrown unoutlawed unoutraged unoutspeakable unoutspoken unoutworn unoverclouded unovercome unoverdone unoverdrawn unoverflowing unoverhauled unoverleaped unoverlooked unoverpaid unoverpowered unoverruled unovert unovertaken unoverthrown unovervalued unoverwhelmed unowed unowing unown unowned unoxidable unoxidated unoxidizable unoxidized unoxygenated unoxygenized unpacable unpaced unpacifiable unpacific unpacified unpacifiedly unpacifiedness unpacifist unpack unpacked unpacker unpadded unpadlocked unpagan unpaganize unpaged unpaginal unpaid unpained unpainful unpaining unpainstaking unpaint unpaintability unpaintable unpaintableness unpaintably unpainted unpaintedly unpaintedness unpaired unpalatability unpalatable unpalatableness unpalatably unpalatal unpalatial unpale unpaled unpalisaded unpalisadoed unpalled unpalliable unpalliated unpalpable unpalped unpalpitating unpalsied unpampered unpanegyrized unpanel unpaneled unpanelled unpanged unpanniered unpanoplied unpantheistic unpanting unpapal unpapaverous unpaper unpapered unparaded unparadise unparadox unparagoned unparagonized unparagraphed unparallel unparallelable unparalleled unparalleledly unparalleledness unparallelness unparalyzed unparaphrased unparasitical unparcel unparceled unparceling unparcelled unparcelling unparch unparched unparching unpardon unpardonable unpardonableness unpardonably unpardoned unpardonedness unpardoning unpared unparented unparfit unpargeted unpark unparked unparking unparliamentary unparliamented unparodied unparrel unparriable unparried unparroted unparrying unparsed unparsimonious unparsonic unparsonical unpartable unpartableness unpartably unpartaken unpartaking unparted unpartial unpartiality unpartially unpartialness unparticipant unparticipated unparticipating unparticipative unparticular unparticularized unparticularizing unpartisan unpartitioned unpartizan unpartnered unpartook unparty unpass unpassable unpassableness unpassably unpassed unpassing unpassionate unpassionately unpassionateness unpassioned unpassive unpaste unpasted unpasteurized unpasting unpastor unpastoral unpastured unpatched unpatent unpatentable unpatented unpaternal unpathed unpathetic unpathwayed unpatient unpatiently unpatientness unpatriarchal unpatrician unpatriotic unpatriotically unpatriotism unpatristic unpatrolled unpatronizable unpatronized unpatronizing unpatted unpatterned unpaunch unpaunched unpauperized unpausing unpausingly unpave unpaved unpavilioned unpaving unpawed unpawn unpawned unpayable unpayableness unpayably unpaying unpayment unpeace unpeaceable unpeaceableness unpeaceably unpeaceful unpeacefully unpeacefulness unpealed unpearled unpebbled unpeccable unpecked unpecuniarily unpedagogical unpedantic unpeddled unpedestal unpedigreed unpeel unpeelable unpeelableness unpeeled unpeerable unpeered unpeg unpejorative unpelagic unpelted unpen unpenal unpenalized unpenanced unpenciled unpencilled unpenetrable unpenetrated unpenetrating unpenitent unpenitently unpenitentness unpenned unpennied unpennoned unpensionable unpensionableness unpensioned unpensioning unpent unpenurious unpeople unpeopled unpeopling unperceived unperceivedly unperceptible unperceptibly unperceptive unperch unperched unpercipient unpercolated unpercussed unperfect unperfected unperfectedly unperfectedness unperfectly unperfectness unperfidious unperflated unperforate unperforated unperformable unperformance unperformed unperforming unperfumed unperilous unperiodic unperiodical unperiphrased unperishable unperishableness unperishably unperished unperishing unperjured unpermanency unpermanent unpermanently unpermeable unpermeated unpermissible unpermissive unpermitted unpermitting unpermixed unpernicious unperpendicular unperpetrated unperpetuated unperplex unperplexed unperplexing unpersecuted unpersecutive unperseverance unpersevering unperseveringly unperseveringness unpersonable unpersonableness unpersonal unpersonality unpersonified unpersonify unperspicuous unperspirable unperspiring unpersuadable unpersuadableness unpersuadably unpersuaded unpersuadedness unpersuasibleness unpersuasion unpersuasive unpersuasively unpersuasiveness unpertaining unpertinent unpertinently unperturbed unperturbedly unperturbedness unperuked unperused unpervaded unperverse unpervert unperverted unpervious unpessimistic unpestered unpestilential unpetal unpetitioned unpetrified unpetrify unpetticoated unpetulant unpharasaic unpharasaical unphased unphenomenal unphilanthropic unphilanthropically unphilological unphilosophic unphilosophically unphilosophicalness unphilosophize unphilosophized unphilosophy unphlegmatic unphonetic unphoneticness unphonographed unphosphatized unphotographed unphrasable unphrasableness unphrased unphrenological unphysical unphysically unphysicianlike unphysicked unphysiological unpicaresque unpick unpickable unpicked unpicketed unpickled unpictorial unpictorially unpicturability unpicturable unpictured unpicturesque unpicturesquely unpicturesqueness unpiece unpieced unpierceable unpierced unpiercing unpiety unpigmented unpile unpiled unpilfered unpilgrimlike unpillaged unpillared unpilled unpilloried unpillowed unpiloted unpimpled unpin unpinched unpining unpinion unpinioned unpinked unpinned unpious unpiped unpiqued unpirated unpitched unpiteous unpiteously unpiteousness unpitiable unpitiably unpitied unpitiedly unpitiedness unpitiful unpitifully unpitifulness unpitted unpitying unpityingly unpityingness unplacable unplacably unplacated unplace unplaced unplacid unplagiarized unplagued unplaid unplain unplained unplainly unplainness unplait unplaited unplan unplaned unplanished unplank unplanked unplanned unplannedly unplannedness unplant unplantable unplanted unplantlike unplashed unplaster unplastered unplastic unplat unplated unplatted unplausible unplausibleness unplausibly unplayable unplayed unplayful unplaying unpleached unpleadable unpleaded unpleading unpleasable unpleasant unpleasantish unpleasantly unpleasantness unpleasantry unpleased unpleasing unpleasingly unpleasingness unpleasurable unpleasurably unpleasure unpleat unpleated unplebeian unpledged unplenished unplenteous unplentiful unplentifulness unpliable unpliableness unpliably unpliancy unpliant unpliantly unplied unplighted unplodding unplotted unplotting unplough unploughed unplow unplowed unplucked unplug unplugged unplugging unplumb unplumbed unplume unplumed unplummeted unplump unplundered unplunge unplunged unplutocratic unplutocratically unpoached unpocket unpocketed unpodded unpoetic unpoetically unpoeticalness unpoeticized unpoetize unpoetized unpoignard unpointed unpointing unpoise unpoised unpoison unpoisonable unpoisoned unpoisonous unpolarizable unpolarized unpoled unpolemical unpolemically unpoliced unpolicied unpolish unpolishable unpolished unpolishedness unpolite unpolitely unpoliteness unpolitic unpolitical unpolitically unpoliticly unpollarded unpolled unpollutable unpolluted unpollutedly unpolluting unpolymerized unpompous unpondered unpontifical unpooled unpope unpopular unpopularity unpopularize unpopularly unpopularness unpopulate unpopulated unpopulous unpopulousness unporous unportable unportended unportentous unportioned unportly unportmanteaued unportraited unportrayable unportrayed unportuous unposed unposing unpositive unpossessable unpossessed unpossessedness unpossessing unpossibility unpossible unpossibleness unpossibly unposted unpostered unposthumous unpostmarked unpostponable unpostponed unpostulated unpot unpotted unpouched unpoulticed unpounced unpounded unpoured unpowdered unpower unpowerful unpowerfulness unpracticability unpracticable unpracticableness unpracticably unpractical unpracticality unpractically unpracticalness unpractice unpracticed unpragmatical unpraisable unpraise unpraised unpraiseful unpraiseworthy unpranked unpray unprayable unprayed unprayerful unpraying unpreach unpreached unpreaching unprecarious unprecautioned unpreceded unprecedented unprecedentedly unprecedentedness unprecedential unprecedently unprecious unprecipitate unprecipitated unprecise unprecisely unpreciseness unprecluded unprecludible unprecocious unpredacious unpredestinated unpredestined unpredicable unpredicated unpredict unpredictable unpredictableness unpredictably unpredicted unpredictedness unpredicting unpredisposed unpredisposing unpreened unprefaced unpreferable unpreferred unprefigured unprefined unprefixed unpregnant unprejudged unprejudicated unprejudice unprejudiced unprejudicedly unprejudicedness unprejudiciable unprejudicial unprejudicially unprejudicialness unprelatic unprelatical unpreluded unpremature unpremeditate unpremeditated unpremeditatedly unpremeditatedness unpremeditately unpremeditation unpremonished unpremonstrated unprenominated unprenticed unpreoccupied unpreordained unpreparation unprepare unprepared unpreparedly unpreparedness unpreparing unpreponderated unpreponderating unprepossessedly unprepossessing unprepossessingly unprepossessingness unpreposterous unpresaged unpresageful unpresaging unpresbyterated unprescient unprescinded unprescribed unpresentability unpresentable unpresentableness unpresentably unpresented unpreservable unpreserved unpresidential unpresiding unpressed unpresumable unpresumed unpresuming unpresumingness unpresumptuous unpresumptuously unpresupposed unpretended unpretending unpretendingly unpretendingness unpretentious unpretentiously unpretentiousness unpretermitted unpreternatural unprettiness unpretty unprevailing unprevalent unprevaricating unpreventable unpreventableness unpreventably unprevented unpreventible unpreventive unpriceably unpriced unpricked unprickled unprickly unpriest unpriestlike unpriestly unpriggish unprim unprime unprimed unprimitive unprimmed unprince unprincelike unprinceliness unprincely unprincess unprincipal unprinciple unprincipled unprincipledly unprincipledness unprint unprintable unprintableness unprintably unprinted unpriority unprismatic unprison unprisonable unprisoned unprivate unprivileged unprizable unprized unprobated unprobationary unprobed unprobity unproblematic unproblematical unprocessed unproclaimed unprocrastinated unprocreant unprocreated unproctored unprocurable unprocurableness unprocure unprocured unproded unproduceable unproduceableness unproduceably unproduced unproducedness unproducible unproducibleness unproducibly unproductive unproductively unproductiveness unproductivity unprofanable unprofane unprofaned unprofessed unprofessing unprofessional unprofessionalism unprofessionally unprofessorial unproffered unproficiency unproficient unproficiently unprofit unprofitable unprofitableness unprofitably unprofited unprofiteering unprofiting unprofound unprofuse unprofusely unprofuseness unprognosticated unprogressed unprogressive unprogressively unprogressiveness unprohibited unprohibitedness unprohibitive unprojected unprojecting unproliferous unprolific unprolix unprologued unprolonged unpromiscuous unpromise unpromised unpromising unpromisingly unpromisingness unpromotable unpromoted unprompted unpromptly unpromulgated unpronounce unpronounceable unpronounced unpronouncing unproofread unprop unpropagated unpropelled unpropense unproper unproperly unproperness unpropertied unprophesiable unprophesied unprophetic unprophetical unprophetically unprophetlike unpropitiable unpropitiated unpropitiatedness unpropitiatory unpropitious unpropitiously unpropitiousness unproportion unproportionable unproportionableness unproportionably unproportional unproportionality unproportionally unproportionate unproportionately unproportionateness unproportioned unproportionedly unproportionedness unproposed unproposing unpropounded unpropped unpropriety unprorogued unprosaic unproscribable unproscribed unprosecutable unprosecuted unprosecuting unproselyte unproselyted unprosodic unprospected unprospective unprosperably unprospered unprosperity unprosperous unprosperously unprosperousness unprostitute unprostituted unprostrated unprotectable unprotected unprotectedly unprotectedness unprotective unprotestant unprotestantize unprotested unprotesting unprotruded unprotruding unprotrusive unproud unprovability unprovable unprovableness unprovably unproved unprovedness unproven unproverbial unprovidable unprovide unprovided unprovidedly unprovidedness unprovidenced unprovident unprovidential unprovidently unprovincial unproving unprovision unprovisioned unprovocative unprovokable unprovoke unprovoked unprovokedly unprovokedness unprovoking unproximity unprudence unprudent unprudently unpruned unprying unpsychic unpsychological unpublic unpublicity unpublishable unpublishableness unpublishably unpublished unpucker unpuckered unpuddled unpuffed unpuffing unpugilistic unpugnacious unpulled unpulleyed unpulped unpulverable unpulverize unpulverized unpulvinate unpulvinated unpumicated unpummeled unpummelled unpumpable unpumped unpunched unpunctated unpunctilious unpunctual unpunctuality unpunctually unpunctuated unpunctuating unpunishable unpunishably unpunished unpunishedly unpunishedness unpunishing unpunishingly unpurchasable unpurchased unpure unpurely unpureness unpurgeable unpurged unpurifiable unpurified unpurifying unpuritan unpurled unpurloined unpurpled unpurported unpurposed unpurposelike unpurposely unpurposing unpurse unpursed unpursuable unpursued unpursuing unpurveyed unpushed unput unputrefiable unputrefied unputrid unputtied unpuzzle unquadded unquaffed unquailed unquailing unquailingly unquakerlike unquakerly unquaking unqualifiable unqualification unqualified unqualifiedly unqualifiedness unqualify unqualifying unqualifyingly unqualitied unquality unquantified unquantitative unquarantined unquarreled unquarreling unquarrelled unquarrelling unquarrelsome unquarried unquartered unquashed unquayed unqueen unqueened unqueening unqueenlike unqueenly unquellable unquelled unquenchable unquenchableness unquenchably unquenched unqueried unquested unquestionability unquestionable unquestionableness unquestionably unquestionate unquestioned unquestionedly unquestionedness unquestioning unquestioningly unquestioningness unquibbled unquibbling unquick unquickened unquickly unquicksilvered unquiescence unquiescent unquiescently unquiet unquietable unquieted unquieting unquietly unquietness unquietude unquilleted unquilted unquit unquittable unquitted unquivered unquivering unquizzable unquizzed unquotable unquote unquoted unrabbeted unrabbinical unraced unrack unracked unracking unradiated unradical unradicalize unraffled unraftered unraided unrailed unrailroaded unrailwayed unrainy unraised unrake unraked unraking unrallied unram unrambling unramified unrammed unramped unranched unrancid unrancored unrandom unrank unranked unransacked unransomable unransomed unrapacious unraped unraptured unrare unrarefied unrash unrasped unratable unrated unratified unrational unrattled unravaged unravel unravelable unraveled unraveler unraveling unravellable unravelled unraveller unravelling unravelment unraving unravished unravishing unray unrayed unrazed unrazored unreachable unreachably unreached unreactive unread unreadability unreadable unreadableness unreadably unreadily unreadiness unready unreal unrealism unrealist unrealistic unreality unrealizable unrealize unrealized unrealizing unreally unrealmed unrealness unreaped unreared unreason unreasonability unreasonable unreasonableness unreasonably unreasoned unreasoning unreasoningly unreassuring unreassuringly unreave unreaving unrebated unrebel unrebellious unrebuffable unrebuffably unrebuilt unrebukable unrebukably unrebuked unrebuttable unrebuttableness unrebutted unrecallable unrecallably unrecalled unrecalling unrecantable unrecanted unrecaptured unreceding unreceipted unreceivable unreceived unreceiving unrecent unreceptant unreceptive unreceptivity unreciprocal unreciprocated unrecited unrecked unrecking unreckingness unreckon unreckonable unreckoned unreclaimable unreclaimably unreclaimed unreclaimedness unreclaiming unreclined unreclining unrecognition unrecognizable unrecognizableness unrecognizably unrecognized unrecognizing unrecognizingly unrecoined unrecollected unrecommendable unrecompensable unrecompensed unreconcilable unreconcilableness unreconcilably unreconciled unrecondite unreconnoitered unreconsidered unreconstructed unrecordable unrecorded unrecordedness unrecording unrecountable unrecounted unrecoverable unrecoverableness unrecoverably unrecovered unrecreant unrecreated unrecreating unrecriminative unrecruitable unrecruited unrectangular unrectifiable unrectifiably unrectified unrecumbent unrecuperated unrecurrent unrecurring unrecusant unred unredacted unredeemable unredeemableness unredeemably unredeemed unredeemedly unredeemedness unredeeming unredressable unredressed unreduceable unreduced unreducible unreducibleness unreducibly unreduct unreefed unreel unreelable unreeled unreeling unreeve unreeving unreferenced unreferred unrefilled unrefine unrefined unrefinedly unrefinedness unrefinement unrefining unrefitted unreflected unreflecting unreflectingly unreflectingness unreflective unreflectively unreformable unreformed unreformedness unreforming unrefracted unrefracting unrefrainable unrefrained unrefraining unrefreshed unrefreshful unrefreshing unrefreshingly unrefrigerated unrefulgent unrefunded unrefunding unrefusable unrefusably unrefused unrefusing unrefusingly unrefutable unrefuted unrefuting unregainable unregained unregal unregaled unregality unregally unregard unregardable unregardant unregarded unregardedly unregardful unregeneracy unregenerate unregenerately unregenerateness unregenerating unregeneration unregimented unregistered unregressive unregretful unregretfully unregretfulness unregrettable unregretted unregretting unregular unregulated unregulative unregurgitated unrehabilitated unrehearsable unrehearsed unrehearsing unreigning unreimbodied unrein unreined unreinstated unreiterable unreiterated unrejectable unrejoiced unrejoicing unrejuvenated unrelapsing unrelated unrelatedness unrelating unrelational unrelative unrelatively unrelaxable unrelaxed unrelaxing unrelaxingly unreleasable unreleased unreleasing unrelegated unrelentance unrelented unrelenting unrelentingly unrelentingness unrelentor unrelevant unreliability unreliable unreliableness unreliably unreliance unrelievable unrelievableness unrelieved unrelievedly unreligion unreligioned unreligious unreligiously unreligiousness unrelinquishable unrelinquishably unrelinquished unrelinquishing unrelishable unrelished unrelishing unreluctant unreluctantly unremaining unremanded unremarkable unremarked unremarried unremediable unremedied unremember unrememberable unremembered unremembering unremembrance unreminded unremissible unremittable unremitted unremittedly unremittent unremittently unremitting unremittingly unremittingness unremonstrant unremonstrated unremonstrating unremorseful unremorsefully unremote unremotely unremounted unremovable unremovableness unremovably unremoved unremunerated unremunerating unremunerative unremuneratively unremunerativeness unrenderable unrendered unrenewable unrenewed unrenounceable unrenounced unrenouncing unrenovated unrenowned unrenownedly unrenownedness unrent unrentable unrented unreorganized unrepaid unrepair unrepairable unrepaired unrepartable unreparted unrepealability unrepealable unrepealableness unrepealably unrepealed unrepeatable unrepeated unrepellable unrepelled unrepellent unrepent unrepentable unrepentance unrepentant unrepentantly unrepentantness unrepented unrepenting unrepentingly unrepentingness unrepetitive unrepined unrepining unrepiningly unrepiqued unreplaceable unreplaced unreplenished unrepleviable unreplevined unrepliable unrepliably unreplied unreplying unreportable unreported unreportedly unreportedness unrepose unreposed unreposeful unreposefulness unreposing unrepossessed unreprehended unrepresentable unrepresentation unrepresentative unrepresented unrepresentedness unrepressed unrepressible unreprievable unreprievably unreprieved unreprimanded unreprinted unreproachable unreproachableness unreproachably unreproached unreproachful unreproachfully unreproaching unreproachingly unreprobated unreproducible unreprovable unreprovableness unreprovably unreproved unreprovedly unreprovedness unreproving unrepublican unrepudiable unrepudiated unrepugnant unrepulsable unrepulsed unrepulsing unrepulsive unreputable unreputed unrequalified unrequested unrequickened unrequired unrequisite unrequitable unrequital unrequited unrequitedly unrequitedness unrequitement unrequiter unrequiting unrescinded unrescued unresemblant unresembling unresented unresentful unresenting unreserve unreserved unreservedly unreservedness unresifted unresigned unresistable unresistably unresistance unresistant unresistantly unresisted unresistedly unresistedness unresistible unresistibleness unresistibly unresisting unresistingly unresistingness unresolute unresolvable unresolve unresolved unresolvedly unresolvedness unresolving unresonant unresounded unresounding unresourceful unresourcefulness unrespect unrespectability unrespectable unrespected unrespectful unrespectfully unrespectfulness unrespective unrespectively unrespectiveness unrespirable unrespired unrespited unresplendent unresponding unresponsible unresponsibleness unresponsive unresponsively unresponsiveness unrest unrestable unrested unrestful unrestfully unrestfulness unresting unrestingly unrestingness unrestorable unrestored unrestrainable unrestrainably unrestrained unrestrainedly unrestrainedness unrestraint unrestrictable unrestricted unrestrictedly unrestrictedness unrestrictive unresty unresultive unresumed unresumptive unretainable unretained unretaliated unretaliating unretardable unretarded unretentive unreticent unretinued unretired unretiring unretorted unretouched unretractable unretracted unretreating unretrenchable unretrenched unretrievable unretrieved unretrievingly unretted unreturnable unreturnably unreturned unreturning unreturningly unrevealable unrevealed unrevealedness unrevealing unrevealingly unrevelationize unrevenged unrevengeful unrevengefulness unrevenging unrevengingly unrevenue unrevenued unreverberated unrevered unreverence unreverenced unreverend unreverendly unreverent unreverential unreverently unreverentness unreversable unreversed unreversible unreverted unrevertible unreverting unrevested unrevetted unreviewable unreviewed unreviled unrevised unrevivable unrevived unrevocable unrevocableness unrevocably unrevoked unrevolted unrevolting unrevolutionary unrevolutionized unrevolved unrevolving unrewardable unrewarded unrewardedly unrewarding unreworded unrhetorical unrhetorically unrhetoricalness unrhyme unrhymed unrhythmic unrhythmical unrhythmically unribbed unribboned unrich unriched unricht unricked unrid unridable unridableness unridably unridden unriddle unriddleable unriddled unriddler unriddling unride unridely unridered unridged unridiculed unridiculous unrife unriffled unrifled unrifted unrig unrigged unrigging unright unrightable unrighted unrighteous unrighteously unrighteousness unrightful unrightfully unrightfulness unrightly unrightwise unrigid unrigorous unrimpled unrind unring unringable unringed unringing unrinsed unrioted unrioting unriotous unrip unripe unriped unripely unripened unripeness unripening unrippable unripped unripping unrippled unrippling unripplingly unrisen unrising unriskable unrisked unrisky unritual unritualistic unrivalable unrivaled unrivaledly unrivaledness unrived unriven unrivet unriveted unriveting unroaded unroadworthy unroaming unroast unroasted unrobbed unrobe unrobed unrobust unrocked unrococo unrodded unroiled unroll unrollable unrolled unroller unrolling unrollment unromantic unromantical unromantically unromanticalness unromanticized unroof unroofed unroofing unroomy unroost unroosted unroosting unroot unrooted unrooting unrope unroped unrosed unrosined unrostrated unrotated unrotating unroted unrotted unrotten unrotund unrouged unrough unroughened unround unrounded unrounding unrousable unroused unroutable unrouted unrove unroved unroving unrow unrowed unroweled unroyal unroyalist unroyalized unroyally unroyalness unrubbed unrubbish unrubified unrubrical unrubricated unruddered unruddled unrueful unruffable unruffed unruffle unruffled unruffling unrugged unruinable unruinated unruined unrulable unrulableness unrule unruled unruledly unruledness unruleful unrulily unruliness unruly unruminated unruminating unruminatingly unrummaged unrumored unrumple unrumpled unrun unrung unruptured unrural unrushed unrust unrusted unrustic unrusticated unrustling unruth unsabbatical unsabered unsabled unsabred unsaccharic unsacerdotal unsacerdotally unsack unsacked unsacramental unsacramentally unsacramentarian unsacred unsacredly unsacrificeable unsacrificeably unsacrificed unsacrificial unsacrificing unsacrilegious unsad unsadden unsaddened unsaddle unsaddled unsaddling unsafe unsafeguarded unsafely unsafeness unsafety unsagacious unsage unsagging unsaid unsailable unsailed unsailorlike unsaint unsainted unsaintlike unsaintly unsalability unsalable unsalableness unsalably unsalaried unsalesmanlike unsaline unsalivated unsallying unsalmonlike unsalt unsaltable unsaltatory unsalted unsalubrious unsalutary unsaluted unsaluting unsalvability unsalvable unsalvableness unsalvaged unsalved unsampled unsanctification unsanctified unsanctifiedly unsanctifiedness unsanctify unsanctifying unsanctimonious unsanctimoniously unsanctimoniousness unsanction unsanctionable unsanctioned unsanctioning unsanctitude unsanctity unsanctuaried unsandaled unsanded unsane unsanguinary unsanguine unsanguinely unsanguineness unsanguineous unsanguineously unsanitariness unsanitary unsanitated unsanitation unsanity unsaponifiable unsaponified unsapped unsappy unsarcastic unsardonic unsartorial unsash unsashed unsatable unsatanic unsated unsatedly unsatedness unsatiability unsatiable unsatiableness unsatiably unsatiate unsatiated unsatiating unsatin unsatire unsatirical unsatirically unsatirize unsatirized unsatisfaction unsatisfactorily unsatisfactoriness unsatisfactory unsatisfiable unsatisfiableness unsatisfiably unsatisfied unsatisfiedly unsatisfiedness unsatisfying unsatisfyingly unsatisfyingness unsaturable unsaturated unsaturatedly unsaturatedness unsaturation unsatyrlike unsauced unsaurian unsavable unsaveable unsaved unsaving unsavored unsavoredly unsavoredness unsavorily unsavoriness unsavory unsawed unsawn unsay unsayability unsayable unscabbard unscabbarded unscabbed unscaffolded unscalable unscalableness unscalably unscale unscaled unscaledness unscalloped unscaly unscamped unscandalize unscandalized unscandalous unscannable unscanned unscanted unscanty unscarb unscarce unscared unscarfed unscarified unscarred unscathed unscathedly unscathedness unscattered unscavengered unscenic unscent unscented unscepter unsceptered unsceptical unsceptre unsceptred unscheduled unschematic unschematized unscholar unscholarlike unscholarly unscholastic unschool unschooled unschooledly unschooledness unscienced unscientific unscientifical unscientifically unscintillating unscioned unscissored unscoffed unscoffing unscolded unsconced unscooped unscorched unscored unscorified unscoring unscorned unscornful unscornfully unscornfulness unscotch unscotched unscottify unscoured unscourged unscowling unscramble unscrambling unscraped unscratchable unscratched unscratching unscratchingly unscrawled unscreen unscreenable unscreenably unscreened unscrew unscrewable unscrewed unscrewing unscribal unscribbled unscribed unscrimped unscriptural unscripturally unscripturalness unscrubbed unscrupled unscrupulosity unscrupulous unscrupulously unscrupulousness unscrutable unscrutinized unscrutinizing unscrutinizingly unsculptural unsculptured unscummed unscutcheoned unseafaring unseal unsealable unsealed unsealer unsealing unseam unseamanlike unseamanship unseamed unseaming unsearchable unsearchableness unsearchably unsearched unsearcherlike unsearching unseared unseason unseasonable unseasonableness unseasonably unseasoned unseat unseated unseaworthiness unseaworthy unseceding unsecluded unseclusive unseconded unsecrecy unsecret unsecretarylike unsecreted unsecreting unsecretly unsecretness unsectarian unsectarianism unsectarianize unsectional unsecular unsecularize unsecularized unsecure unsecured unsecuredly unsecuredness unsecurely unsecureness unsecurity unsedate unsedentary unseditious unseduce unseduced unseducible unseductive unsedulous unsee unseeable unseeded unseeing unseeingly unseeking unseeming unseemingly unseemlily unseemliness unseemly unseen unseethed unsegmented unsegregable unsegregated unsegregatedness unseignorial unseismic unseizable unseized unseldom unselect unselected unselecting unselective unself unselfish unselfishly unselfishness unselflike unselfness unselling unsenatorial unsenescent unsensational unsense unsensed unsensibility unsensible unsensibleness unsensibly unsensitive unsensitize unsensitized unsensory unsensual unsensualize unsensualized unsensually unsensuous unsensuousness unsent unsentenced unsententious unsentient unsentimental unsentimentalist unsentimentality unsentimentalize unsentimentally unsentineled unsentinelled unseparable unseparableness unseparably unseparate unseparated unseptate unseptated unsepulcher unsepulchered unsepulchral unsepulchre unsepulchred unsepultured unsequenced unsequential unsequestered unseraphical unserenaded unserene unserflike unserious unseriousness unserrated unserried unservable unserved unserviceability unserviceable unserviceableness unserviceably unservicelike unservile unsesquipedalian unset unsetting unsettle unsettleable unsettled unsettledness unsettlement unsettling unseverable unseverableness unsevere unsevered unseveredly unseveredness unsew unsewed unsewered unsewing unsewn unsex unsexed unsexing unsexlike unsexual unshackle unshackled unshackling unshade unshaded unshadow unshadowable unshadowed unshady unshafted unshakable unshakably unshakeable unshakeably unshaken unshakenly unshakenness unshaking unshakingness unshaled unshamable unshamableness unshamably unshameable unshameableness unshameably unshamed unshamefaced unshamefacedness unshameful unshamefully unshamefulness unshammed unshanked unshapable unshape unshapeable unshaped unshapedness unshapeliness unshapely unshapen unshapenly unshapenness unsharable unshared unsharedness unsharing unsharp unsharped unsharpen unsharpened unsharpening unsharping unshattered unshavable unshaveable unshaved unshavedly unshavedness unshaven unshavenly unshavenness unshawl unsheaf unsheared unsheathe unsheathed unsheathing unshed unsheet unsheeted unsheeting unshell unshelled unshelling unshelterable unsheltered unsheltering unshelve unshepherded unshepherding unsheriff unshewed unshieldable unshielded unshielding unshiftable unshifted unshiftiness unshifting unshifty unshimmering unshingled unshining unship unshiplike unshipment unshipped unshipping unshipshape unshipwrecked unshirking unshirted unshivered unshivering unshockable unshocked unshod unshodden unshoe unshoed unshoeing unshop unshore unshored unshorn unshort unshortened unshot unshotted unshoulder unshouted unshouting unshoved unshoveled unshowable unshowed unshowmanlike unshown unshowy unshredded unshrew unshrewd unshrewish unshrill unshrine unshrined unshrinement unshrink unshrinkability unshrinkable unshrinking unshrinkingly unshrived unshriveled unshrivelled unshriven unshroud unshrouded unshrubbed unshrugging unshrunk unshrunken unshuddering unshuffle unshuffled unshunnable unshunned unshunted unshut unshutter unshuttered unshy unshyly unshyness unsibilant unsiccated unsick unsickened unsicker unsickerly unsickerness unsickled unsickly unsided unsiding unsiege unsifted unsighing unsight unsightable unsighted unsighting unsightliness unsightly unsigmatic unsignable unsignaled unsignalized unsignalled unsignatured unsigned unsigneted unsignificancy unsignificant unsignificantly unsignificative unsignified unsignifying unsilenceable unsilenceably unsilenced unsilent unsilentious unsilently unsilicified unsilly unsilvered unsimilar unsimilarity unsimilarly unsimple unsimplicity unsimplified unsimplify unsimulated unsimultaneous unsin unsincere unsincerely unsincereness unsincerity unsinew unsinewed unsinewing unsinewy unsinful unsinfully unsinfulness unsing unsingability unsingable unsingableness unsinged unsingle unsingled unsingleness unsingular unsinister unsinkability unsinkable unsinking unsinnable unsinning unsinningness unsiphon unsipped unsister unsistered unsisterliness unsisterly unsizable unsizableness unsizeable unsizeableness unsized unskaithd unskeptical unsketchable unsketched unskewed unskewered unskilful unskilfully unskilled unskilledly unskilledness unskillful unskillfully unskillfulness unskimmed unskin unskinned unskirted unslack unslacked unslackened unslackening unslacking unslagged unslain unslakable unslakeable unslaked unslammed unslandered unslanderous unslapped unslashed unslate unslated unslating unslaughtered unslave unslayable unsleaved unsleek unsleepably unsleeping unsleepingly unsleepy unsleeve unsleeved unslender unslept unsliced unsliding unslighted unsling unslip unslipped unslippery unslipping unslit unslockened unsloped unslopped unslot unslothful unslothfully unslothfulness unslotted unsloughed unsloughing unslow unsluggish unsluice unsluiced unslumbering unslumberous unslumbrous unslung unslurred unsly unsmacked unsmart unsmartly unsmartness unsmeared unsmelled unsmelling unsmelted unsmiled unsmiling unsmilingly unsmilingness unsmirched unsmirking unsmitten unsmokable unsmokeable unsmoked unsmokified unsmoking unsmoky unsmooth unsmoothed unsmoothly unsmoothness unsmote unsmotherable unsmothered unsmudged unsmuggled unsmutched unsmutted unsmutty unsnaffled unsnagged unsnaggled unsnaky unsnap unsnapped unsnare unsnared unsnarl unsnatch unsnatched unsneck unsneering unsnib unsnipped unsnobbish unsnoring unsnouted unsnow unsnubbable unsnubbed unsnuffed unsoaked unsoaped unsoarable unsober unsoberly unsoberness unsobriety unsociability unsociable unsociableness unsociably unsocial unsocialism unsocialistic unsociality unsocializable unsocialized unsocially unsocialness unsociological unsocket unsodden unsoft unsoftened unsoftening unsoggy unsoil unsoiled unsoiledness unsolaced unsolacing unsolar unsold unsolder unsoldered unsoldering unsoldier unsoldiered unsoldierlike unsoldierly unsole unsoled unsolemn unsolemness unsolemnize unsolemnized unsolemnly unsolicitated unsolicited unsolicitedly unsolicitous unsolicitously unsolicitousness unsolid unsolidarity unsolidifiable unsolidified unsolidity unsolidly unsolidness unsolitary unsolubility unsoluble unsolvable unsolvableness unsolvably unsolved unsomatic unsomber unsombre unsome unson unsonable unsonant unsonlike unsonneted unsonorous unsonsy unsoothable unsoothed unsoothfast unsoothing unsooty unsophistical unsophistically unsophisticate unsophisticated unsophisticatedly unsophisticatedness unsophistication unsophomoric unsordid unsore unsorrowed unsorrowing unsorry unsort unsortable unsorted unsorting unsotted unsought unsoul unsoulful unsoulfully unsoulish unsound unsoundable unsoundableness unsounded unsounding unsoundly unsoundness unsour unsoured unsoused unsovereign unsowed unsown unspaced unspacious unspaded unspan unspangled unspanked unspanned unspar unsparable unspared unsparing unsparingly unsparingness unsparkling unsparred unsparse unspatial unspatiality unspattered unspawned unspayed unspeak unspeakability unspeakable unspeakableness unspeakably unspeaking unspeared unspecialized unspecializing unspecific unspecified unspecifiedly unspecious unspecked unspeckled unspectacled unspectacular unspectacularly unspecterlike unspectrelike unspeculating unspeculative unspeculatively unsped unspeed unspeedy unspeered unspell unspellable unspelled unspelt unspendable unspending unspent unspewed unsphere unsphered unsphering unspiable unspiced unspicy unspied unspike unspillable unspin unspinsterlike unspinsterlikeness unspiral unspired unspirit unspirited unspiritedly unspiriting unspiritual unspirituality unspiritualize unspiritualized unspiritually unspiritualness unspissated unspit unspited unspiteful unspitted unsplashed unsplattered unsplayed unspleened unspleenish unspleenishly unsplendid unspliced unsplinted unsplintered unsplit unspoil unspoilable unspoilableness unspoilably unspoiled unspoken unspokenly unsponged unspongy unsponsored unspontaneous unspontaneously unspookish unsported unsportful unsporting unsportive unsportsmanlike unsportsmanly unspot unspotlighted unspottable unspotted unspottedly unspottedness unspoused unspouselike unspouted unsprained unsprayed unspread unsprightliness unsprightly unspring unspringing unspringlike unsprinkled unsprinklered unsprouted unsproutful unsprouting unspruced unsprung unspun unspurned unspurred unspying unsquandered unsquarable unsquare unsquared unsquashed unsqueamish unsqueezable unsqueezed unsquelched unsquinting unsquire unsquired unsquirelike unsquirted unstabbed unstability unstable unstabled unstableness unstablished unstably unstack unstacked unstacker unstaffed unstaged unstaggered unstaggering unstagnating unstagy unstaid unstaidly unstaidness unstain unstainable unstainableness unstained unstainedly unstainedness unstaled unstalked unstalled unstammering unstamped unstampeded unstanch unstanchable unstandard unstandardized unstanzaic unstar unstarch unstarched unstarlike unstarred unstarted unstarting unstartled unstarved unstatable unstate unstateable unstated unstately unstatesmanlike unstatic unstating unstation unstationary unstationed unstatistic unstatistical unstatued unstatuesque unstatutable unstatutably unstaunch unstaunchable unstaunched unstavable unstaveable unstaved unstayable unstayed unstayedness unstaying unsteadfast unsteadfastly unsteadfastness unsteadied unsteadily unsteadiness unsteady unsteadying unstealthy unsteamed unsteaming unsteck unstecked unsteel unsteeled unsteep unsteeped unsteepled unsteered unstemmable unstemmed unstentorian unstep unstercorated unstereotyped unsterile unsterilized unstern unstethoscoped unstewardlike unstewed unstick unsticking unstickingness unsticky unstiffen unstiffened unstifled unstigmatized unstill unstilled unstillness unstilted unstimulated unstimulating unsting unstinged unstinging unstinted unstintedly unstinting unstintingly unstippled unstipulated unstirrable unstirred unstirring unstitch unstitched unstitching unstock unstocked unstocking unstockinged unstoic unstoical unstoically unstoicize unstoked unstoken unstolen unstonable unstone unstoned unstoniness unstony unstooping unstop unstoppable unstopped unstopper unstoppered unstopple unstore unstored unstoried unstormed unstormy unstout unstoved unstow unstowed unstraddled unstrafed unstraight unstraightened unstraightforward unstraightness unstrain unstrained unstraitened unstrand unstranded unstrange unstrangered unstrangled unstrangulable unstrap unstrapped unstrategic unstrategically unstratified unstraying unstreaked unstrength unstrengthen unstrengthened unstrenuous unstressed unstressedly unstressedness unstretch unstretched unstrewed unstrewn unstriated unstricken unstrictured unstridulous unstrike unstriking unstring unstringed unstringing unstrip unstriped unstripped unstriving unstroked unstrong unstructural unstruggling unstrung unstubbed unstubborn unstuccoed unstuck unstudded unstudied unstudious unstuff unstuffed unstuffing unstultified unstumbling unstung unstunned unstunted unstupefied unstupid unstuttered unstuttering unsty unstyled unstylish unstylishly unstylishness unsubdivided unsubduable unsubduableness unsubduably unsubducted unsubdued unsubduedly unsubduedness unsubject unsubjectable unsubjected unsubjectedness unsubjection unsubjective unsubjectlike unsubjugate unsubjugated unsublimable unsublimated unsublimed unsubmerged unsubmergible unsubmerging unsubmission unsubmissive unsubmissively unsubmissiveness unsubmitted unsubmitting unsubordinate unsubordinated unsuborned unsubpoenaed unsubscribed unsubscribing unsubservient unsubsided unsubsidiary unsubsiding unsubsidized unsubstanced unsubstantial unsubstantiality unsubstantialize unsubstantially unsubstantialness unsubstantiate unsubstantiated unsubstantiation unsubstituted unsubtle unsubtleness unsubtlety unsubtly unsubtracted unsubventioned unsubventionized unsubversive unsubvertable unsubverted unsubvertive unsucceedable unsucceeded unsucceeding unsuccess unsuccessful unsuccessfully unsuccessfulness unsuccessive unsuccessively unsuccessiveness unsuccinct unsuccorable unsuccored unsucculent unsuccumbing unsucked unsuckled unsued unsufferable unsufferableness unsufferably unsuffered unsuffering unsufficed unsufficience unsufficiency unsufficient unsufficiently unsufficing unsufficingness unsufflated unsuffocate unsuffocated unsuffocative unsuffused unsugared unsugary unsuggested unsuggestedness unsuggestive unsuggestiveness unsuit unsuitability unsuitable unsuitableness unsuitably unsuited unsuiting unsulky unsullen unsulliable unsullied unsulliedly unsulliedness unsulphonated unsulphureous unsulphurized unsultry unsummable unsummarized unsummed unsummered unsummerlike unsummerly unsummonable unsummoned unsumptuary unsumptuous unsun unsunburned unsundered unsung unsunk unsunken unsunned unsunny unsuperable unsuperannuated unsupercilious unsuperficial unsuperfluous unsuperior unsuperlative unsupernatural unsupernaturalize unsupernaturalized unsuperscribed unsuperseded unsuperstitious unsupervised unsupervisedly unsupped unsupplantable unsupplanted unsupple unsuppled unsupplemented unsuppliable unsupplicated unsupplied unsupportable unsupportableness unsupportably unsupported unsupportedly unsupportedness unsupporting unsupposable unsupposed unsuppressed unsuppressible unsuppressibly unsuppurated unsuppurative unsupreme unsurcharge unsurcharged unsure unsurfaced unsurfeited unsurfeiting unsurgical unsurging unsurmised unsurmising unsurmountable unsurmountableness unsurmountably unsurmounted unsurnamed unsurpassable unsurpassableness unsurpassably unsurpassed unsurplice unsurpliced unsurprised unsurprising unsurrendered unsurrendering unsurrounded unsurveyable unsurveyed unsurvived unsurviving unsusceptibility unsusceptible unsusceptibleness unsusceptibly unsusceptive unsuspectable unsuspectably unsuspected unsuspectedly unsuspectedness unsuspectful unsuspectfulness unsuspectible unsuspecting unsuspectingly unsuspectingness unsuspective unsuspended unsuspicion unsuspicious unsuspiciously unsuspiciousness unsustainable unsustained unsustaining unsutured unswabbed unswaddle unswaddled unswaddling unswallowable unswallowed unswanlike unswapped unswarming unswathable unswathe unswathed unswathing unswayable unswayed unswayedness unswaying unswear unswearing unsweat unsweated unsweating unsweepable unsweet unsweeten unsweetened unsweetenedness unsweetly unsweetness unswell unswelled unswelling unsweltered unswept unswervable unswerved unswerving unswervingly unswilled unswing unswingled unswitched unswivel unswollen unswooning unsworn unswung unsyllabic unsyllabled unsyllogistical unsymbolic unsymbolical unsymbolically unsymbolicalness unsymbolized unsymmetrical unsymmetrically unsymmetricalness unsymmetrized unsymmetry unsympathetic unsympathetically unsympathizability unsympathizable unsympathized unsympathizing unsympathizingly unsympathy unsymphonious unsymptomatic unsynchronized unsynchronous unsyncopated unsyndicated unsynonymous unsyntactical unsynthetic unsyringed unsystematic unsystematical unsystematically unsystematized unsystematizedly unsystematizing unsystemizable untabernacled untabled untabulated untack untacked untacking untackle untackled untactful untactfully untactfulness untagged untailed untailorlike untailorly untaint untaintable untainted untaintedly untaintedness untainting untakable untakableness untakeable untakeableness untaken untaking untalented untalkative untalked untalking untall untallied untallowed untamable untamableness untame untamed untamedly untamedness untamely untameness untampered untangential untangibility untangible untangibleness untangibly untangle untangled untangling untanned untantalized untantalizing untap untaped untapered untapering untapestried untappable untapped untar untarnishable untarnished untarred untarried untarrying untartarized untasked untasseled untastable untaste untasteable untasted untasteful untastefully untastefulness untasting untasty untattered untattooed untaught untaughtness untaunted untaut untautological untawdry untawed untax untaxable untaxed untaxing unteach unteachable unteachableness unteachably unteacherlike unteaching unteam unteamed unteaming untearable unteased unteasled untechnical untechnicalize untechnically untedded untedious unteem unteeming unteethed untelegraphed untell untellable untellably untelling untemper untemperamental untemperate untemperately untemperateness untempered untempering untempested untempestuous untempled untemporal untemporary untemporizing untemptability untemptable untemptably untempted untemptible untemptibly untempting untemptingly untemptingness untenability untenable untenableness untenably untenacious untenacity untenant untenantable untenantableness untenanted untended untender untendered untenderly untenderness untenible untenibleness untenibly untense untent untentaculate untented untentered untenty unterminable unterminableness unterminably unterminated unterminating unterraced unterrestrial unterrible unterribly unterrifiable unterrific unterrified unterrifying unterrorized untessellated untestable untestamentary untested untestifying untether untethered untethering untewed untextual unthank unthanked unthankful unthankfully unthankfulness unthanking unthatch unthatched unthaw unthawed unthawing untheatric untheatrical untheatrically untheistic unthematic untheological untheologically untheologize untheoretic untheoretical untheorizable untherapeutical unthick unthicken unthickened unthievish unthink unthinkability unthinkable unthinkableness unthinkably unthinker unthinking unthinkingly unthinkingness unthinned unthinning unthirsting unthirsty unthistle untholeable untholeably unthorn unthorny unthorough unthought unthoughted unthoughtedly unthoughtful unthoughtfully unthoughtfulness unthoughtlike unthrall unthralled unthrashed unthread unthreadable unthreaded unthreading unthreatened unthreatening unthreshed unthrid unthridden unthrift unthriftihood unthriftily unthriftiness unthriftlike unthrifty unthrilled unthrilling unthriven unthriving unthrivingly unthrivingness unthrob unthrone unthroned unthronged unthroning unthrottled unthrowable unthrown unthrushlike unthrust unthumbed unthumped unthundered unthwacked unthwarted untiaraed unticketed untickled untidal untidily untidiness untidy untie untied untight untighten untightness until untile untiled untill untillable untilled untilling untilt untilted untilting untimbered untimed untimedness untimeliness untimely untimeous untimeously untimesome untimorous untin untinct untinctured untine untinged untinkered untinned untinseled untinted untippable untipped untippled untipt untirability untirable untire untired untiredly untiring untiringly untissued untithability untithable untithed untitled untittering untitular unto untoadying untoasted untogaed untoggle untoggler untoiled untoileted untoiling untold untolerable untolerableness untolerably untolerated untomb untombed untonality untone untoned untongued untonsured untooled untooth untoothed untoothsome untoothsomeness untop untopographical untopped untopping untormented untorn untorpedoed untorpid untorrid untortuous untorture untortured untossed untotaled untotalled untottering untouch untouchability untouchable untouchableness untouchably untouched untouchedness untouching untough untoured untouristed untoward untowardliness untowardly untowardness untowered untown untownlike untrace untraceable untraceableness untraceably untraced untraceried untracked untractability untractable untractableness untractably untractarian untractible untractibleness untradeable untraded untradesmanlike untrading untraditional untraduced untraffickable untrafficked untragic untragical untrailed untrain untrainable untrained untrainedly untrainedness untraitored untraitorous untrammed untrammeled untrammeledness untramped untrampled untrance untranquil untranquilized untranquillize untranquillized untransacted untranscended untranscendental untranscribable untranscribed untransferable untransferred untransfigured untransfixed untransformable untransformed untransforming untransfused untransfusible untransgressed untransient untransitable untransitive untransitory untranslatability untranslatable untranslatableness untranslatably untranslated untransmigrated untransmissible untransmitted untransmutable untransmuted untransparent untranspassable untranspired untranspiring untransplanted untransportable untransported untransposed untransubstantiated untrappable untrapped untrashed untravelable untraveled untraveling untravellable untravelling untraversable untraversed untravestied untreacherous untread untreadable untreading untreasonable untreasure untreasured untreatable untreatableness untreatably untreated untreed untrekked untrellised untrembling untremblingly untremendous untremulous untrenched untrepanned untrespassed untrespassing untress untressed untriable untribal untributary untriced untrickable untricked untried untrifling untrig untrigonometrical untrill untrim untrimmable untrimmed untrimmedness untrinitarian untripe untrippable untripped untripping untrite untriturated untriumphable untriumphant untriumphed untrochaic untrod untrodden untroddenness untrolled untrophied untropical untrotted untroublable untrouble untroubled untroubledly untroubledness untroublesome untroublesomeness untrounced untrowed untruant untruck untruckled untruckling untrue untrueness untruism untruly untrumped untrumpeted untrumping untrundled untrunked untruss untrussed untrusser untrussing untrust untrustably untrusted untrustful untrustiness untrusting untrustworthily untrustworthiness untrustworthy untrusty untruth untruther untruthful untruthfully untruthfulness untrying untubbed untuck untucked untuckered untucking untufted untugged untumbled untumefied untumid untumultuous untunable untunableness untunably untune untuneable untuneableness untuneably untuned untuneful untunefully untunefulness untuning untunneled untupped unturbaned unturbid unturbulent unturf unturfed unturgid unturn unturnable unturned unturning unturpentined unturreted untusked untutelar untutored untutoredly untutoredness untwilled untwinable untwine untwineable untwined untwining untwinkling untwinned untwirl untwirled untwirling untwist untwisted untwister untwisting untwitched untying untypical untypically untyrannic untyrannical untyrantlike untz unubiquitous unugly unulcerated unultra unumpired ununanimity ununanimous ununanimously ununderstandable ununderstandably ununderstanding ununderstood unundertaken unundulatory ununifiable ununified ununiform ununiformed ununiformity ununiformly ununiformness ununitable ununitableness ununitably ununited ununiting ununiversity ununiversitylike unupbraiding unupbraidingly unupholstered unupright unuprightly unuprightness unupset unupsettable unurban unurbane unurged unurgent unurging unurn unurned unusable unusableness unusably unuse unused unusedness unuseful unusefully unusefulness unushered unusual unusuality unusually unusualness unusurious unusurped unusurping unutilizable unutterability unutterable unutterableness unutterably unuttered unuxorial unuxorious unvacant unvaccinated unvacillating unvailable unvain unvaleted unvaletudinary unvaliant unvalid unvalidated unvalidating unvalidity unvalidly unvalidness unvalorous unvaluable unvaluableness unvaluably unvalue unvalued unvamped unvanishing unvanquishable unvanquished unvantaged unvaporized unvariable unvariableness unvariably unvariant unvaried unvariedly unvariegated unvarnished unvarnishedly unvarnishedness unvarying unvaryingly unvaryingness unvascular unvassal unvatted unvaulted unvaulting unvaunted unvaunting unvauntingly unveering unveil unveiled unveiledly unveiledness unveiler unveiling unveilment unveined unvelvety unvendable unvendableness unvended unvendible unvendibleness unveneered unvenerable unvenerated unvenereal unvenged unveniable unvenial unvenom unvenomed unvenomous unventable unvented unventilated unventured unventurous unvenued unveracious unveracity unverbalized unverdant unverdured unveridical unverifiable unverifiableness unverifiably unverified unverifiedness unveritable unverity unvermiculated unverminous unvernicular unversatile unversed unversedly unversedness unversified unvertical unvessel unvesseled unvest unvested unvetoed unvexed unviable unvibrated unvibrating unvicar unvicarious unvicariously unvicious unvictimized unvictorious unvictualed unvictualled unviewable unviewed unvigilant unvigorous unvigorously unvilified unvillaged unvindicated unvindictive unvindictively unvindictiveness unvinous unvintaged unviolable unviolated unviolenced unviolent unviolined unvirgin unvirginal unvirginlike unvirile unvirility unvirtue unvirtuous unvirtuously unvirtuousness unvirulent unvisible unvisibleness unvisibly unvision unvisionary unvisioned unvisitable unvisited unvisor unvisored unvisualized unvital unvitalized unvitalness unvitiated unvitiatedly unvitiatedness unvitrescibility unvitrescible unvitrifiable unvitrified unvitriolized unvituperated unvivacious unvivid unvivified unvizard unvizarded unvocal unvocalized unvociferous unvoice unvoiced unvoiceful unvoicing unvoidable unvoided unvolatile unvolatilize unvolatilized unvolcanic unvolitioned unvoluminous unvoluntarily unvoluntariness unvoluntary unvolunteering unvoluptuous unvomited unvoracious unvote unvoted unvoting unvouched unvouchedly unvouchedness unvouchsafed unvowed unvoweled unvoyageable unvoyaging unvulcanized unvulgar unvulgarize unvulgarized unvulgarly unvulnerable unwadable unwadded unwadeable unwaded unwading unwafted unwaged unwagered unwaggable unwaggably unwagged unwailed unwailing unwainscoted unwaited unwaiting unwaked unwakeful unwakefulness unwakened unwakening unwaking unwalkable unwalked unwalking unwall unwalled unwallet unwallowed unwan unwandered unwandering unwaning unwanted unwanton unwarbled unware unwarely unwareness unwarily unwariness unwarlike unwarlikeness unwarm unwarmable unwarmed unwarming unwarn unwarned unwarnedly unwarnedness unwarnished unwarp unwarpable unwarped unwarping unwarrant unwarrantability unwarrantable unwarrantableness unwarrantably unwarranted unwarrantedly unwarrantedness unwary unwashable unwashed unwashedness unwassailing unwastable unwasted unwasteful unwastefully unwasting unwastingly unwatchable unwatched unwatchful unwatchfully unwatchfulness unwatching unwater unwatered unwaterlike unwatermarked unwatery unwattled unwaved unwaverable unwavered unwavering unwaveringly unwaving unwax unwaxed unwayed unwayward unweaken unweakened unweal unwealsomeness unwealthy unweaned unweapon unweaponed unwearable unweariability unweariable unweariableness unweariably unwearied unweariedly unweariedness unwearily unweariness unwearing unwearisome unwearisomeness unweary unwearying unwearyingly unweathered unweatherly unweatherwise unweave unweaving unweb unwebbed unwebbing unwed unwedded unweddedly unweddedness unwedge unwedgeable unwedged unweeded unweel unweelness unweened unweeping unweeting unweetingly unweft unweighable unweighed unweighing unweight unweighted unweighty unwelcome unwelcomed unwelcomely unwelcomeness unweld unweldable unwelded unwell unwellness unwelted unwept unwestern unwesternized unwet unwettable unwetted unwheedled unwheel unwheeled unwhelmed unwhelped unwhetted unwhig unwhiglike unwhimsical unwhining unwhip unwhipped unwhirled unwhisked unwhiskered unwhisperable unwhispered unwhispering unwhistled unwhite unwhited unwhitened unwhitewashed unwholesome unwholesomely unwholesomeness unwidened unwidowed unwield unwieldable unwieldily unwieldiness unwieldly unwieldy unwifed unwifelike unwifely unwig unwigged unwild unwilily unwiliness unwill unwilled unwillful unwillfully unwillfulness unwilling unwillingly unwillingness unwilted unwilting unwily unwincing unwincingly unwind unwindable unwinding unwindingly unwindowed unwindy unwingable unwinged unwinking unwinkingly unwinnable unwinning unwinnowed unwinsome unwinter unwintry unwiped unwire unwired unwisdom unwise unwisely unwiseness unwish unwished unwishful unwishing unwist unwistful unwitch unwitched unwithdrawable unwithdrawing unwithdrawn unwitherable unwithered unwithering unwithheld unwithholden unwithholding unwithstanding unwithstood unwitless unwitnessed unwitted unwittily unwitting unwittingly unwittingness unwitty unwive unwived unwoeful unwoful unwoman unwomanish unwomanize unwomanized unwomanlike unwomanliness unwomanly unwomb unwon unwonder unwonderful unwondering unwonted unwontedly unwontedness unwooded unwooed unwoof unwooly unwordable unwordably unwordily unwordy unwork unworkability unworkable unworkableness unworkably unworked unworkedness unworker unworking unworkmanlike unworkmanly unworld unworldliness unworldly unwormed unwormy unworn unworried unworriedly unworriedness unworshiped unworshipful unworshiping unworshipped unworshipping unworth unworthily unworthiness unworthy unwotting unwound unwoundable unwoundableness unwounded unwoven unwrangling unwrap unwrapped unwrapper unwrapping unwrathful unwrathfully unwreaked unwreathe unwreathed unwreathing unwrecked unwrench unwrenched unwrested unwrestedly unwresting unwrestled unwretched unwriggled unwrinkle unwrinkleable unwrinkled unwrit unwritable unwrite unwriting unwritten unwronged unwrongful unwrought unwrung unyachtsmanlike unyeaned unyearned unyearning unyielded unyielding unyieldingly unyieldingness unyoke unyoked unyoking unyoung unyouthful unyouthfully unze unzealous unzealously unzealousness unzen unzephyrlike unzone unzoned up upaisle upaithric upalley upalong upanishadic upapurana uparch uparching uparise uparm uparna upas upattic upavenue upbank upbar upbay upbear upbearer upbeat upbelch upbelt upbend upbid upbind upblacken upblast upblaze upblow upboil upbolster upbolt upboost upborne upbotch upboulevard upbound upbrace upbraid upbraider upbraiding upbraidingly upbray upbreak upbred upbreed upbreeze upbrighten upbrim upbring upbristle upbroken upbrook upbrought upbrow upbubble upbuild upbuilder upbulging upbuoy upbuoyance upburn upburst upbuy upcall upcanal upcanyon upcarry upcast upcatch upcaught upchamber upchannel upchariot upchimney upchoke upchuck upcity upclimb upclose upcloser upcoast upcock upcoil upcolumn upcome upcoming upconjure upcountry upcourse upcover upcrane upcrawl upcreek upcreep upcrop upcrowd upcry upcurl upcurrent upcurve upcushion upcut updart update updeck updelve updive updo updome updraft updrag updraw updrink updry upeat upend upeygan upfeed upfield upfill upfingered upflame upflare upflash upflee upflicker upfling upfloat upflood upflow upflower upflung upfly upfold upfollow upframe upfurl upgale upgang upgape upgather upgaze upget upgird upgirt upgive upglean upglide upgo upgorge upgrade upgrave upgrow upgrowth upgully upgush uphand uphang upharbor upharrow uphasp upheal upheap uphearted upheaval upheavalist upheave upheaven upheld uphelm uphelya upher uphill uphillward uphoard uphoist uphold upholden upholder upholster upholstered upholsterer upholsteress upholsterous upholstery upholsterydom upholstress uphung uphurl upisland upjerk upjet upkeep upkindle upknell upknit upla upladder uplaid uplake upland uplander uplandish uplane uplay uplead upleap upleg uplick uplift upliftable uplifted upliftedly upliftedness uplifter uplifting upliftingly upliftingness upliftitis upliftment uplight uplimb uplimber upline uplock uplong uplook uplooker uploom uploop uplying upmaking upmast upmix upmost upmount upmountain upmove upness upo upon uppard uppent upper upperch uppercut upperer upperest upperhandism uppermore uppermost uppers uppertendom uppile upping uppish uppishly uppishness uppity upplough upplow uppluck uppoint uppoise uppop uppour uppowoc upprick upprop uppuff uppull uppush upquiver upraisal upraise upraiser upreach uprear uprein uprend uprender uprest uprestore uprid upridge upright uprighteous uprighteously uprighteousness uprighting uprightish uprightly uprightness uprights uprip uprisal uprise uprisement uprisen upriser uprising uprist uprive upriver uproad uproar uproariness uproarious uproariously uproariousness uproom uproot uprootal uprooter uprose uprouse uproute uprun uprush upsaddle upscale upscrew upscuddle upseal upseek upseize upsend upset upsetment upsettable upsettal upsetted upsetter upsetting upsettingly upsey upshaft upshear upsheath upshoot upshore upshot upshoulder upshove upshut upside upsides upsighted upsiloid upsilon upsilonism upsit upsitten upsitting upslant upslip upslope upsmite upsnatch upsoak upsoar upsolve upspeak upspear upspeed upspew upspin upspire upsplash upspout upspread upspring upsprinkle upsprout upspurt upstaff upstage upstair upstairs upstamp upstand upstander upstanding upstare upstart upstartism upstartle upstartness upstate upstater upstaunch upstay upsteal upsteam upstem upstep upstick upstir upstraight upstream upstreamward upstreet upstretch upstrike upstrive upstroke upstruggle upsuck upsun upsup upsurge upsurgence upswallow upswarm upsway upsweep upswell upswing uptable uptake uptaker uptear uptemper uptend upthrow upthrust upthunder uptide uptie uptill uptilt uptorn uptoss uptower uptown uptowner uptrace uptrack uptrail uptrain uptree uptrend uptrill uptrunk uptruss uptube uptuck upturn uptwined uptwist upupoid upvalley upvomit upwaft upwall upward upwardly upwardness upwards upwarp upwax upway upways upwell upwent upwheel upwhelm upwhir upwhirl upwind upwith upwork upwound upwrap upwreathe upwrench upwring upwrought upyard upyoke ur ura urachal urachovesical urachus uracil uraemic uraeus ural urali uraline uralite uralitic uralitization uralitize uralium uramido uramil uramilic uramino uran uranalysis uranate uranic uranidine uraniferous uraniid uranin uranine uraninite uranion uraniscochasma uraniscoplasty uraniscoraphy uraniscorrhaphy uranism uranist uranite uranitic uranium uranocircite uranographer uranographic uranographical uranographist uranography uranolatry uranolite uranological uranology uranometria uranometrical uranometry uranophane uranophotography uranoplastic uranoplasty uranoplegia uranorrhaphia uranorrhaphy uranoschisis uranoschism uranoscope uranoscopia uranoscopic uranoscopy uranospathite uranosphaerite uranospinite uranostaphyloplasty uranostaphylorrhaphy uranotantalite uranothallite uranothorite uranotil uranous uranyl uranylic urao urare urari urase urataemia urate uratemia uratic uratoma uratosis uraturia urazine urazole urbacity urbainite urban urbane urbanely urbaneness urbanism urbanist urbanite urbanity urbanization urbanize urbarial urbian urbic urbicolous urbification urbify urbinate urceiform urceolar urceolate urceole urceoli urceolus urceus urchin urchiness urchinlike urchinly urd urde urdee ure urea ureal ureameter ureametry urease urechitin urechitoxin uredema uredine uredineal uredineous uredinia uredinial urediniospore urediniosporic uredinium uredinoid uredinologist uredinology uredinous uredo uredosorus uredospore uredosporic uredosporiferous uredosporous uredostage ureic ureid ureide ureido uremia uremic urent ureometer ureometry ureosecretory uresis uretal ureter ureteral ureteralgia uretercystoscope ureterectasia ureterectasis ureterectomy ureteric ureteritis ureterocele ureterocervical ureterocolostomy ureterocystanastomosis ureterocystoscope ureterocystostomy ureterodialysis ureteroenteric ureteroenterostomy ureterogenital ureterogram ureterograph ureterography ureterointestinal ureterolith ureterolithiasis ureterolithic ureterolithotomy ureterolysis ureteronephrectomy ureterophlegma ureteroplasty ureteroproctostomy ureteropyelitis ureteropyelogram ureteropyelography ureteropyelonephritis ureteropyelostomy ureteropyosis ureteroradiography ureterorectostomy ureterorrhagia ureterorrhaphy ureterosalpingostomy ureterosigmoidostomy ureterostegnosis ureterostenoma ureterostenosis ureterostoma ureterostomy ureterotomy ureterouteral ureterovaginal ureterovesical urethan urethane urethra urethrae urethragraph urethral urethralgia urethrameter urethrascope urethratome urethratresia urethrectomy urethremphraxis urethreurynter urethrism urethritic urethritis urethroblennorrhea urethrobulbar urethrocele urethrocystitis urethrogenital urethrogram urethrograph urethrometer urethropenile urethroperineal urethrophyma urethroplastic urethroplasty urethroprostatic urethrorectal urethrorrhagia urethrorrhaphy urethrorrhea urethrorrhoea urethroscope urethroscopic urethroscopical urethroscopy urethrosexual urethrospasm urethrostaxis urethrostenosis urethrostomy urethrotome urethrotomic urethrotomy urethrovaginal urethrovesical urethylan uretic ureylene urf urfirnis urge urgence urgency urgent urgently urgentness urger urging urgingly urheen urial uric uricacidemia uricaciduria uricaemia uricaemic uricemia uricemic uricolysis uricolytic uridrosis urinaemia urinal urinalist urinalysis urinant urinarium urinary urinate urination urinative urinator urine urinemia uriniferous uriniparous urinocryoscopy urinogenital urinogenitary urinogenous urinologist urinology urinomancy urinometer urinometric urinometry urinoscopic urinoscopist urinoscopy urinose urinosexual urinous urinousness urite urlar urled urling urluch urman urn urna urnae urnal urnflower urnful urning urningism urnism urnlike urnmaker uroacidimeter uroazotometer urobenzoic urobilin urobilinemia urobilinogen urobilinogenuria urobilinuria urocanic urocele urocerid urochloralic urochord urochordal urochordate urochrome urochromogen urocyanogen urocyst urocystic urocystitis urodaeum urodelan urodele urodelous urodialysis urodynia uroedema uroerythrin urofuscohematin urogaster urogastric urogenic urogenital urogenitary urogenous uroglaucin urogram urography urogravimeter urohematin urohyal urolagnia uroleucic uroleucinic urolith urolithiasis urolithic urolithology urologic urological urologist urology urolutein urolytic uromancy uromantia uromantist uromelanin uromelus uromere uromeric urometer uronephrosis uronic uronology uropatagium urophanic urophanous urophein urophthisis uroplania uropod uropodal uropodous uropoetic uropoiesis uropoietic uroporphyrin uropsile uroptysis uropygial uropygium uropyloric urorosein urorrhagia urorrhea urorubin urosaccharometry urosacral uroschesis uroscopic uroscopist uroscopy urosepsis uroseptic urosis urosomatic urosome urosomite urosomitic urostea urostealith urostegal urostege urostegite urosteon urosternite urosthene urosthenic urostylar urostyle urotoxia urotoxic urotoxicity urotoxin urotoxy uroxanate uroxanic uroxanthin uroxin urradhus urrhodin urrhodinic ursal ursicidal ursicide ursiform ursigram ursine ursoid ursolic urson ursone ursuk urtica urticaceous urticant urticaria urticarial urticarious urticate urticating urtication urticose urtite urubu urucu urucuri uruisg urunday urus urushi urushic urushinic urushiol urushiye urva us usability usable usableness usage usager usance usar usara usaron usation use used usedly usedness usednt usee useful usefullish usefully usefulness usehold useless uselessly uselessness usent user ush ushabti ushabtiu usher usherance usherdom usherer usheress usherette usherian usherism usherless ushership usings usitate usitative usnea usneaceous usneoid usnic usninic usque usquebaugh usself ussels usselven ussingite ust uster ustilaginaceous ustilagineous ustion ustorious ustulate ustulation usual usualism usually usualness usuary usucapient usucapion usucapionary usucapt usucaptable usucaption usucaptor usufruct usufructuary usure usurer usurerlike usuress usurious usuriously usuriousness usurp usurpation usurpative usurpatively usurpatory usurpature usurpedly usurper usurpership usurping usurpingly usurpment usurpor usurpress usury usward uswards ut uta utahite utai utas utch utchy utees utensil uteralgia uterectomy uteri uterine uteritis uteroabdominal uterocele uterocervical uterocystotomy uterofixation uterogestation uterogram uterography uterointestinal uterolith uterology uteromania uterometer uteroovarian uteroparietal uteropelvic uteroperitoneal uteropexia uteropexy uteroplacental uteroplasty uterosacral uterosclerosis uteroscope uterotomy uterotonic uterotubal uterovaginal uteroventral uterovesical uterus utfangenethef utfangethef utfangthef utfangthief utick utile utilitarian utilitarianism utilitarianist utilitarianize utilitarianly utility utilizable utilization utilize utilizer utinam utmost utmostness utopia utopian utopianism utopianist utopianizer utopiast utopism utopist utopistic utopographer utraquist utraquistic utricle utricul utricular utriculate utriculiferous utriculiform utriculitis utriculoid utriculoplastic utriculoplasty utriculosaccular utriculose utriculus utriform utrubi utrum utsuk utter utterability utterable utterableness utterance utterancy utterer utterless utterly uttermost utterness utu utum uturuncu uva uval uvalha uvanite uvarovite uvate uvea uveal uveitic uveitis uveous uvic uvid uviol uvitic uvitinic uvito uvitonic uvrou uvula uvulae uvular uvularly uvulitis uvuloptosis uvulotome uvulotomy uvver uxorial uxoriality uxorially uxoricidal uxoricide uxorious uxoriously uxoriousness uzan uzara uzarin uzaron v vaagmer vaalite vacabond vacancy vacant vacanthearted vacantheartedness vacantly vacantness vacantry vacatable vacate vacation vacational vacationer vacationist vacationless vacatur vaccary vaccenic vaccicide vaccigenous vaccina vaccinable vaccinal vaccinate vaccination vaccinationist vaccinator vaccinatory vaccine vaccinee vaccinella vaccinia vacciniaceous vaccinial vaccinifer vacciniform vacciniola vaccinist vaccinium vaccinization vaccinogenic vaccinogenous vaccinoid vaccinophobia vaccinotherapy vache vachette vacillancy vacillant vacillate vacillating vacillatingly vacillation vacillator vacillatory vacoa vacona vacoua vacouf vacual vacuate vacuation vacuefy vacuist vacuity vacuolar vacuolary vacuolate vacuolated vacuolation vacuole vacuolization vacuome vacuometer vacuous vacuously vacuousness vacuum vacuuma vacuumize vade vadimonium vadimony vadium vadose vady vag vagabond vagabondage vagabondager vagabondia vagabondish vagabondism vagabondismus vagabondize vagabondizer vagabondry vagal vagarian vagarious vagariously vagarish vagarisome vagarist vagaristic vagarity vagary vagas vage vagiform vagile vagina vaginal vaginalectomy vaginaless vaginalitis vaginant vaginate vaginated vaginectomy vaginervose vaginicoline vaginicolous vaginiferous vaginipennate vaginismus vaginitis vaginoabdominal vaginocele vaginodynia vaginofixation vaginolabial vaginometer vaginomycosis vaginoperineal vaginoperitoneal vaginopexy vaginoplasty vaginoscope vaginoscopy vaginotome vaginotomy vaginovesical vaginovulvar vaginula vaginulate vaginule vagitus vagoaccessorius vagodepressor vagoglossopharyngeal vagogram vagolysis vagosympathetic vagotomize vagotomy vagotonia vagotonic vagotropic vagotropism vagrance vagrancy vagrant vagrantism vagrantize vagrantlike vagrantly vagrantness vagrate vagrom vague vaguely vagueness vaguish vaguity vagulous vagus vahine vail vailable vain vainful vainglorious vaingloriously vaingloriousness vainglory vainly vainness vair vairagi vaire vairy vaivode vajra vajrasana vakass vakia vakil vakkaliga valance valanced valanche valbellite vale valediction valedictorian valedictorily valedictory valence valencianite valency valent valentine valentinite valeral valeraldehyde valeramide valerate valerian valerianaceous valerianate valeric valerin valerolactone valerone valeryl valerylene valet valeta valetage valetdom valethood valetism valetry valetudinarian valetudinarianism valetudinariness valetudinarist valetudinarium valetudinary valeur valeward valgoid valgus valhall vali valiance valiancy valiant valiantly valiantness valid validate validation validatory validification validity validly validness valine valise valiseful valiship vall vallancy vallar vallary vallate vallated vallation vallecula vallecular valleculate vallevarite valley valleyful valleyite valleylet valleylike valleyward valleywise vallicula vallicular vallidom vallis vallisneriaceous vallum valonia valoniaceous valor valorization valorize valorous valorously valorousness valse valsoid valuable valuableness valuably valuate valuation valuational valuator value valued valueless valuelessness valuer valuta valva valval valvate valve valved valveless valvelet valvelike valveman valviferous valviform valvotomy valvula valvular valvulate valvule valvulitis valvulotome valvulotomy valyl valylene vambrace vambraced vamfont vammazsa vamoose vamp vamped vamper vamphorn vampire vampireproof vampiric vampirish vampirism vampirize vamplate vampproof van vanadate vanadiate vanadic vanadiferous vanadinite vanadium vanadosilicate vanadous vanadyl vanaprastha vancourier vandalish vandalism vandalistic vandalization vandalize vandalroot vane vaned vaneless vanelike vanessian vanfoss vang vangee vangeli vanglo vanguard vanilla vanillal vanillaldehyde vanillate vanille vanillery vanillic vanillin vanillinic vanillism vanilloes vanillon vanilloyl vanillyl vanish vanisher vanishing vanishingly vanishment vanitarianism vanitied vanity vanjarrah vanman vanmost vanner vannerman vannet vanquish vanquishable vanquisher vanquishment vansire vantage vantageless vantbrace vantbrass vanward vapid vapidism vapidity vapidly vapidness vapocauterization vapographic vapography vapor vaporability vaporable vaporarium vaporary vaporate vapored vaporer vaporescence vaporescent vaporiferous vaporiferousness vaporific vaporiform vaporimeter vaporing vaporingly vaporish vaporishness vaporium vaporizable vaporization vaporize vaporizer vaporless vaporlike vaporograph vaporographic vaporose vaporoseness vaporosity vaporous vaporously vaporousness vaportight vapory vapulary vapulate vapulation vapulatory vara varahan varan varanid vardapet vardy vare varec vareheaded vareuse vargueno vari variability variable variableness variably variance variancy variant variate variation variational variationist variatious variative variatively variator varical varicated varication varicella varicellar varicellate varicellation varicelliform varicelloid varicellous varices variciform varicoblepharon varicocele varicoid varicolored varicolorous varicose varicosed varicoseness varicosis varicosity varicotomy varicula varied variedly variegate variegated variegation variegator varier varietal varietally varietism varietist variety variform variformed variformity variformly varigradation variocoupler variola variolar variolate variolation variole variolic varioliform variolite variolitic variolitization variolization varioloid variolous variolovaccine variolovaccinia variometer variorum variotinted various variously variousness variscite varisse varix varlet varletaille varletess varletry varletto varment varna varnashrama varnish varnished varnisher varnishing varnishlike varnishment varnishy varnpliktige varnsingite varsha varsity varsoviana varus varve varved vary varyingly vas vasa vasal vascular vascularity vascularization vascularize vascularly vasculated vasculature vasculiferous vasculiform vasculitis vasculogenesis vasculolymphatic vasculomotor vasculose vasculum vase vasectomize vasectomy vaseful vaselet vaselike vasemaker vasemaking vasewise vasework vashegyite vasicentric vasicine vasifactive vasiferous vasiform vasoconstricting vasoconstriction vasoconstrictive vasoconstrictor vasocorona vasodentinal vasodentine vasodilatation vasodilatin vasodilating vasodilation vasodilator vasoepididymostomy vasofactive vasoformative vasoganglion vasohypertonic vasohypotonic vasoinhibitor vasoinhibitory vasoligation vasoligature vasomotion vasomotor vasomotorial vasomotoric vasomotory vasoneurosis vasoparesis vasopressor vasopuncture vasoreflex vasorrhaphy vasosection vasospasm vasospastic vasostimulant vasostomy vasotomy vasotonic vasotribe vasotripsy vasotrophic vasovesiculectomy vasquine vassal vassalage vassaldom vassaless vassalic vassalism vassality vassalize vassalless vassalry vassalship vast vastate vastation vastidity vastily vastiness vastitude vastity vastly vastness vasty vasu vat vatful vatic vatically vaticanal vaticanic vaticanical vaticide vaticinal vaticinant vaticinate vaticination vaticinator vaticinatory vaticinatress vaticinatrix vatmaker vatmaking vatman vatter vau vaucheriaceous vaudeville vaudevillian vaudevillist vaudy vaugnerite vault vaulted vaultedly vaulter vaulting vaultlike vaulty vaunt vauntage vaunted vaunter vauntery vauntful vauntiness vaunting vauntingly vauntmure vaunty vauquelinite vauxite vavasor vavasory vaward veal vealer vealiness veallike vealskin vealy vectigal vection vectis vectograph vectographic vector vectorial vectorially vecture vedana vedette vedika vedro veduis vee veen veep veer veerable veeringly veery vegasite vegeculture vegetability vegetable vegetablelike vegetablewise vegetablize vegetably vegetal vegetalcule vegetality vegetant vegetarian vegetarianism vegetate vegetation vegetational vegetationless vegetative vegetatively vegetativeness vegete vegeteness vegetism vegetive vegetivorous vegetoalkali vegetoalkaline vegetoalkaloid vegetoanimal vegetobituminous vegetocarbonaceous vegetomineral vehemence vehemency vehement vehemently vehicle vehicular vehicularly vehiculary vehiculate vehiculation vehiculatory vei veigle veil veiled veiledly veiledness veiler veiling veilless veillike veilmaker veilmaking veily vein veinage veinal veinbanding veined veiner veinery veininess veining veinless veinlet veinous veinstone veinstuff veinule veinulet veinwise veinwork veiny vejoces vela velal velamen velamentous velamentum velar velardenite velaric velarium velarize velary velate velated velation velatura veldcraft veldman veldschoen veldt veldtschoen velellidous velic veliferous veliform veliger veligerous velitation vell vellala velleda velleity vellicate vellication vellicative vellinch vellon vellosine velloziaceous vellum vellumy velo velociman velocimeter velocious velociously velocipedal velocipede velocipedean velocipedic velocitous velocity velodrome velometer velours veloutine velte velum velumen velure velutinous velveret velvet velvetbreast velveted velveteen velveteened velvetiness velveting velvetleaf velvetlike velvetry velvetseed velvetweed velvetwork velvety venada venal venality venalization venalize venally venalness venanzite venatic venatical venatically venation venational venator venatorial venatorious venatory vencola vend vendace vendee vender vendetta vendettist vendibility vendible vendibleness vendibly vendicate vending venditate venditation vendition venditor vendor vendue veneer veneerer veneering venefical veneficious veneficness veneficous venenate venenation venene veneniferous venenific venenosalivary venenous venenousness venepuncture venerability venerable venerableness venerably veneracean veneraceous veneral venerance venerant venerate veneration venerational venerative veneratively venerativeness venerator venereal venerealness venereologist venereology venerer venerial veneriform venery venesect venesection venesector venesia venezolano vengeable vengeance vengeant vengeful vengefully vengefulness vengeously venger venial veniality venially venialness venie venin veniplex venipuncture venireman venison venisonivorous venisonlike venisuture vennel venner venoatrial venoauricular venom venomed venomer venomization venomize venomly venomness venomosalivary venomous venomously venomousness venomproof venomsome venomy venosal venosclerosis venose venosinal venosity venostasis venous venously venousness vent ventage ventail venter venthole ventiduct ventifact ventil ventilable ventilagin ventilate ventilating ventilation ventilative ventilator ventilatory ventless ventometer ventose ventoseness ventosity ventpiece ventrad ventral ventrally ventralmost ventralward ventric ventricle ventricolumna ventricolumnar ventricornu ventricornual ventricose ventricoseness ventricosity ventricous ventricular ventricularis ventriculite ventriculitic ventriculogram ventriculography ventriculoscopy ventriculose ventriculous ventriculus ventricumbent ventriduct ventrifixation ventrilateral ventrilocution ventriloqual ventriloqually ventriloque ventriloquial ventriloquially ventriloquism ventriloquist ventriloquistic ventriloquize ventriloquous ventriloquously ventriloquy ventrimesal ventrimeson ventrine ventripotency ventripotent ventripotential ventripyramid ventroaxial ventroaxillary ventrocaudal ventrocystorrhaphy ventrodorsad ventrodorsal ventrodorsally ventrofixation ventrohysteropexy ventroinguinal ventrolateral ventrolaterally ventromedial ventromedian ventromesal ventromesial ventromyel ventroposterior ventroptosia ventroptosis ventroscopy ventrose ventrosity ventrosuspension ventrotomy venture venturer venturesome venturesomely venturesomeness venturine venturous venturously venturousness venue venula venular venule venulose venust venville vera veracious veraciously veraciousness veracity veranda verandaed verascope veratral veratralbine veratraldehyde veratrate veratria veratric veratridine veratrine veratrinize veratrize veratroidine veratrole veratroyl veratryl veratrylidene verb verbal verbalism verbalist verbality verbalization verbalize verbalizer verbally verbarian verbarium verbasco verbascose verbate verbatim verbena verbenaceous verbenalike verbenalin verbenate verbene verbenone verberate verberation verberative verbiage verbicide verbiculture verbid verbification verbify verbigerate verbigeration verbigerative verbile verbless verbolatry verbomania verbomaniac verbomotor verbose verbosely verboseness verbosity verbous verby verchok verd verdancy verdant verdantly verdantness verdea verdelho verderer verderership verdet verdict verdigris verdigrisy verdin verditer verdoy verdugoship verdun verdure verdured verdureless verdurous verdurousness verecund verecundity verecundness verek veretilliform veretillum verge vergeboard vergence vergency vergent vergentness verger vergeress vergerism vergerless vergership vergery vergi vergiform verglas vergobret veri veridic veridical veridicality veridically veridicalness veridicous veridity verifiability verifiable verifiableness verifiably verificate verification verificative verificatory verifier verify verily verine verisimilar verisimilarly verisimilitude verisimilitudinous verisimility verism verist veristic veritability veritable veritableness veritably verite veritism veritist veritistic verity verjuice vermeil vermeologist vermeology vermetid vermetidae vermian vermicelli vermicidal vermicide vermicious vermicle vermicular vermicularly vermiculate vermiculated vermiculation vermicule vermiculite vermiculose vermiculosity vermiculous vermiform vermiformis vermiformity vermiformous vermifugal vermifuge vermifugous vermigerous vermigrade vermilinguial vermilion vermilionette vermilionize vermin verminal verminate vermination verminer verminicidal verminicide verminiferous verminlike verminly verminosis verminous verminously verminousness verminproof verminy vermiparous vermiparousness vermis vermivorous vermivorousness vermix vermorel vermouth vernacle vernacular vernacularism vernacularist vernacularity vernacularization vernacularize vernacularly vernacularness vernaculate vernal vernality vernalization vernalize vernally vernant vernation vernicose vernier vernile vernility vernin vernine vernition vernoniaceous vernonin veronalism verre verrel verriculate verriculated verricule verruca verrucano verrucariaceous verrucarioid verrucated verruciferous verruciform verrucose verrucoseness verrucosis verrucosity verrucous verruculose verruga versability versable versableness versal versant versate versatile versatilely versatileness versatility versation versative verse versecraft versed verseless verselet versemaker versemaking verseman versemanship versemonger versemongering versemongery verser versesmith verset versette verseward versewright versicle versicler versicolor versicolorate versicolored versicolorous versicular versicule versifiable versifiaster versification versificator versificatory versificatrix versifier versiform versify versiloquy versine version versional versioner versionist versionize versipel verso versor verst versta versual versus vert vertebra vertebrae vertebral vertebraless vertebrally vertebrarium vertebrarterial vertebrate vertebrated vertebration vertebre vertebrectomy vertebriform vertebroarterial vertebrobasilar vertebrochondral vertebrocostal vertebrodymus vertebrofemoral vertebroiliac vertebromammary vertebrosacral vertebrosternal vertex vertibility vertible vertibleness vertical verticalism verticality vertically verticalness vertices verticil verticillary verticillaster verticillastrate verticillate verticillated verticillately verticillation verticilliaceous verticilliose verticillus verticity verticomental verticordious vertiginate vertigines vertiginous vertigo vertilinear vertimeter veruled verumontanum vervain vervainlike verve vervecine vervel verveled vervelle vervenia vervet very vesania vesanic vesbite vesicae vesical vesicant vesicate vesication vesicatory vesicle vesicoabdominal vesicocavernous vesicocele vesicocervical vesicoclysis vesicofixation vesicointestinal vesicoprostatic vesicopubic vesicorectal vesicosigmoid vesicospinal vesicotomy vesicovaginal vesicular vesicularly vesiculary vesiculase vesiculate vesiculation vesicule vesiculectomy vesiculiferous vesiculiform vesiculigerous vesiculitis vesiculobronchial vesiculocavernous vesiculopustular vesiculose vesiculotomy vesiculotubular vesiculotympanic vesiculotympanitic vesiculous vesiculus vesicupapular veskit vespacide vespal vesper vesperal vesperian vespering vespers vespertide vespertilian vespertilio vespertilionid vespertilionine vespertinal vespertine vespery vespiary vespid vespiform vespine vespoid vessel vesseled vesselful vessignon vest vestal vestalia vestalship vestee vester vestiarian vestiarium vestiary vestibula vestibular vestibulary vestibulate vestibule vestibuled vestibulospinal vestibulum vestige vestigial vestigially vestigiary vestigium vestiment vestimental vestimentary vesting vestiture vestlet vestment vestmental vestmented vestral vestralization vestrical vestrification vestrify vestry vestrydom vestryhood vestryish vestryism vestryize vestryman vestrymanly vestrymanship vestuary vestural vesture vesturer vesuvian vesuvianite vesuviate vesuvite vesuvius veszelyite vet veta vetanda vetch vetchling vetchy veteran veterancy veteraness veteranize veterinarian veterinarianism veterinary vetitive vetivene vetivenol vetiver vetiveria vetivert vetkousie veto vetoer vetoism vetoist vetoistic vetoistical vetust vetusty veuglaire veuve vex vexable vexation vexatious vexatiously vexatiousness vexatory vexed vexedly vexedness vexer vexful vexil vexillar vexillarious vexillary vexillate vexillation vexillum vexingly vexingness vext via viability viable viaduct viaggiatory viagram viagraph viajaca vial vialful vialmaker vialmaking vialogue viameter viand viander viatic viatica viatical viaticum viatometer viator viatorial viatorially vibetoite vibex vibgyor vibix vibracular vibracularium vibraculoid vibraculum vibrance vibrancy vibrant vibrantly vibraphone vibrate vibratile vibratility vibrating vibratingly vibration vibrational vibrationless vibratiuncle vibratiunculation vibrative vibrato vibrator vibratory vibrioid vibrion vibrionic vibrissa vibrissae vibrissal vibrograph vibromassage vibrometer vibromotive vibronic vibrophone vibroscope vibroscopic vibrotherapeutics viburnic viburnin vicar vicarage vicarate vicaress vicarial vicarian vicarianism vicariate vicariateship vicarious vicariously vicariousness vicarly vicarship vice vicecomes vicecomital vicegeral vicegerency vicegerent vicegerentship viceless vicelike vicenary vicennial viceregal viceregally vicereine viceroy viceroyal viceroyalty viceroydom viceroyship vicety viceversally vichyssoise vicianin vicianose vicilin vicinage vicinal vicine vicinity viciosity vicious viciously viciousness vicissitous vicissitude vicissitudinary vicissitudinous vicissitudinousness vicoite vicontiel victim victimhood victimizable victimization victimize victimizer victless victor victordom victorfish victoriate victoriatus victorine victorious victoriously victoriousness victorium victory victoryless victress victrix victrola victual victualage victualer victualing victuallership victualless victualry victuals vicuna viddui videndum video videogenic vidette vidonia vidry viduage vidual vidually viduate viduated viduation viduine viduity viduous vidya vie vielle vier vierling viertel viertelein view viewable viewably viewer viewiness viewless viewlessly viewly viewpoint viewsome viewster viewworthy viewy vifda viga vigentennial vigesimal vigesimation vigia vigil vigilance vigilancy vigilant vigilante vigilantism vigilantly vigilantness vigilate vigilation vigintiangular vigneron vignette vignetter vignettist vignin vigonia vigor vigorist vigorless vigorous vigorously vigorousness vihara vihuela vijao viking vikingism vikinglike vikingship vila vilayet vile vilehearted vilely vileness vilicate vilification vilifier vilify vilifyingly vilipend vilipender vilipenditory vility vill villa villadom villaette village villageful villagehood villageless villagelet villagelike villageous villager villageress villagery villaget villageward villagey villagism villain villainage villaindom villainess villainist villainous villainously villainousness villainproof villainy villakin villaless villalike villanage villanella villanelle villanette villanous villanously villar villate villatic ville villein villeinage villeiness villeinhold villenage villiaumite villiferous villiform villiplacental villitis villoid villose villosity villous villously villus vim vimana vimen vimful viminal vimineous vina vinaceous vinaconic vinage vinagron vinaigrette vinaigretted vinaigrier vinaigrous vinal vinasse vinata vincent vincetoxin vincibility vincible vincibleness vincibly vincular vinculate vinculation vinculum vindemial vindemiate vindemiation vindemiatory vindex vindhyan vindicability vindicable vindicableness vindicably vindicate vindication vindicative vindicatively vindicativeness vindicator vindicatorily vindicatorship vindicatory vindicatress vindictive vindictively vindictiveness vindictivolence vindresser vine vinea vineal vineatic vined vinegar vinegarer vinegarette vinegarish vinegarist vinegarroon vinegarweed vinegary vinegerone vinegrower vineity vineland vineless vinelet vinelike viner vinery vinestalk vinewise vineyard vineyarding vineyardist vingerhoed vinhatico vinic vinicultural viniculture viniculturist vinifera viniferous vinification vinificator vinny vino vinoacetous vinolence vinolent vinologist vinology vinometer vinomethylic vinose vinosity vinosulphureous vinous vinously vinousness vinquish vint vinta vintage vintager vintaging vintem vintener vintlite vintner vintneress vintnership vintnery vintress vintry viny vinyl vinylbenzene vinylene vinylic vinylidene viol viola violability violable violableness violably violacean violaceous violaceously violal violanin violaquercitrin violate violater violation violational violative violator violatory violature violence violent violently violentness violer violescent violet violetish violetlike violette violetwise violety violin violina violine violinette violinist violinistic violinlike violinmaker violinmaking violist violmaker violmaking violon violoncellist violoncello violone violotta violuric viosterol viper viperan viperess viperfish viperian viperid viperiform viperine viperish viperishly viperlike viperling viperoid viperous viperously viperousness vipery vipolitic vipresident viqueen viragin viraginian viraginity viraginous virago viragoish viragolike viragoship viral vire virelay viremia viremic virent vireo vireonine virescence virescent virga virgal virgate virgated virgater virgation virgilia virgin virginal virginalist virginality virginally virgineous virginhead virginitis virginity virginityship virginium virginlike virginly virginship virgula virgular virgularian virgulate virgule virgultum virial viricide virid viridene viridescence viridescent viridian viridigenous viridine viridite viridity virific virify virile virilely virileness virilescence virilescent virilify viriliously virilism virilist virility viripotent viritrate virl virole viroled virological virologist virology viron virose virosis virous virtu virtual virtualism virtualist virtuality virtualize virtually virtue virtued virtuefy virtuelessness virtueproof virtuless virtuosa virtuose virtuosi virtuosic virtuosity virtuoso virtuosoship virtuous virtuouslike virtuously virtuousness virucidal virucide viruela virulence virulency virulent virulented virulently virulentness viruliferous virus viruscidal viruscide virusemic vis visa visage visaged visagraph visarga viscacha viscera visceral visceralgia viscerally viscerate visceration visceripericardial visceroinhibitory visceromotor visceroparietal visceroperitioneal visceropleural visceroptosis visceroptotic viscerosensory visceroskeletal viscerosomatic viscerotomy viscerotonia viscerotonic viscerotrophic viscerotropic viscerous viscid viscidity viscidize viscidly viscidness viscidulous viscin viscoidal viscolize viscometer viscometrical viscometrically viscometry viscontal viscoscope viscose viscosimeter viscosimetry viscosity viscount viscountcy viscountess viscountship viscounty viscous viscously viscousness viscus vise viseman visibility visibilize visible visibleness visibly visie visile vision visional visionally visionarily visionariness visionary visioned visioner visionic visionist visionize visionless visionlike visionmonger visionproof visit visita visitable visitant visitation visitational visitative visitator visitatorial visite visitee visiter visiting visitment visitor visitoress visitorial visitorship visitress visitrix visive visne vison visor visorless visorlike vista vistaed vistal vistaless vistamente visto visual visualist visuality visualization visualize visualizer visually visuoauditory visuokinesthetic visuometer visuopsychic visuosensory vita vital vitalic vitalism vitalist vitalistic vitalistically vitality vitalization vitalize vitalizer vitalizing vitalizingly vitally vitalness vitals vitamer vitameric vitamin vitaminic vitaminize vitaminology vitapath vitapathy vitaphone vitascope vitascopic vitasti vitativeness vitellarian vitellarium vitellary vitellicle vitelliferous vitelligenous vitelligerous vitellin vitelline vitellogene vitellogenous vitellose vitellus viterbite vitiable vitiate vitiated vitiation vitiator viticetum viticulose viticultural viticulture viticulturer viticulturist vitiferous vitiliginous vitiligo vitiligoidea vitiosity vitium vitochemic vitochemical vitrage vitrail vitrailed vitrailist vitrain vitraux vitreal vitrean vitrella vitremyte vitreodentinal vitreodentine vitreoelectric vitreosity vitreous vitreouslike vitreously vitreousness vitrescence vitrescency vitrescent vitrescibility vitrescible vitreum vitric vitrics vitrifaction vitrifacture vitrifiability vitrifiable vitrification vitriform vitrify vitrine vitrinoid vitriol vitriolate vitriolation vitriolic vitrioline vitriolizable vitriolization vitriolize vitriolizer vitrite vitrobasalt vitrophyre vitrophyric vitrotype vitrous vitta vittate vitular vituline vituperable vituperate vituperation vituperative vituperatively vituperator vituperatory vituperious viuva viva vivacious vivaciously vivaciousness vivacity vivandiere vivarium vivary vivax vive vively vivency viver viverriform viverrine vivers vives vivianite vivicremation vivid vividialysis vividiffusion vividissection vividity vividly vividness vivific vivificate vivification vivificative vivificator vivifier vivify viviparism viviparity viviparous viviparously viviparousness vivipary viviperfuse vivisect vivisection vivisectional vivisectionally vivisectionist vivisective vivisector vivisectorium vivisepulture vixen vixenish vixenishly vixenishness vixenlike vixenly vizard vizarded vizardless vizardlike vizardmonger vizier vizierate viziercraft vizierial viziership vizircraft vlei voar vocability vocable vocably vocabular vocabularian vocabularied vocabulary vocabulation vocabulist vocal vocalic vocalion vocalise vocalism vocalist vocalistic vocality vocalization vocalize vocalizer vocaller vocally vocalness vocate vocation vocational vocationalism vocationalization vocationalize vocationally vocative vocatively vochysiaceous vocicultural vociferance vociferant vociferate vociferation vociferative vociferator vociferize vociferosity vociferous vociferously vociferousness vocification vocimotor vocular vocule vodka voe voet voeten vog vogesite voglite vogue voguey voguish voice voiced voiceful voicefulness voiceless voicelessly voicelessness voicelet voicelike voicer voicing void voidable voidableness voidance voided voidee voider voiding voidless voidly voidness voile voiturette voivode voivodeship vol volable volage volant volantly volar volata volatic volatile volatilely volatileness volatility volatilizable volatilization volatilize volatilizer volation volational volborthite volcan volcanian volcanic volcanically volcanicity volcanism volcanist volcanite volcanity volcanization volcanize volcano volcanoism volcanological volcanologist volcanologize volcanology vole volemitol volency volent volently volery volet volhynite volipresence volipresent volitant volitate volitation volitational volitiency volitient volition volitional volitionalist volitionality volitionally volitionary volitionate volitionless volitive volitorial volley volleyball volleyer volleying volleyingly volost volplane volplanist volsella volsellum volt voltaelectric voltaelectricity voltaelectrometer voltaelectrometric voltage voltagraphy voltaic voltaism voltaite voltameter voltametric voltammeter voltaplast voltatype voltinism voltivity voltize voltmeter voltzite volubilate volubility voluble volubleness volubly volucrine volume volumed volumenometer volumenometry volumescope volumeter volumetric volumetrical volumetrically volumetry volumette voluminal voluminosity voluminous voluminously voluminousness volumist volumometer volumometrical volumometry voluntariate voluntarily voluntariness voluntarism voluntarist voluntaristic voluntarity voluntary voluntaryism voluntaryist voluntative volunteer volunteerism volunteerly volunteership volupt voluptary voluptas voluptuarian voluptuary voluptuate voluptuosity voluptuous voluptuously voluptuousness volupty voluta volutate volutation volute voluted volutiform volutin volution volutoid volva volvate volvelle volvent volvocaceous volvulus vomer vomerine vomerobasilar vomeronasal vomeropalatine vomica vomicine vomit vomitable vomiter vomiting vomitingly vomition vomitive vomitiveness vomito vomitory vomiture vomiturition vomitus vomitwort vondsira vonsenite voodoo voodooism voodooist voodooistic voracious voraciously voraciousness voracity voraginous vorago vorant vorhand vorlooper vorondreo vorpal vortex vortical vortically vorticel vorticellid vortices vorticial vorticiform vorticism vorticist vorticity vorticose vorticosely vorticular vorticularly vortiginous vota votable votal votally votaress votarist votary votation vote voteen voteless voter voting votive votively votiveness votometer votress vouch vouchable vouchee voucher voucheress vouchment vouchsafe vouchsafement vouge voussoir vow vowed vowel vowelish vowelism vowelist vowelization vowelize vowelless vowellessness vowellike vowely vower vowess vowless vowmaker vowmaking voyage voyageable voyager voyance voyeur voyeurism vraic vraicker vraicking vrbaite vriddhi vrother vug vuggy vulcanicity vulcanism vulcanist vulcanite vulcanizable vulcanizate vulcanization vulcanize vulcanizer vulcanological vulcanologist vulcanology vulgar vulgare vulgarian vulgarish vulgarism vulgarist vulgarity vulgarization vulgarize vulgarizer vulgarlike vulgarly vulgarness vulgarwise vulgate vulgus vuln vulnerability vulnerable vulnerableness vulnerably vulnerary vulnerate vulneration vulnerative vulnerose vulnific vulnose vulpecular vulpic vulpicidal vulpicide vulpicidism vulpine vulpinism vulpinite vulsella vulsellum vulsinite vulture vulturelike vulturewise vulturine vulturish vulturism vulturn vulturous vulva vulval vulvar vulvate vulviform vulvitis vulvocrural vulvouterine vulvovaginal vulvovaginitis vum vying vyingly w wa waag waapa waar wab wabber wabble wabbly wabby wabe wabeno wabster wacago wace wachna wack wacke wacken wacker wackiness wacky wad waddent wadder wadding waddler waddlesome waddling waddlingly waddly waddy waddywood wade wadeable wader wadi wading wadingly wadlike wadmaker wadmaking wadmal wadmeal wadna wadset wadsetter wae waeg waer waesome waesuck wafer waferer waferish wafermaker wafermaking waferwoman waferwork wafery waff waffle wafflike waffly waft waftage wafter wafture wafty wag waganging wagaun wagbeard wage waged wagedom wageless wagelessness wagenboom wager wagerer wagering wages wagesman wagework wageworker wageworking waggable waggably waggel wagger waggery waggie waggish waggishly waggishness waggle waggling wagglingly waggly waggy waglike wagling wagnerite wagon wagonable wagonage wagoner wagoness wagonette wagonful wagonload wagonmaker wagonmaking wagonman wagonry wagonsmith wagonway wagonwayman wagonwork wagonwright wagsome wagtail wagwag wagwants wagwit wah wahahe wahine wahoo wahpekute waiata waif waik waikly waikness wail wailer wailful wailfully wailingly wailsome waily wain wainage wainbote wainer wainful wainman wainrope wainscot wainscoting wainwright waipiro wairch waird wairepo wairsh waise waist waistband waistcloth waistcoat waistcoated waistcoateer waistcoathole waistcoating waistcoatless waisted waister waisting waistless waistline wait waiter waiterage waiterdom waiterhood waitering waiterlike waitership waiting waitingly waitress waivatua waive waiver waivery waivod waiwode wajang waka wakan wake wakeel wakeful wakefully wakefulness wakeless waken wakener wakening waker wakes waketime wakf wakif wakiki waking wakingly wakiup wakken wakon wakonda waky walahee waldflute waldgrave waldgravine waldhorn waldmeister wale waled walepiece waler walewort wali waling walk walkable walkaway walker walking walkist walkmill walkmiller walkout walkover walkrife walkside walksman walkway walkyrie wall wallaba wallaby wallah wallaroo wallbird wallboard walled waller wallet walletful walleye walleyed wallflower wallful wallhick walling wallise wallless wallman walloon wallop walloper walloping wallow wallower wallowish wallowishly wallowishness wallpaper wallpapering wallpiece wallwise wallwork wallwort wally walnut walpurgite walrus walsh walt walter walth waltz waltzer waltzlike walycoat wamara wambais wamble wambliness wambling wamblingly wambly wame wamefou wamel wammikin wamp wampee wample wampum wampumpeag wampus wamus wan wanchancy wand wander wanderable wanderer wandering wanderingly wanderingness wanderlust wanderluster wanderlustful wanderoo wandery wanderyear wandflower wandle wandlike wandoo wandsman wandy wane waned waneless wang wanga wangala wangan wangateur wanghee wangle wangler wangrace wangtooth wanhope wanhorn wanigan waning wankapin wankle wankliness wankly wanle wanly wanner wanness wannish wanny wanrufe wansonsy want wantage wanter wantful wanthill wanthrift wanting wantingly wantingness wantless wantlessness wanton wantoner wantonlike wantonly wantonness wantwit wanty wanwordy wanworth wany wap wapacut wapatoo wapentake wapiti wapp wappenschaw wappenschawing wapper wapping war warabi waratah warble warbled warblelike warbler warblerlike warblet warbling warblingly warbly warch warcraft ward wardable wardage wardapet warday warded warden wardency wardenry wardenship warder warderer wardership wardholding warding wardite wardless wardlike wardmaid wardman wardmote wardress wardrobe wardrober wardroom wardship wardsmaid wardsman wardswoman wardwite wardwoman ware warehou warehouse warehouseage warehoused warehouseful warehouseman warehouser wareless waremaker waremaking wareman wareroom warf warfare warfarer warfaring warful warily wariness waringin warish warison wark warkamoowee warl warless warlessly warlike warlikely warlikeness warlock warluck warly warm warmable warman warmed warmedly warmer warmful warmhearted warmheartedly warmheartedness warmhouse warming warmish warmly warmness warmonger warmongering warmouth warmth warmthless warmus warn warnel warner warning warningly warningproof warnish warnoth warnt warp warpable warpage warped warper warping warplane warple warplike warproof warpwise warragal warrambool warran warrand warrandice warrant warrantable warrantableness warrantably warranted warrantee warranter warrantise warrantless warrantor warranty warratau warree warren warrener warrenlike warrer warrin warrior warrioress warriorhood warriorism warriorlike warriorship warriorwise warrok warsaw warse warsel warship warsle warsler warst wart warted wartern wartflower warth wartime wartless wartlet wartlike wartproof wartweed wartwort warty wartyback warve warwards warwickite warwolf warworn wary was wasabi wase wasel wash washability washable washableness washaway washbasin washbasket washboard washbowl washbrew washcloth washday washdish washdown washed washen washer washerless washerman washerwife washerwoman washery washeryman washhand washhouse washin washiness washing washland washmaid washman washoff washout washpot washproof washrag washroad washroom washshed washstand washtail washtray washtrough washtub washway washwoman washwork washy wasnt wasp waspen wasphood waspily waspish waspishly waspishness wasplike waspling waspnesting waspy wassail wassailer wassailous wassailry wassie wast wastable wastage waste wastebasket wasteboard wasted wasteful wastefully wastefulness wastel wasteland wastelbread wasteless wasteman wastement wasteness wastepaper wasteproof waster wasterful wasterfully wasterfulness wastethrift wasteword wasteyard wasting wastingly wastingness wastland wastrel wastrife wasty wat watap watch watchable watchboat watchcase watchcry watchdog watched watcher watchfree watchful watchfully watchfulness watchglassful watchhouse watching watchingly watchkeeper watchless watchlessness watchmaker watchmaking watchman watchmanly watchmanship watchmate watchment watchout watchtower watchwise watchwoman watchword watchwork water waterage waterbailage waterbelly waterboard waterbok waterbosh waterbrain waterchat watercup waterdoe waterdrop watered waterer waterfall waterfinder waterflood waterfowl waterfront waterhead waterhorse waterie waterily wateriness watering wateringly wateringman waterish waterishly waterishness waterleave waterless waterlessly waterlessness waterlike waterline waterlog waterlogged waterloggedness waterlogger waterlogging waterman watermanship watermark watermaster watermelon watermonger waterphone waterpot waterproof waterproofer waterproofing waterproofness waterquake waterscape watershed watershoot waterside watersider waterskin watersmeet waterspout waterstead watertight watertightal watertightness waterward waterwards waterway waterweed waterwise waterwoman waterwood waterwork waterworker waterworm waterworn waterwort watery wath wathstead watt wattage wattape wattle wattlebird wattled wattless wattlework wattling wattman wattmeter wauble wauch wauchle waucht wauf waugh waughy wauken waukit waukrife waul waumle wauner wauns waup waur wauregan wauve wavable wavably wave waved waveless wavelessly wavelessness wavelet wavelike wavellite wavemark wavement wavemeter waveproof waver waverable waverer wavering waveringly waveringness waverous wavery waveson waveward wavewise wavey wavicle wavily waviness waving wavingly wavy waw wawa wawah wawaskeesh wax waxberry waxbill waxbird waxbush waxchandler waxchandlery waxen waxer waxflower waxhearted waxily waxiness waxing waxingly waxlike waxmaker waxmaking waxman waxweed waxwing waxwork waxworker waxworking waxy way wayaka wayang wayback wayberry waybill waybird waybook waybread waybung wayfare wayfarer wayfaring wayfaringly wayfellow waygang waygate waygoing waygone waygoose wayhouse waying waylaid waylaidlessness waylay waylayer wayleave wayless waymaker wayman waymark waymate waypost ways wayside waysider waysliding waythorn wayward waywarden waywardly waywardness waywiser waywode waywodeship wayworn waywort wayzgoose we weak weakbrained weaken weakener weakening weakfish weakhanded weakhearted weakheartedly weakheartedness weakish weakishly weakishness weakliness weakling weakly weakmouthed weakness weaky weal weald wealdsman wealth wealthily wealthiness wealthless wealthmaker wealthmaking wealthmonger wealthy weam wean weanable weanedness weanel weaner weanling weanyer weapon weaponed weaponeer weaponless weaponmaker weaponmaking weaponproof weaponry weaponshaw weaponshow weaponshowing weaponsmith weaponsmithy wear wearability wearable wearer weariable weariableness wearied weariedly weariedness wearier weariful wearifully wearifulness weariless wearilessly wearily weariness wearing wearingly wearish wearishly wearishness wearisome wearisomely wearisomeness wearproof weary wearying wearyingly weasand weasel weaselfish weasellike weaselly weaselship weaselskin weaselsnout weaselwise weaser weason weather weatherboard weatherboarding weatherbreak weathercock weathercockish weathercockism weathercocky weathered weatherer weatherfish weatherglass weathergleam weatherhead weatherheaded weathering weatherliness weatherly weathermaker weathermaking weatherman weathermost weatherology weatherproof weatherproofed weatherproofing weatherproofness weatherward weatherworn weathery weavable weave weaveable weaved weavement weaver weaverbird weaveress weaving weazen weazened weazeny web webbed webber webbing webby weber webeye webfoot webfooter webless weblike webmaker webmaking webster websterite webwork webworm wecht wed wedana wedbed wedbedrip wedded weddedly weddedness wedder wedding weddinger wede wedge wedgeable wedgebill wedged wedgelike wedger wedgewise wedging wedgy wedlock wedset wee weeble weed weeda weedable weedage weeded weeder weedery weedful weedhook weediness weedingtime weedish weedless weedlike weedling weedow weedproof weedy week weekday weekend weekender weekly weekwam weel weelfard weelfaured weemen ween weendigo weeness weening weenong weeny weep weepable weeper weepered weepful weeping weepingly weeps weepy weesh weeshy weet weetbird weetless weever weevil weeviled weevillike weevilproof weevily weewow weeze weft weftage wefted wefty wegenerian wegotism wehrlite weibyeite weichselwood weigelite weigh weighable weighage weighbar weighbauk weighbridge weighbridgeman weighed weigher weighership weighhouse weighin weighing weighman weighment weighshaft weight weightchaser weighted weightedly weightedness weightily weightiness weighting weightless weightlessly weightlessness weightometer weighty weinbergerite weinschenkite weir weirangle weird weirdful weirdish weirdless weirdlessness weirdlike weirdliness weirdly weirdness weirdsome weirdward weirdwoman weiring weisbachite weiselbergite weism weissite wejack weka wekau wekeen weki welcome welcomeless welcomely welcomeness welcomer welcoming welcomingly weld weldability weldable welder welding weldless weldment weldor welfare welfaring welk welkin welkinlike well wellat wellaway wellborn wellcurb wellhead wellhole welling wellington wellish wellmaker wellmaking wellman wellnear wellness wellring wellside wellsite wellspring wellstead wellstrand welly wellyard wels welsh welsher welsium welt welted welter welterweight welting wem wemless wen wench wencher wenchless wenchlike wend wende wene wennebergite wennish wenny went wentletrap wenzel wept wer were werebear werecalf werefolk werefox werehyena werejaguar wereleopard werent weretiger werewolf werewolfish werewolfism werf wergil weri wernerite werowance wert wervel wese weskit wesselton west westaway westbound weste wester westering westerliness westerly westermost western westerner westernism westernization westernize westernly westernmost westerwards westfalite westing westland westlandways westmost westness westward westwardly westwardmost westwards westy wet weta wetback wetbird wetched wetchet wether wetherhog wetherteg wetly wetness wettability wettable wetted wetter wetting wettish weve wevet wey wha whabby whack whacker whacking whacky whafabout whale whaleback whalebacker whalebird whaleboat whalebone whaleboned whaledom whalehead whalelike whaleman whaler whaleroad whalery whaleship whaling whalish whally whalm whalp whaly wham whamble whame whammle whamp whampee whample whan whand whang whangable whangam whangdoodle whangee whanghee whank whap whappet whapuka whapukee whapuku whar whare whareer wharf wharfage wharfhead wharfholder wharfing wharfinger wharfland wharfless wharfman wharfmaster wharfrae wharfside wharl wharp wharry whart wharve whase whasle what whata whatabouts whatever whatkin whatlike whatna whatness whatnot whatreck whats whatso whatsoeer whatsoever whatsomever whatten whau whauk whaup whaur whauve wheal whealworm whealy wheam wheat wheatbird wheatear wheateared wheaten wheatgrower wheatland wheatless wheatlike wheatstalk wheatworm wheaty whedder whee wheedle wheedler wheedlesome wheedling wheedlingly wheel wheelage wheelband wheelbarrow wheelbarrowful wheelbird wheelbox wheeldom wheeled wheeler wheelery wheelhouse wheeling wheelingly wheelless wheellike wheelmaker wheelmaking wheelman wheelrace wheelroad wheelsman wheelsmith wheelspin wheelswarf wheelway wheelwise wheelwork wheelwright wheelwrighting wheely wheem wheen wheencat wheenge wheep wheeple wheer wheerikins wheesht wheetle wheeze wheezer wheezily wheeziness wheezingly wheezle wheezy wheft whein whekau wheki whelk whelked whelker whelklike whelky whelm whelp whelphood whelpish whelpless whelpling whelve whemmel when whenabouts whenas whence whenceeer whenceforth whenceforward whencesoeer whencesoever whencever wheneer whenever whenness whenso whensoever whensomever where whereabout whereabouts whereafter whereanent whereas whereat whereaway whereby whereer wherefor wherefore wherefrom wherein whereinsoever whereinto whereness whereof whereon whereout whereover whereso wheresoeer wheresoever wheresomever wherethrough wheretill whereto wheretoever wheretosoever whereunder whereuntil whereunto whereup whereupon wherever wherewith wherewithal wherret wherrit wherry wherryman whet whether whetile whetrock whetstone whetter whew whewellite whewer whewl whewt whey wheybeard wheyey wheyeyness wheyface wheyfaced wheyish wheyishness wheylike wheyness whiba which whichever whichsoever whichway whichways whick whicken whicker whid whidah whidder whiff whiffenpoof whiffer whiffet whiffle whiffler whifflery whiffletree whiffling whifflingly whiffy whift whig whiggamore whigmaleerie whigship whikerby while whileen whilere whiles whilie whilk whill whillaballoo whillaloo whillilew whilly whillywha whilock whilom whils whilst whilter whim whimberry whimble whimbrel whimling whimmy whimper whimperer whimpering whimperingly whimsey whimsic whimsical whimsicality whimsically whimsicalness whimsied whimstone whimwham whin whinberry whinchacker whinchat whincheck whincow whindle whine whiner whinestone whing whinge whinger whininess whiningly whinnel whinner whinnock whinny whinstone whiny whinyard whip whipbelly whipbird whipcat whipcord whipcordy whipcrack whipcracker whipcraft whipgraft whipjack whipking whiplash whiplike whipmaker whipmaking whipman whipmanship whipmaster whippa whippable whipparee whipped whipper whippersnapper whippertail whippet whippeter whippiness whipping whippingly whippletree whippoorwill whippost whippowill whippy whipsaw whipsawyer whipship whipsocket whipstaff whipstalk whipstall whipster whipstick whipstitch whipstock whipt whiptail whiptree whipwise whipworm whir whirken whirl whirlabout whirlblast whirlbone whirlbrain whirled whirler whirley whirlgig whirlicane whirligig whirlimagig whirling whirlingly whirlmagee whirlpool whirlpuff whirlwig whirlwind whirlwindish whirlwindy whirly whirlygigum whirret whirrey whirroo whirry whirtle whish whisk whisker whiskerage whiskerando whiskerandoed whiskered whiskerer whiskerette whiskerless whiskerlike whiskery whiskey whiskful whiskied whiskified whisking whiskingly whisky whiskyfied whiskylike whisp whisper whisperable whisperation whispered whisperer whisperhood whispering whisperingly whisperingness whisperless whisperous whisperously whisperproof whispery whissle whist whister whisterpoop whistle whistlebelly whistlefish whistlelike whistler whistlerism whistlewing whistlewood whistlike whistling whistlingly whistly whistness whit white whiteback whitebait whitebark whitebeard whitebelly whitebill whitebird whiteblaze whiteblow whitebottle whitecap whitecapper whitecoat whitecomb whitecorn whitecup whited whiteface whitefish whitefisher whitefishery whitefoot whitefootism whitehanded whitehass whitehawse whitehead whiteheart whitehearted whitelike whitely whiten whitener whiteness whitening whitenose whitepot whiteroot whiterump whites whitesark whiteseam whiteshank whiteside whitesmith whitestone whitetail whitethorn whitethroat whitetip whitetop whitevein whitewall whitewards whiteware whitewash whitewasher whiteweed whitewing whitewood whiteworm whitewort whitfinch whither whitherso whithersoever whitherto whitherward whiting whitish whitishness whitleather whitling whitlow whitlowwort whitneyite whitrack whits whitster whittaw whitten whittener whitter whitterick whittle whittler whittling whittret whittrick whity whiz whizgig whizzer whizzerman whizziness whizzing whizzingly whizzle who whoa whodunit whoever whole wholehearted wholeheartedly wholeheartedness wholeness wholesale wholesalely wholesaleness wholesaler wholesome wholesomely wholesomeness wholewise wholly whom whomble whomever whomso whomsoever whone whoo whoof whoop whoopee whooper whooping whoopingly whooplike whoops whoosh whop whopper whopping whorage whore whoredom whorelike whoremaster whoremasterly whoremastery whoremonger whoremonging whoreship whoreson whorish whorishly whorishness whorl whorled whorlflower whorly whorlywort whort whortle whortleberry whose whosen whosesoever whosever whosomever whosumdever whud whuff whuffle whulk whulter whummle whun whunstane whup whush whuskie whussle whute whuther whutter whuttering whuz why whyever whyfor whyness whyo wi wice wicht wichtisite wichtje wick wickawee wicked wickedish wickedlike wickedly wickedness wicken wicker wickerby wickerware wickerwork wickerworked wickerworker wicket wicketkeep wicketkeeper wicketkeeping wicketwork wicking wickiup wickless wickup wicky wicopy wid widbin widdendream widder widdershins widdifow widdle widdy wide widegab widehearted widely widemouthed widen widener wideness widespread widespreadedly widespreadly widespreadness widewhere widework widgeon widish widow widowed widower widowered widowerhood widowership widowery widowhood widowish widowlike widowly widowman widowy width widthless widthway widthways widthwise widu wield wieldable wielder wieldiness wieldy wiener wienerwurst wienie wierangle wiesenboden wife wifecarl wifedom wifehood wifeism wifekin wifeless wifelessness wifelet wifelike wifeling wifelkin wifely wifeship wifeward wifie wifiekie wifish wifock wig wigan wigdom wigful wigged wiggen wigger wiggery wigging wiggish wiggishness wiggism wiggle wiggler wiggly wiggy wight wightly wightness wigless wiglet wiglike wigmaker wigmaking wigtail wigwag wigwagger wigwam wiikite wild wildbore wildcat wildcatter wildcatting wildebeest wilded wilder wilderedly wildering wilderment wilderness wildfire wildfowl wildgrave wilding wildish wildishly wildishness wildlife wildlike wildling wildly wildness wildsome wildwind wile wileful wileless wileproof wilga wilgers wilily wiliness wilk wilkeite wilkin will willable willawa willed willedness willemite willer willet willey willeyer willful willfully willfulness williamsite willie willier willies willing willinghearted willinghood willingly willingness williwaw willmaker willmaking willness willock willow willowbiter willowed willower willowish willowlike willowware willowweed willowworm willowwort willowy willy willyard willyart willyer wilsome wilsomely wilsomeness wilt wilter wiltproof wily wim wimberry wimble wimblelike wimbrel wime wimick wimple wimpleless wimplelike win winberry wince wincer wincey winch wincher winchman wincing wincingly wind windable windage windbag windbagged windbaggery windball windberry windbibber windbore windbracing windbreak windbreaker windbroach windclothes windcuffer winddog winded windedly windedness winder windermost windfall windfallen windfanner windfirm windfish windflaw windflower windgall windgalled windhole windhover windigo windily windiness winding windingly windingness windjammer windjamming windlass windlasser windle windles windless windlessly windlessness windlestrae windlestraw windlike windlin windling windmill windmilly windock windore window windowful windowless windowlessness windowlet windowlight windowlike windowmaker windowmaking windowman windowpane windowpeeper windowshut windowward windowwards windowwise windowy windpipe windplayer windproof windring windroad windroot windrow windrower windscreen windshield windshock windsorite windstorm windsucker windtight windup windward windwardly windwardmost windwardness windwards windway windwayward windwaywardly windy wine wineball wineberry winebibber winebibbery winebibbing wineconner wined wineglass wineglassful winegrower winegrowing winehouse wineless winelike winemay winepot winer winery wineshop wineskin winesop winetaster winetree winevat winful wing wingable wingbeat wingcut winged wingedly wingedness winger wingfish winghanded wingle wingless winglessness winglet winglike wingman wingmanship wingpiece wingpost wingseed wingspread wingstem wingy winish wink winkel winkelman winker winkered winking winkingly winkle winklehawk winklehole winklet winly winna winnable winnard winnel winnelstrae winner winning winningly winningness winnings winninish winnle winnonish winnow winnower winnowing winnowingly winrace winrow winsome winsomely winsomeness wint winter winterage winterberry winterbloom winterbourne winterdykes wintered winterer winterfeed wintergreen winterhain wintering winterish winterishly winterishness winterization winterize winterkill winterkilling winterless winterlike winterliness winterling winterly winterproof wintersome wintertide wintertime winterward winterwards winterweed wintle wintrify wintrily wintriness wintrish wintrous wintry winy winze winzeman wipe wiper wippen wips wir wirable wirble wird wire wirebar wirebird wired wiredancer wiredancing wiredraw wiredrawer wiredrawn wirehair wireless wirelessly wirelessness wirelike wiremaker wiremaking wireman wiremonger wirepull wirepuller wirepulling wirer wiresmith wirespun wiretail wireway wireweed wirework wireworker wireworking wireworks wireworm wirily wiriness wiring wirl wirling wirr wirra wirrah wirrasthru wiry wis wisdom wisdomful wisdomless wisdomproof wisdomship wise wiseacre wiseacred wiseacredness wiseacredom wiseacreish wiseacreishness wiseacreism wisecrack wisecracker wisecrackery wisehead wisehearted wiseheartedly wiseheimer wiselike wiseling wisely wiseman wisen wiseness wisenheimer wisent wiser wiseweed wisewoman wish wisha wishable wishbone wished wishedly wisher wishful wishfully wishfulness wishing wishingly wishless wishly wishmay wishness wisht wishtonwish wisket wiskinky wisp wispish wisplike wispy wiss wisse wissel wist wistaria wiste wistened wisteria wistful wistfully wistfulness wistit wistiti wistless wistlessness wistonwish wit witan witch witchbells witchcraft witched witchedly witchen witchering witchery witchet witchetty witchhood witching witchingly witchleaf witchlike witchman witchmonger witchuck witchweed witchwife witchwoman witchwood witchwork witchy witcraft wite witeless witenagemot witepenny witess witful with withal withamite withdraught withdraw withdrawable withdrawal withdrawer withdrawing withdrawingness withdrawment withdrawn withdrawnness withe withen wither witherband withered witheredly witheredness witherer withergloom withering witheringly witherite witherly withernam withers withershins withertip witherwards witherweight withery withewood withheld withhold withholdable withholdal withholder withholdment within withindoors withinside withinsides withinward withinwards withness witholden without withoutdoors withouten withoutforth withoutside withoutwards withsave withstand withstander withstandingness withstay withstood withstrain withvine withwind withy withypot withywind witjar witless witlessly witlessness witlet witling witloof witmonger witness witnessable witnessdom witnesser witney witneyer witship wittal wittawer witteboom witted witter wittering witticaster wittichenite witticism witticize wittified wittily wittiness witting wittingly wittol wittolly witty witwall witzchoura wive wiver wivern wiz wizard wizardess wizardism wizardlike wizardly wizardry wizardship wizen wizened wizenedness wizier wizzen wloka wo woad woader woadman woadwaxen woady woak woald woan wob wobbegong wobble wobbler wobbliness wobbling wobblingly wobbly wobster wocheinite wod woddie wode wodge wodgy woe woebegone woebegoneness woebegonish woeful woefully woefulness woehlerite woesome woevine woeworn woffler woft wog wogiet woibe wokas woke wokowi wold woldlike woldsman woldy wolf wolfachite wolfberry wolfdom wolfen wolfer wolfhood wolfhound wolfish wolfishly wolfishness wolfkin wolfless wolflike wolfling wolfram wolframate wolframic wolframine wolframinium wolframite wolfsbane wolfsbergite wolfskin wolfward wolfwards wollastonite wollomai wollop wolter wolve wolveboon wolver wolverine woman womanbody womandom womanfolk womanfully womanhead womanhearted womanhood womanhouse womanish womanishly womanishness womanism womanist womanity womanization womanize womanizer womankind womanless womanlike womanliness womanly womanmuckle womanness womanpost womanproof womanship womanways womanwise womb wombat wombed womble wombstone womby womenfolk womenfolks womenkind womera wommerala won wonder wonderberry wonderbright wondercraft wonderer wonderful wonderfully wonderfulness wondering wonderingly wonderland wonderlandish wonderless wonderment wondermonger wondermongering wondersmith wondersome wonderstrong wonderwell wonderwork wonderworthy wondrous wondrously wondrousness wone wonegan wong wonga wongen wongshy wongsky woning wonky wonna wonned wonner wonning wonnot wont wonted wontedly wontedness wonting woo wooable wood woodagate woodbark woodbin woodbind woodbine woodbined woodbound woodburytype woodbush woodchat woodchuck woodcock woodcockize woodcracker woodcraft woodcrafter woodcraftiness woodcraftsman woodcrafty woodcut woodcutter woodcutting wooded wooden woodendite woodenhead woodenheaded woodenheadedness woodenly woodenness woodenware woodenweary woodeny woodfish woodgeld woodgrub woodhack woodhacker woodhole woodhorse woodhouse woodhung woodine woodiness wooding woodish woodjobber woodkern woodknacker woodland woodlander woodless woodlessness woodlet woodlike woodlocked woodly woodman woodmancraft woodmanship woodmonger woodmote woodness woodpeck woodpecker woodpenny woodpile woodprint woodranger woodreeve woodrick woodrock woodroof woodrow woodrowel woodruff woodsere woodshed woodshop woodside woodsilver woodskin woodsman woodspite woodstone woodsy woodwall woodward woodwardship woodware woodwax woodwaxen woodwise woodwork woodworker woodworking woodworm woodwose woodwright woody woodyard wooer woof woofed woofell woofer woofy woohoo wooing wooingly wool woold woolder woolding wooled woolen woolenet woolenization woolenize wooler woolert woolfell woolgatherer woolgathering woolgrower woolgrowing woolhead wooliness woollike woolly woollyhead woollyish woolman woolpack woolpress woolsack woolsey woolshearer woolshearing woolshears woolshed woolskin woolsorter woolsorting woolsower woolstock woolulose woolwasher woolweed woolwheel woolwinder woolwork woolworker woolworking woom woomer woomerang woon woons woorali woorari woosh wootz woozle woozy wop woppish wops worble worcester word wordable wordably wordage wordbook wordbuilding wordcraft wordcraftsman worded worder wordily wordiness wording wordish wordishly wordishness wordle wordless wordlessly wordlessness wordlike wordlorist wordmaker wordmaking wordman wordmanship wordmonger wordmongering wordmongery wordplay wordsman wordsmanship wordsmith wordspite wordster wordy wore work workability workable workableness workaday workaway workbag workbasket workbench workbook workbox workbrittle workday worked worker workfellow workfolk workfolks workgirl workhand workhouse workhoused working workingly workingman workingwoman workless worklessness workloom workman workmanlike workmanlikeness workmanliness workmanly workmanship workmaster workmistress workout workpan workpeople workpiece workplace workroom works workship workshop worksome workstand worktable worktime workways workwise workwoman workwomanlike workwomanly worky workyard world worlded worldful worldish worldless worldlet worldlike worldlily worldliness worldling worldly worldmaker worldmaking worldproof worldquake worldward worldwards worldway worldy worm wormed wormer wormhole wormholed wormhood wormil worming wormless wormlike wormling wormproof wormroot wormseed wormship wormweed wormwood wormy worn wornil wornness worral worriable worricow worried worriedly worriedness worrier worriless worriment worrisome worrisomely worrisomeness worrit worriter worry worrying worryingly worryproof worrywart worse worsement worsen worseness worsening worser worserment worset worship worshipability worshipable worshiper worshipful worshipfully worshipfulness worshipingly worshipless worshipworth worshipworthy worst worsted wort worth worthful worthfulness worthiest worthily worthiness worthless worthlessly worthlessness worthship worthward worthy wosbird wot wote wots wottest wotteth woubit wouch wouf wough would wouldest wouldnt wouldst wound woundability woundable woundableness wounded woundedly wounder woundily wounding woundingly woundless wounds woundwort woundworth woundy wourali wourari wournil wove woven wow wowser wowserdom wowserian wowserish wowserism wowsery wowt woy wrack wracker wrackful wraggle wrainbolt wrainstaff wrainstave wraith wraithe wraithlike wraithy wraitly wramp wran wrang wrangle wrangler wranglership wranglesome wranglingly wrannock wranny wrap wrappage wrapped wrapper wrapperer wrappering wrapping wraprascal wrasse wrastle wrastler wrath wrathful wrathfully wrathfulness wrathily wrathiness wrathlike wrathy wraw wrawl wrawler wraxle wreak wreakful wreakless wreat wreath wreathage wreathe wreathed wreathen wreather wreathingly wreathless wreathlet wreathlike wreathmaker wreathmaking wreathwise wreathwork wreathwort wreathy wreck wreckage wrecker wreckfish wreckful wrecking wrecky wren wrench wrenched wrencher wrenchingly wrenlet wrenlike wrentail wrest wrestable wrester wresting wrestingly wrestle wrestler wrestlerlike wrestling wretch wretched wretchedly wretchedness wretchless wretchlessly wretchlessness wretchock wricht wrick wride wried wrier wriest wrig wriggle wriggler wrigglesome wrigglingly wriggly wright wrightine wring wringbolt wringer wringman wringstaff wrinkle wrinkleable wrinkled wrinkledness wrinkledy wrinkleful wrinkleless wrinkleproof wrinklet wrinkly wrist wristband wristbone wristed wrister wristfall wristikin wristlet wristlock wristwork writ writability writable writation writative write writeable writee writer writeress writerling writership writh writhe writhed writhedly writhedness writhen writheneck writher writhing writhingly writhy writing writinger writmaker writmaking writproof written writter wrive wrizzled wro wrocht wroke wroken wrong wrongdoer wrongdoing wronged wronger wrongful wrongfully wrongfulness wronghead wrongheaded wrongheadedly wrongheadedness wronghearted wrongheartedly wrongheartedness wrongish wrongless wronglessly wrongly wrongness wrongous wrongously wrongousness wrongwise wrossle wrote wroth wrothful wrothfully wrothily wrothiness wrothly wrothsome wrothy wrought wrox wrung wrungness wry wrybill wryly wrymouth wryneck wryness wrytail wud wuddie wudge wudu wugg wulfenite wulk wull wullawins wullcat wulliwa wumble wumman wummel wun wungee wunna wunner wunsome wup wur wurley wurmal wurrus wurset wurtzilite wurtzite wurzel wush wusp wuss wusser wust wut wuther wuzu wuzzer wuzzle wuzzy wy wyde wye wyke wyle wyliecoat wymote wyn wynd wyne wynkernel wynn wyomingite wype wyson wyss wyve wyver x xanthaline xanthamic xanthamide xanthane xanthate xanthation xanthein xanthelasma xanthelasmic xanthelasmoidea xanthene xanthic xanthide xanthin xanthine xanthinuria xanthione xanthite xanthiuria xanthocarpous xanthochroia xanthochroid xanthochroism xanthochromia xanthochromic xanthochroous xanthocobaltic xanthocone xanthoconite xanthocreatinine xanthocyanopsia xanthocyanopsy xanthocyanopy xanthoderm xanthoderma xanthodont xanthodontous xanthogen xanthogenamic xanthogenamide xanthogenate xanthogenic xantholeucophore xanthoma xanthomata xanthomatosis xanthomatous xanthomelanous xanthometer xanthomyeloma xanthone xanthophane xanthophore xanthophose xanthophyll xanthophyllite xanthophyllous xanthopia xanthopicrin xanthopicrite xanthoproteic xanthoprotein xanthoproteinic xanthopsia xanthopsin xanthopsydracia xanthopterin xanthopurpurin xanthorhamnin xanthorrhoea xanthosiderite xanthosis xanthospermous xanthotic xanthous xanthoxenite xanthoxylin xanthuria xanthydrol xanthyl xarque xebec xenacanthine xenagogue xenagogy xenarthral xenarthrous xenelasia xenelasy xenia xenial xenian xenium xenobiosis xenoblast xenocryst xenodochium xenogamous xenogamy xenogenesis xenogenetic xenogenic xenogenous xenogeny xenolite xenolith xenolithic xenomania xenomaniac xenomorphic xenomorphosis xenon xenoparasite xenoparasitism xenopeltid xenophile xenophilism xenophobe xenophobia xenophobian xenophobism xenophoby xenophoran xenophthalmia xenophya xenopodid xenopodoid xenopteran xenopterygian xenosaurid xenosauroid xenotime xenyl xenylamine xerafin xeransis xeranthemum xerantic xerarch xerasia xeric xerically xeriff xerocline xeroderma xerodermatic xerodermatous xerodermia xerodermic xerogel xerography xeroma xeromata xeromenia xeromorph xeromorphic xeromorphous xeromorphy xeromyron xeromyrum xeronate xeronic xerophagia xerophagy xerophil xerophile xerophilous xerophily xerophobous xerophthalmia xerophthalmos xerophthalmy xerophyte xerophytic xerophytically xerophytism xeroprinting xerosis xerostoma xerostomia xerotes xerotherm xerotic xerotocia xerotripsis xi xiphias xiphihumeralis xiphiid xiphiiform xiphioid xiphiplastra xiphiplastral xiphiplastron xiphisterna xiphisternal xiphisternum xiphisuran xiphocostal xiphodynia xiphoid xiphoidal xiphoidian xiphopagic xiphopagous xiphopagus xiphophyllous xiphosterna xiphosternum xiphosuran xiphosure xiphosurous xiphuous xiphydriid xoana xoanon xurel xyla xylan xylate xylem xylene xylenol xylenyl xyletic xylic xylidic xylidine xylindein xylinid xylite xylitol xylitone xylobalsamum xylocarp xylocarpous xylocopid xylogen xyloglyphy xylograph xylographer xylographic xylographical xylographically xylography xyloid xyloidin xylol xylology xyloma xylomancy xylometer xylon xylonic xylonitrile xylophagan xylophage xylophagid xylophagous xylophilous xylophone xylophonic xylophonist xyloplastic xylopyrography xyloquinone xylorcin xylorcinol xylose xyloside xylostroma xylostromata xylostromatoid xylotile xylotomist xylotomous xylotomy xylotypographic xylotypography xyloyl xylyl xylylene xylylic xyphoid xyrid xyridaceous xyst xyster xysti xystos xystum xystus y ya yaba yabber yabbi yabble yabby yabu yacal yacca yachan yacht yachtdom yachter yachting yachtist yachtman yachtmanship yachtsman yachtsmanlike yachtsmanship yachtswoman yachty yad yade yaff yaffingale yaffle yagger yaghourt yagi yagourundi yagua yaguarundi yaguaza yah yahan yahoo yair yaird yaje yajeine yajenine yajnopavita yak yakalo yakamik yakattalo yakin yakka yakman yalb yale yali yalla yallaer yallow yam yamamai yamanai yamaskite yamen yamilke yammadji yammer yamp yampa yamph yamshik yamstchik yan yancopin yander yang yangtao yank yanking yanky yaoort yaourti yap yapa yaply yapness yapok yapp yapped yapper yappiness yapping yappingly yappish yappy yapster yar yarak yaray yarb yard yardage yardang yardarm yarder yardful yarding yardkeep yardland yardman yardmaster yardsman yardstick yardwand yare yareta yark yarke yarl yarly yarm yarn yarnen yarner yarnwindle yarpha yarr yarraman yarran yarringle yarrow yarth yarthen yarwhelp yarwhip yas yashiro yashmak yat yataghan yatalite yate yati yatter yaud yauld yaupon yautia yava yaw yawl yawler yawlsman yawmeter yawn yawner yawney yawnful yawnfully yawnily yawniness yawning yawningly yawnproof yawnups yawny yawp yawper yawroot yaws yawweed yawy yaxche yaya ycie yday ye yea yeah yealing yean yeanling year yeara yearbird yearbook yeard yearday yearful yearling yearlong yearly yearn yearnful yearnfully yearnfulness yearning yearnling yearock yearth yeast yeastily yeastiness yeasting yeastlike yeasty yeat yeather yed yede yee yeel yeelaman yees yegg yeggman yeguita yeld yeldrin yeldrock yelk yell yeller yelling yelloch yellow yellowammer yellowback yellowbelly yellowberry yellowbill yellowbird yellowcrown yellowcup yellowfin yellowfish yellowhammer yellowhead yellowing yellowish yellowishness yellowlegs yellowly yellowness yellowroot yellowrump yellows yellowseed yellowshank yellowshanks yellowshins yellowtail yellowthorn yellowthroat yellowtop yellowware yellowweed yellowwood yellowwort yellowy yelm yelmer yelp yelper yelt yen yender yeni yenite yentnite yeo yeoman yeomaness yeomanette yeomanhood yeomanlike yeomanly yeomanry yeomanwise yeorling yeowoman yep yer yerb yerba yercum yerd yere yerga yerk yern yerth yes yese yeso yesso yest yester yesterday yestereve yestereven yesterevening yestermorn yestermorning yestern yesternight yesternoon yesterweek yesteryear yestreen yesty yet yeta yetapa yeth yether yetlin yeuk yeukieness yeuky yeven yew yex yez yezzy ygapo yield yieldable yieldableness yieldance yielden yielder yielding yieldingly yieldingness yieldy yigh yill yilt yin yince yinst yip yird yirk yirm yirmilik yirn yirr yirth yis yite ym yn ynambu yo yobi yocco yochel yock yockel yodel yodeler yodelist yodh yoe yoga yogasana yogh yoghurt yogi yogin yogism yogist yogoite yohimbe yohimbi yohimbine yohimbinization yohimbinize yoi yoick yoicks yojan yojana yok yoke yokeable yokeableness yokeage yokefellow yokel yokeldom yokeless yokelish yokelism yokelry yokemate yokemating yoker yokewise yokewood yoking yoky yolden yoldring yolk yolked yolkiness yolkless yolky yom yomer yon yoncopin yond yonder yonner yonside yont yook yoop yor yore yoretime york yorker yot yotacism yotacize yote you youd youden youdendrift youdith youff youl young youngberry younger younghearted youngish younglet youngling youngly youngness youngster youngun younker youp your yourn yours yoursel yourself yourselves youse youth youthen youthful youthfullity youthfully youthfulness youthhead youthheid youthhood youthily youthless youthlessness youthlike youthlikeness youthsome youthtide youthwort youthy youve youward youwards youze yoven yow yowie yowl yowler yowley yowlring yowt yox yoy yperite ypsiliform ypsiloid yr ytterbia ytterbic ytterbium yttria yttrialite yttric yttriferous yttrious yttrium yttrocerite yttrocolumbite yttrocrasite yttrofluorite yttrogummite yttrotantalite yuan yuca yucca yuck yuckel yucker yuckle yucky yuft yugada yuh yukkel yulan yule yuleblock yuletide yummy yungan yurt yurta yus yusdrum yutu yuzlik yuzluk z za zabaglione zabeta zabra zabti zabtie zac zacate zacaton zachun zad zadruga zaffar zaffer zafree zag zagged zaibatsu zain zak zakkeu zalambdodont zaman zamang zamarra zamarro zambo zamboorak zamindar zamindari zamorin zamouse zander zandmole zanella zant zante zantewood zanthoxylum zantiote zany zanyish zanyism zanyship zanze zapas zapatero zaphara zaphrentid zaphrentoid zapota zaptiah zaptieh zapupe zaqqum zar zarabanda zaratite zareba zarf zarnich zarp zarzuela zat zati zattare zax zayat zayin zeal zealful zealless zeallessness zealot zealotic zealotical zealotism zealotist zealotry zealous zealously zealousness zealousy zealproof zebra zebraic zebralike zebrass zebrawood zebrine zebrinny zebroid zebrula zebrule zebu zebub zeburro zecchini zecchino zechin zed zedoary zee zeed zehner zein zeism zeist zel zelator zelatrice zelatrix zemeism zemi zemimdari zemindar zemmi zemni zemstroist zemstvo zenana zendician zendik zendikite zenick zenith zenithal zenithward zenithwards zenocentric zenographic zenographical zenography zenu zeolite zeolitic zeolitization zeolitize zeoscope zepharovichite zephyr zephyrean zephyrless zephyrlike zephyrous zephyrus zephyry zeppelin zequin zer zerda zermahbub zero zeroaxial zeroize zerumbet zest zestful zestfully zestfulness zesty zeta zetacism zetetic zeuctocoelomatic zeuctocoelomic zeuglodon zeuglodont zeuglodontoid zeugma zeugmatic zeugmatically zeunerite zeuzerian ziamet ziara ziarat zibeline zibet zibethone zibetone zibetum ziega zieger zietrisikite ziffs zig ziganka ziggurat zigzag zigzagged zigzaggedly zigzaggedness zigzagger zigzaggery zigzaggy zigzagwise zihar zikurat zillah zimarra zimb zimbabwe zimbalon zimbaloon zimbi zimentwater zimme zimmi zimmis zimocca zinc zincate zincic zincide zinciferous zincification zincify zincing zincite zincize zincke zincky zinco zincograph zincographer zincographic zincographical zincography zincotype zincous zincum zincuret zinfandel zing zingaresca zingel zingerone zingiberaceous zingiberene zingiberol zingiberone zink zinkenite zinnwaldite zinsang zinyamunga zinziberaceous zip ziphian ziphioid zipper zipping zippingly zippy zira zirai zircite zircofluoride zircon zirconate zirconia zirconian zirconic zirconiferous zirconifluoride zirconium zirconofluoride zirconoid zirconyl zirkelite zither zitherist zizz zloty zo zoa zoacum zoanthacean zoantharian zoanthid zoanthodeme zoanthodemic zoanthoid zoanthropy zoarcidae zoaria zoarial zoarium zobo zobtenite zocco zoccolo zodiac zodiacal zodiophilous zoea zoeaform zoeal zoeform zoehemera zoehemerae zoetic zoetrope zoetropic zogan zogo zoiatria zoiatrics zoic zoid zoidiophilous zoidogamous zoisite zoisitization zoism zoist zoistic zokor zoll zolle zollpfund zolotink zolotnik zombi zombie zombiism zomotherapeutic zomotherapy zonal zonality zonally zonar zonary zonate zonated zonation zone zoned zoneless zonelet zonelike zonesthesia zonic zoniferous zoning zonite zonitid zonochlorite zonociliate zonoid zonolimnetic zonoplacental zonoskeleton zonular zonule zonulet zonure zonurid zonuroid zoo zoobenthos zooblast zoocarp zoocecidium zoochemical zoochemistry zoochemy zoochore zoocoenocyte zoocultural zooculture zoocurrent zoocyst zoocystic zoocytial zoocytium zoodendria zoodendrium zoodynamic zoodynamics zooecia zooecial zooecium zooerastia zooerythrin zoofulvin zoogamete zoogamous zoogamy zoogene zoogenesis zoogenic zoogenous zoogeny zoogeographer zoogeographic zoogeographical zoogeographically zoogeography zoogeological zoogeologist zoogeology zoogloea zoogloeal zoogloeic zoogonic zoogonidium zoogonous zoogony zoograft zoografting zoographer zoographic zoographical zoographically zoographist zoography zooid zooidal zooidiophilous zooks zoolater zoolatria zoolatrous zoolatry zoolite zoolith zoolithic zoolitic zoologer zoologic zoological zoologically zoologicoarchaeologist zoologicobotanical zoologist zoologize zoology zoom zoomagnetic zoomagnetism zoomancy zoomania zoomantic zoomantist zoomechanical zoomechanics zoomelanin zoometric zoometry zoomimetic zoomimic zoomorph zoomorphic zoomorphism zoomorphize zoomorphy zoon zoonal zoonerythrin zoonic zoonist zoonite zoonitic zoonomia zoonomic zoonomical zoonomist zoonomy zoonosis zoonosologist zoonosology zoonotic zoons zoonule zoopaleontology zoopantheon zooparasite zooparasitic zoopathological zoopathologist zoopathology zoopathy zooperal zooperist zoopery zoophagan zoophagous zoopharmacological zoopharmacy zoophile zoophilia zoophilic zoophilism zoophilist zoophilite zoophilitic zoophilous zoophily zoophobia zoophobous zoophoric zoophorus zoophysical zoophysics zoophysiology zoophytal zoophyte zoophytic zoophytical zoophytish zoophytography zoophytoid zoophytological zoophytologist zoophytology zooplankton zooplanktonic zooplastic zooplasty zoopraxiscope zoopsia zoopsychological zoopsychologist zoopsychology zooscopic zooscopy zoosis zoosmosis zoosperm zoospermatic zoospermia zoospermium zoosphere zoosporange zoosporangia zoosporangial zoosporangiophore zoosporangium zoospore zoosporic zoosporiferous zoosporocyst zoosporous zootaxy zootechnic zootechnics zootechny zooter zoothecia zoothecial zoothecium zootheism zootheist zootheistic zootherapy zoothome zootic zootomic zootomical zootomically zootomist zootomy zoototemism zootoxin zootrophic zootrophy zootype zootypic zooxanthella zooxanthellae zooxanthin zoozoo zopilote zorgite zoril zorilla zorillo zorrillo zorro zoster zosteriform zounds zowie zuccarino zucchetto zucchini zudda zugtierlast zugtierlaster zuisin zumatic zumbooruk zunyite zupanate zuurveldt zuza zwanziger zwieback zwitter zwitterion zwitterionic zyga zygadenine zygaenid zygal zygantra zygantrum zygapophyseal zygapophysis zygion zygite zygnemataceous zygobranch zygobranchiate zygodactyl zygodactylic zygodactylism zygodactylous zygodont zygolabialis zygoma zygomata zygomatic zygomaticoauricular zygomaticoauricularis zygomaticofacial zygomaticofrontal zygomaticomaxillary zygomaticoorbital zygomaticosphenoid zygomaticotemporal zygomaticum zygomaticus zygomaxillare zygomaxillary zygomorphic zygomorphism zygomorphous zygomycete zygomycetous zygon zygoneure zygophore zygophoric zygophyceous zygophyllaceous zygophyte zygopleural zygopteran zygopterid zygopteron zygopterous zygose zygosis zygosperm zygosphenal zygosphene zygosphere zygosporange zygosporangium zygospore zygosporic zygosporophore zygostyle zygotactic zygotaxis zygote zygotene zygotic zygotoblast zygotoid zygotomere zygous zygozoospore zymase zyme zymic zymin zymite zymogen zymogene zymogenesis zymogenic zymogenous zymoid zymologic zymological zymologist zymology zymolyis zymolysis zymolytic zymome zymometer zymomin zymophore zymophoric zymophosphate zymophyte zymoplastic zymoscope zymosimeter zymosis zymosterol zymosthenic zymotechnic zymotechnical zymotechnics zymotechny zymotic zymotically zymotize zymotoxic zymurgy zythem zythum miller-5.6.2/doc/data/factorial-example.sh000066400000000000000000000004741354153536500204360ustar00rootroot00000000000000mlr --opprint --from data/small put ' func f(n) { if (is_numeric(n)) { if (n > 0) { return n * f(n-1); } else { return 1; } } # implicitly return absent-null if non-numeric } $ox = f($x + NR); $oi = f($i); ' miller-5.6.2/doc/data/fe-example-1.sh000066400000000000000000000000661354153536500172170ustar00rootroot00000000000000mlr --from data/small put '$xy = sqrt($x**2 + $y**2)' miller-5.6.2/doc/data/fe-example-2.sh000066400000000000000000000001261354153536500172150ustar00rootroot00000000000000mlr --from data/small put 'func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y)' miller-5.6.2/doc/data/fe-example-3.mlr000066400000000000000000000000741354153536500174000ustar00rootroot00000000000000func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y) miller-5.6.2/doc/data/fe-example-4.mlr000066400000000000000000000000541354153536500173770ustar00rootroot00000000000000func f(a, b) { return sqrt(a**2 + b**2) } miller-5.6.2/doc/data/feature-count.mlr000066400000000000000000000003631354153536500177770ustar00rootroot00000000000000for (key in $*) { @key_counts[key] += 1; } @record_count += 1; end { for (key in @key_counts) { @key_fraction[key] = @key_counts[key] / @record_count } emit @record_count; emit @key_counts, "key"; emit @key_fraction,"key" } miller-5.6.2/doc/data/features.json000066400000000000000000000007511354153536500172140ustar00rootroot00000000000000{ "qoh": 29874, "rate": 1.68, "latency": 0.02 } { "name": "alice", "uid": 572 } { "qoh": 1227, "rate": 1.01, "latency": 0.07 } { "qoh": 13458, "rate": 1.72, "latency": 0.04 } { "qoh": 56782, "rate": 1.64 } { "qoh": 23512, "rate": 1.71, "latency": 0.03 } { "qoh": 9876, "rate": 1.89, "latency": 0.08 } { "name": "bill", "uid": 684 } { "name": "chuck", "uid2": 908 } { "name": "dottie", "uid": 440 } { "qoh": 0, "rate": 0.40, "latency": 0.01 } { "qoh": 5438, "rate": 1.56, "latency": 0.17 } miller-5.6.2/doc/data/fibo-cached.sh000066400000000000000000000010421354153536500171550ustar00rootroot00000000000000mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' func f(n) { @fcount += 1; # count number of calls to the function if (is_present(@fcache[n])) { # cache hit return @fcache[n] } else { # cache miss num rv = 1; if (n >= 2) { rv = f(n-1) + f(n-2) # recurse } @fcache[n] = rv; return rv } } @fcount = 0; $o = f($i); $fcount = @fcount; ' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds miller-5.6.2/doc/data/fibo-uncached.sh000066400000000000000000000006201354153536500175210ustar00rootroot00000000000000mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' func f(n) { @fcount += 1; # count number of calls to the function if (n < 2) { return 1 } else { return f(n-1) + f(n-2) # recurse } } @fcount = 0; $o = f($i); $fcount = @fcount; ' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds miller-5.6.2/doc/data/fill-down.csv000066400000000000000000000000261354153536500171060ustar00rootroot00000000000000a,b,c 1,,3 4,5,6 7,,9 miller-5.6.2/doc/data/filter-multiline-example.txt000066400000000000000000000001671354153536500221630ustar00rootroot00000000000000mlr --opprint filter ' ($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5) ' then stats2 -a corr -f x,y data/medium miller-5.6.2/doc/data/flins.csv000066400000000000000000000005521354153536500163320ustar00rootroot00000000000000county,tiv_2011,tiv_2012,line Seminole,22890.55,20848.71,Residential Miami Dade,1158674.85,1076001.08,Residential Palm Beach,1174081.5,1856589.17,Residential Miami Dade,2850980.31,2650932.72,Commercial Highlands,23006.41,19757.91,Residential Highlands,49155.16,47362.96,Residential Duval,1731888.18,2785551.63,Residential St. Johns,29589.12,35207.53,Residential miller-5.6.2/doc/data/flins.json000066400000000000000000000014201354153536500165030ustar00rootroot00000000000000{ "county": "Seminole", "tiv_2011": 22890.55, "tiv_2012": 20848.71, "line": "Residential" } { "county": "Miami Dade", "tiv_2011": 1158674.85, "tiv_2012": 1076001.08, "line": "Residential" } { "county": "Palm Beach", "tiv_2011": 1174081.5, "tiv_2012": 1856589.17, "line": "Residential" } { "county": "Miami Dade", "tiv_2011": 2850980.31, "tiv_2012": 2650932.72, "line": "Commercial" } { "county": "Highlands", "tiv_2011": 23006.41, "tiv_2012": 19757.91, "line": "Residential" } { "county": "Highlands", "tiv_2011": 49155.16, "tiv_2012": 47362.96, "line": "Residential" } { "county": "Duval", "tiv_2011": 1731888.18, "tiv_2012": 2785551.63, "line": "Residential" } { "county": "St. Johns", "tiv_2011": 29589.12, "tiv_2012": 35207.53, "line": "Residential" } miller-5.6.2/doc/data/for-oosvar-example-0a.txt000066400000000000000000000007721354153536500212730ustar00rootroot00000000000000# Parentheses are optional for single key: for (k1, v in @a["b"]["c"]) { ... } for ((k1), v in @a["b"]["c"]) { ... } # Parentheses are required for multiple keys: for ((k1, k2), v in @a["b"]["c"]) { ... } # Loop over subhashmap of a variable for ((k1, k2, k3), v in @a["b"]["c"]) { ... } # Ditto for ((k1, k2, k3), v in @a { ... } # Loop over variable starting from basename for ((k1, k2, k3), v in @* { ... } # Loop over all variables (k1 is bound to basename) miller-5.6.2/doc/data/for-oosvar-example-0b.sh000066400000000000000000000002131354153536500210550ustar00rootroot00000000000000mlr -n put --jknquoteint -q ' begin { @myvar = { 1: 2, 3: { 4 : 5 }, 6: { 7: { 8: 9 } } } } end { dump } ' miller-5.6.2/doc/data/for-oosvar-example-0c.sh000066400000000000000000000003551354153536500210650ustar00rootroot00000000000000mlr -n put --jknquoteint -q ' begin { @myvar = { 1: 2, 3: { 4 : 5 }, 6: { 7: { 8: 9 } } } } end { for (k, v in @myvar) { print "key=" . k . ",valuetype=" . typeof(v); } } ' miller-5.6.2/doc/data/for-oosvar-example-0d.sh000066400000000000000000000004161354153536500210640ustar00rootroot00000000000000mlr -n put --jknquoteint -q ' begin { @myvar = { 1: 2, 3: { 4 : 5 }, 6: { 7: { 8: 9 } } } } end { for ((k1, k2), v in @myvar) { print "key1=" . k1 . ",key2=" . k2 . ",valuetype=" . typeof(v); } } ' miller-5.6.2/doc/data/for-oosvar-example-0e.sh000066400000000000000000000004211354153536500210610ustar00rootroot00000000000000mlr -n put --jknquoteint -q ' begin { @myvar = { 1: 2, 3: { 4 : 5 }, 6: { 7: { 8: 9 } } } } end { for ((k1, k2), v in @myvar[6]) { print "key1=" . k1 . ",key2=" . k2 . ",valuetype=" . typeof(v); } } ' miller-5.6.2/doc/data/for-srec-example-1.sh000066400000000000000000000003321354153536500203410ustar00rootroot00000000000000mlr --pprint --from data/for-srec-example.tbl put ' $sum1 = $f1 + $f2 + $f3; $sum2 = 0; $sum3 = 0; for (key, value in $*) { if (key =~ "^f[0-9]+") { $sum2 += value; $sum3 += $[key]; } } ' miller-5.6.2/doc/data/for-srec-example-2.sh000066400000000000000000000002371354153536500203460ustar00rootroot00000000000000mlr --from data/small --opprint put ' $sum1 = 0; $sum2 = 0; for (k,v in $*) { if (is_numeric(v)) { $sum1 +=v; $sum2 += $[k]; } } ' miller-5.6.2/doc/data/for-srec-example-3.sh000066400000000000000000000002121354153536500203400ustar00rootroot00000000000000mlr --from data/small --opprint put ' sum = 0; for (k,v in $*) { if (is_numeric(v)) { sum += $[k]; } } $sum = sum ' miller-5.6.2/doc/data/for-srec-example.tbl000066400000000000000000000001471354153536500203560ustar00rootroot00000000000000label1 label2 f1 f2 f3 blue green 100 240 350 red green 120 11 195 yellow blue 140 0 240 miller-5.6.2/doc/data/fraction-example.csv000066400000000000000000000004071354153536500204540ustar00rootroot00000000000000u=female,v=red,n=2458 u=female,v=green,n=192 u=female,v=blue,n=337 u=female,v=purple,n=468 u=female,v=yellow,n=3 u=female,v=orange,n=17 u=male,v=red,n=143 u=male,v=green,n=227 u=male,v=blue,n=2034 u=male,v=purple,n=12 u=male,v=yellow,n=1192 u=male,v=orange,n=448 miller-5.6.2/doc/data/full-reorg.sh000066400000000000000000000002641354153536500171140ustar00rootroot00000000000000mlr put ' begin { @i_cumu = 0; } @i_cumu += $i; $* = { "z": $x + y, "KEYFIELD": $a, "i": @i_cumu, "b": $b, "y": $x, "x": $y, }; ' data/small miller-5.6.2/doc/data/headerless.csv000066400000000000000000000001021354153536500173250ustar00rootroot00000000000000John,23,present Fred,34,present Alice,56,missing Carol,45,present miller-5.6.2/doc/data/het-bool.csv000066400000000000000000000000711354153536500167240ustar00rootroot00000000000000name,reachable barney,false betty,true fred,true wilma,1 miller-5.6.2/doc/data/het.csv000066400000000000000000000003521354153536500157750ustar00rootroot00000000000000resource,loadsec,ok /path/to/file,0.45,true record_count,resource 100,/path/to/file resource,loadsec,ok /path/to/second/file,0.32,true record_count,resource 150,/path/to/second/file resource,loadsec,ok /some/other/path,0.97,false miller-5.6.2/doc/data/het.dkvp000066400000000000000000000003461354153536500161510ustar00rootroot00000000000000resource=/path/to/file,loadsec=0.45,ok=true record_count=100,resource=/path/to/file resource=/path/to/second/file,loadsec=0.32,ok=true record_count=150,resource=/path/to/second/file resource=/some/other/path,loadsec=0.97,ok=false miller-5.6.2/doc/data/if-chain.sh000066400000000000000000000001641354153536500165130ustar00rootroot00000000000000mlr put ' if (NR == 2) { ... } elif (NR ==4) { ... } elif (NR ==6) { ... } else { ... } ' miller-5.6.2/doc/data/inout.csv000066400000000000000000000001061354153536500163500ustar00rootroot00000000000000a_in,a_out,b_in,b_out 436,490,446,195 526,320,963,780 220,888,705,831 miller-5.6.2/doc/data/iqr1.sh000066400000000000000000000001401354153536500157030ustar00rootroot00000000000000mlr --oxtab stats1 -f x -a p25,p75 \ then put '$x_iqr = $x_p75 - $x_p25' \ data/medium miller-5.6.2/doc/data/iqrn.sh000066400000000000000000000002741354153536500160100ustar00rootroot00000000000000mlr --oxtab stats1 --fr '[i-z]' -a p25,p75 \ then put 'for (k,v in $*) { if (k =~ "(.*)_p25") { $["\1_iqr"] = $["\1_p75"] - $["\1_p25"] } }' \ data/medium miller-5.6.2/doc/data/join-left-example.csv000066400000000000000000000000701354153536500205320ustar00rootroot00000000000000id,name 100,alice 200,bob 300,carol 400,david 500,edgar miller-5.6.2/doc/data/join-right-example.csv000066400000000000000000000003761354153536500207260ustar00rootroot00000000000000status,idcode present,400 present,100 missing,200 present,100 present,200 missing,100 missing,200 present,300 missing,600 present,400 present,400 present,300 present,100 missing,400 present,200 present,200 present,200 present,200 present,400 present,300 miller-5.6.2/doc/data/join-u-left.csv000066400000000000000000000001531354153536500173450ustar00rootroot00000000000000hostname,ipaddr nadir.east.our.org,10.3.1.18 zenith.west.our.org,10.3.1.27 apoapsis.east.our.org,10.4.5.94 miller-5.6.2/doc/data/join-u-right.csv000066400000000000000000000004001354153536500175230ustar00rootroot00000000000000ipaddr,timestamp,bytes 10.3.1.27,1448762579,4568 10.3.1.18,1448762578,8729 10.4.5.94,1448762579,17445 10.3.1.27,1448762589,12 10.3.1.18,1448762588,44558 10.4.5.94,1448762589,8899 10.3.1.27,1448762599,0 10.3.1.18,1448762598,73425 10.4.5.94,1448762599,12200 miller-5.6.2/doc/data/json-example-1.json000066400000000000000000000033411354153536500201340ustar00rootroot00000000000000{ "color": "yellow", "shape": "triangle", "flag": 1, "i": 11, "u": 0.6321695890307647, "v": 0.9887207810889004, "w": 0.4364983936735774, "x": 5.7981881667050565 } { "color": "red", "shape": "square", "flag": 1, "i": 15, "u": 0.21966833570651523, "v": 0.001257332190235938, "w": 0.7927778364718627, "x": 2.944117399716207 } { "color": "red", "shape": "circle", "flag": 1, "i": 16, "u": 0.20901671281497636, "v": 0.29005231936593445, "w": 0.13810280912907674, "x": 5.065034003400998 } { "color": "red", "shape": "square", "flag": 0, "i": 48, "u": 0.9562743938458542, "v": 0.7467203085342884, "w": 0.7755423050923582, "x": 7.117831369597269 } { "color": "purple", "shape": "triangle", "flag": 0, "i": 51, "u": 0.4355354501763202, "v": 0.8591292672156728, "w": 0.8122903963006748, "x": 5.753094629505863 } { "color": "red", "shape": "square", "flag": 0, "i": 64, "u": 0.2015510269821953, "v": 0.9531098083420033, "w": 0.7719912015786777, "x": 5.612050466474166 } { "color": "purple", "shape": "triangle", "flag": 0, "i": 65, "u": 0.6842806710360729, "v": 0.5823723856331258, "w": 0.8014053396013747, "x": 5.805148213865135 } { "color": "yellow", "shape": "circle", "flag": 1, "i": 73, "u": 0.6033649768090676, "v": 0.42370791211283076, "w": 0.639785141788745, "x": 7.006414410739997 } { "color": "yellow", "shape": "circle", "flag": 1, "i": 87, "u": 0.2856563669907619, "v": 0.8335161523929382, "w": 0.6350579406858395, "x": 6.350035616385983 } { "color": "purple", "shape": "square", "flag": 0, "i": 91, "u": 0.25992639068499135, "v": 0.824321938346312, "w": 0.7237347131411271, "x": 6.854221024776646 } miller-5.6.2/doc/data/json-example-2.json000066400000000000000000000035341354153536500201410ustar00rootroot00000000000000{ "flag": 1, "i": 11, "attributes": { "color": "yellow", "shape": "triangle" }, "values": { "u": 0.632170, "v": 0.988721, "w": 0.436498, "x": 5.798188 } } { "flag": 1, "i": 15, "attributes": { "color": "red", "shape": "square" }, "values": { "u": 0.219668, "v": 0.001257, "w": 0.792778, "x": 2.944117 } } { "flag": 1, "i": 16, "attributes": { "color": "red", "shape": "circle" }, "values": { "u": 0.209017, "v": 0.290052, "w": 0.138103, "x": 5.065034 } } { "flag": 0, "i": 48, "attributes": { "color": "red", "shape": "square" }, "values": { "u": 0.956274, "v": 0.746720, "w": 0.775542, "x": 7.117831 } } { "flag": 0, "i": 51, "attributes": { "color": "purple", "shape": "triangle" }, "values": { "u": 0.435535, "v": 0.859129, "w": 0.812290, "x": 5.753095 } } { "flag": 0, "i": 64, "attributes": { "color": "red", "shape": "square" }, "values": { "u": 0.201551, "v": 0.953110, "w": 0.771991, "x": 5.612050 } } { "flag": 0, "i": 65, "attributes": { "color": "purple", "shape": "triangle" }, "values": { "u": 0.684281, "v": 0.582372, "w": 0.801405, "x": 5.805148 } } { "flag": 1, "i": 73, "attributes": { "color": "yellow", "shape": "circle" }, "values": { "u": 0.603365, "v": 0.423708, "w": 0.639785, "x": 7.006414 } } { "flag": 1, "i": 87, "attributes": { "color": "yellow", "shape": "circle" }, "values": { "u": 0.285656, "v": 0.833516, "w": 0.635058, "x": 6.350036 } } { "flag": 0, "i": 91, "attributes": { "color": "purple", "shape": "square" }, "values": { "u": 0.259926, "v": 0.824322, "w": 0.723735, "x": 6.854221 } } miller-5.6.2/doc/data/json-example-3.json000066400000000000000000000001521354153536500201330ustar00rootroot00000000000000{ "label": "orange", "values": [12.2, 13.8, 17.2] } { "label": "purple", "values": [27.0, 32.4] } miller-5.6.2/doc/data/keyed-mean-with-oosvars.sh000066400000000000000000000003301354153536500215120ustar00rootroot00000000000000mlr --opprint put -q ' @x_sum[$a][$b] += $x; @x_count[$a][$b] += 1; end{ for ((a, b), v in @x_sum) { @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b]; } emit @x_mean, "a", "b" } ' data/medium miller-5.6.2/doc/data/keyed-min-max-with-oosvars.sh000066400000000000000000000002231354153536500221410ustar00rootroot00000000000000mlr --opprint --from data/medium put -q ' @min[$a] = min(@min[$a], $x); @max[$a] = max(@max[$a], $x); end{ emit (@min, @max), "a"; } ' miller-5.6.2/doc/data/label-example.txt000066400000000000000000000021511354153536500177500ustar00rootroot00000000000000% grep -v '^#' /etc/passwd | mlr --nidx --fs : --opprint label name,password,uid,gid,gecos,home_dir,shell | head name password uid gid gecos home_dir shell nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false root * 0 0 System Administrator /var/root /bin/sh daemon * 1 1 System Services /var/root /usr/bin/false _uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico _taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false _networkd * 24 24 Network Services /var/networkd /usr/bin/false _installassistant * 25 25 Install Assistant /var/empty /usr/bin/false _lp * 26 26 Printing Services /var/spool/cups /usr/bin/false _postfix * 27 27 Postfix Mail Server /var/spool/postfix /usr/bin/false miller-5.6.2/doc/data/linreg-example.jpg000066400000000000000000004224311354153536500201210ustar00rootroot00000000000000ÿØÿàJFIFHHÿáExifMM*bj1r2z;އi–HHPicasa2015:05:05 20:52:58Picasa0220Ø ô :¤ !ì1903:12:31 16:00:00d07c21815beaf3b97d7f55b4f45bc398ÿá {http://ns.adobe.com/xap/1.0/ Picasa ÿípPhotoshop 3.08BIM7Z%GPPicasa< 160000-08007190312318BIM%Z8ÑXŒ;ÀäºQÂHm­.ÿâDICC_PROFILE4applmntrRGB XYZ ß acspAPPLöÖÓ-appldescPbdscm´cprtÐ#wtptôrXYZgXYZbXYZ0rTRCD aargP vcgtp0ndin >chadà,mmod (bTRCD gTRCD aabgP aaggP descDisplaymluc" hrHR¨koKR ¼nbNOÈidÚhuHUìcsCZdaDKukUA2arNitITbroROvesESvheILˆnlNLžfiFI´zhTW ÄviVNÐskSKÞzhCN ÄruRU$ôfrFRms.caES@thTH XesXLvdeDEdenUStptBR†plPLželGR"°svSEÒtrTRâjaJPöptPTLCD u bojiÎì·ì LCDFarge-LCDLCD WarnaSzínes LCDBarevný LCDLCD-farveskærm>;L>@>289 LCD LCD EDHF)LCD coloriLCD color LCD æÑâÕàÙKleuren-LCDVäri-LCD_i‚r LCDLCD MàuFarebné LCD&25B=>9 -48A?;59LCD couleurWarna LCDLCD en colorLCD *5Farb-LCDColor LCDLCD ColoridoKolor LCDˆ³ÇÁɼ· ¿¸Ì½· LCDFärg-LCDRenkli LCD0«0é0ü LCDLCD a CorestextCopyright Apple Inc., 2015XYZ óÊXYZ qÀ9ŠgXYZ a#¹æöXYZ #ò ½Ðcurv #(-26;@EJOTY^chmrw|†‹•šŸ£¨­²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿparaffò§ YÐ vcgtndin6§@U€LÀžÀ%€ ÀPT@333333sf32 røÿÿóºýrÿÿûÿÿý¤ÙÀqmmod Ì×ÿÀ:ôÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛC     ÿÛC  ÿÝ?ÿÚ ?ûò€ ( € ( € ( € ( € ( € !@äœ 6Ï4oÚ³öñ™áýcHø‘m-·Š|]uá_³Ê¿lÕ­ÚešÕAPC)·›“…; âœ?/.¼ÉÉz%vÿ¯AI¨s_NV“õ{…¸zÒ¹d¦€ Ö€ ƒÒ€ Ö€ ƒÒ€ Z2=h #Ö€ Š2:æ€ Ž¹ #×õ #®h—ÚÛÉu;…Ž$g‘½Iü¤ÚŠmôNM$a|-ø¥à_´¯ŠŸ üG¯áýnÛí^¥²¥Ä{Šî€=TõªåF×[¤þõuø¤¥{tm}ÛAéR0 € ( € ( € ( € ( € ( ÿÐûò€ ( € ( € ( € ( € ( €úäÿxR—ÂÀü÷ý—>(xëáïÂ?‚:ƒõÁgkâßÚÛÅúGˆ"6±Iö«3w­Îb̈Æ?ÞCnB­òã8$Á%8P‹ÛÙÉüÒv"³i×—_iÆ×$°Ô?o>:|tÒ?mí_Âãá÷ŒüYkðÿDѼ;§çM:i6¦¡$Ð;KÉå" Rª ;HOó­õ<º©.f““[&”¥¦û´·ºékjÎùP…LÙᣤ}Åݧ(E·éw·®©Y-¸~5þÕßµÇÇ/„ÿ~~ÑSü9Ð2|jø­¤ŸÚ×âà øš x+Jø}ðfç^†öæÖ%_êW)ct’ù“–Ý"¨€Ÿ¼ qSu'CëÞ\Ö‹NÊÒ’]ïmlì»§twU:ucIì’ækvÚOådþ{ÞÖ:ÿ†?´çíûhkþEã=Kàü7¾ñWÅ-[NðÊGª<–÷‚Æ{HoãakÒo˜³Æí°1œž‰Rs¯6£Ó“JÏZªMEïðò;뽕ާ4jrЊ’¼¥)¤õøiµyZËâæ‹W¶kíØ~Ï´—Æ?‚2ø÷áoÚÃâ¾¹ñNø_â ÇD¿ðÿ‚|Ûùmo,ã•­lc/,Äʾk(Û•g ü¢bâðÜïw7-"ŸÝ×ÕÛkRJx¥ý×MMwÖs޾w½}Èÿh?Úwâ×Ç_|ðçì“ñGÄ_->#øÛYÑõÛßø#ȽK[]6k‰moã ’/–LNFÝûK+ *ÓT–/—xû9I÷Vœ"žûÝòõÒMÛK«m}^RKÞRKËTßü•ŽCâOí[ûEÿÁ?|eñsáW¾,^|U´Ò> Éãï‡ú׊쭡¾·ž;…³šÆé­$š!,Ê­±[ Ë“Ž3I<5fšR„©¥§J¼ê-ë­œ%·ÏsEGߥ=á%;ë­ág¦š))yìü¯êÿ ¾þÝ¿<]à‰:Çíwãë-REÿ…£áØXÙØÃ¶åüí'È€IÅ.ÅÈì2Äœ[¸ª5\¼Rjï{­Ÿ£{ö99åVŠ©i6ºYî¶oNžz+|}ý¸>0øÀ^4øåà¿ÛÃÆ~&ñ†¼C<Öþðÿð6Q^[+AìɃå–´å$f ©ÁJgC—ßS”nÉ>y$ÜvÑ_ÝßšÝÝçÍV2÷Zæµ®Ú²vºïÖKKj¯Ôý$ñ—­¼ð¯TøŸ¨Y™"Ò¼=.©5¼g–Àe(>¸ÆkÍ«ËðbÏà^ |-sc+Úm½âéÅüÅ…‰[±rQÝAû‡tÔ©:jO]sémî*êÜ»¤Þ¶ßRoªg~^º­“ïw£í+Áûq~ÙÿµìEñÖ-#JÕíüU£|rÒ¢Ó¾iÚÌöÂâbÑB|ä–Á¼õ‘‹²2ÈQ)Õ–5ÎÝã/+ÚIôÓN[jïk0ÑRŽ%ß–Ö”mÖ×M?=š{Zèè?jOü\ø¥|#ø=ñWþ ¨è2Üi’xßZð—„WPñ‡ŠõÖ0‹§ØÁepY«4­$‚"È%ÉÜÍZJTg‰’‚vKD»ßyiÕz+¿Dg8R‹“Wo[ö¶ÑÚïäÝ‘æþÚµK~Åßn¾ü`×ïüMàoŒ~ðß‚‘I®ú¶µŽˆ©9F•9õ“iöÙ;¥øoç©Êê?´Çí—áÙ_Ǿ Ñþ=.£ã¯þÓ:W€tOjÚ¹’úÆîîÇgÛ E¹ yå; BÊ™X*”ð³Z{G8˯Ã*‘¿OåNÝú³Z´åAÖMóZ1”zn¢í¾»½|ö=+Q¾ý¦¿dÏÚá÷Ã~Ó×Å/ ü[´Öt«ÕñV™cou¢êÖº|׉=©³‚1äH‘J· ƒÖ“;Ô¤ô÷%(¾ºY4ýS¾Û¢ã{•—IÅ5ÒÏkuºkî~GÎk?|<ýÿfÙ³Ãß¼GàKü<¿×·V¸§uRÿnJ^–¶Ÿ;?ÃÿÙMðÁ?ˆ­¼oyqÄ wÄZœÚ‹Ø"½‹jÏ#º*‡™ ÆìsŠÃIb0+ Ý—+×›núßk0¯(c¾²õw‹·øcÛÿ%2þþÃÚ/Àïˆ~ñþ™ñÿP>ø7oðúÖÊm>8ÖꦎQxÌ +!òÀØ>^MvV®ëbñ†µ¬âß—/5¾þfqû4ãJûÛçÍkÿé+üÎsÄ_°çÆÿ|Fñ·ŠdÏÚÆO‡Z/ĽMµOèW^‡S0j/E-î+IÙ¦‘óVdÜŠæ„Ti{7ȯe}UÛm'Ù¶ß«v±ÑV¬ªITûI%wªvÑ]wKEm4G™þÑß ¾~É>ø7s§ücø“à­_ÃÞÔ4KoŒ7ú ñ{nd†I¬u­Á˜K4˜š'ù*ÀZr”eŒEhóE+[F£~Tž÷Ý®õæw»d*N8hÅÞV“w¾©Ëw¾Ïm–›ÿðJø¶/üpøÕ¨xËÅ>(ÑükãK4?ø³F}׈~ϧÅ÷qÛ¬Qˆ­¼ÝÑDãdK‚ÝkZjTðQ„´÷¤ì÷³²×Í´ßODc$§Ž•Eü±OµÓ“ÓÉ&–ïTÝõ²Öÿ‚…ü5ø…ñGöý›´o‡~5Õü1©[øÓZº‡Å:f˜·Ù¯pÈeI£DìL¬WrÈB°b aJ XÙÊöq¥'«§.zjÏÖ.N×OK­™Ó.W…å{9Ç×gªùúšÞÿ‚u'ŒÄo~׿æøâ‰ž_ êÚ…†ˆšM¦—££Hémc´ó$óÞG%ÔÅ\Ôe‡t£uÌÔ›½ÝÖÞVM:»ÜÉ5e¯*i.ÊVæó÷¬¯è»ðì+ñ¼gàÝGöˆý®5Oø{áÄ’Iàý  æ¼Òµ³ÚÇ>¥:;›¹cŠF Qb\œ•&­Ê2rœ×¼ÓW读K»Ö÷ºWÑáeAµÓ·WmRo²zég¢<óPÿ‚M|\Õ¿f]Cö%ºý¹5›?…1A$^Ò4Zè¤~i–(/¯Ø]@‚V4…ÜÈÈ3ÏZôç)^på³²µãk6ºÚËÊúØÖ¦Ý5hÊ÷_âÝ&ïmÞ÷g×:ƒ/Ã+_|EԢצmtýjñ,>Íþbòäaf†ùrqëF!SÄsE­%{¯Rh¹Ñå×T|Õ£Á8~7ižÒÿf¦ý¸¼GÁmöÓ¼1¤è‚Ë^kdW‹K“XŽ`ÿeRæ8Òb€)“®j•IÂpF¤ákh¬í³’ÙýÉ>Â’Š‹TÕ¯;_{yzßîÐé~&Á5¾ü|ø‡ñÇÿ´O‰o<^Þ5ðºxsö6Å„4ÕŠØœ–3´ÁeiØî,Š8„©Þ”’vœš|Ëumcmì“鱤gËV2è“VÖÚèþþû£?Uýƒ~:iÞ)ðÆ‡µãÚüDðo‚æð–¥âø&;øu½*IRPe¶§—r¦8ÿz²Å~eÁ"´jØŠ•c£¨¢¥ÿnsY®ß´Õk¶ˆÍ+Q7öqùô}^w1ô/ø%çŠ,ôOˆ>ñgíi¯øšÏâŒ<=â½Jû\ðÝ©¾M_M»¶¸’O2.3 ©k KE*äéE>Z|ª+HË™|÷O×{ôì*±öÎR“ÖQå{|šÿ-}Ouñ'ìÿiâ/ÚƒÂß´Ôž$ž+ xKVУÑÖиKé­¥iL›²¥ ²€ î<ŒR„TjÎÌ’û›©S\Є•·øXù‹öÙýo< ðÅZG„¼q¯MwñKö–ðLj®/´Í9VçCioì-Ù¡ÀpÞJÀ%ë€GÌ0 eJ.”ðÔ®ÚŒ¦ÓÓNnyô['.»­ßmªÏÚÆ¬ßXÅ[ÒËñ=WÀ±Å;ÏŽúoÇ¿ÚöšŸâ&©á"ÿLð%¯„àÒ­4Át‚)¯¦Dw3Þ´ca@¶Æ¹®‹Ç–m+Jqqoû­¦Ò쮓wnö]ŒcÍEvÔZ~­_Wk/ÀÃÒ¿àšº—Ão† t߀ÿ´¡á¿ü!Ñî´Æ7:w6úžŸs ’{;Û ê²DÅPŽ®¬€«hœçí½¤m¬cu{¨¤»Ý>«^º¦Â2‡,¯ñ9&´³}6µžÏOKû3þÎ^9ø;ªxŸâÅïßÄøÆê 5}Jêg§YC †ÖÂÁ]ÒÖ’rÒ99wb¥XRä^­½ïþ^ENr©4Ý••’_Ö­÷~‹MXÚßÝoûæ‘!†þéÿ¾hÃtÿß4a¿ºïš9þéü¨Áþéÿ¾hÁþéÿ¾hÃtÿß4`ÿtÿß4a¿ºïš0ßÝ?÷ÍoîŸûæ€ ÕOýó@û§þù  ýÓÿ|Іþéÿ¾hB»,lO S@+)éÐŒPP@ÿÒûò€>Qý°~ øMý¶gŽvÃWoêeÓ'3x†îK4¶ÔßÙ´†Þ'-" sƒ’rk<)´¼‡I¶HÑôxŽšmƒìƳÙîÇëxJ«ÅÖ¾Î)ËüJ~ïÜœ½/æ+SŽ ”WI{¾œ›Ë¤~g§xãà†ûU~ÙŸf¯øÄöÞÔôßkž&±ð·‹o4Y®~Åmm»5Å”‘ÌBMx¿»·n ìHFÚÿÁb»;u·±ñÇ"_»?´_‹GÐ B€$ÿ‡#~Æÿô=|uÿÄñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,(ÿ‡#~Æßô=|uÿÄŽñoÿ,( ø"—ìùÿ 2æÂükÿ„Dh0=«Ú'Äþö—Ÿ(—-öÿ7g“äàÙœáCd ßør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€ør7ìmÿC×Ç_üHïÿò€9í;þû>?ÄífÓWñÇÆÏøD†‹§¶†öŒñG›öó%×Û7æòÅžÐÌTû@%òÐÿÑ¿coú¾:ÿâGx·ÿ–Û»ÿ‡#~ÆØÇü'?ñ#¼[ÿË @ðäoØÛþ‡¯Ž¿ø‘Þ-ÿå…ðäoØÛþ‡¯Ž¿ø‘Þ-ÿå…sß?à²'Ã?†š÷Ä3þ;Ä÷:.“=ìð÷íâ¹oµ& {tmICJøÚ  #‘Ö½,ŸO5Íh`êV…ÔœbêTmB »sM¤ÚŠÝ´ž&éÁÉ+Û¢ÜüùÕþ êß<+âÚwã߈~-k¾ ‹Å^| ¼øñ­hÞ8øu£ÝêsYi÷7gÔ?âa%Ùˆü÷ ‚ÌlHÕý#GÂ>â÷7³‹•ýÞEî£Ä–aŒ¡NUj+Æÿ ’”SvOÎþ‰íÿ ¿gø'çÀŸ‚¿ôßø)Oí“ñKJø¯ãYí^ï@üM§Þhë©<³XÁeezÉ!ˆy]È© < ÅòÕð9·…Ù‡çØùðF_Ry~I)óʤ*:*1«*U*;Ôs—¿QršŒ’Q²:£˜ÑÃQ‡Öê%9[ÉëµÒÛ³{‰ûJÿÁ>à>øqðëÆ^ý»¾³x‚Þîm¶bœÉäØ@+ˆHˆý¤ÆÛ™üÅYGÉã²¾¡Ã¼öžK8áñ],ž2¬•Sê{Hû^z³jPšç^ÉIr¨ò7¢3ĺХíuм½Õ­ö³¶Ÿ™Â~Çß¿f-GâÄ€·ÇŽ~5ø__øuã í>ÿâ¡ûGjÚW‡%Ì.4Í*)`Ôã^}‚Tsº0Ì!”–b+èxÛÂ\,³/ÍøFõ¨âéBqÃÇÛUÄ.XòV­(ÉJÔ½´\U¤ÒæŠI&e‡ÌeÏ*x[ÕÙ/%ëc¢øÅû:þͯí¥~˰‡ƒ¾,|Wñ^«ðîÛÇ–úÖ¥ûcx›Oðüþ–æ[_6 ¸u žy¼äj¬~YGfóP­æd~`ipÝ\û‹q“ÀáሖÂ4eRº¯Fv•9rF0åníË›™%Ëgu¥l{ú£A)I®mì­{_ï±…âÿ ~Á_²¾Ÿs¢ÿÁH¼ ûM|ñq²iš…ŸÇë¾×îVžHôûÛ;·vDb2ã‹ îp‰Øz8/1œ_R5x'OE¿z.P£^”\”S«N¤¢“”¹¹9%;¤›³”S‡™Æ‚¶&.æÓôkñ*xkþ óûFø[¾ý§¾*ü/ø£â¿xöM$?Âï‡ÿ´WŠçÖ<ipB›ß¶-â¶±æ™#šQ+*YƬ²†s®/ƒüÆc19_©C…UÚk»QÅN|žÍɬ?-œaÊœ«I«¤ÚJcŠÌcÖœ/[Ý[Æþk=l»ÛS_öpø{û~Ô¿µN¥ð“á̬>i:í߇GĽö¸ñ Câ-qwIkk¢ˆuiüMl¿i+••"tr˜9\QàÆ/„xBžc¯)cgVú¼)Mº4]”ç‰æŒ].I¿g{89§+¢°ù¤1X‡/q;s7»íŒéüiû~Ï:ßí5á¯þ;5ý¢¼iàâ-ÇÃïŒÞÑ>+x¥ï4}^kx®-õIo®¯U¢±¶Oõ¦ 0þz€†Ãå`8,¡Â˜ŠÙß.W^¤ë5 ”£)BtcJ ©VªþxÞ<¯áNæÓÅÎX„©kùd’Ù÷¿eÔƒöqÿ‚}ø7âgÃÝâ‰ãߊ_<25OGãOhŸü[á»Û'°žu±ÓltŸ´Æ.åó#û+HÅó76jø£ƒ¸S)Ì«àꪙ}~\#£FsúÄ$ªÆ.­ZµùäéÆÏÚF+š×ä²°¨bkÔ‚’´×½v•ž›$ºö5¼ÿàðß¾&ü;ûf‹û`xSÂþ>†êîÚž)_M‡!]* V=~k›§»µoLÞRBäHG—.è€Qáφ2L8Uñ8jóÂNœiÉV¯VNv“Ã*r:‘jüòª¹£J¥©ªÄU”©ò©%$ï¢ÓN·Õ>Ö<'öÄø ð»öHð7Ç¿‡¶¿jŸüOð‡4Ëÿ j>#ø-mRÎìH²ëÖöz|±=æ›m/—Ô×È‘>ÅŒd½~£Á>pïf&2T(ÐÀbªT…XÓÄce.zvqÃÎ¥j“TëÕåFçN7sÑDó±yL,*ÂíÎ)?†;?´’Wk£{/¼ê?`ØcMý·¿à™Wÿþ~Ô?µÿ67××–šŸÄíSM°ƒS€G#hIHÙÕÐ5ê«Ì¾s„˜¯•â7p_ø­ §„t²¹F-8ׯRnœù—·¿¶sSM;Qn0|«š¥w¦‰ÆeÞÒ樼’W]-k[ñ]Ï¡¼Qÿgh¼cð·Zðž³ñe´L ‹^—ö”ñHi om/Zëís¼3%aWX¤B]75ù®ÀÒÀæT±Ÿ¶†¸Z«žõ-+{:””ý”Tãﹸ¹ÆK•I­é<_=6–ŸivÓ{îíµ¶ò3¼ÿÎøyðëöŒÓ>_| ý¢5ïø‹R°ÓtoxOöžñUÔö#=Ìú³ê+ö[8¶àL¥Ë1hÜ3Ñ—pß æ|1S Î4±”£9ÎX¸©Æ-(FŒÕùêÊ÷pj)-o£ñ¡]GÙÞ.É5úö^g†|Fÿ‚}ø»öOøÿðçHý¥¾+üa×>ø×ãøM—Køßª&­âQ Ϧê—EÌé±Ú^)!¶Ø÷ |ÆV`¿@Êø;Þ1á̦G RÆað‹.j•Ý*>ÊJ5¨Ãžu'YÖæSŒêsF›÷bÒ»\“ÄãpÕ`ª»ÅË—ew}ž‰ZÞ[ž‰ûRÁ,õ¯ÙÏA×|Aá׉î|WãûMáVãOÚ‡Ä>E·žÉÑ-þÒ×-ý­x÷ˆ2.²2ç ƒó<#‘øÄøŠ4kÒÅQ ©‰ÏêJ5räS^Â’¤Ú”âÒ‹Iîî·ÄUÅÐM§wh§eÓñw<7Â?4ï„V¾>ýœà¡Zçů‡ß|ð%|{/ÅþКö·gqÝ5›ÜI¦4¾Dr´ÛvÁFy%B@ÆxKÁyÌð9ßÎx¬+õU†¬êQ𓂍£ʧ;Š…ï9TŒ›²JKšÜQÌqTå:8„£%neg}lôµ»}ç«ü øÿòñŸìyð[â÷Ç_ÚKãÂüsÐe>ÕGÇŸ]ØÙ_Å I4„Þ\½œ`"áYmª|xq>â¬î–—Öp9L¹«9ÔtŸ²rIsJK]ÙÊæIs6•Îí:ÂB­yª|ýz'óÑ|ô>mý¨ ðüYìYãŸ>*ø}ðïÁ³'Žüq7Å]~{[ L¹ÿŠˆywÏm Ãq‹]«m9VeBž[7åùf+ÅÕãÜ9—Jyž#¡N¬«IR§NQj4í9µ'*š{JŠöŠJo™ŸŒâüv'0ž*¦êB Ó©¥¢ÞŠK¬’³ºÑ;]hÓ>Œ?ðN‚¾økð³Ã¿´gí‹ñûÇÚí «Å¡x+]ð—/ôkMyín/-õ“$íþލZ+Ÿ< ýZäŠúþàLò´ó9æ§RYd]ZÔåu¨TTåN2¥®­ÚêkKµ-«ÃTÆQÃÓXšÞÒSz5Å+ê´ßníëòJ÷ì+ð³Äü ãoƒz¿ÄŸøºÏŸ|G£èZÿ‹õc{¨\Ù[]ùIçHˆ2¸ÇŒ€Å|ž:½ N2¥Z4•(IÝB.MEvNMÉ¥ÞM¾ìö"š›»=¶¹PÿÓûò€0üYðÛÁ:Ö¼?âxrÛß jÇTðõÄ®ÀÙ]˜$€Ê¸ b–DÃdaÏ/v\Ë{5÷ï÷ƒÖ6{hþíŒÍwà'ÁÏx§^ñŸ‰~iÚŽ£â '‡|A-ôm*_éHÒ²ÚI†<Í.~\ç$ñIÅrÊ=%fþ_ä4í8ÍoÙö½¿Èç¾~Æ¿³Ÿìͪ^k¿>5…ýí”v-«Ý_Ï”d˜ì ’êY d$•‚=±¯e­]Z²‹Mï«îßwÝù²9!ÏÏmUíå}Òí~§ð7þR‡ðˆÕ4ñ¿þÐë2Ñ( € ( € ( € ( € ( € ( € (šøÃÄ›¯…þ ¶ø9¬išwŠßG¸¿ÖlÞâÒÞ÷Ë>SÍÒFPA#^–M<®µ™BSÃóÇÚF FN÷”dôNÛ7¢3«í7É¿Có?ö ý¦>)øSö¬ð‡…làš÷~ñ'í g?‰~#xÃâ7‰ç±×˜ÙJ±ê³¦—r³=¥”wRHö–^rƒÁÑcêxW(Æpv/>!U¨eMQÃÒÃÓŒè~ñ7B.¼J²¦’¯[‘µ(òÊM¤x8~ÛŸ¼eû\Á)¿lý_Ášƒü3¯‡¼5à« ›TÒüE-œ¬u(…¥½¤¶óF€[(ØwaÓsWÒæÞ ñ'pæ‡|AÊ!ˆ«^£•J•¥9áãR*ò•{YÔ„ã'ûÆï¥âìŽjx:8ÊÒ¯„¨ÒKD–Ò×¾Úi¡îžøÿYÔ?jï~ÕZ×ÃïèÚ§‹4­7GñŠÜx¦âõ< Z‘qq§µ°a§}spNÝB1º lÃFI?Ÿâø‡Áú|‹È)W¯R T©JÔ£‰¯?rìçF(oBNÕ>+©¤—dhæ?Xg›²zß•.žm¾«m¶4u¯‡ŸðHÿ~Ócß x§XÑþ(kÚõ§Šwö§aªóýV«å­µœ£C–“o™©E]¦‰Ì1îµA7I«½U¹–Ö]^­z@|,ýŠ>2øÇö-ý¾ütøMðÏÅš/‚¾$Ÿ>|Dðü:½Õþ¹—åYK½ï$Ï"É1ó$¬òIüã8ãÌ‹Çyþc”â±*â1 P¯‡œ©F4eZõ=¥;)Í8¤áËiE]t;éájË JŠi-SWÖÚYì|gð÷ö§ñ÷í•ÿ6ýšþ~Ê:€þÚüðܲx—ÁÑ(Š×ÃZ—wi®h±#þ\[¬ ÚSp¥ã‰ñûŽeÂ9wøSÄ9ξ.Y…D©Öwr­O–L5wñ:\Ó”ÝITwq²j3’#ø›wâ[øº1Ι+j/w¤éúF¡}:Gas4Óy3®Sˆm@ÆÌÜÜãÿ ⱸ ®¾]Z8zXhÒªék¥IS¯SJ”ªÓ„#ÍMütùª7u$•ã2œD!:‘šmÊêûï¢M´®õ]Ý‹ŸðPÛ3Æ‹Hý¼?fOÚ×Áž0ø7áføSñ?Á>'Ó..o¤Öd»·]Je€É”@ë¸Ü&èÈYJ–‡†ü Ì]^ÏrºÑÃfV; Zœ£**tbåi¸ó§e ZI¸Ý& ø³ÄÍ;T¿ñ~’Ï4·p‹ ÈFŠM‰,¨Ï)l Ÿ¨ñsý­Äx•ÂxœUzSÄO[ ðõiCVÑ7É­æÒ’æp„’­®˜eö…먧k)];¯^ß3ç¯ÙsöáðÄŒ~ý?eø'V¿â;_Ùûâ\ÚWÂýkÃ_/.´› 6»¾³ŸRÖ.Lj¨o²[,†xämɽMߥñwãrÜ“ÄyþNŒ³\:©‰…L<#VSP¥R°ð»mÆrŒj¸ªrŠ´¹d¹­Á‡ÆÂuÕ 4\½›²iè¯}[ôÛsÜ"”鄨S…hÓ„}”*ÎJœjrËzu¤ª8Jí´ÑØðx<]z‘…Ó‹Wwº»ÖÛ½{®‡¯xûâ_í ñ·Jøuð_Åö}ý¡/ãÕ¼Q¤ø#C—þ +TµÓähVû‘Ç-›ù¶òI˜¦;Ê¡KWÄå¹_ d5qù¦ ý«“CÙP•i¯aVª”œ©CÊ5W,Ô$Ôá¢rVv:§Rµe7ìêjíºvïäy>û}~Á¿µ'À]'Å?ðPmsXðïÄÙ—ÄG‰þ!i êÚ{h~ Šé´ë{µ†ÝY¦‚ây ŠØ—vŠxüØÆà+ì«øuâ'ñ\?ÂpyÍ:´hKžEV„ «NSiFtà—=KE)Æ\’v9–7_¥Šv•;9n¬ö¿¥ÿ Ë·î™wûv~ÐZÀÿ…ß·OÿƒtüXøw ê>–v½Ô­®¦x/¦¿'ÈŸO0ÇpÆ rf ìË`ÙxqZðÝ|Ó’â*¬Dëà1D¹iÎR§_k)J N¢ö~÷*Nv³Æ/®WŒ!Q+ZqÓwÞûZרùkþ Ç}ûŸá÷¾ÛÆ4û;O»’ý†¯~á£e7IpÁmÜʪГáM|ÎWô†Àð©™&Xë⫺ñ¨§)9û\Bxt¨('i(EEÂQ”Üãåøƒ8˰xÏi*¼õR‡$#Õ]îöÕ§¢»Z>W¡èËûþÕðPOÛ.ÏÇðPú>…ëÝOÃÞðŒ-–ò{A3Ic[Å)¸+›©7Ý¢!f‚4 o+_àøc2Î8Qâ³Ì]Zq†&4ㆄ'V”_µZÉ$çhÓŒió&’”œt¹Ïý˜qmõŒê1PŒ_$#&ݯtÞªÏ]eyh’³Ðÿ‚+\|AñÇìÝâø%—íÑðÆóO⯠^ê÷‘܈m¡ð#ŠØi7‹Gw¥ÜMp/¥†)£ ñtà…þšñ_‡8SóxSC ƒœ(ÓŒ~Öµ7)ºÔÛR¥^1‹¦ªÎv¨í8¦îþ‹!¢è`¿³êEÙ-<£µž·MêõK}Qý³$Ô¿hÙ^OÙ£ö[ð­ðçâǯ‰zV…ðvoˆº…–™©ÞE§ÜZÃ6±¢Íw+5Õ´–m4Bp KûØÙ §ÊàeK†øÁg™õxbòün­\ZÃÆ¥Jquc9F†&4â”'ª2pÑCÝ’’Vgv)ºØoeI8Î-(ó4žŽ×Zê­÷þŠÁ8þ x§öxýŸõ_Þ7ñƯቾ+°Ôu[f”¥ä©«Ü”‰“æÎNò[$å›ïÄøÓ;Âq'cs\57NjŽq‹å¼Sµ—»hé·º’·E±êaiJ†4äîÒ±ïuóá@ÿÔûò€ (  ïŸò”?„_öMYi8+©v’i^Ç:ÅÒxoQ8/ï-w·žç’þÓŸäý–¾ÝþÊ¿ðM‡~Ó¼Iáùã;RÁàÑüáÛ¶¹¹¸Öç¶O/íˆï ¨Ñ[¹˜Z]°£}— äQâüÊÑ?~.)I_Þæq‹êÌ1ZX¥‡œlê/‰+ÙÞÊÿ£ý¥ñ'öåñ²~ÕþøKû,þÕIã¹|'àmgÁ?"¸ÐçšË@ñŒcm¦»â)µ–Úæ9Y&Sæ0TBdäÊøø:¾cŸåŸVUëRÄÐjqS«„zÔÃá9¥)N«Œá()Aûªò’vN狚Ä(RŸ5“OM¥ÑËK[úFþÚŸ<{ñöÝørß <}ñâWÂox[š.Ÿ®­¶¡¯[É0¾¼‰.Þ4’ÕàÜÅÜ&HŒ{çÏÀæœÄYv…±¿XÂà°x¬]z³”å QöTäé©ITnÎst¹`ä¥i+ĹÃFR¯JRŒRWµß]úuÜó/Úö‹ø»û\Á3|ûV~ÊðŠ?h¯xvUñ'‰tí: ÿ‡2Enï­Émù“|M=©±dRÛÒãz;V?UÂ\1’ðgЏ¾âõhdµj/gNq«(c’Xe9Rå´”'í“vå”9eÛG>#S€j):‹w¥ãüÍ_îó[o{£ü8ý»þ2xËö‰ðçü+âO‡ŸÆ/ 韵Où÷zw|Yö& wnÓÂ65¾ÌlÓ0,–ìÒeœúšuóOr<&M_!Ããñ°ÂbgˆNXTÃa}¢¼&£'u{EUþñÆiFÊ:àÔ1u¥UUq‹”Rµõ–ºþ–òó=þ ûIþÈÿ±§í#qûgGû!|Dø±ñ/Á ÒÛNñî…¦<Þ´x§»I#º¼ƒÌ†Æù \‰$hË¢^„û²>/Ã~ã>9áhðÇö®Äâ[• É,T”£M§ såZ.ÐqŠ’Œ¥MËx¦tcq\%néÊrI+¥îïmZÙ®ºiS¦ñ÷ìûRÛøOSøƒû3|`ð6½ák1xïQøuñû@¹×ì¼5©cºIt©â–9U¼ó#/È€E儨Cy9wˆœ#,e<y„­K†ƒÂÇœhNµ>gñ”e¹,¯eïs¹][iá1 .TšjOšÒÖÏÈð/~Þšü÷Â> øàoø"‡Æo‹^œ£Äº¿‰ ·ÓôM3`K,õ‹ˆfiÒo³>ÉÎ%L€n?£cü;ÄøMÆ`±|e,¿.œ¿w nU+N÷‡ï0ðœd¢”\=¢æ‹å³QnËφ`³©G Ï5£Ù-5Ñ¿[ÛÏ©ÝÿÁ8?à«_´í7ÿ[ñ·ìéñ“á}¯†m“Ã÷vIàÛ_[êpøGRÑÙ"½XçŠÝ<æçUuÈXÌi}Ç=⇃ü5ž`ó¬³ëIÔŒ½³¥*oOœ©·N\ªš‹qvnJz¥mv˳LF+1*å·K§f·ÙwÓ~‡×þ;øSûl|A»Öü+⿃:‡„5×UÓ5_Ýܾ¡ðþK]—:|ë­¨<Œè–€FrTœ­~)—g–ÂŽ&ŠÅÃKÍF¤"¡ŽS¼*EÙµF)&ÒµNmKSÕ•É`³¹ERÀ×¥‰«ëZU1Ñ´jsÅIIIE9sJ-6´m´°¥_T=žóN+·»ÒÇ¡ê^ ÿ‚xƒÃöš/Ž,ƒÅÚv§^­Íí„ÐÈšvrJÊιSrd b€7š¥ŽðÉ•\%,Lf¾ªéJrƒŒg'‰uSrƒ×ØòÚIk%we»†6QJ\¶÷¯kíömçÜø öB›Â¾/ÿ‚bø“özý¾ÿfï‡Z7Å_ÙÂwð‹MñÃÀ2Ë¥Xé“7”—kó..àóm&¹¶O)Ù#ò̘ÿGq¬q˜/0ùÏæŠ™~sV>Õ`ë¥VU"¹œ÷iÓŸ-E*têËž)ËGTx¸i©`gJ¼%§2ÒÏ®—vº³i}çÐZ$¿²…íªx/ödøÛwàï‰~h:ñ‡Ä^ÙÍáÓ¤øÈ´KK‰±`’¥ÆÜl÷3ëù®&‘ ø×ᇊ>(|1×¾þÌ/4k3öƒð¥Î»{ªØiÑx¦I#°¾ót¨ÖÞ}Vé„2%êä¢É†,ª¦¾ó†«â0¶†#9Ëc8ÏUB)ÍàRuiò×npÃÒ\Ñ•¤š¼lÛ9jÚp”ãjsÕM]µilôV»Ñߥõ¹ô7ìíû;þÑìf}+ö—Ò4?Ý| Ò%½ñOƒ‡ŽMÿ‰F±ha¥^IslβÙÝ[yÓÍ’d´ˆŒeÃ׿œOÄÜ3Tâ*™爎e5U½&ÙTj­x(MEÆ­*œ°§(ÇHÅÉ(^'] =lDh{t¢éêÕï$Ò²Õ_F¯}uó>lðí%û/|4ýºþ+ÚÁJ¿g_ ø;â‚´­M/¼gáH¯ltïŠP_‰G>™,{n¿Ñò‘Ï<¬ŒáÊlÁ#Ùñ7?¥Á~åxü›:œ°8©CÙaë:s­…ÎÕ*±•àÜÕåB6N›m«ùóL³/ÄËûK–W·Nuþ¿–¯SÎ"øÙ£ÁIo‡ÿb¿‚þøWe¢é#Nðç‹ì¼’øƒCðÜ670\Ç4ñù‘ÙÙ¼7SÛÇß+Î’%“.ðøâümâî Ìs'Œ¯…Ê*NJŽ´œ~·V¬âÿr¥üZžêªçO™(ÓæçÑ£åèç8Î,Ì)RË èÒZó¸ûܶ³]VªM%f®“æÙGì÷û+|xøûbx¯öð?ÁMWBð…­›­ö™¶ðX°¿ .›Íöž÷SÀÖבOrñ[*[ºÍ”dT+˜ÿZá>ð—ƒ|9ÁñM´ñ9­JnW©QT”ñ3­hT匕Z\‘‡µjiÒ›j.Qm){ùNG ¢¬°´¡¢»u\W3‹Õ¦íªnÖ¶Öêv?ðO†¿¾üXÕh€_µu—ǯˆÚgÁ=q>|Ó/ü‘ÿ/öªM¦Û=ýͺM©"yEgÜCHJäýÄœ×3â ž–OœerË0SÆQxÜ\£ößbãZj”'(J2OšôìšJú£ÖÀÓ…*Ž­9óË•òÇû—Ñ]®™sö/øÝ¤üvý®üYðözøIâ/‚×Ũeø…­üR¾ñ¬:¿‰o[M¾‚ Í"çNôÛeº–öÚ8%uxÒ)C“jáÇYnà¼.mœâ©æT°-a!†RÃÇÛSœ©Ö…h´«TtãN¤ç¸ÉÊ)Ô’ÚÁâ!ˆÄÎ(ºn^ó•ÓnÎÍ[¦·ZöØ÷?Û£öhÿ‚}|ý¹ü ÿ>ý°?i ÿÜØÜ%ž§j×3Iaq©An‰Àsj«¼9ŸÙp |‡¼UâNáö78o/Ž"2\Ó”TÕ9Is)-Û—/,åyA{±÷YÙ‹Ã`¨ã*´ÚòwµÒéÛÑhÞ»Üùûþ ì¿SàŽ½ÿ Åwz⯋›Ã:Íõì·3^Ú6³pË+Í0LNIóæn¤’râ÷>&ÅÿkÒT±\íT„b¢£$’iF>ìmü±Ñl’Øôðê’¡fïŒ÷JùÃ` €?ÿÕûò€ (  ïŸò”?„Gþ©§ÿôn‡@¢4P@P@P@P@P@P@PÄÿø+áwÃígâ?ÄC£h™=ö³«\9Xìí£BÒLÄ@U’Íwåyv?7̨à°TÝJÕeÂ+yJNÊ+ÕèEIÆœ¤ì‘òOíG㛟ØWþ 8~#þƺœß¬´ã¥ê:±ñ ï5ð_Ž?à¨þ(ø—¢ë>þÒÔ4þÞµ7Œ ³oØ·ö>ÿ„ÓEñ‚ïm~ Á¬ø“µ¦j ëêw\Ãik¦Ïh|ÛIEóÌoƒ“oø†Eáß`e?õŸ6ú½\=hKá_z5©¹ST`©Î¬ë¯»^.ÙÝ][šQõêc1KØSºkݺꞷÖÖknåÏÛ“ãïÆo?|%ª|%ðÁ_ ø{Æ~!¸ðtÚ¯Âú”ÚΩæCö;¬É2ÆòEtÃsq2kŸÃþȸwˆñPÌjã+ÖÃÓŽ*ŒòÊ”¦©Ò´½¥J²©¤e('euv¥«HXÚøŠ´"éÆ)7ÊÕK«¾‰Y?3ÎÿdoÛ+öÞÕ¿à°ö?°¿Šn¾øfÃÀ>[O‰þðÀHÔ¦Ž®ÿKß]¥Á†Ÿ A3´kµáù˜+WÔq—p çÅxu‰­X¥RÙ¾ëDú¯MO»þ+~Îÿ> þÒ>øÃ¡þÒ—Z?„t+E‹]øsÿ†Ÿym®0i›Ìk¹c7ÞGÄm·÷#Œ³þzÊx›'Ë8c–ÕË•LEWxb=­XJ—¬©Åû9-įïo¢=ª”*Ï©Ú+xÙkóßþÙñ/ìÅû1™ü{ã|)ðÚ·Ä-tÿˆ·÷VËë6Æè#»l…xÄrH9Ç Ù<šâÂñ_Æ85 UOöYóáâ›~Îm§zktÛKn©,=zN+ÞßÏÔüºñ¯üàůø(gÁ?†ÿ ~ ØÞþάo/´]cTš-?D‹û2?)üE§´Ñ–*4hÒ8¤v5ˆDh€?Öx ¸&ðÓ8Ææ¹G;ÇÊœ"¥:ÏÛ>e…ª£&ã,[jR”¢”yRrjlùÙã¨ÖÇS§w¥ Sz->Ò¾ü¶þ´8=CÄß?nŸÚ»ÄtGÁ >üwñ^‹ðçH×õýN] UñV¦ë*ÒÙiBÆYgS’Uº‰¼èÒcØ™\œý<&Iá÷Ðʪƶ37Ë)VÆNœ#ô¨U­A¨Ô¯íc:³”y%*•宆.Uñ¸‡R6*FïFÒ–ÊÝ^»ÿÀ>©ñwì[ÿ¹øah~|(ðG‹üq®økX±ð%¯†´›GU³ðŸ‰¯"’{_^ÁÊë£Ëª¹ðA~ Áqß‹y´þ¿˜V¥†¥ZÅ:“T©N¾›Qžœ¥wRŸÙ†»Iô²ÓÔ–MrA6Õ£ewfö“ìüÏ›þþÛÿ±àÿ‚fxÓþ H<1ñ-¾$ÃáÍgFø—¬xáÍν úä˜oõFx¤Ý:K*#™Ÿc™Â1Û_¨æ|ÆÏÅlˆ>ÓõRL<+b#Aª25*6’´\"ÚP2¼Z2W<øã0«,¿=švW׫éu¶§ºÁ)?à µwí/ÿ KáeÅ/‡RiZoáqñWDñî}iâíI`yâmSI0¨²¹Ó {(V|aš+’WÏüað߃¸Wûc,6!Tž"ØiÐ9áaÌ¢ÕêMÖ…uj“pÝ)SvI™~7ˆöqMZÚÞüÞ«¥¶Ô÷ÿÙöJÒ¾ |Pñ×ícãé|á™ukIá[…~%º´ðö­¤Ü̯o{ªZÎÿg“[g’ÜDÚ!p?7ã^3­Ÿe8.ÁûzÊ*>ÖXšp•zua§N„⽢¤ԡNZݹ=YۆêU%ZVWnܯFŸu·7¡Õü6:çÄOƒþݺ÷ì¥i_´Ÿ ëPèÞ µñ]…ÝÛ·›&ÛÕ ÿGÅÑŠ&.rÈ7r¤W‘š,>YžË„èçržUR¥:ΕHEh¯QЗï?t¥$’ÖV÷thª|Õ(ýaÒJ¢NÊéü¹­×Ðò_ÚYÿ‚€~ֲ߈ŸÿfðÅ[_‹Ð^6qñB+öÖÓΫwª=„ˆ5;IbHÄ–‘>ä7±)‡cý aü7àþ-ÌðYžeõŒ½áeu†”jÖ”ãáAU‹tjFM¸Uœm% ^ |Ë KÆ×ÃBTáió-9´V{¶·]ÒüN‡ãÿÄ_Û Ç¿ðNÿx‹à·Á7áíi©K§xKÃZG‰t[ùíî~Þ]'¹T·Ssj3DàHÙp\^o 圗x™„£šc%ŒÉå:µ'N¼"ãìÝÓŒ¨Õ*AJ-Ç™'¤[EÖž&x&áZiõóÓUøy›ß°UÆ£ð^óãÂÿŒ^6Ò¼ âhõ -6^ïUñ&–nìîæÛRiUPÊÓ‰LÔ\öˆŠ–yO&Ìa„–¦&›„¤á Xyû:Žœ'G•·Ê¡Ëí%?yÊîÝKÁ·IÔƒ—2‹¿v®¯gúXù"çö2ÿ‚ütÿ‚‡Aÿ.ýž¾7øÀþø•&™Ÿáˆw3[ø€xiFœu &M>êÆt„³ÙÜJ"ÆÕ·¦÷¯Ù£Ç>ð÷†rà|çS_íªPQ•¬7[ÙVUaV›••HGšQÕ&­+Dò^W3XÊRQŒ’Vwæ¶šZÖïÔïdßÙCþ ÃãŸÛ{ö›øÉáˇMFi.(eüùmex.\E,]:’­)û+ò$íhK ŽŒom9Ÿ2gN ‚ž2µE¿ÂâÕ¿áÓèu_¾~Ð3|;ø9ûuøCöp»øiã¯_øÇà#x¯K—OÔ<7ö¦·6Ò^ÈE°0Ä#ºŠP­&ÄòciÄ|%Çæü1˜fqÄà±ÕicÝ:°œ1 jj¿+Òœn£Ìý£rQIëR•ogOrÊ:8ÝY«í}´Ý}Çãø)¶ñOöñ-—üoöPµñÿÅ-cJŽÛÄ¿o`D‚KK€„24ЉàhŒ¾T4'qVO™kù»9ãlï‚¡åÕ¾³F’ö±Q—5*r©g5¯/¿¥¦®­+%Í­¾gÅRÆb¥K#¡íªj¥=¢¹ZÞî7M7f¤¶ÒèøÏÁ¿à¥/ý¹þ!|dÔô¯†ž(¿ø7â+ÓãÿˆŸµ.ü/§ÞÛY¥òÊéÜ¢Bº?.ÜÆŒ9 ƒŸèÞð[ÂL·…ò¬ÏŒñøÌf?u0ø|?»(:’ös…8ÉJŒÓ«däéÊV‹årJÞ._ç 5ž?áV¤:Éû‘jîû^ñÓ•¥½Û;ÿø$¯ÅÿÁ8o«ß‚ßÊMvÐ÷pVXHY[MŸO&}%_uÿÖûò€ (  ïŸò”?„_öMJý§üûdxšçAý€fO†)¤ü=ðׂžÚûÅž>¼²¾Ñ¼we’mÓÃ×°Fë{o®Ê³]¹Q`0rµû æ<„~/Ïq<øÊÕ“* ¤*áfës¼M94èÎPI¸R›ÖêíZçˆ§Š•°ô£h¥»ÕKMŸ]z³ó·ã—ü÷ö¾ÿ‚|2øÃñ‡Ný”´›ßø×M]?AÔ> ë¿Úº/€ô[‰ ‚óO].îÛíl×Ñ´¶âEY–8å ˜ÌEÏôÏø‘Á^$fÙN[<ÎQÂá¥Ï8âáì«b«ANTê:ôê{$¨5œ­Ór”Z´Ô”O¾]ŠÁQ«(AsOKÅÝE=ºû¯_–§¬~Á>2ý«¿à“_´Î¡ðsã—Æ WÄÿ-|qmà1&­§êÜÁ/ö4š…¾¥§ÚHe6ºt+Ã;¤ÍIo,ºüwˆ¸ñ“…)æYV4sgFX«FTÔZöñ¥:Uj.^zórS¦¥RnIs½"õÀK•WT«Ôæ§~[ë…»Ù½•µ³~š\û‡öšÔá½¶Ó?nÙGÁÞ,øå¬ø¯Â±è~ðŸ‡üobº%½®fºÄZ_:Á%Är¬iç&é ȪBæ¿áJN©ÂœAV–[N…WV­Z”j:Î^ìU)'8ÂQr—#´.›~÷*=êúÚ½æÚ²WVÿŸSã¿è¶ÿì¡áo üKÿ‚‹x®ûÆ¿üU5ô~ø•ðïá…¾µqð’hôâ³êo•…¹ÔšãÎŽ·œm`ùdp\×í¹~'€xÉÀð](á²ú ¾‰•ãÓ«xÒR©Z¢¢©ò¹©Ów›–±ME\–/ ibu“½šù4Õ»%{öò>­ý|â?ÚÇö Ñ|Mñ£þ 㟈vž-ñ\^'ð·ôm×ÁÚ«XÙÍ]3ìöÛƒÄÏm7™ür$ì>Q·oäÜxoáL~!ø›âLü6øqñ OÕ´Ùµ_‡¶÷ÑÙ^˪Z¹GtÑ‹¬lÄ_¼€à‚sÙŠá.à>&ÃcULS£ƒ§O늣QSÇÊ›«IQ¨½ÇMK’ü×–“[¤L1ñtZäß*wWí¯™¡ñòÿö5ñ¯ìé{û&xOö7]Z-ÅðßÀ¾ñGÃ{ØôHµ¨!o,±'›“çGûÔÊ–=yxrŸ`xžEˆÍùJ_\¯R–"›¬èÊ\µc'Êñ­òÑ•¤´V]*´°³¡ì£Nö|ªéÚý<íæ|µñ?þ áªÁ0þ üøƒðÃྻñKâo‰üG„üUáûMfòþËÃ'Tµº›S¹ðÙ>ZéÉr©wsƒoG”`ýw)ñ2‹9æoƒÇã!‚ÀѦëÒ¨áNœë{ Â4aŒøž"1¦Ü§J”¬ã +ójà^_B›§i^Ö»²¾ü½Ÿfþ}ÉàžÞ"ý¼oOÙßFð†|¿]üý¤<6ºÖ¿s¬ê:n§âé«2êêW°™Y¾, ’ÞG Ä.3âVÃÏøš¶"¿ïã˜åøŽJjªS¡ˆ¬âéJ9r¼={ðøªF6Ž·•«,n2‚_$Õõwi_wÕþ}¢x3‿jŸŒ´ÇÄ õ3{ð*çXÒ~Ö?³¯Àßø%‡Ãï~Ïß$ð øUã}CÄ? ìüuâµ°‹âÎo{(Õ¥6øs²ÍzX;«%Ä0+¹A–ú<σ¸›ˆ|]ÇÐÎ0ŸZúõt±.'7€©:qúºö³ºRŒcIÔ®¢Ô©Ên1æør¥‰¥G,Œ ÚämÆÿm&ï¢îïe~ÚŸYø?ödÿ‚oþØ^ð'ÂÿÙ{ö…ñ·Ã};FðRø“Fø}ð›âÆ,:~²ëx—Wv±1mìňV'f÷GoÆñÜWâ‡ãñ¸üûG:•½Œëâ¨FºsçMœ䒲V»KÞ²w=8PÁbáÑ›ŠµÒ‹¶’ÖïsÁ?h?ø$·jŸÚ“Çÿ¿e¯úþ‰ã #öŽÑµÍe¼[¡ÜÙi6úr¨¿ÓíåY Ö/bš8dIȉYLÐ3ìOèœ5ã.[Â#˳ü *aªeõ©CÙN«UΫ~ά“„ðô§(Ê›O–ªM¤ŽNWSˆ”èÔq’šzÞÚyuuözŸŽ´/ø)ßÃ/ˆ ô¿Û·Ä>Ò>xÆ+âˆÿ~k²iœñi°L,ß[ÿQK»‡µŽH"ŠhÊ™˜ö«Ÿ/ÄxOšåÙ„øNêfUi{,> Všu¥h°ßÄ•èÁNQœçNIò´¥wiÇ1„à± ('w(èôÚý5Ûú¹ÞÿÁAÿg/ˆŸðR}'Iø§ðÇßíü¤ü<¹Õ> üUÒüY{§köÞ+žáPÆ—‘é3ZŶSïÝ‘B•Q“ó¾ñFYáej¹~mCñ5+Ƽ,©S©BXXÅ»ºrw–&%xs~î)¶ÓoM±Øz˜ô¥NIE+ÆIÙó_¾¾ë[õì|­ûzþÒ¿ >xÄ¿ðLïÉ/‰!Ñ~ îºø«­Æ£¯OãõX¯4Û•ÔVT76Öé3¿šé˜ÙcPFÒ+Ë—Š¼;ÃYÅ>'ÃOÚæsÅÉC.Ãr¨,'+U)T£OØÎµ¢’ZJ.R·Så3Î&Ë2•< Vå(Á½ÜÒæŠæôw½ºÛKù_¼ãÆñOÃÙ¿þ aûbêþøSñN½ñÅœ0ñÃê2Ý4RCi OròyRM¹$Š?2TŒF_ËI™Šü[àoíÛ¨êMûN_ÝòÆÞ]¿9Ìå yÅ~L<Ó—%ÕÞé&Õìíª´ä¼“Ûì?ž ý©?c¿‰àžß³F­øÎ/ ø±uÏŽÿ4ÿØév:ލ\ÝO ’‹†‘¦ gBÏo+: |`oÀýxU[†³n#xj9}:´, T©Rp¯MCžmÅFÜÍJÑ«ç§Â}žò¨ÒÁa#îÅÞRò“o­ÛÕ÷=¿þ ·/ìͧ|:Ò<ãÛ¿Iýœ¼_}âHüGáïýª(UšÔˆæ[»RÑ®§ÉpÐÌZ2Æ3"È€ÆÞ'ƒËŠêæuqXl’Y¾4Ý”ìß"ž±ös´^7S‚RK™EÆO™zY’¥ìÔ}ª§+Ý>öÞëKéý=Ÿ‡^ý‹ü#ñWÂ>*ürðv»ûHkß  ðøñN›^·­i‚ÞyêÆÖcµBæeòFkrBâ¸3'Å[q^(¡G–ÉÕÅÂ5£OˆS’u/Rœ)ÔqœmkJJr“r|É/.†û=}^¥W)OH»h»hÛÛÔÁýŽ4/xcÀ¾.ðïÄŸŠŸðœkö_üY¯âÿ°Åmý¯:êÓ†¸ò¡&8÷u>QŽ+ùŸ<¯€Åfõë`pßV£)7\Ò—³‹Ú<Ò÷¥nï^ç·B2¥.gÕ÷ó=j¼£P €?ÿ×ûò€ (  ï¿ò”O„_öMpXj_ín1©EòS©8S©QIo6œ\iÊNûÆ:¶îy–_ sÅÇ®êîÖüþæyOì¯û|ÿ‚ÿÁ><9ñOö§ø«­èÞ2û.«â/ƒ¾6ðÄ‹³ªÿfë¶Ï<ºUü÷¹ŠÛÌx#1F X X÷•óþËüFáÏ ¼JÄeù0×¥GF¾ËÚaf£Ô£ .iò©KšVNrråO•Ç >¶;×—¼®âÓw´º;ßOÐà?kØhŸØ«ÇŸ ÿlÛÓ⇇,µYøŠÓàïÁO…ž”é–ãFLx_U‰,•žXîÀ¹ˆbuF¿IÁRáž;˳.á,5ICèKŒÄÖ^Ò|•å]Iá/'U¥K÷sWRNI7®ÉTÀ8b12K–ê1KMU·éß]µ>¡ý„uøZ_±~“ûüaý±~&ø«Ä~8øU7ˆt¾½Ðoì4)äÁ ýÁ•~Ý¢^ev•ÑÕيü“Ä*?ÙuW‹rܧ B†¨Ë êÓ¯ ׊çoÙC‘û)G—ኂ’qRæ=ö˜UBurW½¬ìüû¯Èö_Ú3öNºðïÀ߇Kû$|ðF»ã/ƒw0IðÂ×Å:”ú^Ÿ§lֳ̂„i ÛPÆÑ—`vŒ>#†8Ê® Çÿ¬XÚÔ°Ù‚’ĺQJ“÷ÔãÞ»ÙM+µ%.UkîŸU|3{(§(|7ÑmnŸ–×>Býо+xöxø‘£þÕðWxûEý¡õý.ãÃz|:¸´M7MÑb $º¼zoî4Ë?sÄó¢k}ß»ßó~ÓÇy>'‰²º¹‡ThTÉ©J5¤è©º“­+Æ4eR·¿Z¬}éR„~ÎV÷­§—„š¡QVÆ·í]Ö»%ÞËD¶»}oµÎ[öZÿ‚‰þÐß l/è:ÿíOᯊvÿþ,Ai}á? Újz·†|¢Vi4oHâ+“²4F±« –;r’3úü]á— æÜ^µ²¦ Y^RZŽ•,N!Ç•%ˆÂ$å [”k978Û[8¨Æˆ¥ŠW¨§Ï-•ÚøeúPë_ðXïøþ 7ª~Æß<+¬é¾žëJðï„Cýœkø(b~ÞöÿoO [x3Ãz¾Šth¿|;6³áÿj¥RîmDêì¾m—Ù¢*`‰+JÛ74D×í\OÁ¾?çá*¯^œý¥iשUèR»§_WO–¯´—¿ÍiAEsYI#Ì¡ˆÇ}s—­¬’WMîÝú[cÏ?c¯‡´7ì ûB|dðNïøãÅ_hß5¨ðí핼óxd;\é÷RyÓª4--ÕÐSÄ¿9åTéxã3៩ä9oöõ6—á¯í#RQX›(U‚åƒjJ0…Ö°ÒëVÙ†ž#*Ót›r›µ¿—§âÙÎþÇßþ)êÏàé¼kÿ˜½øYâO†ÿ |Y¦x7Hñ»cs໿ºûdQÜ Zâù^Y‚fMØBò`7Ê+Óãn!Êh¬ZÂñBÆÐÆb0³­8B¤qÜ´¡ìäáeN£û¶»´nÖ¬œ5 µj<®*I_á×]ovzOм;û4ÿÁ,|#ðïãæ¥ÿä‘5øZ—]ñ?½JK½;Ãÿ—%ΞÂyD³GstDQ\JŒ-ã9o&-øù\'м]ÆãòŠ|AxbkÑP¥‰Š…Jôé]B¢å‹ŒeJŸ½:piÕ–‹ÚO”Ök •Ó„ýÂÜvý]ìÞ‹{y#ã½CöÕý³¿j_„÷ZwÂícã/„ÿh¯|@°øµðóÀš+Üê>³á¦´¹ŠÂÚÞ_=a±ÓÌj·SÃvå.&·p°þõ#·Óà>áâ3Çà _%¡Bx õçÉN­ÇÜŸü_âŸø'oÀÿé?´…Ü>jš÷oÄÇ7‹5ïß]ù’hÐÂñGl,Ò5¡kGäí…Þ?–qüIÁy¾? ™Ë §ª TáÉ…… TÛ^nwVUäãï-}¥ï»³ïÇcpù6SÆM:vûNò”ŸÙK®—²Júh¾0\üÿ‚þÎÿeŸØÓöñ†gjV:jÇ~jÀKâ?9帟̖ håóFÒZCæfù@ø»‹ø÷Šøã˜ÑÍe—N´+º˜©ÆTªNêê4áMBtçU¨(rû''.eÉË?ˆÅbó¾)ÃÒ¥•Ó•5ÕæìÛiùJî+Krß™èÚÙô÷ìóÿ¿ÿ‚xü~À?´ƒdøƒâÿhqx§Z×/|9ua¥KekvñÁoÄmåÛ…rÄÛyÍ$Ù¤ÝP=NÊóî…N6ÈkIIUö~Ò­Ju±>Öp札(ó´Ü¤Õ^K§'y¹Ý¿¦Êxg'Êã,4ãí'+MÉ«lô·EgÒíë«gûHÿÁ!þü7øaðËÄ?³ÿ‹>1i©ñR?áCYhw?ü/ux·çIw½¢¼†IÚe’wÌÒ Ø.Ì.?¡x_Æœ×4â ã¨ã©`&èSúÇÖ½¥hâñ0ƒ¥í’§*rŒ\ ½È¸¦ù®ïÙˆÊiGÉ8:ŠîÖ²å‹ÖÚî¼Þºö>ñøÕyð¿öQý‘/¼;áß‹¾ø9¡x{©¡xGÅ òÛNðÜžPµ°fIÝVUÌ@FÌ7à)<濞ry¿ñ¬+WÂTÌ*ÕªêÕ§ ûJË›žªN ¸¹.kÉ/w{Ý_g‡Ã4¤¢’²oeÑn|¯ÿ$øñWöŽðoìóûkŸŽ»ã/jö¯ñ?â-·… ±’óA°·ó5;«k³Or÷"Úx­Óh‘“Ë$Ǽ×¼-â<Ÿ…ñÙ÷Ò¡ì°Ôa%†Ãº²šz²µNÒ­N4ùá9»¸§Ì—?+^na‡ž&,,Ûk™ÚÚ-[¿G~Çx¿f¿þÆÿ<[ñköuñJsŠMJ¬)ËYSW­Ïîïëâ¥g iÙ·}¯¶¯Ñù˜1ý¯?áÿ„Söñ—ö€¿°ø'âïÚø{Bøs¨|>x¯nŒøöÏý—?iÙ»ö,ðŸˆ|UûyütÖ¼5ð—B½Ôþ"]|:Õa¶ñGˆ¯'‘ÚK¶½½vtûH¦˜ýžråb…Èd‰Y¿¢8‹xWŠxïG’`©×ÇN ±”°Ôa’‡³¦”zÒŒW´‡-ç&¹TdÒñ±8jø|yªÉ¨'Ío‰¾÷}nƆÿà”¿ðKïÛWáŸÁx'öñ6§¤øÁƒÄ–¾ƒ]·P×ô­vêF[ÍJ)"76ÂîhÉÌ?gØ]Ö?/h ÑŠñ‡Å®ÍsŒ^+N1U½‹¨á'N•\,%F0£(ËÙÍÑŒ’÷ý¯5¢çÍwtò¬·F6ÛŠWµ÷O[¾ºüޝáÿì±ñ"Ïö†ðŸìû/ø?â_Ào/ÊçÃX®"Ïjáó<ÛJ4a$ðP”e9ÓTãh¢£ì§œeg&Óq–ÂÍU… *P§w¯ÅÙ^÷·{îz¯ücöeýŽ?jÏü>øyûb|mÔmtØ#Öïôï„–¾)[(¼mäÚ &v‚<]\Ig™PÛº2y¸•r+ä|1â¾8àü;ÃX8¹·F2Å:No Í;Es;Ó‚­/v^Ò2R²¶±¹ÑÃa1R„kËEv£}íå»¶èðM3öºÿ‚Æü$øóû#üñ ~ø]á»YXx¾ÿ÷­¨ëÞ¹´•õ—¨!¢Šp% #¿C«Ãð?9É8‹5§õœ}gˆ”©F¤=,D'IûJnJKÞRœ4²v¾öäUÖiN­råŠåÖÚ´÷Ñúnxì£ÿ!Óu‡gö‡ø­ão‚^øiaoð»â\Ûé+·žê&Ž;%¹–(Yõ ›‰ <˜×"Ç$«?Þñ…ÕhfyuW…Ãæµñ'ܪáZƒMÔpRšTiÁ)â­'gWÕG‹ ˜©*ÔT¤éÁ.Y}­z^Ûô]tûýëâ‡íuñGáçÀ]gö‡øËÿ⺳ÐüðÊ󖺟ÆK;{ïø‹S-ã¶±1Ù,ÊÚ}ì¾RÜI¸/˜´aSu~y”ð^Q™q—,â*¸œL+¸á¡…£N.nu/QÁªÔ#ÌéFÍòÙ)sJÇu\T©P•Z”­Å«ËY7ÑY_G×Ï¡ÔüøŸûÿÁAÿa‹Œ~¶ðßÃsଯ ›­ïJѾxÁt¦žk©-åû*ÝÛ[ý®IÌ)T³Jù9þQÇx<³êbéf6¥e8U­‹Â:Ê‚šö®JžÍF<¯šÉ]hõ£S Â)ÆÑpײŒ­ò½¾ãç¿Ûâ?í‹ã/ø$·í ñö™ø‡¥x¢ïÁ¾.Ðõ/ÿü1áÈô»{«2ö-µ¥ËÈéóM0Yã¶Òv¶úOå|ñ›"ÁdxyQŽ"•hcpµ*:²ŒíUJ…xÉE=#á(¥}ÕÑçã'Š–[Vu3‹‹‹I+êµ_çs騵Ûï¶ÿ ¼I/ìÙñ‹àcxÇ/â߉>(ðýΕ¦3 ÝLKâIãfk›+ØÕPl,̰ª³*µùL°ôò f4a„̽•‡ÃÓ¨«Tÿy“æx8´”*ÐmÉÝ$œ›Šr³=;º¼’P»»jËoæòe€¿hŸŽ?³ì_~5Çá_‹Ÿ¾-xÛÅ÷Þ0ñ9øŸuu,>»¸óôx´Ù æT ùl‹*V0 àoÄyç pÿ¼Ï+ö¸ ÇG Tþ­§‰§\C­|/í&á.výëuš4ëÕ£ÉRÒ„œ®îö{[úÐÂñOìñoNý¼þþÏÿ¾!ü`ø_û<|?ø?źxÅRŦ\ëÚÈ–-:éæia$/'›»æx®üèáFÛjPrvŒå^<ÍÅJ3|Ê>7Åuÿ´å†ÉèÆµ—*q²JÉ5f´vM»]-,ºœÇÆØÿãgÅ/Ù¿Åß¶íéyâ¨>8üD×­<ð“Ãú¶‹-´^©-ÊEiq0ƒÌX-\,Œªåm“ͺ4®¸ìðçÂl¯âN¯â(æ8|=‰ÄÆ”¿t©Ó=Jq»‹¬âíÙTNW§ÊäÌW ׯ§Î¤åZmFWQƒÒÚÇÓU~Nfþ&Ó>Æýšµ?Ž¿±ßìGðÛöøÕã¿|6øË¯Ùj~øO¯i¶³xŠÁ–ÂÔ]Û¦h£‰dX¼æd“j¶ÌƒÔÑ8ŸÜeÇxþ-ÊpóÅåt]*¸šrqÃÍ{Yû?gM)J\·åQq»W³[3î0Þ× ƒ†MFz¨Ù]h¾åèb| ‡Æ¿ðW«? ÿlÿ†óë_³Ôï¡„š±Q§Ûø‚êÑ®`½Ôm®ì'Y.-亶K˜²Ê<©Ñv‘×ÒÏå€ðZY>?†1 žr½¿Ö¡ñÊ”jrJ)Ó«N4æéÎÉûñnéì¨9æ^Ò5•ééËÒöÑ»®—Wô<‹þ ·û+|uø!ûü5ºøëñ®ëÇÚƒtû_xÎ]7XŸÃšEºM zWˆWOÊO}`ÂßV0‘ŽÈÀû?ø¿‡³ÿóå85…ž"RÄQRŒqdãNN¾Õ’N4«®)«Æ*Mêrf˜yÑÁBUgug«ŠßGd÷ZneÁN´k+ö_ð/í!ñóö˜•fø{«ý›ömº·—þâtK`'¶Õ5»tb7·VÑOûåd‚?5˜³FÅk³Âzñ­Å˜Ü“(Ë•±pæÌÿd­‚n§,éa¦æä©R©(û­J¤ùRIM&FeîàÕjÒø> >e;-¼Úù'÷ŸCéß ÿi?ø+OÁσ´Ìÿ´OÄßÙÛGŸÂ:Šx¯Â~Õ¦±ºÕ¤¸hMµô9ذâñ4Й|›‚”ÄãóJ¹Ç x7æÙÀa³jŠ­7J­hFq¦¡ÍÏNQZ¹ûÖš„Ô9áöãc¿ÙWÍ(Ó©Ï*jÎé6¯>ÝQØ~Òÿ°í1ûAüO‹âôŸ¶Å½ß‚uÁ©|ðÕÿ„mot=9š(£yµ[YNíFå6Èö÷ ñ=»ÊJ’ ñxWÄ~á¼¥åË'rŽ&˜º‘«8V¥&£BqÒ9^*­7Æ¢ŠNÎÍiˆÀâ+ÍOÚkx¦®—{®¯³éæVýšüOûm~Ì_I¨FttjmÒ’•IT—4ªFo]ƒñxzÒ£4䛺—˯Ïk-ûûŸþÏ?h_ØëÄ ÿà¬Zo„üaqâkÛÛÝGú‘ŽßG°?<6qO &šmÚyrËÑ”±ùüe\5Æô1þÊ®QŒ#“w•Ií)Ê2\±Œô½)sGGºvZÇR¶Ãi]ÞÖÛª^«£ýu+ü7Ö?aø*ìš<á j¾&øqáÝbÂÎ YÒõ=ÚçNK{«T p!šdP`9ù‘ùS» +\Ö‡ˆ^ñ—ÖqcGV“œ%Jªå¬ç ¶àç·ïi¤£º¶Œpx<~–*ðV]VÚ£áíoñ;ösýŽõ¿ÚöÖð¿¡é—^<6¾ øk¦ø:Þ WÂú4×é§é¶Ão/—;}ÉLª@ ( kÅ<-—g\]K&á;bªÆŠuk*×…z±‡µ­V2«É˪q“»qv»i‡¯:8gWî«è­²½¢´¹óçìó«ÞëËñYÔ|7£Ísñ«Æ&™©˜¾Ñoÿyð¯ä»¦qƒò³ ß"¿%=Ш €?ÿÑûðŽôñ¿Ä?ƒß¶gù¾9üø#ðŽÏÄZGÆnçSð×îi#X‹+Å"6¿bž_Šðyaóü7°Ät2E!]‹ËÌp_êþ]šâq¸ÓÁæ©WƒÀT©OnnXÕN.5ÒŒT\½ÉÆPO™Ž3U'N1’R‹kß³“ôõW~håüi⿃>ý½´ßø)„¾*øƒÆ^ñgˆu?Þ?Mf&··ðdÍ-´PÁa·[›…}FØÄÇ/µãÊPÄzØyŠðî§b0´ðøªéæt9”±)Fr”ªÉÍÓ‹T'Ì•£&©¨4åde9RŽ9b¢Ü“¼%åÙ.»þw<ËXøMðßáß탪~Ë?³ìgeÃïÙÇÇþ¹ñ®áK)õmc⾫m8±}DH¿¾‹K¹‘®C\I2ƈ®¦2œ}]ç4Ìø*žžæíã3zÕF¥WT°’¡(ûUFÏÝ–*œU6©ÆM¸µ$ÎuN”12¥BŸ»NQæKW+­/ß—}n}oâø*µŸÅïŽ>$ý•¿`oƒz‡Åø2ö{]jË.¡è2ÛÞ›kˆnnçy‘¼¹¼ƒrG)€`ˆüoá L—‡ðùÿbã‚Âb"%U­UNŸ<% q•¹Uãí9åA5xê¯è¼Ò5«JŽ<òïÑ&šo¿Þyïücöný†/?i/øÄÿüiðÓÆŸF£ Xübøe`¶ö÷—f?´éºˆUh®¦¼‚6M÷Iˆãc½6_GáøO…±xÊèã0¹w³ªð˜™9IBù*Ñ»R„(ÎIÚœãy4¹evŒqØ|ÄF2‹Œ§uÍ=Óï?^…?ø(w߈#öqño€?ioø[à/ì£à©m4©¿á ðçöέªé‰5¨Óf¶†(=5#ºXbx|™A‹yýØ†ÞæyjâŒ./#¥W3â G4×¶©ìiS¨ã?mÊS‹¬åOšJ~Òý¾'xµŽ¥)P”+5 *ËM[WÓÓ[hfü1øuÿùý¨ü#¤ë_²ŸÃ»_|‡ádŸþ.ø’ëÇZÆ•«øoAÒSíºuªéŽyIC7šÂ9Ld•gVÁëͳ?¸GV—Wx|ÍâV3 MQ¡V•jõß³­7Y7M(ÆË‘sC›F¢ÕÅ`qPN’æ§ËË'v¬–«C×­¿lOø'—þøcö.øûR§ÂWñ¿Ã ;Wøiy¡Ø¶‰%¶‘sv-,šÆK¨V¸’e1¥±ýóHŒõ¯ŠŸx—€ÍñDøÝûAxûÅ?´O…ÿ·ƒø³Æß õ++Í#àÿÆ CDñ6¥©Þ[ —TmwF&4µ…®.VÞ I$qª°'i¥Åþ*xeásVyáN6 9åþËJ£Q¨Rx|W,cR¢„%9Ji]·Nú£æs\û ƒJ†5ÊS­)>mæZ+;Û[Ùh›±ÖþÐÿoŸÚÓãF“㟉vËà/þÐ>(³ð¤? Ö †º·ðþ–Ò\®«{l¬${ 9Ï3Fw–,¢×óÏä\EâW ׇbçƒÉòÈÕ¬©ÓŒ§Z«‚…5R¤eMÖ¨àœ¢ïNq[³ÎÅå¼KÄRRÅKØÂ¤’öVÕF.üͧwi%g§ó-=×öìùûÿÁ0|Uûø[ÁZwÇ{«>/ŒWWø…ªjðŽêóxÎÚ[«;qÕ·ûTÖÌfŽ]]cQ¶@2AÃ>0ðëŠ1²|¢žýŽœkЧo a)ÊR­&êK÷‘Q•Z®Ji·yEŸg€Ê²|&] ÞœÚIèÜö¿K¾Ë¶‰ZÈï|ã?ø(çìûñÄþÊV^Ô¾4x~ìkí?â—‹š-. žH/£º»E?Ú:¸I–$¢9,Œ~ŒÇápÿúÁ*ÑËë?ma©sTs¬’•' mþç Õàå)JJkHµ¬}sÆÑ­ìmδÕé§[¾¯ô+~Öÿ >7þÓ¿´yðÇ„5o†~ øðžå|Cð?RÕüHÚµÞ¯¥^YKe«M{¢#ÇåžHíÒW.¹b~SÃiÁ™®AÂ|/õŒD18Œ9:8ØÂš¥uiÔJ§‰jW•“©(¥d–«U8˜Ô¯ˆåN*qÖ:Ý´Õ¥xöÙ\ùàí ñ‡âf½ã¿ØGöîÿ‚|_èOüoão… þhæÁe›Ã׈³ýŽH^#t·¯¶êˆ±ñ*œ¨FÖ8†²L«‚âÎÏcV¦&¬°Ø¬V&|öX¸7h¤¦©ºt”£U¶çð½%Ì£çÐÄÖ©9ÐÄQ²ŠæŠ_ÝzÚÝÝš=·Qÿ‚’üý²ÿbOþΟ´Drø{âÇÄø³KÕ~xèßjé=´·vRi¶ÍsF57H‹Çk(Wc¸ª²!jø*^ñqö:É¿{—ákágUeÉIÆjEVj”¾¯+N¬ŠV»R’GRÌhbðŽœôœ”¯«Ñ´×¯‘'ìñû|Qý¸eÏ~Ï¿ðSÿØÛNð÷…>øgG¸ð=Ƈñ&ú=JkØìšÑÜVÞKÚÈ sº2î¡—?-GqÎQÀ]Î87•\F*¥UYOMÓPuEìå>xÔ‹šÒ\±vIõ 6®/N–2”Rë­ím¦{†ücû@ü.ý’¾+¯üáü+s¥hpê6–ž"ð­úi‰â]"XX"¬M(û ìdÑ¡—s>ÖÜ ø¬V†ón2Ë?Ô_jªTtäéÕ‹¨èÕŒ“mÉG÷°Vö’jJêÖGZjXIýnÚ_U¥×éÛsáß?ðF›?ø(×ÿ†µìËñŸHøeð¶_€þÓtO øÒÒöêâËK¶ŠêXÖæxo2ˆn¶¹f¸Nêþ€áßgá†e˜ðþ{ƒž3±µç:´]8ÆUfáá Rm>h^6QÝ+F+(ŽcV§.X¨«-vó³;ëO‡ÿ<ûLZütýŽ¿j¿‡ÿµ}GöS_‡? |O¯|BÓî®ü[âÍ;S7“¡„8[–Ìí#ƒ˜ÀärHùª™–IáIe\K–WÂS†gõÌM8P©aðµ©*pjV¼9ª$ š÷º=,mÏÛª¸zŠ^ç*|ÉÞIÝúØúÏáŸì¿ñwľð¯ÅïÛóÇñoÄ¿†úÆ£­x'[ðŽ•u¥YhÂãN[wIm–áÖñ×7seJºíPA'ñÌ׋r\&/–ð…”08¸S§Ze ³©ÉUÍ8ÍÂ.š~æ‹[§vÖ‹Ô§‡«(©ârÚ¶–ºüO)ø;´v‡û?þÞ´§íƒàøÂvw—š&·‡n|-£â{ËÉl¬îã[©U‘>ÌÿdÒÞÊåÀù‘GØgN|-‰ÏxK$Ê«ÑÅ×pŒàêCᆧÕ©á›ö‹Úº‘ø ¹[ÒMóRýú¥ˆ«Q8«ôå»nÉë奿àÝñSö{øñ×öÈðwŽ ã}Þñ7á¨þÓѼ;¯ÄfŸF¾bßc¿µbÅ-§’Áö«?“…l)ðyGñðF/.­ƒU08÷îΤ*­KNzU¯:jVq»Qæ»Úg]J4kbc5+Jèú5ÙŸ$ü×>'Ùoñþ¦¯ÎÙØv´P@ÿÒûò€ w € JÎøÿ)CøEÿdÓÆÿú7C Ñ( € ( € ( € ( € ( € ( € (È Ïø“þ YãßÚSãGÆOÙö½øcñÂþ ñ­Öwð~÷º†œ-.l‡œ4ȯdÄqÞIÑG-àÅæ…]¥ôŽ? á^]ÂÙFYŸeXœ%|EÕXµV•NhÔ÷}´©¯yÒŒ£)B•á>]wR~4eŽz•(ÔRIÛ–ÍmÒýüö¿Üf~Í_·–¯ãØÃTý¢?à§µ¿Âˆþøï“éM£øWÃ×ÚV©ax×GNÔ-Øy²Ér°ÊíšØyŠåzéâŸ(åüsK&à\«ñøj±Ÿ=Z”êSœ=µ/vƒœRŸ%KJÞ㊕âgGσö¸¹Ç’JÚ^úè×wÚèÌð?ü·ágì1ðÇö}øWñëöw“áífÇÅ:dRø²óS’÷AÒôŠÛN–;i¬¾Óx×k$, ª2«–L`õæ æþ fÙî?(ÇýNXiµIRP«Wœë'8ÕötÕ¤œ“jÍG¡ ÊJt£R±wÞ÷Im¥¯©ë´7ì]à/Ú ö³µKßø'€õoøÓEŽçÅ´‡ˆaÓiž¼¼—M°Ô»°Õ-²«Ê®ð5ÅÁf lŒ7ÞÈèÕÌ<-­”ç´©áþ¸ëc°x©T„çG÷uhÏW5”•*vNUZvqjK·†a”ùRŒ£nú¦¿_#ÔüAÑï¿h¯hîþ|Sµ5LJaK«Éª U˜É#”%•#Æw¥}Þ„e‘æ<,m Êh×Ì# ý¬k7 kØó7 E_Þz¸µ%ÊÎIbcN¤1\­{GZJÍk£·è{Ÿìëûüøñwâ_í/ûøÞ+ƶWcTøc¡^ÙçÄp¾ìHš ÉÈhÃÓÌ‘™ œÏ¸›Ž3Þ#Ér쉨òÕÃJ<¸™Æ~Ýaä´‡+iJ÷ÙÆ.å½â­óù–'êØ˜¹«J\²qZûÉé®Öµïgumµ=ûöý±ußø%·ÅO‡·ß³UÇ‚®þ|Wñkø‡â¯€ç»žÿYÒumKmåýóݘÚZù3Å$q f„…¾Ž„ø«…3,wâ*aëåô]<6!¨ÂZ8uÉNœ(¨sWª¥FNm)&îág®c›ár)BSœc ½SzÝïmÞÍl¼ö9Ï¿ðQÛ ö§ý²¼+àÙÄ^#øwàˆI}àŸx›Ä]Çön¿9I¦“W€ù@$è-Ý"d‘Ê#©‘ÉDþsÈçÄ|gÃê9&]MÐÂÎ5«âÜ—µ…û®ZQm).{·ÊæïËÍ«ž|ÿ=Îs5C-³£$Ò«(ÊÒÑÚQøVink¦›¶¨ôßø&‡ì·¬~ÇŸ~Û~Ñÿ<=§|Iñ—…õµñO‹irË’üÏšV[žåz¸|ºŠ©^\Ò[=9µvÓï<{Âÿ³!ÿ‚¯| Òo?nxÓáåö½ñ²ëÅÞøQ¬˜ì¯ìtí6;›±Ú,ñÇqäOÆå§D‘´ªÑ°Âµ}®3Š×ƒ¹ýXð­8¸RÁÇW ΩY¯<Üe*|ðœU5 7(µ$îÑË:Ìè'ˆn7—2‹Ñ¤ºk¯ÎÛâÇÅïÚçþAáØkVñf«¤ø']º¶ñWƒ!ŠesÃà13ÊðEÿß²x9>KÁñ ±(ðÿޝü'®xÇ> Ôu 6Öö ó_Yê/ç­¼¥÷C¼É+ ûó܇•ñyNe›F­ ´a^èÐúå8T9sU–ÙUÃ.WV*6”g$ ŽLʛŨԅ-Sq»|®×Zy©t5i?ø'?ƒ¼ðšóö”—öóñVƒñ_á­ž£?‹u¯Üj·?<,¨&¸Ò’ÒÕd7{`79îa–iÉ îØ\rp·‰Øìnq d”ªåø÷8*P¥QÆb[å…gR£Š§yòsBœáNšÒ1WeWÀSŒ=¯´´ám[»Œz¯?žçŸþÌ?¿dŸÙ»âŒ~iµ_Á?~Ò¾ ñêüFð—ÄŠ—íV»ŠÊrÓ]ÉqÅy4Ép)Q|Û§e@€úN,θϊ2œ&2¦YŒ£‘Ò ðupøjË–u麱÷i©IÊ”' Ê|Iɶ›Ã K †œáÅÕo™9.ŽÏWÞÎÿ3ÑÛágÇ­Kþ {eûC~Ò²ˆ¼Yá/üO¶ƒáWÄφ¿®šÓJÓ · §Í¨iV’›wµ;¤»¾o5WaÈZùoí~¥á4òl—3§CG 'ŠÃb0ðæ©RRµXѯR*¢¨®”)AiÊå̵gG³¬ñþÒ¬N^ì“Ù-®—NížµûGxwötñG…ÿhÿÙ¯ö]ŸÂ~3ø·}okã¯øâ‹yâm&ITÙ´cåyŒ- GoƒÞS² ßî'Âbø<Ï•\>],-Ô' 5Tšw~Ñ{ܩԼªJ6”9¢¥½º«ª.5©Ñ³ŸÄÓ»_wèyŸì¿ñ›ã€þ|#ø‹ÿ7Õ¬>ø<ê±øK¿t- ;=Æ0ëe-,53dÒi_cÚêv”ªÕqnG’fXÂÓÓ’iÉF(§ý™J¼j)îÚŠIÙ=µ—]<»G~س×Ç~ø£¥üFøÓà}ÃV—ZF·ðzòtº°>Ô,‡˜Ójó‰B]Û›€­å€«°mÙÈü¸—‡²,Ç-ž Z¥y*´ñirOÚÓ©¢Ž<·§5 ®fÛæÖ6µŽÜUµiÍJI-zY®ÿ3™ÓõK¿ø)î“£xâÁ‰¼)«ÿÂ=ñ§ÃzÏ.nžóÄv_=ÃXI)"«I‘¶×Ä®r z•hÃÂúujã0ØÌg^>ÛRá=M ª¨§&ÚRSW‹èâ¬Ñ’Ú'SZI4õk{_§cäïÚ;öÙøÿÙøÉqûÁ.þ h|eÖµ ;]kâO5‹{Ë{ÅÛ-È‚êþ{¯´]IÍ /Û+(Rp‘7ìœ/À\Aâ–I.ãÌ]G–SŒå =Jޱƒ•:Q§ìáé4éFN«Né{Ó^n#KYá°N§VÚ·ÍÞÿäsÿðH¯ø»âwìiÄOx¶ã^Öõ¯ø¢óTÖ®®Y/¦}^à´¥ÐlöÚã@üÑâf_‚ʼ@Ìðx:J•*u¥Á&”RÑ$žªÝo­÷Ô÷0L9Ov•ýO§+Ꮀ €?ÿÓûò€ (  ïŸò”?„_öM#ñg‡_ð—ø›MÑnnt iÇeý­x‘–Š×íùŒùÂç'^¦I…ËqÙÆ˜b=… Î1^W?gí)ò-eʵåZ½‘%8Ón ï¢î|Mÿð'Ãë?ØsãGíXÞñU‡Äx?D¶ñ~ƒàŸ½Ô^Öí3NmdA³È¯y:•/m „‚ZýÛÃlÇ2ŸˆGûJRÁP«YÒjJ.µ‰©r)©sN¬¨AÝF¬¢“½Ùãã£N8µÚjM+¤ök»]º¾Ç“xÓöVÒà¥Õ¾|\ø§á_‰¦Ú[È|wñÖú}½·ÁÍN³¸ŸBÒa•wÏku¶Ui÷±7 ±P¿c€ã ÞbifÙv¦êŽ «©)f4äêF8Šò‹´jR¼Z‡*RväI^øÊ„qðtç%>òV´³²îº~g§~Ö~!ÿ‚|&ýš| ûHÚø“ÁÞ<Ô|5u¯[øãGð§a¥x~û@¹´¹~¶×:¨‘Ö[B–²ýžo6YJ†tPOÉðnÂ|犱¹$©Ö² èμjU¯ðœ=®B‡*q­yÇÚM.HFíFOM±RÌ)acVêM^ö²MYÙÝínÚžËû1kÿ·Ä_ØàWŒ4Ý{G·ø‰¨Xè7Ÿdø‘¤ÜG4ö,3¨"E ¡†ðƒ˜÷.ÀFr>#‹pÞåž#çXyÂoWŽaç”×𛔜”©'ñÙó5ªwÐë ñsÂS’k›Nkßn¿>ÇQÿÖ«à_ÛƧÂÿ±¥……|mðñ5Oüiѵ‹xµ _X¶w·ƒI–Ð/Ÿ+%«4‘ÜØ»¶ y?Z£˜pNÛæÒ–#]ÂŽp“§N”Òœ«F£|‘R¨”eNÜÎÜÍ´kgL­OF®åu«ÚÖßn§ðbOø§öð·ƒa},iÍ„vÓ7„?hv¸¹Õ¬,žêGžßQÌ’x®$C"ÄÎJ€ÈyA^öz°¸?±8ž+—´¥.eíp±¥)¨%Q|±„¡g5›³ÚF4¹¥ƒQÃèûO}úõô>ý£?à©¿³/ÁÙÃáG†þþÌ~ðƯ†ÿuë[ƒ>ñ¬†j‘É{¼égl‹ªÆòÏiF’I9ýçeFð¿„\WžñFi_2̪â2¼e xº´W6.›T¤”]IÉÐqŽ‘«%'Çà×”ðñYž‡‡-;N2k•_ÝzöZ§ù½Ïsÿ‚{|KøÛ«üKø»ûM~Ô× ºý¢|aðÏH:À8 :×}ºO.’.>Û$¢ÞæîY|½ÎУDeHäÝþ}âVUÑʲ¬‹ U£’ÐÄÕçÇ7í’©7×äöq‡<(Å'Íd§%% J›ìÁÕ®åR­d½«Š´6¿kßfß­´¿c£ñ‡ˆ>ø‹þ ãŸøᾩã=sÀwvŸ>?Æé"Ô¦:´T'F 5eWE%4œ¹åðÜÒr£ý—(Â.N6¼yµNé¿yöõÖÖ*ÿÁ'¼_ûc|CÖµŒ>ý•t_¿uÏ„ ðËÃÖ~(±Ôtk­jiÚs«J"Ž+¨šXÙ ‹$i€ŒOÎæ¯Æ\/åZy~#4–c›QÅ8âjJJucFQö)ÊS¤Ô|®2z´—º…–Ï;ÍSötÜ}ÕtÕûé©à¶ü—ÄZ¯‹´‹Í_ÁµO |1ŽóǺ † ß‚ü5âkMAJx†Ý¤o$X1$Mç<6ê³ÀâBÏøÜüFÉ£Wxy…ÄmO5ø¢þÉ?¶ïÀ_ŸðRÚ£ö†¾¼ñŸƒ|Wi®x¿FðîŸe#ɦ[œÇnÉ4pÏöØ-šÖ’MñGjw5öOÀ²Ž6ɲŽ2£{­ ÓÂÂr¨°´Ng+ÅA¶èÔ­ÏQòÍJ\¯žI+ràr<6qJ¦cœ>j·MÅ^É-£k«§ü­´­ÖíËì¯|Wý£4OÙïáGí!û)øWAñ'Àý'â–»­Íá¿€ž…$‹ÁÞsœ¶—ro¸Ô“P VÌåä ’~®§p~;Ì8o7rÃf?U¡FÆMò¬Z”4'N6§‡t9}›¬­Û™ÜûJô0´å†‚öJMÚ /wÓMo{Û©ËxûâN³ÿ3ýµô?Úöjø]á{ûÙ¯L}_D³Õ¯cÓ¼[âo #;xRH®‚¶-0K—udŽ}¤34r"}[•Ðð§€ëdÙæ&¬'œIS›Šu0´p¾Ó•cƒj´¦¢åIE©JÓIJ2jU?ÏJ*Ôõ×I9ZüºíçÑ?™Ñxÿá×Ŀڧö‹ø ûXÁC?b|=ñ‚~$ÿÂ;àÿxX¶ñ=´t]Ç­jwv» ŒSÛù¬ l>cs^f[™å\ÃßpnsCG‡öÕkV„°ÒJ›•9P£N|ÞÒ¬á>x»¦­îûñC«Nxª´«b©Ê.2²Ißç&º_}×}­´/þÊ_¶-Í¿ÇO€zÏ<[ãÿA­Xx'ÄZ©–ã@¾`ö—kž(Œ€G&Ð7§E~7_ÅüNYNo ô0x—Fu©ÅÚ5`­Rë IGÞ…Ûå–­+3ÔŒ°ø¯~›NQ½Ÿg·©ðgü×âŒgïÛ~ûãwüã?‹íþ(xÏEoèúŒúM׃o•õ}ú}…†©§ïÿLfûC­”ûfHŒ™Ø¿¡¼JËp\IÀ0Êø Ià0óúÌâ¥R8¸µBÕjU¡VߺK’.´/NSIB×hñ°3©Kí1r|írôqÝY&ºù;i¹õïüAnü;á|]ý§<àï~Ïž øu.¹uá3£É/ˆˆí¦fŽæÞY$[u‰abñ"HwÀ¿ðÓ“Âe¹z¸|ãˆT•^t°ÿWœR”'QÉÉk¼eu®§©MFSª“¦•íÖÿ‘óÿüÃá_ìûDÿÁ?ãø“ñ7à¯Â{Ox’ßP°Ô®þ/hê¾7·Òå7w7š­ÂÅ= Þx~Ï2å#T€…T~âfoÆ\1â;Á`qÏ,59BQXOgK *ñä©t"ç7{H?zM»¹]œÐÄà¹çDÞ—–²Kfß­ÕžËî[´7ü’ãþ ù¦|/ý¦ÿj˾x£EÐåµÔ¾iO§xŠÕ¢7Þro¼$«$QÄsá\€ÝsÇÃ>0CÁZ¹–EÃòXü=I©G/k‡•ýŸ+µ;óEÆR—Å»Wkbëå¿ÚŠk.I.ŠÏ¯OÌúÁßðPÏø&ï߉Ú_ì?àžÑüM¢ê0øOHð„Â֓ň"±Ž1D …EíàzWæ¸ß Y_›e+ì´m^ÿ‡SÙ?jýwNý¡´à½ïÁŸ xÏà·´mVˆß5?Ø}ÁòE5‹ir/$’á•FÆ_)£ž@? ÁØjœ5ˆ­™ÇSšagIáðñ¥SŸ¥&ª®xÛÙ¨Á7ª|éÙ-μD•x¨8§ ^îêÑí§]O‹¿àš×ÿ¶wügÁZ—ÀOÚ³ö'ñ?ˆ~Áã™<ñÂXjÚ…¼—7ø7WV–·2È-×8T6ë—¶Ve#÷_©ð7Œ˜êyÇçéfNŒU\=WR”…?‚IÓŒ}¢›öQƒrö®\ׄS<|»ëyd=jMÓOÝ’³5vín»éæuÿ‚vþÆž&ñŸ†W'̦ÿxúÛá]Ø4ä§9Ïšm¥º³~zü¶üÆxŸö×ý²?d¯‰–×?àŸ¦‘ðZÓRÕü1áïü(ÑßÄÚýð³X›MÖÙ,öÅea<áò$ÌÑʉœ¡%^€øŒ²™,{™œ£J½J˜©¬5ûNeZ…ê^U+Bv—ZÛiö6ÿï5-¬mݯeÜ-ÝmÅÄ­ÈV`@¦ž?Œxÿ8Yžx d+O,Su',ºe:³JœmΜù"¤µ‹³JÏGZQÂái¸IJ-(òíÎÝ’×§]:‡Æ‹?ÙÏöIñOˆcÙ?àŸß>&|ñ>‰i¯üF³¶µ¸Öt ÇŦØiZvÒgíà·mÖÄ$Å nhÌŠ|OÆxJH³Ü62£9RöãF­vÔ¥Z¥z×J2ävŒê+U»‚—5”_c†›¡ì¥(5wÕ.É/^ÛZÏüŸà§ìÕ}«x߯ŸµëÑã/ˆÚ |$øŸá·ð†£à_²$Z’,Ñ<·ö ‰'@ÞTĤc]t< ϸª,. ý_ZsÅaª,]³sâ}gÄ>)ñ‡ÛÖÇí¤>Ôv$Ão€<¸@ÂŒàu¯Æsklb°ÞÁå\îmË5Ùw€´aÿj«“ðçp^¯c#˜Ô§¬>]¾å •$¥WÚÊœù¡eg%îIU|©TJMyŠ­l^*_V"Òó}WK]K±îŸ¼ðŸàWì—¦|'ý°õ_ütñö¯yr|+‹4ë çÇ:ì2É}ed$X-åcdl(òþNã_Ÿd†sÄeS0á¨ÔËp”Ô}«¥*•£†¡$©T¨Ô›œâîäâµ×–6Ðë­t°¼•­9=¯eÌ÷KÈùÃþ ‹û1Á@?kØZëã§Ä…Ú‡~ÚFçâ{|\µ´×4ÿÒø5Ö“¨J‘]ɧ\F„ÌBê,ƒ|«æ$²",XP£ó¯ÿÁc?ogž øoñNøE{ãBº¹Ônm<9‘¦Ã#,öÅ!† ù@µi-áŠW(îBþð~W˜åxN9¯ŠÍ³ZÑÊhÆ•)ÑÃRr¯[9%¬åÎãvå*®uiJši,7<}ï …âìþªúÛ•* §ÊŸ/»Ö:rÏá÷_6œÚ¥ÛѾ1ø#Àï'ìÛûþžÔ~xgÅ„ý±~<üý“c¯KÿPø5¤êz¾»yºÔß <=þ‰g®Z¿™m2ï(èÈžOœrÎõåpGqñ¾1p.P§I5‰­V•«M;];¤ùù”mäz¸ªô0¸hýn:½ì´MZ\òŸþÈ~;~Ëší×ð'þ ]ñã'‹—áýÅÇÀÑ ZØxr ^#u˜ç³·Å•Ù7'Êt¹B#hœ?Ãöî5áÞâÚ|'›pí ¿ íâ±¼î¦"n”¹5IÞµ;S÷£*r\ÊI¨÷Âjõ¨¼D+9»{¶Ó_5¶ýÎâÃãÏÁ¿ØSRøC'í½àüKý£uoj§Å~ø_ö¯ ¤· %Ýœ©¥˜¦Ž‘P«ˆÃ–ËsàTáÌóÄYªájô0y-:ôãìªâ\)9(µNquõ÷Ô\”[N7嵑¤kSÂ{?nœª´õK_5§cèÙç³ÿǃ~.ñoÊ1¸Ó>:éíâ FÞóŲ¦¥¢Ã¨Y¬~]ª«ùšaTlˆÐƒ¹# +ó~%Æñ&Ažapøü5<²^Ê-RNGJmÞm®Z÷kV׿ ô;hF…jR”$í=wÕ]tìyßì{áÏ„–¾*Õn?bOº£¢è_ ðÇ„¾>ÞkÉtu«û)å€è÷‘¢,íäKrI?>agy~Ÿ±YÌðtãÅÙ­\T«UÀ¨8û(UŒeíé¶Ü´‹qŒ4åI=™Ž4“ÿgв”»Û£ôîxü§öß»ð¿Â~~Õžø}à8þ$|X×|;ðûXøUàËÆÒ4ïÛÎÖ÷W„—RÌÏ=ü‰öV, ýJ¡,ô_¸¼êXέ_ð˜Z5«ÃZŸµžqS„i*qƒ”!E?l¬ýŸG-ãÁb¹iòÕJ<Òir§kùßÏc³ý›ÿàŸããÿÂoŒ~Õ´ŸÆ_Š1x‡Æ–°ë:oŒ´—𨹸Ðı´0[¤nÚuߘ¡Œh‰2¨,X®ááq?ˆÿêæs•,ƒ/Â`*2p•,O,q<­JSiMW£k¥)JPm¤’vzPÁûju=´å+½šåøF3öáý›öùÿ‚x|5Ñåýt ;Æ>ñg‡ï/¾Yx‹OÔ…4µÔ"ŒKq¤RFÖP¶vàºü¡KqUÀR¼9ñ31¨³YÏ Z•xÇéÕ§íê:rö-ÂJRRUd·Ò/Vì+Ìóo3~Îñ˜zPËåJS’”«J“”}”câB¢n^Þü©¥xµ4аԩfPÄRƒn¥Û¿Kõòk·ùWŒko x3öãøðöçýž|ñã]ãëQÅâ‡:}Õòø.ÒòäC§³O:¥Í©cqp]V"SÊ'Á˜Üwg9Ç cëar¸ûéâ%}fTáÍ[ߌ’n•K{($Üù¢¾#Yâã e*Xˆ©TwÕ_NßzÜã|_£j?³Ã(ü+ÿøI ü5ø £|SÔ4MsÁŸ<%¥áoÚjçØê׿Rn4ˆ,æZY U’|pª7·‚¯OŠ3WˆàìTñ™½L5:­ˆªéâp³ ¹jÑ¥kC:ÑmB6n4ï«iÉg5*퉊5+Y+©_fÿ–ÏïgךÅÉ¿k/ÙëLÖ¿à_þø“Dºñ5¾‹â Vþæáì×FR#Ôcµx~ذò‹ìnÈÍ~-K$q-J\i‡¯F¬iÊ¥8ÅEOÛ=h¹©i윗¿kJ×¶§¦êÕeþœÍ|7©â'×Ïó|žaˆ¦ñ4ñq-¼Cƒæ¬¥EóF 'Ë%Ú­©J7iøqƼ)R¦äàŸ+M|=µó‡Côöeý þ&xŸEñÁ¯Ú›JƒGøàÚ_ø“@Ðï,ü)q%ÒI*6—wwƒr‘ÄÍïåNüÁÅ\5•a+áó<‚N¦ )*ç8O”MW§NêR¿'óGUt{”+T’p«ñGv¶×³gÏ_þ~Á:¿ì{ð3á‡Å©n¿j½/]ñ•ý—†>*^xbMW̽{›§{›ÉšGh!ˆ†¶óØ/”«Æ¥ñâ-7αÙrY%Jt¡*˜eQR´ ”iÅ(©JwU9b“|ÎZõâ£Gð´áS÷©¶¹­~¯%±Ä|³µÓõ?‰v6VqÛÃÆÏ,pEE@5i¸ ¿§Rudç'v÷w½þg²’JÈî*( ÿÕûò€ (  ï¿ò”O„_öMkÇ-cÌš½¯¡Ž"¥ E$Û]vùŸ:üdÿ‚cx7â×übßöð4 ø;ªjÃIÕµH<%¥½îŸi©[ßAuäFòÃ4ñ4Ѻ+»T`p1¶¿JÈüWÇd¾)K‹±N¶aNÖœ]Y(T•9Ó•*|òQœ#%›I4Úzës‚¶ÛeßVVƒimªOwm›W9OØcáçÄø'ì­àÿÙÿö†ø3§x·JðzxÇÅ~2øƒáÍFë? ¼W—öñˆ¦'’âXe PQŽA½3<·Å/Åç6.T*Wú¥ 4*FPe(B”ß4dà¡ FíI¾dﺱžÀa!N¬oËÌÛZÚÚúœÿ‚uo¿¶ßìeðkáÅø(«ü=ñ‡ÆOÜø»H—m®x£Á©$·±i6ÏlmÞÎâ;Gµif„¹Có‘Ü7§˜QÈx Žs|~_}k —ÒŽ|÷•¶£MÖšš¨ªBUÔ!>U%$ãÉ%L}¶7 N«É)¾m7qÞÚyoküÑõÃߨ_á?Ãڟ¯kž2’î å‹Å¿oF½ªÛ¬êÁTÝ\(vŠ-ÙD-ÀÏ<æ¿&ÌüAÎslþžcpè¸^–>“qjï’•JV÷µ}øa)Ó¢áv÷ÖZ½|üÌ_ø&/üQ£ð?ÆÙ›â/‡‡5oü_ðUõÔڧí¶Z–wu-¬‘]ý£È¼7ñ–vÚ×Ì+'˜ÎEWø±ã2y†Sž`¨{Zup˜È¥G¿ âaÔR§ÉÏOêò²R’Š­kÇ•+ž_–I*´ç/µªÒÊû;ëÃæ}ñûf¢Ããj¿²Ÿí ¬Çñ÷Nø ­Zü<øQ¥x’ݬeo9|Kû6`a7N¢•ÈP®Q”»8òÁaiñ(ž6Œ«â¥NJkÝ|Ô½´ZŸ$àÜÜÛiJ-kkny{)þó•Ú7ümø\ðoÚËÀÿ´ ?³gÁ?…?ðRé¾.øs¬ÞÚÝ|ZøŸ<:6»á½kûJ;ë1„{Ag*ØÏåFd˜€ÀÄš¾£.ão8S7θ‡!ª°¨§ 5Êu0õi:nOy¸Õug&ëRæ’Œ6jm$y¸ÙΆŸ×ä¹4æ“´lÛÓº·GßÈù÷öÉÿ‚¢þÑß´ŸíqñÛþ áâÿÅᆞ·‚óþýæ›þ&W My¦È&°–/*X Ey Çßð¼x³øid|;ƒ¡N–6¤¯ŽÅµI*˜tª{:eȹUT£8ÎN)J,¾30âLã;Å·‘7ì •çËÕÞé©húZÑm_V“L³âï€ÿ´ügIÑ¿o¯~ÊZ¯ÆˆÇû ßÇâLjsøÅòOn·p-åk‹Æž;‰!‹`&ÜÄœ¡,Ÿ£x]à÷„YÎiS)Ìó5D13qÅJñxš>ÊQN‡´%ÆQö’U%'57ÚIEú˜l‡û¤1üŽ­~EyIÝÆ_i÷ÖïÍ%m®}õd|cñoà þÁB>6hþ/j9—ľðßÁÿ^XÅâtíÓ 6K{·¨Yv1°\ysX—šf<ƒž+.…F­L]MÒu­u¸ÓŸ:ýÌÓæ[k©ö+ž¤a L”fÝ×+jöé®úntŸ·Ž¿fŸ–žý¨>*|>Ò|MñÁº›Øü%Ò¦ÕÒ×Q»Õu0-¾Ãddm¾mÂ)\0+ˆÉàG•áÞ_Å\Cÿ´«e~ZmßFßVÒ/,5'³IÍi÷}­¿çÄß‚Zíÿû+xvÃö¡øâ/‡E5Í7ĺ—†§i5Õ…ÆyöˆàžP’Ã,MåáG(äšË)Ïqq~"y"ž.ð©F59f£8Ö‡#”cxÎ2\Ï–ûIjšÐ©ÒXÌ:ö©ÇTí§Fyž…â mãG„?ioØ;Æö~:ømñ‡_[oÈþ*Iü=á'O´º„]éâx£´y/cÜYC²¹(¯ªÄa§‰È±YÑxlv_j Ù8ׯV¬á.LDù%*Š4Ÿ5.gÒRå²0O–¬jÐwŒ÷×D—UµµßsÀþ|øÙÿ*ð‡ñK]ý±¾ø×Æ1|O–߯>6ø)ã ›ŸøMÒ)äÐôkëTF™æ•"y Ìe¼›‡ˆ»4i-~‰›qCáfc[G)ÄaðÏ *8ÊPœqX¤åˆÄÒ›’Š„\”U)%Ï>UJ:5ñ´Ô¥QJWÕŵʻGþM¡?àßðN?~Á_¼WÁ/x^Ojš aãiõI¯oÚí†àçd¥ˆ2'Û«ãqüOW&â,m^ÅVXz‘©B2ªÓ«,<½ÞIèÖ±²|¶]¬tÆ‚©J*´UÕž›_Èø÷á‡ìÑûRø‹ö«ñ-ö™ª~Ñ ¬.µûɵüMø—§xŸÃZö˜Ú¢4ÚM¦–ïºÈÝ@XC2ªIo $†ý»7â®Âðv#€ÇN0‚,>®J¢¢ÔkT®•ª{)ÿ Ê5dîÕ–žd0ø‰b¼â®õm4ÕöK¥úv:¯Ù³öYý©`ü]ñwÃ/Ø›à‘à›T—úWÂýVþßÄ$–ÞáÎmtoók ò%”K&Y|×ÈÂåkÆâž.ápyVœcªb”é*’ÄÆœ¨QSŠúÌ©û/ÞËߌy“äVw–¦”pøœêJãËgd¯wü·¾‹­Ï¨ÿaO|Zðì›à¯ |wøƒoâG¥µý^×B³ÓSíHÒ´g²ýÂwˆI†1<±5ù7ãòlÇŒq•òšŽÊÔàçR£åŠQRç«ï¾{s®mW5¶HïÁB´0ÑUeyuÑ-õ¶ši·®|×ûpøŸþ Gð[öúøñkÀo!ýš•!½ø±o.™¤Aaá«+l‹™®.®GÚ]%Sæ“5‰†x+úa|.Ï|9ÇeØÌ"yæ±Â¾jòiÏàŒ!ݧî®tùœ–ªÖ|8¹céc!8K÷_km«9™?bOŽ?¶•ŸÂïÛöfÿ‚°hW>1ðŒ>'Ócø» |-Óï×X´½¿B¶Â10€}–M®æY7Ïò¶Ez«r©™pÖ{ÃŽ»ÃOê³ÄÔ‡³•:nò¿+Ÿïe/kdãm#ª±ÂWÅ(V£]s+ûÜ©Þÿ5±Ñü¾ý¥?c½?†´î¡ Ý|ð†©¨?ÅoŒ?y½oe«é÷t>pøAÿ¦·ý¢~éóþÜŸ|3¦~ÏÿµUøeâw[{;¦ž-#í¥õùdX%³˜º¤F …$ó#|0!Qμ Ÿ ç3\+‹©<ã­Êœ §YVä¡N•›œjÁ&çí9”£Ë8èõ࡚ËO÷ñJœŸ.úè½æúZúimZý‡?dO†¾0iÞý‚m/‹ëá ßHñ‹,|\§\ðï‹4=B n Kº™;ww”O$Ö¼Øpw>7øÓ7ÎòZ˜Î.Ê0žÞ««J”©~çBµ)Fu¡å5H¯kÅèΜ*Š8z’åVnú¦žº=?Ìÿdo‡6?¼#ãO†:g‰5­bßCø¿âëHuOê-yr««Ï‡žwù¦“ž]¹8ä““_€çLç4­Ž©NåRNN4â¡ߤb´Šì–‹¦‡¯JŸ²¦¡{Û¹êµæšÿÖûò€1µ¯ˆß¼7¯YøWÄ^;ÑtýSPÿ 6ûU†‹žp<¸Ýƒ?

xúò÷Oð/Ä=Z¸ÓdÙ¨A¤êðܽ³g‘cbSŸZ±æ[ÑØ¹ð4ÿBøDIÿšiãý¡Ðèˆ ò P@P@P@P@P@P@æ¿¶?€þ+|Rý•>"ü5øâGѼg¯x/R°ð®­§%›YêÛºA0ž/ž®U·¯Ì¸Èçôü˜äùGeøìÖŸ´ÃR­NuaʧÍN2NQä–’ºº³Ñõ0ÄÂ¥L<£MÙ´íê|ÍûKjö_°—Ã_¶ŸÇèÚ·‰~hºgƒþ%ø¶ó[Ôoïôý3PÖ×rYEQ™ïD?<±—Ùæ0Á,§õ>¡SÄ<Û:ጢ´áC:˜Œ=% P„êRç5VOø1'-#5nTôI¯>«x:4«ÕKš));·dí{w׫FGÄŸ²·‚?h/|6ý•~'j>Ô>2üGÐüañûMø]¨x«Dø¦êVëj-¾ÙóÛXGq’ÆteHÂoe!ŸwnWq†aÃuñ¼A†heøzØz XšXZØJ”dçÍìô©UÓ—2ä’r•ùT“Q²©Wñ…)[™¦ôæROK_e/ó>Ìñ Â;¯€¼;¡h𯑣\Ùx?V@‚Oì&’"Š`L ˆÒcR¡‚íë>#ã‚4¨ÿf¸t/üAñ¥î“ªjÃÉÔZk[¯™­u¥…Ì—ÊŒ¾\H±ìff¯Öèø©€á>Ì©Pú¦&£Ì]Z(ªÔé{Ô”gRT“JxWìãE´ù¤Üù¢’<éeóÄâ)·Í¡fÝŸ[¥þ/>Ûg|mý¿?e_ÙÄö?>7xóYMe| ý¯§}§C¹»:ݼDÂa‚TB——Ïå»›XËJÊöí9¯Ã2¸Ã0“Íòº0t½·³•§û)KÞR”[½:*é*’´´y¯¡êÕÆaðÒTæõµýÍù&~ر_Àø)Æ»ïÙ‹Ç¿4ý¯áM޹û:ü@ðö‹tòÚØó¯ Ôm#¶µÅĪ ¶i#‘ÙeÛû/ñçx_Ã=Áã'ˆåÅN–>…IÁ)NÜ´¥F¢r©?r/ßw„d’p”Z¿›ŠÂQÇÔtd¹oÁ«íÖý7;…ýƒ<sãûÙ/àÇÄ­'¬ÿ ü?§ügñ×ÂßO£xÒôÖioofH­­®H¸ódÛæH².Ø >{þ"&c º0Ûø¿ÃÆiõ¯húM½‹hº|[šÀNúS<‘¼‚Wäûª+ðSÉóú¹f[—a ÖT«Tr”ý¥IT²©ËöSQåŽö¾ížÅêQŒç9]n—em˜~þÒÞ$ý©$ýœi¯‹+ñGƒf’¿+VÓ›úÜ×ÕßöÔý 5 à‡íùû xCXÒ§Ö`Öü;â_…>7¸»µðÖ«¦Å%ݵ΢“yüÓˆŒHŽ|Å”mÀn*?ê'R­šp†uVE S©OF1•jUš§8Ñqç†ru¹euÁólßÖ«5OM5ºq{5µÿCšðoìÛû^ëÿðC‰~øÏyãß|iøŸà­zÿYÐ|[×VÚÅÜM±´EÛµ¶äWŽ!#ónÕÂWÅ<†ñÿ.Å劅 ¯Z„!:Qj2¥NJ^Ò£w”çfÔ¦ýér«Ýݼéáñ?ÙSU”䛳îú//#Ðÿà“´ìÑ¢Á?¤Ò¼5àÏøUšOÁKÝC@ø‘¢ë÷ǪÚÿ¤êI8vˆ£4Æå\ªyÅN °9ã ñUÕJõ¾»S1TêáçÛ«J~å$¢Ò•Ò³I¤ß*jé¦o–× °VK•Béߣ[ê|Õá_Ú§öý¨ÿhÿþý¤ÿiGâ¿Â]f[9õÝSXºmÁ>³³ÔIÒ!ä•~Ù5ÅÊmöî#¸FzýGÂÂ|1LUj±«>x=úF6z/;÷¾£ük¡~Å߳탅Oü¢ËáÁÿƒ6öú·†þx âúÛêÞ û|š†©g©ØH{è.Iˆ, ìÜ´qY ´à1uÅœñêóÇæYƒ•:˜ºøNhF‡³*£Ur”éûךŠ[JnN)¢PÂakÙVä§ yTµ½îÓNí¯/’±êßa_Ùÿþ ƒðÖOÚ7ö˜ý«3ÛøšâûÆzs5¸’S# 1[¯É#U m®§ÄŸ¸ë‹rü¿F„é,B«CéÆHÔJv\ªÞï½7¬õm¶ï©u0X Õ“iÚÒ•ýë^Z9ûpx[á/ìÝÿ¶²Ò?à–µ_‡>øoÆZ±ªémöÍGâ-ËÙ†6a0š ¯Ý‚ÆÜ1Rq´kî8œñO‹“©ÇÙeLml<éBs›ä§ƒŠœëG•ÆTõÑTi5­Ûg6.è`Õ*(§wÝËm÷ô=7âï~ÿÚüñ£à~Ÿ¡øe<+£iðŒé>(øsl}qm2[Üh¶ÖZ„·šþH¤µŽAIdMÛ”Ÿ“ÉrìËþ#Ž/,Íe:μêûIÓÄI¨ÆqsyÔ¥+ÎxÊ5g+{®2µš:*ÎÙq©k%d×mI®»lwµ·íeû$]ü°ø#ñO㯉þx¾KOêw¾êˆÞ2Ð×Ì·¸[!i`&sŠs´~O™†ÚCWÁœÆpâ)æ¸ j¶> ×>]][¾•omöYn4›ØUuÀdxîÈ\>üF›ÉiFêÕ…ýës>Í)%¢Ù4Ý–Ú+T©ÊÞíÒ]ÓqoWÖé?ŸÞþ«ð'…®|kÿ øG Zx¿WоøÎ_í-xã¹ÂÉ£/t‘ºìmÀ‘·9Dä`ƒ‘©ú)àÏ Oá[ø~çŦ²ðoΣ¬Ì’\˹‹|숊qœ (à½hR€ ( € ( € ( € ( € ( € ( €!¾YžÝ–ÝÂÈT„r¹ÚqÁüèN*Jë@w¶‡çíqû/ü4ñ–§ð²ø*/ìù­ügÕô=;Po|sð¤ÒøgÃ~Ó陥¿‰/£E);Ÿ3剨à1ý-ÁœYšàhæO€ñÐËéT”=ž ªXœEzžÏ•*RteÍ)Iµîë$•ÚLð±xJ5œ2í_ÞZ%ë¯cèkö­Ð/|5©| ÿ‚yhÞñwü;à_ðφ繓OðüÚì¢;i¡¾‚'„Æ`ŽVbÝŸ,Í~i‡á U<]<׌§V†­jÔªTIT®«ÓçR””ù”ÜTœ­»zµc½×+§†IÉ$ÒÙYùú+þØŸðT_~Úsø³þ ÃÿñÔæ‹âÕÿ‰ßD‡ÅV~&›OµM>ÞÍîï5+ RÑ$XÙ%ˆZr³Éòýw‚|%Ãð,p¼kÆQO.…5UÒtÕIsÎj:UhTqrRŒ½­Õâ’÷GŠÌ¾µ)a0Ïß¾÷ékÝ5éo™â?¶‡Å¿ÛwàG­CŶ׎~kåð®‡á}7á…߈-¼A£=±{¹.¼c&‹=¾ølû8 Z7pK\yÕ¼Gú?ð¦g > ½ze:Ø—8S©OðÅRÁª´§)ý]´äç/†¢Ž±MßÂÏs˜äØWS8º–IBêM«»Ï‘þ.Öµï±Ò~Ô÷Ÿð[ÿÛ[öKÔnô¯ÙÒÇà ·Ñ"ŽçÀ:Uá¶Õuó‡ß~Yw‚etgaã±Ïó—äùwˆkâå–å•e+ÏÝ[s{ŠR•ᦹå%8¾V­ï&¼ìm>3â¿–tãB“IJ)·7m^ÊÜ­iËÖÇeû7ÿÁ!lÿbï ü>ý­þ"è2ø‹ñ7þ?µÕ4í#á퉶hlïmÓì·¶×sHŒ–=̲OŽB!×íy.uÁùV1á¥G€ÄÐp«W7VU*Q—2œ*Å)EUPЧEÞ”$äáó¶{Y7 ar:q¬“[«µ»ÒÚݽ»ÐúÏþ û\ümý˜õO„þýŸ>xwÅ~!ø£ã¶ðÕµ¯ˆõ¹l!·?cšçÍócG â"0Tõóžp^AÅTs<^q‰©BŽ ‡¶nœÛ÷ã rÉǬ—Sé1ØšØ~HÒŠnNÚ»tî|Ê?à™´?‡m+~Î_ðSÿ_ø÷á÷„g·’O‰~ƒ^ñP±Õ$ó ê3C4hw#%®øÀŠ%1¡À5ú¯üE^Åp,ð¹× ÔŽV.Øz²¡†ç ¬•Ê5efnY^sjRÕžzË«CÍJ·½Õ^V}Þþ–ˆÀý²~Á.<)€¾.þÈžÐüMã­_ö¢Ò_K…þ&ÓM¤ž4“½µŽ©,¾h°ÓãÝ<6ʲ"DC''Ñà|Ïżd±ÙoT$2Úª_Y§W`ùâ§R„cÉíkÅ;SVâ×¹)(mž*†W”bœDýÛ|}/Ùw°ï øËö†ý„j¯Œ>0ýµü ~ÑZ›=ž›á Þßißð›ÞCý€·ðƒ)&(óŠÇk‘÷(&/Ã>!p~S†áz¿íLê'*µ)§ÔéËÛKéJÑÒR¿%ç$¡ö•ËR¯„ÄNU×»Ql“·3Ó–ç–ÿÁA>ü{ø=ûx ö•×uX¼ ð“CøI§øgÆÿ²n½ãíWK¶¸”&¢|˜ï>Ðd¸¸5±2ÏöE åSõ¾qç^"c²:PxœÆ¦*¥j9¤(Q©$¯GÞtùa Fk™5~ÑÚ<Îë—‡­O ·å‚ŠNÍ.¿{¿ß×kXø@·øåà_…ÿ²ßísã=kÃ=ð ׇ5/‡?¬ãÓô‡ñÅòÙ}ªârò…[Qö{ÔEMèÒ”-Ç3,Tø0̳þ£ ØãºrÆã)eŸY¥Z†+J•8άj7RU*iʪJj1U £(«rÙ›â00£…|‘s³ME·eÒËÊÝ6g–~Ès|+ý¡þø¯á¯‰þi_ÿdŸˆpê^x¯ÅPÛk2üC›Xaw,®Ê’>冗áÚ±…`µõÜj³žÎ0¸ê‰cø‹é×öÔ©JTV4³rN)7gRn ®çÌ›9°Ü•¢àâ¡FWVo^{ôÿ/-ŽÃöFøAðþ «ñâ7íûRþÒz†Ÿã7À÷w¾1ð‚xäë—#ðÕ•ÔpYx²öËa¹[•†5µÙú4AYcE.ÙñxÏ:μSË2üŸ Ë£<$ëB4ªûc8Šr«ƒ§VꛦäÝKÏ÷³vs“Iá©SÀÎu+OÞ¶ª÷¼SÒMwéÙüýª‹à­4ÚdëmáÆš;¿:}B;Xï$Ë09uwgnkòÍhxƒ™à8{ˆªFš©]ÊxÉ',Eœ9cMÎMÞ”Z\zE·k^Ç£Z›ÁÓ•j+eð¯‡{·e׿sówÄ>ÿ‚ZþÝÿ¶]Ÿí_ûPxÆ>Ô>1ø/Mð.©á=rI®u«©RÓOñêºdÍvr$bµv ˜ Œ³nþ¢Ââ¼]ðó§Ãù j8ˆeõª{JÑ«‡J4aR®Э7V-óº‘MÚ\©´•¼G-Ç×Uk§t½×}ÛÒWNÞKÐúŸövÿ‚w~Ñ¿°ÅOÙ¿À/ÄÍ{âî±ymãö—zoàƒMº\håã3éyfHVF2—!~Sùx™Ã#åAŒ«††³„%EB¤ãSåVÑÄYòWöq4/Êõ³zžŽ[:1RsJ÷¾¼º;Zú®ÞgŸÁL~;Ø|3ý³¼mªÿÁF4_‰úÁ«¼=kð3Â>Ùèúþ§G}}}q-¼€O=Œ¨²F’”iA–$Š-kèü)á깯àéð\ðÐÌ䱯թË:´©¶éR§Î7„+ŸÍÁIAòÎS§ÌÌ3 𣋓ÅsriÊ•Òo«o«Okü“±ô¯Á„¿ à ²”>1ÓlM3Tø5Ü0ëÿ~è¶¾ñ ™Žâ+¸ôÙEškßg‚âÒ˜®å‘í£ò-Çfü ÅÀK.«‡ÀÙ¸`ñ5%Z‹¼\H½!V.|ó§V Û8ONcÓ¡ Xš*jiÏù¢’}íÝtº}9K‘´-å!>cê¡ÈÚ !F’”e´š~w[kýk¨+FQkìÝ/G¾›3œø-ûüøãü}áøI5]bÓG:F“¨x»Å·º¼š^žX3ZÚ›©ÉF*›¶üÎ@®y;÷v»êí·ùù½^¤(E$–Êö]÷þº-‡£ü ÿ”¡ü"ãþi§ÿôn‡RYú#@P@P@P@P@P@P@2i’2HÀ(±'ÔГnÈ‘?kŸÚ;ö&ý³?gŸ?³¾Ÿû_Ýizg„¼ ·ñ/ÄáÿbÐd–UY|™ ºYa‚xä…°²•–¿gàÎãÞâ\Ÿ9žR§R½gON»ä欭·hN”e ÉÆ7³NÉžn"¾B¥5SD®Úí¹‡ûx>Ûö)ýŸ›ãf«ûs^øÛöpŸáæ©|>ŸÆºbÁ¨é6ÞB’=‘DÝáòV+Q™æ60Y‚×?Œ|W•æØê«•ÙѭZ8§NmÓœ¹ïyMʯ=ù¦¤Ô•”LhJ–]…uªVýÊŠiË¢þ¶[Üø)ÿj ø‡þ —ªŸø%f¥àŸ†Ö|?cá 5=SA¶Ó-î&SÏs¨Ç4N—=Ì{(žIbÛ´³¡¯˜Í¼Dãÿ<7Ãä™f‹Ž½Jµ±sS© Pt£SݸÆ0Œæù¹Tmâä×À>%–cž¬>Hã%g9EÛ}í¥žöOY5k+&þ¿øÿ[ñßÚj/Ú¯ãÿÅ»Œ½—†>ܶ^ †xå¹ñ|{R¦“xŠKDŠ4TŽhÝÒ]²îÝñÙUÂx ¢kNuqõªAJ´ù' tœ½•7Æ»’ïT¹”"éÅòÔšK—ð•,&9ãqj­+¹[âV³I--Ê­»G®ÿÁt2çN¶¹ÔŒÍç¬ù@$±P»±_οpf/pùNŠŽ&Ÿ,¯c¯ëq™E5µ”“[¾‰÷ëcö:øËûaüдØ·â%ò|MøÕ¤x­µˆgÅ~%d›NðEæ§s®ª—QÂ`º¸X£E¢l†ÎÀ{øÛ#àŒï_Š0QúžWR—³¡ì©¦§Œ§J%8Aɶê´Õ­k»ÚpÕq4’¡/ziÝÝý–÷¿èløÇf™ð?â¬ÿà•·–oð{â ëš„<'á5¼SvÒýª [FVU7Ÿ¼I"€É1uέ\XüZ¹þXòÎ&RúýJujÕ•7B rJŽ!¦ù)i˶ӧfâ¢ÑPšT§ÏCàwI+ßÍy‹û@øOâ7‹¿mQ©ßÞøGáþƒñà ÆáoiŸÙöß޾·FöM;O’SçK vªÒ˜T2,¡˜Ž3K†ñ¹^9 ªâ«aqÑ«VŒ½¤²ÿ`áìÕZª>ìe*Gµ' E²œ±:Ú*Q²z)ß{.»EñÆÏÂß ¾xoþ ?ì©©K¥|C»Ñïh? ü[·¶oêƒIµ6ÚVº}ìÞLZ±ºØÉ¸Ww“¡­}ŸÔÅç9¦#‚žgSªÇW åõx{yóâœêÓ<°ÊÔ¥RñŒVü‰œµTiÁbU=%nu+]ÙYhúújvþ=ÒÿcÚoàïÆOˆšÿÁÿø{ãÄ߇7‰¾ÝßÚÏã˜DóFsg¤µÄ±Áušý¤ü1ñƵÿÁÏøcâÆÏééö¥«^øÎÐøfélå¶”ÚkSLŒèÓ€bbÚί7#nGå\)‹Ëp\›b+ÐÁÕáªÎX‹©ÇŸ ´š§ñMÎé5 5³ôkÆrÄÓIÉo¶Úwõ1>8þÄZÿÃø«ö«ý‘W\Ô¼[â®/¼]ð«Qñ‘áÏ]Kj–*/¾Ð’‹a¾æO$F®È‚MÀ wä<{‡Í2ü7ñ$0ô”cK\ØŒ$c7Uû.G>yÙKŸ™Å6áfg[ *s•j7r{ÆúK¦·Ú˱â?¼EÿoÚ¿gïø&‡À_|>øMà ;FÑ/.|gáhíìþÓ*yÓϤè·6PE,iµ1‰ •q’}æE…ðQpÊÎ8ã[˜b¥ZªTj¹O–/–1ÄhÜ*ÎQnò½á(¾ç-Yf^ÝÓÃAFIjºõ·’;½{àžŸûzüWÓjÙ[ö£ºð߈¼3¦k_ ~*x»IÓo!¼Ùo4oq— Ðò-nö2ßjòŸtm´3R¿=‡Ïêøu“ÔÈsüµV£ZTqØjR”/(µ W”=ùÂT½Ÿ4m%{&Ýõ•ã*ªÔ§f¯í¯Fí}µêxÇÄïÙwÿ?j½áw…?n¿x·Æÿot7Æú_Æÿ ÉâÝ_Ä:¦™-Æ¡a!ŠÝ’ßHòmlNb _æ–o¹Êx·Ä\![ˆÉkPÂàcVteƒª°´¨Ó¬¡Jªæšu1õæ¹äÕÜt†‹–¦4q ªœ¥k©.fÚÕzi±÷'ì©û"xKöPÔ¾'ë~ñv¯¬Éñ?âf¡ã]Qu8à_²\ÝGh|¤OÝ"ÂKeÏ%™‰Í~żiŒãYu,E(SX,=<4yy½èÁÉóK™¿y¹6íhöI¾ 3›NüÍ¿¼ø/öGñÝçÄÿ xÓâ¡à=kÂóëü]s7‡|Iŧ3jóæÕ•dçk0ô$s_;œeðʳJØ8W…eNN*¥6Ü'ýè¶“iôºOºOCZSö´Ô­kôgª×šhPÿÑûò€ (  ïŸò”?„Gþ©§ÿôn‡@¢4P@P@P@P@P@P@PW‹ ‘ç Q”‡ ÐŒsúQvÐh~oþןðSïØwöJý™µßÙ›þ ýq¢Yø‘æ¼Ðt{iiaeá»™äq%ú9‡É“lÎZ1‘%•—v‹{ÄüGŽã œe ™¾1û:Ò¥Í:Ò«J1R´çMTš³INÉÊšk™Guð¹¿äù} ap2S­wô}Ý»?ÇGev¾R±ýšhÛ¿Iø—àŸÚGþ 1 ¿Äƒ:DÒk~×ìîo£ðì])ž{³gCqCŸ€»«„ +è8cÜÆ9®UÅ{•J®]º8j3§ =TÕéA)Nr·µåæ…Y8ºzI¶ÙâÒȳ<ïšY¶)Þß³[+>­$¤´M[U§T}-ÿªý‚¼yñãöLøiû@~ÕðxÄúç€ìï/?f«í@HðXé×gu}eVâ3,6·VñJ¾m²$a±2–¯Ø|Mãàn$ÆðßRxL%ogONšŒ}êwŒéQv~Ï–2*’ƒä¨Ü­zm#ìrœ¹ÇIM/q~ï}´¿~–¾«Ôò_Œ¿>=ÿÁ0¿nß |pÿ‚øÃãWÆ øgá¹Ôô½oÁÚXƒAÑüM-Ò^ZÆÎöÐOn¶¶ãˆáÞuó#`¼n dyø±áî'*àªX<º½lG$¡VW¯S IAÓ›IUœ&êOÞ8Æ›³MëcÕªåøÈOå4–éh¤út[w>Šÿ…Kû||Vø³âŒ_n> ü"ðý¥”Ö–?´†jþ$Ô<'v‰{mok$¬SO6““5ÎäÝÝ+IùöLJY>M†ËpK­&¥, §5‡†*›tç)¨¤êûhëMR´©Å(ÊRm¨÷û Ñ&>,×<Œ÷¦g’Õã¯dŸì¬ µ›sÌv )“^Wð~3…³ìó=ÇÑÃai)ÕÂákMsáibå]SåJ¢”Õ(Ã9Õ§e eïX¬V.ž"*pr•Ò“J÷qµúi$îúóð‡áµ„ŸðN_i¿ ¾7Çïü=½Ó5¯ø'ãf¡gc­xjõ¤ŽH-o¤+0Óï¬mfeÁ—1í-–-_çy¥HøŸ‹ž?ý—†Å*”êÖÁƤèÖ‚MJt•áíiW©ÝŸ'½t¬’;©A}F* ÚJ6iJɧçÙ¤MûR|r³ý£cÍç]ø¯ñCöZÔ|SñøCI¶Õü0‘ꦥ/Ú,¡°’5Žà-Ä­æ,èW)¸uÖ|!ÃóáŽ7¬¨á°ÙÔ(áþ±' Ó…8òT•DÜ©þöœW+„¯fÜ\[±8ªÊ¶^R¤äùVšÝè—]:ßç±ñ7Ç/ŽRþÈ¿µ‡ÿ>|/ñå÷ì¥áO x'A×ü_àèµØ~ ê[oSW†æâUhô±o "L¨œÍ`¥b¿zÈ8}q¦yK—â18Xg•q™Â•WNFôÝBiâå.]]>GkÞnÞejÏ MÆqRöi$íwÌõ¿¥—­Í‡¾%Ö>~ÖŸ?à¦òÞi6ß³ïÆÿ=Ö›á9üÒ§õGK‚ÖëRcj²%µÝî£o±d0Uºœ—¯.g…¡špnuÀ©IçmUU’úÍ*5¥8R\î2:4'wwNÒ1N¡'KOÿ.æö·ÂÚJú^͵ùùŸ~Õ–?ðS_xâ&¥û+Kðó\}STÐ øq¡Ýhæ9ôËw‘bÖ.5%¸Ž;šXÄlŒvívÆïç.©áN'€§Ÿûzj®ñSºœ’rÃÆ’Œ%(]¥ó&›w¼Uíìâ>¼£7JÎö·ësóÃö\ÿ‚_럾ÚþɚΣðï㿃þë ø_¨k¾:]ÇÂËûÇž÷PÕŒŠ´Zµä2Ü$p´\ÀÄ[mþ—âïpùfe.!¥FY‰ÆB†60©ÉR8èSQ¥J=¥B”ã)©éQ+»{·ð°Ù{©OØIª‘àÞÎ7Õ½’m^ÊÛ}çÜÞýÿa¿Ø¿ÀžýŠþ|ðg‰~(Xh/øq¡jžŠÍüK¯è¶qÃý­-Ôp4·¬Íkƒ‡F()ùûÄÞ qÖcâŒf2µªGˆœjJj EG/c9©Î’JMA{º%&›Mû † J8xE9%x§ÕÅo{hü÷9?ƒ¿ðQßÚ{âŸüÁß²Å?ÙÿþÕ¸ðµäþ ÓüY¢Ï{7Œ5(mËω¨ÁˆÖÕš ÃçÍGe)€³øaÂYG…ø¾!ËñßÚÚÁS•)Æ NR´^&Œ¯5RªRЦ­ÈÒ—4ã©ƽ\|hN=Ó|ßá’ÓO[ù>%‹þ UðsöŒðGÆÚ#ã ž.ðü%ï¡iÿþø_:áµ)<›kÍmîdoô+Dd“C°£`•e$W^çœ1ŒËrl'°Æ{%VUñµÕ’¢¹§ 2„Wïk?v0Ÿ5Ö—M&i/¯ÓÄFu%xÞÖŠï³~Hã|Eð‡Jý¹?lÝ#ö­ý“¿à£öþ!×~|O»‚/…þ(°‹û?ÃâWLÖb†^hÝ™%ba/*8%vçÜÂç5¸ªð÷ðû¥K†‹xšr~Ò¯4l<¥''Jɤ¥¹ÔbâÒ•ÌåMbñJ­·q{>Ÿè{wíñ¦kž;ŠóÁŸ?dÿøÛá7†¼.$ÀÕ«ˆj­6ªÊ¦b§*´ÕGZuªN*QŠ´›êœ•ü™[†7ØIr«mi]Û[_Um<¾óÎn=_à‡ìÿ¥ñgìGàÛoˆÚ7Š/þ6E¥KãÏÓ¨ø©íîáÔ§ÖþÑË-Í‘·ˆØEv£%Ò8ŽÐ3_OáýÿÄp¼S‰xz˜xàÜý…*´è)BTcC•ÅÆTåíçIí)«½ 1³£ËeB7Rr²nÉ·½üÕºïÀÙ‹ö†ÿ‚~ÁSnâøQ/޵kž$Ómà·ñwŽÚ ·†/¡(b[ÍIškíjÖédœYÛ‡ÜÈ¥¶×Îqpω>BY‡±§‰¥N£n•ñY¥+ÝÓ¢”)ajÓjµFší•Íéaëà³/w™Åµ»\¶~oW+ëeU±íµçìYuû:éú'í•«x3â÷í)ãO xâÊïV‹NñýöŸyg¢Åt÷ý›K±ýƤöï²5·dQ#$ ¬káx/Ž¡ÄõkpÍ:ØL£ ZŒã*êBU¥Ï^¯¿ETW“¨¤ùJm¤uâp¯•f¥RI®®öòKGnǦÁ2¿h¯Þ4øUñâ/í=àÿø;Â^6ººðwˆ>6 }+X}>S¾H®­Ùg ´„E—a,d6sšùoxg‡ðÆ_‚ȪÑÄbeF1­OÍV’©…MêN¢÷¦¹S„®¶±¾_ˆ«RœçU5è壳òémµ4ÿa_Ú§ö‡ý¢j^ø…ðW\ðŸÃ¯ ke¿Ã ­wÁlº¼L·1^]-Ë“ ôO,Xž3BX“&—Äážá<’¾ øÚð¨ñ*£QSiÂTàà’)F3qšžõ#5hÝÞ^¶"ª”ZŠ·+j×Þþ¿ðKŸµ—ÀïØ[Oø§¥øŸÅð÷ƒ~5üR»¸Ñ¼ñ?IðTW!V‹Nr’Ãuä°I£¶„„32¡©“§â*ehaêTÄex%•ðÒ¬ãAÒ•Uu*|Êñ•I{Ê ÊíËMÊÄRÂ{DÚJrÑ;k{w=ö!ø¯«ügý”üãÝgÁÿtköÒ͕ݧŠ=3Ä3Íjíl×W¶Ñ|‘I;Bg0¥eR‚ùž<ɨä\a‹ÁÒ«‡©ndð³u(%Q)¨Sœ½é*j\šÝ§›m\Û QÕÃÆM5þ%g¦šúŸ~É÷ÄxOÆ~ ø¯àk ø–ïâÿ‹¤Öü?iª Ø´ûíyÃD—(™Fj䃥xYÎ-Âf•¨åõj•¡7G(ôn|­õW~¬Ö“©*iÍYõGª×˜XP@ÿÒûò€ ( 2×ÿhŸíÝð£â÷ǯ‰ÚW„4à?iÑkZÓ0·³%áˆìå„2ޤôõý’~#|Eñ?ÀŸÜþÐ<­øëÄ#jÍqà,:v¡g+´–óÚCrævÈxw;p[' QÝÆynY„Ïñk'Ã×§…¥?gjü®¤'iƤ ”¹Ô¬–ÊË[]ƤçF.£NM_M¾WÔÜðïÇ;üxñ/Àh¾xºÖo h¶:Œ¾'¼Ñvh×ÿj2oks»÷³Ç³2&Ñ"rrqçb² áxw›¼E)*Óœ(Îõ¡Éozp·» _Üww³Ñi{e*Ξz|™CTý¨>ê>5ñ—Á?…ž&Ó|Oñ+Â:ÅÏ­¯|©ˆ`ëoÊËåÅæJ¢>I)¸WEÍ©`0™¦aNTp5ê{5Y«­,æÔSæ—,_6Ö•¬™/MÎTàï4¯oëúGÉ:‡üKö«Ÿö­ø}à5ý–&³ðFšúfñüè±r÷ž%Ô­%š==¥‰âX-¬ÂÃ4úImž)XÕUÿf§áGƒñø·™©b§í*`yÿs øz3Œ]U)¹Nµå t9¡V3мeÜ|Ùf8¬Â*Ÿº¬§my[[tÑu{|ÍÚ»þ Ñ¡~Ðü ý•‡u Àk¬üzø©â:]Â:7˜›íÃÛ‚e¼–6;I*Ï "}¡íøø?ÁÈb8mæ¼Aí!WÍO†§Ê«â+YÚV¹iFKÞnÉ¥+Ê2öQªñ9œÖ'ÙPI¨ÙÎOd¯ÒËW¿áæ×Ú^ñß„|c¿þØß²[Á<Û\«Ks ’&‘3º=èC ÀdWáXœ;ÿÚ)¸Ý´›Z7i$övz;6zñœ'³<â'íŸûNü#ýŸþ$|[ñßì!âuïxò} áσü5¯CªOâë’8¬µY'O‚Vv2+«¼ 3é_£åœÂy×eùv;¦¨Õ¡¸Šµ!*k4œªÑJO÷³‚IAÅÆ5%%Öç\V" ÍÒm§d“M¾Ï¥—~ÅþÛ?´÷Áío_ñ§Ç_ØzóCøSá/„²ø»Äž=Óüoe{qôKss¤G`6¼®Œ%ŒO¼FÆ<äÍiàNÎèPÂå9Ê«˜WÅ,=:£Rp•NHVuuIIrÉÂÎJöÖÁ,V"›r;EFíÝ=mv¬tÿ ?à ¿~%h7ž:¸ð§‹¼7á+…:gÄøŸCû6’º]äpc«¶n ‰7Ï eÁnqäæÞgyV&EV•lD±U0Š9óUö´ä¡~[/r¤©Ëí4ôEÒÇQ©{5U+½¬üÌÙößÒ?h½7âÿÅ_ ücðOÄoø[Z2xF/†v·s_ç­ŠÌmïeU’ñ¤X²¥v †$G8¿ UʲüF¶Z«õ‡7S—š›‹mRQåæsÕ>m,“'ŠU•I©)%µ¯{[ó=OÂ?­>%þÏú'ÅÝ3OºðUç‹tXæÐôˆ–Ëawgy|hý«|KûÞ|dñÿì€|9ñVT¹´øEÿ ­­×Ú.ài…¥¯ö’/¿h óÛ†ÎÓ^^i‘p~a–àóom—¹ÓOìgBJ>Ò~žwìÛ’å½ç˦èÖq Ï(Zzû·ûµó1ÿh/Û[Tý”?`¹ÿlÚàåþ‘«é¾ÓîµßiÚ„wÒØjwM"ÄÜÆ6H‘ÜL¨ó¨#b³… bºøo)ñˆ±á¬›”§R¤a^QpR§MJ^ӑ꜡ãïÌÔ[êe‰ÆýOñck+µçØð¯Ø—þ ïû4þØþ&Ò¾Ãð«Çz‰†æÕ¼Y3hms¢èÁm$óÉ-úàýŸ÷.‰3F‚GÚ¡Cµúý8¯‚0•qÏB­h©Ò\ê5ª¹N0Š'öýå)AJ\±»m¥s‹ža±Érŧk½4_3Ô~ÁP>üJø“?„u½ÛLñ:›¯‚ÚWˆ£¿¼øƒcŸöËÉâ³EY4$4b+¬ø ¼+äs¯ óÌ«*Xˆ)Ê¥wSp†r©ìéÆU娧¤¹©ÝGgªg],•IÛ£øuø•®ôéo3å¯Ù[þ ½ûKüX×~'|'×ÿ`k¾=ÐïgºðG‡´ÝM)¡´\Oki¯5ÑdÑåû4HÂwvYÙä!†O×8¿è÷ÂÙ6.Ìhç”ia*¥Õ%5U9.HÎx^Kþ1¼ðÏŒ¦›Â24ž¼¶æšMu#f60¢„Þÿ?–ePápûwÅx'Ÿ<þ¦Q:´eJ¨¥U[ ÉF+ Ú^ÖRmò¯w›•ò·îÞcšaåET´’½žŸ þ÷eæ_ý‡¿jŸÚG㧃¾kZî—àˆÞñ%§ˆ%ñGÅï†:´–Ú-Œö—Í •¬W€ÜÊÒÆ‘Á+‘8S\ü}ÂÆÆp8ë_“pæwÄ+òÚ¯ÕéʵK[Ü¥ sMÝ­#usª¥jT­ÎíweêgþÔ´‡‚¿e/‚š¿Æßéz®©m¥’ßBðüÍ©j·2ȱEig Ž‚{‰ÕR0À±8ÓÂ|1ã ú–W„”a)Þó¨Ú§N1NRI%.XE&å+Yu'ˆ†“©/ø.ý™ò??àªß´Ç¿Ú Mø7ÿÒø%áÿøwG»Ñgø›ã­GÄÖöòxv9odP°“Lº’Þo> tóTi<·eFˆ“_²åÞðçðÝLÏŽ1•0µª*ËF4å%YÆš•Š´HrNo•E¨óE9)¤yÓÌkV®¡…Š’Ó™ÞÖî¬íÿÈý½¿à´ß´Wì]ñƒþÍ#öðÿм«:ÿÂñ |e´…5ØÅ²K4‹iµÄÑ"Jd„3 ;Gy |+ȼ#ÉøOûCˆøŽx\tc9O°’•[ÆM(ÂS«J”£Ë$œ¢—5›Ðó³Î&§‘%*´ï|-5ïuzt¶º»-7½“óý«?mïø)f¥á3Ä¿|3ðá?ÄbhÖº^©öÝ[ĤÛÈ/tø§Œ¨‰¤lVEVe*òmù¿(‡ ñ¿O_‡© íçMÒ¨ðîN0ªã&ÚSÑû·K›ÜœÒR—Ïá³#âxÓ¨œpøjK>iÊ-j“MÙÝuŒ¾Û]ÿ_ðnÃM3ö…Ö>!~Ñ0·×þéž.–çÀß -·\ZÝiª¨Ö¿ÚrË<²¬†@ð‚ñ:¬dœäÜxÄnð׃ée¼ –¬.:¥F2_Çsr“š§$ß¹f¹$ùg b´Iž®YÁ9^[‰ub®®ì›oMíwÓ˯V϶¿mŸÙLý±?f¿~Îö¾=Ô<þ(6‚çÄÞµCwCu윕޲¼·V8(ì9¯Œà.4­ÀüU†ÎeB8•GšÔê7ÈÜ¡('ÖÎ<ÜÑihÒ³GÕb𫇕+ÚýP~Åÿ°¿ÁoØKÁ¿~ê(}.õ­ÏÙüIâ{H[bòÑ óØùíÿ–i…ô¯Ž<@ϼAÇÃ𯒩miÓ…>ngÌܹRæ•þÓ»ó .–´ïo7rÕ×쟤ø÷Æ>%ÕhoˆÞ¾ñ^›¯ø/Â^$Ñ-ͯ„nlâ*lÀn‘Œ…¥Þù*Na/­—à°ðÉ©}R´iT¥Z­9Ë›Žï=Q´mÕê?«)ͺ™]4šÚÇ üBømà/ŠÞÔ¾üHð†¹ k†×TÑõ+q-½Ü'ŽD<2œó™ng˜dù…ZjÒû]¸ÕìíµíZkøôÙ¤‰#X-žËj‹jG„@ɯsˆøÃ7âÜm,NdãÍF›pŒ`æ“mʧ-¹êIɹNW”žïC*jxx8Ãmõééåä|Ññ—þ ±ñëöµÑ~jµ×ÃÝW\UÔtŸŒv¸Ôlôiô©Þi`»Ò­›q]V ·—u)?|ËÉE©ä~(ð÷WÌaÃʼ)~î¦U)ÖUb£B¼Õ¿Ùç~zpO›ÜONføjàkbcmfõRµínëÏÌu×üïâmßÀ|ø(WŽcÕ~øÎ×Zð7m|-¦Ã¥Z[é­c˜‚5ðåÿxvv°"”QÁå*iðÇá¸[ŽÆPËéN¥xÊ4¹ï(Ðçnî1’j~ãä\Ûi+Üu°²¯EÍ«on¿å©ÚþÐüqñKáV¥àoƒÿu/†ZÞ¡wéâïéV×Pl•^@#¸S™Ld°8 Hä ðøs9ËòŒÞž/1ÁÇJ KÙT”ãx´µƒR\¯ÞI5v­±­js©MÆå}ÐßÙëáŽ~ü5Ó|)ñWã6¥ñ'Ä:|·&OkúUµµåÂI+:!KuT@ˆËÚB‚yÍ.%ÎpÎkS—àャ._ÜÂS”QI´æÜÚæÕ»7e Q§:pJræ}Ï…>$Áÿi«ýsPø“ðÏö˜hüMðïâañìõ‰üI{{ei¦NmîotÝQÄB}“Þ¶<¿º‰"QÝkú+ñ×…)P§‚Çe·¡‹Ãû,{¥Nœ'*‘ç…:´3…éÒ—*¼aïÉÍÞQ‹{3|Á€ÁÀÓ‡ñ;4Ëò,³-ÁRŒ#ƒ«*òRr© õž‘©Rœï ÂäRÒÝ.Øž«9Éß™[µ—düÏEÐþ xãßô_hÿ5åð~àuÐá^\ZÁ-µÅÒH jorÃÏ3ˆÇ–T±F6dŸš¯Ÿ`1Y%l-L>³R·µöéÉIE­i('ÉÉÍï'k­¯m ãFqª¤¦ùmn_ÖûÜä?nïÙóãwÆŸ ø_ų/Œt½â¼Um«øfo_^&('˹ŽöRé &ÈÉQæ%†3^ׇÜIäXÜN<£*˜,M)S¨©ÆªûPtåSH>t¹¥fùn¬Ì±”kUŒeE®h´ÕÛ·í¾Ÿcörÿ‚sü-øgñ#þ‡â¤Þ$øµ­imÿ &©}­Ýêe…íÉóo×H·¼y …¬“3‰59Ú+·‰üMÎ3\¯ûÕºœ¿wB¤¡v—Ö'MGÚÔŒR¼ž®NRêM 8Tö²Öo~«]í}‘zãþ ¥û6j?~|1׋5];á‡Äx¼qáIµÜÝ]G«Å,²ÆòÏ!/4jÓ8±+· Ðb±Š|UO3Ç㨪Pž7ðÕT)B1t¥ŨÅYFME{É^úîÙøe níEÝ]¶î¼Þç¤|løàï‘xjê¾ ³ñm§ˆtÖðþ¿=–êßvÈçòXyðçt/”~28ò¹c¸vX‡†„%íéNŒ¹áÚ3µÜy“åš¶“¤º=NŠ´#[—šú;èíý#âGÃ/|að6¥ðÓâ„4ý@Ö-üWGÕm„Ö÷qî ²DnrÁãŠâÊóLÇ$Ì)ã°eJµ7xÎ.Ò‹Úé­Ÿ™s§ °qšºgÎ_ ?`ψ ð—Ç/Ù»^ñÂ/Â?Ý ¾ÚéZþ 5Ý\Zª^C%ÜŒD0¬ÉÙ£€bÁ9~—œø‡—c±¹6wF‡ü(ᕱTéûœ“nœ•4½é8·íe7yË]78i`çդ߹/‡Wu¦¾‹µŽwÅ?ðO?Ž?dñuñ?ÇzL´-¿ÀSÀ:v¿ k·ñx~Îk‘û»¨ÑÕ¥I”¤®‚ NÃ…Æz˜O²ŸŒyp&òg¥Š•9›¯% á&š‹‹¼­IË“U­îÜOZ¦òkÚ¨¸§wm~öº]Ø÷ïØçÀ¿þ~Í^øsûJxŸAÖ|_¡iÂÂÿTðÚÜ [˜ar–Í›–iZO!bóÍ&ö üë³Íx§É)Nž¬¹ãœ¼ÉÉ'5îZ*<î\‰-#eº;0­KUiÉi¥ÿSៃÿòøœ3ÓãŒôí5|©Ðv”P@ÿÓûò€ (  øáû9x«ö¡ý¸>øÀŸ_á¾¹¤Xx£_Ñ|T𠮦cº‚(ouû© ­Ü‡ â6Âÿý·qF„³ºØÌ^ ëtªP)Òç;ÆS¥7.z~òåtÒÒÚµwÑòâèOIF2åi§{_£éó>«ðícûYjÞ3ø¥ãˆo¯þ*~ÍÞ¹ðÿ‰õ=gÂÿÙÚÝíŒQîšâÆ×*³[]Ë ´^PÚì0œmÏÚc¸;êPÂ`0®1Ëóz±«N0«í(ÆrvŒjÏWÑŒ’Ÿ6±NòÖç4q8Tå9|tÕž–/&p>4ñÂÏø(7Áß„_´Oí)à¿Ú#á=ÿŠüEá› xŦšºas*^ê¾Tpad·'•¢Ì£œ†¯£Àas ³¼×&É+`1СN¥Vµ:59ï·N‡3š”ÓŸ+„$Üœ[éc JÊTêUSƒnÖMé®ïcÂ?l _Û¯áwíañWý‰dñ§Ãmkâ^½m/€¼?áoøPÓþ#Ímb÷X›V¿bš|¯ ù,Ø'Ùw¨‘¤mŸ¡ðLü=Íx;/§Å>ÇK *õ*ÏN¦ NOÙP I:±Œ¾*ªü¾Ó•¸¨«ñâ¾¹O7‡¼\ÞŠÉ©ww{iÓüÙõÇüàÿÅÏ Á>µ†ß>>™ñ?T:Çü&zŒ|Goª¾§¨\y˜¸¼’ћˆ}Á…¾÷hcc»¿ñc;Éq~$ÓÇexŽ|=±•*r¤¡N÷iª‰^PÛžÉNK™¤ÛG¥—Ò«OÉQ{úÞí;¿;wìyyøCÿý`Z|FñïìÏðR_O¦ÞøVãÀº-ãxjm6 âãOÕþÝ’$I"2%iîÁ Û‡Ö,ëÃ.'ñ , Ç1X…R5UiÃë ¤­ËS쥹Æ)û³j-Ú÷JÆËC%7Yédíkìïúu=_ãWÀx‹Æ>ÿ…ðH·Òþ=À,ÿhω> ¸k-J }$>êÎçÏI„̱FÂ9JÆçåR7WÈd\GƒÂà±?ÚØ¹º™cæËðõ’79Öýì*C’QiÅ9MsA9-ÞÇMZ3”£ìã¤þ6·ÛK?øs;ã×í/¯þÍšÿÄßxWǾ4—Âÿ³·Á7¿€¼Gáϲéþ+ÔžØ\YÞ[k³+4ó$Q42¤i ß ,7§§‡xWÅ8|»ˆ¡EWͱ‹’½:œÕ(SRä© ábÒŒ¤§)Eò§ouÝ*µåBS”[µ8ìÖô|ß™òGÅþß:—üÇ_´'íÛûb\jsx§KÑu<'â}:ÃKŽÚÊ _Ì’î´äãûVÇÉ-æAœG#Í·ö\ŸáÕ/pY? å* Œ«AÕ§*•[œ¨YI³¼>«WšR©ÛQs‚vWò§õée«‰ž­'nÚ÷[ó+imÏNÐ>3ÁGþþÁZÄoÿ|¡C¬ø¦K¸þ|V·Š=3á?Ètù’Õ®¼‰­çkp¶ðÜ;%($®ö–Їž¨ó/Ù»ö¸¼ý­à׿k]gâ/Ž{Fо4A¦øà'Ám"Ò]f8Œús]jÖqÅ%å„ñÄË#]ùvðý°$»ŒbAõœQÁ”ø6T8v– J­\|v2ss•ùkraê9Æjr’qTyªÏÙóBÜÎ&1/fåe-#×¥ßTüÏø§¬ÁC¼m¯h¿´íÍû#ü—àW„µk'Ãý.×SñÄ þ+vKCl-ÂÚMyÜ£-TBî$dþs”aü3Àa«dü+šâÖm^2¡íäéPÀÕ„¤N~vêÆ”©­µçJé'eÙ7Ž”•Jð³VvWrO§“g¡~Ð_ðWO‡ÿ ´?øËàwÂ?üTð׋5MgM×µÏhWº„¾»²¶WÜZÁ3Èn%†‰ž"¹‚Æ6Zù®ðg2Í+ãp¹®*– ½Ñœ!Ztéªñ«6¯ Êi$¡MIFiûªË™3ZÙœ!ÉìâäõI»ZÛé½Þ×]{3àØ3à¿í=ð“á?Å?ø(çŽ?e«Í'âV»-Þ£·‰'w´ñF‡ªjï]Ó´Í?ÚRú&€ýœ\óL°«†UÜßѾ"g¼'gga3%< %^šJt+P¥ìðµkb­ìÝ)óþ÷Ùß‘Fn-7eâàibiÒ©Š;IÝëÕ7ªQ驪Ü ~7þËÿðMH¾~˶ß5ü)›áµÎ­¥|QñÔÒ‡Ñe¸½F·Ñî]­±ӵ̄#J…L[619€fùø¦ó\úXˆUÌ"0–‚_¼P¦ÔëÁ*šÆ íFIóss#Ù§WTéY¨ZüÏ¥ÞÏO3æo‹ ¿k/Ál?½²»ñõ§Ã?ÿgØx{Á×÷RI¥x•$Ô6´†5KWÚ‡y›-¡kó,Aþ§qMlû&­ˆËá…Sˆ¥Ï:غPН…j•Ôy›œo%Ê¡¤Ú½Îú³X¼7°¬”ù¾+;%´µùÇìû,þÉþý«4‹_ðJˆ|EðòÛÂø;ãÛK¬Ëy¨\Mó´û˜<¸„R]Ë7™ö™%l‡giYî5F¶íÞVK}Ç üm>'„<‘ñæ&–©,W4ãK N-¸{ªQÄT©+Â8uQÚª‚•[+Æ=V™†*¶^1\½dßà—~ÝÿàžŸ°üßHøEá?Ú+öOñ?‰ü} Ãeö߆·ž*ñ•Æ­oáùâÈl!ˆìæÞÒC2¨t{HùMW‰~#ø“_;Åd¼CJž³|¸…JŒiJ¬eÉ%íd—5HÙ)Á·³ºÜ0x<¥”›’éw·§o3È?à›¿à±¿´÷€>!ÿÁCü3n<<>xŠË^kK»H举žêöŵ£‹[‰ÎÙü™"€·hÄŒ%g¯µñG;ðFŸ ã°\Qûo¬aå ©´¡K›ê󨽬 ¯h§%zŠ\‹‘DæÀÒÌþ±bV–}ú¥£ò±ÜþØðP=GàߊâUqŒ“ƒ±ù— àkÒÁºÕiK9ÚSÂÍB+ Z ÷w»S›Ü›[(Ýú³%Z+R7²|½9•ß2o]“>føÿûE|3ÿ‚žü~Õ~Á5>Yéž>×¼&ö)ø½q~šDÍá¸îï,ä#\ Ie{FYâýã<éÀˆü“-ñ3Ä*y2¡’)Ï œôêÕ„¥‡§ˆŠå烔eJU£hÆJ¢å“½&“kã±YíLÿ,&I~Êõ_»“»MY»IZÍ'{ù3Ïÿi/ø wÇ ö@ÒOŸ‰Þ$ø½£j‘YkÞÒµUn™¢Jçl0É#FÖ‘[æK†dˆŽ©l1ýSÁŠœ”x¥>$ãJ•q®¤g:xŠé·íš»µ%Ï ÉÉΜ=øÂ Wv‹å\«€—ÕaSQÕÄE»ÝÞ6néYô‹×¢oxÛCêOø ÿìQ®þÍžñGˆ¼;ûEx+â§ÂOËc¬øYðò,¤kÈ&¶Õîw4 GÏ 6êâF.-K2ÆìÀý‡Ò Žp¼OÂáêåõ°9†N•hOEì,ððIM­¥*Ž<©EÏ–.QJße‘` ‹Œf§ON[wJϦ›[OÀý WóYï…P@P@P@P@P@P@§ã@™ÿä;ñ?þËŒôí5v”P@ÿÔûò€ ( =¶ðµÿŠ?ি³Í–¢^ÅáûokšöãÌ¢ÎÖžêØÄFn‘®cUWÌf9f%K+îdXÊxIâã)Î.­ Ò'+攪Q’„ù¿åÜ”n6—4agg$ò«%6wü¾ºžð×à7ü?þ UûjüGý ô;'ø¹¯éºvÖ¯poiòBå6™u®ùÈ'GÚbŒayÝûniÄ^3øWÀy~MV_Q£9Wj ʼԚæUá&í ý⮥-e¥¼ªtrÌ~2¥D¹¤¬›é¢Òϯßúž›ûSþ×Òx¾ËÄþ~Ç:§í M£á¯‰¶ÞñfZEÎÑúUâÜʇÌx¤;•NT7~O„8%`ªPÍs\Ú9MeìëaZUdêGâjn’²”U›Vom™ÕˆÄó§ pö‹TìÖžLY¾|ðŸ†~~ÛøSáÿxSâ®gû-éPj71É ðZ,z|N&|> ²yâ4L®Í¼ÑÓ<Ì'ˆÇð½\M\U|-ifRq‹N2›uZåWT\y\œ¬ù¯­¬ÂœR…e%É¿ËæaþÕ?³ §ÂO¾ý¶¿eMsMÐ5ý+ÆRꟴkÏ]ÚéÞ$ÑšÉỹžÊV÷P‚%_²£ìY˜±ák¿„8²yÏb8[ˆ!*´jRPÂMR„ªQ¬ª)S„jJÎ’oÛ8óI¤’êg‰Ãû:ê½fŸ¼¯£]tîºkcšÒ¾7~ËßðPhSã¿ìÉûnkþñ_ÅŸjžøm¡x¾›KžãO¸K«½FÞ~îòêʯ+ÿË>8׫[ âß ›ÊsÜž|>­,V"t›U±téÒ–.Ÿ½NœìÜb¾Öºªáñ¿½¥VÎiÅ'¶šß•îÎÇþ Wðgö×ø¿ðÀ?¿d¯>ð¦£m¯X]ø¿ÅZ޹>—{V¦3´†Ü•dq!’Ýö£ †]҇áfyÀy&wŽÍ8‹V¼'T£Ôƒs½ý¤¦ïnIÆòŒ½ë;YÞcGVŒ)áæ¢ú·ú%ç¿¥–l?áºh¿ÛÒÿþ ¿ûaø¯Á_þü0Ò4ë‹úïˆ3ð/íeÿùøÿâ}Càý‡‚ám Ý7‰|,5½&æ;=/O‹KÙ#ÄÉ-ÓÁr¶ï”€Tšö¼+ÍpL7‡¸ÇN”ë>wQ}_ìkÁÔ¯RUùS¼T“…(Ô¤êF\—i£,•IN5°Ó|‰t÷£u¢IzÚï]¶>Í´ðçì½kñêOÚ×ã'Ä+ñ¿Âü./|:Ö_P²Õí¤¶ óØi¯Ö6I’Ñp¼Ò 3²ãðé⸶\:¸{,¡/ìªø¿öJøˆ(Nœ”í¥[¨RrN.»Õ._‰E;úê8kí¦ÿx£ï$ôzvëä[ø…ÿý?e}SáEí¿ìûâ À¿tk_Qñ¦á³·ðÄ1$9uhRÖÈDÿ;ÊTB±È[…8Ç-ðÉø¾–g…L^q§2ª§*îN\Ê„œ­7x袟;qQÕ ž:ŽÓ÷Œõ½¶óhÅý¶ÿà­Vÿ³6‹áÏøGàf½âŸ‡;´°‡Ã¿|+¬XÝXÇs|Ò¢y6…Œ÷¢Ê©0—r"Ìíà¥ÅUñ|F6q¸W7S V#7\­óT²…5&ù[”“…œžŠäâó/«¤ÔoZÒ^~]{–ÿà•?þ4üðN‰§øsÅÖž,øWâýÿÅšïŒ|Q¤Üèþ)¾ñ}ö Ò]¦YÙ2qf‘db9\V^/çY{˜VzN†a‡œ(B•9F®8JTÒ‡ïîåRªv‹’J*û.¥Z”¥x;»µis7Ûd¿Â~<ÛÿÁe´ÛwXñïŠcÏ |_ÐôÑ{ðPÓ¯¡[ê23YÚÏ;-®¤[’öûG/·’1¾:ý ‡eà~#€há0ùµ\YòGF\øªjÕ'.Z´—,í<ײÚ^Ú|²8ê¬ÑbÜ¥4¾}—¶»7¦ûùX÷o¶žý?c?Y|Lý­´O|Bø¥>£«øoVøÁâÔ¾ÑtoÍh®¶úy¾†EŠÂÞtE ö('iÉù÷OÇ·íÇñ§áV—ñ«ÄW6þ*hrIªØê[¯#½ˆX)kUž[Û8¹EŒ#”]ª¾·…øÓ0ðëó_õW ŠžWENxŒ4Ò¥8Z›§/jíUÂ4*ɨÝÉÙ%'ÌÛ9qHãpPX‰/hì”–Ï[éµî·ÿ"Oˆ?³—¿à¦_ þ=~˾ø™ Ýü0ñÌz<ß ~2èþ°žÃI·²¾„\xq!·xe¹6ÓY» ž\+NT(0àÎ[Äø sl“>¯‡œqøoj±8IÕ©Ô•JräÅ9MN0ö±¨“„cv£vß=Ó ˜øÕ¤šävq’KK=cò¶÷ëÐÖ×üsñö‹ø“ჳ'í)àÿÙ÷À¾.»šÞÚ$ðjÙøßÆ“éFh5‹ {[•T‚Ûìì²Ç}ibhÃ((s\Xl¿,ጯ™ç¹}\×A&ÿ|çƒÃF¿,°õ'R ÊsçN3£&¡$ìÚ’±nU+ÔP¥5ËÊÒm^öò·]ÑÓ|;ÿ‚küý‹¿g¿ø[ãŸÇxµ¿…š7Œáñ¿n¼}nžo‚5DR[P¸¾­{!»“Ïß&Ð3·ɯ+3ñOˆøë‰pUòœ§©E᫪ ÛMíJ¬Õ8ªk’Ñ»ïdiOG FJ¤ïù•þËï~ºŸ(~Ìÿµ'íThýö‘ý¼b×~"ü;ok¿<7†ü)¨]Gâ­bÇR¶šÏ_¹Ò±Yý¦ßÊ»O—Ë‘S!T±ý‹Š¸KƒÿÕzÙ' òa1žÒŽ2£©V”] UiN50ÐÄ9ûjžÊq\ô¥¯2rµÚG›‡ÄbuV¿½ 8«'«MYµ¶·ÑŸdþÐ>$øáñöUøq£xö!ø­ákÍoÅV×:÷…¾xÓKÒïü)ð” çRašÖp§ÌŽ™â‘‡ r?á¼.A–q†aR®s…­t¥UÄQ­RÝJn>ä_¿”ïîJzFQOTR´«TÃE*rM½Ri5gù?Èàþ"/‡?dÏÚwÇüûYþÐQ[xkÅzn¹ñcÁÚ§…îüS¥k6¤³5¾›¢£¡6ª“L µ¡o*4ãcè²Ï­q— à²ÜVWr­J¥,-XÕ†­9ÐQS«‰i¥7(ÇÝU­Ï&åw®SåÃâ'8Ôž9+];ôü­ý¢µÿø$7í}ðoÁßµgíÏáMË@–ê÷FðçÆ+Khe7 ÁpѲ3rãpË"8¯†pÞ5pVy‹áþ«9VJ*¬#dÕ—,œ ¤š\övvMÙêiYåØšQ«]iª\Ú>ë¿ð^ŸøGko|-ýŸ¿gÏ ø³ÃZÃÚéÞ×èW]Ýè6qJÂo­Ï"Þ9ç•v–˜ù—!Œ¤*Æ~s$ɸ“1Ë2ìЭW!£ŠRTaîRuZ‹«iÊù§:tÔdä©óÆ”áÍ&e.Çgø‰UÎ'.UËN-Ù‹oÕÝß›HÛß|Wâ#öGø1ð[ö`ð×Ç€ÿ~;ÿiøhx£HƒR†©h|RúÚɯ šâqrcdvÈJæ¿aá>ʱ5³<^_•âñY 8b=‡,$Õ:ÊŸ59ÕösŒ"éó)MÝû»©&}M*T²ü-,57 r\º-4ëkÝëý3–ðÅŸþÌðT‰Ÿþ'|>øÁàé>,›}#Wð:ü5m~ÃÄmk$v^½«d,­ü˜§_±Ë‰šI$%L@}†7&Äqg„™vS€¯„Ä,5HVú¡:*iÕ¯‡t*ZU'Ï(¿m ŨÆ0WS¹‹˜N¬Ô—5•­tí¢w[zoøQZxöæðį7ÿ 5_?ƒ¦ð¦À?ߢÁg¦êñÁ1»kÕ¶¶ŽD‚[†ˆñ$§j±]…±_“TÌ|>Ìr¼žèÖúÊ«SëÕcïNtœ£ìýŸ<å8AIk+´Ÿ2W;ù1NV­eȺ'mokuóg¸ü8›Ç·?´;Š–:]¯‰äÒ-›ÄVÚï-”WÆ%3¥»Èªï“pF`¨€r+àó8åÑÌkG/”¥AN^ÍÍ%7 ¾W4›JN6æI´žÍtùù>ýmµüªá,( € ( € ( € ( € ( € ( € OÆ€?2þÿÈwâý–ÿÿéÚjí( €?ÿÕûðœPËŸoŒ~ñ7ÄýSàïìÃkâÏ|-ü{¯Üø¿ìw×7 n—wé–‹o ¹{{yccæÉwm‹ÓuDªFžÛÔÒk䜵²åNë~ŒÕÓ½ENòµíë´}_¥µ]n})áè¾1ðÆã^­ÆªØCycrC,aÑ¿`kj”åFnÑ­…9Ƭ£³³š?x/NÓîtÍ+ñž{¸%šÞ2£6Ë-¤ˆ“d‰J3/˵š(þ÷ío£jÝùZºoÉ­U¯tUWì± —[;öM;5ê¶{YèušïÆý ösý¶þüeñ7ƒ5¿i¾øMã»Ý_Mðí´SÝ¥”m¢´Ó¬RÉ•S ¥™ ‘v£|Øô²Œ¯fTp8(§V¬ã'%Í/…sI¥VÒ]È©Ràç=–¬æì¿à¢~+ý‚¼ã/à?ìáÝ çÅ¿´ï^.—â£si éúåÌZuÖ¹iç4ëÛ˜7ŽÖÛt*¡ _Õx_èx¡S‰ÎózËØÐ©EF­8*•*ac:•a‡©*u©S“|Õ*KÝÞí£Àx¯¨)Æ5«OF칬•ÓÕ7Ùh}Áû~ϵ§À/x£\ý§¿j¿xîÓÄ)­­¼=ð¾×Ãl—Á›ÍºžH¥vº‘ÓbÇ F=M~ÇKÁ¼E„ÃRÈrʸiRºn¦&xsNXEJ1PŒ]Þ‹VÏS CFRuj)_´R׿™Ë~Ñ0ý¡lß|ýŒuøxxÄSXøÇâ'<-õç…õˆR)í¥Ò¬®A}æFÍM½DB]ÊÌT¥zü3‚á® ÀC4âhÕ«õšjT°ô*¨B½)9Fj½H7:|²JJ­Ï–Í$ÔŒëʶ*~Î…•ž­­Sédôסòÿø%×…à µwí«~Ü?°Wü|m¬EªøâÕå—›aÙÚ=¼+¾D2ÌÑÉ:ùº÷gk`Ús?ñžðvAO…sº8Ÿ«A¶*–›œªTR“´_,Œ-E'+n¯o29|qØŠ¾Þ“6ªWÚÖÓç¾Ç¶|7ø7áÏÙ3I‡áWì c­x¥f˽FëÇ~×| —:¿u]^Ô< c«Ýâµ`ÄË7ÙBŒˆ‡à³LóÆUžaÅÒ…í…N4+B³,5,<í5WiM[ݧ훒o™9½Nªt¡†^Ï wì·VÕ¶´´žÞv8_üø?ÿšø¯ðÏö™øÃð¸xgâçÀó¼+¨øST´·¼š9oÇN´¾–DS½ôO3É K»%”“è3 ÷;ð7&Ìr,³í²ìÊï V5hÉÅ5MU«:QRw©FJŒÔ-ñ%ͬáJ–gRf­8|KUÞÊþOÔ赯ø$¿Ä_ÛïÆ¾)ñŸü7ᾉðÞóZ¸Òn5—ø-ñòòý•Z4¶Õm¯à0ˆ UŒÂbA"´’2È­ÉóhxÉ–xs€Ãax7<\iªª\àÎÓs¡:SSæ›oÚ)IÅ¥âÖÎy\±³rÄ®Ví~Y=zkéÐëþAû~ÇÚ‰ÿj¯ŠŸ¼/âûO„¾2¾ðƒ&ø£H­à-2þêÖịkI¤WkqånfS9i ;`|LÖ\sÆÕpÜ?€ÁÔ¡,ub«*ó_íU)B¤ž*©òSpæä§©Ú6\Í#zk „‹«9&¢ùU—ŸٲÝ÷oSÊ>ÿÁ'~übÖ~,þÍwz¯ƒ|?ðóÀ_åÕ~x¯àߊ#_x P.%–Ââc1>Ùd‘Vs3Ãç,§•O±â/ó<“•çqj¸ÜVCKMýSNܱ©ó¥%x¨·Ï‘ó©sÔR楖ӯ)ÓvQŒ¯ïEöðoo’·ªx¯öàøóñ×öKø›ñѼEáoÙÿá–›¤M§hÿüyjºÆ¥m©Zê‚Îì\é²l‚hn#VŽÝwy&L£nT?#„àáþ2˲¯gW4ÇNjsÃÐ~Ê›§R´§ÉY^q•95*®ÉF1~ò³‘Ñ<]zØYÎêœ{µwtìôÛ^žqÓxƒÅ?ðOŸŽ?³?‡¿oçøup,~ Xê0øZºøw}¾¸uŠÞYáѶ!‘VA ª˜ˆ_,2cnêòpøOr+¯ÂX\ùŒ©ºÐXŠrUbœ§Ëv¢Úæ‹jj÷´¯{7‚«B8Ž]!³³Ñíð‰{ã‰ß4Ÿ ÿÁ>,?l x›Æø:å>:ø»Ãž&MÆÚñ”¶w‡ ²Ò- —ÀQZXââóRºi<Ûñw0ƒËlŽAÈù:Ñá<ÿ†%^”c„ÆaÔçQÊrkêT¼!F <´½Œ7NO™kº±²uè×IûÑvKO†Ë[¾·<‹öäø«ûþÜž(ðßì'oâûOë²xãÍñü?×ôÉõ/ÿeÈ'¸¸½IÖC¹’!i0Úù¦?â8ûNÉø÷Ãü&#‹%Iᨪ6§íáV4ñ>ÝrÂ4œ\T¦”½­=Z\¼Ýldð˜Ç?Äï­­xÛ[½ýñ¯ì±ÿ4µý¹¿à¨ZGÇ»ÿ‡úþ‘ð3á7Â}kQÐü6‡ôZ¡ieIu vJè׆‘bEÌè…‘B‰6ŸÜx¿Â™øá-\¢éÔÍqت0e7Vœê4¡'QÅû.dœÛµ9I)I·¯#™,~aíR~Ê1ºVÑ4µkMÿ%×ê?Á^ýƒ~ |Dý¹ÿg‰~)Ó>ø³áU¬ß¾.‘«_É¥kw“É2êIcq,®’\\]ÂfŒB¥63IÀl~CS™x‡Ÿ`8S:ÃÒž:†&J¾'žŒJ4ãû'V‚q§ röröšéG[Ÿ$0Tg^“j.:-]›ëgÝï¡Oöÿ‚–é¿¿g„Ÿk;ø[±Ò/â?Åí3VÒãµøzÞJù «ï(Ú}åï½¼ %;H ƒ[ø…á]\¯‰³L³‡j4¥8}_ (ÖrÅûÏ™á줪ңñF¥GyCTÜ®Lz©FœëY¾²M{½¯Úç+ûhþÑß µï…¾(ýˆ>:ÁE¼ª|SÒtñ¡R¦#)¨Æ¾Œ'ìpñƒ²n5S穹Z\ºF×b«V9‡ï®“IFÛ7k¿»du_´§ügáw‚ÿg¿gïx^÷Åüwqá;ÍâÌúBjŽkÛ;MÊæ³±h|°VV+‚A&¿:­ÃY_æXÆ•¥‡Ââè*ðJ³pš—³|©½ä­(|i_KÙfyÖ/Ëêâ.½Ë«7kµ«Š¾íôîÏ›þ"ÝþÛ?ð[Ûè¼ះ+ð—àšiÿhþÕñ¯‡à¾½»ÔaŸˆ+¬Ñ²¼mîÞ bwßæ _’`3¾1Äb\§WNQ³œe:u%®×„¢ÒMmÍꞇÉâ{ÅíF”^ ÖóæäŸDšjÖ¶êé»§¡ãÿ¼IÿÚý‡~~Ñ?²ßþø‰¥ø_K³VÓiIÆMIûÑÒv^Þ*x™Ê¬at¤îõÒê×=×ö=ýž Ìl%°Bex\H¢ ‘¢Fyóî6â\ á¼> zÙnkAûô)©S¡R ¾ÒQæN5¥î©ÅŹ·)JZÆ1ëÃPŸ·rmN›Õ7«^WíÛ±Íþ×Z·Åï‡Þñ7íûRxóƾ_j‡á_„|;ð_âI†Ñt­[R‚;/²ÜDÄlì¥Ðº¤cŒäãÔàº9.eŒÃd¹ 5ýz­Lfòö´)JU0©ÂW–I&“IÊ[ÚÚÆ!Õ„eV«jþêQzY½%þ#è_€ºŸ€?eýOÁÿ°E÷Åoø×ÄÑøZóX²ñ/üíBîþÒ;¦×Z€biU¤ ¨pÅx _šq,Ë‹hâøº8Zz¬)ºtyiÂpÑB•ܹZÛW\ÍëÐì£(aÜpüÍ»7w¯^ç¸'Üö¯…:Å € ( € ( € ( € ( € ( € (  oø›Yð‡dÖôê¾%¸IcUÒtim’â@Î`n¦Š<(;Ž\€NüÕýžumC]uSÃ7º5ÅÇÆ¯´º^¤ð´öÇûbqµÌ/$dñŸ•Ø`ŽzŠô:( ÿÖûðÓ[‡CáÏk_>EûE~ÏúOìéãOë_|K}ª|.Ôô/›*ôjZu½³¥ÝÚ‘—Ù¦IC9MÑãËÞ~ZçöO—Ç~^^uÌö´êJ§2ßEÍkZúyš^8lT±Is)rɤõæŒTyuÑ]EYíÕê{þ|GñŸìùwûø]ñ'ƒo¬¾é?ð´cÒ„¶!g¸µÖTsqåÂáŠì(³£+g§^2Kˆ^œé´ïï+Ý­-£JϪ¹†K B{òµuö]¬ŸªnêêÚWì£û:þÔÿm?^øÏÄ^“ÁvŸ ¼9¢Ú?†>Í¥Y\Ek6¤ ²´ {0í¼ÐÒ¼H³ÆÆP³Å6šªÞîKÿIÝy-­ÿ ‹R¦£Ñ?Ïk÷{ßðê}Cðjåìÿি î’•¢ø_ã—Ç÷˜‰4Cîz~5PŠœÔok¾¥½Ðø«öBøóû]x°~Ø? 4-áßÄM/N·ø—ðóã‡Ã¸üEuw.})Ó§ò~Ômí÷‘˜ò~ts‡^? °œküƒÿVóÏ$ª<>#]ÐŒV"œ}´y½šE'îË›MUâõñ冭‰—¶‡»Ík©+ìôÒÿ‘Oþ ñàkÛ3^пb~Ϻ<?ˆ¬ŸÂß>#øÆM#J]NîÒx•´¸måY5‹ûu2;iî$U9aœüÌ%ÀØzÜQC6ýœÕ\>’«WÙÓœdÕyN.8z5’¯Ê-èº9ÌéÇþÏ8+=›vWk§v»µ_ìãûqügý g߃ïûLüMðÆÃÝrŠß>H4«Yµhã³6ÎñȲGšé?–¤3(b¹&¹x?Š8"á¼÷2Yvµg^‹ÂÐÅ~öJ“u9Òk–RåN<Îé6“h¬M UZÔ¡Ï$¬ùœtWþ¾g¿~Õß¶÷Á?ØãáŒüqâr?jÿ¼)½­x;HÔ펲ÚsζëuäÈë„.[ØV(ÀF+óŽà ûóœeOVT¡Zq—²öŠ.nÉ=RµÒ»I¦ô;qºXZrmÝÅ]®¶ØðkŸø)Çím§|ñ÷í'ãïØf÷áÿ‚¼â=eÞ´W·™ Ôµ%ŽØÊ“Mnv”‚6;ÕºîŸÐááGUϰ99X¬V"eû…x,L_îi7>WÔךr^ë]®Î?¯â½œªº|±Moü¯wòìzĽwÅz¯íáðóÅ¿ hاÒuφWË㆚—b²þÎÑ]–X8¸ñÊ^éÐè0 ›ïŒ÷ºeœ76“*HñË­wsf’23NʈÚE×Ûðð…/iføhb±8EEÆNo–t+T”*&Ò”^•:Ž)¥M6ï Y¸Ì.#ê2¦œc6ïþ6–õ»·›±Ò|ñoícâω6üyeûNx‡à?‚Öþ>ÚÝjwz׉¼1ð®]"âËE•,Mµ¤º—•åÝÏ 3؆a)gÛ(<¾<¾-ÊøŽ—å™Õ 5)åTã u1*¬eZ.¯<ãG›šœ'(Õ²äI^^÷½®¸yPúÌé¶MnÔlí§^º[ð>|økñOömøÿxømá=SöÒÓüccáÙçXð^£ã¿xÒÚêöç]þß¶Û§Þ]d+jWÉ8”íû¤×éY¦QÅEà®aˆ§“Ë*øúX˜Ð£Fq‚£õiÞ­:vmQëνÅ}ìpÓ¯†£šFªv‹ÛW½ïgçn‹ðP?²ïìÇûHøêÚGöXO|6×þêž{Ý+áœK{ñ;UÕ![›»{-jÏØ…vÎnd…d݈‹Öä<[Å|/‚y&eíqÔ±ëZX‡É‚¥BNåS RñªÜéû8ÍÆ-Fן)XÚØl5yº°´ko‰½õ[|Ú¸±Aû2xËöVðí7ÿöý¯5ÙÏû#Á÷ž#‹Àk¥‹ˆµË}!£ƒS¹Õt¸¿ÒµÉí’ØÛùñÊûÊ¡ß*²î%.+Àñ~;"ã,ª9·´« .¿3‹¥,Br£åû¬4*¹ûNIB<©µË 'e…ž°µ=šµíÞÚ6Öòµ­rOØöÿ‚y7þxGã7íÑÅïŽúu¾²¾øz5[X^=vé§:\¦âG†+ ¢u²Ìñ2$jˆHZ¸Sĵ—fØœ³%ú†S7GÚÐ^ÆM<,}´yœ©·ÍQÖ§g4Üå&µ &3-U)Æ¥e*›'wöµ·­ºnyÅ÷Â/…?µü€ø«Ã_³ÇÀ CºµøÃWW ¢Mâkg…$ñˆ¬%ƒ ­ÜZ f·{r’,)‘eŠElýE<ë8á þ¯[ކ"­xŠõu£FJMa0Õc;¼4*òƤj)EÔ§h8J Ê•*øë¨Ã–î)mÍÖR_ÌÖ·Z÷º³>¯økÿªý—~~Õ6ø_öø}ÿ ÷FøM‰§x—QÖg½º{¤¼Þ-¤Ó'­ååΠäÜ“û²ÅI¯Ç³Oø·7á ªùÝ®TÅ:²§Fåp·:­YÅ_OaR_IØôa–a)âT£F6Qµúﵿ]Æü+øÓã/Ø?áí /ÅÙÉíü3ð¯X¸ñ‡u_ø>ËFÓ|K¦\ij-½”Q0Ý[íòf–@¾cí œáy8£ ‘q^3%ÆG5…7‰¦©Öxšó›ÃN›åu+Tš´)NüðI¾HÞöµÚ…u—Э*‘´awt”U·ü:¶|!« Gö¦ÿ‚žx·öÍý‚¾ ÂÃñˆôïC×µ[KGá–§›5‰–ëqû>¦dX¤UwF…|°©óncãqŽÙ×üCzpß½2¯O[ÜÐg:nœœyá(¹^ ©§~kY/Œ©šU̳IO(§í&â½ésESvi6š´¯ÊõZi¹ôŸüþ ðÇXð.ûU~Ú>ñmÿĽWS¹¿¿ðߤ,®b¿¸Ùs4IƒtÓ Šf-(,Á¶£dWæÇËœEfXèæ¡ +ÚÆNtթŪp“K™QþmY¸sA$Ò:8sƒp”ánc:h’ø‡Vø{w¦\éºSZ\Io+ks¹#Óa•‚]ñ"pI_}áFŒ²'Ça0°…m|eN5ÕXÔ©í"§‡P³uçz<Þì·W—)˘}SB~ô•íf•»ù.½ŒxSQøÄ þË?³WÁ ¿5±ªë l¾*½­¾©àèD–VºÚC±´Þ¬¨V–=îIbÕèæ8Ê\DòúùöaŒžW„‡³†%áT¥O+Tžɵí,ÓiÎn\«e!GQ„yåÓ›xô~_"Lj>~Á_³OìÉû:hÿðP„~ð†¥àoGeðËÀö¾!½×­¬õ‹‰Œ1$fdÔ6‡‰ËÊŽ!båÚe†Í¼Eâ®+Ïêp†*®"šnXšÎ:•(GšNv÷i]©.XJ.jñÖíéá(P¤±IÅè®Þ¿¯è{ÅÏø*ìGð7âLj>|NøÇý›âß Í¥Ç} 6t÷7P(-ÚÙ2nÔoC#C¼B _“xKÇÜA“ÐͰN|=eRÕ9ࢽ•ù”Û—îÛ³äSåu-hsÔÌðTjÊ”çi+iëµ»ü¡×îŽ+ótw‹@P@P@P@P@P@P@z~4ù™ð|c]øŸÿe¿Æ?úvš€;J( ÿ×ûò€ØÏ^¢€ (Ä>3| ¿ý¥n? ¥äþñ“âëO‰Ö³XÉuáw´µ[Ës22Éå½Á° g{` ±iÀ|CO…sŠÙ¥Ò­JŒ¥‡r‡:Ž%T¢éË•§ÆÖÒ’²õhæÅÒuéª}WÖÚYßô>ÐýŠ´ŠøÕñcß|og‡eÓ´|,µñÜZ²hþµ¶òìuY=µÅöÉ ‹.AòFÖbÐqÝl§‘eu°4_iR¶%ÑtLDçz´bþ Â…Ò‹…¾-RÑa9ãZ¤e-­hÞöGÝ_Ìó¿Š?h²”_¶Ç‰ô/ƒ0‡^ñgˆ-ôF‡Å±Xx–Æ;”Óu I6 òÕLŠòïF }>S•ð¾KÆ…èOþ·[ EÍóa\ðõ\juh¾gï6œ¼l”¬îŽzÕkO õ†£h©;|Z«Ù§ùž#û5~ÔÞ=ý®~/üøSûwø»á׉îµ]Dø½¤_hºåß„®|+q<i6BÛÍ+®Ëq4®9ET19_ïx§„rî És¼Ã„éb(Æ­—ÍNÅF¼c/ßÔçåO pŠjn<͵É-&ãËCøðßà‡Ç‹ÑâÏ|)ñÄW•¾ž¶³L‚KH…ï™Zì ÈÄ‚zשÅy¦Aá¾0©Ÿf•óY)5JÑP’ÖÛ„RÇòÆ„!Nm7·Kñé©îþ%ÿ‚LþÖºŸü‹â?í™á?Ö³ÝÄloþjÿ´ø5½:Îâi]Ûý†6àûc´™ IûÇß#‚kóÌ'ŒœGÂ쿆±6¢ù㊆R£RQŠ^Î^ÖJQŸ·å^š:.XÆÇsËq_u.Î7ÕyéÒÝ6=/ö ýƒ>üUÿ‚¥ü'øö4¯‹:o‰á²]WPñ'…íb—ÃR"Ek{=NYwA<‹qmó2ìyŒùnñ9Ê<"Í2‡,,è6éÆFÖ!}a59ÑŒl¤£Êœå+òè–’iïˆÁR©˜S©ï'½ÖÚw9¿Úsöbºø×â-(þưV‰áÿ|ø«ýáâ.˜l|7gm¨4:†£â->'Xµr&HŠ–Úér¦T"H¹ôøO‹#aj®&Ï'W ˜á¹êSÃËŸ)RR¥G R¬“–ñrºW‹¤ù$¹&F# «I{V”%£z-w•¾×ùëºûK|B_ƒ^Òÿ`Í#YñGÇï·&Ò¼QáíOÆ?ιmàñ{©­õÛ­‘$0ÙZJ²ªùlg…Hm¡Uœ.ËyŒ©ÅµaO+Ê:´*F–#ØËìésO ÊS•ZÑqo™*swW»QkQQQëԨÝÕÕí®ï¢KïüOÖà¡_²§Àƒ_?g?üi³ø>šß5[?üIÒfÖ5ÝSRñ3•}wQ—O·‚K69"9±!ŒP[íèxkÆCžd™Ö/ñîR¯‡’¡Fœ0êë J5g8Ó­)Q´§¼¡î©ÞM¥Ë,à BJ\êm'vÛiÛu©êŸ²ÇÃ-âçìO¤|UÐ>~Ïÿ´V¬ÿ£Öìµ=?Áøj+?7ìÉ}ª]GzTÕ×Ë{‰$p’˘ò ~C‹ó\FMǵrúجvSMa)FUž!Ë—Ò£O–/ î¡Çš÷·Ùua¡¸U8Æ5ö·k·~¿‰CÇ>ñ/íóñ—?´ïˆüâ„ß>)?Ž4Ï^øq?áñ7ƒï4Û‹uÓVéÝíî®­$}ªB| <¾âN_˜á|9Èÿá jYŽa†XiQGõª8ºua7UÁ(Ô§N²åö1^ó÷µv»‰Aãj^³N—2eÆÝöºêvþø_Oý­|%ã]Göb¸ñÏÃïü0ü ¾øKáƒèÓiЯ™¤µäR$W x­ ´²Ï”æ2Y~EqádY–.§â°°Ì–ŠÄªØâª]TU¤íYS’” èµ/oVÜñOG«‹Ö¥8,D_'4cÇ•mnŸ>‹cæY?à¼ðVÛ[Ÿµwņþ(])|UáûÇ éhzÌÀÜ[Ay+[…µ•n¤XÛçùXJý]}#8‡ž¾Äe˜leoaQÐxŠª­û“•8©ÞqtÓ’÷u[£ÌþÂÂS§õ•'nœ¬š}/Û_¸ú—öCý’|âÚC¿þ:è¾ðÅ/è„Ú/ÁxÒÞëLÐãÔ§’;wË·XžW¿ù¼Æ• m$a°e̯ȸӌ±Ø^ÄåLêb°ª”Ôñ•¨Ê5*º1N{ÍÊ1X}92‹jü’å=L>œ±1©RÑœS÷SÑ_íYw8ïÛþ »ð¿á·ÁøSᾇâo übÐõ›Í#OðçŒ|(Ù³{w'ûB`α=³Æ¾b"ÉçxsP¹ž;»™Ü]@›MÏšGòaý☠‚sÍ¡ÇÞ1qf™F>×–j8xZž”ÛTc:’q¼à­9rÝÅ6‘æ`¸6ÄÒLî½è¶äéÇE}wVi'²Nú+¶î}iû~Ó¿³çìí£øcö=ñ$>ðEαâë½#àç„´¿O¯ê¦ŽðhÚÞÞ–C.žóE,’yW6(s£ô ïÃ|oö|ó–”§†ÃP„±ö0ÃÒ¥R2öS§NÍF²ŒÒNpWœœ¥(îϯËåƒÀц E-!îíº¿Uó#øùâ_Ø_ö¦ðÏÅ_𧦸ƒÄß ´_|%ÕÄ>.¼ðΞ/n„BçH{©LqÆf•­ãq†*ÄlbF+ØáÜ7ˆ<#‹Ë2ŠÑ•*Éáññöt¡‰©ÉnJÊæ“PŠœ)Y5~egrëOˆ…J‰ÝÆðÕÙ_ª»îô¹çÿðOé¿°å–àŒŸ³§‡þø_âÿЬ`ø{ªh¿õk—äGšXØÛDmmÃ,…„Gxú?0•xþu1™naSˆÀR›¯á)`½…KWË.y{I´â—:ìÒÓ,£„IJ 1›V´¹®ßüÞÿhŸÚ3â…4]+ö§ýšõKŠ? <0º…¿¼ ðÛDMw_ñИZÇ›,s¬q½¬ûÞxÎæ+ ˆ8ùß ð¾Q‹ÄUÈ3¸¼:·³tkb&èÐ¥_hÝh¸95VT䬓”dß)Û^µD•Z~ôUî’»}4ôêsðR¿ÙãÁ×?ðJÏŒ~ øcÂ>ƒ_ðõÅÛEwi¡é¶÷WÏ=ÅÌÒ†͹žG#s““šõü,âLt<^Ês,Î¥\K¥R1¼TëTq„\cEsJVVQŠNËedgŽ£ìú‚Jþ‰Là“Ÿ?b¯ ø¿öºýõïŒvºäÿ¤ðôš'ÃÍ[ûoXß-Å­Ì×Zd·­$tMº*Gæy n*€±'ìâ1qâðœ;œÃ *K«s×±¥îÆpŒ+*J1T×;r—/=윚I-Ãàã,E>kòÛÝÕ÷ÓÏ·àyçìgûAüIÿ‚”üC½ý‘?iÿ|Jð‡Å/‚¾2_h_ÂV6wº˜n¶vÏæHÖ÷÷öÏ!›j,sÆf’¨M}'ðÖWánY"È«áëà3.„ðþÖ¤áV£Su*R\±S£‡¨—³¼¥*räsI´sàñ3º£(ÎéÚÚ+[^ïåuйñËà¿í «ÿÁtþþ×??áñÃûÍu¼'ã]sá­Š½æ”!±f»°ñ —ó –r’ËåˆÐE3‚Øðþ{ÃT~¹‡fþÒ–20úÅb$Ô*sTJL"—-½ÙOš1ær|Õ/k¥UhÖyÌkÒ³ŽÍÇ{®’ÿƒ¶Çêg`Ï¥'D-P@P@P@P@P@P@§ã@™ÿä;ñ?þËŒôí5v”P@ÿÐûò€ ( Ãþøƒâ?ø*ììŸû›ðö‚ý†þ~ؾ.øaû'| ø—ãüFñæ£iñKân‘áëÍKGðî³Ëæiš†¡rÃì±ÆåÙ-¢Ý~~T(göŽ"á¯3žÂãø‡‡ÃPÂP§,6u!N­j2QµZ4 Ÿ<¤¬¥Rv”¹lÛqÓÌ¡[O(Q‹nOÞ•›IömþHò_ø#ìÑñ‡ã¿ìéâkOÚSø™ðë—óx‹@×~IàEð·‡VßSW”Ϥ£ ½‚0—'øK8!*ªÇíæ7Á_Ú‹öFý¯ÿà¡PXx/㟆¾º·ð¦•wá[•ñ^‡¬͵ô^\¢ ¡ŒÆÑD ŒT¹;=ùï q§øm)â°˜¬?×*ÅÕ’«ªÕ¥ËÏIJœ|êO™JME_•.fgG†Åc­Eò­Ÿ2}u~EÏø+O޼Wð;ÀÞø»ð·öÕ¼%â-;Ķ־øg¤­œQüEÔnolÒ-2ye‰ÞÙ ¸B‰¹-#`(¬<À`øƒ1ÅåØü¾5èΜ¥S.vðtáN£•XÆ2Q›ZISjN\‰A^åæSt£ÆvwÑ6«Oø'›|<ÿ‚zøoö¦ø!¯xÏþ AðŸCÒüj¶¸øwáËM<#ñkF‚ÂÛÂþ¿2Ý­åªiåÒòÍ㈬/+<Û-„‹•‘]þûÄNâ~áü³„°8£‹©{\,å9WÄÒµ7 ºÜ®XÊW¨¢£iò½bÔxð8œ>"¬ñ”½Õ{IZÑzémÞÿ}Ÿàö{ý¨$|Ò|{£xú×Ç7_“@ÿ„-ÖD¼¶ŽÊÙLº•­¼H×- ¸YŒb¹«ðžaÁXžŒ0¸Èa39Э…tV×úÓ›NœIµ5*Iªjp»‚\×Wׂ¼q1¯yÇšR¿5¹{éÕ-Ïlñ\ºÆ øCö÷ý5‡¶×:Õ–Ÿ>¿ñ Äþ¹’óSð2—ºžÎÝ€Žxd'l±¬ŠUY[ty9ƒXŒ“‹á&yFœª(P¥V Æ»Bš÷¡$µŒœZm5iYMƬc‰£mm«Nü»µÜüúÿ‚„~ÐðIÝö¾ðÅŸþÁž"øíãï‰^ ÒüS¦XèÖÓ&™âmg¼‡Î}$æ]CPH­]–9mÄ0—–!+ý%ᯠxņà¬v]ŠÎéå˜Lj´%)¸º”jÅS—*Äi Te*‰7 ×¼§Ë ¹4ülml»ëpš¢ç)$ôZ5¯N¯ä}ðÁŸ´gìëÿ ïIøûxDøfš6•­ü ð_‡m¬ôŸêSé€ê0j$HËo7šÁæKT,#ñ#ÇpÏÿbTÍóºÕ1ÎuiãkTs¯ãW÷R£î§(ò¹T匤Û}±éÐUé:ª’ŽŽ)Y]µ­ÿ-lR¶¿¼ø'câߨ¢?‚ÿ nì¼Eðf}áWìÅ¡h­`³‹þ'67·Î¦ÀÃ5õÆÅr#ȑّÀf­çNõL/’»m_KjíʶHû:ûâoÂ_xáÏ…þø»_ý¤þ(þÎ~)Ðt¶‡«Þ µ]mE»êW‰g Á{6êÎ7T±gG kΧ•g8œÇ0ÄcéSÊ0µ*õi󯛿xgΩSu$§NS›IÙ§.ehÊ6GÖûJJ0Œ©:m'ký®®Ûÿ]O¤¾:YxöuÕîþ/~ϳƒ5ߊ¼A¤éúœ3jöZ-þ»m ,-1¸”ºkKRò,CsjŽE~]ÃÕ1!Êó¯m˜a©ÆœpñÁ¼EÓ¡CÙ8F¥Üe ¼®Õ%ùÕÜS<ÚÆýKØÔ¥hËVù’jî÷·—n§Ù_³—ìY&±¥kühý¼üAûG|>×´WÑîü!ã ïGyxdóI´„o‘<­»Yˆýá, GáÜQÇ‘£V‹ÊòHe8ÊSUZR¯¶q’·¿'e.kÝ+è¬ísÔ¡…æOž£©­gkÿ³¿þ>~ÓŸ µ|Yø­uðƒÅ¾ø»¨Ïg¥èú:i×—þÓoÚ+e’Úì—û%Ì!C\¨ A®ž&Àpï gñ9vcðõð´Ó”æêF8ªÔÔ¦ÔéÙ{Jr½©¶ÚûHTeZ¼g.V¤ü½Ôû>¹á^°ø±âoŽ?´6“û|Fð7‹~3|VñTVÿ>"øWÅ[Y|6ÑSLeðÝÓ[ÊŽ—ÓìIAl[s¶[ ¤/èÊ™> ÈjqNµ ³I¼>­(ÊxÊΪxÈsÅÅÒ…Úqö–´U£vÕøàªJµo`Óœž²OáV÷}zìt³Gü§â¯Àßxƒà'Åox«â/Ê)Ž]RŒ9·(ËÞnö´¯Ó®¿¡ú ¼¨>ÕüÖ{bÐ@P@P@P@P@P@Pz~4ù—ðþC¿ÿì·øÇÿNÓPi@ÿÑûò€ ( 'ø…â!á/ÚËÃþ%?äø}ýŸû?üH¹ÿ„Ê;¹:ÆÐˆ¿ò˜!ˆàì# ¸æ¾Ÿƒp¯Äø* õ®jÔ×±æqö·m{>dÓ\ýúXÃ.Z|ܺ={yžðÏö«øëðözøkâOø·[ý¼;ñ×âüÑünñ׎ôùï5õñ4¶Q]6¯¦µÜÛ>Ÿu P«#ËIã‹åQ%jf¼ÃÙçæ1¡›VË0‰à¨Ð”aCêñ©(*•9Ê¢­JR“ï9¥¥SÞ|§ÌQÄ×¥‡„—îã9{Íï}ù–‰Y­ôÑéæ~ÿÁ=<5ñçKñ¯Ä˜þ-þÔ¿¾ [øw^ÿ„vÞ‰¬tXx@‘ïôçµE7v² bR0Lm·Ž¿Ëþ%b¸z¶/yvY…Âʬ=³xzõ+>Yh©ÖSoÙÔ¹œS½¤®{¸%[ž|ó“³¶©/š¶èð¯Ûƒö/Õ?h¯ø*.€þ_‹¿ ¼G{á»í㟵½Òg”éWÖ_,6Â9)Uç/ö†o-P¨s_ ðÑá +¬GÕqÔ#Rqž ´T*ÇÛrÇÛR©¬æä”¢Õ5f—3•ùQÉ‹ÃJ¾=róEÛI-Véúž/ÿ;_Øþ ËñU~~Îÿ ïíþ>|VÔ¡¹ÄÚ˜»Ô|§Þ¿Øî®ô¨´×~mÊ-œdyòK6dGØî¼(ÿˆâ~OõÜç”`bãìæù)âjS^Ò¯$Õ£K– Õ•ýœcrQæk‡2ž .¬¡JÚÔ{¥ð­´õ»Ó×SêËŠŸ°¯ÀŸ ~Êó|fø%ã…»Ôc›HøYã‰~šmCÂ×sD‘´:•ÌÅžÊêè˜âT%šFé0ü~®Oâã8™e˜Ê<±µLM,=T©×„[jTa•Jtµ“jÊ+ÎI?UTÂQ…x½tM­W«èÙÙÿÁF¿h¿ƒþÐWá-çÀ o>2ЗOñ­Ç«v'P‡F·¾X¤ÖàŒÆÞsÛ?)üò8 ¸'5áøcÃÞ3ý£s˰Õ}¦b_ðÝiÓrT$ù—*¨´”Ÿ»êûcq4UéòóÉZ\½m}ÿÈí<3àOÚJÛörñö­àÏ'ÅÞ/ñ¡¿×>AñGAŽÎÓÂî{=&æ+TÞÖð6– /,p+ÂÅæ<->'ÀÓÅa=†ÉKðÓsog&ªV„¦ì§Q|)Z+ZìÚ0¯ìdÔ®ÝÚºµ¯²vì|wð;á—íd¿·Ïˆ?goÚ7â_ŽuOhÿ¤Ó<ñÓFðƒLKËôiï’öM«g-«´Kh<¤Õãݹí¼Ašðkðê†u’áèÂ…LrlëóTp¤ùi:jîµ(ÕJN»ç“riÆ\¶KË£O±®VÛQ²’Zk½ûÛ§Núžuÿ”ý—5_Ÿ´wÀ|7øÃ©üA𷉼7ñoø«ÁúΧwá .âÔDv"8äŽ(-çòšPã`2J²0iÎ~£Æ^-£Ä/žaqØHáqj`*UaJ8¥JõnÔ¥9ÙEÇÞ|°qME{« ³ èU¢ã.dÔ®Õùoúÿÿý½þ&|Høë¥þÀ?°7Äe·ñJi_|Zñn¡Mªê²Ó’+‡´Ko³É ÜÝ!t…¦>\Žž@ÃβGù·†þeYWTâþ.Ãßû¸áiNq¥O:ÎPSsçŒÝ:N΢…¥¿jïrŒ»1ØÊ³ª°øi{ßi¥v’Õ«[®ËîÝœŸŒÿà³°·ížøà¯Ú{Åÿ5 [-/^×tåðe­Äšò³MÇ‚ç·S+G¨JxxaƒHçr׳ð3ÄxœÛ–ÒÅÂN­(KÚÎ*•”e |fùS£³9¶š»œ³3©šàêòÓSqv»Ò÷èã§_%ò-||ð¯Œ>*~ĺ_íû kú燾[x6ÏGÖ¿gû?ƚƙ§E¨1ÔSN’ÅÚæË^‰ ‚8<ÃlŒ¬ªÍ½ráÌf(ãÚ™/Bqò­:Ç:­ÑISJ‹¬ª¥N¦Oß”ùTäši´¹]WŒªaU\?À•œ×}mg¤ºv>oý‚>1xsÇ´ø[ðOö™¹²øÝáïÚw]Õþx ã'Œ5sq©ø}‚ÀÖwÑ+¼‹eб¹QÔ.ϵ¼Ìþ¡â.GŠËñ²Çæ™r–UW-£O_ J‡,+«ÉN“÷‹«(·(ÝÎŒ’×-¸pucR<´çjŠnÊMímŸËñ>ý‘k?ß¿h¨¾~Õ_ðM|1²ø»âm_Zê¿,¼^úuÃD’LZ% &¥¨R  …Ýe8ü«Ž¸S…³®žk’ñ%,_öu*PpX9á#(E´½çîÕ®÷³¼çÛv޽Ô15¨b9*ÑqSmß™JÝý#þgËŸ¶/ü ´×íðûá÷ü3॥´¬&Ö<ã_j[iö].nÿѯ ŽÒÑÒè,žt’·˜C CóWæ¹Ò:¡f8 ¾O4Çæ.¯ðr¦££êF¼*Ur‚ö^Ë÷\¼Ê¢œùyÆæÙµl~.ž"§í?{š.<©7·½¦­;»§¦—wk{ö‹ý˜üKû6|2×~1þÓž'ðïǯÚÄ—kª|$ð|ê¾'ÓuÍ5¥³S™´»xáY K,“$ª&Øß¢•<þøI„ñˆ0Øž1œÞ‚,EFèáá‡÷jý^œÕ¯>XÝÔ§ÏÌåiZ3}+"©B/™5‰Ä_ÜNî<¯•KÝÒ=Þ‹¢},»¿ø%ޝàÏø&ïÂ#ã?ü›ö¶¸ð ¿!Ô'ð¯ÂÙ•´°†ÞõZÞòÐKæÏe¶ÞXÐZ”²€é½wWïÞ,á1~%æ•2ŽÊ–&8g˜šÞ“•6¥N|¼”ê^qoÚ¥.wË.WcÞÊ¡ ºŒ^"|·ZFÖI-­½¬´¶‡¤ü[øÏãâo‹ðWÛ‡:Ö¡ðÂÿ®ü-mðŸâ Ýè÷Z¾§m«;I¨ Ib’¶¸¶‘WD4Ì´Æ€²Ÿ˜É²,Õr¿"Ìkcc]â¨rU:s¢’¥í#(ÍÔ§Q>zwTÔ•Ô¤Òk®¥YóOoqFÜ®é·}íÚÝw>ÿ‚Qx ãÂ?ø)ÏÄ3Ãß³Þ­§ø«Â ×üeែÚ/ŽO³º¼’k)ôÝ6Yâvµ–³Öp `¹FÂ0d¯è_s“;ð£/l|'‡¯Z†¦2t]IÆ 5aZ¬bÒ«:¸yE¦õW’jGƒ”Ó¯O3«'Y[™EKO%}¶gß?´Ç†>&~Ñ÷€>>~Øÿ5[/é~ “EñÁo뉬øŸÁÞ)Õ5(mí5«ií<µŠÏÌwº«G‘±Ý_Î|)ŠÊ¸gŽÊ8kVeRž2¼,6# B”§S8Ôr»[(ÒpjRV”Ò±ï׌ëÊ5+GD­ÊåÞ[Ë­þG³~ÈŸ ¿eŸ üø³ð"/|DOGãmCÞ(O:ÜñkOöx­¤kIµ O§Ê»UHIò£’OÃñ¦oÅø¬ÿ+ÍL?Ö]u©ýJ0Nšæ”Ò©I(ÖƒÖI®h«_c¯ OS§gk´ùºú_¡ËÿÁ?þÁL¿d‡ðgÀÿÚã§Á][á~“§Ï¤è‹§Ey¾ÛWqK/—±Ä€FFËF\å«×ñ<ð¯ŒÖ/5ÈpXÊxú’U'ÌàèküYÉGšq”Ÿ¼ß7/4”U‘Í€¥˜á# U¥D¬­{ù/»ò8߉¿~1kÆŸÙïþ ‰að×â¿…l|c¨·ÃÞ Õ¯¼Mä]jbK™ Ÿ1É´¬r+ÆAŽHÙÈ ãíå9NIG“ç,F*³‡Öqµ¨ÃÍ \Õ"¥I]7¤­(ÉE]ÊÂJÒU)bÒ’¶ÑMËWÿ ³üг7Çß_ê?³ŸüçöŒø}£øCÁ~>ø‹ðãâ&—y)Ò5k¨Òåu=²$²ßÏ ÄÉ!—Ë]Šv3;èŸpîcNžuâF_^¦'SÛáñyA{JPn—,ÛŒhÂQ´b£Ìîý䢓ÏêÕá/ešQг‹[7k=öùþÿÁ-iï xàÏÄ¿x“À:¿Ç/„ú˜ðô¾-}KRkM{À²³Çqe¨O2úèC4ÒÆ,k9 dž|ßžÆfY¾ N½<«l©rÒ祊N)YòÒ§ÍÆVnNškWk],¿SœÚöÒúÙdzîú®Ï©ÐÿÁBhïÿÁ1¾øCÀŸðNÏÙ£ÂZ³Çâ8ôËï hȲK¦[Ӥ鶹ºîº‡_ÉËJÈê6Ÿ7Ã^Áø¯Ä8¬_æ5i§MÎ5't§- äëTýÔU4“jN>ÓH)Eê¯ZY}Ç õÙ}ûo©¡ðöý¥?oOŒ_jÙ?⎇¡ü-Ñ!¼ðïÇ?…^1¶5m7ZFß$H‹Ùu1(ó$Q²BZ0Ün#á~ðï#Ì2!ÃN¦>£…l&“‹¥:-Y6Üõ§;7îže¤œuF'V¨4 ´”^éùi¿Ïcí„û£é_…¸´P@P@P@P@P@P@Ÿ~eüÿïÄÿû-þ1ÿÓ´ÔÚP@ÿÒûò€ ( ?kO‰?þþÓ_ ¼wûOxâÛCø}‚¤gNØ–ÒjÔ•âïÿ?Sèrc§Jžš«´zù«=>¡cáïíQñã–»¬ü*øSû$ø»âäÞñÖ“â¿ÙËYø™ðª]#Nðþƒ)†Í9F¶Œ›=æÞâIå{9~C°–þ̸C%áü=Ã0Í)`jhfÃâ•Z•kÇšTê¶•YZ½[{Zq§Òå~÷½eâÃV«q…7+4áud—n›-õ>–øÕû=~Í~ñίð?ö¹ÿ‚‹x¿GÕ>+ü[¹ñýHñåæ}m¶ÑÙ &„îf¶YwH|¤"üƒnOåyñN//¥šðîAJ¥<8|DçBá'ºžÚQpŠGFïž\©ûÎö]ÕhЄœ+VkšWZÛ}-é÷¿à™ÿ¶ÅÏÚ‚ËAðgÂߟøá]ΩàÿŠ:oÄmFö÷Äíyl‘ÿdÜ[ܼq‹: MpfEpÒ¨Rø,pñW‚²^©_¯í±XåK†–0†’mýb3‚rp䟹K’M5ä£t“Àbj×IAZ1º•þ//¿­Ïœn¿ØWâïí%û^xßâ—Â;ˆ4ð/…|]cªøÿáÅæ¨<7©Ï®ÛÚ:Ù]øsXžoœHщ Š†Vd’ƒéþøƒ’ð¿àðŒ¨añuéN1 ?X¦¨ÎiÔ†3«N\¼ª^Τæ¥ùcÍÁŒÁUÄbœáw´ÚÙ·f—+ì¯~‡­Á;ÿcÛ#Â_¾5ü*ø—ñÅñ–¹¬[Ïðÿ⦿ãã­:O›%¬Ö÷¤bKe—Écó¤åp¨¦¾7ÄÎ:à|odù† N®œ$«á¡GêU÷c8Õ$ýÚ­sÓQröqÑêÚ:pL\)ÔFÔ­&ù—]–›lß_;´Ï‹>:ÁJt/êÿ³×ÄýÅ_üªCyñ›\°¹ðËk9·mQ,>Uõ´,·‘m—nàX)Û‘•\›ˆ8{ÂÊøzxü5L>>½6°”1¤§u^<³æ¥8¨Æ”ï ÚÑm\¥R•\zn2N ûÏDü¼ûœOÂoø,OíUûD|øÅûa|2‚žðGÁ›ÿ鞇X¿ÔüY¢jëmºÑ5P« ¿Ùäx.Ø!Êy|‚½ÜçÁáž"Êxk±²Åâq£*ÎéájRsµGBîu9â¥M7+ÅK›G¡•ψ¥R¼\yTn–®Iù½ºvG¸|ñ‡í¬øwöpøeã_Ú³ÆZŠumOxÓÄmðÚÙ¬°ð×Å[6mkÂßh~;Ô%±´ŠÒö{É•ÌB•ná¶š2Œq¹Õ†åÞ2¿8sÁîÃd9ƒÄæy–+ í)aa‰ÂûóœèÂ1Œe8I¥UŒã;Z\¶²qü÷‰xƒƒÅsÓqrRjÑiNê×mÞÉhí¦²²v½Î»àwÅÏÁQ?o áÇ¿‹~1ÑbJx[ÂÞð¦œ÷·sxçIìµ B9HÔùPIqs0–9¦gýÚ ª¿Ï¹—„¾6ç|‹ÏsïöªU~°ðîp¥Ï)Âñ”!þÌùa>ei¯e àËþ¿Åy—>6u)RZF ëš =M=¹[“æM¹(Ù^ß|vð¿ügþ ïû+ü}Ñ>økáü^1Ð>%¯Œ4¯I$ÇYM—«‰ÍK»‰ pÈ\Îÿ2ä‘íø]Ãa˜æœ;—Ð…h`^%ûÓIJ.3Œñ)ÉÆOž s¶Ô¬Õù^ÇèÂåy6­,4"œcªþfÕ—3êå¥ÛÕœÏÀ?Ú Â—ßðNÿ ~Ú?d™¾ë~ð‡>ø‹Á:rë k¬ZZÛÅy£i‰$’, ,°•´˜É(Ž%ßÀ5÷ÜGÃxÊ~&b¸c(Í>¿J½yÖÅÓ­'J<ØyÎr†&³Œbæ£sU‚Œ¤ùzFµð­VŸ$’J6×âVÑzôgñƲÏíyÿ£ðÖ‡ûdükñoÅKï|M¾ðg>$ê¿áðö©¦ø‚in­í„°Å½lb‹kÁ,¬¥YwïA»m{¹n ‹¸/ÆE^ÁÒÁG ††"¾5å^œèEBs唬êÊWS„ºvå–—3«<6#.Н'.iY;(¾nžŸ©õO‰m_Ú+ö_ñ‡ÀOŠšg‡þxÛKÑ,´­â§…%¶ñ‡«^ƒK{geq†ò¢dT0Ü…bXàà¯Çóˆð ñn7ÀJ¦3 9ΤðÕyðõ©Âö:•!§4“º+¤—ª=OZ„©Í(É$”–©ú/ÑœÄ?ˆß°Çü§ö¬ñ‡‰þ0k^3Ѽ]ñ³AÒŠþ$jz§Âú{[ÙÍcn~Öª°iîÿgËż³1‡¶Ì}Y•øâwá(e°£S —N¯²ÃÆkë3SœjÏ÷m¹ÕQç÷eËd¹úóÎxL"NmóM+»iµ·éèVÿ‚0êÿ°î‡á/ø à×Å™|cñWF–ÏLøã¯X\Øk^.Ú¯5†¢Éw<ÒÏk$m v%pEmã?Äc0øÌÏ °ù}E9á¨Ó”gGªZIÓ„#‘œ{TÔÛæ÷®NTð‘ƒ9^][½ßTõoNÞG9ñ[Â?ðP? |Bño‡ÿà ¾ø_ñ_öZ×üwªj××wú©[ÿh9º±¹ºf¶…­m„^0.&.䙊¦O©“ã|7Åe¸ZÜ[ÏéP§N*1÷15¤¹*ž¬•J®MF_º§eeM9YeVåRQÄ(΋nýâºt³]ÿS‘ý™ü9ð[Eø?£øïþ QûLkšçˆ¼ ã3ã%ÏÅc­É'ƒîeÔKM!lo%µ†6‰­å„ÉoQ(šBÀ*°ìq^'=¯žVÂp>] TqTjeË È–-*V©ˆuiƤ䤧rÔœæÜÚdááJ4“ÅM·§ÍöuÚÚ~;ø,§ÄÕýŸ¾ ~Ï?¶ÏÂk«¨iŸbѼ]ÿX7ÇPð“Á5æ«æZÂŽn¶Ed³°‰ƒ2ʾ'ÙOúÉ—gÜ/™R‡$ðÎ¥/mîrb”£N…§'iT»KYÙ&§àï5¨¨ÎxJÍJÎÝc××Eò>ý’5Ö~øßö’¶ý‘SÀ2ñ–µy{ªø}+øÛñGã]îƒâ¿ŽÞ2“JÐ~ ø“Qi[ÃzŸ‡ìÒßUÓôù<Óâ,„ÌóÇ—S€Çï| O|NmÓÇ×´u¯‡ñ±iu„º#UˆËseæG¸ÊLqÞS¦«…x«5Ê|+¯W1ÆýgÏ,*ËÝNOâBUcˆVnJ4êÚVQ´¥§:»A^Œ*f 0,¬¥Ïo•»j¼ôìzìåñKãgÆ?ÛsǺ>©àï|.ðïÃv»Óu_øV 4ßÉu*Écâ+}UAs n¯j¾aQ"yŒ® ™â|£"Èø VZXÚØ¾YÆ´jÉTÃ*iª¸YPméÌÓGÊŸ"qw5ÃÕ­W4â⣥­¤»I?Ðú©>àúWäˆô… € ( € ( € ( € ( € ( € ( ôühó/àÿü‡~'ÿÙoñþ¦ Ò€ (ÿÓûò€ ŸRÓ­n¢±ºÔ-âšõ0É:«Éþê“–ü(Z98ê( Êö¾‘ª´‹¥êÖ·FÛ0¶¹I6FÚN?:\$ø‰â}þ !û8xQð®¬Øø¹¼WáÝJÏ[±1¤i‰sçF„í«ÙƪÌ’AŒ°#ëx7 *øÌehU9PÃN´\%ÊïØxZMkÈÕFÚMj¢ï¥Ÿ>%¥¦“MÛ_GþGEÿlñlj?ðM+/Zü+û⮫Ø_\é¾'ÑóWðN'Œ*êÞùIJ%ÒAq$2É.+Ä.(«ú Ç 7å~*O6–Cí2ú‘©*sp¥‰«Ë/ßBt—*tœ¡ù§NN§¿9žFXëOìý­¦ŸUªWÛ^ý=OrøÇcû0k¿æý”ÿà£?tO‰¶ÿ|_-×Âë=[ÁñZYhÖ‘´ o ý¾Ì×x̨„“e†Ò«_’TâÌ6O àºÁËI,K…W)Ô“çSÄ{)/vFM'hî›:êûiì±/›û·V·e~÷ûÉþ?þÂß<=«jpþŵ Üü`øÕkâ77úµ¬Wð;ì7¶úK›9Z)B$2FÜH&AYp߈9&7Äø׎*X5ÍÃÛû_kNU×µ‚”nå/…ÅÿL18:Ök79^[^Û;hÿ®¨øsöcøö?ŠÂ/ˆ_ðPÿŽ6¿ô_x”øÓá¶¹­j^-Óåðu€žÊúÓÏ1ØÍ}¦²yW—¤&Y|¶O߸¯2ö™MlÇàå–Ô¡‡ö8ˆB–¢ÅÕå´éTäæ«Óç§’ýäœ9“òpôÚ¨¡:ÒçNW‹×Ý]×K®§ØÞø×ðcà_‹~Yxw㾿à/€ß>·…>|-ŸáÜÖË¥j¢u1ß\jÒ“-”ÏÉm¬ßë$ ®X_‰cr,÷ˆ0y´ëࡊÍðXoˆÄ¬DdêRå|ÔᇣV1”]IÕ‡Ãg£Lõ#V•)Ó´ÜiÊ6Q·^íï~‰'ûJÁ<bo†~>ø%âÏÛóã—Ä­~ÊÒÃÂÚ‡¼aã+¿'…uWgöf±u¥Dc)*Ý‘ÉHÂM!Æ6•ûÞñ3g›`s\6G‚ÁÑ“xÔ¥FG^• ûj¯.kÅÝ)FÒ“qнï~\F éΜªÊOEfÛ³{;+^&°ýÿd?ÛÇBýŽüQà]kÃÿtßÙæÿÁoáð¶¡eáËëë¹`¼[«ËÀ<¦ËžéÃÈÞCÏ"nRZ»°•8Û<<­Ä”+B®g<|18Xº´çˆŒ)©Sp§OâR挧/h£Y¤Œ¹0˜LZ¡ÊÕ>NY;;]ë«ù½z·üö×øªÖZ¯ì‘ðொ~/|)ð?Å]CÂÞøé‹­®âƒH,³Â÷Ï4¢K–']¦Þ5‰`hQ@(Ex>5ðOÏKˆ³,e,a‰ÂÓ¯SéN Õ³Œ•%òÁIÅßÚIÍÔS“m4Í2œMxÅÐŒ\á4¥u·Ÿ’ZtïÚŸÛ_Ãÿ?dø‹ö†ý’´(~'hÞ+Õ<%áÏ|0½Ô´kýRšóNÁX<ë‹3À^ઢÊX¤^ú‡‰Ï8ÛC&Í&ð5)SÄF¥|M:u£NN4ë^óä…E'.ZwmÂÍÝjoõ¥K 'R 6¬–î¼íçÜøçKÿ‚ þÉŽ|Gð ã/ì!㿈^'ý¥5k_¼­^A¢X§‰åŠÚÝtû kÑ À·[‹xLs³ÈÃ0“@ý¾¯„Üd¾¯›å™Ý- ž5éáëAJ´þ­9º•gKž››„ä¥ÙY8ê¯å¬Ë ¥ìªSr•K6¶÷´VK²vÖïÔû+âÇíCã‡üñ³ö~ý£~ xCöeðåž«câ½ bÞ+½wÄ¢ÆñWN(-›- Ì6¸òf…Î.‰>@?™³,Gðç chq­XZê?în£ûWØïtØ.µ¹’ùÄQ›•˜¡·Y&M²¬¬X‚ßyÀžðm|"Ìp9Ôp™¶6U[Ên¢«ÉOÙGž›qQmÕk›™8ɦíôyvUƒÈñUå.£ZûIk'Ì“•Ûz®k¾ë_S¹ý±?iØÇþ áû>‘ÿׇÃÿ ¾(kwÞÔõx<-¡Á­ÞøZ B;)æ7ßhYV6ÇjÄ®WíD °5úWp¿ø™ÇЧº˜ì8â!Vr£ ò¤êF>Ë‘ÅË’­ÜÚ¿²ÜÚŠ=|]|6Ö¨MÛe~[Û{ù}çן³Ï¾'ü{ý“µÏx£öx°=“A‡OðοñSBµÓbø‡q ”rYê·‘ %±¶šs¿ì²nšÜ6†¯Åx—”ðïÑ¡‡ÇËêŠnu!…œê<$e7”aR\±«8COiB£³æižT­†nQ\ÖÑÉ%ͦ®šôè|ÉðKáÀÿÿÁ1|£þÒ´†µðwÅß³gĉu-SU×ý‡›özø½iá_üðLJæñ=çí+­D|9{ãK»‰í¯.D"ä´3ý¢îIvòÍò—n;›ø‰–ñòÎr×W™Ö¨¨,º0—Ö#ƒ§Μ½šR‡%5¸ûGËÏ+ÞïU $ð¾ÊvpJü÷Ó™éß{¿N‡ƒ~ÌðMÏ~Ë:‡ÀkÅ_µWŒ>xa~&\éþ;Ð5‹í¥Aâ«ØÝ.¥Û'ÙÙ5'€´ÖónCæ.æoCâÏp|]O<¥C,¥¯õx΄á„ö²¡ŸÖ"¼ß´O ¥hT…£ÏÊì£î¾6xwIÊ£‚»ºrßùl­×ªðO`ý©~?üRý®´ïø^VÓ¼Kð»Ãlþk?|Gá¦ÔºÅŸˆOâ{g,sƱÆKiÄf“v@Â<9”p]Oì©Õ•}lñÆÓ©ìíJ¦™a=HÊ Ê[Ô‹U5J<º·×ˆ­S¹Ò¼T”\Z¾©üWV-uÿ‚™ü0ýþ&éü·ño€|-ûE_xSPŸà•åÞ½ý¬Zêk%¼Vó[•˜*ù‚ˆp¯Ï|)͸×)®³9R¯_%Zk”=­)SSR”'^|×¶¹]½nuã©a*{š*¶|ºÙÿZ~„5±ÿ8ÿ‚WÜüðÅ?|?»ŸÃÚg…ø!ÿ…ðf…ñWÀÞ¼ø©¡øRâOhgâ Ø[#PŽ{›eò'ÑZ1E÷G–ùYþåÃÜŸðNaœø‰ž^8jÕÒ¥5:t15eïRq„ß4)TWo–ÏOy&y±4qiàR”bÚŽ»¸®·¶›[KþÖ¿ÿàœ_ðO޳þ­ãOˆzGïhºo‹|7aðâÓF¸¹]Jq!·’N³²´…—tÓ2²/žS ×å\œx¡âFAžSÃPž/RXZÒÄ9Æ. åìá¸Ú¥I§hA5'Ë´µ=U<­.irÅs+wæßÐô?|¼µñ¾—ðþ ¡ñ¢ãà_¾øÄ?į7Ã{eâÑxö·{-/o1©†9ã2ÀXuœE¯šÌ8Šœð3n8Â,Ï¥þÏ[ë<“¡ìÔéÞ¥:kV¤ã%Ùµ ìÙ¼){êž\‘ƒÕ[{ë»ý ~-MâØ“ã?ˆ¿l_ŠÿÛÅŸ¦ž[?|ðGÁKk«Í Y¹Š×BþÉåË›k­ìT ÞäìJŒ™a8÷"ÃðÖ_ƒöŠJU±u±’Œ*у• éTjš·<9Roø~ê\Ò —ÂUuç+Ãe£ïu¯{œwÅoÚ§ö²øÑào„_µv—ûCøcö_ø;¦[ê~+_ÙE}®ê‘¾hÎ…%½Ô(‘G$1“Æë0‘Êì#i¯s'á ȳ ׇ瀩œæP”¡KÙI„)û4þ°§ JR”fýèJ.ªüËS*˜ŒMXB²š¥·Õß·üÏÿg¿ø(Wí ­~ݺ¦½ xÃâ^­ñOâwÆ­OCøqàŸ‰Í©é> ±ðCù2ÛÝI§´I¶ý-í. F‡\ù“ ™Ù›ö¾%ðÓ†èx{J•j8zx \El7²«‹–1sFpU)^Œ§R’ïv›‚ŠKÌ£¬ñ®ÍóÊNÊWQåÓ[wéÓ¾§íêãhÇ¥X-P@P@P@P@P@P@!éøÐægÁþuωÇþ«Œôí5v”P@ÿÔûðóÆqBóûÅ_³ïÁÚ'Ãßµ×Ç¿ŒúM¥çŒ¼1âOKð·ŠîóöÏÛizEµÅ™°•ÿãЬÒ=Æøöîi2Ù®jõ'K$†" Ó~Ò_8Õ”Övj ò߯™½*r¯™º.-ÇÝŠ[Ý8©6–ºÞM^×÷{XúcÄ·ß¿`ÿ…‰ñ^çÀ¯âo†Óx“Æ0:Á&’’ÙÇ%ÕÀi¾fX‘·9í]ù•Tñ5!{F2üÛÑìse³­V•7Í)+-ïv¬Ÿ¯cÿcÿ„ÿ üAûWø{ã‡ìAû>|%Ðü¨izÇŠaÒ²íü}<Æi%½¶—QÁåÊâòUüïÝ—V-Qu:’šåRJÑë{Þöû6WZÙùXr5NZÊ.îZífœoÖîϪV=×â÷ߌ¿køOà‰cѼsÂ/êÖZH“ìZìcHŠÒVib•0'›ÈN€H>÷ ×ÉpÙþY¿?Õãê›jR Úu"¬Ó×–-+¥tŸDeˆIR~ÎÜÝ=z%®þÀþ/|5ø±û'þÔþ ´ø¹ûA躬Ÿ-¼geâ…×e°‹ì–±Aá»ÆÛo%»ê or¶ñż)(–$SŠþÕʸó‡8_”çy&¦'œ~¤éÔ‡²sn¥IKŽ3Xw8{Is{I¸òMµ&|Ôðµ«Â¥*Ëš§Åu­´VF¯Ñ|ÑëðNï:n›ñ áÆß†±±à·ð·ÄmoÃ~ i}s§x[^š=¶ž'¨ÌÑ;Adž2¥:+¥Ëx™Ä5jå¹®WŽÎc‰Uðôkaq’öq©^„]êa-F*IN­æ¡QòûŠRнÍp4—<' MZMJ:»>’Õµ·ÎÏä}ÕðkAðŸÆñßíUáÏÙþÐß4PÙèžñmÅßö6‹¨Ïå$æ&dÜ'ŽÁy#ùX8B>lÿ=瘌fIâ0™JÒɱs§yÕ¥ûJÔcÌãÌ“·³”ž‘–©§%±ìRŒjÔŒ«%íc}z&r_ ¾7ø+öÔŸãöûßxgÀ¿ðÆ›¬y?L~ —Nµñ?Š´ÍÅî¥}¬4nÚtòùÊcÄ&O.‚C‡VýÏr¾ð³+Âç2ÂÓÄWœ/Žýò©*\Sä§J–J*´êG•©^|·œjA{­yX©ÖÇÎT¹œWÙÒ×’Ýߥ¾]-Ô×ý¥—zrÝ~gÂ?ðS¿Þ~ÙÿÓRø/h¾.ñŽ¿ðÐx{ãž‘áo WI³“JszGÔ¥‰X&ZðɵC5¢{ )L¬žPU_õDîfF-šø¾>ð·‰8/9Ë3^*Ì!˜ãjÆ5T½¬)J•^odçÏ.x¹kʹ`Ô¤œ5ep÷ G3«[›EJ¤­d’ŠZ%}5¾Úò>’øÇÿ`´ñ×ÄÙïáÄ¿øÛàw€t3¢|Gð‹âa\¦K³|çq· q^–}…§_ žsÁÕšáZÔâhµËìeÏÔ ¬¹Ÿ½eºp˜\Fn”š•hº­^ŽûéÕÜãhÏ|øSÿÓüyñ[öJñ~™à”Óô¯ê¾:¸ŸC‹Àš€’H¦Órn$šÎá­³:»„8cîpÆ<Î|7©„ËóJSÅsUÄF‚X‡‡*”j”’äP­í*¨·Ïœ›å²Šî•näæ#*ü{†sŽ&ÁT¯–ä͹c °ò„b§*‘œ¢Õ8¦›¼¤¢—%¤ö½›G£Z¥:Ÿg^Öó>7øWà­#ÁðOŸ‹ú‡‡?kÏ„Öþ$K©øSö‚ñmÅŠ-õ‹yµ‹K¬´¦;{‹¤—uŒ@·îÕ %ŸÜs|}|‰9T+åX©biáÔ*à)*˜iS”iJÑÃ(óT…7V—¼ÜÛ²•Ï.•(ÃQ©Å'+ó»;ÿ‹£}>ã®ý·>#~ÐÚ'ìsñ3àÿìiûj—Üì?…$Ó|9£\iZ šµÉ­-œÙ‚[`ñùL®Œþl¨v ¯€²ÎÄqÆ]™q6yIÁÔ«ÍR¼jÖ^ÍPu#ï©Ùó&š\‘k™6k‹u…:õ½–ŠÝïm¿àžç®þÇ9øßö¶—À_õ߈V~$ø¥¨|-¹–ÃHñ%” þ˼´´–(æE)¢Æ ÞNÎŽ]·~ÍŸxÙÃ0ÅTʰ¹ZÄå¨NŽ8••hÎJ_¾§R¤e(üQN ÍòÓ‚Œ¢¢­åÒÊ«iVSå©{¾]òiY?[u<Ûþ ýñËáÿíMâí"Ãà×Çß ›ÏüJдo|*Ö~lñ=ü–¾ ‹ÎÔ,îfÛqýàÉ=»˜¥ùóœ}G‚œ?™pŽ ¬ó< N\FµJx˜b/†‚ž\´ªB7§í¥Ò3”jGš>í¬g™U†"K’kF“V×}ÓÞÞšÁÿÝýŒj¯Úª…‰û1ßøŸTßâe³ñ?…NºÖþз۠¿¿Œ7%ÌÄ%*ûRGÚ»°GÅýxëƒø=fo=8~íÊ^E,G4¿u*tžöpœ¤âœo$®í¡¾s„ÄâT÷Õ_Ýïvu_°ûP~ØÚÿ„n/Ž¿¼ ®ø^êÞök/‡|Z—†/ìû,:ã›–[{ˆ°&òãóö‰¨7ˆÕxK‚pø®ʰu©b"àž!c9é×…¯Ï*4Ò¦HKàæ—³¿-ÛM½p^ß㉜“O§-šò»×Fv¶>­û|zøgãφÿðR‡ºGß Ûk‡ÃñÇÄ-RÊÄk $"ä\éw.Á£ÃC»a#y€îVPAñx"ðökÆðN"x¼C‡·©F„jOÙÙòrÖ‚VzJ×[s+4ìi‹XLM9CU{&ì¯Öéô9/ØwàgíSû8¯ÄMGáÿí?¨|qøA⯠{á_Ž|QãyufÞý-–8,á¶–ÙÀy¼èÌjÌÈ¢,e«Øãþ á(ú…# §É785x¶îïÛÐø«ö%ý¿¾ Á>5ø§öðwÇÏ üSð—„¾ËñáŸöŠÝx_Ä#ÔnWP¼Ö|¨ Ûéwoº/ÞLðB!“lh0øýç|8ϼJ§…Ãäµp5°êóañ<®8šXz0tiÐæŸ-Jô£i{°JŽqæ”Õü¼&6† suÔÒÕ}–Þ·¶Éùü±> þØ¿²'ü‡àäÿµUŸì³¨ø³Æ¿5ËGÃ_ nu»Yõ„º’Ø,Sˆ!˜ÂVqæ¤^~W}³8¢°üG=àŽ5ðw<Ë2 .i¦!Bq¤â§yGšPS¼=×?ggË5£hô¨c0™­ms8=_ë×±OöÎý‘üãÁA?l2ðìt^µøO§xFž-À2ÜF÷–ÒKlÒ‹Ãupë®cýÌA‘C;¶Ü Æ™Ž[–>áœ5®o,T«N.†.1‹Tä£5MR‚s‚S÷çiI6£ñXxNX¯&¾[o»{³ô zWó™ì‹@P@P@P@P@P@P@þ9ð“øÛÃòh â_G2Ký»C»\.Ö ´9VÀ8ÁäüÖýŸ4gðùø‹¢¾³¨›o^1C{ª\‰®&ÿ‰¼çtŽÜÜã8@ƒ@ÿÕûð€x4àŸ?àž_~/ø×ľ%Ô£ƒöm8éd×Éùw]BO…Ÿ²Õ‡Â¯Ûx®Óã¿Äýmm-¤‚='ľ2{»¬¡A0ùj P>_îö­yÞ·Öäò¤’] w^øåâø(7Á3öwø‘£øSÄ áo\^jšæ„ueÓ]#íV«tÙ,™‹l¼ìØÜâ½¾Äðþ0Lç:ô]9¥OÙµQÛ’mÙÞ1÷¯/u®†u£ZTíIÙÝt¾Nïþ ðßö¦ý§þ0i>&ÿ‚Wx«ÀÖ’hž(†ÇãGŽ<%ãØ,5‹«‹'*tó lÒˆa”¸ŠV IÀ\ß¹ømšð‡ äuhqõ*ÒU)9`èÕ¡)ÒQª¯õŠ\Í(¹Ê6r‚jIjÝ´ò1°Äbª'ƒkGi4õºÑÅÛ·žÏ¡³ûxÁ>kCÀÿ¾9~Ì¿ðQ¿V¾)ÅÞ·áïXêÖ¯§6Ö22Ò…eRè PæL+²Ü7Ãá߉\O—åYïे÷iT¯(ÍT×Ýöµ$æâìýê–ÜSQ³³WŒÀ⽜çJ´¹·K§¥¿Àg]#ö¦øeÿ=Õ?ਸ਼Œà¯Â\jZ:h¿¾!Á¦ê+ VèVZÈæ&Hå·¹¸#€²¼ ›?£q=~ͼ'¥À|7KûG2Ã*u9ð´%RÜÿyQTK™9Fp§7(§x¨6ô8èÆ½<ÇëuŸ$Õ¤íè­¶ûZþÉÏû~Ëß¾9ÅðÓâþŸ ^x«âö›eâmX‚ &ÂÓÄwv1µ½†žLq-ËÜFDÛPÈÎîÇ9$Wãœeÿ‹r•ã°’«Z’§89Uœ°ôê>z•u“‚¦ïµ¥Ñ&zxªaêÔQ•¯%u²»Z%Þûžgû`þÓ^/ýŠþ<þÐþ пi©¼e2|oZüñ^u5¾”cž-=n-¯Àû<6¶MÖX2É+¼„ìSÁ\)‚ã¾ÈhÕË–—ð£Åz&©€ZT¹š9¬í'XÞÖ)#”Z«îÊcLXÖ9¯‹‘Ë2*X|¹RËñ!7…ö°¯‹»„mVJN:8û_yÂWå÷Übx¾o•dòY“«)5jw‹jûY;YtMÚû+¶“ðŒ²¯ü ãçÀ¯|DÖÿgOü4ønº ìëð¹â/¨êâñ‚Oý*G(nX^O&7HŠ]˜A?“`óϸ³C‹³„Ã;ª•jËš|±³ýåIFnM((ÑæRPÒ:E»|ö')Îøƒ 7Š‹¡EÆÞÊ-I¹'£jÖßÞvÝ[TÏ\ÿ‚tþÏüûHx×áßìãûXüAðÅ? hM{ñà˜gÔø…ওÂ>øy:øwÅ'½·ž#w¥Øi¿h\ª@~Ñ%ÂÌ»@Ú:²z\!ŒÄa3þ…l·„¬•Z•Ó¯†¡ Æ^εZÜŽ0r—îáMÓ—3w½ÒO¾§Ö"¥KÔã%¢ZI»ê’¾½Ï˜ÿà›_±Çǯˆ²µî—û ¦¯ði|gû@ë0|Qñ“øÂxõïi:=áK >RdŠâc³ÛÊû‡Îˆïç ãõ¸ã‡rÞ/…N*äÌ>¯¢ðÔ}”] ÕqN­IOÝ” ¥Ô‚·ÂÜcÈy¹~ VåÃÞ ÉÝÝÝ$ôVï«¿ãsèٿľ1øK£ê_²¯ìK†añN«ûB^OãxwÇÆë¥X Æ©¯$ÒÓ.ïÞÒæ!>HîÈ ïù§apYÍz|AÅ£ÃÃFJ?SçŸØ£…q-jxuRç—½*M'öYßAÊ’tpö»ž­>ky˳vÛ¹íàŽ?±~±áÿˆÿð„hšß„5Š^1Ó|SãkKÖ纚òöÃT}V2±Þ4±B¦âIK,h ‰ÀÇÃe¾7qÍF_õ©Ã *”(ÂPŒTaVŠ îé¨JMAE')=UÝõ:å–aŸ*³›M¾í;õ8OÛ#âJÿÁV?bÍ/Á¿ðOÚÛ@Ñ®<§ym¡ë¶³X_øÃLÓ¦x/4øâŸËžÞ¹AóÙnÊÊÊüûü•ÿÄ㺘ž1ÊçQa]8¹ÁÆpÃÔ­:u£Í ÉSntट2M4âa‹’Ìð|¸z‹Þ¿Í.žÿÈãkŒ|)à/†ÿ°WìûxTøŠšÆ‡®üeø3kàuá]?J¾3Ë,tð¥´q¶¢‰›…Ý0ÃÍå±R·ÁÙ&Q‹Ìs-âLÚ´0\•©a1n³Ž&uirF)SR•FÕÿví¥>tšfxš“8a¨ÓNZ9FÞퟞÛÿ™£ã7ì»â_¿²ÏüWâèô#ñrÞxZôÍ«Y}¢0Òê‚jVgÝ9f± ve…|µVeçÀeË‹p¹Öâ CžžÕW-)òÊÊ•7K•_ëÕ•k5M'7ÌÚL©7†t¨àÚ÷œ•·[jïäúuØÚøAðöÿ‚\þÂu‹¶‡„D+}wâ#ÆVŸ î$‹@¹º¹i¯î'´I¥{µy$R±¦6sŽ0wÄ\/â߈yE<»(«~XЉŠuc(ÒŒj8ÅSqI§'~m/®úR¡ˆÀaj9Ô]ÓåÚï]:þ‡9¨|,ý”¿àÿ¼UûN|ø 4x§á]Ö°>5|AñäÚgƒ5-_R½Ži4¹úé’ÊæyÑnB,*ª¸U=R½JY¿ø™“ár,Ïíp”11§õ:#S Ti¸ªÉR¦¥RàÝ6ÜÛoV¶d{,. ¬ªÂ6“ù›´[}5Ùõ,øçàOí3㯌ÿümñ§OÖõoê~ þÍ×ÿh‚Zô¶Ù®ßPk9ì75 Òæ†8#’èîy0€‚1Ëø‡…2ü‹<Âår„(B·<0Êj~ÒÐTUHU²«õˆIÊQ¥¤b¯ÌäÓºDêÒu7kYÅí­ìÖÖµµëä}?í½àïŒókÿ~øÿGФ×4¸í>|[Ô¯,ï¼;âfx¦Äw—6u m^ó \‘€à?7ãr(ÐÆæ´'UR“–+ 8b(RŒ£ïV¼?uªKÙÍÝj¼“îúäk7nßË-o˽º£Äø Æ·Ú%¦«ÞÕtŸ-æ’[FŽ;‡YfCæ¦2°•.Mzu83‡óN*£ÄœI—Ô¥Š­‚ÆfèÆs¤Ö"…k¨¨ÔR”ŒZåw³•ÞŠÆY« .…§(Á;'£O·ŸSÞàžß þþÅðN[Ÿ‚ßðP„.•o­üH›á´Ò·Ão øºÕ®Í–—5ÔQÆÏ:Î ¸› [1üïĬÓ7ãÏãšp~*stðë—Ö9¾¯%R¼a'$¢éìéÂÚ§e­—f,& Ãß/ÃnnŠúk~çÓQü øÿèý–|W­~Ê ¼á¹ô ¼ÂïÄÚ¸°‚ôÛùÔõY³+F†I šfr5ùCâ ñ?‹ðÔ¸ƒZ²«Q+Sƒœ£ÏdýÚ<Ï•{ŒyšGr¡C‡“¡¬½>öhü]øã?ÚÏá§€5¸?i?|5¾³[]cQ“ágˆ!û>¦Ò@ŒÖ¯4‘¸¸µÜIVK 6Fk›%â æ¸êRË©c#.jqúÍ9sA);MEIrT¶éÞÛRŒñ4àùÜ^þëü<Ñî*r â¾lu‹@P@P@P@P@P@P@éøÐæ_ÁÿùüOÿ²ßãý;M@¥PÿÖûò€ ( Ÿ¿joÙ—Æßµÿí á€þ/ÞøVÖ~øïÊñƒ(ó !ZÂã*OÙ&.­.¯˜#Úz‘÷Þq^_Á\i…Íñ¸E‰§NJð•ôwMT†©{HY¨s'zW]ù1Øyb°²¥r߯éèÏ@øiã/xSþ Ðÿ>¯€þ |_ñ—‹SJøq?ÁoZë0x¿ÄÖÚ]½àmFöÖ&Þ[± IÚs“—JýÇ5Áa±ž',×íó·IÔÄ,e)Òx|<ëN¨Óœùå\פ ­Ï§*JG— I`=œ- ·eÊÓ»²zµ¦½n`þÔŸÿࡲ ß‚?à«¶J|+ÿ„‹Á~éÿtÝZky5;JæÚ›ÈïPH¯Ÿ'í¾BFþL*êYŠo¯G„rß xÒÏøkë>ÇQbeŠ”#%Ñ„å n›åjÜÞÇÉsͧd¥Êeˆ­ŒÂ(ã1©¥n[îßg×½­±¥ÿšçö½ýŒíñçö’øuá ü9øµ£xº_ xÇÀ×:¥Ï…,î4Ão‡¼A¦Z;È÷­6£™ä|Täòxh¡Á|sý‹”åøŒE|^¶T£Z4ã^p«Îñ8Jõb©(Ñ—$“~òºwÑ^7ý« íjM(ÆIÙ¦íýÙ%­îõ=?ötø%ðÖÓöøû8ü\·°øñ“]ÐôOŒ~$×<gÿ΋®$2iv3é35Ì-ƒpÞ7ªƒ‰2ÄWÊq6}šO„òüï.rÂå”§[/TáVX©EÉW«ÓIS’—5´÷[·»dŽŠ4 «Îœýé´§v•“Ù[©Ÿñsö|ø ð×ÇÙ?µ¶ð¯\ñÆo]Z~Òþ>¹øŽÚ%õ¥„Vñ˜•a+™ÖÖæKEI#£É·V>c ŽŒ›‰85À{Nž&¾¬e—PXm NR|ÞÞ¬W#©J5Œª)i6—,Y5(áéO÷Ü·š÷ÝìíÒ˳ò<ëá§Äø%…¾>h~,øçñ+Æ? Ô¾¿~xëâ:F•áè5%‚ÓM³Ó[lÏ}o*3Å+ZµÑÿ¾l]øó6ñ †8ލ¨et(b–OuV¦"tù§9TŠ’pª¤£*P«ìÜ”R¥ªo’Xœ£ /kˆÒ2”¶Q]ݵgÒûž/ãOÛwö¶ý¾ÿà¤Ú—¿Øö®ñþá?j+o XÆ–zU¥µ ŽçPxmâ2Em$ˆ´® µÜa¶3…`óœÿŠü<¯ “&ÂÒÃá©ÖÇÕoÚÔu\œ!IIÆ>Þ¨Ósš¦£9A\øÉç™ßgr¡”Öp£§¿dì­«³¾ŽÚ-½®Ö>•øû ü8ÿ‚G|ñgíqûTø Œ>$Ðuë+VðÆ%ÍΦƒ ?hE¿—lC¼ÓÍrvÛ¯ÌvÄ)p‡|7ĹÆ]“åöx©S’©W;ª•×<íIEIÁIrÒ¥N+šrQærœ›>—)áÌP–'½­Uö­wåÌÛInÝÿ’ú§öËÒ¿h/Ž_|/á/ØÿÆSé°x¿ÄúgöïÄ? ø†Ú+½ BÞ³Í}eæ+ÇvΨ! È)9a {«p×çxœGQSt)ÔäÃÔ§'µìãu9\eME·;ô”R{ŸQŠU«RŠ¢÷kTö]×s°Ô~øÎïâG‰|umûCx²ÒÏÄ ] ËÃöþGÙ4‹±»þ&°e }¨î,J|£Šñ©qžW‡ÂKJR¥[Úº›š¤tý̵·³Ó¥ž¯SGFN¤¥ÎõV·o?Sˆý—#ý—¾5|.ð‡ÆÛüNÕ~Mªh6?!Ð~i}”°£êðYNò¸‡ìqÇ,ióI Îß.1ûö'áþ:ÀeY&3,­Gû>ŒéÃZ´hWÆU«QI¬<ªB1µ9{IN2zFQŒußÅz¸9Ô«‰©´ÛŠrQIuµÞº[NŒã¾*j²÷ÄÿÛ7À2| ðŽ‘­é>Ÿhš/„íî¼-cñ ⟪Mw¦Ý^¼q¤‘0’=FP×@.TÜv ÷2Švœ ·åÓ[6{¸jÎPP©4çÕ/òòÙœŸí3¬~ÆŸðLÙâ/ÚrÏöZÒ Ó~ˆô­ÃÀ~°·»ÓâÕµ¢–+@ípÇ-ÄË$ 2†9c’{\+GŽ|YâW‘O2“ž.õ'*õ*Jt)JQ•KsÊN0‹Œ›[+"1Âåô=·&‘ì—WÐè¼ñ‹âí…ðKáWíûøçAÐ4jZv«âËOéK{tÚABn´ÁöyvÛ_£‘1g:0*ØÅy˜Ü,à¬û3É¸ŽŒêÔ¥”é:R䵿¹[ßçE¯y$¢çšjåB¬±T¡RƒVvnúéÛ×ò(ÓoaM0}ËÜ\YÄÈ×PNe 8 ¬ŒŒ7}¶S™åYN6º­ša*æù¼©Æ¥n^Z\5jruÿz¹i¬ÓTêC‘ªz8ÉI;sT…J‘V§%NìºÊKm7·TzO‹¾ ~۶džôÙþ %û ø/Åÿ /n,ï|Qñ ß.t[™&KcqË¥" ¢òæqDfä¡|c|¾ ?à>ÅWâ. ÍkaññS:0𭜹]vÜ4:’†‰¨ïvtJ–/KM8õiÛðü¿ã¯í¯ñoöd<à¿ØëY?¾|}^xšùà²×ob³madÛ\ÜÇ壤Òç|RG†M²Fíâð÷ä¼Yý—ŠÅfÐúîgŒTÝiJt¡)Úu*+Ç’\Í:q·,âï^2Šº¸º´%R¦ù!ÝìßeßÍŸ*ü}ý”¿kÝgþ Me{/ÿ†>, ©ø;Ä?¼ðWádºLþ–ëU†ãP‘—`’ÞâA,‘Zfo”“_¯pçðUg_BñÅÑÅÖÆbUUYBŒ¡I7%¸Î ’3»º‚Ž©#ϯ‡ÅO,ºŠ—Â⢭g{¿øsîOã.…ñGÁž*ýŸ?loƒz¯Ãý:ëᦜÞ<ñ%î¦-¼8Óê±µ½Æ™e«†ŒË<.Y ®ÆãeÁa_ÏÔrLFSÃg5‹Ž*qÄTT)Æ<Ø‹Pjp«SirÂjÒQ|ÉÚIÝ&z S¯UewÓ]Ògœ|EýŽ>=ÛþÏÿ²—Ã|>ø{Ã3ÂÚ·Æ [Ljµ= [y4Hc RyÑ]\<‘ïÀ1¾ç#éòÎ7áß©Ë8â E|^1â*WŽ?ºÃ»qšÄI­-9.IÓ§Ë—U8Ú)óUÂVoØÑŠŒ9mͼ­µ’òÞïM´g|Ö<-ÿõÿ‚&üNø¿û!ëžÖõï‡ò_ÙÃâ½/áûé˪O¦^‹5þÑŠT‰îîÑ‘ÉqÀvË!+Šûœö†/įr컈á^,W$)WU9j~ÑûEÍS§'iFÅi-nsÒqÁes6ºÚ׳ëÝùž«áï~ßìeà¿þØVÞ/³ñõ÷Æ ,:|Ò-nMYÐ@nãgGbU³tá·Æƒ àf¾?ðê—ã(pÛ¥,p•ß§8Ú¬bù½›J7¬šµ×,Ÿ›:c ~Épxÿድ™¼3§øÛš¦¿¦$Ú5[Ì9@mÑ[Ì8Úâ2Êç°ü)‡Ê8v–{ƒÍ1¡ZTjÆt*ZSJŒ°“ÿ—ÍÇß“\¼«Xó$ÚÕâ]ZΓ‡4µÕšºÝK·cæÛ/áWÇOÚÇö–øKñ[ÁúÇŠ¾|*ø)ñ2 j?ð“^Zè-Ñ~îÛ^Ò–i|›«[„‘l!.ë3À5úÇg=ÁÜ+šeø˜RÌó Ç ñöjuî¥ïO_–<ð©M§^¦ª)Å>vy¸ºu±8Šs‹tá r»éèÕÚM=ßµµ?P•cÚ¿”¢€ ( € ( € ( € ( € ( € ( €Óñ Ì¿ƒÿòøŸÿe¿Æ?úvš€;J( ÿ×ûò€ ( ÃMø¡«~ÞžÓ~ ßèVÞ'¸ø/ñ/OâKi&±Žý¤Ð„-p‘üïù·ªòAâ½\’®SG4¡<Î3tâê*m)¸/‹‘½öåoEÔΪ¨éµ ^Ú_kŸcþÍÿeÿÙ£á߆š?¿ ê—Zˆ‡ZÓ< mkcgyâT´E¹XmÕ· ±Äg2ˆÕCt¯¥â¬Ï‹x«6ž7|YðçŽbÖŸBÿ„*çCƒÅ_j7ÖÖ–V«3½Õ±kG ò°@&9_éêü)žx3[1âŽöX캭OŸÛB´¨r{)Ô©7©NÕ£åue8«Ùø+G5PÃc„Ó½­köHôÿØ·Äðšü8ø‹ûhüSø¹à?üøÓâïMñoÃ~"¹o¶ÛIcº]¿öeð(LM<›“Ì~ìrHù>;Ã}C4Ëøc…¯ˆÌòêXE…©M.I*Ž5çí©{Í5:Š´¹ô:°¯ÚS•iÉ*sræO~Ú?Äú[ö0ð/ÂÙÑÔÆJ5!J¢^ν:ÉBpRçV)«B’S“ŒìŽ\FeJÝ JnMÚÑ[õMywó>¼ñí­û;x[ãž«ûø¯Ãwðj–ß -üNöú„v©mªZ\Ë-¢iÑ+J$šñÚ&_+fp‰8‹ax‰±|=KŠpõ"é¼L¨Þ<îP”j:’´\cJ*Iós][UmONXº­ì%¿-úkÒÞ§€|:ý«bÙ+Á ¾5þÍ_°î•à_†?%Ôã‰t¿ }’_.) G­C§Á:$©q$¶íÒ!…ä~¤8£f|ǼgÌ2¼ó9–'öo NUyÖ+ÛÉ]á¥VtÛŒ •E(F\ñKû§$q8l2„éÒ´%~go†ÝìŸ^ïCÌ¿à™?jÏÚÆß?l |Ð>1æ|Qÿ„_á'Œonl4ÍJ×ók_n´Šå•dV–`¼H^0Ò<ò…wcµ>·Å^áÀe7_<½Ï íñT’©Rœ±¡e9A7V­_kJSRj1Œ[ŠZË—.ÄVÄÊ¥xEMsZ/E¥õײÞÞbÁd?bØSá”Þ$ý­|âk/üK:\º6™¡xþÛJ»½ñ>±{³Öu'†D¸š8ç™e™\<{˜£ñçˆ9¬pü;ЦñeRS¯UŒpØzoÚP¢¥B2”"ãM§Z7Šm•šapqn²v•­dí«z7±éÿ¿dߌ´ÏÀû?Ø_⎹©øóâ‡Â¹toÉñ3âÏ…Ùüâ{«›™{ŠØÆº‚C™’È›3„ï%“q–G¹üø¯ápßmAa°µRÆQŒ ”j)O™Ñs¥Î¤ù½ø¥Ë£è©†«^Š¡?zq³æ’÷[íçØ_Ø[ãíkðëÄ>,ý…¼Yÿþ·ø/ªÜÛjZÂ{¯øL]øA…­šX×P¿¶‘iä»ó¤i²FíŠxŸà¥Äß²oŒü¦øŽg‚{MWƺt×úSYçt¤ÇnÊÒ•*ØÎJüß…eØ\ú+ˆhÖÌœhÊ0«Ï´ušiZ[Ý\íÄ{iRýËWóØùÃö‚ý­?kïÿÁ9ü+ûZÁ4üKàO‰˜—ÅsYx^îæ b+pmïŸL³3C.c¸ŽV–i FQI6«~ŸÃ|ÁX±<;Çëá!'jIÕ„eMÎÒ¤«Tåœ}è8§;()5)8ÆípWÄâå€l5¤úèõèì·ÜùÓàÆ§ÿõøÁñ¿á]×íuð/âV¿âŸŽžÓumGZñ __ü8½ñ>£h'›HŽÒ[™ Šî)„»mŒgìæ1—3_¦ç´¼JÉ2 Î<9ÃÒÃåµ*SŒ)û8fÃQŸ$k:‘§ Êœ£ËzœËÚ§¤Zv8hËVtåZ2½K=náÌÕíÛüOñýï‰à©´§Ã}Ká7Áß_uo~?°ÖµWâo‡ï´mÄš,7àÜØZ&)y4onèe"s÷ÙGÊeÐÂøGÂÙ„3 ^0§™Ð8GRj´kJŸ¹R§4y©Æ*sRQ|ÎivMôTæÌ+ÁÁJ ;µdÕö]ÎãÿÂ/ÙÏÇß³üÞø7ûCøÃàÞ½ñJ[?‡ºoŒ-µ³.§ñMõ›µÙj(ûf•(qµ£Fѹ;ÄDaô9q>]Ä‹™`+K3¥†RÄJ“ÃÚj¡gR–¿»ÄG÷rUT”¢½Þ^g$e^•)Ñå„×#z^úÎý|·ÒÇÓ^3øåñóÇ~'ü ý•h…K¬|=øT–sø>}øêšWŠ]#š+ƒ‚[³2ª¤J̲Ï;K,ŒX0bà…9 +ã²ÿ¸â•|j£JZ¸‰Ô©9Ô£µâåj­{H¨E$šk•¦ômžüòü+ŒnÚI%£²û¶ÔúAøð[Â^=ñ7Å_ ü/Ñ,¼EãX­!ñn¯‚,ú²[Gå[¬íÿ-qüŠÝ^ùÖ+ˆóÜf[†ÀWÄÎTpîN”Ÿ-77Í7öyž®Û½NÕF”dä–¯;í¯ÄÿþÓ?> ü?ý™>;ÛÙk>ºÔ<)¯xzÙ.%ðƵ[JùR¯–Ó@̱\€èË)̸S4Àc3Ü•*ªx£qU¨ÉÝ>h¾e¤×2³¶¨i D%RÕ]]tgÀ?°ÇÅ/~ܾ'Á3?à¡süLñÄ OUÕtíUñ€lgÑ|=¬k%¤fúÇm¤·#lˆ‡‘#Ë £¼AÊpe¼uÁ«CÒœ!N½HÖÄFmªÙU½XÁÞTdÖŽ öM´xxIÏBx\UÜÓºVÍi~¾§Ôžÿ‚b~Íþý>|3øßñ'Ä~&o„^1Óü_eãø¢»ºÖmŒs\M#1ò<ÉÛvrŠ6¨'h¯É1>,qF?‰ó,vU‡§Gëôg‡tiÓN1¥4“Œ"’\öZÍEIêú³ÑþÏÃÆŒ#Uß‘©]¾«©ÎÁEÿàŸß³/Ç]_ÅŸ´åÇÁ¿‰_t߇ö¶žðµÄÑgX­¯¾Ñͬìqa:»Ë¶ôŒª³ª‘¸×©áˆüWÃÔ0ÙÆ,]:ò•JŽƒ­Ο$ã8­jÁ¥Ѿ­&Ö„ãpt+JUyy¦’²½ºôíêOãÏø'?É_ðMýWö7ý—þ&^x3I×Þ[¿ÞéW–úÕÞµq,eîí®îdoßK3”Y'ÜìSžsYeÞ'æÙWŠ4¸—>ìEJV8ÉJŒ)Æ.ÔçN {±‚MÆqÕ ©…L¡F\·ÝîüÎ7þû~ﱇÀøWöŽøi±®ê°êsü3µº¶¸>žEo2i¥ˆ±3\|¹]ÍH#*rÎ+ÝúEñ× ñ×áñ-éÒ‹‚Ä58ûx§îÆ1•½ÚzÙÙJò’’²‰Ëàq84¡ZwmÞÝ¿áÏIøñ;þ mðÇö¸ñÇ‹¥ðǃõŸÚEð¼—Þ#Ò4 nüUi•»¬ÇŒÜJöÿfXâ{E|®Y”ø¹›pfªU§“Tª£Ns›Ž2u&œ›½¡>w9ZÑwlí©SO'dê%ª¶¯OÇKXðÿÚÃöúý¦¿hohž"ý˜~þÒ < jsÂwã­7ám´úé¹h„vº|ön.aw•${¨£a—·.Ñýÿøu¼3Š­G>ÅeøÜ]XÇØP–&Q£ÊçVxªV§ EEÆ4§$å~mÔT¸ñ8ÌMdÎ1[¾U%g¯Ïú^ýð?Tý®¿jÿØ3KÑþ(üs°øUñ“ÄÚU¾±.£àߪ^è6RÝ ­Òm3QiZ ÚØ,3£—T‘äíµZ¿9Ïép_x‡V¦,vYFR¦£V¥áVj3q­EEJ ¥çNQQr‚‹”UÚ;hˉÂ%)rMë¢Ùz?ÄùÇá÷ÀOÛwöŒÿ‚Ò|Yø½¨x_øuà?éú'†¬µë [Kkãm:ÚxïN^†fÓÜ︷FFÖO›ôüψ¸ †< ÊòØS†/‰•jά԰Õ'MU^ÎÉr¨Ã–M]ÛwONÐÆWͧRî1ŠKeïjµùìxÇÛ[Yÿ‚ÈþÖÚ/ì£ðÃáðgÄO„>4Ôµ_‡ÚÔ¾0ŸUÑ.u +QFµa´mki ³B.Áw‰¦XrZ¿FÈ8‡ü[ˆ1Ø¿¬`±ôiÓ¯J4«*uékõj²©%:‘öŽô´ŒÔ]I[Ù$yõ±sÍ1Ñ¡|® ´ïuuÑ«h­×åÔû?^øÝñ#öœÓîÿàÿ|#ðÓPøå£ZiwŸ´x^üxSÄ:ÓFu9´W|Ëp±Ç,Q†}¡g!_¡Çá˜lƒ+áJ‘ã,\D2ªŽ¤pó¥VŸÖ©WŒ_±Ž%+FRŒ¤Ò»tîãÒþ¿¶©ˆÿfš^Ñ[šéò´÷å}K¿´æµûþÊ_ï¼%mû{\üñïÄVðÔÖzeþ ú„KÓå±ÚiöfD¸HÚhÀ$ø,¹®~¡ÆÜc”C,‘f8L'Ö”b©ËÚU;Z±´æé¶§+¤½Ý+ðØjŽ>Ó’R·ž‹MKìqŸðT¿~Ü¿°ÏìƒâŠÿi…Õ!¾øÁku)Ô4{K½D¾¸Š mM1Ä`d[—EyçRþD’ïU5îøE…ðÿÄ5¡€Í2îG$¢¹g9­jQ”§^µä¦›¦›Œ)¾_h¢­ÊÚ1Ì¥Áá%:S¿½édú/ó<óöTý˜üsûZ|Sñ¿ì§ûV~Ä^ ø ðÃÂÐõφ¾ð拇u—¼»k»Í;U°EUšdaæ¢;YäS´Èƾ—Œ8³Á™Fˆ89§šcñ+RÄV©åZŠ…5Nj[|°kÜrŠRq‹WåF8j1U%Jµ/gf’{>餾gØÿ´§í1ªxOâçÂï€þ:ü+Óü[¯øÎ/øH|?ã«éÞêûÃöÈÆþ;np·à˜‚ Н.pÄ_ˆp· ÒÆä¹–o›`±3ÃÒ¢ýJ1ŠŒkÍþéÕsÿ—?7"rÛTÏR¾#’¤)BQæogÕ-ín£~ i_±÷ì{®~È|G%ÿ‰4ûMOâE׃.ä7Ú¡·º¼y&»…Få7.Qœ†p½ÅV}WxÎ#ÆÓå¡7O«/r—4 ”a&žA^WÝ&Â’Ãa¯F]emÙùÓûc|ý¢>.ÁE¾~Ú_†·¥ÇñËÃéßÓÇ&ûÃ3xR±d¾ŽË[pºÏjí¡lä”=Ü·Ž»‚ÚÄkúo‚3îÉ|1ÌøcÉ7–ÕsÄ{gˆXªuoIÔÃ{I'‘R‹uc0¦›«4xªxª¹…:ñÑMhãÊÖ¶•“OÉ_]{\úÓ]øÛuûhþËãàœ·úÅÏ‹~ ñ¦mñÃ<{sáû}"oí ¡…ʼnŒ¤3o·oša§¿Ãäà^,þÔQž.ÄѬð•q”!^U³Œ¢¹ ùyäåY­)ó)kfzίְüŽÒšk™Eµm|ÿ¦yÜ¿³Â/€^ñ÷ì¡ðÃöÊÒ­< àÏŒ?ð±¾8hï©Þi—ÿ¼1-ºÞÙiZcZïX`nŒPí ’ô, úuŹ×â°„WóFa€ÆeXê¸,]7 ´¥(N/GEµ(µÝ4Ó=¸N5"¥tÍZã(( € ( € ( € ( € ( € ( € OÆ€?2þÿÈwâý–ÿÿéÚjí( €?ÿÑûò€ ( ý¦þ~Òÿ?i¯|1ý“uMËÅ>"ømã]/RºÖõ‹«‹1ÒëÙ\[¤† @€A+#¢rÊÊûß 3^É8ºŽ?ˆc9P¥yÅBëE¯fªBn*Tu—´Š’”¬’iêrc©â*áÜhÛ™é­ÖlÖÏnþ‡ûE~Å?°ÏÆ¿ø'eÏÆ¿Ùóà­ÇƒÃãkk»}.]?RHuk›û]ÂÞmGû=šh@‘‘‘mªõ&Å^+à.<)Ì¡<*„ªÒÆÎ”©¹B¥NŠ¥Q¯i «V„ï$äÒ»oæ±´°+,–"Î>ÎüÊ÷·/ÄÚ[»+é­†üXý¨ç>2ñÇïø#wÂ/‰~ÒtOøBñ^¹áï[\ض“oÁeg˜ösÌ’G4ÊÞdeÝ“,áP†¯å'ñ*<)†•ÞN¶"ž/)Ñ÷Ûæ­ËVW¦Üœ9•9E{Ñ\µ,×Ïb³Ü^fäø~J<ªS´yR¶Ü²MßnGÑ4Ï@ø}ûxGörÿ‚¨ü5ø¢þÒ>/øâ¿‡ž3Õû…’o] £†ÃJ¬!V|óŠÛ¦{tkoó:‰ßðUï…³pÕ´OÚëÀš€|FÞ2}+Àþ]FßQÔ¼Y§5Â[[jöÑBß»‚iX®Ç!ãÚwO•x=œñR¥W‡kÇGت•ªòÊ:\çFr’ÖpнãxÊþëܺ™•,=ÕeÊïd·mwGÏ_þÿÁaÿo«Wð•·ìËáË=WHk/‡3ëË}â{…¹Žkû»½SMI ÀXŒEZFVŽd)‡oÒr,ÿÁ/jP§ˆ“Î+Ê5oˆP—%¸¸Ò…:¹c&Þ³çME5*ræ÷Wz¦62åýÒÓKêûê¶ùÁ:OÙâv‹áÏÚ×ö°ý”ü'ñúÏÅž<øªëZ/”hðÂRöæXÖÞ+è$·.Ö²deƒ<¾4Êkâ¸3†8ƒ‡Œ°ø\=*s¡RjZëÛÊW§·RTjFvU#gñhš4ÃÔN½z1•¥&í%ªZ}×]™öññìíãÏø'uÞñãâ-ïí «|×ôñç‡ü!«&’Þ2ñO ;ËhVDt™å›5Ê®ÞUHçðó Äùw‰‘«”áÖUO2§_ØT«UaèIIóÓœœdœyfÖîú6‡Œ `­Qó¸5t®û?òEŸŸðLÏÙsáïÁ›ÏxÁ>ñçÄ›P—Ún™/ÅÙ,õÿXË0qá™o§q'³ì® •ˆu˜åø­ÅÙ–y .µ .WŒ¥õU:§Ûëq¥þóujÓ—Hè:˜ è·å>ÜÚ¿îßù|¿SÌ~xŸàïìiûrx³áÁÏø(—ðëáç„´{Ÿø¯à2ü?²OèŠÖÖ³YO­iVáo'¶ºt¤r-_Wa3¾9ðÿ ™fY±xÚóŽ–;ÛÔxж©9ÆqÃYEÁÒŒéFRûI¾k«S,.2TáUF)s8Y[d·¿v ÿf_ÙWÅšOí¤ÁB~(üHðe‡üSð…­>'x[á¼3Ä×¢Hž×XŽIæJ‘ZD°Æ²DH¶rÁ¿6â¾/ÁÖáz¼€ÃÖž†+› Wãí(ÂÒS ÔcÊœêIÎn3WqW‹²·m <•uˆ›\Î:¥{>Ïîò>mø³ûM~É¿ðZ&? |>·ðoX¾‹¨üøÓ®hWVZˆï÷Ho­tÅSní"A @Ò%ÃíYÃ1ƒúŽMœeàWû~-C0§ÉZÌ' Ó£ =”붪.YN\ê.œnãfÝîpU­‡Í}ÈûNYuo­¶ôÜè¿à>$ÿ‚—übý–¼=©~Ò:Š5? |E²·ø}…¢_M¢ë^Òí`¸³¹ñEÍÝ÷úl·sI ¡™ÎåJ™ Iæø…ð«$âêðÉ'NŒ#–/žqj8š•% ÂB/ÜÆ”zÙGzRMENO/–eW ]_›Ý²ÑÅ-9µ»»õóò=çá÷ìŬ~Ç´÷Ä/ÚóÅ^(“Røy¢þÏú&K¯Ïýö™î'º.ƒÎw‰”ù›Ë;ƒ85ùÞeÅt8ã„ð9‡§ÉŒ©Ž­U¨ÅB‚úÏ$aY¾T¤¾T¢š³{ñ ð•¥^OÝPK»Ó¹âÚí û>ÁPm[Ä—ÓÑîïu„:jW1FæH‹e–ÁòÚJëÇpÿñ®7„˲ŒN ^O*þß>ýŠÿb3S𭼆;/|CÔþ}¦Ñn&A:…Ô.ìîmÍ´vìN# ÿi`…‡ÌSêü#á¯ò±œOÅv¯*t#‰å—,_.´iÕ¥SÚJvø›²NI=çÌ+cjc#C­Ý¸Ý}úÿÞÅÿŸÿ…Ûáo |Fý‚kM^×5…ž/Ÿþx»Kžäx“C¹•¦´¾’æââå'˜Ìfa}ÐCöt`¬ |GŒ_Ø8¼^_ÅÜ;8S†6”}¥*RŒ}h%”Ô! n1QåNN6©SžQn-9g·Œg†®›pz6¾$õOvMû~É6úÃx›Lø‡ÿñ‡Æx/ãÇü$½ö‰¨É¤ÿgêYEš%ìJñ=¾ìÎöш£Ý 6|uÆR£õj˜.¥—ÑÄ`½”âªóÓ•IIW§)F2S·¹’s•ù¯³Âay“S¬æÔîí¦½Ÿ—‘óí{ðÓö ²_Œºæ‘ð‡öŠÕ¼?ñ¶ïPø™&£m.—ã ßHÂOYéQ²Áö›kRÊñ ‘Ãæ"y‡k~¡Âôón?¨òÊRÅe4êàá ?+Up‘Á%l\ë¹8O’¥K8ËìÊ\²—*ºâ®éà×´´j5/{¤¹¾Í½ü5ÎËÂÚ7ů|"øƒð»á/íÌÿüE©Z\|Nð_öÆžºŽäðUÔ5ΫG}µœI}(Ž„†"…Ißœøxºù.:Àãó—ët`ã‚­É'O±”T*Е)5RR£jŠzT”¦×»kiËVt' uy[\ˬ¹^éßmvìy‡ì;á|Pý–¾~Ò?ÿॷ&ð z¦›{â?ƒ~4™5Y5o¸ò-ãÔç—í–î·bÑ[ñ£Ûœîó~_¬ñÊx»:É2îTqn5#OE:Jžðæ“£û)§UN§»'­¹}ìp°…L=:“­xéx½o/]ûhtÿÿlø,7¿hâÃߨÿÿüâK[o jVu=*ï@}~êåÚ û‹!þßæ;2À€Œ³Œª—.<®à³¯Ææµ3,M*ÑxXÖ…aN)Jœaˆ^Õ$ç/†I-$ÔyY[›C z5+5~÷V~ZÝÕðöûø·ûcø#⟂>ü ð…¾-|6ñÕ—…~ ÜøÊY.|5«ˆ.þͨùqÆŽïû›¯" €uSnî»e¾ˆ¼9Éx0ËqXümzùv2ŒëÐTRŽ"Ÿ49èóS“”R÷©ûIÁò¶ªF.ðgueLTgÅ)Ťï³èõûíò>î²³´Óí"°°¶Ž!Œ$0ÅEE@a_ÏÓœêIÊníêÛݳ×ÑÔ€P@P@P@P@P@P@Ÿ~eüÿïÄÿû-þ1ÿÓ´ÔÚP@ÿÒûðœPÎ_à Rü?×>"\ø7ö{ñ‹|+ðŽHâøâ;T¶€XÊ`K‰ã¶‚Rí­íäIe¯ µw°"¦”á5Ï'ËÚÿ›²ÖÉéܹS›|”Ó”í{-õÙ/7ÓüÏXø©ñûáÏÂ?€Ú¿íâ-FIü3¤xxë =Š $¹€ xÖ%ÏÌònUQžKOí(7å{(­Ü›²KͲ(¸VŠ•í¯w²V»oÑjpßÿk¿x¿âî—ðCã?À cáæ¿â? Ëâ èk·ÑßÚÂñ­Ä,ÐÜÜÃçB^2ÃåY¶¶4P¿2ë]y=.Ÿ®Œ‡4”eÒW³ô×U¾«Tp¿·ßí‹ñOöý > þÓß |šÜ–iâ=U¶¸Ñ¯/!k[«XaŠ]XÍmºGBk*Õ£C VJ”ªO•ªq‹Š÷Û\®\ÛÓZó%i=,ô³áÍkãðø9OMT«Ò-Úúë«ÛúÙj±ÿg- þ ÝûOüdÔÿmø(ÿí…ðÒß^Öõ{mGOð&‹*ج0¡iÛPYm"•™6yX“‘æ—Í"¼HÓâò…8çXÊ•)S—5:.¬åJÕ´„½Ø»%Æ*Vœšm!ƒáJÙŽ1㳉)Kšêk–+³÷Wtž—|«šRØ÷ xþ «ðãöŸ‡âÿÂOø,·†¼}ñø«á¶•«ÛÛ[jZÑ·ŽÚÄÖñÆË`°Æªör Ê© …yýïþ"ޝÿcâ2Œ<«Â‚ÃR­gûº<î¤ß#r¶”ääªÇ‘«»©\ú¸ežËÏN£QærqVJïÑ-;®½Î§þ ÿ4ÿ‚w|<ðmçí»û1øŸá§ÄŸ~ Ò¾ÁàkHº¸·»¸‚¨¼»R` .ãp;P5ÁáÆa†ÌñÐál÷4–(ÄËš»æ‚ŒeN2”æšåe¥¹¯³ica*púÅ*|Õ‹~¯]»#äŒ?¶÷ìqñ‡ö”‡Ç~.ð„ïþ|Vø˜¶_¼< yý¯®iæÚÞÞ=wX»»V“DWQ¤±EnaûLîNSö\“Šr,…¥…Ã籆aÃóaë}fÊ”ùç7‡ÃÓ§hâ}½6ã9ÔçöUŠV•Ï2­ õq ~ËÜ”½åÊîÕ·mü6vzZèïþ4þÙ³‡Ç=kþƒñ£á¿ƒ~8|3ø—¥YÙøÃCñޝ£iþ-ð­ãÞæYÞé©4ÑíŠh6”ûA€2~"âÎáêÙµ±•c0õdéNkOŽœ9U©OÝtTåNwRt׺îätTÃâk>uT‹Z¦ÒpZÚúßÏÌoÁOÛ£ö¾ýº~|Tð.—¦üð”~ ñÄoKÜð_j1Ôî–ÞM V¹td•^[¡h¤"@Ã Š®³î&ÀSðû0ÀbóªY†!Ö¡ƒ¤›Œ¡ %9¬F Í8ɺN«û.iÝÉ´¨Ð›ÆFq¤à¬ä÷»“z¦ûu·ù¯ÿࣟ°çü·ã¦“ñÛâwÀùüâÿé6v³øíªÉgáK»WÔ¢¹»œÍiËü*ŠmÃHFr ŒWØËsl¯Â®«”à8“ŠÃbe9Tx+O*R…8òÔn.ŒÛ~Õ¨óE+©+¤ó™eRT”væÛ}vÖý»ö>¹øOÿþÉÿj-wà?м#ªx?ÂúEΠ–Ÿ|A|‰¢ê‹o(Hd‚d‹€CÇ’8õ{†Äb**má©¶ëAÍ^J]³ÚVëäzTqUªb7JI+ûÏggÓ×s?öÃý°?`/ÚzÚçönÓm¯…^øSãí:êOŠ:ÿ…¼Rº‰®/H^€y/ ͼËÃr&V/”èMtpO`xJQÏ*sVÌ0²ŠÃB¬yðÊ IIËÞŒá86§G’JÓ\Û¤F/ ÓÖ²¾Å,ð•L—…1XŠ”±çÔq4¡jUé:u§ S’›”mO™ÙjÜ{íýŸS‰öµâ“V³‹}Òié×^¯B-cö§ÿ‚AxSþ ©c§|<ý›|7…u 2öþ÷ã½Ý†¡,Z_ˆî–òynKܳ¹³!Âc¯Ú.€=šq›c< œñœSlD%¬©M9áàéÆ0´« ·Wÿ¯p»»’2ú¬#˜Ú=×wÍgñkçf¿SÒþüUý…~,øcKñoíËÿ økÅÿjèÚÅÏ„>0m2ÿ]ðÍ¥ÊÝEk}p¤Gq#L³Ù"4b2}ß0ù\ßÄü¯'ÅÔÃp¥&òÜD]IáqQU)ÒÄÔƒ„§JNRœ¥N*.g%'+·hú)à¥Z*U¥ïÅÛš.×K£éêSý–¿m?ø#ïÀOxãáç‡ÿkQ©Ù]xÃH¾ñÒîÑô{Dy’Yx~sn‘%´Gvbƒ&&’@ÌI"¾K‹¸¯8â,Z¥KØG8ѪÔL\y¥'9«{Ó²šŒl¬‘¾ N„¥w«’ºÑ_¤tÙLã|WÿCý…üeûq|HøQqûI|@Óü'ñá„:lß4ïù>Ð ‘widEºÓRf› (s–‰®·ƒÆexËóˆÀË„ĹýZTœ“µ{»N‚Qº‹KII^ÌÎP©<\ái%%nkè½;3_àüëö|øMãí7öCøÁñÇÁ^6øtºtú†þ,GãÔæ]2ÎÒÔx•å„)Ônä,~L$˜•Ü\GÎrêœI–ãåÔÂò*iÔ©96ðJ-¿aI$µ¼£e«¾ŽƒÄSŸ±œy£²•ï¢_kÍžuÿóýµþø—[±ý¡?m¯ø*TšEç„<[¯ÙøáE«AáÝ" ¥žÖÜßYÛCê Ј¦·wGµHËncôþ%ñWahO'á| ‘¯J„«âœ¥^«­hÎ~ʤå'E©sBª‹|×w²²1ÁañN^Ö¼Ú³vމ[mRZ÷CooÚþ w©~ËWÿ±ìiñ7á†ÿ ŸÅWRø·Å—pÜÞi¾ŽS%Åæ«swóy7˜‹xÝ€v‘£M€–ZðëÄô¸¶WÄØùMeô¢©RS„*Vq´)Ñ„,¹¡eûÙ$ÜRR—3²f3ûaBÕô][oò>Œ×ÿoïø'×…¿eíKà¿ìÑÿøYà }“Añ5…»Cc¨5¼kB¾[ò€•lñ€r~c†Ïð˜®.§™ç”¥Š¡í9§NU$¥(96áí>%¾êÞV¹ß*†’›åvÑÛñ±ñ´_ðWŒ?ÿjß êžøýàˆü\ðî™ÅMNóÆú•ïü {§Ë4--„©Geö›@’Ì¥0×Nšý¹ÃÁ!àìL+⾪°*<4T)C‰…U(ÕM¹Töu/~õÕ;êÚ<›æÔ11´y¹’æÕòÆÝ½V¯×ïúGÅðWŸ†—>(ø—ñàWíïðÞæ¨é:O‚¼ñkGŸ@Ó¬¾Í>5=BõO:þ+˜œ˜d b[?˜a)ð0™v 6¦âùjÔ­_ V5êKž?¸§*OÜ¥*R_¼‹|î-ÞÍ#¾oïΛ]RV^nýoÑžYῳÈý¼þ5üJñ/ü;ÃÖ ¾&xQí¤Ð|1bºQŽK¨®-âkkè› ¨Y,Q¹»Tó¤8z•|KÈ¥Ã9~_O*Œë`S©R~Ö.Pœ¥YJ7•*׊t\8r·œäÜGWÛN^ÓI^é+n¬µî»Úï©ã~4ý¯~~Äÿµ.‡ñßRýªÛö¦øuáü8ðw…uñ†£5³ÄÚŽ·³ÚMQ²Ç©I ¸Y'ÇIŸÔ°üIøÛûRø[Âøÿ ¦¯o j -/-üFl,î 3TÓm˜È>ÐÐEŠñǰ•.sÖçâ¿ð¶q—åy{VØÒu#‰© aùêEʽ*ÓJ>✥¥.k>VÞ‡Ÿ*Ô§:Ô­+»r¦“Ñ¥w­¿Îǹ|Zÿ‚¶ÿÁ8?ho‡Ÿ?d/Š~0ñm—…ô½7AÓ4ˆzm«^jÄ·vᎣa˜¢¸°‘Wθe& ¾nµð;¥ÃYž_Äy~gƒ•yʴ燕ESTåeJ¯¼”¡ˆ‹~Î þòu¯NTgNVV³¶¯Íiºêú3{ö¢ý¿ÿà‘>ý–`øw‰}V‹¯›üÙô/ü=Ûþ š8?¶¿€¿ðp?¿7;CþíÿÍÿ£ÖðþøPÿvÿ‚fÿÑëx ÿü(ÿ‡»Á3èõ¼ÿƒþ‡þ ëÿÎa´~ÚÞÉÿ¨Àÿ ä¼'ÿyý…$ø©âÛþÚ> Ž4ømä¿U‰ØÅ'Ú|· ˜}›²NÓÆq@wü=Ûþ ›ÿG­à/üð þíÿÍÿ£ÖðþøPÿvÿ‚fÿÑëx ÿü(ÿ‡»Á3èõ¼ÿƒþÃÝ¿à™¿ôzÞÿÁÀÿ ?áîßðLßú=oàà…ð÷oø&oý·€¿ðp?€ø{·ü7þ[À_ø8á@ü=Ûþ ›ÿG­à/üð ÿ‡»Á3öÖðþøP'à/ø+çì%'\P­P@ÿÓûðý)­øSÅŸ¼Eû:ØþÓ?µƒž+Õ¼SñÅ:†©ðÊÂww6ž#SÓ-­cV»Š6†Št‘$3:yhŠÇåÁ<µiN¾Q¿xë¯ÇRuº{©JÛôÝ7cZs…{¯6ù_,¿ð¨¸«lô½º¶ßs¾ý¤¼âýKö!Õ¿cø/VÖ¼gàÿ†¡dºiú¬–rBßcŠå‡”ó¹µu1J‡RFg³RœgÖUÔaZ}]”Ô—]Ë…¦á…Xi»9Ó”|“q¶½¯¿ä;Á?£ý®ÿmï‡_~ü?ñe§†¾x]ë>%ðæ”±j:ˆ³Ž:1wfYUa™äòÃ*mPH,)Bœc^¥[éÊ¢¿½y)7òåWõë­·uÕ¡NÚ¹s?.TÕ¾mé®ÊçÕD1RH¥ ã+Š9þ÷é@^ ÈôÅ&Õô•Ç¿è(Ú;!@E ÈS»ÚÈëëŠWyõý(_Æ#${gÊž»¾ÿ—ƒa {NæB9î´ÀP1Ðþ”€ÁÏô§p ¸õÅ hÎ¥(èJ1““ü¨¸>¿¥&Þ=»â€Ëm»‚¾»8¡»îŒwüq@L˜~kFÀÀþ”`Ž?*M£Ûò§v‘ž§ô¤ϯé@?Þý(ç×ô '®J]² U°z”€~\äôf€¸uÈÏL­ÿ{ô Ÿ_Ò€}J9þ÷é@?Þý(ç×ô Ÿ_Ò€ ãߥ8ж=Jñ@8^O²Ðw†È>ë@?Þý(ç×ô Ÿ_Ò€½úPÏ÷¿J9õý(ç×ô Ÿ_Ò€ 9ÁéòйnŽÀPAS†C@ÿÔûò€Xp€ô€X®ÝÇ ÏJ:ðÇŽ>ë_´d´¿Çß|`ñn•⇺ö¡¤|1“Hñ}奟†×MÓ`¸Y¬$3¼—,ï!™_z‡åâ¹ñ‰à²—‹Ä¹å¯hI¥º4µ²ë®ÆØxÙ}Z_¹·ÚŠ“iïzß/=}Oö‡ý¡>%YÿÁ1$øñá=a4Ÿø‡ÀºGÙ58ÀÆŸ{©}ž´¨#® €F>ZìÌ©*Ï`¶u# 7´¦“·žžgUˆ–/.Ž*Úû)T·œ`ä“Ñî×o‘ƒá„öŸ²í§ð·áçÂßøžçBøàÍvé^&ñ}î­öËÛ´– A>×$†)?y2?—µ[Í\Ž—6*¥;;r¹.Ë–Q¯æ¥ó³{šºn:UowΠüùá9ëÓG 4ë£V³úÊ ° € ( €gU= q@^4мSãÙãOüJ_‹Þ/´øá?øP𤖾,¼‹NÓ,ôJ[[}5lRQnðM±+¡24îÙ&ܨÖXz+%w'+õR•šì­"í£Iêï{«¬U©J{Fé[KY^÷ëw«¿M-cìÿÚ7Â><øµû8k¾øñM< ªëšj¤™«ó·µEN5?ÂÞ¶¼SÕ_¦EFrµÒ¼šv¾«šÚ6º¤õ·]œ¿c[o^þØrë?±Oˆ ðì—©nufäìµ³9Û—åän#]Ï iòÎu8nݵÙ.²~QWn×vZ&ÚF´Ò”\å¤R»ü­óvKÍžCÿËÕ ø•ñ¾ßÇ#°ø ׺œ7Êñ1›EÓ®%±o&Ò9¦’(ÔA’[q3J0Ž1…ô”õm¶õÝßköÙlŒ[¨ñ2s¶ª.Ëe¦Þvï»ê}[Aa@P@gø³W“ÃþÔõøbömÅÊ#tfŽ&p¶V³«' R’è‹¥:Š/«Gçÿ€ü?⟆߲×À?ÛÞÏâç‹o¾!øëÇ^ºñ¬ÚŸ‹/'°Õ­|Aw7ɤ6ñC \/¨Šb6êrrûº)òQÄR¥kÆK•ßvù/Ͷ™_D“ÛDcQ¼M•žŽ’¶‹IrÛÍ[{Ýß]õ=¿þ £ñGƾøsðûá·‚ô¿_ˆ¿,ü=¬Yxåmõ{»msu%µ´í$knÓt‰å.›"y2•ÈÁAÕ¯[M[Wµì¶oµÚoºVêi9ª4'-ž‰=ív¯¥î®–Ö“RnɦïØ5ô|_ø™ð~/xÿÁú¦Ÿ—©Üü;ñ‰Z±±‚q4i§^y’;Epк¼Là#ÀHEÜK:Ræ§=[´žÿgE¢ïñ-[W¶ŠÈ*;TJÖ÷zu·uÒKgß{½Ï§ê„P@P/ñ»Ç ~ ø»âM„ ,þðÅþ¥OÑž w‘AöÊŠäÇ×–V´wŒ[û‘Óƒ¢±ºtŸÚ’_{>8ðGÃö{ðçìÕûDi?|Qªx¿âŠ´Í?âeƳâûË»?ǪióÏ(KIdh 1αÉ’‰±#e¥V1£™G ù_4ðJjNýo_­Òì:I×Ê狗Ĺ%¦«ß©ZêË—ÞVvÕ¥µîzüçÅú•޽ðgáÕ§‰üEgâ?Ü wáϵw²Öˆ¨((ÿÕûò€ (ç_‹° Ÿ|Eãôðíâ øWâËÅ'ÄŸ éº}´«¨È KižÞy½£\[ÆË·9UÊìrZ”b¹}œõ…î—ÎíiѽZï÷ç5?iË;Zý­³^k£;Ÿˆ²Ç†¾(xCÅ üiâíRãÀ~'ðe¿‡`ðdQö“HÈnmäUó|Ö>óS•'$ÝJœÒr|ÎJIõ‹Z«z4ž½I£j<»$Õº4ûü´ÐÄø9û#øÁ¿4ß_¾>ëõïø^_øVmKJ¶²N³™¢k‰J@–æo"òœ Fªå³jVr—Ú–ïÓ]Mud¸ü)m¿à¿%¢=²¤  € ( €H ƒÈ9€>fñgü‚ßÄz‡ˆ|§þÑ&Òþø¿ÆCÄÞ&økkajÐÜÜ´Ë=ͬwN†Xlîf_2hG,KeV`j‹öJšzû7xïtï̯®¼¯XöÑl’×4ç$ìæ¬û|<­®Í­üõݶûÚöEÖ¿h¯øÿᧈ¿h¿iúŽaÓ`¶Òll,Z b¦h­÷Å™Rëh¬æA´•P‘Y¸ÞÍ»µ.o»T½/«NéìÕ9’VJÞëß×ÖÚikzê\øû<|eøA¯ÃuâïÛÅ^6Ðí´Ö´µð¾«á=ÂÒòì‘ÂÒRH »näZs7w-[þ¿¯S%T’Ñ/ëþÈõÊ’‚€ ( € C‘@5ÿùôñvÞ_ŽšðøTþ<ÿ„½¾ >ßÊûq»ûq·û^<ß±ý³ý#Éë»åݳä§Eû>KëÉðù[m·åéøÜ*^|ü®ÜúKÍ=§2Ñž»yðGEñ^«âøµ¨'t}_SŠïHðç‰4{Y­4 š;qååÃÎZMÍ— ¸•¹UÖ©·~ºôyM´ôi+tÓ¯ÏôÐÄøû!üý¼ãˆ|/§Y^xßYŠöe´ÑííÆŸZÁoö8 J€´qCÇ™+·zpn4¹<ÛûÝÿ‚’‹©Ïä—áküúú¥Ha@P@2âÞ »y-.bY"•%ÆC© ûH¤Ò’iìÆ›‹º>jøwÿâƒÁ§‚¼+ªþÐþ%Öþ|7ñk^øs}aj!µw›X®.‚y×0Z3— X)v}‹éÕp´š¼”ySùY¿Wvû[¥õ"pSçIÙMó5Ó{Ùvõ·M–‰%×|Wýu/Œ^ ºÐ¼UûDø»ûnËÇãÅžñ\ÖIwá;„b¶¶Q—5º£K,Êí$sȬÇ#'ÈéÊ?/¯ó^ëU¶Î˳JJÒIšÍ£•â’vÑy[TÝìÛW~¶Ø×øû6ß|-ñïŠ>2üBøŸ{ã?øºÞÎÏRÖn4ø¬à¶°´ó ½µ´_,q«M3’ÅšC–ÀP- n1êùŸ­’û’Z/žú™ÉsM7ÑY]ÛÜõ:P@PmcHÓuý&ëBÖ-âÎöÚK{»yVXJ²Ÿb )­7 «§£*”$¥ÑóïÂ?ø'÷ü+½{À¾,ø÷¯ø«Â? ®$Ÿá·„µ:Ú$Ó¤0ÉoÜOvmíå’·c ÙmìVÊ¥IOÚTnSµ¹ŸžíÛy>¯ð¹œá.XéÞÛüµ¾‰ëúš?bÿøòûÃ=µý§|Qgã¿ø“SÔ¼1âÙtÛ9DVwß,ºLöÛsÙìTQ÷eýÚ¶ðÃ5æ¦Ô£¿+‹óM©kÙÝ-WK­›5”Üá(?…ÉI.Í&•¾RyÕþÍÿ³”Ÿ_Å~&ñ'Ä}GÅþ+ñκº·Š|C¨ZEl&•-ã·†`„†á‰Wæc‚Y˜’jܣȡd®üÛ{·ø-,¬‘—¿)¹ÎWÑ%Ú)_Ý^WmëwvÏM¨(( € ( ŒŒPð÷àv•ðïâ‡Ä/ŠZ‰/nn~!j67—–“ÃŽÅí¬’ÑV" 3Tw’CÆQŠ…N:^R•ü䢽4åC“rª¦úEGä›38þƾ-ñ6àZþÓž%O‰&½þÌø‹}¤ÙK>£mwÿW–©C,/•00#&¯›–§›lÚ!Çš³mÚ\Ëk­ôô³µºïºLì?f_ÙÓJý›| áäñž©â}k^×®µÏø¯[X–ïXÔnß4‹ª"ª,q"(#‰t¦ä¹#«F*ËæîþöÛù•&çRS{»~ É/+žìôj€ ÿÖûò€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ÿÙmiller-5.6.2/doc/data/linreg-example.txt000066400000000000000000000017631354153536500201610ustar00rootroot00000000000000 # Prepare input data: mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' data/medium > data/medium-squares # Do a linear regression and examine coefficients: mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares x_y_pca_m=1.014419 x_y_pca_b=0.000308 x_y_pca_quality=0.861354 # Option 1 to apply the regression coefficients and produce a linear fit: # Set x_y_pca_m and x_y_pca_b as shell variables: eval $(mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares) # In addition to x and y, make a new yfit which is the line fit, then plot # using your favorite tool: mlr --onidx put '$yfit='$x_y_pca_m'*$x+'$x_y_pca_b then cut -x -f a,b,i data/medium-squares \ | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 # Option 2 to apply the regression coefficients and produce a linear fit: use --fit option mlr --onidx stats2 -a linreg-pca --fit -f x,y then cut -f a,b,i data/medium-squares \ | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 miller-5.6.2/doc/data/local-example-1.sh000077500000000000000000000013651354153536500177250ustar00rootroot00000000000000# Here I'm using a specified random-number seed so this example always # produces the same output for this web document: in everyday practice we # would leave off the --seed 12345 part. mlr --seed 12345 seqgen --start 1 --stop 10 then put ' func f(a, b) { # function arguments a and b r = 0.0; # local r scoped to the function for (int i = 0; i < 6; i += 1) { # local i scoped to the for-loop num u = urand(); # local u scoped to the for-loop r += u; # updates r from the enclosing scope } r /= 6; return a + (b - a) * r; } num o = f(10, 20); # local to the top-level scope $o = o; ' miller-5.6.2/doc/data/map-literal-example-1.sh000077500000000000000000000001321354153536500210310ustar00rootroot00000000000000mlr --opprint put ' $* = { "a": $i, "i": $a, "y": $y * 10, } ' data/small miller-5.6.2/doc/data/map-literal-example-2.sh000077500000000000000000000001701354153536500210340ustar00rootroot00000000000000mlr --from data/small put ' func f(map m): map { m["x"] *= 200; return m; } $* = f({"a": $a, "x": $x}); ' miller-5.6.2/doc/data/map-literal-example-3.sh000077500000000000000000000004711354153536500210410ustar00rootroot00000000000000mlr --from data/small put -q ' begin { @o = { "nrec": 0, "nkey": {"numeric":0, "non-numeric":0}, }; } @o["nrec"] += 1; for (k, v in $*) { if (is_numeric(v)) { @o["nkey"]["numeric"] += 1; } else { @o["nkey"]["non-numeric"] += 1; } } end { dump @o; } ' miller-5.6.2/doc/data/maxrows.mlr000066400000000000000000000005031354153536500167120ustar00rootroot00000000000000# Retain all records @records[NR] = $*; # Track max value of n @maxn = max(@maxn, $n); # After all records have been read, loop through retained records # and print those with the max n value. end { for (int nr in @records) { map record = @records[nr]; if (record["n"] == @maxn) { emit record; } } } miller-5.6.2/doc/data/maxrows.tsv000066400000000000000000000013211354153536500167330ustar00rootroot00000000000000a b n score purple red 5 0.743231 blue purple 2 0.093710 red purple 2 0.802103 purple red 5 0.389055 red purple 2 0.880457 orange red 2 0.540349 purple purple 1 0.634451 orange purple 5 0.257223 orange purple 5 0.693499 red red 4 0.981355 blue purple 5 0.157052 purple purple 1 0.441784 red purple 1 0.124912 orange blue 1 0.921944 blue purple 4 0.490909 purple red 5 0.454779 green purple 4 0.198278 orange blue 5 0.705700 red red 3 0.940705 purple red 5 0.072936 orange blue 3 0.389463 orange purple 2 0.664985 blue purple 1 0.371813 red purple 4 0.984571 green purple 5 0.203577 green purple 3 0.900873 purple purple 0 0.965677 blue purple 2 0.208785 purple purple 1 0.455077 red purple 4 0.477187 blue red 4 0.007487 miller-5.6.2/doc/data/mean-with-oosvars.sh000066400000000000000000000002051354153536500204140ustar00rootroot00000000000000mlr --opprint put -q ' @x_sum += $x; @x_count += 1; end { @x_mean = @x_sum / @x_count; emit @x_mean } ' data/medium miller-5.6.2/doc/data/medium000066400000000000000000022576271354153536500157300ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=11,x=0.7930488423451967,y=0.6505816637259333 a=zee,b=pan,i=12,x=0.3676141320555616,y=0.23614420670296965 a=eks,b=pan,i=13,x=0.4915175580479536,y=0.7709126592971468 a=eks,b=zee,i=14,x=0.5207382318405251,y=0.34141681118811673 a=eks,b=pan,i=15,x=0.07155556372719507,y=0.3596137145616235 a=pan,b=pan,i=16,x=0.5736853980681922,y=0.7554169353781729 a=zee,b=eks,i=17,x=0.29081949506712723,y=0.054478717073354166 a=hat,b=zee,i=18,x=0.05727869223575699,y=0.13343527626645157 a=zee,b=pan,i=19,x=0.43144132839222604,y=0.8442204830496998 a=eks,b=wye,i=20,x=0.38245149780530685,y=0.4730652428100751 a=hat,b=eks,i=21,x=0.0023058336158985338,y=0.16665492414949412 a=zee,b=wye,i=22,x=0.9270813051677103,y=0.5523236165919244 a=wye,b=pan,i=23,x=0.7975862089313748,y=0.8430307846116346 a=wye,b=hat,i=24,x=0.7286126830627567,y=0.19441962592638418 a=pan,b=eks,i=25,x=0.291444729043585,y=0.2680100577363237 a=eks,b=eks,i=26,x=0.7433678407354926,y=0.8295062256195103 a=wye,b=wye,i=27,x=0.9439687243972539,y=0.9305553444632164 a=hat,b=hat,i=28,x=0.5811879718711469,y=0.3934172489640808 a=eks,b=eks,i=29,x=0.05713488327208227,y=0.45012758797367913 a=zee,b=pan,i=30,x=0.7514525581952406,y=0.5869901584461873 a=eks,b=pan,i=31,x=0.5701563454882129,y=0.822178550628332 a=wye,b=wye,i=32,x=0.5112738997714514,y=0.33107563648490446 a=hat,b=pan,i=33,x=0.09303747345405,y=0.18404048980291832 a=hat,b=wye,i=34,x=0.49061881414751796,y=0.4721354893261027 a=zee,b=zee,i=35,x=0.12565828887119346,y=0.1936186210637818 a=pan,b=hat,i=36,x=0.9436794292675323,y=0.9111218711707734 a=wye,b=pan,i=37,x=0.056537252420374995,y=0.5450112991603523 a=pan,b=zee,i=38,x=0.508250895522605,y=0.12919877119684198 a=hat,b=pan,i=39,x=0.4591095934684415,y=0.6526252088703994 a=pan,b=hat,i=40,x=0.30302850095892986,y=0.2884018711352886 a=pan,b=hat,i=41,x=0.08143769954761992,y=0.030906489980379925 a=eks,b=eks,i=42,x=0.4614430092810964,y=0.552479841087209 a=zee,b=eks,i=43,x=0.8456728393970536,y=0.8501991168644704 a=pan,b=zee,i=44,x=0.8980511441946196,y=0.6728135588610029 a=pan,b=eks,i=45,x=0.6247151870956413,y=0.8275695927895051 a=pan,b=wye,i=46,x=0.08834857197997548,y=0.4444202016249801 a=eks,b=zee,i=47,x=0.4544511154182116,y=0.22787905378091933 a=hat,b=zee,i=48,x=0.4355461545206776,y=0.8758429593971929 a=wye,b=wye,i=49,x=0.21920222273431333,y=0.18979580426582043 a=wye,b=hat,i=50,x=0.4942114498754957,y=0.35138166631352374 a=hat,b=pan,i=51,x=0.744071908772339,y=0.9166693426799131 a=hat,b=pan,i=52,x=0.4302467414632086,y=0.9811029877493174 a=eks,b=eks,i=53,x=0.9985342548358704,y=0.9590495928336531 a=zee,b=eks,i=54,x=0.9314828033134765,y=0.8687851184407838 a=hat,b=wye,i=55,x=0.07268958233806955,y=0.49851026308988333 a=pan,b=zee,i=56,x=0.06982762802945175,y=0.033405940208281026 a=wye,b=pan,i=57,x=0.7302705254635534,y=0.7851652600343977 a=eks,b=zee,i=58,x=0.4767244077783851,y=0.6343726024100323 a=hat,b=hat,i=59,x=0.23821881669710454,y=0.2495882683265671 a=eks,b=eks,i=60,x=0.9940192460481878,y=0.23460275425446875 a=hat,b=wye,i=61,x=0.5661361038240923,y=0.30297884091448213 a=zee,b=eks,i=62,x=0.6925670766279615,y=0.6309283897492339 a=wye,b=wye,i=63,x=0.3034237022482048,y=0.4570355951663545 a=eks,b=zee,i=64,x=0.7150944451661773,y=0.44407448850132425 a=pan,b=hat,i=65,x=0.9374806227235818,y=0.5142245475995557 a=hat,b=hat,i=66,x=0.8467681996061774,y=0.7322484476601094 a=zee,b=hat,i=67,x=0.2584112989773649,y=0.4004276976232398 a=hat,b=wye,i=68,x=0.3362076167096233,y=0.10257516543234868 a=wye,b=wye,i=69,x=0.5045822356009134,y=0.37117047177904894 a=wye,b=wye,i=70,x=0.03459890490173678,y=0.6153285711977126 a=pan,b=hat,i=71,x=0.7573370490708291,y=0.07373145387947322 a=eks,b=wye,i=72,x=0.5981608655833305,y=0.6748831518079305 a=pan,b=zee,i=73,x=0.8832262928532921,y=0.41423111475143115 a=eks,b=eks,i=74,x=0.47929526118952226,y=0.04122489928296569 a=wye,b=hat,i=75,x=0.5852781359846899,y=0.2530983414392004 a=zee,b=eks,i=76,x=0.48749884261245857,y=0.4733893888865026 a=hat,b=zee,i=77,x=0.49083602889086597,y=0.9060845389367156 a=pan,b=eks,i=78,x=0.8066566257701527,y=0.5756861577587412 a=hat,b=eks,i=79,x=0.36764688836079906,y=0.3891921555248843 a=zee,b=zee,i=80,x=0.8318990957979263,y=0.9881725534495532 a=hat,b=wye,i=81,x=0.17534099646455403,y=0.2603138043676684 a=pan,b=eks,i=82,x=0.16030863176622356,y=0.3818559883741389 a=eks,b=eks,i=83,x=0.12617292637489663,y=0.2322389628774958 a=hat,b=wye,i=84,x=0.6438639100413308,y=0.7352455517915716 a=wye,b=wye,i=85,x=0.4632506196324333,y=0.47736149585488863 a=wye,b=hat,i=86,x=0.040744707036128314,y=0.03301111174849969 a=wye,b=hat,i=87,x=0.6505610031501867,y=0.8780409741829391 a=hat,b=eks,i=88,x=0.4467819157449152,y=0.25053527761538363 a=zee,b=zee,i=89,x=0.8495466480863977,y=0.32621281477326824 a=wye,b=hat,i=90,x=0.47950389571017593,y=0.42674583688195655 a=pan,b=pan,i=91,x=0.9831553489472493,y=0.8956966539093748 a=pan,b=eks,i=92,x=0.558471394524429,y=0.18097017277790595 a=wye,b=hat,i=93,x=0.5870769045363674,y=0.9424742244710793 a=zee,b=hat,i=94,x=0.9025271534348577,y=0.45924993374839684 a=wye,b=wye,i=95,x=0.49658345077223354,y=0.9177517032161158 a=wye,b=hat,i=96,x=0.6981858011144773,y=0.7500496060047478 a=zee,b=wye,i=97,x=0.9848235494485748,y=0.022289257742961754 a=pan,b=wye,i=98,x=0.7858397459820843,y=0.17868083683024716 a=zee,b=zee,i=99,x=0.9317555381388605,y=0.7821791090489817 a=wye,b=zee,i=100,x=0.45744184842338,y=0.8682791684654946 a=pan,b=hat,i=101,x=0.8551893009031044,y=0.5817332905396572 a=hat,b=zee,i=102,x=0.6981668049063121,y=0.7047537152787725 a=zee,b=hat,i=103,x=0.4414561871794942,y=0.9469598103198476 a=eks,b=hat,i=104,x=0.2120601199719776,y=0.5815731915374246 a=hat,b=pan,i=105,x=0.18287006336938183,y=0.7049942001890025 a=pan,b=hat,i=106,x=0.29173443059817517,y=0.7752097526541691 a=pan,b=pan,i=107,x=0.04969073649124267,y=0.3496530999805786 a=wye,b=eks,i=108,x=0.7225927195065096,y=0.4187910102687944 a=hat,b=zee,i=109,x=0.6352241884717337,y=0.5627539222500982 a=hat,b=eks,i=110,x=0.23052618333925456,y=0.6381223147292577 a=pan,b=hat,i=111,x=0.9154288048749503,y=0.6519249542119475 a=eks,b=hat,i=112,x=0.04982284101245715,y=0.7642422832858892 a=wye,b=zee,i=113,x=0.3320543853278368,y=0.30390890533333614 a=wye,b=wye,i=114,x=0.5448671671522891,y=0.4560013210405327 a=zee,b=eks,i=115,x=0.6020602802269807,y=0.49151403260985893 a=eks,b=eks,i=116,x=0.6525970433533309,y=0.6038254664200311 a=wye,b=hat,i=117,x=0.5151714700146957,y=0.07461822977630961 a=hat,b=zee,i=118,x=0.869072185421898,y=0.24935951674957813 a=eks,b=eks,i=119,x=0.7271030983543114,y=0.49297558822358944 a=wye,b=hat,i=120,x=0.7615397120903524,y=0.9797450222382247 a=pan,b=pan,i=121,x=0.613826139364826,y=0.9594055166987485 a=eks,b=wye,i=122,x=0.38075252326113784,y=0.015438488067683442 a=wye,b=wye,i=123,x=0.5795446579685392,y=0.35893969199526243 a=eks,b=zee,i=124,x=0.5720422015264689,y=0.5847353398497057 a=eks,b=zee,i=125,x=0.20393191361301366,y=0.5417271858177272 a=pan,b=zee,i=126,x=0.1495175173899136,y=0.37751439353621485 a=eks,b=wye,i=127,x=0.0766455676519866,y=0.8562543633218965 a=zee,b=hat,i=128,x=0.4962404023217607,y=0.3377314781015287 a=eks,b=hat,i=129,x=0.17009251828726202,y=0.517544397009653 a=eks,b=zee,i=130,x=0.8191166461936853,y=0.6036827248166735 a=zee,b=zee,i=131,x=0.8820504927451462,y=0.17262406561122967 a=eks,b=wye,i=132,x=0.6634725445660961,y=0.3836479034081546 a=hat,b=hat,i=133,x=0.10275440550496173,y=0.24475094001022435 a=eks,b=wye,i=134,x=0.224629215365013,y=0.6849916283018126 a=hat,b=hat,i=135,x=0.6950203918361871,y=0.6680826428134803 a=pan,b=pan,i=136,x=0.10793035048973287,y=0.26815648351708954 a=eks,b=hat,i=137,x=0.7869909808709532,y=0.3001475489161951 a=hat,b=eks,i=138,x=0.9349507622807055,y=0.1692665561677016 a=eks,b=zee,i=139,x=0.11179490410324633,y=0.603721160232944 a=wye,b=zee,i=140,x=0.21454586218739624,y=0.5492253214081585 a=pan,b=hat,i=141,x=0.2240396548356538,y=0.2500739139538637 a=zee,b=eks,i=142,x=0.7814387149488571,y=0.5062129648989182 a=pan,b=eks,i=143,x=0.7772439867698123,y=0.970133177930633 a=eks,b=wye,i=144,x=0.5300792274901561,y=0.3329098127249156 a=hat,b=zee,i=145,x=0.9039391234331099,y=0.17366986802981454 a=hat,b=wye,i=146,x=0.7557462730554149,y=0.8354966950279341 a=wye,b=wye,i=147,x=0.19573082452335644,y=0.16675321752165628 a=hat,b=eks,i=148,x=0.6206402300915382,y=0.821425348018401 a=pan,b=pan,i=149,x=0.2983431833827429,y=0.49328391364637114 a=zee,b=wye,i=150,x=0.6465476525020952,y=0.010839998639479487 a=pan,b=wye,i=151,x=0.7628297388566211,y=0.25945524901441286 a=eks,b=zee,i=152,x=0.39677449578160984,y=0.01242383070673192 a=pan,b=eks,i=153,x=0.3403054358911233,y=0.20856161342555235 a=wye,b=wye,i=154,x=0.7473556150405872,y=0.5878222144661077 a=pan,b=wye,i=155,x=0.8308266904064261,y=0.6160102482290218 a=hat,b=zee,i=156,x=0.06969918779892115,y=0.12332013609343595 a=zee,b=zee,i=157,x=0.08770785920874291,y=0.1694018877034732 a=hat,b=wye,i=158,x=0.5750041834429883,y=0.8988889437381339 a=zee,b=hat,i=159,x=0.3949341964723728,y=0.21461635038581106 a=wye,b=hat,i=160,x=0.7700798652245849,y=0.07882734380346257 a=hat,b=zee,i=161,x=0.241833257737751,y=0.2595728278064434 a=zee,b=zee,i=162,x=0.30865469474514673,y=0.04807979540420082 a=hat,b=eks,i=163,x=0.1276067871735147,y=0.60275669734591 a=eks,b=hat,i=164,x=0.24635677428468206,y=0.026325305117816278 a=wye,b=wye,i=165,x=0.8845921239269926,y=0.31637090814582536 a=wye,b=hat,i=166,x=0.44829526779246864,y=0.9231413532216132 a=eks,b=wye,i=167,x=0.4655842156857275,y=0.37721410941530287 a=wye,b=hat,i=168,x=0.7006512384825274,y=0.47994014933998974 a=pan,b=eks,i=169,x=0.772606170256783,y=0.2822045789726282 a=hat,b=zee,i=170,x=0.12938897709124275,y=0.8919705275016901 a=wye,b=wye,i=171,x=0.06972810304721344,y=0.9401580287060083 a=pan,b=pan,i=172,x=0.5464624353474236,y=0.4315049479416151 a=wye,b=pan,i=173,x=0.15061916413672838,y=0.399506367745217 a=hat,b=eks,i=174,x=0.2254130292138935,y=0.6999307939959456 a=zee,b=pan,i=175,x=0.3493963468867093,y=0.2448706490036231 a=hat,b=hat,i=176,x=0.5951138587106596,y=0.851049910114082 a=hat,b=wye,i=177,x=0.39004663496677305,y=0.2404193708137553 a=hat,b=eks,i=178,x=0.7778109990978507,y=0.4353416180768024 a=pan,b=pan,i=179,x=0.5158487973995551,y=0.3857173070225889 a=hat,b=wye,i=180,x=0.0983048320526585,y=0.3605050602699248 a=hat,b=eks,i=181,x=0.06881556874834038,y=0.02776354780439838 a=eks,b=zee,i=182,x=0.8795883767333226,y=0.7913268326625821 a=pan,b=pan,i=183,x=0.6986560980027141,y=0.10540771793654646 a=zee,b=wye,i=184,x=0.3918665170311699,y=0.8726348045234303 a=eks,b=pan,i=185,x=0.49921597322068556,y=0.7926600920736209 a=zee,b=wye,i=186,x=0.4488271641509629,y=0.6778168337109446 a=wye,b=eks,i=187,x=0.1765361867584282,y=0.7166382775023783 a=eks,b=wye,i=188,x=0.7195019639137887,y=0.6101293217348989 a=pan,b=eks,i=189,x=0.48651849518653256,y=0.3310583783958194 a=zee,b=hat,i=190,x=0.9187417496732211,y=0.01357822326345659 a=wye,b=hat,i=191,x=0.6036920337427446,y=0.10361603649711493 a=pan,b=wye,i=192,x=0.7721928274839366,y=0.730996300378133 a=eks,b=hat,i=193,x=0.8250294635521217,y=0.014592155431475518 a=eks,b=eks,i=194,x=0.6636241298839136,y=0.5259126321800084 a=pan,b=hat,i=195,x=0.6642514282295026,y=0.9448672883012781 a=eks,b=pan,i=196,x=0.36476881994778887,y=0.7206833750684084 a=wye,b=wye,i=197,x=0.07466320732554754,y=0.1470636187800869 a=eks,b=hat,i=198,x=0.04736012928828348,y=0.09632719090688924 a=zee,b=hat,i=199,x=0.07495669138561056,y=0.0033556400316512303 a=eks,b=pan,i=200,x=0.25160946724271127,y=0.3153026554896944 a=wye,b=eks,i=201,x=0.43178278951820004,y=0.6395054755372058 a=wye,b=eks,i=202,x=0.8067281849918618,y=0.45331926346459483 a=zee,b=zee,i=203,x=0.9685128952631964,y=0.10935985453746455 a=wye,b=eks,i=204,x=0.0866873459163141,y=0.08597589292509311 a=pan,b=hat,i=205,x=0.2896936796389531,y=0.9186383587296384 a=hat,b=wye,i=206,x=0.9712065807938725,y=0.8814161529894458 a=wye,b=zee,i=207,x=0.23493288178707172,y=0.9202087940900824 a=wye,b=eks,i=208,x=0.638370131847482,y=0.6031891659074958 a=hat,b=eks,i=209,x=0.08722321261724375,y=0.1699175655988554 a=eks,b=hat,i=210,x=0.4371757785089875,y=0.6860038700835268 a=wye,b=pan,i=211,x=0.20888984269730204,y=0.947777347490174 a=hat,b=zee,i=212,x=0.7028540974957029,y=0.2764448806144022 a=pan,b=zee,i=213,x=0.910694728148218,y=0.538005658230806 a=wye,b=zee,i=214,x=0.3552257616717024,y=0.7272883402124964 a=pan,b=zee,i=215,x=0.8250379925053151,y=0.7418087278106543 a=zee,b=zee,i=216,x=0.8378134809357036,y=0.016812447916020323 a=pan,b=eks,i=217,x=0.22619506065989436,y=0.6341340791970084 a=pan,b=zee,i=218,x=0.9817869716469648,y=0.49201333191352814 a=pan,b=wye,i=219,x=0.8177491896372755,y=0.4265728829799966 a=wye,b=eks,i=220,x=0.9707941416650918,y=0.5446983207141396 a=hat,b=eks,i=221,x=0.9623773206695981,y=0.7961697529692682 a=hat,b=wye,i=222,x=0.19310273682362344,y=0.7734873966667793 a=wye,b=eks,i=223,x=0.7008326115259359,y=0.8171891486894675 a=eks,b=pan,i=224,x=0.7439085948665143,y=0.02788543310463787 a=eks,b=zee,i=225,x=0.2567945604892924,y=0.24424154648770224 a=pan,b=hat,i=226,x=0.6257005988135916,y=0.042000423208434334 a=zee,b=wye,i=227,x=0.5324819986117966,y=0.43906785967359585 a=hat,b=zee,i=228,x=0.6353440745576056,y=0.8565317288607986 a=wye,b=hat,i=229,x=0.5097848345332788,y=0.8249641724859278 a=eks,b=hat,i=230,x=0.23668880559764938,y=0.9795999884306217 a=zee,b=wye,i=231,x=0.4952269526615126,y=0.998055015071858 a=eks,b=wye,i=232,x=0.5507351778417637,y=0.7118263982857057 a=hat,b=hat,i=233,x=0.2131489206395062,y=0.08647965840929162 a=wye,b=pan,i=234,x=0.4686994090286404,y=0.7301121378084597 a=wye,b=hat,i=235,x=0.37176718775770257,y=0.8655732826697372 a=eks,b=hat,i=236,x=0.06364189456177682,y=0.4949298511378918 a=pan,b=zee,i=237,x=0.4520047694204633,y=0.7431070780984742 a=pan,b=pan,i=238,x=0.1802663344712152,y=0.40747996818620213 a=zee,b=pan,i=239,x=0.7069459453313341,y=0.24901349035427478 a=wye,b=eks,i=240,x=0.11369718773090787,y=0.4362931656865052 a=pan,b=hat,i=241,x=0.5298443076284122,y=0.7286240415109126 a=hat,b=hat,i=242,x=0.17197294875303992,y=0.42960373892313586 a=hat,b=wye,i=243,x=0.40008739772830226,y=0.3431833719273334 a=wye,b=eks,i=244,x=0.047932173034763714,y=0.15974685050052528 a=hat,b=hat,i=245,x=0.6047108965207437,y=0.00023825870459259768 a=eks,b=hat,i=246,x=0.5031823192345856,y=0.1530255494090368 a=hat,b=hat,i=247,x=0.13552744935597638,y=0.7642516336910976 a=hat,b=wye,i=248,x=0.8794750860292233,y=0.9633187985176084 a=eks,b=pan,i=249,x=0.7650242839504571,y=0.13484454578382632 a=zee,b=wye,i=250,x=0.18225031260376368,y=0.42639010352161133 a=eks,b=eks,i=251,x=0.6366142860676015,y=0.7279525837465141 a=eks,b=pan,i=252,x=0.7489029711796827,y=0.6216975230273389 a=zee,b=pan,i=253,x=0.2896285025325088,y=0.4107984626977105 a=wye,b=pan,i=254,x=0.40783269275640843,y=0.07873948964651878 a=pan,b=pan,i=255,x=0.4310139640663371,y=0.133668391263563 a=pan,b=zee,i=256,x=0.715203591010661,y=0.3049124395637157 a=pan,b=eks,i=257,x=0.08448448051072821,y=0.8143297719717848 a=pan,b=wye,i=258,x=0.21573850217727963,y=0.7972074125763187 a=zee,b=wye,i=259,x=0.6485993255572561,y=0.9239849074696734 a=pan,b=hat,i=260,x=0.7786431758578792,y=0.9906513397624532 a=pan,b=hat,i=261,x=0.9547041198642143,y=0.46035613392656816 a=eks,b=wye,i=262,x=0.20205307067280354,y=0.8159138156555881 a=pan,b=pan,i=263,x=0.735966834511216,y=0.8642501328542477 a=pan,b=pan,i=264,x=0.0365319279313181,y=0.01547685459691761 a=hat,b=zee,i=265,x=0.594302803640343,y=0.26329631667022746 a=zee,b=zee,i=266,x=0.8645462287461376,y=0.3192124287902842 a=pan,b=hat,i=267,x=0.8759426552130376,y=0.8128071892594659 a=wye,b=zee,i=268,x=0.334247707070338,y=0.07108295911604934 a=zee,b=pan,i=269,x=0.8962601880511555,y=0.42772238076912505 a=zee,b=wye,i=270,x=0.9840112531079188,y=0.03199538649369371 a=pan,b=zee,i=271,x=0.38241767385691083,y=0.47652036205919546 a=zee,b=eks,i=272,x=0.5076219094472946,y=0.8598422972471865 a=wye,b=eks,i=273,x=0.4666963378862372,y=0.8511149275440506 a=eks,b=pan,i=274,x=0.5094754996388772,y=0.8630831763542761 a=pan,b=pan,i=275,x=0.0702163840810267,y=0.49744457340186665 a=zee,b=eks,i=276,x=0.7494501132627315,y=0.831480047566556 a=hat,b=eks,i=277,x=0.9160765564583604,y=0.9665017202156387 a=eks,b=wye,i=278,x=0.3405469715018894,y=0.39395981360241694 a=hat,b=wye,i=279,x=0.7709353111571556,y=0.0741458017139579 a=hat,b=zee,i=280,x=0.30432388754514095,y=0.9094986664334528 a=pan,b=wye,i=281,x=0.2807837856477664,y=0.5185246955685402 a=pan,b=wye,i=282,x=0.5934682340749541,y=0.33551685400674336 a=wye,b=eks,i=283,x=0.3857770915059473,y=0.2520288213780115 a=eks,b=hat,i=284,x=0.2823409534969953,y=0.6424410943891458 a=hat,b=hat,i=285,x=0.5231416402386272,y=0.8268208737366626 a=pan,b=pan,i=286,x=0.7741141348990104,y=0.22151996054945777 a=zee,b=zee,i=287,x=0.6530502437373199,y=0.28290337083561623 a=hat,b=wye,i=288,x=0.41079993080494803,y=0.6788656658934381 a=wye,b=zee,i=289,x=0.6118394231953472,y=0.2017219713934819 a=wye,b=zee,i=290,x=0.3867610140403043,y=0.5119527530254661 a=eks,b=wye,i=291,x=0.2544198663482523,y=0.9572070479148829 a=hat,b=wye,i=292,x=0.7857064933058493,y=0.5074038206162027 a=wye,b=wye,i=293,x=0.48768027264524494,y=0.858140960943469 a=hat,b=zee,i=294,x=0.3704436769585995,y=0.3120229742987346 a=eks,b=zee,i=295,x=0.4706744506967422,y=0.5788534321133716 a=zee,b=hat,i=296,x=0.014194623144548224,y=0.5791381505013093 a=eks,b=wye,i=297,x=0.15536712579543976,y=0.24068588834787485 a=pan,b=wye,i=298,x=0.2554134483434475,y=0.5924810928892916 a=zee,b=eks,i=299,x=0.8277425415026218,y=0.27844715446692714 a=pan,b=hat,i=300,x=0.7146992829593928,y=0.5429822061061883 a=zee,b=eks,i=301,x=0.30731567290334727,y=0.5306701215524663 a=zee,b=pan,i=302,x=0.7544266351625367,y=0.36462424597130505 a=pan,b=pan,i=303,x=0.9181020134419905,y=0.081593490099233 a=eks,b=eks,i=304,x=0.7883980268101866,y=0.23415186590563442 a=wye,b=pan,i=305,x=0.5103104415224277,y=0.6005096012353242 a=hat,b=zee,i=306,x=0.9883564018988095,y=0.42316915798436483 a=wye,b=eks,i=307,x=0.6064616942445623,y=0.565814763986132 a=hat,b=eks,i=308,x=0.40085643331635357,y=0.09395240921387538 a=pan,b=pan,i=309,x=0.5155063246540209,y=0.1492080054471291 a=zee,b=pan,i=310,x=0.5166885866040305,y=0.05595794333763471 a=eks,b=eks,i=311,x=0.09369987234653387,y=0.06802932452953492 a=wye,b=zee,i=312,x=0.07612086875946633,y=0.27326136662066614 a=zee,b=eks,i=313,x=0.25858901604075357,y=0.8923698739553502 a=zee,b=pan,i=314,x=0.906390102311296,y=0.454409013999299 a=hat,b=zee,i=315,x=0.34523405773089744,y=0.4354275687352226 a=zee,b=hat,i=316,x=0.13504220690406277,y=0.3795391182446578 a=eks,b=pan,i=317,x=0.46957588924343485,y=0.3400251823752689 a=wye,b=hat,i=318,x=0.18637343210075064,y=0.45983893886751714 a=pan,b=zee,i=319,x=0.16606734288775093,y=0.21473289889901537 a=zee,b=pan,i=320,x=0.8307425029665492,y=0.9687981266665243 a=zee,b=zee,i=321,x=0.6999788077300872,y=0.526382289897085 a=hat,b=eks,i=322,x=0.9979624896088678,y=0.38870780074027156 a=wye,b=zee,i=323,x=0.7167871674039571,y=0.8146661281584913 a=wye,b=wye,i=324,x=0.22862799493809793,y=0.45776956542633673 a=hat,b=hat,i=325,x=0.8502045677344342,y=0.06531154070205691 a=wye,b=pan,i=326,x=0.5817376394212832,y=0.2811644998873859 a=zee,b=zee,i=327,x=0.1254581943608959,y=0.01871101782750706 a=eks,b=pan,i=328,x=0.28146620713469994,y=0.45414955407945334 a=pan,b=eks,i=329,x=0.03763317797683374,y=0.2401750869051401 a=pan,b=pan,i=330,x=0.27222804399530887,y=0.8283442325329333 a=wye,b=hat,i=331,x=0.862986205564722,y=0.021211611355487214 a=wye,b=hat,i=332,x=0.5529572417601349,y=0.10365182374492421 a=eks,b=hat,i=333,x=0.0677128764291699,y=0.13888954761924865 a=hat,b=hat,i=334,x=0.8122872254151258,y=0.9343598605592562 a=wye,b=wye,i=335,x=0.3136448355146325,y=0.3030034178002945 a=wye,b=eks,i=336,x=0.3723857599541325,y=0.12311828419230408 a=wye,b=eks,i=337,x=0.8517094711110174,y=0.7107950535254092 a=hat,b=wye,i=338,x=0.29886440908142087,y=0.44199727275540557 a=eks,b=zee,i=339,x=0.4583899635695151,y=0.06228530919187403 a=wye,b=eks,i=340,x=0.23528308849163693,y=0.3882734087125834 a=zee,b=eks,i=341,x=0.6862997171756073,y=0.15490090302333992 a=pan,b=eks,i=342,x=0.23702739214960689,y=0.13214761320752622 a=pan,b=wye,i=343,x=0.2724033449540535,y=0.45196387793887527 a=eks,b=hat,i=344,x=0.6604478311777118,y=0.8554572649437313 a=wye,b=wye,i=345,x=0.11573898528830462,y=0.7254541105786084 a=eks,b=eks,i=346,x=0.4314505110520016,y=0.35990136288181707 a=eks,b=wye,i=347,x=0.013154121167666677,y=0.8417854982925147 a=pan,b=hat,i=348,x=0.14077282669103053,y=0.6589658883444618 a=wye,b=wye,i=349,x=0.4473451552346923,y=0.560474868919231 a=pan,b=eks,i=350,x=0.7749620340665812,y=0.6934753745173732 a=hat,b=hat,i=351,x=0.12676653838858187,y=0.7306420663956253 a=eks,b=eks,i=352,x=0.8908223033829336,y=0.756634722087033 a=wye,b=wye,i=353,x=0.3561234723336817,y=0.25848510016885773 a=wye,b=zee,i=354,x=0.07167250764974309,y=0.04755739805455228 a=eks,b=pan,i=355,x=0.6260379271888249,y=0.9999648102177897 a=wye,b=eks,i=356,x=0.9105767596182323,y=0.6275830055247574 a=hat,b=pan,i=357,x=0.584955714773423,y=0.2694061184561868 a=pan,b=eks,i=358,x=0.7793042404385853,y=0.3575901643950514 a=wye,b=pan,i=359,x=0.46013788462671257,y=0.07923543496739904 a=hat,b=pan,i=360,x=0.8209514688962976,y=0.322642334738109 a=eks,b=zee,i=361,x=0.43390275775283316,y=0.6995243187004873 a=eks,b=hat,i=362,x=0.9858910807074641,y=0.6063471357443468 a=zee,b=eks,i=363,x=0.0603319537288447,y=0.903548344851872 a=hat,b=pan,i=364,x=0.22048203347659634,y=0.9648789798257121 a=eks,b=zee,i=365,x=0.2429839206497697,y=0.5838305480202817 a=wye,b=wye,i=366,x=0.8697917247196751,y=0.11967963730609776 a=wye,b=wye,i=367,x=0.09106459676772116,y=0.7044423738663792 a=pan,b=eks,i=368,x=0.3244982645940453,y=0.8587867062845185 a=hat,b=zee,i=369,x=0.18008064179308536,y=0.31358866392662854 a=hat,b=zee,i=370,x=0.7032327626709055,y=0.4844486606638011 a=hat,b=wye,i=371,x=0.48451798820346725,y=0.08468945923087656 a=zee,b=hat,i=372,x=0.8713237021766693,y=0.18775438815480894 a=wye,b=hat,i=373,x=0.9062681519121573,y=0.6942343130437282 a=pan,b=hat,i=374,x=0.8711355253639088,y=0.21056604953749913 a=hat,b=zee,i=375,x=0.5411012705685904,y=0.49472395657244717 a=wye,b=pan,i=376,x=0.9148906431225965,y=0.6865707031323998 a=pan,b=zee,i=377,x=0.0873375214879103,y=0.9512779365638556 a=pan,b=zee,i=378,x=0.30162069682241655,y=0.59487547378256 a=hat,b=wye,i=379,x=0.723368325539696,y=0.9239506513259356 a=wye,b=hat,i=380,x=0.3284426805925267,y=0.8338493039051695 a=pan,b=wye,i=381,x=0.5162110464238533,y=0.028931464336820256 a=pan,b=wye,i=382,x=0.10290553602186514,y=0.15037258795056763 a=wye,b=wye,i=383,x=0.5865652699352844,y=0.14421401993609984 a=pan,b=zee,i=384,x=0.5491251090567257,y=0.9145935172366898 a=hat,b=eks,i=385,x=0.8339951693283406,y=0.3033056717379309 a=hat,b=wye,i=386,x=0.7028181061111627,y=0.3480791920548796 a=eks,b=wye,i=387,x=0.5486856774729921,y=0.46054237397329445 a=wye,b=eks,i=388,x=0.5468979682673912,y=0.5716892746572024 a=wye,b=pan,i=389,x=0.8711354046280742,y=0.7000550458179466 a=pan,b=zee,i=390,x=0.32965901763834493,y=0.4764401595448211 a=pan,b=wye,i=391,x=0.8693210254564347,y=0.39042419999368405 a=hat,b=eks,i=392,x=0.2668797007178766,y=0.9538969507044115 a=zee,b=eks,i=393,x=0.6953842859899757,y=0.9546625350220701 a=eks,b=hat,i=394,x=0.48773327214873685,y=0.6690593283014772 a=wye,b=eks,i=395,x=0.5496441289397975,y=0.9130998398573059 a=pan,b=eks,i=396,x=0.12088261778903142,y=0.2915014516366682 a=pan,b=pan,i=397,x=0.6527193676882986,y=0.5140617542371629 a=pan,b=pan,i=398,x=0.7206692031862747,y=0.4350967619148699 a=eks,b=eks,i=399,x=0.010510711223853386,y=0.08397157710064007 a=wye,b=zee,i=400,x=0.3788030627053418,y=0.7831833396943373 a=eks,b=pan,i=401,x=0.08749968996168989,y=0.3703456609602497 a=eks,b=wye,i=402,x=0.9870844142664434,y=0.07570772729385356 a=zee,b=hat,i=403,x=0.8371422088541587,y=0.9376680469763548 a=eks,b=wye,i=404,x=0.9276329844702215,y=0.30151980049765137 a=wye,b=wye,i=405,x=0.5955452707872064,y=0.5663276615611866 a=hat,b=wye,i=406,x=0.3016062899704931,y=0.1481359817881971 a=hat,b=pan,i=407,x=0.3557842656104653,y=0.8619332107179143 a=zee,b=hat,i=408,x=0.13829592936600588,y=0.4643427499672679 a=zee,b=zee,i=409,x=0.3885779964636952,y=0.8355517296208552 a=pan,b=pan,i=410,x=0.3369457823719886,y=0.6595559599218499 a=hat,b=pan,i=411,x=0.130208615128796,y=0.8157820943662931 a=zee,b=hat,i=412,x=0.5684534581822444,y=0.7576411674301173 a=wye,b=wye,i=413,x=0.1924325306941328,y=0.7584253339041852 a=pan,b=zee,i=414,x=0.09069900090430805,y=0.8557236931723043 a=hat,b=pan,i=415,x=0.9713015252603615,y=0.4287777397307879 a=wye,b=pan,i=416,x=0.8898988612865336,y=0.8930372261944983 a=wye,b=eks,i=417,x=0.9035749108061284,y=0.11475796206309319 a=zee,b=zee,i=418,x=0.36259161480392366,y=0.03106838412360613 a=zee,b=eks,i=419,x=0.9669197256156522,y=0.9525495700296412 a=zee,b=hat,i=420,x=0.2472176643017414,y=0.4766709326963189 a=hat,b=pan,i=421,x=0.5484055610018505,y=0.7401624563813598 a=wye,b=eks,i=422,x=0.9843960933372673,y=0.8274060260108933 a=pan,b=pan,i=423,x=0.08736573145179394,y=0.47080422361654306 a=pan,b=hat,i=424,x=0.41967399152692275,y=0.11281967088191636 a=eks,b=zee,i=425,x=0.1541100762311376,y=0.2899666127124777 a=wye,b=wye,i=426,x=0.8189862069673424,y=0.04342559105332089 a=pan,b=wye,i=427,x=0.42286545073700454,y=0.4861336428493519 a=pan,b=pan,i=428,x=0.8513998866661314,y=0.18344030684570167 a=eks,b=zee,i=429,x=0.10194433521396717,y=0.20006319684657992 a=eks,b=wye,i=430,x=0.5857626187839062,y=0.5321382987939495 a=zee,b=eks,i=431,x=0.8583324116859721,y=0.994808666622831 a=eks,b=eks,i=432,x=0.7853965492176864,y=0.9164907493679918 a=wye,b=hat,i=433,x=0.1717036971229997,y=0.820252389423276 a=pan,b=zee,i=434,x=0.3719511404416881,y=0.9187328704871145 a=hat,b=hat,i=435,x=0.02744685418877102,y=0.6376228704372093 a=eks,b=eks,i=436,x=0.6933382044724179,y=0.6338292052517879 a=wye,b=pan,i=437,x=0.37712852260119445,y=0.2533800875229283 a=zee,b=hat,i=438,x=0.3425559514322971,y=0.7292109440844495 a=zee,b=wye,i=439,x=0.6058194548394703,y=0.1349506589946292 a=wye,b=wye,i=440,x=0.33549631716864114,y=0.5044355487644854 a=zee,b=pan,i=441,x=0.6917806418576951,y=0.3830829559702531 a=pan,b=eks,i=442,x=0.3051229752913909,y=0.3927572304818523 a=hat,b=eks,i=443,x=0.35262831982100495,y=0.5903148558170942 a=wye,b=hat,i=444,x=0.009596883381098431,y=0.7627826236742389 a=hat,b=pan,i=445,x=0.693707602798371,y=0.9355332457358334 a=eks,b=eks,i=446,x=0.32733245362496055,y=0.5235444779640992 a=zee,b=eks,i=447,x=0.31894704216497904,y=0.8410708131567204 a=hat,b=eks,i=448,x=0.18956024307293828,y=0.7651866504059165 a=zee,b=wye,i=449,x=0.8505833795792004,y=0.9244534714701724 a=eks,b=wye,i=450,x=0.6844926010909408,y=0.614368249300009 a=hat,b=pan,i=451,x=0.6296608646086276,y=0.4470390043301713 a=pan,b=pan,i=452,x=0.5045572974857859,y=0.4793103881363998 a=hat,b=wye,i=453,x=4.509679127584487e-05,y=0.22031599198733764 a=wye,b=wye,i=454,x=0.2443606067405415,y=0.6398645261834082 a=wye,b=wye,i=455,x=0.804633328675182,y=0.48300382684775944 a=eks,b=zee,i=456,x=0.410350850017583,y=0.9892210383992472 a=wye,b=hat,i=457,x=0.0933236073619339,y=0.9291691566694624 a=zee,b=zee,i=458,x=0.4844711931621539,y=0.27495542782645344 a=eks,b=eks,i=459,x=0.3611062645335037,y=0.40226115300495247 a=pan,b=eks,i=460,x=0.8223780119629852,y=0.9126194557839794 a=hat,b=eks,i=461,x=0.3252432769092649,y=0.658382796137213 a=zee,b=wye,i=462,x=0.5396036185572467,y=0.25336124010413796 a=hat,b=wye,i=463,x=0.5222301823622756,y=0.38087060395976524 a=pan,b=hat,i=464,x=0.7246049387606904,y=0.45691838399060136 a=hat,b=pan,i=465,x=0.9995625801977208,y=0.23491153961213218 a=hat,b=wye,i=466,x=0.4276402941162851,y=0.029924580250603294 a=wye,b=hat,i=467,x=0.8502632858410699,y=0.22370398176509754 a=wye,b=zee,i=468,x=0.6372967659876994,y=0.024138253192505066 a=eks,b=eks,i=469,x=0.12954404025896205,y=0.13771358880489826 a=pan,b=eks,i=470,x=0.6368746235564642,y=0.31586391338281394 a=eks,b=hat,i=471,x=0.7738089394551085,y=0.4919427799587256 a=zee,b=hat,i=472,x=0.5201558372951883,y=0.5500922568519445 a=pan,b=zee,i=473,x=0.28235480114669276,y=0.01789197833877909 a=hat,b=zee,i=474,x=0.9737504172221616,y=0.5620581498765591 a=wye,b=wye,i=475,x=0.39240247578786536,y=0.7480836274059417 a=wye,b=pan,i=476,x=0.7337177223414596,y=0.33451199751230254 a=eks,b=eks,i=477,x=0.034584510761659026,y=0.43469127809305075 a=pan,b=wye,i=478,x=0.9492235640609361,y=0.3382725473893562 a=eks,b=hat,i=479,x=0.935311382854882,y=0.5581569700476232 a=pan,b=eks,i=480,x=0.6265973838424406,y=0.7055055050235215 a=hat,b=pan,i=481,x=0.0821695972704326,y=0.35414544375322354 a=wye,b=zee,i=482,x=0.4898198409702952,y=0.9025273479460141 a=wye,b=hat,i=483,x=0.2316003856711063,y=0.43956136357576003 a=eks,b=eks,i=484,x=0.6641863677348001,y=0.6447460873709984 a=wye,b=wye,i=485,x=0.2617661797012584,y=0.42266716043415287 a=wye,b=hat,i=486,x=0.30133537944217137,y=0.10221649013386602 a=eks,b=hat,i=487,x=0.06223193198721644,y=0.9204160326915265 a=hat,b=pan,i=488,x=0.9232269980553737,y=0.6301846340531019 a=zee,b=eks,i=489,x=0.47256613643793366,y=0.043043925407927786 a=wye,b=eks,i=490,x=0.05509649068009248,y=0.7725681545197371 a=wye,b=pan,i=491,x=0.2513964759410543,y=0.029649890186790206 a=eks,b=zee,i=492,x=0.24404562827103082,y=0.21765361298784158 a=hat,b=eks,i=493,x=0.1664695548518379,y=0.24789421681152946 a=pan,b=eks,i=494,x=0.3713429019328153,y=0.6705235456747188 a=zee,b=eks,i=495,x=0.9946822846385448,y=0.4850476812126694 a=wye,b=wye,i=496,x=0.9274092551834339,y=0.2541879419841372 a=wye,b=wye,i=497,x=0.7021621810855977,y=0.533290838271892 a=eks,b=eks,i=498,x=0.7227433480694091,y=0.6862413971745326 a=zee,b=zee,i=499,x=0.36612213225774104,y=0.6372766826351961 a=zee,b=pan,i=500,x=0.9372377490487999,y=0.5618667924767166 a=eks,b=pan,i=501,x=0.040475122297163324,y=0.16567765824398517 a=hat,b=wye,i=502,x=0.6077314844130164,y=0.768942559474086 a=pan,b=pan,i=503,x=0.0738664869271265,y=0.25330608830961776 a=pan,b=hat,i=504,x=0.25531331734422,y=0.7865269588902073 a=eks,b=wye,i=505,x=0.910806292687196,y=0.9026141937080411 a=hat,b=pan,i=506,x=0.15630232440709246,y=0.9158685116698817 a=eks,b=hat,i=507,x=0.5820790015257209,y=0.07776020965028863 a=pan,b=wye,i=508,x=0.9048575733678795,y=0.2624876849034098 a=pan,b=pan,i=509,x=0.30214111076722505,y=0.004555052573727347 a=eks,b=eks,i=510,x=0.2716828558768003,y=0.8096330043733283 a=wye,b=pan,i=511,x=0.16150441052668496,y=0.9285095431973928 a=zee,b=pan,i=512,x=0.19477333058846336,y=0.2603817709639791 a=eks,b=eks,i=513,x=0.31922688479267713,y=0.834593837944139 a=hat,b=zee,i=514,x=0.3540200248392754,y=0.2390584570033465 a=pan,b=hat,i=515,x=0.20952222920525165,y=0.7943223745285899 a=wye,b=hat,i=516,x=0.3140651518806169,y=0.8926293957852705 a=hat,b=zee,i=517,x=0.49137770000060343,y=0.35141387324505546 a=eks,b=zee,i=518,x=0.2568385171206745,y=0.5364889783697552 a=hat,b=pan,i=519,x=0.10212966989515981,y=0.16533265211820058 a=pan,b=pan,i=520,x=0.012153536247427765,y=0.5649175470315574 a=zee,b=hat,i=521,x=0.3838787804586675,y=0.8057523001988509 a=eks,b=pan,i=522,x=0.28735731367601225,y=0.01067207233763956 a=zee,b=wye,i=523,x=0.34414490686076227,y=0.26451700279951407 a=zee,b=eks,i=524,x=0.07661268800300436,y=0.336140096726808 a=zee,b=zee,i=525,x=0.2340021990274821,y=0.19565171550317406 a=eks,b=pan,i=526,x=0.9916766172123481,y=0.4941629586579006 a=wye,b=pan,i=527,x=0.23490598090770587,y=0.04525601514058908 a=eks,b=hat,i=528,x=0.558596725535886,y=0.18453457803026696 a=pan,b=wye,i=529,x=0.25303243992392954,y=0.24620118020872683 a=zee,b=zee,i=530,x=0.8324822558401548,y=0.6988570770856138 a=zee,b=hat,i=531,x=0.008609039703687982,y=0.5468838181663499 a=wye,b=pan,i=532,x=0.6825242751147447,y=0.4637231032445399 a=pan,b=zee,i=533,x=0.7751095714402214,y=0.5255361584302058 a=eks,b=zee,i=534,x=0.45468067939968737,y=0.6307288279730315 a=eks,b=zee,i=535,x=0.918189166469818,y=0.9631682259880161 a=zee,b=eks,i=536,x=0.9772047656933902,y=0.27024499862207607 a=hat,b=wye,i=537,x=0.05229927642142651,y=0.556739261699473 a=eks,b=eks,i=538,x=0.6478937309967303,y=0.8641203708540487 a=hat,b=pan,i=539,x=0.7269218850428996,y=0.48514423955986363 a=hat,b=pan,i=540,x=0.7444966092534115,y=0.8005631784590818 a=wye,b=eks,i=541,x=0.31793693438539106,y=0.5338521836000718 a=pan,b=zee,i=542,x=0.45523794139189355,y=0.7625878689224138 a=wye,b=zee,i=543,x=0.7175140108300609,y=0.47463314228548703 a=pan,b=eks,i=544,x=0.3070977911148097,y=0.8601511205546479 a=eks,b=pan,i=545,x=0.6594595904219487,y=0.9953938324572855 a=pan,b=pan,i=546,x=0.6157989578235565,y=0.5516616028345289 a=eks,b=hat,i=547,x=0.9313805274362773,y=0.08303742296566352 a=zee,b=zee,i=548,x=0.9236546276965072,y=0.7185917789599708 a=zee,b=hat,i=549,x=0.10683412342384302,y=0.3609954494938745 a=zee,b=zee,i=550,x=0.442695858154603,y=0.2279810907065235 a=hat,b=hat,i=551,x=0.010195105734865595,y=0.8966350444752939 a=hat,b=hat,i=552,x=0.23961750012587524,y=0.7097949558865199 a=hat,b=wye,i=553,x=0.6455436846500622,y=0.18485559566207277 a=zee,b=eks,i=554,x=0.06517756796746732,y=0.8796685374823151 a=zee,b=zee,i=555,x=0.42969241921044865,y=0.5290835130803165 a=hat,b=pan,i=556,x=0.6486062750649167,y=0.7897824130903452 a=zee,b=pan,i=557,x=0.1878359832100659,y=0.36569848741631705 a=wye,b=wye,i=558,x=0.44297135060478476,y=0.5083526674553874 a=eks,b=hat,i=559,x=0.27722769169135486,y=0.6987550099842482 a=eks,b=zee,i=560,x=0.24564874858670038,y=0.8997800191444999 a=pan,b=wye,i=561,x=0.23019585224736527,y=0.33146344086760515 a=wye,b=zee,i=562,x=0.9090864712373032,y=0.6795157215425431 a=eks,b=pan,i=563,x=0.595802702383979,y=0.168651831473682 a=hat,b=zee,i=564,x=0.7039566464970486,y=0.11164900949647594 a=zee,b=eks,i=565,x=0.5452772873196364,y=0.39972630770376316 a=wye,b=hat,i=566,x=0.5358639536626888,y=0.7343387003323596 a=pan,b=zee,i=567,x=0.36579393243898306,y=0.7559831353974735 a=eks,b=pan,i=568,x=0.9357934717739306,y=0.5799507923614251 a=wye,b=wye,i=569,x=0.7665973069675542,y=0.7195592313665612 a=pan,b=hat,i=570,x=0.38210149896595413,y=0.6304766007845428 a=hat,b=zee,i=571,x=0.26634229030281786,y=0.973201156636735 a=wye,b=pan,i=572,x=0.21135242286079792,y=0.8934489624895702 a=eks,b=zee,i=573,x=0.9268019021927346,y=0.17379821868719336 a=pan,b=pan,i=574,x=0.5760503711916657,y=0.25841636920363253 a=pan,b=wye,i=575,x=0.21812558940117743,y=0.3918449054425934 a=hat,b=wye,i=576,x=0.9187805829729324,y=0.7265918618789776 a=eks,b=eks,i=577,x=0.6757641755808136,y=0.8438941757795644 a=eks,b=pan,i=578,x=0.08138468100156837,y=0.7679042873713715 a=zee,b=pan,i=579,x=0.8628900762701416,y=0.49668430223471005 a=pan,b=wye,i=580,x=0.7375265988223096,y=0.28754696324486384 a=zee,b=zee,i=581,x=0.03169831018517821,y=0.26542940289146955 a=hat,b=eks,i=582,x=0.15837738839177617,y=0.04767102936713474 a=hat,b=eks,i=583,x=0.9124356938988999,y=0.43270325299399315 a=eks,b=hat,i=584,x=0.21498015726965602,y=0.7651057421754358 a=hat,b=zee,i=585,x=0.6805895701299852,y=0.9163445111607751 a=eks,b=wye,i=586,x=0.7911985256947109,y=0.29846866889111534 a=zee,b=pan,i=587,x=0.8338045555120547,y=0.18127234053022412 a=eks,b=pan,i=588,x=0.2983121220479472,y=0.7836442261015891 a=pan,b=wye,i=589,x=0.8045092117185423,y=0.9810352594851226 a=eks,b=hat,i=590,x=0.17485208172241573,y=0.10386578574214755 a=wye,b=zee,i=591,x=0.7581719018917179,y=0.16248881933435744 a=hat,b=wye,i=592,x=0.25971796023192173,y=0.17042472633318229 a=zee,b=hat,i=593,x=0.05696407643477175,y=0.6739629581626518 a=zee,b=eks,i=594,x=0.7405522732897065,y=0.31187891301120196 a=zee,b=eks,i=595,x=0.1915646079106995,y=0.9366091103378753 a=zee,b=eks,i=596,x=0.9553146355738393,y=0.47618665485485456 a=wye,b=pan,i=597,x=0.9041321135345515,y=0.7679179807567709 a=hat,b=wye,i=598,x=0.3095910881025504,y=0.8653973492352675 a=wye,b=hat,i=599,x=0.9310931043540538,y=0.9627637520286313 a=eks,b=zee,i=600,x=0.10930837103642799,y=0.734892377459777 a=wye,b=pan,i=601,x=0.10514810449108858,y=0.5812271144341119 a=pan,b=zee,i=602,x=0.9884538231531689,y=0.9826428169828403 a=zee,b=hat,i=603,x=0.04308972133597455,y=0.5287126434418946 a=hat,b=pan,i=604,x=0.43188828562650494,y=0.050660555822547026 a=pan,b=zee,i=605,x=0.2529032876659366,y=0.3388959543441078 a=eks,b=eks,i=606,x=0.35689384699612214,y=0.4336296598478725 a=zee,b=zee,i=607,x=0.06487858333497942,y=0.9820515846728632 a=hat,b=wye,i=608,x=0.3631005984856752,y=0.17908512378632557 a=zee,b=eks,i=609,x=0.0885240972512874,y=0.11687754329610434 a=eks,b=wye,i=610,x=0.976870279166798,y=0.979024408220298 a=hat,b=eks,i=611,x=0.22058278727333458,y=0.23176980505367228 a=pan,b=pan,i=612,x=0.5001009219306088,y=0.844066356281099 a=zee,b=zee,i=613,x=0.30995155197043656,y=0.7020213088533442 a=pan,b=eks,i=614,x=0.3108839226386939,y=0.3561979428678962 a=wye,b=eks,i=615,x=0.30764905368295004,y=0.3507626708329916 a=wye,b=hat,i=616,x=0.7717383349877469,y=0.1875503990617584 a=wye,b=eks,i=617,x=0.2660764665919485,y=0.145799475554256 a=eks,b=eks,i=618,x=0.697318049680538,y=0.8904258470184732 a=pan,b=hat,i=619,x=0.503320378593238,y=0.03835628235587274 a=eks,b=pan,i=620,x=0.9358015206061678,y=0.07000472867831498 a=wye,b=pan,i=621,x=0.9195273303281286,y=0.29958433313761934 a=hat,b=eks,i=622,x=0.6369034391881591,y=0.40912695001571486 a=zee,b=hat,i=623,x=0.3258804550058424,y=0.78858008240255 a=zee,b=hat,i=624,x=0.04964230770489264,y=0.579602188490132 a=pan,b=pan,i=625,x=0.6915515843242978,y=0.6178010854014475 a=pan,b=eks,i=626,x=0.41509674152822296,y=0.9607620788899446 a=hat,b=wye,i=627,x=0.9225950318933018,y=0.46973980998460607 a=wye,b=wye,i=628,x=0.6670242157242242,y=0.32410876974705904 a=wye,b=wye,i=629,x=0.0503400168303868,y=0.10527602332963393 a=wye,b=pan,i=630,x=0.6992730519827314,y=0.21425077312475782 a=pan,b=pan,i=631,x=0.782561530337917,y=0.3007736131403983 a=hat,b=wye,i=632,x=0.5674934046837635,y=0.8372958944262796 a=eks,b=wye,i=633,x=0.9138839617434728,y=0.031060548633509377 a=zee,b=hat,i=634,x=0.7745019360438186,y=0.3417641107496465 a=pan,b=wye,i=635,x=0.00861695712771493,y=0.5441803604064096 a=hat,b=zee,i=636,x=0.20399264976283815,y=0.7450909531960087 a=eks,b=wye,i=637,x=0.10597293490004256,y=0.20904153809081627 a=zee,b=zee,i=638,x=0.6998724502294686,y=0.15842755789229168 a=wye,b=pan,i=639,x=0.6297328922259222,y=0.24669534343310429 a=pan,b=wye,i=640,x=0.5760120638145232,y=0.6662486414541403 a=zee,b=wye,i=641,x=0.903530980816814,y=0.08429459129055339 a=pan,b=zee,i=642,x=0.6222272826627048,y=0.18325502513152692 a=wye,b=zee,i=643,x=0.8440287778509163,y=0.08413199380954395 a=hat,b=zee,i=644,x=0.9789858624275163,y=0.6867108424306388 a=eks,b=pan,i=645,x=0.28589757090653023,y=0.2874816869622683 a=pan,b=zee,i=646,x=0.03971681746631206,y=0.11488578458241061 a=pan,b=zee,i=647,x=0.9002505665510399,y=0.3919843474342828 a=pan,b=hat,i=648,x=0.6975350070264588,y=0.5434923294790459 a=wye,b=pan,i=649,x=0.017833700431765576,y=0.28497950273429307 a=wye,b=pan,i=650,x=0.8995516713685614,y=0.9709755173196244 a=eks,b=eks,i=651,x=0.23479328023133328,y=0.517141351688706 a=zee,b=pan,i=652,x=0.774338764727154,y=0.7866779831902309 a=pan,b=zee,i=653,x=0.598251646829306,y=0.798568072477333 a=pan,b=zee,i=654,x=0.5450721032047166,y=0.32230118106744865 a=hat,b=hat,i=655,x=0.43895262867533247,y=0.869617554872027 a=eks,b=zee,i=656,x=0.7342238031294267,y=0.6344399868216409 a=eks,b=eks,i=657,x=0.9526997294869483,y=0.6231118783065456 a=hat,b=pan,i=658,x=0.625646089688133,y=0.11860595050930467 a=eks,b=zee,i=659,x=0.5013803781985338,y=0.20397067203535713 a=zee,b=pan,i=660,x=0.3829079054237686,y=0.46767052095812467 a=eks,b=eks,i=661,x=0.16124263574065234,y=0.7861689392233051 a=hat,b=eks,i=662,x=0.8455895630959102,y=0.3950043508928123 a=pan,b=wye,i=663,x=0.4853719483437431,y=0.9100750401717121 a=zee,b=pan,i=664,x=0.3334670290589219,y=0.6393920946436594 a=eks,b=eks,i=665,x=0.5054850171460168,y=0.413768182196923 a=wye,b=hat,i=666,x=0.45353783164970474,y=0.530754898058723 a=eks,b=eks,i=667,x=0.656573731471621,y=0.902119091388546 a=wye,b=pan,i=668,x=0.04920210066939823,y=0.23851670466645347 a=hat,b=hat,i=669,x=0.6845954830331666,y=0.48983710746829556 a=eks,b=zee,i=670,x=0.36532897274847353,y=0.9866431832953275 a=pan,b=hat,i=671,x=0.6547944885588621,y=0.07142328653562735 a=wye,b=wye,i=672,x=0.7648029293390511,y=0.6650048997400388 a=pan,b=zee,i=673,x=0.8850456267920793,y=0.37595832006593455 a=wye,b=wye,i=674,x=0.07426167294984953,y=0.8983728711808775 a=zee,b=zee,i=675,x=0.14647630359578723,y=0.2444767037770159 a=wye,b=hat,i=676,x=0.6451848990883488,y=0.5038417150477158 a=zee,b=eks,i=677,x=0.4431725573720502,y=0.6602447847445098 a=hat,b=hat,i=678,x=0.2580287161696614,y=0.7294988098275678 a=wye,b=eks,i=679,x=0.36159847148560065,y=0.7499182579533756 a=eks,b=eks,i=680,x=0.0338572036055631,y=0.9757808949108091 a=eks,b=zee,i=681,x=0.8149561431006924,y=0.21088097822222962 a=wye,b=zee,i=682,x=0.7810987533825186,y=0.9667043995307188 a=eks,b=zee,i=683,x=0.587160737176585,y=0.03329448136151336 a=hat,b=eks,i=684,x=0.3749971755428878,y=0.21431876719781595 a=eks,b=hat,i=685,x=0.6737904998208634,y=0.019679445031305476 a=hat,b=eks,i=686,x=0.21050937771050438,y=0.41045403895167065 a=zee,b=wye,i=687,x=0.8487067932198148,y=0.11727125464987997 a=wye,b=eks,i=688,x=0.9002872154674284,y=0.42471026747794716 a=pan,b=eks,i=689,x=0.10444316592264569,y=0.8885602119427745 a=zee,b=wye,i=690,x=0.14854213084769508,y=0.9731706277100254 a=eks,b=zee,i=691,x=0.7240287030381926,y=0.79896437710086 a=hat,b=hat,i=692,x=0.14117333894379847,y=0.3225535116195155 a=zee,b=eks,i=693,x=0.27068880582424437,y=0.044369525310762326 a=eks,b=wye,i=694,x=0.1076349089443529,y=0.6101508286985079 a=zee,b=zee,i=695,x=0.9140507860836669,y=0.19365517291844658 a=hat,b=zee,i=696,x=0.16963322576469086,y=0.09487337662478568 a=hat,b=eks,i=697,x=0.8909103010365073,y=0.5323201554130181 a=hat,b=hat,i=698,x=0.07422312178663493,y=0.8831561730391124 a=pan,b=hat,i=699,x=0.44595497600145795,y=0.6267440405997144 a=eks,b=eks,i=700,x=0.09447912510249834,y=0.5957817269862618 a=eks,b=pan,i=701,x=0.8004210061445566,y=0.03952440744830843 a=pan,b=zee,i=702,x=0.8107677028439462,y=0.32429410872359143 a=zee,b=hat,i=703,x=0.2248043259303365,y=0.33203303056970623 a=wye,b=pan,i=704,x=0.595716356245294,y=0.004929607103288602 a=pan,b=eks,i=705,x=0.7388154708435315,y=0.797179757859978 a=pan,b=wye,i=706,x=0.5008032407057831,y=0.9591889291114695 a=pan,b=eks,i=707,x=0.9759907833320285,y=0.8936617707540555 a=pan,b=zee,i=708,x=0.7148877429133659,y=0.0667177678154226 a=hat,b=zee,i=709,x=0.5664816823643944,y=0.8967488777240636 a=wye,b=zee,i=710,x=0.8443019828048438,y=0.7860920608434899 a=hat,b=eks,i=711,x=0.6493317768253313,y=0.6921590557236297 a=eks,b=hat,i=712,x=0.7026564244799071,y=0.2532401255958231 a=hat,b=hat,i=713,x=0.34800467364944343,y=0.512231318502013 a=pan,b=wye,i=714,x=0.1707903602306352,y=0.1624539753347971 a=eks,b=hat,i=715,x=0.3702687648873617,y=0.5532443902814762 a=pan,b=hat,i=716,x=0.3526679330017216,y=0.9879415167199294 a=wye,b=hat,i=717,x=0.9126869246167464,y=0.8539144029222125 a=wye,b=eks,i=718,x=0.6170824308099435,y=0.42167938160852547 a=wye,b=zee,i=719,x=0.8648654985592689,y=0.744990377385103 a=wye,b=eks,i=720,x=0.0737982261184581,y=0.215040061968929 a=zee,b=eks,i=721,x=0.6857948820947404,y=0.24824277122401872 a=hat,b=pan,i=722,x=0.9288228199909815,y=0.2781250242506387 a=eks,b=hat,i=723,x=0.5223004827368406,y=0.7436988563433049 a=pan,b=zee,i=724,x=0.161391991386723,y=0.4896835486539596 a=zee,b=zee,i=725,x=0.6421372014622713,y=0.9769320758361035 a=hat,b=hat,i=726,x=0.6769964245482417,y=0.6143975572853417 a=hat,b=pan,i=727,x=0.07418538306763378,y=0.647862004010661 a=zee,b=pan,i=728,x=0.40960942207244977,y=0.4243129116901595 a=zee,b=hat,i=729,x=0.8560108659093649,y=0.11506232971202268 a=wye,b=wye,i=730,x=0.5648923679634816,y=0.23257155122856343 a=wye,b=hat,i=731,x=0.9839746222616559,y=0.2446478089699543 a=eks,b=zee,i=732,x=0.07883081296682193,y=0.6660416108034422 a=wye,b=zee,i=733,x=0.842462695985326,y=0.966657486505284 a=pan,b=wye,i=734,x=0.01934339909570837,y=0.05189496476807132 a=eks,b=wye,i=735,x=0.9417156459424341,y=0.9870712135656121 a=hat,b=hat,i=736,x=0.2947986604568096,y=0.9512796485274094 a=wye,b=pan,i=737,x=0.16300656842731953,y=0.3545653890588314 a=eks,b=zee,i=738,x=0.8977243371620829,y=0.5262722450488325 a=hat,b=zee,i=739,x=0.5948040912191594,y=0.3056178698423182 a=hat,b=wye,i=740,x=0.6686093454184745,y=0.6740449093675628 a=zee,b=pan,i=741,x=0.9598570146790528,y=0.6398488862754813 a=pan,b=wye,i=742,x=0.8257519339015849,y=0.693194093940406 a=eks,b=hat,i=743,x=0.04434098258715646,y=0.3266898058988358 a=zee,b=wye,i=744,x=0.7524245915453669,y=0.5461439986683315 a=pan,b=pan,i=745,x=0.6719897687291242,y=0.7565622573163691 a=eks,b=pan,i=746,x=0.916062376572181,y=0.886967557372127 a=eks,b=pan,i=747,x=0.40506409795178244,y=0.6998873497812762 a=pan,b=wye,i=748,x=0.5826370817680807,y=0.08078351188422772 a=pan,b=eks,i=749,x=0.8465950965363382,y=0.416842562059375 a=wye,b=pan,i=750,x=0.6658476587001316,y=0.5556451189688414 a=eks,b=eks,i=751,x=0.3242951995611114,y=0.5680663477563322 a=wye,b=wye,i=752,x=0.13191473062692816,y=0.19377767709093607 a=zee,b=eks,i=753,x=0.5186702283396277,y=0.5344580097568402 a=pan,b=eks,i=754,x=0.023312954423954868,y=0.13646462067848675 a=eks,b=eks,i=755,x=0.22961935180882087,y=0.16011525129191817 a=pan,b=zee,i=756,x=0.09666705485436378,y=0.3548198552440588 a=wye,b=wye,i=757,x=0.19425165484936957,y=0.9581201227608445 a=eks,b=wye,i=758,x=0.5362262223046377,y=0.5049539834712841 a=wye,b=zee,i=759,x=0.5321536977324647,y=0.369621860654502 a=hat,b=zee,i=760,x=0.7941529932304345,y=0.2064198694392868 a=wye,b=hat,i=761,x=0.38624241523517244,y=0.7325501625853548 a=zee,b=pan,i=762,x=0.9385694344762825,y=0.49700272359344677 a=eks,b=pan,i=763,x=0.3501489521153939,y=0.6398058286945986 a=wye,b=pan,i=764,x=0.16567218737817557,y=0.7953657761380494 a=eks,b=hat,i=765,x=0.324248802737786,y=0.8599723260499864 a=eks,b=eks,i=766,x=0.22335745734469326,y=0.21867582342847736 a=wye,b=wye,i=767,x=0.8255592677399582,y=0.2538516298356094 a=eks,b=hat,i=768,x=0.15841238344171704,y=0.574922286058442 a=eks,b=eks,i=769,x=0.18506419568907773,y=0.4760883565274585 a=hat,b=zee,i=770,x=0.18690741307246328,y=0.6711988977493772 a=hat,b=eks,i=771,x=0.9178219022568258,y=0.43350695723226085 a=wye,b=zee,i=772,x=0.23583751371437855,y=0.12279242944303292 a=hat,b=eks,i=773,x=0.26528801262285184,y=0.4010080804811049 a=eks,b=eks,i=774,x=0.6386491500093009,y=0.24632366540539852 a=hat,b=eks,i=775,x=0.03827924004922145,y=0.9441328448191567 a=wye,b=eks,i=776,x=0.9585382111164209,y=0.6306113838967866 a=zee,b=wye,i=777,x=0.7623811038765134,y=0.6139534724314861 a=wye,b=hat,i=778,x=0.19955726522431594,y=0.5077217624640397 a=zee,b=zee,i=779,x=0.3411759787401816,y=0.2865091416991973 a=hat,b=zee,i=780,x=0.5811342153834129,y=0.4772695688880223 a=hat,b=pan,i=781,x=0.1192837713483601,y=0.40681848859583813 a=hat,b=wye,i=782,x=0.721843867108292,y=0.44923817786818343 a=wye,b=wye,i=783,x=0.3438923976161088,y=0.5649145034717639 a=eks,b=eks,i=784,x=0.6165630308304775,y=0.3304084333387801 a=zee,b=eks,i=785,x=0.6562657631329122,y=0.8258194011693597 a=hat,b=hat,i=786,x=0.3439593168095797,y=0.8518997303215115 a=eks,b=zee,i=787,x=0.0654097106697118,y=0.4660389375188869 a=pan,b=eks,i=788,x=0.2217685316094703,y=0.16649100910012216 a=eks,b=hat,i=789,x=0.4717662995603106,y=0.44972566215644705 a=eks,b=hat,i=790,x=0.47887299708709874,y=0.7841667814595291 a=wye,b=wye,i=791,x=0.00519908348997844,y=0.3991391178091711 a=hat,b=hat,i=792,x=0.5475862720333128,y=0.9675473146380916 a=zee,b=wye,i=793,x=0.9545515061227288,y=0.8875064703498067 a=wye,b=hat,i=794,x=0.16854110528640676,y=0.23899152324736783 a=eks,b=hat,i=795,x=0.9414011524374403,y=0.38624947508331575 a=eks,b=eks,i=796,x=0.44475337389030567,y=0.3562483351552209 a=hat,b=zee,i=797,x=0.3458790979025249,y=0.10530555367157357 a=wye,b=hat,i=798,x=0.894955252691444,y=0.9020401281837919 a=zee,b=hat,i=799,x=0.6678020932140406,y=0.7272829012287039 a=pan,b=wye,i=800,x=0.6728857720452479,y=0.9063282177143175 a=pan,b=hat,i=801,x=0.6232260305196619,y=0.3246940048519549 a=hat,b=wye,i=802,x=0.6939811641375604,y=0.9772213376028769 a=wye,b=eks,i=803,x=0.735398041020814,y=0.43528061054041123 a=pan,b=wye,i=804,x=0.7553025953132643,y=0.12826679900502957 a=eks,b=eks,i=805,x=0.7970666568024275,y=0.7141982352996962 a=hat,b=hat,i=806,x=0.6283301745043451,y=0.2958341149885232 a=hat,b=pan,i=807,x=0.6054239018991081,y=0.44535311447129966 a=zee,b=pan,i=808,x=0.068327326345054,y=0.9193569789768139 a=wye,b=wye,i=809,x=0.779445087567334,y=0.6995188082196249 a=pan,b=eks,i=810,x=0.6751597242266821,y=0.5514064392004425 a=pan,b=eks,i=811,x=0.5542215714866076,y=0.14391751751745208 a=hat,b=zee,i=812,x=0.5623829182379033,y=0.0721774446182929 a=eks,b=wye,i=813,x=0.027045543431586827,y=0.5270107047302233 a=pan,b=pan,i=814,x=0.7042024611472535,y=0.5509286378129169 a=pan,b=eks,i=815,x=0.05860005161315873,y=0.0005735237078376976 a=eks,b=zee,i=816,x=0.11392244176975941,y=0.08027592413428164 a=hat,b=hat,i=817,x=0.2182634028675824,y=0.031522781055713156 a=hat,b=pan,i=818,x=0.5333781740115907,y=0.4837112511279462 a=zee,b=hat,i=819,x=0.062483279659384605,y=0.8930370625962232 a=eks,b=hat,i=820,x=0.6028476657314659,y=0.6800202871943302 a=pan,b=hat,i=821,x=0.11959405115201827,y=0.9706185345930702 a=eks,b=hat,i=822,x=0.2180916247267669,y=0.20200687440786602 a=hat,b=zee,i=823,x=0.4553739759143408,y=0.04377256284181141 a=eks,b=pan,i=824,x=0.14058200329018555,y=0.7690462771050751 a=wye,b=pan,i=825,x=0.6611884797250076,y=0.9588317557532128 a=zee,b=pan,i=826,x=0.2407553754423183,y=0.14438176167139094 a=zee,b=pan,i=827,x=0.5280509086050722,y=0.35353193017246765 a=pan,b=eks,i=828,x=0.9994029107062516,y=0.20066601756099478 a=pan,b=pan,i=829,x=0.9031593450788309,y=0.3797948680956209 a=eks,b=pan,i=830,x=0.36350612065623267,y=0.2886476639992571 a=eks,b=zee,i=831,x=0.692611920160873,y=0.26262694975977385 a=hat,b=wye,i=832,x=0.7659227499835054,y=0.6521346139410953 a=pan,b=zee,i=833,x=0.8267760334483312,y=0.8318269743977437 a=eks,b=eks,i=834,x=0.7372846052959475,y=0.386390580949861 a=zee,b=pan,i=835,x=0.9167189417830722,y=0.07204465286089479 a=zee,b=wye,i=836,x=0.5756190775565698,y=0.7938251688467333 a=wye,b=wye,i=837,x=0.2328642613637898,y=0.46278413120375006 a=eks,b=eks,i=838,x=0.7797750429004653,y=0.29884322034130906 a=pan,b=eks,i=839,x=0.8726738283401857,y=0.04628087648432999 a=zee,b=hat,i=840,x=0.6677673890093077,y=0.6533094635586054 a=hat,b=pan,i=841,x=0.4486203012761554,y=0.3566552462496445 a=eks,b=hat,i=842,x=0.4549321247838193,y=0.07592100983285954 a=wye,b=wye,i=843,x=0.255982822267825,y=0.3803102296515556 a=eks,b=hat,i=844,x=0.3446014862942576,y=0.7572793591602713 a=wye,b=eks,i=845,x=0.6203491211980909,y=0.15025452711014609 a=eks,b=zee,i=846,x=0.9460265533905371,y=0.45198587094481946 a=hat,b=wye,i=847,x=0.49389611860028626,y=0.07353689220151671 a=zee,b=pan,i=848,x=0.7169514982586007,y=0.9408480112735236 a=wye,b=wye,i=849,x=0.6446224014740414,y=0.11523766674998448 a=pan,b=eks,i=850,x=0.7274412652107003,y=0.6621932392565703 a=wye,b=pan,i=851,x=0.3263942251497617,y=0.9932583238060141 a=wye,b=eks,i=852,x=0.664738707605857,y=0.7223078050122264 a=eks,b=hat,i=853,x=0.1880170274631281,y=0.10968535421904191 a=hat,b=eks,i=854,x=0.6939278762348635,y=0.5313359369168281 a=hat,b=hat,i=855,x=0.7112683657239158,y=0.6136040745504255 a=zee,b=eks,i=856,x=0.5439786015377756,y=0.9686655026402698 a=zee,b=zee,i=857,x=0.10264607530788517,y=0.3331005309508399 a=eks,b=zee,i=858,x=0.484034536497318,y=0.5074658760998881 a=wye,b=hat,i=859,x=0.8335422363466695,y=0.3120932232687599 a=wye,b=zee,i=860,x=0.5661718614546278,y=0.008186918681462707 a=hat,b=pan,i=861,x=0.9969936112759107,y=0.21269969787446608 a=pan,b=wye,i=862,x=0.30274837710060487,y=0.015353477159141038 a=wye,b=pan,i=863,x=0.23680176335245073,y=0.23457864754397195 a=zee,b=zee,i=864,x=0.809561039932752,y=0.6017320599557826 a=wye,b=zee,i=865,x=0.7815565737026456,y=0.8572095724845105 a=eks,b=hat,i=866,x=0.5917695655140688,y=0.560162197865116 a=hat,b=zee,i=867,x=0.722695048982041,y=0.8684988555802282 a=wye,b=hat,i=868,x=0.21734964563610804,y=0.8045525190525901 a=wye,b=hat,i=869,x=0.226340504641239,y=0.6618680946496492 a=eks,b=wye,i=870,x=0.03466858500680492,y=0.5621939039921067 a=pan,b=wye,i=871,x=0.6789169629628927,y=0.5193967453982994 a=pan,b=pan,i=872,x=0.7564798789126915,y=0.7115590422599338 a=wye,b=hat,i=873,x=0.45127322199816233,y=0.7742566444517696 a=eks,b=wye,i=874,x=0.5403377945244225,y=0.16069845073082 a=pan,b=hat,i=875,x=0.1859774664492485,y=0.3619489833924334 a=wye,b=wye,i=876,x=0.4835086084877356,y=0.4540385079562712 a=wye,b=pan,i=877,x=0.27907367543536465,y=0.12385159649360233 a=hat,b=zee,i=878,x=0.3102237192022368,y=0.9669823901049626 a=eks,b=hat,i=879,x=0.6888483812825917,y=0.5505783461131407 a=hat,b=pan,i=880,x=0.9443559576513696,y=0.776626094540373 a=eks,b=pan,i=881,x=0.6733492820398447,y=0.11891510514178161 a=pan,b=pan,i=882,x=0.439665640988951,y=0.4549660840547012 a=pan,b=hat,i=883,x=0.5540100503192463,y=0.8429668921287791 a=pan,b=zee,i=884,x=0.9569511624197534,y=0.009698935906691575 a=zee,b=wye,i=885,x=0.4317067888424335,y=0.7251769880284373 a=eks,b=wye,i=886,x=0.3652904236362593,y=0.20906833314831175 a=pan,b=pan,i=887,x=0.6949995284041934,y=0.8053235553778822 a=pan,b=zee,i=888,x=0.7370727975606584,y=0.4485080316317849 a=wye,b=wye,i=889,x=0.9080280619248189,y=0.9139513254924729 a=pan,b=hat,i=890,x=0.680338712677067,y=0.010994432325418524 a=hat,b=eks,i=891,x=0.6355325141001417,y=0.07695298953416263 a=eks,b=wye,i=892,x=0.1376969209844151,y=0.834454990298031 a=eks,b=zee,i=893,x=0.9355755568148436,y=0.25640673765414823 a=zee,b=hat,i=894,x=0.06918579614388565,y=0.8717142673159294 a=pan,b=zee,i=895,x=0.9990440068491747,y=0.20478744699359197 a=eks,b=pan,i=896,x=0.18020508273454894,y=0.18233459061350799 a=zee,b=pan,i=897,x=0.16948195877360084,y=0.4673040380612351 a=pan,b=zee,i=898,x=0.048671024346735314,y=0.4634456617937973 a=eks,b=wye,i=899,x=0.6376504261357228,y=0.4968859553621585 a=wye,b=zee,i=900,x=0.0634446641763643,y=0.47070339237478154 a=hat,b=pan,i=901,x=0.3948962420926134,y=0.2858499628646297 a=zee,b=hat,i=902,x=0.792376744926382,y=0.7540301970987514 a=pan,b=zee,i=903,x=0.5150758332324689,y=0.8265689553462827 a=zee,b=pan,i=904,x=0.6774926045379539,y=0.2790431227538289 a=pan,b=wye,i=905,x=0.46948597026992234,y=0.6282160374404341 a=wye,b=zee,i=906,x=0.5370940115523006,y=0.1284825381186716 a=eks,b=wye,i=907,x=0.5764461281567995,y=0.6560112583406935 a=zee,b=hat,i=908,x=0.2293422544193603,y=0.5310403236033165 a=hat,b=pan,i=909,x=0.2565065893296261,y=0.3546175861833417 a=hat,b=zee,i=910,x=0.026474784279227448,y=0.7004167503216063 a=pan,b=eks,i=911,x=0.06608607463859384,y=0.07128733055849312 a=wye,b=eks,i=912,x=0.3364968005146698,y=0.5787883063495668 a=hat,b=wye,i=913,x=0.5696196789270859,y=0.5118141918287126 a=eks,b=zee,i=914,x=0.8582285128247622,y=0.7604153187806654 a=wye,b=eks,i=915,x=0.5460355036287519,y=0.8958184949801713 a=hat,b=pan,i=916,x=0.2607796424126346,y=0.2105454483785194 a=wye,b=hat,i=917,x=0.3846528045634492,y=0.3124085567677639 a=hat,b=eks,i=918,x=0.5027707430075526,y=0.4544234955959021 a=eks,b=pan,i=919,x=0.7703238268018578,y=0.11858518036609156 a=wye,b=eks,i=920,x=0.6878423136601669,y=0.10216851974973384 a=eks,b=zee,i=921,x=0.012096720577898457,y=0.6297080697429681 a=pan,b=eks,i=922,x=0.2886175127593028,y=0.828634782804935 a=wye,b=pan,i=923,x=0.9626100389715443,y=0.3905150319464591 a=hat,b=pan,i=924,x=0.3002347573504318,y=0.7414891858002532 a=pan,b=zee,i=925,x=0.3447367209775769,y=0.8487811195467444 a=zee,b=hat,i=926,x=0.3969942807955067,y=0.7524046203617899 a=zee,b=zee,i=927,x=0.7610101430574051,y=0.4964453780226331 a=hat,b=pan,i=928,x=0.9769401114714371,y=0.19866082639978944 a=hat,b=zee,i=929,x=0.9119484815981432,y=0.9002090722192556 a=eks,b=hat,i=930,x=0.28511500317711636,y=0.728558620027423 a=pan,b=hat,i=931,x=0.15134527475607873,y=0.348369087467138 a=zee,b=eks,i=932,x=0.7361189289061444,y=0.3847525716179372 a=wye,b=zee,i=933,x=0.3661453331509762,y=0.004152078250187152 a=wye,b=wye,i=934,x=0.447099608509545,y=0.17594771830007339 a=wye,b=zee,i=935,x=0.3196703223884384,y=0.8888974787225958 a=zee,b=zee,i=936,x=0.562838339421027,y=0.007778020871679225 a=zee,b=eks,i=937,x=0.02003336919176857,y=0.26669570512199325 a=eks,b=wye,i=938,x=0.3043257328168447,y=0.2906418445735329 a=zee,b=zee,i=939,x=0.8978345983120852,y=0.030447079101845298 a=eks,b=zee,i=940,x=0.5585422926486657,y=0.4978694410328127 a=hat,b=wye,i=941,x=0.5621962178745717,y=0.26772849156914025 a=hat,b=zee,i=942,x=0.6242711478551904,y=0.09401579423266704 a=eks,b=eks,i=943,x=0.27194272184638746,y=0.9612750351440212 a=hat,b=wye,i=944,x=0.8822781716699086,y=0.6067074807238132 a=zee,b=wye,i=945,x=0.7825493610673169,y=0.32373164668188725 a=wye,b=zee,i=946,x=0.1013010312091508,y=0.8534111346417461 a=zee,b=wye,i=947,x=0.8584260523164629,y=0.23498149964077852 a=zee,b=pan,i=948,x=0.7984764587459684,y=0.6810243958256237 a=wye,b=hat,i=949,x=0.23478741222352084,y=0.37065868020096504 a=hat,b=wye,i=950,x=0.09950476962568644,y=0.08527686061721151 a=wye,b=zee,i=951,x=0.032452509100876825,y=0.13213830932576387 a=pan,b=pan,i=952,x=0.20155399565096999,y=0.26323541426295427 a=zee,b=hat,i=953,x=0.7258512915506337,y=0.7130469035339413 a=wye,b=zee,i=954,x=0.5189900736412828,y=0.9806684784703058 a=pan,b=zee,i=955,x=0.6876410065228761,y=0.049081361078488706 a=eks,b=wye,i=956,x=0.8483404387366377,y=0.6963230727503091 a=hat,b=eks,i=957,x=0.7658922923332185,y=0.42890062704958776 a=hat,b=wye,i=958,x=0.5889300471089299,y=0.09950882081879164 a=zee,b=hat,i=959,x=0.5401768517178055,y=0.576926299555725 a=zee,b=pan,i=960,x=0.14284356858511216,y=0.7464892897966853 a=zee,b=hat,i=961,x=0.6778089684859776,y=0.0814354668691658 a=eks,b=wye,i=962,x=0.49553623626743193,y=0.9650390956306768 a=pan,b=eks,i=963,x=0.022898529014032887,y=0.8442755412229669 a=eks,b=pan,i=964,x=0.11974210479568592,y=0.1727873170586557 a=pan,b=eks,i=965,x=0.43364055944870217,y=0.9883467323590831 a=hat,b=eks,i=966,x=0.3126841836488823,y=0.8616419739774406 a=wye,b=zee,i=967,x=0.8957509371936184,y=0.6646859799560008 a=wye,b=pan,i=968,x=0.6531533778557712,y=0.8078705982263845 a=pan,b=pan,i=969,x=0.9309046826091119,y=0.16276567995818791 a=wye,b=eks,i=970,x=0.0003669282805145446,y=0.7009817497170139 a=pan,b=pan,i=971,x=0.48986271798634495,y=0.9495185819962723 a=zee,b=eks,i=972,x=0.25911127762915553,y=0.6423261731196327 a=pan,b=wye,i=973,x=0.31594050674870533,y=0.3202147086921625 a=wye,b=pan,i=974,x=0.10722011957438404,y=0.8335217073851289 a=wye,b=eks,i=975,x=0.22837011741983626,y=0.8508657508706551 a=hat,b=pan,i=976,x=0.2213905763595585,y=0.9144918892479273 a=wye,b=hat,i=977,x=0.8403881011140902,y=0.15373049137990247 a=wye,b=pan,i=978,x=0.2223195417593009,y=0.9927065687777529 a=pan,b=eks,i=979,x=0.3047140631616194,y=0.012239402814423261 a=pan,b=hat,i=980,x=0.08006366208466742,y=0.46683918475842656 a=zee,b=pan,i=981,x=0.1460023204833616,y=0.6268639860761865 a=zee,b=wye,i=982,x=0.37341981725134477,y=0.043362859112128116 a=pan,b=eks,i=983,x=0.23455765897855474,y=0.5826786823171225 a=eks,b=zee,i=984,x=0.1229552360203735,y=0.4375490388704373 a=eks,b=hat,i=985,x=0.011903992841803879,y=0.20158842970916258 a=zee,b=pan,i=986,x=0.36309769750156073,y=0.41372304201591836 a=zee,b=pan,i=987,x=0.2675153812056569,y=0.31944778253720596 a=zee,b=eks,i=988,x=0.4159116125988659,y=0.0527646250644187 a=zee,b=wye,i=989,x=0.8290703900542629,y=0.0029342637852388664 a=hat,b=hat,i=990,x=0.6968268719895765,y=0.7388049214848422 a=zee,b=eks,i=991,x=0.04205521417416125,y=0.7400694180318313 a=wye,b=hat,i=992,x=0.1082025069192426,y=0.382293188133744 a=pan,b=hat,i=993,x=0.9655911362500376,y=0.6528068171940502 a=pan,b=hat,i=994,x=0.06296083376713069,y=0.924782731671716 a=zee,b=hat,i=995,x=0.19931174025957066,y=0.6628915066032653 a=pan,b=pan,i=996,x=0.3896870360326876,y=0.7398938519226621 a=wye,b=pan,i=997,x=0.6473214345392985,y=0.1580211199769581 a=wye,b=wye,i=998,x=0.7054609891598416,y=0.11530820363956795 a=eks,b=wye,i=999,x=0.7530797661303167,y=0.7943533279150342 a=hat,b=hat,i=1000,x=0.27862167380000924,y=0.8957145512576364 a=pan,b=eks,i=1001,x=0.5972691205647312,y=0.4313550003841107 a=zee,b=wye,i=1002,x=0.27589217856931847,y=0.4784417775011829 a=pan,b=wye,i=1003,x=0.6022804421463093,y=0.15258107959053602 a=wye,b=hat,i=1004,x=0.7556173435575428,y=0.5360056181198413 a=wye,b=zee,i=1005,x=0.35533936034338987,y=0.5883076566864401 a=pan,b=hat,i=1006,x=0.4446033039150368,y=0.9979731391657491 a=zee,b=wye,i=1007,x=0.6726350502133611,y=0.9779321628810685 a=hat,b=eks,i=1008,x=0.19927285497348735,y=0.22487729305731685 a=eks,b=zee,i=1009,x=0.6292400672017409,y=0.344666919378786 a=hat,b=eks,i=1010,x=0.32802933242359655,y=0.2955845001645365 a=pan,b=eks,i=1011,x=0.7217042904394803,y=0.2232569692246722 a=pan,b=zee,i=1012,x=0.5003888723420944,y=0.03004905415183634 a=hat,b=zee,i=1013,x=0.6449280930394627,y=0.012641120692678642 a=pan,b=zee,i=1014,x=0.2224977060602883,y=0.1335049252959022 a=eks,b=eks,i=1015,x=0.5441091824904251,y=0.27206919115344796 a=wye,b=zee,i=1016,x=0.17366739952321908,y=0.937706710544049 a=pan,b=zee,i=1017,x=0.787790582328257,y=0.844311491671081 a=pan,b=eks,i=1018,x=0.015795494747047223,y=0.8254990704093889 a=pan,b=zee,i=1019,x=0.23762521364858846,y=0.8673593962442501 a=eks,b=pan,i=1020,x=0.902360533880021,y=0.7028811168584178 a=zee,b=wye,i=1021,x=0.008857541583488837,y=0.21509348675167894 a=eks,b=wye,i=1022,x=0.33588773148782947,y=0.40718964301240856 a=zee,b=eks,i=1023,x=0.21227584421525614,y=0.7891727565371357 a=zee,b=eks,i=1024,x=0.38754385741774056,y=0.42814516635986044 a=pan,b=eks,i=1025,x=0.19841453521545604,y=0.08811826842406556 a=eks,b=zee,i=1026,x=0.2741615196854501,y=0.5767980610310797 a=eks,b=zee,i=1027,x=0.7911574513154387,y=0.7553091091067402 a=eks,b=wye,i=1028,x=0.31990228399247944,y=0.9227512605727171 a=wye,b=eks,i=1029,x=0.2129672492537904,y=0.455409159116715 a=pan,b=pan,i=1030,x=0.5408386772361381,y=0.7160509492545313 a=hat,b=zee,i=1031,x=0.48469619278770393,y=0.6097136149080437 a=zee,b=pan,i=1032,x=0.8214019848831586,y=0.6593835512799063 a=eks,b=wye,i=1033,x=0.9319773759232135,y=0.8773892832568154 a=eks,b=hat,i=1034,x=0.21608546142882312,y=0.30554114451483116 a=hat,b=hat,i=1035,x=0.09020906616714786,y=0.10290991425754714 a=wye,b=zee,i=1036,x=0.3531778666649932,y=0.2809207717510849 a=hat,b=eks,i=1037,x=0.0945175541677894,y=0.3745112769716772 a=zee,b=pan,i=1038,x=0.5692057342171193,y=0.9606327704233413 a=zee,b=hat,i=1039,x=0.3081554551270379,y=0.4385650169051888 a=wye,b=hat,i=1040,x=0.5455490636956486,y=0.2139309079198488 a=pan,b=wye,i=1041,x=0.1485239533830236,y=0.1776854474981574 a=pan,b=pan,i=1042,x=0.15706603838853506,y=0.7751554210841053 a=pan,b=eks,i=1043,x=0.9037009385297075,y=0.6127765961736429 a=hat,b=eks,i=1044,x=0.1317980665424846,y=0.5354311378322799 a=pan,b=zee,i=1045,x=0.18824317733657336,y=0.5079230664372042 a=pan,b=wye,i=1046,x=0.6487563188200542,y=0.017743851244559794 a=wye,b=pan,i=1047,x=0.9924515398966479,y=0.8295830268367035 a=hat,b=hat,i=1048,x=0.866877027845022,y=0.3657752233481316 a=eks,b=eks,i=1049,x=0.5783739636973764,y=0.4270609054347013 a=zee,b=zee,i=1050,x=0.7931385685414742,y=0.7121487657433946 a=pan,b=eks,i=1051,x=0.07958271178407761,y=0.7510868078663989 a=hat,b=hat,i=1052,x=0.967055767380358,y=0.2710585230744418 a=wye,b=pan,i=1053,x=0.7709670432157318,y=0.18501678400499033 a=wye,b=zee,i=1054,x=0.08626749693608815,y=0.25205147479956 a=eks,b=eks,i=1055,x=0.7570291652540911,y=0.5426597756349021 a=wye,b=eks,i=1056,x=0.17697196127444081,y=0.48721255903838334 a=wye,b=pan,i=1057,x=0.34801756734906164,y=0.5214181842054965 a=pan,b=hat,i=1058,x=0.8522482352165042,y=0.7495559067319948 a=hat,b=pan,i=1059,x=0.2746468542015157,y=0.06589726142698449 a=zee,b=eks,i=1060,x=0.18748360833449518,y=0.7624096925483054 a=hat,b=hat,i=1061,x=0.7349337283030247,y=0.8809097022915752 a=zee,b=hat,i=1062,x=0.8802861735497903,y=0.6464219752541935 a=zee,b=hat,i=1063,x=0.4065008342810489,y=0.886323765340433 a=eks,b=hat,i=1064,x=0.4424079924279726,y=0.9148635648447586 a=hat,b=hat,i=1065,x=0.010130482768756055,y=0.9048046422071615 a=pan,b=zee,i=1066,x=0.0174503828855882,y=0.3772767215216971 a=pan,b=hat,i=1067,x=0.5324513907264202,y=0.7766825690772374 a=pan,b=zee,i=1068,x=0.9292735422372311,y=0.7845794722193757 a=wye,b=hat,i=1069,x=0.10796407185484191,y=0.026926570164813146 a=pan,b=eks,i=1070,x=0.48689932881768716,y=0.8580079152498714 a=eks,b=hat,i=1071,x=0.15020029058361362,y=0.45627529973691716 a=hat,b=pan,i=1072,x=0.44604654951505474,y=0.8038155982865464 a=eks,b=zee,i=1073,x=0.09738725055678144,y=0.08505208961455624 a=hat,b=hat,i=1074,x=0.3236826909608632,y=0.49627141594209967 a=eks,b=zee,i=1075,x=0.7153896932288586,y=0.9778494726905622 a=zee,b=hat,i=1076,x=0.7057228729875391,y=0.3212868771712061 a=pan,b=zee,i=1077,x=0.5856627674432751,y=0.9241757857209006 a=eks,b=eks,i=1078,x=0.35578945733022505,y=0.45528814372216575 a=pan,b=zee,i=1079,x=0.028491257749501564,y=0.7125221088820232 a=wye,b=wye,i=1080,x=0.016813529366139446,y=0.30619226711821357 a=pan,b=hat,i=1081,x=0.9328542327992406,y=0.9238747036441417 a=eks,b=hat,i=1082,x=0.818988631617168,y=0.6912196193544532 a=hat,b=wye,i=1083,x=0.8665578508008973,y=0.22211673759850004 a=hat,b=zee,i=1084,x=0.41406718708821955,y=0.02723245214010661 a=zee,b=eks,i=1085,x=0.13035161260495198,y=0.5640103641360239 a=eks,b=hat,i=1086,x=0.03139277667157425,y=0.5383540545781755 a=eks,b=zee,i=1087,x=0.041919682544647396,y=0.43365253130183956 a=pan,b=zee,i=1088,x=0.8344662624969731,y=0.05039883331049 a=wye,b=pan,i=1089,x=0.10459506042932876,y=0.7767794982555558 a=zee,b=hat,i=1090,x=0.05459959955270677,y=0.6641081427852065 a=eks,b=wye,i=1091,x=0.9741063795340834,y=0.5869419824678774 a=zee,b=zee,i=1092,x=0.913252015241433,y=0.41317703347248136 a=wye,b=pan,i=1093,x=0.060917243371145124,y=0.0729984416375653 a=hat,b=eks,i=1094,x=0.06571775207401842,y=0.6161858340132806 a=eks,b=wye,i=1095,x=0.9703612589022951,y=0.02299184173282698 a=pan,b=wye,i=1096,x=0.3123275732448444,y=0.9046978224447048 a=pan,b=eks,i=1097,x=0.36433855475903487,y=0.28640575782602984 a=pan,b=zee,i=1098,x=0.9388863703832938,y=0.9481045761632589 a=wye,b=eks,i=1099,x=0.1801852674259774,y=0.8001313396984383 a=pan,b=wye,i=1100,x=0.9449163664787465,y=0.21041416481960495 a=zee,b=pan,i=1101,x=0.9851142251459588,y=0.833308434948654 a=hat,b=zee,i=1102,x=0.6058843659959886,y=0.914771957616851 a=hat,b=hat,i=1103,x=0.09907505801136207,y=0.9886361549898667 a=wye,b=zee,i=1104,x=0.6026401587598063,y=0.9232948941188992 a=hat,b=zee,i=1105,x=0.7049227417732974,y=0.0462839144297168 a=pan,b=eks,i=1106,x=0.5485375288525932,y=0.41787054723627115 a=wye,b=zee,i=1107,x=0.2172040459296869,y=0.04347447260250059 a=zee,b=wye,i=1108,x=0.17849311848568739,y=0.15336908789618675 a=pan,b=zee,i=1109,x=0.9209948537835644,y=0.9617211607571948 a=zee,b=zee,i=1110,x=0.5617606152508641,y=0.12922472841055488 a=hat,b=zee,i=1111,x=0.5096259842809261,y=0.9716058274135191 a=eks,b=pan,i=1112,x=0.4601480008274824,y=0.6621941381779669 a=wye,b=hat,i=1113,x=0.04619109705664248,y=0.07731183378456241 a=eks,b=zee,i=1114,x=0.6225031791605239,y=0.724470067269006 a=hat,b=zee,i=1115,x=0.4384136215828739,y=0.8991776975784843 a=pan,b=pan,i=1116,x=0.3318167439135842,y=0.07638995864053721 a=hat,b=pan,i=1117,x=0.08389296153750614,y=0.616903034571171 a=eks,b=eks,i=1118,x=0.42321284015690686,y=0.18075244176916405 a=hat,b=zee,i=1119,x=0.9947060390455312,y=0.9155106367235321 a=hat,b=pan,i=1120,x=0.322426480645594,y=0.8107856936608234 a=eks,b=eks,i=1121,x=0.011345137277951278,y=0.30150866101509777 a=hat,b=hat,i=1122,x=0.2386256214986372,y=0.5024389651151668 a=hat,b=wye,i=1123,x=0.7175177574035164,y=0.49060053901509204 a=pan,b=eks,i=1124,x=0.08353595333636898,y=0.5861415970535602 a=eks,b=hat,i=1125,x=0.30127828892745145,y=0.6471608610675756 a=wye,b=wye,i=1126,x=0.8391082612863554,y=0.8564234939160587 a=hat,b=pan,i=1127,x=0.832626957843269,y=0.6240442951248336 a=hat,b=hat,i=1128,x=0.8806935192862494,y=0.7838162296913623 a=pan,b=zee,i=1129,x=0.3315347253194,y=0.008089402263374845 a=zee,b=wye,i=1130,x=0.01851853736108866,y=0.17184568517491516 a=wye,b=zee,i=1131,x=0.8126126224772602,y=0.9995009548069009 a=hat,b=zee,i=1132,x=0.4073244488743951,y=0.5406132572557787 a=zee,b=zee,i=1133,x=0.8240890643910131,y=0.13624992612749198 a=wye,b=eks,i=1134,x=0.7808769789539313,y=0.8783411417393904 a=zee,b=eks,i=1135,x=0.6515492928760739,y=0.03540134679084295 a=hat,b=pan,i=1136,x=0.5009194590736257,y=0.37469060025761247 a=zee,b=hat,i=1137,x=0.925731020213508,y=0.12357673418366155 a=pan,b=zee,i=1138,x=0.7159872385785992,y=0.04528852253706328 a=hat,b=zee,i=1139,x=0.6331768836278109,y=0.1369717170583027 a=zee,b=eks,i=1140,x=0.048571653758132216,y=0.3492112898081101 a=hat,b=hat,i=1141,x=0.612461401988446,y=0.14847850688380781 a=eks,b=eks,i=1142,x=0.027183982557207553,y=0.588477870478424 a=zee,b=pan,i=1143,x=0.9927901703526475,y=0.12700602926571025 a=hat,b=zee,i=1144,x=0.007391695879485738,y=0.9756749119225023 a=hat,b=eks,i=1145,x=0.8273428505388051,y=0.9831021972218925 a=pan,b=hat,i=1146,x=0.8460372878397171,y=0.3239568575223264 a=wye,b=zee,i=1147,x=0.011254496718364537,y=0.2947614358547457 a=wye,b=eks,i=1148,x=0.510274781147883,y=0.6342886591607202 a=eks,b=hat,i=1149,x=0.08103428766976473,y=0.530747032666464 a=hat,b=hat,i=1150,x=0.4058826696970118,y=0.4216435681134768 a=pan,b=pan,i=1151,x=0.6861388937798399,y=0.33890003075281316 a=eks,b=zee,i=1152,x=0.5857634146388722,y=0.042952777230192085 a=pan,b=hat,i=1153,x=0.6757867606577086,y=0.7740341802587707 a=hat,b=eks,i=1154,x=0.48734948309736814,y=0.03392833831821873 a=hat,b=pan,i=1155,x=0.15696039673828777,y=0.29845938463448995 a=eks,b=eks,i=1156,x=0.7220504220155584,y=0.3069530341008503 a=zee,b=hat,i=1157,x=0.8122264673038031,y=0.8517729655458225 a=zee,b=zee,i=1158,x=0.8088760687957014,y=0.21112197613175976 a=zee,b=wye,i=1159,x=0.46769194201594133,y=0.4329746427091592 a=wye,b=hat,i=1160,x=0.7263377504273455,y=0.17415133160693874 a=wye,b=eks,i=1161,x=0.6442949189199954,y=0.1494819214827784 a=eks,b=wye,i=1162,x=0.9629901424599551,y=0.7303763539966592 a=hat,b=pan,i=1163,x=0.1540633521892789,y=0.30579559836649084 a=pan,b=pan,i=1164,x=0.0565757314681804,y=0.8372880556318811 a=hat,b=pan,i=1165,x=0.6211654981395032,y=0.8227816494549414 a=eks,b=eks,i=1166,x=0.43746753562542595,y=0.4554692262381064 a=zee,b=hat,i=1167,x=0.3367047133504143,y=0.8141824349803665 a=eks,b=pan,i=1168,x=0.8136679912512943,y=0.597540308230969 a=zee,b=wye,i=1169,x=0.5770899885002667,y=0.28863298687378613 a=eks,b=hat,i=1170,x=0.38648551728927116,y=0.444170386297162 a=wye,b=zee,i=1171,x=0.6468403370363878,y=0.9265036001050484 a=wye,b=hat,i=1172,x=0.24417531360698597,y=0.4885016640644757 a=eks,b=pan,i=1173,x=0.14021562324171288,y=0.8343881176338883 a=hat,b=wye,i=1174,x=0.8826971260268877,y=0.5204304309651815 a=wye,b=hat,i=1175,x=0.07253012277298443,y=0.23424850735777059 a=hat,b=eks,i=1176,x=0.006644223863763399,y=0.0816917135559706 a=wye,b=eks,i=1177,x=0.9032818287668923,y=0.3192995339899316 a=eks,b=zee,i=1178,x=0.6806297878854731,y=0.5818723196551134 a=pan,b=pan,i=1179,x=0.8705072785671686,y=0.6988727124241529 a=zee,b=eks,i=1180,x=0.9994378171787394,y=0.13347602700579186 a=hat,b=hat,i=1181,x=0.9918698253530575,y=0.1452498294514708 a=hat,b=eks,i=1182,x=0.7176916554404814,y=0.11479832193407902 a=wye,b=eks,i=1183,x=0.6661595747080763,y=0.38719941985040585 a=zee,b=zee,i=1184,x=0.12344811253503452,y=0.7278140023096202 a=hat,b=eks,i=1185,x=0.8923180879132536,y=0.05433793092315187 a=hat,b=pan,i=1186,x=0.18605162703349232,y=0.08984973385947226 a=pan,b=wye,i=1187,x=0.002298959425301561,y=0.8456888165062316 a=hat,b=hat,i=1188,x=0.12094979737180311,y=0.6069817211275821 a=pan,b=hat,i=1189,x=0.36260151632409887,y=0.5849544530123062 a=hat,b=wye,i=1190,x=0.6833808585344113,y=0.09408333641094069 a=hat,b=pan,i=1191,x=0.6073887594007545,y=0.582980066141568 a=zee,b=zee,i=1192,x=0.20794006469650417,y=0.8379074082927926 a=pan,b=wye,i=1193,x=0.022245524512133796,y=0.6352302232122171 a=eks,b=hat,i=1194,x=0.9006853879899086,y=0.05583549785972808 a=pan,b=pan,i=1195,x=0.16832227022787238,y=0.13828673042487394 a=hat,b=eks,i=1196,x=0.3928690398294634,y=0.6037073958974022 a=pan,b=hat,i=1197,x=0.3580350006103836,y=0.814312590748317 a=zee,b=zee,i=1198,x=0.7027548035545187,y=0.5696437156771905 a=hat,b=wye,i=1199,x=0.5089871727765719,y=0.22764827796274545 a=zee,b=wye,i=1200,x=0.6577969186215513,y=0.13335841083829625 a=zee,b=hat,i=1201,x=0.8874397146268569,y=0.3285624695821543 a=eks,b=eks,i=1202,x=0.8354259959835246,y=0.05671746191419269 a=hat,b=eks,i=1203,x=0.13371374012873294,y=0.255811175503322 a=zee,b=zee,i=1204,x=0.7698393537978214,y=0.15023057683572805 a=pan,b=eks,i=1205,x=0.7829882013835832,y=0.8062997039846184 a=wye,b=hat,i=1206,x=0.8250443883729883,y=0.40002163110909417 a=wye,b=eks,i=1207,x=0.2912587148785738,y=0.8031779767496858 a=zee,b=hat,i=1208,x=0.6858599554715019,y=0.18452417758198125 a=wye,b=wye,i=1209,x=0.7107203114111836,y=0.00017993344165900815 a=pan,b=zee,i=1210,x=0.3363044695544226,y=0.6283867129304496 a=hat,b=eks,i=1211,x=0.8188718956849538,y=0.8967648753839026 a=pan,b=wye,i=1212,x=0.664842209320305,y=0.5067617041720663 a=hat,b=eks,i=1213,x=0.99973332327313,y=0.34548764769191365 a=pan,b=pan,i=1214,x=0.7158445324765502,y=0.7170272500849562 a=zee,b=eks,i=1215,x=0.17023806172245382,y=0.11112961156527701 a=pan,b=eks,i=1216,x=0.032830805279464026,y=0.858300617398515 a=pan,b=pan,i=1217,x=0.058339498506774445,y=0.3299590477816785 a=pan,b=wye,i=1218,x=0.2981850301136384,y=0.275715699110609 a=wye,b=hat,i=1219,x=0.9269469541827934,y=0.433885024903532 a=wye,b=pan,i=1220,x=0.5590392185080515,y=0.3532795367709467 a=zee,b=pan,i=1221,x=0.1120496540408027,y=0.052474214794520524 a=wye,b=wye,i=1222,x=0.32857456764622284,y=0.9839624955444709 a=eks,b=hat,i=1223,x=0.07964593404126263,y=0.5223768981550353 a=zee,b=hat,i=1224,x=0.6087209788431407,y=0.009657060823042296 a=pan,b=hat,i=1225,x=0.2062334403825843,y=0.9229745059225746 a=wye,b=zee,i=1226,x=0.17708548635341936,y=0.9990248955111103 a=zee,b=wye,i=1227,x=0.35351274012969736,y=0.4041475707851616 a=eks,b=eks,i=1228,x=0.5030002251433316,y=0.8127865742005792 a=hat,b=eks,i=1229,x=0.6208757978424075,y=0.5685317001125881 a=hat,b=wye,i=1230,x=0.4033883868841214,y=0.21662083975598512 a=eks,b=hat,i=1231,x=0.8372211910010664,y=0.05104830485393308 a=zee,b=zee,i=1232,x=0.6255227701030528,y=0.7068037158292888 a=zee,b=hat,i=1233,x=0.16099869622122553,y=0.03145480439751913 a=wye,b=eks,i=1234,x=0.29236003818241163,y=0.0038729096629406268 a=zee,b=eks,i=1235,x=0.4597704185565915,y=0.9921180702735245 a=eks,b=wye,i=1236,x=0.25200335314789113,y=0.18668063103395705 a=pan,b=hat,i=1237,x=0.7976885073930762,y=0.5851390530977472 a=eks,b=zee,i=1238,x=0.09123558516113806,y=0.7444584317010036 a=eks,b=wye,i=1239,x=0.28018636325329804,y=0.9609284482216048 a=eks,b=zee,i=1240,x=0.31745479549254885,y=0.19433880518244362 a=wye,b=wye,i=1241,x=0.02167407035426938,y=0.8517578603799361 a=zee,b=zee,i=1242,x=0.6106259696599957,y=0.022315745293787215 a=pan,b=zee,i=1243,x=0.6589609168139929,y=0.6454105665267801 a=wye,b=eks,i=1244,x=0.2787899466812519,y=0.06055887677281169 a=zee,b=pan,i=1245,x=0.2470406639222188,y=0.5853815139856057 a=hat,b=pan,i=1246,x=0.45904971489441826,y=0.5163058230383074 a=eks,b=wye,i=1247,x=0.9834930996078813,y=0.4959362914616142 a=pan,b=hat,i=1248,x=0.1525604218696871,y=0.07482470280574516 a=hat,b=hat,i=1249,x=0.7002367713266386,y=0.6487527612372115 a=zee,b=hat,i=1250,x=0.9701426957388892,y=0.7845500860373503 a=pan,b=hat,i=1251,x=0.5290805139059341,y=0.7100071242645416 a=hat,b=hat,i=1252,x=0.09930445608258032,y=0.5660530272938328 a=zee,b=eks,i=1253,x=0.5423655422122198,y=0.859227213109029 a=zee,b=pan,i=1254,x=0.21221332375586466,y=0.26582553763793293 a=zee,b=eks,i=1255,x=0.5793553556065434,y=0.563660887083747 a=pan,b=pan,i=1256,x=0.10769070223113286,y=0.7797941844365985 a=wye,b=wye,i=1257,x=0.23334157949355694,y=0.48533573180276546 a=pan,b=wye,i=1258,x=0.2995600681122321,y=0.7432427054977825 a=zee,b=wye,i=1259,x=0.18343409452228054,y=0.018648673229345936 a=wye,b=eks,i=1260,x=0.7451552312920868,y=0.7083570752878636 a=zee,b=zee,i=1261,x=0.5511811148393049,y=0.1182107616782363 a=eks,b=pan,i=1262,x=0.6119687598964016,y=0.8309635765979287 a=hat,b=zee,i=1263,x=0.990205350112817,y=0.9130137981522629 a=wye,b=eks,i=1264,x=0.2728580162726342,y=0.34083170474058677 a=wye,b=hat,i=1265,x=0.03629556392023969,y=0.14427174473473803 a=zee,b=eks,i=1266,x=0.042350338334240956,y=0.1289699792266037 a=eks,b=wye,i=1267,x=0.6455892671517784,y=0.2737715815072643 a=pan,b=eks,i=1268,x=0.49258185461644277,y=0.6767874718351204 a=hat,b=zee,i=1269,x=0.23099691497930386,y=0.010607810026782571 a=wye,b=wye,i=1270,x=0.7995556109605628,y=0.16274406637511674 a=hat,b=zee,i=1271,x=0.6536639656492141,y=0.4372415589868961 a=hat,b=eks,i=1272,x=0.9299854741714102,y=0.1361271855956554 a=wye,b=pan,i=1273,x=0.3500305547201491,y=0.19911752000719163 a=zee,b=pan,i=1274,x=0.8415267085560889,y=0.04046540168663748 a=wye,b=zee,i=1275,x=0.45988125966489024,y=0.44169640932292065 a=zee,b=eks,i=1276,x=0.5025321996588512,y=0.23509973545961738 a=zee,b=hat,i=1277,x=0.4881304294165376,y=0.5108673128747018 a=hat,b=zee,i=1278,x=0.34542108789754955,y=0.6393029254293789 a=hat,b=hat,i=1279,x=0.652274017608231,y=0.2139035554469655 a=hat,b=eks,i=1280,x=0.46886095371359493,y=0.40718264857353603 a=wye,b=eks,i=1281,x=0.23006798520906935,y=0.08383446031686925 a=wye,b=zee,i=1282,x=0.19157221596770568,y=0.8125166888087554 a=hat,b=eks,i=1283,x=0.5054724357500647,y=0.7470906139600201 a=hat,b=zee,i=1284,x=0.1351519159722092,y=0.4498407585837816 a=eks,b=wye,i=1285,x=0.9928332865840428,y=0.6970272102748626 a=zee,b=pan,i=1286,x=0.5903100219747524,y=0.3978181484200255 a=zee,b=zee,i=1287,x=0.9279289993969526,y=0.2801555418399182 a=zee,b=eks,i=1288,x=0.9628830236233576,y=0.9651783931494015 a=hat,b=eks,i=1289,x=0.18315393370531752,y=0.1945534839637214 a=zee,b=hat,i=1290,x=0.24224308391281513,y=0.5569008521094203 a=eks,b=zee,i=1291,x=0.9018025573968887,y=0.8449305240236747 a=eks,b=eks,i=1292,x=0.7608771883116217,y=0.7517241556722504 a=wye,b=hat,i=1293,x=0.15064377804093187,y=0.4793850890733947 a=eks,b=eks,i=1294,x=0.9835365178053855,y=0.4991321788048013 a=eks,b=wye,i=1295,x=0.6604229543170217,y=0.28382403297933256 a=pan,b=zee,i=1296,x=0.4653477162195633,y=0.8951405958621811 a=zee,b=zee,i=1297,x=0.27094318332243583,y=0.7304405621024768 a=zee,b=wye,i=1298,x=0.779174519106144,y=0.8363414405399494 a=wye,b=pan,i=1299,x=0.412255986899035,y=0.6866252838817691 a=zee,b=zee,i=1300,x=0.005776325077187949,y=0.8475053706800095 a=zee,b=hat,i=1301,x=0.7301684966378752,y=0.2613687718642025 a=wye,b=wye,i=1302,x=0.18017602702804525,y=0.2080647082488024 a=eks,b=eks,i=1303,x=0.2453496160424028,y=0.8111166316808313 a=eks,b=pan,i=1304,x=0.8469416170979848,y=0.9095929671389578 a=hat,b=wye,i=1305,x=0.1011787110939425,y=0.17876379874526727 a=hat,b=pan,i=1306,x=0.354306631649279,y=0.14650574878242473 a=pan,b=wye,i=1307,x=0.7179146053664565,y=0.0912103605838348 a=eks,b=eks,i=1308,x=0.38852974503903526,y=0.9366885248501026 a=hat,b=wye,i=1309,x=0.44974216883963103,y=0.90399629076228 a=wye,b=hat,i=1310,x=0.5674008146861433,y=0.24793347465919724 a=pan,b=eks,i=1311,x=0.4468521405894835,y=0.8073232684030767 a=eks,b=wye,i=1312,x=0.7048361671767605,y=0.2809802874043469 a=hat,b=zee,i=1313,x=0.6080368706120283,y=0.7923296244615721 a=pan,b=hat,i=1314,x=0.978539901340635,y=0.4361858063106284 a=zee,b=wye,i=1315,x=0.49174797358568,y=0.21477329503908604 a=hat,b=zee,i=1316,x=0.8447890636321257,y=0.5448553401794702 a=zee,b=pan,i=1317,x=0.234827977442866,y=0.36535789013854214 a=pan,b=wye,i=1318,x=0.28563288006029197,y=0.8722097325921051 a=pan,b=eks,i=1319,x=0.1574949973988704,y=0.737864320805229 a=hat,b=eks,i=1320,x=0.49021876898019556,y=0.9850723155763529 a=hat,b=hat,i=1321,x=0.10849276460754553,y=0.7096856014411096 a=eks,b=pan,i=1322,x=0.7704102390506976,y=0.2939166316548699 a=hat,b=pan,i=1323,x=0.785186354961605,y=0.5187554224402933 a=hat,b=wye,i=1324,x=0.4653747699218791,y=0.07316638818680055 a=zee,b=pan,i=1325,x=0.0726981243268019,y=0.9334085397103126 a=wye,b=eks,i=1326,x=0.5019035191475638,y=0.9808444985066099 a=zee,b=zee,i=1327,x=0.7577704935146902,y=0.07319296743342829 a=eks,b=wye,i=1328,x=0.027884294519191055,y=0.9742594194746489 a=hat,b=wye,i=1329,x=0.30934341709858726,y=0.7358665625064501 a=zee,b=wye,i=1330,x=0.20196851520666603,y=0.4686296388879383 a=wye,b=hat,i=1331,x=0.9886209096293992,y=0.35033943519876 a=pan,b=eks,i=1332,x=0.9437028531431318,y=0.8092545870987017 a=zee,b=pan,i=1333,x=0.025047095442164324,y=0.6492043063154611 a=pan,b=hat,i=1334,x=0.8484332941587861,y=0.24802424949042978 a=zee,b=zee,i=1335,x=0.5987101585948386,y=0.7670719549466084 a=wye,b=wye,i=1336,x=0.5875375382759155,y=0.12052683112565199 a=eks,b=eks,i=1337,x=0.5316127857819793,y=0.19131458191720963 a=pan,b=pan,i=1338,x=0.08200277948024282,y=0.6794187346086508 a=eks,b=wye,i=1339,x=0.5575467999942988,y=0.7816590387896203 a=eks,b=zee,i=1340,x=0.1329029001223042,y=0.7468954697559254 a=pan,b=zee,i=1341,x=0.8491462615453724,y=0.7667214357631618 a=zee,b=wye,i=1342,x=0.016857231484302737,y=0.7189825771028026 a=hat,b=zee,i=1343,x=0.0204145133471626,y=0.9850483398706436 a=pan,b=eks,i=1344,x=0.14343578380352173,y=0.3534760283313706 a=zee,b=zee,i=1345,x=0.3068266605225908,y=0.1872593613407797 a=eks,b=hat,i=1346,x=0.75151508070612,y=0.2636098408590172 a=eks,b=pan,i=1347,x=0.6927435409900552,y=0.8895994295177906 a=eks,b=pan,i=1348,x=0.6801900016838289,y=0.81285575413888 a=wye,b=pan,i=1349,x=0.5495196174214054,y=0.024059334079716832 a=wye,b=hat,i=1350,x=0.7464955639967092,y=0.635601451124977 a=wye,b=hat,i=1351,x=0.1945383266452364,y=0.6098906438896057 a=hat,b=zee,i=1352,x=0.2313757351431155,y=0.9047115591444801 a=zee,b=zee,i=1353,x=0.09798837394769866,y=0.4857389187941127 a=pan,b=wye,i=1354,x=0.020855652150608917,y=0.7979437738522005 a=pan,b=zee,i=1355,x=0.4204132169844832,y=0.016976719720622646 a=pan,b=eks,i=1356,x=0.3722527646196434,y=0.9516382491937279 a=hat,b=wye,i=1357,x=0.6527272744396904,y=0.5760550769108022 a=wye,b=zee,i=1358,x=0.40135887170615936,y=0.49587544313347875 a=eks,b=zee,i=1359,x=0.5832103840317804,y=0.4551385962898433 a=wye,b=pan,i=1360,x=0.13086231928141434,y=0.010866288916755895 a=eks,b=pan,i=1361,x=0.9224505345587571,y=0.09488253298885452 a=pan,b=pan,i=1362,x=0.21757550606480047,y=0.3250911878972238 a=zee,b=wye,i=1363,x=0.12002019129987074,y=0.330458068115164 a=hat,b=zee,i=1364,x=0.11093600453342645,y=0.46812386024583597 a=pan,b=wye,i=1365,x=0.2446315231324211,y=0.734485128500915 a=pan,b=eks,i=1366,x=0.44912372133198186,y=0.13603083622218803 a=hat,b=wye,i=1367,x=0.4410716319202098,y=0.5052447169227966 a=pan,b=hat,i=1368,x=0.5290826491768821,y=0.7868317670838846 a=hat,b=hat,i=1369,x=0.9003291714409005,y=0.6548894347969356 a=pan,b=zee,i=1370,x=0.20647577118202198,y=0.6570041239170981 a=hat,b=zee,i=1371,x=0.46970274230450093,y=0.9041951983476588 a=eks,b=pan,i=1372,x=0.6125178186376162,y=0.40366807591765197 a=eks,b=zee,i=1373,x=0.7520637884030741,y=0.7184683086802719 a=pan,b=pan,i=1374,x=0.9344059163223443,y=0.3777271392017554 a=wye,b=wye,i=1375,x=0.12707467974137798,y=0.951904259345876 a=hat,b=zee,i=1376,x=0.3256794711244385,y=0.38645249736136067 a=eks,b=hat,i=1377,x=0.179526538530434,y=0.20081807319252887 a=wye,b=zee,i=1378,x=0.2516305024121336,y=0.6994126099643698 a=pan,b=zee,i=1379,x=0.6583708842508542,y=0.12745947685299774 a=zee,b=hat,i=1380,x=0.85880207513692,y=0.5362089929386346 a=eks,b=eks,i=1381,x=0.7480180475780296,y=0.9104247466520813 a=pan,b=pan,i=1382,x=0.5734287289517749,y=0.8325676507978588 a=wye,b=pan,i=1383,x=0.7445746522867436,y=0.977610514961822 a=hat,b=pan,i=1384,x=0.18929691453341568,y=0.09316356559826999 a=hat,b=eks,i=1385,x=0.8173647642606612,y=0.685818179101868 a=hat,b=wye,i=1386,x=0.7472200309764511,y=0.040129476799068864 a=eks,b=hat,i=1387,x=0.6336667717285401,y=0.7885877398020724 a=eks,b=eks,i=1388,x=0.6391264035893477,y=0.885429385188037 a=zee,b=hat,i=1389,x=0.2737321526786327,y=0.40630528382661724 a=wye,b=eks,i=1390,x=0.8747667631201688,y=0.44871788319272277 a=eks,b=wye,i=1391,x=0.4921330479506649,y=0.23072265405056214 a=hat,b=wye,i=1392,x=0.03644384893663821,y=0.8601480046083115 a=zee,b=zee,i=1393,x=0.568247504526133,y=0.7756896840334044 a=eks,b=wye,i=1394,x=0.2879212011081145,y=0.2954751331645483 a=pan,b=zee,i=1395,x=0.6235312578229149,y=0.9190115143142508 a=eks,b=hat,i=1396,x=0.3925348585643007,y=0.6541017210621741 a=wye,b=wye,i=1397,x=0.1908719616976211,y=0.49066946794315214 a=pan,b=wye,i=1398,x=0.44636597753534346,y=0.1332459124221107 a=hat,b=wye,i=1399,x=0.15627409090669087,y=0.6666239928392401 a=pan,b=pan,i=1400,x=0.7498043663610715,y=0.9134287398239703 a=pan,b=zee,i=1401,x=0.1954474110318004,y=0.7423530907643979 a=zee,b=zee,i=1402,x=0.014212868410986568,y=0.725003340165483 a=hat,b=eks,i=1403,x=0.7141565502820018,y=0.8983828801012884 a=eks,b=wye,i=1404,x=0.014080795466545282,y=0.18026639861936977 a=zee,b=pan,i=1405,x=0.6715143596794965,y=0.921403075922691 a=zee,b=zee,i=1406,x=0.542929251925297,y=0.5096745932177545 a=hat,b=hat,i=1407,x=0.925464277899458,y=0.8114581401124622 a=hat,b=eks,i=1408,x=0.8155145601390111,y=0.4662651057032756 a=hat,b=pan,i=1409,x=0.7360283636432529,y=0.530485536184739 a=wye,b=eks,i=1410,x=0.18097124504277107,y=0.7796289744650133 a=zee,b=zee,i=1411,x=0.036610885557006756,y=0.9383609949487812 a=zee,b=zee,i=1412,x=0.3608642872844662,y=0.47981840619533633 a=zee,b=eks,i=1413,x=0.5222789053544413,y=0.2735382327354091 a=pan,b=pan,i=1414,x=0.41821681358517837,y=0.09261463379853807 a=eks,b=pan,i=1415,x=0.36407936516918227,y=0.412995532484439 a=zee,b=eks,i=1416,x=0.8037535280997706,y=0.9967016304554022 a=zee,b=wye,i=1417,x=0.03656836512418926,y=0.24047847966373825 a=hat,b=zee,i=1418,x=0.9966705327199551,y=0.24331478490278557 a=eks,b=zee,i=1419,x=0.0019272339003844063,y=0.4494856127708353 a=wye,b=zee,i=1420,x=0.26078653509711935,y=0.8205856479809418 a=eks,b=zee,i=1421,x=0.3781190702325734,y=0.7756276321642843 a=eks,b=eks,i=1422,x=0.8685238966563206,y=0.4749950592532425 a=hat,b=wye,i=1423,x=0.015363751269120707,y=0.7156073118022606 a=eks,b=hat,i=1424,x=0.816131333846752,y=0.6719670303804344 a=pan,b=hat,i=1425,x=0.7608261327843064,y=0.8033020578141182 a=wye,b=pan,i=1426,x=0.15941112007072045,y=0.5893140312689553 a=hat,b=wye,i=1427,x=0.37742125258201054,y=0.21248345631269194 a=pan,b=eks,i=1428,x=0.2179834817521752,y=0.6045604185833173 a=wye,b=hat,i=1429,x=0.6945031453929469,y=0.4781622710344138 a=hat,b=hat,i=1430,x=0.2249233470581683,y=0.2783168994644075 a=hat,b=pan,i=1431,x=0.4641755096893504,y=0.9173237513729213 a=pan,b=zee,i=1432,x=0.7027031224037956,y=0.3317909620850288 a=zee,b=hat,i=1433,x=0.7968305326329156,y=0.02115891484339094 a=eks,b=hat,i=1434,x=0.824832015791001,y=0.15206099206432044 a=pan,b=wye,i=1435,x=0.9895511842399779,y=0.24672707930718718 a=zee,b=wye,i=1436,x=0.03443424698915787,y=0.7036923651780208 a=eks,b=eks,i=1437,x=0.7077146987434991,y=0.4772318639588453 a=wye,b=zee,i=1438,x=0.280848551545003,y=0.581684502725692 a=wye,b=pan,i=1439,x=0.29634793935457593,y=0.15883447307684273 a=hat,b=wye,i=1440,x=0.9552968869720926,y=0.7549130979076563 a=eks,b=wye,i=1441,x=0.782665993384691,y=0.6769028671991114 a=wye,b=wye,i=1442,x=0.1111822347810345,y=0.4098271097617635 a=wye,b=pan,i=1443,x=0.9004115661167051,y=0.8953351280072975 a=eks,b=eks,i=1444,x=0.7825483490155876,y=0.1911154945653185 a=wye,b=hat,i=1445,x=0.5126253689092004,y=0.9851511494903027 a=zee,b=hat,i=1446,x=0.5683263846018851,y=0.36460301344654333 a=hat,b=wye,i=1447,x=0.0058754901082536115,y=0.774777974548495 a=eks,b=hat,i=1448,x=0.3708973278245986,y=0.8180561446210824 a=pan,b=zee,i=1449,x=0.7342563560822476,y=0.5866440660526566 a=wye,b=zee,i=1450,x=0.057991219063554644,y=0.5720271334501862 a=zee,b=pan,i=1451,x=0.7266623210900269,y=0.5529202681153802 a=pan,b=zee,i=1452,x=0.6045149915326044,y=0.43879278090859253 a=wye,b=pan,i=1453,x=0.7396355861845729,y=0.07902637119446942 a=hat,b=pan,i=1454,x=0.6796123362492761,y=0.07338367835669557 a=wye,b=hat,i=1455,x=0.6393700516557285,y=0.3786022905745211 a=pan,b=zee,i=1456,x=0.6285804221646021,y=0.9875061625049019 a=wye,b=wye,i=1457,x=0.020604286592247223,y=0.9051047892954668 a=wye,b=eks,i=1458,x=0.9288057779036796,y=0.08184955257646931 a=eks,b=hat,i=1459,x=0.37211255193051374,y=0.7275732107413054 a=hat,b=eks,i=1460,x=0.8976672611360175,y=0.11158201921723399 a=pan,b=pan,i=1461,x=0.8953302483551178,y=0.3176124805910262 a=zee,b=eks,i=1462,x=0.11393628149045654,y=0.14776897927457688 a=zee,b=wye,i=1463,x=0.9485009664381004,y=0.6876104431895068 a=pan,b=eks,i=1464,x=0.5034433003230543,y=0.9194125130762513 a=pan,b=zee,i=1465,x=0.18563268428375257,y=0.09241285966004353 a=zee,b=eks,i=1466,x=0.9809617365136725,y=0.41584412119368963 a=eks,b=eks,i=1467,x=0.5966766034558736,y=0.5918168248126415 a=zee,b=wye,i=1468,x=0.8524700641554818,y=0.9423215024482277 a=hat,b=hat,i=1469,x=0.30981599429404116,y=0.8121609570712267 a=eks,b=wye,i=1470,x=0.3172972103854893,y=0.5803204798913618 a=hat,b=eks,i=1471,x=0.33123267379248844,y=0.816316950700786 a=pan,b=pan,i=1472,x=0.13616411059500877,y=0.29064871767206657 a=eks,b=pan,i=1473,x=0.2072400514044095,y=0.6358868351183312 a=eks,b=wye,i=1474,x=0.4211179162576446,y=0.21058536437655107 a=pan,b=eks,i=1475,x=0.4704809160051703,y=0.8307787116985389 a=zee,b=pan,i=1476,x=0.13639522899731849,y=0.23338840020951146 a=pan,b=zee,i=1477,x=0.2723828998857428,y=0.9470378753636345 a=wye,b=hat,i=1478,x=0.9181407667919723,y=0.542065887413139 a=eks,b=pan,i=1479,x=0.36997774655144844,y=0.9163407928935801 a=hat,b=eks,i=1480,x=0.4110600513034226,y=0.762934868654504 a=eks,b=hat,i=1481,x=0.07888272339471736,y=0.9970129572140034 a=pan,b=wye,i=1482,x=0.18636069480197193,y=0.9912578166928323 a=hat,b=eks,i=1483,x=0.14507297992678936,y=0.005565478369193744 a=wye,b=eks,i=1484,x=0.12541139811813662,y=0.7168687280478707 a=pan,b=pan,i=1485,x=0.39466783430726504,y=0.982498465405116 a=wye,b=pan,i=1486,x=0.42338989462787613,y=0.21044104481161763 a=hat,b=pan,i=1487,x=0.15371916098016003,y=0.6216331795342438 a=wye,b=hat,i=1488,x=0.24032388275558492,y=0.8561385404203309 a=pan,b=zee,i=1489,x=0.9254041583361616,y=0.8626755735608904 a=wye,b=wye,i=1490,x=0.6717355270144156,y=0.12382812446245695 a=hat,b=zee,i=1491,x=0.8374077645159174,y=0.2868130167653046 a=zee,b=hat,i=1492,x=0.31566626553195365,y=0.18969237480034762 a=pan,b=hat,i=1493,x=0.7443466050859169,y=0.5883736148067066 a=pan,b=zee,i=1494,x=0.489472189755636,y=0.2436710488233178 a=pan,b=hat,i=1495,x=0.31071524278241913,y=0.3032733210952677 a=wye,b=zee,i=1496,x=0.6743178734293219,y=0.018796476267587625 a=eks,b=zee,i=1497,x=0.13194664583383386,y=0.13915515391288613 a=wye,b=pan,i=1498,x=0.40290420886277534,y=0.45645851051725006 a=zee,b=pan,i=1499,x=0.7372530102597384,y=0.28172203934687556 a=zee,b=wye,i=1500,x=0.8051155053673082,y=0.628483371578552 a=hat,b=pan,i=1501,x=0.8675575754177055,y=0.5525846951861648 a=pan,b=zee,i=1502,x=0.8765052305323637,y=0.3446134001019854 a=wye,b=pan,i=1503,x=0.5396577054171726,y=0.6580836727630581 a=eks,b=wye,i=1504,x=0.3351263725136986,y=0.16701945030517473 a=zee,b=wye,i=1505,x=0.502492235570156,y=0.27616039273844517 a=hat,b=wye,i=1506,x=0.11505114122495796,y=0.344787577171222 a=wye,b=hat,i=1507,x=0.84331982245662,y=0.5563459493044525 a=eks,b=wye,i=1508,x=0.19701887217577851,y=0.5005677125700215 a=hat,b=eks,i=1509,x=0.6569568959744496,y=0.37010077528594765 a=wye,b=pan,i=1510,x=0.7194905750125422,y=0.37415889411709513 a=zee,b=hat,i=1511,x=0.9889028039860764,y=0.25079970858002243 a=zee,b=hat,i=1512,x=0.40679341185508744,y=0.5138676082375969 a=eks,b=hat,i=1513,x=0.10774228377040074,y=0.15410741897104152 a=eks,b=eks,i=1514,x=0.4621589895594861,y=0.9572796836020941 a=eks,b=eks,i=1515,x=0.37334324705844235,y=0.5146787371775148 a=pan,b=eks,i=1516,x=0.322276672926436,y=0.4473633411895408 a=eks,b=eks,i=1517,x=0.9166592846030838,y=0.9746072560912218 a=zee,b=zee,i=1518,x=0.6805021595118457,y=0.0973567941307375 a=eks,b=zee,i=1519,x=0.008458305921919762,y=0.13018614842795018 a=wye,b=pan,i=1520,x=0.6365490008145669,y=0.717108948902972 a=zee,b=eks,i=1521,x=0.8128775978881801,y=0.8496069709075166 a=zee,b=eks,i=1522,x=0.7549485896689099,y=0.8158698570741542 a=wye,b=wye,i=1523,x=0.005603558151104915,y=0.7322907338442813 a=eks,b=wye,i=1524,x=0.2173598291514076,y=0.8332636657137272 a=eks,b=hat,i=1525,x=0.9893289065716524,y=0.4815313236058858 a=wye,b=eks,i=1526,x=0.5993045597268822,y=0.8066671481799782 a=pan,b=hat,i=1527,x=0.28028817426492336,y=0.9622494242847022 a=zee,b=hat,i=1528,x=0.1807703534747297,y=0.5647917504765553 a=pan,b=zee,i=1529,x=0.6659896188082082,y=0.08073793623287506 a=wye,b=zee,i=1530,x=0.0001874794831505655,y=0.316767027644979 a=pan,b=zee,i=1531,x=0.8883596657541506,y=0.5839060771184763 a=eks,b=hat,i=1532,x=0.901005316986836,y=0.8140237382706386 a=zee,b=hat,i=1533,x=0.9413660325436318,y=0.06622163813109339 a=hat,b=eks,i=1534,x=0.03906160456377494,y=0.1079795640773159 a=pan,b=hat,i=1535,x=0.9317916001293041,y=0.3898775157821377 a=wye,b=hat,i=1536,x=0.015674157771976116,y=0.69356849237495 a=pan,b=pan,i=1537,x=0.24487835477169373,y=0.5533586202131611 a=pan,b=pan,i=1538,x=0.7004457835988849,y=0.9254536373090144 a=zee,b=zee,i=1539,x=0.08095025737185801,y=0.42649957909211544 a=zee,b=hat,i=1540,x=0.5503724625066438,y=0.8550739169017145 a=pan,b=wye,i=1541,x=0.45409966242017596,y=0.6097069133161814 a=wye,b=wye,i=1542,x=0.8929002429586355,y=0.32554836024869227 a=pan,b=hat,i=1543,x=0.5949367118079497,y=0.8559890968130015 a=wye,b=zee,i=1544,x=0.9409798267255335,y=0.018548163160445608 a=pan,b=eks,i=1545,x=0.7534669087213052,y=0.23450536691315327 a=pan,b=eks,i=1546,x=0.2200107807755327,y=0.4056585225829311 a=pan,b=hat,i=1547,x=0.6431981362856164,y=0.20869397212585072 a=hat,b=zee,i=1548,x=0.7802297233261388,y=0.7951833869084849 a=wye,b=eks,i=1549,x=0.0689521292391374,y=0.7883769928657323 a=wye,b=wye,i=1550,x=0.08609382344969774,y=0.39902582557569544 a=zee,b=zee,i=1551,x=0.8470067873893261,y=0.16901402355720452 a=wye,b=eks,i=1552,x=0.7411482258747379,y=0.5326218258597286 a=eks,b=wye,i=1553,x=0.9069733522359251,y=0.30710040658612636 a=zee,b=eks,i=1554,x=0.27856650294803487,y=0.3773512841270542 a=pan,b=pan,i=1555,x=0.5341857564145447,y=0.33670626249057545 a=zee,b=pan,i=1556,x=0.810331031324778,y=0.8529873485281747 a=pan,b=eks,i=1557,x=0.8809860667113874,y=0.6544680775174134 a=zee,b=zee,i=1558,x=0.5835792774028313,y=0.7084079588663174 a=wye,b=zee,i=1559,x=0.44436564072900075,y=0.5752434865340957 a=hat,b=zee,i=1560,x=0.05594331248193807,y=0.6221392828715202 a=pan,b=zee,i=1561,x=0.705850527727704,y=0.9592589404430422 a=hat,b=hat,i=1562,x=0.31193139935992087,y=0.16547553772610035 a=wye,b=pan,i=1563,x=0.619202510644987,y=0.43091955100529267 a=zee,b=eks,i=1564,x=0.3001925600592342,y=0.8376369289625749 a=zee,b=pan,i=1565,x=0.012156208135737478,y=0.3456043711066239 a=zee,b=wye,i=1566,x=0.8568468043920444,y=0.4407063036969697 a=zee,b=wye,i=1567,x=0.9107751651007914,y=0.4338277282451076 a=zee,b=hat,i=1568,x=0.7354460222177639,y=0.9579628704250065 a=pan,b=pan,i=1569,x=0.28206876750655996,y=0.6360639371724323 a=zee,b=eks,i=1570,x=0.8221229536271197,y=0.11834502495832944 a=pan,b=wye,i=1571,x=0.6137258407313767,y=0.9758738290281926 a=pan,b=pan,i=1572,x=0.21906870698568925,y=0.09712236243897499 a=pan,b=eks,i=1573,x=0.3161549490930624,y=0.6465981924405851 a=zee,b=hat,i=1574,x=0.392507481283901,y=0.8101156318295134 a=eks,b=eks,i=1575,x=0.7966043024311776,y=0.2593981756391409 a=zee,b=zee,i=1576,x=0.8002836252017393,y=0.8669638365198293 a=wye,b=hat,i=1577,x=0.0784765489757262,y=0.2919577999135742 a=wye,b=wye,i=1578,x=0.8007027846918099,y=0.16134496938130005 a=wye,b=zee,i=1579,x=0.8737327971880199,y=0.7021864790253274 a=zee,b=wye,i=1580,x=0.5926703370632916,y=0.6204701558848567 a=eks,b=zee,i=1581,x=0.3258371500409273,y=0.4813220118624293 a=wye,b=wye,i=1582,x=0.45519672674498746,y=0.6149833786028758 a=pan,b=wye,i=1583,x=0.7445036133271608,y=0.3559946225162539 a=eks,b=pan,i=1584,x=0.21680886346713335,y=0.8184061883186948 a=wye,b=wye,i=1585,x=0.031589920237896196,y=0.5767882347019143 a=pan,b=wye,i=1586,x=0.6737421455744065,y=0.8440144488545762 a=wye,b=eks,i=1587,x=0.2445786639209251,y=0.4387287649518946 a=hat,b=pan,i=1588,x=0.5212487539988067,y=0.2199522299331076 a=hat,b=zee,i=1589,x=0.6381249665841564,y=0.6622471527137181 a=zee,b=zee,i=1590,x=0.49197726385941254,y=0.2851074772091239 a=pan,b=wye,i=1591,x=0.27721780314806643,y=0.42224771091002244 a=pan,b=wye,i=1592,x=0.945365956010478,y=0.09306257348741964 a=wye,b=wye,i=1593,x=0.12456537324161354,y=0.709614178322504 a=hat,b=wye,i=1594,x=0.1981221992299298,y=0.6757943828554006 a=pan,b=pan,i=1595,x=0.5198729892603339,y=0.8135669258519346 a=eks,b=wye,i=1596,x=0.8578168450376926,y=0.8632162279300964 a=eks,b=hat,i=1597,x=0.3540018556898594,y=0.7991052287555176 a=eks,b=wye,i=1598,x=0.9276333581678391,y=0.06549902318059164 a=wye,b=zee,i=1599,x=0.4561658314107403,y=0.6365134752538643 a=pan,b=pan,i=1600,x=0.9022636603358615,y=0.2162188539106099 a=zee,b=hat,i=1601,x=0.21917535804489907,y=0.49754205213030844 a=wye,b=pan,i=1602,x=0.8342980736735198,y=0.6640472095662565 a=zee,b=wye,i=1603,x=0.8557749370240072,y=0.05159217506855951 a=eks,b=pan,i=1604,x=0.6578249784146099,y=0.08991421995527515 a=pan,b=hat,i=1605,x=0.7597487093068874,y=0.8484514239165745 a=pan,b=eks,i=1606,x=0.6945970040541443,y=0.2660407416106616 a=wye,b=hat,i=1607,x=0.9316005854017254,y=0.061544811707459846 a=pan,b=pan,i=1608,x=0.1076571003288127,y=0.7762663913386769 a=hat,b=hat,i=1609,x=0.6237995866155571,y=0.07849520372537022 a=wye,b=eks,i=1610,x=0.09062598480760276,y=0.3361854985819238 a=pan,b=pan,i=1611,x=0.007836662246717752,y=0.5697242748348913 a=eks,b=pan,i=1612,x=0.34051658433735943,y=0.28757859267810415 a=hat,b=zee,i=1613,x=0.6572715559476069,y=0.39371095173028303 a=wye,b=pan,i=1614,x=0.8905869590474236,y=0.047907908875908234 a=eks,b=wye,i=1615,x=0.05539774482352222,y=0.030230875132911672 a=hat,b=pan,i=1616,x=0.31269372542106866,y=0.5929050080918079 a=eks,b=eks,i=1617,x=0.5259315994925159,y=0.3120388126285063 a=zee,b=eks,i=1618,x=0.41825022828100444,y=0.010066997525972399 a=hat,b=pan,i=1619,x=0.9529901310801209,y=0.24566804188484748 a=eks,b=hat,i=1620,x=0.1861273836070172,y=0.2869387265308132 a=wye,b=eks,i=1621,x=0.4197448738879491,y=0.057355525921190864 a=eks,b=eks,i=1622,x=0.5188894343183612,y=0.14708356201436057 a=pan,b=hat,i=1623,x=0.6787950657750607,y=0.06224754425761503 a=eks,b=zee,i=1624,x=0.9376797227474318,y=0.45224464425072863 a=wye,b=zee,i=1625,x=0.7652458613408694,y=0.959285581308301 a=wye,b=hat,i=1626,x=0.3525357465470107,y=0.7113074877138676 a=eks,b=eks,i=1627,x=0.6651612159386544,y=0.09641171687890637 a=pan,b=hat,i=1628,x=0.6018119249348337,y=0.2647753300105741 a=hat,b=zee,i=1629,x=0.41083118021802867,y=0.019106148002514645 a=hat,b=wye,i=1630,x=0.4217815192818861,y=0.6702955396816114 a=wye,b=hat,i=1631,x=0.7242804590797115,y=0.9448679681099966 a=wye,b=wye,i=1632,x=0.11624568451306994,y=0.8905809281772715 a=pan,b=wye,i=1633,x=0.38538324135826085,y=0.9883618907956973 a=hat,b=pan,i=1634,x=0.5776207387085575,y=0.2528561924267074 a=wye,b=pan,i=1635,x=0.8895974823179132,y=0.9200024991202054 a=wye,b=wye,i=1636,x=0.9393356532728606,y=0.6298264999340702 a=wye,b=eks,i=1637,x=0.9073542081519019,y=0.6848431646656846 a=hat,b=wye,i=1638,x=0.41413865923623305,y=0.9996509466622345 a=hat,b=pan,i=1639,x=0.4583916991957001,y=0.6357936726110696 a=eks,b=wye,i=1640,x=0.7198824080298333,y=0.7037862057023272 a=zee,b=hat,i=1641,x=0.17301970050562698,y=0.7988297836126249 a=hat,b=zee,i=1642,x=0.08350260061450743,y=0.7500700943710352 a=pan,b=eks,i=1643,x=0.4445332045218795,y=0.5668553575161199 a=hat,b=zee,i=1644,x=0.958532242547598,y=0.2998060164234553 a=pan,b=pan,i=1645,x=0.8386173577817879,y=0.7579883039951569 a=zee,b=hat,i=1646,x=0.4223193298481345,y=0.8728331174039174 a=wye,b=zee,i=1647,x=0.3542223974517451,y=0.4616303281316404 a=zee,b=pan,i=1648,x=0.1732057619535785,y=0.21331253786975357 a=hat,b=wye,i=1649,x=0.7928655951515221,y=0.29258856907772846 a=zee,b=wye,i=1650,x=0.8310778499617896,y=0.8744033167682863 a=pan,b=wye,i=1651,x=0.22292538964605568,y=0.8685911019201707 a=eks,b=zee,i=1652,x=0.5205479143101123,y=0.2930255040077785 a=wye,b=wye,i=1653,x=0.6034173789737551,y=0.7826811363427305 a=hat,b=zee,i=1654,x=0.1272383433369223,y=0.7739737595522014 a=zee,b=eks,i=1655,x=0.31813723998346144,y=0.2538852441364856 a=wye,b=hat,i=1656,x=0.18836020025377764,y=0.20683034404839462 a=pan,b=hat,i=1657,x=0.6185887927483923,y=0.10371843594601571 a=wye,b=zee,i=1658,x=0.42244696220990907,y=0.25272710810302346 a=wye,b=hat,i=1659,x=0.29012052922811093,y=0.41591681426338967 a=wye,b=hat,i=1660,x=0.4268085841844734,y=0.3388035517120921 a=eks,b=hat,i=1661,x=0.13934499347961038,y=0.03663996929413327 a=pan,b=hat,i=1662,x=0.012677030530496736,y=0.510781054167575 a=zee,b=eks,i=1663,x=0.40503031227105424,y=0.6047965215819301 a=wye,b=pan,i=1664,x=0.6399761240712305,y=0.09533593475272217 a=wye,b=eks,i=1665,x=0.8939474493355103,y=0.9223252135239184 a=pan,b=eks,i=1666,x=0.16666185875740613,y=0.5177501799126248 a=pan,b=wye,i=1667,x=0.7253392873302943,y=0.09162119951978043 a=eks,b=eks,i=1668,x=0.513508182615633,y=0.1685023831639888 a=wye,b=hat,i=1669,x=0.4710950479501834,y=0.03651025725804602 a=hat,b=eks,i=1670,x=0.6003116669898597,y=0.7981557111587316 a=pan,b=pan,i=1671,x=0.8116187328458756,y=0.8072718271616067 a=pan,b=wye,i=1672,x=0.7034003424147444,y=0.6847351199705963 a=wye,b=hat,i=1673,x=0.5949143416873871,y=0.8102803139285161 a=hat,b=wye,i=1674,x=0.5855903947052084,y=0.4648428630367838 a=hat,b=pan,i=1675,x=0.3455272053677292,y=0.6971667108454541 a=wye,b=wye,i=1676,x=0.29137127774161453,y=0.3509788972831772 a=zee,b=hat,i=1677,x=0.051223624824948355,y=0.48806061670524303 a=pan,b=zee,i=1678,x=0.22830360777714898,y=0.040523234104181904 a=zee,b=zee,i=1679,x=0.2004874019427556,y=0.2692182176272302 a=pan,b=wye,i=1680,x=0.7590576123107873,y=0.17200150784460888 a=hat,b=pan,i=1681,x=0.8474039861745504,y=0.5929326488850256 a=pan,b=zee,i=1682,x=0.6678126441832403,y=0.7581822567177666 a=eks,b=eks,i=1683,x=0.1656742241132675,y=0.25898444627641315 a=eks,b=eks,i=1684,x=0.08681268181886848,y=0.14340546739344362 a=pan,b=pan,i=1685,x=0.96441969603388,y=0.3414555586796736 a=zee,b=wye,i=1686,x=0.3371665714902127,y=0.9792785331415429 a=pan,b=eks,i=1687,x=0.663918740679759,y=0.7797473286438443 a=eks,b=wye,i=1688,x=0.26502140138042296,y=0.8841653957891482 a=hat,b=eks,i=1689,x=0.49022956784197735,y=0.4412363150159613 a=pan,b=pan,i=1690,x=0.4323862798117054,y=0.9572877683405837 a=wye,b=hat,i=1691,x=0.19346871577634817,y=0.3548449217449817 a=eks,b=zee,i=1692,x=0.2220528759711472,y=0.2854499747333922 a=wye,b=pan,i=1693,x=0.6318004848086037,y=0.8235151199361017 a=hat,b=hat,i=1694,x=0.22300051255024678,y=0.23627303242311026 a=pan,b=eks,i=1695,x=0.606816508396926,y=0.4747964191601073 a=pan,b=eks,i=1696,x=0.5409026908587434,y=0.8707138792965543 a=zee,b=eks,i=1697,x=0.8215348448990311,y=0.5963587804425763 a=eks,b=hat,i=1698,x=0.4552430260978796,y=0.7656888582137643 a=eks,b=eks,i=1699,x=0.5528124536495131,y=0.03385319757100913 a=wye,b=pan,i=1700,x=0.5921927876548824,y=0.13717891760982504 a=wye,b=wye,i=1701,x=0.3521072429813412,y=0.9393268458767366 a=eks,b=eks,i=1702,x=0.615481896967935,y=0.4253334980050465 a=hat,b=eks,i=1703,x=0.04267213782959711,y=0.6683763263616654 a=zee,b=wye,i=1704,x=0.417590320872979,y=0.7481853946231414 a=eks,b=wye,i=1705,x=0.4519026086752629,y=0.721298569465698 a=eks,b=wye,i=1706,x=0.867732327367188,y=0.7815034918779579 a=eks,b=pan,i=1707,x=0.21735365651407101,y=0.6786702647895654 a=eks,b=wye,i=1708,x=0.7426314107643154,y=0.39737817100828876 a=hat,b=wye,i=1709,x=0.7255615455173713,y=0.7788950854100821 a=pan,b=hat,i=1710,x=0.08892696718996207,y=0.9572747456151248 a=eks,b=hat,i=1711,x=0.8331359499607889,y=0.8880694168170389 a=pan,b=zee,i=1712,x=0.07987647709173995,y=0.13417502683990923 a=eks,b=wye,i=1713,x=0.43055194021989684,y=0.12038634859450736 a=eks,b=eks,i=1714,x=0.5087128193007605,y=0.9531328272635052 a=wye,b=zee,i=1715,x=0.5007673042035596,y=0.0839554814172323 a=zee,b=wye,i=1716,x=0.9367542179955354,y=0.8831199104153296 a=zee,b=zee,i=1717,x=0.8370665182431167,y=0.46590727343637683 a=zee,b=hat,i=1718,x=0.6417213786646256,y=0.12267793340629607 a=hat,b=pan,i=1719,x=0.48165651092697337,y=0.9550338464219692 a=pan,b=pan,i=1720,x=0.26837378206040097,y=0.3273738090239059 a=zee,b=eks,i=1721,x=0.3013268284235642,y=0.9999170047266996 a=eks,b=pan,i=1722,x=0.7488627212441221,y=0.7589673147670182 a=pan,b=zee,i=1723,x=0.22059597690872113,y=0.4590031168653098 a=zee,b=wye,i=1724,x=0.11085385425683147,y=0.18276048166565262 a=eks,b=eks,i=1725,x=0.8016828955823794,y=0.5017037375277129 a=eks,b=wye,i=1726,x=0.9929352438598067,y=0.836317286740252 a=hat,b=pan,i=1727,x=0.015544541266721779,y=0.4301942866494898 a=wye,b=hat,i=1728,x=0.24080891134309446,y=0.5995840846866549 a=hat,b=pan,i=1729,x=0.006810750830322787,y=0.855871006710109 a=wye,b=zee,i=1730,x=0.17481728816675346,y=0.4661820645212398 a=wye,b=zee,i=1731,x=0.255264888272124,y=0.9481051880482031 a=eks,b=wye,i=1732,x=0.9141703983722962,y=0.7783272768366281 a=pan,b=wye,i=1733,x=0.4811498350363058,y=0.31752434003930774 a=wye,b=hat,i=1734,x=0.33815529285945034,y=0.8025791463907084 a=wye,b=eks,i=1735,x=0.4660052329093146,y=0.6822728002131543 a=eks,b=pan,i=1736,x=0.42070034175427795,y=0.8250949093967167 a=hat,b=hat,i=1737,x=0.8848216308084669,y=0.49372633356388596 a=wye,b=wye,i=1738,x=0.41919127534471545,y=0.6972253946537716 a=pan,b=hat,i=1739,x=0.7458644297757762,y=0.06863960925170765 a=zee,b=hat,i=1740,x=0.5467481093982075,y=0.20576784027619854 a=hat,b=hat,i=1741,x=0.6667341296371178,y=0.5083249671499618 a=zee,b=zee,i=1742,x=0.5570445537603863,y=0.9969595288070264 a=hat,b=pan,i=1743,x=0.3878736075798501,y=0.09689320155996384 a=hat,b=wye,i=1744,x=0.47545940383287155,y=0.035171107409935454 a=wye,b=pan,i=1745,x=0.05202061770868127,y=0.6566730002228411 a=zee,b=hat,i=1746,x=0.058673442891371996,y=0.28933038921745524 a=wye,b=hat,i=1747,x=0.14150517117852657,y=0.536530005390096 a=eks,b=wye,i=1748,x=0.3689045321575106,y=0.43375960646000566 a=wye,b=eks,i=1749,x=0.08070562415535032,y=0.7601097373668262 a=zee,b=pan,i=1750,x=0.42748309274481444,y=0.40582328846411353 a=eks,b=pan,i=1751,x=0.5101125068297688,y=0.17416701133200285 a=eks,b=hat,i=1752,x=0.6822739323301563,y=0.934728306935636 a=zee,b=wye,i=1753,x=0.5815603591837878,y=0.42946603160181884 a=eks,b=zee,i=1754,x=0.4411659420836479,y=0.658970404212564 a=pan,b=eks,i=1755,x=0.16413727843701775,y=0.9186399984720109 a=hat,b=hat,i=1756,x=0.6677910628012946,y=0.7992076156627536 a=pan,b=pan,i=1757,x=0.018771917494669887,y=0.07627637321631209 a=eks,b=eks,i=1758,x=0.3849737318613389,y=0.10314796719548613 a=eks,b=hat,i=1759,x=0.004605943802663104,y=0.13706408448625906 a=pan,b=hat,i=1760,x=0.16534300738225027,y=0.6267714211033921 a=zee,b=zee,i=1761,x=0.9779052389253532,y=0.5003086801528233 a=wye,b=hat,i=1762,x=0.04507239441313149,y=0.7716812127623998 a=hat,b=hat,i=1763,x=0.6315164191885015,y=0.4375276804518171 a=hat,b=pan,i=1764,x=0.02195532641775666,y=0.2526330533315183 a=hat,b=eks,i=1765,x=0.2835946220779688,y=0.29118113110322497 a=hat,b=zee,i=1766,x=0.382493150516817,y=0.8520221210763981 a=zee,b=wye,i=1767,x=0.3657210401100467,y=0.6620479513955376 a=eks,b=zee,i=1768,x=0.7033634045957338,y=0.47107520132096625 a=zee,b=pan,i=1769,x=0.7412198854939575,y=0.34206923036029935 a=eks,b=wye,i=1770,x=0.7022926949673525,y=0.8178450530445518 a=wye,b=zee,i=1771,x=0.8754670655329418,y=0.17333696566959766 a=hat,b=eks,i=1772,x=0.585792241890598,y=0.7443360574921659 a=zee,b=zee,i=1773,x=0.6522535015576731,y=0.21757325076071798 a=pan,b=pan,i=1774,x=0.09695201653405716,y=0.8252978168426179 a=zee,b=zee,i=1775,x=0.977214551248574,y=0.4647124207647422 a=pan,b=hat,i=1776,x=0.9052349202388439,y=0.23607383279010508 a=pan,b=pan,i=1777,x=0.8770213930313705,y=0.2649679554558544 a=eks,b=pan,i=1778,x=0.5825936705834729,y=0.5453162110699705 a=eks,b=hat,i=1779,x=0.5006571233548579,y=0.1243780561189558 a=pan,b=zee,i=1780,x=0.1846415746915494,y=0.04736023830541203 a=wye,b=pan,i=1781,x=0.578399885263909,y=0.04308726031144994 a=pan,b=eks,i=1782,x=0.9210030244758979,y=0.7773896236831834 a=wye,b=zee,i=1783,x=0.9426077714915372,y=0.2538200528298715 a=wye,b=wye,i=1784,x=0.8612436216521431,y=0.8048330008328066 a=hat,b=wye,i=1785,x=0.9754832792942771,y=0.28923936562916985 a=pan,b=zee,i=1786,x=0.2494860009657509,y=0.17194280903044357 a=eks,b=eks,i=1787,x=0.368000320083405,y=0.4886055420500375 a=pan,b=wye,i=1788,x=0.26250246334689176,y=0.04787633922145995 a=pan,b=wye,i=1789,x=0.7301945417230211,y=0.226509032748324 a=hat,b=zee,i=1790,x=0.37729036546983097,y=0.27703668720411234 a=hat,b=pan,i=1791,x=0.05762772701528418,y=0.8943100353103193 a=pan,b=zee,i=1792,x=0.8322225569737312,y=0.7917170874641617 a=wye,b=zee,i=1793,x=0.31884392088021907,y=0.48529327738748296 a=wye,b=wye,i=1794,x=0.2263305044828683,y=0.937998380780705 a=hat,b=zee,i=1795,x=0.16118129356442434,y=0.16950272509494824 a=zee,b=eks,i=1796,x=0.4942226187236075,y=0.14210516571467535 a=hat,b=zee,i=1797,x=0.7287749063387707,y=0.9927587108357429 a=pan,b=hat,i=1798,x=0.6828185492461075,y=0.4502861054322417 a=hat,b=zee,i=1799,x=0.9355569291824988,y=0.20314844189673253 a=zee,b=pan,i=1800,x=0.72307448294554,y=0.6376778174182595 a=pan,b=eks,i=1801,x=0.8102218415617043,y=0.6044303313247449 a=zee,b=pan,i=1802,x=0.357073805593369,y=0.8319647967908266 a=eks,b=wye,i=1803,x=0.5196592664144227,y=0.7156673976778524 a=eks,b=wye,i=1804,x=0.29264863959299714,y=0.708791737405034 a=zee,b=eks,i=1805,x=0.8443555032696601,y=0.064863387129513 a=zee,b=hat,i=1806,x=0.6164118793332103,y=0.1255925909310226 a=wye,b=hat,i=1807,x=0.14657249890035728,y=0.5230067969283422 a=hat,b=wye,i=1808,x=0.2287730659373145,y=0.20360891960927452 a=eks,b=zee,i=1809,x=0.5828879813451391,y=0.8871296430025095 a=wye,b=hat,i=1810,x=0.10808902686015609,y=0.003095657967865484 a=zee,b=wye,i=1811,x=0.879138779526544,y=0.8158846610141476 a=zee,b=wye,i=1812,x=0.8726848944578037,y=0.06260871597344408 a=eks,b=pan,i=1813,x=0.7037266550933726,y=0.35602278298025203 a=hat,b=pan,i=1814,x=0.9644298322610328,y=0.4993991438913755 a=eks,b=pan,i=1815,x=0.5418348248161854,y=0.9355389520025802 a=hat,b=hat,i=1816,x=0.09792806194299297,y=0.14176660544329966 a=pan,b=pan,i=1817,x=0.5655519977509864,y=0.5975680493813812 a=zee,b=wye,i=1818,x=0.8214459119942229,y=0.29965361128737544 a=pan,b=wye,i=1819,x=0.18318519888267681,y=0.43197282065530884 a=hat,b=pan,i=1820,x=0.020838363795188775,y=0.8508185143390146 a=pan,b=pan,i=1821,x=0.38294698779651215,y=0.8341489509213522 a=hat,b=wye,i=1822,x=0.522603809398008,y=0.6634567147948507 a=zee,b=hat,i=1823,x=0.5191794392445693,y=0.5255931403873793 a=eks,b=pan,i=1824,x=0.44104659188971895,y=0.6594737117599939 a=wye,b=pan,i=1825,x=0.5392802909916755,y=0.8897079123047565 a=wye,b=pan,i=1826,x=0.8957889050713344,y=0.7119911089910552 a=hat,b=hat,i=1827,x=0.7124428569925854,y=0.5480761759295041 a=zee,b=hat,i=1828,x=0.05786804641448351,y=0.4254319991402028 a=pan,b=wye,i=1829,x=0.4687534933888111,y=0.706582639979992 a=zee,b=hat,i=1830,x=0.2721305750226911,y=0.005377285991549963 a=pan,b=hat,i=1831,x=0.18303692231105184,y=0.21025826705763861 a=eks,b=pan,i=1832,x=0.2038945772719637,y=0.5357417117465196 a=hat,b=eks,i=1833,x=0.014590280685686796,y=0.7002596722333126 a=wye,b=wye,i=1834,x=0.949816635928921,y=0.1930644264586816 a=eks,b=wye,i=1835,x=0.9900052984177767,y=0.8879825093814294 a=wye,b=pan,i=1836,x=0.3181487584311439,y=0.5523667763399458 a=hat,b=eks,i=1837,x=0.9591593624436306,y=0.6113919452246622 a=hat,b=zee,i=1838,x=0.559343676070325,y=0.890209332873675 a=pan,b=hat,i=1839,x=0.5368391085129115,y=0.8180683703610315 a=pan,b=eks,i=1840,x=0.80438348711484,y=0.2022566057940537 a=wye,b=hat,i=1841,x=0.5532887348403182,y=0.24429939746293128 a=pan,b=hat,i=1842,x=0.9898704891265324,y=0.7317672838087951 a=zee,b=hat,i=1843,x=0.5087737269682078,y=0.0806841886079015 a=zee,b=eks,i=1844,x=0.09986788038161976,y=0.9714739666784168 a=hat,b=eks,i=1845,x=0.09049828109166225,y=0.1947578588027301 a=eks,b=zee,i=1846,x=0.74504290778088,y=0.46929232899960105 a=zee,b=wye,i=1847,x=0.5102908546678789,y=0.8622466590956885 a=eks,b=wye,i=1848,x=0.9737508284191876,y=0.6060569185675129 a=pan,b=pan,i=1849,x=0.4022620876038918,y=0.7846557844677974 a=eks,b=zee,i=1850,x=0.31039634454352627,y=0.5252329961384006 a=eks,b=eks,i=1851,x=0.7390412177790203,y=0.769519937153525 a=hat,b=wye,i=1852,x=0.6238871121990431,y=0.41186598086229964 a=zee,b=wye,i=1853,x=0.8447601423313442,y=0.8520011644241022 a=zee,b=zee,i=1854,x=0.2962334576293918,y=0.926132945738903 a=pan,b=hat,i=1855,x=0.8401351548600108,y=0.6504879006085633 a=hat,b=zee,i=1856,x=0.07606845988104194,y=0.00034299355854428004 a=wye,b=zee,i=1857,x=0.4582107832207104,y=0.2944016633400677 a=eks,b=wye,i=1858,x=0.9930106907313097,y=0.7391793267018062 a=hat,b=pan,i=1859,x=0.42255637553704006,y=0.02707473931820803 a=zee,b=hat,i=1860,x=0.24049082129786625,y=0.987975708111131 a=zee,b=pan,i=1861,x=0.47821784409887513,y=0.8783256619433235 a=eks,b=hat,i=1862,x=0.8127278660333865,y=0.8191943473539423 a=pan,b=pan,i=1863,x=0.8302838683545155,y=0.24734279452032182 a=hat,b=zee,i=1864,x=0.826660555911501,y=0.2651509088000916 a=eks,b=zee,i=1865,x=0.38057266246696253,y=0.03213839928081663 a=eks,b=hat,i=1866,x=0.8031652473986357,y=0.5958264736432561 a=wye,b=wye,i=1867,x=0.15951611637472107,y=0.4077662801256805 a=eks,b=zee,i=1868,x=0.6732934218406293,y=0.7505416061385557 a=eks,b=zee,i=1869,x=0.633163245609033,y=0.8429419490648784 a=wye,b=pan,i=1870,x=0.10163096579388076,y=0.13758281047223042 a=hat,b=wye,i=1871,x=0.08107553652444954,y=0.2640692772059776 a=eks,b=eks,i=1872,x=0.42414648489598794,y=0.6065273117846864 a=wye,b=hat,i=1873,x=0.6051325007195336,y=0.0842051888808607 a=zee,b=eks,i=1874,x=0.4161594343684122,y=0.5842158524042167 a=wye,b=zee,i=1875,x=0.9548486055254091,y=0.3424491192867498 a=pan,b=eks,i=1876,x=0.6468659335884865,y=0.710835697336098 a=hat,b=zee,i=1877,x=0.9303319011279677,y=0.7113730786626118 a=zee,b=pan,i=1878,x=0.14398708400857807,y=0.7966487889999802 a=pan,b=zee,i=1879,x=0.527406345229876,y=0.47062036425973675 a=hat,b=eks,i=1880,x=0.8853889990767594,y=0.29294894207487143 a=pan,b=zee,i=1881,x=0.40105266769707004,y=0.7644044149977851 a=pan,b=zee,i=1882,x=0.9327815865652367,y=0.3602677495267469 a=pan,b=zee,i=1883,x=0.34429591718844843,y=0.05689015367587591 a=wye,b=hat,i=1884,x=0.708143215528541,y=0.3560504482521065 a=zee,b=wye,i=1885,x=0.11851805777842395,y=0.23782759573809764 a=eks,b=wye,i=1886,x=0.33449907630162523,y=0.9409666461544096 a=hat,b=hat,i=1887,x=0.9314693861337467,y=0.13863337436919843 a=zee,b=eks,i=1888,x=0.3519272451539994,y=0.5053162657228568 a=eks,b=zee,i=1889,x=0.8736600260492586,y=0.19107483910062717 a=hat,b=eks,i=1890,x=0.4174883365897032,y=0.6879531497535479 a=zee,b=hat,i=1891,x=0.5382838856043256,y=0.8806888516912734 a=zee,b=eks,i=1892,x=0.8124856255009596,y=0.9417530148525823 a=hat,b=zee,i=1893,x=0.6120649825518716,y=0.8578129408524632 a=wye,b=wye,i=1894,x=0.4169983470765677,y=0.31293410227278906 a=hat,b=wye,i=1895,x=0.10961101368157089,y=0.32892883700517095 a=hat,b=wye,i=1896,x=0.9132730441559633,y=0.7487099837821863 a=hat,b=hat,i=1897,x=0.7675505245773306,y=0.8461420935545583 a=pan,b=eks,i=1898,x=0.3252151127693067,y=0.9364118111641275 a=wye,b=hat,i=1899,x=0.1709902864944267,y=0.48516354025753305 a=hat,b=pan,i=1900,x=0.6087321537907773,y=0.7970729316915601 a=pan,b=eks,i=1901,x=0.24652370926788014,y=0.5636927917895729 a=hat,b=zee,i=1902,x=0.1264928014486475,y=0.6961063811057807 a=wye,b=eks,i=1903,x=0.31804488869587366,y=0.14285299153786624 a=eks,b=zee,i=1904,x=0.33758768803317096,y=0.5523041691821023 a=hat,b=wye,i=1905,x=0.7783001976331004,y=0.4281025219221022 a=hat,b=wye,i=1906,x=0.2507442607453316,y=0.9002257467281997 a=eks,b=eks,i=1907,x=0.9438758492662777,y=0.7214758965332612 a=wye,b=zee,i=1908,x=0.32738813438706793,y=0.7623152593994879 a=eks,b=hat,i=1909,x=0.7314442344747841,y=0.030358065216463115 a=hat,b=wye,i=1910,x=0.7380789095291242,y=0.9502552254648776 a=pan,b=pan,i=1911,x=0.3011591867627148,y=0.6774130244502444 a=wye,b=wye,i=1912,x=0.7175207335721732,y=0.5163511962741214 a=hat,b=pan,i=1913,x=0.010071221635602146,y=0.5065324934192511 a=eks,b=pan,i=1914,x=0.30367239205139296,y=0.7075141985416662 a=hat,b=pan,i=1915,x=0.6426932948416931,y=0.5081694432335289 a=wye,b=hat,i=1916,x=0.47018235692725985,y=0.8010843037704246 a=zee,b=wye,i=1917,x=0.529838527546025,y=0.975044822917303 a=hat,b=eks,i=1918,x=0.019159081788694077,y=0.5386166416064818 a=eks,b=zee,i=1919,x=0.45717869373411757,y=0.8830819174369392 a=eks,b=wye,i=1920,x=0.6319288641477111,y=0.47412119650722184 a=eks,b=wye,i=1921,x=0.9456983171768308,y=0.8913471052406744 a=wye,b=pan,i=1922,x=0.6733026865976656,y=0.5941565401265938 a=zee,b=zee,i=1923,x=0.15497719261601373,y=0.9824185888787137 a=zee,b=wye,i=1924,x=0.14261091973981976,y=0.03891416444006246 a=pan,b=pan,i=1925,x=0.051704291514689915,y=0.30096139627683915 a=eks,b=pan,i=1926,x=0.08149680519340818,y=0.371502322922598 a=eks,b=pan,i=1927,x=0.26745370041393246,y=0.7180946178205809 a=hat,b=pan,i=1928,x=0.03866554054364113,y=0.7467583161789872 a=pan,b=wye,i=1929,x=0.715219843779286,y=0.7347318985161266 a=hat,b=eks,i=1930,x=0.18556549546801415,y=0.8376753664837346 a=eks,b=eks,i=1931,x=0.6283884556872956,y=0.714926049974028 a=pan,b=wye,i=1932,x=0.08318436818892117,y=0.43049862856264764 a=wye,b=zee,i=1933,x=0.9047633922940572,y=0.7844909689207981 a=eks,b=hat,i=1934,x=0.2175670413228329,y=0.8617365456033637 a=wye,b=wye,i=1935,x=0.7550429521371519,y=0.786133808170408 a=wye,b=hat,i=1936,x=0.3345630973104814,y=0.2823268521687281 a=pan,b=wye,i=1937,x=0.9521970743863757,y=0.5949587882541866 a=zee,b=hat,i=1938,x=0.18206318284329825,y=0.0011400311959023357 a=wye,b=zee,i=1939,x=0.1903296792451994,y=0.9350080777637384 a=wye,b=hat,i=1940,x=0.37178768301191467,y=0.8451055253202524 a=pan,b=eks,i=1941,x=0.8294899690053994,y=0.7564416563177322 a=hat,b=hat,i=1942,x=0.44482696874869365,y=0.5961297980178011 a=pan,b=eks,i=1943,x=0.9719276019842854,y=0.640150164953268 a=eks,b=wye,i=1944,x=0.09816590063186759,y=0.8960419732965261 a=wye,b=wye,i=1945,x=0.8188272907846742,y=0.22236697182142784 a=pan,b=pan,i=1946,x=0.9840946983738358,y=0.24604842054457776 a=wye,b=eks,i=1947,x=0.5609426547261931,y=0.1519761843166667 a=zee,b=zee,i=1948,x=0.8526284266294675,y=0.7580336598194982 a=wye,b=eks,i=1949,x=0.04793743314382193,y=0.511362467180759 a=eks,b=hat,i=1950,x=0.5205580283603881,y=0.09466218875496657 a=eks,b=hat,i=1951,x=0.9392053569680634,y=0.9768144646610879 a=pan,b=hat,i=1952,x=0.491307664252547,y=0.8646927260623539 a=zee,b=eks,i=1953,x=0.6668788836391065,y=0.7090525532474364 a=zee,b=zee,i=1954,x=0.7595127799385754,y=0.6001574207956651 a=pan,b=pan,i=1955,x=0.3407552952250241,y=0.8020102136226014 a=pan,b=hat,i=1956,x=0.08503694234411441,y=0.7387665239824308 a=pan,b=zee,i=1957,x=0.9854793880226635,y=0.7095712814074717 a=wye,b=pan,i=1958,x=0.6114481880293695,y=0.22917077844582012 a=wye,b=zee,i=1959,x=0.5016850781819963,y=0.42040146896727615 a=eks,b=pan,i=1960,x=0.7325260743545391,y=0.35098817238458924 a=wye,b=wye,i=1961,x=0.29833631790760273,y=0.4831530650838167 a=hat,b=eks,i=1962,x=0.36631759989103085,y=0.29865431150806365 a=hat,b=eks,i=1963,x=0.23176876123591383,y=0.5612909158675198 a=wye,b=pan,i=1964,x=0.7334272338627286,y=0.650447648017669 a=pan,b=pan,i=1965,x=0.9367163916661853,y=0.9638919891814807 a=zee,b=hat,i=1966,x=0.7301180056013357,y=0.38279312633041496 a=wye,b=eks,i=1967,x=0.3271166838493157,y=0.8030348688816051 a=pan,b=eks,i=1968,x=0.7530954976867642,y=0.5048913343158832 a=wye,b=zee,i=1969,x=0.6270200861888447,y=0.24983293440736842 a=eks,b=zee,i=1970,x=0.12406730011560674,y=0.5862034791938755 a=hat,b=wye,i=1971,x=0.4654113772986844,y=0.03490618297713166 a=hat,b=wye,i=1972,x=0.5837244835312924,y=0.78564800693725 a=wye,b=hat,i=1973,x=0.5256418800394103,y=0.5657320340909927 a=hat,b=zee,i=1974,x=0.9946797442560897,y=0.17991015295150847 a=eks,b=eks,i=1975,x=0.5611515257329109,y=0.45353155787641375 a=wye,b=eks,i=1976,x=0.90900092404583,y=0.9088347779743747 a=wye,b=zee,i=1977,x=0.2485784939054746,y=0.5715538711284616 a=eks,b=eks,i=1978,x=0.43223859004330245,y=0.25096305614713244 a=wye,b=pan,i=1979,x=0.044824962223491194,y=0.26304195982115053 a=hat,b=zee,i=1980,x=0.8574700507192768,y=0.03240481571430498 a=hat,b=pan,i=1981,x=0.7205280959278643,y=0.9765256304646956 a=pan,b=eks,i=1982,x=0.11118021831380087,y=0.1736432452425345 a=eks,b=zee,i=1983,x=0.3665362715223871,y=0.8769601803237262 a=wye,b=zee,i=1984,x=0.5159131102473629,y=0.3138392498746069 a=hat,b=wye,i=1985,x=0.6785523977842361,y=0.9088522942899968 a=hat,b=eks,i=1986,x=0.8391540456864279,y=0.13395352775796587 a=wye,b=eks,i=1987,x=0.33553215256369306,y=0.8998597387125332 a=hat,b=zee,i=1988,x=0.3273336625347204,y=0.5235087574026606 a=pan,b=eks,i=1989,x=0.8846030796068061,y=0.1229509863981878 a=hat,b=eks,i=1990,x=0.972524874310568,y=0.7588379528101111 a=zee,b=pan,i=1991,x=0.4266265409041532,y=0.46661051389718977 a=eks,b=zee,i=1992,x=0.18951913536280773,y=0.3044420239454556 a=hat,b=pan,i=1993,x=0.6524602479494983,y=0.2683536424804953 a=hat,b=pan,i=1994,x=0.3458198938210745,y=0.15708271475158309 a=pan,b=hat,i=1995,x=0.2451140421214234,y=0.21125136662021793 a=wye,b=eks,i=1996,x=0.7260863327463748,y=0.8391383362988085 a=zee,b=wye,i=1997,x=0.3390776046149281,y=0.2943389939229085 a=eks,b=pan,i=1998,x=0.24597512351551498,y=0.5579233145456394 a=eks,b=zee,i=1999,x=0.6180255159787116,y=0.7640028449996572 a=pan,b=wye,i=2000,x=0.8323911295033875,y=0.05968766127057723 a=wye,b=hat,i=2001,x=0.15924096642007157,y=0.24059632344634185 a=pan,b=zee,i=2002,x=0.5349190357320186,y=0.508630259684438 a=pan,b=wye,i=2003,x=0.3562571816102539,y=0.9351982273289634 a=hat,b=pan,i=2004,x=0.5792914584913227,y=0.9721311150467201 a=hat,b=pan,i=2005,x=0.6721200696331198,y=0.5074220436659838 a=zee,b=pan,i=2006,x=0.36314674395500735,y=0.05966789024528896 a=eks,b=zee,i=2007,x=0.5198150674035192,y=0.5307294576536602 a=wye,b=wye,i=2008,x=0.8038374651958967,y=0.863525245703629 a=hat,b=eks,i=2009,x=0.8954319835423661,y=0.6074686757262493 a=hat,b=hat,i=2010,x=0.14682904757610016,y=0.5836897852849614 a=hat,b=wye,i=2011,x=0.5554922764125422,y=0.044893468168582085 a=wye,b=hat,i=2012,x=0.3272476785644499,y=0.2852380145740261 a=zee,b=pan,i=2013,x=0.5272911037027838,y=0.9007193862227653 a=pan,b=zee,i=2014,x=0.8942547964450125,y=0.7308860097948163 a=wye,b=pan,i=2015,x=0.7429848323935544,y=0.6564456028979551 a=wye,b=pan,i=2016,x=0.8976852390968387,y=0.3715619777706992 a=eks,b=eks,i=2017,x=0.5870221936023131,y=0.5886336776923361 a=pan,b=eks,i=2018,x=0.7548510407648094,y=0.259810938746426 a=wye,b=hat,i=2019,x=0.43322808613233055,y=0.0385758517767808 a=zee,b=eks,i=2020,x=0.6430370762426636,y=0.6948330772772741 a=pan,b=zee,i=2021,x=0.4140878244124503,y=0.398400762850186 a=eks,b=pan,i=2022,x=0.3500684495606733,y=0.14698881032642608 a=eks,b=zee,i=2023,x=0.8926094968763351,y=0.6086053558590667 a=wye,b=hat,i=2024,x=0.020600223126170603,y=0.20728018182250796 a=hat,b=wye,i=2025,x=0.0007025729724531304,y=0.6265023865043876 a=zee,b=wye,i=2026,x=0.8573260145899378,y=0.9080875650609371 a=eks,b=zee,i=2027,x=0.22981492296559103,y=0.10600637415066061 a=zee,b=zee,i=2028,x=0.6842296172237651,y=0.896024172825087 a=pan,b=wye,i=2029,x=0.5829130314173805,y=0.3189845366520674 a=pan,b=wye,i=2030,x=0.14984955320446725,y=0.8011645466128109 a=wye,b=zee,i=2031,x=0.14619362934789815,y=0.04433757197092214 a=pan,b=hat,i=2032,x=0.5611491467878738,y=0.630949265472906 a=hat,b=wye,i=2033,x=0.005567301262607405,y=0.6290855880213555 a=zee,b=pan,i=2034,x=0.40924963766916733,y=0.922632813755277 a=eks,b=hat,i=2035,x=0.33767734812921923,y=0.5658087617423716 a=zee,b=eks,i=2036,x=0.25944332814164905,y=0.11267646149361388 a=eks,b=hat,i=2037,x=0.4613748353843449,y=0.5072335485279396 a=zee,b=zee,i=2038,x=0.3797322702325565,y=0.9465025393896492 a=hat,b=hat,i=2039,x=0.8389132941448142,y=0.9200224995580027 a=pan,b=pan,i=2040,x=0.7463150208227146,y=0.34885266263688197 a=wye,b=hat,i=2041,x=0.6563952046485523,y=0.7555478004412313 a=zee,b=hat,i=2042,x=0.2743477126375994,y=0.3824464564910681 a=hat,b=hat,i=2043,x=0.8811861962295147,y=0.5191315240489268 a=zee,b=eks,i=2044,x=0.3599144261574607,y=0.24553060035029017 a=pan,b=eks,i=2045,x=0.9781655353605474,y=0.2730587268790037 a=wye,b=hat,i=2046,x=0.7333941298571239,y=0.5739371545354796 a=hat,b=eks,i=2047,x=0.06042270034486685,y=0.46301889302926746 a=pan,b=hat,i=2048,x=0.10911169262757925,y=0.007073831794458529 a=pan,b=pan,i=2049,x=0.8624169299220058,y=0.9006582996702346 a=eks,b=eks,i=2050,x=0.040691774802510294,y=0.8066732453567129 a=eks,b=hat,i=2051,x=0.40407704836251557,y=0.26395123641005147 a=zee,b=hat,i=2052,x=0.009808918561178714,y=0.2302545994571994 a=wye,b=eks,i=2053,x=0.7633729697198686,y=0.8187837109642871 a=wye,b=hat,i=2054,x=0.10710381581294204,y=0.3286506389479086 a=hat,b=eks,i=2055,x=0.9832237471284704,y=0.23991238481161792 a=zee,b=pan,i=2056,x=0.6210754046594348,y=0.49331354774956016 a=pan,b=zee,i=2057,x=0.28231501416039284,y=0.12643281231603754 a=wye,b=hat,i=2058,x=0.045046526806835296,y=0.681451721478501 a=eks,b=pan,i=2059,x=0.9331162879465084,y=0.14664803314097596 a=zee,b=wye,i=2060,x=0.7720929751822915,y=0.330085050859654 a=zee,b=zee,i=2061,x=0.14974934709461651,y=0.697616433647398 a=wye,b=eks,i=2062,x=0.945982672513977,y=0.36668794201328303 a=eks,b=zee,i=2063,x=0.10743808879213779,y=0.6963841526487657 a=zee,b=pan,i=2064,x=0.5676519201496846,y=0.24351963361710904 a=wye,b=eks,i=2065,x=0.606169952184269,y=0.9495081658090401 a=hat,b=pan,i=2066,x=0.5362186062455647,y=0.18683078751407345 a=eks,b=eks,i=2067,x=0.23118685760407975,y=0.4886672632279645 a=wye,b=wye,i=2068,x=0.0181286937053855,y=0.4027507216590225 a=wye,b=zee,i=2069,x=0.8920322140255575,y=0.2821329353409344 a=zee,b=wye,i=2070,x=0.2845370086876513,y=0.4200729779675041 a=eks,b=wye,i=2071,x=0.6616434446154568,y=0.028717804930202817 a=pan,b=zee,i=2072,x=0.13789801706952376,y=0.6865579908342762 a=hat,b=pan,i=2073,x=0.14024645801145608,y=0.2232995634066972 a=eks,b=hat,i=2074,x=0.8416373289721065,y=0.009957706782034892 a=pan,b=eks,i=2075,x=0.2730024769669228,y=0.6092063716892284 a=wye,b=hat,i=2076,x=0.6679556713229464,y=0.23886590929858575 a=wye,b=pan,i=2077,x=0.6772238022128941,y=0.35715527067676667 a=wye,b=wye,i=2078,x=0.0007441043225671073,y=0.9342244226449593 a=eks,b=pan,i=2079,x=0.00844716490372166,y=0.7042488450623287 a=zee,b=hat,i=2080,x=0.9840706098598035,y=0.7011152185727909 a=zee,b=wye,i=2081,x=0.3382103536180968,y=0.04576622304303102 a=wye,b=hat,i=2082,x=0.0855328407000916,y=0.7955310778574013 a=wye,b=wye,i=2083,x=0.654630167298159,y=0.9490657525005854 a=hat,b=pan,i=2084,x=0.9418973198231615,y=0.8869025666330164 a=eks,b=eks,i=2085,x=0.38148259830551734,y=0.8664658521060588 a=hat,b=zee,i=2086,x=0.9687249489223216,y=0.9138672864469205 a=pan,b=zee,i=2087,x=0.4582214393900814,y=0.8311346736169871 a=hat,b=wye,i=2088,x=0.3324758019863273,y=0.4703648792781622 a=hat,b=hat,i=2089,x=0.9166551411558639,y=0.0986178333688883 a=zee,b=zee,i=2090,x=0.5043939613961448,y=0.9818791944950958 a=eks,b=wye,i=2091,x=0.1351492269897414,y=0.9388421670767862 a=pan,b=eks,i=2092,x=0.6581611437110156,y=0.2936463974495629 a=eks,b=wye,i=2093,x=0.5685533529741125,y=0.8133350683940237 a=wye,b=pan,i=2094,x=0.07847412023993783,y=0.3613060871668645 a=wye,b=wye,i=2095,x=0.20230852407018185,y=0.2291747261210969 a=eks,b=eks,i=2096,x=0.43638629510919924,y=0.2881257309332079 a=hat,b=eks,i=2097,x=0.26844813288649483,y=0.39273900559861075 a=hat,b=eks,i=2098,x=0.9966377977643898,y=0.5245550930114457 a=hat,b=pan,i=2099,x=0.03219741593758807,y=0.8801777270031927 a=eks,b=pan,i=2100,x=0.8264573211830318,y=0.3323904264186872 a=hat,b=wye,i=2101,x=0.5557805350665251,y=0.5952937921640231 a=zee,b=wye,i=2102,x=0.749445246206683,y=0.9220669751971446 a=pan,b=eks,i=2103,x=0.48622365678958046,y=0.5824051664305276 a=wye,b=zee,i=2104,x=0.24393506694975353,y=0.8625197120864077 a=pan,b=zee,i=2105,x=0.42667111990222584,y=0.4200738107939501 a=pan,b=eks,i=2106,x=0.6899381403750706,y=0.5175558265399449 a=pan,b=wye,i=2107,x=0.046210916618416364,y=0.25213670524015686 a=zee,b=zee,i=2108,x=0.7086278430636463,y=0.7267047227599615 a=pan,b=zee,i=2109,x=0.8286002064140777,y=0.7422535714385249 a=wye,b=eks,i=2110,x=0.9082291930295346,y=0.47111153171260134 a=hat,b=wye,i=2111,x=0.5188526237698469,y=0.10386838578674262 a=zee,b=pan,i=2112,x=0.02494942612055806,y=0.6771165590440439 a=pan,b=zee,i=2113,x=0.0793213913259122,y=0.046201894636212604 a=eks,b=wye,i=2114,x=0.339791829917532,y=0.6311099033330176 a=hat,b=eks,i=2115,x=0.09151886587216429,y=0.7423362419494414 a=zee,b=zee,i=2116,x=0.4003379315212102,y=0.0193682083394614 a=pan,b=hat,i=2117,x=0.3429130580701697,y=0.6027060638473042 a=pan,b=zee,i=2118,x=0.9627595397700258,y=0.13997934081700658 a=hat,b=hat,i=2119,x=0.8206707686267524,y=0.7611213033730956 a=zee,b=wye,i=2120,x=0.5559252019928892,y=0.7174146654070022 a=hat,b=wye,i=2121,x=0.9803985810617651,y=0.8394646120202436 a=zee,b=hat,i=2122,x=0.08631486480591943,y=0.5785230915820572 a=pan,b=wye,i=2123,x=0.9115498197515648,y=0.9169354954307747 a=hat,b=hat,i=2124,x=0.7798071504849725,y=0.19792727612064476 a=wye,b=pan,i=2125,x=0.8561718307822236,y=0.1291568082386848 a=hat,b=wye,i=2126,x=0.2863145718712009,y=0.5710669434512489 a=wye,b=eks,i=2127,x=0.06803650937651173,y=0.3577026589688229 a=wye,b=hat,i=2128,x=0.9111033241507589,y=0.10783082272199751 a=zee,b=eks,i=2129,x=0.28267518376958845,y=0.17688870699173864 a=hat,b=pan,i=2130,x=0.19116926141337387,y=0.27875749703114405 a=hat,b=hat,i=2131,x=0.3254603712033679,y=0.9274447308988584 a=eks,b=wye,i=2132,x=0.11768724156109422,y=0.8908179117578706 a=wye,b=pan,i=2133,x=0.6516558397748747,y=0.774009470971533 a=hat,b=eks,i=2134,x=0.9053305484140348,y=0.37780854020278265 a=pan,b=pan,i=2135,x=0.7849642445184846,y=0.2074226048103197 a=zee,b=wye,i=2136,x=0.2843358696868167,y=0.17750391830130807 a=pan,b=hat,i=2137,x=0.6831781526100863,y=0.005628299955970917 a=zee,b=wye,i=2138,x=0.29832744224162844,y=0.33074245583419115 a=zee,b=wye,i=2139,x=0.4116759409721965,y=0.16673308079819182 a=zee,b=wye,i=2140,x=0.3063387912982882,y=0.3715575632516237 a=pan,b=hat,i=2141,x=0.41506057628652626,y=0.013486526190589099 a=zee,b=wye,i=2142,x=0.517904841622836,y=0.53285652127 a=hat,b=pan,i=2143,x=0.9156355367699018,y=0.8823700552229912 a=pan,b=hat,i=2144,x=0.6484157591768972,y=0.18545458215405763 a=eks,b=eks,i=2145,x=0.2511948002161768,y=0.6576693696214415 a=eks,b=zee,i=2146,x=0.4990209540685181,y=0.1364915882864166 a=eks,b=wye,i=2147,x=0.15240384791463035,y=0.4599246782338706 a=zee,b=pan,i=2148,x=0.8912158164832823,y=0.0715866507974654 a=zee,b=eks,i=2149,x=0.7025420244699133,y=0.987609520343113 a=wye,b=pan,i=2150,x=0.3436366777295877,y=0.3694637710717039 a=hat,b=zee,i=2151,x=0.9616090415643731,y=0.8945473597755025 a=zee,b=hat,i=2152,x=0.480760014274322,y=0.09273697945051707 a=eks,b=hat,i=2153,x=0.17176533143479,y=0.9370337444082136 a=zee,b=pan,i=2154,x=0.1391723805955094,y=0.9355089025836978 a=hat,b=zee,i=2155,x=0.005175137015667519,y=0.6082400770560145 a=eks,b=wye,i=2156,x=0.5266959602940757,y=0.2966790787127306 a=wye,b=pan,i=2157,x=0.40990967259698485,y=0.46693754055942116 a=hat,b=hat,i=2158,x=0.36568864609540286,y=0.482086719899368 a=zee,b=wye,i=2159,x=0.46324422760937845,y=0.18957042856735318 a=pan,b=eks,i=2160,x=0.0032731741464655517,y=0.24265930126172286 a=wye,b=eks,i=2161,x=0.17517848527969948,y=0.08180586013473534 a=pan,b=pan,i=2162,x=0.4403551635970905,y=0.22942697632655906 a=wye,b=pan,i=2163,x=0.09273957715469416,y=0.6132959825744481 a=pan,b=zee,i=2164,x=0.19524512170581543,y=0.5460739296935951 a=hat,b=hat,i=2165,x=0.46165958964019504,y=0.6029962831405496 a=wye,b=zee,i=2166,x=0.8944862196737927,y=0.34807401159779683 a=zee,b=hat,i=2167,x=0.42312576374129274,y=0.10048800632229682 a=wye,b=hat,i=2168,x=0.6568978924854212,y=0.5101756478889046 a=eks,b=zee,i=2169,x=0.05684290839594597,y=0.6167859837759624 a=wye,b=eks,i=2170,x=0.4198547582787967,y=0.2376285818765217 a=eks,b=eks,i=2171,x=0.6714359981321629,y=0.37149274278995337 a=pan,b=wye,i=2172,x=0.2057396940089804,y=0.8420562089794659 a=wye,b=hat,i=2173,x=0.4502790891675549,y=0.8635812727509119 a=pan,b=eks,i=2174,x=0.8915519585149145,y=0.297092301064787 a=wye,b=eks,i=2175,x=0.6684886052688896,y=0.23351427152549686 a=eks,b=eks,i=2176,x=0.018008652733587316,y=0.9614835324200763 a=eks,b=pan,i=2177,x=0.7183922577315158,y=0.48505114281853134 a=zee,b=wye,i=2178,x=0.8235592349921356,y=0.21457612748044042 a=hat,b=wye,i=2179,x=0.8080588257410165,y=0.8760901920518874 a=pan,b=eks,i=2180,x=0.6055815021312241,y=0.8480036770514022 a=zee,b=pan,i=2181,x=0.5449270457570026,y=0.7992463596093999 a=zee,b=hat,i=2182,x=0.3727527045897696,y=0.8534533340738414 a=eks,b=pan,i=2183,x=0.8003361363186678,y=0.8955368869223884 a=wye,b=wye,i=2184,x=0.009903387473833902,y=0.717874178791943 a=eks,b=eks,i=2185,x=0.33802204835640726,y=0.30007036518314967 a=hat,b=zee,i=2186,x=0.7146865245671944,y=0.4887379966859555 a=pan,b=eks,i=2187,x=0.09332217805283527,y=0.2731125734848725 a=eks,b=zee,i=2188,x=0.358076509887842,y=0.6122466113672775 a=zee,b=eks,i=2189,x=0.984738578757059,y=0.892051880694554 a=hat,b=wye,i=2190,x=0.9791796147633219,y=0.30772131333366337 a=zee,b=eks,i=2191,x=0.8618827816008505,y=0.3898158650484316 a=eks,b=wye,i=2192,x=0.08897197433077497,y=0.5341085853768164 a=zee,b=hat,i=2193,x=0.44938360138176914,y=0.04690228110148875 a=wye,b=wye,i=2194,x=0.2622599637682992,y=0.33190780821668475 a=zee,b=pan,i=2195,x=0.2456231364010899,y=0.8439355736973392 a=zee,b=zee,i=2196,x=0.7874461922758034,y=0.3195592889082516 a=hat,b=wye,i=2197,x=0.3540930552112632,y=0.4554803152418352 a=hat,b=eks,i=2198,x=0.12965400774700986,y=0.4139588865738947 a=hat,b=eks,i=2199,x=0.6553924554328745,y=0.4899538937166197 a=pan,b=zee,i=2200,x=0.4507994878036382,y=0.9785717062046653 a=pan,b=pan,i=2201,x=0.9526982671410141,y=0.3425963974364795 a=hat,b=wye,i=2202,x=0.4709189260548132,y=0.33410477791419135 a=wye,b=pan,i=2203,x=0.8491557372816053,y=0.5530531109549706 a=hat,b=wye,i=2204,x=0.7973426670893504,y=0.38438739471274264 a=wye,b=zee,i=2205,x=0.2774377944743893,y=0.45205678592354026 a=zee,b=eks,i=2206,x=0.4133477502781451,y=0.555969888477931 a=pan,b=eks,i=2207,x=0.9193964373230882,y=0.4625301712579941 a=hat,b=eks,i=2208,x=0.9772889351986918,y=0.3249537135963736 a=wye,b=eks,i=2209,x=0.7841059777895694,y=0.6947456883865291 a=hat,b=eks,i=2210,x=0.46786259691563536,y=0.31576530398682046 a=pan,b=hat,i=2211,x=0.3000341492694927,y=0.9961655477923976 a=wye,b=zee,i=2212,x=0.2800829848930697,y=0.8599095044857418 a=wye,b=eks,i=2213,x=0.7099477247456799,y=0.1413865209495151 a=hat,b=zee,i=2214,x=0.2971188903315465,y=0.44965916160853636 a=zee,b=pan,i=2215,x=0.06251445207257622,y=0.13216970387427485 a=hat,b=wye,i=2216,x=0.3382952859935743,y=0.4400906767156443 a=zee,b=wye,i=2217,x=0.49170781106474626,y=0.1402042893515265 a=zee,b=hat,i=2218,x=0.2583991751219392,y=0.36652517821181607 a=pan,b=zee,i=2219,x=0.14927136365683047,y=0.18664967620347506 a=eks,b=wye,i=2220,x=0.5726690878517332,y=0.9834177283918458 a=hat,b=eks,i=2221,x=0.7726531947838272,y=0.15165188282492126 a=zee,b=eks,i=2222,x=0.813180106527479,y=0.621185672504634 a=eks,b=hat,i=2223,x=0.289329024465074,y=0.36110779604692067 a=hat,b=pan,i=2224,x=0.27094205048996056,y=0.6489628299416983 a=hat,b=hat,i=2225,x=0.013545905550584214,y=0.8494572427931795 a=eks,b=wye,i=2226,x=0.3454244478858154,y=0.29090367914645576 a=zee,b=wye,i=2227,x=0.39971822303581617,y=0.17475090292312834 a=eks,b=zee,i=2228,x=0.9408003473361174,y=0.9376913825387122 a=hat,b=wye,i=2229,x=0.4494538288870511,y=0.13090866722624483 a=pan,b=wye,i=2230,x=0.8809697124067445,y=0.39092344601998064 a=wye,b=hat,i=2231,x=0.900794437962015,y=0.8967390597734215 a=hat,b=hat,i=2232,x=0.15713550210076666,y=0.7206735582912116 a=zee,b=wye,i=2233,x=0.9004219588711274,y=0.7577516737491493 a=eks,b=eks,i=2234,x=0.27871867532288996,y=0.2911552878960423 a=eks,b=wye,i=2235,x=0.5013653314603624,y=0.8333248001496258 a=zee,b=zee,i=2236,x=0.30501285370800013,y=0.5849535705099613 a=hat,b=zee,i=2237,x=0.45674559029260486,y=0.8728724386781094 a=pan,b=pan,i=2238,x=0.02847848077848736,y=0.9207996601523926 a=pan,b=zee,i=2239,x=0.010173755043218158,y=0.22123822336488064 a=wye,b=wye,i=2240,x=0.5930605475370612,y=0.3433603733657331 a=hat,b=wye,i=2241,x=0.5014017541132575,y=0.7090960181653438 a=wye,b=hat,i=2242,x=0.9458244074853481,y=0.7456393313493013 a=zee,b=pan,i=2243,x=0.29001787500073173,y=0.045527725574051714 a=hat,b=hat,i=2244,x=0.9708832254888226,y=0.15752383437958462 a=hat,b=eks,i=2245,x=0.4770264537232787,y=0.6736468654550781 a=wye,b=hat,i=2246,x=0.7714374257659208,y=0.5425954287320883 a=pan,b=pan,i=2247,x=0.8014273299143657,y=0.7288163705942878 a=pan,b=pan,i=2248,x=0.954246012713997,y=0.8279688125072744 a=eks,b=eks,i=2249,x=0.3345668023105298,y=0.31811620191709955 a=wye,b=hat,i=2250,x=0.5431274222493861,y=0.1566355934693281 a=eks,b=hat,i=2251,x=0.8946184447856771,y=0.8281124954281727 a=zee,b=wye,i=2252,x=0.5655358148358,y=0.9169255629455827 a=eks,b=wye,i=2253,x=0.6383105313881284,y=0.1027304181651264 a=wye,b=zee,i=2254,x=0.8612725048242387,y=0.056706665236205156 a=hat,b=zee,i=2255,x=0.4883498572156204,y=0.0770621976268544 a=wye,b=hat,i=2256,x=0.10604947211581683,y=0.8870919841683852 a=hat,b=hat,i=2257,x=0.6942446034273736,y=0.6246228939328669 a=eks,b=eks,i=2258,x=0.6930800244883837,y=0.17611165906867554 a=pan,b=hat,i=2259,x=0.22286725838973298,y=0.6076445332790815 a=zee,b=zee,i=2260,x=0.8359749877662224,y=0.08101114122788078 a=hat,b=eks,i=2261,x=0.9105620468307024,y=0.3593642950046009 a=zee,b=zee,i=2262,x=0.7490208516776408,y=0.7277121821219803 a=zee,b=hat,i=2263,x=0.012838825936875464,y=0.5223435911532996 a=hat,b=pan,i=2264,x=0.37286192432196275,y=0.8365432517009491 a=zee,b=pan,i=2265,x=0.946352430931429,y=0.27693938121291084 a=pan,b=eks,i=2266,x=0.5631724274367673,y=0.0642506263060727 a=hat,b=zee,i=2267,x=0.7578871147776249,y=0.14754564446673257 a=hat,b=wye,i=2268,x=0.17474153753114763,y=0.9634949103419465 a=pan,b=eks,i=2269,x=0.5541880960714733,y=0.9158224391454514 a=eks,b=eks,i=2270,x=0.5090886478757912,y=0.7656587962141506 a=pan,b=hat,i=2271,x=0.16768184769644479,y=0.8215102227732646 a=zee,b=hat,i=2272,x=0.14140036239733678,y=0.8390759674518355 a=eks,b=hat,i=2273,x=0.8127008522217432,y=0.9949059480342844 a=eks,b=wye,i=2274,x=0.9075350776906357,y=0.024516079984659767 a=eks,b=wye,i=2275,x=0.5212081176523184,y=0.8177991905419402 a=eks,b=eks,i=2276,x=0.5329538624469671,y=0.0018158942180759308 a=pan,b=wye,i=2277,x=0.8553908959608967,y=0.021430068067535557 a=wye,b=eks,i=2278,x=0.17901836368365676,y=0.14044395537918564 a=hat,b=eks,i=2279,x=0.012280680223469398,y=0.277342303022595 a=wye,b=zee,i=2280,x=0.4217562022758986,y=0.051936162685817355 a=zee,b=pan,i=2281,x=0.1383792519119802,y=0.47235511628254045 a=eks,b=hat,i=2282,x=0.7011958061953378,y=0.91083574253739 a=zee,b=eks,i=2283,x=0.36444369039046853,y=0.8130301163410548 a=hat,b=pan,i=2284,x=0.00437293898208746,y=0.5682527005859528 a=pan,b=pan,i=2285,x=0.7982165489798513,y=0.46696290935411433 a=wye,b=wye,i=2286,x=0.777938701974155,y=0.7615824205677968 a=zee,b=eks,i=2287,x=0.0007106109478662859,y=0.8643696111639223 a=pan,b=zee,i=2288,x=0.5745888818383479,y=0.8421462451069522 a=pan,b=zee,i=2289,x=0.042515149065466495,y=0.3428290162671168 a=zee,b=eks,i=2290,x=0.14418296982644663,y=0.3545011820617253 a=hat,b=zee,i=2291,x=0.20256672348423999,y=0.7387630204148321 a=pan,b=wye,i=2292,x=0.27678771174110695,y=0.35760728439380474 a=wye,b=wye,i=2293,x=0.7466090205883998,y=0.26526277458892455 a=wye,b=pan,i=2294,x=0.08185339484509935,y=0.528639660976175 a=wye,b=eks,i=2295,x=0.08642901521217838,y=0.7537214070316656 a=eks,b=pan,i=2296,x=0.8896433327303079,y=0.37296324484846344 a=hat,b=hat,i=2297,x=0.4483608002905408,y=0.9685358655584886 a=hat,b=wye,i=2298,x=0.04470660416233252,y=0.5097725516351974 a=pan,b=zee,i=2299,x=0.9075871262764453,y=0.2516247032796314 a=zee,b=pan,i=2300,x=0.9291273399024345,y=0.9606720070997913 a=wye,b=pan,i=2301,x=0.21033222836103416,y=0.992833477876893 a=eks,b=zee,i=2302,x=0.17194913992026895,y=0.7921934271129547 a=eks,b=hat,i=2303,x=0.99161495045373,y=0.41941465442597237 a=zee,b=hat,i=2304,x=0.1127642829456843,y=0.29881658214862383 a=pan,b=zee,i=2305,x=0.11496965057148123,y=0.19753250624952667 a=hat,b=pan,i=2306,x=0.3342389415345628,y=0.985240345385304 a=zee,b=wye,i=2307,x=0.6678594262004072,y=0.2626625984540243 a=zee,b=pan,i=2308,x=0.9899815839130719,y=0.49399198581194637 a=zee,b=wye,i=2309,x=0.12120595243094534,y=0.3417676704542142 a=wye,b=wye,i=2310,x=0.6528439645535314,y=0.626705481063678 a=zee,b=zee,i=2311,x=0.965416713125537,y=0.675622189665188 a=pan,b=zee,i=2312,x=0.38832123076906144,y=0.8770818996569462 a=zee,b=pan,i=2313,x=0.4308881860064431,y=0.298139087353108 a=zee,b=hat,i=2314,x=0.9107705033446805,y=0.05369007195738784 a=wye,b=eks,i=2315,x=0.1958584059822993,y=0.6458957990948471 a=eks,b=eks,i=2316,x=0.1898131609601975,y=0.2576221943783219 a=pan,b=hat,i=2317,x=0.37219247017788026,y=0.9659877761503816 a=eks,b=hat,i=2318,x=0.6179437679435674,y=0.6255315742679604 a=hat,b=eks,i=2319,x=0.5617665438640009,y=0.03790286141600696 a=eks,b=hat,i=2320,x=0.43513392007253626,y=0.953280068715905 a=eks,b=hat,i=2321,x=0.9006870009567153,y=0.8537806242130159 a=zee,b=zee,i=2322,x=0.39299000984576493,y=0.48675520394221294 a=zee,b=zee,i=2323,x=0.6924646229067376,y=0.961728591715515 a=eks,b=zee,i=2324,x=0.3656731818815381,y=0.4348170464549541 a=zee,b=eks,i=2325,x=0.9310044743908388,y=0.5915717923626269 a=wye,b=hat,i=2326,x=0.5390947464654677,y=0.9171443353099715 a=hat,b=pan,i=2327,x=0.13236042343196264,y=0.7018827248938442 a=eks,b=zee,i=2328,x=0.9233414160859896,y=0.9426916138193271 a=eks,b=wye,i=2329,x=0.32236596243200943,y=0.12349447265840763 a=pan,b=hat,i=2330,x=0.26562360950781083,y=0.6143914548179807 a=pan,b=eks,i=2331,x=0.7795985947092806,y=0.9791969083425154 a=wye,b=eks,i=2332,x=0.8888447587498162,y=0.9274917692848156 a=zee,b=eks,i=2333,x=0.0339047026172683,y=0.9899797336099346 a=eks,b=hat,i=2334,x=0.4706495392838296,y=0.5339895561589622 a=eks,b=pan,i=2335,x=0.43389388336403034,y=0.6527555471857784 a=zee,b=wye,i=2336,x=0.2132138095588999,y=0.3350510820375012 a=eks,b=zee,i=2337,x=0.18310611841718727,y=0.27611093961149813 a=zee,b=wye,i=2338,x=0.5849778358487363,y=0.4472676087156583 a=pan,b=pan,i=2339,x=0.7632065771231693,y=0.9533148007319427 a=zee,b=zee,i=2340,x=0.7979106986767058,y=0.34142212009441275 a=eks,b=eks,i=2341,x=0.1689642670369339,y=0.08666058738902227 a=pan,b=zee,i=2342,x=0.7289455213274276,y=0.04597102157281818 a=zee,b=zee,i=2343,x=0.6910588757833684,y=0.2853388537359345 a=wye,b=eks,i=2344,x=0.46559621387184413,y=0.6453632272888741 a=eks,b=eks,i=2345,x=0.7240818295178657,y=0.7697201439211158 a=zee,b=pan,i=2346,x=0.2106452223867551,y=0.8198492988109947 a=wye,b=pan,i=2347,x=0.9345794244994885,y=0.5611924241664724 a=pan,b=hat,i=2348,x=0.5703090995325857,y=0.5762676020746584 a=hat,b=zee,i=2349,x=0.2589915838302729,y=0.04497637706481694 a=wye,b=pan,i=2350,x=0.8998392369608815,y=0.03747679005136095 a=pan,b=pan,i=2351,x=0.6724810273079015,y=0.3212043712768039 a=zee,b=pan,i=2352,x=0.19948276246295482,y=0.27886956486778547 a=hat,b=eks,i=2353,x=0.19721696160232083,y=0.1902097573367555 a=zee,b=wye,i=2354,x=0.3060499042971171,y=0.6230526367576228 a=pan,b=zee,i=2355,x=0.4132334507678017,y=0.0958935038625609 a=pan,b=pan,i=2356,x=0.49220586447091974,y=0.3637263342876337 a=pan,b=hat,i=2357,x=0.6035016232976687,y=0.2654296683236047 a=hat,b=hat,i=2358,x=0.5472833606897747,y=0.11508965130492199 a=zee,b=pan,i=2359,x=0.3123116477611221,y=0.5313965363528594 a=zee,b=eks,i=2360,x=0.7646045437647716,y=0.4374368628092571 a=wye,b=pan,i=2361,x=0.8368170215826418,y=0.1513261409766582 a=hat,b=hat,i=2362,x=0.7586788480149922,y=0.6167614911809044 a=eks,b=zee,i=2363,x=0.2829560793295287,y=0.31877554125357643 a=wye,b=wye,i=2364,x=0.8255236580889759,y=0.30884248417286686 a=eks,b=wye,i=2365,x=0.10694687582616103,y=0.12549118259779624 a=zee,b=hat,i=2366,x=0.8434948128398014,y=0.7566711862078771 a=eks,b=hat,i=2367,x=0.11100450503347647,y=0.26231820024625485 a=wye,b=zee,i=2368,x=0.7948774475212161,y=0.10865250917846037 a=hat,b=wye,i=2369,x=0.03135249091794745,y=0.3202037119775658 a=wye,b=zee,i=2370,x=0.5078848120383039,y=0.5495294084638471 a=eks,b=zee,i=2371,x=0.6296689722217776,y=0.8808041685758371 a=hat,b=wye,i=2372,x=0.36694062952440554,y=0.03285188729261823 a=wye,b=zee,i=2373,x=0.5980535785869657,y=0.36584311596027363 a=pan,b=zee,i=2374,x=0.8057531144421612,y=0.1103465158096888 a=eks,b=hat,i=2375,x=0.39566127922010763,y=0.926370579143245 a=pan,b=eks,i=2376,x=0.7036015015427707,y=0.8896688757860348 a=hat,b=wye,i=2377,x=0.3840916366205712,y=0.6117763705069971 a=wye,b=hat,i=2378,x=0.4244587912309,y=0.5147488063855301 a=pan,b=eks,i=2379,x=0.0126919318388804,y=0.05364265512252031 a=hat,b=zee,i=2380,x=0.12629846495196628,y=0.00017118893583800698 a=eks,b=hat,i=2381,x=0.551443915184712,y=0.4189803949942186 a=zee,b=hat,i=2382,x=0.9419188430791652,y=0.5943076078356421 a=hat,b=pan,i=2383,x=0.3305527530124114,y=0.9744246737507011 a=wye,b=wye,i=2384,x=0.11982738948595928,y=0.5927050811984642 a=hat,b=wye,i=2385,x=0.6993064388052053,y=0.33556275655578294 a=zee,b=pan,i=2386,x=0.4400144230398596,y=0.40718760512261376 a=wye,b=zee,i=2387,x=0.6500939509690578,y=0.45169252354648837 a=wye,b=eks,i=2388,x=0.6542816745109832,y=0.013759212456254444 a=wye,b=eks,i=2389,x=0.6332584135319546,y=0.13251231094237437 a=eks,b=wye,i=2390,x=0.6331896102608988,y=0.9589307439412602 a=wye,b=zee,i=2391,x=0.6731897745167693,y=0.4283772233112926 a=eks,b=zee,i=2392,x=0.7923894749706849,y=0.8917271151038314 a=eks,b=eks,i=2393,x=0.9746844751820227,y=0.4893807704691421 a=wye,b=pan,i=2394,x=0.2920699646605315,y=0.7387920697224446 a=eks,b=wye,i=2395,x=0.27334460412686323,y=0.9029783332632627 a=hat,b=hat,i=2396,x=0.07185787494215012,y=0.8691631482259681 a=eks,b=eks,i=2397,x=0.768257729490193,y=0.31910490090314103 a=pan,b=wye,i=2398,x=0.6626457206760483,y=0.6952332207508496 a=pan,b=hat,i=2399,x=0.034841768970897746,y=0.5723693878842167 a=pan,b=hat,i=2400,x=0.15181645902125407,y=0.7998239378911912 a=eks,b=zee,i=2401,x=0.07479813220400944,y=0.6026675734691738 a=hat,b=hat,i=2402,x=0.7741341758574097,y=0.24407851593657948 a=zee,b=wye,i=2403,x=0.4652916798345421,y=0.5826939451920669 a=eks,b=wye,i=2404,x=0.5546642401893631,y=0.5985846330820938 a=pan,b=pan,i=2405,x=0.2358853113430821,y=0.024003950417810227 a=wye,b=eks,i=2406,x=0.28179350936795733,y=0.5023264174705517 a=hat,b=eks,i=2407,x=0.2457970370438457,y=0.811421289170773 a=hat,b=hat,i=2408,x=0.6751131270509296,y=0.48856361143986005 a=eks,b=zee,i=2409,x=0.59847879634121,y=0.7916259405367129 a=pan,b=zee,i=2410,x=0.04515829439395114,y=0.24330613797458922 a=zee,b=hat,i=2411,x=0.22712092810863416,y=0.8127998680800427 a=zee,b=zee,i=2412,x=0.21505489058022198,y=0.8006638202348123 a=eks,b=hat,i=2413,x=0.13598286981810193,y=0.86160038906847 a=pan,b=pan,i=2414,x=0.8144512562961078,y=0.9177829414099823 a=hat,b=hat,i=2415,x=0.6600221567552329,y=0.0584486480823484 a=wye,b=wye,i=2416,x=0.7428129016480294,y=0.14965046440370033 a=eks,b=hat,i=2417,x=0.6492293161864587,y=0.9521947928976578 a=hat,b=pan,i=2418,x=0.9704055340867738,y=0.5799798105012466 a=eks,b=zee,i=2419,x=0.09047960361588969,y=0.48999371435226136 a=pan,b=pan,i=2420,x=0.9333731806896786,y=0.6043241512179962 a=hat,b=hat,i=2421,x=0.21707010100448243,y=0.5150327861442825 a=eks,b=pan,i=2422,x=0.00863696577870754,y=0.11509725431793605 a=zee,b=wye,i=2423,x=0.4653066475033094,y=0.21997612033850344 a=hat,b=wye,i=2424,x=0.9062179939941751,y=0.2875912231476856 a=zee,b=wye,i=2425,x=0.398155311000022,y=0.0933499833149607 a=pan,b=eks,i=2426,x=0.6379726091040971,y=0.5194384530463447 a=wye,b=eks,i=2427,x=0.539037074058747,y=0.7531525516774173 a=pan,b=hat,i=2428,x=0.7520504631719865,y=0.34660951591602773 a=pan,b=wye,i=2429,x=0.8020766995566793,y=0.7689029735366432 a=zee,b=zee,i=2430,x=0.6271482513925272,y=0.4944204099323506 a=hat,b=wye,i=2431,x=0.3036891373264764,y=0.9909449455648611 a=zee,b=wye,i=2432,x=0.30385506685705554,y=0.17382245218515768 a=zee,b=pan,i=2433,x=0.6754312777622205,y=0.07005068705650719 a=pan,b=eks,i=2434,x=0.013657995328708816,y=0.45586613889144767 a=zee,b=wye,i=2435,x=0.9416754660578306,y=0.6579056008950284 a=zee,b=wye,i=2436,x=0.090487272126626,y=0.6726267738306646 a=wye,b=wye,i=2437,x=0.8441032403303297,y=0.7236974901617537 a=pan,b=pan,i=2438,x=0.9785415873749357,y=0.14648707376766656 a=hat,b=zee,i=2439,x=0.7318268760763208,y=0.7357122474543071 a=pan,b=hat,i=2440,x=0.4546313043075274,y=0.9868446327538511 a=eks,b=zee,i=2441,x=0.7384348801280877,y=0.4331993419540827 a=zee,b=zee,i=2442,x=0.3563884899582277,y=0.8944727395958034 a=pan,b=zee,i=2443,x=0.5467338009669124,y=0.3737101047888789 a=zee,b=wye,i=2444,x=0.6743475636626085,y=0.5841642214951493 a=pan,b=zee,i=2445,x=0.150471438909343,y=0.03999544722112036 a=pan,b=zee,i=2446,x=0.8427836793414677,y=0.177257809167512 a=zee,b=hat,i=2447,x=0.9165212208454823,y=0.6343832698422787 a=wye,b=hat,i=2448,x=0.8350423281884237,y=0.2422590088973925 a=wye,b=pan,i=2449,x=0.5042681244213146,y=0.908306481649806 a=pan,b=hat,i=2450,x=0.3717927109546766,y=0.7872600125241359 a=wye,b=zee,i=2451,x=0.23883689209402614,y=0.4489097810835715 a=hat,b=wye,i=2452,x=0.7256914244489449,y=0.07408098995861301 a=hat,b=wye,i=2453,x=0.4787447016730605,y=0.027781641677141033 a=wye,b=hat,i=2454,x=0.782215232098275,y=0.17908166243221946 a=zee,b=zee,i=2455,x=0.15793062293407878,y=0.9604346209844584 a=zee,b=eks,i=2456,x=0.09865545345297155,y=0.8348979205972645 a=pan,b=pan,i=2457,x=0.3927934924087789,y=0.06769141197493256 a=zee,b=pan,i=2458,x=0.02903168922821775,y=0.9416706505805262 a=wye,b=pan,i=2459,x=0.0074179863852393835,y=0.13412770282159325 a=wye,b=wye,i=2460,x=0.8546039006462764,y=0.5794887921093801 a=pan,b=pan,i=2461,x=0.39765418222695004,y=0.607893298841388 a=wye,b=wye,i=2462,x=0.9445996918832312,y=0.4706780924111563 a=pan,b=zee,i=2463,x=0.9563932642460863,y=0.31484480296442896 a=hat,b=hat,i=2464,x=0.6604485499983388,y=0.6145786977176719 a=zee,b=zee,i=2465,x=0.3505544906675998,y=0.1954960429503897 a=pan,b=pan,i=2466,x=0.7769548783450912,y=0.8220089791630163 a=eks,b=eks,i=2467,x=0.9350039614092526,y=0.8756536110782422 a=zee,b=pan,i=2468,x=0.7178372288982118,y=0.4062989111358041 a=zee,b=wye,i=2469,x=0.9204186818975437,y=0.4747739907393056 a=hat,b=zee,i=2470,x=0.910842331244497,y=0.8937381551221251 a=pan,b=wye,i=2471,x=0.36510756117868337,y=0.16172467779589483 a=zee,b=zee,i=2472,x=0.08880173246131728,y=0.7982278670793287 a=wye,b=wye,i=2473,x=0.07909826171256307,y=0.855556979661628 a=pan,b=eks,i=2474,x=0.7828499578474473,y=0.9442071626420061 a=wye,b=wye,i=2475,x=0.06324401276925695,y=0.5950858034074182 a=pan,b=zee,i=2476,x=0.2262395290029181,y=0.49451050699405674 a=wye,b=eks,i=2477,x=0.6306465815187388,y=0.46790600889102485 a=wye,b=hat,i=2478,x=0.4614473986661236,y=0.4721517855532317 a=eks,b=eks,i=2479,x=0.3091965203151934,y=0.9145596089559873 a=hat,b=wye,i=2480,x=0.014430995239748112,y=0.35346467775779145 a=eks,b=hat,i=2481,x=0.8284728324140498,y=0.2977503297359205 a=hat,b=zee,i=2482,x=0.15810752007547613,y=0.10215153278169598 a=hat,b=eks,i=2483,x=0.5002024621775637,y=0.9187983113959539 a=zee,b=hat,i=2484,x=0.04124901160673633,y=0.1095855587112885 a=wye,b=pan,i=2485,x=0.7244385390670799,y=0.17205034306117317 a=eks,b=hat,i=2486,x=0.4923487745128049,y=0.28889637616320174 a=wye,b=pan,i=2487,x=0.3300250547987864,y=0.22540259142646224 a=eks,b=zee,i=2488,x=0.0023333167684839173,y=0.24088326731558385 a=zee,b=pan,i=2489,x=0.5050787967691673,y=0.96990681663883 a=pan,b=pan,i=2490,x=0.853399144959847,y=0.3768453915244885 a=pan,b=eks,i=2491,x=0.11150304854042947,y=0.33331036327124963 a=wye,b=eks,i=2492,x=0.9214469071128305,y=0.28676404710502656 a=hat,b=zee,i=2493,x=0.8773662066308794,y=0.17323941800052478 a=pan,b=pan,i=2494,x=0.3207059888232746,y=0.8664631709525704 a=eks,b=hat,i=2495,x=0.910628314565378,y=0.4258002135216937 a=hat,b=zee,i=2496,x=0.1577724924590801,y=0.4739307550526024 a=hat,b=wye,i=2497,x=0.8872744210629263,y=0.14605498570574493 a=wye,b=hat,i=2498,x=0.23359521101241776,y=0.5844213774291599 a=zee,b=zee,i=2499,x=0.8613769284558995,y=0.9685505021744841 a=eks,b=pan,i=2500,x=0.8597477426689076,y=0.17079339571919316 a=eks,b=zee,i=2501,x=0.9988110946859143,y=0.8013707404671317 a=zee,b=eks,i=2502,x=0.08631339989521669,y=0.7626498621504472 a=wye,b=pan,i=2503,x=0.6021619570218234,y=0.7998420154096526 a=zee,b=pan,i=2504,x=0.8178599713104803,y=0.18283102556915032 a=pan,b=hat,i=2505,x=0.7319860671662751,y=0.11573142291632155 a=hat,b=eks,i=2506,x=0.38864742500184934,y=0.9549915162000734 a=zee,b=eks,i=2507,x=0.06006684599594547,y=0.32800136057911744 a=eks,b=eks,i=2508,x=0.2459351356992232,y=0.6992300046304194 a=hat,b=pan,i=2509,x=0.9399094021245685,y=0.9766927628695118 a=eks,b=eks,i=2510,x=0.6122854089898786,y=0.11735880955927658 a=hat,b=pan,i=2511,x=0.3658401332558662,y=0.8058278063627171 a=pan,b=eks,i=2512,x=0.9712759091673199,y=0.35741783697299145 a=wye,b=pan,i=2513,x=0.9941884027342468,y=0.7427222275160807 a=hat,b=wye,i=2514,x=0.759666601296956,y=0.5029288106582336 a=hat,b=hat,i=2515,x=0.41858436455494885,y=0.7397180761147025 a=wye,b=zee,i=2516,x=0.22158162509494428,y=0.1717438346245811 a=wye,b=hat,i=2517,x=0.25809778439746667,y=0.8942638085822656 a=eks,b=hat,i=2518,x=0.8156500849184675,y=0.08381965183304241 a=hat,b=zee,i=2519,x=0.023141000554160573,y=0.159821225039678 a=eks,b=hat,i=2520,x=0.38461965648830476,y=0.8779474089328696 a=wye,b=pan,i=2521,x=0.6746733937181614,y=0.12172129656898323 a=pan,b=zee,i=2522,x=0.3836823470783707,y=0.2530933368188705 a=pan,b=eks,i=2523,x=0.2467086564140698,y=0.9098280255547708 a=hat,b=pan,i=2524,x=0.5483698024028446,y=0.80652225685914 a=zee,b=pan,i=2525,x=0.9332167021929317,y=0.8274407370101524 a=pan,b=pan,i=2526,x=0.22953431238745692,y=0.07163851427849766 a=wye,b=hat,i=2527,x=0.021510700973820462,y=0.7950798338977892 a=eks,b=eks,i=2528,x=0.7481860062358446,y=0.6037295548285344 a=eks,b=pan,i=2529,x=0.3393051290797555,y=0.025397429828768137 a=zee,b=zee,i=2530,x=0.6149438991743728,y=0.7634078131671355 a=wye,b=zee,i=2531,x=0.6511465358134351,y=0.0536653751892201 a=wye,b=wye,i=2532,x=0.0054964576725233805,y=0.28953245784366877 a=wye,b=hat,i=2533,x=0.15518569216470812,y=0.5686747295053566 a=zee,b=wye,i=2534,x=0.12207545315374224,y=0.9746444335548179 a=zee,b=eks,i=2535,x=0.5565415302093949,y=0.10288505903505452 a=wye,b=wye,i=2536,x=0.43315262752486194,y=0.27205902504143986 a=pan,b=hat,i=2537,x=0.3113077953556219,y=0.8505260803244152 a=eks,b=eks,i=2538,x=0.38906239415188226,y=0.2685051550780454 a=zee,b=hat,i=2539,x=0.6345180823665123,y=0.714272732680164 a=zee,b=pan,i=2540,x=0.7633387673070651,y=0.16850854825088746 a=wye,b=eks,i=2541,x=0.9200450459897079,y=0.5203187898658775 a=hat,b=pan,i=2542,x=0.416076924166804,y=0.4567226915609339 a=zee,b=eks,i=2543,x=0.8882507111625345,y=0.6834591517880225 a=hat,b=zee,i=2544,x=0.6234518321227132,y=0.568093714839173 a=pan,b=zee,i=2545,x=0.04811425968953953,y=0.5966158652406183 a=zee,b=zee,i=2546,x=0.5921140592243828,y=0.3199967249370237 a=pan,b=hat,i=2547,x=0.24011644563078283,y=0.12009590313568308 a=zee,b=hat,i=2548,x=0.4304009679094255,y=0.3235635213023209 a=eks,b=zee,i=2549,x=0.7611031921737661,y=0.689829708430865 a=zee,b=hat,i=2550,x=0.9107046316959098,y=0.9267025956859704 a=zee,b=zee,i=2551,x=0.5534453229003656,y=0.19470214949450948 a=pan,b=zee,i=2552,x=0.7099889805872556,y=0.2612275639524275 a=pan,b=hat,i=2553,x=0.8260887056078599,y=0.6576752537408973 a=pan,b=pan,i=2554,x=0.4479850467242381,y=0.605644729638017 a=wye,b=pan,i=2555,x=0.8635009458180566,y=0.057986705329265864 a=eks,b=pan,i=2556,x=0.680151798371677,y=0.9721202344719171 a=zee,b=pan,i=2557,x=0.3624846239071149,y=0.38096311190739685 a=eks,b=eks,i=2558,x=0.39585447743449853,y=0.9090232688363228 a=pan,b=eks,i=2559,x=0.41182608064067716,y=0.4651557950827221 a=zee,b=hat,i=2560,x=0.8207042664095232,y=0.972493490219255 a=eks,b=eks,i=2561,x=0.9568943633067363,y=0.9942427604342767 a=pan,b=wye,i=2562,x=0.7844571232021518,y=0.25212822563492654 a=eks,b=eks,i=2563,x=0.7448606140977615,y=0.7677875733269816 a=eks,b=eks,i=2564,x=0.6984324028424346,y=0.6867698395582814 a=wye,b=eks,i=2565,x=0.3850930672708389,y=0.6142341088294833 a=pan,b=pan,i=2566,x=0.027948166482267056,y=0.10155712046334942 a=zee,b=pan,i=2567,x=0.6373779619859908,y=0.8254690568634606 a=hat,b=zee,i=2568,x=0.5351681178046073,y=0.8555068797919759 a=eks,b=eks,i=2569,x=0.6837390714119882,y=0.2555760527745451 a=zee,b=wye,i=2570,x=0.7332356879541984,y=0.7095236956282258 a=wye,b=zee,i=2571,x=0.6045866476300921,y=0.9472308056954024 a=zee,b=wye,i=2572,x=0.5192819052899776,y=0.18543077448215517 a=pan,b=eks,i=2573,x=0.6173980620064918,y=0.7399111725286391 a=wye,b=hat,i=2574,x=0.12423956865216534,y=0.989639508760292 a=eks,b=hat,i=2575,x=0.33031955019827075,y=0.7108284566198849 a=hat,b=eks,i=2576,x=0.8598307222093972,y=0.677493082731475 a=pan,b=zee,i=2577,x=0.2591109015365989,y=0.9393069496539326 a=zee,b=eks,i=2578,x=0.11420274089804072,y=0.6781907800368309 a=hat,b=wye,i=2579,x=0.470168322914005,y=0.3245499585879692 a=hat,b=wye,i=2580,x=0.7501598293607254,y=0.4721867436018571 a=eks,b=hat,i=2581,x=0.625746894720574,y=0.33737938119664646 a=pan,b=eks,i=2582,x=0.4136169698568053,y=0.3221257100507432 a=zee,b=wye,i=2583,x=0.815721986649748,y=0.45027193508163077 a=pan,b=zee,i=2584,x=0.32285180303468286,y=0.5767328321662406 a=pan,b=pan,i=2585,x=0.3671198622625018,y=0.04290161860716368 a=hat,b=eks,i=2586,x=0.7548839524754403,y=0.3140601750346328 a=pan,b=wye,i=2587,x=0.149414261676316,y=0.8817567568143645 a=pan,b=eks,i=2588,x=0.13689661134333897,y=0.5584038012783021 a=hat,b=pan,i=2589,x=0.9259610701768484,y=0.7567071664063917 a=zee,b=wye,i=2590,x=0.35176292753881166,y=0.7374790902726833 a=hat,b=hat,i=2591,x=0.09004868118257148,y=0.6922893442005552 a=hat,b=pan,i=2592,x=0.18016216606425406,y=0.2099121503498219 a=pan,b=hat,i=2593,x=0.6510610556921332,y=0.10742569633195376 a=eks,b=zee,i=2594,x=0.07159878226683902,y=0.20989783292032282 a=hat,b=hat,i=2595,x=0.9678207161209708,y=0.992049177363607 a=eks,b=hat,i=2596,x=0.18014846649609306,y=0.5629283001780467 a=hat,b=pan,i=2597,x=0.6191641186208192,y=0.91398214172482 a=eks,b=hat,i=2598,x=0.012851434303710274,y=0.14814227972741656 a=hat,b=zee,i=2599,x=0.9048118287143257,y=0.8847594382115711 a=zee,b=wye,i=2600,x=0.5561307219276355,y=0.15276515927874457 a=zee,b=eks,i=2601,x=0.19257014095901703,y=0.7774457342825621 a=wye,b=eks,i=2602,x=0.9514647938068078,y=0.10795242094349111 a=hat,b=wye,i=2603,x=0.31179190517346567,y=0.01609407680873831 a=wye,b=wye,i=2604,x=0.47775304052473055,y=0.38671047718640983 a=eks,b=pan,i=2605,x=0.2344602349071444,y=0.8645430924168496 a=eks,b=zee,i=2606,x=0.1439484898344945,y=0.9439005895698022 a=eks,b=eks,i=2607,x=0.8629787970160852,y=0.8183015089362451 a=pan,b=zee,i=2608,x=0.880820846632719,y=0.4542838900435503 a=wye,b=eks,i=2609,x=0.5124204798290518,y=0.4054974158118896 a=wye,b=hat,i=2610,x=0.14713673147626471,y=0.193770427584398 a=zee,b=wye,i=2611,x=0.9269147206987636,y=0.3354668582497363 a=pan,b=wye,i=2612,x=0.48759095161412014,y=0.9486718920730824 a=pan,b=pan,i=2613,x=0.9093120035098351,y=0.993257702527396 a=hat,b=wye,i=2614,x=0.7781647480152264,y=0.993772240196278 a=hat,b=hat,i=2615,x=0.275311283835037,y=0.741356597630266 a=eks,b=eks,i=2616,x=0.8400827662084357,y=0.904384801897908 a=pan,b=pan,i=2617,x=0.44875309896113624,y=0.20709074311528453 a=wye,b=zee,i=2618,x=0.7355696569603329,y=0.27564344454988243 a=hat,b=wye,i=2619,x=0.19051153642139496,y=0.46651684239833613 a=pan,b=zee,i=2620,x=0.5592572385681548,y=0.672039894065432 a=wye,b=wye,i=2621,x=0.9091768138788122,y=0.07363030569876483 a=hat,b=eks,i=2622,x=0.21855190429616178,y=0.306255719577206 a=hat,b=zee,i=2623,x=0.5579915433786629,y=0.9351922009068756 a=hat,b=wye,i=2624,x=0.16649980465987524,y=0.9174497541816296 a=eks,b=eks,i=2625,x=0.9025640383772568,y=0.4657693509889542 a=wye,b=zee,i=2626,x=0.21020261586647726,y=0.2011091555698421 a=hat,b=eks,i=2627,x=0.037644003067944465,y=0.9166549903188604 a=eks,b=eks,i=2628,x=0.5037459860860201,y=0.20718835826701032 a=eks,b=eks,i=2629,x=0.7314957198821074,y=0.0818653656966235 a=hat,b=zee,i=2630,x=0.9194151240931991,y=0.07423066472063256 a=hat,b=hat,i=2631,x=0.8669833462776865,y=0.024944214178881152 a=hat,b=hat,i=2632,x=0.40619921403492654,y=0.6776699682132551 a=hat,b=zee,i=2633,x=0.11167516897133345,y=0.1968557916169683 a=wye,b=zee,i=2634,x=0.12637912495756354,y=0.932738782222326 a=zee,b=wye,i=2635,x=0.6187681447031627,y=0.274704452983646 a=pan,b=wye,i=2636,x=0.6460342181062689,y=0.7795324745240246 a=zee,b=zee,i=2637,x=0.19576834398868515,y=0.679453943382103 a=wye,b=eks,i=2638,x=0.36177627776550847,y=0.8386225553120263 a=eks,b=eks,i=2639,x=0.12492716932261638,y=0.21510868197623745 a=eks,b=wye,i=2640,x=0.885996241979663,y=0.059743642576263634 a=eks,b=wye,i=2641,x=0.7008702235836195,y=0.39708447632667465 a=hat,b=eks,i=2642,x=0.19929727396144037,y=0.5393711342556087 a=wye,b=eks,i=2643,x=0.7038379533640264,y=0.2415724804873508 a=eks,b=pan,i=2644,x=0.1021121482244629,y=0.676614797112832 a=wye,b=zee,i=2645,x=0.22135649292487047,y=0.3353372961478748 a=hat,b=wye,i=2646,x=0.8302037270628269,y=0.29829682191098783 a=zee,b=hat,i=2647,x=0.7129222271572655,y=0.3569951209382327 a=wye,b=wye,i=2648,x=0.5590007902215932,y=0.44142931845984645 a=zee,b=eks,i=2649,x=0.8676857104115077,y=0.6062661030015066 a=zee,b=pan,i=2650,x=0.9849457970315111,y=0.0914154862759321 a=zee,b=zee,i=2651,x=0.08318080628977687,y=0.08723840975656705 a=hat,b=pan,i=2652,x=0.3556516386966647,y=0.6019467128167675 a=hat,b=wye,i=2653,x=0.279635601734451,y=0.4522275293507577 a=pan,b=zee,i=2654,x=0.2553738664507069,y=0.8359675139928466 a=pan,b=eks,i=2655,x=0.20861278160790098,y=0.09276404710956598 a=eks,b=eks,i=2656,x=0.714144646455272,y=0.3211201665161757 a=eks,b=eks,i=2657,x=0.9118213055286543,y=0.2304692673683172 a=wye,b=eks,i=2658,x=0.8878589425876583,y=0.16500927178713598 a=pan,b=eks,i=2659,x=0.39231354538410634,y=0.19261788337249341 a=zee,b=hat,i=2660,x=0.5125720965755153,y=0.3101033226433013 a=zee,b=wye,i=2661,x=0.9409834902940938,y=0.06519737249713942 a=zee,b=zee,i=2662,x=0.8522522520922186,y=0.0821437591034958 a=zee,b=wye,i=2663,x=0.7126684401510096,y=0.8051899200649238 a=eks,b=wye,i=2664,x=0.151141097038609,y=0.671754932411165 a=zee,b=eks,i=2665,x=0.9622613991461785,y=0.19912987672139137 a=pan,b=zee,i=2666,x=0.9074679274351196,y=0.8957847934010839 a=hat,b=pan,i=2667,x=0.9240389772763548,y=0.5231982813953002 a=pan,b=eks,i=2668,x=0.3525652118913354,y=0.49330814134258383 a=hat,b=wye,i=2669,x=0.14565423862972182,y=0.18195721833206513 a=wye,b=hat,i=2670,x=0.5314631858298513,y=0.9247384504550191 a=eks,b=pan,i=2671,x=0.2191775509938665,y=0.16221454397918067 a=zee,b=wye,i=2672,x=0.2957478300120929,y=0.9566416400315985 a=hat,b=eks,i=2673,x=0.5317253402583432,y=0.47720559893968584 a=hat,b=wye,i=2674,x=0.5685867476642044,y=0.9536560186396535 a=eks,b=zee,i=2675,x=0.7116584351173386,y=0.8813675632259913 a=zee,b=zee,i=2676,x=0.6369443311903168,y=0.20245472621871452 a=wye,b=hat,i=2677,x=0.03828177316116377,y=0.694988753462705 a=wye,b=hat,i=2678,x=0.44478934074526144,y=0.6593596173323781 a=zee,b=wye,i=2679,x=0.4234179513345332,y=0.9156320336038198 a=zee,b=zee,i=2680,x=0.28695958426961987,y=0.35447908228108094 a=zee,b=zee,i=2681,x=0.5753537491643719,y=0.8698920433502088 a=hat,b=eks,i=2682,x=0.7144081950600689,y=0.8253921612815761 a=pan,b=pan,i=2683,x=0.9474694135785586,y=0.5331573468403473 a=pan,b=eks,i=2684,x=0.3066978542374318,y=0.9327810898395875 a=wye,b=pan,i=2685,x=0.5059670030001199,y=0.5002012382517893 a=wye,b=wye,i=2686,x=0.5187856380368512,y=0.8665210971116168 a=zee,b=pan,i=2687,x=0.5064156313100883,y=0.5164969637045003 a=pan,b=wye,i=2688,x=0.9170439177596071,y=0.7855194635003687 a=zee,b=hat,i=2689,x=0.7018760912024224,y=0.9018580557735235 a=zee,b=eks,i=2690,x=0.9007898309642012,y=0.45508381746621207 a=zee,b=zee,i=2691,x=0.5231651296128275,y=0.09791858989165081 a=wye,b=eks,i=2692,x=0.2877718302322071,y=0.7350128229993341 a=pan,b=zee,i=2693,x=0.6621261710619304,y=0.765604369363381 a=wye,b=wye,i=2694,x=0.5113378128718417,y=0.7447015937237151 a=hat,b=eks,i=2695,x=0.20486591930659304,y=0.08546083685115857 a=eks,b=hat,i=2696,x=0.04425126652191069,y=0.9193247377962478 a=pan,b=hat,i=2697,x=0.4397272166348868,y=0.5119020678265614 a=pan,b=wye,i=2698,x=0.24786027932789856,y=0.25028548790543437 a=hat,b=hat,i=2699,x=0.18362126379498567,y=0.3583685237385621 a=wye,b=zee,i=2700,x=0.08296135187962883,y=0.9476795899696359 a=wye,b=eks,i=2701,x=0.2631227677304565,y=0.8380786611056333 a=wye,b=hat,i=2702,x=0.6107721059185136,y=0.29607498743239313 a=eks,b=wye,i=2703,x=0.385921871325144,y=0.72206084966027 a=eks,b=eks,i=2704,x=0.7289032202296384,y=0.943448586243151 a=pan,b=zee,i=2705,x=0.2681131456172976,y=0.03881677277584117 a=eks,b=eks,i=2706,x=0.042331033396890594,y=0.5816340794859904 a=zee,b=eks,i=2707,x=0.09716550757790055,y=0.7946966787875323 a=eks,b=wye,i=2708,x=0.6794836901391871,y=0.05370583587162048 a=hat,b=zee,i=2709,x=0.4719223070024049,y=0.8798667170009199 a=pan,b=zee,i=2710,x=0.3235306005938401,y=0.3944479990658286 a=zee,b=zee,i=2711,x=0.6152705208747911,y=0.1871405298405333 a=eks,b=wye,i=2712,x=0.28680813614749745,y=0.9091560294185156 a=wye,b=hat,i=2713,x=0.7816282897070512,y=0.8725529048814329 a=wye,b=eks,i=2714,x=0.5337563133061932,y=0.8113476754885716 a=wye,b=eks,i=2715,x=0.830862652732706,y=0.31332718593186215 a=eks,b=wye,i=2716,x=0.632360024350908,y=0.3523899339535477 a=hat,b=eks,i=2717,x=0.8517633647797415,y=0.6075520102742804 a=hat,b=zee,i=2718,x=0.3739110752469652,y=0.7344229221023192 a=pan,b=zee,i=2719,x=0.13091802232794136,y=0.4147418371197401 a=zee,b=pan,i=2720,x=0.875012865695414,y=0.6301510344124231 a=pan,b=pan,i=2721,x=0.7634027233725996,y=0.9537462437208611 a=eks,b=eks,i=2722,x=0.7485292786111598,y=0.060074780780270065 a=wye,b=zee,i=2723,x=0.4692411142423141,y=0.18086715737750947 a=wye,b=zee,i=2724,x=0.3016910888319093,y=0.2815838391993606 a=eks,b=pan,i=2725,x=0.09842524478857917,y=0.4039455571089149 a=zee,b=hat,i=2726,x=0.673450582305474,y=0.2368758099721252 a=zee,b=hat,i=2727,x=0.3699736290437986,y=0.9456050995886015 a=zee,b=wye,i=2728,x=0.8748783567240713,y=0.9127365833223035 a=pan,b=eks,i=2729,x=0.9890321807426645,y=0.6544105013007959 a=eks,b=zee,i=2730,x=0.5913012155193706,y=0.5125849403012366 a=pan,b=hat,i=2731,x=0.7319063656923598,y=0.3661739653385341 a=pan,b=eks,i=2732,x=0.7776625957923161,y=0.7377246871264523 a=zee,b=eks,i=2733,x=0.11325755544848148,y=0.32415018564505305 a=eks,b=pan,i=2734,x=0.4544389365010312,y=0.36274017551484594 a=zee,b=hat,i=2735,x=0.6753256152256654,y=0.7111448175040769 a=zee,b=pan,i=2736,x=0.13316236671850434,y=0.49210023866083397 a=wye,b=hat,i=2737,x=0.8250578484602521,y=0.44752314931586656 a=hat,b=zee,i=2738,x=0.6324404521389477,y=0.5991554446942754 a=hat,b=zee,i=2739,x=0.4523752260828632,y=0.4097560532434581 a=pan,b=eks,i=2740,x=0.16601226995675156,y=0.18151654867600586 a=zee,b=pan,i=2741,x=0.8311173071571613,y=0.40630856689489725 a=hat,b=eks,i=2742,x=0.5093718066070119,y=0.9913946330960695 a=hat,b=pan,i=2743,x=0.3698356457904749,y=0.912970532909554 a=pan,b=hat,i=2744,x=0.5286755809647917,y=0.1651174363994401 a=wye,b=pan,i=2745,x=0.028208712274286007,y=0.45797747909936903 a=eks,b=pan,i=2746,x=0.1995882002967131,y=0.9988195280621234 a=wye,b=eks,i=2747,x=0.801718741445332,y=0.8343436520177938 a=zee,b=eks,i=2748,x=0.11153132519318998,y=0.17527565983385196 a=wye,b=zee,i=2749,x=0.39908796305565186,y=0.8203196495353728 a=hat,b=eks,i=2750,x=0.7691621480087831,y=0.04624795153739847 a=wye,b=zee,i=2751,x=0.8233374811260633,y=0.28118965684997943 a=wye,b=zee,i=2752,x=0.5421828769626178,y=0.6932556944834627 a=zee,b=eks,i=2753,x=0.38158944973875963,y=0.9978357823939198 a=hat,b=zee,i=2754,x=0.7970322675458169,y=0.9056375064474206 a=eks,b=pan,i=2755,x=0.5550958032704141,y=0.42460295509180657 a=wye,b=hat,i=2756,x=0.5906831195384066,y=0.8552080634179315 a=eks,b=eks,i=2757,x=0.9555433089030078,y=0.1012177575954587 a=eks,b=zee,i=2758,x=0.7664329663706339,y=0.15228215819457713 a=hat,b=zee,i=2759,x=0.7270670926222843,y=0.029636297862852157 a=pan,b=hat,i=2760,x=0.5529628324424195,y=0.672560428419093 a=wye,b=hat,i=2761,x=0.9138967886693034,y=0.9213145915711659 a=pan,b=wye,i=2762,x=0.17716806320819933,y=0.5447158699924802 a=hat,b=hat,i=2763,x=0.022393825286782576,y=0.858016600540151 a=hat,b=hat,i=2764,x=0.603392328507201,y=0.2363695702425591 a=zee,b=hat,i=2765,x=0.6459575860068912,y=0.49490736001017566 a=pan,b=zee,i=2766,x=0.830723134231425,y=0.665433991421394 a=hat,b=pan,i=2767,x=0.3457100418361476,y=0.4664053612526614 a=pan,b=hat,i=2768,x=0.051556933697434526,y=0.17976239369842706 a=wye,b=zee,i=2769,x=0.9668199998927879,y=0.775654943293786 a=hat,b=pan,i=2770,x=0.27594379871232555,y=0.07411463454718337 a=pan,b=wye,i=2771,x=0.1174987458859269,y=0.005708083531397623 a=pan,b=pan,i=2772,x=0.05392321788248433,y=0.8060831057224058 a=eks,b=hat,i=2773,x=0.69291317851219,y=0.7469948294872729 a=eks,b=hat,i=2774,x=0.9533669824863673,y=0.12771923797645246 a=pan,b=pan,i=2775,x=0.7184184194719956,y=0.4904968081523946 a=zee,b=wye,i=2776,x=0.7910444608980398,y=0.6491427094511163 a=pan,b=pan,i=2777,x=0.7969059524383465,y=0.669103483462524 a=eks,b=eks,i=2778,x=0.4044385597446536,y=0.8914365675089366 a=hat,b=hat,i=2779,x=0.3474761482419263,y=0.8741149984223016 a=wye,b=pan,i=2780,x=0.2907618155304045,y=0.6492086022779383 a=eks,b=wye,i=2781,x=0.4061806402666983,y=0.36644038967272896 a=hat,b=wye,i=2782,x=0.6917795282383538,y=0.9185836699082268 a=pan,b=eks,i=2783,x=0.5239744947947007,y=0.100504836859581 a=pan,b=hat,i=2784,x=0.18256579384445848,y=0.6843696194592838 a=pan,b=wye,i=2785,x=0.621716134059889,y=0.5300633007674981 a=pan,b=pan,i=2786,x=0.591903135564393,y=0.9817870263065608 a=wye,b=hat,i=2787,x=0.8988078039296443,y=0.3324514276733742 a=pan,b=hat,i=2788,x=0.17679205732662606,y=0.7527210010920257 a=zee,b=wye,i=2789,x=0.053717462803680616,y=0.05452469526931114 a=wye,b=wye,i=2790,x=0.7984829227541226,y=0.5087673080038057 a=eks,b=wye,i=2791,x=0.25879893217096905,y=0.8220530299185523 a=eks,b=hat,i=2792,x=0.574814951546933,y=0.838521058328272 a=zee,b=hat,i=2793,x=0.016119118073299465,y=0.048486447355322926 a=zee,b=eks,i=2794,x=0.650899632819198,y=0.32295818131218135 a=eks,b=hat,i=2795,x=0.9828163659495991,y=0.7271574141684917 a=eks,b=wye,i=2796,x=0.9795666089681072,y=0.6936068995013053 a=wye,b=eks,i=2797,x=0.0955127453952278,y=0.3193873136743336 a=hat,b=hat,i=2798,x=0.6770658307401128,y=0.9612492884585951 a=wye,b=zee,i=2799,x=0.21161639516025754,y=0.5474527237981746 a=wye,b=hat,i=2800,x=0.7093628384045736,y=0.345927559025347 a=eks,b=zee,i=2801,x=0.7870199221618309,y=0.43806525264266394 a=pan,b=pan,i=2802,x=0.8498273803284082,y=0.6695254936819108 a=hat,b=pan,i=2803,x=0.9905728716452045,y=0.06817205087359623 a=eks,b=zee,i=2804,x=0.6933897404058519,y=0.38922468118999143 a=pan,b=hat,i=2805,x=0.7075088693645657,y=0.42506017139149 a=eks,b=pan,i=2806,x=0.45982174205757165,y=0.21639041126785252 a=eks,b=hat,i=2807,x=0.8031386749353514,y=0.0456999691548835 a=eks,b=wye,i=2808,x=0.7600783211059084,y=0.007237947568672576 a=pan,b=eks,i=2809,x=0.7165979106211948,y=0.39409630219954705 a=eks,b=pan,i=2810,x=0.18551339605772543,y=0.380046863146443 a=zee,b=zee,i=2811,x=0.5396926661842615,y=0.7423060132429089 a=wye,b=hat,i=2812,x=0.4080552691530873,y=0.23715395574697773 a=pan,b=pan,i=2813,x=0.17404926584053904,y=0.80645434088305 a=wye,b=pan,i=2814,x=0.4232831301914316,y=0.003575690575454038 a=wye,b=hat,i=2815,x=0.2753349005711472,y=0.2981607803589118 a=wye,b=hat,i=2816,x=0.0548741999804403,y=0.8717529254849362 a=pan,b=eks,i=2817,x=0.9437261643896192,y=0.6585456269208473 a=pan,b=eks,i=2818,x=0.5445166922773753,y=0.38460962685588984 a=wye,b=zee,i=2819,x=0.6749831740629705,y=0.7181822687947076 a=zee,b=wye,i=2820,x=0.3580004431691963,y=0.6240683366699936 a=pan,b=eks,i=2821,x=0.4716526277671149,y=0.9325757014700042 a=wye,b=zee,i=2822,x=0.14098677511513125,y=0.5582313771144721 a=pan,b=pan,i=2823,x=0.8970769946774317,y=0.8143443328628265 a=wye,b=wye,i=2824,x=0.7341426123679048,y=0.6900466491014886 a=hat,b=zee,i=2825,x=0.9719365537990282,y=0.24324139738802553 a=wye,b=eks,i=2826,x=0.4233744319170222,y=0.8058439449826745 a=hat,b=pan,i=2827,x=0.007693535697102405,y=0.358018000756796 a=hat,b=wye,i=2828,x=0.41676624317270083,y=0.6624100442632929 a=wye,b=pan,i=2829,x=0.8978699958731674,y=0.5078843103822455 a=hat,b=hat,i=2830,x=0.21960808360173467,y=0.8264732984361639 a=zee,b=pan,i=2831,x=0.9137972915067373,y=0.8146525548769581 a=eks,b=pan,i=2832,x=0.4530789281841252,y=0.6341898004637524 a=zee,b=zee,i=2833,x=0.6526333204333133,y=0.8962754703239799 a=zee,b=hat,i=2834,x=0.6338906419145569,y=0.08004293967389409 a=wye,b=wye,i=2835,x=0.7415127201223656,y=0.2613633462577486 a=zee,b=hat,i=2836,x=0.846671334452858,y=0.24855668017395638 a=hat,b=hat,i=2837,x=0.5655910185189842,y=0.9183250775072218 a=hat,b=eks,i=2838,x=0.16902131337166026,y=0.7584866069936619 a=hat,b=pan,i=2839,x=0.5193100111654236,y=0.20166854425847602 a=pan,b=zee,i=2840,x=0.5303948386863744,y=0.9080864546926949 a=zee,b=wye,i=2841,x=0.09731314104522193,y=0.31228305132515555 a=pan,b=eks,i=2842,x=0.7549176932437908,y=0.8640405171715994 a=wye,b=zee,i=2843,x=0.2777710660360485,y=0.5714718654538901 a=eks,b=pan,i=2844,x=0.7384309958383901,y=0.36866931513449486 a=pan,b=pan,i=2845,x=0.606181068721247,y=0.616002039068612 a=hat,b=wye,i=2846,x=0.3265631003841204,y=0.374492300721745 a=hat,b=zee,i=2847,x=0.7881568154651081,y=0.5559821919859138 a=pan,b=zee,i=2848,x=0.9624756126657645,y=0.9574074942948696 a=eks,b=zee,i=2849,x=0.12952438020370405,y=0.9270908752540581 a=wye,b=hat,i=2850,x=0.05470860141262479,y=0.04658298467108257 a=wye,b=wye,i=2851,x=0.0020446268545805113,y=0.009943917182808737 a=wye,b=pan,i=2852,x=0.42940687832989866,y=0.1468318742685415 a=wye,b=wye,i=2853,x=0.990161382728111,y=0.3499379688024109 a=eks,b=pan,i=2854,x=0.6338735592995826,y=0.15761281386438764 a=wye,b=eks,i=2855,x=0.9419146917622048,y=0.6060209650374142 a=eks,b=pan,i=2856,x=0.7115880622754508,y=0.8964623782367054 a=hat,b=hat,i=2857,x=0.08346734323720095,y=0.6474711871979782 a=zee,b=wye,i=2858,x=0.2826186316140814,y=0.6695478005175661 a=eks,b=pan,i=2859,x=0.02447776772167043,y=0.20688297772055575 a=wye,b=eks,i=2860,x=0.5600033166985924,y=0.3484813313151226 a=hat,b=eks,i=2861,x=0.9138579231935814,y=0.16832803063229773 a=pan,b=pan,i=2862,x=0.09800893976590253,y=0.8457845208352374 a=pan,b=hat,i=2863,x=0.1834990915331669,y=0.528761462797945 a=zee,b=wye,i=2864,x=0.42109865017533243,y=0.9324216458693535 a=pan,b=hat,i=2865,x=0.1829857546300825,y=0.7541272830946107 a=eks,b=zee,i=2866,x=0.8934857222410671,y=0.6256367404608381 a=wye,b=zee,i=2867,x=0.9489727374596107,y=0.8632434631696883 a=eks,b=hat,i=2868,x=0.4247265114092217,y=0.9641274059396724 a=hat,b=pan,i=2869,x=0.04903454618587899,y=0.48019476723366983 a=wye,b=eks,i=2870,x=0.13588621486865515,y=0.46171851137675657 a=eks,b=hat,i=2871,x=0.8766196552731117,y=0.3432628950600898 a=eks,b=hat,i=2872,x=0.0824464474583485,y=0.41500058370516746 a=wye,b=zee,i=2873,x=0.8623888758101239,y=0.47502811946398604 a=zee,b=wye,i=2874,x=0.1681357784018227,y=0.8392880686727994 a=hat,b=hat,i=2875,x=0.8882531275158145,y=0.30970406610040124 a=wye,b=hat,i=2876,x=0.4100612516068668,y=0.5241347164240856 a=zee,b=wye,i=2877,x=0.7488377252084604,y=0.4727904641808244 a=pan,b=zee,i=2878,x=0.9718428999206795,y=0.32151486300776966 a=wye,b=zee,i=2879,x=0.3368479146214749,y=0.319508849901748 a=pan,b=eks,i=2880,x=0.6248138883456014,y=0.4323808730206413 a=hat,b=wye,i=2881,x=0.8870137115236287,y=0.6557420558079095 a=wye,b=pan,i=2882,x=0.20508256902105493,y=0.24625712578663705 a=pan,b=eks,i=2883,x=0.17469445546060924,y=0.7502077456439166 a=hat,b=eks,i=2884,x=0.01803842185770055,y=0.7123720723174057 a=wye,b=zee,i=2885,x=0.4079982232706686,y=0.42382421978789164 a=eks,b=pan,i=2886,x=0.5056322667148411,y=0.4290653381431411 a=pan,b=wye,i=2887,x=0.6338351841317565,y=0.4907041096317738 a=zee,b=hat,i=2888,x=0.9703529871646023,y=0.517811760850648 a=wye,b=zee,i=2889,x=0.7686343850863733,y=0.5742253808106673 a=eks,b=zee,i=2890,x=0.18685211627025788,y=0.2370568703128223 a=wye,b=eks,i=2891,x=0.3968173236793585,y=0.04738783308138439 a=hat,b=pan,i=2892,x=0.5956805463320682,y=0.3609140423721199 a=eks,b=zee,i=2893,x=0.5531039940725316,y=0.7306512817266388 a=pan,b=pan,i=2894,x=0.8634113930447151,y=0.042975650168931456 a=zee,b=eks,i=2895,x=0.9753708467911276,y=0.615940530686146 a=zee,b=wye,i=2896,x=0.7277583590103486,y=0.49504307091898514 a=hat,b=zee,i=2897,x=0.5678455159032189,y=0.7910090421492175 a=pan,b=zee,i=2898,x=0.23271930748884184,y=0.4088902304553087 a=pan,b=pan,i=2899,x=0.15868622973775615,y=0.9693856805728462 a=hat,b=wye,i=2900,x=0.9619050081633596,y=0.7954950376163313 a=zee,b=zee,i=2901,x=0.9156042982679851,y=0.46085055630239913 a=hat,b=pan,i=2902,x=0.2080952766035833,y=0.9323723777621576 a=pan,b=eks,i=2903,x=0.34600684567011875,y=0.2803937160495198 a=zee,b=eks,i=2904,x=0.5195992086409938,y=0.57773770500564 a=pan,b=hat,i=2905,x=0.004044853443978869,y=0.5461411566611463 a=zee,b=eks,i=2906,x=0.8608071169231579,y=0.9846761059035525 a=eks,b=hat,i=2907,x=0.5503089823322713,y=0.7762987168630092 a=hat,b=hat,i=2908,x=0.06422544393476348,y=0.04831803951278302 a=eks,b=zee,i=2909,x=0.9735920834852287,y=0.6045980049718644 a=pan,b=eks,i=2910,x=0.4552157780113615,y=0.45436268452495654 a=eks,b=pan,i=2911,x=0.3540491877210178,y=0.14296150972097188 a=zee,b=zee,i=2912,x=0.34907798271188584,y=0.6838642852489554 a=eks,b=eks,i=2913,x=0.9528487416801219,y=0.9770139821982978 a=zee,b=zee,i=2914,x=0.6713487756784149,y=0.6851459487246977 a=eks,b=wye,i=2915,x=0.18003026071883055,y=0.7605790766570338 a=eks,b=zee,i=2916,x=0.3111065625389652,y=0.4900633108457091 a=wye,b=pan,i=2917,x=0.10226439038444546,y=0.32221570886934225 a=eks,b=pan,i=2918,x=0.07324611102045919,y=0.5397221232035317 a=pan,b=hat,i=2919,x=0.5539681113785856,y=0.22898580497204302 a=hat,b=eks,i=2920,x=0.584814627427767,y=0.9854086527153794 a=pan,b=wye,i=2921,x=0.8092163085387806,y=0.5552811725641776 a=hat,b=eks,i=2922,x=0.38004354197524004,y=0.9564525660110145 a=wye,b=zee,i=2923,x=0.5170783036546709,y=0.7221456579996477 a=wye,b=zee,i=2924,x=0.6270174635047546,y=0.23008678243789993 a=eks,b=eks,i=2925,x=0.7696289189244249,y=0.057396523424096735 a=zee,b=pan,i=2926,x=0.5318019616386042,y=0.9627343736200256 a=wye,b=wye,i=2927,x=0.2329842191757341,y=0.7858658681445121 a=eks,b=zee,i=2928,x=0.6133201827668029,y=0.49769995246446974 a=hat,b=wye,i=2929,x=0.3314067590262917,y=0.2089161550583003 a=pan,b=hat,i=2930,x=0.0946626417566162,y=0.7642456152582329 a=zee,b=wye,i=2931,x=0.4294178052742412,y=0.001833098567169067 a=zee,b=eks,i=2932,x=0.27878008616849204,y=0.862578455284283 a=hat,b=wye,i=2933,x=0.4977072740481646,y=0.6875844573519313 a=hat,b=eks,i=2934,x=0.06412360974253373,y=0.22600333579859744 a=pan,b=hat,i=2935,x=0.8626379833482911,y=0.9150292252328203 a=zee,b=wye,i=2936,x=0.5768883618530124,y=0.918139479854031 a=wye,b=pan,i=2937,x=0.5377017444604313,y=0.6977594925111669 a=pan,b=hat,i=2938,x=0.2765222912827068,y=0.20398898222008643 a=wye,b=pan,i=2939,x=0.15430209185442478,y=0.3054947262512059 a=zee,b=zee,i=2940,x=0.33908084985171905,y=0.3559785704920787 a=wye,b=eks,i=2941,x=0.888622878020096,y=0.9305395559526985 a=pan,b=hat,i=2942,x=0.8426210638730054,y=0.4910437389080752 a=eks,b=wye,i=2943,x=0.43116472402260675,y=0.5431912750926549 a=pan,b=pan,i=2944,x=0.22818877662838155,y=0.08013191447933687 a=hat,b=hat,i=2945,x=0.855770419141142,y=0.9504972075792718 a=wye,b=wye,i=2946,x=0.7063288975843842,y=0.14617579736608532 a=hat,b=pan,i=2947,x=0.4735373969736173,y=0.6728372575825865 a=zee,b=eks,i=2948,x=0.027656885408126497,y=0.8228770381611789 a=pan,b=zee,i=2949,x=0.9950626279412539,y=0.3439388785004105 a=pan,b=eks,i=2950,x=0.3557454554545477,y=0.35596931491049777 a=zee,b=pan,i=2951,x=0.45736186455134964,y=0.8552078753422031 a=pan,b=pan,i=2952,x=0.6956146036887194,y=0.7094299324737594 a=hat,b=eks,i=2953,x=0.6683768178930775,y=0.25260524697474684 a=zee,b=zee,i=2954,x=0.7139612884395727,y=0.521259999124225 a=hat,b=hat,i=2955,x=0.5751429586126809,y=0.17785127736470563 a=pan,b=pan,i=2956,x=0.17229422895082336,y=0.24883239435188065 a=pan,b=hat,i=2957,x=0.14582342165786877,y=0.4356307792657701 a=zee,b=eks,i=2958,x=0.9798520574677635,y=0.42174871239678 a=hat,b=eks,i=2959,x=0.8069448445065791,y=0.7001343626890119 a=pan,b=hat,i=2960,x=0.3756435277345719,y=0.047826156911501605 a=eks,b=pan,i=2961,x=0.8176993405474695,y=0.995125161400413 a=pan,b=pan,i=2962,x=0.6998988727502398,y=0.4001842416106014 a=eks,b=pan,i=2963,x=0.11173104822679536,y=0.6370518407136563 a=hat,b=wye,i=2964,x=0.9298169180566062,y=0.09131710178593277 a=pan,b=zee,i=2965,x=0.4596689215584,y=0.6112438501475592 a=wye,b=eks,i=2966,x=0.2641518333282219,y=0.38955465518639776 a=zee,b=zee,i=2967,x=0.42822201314164976,y=0.006074939297309734 a=eks,b=eks,i=2968,x=0.20950457390651211,y=0.07888932379405189 a=wye,b=zee,i=2969,x=0.289378401347387,y=0.7440165584936792 a=zee,b=pan,i=2970,x=0.2731397114360453,y=0.8759259221000683 a=hat,b=eks,i=2971,x=0.8266785429565111,y=0.897325116301253 a=pan,b=hat,i=2972,x=0.7032052034018701,y=0.2009782870263226 a=hat,b=wye,i=2973,x=0.19266544419630705,y=0.5730436792504735 a=pan,b=wye,i=2974,x=0.20451527019757088,y=0.0206184692976914 a=wye,b=pan,i=2975,x=0.51006790151616,y=0.586042056906746 a=pan,b=zee,i=2976,x=0.8782971392557426,y=0.7428023579415594 a=wye,b=hat,i=2977,x=0.9504447063856765,y=0.94067852216513 a=zee,b=hat,i=2978,x=0.33851596868477396,y=0.8334798475916935 a=wye,b=hat,i=2979,x=0.3014946499505823,y=0.3166621276039525 a=zee,b=zee,i=2980,x=0.8838963894635692,y=0.8052149644100633 a=wye,b=zee,i=2981,x=0.5154924055050366,y=0.7978166707046667 a=wye,b=eks,i=2982,x=0.613351743297237,y=0.8395323005164117 a=zee,b=eks,i=2983,x=0.48954358421735966,y=0.9354933367243893 a=zee,b=eks,i=2984,x=0.6070104477111674,y=0.42140737208696954 a=hat,b=eks,i=2985,x=0.4613625094242657,y=0.9834443486684832 a=hat,b=hat,i=2986,x=0.012529011658969247,y=0.19751371734088574 a=hat,b=hat,i=2987,x=0.6395639802554064,y=0.2647659207339501 a=wye,b=eks,i=2988,x=0.8289886576552059,y=0.9130379115658384 a=zee,b=eks,i=2989,x=0.6115566437731396,y=0.654382371446181 a=eks,b=eks,i=2990,x=0.9192312982792387,y=0.933633690100049 a=eks,b=hat,i=2991,x=0.17088819954927414,y=0.1940915669377936 a=zee,b=eks,i=2992,x=0.7975067562633096,y=0.7188787477650647 a=wye,b=hat,i=2993,x=0.7386984969630342,y=0.5918321915044837 a=hat,b=pan,i=2994,x=0.6175875126511366,y=0.5310338441204902 a=zee,b=wye,i=2995,x=0.1553956256476441,y=0.27030029752780416 a=wye,b=pan,i=2996,x=0.7517640622761323,y=0.48287590582310524 a=eks,b=pan,i=2997,x=0.7960098234515162,y=0.9293203088509989 a=wye,b=wye,i=2998,x=0.2259174651286836,y=0.5554793712549178 a=zee,b=pan,i=2999,x=0.19942029200045563,y=0.09337986668927678 a=pan,b=hat,i=3000,x=0.7814546932332067,y=0.6000946585621107 a=eks,b=eks,i=3001,x=0.5998159531946954,y=0.7729581156588532 a=hat,b=wye,i=3002,x=0.8285272249030134,y=0.9302564445098462 a=eks,b=zee,i=3003,x=0.32175750111047774,y=0.9174648845846595 a=pan,b=hat,i=3004,x=0.6936167302032076,y=0.34099561246852717 a=wye,b=hat,i=3005,x=0.05536700717456822,y=0.10240541011411275 a=wye,b=pan,i=3006,x=0.4707778178190908,y=0.9739982771022873 a=eks,b=eks,i=3007,x=0.33350360416191926,y=0.2321416996453538 a=hat,b=wye,i=3008,x=0.793700582315604,y=0.7819730529107373 a=wye,b=zee,i=3009,x=0.8588342479923059,y=0.6774442006552894 a=wye,b=wye,i=3010,x=0.7683834748330075,y=0.8315497206524393 a=wye,b=zee,i=3011,x=0.4808351970354847,y=0.4758472571744147 a=pan,b=hat,i=3012,x=0.3219915061675801,y=0.5309453409773968 a=zee,b=pan,i=3013,x=0.8669507229743478,y=0.9303002206266048 a=zee,b=pan,i=3014,x=0.6036472794089942,y=0.5392590440608642 a=zee,b=wye,i=3015,x=0.44076973462262803,y=0.22601425557115284 a=eks,b=eks,i=3016,x=0.14517527208436098,y=0.4422293378481955 a=eks,b=eks,i=3017,x=0.8306135722899411,y=0.10636363353069911 a=hat,b=hat,i=3018,x=0.46054396234881867,y=0.3731307386931515 a=hat,b=wye,i=3019,x=0.7451272273092002,y=0.9191708709874246 a=eks,b=wye,i=3020,x=0.36662020525022576,y=0.562402663612683 a=pan,b=eks,i=3021,x=0.6322320887182494,y=0.37724024424135094 a=wye,b=pan,i=3022,x=0.7585013008000357,y=0.24891818506988306 a=pan,b=eks,i=3023,x=0.7972083825965124,y=0.6785915910266607 a=wye,b=pan,i=3024,x=0.2264089359117355,y=0.02834029309178865 a=zee,b=wye,i=3025,x=0.20048730201468612,y=0.22503692249617124 a=zee,b=wye,i=3026,x=0.620337023862303,y=0.8479919985880766 a=eks,b=hat,i=3027,x=0.4902155165931996,y=0.34683593338631313 a=zee,b=pan,i=3028,x=0.4877814673013795,y=0.6540470265442844 a=zee,b=eks,i=3029,x=0.11413363994060732,y=0.18491037637118812 a=pan,b=pan,i=3030,x=0.05555019543717121,y=0.25564439988112275 a=zee,b=pan,i=3031,x=0.41930991083452396,y=0.9053752256549477 a=wye,b=zee,i=3032,x=0.6829080864945356,y=0.2589038995740719 a=zee,b=hat,i=3033,x=0.1945237174643939,y=0.04785693318973694 a=eks,b=hat,i=3034,x=0.777291960919939,y=0.13986709661108743 a=zee,b=zee,i=3035,x=0.22350085923447272,y=0.6932534345647985 a=pan,b=eks,i=3036,x=0.6669439868955551,y=0.5083766717543267 a=pan,b=zee,i=3037,x=0.4601123673241928,y=0.589035207964983 a=zee,b=wye,i=3038,x=0.9846294915268529,y=0.7245527090730468 a=wye,b=eks,i=3039,x=0.17248806811657325,y=0.3766117373894895 a=zee,b=hat,i=3040,x=0.09621613036773924,y=0.09274768655857912 a=eks,b=eks,i=3041,x=0.5351382501931934,y=0.12235949381541733 a=pan,b=zee,i=3042,x=0.7822379718483918,y=0.3278369973742308 a=hat,b=wye,i=3043,x=0.03791889192037379,y=0.3879285406506343 a=wye,b=wye,i=3044,x=0.008609845384408454,y=0.6630442142382447 a=eks,b=eks,i=3045,x=0.8779655290898389,y=0.9276702739930572 a=hat,b=hat,i=3046,x=0.960016973419662,y=0.08732247689827766 a=wye,b=zee,i=3047,x=0.8309049399070346,y=0.7082428624476516 a=hat,b=pan,i=3048,x=0.3745994561931344,y=0.8417922239746083 a=pan,b=zee,i=3049,x=0.5327270669677042,y=0.30368855674177586 a=eks,b=wye,i=3050,x=0.8299993357777166,y=0.2238418279755512 a=hat,b=zee,i=3051,x=0.35348860200536536,y=0.8211471760032776 a=hat,b=hat,i=3052,x=0.022155682158138235,y=0.22804250396069936 a=eks,b=wye,i=3053,x=0.40298772117416637,y=0.5310548635233784 a=zee,b=hat,i=3054,x=0.8975586946419573,y=0.8371128774375303 a=pan,b=wye,i=3055,x=0.11898366225879431,y=0.973067950910434 a=zee,b=pan,i=3056,x=0.5580433239689949,y=0.2207032579590179 a=hat,b=eks,i=3057,x=0.6216704870927365,y=0.5368073736943582 a=hat,b=zee,i=3058,x=0.7143749715262198,y=0.8268686099704066 a=pan,b=pan,i=3059,x=0.6284468013862667,y=0.9107779672871813 a=pan,b=hat,i=3060,x=0.6279788132841725,y=0.7966531861283309 a=hat,b=wye,i=3061,x=0.3399453078984599,y=0.9563683369526331 a=eks,b=wye,i=3062,x=0.7538022280814409,y=0.4317566099915433 a=pan,b=zee,i=3063,x=0.8834284343378148,y=0.8232921415981069 a=pan,b=hat,i=3064,x=0.4713927103837089,y=0.9270600022151935 a=wye,b=eks,i=3065,x=0.725831736511898,y=0.5497593420610962 a=pan,b=eks,i=3066,x=0.3546378076377753,y=0.751660464737342 a=pan,b=hat,i=3067,x=0.14912115137943105,y=0.8537419730854358 a=hat,b=zee,i=3068,x=0.15034534971981672,y=0.5991052546814497 a=hat,b=zee,i=3069,x=0.4210145115702397,y=0.6847329962869824 a=zee,b=zee,i=3070,x=0.8140199067124364,y=0.40845696417778843 a=wye,b=pan,i=3071,x=0.4419206171851453,y=0.15330946039593318 a=zee,b=hat,i=3072,x=0.2169139656710095,y=0.024309947214042227 a=zee,b=wye,i=3073,x=0.3204085048627119,y=0.5177596022884065 a=hat,b=eks,i=3074,x=0.6550427877323648,y=0.571804931654245 a=zee,b=hat,i=3075,x=0.09224547266943217,y=0.27630390686135065 a=wye,b=hat,i=3076,x=0.142566387091713,y=0.27801610209718775 a=zee,b=pan,i=3077,x=0.9828350031666842,y=0.2911042298547496 a=eks,b=pan,i=3078,x=0.7520400964406814,y=0.06477631117085936 a=eks,b=pan,i=3079,x=0.7876590569822286,y=0.08167315862021418 a=wye,b=hat,i=3080,x=0.9121720715420508,y=0.27595593913920513 a=hat,b=eks,i=3081,x=0.9256606535733007,y=0.6699893991173689 a=pan,b=wye,i=3082,x=0.02986898401074356,y=0.02865740061148525 a=hat,b=pan,i=3083,x=0.43255930345398574,y=0.16451673283391233 a=zee,b=wye,i=3084,x=0.761217263172412,y=0.38734953067609035 a=zee,b=pan,i=3085,x=0.9640093000659047,y=0.025667634889210977 a=zee,b=zee,i=3086,x=0.6070527044301867,y=0.36774684626978793 a=hat,b=eks,i=3087,x=0.8008471329449127,y=0.4950773666671012 a=eks,b=eks,i=3088,x=0.42383094655044284,y=0.3113550671070515 a=pan,b=zee,i=3089,x=0.505503302798009,y=0.3205385386369711 a=eks,b=pan,i=3090,x=0.45506560432905374,y=0.48045443192943516 a=pan,b=wye,i=3091,x=0.7238244246263034,y=0.2314305015321535 a=pan,b=hat,i=3092,x=0.2820421299406517,y=0.6948986244320373 a=eks,b=wye,i=3093,x=0.6296930505212618,y=0.28305081013586286 a=eks,b=hat,i=3094,x=0.9895960932461209,y=0.48997629742606663 a=zee,b=zee,i=3095,x=0.5250712031905327,y=0.25343374690524134 a=pan,b=zee,i=3096,x=0.85788069900133,y=0.5286390892779154 a=hat,b=hat,i=3097,x=0.8481737493253426,y=0.22795592498176165 a=zee,b=hat,i=3098,x=0.8134078580345757,y=0.04760505233880952 a=zee,b=eks,i=3099,x=0.13183545798325502,y=0.7832803595814398 a=eks,b=hat,i=3100,x=0.07108443716756485,y=0.31816018481405606 a=pan,b=hat,i=3101,x=0.4069137599331083,y=0.9819670340442527 a=hat,b=zee,i=3102,x=0.3343254952473229,y=0.035494955233627556 a=zee,b=eks,i=3103,x=0.23523417159414106,y=0.98949954046695 a=hat,b=wye,i=3104,x=0.3204490612720853,y=0.0691818430184431 a=wye,b=hat,i=3105,x=0.9472477355051101,y=0.6702789389942152 a=eks,b=hat,i=3106,x=0.178408829993969,y=0.47163529118192904 a=wye,b=pan,i=3107,x=0.2923687400336503,y=0.5988171487852212 a=wye,b=wye,i=3108,x=0.0967008571691299,y=0.5910810037087718 a=wye,b=hat,i=3109,x=0.183095401433091,y=0.5893121732700413 a=wye,b=pan,i=3110,x=0.8967101456216812,y=0.8085016458992474 a=eks,b=wye,i=3111,x=0.9706322412385915,y=0.1385826306820812 a=zee,b=eks,i=3112,x=0.4493727221740449,y=0.16704994503241388 a=pan,b=pan,i=3113,x=0.7927985055919656,y=0.9023056637507897 a=hat,b=pan,i=3114,x=0.2690618409790604,y=0.9750006243924199 a=eks,b=zee,i=3115,x=0.8122516823974709,y=0.034777149921719985 a=zee,b=wye,i=3116,x=0.8411583744381673,y=0.3367223940453469 a=eks,b=hat,i=3117,x=0.6278279883921511,y=0.6783776757536581 a=wye,b=pan,i=3118,x=0.0780608220831499,y=0.34219170347854155 a=pan,b=hat,i=3119,x=0.0773284361282679,y=0.8087620482239243 a=pan,b=zee,i=3120,x=0.6479059739692804,y=0.4847407102135154 a=hat,b=pan,i=3121,x=0.44037371230003286,y=0.6579475199919346 a=zee,b=zee,i=3122,x=0.5294122704675105,y=0.6857110786673584 a=zee,b=pan,i=3123,x=0.4772167563026266,y=0.8953319261849312 a=eks,b=pan,i=3124,x=0.1911839922513059,y=0.16422636870934193 a=eks,b=eks,i=3125,x=0.34087831336678864,y=0.5699628829691863 a=zee,b=eks,i=3126,x=0.2514477009793492,y=0.2498314026061056 a=pan,b=zee,i=3127,x=0.5132442039074944,y=0.07963430048086384 a=wye,b=wye,i=3128,x=0.8001592917309861,y=0.2595871624611582 a=zee,b=zee,i=3129,x=0.027975828338240083,y=0.46442407872411695 a=eks,b=eks,i=3130,x=0.2455308797278265,y=0.13309025352554837 a=hat,b=wye,i=3131,x=0.4803964481769877,y=0.5234608286996335 a=pan,b=eks,i=3132,x=0.7271701616492765,y=0.5650626367615349 a=pan,b=wye,i=3133,x=0.23651873567883164,y=0.3764128593161674 a=hat,b=eks,i=3134,x=0.9970634534653143,y=0.8349282777208548 a=zee,b=zee,i=3135,x=0.34594612609624187,y=0.22911649635660625 a=eks,b=eks,i=3136,x=0.7717959001675492,y=0.8076412924980277 a=eks,b=pan,i=3137,x=0.9536337598657055,y=0.010853472417537202 a=hat,b=zee,i=3138,x=0.27317174947779554,y=0.646988499341493 a=zee,b=wye,i=3139,x=0.5684780382451567,y=0.5720874081361975 a=wye,b=zee,i=3140,x=0.366288776550753,y=0.04378768748862749 a=eks,b=eks,i=3141,x=0.07079750623034164,y=0.6704842466344859 a=wye,b=eks,i=3142,x=0.05521456504163247,y=0.9500745301432092 a=pan,b=eks,i=3143,x=0.9750373739856155,y=0.26053373356331044 a=pan,b=eks,i=3144,x=0.5530175425021646,y=0.8944089100243684 a=zee,b=wye,i=3145,x=0.6844032050501776,y=0.7132658565772104 a=pan,b=pan,i=3146,x=0.9710413684746768,y=0.47971725236580287 a=hat,b=hat,i=3147,x=0.0053700807986794,y=0.9348161701107937 a=hat,b=pan,i=3148,x=0.007135675731816615,y=0.26790355487815287 a=wye,b=hat,i=3149,x=0.3564530503749801,y=0.8151097852673919 a=eks,b=hat,i=3150,x=0.5356404368957323,y=0.5401388412379213 a=eks,b=pan,i=3151,x=0.0677212385434749,y=0.4111467324640289 a=hat,b=wye,i=3152,x=0.3304026703418458,y=0.06256059204934794 a=zee,b=zee,i=3153,x=0.8571384195554904,y=0.07978949404055691 a=pan,b=wye,i=3154,x=0.16108434266645066,y=0.4223970209540501 a=hat,b=pan,i=3155,x=0.2149573485418389,y=0.8001616345217611 a=eks,b=zee,i=3156,x=0.5903395185451377,y=0.6284941637547498 a=eks,b=eks,i=3157,x=0.005620302559396273,y=0.5908603311050712 a=hat,b=wye,i=3158,x=0.4946858056236574,y=0.6718815240562283 a=hat,b=eks,i=3159,x=0.3772290185802739,y=0.7716546902601435 a=pan,b=hat,i=3160,x=0.4338772208506313,y=0.9209566304134479 a=zee,b=eks,i=3161,x=0.16149623520591205,y=0.8191827690376345 a=pan,b=pan,i=3162,x=0.2443000912024087,y=0.8277963236917038 a=pan,b=pan,i=3163,x=0.5737538909065584,y=0.3575809203203234 a=eks,b=hat,i=3164,x=0.1678243487522464,y=0.1296504375686386 a=pan,b=hat,i=3165,x=0.7163182383385346,y=0.1300805568939386 a=wye,b=pan,i=3166,x=0.2735080310434773,y=0.6786442937707285 a=pan,b=eks,i=3167,x=0.48168869036370665,y=0.8968310574568457 a=zee,b=zee,i=3168,x=0.3961829207208839,y=0.2622983994021634 a=eks,b=wye,i=3169,x=0.2536595801738487,y=0.08261588685057286 a=zee,b=hat,i=3170,x=0.7316564704807246,y=0.30372246853485163 a=zee,b=zee,i=3171,x=0.27819614904389,y=0.11787924109496262 a=zee,b=wye,i=3172,x=0.9313276309501597,y=0.06784065184241639 a=pan,b=zee,i=3173,x=0.9635998480283486,y=0.12292283146783456 a=eks,b=wye,i=3174,x=0.2566078750567745,y=0.05360968786999365 a=pan,b=eks,i=3175,x=0.9685323733434764,y=0.1278804691222305 a=hat,b=pan,i=3176,x=0.776656326879061,y=0.4278875482927529 a=wye,b=pan,i=3177,x=0.6848262739198221,y=0.5321892371672183 a=wye,b=wye,i=3178,x=0.9845151630820034,y=0.6080801511979752 a=pan,b=zee,i=3179,x=0.6442678944579725,y=0.32523273097572414 a=hat,b=eks,i=3180,x=0.23662417282509318,y=0.6499193149885536 a=zee,b=pan,i=3181,x=0.12870746190802307,y=0.21635539491335465 a=eks,b=hat,i=3182,x=0.27201825487678566,y=0.9413561927236772 a=pan,b=hat,i=3183,x=0.8541608865089346,y=0.4366080716736369 a=hat,b=zee,i=3184,x=0.40026444936770444,y=0.8965715190797674 a=hat,b=zee,i=3185,x=0.9325030093530197,y=0.040633192110803185 a=wye,b=hat,i=3186,x=0.31825681489643076,y=0.3867222210818564 a=pan,b=hat,i=3187,x=0.7581463326564405,y=0.18210426293229232 a=eks,b=eks,i=3188,x=0.13550843210847796,y=0.20870138759868107 a=pan,b=hat,i=3189,x=0.026314019590705673,y=0.18939923462316988 a=pan,b=zee,i=3190,x=0.0946195302667141,y=0.9170310729203291 a=wye,b=zee,i=3191,x=0.2541806115835422,y=0.7506597466069973 a=pan,b=wye,i=3192,x=0.7448507872358296,y=0.9175983360847946 a=pan,b=zee,i=3193,x=0.3376000211106229,y=0.7592946456540783 a=wye,b=pan,i=3194,x=0.6242009188843649,y=0.1437894916755703 a=wye,b=hat,i=3195,x=0.6601677176592059,y=0.014754580715863108 a=hat,b=wye,i=3196,x=0.6843473825379831,y=0.7390543536399969 a=hat,b=zee,i=3197,x=0.48954739752340115,y=0.7181499788655996 a=zee,b=hat,i=3198,x=0.4197184822020955,y=0.9015807728046735 a=wye,b=hat,i=3199,x=0.5950661155016866,y=0.7876820843797742 a=hat,b=eks,i=3200,x=0.6465062834343134,y=0.5218982684290329 a=zee,b=hat,i=3201,x=0.060837643441948086,y=0.06449850438005456 a=hat,b=pan,i=3202,x=0.3172017484222194,y=0.05112537969570785 a=pan,b=hat,i=3203,x=0.11472288877111181,y=0.278764852494509 a=pan,b=zee,i=3204,x=0.9047148747559682,y=0.04965210128934949 a=zee,b=pan,i=3205,x=0.6892430196905853,y=0.3657149811550592 a=pan,b=pan,i=3206,x=0.6248657938226793,y=0.8681563350185779 a=pan,b=eks,i=3207,x=0.6881257122613184,y=0.804141641741672 a=hat,b=pan,i=3208,x=0.9922055997300119,y=0.9648120708367885 a=hat,b=pan,i=3209,x=0.3619120930679631,y=0.9853160311413681 a=eks,b=eks,i=3210,x=0.45293528719314957,y=0.17947685156612458 a=hat,b=hat,i=3211,x=0.5613170559787437,y=0.5352246021671387 a=zee,b=zee,i=3212,x=0.7964737415528816,y=0.5558173183901908 a=wye,b=eks,i=3213,x=0.8883434034808566,y=0.4617422375169109 a=hat,b=eks,i=3214,x=0.3321384410187088,y=0.7317250838743725 a=pan,b=pan,i=3215,x=0.1413377562828586,y=0.44678231607159036 a=eks,b=wye,i=3216,x=0.29373386203032203,y=0.4631723587487283 a=eks,b=wye,i=3217,x=0.34111783868014145,y=0.5839315442691357 a=eks,b=eks,i=3218,x=0.6880428093376797,y=0.9103207963454706 a=hat,b=pan,i=3219,x=0.7474182668789385,y=0.5590391934991645 a=eks,b=pan,i=3220,x=0.9532855829386742,y=0.8800478978800655 a=zee,b=eks,i=3221,x=0.767029184744309,y=0.2596274975760916 a=zee,b=zee,i=3222,x=0.5138831052561117,y=0.47989679105419414 a=pan,b=eks,i=3223,x=0.009907068182697043,y=0.7478047711855503 a=eks,b=wye,i=3224,x=0.8943590875125406,y=0.6208131688490002 a=eks,b=hat,i=3225,x=0.4838255169683877,y=0.2140927440076752 a=pan,b=hat,i=3226,x=0.35642723142223887,y=0.9711625405713799 a=wye,b=pan,i=3227,x=0.7070990060513,y=0.5452513596675552 a=eks,b=hat,i=3228,x=0.9463721381595557,y=0.5282145729291476 a=pan,b=pan,i=3229,x=0.9242949068835605,y=0.6700494745496223 a=hat,b=eks,i=3230,x=0.0584193890994712,y=0.4718114656898049 a=wye,b=wye,i=3231,x=0.030244834940777232,y=0.6087749649541813 a=hat,b=wye,i=3232,x=0.34678472033142016,y=0.4446414363995591 a=pan,b=eks,i=3233,x=0.5471314567981557,y=0.2169784309597168 a=pan,b=hat,i=3234,x=0.7648908069032151,y=0.03159384287802769 a=zee,b=pan,i=3235,x=0.013980830949869794,y=0.2508908461970313 a=hat,b=wye,i=3236,x=0.6969519489568067,y=0.6395027023616561 a=zee,b=wye,i=3237,x=0.8234005688200698,y=0.3631748220150387 a=zee,b=eks,i=3238,x=0.012602991921698004,y=0.22634995064837027 a=hat,b=pan,i=3239,x=0.02254180433325681,y=0.7359441973013121 a=pan,b=zee,i=3240,x=0.5877493357317612,y=0.548066125189975 a=zee,b=pan,i=3241,x=0.30421967413326567,y=0.5234487663288749 a=pan,b=wye,i=3242,x=0.9611019977003785,y=0.681330883403185 a=zee,b=hat,i=3243,x=0.17998018908462488,y=0.2200339352675208 a=hat,b=pan,i=3244,x=0.5444834083087221,y=0.5306965663976729 a=pan,b=zee,i=3245,x=0.7759221188096915,y=0.6025062049702136 a=eks,b=wye,i=3246,x=0.9681111792743258,y=0.45013761820073994 a=zee,b=hat,i=3247,x=0.7005880770412263,y=0.9156129778807589 a=hat,b=wye,i=3248,x=0.15641983171365736,y=0.5385071761397577 a=eks,b=pan,i=3249,x=0.2874972552716878,y=0.25110619048650307 a=pan,b=eks,i=3250,x=0.2829120767349058,y=0.09835801807841182 a=zee,b=wye,i=3251,x=0.4637348926957112,y=0.542576911836454 a=pan,b=hat,i=3252,x=0.9877179689365846,y=0.31240448781527486 a=eks,b=wye,i=3253,x=0.4072943512790075,y=0.6799266447871808 a=pan,b=pan,i=3254,x=0.350457431460238,y=0.4302184547620955 a=hat,b=eks,i=3255,x=0.23726834440158573,y=0.5292284240941152 a=pan,b=eks,i=3256,x=0.7135080861062042,y=0.5712799934745325 a=zee,b=eks,i=3257,x=0.20289239990952312,y=0.362603885203753 a=zee,b=zee,i=3258,x=0.8218885195808542,y=0.44721748770524405 a=wye,b=hat,i=3259,x=0.08107176449903364,y=0.29319048909041645 a=hat,b=zee,i=3260,x=0.8800473905727186,y=0.7552020057189927 a=pan,b=wye,i=3261,x=0.41821226279651147,y=0.8850253360947092 a=zee,b=hat,i=3262,x=0.32568444506228,y=0.6065878837570879 a=hat,b=hat,i=3263,x=0.5430211603262051,y=0.022421059979423008 a=eks,b=pan,i=3264,x=0.829909329738617,y=0.9788813279683912 a=wye,b=pan,i=3265,x=0.4953326302591503,y=0.864833969133287 a=pan,b=zee,i=3266,x=0.3412837479312676,y=0.8486794212655834 a=eks,b=hat,i=3267,x=0.39932762162444313,y=0.953150614321362 a=pan,b=pan,i=3268,x=0.001904789877841595,y=0.2107702989499245 a=zee,b=pan,i=3269,x=0.5531033835416052,y=0.3659293527971088 a=wye,b=hat,i=3270,x=0.3399739634399507,y=0.49965908692258354 a=eks,b=hat,i=3271,x=0.11643573302292032,y=0.35717256575069845 a=zee,b=eks,i=3272,x=0.8616836237809823,y=0.2555712577320536 a=eks,b=hat,i=3273,x=0.8348848872325367,y=0.48966840491973995 a=eks,b=pan,i=3274,x=0.25513593682652125,y=0.39337835968432966 a=zee,b=pan,i=3275,x=0.3232344110781661,y=0.47637792160425796 a=zee,b=pan,i=3276,x=0.5834425639683404,y=0.23108217202798198 a=zee,b=zee,i=3277,x=0.9181379020242023,y=0.40705334764249457 a=eks,b=pan,i=3278,x=0.5097190157077268,y=0.04899861849664533 a=wye,b=hat,i=3279,x=0.9157221686398738,y=0.5671280092243552 a=pan,b=eks,i=3280,x=0.9442806463291782,y=0.9335857464104109 a=eks,b=hat,i=3281,x=0.5361984419807034,y=0.15587235520500609 a=pan,b=zee,i=3282,x=0.86450976120493,y=0.8170786827110009 a=hat,b=wye,i=3283,x=0.5057733411836555,y=0.04923731532668796 a=pan,b=hat,i=3284,x=0.414038070322006,y=0.4761906775736686 a=pan,b=hat,i=3285,x=0.48063067035883633,y=0.4966350007922782 a=wye,b=pan,i=3286,x=0.7217297767808066,y=0.9865570013659641 a=zee,b=wye,i=3287,x=0.049406279942573406,y=0.4381024486414813 a=eks,b=eks,i=3288,x=0.8590013149268277,y=0.936500197803695 a=eks,b=hat,i=3289,x=0.9568499040898423,y=0.3653704666883357 a=zee,b=eks,i=3290,x=0.40120382485623196,y=0.21124233932924863 a=eks,b=zee,i=3291,x=0.9770383012651398,y=0.2432263238178496 a=wye,b=zee,i=3292,x=0.9521492688907935,y=0.6087321738215051 a=hat,b=hat,i=3293,x=0.47067984267026386,y=0.2670742530232063 a=pan,b=zee,i=3294,x=0.6918379159173412,y=0.31495560827632296 a=eks,b=zee,i=3295,x=0.4372879409717054,y=0.6053789536304973 a=eks,b=zee,i=3296,x=0.21986184005655396,y=0.3247997718602733 a=hat,b=pan,i=3297,x=0.9729466791999957,y=0.5771820308689207 a=pan,b=hat,i=3298,x=0.7522212873607641,y=0.17501638801193387 a=wye,b=zee,i=3299,x=0.06852018338234533,y=0.5000015791152141 a=wye,b=wye,i=3300,x=0.6831118314601023,y=0.5728211330223406 a=eks,b=eks,i=3301,x=0.8886973140588106,y=0.7986263263709766 a=hat,b=zee,i=3302,x=0.36319331709268987,y=0.87884157727253 a=pan,b=pan,i=3303,x=0.0916484218320428,y=0.6140281532216169 a=wye,b=hat,i=3304,x=0.4319885161986502,y=0.11333627655422829 a=hat,b=pan,i=3305,x=0.20275914918267568,y=0.3188057450261915 a=eks,b=pan,i=3306,x=0.7128512847755833,y=0.8374752272564904 a=zee,b=hat,i=3307,x=0.12238507918350494,y=0.9886825082749487 a=zee,b=zee,i=3308,x=0.24501938424108383,y=0.2620366749016796 a=eks,b=eks,i=3309,x=0.6736625417797468,y=0.1759055405630674 a=zee,b=wye,i=3310,x=0.7640238780203037,y=0.5545749802574607 a=zee,b=hat,i=3311,x=0.7391015948965168,y=0.7783105639991896 a=wye,b=pan,i=3312,x=0.9912133558674248,y=0.792510678216663 a=zee,b=wye,i=3313,x=0.12157734657040631,y=0.5335120372360502 a=pan,b=pan,i=3314,x=0.6554607159333067,y=0.9770255281674824 a=pan,b=wye,i=3315,x=0.1108498180405314,y=0.9467953471924881 a=eks,b=hat,i=3316,x=0.5888965480684432,y=0.045574928515849766 a=hat,b=zee,i=3317,x=0.8991863104086707,y=0.8351323082787309 a=wye,b=zee,i=3318,x=0.8368882450019627,y=0.9558667451117976 a=pan,b=eks,i=3319,x=0.34803167097398835,y=0.6217481359344504 a=hat,b=wye,i=3320,x=0.5049375453273435,y=0.07971841779344901 a=eks,b=eks,i=3321,x=0.36879345677908304,y=0.7533458977670897 a=pan,b=zee,i=3322,x=0.4071079549678054,y=0.5216483192298931 a=zee,b=wye,i=3323,x=0.956745510209848,y=0.7277085431442248 a=hat,b=eks,i=3324,x=0.6530059095611962,y=0.4110782521026085 a=pan,b=pan,i=3325,x=0.3674804417277773,y=0.9040679087190475 a=hat,b=eks,i=3326,x=0.07009249966420861,y=0.25922706016534536 a=zee,b=eks,i=3327,x=0.14046308364385085,y=0.059686547583128746 a=pan,b=hat,i=3328,x=0.9232634224803832,y=0.02622931272244866 a=eks,b=hat,i=3329,x=0.5694104895719442,y=0.896791407570237 a=eks,b=pan,i=3330,x=0.34148617036917717,y=0.868694856533039 a=zee,b=hat,i=3331,x=0.5580004279189276,y=0.13162220092963606 a=pan,b=wye,i=3332,x=0.32760226290506067,y=0.20546606340653295 a=eks,b=pan,i=3333,x=0.4410927567165518,y=0.9434358777012175 a=wye,b=pan,i=3334,x=0.3692628443912691,y=0.04456305695935858 a=eks,b=wye,i=3335,x=0.2886377826496196,y=0.5510326222058004 a=wye,b=pan,i=3336,x=0.0830596216722399,y=0.42130620217712367 a=eks,b=eks,i=3337,x=0.8502898262908782,y=0.808554017252108 a=wye,b=pan,i=3338,x=0.4258737140465607,y=0.20746386470004785 a=zee,b=hat,i=3339,x=0.9958679007877833,y=0.03637803286845476 a=eks,b=eks,i=3340,x=0.8772219678712854,y=0.6738364551822755 a=zee,b=wye,i=3341,x=0.8674680931450676,y=0.08495173932166111 a=hat,b=wye,i=3342,x=0.039731587832649184,y=0.7153198737893809 a=zee,b=wye,i=3343,x=0.28331195090016237,y=0.3609364099093614 a=wye,b=pan,i=3344,x=0.5916979456033509,y=0.4261672292650668 a=zee,b=hat,i=3345,x=0.3236007641260298,y=0.31877697899629276 a=zee,b=wye,i=3346,x=0.0631478998746885,y=0.6649602440405321 a=wye,b=pan,i=3347,x=0.61444979062327,y=0.13673022117181688 a=eks,b=eks,i=3348,x=0.38993896958048435,y=0.2335429118604364 a=pan,b=wye,i=3349,x=0.376031512913815,y=0.4929792401226455 a=wye,b=eks,i=3350,x=0.9327767394224131,y=0.7607839483352263 a=eks,b=wye,i=3351,x=0.18464331650677035,y=0.6120397829138642 a=hat,b=hat,i=3352,x=0.550190920585813,y=0.7696873798459735 a=wye,b=eks,i=3353,x=0.5877052746857248,y=0.5545585412269964 a=pan,b=zee,i=3354,x=0.2801717488802852,y=0.17038214633612547 a=zee,b=wye,i=3355,x=0.024194919016248595,y=0.13545067511197206 a=wye,b=eks,i=3356,x=0.6380780240701133,y=0.9408087514008974 a=eks,b=pan,i=3357,x=0.6623105955866089,y=0.4258008296217072 a=eks,b=wye,i=3358,x=0.4071377938114724,y=0.7108273628344846 a=wye,b=hat,i=3359,x=0.6347502280299748,y=0.13907882326502974 a=wye,b=zee,i=3360,x=0.8494626745217564,y=0.023483418292297054 a=eks,b=eks,i=3361,x=0.6555829047838948,y=0.8920276297804856 a=hat,b=zee,i=3362,x=0.9880826407125887,y=0.11010372754824016 a=pan,b=wye,i=3363,x=0.6526207146787799,y=0.3813540848159578 a=eks,b=zee,i=3364,x=0.28621636247260607,y=0.5342782090242255 a=wye,b=pan,i=3365,x=0.5700040498735991,y=0.8850660888169822 a=hat,b=eks,i=3366,x=0.4556207889124957,y=0.07128477762040519 a=hat,b=pan,i=3367,x=0.18923164185093178,y=0.7138172870807187 a=pan,b=zee,i=3368,x=0.7831951158978603,y=0.3315912232116869 a=eks,b=wye,i=3369,x=0.3991655712684341,y=0.6297930225870115 a=eks,b=pan,i=3370,x=0.9558238449527896,y=0.27697054714540026 a=wye,b=eks,i=3371,x=0.794226121886924,y=0.42411771070954085 a=pan,b=hat,i=3372,x=0.43937440052467935,y=0.4563691901909951 a=wye,b=zee,i=3373,x=0.6530552443760023,y=0.15544449101184865 a=eks,b=wye,i=3374,x=0.8269474339710359,y=0.12072235071637616 a=zee,b=zee,i=3375,x=0.4367949309522303,y=0.013673838744716393 a=zee,b=eks,i=3376,x=0.5377434458282238,y=0.23314241806418468 a=pan,b=pan,i=3377,x=0.45145970444322747,y=0.8856960898087811 a=hat,b=wye,i=3378,x=0.012877279074692716,y=0.6068979505584087 a=zee,b=wye,i=3379,x=0.23678623178363256,y=0.05041356234716987 a=pan,b=hat,i=3380,x=0.9872783151204066,y=0.48841231625195825 a=zee,b=hat,i=3381,x=0.7373174186367665,y=0.7964198412222034 a=hat,b=wye,i=3382,x=0.4115788506813578,y=0.5970142880431725 a=zee,b=pan,i=3383,x=0.7218790645435766,y=0.45969503904769105 a=zee,b=wye,i=3384,x=0.16492065527363664,y=0.9315720353082685 a=zee,b=pan,i=3385,x=0.05670367935833176,y=0.2963435909908908 a=zee,b=eks,i=3386,x=0.6420030353862732,y=0.23114095824311187 a=eks,b=wye,i=3387,x=0.8708836596594736,y=0.18168328151330237 a=eks,b=eks,i=3388,x=0.711689030667817,y=0.08741327203084581 a=wye,b=zee,i=3389,x=0.40891337260400795,y=0.9839548655687227 a=eks,b=eks,i=3390,x=0.4329319528885155,y=0.7161120212330097 a=wye,b=wye,i=3391,x=0.9407214715817039,y=0.16134765993593336 a=wye,b=eks,i=3392,x=0.764135299542596,y=0.46303754738896463 a=wye,b=zee,i=3393,x=0.9822570907790836,y=0.7299006638143403 a=hat,b=eks,i=3394,x=0.6851390329252532,y=0.9050274462052531 a=pan,b=zee,i=3395,x=0.7512424175943134,y=0.4059836895379698 a=eks,b=hat,i=3396,x=0.9607050331936833,y=0.7948112675657537 a=wye,b=zee,i=3397,x=0.05596493072960251,y=0.9435195318051948 a=hat,b=eks,i=3398,x=0.6053108138597539,y=0.5992354123506696 a=pan,b=eks,i=3399,x=0.048684103098098785,y=0.1633725907413952 a=wye,b=wye,i=3400,x=0.10069663909544047,y=0.9482094389350565 a=zee,b=wye,i=3401,x=0.12603857687396403,y=0.9644862170094224 a=pan,b=zee,i=3402,x=0.27741250695381336,y=0.8159372840391408 a=pan,b=hat,i=3403,x=0.7370714816662562,y=0.8697953979508419 a=pan,b=zee,i=3404,x=0.31468021565829374,y=0.4427420339087643 a=hat,b=pan,i=3405,x=0.8863854452798668,y=0.033442919864234644 a=hat,b=hat,i=3406,x=0.45429743426633307,y=0.18433478859999053 a=eks,b=wye,i=3407,x=0.9617046721194548,y=0.9093815718950851 a=pan,b=hat,i=3408,x=0.07330408010392908,y=0.4448942751848767 a=zee,b=eks,i=3409,x=0.3364026277159641,y=0.9868364857498738 a=hat,b=pan,i=3410,x=0.08445928966500227,y=0.0703789054946542 a=wye,b=eks,i=3411,x=0.34156100908061116,y=0.8010566111511997 a=pan,b=wye,i=3412,x=0.8423508832374376,y=0.6949323092381406 a=wye,b=wye,i=3413,x=0.040886939254273114,y=0.47897154534037656 a=zee,b=wye,i=3414,x=0.25217276547664036,y=0.036553945399371846 a=zee,b=pan,i=3415,x=0.5599190631540909,y=0.924868567464608 a=zee,b=zee,i=3416,x=0.48916626975610933,y=0.5220243096247617 a=pan,b=zee,i=3417,x=0.2837666956657495,y=0.38177621330614264 a=hat,b=pan,i=3418,x=0.9442741844519087,y=0.3017027866540207 a=zee,b=hat,i=3419,x=0.06600809539932284,y=0.6981900505881413 a=zee,b=wye,i=3420,x=0.23090328234417856,y=0.2832500437007679 a=pan,b=zee,i=3421,x=0.9466805608495066,y=0.20786286772685625 a=wye,b=wye,i=3422,x=0.9363152201437546,y=0.28852583041792845 a=hat,b=hat,i=3423,x=0.0844657406732815,y=0.035913466762956925 a=pan,b=wye,i=3424,x=0.8784967044400372,y=0.604737958747047 a=hat,b=pan,i=3425,x=0.6609492899115649,y=0.5467085754935348 a=zee,b=hat,i=3426,x=0.075752725904918,y=0.609127836669268 a=pan,b=hat,i=3427,x=0.8416597040795218,y=0.8525979909355791 a=wye,b=zee,i=3428,x=0.16948281534078558,y=0.5287767961751489 a=eks,b=pan,i=3429,x=0.6884416724548735,y=0.37076683601683813 a=wye,b=zee,i=3430,x=0.06722038251076656,y=0.9227889532742807 a=eks,b=wye,i=3431,x=0.09226104972636995,y=0.7254707163058396 a=eks,b=wye,i=3432,x=0.9890932308131895,y=0.23151574428068822 a=zee,b=zee,i=3433,x=0.8595470542087552,y=0.8498636271417952 a=wye,b=eks,i=3434,x=0.5407110734310688,y=0.05363800054311196 a=zee,b=eks,i=3435,x=0.0439664086678202,y=0.9140005792113355 a=zee,b=wye,i=3436,x=0.9752652636201881,y=0.47980923190874036 a=pan,b=eks,i=3437,x=0.025261472762689308,y=0.12799888376709667 a=zee,b=eks,i=3438,x=0.16021119119058125,y=0.7792702864503347 a=zee,b=hat,i=3439,x=0.6820189455688497,y=0.10951500585648855 a=wye,b=pan,i=3440,x=0.936544606740171,y=0.03446044548668015 a=eks,b=pan,i=3441,x=0.2537650754015236,y=0.05620296178361983 a=hat,b=wye,i=3442,x=0.6287605552712544,y=0.33295303984892444 a=wye,b=zee,i=3443,x=0.21494998659532738,y=0.7690234752214624 a=pan,b=wye,i=3444,x=0.6714922124805293,y=0.4749161688649426 a=wye,b=eks,i=3445,x=0.0550862548275467,y=0.9962657146123411 a=zee,b=eks,i=3446,x=0.2804194256928545,y=0.23979661671683972 a=eks,b=pan,i=3447,x=0.8785960556284188,y=0.7011073928320367 a=eks,b=eks,i=3448,x=0.5502631585453132,y=0.11319904721842211 a=zee,b=pan,i=3449,x=0.524308758962708,y=0.6332502139032691 a=pan,b=pan,i=3450,x=0.8213036158322992,y=0.6456770989043784 a=pan,b=pan,i=3451,x=0.8025436057063862,y=0.7060797186033781 a=pan,b=zee,i=3452,x=0.5760028039744347,y=0.6132903113537639 a=eks,b=hat,i=3453,x=0.05717780028504649,y=0.07422864049114308 a=eks,b=hat,i=3454,x=0.9110638506299676,y=0.9591332251303966 a=zee,b=wye,i=3455,x=0.51833979114664,y=0.6939970837947521 a=eks,b=pan,i=3456,x=0.4252463974393268,y=0.39275828072553476 a=eks,b=wye,i=3457,x=0.9769460675156931,y=0.8198707026075209 a=hat,b=eks,i=3458,x=0.30514346329289554,y=0.9833267802770143 a=pan,b=pan,i=3459,x=0.014452973503922828,y=0.755728000485021 a=zee,b=hat,i=3460,x=0.588470670827405,y=0.6174548562216325 a=zee,b=wye,i=3461,x=0.1990979839956707,y=0.023566934582078036 a=wye,b=eks,i=3462,x=0.7242013186291925,y=0.47306057653207245 a=pan,b=wye,i=3463,x=0.06717794490486906,y=0.48623828005334757 a=pan,b=eks,i=3464,x=0.8155896300126392,y=0.5894548806723218 a=wye,b=eks,i=3465,x=0.9422913151044523,y=0.361126352245832 a=zee,b=wye,i=3466,x=0.209141807598481,y=0.7545695892430896 a=hat,b=eks,i=3467,x=0.9391826144539274,y=0.9934443990210938 a=zee,b=wye,i=3468,x=0.2358251666384058,y=0.4863498031303115 a=pan,b=pan,i=3469,x=0.4258863723941383,y=0.2095061249114658 a=eks,b=hat,i=3470,x=0.47997276184744964,y=0.06659122141821061 a=wye,b=pan,i=3471,x=0.2764533988832033,y=0.3208516601140218 a=hat,b=wye,i=3472,x=0.4069308223369382,y=0.7259811106485108 a=pan,b=eks,i=3473,x=0.244297825943407,y=0.31169012284386755 a=wye,b=pan,i=3474,x=0.6738217687467104,y=0.2638420139509079 a=zee,b=wye,i=3475,x=0.8997076621651254,y=0.35716661851825715 a=zee,b=hat,i=3476,x=0.4788250437439896,y=0.5377374198573633 a=pan,b=hat,i=3477,x=0.6611093704674268,y=0.6687601867132502 a=eks,b=pan,i=3478,x=0.08557950916786583,y=0.37592412501843786 a=zee,b=pan,i=3479,x=0.8231858428238995,y=0.28514406372275236 a=wye,b=eks,i=3480,x=0.4670447991864045,y=0.46821183232819474 a=eks,b=wye,i=3481,x=0.0018822508391512782,y=0.4734813045472098 a=pan,b=zee,i=3482,x=0.21972014701783804,y=0.9122864135454931 a=zee,b=hat,i=3483,x=0.2095348234287714,y=0.9927778389609139 a=eks,b=pan,i=3484,x=0.10029139579593083,y=0.535016375595021 a=hat,b=hat,i=3485,x=0.36431575992404175,y=0.9966126666610623 a=hat,b=wye,i=3486,x=0.2849558278410832,y=0.3539958226346893 a=zee,b=hat,i=3487,x=0.866561498905371,y=0.6749719599240999 a=zee,b=pan,i=3488,x=0.05018208235181909,y=0.3964541287147757 a=wye,b=eks,i=3489,x=0.8077315081411627,y=0.7479997434577657 a=zee,b=zee,i=3490,x=0.10200642169348917,y=0.31165758001404054 a=hat,b=wye,i=3491,x=0.12886564721513227,y=0.7037939176865968 a=eks,b=hat,i=3492,x=0.43102073349691117,y=0.5993057473020176 a=hat,b=pan,i=3493,x=0.555202486463376,y=0.36825782870554846 a=hat,b=hat,i=3494,x=0.9044026544451589,y=0.37279264245660304 a=zee,b=wye,i=3495,x=0.9934345872412148,y=0.8688371909960622 a=zee,b=eks,i=3496,x=0.12474075821856478,y=0.7664439797094331 a=eks,b=zee,i=3497,x=0.9892124342839178,y=0.9379196159380152 a=eks,b=hat,i=3498,x=0.6909633362296115,y=0.5517990615632886 a=pan,b=eks,i=3499,x=0.10345255049088942,y=0.02234404876115914 a=eks,b=eks,i=3500,x=0.3991733155276741,y=0.8199397764785649 a=hat,b=eks,i=3501,x=0.002293403878501854,y=0.4879144111797784 a=zee,b=zee,i=3502,x=0.5345656776152677,y=0.9046658240543963 a=zee,b=wye,i=3503,x=0.9917665563701388,y=0.7473226514963157 a=wye,b=hat,i=3504,x=0.5918745558045386,y=0.2286796079695561 a=pan,b=hat,i=3505,x=0.9587176731534732,y=0.12809903557671276 a=pan,b=eks,i=3506,x=0.3942757672769698,y=0.3445410354016084 a=wye,b=zee,i=3507,x=0.8698234232439451,y=0.6003476393534727 a=eks,b=hat,i=3508,x=0.6230637620114838,y=0.424076726635791 a=hat,b=zee,i=3509,x=0.9622867726071316,y=0.1432938077777307 a=hat,b=wye,i=3510,x=0.3386148986151456,y=0.7431914358914263 a=eks,b=pan,i=3511,x=0.3837436116647608,y=0.8533106760534216 a=zee,b=eks,i=3512,x=0.7150929360997113,y=0.9600218860596139 a=hat,b=eks,i=3513,x=0.33373578693097705,y=0.5234647971537469 a=wye,b=wye,i=3514,x=0.5856301380406596,y=0.1275528964200492 a=zee,b=wye,i=3515,x=0.37723354796784714,y=0.9997851122732699 a=wye,b=hat,i=3516,x=0.44369718809353986,y=0.4894205500423119 a=wye,b=eks,i=3517,x=0.322389903088264,y=0.05702987241410096 a=pan,b=wye,i=3518,x=0.11882480113661997,y=0.3858296816561547 a=wye,b=zee,i=3519,x=0.7202765028894381,y=0.12574040969710987 a=zee,b=hat,i=3520,x=0.0928487341029709,y=0.3330386484000102 a=pan,b=pan,i=3521,x=0.22867195583127464,y=0.33603525596818895 a=pan,b=zee,i=3522,x=0.7242093277954511,y=0.831898967676118 a=zee,b=eks,i=3523,x=0.42001209130403205,y=0.5036656584109297 a=pan,b=eks,i=3524,x=0.30252752965606133,y=0.24419009734033026 a=wye,b=hat,i=3525,x=0.9824695650800549,y=0.222603495436539 a=zee,b=wye,i=3526,x=0.04315340497837039,y=0.38068506172393646 a=hat,b=pan,i=3527,x=0.6632440400457205,y=0.1820945385520728 a=zee,b=wye,i=3528,x=0.7076813404535067,y=0.027521703948078957 a=wye,b=eks,i=3529,x=0.16368069077854164,y=0.29359040780910695 a=zee,b=wye,i=3530,x=0.217015339519548,y=0.8474352672037695 a=wye,b=hat,i=3531,x=0.598374987624828,y=0.6802372735701074 a=hat,b=wye,i=3532,x=0.3438213922655702,y=0.28091154307295796 a=wye,b=zee,i=3533,x=0.2380647747461756,y=0.9297096582745085 a=pan,b=zee,i=3534,x=0.5808212068478656,y=0.9148727191488517 a=pan,b=wye,i=3535,x=0.7265966050847938,y=0.21414009357018593 a=hat,b=pan,i=3536,x=0.7017454439056625,y=0.2590514800523752 a=hat,b=eks,i=3537,x=0.23900423399657456,y=0.2588795683734507 a=wye,b=zee,i=3538,x=0.784669987647248,y=0.6504554048913334 a=wye,b=zee,i=3539,x=0.26623848938137373,y=0.5547651697635625 a=pan,b=eks,i=3540,x=0.6492339089502173,y=0.6963037893628019 a=wye,b=hat,i=3541,x=0.4456255182136123,y=0.6615870162361136 a=hat,b=eks,i=3542,x=0.20295072778526713,y=0.7574601201974366 a=eks,b=wye,i=3543,x=0.9795917719021048,y=0.41272909038566297 a=pan,b=eks,i=3544,x=0.660437682897796,y=0.9976869991284935 a=wye,b=zee,i=3545,x=0.2910302714747729,y=0.3219344480841323 a=zee,b=wye,i=3546,x=0.6680653445050417,y=0.864596002429439 a=pan,b=zee,i=3547,x=0.7639660507096179,y=0.6193776992233352 a=hat,b=wye,i=3548,x=0.2983669342833217,y=0.9026909166111313 a=eks,b=eks,i=3549,x=0.1538517544982081,y=0.5455919445696917 a=wye,b=zee,i=3550,x=0.15207698807295011,y=0.9519397932545018 a=eks,b=hat,i=3551,x=0.4342338573806348,y=0.6933807304285913 a=eks,b=pan,i=3552,x=0.965663991619718,y=0.5930384036340364 a=pan,b=pan,i=3553,x=0.3101812940186591,y=0.2727128797499023 a=eks,b=hat,i=3554,x=0.18260657532777225,y=0.5311854832790144 a=hat,b=eks,i=3555,x=0.3893225708373611,y=0.5611190752491995 a=zee,b=wye,i=3556,x=0.7278766469231946,y=0.21929031459492465 a=zee,b=eks,i=3557,x=0.8571691661862111,y=0.5461980618981016 a=pan,b=eks,i=3558,x=0.8344799261872303,y=0.3256634336181796 a=pan,b=zee,i=3559,x=0.06279062797134494,y=0.9004664994169836 a=eks,b=eks,i=3560,x=0.4525336606815864,y=0.7037155484173209 a=pan,b=hat,i=3561,x=0.19425929127106012,y=0.24083853125540766 a=wye,b=eks,i=3562,x=0.07556315455842999,y=0.7950176869999145 a=eks,b=eks,i=3563,x=0.11705838779214672,y=0.8232973229982639 a=eks,b=hat,i=3564,x=0.4273089616257022,y=0.8991684257803373 a=wye,b=zee,i=3565,x=0.0168691413650478,y=0.18821185808166463 a=eks,b=eks,i=3566,x=0.1825897444890373,y=0.8746110728517744 a=zee,b=pan,i=3567,x=0.8121651250250981,y=0.686457266195396 a=hat,b=pan,i=3568,x=0.18054803232549899,y=0.8898083043065161 a=wye,b=hat,i=3569,x=0.8089924807824601,y=0.6633779430154854 a=hat,b=hat,i=3570,x=0.23144140451317397,y=0.756629243011781 a=wye,b=wye,i=3571,x=0.38887372145181665,y=0.20495538006007763 a=eks,b=pan,i=3572,x=0.35534650094834996,y=0.47884355218030206 a=zee,b=wye,i=3573,x=0.6566568341390783,y=0.6074553589369566 a=eks,b=eks,i=3574,x=0.6035504498536483,y=0.4034395784600332 a=wye,b=wye,i=3575,x=0.6697828249944248,y=0.7638274219999387 a=pan,b=zee,i=3576,x=0.35707993266640137,y=0.5998235579404124 a=hat,b=pan,i=3577,x=0.8477996338004375,y=0.10094293678130806 a=eks,b=eks,i=3578,x=0.47993080744275407,y=0.7674479934775376 a=pan,b=eks,i=3579,x=0.8628339613928006,y=0.8518114551427095 a=eks,b=wye,i=3580,x=0.06010165714354565,y=0.944192401862212 a=zee,b=pan,i=3581,x=0.6103322948705803,y=0.26797145325571314 a=hat,b=zee,i=3582,x=0.8139735237051052,y=0.41109841413309234 a=eks,b=wye,i=3583,x=0.27009503691464387,y=0.34604318820252766 a=pan,b=eks,i=3584,x=0.29901280575806055,y=0.2606367826081081 a=eks,b=eks,i=3585,x=0.9444152014675282,y=0.08541204554484039 a=eks,b=hat,i=3586,x=0.9746502905906368,y=0.5008159057662351 a=eks,b=eks,i=3587,x=0.3503288922335456,y=0.8393293676314583 a=hat,b=hat,i=3588,x=0.5428335261613996,y=0.8746507311887247 a=eks,b=hat,i=3589,x=0.04503314762859012,y=0.4498210841109198 a=eks,b=hat,i=3590,x=0.21099486037176274,y=0.15918964285673298 a=pan,b=zee,i=3591,x=0.9647151077978772,y=0.21127797222603706 a=wye,b=hat,i=3592,x=0.794447944887749,y=0.04835321965805062 a=hat,b=pan,i=3593,x=0.8800094797708875,y=0.26888925214636394 a=pan,b=hat,i=3594,x=0.30914801544685455,y=0.38087457746812736 a=eks,b=zee,i=3595,x=0.5231819036675817,y=0.40713616193177726 a=zee,b=hat,i=3596,x=0.5397245337903605,y=0.22318277532785968 a=eks,b=eks,i=3597,x=0.3001045399300144,y=0.684654835830757 a=wye,b=wye,i=3598,x=0.7511038686147846,y=0.16271559707006 a=pan,b=wye,i=3599,x=0.24928033876518263,y=0.5468336781217452 a=zee,b=zee,i=3600,x=0.8913764206699744,y=0.10963338992957028 a=zee,b=zee,i=3601,x=0.2744348997210646,y=0.31854494443399084 a=wye,b=zee,i=3602,x=0.054351745514601424,y=0.6361866150927422 a=zee,b=eks,i=3603,x=0.5229720340996624,y=0.057088462748232205 a=wye,b=pan,i=3604,x=0.7144947248233644,y=0.6725505298381226 a=wye,b=eks,i=3605,x=0.6414071793103325,y=0.5040707081922082 a=pan,b=eks,i=3606,x=0.8517449653369746,y=0.2950457092186415 a=wye,b=hat,i=3607,x=0.2865652516469479,y=0.10334063882665867 a=wye,b=pan,i=3608,x=0.24799522500173943,y=0.029628860448197347 a=zee,b=hat,i=3609,x=0.519616508395717,y=0.280205313320282 a=eks,b=zee,i=3610,x=0.06251116908017895,y=0.23236755910808227 a=eks,b=hat,i=3611,x=0.2146220845642176,y=0.1332540175691711 a=hat,b=zee,i=3612,x=0.39065626156480215,y=0.09272883365156981 a=pan,b=eks,i=3613,x=0.04243312520650444,y=0.12731535921213588 a=zee,b=hat,i=3614,x=0.9992938250588376,y=0.7586006131131866 a=pan,b=pan,i=3615,x=0.955045779277772,y=0.8579181695107918 a=eks,b=wye,i=3616,x=0.14187634853420827,y=0.2180915198390927 a=wye,b=wye,i=3617,x=0.7840113988617385,y=0.15653631848249716 a=zee,b=zee,i=3618,x=0.015927778136068382,y=0.6135932738526103 a=pan,b=pan,i=3619,x=0.19730522485789048,y=0.6132793786163574 a=wye,b=hat,i=3620,x=0.6713095225608523,y=0.5954491704569804 a=zee,b=pan,i=3621,x=0.4092160575415905,y=0.30771033889968114 a=hat,b=pan,i=3622,x=0.8901185751582916,y=0.1870407451165942 a=wye,b=hat,i=3623,x=0.5152268528423625,y=0.013485915142624427 a=wye,b=hat,i=3624,x=0.13584832757741117,y=0.382341043184265 a=wye,b=zee,i=3625,x=0.7390723547209095,y=0.6804645486376089 a=pan,b=pan,i=3626,x=0.17323378929158628,y=0.22177151771660586 a=hat,b=hat,i=3627,x=0.27427850969768897,y=0.39696397114401794 a=hat,b=hat,i=3628,x=0.12300146024961678,y=0.7010677704464917 a=zee,b=zee,i=3629,x=0.1203621553000902,y=0.03649730823892894 a=eks,b=pan,i=3630,x=0.6432472290390947,y=0.6493064608702905 a=wye,b=zee,i=3631,x=0.5501609784896981,y=0.5442209389820327 a=hat,b=zee,i=3632,x=0.9887195745001507,y=0.8462799528384646 a=zee,b=wye,i=3633,x=0.05961380658144755,y=0.41153390509403887 a=wye,b=pan,i=3634,x=0.779500491235004,y=0.5677694423637825 a=pan,b=pan,i=3635,x=0.8517678780538765,y=0.37570897363715816 a=zee,b=zee,i=3636,x=0.3540502081666034,y=0.7557010012298948 a=eks,b=pan,i=3637,x=0.5208357640093749,y=0.5659221306135821 a=hat,b=pan,i=3638,x=0.7845171840273204,y=0.3502193918421451 a=hat,b=pan,i=3639,x=0.31221536384885895,y=0.8777925678653494 a=wye,b=wye,i=3640,x=0.3117811337270454,y=0.6199259533630647 a=zee,b=wye,i=3641,x=0.34634768849647446,y=0.1722807458856409 a=eks,b=zee,i=3642,x=0.04372051184301495,y=0.7131048031620709 a=hat,b=eks,i=3643,x=0.39531406696346205,y=0.7072916873720192 a=wye,b=hat,i=3644,x=0.5912661057148787,y=0.49271215252480305 a=zee,b=pan,i=3645,x=0.3353629361519648,y=0.27452402896726324 a=zee,b=wye,i=3646,x=0.4302250977906721,y=0.9570565709617685 a=pan,b=eks,i=3647,x=0.8754763901824134,y=0.4440861211150172 a=pan,b=pan,i=3648,x=0.9502862550981916,y=0.9040781097596586 a=wye,b=pan,i=3649,x=0.07083776693984412,y=0.42161605810186464 a=hat,b=wye,i=3650,x=0.027750870484755663,y=0.059142569848676385 a=hat,b=zee,i=3651,x=0.7388454792523287,y=0.6889713924377876 a=hat,b=hat,i=3652,x=0.12134854954936014,y=0.12339998428589616 a=pan,b=pan,i=3653,x=0.42035180771481173,y=0.872087852987371 a=pan,b=pan,i=3654,x=0.741537059135207,y=0.9230584052244919 a=eks,b=hat,i=3655,x=0.1316863843779006,y=0.4213001572015598 a=hat,b=eks,i=3656,x=0.14075093892206003,y=0.21208162198013836 a=eks,b=wye,i=3657,x=0.8011409482794655,y=0.017450835880964632 a=hat,b=eks,i=3658,x=0.8537796341502905,y=0.5982760622218769 a=pan,b=hat,i=3659,x=0.09110243804094742,y=0.35916077607118146 a=wye,b=zee,i=3660,x=0.9000633600969007,y=0.2868625781042997 a=zee,b=hat,i=3661,x=0.32611268243475844,y=0.12873678851672 a=hat,b=zee,i=3662,x=0.7673614981915601,y=0.7295742505814344 a=zee,b=zee,i=3663,x=0.913522524093555,y=0.4340116921500242 a=eks,b=eks,i=3664,x=0.28693486076576824,y=0.19397030458410913 a=zee,b=zee,i=3665,x=0.3813728809412974,y=0.8915253351559728 a=hat,b=wye,i=3666,x=0.7295635205285994,y=0.6119784896875866 a=wye,b=pan,i=3667,x=0.41467178462553234,y=0.8608278645584995 a=zee,b=eks,i=3668,x=0.5993837930923437,y=0.7509474480036791 a=eks,b=eks,i=3669,x=0.9355633368933711,y=0.9694655041497229 a=zee,b=pan,i=3670,x=0.4986606323353615,y=0.3252967314272578 a=hat,b=zee,i=3671,x=0.9851663975549066,y=0.7574307817453141 a=wye,b=eks,i=3672,x=0.8646473696955588,y=0.8313013386958765 a=pan,b=wye,i=3673,x=0.2515908234672535,y=0.056725699540206675 a=eks,b=eks,i=3674,x=0.3536670370401426,y=0.3355576484883924 a=hat,b=eks,i=3675,x=0.0929703970918907,y=0.7140596291048347 a=eks,b=pan,i=3676,x=0.8723087423163797,y=0.6109859185908899 a=wye,b=pan,i=3677,x=0.3996143053161535,y=0.8616939694819011 a=zee,b=pan,i=3678,x=0.8491710196926309,y=0.6558159307696828 a=wye,b=pan,i=3679,x=0.20307168892773197,y=0.7086180793037447 a=wye,b=zee,i=3680,x=0.7425818200196079,y=0.9810014583943923 a=wye,b=wye,i=3681,x=0.02721573926299492,y=0.07804891308055895 a=eks,b=zee,i=3682,x=0.39124881803949274,y=0.9059680205710228 a=pan,b=eks,i=3683,x=0.11128670399371465,y=0.6228832493398745 a=zee,b=eks,i=3684,x=0.5257462041656636,y=0.23566322936666084 a=zee,b=eks,i=3685,x=0.7398298697417746,y=0.4194935104256209 a=hat,b=pan,i=3686,x=0.9301169302245861,y=0.7982783216031746 a=hat,b=hat,i=3687,x=0.24482997045240362,y=0.8750823381392218 a=zee,b=hat,i=3688,x=0.5723630888086361,y=0.8172243896570902 a=hat,b=wye,i=3689,x=0.8355718873799872,y=0.8007108863141698 a=wye,b=hat,i=3690,x=0.3502150576320706,y=0.9931617687282244 a=eks,b=pan,i=3691,x=0.1796260215186376,y=0.9607252375862692 a=zee,b=hat,i=3692,x=0.573338911032452,y=0.5241388333942388 a=hat,b=pan,i=3693,x=0.7781206646766762,y=0.5080484241731826 a=hat,b=zee,i=3694,x=0.33067301800352,y=0.7754516395280142 a=pan,b=eks,i=3695,x=0.4992904970087908,y=0.742643746741839 a=eks,b=wye,i=3696,x=0.9448270882170847,y=0.4103666781094296 a=wye,b=zee,i=3697,x=0.522725396720144,y=0.18925111602486566 a=pan,b=eks,i=3698,x=0.02978537252653579,y=0.5654493110146563 a=hat,b=hat,i=3699,x=0.2902217497914289,y=0.6770102706214468 a=wye,b=wye,i=3700,x=0.9046703649949718,y=0.7600607720698596 a=pan,b=hat,i=3701,x=0.7653688084959293,y=0.9589886741282106 a=hat,b=zee,i=3702,x=0.31427641268831985,y=0.7319186674523148 a=hat,b=eks,i=3703,x=0.04581508270551782,y=0.7555154492651157 a=zee,b=eks,i=3704,x=0.6944927784356837,y=0.6778190994819128 a=wye,b=wye,i=3705,x=0.40469824814249367,y=0.8841785778563369 a=eks,b=zee,i=3706,x=0.28192270569849476,y=0.3669079489151894 a=wye,b=hat,i=3707,x=0.32172668895407197,y=0.23641326221038772 a=pan,b=zee,i=3708,x=0.9367338792831362,y=0.4695354410183338 a=eks,b=wye,i=3709,x=0.5793435558579774,y=0.5284203604486059 a=pan,b=zee,i=3710,x=0.8358876467213303,y=0.010883794663985147 a=wye,b=hat,i=3711,x=0.7062248515236889,y=0.7592554719549557 a=eks,b=hat,i=3712,x=0.20158466043698664,y=0.2506153993203297 a=hat,b=zee,i=3713,x=0.5453918537789201,y=0.9591221613154766 a=pan,b=wye,i=3714,x=0.7007443629312707,y=0.69979486340907 a=hat,b=zee,i=3715,x=0.4982158038764617,y=0.1845463889797414 a=pan,b=wye,i=3716,x=0.7794631862118141,y=0.38174400926867047 a=wye,b=zee,i=3717,x=0.20372686286113306,y=0.48178229369817827 a=pan,b=pan,i=3718,x=0.6978201901277095,y=0.029333538689990557 a=eks,b=pan,i=3719,x=0.4534387451777433,y=0.22731879465386806 a=hat,b=hat,i=3720,x=0.9601728250087456,y=0.25178938182476607 a=eks,b=eks,i=3721,x=0.8929949309089861,y=0.2753211862235905 a=pan,b=wye,i=3722,x=0.9375469687103644,y=0.3374245074403295 a=wye,b=wye,i=3723,x=0.47515921315887333,y=0.9657952342754725 a=wye,b=eks,i=3724,x=0.7362078619104057,y=0.10855543465047734 a=zee,b=zee,i=3725,x=0.15221580400712498,y=0.5846857209085365 a=hat,b=eks,i=3726,x=0.7864690866743678,y=0.023450973928021757 a=hat,b=eks,i=3727,x=0.02778608789107495,y=0.19112025359038776 a=eks,b=hat,i=3728,x=0.5830906923999751,y=0.1825999304288003 a=pan,b=wye,i=3729,x=0.6339377797999709,y=0.7940228471998122 a=hat,b=wye,i=3730,x=0.9186140626854419,y=0.4158937617414502 a=hat,b=hat,i=3731,x=0.03433461671749849,y=0.37009846068918584 a=wye,b=wye,i=3732,x=0.24997685932838876,y=0.7647954464137104 a=wye,b=wye,i=3733,x=0.19073435311282794,y=0.705275429721041 a=wye,b=pan,i=3734,x=0.5747797481156508,y=0.8274654836314349 a=zee,b=hat,i=3735,x=0.20101546519059987,y=0.9017936214420659 a=eks,b=eks,i=3736,x=0.8706261619141413,y=0.5428739515744351 a=wye,b=pan,i=3737,x=0.5574876609423702,y=0.8504937121138577 a=pan,b=wye,i=3738,x=0.5390690548412024,y=0.3716168991158759 a=wye,b=hat,i=3739,x=0.971775360771065,y=0.3319565969194058 a=zee,b=pan,i=3740,x=0.9333817720718712,y=0.4371222668297464 a=zee,b=pan,i=3741,x=0.9571682809413955,y=0.6570144668674751 a=pan,b=zee,i=3742,x=0.05182394212116692,y=0.8208128933987844 a=eks,b=pan,i=3743,x=0.4905151151584467,y=0.320903002068355 a=wye,b=zee,i=3744,x=0.7710752122842248,y=0.6182369915664692 a=zee,b=pan,i=3745,x=0.0634219140814758,y=0.0909389524119274 a=pan,b=hat,i=3746,x=0.016317522611819957,y=0.4500858677522094 a=hat,b=hat,i=3747,x=0.2731453345797118,y=0.3612727190378229 a=zee,b=zee,i=3748,x=0.7692098314967419,y=0.723183352513404 a=pan,b=eks,i=3749,x=0.6600164034317578,y=0.22789566978678333 a=zee,b=zee,i=3750,x=0.4584069341764643,y=0.6052673722009491 a=pan,b=zee,i=3751,x=0.1376132992218041,y=0.5327305744083769 a=hat,b=pan,i=3752,x=0.27781099183901203,y=0.24166942932110203 a=eks,b=eks,i=3753,x=0.9130333710330752,y=0.9434343087469547 a=pan,b=hat,i=3754,x=0.39530750680824867,y=0.285187450605236 a=wye,b=zee,i=3755,x=0.5821904936762373,y=0.9440238426951152 a=eks,b=eks,i=3756,x=0.3151274913498434,y=0.2613270252067468 a=wye,b=zee,i=3757,x=0.27126594951001737,y=0.2696036535766695 a=pan,b=zee,i=3758,x=0.1144851508437299,y=0.43717693060689256 a=wye,b=wye,i=3759,x=0.8659325090962396,y=0.500920016668498 a=wye,b=zee,i=3760,x=0.14033050146326476,y=0.7853558549084289 a=pan,b=pan,i=3761,x=0.6277167190080807,y=0.820462327799342 a=zee,b=zee,i=3762,x=0.40740521496915294,y=0.5027677314620422 a=hat,b=eks,i=3763,x=0.702517766279011,y=0.5201760035681132 a=hat,b=pan,i=3764,x=0.9684950471794708,y=0.9824729038297494 a=pan,b=pan,i=3765,x=0.7505504157884441,y=0.5688693727587826 a=hat,b=zee,i=3766,x=0.3053846255939139,y=0.29250711868083323 a=pan,b=hat,i=3767,x=0.07270094398967542,y=0.819707679427309 a=pan,b=wye,i=3768,x=0.39157640275144845,y=0.29940355516568284 a=wye,b=hat,i=3769,x=0.2813634801023107,y=0.33793045381955156 a=wye,b=zee,i=3770,x=0.3006731850375737,y=0.41117593228974025 a=eks,b=zee,i=3771,x=0.8966388980866674,y=0.6767775863177413 a=zee,b=eks,i=3772,x=0.09712051675224176,y=0.1992258338913524 a=wye,b=hat,i=3773,x=0.05484010565512498,y=0.6891554266059904 a=eks,b=eks,i=3774,x=0.10098411790939343,y=0.23016371716573425 a=zee,b=hat,i=3775,x=0.7941735867493203,y=0.2594788677041825 a=zee,b=zee,i=3776,x=0.9683966232439434,y=0.25528882348504156 a=wye,b=eks,i=3777,x=0.5229176412769544,y=0.8857285221477562 a=eks,b=pan,i=3778,x=0.5543756678908779,y=0.8979653327985948 a=zee,b=eks,i=3779,x=0.692670964675647,y=0.43868001633055353 a=eks,b=pan,i=3780,x=0.6536521341657655,y=0.6026553230815477 a=hat,b=eks,i=3781,x=0.22056344697345842,y=0.16263581703146368 a=hat,b=wye,i=3782,x=0.9802208332262505,y=0.42156225597643915 a=hat,b=wye,i=3783,x=0.5246681466694276,y=0.3988002197517633 a=wye,b=eks,i=3784,x=0.2896043360112557,y=0.03933436470492446 a=pan,b=zee,i=3785,x=0.6699335151046618,y=0.1867082955540268 a=zee,b=zee,i=3786,x=0.0022910915202805082,y=0.8679336791294139 a=zee,b=hat,i=3787,x=0.11351579052401195,y=0.5365315180789991 a=pan,b=wye,i=3788,x=0.41697687514270476,y=0.3863350720666795 a=eks,b=pan,i=3789,x=0.2647880014677908,y=0.495992120309258 a=pan,b=wye,i=3790,x=0.4871902945382671,y=0.22753844996371497 a=zee,b=wye,i=3791,x=0.9587582682512387,y=0.9041552661112677 a=pan,b=eks,i=3792,x=0.8303342159408211,y=0.7063245550219001 a=pan,b=eks,i=3793,x=0.43293237945019947,y=0.26733489278694356 a=zee,b=wye,i=3794,x=0.8976337510372844,y=0.8750629709298201 a=hat,b=pan,i=3795,x=0.8432372103239337,y=0.9510111805966026 a=eks,b=hat,i=3796,x=0.823953148854179,y=0.3020905534872981 a=zee,b=wye,i=3797,x=0.6303527344509033,y=0.17531824895427106 a=zee,b=pan,i=3798,x=0.9979923700274865,y=0.6588578150120853 a=pan,b=zee,i=3799,x=0.03921193583035787,y=0.7303677603577615 a=hat,b=eks,i=3800,x=0.6540911583411234,y=0.6156768180814669 a=eks,b=zee,i=3801,x=0.41291944190449625,y=0.04630035513500563 a=pan,b=eks,i=3802,x=0.21101198189616388,y=0.6878498019067313 a=zee,b=pan,i=3803,x=0.6938862506507568,y=0.09123194788888433 a=hat,b=zee,i=3804,x=0.13831455085494204,y=0.6878495274227865 a=hat,b=hat,i=3805,x=0.9077137203924546,y=0.6604195772537097 a=zee,b=pan,i=3806,x=0.4130639175002534,y=0.4140992672289935 a=hat,b=zee,i=3807,x=0.5264705799180144,y=0.05933317807985761 a=eks,b=pan,i=3808,x=0.18073645069225752,y=0.47471602068305085 a=hat,b=eks,i=3809,x=0.07620205058855944,y=0.41909302154687966 a=hat,b=zee,i=3810,x=0.9274217320420701,y=0.23200196179581423 a=wye,b=wye,i=3811,x=0.9262768212215141,y=0.583254627467812 a=eks,b=eks,i=3812,x=0.5738580742119982,y=0.22201053907217239 a=hat,b=zee,i=3813,x=0.8381595697055793,y=0.8082122321715743 a=hat,b=pan,i=3814,x=0.3227628236617065,y=0.09200255049758854 a=zee,b=pan,i=3815,x=0.5420566318553253,y=0.24311173211623627 a=pan,b=zee,i=3816,x=0.0679585117420517,y=0.9334969672578366 a=wye,b=pan,i=3817,x=0.21834728153634142,y=0.009580087519049041 a=wye,b=pan,i=3818,x=0.6892726476500824,y=0.328130518469796 a=wye,b=zee,i=3819,x=0.6612561643616807,y=0.647643437411651 a=zee,b=hat,i=3820,x=0.030987943391648676,y=0.6485266624267947 a=pan,b=pan,i=3821,x=0.09753442464986295,y=0.3452736158284476 a=eks,b=wye,i=3822,x=0.23064104633743454,y=0.6206626510995845 a=hat,b=wye,i=3823,x=0.0660248906480213,y=0.4768167157060277 a=zee,b=hat,i=3824,x=0.07286963812865666,y=0.9841111028377353 a=wye,b=wye,i=3825,x=0.7412307338094147,y=0.8357569402941348 a=pan,b=zee,i=3826,x=0.8700896084310135,y=0.7743947935823393 a=wye,b=hat,i=3827,x=0.5505247366282321,y=0.4487041560677363 a=hat,b=hat,i=3828,x=0.4439300237744592,y=0.3540302359317383 a=zee,b=eks,i=3829,x=0.8461894479274499,y=0.1091063374403779 a=wye,b=hat,i=3830,x=0.31602199194810077,y=0.23756301234064214 a=eks,b=eks,i=3831,x=0.4588783903640905,y=0.822431348022218 a=wye,b=pan,i=3832,x=0.3154044653633482,y=0.6954789197372386 a=pan,b=eks,i=3833,x=0.9435147604130275,y=0.6343874692425551 a=pan,b=hat,i=3834,x=0.7491688531360436,y=0.6632149460503455 a=eks,b=zee,i=3835,x=0.7084199117993816,y=0.23836696302687854 a=wye,b=pan,i=3836,x=0.5783001097508949,y=0.5326591809573153 a=pan,b=zee,i=3837,x=0.007599613269725358,y=0.5985657848153627 a=wye,b=eks,i=3838,x=0.16276307163297787,y=0.4480412721243018 a=hat,b=pan,i=3839,x=0.04332885941703746,y=0.6974767645258779 a=pan,b=hat,i=3840,x=0.6308501275600921,y=0.15448447296698842 a=wye,b=wye,i=3841,x=0.7854392875246197,y=0.7264036810522736 a=zee,b=wye,i=3842,x=0.9500031218945214,y=0.9557435110983296 a=hat,b=eks,i=3843,x=0.8979324823898589,y=0.22043224466362787 a=zee,b=eks,i=3844,x=0.5533769309499299,y=0.4231610222317168 a=eks,b=hat,i=3845,x=0.956021508845704,y=0.05912536350688913 a=pan,b=zee,i=3846,x=0.12083257325362673,y=0.6880217459012083 a=eks,b=pan,i=3847,x=0.9538690048763792,y=0.018466194565513683 a=wye,b=eks,i=3848,x=0.6500527955774431,y=0.023909990362617428 a=wye,b=eks,i=3849,x=0.7149976391333995,y=0.9748913470930238 a=zee,b=eks,i=3850,x=0.7036643435758647,y=0.29910186188725063 a=eks,b=zee,i=3851,x=0.6884645549243478,y=0.6729540888918134 a=wye,b=wye,i=3852,x=0.16575767054134194,y=0.3519742254585112 a=zee,b=pan,i=3853,x=0.16807480611879477,y=0.6916258245977434 a=zee,b=eks,i=3854,x=0.9118453703518822,y=0.4970364912618278 a=eks,b=wye,i=3855,x=0.7041409587449016,y=0.21248706433820264 a=pan,b=zee,i=3856,x=0.7166199842938143,y=0.5985908973683398 a=eks,b=pan,i=3857,x=0.911885736627155,y=0.7775693985993537 a=pan,b=pan,i=3858,x=0.2655493421352306,y=0.5008269003029236 a=eks,b=eks,i=3859,x=0.23564525774209633,y=0.6200721762867689 a=eks,b=pan,i=3860,x=0.16404594209083445,y=0.2945650928508321 a=hat,b=zee,i=3861,x=0.5532707570794401,y=0.3218958838799141 a=wye,b=eks,i=3862,x=0.845977895190702,y=0.2105916632815279 a=pan,b=wye,i=3863,x=0.8914098448143842,y=0.941827688174933 a=wye,b=pan,i=3864,x=0.40887317017480806,y=0.9211253311538701 a=eks,b=pan,i=3865,x=0.6410821318604495,y=0.742344518102107 a=eks,b=eks,i=3866,x=0.8820740686865273,y=0.6336399556322359 a=zee,b=zee,i=3867,x=0.9124099806717596,y=0.10039063827592765 a=pan,b=pan,i=3868,x=0.5708876065677694,y=0.6788408195369369 a=pan,b=hat,i=3869,x=0.5531285064534339,y=0.014934021539296571 a=hat,b=zee,i=3870,x=0.40688870301241575,y=0.4640784108862729 a=eks,b=hat,i=3871,x=0.576479904048506,y=0.31414898223457755 a=wye,b=wye,i=3872,x=0.47105100438757685,y=0.05894343228765331 a=wye,b=hat,i=3873,x=0.08895748908550638,y=0.7503852698192701 a=zee,b=wye,i=3874,x=0.36954687122878715,y=0.07524269626487912 a=pan,b=zee,i=3875,x=0.8656993436002198,y=0.7910484890727197 a=wye,b=wye,i=3876,x=0.03808754965335226,y=0.08658971281465833 a=pan,b=zee,i=3877,x=0.09904785925240933,y=0.6676400108509978 a=eks,b=eks,i=3878,x=0.0506506132923914,y=0.7242690651435119 a=hat,b=eks,i=3879,x=0.03588331465146932,y=0.7484282721818893 a=hat,b=hat,i=3880,x=0.4235813324669898,y=0.24387827945280804 a=hat,b=hat,i=3881,x=0.7822034723161025,y=0.7478339704565765 a=hat,b=eks,i=3882,x=0.011719496883464853,y=0.24640876061080674 a=eks,b=hat,i=3883,x=0.4614594041430371,y=0.3205017019419516 a=wye,b=wye,i=3884,x=0.9807726374776462,y=0.16883444992338326 a=wye,b=zee,i=3885,x=0.31672532313467505,y=0.2365343741445356 a=hat,b=pan,i=3886,x=0.18873324663018243,y=0.7292335881068795 a=pan,b=hat,i=3887,x=0.030126862485056027,y=0.7407216218234761 a=eks,b=wye,i=3888,x=0.21823480875880663,y=0.6891953143456548 a=zee,b=wye,i=3889,x=0.039039225578129,y=0.043618607590064085 a=wye,b=eks,i=3890,x=0.1974840445022984,y=0.43475405724957294 a=pan,b=eks,i=3891,x=0.9382818311518488,y=0.9030005498802104 a=pan,b=zee,i=3892,x=0.27112454369214156,y=0.8859937112495071 a=eks,b=eks,i=3893,x=0.4046249389793575,y=0.21056190964042465 a=wye,b=zee,i=3894,x=0.7443136068289423,y=0.8294047544954046 a=hat,b=hat,i=3895,x=0.4564412341948818,y=0.7759614897360431 a=hat,b=wye,i=3896,x=0.04335080026755522,y=0.9820438391823961 a=hat,b=pan,i=3897,x=0.49376649897367464,y=0.13401013066245737 a=eks,b=pan,i=3898,x=0.6998124732144403,y=0.3446237971866837 a=eks,b=wye,i=3899,x=0.1432600644239883,y=0.7912100443742818 a=pan,b=hat,i=3900,x=0.8799773683889426,y=0.5220746421238783 a=wye,b=zee,i=3901,x=0.8739801518514984,y=0.13243512076702868 a=zee,b=eks,i=3902,x=0.8645468539063139,y=0.9700412096469742 a=hat,b=hat,i=3903,x=0.6603175490464367,y=0.7332253490191969 a=wye,b=hat,i=3904,x=0.2808463214358832,y=0.6400325080698059 a=hat,b=hat,i=3905,x=0.37058852723699554,y=0.10112929497538448 a=hat,b=pan,i=3906,x=0.18587769312561342,y=0.5877405963198684 a=hat,b=hat,i=3907,x=0.5156840561144312,y=0.48828123151684966 a=hat,b=hat,i=3908,x=0.011436139295365133,y=0.698305213173947 a=eks,b=zee,i=3909,x=0.8701294324647131,y=0.6010009857684786 a=eks,b=pan,i=3910,x=0.7754775924406334,y=0.9607498923245504 a=zee,b=zee,i=3911,x=0.10611443109176355,y=0.9500980959450185 a=eks,b=hat,i=3912,x=0.40688370124160333,y=0.3725099736322035 a=eks,b=pan,i=3913,x=0.7572616191019003,y=0.009426657564762575 a=zee,b=pan,i=3914,x=0.568449276718281,y=0.44428728066132994 a=hat,b=zee,i=3915,x=0.4715771685615844,y=0.679035167069352 a=pan,b=hat,i=3916,x=0.10385472378813976,y=0.8696276556798485 a=zee,b=eks,i=3917,x=0.4610838052133647,y=0.5166912532440093 a=eks,b=wye,i=3918,x=0.3468839319991631,y=0.7460608153868107 a=hat,b=hat,i=3919,x=0.20968623039533885,y=0.2249710535207634 a=eks,b=wye,i=3920,x=0.06633524516092837,y=0.21897455790581 a=zee,b=hat,i=3921,x=0.24462442594768674,y=0.7825101030749122 a=eks,b=pan,i=3922,x=0.09303768776585819,y=0.9097350521192294 a=pan,b=zee,i=3923,x=0.7828038174006502,y=0.40187653591870354 a=eks,b=wye,i=3924,x=0.24552287892234603,y=0.8709339930853457 a=wye,b=eks,i=3925,x=0.9444615936887226,y=0.5492757409492689 a=pan,b=eks,i=3926,x=0.2577383831501502,y=0.42247048365748696 a=hat,b=pan,i=3927,x=0.2961162902664337,y=0.5026763086626909 a=hat,b=pan,i=3928,x=0.3294192690721903,y=0.0018064795955691215 a=pan,b=wye,i=3929,x=0.5373694134669578,y=0.6408298650436733 a=wye,b=zee,i=3930,x=0.3772473940400355,y=0.4855477755417952 a=pan,b=hat,i=3931,x=0.8947844528349447,y=0.6976181039979583 a=wye,b=eks,i=3932,x=0.902042488611117,y=0.8695780909283909 a=zee,b=eks,i=3933,x=0.9377651072146025,y=0.49393343661090683 a=wye,b=wye,i=3934,x=0.8890179128922202,y=0.036534071445648686 a=eks,b=wye,i=3935,x=0.8719220728834155,y=0.626436829723036 a=zee,b=zee,i=3936,x=0.2789666429898331,y=0.7718880254003965 a=wye,b=zee,i=3937,x=0.8620266789446326,y=0.133104948798772 a=wye,b=wye,i=3938,x=0.4264030481171944,y=0.2469737981294069 a=zee,b=pan,i=3939,x=0.9776442331945898,y=0.4655162963934556 a=pan,b=hat,i=3940,x=0.37339956142433084,y=0.23248823182301037 a=eks,b=hat,i=3941,x=0.8182766432429959,y=0.2282730594932706 a=eks,b=zee,i=3942,x=0.7678757943544514,y=0.9693217394374674 a=wye,b=hat,i=3943,x=0.29550708533363845,y=0.16362618484177738 a=zee,b=wye,i=3944,x=0.9305603171944418,y=0.2631848553023146 a=zee,b=eks,i=3945,x=0.9502316772099553,y=0.19036371662120233 a=wye,b=eks,i=3946,x=0.8350585462480241,y=0.7491629688087337 a=wye,b=zee,i=3947,x=0.8226133287365867,y=0.2794421547836373 a=wye,b=wye,i=3948,x=0.02572471641992602,y=0.6920862746683303 a=wye,b=zee,i=3949,x=0.3676627709059406,y=0.3957927902894449 a=zee,b=pan,i=3950,x=0.32474388588887126,y=0.02474711989630063 a=pan,b=eks,i=3951,x=0.7409946857015619,y=0.19548589834215446 a=hat,b=wye,i=3952,x=0.6350102710290926,y=0.2620857765590283 a=zee,b=eks,i=3953,x=0.30922267009534077,y=0.3284230853853207 a=hat,b=pan,i=3954,x=0.052368455214725995,y=0.4715978875853839 a=eks,b=zee,i=3955,x=0.5312946172484967,y=0.12098565859835453 a=zee,b=eks,i=3956,x=0.1849505395742288,y=0.6971047278578605 a=pan,b=eks,i=3957,x=0.6165622172072422,y=0.37237191581951723 a=hat,b=zee,i=3958,x=0.07310839831115146,y=0.32925431162438823 a=pan,b=hat,i=3959,x=0.1292574457299427,y=0.3582879075778822 a=pan,b=zee,i=3960,x=0.19211441013639674,y=0.11950330832710931 a=wye,b=hat,i=3961,x=0.6511854877418017,y=0.4589218300880824 a=eks,b=hat,i=3962,x=0.9657235616300794,y=0.05144636955135773 a=hat,b=pan,i=3963,x=0.2775863198412192,y=0.7891255209818445 a=wye,b=eks,i=3964,x=0.9210830069555165,y=0.5838970142942722 a=zee,b=wye,i=3965,x=0.23984259901508576,y=0.26442599713920145 a=hat,b=eks,i=3966,x=0.23733058400187923,y=0.7016365873249447 a=zee,b=wye,i=3967,x=0.9985449436152721,y=0.7330838738578122 a=eks,b=wye,i=3968,x=0.015400799144512867,y=0.6014606839935781 a=zee,b=hat,i=3969,x=0.6861552175518395,y=0.46267309304633597 a=wye,b=zee,i=3970,x=0.3424738374943377,y=0.6234959936497562 a=hat,b=pan,i=3971,x=0.47236749903854525,y=0.49755810812875845 a=pan,b=wye,i=3972,x=0.06499356218753538,y=0.5661193015342019 a=pan,b=hat,i=3973,x=0.39627283237990996,y=0.6628720545942175 a=hat,b=hat,i=3974,x=0.2255823178745917,y=0.3328848639919585 a=zee,b=pan,i=3975,x=0.41021697311932137,y=0.5253220869630462 a=eks,b=eks,i=3976,x=0.3872364913819858,y=0.12628018436476995 a=zee,b=wye,i=3977,x=0.640238580570024,y=0.41378547967160495 a=eks,b=zee,i=3978,x=0.10057250053848688,y=0.6832812035658576 a=eks,b=wye,i=3979,x=0.05509300519176841,y=0.3449069313995392 a=eks,b=wye,i=3980,x=0.17739908838951735,y=0.6189549035709109 a=eks,b=pan,i=3981,x=0.798588528905017,y=0.7451168881460923 a=wye,b=eks,i=3982,x=0.7480880614402182,y=0.8419207681331152 a=wye,b=zee,i=3983,x=0.8362240426090267,y=0.77769018412775 a=hat,b=wye,i=3984,x=0.020984581151031745,y=0.9379819495871566 a=zee,b=eks,i=3985,x=0.05962271913450001,y=0.8797820678732818 a=pan,b=zee,i=3986,x=0.4205297371360823,y=0.9963268123973551 a=eks,b=hat,i=3987,x=0.3908629932350629,y=0.5854417332644798 a=zee,b=zee,i=3988,x=0.7335921993524305,y=0.5879895671878599 a=wye,b=zee,i=3989,x=0.2700024864980135,y=0.8437375152003208 a=wye,b=pan,i=3990,x=0.2551633201471506,y=0.4633660311722343 a=pan,b=zee,i=3991,x=0.07557797117002352,y=0.03446642347570361 a=zee,b=eks,i=3992,x=0.7507600776739561,y=0.6732032182262292 a=hat,b=zee,i=3993,x=0.08221997898229427,y=0.21489690844146592 a=zee,b=eks,i=3994,x=0.2399390749091379,y=0.8600537400054703 a=hat,b=eks,i=3995,x=0.6854597775410988,y=0.6047357220116547 a=pan,b=hat,i=3996,x=0.4669100032261838,y=0.48298621327550606 a=eks,b=hat,i=3997,x=0.8201134204882613,y=0.5748852394805374 a=zee,b=eks,i=3998,x=0.39329877289726367,y=0.8779820074659457 a=pan,b=pan,i=3999,x=0.1966197290195203,y=0.539503732197533 a=pan,b=wye,i=4000,x=0.7030828102156571,y=0.12232197500884245 a=wye,b=hat,i=4001,x=0.8174301789619988,y=0.9053657573378745 a=eks,b=wye,i=4002,x=0.3850636313361996,y=0.552180695877821 a=eks,b=hat,i=4003,x=0.6772262101934939,y=0.12567047648579976 a=wye,b=pan,i=4004,x=0.7607827500015804,y=0.6235619294990873 a=zee,b=zee,i=4005,x=0.6393382677423634,y=0.026928024799432126 a=zee,b=hat,i=4006,x=0.48789661545234886,y=0.21227412408894908 a=pan,b=wye,i=4007,x=0.5905532262814199,y=0.03346277389076979 a=eks,b=hat,i=4008,x=0.890243383339597,y=0.7267223805200799 a=hat,b=pan,i=4009,x=0.5706952995715363,y=0.9230695483570237 a=zee,b=hat,i=4010,x=0.42440597576906447,y=0.0704425276034597 a=hat,b=wye,i=4011,x=0.24251335510099137,y=0.23960695465439596 a=zee,b=pan,i=4012,x=0.5455876516440495,y=0.4916025226658389 a=eks,b=pan,i=4013,x=0.8704264127290353,y=0.5876599831119824 a=hat,b=pan,i=4014,x=0.31319409877544535,y=0.37600379424562247 a=pan,b=hat,i=4015,x=0.6791412275551999,y=0.8868908402993898 a=pan,b=eks,i=4016,x=0.8587762124701115,y=0.7327173343378633 a=zee,b=eks,i=4017,x=0.3047836325798219,y=0.7894212582792598 a=hat,b=pan,i=4018,x=0.3048776737346697,y=0.13707959214248555 a=zee,b=zee,i=4019,x=0.32116201777416775,y=0.6159942228124887 a=hat,b=pan,i=4020,x=0.0435632469106455,y=0.8600282250289863 a=zee,b=hat,i=4021,x=0.3130407621764443,y=0.2693181610377101 a=wye,b=zee,i=4022,x=0.40301649786733384,y=0.9524000685947437 a=pan,b=pan,i=4023,x=0.10367305449954967,y=0.022130374916290774 a=pan,b=zee,i=4024,x=0.2180038149057033,y=0.2890891058720141 a=hat,b=wye,i=4025,x=0.6365723951389777,y=0.7003325245087676 a=zee,b=zee,i=4026,x=0.9441858479531559,y=0.3388368972590644 a=wye,b=hat,i=4027,x=0.4037114359444258,y=0.90743641296412 a=hat,b=eks,i=4028,x=0.20788010249626498,y=0.6884626872862553 a=wye,b=pan,i=4029,x=0.3428961154684751,y=0.8868244204307322 a=zee,b=eks,i=4030,x=0.3317839760740481,y=0.4161099049929635 a=pan,b=eks,i=4031,x=0.09704619121471669,y=0.0779275379233505 a=wye,b=wye,i=4032,x=0.2974124725329491,y=0.20863438296756043 a=wye,b=pan,i=4033,x=0.44164928623031885,y=0.3935479870985933 a=zee,b=pan,i=4034,x=0.407013802751526,y=0.7638222768155006 a=hat,b=hat,i=4035,x=0.5832281654804606,y=0.30161246333228053 a=hat,b=pan,i=4036,x=0.3630052335487458,y=0.1756001401202808 a=pan,b=wye,i=4037,x=0.40101967210862355,y=0.21622386613658062 a=zee,b=eks,i=4038,x=0.31593174924868916,y=0.30590560916984444 a=pan,b=eks,i=4039,x=0.053167065399378544,y=0.9320171029412466 a=hat,b=zee,i=4040,x=0.9955496827175224,y=0.48098153603493243 a=wye,b=eks,i=4041,x=0.6663441339123051,y=0.8594459082303051 a=pan,b=wye,i=4042,x=0.1587273385461524,y=0.6669257024952429 a=eks,b=zee,i=4043,x=0.28076996721337844,y=0.7010179301082176 a=zee,b=wye,i=4044,x=0.4445193542875734,y=0.10451265229731932 a=eks,b=zee,i=4045,x=0.7400078317069471,y=0.6537027971576772 a=zee,b=zee,i=4046,x=0.6525804691103836,y=0.2545220514360603 a=wye,b=wye,i=4047,x=0.5414929203702645,y=0.4539331132426315 a=pan,b=hat,i=4048,x=0.26401325806452103,y=0.5055541652981963 a=zee,b=wye,i=4049,x=0.3865785757267529,y=0.3257613178120228 a=zee,b=pan,i=4050,x=0.22133212632288612,y=0.46497223755296413 a=wye,b=pan,i=4051,x=0.46330422466377885,y=0.0013216245762560641 a=eks,b=eks,i=4052,x=0.26951508961424153,y=0.8159189781286144 a=hat,b=zee,i=4053,x=0.8866052673521815,y=0.4046547094268781 a=eks,b=pan,i=4054,x=0.740840958021636,y=0.4460391910997835 a=hat,b=hat,i=4055,x=0.24697770493624438,y=0.612234746493852 a=eks,b=eks,i=4056,x=0.8643394873777513,y=0.9659257127064651 a=pan,b=pan,i=4057,x=0.3102888737344549,y=0.40268801525857945 a=zee,b=pan,i=4058,x=0.9750004025056389,y=0.30221484127549403 a=wye,b=eks,i=4059,x=0.5063318396525335,y=0.4417901089284284 a=pan,b=zee,i=4060,x=0.008052078028936815,y=0.8144830537845575 a=zee,b=zee,i=4061,x=0.5943115025128368,y=0.7926566656770357 a=eks,b=eks,i=4062,x=0.9875301794451499,y=0.7335426236266079 a=wye,b=zee,i=4063,x=0.8739281191211792,y=0.4835160480530071 a=wye,b=wye,i=4064,x=0.054986884076116516,y=0.9109000045675829 a=eks,b=pan,i=4065,x=0.9790714906563968,y=0.007030356364051138 a=eks,b=eks,i=4066,x=0.9312192725082208,y=0.4963799110654653 a=pan,b=pan,i=4067,x=0.5063639370311482,y=0.004264053556000236 a=eks,b=wye,i=4068,x=0.1524845394038703,y=0.8431776270630555 a=zee,b=wye,i=4069,x=0.969881192737605,y=0.7454405956242405 a=hat,b=eks,i=4070,x=0.18629806750635058,y=0.20897903127133244 a=hat,b=eks,i=4071,x=0.17058445050982152,y=0.6566712054825186 a=wye,b=hat,i=4072,x=0.5889180149165333,y=0.24917849958971638 a=pan,b=eks,i=4073,x=0.2657367745661936,y=0.2985150423046431 a=wye,b=pan,i=4074,x=0.7170683734519407,y=0.6616939907637078 a=hat,b=pan,i=4075,x=0.7741097521171826,y=0.5862044466287508 a=pan,b=eks,i=4076,x=0.6711827040032985,y=0.1902299755507466 a=hat,b=hat,i=4077,x=0.5011592202840128,y=0.4774266498958699 a=wye,b=hat,i=4078,x=0.45606720248652644,y=0.8123287155978273 a=zee,b=zee,i=4079,x=0.3760881437289524,y=0.8847359365393963 a=eks,b=zee,i=4080,x=0.6036589730049234,y=0.5196679309887058 a=eks,b=pan,i=4081,x=0.8636397669083807,y=0.39559043404091077 a=hat,b=hat,i=4082,x=0.5572557445251078,y=0.624066652987969 a=wye,b=wye,i=4083,x=0.8666445318722942,y=0.767288613574896 a=eks,b=zee,i=4084,x=0.5618487213544217,y=0.30293876669064146 a=wye,b=eks,i=4085,x=0.5272061090337726,y=0.9162627017806118 a=eks,b=wye,i=4086,x=0.3119331822264977,y=0.4703087590730718 a=wye,b=zee,i=4087,x=0.041369624776661396,y=0.1706574091421187 a=pan,b=eks,i=4088,x=0.6090012823832082,y=0.812489654491081 a=hat,b=pan,i=4089,x=0.6181818234320513,y=0.3456834903874286 a=wye,b=zee,i=4090,x=0.08760748700129917,y=0.046823223997924046 a=pan,b=pan,i=4091,x=0.9477496006595305,y=0.6877721274230629 a=pan,b=eks,i=4092,x=0.05823591729943611,y=0.2271541631902052 a=zee,b=wye,i=4093,x=0.5115949427264939,y=0.7463065447615764 a=hat,b=hat,i=4094,x=0.8294711965470426,y=0.5100796086516896 a=pan,b=wye,i=4095,x=0.002245348719915996,y=0.4758218988941505 a=zee,b=eks,i=4096,x=0.6921498725707808,y=0.11138574708230264 a=eks,b=zee,i=4097,x=0.5977012193299909,y=0.6349007809350186 a=wye,b=pan,i=4098,x=0.9826450383900536,y=0.1400761078947168 a=pan,b=wye,i=4099,x=0.8910882964590207,y=0.33701906973508144 a=wye,b=pan,i=4100,x=0.4194005326767647,y=0.5452164572329079 a=wye,b=wye,i=4101,x=0.9070001852862156,y=0.5366667269362855 a=pan,b=zee,i=4102,x=0.936276054438326,y=0.40450742681553564 a=wye,b=zee,i=4103,x=0.40338842748518,y=0.16714248436837198 a=pan,b=eks,i=4104,x=0.4763532787659751,y=0.6087591109968019 a=pan,b=wye,i=4105,x=0.16729489652734397,y=0.5307591339000314 a=wye,b=hat,i=4106,x=0.6762148011530986,y=0.7998537880048552 a=zee,b=wye,i=4107,x=0.1740567415346871,y=0.8534128359069896 a=eks,b=zee,i=4108,x=0.3415946367341153,y=0.19830581897594968 a=pan,b=hat,i=4109,x=0.06408072699727674,y=0.7782480536170286 a=eks,b=pan,i=4110,x=0.7201591775410024,y=0.9280174950278048 a=wye,b=hat,i=4111,x=0.27092702426036697,y=0.40264205326846036 a=wye,b=eks,i=4112,x=0.21549872173717677,y=0.7712851660284064 a=wye,b=eks,i=4113,x=0.9978834111387961,y=0.02729153021305819 a=wye,b=hat,i=4114,x=0.5672845724991237,y=0.8126100904189216 a=pan,b=eks,i=4115,x=0.14786482586108984,y=0.7088885498409112 a=eks,b=zee,i=4116,x=0.5374530235586998,y=0.1554131021415981 a=zee,b=wye,i=4117,x=0.973704237758867,y=0.2722193342177551 a=eks,b=zee,i=4118,x=0.44761492415732196,y=0.8962682037215072 a=wye,b=zee,i=4119,x=0.14069101423742136,y=0.3916394205657444 a=eks,b=hat,i=4120,x=0.7278136147317754,y=0.992128682834371 a=wye,b=eks,i=4121,x=0.3436640653132741,y=0.12875649374791853 a=pan,b=wye,i=4122,x=0.5589346838220178,y=0.4914922406604886 a=hat,b=zee,i=4123,x=0.11667168949423246,y=0.09343624851787202 a=zee,b=zee,i=4124,x=0.3762744289665654,y=0.4657534810646099 a=pan,b=zee,i=4125,x=0.8167559403831369,y=0.6726503484988995 a=zee,b=hat,i=4126,x=0.16302778730181566,y=0.2748655824617119 a=wye,b=wye,i=4127,x=0.7262693332963976,y=0.7800792471160094 a=wye,b=pan,i=4128,x=0.343037394179604,y=0.8198518248958258 a=zee,b=wye,i=4129,x=0.05680148699183385,y=0.6245423259174248 a=eks,b=wye,i=4130,x=0.8598238868873511,y=0.012220950836815403 a=pan,b=zee,i=4131,x=0.3675182883990802,y=0.8604415347784466 a=wye,b=zee,i=4132,x=0.14673501967206204,y=0.2171503552857429 a=wye,b=zee,i=4133,x=0.7389607262096376,y=0.036648057677968304 a=pan,b=eks,i=4134,x=0.5678246594857959,y=0.8501122230105806 a=eks,b=wye,i=4135,x=0.06467946568449268,y=0.8481570975546845 a=zee,b=eks,i=4136,x=0.9750589992032552,y=0.8792931621208594 a=pan,b=eks,i=4137,x=0.727677709722926,y=0.990782873469676 a=hat,b=eks,i=4138,x=0.680011121560662,y=0.8738045887343792 a=pan,b=eks,i=4139,x=0.8882078496509985,y=0.7037523368580344 a=wye,b=wye,i=4140,x=0.4072330251968732,y=0.5912138499903089 a=pan,b=pan,i=4141,x=0.7099916507740912,y=0.7023882125149881 a=zee,b=hat,i=4142,x=0.59845620196533,y=0.7654415799243958 a=wye,b=zee,i=4143,x=0.7319199702444085,y=0.3284383385587504 a=pan,b=eks,i=4144,x=0.20066813487611335,y=0.14876626920283553 a=eks,b=eks,i=4145,x=0.15065242524890976,y=0.12428817259719527 a=eks,b=hat,i=4146,x=0.24650476137003852,y=0.24493489109337752 a=pan,b=eks,i=4147,x=0.18018100232038436,y=0.6774654990004214 a=pan,b=wye,i=4148,x=0.3413539884717429,y=0.42693818289018026 a=pan,b=hat,i=4149,x=0.3302318191152641,y=0.76393329273942 a=wye,b=wye,i=4150,x=0.18070207422954976,y=0.5101494095812327 a=hat,b=wye,i=4151,x=0.9300760758556822,y=0.7773525646273065 a=eks,b=eks,i=4152,x=0.1811147851470688,y=0.27238019374865363 a=zee,b=zee,i=4153,x=0.5846722719463249,y=0.6311555286184487 a=eks,b=wye,i=4154,x=0.14862179863191494,y=0.8693912096400257 a=pan,b=zee,i=4155,x=0.09454282552502047,y=0.49923403772444375 a=hat,b=eks,i=4156,x=0.15799120592162896,y=0.038371812406094774 a=eks,b=zee,i=4157,x=0.4858235480097448,y=0.09279407391803784 a=wye,b=pan,i=4158,x=0.1333970187468101,y=0.28784426376744954 a=zee,b=wye,i=4159,x=0.16633086096833194,y=0.24966226951484904 a=hat,b=wye,i=4160,x=0.8054114157818849,y=0.7345641356600717 a=zee,b=wye,i=4161,x=0.0010540410989509086,y=0.4824535316499434 a=hat,b=wye,i=4162,x=0.17183301057444123,y=0.5814481871152551 a=hat,b=wye,i=4163,x=0.7378974454559613,y=0.14329858381160532 a=eks,b=eks,i=4164,x=0.1814557125976639,y=0.16922072136830046 a=hat,b=hat,i=4165,x=0.1667557442764379,y=0.4707835711078464 a=eks,b=eks,i=4166,x=0.8001532760200558,y=0.4710414364372668 a=zee,b=eks,i=4167,x=0.7619530390058822,y=0.930540767502347 a=zee,b=pan,i=4168,x=0.599752942239787,y=0.2632005449641026 a=wye,b=eks,i=4169,x=0.07899981174582527,y=0.8711975079555797 a=wye,b=zee,i=4170,x=0.9950566917608218,y=0.8929860757345622 a=zee,b=hat,i=4171,x=0.6164466931885032,y=0.046028336349777765 a=pan,b=wye,i=4172,x=0.9552928088345413,y=0.4665974055074307 a=hat,b=wye,i=4173,x=0.5631533277539057,y=0.18005042555248219 a=zee,b=wye,i=4174,x=0.43302095958952536,y=0.9058926327335167 a=eks,b=hat,i=4175,x=0.14893444050478133,y=0.6668089129536704 a=pan,b=wye,i=4176,x=0.4341923489619599,y=0.7002062767529537 a=wye,b=wye,i=4177,x=0.8269582967617823,y=0.3873323406990482 a=wye,b=hat,i=4178,x=0.10338061245651997,y=0.6598406918574121 a=wye,b=pan,i=4179,x=0.8403305474491944,y=0.5265486487825841 a=pan,b=wye,i=4180,x=0.2142912364810604,y=0.5902490540194396 a=hat,b=hat,i=4181,x=0.9215787418719625,y=0.87388922229494 a=wye,b=eks,i=4182,x=0.34389709563449355,y=0.9265777131373166 a=wye,b=hat,i=4183,x=0.7734961393992563,y=0.8972101418171253 a=wye,b=eks,i=4184,x=0.26453922756144566,y=0.04144136482622762 a=eks,b=eks,i=4185,x=0.6545545397873997,y=0.3003265405693454 a=zee,b=pan,i=4186,x=0.09176822676571406,y=0.5263428400902627 a=hat,b=eks,i=4187,x=0.9865778952946068,y=0.9315331182266391 a=zee,b=zee,i=4188,x=0.5768573162811447,y=0.03374115506424635 a=wye,b=eks,i=4189,x=0.8653650223373014,y=0.05928658347043925 a=hat,b=hat,i=4190,x=0.9900519739227561,y=0.3950239124798106 a=pan,b=eks,i=4191,x=0.637972872375815,y=0.17992343467853944 a=zee,b=hat,i=4192,x=0.20233463129873608,y=0.8387699339680452 a=pan,b=wye,i=4193,x=0.782060968571005,y=0.5226067196250769 a=zee,b=hat,i=4194,x=0.6917599608609465,y=0.7645848884839161 a=zee,b=wye,i=4195,x=0.05217934744029562,y=0.9588458237749052 a=eks,b=zee,i=4196,x=0.9253885848590683,y=0.3616430584909154 a=zee,b=wye,i=4197,x=0.04731297366084686,y=0.5416374414603988 a=pan,b=pan,i=4198,x=0.2033916216857976,y=0.920262918619217 a=hat,b=hat,i=4199,x=0.14718338407807485,y=0.8513271413790102 a=eks,b=eks,i=4200,x=0.7461940655714095,y=0.22725935726388635 a=hat,b=zee,i=4201,x=0.5742688863471991,y=0.20563261535996558 a=pan,b=hat,i=4202,x=0.23693797784996196,y=0.7710519376518159 a=wye,b=pan,i=4203,x=0.24740078542575394,y=0.031517413903408564 a=eks,b=wye,i=4204,x=0.09707778409356904,y=0.4413369985080463 a=zee,b=hat,i=4205,x=0.9035555263299718,y=0.39000800205677044 a=eks,b=zee,i=4206,x=0.591250716216349,y=0.533942741704139 a=wye,b=pan,i=4207,x=0.03750222722365337,y=0.7243329653363689 a=eks,b=eks,i=4208,x=0.23584245665114634,y=0.13929514505423546 a=hat,b=wye,i=4209,x=0.01599534158357141,y=0.888241457991452 a=pan,b=pan,i=4210,x=0.7140111302670499,y=0.3769195273604298 a=wye,b=eks,i=4211,x=0.5693885676546375,y=0.8180582438424654 a=eks,b=pan,i=4212,x=0.7602507606210257,y=0.39631475864139476 a=zee,b=zee,i=4213,x=0.6569921162319814,y=0.9398725266121587 a=zee,b=eks,i=4214,x=0.6757239578204182,y=0.6370305085828928 a=wye,b=pan,i=4215,x=0.24941440834260942,y=0.6514695259568407 a=hat,b=wye,i=4216,x=0.11546817052646863,y=0.987858819464426 a=pan,b=wye,i=4217,x=0.4097976618902073,y=0.141878119206427 a=pan,b=pan,i=4218,x=0.37182041744304883,y=0.5321264950796094 a=zee,b=zee,i=4219,x=0.6441844499665529,y=0.23588688400237645 a=zee,b=pan,i=4220,x=0.30704268738508733,y=0.5886080352557902 a=zee,b=zee,i=4221,x=0.2777713687698916,y=0.9525579988213925 a=eks,b=wye,i=4222,x=0.2916049582954635,y=0.36479303527285845 a=eks,b=eks,i=4223,x=0.18203746990797298,y=0.7219165981682398 a=hat,b=zee,i=4224,x=0.5666319712329421,y=0.5421871427604233 a=wye,b=eks,i=4225,x=0.4458349858817956,y=0.9706195326043711 a=eks,b=zee,i=4226,x=0.16294492416963813,y=0.8362146915120445 a=pan,b=hat,i=4227,x=0.7293597006505415,y=0.35215231788343837 a=wye,b=pan,i=4228,x=0.0036540728637147746,y=0.9534351724118004 a=pan,b=eks,i=4229,x=0.651806061031575,y=0.6877628315760286 a=hat,b=zee,i=4230,x=0.3033701670401001,y=0.6978700190197445 a=eks,b=hat,i=4231,x=0.9813730880370696,y=0.8073301729919906 a=hat,b=hat,i=4232,x=0.4406941528960675,y=0.11038994093232624 a=wye,b=pan,i=4233,x=0.6049346739736081,y=0.8481638285484625 a=wye,b=pan,i=4234,x=0.03250269370708647,y=0.07284046091092433 a=hat,b=eks,i=4235,x=0.8805603004827004,y=0.2757599334574219 a=hat,b=eks,i=4236,x=0.35959828200975064,y=0.942305832708083 a=zee,b=zee,i=4237,x=0.3542208694505635,y=0.9173262586874656 a=wye,b=hat,i=4238,x=0.768952199858574,y=0.3860553554975482 a=wye,b=zee,i=4239,x=0.15775845219755535,y=0.6337543088194983 a=pan,b=hat,i=4240,x=0.7490446337745393,y=0.7787017014295363 a=pan,b=wye,i=4241,x=0.39480526500730084,y=0.8301232751171009 a=zee,b=hat,i=4242,x=0.34372514541539545,y=0.49770081510285935 a=hat,b=eks,i=4243,x=0.38836962308546263,y=0.20018023403843987 a=pan,b=wye,i=4244,x=0.7365286003534705,y=0.9834124894169503 a=hat,b=zee,i=4245,x=0.8079109744541904,y=0.7703976742527068 a=zee,b=wye,i=4246,x=0.4282487915196205,y=0.20203065558191458 a=pan,b=eks,i=4247,x=0.9507204029429733,y=0.5630361304031504 a=eks,b=wye,i=4248,x=0.5065699052598817,y=0.6709355384501077 a=hat,b=zee,i=4249,x=0.09530331139521941,y=0.6141770440290856 a=pan,b=wye,i=4250,x=0.574482871032033,y=0.24679198539791947 a=zee,b=pan,i=4251,x=0.36882904197494304,y=0.20694570729434147 a=zee,b=zee,i=4252,x=0.18869049168164287,y=0.2881249393129065 a=pan,b=eks,i=4253,x=0.8529162429192656,y=0.6126252561626568 a=eks,b=eks,i=4254,x=0.9121680240505416,y=0.24514174410079137 a=hat,b=pan,i=4255,x=0.29284172836172306,y=0.7411592078657947 a=zee,b=eks,i=4256,x=0.340648501185675,y=0.8624542687016871 a=hat,b=pan,i=4257,x=0.5337295526676911,y=0.20956745825751122 a=hat,b=eks,i=4258,x=0.23233951000696584,y=0.7359066130916937 a=pan,b=hat,i=4259,x=0.5012993133229816,y=0.9840303477621715 a=eks,b=pan,i=4260,x=0.0557110727165222,y=0.3692997658300152 a=hat,b=hat,i=4261,x=0.7017095010065938,y=0.2235290487843009 a=eks,b=eks,i=4262,x=0.45572766007890264,y=0.8865479382954524 a=zee,b=wye,i=4263,x=0.5008782411049667,y=0.6537828452513129 a=eks,b=wye,i=4264,x=0.17630798589531016,y=0.8870092132233037 a=pan,b=wye,i=4265,x=0.4723205963134164,y=0.5883227580402909 a=eks,b=zee,i=4266,x=0.7813498909756447,y=0.3554002183159217 a=hat,b=eks,i=4267,x=0.6709709261548794,y=0.6826054557997793 a=zee,b=pan,i=4268,x=0.5869984233644046,y=0.4215965891872716 a=hat,b=wye,i=4269,x=0.23755705980379305,y=0.565717672067408 a=wye,b=hat,i=4270,x=0.05437547367302842,y=0.3843634628840725 a=wye,b=eks,i=4271,x=0.33499684404101904,y=0.7363519893989602 a=eks,b=eks,i=4272,x=0.42076370727497103,y=0.347103929260111 a=eks,b=hat,i=4273,x=0.20223347366198052,y=0.6349185327342544 a=eks,b=eks,i=4274,x=0.7194619239494552,y=0.6726333368969638 a=pan,b=hat,i=4275,x=0.15064209086091185,y=0.5650744857540827 a=eks,b=wye,i=4276,x=0.03269653193879951,y=0.29083447280996944 a=hat,b=wye,i=4277,x=0.9383386369025388,y=0.09737047596503401 a=pan,b=wye,i=4278,x=0.6033940134557939,y=0.1524866624571496 a=zee,b=hat,i=4279,x=0.919407700741633,y=0.6700497097456894 a=eks,b=pan,i=4280,x=0.09769799852915939,y=0.3471066706498296 a=hat,b=eks,i=4281,x=0.9148347334297323,y=0.3595323954523194 a=wye,b=pan,i=4282,x=0.32493658600558517,y=0.7120462337991681 a=pan,b=hat,i=4283,x=0.6050379829344159,y=0.018006169529162563 a=hat,b=pan,i=4284,x=0.37191179153184073,y=0.832305267226861 a=pan,b=zee,i=4285,x=0.2957451251158941,y=0.23349218064678878 a=eks,b=eks,i=4286,x=0.8813752969569559,y=0.3063937411460197 a=pan,b=eks,i=4287,x=0.22955891589246613,y=0.2437355707416211 a=hat,b=zee,i=4288,x=0.2100291042828707,y=0.3046125296846791 a=hat,b=zee,i=4289,x=0.6942460642160058,y=0.871648415206408 a=wye,b=pan,i=4290,x=0.13303046989523815,y=0.45261676602514167 a=wye,b=wye,i=4291,x=0.24091267860783117,y=0.432502161153847 a=wye,b=zee,i=4292,x=0.6513153856124736,y=0.023025130979235975 a=eks,b=eks,i=4293,x=0.772799624621821,y=0.13641136437762147 a=hat,b=eks,i=4294,x=0.9391670129701266,y=0.15143599739807145 a=zee,b=hat,i=4295,x=0.866742316822531,y=0.5669492043473316 a=eks,b=wye,i=4296,x=0.11546282204080383,y=0.9128514066164883 a=pan,b=hat,i=4297,x=0.020837302984029304,y=0.3069132274412595 a=hat,b=hat,i=4298,x=0.006892430057588106,y=0.6798603206549415 a=hat,b=wye,i=4299,x=0.6559693329859475,y=0.9101410668227939 a=pan,b=pan,i=4300,x=0.14308736404653355,y=0.35525668832657153 a=eks,b=hat,i=4301,x=0.04475741710473613,y=0.3360654229410476 a=zee,b=eks,i=4302,x=0.300825418985067,y=0.5528561991382178 a=zee,b=pan,i=4303,x=0.3269045708474553,y=0.9274904871303865 a=eks,b=hat,i=4304,x=0.4580262055344778,y=0.9863999543980315 a=zee,b=pan,i=4305,x=0.054247648849443775,y=0.03062117326702829 a=zee,b=zee,i=4306,x=0.2506554143610683,y=0.5597570122349527 a=hat,b=zee,i=4307,x=0.6572769759538587,y=0.7762188360555565 a=zee,b=zee,i=4308,x=0.6244811945148983,y=0.6455417265947343 a=pan,b=pan,i=4309,x=0.14825540740448062,y=0.7586294908793549 a=wye,b=zee,i=4310,x=0.3157871729124738,y=0.3917102144253892 a=eks,b=hat,i=4311,x=0.6708501828317742,y=0.004568949785298204 a=pan,b=eks,i=4312,x=0.20998610203251922,y=0.7744934955144873 a=zee,b=hat,i=4313,x=0.40564280799464325,y=0.33455931413035944 a=hat,b=zee,i=4314,x=0.26557751620121417,y=0.030582294685487232 a=wye,b=eks,i=4315,x=0.8346822718173391,y=0.9087526385931736 a=zee,b=pan,i=4316,x=0.6650102486494331,y=0.47444093050485336 a=eks,b=wye,i=4317,x=0.5533052426698345,y=0.9963296753932288 a=hat,b=wye,i=4318,x=0.8500427306718407,y=0.3980491400101921 a=eks,b=hat,i=4319,x=0.587710279503696,y=0.7637256058032382 a=hat,b=eks,i=4320,x=0.225195776008963,y=0.34680409151838987 a=eks,b=eks,i=4321,x=0.3743649517286406,y=0.371323975760271 a=zee,b=wye,i=4322,x=0.08196046591615203,y=0.9354600035181082 a=pan,b=zee,i=4323,x=0.1270141412555008,y=0.9359092028185755 a=pan,b=wye,i=4324,x=0.8265091425517825,y=0.8730857418980851 a=wye,b=hat,i=4325,x=0.18762256928648036,y=0.3496377335361346 a=hat,b=zee,i=4326,x=0.5027579931171035,y=0.4533737960921881 a=pan,b=zee,i=4327,x=0.8574481014982461,y=0.5295177741370016 a=eks,b=hat,i=4328,x=0.04469772107287828,y=0.1558945876794342 a=zee,b=wye,i=4329,x=0.040009010165471426,y=0.23762769464838596 a=wye,b=eks,i=4330,x=0.7337424822041352,y=0.9253645788362634 a=eks,b=pan,i=4331,x=0.39774327394939324,y=0.7598516907632268 a=zee,b=eks,i=4332,x=0.6650861493530829,y=0.9532385654163494 a=wye,b=zee,i=4333,x=0.623256894200598,y=0.9959963338862539 a=hat,b=hat,i=4334,x=0.5194251677645445,y=0.6069457992071033 a=eks,b=eks,i=4335,x=0.27590012941997233,y=0.4710389173795224 a=eks,b=wye,i=4336,x=0.20559084127748029,y=0.07907344682124973 a=zee,b=eks,i=4337,x=0.7274918229548967,y=0.4560003890137745 a=eks,b=wye,i=4338,x=0.7956872034220226,y=0.5293505141201019 a=eks,b=hat,i=4339,x=0.7870829513432012,y=0.43739349603781874 a=zee,b=hat,i=4340,x=0.7603664092180368,y=0.9580821743227704 a=hat,b=wye,i=4341,x=0.13255591202916173,y=0.6036817350896815 a=hat,b=eks,i=4342,x=0.894832446069551,y=0.20041478240523392 a=pan,b=zee,i=4343,x=0.25499861370064547,y=0.7429826617008429 a=wye,b=wye,i=4344,x=0.052662357337272314,y=0.29674416350945576 a=wye,b=eks,i=4345,x=0.32377948428256254,y=0.44346746414092775 a=pan,b=wye,i=4346,x=0.981200940391299,y=0.3540023526814763 a=zee,b=pan,i=4347,x=0.8084421949971258,y=0.30776403749247283 a=wye,b=hat,i=4348,x=0.4821078789121165,y=0.4162262532349117 a=wye,b=hat,i=4349,x=0.4367902393016294,y=0.05920613613537973 a=eks,b=hat,i=4350,x=0.9339368174600853,y=0.7317847021280102 a=zee,b=hat,i=4351,x=0.9429615758129121,y=0.5240015841208292 a=hat,b=zee,i=4352,x=0.0664957669868742,y=8.818962627266114e-05 a=pan,b=eks,i=4353,x=0.8282722812326957,y=0.23408835381449733 a=zee,b=hat,i=4354,x=0.1538284653082913,y=0.6089810980954452 a=zee,b=eks,i=4355,x=0.46866002588451194,y=0.9134518194404112 a=pan,b=eks,i=4356,x=0.01315481017386444,y=0.44644705644627847 a=wye,b=pan,i=4357,x=0.15872648196015937,y=0.4101120817770719 a=eks,b=pan,i=4358,x=0.4048463543687769,y=0.8180080997048252 a=eks,b=hat,i=4359,x=0.18749105355156304,y=0.031119717506070232 a=wye,b=eks,i=4360,x=0.5994338059975802,y=0.7593584300322925 a=zee,b=pan,i=4361,x=0.4041175236502057,y=0.563867680719028 a=pan,b=pan,i=4362,x=0.4776831446864783,y=0.31255268452634855 a=zee,b=zee,i=4363,x=0.737623707262791,y=0.07173859048743914 a=eks,b=zee,i=4364,x=0.06851910387772064,y=0.6267119426769414 a=pan,b=pan,i=4365,x=0.8056978268678051,y=0.6122184248222929 a=wye,b=eks,i=4366,x=0.6130750784896909,y=0.3739723925301818 a=zee,b=eks,i=4367,x=0.5479247041679578,y=0.8471361139630293 a=hat,b=hat,i=4368,x=0.6173031043354198,y=0.7380826201700894 a=hat,b=pan,i=4369,x=0.18322206558953436,y=0.3662885008446586 a=zee,b=pan,i=4370,x=0.8569969483007317,y=0.731735360698434 a=zee,b=zee,i=4371,x=0.20408101154886704,y=0.43495561327109344 a=wye,b=eks,i=4372,x=0.3106731927957148,y=0.8646328772903458 a=zee,b=pan,i=4373,x=0.39321439524831203,y=0.2914282319820135 a=zee,b=hat,i=4374,x=0.683824883019394,y=0.585513739811086 a=hat,b=hat,i=4375,x=0.9928427533843932,y=0.4919698293838758 a=eks,b=zee,i=4376,x=0.8528651690503563,y=0.6839515405337084 a=wye,b=zee,i=4377,x=0.6209381983202935,y=0.37443140551688425 a=hat,b=eks,i=4378,x=0.05864089512370707,y=0.3851321842794584 a=hat,b=eks,i=4379,x=0.385346641589309,y=0.49130997093061135 a=wye,b=eks,i=4380,x=0.41688102647846714,y=0.4373087113569425 a=wye,b=zee,i=4381,x=0.7486814244189324,y=0.45486094891390894 a=wye,b=zee,i=4382,x=0.6423172315048185,y=0.43668923283070715 a=eks,b=eks,i=4383,x=0.8187617783793841,y=0.9557936564036845 a=pan,b=eks,i=4384,x=0.5100350554093268,y=0.8092077539642156 a=hat,b=pan,i=4385,x=0.47426099560303103,y=0.6325566666019241 a=pan,b=wye,i=4386,x=0.03535725248176258,y=0.21559585940453474 a=eks,b=zee,i=4387,x=0.5578706674280356,y=0.5892456559407706 a=zee,b=hat,i=4388,x=0.3301766575217969,y=0.3233192495545678 a=hat,b=wye,i=4389,x=0.17144446980658334,y=0.17462284811463846 a=wye,b=wye,i=4390,x=0.7204182651096341,y=0.09552085794825671 a=zee,b=hat,i=4391,x=0.4346285785864693,y=0.9698660828641514 a=wye,b=eks,i=4392,x=0.08391983953449689,y=0.4685350106442322 a=pan,b=zee,i=4393,x=0.4995072530912873,y=0.7435874077135464 a=eks,b=hat,i=4394,x=0.6446893978656929,y=0.742983523935812 a=hat,b=eks,i=4395,x=0.05068057954766625,y=0.32284857142742274 a=zee,b=wye,i=4396,x=0.031143786348458158,y=0.4250465603658179 a=pan,b=zee,i=4397,x=0.47789346509127195,y=0.35190784679302956 a=eks,b=zee,i=4398,x=0.18676354095379522,y=0.8523337248259436 a=pan,b=zee,i=4399,x=0.4023182691161423,y=0.9889383169990947 a=wye,b=hat,i=4400,x=0.06936764963814968,y=0.3043996463710237 a=hat,b=hat,i=4401,x=0.1471442142546867,y=0.9419015090081274 a=zee,b=zee,i=4402,x=0.05608507131691576,y=0.3577189025004591 a=zee,b=zee,i=4403,x=0.6778157751992904,y=0.3796072620376758 a=eks,b=wye,i=4404,x=0.20538620731982282,y=0.20907310428515913 a=pan,b=hat,i=4405,x=0.770037239607531,y=0.8918149402479805 a=zee,b=hat,i=4406,x=0.5633321574207005,y=0.23765572260844736 a=pan,b=hat,i=4407,x=0.5936012356219856,y=0.9640723007408432 a=hat,b=hat,i=4408,x=0.10549405386012722,y=0.5508069885788562 a=eks,b=zee,i=4409,x=0.42871073222230527,y=0.7803087556052989 a=pan,b=pan,i=4410,x=0.2570515021562684,y=0.18774521042902936 a=pan,b=wye,i=4411,x=0.06223387369679134,y=0.9162029404566593 a=wye,b=wye,i=4412,x=0.7213015230538632,y=0.6718375213896831 a=zee,b=pan,i=4413,x=0.8367397203622533,y=0.7284961033977948 a=eks,b=eks,i=4414,x=0.6694554317033412,y=0.9879307986798048 a=eks,b=pan,i=4415,x=0.557526011305301,y=0.029599606830183034 a=zee,b=eks,i=4416,x=0.362024615946302,y=0.01598375230508753 a=hat,b=wye,i=4417,x=0.3577525385238439,y=0.8867789429771926 a=pan,b=eks,i=4418,x=0.9353086997459791,y=0.840900748615823 a=pan,b=eks,i=4419,x=0.33299408925849605,y=0.9684574693908093 a=hat,b=hat,i=4420,x=0.9677858495817456,y=0.3852147823991926 a=eks,b=pan,i=4421,x=0.09737990168391619,y=0.8610505154621456 a=wye,b=zee,i=4422,x=0.18372838583640871,y=0.677719382536205 a=zee,b=eks,i=4423,x=0.9639383645238275,y=0.6490468629834018 a=zee,b=eks,i=4424,x=0.7312421688490892,y=0.8667063684553176 a=pan,b=pan,i=4425,x=0.46845749017099236,y=0.11757543510403212 a=zee,b=eks,i=4426,x=0.5623944023007167,y=0.7586419852976186 a=eks,b=hat,i=4427,x=0.9350368655950849,y=0.9337007230580264 a=pan,b=wye,i=4428,x=0.28446652374011305,y=0.9335853004150079 a=zee,b=pan,i=4429,x=0.2435597397475192,y=0.9504689136369295 a=eks,b=eks,i=4430,x=0.18612060795223095,y=0.5312429574676665 a=wye,b=wye,i=4431,x=0.6855292088150996,y=0.5336035912975299 a=hat,b=wye,i=4432,x=0.3714804665656307,y=0.5063602618918502 a=eks,b=pan,i=4433,x=0.24252721996042959,y=0.28456246724868983 a=wye,b=eks,i=4434,x=0.1632748286056276,y=0.6415721193438837 a=zee,b=eks,i=4435,x=0.3774471419632248,y=0.29246801034228276 a=wye,b=eks,i=4436,x=0.21438792699902287,y=0.1153507200959073 a=eks,b=wye,i=4437,x=0.47860288810882523,y=0.25957684880561227 a=pan,b=hat,i=4438,x=0.35637893830039535,y=0.566432274547929 a=wye,b=hat,i=4439,x=0.8059627789626932,y=0.9269765317602825 a=eks,b=wye,i=4440,x=0.5734217911203672,y=0.11837434570151262 a=hat,b=wye,i=4441,x=0.9694639452414799,y=0.4236734467526825 a=wye,b=eks,i=4442,x=0.5598645482568733,y=0.8346150307672233 a=pan,b=hat,i=4443,x=0.7863543856807507,y=0.44923205034018343 a=zee,b=pan,i=4444,x=0.06405328319447168,y=0.853068557145527 a=hat,b=wye,i=4445,x=0.16426131233686758,y=0.9176538861190784 a=hat,b=zee,i=4446,x=0.701715405648832,y=0.8559468613900958 a=hat,b=pan,i=4447,x=0.13582612436147878,y=0.497058893619451 a=hat,b=wye,i=4448,x=0.6624067185928518,y=0.7937707954447804 a=zee,b=zee,i=4449,x=0.6191704067390206,y=0.43116585741152647 a=pan,b=hat,i=4450,x=0.48601459169792693,y=0.9674848773976846 a=pan,b=zee,i=4451,x=0.9254868696106908,y=0.9850750432504393 a=hat,b=eks,i=4452,x=0.4276425759791995,y=0.9805685474387745 a=pan,b=wye,i=4453,x=0.9879231882058336,y=0.05532023052523416 a=wye,b=zee,i=4454,x=0.9975176429595021,y=0.3219020340649893 a=zee,b=wye,i=4455,x=0.9045463102006963,y=0.848434465758308 a=zee,b=hat,i=4456,x=0.08456763094566144,y=0.010673585995051305 a=pan,b=hat,i=4457,x=0.0033725690276290576,y=0.9788940035931831 a=hat,b=wye,i=4458,x=0.20520432149483148,y=0.5343150390458646 a=wye,b=wye,i=4459,x=0.5647236635302233,y=0.3680663878959515 a=pan,b=zee,i=4460,x=0.1592478815974211,y=0.4117697078037489 a=pan,b=pan,i=4461,x=0.62386217954306,y=0.32217051912035644 a=zee,b=zee,i=4462,x=0.18223498064407118,y=0.36892881666552835 a=eks,b=wye,i=4463,x=0.6602307362128103,y=0.824908201375127 a=eks,b=eks,i=4464,x=0.4730857339400537,y=0.9000760203605631 a=zee,b=wye,i=4465,x=0.9363792956174969,y=0.8531230483001019 a=eks,b=zee,i=4466,x=0.8051994741838333,y=0.5378817334878282 a=wye,b=eks,i=4467,x=0.30400985135251946,y=0.7987746479150503 a=pan,b=hat,i=4468,x=0.6433621739438674,y=0.6213575464612451 a=eks,b=hat,i=4469,x=0.9576601311217493,y=0.653626721264175 a=eks,b=eks,i=4470,x=0.98941560149702,y=0.36720018654175823 a=wye,b=wye,i=4471,x=0.01614755296128778,y=0.6311179470884701 a=wye,b=hat,i=4472,x=0.36611005710206224,y=0.8033266539816868 a=hat,b=eks,i=4473,x=0.37497169859420076,y=0.979993946243979 a=hat,b=wye,i=4474,x=0.9049733829008388,y=0.2530406481106403 a=eks,b=eks,i=4475,x=0.7604785827914787,y=0.0635000262397527 a=hat,b=zee,i=4476,x=0.09254183760409695,y=0.9759835344600776 a=eks,b=hat,i=4477,x=0.09002534954722263,y=0.0791900913528687 a=zee,b=wye,i=4478,x=0.7347401014901926,y=0.5874553765719767 a=zee,b=eks,i=4479,x=0.18927674591359955,y=0.9166186983358086 a=eks,b=zee,i=4480,x=0.06846268410645817,y=0.17937317736357228 a=zee,b=pan,i=4481,x=0.9513688420096763,y=0.23610642422264838 a=eks,b=zee,i=4482,x=0.5207774812238394,y=0.7322116837434511 a=zee,b=wye,i=4483,x=0.6011563904137914,y=0.6359195042320677 a=pan,b=pan,i=4484,x=0.5657005920846724,y=0.18970181926871021 a=hat,b=eks,i=4485,x=0.14129738926071922,y=0.09762322511903287 a=wye,b=wye,i=4486,x=0.587567750076066,y=0.6669838072984797 a=eks,b=wye,i=4487,x=0.5516672019589355,y=0.7655831718008789 a=hat,b=wye,i=4488,x=0.7926043240629409,y=0.5015162896194846 a=wye,b=wye,i=4489,x=0.6948771123324418,y=0.5976836677553925 a=hat,b=hat,i=4490,x=0.9101749423682922,y=0.9101168870690818 a=pan,b=wye,i=4491,x=0.5070024474601975,y=0.7305420057451063 a=hat,b=eks,i=4492,x=0.1759423893989127,y=0.3959141841599947 a=eks,b=pan,i=4493,x=0.6837930443900314,y=0.6284806971996789 a=pan,b=eks,i=4494,x=0.01334023940553175,y=0.8984813314174203 a=wye,b=hat,i=4495,x=0.4602646789703714,y=0.12318800994516399 a=wye,b=pan,i=4496,x=0.7594514407425375,y=0.6656599679572212 a=zee,b=pan,i=4497,x=0.0776140160787101,y=0.02352743433085669 a=wye,b=zee,i=4498,x=0.02184839096132485,y=0.3911325637076585 a=wye,b=pan,i=4499,x=0.8747947010040115,y=0.9998479502810276 a=pan,b=zee,i=4500,x=0.47622133460809657,y=0.12656764784587515 a=zee,b=pan,i=4501,x=0.9880755588957435,y=0.780394078164109 a=wye,b=pan,i=4502,x=0.5872223616487092,y=0.24413711463218768 a=pan,b=wye,i=4503,x=0.3169372633496723,y=0.6300856859908801 a=hat,b=eks,i=4504,x=0.7328180759655728,y=0.8128425968959323 a=pan,b=hat,i=4505,x=0.4952953134840421,y=0.7414385634621263 a=hat,b=wye,i=4506,x=0.6481956843803017,y=0.6728352515966057 a=wye,b=zee,i=4507,x=0.5592247301828953,y=0.38151239977141804 a=zee,b=eks,i=4508,x=0.6599555713404097,y=0.05617030765448339 a=pan,b=pan,i=4509,x=0.728902215552813,y=0.27293683220270937 a=hat,b=wye,i=4510,x=0.3413847510209549,y=0.9446873420872602 a=wye,b=hat,i=4511,x=0.9311713164896562,y=0.5805780192421368 a=hat,b=eks,i=4512,x=0.23786081178866836,y=0.36277905022985646 a=hat,b=wye,i=4513,x=0.965484537526872,y=0.940488169982859 a=wye,b=zee,i=4514,x=0.6337020189425001,y=0.24780419902689788 a=eks,b=zee,i=4515,x=0.5658257878312276,y=0.07673202860335637 a=pan,b=pan,i=4516,x=0.3492462945952187,y=0.2946268275283319 a=pan,b=eks,i=4517,x=0.3809006676495632,y=0.9025992620313033 a=hat,b=eks,i=4518,x=0.44713434909121097,y=0.16699429132092636 a=hat,b=eks,i=4519,x=0.04008702328986802,y=0.6174480537157027 a=wye,b=eks,i=4520,x=0.21810500990652393,y=0.23695212300002177 a=wye,b=eks,i=4521,x=0.8007710094864122,y=0.4612346253522104 a=hat,b=eks,i=4522,x=0.6458119971443835,y=0.21584168033920748 a=wye,b=zee,i=4523,x=0.05279712720226515,y=0.027511378098411865 a=zee,b=hat,i=4524,x=0.1957893855808428,y=0.2551266540561208 a=zee,b=pan,i=4525,x=0.011543703995189447,y=0.22663954461488478 a=pan,b=pan,i=4526,x=0.04880772479373874,y=0.07481795594892848 a=pan,b=hat,i=4527,x=0.31836250428860824,y=0.32626988649341593 a=pan,b=eks,i=4528,x=0.31647815243381505,y=0.9543304719705902 a=eks,b=eks,i=4529,x=0.6724206236624584,y=0.407679006701397 a=wye,b=hat,i=4530,x=0.01951408829488066,y=0.8016601846958178 a=eks,b=zee,i=4531,x=0.34858797365915506,y=0.4282397998858426 a=pan,b=eks,i=4532,x=0.8877015003398467,y=0.7747761049575923 a=zee,b=hat,i=4533,x=0.20311049077197163,y=0.9056538940562936 a=zee,b=eks,i=4534,x=0.042723672522825384,y=0.597559530943149 a=zee,b=hat,i=4535,x=0.46136202746827326,y=0.42271339711114486 a=eks,b=wye,i=4536,x=0.009469467689817823,y=0.5905509650490668 a=hat,b=pan,i=4537,x=0.835149120257535,y=0.33196199258862646 a=wye,b=pan,i=4538,x=0.7691954303113361,y=0.5906545288840418 a=wye,b=eks,i=4539,x=0.666121467152889,y=0.7009152639751882 a=pan,b=pan,i=4540,x=0.8705353878768347,y=0.569382489859167 a=pan,b=hat,i=4541,x=0.4923885483714453,y=0.9049207586310641 a=hat,b=wye,i=4542,x=0.27993688119753957,y=0.7737127207588408 a=zee,b=pan,i=4543,x=0.06684443758496139,y=0.669147012692109 a=wye,b=zee,i=4544,x=0.41011486047935275,y=0.7628128623557089 a=zee,b=pan,i=4545,x=0.6170845342886218,y=0.16351912171251637 a=pan,b=wye,i=4546,x=0.30897074727172746,y=0.07486636973164118 a=eks,b=eks,i=4547,x=0.03524990401153394,y=0.904683107161618 a=hat,b=zee,i=4548,x=0.6838256979656141,y=0.9575551645763191 a=wye,b=eks,i=4549,x=0.9129619062625066,y=0.7815822557674902 a=wye,b=zee,i=4550,x=0.4016549692069845,y=0.724711080886896 a=zee,b=zee,i=4551,x=0.5217798806787498,y=0.060225688816844425 a=hat,b=hat,i=4552,x=0.38397767907558444,y=0.6583775510562486 a=pan,b=zee,i=4553,x=0.8167689053817359,y=0.28922410230760154 a=wye,b=wye,i=4554,x=0.9638574684692321,y=0.29330354945805037 a=zee,b=zee,i=4555,x=0.5750699152551632,y=0.06554938093659102 a=wye,b=eks,i=4556,x=0.43879872159435107,y=0.5781692813513072 a=wye,b=pan,i=4557,x=0.43671727561555884,y=0.8495155027864089 a=zee,b=hat,i=4558,x=0.030771073498329193,y=0.22547664086558517 a=pan,b=zee,i=4559,x=0.8853445527158975,y=0.9598699991813698 a=pan,b=pan,i=4560,x=0.022873859395381335,y=0.16717654342761945 a=zee,b=hat,i=4561,x=0.9373515354219202,y=0.2891538081093269 a=wye,b=wye,i=4562,x=0.9962200957849251,y=0.7504411563669804 a=hat,b=eks,i=4563,x=0.05502367054609869,y=0.6444826263272572 a=zee,b=wye,i=4564,x=0.7531892953023888,y=0.662798570253206 a=pan,b=wye,i=4565,x=0.2693404460591514,y=0.8267302541357341 a=wye,b=pan,i=4566,x=0.8263810161941457,y=0.049441142990266584 a=wye,b=eks,i=4567,x=0.0013320296153030986,y=0.3527351039106079 a=pan,b=pan,i=4568,x=0.7262006271124115,y=0.2750926075667838 a=pan,b=hat,i=4569,x=0.6676401567199843,y=0.15611308180709593 a=hat,b=pan,i=4570,x=0.5538202729746985,y=0.4068149726511291 a=pan,b=eks,i=4571,x=0.968095869026238,y=0.025471172108070594 a=eks,b=hat,i=4572,x=0.4698777463924877,y=0.5590684721569192 a=pan,b=pan,i=4573,x=0.8739437627285006,y=0.29509284815603065 a=pan,b=pan,i=4574,x=0.8828597588783772,y=0.0029763172734756926 a=zee,b=zee,i=4575,x=0.4923232521663191,y=0.31138573511811585 a=pan,b=eks,i=4576,x=0.4634084033597302,y=0.7040687106187243 a=pan,b=hat,i=4577,x=0.4415962788129276,y=0.8575497231199157 a=pan,b=hat,i=4578,x=0.6072792806625152,y=0.45767228806970406 a=hat,b=hat,i=4579,x=0.7716061175886524,y=0.5940949446227113 a=wye,b=zee,i=4580,x=0.8815091817106934,y=0.19682219276482926 a=zee,b=pan,i=4581,x=0.6615122130690573,y=0.743282484093763 a=hat,b=zee,i=4582,x=0.7466772782921713,y=0.6024593387871963 a=zee,b=zee,i=4583,x=0.7293308998803242,y=0.9194675588274827 a=pan,b=wye,i=4584,x=0.9785223653345103,y=0.3599874182922952 a=wye,b=wye,i=4585,x=0.49005088405256925,y=0.19667802308060156 a=zee,b=eks,i=4586,x=0.07759080031155674,y=0.5800418301347179 a=wye,b=pan,i=4587,x=0.028648375277809612,y=0.7340705243928477 a=hat,b=zee,i=4588,x=0.15982614073843593,y=0.29678575429874954 a=wye,b=zee,i=4589,x=0.7660330001010108,y=0.12214362772060794 a=hat,b=zee,i=4590,x=0.5798093869980113,y=0.10378695075036093 a=zee,b=wye,i=4591,x=0.3549198162177106,y=0.15971238689401845 a=zee,b=zee,i=4592,x=0.3725968594942376,y=0.10170369746035934 a=wye,b=eks,i=4593,x=0.7856019829313924,y=0.4108035864939361 a=pan,b=eks,i=4594,x=0.9636076558747869,y=0.6429412934414747 a=eks,b=zee,i=4595,x=0.6544038361180394,y=0.4941333402391265 a=pan,b=eks,i=4596,x=0.6771264909006598,y=0.008696187477938766 a=pan,b=zee,i=4597,x=0.5913051026982411,y=0.41009568634323257 a=zee,b=hat,i=4598,x=0.8546218618730578,y=0.4453962412371504 a=pan,b=hat,i=4599,x=0.31929533389085374,y=0.9456168170774322 a=wye,b=wye,i=4600,x=0.9581114071286606,y=0.07673690685162327 a=eks,b=eks,i=4601,x=0.17142456675630824,y=0.428244260538891 a=pan,b=wye,i=4602,x=0.9706134171920786,y=0.2394012508489064 a=pan,b=pan,i=4603,x=0.7077416345290591,y=0.3940789509138629 a=wye,b=eks,i=4604,x=0.26884887570750515,y=0.0629227877462456 a=wye,b=hat,i=4605,x=0.9967036371872702,y=0.9394080649718911 a=wye,b=zee,i=4606,x=0.4136967828620527,y=0.9691879757554137 a=wye,b=eks,i=4607,x=0.7882253618539071,y=0.040484731408140906 a=wye,b=hat,i=4608,x=0.8502136933818653,y=0.22282199291281735 a=hat,b=hat,i=4609,x=0.3806800313299039,y=0.7432483423888808 a=eks,b=hat,i=4610,x=0.8546204254968556,y=0.544666096374198 a=wye,b=zee,i=4611,x=0.9797738948452778,y=0.7539379828966757 a=zee,b=zee,i=4612,x=0.5658890329943034,y=0.3209865549677199 a=eks,b=eks,i=4613,x=0.036974707048940014,y=0.13498566781731325 a=pan,b=zee,i=4614,x=0.4962373115799128,y=0.34690328340466625 a=hat,b=eks,i=4615,x=0.03988943828313485,y=0.5198278894510299 a=zee,b=wye,i=4616,x=0.3113084465595777,y=0.5849628571688789 a=pan,b=wye,i=4617,x=0.6064318491662761,y=0.9709587074540149 a=eks,b=eks,i=4618,x=0.6067298140262544,y=0.6856518510847851 a=hat,b=eks,i=4619,x=0.5013319604077514,y=0.09625820792492479 a=eks,b=eks,i=4620,x=0.9081698767653911,y=0.09914145966043864 a=zee,b=eks,i=4621,x=0.30992740946284036,y=0.3114230762548156 a=wye,b=wye,i=4622,x=0.9124025251398724,y=0.9456164182783081 a=hat,b=pan,i=4623,x=0.8700806062428935,y=0.2702206397600061 a=wye,b=pan,i=4624,x=0.5833679710036083,y=0.9019285736689665 a=zee,b=pan,i=4625,x=0.8458203200231942,y=0.5450580672631699 a=pan,b=pan,i=4626,x=0.8541837089895298,y=0.10662879193504415 a=pan,b=pan,i=4627,x=0.6949946108264341,y=0.32599427511471524 a=pan,b=hat,i=4628,x=0.8957043450158336,y=0.5673889892957554 a=wye,b=hat,i=4629,x=0.8464282723870642,y=0.5202135613238874 a=wye,b=hat,i=4630,x=0.613215207985136,y=0.3257127644270309 a=zee,b=hat,i=4631,x=0.9018507034320511,y=0.7039556507979018 a=pan,b=pan,i=4632,x=0.4889756359426054,y=0.3597265690523318 a=hat,b=eks,i=4633,x=0.9578525826572483,y=0.14404380765797786 a=pan,b=zee,i=4634,x=0.3044854324264554,y=0.7688031286868651 a=eks,b=wye,i=4635,x=0.6963926992471413,y=0.3473111484128578 a=zee,b=wye,i=4636,x=0.7694758941220707,y=0.18753300419759023 a=eks,b=zee,i=4637,x=0.016930162668300386,y=0.916668923894452 a=pan,b=eks,i=4638,x=0.1800152730244199,y=0.8740912343460313 a=eks,b=eks,i=4639,x=0.36139046295982613,y=0.40696722185592216 a=wye,b=wye,i=4640,x=0.03629701172915789,y=0.5927800218745649 a=eks,b=wye,i=4641,x=0.8718989050597648,y=0.39307440967351814 a=zee,b=hat,i=4642,x=0.3250137468458404,y=0.6558363341062954 a=zee,b=hat,i=4643,x=0.4795723404826593,y=0.46439187383822056 a=zee,b=hat,i=4644,x=0.5269030281828351,y=0.5294159733959858 a=wye,b=zee,i=4645,x=0.09245439495290197,y=0.7686039676164822 a=pan,b=hat,i=4646,x=0.831713886231876,y=0.2677496071207002 a=eks,b=zee,i=4647,x=0.42422452591610793,y=0.2126460780549554 a=eks,b=hat,i=4648,x=0.5207613338836535,y=0.48593533079307305 a=hat,b=wye,i=4649,x=0.23701829308813094,y=0.8653571299757888 a=wye,b=pan,i=4650,x=0.20994504688794036,y=0.6907804524857445 a=eks,b=zee,i=4651,x=0.2453117436615031,y=0.6150127076085181 a=zee,b=zee,i=4652,x=0.042537661080377376,y=0.8584990883333112 a=hat,b=pan,i=4653,x=0.21286942433921574,y=0.8764916061320036 a=pan,b=hat,i=4654,x=0.5285099685069632,y=0.5178008352128922 a=hat,b=eks,i=4655,x=0.26641282472179073,y=0.5266452477752575 a=eks,b=pan,i=4656,x=0.6818528635056993,y=0.337950728316578 a=hat,b=wye,i=4657,x=0.14061995895280166,y=0.47199609775073736 a=zee,b=zee,i=4658,x=0.6602472108733521,y=0.2687315624525114 a=wye,b=zee,i=4659,x=0.2520902351101554,y=0.8428783239555871 a=hat,b=eks,i=4660,x=0.30472363074700515,y=0.07217266625982621 a=hat,b=wye,i=4661,x=0.2091333254634984,y=0.1548046270754979 a=eks,b=pan,i=4662,x=0.11981801924487756,y=0.8469445222208282 a=hat,b=hat,i=4663,x=0.3119827522367612,y=0.4259694252127655 a=eks,b=hat,i=4664,x=0.3269411701545405,y=0.9376670988013223 a=pan,b=zee,i=4665,x=0.054344923432058434,y=0.16217922759144587 a=wye,b=zee,i=4666,x=0.4186702128599753,y=0.2835839275998192 a=wye,b=zee,i=4667,x=0.0646217379660351,y=0.30530257092910784 a=zee,b=eks,i=4668,x=0.07870649960682297,y=0.2515794150323323 a=hat,b=hat,i=4669,x=0.5003476787456538,y=0.6310918883710445 a=pan,b=hat,i=4670,x=0.6275111165777365,y=0.8054897414350336 a=pan,b=pan,i=4671,x=0.1499838451712301,y=0.6223414752307141 a=hat,b=wye,i=4672,x=0.4988884658239877,y=0.9906049192655605 a=zee,b=eks,i=4673,x=0.984318771878163,y=0.7280796955832692 a=zee,b=wye,i=4674,x=0.23054557107461504,y=0.19681174789488143 a=wye,b=eks,i=4675,x=0.7334463313910938,y=0.28306119200330626 a=eks,b=pan,i=4676,x=0.1423438599979604,y=0.35330918689671975 a=wye,b=wye,i=4677,x=0.6577383987571024,y=0.15021996734596066 a=hat,b=zee,i=4678,x=0.9082274952383252,y=0.7405877302837555 a=eks,b=pan,i=4679,x=0.8074215267431348,y=0.5236668774007812 a=wye,b=hat,i=4680,x=0.5108382071350746,y=0.47151957178400083 a=hat,b=wye,i=4681,x=0.9809419297944051,y=0.23507029745163854 a=eks,b=hat,i=4682,x=0.9342926038131985,y=0.7979695752949024 a=eks,b=hat,i=4683,x=0.8736202694364024,y=0.38219743850966714 a=zee,b=pan,i=4684,x=0.44163999038860213,y=0.38504226387550344 a=pan,b=zee,i=4685,x=0.03027055342778162,y=0.08035681468258382 a=zee,b=wye,i=4686,x=0.08118893501639246,y=0.27655291599781473 a=wye,b=hat,i=4687,x=0.06385275336646346,y=0.35108434035108427 a=pan,b=hat,i=4688,x=0.5644746928123485,y=0.35881287919613414 a=wye,b=hat,i=4689,x=0.8811472299764586,y=0.603532565127673 a=hat,b=wye,i=4690,x=0.2892596087785041,y=0.7179425188945073 a=eks,b=wye,i=4691,x=0.4661213596465832,y=0.6018977897376697 a=eks,b=wye,i=4692,x=0.6256084558730343,y=0.5912072106343357 a=eks,b=wye,i=4693,x=0.43739401507823317,y=0.4449591712634142 a=hat,b=pan,i=4694,x=0.22337135846397238,y=0.6406931174403291 a=pan,b=wye,i=4695,x=0.39634806245632836,y=0.6355835294701532 a=eks,b=hat,i=4696,x=0.008662277886696601,y=0.3721538653338412 a=eks,b=zee,i=4697,x=0.7171113231602343,y=0.7425350749221431 a=zee,b=zee,i=4698,x=0.9050833916740578,y=0.46132560825719815 a=eks,b=pan,i=4699,x=0.3986676727991927,y=0.5705940358286782 a=pan,b=hat,i=4700,x=0.9055844258025669,y=0.7437707529087395 a=pan,b=zee,i=4701,x=0.8070216695328106,y=0.4694866303836862 a=zee,b=zee,i=4702,x=0.7415668922687337,y=0.8797752247285192 a=eks,b=wye,i=4703,x=0.7722596990678992,y=0.7367517235830364 a=wye,b=pan,i=4704,x=0.9555278566799899,y=0.2423309359426713 a=pan,b=eks,i=4705,x=0.9264663466646326,y=0.18799757892955882 a=eks,b=hat,i=4706,x=0.6995046411916459,y=0.9587840493554082 a=hat,b=wye,i=4707,x=0.7945060726118334,y=0.8708814355187628 a=eks,b=hat,i=4708,x=0.1778567317636336,y=0.4554107042944405 a=eks,b=hat,i=4709,x=0.8605269620945222,y=0.9282320361391482 a=zee,b=pan,i=4710,x=0.7925893623491367,y=0.8373876174093722 a=eks,b=pan,i=4711,x=0.6921652120265591,y=0.49820807295967395 a=eks,b=hat,i=4712,x=0.8183219512899657,y=0.4748837712114852 a=hat,b=zee,i=4713,x=0.3394230162235836,y=0.4370239027445896 a=hat,b=hat,i=4714,x=0.8405345514548883,y=0.8644132717621533 a=wye,b=zee,i=4715,x=0.8120809467339879,y=0.44574425551887853 a=hat,b=pan,i=4716,x=0.012844309530080089,y=0.25779486121957473 a=hat,b=eks,i=4717,x=0.7365074627250664,y=0.9439422879543493 a=pan,b=pan,i=4718,x=0.23929472797530638,y=0.15699808756834377 a=wye,b=hat,i=4719,x=0.9471866108884663,y=0.03869282767938487 a=pan,b=wye,i=4720,x=0.8444868689691774,y=0.46503509886894867 a=wye,b=eks,i=4721,x=0.9347768806843397,y=0.8839032510290749 a=wye,b=wye,i=4722,x=0.3742418961489814,y=0.5186714928696796 a=pan,b=wye,i=4723,x=0.7424435191645153,y=0.2988557048069972 a=wye,b=eks,i=4724,x=0.2784537107571192,y=0.9729902650787269 a=hat,b=wye,i=4725,x=0.07061996836486473,y=0.7738977079370831 a=zee,b=wye,i=4726,x=0.8269425781542478,y=0.7279915540846144 a=wye,b=pan,i=4727,x=0.9998228522652893,y=0.19388380502268276 a=eks,b=pan,i=4728,x=0.0933124028124549,y=0.6002309994378867 a=pan,b=zee,i=4729,x=0.18970289783165384,y=0.4228791314162068 a=zee,b=hat,i=4730,x=0.19347150884164055,y=0.37509711156847003 a=eks,b=zee,i=4731,x=0.8015159150372596,y=0.006137056655737272 a=zee,b=wye,i=4732,x=0.9567066838864685,y=0.6222637241828745 a=pan,b=eks,i=4733,x=0.2972122648067026,y=0.8561276270460755 a=hat,b=eks,i=4734,x=0.4361140296691789,y=0.19415398432919728 a=eks,b=zee,i=4735,x=0.028008275847919872,y=0.12986606641246612 a=eks,b=pan,i=4736,x=0.3770691592676825,y=0.7987276999117943 a=eks,b=hat,i=4737,x=0.6487232074787501,y=0.3406218786292676 a=pan,b=pan,i=4738,x=0.10422609081686773,y=0.7198350875588949 a=zee,b=pan,i=4739,x=0.7741427673583083,y=0.26198990214937334 a=hat,b=wye,i=4740,x=0.1119893643732226,y=0.41788347372200485 a=hat,b=eks,i=4741,x=0.7241531241241961,y=0.9089044568897544 a=hat,b=wye,i=4742,x=0.8802453504639547,y=0.7366398321703834 a=eks,b=pan,i=4743,x=0.2504490581104497,y=0.29547558676954633 a=hat,b=wye,i=4744,x=0.4979148854618458,y=0.11700636396309227 a=wye,b=zee,i=4745,x=0.9393988198376061,y=0.485008216753421 a=eks,b=pan,i=4746,x=0.16989991264520043,y=0.018451772273192057 a=pan,b=wye,i=4747,x=0.6742534054657287,y=0.2313198886390252 a=zee,b=pan,i=4748,x=0.7418671304073968,y=0.8575401492075233 a=wye,b=zee,i=4749,x=0.42654335022770995,y=0.5311170879512087 a=zee,b=zee,i=4750,x=0.27987943738440046,y=0.6560072393556038 a=hat,b=pan,i=4751,x=0.5858041848273323,y=0.6295306564064627 a=zee,b=eks,i=4752,x=0.4429063010177615,y=0.6964425867324696 a=zee,b=wye,i=4753,x=0.8545851137163856,y=0.9679476038287586 a=zee,b=wye,i=4754,x=0.0024174510881032063,y=0.8687606547332845 a=eks,b=hat,i=4755,x=0.7839088793029254,y=0.524722394465856 a=pan,b=pan,i=4756,x=0.397023046047854,y=0.11000986851499284 a=wye,b=eks,i=4757,x=0.21991834430842194,y=0.3045979240462181 a=hat,b=hat,i=4758,x=0.3227532114958719,y=0.8948973181698502 a=pan,b=wye,i=4759,x=0.26645602877267305,y=0.7437714335312278 a=zee,b=wye,i=4760,x=0.022667005941863883,y=0.45092868070487113 a=zee,b=zee,i=4761,x=0.5717912178641216,y=0.35870172894832364 a=zee,b=hat,i=4762,x=0.9059466160415109,y=0.6087785388744085 a=zee,b=pan,i=4763,x=0.9251602172892174,y=0.40701572328742064 a=zee,b=wye,i=4764,x=0.31384490226563877,y=0.7399150124011242 a=zee,b=zee,i=4765,x=0.9455569776929973,y=0.8604499298561917 a=zee,b=eks,i=4766,x=0.37773136340995606,y=0.25694678545170857 a=eks,b=eks,i=4767,x=0.7219583517207702,y=0.727638969023518 a=zee,b=pan,i=4768,x=0.08069188699987828,y=0.976850177257017 a=zee,b=wye,i=4769,x=0.9897615767481157,y=0.6975316151559802 a=eks,b=hat,i=4770,x=0.23499057343433494,y=0.47659932458800036 a=wye,b=hat,i=4771,x=0.1844047653981028,y=0.022663675164210306 a=zee,b=wye,i=4772,x=0.09271907588361772,y=0.13142402431280997 a=eks,b=eks,i=4773,x=0.4725220407504178,y=0.9526498802931831 a=hat,b=pan,i=4774,x=0.3043981591451792,y=0.7226259220082152 a=eks,b=eks,i=4775,x=0.1884342557611145,y=0.8408029444627654 a=hat,b=hat,i=4776,x=0.2338057751520678,y=0.09800686529861335 a=wye,b=eks,i=4777,x=0.7891590901274228,y=0.34487105920096073 a=zee,b=pan,i=4778,x=0.3599347922656181,y=0.18218338698595427 a=hat,b=hat,i=4779,x=0.5478941318063015,y=0.039942288716842134 a=eks,b=pan,i=4780,x=0.5515560102138437,y=0.9790752715442088 a=pan,b=zee,i=4781,x=0.9530344417320495,y=0.5854254757860599 a=zee,b=eks,i=4782,x=0.2679740964392081,y=0.9539737990088547 a=zee,b=hat,i=4783,x=0.8937130637825316,y=0.9482001237924185 a=eks,b=zee,i=4784,x=0.535394341606814,y=0.9507496372757723 a=hat,b=pan,i=4785,x=0.6905839897107999,y=0.7545488329990303 a=hat,b=wye,i=4786,x=0.01916979841839017,y=0.2780999914884037 a=hat,b=zee,i=4787,x=0.9707632375104736,y=0.823966840635361 a=zee,b=eks,i=4788,x=0.2900344019459282,y=0.4551744845405584 a=eks,b=zee,i=4789,x=0.581964402755552,y=0.6562137540702333 a=eks,b=wye,i=4790,x=0.5159650104250221,y=0.6583847382580487 a=pan,b=pan,i=4791,x=0.4314747391635376,y=0.11719605119566623 a=eks,b=pan,i=4792,x=0.25200941717038683,y=0.5319239571062138 a=pan,b=wye,i=4793,x=0.8596672453072937,y=0.7203822316562272 a=zee,b=pan,i=4794,x=0.41119242720559135,y=0.16288056185655064 a=eks,b=hat,i=4795,x=0.3563187687683087,y=0.9628268767119371 a=hat,b=hat,i=4796,x=0.8166219529056433,y=0.38174138297770366 a=hat,b=wye,i=4797,x=0.6239839123252174,y=0.5446595433698003 a=pan,b=wye,i=4798,x=0.5914484609361321,y=0.5863799669381212 a=zee,b=eks,i=4799,x=0.05246384333604992,y=0.7084334011458191 a=hat,b=wye,i=4800,x=0.7975814555638998,y=0.6742547886299404 a=eks,b=zee,i=4801,x=0.32122401484315466,y=0.17580532480506172 a=hat,b=pan,i=4802,x=0.9532078757744794,y=0.11431895466047837 a=eks,b=eks,i=4803,x=0.07646493070387805,y=0.43572994178375957 a=pan,b=hat,i=4804,x=0.7521042104003381,y=0.40785444565501394 a=hat,b=pan,i=4805,x=0.2078967635625505,y=0.39646961279273085 a=wye,b=wye,i=4806,x=0.2900119081724013,y=0.7387990125329715 a=zee,b=wye,i=4807,x=0.5734922188510542,y=0.9110138243945486 a=wye,b=wye,i=4808,x=0.5888053656056721,y=0.6357658487621642 a=hat,b=wye,i=4809,x=0.9209565722669064,y=0.6387306072748612 a=eks,b=hat,i=4810,x=0.5922647221870971,y=0.8442189902394986 a=wye,b=zee,i=4811,x=0.03606766464192224,y=0.6770940604237418 a=wye,b=wye,i=4812,x=0.6090893281675697,y=0.647518662887554 a=eks,b=hat,i=4813,x=0.5365520827981886,y=0.3202367220791762 a=eks,b=eks,i=4814,x=0.1473763964352245,y=0.8033805314306441 a=zee,b=eks,i=4815,x=0.23445194234627598,y=0.26893786383591456 a=eks,b=wye,i=4816,x=0.1147712927157829,y=0.7402057160513233 a=zee,b=zee,i=4817,x=0.23202362739606153,y=0.47886038007736564 a=wye,b=wye,i=4818,x=0.7928418369663099,y=0.46501269022958036 a=eks,b=zee,i=4819,x=0.712974515799127,y=0.542449640039289 a=zee,b=wye,i=4820,x=0.3079653233324052,y=0.6574173411380181 a=eks,b=pan,i=4821,x=0.09797648760110378,y=0.1605809921671595 a=eks,b=pan,i=4822,x=0.7899521961417237,y=0.29314917908691485 a=wye,b=hat,i=4823,x=0.581757236497391,y=0.9463973717007303 a=hat,b=hat,i=4824,x=0.40413977500334364,y=0.08865258409882204 a=wye,b=hat,i=4825,x=0.7001704003542419,y=0.7416812627335253 a=zee,b=wye,i=4826,x=0.8846834351985541,y=0.9987381458494847 a=wye,b=zee,i=4827,x=0.9763864041558291,y=0.6651833167661081 a=eks,b=pan,i=4828,x=0.3701118364091578,y=0.929356390393571 a=wye,b=hat,i=4829,x=0.5458229710063858,y=0.12382895782525949 a=zee,b=hat,i=4830,x=0.5163276995322134,y=0.4142396117545545 a=pan,b=pan,i=4831,x=0.6131916476098028,y=0.7258426490475796 a=pan,b=pan,i=4832,x=0.6315103295350951,y=0.5044543655861339 a=eks,b=zee,i=4833,x=0.9679369605057206,y=0.011684326982985715 a=zee,b=wye,i=4834,x=0.34898673117720225,y=0.6580602623791368 a=eks,b=wye,i=4835,x=0.4939841533621645,y=0.5809417229170144 a=wye,b=pan,i=4836,x=0.569545208750187,y=0.7786619129324108 a=zee,b=wye,i=4837,x=0.5226423611496498,y=0.9996700213544367 a=eks,b=hat,i=4838,x=0.935982420664342,y=0.8799965660826473 a=wye,b=wye,i=4839,x=0.6500461572660748,y=0.44309281124092303 a=hat,b=zee,i=4840,x=0.4899151526577582,y=0.7548638962729715 a=pan,b=wye,i=4841,x=0.9467012654543959,y=0.4850494160239309 a=zee,b=pan,i=4842,x=0.30320721599497247,y=0.5095143023332701 a=hat,b=hat,i=4843,x=0.17685636300959084,y=0.7787222148601067 a=wye,b=zee,i=4844,x=0.626255827932442,y=0.4064381262515122 a=pan,b=zee,i=4845,x=0.28060256724829724,y=0.1194472053493133 a=hat,b=wye,i=4846,x=0.8368724870819061,y=0.28659871919539215 a=hat,b=wye,i=4847,x=0.4904015837947624,y=0.7008487005892795 a=pan,b=pan,i=4848,x=0.67625412710794,y=0.44913802116649393 a=eks,b=zee,i=4849,x=0.8081214809760484,y=0.4375026041190979 a=eks,b=eks,i=4850,x=0.2525590429487127,y=0.36945113778662786 a=hat,b=eks,i=4851,x=0.5131509545709081,y=0.583688721156048 a=zee,b=eks,i=4852,x=0.014141655432134415,y=0.5189268194067536 a=wye,b=eks,i=4853,x=0.8412950512846047,y=0.25597362111669464 a=eks,b=wye,i=4854,x=0.12400039159204757,y=0.5713605164804926 a=wye,b=eks,i=4855,x=0.8743253482906079,y=0.7740900498864154 a=eks,b=zee,i=4856,x=0.9765509957513644,y=0.06071911475075953 a=pan,b=wye,i=4857,x=0.23806525172795734,y=0.2959143584631805 a=pan,b=pan,i=4858,x=0.9189791410736298,y=0.7770463990190287 a=pan,b=zee,i=4859,x=0.8322629927658091,y=0.34582111363584955 a=zee,b=eks,i=4860,x=0.3338609486281813,y=0.3484284682131591 a=zee,b=hat,i=4861,x=0.13328569444496707,y=0.4177841139240035 a=zee,b=eks,i=4862,x=0.48622017397025397,y=0.07896067004609653 a=zee,b=wye,i=4863,x=0.6240325596862799,y=0.2809015820805495 a=wye,b=pan,i=4864,x=0.29934656970455364,y=0.401161898451611 a=wye,b=hat,i=4865,x=0.33964644206576833,y=0.37831409639409463 a=pan,b=hat,i=4866,x=0.3348192796730043,y=0.39422602502766824 a=hat,b=zee,i=4867,x=0.8800967275591628,y=0.869121595376977 a=pan,b=eks,i=4868,x=0.08813504131014349,y=0.8615201735498272 a=hat,b=hat,i=4869,x=0.03137488493693985,y=0.6013253974236795 a=zee,b=zee,i=4870,x=0.5723345813434529,y=0.5920424414132134 a=wye,b=hat,i=4871,x=0.42866884650575776,y=0.8587406078406857 a=wye,b=pan,i=4872,x=0.8048299563371534,y=0.09309848925430309 a=wye,b=hat,i=4873,x=0.48343329104464405,y=0.684262350564715 a=eks,b=pan,i=4874,x=0.9190574216192423,y=0.023243819371963403 a=pan,b=zee,i=4875,x=0.6013577540137748,y=0.636284103659697 a=hat,b=eks,i=4876,x=0.876674932281404,y=0.09417500045463179 a=wye,b=hat,i=4877,x=0.3699653574585806,y=0.4481319838637625 a=eks,b=zee,i=4878,x=0.8140883903787601,y=0.9675148391636573 a=eks,b=eks,i=4879,x=0.8227355186912324,y=0.754836723664535 a=hat,b=wye,i=4880,x=0.5107655326943182,y=0.429814017179746 a=wye,b=wye,i=4881,x=0.8494740781256328,y=0.4865120606762955 a=eks,b=wye,i=4882,x=0.5564517747676477,y=0.8364351449356273 a=pan,b=hat,i=4883,x=0.8723128492154898,y=0.44043984808323666 a=pan,b=hat,i=4884,x=0.9402178619522376,y=0.19405443014027346 a=eks,b=eks,i=4885,x=0.8707313650863101,y=0.8057609437403466 a=zee,b=hat,i=4886,x=0.7016030425978176,y=0.10558873487974474 a=hat,b=zee,i=4887,x=0.19592751855539559,y=0.6245017403424943 a=wye,b=pan,i=4888,x=0.24417888243946928,y=0.4591742086366801 a=eks,b=wye,i=4889,x=0.9179229941131368,y=0.2037862299046369 a=eks,b=wye,i=4890,x=0.04910880060108913,y=0.07316217290218352 a=hat,b=eks,i=4891,x=0.2297927732533699,y=0.6559737139197993 a=eks,b=wye,i=4892,x=0.630140714403855,y=0.4123205327848799 a=eks,b=zee,i=4893,x=0.8863621874744464,y=0.35341030613050206 a=wye,b=eks,i=4894,x=0.08956997835221292,y=0.15153433659257443 a=wye,b=eks,i=4895,x=0.2302595629324965,y=0.2862207000255006 a=eks,b=eks,i=4896,x=0.595542985856601,y=0.6247689899970194 a=zee,b=eks,i=4897,x=0.7608028013428353,y=0.878174748817996 a=pan,b=wye,i=4898,x=0.40450598472844423,y=0.9381773198691041 a=eks,b=zee,i=4899,x=0.1567102404262226,y=0.2213311716892986 a=hat,b=hat,i=4900,x=0.8901137791212611,y=0.6090349204378238 a=eks,b=hat,i=4901,x=0.4107962861135135,y=0.6382257944674624 a=zee,b=pan,i=4902,x=0.699059960351012,y=0.9885800960251768 a=zee,b=pan,i=4903,x=0.8266877732317284,y=0.0677848179065984 a=hat,b=wye,i=4904,x=0.30857036671389493,y=0.21668637382948186 a=hat,b=pan,i=4905,x=0.6411579594900462,y=0.5351923498013205 a=eks,b=pan,i=4906,x=0.6854190139070013,y=0.8299360694533708 a=pan,b=hat,i=4907,x=0.5936171298524064,y=0.7041056598923683 a=hat,b=eks,i=4908,x=0.8503470988840566,y=0.6331693431984986 a=zee,b=eks,i=4909,x=0.9517994594813314,y=0.07539953012409928 a=zee,b=eks,i=4910,x=0.4535445737616459,y=0.8218048881320029 a=pan,b=wye,i=4911,x=0.4369913287175713,y=0.4720871164245992 a=eks,b=hat,i=4912,x=0.9940947899133816,y=0.4687982909569981 a=zee,b=wye,i=4913,x=0.7975684270658338,y=0.6973895935548693 a=zee,b=hat,i=4914,x=0.8248078318753365,y=0.24648082781434477 a=pan,b=hat,i=4915,x=0.5972128798923884,y=0.02932462768715416 a=zee,b=wye,i=4916,x=0.6624686517748942,y=0.8016741542650369 a=pan,b=pan,i=4917,x=0.24891816767946373,y=0.7798969646202224 a=zee,b=zee,i=4918,x=0.641375026211945,y=0.8347424300045329 a=wye,b=eks,i=4919,x=0.22099244372718618,y=0.4659468290849962 a=eks,b=zee,i=4920,x=0.7311583488804345,y=0.07752342335337659 a=hat,b=hat,i=4921,x=0.5785465847836638,y=0.6908978810578349 a=pan,b=pan,i=4922,x=0.7647463305911298,y=0.28073564029507714 a=pan,b=pan,i=4923,x=0.7385181536058433,y=0.361414367741285 a=hat,b=pan,i=4924,x=0.40224441655955634,y=0.19530268026233755 a=hat,b=hat,i=4925,x=0.653842164262253,y=0.6280602144296272 a=eks,b=hat,i=4926,x=0.5370983012158481,y=0.8265755341115193 a=pan,b=hat,i=4927,x=0.20003498013779974,y=0.33067633213900816 a=hat,b=eks,i=4928,x=0.2616862784842936,y=0.8976330171178399 a=zee,b=wye,i=4929,x=0.6597792701685063,y=0.5747306201637469 a=wye,b=zee,i=4930,x=0.7005469670714589,y=0.8590565664901815 a=eks,b=wye,i=4931,x=0.056783946256193096,y=0.13845635335075446 a=zee,b=hat,i=4932,x=0.17914823686110226,y=0.3724424181901871 a=wye,b=eks,i=4933,x=0.35047905702830917,y=0.03585739880658767 a=wye,b=hat,i=4934,x=0.5052702257066015,y=0.26639197043310225 a=hat,b=pan,i=4935,x=0.7192181204742805,y=0.3595231416956127 a=pan,b=pan,i=4936,x=0.2268254080621852,y=0.4964858179117778 a=zee,b=wye,i=4937,x=0.6231176411317095,y=0.25674942672821843 a=pan,b=wye,i=4938,x=0.8307759374051367,y=0.19772109525743065 a=pan,b=pan,i=4939,x=0.9918663359881192,y=0.3908108219044335 a=eks,b=wye,i=4940,x=0.3939161722668897,y=0.9425714270572593 a=pan,b=wye,i=4941,x=0.684790210390548,y=0.9744745064587994 a=eks,b=zee,i=4942,x=0.7765052392233155,y=0.12663912158745527 a=pan,b=pan,i=4943,x=0.27521613107535237,y=0.035785181333226945 a=zee,b=pan,i=4944,x=0.5842395564913692,y=0.011897528078530284 a=hat,b=pan,i=4945,x=0.28514048743680753,y=0.07363097335604496 a=hat,b=wye,i=4946,x=0.4057436295571034,y=0.571241351522998 a=pan,b=pan,i=4947,x=0.08892185709515954,y=0.824188422644117 a=wye,b=hat,i=4948,x=0.31710176239516497,y=0.2704638711875881 a=hat,b=hat,i=4949,x=0.7395993281771386,y=0.5735970605731027 a=zee,b=wye,i=4950,x=0.9215266366214452,y=0.4500407010606755 a=pan,b=zee,i=4951,x=0.9198627133436097,y=0.2906368510730867 a=zee,b=eks,i=4952,x=0.3969923775629448,y=0.22024693929882533 a=hat,b=eks,i=4953,x=0.5154408810016854,y=0.7038009086382059 a=wye,b=hat,i=4954,x=0.7843273989738635,y=0.3830263696806163 a=wye,b=hat,i=4955,x=0.8340489175824841,y=0.6288838568483295 a=eks,b=zee,i=4956,x=0.7811008985162822,y=0.8018574276178609 a=eks,b=pan,i=4957,x=0.19948892249539518,y=0.6412104115690623 a=hat,b=pan,i=4958,x=0.32954001616237283,y=0.13809011794903436 a=hat,b=wye,i=4959,x=0.3753128948010216,y=0.47542625730960586 a=pan,b=zee,i=4960,x=0.775513146568018,y=0.10589570588100916 a=hat,b=hat,i=4961,x=0.4416884389198312,y=0.9511653213275143 a=zee,b=wye,i=4962,x=0.3532053262185273,y=0.5274524054522398 a=pan,b=hat,i=4963,x=0.7498291735257391,y=0.2463257969663506 a=eks,b=hat,i=4964,x=0.9386114992431355,y=0.39299390498123243 a=zee,b=hat,i=4965,x=0.45139611357151777,y=0.38795035866424066 a=wye,b=pan,i=4966,x=0.07045237248114167,y=0.8099864640689171 a=wye,b=hat,i=4967,x=0.24118009132354112,y=0.1629785769528157 a=hat,b=wye,i=4968,x=0.04728174638088167,y=0.24887900862466006 a=zee,b=zee,i=4969,x=0.04313535474378283,y=0.9961893037121993 a=wye,b=zee,i=4970,x=0.64845292806442,y=0.0783662989719438 a=wye,b=hat,i=4971,x=0.1358347479828308,y=0.5733638726371927 a=zee,b=pan,i=4972,x=0.8445417535581274,y=0.5401648117511082 a=pan,b=wye,i=4973,x=0.8602817547452486,y=0.3630459570585407 a=pan,b=zee,i=4974,x=0.7126917418857502,y=0.45078360189374256 a=hat,b=hat,i=4975,x=0.8793776042522701,y=0.27141043268942633 a=zee,b=zee,i=4976,x=0.05992605295674014,y=0.7074936036971408 a=hat,b=wye,i=4977,x=0.346394513794262,y=0.29350246124167567 a=pan,b=wye,i=4978,x=0.5095513696287198,y=0.6796749104642862 a=wye,b=pan,i=4979,x=0.21965536908012684,y=0.9260144908739824 a=eks,b=wye,i=4980,x=0.7947621013643159,y=0.3813039850148131 a=eks,b=hat,i=4981,x=0.6239763460715818,y=0.5785443365814726 a=wye,b=zee,i=4982,x=0.23421805243604576,y=0.8666355498558119 a=hat,b=pan,i=4983,x=0.8485485930791395,y=0.4491405780816806 a=zee,b=wye,i=4984,x=0.052468448246404065,y=0.7811213755089573 a=wye,b=pan,i=4985,x=0.7439428126731077,y=0.9235490434329954 a=zee,b=zee,i=4986,x=0.8301353367964757,y=0.8649908229299215 a=hat,b=pan,i=4987,x=0.7155127400138539,y=0.725960059877104 a=hat,b=zee,i=4988,x=0.18338886820824507,y=0.8754893547448714 a=eks,b=zee,i=4989,x=0.018601982778751247,y=0.7913367608240889 a=pan,b=zee,i=4990,x=0.6245117285311684,y=0.5893294863439663 a=hat,b=eks,i=4991,x=0.8595121491036393,y=0.03409935768812744 a=pan,b=eks,i=4992,x=0.30073741634815365,y=0.27875382911011104 a=hat,b=zee,i=4993,x=0.5620368555651936,y=0.11559735452435582 a=pan,b=zee,i=4994,x=0.46131994902690476,y=0.9908240648244072 a=eks,b=eks,i=4995,x=0.13302596047508553,y=0.6892154279564321 a=pan,b=pan,i=4996,x=0.13517161511402043,y=0.8982044069226925 a=zee,b=hat,i=4997,x=0.5678552312876715,y=0.135724108125433 a=pan,b=hat,i=4998,x=0.9535726959631937,y=0.8197092073820271 a=hat,b=hat,i=4999,x=0.20718170417583293,y=0.15443490334276233 a=eks,b=eks,i=5000,x=0.5474103987606213,y=0.8639022623566207 a=zee,b=wye,i=5001,x=0.08843009472207297,y=0.14945328753720988 a=wye,b=zee,i=5002,x=0.11843248048480792,y=0.10564749120283823 a=pan,b=pan,i=5003,x=0.4789366550469353,y=0.22717511611934216 a=eks,b=wye,i=5004,x=0.47636937977487326,y=0.2810082791040678 a=pan,b=wye,i=5005,x=0.6626206294858628,y=0.9073394670955045 a=zee,b=hat,i=5006,x=0.19063843659030766,y=0.9540528860502674 a=pan,b=eks,i=5007,x=0.32167311196502024,y=0.9736668589456996 a=wye,b=wye,i=5008,x=0.03995088246162504,y=0.8906248987030765 a=zee,b=eks,i=5009,x=0.03028572303145005,y=0.9955507546832659 a=zee,b=eks,i=5010,x=0.09758243590212268,y=0.9326749078724424 a=wye,b=zee,i=5011,x=0.5166258594604775,y=0.31080741827085223 a=hat,b=zee,i=5012,x=0.10474935534605045,y=0.8820142826206279 a=eks,b=eks,i=5013,x=0.6206929828322025,y=0.31290830603904707 a=eks,b=pan,i=5014,x=0.7386573050111648,y=0.9236218998819093 a=wye,b=wye,i=5015,x=0.2541399902465252,y=0.9389113315138905 a=pan,b=eks,i=5016,x=0.4869636506082311,y=0.9502946331199825 a=zee,b=zee,i=5017,x=0.5038628336682738,y=0.6629947699756096 a=pan,b=hat,i=5018,x=0.888380448419866,y=0.9524601673710467 a=hat,b=pan,i=5019,x=0.33990101411005635,y=0.4348664315239562 a=zee,b=wye,i=5020,x=0.3672167922652847,y=0.3368467808484725 a=wye,b=zee,i=5021,x=0.07663456505244592,y=0.2631577836245168 a=pan,b=hat,i=5022,x=0.060489795371573285,y=0.8285572517841496 a=hat,b=wye,i=5023,x=0.7884614415246883,y=0.7586781551216389 a=pan,b=hat,i=5024,x=0.20846872150137863,y=0.2990773668794384 a=pan,b=eks,i=5025,x=0.588830614588479,y=0.21537813765089953 a=eks,b=eks,i=5026,x=0.12876049793274924,y=0.15585641140542594 a=eks,b=pan,i=5027,x=0.7572211331764787,y=0.2325134648801609 a=eks,b=zee,i=5028,x=0.35386542107386076,y=0.37117012291309726 a=eks,b=zee,i=5029,x=0.6649005742152306,y=0.968640074749029 a=zee,b=zee,i=5030,x=0.5875090511863751,y=0.2797909799076582 a=pan,b=eks,i=5031,x=0.6958326538393494,y=0.8708243653761277 a=eks,b=hat,i=5032,x=0.2945439456101079,y=0.15728143751762003 a=zee,b=pan,i=5033,x=0.974924650628186,y=0.9669570839581866 a=zee,b=zee,i=5034,x=0.9203642855427807,y=0.5206651807226769 a=eks,b=wye,i=5035,x=0.7880820779075502,y=0.7490003085045434 a=pan,b=eks,i=5036,x=0.6669037309103186,y=0.7852898502819553 a=eks,b=hat,i=5037,x=0.3861256788895815,y=0.9849326988419349 a=zee,b=eks,i=5038,x=0.27646436821800646,y=0.966795943629766 a=pan,b=hat,i=5039,x=0.05805817405705915,y=0.9932179958604398 a=zee,b=wye,i=5040,x=0.8804560258917605,y=0.5859741175246163 a=pan,b=wye,i=5041,x=0.8215150463068943,y=0.41746899820589767 a=pan,b=zee,i=5042,x=0.5160594808754981,y=0.34038151643511527 a=zee,b=pan,i=5043,x=0.4729643897380491,y=0.8082796095448785 a=wye,b=eks,i=5044,x=0.944933980409295,y=0.7127158343146003 a=eks,b=pan,i=5045,x=0.10534087226240663,y=0.7542791199133174 a=zee,b=pan,i=5046,x=0.43365029209841155,y=0.7392132819618191 a=eks,b=pan,i=5047,x=0.9240822180479168,y=0.4314552821051867 a=pan,b=zee,i=5048,x=0.7380043154543273,y=0.6241669393170018 a=hat,b=wye,i=5049,x=0.6158161626836199,y=0.23107643291636182 a=zee,b=pan,i=5050,x=0.5149206518156693,y=0.443722826592738 a=zee,b=zee,i=5051,x=0.10806215838843414,y=0.8316091936418926 a=zee,b=eks,i=5052,x=0.13123538643662702,y=0.8993374561672973 a=hat,b=hat,i=5053,x=0.023117725750200657,y=0.033915988824823384 a=zee,b=pan,i=5054,x=0.32314928212370087,y=0.05688167384675946 a=wye,b=wye,i=5055,x=0.3342612127307919,y=0.42233407978529247 a=hat,b=pan,i=5056,x=0.9666322975798146,y=0.17947032558912945 a=wye,b=pan,i=5057,x=0.6923954779265878,y=0.034012875290441835 a=pan,b=hat,i=5058,x=0.3825906955163786,y=0.8103254262396773 a=zee,b=zee,i=5059,x=0.11722281926454714,y=0.4784698788530096 a=pan,b=wye,i=5060,x=0.3993713904293549,y=0.8630955008829282 a=hat,b=hat,i=5061,x=0.8982925202936236,y=0.5153152768869278 a=pan,b=wye,i=5062,x=0.6541733479114709,y=0.14435606729689698 a=hat,b=eks,i=5063,x=0.7404726614057833,y=0.14934213540808206 a=eks,b=hat,i=5064,x=0.11826065449979817,y=0.44361936119890544 a=eks,b=pan,i=5065,x=0.16113803077069544,y=0.1931224993069398 a=pan,b=zee,i=5066,x=0.160970845859988,y=0.3653498317855951 a=wye,b=pan,i=5067,x=0.984014519910755,y=0.1085442049474844 a=zee,b=zee,i=5068,x=0.513447706607767,y=0.9552034872186853 a=zee,b=pan,i=5069,x=0.9699280626129259,y=0.054007659482251835 a=zee,b=zee,i=5070,x=0.3974043085931761,y=0.04564461949638321 a=zee,b=wye,i=5071,x=0.8135506068560597,y=0.9608362809012473 a=hat,b=pan,i=5072,x=0.9182632141669294,y=0.43231306945460934 a=eks,b=wye,i=5073,x=0.6147484385420419,y=0.5363878643299302 a=pan,b=eks,i=5074,x=0.5845946846241253,y=0.6243144568720979 a=pan,b=eks,i=5075,x=0.06225295939318909,y=0.47296164563217147 a=eks,b=eks,i=5076,x=0.7982506064893715,y=0.35691237251141883 a=wye,b=eks,i=5077,x=0.231763398457011,y=0.29533799083169177 a=pan,b=pan,i=5078,x=0.7379292282342623,y=0.32576070412274116 a=eks,b=wye,i=5079,x=0.4620414482111399,y=0.10454449264714505 a=eks,b=pan,i=5080,x=0.4154239126338921,y=0.1558721394610474 a=zee,b=pan,i=5081,x=0.38422127165844955,y=0.6011019199719426 a=zee,b=eks,i=5082,x=0.12455848010524884,y=0.970273373226025 a=wye,b=pan,i=5083,x=0.598195485668647,y=0.7711986200741965 a=eks,b=hat,i=5084,x=0.5007295834146884,y=0.028607275454148873 a=pan,b=eks,i=5085,x=0.6467927352142951,y=0.6809546997794357 a=hat,b=wye,i=5086,x=0.5496362637078044,y=0.2720688549660476 a=zee,b=zee,i=5087,x=0.10493923293046115,y=0.4813239698030355 a=eks,b=eks,i=5088,x=0.8414465852290272,y=0.22833809125034366 a=eks,b=wye,i=5089,x=0.27190062244408597,y=0.8657800314514896 a=pan,b=pan,i=5090,x=0.6064110590077285,y=0.36771074250450764 a=zee,b=eks,i=5091,x=0.6465716391447923,y=0.23897122778060764 a=eks,b=pan,i=5092,x=0.14584747968792888,y=0.19250348835022613 a=hat,b=wye,i=5093,x=0.06193876102851703,y=0.7031996658938712 a=eks,b=hat,i=5094,x=0.490742515210689,y=0.8308001526807453 a=pan,b=zee,i=5095,x=0.12743414057293911,y=0.3674063708637675 a=zee,b=pan,i=5096,x=0.5190322323030374,y=0.3578341596299308 a=eks,b=wye,i=5097,x=0.33724586909672605,y=0.2808209264792111 a=zee,b=pan,i=5098,x=0.5191394718493332,y=0.6948029406893036 a=pan,b=eks,i=5099,x=0.4686142873190169,y=0.47194949482921567 a=wye,b=pan,i=5100,x=0.5289724539988195,y=0.45192202668859927 a=eks,b=hat,i=5101,x=0.05611052621758694,y=0.14551172850676686 a=hat,b=hat,i=5102,x=0.28592095486470515,y=0.5702639619125038 a=hat,b=eks,i=5103,x=0.45909975903968236,y=0.8370518995297732 a=zee,b=hat,i=5104,x=0.12383004586365431,y=0.25661110382216856 a=zee,b=wye,i=5105,x=0.5972154159415002,y=0.03575292723673351 a=pan,b=wye,i=5106,x=0.44560649854859324,y=0.44398213053605406 a=pan,b=eks,i=5107,x=0.2991869218909077,y=0.4855377015585889 a=pan,b=zee,i=5108,x=0.8696312098499749,y=0.9234420344814674 a=eks,b=pan,i=5109,x=0.6347308371468083,y=0.1326692680255398 a=eks,b=wye,i=5110,x=0.055715443104116136,y=0.4615507678180293 a=wye,b=hat,i=5111,x=0.14260896559625547,y=0.2842155054761949 a=eks,b=hat,i=5112,x=0.868450337333343,y=0.8706206691563101 a=zee,b=wye,i=5113,x=0.8961064659188982,y=0.1944648523597512 a=wye,b=eks,i=5114,x=0.44892526756143925,y=0.5497795546938405 a=wye,b=pan,i=5115,x=0.4740055676174042,y=0.7911350546389597 a=pan,b=hat,i=5116,x=0.8762799268435709,y=0.9446805166366606 a=wye,b=zee,i=5117,x=0.7818146150023622,y=0.3854558191994354 a=wye,b=pan,i=5118,x=0.49177947702902347,y=0.7423017808370791 a=wye,b=pan,i=5119,x=0.4794067150556538,y=0.07923269424861734 a=wye,b=wye,i=5120,x=0.7036317641291522,y=0.25076154186882316 a=pan,b=pan,i=5121,x=0.8862196092737421,y=0.0033279610366836465 a=pan,b=wye,i=5122,x=0.3687043552254645,y=0.8549560734268002 a=zee,b=pan,i=5123,x=0.6515686983034052,y=0.5100953103470156 a=hat,b=zee,i=5124,x=0.8484226442959659,y=0.3697927989244223 a=zee,b=zee,i=5125,x=0.4116570693381614,y=0.8943311044914664 a=eks,b=wye,i=5126,x=0.9547804139837082,y=0.47195131805052704 a=eks,b=pan,i=5127,x=0.011993047445383431,y=0.7287085495775942 a=wye,b=zee,i=5128,x=0.07513405469493029,y=0.9154830290251537 a=zee,b=zee,i=5129,x=0.12609531649583638,y=0.44052343410884454 a=hat,b=wye,i=5130,x=0.7684246903338762,y=0.23751976841777223 a=hat,b=hat,i=5131,x=0.8922493612645849,y=0.2882212197666263 a=zee,b=pan,i=5132,x=0.33080234532260044,y=0.3096178521788119 a=hat,b=wye,i=5133,x=0.3942617617355668,y=0.8686679943940434 a=zee,b=wye,i=5134,x=0.2827895360020647,y=0.2448957006369109 a=pan,b=hat,i=5135,x=0.09957083263754218,y=0.5980806620300303 a=wye,b=eks,i=5136,x=0.4056324583379335,y=0.08334576336977417 a=hat,b=eks,i=5137,x=0.878238719282208,y=0.6491135241981707 a=wye,b=hat,i=5138,x=0.06783170016557316,y=0.4197736525433723 a=zee,b=hat,i=5139,x=0.301521500457932,y=0.7493817768168342 a=hat,b=pan,i=5140,x=0.3051559696668491,y=0.06338171371155699 a=hat,b=pan,i=5141,x=0.24126630734948107,y=0.3415400162111678 a=zee,b=zee,i=5142,x=0.5053797938498257,y=0.6943665465448414 a=pan,b=wye,i=5143,x=0.2455006451228895,y=0.2381483502091848 a=eks,b=zee,i=5144,x=0.048487900564839426,y=0.7986829177323632 a=zee,b=eks,i=5145,x=0.943348462297874,y=0.49699730029153877 a=zee,b=wye,i=5146,x=0.31739948115727923,y=0.6000335929359446 a=pan,b=eks,i=5147,x=0.20821590282748392,y=0.05180957502134165 a=zee,b=wye,i=5148,x=0.6971578309400973,y=0.05130727558151871 a=zee,b=zee,i=5149,x=0.01730237891149944,y=0.7994974955185655 a=hat,b=hat,i=5150,x=0.5204676158996879,y=0.7837983020069176 a=pan,b=wye,i=5151,x=0.46792698874985184,y=0.8655145758102156 a=pan,b=eks,i=5152,x=0.7698104203177931,y=0.26202820594725107 a=eks,b=zee,i=5153,x=0.5599128818778365,y=0.6217154146552438 a=zee,b=zee,i=5154,x=0.9860645516631891,y=0.4316727707502638 a=hat,b=hat,i=5155,x=0.6598214440228759,y=0.3829372068865968 a=eks,b=wye,i=5156,x=0.8891940614044549,y=0.06487886134646581 a=zee,b=pan,i=5157,x=0.7088889371664757,y=0.5291365868969226 a=wye,b=wye,i=5158,x=0.03780907803981348,y=0.01743012834128732 a=wye,b=hat,i=5159,x=0.541375591656728,y=0.19271971067809746 a=zee,b=pan,i=5160,x=0.1291394701733155,y=0.3164888119812437 a=eks,b=zee,i=5161,x=0.7070972450015776,y=0.8576144505983694 a=pan,b=wye,i=5162,x=0.23503083628119015,y=0.3804966968759753 a=pan,b=wye,i=5163,x=0.7745902001026395,y=0.05547251429169031 a=zee,b=eks,i=5164,x=0.817955788881543,y=0.5354324301609987 a=wye,b=wye,i=5165,x=0.8025727679132887,y=0.19141681065547878 a=zee,b=hat,i=5166,x=0.7360375371224098,y=0.29561728150687583 a=zee,b=hat,i=5167,x=0.01949832966304421,y=0.44975230900638874 a=eks,b=hat,i=5168,x=0.7853520653542873,y=0.21913075886744116 a=hat,b=wye,i=5169,x=0.10431463074876668,y=0.9319628819493798 a=wye,b=pan,i=5170,x=0.2834142139187724,y=0.8015795778401339 a=wye,b=wye,i=5171,x=0.8563300778556382,y=0.29021146719669166 a=hat,b=eks,i=5172,x=0.8901432458076336,y=0.5906289428469621 a=eks,b=wye,i=5173,x=0.23209666592661993,y=0.7954117026433107 a=pan,b=wye,i=5174,x=0.7220313992623487,y=0.47674307211032296 a=zee,b=eks,i=5175,x=0.007929525800474901,y=0.7115763725040718 a=pan,b=hat,i=5176,x=0.13951096415676212,y=0.37397816099478665 a=wye,b=pan,i=5177,x=0.32426760784210895,y=0.6275207008763184 a=wye,b=hat,i=5178,x=0.8483367054488846,y=0.3438036340567002 a=pan,b=wye,i=5179,x=0.5722581464790939,y=0.6082504729241017 a=pan,b=wye,i=5180,x=0.4531005566059778,y=0.6317423583403005 a=zee,b=eks,i=5181,x=0.8810030632200981,y=0.38442701936628154 a=pan,b=zee,i=5182,x=0.5458504348562845,y=0.5606252991061377 a=wye,b=hat,i=5183,x=0.7217910708545336,y=0.698686710480415 a=hat,b=eks,i=5184,x=0.5362269296471793,y=0.05511158796442561 a=pan,b=wye,i=5185,x=0.28943459067392874,y=0.9963452393967427 a=eks,b=zee,i=5186,x=0.19471121838287642,y=0.8475932004442778 a=wye,b=eks,i=5187,x=0.27341937394530447,y=0.5835195238055988 a=pan,b=eks,i=5188,x=0.1098179895780228,y=0.691118264458782 a=pan,b=wye,i=5189,x=0.5424445870456038,y=0.47980328960531937 a=pan,b=zee,i=5190,x=0.958030425108842,y=0.9229656805294295 a=pan,b=wye,i=5191,x=0.34032539138935425,y=0.4003903325198842 a=hat,b=pan,i=5192,x=0.3435706571010647,y=0.06283363667654052 a=zee,b=wye,i=5193,x=0.01565153403082964,y=0.559742349020455 a=eks,b=eks,i=5194,x=0.9601222966912384,y=0.7746495793923044 a=pan,b=hat,i=5195,x=0.5165119272913388,y=0.8970096684776827 a=pan,b=hat,i=5196,x=0.5242448227650341,y=0.40727326602398184 a=hat,b=eks,i=5197,x=0.5268012119318143,y=0.9704796636500256 a=pan,b=pan,i=5198,x=0.5788360834761852,y=0.9163631840503775 a=zee,b=pan,i=5199,x=0.863846165540519,y=0.7926861461485262 a=wye,b=zee,i=5200,x=0.9308584180091819,y=0.1060885355033907 a=hat,b=pan,i=5201,x=0.13550559685784802,y=0.23666447032870253 a=hat,b=pan,i=5202,x=0.9333837848637749,y=0.7983610377673229 a=pan,b=zee,i=5203,x=0.8164395473206716,y=0.9295267627751691 a=hat,b=eks,i=5204,x=0.09343575555554806,y=0.30344155652002347 a=zee,b=hat,i=5205,x=0.28240510221521764,y=0.2545255694003048 a=zee,b=pan,i=5206,x=0.3994083205887524,y=0.07213558504539785 a=pan,b=zee,i=5207,x=0.5698284352568362,y=0.5897809603851609 a=zee,b=zee,i=5208,x=0.3216207044318503,y=0.038820482913941357 a=pan,b=wye,i=5209,x=0.8306447997004499,y=0.8384123743007208 a=eks,b=hat,i=5210,x=0.08770207583625389,y=0.7725018412751664 a=wye,b=zee,i=5211,x=0.33912997635684583,y=0.8105461466866878 a=zee,b=hat,i=5212,x=0.7610245335034946,y=0.23104051545907822 a=zee,b=wye,i=5213,x=0.630076553798416,y=0.4732456051973126 a=eks,b=wye,i=5214,x=0.6175594035658841,y=0.9608217208353017 a=hat,b=eks,i=5215,x=0.28256241866196097,y=0.265704893607123 a=hat,b=zee,i=5216,x=0.8249008956837504,y=0.7862378134305688 a=hat,b=pan,i=5217,x=0.4700457200943312,y=0.005846894154671878 a=eks,b=hat,i=5218,x=0.7091734686647354,y=0.9683424620144252 a=eks,b=pan,i=5219,x=0.08321970448060567,y=0.9552244458317039 a=zee,b=zee,i=5220,x=0.7678115603005319,y=0.17456048525769519 a=hat,b=hat,i=5221,x=0.6804959880554192,y=0.5106473873198336 a=hat,b=wye,i=5222,x=0.08046680632449676,y=0.5515390101660408 a=hat,b=zee,i=5223,x=0.28029330967388233,y=0.7219566130837053 a=zee,b=zee,i=5224,x=0.7555723920288009,y=0.3761074889073034 a=pan,b=wye,i=5225,x=0.4049308387224845,y=0.7002764807468328 a=hat,b=wye,i=5226,x=0.7522569018366815,y=0.18119883657776303 a=pan,b=pan,i=5227,x=0.04907194450053376,y=0.24371127321212294 a=eks,b=hat,i=5228,x=0.08589819615072136,y=0.1928776399714467 a=eks,b=hat,i=5229,x=0.5280780018220216,y=0.850193621850258 a=hat,b=pan,i=5230,x=0.3059897834653845,y=0.7239860853683812 a=zee,b=wye,i=5231,x=0.24344354397416768,y=0.9681438520522745 a=pan,b=hat,i=5232,x=0.1881342701340306,y=0.7919638741482248 a=zee,b=hat,i=5233,x=0.7794106496174618,y=0.950428895380262 a=eks,b=wye,i=5234,x=0.1964278841499737,y=0.9230114722930227 a=hat,b=zee,i=5235,x=0.5349332160444686,y=0.7212892273015341 a=zee,b=eks,i=5236,x=0.0096091347524081,y=0.05157241835503623 a=pan,b=wye,i=5237,x=0.29264897203906315,y=0.2708942584778229 a=wye,b=eks,i=5238,x=0.877475809945589,y=0.4753884279556253 a=zee,b=hat,i=5239,x=0.10804287516531197,y=0.25028720143889427 a=pan,b=zee,i=5240,x=0.038521217586762524,y=0.45833782252961597 a=pan,b=hat,i=5241,x=0.6242964208021841,y=0.46876845876825834 a=pan,b=pan,i=5242,x=0.03478916499976592,y=0.8872591850817888 a=eks,b=eks,i=5243,x=0.3532736876730329,y=0.8100993157058493 a=wye,b=eks,i=5244,x=0.4410158520384003,y=0.08878204317661487 a=hat,b=wye,i=5245,x=0.30542326696649835,y=0.03254190401750867 a=wye,b=wye,i=5246,x=0.2619681126430232,y=0.2649618519422796 a=hat,b=eks,i=5247,x=0.45824524247081966,y=0.6844159528310743 a=hat,b=eks,i=5248,x=0.3283595420804768,y=0.8574880365351013 a=hat,b=zee,i=5249,x=0.7484157555119979,y=0.39553557685807894 a=pan,b=pan,i=5250,x=0.7554789617512107,y=0.2317754776472134 a=zee,b=hat,i=5251,x=0.6787637703297714,y=0.8107713369785818 a=wye,b=hat,i=5252,x=0.04799306200946163,y=0.699111788491548 a=pan,b=eks,i=5253,x=0.09939382730538704,y=0.9181166624382701 a=eks,b=hat,i=5254,x=0.3788407507062852,y=0.6050730090302495 a=zee,b=eks,i=5255,x=0.5847457461108924,y=0.8796125841387396 a=hat,b=zee,i=5256,x=0.5958859328721237,y=0.5394313157526304 a=eks,b=zee,i=5257,x=0.6145812801413588,y=0.8667435600565327 a=hat,b=pan,i=5258,x=0.39378429867517395,y=0.66637394577698 a=wye,b=eks,i=5259,x=0.9417378953261469,y=0.4145045232597019 a=hat,b=pan,i=5260,x=0.1040138249574939,y=0.5711578035148099 a=zee,b=wye,i=5261,x=0.2807184907727448,y=0.6881546576599258 a=eks,b=zee,i=5262,x=0.6748387970430342,y=0.9842159808803176 a=zee,b=eks,i=5263,x=0.5854346090243887,y=0.24780046831336067 a=zee,b=zee,i=5264,x=0.6651087221905022,y=0.4694678243278747 a=eks,b=eks,i=5265,x=0.178487009198119,y=0.3389965086336105 a=hat,b=wye,i=5266,x=0.60584735950502,y=0.08711755746003325 a=hat,b=pan,i=5267,x=0.14941018319657196,y=0.42913266234393854 a=wye,b=wye,i=5268,x=0.44618372032109543,y=0.19531077190155655 a=wye,b=pan,i=5269,x=0.8715465668907355,y=0.15578281828771234 a=eks,b=zee,i=5270,x=0.272381988376838,y=0.749508925403637 a=hat,b=zee,i=5271,x=0.8731584572028818,y=0.8587026343639556 a=hat,b=wye,i=5272,x=0.7141686842916973,y=0.2536343098230014 a=hat,b=pan,i=5273,x=0.6161173798530847,y=0.5170002336730243 a=wye,b=wye,i=5274,x=0.9836997370643351,y=0.9073574715868198 a=zee,b=zee,i=5275,x=0.9271419947755198,y=0.7499953605856078 a=eks,b=zee,i=5276,x=0.4436574016008654,y=0.11521473164364193 a=wye,b=zee,i=5277,x=0.41785833930772587,y=0.5581905438338015 a=hat,b=zee,i=5278,x=0.6303081078068822,y=0.9708543000113369 a=eks,b=hat,i=5279,x=0.7724785778741878,y=0.8749355527936072 a=zee,b=pan,i=5280,x=0.019491215186811517,y=0.28573440717823495 a=hat,b=hat,i=5281,x=0.8966308328410811,y=0.8932890927799828 a=zee,b=eks,i=5282,x=0.20474699819177533,y=0.9563609260887708 a=eks,b=hat,i=5283,x=0.8232222331296849,y=0.43288890410832115 a=pan,b=pan,i=5284,x=0.06808879127275447,y=0.2961369332523437 a=hat,b=pan,i=5285,x=0.07045589395497931,y=0.06411882838638927 a=zee,b=pan,i=5286,x=0.5025476621481306,y=0.5455719768538321 a=hat,b=eks,i=5287,x=0.6864003316225611,y=0.08724809130852695 a=eks,b=wye,i=5288,x=0.9345047793469049,y=0.7545355491792637 a=eks,b=zee,i=5289,x=0.09683817897484082,y=0.15042392025928608 a=hat,b=zee,i=5290,x=0.2201144900883092,y=0.09304236894658524 a=pan,b=zee,i=5291,x=0.6437086955209985,y=0.6412853324081308 a=pan,b=pan,i=5292,x=0.7101999657039595,y=0.9654389825167757 a=zee,b=pan,i=5293,x=0.44434019344510023,y=0.3616886405725528 a=hat,b=hat,i=5294,x=0.4986619811254004,y=0.36527690926573364 a=wye,b=zee,i=5295,x=0.6218618299228648,y=0.9324975302931531 a=hat,b=wye,i=5296,x=0.3811141224627541,y=0.9228475537405691 a=eks,b=eks,i=5297,x=0.450776715605552,y=0.31636578533096016 a=pan,b=zee,i=5298,x=0.3086259636689451,y=0.06652636662046696 a=zee,b=wye,i=5299,x=0.4581205277744118,y=0.8883132608926249 a=hat,b=zee,i=5300,x=0.6065263542151584,y=0.8758808605345744 a=eks,b=pan,i=5301,x=0.26907393999080953,y=0.633331389237707 a=pan,b=hat,i=5302,x=0.2662060484446822,y=0.501911240454392 a=wye,b=zee,i=5303,x=0.030537351078086195,y=0.20700838585535786 a=wye,b=hat,i=5304,x=0.4745666526865788,y=0.3396776308478552 a=eks,b=zee,i=5305,x=0.5607499175198385,y=0.21583087167043014 a=eks,b=hat,i=5306,x=0.690451786737028,y=0.0861194392792598 a=pan,b=zee,i=5307,x=0.06684973668910421,y=0.9544628284207586 a=wye,b=zee,i=5308,x=0.7500932442964064,y=0.552958619063383 a=pan,b=zee,i=5309,x=0.2335642300224079,y=0.31164052398797637 a=pan,b=eks,i=5310,x=0.15387236958406036,y=0.43829110359848433 a=wye,b=zee,i=5311,x=0.7866346249384528,y=0.03570506892329006 a=hat,b=wye,i=5312,x=0.5514251601334069,y=0.4379220457409775 a=eks,b=wye,i=5313,x=0.0355425881526662,y=0.16802137840026887 a=eks,b=eks,i=5314,x=0.04767639014474101,y=0.7923199475995649 a=hat,b=pan,i=5315,x=0.22846522556430016,y=0.8271404016977637 a=wye,b=pan,i=5316,x=0.31445904414804127,y=0.235006707754 a=zee,b=wye,i=5317,x=0.4335088190275804,y=0.5671270126055555 a=hat,b=wye,i=5318,x=0.15817916140514576,y=0.6371355203785057 a=zee,b=zee,i=5319,x=0.9627644186331633,y=0.46453264491285806 a=pan,b=pan,i=5320,x=0.9101265684004383,y=0.8101420365566193 a=pan,b=hat,i=5321,x=0.7404633039474602,y=0.9639884498668673 a=zee,b=zee,i=5322,x=0.6420718148305066,y=0.37414212799368096 a=wye,b=hat,i=5323,x=0.4830324590268663,y=0.0404568640233397 a=hat,b=zee,i=5324,x=0.5028487276011456,y=0.020932159991859267 a=zee,b=pan,i=5325,x=0.888291122851125,y=0.5111470794632866 a=wye,b=pan,i=5326,x=0.07272409700902271,y=0.27564484500916986 a=wye,b=pan,i=5327,x=0.0888998337471314,y=0.9919041685553374 a=hat,b=pan,i=5328,x=0.3064216274886523,y=0.4890201595898237 a=pan,b=wye,i=5329,x=0.3470931183432189,y=0.1997795824920121 a=zee,b=zee,i=5330,x=0.13436961326496677,y=0.3095854896519281 a=zee,b=pan,i=5331,x=0.8655317519954471,y=0.8104322805331614 a=eks,b=wye,i=5332,x=0.01695205279543599,y=0.6253163249860758 a=wye,b=wye,i=5333,x=0.41853514055951446,y=0.46414849053819973 a=eks,b=wye,i=5334,x=0.9312528403346797,y=0.34690398003679423 a=hat,b=wye,i=5335,x=0.8146576023607562,y=0.517623963255214 a=wye,b=wye,i=5336,x=0.9644696679607304,y=0.17623585722771673 a=hat,b=wye,i=5337,x=0.0491647681854408,y=0.9084359968915301 a=wye,b=eks,i=5338,x=0.9183687166177615,y=0.6742918022088258 a=eks,b=zee,i=5339,x=0.6913946457851302,y=0.5236074895779744 a=wye,b=wye,i=5340,x=0.7574842345027994,y=0.35438559050849205 a=pan,b=pan,i=5341,x=0.9609080490571219,y=0.764751472995584 a=hat,b=hat,i=5342,x=0.9571224566918112,y=0.6488786174457046 a=eks,b=zee,i=5343,x=0.1297439418853782,y=0.10986446330230937 a=wye,b=pan,i=5344,x=0.2265442713227983,y=0.08671233554174995 a=zee,b=eks,i=5345,x=0.6690807314571691,y=0.5220733222869928 a=wye,b=zee,i=5346,x=0.42279438877482367,y=0.1357326426861194 a=zee,b=eks,i=5347,x=0.566584546381942,y=0.14424580074370563 a=eks,b=hat,i=5348,x=0.9402905188032046,y=0.6899005608656246 a=wye,b=wye,i=5349,x=0.8220699059748584,y=0.08673018838619662 a=eks,b=pan,i=5350,x=0.223912795614429,y=0.8705191204953174 a=pan,b=zee,i=5351,x=0.17054432883772475,y=0.3754155013143816 a=pan,b=hat,i=5352,x=0.577021048756712,y=0.8658764185620885 a=eks,b=zee,i=5353,x=0.6047802080751319,y=0.16748745069598325 a=zee,b=pan,i=5354,x=0.8138458432489908,y=0.887184873534984 a=hat,b=zee,i=5355,x=0.4409314249173867,y=0.16661996267618873 a=zee,b=wye,i=5356,x=0.9294777278187871,y=0.9218221729540071 a=zee,b=zee,i=5357,x=0.7978605597846053,y=0.19629225024825436 a=eks,b=eks,i=5358,x=0.020853766511345406,y=0.9622073813280082 a=pan,b=wye,i=5359,x=0.30351132190401986,y=0.6285435222862336 a=hat,b=eks,i=5360,x=0.20965717538739437,y=0.8407225718631762 a=wye,b=eks,i=5361,x=0.8752567055200561,y=0.9860616183578573 a=zee,b=pan,i=5362,x=0.7742820785303554,y=0.12159579314900681 a=eks,b=pan,i=5363,x=0.045340262727698866,y=0.8347997035721408 a=eks,b=eks,i=5364,x=0.27673456069026947,y=0.28606929907632006 a=hat,b=eks,i=5365,x=0.1389831981773636,y=0.958748587909282 a=hat,b=hat,i=5366,x=0.2805736404470527,y=0.39685097136131187 a=eks,b=hat,i=5367,x=0.506031079714652,y=0.9912645565514333 a=pan,b=zee,i=5368,x=0.6865182575714622,y=0.8704513374052988 a=zee,b=wye,i=5369,x=0.8603176374144329,y=0.3346439571733928 a=pan,b=eks,i=5370,x=0.9070851500395942,y=0.03151443822439248 a=wye,b=zee,i=5371,x=0.26330651984082165,y=0.312969179382553 a=zee,b=zee,i=5372,x=0.5395637542263729,y=0.876693303664991 a=zee,b=hat,i=5373,x=0.34909843746802205,y=0.8568124167530461 a=zee,b=zee,i=5374,x=0.3028178173036057,y=0.7391998484027293 a=hat,b=zee,i=5375,x=0.5150486678896874,y=0.5093614114895396 a=hat,b=zee,i=5376,x=0.26087420592676525,y=0.45387940157532647 a=zee,b=eks,i=5377,x=0.11113050876158048,y=0.019064162496037707 a=zee,b=hat,i=5378,x=0.7356184687449835,y=0.5091161605127379 a=wye,b=wye,i=5379,x=0.09703125778637067,y=0.25691589979049356 a=zee,b=eks,i=5380,x=0.3345104910149367,y=0.1516506429745581 a=eks,b=hat,i=5381,x=0.5792199947921147,y=0.49613092724134833 a=wye,b=eks,i=5382,x=0.6188424819758455,y=0.5722334124286547 a=wye,b=pan,i=5383,x=0.4199976827116998,y=0.6380529017621875 a=eks,b=zee,i=5384,x=0.7599800240198485,y=0.19856983882208867 a=eks,b=hat,i=5385,x=0.06854514347417606,y=0.028515802052052952 a=wye,b=zee,i=5386,x=0.31992003300785,y=0.9257458880403014 a=wye,b=zee,i=5387,x=0.8545498814228611,y=0.06322205211700338 a=eks,b=zee,i=5388,x=0.14459434374592373,y=0.42112443945304057 a=pan,b=zee,i=5389,x=0.11816306719121206,y=0.17831615949339463 a=zee,b=pan,i=5390,x=0.551475598918215,y=0.6565173979014076 a=hat,b=pan,i=5391,x=0.4696624324268569,y=0.9440798879738231 a=pan,b=hat,i=5392,x=0.2906675154826033,y=0.7331663429068216 a=pan,b=hat,i=5393,x=0.2596796215047702,y=0.9407425847640128 a=eks,b=wye,i=5394,x=0.6216628077513283,y=0.9763969655887303 a=zee,b=wye,i=5395,x=0.8476101473277529,y=0.9881007277790081 a=zee,b=zee,i=5396,x=0.8702478883993182,y=0.2813073047318746 a=eks,b=hat,i=5397,x=0.9584988429207648,y=0.16350049486702678 a=wye,b=eks,i=5398,x=0.36458407067281184,y=0.04100408848224302 a=wye,b=wye,i=5399,x=0.733413532545851,y=0.6459898444733033 a=pan,b=wye,i=5400,x=0.9665506125898256,y=0.5448152784578933 a=zee,b=hat,i=5401,x=0.8543887956499512,y=0.7439702074332549 a=pan,b=hat,i=5402,x=0.16703607056661052,y=0.678760520989282 a=pan,b=pan,i=5403,x=0.8295505457000276,y=0.08557288192430035 a=hat,b=eks,i=5404,x=0.24083859157948273,y=0.8456272874080909 a=hat,b=hat,i=5405,x=0.7303478280030506,y=0.08240241730334918 a=hat,b=hat,i=5406,x=0.16072785206888152,y=0.940229803599545 a=eks,b=pan,i=5407,x=0.8649757853523717,y=0.49430262836010985 a=hat,b=hat,i=5408,x=0.5776416796711862,y=0.38502333915273557 a=hat,b=pan,i=5409,x=0.5633298053737792,y=0.7410429711654063 a=eks,b=eks,i=5410,x=0.9778916491011578,y=0.2273478424516322 a=pan,b=eks,i=5411,x=0.7262036914700832,y=0.9187345564266572 a=zee,b=eks,i=5412,x=0.33286294808080064,y=0.3921681976941228 a=wye,b=eks,i=5413,x=0.08772931753470603,y=0.48815297744510433 a=eks,b=pan,i=5414,x=0.44377217382552636,y=0.13437156912545423 a=eks,b=eks,i=5415,x=0.43246842646662487,y=0.9003920363683975 a=eks,b=hat,i=5416,x=0.753762625636042,y=0.6313338577994543 a=pan,b=hat,i=5417,x=0.20986095023321283,y=0.278888203103681 a=zee,b=pan,i=5418,x=0.15332749400308754,y=0.8904428676045328 a=hat,b=eks,i=5419,x=0.46399468430524804,y=0.0717886401624439 a=zee,b=zee,i=5420,x=0.47725202464468663,y=0.9096066884668478 a=wye,b=eks,i=5421,x=0.4608256396986088,y=0.18257443066884294 a=hat,b=zee,i=5422,x=0.9062976974038087,y=0.825705654266679 a=pan,b=eks,i=5423,x=0.829675619825074,y=0.30094578297716856 a=zee,b=pan,i=5424,x=0.2627796756491889,y=0.05131765835402935 a=pan,b=wye,i=5425,x=0.9750271883009257,y=0.10505350281212911 a=wye,b=wye,i=5426,x=0.2694712165014862,y=0.617405875060473 a=hat,b=eks,i=5427,x=0.06062699861257914,y=0.14515726494650738 a=pan,b=wye,i=5428,x=0.9471818920457628,y=0.2665032520198297 a=hat,b=eks,i=5429,x=0.3317119302689199,y=0.45073390665129454 a=pan,b=hat,i=5430,x=0.16613227391144125,y=0.41913253603052736 a=zee,b=eks,i=5431,x=0.5545698300075519,y=0.9624415304532793 a=hat,b=hat,i=5432,x=0.9825886641650767,y=0.4606811454162322 a=hat,b=zee,i=5433,x=0.7849062201991618,y=0.9640442210529644 a=pan,b=wye,i=5434,x=0.027672040238877704,y=0.09364154641355082 a=zee,b=hat,i=5435,x=0.4045108520910917,y=0.36431937644373535 a=hat,b=zee,i=5436,x=0.9496952473063589,y=0.6756301296750051 a=zee,b=hat,i=5437,x=0.5978983969671523,y=0.6276473499153709 a=eks,b=hat,i=5438,x=0.38522029067066954,y=0.9206254386424841 a=eks,b=hat,i=5439,x=0.38811572418657825,y=0.07594870509481821 a=hat,b=pan,i=5440,x=0.3245042501769525,y=0.5860367509842646 a=eks,b=hat,i=5441,x=0.5113055435442414,y=0.9478634662218888 a=hat,b=hat,i=5442,x=0.649952463378999,y=0.40331287808319716 a=zee,b=pan,i=5443,x=0.2660546525494476,y=0.036573786936417774 a=hat,b=wye,i=5444,x=0.2933645151017673,y=0.8565796439445684 a=hat,b=hat,i=5445,x=0.19274932648900556,y=0.6752612195498396 a=zee,b=pan,i=5446,x=0.6843298638997956,y=0.18463787286549893 a=eks,b=zee,i=5447,x=0.4465765938644741,y=0.6465428046837856 a=wye,b=hat,i=5448,x=0.7104951786733581,y=0.007575728589058528 a=hat,b=wye,i=5449,x=0.05598891388977545,y=0.22520895137141883 a=hat,b=zee,i=5450,x=0.6973457907641605,y=0.3767547727152859 a=eks,b=hat,i=5451,x=0.22980925307219058,y=0.09539340024354548 a=pan,b=hat,i=5452,x=0.3157808212188198,y=0.6787208591042566 a=zee,b=zee,i=5453,x=0.08674939853988706,y=0.0016458788929679669 a=pan,b=hat,i=5454,x=0.45512276442779265,y=0.7647008695253613 a=wye,b=hat,i=5455,x=0.9223519005619959,y=0.9896263386831655 a=hat,b=zee,i=5456,x=0.2599314461144381,y=0.8810566831796974 a=wye,b=eks,i=5457,x=0.3716116598539073,y=0.6158074210009791 a=eks,b=zee,i=5458,x=0.04287045703879866,y=0.3387484748791293 a=eks,b=eks,i=5459,x=0.964192450580381,y=0.0021921221413634395 a=zee,b=hat,i=5460,x=0.16317765667465844,y=0.5350462588301713 a=pan,b=pan,i=5461,x=0.6162574043540692,y=0.8321486837007045 a=eks,b=pan,i=5462,x=0.1418039983669439,y=0.6211011915118961 a=zee,b=hat,i=5463,x=0.5986397200652216,y=0.6968533019592756 a=wye,b=eks,i=5464,x=0.8847165179059643,y=0.8396671337239269 a=eks,b=pan,i=5465,x=0.64956961455677,y=0.42814835565709897 a=wye,b=zee,i=5466,x=0.078362139340725,y=0.7041742329715265 a=pan,b=pan,i=5467,x=0.7658242784400351,y=0.6658002824538031 a=zee,b=wye,i=5468,x=0.7694464457122385,y=0.3630968380462761 a=eks,b=wye,i=5469,x=0.5573393787208576,y=0.5674857974105666 a=wye,b=wye,i=5470,x=0.9070377249974354,y=0.2288418409874835 a=hat,b=hat,i=5471,x=0.9390885842014736,y=0.4885661765278554 a=pan,b=hat,i=5472,x=0.15616642541017933,y=0.723291076738834 a=hat,b=pan,i=5473,x=0.8339379553110595,y=0.27272554707575325 a=zee,b=wye,i=5474,x=0.7147670868273149,y=0.5300588513631999 a=hat,b=hat,i=5475,x=0.6079530363728716,y=0.7302013509128558 a=eks,b=hat,i=5476,x=0.20009244252935454,y=0.3819915946964063 a=eks,b=wye,i=5477,x=0.39259835612758154,y=0.30659538127782704 a=hat,b=wye,i=5478,x=0.6770531656328236,y=0.6798247125178067 a=wye,b=hat,i=5479,x=0.8464109156551775,y=0.5746477726666506 a=zee,b=zee,i=5480,x=0.5016540167129663,y=0.8741956310027429 a=wye,b=hat,i=5481,x=0.6695686221456726,y=0.689441485231751 a=zee,b=zee,i=5482,x=0.6069552630891367,y=0.8327367055952278 a=eks,b=eks,i=5483,x=0.7469659158360071,y=0.10223878164983224 a=zee,b=pan,i=5484,x=0.9278433464500453,y=0.1755972033710903 a=zee,b=pan,i=5485,x=0.5724120522769688,y=0.03415735625364058 a=zee,b=wye,i=5486,x=0.3960740290371987,y=0.2157291640948238 a=zee,b=wye,i=5487,x=0.4006137623075525,y=0.915996687470202 a=wye,b=wye,i=5488,x=0.3501090213998701,y=0.1419133192803893 a=eks,b=eks,i=5489,x=0.86861919099865,y=0.25681726556775375 a=wye,b=hat,i=5490,x=0.0114773666847795,y=0.024645492270649272 a=pan,b=eks,i=5491,x=0.37445278083566247,y=0.1319415773692295 a=pan,b=eks,i=5492,x=0.24969695350122256,y=0.7787009090435869 a=hat,b=wye,i=5493,x=0.1382138485389508,y=0.42533800225303686 a=zee,b=pan,i=5494,x=0.8834013775449513,y=0.532739443419528 a=hat,b=pan,i=5495,x=0.06870299529036838,y=0.16955231705247786 a=pan,b=eks,i=5496,x=0.7348263636816107,y=0.8630644835981002 a=pan,b=wye,i=5497,x=0.18130548510310573,y=0.012524267398086986 a=zee,b=wye,i=5498,x=0.07850770050431843,y=0.6592896086014353 a=eks,b=wye,i=5499,x=0.12579070445810636,y=0.027946488029312544 a=zee,b=hat,i=5500,x=0.31461267260641923,y=0.0748646953586749 a=eks,b=pan,i=5501,x=0.6387163017917407,y=0.9935696733123411 a=zee,b=wye,i=5502,x=0.43904419266704897,y=0.4569132922221508 a=eks,b=pan,i=5503,x=0.8033268068277595,y=0.18844163406954773 a=zee,b=eks,i=5504,x=0.9596958577456198,y=0.04773563051124652 a=hat,b=wye,i=5505,x=0.5520964703015074,y=0.48453868182721893 a=wye,b=zee,i=5506,x=0.4087385270797551,y=0.8564815497838665 a=eks,b=pan,i=5507,x=0.21391759502009422,y=0.3447041692322321 a=hat,b=eks,i=5508,x=0.27910653275458874,y=0.5485292937357691 a=hat,b=pan,i=5509,x=0.0989266416174771,y=0.6959930085614316 a=pan,b=hat,i=5510,x=0.4611680765379149,y=0.7214873034272665 a=eks,b=wye,i=5511,x=0.23798712129455957,y=0.7587550612183068 a=eks,b=wye,i=5512,x=0.5807870919230165,y=0.9691165477002429 a=pan,b=pan,i=5513,x=0.12503735272775673,y=0.4355589149955563 a=pan,b=eks,i=5514,x=0.24662547688833314,y=0.3287438663802673 a=zee,b=pan,i=5515,x=0.6313995187707404,y=0.833564271162547 a=hat,b=zee,i=5516,x=0.33305390076062613,y=0.9170789339963947 a=wye,b=eks,i=5517,x=0.8721055830589473,y=0.02704639391207897 a=pan,b=pan,i=5518,x=0.14313525389664383,y=0.7459994619303395 a=eks,b=zee,i=5519,x=0.7813269749608942,y=0.43515581235296563 a=pan,b=pan,i=5520,x=0.12004377059603999,y=0.17842342731389704 a=wye,b=wye,i=5521,x=0.4952080825177475,y=0.16871841358834394 a=zee,b=pan,i=5522,x=0.36872049705368115,y=0.1990766711673171 a=pan,b=wye,i=5523,x=0.742045965934904,y=0.9721895926892108 a=eks,b=zee,i=5524,x=0.8701165441999673,y=0.5339961636745024 a=wye,b=pan,i=5525,x=0.49890360517452514,y=0.024484853806581164 a=pan,b=eks,i=5526,x=0.7026312260362405,y=0.8810518289214107 a=wye,b=eks,i=5527,x=0.7997008739733962,y=0.18410432351101302 a=hat,b=pan,i=5528,x=0.8212044358760883,y=0.11209149520678119 a=pan,b=eks,i=5529,x=0.8511463764647872,y=0.14138132753417088 a=hat,b=eks,i=5530,x=0.5258934621583872,y=0.720463955146462 a=zee,b=eks,i=5531,x=0.35366192891288517,y=0.08693096089863839 a=eks,b=pan,i=5532,x=0.02230190397042897,y=0.6075383296925656 a=hat,b=zee,i=5533,x=0.958788084715825,y=0.20611877870477535 a=pan,b=hat,i=5534,x=0.0019016743345633413,y=0.32222113968267996 a=hat,b=wye,i=5535,x=0.4214775778712955,y=0.22796016352171378 a=hat,b=hat,i=5536,x=0.7965347610723122,y=0.2771962774393667 a=zee,b=eks,i=5537,x=0.5232208554018066,y=0.7842118697965217 a=hat,b=eks,i=5538,x=0.4077121389029271,y=0.11707098355780121 a=wye,b=wye,i=5539,x=0.743441288773323,y=0.6405109845442226 a=hat,b=hat,i=5540,x=0.42899567587485843,y=0.23687426121264998 a=pan,b=zee,i=5541,x=0.8254948808955715,y=0.4991271884600853 a=zee,b=wye,i=5542,x=0.755488383171051,y=0.4137799115139683 a=hat,b=eks,i=5543,x=0.48020817778428815,y=0.9225205496681843 a=zee,b=eks,i=5544,x=0.6602401325197925,y=0.32279850833980206 a=hat,b=wye,i=5545,x=0.858697605273768,y=0.8576653967219389 a=pan,b=eks,i=5546,x=0.6631984443201948,y=0.3727938739078658 a=eks,b=hat,i=5547,x=0.6895459625786122,y=0.22640122479226865 a=eks,b=pan,i=5548,x=0.3627382468806156,y=0.0796990614162374 a=zee,b=eks,i=5549,x=0.7292096702579594,y=0.9691771087568819 a=eks,b=eks,i=5550,x=0.6327683854211364,y=0.6420822760549295 a=zee,b=eks,i=5551,x=0.28298845518306814,y=0.8947425604116854 a=pan,b=hat,i=5552,x=0.5841578438331838,y=0.1596820606396967 a=hat,b=zee,i=5553,x=0.5166466940884901,y=0.5215576515640856 a=pan,b=pan,i=5554,x=0.9579182517583037,y=0.18510227855201322 a=wye,b=zee,i=5555,x=0.8156182188735165,y=0.7385240536968077 a=pan,b=hat,i=5556,x=0.4092542192178087,y=0.8148464821295865 a=wye,b=pan,i=5557,x=0.25358407312884057,y=0.9664484962083387 a=hat,b=pan,i=5558,x=0.768872222650759,y=0.7571069129173444 a=zee,b=hat,i=5559,x=0.02119490837909377,y=0.7608765429541047 a=wye,b=eks,i=5560,x=0.5167434492366938,y=0.2556264017975728 a=zee,b=zee,i=5561,x=0.19901052822038778,y=0.010162787621391778 a=zee,b=zee,i=5562,x=0.010968218584134437,y=0.4064143237134189 a=pan,b=hat,i=5563,x=0.5922101576133584,y=0.4027972800052315 a=eks,b=wye,i=5564,x=0.49763688623866753,y=0.5883123179094881 a=pan,b=wye,i=5565,x=0.7684392835456383,y=0.3749236173392554 a=eks,b=zee,i=5566,x=0.8548967678474122,y=0.570131787889301 a=zee,b=zee,i=5567,x=0.31067383496587675,y=0.6147427008783484 a=eks,b=pan,i=5568,x=0.8429203216611878,y=0.1574744061469351 a=zee,b=hat,i=5569,x=0.08829574118086814,y=0.5348102685441779 a=pan,b=eks,i=5570,x=0.6920854194235941,y=0.6152462479121356 a=pan,b=pan,i=5571,x=0.6728243500766502,y=0.4062647573271557 a=wye,b=zee,i=5572,x=0.7192603411774698,y=0.4187864354572167 a=pan,b=pan,i=5573,x=0.4439499129311816,y=0.452364734358081 a=pan,b=eks,i=5574,x=0.20220091735345957,y=0.7994491452794874 a=wye,b=wye,i=5575,x=0.21178209452449626,y=0.15235066856869428 a=pan,b=hat,i=5576,x=0.2328237068625838,y=0.1466943672149028 a=wye,b=eks,i=5577,x=0.1463637145507638,y=0.27512353058563355 a=eks,b=eks,i=5578,x=0.7678172951406467,y=0.4330114463831388 a=hat,b=wye,i=5579,x=0.7640191949316547,y=0.24039019030979936 a=wye,b=hat,i=5580,x=0.302423176696171,y=0.8421273065109021 a=wye,b=hat,i=5581,x=0.8901857920101928,y=0.29658407519577457 a=wye,b=zee,i=5582,x=0.9976903742848702,y=0.45676971223633933 a=eks,b=hat,i=5583,x=0.9279820319463397,y=0.2328972990196413 a=hat,b=eks,i=5584,x=0.33098984262520037,y=0.558064177488057 a=zee,b=wye,i=5585,x=0.8492581279138114,y=0.3377131419417513 a=wye,b=hat,i=5586,x=0.3843644484125802,y=0.5395570591826665 a=pan,b=wye,i=5587,x=0.2563692488210999,y=0.8648625544244997 a=eks,b=pan,i=5588,x=0.47849756747842254,y=0.36440498978427904 a=zee,b=zee,i=5589,x=0.16028903050640975,y=0.7637743011708871 a=hat,b=eks,i=5590,x=0.3632486395529805,y=0.009397590758849828 a=zee,b=hat,i=5591,x=0.30560662975374475,y=0.7718259824315155 a=pan,b=pan,i=5592,x=0.39375784368183886,y=0.04590683905804471 a=zee,b=wye,i=5593,x=0.6639341156412852,y=0.21782811751505382 a=wye,b=eks,i=5594,x=0.748874819175722,y=0.5391318034694991 a=wye,b=zee,i=5595,x=0.14037849467735208,y=0.17046690443866652 a=zee,b=zee,i=5596,x=0.10182342354198881,y=0.5446008492963108 a=zee,b=pan,i=5597,x=0.6907943477760979,y=0.4189830850027354 a=eks,b=zee,i=5598,x=0.2962037835362923,y=0.36049737941380366 a=wye,b=pan,i=5599,x=0.16480658469175224,y=0.8389670972825451 a=zee,b=pan,i=5600,x=0.6488288447142824,y=0.8870043471299166 a=wye,b=eks,i=5601,x=0.9541704944878237,y=0.06050893170404792 a=hat,b=wye,i=5602,x=0.9634543762478623,y=0.2995192276364238 a=pan,b=eks,i=5603,x=0.713998278452672,y=0.6065522135018214 a=eks,b=pan,i=5604,x=0.9495183550398497,y=0.861843219886308 a=zee,b=wye,i=5605,x=0.9500848655829623,y=0.45916889205740574 a=pan,b=zee,i=5606,x=0.314494599736428,y=0.24386090680148387 a=zee,b=wye,i=5607,x=0.7689855715450897,y=0.11045228604478441 a=pan,b=pan,i=5608,x=0.2591280268253763,y=0.9062746985784103 a=wye,b=eks,i=5609,x=0.038203945200321776,y=0.5754771176043 a=wye,b=pan,i=5610,x=0.3513354907140842,y=0.23568099743397186 a=eks,b=wye,i=5611,x=0.5581667554162788,y=0.533651422581368 a=wye,b=pan,i=5612,x=0.6476139827218337,y=0.1625920960990147 a=hat,b=hat,i=5613,x=0.43541285982294176,y=0.9781241021866268 a=zee,b=hat,i=5614,x=0.07143295094027957,y=0.5146773830335898 a=zee,b=hat,i=5615,x=0.3921043983626502,y=0.12859994269629937 a=hat,b=hat,i=5616,x=0.12215970633938278,y=0.3357015949156391 a=hat,b=pan,i=5617,x=0.1867388485013709,y=0.11120997350204453 a=wye,b=eks,i=5618,x=0.6179065708118318,y=0.03936978657358048 a=pan,b=eks,i=5619,x=0.23990263600951223,y=0.8386791333746637 a=wye,b=zee,i=5620,x=0.8136012361181053,y=0.9246893690807032 a=zee,b=eks,i=5621,x=0.6936065900415402,y=0.9835121994811427 a=wye,b=hat,i=5622,x=0.46042861129071444,y=0.8690567617780255 a=hat,b=hat,i=5623,x=0.7847006863046383,y=0.9540584320255103 a=wye,b=zee,i=5624,x=0.6715918738207972,y=0.9248713771595384 a=hat,b=wye,i=5625,x=0.3458684025425872,y=0.27012900303390197 a=pan,b=eks,i=5626,x=0.5311033870913179,y=0.17537860987554665 a=eks,b=zee,i=5627,x=0.8021710394665355,y=0.8677575901404581 a=zee,b=zee,i=5628,x=0.22133674407714776,y=0.650517614686327 a=eks,b=hat,i=5629,x=0.19299554543178998,y=0.926482748769109 a=hat,b=pan,i=5630,x=0.6751229005765216,y=0.5680107534137527 a=pan,b=hat,i=5631,x=0.6215515202465142,y=0.7335723775728186 a=pan,b=wye,i=5632,x=0.8548923960863601,y=0.22525018696051402 a=zee,b=hat,i=5633,x=0.8768635937091291,y=0.17829195183165314 a=hat,b=zee,i=5634,x=0.6015751224700235,y=0.0644975490073253 a=pan,b=hat,i=5635,x=0.7276807776942956,y=0.8500606585761793 a=wye,b=eks,i=5636,x=0.4833228626835777,y=0.7378551070407615 a=eks,b=pan,i=5637,x=0.19782280979787448,y=0.16113009983532756 a=wye,b=eks,i=5638,x=0.6640345835133702,y=0.6498713803920758 a=hat,b=hat,i=5639,x=0.20821268257622816,y=0.4305417007597995 a=hat,b=hat,i=5640,x=0.5586511327847578,y=0.1326971674398928 a=pan,b=eks,i=5641,x=0.7319972100987417,y=0.719616216404303 a=pan,b=hat,i=5642,x=0.13804409751652513,y=0.9924728363763738 a=zee,b=pan,i=5643,x=0.5223512543043243,y=0.4991596521110977 a=eks,b=wye,i=5644,x=0.3698151588984483,y=0.17106212044489788 a=eks,b=hat,i=5645,x=0.7963153151177051,y=0.8008422439449929 a=pan,b=eks,i=5646,x=0.19219529269095814,y=0.20998226328210212 a=zee,b=wye,i=5647,x=0.3429668212121526,y=0.8081062419069119 a=eks,b=pan,i=5648,x=0.6185038317407525,y=0.13922536086565684 a=pan,b=zee,i=5649,x=0.1882750077103732,y=0.051490445358029824 a=pan,b=wye,i=5650,x=0.28997067788262,y=0.9817716356894414 a=zee,b=pan,i=5651,x=0.7900065659824048,y=0.8799973980821687 a=wye,b=hat,i=5652,x=0.6169368270983073,y=0.10348718268597767 a=zee,b=wye,i=5653,x=0.17648668002767787,y=0.680848224860555 a=pan,b=eks,i=5654,x=0.4277856265977521,y=0.46720306495008457 a=pan,b=wye,i=5655,x=0.6238246026482904,y=0.5005719727517985 a=hat,b=hat,i=5656,x=0.13794992086740376,y=0.8837838569509247 a=pan,b=zee,i=5657,x=0.10798159915883232,y=0.14419721657117324 a=wye,b=zee,i=5658,x=0.6608918667457152,y=0.9243582421976495 a=eks,b=wye,i=5659,x=0.6991477488632273,y=0.757988136039786 a=eks,b=eks,i=5660,x=0.6338110809908714,y=0.8899492379893515 a=pan,b=zee,i=5661,x=0.5036749461847732,y=0.26738310174407787 a=zee,b=hat,i=5662,x=0.8842361839832931,y=0.2166296985577939 a=pan,b=eks,i=5663,x=0.7069322205111267,y=0.3613403478317495 a=zee,b=zee,i=5664,x=0.9028085500044974,y=0.6560744841877679 a=eks,b=pan,i=5665,x=0.42180175898330097,y=0.5602780165419919 a=eks,b=wye,i=5666,x=0.11819158774260774,y=0.3269446466483843 a=hat,b=pan,i=5667,x=0.4124388603109588,y=0.32891147928157505 a=hat,b=hat,i=5668,x=0.28048754020684197,y=0.1586304642802714 a=pan,b=pan,i=5669,x=0.355899451932013,y=0.6719277980511792 a=wye,b=pan,i=5670,x=0.8835631178552948,y=0.030315290308040144 a=pan,b=zee,i=5671,x=0.6000348059150206,y=0.29058998333691977 a=eks,b=pan,i=5672,x=0.15818268756400555,y=0.06017126006059004 a=hat,b=zee,i=5673,x=0.2279653016908878,y=0.9182355806226783 a=eks,b=hat,i=5674,x=0.30002134346912324,y=0.5070589085102488 a=hat,b=eks,i=5675,x=0.6776164025070541,y=0.8270479553259737 a=hat,b=hat,i=5676,x=0.26316020747343927,y=0.4439406464012029 a=hat,b=wye,i=5677,x=0.21137471648135742,y=0.5132924852429177 a=wye,b=eks,i=5678,x=0.6936453571596785,y=0.5977687990521104 a=zee,b=wye,i=5679,x=0.038384056804088296,y=0.39062169520305345 a=wye,b=hat,i=5680,x=0.2396335274387169,y=0.5617745220517328 a=hat,b=pan,i=5681,x=0.754469633162002,y=0.0837659053517874 a=wye,b=wye,i=5682,x=0.13450523706607276,y=0.5466840856340288 a=pan,b=hat,i=5683,x=0.3334514488024498,y=0.8403356176006205 a=pan,b=eks,i=5684,x=0.5990374956703001,y=0.759556440814025 a=eks,b=wye,i=5685,x=0.2272695825818456,y=0.06890003755302965 a=hat,b=wye,i=5686,x=0.0781769662654741,y=0.610149228572904 a=pan,b=eks,i=5687,x=0.20540821693039724,y=0.4583791378818265 a=eks,b=eks,i=5688,x=0.2681427485140152,y=0.4723384743843706 a=wye,b=zee,i=5689,x=0.06033196478297487,y=0.7884610426494236 a=pan,b=pan,i=5690,x=0.15932061131003383,y=0.10750760915363755 a=pan,b=wye,i=5691,x=0.6927406446662911,y=0.9484436166272129 a=hat,b=hat,i=5692,x=0.5189985771163975,y=0.8788751540883317 a=eks,b=eks,i=5693,x=0.2268536055075211,y=0.07181079334560747 a=hat,b=zee,i=5694,x=0.9574100016777235,y=0.17039179071493438 a=zee,b=pan,i=5695,x=0.9393222489267224,y=0.774430899802153 a=zee,b=eks,i=5696,x=0.2640774691558284,y=0.8627504344994997 a=pan,b=eks,i=5697,x=0.0327219679391374,y=0.09248968708796146 a=hat,b=wye,i=5698,x=0.06810484760017288,y=0.6639875840703167 a=zee,b=zee,i=5699,x=0.6656525429975034,y=0.2656212467516811 a=pan,b=zee,i=5700,x=0.28090923774332355,y=0.8374951101696497 a=wye,b=wye,i=5701,x=0.1179627885550506,y=0.9975425331219988 a=eks,b=eks,i=5702,x=0.25289706880351914,y=0.2805563313790924 a=hat,b=pan,i=5703,x=0.72917739071484,y=0.690903665960745 a=zee,b=wye,i=5704,x=0.5782219259637615,y=0.6129742019787713 a=hat,b=zee,i=5705,x=0.04579072787896754,y=0.15799336306835265 a=hat,b=eks,i=5706,x=0.2189964629062231,y=0.6072901175002905 a=zee,b=zee,i=5707,x=0.5807599756368977,y=0.28039036085635494 a=hat,b=hat,i=5708,x=0.5348701164177605,y=0.871699930863178 a=zee,b=pan,i=5709,x=0.6457903828308892,y=0.9224142093441036 a=wye,b=zee,i=5710,x=0.7433946942246273,y=0.7685021078153906 a=wye,b=zee,i=5711,x=0.243617265440373,y=0.9593069077433208 a=hat,b=eks,i=5712,x=0.6655721179929885,y=0.6283331080904476 a=eks,b=eks,i=5713,x=0.5690397938907296,y=0.9770357412029763 a=wye,b=zee,i=5714,x=0.08482160064983257,y=0.03799417629580293 a=eks,b=eks,i=5715,x=0.6755655231911353,y=0.4811405314521109 a=eks,b=hat,i=5716,x=0.21238778822910676,y=0.3806052020082521 a=eks,b=wye,i=5717,x=0.6979537966601973,y=0.42962472621589876 a=zee,b=wye,i=5718,x=0.5593594936211146,y=0.16162369293678702 a=wye,b=pan,i=5719,x=0.5431877225362253,y=0.8355498406808398 a=eks,b=pan,i=5720,x=0.08305185712441976,y=0.051555598682940684 a=zee,b=hat,i=5721,x=0.2195036864656421,y=0.0024237944219759333 a=wye,b=zee,i=5722,x=0.10456345278337953,y=0.509746172766625 a=eks,b=zee,i=5723,x=0.21507165298767472,y=0.3682335327240591 a=hat,b=eks,i=5724,x=0.8143828554234033,y=0.24040241057094147 a=eks,b=eks,i=5725,x=0.9447207896646325,y=0.5966728037991648 a=wye,b=hat,i=5726,x=0.14625361456888575,y=0.5773510905462336 a=wye,b=zee,i=5727,x=0.8249759724947993,y=0.8786053736989866 a=wye,b=pan,i=5728,x=0.2648916398523009,y=0.36807949569468823 a=wye,b=zee,i=5729,x=0.38861160385421634,y=0.008675492900147463 a=eks,b=zee,i=5730,x=0.12149239438427939,y=0.4952581794297195 a=hat,b=wye,i=5731,x=0.9834987933267317,y=0.9382393032643578 a=hat,b=wye,i=5732,x=0.5015349091062511,y=0.6216857441435001 a=eks,b=pan,i=5733,x=0.13872819430672179,y=0.13383706933234074 a=hat,b=pan,i=5734,x=0.5107753291897712,y=0.1890771910893585 a=zee,b=eks,i=5735,x=0.16433787761695273,y=0.9899324406741649 a=pan,b=hat,i=5736,x=0.09547147433477066,y=0.8232711347746213 a=eks,b=eks,i=5737,x=0.9827804718012476,y=0.8380939985179561 a=wye,b=hat,i=5738,x=0.8055154582345196,y=0.6724553306516827 a=hat,b=pan,i=5739,x=0.6476551335592238,y=0.2601855690050563 a=eks,b=wye,i=5740,x=0.06533958654376182,y=0.08290954242914517 a=eks,b=pan,i=5741,x=0.8637268770032811,y=0.5213399189681543 a=hat,b=wye,i=5742,x=0.34236446310071245,y=0.9934982483299798 a=hat,b=eks,i=5743,x=0.5295348501354114,y=0.7258797581771135 a=hat,b=hat,i=5744,x=0.12378910131331311,y=0.40752356675537815 a=eks,b=wye,i=5745,x=0.3665816980119626,y=0.6375063009827584 a=hat,b=hat,i=5746,x=0.3584851213141641,y=0.7358326774690753 a=hat,b=zee,i=5747,x=0.43583700578338747,y=0.672265347255106 a=zee,b=pan,i=5748,x=0.7440532825684012,y=0.9785802799882344 a=zee,b=hat,i=5749,x=0.21090673582102115,y=0.1689004632484875 a=pan,b=pan,i=5750,x=0.8304494332695221,y=0.5545369624062666 a=zee,b=pan,i=5751,x=0.5728551154691659,y=0.6693087997390269 a=eks,b=wye,i=5752,x=0.4413629999732097,y=0.15979822952735956 a=wye,b=eks,i=5753,x=0.7095091807055749,y=0.724643932584749 a=zee,b=wye,i=5754,x=0.7672243199159505,y=0.2279066139221857 a=zee,b=zee,i=5755,x=0.3010837648341733,y=0.025119103758309502 a=pan,b=zee,i=5756,x=0.6193965896501459,y=0.8537626115609437 a=wye,b=hat,i=5757,x=0.1224660035525037,y=0.9089730465198579 a=wye,b=zee,i=5758,x=0.7467869025815791,y=0.7773472293348217 a=eks,b=zee,i=5759,x=0.5808704155987169,y=0.7833615756850842 a=hat,b=eks,i=5760,x=0.9162336115551181,y=0.823024870348188 a=eks,b=pan,i=5761,x=0.8487786036617613,y=0.622984817551366 a=wye,b=pan,i=5762,x=0.40655642829036065,y=0.4636508847184254 a=eks,b=zee,i=5763,x=0.5976566500579671,y=0.43395514824679315 a=zee,b=eks,i=5764,x=0.3648319525198409,y=0.8451336137273936 a=eks,b=hat,i=5765,x=0.18805948712913445,y=0.22065247387702902 a=hat,b=eks,i=5766,x=0.46718203983164364,y=0.5797529176785338 a=wye,b=wye,i=5767,x=0.3576483350283548,y=0.7099943913835636 a=zee,b=wye,i=5768,x=0.3112657659379815,y=0.7236135438320516 a=pan,b=wye,i=5769,x=0.12034641162140858,y=0.7632931531006384 a=wye,b=zee,i=5770,x=0.2844962427329081,y=0.46659983713341124 a=pan,b=hat,i=5771,x=0.8904572608374995,y=0.8849293322073792 a=wye,b=wye,i=5772,x=0.7038981127406301,y=0.494354667366391 a=pan,b=eks,i=5773,x=0.5155930172001615,y=0.9788581972056736 a=zee,b=eks,i=5774,x=0.28797189143581137,y=0.8675122476473998 a=zee,b=pan,i=5775,x=0.03055433366810012,y=0.1704580136613072 a=pan,b=eks,i=5776,x=0.7165945800863369,y=0.6653908462460456 a=pan,b=eks,i=5777,x=0.8730284129862198,y=0.6933278671481614 a=pan,b=zee,i=5778,x=0.18335757641115535,y=0.5465471193000622 a=zee,b=hat,i=5779,x=0.10449109525989031,y=0.09472821919765906 a=zee,b=wye,i=5780,x=0.4996898459570338,y=0.788832071937286 a=hat,b=hat,i=5781,x=0.9223990594381151,y=0.9860563250941797 a=pan,b=pan,i=5782,x=0.21543034149293305,y=0.7487921850342059 a=hat,b=zee,i=5783,x=0.6163250225253557,y=0.7015824283135457 a=zee,b=pan,i=5784,x=0.25355692244085803,y=0.5122385042700014 a=hat,b=wye,i=5785,x=0.40569525676284146,y=0.22909456416866192 a=wye,b=zee,i=5786,x=0.03516048679248873,y=0.8905801671138128 a=wye,b=eks,i=5787,x=0.21927016627884677,y=0.5789606863931362 a=pan,b=eks,i=5788,x=0.02515332637605694,y=0.5642073646656487 a=hat,b=wye,i=5789,x=0.8879926912167789,y=0.288087517987045 a=zee,b=zee,i=5790,x=0.8365237122409817,y=0.3161681746915882 a=pan,b=pan,i=5791,x=0.9821624001072915,y=0.035862016352741 a=hat,b=hat,i=5792,x=0.04225905159882992,y=0.11113794777514896 a=wye,b=hat,i=5793,x=0.7433843634275165,y=0.5164678527321154 a=eks,b=hat,i=5794,x=0.6887872847411916,y=0.485721605301096 a=wye,b=zee,i=5795,x=0.6399305400537463,y=0.5169871749762857 a=pan,b=eks,i=5796,x=0.10739150192981317,y=0.004460524149627276 a=hat,b=hat,i=5797,x=0.5867728931987851,y=0.937578286245456 a=eks,b=hat,i=5798,x=0.3908387810335817,y=0.34330528598151944 a=wye,b=eks,i=5799,x=0.11663940947930529,y=0.2283382768880119 a=hat,b=wye,i=5800,x=0.20766266556079938,y=0.06909200825337258 a=zee,b=eks,i=5801,x=0.019645955696274475,y=0.9094238943256715 a=hat,b=zee,i=5802,x=0.4647837023773008,y=0.30037328314118017 a=wye,b=pan,i=5803,x=0.5646566533554874,y=0.15673400226423917 a=eks,b=hat,i=5804,x=0.29845440226372855,y=0.24711215673748332 a=zee,b=wye,i=5805,x=0.25960541840206386,y=0.22950027817819518 a=wye,b=pan,i=5806,x=0.6653575136807429,y=0.9060998128185732 a=pan,b=wye,i=5807,x=0.18771994519215784,y=0.26225112077131363 a=wye,b=pan,i=5808,x=0.3666840512152372,y=0.15437085935635642 a=zee,b=wye,i=5809,x=0.1494185162017646,y=0.7860811687162453 a=wye,b=hat,i=5810,x=0.11952846412695983,y=0.8522219808940303 a=hat,b=eks,i=5811,x=0.44094875130964795,y=0.7732717099587513 a=eks,b=hat,i=5812,x=0.5559531679203801,y=0.026931495207055067 a=hat,b=zee,i=5813,x=0.5451345812741655,y=0.4792657127863339 a=eks,b=wye,i=5814,x=0.3619763137230263,y=0.3300717677846403 a=eks,b=zee,i=5815,x=0.48687526629526545,y=0.8584389551214576 a=pan,b=eks,i=5816,x=0.9160561949834121,y=0.5246537157918573 a=pan,b=wye,i=5817,x=0.3309523992695672,y=0.8070632628360801 a=pan,b=zee,i=5818,x=0.20345133041566366,y=0.5750982955524265 a=zee,b=eks,i=5819,x=0.07183321376053509,y=0.9726675502317286 a=wye,b=wye,i=5820,x=0.9675205269852082,y=0.8456558793367495 a=hat,b=zee,i=5821,x=0.319976254021178,y=0.8734609010107423 a=eks,b=eks,i=5822,x=0.6616970307501397,y=0.6091232839670194 a=eks,b=pan,i=5823,x=0.5176519151206722,y=0.021797183751670723 a=eks,b=zee,i=5824,x=0.008069601151581285,y=0.4982567352783567 a=pan,b=hat,i=5825,x=0.5827800197345394,y=0.7803525569338927 a=pan,b=pan,i=5826,x=0.2538325082222126,y=0.9476879457255432 a=wye,b=eks,i=5827,x=0.9514763137560248,y=0.20882670554843952 a=wye,b=zee,i=5828,x=0.9320615638508492,y=0.19881625022009897 a=pan,b=hat,i=5829,x=0.9764966414862699,y=0.4156514128952272 a=hat,b=pan,i=5830,x=0.3667779041985445,y=0.705757188907245 a=eks,b=eks,i=5831,x=0.2131869859612514,y=0.051574404230206206 a=hat,b=eks,i=5832,x=0.536815843763481,y=0.9725354850537404 a=eks,b=wye,i=5833,x=0.06151529817648871,y=0.7067840865178908 a=pan,b=hat,i=5834,x=0.40809909826591584,y=0.9348168564556171 a=eks,b=eks,i=5835,x=0.565996045716497,y=0.4508098512548929 a=eks,b=wye,i=5836,x=0.8956966597743651,y=0.8528472084728154 a=eks,b=pan,i=5837,x=0.4574051555265334,y=0.8299651056659689 a=pan,b=wye,i=5838,x=0.40192120844730816,y=0.01299427191690905 a=wye,b=hat,i=5839,x=0.9215400303532923,y=0.45266271324432283 a=pan,b=wye,i=5840,x=0.24154556129725246,y=0.5622236434363397 a=zee,b=wye,i=5841,x=0.1727248222190798,y=0.6210983576320617 a=wye,b=eks,i=5842,x=0.6216373633536472,y=0.9301770846288369 a=eks,b=eks,i=5843,x=0.7492151915521785,y=0.39861528823986403 a=zee,b=pan,i=5844,x=0.760328363920412,y=0.25716006527035284 a=hat,b=eks,i=5845,x=0.43975939611821113,y=0.8916429935358784 a=zee,b=zee,i=5846,x=0.162570991251604,y=0.26519462331398813 a=wye,b=zee,i=5847,x=0.27955183683250895,y=0.593734945819627 a=hat,b=hat,i=5848,x=0.9956327931315808,y=0.8873051757938238 a=hat,b=pan,i=5849,x=0.7302167315792862,y=0.21263835483392501 a=wye,b=pan,i=5850,x=0.9313090088228326,y=0.9743729163851863 a=eks,b=zee,i=5851,x=0.22409910130745192,y=0.13300739204811318 a=hat,b=pan,i=5852,x=0.9764589316784894,y=0.5367076815906018 a=hat,b=hat,i=5853,x=0.9153388125321756,y=0.3586120018450708 a=zee,b=eks,i=5854,x=0.13307347063070984,y=0.35231749332115525 a=eks,b=zee,i=5855,x=0.9817510205071746,y=0.345441110032638 a=hat,b=hat,i=5856,x=0.02372556298430306,y=0.7721928675615208 a=eks,b=hat,i=5857,x=0.5417934009900822,y=0.13544385674063442 a=eks,b=zee,i=5858,x=0.0460418994677978,y=0.5267262848816568 a=eks,b=wye,i=5859,x=0.07297199386640929,y=0.027345228589134907 a=eks,b=eks,i=5860,x=0.9833629242563793,y=0.9992250545586543 a=eks,b=hat,i=5861,x=0.885544518143363,y=0.6319209563437962 a=wye,b=eks,i=5862,x=0.5814001743292831,y=0.2775598540805262 a=eks,b=wye,i=5863,x=0.46034553116676624,y=0.8419263560507274 a=hat,b=pan,i=5864,x=0.8998046024201602,y=0.13280033695524907 a=zee,b=zee,i=5865,x=0.7705835578927107,y=0.47218544336953905 a=wye,b=wye,i=5866,x=0.0548129640505145,y=0.8443145744599417 a=eks,b=zee,i=5867,x=0.9115822381629575,y=0.7866137441239371 a=zee,b=zee,i=5868,x=0.6094609434293627,y=0.5377506393673299 a=zee,b=wye,i=5869,x=0.018050024906604567,y=0.7925383948436677 a=pan,b=wye,i=5870,x=0.7185567353405748,y=0.9625690376428901 a=zee,b=zee,i=5871,x=0.028580144473957514,y=0.3101568871452759 a=pan,b=pan,i=5872,x=0.3820471070600516,y=0.35563824254246 a=hat,b=pan,i=5873,x=0.48211948675174343,y=0.2808314182510484 a=zee,b=zee,i=5874,x=0.4244763123071966,y=0.27813346850123377 a=hat,b=hat,i=5875,x=0.08023425641620874,y=0.3562943757988909 a=eks,b=zee,i=5876,x=0.42409197009601207,y=0.2580874448511281 a=zee,b=hat,i=5877,x=0.6106977731868735,y=0.8348351384198046 a=hat,b=pan,i=5878,x=0.7267758858416487,y=0.6189509030501132 a=eks,b=pan,i=5879,x=0.9304167092235895,y=0.7812522227544872 a=pan,b=pan,i=5880,x=0.16403167139407027,y=0.9377394665165222 a=zee,b=zee,i=5881,x=0.9728622687660967,y=0.15656315863552106 a=wye,b=hat,i=5882,x=0.1079539981243911,y=0.27269401005584115 a=pan,b=wye,i=5883,x=0.3575378506176421,y=0.6513985153042581 a=pan,b=pan,i=5884,x=0.5893199011375699,y=0.9675602927187726 a=zee,b=wye,i=5885,x=0.7855309055804873,y=0.8242084722200425 a=pan,b=hat,i=5886,x=0.21719695401350458,y=0.30358017023038153 a=hat,b=hat,i=5887,x=0.9478034096451651,y=0.408314973093156 a=pan,b=hat,i=5888,x=0.6047201198005093,y=0.9181081561579384 a=hat,b=hat,i=5889,x=0.585057883337934,y=0.8637135279822525 a=wye,b=hat,i=5890,x=0.7193606570599776,y=0.13247216321287003 a=eks,b=hat,i=5891,x=0.38491586194929694,y=0.1469109750984342 a=zee,b=pan,i=5892,x=0.9813253864700262,y=0.35805907741021115 a=pan,b=pan,i=5893,x=0.3991583932113212,y=0.9300651976220902 a=eks,b=hat,i=5894,x=0.4664037391639634,y=0.665201311994492 a=eks,b=zee,i=5895,x=0.34688995428502123,y=0.05521465426780947 a=pan,b=hat,i=5896,x=0.9024771073805518,y=0.604435930128322 a=wye,b=eks,i=5897,x=0.8964292531785713,y=0.4797408068859207 a=zee,b=zee,i=5898,x=0.9638020677593624,y=0.9758009686628205 a=pan,b=zee,i=5899,x=0.1740859761427278,y=0.6267077732379096 a=wye,b=eks,i=5900,x=0.5229577213131821,y=0.18158149929552536 a=pan,b=wye,i=5901,x=0.7384787869595655,y=0.41300809363121915 a=pan,b=hat,i=5902,x=0.41567839319864996,y=0.6586070339163206 a=pan,b=pan,i=5903,x=0.16296558429713726,y=0.6335579931374635 a=wye,b=eks,i=5904,x=0.791240301793597,y=0.5905379287555277 a=eks,b=eks,i=5905,x=0.8611318706939175,y=0.012613640405385818 a=wye,b=pan,i=5906,x=0.25968317122777085,y=0.21946674504226305 a=eks,b=pan,i=5907,x=0.20429202129242863,y=0.2739618927896226 a=hat,b=zee,i=5908,x=0.5139620538238665,y=0.4911358765578846 a=pan,b=hat,i=5909,x=0.2621296183552325,y=0.6724917830910391 a=eks,b=hat,i=5910,x=0.42415855241583555,y=0.6705675010493037 a=wye,b=pan,i=5911,x=0.865745658241438,y=0.58440580479703 a=eks,b=hat,i=5912,x=0.8061623351763454,y=0.6282727719209886 a=pan,b=zee,i=5913,x=0.07513903167347802,y=0.6097002489929698 a=zee,b=hat,i=5914,x=0.6882661603529711,y=0.8887129009982704 a=wye,b=wye,i=5915,x=0.25957436941921963,y=0.5267742816791648 a=hat,b=zee,i=5916,x=0.5369361894430387,y=0.7602843160092176 a=zee,b=eks,i=5917,x=0.7603685712259192,y=0.6343676597010043 a=pan,b=hat,i=5918,x=0.366468458362766,y=0.03541459276961356 a=hat,b=zee,i=5919,x=0.572831435062068,y=0.03791669059169456 a=hat,b=eks,i=5920,x=0.22277164773544,y=0.6701548094942816 a=eks,b=hat,i=5921,x=0.7220748068466161,y=0.9135263674287071 a=hat,b=hat,i=5922,x=0.7007543076445784,y=0.5785000013877882 a=zee,b=pan,i=5923,x=0.07333176505461592,y=0.6129972451763929 a=eks,b=eks,i=5924,x=0.7977706056198149,y=0.3145761502534876 a=pan,b=wye,i=5925,x=0.02234819330370974,y=0.24864881451646326 a=eks,b=wye,i=5926,x=0.31862517237026744,y=0.6707830122783046 a=zee,b=wye,i=5927,x=0.7736532335919073,y=0.06276902730360534 a=zee,b=hat,i=5928,x=0.571180118057766,y=0.23249209976534324 a=wye,b=wye,i=5929,x=0.765996158956063,y=0.7875000435827569 a=eks,b=eks,i=5930,x=0.9258500136940602,y=0.14002804460000795 a=zee,b=pan,i=5931,x=0.14870262574003812,y=0.25758171933702145 a=hat,b=hat,i=5932,x=0.6061740180931977,y=0.0647099944297298 a=zee,b=eks,i=5933,x=0.21312616005615392,y=0.1555687828207697 a=wye,b=wye,i=5934,x=0.32174717605868364,y=0.5617674601864029 a=zee,b=eks,i=5935,x=0.4278905571169318,y=0.7204350849259756 a=wye,b=wye,i=5936,x=0.5169276990526274,y=0.34471540929660927 a=hat,b=wye,i=5937,x=0.7939967856315264,y=0.9601200264326587 a=pan,b=pan,i=5938,x=0.7447545239901884,y=0.8615464344679636 a=wye,b=pan,i=5939,x=0.32618776050076514,y=0.04356428568705306 a=zee,b=pan,i=5940,x=0.30848692760824414,y=0.4765563067775509 a=zee,b=eks,i=5941,x=0.47731093944717395,y=0.20531029159472136 a=zee,b=hat,i=5942,x=0.14569062187871828,y=0.29647189869590773 a=zee,b=eks,i=5943,x=0.8514541851665678,y=0.47380190170636116 a=wye,b=pan,i=5944,x=0.8579979653959152,y=0.020846772517364776 a=pan,b=eks,i=5945,x=0.6760904036707333,y=0.038710653329522726 a=wye,b=pan,i=5946,x=0.4654804137932894,y=0.034558917439536097 a=zee,b=hat,i=5947,x=0.21695412923454904,y=0.43929843802398505 a=hat,b=hat,i=5948,x=0.5757328621980413,y=0.6353025655596225 a=wye,b=eks,i=5949,x=0.9623043477520935,y=0.11211455399205761 a=pan,b=eks,i=5950,x=0.2489174544195356,y=0.9543858789744019 a=wye,b=zee,i=5951,x=0.2551744295171663,y=0.6371014605832375 a=wye,b=zee,i=5952,x=0.6661892172394466,y=0.25609424535345615 a=zee,b=eks,i=5953,x=0.9664924377661902,y=0.5704525111862812 a=zee,b=zee,i=5954,x=0.7314435770258082,y=0.5760633916387623 a=wye,b=eks,i=5955,x=0.11730300164253482,y=0.2437668953328913 a=hat,b=wye,i=5956,x=0.2856744287649412,y=0.5130003461790801 a=pan,b=wye,i=5957,x=0.7991558243539277,y=0.04715962071161517 a=wye,b=hat,i=5958,x=0.4484915030384218,y=0.0021936451209908503 a=wye,b=eks,i=5959,x=0.4276118637683318,y=0.9781842697081753 a=wye,b=zee,i=5960,x=0.5390282464497976,y=0.21779961652631485 a=hat,b=zee,i=5961,x=0.3083082640562401,y=0.43599613823729055 a=pan,b=eks,i=5962,x=0.15236030642851295,y=0.11800538936265059 a=zee,b=wye,i=5963,x=0.7842417183077839,y=0.8263558103417791 a=wye,b=pan,i=5964,x=0.42422897642936763,y=0.5598064063472771 a=wye,b=hat,i=5965,x=0.7381633325773709,y=0.7044839805205219 a=eks,b=zee,i=5966,x=0.8246457170881877,y=0.546058458654676 a=pan,b=wye,i=5967,x=0.03056556054577575,y=0.5661151347932647 a=wye,b=wye,i=5968,x=0.6210050577035034,y=0.6524576650195097 a=hat,b=pan,i=5969,x=0.7090572782654315,y=0.5364015328854267 a=eks,b=zee,i=5970,x=0.6509530715275128,y=0.5780440319964154 a=pan,b=pan,i=5971,x=0.2887825352259904,y=0.15004456717790193 a=wye,b=pan,i=5972,x=0.831991442447814,y=0.26469776729003514 a=zee,b=wye,i=5973,x=0.20543699412375216,y=0.7115776392376905 a=pan,b=wye,i=5974,x=0.2632680009756867,y=0.5045539888483129 a=zee,b=hat,i=5975,x=0.34854624620098384,y=0.12823216693877193 a=hat,b=zee,i=5976,x=0.12265984923829065,y=0.46184314823141537 a=zee,b=eks,i=5977,x=0.9593214911106812,y=0.18841934020738382 a=zee,b=pan,i=5978,x=0.29873353271383263,y=0.8224260506438726 a=wye,b=zee,i=5979,x=0.3367480944275053,y=0.9086030526073715 a=eks,b=hat,i=5980,x=0.6119122505853635,y=0.08152300908632903 a=eks,b=eks,i=5981,x=0.04584617519803835,y=0.07778733739846255 a=hat,b=hat,i=5982,x=0.12903186206218742,y=0.34208394676963483 a=wye,b=eks,i=5983,x=0.20225412929960151,y=0.467369874775762 a=eks,b=zee,i=5984,x=0.43322997404163954,y=0.5286653070293011 a=zee,b=zee,i=5985,x=0.5011026241476996,y=0.805862929391608 a=zee,b=eks,i=5986,x=0.8754701645608397,y=0.38365755627001585 a=pan,b=eks,i=5987,x=0.4615059476811778,y=0.052616042635722726 a=hat,b=wye,i=5988,x=0.6628427322104598,y=0.7830019543371667 a=hat,b=wye,i=5989,x=0.9291945030562897,y=0.3850137859960868 a=wye,b=pan,i=5990,x=0.17713926799897517,y=0.23695227873073954 a=pan,b=eks,i=5991,x=0.7450679111488475,y=0.28865753240279957 a=hat,b=wye,i=5992,x=0.608480151924532,y=0.2124705647477415 a=wye,b=zee,i=5993,x=0.5294790360408727,y=0.8997422208092308 a=wye,b=pan,i=5994,x=0.8452227401580423,y=0.17900534407423696 a=pan,b=pan,i=5995,x=0.9106908084952221,y=0.4539070115302676 a=zee,b=wye,i=5996,x=0.5373426059376083,y=0.4221246992022961 a=pan,b=wye,i=5997,x=0.5531071589049933,y=0.08637347865871003 a=zee,b=pan,i=5998,x=0.21694616431952807,y=0.39150665545149743 a=zee,b=wye,i=5999,x=0.6413081783785531,y=0.1998976766972167 a=eks,b=eks,i=6000,x=0.2792519668247778,y=0.5138064566303124 a=hat,b=zee,i=6001,x=0.5185086838193509,y=0.7904042779588125 a=eks,b=eks,i=6002,x=0.39573160678139196,y=0.4615703290236336 a=zee,b=hat,i=6003,x=0.0715926003170353,y=0.6334247799868317 a=pan,b=zee,i=6004,x=0.24114560678004815,y=0.9328567037965978 a=hat,b=wye,i=6005,x=0.7983815573901718,y=0.7761184973619634 a=hat,b=zee,i=6006,x=0.5384751396537175,y=0.3888207115072827 a=wye,b=pan,i=6007,x=0.8053846290661436,y=0.8678997964852174 a=pan,b=eks,i=6008,x=0.41565599952378685,y=0.9850186434544672 a=wye,b=wye,i=6009,x=0.0929139240769814,y=0.5373260828931007 a=zee,b=eks,i=6010,x=0.6485105788304564,y=0.4297840734143743 a=hat,b=zee,i=6011,x=0.9000836207274523,y=0.21471020343061598 a=eks,b=eks,i=6012,x=0.6658398998195909,y=0.13678166324566765 a=hat,b=wye,i=6013,x=0.4176340542833341,y=0.9065866640956619 a=zee,b=wye,i=6014,x=0.8507681738053369,y=0.11610028428937647 a=eks,b=hat,i=6015,x=0.9615655580235888,y=0.3722658883094253 a=pan,b=pan,i=6016,x=0.7515268934050028,y=0.6517374909352979 a=pan,b=hat,i=6017,x=0.49152531929212073,y=0.7512315139958677 a=eks,b=hat,i=6018,x=0.4684056585315659,y=0.337057411818393 a=zee,b=hat,i=6019,x=0.46644646414956337,y=0.37632624811846627 a=eks,b=zee,i=6020,x=0.8375544392876899,y=0.06208795125761901 a=eks,b=wye,i=6021,x=0.853613881880828,y=0.42565283184216685 a=wye,b=hat,i=6022,x=0.0008045774133644823,y=0.9649087112765938 a=eks,b=wye,i=6023,x=0.728964866290429,y=0.20299302934138896 a=wye,b=wye,i=6024,x=0.17509415050833677,y=0.6602044660320481 a=pan,b=hat,i=6025,x=0.8660100438564455,y=0.43409555049096815 a=hat,b=hat,i=6026,x=0.26534848529863153,y=0.15071960409960417 a=hat,b=eks,i=6027,x=0.6918174742812051,y=0.18022893420812924 a=pan,b=eks,i=6028,x=0.8921081985029767,y=0.918512738613517 a=eks,b=hat,i=6029,x=0.5291325936429374,y=0.11343528410923331 a=pan,b=eks,i=6030,x=0.6604483059910737,y=0.828006457014962 a=hat,b=zee,i=6031,x=0.15437854915261007,y=0.503378274348622 a=wye,b=pan,i=6032,x=0.18616681775349353,y=0.428462590403658 a=wye,b=hat,i=6033,x=0.17782260468314637,y=0.3212752721293215 a=zee,b=zee,i=6034,x=0.1872485063005922,y=0.11358951848324028 a=wye,b=zee,i=6035,x=0.40200320956425806,y=0.5915516801877846 a=wye,b=eks,i=6036,x=0.6743134456217715,y=0.03587684243454348 a=hat,b=pan,i=6037,x=0.13535704558051898,y=0.08799048432237733 a=eks,b=hat,i=6038,x=0.45829076005760183,y=0.9312783969989717 a=pan,b=wye,i=6039,x=0.8260078705928582,y=0.015009473265236828 a=pan,b=eks,i=6040,x=0.02209842222005065,y=0.2707759101194467 a=pan,b=pan,i=6041,x=0.24065041069096327,y=0.096992272385374 a=wye,b=wye,i=6042,x=0.1257432277214967,y=0.7056875982657411 a=wye,b=zee,i=6043,x=0.19024789027868116,y=0.8414234848855409 a=zee,b=wye,i=6044,x=0.5264647677402654,y=0.16668422327274046 a=wye,b=wye,i=6045,x=0.43588050348095864,y=0.4231462786478698 a=zee,b=eks,i=6046,x=0.35017939224895767,y=0.31215765738608925 a=eks,b=wye,i=6047,x=0.5417973498575591,y=0.47047382812068883 a=hat,b=wye,i=6048,x=0.7766726125727336,y=0.5675508167476694 a=zee,b=wye,i=6049,x=0.9832175361809419,y=0.2682166583462263 a=wye,b=zee,i=6050,x=0.6951984651252766,y=0.5425712622829648 a=pan,b=wye,i=6051,x=0.9427895952822903,y=0.8719941425198732 a=hat,b=hat,i=6052,x=0.5361976672567662,y=0.5331863539216497 a=eks,b=wye,i=6053,x=0.7102521301167394,y=0.017628741065697007 a=eks,b=hat,i=6054,x=0.7073320813195529,y=0.9382615280812954 a=wye,b=wye,i=6055,x=0.9034120549999815,y=0.9428661865045129 a=wye,b=zee,i=6056,x=0.9036169505703209,y=0.8702961297029511 a=pan,b=zee,i=6057,x=0.351391651879459,y=0.22131930493166563 a=hat,b=pan,i=6058,x=0.4633029443317498,y=0.9006978783785164 a=pan,b=hat,i=6059,x=0.8954915180233931,y=0.5799236237902317 a=wye,b=pan,i=6060,x=0.011291356990852042,y=0.7765350029774964 a=wye,b=hat,i=6061,x=0.8964276551673388,y=0.09468753423212417 a=eks,b=zee,i=6062,x=0.32542453183848197,y=0.5356755758750752 a=pan,b=pan,i=6063,x=0.4553835211035392,y=0.421964673707642 a=eks,b=eks,i=6064,x=0.9195082628714536,y=0.7843278824429687 a=wye,b=eks,i=6065,x=0.43792520749353625,y=0.9395208618424521 a=hat,b=zee,i=6066,x=0.6147064931036405,y=0.9150698526901345 a=zee,b=eks,i=6067,x=0.22286944513587603,y=0.5667267901072823 a=zee,b=pan,i=6068,x=0.1015880769763784,y=0.9719880080896737 a=zee,b=hat,i=6069,x=0.8599055004647317,y=0.09826062758286946 a=hat,b=pan,i=6070,x=0.6313496582432914,y=0.9900649342170824 a=pan,b=pan,i=6071,x=0.8928836261132681,y=0.5415114404183805 a=zee,b=wye,i=6072,x=0.7452277791699898,y=0.27999313704075457 a=wye,b=wye,i=6073,x=0.018510579550919615,y=0.6478773625532628 a=pan,b=hat,i=6074,x=0.14632992450201188,y=0.7026424321895863 a=pan,b=eks,i=6075,x=0.8012118002371259,y=0.7203879849887644 a=hat,b=wye,i=6076,x=0.8379974247825939,y=0.6503639424507504 a=pan,b=zee,i=6077,x=0.5778438306895812,y=0.3635043725548298 a=hat,b=eks,i=6078,x=0.6372234825627152,y=0.5775364684644685 a=wye,b=hat,i=6079,x=0.788390001290666,y=0.08406257620709923 a=eks,b=hat,i=6080,x=0.5842098929256355,y=0.9268385178778537 a=eks,b=zee,i=6081,x=0.8045184557436604,y=0.3550708830410243 a=wye,b=hat,i=6082,x=0.6940314918085063,y=0.9546919945201542 a=zee,b=wye,i=6083,x=0.07677730138586769,y=0.27970074396540523 a=hat,b=hat,i=6084,x=0.8231273607660942,y=0.7945531787758096 a=pan,b=zee,i=6085,x=0.149414209891241,y=0.785222866060064 a=hat,b=zee,i=6086,x=0.8656687722742876,y=0.3783605596273294 a=pan,b=hat,i=6087,x=0.7452242982918568,y=0.933266614617221 a=eks,b=eks,i=6088,x=0.9407795350577164,y=0.8986498240204077 a=zee,b=wye,i=6089,x=0.20326626549933924,y=0.9955640843974876 a=eks,b=pan,i=6090,x=0.838908851853637,y=0.9142053659359575 a=pan,b=zee,i=6091,x=0.2805934812907199,y=0.4958691991853912 a=hat,b=hat,i=6092,x=0.11050475306966923,y=0.6388348781021509 a=zee,b=hat,i=6093,x=0.665308883447062,y=0.06804657653188073 a=zee,b=wye,i=6094,x=0.38062861091901556,y=0.1551403595265176 a=eks,b=zee,i=6095,x=0.6890247160219993,y=0.37496310117295584 a=eks,b=hat,i=6096,x=0.42296496745953693,y=0.028270087708508695 a=zee,b=pan,i=6097,x=0.16613072961880582,y=0.6781440562566766 a=eks,b=wye,i=6098,x=0.004861307055076147,y=0.16556471646142745 a=hat,b=wye,i=6099,x=0.45226025959304195,y=0.18641738624575777 a=wye,b=eks,i=6100,x=0.6994211629442989,y=0.5162220389082391 a=hat,b=eks,i=6101,x=0.21566053977410837,y=0.0009137416907488705 a=zee,b=eks,i=6102,x=0.8280966067887752,y=0.694693806129609 a=zee,b=pan,i=6103,x=0.6340964020751576,y=0.62642563404278 a=eks,b=eks,i=6104,x=0.35610230144127086,y=0.6916343444424629 a=pan,b=wye,i=6105,x=0.2907054181631238,y=0.6928671017273116 a=zee,b=pan,i=6106,x=0.8553526569078405,y=0.9138200519516971 a=hat,b=hat,i=6107,x=0.16347811679340452,y=0.6796304402643298 a=pan,b=eks,i=6108,x=0.08545243832367033,y=0.26227816664595516 a=pan,b=wye,i=6109,x=0.42064626396142935,y=0.03834575879901836 a=hat,b=hat,i=6110,x=0.06431500264016754,y=0.8198549278735412 a=pan,b=hat,i=6111,x=0.8176964039522118,y=0.27991537751096096 a=wye,b=eks,i=6112,x=0.32643889115109914,y=0.057664918435550105 a=eks,b=zee,i=6113,x=0.7830249162665363,y=0.9359267958767102 a=zee,b=pan,i=6114,x=0.12372114799931111,y=0.006510213999872061 a=eks,b=pan,i=6115,x=0.14468978749350747,y=0.9503328335027744 a=pan,b=wye,i=6116,x=0.8796441138920073,y=0.7932277172417034 a=zee,b=zee,i=6117,x=0.9246694666039478,y=0.18141663220397541 a=wye,b=pan,i=6118,x=0.6353087660069283,y=0.5051898483269901 a=pan,b=wye,i=6119,x=0.5863942231599231,y=0.001428085680191149 a=wye,b=zee,i=6120,x=0.8391496713951982,y=0.8272270342812488 a=pan,b=wye,i=6121,x=0.10848385354873591,y=0.4213783243233229 a=eks,b=zee,i=6122,x=0.7851432595398691,y=0.8736148992334403 a=pan,b=wye,i=6123,x=0.14384598748640032,y=0.32134746224637845 a=hat,b=zee,i=6124,x=0.05088458565782927,y=0.9994183544894671 a=hat,b=eks,i=6125,x=0.7256280642967333,y=0.8471794523838057 a=eks,b=pan,i=6126,x=0.6585496392017636,y=0.4276868684164896 a=wye,b=hat,i=6127,x=0.645442843855344,y=0.34584198249412534 a=wye,b=hat,i=6128,x=0.5798880313425798,y=0.991140739248181 a=zee,b=zee,i=6129,x=0.8451024180287646,y=0.4474449179206156 a=pan,b=eks,i=6130,x=0.06722223792791904,y=0.14906728853790685 a=eks,b=eks,i=6131,x=0.8733172145139986,y=0.754180892846082 a=wye,b=wye,i=6132,x=0.21323342519040167,y=0.023037099194546995 a=eks,b=hat,i=6133,x=0.2772309881804147,y=0.03618215388759871 a=hat,b=wye,i=6134,x=0.3566779583699996,y=0.7569810016480044 a=zee,b=zee,i=6135,x=0.4368219705298403,y=0.02593555893570043 a=wye,b=hat,i=6136,x=0.13423307209566393,y=0.7786764748609936 a=pan,b=wye,i=6137,x=0.26321994371190116,y=0.7448472659747205 a=pan,b=eks,i=6138,x=0.09141195779591726,y=0.10884990452426058 a=hat,b=eks,i=6139,x=0.8439060414873816,y=0.4078177506117555 a=zee,b=eks,i=6140,x=0.6449410501908724,y=0.7328187261405557 a=wye,b=wye,i=6141,x=0.31425705029105533,y=0.7492859328412478 a=zee,b=zee,i=6142,x=0.657143123361377,y=0.37319179681546233 a=pan,b=wye,i=6143,x=0.8303922450488143,y=0.04133052528317438 a=pan,b=zee,i=6144,x=0.054269779082146474,y=0.7280169255714574 a=pan,b=eks,i=6145,x=0.9449211141040083,y=0.18293190122317016 a=zee,b=wye,i=6146,x=0.28919940890955353,y=0.7696928449638194 a=wye,b=wye,i=6147,x=0.29949161102957667,y=0.5548662350346921 a=zee,b=wye,i=6148,x=0.06803050982105852,y=0.6066130537591169 a=eks,b=zee,i=6149,x=0.6534482020575438,y=0.2506945890953125 a=eks,b=eks,i=6150,x=0.2543117769739106,y=0.2683840371177597 a=wye,b=eks,i=6151,x=0.2875496688119247,y=0.44319198704607665 a=wye,b=eks,i=6152,x=0.7099732953682635,y=0.5854903351687778 a=wye,b=pan,i=6153,x=0.07854709434875495,y=0.3722757779564305 a=pan,b=wye,i=6154,x=0.8844645043086019,y=0.0821083597407316 a=zee,b=zee,i=6155,x=0.3642127687872748,y=0.5633536743710837 a=wye,b=zee,i=6156,x=0.06825592495808563,y=0.1502278354043537 a=hat,b=wye,i=6157,x=0.96483308459617,y=0.005464821632367056 a=wye,b=wye,i=6158,x=0.5486690225111291,y=0.22135008972861803 a=pan,b=wye,i=6159,x=0.962029830876355,y=0.39858158874481264 a=hat,b=eks,i=6160,x=0.7011580850727354,y=0.6036204870691432 a=eks,b=zee,i=6161,x=0.08747236952448512,y=0.6025426256044452 a=hat,b=wye,i=6162,x=0.7456669839482689,y=0.1394569856909862 a=hat,b=hat,i=6163,x=0.10827051081377403,y=0.16793651272516608 a=wye,b=pan,i=6164,x=0.8979852141961816,y=0.13235901577397613 a=zee,b=zee,i=6165,x=0.15629723258639028,y=0.8654019947072258 a=pan,b=wye,i=6166,x=0.5836460911249829,y=0.5913706500552215 a=pan,b=zee,i=6167,x=0.6207688091598478,y=0.47548687622711405 a=eks,b=pan,i=6168,x=0.011142080206369753,y=0.11796822475814073 a=wye,b=hat,i=6169,x=0.27571064540346324,y=0.849891289726519 a=wye,b=hat,i=6170,x=0.05037038984895503,y=0.6127522806306696 a=hat,b=eks,i=6171,x=0.6128807090186297,y=0.13380041255048647 a=hat,b=zee,i=6172,x=0.4805916761138247,y=0.1482140011291747 a=pan,b=zee,i=6173,x=0.07652496417334043,y=0.042388913077830326 a=eks,b=eks,i=6174,x=0.43221049405771506,y=0.9702133355298461 a=zee,b=hat,i=6175,x=0.22992120482659384,y=0.7893723418315517 a=wye,b=wye,i=6176,x=0.8712880934289053,y=0.1426259097448438 a=wye,b=pan,i=6177,x=0.03184609338086353,y=0.0814260689531977 a=pan,b=eks,i=6178,x=0.18328780306168269,y=0.7969641159371771 a=pan,b=hat,i=6179,x=0.44176808883841967,y=0.606631222409441 a=pan,b=eks,i=6180,x=0.6707266041969419,y=0.8559378190156729 a=eks,b=zee,i=6181,x=0.2802981253544844,y=0.3174939125127616 a=hat,b=wye,i=6182,x=0.5963539674332015,y=0.8719750664328125 a=hat,b=pan,i=6183,x=0.005703731409972823,y=0.13190978995990732 a=wye,b=eks,i=6184,x=0.8185740040040715,y=0.29143129414848035 a=hat,b=pan,i=6185,x=0.38534047699412566,y=0.653203878373999 a=pan,b=eks,i=6186,x=0.8129419229181339,y=0.9565505011070674 a=zee,b=eks,i=6187,x=0.9102216458464243,y=0.14788252816414793 a=pan,b=pan,i=6188,x=0.3138266925669364,y=0.1423581267550319 a=eks,b=zee,i=6189,x=0.1600695810764854,y=0.3703741621779819 a=hat,b=zee,i=6190,x=0.855253088583113,y=0.4268359685582771 a=pan,b=zee,i=6191,x=0.4936690941214801,y=0.8239585275348885 a=zee,b=eks,i=6192,x=0.9698866358660461,y=0.45918790442353197 a=zee,b=pan,i=6193,x=0.22555543203604156,y=0.354448421001617 a=wye,b=zee,i=6194,x=0.567972797574568,y=0.48947921344717205 a=pan,b=wye,i=6195,x=0.32782196923608053,y=0.5904659635589349 a=hat,b=hat,i=6196,x=0.6643469112984154,y=0.21978754163260783 a=hat,b=wye,i=6197,x=0.9175822141933855,y=0.8289821718204701 a=pan,b=pan,i=6198,x=0.7387220064556718,y=0.634422986160881 a=hat,b=hat,i=6199,x=0.27873509309298805,y=0.8518009401398621 a=hat,b=pan,i=6200,x=0.9456083795785362,y=0.07976539092371093 a=wye,b=zee,i=6201,x=0.3729199649979895,y=0.3737596699867053 a=pan,b=eks,i=6202,x=0.47394220338381987,y=0.22208820414520292 a=wye,b=wye,i=6203,x=0.43456592177296915,y=0.8898632264012567 a=hat,b=hat,i=6204,x=0.01568433367414035,y=0.6760088307426864 a=eks,b=pan,i=6205,x=0.9867459947802004,y=0.048081368596216145 a=zee,b=eks,i=6206,x=0.4689131127096242,y=0.18743577113193155 a=hat,b=pan,i=6207,x=0.35740607834132276,y=0.9046883371614931 a=wye,b=pan,i=6208,x=0.38705607831183175,y=0.33125379993312465 a=hat,b=pan,i=6209,x=0.1164284726722783,y=0.5077787588883211 a=eks,b=pan,i=6210,x=0.11164707350592284,y=0.4366699296089537 a=zee,b=hat,i=6211,x=0.1756835304978165,y=0.21235178828034162 a=wye,b=wye,i=6212,x=0.4370538758875272,y=0.6712221542567061 a=wye,b=zee,i=6213,x=0.223018528653398,y=0.07665796419452864 a=wye,b=wye,i=6214,x=0.3196105142466139,y=0.5918579198886101 a=hat,b=pan,i=6215,x=0.2642111043247998,y=0.7655889787356082 a=eks,b=pan,i=6216,x=0.830827137944212,y=0.04852612916637178 a=wye,b=eks,i=6217,x=0.8805402436632958,y=0.45841077395866314 a=eks,b=pan,i=6218,x=0.413534591007817,y=0.23614970902594068 a=zee,b=hat,i=6219,x=0.16354591153161113,y=0.9206152927733066 a=eks,b=zee,i=6220,x=0.047918107206670224,y=0.11615158016485994 a=wye,b=eks,i=6221,x=0.7465534540087728,y=0.9821197497223434 a=eks,b=wye,i=6222,x=0.06680014273579682,y=0.18844745124665652 a=eks,b=zee,i=6223,x=0.722803247048192,y=0.36350236589598184 a=eks,b=hat,i=6224,x=0.4238158023951344,y=0.2511472296462649 a=pan,b=pan,i=6225,x=0.9203832973582675,y=0.06804134828535513 a=eks,b=hat,i=6226,x=0.02496410500180868,y=0.05574344857979974 a=hat,b=hat,i=6227,x=0.38672001205322815,y=0.19823389210483422 a=zee,b=wye,i=6228,x=0.82604777396307,y=0.4659557204008049 a=hat,b=pan,i=6229,x=0.14688149819492824,y=0.09514280973942923 a=zee,b=hat,i=6230,x=0.7075949539072733,y=0.4235760111709499 a=zee,b=zee,i=6231,x=0.5376973727140149,y=0.2898522104137249 a=hat,b=eks,i=6232,x=0.5875320141178829,y=0.2318829378753392 a=wye,b=pan,i=6233,x=0.608930346989634,y=0.4394723390502957 a=hat,b=pan,i=6234,x=0.3711000240622062,y=0.5630248688807553 a=zee,b=hat,i=6235,x=0.6700739126174862,y=0.9940554433455402 a=hat,b=hat,i=6236,x=0.4937178916169107,y=0.9804247824378383 a=eks,b=zee,i=6237,x=0.9471147772457458,y=0.08993646421096724 a=pan,b=zee,i=6238,x=0.8826315387759526,y=0.29842130130234024 a=wye,b=pan,i=6239,x=0.8739810335218393,y=0.2932188268287632 a=zee,b=zee,i=6240,x=0.7765733461710617,y=0.2833840343701606 a=pan,b=eks,i=6241,x=0.8637612972836923,y=0.7179857913303808 a=pan,b=wye,i=6242,x=0.7916044619336652,y=0.8298956143848671 a=hat,b=wye,i=6243,x=0.03245716276075361,y=0.06220544584591636 a=wye,b=hat,i=6244,x=0.12210504687225221,y=0.6815533723212936 a=eks,b=zee,i=6245,x=0.46823867638384764,y=0.6642014993474107 a=eks,b=hat,i=6246,x=0.29665539600807134,y=0.7003997740545368 a=eks,b=hat,i=6247,x=0.3362821619192434,y=0.5279161806972573 a=eks,b=zee,i=6248,x=0.5444822392275463,y=0.0876616329488289 a=eks,b=hat,i=6249,x=0.20745998433546498,y=0.6115074760010532 a=zee,b=wye,i=6250,x=0.1678104597445702,y=0.6488476640200247 a=eks,b=hat,i=6251,x=0.7449272998418788,y=0.6080272372617547 a=zee,b=pan,i=6252,x=0.5630148470870018,y=0.9374709146770936 a=zee,b=eks,i=6253,x=0.3902801767495462,y=0.5732026335466424 a=zee,b=eks,i=6254,x=0.16850436138589997,y=0.8738130855818549 a=zee,b=zee,i=6255,x=0.9316229517968885,y=0.652503212541953 a=zee,b=eks,i=6256,x=0.5901306196182216,y=0.0931368428666508 a=hat,b=eks,i=6257,x=0.7050090746554877,y=0.8875603931761636 a=eks,b=wye,i=6258,x=0.9454475219485642,y=0.5012059708954245 a=zee,b=pan,i=6259,x=0.4266553967306278,y=0.4003433468882255 a=wye,b=zee,i=6260,x=0.9923421841444514,y=0.8824722395488493 a=hat,b=hat,i=6261,x=0.40702432370099206,y=0.7171214051987123 a=hat,b=eks,i=6262,x=0.3350864667715827,y=0.014819836304338363 a=wye,b=hat,i=6263,x=0.9268271428508724,y=0.8044165287448475 a=eks,b=eks,i=6264,x=0.4779658182518448,y=0.8202291191900539 a=pan,b=hat,i=6265,x=0.2970907219742721,y=0.1979486130274667 a=hat,b=zee,i=6266,x=0.7137087061271212,y=0.013510967108152694 a=eks,b=eks,i=6267,x=0.6051949380519777,y=0.7786588336276383 a=eks,b=wye,i=6268,x=0.8158250525163169,y=0.4134056153971454 a=eks,b=eks,i=6269,x=0.19963046420567765,y=0.7765565982643615 a=hat,b=eks,i=6270,x=0.543219579817685,y=0.5740667894014433 a=pan,b=eks,i=6271,x=0.46967904346855993,y=0.8165981152983919 a=pan,b=hat,i=6272,x=0.866140011093518,y=0.3038034829369789 a=zee,b=hat,i=6273,x=0.7504799514506184,y=0.5256684190391457 a=eks,b=eks,i=6274,x=0.7402757803304741,y=0.8741323775731765 a=zee,b=eks,i=6275,x=0.10740056926929464,y=0.24466182300866768 a=pan,b=pan,i=6276,x=0.6952734267926836,y=0.3034126351184192 a=hat,b=eks,i=6277,x=0.4555390450312061,y=0.29958791124739714 a=pan,b=pan,i=6278,x=0.8010308117452736,y=0.10301620244633602 a=pan,b=zee,i=6279,x=0.7313615800627254,y=0.1256082104913564 a=pan,b=hat,i=6280,x=0.4855733066299236,y=0.8761128788327854 a=hat,b=pan,i=6281,x=0.4484391085565852,y=0.4389498697416624 a=pan,b=hat,i=6282,x=0.09083588457295921,y=0.7896685475022054 a=zee,b=eks,i=6283,x=0.5390923448056928,y=0.5167672853818701 a=wye,b=wye,i=6284,x=0.35204669568634417,y=0.4690592822602978 a=pan,b=pan,i=6285,x=0.32173095582057487,y=0.21796469598272317 a=zee,b=eks,i=6286,x=0.144962592956428,y=0.7722195658556293 a=hat,b=wye,i=6287,x=0.2714129569031942,y=0.8615826556040387 a=hat,b=zee,i=6288,x=0.07477462162312054,y=0.5791036060536199 a=wye,b=zee,i=6289,x=0.7327389149804516,y=0.7332292873505851 a=wye,b=hat,i=6290,x=0.21334531120997036,y=0.7835004731984553 a=wye,b=pan,i=6291,x=0.72465968202963,y=0.8111622984322363 a=wye,b=zee,i=6292,x=0.7179223482928053,y=0.7389960044426721 a=wye,b=zee,i=6293,x=0.6388081928409085,y=0.34955396223940427 a=pan,b=wye,i=6294,x=0.9468440956319596,y=0.4217394313328563 a=pan,b=eks,i=6295,x=0.5390564367625461,y=0.044601959541880176 a=pan,b=pan,i=6296,x=0.16446925567275705,y=0.2859671068853066 a=zee,b=zee,i=6297,x=0.36656402569411484,y=0.7479751436902188 a=zee,b=hat,i=6298,x=0.9752808469326072,y=0.5811620174961745 a=zee,b=pan,i=6299,x=0.8830811226882286,y=0.2699573596370525 a=pan,b=zee,i=6300,x=0.31023070105575734,y=0.11731145460396875 a=zee,b=pan,i=6301,x=0.9479037050282592,y=0.396609639351287 a=zee,b=zee,i=6302,x=0.24914699249882744,y=0.4481166721397105 a=hat,b=zee,i=6303,x=0.8952025142838863,y=0.5374079020216094 a=wye,b=eks,i=6304,x=0.7278787302021043,y=0.4613586504326308 a=pan,b=zee,i=6305,x=0.1290986312271305,y=0.12638586813227837 a=eks,b=hat,i=6306,x=0.12880877413554215,y=0.7937042890401891 a=pan,b=hat,i=6307,x=0.5265554249602866,y=0.5324141264515088 a=zee,b=eks,i=6308,x=0.6932899560091913,y=0.4224058829341274 a=eks,b=eks,i=6309,x=0.6584180105748301,y=0.46624011433648027 a=eks,b=eks,i=6310,x=0.4455507880824502,y=0.8273180891731959 a=eks,b=hat,i=6311,x=0.9810589871426987,y=0.8707798683477451 a=eks,b=pan,i=6312,x=0.20487685479037343,y=0.3809481389765218 a=eks,b=zee,i=6313,x=0.8361568272178401,y=0.3358472395165475 a=wye,b=zee,i=6314,x=0.463204899148721,y=0.8170995486225013 a=eks,b=zee,i=6315,x=0.4236416770354665,y=0.6484535277551096 a=zee,b=pan,i=6316,x=0.2909481028983725,y=0.6310311151465591 a=eks,b=pan,i=6317,x=0.3794062074790783,y=0.4471294857197765 a=zee,b=pan,i=6318,x=0.2692152520955172,y=0.22081394976202395 a=zee,b=zee,i=6319,x=0.5181926783871064,y=0.1991481006591117 a=hat,b=eks,i=6320,x=0.9361894740111099,y=0.11767606452557877 a=pan,b=wye,i=6321,x=0.2769079772213442,y=0.7118580604878051 a=wye,b=wye,i=6322,x=0.5167349179748397,y=0.9138123003320032 a=hat,b=pan,i=6323,x=0.001915577829406656,y=0.5325392190044987 a=zee,b=wye,i=6324,x=0.9515688609245834,y=0.6819481738668132 a=wye,b=eks,i=6325,x=0.9593196183251438,y=0.8367522899279389 a=zee,b=eks,i=6326,x=0.6840763322653561,y=0.48711604133900366 a=zee,b=pan,i=6327,x=0.9887417195594495,y=0.8511851849030334 a=zee,b=wye,i=6328,x=0.4752524014081069,y=0.5948633790977842 a=pan,b=zee,i=6329,x=0.8670969736419382,y=0.22322204023719405 a=hat,b=pan,i=6330,x=0.5128088389522093,y=0.8131565213796835 a=wye,b=wye,i=6331,x=0.4909465554349871,y=0.8422488044877716 a=eks,b=eks,i=6332,x=0.13395594485063067,y=0.8961331478845271 a=hat,b=eks,i=6333,x=0.3615187221839192,y=0.4910814422431359 a=wye,b=eks,i=6334,x=0.09211420131313564,y=0.423787234189663 a=hat,b=zee,i=6335,x=0.4909870746929612,y=0.4355886224024228 a=hat,b=zee,i=6336,x=0.45712566044414527,y=0.7396866168330615 a=eks,b=hat,i=6337,x=0.579470745492393,y=0.8856435834505533 a=wye,b=hat,i=6338,x=0.08580189556409401,y=0.18529503699085126 a=zee,b=hat,i=6339,x=0.012498941021629406,y=0.8894278634707358 a=wye,b=eks,i=6340,x=0.893469417305926,y=0.6681902139221949 a=wye,b=wye,i=6341,x=0.7436478988526702,y=0.2699384378114361 a=wye,b=pan,i=6342,x=0.494186739181505,y=0.7777818161245044 a=zee,b=zee,i=6343,x=0.1034004605453186,y=0.39652659704684057 a=zee,b=zee,i=6344,x=0.13448148210620792,y=0.6260474107034932 a=pan,b=hat,i=6345,x=0.2613437423487872,y=0.9940438754118295 a=wye,b=hat,i=6346,x=0.4029829128240823,y=0.11036697991316924 a=zee,b=pan,i=6347,x=0.565275716092621,y=0.23420880259350974 a=pan,b=eks,i=6348,x=0.5980140331893903,y=0.06910125165307579 a=hat,b=pan,i=6349,x=0.8269557855792476,y=0.9027369919455107 a=hat,b=zee,i=6350,x=0.5352885898361499,y=0.3388698770867209 a=zee,b=wye,i=6351,x=0.9929432399676,y=0.7266233986268336 a=hat,b=hat,i=6352,x=0.4603922787242829,y=0.8630173727305803 a=zee,b=zee,i=6353,x=0.021330838330390844,y=0.3809296291373765 a=pan,b=hat,i=6354,x=0.7002692145665447,y=0.5873523948555504 a=eks,b=zee,i=6355,x=0.7096421804081511,y=0.8295306415940142 a=eks,b=eks,i=6356,x=0.16187658808999894,y=0.8302220496819485 a=zee,b=zee,i=6357,x=0.49409427660264216,y=0.4850204111936285 a=zee,b=wye,i=6358,x=0.2708188103232835,y=0.9662266139049696 a=hat,b=wye,i=6359,x=0.9607252863389836,y=0.5686827648028989 a=pan,b=eks,i=6360,x=0.7560882445267275,y=0.8572550831102655 a=zee,b=eks,i=6361,x=0.18272065148367533,y=0.739247187328454 a=eks,b=zee,i=6362,x=0.3565928726289197,y=0.7787122695765799 a=eks,b=hat,i=6363,x=0.2435075200137201,y=0.6410578487821268 a=wye,b=hat,i=6364,x=0.914528515618754,y=0.9410825640734111 a=hat,b=wye,i=6365,x=0.8343977017390618,y=0.4038557567547202 a=eks,b=eks,i=6366,x=0.3386950606192106,y=0.06992633700519646 a=wye,b=wye,i=6367,x=0.7504949488085239,y=0.786978752534252 a=hat,b=zee,i=6368,x=0.5051737323297509,y=0.7652145340768823 a=hat,b=wye,i=6369,x=0.7463935682542416,y=0.5295073352906969 a=wye,b=pan,i=6370,x=0.49818710578255154,y=0.1690594948792461 a=eks,b=wye,i=6371,x=0.49803548538778086,y=0.22335884494050284 a=eks,b=hat,i=6372,x=0.4246224317545182,y=0.3262297869762637 a=hat,b=pan,i=6373,x=0.0020932075053449184,y=0.9854117764909686 a=wye,b=zee,i=6374,x=0.18643754020877645,y=0.3123085804500255 a=hat,b=hat,i=6375,x=0.8001034675030699,y=0.9517591892658788 a=pan,b=eks,i=6376,x=0.6252933549201062,y=0.555208264819299 a=pan,b=pan,i=6377,x=0.1234059193898962,y=0.4282585828512744 a=eks,b=pan,i=6378,x=0.110887922625855,y=0.6850395297332329 a=hat,b=hat,i=6379,x=0.8361850070054325,y=0.19844462435428833 a=pan,b=eks,i=6380,x=0.2714658186149983,y=0.8900328486062874 a=hat,b=eks,i=6381,x=0.9299884067645247,y=0.9833998868880498 a=zee,b=eks,i=6382,x=0.5086463065649875,y=0.7232680771660464 a=eks,b=zee,i=6383,x=0.14567680811548367,y=0.7666281407205074 a=pan,b=pan,i=6384,x=0.6344408306479109,y=0.06196040433120564 a=eks,b=wye,i=6385,x=0.375259929118559,y=0.37681150088581805 a=hat,b=pan,i=6386,x=0.09907032231055479,y=0.11845065981831315 a=eks,b=wye,i=6387,x=0.5738630943778305,y=0.1629984838329911 a=wye,b=wye,i=6388,x=0.023110383118460698,y=0.4068502633328007 a=eks,b=wye,i=6389,x=0.06029233433804437,y=0.0069107595974849945 a=eks,b=eks,i=6390,x=0.37636185226364116,y=0.33595097225386006 a=wye,b=eks,i=6391,x=0.5269052228103134,y=0.06811348549954421 a=eks,b=eks,i=6392,x=0.7225625151417873,y=0.24647861320372433 a=pan,b=hat,i=6393,x=0.6164331222493035,y=0.799523761418903 a=pan,b=eks,i=6394,x=0.9066239795995487,y=0.3810678910603539 a=eks,b=eks,i=6395,x=0.013151988906827783,y=0.3911978077086571 a=zee,b=pan,i=6396,x=0.05693046828037929,y=0.0830535181246761 a=wye,b=pan,i=6397,x=0.09815785100601382,y=0.6838294083636631 a=hat,b=wye,i=6398,x=0.8278262369190469,y=0.8063525578215112 a=pan,b=pan,i=6399,x=0.10214678849235426,y=0.8695638422967837 a=wye,b=zee,i=6400,x=0.30136696499099913,y=0.6753346559057617 a=eks,b=pan,i=6401,x=0.3117980184170095,y=0.3896017834660054 a=pan,b=zee,i=6402,x=0.9804741377964931,y=0.49631735811047895 a=wye,b=pan,i=6403,x=0.374109581008899,y=0.9110444354943075 a=zee,b=hat,i=6404,x=0.7164677134055616,y=0.9694565043354904 a=pan,b=hat,i=6405,x=0.9759078114126464,y=0.7063179771371398 a=pan,b=hat,i=6406,x=0.954175493846238,y=0.6691300320475423 a=zee,b=hat,i=6407,x=0.04895042948869599,y=0.5565817121631146 a=zee,b=zee,i=6408,x=0.31225714410247885,y=0.2676588944630799 a=wye,b=zee,i=6409,x=0.7688696231859601,y=0.2251514431056416 a=pan,b=eks,i=6410,x=0.0771175852385313,y=0.43719251713130314 a=zee,b=pan,i=6411,x=0.6943439597980344,y=0.4529874687497758 a=eks,b=pan,i=6412,x=0.028528724411183704,y=0.4117910378534779 a=wye,b=wye,i=6413,x=0.6287761434833328,y=0.9307783735658955 a=zee,b=pan,i=6414,x=0.16675267868516974,y=0.46567693999380766 a=hat,b=hat,i=6415,x=0.8976720079433573,y=0.9828223660778185 a=hat,b=pan,i=6416,x=0.047236756072866926,y=0.7378794124793239 a=hat,b=pan,i=6417,x=0.5832411030367591,y=0.9477789434363258 a=hat,b=hat,i=6418,x=0.3743966868977374,y=0.783174113073371 a=hat,b=hat,i=6419,x=0.7816923607003607,y=0.26730270554894997 a=zee,b=hat,i=6420,x=0.8712427179950256,y=0.7447570934180631 a=wye,b=wye,i=6421,x=0.5648884056728719,y=0.5634331844443893 a=hat,b=wye,i=6422,x=0.01694176656548152,y=0.07336362857726697 a=wye,b=eks,i=6423,x=0.634648698039043,y=0.6818627870740478 a=hat,b=wye,i=6424,x=0.2615797200021953,y=0.06268282068424968 a=zee,b=hat,i=6425,x=0.4347562105046442,y=0.674781093628785 a=hat,b=pan,i=6426,x=0.6291090221287023,y=0.7077446188899329 a=zee,b=zee,i=6427,x=0.1266840835991615,y=0.4710457768189127 a=hat,b=eks,i=6428,x=0.09464086229090107,y=0.47239885675212656 a=wye,b=zee,i=6429,x=0.4663382505006868,y=0.8049521146793138 a=zee,b=pan,i=6430,x=0.4694715777452184,y=0.8671762254103113 a=eks,b=hat,i=6431,x=0.5070929456626403,y=0.4141949031576415 a=zee,b=eks,i=6432,x=0.9977728531401571,y=0.5555230798468542 a=eks,b=zee,i=6433,x=0.7714689740358521,y=0.4682319612714012 a=wye,b=zee,i=6434,x=0.3396705468736063,y=0.7170093938098063 a=eks,b=wye,i=6435,x=0.29949442818251637,y=0.2980558556550551 a=hat,b=pan,i=6436,x=0.8917689813015088,y=0.984408429326343 a=pan,b=eks,i=6437,x=0.07063477691831455,y=0.8731745285524414 a=wye,b=eks,i=6438,x=0.9311531747307039,y=0.36017141690300103 a=wye,b=eks,i=6439,x=0.27627014363793057,y=0.16739805033116262 a=eks,b=eks,i=6440,x=0.54039073822999,y=0.7382909202030716 a=pan,b=wye,i=6441,x=0.5364355943542373,y=0.8667607097366447 a=zee,b=hat,i=6442,x=0.1019419739884182,y=0.8210522328943843 a=zee,b=hat,i=6443,x=0.8392717810036734,y=0.4095062555606819 a=zee,b=wye,i=6444,x=0.5115020732232286,y=0.5858898596014527 a=eks,b=wye,i=6445,x=0.08215358744465884,y=0.4803964930713249 a=pan,b=eks,i=6446,x=0.44656601416029373,y=0.025883415745221905 a=eks,b=pan,i=6447,x=0.2131521138705983,y=0.44443595051013873 a=hat,b=zee,i=6448,x=0.8877041378948662,y=0.37718161280744267 a=hat,b=eks,i=6449,x=0.02954457910704722,y=0.18268010541285318 a=wye,b=hat,i=6450,x=0.06540529634689618,y=0.6973248364919504 a=hat,b=wye,i=6451,x=0.3603702418256457,y=0.945714519438643 a=eks,b=zee,i=6452,x=0.06223787640046563,y=0.8925718669036773 a=hat,b=hat,i=6453,x=0.6640804340662215,y=0.7894591475325365 a=zee,b=hat,i=6454,x=0.3766538672292219,y=0.4455838705050216 a=wye,b=pan,i=6455,x=0.23373281011403946,y=0.3153880547268789 a=wye,b=pan,i=6456,x=0.03036849011680509,y=0.2750194685259788 a=wye,b=eks,i=6457,x=0.7538211276818132,y=0.001441310514862515 a=pan,b=hat,i=6458,x=0.09729717910412794,y=0.19414276392139473 a=wye,b=hat,i=6459,x=0.5675430389740692,y=0.8272519001873508 a=eks,b=wye,i=6460,x=0.5637263196436371,y=0.670195472057473 a=wye,b=wye,i=6461,x=0.6778284989779373,y=0.0285879376093221 a=hat,b=eks,i=6462,x=0.9921482859148919,y=0.5987898976105622 a=wye,b=wye,i=6463,x=0.3211875999010735,y=0.7834800976581381 a=eks,b=pan,i=6464,x=0.2544291614706208,y=0.6807274563683547 a=wye,b=pan,i=6465,x=0.9167490958878957,y=0.9855848244933287 a=pan,b=zee,i=6466,x=0.15059271173810918,y=0.44163751220849723 a=zee,b=hat,i=6467,x=0.8143906454818576,y=0.05494909360709832 a=pan,b=zee,i=6468,x=0.9487811607055657,y=0.47218047025346854 a=eks,b=wye,i=6469,x=0.5901730276534817,y=0.8155922672887547 a=hat,b=wye,i=6470,x=0.6390276410501727,y=0.7865739186729956 a=hat,b=hat,i=6471,x=0.9494189095418566,y=0.3376440579707607 a=wye,b=zee,i=6472,x=0.6214639311843375,y=0.5100489809959527 a=wye,b=pan,i=6473,x=0.38012438275479565,y=0.990757480229546 a=eks,b=eks,i=6474,x=0.21187331402552312,y=0.3570247389877106 a=pan,b=wye,i=6475,x=0.1407760095778986,y=0.4114197966182903 a=zee,b=eks,i=6476,x=0.9687676442631526,y=0.3778953089069811 a=wye,b=hat,i=6477,x=0.4489569133156198,y=0.37328013990205033 a=wye,b=wye,i=6478,x=0.42854180852415313,y=0.9807031803546391 a=hat,b=zee,i=6479,x=0.702402839401389,y=0.7009502307426156 a=eks,b=zee,i=6480,x=0.9676699721896564,y=0.22422126244502638 a=hat,b=hat,i=6481,x=0.6708784819364922,y=0.8308286378718903 a=hat,b=wye,i=6482,x=0.8345542484122913,y=0.2115567403921984 a=eks,b=wye,i=6483,x=0.6489598152434705,y=0.725168237682496 a=zee,b=wye,i=6484,x=0.12383076923326797,y=0.10227618505533276 a=wye,b=wye,i=6485,x=0.6359239484918648,y=0.6087629645637064 a=wye,b=wye,i=6486,x=0.26321351409255855,y=0.10213207378968225 a=pan,b=eks,i=6487,x=0.4153808872409316,y=0.5380953444898547 a=wye,b=zee,i=6488,x=0.4298876367578778,y=0.8740569087259292 a=pan,b=eks,i=6489,x=0.7368633007515517,y=0.3235565157293787 a=hat,b=eks,i=6490,x=0.1904681932728718,y=0.39823383688284875 a=pan,b=hat,i=6491,x=0.40162401516303015,y=0.799676980010159 a=zee,b=zee,i=6492,x=0.6594479172290615,y=0.14884894304112206 a=hat,b=pan,i=6493,x=0.17669129422616314,y=0.17133013634096628 a=wye,b=hat,i=6494,x=0.4038680680240342,y=0.9000810248451881 a=pan,b=pan,i=6495,x=0.7458398054156802,y=0.15394809221770678 a=hat,b=wye,i=6496,x=0.024616285726912657,y=0.5198835249687588 a=eks,b=pan,i=6497,x=0.1184790227809902,y=0.7840803727709396 a=zee,b=pan,i=6498,x=0.9228447198201761,y=0.09844115301637657 a=zee,b=zee,i=6499,x=0.5093537663250951,y=0.5070363131757412 a=wye,b=wye,i=6500,x=0.04793995870348999,y=0.7326376271762662 a=wye,b=zee,i=6501,x=0.857769146584233,y=0.7284491562757176 a=hat,b=wye,i=6502,x=0.13952314891314033,y=0.21138680405955823 a=hat,b=zee,i=6503,x=0.0821042436799082,y=0.2380454193004119 a=zee,b=pan,i=6504,x=0.22170850644080387,y=0.8591089479037638 a=pan,b=pan,i=6505,x=0.6670057101772067,y=0.369664928277994 a=wye,b=eks,i=6506,x=0.2228766869756198,y=0.23547292675257847 a=hat,b=hat,i=6507,x=0.2037318613195901,y=0.8653218491418396 a=zee,b=hat,i=6508,x=0.5293143753649202,y=0.3032899464869183 a=wye,b=hat,i=6509,x=0.22689252452538788,y=0.01540955658171872 a=zee,b=wye,i=6510,x=0.03761238359284913,y=0.04430693507101946 a=pan,b=eks,i=6511,x=0.4156974178513727,y=0.6505604437223226 a=zee,b=wye,i=6512,x=0.5717578999541683,y=0.583339576596991 a=eks,b=wye,i=6513,x=0.2576348537935582,y=0.02891940447221053 a=zee,b=wye,i=6514,x=0.7108561722879589,y=0.5343855601720103 a=pan,b=wye,i=6515,x=0.20906185021483092,y=0.7346487645413573 a=pan,b=pan,i=6516,x=0.16436389636346782,y=0.06142769237145096 a=wye,b=hat,i=6517,x=0.9499786087950957,y=0.9169897551951627 a=hat,b=wye,i=6518,x=0.11226676145430348,y=0.3389463928651728 a=zee,b=zee,i=6519,x=0.2323137819710005,y=0.21425984944922594 a=wye,b=eks,i=6520,x=0.7524818540927941,y=0.9710297784453114 a=pan,b=wye,i=6521,x=0.4364322319855357,y=0.8466924609197165 a=hat,b=wye,i=6522,x=0.9673009309832951,y=0.33015592019384987 a=pan,b=zee,i=6523,x=0.5065662166353603,y=0.017151576997059825 a=wye,b=pan,i=6524,x=0.4239737405316326,y=0.24586595155563684 a=wye,b=eks,i=6525,x=0.666984074931497,y=0.5881526921363845 a=zee,b=eks,i=6526,x=0.7035055465426836,y=0.9029683394431433 a=hat,b=hat,i=6527,x=0.48083662190863985,y=0.6503200309394563 a=eks,b=eks,i=6528,x=0.35544201168726874,y=0.26203559629802176 a=eks,b=wye,i=6529,x=0.6483532909041725,y=0.27350007757294326 a=hat,b=zee,i=6530,x=0.6725507341754717,y=0.8211175540313643 a=pan,b=eks,i=6531,x=0.9263381279440988,y=0.7230758102834317 a=zee,b=eks,i=6532,x=0.9504925230076702,y=0.3707214379298016 a=pan,b=hat,i=6533,x=0.2968690724659714,y=0.5710523550663877 a=hat,b=wye,i=6534,x=0.09447988348358638,y=0.21201328127649932 a=hat,b=eks,i=6535,x=0.0022062240850495574,y=0.3458564847842249 a=eks,b=eks,i=6536,x=0.08799574586608505,y=0.16463115926454674 a=pan,b=pan,i=6537,x=0.15749262177445233,y=0.3950102135965362 a=hat,b=hat,i=6538,x=0.4868613643303731,y=0.8080900505454058 a=pan,b=eks,i=6539,x=0.7612094490147115,y=0.4401071622837852 a=hat,b=zee,i=6540,x=0.42723999009924263,y=0.5155261035021511 a=pan,b=hat,i=6541,x=0.0420481636052179,y=0.3896076829423738 a=zee,b=pan,i=6542,x=0.6629759666763753,y=0.7114746505059143 a=pan,b=pan,i=6543,x=0.8686279923185595,y=0.3493091545672151 a=pan,b=hat,i=6544,x=0.48676766407802263,y=0.2518094002262543 a=pan,b=eks,i=6545,x=0.8135981715168512,y=0.4300391107446847 a=zee,b=hat,i=6546,x=0.18939671235009936,y=0.5074696127752749 a=pan,b=wye,i=6547,x=0.7600528676641951,y=0.4426657030274146 a=hat,b=zee,i=6548,x=0.9011359340858558,y=0.6061658741277544 a=wye,b=wye,i=6549,x=0.2051254389063183,y=0.05111364491561332 a=hat,b=zee,i=6550,x=0.38066561435480195,y=0.42936645455121314 a=wye,b=pan,i=6551,x=0.018388994580471718,y=0.9954888468513496 a=wye,b=wye,i=6552,x=0.6253051834446587,y=0.29559701533864535 a=wye,b=eks,i=6553,x=0.33502063619497235,y=0.2610167700436856 a=pan,b=hat,i=6554,x=0.7802269675523349,y=0.9534940914356625 a=wye,b=hat,i=6555,x=0.005663846527729333,y=0.48584311997319796 a=eks,b=hat,i=6556,x=0.14062017897722112,y=0.005932662015826984 a=zee,b=pan,i=6557,x=0.3235867320680704,y=0.9056759816070373 a=wye,b=eks,i=6558,x=0.8070546249299714,y=0.09046129583350693 a=eks,b=hat,i=6559,x=0.9459853213004996,y=0.4362855250788259 a=pan,b=wye,i=6560,x=0.0727664463558585,y=0.025570241966542673 a=pan,b=zee,i=6561,x=0.6816547334568862,y=0.4142699086191578 a=zee,b=hat,i=6562,x=0.516217374487157,y=0.6640919516818178 a=hat,b=pan,i=6563,x=0.05685851331978431,y=0.6903540720393333 a=eks,b=wye,i=6564,x=0.7790458055803663,y=0.6522738145614022 a=hat,b=eks,i=6565,x=0.8990182808114324,y=0.971140059395297 a=eks,b=zee,i=6566,x=0.5308026859083895,y=0.6453041296190671 a=eks,b=hat,i=6567,x=0.4215632982227624,y=0.7633632892500558 a=hat,b=hat,i=6568,x=0.6015424402169296,y=0.9136579408737084 a=eks,b=zee,i=6569,x=0.07024602364065347,y=0.10258813515051479 a=hat,b=zee,i=6570,x=0.3550675740695889,y=0.007910225883702049 a=zee,b=pan,i=6571,x=0.1632710729418324,y=0.03017711376568888 a=eks,b=pan,i=6572,x=0.9270875444507882,y=0.637374878466062 a=hat,b=hat,i=6573,x=0.05509535512573205,y=0.8918234294509011 a=wye,b=wye,i=6574,x=0.9555552809704153,y=0.41421382030170906 a=pan,b=wye,i=6575,x=0.15402188087239954,y=0.8691716209727222 a=pan,b=zee,i=6576,x=0.8777708761889912,y=0.5786474005042914 a=pan,b=pan,i=6577,x=0.3993469483222466,y=0.3892398770682076 a=hat,b=hat,i=6578,x=0.8463232011086974,y=0.18319003947637869 a=wye,b=eks,i=6579,x=0.24777952654263558,y=0.27916343904186647 a=eks,b=eks,i=6580,x=0.6495626911864495,y=0.9137400574083774 a=eks,b=zee,i=6581,x=0.0552357804759368,y=0.27859129675614414 a=eks,b=wye,i=6582,x=0.047528529169082234,y=0.06138863023310337 a=zee,b=hat,i=6583,x=0.8563606600171147,y=0.015181563909825058 a=wye,b=eks,i=6584,x=0.3654798126861838,y=0.8807563837162635 a=eks,b=pan,i=6585,x=0.08337736967964804,y=0.03539849770256276 a=pan,b=wye,i=6586,x=0.29250342016498887,y=0.3069941691864093 a=wye,b=pan,i=6587,x=0.5020409286292801,y=0.009939761220784549 a=pan,b=hat,i=6588,x=0.6710775244097316,y=0.29891597994587726 a=eks,b=eks,i=6589,x=0.8981260130197878,y=0.341172072262118 a=eks,b=hat,i=6590,x=0.036271533325818894,y=0.34617217226715424 a=wye,b=pan,i=6591,x=0.42885075582120236,y=0.9638923170569789 a=eks,b=zee,i=6592,x=0.9241230700230697,y=0.7087787442946673 a=pan,b=eks,i=6593,x=0.5671688159882186,y=0.2525080171055939 a=eks,b=eks,i=6594,x=0.09678454503956313,y=0.9394372732793339 a=hat,b=wye,i=6595,x=0.2134794663649403,y=0.1743187405629919 a=pan,b=zee,i=6596,x=0.7535951031670416,y=0.3524925624995391 a=pan,b=wye,i=6597,x=0.7481435165529386,y=0.6957778649603638 a=zee,b=hat,i=6598,x=0.6210617717475871,y=0.6190922851909458 a=pan,b=zee,i=6599,x=0.18502780307376443,y=0.34510172711084 a=eks,b=hat,i=6600,x=0.34120771327893296,y=0.5437219745072818 a=zee,b=zee,i=6601,x=0.7435038730289294,y=0.06225845908254546 a=zee,b=eks,i=6602,x=0.7661471810537874,y=0.11870848331729167 a=zee,b=eks,i=6603,x=0.9777797463621237,y=0.09720023036402714 a=pan,b=hat,i=6604,x=0.422595464517281,y=0.8343132654700024 a=wye,b=hat,i=6605,x=0.10761057631214699,y=0.7430467022453479 a=pan,b=zee,i=6606,x=0.8486989983659791,y=0.6465788461912306 a=eks,b=hat,i=6607,x=0.7823679742941769,y=0.8209287515709784 a=hat,b=eks,i=6608,x=0.7400121945607447,y=0.03882673241167289 a=wye,b=hat,i=6609,x=0.12667845633514874,y=0.1111690903267013 a=hat,b=zee,i=6610,x=0.9346894562923037,y=0.10587701420327944 a=hat,b=wye,i=6611,x=0.6262544347274932,y=0.30525530738772355 a=wye,b=hat,i=6612,x=0.8337403987989883,y=0.25060970159832463 a=pan,b=zee,i=6613,x=0.8461001648282795,y=0.42374948718873573 a=hat,b=wye,i=6614,x=0.7344391388034486,y=0.25789180389511723 a=hat,b=zee,i=6615,x=0.78349042546449,y=0.44915494280220225 a=zee,b=hat,i=6616,x=0.22594744492269403,y=0.16847954740221938 a=hat,b=hat,i=6617,x=0.1680792215326481,y=0.7434162302269155 a=pan,b=zee,i=6618,x=0.034862418341202295,y=0.7671853898444302 a=wye,b=hat,i=6619,x=0.48364559195372436,y=0.5916684625577362 a=zee,b=hat,i=6620,x=0.49520075702438326,y=0.1675286620908042 a=pan,b=zee,i=6621,x=0.92531350722769,y=0.7331109839366486 a=zee,b=wye,i=6622,x=0.28966831942694526,y=0.5726274862219165 a=eks,b=pan,i=6623,x=0.8441127141759738,y=0.9967304913754049 a=wye,b=hat,i=6624,x=0.5591280937962949,y=0.6627435675727004 a=eks,b=wye,i=6625,x=0.5105119511152182,y=0.5062086629041608 a=zee,b=hat,i=6626,x=0.9866848527389168,y=0.32213040281236427 a=zee,b=pan,i=6627,x=0.021852600596809824,y=0.6287762047371142 a=wye,b=zee,i=6628,x=0.34899619352678224,y=0.6762953600092646 a=eks,b=wye,i=6629,x=0.042973374957347765,y=0.3504215411530547 a=pan,b=hat,i=6630,x=0.5318569983484858,y=0.1981595013443107 a=hat,b=zee,i=6631,x=0.3770252104819539,y=0.9521141704617042 a=zee,b=hat,i=6632,x=0.251621124332819,y=0.8820641410404748 a=hat,b=hat,i=6633,x=0.2959658325331481,y=0.13508551484281162 a=wye,b=hat,i=6634,x=0.09078570109861495,y=0.496300237950696 a=eks,b=pan,i=6635,x=0.1336818909314733,y=0.4638227719158149 a=eks,b=wye,i=6636,x=0.07517679920524767,y=0.4915331134051061 a=eks,b=wye,i=6637,x=0.3352816408227677,y=0.8140380433910319 a=wye,b=zee,i=6638,x=0.591256877732877,y=0.5915874489265203 a=zee,b=zee,i=6639,x=0.9221422139699282,y=0.47360413794657386 a=eks,b=eks,i=6640,x=0.38457971591828066,y=0.7022912637900967 a=eks,b=zee,i=6641,x=0.8781234363470478,y=0.8882819185534889 a=hat,b=pan,i=6642,x=0.005715323745672962,y=0.2447512299512158 a=eks,b=zee,i=6643,x=0.015710994394110722,y=0.33183466779705995 a=wye,b=wye,i=6644,x=0.39250510547900563,y=0.08289629956063027 a=eks,b=hat,i=6645,x=0.261494320247025,y=0.36299917636703616 a=pan,b=pan,i=6646,x=0.24764166684766364,y=0.9615131721631346 a=hat,b=zee,i=6647,x=0.07946351924617867,y=0.9130106536641815 a=pan,b=wye,i=6648,x=0.23702724653048457,y=0.11584533450215717 a=pan,b=hat,i=6649,x=0.6519700937726137,y=0.34886054594961424 a=hat,b=wye,i=6650,x=0.4661494621587131,y=0.17426048946142003 a=zee,b=eks,i=6651,x=0.47348695334894386,y=0.4301930194799014 a=pan,b=zee,i=6652,x=0.4602949257627642,y=0.49975689849461613 a=hat,b=eks,i=6653,x=0.8374977303853919,y=0.5694625331922527 a=zee,b=eks,i=6654,x=0.5422936444892872,y=0.5852344409380648 a=pan,b=hat,i=6655,x=0.6453370235827801,y=0.5399548634478539 a=wye,b=hat,i=6656,x=0.796475923939686,y=0.010301259372155425 a=pan,b=pan,i=6657,x=0.7793713291305154,y=0.43736432518686286 a=zee,b=wye,i=6658,x=0.026272697033822512,y=0.8586650268622298 a=pan,b=hat,i=6659,x=0.8340965806153038,y=0.9954916059691153 a=wye,b=hat,i=6660,x=0.797154755771274,y=0.5736771633024341 a=wye,b=zee,i=6661,x=0.8188492526845532,y=0.4439387096787365 a=eks,b=zee,i=6662,x=0.692659935953495,y=0.014750331023098417 a=pan,b=hat,i=6663,x=0.5189752727315453,y=0.27114682476438556 a=wye,b=pan,i=6664,x=0.8410807442089315,y=0.5618783788762672 a=zee,b=wye,i=6665,x=0.750023688775221,y=0.8540304746331103 a=hat,b=hat,i=6666,x=0.6568757213906617,y=0.023741446240077235 a=hat,b=zee,i=6667,x=0.5925080941699123,y=0.26022346139524233 a=pan,b=zee,i=6668,x=0.5792938319765554,y=0.549059780249718 a=pan,b=pan,i=6669,x=0.40578589985803115,y=0.991882019921512 a=hat,b=pan,i=6670,x=0.5062335371686814,y=0.25014874809168464 a=zee,b=pan,i=6671,x=0.8485250852135324,y=0.42291127183964006 a=eks,b=zee,i=6672,x=0.8633240831439754,y=0.805776035676606 a=eks,b=pan,i=6673,x=0.5844555116526361,y=0.9258656111924322 a=eks,b=pan,i=6674,x=0.07876117692793061,y=0.6162828639866715 a=eks,b=zee,i=6675,x=0.6002332633428729,y=0.02737805769773405 a=zee,b=eks,i=6676,x=0.7361247716287402,y=0.4981984945475131 a=eks,b=hat,i=6677,x=0.07057457921469279,y=0.27327598383734664 a=wye,b=eks,i=6678,x=0.13317313653408192,y=0.833936738251508 a=zee,b=pan,i=6679,x=0.36757640497694033,y=0.15666791431421667 a=pan,b=wye,i=6680,x=0.7228498260423928,y=0.16029570100550605 a=zee,b=wye,i=6681,x=0.23575638607482352,y=0.5267963423656761 a=wye,b=wye,i=6682,x=0.05864862278509386,y=0.968278945419499 a=hat,b=pan,i=6683,x=0.6654580371987767,y=0.9155359993727842 a=eks,b=hat,i=6684,x=0.11258817875708949,y=0.5202664086593939 a=wye,b=pan,i=6685,x=0.2633941946281759,y=0.611467934771218 a=eks,b=eks,i=6686,x=0.8316637163146731,y=0.3179748046122216 a=eks,b=hat,i=6687,x=0.4611093872251627,y=0.4933386211537618 a=pan,b=pan,i=6688,x=0.13485289624642116,y=0.30288273557456213 a=zee,b=zee,i=6689,x=0.9273055357466653,y=0.054449902661783844 a=zee,b=hat,i=6690,x=0.5203670639579945,y=0.7962270767115127 a=hat,b=wye,i=6691,x=0.6886657290157878,y=0.9480662991851704 a=eks,b=hat,i=6692,x=0.09793478921203369,y=0.45646997283913904 a=zee,b=hat,i=6693,x=0.6887185377427641,y=0.2725371105355715 a=pan,b=wye,i=6694,x=0.08459665725133014,y=0.6480627030857502 a=eks,b=wye,i=6695,x=0.9070253492729443,y=0.8359657479869284 a=eks,b=pan,i=6696,x=0.5213061786374872,y=0.9436108956847651 a=eks,b=wye,i=6697,x=0.38079548707281974,y=0.7146301348085543 a=pan,b=pan,i=6698,x=0.24992815869516327,y=0.7828473032320792 a=wye,b=eks,i=6699,x=0.4863235665190313,y=0.024761627522226104 a=eks,b=wye,i=6700,x=0.11486299826891566,y=0.7732953412442202 a=eks,b=pan,i=6701,x=0.11289143979118377,y=0.5154344501380237 a=pan,b=pan,i=6702,x=0.09897861729160984,y=0.1632726180578581 a=zee,b=pan,i=6703,x=0.6063357396844151,y=0.9440640953293378 a=wye,b=zee,i=6704,x=0.9929065501226577,y=0.9563353213992627 a=zee,b=zee,i=6705,x=0.6695263366217671,y=0.9094821746571289 a=eks,b=hat,i=6706,x=0.6005219270357064,y=0.7674256844260718 a=pan,b=pan,i=6707,x=0.7568092546831552,y=0.30011145741383816 a=eks,b=wye,i=6708,x=0.3630047546497195,y=0.3731502489099452 a=pan,b=wye,i=6709,x=0.6499789136488362,y=0.9975126213435949 a=pan,b=eks,i=6710,x=0.9822306336820864,y=0.9518481162696052 a=wye,b=wye,i=6711,x=0.6529313233924365,y=0.16117133810135675 a=hat,b=eks,i=6712,x=0.0038597545092279306,y=0.04201771404673427 a=hat,b=hat,i=6713,x=0.4327034173748717,y=0.40765932026954144 a=pan,b=eks,i=6714,x=0.6768196355507363,y=0.4866501412692976 a=pan,b=pan,i=6715,x=0.941886673981322,y=0.6955697200870666 a=wye,b=eks,i=6716,x=0.7399610338026938,y=0.7410171019957901 a=wye,b=eks,i=6717,x=0.867978110755599,y=0.5614068975084064 a=eks,b=hat,i=6718,x=0.24524935543537574,y=0.6137124860108586 a=zee,b=pan,i=6719,x=0.1581978243465465,y=0.8467816744572415 a=eks,b=zee,i=6720,x=0.14299332956774857,y=0.3448281281418095 a=zee,b=hat,i=6721,x=0.6375447951528392,y=0.9688821643544498 a=zee,b=wye,i=6722,x=0.13464497699175937,y=0.5072303450060313 a=wye,b=pan,i=6723,x=0.08857317290220112,y=0.22813936075330932 a=wye,b=zee,i=6724,x=0.9180101472288132,y=0.4772553128152984 a=eks,b=zee,i=6725,x=0.5257382125487153,y=0.28145993503907585 a=hat,b=wye,i=6726,x=0.8681656798259132,y=0.5422446735924256 a=hat,b=hat,i=6727,x=0.6760254739914621,y=0.38899478823906797 a=wye,b=hat,i=6728,x=0.19864833682412852,y=0.07849170872015998 a=wye,b=eks,i=6729,x=0.0725487679182576,y=0.6718016982732007 a=zee,b=pan,i=6730,x=0.664189415821601,y=0.9231485351812634 a=pan,b=eks,i=6731,x=0.3748183297884402,y=0.14651294307202578 a=hat,b=eks,i=6732,x=0.19051425073038974,y=0.2534461176951027 a=hat,b=pan,i=6733,x=0.420176119585988,y=0.5325617521489726 a=pan,b=pan,i=6734,x=0.1580686510357059,y=0.5545289683879925 a=pan,b=zee,i=6735,x=0.34376736360822124,y=0.8783403362652445 a=wye,b=eks,i=6736,x=0.1720144618863838,y=0.07472067325986242 a=wye,b=zee,i=6737,x=0.7735497202626829,y=0.39904858822422706 a=zee,b=wye,i=6738,x=0.6916920100867227,y=0.15860111481046824 a=pan,b=pan,i=6739,x=0.7724445003059343,y=0.10599738910890832 a=hat,b=hat,i=6740,x=0.1638749831040246,y=0.33942864618967783 a=hat,b=pan,i=6741,x=0.5132827171435942,y=0.30511383816187543 a=eks,b=pan,i=6742,x=0.7821265240696961,y=0.5002704992494771 a=zee,b=pan,i=6743,x=0.5963266420934059,y=0.29065786430330587 a=pan,b=pan,i=6744,x=0.3890975093181427,y=0.13247688252534073 a=eks,b=eks,i=6745,x=0.17791482999411534,y=0.49908183588985267 a=eks,b=zee,i=6746,x=0.9727441527624078,y=0.1416421024960326 a=zee,b=wye,i=6747,x=0.723551831416918,y=0.2807129773827569 a=eks,b=hat,i=6748,x=0.5710553437496192,y=0.06737951674524745 a=pan,b=wye,i=6749,x=0.9967283968435253,y=0.4586425241398737 a=zee,b=eks,i=6750,x=0.411125321089135,y=0.47877014881710245 a=wye,b=pan,i=6751,x=0.5228421813260895,y=0.9476995312395788 a=eks,b=hat,i=6752,x=0.5272144612869077,y=0.5823689048097198 a=pan,b=pan,i=6753,x=0.6092847281248764,y=0.08166906720980371 a=pan,b=pan,i=6754,x=0.03127627780352893,y=0.7077713273089731 a=wye,b=pan,i=6755,x=0.9394158998984187,y=0.4097422792388996 a=eks,b=pan,i=6756,x=0.7136237306098985,y=0.44757595968820907 a=eks,b=wye,i=6757,x=0.6668899487792558,y=0.6148196125913775 a=wye,b=eks,i=6758,x=0.24918942240065567,y=0.1175614364985561 a=hat,b=hat,i=6759,x=0.4409476763420297,y=0.37269928936748364 a=wye,b=eks,i=6760,x=0.7875787294909694,y=0.039280684999618454 a=eks,b=wye,i=6761,x=0.846782848681552,y=0.7680754064510079 a=wye,b=eks,i=6762,x=0.6630016803214965,y=0.35559642495764865 a=hat,b=zee,i=6763,x=0.8827431489428148,y=0.8101223666047421 a=wye,b=eks,i=6764,x=0.8818772544000334,y=0.5852259091501919 a=wye,b=wye,i=6765,x=0.6302491045216058,y=0.35058599080261854 a=wye,b=zee,i=6766,x=0.8428810279931461,y=0.06453198742123845 a=hat,b=eks,i=6767,x=0.41034801950126865,y=0.7814715051154284 a=eks,b=hat,i=6768,x=0.807164432383456,y=0.10155228923520643 a=wye,b=zee,i=6769,x=0.015938042152491505,y=0.2467410432381938 a=zee,b=wye,i=6770,x=0.4647151786207453,y=0.09586765050852464 a=zee,b=wye,i=6771,x=0.5282093689650457,y=0.45570775635349325 a=pan,b=wye,i=6772,x=0.8587471775202551,y=0.07946050584311648 a=wye,b=pan,i=6773,x=0.1251517157188331,y=0.14006157275798192 a=wye,b=zee,i=6774,x=0.6171307886636815,y=0.23263807093903088 a=zee,b=eks,i=6775,x=0.7107364083112168,y=0.747744177326698 a=pan,b=eks,i=6776,x=0.7402366773916875,y=0.5425967566595283 a=pan,b=pan,i=6777,x=0.8587338035081189,y=0.6815723862967287 a=hat,b=eks,i=6778,x=0.7374724325083976,y=0.33507894275895755 a=wye,b=eks,i=6779,x=0.051803530307045764,y=0.9635968624328757 a=wye,b=wye,i=6780,x=0.7420078463856731,y=0.24580232345831476 a=hat,b=pan,i=6781,x=0.31100740187371934,y=0.15295409834535245 a=eks,b=eks,i=6782,x=0.47803669544518634,y=0.9519657570611978 a=zee,b=eks,i=6783,x=0.09545968133365756,y=0.010784899546895543 a=zee,b=wye,i=6784,x=0.609956046414881,y=0.6555640945124119 a=pan,b=wye,i=6785,x=0.5316777127876826,y=0.6104961546467026 a=pan,b=wye,i=6786,x=0.25974778249116803,y=0.08881791270926387 a=eks,b=pan,i=6787,x=0.5461613458666269,y=0.40749063143865827 a=wye,b=eks,i=6788,x=0.59700206673727,y=0.5092154392509416 a=eks,b=hat,i=6789,x=0.11384620831197945,y=0.21498304087430675 a=zee,b=eks,i=6790,x=0.3259643807042226,y=0.294440283499696 a=hat,b=pan,i=6791,x=0.3918842930839752,y=0.4866508833195289 a=pan,b=pan,i=6792,x=0.5301735918581785,y=0.8191767116079914 a=zee,b=wye,i=6793,x=0.09304197140837533,y=0.41014621328207224 a=zee,b=wye,i=6794,x=0.9068197358960509,y=0.08182204172224206 a=eks,b=hat,i=6795,x=0.6802118298728432,y=0.3352065052212123 a=eks,b=wye,i=6796,x=0.5909399906562114,y=0.5580035130979556 a=eks,b=hat,i=6797,x=0.9632745089330987,y=0.7078513092089819 a=eks,b=wye,i=6798,x=0.15363778133009276,y=0.6325423246809744 a=zee,b=eks,i=6799,x=0.9004852465295646,y=0.9465220966082961 a=wye,b=zee,i=6800,x=0.24904470404318169,y=0.4920531920025397 a=zee,b=pan,i=6801,x=0.6403589395715946,y=0.11274127473071038 a=zee,b=wye,i=6802,x=0.09957278874549647,y=0.715843577221054 a=pan,b=wye,i=6803,x=0.22156558120148118,y=0.6572540721541829 a=hat,b=zee,i=6804,x=0.7027731517392186,y=0.3606531856415711 a=pan,b=hat,i=6805,x=0.8362059152851221,y=0.9472897492210541 a=wye,b=wye,i=6806,x=0.46185714288118773,y=0.9932895877413421 a=pan,b=eks,i=6807,x=0.5997233937030831,y=0.005793331189633544 a=hat,b=zee,i=6808,x=0.8753345579411498,y=0.04597732362263285 a=wye,b=wye,i=6809,x=0.8141741575210425,y=0.16783710466982837 a=zee,b=pan,i=6810,x=0.15680318230138823,y=0.9869386425704416 a=eks,b=wye,i=6811,x=0.7065407352836623,y=0.8368678138790903 a=wye,b=wye,i=6812,x=0.4084090484238747,y=0.9288230265446697 a=eks,b=eks,i=6813,x=0.22195791037233625,y=0.46000678721121724 a=hat,b=zee,i=6814,x=0.06615677821987875,y=0.9808603644184125 a=zee,b=zee,i=6815,x=0.5000818809944109,y=0.771946292891575 a=wye,b=pan,i=6816,x=0.9209420415686578,y=0.13984027426134304 a=hat,b=wye,i=6817,x=0.8610216667264953,y=0.5382429359595315 a=wye,b=hat,i=6818,x=0.9490099609383663,y=0.06552721253446325 a=eks,b=pan,i=6819,x=0.5703992590220686,y=0.8637215064086881 a=hat,b=zee,i=6820,x=0.2416040451020256,y=0.9776127555858962 a=zee,b=hat,i=6821,x=0.4912693762402818,y=0.5204860488656815 a=hat,b=eks,i=6822,x=0.1966228532052421,y=0.975043572227354 a=wye,b=zee,i=6823,x=0.5781208624185773,y=0.8409446241801248 a=eks,b=hat,i=6824,x=0.43385175975083057,y=0.41792395879700195 a=eks,b=eks,i=6825,x=0.24716919525264047,y=0.9659819670046521 a=zee,b=pan,i=6826,x=0.8340499179886257,y=0.9535536917685269 a=pan,b=pan,i=6827,x=0.7938211511368373,y=0.4559826830758338 a=pan,b=hat,i=6828,x=0.3431841672353826,y=0.9731740314694275 a=zee,b=hat,i=6829,x=0.41031480623763106,y=0.45880274972572666 a=pan,b=pan,i=6830,x=0.1142681517107742,y=0.2829811068526855 a=eks,b=wye,i=6831,x=0.6311471125678166,y=0.35079658233745936 a=hat,b=pan,i=6832,x=0.7805431061337192,y=0.6499156385099167 a=wye,b=hat,i=6833,x=0.5448291589816822,y=0.24233292928888261 a=pan,b=wye,i=6834,x=0.1500861412508071,y=0.4288594929835393 a=hat,b=zee,i=6835,x=0.3554971979233431,y=0.7003527906078075 a=eks,b=eks,i=6836,x=0.8314643867997237,y=0.6792470433081391 a=wye,b=eks,i=6837,x=0.1301888660610001,y=0.9808398029246085 a=hat,b=wye,i=6838,x=0.7770652463104809,y=0.6687521390314989 a=eks,b=hat,i=6839,x=0.6771345756994601,y=0.3254097306513094 a=eks,b=zee,i=6840,x=0.6482286253811516,y=0.8094333984928788 a=wye,b=pan,i=6841,x=0.2567333227180485,y=0.3632000329956243 a=hat,b=pan,i=6842,x=0.5591318142449471,y=0.30371083367502205 a=wye,b=eks,i=6843,x=0.22133780427833827,y=0.12550147451196636 a=pan,b=zee,i=6844,x=0.6378228582954686,y=0.173029586655695 a=wye,b=zee,i=6845,x=0.18295530986921293,y=0.5733022672604575 a=wye,b=eks,i=6846,x=0.6423397517155203,y=0.8356059098780667 a=wye,b=eks,i=6847,x=0.5654097817406883,y=0.4917356814957925 a=pan,b=hat,i=6848,x=0.13005488453891356,y=0.36376504302138823 a=pan,b=pan,i=6849,x=0.7292341394730394,y=0.9619604141937782 a=wye,b=hat,i=6850,x=0.9700608965235021,y=0.3990830943961574 a=hat,b=zee,i=6851,x=0.626771477414734,y=0.20044484931996054 a=hat,b=hat,i=6852,x=0.12907922332721755,y=0.9897873547381626 a=zee,b=hat,i=6853,x=0.16224652017611052,y=0.3566205026903966 a=pan,b=pan,i=6854,x=0.7113055088893854,y=0.8848278821601264 a=hat,b=zee,i=6855,x=0.03040686539549997,y=0.7759017452917722 a=hat,b=pan,i=6856,x=0.6726315514891058,y=0.9389924558403268 a=hat,b=zee,i=6857,x=0.1411606825265106,y=0.7112133367607912 a=wye,b=wye,i=6858,x=0.3955235311928522,y=0.1986261607297174 a=wye,b=pan,i=6859,x=0.3196180023166212,y=0.22620149742138462 a=eks,b=wye,i=6860,x=0.7484529088599197,y=0.9458674650980478 a=hat,b=eks,i=6861,x=0.5333359352881868,y=0.6705965726039589 a=eks,b=pan,i=6862,x=0.03969161279974032,y=0.6429740057666072 a=pan,b=wye,i=6863,x=0.8290379851119192,y=0.4133616397651474 a=hat,b=eks,i=6864,x=0.5485065278651766,y=0.5820232711323319 a=pan,b=zee,i=6865,x=0.9369018030633546,y=0.2730985696260336 a=eks,b=wye,i=6866,x=0.7518803820253178,y=0.1629275612174501 a=zee,b=wye,i=6867,x=0.9102230409548707,y=0.9019213473878609 a=pan,b=zee,i=6868,x=0.4631144547528713,y=0.17716733576639176 a=hat,b=eks,i=6869,x=0.2542372110197165,y=0.30416858126881696 a=pan,b=wye,i=6870,x=0.4253800398968478,y=0.033574775026327885 a=eks,b=eks,i=6871,x=0.5063694703652393,y=0.006032505525179865 a=wye,b=eks,i=6872,x=0.38036352987366395,y=0.46731687201043415 a=wye,b=eks,i=6873,x=0.9798362101131622,y=0.797643782226173 a=eks,b=hat,i=6874,x=0.5227336833787608,y=0.9908448955682759 a=eks,b=zee,i=6875,x=0.606422651768782,y=0.914840315532674 a=pan,b=hat,i=6876,x=0.5129530277212709,y=0.7790386991794965 a=hat,b=eks,i=6877,x=0.11459832283361682,y=0.767333306893435 a=zee,b=pan,i=6878,x=0.31397281280064293,y=0.16291546501309395 a=pan,b=zee,i=6879,x=0.5284562057774806,y=0.7918033883536163 a=eks,b=wye,i=6880,x=0.5984387679261401,y=0.9753479770314387 a=zee,b=hat,i=6881,x=0.5862597507571483,y=0.7707420703176064 a=pan,b=eks,i=6882,x=0.5334986785639318,y=0.9783513827876675 a=zee,b=wye,i=6883,x=0.7679069545156161,y=0.7810806767827133 a=hat,b=pan,i=6884,x=0.25121382521102964,y=0.08373878679612079 a=wye,b=hat,i=6885,x=0.05142094104336947,y=0.9978267954724354 a=pan,b=zee,i=6886,x=0.27515151044558905,y=0.8898719178215098 a=hat,b=wye,i=6887,x=0.3290836499787756,y=0.8942355162084987 a=zee,b=pan,i=6888,x=0.7705250058516857,y=0.9061349225471161 a=eks,b=pan,i=6889,x=0.8727519098818294,y=0.38422445867709476 a=zee,b=hat,i=6890,x=0.07814285019815281,y=0.6524720493819127 a=eks,b=eks,i=6891,x=0.553350512403786,y=0.21084722161813896 a=zee,b=hat,i=6892,x=0.307754111293953,y=0.5638948621786333 a=zee,b=zee,i=6893,x=0.8600709509023364,y=0.160849705704027 a=zee,b=hat,i=6894,x=0.5702891448833654,y=0.4084412240884401 a=zee,b=hat,i=6895,x=0.6946417768735003,y=0.41460355943617566 a=zee,b=hat,i=6896,x=0.7359164967591003,y=0.8293086338798401 a=wye,b=hat,i=6897,x=0.051569812567012985,y=0.7086891870318104 a=wye,b=wye,i=6898,x=0.890610959944813,y=0.42067321781938505 a=zee,b=zee,i=6899,x=0.5568256158466047,y=0.15682857405624617 a=pan,b=pan,i=6900,x=0.46106520857783606,y=0.8984962995391143 a=zee,b=zee,i=6901,x=0.15447805903030032,y=0.3708113295153489 a=wye,b=hat,i=6902,x=0.2178563623721872,y=0.5234598648171618 a=wye,b=eks,i=6903,x=0.22666531785803,y=0.6725621891005873 a=hat,b=wye,i=6904,x=0.8610376333440763,y=0.7594915846085165 a=zee,b=pan,i=6905,x=0.2561178270791922,y=0.11749615398320445 a=hat,b=zee,i=6906,x=0.07026123437146103,y=0.8267280415036612 a=wye,b=zee,i=6907,x=0.6367788848968293,y=0.6394774166453675 a=wye,b=zee,i=6908,x=0.809527772497878,y=0.13573629343090665 a=hat,b=hat,i=6909,x=0.2602273628092978,y=0.6319094113304579 a=pan,b=wye,i=6910,x=0.25097439132798516,y=0.0005109887783484313 a=zee,b=zee,i=6911,x=0.8474137462624203,y=0.25704106383367986 a=zee,b=eks,i=6912,x=0.8996806626412216,y=0.8543839233593294 a=pan,b=zee,i=6913,x=0.6587566128742129,y=0.5632886251369115 a=eks,b=pan,i=6914,x=0.6621105804379062,y=0.9655406039971886 a=eks,b=hat,i=6915,x=0.2111094032818116,y=0.5848242928084593 a=zee,b=hat,i=6916,x=0.984302853476379,y=0.3318129327554279 a=wye,b=eks,i=6917,x=0.4116075902695022,y=0.28661075899283883 a=hat,b=zee,i=6918,x=0.9078126587488162,y=0.825042025154357 a=hat,b=wye,i=6919,x=0.6271510270374615,y=0.2788131116617252 a=eks,b=pan,i=6920,x=0.5871441514609353,y=0.8959550649206074 a=zee,b=wye,i=6921,x=0.5169699337780084,y=0.8908217878266501 a=hat,b=zee,i=6922,x=0.26862211703298666,y=0.7329656688559485 a=wye,b=hat,i=6923,x=0.9326808746284245,y=0.1899255490512184 a=hat,b=zee,i=6924,x=0.18898941655772628,y=0.41248127061100026 a=eks,b=eks,i=6925,x=0.013945565190257692,y=0.5578850256771833 a=eks,b=eks,i=6926,x=0.48658959418573866,y=0.12700817464144343 a=pan,b=pan,i=6927,x=0.2148229483341345,y=0.142698457109815 a=wye,b=wye,i=6928,x=0.9723961772197747,y=0.9337468605908721 a=pan,b=hat,i=6929,x=0.39047545698773434,y=0.1014408675739632 a=eks,b=zee,i=6930,x=0.5526320529536692,y=0.6589359191373861 a=zee,b=pan,i=6931,x=0.9169134272880114,y=0.45914482802505263 a=wye,b=eks,i=6932,x=0.335776156098611,y=0.5748799322742809 a=pan,b=zee,i=6933,x=0.736088726276053,y=0.9511504821090352 a=pan,b=hat,i=6934,x=0.0735762788752764,y=0.0008249210316072508 a=hat,b=hat,i=6935,x=0.8448124844892154,y=0.7472136644468284 a=wye,b=zee,i=6936,x=0.8005403193787164,y=0.00364938998415798 a=eks,b=wye,i=6937,x=0.21622217154383783,y=0.693609603948259 a=pan,b=eks,i=6938,x=0.3920264992178498,y=0.7658079570315041 a=pan,b=pan,i=6939,x=0.9322271691157334,y=0.5636509019339512 a=pan,b=wye,i=6940,x=0.7428995263807269,y=0.28179583615338055 a=hat,b=eks,i=6941,x=0.7647380306778612,y=0.5588346481843296 a=eks,b=zee,i=6942,x=0.43808251265668563,y=0.7626481299623035 a=wye,b=pan,i=6943,x=0.9077501006486136,y=0.15938270549685063 a=zee,b=hat,i=6944,x=0.30931352961195646,y=0.7930984054369467 a=zee,b=zee,i=6945,x=0.7497323025761014,y=0.19551835687807828 a=hat,b=eks,i=6946,x=0.06859192488355459,y=0.18197505910402123 a=pan,b=eks,i=6947,x=0.6992727384765998,y=0.29778601894865464 a=pan,b=hat,i=6948,x=0.6806028930853153,y=0.5337351071127955 a=wye,b=hat,i=6949,x=0.8798782820732383,y=0.08851766994161492 a=eks,b=wye,i=6950,x=0.5484166834064047,y=0.5444329351784222 a=pan,b=hat,i=6951,x=0.26580629226731123,y=0.6717468181544698 a=wye,b=hat,i=6952,x=0.3046906425663285,y=0.9311855954257118 a=wye,b=hat,i=6953,x=0.0716884908750034,y=0.7032897899381292 a=zee,b=pan,i=6954,x=0.19883557252817674,y=0.8081642410948915 a=zee,b=wye,i=6955,x=0.2873302616631028,y=0.8940998424635924 a=pan,b=wye,i=6956,x=0.05509311089172042,y=0.02187042391982985 a=zee,b=wye,i=6957,x=0.6879906058837991,y=0.12542105731118525 a=hat,b=wye,i=6958,x=0.18834573262459287,y=0.5850606930814083 a=eks,b=pan,i=6959,x=0.11939644968502994,y=0.5520356552775578 a=wye,b=pan,i=6960,x=0.3153717815038891,y=0.09047586220595472 a=zee,b=wye,i=6961,x=0.6007313242961704,y=0.6613290251670858 a=pan,b=zee,i=6962,x=0.7601533500363858,y=0.8925522323934668 a=wye,b=pan,i=6963,x=0.48448541281210233,y=0.41562920864135944 a=hat,b=eks,i=6964,x=0.4992605837600408,y=0.43605518279149746 a=wye,b=hat,i=6965,x=0.45740161659615763,y=0.04534932831025773 a=hat,b=pan,i=6966,x=0.7533879705727782,y=0.5865175721970042 a=eks,b=wye,i=6967,x=0.9773513257418902,y=0.2380306718479056 a=zee,b=zee,i=6968,x=0.6712412554088817,y=0.2720254276549653 a=wye,b=wye,i=6969,x=0.31490517543879204,y=0.21016765203059373 a=hat,b=zee,i=6970,x=0.797989047174311,y=0.2162177019841508 a=hat,b=eks,i=6971,x=0.05477486899188533,y=0.5389943813219003 a=wye,b=wye,i=6972,x=0.4404514385321253,y=0.7283283568308369 a=eks,b=zee,i=6973,x=0.8858598587998294,y=0.6368695546608352 a=zee,b=wye,i=6974,x=0.989576281733764,y=0.6583358951055004 a=eks,b=pan,i=6975,x=0.1301868947541912,y=0.9369685664682424 a=wye,b=wye,i=6976,x=0.3024970191010684,y=0.2093604064761977 a=zee,b=pan,i=6977,x=0.7855530401666628,y=0.9857367912810565 a=pan,b=hat,i=6978,x=0.9643587082677965,y=0.3525023561742381 a=zee,b=hat,i=6979,x=0.236940011648326,y=0.43182187533436656 a=zee,b=eks,i=6980,x=0.7036947557005062,y=0.8967163177168612 a=zee,b=pan,i=6981,x=0.7258773601437264,y=0.43569247036733716 a=pan,b=eks,i=6982,x=0.0009579203969094507,y=0.4374451455672883 a=pan,b=eks,i=6983,x=0.414932981812524,y=0.43196390781557925 a=eks,b=eks,i=6984,x=0.9329999431393118,y=0.17135830698518684 a=pan,b=eks,i=6985,x=0.2597251524181662,y=0.17875541966558117 a=wye,b=pan,i=6986,x=0.397846421602455,y=0.061580742680189204 a=eks,b=hat,i=6987,x=0.10959780180161571,y=0.8943020336797796 a=zee,b=zee,i=6988,x=0.9430266721644799,y=0.5094104013079503 a=eks,b=hat,i=6989,x=0.3313418699976328,y=0.33567997892328394 a=eks,b=zee,i=6990,x=0.5148133498496276,y=0.6918563081083983 a=hat,b=wye,i=6991,x=0.25547073172247026,y=0.20184384726111237 a=pan,b=pan,i=6992,x=0.03213631773319936,y=0.554769673785168 a=wye,b=wye,i=6993,x=0.8254022878057393,y=0.633291096076743 a=pan,b=eks,i=6994,x=0.3537340849132855,y=0.8841969050289067 a=eks,b=pan,i=6995,x=0.09806828374128973,y=0.6430042633610615 a=wye,b=zee,i=6996,x=0.5747272683926599,y=0.48989582464308623 a=pan,b=zee,i=6997,x=0.7983517224073071,y=0.5557697277179173 a=zee,b=zee,i=6998,x=0.7651332678935355,y=0.1986723127864063 a=wye,b=wye,i=6999,x=0.31230656247460964,y=0.7709719364206021 a=hat,b=wye,i=7000,x=0.44889249877909887,y=0.9296219735657666 a=pan,b=hat,i=7001,x=0.1931728782354155,y=0.9434264276805716 a=hat,b=wye,i=7002,x=0.41061585650926835,y=0.01643773647124569 a=zee,b=wye,i=7003,x=0.5815308271025876,y=0.07558886006933907 a=hat,b=hat,i=7004,x=0.5167987887837867,y=0.6125153714308963 a=hat,b=zee,i=7005,x=0.17030551513160364,y=0.6743869951544157 a=zee,b=eks,i=7006,x=0.9635379226473363,y=0.29850368521754844 a=pan,b=eks,i=7007,x=0.20071792427547297,y=0.8474599823946072 a=wye,b=wye,i=7008,x=0.8591581165484377,y=0.3991724887525355 a=zee,b=pan,i=7009,x=0.3868986728643612,y=0.32414353523303663 a=hat,b=eks,i=7010,x=0.6030024004661663,y=0.3056681212721363 a=eks,b=pan,i=7011,x=0.08663635855557505,y=0.8292216812769441 a=pan,b=wye,i=7012,x=0.718361521407771,y=0.5051204438264707 a=pan,b=wye,i=7013,x=0.277094876326926,y=0.602002918971647 a=wye,b=eks,i=7014,x=0.7012074385988786,y=0.5007374216681656 a=zee,b=pan,i=7015,x=0.5613769792191474,y=0.2784096473095522 a=zee,b=wye,i=7016,x=0.9594027753815709,y=0.21779948075500577 a=eks,b=wye,i=7017,x=0.5420542017862827,y=0.36305123317879384 a=zee,b=hat,i=7018,x=0.32805123696394034,y=0.5124093456505748 a=wye,b=eks,i=7019,x=0.3036229968730817,y=0.23518690587775104 a=zee,b=eks,i=7020,x=0.4316289204904483,y=0.08091854356676809 a=hat,b=zee,i=7021,x=0.863877436043872,y=0.5856682390415403 a=zee,b=hat,i=7022,x=0.2071927381626798,y=0.5309301582209865 a=pan,b=eks,i=7023,x=0.29791421670042273,y=0.07470613128293369 a=eks,b=wye,i=7024,x=0.8917532472992171,y=0.14489189839111738 a=hat,b=pan,i=7025,x=0.37840242944286007,y=0.5252842371930347 a=pan,b=zee,i=7026,x=0.5129987522412781,y=0.6196138088300045 a=zee,b=wye,i=7027,x=0.23097612498471853,y=0.86560943277181 a=zee,b=eks,i=7028,x=0.5584826667497241,y=0.7683156302547838 a=hat,b=pan,i=7029,x=0.9655789508856257,y=0.5847058626759788 a=zee,b=pan,i=7030,x=0.6277332467942169,y=0.6792611974173626 a=pan,b=wye,i=7031,x=0.6131961433966792,y=0.687915924439632 a=pan,b=hat,i=7032,x=0.9325179960861075,y=0.9058746805470116 a=zee,b=wye,i=7033,x=0.08845711389601285,y=0.6556664190853554 a=wye,b=wye,i=7034,x=0.6178564629606926,y=0.257518710051613 a=pan,b=pan,i=7035,x=0.6283536854585481,y=0.2469987747711726 a=wye,b=pan,i=7036,x=0.7418713116937065,y=0.21710781972748616 a=pan,b=zee,i=7037,x=0.33589607439034086,y=0.020535990195571174 a=zee,b=zee,i=7038,x=0.2760987429128404,y=0.4680732030302005 a=hat,b=wye,i=7039,x=0.7395205341627435,y=0.7057475465708692 a=eks,b=zee,i=7040,x=0.6082940902168954,y=0.48538987636118824 a=wye,b=hat,i=7041,x=0.20266698834916153,y=0.5813828944396172 a=pan,b=zee,i=7042,x=0.837647351501191,y=0.08974718944866877 a=zee,b=eks,i=7043,x=0.9227470147480153,y=0.7805110973249272 a=eks,b=hat,i=7044,x=0.9125698654022647,y=0.6003269419507505 a=pan,b=pan,i=7045,x=0.9149867225420508,y=0.8482623017705537 a=zee,b=eks,i=7046,x=0.27001776810888767,y=0.5884950099164382 a=zee,b=hat,i=7047,x=0.3821711240746809,y=0.20003488070361253 a=wye,b=zee,i=7048,x=0.20803556414051616,y=0.2099912026909062 a=hat,b=wye,i=7049,x=0.670378278494791,y=0.7076636735945074 a=hat,b=zee,i=7050,x=0.23723928107944892,y=0.14022716241391253 a=hat,b=hat,i=7051,x=0.08564555647369987,y=0.8035765944470057 a=pan,b=pan,i=7052,x=0.2551692350228507,y=0.30169763443298714 a=hat,b=hat,i=7053,x=0.5800900713331231,y=0.1120629753999538 a=wye,b=wye,i=7054,x=0.8075288799285653,y=0.40080406376291855 a=pan,b=zee,i=7055,x=0.3237065988296146,y=0.16406274536872145 a=hat,b=zee,i=7056,x=0.11778152617272919,y=0.6479030514858882 a=zee,b=hat,i=7057,x=0.3051810429960812,y=0.7908669168132235 a=eks,b=zee,i=7058,x=0.656344016455348,y=0.36896554924499647 a=eks,b=hat,i=7059,x=0.920076220476711,y=0.5876972502303767 a=hat,b=eks,i=7060,x=0.9346394642794167,y=0.6814288404781228 a=eks,b=zee,i=7061,x=0.5738169055546608,y=0.21575746069772594 a=pan,b=hat,i=7062,x=0.4847233858259188,y=0.7657727011149124 a=pan,b=wye,i=7063,x=0.39952219916088616,y=0.40591491856978035 a=hat,b=zee,i=7064,x=0.14067685725223567,y=0.3092246716986138 a=eks,b=eks,i=7065,x=0.8605698057139388,y=0.32299577521005374 a=wye,b=pan,i=7066,x=0.8824319081192505,y=0.35485300016641663 a=eks,b=eks,i=7067,x=0.6109777816801221,y=0.24224058206368682 a=pan,b=wye,i=7068,x=0.4549499403459556,y=0.49621131228697424 a=eks,b=pan,i=7069,x=0.9886201663452385,y=0.9412530719900734 a=wye,b=hat,i=7070,x=0.665041142898201,y=0.9595343437808125 a=eks,b=eks,i=7071,x=0.8618148405551886,y=0.3478823253266865 a=pan,b=zee,i=7072,x=0.2724259823227272,y=0.30192794453375993 a=pan,b=wye,i=7073,x=0.6028342052246591,y=0.07993824024604124 a=eks,b=eks,i=7074,x=0.8193690697522501,y=0.503433259768719 a=hat,b=eks,i=7075,x=0.4081232497868382,y=0.44918917218867327 a=pan,b=hat,i=7076,x=0.39435745153096624,y=0.2533507793160499 a=zee,b=eks,i=7077,x=0.9030855046114618,y=0.7353402992136046 a=zee,b=zee,i=7078,x=0.28428013807040586,y=0.3777563622186406 a=zee,b=wye,i=7079,x=0.27996765719480765,y=0.873411216265053 a=zee,b=wye,i=7080,x=0.4095476180955867,y=0.9089358780031519 a=wye,b=pan,i=7081,x=0.5027581392155828,y=0.5918516944292527 a=eks,b=wye,i=7082,x=0.17393135812804061,y=0.8723860687774272 a=wye,b=pan,i=7083,x=0.6981142504634895,y=0.5779284385442213 a=eks,b=hat,i=7084,x=0.2854516522673507,y=0.20310209686600733 a=hat,b=zee,i=7085,x=0.010890023772322621,y=0.6157830695335651 a=hat,b=zee,i=7086,x=0.9886292059134817,y=0.7404507111518657 a=hat,b=pan,i=7087,x=0.8819873483332783,y=0.4236719882838914 a=eks,b=zee,i=7088,x=0.6374047421710877,y=0.16806648423408932 a=eks,b=zee,i=7089,x=0.2711607560909379,y=0.24024418535758385 a=zee,b=pan,i=7090,x=0.23901675556827195,y=0.9642697268066455 a=hat,b=eks,i=7091,x=0.7757377070780304,y=0.9407578395112463 a=eks,b=pan,i=7092,x=0.260858501720898,y=0.6591425472718141 a=pan,b=hat,i=7093,x=0.6397441933292296,y=0.9829200046878069 a=eks,b=wye,i=7094,x=0.44868457406229934,y=0.8112443348137468 a=eks,b=wye,i=7095,x=0.0906962202117284,y=0.591681350241042 a=wye,b=pan,i=7096,x=0.07890849487936957,y=0.41485920875555027 a=wye,b=zee,i=7097,x=0.8196751485720796,y=0.9182400853440643 a=wye,b=pan,i=7098,x=0.06668588398001474,y=0.26172812514471555 a=eks,b=hat,i=7099,x=0.22008401563656388,y=0.04305085018273014 a=pan,b=pan,i=7100,x=0.9285737504002782,y=0.009817451138142141 a=hat,b=eks,i=7101,x=0.981509594449636,y=0.3512738134950749 a=hat,b=hat,i=7102,x=0.014273713288732837,y=0.7356741638793522 a=wye,b=pan,i=7103,x=0.4829108252034583,y=0.6462618208312636 a=eks,b=pan,i=7104,x=0.2936586449378221,y=0.5697398551523063 a=zee,b=hat,i=7105,x=0.2980064088882294,y=0.3531576463065931 a=zee,b=zee,i=7106,x=0.9884822924298222,y=0.9742451923102192 a=pan,b=wye,i=7107,x=0.2998044704471554,y=0.2269111558178346 a=wye,b=eks,i=7108,x=0.2586819630109063,y=0.7581262202061657 a=eks,b=zee,i=7109,x=0.6665600019130787,y=0.5478452197045156 a=zee,b=pan,i=7110,x=0.8179518622169052,y=0.44278658627392875 a=pan,b=hat,i=7111,x=0.06963315314613838,y=0.11691071591581381 a=wye,b=wye,i=7112,x=0.5792946910659483,y=0.7652424387264126 a=eks,b=pan,i=7113,x=0.2918757972941147,y=0.09568558582017328 a=eks,b=hat,i=7114,x=0.9289422804383715,y=0.0973877277219467 a=zee,b=hat,i=7115,x=0.6512838863936804,y=0.2516748002564705 a=zee,b=eks,i=7116,x=0.7404888117639189,y=0.7975704275356439 a=zee,b=wye,i=7117,x=0.3032123219266547,y=0.408039844976006 a=hat,b=eks,i=7118,x=0.34505031276366815,y=0.8337966400074031 a=wye,b=hat,i=7119,x=0.6315033401415422,y=0.9740617533706384 a=pan,b=wye,i=7120,x=0.5205183279285498,y=0.6711794774673148 a=zee,b=eks,i=7121,x=0.6246582352065935,y=0.26995458439418407 a=eks,b=eks,i=7122,x=0.7551924972639424,y=0.43086081813515076 a=pan,b=wye,i=7123,x=0.1635996059631727,y=0.9577567705724599 a=zee,b=wye,i=7124,x=0.5036489463705721,y=0.3876971054515429 a=pan,b=zee,i=7125,x=0.2551365895416149,y=0.28047087188514475 a=eks,b=pan,i=7126,x=0.7428006686642148,y=0.09900719636423816 a=pan,b=hat,i=7127,x=0.30368095354356406,y=0.2597236612256202 a=hat,b=hat,i=7128,x=0.6279447467606394,y=0.4225543625896867 a=wye,b=wye,i=7129,x=0.5482218790981049,y=0.2894225177955031 a=pan,b=pan,i=7130,x=0.5209682344960287,y=0.3459917950310737 a=pan,b=zee,i=7131,x=0.19933196272377474,y=0.33283266063310113 a=pan,b=wye,i=7132,x=0.5712931905065656,y=0.7126877408626767 a=wye,b=hat,i=7133,x=0.8722812709831377,y=0.7402713360198966 a=zee,b=zee,i=7134,x=0.8239370005383643,y=0.8999946232295659 a=hat,b=hat,i=7135,x=0.7884238740570607,y=0.502745899378346 a=zee,b=eks,i=7136,x=0.1151808584625903,y=0.09114185305034295 a=hat,b=pan,i=7137,x=0.2542302739150816,y=0.10795409059370309 a=hat,b=wye,i=7138,x=0.2410727132014231,y=0.4676445777847451 a=hat,b=pan,i=7139,x=0.34808712588524904,y=0.8828628930362004 a=zee,b=wye,i=7140,x=0.1974763738933888,y=0.05233731805135977 a=hat,b=zee,i=7141,x=0.5122141330634649,y=0.9464876262232287 a=pan,b=hat,i=7142,x=0.5253509732767064,y=0.8670318755725022 a=wye,b=hat,i=7143,x=0.21543094473021618,y=0.04601417423771059 a=zee,b=hat,i=7144,x=0.6991820521352337,y=0.729482196220355 a=eks,b=pan,i=7145,x=0.5837334896130115,y=0.3007149582733508 a=zee,b=pan,i=7146,x=0.9971541764709625,y=0.892947440752753 a=pan,b=zee,i=7147,x=0.04585989364324272,y=0.09848374190945741 a=zee,b=zee,i=7148,x=0.08359037777595768,y=0.18397726583989749 a=zee,b=hat,i=7149,x=0.7990351121845923,y=0.883654825281865 a=pan,b=eks,i=7150,x=0.06880418014853351,y=0.774850869582918 a=hat,b=pan,i=7151,x=0.7525794901534716,y=0.2866308656913933 a=hat,b=hat,i=7152,x=0.9710254927009822,y=0.2710815765754221 a=wye,b=pan,i=7153,x=0.6258726536948953,y=0.7945230748164691 a=wye,b=wye,i=7154,x=0.0785227436298842,y=0.5694736271045654 a=zee,b=eks,i=7155,x=0.33789283812701887,y=0.4922604374749663 a=pan,b=eks,i=7156,x=0.8443027153248559,y=0.6768057967242282 a=zee,b=zee,i=7157,x=0.5562106087670207,y=0.03587821373906863 a=pan,b=pan,i=7158,x=0.004511539489729266,y=0.7768848294530629 a=eks,b=wye,i=7159,x=0.3902007098058078,y=0.1663592901985712 a=wye,b=pan,i=7160,x=0.4066344147201285,y=0.9578296410706988 a=hat,b=hat,i=7161,x=0.05527312148960439,y=0.40628388765166956 a=pan,b=zee,i=7162,x=0.762250186313408,y=0.10837770076532993 a=wye,b=wye,i=7163,x=0.4555929409217334,y=0.46397391790537257 a=eks,b=pan,i=7164,x=0.5336092896068227,y=0.6717538742842986 a=zee,b=hat,i=7165,x=0.8455323374846566,y=0.0849930980915663 a=pan,b=zee,i=7166,x=0.4778764959737758,y=0.838605100252609 a=zee,b=eks,i=7167,x=0.10058553136359771,y=0.8527719709495678 a=pan,b=zee,i=7168,x=0.05484316817552892,y=0.17151702310481431 a=hat,b=wye,i=7169,x=0.20795586378052433,y=0.7648155272308214 a=eks,b=pan,i=7170,x=0.37156761781681846,y=0.8390576537440628 a=pan,b=pan,i=7171,x=0.11014202080800839,y=0.7384835945172147 a=pan,b=eks,i=7172,x=0.6981612913907711,y=0.05072492614651758 a=hat,b=wye,i=7173,x=0.18576991003719212,y=0.32538288858474795 a=wye,b=hat,i=7174,x=0.4517242075190575,y=0.7384551615771798 a=hat,b=eks,i=7175,x=0.8596787945183175,y=0.9376543180536796 a=wye,b=pan,i=7176,x=0.6724292506877466,y=0.8820892101229925 a=eks,b=wye,i=7177,x=0.5749745903887773,y=0.4151184059091343 a=wye,b=pan,i=7178,x=0.4069058311850614,y=0.8985915120635419 a=pan,b=pan,i=7179,x=0.34025617153772425,y=0.7362436479716264 a=zee,b=wye,i=7180,x=0.9735765701999921,y=0.3536158455578553 a=pan,b=hat,i=7181,x=0.33202126409882426,y=0.6393977150538188 a=wye,b=eks,i=7182,x=0.8209372270884935,y=0.22933427059194011 a=pan,b=wye,i=7183,x=0.7589482772018452,y=0.34920417666135495 a=pan,b=zee,i=7184,x=0.4443660624344251,y=0.6792046483658297 a=eks,b=hat,i=7185,x=0.16457422522306786,y=0.3254688160534126 a=pan,b=pan,i=7186,x=0.09026915761362286,y=0.023448958188875713 a=hat,b=wye,i=7187,x=0.4560687123084549,y=0.4064263428720335 a=wye,b=pan,i=7188,x=0.4956424303944521,y=0.2862948969999991 a=zee,b=zee,i=7189,x=0.6872200803930903,y=0.33825858578605605 a=wye,b=zee,i=7190,x=0.7091610020939861,y=0.11636512757451645 a=wye,b=eks,i=7191,x=0.40387119430799534,y=0.2671989768915307 a=hat,b=zee,i=7192,x=0.04140473031764258,y=0.12247713585949505 a=wye,b=eks,i=7193,x=0.7904392489862636,y=0.3255246590384645 a=pan,b=pan,i=7194,x=0.8605715825783998,y=0.30866294108908654 a=eks,b=pan,i=7195,x=0.3063063420456562,y=0.8778236978497203 a=pan,b=hat,i=7196,x=0.47951019710347087,y=0.7687346833879765 a=pan,b=pan,i=7197,x=0.571144729887671,y=0.3556625598706247 a=eks,b=eks,i=7198,x=0.21945638426831482,y=0.02350640610667476 a=hat,b=wye,i=7199,x=0.5813406427006567,y=0.3332804684828835 a=pan,b=zee,i=7200,x=0.905315344809699,y=0.1528899922373057 a=wye,b=pan,i=7201,x=0.9400232704650787,y=0.6360498242547704 a=wye,b=zee,i=7202,x=0.2595277149011631,y=0.8540466345462062 a=zee,b=zee,i=7203,x=0.6196913167679251,y=0.7693669742661702 a=pan,b=eks,i=7204,x=0.7025276205611544,y=0.5171960435307702 a=eks,b=eks,i=7205,x=0.8476919005501825,y=0.33999828204602445 a=hat,b=wye,i=7206,x=0.2484899687204748,y=0.8552754879346082 a=eks,b=wye,i=7207,x=0.5111288494558484,y=0.31828385178170016 a=wye,b=pan,i=7208,x=0.49730390768352073,y=0.040387788389040336 a=wye,b=zee,i=7209,x=0.2990551204662385,y=0.24766816596397379 a=wye,b=pan,i=7210,x=0.05433220416409046,y=0.7683173788573371 a=hat,b=zee,i=7211,x=0.5479599732793081,y=0.7309237182718691 a=hat,b=hat,i=7212,x=0.11334324090228143,y=0.4449813414016559 a=hat,b=hat,i=7213,x=0.17855300168610388,y=0.5777528971707431 a=eks,b=zee,i=7214,x=0.8432742398345661,y=0.19519802350924498 a=zee,b=eks,i=7215,x=0.027726411224188063,y=0.6253184802891883 a=wye,b=hat,i=7216,x=0.5252986145121908,y=0.9054934316514225 a=hat,b=pan,i=7217,x=0.18576029964130547,y=0.9066585641073414 a=hat,b=pan,i=7218,x=0.2996125766631278,y=0.4976607588511254 a=zee,b=zee,i=7219,x=0.6269054706790941,y=0.7732047241313896 a=zee,b=hat,i=7220,x=0.9218855933251531,y=0.9884286346489324 a=zee,b=zee,i=7221,x=0.8961118412742498,y=0.5527678285308364 a=pan,b=hat,i=7222,x=0.06750577252048573,y=0.45278767440580836 a=pan,b=zee,i=7223,x=0.5422551743173196,y=0.48196997280820075 a=eks,b=eks,i=7224,x=0.826281664166814,y=0.7784066577349854 a=eks,b=pan,i=7225,x=0.21428073770333067,y=0.7357536006823585 a=zee,b=hat,i=7226,x=0.3525785753907552,y=0.8580740440780245 a=eks,b=eks,i=7227,x=0.5839736448682071,y=0.8252023673907429 a=eks,b=hat,i=7228,x=0.9933636751222338,y=0.20481742503678568 a=eks,b=pan,i=7229,x=0.04398478871595091,y=0.7794740728564747 a=eks,b=pan,i=7230,x=0.6437767672345736,y=0.880694505581993 a=hat,b=eks,i=7231,x=0.8525023870231172,y=0.8371410685258226 a=eks,b=zee,i=7232,x=0.8665889356718274,y=0.727601457029631 a=pan,b=pan,i=7233,x=0.16532133170819407,y=0.6129115845589822 a=eks,b=eks,i=7234,x=0.24279014390270426,y=0.2483565874207584 a=hat,b=pan,i=7235,x=0.8801345341211195,y=0.9358790870593957 a=pan,b=wye,i=7236,x=0.27447738011116474,y=0.004545127562776141 a=zee,b=zee,i=7237,x=0.4441192412902708,y=0.12641379815166043 a=zee,b=wye,i=7238,x=0.08465889757356693,y=0.5167264969332714 a=zee,b=hat,i=7239,x=0.37409052113954255,y=0.6558372047842991 a=zee,b=wye,i=7240,x=0.08769157759149027,y=0.4682424277651016 a=wye,b=pan,i=7241,x=0.16048892749077326,y=0.8088730543110708 a=wye,b=hat,i=7242,x=0.7810183175877844,y=0.11112670210527198 a=wye,b=pan,i=7243,x=0.23457496179942383,y=0.25480860225867064 a=pan,b=wye,i=7244,x=0.33418676914584544,y=0.12547224222781395 a=eks,b=hat,i=7245,x=0.15591846641848217,y=0.06738895282990076 a=hat,b=wye,i=7246,x=0.4083519225238026,y=0.9205841027663143 a=zee,b=hat,i=7247,x=0.995551497542232,y=0.20626255566312157 a=wye,b=pan,i=7248,x=0.03722910071622887,y=0.666426594713559 a=wye,b=eks,i=7249,x=0.3336400413872498,y=0.9930112481730917 a=zee,b=zee,i=7250,x=0.4205283537525053,y=0.017542491951736294 a=wye,b=zee,i=7251,x=0.03690845523228947,y=0.3207859173250125 a=wye,b=eks,i=7252,x=0.5180151961590858,y=0.18663669340288258 a=pan,b=wye,i=7253,x=0.09014357778603788,y=0.7770581018902949 a=eks,b=hat,i=7254,x=0.08477920149342666,y=0.8536609969299198 a=pan,b=hat,i=7255,x=0.005529616019901207,y=0.050405481126457485 a=hat,b=zee,i=7256,x=0.19429528950321628,y=0.2713422241532205 a=wye,b=zee,i=7257,x=0.030816159583946456,y=0.26057323500261886 a=pan,b=pan,i=7258,x=0.4996723711675731,y=0.861409653660949 a=hat,b=wye,i=7259,x=0.6482012699497162,y=0.25150090033880335 a=wye,b=hat,i=7260,x=0.3722574884303841,y=0.9096204632963236 a=eks,b=pan,i=7261,x=0.5956552210056466,y=0.6731134108078785 a=eks,b=wye,i=7262,x=0.6111098139614397,y=0.15517709802904156 a=wye,b=zee,i=7263,x=0.7738670394914589,y=0.7776575420356829 a=zee,b=pan,i=7264,x=0.3693607630046949,y=0.5055013090983799 a=eks,b=pan,i=7265,x=0.9551577221486072,y=0.29383627386535827 a=pan,b=zee,i=7266,x=0.29284541534943886,y=0.302297804948473 a=eks,b=wye,i=7267,x=0.7682692325496115,y=0.10545189803719768 a=hat,b=zee,i=7268,x=0.5187716634369838,y=0.4578907340058458 a=eks,b=wye,i=7269,x=0.34228005996384936,y=0.7962044127378957 a=wye,b=pan,i=7270,x=0.6526947310324253,y=0.22517849223509379 a=wye,b=eks,i=7271,x=0.3000326333821377,y=0.5981658390236453 a=wye,b=zee,i=7272,x=0.3433404141399181,y=0.9542907816350394 a=hat,b=wye,i=7273,x=0.14732182908248415,y=0.15766209607019577 a=zee,b=hat,i=7274,x=0.12912926442853778,y=0.4373967289737535 a=zee,b=pan,i=7275,x=0.8310286639738583,y=0.23874521098835433 a=zee,b=hat,i=7276,x=0.5541611116464608,y=0.11389221370130065 a=wye,b=pan,i=7277,x=0.7078871914506895,y=0.33655897282671654 a=pan,b=wye,i=7278,x=0.8504546169336947,y=0.8944056123200194 a=wye,b=eks,i=7279,x=0.27325948155789803,y=0.9780751132127382 a=hat,b=wye,i=7280,x=0.8630577882216759,y=0.3401148862570683 a=pan,b=pan,i=7281,x=0.8126567917280336,y=0.8074968827433902 a=zee,b=eks,i=7282,x=0.7505245483102981,y=0.17388594473052665 a=wye,b=wye,i=7283,x=0.7932471858732224,y=0.799314077275886 a=zee,b=pan,i=7284,x=0.9156868185576506,y=0.8532083341105031 a=pan,b=eks,i=7285,x=0.6782016255263672,y=0.6826685678107132 a=zee,b=wye,i=7286,x=0.7477781751613256,y=0.47420402963502417 a=zee,b=hat,i=7287,x=0.1793121692955475,y=0.15066781644968152 a=hat,b=eks,i=7288,x=0.47506460337294665,y=0.6344735780644974 a=pan,b=pan,i=7289,x=0.5648161072496519,y=0.5225373033056284 a=zee,b=wye,i=7290,x=0.07866679545878696,y=0.8281670295675017 a=zee,b=hat,i=7291,x=0.4416432361854393,y=0.4815754525534033 a=pan,b=pan,i=7292,x=0.7818043909150125,y=0.8301584593837131 a=eks,b=zee,i=7293,x=0.15209082772656235,y=0.8094992950290192 a=wye,b=hat,i=7294,x=0.7071475331155577,y=0.463983028008944 a=wye,b=zee,i=7295,x=0.9580523714631302,y=0.44770394756077214 a=wye,b=hat,i=7296,x=0.06387677434814132,y=0.4016686557239688 a=zee,b=wye,i=7297,x=0.9096641147013969,y=0.3198678677416569 a=zee,b=wye,i=7298,x=0.3398026136728608,y=0.796415365588005 a=wye,b=pan,i=7299,x=0.1271157644108325,y=0.8215802283737754 a=zee,b=pan,i=7300,x=0.7996204817268934,y=0.16695600702508173 a=eks,b=zee,i=7301,x=0.24231768726605574,y=0.36168589987653654 a=pan,b=wye,i=7302,x=0.9493279693158848,y=0.9320553760871662 a=pan,b=pan,i=7303,x=0.9626006756922457,y=0.3454344654908674 a=zee,b=pan,i=7304,x=0.6353829183388288,y=0.7926738022346027 a=pan,b=hat,i=7305,x=0.5874095716972196,y=0.7353421801026144 a=eks,b=wye,i=7306,x=0.5141888431558487,y=0.25073225691473777 a=wye,b=eks,i=7307,x=0.2143162664337741,y=0.8580034716749112 a=hat,b=zee,i=7308,x=0.13221833833166552,y=0.9172258570287248 a=wye,b=wye,i=7309,x=0.9524036783598119,y=0.012525060888625927 a=hat,b=pan,i=7310,x=0.06459215228779991,y=0.7528579464907585 a=pan,b=eks,i=7311,x=0.5502139795389652,y=0.49591789494048777 a=wye,b=hat,i=7312,x=0.23122127585115393,y=0.34710066461942035 a=hat,b=hat,i=7313,x=0.04440593404771587,y=0.37885696420400083 a=pan,b=hat,i=7314,x=0.11943754790139005,y=0.36148458916104687 a=hat,b=wye,i=7315,x=0.762849509523023,y=0.5445776666095938 a=wye,b=hat,i=7316,x=0.49431226962351105,y=0.20765083254084993 a=pan,b=eks,i=7317,x=0.9283829868445185,y=0.053320653955502006 a=zee,b=wye,i=7318,x=0.9779192041341719,y=0.45913392788037144 a=eks,b=wye,i=7319,x=0.7931636018175485,y=0.6139112136646976 a=hat,b=hat,i=7320,x=0.39178985057319626,y=0.23236564180125518 a=wye,b=wye,i=7321,x=0.35700901065371815,y=0.28320908292909874 a=pan,b=eks,i=7322,x=0.23434957604819473,y=0.051931896713069414 a=wye,b=wye,i=7323,x=0.7111896724396426,y=0.3207922792041831 a=wye,b=zee,i=7324,x=0.46590974940880736,y=0.38852539050053736 a=hat,b=zee,i=7325,x=0.923332148981879,y=0.24711153523263418 a=hat,b=zee,i=7326,x=0.6477850327935991,y=0.166272703335551 a=wye,b=wye,i=7327,x=0.017676716675338322,y=0.9778332141214291 a=hat,b=hat,i=7328,x=0.5360492386373142,y=0.6804516078113585 a=wye,b=eks,i=7329,x=0.5479278609035699,y=0.6395949329290961 a=hat,b=pan,i=7330,x=0.30931842449078206,y=0.9848451565724043 a=eks,b=hat,i=7331,x=0.788081413287463,y=0.8378548167327706 a=eks,b=eks,i=7332,x=0.5489481141023792,y=0.1898445505274633 a=wye,b=eks,i=7333,x=0.23109457565661884,y=0.175253032327905 a=eks,b=eks,i=7334,x=0.5399986455657582,y=0.8158128369790969 a=pan,b=wye,i=7335,x=0.2567672400806126,y=0.2775523933001237 a=eks,b=zee,i=7336,x=0.29854063622113325,y=0.6880575576316322 a=pan,b=pan,i=7337,x=0.03345300533476314,y=0.05011040908993403 a=zee,b=hat,i=7338,x=0.7240024979256982,y=0.4923630478351134 a=eks,b=wye,i=7339,x=0.7149884797875254,y=0.5780977956467382 a=wye,b=hat,i=7340,x=0.3027659530127267,y=0.8901256310015528 a=wye,b=wye,i=7341,x=0.9095596401410326,y=0.16616223702173794 a=pan,b=eks,i=7342,x=0.32087613651983915,y=0.33882735674733244 a=pan,b=hat,i=7343,x=0.9718021240386961,y=0.8360987881082459 a=pan,b=zee,i=7344,x=0.7960579191229258,y=0.8642875358044435 a=wye,b=zee,i=7345,x=0.97794870050786,y=0.3755010163868553 a=hat,b=eks,i=7346,x=0.9392077077039757,y=0.869513883344899 a=zee,b=pan,i=7347,x=0.5598151935312621,y=0.9371568081140333 a=hat,b=pan,i=7348,x=0.5273520540957175,y=0.9743536695566267 a=zee,b=pan,i=7349,x=0.9798614924191777,y=0.661939043406021 a=wye,b=pan,i=7350,x=0.22127788655478875,y=0.8938285029323859 a=pan,b=hat,i=7351,x=0.5233972953461609,y=0.1299030288348728 a=wye,b=wye,i=7352,x=0.0924480571001528,y=0.30109533355539897 a=pan,b=wye,i=7353,x=0.7001693740890388,y=0.7313365122301939 a=zee,b=wye,i=7354,x=0.5619890666183939,y=0.23528736664694083 a=zee,b=eks,i=7355,x=0.8301624729023548,y=0.0615273482256774 a=pan,b=hat,i=7356,x=0.5045510100638597,y=0.23513093423261755 a=zee,b=zee,i=7357,x=0.37772059495645105,y=0.04160047639165676 a=eks,b=pan,i=7358,x=0.20000198658880186,y=0.2727601315820374 a=zee,b=zee,i=7359,x=0.8789933703062237,y=0.787471191499597 a=zee,b=hat,i=7360,x=0.9083001482768445,y=0.3841688843397407 a=zee,b=hat,i=7361,x=0.03789515978860469,y=0.08906319847440858 a=zee,b=pan,i=7362,x=0.37791224094768805,y=0.035794629838716285 a=eks,b=eks,i=7363,x=0.1789979975700029,y=0.9323731265959059 a=hat,b=eks,i=7364,x=0.7057751089174641,y=0.3218193615346736 a=eks,b=wye,i=7365,x=0.4037294740938493,y=0.827514532289803 a=zee,b=pan,i=7366,x=0.7326832606913403,y=0.988312668973181 a=pan,b=wye,i=7367,x=0.050978150403878986,y=0.6397760763553187 a=eks,b=hat,i=7368,x=0.38478100718255326,y=0.5987722480044325 a=zee,b=wye,i=7369,x=0.12183474068456046,y=0.935692190729219 a=zee,b=zee,i=7370,x=0.7741716706994631,y=0.8036145555008443 a=zee,b=hat,i=7371,x=0.4507985912029725,y=0.3077642021954843 a=pan,b=pan,i=7372,x=0.7704918547993125,y=0.9834514670413425 a=eks,b=eks,i=7373,x=0.4293751563574991,y=0.321596575054345 a=wye,b=zee,i=7374,x=0.551952261755126,y=0.5902774680877885 a=pan,b=wye,i=7375,x=0.42955545463755385,y=0.9934718779427805 a=eks,b=eks,i=7376,x=0.3445135978821475,y=0.6156808849126956 a=pan,b=eks,i=7377,x=0.34789754809053564,y=0.6075272228064196 a=hat,b=pan,i=7378,x=0.10026227651385622,y=0.04421109516628252 a=hat,b=eks,i=7379,x=0.24988599675183953,y=0.5075999788186907 a=hat,b=hat,i=7380,x=0.27192573832264333,y=0.8068429680053445 a=pan,b=zee,i=7381,x=0.9697283975533304,y=0.28635495669422684 a=hat,b=wye,i=7382,x=0.8019809972589643,y=0.005365368085154643 a=pan,b=wye,i=7383,x=0.8494039628427111,y=0.8499184581272037 a=pan,b=pan,i=7384,x=0.147877939581611,y=0.3802766658466368 a=hat,b=wye,i=7385,x=0.6891675084646794,y=0.21966643420211807 a=eks,b=wye,i=7386,x=0.06869104618996669,y=0.9055981024968931 a=hat,b=pan,i=7387,x=0.04127341734955359,y=0.5872280653454409 a=zee,b=pan,i=7388,x=0.29756214466232356,y=0.9313351005781804 a=eks,b=pan,i=7389,x=0.2598351155486429,y=0.6198880821789519 a=wye,b=eks,i=7390,x=0.6980368648478577,y=0.3472713980791412 a=pan,b=eks,i=7391,x=0.4877630118621793,y=0.2703969185758941 a=eks,b=zee,i=7392,x=0.47928188791181825,y=0.4019006064467472 a=zee,b=pan,i=7393,x=0.32975449059840245,y=0.7244778074880798 a=pan,b=zee,i=7394,x=0.7577687447939129,y=0.8939904227639627 a=zee,b=wye,i=7395,x=0.5803000300289758,y=0.4776490273972346 a=hat,b=eks,i=7396,x=0.15220840867031593,y=0.8065677095962809 a=pan,b=eks,i=7397,x=0.7805268684800922,y=0.40839477314823913 a=zee,b=eks,i=7398,x=0.6991548640255947,y=0.30943844921705455 a=zee,b=eks,i=7399,x=0.9620019895205045,y=0.04121066152708375 a=wye,b=pan,i=7400,x=0.6413551187597212,y=0.8585006139152228 a=pan,b=zee,i=7401,x=0.7038547368085565,y=0.833002029439337 a=wye,b=eks,i=7402,x=0.8512179412309284,y=0.11635538096923825 a=eks,b=hat,i=7403,x=0.8360641078807856,y=0.9076959476149424 a=wye,b=zee,i=7404,x=0.8798482207846597,y=0.980841539034285 a=pan,b=eks,i=7405,x=0.6745743258945766,y=0.7867105500751859 a=hat,b=hat,i=7406,x=0.563984894776307,y=0.22186356075852087 a=zee,b=hat,i=7407,x=0.21870541414543287,y=0.5381352837603439 a=hat,b=wye,i=7408,x=0.9529062878494667,y=0.7852866253859588 a=eks,b=pan,i=7409,x=0.7981122558329,y=0.6186019487821701 a=zee,b=eks,i=7410,x=0.28326065224069574,y=0.9300177238169315 a=eks,b=wye,i=7411,x=0.9969817321900778,y=0.46830380409504446 a=pan,b=wye,i=7412,x=0.6977929179546933,y=0.5888437383863911 a=zee,b=zee,i=7413,x=0.5789877301693207,y=0.21648842981409888 a=wye,b=hat,i=7414,x=0.8736572008864342,y=0.5573924644600762 a=wye,b=wye,i=7415,x=0.30171840067278866,y=0.3419586030343307 a=pan,b=wye,i=7416,x=0.2585223323598659,y=0.3463024564198399 a=hat,b=eks,i=7417,x=0.3785664786635482,y=0.26018775063772737 a=wye,b=eks,i=7418,x=0.006639005627157579,y=0.5729637583197084 a=hat,b=hat,i=7419,x=0.2273259043408271,y=0.5563529993801493 a=wye,b=pan,i=7420,x=0.637403401738078,y=0.8374737656276083 a=zee,b=zee,i=7421,x=0.27260075448645904,y=0.40666948184724905 a=wye,b=wye,i=7422,x=0.23158788759518745,y=0.2878292702486247 a=wye,b=hat,i=7423,x=0.65748564141991,y=0.991048470406043 a=hat,b=hat,i=7424,x=0.10089391588727137,y=0.7817715852844856 a=zee,b=eks,i=7425,x=0.8261837120346296,y=0.06964125640579655 a=pan,b=pan,i=7426,x=0.07638817370818407,y=0.556879044634861 a=pan,b=pan,i=7427,x=0.26915621186308547,y=0.9818876276497374 a=hat,b=hat,i=7428,x=0.39688244993813704,y=0.9331868149522005 a=pan,b=hat,i=7429,x=0.9357825556156103,y=0.4134876666224273 a=wye,b=eks,i=7430,x=0.6505309265233103,y=0.08052144928451366 a=eks,b=hat,i=7431,x=0.42045666700455464,y=0.1678609743716658 a=pan,b=wye,i=7432,x=0.7229621008200041,y=0.31447862305937724 a=wye,b=pan,i=7433,x=0.1438112738288524,y=0.9525096683562059 a=wye,b=zee,i=7434,x=0.1904070234884352,y=0.933784711872319 a=wye,b=eks,i=7435,x=0.19859477051626107,y=0.9333014786736845 a=zee,b=hat,i=7436,x=0.05768708104754017,y=0.6575915330429977 a=wye,b=pan,i=7437,x=0.9282262872069705,y=0.6360386793524121 a=pan,b=wye,i=7438,x=0.14231386871466345,y=0.4954949252707901 a=hat,b=zee,i=7439,x=0.3598352944100318,y=0.24656543972679557 a=eks,b=hat,i=7440,x=0.25828687688130847,y=0.842768437062058 a=wye,b=wye,i=7441,x=0.48729002348282646,y=0.9161401465437051 a=zee,b=wye,i=7442,x=0.6608160620662386,y=0.5974595563363765 a=hat,b=wye,i=7443,x=0.25082061911407305,y=0.21021328972399989 a=pan,b=zee,i=7444,x=0.3397136877438124,y=0.2183579843750636 a=pan,b=wye,i=7445,x=0.08633640516764107,y=0.8061389023613882 a=zee,b=wye,i=7446,x=0.48989555445269983,y=0.4667529417156665 a=wye,b=pan,i=7447,x=0.12261193061376408,y=0.799087216626477 a=pan,b=pan,i=7448,x=0.2640997209164132,y=0.21566634091032355 a=wye,b=pan,i=7449,x=0.8358772139168086,y=0.5804404380403491 a=hat,b=hat,i=7450,x=0.999952670371898,y=0.02385920300033073 a=wye,b=eks,i=7451,x=0.8347006203497817,y=0.9777231624470996 a=eks,b=eks,i=7452,x=0.9039050523436697,y=0.2854652762069536 a=eks,b=pan,i=7453,x=0.16650506760957007,y=0.5597579813350784 a=pan,b=hat,i=7454,x=0.5194182222148909,y=0.7430038847189214 a=hat,b=eks,i=7455,x=0.5414111357368178,y=0.20940952316770656 a=pan,b=zee,i=7456,x=0.9804921267993308,y=0.016246164251253248 a=wye,b=zee,i=7457,x=0.33342706113360265,y=0.14501891527781052 a=eks,b=eks,i=7458,x=0.5811068614884891,y=0.664734231079448 a=pan,b=eks,i=7459,x=0.2226239493776776,y=0.5135994340181766 a=pan,b=pan,i=7460,x=0.35138591198463265,y=0.21244588228015993 a=hat,b=zee,i=7461,x=0.7384848550717226,y=0.24830667641463977 a=pan,b=pan,i=7462,x=0.6618404094367076,y=0.8219415456549093 a=wye,b=hat,i=7463,x=0.6072686833968383,y=0.7123986333317 a=pan,b=pan,i=7464,x=0.20391564584771982,y=0.016010952251377497 a=wye,b=pan,i=7465,x=0.7773724564001473,y=0.2347275530159466 a=zee,b=hat,i=7466,x=0.46902698855775327,y=0.6551810919348852 a=hat,b=wye,i=7467,x=0.9615308149819951,y=0.21971550212549507 a=pan,b=wye,i=7468,x=0.5738436863958716,y=0.15248721298846157 a=zee,b=wye,i=7469,x=0.07385275759024545,y=0.988298861201188 a=pan,b=eks,i=7470,x=0.9940613416045865,y=0.07142955197723755 a=pan,b=zee,i=7471,x=0.7206962235321295,y=0.4041386971591123 a=wye,b=pan,i=7472,x=0.9988712528911804,y=0.10724690438707674 a=eks,b=wye,i=7473,x=0.05762456751144174,y=0.28964111938628945 a=zee,b=hat,i=7474,x=0.43396734243561297,y=0.14885801202307214 a=eks,b=pan,i=7475,x=0.6722348646450019,y=0.7590858841092192 a=wye,b=eks,i=7476,x=0.2793082894315966,y=0.6921191873971512 a=wye,b=eks,i=7477,x=0.2981113055444685,y=0.3118479248083458 a=eks,b=zee,i=7478,x=0.7409323823493578,y=0.7821738405034923 a=eks,b=pan,i=7479,x=0.9488581319420917,y=0.5706834161873786 a=eks,b=hat,i=7480,x=0.02963041418290202,y=0.31020752876337365 a=zee,b=hat,i=7481,x=0.530165909368211,y=0.3499068052213301 a=eks,b=hat,i=7482,x=0.5358070419986188,y=0.9271364146014381 a=eks,b=hat,i=7483,x=0.641587995068053,y=0.39862033216100345 a=pan,b=hat,i=7484,x=0.9277546187980327,y=0.6036400626061248 a=zee,b=zee,i=7485,x=0.18250243629492235,y=0.5110714625281656 a=hat,b=eks,i=7486,x=0.05432606225417025,y=0.846037438857557 a=zee,b=wye,i=7487,x=0.06930153211010659,y=0.40332380041726024 a=hat,b=zee,i=7488,x=0.9738235845036819,y=0.11750653625892593 a=wye,b=zee,i=7489,x=0.586694906363601,y=0.485804661756557 a=eks,b=wye,i=7490,x=0.19672144728622376,y=0.8795897188259745 a=hat,b=pan,i=7491,x=0.6815182530961382,y=0.9995542599759397 a=zee,b=zee,i=7492,x=0.9924139789261013,y=0.39715459387237506 a=wye,b=zee,i=7493,x=0.30230649338335736,y=0.6455888156649094 a=eks,b=eks,i=7494,x=0.6054081816351222,y=0.18385964263706056 a=pan,b=eks,i=7495,x=0.153249592750631,y=0.93584890369611 a=pan,b=hat,i=7496,x=0.6974292707231954,y=0.2143287930146287 a=hat,b=wye,i=7497,x=0.01901911173549864,y=0.12188494912380243 a=zee,b=wye,i=7498,x=0.9598078762930742,y=0.9526096866376772 a=hat,b=wye,i=7499,x=0.636327994634104,y=0.5920454180111085 a=eks,b=pan,i=7500,x=0.28545374834074233,y=0.23198097536923323 a=zee,b=eks,i=7501,x=0.28446902555255327,y=0.7217441754314862 a=wye,b=pan,i=7502,x=0.4908870880910682,y=0.8748956439477087 a=zee,b=hat,i=7503,x=0.7352529827218478,y=0.629380067609114 a=pan,b=wye,i=7504,x=0.8333715164315797,y=0.9451336949095434 a=zee,b=pan,i=7505,x=0.564057939908022,y=0.5334065367359347 a=eks,b=pan,i=7506,x=0.7892604620140382,y=0.4458012446463657 a=hat,b=pan,i=7507,x=0.2115605362533587,y=0.17174864475858942 a=wye,b=eks,i=7508,x=0.5483107008409311,y=0.887289998494882 a=eks,b=pan,i=7509,x=0.7069484914746176,y=0.782150154038626 a=wye,b=eks,i=7510,x=0.6248444849216757,y=0.6630576924648813 a=zee,b=zee,i=7511,x=0.6377020664864278,y=0.03108546393426559 a=pan,b=hat,i=7512,x=0.5379752912051612,y=0.224779054520575 a=hat,b=wye,i=7513,x=0.5412688517812235,y=0.5262389205562669 a=eks,b=pan,i=7514,x=0.6610230005876971,y=0.3614899634971477 a=wye,b=hat,i=7515,x=0.9897486946692156,y=0.8560315264830626 a=wye,b=zee,i=7516,x=0.8259254313902334,y=0.7412888906117227 a=pan,b=pan,i=7517,x=0.7516545627381832,y=0.7262369325855629 a=wye,b=eks,i=7518,x=0.11113013523732362,y=0.8868844523482303 a=pan,b=zee,i=7519,x=0.8278328235609442,y=0.20410343800651054 a=pan,b=zee,i=7520,x=0.9899477831046952,y=0.14660509070885575 a=pan,b=eks,i=7521,x=0.8118281802749344,y=0.2234359726399897 a=hat,b=pan,i=7522,x=0.24133540171495538,y=0.5588871341097482 a=pan,b=hat,i=7523,x=0.7491239851649556,y=0.9869320105885282 a=pan,b=zee,i=7524,x=0.8170930769042274,y=0.9831655236845562 a=eks,b=hat,i=7525,x=0.8698194027224814,y=0.05435121618572081 a=pan,b=hat,i=7526,x=0.6842184815608053,y=0.5413631696210732 a=hat,b=eks,i=7527,x=0.9217058451870804,y=0.21666960274280356 a=eks,b=zee,i=7528,x=0.6805617035261402,y=0.9357708602507883 a=eks,b=hat,i=7529,x=0.31981099050142825,y=0.8903683820537329 a=zee,b=wye,i=7530,x=0.7097075423244159,y=0.9664504052194537 a=hat,b=zee,i=7531,x=0.2229334385915317,y=0.3284190225602506 a=eks,b=wye,i=7532,x=0.5296457339778697,y=0.5356809514905594 a=wye,b=pan,i=7533,x=0.7835022697060869,y=0.5470260523424321 a=zee,b=wye,i=7534,x=0.1466838920302843,y=0.5483633847205762 a=eks,b=eks,i=7535,x=0.09134795754962621,y=0.843889939620117 a=zee,b=wye,i=7536,x=0.977198066335277,y=0.841156212711556 a=zee,b=zee,i=7537,x=0.45067646463535815,y=0.4846053315615896 a=wye,b=wye,i=7538,x=0.23718351292469453,y=0.9441763901099166 a=eks,b=wye,i=7539,x=0.26816744152538996,y=0.6815708508524089 a=pan,b=pan,i=7540,x=0.9220993601302719,y=0.7568665001928173 a=eks,b=hat,i=7541,x=0.5161023046647734,y=0.038809351906244016 a=pan,b=pan,i=7542,x=0.20122530941942418,y=0.7472458340839414 a=hat,b=hat,i=7543,x=0.6227885940707738,y=0.6684149004769806 a=wye,b=eks,i=7544,x=0.9740791622624008,y=0.07927202429603264 a=wye,b=eks,i=7545,x=0.022518661429014375,y=0.2901112553388282 a=wye,b=zee,i=7546,x=0.18448181492287075,y=0.9152350814320122 a=hat,b=hat,i=7547,x=0.8215672815436097,y=0.5614013828250404 a=hat,b=hat,i=7548,x=0.19269905065728477,y=0.011009649002469146 a=eks,b=wye,i=7549,x=0.7325288469158541,y=0.565544676390673 a=hat,b=eks,i=7550,x=0.2558306743415637,y=0.7422910597132735 a=wye,b=hat,i=7551,x=0.3483947470200932,y=0.510297078100616 a=wye,b=eks,i=7552,x=0.8469802002512098,y=0.815964077738481 a=eks,b=pan,i=7553,x=0.5358909567117672,y=0.4100558446457958 a=eks,b=wye,i=7554,x=0.7339079956532404,y=0.8285558028377102 a=pan,b=zee,i=7555,x=0.30709526445187707,y=0.4817130705295929 a=hat,b=zee,i=7556,x=0.8122054753287119,y=0.20604868440565904 a=zee,b=zee,i=7557,x=0.7640201646131568,y=0.07069070372885133 a=wye,b=hat,i=7558,x=0.6038851752558235,y=0.9009580077702348 a=hat,b=pan,i=7559,x=0.5523119384745296,y=0.3127290290515127 a=eks,b=hat,i=7560,x=0.10199887225407722,y=0.31764039641093744 a=pan,b=eks,i=7561,x=0.41848341511646414,y=0.5635397789589572 a=wye,b=pan,i=7562,x=0.11656719650390013,y=0.7876569096468866 a=eks,b=hat,i=7563,x=0.026862386488812562,y=0.6617623406511374 a=hat,b=wye,i=7564,x=0.8296346152245616,y=0.22172618374176756 a=hat,b=eks,i=7565,x=0.17354141768396691,y=0.7068716816979178 a=zee,b=zee,i=7566,x=0.04190996301140926,y=0.8085114623622482 a=zee,b=pan,i=7567,x=0.4193214026807677,y=0.394167835232068 a=eks,b=pan,i=7568,x=0.5271419780589164,y=0.1432057817925363 a=zee,b=hat,i=7569,x=0.09822492892655521,y=0.05447501970715207 a=zee,b=zee,i=7570,x=0.12789683952220732,y=0.25490189761435 a=pan,b=eks,i=7571,x=0.22380898154758588,y=0.9433203311960137 a=hat,b=pan,i=7572,x=0.445759638952951,y=0.6137807210496694 a=wye,b=wye,i=7573,x=0.92008458670793,y=0.6955528667719472 a=eks,b=pan,i=7574,x=0.14478437931649057,y=0.0941855027104701 a=pan,b=pan,i=7575,x=0.9500548333140316,y=0.18833841450136246 a=hat,b=wye,i=7576,x=0.6030949657537056,y=0.14875629679301372 a=eks,b=zee,i=7577,x=0.14231014763644978,y=0.4717127637144344 a=wye,b=eks,i=7578,x=0.06201408130259789,y=0.69048502266567 a=hat,b=zee,i=7579,x=0.05435384851495728,y=0.9902847007425324 a=pan,b=eks,i=7580,x=0.1600952140568258,y=0.4045418954164892 a=wye,b=wye,i=7581,x=0.2175313107798721,y=0.3671212999414236 a=pan,b=hat,i=7582,x=0.2569787233680674,y=0.2148575227188957 a=pan,b=hat,i=7583,x=0.8536220104505021,y=0.2523759042998861 a=zee,b=hat,i=7584,x=0.09065491442429796,y=0.5048830484306086 a=wye,b=zee,i=7585,x=0.13751395044042258,y=0.034975186947673986 a=hat,b=hat,i=7586,x=0.5889920011506182,y=0.8078788341273992 a=zee,b=hat,i=7587,x=0.03280836042125246,y=0.41282684631580824 a=zee,b=wye,i=7588,x=0.5288696811580935,y=0.48744579505300667 a=zee,b=hat,i=7589,x=0.7770699494898016,y=0.7790651064661754 a=pan,b=pan,i=7590,x=0.3953702626804989,y=0.8410161773270264 a=pan,b=hat,i=7591,x=0.2245253698516796,y=0.7737639246478398 a=zee,b=zee,i=7592,x=0.35146635664435344,y=0.4539874980554838 a=wye,b=eks,i=7593,x=0.04430024252919407,y=0.1263254223270297 a=zee,b=eks,i=7594,x=0.6200947126046739,y=0.24510543274951047 a=pan,b=wye,i=7595,x=0.20918481361880603,y=0.6732663492566918 a=eks,b=zee,i=7596,x=0.5712662107490064,y=0.6090688560627531 a=wye,b=eks,i=7597,x=0.4310431117208252,y=0.08951460884563855 a=wye,b=wye,i=7598,x=0.06633817142669896,y=0.5442252601992482 a=pan,b=wye,i=7599,x=0.9608268596180474,y=0.9070684642079544 a=eks,b=eks,i=7600,x=0.5242885778608762,y=0.7826689200927383 a=wye,b=pan,i=7601,x=0.9208150605661285,y=0.5589433846274124 a=eks,b=wye,i=7602,x=0.5833785073086928,y=0.04443501942703898 a=eks,b=hat,i=7603,x=0.36191015100917356,y=0.710442357988238 a=wye,b=wye,i=7604,x=0.9697192149941326,y=0.09592438977685924 a=pan,b=hat,i=7605,x=0.3084442479608156,y=0.29052958365713977 a=zee,b=pan,i=7606,x=0.39737589478806956,y=0.02851924706651765 a=pan,b=wye,i=7607,x=0.2998113807261462,y=0.47793002819857533 a=pan,b=wye,i=7608,x=0.7117542206974444,y=0.7970333994894653 a=zee,b=pan,i=7609,x=0.39637889658629055,y=0.15152040674745126 a=zee,b=eks,i=7610,x=0.3668009982476311,y=0.636238165533322 a=wye,b=wye,i=7611,x=0.9172464082645518,y=0.21030281985055865 a=zee,b=wye,i=7612,x=0.3473870036653739,y=0.03835525794322947 a=eks,b=wye,i=7613,x=0.051620293140943185,y=0.3354589495771291 a=hat,b=eks,i=7614,x=0.26171105103308545,y=0.7349252470172892 a=pan,b=hat,i=7615,x=0.006420504177456654,y=0.8005473595004451 a=zee,b=pan,i=7616,x=0.6250802601130294,y=0.350073441110904 a=hat,b=wye,i=7617,x=0.3667157138284648,y=0.8788517472187893 a=hat,b=eks,i=7618,x=0.23737869189758654,y=0.43340937762837506 a=zee,b=hat,i=7619,x=0.0396492782791249,y=0.21046790711790042 a=hat,b=wye,i=7620,x=0.8866095807323401,y=0.1303857423099647 a=wye,b=zee,i=7621,x=0.17096221571163828,y=0.7965958396369065 a=hat,b=zee,i=7622,x=0.03375086644321179,y=0.6603973570703182 a=zee,b=wye,i=7623,x=0.8476652404295622,y=0.5532359995865707 a=eks,b=wye,i=7624,x=0.4036466177426279,y=0.9323311367204503 a=zee,b=wye,i=7625,x=0.6630299534680688,y=0.9316352338897794 a=eks,b=zee,i=7626,x=0.9362983270638663,y=0.02530583139989606 a=zee,b=hat,i=7627,x=0.3510535767246904,y=0.3060628840965116 a=eks,b=eks,i=7628,x=0.6580765451729311,y=0.3478545363218032 a=hat,b=hat,i=7629,x=0.6503893869201249,y=0.8748121320804191 a=wye,b=pan,i=7630,x=0.4658141836395999,y=0.8966097764457495 a=pan,b=pan,i=7631,x=0.27145158019948934,y=0.09516187714787117 a=wye,b=zee,i=7632,x=0.734823995296927,y=0.7719486421533686 a=pan,b=wye,i=7633,x=0.16036619135517816,y=0.6056119689930829 a=eks,b=wye,i=7634,x=0.7109688223985979,y=0.7976941367774835 a=zee,b=zee,i=7635,x=0.12557655765488285,y=0.11534164357950183 a=pan,b=hat,i=7636,x=0.06705624100603413,y=0.6451188760762676 a=pan,b=hat,i=7637,x=0.9106017109900336,y=0.8891547034705604 a=zee,b=zee,i=7638,x=0.2748491611629733,y=0.80651606034967 a=eks,b=hat,i=7639,x=0.771170174812707,y=0.7659520407198543 a=eks,b=wye,i=7640,x=0.2743403725668617,y=0.29487651020724404 a=pan,b=zee,i=7641,x=0.9381993656017179,y=0.6132694517353006 a=zee,b=wye,i=7642,x=0.20250440741625753,y=0.5663711206888612 a=eks,b=pan,i=7643,x=0.47586159706318876,y=0.4962125479739936 a=wye,b=zee,i=7644,x=0.6513731813421505,y=0.9956216673837286 a=hat,b=wye,i=7645,x=0.7915745853842925,y=0.34176706803861534 a=hat,b=zee,i=7646,x=0.5142370614917985,y=0.37306603953034023 a=zee,b=pan,i=7647,x=0.4270489725783423,y=0.5331035003317631 a=zee,b=wye,i=7648,x=0.6798736010037264,y=0.9310702986321819 a=wye,b=wye,i=7649,x=0.06713737802328557,y=0.6633680869367675 a=wye,b=hat,i=7650,x=0.8930880818631942,y=0.05300924902758186 a=eks,b=wye,i=7651,x=0.46360005487315714,y=0.5379475572098419 a=wye,b=zee,i=7652,x=0.006772483197185153,y=0.8526037392488609 a=wye,b=wye,i=7653,x=0.5261687377247655,y=0.9662557892207575 a=hat,b=eks,i=7654,x=0.930363511771148,y=0.40431933522117625 a=hat,b=zee,i=7655,x=0.7870611543157765,y=0.3879247735466407 a=hat,b=eks,i=7656,x=0.5567810208255114,y=0.08177612908836551 a=eks,b=pan,i=7657,x=0.9396222500433881,y=0.4873885569213413 a=pan,b=wye,i=7658,x=0.3621794133271582,y=0.38650038828351596 a=pan,b=wye,i=7659,x=0.6372574031531049,y=0.4008307542658702 a=pan,b=pan,i=7660,x=0.5441433972504542,y=0.9469895242558711 a=zee,b=hat,i=7661,x=0.9408442476780763,y=0.8023490934603362 a=pan,b=pan,i=7662,x=0.7195689266210618,y=0.19413596115835852 a=hat,b=eks,i=7663,x=0.511020096362885,y=0.37947905296566964 a=wye,b=wye,i=7664,x=0.63099124038326,y=0.08422373938558314 a=eks,b=hat,i=7665,x=0.34062598597350535,y=0.9340112462726258 a=wye,b=hat,i=7666,x=0.567402800484997,y=0.03927156134016285 a=zee,b=eks,i=7667,x=0.03246665173355623,y=0.4911639950418465 a=pan,b=eks,i=7668,x=0.10428072545494949,y=0.705703566436069 a=hat,b=hat,i=7669,x=0.9372199212901666,y=0.2848921895320988 a=pan,b=wye,i=7670,x=0.4293848817589905,y=0.6839311106774395 a=pan,b=hat,i=7671,x=0.5479425830973824,y=0.6792965466963522 a=pan,b=wye,i=7672,x=0.8149257619922751,y=0.04756755305626292 a=eks,b=pan,i=7673,x=0.8071000122718018,y=0.3069131904807898 a=wye,b=wye,i=7674,x=0.8942818883713989,y=0.5212590944649815 a=wye,b=eks,i=7675,x=0.5955058458574938,y=0.4676247967613243 a=eks,b=pan,i=7676,x=0.44645752932549043,y=0.031497838025275615 a=pan,b=eks,i=7677,x=0.5906841474792559,y=0.39720028182162814 a=eks,b=hat,i=7678,x=0.07578434084199792,y=0.22918239952964947 a=wye,b=hat,i=7679,x=0.9686531523418166,y=0.924678615947144 a=wye,b=hat,i=7680,x=0.6280201487984101,y=0.536246349153707 a=zee,b=pan,i=7681,x=0.14883118602285983,y=0.5148080394741317 a=wye,b=hat,i=7682,x=0.24098953071009122,y=0.26190037231185814 a=pan,b=pan,i=7683,x=0.6653528080679457,y=0.23663023500818714 a=wye,b=pan,i=7684,x=0.8868188354900317,y=0.43208980346634795 a=zee,b=pan,i=7685,x=0.09709731100349062,y=0.4690475302436993 a=pan,b=eks,i=7686,x=0.18978586580625822,y=0.18115920896147264 a=wye,b=zee,i=7687,x=0.3434686533925685,y=0.48726381835108046 a=eks,b=wye,i=7688,x=0.6488879560928158,y=0.042222720585220475 a=eks,b=hat,i=7689,x=0.17159448083555107,y=0.045442427612649494 a=hat,b=zee,i=7690,x=0.7259375308340535,y=0.7674839756219988 a=hat,b=hat,i=7691,x=0.8777344389987419,y=0.13098255040262852 a=hat,b=eks,i=7692,x=0.8385522296255185,y=0.33460046618507555 a=eks,b=hat,i=7693,x=0.8955356576888092,y=0.48158644758234315 a=zee,b=wye,i=7694,x=0.3060398953875496,y=0.10472339189986246 a=pan,b=zee,i=7695,x=0.3094975482418527,y=0.5858128371070169 a=wye,b=hat,i=7696,x=0.4662656698623283,y=0.8544965801108738 a=pan,b=zee,i=7697,x=0.6678143703378705,y=0.09581777907957223 a=zee,b=zee,i=7698,x=0.17073541333474684,y=0.6197461253961557 a=hat,b=pan,i=7699,x=0.28150223924025986,y=0.7949334007434804 a=eks,b=pan,i=7700,x=0.7077775737786727,y=0.7272353949934527 a=pan,b=pan,i=7701,x=0.43912855740961954,y=0.5952759302937142 a=wye,b=pan,i=7702,x=0.6934052269305254,y=0.7343693194312434 a=zee,b=wye,i=7703,x=0.0832141448099386,y=0.689610820157997 a=eks,b=eks,i=7704,x=0.76786474676413,y=0.8734911204128757 a=zee,b=eks,i=7705,x=0.9142550768210165,y=0.42338987508974 a=hat,b=hat,i=7706,x=0.4389747985376733,y=0.5868957432180422 a=pan,b=hat,i=7707,x=0.4742489895390498,y=0.6875201433051585 a=eks,b=wye,i=7708,x=0.1593131070189654,y=0.21618160132947373 a=eks,b=pan,i=7709,x=0.021236282778372417,y=0.3980616560952607 a=pan,b=pan,i=7710,x=0.6454947652276057,y=0.5934369662779847 a=pan,b=hat,i=7711,x=0.38583521508275165,y=0.5401757081161919 a=pan,b=hat,i=7712,x=0.4196809161822014,y=0.26377711630821754 a=zee,b=pan,i=7713,x=0.155281849590593,y=0.5244565614620743 a=zee,b=eks,i=7714,x=0.6373285599346649,y=0.1336713798341309 a=hat,b=hat,i=7715,x=0.6233765313325004,y=0.5758791846152675 a=wye,b=pan,i=7716,x=0.06175476953603409,y=0.8534290829785786 a=hat,b=wye,i=7717,x=0.2286520253814175,y=0.1192319014188804 a=zee,b=hat,i=7718,x=0.267306560937963,y=0.6639413524240723 a=wye,b=pan,i=7719,x=0.776170709486471,y=0.04166930319722717 a=zee,b=wye,i=7720,x=0.9961164879374235,y=0.16594871214649265 a=hat,b=hat,i=7721,x=0.6299836686087046,y=0.13572824583073617 a=zee,b=wye,i=7722,x=0.3686941934605621,y=0.9443406667411673 a=eks,b=pan,i=7723,x=0.3209098916589238,y=0.4109567715356973 a=wye,b=hat,i=7724,x=0.6570505905515743,y=0.15899862539640153 a=hat,b=wye,i=7725,x=0.1378541730969839,y=0.25911129591737747 a=pan,b=pan,i=7726,x=0.43414990019558963,y=0.1556380176176868 a=pan,b=wye,i=7727,x=0.8676654887349956,y=0.4278534479696323 a=eks,b=zee,i=7728,x=0.5397828066703505,y=0.6535807927478277 a=eks,b=hat,i=7729,x=0.02721562297052116,y=0.8792751973629769 a=zee,b=zee,i=7730,x=0.17826971421632076,y=0.23305955441707682 a=hat,b=eks,i=7731,x=0.6064367170765328,y=0.5843998077541726 a=zee,b=zee,i=7732,x=0.306490201972222,y=0.8466305229690627 a=hat,b=pan,i=7733,x=0.15752257838130168,y=0.025328573078963523 a=zee,b=wye,i=7734,x=0.004805891882058155,y=0.7847915958995085 a=hat,b=hat,i=7735,x=0.9286394794387348,y=0.9849690205615684 a=wye,b=zee,i=7736,x=0.5283513685317409,y=0.8859340359150333 a=wye,b=zee,i=7737,x=0.652833563987708,y=0.08525874301989911 a=hat,b=hat,i=7738,x=0.5904289054724924,y=0.015759945451949697 a=wye,b=eks,i=7739,x=0.20047031500415902,y=0.8454528005125532 a=wye,b=eks,i=7740,x=0.7528542161787996,y=0.7648364405523831 a=hat,b=wye,i=7741,x=0.9811094199766318,y=0.28309547772560684 a=wye,b=hat,i=7742,x=0.9283700112189616,y=0.4397004799577646 a=pan,b=hat,i=7743,x=0.26831057042317386,y=0.7077299528211933 a=eks,b=hat,i=7744,x=0.9850127339517182,y=0.28247386637526417 a=eks,b=eks,i=7745,x=0.3215874010779871,y=0.2780127707789244 a=eks,b=eks,i=7746,x=0.35282776725789056,y=0.015349081732579983 a=zee,b=eks,i=7747,x=0.4180982192655389,y=0.2733251523581718 a=eks,b=hat,i=7748,x=0.27317227631391283,y=0.6152013002721723 a=zee,b=pan,i=7749,x=0.408781801299804,y=0.717319277351812 a=pan,b=zee,i=7750,x=0.27375467840491696,y=0.9485370229814897 a=wye,b=wye,i=7751,x=0.9578808895640281,y=0.567472797993126 a=eks,b=wye,i=7752,x=0.8308158486543955,y=0.7251988641133165 a=wye,b=wye,i=7753,x=0.35648228848353636,y=0.825810007353184 a=eks,b=hat,i=7754,x=0.5569680022127645,y=0.5333129600306122 a=eks,b=pan,i=7755,x=0.3881304412114248,y=0.4050350844434646 a=zee,b=pan,i=7756,x=0.2999624778639135,y=0.3422859654759408 a=hat,b=eks,i=7757,x=0.005675684156441596,y=0.4710155431561027 a=pan,b=zee,i=7758,x=0.36890917101981324,y=0.9763006270617745 a=hat,b=pan,i=7759,x=0.2655863070154898,y=0.4394097550698016 a=zee,b=pan,i=7760,x=0.09922636178391386,y=0.3133271646647967 a=hat,b=pan,i=7761,x=0.5937279590019037,y=0.9494399455643315 a=eks,b=pan,i=7762,x=0.9358045588817545,y=0.7330851249844436 a=zee,b=wye,i=7763,x=0.5786653829827114,y=0.2618880168331781 a=zee,b=pan,i=7764,x=0.48750871272402196,y=0.22236263541673462 a=hat,b=hat,i=7765,x=0.8891522513963568,y=0.2668239844400174 a=zee,b=pan,i=7766,x=0.30364046910111253,y=0.6891273587279694 a=eks,b=eks,i=7767,x=0.53797481529119,y=0.9465659178026697 a=eks,b=eks,i=7768,x=0.28912890940887614,y=0.7442458122620677 a=wye,b=hat,i=7769,x=0.3705583652673885,y=0.059144918778647027 a=pan,b=zee,i=7770,x=0.6956017564216889,y=0.66737949839894 a=hat,b=eks,i=7771,x=0.756025188553685,y=0.8094953852781318 a=pan,b=pan,i=7772,x=0.6990222040473527,y=0.033151103195916964 a=hat,b=wye,i=7773,x=0.978940590729752,y=0.12080187423149347 a=pan,b=eks,i=7774,x=0.8611049069366612,y=0.7289618171406003 a=hat,b=pan,i=7775,x=0.24037840559946289,y=0.5476859366235767 a=hat,b=hat,i=7776,x=0.8353731209463556,y=0.766113750196805 a=wye,b=pan,i=7777,x=0.05858955413860256,y=0.12058424529655198 a=zee,b=zee,i=7778,x=0.7416290206514613,y=0.3921085843199572 a=wye,b=hat,i=7779,x=0.6525057028901559,y=0.827506650684489 a=hat,b=hat,i=7780,x=0.35967618349426034,y=0.6155205527426165 a=zee,b=wye,i=7781,x=0.8785183426416252,y=0.5929085468141393 a=eks,b=pan,i=7782,x=0.9147117130322603,y=0.2625104340138019 a=hat,b=pan,i=7783,x=0.2970040422341498,y=0.3987945132487777 a=eks,b=pan,i=7784,x=0.5773221928392703,y=0.984120457296803 a=eks,b=eks,i=7785,x=0.7533984992681583,y=0.34117949445154283 a=pan,b=wye,i=7786,x=0.4922908537138324,y=0.8016564975759202 a=hat,b=pan,i=7787,x=0.9606695287435937,y=0.2724371377986182 a=zee,b=zee,i=7788,x=0.39665748675823,y=0.7990204115613213 a=hat,b=hat,i=7789,x=0.9011093799553621,y=0.233507874232196 a=hat,b=zee,i=7790,x=0.0071897888391820874,y=0.9914209553595086 a=eks,b=eks,i=7791,x=0.41888693176987457,y=0.12945875791772954 a=eks,b=pan,i=7792,x=0.1663832456913965,y=0.7815381913771416 a=hat,b=zee,i=7793,x=0.958394958736606,y=0.8162724775424932 a=pan,b=pan,i=7794,x=0.6756648486521578,y=0.3164832583304539 a=pan,b=eks,i=7795,x=0.5007434672508728,y=0.45116398803311886 a=wye,b=wye,i=7796,x=0.7618404269252146,y=0.7082734662093254 a=hat,b=eks,i=7797,x=0.3339037394632195,y=0.33041712223471265 a=pan,b=eks,i=7798,x=0.8964629088574175,y=0.6314628948974991 a=pan,b=wye,i=7799,x=0.22115218679677484,y=0.8945303177931078 a=zee,b=wye,i=7800,x=0.7914989655477432,y=0.43386605796501754 a=eks,b=wye,i=7801,x=0.2768061453774291,y=0.11197920863328137 a=zee,b=pan,i=7802,x=0.8246321893741126,y=0.9437960471953348 a=zee,b=pan,i=7803,x=0.14679410267991433,y=0.7951490909241772 a=eks,b=zee,i=7804,x=0.2527677515169743,y=0.6402837194288739 a=hat,b=zee,i=7805,x=0.7220810582203347,y=0.7321859764651767 a=hat,b=wye,i=7806,x=0.8114485139288578,y=0.10936244859497501 a=zee,b=eks,i=7807,x=0.2431299964406336,y=0.6806744199778801 a=hat,b=hat,i=7808,x=0.8890059022302841,y=0.22235264592897086 a=wye,b=wye,i=7809,x=0.00751279921360315,y=0.10191418158652688 a=wye,b=pan,i=7810,x=0.22896336477318813,y=0.3855317875005415 a=pan,b=hat,i=7811,x=0.2803772001943151,y=0.06126665020709965 a=pan,b=wye,i=7812,x=0.6626056412742908,y=0.8119248457418577 a=zee,b=wye,i=7813,x=0.2839449326479042,y=0.21823946066739763 a=hat,b=zee,i=7814,x=0.9824109871068729,y=0.24702350802138673 a=wye,b=pan,i=7815,x=0.29912422376234227,y=0.031086896342097492 a=wye,b=hat,i=7816,x=0.9864077710445651,y=0.7857310073202174 a=zee,b=zee,i=7817,x=0.8037520801675582,y=0.23521748865500658 a=zee,b=zee,i=7818,x=0.8547716274640922,y=0.19464566963124352 a=wye,b=wye,i=7819,x=0.48778425728806885,y=0.5848857294076643 a=zee,b=pan,i=7820,x=0.6449176000624874,y=0.6911176673897844 a=zee,b=zee,i=7821,x=0.6652689102876012,y=0.8739835083180177 a=zee,b=eks,i=7822,x=0.6987205194846695,y=0.5636198949945938 a=pan,b=hat,i=7823,x=0.010016579560818473,y=0.8874400130011928 a=zee,b=eks,i=7824,x=0.819077078113403,y=0.1908070440081936 a=pan,b=hat,i=7825,x=0.1352980142489283,y=0.6116246247477668 a=hat,b=zee,i=7826,x=0.45007045338969864,y=0.8838605924784972 a=zee,b=zee,i=7827,x=0.5476130433221185,y=0.5402862105818173 a=zee,b=hat,i=7828,x=0.9857371922518141,y=0.9407026776406513 a=eks,b=eks,i=7829,x=0.6388976780469364,y=0.1723731781397092 a=zee,b=zee,i=7830,x=0.00819682639104835,y=0.4240387399947815 a=pan,b=eks,i=7831,x=0.7227922598778895,y=0.8810129413735137 a=wye,b=eks,i=7832,x=0.44768287987315436,y=0.06097808844991881 a=hat,b=zee,i=7833,x=0.38094799324344375,y=0.842105346910846 a=hat,b=hat,i=7834,x=0.7048613327865254,y=0.1492452682364549 a=pan,b=eks,i=7835,x=0.7503216413048331,y=0.22610681402742594 a=wye,b=hat,i=7836,x=0.18033444340025684,y=0.5396596125945982 a=zee,b=hat,i=7837,x=0.7596610024208577,y=0.13811213680042633 a=zee,b=pan,i=7838,x=0.46989555714248354,y=0.5731236845422526 a=eks,b=zee,i=7839,x=0.2378040998190729,y=0.8687389259046864 a=eks,b=wye,i=7840,x=0.15083338360252196,y=0.4677170605064366 a=eks,b=wye,i=7841,x=0.2390993050590302,y=0.4022350252704088 a=wye,b=wye,i=7842,x=0.03868013977565554,y=0.36213469293451195 a=hat,b=eks,i=7843,x=0.2326952229877629,y=0.07810622939834866 a=eks,b=eks,i=7844,x=0.3464583830104778,y=0.24608203542200424 a=zee,b=hat,i=7845,x=0.6258279281533773,y=0.519301606092353 a=hat,b=hat,i=7846,x=0.7328028225195036,y=0.11369450919398072 a=hat,b=wye,i=7847,x=0.5913920636618824,y=0.869313774493801 a=pan,b=hat,i=7848,x=0.9911771508550357,y=0.4789157458695267 a=zee,b=wye,i=7849,x=0.6838794391771024,y=0.7901996933834754 a=zee,b=eks,i=7850,x=0.38221395674318315,y=0.4647687529098594 a=pan,b=hat,i=7851,x=0.7174129864414264,y=0.6977644513609003 a=wye,b=wye,i=7852,x=0.9237362599816926,y=0.8751578434058209 a=eks,b=eks,i=7853,x=0.4518707326185428,y=0.6617696626513239 a=hat,b=wye,i=7854,x=0.06764752166213406,y=0.2082339516770152 a=zee,b=wye,i=7855,x=0.28326864641471117,y=0.7936013908655049 a=wye,b=hat,i=7856,x=0.7543839227963806,y=0.7708302534568163 a=pan,b=hat,i=7857,x=0.4184705412704066,y=0.40669972332461846 a=wye,b=zee,i=7858,x=0.9223976078879647,y=0.5779020996216999 a=zee,b=zee,i=7859,x=0.10768947209184598,y=0.3365441234115185 a=hat,b=eks,i=7860,x=0.7452070101622097,y=0.17526957060226422 a=zee,b=eks,i=7861,x=0.5097508654113272,y=0.21814047343538046 a=hat,b=eks,i=7862,x=0.27105430205532133,y=0.7490102016231208 a=hat,b=pan,i=7863,x=0.06726201643453855,y=0.35933180644142315 a=pan,b=wye,i=7864,x=0.3103009370970985,y=0.8407327110613196 a=eks,b=wye,i=7865,x=0.32234768937000546,y=0.02406247620613 a=wye,b=hat,i=7866,x=0.6773974203264422,y=0.2145912727473317 a=zee,b=hat,i=7867,x=0.7690926832290548,y=0.9300355345607946 a=wye,b=hat,i=7868,x=0.9396022178120012,y=0.4338845485635848 a=zee,b=hat,i=7869,x=0.9505475018937193,y=0.14630084195031035 a=eks,b=pan,i=7870,x=0.31855769422540314,y=0.8895458854037835 a=hat,b=eks,i=7871,x=0.5921983075931928,y=0.4229347949955703 a=wye,b=wye,i=7872,x=0.5263396869727451,y=0.6135988456193723 a=hat,b=hat,i=7873,x=0.8940280465724006,y=0.23131247213081552 a=hat,b=wye,i=7874,x=0.09904413256911793,y=0.8854746496958716 a=wye,b=wye,i=7875,x=0.5037904698265824,y=0.32995968281854504 a=hat,b=eks,i=7876,x=0.5344512004977263,y=0.11225525657163704 a=pan,b=wye,i=7877,x=0.9050244381025329,y=0.4700479323860336 a=zee,b=wye,i=7878,x=0.5290284670419653,y=0.35507751760627737 a=wye,b=pan,i=7879,x=0.3148924229301867,y=0.1872406546524351 a=eks,b=wye,i=7880,x=0.03633390115689916,y=0.16903851260082725 a=hat,b=pan,i=7881,x=0.8711990119730865,y=0.4293663097385956 a=eks,b=eks,i=7882,x=0.8471544066093775,y=0.40223962006438685 a=hat,b=wye,i=7883,x=0.24262458856564295,y=0.01835360943862996 a=pan,b=eks,i=7884,x=0.6922724138336023,y=0.012397141051616933 a=zee,b=hat,i=7885,x=0.3025111314280283,y=0.9069884084952201 a=hat,b=zee,i=7886,x=0.794970017782755,y=0.6062492046952036 a=wye,b=zee,i=7887,x=0.8726346787308475,y=0.3029668754826792 a=hat,b=hat,i=7888,x=0.20756986827268153,y=0.6363026946616206 a=zee,b=wye,i=7889,x=0.23271731636441206,y=0.548253711367059 a=eks,b=eks,i=7890,x=0.5715742308742378,y=0.8192093346935977 a=wye,b=eks,i=7891,x=0.6699323585736414,y=0.1435311317094633 a=hat,b=eks,i=7892,x=0.42467396461692,y=0.7347899103390217 a=hat,b=pan,i=7893,x=0.7439486973392055,y=0.17955726400681704 a=eks,b=wye,i=7894,x=0.5608680829128325,y=0.9585598084195104 a=wye,b=wye,i=7895,x=0.44727463294971703,y=0.7872043941311472 a=eks,b=pan,i=7896,x=0.9913466570743009,y=0.6302035261111584 a=hat,b=wye,i=7897,x=0.5421196020388044,y=0.8624723374301944 a=eks,b=eks,i=7898,x=0.37298028446417475,y=0.8728404913054509 a=eks,b=zee,i=7899,x=0.8332042684792176,y=0.07345290916251856 a=zee,b=wye,i=7900,x=0.8094076175677304,y=0.14978155572080065 a=wye,b=hat,i=7901,x=0.9355960796171349,y=0.18626647870004664 a=zee,b=wye,i=7902,x=0.2637291967134705,y=0.5442660467355056 a=zee,b=eks,i=7903,x=0.12158777831041234,y=0.9890244717689465 a=eks,b=hat,i=7904,x=0.2705482127515829,y=0.01971442860313377 a=zee,b=eks,i=7905,x=0.44670524308794834,y=0.5845415190296815 a=zee,b=eks,i=7906,x=0.691867757886342,y=0.2848167176859655 a=pan,b=zee,i=7907,x=0.33908058571920063,y=0.5335427401965982 a=zee,b=hat,i=7908,x=0.3610060660850839,y=0.24288129482927623 a=zee,b=wye,i=7909,x=0.9120826455472996,y=0.44475380738945147 a=zee,b=zee,i=7910,x=0.567164847298404,y=0.399455541894602 a=wye,b=eks,i=7911,x=0.691697756697526,y=0.877518858711515 a=zee,b=pan,i=7912,x=0.31982431730922556,y=0.7058492177082524 a=pan,b=zee,i=7913,x=0.7134779956631648,y=0.03877802504200312 a=wye,b=hat,i=7914,x=0.4366613963535759,y=0.8447738266648783 a=zee,b=pan,i=7915,x=0.6579171209676669,y=0.6482697150135545 a=wye,b=eks,i=7916,x=0.2877295918648384,y=0.211059870769302 a=pan,b=eks,i=7917,x=0.5275793853162087,y=0.8748428200227294 a=eks,b=eks,i=7918,x=0.12458230242468837,y=0.24069602443528393 a=zee,b=zee,i=7919,x=0.5222051770223615,y=0.1878235700153812 a=zee,b=zee,i=7920,x=0.8985365345616582,y=0.6020907480091875 a=hat,b=wye,i=7921,x=0.09671063835019511,y=0.4703227983629693 a=hat,b=zee,i=7922,x=0.8879147106591082,y=0.19697818805308442 a=eks,b=zee,i=7923,x=0.38870229665971356,y=0.5985607302963999 a=eks,b=pan,i=7924,x=0.3713298410561683,y=0.296460093460874 a=zee,b=eks,i=7925,x=0.5420534501009495,y=0.05866294852898357 a=zee,b=eks,i=7926,x=0.47492169105504933,y=0.8587163655741379 a=pan,b=zee,i=7927,x=0.7972209851115417,y=0.1287619061325339 a=wye,b=pan,i=7928,x=0.4065863120979525,y=0.7016224626335005 a=zee,b=zee,i=7929,x=0.25040361330370065,y=0.3462781056544345 a=wye,b=eks,i=7930,x=0.5998999740666952,y=0.940489760974054 a=eks,b=hat,i=7931,x=0.7426863429203551,y=0.5997919568409129 a=eks,b=wye,i=7932,x=0.7539925055624301,y=0.9588704021223314 a=eks,b=eks,i=7933,x=0.8496577484419044,y=0.8749858904217946 a=zee,b=hat,i=7934,x=0.39625425573088036,y=0.7516162692981885 a=zee,b=eks,i=7935,x=0.07413718973123662,y=0.9540488375627403 a=hat,b=eks,i=7936,x=0.43057462793549084,y=0.83261804348024 a=pan,b=pan,i=7937,x=0.7944834203394888,y=0.4910876849942255 a=pan,b=hat,i=7938,x=0.7835615902262538,y=0.030503750805517593 a=wye,b=zee,i=7939,x=0.20769387630166103,y=0.9857694928121757 a=eks,b=pan,i=7940,x=0.18503477530273849,y=0.2613475073722671 a=wye,b=hat,i=7941,x=0.4205902145088837,y=0.8454165597750689 a=pan,b=wye,i=7942,x=0.14289054655956812,y=0.5590237538729541 a=zee,b=hat,i=7943,x=0.007346899370313853,y=0.9435542424367808 a=wye,b=pan,i=7944,x=0.6010756954347072,y=0.602663902557592 a=wye,b=pan,i=7945,x=0.204176839139523,y=0.9444532348782411 a=zee,b=pan,i=7946,x=0.22356842063761684,y=0.6173414017420112 a=zee,b=eks,i=7947,x=0.025642761574512285,y=0.18768382301071385 a=eks,b=wye,i=7948,x=0.6258015401993495,y=0.4655464102747875 a=pan,b=zee,i=7949,x=0.2888268615751203,y=0.5754370603975112 a=wye,b=pan,i=7950,x=0.13192831258970839,y=0.09974934678356573 a=eks,b=pan,i=7951,x=0.573135783011619,y=0.5173979516422308 a=wye,b=pan,i=7952,x=0.9672001578855394,y=0.5999113434317762 a=hat,b=wye,i=7953,x=0.5332777170304573,y=0.8240541851977825 a=pan,b=wye,i=7954,x=0.1279461268867662,y=0.3465018420126411 a=pan,b=zee,i=7955,x=0.26370302153935266,y=0.709886854064376 a=wye,b=wye,i=7956,x=0.08185493324300519,y=0.8430295223333161 a=eks,b=eks,i=7957,x=0.990948668400743,y=0.1741418790774628 a=wye,b=zee,i=7958,x=0.7645204491814582,y=0.853303854748976 a=zee,b=pan,i=7959,x=0.15605455866939177,y=0.46323289916297505 a=hat,b=zee,i=7960,x=0.16017925473869754,y=0.4529356695213568 a=eks,b=pan,i=7961,x=0.6125869749454478,y=0.370095068843984 a=wye,b=wye,i=7962,x=0.18404446909382244,y=0.26269521842771504 a=eks,b=wye,i=7963,x=0.5558763888070763,y=0.185510369521809 a=pan,b=pan,i=7964,x=0.282047967900814,y=0.22212917426772594 a=eks,b=wye,i=7965,x=0.05872308143086857,y=0.38482704713824056 a=pan,b=hat,i=7966,x=0.2501049463368379,y=0.39344676758297514 a=wye,b=hat,i=7967,x=0.8987874844489919,y=0.49750601381227266 a=pan,b=zee,i=7968,x=0.7089490867118664,y=0.45255811448776784 a=eks,b=wye,i=7969,x=0.6608518009893678,y=0.22790991951466288 a=eks,b=wye,i=7970,x=0.7564471093195367,y=0.588547367327297 a=eks,b=wye,i=7971,x=0.3177159468656713,y=0.6507595896357143 a=wye,b=zee,i=7972,x=0.6981615941048016,y=0.3554268056065458 a=wye,b=pan,i=7973,x=0.018524216435056196,y=0.08446663540594712 a=hat,b=zee,i=7974,x=0.24963209679900955,y=0.016049846424579184 a=hat,b=wye,i=7975,x=0.048154096212748465,y=0.23172149127883657 a=eks,b=pan,i=7976,x=0.406288377613479,y=0.6746918193025293 a=wye,b=hat,i=7977,x=0.5283629678807258,y=0.8918455631655288 a=pan,b=wye,i=7978,x=0.5186376529712587,y=0.8811576068202212 a=hat,b=eks,i=7979,x=0.1757549377495632,y=0.7507650545931341 a=zee,b=zee,i=7980,x=0.10892391322425843,y=0.050571608567332116 a=hat,b=eks,i=7981,x=0.5740714306503298,y=0.34091415824926563 a=hat,b=hat,i=7982,x=0.15020550177808045,y=0.9076080995933096 a=pan,b=hat,i=7983,x=0.5450883311922072,y=0.44507084646454187 a=eks,b=pan,i=7984,x=0.49794222352752093,y=0.19964088700431204 a=eks,b=eks,i=7985,x=0.25908328241507117,y=0.41719268312114377 a=wye,b=zee,i=7986,x=0.2712612087411137,y=0.4093087980161978 a=eks,b=eks,i=7987,x=0.6808132597759162,y=0.10935069218341964 a=wye,b=eks,i=7988,x=0.8262618950608377,y=0.09248423605386846 a=zee,b=eks,i=7989,x=0.5671275966876752,y=0.6710467056302961 a=zee,b=hat,i=7990,x=0.12246709018315027,y=0.9902823724804396 a=hat,b=eks,i=7991,x=0.9093001304035243,y=0.6454294428509858 a=pan,b=hat,i=7992,x=0.28055455032097176,y=0.7076435705928082 a=zee,b=pan,i=7993,x=0.840708068980671,y=0.7676444206837281 a=eks,b=pan,i=7994,x=0.13873019879879267,y=0.3541885725000481 a=wye,b=wye,i=7995,x=0.5556276037973694,y=0.7103742139489323 a=wye,b=hat,i=7996,x=0.7897718226462853,y=0.7866250828364114 a=pan,b=zee,i=7997,x=0.42328017164614196,y=0.8968239987659891 a=zee,b=pan,i=7998,x=0.6173947671381171,y=0.9099504940374747 a=pan,b=eks,i=7999,x=0.1904021794562485,y=0.2442456072044632 a=eks,b=hat,i=8000,x=0.494989535411282,y=0.9858490482421876 a=pan,b=zee,i=8001,x=0.21740880422197573,y=0.009823495326658604 a=wye,b=zee,i=8002,x=0.8483246353215173,y=0.748697867257607 a=eks,b=wye,i=8003,x=0.07232519497816503,y=0.01460395395166092 a=hat,b=hat,i=8004,x=0.38823106724151646,y=0.7637253093388771 a=pan,b=eks,i=8005,x=0.8569860709125309,y=0.12024935239203738 a=zee,b=zee,i=8006,x=0.4339798390608952,y=0.752225427449917 a=hat,b=eks,i=8007,x=0.37719631868649617,y=0.39591507134214254 a=hat,b=zee,i=8008,x=0.2500892579626076,y=0.6235655047728978 a=zee,b=eks,i=8009,x=0.21398276966281848,y=0.6412152131738255 a=hat,b=eks,i=8010,x=0.3187905796970636,y=0.3173506685081655 a=pan,b=pan,i=8011,x=0.5376262182105622,y=0.4824151159482998 a=zee,b=hat,i=8012,x=0.9967455860256934,y=0.846350626099811 a=eks,b=zee,i=8013,x=0.6750010866052097,y=0.380258473116171 a=pan,b=hat,i=8014,x=0.8682985870091493,y=0.13867025721075266 a=zee,b=wye,i=8015,x=0.876659392160873,y=0.005960162771398214 a=pan,b=wye,i=8016,x=0.17217503903346676,y=0.6363974355768541 a=hat,b=zee,i=8017,x=0.8289275824108141,y=0.5824677757054623 a=zee,b=hat,i=8018,x=0.47908711384726377,y=0.2078467393092358 a=pan,b=hat,i=8019,x=0.03774190681630729,y=0.37562081779173295 a=pan,b=pan,i=8020,x=0.25202925423609734,y=0.8758710479186967 a=hat,b=zee,i=8021,x=0.6283764347998099,y=0.7038955747755151 a=wye,b=eks,i=8022,x=0.9822305246922711,y=0.9025462559345021 a=pan,b=hat,i=8023,x=0.17809600073620713,y=0.7136989224391156 a=pan,b=hat,i=8024,x=0.7871049381240648,y=0.9157631088161338 a=hat,b=zee,i=8025,x=0.8464024197077388,y=0.7505262168915832 a=hat,b=hat,i=8026,x=0.27076546874115703,y=0.717232478948042 a=eks,b=wye,i=8027,x=0.47677652985856545,y=0.742388612767014 a=pan,b=wye,i=8028,x=0.03498607510109997,y=0.19549287051995312 a=hat,b=zee,i=8029,x=0.8902222199776184,y=0.22597809584182216 a=wye,b=pan,i=8030,x=0.8534063530727802,y=0.5216400536886638 a=wye,b=pan,i=8031,x=0.399100924785613,y=0.8096553851806476 a=zee,b=hat,i=8032,x=0.3470913703916284,y=0.4932013734514763 a=hat,b=hat,i=8033,x=0.10816322348365748,y=0.6629283579053702 a=zee,b=eks,i=8034,x=0.7893326165734248,y=0.0055174814334882916 a=wye,b=pan,i=8035,x=0.17190090759613674,y=0.02144281885832955 a=hat,b=eks,i=8036,x=0.4487638977131928,y=0.9316999919622478 a=zee,b=zee,i=8037,x=0.7060201401255403,y=0.9669662969793548 a=zee,b=wye,i=8038,x=0.1386368820895454,y=0.5056689278962295 a=pan,b=eks,i=8039,x=0.09184144959885043,y=0.6340163134818283 a=pan,b=zee,i=8040,x=0.7171534760409121,y=0.7328586414702059 a=pan,b=eks,i=8041,x=0.3839508814613577,y=0.30631865487711984 a=zee,b=wye,i=8042,x=0.3764616704796617,y=0.0013477620094425324 a=hat,b=eks,i=8043,x=0.3534996104529119,y=0.7450885137370724 a=hat,b=wye,i=8044,x=0.10170616112045472,y=0.5317124791229391 a=hat,b=pan,i=8045,x=0.7300195962365097,y=0.3308540333941833 a=eks,b=wye,i=8046,x=0.6051188687817523,y=0.9131734207686757 a=eks,b=zee,i=8047,x=0.5374608283378429,y=0.31273904942423725 a=zee,b=wye,i=8048,x=0.05640085976332132,y=0.0700003098785944 a=wye,b=eks,i=8049,x=0.5114158496176794,y=0.12846145668110132 a=eks,b=hat,i=8050,x=0.9874222186130187,y=0.8593466056433501 a=eks,b=eks,i=8051,x=0.9761481708304064,y=0.15123613115180856 a=pan,b=pan,i=8052,x=0.6493110423838093,y=0.5347940909170277 a=pan,b=pan,i=8053,x=0.9130131367137716,y=0.20063251495257384 a=wye,b=wye,i=8054,x=0.29645291860851164,y=0.2862439675971603 a=wye,b=hat,i=8055,x=0.9283998083818392,y=0.9186794272646708 a=zee,b=eks,i=8056,x=0.21742326077552165,y=0.21215545457837148 a=hat,b=pan,i=8057,x=0.805271595399746,y=0.46020440997594847 a=pan,b=zee,i=8058,x=0.2152394578214053,y=0.6196385518512275 a=eks,b=pan,i=8059,x=0.39413913874172746,y=0.8509631752611558 a=hat,b=wye,i=8060,x=0.6704371607062275,y=0.002101362140308649 a=wye,b=eks,i=8061,x=0.38279862612807036,y=0.5895252762171836 a=wye,b=hat,i=8062,x=0.9226631815117158,y=0.9902149324132298 a=pan,b=eks,i=8063,x=0.4162908252496399,y=0.18879569170028876 a=wye,b=eks,i=8064,x=0.520433239579577,y=0.4738497455813805 a=wye,b=wye,i=8065,x=0.5952586854249843,y=0.050797298251500145 a=eks,b=pan,i=8066,x=0.7550938758657687,y=0.03587749109184113 a=pan,b=hat,i=8067,x=0.5198389196832879,y=0.2056652183357338 a=zee,b=zee,i=8068,x=0.1526773413967627,y=0.492096177763767 a=hat,b=zee,i=8069,x=0.6263854342684977,y=0.4917794632623357 a=wye,b=wye,i=8070,x=0.19425905980457325,y=0.5136004485194701 a=pan,b=eks,i=8071,x=0.15980232628622404,y=0.7963848087282333 a=pan,b=hat,i=8072,x=0.8729803431362889,y=0.23389287840183937 a=eks,b=pan,i=8073,x=0.8414137403991204,y=0.013708060374022835 a=pan,b=pan,i=8074,x=0.47234873863850657,y=0.4467664305469584 a=eks,b=zee,i=8075,x=0.8643916283489397,y=0.8421716629916459 a=pan,b=wye,i=8076,x=0.36180082799458324,y=0.2681111063038798 a=wye,b=zee,i=8077,x=0.291110312999184,y=0.3904237799736081 a=pan,b=wye,i=8078,x=0.2285091327975376,y=0.08630172750559728 a=hat,b=wye,i=8079,x=0.04336915531209018,y=0.7750227412335468 a=zee,b=pan,i=8080,x=0.4953944041935031,y=0.13051323550656468 a=eks,b=wye,i=8081,x=0.9893684193709726,y=0.009655042259111513 a=wye,b=eks,i=8082,x=0.5505998662939379,y=0.4793977598693524 a=eks,b=zee,i=8083,x=0.976642999884874,y=0.41575660829151373 a=eks,b=hat,i=8084,x=0.6415360825871783,y=0.9093765294473956 a=eks,b=wye,i=8085,x=0.19986686946961607,y=0.6001471405049741 a=wye,b=pan,i=8086,x=0.7089561346111681,y=0.9346147842120147 a=hat,b=wye,i=8087,x=0.6721158897399355,y=0.8662012495181518 a=zee,b=pan,i=8088,x=0.2999863643844106,y=0.9736282819386414 a=eks,b=hat,i=8089,x=0.780371764692202,y=0.13534345378955825 a=hat,b=zee,i=8090,x=0.18588301944750896,y=0.9295096790100238 a=wye,b=wye,i=8091,x=0.3136153634214588,y=0.9518615611124033 a=wye,b=zee,i=8092,x=0.3727994612209693,y=0.12052581566020104 a=eks,b=hat,i=8093,x=0.9315252187513533,y=0.561169216332415 a=zee,b=pan,i=8094,x=0.6896842396279547,y=0.2659526826052142 a=zee,b=eks,i=8095,x=0.013899464399908745,y=0.8010549230884639 a=hat,b=wye,i=8096,x=0.9312335027031023,y=0.22775044082337215 a=pan,b=pan,i=8097,x=0.2875217953665159,y=0.7352692976694222 a=pan,b=eks,i=8098,x=0.02310988069794695,y=0.04436912792860748 a=wye,b=eks,i=8099,x=0.9922978662257267,y=0.1009226522265646 a=pan,b=wye,i=8100,x=0.6977704958793126,y=0.7057512041273386 a=hat,b=zee,i=8101,x=0.8813156757676321,y=0.538439525268842 a=pan,b=eks,i=8102,x=0.8253811424731291,y=0.8958384638924397 a=wye,b=hat,i=8103,x=0.6382749094882392,y=0.7690601393055252 a=zee,b=zee,i=8104,x=0.19443211144688854,y=0.39629790432524836 a=zee,b=zee,i=8105,x=0.028359518501674397,y=0.31630049190233644 a=eks,b=zee,i=8106,x=0.04927046404341662,y=0.8091340642622323 a=pan,b=wye,i=8107,x=0.4038787839956157,y=0.8184040881437044 a=eks,b=eks,i=8108,x=0.8869014997757403,y=0.6363003729185641 a=eks,b=wye,i=8109,x=0.9098383165363556,y=0.06949042541302553 a=eks,b=eks,i=8110,x=0.24771678765070493,y=0.9300163398042232 a=eks,b=eks,i=8111,x=0.3084468757714339,y=0.9610528375033978 a=eks,b=eks,i=8112,x=0.31000078368875394,y=0.36138146669138416 a=wye,b=pan,i=8113,x=0.8110116541728041,y=0.36626731504545484 a=wye,b=hat,i=8114,x=0.8838936751784368,y=0.16448491200443816 a=eks,b=hat,i=8115,x=0.2092866675789835,y=0.6207159056705113 a=wye,b=wye,i=8116,x=0.5430690309464962,y=0.3836390944257766 a=hat,b=wye,i=8117,x=0.14958982301791146,y=0.8124903759523353 a=eks,b=hat,i=8118,x=0.8557041552120278,y=0.5440118132291639 a=hat,b=pan,i=8119,x=0.21486759901824792,y=0.3923954170049483 a=pan,b=zee,i=8120,x=0.6592841558501972,y=0.8794810617469089 a=eks,b=eks,i=8121,x=0.9178846401562378,y=0.7797206181214477 a=wye,b=eks,i=8122,x=0.6079549297413829,y=0.16695883184694493 a=eks,b=hat,i=8123,x=0.8786712780916176,y=0.5986968292379161 a=eks,b=hat,i=8124,x=0.6050565349569751,y=0.17711761175975083 a=zee,b=hat,i=8125,x=0.7071191860103717,y=0.5065338033789499 a=wye,b=pan,i=8126,x=0.9928274286457106,y=0.611287542007201 a=pan,b=pan,i=8127,x=0.7855300117843916,y=0.919185243159261 a=wye,b=wye,i=8128,x=0.5451094693684497,y=0.6739488974426652 a=eks,b=eks,i=8129,x=0.4483894040870827,y=0.04899785138545132 a=wye,b=wye,i=8130,x=0.6304140421100901,y=0.8822571743603556 a=pan,b=wye,i=8131,x=0.722244198415005,y=0.4334139656985445 a=zee,b=eks,i=8132,x=0.9155857784701777,y=0.3496924391322812 a=wye,b=eks,i=8133,x=0.968745042493151,y=0.20226923971903277 a=pan,b=hat,i=8134,x=0.8128492182669791,y=0.392568386730878 a=pan,b=wye,i=8135,x=0.45117859842393093,y=0.2608070414195329 a=zee,b=zee,i=8136,x=0.6400905852932521,y=0.9035481906697407 a=eks,b=hat,i=8137,x=0.039487665967159025,y=0.2642755984465909 a=hat,b=hat,i=8138,x=0.9944665404962163,y=0.03601538456153819 a=eks,b=eks,i=8139,x=0.5696036037683665,y=0.5215775669287221 a=pan,b=pan,i=8140,x=0.24967169231618214,y=0.6896632292080579 a=hat,b=hat,i=8141,x=0.06250971300811059,y=0.6284789386523464 a=zee,b=wye,i=8142,x=0.6462280039869936,y=0.989075899835102 a=pan,b=zee,i=8143,x=0.03802909555431522,y=0.0805330261761773 a=pan,b=wye,i=8144,x=0.7168864018283236,y=0.9743458426619153 a=eks,b=eks,i=8145,x=0.45913426278863745,y=0.7259328042437585 a=hat,b=wye,i=8146,x=0.6466004179249605,y=0.6476130238612243 a=wye,b=pan,i=8147,x=0.7564890511190168,y=0.3370280131510147 a=hat,b=pan,i=8148,x=0.8171601926388993,y=0.12709291977727588 a=eks,b=zee,i=8149,x=0.9838548523184443,y=0.6613857827470255 a=eks,b=hat,i=8150,x=0.42800158894759266,y=0.13739447644695857 a=wye,b=wye,i=8151,x=0.43651846968412356,y=0.716297573022078 a=zee,b=eks,i=8152,x=0.6420074465872548,y=0.5270375969424234 a=wye,b=hat,i=8153,x=0.07009589864190946,y=0.7822728799879559 a=eks,b=wye,i=8154,x=0.00955231084174002,y=0.7545442970218491 a=hat,b=pan,i=8155,x=0.6975376085727898,y=0.6899571370767156 a=zee,b=zee,i=8156,x=0.6395251098634284,y=0.5644973057197734 a=zee,b=pan,i=8157,x=0.39296205632043724,y=0.5511832594601693 a=eks,b=wye,i=8158,x=0.8469059054134236,y=0.9101861362422637 a=hat,b=zee,i=8159,x=0.11438608585479293,y=0.6137417386563446 a=wye,b=pan,i=8160,x=0.6081825274202294,y=0.14769534194863843 a=zee,b=wye,i=8161,x=0.7550762971732712,y=0.8530495051917243 a=zee,b=hat,i=8162,x=0.5735901437760568,y=0.20486220503074404 a=zee,b=hat,i=8163,x=0.13773260453775793,y=0.9660659918112889 a=zee,b=eks,i=8164,x=0.3607826318282279,y=0.1255618535732741 a=pan,b=wye,i=8165,x=0.7460078629419659,y=0.20509518109673885 a=eks,b=wye,i=8166,x=0.2703585359160412,y=0.7519449563416004 a=eks,b=wye,i=8167,x=0.6912089808005739,y=0.351675852657667 a=eks,b=eks,i=8168,x=0.8121986201818601,y=0.4587202609317872 a=eks,b=pan,i=8169,x=0.7194305802045211,y=0.9549210116328868 a=pan,b=eks,i=8170,x=0.6998846923585399,y=0.49886417024119634 a=wye,b=pan,i=8171,x=0.7170199430209871,y=0.4596547273774765 a=zee,b=wye,i=8172,x=0.2188044470516215,y=0.9409262537024545 a=pan,b=eks,i=8173,x=0.7415922617357986,y=0.0627371763205734 a=pan,b=hat,i=8174,x=0.2520020123957777,y=0.5935359054834856 a=pan,b=zee,i=8175,x=0.5756118666838461,y=0.6166940778091887 a=hat,b=wye,i=8176,x=0.8316169809953903,y=0.7727468837518336 a=wye,b=wye,i=8177,x=0.45262062218854693,y=0.6417926617217392 a=zee,b=hat,i=8178,x=0.3414767323625455,y=0.8276355992219739 a=hat,b=wye,i=8179,x=0.6913338216581719,y=0.8634446415532928 a=zee,b=pan,i=8180,x=0.7018819862110542,y=0.30230351547636003 a=hat,b=hat,i=8181,x=0.23955047854083944,y=0.27040254626774474 a=eks,b=wye,i=8182,x=0.2922405169121165,y=0.6645061373641254 a=zee,b=hat,i=8183,x=0.5126902650356464,y=0.8692712883907214 a=wye,b=pan,i=8184,x=0.9824979545102979,y=0.011383619081017482 a=eks,b=hat,i=8185,x=0.8449937251277326,y=0.6863834790266286 a=wye,b=zee,i=8186,x=0.04497354678950516,y=0.5141925160548166 a=hat,b=hat,i=8187,x=0.8262556263127695,y=0.21920924731404545 a=zee,b=zee,i=8188,x=0.8188229466265301,y=0.7731986253520043 a=zee,b=eks,i=8189,x=0.21859629681055648,y=0.04545680236762617 a=wye,b=eks,i=8190,x=0.17387577778883723,y=0.3600963171444731 a=zee,b=zee,i=8191,x=0.6027946184126483,y=0.7560104230688947 a=wye,b=pan,i=8192,x=0.5268204744299162,y=0.7467950199333838 a=pan,b=eks,i=8193,x=0.6279753535291541,y=0.1032502911892883 a=eks,b=pan,i=8194,x=0.4677408184985905,y=0.6073881904140683 a=zee,b=hat,i=8195,x=0.016890946717297295,y=0.9176976283367435 a=eks,b=hat,i=8196,x=0.24986039875431232,y=0.6476803155115554 a=pan,b=pan,i=8197,x=0.4524152227370508,y=0.2620560509511556 a=pan,b=eks,i=8198,x=0.895911910015345,y=0.9918773365972562 a=wye,b=hat,i=8199,x=0.7136636567819744,y=0.7470766277154778 a=hat,b=pan,i=8200,x=0.4231374284492073,y=0.1546230087665409 a=zee,b=zee,i=8201,x=0.7750292191321659,y=0.8295732493514495 a=eks,b=wye,i=8202,x=0.36911480147216946,y=0.18354328249876783 a=pan,b=zee,i=8203,x=0.11943983237768319,y=0.9064110889547424 a=pan,b=eks,i=8204,x=0.6300000735055588,y=0.5097476114683049 a=wye,b=zee,i=8205,x=0.6442554149020752,y=0.6779628314804215 a=pan,b=zee,i=8206,x=0.7692427917331188,y=0.11292590381570122 a=wye,b=pan,i=8207,x=0.39637091869319985,y=0.76304090412573 a=pan,b=hat,i=8208,x=0.7495304237104456,y=0.7417705075817802 a=wye,b=zee,i=8209,x=0.45586308498398453,y=0.9987194582307727 a=hat,b=hat,i=8210,x=0.6476477827460192,y=0.15239181174134397 a=hat,b=pan,i=8211,x=0.11189505956227741,y=0.4621617318098107 a=zee,b=eks,i=8212,x=0.09903637464949222,y=0.11847710838278536 a=zee,b=eks,i=8213,x=0.6131401826730208,y=0.5022261795262266 a=pan,b=eks,i=8214,x=0.18560914156032815,y=0.5491754568832973 a=hat,b=hat,i=8215,x=0.18871663617759393,y=0.7013352032606388 a=zee,b=pan,i=8216,x=0.10912632587239346,y=0.23098909374573406 a=eks,b=hat,i=8217,x=0.9215273193717863,y=0.14757043140565207 a=eks,b=wye,i=8218,x=0.3534829912574341,y=0.5696087711664961 a=hat,b=pan,i=8219,x=0.3322693803060234,y=0.0076976965775436 a=hat,b=wye,i=8220,x=0.8522954785865527,y=0.0007129432355447163 a=hat,b=hat,i=8221,x=0.046602995923670676,y=0.09042940585063108 a=hat,b=pan,i=8222,x=0.0007290941902635684,y=0.9057125778564156 a=zee,b=pan,i=8223,x=0.7575639565865209,y=0.29884828498056126 a=eks,b=wye,i=8224,x=0.995186116661242,y=0.2471757939983208 a=hat,b=zee,i=8225,x=0.3176890506590573,y=0.04443659691703017 a=pan,b=pan,i=8226,x=0.46997531114555335,y=0.91414102033992 a=pan,b=eks,i=8227,x=0.7045690818004235,y=0.016544250381158587 a=pan,b=eks,i=8228,x=0.6859024128283686,y=0.43310740395134806 a=wye,b=hat,i=8229,x=0.4802812953776502,y=0.28698445483944135 a=zee,b=eks,i=8230,x=0.37256536791796446,y=0.22484134058612737 a=hat,b=wye,i=8231,x=0.5993464309625437,y=0.09529154836393428 a=hat,b=pan,i=8232,x=0.053356023845203326,y=0.20750162756833523 a=pan,b=wye,i=8233,x=0.01730056600220997,y=0.4811950137685327 a=wye,b=hat,i=8234,x=0.7002619408413644,y=0.29378327426642736 a=hat,b=zee,i=8235,x=0.5760269820743364,y=0.9876933845887379 a=pan,b=zee,i=8236,x=0.6939214180664733,y=0.01597187286439905 a=pan,b=wye,i=8237,x=0.32216831192867235,y=0.4489268007125685 a=zee,b=pan,i=8238,x=0.4974895037561218,y=0.6955723789507248 a=zee,b=zee,i=8239,x=0.8722145698985853,y=0.5243287664361148 a=hat,b=eks,i=8240,x=0.3119317638364195,y=0.03153083991370387 a=hat,b=hat,i=8241,x=0.8231293488825948,y=0.44236728060318375 a=pan,b=pan,i=8242,x=0.6284004646755453,y=0.5188512495739586 a=eks,b=pan,i=8243,x=0.7790459369722915,y=0.38281709292600563 a=zee,b=zee,i=8244,x=0.5648821749696828,y=0.8387452862417517 a=zee,b=pan,i=8245,x=0.28860321455069415,y=0.5335162435192266 a=pan,b=pan,i=8246,x=0.978767937767844,y=0.595121683896329 a=pan,b=pan,i=8247,x=0.8877669245621814,y=0.993370582244656 a=hat,b=pan,i=8248,x=0.3673861400753813,y=0.7147327203599682 a=wye,b=wye,i=8249,x=0.12404890706154814,y=0.7443872152100742 a=eks,b=zee,i=8250,x=0.5731463701870027,y=0.4981231530018835 a=hat,b=wye,i=8251,x=0.2058939811865338,y=0.8011049893656047 a=zee,b=pan,i=8252,x=0.5300215804178179,y=0.8809898315791685 a=pan,b=pan,i=8253,x=0.14951845911545658,y=0.050337793147141485 a=wye,b=wye,i=8254,x=0.25412836603193123,y=0.7648066786148572 a=zee,b=zee,i=8255,x=0.2969343720495279,y=0.17875651030138728 a=hat,b=hat,i=8256,x=0.6242185970220043,y=0.7024165856278344 a=hat,b=eks,i=8257,x=0.26153012394521724,y=0.9173648797055972 a=hat,b=wye,i=8258,x=0.8531277255736057,y=0.8769896764505173 a=hat,b=zee,i=8259,x=0.80786266752403,y=0.6716375742716686 a=wye,b=hat,i=8260,x=0.8282560647084989,y=0.20433611074471913 a=zee,b=hat,i=8261,x=0.1113559979634432,y=0.7406405068913335 a=zee,b=pan,i=8262,x=0.8457444769341051,y=0.878949052752884 a=hat,b=hat,i=8263,x=0.021118246086347936,y=0.1691340461129066 a=zee,b=wye,i=8264,x=0.9518459612960978,y=0.2793142544459978 a=wye,b=hat,i=8265,x=0.07060877965846446,y=0.7105555726161993 a=wye,b=pan,i=8266,x=0.239318068730919,y=0.9656322414777047 a=wye,b=zee,i=8267,x=0.9407755844234869,y=0.243380428927656 a=hat,b=zee,i=8268,x=0.36840212479306056,y=0.1937179362263023 a=hat,b=eks,i=8269,x=0.11448405024977704,y=0.23838350078789672 a=hat,b=eks,i=8270,x=0.8887588347134354,y=0.3965985425548265 a=zee,b=zee,i=8271,x=0.6960229915393261,y=0.35933925756783236 a=eks,b=wye,i=8272,x=0.6007652533828618,y=0.9021580447695768 a=zee,b=wye,i=8273,x=0.5248356199666635,y=0.26596318599910873 a=eks,b=wye,i=8274,x=0.12638772701100054,y=0.98169945968464 a=eks,b=pan,i=8275,x=0.3873436846104391,y=0.143667378519436 a=wye,b=zee,i=8276,x=0.9887489614515038,y=0.2317693120893085 a=pan,b=hat,i=8277,x=0.07383920400137156,y=0.29779174578381706 a=eks,b=wye,i=8278,x=0.46767848884631935,y=0.05594159328112347 a=pan,b=zee,i=8279,x=0.0664546736505951,y=0.9617417667852406 a=hat,b=zee,i=8280,x=0.3946923561479273,y=0.26022613248187254 a=pan,b=zee,i=8281,x=0.1263835939366954,y=0.432802462221352 a=zee,b=zee,i=8282,x=0.40991526751045837,y=0.4664079852923113 a=hat,b=hat,i=8283,x=0.7155306719275212,y=0.06447259326334698 a=eks,b=zee,i=8284,x=0.18920257463227763,y=0.036407632423777536 a=hat,b=zee,i=8285,x=0.2926888932381453,y=0.7371130359478189 a=eks,b=zee,i=8286,x=0.8003927399144655,y=0.417202355775281 a=pan,b=wye,i=8287,x=0.6189613307505946,y=0.6990573098254149 a=eks,b=wye,i=8288,x=0.4497557556254256,y=0.24756315944170548 a=hat,b=wye,i=8289,x=0.565349257018066,y=0.9695790816330443 a=wye,b=hat,i=8290,x=0.1961063995221537,y=0.8919123622039012 a=pan,b=zee,i=8291,x=0.735310256094497,y=0.8766337081918637 a=wye,b=pan,i=8292,x=0.11264565494014644,y=0.9526134134675315 a=pan,b=zee,i=8293,x=0.42564320453866944,y=0.754899630271162 a=wye,b=eks,i=8294,x=0.03212624806856701,y=0.6046010405280738 a=hat,b=zee,i=8295,x=0.9314009276546747,y=0.3634004587734717 a=pan,b=eks,i=8296,x=0.4120888305335959,y=0.750837757399676 a=pan,b=eks,i=8297,x=0.9819888226687685,y=0.5660827409414791 a=wye,b=zee,i=8298,x=0.8302599994058273,y=0.7781190613623368 a=zee,b=pan,i=8299,x=0.7102421054905385,y=0.18545230561185977 a=eks,b=eks,i=8300,x=0.3945447287695022,y=0.18429543577101226 a=hat,b=wye,i=8301,x=0.5127430759316344,y=0.37361440070960017 a=zee,b=pan,i=8302,x=0.6034067583933804,y=0.04121009695962874 a=hat,b=pan,i=8303,x=0.46102687899911865,y=0.028654914603273074 a=pan,b=wye,i=8304,x=0.2251798670287818,y=0.1196124323878246 a=pan,b=pan,i=8305,x=0.5277320763446786,y=0.2381453397638834 a=wye,b=wye,i=8306,x=0.46134525628997447,y=0.14969908222679185 a=zee,b=wye,i=8307,x=0.4681491013126058,y=0.5960038288514199 a=pan,b=hat,i=8308,x=0.49210482260143007,y=0.9993016708772244 a=wye,b=zee,i=8309,x=0.8206434836667577,y=0.48326589462644276 a=eks,b=hat,i=8310,x=0.9655430452589465,y=0.9245411060012981 a=zee,b=zee,i=8311,x=0.1815329790070851,y=0.8035031242939596 a=hat,b=pan,i=8312,x=0.547677016360058,y=0.9650817043634582 a=pan,b=pan,i=8313,x=0.6126245890384583,y=0.2627563830782662 a=pan,b=pan,i=8314,x=0.5494985537362173,y=0.4929560062893006 a=hat,b=zee,i=8315,x=0.24017154445473743,y=0.8801615057175497 a=eks,b=zee,i=8316,x=0.01845753106507053,y=0.07103606295934006 a=eks,b=pan,i=8317,x=0.729335030923378,y=0.9595878811451796 a=zee,b=wye,i=8318,x=0.3037988276042912,y=0.9939532896787204 a=hat,b=hat,i=8319,x=0.31751994407032824,y=0.04431824787878602 a=eks,b=wye,i=8320,x=0.32774406925223687,y=0.39755988935681663 a=eks,b=pan,i=8321,x=0.2983894526754026,y=0.6350152253803334 a=wye,b=zee,i=8322,x=0.21110663580942235,y=0.5844040682223098 a=wye,b=hat,i=8323,x=0.27575135446576815,y=0.5943122394277006 a=hat,b=zee,i=8324,x=0.03714831235343263,y=0.18937718204762566 a=zee,b=hat,i=8325,x=0.6815362179515927,y=0.054322149908386796 a=hat,b=wye,i=8326,x=0.28959963076391493,y=0.36439348847404984 a=pan,b=eks,i=8327,x=0.4907923620285024,y=0.7411167930742034 a=wye,b=hat,i=8328,x=0.5085798206640023,y=0.8237875259659011 a=zee,b=pan,i=8329,x=0.16898862414886817,y=0.15560228332434112 a=wye,b=eks,i=8330,x=0.29464103904562966,y=0.7341494813651416 a=pan,b=wye,i=8331,x=0.7050741639259068,y=0.24486480402061384 a=wye,b=pan,i=8332,x=0.7019265469630769,y=0.07151895734610458 a=wye,b=hat,i=8333,x=0.3553335894794559,y=0.9167960838619573 a=eks,b=hat,i=8334,x=0.5699916051880387,y=0.13240719214910757 a=eks,b=wye,i=8335,x=0.22545133259971217,y=0.9891874451094091 a=wye,b=pan,i=8336,x=0.751226927786043,y=0.4644307134498339 a=wye,b=hat,i=8337,x=0.9324084470957861,y=0.30464033139638336 a=pan,b=wye,i=8338,x=0.8320742055010252,y=0.3040383465855868 a=zee,b=hat,i=8339,x=0.04629611790555632,y=0.6570852521967993 a=zee,b=wye,i=8340,x=0.779538114438638,y=0.8910397798499486 a=pan,b=pan,i=8341,x=0.6773754216149304,y=0.613857099295925 a=wye,b=hat,i=8342,x=0.1458720698488648,y=0.4351692119049885 a=wye,b=wye,i=8343,x=0.818540088896837,y=0.09911450492965423 a=zee,b=hat,i=8344,x=0.1958836142058411,y=0.9176685083913124 a=zee,b=eks,i=8345,x=0.5108081370139803,y=0.8369754291473595 a=pan,b=zee,i=8346,x=0.028776659972544194,y=0.6948652507080405 a=hat,b=wye,i=8347,x=0.5681600007983288,y=0.054076468737378036 a=zee,b=wye,i=8348,x=0.803443835215121,y=0.5295807220048788 a=eks,b=pan,i=8349,x=0.9755546767865578,y=0.8799835489524848 a=eks,b=zee,i=8350,x=0.24384090338130648,y=0.6466628002800704 a=eks,b=wye,i=8351,x=0.03641540536678134,y=0.08744451304860146 a=zee,b=wye,i=8352,x=0.5212869356402663,y=0.28575619803116314 a=hat,b=hat,i=8353,x=0.055663129013605483,y=0.3787786437258225 a=eks,b=hat,i=8354,x=0.5157212090975359,y=0.8904310076101238 a=pan,b=wye,i=8355,x=0.7949456612203025,y=0.03903053598722972 a=hat,b=hat,i=8356,x=0.5915574129139735,y=0.5501666687575646 a=zee,b=eks,i=8357,x=0.7920429015988977,y=0.11834165152142673 a=pan,b=hat,i=8358,x=0.42334512731520135,y=0.6760099049563617 a=hat,b=hat,i=8359,x=0.672862622018669,y=0.9813314150345762 a=hat,b=zee,i=8360,x=0.621024648933727,y=0.20026822440380232 a=pan,b=hat,i=8361,x=0.32174647083648733,y=0.5895462222915597 a=hat,b=hat,i=8362,x=0.8239226232469129,y=0.5363672557332027 a=zee,b=hat,i=8363,x=0.2786903002001039,y=0.9687065243326013 a=eks,b=zee,i=8364,x=0.6109061549072763,y=0.9310832897288339 a=pan,b=pan,i=8365,x=0.6603069810848408,y=0.8682978196165198 a=pan,b=eks,i=8366,x=0.8584731893684808,y=0.018687872462489152 a=zee,b=eks,i=8367,x=0.4049863490547647,y=0.4247029183107722 a=wye,b=eks,i=8368,x=0.30480439273047766,y=0.48048174444338265 a=zee,b=wye,i=8369,x=0.4648458105978611,y=0.21546080520985877 a=hat,b=pan,i=8370,x=0.7696984054132116,y=0.7047713537963836 a=eks,b=zee,i=8371,x=0.37597533966420293,y=0.08724777473553502 a=zee,b=hat,i=8372,x=0.5295738751761022,y=0.49181407244012054 a=zee,b=eks,i=8373,x=0.6150222878860193,y=0.5607136634592303 a=pan,b=wye,i=8374,x=0.4528870946233897,y=0.07597161789124052 a=pan,b=zee,i=8375,x=0.5301175183103385,y=0.8601180937794322 a=hat,b=eks,i=8376,x=0.06489427108475243,y=0.40261315507492046 a=eks,b=wye,i=8377,x=0.563425411256789,y=0.9184806642610032 a=eks,b=wye,i=8378,x=0.49250711472543074,y=0.5894409813302941 a=wye,b=wye,i=8379,x=0.3106946403141324,y=0.9203740586209803 a=hat,b=pan,i=8380,x=0.46061124100732664,y=0.7117135535467465 a=pan,b=pan,i=8381,x=0.9008707927717292,y=0.3595902617465878 a=zee,b=wye,i=8382,x=0.7952836839227378,y=0.6833817456403316 a=hat,b=hat,i=8383,x=0.3984261676380828,y=0.1738533271203584 a=eks,b=wye,i=8384,x=0.11104863533882658,y=0.3751765500241939 a=hat,b=pan,i=8385,x=0.49685402919308186,y=0.07834061857462182 a=zee,b=pan,i=8386,x=0.7967208048423021,y=0.6030273368815906 a=zee,b=pan,i=8387,x=0.1807569167154014,y=0.7798562786722997 a=pan,b=zee,i=8388,x=0.019186371949722614,y=0.712217475239358 a=pan,b=eks,i=8389,x=0.7546663778603894,y=0.19055481748967162 a=eks,b=hat,i=8390,x=0.750192269695654,y=0.2196686846490249 a=hat,b=eks,i=8391,x=0.989982527715026,y=0.7339778723038518 a=hat,b=zee,i=8392,x=0.1535960092053097,y=0.48365184245511483 a=wye,b=pan,i=8393,x=0.5371021532444956,y=0.5076931407974227 a=zee,b=eks,i=8394,x=0.9938525452278908,y=0.9944136062432827 a=hat,b=eks,i=8395,x=0.5759238042621931,y=0.47928472474217776 a=wye,b=eks,i=8396,x=0.7599928088669528,y=0.44980430671729377 a=hat,b=zee,i=8397,x=0.652668800860253,y=0.4288216397914163 a=wye,b=pan,i=8398,x=0.46997259303660743,y=0.6215175533218944 a=zee,b=pan,i=8399,x=0.9401027436536872,y=0.8241834377991233 a=wye,b=pan,i=8400,x=0.09022482342468607,y=0.7117741343367263 a=eks,b=hat,i=8401,x=0.21592490518329377,y=0.33061077431647556 a=eks,b=hat,i=8402,x=0.9947356560721309,y=0.7409670678572535 a=eks,b=zee,i=8403,x=0.17272225530114538,y=0.8080858181702887 a=zee,b=eks,i=8404,x=0.3493565206043524,y=0.09054805425762869 a=pan,b=wye,i=8405,x=0.4811201910981,y=0.18742552959849512 a=eks,b=zee,i=8406,x=0.31784551409346495,y=0.7449149218097839 a=pan,b=wye,i=8407,x=0.6830421268168155,y=0.23886758610551817 a=zee,b=hat,i=8408,x=0.9200690263533268,y=0.844860872568536 a=zee,b=pan,i=8409,x=0.9273895913936498,y=0.34564042630503233 a=wye,b=eks,i=8410,x=0.8159771407795444,y=0.17344618297387282 a=hat,b=zee,i=8411,x=0.17599234652950568,y=0.8329306332017614 a=eks,b=wye,i=8412,x=0.30559437664735667,y=0.2954096578389033 a=eks,b=hat,i=8413,x=0.4338584089312799,y=0.1949819510216354 a=wye,b=eks,i=8414,x=0.522368921381192,y=0.6530064427565451 a=wye,b=eks,i=8415,x=0.40077151734215266,y=0.2875570398483994 a=zee,b=wye,i=8416,x=0.44384210652184575,y=0.34372338201033137 a=hat,b=zee,i=8417,x=0.8269419111916478,y=0.5295548379993134 a=pan,b=eks,i=8418,x=0.4380512868717956,y=0.75013896261849 a=zee,b=zee,i=8419,x=0.0075621874159564895,y=0.6690403936644571 a=pan,b=zee,i=8420,x=0.23857482485031023,y=0.7909075804228464 a=zee,b=pan,i=8421,x=0.3657309162534651,y=0.6228123699358817 a=eks,b=wye,i=8422,x=0.6050408267820816,y=0.6834071285687362 a=pan,b=eks,i=8423,x=0.926919755552011,y=0.26857376981837733 a=zee,b=pan,i=8424,x=0.8931825703051405,y=0.3852663649349296 a=wye,b=hat,i=8425,x=0.7453660507413682,y=0.13411772302924097 a=hat,b=zee,i=8426,x=0.15542783988635755,y=0.704049056631255 a=zee,b=eks,i=8427,x=0.4741772361406499,y=0.4439154258100234 a=wye,b=pan,i=8428,x=0.08174430747151484,y=0.6148589268621117 a=zee,b=pan,i=8429,x=0.5376842505367805,y=0.3213151447208863 a=pan,b=pan,i=8430,x=0.7934355146306612,y=0.2130128581792352 a=pan,b=hat,i=8431,x=0.39291331641736893,y=0.8094069164458879 a=wye,b=pan,i=8432,x=0.06348257739180108,y=0.5106796157018605 a=hat,b=zee,i=8433,x=0.5390621535629033,y=0.2952379177915695 a=zee,b=zee,i=8434,x=0.9547567491718741,y=0.12013342742496513 a=hat,b=pan,i=8435,x=0.38866184034912554,y=0.059525983951048245 a=pan,b=pan,i=8436,x=0.006149130517828727,y=0.5641604969336926 a=hat,b=eks,i=8437,x=0.5253247675869896,y=0.5165646242633789 a=hat,b=wye,i=8438,x=0.17892790253218238,y=0.7014261262330826 a=eks,b=pan,i=8439,x=0.8952428124136508,y=0.9997604543675731 a=hat,b=pan,i=8440,x=0.9697671337199946,y=0.4191895939702769 a=zee,b=hat,i=8441,x=0.22626716374612477,y=0.3072575476209706 a=zee,b=hat,i=8442,x=0.012897791583037166,y=0.45928268470148015 a=eks,b=hat,i=8443,x=0.26800839200996895,y=0.6418100107433928 a=pan,b=hat,i=8444,x=0.033038289736824766,y=0.05539460621434722 a=pan,b=hat,i=8445,x=0.3310467747539301,y=0.028084005329851225 a=hat,b=zee,i=8446,x=0.178210692330519,y=0.4596388855650022 a=hat,b=wye,i=8447,x=0.44766765422608423,y=0.2937943605301816 a=eks,b=wye,i=8448,x=0.9730885844448779,y=0.6233373493085322 a=pan,b=hat,i=8449,x=0.020061713489634814,y=0.6882480566852568 a=pan,b=wye,i=8450,x=0.2793484686069333,y=0.44070351370129646 a=pan,b=zee,i=8451,x=0.6735785887971937,y=0.2100853452380218 a=wye,b=wye,i=8452,x=0.47072648393194716,y=0.3041985693356054 a=wye,b=pan,i=8453,x=0.8533811491024729,y=0.9678356263785118 a=wye,b=eks,i=8454,x=0.586163122107279,y=0.18970011803086628 a=pan,b=hat,i=8455,x=0.5906501253369019,y=0.6123184772904339 a=zee,b=hat,i=8456,x=0.08188017117818536,y=0.5533473423116015 a=hat,b=wye,i=8457,x=0.09332068743830269,y=0.20145292592178443 a=eks,b=zee,i=8458,x=0.6797834696384837,y=0.10797028132301578 a=zee,b=wye,i=8459,x=0.6609343823302558,y=0.42546615879700533 a=zee,b=wye,i=8460,x=0.8953715335446936,y=0.11110049694702284 a=eks,b=pan,i=8461,x=0.3064924756043348,y=0.844175432052883 a=wye,b=zee,i=8462,x=0.8562111449628035,y=0.3207655114753235 a=hat,b=pan,i=8463,x=0.278695825691301,y=0.1017956876584839 a=zee,b=pan,i=8464,x=0.008481311112248147,y=0.7901219557747767 a=wye,b=hat,i=8465,x=0.9233177773701866,y=0.4551415267122566 a=hat,b=hat,i=8466,x=0.14139708059138034,y=0.10409871077285981 a=wye,b=eks,i=8467,x=0.15399092408367587,y=0.8471702381741639 a=wye,b=pan,i=8468,x=0.7612272119425962,y=0.4244931128555939 a=pan,b=pan,i=8469,x=0.1347759881116134,y=0.2455909077182844 a=zee,b=eks,i=8470,x=0.7123089216903319,y=0.12685439711002044 a=zee,b=zee,i=8471,x=0.516240721628621,y=0.6586906452113941 a=eks,b=hat,i=8472,x=0.6674728443046178,y=0.1746237628027798 a=eks,b=hat,i=8473,x=0.09764518520867405,y=0.3404811785298787 a=wye,b=hat,i=8474,x=0.022760068608759787,y=0.5809138462442031 a=wye,b=wye,i=8475,x=0.9378861915703766,y=0.2850230950144711 a=wye,b=hat,i=8476,x=0.8745714693022778,y=0.6067344417467008 a=eks,b=hat,i=8477,x=0.9309461833265447,y=0.5563876226531717 a=zee,b=eks,i=8478,x=0.26305562568234253,y=0.9564416471738901 a=zee,b=zee,i=8479,x=0.267729670683009,y=0.8948780265074652 a=wye,b=wye,i=8480,x=0.16146423266136367,y=0.06354282797551147 a=pan,b=eks,i=8481,x=0.7416513487460877,y=0.3796824390692355 a=pan,b=pan,i=8482,x=0.8910001828466121,y=0.7723030338995308 a=eks,b=zee,i=8483,x=0.20374081828155488,y=0.4241287356182083 a=eks,b=pan,i=8484,x=0.2661511616359886,y=0.5443269070761398 a=pan,b=zee,i=8485,x=0.3471597707881957,y=0.5383222143237165 a=wye,b=eks,i=8486,x=0.9422065000597399,y=0.9149504343179683 a=zee,b=hat,i=8487,x=0.8443654519702793,y=0.40835643886431905 a=hat,b=eks,i=8488,x=0.4452671926810047,y=0.11987318281596804 a=eks,b=pan,i=8489,x=0.8711743497988805,y=0.05126471215006212 a=eks,b=pan,i=8490,x=0.21893201804499796,y=0.841786373878745 a=pan,b=zee,i=8491,x=0.14450135153044963,y=0.4964690028665373 a=wye,b=zee,i=8492,x=0.30534075186128107,y=0.8304463953467625 a=wye,b=pan,i=8493,x=0.19415677927998398,y=0.36967456189817616 a=zee,b=wye,i=8494,x=0.6014391280905923,y=0.9035203941606601 a=pan,b=wye,i=8495,x=0.9535261800524316,y=0.6741780286573957 a=zee,b=hat,i=8496,x=0.621523130626718,y=0.4636815949354597 a=hat,b=hat,i=8497,x=0.3932809847758547,y=0.32342585911847266 a=zee,b=eks,i=8498,x=0.5874342193773027,y=0.07510933559358712 a=hat,b=zee,i=8499,x=0.6960433804921428,y=0.9688422831160675 a=hat,b=hat,i=8500,x=0.948682263253869,y=0.894330225437426 a=hat,b=wye,i=8501,x=0.9251536771842801,y=0.5375948099135825 a=eks,b=eks,i=8502,x=0.7145487756177015,y=0.48881971388046497 a=wye,b=hat,i=8503,x=0.43025676669473123,y=0.7342583446741899 a=zee,b=hat,i=8504,x=0.33240950818517156,y=0.08420305010182172 a=pan,b=wye,i=8505,x=0.04933447605388053,y=0.43620839928024635 a=zee,b=eks,i=8506,x=0.5644240816881203,y=0.30905524481111557 a=zee,b=hat,i=8507,x=0.8799876950191433,y=0.8626007536651286 a=eks,b=pan,i=8508,x=0.5903156727749356,y=0.08521525736448865 a=hat,b=hat,i=8509,x=0.4819653658346117,y=0.47086103178508854 a=eks,b=pan,i=8510,x=0.09221850268394138,y=0.5189296436201934 a=wye,b=hat,i=8511,x=0.5399541727181182,y=0.8444405945197476 a=hat,b=zee,i=8512,x=0.8829979498980527,y=0.22352194169557127 a=eks,b=pan,i=8513,x=0.10151458816501346,y=0.1389357491074602 a=wye,b=eks,i=8514,x=0.145836390847488,y=0.3255110732802976 a=eks,b=zee,i=8515,x=0.5023980888022918,y=0.49053802703856897 a=wye,b=pan,i=8516,x=0.4017850863763818,y=0.44971529290471857 a=pan,b=hat,i=8517,x=0.9781793338882204,y=0.021166333309513008 a=pan,b=zee,i=8518,x=0.7275818161813503,y=0.5297860907729676 a=eks,b=eks,i=8519,x=0.20825394541995124,y=0.20861255119440336 a=wye,b=pan,i=8520,x=0.8898604947131726,y=0.597970731230186 a=eks,b=wye,i=8521,x=0.3648001678117977,y=0.19557380766743293 a=pan,b=eks,i=8522,x=0.6966179778593448,y=0.6840334680719272 a=hat,b=hat,i=8523,x=0.440001403027384,y=0.45225896734383286 a=hat,b=wye,i=8524,x=0.859237452752394,y=0.1542124316389395 a=wye,b=wye,i=8525,x=0.725596832315083,y=0.22913389637676507 a=hat,b=eks,i=8526,x=0.6308328182217219,y=0.9629302966330678 a=wye,b=wye,i=8527,x=0.8115562833033729,y=0.4166596968518107 a=zee,b=pan,i=8528,x=0.1829199682476771,y=0.22085981047936964 a=hat,b=wye,i=8529,x=0.8572334709695195,y=0.7640619187795664 a=zee,b=wye,i=8530,x=0.7086732598851492,y=0.4127159537504168 a=zee,b=wye,i=8531,x=0.32354124502667125,y=0.2318309195815882 a=pan,b=hat,i=8532,x=0.9446099166208107,y=0.1614735751140206 a=pan,b=wye,i=8533,x=0.4223281734144666,y=0.10945011806361638 a=wye,b=zee,i=8534,x=0.27597556866373363,y=0.8816530467647844 a=wye,b=hat,i=8535,x=0.7402933295244709,y=0.2866045341793103 a=pan,b=eks,i=8536,x=0.23950266321443625,y=0.2173609684570218 a=wye,b=eks,i=8537,x=0.8479922856732104,y=0.646967422694876 a=pan,b=eks,i=8538,x=0.9430852556493492,y=0.8645812565386866 a=wye,b=wye,i=8539,x=0.5424202389577869,y=0.7980364309577922 a=zee,b=zee,i=8540,x=0.6480753391409477,y=0.5064183808137883 a=eks,b=hat,i=8541,x=0.38813893407288325,y=0.12561215999003672 a=zee,b=hat,i=8542,x=0.17586391865769935,y=0.610479743176282 a=pan,b=zee,i=8543,x=0.7196826298375226,y=0.21171452421116865 a=zee,b=eks,i=8544,x=0.042214602250652544,y=0.7797653758284612 a=pan,b=pan,i=8545,x=0.6623908411097427,y=0.2713858225948562 a=pan,b=eks,i=8546,x=0.8347245917805975,y=0.32344231920229216 a=eks,b=zee,i=8547,x=0.17659256136803803,y=0.2734607705288187 a=hat,b=wye,i=8548,x=0.06872905733725654,y=0.24606652109262273 a=pan,b=pan,i=8549,x=0.45957314823744033,y=0.5826268929712483 a=hat,b=zee,i=8550,x=0.5390972348460589,y=0.832817959583314 a=zee,b=zee,i=8551,x=0.9479215142295764,y=0.31091453552453974 a=pan,b=wye,i=8552,x=0.8946104855739115,y=0.2336514856632098 a=eks,b=zee,i=8553,x=0.1756747767253124,y=0.40173864656676805 a=eks,b=eks,i=8554,x=0.35767825814151055,y=0.6530934959898533 a=eks,b=eks,i=8555,x=0.9294958471853418,y=0.44323868180332826 a=hat,b=wye,i=8556,x=0.2055964313614329,y=0.7508496809797562 a=zee,b=pan,i=8557,x=0.4734760023383495,y=0.24574081766297817 a=pan,b=pan,i=8558,x=0.01915285502673958,y=0.0710080820684984 a=wye,b=hat,i=8559,x=0.36628589114868737,y=0.7546365740130917 a=pan,b=pan,i=8560,x=0.8369571665486479,y=0.6640166878609967 a=pan,b=wye,i=8561,x=0.9827417467300459,y=0.47548149029733666 a=eks,b=hat,i=8562,x=0.9263781942963408,y=0.13871044819580336 a=pan,b=pan,i=8563,x=0.9901067426610356,y=0.22526379572530497 a=zee,b=eks,i=8564,x=0.4638040598773725,y=0.34104108677898826 a=wye,b=hat,i=8565,x=0.48113198136329016,y=0.3218458306963313 a=zee,b=pan,i=8566,x=0.6161448715164534,y=0.48576149543063263 a=pan,b=hat,i=8567,x=0.7401694289092702,y=0.8501949156927895 a=wye,b=eks,i=8568,x=0.5607940018315913,y=0.6859095069187073 a=hat,b=wye,i=8569,x=0.8193761557404394,y=0.6213974290333986 a=hat,b=hat,i=8570,x=0.218909328728924,y=0.7083399518815072 a=hat,b=pan,i=8571,x=0.3374929371344728,y=0.11008369139923513 a=wye,b=zee,i=8572,x=0.5104050859274984,y=0.84636724693727 a=wye,b=pan,i=8573,x=0.304284204335561,y=0.8057462093976527 a=hat,b=pan,i=8574,x=0.1304164384473907,y=0.7795954672055522 a=eks,b=hat,i=8575,x=0.411309283136459,y=0.3134260008884213 a=hat,b=eks,i=8576,x=0.8094118504289595,y=0.3462825803661308 a=eks,b=pan,i=8577,x=0.8378950242503957,y=0.3281587348968884 a=wye,b=eks,i=8578,x=0.8671191631706497,y=0.848376644694914 a=wye,b=hat,i=8579,x=0.3629850782784485,y=0.7894725040297135 a=hat,b=pan,i=8580,x=0.20981130689562955,y=0.4981591059735274 a=wye,b=zee,i=8581,x=0.9549730188079689,y=0.16399154830304508 a=zee,b=wye,i=8582,x=0.48899851680494,y=0.05774193348030199 a=hat,b=hat,i=8583,x=0.18626492222161328,y=0.7003807702816355 a=wye,b=zee,i=8584,x=0.36453353655204557,y=0.784021739601697 a=pan,b=zee,i=8585,x=0.8620613291960066,y=0.8283882429708938 a=zee,b=wye,i=8586,x=0.6927422583943957,y=0.7194075668113131 a=hat,b=pan,i=8587,x=0.0052693086009946155,y=0.6525496192910188 a=eks,b=hat,i=8588,x=0.451596899385722,y=0.5139458108988265 a=hat,b=zee,i=8589,x=0.2926550989813841,y=0.35398173553544887 a=eks,b=wye,i=8590,x=0.9239196319519597,y=0.14591437779625882 a=hat,b=pan,i=8591,x=0.7873294723300266,y=0.5332360898832793 a=zee,b=pan,i=8592,x=0.6070860534520608,y=0.06388885983216774 a=zee,b=zee,i=8593,x=0.2617818185031422,y=0.43707681521897646 a=pan,b=hat,i=8594,x=0.6468386400257026,y=0.38978242152795606 a=zee,b=eks,i=8595,x=0.42488684401408794,y=0.2974668150516677 a=wye,b=wye,i=8596,x=0.8826796731081049,y=0.7850131924698824 a=wye,b=eks,i=8597,x=0.006860697351333767,y=0.19549617714299017 a=hat,b=zee,i=8598,x=0.07939885603933172,y=0.677412657910395 a=wye,b=zee,i=8599,x=0.7184888188080124,y=0.8697536607671493 a=hat,b=wye,i=8600,x=0.84790186953787,y=0.8684654646246722 a=eks,b=pan,i=8601,x=0.8421109599018441,y=0.16320118728086785 a=pan,b=pan,i=8602,x=0.26047864829581335,y=0.6808750509660122 a=eks,b=pan,i=8603,x=0.31611152902489204,y=0.11267222283796785 a=eks,b=wye,i=8604,x=0.06845978562369492,y=0.7238513464535802 a=pan,b=zee,i=8605,x=0.6530000366736074,y=0.10675264632456327 a=wye,b=wye,i=8606,x=0.06774372832796882,y=0.567171071395945 a=pan,b=wye,i=8607,x=0.7672859830291083,y=0.9905418229463311 a=wye,b=hat,i=8608,x=0.9486273082548317,y=0.49394451768421244 a=zee,b=wye,i=8609,x=0.8594077389671471,y=0.39612060375973734 a=eks,b=hat,i=8610,x=0.20455104503269428,y=0.8497404270304781 a=eks,b=wye,i=8611,x=0.024981210157926648,y=0.4592839770075655 a=wye,b=pan,i=8612,x=0.9729537123818344,y=0.31179500609148325 a=pan,b=pan,i=8613,x=0.9509457095140577,y=0.47129012611509 a=wye,b=hat,i=8614,x=0.9846913444886134,y=0.02710103368583705 a=zee,b=wye,i=8615,x=0.3010264833529994,y=0.7455884610745039 a=pan,b=zee,i=8616,x=0.6883510014246306,y=0.8824450569844674 a=zee,b=eks,i=8617,x=0.4515091274400017,y=0.020225254455900066 a=zee,b=hat,i=8618,x=0.8851862421614336,y=0.15621840171343437 a=pan,b=hat,i=8619,x=0.2649678025213431,y=0.39936058228129934 a=zee,b=pan,i=8620,x=0.7597636742317367,y=0.1317502476459378 a=zee,b=zee,i=8621,x=0.13218842583668222,y=0.03127532132246047 a=hat,b=eks,i=8622,x=0.49385289030098156,y=0.3427851043390181 a=eks,b=zee,i=8623,x=0.18543631005824213,y=0.19588655519979803 a=pan,b=zee,i=8624,x=0.10763314570414217,y=0.08213428508081799 a=pan,b=eks,i=8625,x=0.6882597637249681,y=0.8142971025439197 a=eks,b=hat,i=8626,x=0.6080795099100825,y=0.8728243765075873 a=eks,b=eks,i=8627,x=0.770624339998738,y=0.07831235750300036 a=hat,b=zee,i=8628,x=0.46540841676613476,y=0.10159896993531026 a=zee,b=pan,i=8629,x=0.004614760806835205,y=0.9592385994725491 a=wye,b=pan,i=8630,x=0.6807920836499873,y=0.8665298197163882 a=pan,b=eks,i=8631,x=0.6858410458377651,y=0.7631951114896744 a=eks,b=hat,i=8632,x=0.20944920807915668,y=0.17415067019098263 a=zee,b=wye,i=8633,x=0.015521112321513986,y=0.870629718512366 a=zee,b=pan,i=8634,x=0.3707685639916669,y=0.2775760739581703 a=pan,b=zee,i=8635,x=0.6292193294154781,y=0.21469655787258057 a=zee,b=zee,i=8636,x=0.6107700273929492,y=0.14811799805161463 a=zee,b=eks,i=8637,x=0.6395976874259532,y=0.9961211959529084 a=pan,b=wye,i=8638,x=0.8056202987173707,y=0.28960110672185313 a=zee,b=eks,i=8639,x=0.2524229698549828,y=0.17611542817224723 a=zee,b=zee,i=8640,x=0.08482390402218887,y=0.36890700689619493 a=eks,b=pan,i=8641,x=0.46605482768215767,y=0.07140744226571838 a=eks,b=hat,i=8642,x=0.10408804972672026,y=0.23204314849773244 a=hat,b=zee,i=8643,x=0.3955443156971198,y=0.35524981169296355 a=zee,b=hat,i=8644,x=0.7215420507798297,y=0.03391309500084805 a=eks,b=pan,i=8645,x=0.9910156023068047,y=0.21643864467214002 a=zee,b=wye,i=8646,x=0.6658298582773444,y=0.36894449402470386 a=wye,b=wye,i=8647,x=0.8282095483187364,y=0.5670959372120373 a=zee,b=hat,i=8648,x=0.0831367015182175,y=0.7424505172193498 a=pan,b=hat,i=8649,x=0.8273775847857144,y=0.849837822420028 a=hat,b=pan,i=8650,x=0.7798855565061036,y=0.6249390723014688 a=pan,b=hat,i=8651,x=0.15776823313362787,y=0.6837656369090205 a=pan,b=hat,i=8652,x=0.12499193321086843,y=0.8909115194708364 a=zee,b=hat,i=8653,x=0.623624299660614,y=0.28437293457698065 a=wye,b=hat,i=8654,x=0.4794478591209653,y=0.6149276606394762 a=zee,b=hat,i=8655,x=0.9202280019494714,y=0.43438007188126115 a=pan,b=wye,i=8656,x=0.5362020839763336,y=0.5898815059855541 a=hat,b=pan,i=8657,x=0.4419120878855759,y=0.04387616479212919 a=wye,b=pan,i=8658,x=0.37394689239227175,y=0.6932810199911174 a=hat,b=eks,i=8659,x=0.09027772061731287,y=0.5938968603299669 a=hat,b=eks,i=8660,x=0.44939114811664815,y=0.8033098658688053 a=eks,b=hat,i=8661,x=0.9412054441857266,y=0.7031238908715453 a=hat,b=wye,i=8662,x=0.026880033398767544,y=0.9570616615315023 a=pan,b=zee,i=8663,x=0.16400229878818795,y=0.7569220441881562 a=hat,b=eks,i=8664,x=0.737351462653292,y=0.008534196836191721 a=zee,b=eks,i=8665,x=0.16620817209916572,y=0.4183421439519892 a=eks,b=eks,i=8666,x=0.2605898276210701,y=0.9107791581080643 a=pan,b=eks,i=8667,x=0.16483965969504477,y=0.008847013569707962 a=hat,b=hat,i=8668,x=0.5758275186132803,y=0.4376894563403356 a=wye,b=eks,i=8669,x=0.30935622306150556,y=0.5406996947409577 a=hat,b=eks,i=8670,x=0.6115682118401596,y=0.709847191339046 a=hat,b=pan,i=8671,x=0.5876224326167997,y=0.655751406127023 a=pan,b=pan,i=8672,x=0.7383754184207463,y=0.4204832285810981 a=wye,b=wye,i=8673,x=0.9992635865771493,y=0.4216138590799462 a=zee,b=wye,i=8674,x=0.30144308355523053,y=0.985811453648491 a=hat,b=eks,i=8675,x=0.7901168710228115,y=0.02854873755150633 a=wye,b=zee,i=8676,x=0.458348366941119,y=0.0654065118924938 a=pan,b=eks,i=8677,x=0.576018794663166,y=0.021732489132554877 a=wye,b=zee,i=8678,x=0.051768914692817525,y=0.9811531769362358 a=wye,b=eks,i=8679,x=0.8714866001900081,y=0.5074064697197682 a=pan,b=zee,i=8680,x=0.8573300862564848,y=0.8110639386847459 a=eks,b=wye,i=8681,x=0.9176784134359273,y=0.2764422061252122 a=hat,b=eks,i=8682,x=0.8690529123645934,y=0.9535269156601301 a=wye,b=zee,i=8683,x=0.6350123840910076,y=0.6382912385391265 a=hat,b=eks,i=8684,x=0.6215103356564846,y=0.14887437241814006 a=zee,b=wye,i=8685,x=0.584126263404004,y=0.7538247769853159 a=wye,b=wye,i=8686,x=0.43551003027785373,y=0.3236501977657479 a=wye,b=hat,i=8687,x=0.8880686097383739,y=0.6330150426943297 a=wye,b=zee,i=8688,x=0.7635796389205769,y=0.2638125019378026 a=zee,b=wye,i=8689,x=0.3761531727653552,y=0.9022543136929991 a=wye,b=eks,i=8690,x=0.08913417768338172,y=0.9531306393247156 a=eks,b=pan,i=8691,x=0.9943932359314775,y=0.9072697301052425 a=eks,b=zee,i=8692,x=0.5457000332265722,y=0.4837579979584361 a=zee,b=pan,i=8693,x=0.4765529256302863,y=0.7047109057288847 a=eks,b=hat,i=8694,x=0.742421569895559,y=0.766958291324268 a=zee,b=eks,i=8695,x=0.23665653193040737,y=0.2743956071876914 a=wye,b=wye,i=8696,x=0.2888070230684594,y=0.9935631592216062 a=hat,b=zee,i=8697,x=0.1507630405832039,y=0.8444262680025181 a=zee,b=pan,i=8698,x=0.9647755452332127,y=0.3090467608406059 a=wye,b=wye,i=8699,x=0.18194655224399203,y=0.9052438757034091 a=pan,b=wye,i=8700,x=0.849446996637848,y=0.7731446643107283 a=pan,b=pan,i=8701,x=0.6101087522261474,y=0.5619798733118421 a=eks,b=eks,i=8702,x=0.2860963732537126,y=0.5616399941521609 a=hat,b=hat,i=8703,x=0.5764546868259887,y=0.5585165186187631 a=wye,b=hat,i=8704,x=0.5825019915262796,y=0.7509760878946939 a=wye,b=hat,i=8705,x=0.2608869277824021,y=0.18054497056171448 a=hat,b=hat,i=8706,x=0.44933047132208914,y=0.2870706030629274 a=eks,b=eks,i=8707,x=0.5126396112669858,y=0.7451349937567859 a=wye,b=hat,i=8708,x=0.9654821455735791,y=0.4030015908373886 a=zee,b=hat,i=8709,x=0.12072257756980032,y=0.6331889132322128 a=eks,b=eks,i=8710,x=0.23179579194118272,y=0.2720693323497807 a=pan,b=hat,i=8711,x=0.2745931092811078,y=0.8275977373766176 a=zee,b=zee,i=8712,x=0.16788282836102386,y=0.8552502071604215 a=hat,b=eks,i=8713,x=0.17690637256217367,y=0.7529327963215693 a=zee,b=zee,i=8714,x=0.871119409753738,y=0.8880243168317828 a=pan,b=zee,i=8715,x=0.06440670061693166,y=0.7697496461773731 a=pan,b=zee,i=8716,x=0.010723117383408809,y=0.3256007021073345 a=pan,b=zee,i=8717,x=0.6961198318349152,y=0.46776215866881776 a=zee,b=pan,i=8718,x=0.5501338319067216,y=0.4585993087188408 a=pan,b=pan,i=8719,x=0.8266651999765658,y=0.7457257758170397 a=wye,b=pan,i=8720,x=0.6983669783370258,y=0.18024570857490163 a=zee,b=hat,i=8721,x=0.18186817750471462,y=0.28188928351608533 a=eks,b=wye,i=8722,x=0.1796424637908317,y=0.08845716187743458 a=wye,b=zee,i=8723,x=0.18784777106560657,y=0.8680814485784762 a=wye,b=pan,i=8724,x=0.7535113517713046,y=0.06635813172501992 a=wye,b=wye,i=8725,x=0.06677961979475944,y=0.8150664034109032 a=pan,b=pan,i=8726,x=0.09110059809025017,y=0.634882036803602 a=eks,b=eks,i=8727,x=0.07770263986306736,y=0.6339732062069904 a=hat,b=zee,i=8728,x=0.1222023744265569,y=0.36047803182555027 a=hat,b=wye,i=8729,x=0.38616984963682455,y=0.6665706605579002 a=eks,b=wye,i=8730,x=0.03564554727285307,y=0.775754590350077 a=wye,b=zee,i=8731,x=0.35713870378290125,y=0.1671267891620788 a=hat,b=zee,i=8732,x=0.5996953011640668,y=0.62340072229723 a=zee,b=hat,i=8733,x=0.2345433105033039,y=0.10071782641377514 a=zee,b=hat,i=8734,x=0.301665687569308,y=0.3630510637781915 a=hat,b=pan,i=8735,x=0.47526687158292913,y=0.22747265846322517 a=pan,b=eks,i=8736,x=0.5793971065628433,y=0.6408359296127717 a=wye,b=zee,i=8737,x=0.6210812266919626,y=0.8036316255685408 a=pan,b=wye,i=8738,x=0.15856470090745411,y=0.07442697669748699 a=hat,b=pan,i=8739,x=0.6747028428344869,y=0.05546525602545038 a=zee,b=zee,i=8740,x=0.7182904394926175,y=0.7258491677192344 a=wye,b=hat,i=8741,x=0.050796016954941514,y=0.2827688297213582 a=pan,b=hat,i=8742,x=0.536032482315453,y=0.7201071015346874 a=pan,b=hat,i=8743,x=0.23212794392337244,y=0.9962892434331647 a=zee,b=hat,i=8744,x=0.15548275830576097,y=0.5597164039669866 a=pan,b=zee,i=8745,x=0.053519007571192656,y=0.5880763072120166 a=wye,b=hat,i=8746,x=0.4039984554038578,y=0.6360272605402368 a=eks,b=zee,i=8747,x=0.12768838944842187,y=0.7694103697647696 a=pan,b=pan,i=8748,x=0.0504766925956035,y=0.1711562295167237 a=eks,b=eks,i=8749,x=0.43854684004790123,y=0.28682577788725483 a=zee,b=zee,i=8750,x=0.37684822924899897,y=0.6896149386123666 a=wye,b=hat,i=8751,x=0.06509359888339494,y=0.177636855552877 a=eks,b=pan,i=8752,x=0.09242339085575646,y=0.32343297889748723 a=wye,b=eks,i=8753,x=0.9973914329853147,y=0.9693279929688737 a=hat,b=eks,i=8754,x=0.370565044079066,y=0.009819699195025788 a=zee,b=pan,i=8755,x=0.8202332245450998,y=0.5597758930454603 a=eks,b=hat,i=8756,x=0.272322951811926,y=0.145224793410337 a=pan,b=eks,i=8757,x=0.10217035846864753,y=0.8463196056537164 a=zee,b=zee,i=8758,x=0.9667659565271899,y=0.5623772828898473 a=zee,b=hat,i=8759,x=0.03620010006756513,y=0.9300101887480641 a=pan,b=hat,i=8760,x=0.7972381410312142,y=0.3059551797120732 a=wye,b=wye,i=8761,x=0.6603209295504429,y=0.5459240190405134 a=zee,b=hat,i=8762,x=0.8972125526805521,y=0.12801932204763655 a=hat,b=eks,i=8763,x=0.08300923681882266,y=0.3326688755194035 a=pan,b=hat,i=8764,x=0.19654713910488297,y=0.9815477858639055 a=pan,b=wye,i=8765,x=0.7403998857752021,y=0.9560094148670492 a=wye,b=zee,i=8766,x=0.9449147393082301,y=0.6732722707943484 a=pan,b=hat,i=8767,x=0.994940403256145,y=0.6992814067153592 a=pan,b=eks,i=8768,x=0.9628487500260046,y=0.2914751295622189 a=zee,b=hat,i=8769,x=0.04870919701921694,y=0.9387243884055145 a=pan,b=eks,i=8770,x=0.6298376152653163,y=0.5214339719227405 a=pan,b=hat,i=8771,x=0.05539194558306315,y=0.6044013107155554 a=wye,b=zee,i=8772,x=0.754483186364135,y=0.9567133222811894 a=eks,b=zee,i=8773,x=0.7529293581975827,y=0.2684999525860745 a=wye,b=eks,i=8774,x=0.3998473670297119,y=0.07393345230936454 a=wye,b=zee,i=8775,x=0.15521659769175922,y=0.2873998987631695 a=wye,b=zee,i=8776,x=0.5452491171201722,y=0.050076673250635584 a=pan,b=eks,i=8777,x=0.5238633710326642,y=0.019941096658736224 a=zee,b=wye,i=8778,x=0.7616404527480684,y=0.8158713089665471 a=hat,b=wye,i=8779,x=0.600461848950472,y=0.5399884947809014 a=eks,b=zee,i=8780,x=0.5925751420631895,y=0.6690795493308443 a=pan,b=zee,i=8781,x=0.9383737724522293,y=0.7748193135876428 a=pan,b=pan,i=8782,x=0.49034005500698785,y=0.80873396896634 a=pan,b=hat,i=8783,x=0.5183921754082103,y=0.11862486021555674 a=pan,b=zee,i=8784,x=0.8772019876864762,y=0.1521542632208297 a=zee,b=hat,i=8785,x=0.6464009753631575,y=0.6923362770119578 a=pan,b=hat,i=8786,x=0.16224717165693037,y=0.7476369567248122 a=eks,b=pan,i=8787,x=0.9541941134181783,y=0.39739249865003967 a=hat,b=zee,i=8788,x=0.2642687755038374,y=0.10859080810253674 a=zee,b=wye,i=8789,x=0.789145574444134,y=0.24974632777903916 a=wye,b=hat,i=8790,x=0.8223311948449997,y=0.5130414892803776 a=eks,b=hat,i=8791,x=0.6818394894701235,y=0.7849388490947223 a=eks,b=zee,i=8792,x=0.2729303223525674,y=0.8719161161689617 a=wye,b=zee,i=8793,x=0.9343780609627443,y=0.05352320375085495 a=pan,b=pan,i=8794,x=0.9586567458589967,y=0.919190837846641 a=zee,b=eks,i=8795,x=0.27124185699244374,y=0.6001949173753478 a=wye,b=wye,i=8796,x=0.534583514132678,y=0.7819265778012215 a=pan,b=hat,i=8797,x=0.4497161697366787,y=0.026741184746243984 a=zee,b=eks,i=8798,x=0.8167620532839222,y=0.8279530206710328 a=wye,b=eks,i=8799,x=0.8471762978662517,y=0.6353417536536258 a=zee,b=hat,i=8800,x=0.4068819800794493,y=0.6647858452666756 a=hat,b=hat,i=8801,x=0.017219020782623162,y=0.1624665172562224 a=zee,b=wye,i=8802,x=0.5608298870065771,y=0.5058672809947269 a=eks,b=pan,i=8803,x=0.4433211231528589,y=0.2838323939048415 a=hat,b=wye,i=8804,x=0.015128205072592937,y=0.9382969714739184 a=wye,b=zee,i=8805,x=0.41033971377507983,y=0.8903811666103645 a=wye,b=pan,i=8806,x=0.08327290658651032,y=0.2550251881973168 a=pan,b=eks,i=8807,x=0.339222785155762,y=0.1751435242352425 a=zee,b=zee,i=8808,x=0.4820472727787015,y=0.017092345316797486 a=eks,b=pan,i=8809,x=0.8772675192449497,y=0.09405065417217506 a=eks,b=zee,i=8810,x=0.4802724150878229,y=0.750654827698973 a=wye,b=eks,i=8811,x=0.27073265506551913,y=0.4615910666569303 a=eks,b=eks,i=8812,x=0.07160623229882901,y=0.12458111194427568 a=pan,b=hat,i=8813,x=0.7877743286534948,y=0.8757926217967861 a=wye,b=pan,i=8814,x=0.8234802661475596,y=0.47740951215608096 a=zee,b=wye,i=8815,x=0.7068610202368742,y=0.7545170669582756 a=eks,b=wye,i=8816,x=0.42511667279750365,y=0.7472491957445023 a=hat,b=pan,i=8817,x=0.8982686805610952,y=0.41213109883329235 a=eks,b=eks,i=8818,x=0.0006917972627396018,y=0.9154889032308835 a=zee,b=hat,i=8819,x=0.8077899694017853,y=0.9694410429631465 a=wye,b=wye,i=8820,x=0.5128274083278233,y=0.1925061634264612 a=wye,b=hat,i=8821,x=0.48953047787044934,y=0.9309635789095997 a=wye,b=wye,i=8822,x=0.5093848419146877,y=0.7499112900526392 a=wye,b=zee,i=8823,x=0.7521935072400413,y=0.8768924705259773 a=zee,b=wye,i=8824,x=0.17855149771491108,y=0.09366701006513045 a=wye,b=wye,i=8825,x=0.9175145724829686,y=0.733177971733118 a=wye,b=pan,i=8826,x=0.7781119220016439,y=0.5568374194244214 a=pan,b=pan,i=8827,x=0.44994539245047094,y=0.010072546778717273 a=zee,b=pan,i=8828,x=0.8974531793622843,y=0.6299514776398363 a=zee,b=hat,i=8829,x=0.03029077173623984,y=0.8996371412607174 a=pan,b=zee,i=8830,x=0.9250374016750887,y=0.21170234142774214 a=hat,b=wye,i=8831,x=0.2886019989070704,y=0.8746854292394444 a=eks,b=zee,i=8832,x=0.8201188808616761,y=0.7163833146418705 a=hat,b=pan,i=8833,x=0.4781516414425546,y=0.6243657645336355 a=eks,b=pan,i=8834,x=0.30019128687682395,y=0.6215357926899209 a=zee,b=pan,i=8835,x=0.28411203290841713,y=0.880506908200805 a=zee,b=hat,i=8836,x=0.12727398470205364,y=0.6861531204026988 a=pan,b=pan,i=8837,x=0.6585419955018336,y=0.10473471849452742 a=pan,b=hat,i=8838,x=0.4461825537060876,y=0.3925097922631463 a=wye,b=pan,i=8839,x=0.4002040179552746,y=0.24694949779242004 a=hat,b=hat,i=8840,x=0.2591704876662355,y=0.8145986246056769 a=wye,b=pan,i=8841,x=0.38972915905002337,y=0.5603702988216951 a=pan,b=eks,i=8842,x=0.9266082306477657,y=0.5285007006129709 a=hat,b=hat,i=8843,x=0.37872486721691034,y=0.07532645476050148 a=hat,b=hat,i=8844,x=0.0685259642260373,y=0.00776256940978215 a=pan,b=wye,i=8845,x=0.24303613366881238,y=0.13056160975299724 a=wye,b=eks,i=8846,x=0.9676348576302707,y=0.5106172718000012 a=wye,b=pan,i=8847,x=0.19766194187411346,y=0.6722053323380418 a=hat,b=eks,i=8848,x=0.18275312440508307,y=0.9764304146821695 a=pan,b=zee,i=8849,x=0.6264364311275306,y=0.9563714459175713 a=hat,b=eks,i=8850,x=0.8735595733663851,y=0.5106033973424751 a=hat,b=wye,i=8851,x=0.8277257237676418,y=0.38220594008932074 a=pan,b=eks,i=8852,x=0.5590462379202299,y=0.07402923834402797 a=wye,b=wye,i=8853,x=0.6030890949494638,y=0.024154261693530632 a=hat,b=wye,i=8854,x=0.9304995637638334,y=0.6319621895624278 a=eks,b=zee,i=8855,x=0.3608005376988722,y=0.9009155444417519 a=pan,b=hat,i=8856,x=0.31871112874254814,y=0.5214655695969946 a=pan,b=eks,i=8857,x=0.31972354861237895,y=0.7327700228563248 a=pan,b=zee,i=8858,x=0.7128306783608381,y=0.811303686462451 a=pan,b=wye,i=8859,x=0.9081121983690633,y=0.5712022128090308 a=eks,b=pan,i=8860,x=0.7438203192490614,y=0.28338323389587416 a=wye,b=hat,i=8861,x=0.39486469148361836,y=0.49780490997274707 a=wye,b=wye,i=8862,x=0.7736663364376681,y=0.5874621525618737 a=zee,b=pan,i=8863,x=0.7598351732843991,y=0.16402301245225137 a=eks,b=eks,i=8864,x=0.8345356283222535,y=0.7112462031216813 a=zee,b=eks,i=8865,x=0.9403263935444554,y=0.07461363367845775 a=zee,b=hat,i=8866,x=0.6732648337974786,y=0.9333019394438807 a=hat,b=zee,i=8867,x=0.4989779025451857,y=0.9076709264537641 a=hat,b=hat,i=8868,x=0.016222381142314224,y=0.02090746494690887 a=wye,b=hat,i=8869,x=0.2676602361580831,y=0.8275937851537348 a=wye,b=zee,i=8870,x=0.5771716563773662,y=0.3486638387791615 a=wye,b=zee,i=8871,x=0.8326977668224673,y=0.042247928422714076 a=eks,b=pan,i=8872,x=0.46276796521083263,y=0.937222119081556 a=zee,b=wye,i=8873,x=0.12465164468565504,y=0.4217551436223611 a=hat,b=wye,i=8874,x=0.8578330113744658,y=0.5967910955072325 a=wye,b=pan,i=8875,x=0.9700008052690227,y=0.5495480079950836 a=pan,b=hat,i=8876,x=0.14594726337052932,y=0.7756413451049061 a=wye,b=eks,i=8877,x=0.21506616709063353,y=0.028566538362973737 a=hat,b=zee,i=8878,x=0.8446285361381319,y=0.08785108055341062 a=zee,b=pan,i=8879,x=0.8504405312776793,y=0.6033489024089217 a=wye,b=wye,i=8880,x=0.47595916238031677,y=0.4288837512249194 a=eks,b=zee,i=8881,x=0.45213579710907703,y=0.08748650555497739 a=zee,b=eks,i=8882,x=0.1414462883645664,y=0.9081746803701161 a=hat,b=eks,i=8883,x=0.7348243939209332,y=0.8605568412288824 a=pan,b=hat,i=8884,x=0.7853971344779014,y=0.004051486898246415 a=zee,b=wye,i=8885,x=0.41758576449425977,y=0.14627581317514182 a=wye,b=hat,i=8886,x=0.9280339369715974,y=0.9297205006311496 a=zee,b=hat,i=8887,x=0.7347475121162593,y=0.03993326351233917 a=zee,b=zee,i=8888,x=0.8278911862966036,y=0.4003238193899692 a=zee,b=zee,i=8889,x=0.06545001204265088,y=0.3004515856834621 a=eks,b=zee,i=8890,x=0.27962535290039825,y=0.44335679461319166 a=hat,b=hat,i=8891,x=0.019843222350497625,y=0.5313009507007954 a=pan,b=eks,i=8892,x=0.3852530201110397,y=0.06941698785655903 a=pan,b=eks,i=8893,x=0.2977417830889273,y=0.6332182300346895 a=zee,b=eks,i=8894,x=0.1966531651167187,y=0.4688240979189081 a=wye,b=hat,i=8895,x=0.22463107582925324,y=0.4161186278077874 a=eks,b=zee,i=8896,x=0.22809184804735871,y=0.4707492036142362 a=hat,b=eks,i=8897,x=0.4271783841263873,y=0.5474566889867322 a=hat,b=zee,i=8898,x=0.45420946781919536,y=0.10354482418357991 a=zee,b=pan,i=8899,x=0.1500424792671291,y=0.3904357922605537 a=eks,b=hat,i=8900,x=0.4705695658454211,y=0.13058529889276693 a=wye,b=eks,i=8901,x=0.7851072833003859,y=0.010949059596507271 a=eks,b=pan,i=8902,x=0.36598892555347484,y=0.8692921887688625 a=zee,b=eks,i=8903,x=0.4231582011204885,y=0.4821489267549405 a=eks,b=wye,i=8904,x=0.27693517497385267,y=0.35861877550118093 a=eks,b=hat,i=8905,x=0.2021072148174844,y=0.5782529159344267 a=pan,b=eks,i=8906,x=0.6095360635614762,y=0.15147456052535202 a=pan,b=eks,i=8907,x=0.730295298034919,y=0.2551125391698271 a=zee,b=zee,i=8908,x=0.3638375152320661,y=0.5373463704499434 a=pan,b=hat,i=8909,x=0.5579467202447957,y=0.1630566373150174 a=hat,b=pan,i=8910,x=0.49610253645583846,y=0.21986829070394298 a=eks,b=wye,i=8911,x=0.09558215825789063,y=0.018958306464913255 a=zee,b=eks,i=8912,x=0.5946765644498425,y=0.4861950247721053 a=zee,b=wye,i=8913,x=0.7753872326222572,y=0.130388837660953 a=zee,b=hat,i=8914,x=0.8820731335941235,y=0.12986802677134568 a=hat,b=zee,i=8915,x=0.4040203950712935,y=0.04965833346589221 a=eks,b=wye,i=8916,x=0.46871698272105,y=0.3462467467139262 a=wye,b=hat,i=8917,x=0.5720192464320304,y=0.0819820791306417 a=wye,b=wye,i=8918,x=0.8054579412182167,y=0.3836759639818865 a=eks,b=hat,i=8919,x=0.4742484069291977,y=0.2514827712591855 a=pan,b=wye,i=8920,x=0.733610226156712,y=0.5651397506818968 a=hat,b=zee,i=8921,x=0.5565613081265703,y=0.9540215346587051 a=pan,b=pan,i=8922,x=0.270663413379612,y=0.4701176631611145 a=pan,b=zee,i=8923,x=0.1853923248765008,y=0.0022929560982657415 a=zee,b=pan,i=8924,x=0.7050433080915809,y=0.4961082324924917 a=eks,b=wye,i=8925,x=0.5609329671328473,y=0.589599688677612 a=pan,b=eks,i=8926,x=0.5899990569564478,y=0.9670305978679095 a=eks,b=zee,i=8927,x=0.6589844496396701,y=0.07234525669075342 a=hat,b=wye,i=8928,x=0.9559160182621979,y=0.2564401800691153 a=zee,b=wye,i=8929,x=0.7910634287616417,y=0.5832583369417834 a=pan,b=eks,i=8930,x=0.9200311370773863,y=0.8086516025019609 a=zee,b=eks,i=8931,x=0.7726442152731748,y=0.3006011490460859 a=pan,b=pan,i=8932,x=0.9200924471782158,y=0.30104452372640955 a=zee,b=zee,i=8933,x=0.4454093296017202,y=0.3284583037994141 a=wye,b=eks,i=8934,x=0.42726184573719983,y=0.9963781447633139 a=zee,b=eks,i=8935,x=0.4486952558039746,y=0.4130427561178419 a=hat,b=eks,i=8936,x=0.9755076232964625,y=0.6362818073430646 a=zee,b=zee,i=8937,x=0.5683636673391735,y=0.329434458320802 a=zee,b=hat,i=8938,x=0.35289211042725366,y=0.7543520598626876 a=hat,b=pan,i=8939,x=0.8511623725969789,y=0.6164456458973154 a=wye,b=wye,i=8940,x=0.9818963757219575,y=0.5755972292005318 a=hat,b=hat,i=8941,x=0.7568298583150284,y=0.5846179373919896 a=eks,b=hat,i=8942,x=0.601894549758784,y=0.13992074533051124 a=eks,b=hat,i=8943,x=0.35887195487544743,y=0.6953516641971523 a=zee,b=hat,i=8944,x=0.8805088303643233,y=0.08493946930957796 a=eks,b=hat,i=8945,x=0.7539371156991909,y=0.4116992595762401 a=wye,b=hat,i=8946,x=0.16141868331242304,y=0.9136362828702729 a=eks,b=hat,i=8947,x=0.8483324196518135,y=0.6158053719777993 a=eks,b=pan,i=8948,x=0.5318875109400665,y=0.8230182723036877 a=zee,b=zee,i=8949,x=0.4716296186751222,y=0.8472833535757873 a=zee,b=wye,i=8950,x=0.2790928413033852,y=0.0772468110330039 a=wye,b=eks,i=8951,x=0.9027943823162313,y=0.6124436018843183 a=pan,b=wye,i=8952,x=0.39603795348082305,y=0.7719031240961284 a=eks,b=hat,i=8953,x=0.8716876316900987,y=0.20148989402965545 a=zee,b=eks,i=8954,x=0.47758220480911473,y=0.2664181870815133 a=hat,b=pan,i=8955,x=0.3375565375177234,y=0.19102233314969186 a=hat,b=wye,i=8956,x=0.44049488264331627,y=0.5092306826033091 a=eks,b=eks,i=8957,x=0.7047805468534891,y=0.5946651385930218 a=pan,b=pan,i=8958,x=0.6519485361202326,y=0.7030912337766829 a=hat,b=eks,i=8959,x=0.6713731052940981,y=0.6013560927295543 a=hat,b=pan,i=8960,x=0.9417167187642326,y=0.8026299128777213 a=zee,b=wye,i=8961,x=0.8154052031095614,y=0.6481399972215665 a=pan,b=wye,i=8962,x=0.0914057435253639,y=0.10822318947000709 a=pan,b=hat,i=8963,x=0.3046680167824908,y=0.09348404024830137 a=zee,b=zee,i=8964,x=0.6189408278256606,y=0.8433159445563726 a=eks,b=hat,i=8965,x=0.958051223919934,y=0.5081338063861043 a=wye,b=eks,i=8966,x=0.8530691152394455,y=0.8692728927718893 a=hat,b=eks,i=8967,x=0.8372819315874948,y=0.8861340588817578 a=wye,b=zee,i=8968,x=0.9977506774202527,y=0.9679468301172027 a=hat,b=pan,i=8969,x=0.45963913428927994,y=0.2847833031004139 a=pan,b=eks,i=8970,x=0.34327965136688565,y=0.2691645574062619 a=eks,b=hat,i=8971,x=0.24298535978329028,y=0.6326328755167427 a=hat,b=zee,i=8972,x=0.5786862872644059,y=0.8671986650119898 a=wye,b=hat,i=8973,x=0.7183329442429014,y=0.3363191065286383 a=wye,b=pan,i=8974,x=0.551888889672068,y=0.3209850549321359 a=pan,b=pan,i=8975,x=0.30697964139250933,y=0.08659671798153756 a=zee,b=eks,i=8976,x=0.9556339095055809,y=0.021482277034970076 a=eks,b=hat,i=8977,x=0.3585667547454152,y=0.7507818063628751 a=eks,b=hat,i=8978,x=0.5232916500187303,y=0.8753848427459924 a=hat,b=wye,i=8979,x=0.002400498001248641,y=0.5428314927562883 a=wye,b=eks,i=8980,x=0.31030792190565804,y=0.851109380675088 a=hat,b=eks,i=8981,x=0.8950141191932938,y=0.3343291380416574 a=wye,b=zee,i=8982,x=0.007647040296205221,y=0.5252318459052353 a=eks,b=hat,i=8983,x=0.6822585854384956,y=0.009453423471399658 a=zee,b=pan,i=8984,x=0.6987813603715117,y=0.5232757984191948 a=hat,b=wye,i=8985,x=0.932024395968463,y=0.9447580630208217 a=zee,b=zee,i=8986,x=0.8552570190589601,y=0.08815519942713801 a=wye,b=pan,i=8987,x=0.27750649660566373,y=0.76526956752658 a=pan,b=hat,i=8988,x=0.5404886782798238,y=0.5374270296539031 a=wye,b=hat,i=8989,x=0.9762152572727496,y=0.8712434910014083 a=wye,b=hat,i=8990,x=0.2691586619417575,y=0.5122780764115732 a=pan,b=eks,i=8991,x=0.5236344484593898,y=0.7020390430173928 a=zee,b=zee,i=8992,x=0.285347240060405,y=0.2493240966526331 a=zee,b=wye,i=8993,x=0.7119318558771737,y=0.8612125817012293 a=pan,b=eks,i=8994,x=0.6358666072344865,y=0.930679583655016 a=eks,b=pan,i=8995,x=0.43393822544853966,y=0.5656571369668376 a=eks,b=zee,i=8996,x=0.014997169280220546,y=0.38924624193859947 a=pan,b=eks,i=8997,x=0.006957705982631457,y=0.27329586967444996 a=zee,b=wye,i=8998,x=0.45799438726799335,y=0.020705027471035087 a=wye,b=wye,i=8999,x=0.18512302956813365,y=0.7121523046316812 a=hat,b=eks,i=9000,x=0.33727508102114134,y=0.13582122939201124 a=eks,b=eks,i=9001,x=0.517121854692058,y=0.308749201053908 a=hat,b=zee,i=9002,x=0.07358032166019501,y=0.736123828569227 a=zee,b=hat,i=9003,x=0.004824023551166401,y=0.759916663671451 a=zee,b=eks,i=9004,x=0.4893113819292234,y=0.23390278210191928 a=hat,b=eks,i=9005,x=0.45618459558425717,y=0.8962930076422373 a=zee,b=hat,i=9006,x=0.6562108769673498,y=0.13991018518940446 a=zee,b=zee,i=9007,x=0.3650427655416524,y=0.8531673941547171 a=zee,b=wye,i=9008,x=0.8282941376563813,y=0.9889370827954176 a=pan,b=pan,i=9009,x=0.3878236858466175,y=0.06714068514516147 a=hat,b=hat,i=9010,x=0.2007850497817364,y=0.6400219844960209 a=wye,b=wye,i=9011,x=0.6252481085403859,y=0.203071024510721 a=wye,b=hat,i=9012,x=0.4675098280645633,y=0.9904823978688722 a=zee,b=pan,i=9013,x=0.6305143660449302,y=0.710245374097503 a=zee,b=wye,i=9014,x=0.16891869382531022,y=0.37574058303798785 a=pan,b=wye,i=9015,x=0.3220094028213596,y=0.4839478151356543 a=eks,b=eks,i=9016,x=0.5800740825749267,y=0.8910261945783475 a=zee,b=hat,i=9017,x=0.9502641304019075,y=0.8396710982351069 a=pan,b=eks,i=9018,x=0.4764608908539697,y=0.4728942258779697 a=hat,b=wye,i=9019,x=0.272865007065651,y=0.41472685232133355 a=eks,b=hat,i=9020,x=0.03877794357017561,y=0.8924528458892764 a=eks,b=wye,i=9021,x=0.7714689461624145,y=0.7234215610234059 a=eks,b=eks,i=9022,x=0.8213647586189171,y=0.8993719170687399 a=zee,b=zee,i=9023,x=0.7890585709155626,y=0.5099043493783608 a=zee,b=wye,i=9024,x=0.3645469383907922,y=0.7980710103585312 a=eks,b=pan,i=9025,x=0.7614330300379404,y=0.039049698191956694 a=hat,b=zee,i=9026,x=0.8364001741754985,y=0.8590079093968295 a=pan,b=hat,i=9027,x=0.142586581614627,y=0.8402014883489196 a=zee,b=wye,i=9028,x=0.5239151547368636,y=0.8242755070656802 a=hat,b=eks,i=9029,x=0.8128575668904885,y=0.395268947973739 a=zee,b=pan,i=9030,x=0.5793285227205369,y=0.8038160807198467 a=zee,b=wye,i=9031,x=0.42904790956591343,y=0.292783754196035 a=zee,b=eks,i=9032,x=0.6146666934752367,y=0.26568169357263305 a=eks,b=eks,i=9033,x=0.6937567726575595,y=0.9601490785081487 a=zee,b=wye,i=9034,x=0.7679588189607225,y=0.5157794038228849 a=zee,b=eks,i=9035,x=0.8214778175820499,y=0.760903040561442 a=hat,b=wye,i=9036,x=0.13026398297350839,y=0.8705769782903738 a=pan,b=wye,i=9037,x=0.5665532246879906,y=0.7400695598140006 a=wye,b=pan,i=9038,x=0.565327438099348,y=0.231520424905162 a=hat,b=zee,i=9039,x=0.5300522543665926,y=0.23348061445665524 a=wye,b=zee,i=9040,x=0.6003398441074326,y=0.39489635735776574 a=wye,b=hat,i=9041,x=0.983147388463674,y=0.6432444380950916 a=wye,b=zee,i=9042,x=0.555504813496403,y=0.005666564490671155 a=eks,b=pan,i=9043,x=0.5141737191526409,y=0.23406402155139128 a=pan,b=eks,i=9044,x=0.4915948295461785,y=0.5674330258517061 a=pan,b=eks,i=9045,x=0.4125775873836637,y=0.9745899732717427 a=zee,b=wye,i=9046,x=0.27009823817926015,y=0.5931288546151294 a=hat,b=hat,i=9047,x=0.49305007094314124,y=0.3988521392673088 a=zee,b=wye,i=9048,x=0.852593383706857,y=0.13271142657885082 a=pan,b=wye,i=9049,x=0.10903067000808575,y=0.6457675593887455 a=pan,b=eks,i=9050,x=0.9286228908161963,y=0.7128664838636729 a=eks,b=zee,i=9051,x=0.7368149289050578,y=0.040114995641035156 a=pan,b=eks,i=9052,x=0.9883016421626661,y=0.836414097002929 a=eks,b=eks,i=9053,x=0.578258852447845,y=0.6483953013399163 a=pan,b=eks,i=9054,x=0.4581912096837616,y=0.2396747725609628 a=pan,b=zee,i=9055,x=0.3910891811342043,y=0.3060677650909158 a=zee,b=eks,i=9056,x=0.1257667798355191,y=0.22523050330447225 a=wye,b=wye,i=9057,x=0.8018497438432275,y=0.13069916829224115 a=eks,b=zee,i=9058,x=0.46306509283004527,y=0.6479906691686209 a=hat,b=zee,i=9059,x=0.8032276523393308,y=0.5895573796523289 a=zee,b=wye,i=9060,x=0.9489845382435659,y=0.7186985210470157 a=wye,b=eks,i=9061,x=0.5843515776382836,y=0.09689548652828073 a=eks,b=zee,i=9062,x=0.29235718302362745,y=0.8058919599706711 a=zee,b=eks,i=9063,x=0.3746671187448585,y=0.7104834374120668 a=pan,b=pan,i=9064,x=0.957433552072592,y=0.612273185217601 a=pan,b=pan,i=9065,x=0.9206660995409818,y=0.6388548120920611 a=hat,b=eks,i=9066,x=0.7938077850540011,y=0.9840395711931128 a=eks,b=eks,i=9067,x=0.7586156840742447,y=0.9657635310428576 a=zee,b=wye,i=9068,x=0.03525325620506059,y=0.20286396861407563 a=wye,b=wye,i=9069,x=0.9854601376745921,y=0.28297920890020123 a=eks,b=zee,i=9070,x=0.7790422604287773,y=0.28267242056842967 a=wye,b=pan,i=9071,x=0.9604400242139107,y=0.09079642708772462 a=wye,b=pan,i=9072,x=0.5208132164872745,y=0.013972758368806626 a=eks,b=eks,i=9073,x=0.2792153884168088,y=0.7248580986479927 a=pan,b=wye,i=9074,x=0.9826230778886313,y=0.30895404125911885 a=zee,b=pan,i=9075,x=0.3488738872635716,y=0.8235123319669855 a=eks,b=pan,i=9076,x=0.9828706810264064,y=0.7255065121370968 a=wye,b=pan,i=9077,x=0.285398788706721,y=0.4224009700612671 a=hat,b=hat,i=9078,x=0.049288778502150965,y=0.996399226324633 a=eks,b=wye,i=9079,x=0.2615316643364618,y=0.22800118037634576 a=zee,b=zee,i=9080,x=0.4293043221770476,y=0.17146941589040998 a=pan,b=zee,i=9081,x=0.00020390740306253097,y=0.858089025239552 a=zee,b=wye,i=9082,x=0.2857614979340398,y=0.6179068250859443 a=eks,b=zee,i=9083,x=0.23246167408482288,y=0.22121933132231686 a=zee,b=hat,i=9084,x=0.3023274634670656,y=0.3919343366566008 a=wye,b=zee,i=9085,x=0.48017021719327857,y=0.0007369823565522848 a=eks,b=pan,i=9086,x=0.43284428230137006,y=0.6679282652138314 a=wye,b=eks,i=9087,x=0.5126283529841884,y=0.414628158508178 a=pan,b=hat,i=9088,x=0.10076670744312233,y=0.924513056086707 a=eks,b=hat,i=9089,x=0.17655473424651258,y=0.027572342702157582 a=zee,b=hat,i=9090,x=0.32515391353663414,y=0.24968345250419 a=hat,b=hat,i=9091,x=0.40076821857198996,y=0.6602879383328565 a=zee,b=zee,i=9092,x=0.26080219359430634,y=0.6103007265821453 a=pan,b=hat,i=9093,x=0.2925006896788842,y=0.6480842668339396 a=pan,b=pan,i=9094,x=0.9716001304365217,y=0.6469197673672618 a=eks,b=eks,i=9095,x=0.5806604417079977,y=0.3031395509663418 a=eks,b=eks,i=9096,x=0.3734935600143474,y=0.5772166478411038 a=zee,b=zee,i=9097,x=0.9600502263246077,y=0.39644027119291114 a=wye,b=hat,i=9098,x=0.2804902678845115,y=0.048162079204052355 a=eks,b=zee,i=9099,x=0.43507793732310474,y=0.3953634078162601 a=pan,b=eks,i=9100,x=0.4123076209388652,y=0.8034708206600174 a=zee,b=eks,i=9101,x=0.39275338043203933,y=0.6958341586624519 a=pan,b=hat,i=9102,x=0.28992810063257124,y=0.0936263604214349 a=hat,b=hat,i=9103,x=0.05803247800352507,y=0.5686807585943757 a=pan,b=wye,i=9104,x=0.27797911143024934,y=0.942706265472493 a=hat,b=hat,i=9105,x=0.4895163425613803,y=0.033340055000638746 a=pan,b=zee,i=9106,x=0.44873266752482066,y=0.15530029661112588 a=pan,b=wye,i=9107,x=0.34313847787795904,y=0.2784766094254877 a=hat,b=wye,i=9108,x=0.614870837142051,y=0.3488517641548976 a=eks,b=hat,i=9109,x=0.9754089146191263,y=0.5077651396700906 a=hat,b=zee,i=9110,x=0.6804708680166679,y=0.5357141089061417 a=zee,b=zee,i=9111,x=0.0703606204232261,y=0.6245056563608682 a=pan,b=wye,i=9112,x=0.3153235029768974,y=0.5484733757485007 a=eks,b=wye,i=9113,x=0.49754317676073356,y=0.5477171066757857 a=eks,b=wye,i=9114,x=0.9835650326182704,y=0.8742646308873757 a=wye,b=zee,i=9115,x=0.10698858622424778,y=0.1221930347907727 a=eks,b=pan,i=9116,x=0.8096317851752184,y=0.4495015727565027 a=pan,b=eks,i=9117,x=0.03509835946106599,y=0.4760601952379325 a=zee,b=hat,i=9118,x=0.6070026967820008,y=0.27123198811450044 a=eks,b=hat,i=9119,x=0.4790316458227425,y=0.39259275204959654 a=zee,b=eks,i=9120,x=0.8458192848056897,y=0.9572808268819287 a=pan,b=pan,i=9121,x=0.9385839358069921,y=0.6047637384188489 a=eks,b=pan,i=9122,x=0.45413891231860504,y=0.7591849964061139 a=pan,b=zee,i=9123,x=0.026931116208210204,y=0.552290792057422 a=wye,b=pan,i=9124,x=0.271590915264334,y=0.042888205379760125 a=pan,b=wye,i=9125,x=0.004588040579576735,y=0.6300579166147449 a=wye,b=wye,i=9126,x=0.5171856925914533,y=0.24961569992529742 a=wye,b=pan,i=9127,x=0.8948475255545615,y=0.6574529698134108 a=wye,b=hat,i=9128,x=0.3669933618796106,y=0.37512574289121725 a=pan,b=hat,i=9129,x=0.6586229255026295,y=0.1784724547766009 a=hat,b=zee,i=9130,x=0.27552193496369337,y=0.6578126148590314 a=zee,b=pan,i=9131,x=0.6444063407232797,y=0.4063279946367009 a=pan,b=wye,i=9132,x=0.6455902674388132,y=0.5382099179246037 a=hat,b=pan,i=9133,x=0.9317711632235914,y=0.3230694970784014 a=eks,b=hat,i=9134,x=0.16612397042168814,y=0.3555728981905678 a=wye,b=zee,i=9135,x=0.7750442450200157,y=0.06656439748434029 a=zee,b=pan,i=9136,x=0.5002884150544058,y=0.21659717683648372 a=zee,b=hat,i=9137,x=0.0053168417053239825,y=0.23970890502186593 a=hat,b=zee,i=9138,x=0.05408301987702224,y=0.8596429828563238 a=zee,b=zee,i=9139,x=0.24544320815673137,y=0.677429657112386 a=zee,b=pan,i=9140,x=0.5013642860004229,y=0.6650678922317501 a=eks,b=hat,i=9141,x=0.39054802020070156,y=0.06891218601149551 a=wye,b=hat,i=9142,x=0.29433621999949233,y=0.7751648810637005 a=wye,b=hat,i=9143,x=0.4460302810053538,y=0.040278587711885305 a=hat,b=eks,i=9144,x=0.30372533545667213,y=0.4297094831523881 a=zee,b=eks,i=9145,x=0.00769664097559164,y=0.1446289205179656 a=pan,b=wye,i=9146,x=0.9108896246536903,y=0.20685277919402034 a=wye,b=pan,i=9147,x=0.8702610842064613,y=0.13016678459764375 a=pan,b=wye,i=9148,x=0.7394828765293925,y=0.9475622732914554 a=zee,b=pan,i=9149,x=0.22357262525185106,y=0.20550777850363977 a=zee,b=pan,i=9150,x=0.7364509479059471,y=0.5273598026796336 a=zee,b=eks,i=9151,x=0.3216536526700301,y=0.23861396443066107 a=hat,b=wye,i=9152,x=0.629862943457729,y=0.2161824319117963 a=zee,b=wye,i=9153,x=0.7713603997995606,y=0.8927934282961629 a=eks,b=eks,i=9154,x=0.8033015390132335,y=0.7428789028852476 a=hat,b=pan,i=9155,x=0.4469843980869507,y=0.18928924828611082 a=wye,b=wye,i=9156,x=0.500390135135027,y=0.8848611838558533 a=zee,b=hat,i=9157,x=0.6459716786543495,y=0.8783255778315494 a=zee,b=pan,i=9158,x=0.829825296282736,y=0.9403424810846446 a=hat,b=wye,i=9159,x=0.6553956343389391,y=0.1525879472674848 a=zee,b=eks,i=9160,x=0.6080812576081395,y=0.3155419271117481 a=wye,b=zee,i=9161,x=0.9794920335555851,y=0.5208178578405636 a=hat,b=pan,i=9162,x=0.36011363532418106,y=0.3418468995076799 a=pan,b=wye,i=9163,x=0.37797791224139665,y=0.39353695559343227 a=hat,b=zee,i=9164,x=0.8838448430378912,y=0.7958865093747128 a=zee,b=zee,i=9165,x=0.7783131261247423,y=0.7403476431916528 a=eks,b=eks,i=9166,x=0.22004086657109556,y=0.19736319549096537 a=hat,b=wye,i=9167,x=0.6758868789217809,y=0.24720804895114945 a=wye,b=pan,i=9168,x=0.5370077637228887,y=0.6389653169963743 a=pan,b=zee,i=9169,x=0.030815090059835182,y=0.017547992939040524 a=wye,b=wye,i=9170,x=0.8353343256800804,y=0.3768654473939027 a=hat,b=zee,i=9171,x=0.46003847353195026,y=0.4354345395691309 a=hat,b=pan,i=9172,x=0.032538252982685534,y=0.988500077283618 a=eks,b=wye,i=9173,x=0.034581992091101466,y=0.7801643183419578 a=eks,b=zee,i=9174,x=0.6550305066967593,y=0.16344251291756706 a=zee,b=wye,i=9175,x=0.19674254649951783,y=0.18304515051083692 a=eks,b=pan,i=9176,x=0.21328957209812893,y=0.13489440510159378 a=pan,b=eks,i=9177,x=0.005689888388995534,y=0.19304812808970884 a=zee,b=pan,i=9178,x=0.9154191363169403,y=0.032732957728748735 a=zee,b=zee,i=9179,x=0.9807519030460864,y=0.4665860553591783 a=pan,b=pan,i=9180,x=0.6528911310033898,y=0.7987231494976602 a=pan,b=hat,i=9181,x=0.6407905148282739,y=0.7653184860370159 a=wye,b=pan,i=9182,x=0.9562838531255896,y=0.27319300978963235 a=zee,b=eks,i=9183,x=0.8789109160607933,y=0.6764597514962247 a=hat,b=wye,i=9184,x=0.0454922541303826,y=0.7789503923765669 a=zee,b=hat,i=9185,x=0.9488182203633042,y=0.20055459864504688 a=pan,b=zee,i=9186,x=0.8094929584839381,y=0.017753827357001706 a=zee,b=eks,i=9187,x=0.9492829297817624,y=0.9675987602030636 a=hat,b=wye,i=9188,x=0.5484371698132414,y=0.48898521397678274 a=zee,b=hat,i=9189,x=0.698589129880174,y=0.4354385113427839 a=pan,b=wye,i=9190,x=0.8371899774027962,y=0.7968937186611519 a=wye,b=zee,i=9191,x=0.021517369039138368,y=0.1381446138482929 a=eks,b=zee,i=9192,x=0.2695667438992312,y=0.28074171138048576 a=wye,b=pan,i=9193,x=0.894511626988757,y=0.938591468790241 a=wye,b=pan,i=9194,x=0.12628217214956572,y=0.6168175982380071 a=pan,b=zee,i=9195,x=0.5535590246543304,y=0.2526444377074163 a=hat,b=hat,i=9196,x=0.3980083533361548,y=0.12546876469790447 a=wye,b=hat,i=9197,x=0.3508027024722644,y=0.8470842806054778 a=pan,b=pan,i=9198,x=0.6918350451415268,y=0.7037194771160388 a=pan,b=wye,i=9199,x=0.09935798556479436,y=0.8306198911393249 a=eks,b=wye,i=9200,x=0.5817459757102148,y=0.7926589099732673 a=wye,b=pan,i=9201,x=0.6973989669681704,y=0.029025785391803005 a=hat,b=wye,i=9202,x=0.541438501860869,y=0.43313624277905893 a=zee,b=eks,i=9203,x=0.03325991383215876,y=0.7053312999685288 a=hat,b=pan,i=9204,x=0.972877655785142,y=0.2339442404736457 a=wye,b=pan,i=9205,x=0.650403525932319,y=0.3896918481459313 a=eks,b=zee,i=9206,x=0.38877534437698114,y=0.570145295749778 a=eks,b=wye,i=9207,x=0.4768627348776039,y=0.8140053040358975 a=wye,b=eks,i=9208,x=0.7602904558546134,y=0.40132374234963053 a=hat,b=eks,i=9209,x=0.9001439023825403,y=0.03672742376278848 a=pan,b=eks,i=9210,x=0.9435871837198925,y=0.17154456862061596 a=pan,b=hat,i=9211,x=0.6420793762242888,y=0.686212047389247 a=wye,b=zee,i=9212,x=0.5791530677301323,y=0.4958922872459267 a=zee,b=pan,i=9213,x=0.5172383902917987,y=0.415686177469048 a=zee,b=zee,i=9214,x=0.5228330684403698,y=0.9018872431686975 a=eks,b=wye,i=9215,x=0.04381430874634051,y=0.6032242723440449 a=wye,b=pan,i=9216,x=0.945612107018632,y=0.5963971999452331 a=pan,b=hat,i=9217,x=0.5519808331424808,y=0.037818522708640945 a=wye,b=pan,i=9218,x=0.45248627667931407,y=0.9107065056547308 a=wye,b=pan,i=9219,x=0.9023383971006868,y=0.007488783487717088 a=hat,b=wye,i=9220,x=0.7052123508658505,y=0.38765508481678934 a=eks,b=zee,i=9221,x=0.41382740826608244,y=0.477677197129144 a=hat,b=eks,i=9222,x=0.6481864881498441,y=0.5386696824239133 a=wye,b=hat,i=9223,x=0.677511714967485,y=0.2245548025295082 a=zee,b=eks,i=9224,x=0.23401414583819413,y=0.9738879243097983 a=wye,b=pan,i=9225,x=0.8767378564000506,y=0.4275905594606648 a=pan,b=zee,i=9226,x=0.4240169603576853,y=0.8296431435579869 a=hat,b=pan,i=9227,x=0.946179027020023,y=0.5244012924468459 a=pan,b=zee,i=9228,x=0.05618069066896114,y=0.7424835122028975 a=zee,b=wye,i=9229,x=0.40650226274306367,y=0.9887079480722842 a=pan,b=eks,i=9230,x=0.3504445487923017,y=0.0696878797080479 a=wye,b=zee,i=9231,x=0.9610972939563219,y=0.9615810406623142 a=eks,b=wye,i=9232,x=0.9834939198983763,y=0.902120163211437 a=pan,b=eks,i=9233,x=0.8804184286373076,y=0.4945856574840146 a=wye,b=wye,i=9234,x=0.07920533790072082,y=0.4210755544521094 a=eks,b=hat,i=9235,x=0.48788423763049804,y=0.4836801731961293 a=wye,b=eks,i=9236,x=0.9192818812102141,y=0.1515679068232202 a=hat,b=hat,i=9237,x=0.7302582849873859,y=0.6347279985888814 a=zee,b=eks,i=9238,x=0.7403878392403773,y=0.34071315515449585 a=pan,b=pan,i=9239,x=0.8213696571357758,y=0.17138348492013578 a=wye,b=hat,i=9240,x=0.8014369373980875,y=0.814100095516592 a=pan,b=pan,i=9241,x=0.3913547136873715,y=0.54960018873529 a=pan,b=zee,i=9242,x=0.9438072144493844,y=0.06767533471560916 a=wye,b=zee,i=9243,x=0.5569913771099433,y=0.18691552708330927 a=pan,b=wye,i=9244,x=0.2905201186571721,y=0.43425495374391 a=pan,b=zee,i=9245,x=0.29006760780733076,y=0.9489792158642996 a=wye,b=zee,i=9246,x=0.21902763341829212,y=0.7943599432988762 a=wye,b=pan,i=9247,x=0.8348408249460723,y=0.45052677140725683 a=zee,b=eks,i=9248,x=0.26940493140011434,y=0.9610522390775448 a=eks,b=hat,i=9249,x=0.39091312069697004,y=0.3308378438144999 a=hat,b=wye,i=9250,x=0.2762755403834666,y=0.9174844589095804 a=zee,b=wye,i=9251,x=0.4183886566774483,y=0.9616112086487094 a=hat,b=pan,i=9252,x=0.03920827797790982,y=0.7576567680032309 a=zee,b=pan,i=9253,x=0.9673157002999003,y=0.7433452506349982 a=wye,b=eks,i=9254,x=0.924508714560465,y=0.19996024545680346 a=eks,b=pan,i=9255,x=0.4613513625777358,y=0.13932504620685293 a=wye,b=hat,i=9256,x=0.961942362261845,y=0.9395596121676374 a=zee,b=eks,i=9257,x=0.8279072561096625,y=0.8490761119202441 a=wye,b=hat,i=9258,x=0.22113630994807887,y=0.04508156412906639 a=wye,b=hat,i=9259,x=0.5343061739795472,y=0.3925155297434233 a=hat,b=eks,i=9260,x=0.6027628673680535,y=0.29907777128173474 a=eks,b=pan,i=9261,x=0.269529051685529,y=0.4796863618360836 a=wye,b=wye,i=9262,x=0.09116905745671411,y=0.6431265280186941 a=pan,b=wye,i=9263,x=0.18094504922785837,y=0.6552196736780825 a=hat,b=zee,i=9264,x=0.023456730670551096,y=0.1975931324733875 a=zee,b=pan,i=9265,x=0.007623684349103987,y=0.07551340520872629 a=eks,b=eks,i=9266,x=0.17817560372002472,y=0.49956704475839064 a=pan,b=pan,i=9267,x=0.04690229807589086,y=0.1929566014362788 a=zee,b=eks,i=9268,x=0.3470560427863578,y=0.3275172947002548 a=zee,b=hat,i=9269,x=0.5409419616161683,y=0.3958039424067026 a=pan,b=pan,i=9270,x=0.1487528959524752,y=0.4469367832007153 a=pan,b=wye,i=9271,x=0.24595184073704124,y=0.48817169012236983 a=hat,b=eks,i=9272,x=0.8194471147409262,y=0.06810057179235018 a=hat,b=zee,i=9273,x=0.4611616764401677,y=0.8051508540162687 a=pan,b=hat,i=9274,x=0.5857275960463182,y=0.1154346418508585 a=eks,b=wye,i=9275,x=0.09259540108550524,y=0.21275003504178946 a=zee,b=pan,i=9276,x=0.684545528802376,y=0.5890511399726057 a=eks,b=zee,i=9277,x=0.8931272247478754,y=0.9108980465393053 a=wye,b=hat,i=9278,x=0.4908268342979165,y=0.1022036634900918 a=hat,b=hat,i=9279,x=0.2967586295179133,y=0.28353991288502345 a=eks,b=wye,i=9280,x=0.7214470432782933,y=0.3196837745294565 a=zee,b=eks,i=9281,x=0.5357035342523082,y=0.4498861677161915 a=hat,b=pan,i=9282,x=0.7019948002783253,y=0.631688166262754 a=wye,b=eks,i=9283,x=0.3146560370204342,y=0.9598216687345593 a=wye,b=wye,i=9284,x=0.6806389501871987,y=0.6623844311258401 a=hat,b=hat,i=9285,x=0.4737832453554822,y=0.41355006089770063 a=eks,b=wye,i=9286,x=0.9872826301151825,y=0.2639815365115553 a=eks,b=zee,i=9287,x=0.8397334293185692,y=0.5061677209701542 a=zee,b=hat,i=9288,x=0.21107288266906798,y=0.6423943950594364 a=wye,b=hat,i=9289,x=0.9539770475173472,y=0.33368774127122824 a=pan,b=zee,i=9290,x=0.3192448675700893,y=0.44823866938306645 a=zee,b=wye,i=9291,x=0.9454063570448517,y=0.8966671326133628 a=pan,b=wye,i=9292,x=0.23598454792188905,y=0.19161925423381865 a=eks,b=wye,i=9293,x=0.7765814539440627,y=0.3128212435040012 a=eks,b=pan,i=9294,x=0.6560425166942336,y=0.6540980604466382 a=zee,b=hat,i=9295,x=0.6842327967828038,y=0.22627755842144792 a=wye,b=wye,i=9296,x=0.4655851206978665,y=0.572270128810435 a=hat,b=pan,i=9297,x=0.04780798739920045,y=0.884344079010386 a=wye,b=zee,i=9298,x=0.6400110650985101,y=0.5918078681573676 a=hat,b=pan,i=9299,x=0.7099587184174139,y=0.026383946823356652 a=hat,b=pan,i=9300,x=0.8979895176793228,y=0.32530725941578 a=pan,b=pan,i=9301,x=0.9138183195198948,y=0.7104753541099725 a=hat,b=eks,i=9302,x=0.8146457149078221,y=0.49936330932918804 a=pan,b=hat,i=9303,x=0.19068920109866783,y=0.5863544157356678 a=hat,b=wye,i=9304,x=0.7296704964431727,y=0.7521653716034574 a=eks,b=zee,i=9305,x=0.06306304065329327,y=0.0425317362399702 a=hat,b=zee,i=9306,x=0.5892447648917019,y=0.26424215126062567 a=zee,b=hat,i=9307,x=0.40286235516928426,y=0.8843324963600357 a=pan,b=hat,i=9308,x=0.6041097470881792,y=0.6019432291571227 a=hat,b=hat,i=9309,x=0.5418892395718498,y=0.3894965192603561 a=zee,b=zee,i=9310,x=0.0489167780793065,y=0.1349420473135753 a=zee,b=hat,i=9311,x=0.9072476732379934,y=0.9064380734997842 a=zee,b=hat,i=9312,x=0.47773815390175445,y=0.7350455011720012 a=wye,b=wye,i=9313,x=0.8777070865064334,y=0.688500944696727 a=zee,b=eks,i=9314,x=0.23207083417195573,y=0.1459854668671191 a=eks,b=hat,i=9315,x=0.5953234480197771,y=0.17617996349844 a=hat,b=pan,i=9316,x=0.4588300778601382,y=0.6017358841802433 a=eks,b=pan,i=9317,x=0.7067142230113493,y=0.8603219297899701 a=eks,b=wye,i=9318,x=0.8917960222408765,y=0.13297569276200116 a=zee,b=pan,i=9319,x=0.32868846620305514,y=0.23221497395763813 a=eks,b=zee,i=9320,x=0.2336595066443039,y=0.5433625711598566 a=wye,b=wye,i=9321,x=0.08724329840345546,y=0.526071263228722 a=hat,b=eks,i=9322,x=0.4540531923441389,y=0.08529592575810008 a=pan,b=eks,i=9323,x=0.015142033208188965,y=0.9025875096361236 a=eks,b=pan,i=9324,x=0.2776566751941013,y=0.5186679560214653 a=zee,b=pan,i=9325,x=0.21535440536922212,y=0.5985912955734372 a=eks,b=zee,i=9326,x=0.9314022909750975,y=0.48900523853727407 a=pan,b=wye,i=9327,x=0.6213414890218699,y=0.3534669210352892 a=wye,b=wye,i=9328,x=0.5529670045133065,y=0.3657722177869842 a=pan,b=pan,i=9329,x=0.709436743485784,y=0.864805283294307 a=wye,b=hat,i=9330,x=0.7856558845965795,y=0.1735275218393233 a=wye,b=pan,i=9331,x=0.15157491016759606,y=0.1781007458002013 a=hat,b=pan,i=9332,x=0.469941809547738,y=0.17916634366371342 a=zee,b=hat,i=9333,x=0.09066429132809939,y=0.11291661870669667 a=eks,b=hat,i=9334,x=0.524982507717917,y=0.7739607975739912 a=zee,b=zee,i=9335,x=0.012865744128303103,y=0.4199812901617862 a=hat,b=wye,i=9336,x=0.3598356400708439,y=0.6497623418471714 a=eks,b=wye,i=9337,x=0.967092843190403,y=0.7129610451088223 a=zee,b=pan,i=9338,x=0.8766283655189672,y=0.8633718650644421 a=eks,b=wye,i=9339,x=0.3555024023169856,y=0.8712144867378462 a=pan,b=pan,i=9340,x=0.24667037823231752,y=0.930054068315833 a=pan,b=eks,i=9341,x=0.9847985606188508,y=0.002920168705884074 a=wye,b=zee,i=9342,x=0.6598872721679194,y=0.5841487864376177 a=pan,b=hat,i=9343,x=0.11586150580933774,y=0.8232025034483835 a=pan,b=eks,i=9344,x=0.23032551308519345,y=0.4668513513037823 a=zee,b=zee,i=9345,x=0.20721325482748,y=0.034658616763860395 a=pan,b=zee,i=9346,x=0.16804254918956518,y=0.41515674460320806 a=wye,b=hat,i=9347,x=0.9555426542676889,y=0.3336472181106118 a=zee,b=eks,i=9348,x=0.027241967830535785,y=0.6546273692203828 a=zee,b=hat,i=9349,x=0.39077150740400146,y=0.35499431123174563 a=pan,b=wye,i=9350,x=0.897415684005392,y=0.0054949420910770375 a=pan,b=zee,i=9351,x=0.6475971487532642,y=0.2993123271198067 a=zee,b=wye,i=9352,x=0.25522951350527867,y=0.48668317596678823 a=hat,b=wye,i=9353,x=0.6279030165419767,y=0.14783115221664478 a=pan,b=eks,i=9354,x=0.0010353989176113965,y=0.7228482030180055 a=hat,b=eks,i=9355,x=0.7415812921258672,y=0.5371997970549264 a=eks,b=zee,i=9356,x=0.3273618744303315,y=0.7034589444097167 a=eks,b=eks,i=9357,x=0.7638755117313554,y=0.37304708043971646 a=pan,b=zee,i=9358,x=0.7274485972079328,y=0.027395796712653575 a=eks,b=pan,i=9359,x=0.726201179013375,y=0.8974974727334436 a=wye,b=hat,i=9360,x=0.009237964269686039,y=0.6456624352507632 a=wye,b=eks,i=9361,x=0.9893854310908603,y=0.6762929165737711 a=pan,b=hat,i=9362,x=0.021355365998413367,y=0.8849112911074679 a=hat,b=pan,i=9363,x=0.24144536935297445,y=0.2588538401367807 a=pan,b=eks,i=9364,x=0.20906377399579568,y=0.26492309174424467 a=hat,b=zee,i=9365,x=0.2716712677588158,y=0.7480148549966943 a=zee,b=eks,i=9366,x=0.564783511562303,y=0.8736158892678358 a=zee,b=zee,i=9367,x=0.5210119669704992,y=0.6601277179108643 a=zee,b=hat,i=9368,x=0.09391533461405244,y=0.8033292481660601 a=eks,b=pan,i=9369,x=0.47109046860253434,y=0.7533692481022667 a=eks,b=wye,i=9370,x=0.45402522126988876,y=0.3506046491270858 a=hat,b=wye,i=9371,x=0.3288376239355628,y=0.9711363417175689 a=hat,b=zee,i=9372,x=0.04803081055457803,y=0.9237983355638324 a=hat,b=eks,i=9373,x=0.13505404407952326,y=0.9843128058775863 a=hat,b=zee,i=9374,x=0.1687355361920142,y=0.5136082981945438 a=zee,b=wye,i=9375,x=0.5866436779364502,y=0.49139965761407123 a=hat,b=eks,i=9376,x=0.7413691108319418,y=0.6875522126693252 a=wye,b=eks,i=9377,x=0.8850578085185158,y=0.12984077539965466 a=zee,b=pan,i=9378,x=0.07698056466866121,y=0.3418330456253533 a=hat,b=hat,i=9379,x=0.6567829350592936,y=0.42166759832139167 a=eks,b=pan,i=9380,x=0.2066941665945501,y=0.34630072002937273 a=hat,b=hat,i=9381,x=0.3011098756670775,y=0.8241475200392532 a=hat,b=eks,i=9382,x=0.1595168703472838,y=0.9632363240817852 a=eks,b=eks,i=9383,x=0.316374240183787,y=0.894701260202343 a=eks,b=eks,i=9384,x=0.6925067244014451,y=0.5943855874672127 a=pan,b=hat,i=9385,x=0.8929259869658823,y=0.13255544013678944 a=eks,b=hat,i=9386,x=0.9458375043305679,y=0.0711986701172268 a=pan,b=eks,i=9387,x=0.42414161600219213,y=0.8727447652075521 a=pan,b=zee,i=9388,x=0.16102926470006396,y=0.7076666589050068 a=eks,b=wye,i=9389,x=0.38573189008702746,y=0.7862235218204946 a=pan,b=eks,i=9390,x=0.009185746132245987,y=0.9615590214943641 a=hat,b=eks,i=9391,x=0.6541239333254625,y=0.4465038993768474 a=zee,b=pan,i=9392,x=0.7293619733667298,y=0.9075863768811903 a=eks,b=zee,i=9393,x=0.5270647942493862,y=0.3208644368195749 a=wye,b=wye,i=9394,x=0.10611623011471227,y=0.3957794249815757 a=wye,b=pan,i=9395,x=0.04167582918996382,y=0.9345423545353554 a=zee,b=pan,i=9396,x=0.6285537391072125,y=0.9531200799497426 a=eks,b=wye,i=9397,x=0.22691889482992367,y=0.821434358932521 a=pan,b=wye,i=9398,x=0.8650573724586973,y=0.5778302746561125 a=wye,b=zee,i=9399,x=0.4320795547957027,y=0.23858094801157526 a=hat,b=wye,i=9400,x=0.2940385536354171,y=0.23832353705367249 a=zee,b=eks,i=9401,x=0.42923024441857793,y=0.17544011645116253 a=hat,b=pan,i=9402,x=0.050855729288162066,y=0.7490381251654518 a=zee,b=eks,i=9403,x=0.2945793937707598,y=0.7184571034764143 a=eks,b=pan,i=9404,x=0.18971476661419018,y=0.8587967149525896 a=hat,b=hat,i=9405,x=0.8781331270774858,y=0.22282398620968602 a=zee,b=pan,i=9406,x=0.6365186667658354,y=0.8944728240200203 a=eks,b=zee,i=9407,x=0.6393982916726031,y=0.42468859570082085 a=pan,b=wye,i=9408,x=0.12426748935771803,y=0.0845763991164874 a=hat,b=hat,i=9409,x=0.8968671619037487,y=0.17554843424501398 a=hat,b=wye,i=9410,x=0.008668685325378456,y=0.5585204180254394 a=hat,b=pan,i=9411,x=0.9186069486489989,y=0.8447036557059203 a=zee,b=wye,i=9412,x=0.20193830450565098,y=0.5853957332725758 a=pan,b=wye,i=9413,x=0.9095023537816819,y=0.03850690961125591 a=hat,b=eks,i=9414,x=0.2255272659717531,y=0.35264234784519843 a=zee,b=hat,i=9415,x=0.008811072137013154,y=0.035134463676480765 a=eks,b=zee,i=9416,x=0.25375738274931314,y=0.2401418182493137 a=hat,b=hat,i=9417,x=0.9120549045686616,y=0.8777751478548385 a=eks,b=zee,i=9418,x=0.6260065420723087,y=0.5130847407197059 a=wye,b=eks,i=9419,x=0.05078132617198228,y=0.6850739609021935 a=wye,b=hat,i=9420,x=0.5546625744389891,y=0.592423843346026 a=eks,b=pan,i=9421,x=0.3027881637101668,y=0.6808643872207955 a=wye,b=wye,i=9422,x=0.37276454834771744,y=0.8714783706587489 a=wye,b=pan,i=9423,x=0.7419375666814781,y=0.637584961040595 a=zee,b=wye,i=9424,x=0.7703279734371525,y=0.06486561364647381 a=hat,b=eks,i=9425,x=0.5549660221796285,y=0.025089141119986502 a=hat,b=wye,i=9426,x=0.09307376603254536,y=0.9353448863380895 a=zee,b=hat,i=9427,x=0.1030256845979749,y=0.7734068134003184 a=zee,b=hat,i=9428,x=0.653199130802959,y=0.6335896172568141 a=zee,b=hat,i=9429,x=0.532354384202152,y=0.6240035856800994 a=zee,b=wye,i=9430,x=0.34274658023426774,y=0.30318681846915607 a=zee,b=zee,i=9431,x=0.5467923659024335,y=0.7749657540239817 a=zee,b=eks,i=9432,x=0.011838772084611482,y=0.1275339102058447 a=pan,b=eks,i=9433,x=0.8206211659130856,y=0.3064654802677319 a=wye,b=hat,i=9434,x=0.017191670800521974,y=0.7085199387051128 a=eks,b=wye,i=9435,x=0.06360578109666282,y=0.46325468037532036 a=hat,b=wye,i=9436,x=0.7601470639179305,y=0.659295809995321 a=wye,b=eks,i=9437,x=0.9367938724373632,y=0.017440063316899512 a=eks,b=wye,i=9438,x=0.08469295491745277,y=0.6859916432738016 a=pan,b=pan,i=9439,x=0.8916122427540487,y=0.3044045541494258 a=wye,b=zee,i=9440,x=0.5929171430130797,y=0.7244452361008757 a=eks,b=pan,i=9441,x=0.6555419304461224,y=0.8327927199446215 a=hat,b=zee,i=9442,x=0.3102917611279977,y=0.1420968126103015 a=pan,b=wye,i=9443,x=0.5029377247494847,y=0.13904388591573225 a=zee,b=pan,i=9444,x=0.09343968982332573,y=0.08259490069798114 a=zee,b=zee,i=9445,x=0.7881482118621499,y=0.14841414165625988 a=hat,b=wye,i=9446,x=0.17230938096585302,y=0.4547425422305543 a=hat,b=wye,i=9447,x=0.9179072696408536,y=0.07438240520747308 a=pan,b=zee,i=9448,x=0.1174681478790296,y=0.24900650669165836 a=hat,b=wye,i=9449,x=0.47777327288439886,y=0.6489946706089305 a=pan,b=wye,i=9450,x=0.012891972793683926,y=0.6683256849475698 a=eks,b=eks,i=9451,x=0.3293644408777492,y=0.4858482434549475 a=eks,b=hat,i=9452,x=0.06728855986596627,y=0.0225203259981267 a=zee,b=wye,i=9453,x=0.6954345063830266,y=0.39093627278723897 a=eks,b=eks,i=9454,x=0.6561623394687102,y=0.8733561225304062 a=hat,b=hat,i=9455,x=0.7967671268259048,y=0.9988457558727984 a=eks,b=hat,i=9456,x=0.3026733411299638,y=0.009039229737229593 a=hat,b=zee,i=9457,x=0.048573658961714505,y=0.6212752707665637 a=hat,b=eks,i=9458,x=0.3567374350316811,y=0.5763840507853728 a=wye,b=hat,i=9459,x=0.6222194995601943,y=0.7094551547783764 a=zee,b=zee,i=9460,x=0.20547852694177993,y=0.6209825112942681 a=zee,b=zee,i=9461,x=0.9078512942646408,y=0.457893412939096 a=zee,b=pan,i=9462,x=0.3728674304211519,y=0.12798138723542984 a=eks,b=zee,i=9463,x=0.9866166648988529,y=0.17872754778259448 a=eks,b=hat,i=9464,x=0.8408137777713087,y=0.7528260965110807 a=eks,b=zee,i=9465,x=0.33674248998876777,y=0.10313732374119522 a=zee,b=hat,i=9466,x=0.7785160988373221,y=0.9149400917302326 a=pan,b=pan,i=9467,x=0.6408147454849812,y=0.8180389929482121 a=eks,b=wye,i=9468,x=0.4450915490400188,y=0.8824862158939643 a=hat,b=eks,i=9469,x=0.7744532386038095,y=0.8239793457702959 a=eks,b=zee,i=9470,x=0.3380551755097342,y=0.9960822877834217 a=pan,b=wye,i=9471,x=0.19841074697657957,y=0.585082594173758 a=pan,b=wye,i=9472,x=0.24546532083386097,y=0.7604287018742679 a=zee,b=wye,i=9473,x=0.7950056898263439,y=0.3564547166869826 a=zee,b=hat,i=9474,x=0.647685209897895,y=0.8836053801968514 a=hat,b=wye,i=9475,x=0.6632008131941411,y=0.4341909885612145 a=wye,b=hat,i=9476,x=0.3069739795755916,y=0.8833844662300937 a=zee,b=wye,i=9477,x=0.8339299679122139,y=0.3475658687207359 a=pan,b=pan,i=9478,x=0.061365475952511406,y=0.818350624274383 a=zee,b=pan,i=9479,x=0.52329697201472,y=0.43298303575134856 a=wye,b=zee,i=9480,x=0.8749976408632957,y=0.6548646339660915 a=wye,b=pan,i=9481,x=0.5642187826825651,y=0.34484130192623874 a=zee,b=wye,i=9482,x=0.8624170951363191,y=0.39655837242080083 a=wye,b=zee,i=9483,x=0.8152545316901858,y=0.805340784776813 a=wye,b=pan,i=9484,x=0.6372765009756718,y=0.9390350932955009 a=pan,b=hat,i=9485,x=0.9951942673622418,y=0.24029104242438515 a=zee,b=pan,i=9486,x=0.5811802467756935,y=0.2889437683040591 a=zee,b=pan,i=9487,x=0.4993989664425713,y=0.05807295824271008 a=hat,b=eks,i=9488,x=0.2735790874645423,y=0.9082260037697276 a=pan,b=eks,i=9489,x=0.6975989077779615,y=0.09410891805021981 a=eks,b=wye,i=9490,x=0.3047068029924873,y=0.45677847562149443 a=eks,b=hat,i=9491,x=0.8064028259566911,y=0.23750639868456547 a=wye,b=pan,i=9492,x=0.8385671784002926,y=0.16511708685555704 a=pan,b=zee,i=9493,x=0.14382267645371283,y=0.30310643623917777 a=wye,b=zee,i=9494,x=0.1971697941455559,y=0.9572851470177893 a=pan,b=zee,i=9495,x=0.7883366151370216,y=0.3948433476009946 a=wye,b=eks,i=9496,x=0.6409095653823011,y=0.9562448788009965 a=eks,b=pan,i=9497,x=0.5364899166331132,y=0.2068390306785195 a=zee,b=zee,i=9498,x=0.8078967452757337,y=0.3300003462355645 a=pan,b=hat,i=9499,x=0.6409505992060831,y=0.8924125083478576 a=eks,b=eks,i=9500,x=0.7367548086654266,y=0.1195022439518929 a=wye,b=hat,i=9501,x=0.7080642380603698,y=0.2215162974776509 a=eks,b=pan,i=9502,x=0.16573428170345306,y=0.41898077136905765 a=eks,b=wye,i=9503,x=0.36724763207097333,y=0.20835207321889548 a=wye,b=zee,i=9504,x=0.39741592004944626,y=0.9293543997296885 a=pan,b=wye,i=9505,x=0.9560872444441273,y=0.07372493247854506 a=hat,b=zee,i=9506,x=0.8278984427570538,y=0.42279600093868386 a=pan,b=zee,i=9507,x=0.7813724544334408,y=0.8453351473597829 a=wye,b=wye,i=9508,x=0.7441125682394683,y=0.7008423538608134 a=pan,b=wye,i=9509,x=0.9777133094457836,y=0.8770140891389367 a=pan,b=zee,i=9510,x=0.5805152904440047,y=0.7292694938520734 a=hat,b=zee,i=9511,x=0.6147425358709413,y=0.07609273803938887 a=pan,b=eks,i=9512,x=0.8889876510183636,y=0.5398130117495377 a=zee,b=hat,i=9513,x=0.9304009976201171,y=0.7707216462443467 a=eks,b=wye,i=9514,x=0.30105501363454046,y=0.6134456172343001 a=zee,b=zee,i=9515,x=0.49203474036972605,y=0.8884765700634494 a=pan,b=zee,i=9516,x=0.19069582221512293,y=0.18374946422400285 a=hat,b=zee,i=9517,x=0.7026133177880014,y=0.6466476553765019 a=zee,b=zee,i=9518,x=0.9360532474806631,y=0.3150191945268458 a=hat,b=hat,i=9519,x=0.7398790596655229,y=0.39271231521470007 a=hat,b=wye,i=9520,x=0.4732400431646818,y=0.9988992430260081 a=eks,b=wye,i=9521,x=0.5220677770619295,y=0.22799544453185772 a=zee,b=zee,i=9522,x=0.42835064707125325,y=0.5919336704352758 a=hat,b=wye,i=9523,x=0.9605618074441231,y=0.4152052252584968 a=zee,b=eks,i=9524,x=0.9170688313846707,y=0.5069375781460218 a=wye,b=pan,i=9525,x=0.3863168227783099,y=0.9070811441436243 a=pan,b=pan,i=9526,x=0.2141091210993753,y=0.3444756388829696 a=pan,b=pan,i=9527,x=0.8963731964519087,y=0.4182877370577519 a=zee,b=wye,i=9528,x=0.8576581178453184,y=0.5844216436491058 a=hat,b=pan,i=9529,x=0.15630461982613209,y=0.4213024290362597 a=wye,b=pan,i=9530,x=0.9935514622913653,y=0.0905032997544325 a=hat,b=hat,i=9531,x=0.6515604108858241,y=0.1838995493742861 a=wye,b=eks,i=9532,x=0.7441241444485516,y=0.07237060435987241 a=hat,b=zee,i=9533,x=0.14919839526856782,y=0.36262847729045855 a=pan,b=zee,i=9534,x=0.028605382208390595,y=0.3310651782769932 a=eks,b=eks,i=9535,x=0.2897105250506825,y=0.7327433725996669 a=wye,b=pan,i=9536,x=0.3206273570986442,y=0.6278333197115907 a=pan,b=pan,i=9537,x=0.6651951277546836,y=0.04848147036578743 a=zee,b=hat,i=9538,x=0.6252849020303484,y=0.6594304208970674 a=hat,b=pan,i=9539,x=0.19370943950685016,y=0.9984558689466796 a=pan,b=hat,i=9540,x=0.9246863327027597,y=0.8632603228617942 a=hat,b=eks,i=9541,x=0.4067481238813502,y=0.23429602829888707 a=wye,b=pan,i=9542,x=0.021183317661808254,y=0.17173704813590862 a=hat,b=wye,i=9543,x=0.5871893596056772,y=0.4980677307811977 a=zee,b=hat,i=9544,x=0.8363252040733755,y=0.9066361832913213 a=hat,b=wye,i=9545,x=0.8237931228490942,y=0.6154262745221335 a=eks,b=pan,i=9546,x=0.40720117438767467,y=0.23973575256875324 a=zee,b=hat,i=9547,x=0.262730021858643,y=0.9775392644170577 a=eks,b=eks,i=9548,x=0.18870561616460124,y=0.39344511734853893 a=hat,b=pan,i=9549,x=0.810156100508244,y=0.8042316538504537 a=eks,b=pan,i=9550,x=0.15708603238162966,y=0.1775120949821959 a=wye,b=pan,i=9551,x=0.27897262749013574,y=0.6810625461380688 a=wye,b=hat,i=9552,x=0.7096131782065784,y=0.9809388281353744 a=wye,b=zee,i=9553,x=0.7419668715219193,y=0.8915237603968896 a=pan,b=hat,i=9554,x=0.3423989249268735,y=0.9243111067539105 a=hat,b=zee,i=9555,x=0.24555292038029897,y=0.48675495523019463 a=pan,b=wye,i=9556,x=0.24636402971605553,y=0.5875667064956803 a=hat,b=hat,i=9557,x=0.0708280418080367,y=0.028042679168150064 a=zee,b=pan,i=9558,x=0.6684221558470672,y=0.30650078371682876 a=zee,b=hat,i=9559,x=0.43239927669791367,y=0.9087149456158999 a=hat,b=eks,i=9560,x=0.4502257867908256,y=0.24215826461552248 a=hat,b=pan,i=9561,x=0.3883496618282979,y=0.22856613973468343 a=pan,b=zee,i=9562,x=0.38705906045142546,y=0.8201861527861242 a=wye,b=hat,i=9563,x=0.7048435545008259,y=0.48292367120675417 a=wye,b=wye,i=9564,x=0.31482422203360294,y=0.7773413323819734 a=eks,b=wye,i=9565,x=0.9044412102611812,y=0.9981501201118028 a=eks,b=pan,i=9566,x=0.8603999193559607,y=0.050257998909329804 a=hat,b=pan,i=9567,x=0.3290021077530395,y=0.39186940599147513 a=hat,b=hat,i=9568,x=0.5173577930271901,y=0.5140354310886103 a=eks,b=wye,i=9569,x=0.7320928489540067,y=0.32241117771050576 a=zee,b=pan,i=9570,x=0.6962209074556881,y=0.9192719817135738 a=pan,b=hat,i=9571,x=0.888257035194179,y=0.2504282311488486 a=eks,b=eks,i=9572,x=0.9118388496610922,y=0.4477922591240877 a=eks,b=eks,i=9573,x=0.6740019306244561,y=0.08236636121482144 a=wye,b=hat,i=9574,x=0.0519270658523715,y=0.5083523326544599 a=eks,b=zee,i=9575,x=0.43349880702663446,y=0.2019764764745724 a=eks,b=wye,i=9576,x=0.40205714986858077,y=0.4741982385845239 a=pan,b=wye,i=9577,x=0.881168878098415,y=0.19056106338416623 a=hat,b=pan,i=9578,x=0.7487655114338957,y=0.17555433868225578 a=hat,b=hat,i=9579,x=0.8966618053662483,y=0.4330076918462582 a=zee,b=pan,i=9580,x=0.7965009504831406,y=0.7113454506506395 a=zee,b=hat,i=9581,x=0.2752580210770491,y=0.38383648901881584 a=zee,b=zee,i=9582,x=0.05859657717284972,y=0.4628784062589941 a=eks,b=wye,i=9583,x=0.8996740267247002,y=0.5650994189598781 a=pan,b=eks,i=9584,x=0.02695408257021037,y=0.29013109754146693 a=eks,b=pan,i=9585,x=0.4535709808960595,y=0.5806226415527737 a=wye,b=zee,i=9586,x=0.5222675900946373,y=0.2730687743275988 a=hat,b=wye,i=9587,x=0.8298282901710073,y=0.4244293086366463 a=zee,b=pan,i=9588,x=0.6700466485802432,y=0.8589272032654192 a=eks,b=zee,i=9589,x=0.9276643978084914,y=0.5258608330900789 a=zee,b=wye,i=9590,x=0.8441314279623635,y=0.9332236415562302 a=eks,b=hat,i=9591,x=0.4827772018239752,y=0.5265209579835296 a=eks,b=zee,i=9592,x=0.26199786487068166,y=0.6277586753372824 a=pan,b=zee,i=9593,x=0.5450234908021439,y=0.08615595529756348 a=pan,b=zee,i=9594,x=0.23590110682049703,y=0.4376160303971274 a=eks,b=eks,i=9595,x=0.28340752983264006,y=0.11403963974075082 a=zee,b=eks,i=9596,x=0.35304408286489164,y=0.8124829013597039 a=pan,b=eks,i=9597,x=0.12573249703948852,y=0.7661395734572027 a=wye,b=wye,i=9598,x=0.5312315260758368,y=0.8829573415823095 a=zee,b=zee,i=9599,x=0.5367647772694465,y=0.8214571633873584 a=pan,b=eks,i=9600,x=0.014723374949171641,y=0.5395465432733608 a=wye,b=hat,i=9601,x=0.07895223840580223,y=0.194977597106609 a=pan,b=pan,i=9602,x=0.8253467012158633,y=0.1789489998930841 a=wye,b=hat,i=9603,x=0.8921240644062436,y=0.4426730752788607 a=zee,b=wye,i=9604,x=0.06643820319339155,y=0.53243917974831 a=zee,b=eks,i=9605,x=0.20698996963521232,y=0.1727878106962335 a=hat,b=wye,i=9606,x=0.8834303299307495,y=0.5688694060075045 a=pan,b=wye,i=9607,x=0.7447919202299266,y=0.288491034452374 a=wye,b=hat,i=9608,x=0.5353991342820382,y=0.17933052450743758 a=wye,b=eks,i=9609,x=0.6154267547093157,y=0.6251702670753683 a=wye,b=wye,i=9610,x=0.6498025682619308,y=0.7373575543454602 a=pan,b=pan,i=9611,x=0.5949770409017805,y=0.12908671407875727 a=pan,b=hat,i=9612,x=0.33776075209807155,y=0.9036967387336143 a=wye,b=wye,i=9613,x=0.22534868678381625,y=0.2948136458395363 a=zee,b=hat,i=9614,x=0.18625473663791048,y=0.9908832589746321 a=wye,b=pan,i=9615,x=0.9704362849821679,y=0.7056997811176895 a=wye,b=pan,i=9616,x=0.045274112402005295,y=0.927169630245143 a=wye,b=eks,i=9617,x=0.47705336261321385,y=0.6750550500462088 a=hat,b=hat,i=9618,x=0.12470215534695595,y=0.6384166019909083 a=zee,b=eks,i=9619,x=0.2581941043200088,y=0.9649567414630514 a=eks,b=pan,i=9620,x=0.9018226733942377,y=0.36177533283317176 a=eks,b=wye,i=9621,x=0.9710728242015396,y=0.03785169422146961 a=eks,b=hat,i=9622,x=0.3797960123033828,y=0.8885266797541085 a=wye,b=wye,i=9623,x=0.8866788918745252,y=0.1725138886130947 a=pan,b=wye,i=9624,x=0.7133865698466841,y=0.929260666330654 a=zee,b=eks,i=9625,x=0.4926378355160854,y=0.7904306245961183 a=hat,b=zee,i=9626,x=0.6958926586419276,y=0.9430927470576268 a=eks,b=pan,i=9627,x=0.835956453698831,y=0.9007142296516358 a=eks,b=eks,i=9628,x=0.6999306667567604,y=0.780471447448193 a=pan,b=wye,i=9629,x=0.09405147784147772,y=0.11479025012357491 a=pan,b=pan,i=9630,x=0.5521126309556411,y=0.9964281092981838 a=pan,b=wye,i=9631,x=0.05531336390926278,y=0.03713539762104867 a=pan,b=eks,i=9632,x=0.06596720074216122,y=0.5047584331504461 a=pan,b=hat,i=9633,x=0.7402115896026022,y=0.8286389697202792 a=pan,b=wye,i=9634,x=0.24820023272983005,y=0.23862519520811787 a=hat,b=hat,i=9635,x=0.46092562373997625,y=0.6247131098820621 a=pan,b=zee,i=9636,x=0.28131833297516473,y=0.8846710544611799 a=pan,b=wye,i=9637,x=0.8663800328522322,y=0.9391569730896534 a=pan,b=hat,i=9638,x=0.833781456495762,y=0.7668042837631657 a=eks,b=pan,i=9639,x=0.382030344664966,y=0.7882388680685686 a=hat,b=hat,i=9640,x=0.463917278383292,y=0.3511187165916906 a=eks,b=wye,i=9641,x=0.529202227506829,y=0.8125205279022973 a=pan,b=hat,i=9642,x=0.9841563799754587,y=0.7384543484249447 a=eks,b=wye,i=9643,x=0.4320217008326096,y=0.9206705868869096 a=zee,b=wye,i=9644,x=0.44428785284867134,y=0.5020097257793937 a=hat,b=hat,i=9645,x=0.9504824754631439,y=0.09348851365055577 a=wye,b=zee,i=9646,x=0.33420875392550375,y=0.5893334569374644 a=eks,b=zee,i=9647,x=0.5673775461311286,y=0.12307074649995897 a=hat,b=pan,i=9648,x=0.622994461222752,y=0.24151966026299154 a=eks,b=eks,i=9649,x=0.5350085360772315,y=0.172869985141348 a=pan,b=wye,i=9650,x=0.6754011861080255,y=0.05797717400310154 a=hat,b=wye,i=9651,x=0.3235716165591942,y=0.6778947432413094 a=zee,b=hat,i=9652,x=0.929634631262683,y=0.6531235392615523 a=zee,b=zee,i=9653,x=0.0005486114815762555,y=0.7390531741942926 a=wye,b=eks,i=9654,x=0.2797016068787569,y=0.2814263099253008 a=pan,b=zee,i=9655,x=0.4057734719060324,y=0.15139105154457277 a=eks,b=hat,i=9656,x=0.7989570844648637,y=0.18643578362186397 a=zee,b=wye,i=9657,x=0.3194817450421683,y=0.16543264401690605 a=pan,b=zee,i=9658,x=0.5277143419555844,y=0.564254772210993 a=pan,b=pan,i=9659,x=0.2294759703953444,y=0.9048171749557317 a=zee,b=pan,i=9660,x=0.7009420239615597,y=0.7800651878215885 a=hat,b=eks,i=9661,x=0.953827560931939,y=0.185884517258452 a=eks,b=hat,i=9662,x=0.39474659738679696,y=0.43059711110253074 a=eks,b=wye,i=9663,x=0.4372348974243785,y=0.10476776917399111 a=zee,b=zee,i=9664,x=0.7236352219650497,y=0.08403018416427377 a=eks,b=hat,i=9665,x=0.05892665049965862,y=0.9092582016648947 a=wye,b=hat,i=9666,x=0.060690152753413606,y=0.7684174554192018 a=pan,b=zee,i=9667,x=0.4770802050437122,y=0.3612321845191586 a=eks,b=eks,i=9668,x=0.9444367104990204,y=0.4453839788188664 a=pan,b=pan,i=9669,x=0.1622773559553956,y=0.2408391953166471 a=zee,b=hat,i=9670,x=0.8623108841707915,y=0.5103999923687886 a=pan,b=eks,i=9671,x=0.6246995141336152,y=0.9570445916327326 a=zee,b=hat,i=9672,x=0.1269462523668624,y=0.5944133371399858 a=hat,b=eks,i=9673,x=0.4200506848108232,y=0.5676463512767541 a=pan,b=wye,i=9674,x=0.5610478784857535,y=0.03318888871240755 a=eks,b=zee,i=9675,x=0.20265536384504856,y=0.6923879412730425 a=eks,b=eks,i=9676,x=0.3552193074991099,y=0.48796093863435663 a=zee,b=zee,i=9677,x=0.7404662009786069,y=0.11704524348651668 a=pan,b=eks,i=9678,x=0.808264671158733,y=0.7958171364354866 a=eks,b=zee,i=9679,x=0.7801771579924318,y=0.8039168775444497 a=zee,b=hat,i=9680,x=0.8361585788416193,y=0.5904904054602013 a=pan,b=zee,i=9681,x=0.0881721087846773,y=0.6134254647769964 a=zee,b=zee,i=9682,x=0.790057108611216,y=0.6026603017260809 a=eks,b=eks,i=9683,x=0.591870649889634,y=0.03952287487189998 a=hat,b=zee,i=9684,x=0.2251288541796853,y=0.0914353575236524 a=hat,b=zee,i=9685,x=0.9783350755125275,y=0.6710234655696609 a=eks,b=wye,i=9686,x=0.2325134660144058,y=0.44098000477056654 a=eks,b=hat,i=9687,x=0.11435792053370386,y=0.3592405692612377 a=eks,b=pan,i=9688,x=0.013751121997101046,y=0.21071503600234553 a=eks,b=eks,i=9689,x=0.1983455661823349,y=0.3353712062497688 a=pan,b=zee,i=9690,x=0.8642706624839454,y=0.5020203992558137 a=zee,b=eks,i=9691,x=0.2257785909803941,y=0.7399889531061412 a=pan,b=zee,i=9692,x=0.518772161497821,y=0.5305276254149733 a=pan,b=wye,i=9693,x=0.5247714869016064,y=0.20906476377409644 a=hat,b=pan,i=9694,x=0.11556338152672874,y=0.33174635478223324 a=zee,b=eks,i=9695,x=0.7368043937171205,y=0.19022664969335668 a=hat,b=eks,i=9696,x=0.45233728948031515,y=0.8621802693175313 a=zee,b=hat,i=9697,x=0.609947885859063,y=0.5639255760997719 a=pan,b=pan,i=9698,x=0.8228841939557919,y=0.31636476080699183 a=pan,b=eks,i=9699,x=0.5797850274201329,y=0.8706915943068293 a=wye,b=eks,i=9700,x=0.5883942014435751,y=0.4251422885431637 a=pan,b=hat,i=9701,x=0.6223555273725319,y=0.23801172242502744 a=hat,b=pan,i=9702,x=0.47371944906908836,y=0.8829841445810995 a=eks,b=pan,i=9703,x=0.6629053709037614,y=0.2666968632816322 a=hat,b=wye,i=9704,x=0.0020992599710109028,y=0.7828207905256124 a=wye,b=eks,i=9705,x=0.8295502211195385,y=0.2601557950975687 a=pan,b=pan,i=9706,x=0.49968159892099573,y=0.8538626308087385 a=hat,b=zee,i=9707,x=0.452146182413364,y=0.6070096571093107 a=hat,b=hat,i=9708,x=0.20800822198744873,y=0.6831793769522073 a=pan,b=hat,i=9709,x=0.37466193491417743,y=0.9006405341772813 a=pan,b=pan,i=9710,x=0.7926733788975334,y=0.08649107188287852 a=eks,b=eks,i=9711,x=0.6600637787756933,y=0.8973761456806139 a=eks,b=pan,i=9712,x=0.6042851641458743,y=0.5283912780602698 a=pan,b=pan,i=9713,x=0.8335225275262462,y=0.6504888680594751 a=hat,b=hat,i=9714,x=0.08407860919578702,y=0.6696777791854102 a=eks,b=eks,i=9715,x=0.6688071850195556,y=0.8479172328203074 a=eks,b=pan,i=9716,x=0.7699539494161064,y=0.26819674031242324 a=zee,b=eks,i=9717,x=0.15919097637828838,y=0.1961372512286007 a=pan,b=eks,i=9718,x=0.764067350428244,y=0.40784722026028675 a=hat,b=zee,i=9719,x=0.43422195883532855,y=0.21527795148734652 a=hat,b=wye,i=9720,x=0.18548878820596515,y=0.0823708416566078 a=eks,b=hat,i=9721,x=0.3055689756821137,y=0.09846251941046569 a=eks,b=eks,i=9722,x=0.7595314601613131,y=0.33493549394323163 a=zee,b=eks,i=9723,x=0.6798345440149453,y=0.20549268600871629 a=pan,b=zee,i=9724,x=0.5536779382214667,y=0.5953194186331342 a=zee,b=hat,i=9725,x=0.07153658715465838,y=0.3044986057514285 a=zee,b=eks,i=9726,x=0.7429014874999341,y=0.769520753307292 a=zee,b=zee,i=9727,x=0.9994904324789629,y=0.9539638011649831 a=hat,b=eks,i=9728,x=0.8039188324095456,y=0.3485837756125213 a=zee,b=wye,i=9729,x=0.585248425583051,y=0.8575390870552795 a=wye,b=zee,i=9730,x=0.21280831790997046,y=0.215168894307449 a=pan,b=wye,i=9731,x=0.5632993384118764,y=0.039984476208001385 a=wye,b=wye,i=9732,x=0.8690690369493996,y=0.4780287234110929 a=pan,b=pan,i=9733,x=0.4805900786042281,y=0.16269527652434412 a=zee,b=zee,i=9734,x=0.685896959785486,y=0.04306632327231985 a=eks,b=hat,i=9735,x=0.9365415028222407,y=0.7049316644937267 a=wye,b=hat,i=9736,x=0.8357032803599334,y=0.5980478941599903 a=eks,b=wye,i=9737,x=0.9524795937075123,y=0.10018533556749787 a=eks,b=zee,i=9738,x=0.9571796062292364,y=0.23794282932532718 a=wye,b=zee,i=9739,x=0.9969978586906577,y=0.12087339658352203 a=hat,b=hat,i=9740,x=0.6123513158512692,y=0.6254032566567909 a=wye,b=hat,i=9741,x=0.3852066212224572,y=0.18704182599635633 a=hat,b=pan,i=9742,x=0.3298562598570899,y=0.07896336383457148 a=wye,b=eks,i=9743,x=0.9717135336552146,y=0.07632785790260654 a=wye,b=pan,i=9744,x=0.22511319050031164,y=0.027172244080271968 a=eks,b=wye,i=9745,x=0.8413814458463156,y=0.3006239950449451 a=wye,b=eks,i=9746,x=0.8712637246437533,y=0.3533804932864615 a=hat,b=zee,i=9747,x=0.7487247858158664,y=0.7159053727726352 a=wye,b=zee,i=9748,x=0.5840196841699298,y=0.4370626364171394 a=pan,b=zee,i=9749,x=0.34522090703048847,y=0.4157608834458977 a=hat,b=zee,i=9750,x=0.7718731752355878,y=0.003718233758628786 a=pan,b=pan,i=9751,x=0.9143236771785547,y=0.25370981239174295 a=pan,b=pan,i=9752,x=0.49208279855492576,y=0.20454810028776949 a=pan,b=hat,i=9753,x=0.9706978016906814,y=0.10150626192794265 a=hat,b=eks,i=9754,x=0.5026259494302875,y=0.8456607478858248 a=eks,b=zee,i=9755,x=0.5983063482292889,y=0.5332133759436987 a=hat,b=zee,i=9756,x=0.7064136847926241,y=0.44538611409928863 a=hat,b=eks,i=9757,x=0.008475751466850423,y=0.28105237534152183 a=pan,b=zee,i=9758,x=0.17107174260903157,y=0.37907028999046954 a=eks,b=hat,i=9759,x=0.017723241565128722,y=0.9328595930739089 a=eks,b=pan,i=9760,x=0.12671066296153322,y=0.5377141169726312 a=pan,b=pan,i=9761,x=0.5230226494775585,y=0.13327609324548828 a=hat,b=eks,i=9762,x=0.7178138929211814,y=0.1071446592333627 a=hat,b=eks,i=9763,x=0.5172215091010056,y=0.5656123978535788 a=hat,b=zee,i=9764,x=0.7656352275177252,y=0.2648922718032728 a=eks,b=hat,i=9765,x=0.48052681626037963,y=0.7749660798351525 a=wye,b=wye,i=9766,x=0.259817607695608,y=0.9840660882388936 a=zee,b=pan,i=9767,x=0.048130721334256,y=0.7454770180064983 a=pan,b=eks,i=9768,x=0.20367798282554506,y=0.2900189560591435 a=hat,b=pan,i=9769,x=0.25924528216321086,y=0.09380722776595263 a=zee,b=eks,i=9770,x=0.6363426074022088,y=0.4319301718266042 a=zee,b=zee,i=9771,x=0.3356843529120048,y=0.5926710392808378 a=zee,b=wye,i=9772,x=0.5622225319493308,y=0.8404440554821954 a=wye,b=eks,i=9773,x=0.13486296020405042,y=0.1370545330575903 a=hat,b=hat,i=9774,x=0.35744829640564457,y=0.6788365316031054 a=hat,b=wye,i=9775,x=0.24625364619227708,y=0.8195103714348378 a=pan,b=pan,i=9776,x=0.5528717365202791,y=0.6963979512688395 a=pan,b=pan,i=9777,x=0.2517658835424562,y=0.6092188620965916 a=zee,b=hat,i=9778,x=0.01504264188606863,y=0.5413773331319965 a=wye,b=hat,i=9779,x=0.5571763577936231,y=0.008720265560284046 a=hat,b=eks,i=9780,x=0.09487662655788398,y=0.6514663782722071 a=hat,b=zee,i=9781,x=0.04241382763446522,y=0.8022615952391015 a=pan,b=wye,i=9782,x=0.6824468663215681,y=0.48194582894494864 a=zee,b=zee,i=9783,x=0.9571941589309878,y=0.7438875241555649 a=zee,b=zee,i=9784,x=0.40696198225113067,y=0.5926120348164292 a=hat,b=hat,i=9785,x=0.32320628233550797,y=0.8120858769211963 a=wye,b=eks,i=9786,x=0.36572120295268673,y=0.4315097648133279 a=pan,b=pan,i=9787,x=0.536020466205729,y=0.36476940865976226 a=pan,b=zee,i=9788,x=0.18548410059983933,y=0.6484359981774218 a=pan,b=wye,i=9789,x=0.7500082437438368,y=0.6736777772258289 a=hat,b=zee,i=9790,x=0.32608913911284954,y=0.06744557277974006 a=eks,b=hat,i=9791,x=0.6359822783546621,y=0.6518259855994504 a=zee,b=wye,i=9792,x=0.4220728880621055,y=0.17140084746735773 a=wye,b=eks,i=9793,x=0.11689471664414974,y=0.1874183258828398 a=wye,b=pan,i=9794,x=0.4771768380141904,y=0.47458700283464794 a=zee,b=wye,i=9795,x=0.7547326233775347,y=0.2923139817159962 a=pan,b=hat,i=9796,x=0.04688093205740962,y=0.50212295582611 a=hat,b=eks,i=9797,x=0.4801061637157764,y=0.27686764370925665 a=zee,b=pan,i=9798,x=0.2234307924316019,y=0.9911544429536859 a=pan,b=wye,i=9799,x=0.9939181050884636,y=0.9933949713028724 a=eks,b=wye,i=9800,x=0.3244253214963203,y=0.5909643779096942 a=pan,b=eks,i=9801,x=0.40857906819081213,y=0.9965875678612408 a=eks,b=zee,i=9802,x=0.03433864233340278,y=0.08512282774742341 a=hat,b=eks,i=9803,x=0.2637466257688432,y=0.91230604083564 a=wye,b=hat,i=9804,x=0.9290204990737289,y=0.39908048283039077 a=pan,b=pan,i=9805,x=0.03871655125329254,y=0.6099093593302857 a=hat,b=hat,i=9806,x=0.7581986258233882,y=0.6723938004232705 a=hat,b=zee,i=9807,x=0.734026221575298,y=0.5060212582772865 a=zee,b=zee,i=9808,x=0.8976695035586633,y=0.8107371161879025 a=zee,b=eks,i=9809,x=0.9007397692300039,y=0.744200950461551 a=zee,b=wye,i=9810,x=0.33878497822294384,y=0.19641652801433074 a=wye,b=eks,i=9811,x=0.3684889443586322,y=0.03845017409345586 a=eks,b=eks,i=9812,x=0.5467455763864191,y=0.2509547627082641 a=zee,b=pan,i=9813,x=0.8206715556120792,y=0.8639781360005004 a=hat,b=wye,i=9814,x=0.34212469593392425,y=0.20687141477181548 a=hat,b=pan,i=9815,x=0.17753782684157615,y=0.0015438604368104292 a=pan,b=hat,i=9816,x=0.24876592451844848,y=0.4470518528813471 a=wye,b=wye,i=9817,x=0.7049827500065716,y=0.70700844125317 a=zee,b=wye,i=9818,x=0.7922870761657094,y=0.1588053154611868 a=hat,b=zee,i=9819,x=0.19261418898624927,y=0.050366139741013005 a=hat,b=pan,i=9820,x=0.5447052480269977,y=0.8699888671698426 a=eks,b=wye,i=9821,x=0.5189946092707575,y=0.6854994867317263 a=eks,b=zee,i=9822,x=0.7728584654655655,y=0.8255138151084206 a=wye,b=hat,i=9823,x=0.7885587074785081,y=0.8643021021880486 a=wye,b=zee,i=9824,x=0.7856139049382169,y=0.18039878866135772 a=wye,b=hat,i=9825,x=0.5289400839880876,y=0.015600624873499225 a=eks,b=pan,i=9826,x=0.2030275078795114,y=0.7367196912046005 a=wye,b=hat,i=9827,x=0.2296202003399993,y=0.10085387835757498 a=eks,b=eks,i=9828,x=0.7116944851584103,y=0.4451057001626685 a=pan,b=pan,i=9829,x=0.1561292001719159,y=0.16006739551266214 a=zee,b=wye,i=9830,x=0.022447139657367665,y=0.7657756294873818 a=pan,b=hat,i=9831,x=0.07903067560527932,y=0.06301267712877379 a=hat,b=hat,i=9832,x=0.6422615702526209,y=0.8249323364395087 a=zee,b=hat,i=9833,x=0.10035889696290079,y=0.003028321603898987 a=hat,b=zee,i=9834,x=0.2640449383149195,y=0.37076593348410314 a=eks,b=wye,i=9835,x=0.5874685326990423,y=0.9287556289542644 a=wye,b=pan,i=9836,x=0.8763125291386116,y=0.5144780339183038 a=zee,b=eks,i=9837,x=0.65481575495434,y=0.7500209738973791 a=eks,b=pan,i=9838,x=0.6496315038661542,y=0.6072257440552286 a=eks,b=wye,i=9839,x=0.9533298751342247,y=0.023940678831367967 a=zee,b=wye,i=9840,x=0.2852685772877177,y=0.691521855604441 a=eks,b=hat,i=9841,x=0.09722173469836548,y=0.36827480828558046 a=zee,b=wye,i=9842,x=0.9106754203674021,y=0.44421367548499935 a=zee,b=zee,i=9843,x=0.43260196585756017,y=0.7253288611322654 a=wye,b=pan,i=9844,x=0.12361870847069467,y=0.8005113079266706 a=hat,b=pan,i=9845,x=0.75413528558763,y=0.25353880305437526 a=hat,b=eks,i=9846,x=0.39360425072719285,y=0.9727010611978959 a=eks,b=eks,i=9847,x=0.36408179966880305,y=0.005301040380198518 a=zee,b=hat,i=9848,x=0.7494017826915185,y=0.5716008160658336 a=pan,b=pan,i=9849,x=0.07314118820090576,y=0.6728814876086208 a=pan,b=pan,i=9850,x=0.03810488399365641,y=0.6301648369861882 a=pan,b=pan,i=9851,x=0.001361386759249128,y=0.25792849048845146 a=zee,b=pan,i=9852,x=0.293496771264693,y=0.5611287273924571 a=wye,b=hat,i=9853,x=0.18556020761414638,y=0.5317691684291805 a=hat,b=zee,i=9854,x=0.5972939543247376,y=0.4330238320114945 a=wye,b=pan,i=9855,x=0.6182578764501776,y=0.7655458252282237 a=pan,b=hat,i=9856,x=0.8102716531871033,y=0.8313089740346422 a=zee,b=pan,i=9857,x=0.466306200678794,y=0.10723178210789208 a=eks,b=eks,i=9858,x=0.3843542033136572,y=0.943645502584351 a=pan,b=eks,i=9859,x=0.25317568143298785,y=0.546876245709709 a=pan,b=pan,i=9860,x=0.5805216264198891,y=0.7328584964292528 a=zee,b=hat,i=9861,x=0.2178144713563437,y=0.7034064666412133 a=pan,b=eks,i=9862,x=0.5507783340308107,y=0.8117197523869161 a=hat,b=hat,i=9863,x=0.29207020272823003,y=0.3025947324662317 a=eks,b=wye,i=9864,x=0.11439725902216524,y=0.07940989075873717 a=eks,b=zee,i=9865,x=0.007673493448299595,y=0.7065454787031791 a=eks,b=hat,i=9866,x=0.4975899292735726,y=0.004921317195285879 a=zee,b=eks,i=9867,x=0.02662315353765099,y=0.34265021760387904 a=pan,b=pan,i=9868,x=0.4854194107628803,y=0.3198466348114496 a=hat,b=zee,i=9869,x=0.9595189622375838,y=0.501564353037085 a=zee,b=wye,i=9870,x=0.5215850818114982,y=0.4286413152070583 a=zee,b=hat,i=9871,x=0.6250842276723021,y=0.6957696470514947 a=eks,b=eks,i=9872,x=0.2737032476182002,y=0.9151070142618852 a=hat,b=wye,i=9873,x=0.6217399084607139,y=0.1324645008753036 a=hat,b=eks,i=9874,x=0.2999314090059486,y=0.6837336951519206 a=hat,b=zee,i=9875,x=0.748712308729834,y=0.7138449723779594 a=zee,b=wye,i=9876,x=0.8136200511878549,y=0.8072663619726874 a=eks,b=zee,i=9877,x=0.4863731414322163,y=0.1035362785381897 a=pan,b=eks,i=9878,x=0.18800091230044202,y=0.6362766839502966 a=zee,b=wye,i=9879,x=0.20901422499230626,y=0.4434307845301825 a=wye,b=eks,i=9880,x=0.7843765179845881,y=0.9652357480134778 a=zee,b=wye,i=9881,x=0.7862677717692486,y=0.5179978676865895 a=pan,b=pan,i=9882,x=0.7627902949547447,y=0.19790202442128657 a=zee,b=zee,i=9883,x=0.9799742729336977,y=0.28992926827299315 a=zee,b=eks,i=9884,x=0.05789237193201191,y=0.5580049129122333 a=pan,b=zee,i=9885,x=0.8352546612543933,y=0.29808563018476386 a=eks,b=zee,i=9886,x=0.6612732451934941,y=0.8821040941341458 a=zee,b=wye,i=9887,x=0.03800555126962368,y=0.5564528314361259 a=wye,b=wye,i=9888,x=0.15173705344284016,y=0.8028950342833062 a=eks,b=pan,i=9889,x=0.4757333931069331,y=0.6709064008045604 a=zee,b=zee,i=9890,x=0.04473360870043863,y=0.7488172425798428 a=pan,b=wye,i=9891,x=0.6641701958582154,y=0.045390088141842866 a=pan,b=wye,i=9892,x=0.6400396948750516,y=0.2741016723165629 a=wye,b=hat,i=9893,x=0.07086887541312281,y=0.9995743686923368 a=zee,b=wye,i=9894,x=0.6202100179528263,y=0.9712368683190139 a=pan,b=hat,i=9895,x=0.8641234318244241,y=0.893546531152826 a=eks,b=hat,i=9896,x=0.10089977663900951,y=0.40511056317517313 a=hat,b=pan,i=9897,x=0.1706694949653771,y=0.8882049668710424 a=hat,b=eks,i=9898,x=0.9012519500883333,y=0.35484059538741897 a=eks,b=hat,i=9899,x=0.26412200768049177,y=0.8469250510935257 a=pan,b=eks,i=9900,x=0.18024054303984605,y=0.6531731873858931 a=wye,b=hat,i=9901,x=0.8417240952654167,y=0.09572553012932483 a=pan,b=zee,i=9902,x=0.9054776364609202,y=0.6259317176046434 a=zee,b=hat,i=9903,x=0.9287944849908445,y=0.46735676241217305 a=pan,b=zee,i=9904,x=0.5481438224523807,y=0.7183018840232132 a=hat,b=wye,i=9905,x=0.5457200264172307,y=0.29150693945838846 a=eks,b=pan,i=9906,x=0.19123694955232085,y=0.1361773881166165 a=pan,b=pan,i=9907,x=0.9805858575888526,y=0.35107718527657394 a=wye,b=hat,i=9908,x=0.8027037826343639,y=0.02454307542444223 a=eks,b=hat,i=9909,x=0.5392855167210358,y=0.04490931508757068 a=hat,b=hat,i=9910,x=0.07042038780612936,y=0.5146702744032997 a=pan,b=eks,i=9911,x=0.7646508656008143,y=0.9446343254356182 a=zee,b=wye,i=9912,x=0.4701991772804557,y=0.33405458598495386 a=pan,b=eks,i=9913,x=0.8147835691088603,y=0.6617843834409757 a=pan,b=zee,i=9914,x=0.9240645650332355,y=0.8621654329742796 a=eks,b=zee,i=9915,x=0.6616625895734575,y=0.14135816098909115 a=wye,b=pan,i=9916,x=0.3042515765931557,y=0.37717959119403555 a=hat,b=zee,i=9917,x=0.9463027359513574,y=0.20816847808308991 a=pan,b=zee,i=9918,x=0.062017678365430595,y=0.11198470904331581 a=zee,b=wye,i=9919,x=0.5748726266575598,y=0.3779573684358648 a=hat,b=wye,i=9920,x=0.3438737626946553,y=0.5489498676687791 a=wye,b=wye,i=9921,x=0.6906719134435684,y=0.8555178209462388 a=hat,b=wye,i=9922,x=0.9728689411167353,y=0.8157055538148639 a=wye,b=hat,i=9923,x=0.20975092024121644,y=0.6588638151332867 a=hat,b=pan,i=9924,x=0.3254178263556141,y=0.9839978841946503 a=eks,b=hat,i=9925,x=0.7275202634311879,y=0.2129559326323187 a=hat,b=eks,i=9926,x=0.1541309399763774,y=0.3791445762682304 a=wye,b=pan,i=9927,x=0.8783682319990223,y=0.6933957357140185 a=eks,b=eks,i=9928,x=0.09936486720481041,y=0.8907110968753766 a=eks,b=pan,i=9929,x=0.5193758781368972,y=0.409871414549149 a=pan,b=hat,i=9930,x=0.5677825974360403,y=0.4567634115934158 a=hat,b=hat,i=9931,x=0.22344053593327007,y=0.3136460886229182 a=eks,b=wye,i=9932,x=0.7744014553941428,y=0.318908757325456 a=zee,b=zee,i=9933,x=0.5227775810997735,y=0.10751874257421012 a=hat,b=hat,i=9934,x=0.20145807804290206,y=0.41891252140867674 a=wye,b=hat,i=9935,x=0.25910371069218296,y=0.6568892395017885 a=eks,b=hat,i=9936,x=0.7556816893135765,y=0.7737786856558144 a=pan,b=zee,i=9937,x=0.5546876661250906,y=0.403008800918636 a=eks,b=wye,i=9938,x=0.5330080701180497,y=0.22709767551835436 a=hat,b=wye,i=9939,x=0.208097253807903,y=0.11669571201990991 a=hat,b=wye,i=9940,x=0.8460880203022336,y=0.8184128241834582 a=pan,b=hat,i=9941,x=0.5525707759822344,y=0.2904413914902232 a=pan,b=eks,i=9942,x=0.5757720306595114,y=0.008223444000978186 a=zee,b=wye,i=9943,x=0.4913245348903704,y=0.25864014284309744 a=hat,b=pan,i=9944,x=0.09459751273648653,y=0.9299307121234656 a=zee,b=pan,i=9945,x=0.44635620401009446,y=0.5129261056747197 a=zee,b=zee,i=9946,x=0.13202631656529729,y=0.021604794833400942 a=pan,b=hat,i=9947,x=0.8783008100979538,y=0.6172168477305974 a=pan,b=eks,i=9948,x=0.6047433842453397,y=0.53470873199638 a=pan,b=pan,i=9949,x=0.12278928201439199,y=0.3424112106292362 a=hat,b=hat,i=9950,x=0.8421815876690498,y=0.04784842315950366 a=hat,b=eks,i=9951,x=0.23150439446451176,y=0.362011464774759 a=hat,b=zee,i=9952,x=0.187055253929304,y=0.7872831108348827 a=pan,b=eks,i=9953,x=0.9690028290247679,y=0.5626274346583657 a=eks,b=pan,i=9954,x=0.703550423241368,y=0.8640890526817995 a=wye,b=wye,i=9955,x=0.1708681258811735,y=0.5385038134896668 a=wye,b=zee,i=9956,x=0.3732949851683247,y=0.9189853496560824 a=wye,b=hat,i=9957,x=0.6466417304468489,y=0.4955279123282218 a=pan,b=hat,i=9958,x=0.8447936799573535,y=0.45561414780776455 a=pan,b=wye,i=9959,x=0.5523199497193726,y=0.844808439474632 a=wye,b=hat,i=9960,x=0.1339766165243773,y=0.90209906677784 a=eks,b=pan,i=9961,x=0.0018643836079239584,y=0.22214207434571398 a=hat,b=wye,i=9962,x=0.27668665603289977,y=0.8949840037944731 a=wye,b=eks,i=9963,x=0.7660038618991021,y=0.0724322389595311 a=zee,b=wye,i=9964,x=0.14503471143188695,y=0.6572300809799787 a=eks,b=hat,i=9965,x=0.45140832054850244,y=0.4872441473665683 a=hat,b=zee,i=9966,x=0.09915562191171134,y=0.19911839331011605 a=eks,b=wye,i=9967,x=0.9705821420611176,y=0.1682630903706045 a=pan,b=wye,i=9968,x=0.3049598321025262,y=0.8146693779796157 a=pan,b=pan,i=9969,x=0.4470842181156869,y=0.8188080614674343 a=hat,b=zee,i=9970,x=0.7615491651523039,y=0.3309208743280688 a=eks,b=hat,i=9971,x=0.16013813822306744,y=0.18970582735969377 a=hat,b=wye,i=9972,x=0.01092212097676093,y=0.19287438329005957 a=eks,b=hat,i=9973,x=0.9278177925083565,y=0.14699304090594456 a=hat,b=wye,i=9974,x=0.34339938249336444,y=0.6938846096026958 a=zee,b=eks,i=9975,x=0.14164773949664755,y=0.16897907378815158 a=hat,b=eks,i=9976,x=0.9051959081404853,y=0.3084507684845691 a=eks,b=zee,i=9977,x=0.4549080098494652,y=0.2027740955809184 a=pan,b=hat,i=9978,x=0.18068678390966952,y=0.24718291910572177 a=wye,b=hat,i=9979,x=0.48039589777666136,y=0.8099902771432259 a=pan,b=wye,i=9980,x=0.029289120404769053,y=0.5923039290360491 a=eks,b=pan,i=9981,x=0.2544586487901952,y=0.4578886296197162 a=wye,b=eks,i=9982,x=0.34998222187670314,y=0.3061867938018288 a=wye,b=hat,i=9983,x=0.4640332038264391,y=0.019243858556094673 a=pan,b=hat,i=9984,x=0.48914378417931326,y=0.36728976081695264 a=hat,b=zee,i=9985,x=0.5155567078470872,y=0.6010598365861822 a=hat,b=wye,i=9986,x=0.687016150489404,y=0.14515901345978532 a=hat,b=hat,i=9987,x=0.429284826906265,y=0.1787642439603777 a=zee,b=zee,i=9988,x=0.16947406856911285,y=0.6350945353981919 a=wye,b=eks,i=9989,x=0.8561772298898314,y=0.6874185671784931 a=eks,b=pan,i=9990,x=0.06739304569008775,y=0.2341964277411741 a=hat,b=wye,i=9991,x=0.3633322891461138,y=0.12892395206278184 a=wye,b=zee,i=9992,x=0.348286564151128,y=0.9559121889830311 a=eks,b=eks,i=9993,x=0.8231194474452225,y=0.08896471922413896 a=pan,b=pan,i=9994,x=0.7310844732875349,y=0.16823055115657648 a=pan,b=eks,i=9995,x=0.8981803676290844,y=0.34464277045717084 a=zee,b=wye,i=9996,x=0.72761807629368,y=0.6860394313092489 a=pan,b=hat,i=9997,x=0.700242583670093,y=0.27129926260336745 a=eks,b=pan,i=9998,x=0.5554835956450555,y=0.7053505857791378 a=wye,b=pan,i=9999,x=0.19004481082030356,y=0.8073900575802198 a=zee,b=pan,i=10000,x=0.02349941792343435,y=0.19861196418373683 miller-5.6.2/doc/data/medium-squares000066400000000000000000011264201354153536500173720ustar00rootroot00000000000000a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 a=pan,b=pan,i=11,x=0.7930488423451967,y=0.6505816637259333 a=zee,b=pan,i=12,x=0.3676141320555616,y=0.23614420670296965 a=eks,b=pan,i=15,x=0.07155556372719507,y=0.3596137145616235 a=pan,b=pan,i=16,x=0.5736853980681922,y=0.7554169353781729 a=zee,b=eks,i=17,x=0.29081949506712723,y=0.054478717073354166 a=hat,b=zee,i=18,x=0.05727869223575699,y=0.13343527626645157 a=eks,b=wye,i=20,x=0.38245149780530685,y=0.4730652428100751 a=hat,b=eks,i=21,x=0.0023058336158985338,y=0.16665492414949412 a=zee,b=wye,i=22,x=0.9270813051677103,y=0.5523236165919244 a=wye,b=pan,i=23,x=0.7975862089313748,y=0.8430307846116346 a=pan,b=eks,i=25,x=0.291444729043585,y=0.2680100577363237 a=eks,b=eks,i=26,x=0.7433678407354926,y=0.8295062256195103 a=wye,b=wye,i=27,x=0.9439687243972539,y=0.9305553444632164 a=eks,b=eks,i=29,x=0.05713488327208227,y=0.45012758797367913 a=zee,b=pan,i=30,x=0.7514525581952406,y=0.5869901584461873 a=eks,b=pan,i=31,x=0.5701563454882129,y=0.822178550628332 a=hat,b=pan,i=33,x=0.09303747345405,y=0.18404048980291832 a=hat,b=wye,i=34,x=0.49061881414751796,y=0.4721354893261027 a=zee,b=zee,i=35,x=0.12565828887119346,y=0.1936186210637818 a=pan,b=hat,i=36,x=0.9436794292675323,y=0.9111218711707734 a=pan,b=hat,i=40,x=0.30302850095892986,y=0.2884018711352886 a=pan,b=hat,i=41,x=0.08143769954761992,y=0.030906489980379925 a=zee,b=eks,i=43,x=0.8456728393970536,y=0.8501991168644704 a=pan,b=zee,i=44,x=0.8980511441946196,y=0.6728135588610029 a=pan,b=eks,i=45,x=0.6247151870956413,y=0.8275695927895051 a=pan,b=wye,i=46,x=0.08834857197997548,y=0.4444202016249801 a=eks,b=zee,i=47,x=0.4544511154182116,y=0.22787905378091933 a=wye,b=wye,i=49,x=0.21920222273431333,y=0.18979580426582043 a=wye,b=hat,i=50,x=0.4942114498754957,y=0.35138166631352374 a=hat,b=pan,i=51,x=0.744071908772339,y=0.9166693426799131 a=eks,b=eks,i=53,x=0.9985342548358704,y=0.9590495928336531 a=zee,b=eks,i=54,x=0.9314828033134765,y=0.8687851184407838 a=hat,b=wye,i=55,x=0.07268958233806955,y=0.49851026308988333 a=pan,b=zee,i=56,x=0.06982762802945175,y=0.033405940208281026 a=wye,b=pan,i=57,x=0.7302705254635534,y=0.7851652600343977 a=hat,b=hat,i=59,x=0.23821881669710454,y=0.2495882683265671 a=zee,b=eks,i=62,x=0.6925670766279615,y=0.6309283897492339 a=wye,b=wye,i=63,x=0.3034237022482048,y=0.4570355951663545 a=pan,b=hat,i=65,x=0.9374806227235818,y=0.5142245475995557 a=hat,b=hat,i=66,x=0.8467681996061774,y=0.7322484476601094 a=zee,b=hat,i=67,x=0.2584112989773649,y=0.4004276976232398 a=hat,b=wye,i=68,x=0.3362076167096233,y=0.10257516543234868 a=eks,b=wye,i=72,x=0.5981608655833305,y=0.6748831518079305 a=eks,b=eks,i=74,x=0.47929526118952226,y=0.04122489928296569 a=zee,b=eks,i=76,x=0.48749884261245857,y=0.4733893888865026 a=pan,b=eks,i=78,x=0.8066566257701527,y=0.5756861577587412 a=hat,b=eks,i=79,x=0.36764688836079906,y=0.3891921555248843 a=zee,b=zee,i=80,x=0.8318990957979263,y=0.9881725534495532 a=hat,b=wye,i=81,x=0.17534099646455403,y=0.2603138043676684 a=pan,b=eks,i=82,x=0.16030863176622356,y=0.3818559883741389 a=eks,b=eks,i=83,x=0.12617292637489663,y=0.2322389628774958 a=hat,b=wye,i=84,x=0.6438639100413308,y=0.7352455517915716 a=wye,b=wye,i=85,x=0.4632506196324333,y=0.47736149585488863 a=wye,b=hat,i=86,x=0.040744707036128314,y=0.03301111174849969 a=wye,b=hat,i=87,x=0.6505610031501867,y=0.8780409741829391 a=hat,b=eks,i=88,x=0.4467819157449152,y=0.25053527761538363 a=wye,b=hat,i=90,x=0.47950389571017593,y=0.42674583688195655 a=pan,b=pan,i=91,x=0.9831553489472493,y=0.8956966539093748 a=wye,b=hat,i=93,x=0.5870769045363674,y=0.9424742244710793 a=wye,b=hat,i=96,x=0.6981858011144773,y=0.7500496060047478 a=zee,b=zee,i=99,x=0.9317555381388605,y=0.7821791090489817 a=pan,b=hat,i=101,x=0.8551893009031044,y=0.5817332905396572 a=hat,b=zee,i=102,x=0.6981668049063121,y=0.7047537152787725 a=pan,b=pan,i=107,x=0.04969073649124267,y=0.3496530999805786 a=hat,b=zee,i=109,x=0.6352241884717337,y=0.5627539222500982 a=pan,b=hat,i=111,x=0.9154288048749503,y=0.6519249542119475 a=wye,b=zee,i=113,x=0.3320543853278368,y=0.30390890533333614 a=eks,b=eks,i=116,x=0.6525970433533309,y=0.6038254664200311 a=wye,b=hat,i=120,x=0.7615397120903524,y=0.9797450222382247 a=pan,b=pan,i=121,x=0.613826139364826,y=0.9594055166987485 a=eks,b=wye,i=122,x=0.38075252326113784,y=0.015438488067683442 a=eks,b=zee,i=124,x=0.5720422015264689,y=0.5847353398497057 a=pan,b=zee,i=126,x=0.1495175173899136,y=0.37751439353621485 a=zee,b=hat,i=128,x=0.4962404023217607,y=0.3377314781015287 a=eks,b=zee,i=130,x=0.8191166461936853,y=0.6036827248166735 a=hat,b=hat,i=133,x=0.10275440550496173,y=0.24475094001022435 a=hat,b=hat,i=135,x=0.6950203918361871,y=0.6680826428134803 a=pan,b=pan,i=136,x=0.10793035048973287,y=0.26815648351708954 a=pan,b=hat,i=141,x=0.2240396548356538,y=0.2500739139538637 a=zee,b=eks,i=142,x=0.7814387149488571,y=0.5062129648989182 a=pan,b=eks,i=143,x=0.7772439867698123,y=0.970133177930633 a=hat,b=wye,i=146,x=0.7557462730554149,y=0.8354966950279341 a=wye,b=wye,i=147,x=0.19573082452335644,y=0.16675321752165628 a=hat,b=eks,i=148,x=0.6206402300915382,y=0.821425348018401 a=pan,b=pan,i=149,x=0.2983431833827429,y=0.49328391364637114 a=eks,b=zee,i=152,x=0.39677449578160984,y=0.01242383070673192 a=pan,b=eks,i=153,x=0.3403054358911233,y=0.20856161342555235 a=wye,b=wye,i=154,x=0.7473556150405872,y=0.5878222144661077 a=pan,b=wye,i=155,x=0.8308266904064261,y=0.6160102482290218 a=hat,b=zee,i=156,x=0.06969918779892115,y=0.12332013609343595 a=zee,b=zee,i=157,x=0.08770785920874291,y=0.1694018877034732 a=hat,b=wye,i=158,x=0.5750041834429883,y=0.8988889437381339 a=zee,b=hat,i=159,x=0.3949341964723728,y=0.21461635038581106 a=hat,b=zee,i=161,x=0.241833257737751,y=0.2595728278064434 a=zee,b=zee,i=162,x=0.30865469474514673,y=0.04807979540420082 a=eks,b=hat,i=164,x=0.24635677428468206,y=0.026325305117816278 a=eks,b=wye,i=167,x=0.4655842156857275,y=0.37721410941530287 a=wye,b=pan,i=173,x=0.15061916413672838,y=0.399506367745217 a=zee,b=pan,i=175,x=0.3493963468867093,y=0.2448706490036231 a=hat,b=hat,i=176,x=0.5951138587106596,y=0.851049910114082 a=hat,b=wye,i=177,x=0.39004663496677305,y=0.2404193708137553 a=hat,b=wye,i=180,x=0.0983048320526585,y=0.3605050602699248 a=hat,b=eks,i=181,x=0.06881556874834038,y=0.02776354780439838 a=eks,b=zee,i=182,x=0.8795883767333226,y=0.7913268326625821 a=eks,b=wye,i=188,x=0.7195019639137887,y=0.6101293217348989 a=pan,b=eks,i=189,x=0.48651849518653256,y=0.3310583783958194 a=pan,b=wye,i=192,x=0.7721928274839366,y=0.730996300378133 a=eks,b=eks,i=194,x=0.6636241298839136,y=0.5259126321800084 a=pan,b=hat,i=195,x=0.6642514282295026,y=0.9448672883012781 a=wye,b=wye,i=197,x=0.07466320732554754,y=0.1470636187800869 a=eks,b=hat,i=198,x=0.04736012928828348,y=0.09632719090688924 a=zee,b=hat,i=199,x=0.07495669138561056,y=0.0033556400316512303 a=eks,b=pan,i=200,x=0.25160946724271127,y=0.3153026554896944 a=wye,b=eks,i=204,x=0.0866873459163141,y=0.08597589292509311 a=hat,b=wye,i=206,x=0.9712065807938725,y=0.8814161529894458 a=wye,b=eks,i=208,x=0.638370131847482,y=0.6031891659074958 a=hat,b=eks,i=209,x=0.08722321261724375,y=0.1699175655988554 a=pan,b=zee,i=213,x=0.910694728148218,y=0.538005658230806 a=pan,b=zee,i=215,x=0.8250379925053151,y=0.7418087278106543 a=wye,b=eks,i=220,x=0.9707941416650918,y=0.5446983207141396 a=hat,b=eks,i=221,x=0.9623773206695981,y=0.7961697529692682 a=wye,b=eks,i=223,x=0.7008326115259359,y=0.8171891486894675 a=eks,b=zee,i=225,x=0.2567945604892924,y=0.24424154648770224 a=hat,b=zee,i=228,x=0.6353440745576056,y=0.8565317288607986 a=wye,b=hat,i=229,x=0.5097848345332788,y=0.8249641724859278 a=eks,b=wye,i=232,x=0.5507351778417637,y=0.7118263982857057 a=hat,b=hat,i=233,x=0.2131489206395062,y=0.08647965840929162 a=eks,b=hat,i=236,x=0.06364189456177682,y=0.4949298511378918 a=pan,b=pan,i=238,x=0.1802663344712152,y=0.40747996818620213 a=wye,b=eks,i=240,x=0.11369718773090787,y=0.4362931656865052 a=pan,b=hat,i=241,x=0.5298443076284122,y=0.7286240415109126 a=hat,b=hat,i=242,x=0.17197294875303992,y=0.42960373892313586 a=hat,b=wye,i=243,x=0.40008739772830226,y=0.3431833719273334 a=wye,b=eks,i=244,x=0.047932173034763714,y=0.15974685050052528 a=hat,b=wye,i=248,x=0.8794750860292233,y=0.9633187985176084 a=zee,b=wye,i=250,x=0.18225031260376368,y=0.42639010352161133 a=eks,b=eks,i=251,x=0.6366142860676015,y=0.7279525837465141 a=eks,b=pan,i=252,x=0.7489029711796827,y=0.6216975230273389 a=zee,b=pan,i=253,x=0.2896285025325088,y=0.4107984626977105 a=wye,b=pan,i=254,x=0.40783269275640843,y=0.07873948964651878 a=pan,b=pan,i=255,x=0.4310139640663371,y=0.133668391263563 a=zee,b=wye,i=259,x=0.6485993255572561,y=0.9239849074696734 a=pan,b=hat,i=260,x=0.7786431758578792,y=0.9906513397624532 a=pan,b=pan,i=263,x=0.735966834511216,y=0.8642501328542477 a=pan,b=pan,i=264,x=0.0365319279313181,y=0.01547685459691761 a=pan,b=hat,i=267,x=0.8759426552130376,y=0.8128071892594659 a=wye,b=zee,i=268,x=0.334247707070338,y=0.07108295911604934 a=pan,b=zee,i=271,x=0.38241767385691083,y=0.47652036205919546 a=zee,b=eks,i=272,x=0.5076219094472946,y=0.8598422972471865 a=eks,b=pan,i=274,x=0.5094754996388772,y=0.8630831763542761 a=pan,b=pan,i=275,x=0.0702163840810267,y=0.49744457340186665 a=zee,b=eks,i=276,x=0.7494501132627315,y=0.831480047566556 a=hat,b=eks,i=277,x=0.9160765564583604,y=0.9665017202156387 a=eks,b=wye,i=278,x=0.3405469715018894,y=0.39395981360241694 a=wye,b=eks,i=283,x=0.3857770915059473,y=0.2520288213780115 a=hat,b=hat,i=285,x=0.5231416402386272,y=0.8268208737366626 a=hat,b=wye,i=292,x=0.7857064933058493,y=0.5074038206162027 a=hat,b=zee,i=294,x=0.3704436769585995,y=0.3120229742987346 a=eks,b=wye,i=297,x=0.15536712579543976,y=0.24068588834787485 a=pan,b=hat,i=300,x=0.7146992829593928,y=0.5429822061061883 a=wye,b=pan,i=305,x=0.5103104415224277,y=0.6005096012353242 a=wye,b=eks,i=307,x=0.6064616942445623,y=0.565814763986132 a=hat,b=eks,i=308,x=0.40085643331635357,y=0.09395240921387538 a=eks,b=eks,i=311,x=0.09369987234653387,y=0.06802932452953492 a=wye,b=zee,i=312,x=0.07612086875946633,y=0.27326136662066614 a=hat,b=zee,i=315,x=0.34523405773089744,y=0.4354275687352226 a=zee,b=hat,i=316,x=0.13504220690406277,y=0.3795391182446578 a=eks,b=pan,i=317,x=0.46957588924343485,y=0.3400251823752689 a=wye,b=hat,i=318,x=0.18637343210075064,y=0.45983893886751714 a=pan,b=zee,i=319,x=0.16606734288775093,y=0.21473289889901537 a=zee,b=pan,i=320,x=0.8307425029665492,y=0.9687981266665243 a=zee,b=zee,i=321,x=0.6999788077300872,y=0.526382289897085 a=wye,b=zee,i=323,x=0.7167871674039571,y=0.8146661281584913 a=wye,b=wye,i=324,x=0.22862799493809793,y=0.45776956542633673 a=zee,b=zee,i=327,x=0.1254581943608959,y=0.01871101782750706 a=eks,b=pan,i=328,x=0.28146620713469994,y=0.45414955407945334 a=pan,b=eks,i=329,x=0.03763317797683374,y=0.2401750869051401 a=eks,b=hat,i=333,x=0.0677128764291699,y=0.13888954761924865 a=hat,b=hat,i=334,x=0.8122872254151258,y=0.9343598605592562 a=wye,b=wye,i=335,x=0.3136448355146325,y=0.3030034178002945 a=wye,b=eks,i=336,x=0.3723857599541325,y=0.12311828419230408 a=wye,b=eks,i=337,x=0.8517094711110174,y=0.7107950535254092 a=hat,b=wye,i=338,x=0.29886440908142087,y=0.44199727275540557 a=eks,b=zee,i=339,x=0.4583899635695151,y=0.06228530919187403 a=wye,b=eks,i=340,x=0.23528308849163693,y=0.3882734087125834 a=pan,b=eks,i=342,x=0.23702739214960689,y=0.13214761320752622 a=pan,b=wye,i=343,x=0.2724033449540535,y=0.45196387793887527 a=eks,b=hat,i=344,x=0.6604478311777118,y=0.8554572649437313 a=eks,b=eks,i=346,x=0.4314505110520016,y=0.35990136288181707 a=pan,b=eks,i=350,x=0.7749620340665812,y=0.6934753745173732 a=eks,b=eks,i=352,x=0.8908223033829336,y=0.756634722087033 a=wye,b=wye,i=353,x=0.3561234723336817,y=0.25848510016885773 a=wye,b=zee,i=354,x=0.07167250764974309,y=0.04755739805455228 a=eks,b=pan,i=355,x=0.6260379271888249,y=0.9999648102177897 a=wye,b=eks,i=356,x=0.9105767596182323,y=0.6275830055247574 a=wye,b=pan,i=359,x=0.46013788462671257,y=0.07923543496739904 a=eks,b=hat,i=362,x=0.9858910807074641,y=0.6063471357443468 a=hat,b=zee,i=369,x=0.18008064179308536,y=0.31358866392662854 a=hat,b=wye,i=371,x=0.48451798820346725,y=0.08468945923087656 a=wye,b=hat,i=373,x=0.9062681519121573,y=0.6942343130437282 a=wye,b=pan,i=376,x=0.9148906431225965,y=0.6865707031323998 a=hat,b=wye,i=379,x=0.723368325539696,y=0.9239506513259356 a=pan,b=wye,i=382,x=0.10290553602186514,y=0.15037258795056763 a=pan,b=zee,i=384,x=0.5491251090567257,y=0.9145935172366898 a=wye,b=eks,i=388,x=0.5468979682673912,y=0.5716892746572024 a=wye,b=pan,i=389,x=0.8711354046280742,y=0.7000550458179466 a=pan,b=zee,i=390,x=0.32965901763834493,y=0.4764401595448211 a=zee,b=eks,i=393,x=0.6953842859899757,y=0.9546625350220701 a=wye,b=eks,i=395,x=0.5496441289397975,y=0.9130998398573059 a=pan,b=eks,i=396,x=0.12088261778903142,y=0.2915014516366682 a=pan,b=pan,i=397,x=0.6527193676882986,y=0.5140617542371629 a=eks,b=eks,i=399,x=0.010510711223853386,y=0.08397157710064007 a=eks,b=pan,i=401,x=0.08749968996168989,y=0.3703456609602497 a=zee,b=hat,i=403,x=0.8371422088541587,y=0.9376680469763548 a=wye,b=wye,i=405,x=0.5955452707872064,y=0.5663276615611866 a=hat,b=wye,i=406,x=0.3016062899704931,y=0.1481359817881971 a=zee,b=hat,i=408,x=0.13829592936600588,y=0.4643427499672679 a=zee,b=hat,i=412,x=0.5684534581822444,y=0.7576411674301173 a=wye,b=pan,i=416,x=0.8898988612865336,y=0.8930372261944983 a=zee,b=zee,i=418,x=0.36259161480392366,y=0.03106838412360613 a=zee,b=eks,i=419,x=0.9669197256156522,y=0.9525495700296412 a=zee,b=hat,i=420,x=0.2472176643017414,y=0.4766709326963189 a=hat,b=pan,i=421,x=0.5484055610018505,y=0.7401624563813598 a=wye,b=eks,i=422,x=0.9843960933372673,y=0.8274060260108933 a=pan,b=pan,i=423,x=0.08736573145179394,y=0.47080422361654306 a=pan,b=hat,i=424,x=0.41967399152692275,y=0.11281967088191636 a=eks,b=zee,i=425,x=0.1541100762311376,y=0.2899666127124777 a=pan,b=wye,i=427,x=0.42286545073700454,y=0.4861336428493519 a=eks,b=zee,i=429,x=0.10194433521396717,y=0.20006319684657992 a=eks,b=wye,i=430,x=0.5857626187839062,y=0.5321382987939495 a=zee,b=eks,i=431,x=0.8583324116859721,y=0.994808666622831 a=eks,b=eks,i=432,x=0.7853965492176864,y=0.9164907493679918 a=eks,b=eks,i=436,x=0.6933382044724179,y=0.6338292052517879 a=wye,b=pan,i=437,x=0.37712852260119445,y=0.2533800875229283 a=pan,b=eks,i=442,x=0.3051229752913909,y=0.3927572304818523 a=hat,b=pan,i=445,x=0.693707602798371,y=0.9355332457358334 a=zee,b=wye,i=449,x=0.8505833795792004,y=0.9244534714701724 a=eks,b=wye,i=450,x=0.6844926010909408,y=0.614368249300009 a=hat,b=wye,i=453,x=4.509679127584487e-05,y=0.22031599198733764 a=zee,b=zee,i=458,x=0.4844711931621539,y=0.27495542782645344 a=eks,b=eks,i=459,x=0.3611062645335037,y=0.40226115300495247 a=pan,b=eks,i=460,x=0.8223780119629852,y=0.9126194557839794 a=hat,b=wye,i=466,x=0.4276402941162851,y=0.029924580250603294 a=eks,b=eks,i=469,x=0.12954404025896205,y=0.13771358880489826 a=zee,b=hat,i=472,x=0.5201558372951883,y=0.5500922568519445 a=pan,b=zee,i=473,x=0.28235480114669276,y=0.01789197833877909 a=hat,b=zee,i=474,x=0.9737504172221616,y=0.5620581498765591 a=eks,b=eks,i=477,x=0.034584510761659026,y=0.43469127809305075 a=eks,b=hat,i=479,x=0.935311382854882,y=0.5581569700476232 a=pan,b=eks,i=480,x=0.6265973838424406,y=0.7055055050235215 a=hat,b=pan,i=481,x=0.0821695972704326,y=0.35414544375322354 a=wye,b=hat,i=483,x=0.2316003856711063,y=0.43956136357576003 a=eks,b=eks,i=484,x=0.6641863677348001,y=0.6447460873709984 a=wye,b=wye,i=485,x=0.2617661797012584,y=0.42266716043415287 a=wye,b=hat,i=486,x=0.30133537944217137,y=0.10221649013386602 a=hat,b=pan,i=488,x=0.9232269980553737,y=0.6301846340531019 a=zee,b=eks,i=489,x=0.47256613643793366,y=0.043043925407927786 a=wye,b=pan,i=491,x=0.2513964759410543,y=0.029649890186790206 a=eks,b=zee,i=492,x=0.24404562827103082,y=0.21765361298784158 a=hat,b=eks,i=493,x=0.1664695548518379,y=0.24789421681152946 a=wye,b=wye,i=497,x=0.7021621810855977,y=0.533290838271892 a=eks,b=eks,i=498,x=0.7227433480694091,y=0.6862413971745326 a=zee,b=pan,i=500,x=0.9372377490487999,y=0.5618667924767166 a=eks,b=pan,i=501,x=0.040475122297163324,y=0.16567765824398517 a=hat,b=wye,i=502,x=0.6077314844130164,y=0.768942559474086 a=pan,b=pan,i=503,x=0.0738664869271265,y=0.25330608830961776 a=eks,b=wye,i=505,x=0.910806292687196,y=0.9026141937080411 a=pan,b=pan,i=509,x=0.30214111076722505,y=0.004555052573727347 a=zee,b=pan,i=512,x=0.19477333058846336,y=0.2603817709639791 a=hat,b=zee,i=514,x=0.3540200248392754,y=0.2390584570033465 a=hat,b=zee,i=517,x=0.49137770000060343,y=0.35141387324505546 a=hat,b=pan,i=519,x=0.10212966989515981,y=0.16533265211820058 a=eks,b=pan,i=522,x=0.28735731367601225,y=0.01067207233763956 a=zee,b=wye,i=523,x=0.34414490686076227,y=0.26451700279951407 a=zee,b=eks,i=524,x=0.07661268800300436,y=0.336140096726808 a=zee,b=zee,i=525,x=0.2340021990274821,y=0.19565171550317406 a=wye,b=pan,i=527,x=0.23490598090770587,y=0.04525601514058908 a=pan,b=wye,i=529,x=0.25303243992392954,y=0.24620118020872683 a=zee,b=zee,i=530,x=0.8324822558401548,y=0.6988570770856138 a=pan,b=zee,i=533,x=0.7751095714402214,y=0.5255361584302058 a=eks,b=zee,i=535,x=0.918189166469818,y=0.9631682259880161 a=eks,b=eks,i=538,x=0.6478937309967303,y=0.8641203708540487 a=hat,b=pan,i=540,x=0.7444966092534115,y=0.8005631784590818 a=eks,b=pan,i=545,x=0.6594595904219487,y=0.9953938324572855 a=pan,b=pan,i=546,x=0.6157989578235565,y=0.5516616028345289 a=zee,b=zee,i=548,x=0.9236546276965072,y=0.7185917789599708 a=zee,b=hat,i=549,x=0.10683412342384302,y=0.3609954494938745 a=zee,b=zee,i=550,x=0.442695858154603,y=0.2279810907065235 a=hat,b=pan,i=556,x=0.6486062750649167,y=0.7897824130903452 a=zee,b=pan,i=557,x=0.1878359832100659,y=0.36569848741631705 a=pan,b=wye,i=561,x=0.23019585224736527,y=0.33146344086760515 a=wye,b=zee,i=562,x=0.9090864712373032,y=0.6795157215425431 a=wye,b=hat,i=566,x=0.5358639536626888,y=0.7343387003323596 a=eks,b=pan,i=568,x=0.9357934717739306,y=0.5799507923614251 a=wye,b=wye,i=569,x=0.7665973069675542,y=0.7195592313665612 a=pan,b=wye,i=575,x=0.21812558940117743,y=0.3918449054425934 a=hat,b=wye,i=576,x=0.9187805829729324,y=0.7265918618789776 a=eks,b=eks,i=577,x=0.6757641755808136,y=0.8438941757795644 a=zee,b=zee,i=581,x=0.03169831018517821,y=0.26542940289146955 a=hat,b=eks,i=582,x=0.15837738839177617,y=0.04767102936713474 a=hat,b=zee,i=585,x=0.6805895701299852,y=0.9163445111607751 a=pan,b=wye,i=589,x=0.8045092117185423,y=0.9810352594851226 a=eks,b=hat,i=590,x=0.17485208172241573,y=0.10386578574214755 a=hat,b=wye,i=592,x=0.25971796023192173,y=0.17042472633318229 a=wye,b=pan,i=597,x=0.9041321135345515,y=0.7679179807567709 a=wye,b=hat,i=599,x=0.9310931043540538,y=0.9627637520286313 a=pan,b=zee,i=602,x=0.9884538231531689,y=0.9826428169828403 a=hat,b=pan,i=604,x=0.43188828562650494,y=0.050660555822547026 a=pan,b=zee,i=605,x=0.2529032876659366,y=0.3388959543441078 a=eks,b=eks,i=606,x=0.35689384699612214,y=0.4336296598478725 a=hat,b=wye,i=608,x=0.3631005984856752,y=0.17908512378632557 a=zee,b=eks,i=609,x=0.0885240972512874,y=0.11687754329610434 a=eks,b=wye,i=610,x=0.976870279166798,y=0.979024408220298 a=hat,b=eks,i=611,x=0.22058278727333458,y=0.23176980505367228 a=pan,b=pan,i=612,x=0.5001009219306088,y=0.844066356281099 a=pan,b=eks,i=614,x=0.3108839226386939,y=0.3561979428678962 a=wye,b=eks,i=615,x=0.30764905368295004,y=0.3507626708329916 a=wye,b=eks,i=617,x=0.2660764665919485,y=0.145799475554256 a=eks,b=eks,i=618,x=0.697318049680538,y=0.8904258470184732 a=pan,b=pan,i=625,x=0.6915515843242978,y=0.6178010854014475 a=wye,b=wye,i=629,x=0.0503400168303868,y=0.10527602332963393 a=hat,b=wye,i=632,x=0.5674934046837635,y=0.8372958944262796 a=eks,b=wye,i=637,x=0.10597293490004256,y=0.20904153809081627 a=pan,b=wye,i=640,x=0.5760120638145232,y=0.6662486414541403 a=hat,b=zee,i=644,x=0.9789858624275163,y=0.6867108424306388 a=eks,b=pan,i=645,x=0.28589757090653023,y=0.2874816869622683 a=pan,b=zee,i=646,x=0.03971681746631206,y=0.11488578458241061 a=pan,b=hat,i=648,x=0.6975350070264588,y=0.5434923294790459 a=wye,b=pan,i=649,x=0.017833700431765576,y=0.28497950273429307 a=wye,b=pan,i=650,x=0.8995516713685614,y=0.9709755173196244 a=zee,b=pan,i=652,x=0.774338764727154,y=0.7866779831902309 a=pan,b=zee,i=653,x=0.598251646829306,y=0.798568072477333 a=eks,b=zee,i=656,x=0.7342238031294267,y=0.6344399868216409 a=eks,b=eks,i=657,x=0.9526997294869483,y=0.6231118783065456 a=zee,b=pan,i=660,x=0.3829079054237686,y=0.46767052095812467 a=eks,b=eks,i=667,x=0.656573731471621,y=0.902119091388546 a=wye,b=pan,i=668,x=0.04920210066939823,y=0.23851670466645347 a=wye,b=wye,i=672,x=0.7648029293390511,y=0.6650048997400388 a=zee,b=zee,i=675,x=0.14647630359578723,y=0.2444767037770159 a=wye,b=hat,i=676,x=0.6451848990883488,y=0.5038417150477158 a=wye,b=zee,i=682,x=0.7810987533825186,y=0.9667043995307188 a=hat,b=eks,i=684,x=0.3749971755428878,y=0.21431876719781595 a=hat,b=eks,i=686,x=0.21050937771050438,y=0.41045403895167065 a=eks,b=zee,i=691,x=0.7240287030381926,y=0.79896437710086 a=hat,b=hat,i=692,x=0.14117333894379847,y=0.3225535116195155 a=zee,b=eks,i=693,x=0.27068880582424437,y=0.044369525310762326 a=hat,b=zee,i=696,x=0.16963322576469086,y=0.09487337662478568 a=hat,b=eks,i=697,x=0.8909103010365073,y=0.5323201554130181 a=zee,b=hat,i=703,x=0.2248043259303365,y=0.33203303056970623 a=pan,b=eks,i=705,x=0.7388154708435315,y=0.797179757859978 a=pan,b=wye,i=706,x=0.5008032407057831,y=0.9591889291114695 a=pan,b=eks,i=707,x=0.9759907833320285,y=0.8936617707540555 a=hat,b=zee,i=709,x=0.5664816823643944,y=0.8967488777240636 a=wye,b=zee,i=710,x=0.8443019828048438,y=0.7860920608434899 a=hat,b=eks,i=711,x=0.6493317768253313,y=0.6921590557236297 a=pan,b=wye,i=714,x=0.1707903602306352,y=0.1624539753347971 a=wye,b=hat,i=717,x=0.9126869246167464,y=0.8539144029222125 a=wye,b=zee,i=719,x=0.8648654985592689,y=0.744990377385103 a=wye,b=eks,i=720,x=0.0737982261184581,y=0.215040061968929 a=eks,b=hat,i=723,x=0.5223004827368406,y=0.7436988563433049 a=pan,b=zee,i=724,x=0.161391991386723,y=0.4896835486539596 a=zee,b=zee,i=725,x=0.6421372014622713,y=0.9769320758361035 a=hat,b=hat,i=726,x=0.6769964245482417,y=0.6143975572853417 a=zee,b=pan,i=728,x=0.40960942207244977,y=0.4243129116901595 a=wye,b=zee,i=733,x=0.842462695985326,y=0.966657486505284 a=pan,b=wye,i=734,x=0.01934339909570837,y=0.05189496476807132 a=eks,b=wye,i=735,x=0.9417156459424341,y=0.9870712135656121 a=wye,b=pan,i=737,x=0.16300656842731953,y=0.3545653890588314 a=eks,b=zee,i=738,x=0.8977243371620829,y=0.5262722450488325 a=hat,b=wye,i=740,x=0.6686093454184745,y=0.6740449093675628 a=zee,b=pan,i=741,x=0.9598570146790528,y=0.6398488862754813 a=pan,b=wye,i=742,x=0.8257519339015849,y=0.693194093940406 a=eks,b=hat,i=743,x=0.04434098258715646,y=0.3266898058988358 a=zee,b=wye,i=744,x=0.7524245915453669,y=0.5461439986683315 a=pan,b=pan,i=745,x=0.6719897687291242,y=0.7565622573163691 a=eks,b=pan,i=746,x=0.916062376572181,y=0.886967557372127 a=wye,b=pan,i=750,x=0.6658476587001316,y=0.5556451189688414 a=wye,b=wye,i=752,x=0.13191473062692816,y=0.19377767709093607 a=zee,b=eks,i=753,x=0.5186702283396277,y=0.5344580097568402 a=pan,b=eks,i=754,x=0.023312954423954868,y=0.13646462067848675 a=eks,b=eks,i=755,x=0.22961935180882087,y=0.16011525129191817 a=pan,b=zee,i=756,x=0.09666705485436378,y=0.3548198552440588 a=eks,b=wye,i=758,x=0.5362262223046377,y=0.5049539834712841 a=eks,b=eks,i=766,x=0.22335745734469326,y=0.21867582342847736 a=eks,b=eks,i=769,x=0.18506419568907773,y=0.4760883565274585 a=wye,b=zee,i=772,x=0.23583751371437855,y=0.12279242944303292 a=hat,b=eks,i=773,x=0.26528801262285184,y=0.4010080804811049 a=wye,b=eks,i=776,x=0.9585382111164209,y=0.6306113838967866 a=zee,b=wye,i=777,x=0.7623811038765134,y=0.6139534724314861 a=zee,b=zee,i=779,x=0.3411759787401816,y=0.2865091416991973 a=hat,b=pan,i=781,x=0.1192837713483601,y=0.40681848859583813 a=zee,b=eks,i=785,x=0.6562657631329122,y=0.8258194011693597 a=eks,b=zee,i=787,x=0.0654097106697118,y=0.4660389375188869 a=pan,b=eks,i=788,x=0.2217685316094703,y=0.16649100910012216 a=eks,b=hat,i=789,x=0.4717662995603106,y=0.44972566215644705 a=wye,b=wye,i=791,x=0.00519908348997844,y=0.3991391178091711 a=hat,b=hat,i=792,x=0.5475862720333128,y=0.9675473146380916 a=zee,b=wye,i=793,x=0.9545515061227288,y=0.8875064703498067 a=wye,b=hat,i=794,x=0.16854110528640676,y=0.23899152324736783 a=eks,b=eks,i=796,x=0.44475337389030567,y=0.3562483351552209 a=hat,b=zee,i=797,x=0.3458790979025249,y=0.10530555367157357 a=wye,b=hat,i=798,x=0.894955252691444,y=0.9020401281837919 a=zee,b=hat,i=799,x=0.6678020932140406,y=0.7272829012287039 a=pan,b=wye,i=800,x=0.6728857720452479,y=0.9063282177143175 a=hat,b=wye,i=802,x=0.6939811641375604,y=0.9772213376028769 a=eks,b=eks,i=805,x=0.7970666568024275,y=0.7141982352996962 a=wye,b=wye,i=809,x=0.779445087567334,y=0.6995188082196249 a=pan,b=eks,i=810,x=0.6751597242266821,y=0.5514064392004425 a=pan,b=pan,i=814,x=0.7042024611472535,y=0.5509286378129169 a=pan,b=eks,i=815,x=0.05860005161315873,y=0.0005735237078376976 a=eks,b=zee,i=816,x=0.11392244176975941,y=0.08027592413428164 a=hat,b=hat,i=817,x=0.2182634028675824,y=0.031522781055713156 a=eks,b=hat,i=820,x=0.6028476657314659,y=0.6800202871943302 a=eks,b=hat,i=822,x=0.2180916247267669,y=0.20200687440786602 a=hat,b=zee,i=823,x=0.4553739759143408,y=0.04377256284181141 a=wye,b=pan,i=825,x=0.6611884797250076,y=0.9588317557532128 a=zee,b=pan,i=826,x=0.2407553754423183,y=0.14438176167139094 a=eks,b=pan,i=830,x=0.36350612065623267,y=0.2886476639992571 a=hat,b=wye,i=832,x=0.7659227499835054,y=0.6521346139410953 a=pan,b=zee,i=833,x=0.8267760334483312,y=0.8318269743977437 a=zee,b=wye,i=836,x=0.5756190775565698,y=0.7938251688467333 a=wye,b=wye,i=837,x=0.2328642613637898,y=0.46278413120375006 a=zee,b=hat,i=840,x=0.6677673890093077,y=0.6533094635586054 a=hat,b=pan,i=841,x=0.4486203012761554,y=0.3566552462496445 a=eks,b=hat,i=842,x=0.4549321247838193,y=0.07592100983285954 a=wye,b=wye,i=843,x=0.255982822267825,y=0.3803102296515556 a=hat,b=wye,i=847,x=0.49389611860028626,y=0.07353689220151671 a=zee,b=pan,i=848,x=0.7169514982586007,y=0.9408480112735236 a=pan,b=eks,i=850,x=0.7274412652107003,y=0.6621932392565703 a=wye,b=eks,i=852,x=0.664738707605857,y=0.7223078050122264 a=eks,b=hat,i=853,x=0.1880170274631281,y=0.10968535421904191 a=hat,b=eks,i=854,x=0.6939278762348635,y=0.5313359369168281 a=hat,b=hat,i=855,x=0.7112683657239158,y=0.6136040745504255 a=zee,b=eks,i=856,x=0.5439786015377756,y=0.9686655026402698 a=zee,b=zee,i=857,x=0.10264607530788517,y=0.3331005309508399 a=pan,b=wye,i=862,x=0.30274837710060487,y=0.015353477159141038 a=wye,b=pan,i=863,x=0.23680176335245073,y=0.23457864754397195 a=zee,b=zee,i=864,x=0.809561039932752,y=0.6017320599557826 a=wye,b=zee,i=865,x=0.7815565737026456,y=0.8572095724845105 a=eks,b=hat,i=866,x=0.5917695655140688,y=0.560162197865116 a=hat,b=zee,i=867,x=0.722695048982041,y=0.8684988555802282 a=pan,b=wye,i=871,x=0.6789169629628927,y=0.5193967453982994 a=pan,b=pan,i=872,x=0.7564798789126915,y=0.7115590422599338 a=pan,b=hat,i=875,x=0.1859774664492485,y=0.3619489833924334 a=wye,b=wye,i=876,x=0.4835086084877356,y=0.4540385079562712 a=wye,b=pan,i=877,x=0.27907367543536465,y=0.12385159649360233 a=eks,b=hat,i=879,x=0.6888483812825917,y=0.5505783461131407 a=hat,b=pan,i=880,x=0.9443559576513696,y=0.776626094540373 a=pan,b=pan,i=882,x=0.439665640988951,y=0.4549660840547012 a=pan,b=hat,i=883,x=0.5540100503192463,y=0.8429668921287791 a=eks,b=wye,i=886,x=0.3652904236362593,y=0.20906833314831175 a=pan,b=pan,i=887,x=0.6949995284041934,y=0.8053235553778822 a=wye,b=wye,i=889,x=0.9080280619248189,y=0.9139513254924729 a=eks,b=pan,i=896,x=0.18020508273454894,y=0.18233459061350799 a=zee,b=pan,i=897,x=0.16948195877360084,y=0.4673040380612351 a=pan,b=zee,i=898,x=0.048671024346735314,y=0.4634456617937973 a=wye,b=zee,i=900,x=0.0634446641763643,y=0.47070339237478154 a=hat,b=pan,i=901,x=0.3948962420926134,y=0.2858499628646297 a=zee,b=hat,i=902,x=0.792376744926382,y=0.7540301970987514 a=pan,b=zee,i=903,x=0.5150758332324689,y=0.8265689553462827 a=eks,b=wye,i=907,x=0.5764461281567995,y=0.6560112583406935 a=hat,b=pan,i=909,x=0.2565065893296261,y=0.3546175861833417 a=pan,b=eks,i=911,x=0.06608607463859384,y=0.07128733055849312 a=hat,b=wye,i=913,x=0.5696196789270859,y=0.5118141918287126 a=eks,b=zee,i=914,x=0.8582285128247622,y=0.7604153187806654 a=wye,b=eks,i=915,x=0.5460355036287519,y=0.8958184949801713 a=hat,b=pan,i=916,x=0.2607796424126346,y=0.2105454483785194 a=wye,b=hat,i=917,x=0.3846528045634492,y=0.3124085567677639 a=hat,b=zee,i=929,x=0.9119484815981432,y=0.9002090722192556 a=pan,b=hat,i=931,x=0.15134527475607873,y=0.348369087467138 a=wye,b=zee,i=933,x=0.3661453331509762,y=0.004152078250187152 a=wye,b=wye,i=934,x=0.447099608509545,y=0.17594771830007339 a=zee,b=eks,i=937,x=0.02003336919176857,y=0.26669570512199325 a=eks,b=wye,i=938,x=0.3043257328168447,y=0.2906418445735329 a=hat,b=wye,i=944,x=0.8822781716699086,y=0.6067074807238132 a=zee,b=pan,i=948,x=0.7984764587459684,y=0.6810243958256237 a=wye,b=hat,i=949,x=0.23478741222352084,y=0.37065868020096504 a=hat,b=wye,i=950,x=0.09950476962568644,y=0.08527686061721151 a=wye,b=zee,i=951,x=0.032452509100876825,y=0.13213830932576387 a=pan,b=pan,i=952,x=0.20155399565096999,y=0.26323541426295427 a=zee,b=hat,i=953,x=0.7258512915506337,y=0.7130469035339413 a=wye,b=zee,i=954,x=0.5189900736412828,y=0.9806684784703058 a=eks,b=wye,i=956,x=0.8483404387366377,y=0.6963230727503091 a=zee,b=hat,i=959,x=0.5401768517178055,y=0.576926299555725 a=eks,b=pan,i=964,x=0.11974210479568592,y=0.1727873170586557 a=wye,b=zee,i=967,x=0.8957509371936184,y=0.6646859799560008 a=wye,b=pan,i=968,x=0.6531533778557712,y=0.8078705982263845 a=pan,b=wye,i=973,x=0.31594050674870533,y=0.3202147086921625 a=pan,b=eks,i=979,x=0.3047140631616194,y=0.012239402814423261 a=pan,b=hat,i=980,x=0.08006366208466742,y=0.46683918475842656 a=zee,b=wye,i=982,x=0.37341981725134477,y=0.043362859112128116 a=eks,b=zee,i=984,x=0.1229552360203735,y=0.4375490388704373 a=eks,b=hat,i=985,x=0.011903992841803879,y=0.20158842970916258 a=zee,b=pan,i=986,x=0.36309769750156073,y=0.41372304201591836 a=zee,b=pan,i=987,x=0.2675153812056569,y=0.31944778253720596 a=zee,b=eks,i=988,x=0.4159116125988659,y=0.0527646250644187 a=hat,b=hat,i=990,x=0.6968268719895765,y=0.7388049214848422 a=wye,b=hat,i=992,x=0.1082025069192426,y=0.382293188133744 a=pan,b=hat,i=993,x=0.9655911362500376,y=0.6528068171940502 a=eks,b=wye,i=999,x=0.7530797661303167,y=0.7943533279150342 a=zee,b=wye,i=1002,x=0.27589217856931847,y=0.4784417775011829 a=wye,b=hat,i=1004,x=0.7556173435575428,y=0.5360056181198413 a=zee,b=wye,i=1007,x=0.6726350502133611,y=0.9779321628810685 a=hat,b=eks,i=1008,x=0.19927285497348735,y=0.22487729305731685 a=hat,b=eks,i=1010,x=0.32802933242359655,y=0.2955845001645365 a=pan,b=zee,i=1014,x=0.2224977060602883,y=0.1335049252959022 a=pan,b=zee,i=1017,x=0.787790582328257,y=0.844311491671081 a=eks,b=pan,i=1020,x=0.902360533880021,y=0.7028811168584178 a=zee,b=wye,i=1021,x=0.008857541583488837,y=0.21509348675167894 a=eks,b=wye,i=1022,x=0.33588773148782947,y=0.40718964301240856 a=zee,b=eks,i=1024,x=0.38754385741774056,y=0.42814516635986044 a=pan,b=eks,i=1025,x=0.19841453521545604,y=0.08811826842406556 a=eks,b=zee,i=1027,x=0.7911574513154387,y=0.7553091091067402 a=wye,b=eks,i=1029,x=0.2129672492537904,y=0.455409159116715 a=pan,b=pan,i=1030,x=0.5408386772361381,y=0.7160509492545313 a=zee,b=pan,i=1032,x=0.8214019848831586,y=0.6593835512799063 a=eks,b=wye,i=1033,x=0.9319773759232135,y=0.8773892832568154 a=eks,b=hat,i=1034,x=0.21608546142882312,y=0.30554114451483116 a=hat,b=hat,i=1035,x=0.09020906616714786,y=0.10290991425754714 a=wye,b=zee,i=1036,x=0.3531778666649932,y=0.2809207717510849 a=hat,b=eks,i=1037,x=0.0945175541677894,y=0.3745112769716772 a=zee,b=pan,i=1038,x=0.5692057342171193,y=0.9606327704233413 a=zee,b=hat,i=1039,x=0.3081554551270379,y=0.4385650169051888 a=pan,b=wye,i=1041,x=0.1485239533830236,y=0.1776854474981574 a=pan,b=eks,i=1043,x=0.9037009385297075,y=0.6127765961736429 a=wye,b=pan,i=1047,x=0.9924515398966479,y=0.8295830268367035 a=zee,b=zee,i=1050,x=0.7931385685414742,y=0.7121487657433946 a=wye,b=zee,i=1054,x=0.08626749693608815,y=0.25205147479956 a=eks,b=eks,i=1055,x=0.7570291652540911,y=0.5426597756349021 a=wye,b=eks,i=1056,x=0.17697196127444081,y=0.48721255903838334 a=pan,b=hat,i=1058,x=0.8522482352165042,y=0.7495559067319948 a=hat,b=pan,i=1059,x=0.2746468542015157,y=0.06589726142698449 a=hat,b=hat,i=1061,x=0.7349337283030247,y=0.8809097022915752 a=zee,b=hat,i=1062,x=0.8802861735497903,y=0.6464219752541935 a=pan,b=zee,i=1066,x=0.0174503828855882,y=0.3772767215216971 a=pan,b=hat,i=1067,x=0.5324513907264202,y=0.7766825690772374 a=pan,b=zee,i=1068,x=0.9292735422372311,y=0.7845794722193757 a=wye,b=hat,i=1069,x=0.10796407185484191,y=0.026926570164813146 a=eks,b=hat,i=1071,x=0.15020029058361362,y=0.45627529973691716 a=eks,b=zee,i=1073,x=0.09738725055678144,y=0.08505208961455624 a=hat,b=hat,i=1074,x=0.3236826909608632,y=0.49627141594209967 a=eks,b=zee,i=1075,x=0.7153896932288586,y=0.9778494726905622 a=pan,b=zee,i=1077,x=0.5856627674432751,y=0.9241757857209006 a=eks,b=eks,i=1078,x=0.35578945733022505,y=0.45528814372216575 a=wye,b=wye,i=1080,x=0.016813529366139446,y=0.30619226711821357 a=pan,b=hat,i=1081,x=0.9328542327992406,y=0.9238747036441417 a=eks,b=hat,i=1082,x=0.818988631617168,y=0.6912196193544532 a=hat,b=zee,i=1084,x=0.41406718708821955,y=0.02723245214010661 a=eks,b=zee,i=1087,x=0.041919682544647396,y=0.43365253130183956 a=eks,b=wye,i=1091,x=0.9741063795340834,y=0.5869419824678774 a=wye,b=pan,i=1093,x=0.060917243371145124,y=0.0729984416375653 a=pan,b=eks,i=1097,x=0.36433855475903487,y=0.28640575782602984 a=pan,b=zee,i=1098,x=0.9388863703832938,y=0.9481045761632589 a=zee,b=pan,i=1101,x=0.9851142251459588,y=0.833308434948654 a=hat,b=zee,i=1102,x=0.6058843659959886,y=0.914771957616851 a=wye,b=zee,i=1104,x=0.6026401587598063,y=0.9232948941188992 a=wye,b=zee,i=1107,x=0.2172040459296869,y=0.04347447260250059 a=zee,b=wye,i=1108,x=0.17849311848568739,y=0.15336908789618675 a=pan,b=zee,i=1109,x=0.9209948537835644,y=0.9617211607571948 a=hat,b=zee,i=1111,x=0.5096259842809261,y=0.9716058274135191 a=wye,b=hat,i=1113,x=0.04619109705664248,y=0.07731183378456241 a=eks,b=zee,i=1114,x=0.6225031791605239,y=0.724470067269006 a=pan,b=pan,i=1116,x=0.3318167439135842,y=0.07638995864053721 a=eks,b=eks,i=1118,x=0.42321284015690686,y=0.18075244176916405 a=hat,b=zee,i=1119,x=0.9947060390455312,y=0.9155106367235321 a=eks,b=eks,i=1121,x=0.011345137277951278,y=0.30150866101509777 a=wye,b=wye,i=1126,x=0.8391082612863554,y=0.8564234939160587 a=hat,b=pan,i=1127,x=0.832626957843269,y=0.6240442951248336 a=hat,b=hat,i=1128,x=0.8806935192862494,y=0.7838162296913623 a=pan,b=zee,i=1129,x=0.3315347253194,y=0.008089402263374845 a=zee,b=wye,i=1130,x=0.01851853736108866,y=0.17184568517491516 a=wye,b=zee,i=1131,x=0.8126126224772602,y=0.9995009548069009 a=wye,b=eks,i=1134,x=0.7808769789539313,y=0.8783411417393904 a=zee,b=eks,i=1140,x=0.048571653758132216,y=0.3492112898081101 a=hat,b=eks,i=1145,x=0.8273428505388051,y=0.9831021972218925 a=wye,b=zee,i=1147,x=0.011254496718364537,y=0.2947614358547457 a=wye,b=eks,i=1148,x=0.510274781147883,y=0.6342886591607202 a=hat,b=hat,i=1150,x=0.4058826696970118,y=0.4216435681134768 a=pan,b=hat,i=1153,x=0.6757867606577086,y=0.7740341802587707 a=hat,b=eks,i=1154,x=0.48734948309736814,y=0.03392833831821873 a=hat,b=pan,i=1155,x=0.15696039673828777,y=0.29845938463448995 a=zee,b=hat,i=1157,x=0.8122264673038031,y=0.8517729655458225 a=zee,b=wye,i=1159,x=0.46769194201594133,y=0.4329746427091592 a=eks,b=wye,i=1162,x=0.9629901424599551,y=0.7303763539966592 a=hat,b=pan,i=1163,x=0.1540633521892789,y=0.30579559836649084 a=hat,b=pan,i=1165,x=0.6211654981395032,y=0.8227816494549414 a=eks,b=eks,i=1166,x=0.43746753562542595,y=0.4554692262381064 a=eks,b=pan,i=1168,x=0.8136679912512943,y=0.597540308230969 a=eks,b=hat,i=1170,x=0.38648551728927116,y=0.444170386297162 a=wye,b=zee,i=1171,x=0.6468403370363878,y=0.9265036001050484 a=wye,b=hat,i=1172,x=0.24417531360698597,y=0.4885016640644757 a=hat,b=wye,i=1174,x=0.8826971260268877,y=0.5204304309651815 a=wye,b=hat,i=1175,x=0.07253012277298443,y=0.23424850735777059 a=hat,b=eks,i=1176,x=0.006644223863763399,y=0.0816917135559706 a=eks,b=zee,i=1178,x=0.6806297878854731,y=0.5818723196551134 a=pan,b=pan,i=1179,x=0.8705072785671686,y=0.6988727124241529 a=hat,b=pan,i=1186,x=0.18605162703349232,y=0.08984973385947226 a=hat,b=pan,i=1191,x=0.6073887594007545,y=0.582980066141568 a=pan,b=pan,i=1195,x=0.16832227022787238,y=0.13828673042487394 a=zee,b=zee,i=1198,x=0.7027548035545187,y=0.5696437156771905 a=hat,b=eks,i=1203,x=0.13371374012873294,y=0.255811175503322 a=pan,b=eks,i=1205,x=0.7829882013835832,y=0.8062997039846184 a=hat,b=eks,i=1211,x=0.8188718956849538,y=0.8967648753839026 a=pan,b=wye,i=1212,x=0.664842209320305,y=0.5067617041720663 a=pan,b=pan,i=1214,x=0.7158445324765502,y=0.7170272500849562 a=zee,b=eks,i=1215,x=0.17023806172245382,y=0.11112961156527701 a=pan,b=pan,i=1217,x=0.058339498506774445,y=0.3299590477816785 a=pan,b=wye,i=1218,x=0.2981850301136384,y=0.275715699110609 a=zee,b=pan,i=1221,x=0.1120496540408027,y=0.052474214794520524 a=zee,b=wye,i=1227,x=0.35351274012969736,y=0.4041475707851616 a=eks,b=eks,i=1228,x=0.5030002251433316,y=0.8127865742005792 a=hat,b=eks,i=1229,x=0.6208757978424075,y=0.5685317001125881 a=hat,b=wye,i=1230,x=0.4033883868841214,y=0.21662083975598512 a=zee,b=zee,i=1232,x=0.6255227701030528,y=0.7068037158292888 a=zee,b=hat,i=1233,x=0.16099869622122553,y=0.03145480439751913 a=wye,b=eks,i=1234,x=0.29236003818241163,y=0.0038729096629406268 a=eks,b=wye,i=1236,x=0.25200335314789113,y=0.18668063103395705 a=pan,b=hat,i=1237,x=0.7976885073930762,y=0.5851390530977472 a=eks,b=zee,i=1240,x=0.31745479549254885,y=0.19433880518244362 a=pan,b=zee,i=1243,x=0.6589609168139929,y=0.6454105665267801 a=wye,b=eks,i=1244,x=0.2787899466812519,y=0.06055887677281169 a=pan,b=hat,i=1248,x=0.1525604218696871,y=0.07482470280574516 a=hat,b=hat,i=1249,x=0.7002367713266386,y=0.6487527612372115 a=zee,b=hat,i=1250,x=0.9701426957388892,y=0.7845500860373503 a=pan,b=hat,i=1251,x=0.5290805139059341,y=0.7100071242645416 a=zee,b=eks,i=1253,x=0.5423655422122198,y=0.859227213109029 a=zee,b=pan,i=1254,x=0.21221332375586466,y=0.26582553763793293 a=zee,b=eks,i=1255,x=0.5793553556065434,y=0.563660887083747 a=wye,b=wye,i=1257,x=0.23334157949355694,y=0.48533573180276546 a=zee,b=wye,i=1259,x=0.18343409452228054,y=0.018648673229345936 a=wye,b=eks,i=1260,x=0.7451552312920868,y=0.7083570752878636 a=eks,b=pan,i=1262,x=0.6119687598964016,y=0.8309635765979287 a=hat,b=zee,i=1263,x=0.990205350112817,y=0.9130137981522629 a=wye,b=eks,i=1264,x=0.2728580162726342,y=0.34083170474058677 a=wye,b=hat,i=1265,x=0.03629556392023969,y=0.14427174473473803 a=zee,b=eks,i=1266,x=0.042350338334240956,y=0.1289699792266037 a=hat,b=zee,i=1269,x=0.23099691497930386,y=0.010607810026782571 a=wye,b=pan,i=1273,x=0.3500305547201491,y=0.19911752000719163 a=wye,b=zee,i=1275,x=0.45988125966489024,y=0.44169640932292065 a=hat,b=eks,i=1280,x=0.46886095371359493,y=0.40718264857353603 a=wye,b=eks,i=1281,x=0.23006798520906935,y=0.08383446031686925 a=hat,b=eks,i=1283,x=0.5054724357500647,y=0.7470906139600201 a=hat,b=zee,i=1284,x=0.1351519159722092,y=0.4498407585837816 a=eks,b=wye,i=1285,x=0.9928332865840428,y=0.6970272102748626 a=zee,b=eks,i=1288,x=0.9628830236233576,y=0.9651783931494015 a=hat,b=eks,i=1289,x=0.18315393370531752,y=0.1945534839637214 a=eks,b=zee,i=1291,x=0.9018025573968887,y=0.8449305240236747 a=eks,b=eks,i=1292,x=0.7608771883116217,y=0.7517241556722504 a=wye,b=hat,i=1293,x=0.15064377804093187,y=0.4793850890733947 a=zee,b=wye,i=1298,x=0.779174519106144,y=0.8363414405399494 a=wye,b=wye,i=1302,x=0.18017602702804525,y=0.2080647082488024 a=eks,b=pan,i=1304,x=0.8469416170979848,y=0.9095929671389578 a=hat,b=wye,i=1305,x=0.1011787110939425,y=0.17876379874526727 a=hat,b=pan,i=1306,x=0.354306631649279,y=0.14650574878242473 a=hat,b=zee,i=1313,x=0.6080368706120283,y=0.7923296244615721 a=zee,b=wye,i=1315,x=0.49174797358568,y=0.21477329503908604 a=hat,b=zee,i=1316,x=0.8447890636321257,y=0.5448553401794702 a=zee,b=pan,i=1317,x=0.234827977442866,y=0.36535789013854214 a=hat,b=pan,i=1323,x=0.785186354961605,y=0.5187554224402933 a=hat,b=wye,i=1324,x=0.4653747699218791,y=0.07316638818680055 a=wye,b=eks,i=1326,x=0.5019035191475638,y=0.9808444985066099 a=zee,b=wye,i=1330,x=0.20196851520666603,y=0.4686296388879383 a=pan,b=eks,i=1332,x=0.9437028531431318,y=0.8092545870987017 a=zee,b=zee,i=1335,x=0.5987101585948386,y=0.7670719549466084 a=eks,b=wye,i=1339,x=0.5575467999942988,y=0.7816590387896203 a=pan,b=zee,i=1341,x=0.8491462615453724,y=0.7667214357631618 a=pan,b=eks,i=1344,x=0.14343578380352173,y=0.3534760283313706 a=zee,b=zee,i=1345,x=0.3068266605225908,y=0.1872593613407797 a=eks,b=pan,i=1347,x=0.6927435409900552,y=0.8895994295177906 a=eks,b=pan,i=1348,x=0.6801900016838289,y=0.81285575413888 a=wye,b=hat,i=1350,x=0.7464955639967092,y=0.635601451124977 a=zee,b=zee,i=1353,x=0.09798837394769866,y=0.4857389187941127 a=pan,b=zee,i=1355,x=0.4204132169844832,y=0.016976719720622646 a=hat,b=wye,i=1357,x=0.6527272744396904,y=0.5760550769108022 a=wye,b=zee,i=1358,x=0.40135887170615936,y=0.49587544313347875 a=wye,b=pan,i=1360,x=0.13086231928141434,y=0.010866288916755895 a=pan,b=pan,i=1362,x=0.21757550606480047,y=0.3250911878972238 a=zee,b=wye,i=1363,x=0.12002019129987074,y=0.330458068115164 a=hat,b=zee,i=1364,x=0.11093600453342645,y=0.46812386024583597 a=pan,b=eks,i=1366,x=0.44912372133198186,y=0.13603083622218803 a=pan,b=hat,i=1368,x=0.5290826491768821,y=0.7868317670838846 a=hat,b=hat,i=1369,x=0.9003291714409005,y=0.6548894347969356 a=eks,b=zee,i=1373,x=0.7520637884030741,y=0.7184683086802719 a=hat,b=zee,i=1376,x=0.3256794711244385,y=0.38645249736136067 a=eks,b=hat,i=1377,x=0.179526538530434,y=0.20081807319252887 a=zee,b=hat,i=1380,x=0.85880207513692,y=0.5362089929386346 a=eks,b=eks,i=1381,x=0.7480180475780296,y=0.9104247466520813 a=pan,b=pan,i=1382,x=0.5734287289517749,y=0.8325676507978588 a=wye,b=pan,i=1383,x=0.7445746522867436,y=0.977610514961822 a=hat,b=pan,i=1384,x=0.18929691453341568,y=0.09316356559826999 a=hat,b=eks,i=1385,x=0.8173647642606612,y=0.685818179101868 a=eks,b=hat,i=1387,x=0.6336667717285401,y=0.7885877398020724 a=eks,b=eks,i=1388,x=0.6391264035893477,y=0.885429385188037 a=zee,b=hat,i=1389,x=0.2737321526786327,y=0.40630528382661724 a=eks,b=wye,i=1391,x=0.4921330479506649,y=0.23072265405056214 a=zee,b=zee,i=1393,x=0.568247504526133,y=0.7756896840334044 a=eks,b=wye,i=1394,x=0.2879212011081145,y=0.2954751331645483 a=pan,b=zee,i=1395,x=0.6235312578229149,y=0.9190115143142508 a=wye,b=wye,i=1397,x=0.1908719616976211,y=0.49066946794315214 a=pan,b=wye,i=1398,x=0.44636597753534346,y=0.1332459124221107 a=pan,b=pan,i=1400,x=0.7498043663610715,y=0.9134287398239703 a=hat,b=eks,i=1403,x=0.7141565502820018,y=0.8983828801012884 a=eks,b=wye,i=1404,x=0.014080795466545282,y=0.18026639861936977 a=zee,b=pan,i=1405,x=0.6715143596794965,y=0.921403075922691 a=zee,b=zee,i=1406,x=0.542929251925297,y=0.5096745932177545 a=hat,b=hat,i=1407,x=0.925464277899458,y=0.8114581401124622 a=hat,b=pan,i=1409,x=0.7360283636432529,y=0.530485536184739 a=zee,b=zee,i=1412,x=0.3608642872844662,y=0.47981840619533633 a=pan,b=pan,i=1414,x=0.41821681358517837,y=0.09261463379853807 a=eks,b=pan,i=1415,x=0.36407936516918227,y=0.412995532484439 a=zee,b=eks,i=1416,x=0.8037535280997706,y=0.9967016304554022 a=zee,b=wye,i=1417,x=0.03656836512418926,y=0.24047847966373825 a=eks,b=zee,i=1419,x=0.0019272339003844063,y=0.4494856127708353 a=eks,b=hat,i=1424,x=0.816131333846752,y=0.6719670303804344 a=pan,b=hat,i=1425,x=0.7608261327843064,y=0.8033020578141182 a=hat,b=wye,i=1427,x=0.37742125258201054,y=0.21248345631269194 a=hat,b=hat,i=1430,x=0.2249233470581683,y=0.2783168994644075 a=wye,b=pan,i=1439,x=0.29634793935457593,y=0.15883447307684273 a=hat,b=wye,i=1440,x=0.9552968869720926,y=0.7549130979076563 a=eks,b=wye,i=1441,x=0.782665993384691,y=0.6769028671991114 a=wye,b=wye,i=1442,x=0.1111822347810345,y=0.4098271097617635 a=wye,b=pan,i=1443,x=0.9004115661167051,y=0.8953351280072975 a=wye,b=hat,i=1445,x=0.5126253689092004,y=0.9851511494903027 a=pan,b=zee,i=1449,x=0.7342563560822476,y=0.5866440660526566 a=zee,b=pan,i=1451,x=0.7266623210900269,y=0.5529202681153802 a=pan,b=zee,i=1456,x=0.6285804221646021,y=0.9875061625049019 a=zee,b=eks,i=1462,x=0.11393628149045654,y=0.14776897927457688 a=zee,b=wye,i=1463,x=0.9485009664381004,y=0.6876104431895068 a=pan,b=eks,i=1464,x=0.5034433003230543,y=0.9194125130762513 a=pan,b=zee,i=1465,x=0.18563268428375257,y=0.09241285966004353 a=eks,b=eks,i=1467,x=0.5966766034558736,y=0.5918168248126415 a=zee,b=wye,i=1468,x=0.8524700641554818,y=0.9423215024482277 a=pan,b=pan,i=1472,x=0.13616411059500877,y=0.29064871767206657 a=eks,b=wye,i=1474,x=0.4211179162576446,y=0.21058536437655107 a=zee,b=pan,i=1476,x=0.13639522899731849,y=0.23338840020951146 a=wye,b=hat,i=1478,x=0.9181407667919723,y=0.542065887413139 a=hat,b=eks,i=1483,x=0.14507297992678936,y=0.005565478369193744 a=wye,b=pan,i=1486,x=0.42338989462787613,y=0.21044104481161763 a=pan,b=zee,i=1489,x=0.9254041583361616,y=0.8626755735608904 a=zee,b=hat,i=1492,x=0.31566626553195365,y=0.18969237480034762 a=pan,b=hat,i=1493,x=0.7443466050859169,y=0.5883736148067066 a=pan,b=zee,i=1494,x=0.489472189755636,y=0.2436710488233178 a=pan,b=hat,i=1495,x=0.31071524278241913,y=0.3032733210952677 a=eks,b=zee,i=1497,x=0.13194664583383386,y=0.13915515391288613 a=wye,b=pan,i=1498,x=0.40290420886277534,y=0.45645851051725006 a=zee,b=wye,i=1500,x=0.8051155053673082,y=0.628483371578552 a=hat,b=pan,i=1501,x=0.8675575754177055,y=0.5525846951861648 a=wye,b=pan,i=1503,x=0.5396577054171726,y=0.6580836727630581 a=eks,b=wye,i=1504,x=0.3351263725136986,y=0.16701945030517473 a=hat,b=wye,i=1506,x=0.11505114122495796,y=0.344787577171222 a=wye,b=hat,i=1507,x=0.84331982245662,y=0.5563459493044525 a=eks,b=hat,i=1513,x=0.10774228377040074,y=0.15410741897104152 a=pan,b=eks,i=1516,x=0.322276672926436,y=0.4473633411895408 a=eks,b=eks,i=1517,x=0.9166592846030838,y=0.9746072560912218 a=eks,b=zee,i=1519,x=0.008458305921919762,y=0.13018614842795018 a=wye,b=pan,i=1520,x=0.6365490008145669,y=0.717108948902972 a=zee,b=eks,i=1521,x=0.8128775978881801,y=0.8496069709075166 a=zee,b=eks,i=1522,x=0.7549485896689099,y=0.8158698570741542 a=wye,b=eks,i=1526,x=0.5993045597268822,y=0.8066671481799782 a=wye,b=zee,i=1530,x=0.0001874794831505655,y=0.316767027644979 a=pan,b=zee,i=1531,x=0.8883596657541506,y=0.5839060771184763 a=eks,b=hat,i=1532,x=0.901005316986836,y=0.8140237382706386 a=hat,b=eks,i=1534,x=0.03906160456377494,y=0.1079795640773159 a=pan,b=pan,i=1538,x=0.7004457835988849,y=0.9254536373090144 a=zee,b=zee,i=1539,x=0.08095025737185801,y=0.42649957909211544 a=zee,b=hat,i=1540,x=0.5503724625066438,y=0.8550739169017145 a=pan,b=hat,i=1543,x=0.5949367118079497,y=0.8559890968130015 a=pan,b=eks,i=1546,x=0.2200107807755327,y=0.4056585225829311 a=hat,b=zee,i=1548,x=0.7802297233261388,y=0.7951833869084849 a=wye,b=wye,i=1550,x=0.08609382344969774,y=0.39902582557569544 a=wye,b=eks,i=1552,x=0.7411482258747379,y=0.5326218258597286 a=zee,b=eks,i=1554,x=0.27856650294803487,y=0.3773512841270542 a=zee,b=pan,i=1556,x=0.810331031324778,y=0.8529873485281747 a=pan,b=eks,i=1557,x=0.8809860667113874,y=0.6544680775174134 a=zee,b=zee,i=1558,x=0.5835792774028313,y=0.7084079588663174 a=pan,b=zee,i=1561,x=0.705850527727704,y=0.9592589404430422 a=hat,b=hat,i=1562,x=0.31193139935992087,y=0.16547553772610035 a=zee,b=pan,i=1565,x=0.012156208135737478,y=0.3456043711066239 a=zee,b=hat,i=1568,x=0.7354460222177639,y=0.9579628704250065 a=pan,b=wye,i=1571,x=0.6137258407313767,y=0.9758738290281926 a=pan,b=pan,i=1572,x=0.21906870698568925,y=0.09712236243897499 a=zee,b=zee,i=1576,x=0.8002836252017393,y=0.8669638365198293 a=wye,b=hat,i=1577,x=0.0784765489757262,y=0.2919577999135742 a=wye,b=zee,i=1579,x=0.8737327971880199,y=0.7021864790253274 a=zee,b=wye,i=1580,x=0.5926703370632916,y=0.6204701558848567 a=eks,b=zee,i=1581,x=0.3258371500409273,y=0.4813220118624293 a=pan,b=wye,i=1586,x=0.6737421455744065,y=0.8440144488545762 a=wye,b=eks,i=1587,x=0.2445786639209251,y=0.4387287649518946 a=hat,b=zee,i=1589,x=0.6381249665841564,y=0.6622471527137181 a=zee,b=zee,i=1590,x=0.49197726385941254,y=0.2851074772091239 a=pan,b=wye,i=1591,x=0.27721780314806643,y=0.42224771091002244 a=pan,b=pan,i=1595,x=0.5198729892603339,y=0.8135669258519346 a=eks,b=wye,i=1596,x=0.8578168450376926,y=0.8632162279300964 a=zee,b=hat,i=1601,x=0.21917535804489907,y=0.49754205213030844 a=wye,b=pan,i=1602,x=0.8342980736735198,y=0.6640472095662565 a=pan,b=hat,i=1605,x=0.7597487093068874,y=0.8484514239165745 a=wye,b=eks,i=1610,x=0.09062598480760276,y=0.3361854985819238 a=eks,b=pan,i=1612,x=0.34051658433735943,y=0.28757859267810415 a=eks,b=wye,i=1615,x=0.05539774482352222,y=0.030230875132911672 a=zee,b=eks,i=1618,x=0.41825022828100444,y=0.010066997525972399 a=eks,b=hat,i=1620,x=0.1861273836070172,y=0.2869387265308132 a=wye,b=eks,i=1621,x=0.4197448738879491,y=0.057355525921190864 a=wye,b=zee,i=1625,x=0.7652458613408694,y=0.959285581308301 a=hat,b=zee,i=1629,x=0.41083118021802867,y=0.019106148002514645 a=wye,b=hat,i=1631,x=0.7242804590797115,y=0.9448679681099966 a=wye,b=pan,i=1635,x=0.8895974823179132,y=0.9200024991202054 a=wye,b=wye,i=1636,x=0.9393356532728606,y=0.6298264999340702 a=wye,b=eks,i=1637,x=0.9073542081519019,y=0.6848431646656846 a=eks,b=wye,i=1640,x=0.7198824080298333,y=0.7037862057023272 a=pan,b=pan,i=1645,x=0.8386173577817879,y=0.7579883039951569 a=wye,b=zee,i=1647,x=0.3542223974517451,y=0.4616303281316404 a=zee,b=pan,i=1648,x=0.1732057619535785,y=0.21331253786975357 a=zee,b=wye,i=1650,x=0.8310778499617896,y=0.8744033167682863 a=wye,b=wye,i=1653,x=0.6034173789737551,y=0.7826811363427305 a=zee,b=eks,i=1655,x=0.31813723998346144,y=0.2538852441364856 a=wye,b=hat,i=1656,x=0.18836020025377764,y=0.20683034404839462 a=wye,b=zee,i=1658,x=0.42244696220990907,y=0.25272710810302346 a=wye,b=hat,i=1659,x=0.29012052922811093,y=0.41591681426338967 a=wye,b=hat,i=1660,x=0.4268085841844734,y=0.3388035517120921 a=eks,b=hat,i=1661,x=0.13934499347961038,y=0.03663996929413327 a=wye,b=eks,i=1665,x=0.8939474493355103,y=0.9223252135239184 a=wye,b=hat,i=1669,x=0.4710950479501834,y=0.03651025725804602 a=hat,b=eks,i=1670,x=0.6003116669898597,y=0.7981557111587316 a=pan,b=pan,i=1671,x=0.8116187328458756,y=0.8072718271616067 a=pan,b=wye,i=1672,x=0.7034003424147444,y=0.6847351199705963 a=wye,b=hat,i=1673,x=0.5949143416873871,y=0.8102803139285161 a=wye,b=wye,i=1676,x=0.29137127774161453,y=0.3509788972831772 a=zee,b=hat,i=1677,x=0.051223624824948355,y=0.48806061670524303 a=pan,b=zee,i=1678,x=0.22830360777714898,y=0.040523234104181904 a=zee,b=zee,i=1679,x=0.2004874019427556,y=0.2692182176272302 a=hat,b=pan,i=1681,x=0.8474039861745504,y=0.5929326488850256 a=pan,b=zee,i=1682,x=0.6678126441832403,y=0.7581822567177666 a=eks,b=eks,i=1683,x=0.1656742241132675,y=0.25898444627641315 a=eks,b=eks,i=1684,x=0.08681268181886848,y=0.14340546739344362 a=pan,b=eks,i=1687,x=0.663918740679759,y=0.7797473286438443 a=hat,b=eks,i=1689,x=0.49022956784197735,y=0.4412363150159613 a=wye,b=hat,i=1691,x=0.19346871577634817,y=0.3548449217449817 a=eks,b=zee,i=1692,x=0.2220528759711472,y=0.2854499747333922 a=wye,b=pan,i=1693,x=0.6318004848086037,y=0.8235151199361017 a=hat,b=hat,i=1694,x=0.22300051255024678,y=0.23627303242311026 a=pan,b=eks,i=1696,x=0.5409026908587434,y=0.8707138792965543 a=zee,b=eks,i=1697,x=0.8215348448990311,y=0.5963587804425763 a=eks,b=wye,i=1706,x=0.867732327367188,y=0.7815034918779579 a=hat,b=wye,i=1709,x=0.7255615455173713,y=0.7788950854100821 a=eks,b=hat,i=1711,x=0.8331359499607889,y=0.8880694168170389 a=pan,b=zee,i=1712,x=0.07987647709173995,y=0.13417502683990923 a=eks,b=wye,i=1713,x=0.43055194021989684,y=0.12038634859450736 a=eks,b=eks,i=1714,x=0.5087128193007605,y=0.9531328272635052 a=zee,b=wye,i=1716,x=0.9367542179955354,y=0.8831199104153296 a=pan,b=pan,i=1720,x=0.26837378206040097,y=0.3273738090239059 a=eks,b=pan,i=1722,x=0.7488627212441221,y=0.7589673147670182 a=pan,b=zee,i=1723,x=0.22059597690872113,y=0.4590031168653098 a=zee,b=wye,i=1724,x=0.11085385425683147,y=0.18276048166565262 a=eks,b=eks,i=1725,x=0.8016828955823794,y=0.5017037375277129 a=eks,b=wye,i=1726,x=0.9929352438598067,y=0.836317286740252 a=hat,b=pan,i=1727,x=0.015544541266721779,y=0.4301942866494898 a=wye,b=zee,i=1730,x=0.17481728816675346,y=0.4661820645212398 a=eks,b=wye,i=1732,x=0.9141703983722962,y=0.7783272768366281 a=pan,b=wye,i=1733,x=0.4811498350363058,y=0.31752434003930774 a=hat,b=hat,i=1741,x=0.6667341296371178,y=0.5083249671499618 a=zee,b=zee,i=1742,x=0.5570445537603863,y=0.9969595288070264 a=hat,b=pan,i=1743,x=0.3878736075798501,y=0.09689320155996384 a=hat,b=wye,i=1744,x=0.47545940383287155,y=0.035171107409935454 a=zee,b=hat,i=1746,x=0.058673442891371996,y=0.28933038921745524 a=eks,b=wye,i=1748,x=0.3689045321575106,y=0.43375960646000566 a=zee,b=pan,i=1750,x=0.42748309274481444,y=0.40582328846411353 a=eks,b=hat,i=1752,x=0.6822739323301563,y=0.934728306935636 a=hat,b=hat,i=1756,x=0.6677910628012946,y=0.7992076156627536 a=pan,b=pan,i=1757,x=0.018771917494669887,y=0.07627637321631209 a=eks,b=eks,i=1758,x=0.3849737318613389,y=0.10314796719548613 a=eks,b=hat,i=1759,x=0.004605943802663104,y=0.13706408448625906 a=zee,b=zee,i=1761,x=0.9779052389253532,y=0.5003086801528233 a=hat,b=pan,i=1764,x=0.02195532641775666,y=0.2526330533315183 a=hat,b=eks,i=1765,x=0.2835946220779688,y=0.29118113110322497 a=eks,b=wye,i=1770,x=0.7022926949673525,y=0.8178450530445518 a=hat,b=eks,i=1772,x=0.585792241890598,y=0.7443360574921659 a=eks,b=pan,i=1778,x=0.5825936705834729,y=0.5453162110699705 a=pan,b=zee,i=1780,x=0.1846415746915494,y=0.04736023830541203 a=pan,b=eks,i=1782,x=0.9210030244758979,y=0.7773896236831834 a=wye,b=wye,i=1784,x=0.8612436216521431,y=0.8048330008328066 a=pan,b=zee,i=1786,x=0.2494860009657509,y=0.17194280903044357 a=eks,b=eks,i=1787,x=0.368000320083405,y=0.4886055420500375 a=pan,b=wye,i=1788,x=0.26250246334689176,y=0.04787633922145995 a=hat,b=zee,i=1790,x=0.37729036546983097,y=0.27703668720411234 a=pan,b=zee,i=1792,x=0.8322225569737312,y=0.7917170874641617 a=wye,b=zee,i=1793,x=0.31884392088021907,y=0.48529327738748296 a=hat,b=zee,i=1795,x=0.16118129356442434,y=0.16950272509494824 a=zee,b=eks,i=1796,x=0.4942226187236075,y=0.14210516571467535 a=hat,b=zee,i=1797,x=0.7287749063387707,y=0.9927587108357429 a=zee,b=pan,i=1800,x=0.72307448294554,y=0.6376778174182595 a=pan,b=eks,i=1801,x=0.8102218415617043,y=0.6044303313247449 a=eks,b=wye,i=1803,x=0.5196592664144227,y=0.7156673976778524 a=hat,b=wye,i=1808,x=0.2287730659373145,y=0.20360891960927452 a=eks,b=zee,i=1809,x=0.5828879813451391,y=0.8871296430025095 a=wye,b=hat,i=1810,x=0.10808902686015609,y=0.003095657967865484 a=zee,b=wye,i=1811,x=0.879138779526544,y=0.8158846610141476 a=eks,b=pan,i=1815,x=0.5418348248161854,y=0.9355389520025802 a=hat,b=hat,i=1816,x=0.09792806194299297,y=0.14176660544329966 a=pan,b=pan,i=1817,x=0.5655519977509864,y=0.5975680493813812 a=pan,b=wye,i=1819,x=0.18318519888267681,y=0.43197282065530884 a=hat,b=wye,i=1822,x=0.522603809398008,y=0.6634567147948507 a=zee,b=hat,i=1823,x=0.5191794392445693,y=0.5255931403873793 a=wye,b=pan,i=1825,x=0.5392802909916755,y=0.8897079123047565 a=wye,b=pan,i=1826,x=0.8957889050713344,y=0.7119911089910552 a=hat,b=hat,i=1827,x=0.7124428569925854,y=0.5480761759295041 a=zee,b=hat,i=1828,x=0.05786804641448351,y=0.4254319991402028 a=zee,b=hat,i=1830,x=0.2721305750226911,y=0.005377285991549963 a=pan,b=hat,i=1831,x=0.18303692231105184,y=0.21025826705763861 a=eks,b=wye,i=1835,x=0.9900052984177767,y=0.8879825093814294 a=hat,b=eks,i=1837,x=0.9591593624436306,y=0.6113919452246622 a=hat,b=zee,i=1838,x=0.559343676070325,y=0.890209332873675 a=pan,b=hat,i=1839,x=0.5368391085129115,y=0.8180683703610315 a=pan,b=hat,i=1842,x=0.9898704891265324,y=0.7317672838087951 a=hat,b=eks,i=1845,x=0.09049828109166225,y=0.1947578588027301 a=zee,b=wye,i=1847,x=0.5102908546678789,y=0.8622466590956885 a=eks,b=wye,i=1848,x=0.9737508284191876,y=0.6060569185675129 a=eks,b=eks,i=1851,x=0.7390412177790203,y=0.769519937153525 a=zee,b=wye,i=1853,x=0.8447601423313442,y=0.8520011644241022 a=pan,b=hat,i=1855,x=0.8401351548600108,y=0.6504879006085633 a=hat,b=zee,i=1856,x=0.07606845988104194,y=0.00034299355854428004 a=wye,b=zee,i=1857,x=0.4582107832207104,y=0.2944016633400677 a=eks,b=wye,i=1858,x=0.9930106907313097,y=0.7391793267018062 a=hat,b=pan,i=1859,x=0.42255637553704006,y=0.02707473931820803 a=eks,b=hat,i=1862,x=0.8127278660333865,y=0.8191943473539423 a=eks,b=zee,i=1865,x=0.38057266246696253,y=0.03213839928081663 a=eks,b=hat,i=1866,x=0.8031652473986357,y=0.5958264736432561 a=wye,b=wye,i=1867,x=0.15951611637472107,y=0.4077662801256805 a=eks,b=zee,i=1868,x=0.6732934218406293,y=0.7505416061385557 a=eks,b=zee,i=1869,x=0.633163245609033,y=0.8429419490648784 a=wye,b=pan,i=1870,x=0.10163096579388076,y=0.13758281047223042 a=hat,b=wye,i=1871,x=0.08107553652444954,y=0.2640692772059776 a=pan,b=eks,i=1876,x=0.6468659335884865,y=0.710835697336098 a=hat,b=zee,i=1877,x=0.9303319011279677,y=0.7113730786626118 a=pan,b=zee,i=1883,x=0.34429591718844843,y=0.05689015367587591 a=zee,b=wye,i=1885,x=0.11851805777842395,y=0.23782759573809764 a=zee,b=hat,i=1891,x=0.5382838856043256,y=0.8806888516912734 a=zee,b=eks,i=1892,x=0.8124856255009596,y=0.9417530148525823 a=hat,b=zee,i=1893,x=0.6120649825518716,y=0.8578129408524632 a=wye,b=wye,i=1894,x=0.4169983470765677,y=0.31293410227278906 a=hat,b=wye,i=1895,x=0.10961101368157089,y=0.32892883700517095 a=hat,b=wye,i=1896,x=0.9132730441559633,y=0.7487099837821863 a=hat,b=hat,i=1897,x=0.7675505245773306,y=0.8461420935545583 a=wye,b=hat,i=1899,x=0.1709902864944267,y=0.48516354025753305 a=hat,b=pan,i=1900,x=0.6087321537907773,y=0.7970729316915601 a=wye,b=eks,i=1903,x=0.31804488869587366,y=0.14285299153786624 a=eks,b=eks,i=1907,x=0.9438758492662777,y=0.7214758965332612 a=hat,b=wye,i=1910,x=0.7380789095291242,y=0.9502552254648776 a=wye,b=wye,i=1912,x=0.7175207335721732,y=0.5163511962741214 a=hat,b=pan,i=1915,x=0.6426932948416931,y=0.5081694432335289 a=zee,b=wye,i=1917,x=0.529838527546025,y=0.975044822917303 a=eks,b=wye,i=1921,x=0.9456983171768308,y=0.8913471052406744 a=wye,b=pan,i=1922,x=0.6733026865976656,y=0.5941565401265938 a=zee,b=wye,i=1924,x=0.14261091973981976,y=0.03891416444006246 a=pan,b=pan,i=1925,x=0.051704291514689915,y=0.30096139627683915 a=eks,b=pan,i=1926,x=0.08149680519340818,y=0.371502322922598 a=pan,b=wye,i=1929,x=0.715219843779286,y=0.7347318985161266 a=eks,b=eks,i=1931,x=0.6283884556872956,y=0.714926049974028 a=pan,b=wye,i=1932,x=0.08318436818892117,y=0.43049862856264764 a=wye,b=zee,i=1933,x=0.9047633922940572,y=0.7844909689207981 a=wye,b=wye,i=1935,x=0.7550429521371519,y=0.786133808170408 a=wye,b=hat,i=1936,x=0.3345630973104814,y=0.2823268521687281 a=pan,b=wye,i=1937,x=0.9521970743863757,y=0.5949587882541866 a=zee,b=hat,i=1938,x=0.18206318284329825,y=0.0011400311959023357 a=pan,b=eks,i=1941,x=0.8294899690053994,y=0.7564416563177322 a=pan,b=eks,i=1943,x=0.9719276019842854,y=0.640150164953268 a=zee,b=zee,i=1948,x=0.8526284266294675,y=0.7580336598194982 a=eks,b=hat,i=1951,x=0.9392053569680634,y=0.9768144646610879 a=zee,b=eks,i=1953,x=0.6668788836391065,y=0.7090525532474364 a=zee,b=zee,i=1954,x=0.7595127799385754,y=0.6001574207956651 a=pan,b=zee,i=1957,x=0.9854793880226635,y=0.7095712814074717 a=wye,b=wye,i=1961,x=0.29833631790760273,y=0.4831530650838167 a=hat,b=eks,i=1962,x=0.36631759989103085,y=0.29865431150806365 a=wye,b=pan,i=1964,x=0.7334272338627286,y=0.650447648017669 a=pan,b=pan,i=1965,x=0.9367163916661853,y=0.9638919891814807 a=pan,b=eks,i=1968,x=0.7530954976867642,y=0.5048913343158832 a=hat,b=wye,i=1971,x=0.4654113772986844,y=0.03490618297713166 a=hat,b=wye,i=1972,x=0.5837244835312924,y=0.78564800693725 a=wye,b=hat,i=1973,x=0.5256418800394103,y=0.5657320340909927 a=wye,b=eks,i=1976,x=0.90900092404583,y=0.9088347779743747 a=eks,b=eks,i=1978,x=0.43223859004330245,y=0.25096305614713244 a=wye,b=pan,i=1979,x=0.044824962223491194,y=0.26304195982115053 a=hat,b=pan,i=1981,x=0.7205280959278643,y=0.9765256304646956 a=pan,b=eks,i=1982,x=0.11118021831380087,y=0.1736432452425345 a=hat,b=wye,i=1985,x=0.6785523977842361,y=0.9088522942899968 a=hat,b=eks,i=1990,x=0.972524874310568,y=0.7588379528101111 a=zee,b=pan,i=1991,x=0.4266265409041532,y=0.46661051389718977 a=eks,b=zee,i=1992,x=0.18951913536280773,y=0.3044420239454556 a=hat,b=pan,i=1994,x=0.3458198938210745,y=0.15708271475158309 a=pan,b=hat,i=1995,x=0.2451140421214234,y=0.21125136662021793 a=wye,b=eks,i=1996,x=0.7260863327463748,y=0.8391383362988085 a=zee,b=wye,i=1997,x=0.3390776046149281,y=0.2943389939229085 a=eks,b=zee,i=1999,x=0.6180255159787116,y=0.7640028449996572 a=wye,b=hat,i=2001,x=0.15924096642007157,y=0.24059632344634185 a=pan,b=zee,i=2002,x=0.5349190357320186,y=0.508630259684438 a=hat,b=pan,i=2004,x=0.5792914584913227,y=0.9721311150467201 a=hat,b=pan,i=2005,x=0.6721200696331198,y=0.5074220436659838 a=zee,b=pan,i=2006,x=0.36314674395500735,y=0.05966789024528896 a=eks,b=zee,i=2007,x=0.5198150674035192,y=0.5307294576536602 a=wye,b=wye,i=2008,x=0.8038374651958967,y=0.863525245703629 a=hat,b=eks,i=2009,x=0.8954319835423661,y=0.6074686757262493 a=wye,b=hat,i=2012,x=0.3272476785644499,y=0.2852380145740261 a=zee,b=pan,i=2013,x=0.5272911037027838,y=0.9007193862227653 a=pan,b=zee,i=2014,x=0.8942547964450125,y=0.7308860097948163 a=wye,b=pan,i=2015,x=0.7429848323935544,y=0.6564456028979551 a=eks,b=eks,i=2017,x=0.5870221936023131,y=0.5886336776923361 a=wye,b=hat,i=2019,x=0.43322808613233055,y=0.0385758517767808 a=zee,b=eks,i=2020,x=0.6430370762426636,y=0.6948330772772741 a=pan,b=zee,i=2021,x=0.4140878244124503,y=0.398400762850186 a=eks,b=pan,i=2022,x=0.3500684495606733,y=0.14698881032642608 a=eks,b=zee,i=2023,x=0.8926094968763351,y=0.6086053558590667 a=wye,b=hat,i=2024,x=0.020600223126170603,y=0.20728018182250796 a=zee,b=wye,i=2026,x=0.8573260145899378,y=0.9080875650609371 a=eks,b=zee,i=2027,x=0.22981492296559103,y=0.10600637415066061 a=zee,b=zee,i=2028,x=0.6842296172237651,y=0.896024172825087 a=wye,b=zee,i=2031,x=0.14619362934789815,y=0.04433757197092214 a=pan,b=hat,i=2032,x=0.5611491467878738,y=0.630949265472906 a=zee,b=eks,i=2036,x=0.25944332814164905,y=0.11267646149361388 a=hat,b=hat,i=2039,x=0.8389132941448142,y=0.9200224995580027 a=wye,b=hat,i=2041,x=0.6563952046485523,y=0.7555478004412313 a=zee,b=hat,i=2042,x=0.2743477126375994,y=0.3824464564910681 a=hat,b=hat,i=2043,x=0.8811861962295147,y=0.5191315240489268 a=zee,b=eks,i=2044,x=0.3599144261574607,y=0.24553060035029017 a=wye,b=hat,i=2046,x=0.7333941298571239,y=0.5739371545354796 a=hat,b=eks,i=2047,x=0.06042270034486685,y=0.46301889302926746 a=pan,b=hat,i=2048,x=0.10911169262757925,y=0.007073831794458529 a=pan,b=pan,i=2049,x=0.8624169299220058,y=0.9006582996702346 a=eks,b=hat,i=2051,x=0.40407704836251557,y=0.26395123641005147 a=zee,b=hat,i=2052,x=0.009808918561178714,y=0.2302545994571994 a=wye,b=eks,i=2053,x=0.7633729697198686,y=0.8187837109642871 a=wye,b=hat,i=2054,x=0.10710381581294204,y=0.3286506389479086 a=pan,b=zee,i=2057,x=0.28231501416039284,y=0.12643281231603754 a=wye,b=eks,i=2065,x=0.606169952184269,y=0.9495081658090401 a=eks,b=eks,i=2067,x=0.23118685760407975,y=0.4886672632279645 a=wye,b=wye,i=2068,x=0.0181286937053855,y=0.4027507216590225 a=zee,b=wye,i=2070,x=0.2845370086876513,y=0.4200729779675041 a=hat,b=pan,i=2073,x=0.14024645801145608,y=0.2232995634066972 a=zee,b=hat,i=2080,x=0.9840706098598035,y=0.7011152185727909 a=zee,b=wye,i=2081,x=0.3382103536180968,y=0.04576622304303102 a=wye,b=wye,i=2083,x=0.654630167298159,y=0.9490657525005854 a=hat,b=pan,i=2084,x=0.9418973198231615,y=0.8869025666330164 a=hat,b=zee,i=2086,x=0.9687249489223216,y=0.9138672864469205 a=hat,b=wye,i=2088,x=0.3324758019863273,y=0.4703648792781622 a=zee,b=zee,i=2090,x=0.5043939613961448,y=0.9818791944950958 a=eks,b=wye,i=2093,x=0.5685533529741125,y=0.8133350683940237 a=wye,b=pan,i=2094,x=0.07847412023993783,y=0.3613060871668645 a=wye,b=wye,i=2095,x=0.20230852407018185,y=0.2291747261210969 a=eks,b=eks,i=2096,x=0.43638629510919924,y=0.2881257309332079 a=hat,b=eks,i=2097,x=0.26844813288649483,y=0.39273900559861075 a=hat,b=eks,i=2098,x=0.9966377977643898,y=0.5245550930114457 a=hat,b=wye,i=2101,x=0.5557805350665251,y=0.5952937921640231 a=zee,b=wye,i=2102,x=0.749445246206683,y=0.9220669751971446 a=pan,b=zee,i=2105,x=0.42667111990222584,y=0.4200738107939501 a=pan,b=eks,i=2106,x=0.6899381403750706,y=0.5175558265399449 a=pan,b=wye,i=2107,x=0.046210916618416364,y=0.25213670524015686 a=zee,b=zee,i=2108,x=0.7086278430636463,y=0.7267047227599615 a=pan,b=zee,i=2109,x=0.8286002064140777,y=0.7422535714385249 a=pan,b=zee,i=2113,x=0.0793213913259122,y=0.046201894636212604 a=zee,b=zee,i=2116,x=0.4003379315212102,y=0.0193682083394614 a=hat,b=hat,i=2119,x=0.8206707686267524,y=0.7611213033730956 a=zee,b=wye,i=2120,x=0.5559252019928892,y=0.7174146654070022 a=hat,b=wye,i=2121,x=0.9803985810617651,y=0.8394646120202436 a=pan,b=wye,i=2123,x=0.9115498197515648,y=0.9169354954307747 a=wye,b=eks,i=2127,x=0.06803650937651173,y=0.3577026589688229 a=zee,b=eks,i=2129,x=0.28267518376958845,y=0.17688870699173864 a=hat,b=pan,i=2130,x=0.19116926141337387,y=0.27875749703114405 a=wye,b=pan,i=2133,x=0.6516558397748747,y=0.774009470971533 a=zee,b=wye,i=2136,x=0.2843358696868167,y=0.17750391830130807 a=zee,b=wye,i=2138,x=0.29832744224162844,y=0.33074245583419115 a=zee,b=wye,i=2139,x=0.4116759409721965,y=0.16673308079819182 a=zee,b=wye,i=2140,x=0.3063387912982882,y=0.3715575632516237 a=pan,b=hat,i=2141,x=0.41506057628652626,y=0.013486526190589099 a=zee,b=wye,i=2142,x=0.517904841622836,y=0.53285652127 a=hat,b=pan,i=2143,x=0.9156355367699018,y=0.8823700552229912 a=eks,b=zee,i=2146,x=0.4990209540685181,y=0.1364915882864166 a=eks,b=wye,i=2147,x=0.15240384791463035,y=0.4599246782338706 a=zee,b=eks,i=2149,x=0.7025420244699133,y=0.987609520343113 a=wye,b=pan,i=2150,x=0.3436366777295877,y=0.3694637710717039 a=hat,b=zee,i=2151,x=0.9616090415643731,y=0.8945473597755025 a=zee,b=hat,i=2152,x=0.480760014274322,y=0.09273697945051707 a=wye,b=pan,i=2157,x=0.40990967259698485,y=0.46693754055942116 a=hat,b=hat,i=2158,x=0.36568864609540286,y=0.482086719899368 a=zee,b=wye,i=2159,x=0.46324422760937845,y=0.18957042856735318 a=pan,b=eks,i=2160,x=0.0032731741464655517,y=0.24265930126172286 a=wye,b=eks,i=2161,x=0.17517848527969948,y=0.08180586013473534 a=pan,b=pan,i=2162,x=0.4403551635970905,y=0.22942697632655906 a=zee,b=hat,i=2167,x=0.42312576374129274,y=0.10048800632229682 a=wye,b=hat,i=2168,x=0.6568978924854212,y=0.5101756478889046 a=wye,b=eks,i=2170,x=0.4198547582787967,y=0.2376285818765217 a=hat,b=wye,i=2179,x=0.8080588257410165,y=0.8760901920518874 a=pan,b=eks,i=2180,x=0.6055815021312241,y=0.8480036770514022 a=zee,b=pan,i=2181,x=0.5449270457570026,y=0.7992463596093999 a=eks,b=pan,i=2183,x=0.8003361363186678,y=0.8955368869223884 a=eks,b=eks,i=2185,x=0.33802204835640726,y=0.30007036518314967 a=pan,b=eks,i=2187,x=0.09332217805283527,y=0.2731125734848725 a=zee,b=eks,i=2189,x=0.984738578757059,y=0.892051880694554 a=zee,b=hat,i=2193,x=0.44938360138176914,y=0.04690228110148875 a=wye,b=wye,i=2194,x=0.2622599637682992,y=0.33190780821668475 a=hat,b=wye,i=2197,x=0.3540930552112632,y=0.4554803152418352 a=hat,b=eks,i=2198,x=0.12965400774700986,y=0.4139588865738947 a=hat,b=wye,i=2202,x=0.4709189260548132,y=0.33410477791419135 a=wye,b=pan,i=2203,x=0.8491557372816053,y=0.5530531109549706 a=wye,b=zee,i=2205,x=0.2774377944743893,y=0.45205678592354026 a=wye,b=eks,i=2209,x=0.7841059777895694,y=0.6947456883865291 a=hat,b=eks,i=2210,x=0.46786259691563536,y=0.31576530398682046 a=hat,b=zee,i=2214,x=0.2971188903315465,y=0.44965916160853636 a=zee,b=pan,i=2215,x=0.06251445207257622,y=0.13216970387427485 a=hat,b=wye,i=2216,x=0.3382952859935743,y=0.4400906767156443 a=zee,b=wye,i=2217,x=0.49170781106474626,y=0.1402042893515265 a=zee,b=hat,i=2218,x=0.2583991751219392,y=0.36652517821181607 a=pan,b=zee,i=2219,x=0.14927136365683047,y=0.18664967620347506 a=eks,b=wye,i=2220,x=0.5726690878517332,y=0.9834177283918458 a=zee,b=eks,i=2222,x=0.813180106527479,y=0.621185672504634 a=eks,b=hat,i=2223,x=0.289329024465074,y=0.36110779604692067 a=eks,b=wye,i=2226,x=0.3454244478858154,y=0.29090367914645576 a=zee,b=wye,i=2227,x=0.39971822303581617,y=0.17475090292312834 a=eks,b=zee,i=2228,x=0.9408003473361174,y=0.9376913825387122 a=hat,b=wye,i=2229,x=0.4494538288870511,y=0.13090866722624483 a=wye,b=hat,i=2231,x=0.900794437962015,y=0.8967390597734215 a=zee,b=wye,i=2233,x=0.9004219588711274,y=0.7577516737491493 a=eks,b=eks,i=2234,x=0.27871867532288996,y=0.2911552878960423 a=eks,b=wye,i=2235,x=0.5013653314603624,y=0.8333248001496258 a=pan,b=zee,i=2239,x=0.010173755043218158,y=0.22123822336488064 a=hat,b=wye,i=2241,x=0.5014017541132575,y=0.7090960181653438 a=wye,b=hat,i=2242,x=0.9458244074853481,y=0.7456393313493013 a=zee,b=pan,i=2243,x=0.29001787500073173,y=0.045527725574051714 a=wye,b=hat,i=2246,x=0.7714374257659208,y=0.5425954287320883 a=pan,b=pan,i=2247,x=0.8014273299143657,y=0.7288163705942878 a=pan,b=pan,i=2248,x=0.954246012713997,y=0.8279688125072744 a=eks,b=eks,i=2249,x=0.3345668023105298,y=0.31811620191709955 a=eks,b=hat,i=2251,x=0.8946184447856771,y=0.8281124954281727 a=zee,b=wye,i=2252,x=0.5655358148358,y=0.9169255629455827 a=hat,b=zee,i=2255,x=0.4883498572156204,y=0.0770621976268544 a=hat,b=hat,i=2257,x=0.6942446034273736,y=0.6246228939328669 a=zee,b=zee,i=2262,x=0.7490208516776408,y=0.7277121821219803 a=pan,b=eks,i=2269,x=0.5541880960714733,y=0.9158224391454514 a=eks,b=eks,i=2270,x=0.5090886478757912,y=0.7656587962141506 a=eks,b=hat,i=2273,x=0.8127008522217432,y=0.9949059480342844 a=eks,b=wye,i=2275,x=0.5212081176523184,y=0.8177991905419402 a=wye,b=eks,i=2278,x=0.17901836368365676,y=0.14044395537918564 a=hat,b=eks,i=2279,x=0.012280680223469398,y=0.277342303022595 a=wye,b=zee,i=2280,x=0.4217562022758986,y=0.051936162685817355 a=zee,b=pan,i=2281,x=0.1383792519119802,y=0.47235511628254045 a=eks,b=hat,i=2282,x=0.7011958061953378,y=0.91083574253739 a=wye,b=wye,i=2286,x=0.777938701974155,y=0.7615824205677968 a=pan,b=zee,i=2288,x=0.5745888818383479,y=0.8421462451069522 a=pan,b=zee,i=2289,x=0.042515149065466495,y=0.3428290162671168 a=zee,b=eks,i=2290,x=0.14418296982644663,y=0.3545011820617253 a=pan,b=wye,i=2292,x=0.27678771174110695,y=0.35760728439380474 a=zee,b=pan,i=2300,x=0.9291273399024345,y=0.9606720070997913 a=zee,b=hat,i=2304,x=0.1127642829456843,y=0.29881658214862383 a=pan,b=zee,i=2305,x=0.11496965057148123,y=0.19753250624952667 a=zee,b=wye,i=2309,x=0.12120595243094534,y=0.3417676704542142 a=wye,b=wye,i=2310,x=0.6528439645535314,y=0.626705481063678 a=zee,b=zee,i=2311,x=0.965416713125537,y=0.675622189665188 a=zee,b=pan,i=2313,x=0.4308881860064431,y=0.298139087353108 a=eks,b=eks,i=2316,x=0.1898131609601975,y=0.2576221943783219 a=eks,b=hat,i=2318,x=0.6179437679435674,y=0.6255315742679604 a=eks,b=hat,i=2321,x=0.9006870009567153,y=0.8537806242130159 a=zee,b=zee,i=2322,x=0.39299000984576493,y=0.48675520394221294 a=zee,b=zee,i=2323,x=0.6924646229067376,y=0.961728591715515 a=eks,b=zee,i=2324,x=0.3656731818815381,y=0.4348170464549541 a=zee,b=eks,i=2325,x=0.9310044743908388,y=0.5915717923626269 a=wye,b=hat,i=2326,x=0.5390947464654677,y=0.9171443353099715 a=eks,b=zee,i=2328,x=0.9233414160859896,y=0.9426916138193271 a=eks,b=wye,i=2329,x=0.32236596243200943,y=0.12349447265840763 a=pan,b=eks,i=2331,x=0.7795985947092806,y=0.9791969083425154 a=wye,b=eks,i=2332,x=0.8888447587498162,y=0.9274917692848156 a=zee,b=wye,i=2336,x=0.2132138095588999,y=0.3350510820375012 a=eks,b=zee,i=2337,x=0.18310611841718727,y=0.27611093961149813 a=pan,b=pan,i=2339,x=0.7632065771231693,y=0.9533148007319427 a=eks,b=eks,i=2341,x=0.1689642670369339,y=0.08666058738902227 a=eks,b=eks,i=2345,x=0.7240818295178657,y=0.7697201439211158 a=wye,b=pan,i=2347,x=0.9345794244994885,y=0.5611924241664724 a=pan,b=hat,i=2348,x=0.5703090995325857,y=0.5762676020746584 a=hat,b=zee,i=2349,x=0.2589915838302729,y=0.04497637706481694 a=zee,b=pan,i=2352,x=0.19948276246295482,y=0.27886956486778547 a=hat,b=eks,i=2353,x=0.19721696160232083,y=0.1902097573367555 a=pan,b=zee,i=2355,x=0.4132334507678017,y=0.0958935038625609 a=pan,b=pan,i=2356,x=0.49220586447091974,y=0.3637263342876337 a=hat,b=hat,i=2362,x=0.7586788480149922,y=0.6167614911809044 a=eks,b=zee,i=2363,x=0.2829560793295287,y=0.31877554125357643 a=eks,b=wye,i=2365,x=0.10694687582616103,y=0.12549118259779624 a=zee,b=hat,i=2366,x=0.8434948128398014,y=0.7566711862078771 a=eks,b=hat,i=2367,x=0.11100450503347647,y=0.26231820024625485 a=hat,b=wye,i=2369,x=0.03135249091794745,y=0.3202037119775658 a=wye,b=zee,i=2370,x=0.5078848120383039,y=0.5495294084638471 a=eks,b=zee,i=2371,x=0.6296689722217776,y=0.8808041685758371 a=hat,b=wye,i=2372,x=0.36694062952440554,y=0.03285188729261823 a=pan,b=eks,i=2376,x=0.7036015015427707,y=0.8896688757860348 a=pan,b=eks,i=2379,x=0.0126919318388804,y=0.05364265512252031 a=hat,b=zee,i=2380,x=0.12629846495196628,y=0.00017118893583800698 a=zee,b=hat,i=2382,x=0.9419188430791652,y=0.5943076078356421 a=zee,b=pan,i=2386,x=0.4400144230398596,y=0.40718760512261376 a=eks,b=wye,i=2390,x=0.6331896102608988,y=0.9589307439412602 a=eks,b=zee,i=2392,x=0.7923894749706849,y=0.8917271151038314 a=pan,b=wye,i=2398,x=0.6626457206760483,y=0.6952332207508496 a=eks,b=wye,i=2404,x=0.5546642401893631,y=0.5985846330820938 a=pan,b=pan,i=2405,x=0.2358853113430821,y=0.024003950417810227 a=eks,b=zee,i=2409,x=0.59847879634121,y=0.7916259405367129 a=pan,b=zee,i=2410,x=0.04515829439395114,y=0.24330613797458922 a=pan,b=pan,i=2414,x=0.8144512562961078,y=0.9177829414099823 a=eks,b=hat,i=2417,x=0.6492293161864587,y=0.9521947928976578 a=hat,b=pan,i=2418,x=0.9704055340867738,y=0.5799798105012466 a=eks,b=zee,i=2419,x=0.09047960361588969,y=0.48999371435226136 a=pan,b=pan,i=2420,x=0.9333731806896786,y=0.6043241512179962 a=eks,b=pan,i=2422,x=0.00863696577870754,y=0.11509725431793605 a=zee,b=wye,i=2423,x=0.4653066475033094,y=0.21997612033850344 a=zee,b=wye,i=2425,x=0.398155311000022,y=0.0933499833149607 a=pan,b=eks,i=2426,x=0.6379726091040971,y=0.5194384530463447 a=wye,b=eks,i=2427,x=0.539037074058747,y=0.7531525516774173 a=pan,b=wye,i=2429,x=0.8020766995566793,y=0.7689029735366432 a=zee,b=wye,i=2432,x=0.30385506685705554,y=0.17382245218515768 a=pan,b=eks,i=2434,x=0.013657995328708816,y=0.45586613889144767 a=zee,b=wye,i=2435,x=0.9416754660578306,y=0.6579056008950284 a=wye,b=wye,i=2437,x=0.8441032403303297,y=0.7236974901617537 a=hat,b=zee,i=2439,x=0.7318268760763208,y=0.7357122474543071 a=zee,b=wye,i=2444,x=0.6743475636626085,y=0.5841642214951493 a=pan,b=zee,i=2445,x=0.150471438909343,y=0.03999544722112036 a=zee,b=hat,i=2447,x=0.9165212208454823,y=0.6343832698422787 a=wye,b=pan,i=2449,x=0.5042681244213146,y=0.908306481649806 a=wye,b=zee,i=2451,x=0.23883689209402614,y=0.4489097810835715 a=hat,b=wye,i=2453,x=0.4787447016730605,y=0.027781641677141033 a=pan,b=pan,i=2457,x=0.3927934924087789,y=0.06769141197493256 a=wye,b=pan,i=2459,x=0.0074179863852393835,y=0.13412770282159325 a=wye,b=wye,i=2460,x=0.8546039006462764,y=0.5794887921093801 a=hat,b=hat,i=2464,x=0.6604485499983388,y=0.6145786977176719 a=zee,b=zee,i=2465,x=0.3505544906675998,y=0.1954960429503897 a=pan,b=pan,i=2466,x=0.7769548783450912,y=0.8220089791630163 a=eks,b=eks,i=2467,x=0.9350039614092526,y=0.8756536110782422 a=hat,b=zee,i=2470,x=0.910842331244497,y=0.8937381551221251 a=pan,b=wye,i=2471,x=0.36510756117868337,y=0.16172467779589483 a=pan,b=eks,i=2474,x=0.7828499578474473,y=0.9442071626420061 a=pan,b=zee,i=2476,x=0.2262395290029181,y=0.49451050699405674 a=wye,b=hat,i=2478,x=0.4614473986661236,y=0.4721517855532317 a=hat,b=wye,i=2480,x=0.014430995239748112,y=0.35346467775779145 a=hat,b=zee,i=2482,x=0.15810752007547613,y=0.10215153278169598 a=hat,b=eks,i=2483,x=0.5002024621775637,y=0.9187983113959539 a=zee,b=hat,i=2484,x=0.04124901160673633,y=0.1095855587112885 a=eks,b=hat,i=2486,x=0.4923487745128049,y=0.28889637616320174 a=wye,b=pan,i=2487,x=0.3300250547987864,y=0.22540259142646224 a=eks,b=zee,i=2488,x=0.0023333167684839173,y=0.24088326731558385 a=zee,b=pan,i=2489,x=0.5050787967691673,y=0.96990681663883 a=pan,b=eks,i=2491,x=0.11150304854042947,y=0.33331036327124963 a=hat,b=zee,i=2496,x=0.1577724924590801,y=0.4739307550526024 a=zee,b=zee,i=2499,x=0.8613769284558995,y=0.9685505021744841 a=eks,b=zee,i=2501,x=0.9988110946859143,y=0.8013707404671317 a=wye,b=pan,i=2503,x=0.6021619570218234,y=0.7998420154096526 a=zee,b=eks,i=2507,x=0.06006684599594547,y=0.32800136057911744 a=hat,b=pan,i=2509,x=0.9399094021245685,y=0.9766927628695118 a=wye,b=pan,i=2513,x=0.9941884027342468,y=0.7427222275160807 a=hat,b=wye,i=2514,x=0.759666601296956,y=0.5029288106582336 a=wye,b=zee,i=2516,x=0.22158162509494428,y=0.1717438346245811 a=hat,b=zee,i=2519,x=0.023141000554160573,y=0.159821225039678 a=pan,b=zee,i=2522,x=0.3836823470783707,y=0.2530933368188705 a=hat,b=pan,i=2524,x=0.5483698024028446,y=0.80652225685914 a=zee,b=pan,i=2525,x=0.9332167021929317,y=0.8274407370101524 a=pan,b=pan,i=2526,x=0.22953431238745692,y=0.07163851427849766 a=eks,b=eks,i=2528,x=0.7481860062358446,y=0.6037295548285344 a=eks,b=pan,i=2529,x=0.3393051290797555,y=0.025397429828768137 a=zee,b=zee,i=2530,x=0.6149438991743728,y=0.7634078131671355 a=wye,b=wye,i=2532,x=0.0054964576725233805,y=0.28953245784366877 a=wye,b=wye,i=2536,x=0.43315262752486194,y=0.27205902504143986 a=eks,b=eks,i=2538,x=0.38906239415188226,y=0.2685051550780454 a=zee,b=hat,i=2539,x=0.6345180823665123,y=0.714272732680164 a=wye,b=eks,i=2541,x=0.9200450459897079,y=0.5203187898658775 a=hat,b=pan,i=2542,x=0.416076924166804,y=0.4567226915609339 a=zee,b=eks,i=2543,x=0.8882507111625345,y=0.6834591517880225 a=hat,b=zee,i=2544,x=0.6234518321227132,y=0.568093714839173 a=pan,b=hat,i=2547,x=0.24011644563078283,y=0.12009590313568308 a=zee,b=hat,i=2548,x=0.4304009679094255,y=0.3235635213023209 a=eks,b=zee,i=2549,x=0.7611031921737661,y=0.689829708430865 a=zee,b=hat,i=2550,x=0.9107046316959098,y=0.9267025956859704 a=pan,b=hat,i=2553,x=0.8260887056078599,y=0.6576752537408973 a=eks,b=pan,i=2556,x=0.680151798371677,y=0.9721202344719171 a=zee,b=pan,i=2557,x=0.3624846239071149,y=0.38096311190739685 a=pan,b=eks,i=2559,x=0.41182608064067716,y=0.4651557950827221 a=zee,b=hat,i=2560,x=0.8207042664095232,y=0.972493490219255 a=eks,b=eks,i=2561,x=0.9568943633067363,y=0.9942427604342767 a=eks,b=eks,i=2563,x=0.7448606140977615,y=0.7677875733269816 a=eks,b=eks,i=2564,x=0.6984324028424346,y=0.6867698395582814 a=pan,b=pan,i=2566,x=0.027948166482267056,y=0.10155712046334942 a=zee,b=pan,i=2567,x=0.6373779619859908,y=0.8254690568634606 a=hat,b=zee,i=2568,x=0.5351681178046073,y=0.8555068797919759 a=zee,b=wye,i=2570,x=0.7332356879541984,y=0.7095236956282258 a=wye,b=zee,i=2571,x=0.6045866476300921,y=0.9472308056954024 a=pan,b=eks,i=2573,x=0.6173980620064918,y=0.7399111725286391 a=hat,b=eks,i=2576,x=0.8598307222093972,y=0.677493082731475 a=hat,b=wye,i=2579,x=0.470168322914005,y=0.3245499585879692 a=pan,b=eks,i=2582,x=0.4136169698568053,y=0.3221257100507432 a=pan,b=pan,i=2585,x=0.3671198622625018,y=0.04290161860716368 a=hat,b=pan,i=2589,x=0.9259610701768484,y=0.7567071664063917 a=hat,b=pan,i=2592,x=0.18016216606425406,y=0.2099121503498219 a=eks,b=zee,i=2594,x=0.07159878226683902,y=0.20989783292032282 a=hat,b=hat,i=2595,x=0.9678207161209708,y=0.992049177363607 a=hat,b=pan,i=2597,x=0.6191641186208192,y=0.91398214172482 a=eks,b=hat,i=2598,x=0.012851434303710274,y=0.14814227972741656 a=hat,b=zee,i=2599,x=0.9048118287143257,y=0.8847594382115711 a=hat,b=wye,i=2603,x=0.31179190517346567,y=0.01609407680873831 a=wye,b=wye,i=2604,x=0.47775304052473055,y=0.38671047718640983 a=eks,b=eks,i=2607,x=0.8629787970160852,y=0.8183015089362451 a=wye,b=hat,i=2610,x=0.14713673147626471,y=0.193770427584398 a=pan,b=pan,i=2613,x=0.9093120035098351,y=0.993257702527396 a=hat,b=wye,i=2614,x=0.7781647480152264,y=0.993772240196278 a=eks,b=eks,i=2616,x=0.8400827662084357,y=0.904384801897908 a=pan,b=pan,i=2617,x=0.44875309896113624,y=0.20709074311528453 a=hat,b=wye,i=2619,x=0.19051153642139496,y=0.46651684239833613 a=pan,b=zee,i=2620,x=0.5592572385681548,y=0.672039894065432 a=hat,b=eks,i=2622,x=0.21855190429616178,y=0.306255719577206 a=hat,b=zee,i=2623,x=0.5579915433786629,y=0.9351922009068756 a=wye,b=zee,i=2626,x=0.21020261586647726,y=0.2011091555698421 a=hat,b=zee,i=2633,x=0.11167516897133345,y=0.1968557916169683 a=pan,b=wye,i=2636,x=0.6460342181062689,y=0.7795324745240246 a=eks,b=eks,i=2639,x=0.12492716932261638,y=0.21510868197623745 a=wye,b=zee,i=2645,x=0.22135649292487047,y=0.3353372961478748 a=zee,b=eks,i=2649,x=0.8676857104115077,y=0.6062661030015066 a=zee,b=zee,i=2651,x=0.08318080628977687,y=0.08723840975656705 a=hat,b=wye,i=2653,x=0.279635601734451,y=0.4522275293507577 a=pan,b=eks,i=2655,x=0.20861278160790098,y=0.09276404710956598 a=pan,b=eks,i=2659,x=0.39231354538410634,y=0.19261788337249341 a=zee,b=wye,i=2663,x=0.7126684401510096,y=0.8051899200649238 a=pan,b=zee,i=2666,x=0.9074679274351196,y=0.8957847934010839 a=hat,b=pan,i=2667,x=0.9240389772763548,y=0.5231982813953002 a=pan,b=eks,i=2668,x=0.3525652118913354,y=0.49330814134258383 a=hat,b=wye,i=2669,x=0.14565423862972182,y=0.18195721833206513 a=wye,b=hat,i=2670,x=0.5314631858298513,y=0.9247384504550191 a=eks,b=pan,i=2671,x=0.2191775509938665,y=0.16221454397918067 a=hat,b=wye,i=2674,x=0.5685867476642044,y=0.9536560186396535 a=eks,b=zee,i=2675,x=0.7116584351173386,y=0.8813675632259913 a=zee,b=zee,i=2680,x=0.28695958426961987,y=0.35447908228108094 a=zee,b=zee,i=2681,x=0.5753537491643719,y=0.8698920433502088 a=hat,b=eks,i=2682,x=0.7144081950600689,y=0.8253921612815761 a=pan,b=pan,i=2683,x=0.9474694135785586,y=0.5331573468403473 a=wye,b=pan,i=2685,x=0.5059670030001199,y=0.5002012382517893 a=wye,b=wye,i=2686,x=0.5187856380368512,y=0.8665210971116168 a=zee,b=pan,i=2687,x=0.5064156313100883,y=0.5164969637045003 a=pan,b=wye,i=2688,x=0.9170439177596071,y=0.7855194635003687 a=zee,b=hat,i=2689,x=0.7018760912024224,y=0.9018580557735235 a=pan,b=zee,i=2693,x=0.6621261710619304,y=0.765604369363381 a=wye,b=wye,i=2694,x=0.5113378128718417,y=0.7447015937237151 a=hat,b=eks,i=2695,x=0.20486591930659304,y=0.08546083685115857 a=pan,b=wye,i=2698,x=0.24786027932789856,y=0.25028548790543437 a=hat,b=hat,i=2699,x=0.18362126379498567,y=0.3583685237385621 a=eks,b=eks,i=2704,x=0.7289032202296384,y=0.943448586243151 a=pan,b=zee,i=2705,x=0.2681131456172976,y=0.03881677277584117 a=pan,b=zee,i=2710,x=0.3235306005938401,y=0.3944479990658286 a=wye,b=hat,i=2713,x=0.7816282897070512,y=0.8725529048814329 a=wye,b=eks,i=2714,x=0.5337563133061932,y=0.8113476754885716 a=hat,b=eks,i=2717,x=0.8517633647797415,y=0.6075520102742804 a=pan,b=zee,i=2719,x=0.13091802232794136,y=0.4147418371197401 a=zee,b=pan,i=2720,x=0.875012865695414,y=0.6301510344124231 a=pan,b=pan,i=2721,x=0.7634027233725996,y=0.9537462437208611 a=wye,b=zee,i=2723,x=0.4692411142423141,y=0.18086715737750947 a=wye,b=zee,i=2724,x=0.3016910888319093,y=0.2815838391993606 a=eks,b=pan,i=2725,x=0.09842524478857917,y=0.4039455571089149 a=zee,b=wye,i=2728,x=0.8748783567240713,y=0.9127365833223035 a=pan,b=eks,i=2729,x=0.9890321807426645,y=0.6544105013007959 a=eks,b=zee,i=2730,x=0.5913012155193706,y=0.5125849403012366 a=pan,b=eks,i=2732,x=0.7776625957923161,y=0.7377246871264523 a=zee,b=eks,i=2733,x=0.11325755544848148,y=0.32415018564505305 a=eks,b=pan,i=2734,x=0.4544389365010312,y=0.36274017551484594 a=zee,b=hat,i=2735,x=0.6753256152256654,y=0.7111448175040769 a=zee,b=pan,i=2736,x=0.13316236671850434,y=0.49210023866083397 a=hat,b=zee,i=2738,x=0.6324404521389477,y=0.5991554446942754 a=hat,b=zee,i=2739,x=0.4523752260828632,y=0.4097560532434581 a=pan,b=eks,i=2740,x=0.16601226995675156,y=0.18151654867600586 a=hat,b=eks,i=2742,x=0.5093718066070119,y=0.9913946330960695 a=wye,b=pan,i=2745,x=0.028208712274286007,y=0.45797747909936903 a=wye,b=eks,i=2747,x=0.801718741445332,y=0.8343436520177938 a=zee,b=eks,i=2748,x=0.11153132519318998,y=0.17527565983385196 a=wye,b=zee,i=2752,x=0.5421828769626178,y=0.6932556944834627 a=hat,b=zee,i=2754,x=0.7970322675458169,y=0.9056375064474206 a=wye,b=hat,i=2756,x=0.5906831195384066,y=0.8552080634179315 a=pan,b=hat,i=2760,x=0.5529628324424195,y=0.672560428419093 a=wye,b=hat,i=2761,x=0.9138967886693034,y=0.9213145915711659 a=pan,b=zee,i=2766,x=0.830723134231425,y=0.665433991421394 a=hat,b=pan,i=2767,x=0.3457100418361476,y=0.4664053612526614 a=pan,b=hat,i=2768,x=0.051556933697434526,y=0.17976239369842706 a=wye,b=zee,i=2769,x=0.9668199998927879,y=0.775654943293786 a=hat,b=pan,i=2770,x=0.27594379871232555,y=0.07411463454718337 a=pan,b=wye,i=2771,x=0.1174987458859269,y=0.005708083531397623 a=eks,b=hat,i=2773,x=0.69291317851219,y=0.7469948294872729 a=zee,b=wye,i=2776,x=0.7910444608980398,y=0.6491427094511163 a=pan,b=pan,i=2777,x=0.7969059524383465,y=0.669103483462524 a=eks,b=wye,i=2781,x=0.4061806402666983,y=0.36644038967272896 a=hat,b=wye,i=2782,x=0.6917795282383538,y=0.9185836699082268 a=pan,b=wye,i=2785,x=0.621716134059889,y=0.5300633007674981 a=pan,b=pan,i=2786,x=0.591903135564393,y=0.9817870263065608 a=zee,b=wye,i=2789,x=0.053717462803680616,y=0.05452469526931114 a=wye,b=wye,i=2790,x=0.7984829227541226,y=0.5087673080038057 a=eks,b=hat,i=2792,x=0.574814951546933,y=0.838521058328272 a=zee,b=hat,i=2793,x=0.016119118073299465,y=0.048486447355322926 a=eks,b=hat,i=2795,x=0.9828163659495991,y=0.7271574141684917 a=eks,b=wye,i=2796,x=0.9795666089681072,y=0.6936068995013053 a=wye,b=eks,i=2797,x=0.0955127453952278,y=0.3193873136743336 a=hat,b=hat,i=2798,x=0.6770658307401128,y=0.9612492884585951 a=pan,b=pan,i=2802,x=0.8498273803284082,y=0.6695254936819108 a=eks,b=pan,i=2806,x=0.45982174205757165,y=0.21639041126785252 a=eks,b=pan,i=2810,x=0.18551339605772543,y=0.380046863146443 a=zee,b=zee,i=2811,x=0.5396926661842615,y=0.7423060132429089 a=wye,b=hat,i=2812,x=0.4080552691530873,y=0.23715395574697773 a=wye,b=pan,i=2814,x=0.4232831301914316,y=0.003575690575454038 a=wye,b=hat,i=2815,x=0.2753349005711472,y=0.2981607803589118 a=pan,b=eks,i=2817,x=0.9437261643896192,y=0.6585456269208473 a=wye,b=zee,i=2819,x=0.6749831740629705,y=0.7181822687947076 a=pan,b=pan,i=2823,x=0.8970769946774317,y=0.8143443328628265 a=wye,b=wye,i=2824,x=0.7341426123679048,y=0.6900466491014886 a=hat,b=pan,i=2827,x=0.007693535697102405,y=0.358018000756796 a=wye,b=pan,i=2829,x=0.8978699958731674,y=0.5078843103822455 a=zee,b=pan,i=2831,x=0.9137972915067373,y=0.8146525548769581 a=zee,b=zee,i=2833,x=0.6526333204333133,y=0.8962754703239799 a=hat,b=hat,i=2837,x=0.5655910185189842,y=0.9183250775072218 a=pan,b=zee,i=2840,x=0.5303948386863744,y=0.9080864546926949 a=zee,b=wye,i=2841,x=0.09731314104522193,y=0.31228305132515555 a=pan,b=eks,i=2842,x=0.7549176932437908,y=0.8640405171715994 a=pan,b=pan,i=2845,x=0.606181068721247,y=0.616002039068612 a=hat,b=wye,i=2846,x=0.3265631003841204,y=0.374492300721745 a=hat,b=zee,i=2847,x=0.7881568154651081,y=0.5559821919859138 a=pan,b=zee,i=2848,x=0.9624756126657645,y=0.9574074942948696 a=wye,b=hat,i=2850,x=0.05470860141262479,y=0.04658298467108257 a=wye,b=wye,i=2851,x=0.0020446268545805113,y=0.009943917182808737 a=wye,b=pan,i=2852,x=0.42940687832989866,y=0.1468318742685415 a=wye,b=eks,i=2855,x=0.9419146917622048,y=0.6060209650374142 a=eks,b=pan,i=2856,x=0.7115880622754508,y=0.8964623782367054 a=eks,b=pan,i=2859,x=0.02447776772167043,y=0.20688297772055575 a=eks,b=zee,i=2866,x=0.8934857222410671,y=0.6256367404608381 a=wye,b=zee,i=2867,x=0.9489727374596107,y=0.8632434631696883 a=hat,b=pan,i=2869,x=0.04903454618587899,y=0.48019476723366983 a=wye,b=eks,i=2870,x=0.13588621486865515,y=0.46171851137675657 a=eks,b=hat,i=2872,x=0.0824464474583485,y=0.41500058370516746 a=wye,b=zee,i=2879,x=0.3368479146214749,y=0.319508849901748 a=hat,b=wye,i=2881,x=0.8870137115236287,y=0.6557420558079095 a=wye,b=pan,i=2882,x=0.20508256902105493,y=0.24625712578663705 a=wye,b=zee,i=2885,x=0.4079982232706686,y=0.42382421978789164 a=zee,b=hat,i=2888,x=0.9703529871646023,y=0.517811760850648 a=wye,b=zee,i=2889,x=0.7686343850863733,y=0.5742253808106673 a=eks,b=zee,i=2890,x=0.18685211627025788,y=0.2370568703128223 a=wye,b=eks,i=2891,x=0.3968173236793585,y=0.04738783308138439 a=eks,b=zee,i=2893,x=0.5531039940725316,y=0.7306512817266388 a=zee,b=eks,i=2895,x=0.9753708467911276,y=0.615940530686146 a=hat,b=zee,i=2897,x=0.5678455159032189,y=0.7910090421492175 a=pan,b=zee,i=2898,x=0.23271930748884184,y=0.4088902304553087 a=hat,b=wye,i=2900,x=0.9619050081633596,y=0.7954950376163313 a=pan,b=eks,i=2903,x=0.34600684567011875,y=0.2803937160495198 a=zee,b=eks,i=2904,x=0.5195992086409938,y=0.57773770500564 a=zee,b=eks,i=2906,x=0.8608071169231579,y=0.9846761059035525 a=eks,b=hat,i=2907,x=0.5503089823322713,y=0.7762987168630092 a=hat,b=hat,i=2908,x=0.06422544393476348,y=0.04831803951278302 a=eks,b=zee,i=2909,x=0.9735920834852287,y=0.6045980049718644 a=pan,b=eks,i=2910,x=0.4552157780113615,y=0.45436268452495654 a=eks,b=pan,i=2911,x=0.3540491877210178,y=0.14296150972097188 a=eks,b=eks,i=2913,x=0.9528487416801219,y=0.9770139821982978 a=zee,b=zee,i=2914,x=0.6713487756784149,y=0.6851459487246977 a=eks,b=zee,i=2916,x=0.3111065625389652,y=0.4900633108457091 a=wye,b=pan,i=2917,x=0.10226439038444546,y=0.32221570886934225 a=hat,b=eks,i=2920,x=0.584814627427767,y=0.9854086527153794 a=pan,b=wye,i=2921,x=0.8092163085387806,y=0.5552811725641776 a=wye,b=zee,i=2923,x=0.5170783036546709,y=0.7221456579996477 a=zee,b=pan,i=2926,x=0.5318019616386042,y=0.9627343736200256 a=hat,b=wye,i=2929,x=0.3314067590262917,y=0.2089161550583003 a=zee,b=wye,i=2931,x=0.4294178052742412,y=0.001833098567169067 a=hat,b=eks,i=2934,x=0.06412360974253373,y=0.22600333579859744 a=pan,b=hat,i=2935,x=0.8626379833482911,y=0.9150292252328203 a=zee,b=wye,i=2936,x=0.5768883618530124,y=0.918139479854031 a=wye,b=pan,i=2937,x=0.5377017444604313,y=0.6977594925111669 a=pan,b=hat,i=2938,x=0.2765222912827068,y=0.20398898222008643 a=wye,b=pan,i=2939,x=0.15430209185442478,y=0.3054947262512059 a=zee,b=zee,i=2940,x=0.33908084985171905,y=0.3559785704920787 a=wye,b=eks,i=2941,x=0.888622878020096,y=0.9305395559526985 a=pan,b=pan,i=2944,x=0.22818877662838155,y=0.08013191447933687 a=hat,b=hat,i=2945,x=0.855770419141142,y=0.9504972075792718 a=pan,b=eks,i=2950,x=0.3557454554545477,y=0.35596931491049777 a=pan,b=pan,i=2952,x=0.6956146036887194,y=0.7094299324737594 a=zee,b=zee,i=2954,x=0.7139612884395727,y=0.521259999124225 a=pan,b=pan,i=2956,x=0.17229422895082336,y=0.24883239435188065 a=pan,b=hat,i=2957,x=0.14582342165786877,y=0.4356307792657701 a=hat,b=eks,i=2959,x=0.8069448445065791,y=0.7001343626890119 a=pan,b=hat,i=2960,x=0.3756435277345719,y=0.047826156911501605 a=eks,b=pan,i=2961,x=0.8176993405474695,y=0.995125161400413 a=wye,b=eks,i=2966,x=0.2641518333282219,y=0.38955465518639776 a=zee,b=zee,i=2967,x=0.42822201314164976,y=0.006074939297309734 a=eks,b=eks,i=2968,x=0.20950457390651211,y=0.07888932379405189 a=hat,b=eks,i=2971,x=0.8266785429565111,y=0.897325116301253 a=pan,b=wye,i=2974,x=0.20451527019757088,y=0.0206184692976914 a=wye,b=pan,i=2975,x=0.51006790151616,y=0.586042056906746 a=pan,b=zee,i=2976,x=0.8782971392557426,y=0.7428023579415594 a=wye,b=hat,i=2977,x=0.9504447063856765,y=0.94067852216513 a=wye,b=hat,i=2979,x=0.3014946499505823,y=0.3166621276039525 a=zee,b=zee,i=2980,x=0.8838963894635692,y=0.8052149644100633 a=wye,b=zee,i=2981,x=0.5154924055050366,y=0.7978166707046667 a=wye,b=eks,i=2982,x=0.613351743297237,y=0.8395323005164117 a=hat,b=hat,i=2986,x=0.012529011658969247,y=0.19751371734088574 a=wye,b=eks,i=2988,x=0.8289886576552059,y=0.9130379115658384 a=zee,b=eks,i=2989,x=0.6115566437731396,y=0.654382371446181 a=eks,b=eks,i=2990,x=0.9192312982792387,y=0.933633690100049 a=eks,b=hat,i=2991,x=0.17088819954927414,y=0.1940915669377936 a=zee,b=eks,i=2992,x=0.7975067562633096,y=0.7188787477650647 a=wye,b=hat,i=2993,x=0.7386984969630342,y=0.5918321915044837 a=hat,b=pan,i=2994,x=0.6175875126511366,y=0.5310338441204902 a=zee,b=wye,i=2995,x=0.1553956256476441,y=0.27030029752780416 a=eks,b=pan,i=2997,x=0.7960098234515162,y=0.9293203088509989 a=zee,b=pan,i=2999,x=0.19942029200045563,y=0.09337986668927678 a=pan,b=hat,i=3000,x=0.7814546932332067,y=0.6000946585621107 a=eks,b=eks,i=3001,x=0.5998159531946954,y=0.7729581156588532 a=hat,b=wye,i=3002,x=0.8285272249030134,y=0.9302564445098462 a=wye,b=hat,i=3005,x=0.05536700717456822,y=0.10240541011411275 a=eks,b=eks,i=3007,x=0.33350360416191926,y=0.2321416996453538 a=hat,b=wye,i=3008,x=0.793700582315604,y=0.7819730529107373 a=wye,b=zee,i=3009,x=0.8588342479923059,y=0.6774442006552894 a=wye,b=wye,i=3010,x=0.7683834748330075,y=0.8315497206524393 a=wye,b=zee,i=3011,x=0.4808351970354847,y=0.4758472571744147 a=zee,b=pan,i=3013,x=0.8669507229743478,y=0.9303002206266048 a=zee,b=pan,i=3014,x=0.6036472794089942,y=0.5392590440608642 a=zee,b=wye,i=3015,x=0.44076973462262803,y=0.22601425557115284 a=eks,b=eks,i=3016,x=0.14517527208436098,y=0.4422293378481955 a=hat,b=hat,i=3018,x=0.46054396234881867,y=0.3731307386931515 a=hat,b=wye,i=3019,x=0.7451272273092002,y=0.9191708709874246 a=pan,b=eks,i=3023,x=0.7972083825965124,y=0.6785915910266607 a=wye,b=pan,i=3024,x=0.2264089359117355,y=0.02834029309178865 a=zee,b=wye,i=3025,x=0.20048730201468612,y=0.22503692249617124 a=zee,b=wye,i=3026,x=0.620337023862303,y=0.8479919985880766 a=eks,b=hat,i=3027,x=0.4902155165931996,y=0.34683593338631313 a=zee,b=eks,i=3029,x=0.11413363994060732,y=0.18491037637118812 a=pan,b=pan,i=3030,x=0.05555019543717121,y=0.25564439988112275 a=zee,b=hat,i=3033,x=0.1945237174643939,y=0.04785693318973694 a=pan,b=eks,i=3036,x=0.6669439868955551,y=0.5083766717543267 a=zee,b=wye,i=3038,x=0.9846294915268529,y=0.7245527090730468 a=wye,b=eks,i=3039,x=0.17248806811657325,y=0.3766117373894895 a=zee,b=hat,i=3040,x=0.09621613036773924,y=0.09274768655857912 a=hat,b=wye,i=3043,x=0.03791889192037379,y=0.3879285406506343 a=eks,b=eks,i=3045,x=0.8779655290898389,y=0.9276702739930572 a=wye,b=zee,i=3047,x=0.8309049399070346,y=0.7082428624476516 a=hat,b=hat,i=3052,x=0.022155682158138235,y=0.22804250396069936 a=zee,b=hat,i=3054,x=0.8975586946419573,y=0.8371128774375303 a=hat,b=eks,i=3057,x=0.6216704870927365,y=0.5368073736943582 a=hat,b=zee,i=3058,x=0.7143749715262198,y=0.8268686099704066 a=pan,b=pan,i=3059,x=0.6284468013862667,y=0.9107779672871813 a=pan,b=hat,i=3060,x=0.6279788132841725,y=0.7966531861283309 a=pan,b=zee,i=3063,x=0.8834284343378148,y=0.8232921415981069 a=wye,b=eks,i=3065,x=0.725831736511898,y=0.5497593420610962 a=wye,b=pan,i=3071,x=0.4419206171851453,y=0.15330946039593318 a=zee,b=hat,i=3072,x=0.2169139656710095,y=0.024309947214042227 a=hat,b=eks,i=3074,x=0.6550427877323648,y=0.571804931654245 a=zee,b=hat,i=3075,x=0.09224547266943217,y=0.27630390686135065 a=wye,b=hat,i=3076,x=0.142566387091713,y=0.27801610209718775 a=hat,b=eks,i=3081,x=0.9256606535733007,y=0.6699893991173689 a=pan,b=wye,i=3082,x=0.02986898401074356,y=0.02865740061148525 a=hat,b=pan,i=3083,x=0.43255930345398574,y=0.16451673283391233 a=eks,b=eks,i=3088,x=0.42383094655044284,y=0.3113550671070515 a=eks,b=pan,i=3090,x=0.45506560432905374,y=0.48045443192943516 a=pan,b=zee,i=3096,x=0.85788069900133,y=0.5286390892779154 a=eks,b=hat,i=3100,x=0.07108443716756485,y=0.31816018481405606 a=hat,b=zee,i=3102,x=0.3343254952473229,y=0.035494955233627556 a=hat,b=wye,i=3104,x=0.3204490612720853,y=0.0691818430184431 a=wye,b=hat,i=3105,x=0.9472477355051101,y=0.6702789389942152 a=eks,b=hat,i=3106,x=0.178408829993969,y=0.47163529118192904 a=wye,b=pan,i=3110,x=0.8967101456216812,y=0.8085016458992474 a=zee,b=eks,i=3112,x=0.4493727221740449,y=0.16704994503241388 a=pan,b=pan,i=3113,x=0.7927985055919656,y=0.9023056637507897 a=eks,b=hat,i=3117,x=0.6278279883921511,y=0.6783776757536581 a=wye,b=pan,i=3118,x=0.0780608220831499,y=0.34219170347854155 a=zee,b=zee,i=3122,x=0.5294122704675105,y=0.6857110786673584 a=eks,b=pan,i=3124,x=0.1911839922513059,y=0.16422636870934193 a=zee,b=eks,i=3126,x=0.2514477009793492,y=0.2498314026061056 a=zee,b=zee,i=3129,x=0.027975828338240083,y=0.46442407872411695 a=eks,b=eks,i=3130,x=0.2455308797278265,y=0.13309025352554837 a=pan,b=eks,i=3132,x=0.7271701616492765,y=0.5650626367615349 a=pan,b=wye,i=3133,x=0.23651873567883164,y=0.3764128593161674 a=hat,b=eks,i=3134,x=0.9970634534653143,y=0.8349282777208548 a=zee,b=zee,i=3135,x=0.34594612609624187,y=0.22911649635660625 a=eks,b=eks,i=3136,x=0.7717959001675492,y=0.8076412924980277 a=zee,b=wye,i=3139,x=0.5684780382451567,y=0.5720874081361975 a=wye,b=zee,i=3140,x=0.366288776550753,y=0.04378768748862749 a=pan,b=eks,i=3144,x=0.5530175425021646,y=0.8944089100243684 a=zee,b=wye,i=3145,x=0.6844032050501776,y=0.7132658565772104 a=hat,b=pan,i=3148,x=0.007135675731816615,y=0.26790355487815287 a=eks,b=hat,i=3150,x=0.5356404368957323,y=0.5401388412379213 a=eks,b=pan,i=3151,x=0.0677212385434749,y=0.4111467324640289 a=hat,b=wye,i=3152,x=0.3304026703418458,y=0.06256059204934794 a=pan,b=wye,i=3154,x=0.16108434266645066,y=0.4223970209540501 a=eks,b=zee,i=3156,x=0.5903395185451377,y=0.6284941637547498 a=eks,b=hat,i=3164,x=0.1678243487522464,y=0.1296504375686386 a=zee,b=zee,i=3168,x=0.3961829207208839,y=0.2622983994021634 a=eks,b=wye,i=3169,x=0.2536595801738487,y=0.08261588685057286 a=zee,b=zee,i=3171,x=0.27819614904389,y=0.11787924109496262 a=eks,b=wye,i=3174,x=0.2566078750567745,y=0.05360968786999365 a=wye,b=pan,i=3177,x=0.6848262739198221,y=0.5321892371672183 a=wye,b=wye,i=3178,x=0.9845151630820034,y=0.6080801511979752 a=zee,b=pan,i=3181,x=0.12870746190802307,y=0.21635539491335465 a=wye,b=hat,i=3186,x=0.31825681489643076,y=0.3867222210818564 a=eks,b=eks,i=3188,x=0.13550843210847796,y=0.20870138759868107 a=pan,b=hat,i=3189,x=0.026314019590705673,y=0.18939923462316988 a=pan,b=wye,i=3192,x=0.7448507872358296,y=0.9175983360847946 a=hat,b=wye,i=3196,x=0.6843473825379831,y=0.7390543536399969 a=wye,b=hat,i=3199,x=0.5950661155016866,y=0.7876820843797742 a=hat,b=eks,i=3200,x=0.6465062834343134,y=0.5218982684290329 a=zee,b=hat,i=3201,x=0.060837643441948086,y=0.06449850438005456 a=hat,b=pan,i=3202,x=0.3172017484222194,y=0.05112537969570785 a=pan,b=hat,i=3203,x=0.11472288877111181,y=0.278764852494509 a=pan,b=pan,i=3206,x=0.6248657938226793,y=0.8681563350185779 a=pan,b=eks,i=3207,x=0.6881257122613184,y=0.804141641741672 a=hat,b=pan,i=3208,x=0.9922055997300119,y=0.9648120708367885 a=eks,b=eks,i=3210,x=0.45293528719314957,y=0.17947685156612458 a=hat,b=hat,i=3211,x=0.5613170559787437,y=0.5352246021671387 a=zee,b=zee,i=3212,x=0.7964737415528816,y=0.5558173183901908 a=pan,b=pan,i=3215,x=0.1413377562828586,y=0.44678231607159036 a=eks,b=wye,i=3216,x=0.29373386203032203,y=0.4631723587487283 a=eks,b=eks,i=3218,x=0.6880428093376797,y=0.9103207963454706 a=hat,b=pan,i=3219,x=0.7474182668789385,y=0.5590391934991645 a=eks,b=pan,i=3220,x=0.9532855829386742,y=0.8800478978800655 a=eks,b=wye,i=3224,x=0.8943590875125406,y=0.6208131688490002 a=eks,b=hat,i=3225,x=0.4838255169683877,y=0.2140927440076752 a=wye,b=pan,i=3227,x=0.7070990060513,y=0.5452513596675552 a=eks,b=hat,i=3228,x=0.9463721381595557,y=0.5282145729291476 a=pan,b=pan,i=3229,x=0.9242949068835605,y=0.6700494745496223 a=hat,b=eks,i=3230,x=0.0584193890994712,y=0.4718114656898049 a=hat,b=wye,i=3232,x=0.34678472033142016,y=0.4446414363995591 a=zee,b=pan,i=3235,x=0.013980830949869794,y=0.2508908461970313 a=hat,b=wye,i=3236,x=0.6969519489568067,y=0.6395027023616561 a=zee,b=eks,i=3238,x=0.012602991921698004,y=0.22634995064837027 a=pan,b=zee,i=3240,x=0.5877493357317612,y=0.548066125189975 a=pan,b=wye,i=3242,x=0.9611019977003785,y=0.681330883403185 a=zee,b=hat,i=3243,x=0.17998018908462488,y=0.2200339352675208 a=hat,b=pan,i=3244,x=0.5444834083087221,y=0.5306965663976729 a=pan,b=zee,i=3245,x=0.7759221188096915,y=0.6025062049702136 a=zee,b=hat,i=3247,x=0.7005880770412263,y=0.9156129778807589 a=eks,b=pan,i=3249,x=0.2874972552716878,y=0.25110619048650307 a=pan,b=eks,i=3250,x=0.2829120767349058,y=0.09835801807841182 a=pan,b=pan,i=3254,x=0.350457431460238,y=0.4302184547620955 a=pan,b=eks,i=3256,x=0.7135080861062042,y=0.5712799934745325 a=zee,b=eks,i=3257,x=0.20289239990952312,y=0.362603885203753 a=wye,b=hat,i=3259,x=0.08107176449903364,y=0.29319048909041645 a=hat,b=zee,i=3260,x=0.8800473905727186,y=0.7552020057189927 a=eks,b=pan,i=3264,x=0.829909329738617,y=0.9788813279683912 a=pan,b=pan,i=3268,x=0.001904789877841595,y=0.2107702989499245 a=wye,b=hat,i=3270,x=0.3399739634399507,y=0.49965908692258354 a=eks,b=hat,i=3271,x=0.11643573302292032,y=0.35717256575069845 a=eks,b=pan,i=3274,x=0.25513593682652125,y=0.39337835968432966 a=zee,b=pan,i=3275,x=0.3232344110781661,y=0.47637792160425796 a=wye,b=hat,i=3279,x=0.9157221686398738,y=0.5671280092243552 a=pan,b=eks,i=3280,x=0.9442806463291782,y=0.9335857464104109 a=pan,b=zee,i=3282,x=0.86450976120493,y=0.8170786827110009 a=pan,b=hat,i=3284,x=0.414038070322006,y=0.4761906775736686 a=pan,b=hat,i=3285,x=0.48063067035883633,y=0.4966350007922782 a=wye,b=pan,i=3286,x=0.7217297767808066,y=0.9865570013659641 a=zee,b=wye,i=3287,x=0.049406279942573406,y=0.4381024486414813 a=eks,b=eks,i=3288,x=0.8590013149268277,y=0.936500197803695 a=zee,b=eks,i=3290,x=0.40120382485623196,y=0.21124233932924863 a=wye,b=zee,i=3292,x=0.9521492688907935,y=0.6087321738215051 a=hat,b=hat,i=3293,x=0.47067984267026386,y=0.2670742530232063 a=eks,b=zee,i=3296,x=0.21986184005655396,y=0.3247997718602733 a=hat,b=pan,i=3297,x=0.9729466791999957,y=0.5771820308689207 a=wye,b=wye,i=3300,x=0.6831118314601023,y=0.5728211330223406 a=eks,b=eks,i=3301,x=0.8886973140588106,y=0.7986263263709766 a=wye,b=hat,i=3304,x=0.4319885161986502,y=0.11333627655422829 a=hat,b=pan,i=3305,x=0.20275914918267568,y=0.3188057450261915 a=eks,b=pan,i=3306,x=0.7128512847755833,y=0.8374752272564904 a=zee,b=zee,i=3308,x=0.24501938424108383,y=0.2620366749016796 a=zee,b=wye,i=3310,x=0.7640238780203037,y=0.5545749802574607 a=zee,b=hat,i=3311,x=0.7391015948965168,y=0.7783105639991896 a=wye,b=pan,i=3312,x=0.9912133558674248,y=0.792510678216663 a=pan,b=pan,i=3314,x=0.6554607159333067,y=0.9770255281674824 a=hat,b=zee,i=3317,x=0.8991863104086707,y=0.8351323082787309 a=wye,b=zee,i=3318,x=0.8368882450019627,y=0.9558667451117976 a=zee,b=wye,i=3323,x=0.956745510209848,y=0.7277085431442248 a=hat,b=eks,i=3326,x=0.07009249966420861,y=0.25922706016534536 a=zee,b=eks,i=3327,x=0.14046308364385085,y=0.059686547583128746 a=eks,b=hat,i=3329,x=0.5694104895719442,y=0.896791407570237 a=pan,b=wye,i=3332,x=0.32760226290506067,y=0.20546606340653295 a=wye,b=pan,i=3334,x=0.3692628443912691,y=0.04456305695935858 a=wye,b=pan,i=3336,x=0.0830596216722399,y=0.42130620217712367 a=eks,b=eks,i=3337,x=0.8502898262908782,y=0.808554017252108 a=wye,b=pan,i=3338,x=0.4258737140465607,y=0.20746386470004785 a=eks,b=eks,i=3340,x=0.8772219678712854,y=0.6738364551822755 a=zee,b=wye,i=3343,x=0.28331195090016237,y=0.3609364099093614 a=zee,b=hat,i=3345,x=0.3236007641260298,y=0.31877697899629276 a=eks,b=eks,i=3348,x=0.38993896958048435,y=0.2335429118604364 a=pan,b=wye,i=3349,x=0.376031512913815,y=0.4929792401226455 a=wye,b=eks,i=3350,x=0.9327767394224131,y=0.7607839483352263 a=hat,b=hat,i=3352,x=0.550190920585813,y=0.7696873798459735 a=wye,b=eks,i=3353,x=0.5877052746857248,y=0.5545585412269964 a=pan,b=zee,i=3354,x=0.2801717488802852,y=0.17038214633612547 a=zee,b=wye,i=3355,x=0.024194919016248595,y=0.13545067511197206 a=wye,b=eks,i=3356,x=0.6380780240701133,y=0.9408087514008974 a=eks,b=eks,i=3361,x=0.6555829047838948,y=0.8920276297804856 a=wye,b=pan,i=3365,x=0.5700040498735991,y=0.8850660888169822 a=hat,b=eks,i=3366,x=0.4556207889124957,y=0.07128477762040519 a=pan,b=hat,i=3372,x=0.43937440052467935,y=0.4563691901909951 a=zee,b=zee,i=3375,x=0.4367949309522303,y=0.013673838744716393 a=zee,b=wye,i=3379,x=0.23678623178363256,y=0.05041356234716987 a=zee,b=hat,i=3381,x=0.7373174186367665,y=0.7964198412222034 a=zee,b=pan,i=3385,x=0.05670367935833176,y=0.2963435909908908 a=wye,b=zee,i=3393,x=0.9822570907790836,y=0.7299006638143403 a=hat,b=eks,i=3394,x=0.6851390329252532,y=0.9050274462052531 a=eks,b=hat,i=3396,x=0.9607050331936833,y=0.7948112675657537 a=hat,b=eks,i=3398,x=0.6053108138597539,y=0.5992354123506696 a=pan,b=eks,i=3399,x=0.048684103098098785,y=0.1633725907413952 a=pan,b=hat,i=3403,x=0.7370714816662562,y=0.8697953979508419 a=pan,b=zee,i=3404,x=0.31468021565829374,y=0.4427420339087643 a=hat,b=hat,i=3406,x=0.45429743426633307,y=0.18433478859999053 a=eks,b=wye,i=3407,x=0.9617046721194548,y=0.9093815718950851 a=pan,b=hat,i=3408,x=0.07330408010392908,y=0.4448942751848767 a=hat,b=pan,i=3410,x=0.08445928966500227,y=0.0703789054946542 a=pan,b=wye,i=3412,x=0.8423508832374376,y=0.6949323092381406 a=wye,b=wye,i=3413,x=0.040886939254273114,y=0.47897154534037656 a=zee,b=wye,i=3414,x=0.25217276547664036,y=0.036553945399371846 a=zee,b=pan,i=3415,x=0.5599190631540909,y=0.924868567464608 a=pan,b=zee,i=3417,x=0.2837666956657495,y=0.38177621330614264 a=zee,b=wye,i=3420,x=0.23090328234417856,y=0.2832500437007679 a=hat,b=hat,i=3423,x=0.0844657406732815,y=0.035913466762956925 a=pan,b=wye,i=3424,x=0.8784967044400372,y=0.604737958747047 a=hat,b=pan,i=3425,x=0.6609492899115649,y=0.5467085754935348 a=pan,b=hat,i=3427,x=0.8416597040795218,y=0.8525979909355791 a=zee,b=zee,i=3433,x=0.8595470542087552,y=0.8498636271417952 a=pan,b=eks,i=3437,x=0.025261472762689308,y=0.12799888376709667 a=eks,b=pan,i=3441,x=0.2537650754015236,y=0.05620296178361983 a=zee,b=eks,i=3446,x=0.2804194256928545,y=0.23979661671683972 a=eks,b=pan,i=3447,x=0.8785960556284188,y=0.7011073928320367 a=zee,b=pan,i=3449,x=0.524308758962708,y=0.6332502139032691 a=pan,b=pan,i=3450,x=0.8213036158322992,y=0.6456770989043784 a=pan,b=pan,i=3451,x=0.8025436057063862,y=0.7060797186033781 a=pan,b=zee,i=3452,x=0.5760028039744347,y=0.6132903113537639 a=eks,b=hat,i=3453,x=0.05717780028504649,y=0.07422864049114308 a=eks,b=hat,i=3454,x=0.9110638506299676,y=0.9591332251303966 a=zee,b=wye,i=3455,x=0.51833979114664,y=0.6939970837947521 a=eks,b=pan,i=3456,x=0.4252463974393268,y=0.39275828072553476 a=eks,b=wye,i=3457,x=0.9769460675156931,y=0.8198707026075209 a=zee,b=hat,i=3460,x=0.588470670827405,y=0.6174548562216325 a=zee,b=wye,i=3461,x=0.1990979839956707,y=0.023566934582078036 a=pan,b=wye,i=3463,x=0.06717794490486906,y=0.48623828005334757 a=pan,b=eks,i=3464,x=0.8155896300126392,y=0.5894548806723218 a=hat,b=eks,i=3467,x=0.9391826144539274,y=0.9934443990210938 a=zee,b=wye,i=3468,x=0.2358251666384058,y=0.4863498031303115 a=pan,b=pan,i=3469,x=0.4258863723941383,y=0.2095061249114658 a=eks,b=hat,i=3470,x=0.47997276184744964,y=0.06659122141821061 a=wye,b=pan,i=3471,x=0.2764533988832033,y=0.3208516601140218 a=pan,b=eks,i=3473,x=0.244297825943407,y=0.31169012284386755 a=pan,b=hat,i=3477,x=0.6611093704674268,y=0.6687601867132502 a=eks,b=pan,i=3478,x=0.08557950916786583,y=0.37592412501843786 a=wye,b=eks,i=3480,x=0.4670447991864045,y=0.46821183232819474 a=eks,b=wye,i=3481,x=0.0018822508391512782,y=0.4734813045472098 a=hat,b=wye,i=3486,x=0.2849558278410832,y=0.3539958226346893 a=zee,b=hat,i=3487,x=0.866561498905371,y=0.6749719599240999 a=zee,b=pan,i=3488,x=0.05018208235181909,y=0.3964541287147757 a=wye,b=eks,i=3489,x=0.8077315081411627,y=0.7479997434577657 a=zee,b=zee,i=3490,x=0.10200642169348917,y=0.31165758001404054 a=zee,b=wye,i=3495,x=0.9934345872412148,y=0.8688371909960622 a=eks,b=zee,i=3497,x=0.9892124342839178,y=0.9379196159380152 a=eks,b=hat,i=3498,x=0.6909633362296115,y=0.5517990615632886 a=pan,b=eks,i=3499,x=0.10345255049088942,y=0.02234404876115914 a=hat,b=eks,i=3501,x=0.002293403878501854,y=0.4879144111797784 a=zee,b=zee,i=3502,x=0.5345656776152677,y=0.9046658240543963 a=zee,b=wye,i=3503,x=0.9917665563701388,y=0.7473226514963157 a=pan,b=eks,i=3506,x=0.3942757672769698,y=0.3445410354016084 a=wye,b=zee,i=3507,x=0.8698234232439451,y=0.6003476393534727 a=zee,b=eks,i=3512,x=0.7150929360997113,y=0.9600218860596139 a=wye,b=hat,i=3516,x=0.44369718809353986,y=0.4894205500423119 a=wye,b=eks,i=3517,x=0.322389903088264,y=0.05702987241410096 a=pan,b=wye,i=3518,x=0.11882480113661997,y=0.3858296816561547 a=zee,b=hat,i=3520,x=0.0928487341029709,y=0.3330386484000102 a=pan,b=pan,i=3521,x=0.22867195583127464,y=0.33603525596818895 a=pan,b=zee,i=3522,x=0.7242093277954511,y=0.831898967676118 a=pan,b=eks,i=3524,x=0.30252752965606133,y=0.24419009734033026 a=zee,b=wye,i=3526,x=0.04315340497837039,y=0.38068506172393646 a=wye,b=eks,i=3529,x=0.16368069077854164,y=0.29359040780910695 a=wye,b=hat,i=3531,x=0.598374987624828,y=0.6802372735701074 a=hat,b=wye,i=3532,x=0.3438213922655702,y=0.28091154307295796 a=pan,b=zee,i=3534,x=0.5808212068478656,y=0.9148727191488517 a=hat,b=eks,i=3537,x=0.23900423399657456,y=0.2588795683734507 a=wye,b=zee,i=3538,x=0.784669987647248,y=0.6504554048913334 a=pan,b=eks,i=3540,x=0.6492339089502173,y=0.6963037893628019 a=pan,b=eks,i=3544,x=0.660437682897796,y=0.9976869991284935 a=wye,b=zee,i=3545,x=0.2910302714747729,y=0.3219344480841323 a=zee,b=wye,i=3546,x=0.6680653445050417,y=0.864596002429439 a=pan,b=zee,i=3547,x=0.7639660507096179,y=0.6193776992233352 a=eks,b=pan,i=3552,x=0.965663991619718,y=0.5930384036340364 a=pan,b=pan,i=3553,x=0.3101812940186591,y=0.2727128797499023 a=zee,b=eks,i=3557,x=0.8571691661862111,y=0.5461980618981016 a=pan,b=hat,i=3561,x=0.19425929127106012,y=0.24083853125540766 a=wye,b=zee,i=3565,x=0.0168691413650478,y=0.18821185808166463 a=zee,b=pan,i=3567,x=0.8121651250250981,y=0.686457266195396 a=wye,b=hat,i=3569,x=0.8089924807824601,y=0.6633779430154854 a=wye,b=wye,i=3571,x=0.38887372145181665,y=0.20495538006007763 a=eks,b=pan,i=3572,x=0.35534650094834996,y=0.47884355218030206 a=zee,b=wye,i=3573,x=0.6566568341390783,y=0.6074553589369566 a=wye,b=wye,i=3575,x=0.6697828249944248,y=0.7638274219999387 a=pan,b=eks,i=3579,x=0.8628339613928006,y=0.8518114551427095 a=eks,b=wye,i=3583,x=0.27009503691464387,y=0.34604318820252766 a=pan,b=eks,i=3584,x=0.29901280575806055,y=0.2606367826081081 a=eks,b=hat,i=3586,x=0.9746502905906368,y=0.5008159057662351 a=hat,b=hat,i=3588,x=0.5428335261613996,y=0.8746507311887247 a=eks,b=hat,i=3589,x=0.04503314762859012,y=0.4498210841109198 a=eks,b=hat,i=3590,x=0.21099486037176274,y=0.15918964285673298 a=pan,b=hat,i=3594,x=0.30914801544685455,y=0.38087457746812736 a=zee,b=zee,i=3601,x=0.2744348997210646,y=0.31854494443399084 a=wye,b=pan,i=3604,x=0.7144947248233644,y=0.6725505298381226 a=wye,b=eks,i=3605,x=0.6414071793103325,y=0.5040707081922082 a=wye,b=hat,i=3607,x=0.2865652516469479,y=0.10334063882665867 a=wye,b=pan,i=3608,x=0.24799522500173943,y=0.029628860448197347 a=eks,b=zee,i=3610,x=0.06251116908017895,y=0.23236755910808227 a=eks,b=hat,i=3611,x=0.2146220845642176,y=0.1332540175691711 a=hat,b=zee,i=3612,x=0.39065626156480215,y=0.09272883365156981 a=pan,b=eks,i=3613,x=0.04243312520650444,y=0.12731535921213588 a=zee,b=hat,i=3614,x=0.9992938250588376,y=0.7586006131131866 a=pan,b=pan,i=3615,x=0.955045779277772,y=0.8579181695107918 a=eks,b=wye,i=3616,x=0.14187634853420827,y=0.2180915198390927 a=wye,b=hat,i=3620,x=0.6713095225608523,y=0.5954491704569804 a=zee,b=pan,i=3621,x=0.4092160575415905,y=0.30771033889968114 a=wye,b=hat,i=3624,x=0.13584832757741117,y=0.382341043184265 a=wye,b=zee,i=3625,x=0.7390723547209095,y=0.6804645486376089 a=pan,b=pan,i=3626,x=0.17323378929158628,y=0.22177151771660586 a=hat,b=hat,i=3627,x=0.27427850969768897,y=0.39696397114401794 a=zee,b=zee,i=3629,x=0.1203621553000902,y=0.03649730823892894 a=eks,b=pan,i=3630,x=0.6432472290390947,y=0.6493064608702905 a=wye,b=zee,i=3631,x=0.5501609784896981,y=0.5442209389820327 a=hat,b=zee,i=3632,x=0.9887195745001507,y=0.8462799528384646 a=zee,b=wye,i=3633,x=0.05961380658144755,y=0.41153390509403887 a=wye,b=pan,i=3634,x=0.779500491235004,y=0.5677694423637825 a=eks,b=pan,i=3637,x=0.5208357640093749,y=0.5659221306135821 a=zee,b=wye,i=3641,x=0.34634768849647446,y=0.1722807458856409 a=zee,b=pan,i=3645,x=0.3353629361519648,y=0.27452402896726324 a=pan,b=pan,i=3648,x=0.9502862550981916,y=0.9040781097596586 a=wye,b=pan,i=3649,x=0.07083776693984412,y=0.42161605810186464 a=hat,b=wye,i=3650,x=0.027750870484755663,y=0.059142569848676385 a=hat,b=zee,i=3651,x=0.7388454792523287,y=0.6889713924377876 a=hat,b=hat,i=3652,x=0.12134854954936014,y=0.12339998428589616 a=pan,b=pan,i=3654,x=0.741537059135207,y=0.9230584052244919 a=eks,b=hat,i=3655,x=0.1316863843779006,y=0.4213001572015598 a=hat,b=eks,i=3656,x=0.14075093892206003,y=0.21208162198013836 a=hat,b=eks,i=3658,x=0.8537796341502905,y=0.5982760622218769 a=pan,b=hat,i=3659,x=0.09110243804094742,y=0.35916077607118146 a=zee,b=hat,i=3661,x=0.32611268243475844,y=0.12873678851672 a=hat,b=zee,i=3662,x=0.7673614981915601,y=0.7295742505814344 a=eks,b=eks,i=3664,x=0.28693486076576824,y=0.19397030458410913 a=hat,b=wye,i=3666,x=0.7295635205285994,y=0.6119784896875866 a=zee,b=eks,i=3668,x=0.5993837930923437,y=0.7509474480036791 a=eks,b=eks,i=3669,x=0.9355633368933711,y=0.9694655041497229 a=zee,b=pan,i=3670,x=0.4986606323353615,y=0.3252967314272578 a=hat,b=zee,i=3671,x=0.9851663975549066,y=0.7574307817453141 a=wye,b=eks,i=3672,x=0.8646473696955588,y=0.8313013386958765 a=pan,b=wye,i=3673,x=0.2515908234672535,y=0.056725699540206675 a=eks,b=eks,i=3674,x=0.3536670370401426,y=0.3355576484883924 a=eks,b=pan,i=3676,x=0.8723087423163797,y=0.6109859185908899 a=zee,b=pan,i=3678,x=0.8491710196926309,y=0.6558159307696828 a=wye,b=zee,i=3680,x=0.7425818200196079,y=0.9810014583943923 a=wye,b=wye,i=3681,x=0.02721573926299492,y=0.07804891308055895 a=hat,b=pan,i=3686,x=0.9301169302245861,y=0.7982783216031746 a=zee,b=hat,i=3688,x=0.5723630888086361,y=0.8172243896570902 a=hat,b=wye,i=3689,x=0.8355718873799872,y=0.8007108863141698 a=zee,b=hat,i=3692,x=0.573338911032452,y=0.5241388333942388 a=hat,b=pan,i=3693,x=0.7781206646766762,y=0.5080484241731826 a=wye,b=wye,i=3700,x=0.9046703649949718,y=0.7600607720698596 a=pan,b=hat,i=3701,x=0.7653688084959293,y=0.9589886741282106 a=zee,b=eks,i=3704,x=0.6944927784356837,y=0.6778190994819128 a=eks,b=zee,i=3706,x=0.28192270569849476,y=0.3669079489151894 a=wye,b=hat,i=3707,x=0.32172668895407197,y=0.23641326221038772 a=eks,b=wye,i=3709,x=0.5793435558579774,y=0.5284203604486059 a=wye,b=hat,i=3711,x=0.7062248515236889,y=0.7592554719549557 a=eks,b=hat,i=3712,x=0.20158466043698664,y=0.2506153993203297 a=hat,b=zee,i=3713,x=0.5453918537789201,y=0.9591221613154766 a=pan,b=wye,i=3714,x=0.7007443629312707,y=0.69979486340907 a=hat,b=zee,i=3715,x=0.4982158038764617,y=0.1845463889797414 a=wye,b=zee,i=3717,x=0.20372686286113306,y=0.48178229369817827 a=eks,b=pan,i=3719,x=0.4534387451777433,y=0.22731879465386806 a=hat,b=eks,i=3727,x=0.02778608789107495,y=0.19112025359038776 a=pan,b=wye,i=3729,x=0.6339377797999709,y=0.7940228471998122 a=hat,b=hat,i=3731,x=0.03433461671749849,y=0.37009846068918584 a=wye,b=pan,i=3734,x=0.5747797481156508,y=0.8274654836314349 a=eks,b=eks,i=3736,x=0.8706261619141413,y=0.5428739515744351 a=wye,b=pan,i=3737,x=0.5574876609423702,y=0.8504937121138577 a=zee,b=pan,i=3741,x=0.9571682809413955,y=0.6570144668674751 a=eks,b=pan,i=3743,x=0.4905151151584467,y=0.320903002068355 a=wye,b=zee,i=3744,x=0.7710752122842248,y=0.6182369915664692 a=zee,b=pan,i=3745,x=0.0634219140814758,y=0.0909389524119274 a=pan,b=hat,i=3746,x=0.016317522611819957,y=0.4500858677522094 a=hat,b=hat,i=3747,x=0.2731453345797118,y=0.3612727190378229 a=zee,b=zee,i=3748,x=0.7692098314967419,y=0.723183352513404 a=hat,b=pan,i=3752,x=0.27781099183901203,y=0.24166942932110203 a=eks,b=eks,i=3753,x=0.9130333710330752,y=0.9434343087469547 a=pan,b=hat,i=3754,x=0.39530750680824867,y=0.285187450605236 a=wye,b=zee,i=3755,x=0.5821904936762373,y=0.9440238426951152 a=eks,b=eks,i=3756,x=0.3151274913498434,y=0.2613270252067468 a=wye,b=zee,i=3757,x=0.27126594951001737,y=0.2696036535766695 a=pan,b=zee,i=3758,x=0.1144851508437299,y=0.43717693060689256 a=wye,b=wye,i=3759,x=0.8659325090962396,y=0.500920016668498 a=pan,b=pan,i=3761,x=0.6277167190080807,y=0.820462327799342 a=hat,b=eks,i=3763,x=0.702517766279011,y=0.5201760035681132 a=hat,b=pan,i=3764,x=0.9684950471794708,y=0.9824729038297494 a=pan,b=pan,i=3765,x=0.7505504157884441,y=0.5688693727587826 a=hat,b=zee,i=3766,x=0.3053846255939139,y=0.29250711868083323 a=pan,b=wye,i=3768,x=0.39157640275144845,y=0.29940355516568284 a=wye,b=hat,i=3769,x=0.2813634801023107,y=0.33793045381955156 a=wye,b=zee,i=3770,x=0.3006731850375737,y=0.41117593228974025 a=eks,b=zee,i=3771,x=0.8966388980866674,y=0.6767775863177413 a=zee,b=eks,i=3772,x=0.09712051675224176,y=0.1992258338913524 a=eks,b=eks,i=3774,x=0.10098411790939343,y=0.23016371716573425 a=wye,b=eks,i=3777,x=0.5229176412769544,y=0.8857285221477562 a=eks,b=pan,i=3778,x=0.5543756678908779,y=0.8979653327985948 a=eks,b=pan,i=3780,x=0.6536521341657655,y=0.6026553230815477 a=hat,b=eks,i=3781,x=0.22056344697345842,y=0.16263581703146368 a=wye,b=eks,i=3784,x=0.2896043360112557,y=0.03933436470492446 a=pan,b=wye,i=3788,x=0.41697687514270476,y=0.3863350720666795 a=eks,b=pan,i=3789,x=0.2647880014677908,y=0.495992120309258 a=pan,b=wye,i=3790,x=0.4871902945382671,y=0.22753844996371497 a=zee,b=wye,i=3791,x=0.9587582682512387,y=0.9041552661112677 a=pan,b=eks,i=3792,x=0.8303342159408211,y=0.7063245550219001 a=pan,b=eks,i=3793,x=0.43293237945019947,y=0.26733489278694356 a=zee,b=wye,i=3794,x=0.8976337510372844,y=0.8750629709298201 a=hat,b=pan,i=3795,x=0.8432372103239337,y=0.9510111805966026 a=zee,b=pan,i=3798,x=0.9979923700274865,y=0.6588578150120853 a=hat,b=eks,i=3800,x=0.6540911583411234,y=0.6156768180814669 a=eks,b=zee,i=3801,x=0.41291944190449625,y=0.04630035513500563 a=hat,b=hat,i=3805,x=0.9077137203924546,y=0.6604195772537097 a=zee,b=pan,i=3806,x=0.4130639175002534,y=0.4140992672289935 a=eks,b=pan,i=3808,x=0.18073645069225752,y=0.47471602068305085 a=hat,b=eks,i=3809,x=0.07620205058855944,y=0.41909302154687966 a=wye,b=wye,i=3811,x=0.9262768212215141,y=0.583254627467812 a=hat,b=zee,i=3813,x=0.8381595697055793,y=0.8082122321715743 a=hat,b=pan,i=3814,x=0.3227628236617065,y=0.09200255049758854 a=wye,b=pan,i=3817,x=0.21834728153634142,y=0.009580087519049041 a=wye,b=zee,i=3819,x=0.6612561643616807,y=0.647643437411651 a=pan,b=pan,i=3821,x=0.09753442464986295,y=0.3452736158284476 a=hat,b=wye,i=3823,x=0.0660248906480213,y=0.4768167157060277 a=wye,b=wye,i=3825,x=0.7412307338094147,y=0.8357569402941348 a=pan,b=zee,i=3826,x=0.8700896084310135,y=0.7743947935823393 a=hat,b=hat,i=3828,x=0.4439300237744592,y=0.3540302359317383 a=wye,b=hat,i=3830,x=0.31602199194810077,y=0.23756301234064214 a=pan,b=eks,i=3833,x=0.9435147604130275,y=0.6343874692425551 a=pan,b=hat,i=3834,x=0.7491688531360436,y=0.6632149460503455 a=wye,b=pan,i=3836,x=0.5783001097508949,y=0.5326591809573153 a=wye,b=eks,i=3838,x=0.16276307163297787,y=0.4480412721243018 a=wye,b=wye,i=3841,x=0.7854392875246197,y=0.7264036810522736 a=zee,b=wye,i=3842,x=0.9500031218945214,y=0.9557435110983296 a=wye,b=eks,i=3849,x=0.7149976391333995,y=0.9748913470930238 a=eks,b=zee,i=3851,x=0.6884645549243478,y=0.6729540888918134 a=wye,b=wye,i=3852,x=0.16575767054134194,y=0.3519742254585112 a=pan,b=zee,i=3856,x=0.7166199842938143,y=0.5985908973683398 a=eks,b=pan,i=3857,x=0.911885736627155,y=0.7775693985993537 a=eks,b=pan,i=3860,x=0.16404594209083445,y=0.2945650928508321 a=pan,b=wye,i=3863,x=0.8914098448143842,y=0.941827688174933 a=eks,b=pan,i=3865,x=0.6410821318604495,y=0.742344518102107 a=eks,b=eks,i=3866,x=0.8820740686865273,y=0.6336399556322359 a=pan,b=pan,i=3868,x=0.5708876065677694,y=0.6788408195369369 a=hat,b=zee,i=3870,x=0.40688870301241575,y=0.4640784108862729 a=wye,b=wye,i=3872,x=0.47105100438757685,y=0.05894343228765331 a=zee,b=wye,i=3874,x=0.36954687122878715,y=0.07524269626487912 a=pan,b=zee,i=3875,x=0.8656993436002198,y=0.7910484890727197 a=wye,b=wye,i=3876,x=0.03808754965335226,y=0.08658971281465833 a=hat,b=hat,i=3880,x=0.4235813324669898,y=0.24387827945280804 a=hat,b=hat,i=3881,x=0.7822034723161025,y=0.7478339704565765 a=hat,b=eks,i=3882,x=0.011719496883464853,y=0.24640876061080674 a=eks,b=hat,i=3883,x=0.4614594041430371,y=0.3205017019419516 a=wye,b=zee,i=3885,x=0.31672532313467505,y=0.2365343741445356 a=zee,b=wye,i=3889,x=0.039039225578129,y=0.043618607590064085 a=wye,b=eks,i=3890,x=0.1974840445022984,y=0.43475405724957294 a=pan,b=eks,i=3891,x=0.9382818311518488,y=0.9030005498802104 a=eks,b=eks,i=3893,x=0.4046249389793575,y=0.21056190964042465 a=wye,b=zee,i=3894,x=0.7443136068289423,y=0.8294047544954046 a=hat,b=pan,i=3897,x=0.49376649897367464,y=0.13401013066245737 a=pan,b=hat,i=3900,x=0.8799773683889426,y=0.5220746421238783 a=zee,b=eks,i=3902,x=0.8645468539063139,y=0.9700412096469742 a=hat,b=hat,i=3903,x=0.6603175490464367,y=0.7332253490191969 a=hat,b=hat,i=3905,x=0.37058852723699554,y=0.10112929497538448 a=eks,b=zee,i=3909,x=0.8701294324647131,y=0.6010009857684786 a=eks,b=pan,i=3910,x=0.7754775924406334,y=0.9607498923245504 a=eks,b=hat,i=3912,x=0.40688370124160333,y=0.3725099736322035 a=hat,b=hat,i=3919,x=0.20968623039533885,y=0.2249710535207634 a=eks,b=wye,i=3920,x=0.06633524516092837,y=0.21897455790581 a=wye,b=eks,i=3925,x=0.9444615936887226,y=0.5492757409492689 a=pan,b=eks,i=3926,x=0.2577383831501502,y=0.42247048365748696 a=hat,b=pan,i=3928,x=0.3294192690721903,y=0.0018064795955691215 a=pan,b=wye,i=3929,x=0.5373694134669578,y=0.6408298650436733 a=wye,b=zee,i=3930,x=0.3772473940400355,y=0.4855477755417952 a=pan,b=hat,i=3931,x=0.8947844528349447,y=0.6976181039979583 a=wye,b=eks,i=3932,x=0.902042488611117,y=0.8695780909283909 a=eks,b=wye,i=3935,x=0.8719220728834155,y=0.626436829723036 a=wye,b=wye,i=3938,x=0.4264030481171944,y=0.2469737981294069 a=pan,b=hat,i=3940,x=0.37339956142433084,y=0.23248823182301037 a=eks,b=zee,i=3942,x=0.7678757943544514,y=0.9693217394374674 a=wye,b=hat,i=3943,x=0.29550708533363845,y=0.16362618484177738 a=wye,b=eks,i=3946,x=0.8350585462480241,y=0.7491629688087337 a=wye,b=zee,i=3949,x=0.3676627709059406,y=0.3957927902894449 a=zee,b=pan,i=3950,x=0.32474388588887126,y=0.02474711989630063 a=zee,b=eks,i=3953,x=0.30922267009534077,y=0.3284230853853207 a=hat,b=pan,i=3954,x=0.052368455214725995,y=0.4715978875853839 a=hat,b=zee,i=3958,x=0.07310839831115146,y=0.32925431162438823 a=pan,b=hat,i=3959,x=0.1292574457299427,y=0.3582879075778822 a=pan,b=zee,i=3960,x=0.19211441013639674,y=0.11950330832710931 a=wye,b=eks,i=3964,x=0.9210830069555165,y=0.5838970142942722 a=zee,b=wye,i=3965,x=0.23984259901508576,y=0.26442599713920145 a=zee,b=wye,i=3967,x=0.9985449436152721,y=0.7330838738578122 a=hat,b=pan,i=3971,x=0.47236749903854525,y=0.49755810812875845 a=hat,b=hat,i=3974,x=0.2255823178745917,y=0.3328848639919585 a=eks,b=eks,i=3976,x=0.3872364913819858,y=0.12628018436476995 a=eks,b=wye,i=3979,x=0.05509300519176841,y=0.3449069313995392 a=eks,b=pan,i=3981,x=0.798588528905017,y=0.7451168881460923 a=wye,b=eks,i=3982,x=0.7480880614402182,y=0.8419207681331152 a=wye,b=zee,i=3983,x=0.8362240426090267,y=0.77769018412775 a=zee,b=zee,i=3988,x=0.7335921993524305,y=0.5879895671878599 a=wye,b=pan,i=3990,x=0.2551633201471506,y=0.4633660311722343 a=pan,b=zee,i=3991,x=0.07557797117002352,y=0.03446642347570361 a=zee,b=eks,i=3992,x=0.7507600776739561,y=0.6732032182262292 a=hat,b=zee,i=3993,x=0.08221997898229427,y=0.21489690844146592 a=hat,b=eks,i=3995,x=0.6854597775410988,y=0.6047357220116547 a=pan,b=hat,i=3996,x=0.4669100032261838,y=0.48298621327550606 a=eks,b=hat,i=3997,x=0.8201134204882613,y=0.5748852394805374 a=wye,b=hat,i=4001,x=0.8174301789619988,y=0.9053657573378745 a=wye,b=pan,i=4004,x=0.7607827500015804,y=0.6235619294990873 a=zee,b=hat,i=4006,x=0.48789661545234886,y=0.21227412408894908 a=eks,b=hat,i=4008,x=0.890243383339597,y=0.7267223805200799 a=hat,b=pan,i=4009,x=0.5706952995715363,y=0.9230695483570237 a=zee,b=hat,i=4010,x=0.42440597576906447,y=0.0704425276034597 a=hat,b=wye,i=4011,x=0.24251335510099137,y=0.23960695465439596 a=eks,b=pan,i=4013,x=0.8704264127290353,y=0.5876599831119824 a=hat,b=pan,i=4014,x=0.31319409877544535,y=0.37600379424562247 a=pan,b=hat,i=4015,x=0.6791412275551999,y=0.8868908402993898 a=pan,b=eks,i=4016,x=0.8587762124701115,y=0.7327173343378633 a=hat,b=pan,i=4018,x=0.3048776737346697,y=0.13707959214248555 a=zee,b=hat,i=4021,x=0.3130407621764443,y=0.2693181610377101 a=pan,b=pan,i=4023,x=0.10367305449954967,y=0.022130374916290774 a=pan,b=zee,i=4024,x=0.2180038149057033,y=0.2890891058720141 a=hat,b=wye,i=4025,x=0.6365723951389777,y=0.7003325245087676 a=zee,b=eks,i=4030,x=0.3317839760740481,y=0.4161099049929635 a=pan,b=eks,i=4031,x=0.09704619121471669,y=0.0779275379233505 a=wye,b=wye,i=4032,x=0.2974124725329491,y=0.20863438296756043 a=wye,b=pan,i=4033,x=0.44164928623031885,y=0.3935479870985933 a=hat,b=pan,i=4036,x=0.3630052335487458,y=0.1756001401202808 a=pan,b=wye,i=4037,x=0.40101967210862355,y=0.21622386613658062 a=zee,b=eks,i=4038,x=0.31593174924868916,y=0.30590560916984444 a=wye,b=eks,i=4041,x=0.6663441339123051,y=0.8594459082303051 a=zee,b=wye,i=4044,x=0.4445193542875734,y=0.10451265229731932 a=eks,b=zee,i=4045,x=0.7400078317069471,y=0.6537027971576772 a=zee,b=wye,i=4049,x=0.3865785757267529,y=0.3257613178120228 a=zee,b=pan,i=4050,x=0.22133212632288612,y=0.46497223755296413 a=wye,b=pan,i=4051,x=0.46330422466377885,y=0.0013216245762560641 a=eks,b=eks,i=4056,x=0.8643394873777513,y=0.9659257127064651 a=pan,b=pan,i=4057,x=0.3102888737344549,y=0.40268801525857945 a=zee,b=zee,i=4061,x=0.5943115025128368,y=0.7926566656770357 a=eks,b=eks,i=4062,x=0.9875301794451499,y=0.7335426236266079 a=zee,b=wye,i=4069,x=0.969881192737605,y=0.7454405956242405 a=hat,b=eks,i=4070,x=0.18629806750635058,y=0.20897903127133244 a=pan,b=eks,i=4073,x=0.2657367745661936,y=0.2985150423046431 a=wye,b=pan,i=4074,x=0.7170683734519407,y=0.6616939907637078 a=hat,b=pan,i=4075,x=0.7741097521171826,y=0.5862044466287508 a=eks,b=zee,i=4080,x=0.6036589730049234,y=0.5196679309887058 a=hat,b=hat,i=4082,x=0.5572557445251078,y=0.624066652987969 a=wye,b=wye,i=4083,x=0.8666445318722942,y=0.767288613574896 a=wye,b=eks,i=4085,x=0.5272061090337726,y=0.9162627017806118 a=eks,b=wye,i=4086,x=0.3119331822264977,y=0.4703087590730718 a=wye,b=zee,i=4087,x=0.041369624776661396,y=0.1706574091421187 a=pan,b=eks,i=4088,x=0.6090012823832082,y=0.812489654491081 a=wye,b=zee,i=4090,x=0.08760748700129917,y=0.046823223997924046 a=pan,b=pan,i=4091,x=0.9477496006595305,y=0.6877721274230629 a=pan,b=eks,i=4092,x=0.05823591729943611,y=0.2271541631902052 a=zee,b=wye,i=4093,x=0.5115949427264939,y=0.7463065447615764 a=hat,b=hat,i=4094,x=0.8294711965470426,y=0.5100796086516896 a=pan,b=wye,i=4095,x=0.002245348719915996,y=0.4758218988941505 a=eks,b=zee,i=4097,x=0.5977012193299909,y=0.6349007809350186 a=wye,b=wye,i=4101,x=0.9070001852862156,y=0.5366667269362855 a=wye,b=zee,i=4103,x=0.40338842748518,y=0.16714248436837198 a=wye,b=hat,i=4106,x=0.6762148011530986,y=0.7998537880048552 a=eks,b=zee,i=4108,x=0.3415946367341153,y=0.19830581897594968 a=eks,b=pan,i=4110,x=0.7201591775410024,y=0.9280174950278048 a=wye,b=hat,i=4111,x=0.27092702426036697,y=0.40264205326846036 a=wye,b=hat,i=4114,x=0.5672845724991237,y=0.8126100904189216 a=wye,b=zee,i=4119,x=0.14069101423742136,y=0.3916394205657444 a=eks,b=hat,i=4120,x=0.7278136147317754,y=0.992128682834371 a=wye,b=eks,i=4121,x=0.3436640653132741,y=0.12875649374791853 a=hat,b=zee,i=4123,x=0.11667168949423246,y=0.09343624851787202 a=zee,b=zee,i=4124,x=0.3762744289665654,y=0.4657534810646099 a=pan,b=zee,i=4125,x=0.8167559403831369,y=0.6726503484988995 a=zee,b=hat,i=4126,x=0.16302778730181566,y=0.2748655824617119 a=wye,b=wye,i=4127,x=0.7262693332963976,y=0.7800792471160094 a=wye,b=zee,i=4132,x=0.14673501967206204,y=0.2171503552857429 a=pan,b=eks,i=4134,x=0.5678246594857959,y=0.8501122230105806 a=zee,b=eks,i=4136,x=0.9750589992032552,y=0.8792931621208594 a=pan,b=eks,i=4137,x=0.727677709722926,y=0.990782873469676 a=hat,b=eks,i=4138,x=0.680011121560662,y=0.8738045887343792 a=pan,b=eks,i=4139,x=0.8882078496509985,y=0.7037523368580344 a=pan,b=pan,i=4141,x=0.7099916507740912,y=0.7023882125149881 a=zee,b=hat,i=4142,x=0.59845620196533,y=0.7654415799243958 a=pan,b=eks,i=4144,x=0.20066813487611335,y=0.14876626920283553 a=eks,b=eks,i=4145,x=0.15065242524890976,y=0.12428817259719527 a=eks,b=hat,i=4146,x=0.24650476137003852,y=0.24493489109337752 a=pan,b=wye,i=4148,x=0.3413539884717429,y=0.42693818289018026 a=hat,b=wye,i=4151,x=0.9300760758556822,y=0.7773525646273065 a=eks,b=eks,i=4152,x=0.1811147851470688,y=0.27238019374865363 a=zee,b=zee,i=4153,x=0.5846722719463249,y=0.6311555286184487 a=pan,b=zee,i=4155,x=0.09454282552502047,y=0.49923403772444375 a=hat,b=eks,i=4156,x=0.15799120592162896,y=0.038371812406094774 a=eks,b=zee,i=4157,x=0.4858235480097448,y=0.09279407391803784 a=wye,b=pan,i=4158,x=0.1333970187468101,y=0.28784426376744954 a=zee,b=wye,i=4159,x=0.16633086096833194,y=0.24966226951484904 a=hat,b=wye,i=4160,x=0.8054114157818849,y=0.7345641356600717 a=zee,b=wye,i=4161,x=0.0010540410989509086,y=0.4824535316499434 a=eks,b=eks,i=4164,x=0.1814557125976639,y=0.16922072136830046 a=hat,b=hat,i=4165,x=0.1667557442764379,y=0.4707835711078464 a=zee,b=eks,i=4167,x=0.7619530390058822,y=0.930540767502347 a=wye,b=zee,i=4170,x=0.9950566917608218,y=0.8929860757345622 a=wye,b=pan,i=4179,x=0.8403305474491944,y=0.5265486487825841 a=hat,b=hat,i=4181,x=0.9215787418719625,y=0.87388922229494 a=wye,b=hat,i=4183,x=0.7734961393992563,y=0.8972101418171253 a=wye,b=eks,i=4184,x=0.26453922756144566,y=0.04144136482622762 a=hat,b=eks,i=4187,x=0.9865778952946068,y=0.9315331182266391 a=pan,b=wye,i=4193,x=0.782060968571005,y=0.5226067196250769 a=zee,b=hat,i=4194,x=0.6917599608609465,y=0.7645848884839161 a=wye,b=pan,i=4203,x=0.24740078542575394,y=0.031517413903408564 a=eks,b=wye,i=4204,x=0.09707778409356904,y=0.4413369985080463 a=eks,b=zee,i=4206,x=0.591250716216349,y=0.533942741704139 a=eks,b=eks,i=4208,x=0.23584245665114634,y=0.13929514505423546 a=wye,b=eks,i=4211,x=0.5693885676546375,y=0.8180582438424654 a=zee,b=zee,i=4213,x=0.6569921162319814,y=0.9398725266121587 a=zee,b=eks,i=4214,x=0.6757239578204182,y=0.6370305085828928 a=pan,b=wye,i=4217,x=0.4097976618902073,y=0.141878119206427 a=eks,b=wye,i=4222,x=0.2916049582954635,y=0.36479303527285845 a=hat,b=zee,i=4224,x=0.5666319712329421,y=0.5421871427604233 a=pan,b=eks,i=4229,x=0.651806061031575,y=0.6877628315760286 a=eks,b=hat,i=4231,x=0.9813730880370696,y=0.8073301729919906 a=hat,b=hat,i=4232,x=0.4406941528960675,y=0.11038994093232624 a=wye,b=pan,i=4233,x=0.6049346739736081,y=0.8481638285484625 a=wye,b=pan,i=4234,x=0.03250269370708647,y=0.07284046091092433 a=pan,b=hat,i=4240,x=0.7490446337745393,y=0.7787017014295363 a=zee,b=hat,i=4242,x=0.34372514541539545,y=0.49770081510285935 a=hat,b=eks,i=4243,x=0.38836962308546263,y=0.20018023403843987 a=pan,b=wye,i=4244,x=0.7365286003534705,y=0.9834124894169503 a=hat,b=zee,i=4245,x=0.8079109744541904,y=0.7703976742527068 a=zee,b=wye,i=4246,x=0.4282487915196205,y=0.20203065558191458 a=pan,b=eks,i=4247,x=0.9507204029429733,y=0.5630361304031504 a=eks,b=wye,i=4248,x=0.5065699052598817,y=0.6709355384501077 a=zee,b=pan,i=4251,x=0.36882904197494304,y=0.20694570729434147 a=zee,b=zee,i=4252,x=0.18869049168164287,y=0.2881249393129065 a=pan,b=eks,i=4253,x=0.8529162429192656,y=0.6126252561626568 a=pan,b=hat,i=4259,x=0.5012993133229816,y=0.9840303477621715 a=eks,b=pan,i=4260,x=0.0557110727165222,y=0.3692997658300152 a=zee,b=wye,i=4263,x=0.5008782411049667,y=0.6537828452513129 a=hat,b=eks,i=4267,x=0.6709709261548794,y=0.6826054557997793 a=wye,b=hat,i=4270,x=0.05437547367302842,y=0.3843634628840725 a=eks,b=eks,i=4272,x=0.42076370727497103,y=0.347103929260111 a=eks,b=eks,i=4274,x=0.7194619239494552,y=0.6726333368969638 a=eks,b=wye,i=4276,x=0.03269653193879951,y=0.29083447280996944 a=zee,b=hat,i=4279,x=0.919407700741633,y=0.6700497097456894 a=eks,b=pan,i=4280,x=0.09769799852915939,y=0.3471066706498296 a=pan,b=zee,i=4285,x=0.2957451251158941,y=0.23349218064678878 a=pan,b=eks,i=4287,x=0.22955891589246613,y=0.2437355707416211 a=hat,b=zee,i=4288,x=0.2100291042828707,y=0.3046125296846791 a=hat,b=zee,i=4289,x=0.6942460642160058,y=0.871648415206408 a=wye,b=pan,i=4290,x=0.13303046989523815,y=0.45261676602514167 a=wye,b=wye,i=4291,x=0.24091267860783117,y=0.432502161153847 a=zee,b=hat,i=4295,x=0.866742316822531,y=0.5669492043473316 a=pan,b=hat,i=4297,x=0.020837302984029304,y=0.3069132274412595 a=hat,b=wye,i=4299,x=0.6559693329859475,y=0.9101410668227939 a=pan,b=pan,i=4300,x=0.14308736404653355,y=0.35525668832657153 a=eks,b=hat,i=4301,x=0.04475741710473613,y=0.3360654229410476 a=zee,b=pan,i=4305,x=0.054247648849443775,y=0.03062117326702829 a=hat,b=zee,i=4307,x=0.6572769759538587,y=0.7762188360555565 a=zee,b=zee,i=4308,x=0.6244811945148983,y=0.6455417265947343 a=wye,b=zee,i=4310,x=0.3157871729124738,y=0.3917102144253892 a=zee,b=hat,i=4313,x=0.40564280799464325,y=0.33455931413035944 a=hat,b=zee,i=4314,x=0.26557751620121417,y=0.030582294685487232 a=wye,b=eks,i=4315,x=0.8346822718173391,y=0.9087526385931736 a=eks,b=wye,i=4317,x=0.5533052426698345,y=0.9963296753932288 a=eks,b=hat,i=4319,x=0.587710279503696,y=0.7637256058032382 a=hat,b=eks,i=4320,x=0.225195776008963,y=0.34680409151838987 a=eks,b=eks,i=4321,x=0.3743649517286406,y=0.371323975760271 a=pan,b=wye,i=4324,x=0.8265091425517825,y=0.8730857418980851 a=wye,b=hat,i=4325,x=0.18762256928648036,y=0.3496377335361346 a=pan,b=zee,i=4327,x=0.8574481014982461,y=0.5295177741370016 a=eks,b=hat,i=4328,x=0.04469772107287828,y=0.1558945876794342 a=zee,b=wye,i=4329,x=0.040009010165471426,y=0.23762769464838596 a=wye,b=eks,i=4330,x=0.7337424822041352,y=0.9253645788362634 a=zee,b=eks,i=4332,x=0.6650861493530829,y=0.9532385654163494 a=wye,b=zee,i=4333,x=0.623256894200598,y=0.9959963338862539 a=hat,b=hat,i=4334,x=0.5194251677645445,y=0.6069457992071033 a=eks,b=eks,i=4335,x=0.27590012941997233,y=0.4710389173795224 a=eks,b=wye,i=4336,x=0.20559084127748029,y=0.07907344682124973 a=eks,b=wye,i=4338,x=0.7956872034220226,y=0.5293505141201019 a=zee,b=hat,i=4340,x=0.7603664092180368,y=0.9580821743227704 a=wye,b=wye,i=4344,x=0.052662357337272314,y=0.29674416350945576 a=wye,b=eks,i=4345,x=0.32377948428256254,y=0.44346746414092775 a=wye,b=hat,i=4348,x=0.4821078789121165,y=0.4162262532349117 a=wye,b=hat,i=4349,x=0.4367902393016294,y=0.05920613613537973 a=eks,b=hat,i=4350,x=0.9339368174600853,y=0.7317847021280102 a=zee,b=hat,i=4351,x=0.9429615758129121,y=0.5240015841208292 a=hat,b=zee,i=4352,x=0.0664957669868742,y=8.818962627266114e-05 a=pan,b=eks,i=4356,x=0.01315481017386444,y=0.44644705644627847 a=wye,b=pan,i=4357,x=0.15872648196015937,y=0.4101120817770719 a=eks,b=hat,i=4359,x=0.18749105355156304,y=0.031119717506070232 a=wye,b=eks,i=4360,x=0.5994338059975802,y=0.7593584300322925 a=pan,b=pan,i=4362,x=0.4776831446864783,y=0.31255268452634855 a=pan,b=pan,i=4365,x=0.8056978268678051,y=0.6122184248222929 a=zee,b=eks,i=4367,x=0.5479247041679578,y=0.8471361139630293 a=hat,b=hat,i=4368,x=0.6173031043354198,y=0.7380826201700894 a=hat,b=pan,i=4369,x=0.18322206558953436,y=0.3662885008446586 a=zee,b=pan,i=4370,x=0.8569969483007317,y=0.731735360698434 a=zee,b=zee,i=4371,x=0.20408101154886704,y=0.43495561327109344 a=zee,b=pan,i=4373,x=0.39321439524831203,y=0.2914282319820135 a=zee,b=hat,i=4374,x=0.683824883019394,y=0.585513739811086 a=eks,b=zee,i=4376,x=0.8528651690503563,y=0.6839515405337084 a=hat,b=eks,i=4378,x=0.05864089512370707,y=0.3851321842794584 a=hat,b=eks,i=4379,x=0.385346641589309,y=0.49130997093061135 a=wye,b=eks,i=4380,x=0.41688102647846714,y=0.4373087113569425 a=eks,b=eks,i=4383,x=0.8187617783793841,y=0.9557936564036845 a=pan,b=eks,i=4384,x=0.5100350554093268,y=0.8092077539642156 a=pan,b=wye,i=4386,x=0.03535725248176258,y=0.21559585940453474 a=eks,b=zee,i=4387,x=0.5578706674280356,y=0.5892456559407706 a=zee,b=hat,i=4388,x=0.3301766575217969,y=0.3233192495545678 a=hat,b=wye,i=4389,x=0.17144446980658334,y=0.17462284811463846 a=wye,b=eks,i=4392,x=0.08391983953449689,y=0.4685350106442322 a=eks,b=hat,i=4394,x=0.6446893978656929,y=0.742983523935812 a=hat,b=eks,i=4395,x=0.05068057954766625,y=0.32284857142742274 a=zee,b=wye,i=4396,x=0.031143786348458158,y=0.4250465603658179 a=pan,b=zee,i=4397,x=0.47789346509127195,y=0.35190784679302956 a=wye,b=hat,i=4400,x=0.06936764963814968,y=0.3043996463710237 a=zee,b=zee,i=4402,x=0.05608507131691576,y=0.3577189025004591 a=eks,b=wye,i=4404,x=0.20538620731982282,y=0.20907310428515913 a=pan,b=hat,i=4405,x=0.770037239607531,y=0.8918149402479805 a=pan,b=hat,i=4407,x=0.5936012356219856,y=0.9640723007408432 a=pan,b=pan,i=4410,x=0.2570515021562684,y=0.18774521042902936 a=wye,b=wye,i=4412,x=0.7213015230538632,y=0.6718375213896831 a=zee,b=pan,i=4413,x=0.8367397203622533,y=0.7284961033977948 a=eks,b=eks,i=4414,x=0.6694554317033412,y=0.9879307986798048 a=zee,b=eks,i=4416,x=0.362024615946302,y=0.01598375230508753 a=pan,b=eks,i=4418,x=0.9353086997459791,y=0.840900748615823 a=zee,b=eks,i=4423,x=0.9639383645238275,y=0.6490468629834018 a=zee,b=eks,i=4424,x=0.7312421688490892,y=0.8667063684553176 a=pan,b=pan,i=4425,x=0.46845749017099236,y=0.11757543510403212 a=zee,b=eks,i=4426,x=0.5623944023007167,y=0.7586419852976186 a=eks,b=hat,i=4427,x=0.9350368655950849,y=0.9337007230580264 a=wye,b=wye,i=4431,x=0.6855292088150996,y=0.5336035912975299 a=eks,b=pan,i=4433,x=0.24252721996042959,y=0.28456246724868983 a=zee,b=eks,i=4435,x=0.3774471419632248,y=0.29246801034228276 a=wye,b=eks,i=4436,x=0.21438792699902287,y=0.1153507200959073 a=eks,b=wye,i=4437,x=0.47860288810882523,y=0.25957684880561227 a=wye,b=hat,i=4439,x=0.8059627789626932,y=0.9269765317602825 a=wye,b=eks,i=4442,x=0.5598645482568733,y=0.8346150307672233 a=hat,b=zee,i=4446,x=0.701715405648832,y=0.8559468613900958 a=hat,b=pan,i=4447,x=0.13582612436147878,y=0.497058893619451 a=hat,b=wye,i=4448,x=0.6624067185928518,y=0.7937707954447804 a=pan,b=zee,i=4451,x=0.9254868696106908,y=0.9850750432504393 a=zee,b=wye,i=4455,x=0.9045463102006963,y=0.848434465758308 a=zee,b=hat,i=4456,x=0.08456763094566144,y=0.010673585995051305 a=pan,b=zee,i=4460,x=0.1592478815974211,y=0.4117697078037489 a=zee,b=zee,i=4462,x=0.18223498064407118,y=0.36892881666552835 a=eks,b=wye,i=4463,x=0.6602307362128103,y=0.824908201375127 a=zee,b=wye,i=4465,x=0.9363792956174969,y=0.8531230483001019 a=eks,b=zee,i=4466,x=0.8051994741838333,y=0.5378817334878282 a=pan,b=hat,i=4468,x=0.6433621739438674,y=0.6213575464612451 a=eks,b=hat,i=4469,x=0.9576601311217493,y=0.653626721264175 a=eks,b=hat,i=4477,x=0.09002534954722263,y=0.0791900913528687 a=zee,b=wye,i=4478,x=0.7347401014901926,y=0.5874553765719767 a=eks,b=zee,i=4480,x=0.06846268410645817,y=0.17937317736357228 a=eks,b=zee,i=4482,x=0.5207774812238394,y=0.7322116837434511 a=zee,b=wye,i=4483,x=0.6011563904137914,y=0.6359195042320677 a=hat,b=eks,i=4485,x=0.14129738926071922,y=0.09762322511903287 a=wye,b=wye,i=4486,x=0.587567750076066,y=0.6669838072984797 a=eks,b=wye,i=4487,x=0.5516672019589355,y=0.7655831718008789 a=hat,b=wye,i=4488,x=0.7926043240629409,y=0.5015162896194846 a=wye,b=wye,i=4489,x=0.6948771123324418,y=0.5976836677553925 a=hat,b=hat,i=4490,x=0.9101749423682922,y=0.9101168870690818 a=pan,b=wye,i=4491,x=0.5070024474601975,y=0.7305420057451063 a=hat,b=eks,i=4492,x=0.1759423893989127,y=0.3959141841599947 a=eks,b=pan,i=4493,x=0.6837930443900314,y=0.6284806971996789 a=wye,b=hat,i=4495,x=0.4602646789703714,y=0.12318800994516399 a=wye,b=pan,i=4496,x=0.7594514407425375,y=0.6656599679572212 a=zee,b=pan,i=4497,x=0.0776140160787101,y=0.02352743433085669 a=wye,b=zee,i=4498,x=0.02184839096132485,y=0.3911325637076585 a=wye,b=pan,i=4499,x=0.8747947010040115,y=0.9998479502810276 a=pan,b=zee,i=4500,x=0.47622133460809657,y=0.12656764784587515 a=zee,b=pan,i=4501,x=0.9880755588957435,y=0.780394078164109 a=hat,b=eks,i=4504,x=0.7328180759655728,y=0.8128425968959323 a=hat,b=wye,i=4506,x=0.6481956843803017,y=0.6728352515966057 a=wye,b=hat,i=4511,x=0.9311713164896562,y=0.5805780192421368 a=hat,b=eks,i=4512,x=0.23786081178866836,y=0.36277905022985646 a=hat,b=wye,i=4513,x=0.965484537526872,y=0.940488169982859 a=pan,b=pan,i=4516,x=0.3492462945952187,y=0.2946268275283319 a=hat,b=eks,i=4518,x=0.44713434909121097,y=0.16699429132092636 a=wye,b=eks,i=4520,x=0.21810500990652393,y=0.23695212300002177 a=wye,b=zee,i=4523,x=0.05279712720226515,y=0.027511378098411865 a=zee,b=hat,i=4524,x=0.1957893855808428,y=0.2551266540561208 a=zee,b=pan,i=4525,x=0.011543703995189447,y=0.22663954461488478 a=pan,b=pan,i=4526,x=0.04880772479373874,y=0.07481795594892848 a=pan,b=hat,i=4527,x=0.31836250428860824,y=0.32626988649341593 a=eks,b=zee,i=4531,x=0.34858797365915506,y=0.4282397998858426 a=pan,b=eks,i=4532,x=0.8877015003398467,y=0.7747761049575923 a=zee,b=hat,i=4535,x=0.46136202746827326,y=0.42271339711114486 a=wye,b=pan,i=4538,x=0.7691954303113361,y=0.5906545288840418 a=wye,b=eks,i=4539,x=0.666121467152889,y=0.7009152639751882 a=pan,b=pan,i=4540,x=0.8705353878768347,y=0.569382489859167 a=pan,b=wye,i=4546,x=0.30897074727172746,y=0.07486636973164118 a=hat,b=zee,i=4548,x=0.6838256979656141,y=0.9575551645763191 a=wye,b=eks,i=4549,x=0.9129619062625066,y=0.7815822557674902 a=zee,b=hat,i=4558,x=0.030771073498329193,y=0.22547664086558517 a=pan,b=zee,i=4559,x=0.8853445527158975,y=0.9598699991813698 a=pan,b=pan,i=4560,x=0.022873859395381335,y=0.16717654342761945 a=wye,b=wye,i=4562,x=0.9962200957849251,y=0.7504411563669804 a=zee,b=wye,i=4564,x=0.7531892953023888,y=0.662798570253206 a=wye,b=eks,i=4567,x=0.0013320296153030986,y=0.3527351039106079 a=zee,b=zee,i=4575,x=0.4923232521663191,y=0.31138573511811585 a=hat,b=hat,i=4579,x=0.7716061175886524,y=0.5940949446227113 a=zee,b=pan,i=4581,x=0.6615122130690573,y=0.743282484093763 a=hat,b=zee,i=4582,x=0.7466772782921713,y=0.6024593387871963 a=zee,b=zee,i=4583,x=0.7293308998803242,y=0.9194675588274827 a=wye,b=wye,i=4585,x=0.49005088405256925,y=0.19667802308060156 a=hat,b=zee,i=4588,x=0.15982614073843593,y=0.29678575429874954 a=zee,b=wye,i=4591,x=0.3549198162177106,y=0.15971238689401845 a=zee,b=zee,i=4592,x=0.3725968594942376,y=0.10170369746035934 a=pan,b=eks,i=4594,x=0.9636076558747869,y=0.6429412934414747 a=eks,b=eks,i=4601,x=0.17142456675630824,y=0.428244260538891 a=wye,b=eks,i=4604,x=0.26884887570750515,y=0.0629227877462456 a=wye,b=hat,i=4605,x=0.9967036371872702,y=0.9394080649718911 a=eks,b=hat,i=4610,x=0.8546204254968556,y=0.544666096374198 a=wye,b=zee,i=4611,x=0.9797738948452778,y=0.7539379828966757 a=eks,b=eks,i=4613,x=0.036974707048940014,y=0.13498566781731325 a=pan,b=zee,i=4614,x=0.4962373115799128,y=0.34690328340466625 a=pan,b=wye,i=4617,x=0.6064318491662761,y=0.9709587074540149 a=eks,b=eks,i=4618,x=0.6067298140262544,y=0.6856518510847851 a=zee,b=eks,i=4621,x=0.30992740946284036,y=0.3114230762548156 a=wye,b=wye,i=4622,x=0.9124025251398724,y=0.9456164182783081 a=wye,b=pan,i=4624,x=0.5833679710036083,y=0.9019285736689665 a=zee,b=pan,i=4625,x=0.8458203200231942,y=0.5450580672631699 a=pan,b=hat,i=4628,x=0.8957043450158336,y=0.5673889892957554 a=wye,b=hat,i=4629,x=0.8464282723870642,y=0.5202135613238874 a=zee,b=hat,i=4631,x=0.9018507034320511,y=0.7039556507979018 a=pan,b=pan,i=4632,x=0.4889756359426054,y=0.3597265690523318 a=eks,b=eks,i=4639,x=0.36139046295982613,y=0.40696722185592216 a=zee,b=hat,i=4643,x=0.4795723404826593,y=0.46439187383822056 a=zee,b=hat,i=4644,x=0.5269030281828351,y=0.5294159733959858 a=eks,b=zee,i=4647,x=0.42422452591610793,y=0.2126460780549554 a=pan,b=hat,i=4654,x=0.5285099685069632,y=0.5178008352128922 a=hat,b=wye,i=4657,x=0.14061995895280166,y=0.47199609775073736 a=hat,b=eks,i=4660,x=0.30472363074700515,y=0.07217266625982621 a=hat,b=wye,i=4661,x=0.2091333254634984,y=0.1548046270754979 a=hat,b=hat,i=4663,x=0.3119827522367612,y=0.4259694252127655 a=pan,b=zee,i=4665,x=0.054344923432058434,y=0.16217922759144587 a=wye,b=zee,i=4666,x=0.4186702128599753,y=0.2835839275998192 a=wye,b=zee,i=4667,x=0.0646217379660351,y=0.30530257092910784 a=zee,b=eks,i=4668,x=0.07870649960682297,y=0.2515794150323323 a=hat,b=hat,i=4669,x=0.5003476787456538,y=0.6310918883710445 a=pan,b=hat,i=4670,x=0.6275111165777365,y=0.8054897414350336 a=zee,b=eks,i=4673,x=0.984318771878163,y=0.7280796955832692 a=zee,b=wye,i=4674,x=0.23054557107461504,y=0.19681174789488143 a=eks,b=pan,i=4676,x=0.1423438599979604,y=0.35330918689671975 a=hat,b=zee,i=4678,x=0.9082274952383252,y=0.7405877302837555 a=eks,b=pan,i=4679,x=0.8074215267431348,y=0.5236668774007812 a=eks,b=hat,i=4682,x=0.9342926038131985,y=0.7979695752949024 a=zee,b=pan,i=4684,x=0.44163999038860213,y=0.38504226387550344 a=pan,b=zee,i=4685,x=0.03027055342778162,y=0.08035681468258382 a=zee,b=wye,i=4686,x=0.08118893501639246,y=0.27655291599781473 a=wye,b=hat,i=4687,x=0.06385275336646346,y=0.35108434035108427 a=wye,b=hat,i=4689,x=0.8811472299764586,y=0.603532565127673 a=eks,b=wye,i=4692,x=0.6256084558730343,y=0.5912072106343357 a=eks,b=wye,i=4693,x=0.43739401507823317,y=0.4449591712634142 a=eks,b=hat,i=4696,x=0.008662277886696601,y=0.3721538653338412 a=eks,b=zee,i=4697,x=0.7171113231602343,y=0.7425350749221431 a=pan,b=hat,i=4700,x=0.9055844258025669,y=0.7437707529087395 a=zee,b=zee,i=4702,x=0.7415668922687337,y=0.8797752247285192 a=eks,b=wye,i=4703,x=0.7722596990678992,y=0.7367517235830364 a=eks,b=hat,i=4706,x=0.6995046411916459,y=0.9587840493554082 a=hat,b=wye,i=4707,x=0.7945060726118334,y=0.8708814355187628 a=eks,b=hat,i=4708,x=0.1778567317636336,y=0.4554107042944405 a=eks,b=hat,i=4709,x=0.8605269620945222,y=0.9282320361391482 a=zee,b=pan,i=4710,x=0.7925893623491367,y=0.8373876174093722 a=hat,b=zee,i=4713,x=0.3394230162235836,y=0.4370239027445896 a=hat,b=hat,i=4714,x=0.8405345514548883,y=0.8644132717621533 a=hat,b=pan,i=4716,x=0.012844309530080089,y=0.25779486121957473 a=hat,b=eks,i=4717,x=0.7365074627250664,y=0.9439422879543493 a=pan,b=pan,i=4718,x=0.23929472797530638,y=0.15699808756834377 a=wye,b=eks,i=4721,x=0.9347768806843397,y=0.8839032510290749 a=zee,b=wye,i=4726,x=0.8269425781542478,y=0.7279915540846144 a=pan,b=zee,i=4729,x=0.18970289783165384,y=0.4228791314162068 a=zee,b=hat,i=4730,x=0.19347150884164055,y=0.37509711156847003 a=zee,b=wye,i=4732,x=0.9567066838864685,y=0.6222637241828745 a=hat,b=eks,i=4734,x=0.4361140296691789,y=0.19415398432919728 a=eks,b=zee,i=4735,x=0.028008275847919872,y=0.12986606641246612 a=hat,b=wye,i=4740,x=0.1119893643732226,y=0.41788347372200485 a=hat,b=eks,i=4741,x=0.7241531241241961,y=0.9089044568897544 a=hat,b=wye,i=4742,x=0.8802453504639547,y=0.7366398321703834 a=eks,b=pan,i=4743,x=0.2504490581104497,y=0.29547558676954633 a=hat,b=wye,i=4744,x=0.4979148854618458,y=0.11700636396309227 a=eks,b=pan,i=4746,x=0.16989991264520043,y=0.018451772273192057 a=zee,b=pan,i=4748,x=0.7418671304073968,y=0.8575401492075233 a=hat,b=pan,i=4751,x=0.5858041848273323,y=0.6295306564064627 a=zee,b=wye,i=4753,x=0.8545851137163856,y=0.9679476038287586 a=eks,b=hat,i=4755,x=0.7839088793029254,y=0.524722394465856 a=pan,b=pan,i=4756,x=0.397023046047854,y=0.11000986851499284 a=wye,b=eks,i=4757,x=0.21991834430842194,y=0.3045979240462181 a=zee,b=wye,i=4760,x=0.022667005941863883,y=0.45092868070487113 a=zee,b=hat,i=4762,x=0.9059466160415109,y=0.6087785388744085 a=zee,b=zee,i=4765,x=0.9455569776929973,y=0.8604499298561917 a=zee,b=eks,i=4766,x=0.37773136340995606,y=0.25694678545170857 a=eks,b=eks,i=4767,x=0.7219583517207702,y=0.727638969023518 a=zee,b=wye,i=4769,x=0.9897615767481157,y=0.6975316151559802 a=eks,b=hat,i=4770,x=0.23499057343433494,y=0.47659932458800036 a=wye,b=hat,i=4771,x=0.1844047653981028,y=0.022663675164210306 a=zee,b=wye,i=4772,x=0.09271907588361772,y=0.13142402431280997 a=hat,b=hat,i=4776,x=0.2338057751520678,y=0.09800686529861335 a=zee,b=pan,i=4778,x=0.3599347922656181,y=0.18218338698595427 a=eks,b=pan,i=4780,x=0.5515560102138437,y=0.9790752715442088 a=pan,b=zee,i=4781,x=0.9530344417320495,y=0.5854254757860599 a=zee,b=hat,i=4783,x=0.8937130637825316,y=0.9482001237924185 a=eks,b=zee,i=4784,x=0.535394341606814,y=0.9507496372757723 a=hat,b=pan,i=4785,x=0.6905839897107999,y=0.7545488329990303 a=hat,b=wye,i=4786,x=0.01916979841839017,y=0.2780999914884037 a=hat,b=zee,i=4787,x=0.9707632375104736,y=0.823966840635361 a=zee,b=eks,i=4788,x=0.2900344019459282,y=0.4551744845405584 a=eks,b=zee,i=4789,x=0.581964402755552,y=0.6562137540702333 a=eks,b=wye,i=4790,x=0.5159650104250221,y=0.6583847382580487 a=pan,b=pan,i=4791,x=0.4314747391635376,y=0.11719605119566623 a=pan,b=wye,i=4793,x=0.8596672453072937,y=0.7203822316562272 a=zee,b=pan,i=4794,x=0.41119242720559135,y=0.16288056185655064 a=hat,b=wye,i=4797,x=0.6239839123252174,y=0.5446595433698003 a=pan,b=wye,i=4798,x=0.5914484609361321,y=0.5863799669381212 a=hat,b=wye,i=4800,x=0.7975814555638998,y=0.6742547886299404 a=eks,b=zee,i=4801,x=0.32122401484315466,y=0.17580532480506172 a=eks,b=eks,i=4803,x=0.07646493070387805,y=0.43572994178375957 a=hat,b=pan,i=4805,x=0.2078967635625505,y=0.39646961279273085 a=zee,b=wye,i=4807,x=0.5734922188510542,y=0.9110138243945486 a=wye,b=wye,i=4808,x=0.5888053656056721,y=0.6357658487621642 a=hat,b=wye,i=4809,x=0.9209565722669064,y=0.6387306072748612 a=eks,b=hat,i=4810,x=0.5922647221870971,y=0.8442189902394986 a=wye,b=wye,i=4812,x=0.6090893281675697,y=0.647518662887554 a=zee,b=eks,i=4815,x=0.23445194234627598,y=0.26893786383591456 a=zee,b=zee,i=4817,x=0.23202362739606153,y=0.47886038007736564 a=eks,b=zee,i=4819,x=0.712974515799127,y=0.542449640039289 a=eks,b=pan,i=4821,x=0.09797648760110378,y=0.1605809921671595 a=wye,b=hat,i=4823,x=0.581757236497391,y=0.9463973717007303 a=hat,b=hat,i=4824,x=0.40413977500334364,y=0.08865258409882204 a=wye,b=hat,i=4825,x=0.7001704003542419,y=0.7416812627335253 a=zee,b=wye,i=4826,x=0.8846834351985541,y=0.9987381458494847 a=wye,b=zee,i=4827,x=0.9763864041558291,y=0.6651833167661081 a=pan,b=pan,i=4831,x=0.6131916476098028,y=0.7258426490475796 a=pan,b=pan,i=4832,x=0.6315103295350951,y=0.5044543655861339 a=wye,b=pan,i=4836,x=0.569545208750187,y=0.7786619129324108 a=zee,b=wye,i=4837,x=0.5226423611496498,y=0.9996700213544367 a=eks,b=hat,i=4838,x=0.935982420664342,y=0.8799965660826473 a=pan,b=zee,i=4845,x=0.28060256724829724,y=0.1194472053493133 a=eks,b=eks,i=4850,x=0.2525590429487127,y=0.36945113778662786 a=hat,b=eks,i=4851,x=0.5131509545709081,y=0.583688721156048 a=wye,b=eks,i=4855,x=0.8743253482906079,y=0.7740900498864154 a=pan,b=wye,i=4857,x=0.23806525172795734,y=0.2959143584631805 a=pan,b=pan,i=4858,x=0.9189791410736298,y=0.7770463990190287 a=zee,b=eks,i=4860,x=0.3338609486281813,y=0.3484284682131591 a=zee,b=hat,i=4861,x=0.13328569444496707,y=0.4177841139240035 a=zee,b=eks,i=4862,x=0.48622017397025397,y=0.07896067004609653 a=wye,b=pan,i=4864,x=0.29934656970455364,y=0.401161898451611 a=wye,b=hat,i=4865,x=0.33964644206576833,y=0.37831409639409463 a=pan,b=hat,i=4866,x=0.3348192796730043,y=0.39422602502766824 a=hat,b=zee,i=4867,x=0.8800967275591628,y=0.869121595376977 a=zee,b=zee,i=4870,x=0.5723345813434529,y=0.5920424414132134 a=pan,b=zee,i=4875,x=0.6013577540137748,y=0.636284103659697 a=wye,b=hat,i=4877,x=0.3699653574585806,y=0.4481319838637625 a=eks,b=zee,i=4878,x=0.8140883903787601,y=0.9675148391636573 a=eks,b=eks,i=4879,x=0.8227355186912324,y=0.754836723664535 a=eks,b=wye,i=4882,x=0.5564517747676477,y=0.8364351449356273 a=eks,b=eks,i=4885,x=0.8707313650863101,y=0.8057609437403466 a=wye,b=pan,i=4888,x=0.24417888243946928,y=0.4591742086366801 a=eks,b=wye,i=4890,x=0.04910880060108913,y=0.07316217290218352 a=wye,b=eks,i=4894,x=0.08956997835221292,y=0.15153433659257443 a=wye,b=eks,i=4895,x=0.2302595629324965,y=0.2862207000255006 a=eks,b=eks,i=4896,x=0.595542985856601,y=0.6247689899970194 a=zee,b=eks,i=4897,x=0.7608028013428353,y=0.878174748817996 a=eks,b=zee,i=4899,x=0.1567102404262226,y=0.2213311716892986 a=hat,b=hat,i=4900,x=0.8901137791212611,y=0.6090349204378238 a=zee,b=pan,i=4902,x=0.699059960351012,y=0.9885800960251768 a=hat,b=wye,i=4904,x=0.30857036671389493,y=0.21668637382948186 a=hat,b=pan,i=4905,x=0.6411579594900462,y=0.5351923498013205 a=eks,b=pan,i=4906,x=0.6854190139070013,y=0.8299360694533708 a=pan,b=hat,i=4907,x=0.5936171298524064,y=0.7041056598923683 a=hat,b=eks,i=4908,x=0.8503470988840566,y=0.6331693431984986 a=pan,b=wye,i=4911,x=0.4369913287175713,y=0.4720871164245992 a=zee,b=wye,i=4913,x=0.7975684270658338,y=0.6973895935548693 a=zee,b=wye,i=4916,x=0.6624686517748942,y=0.8016741542650369 a=zee,b=zee,i=4918,x=0.641375026211945,y=0.8347424300045329 a=wye,b=eks,i=4919,x=0.22099244372718618,y=0.4659468290849962 a=hat,b=hat,i=4921,x=0.5785465847836638,y=0.6908978810578349 a=hat,b=pan,i=4924,x=0.40224441655955634,y=0.19530268026233755 a=hat,b=hat,i=4925,x=0.653842164262253,y=0.6280602144296272 a=eks,b=hat,i=4926,x=0.5370983012158481,y=0.8265755341115193 a=pan,b=hat,i=4927,x=0.20003498013779974,y=0.33067633213900816 a=zee,b=wye,i=4929,x=0.6597792701685063,y=0.5747306201637469 a=wye,b=zee,i=4930,x=0.7005469670714589,y=0.8590565664901815 a=eks,b=wye,i=4931,x=0.056783946256193096,y=0.13845635335075446 a=zee,b=hat,i=4932,x=0.17914823686110226,y=0.3724424181901871 a=wye,b=eks,i=4933,x=0.35047905702830917,y=0.03585739880658767 a=pan,b=pan,i=4936,x=0.2268254080621852,y=0.4964858179117778 a=pan,b=wye,i=4941,x=0.684790210390548,y=0.9744745064587994 a=pan,b=pan,i=4943,x=0.27521613107535237,y=0.035785181333226945 a=hat,b=pan,i=4945,x=0.28514048743680753,y=0.07363097335604496 a=wye,b=hat,i=4948,x=0.31710176239516497,y=0.2704638711875881 a=hat,b=hat,i=4949,x=0.7395993281771386,y=0.5735970605731027 a=zee,b=eks,i=4952,x=0.3969923775629448,y=0.22024693929882533 a=hat,b=eks,i=4953,x=0.5154408810016854,y=0.7038009086382059 a=wye,b=hat,i=4955,x=0.8340489175824841,y=0.6288838568483295 a=eks,b=zee,i=4956,x=0.7811008985162822,y=0.8018574276178609 a=hat,b=pan,i=4958,x=0.32954001616237283,y=0.13809011794903436 a=hat,b=wye,i=4959,x=0.3753128948010216,y=0.47542625730960586 a=zee,b=hat,i=4965,x=0.45139611357151777,y=0.38795035866424066 a=wye,b=hat,i=4967,x=0.24118009132354112,y=0.1629785769528157 a=hat,b=wye,i=4968,x=0.04728174638088167,y=0.24887900862466006 a=zee,b=pan,i=4972,x=0.8445417535581274,y=0.5401648117511082 a=hat,b=wye,i=4977,x=0.346394513794262,y=0.29350246124167567 a=pan,b=wye,i=4978,x=0.5095513696287198,y=0.6796749104642862 a=eks,b=hat,i=4981,x=0.6239763460715818,y=0.5785443365814726 a=wye,b=pan,i=4985,x=0.7439428126731077,y=0.9235490434329954 a=zee,b=zee,i=4986,x=0.8301353367964757,y=0.8649908229299215 a=hat,b=pan,i=4987,x=0.7155127400138539,y=0.725960059877104 a=pan,b=zee,i=4990,x=0.6245117285311684,y=0.5893294863439663 a=pan,b=eks,i=4992,x=0.30073741634815365,y=0.27875382911011104 a=pan,b=hat,i=4998,x=0.9535726959631937,y=0.8197092073820271 a=hat,b=hat,i=4999,x=0.20718170417583293,y=0.15443490334276233 a=eks,b=eks,i=5000,x=0.5474103987606213,y=0.8639022623566207 a=zee,b=wye,i=5001,x=0.08843009472207297,y=0.14945328753720988 a=wye,b=zee,i=5002,x=0.11843248048480792,y=0.10564749120283823 a=pan,b=pan,i=5003,x=0.4789366550469353,y=0.22717511611934216 a=eks,b=wye,i=5004,x=0.47636937977487326,y=0.2810082791040678 a=pan,b=wye,i=5005,x=0.6626206294858628,y=0.9073394670955045 a=eks,b=pan,i=5014,x=0.7386573050111648,y=0.9236218998819093 a=zee,b=zee,i=5017,x=0.5038628336682738,y=0.6629947699756096 a=pan,b=hat,i=5018,x=0.888380448419866,y=0.9524601673710467 a=hat,b=pan,i=5019,x=0.33990101411005635,y=0.4348664315239562 a=zee,b=wye,i=5020,x=0.3672167922652847,y=0.3368467808484725 a=wye,b=zee,i=5021,x=0.07663456505244592,y=0.2631577836245168 a=hat,b=wye,i=5023,x=0.7884614415246883,y=0.7586781551216389 a=pan,b=hat,i=5024,x=0.20846872150137863,y=0.2990773668794384 a=eks,b=eks,i=5026,x=0.12876049793274924,y=0.15585641140542594 a=eks,b=zee,i=5028,x=0.35386542107386076,y=0.37117012291309726 a=eks,b=zee,i=5029,x=0.6649005742152306,y=0.968640074749029 a=pan,b=eks,i=5031,x=0.6958326538393494,y=0.8708243653761277 a=eks,b=hat,i=5032,x=0.2945439456101079,y=0.15728143751762003 a=zee,b=pan,i=5033,x=0.974924650628186,y=0.9669570839581866 a=zee,b=zee,i=5034,x=0.9203642855427807,y=0.5206651807226769 a=eks,b=wye,i=5035,x=0.7880820779075502,y=0.7490003085045434 a=pan,b=eks,i=5036,x=0.6669037309103186,y=0.7852898502819553 a=zee,b=wye,i=5040,x=0.8804560258917605,y=0.5859741175246163 a=wye,b=eks,i=5044,x=0.944933980409295,y=0.7127158343146003 a=pan,b=zee,i=5048,x=0.7380043154543273,y=0.6241669393170018 a=hat,b=hat,i=5053,x=0.023117725750200657,y=0.033915988824823384 a=zee,b=pan,i=5054,x=0.32314928212370087,y=0.05688167384675946 a=wye,b=wye,i=5055,x=0.3342612127307919,y=0.42233407978529247 a=zee,b=zee,i=5059,x=0.11722281926454714,y=0.4784698788530096 a=hat,b=hat,i=5061,x=0.8982925202936236,y=0.5153152768869278 a=eks,b=hat,i=5064,x=0.11826065449979817,y=0.44361936119890544 a=eks,b=pan,i=5065,x=0.16113803077069544,y=0.1931224993069398 a=pan,b=zee,i=5066,x=0.160970845859988,y=0.3653498317855951 a=zee,b=zee,i=5068,x=0.513447706607767,y=0.9552034872186853 a=zee,b=zee,i=5070,x=0.3974043085931761,y=0.04564461949638321 a=zee,b=wye,i=5071,x=0.8135506068560597,y=0.9608362809012473 a=eks,b=wye,i=5073,x=0.6147484385420419,y=0.5363878643299302 a=pan,b=eks,i=5074,x=0.5845946846241253,y=0.6243144568720979 a=pan,b=eks,i=5075,x=0.06225295939318909,y=0.47296164563217147 a=wye,b=eks,i=5077,x=0.231763398457011,y=0.29533799083169177 a=eks,b=wye,i=5079,x=0.4620414482111399,y=0.10454449264714505 a=eks,b=pan,i=5080,x=0.4154239126338921,y=0.1558721394610474 a=wye,b=pan,i=5083,x=0.598195485668647,y=0.7711986200741965 a=pan,b=eks,i=5085,x=0.6467927352142951,y=0.6809546997794357 a=zee,b=zee,i=5087,x=0.10493923293046115,y=0.4813239698030355 a=eks,b=pan,i=5092,x=0.14584747968792888,y=0.19250348835022613 a=pan,b=zee,i=5095,x=0.12743414057293911,y=0.3674063708637675 a=eks,b=wye,i=5097,x=0.33724586909672605,y=0.2808209264792111 a=zee,b=pan,i=5098,x=0.5191394718493332,y=0.6948029406893036 a=pan,b=eks,i=5099,x=0.4686142873190169,y=0.47194949482921567 a=eks,b=hat,i=5101,x=0.05611052621758694,y=0.14551172850676686 a=zee,b=hat,i=5104,x=0.12383004586365431,y=0.25661110382216856 a=pan,b=wye,i=5106,x=0.44560649854859324,y=0.44398213053605406 a=pan,b=eks,i=5107,x=0.2991869218909077,y=0.4855377015585889 a=pan,b=zee,i=5108,x=0.8696312098499749,y=0.9234420344814674 a=eks,b=wye,i=5110,x=0.055715443104116136,y=0.4615507678180293 a=wye,b=hat,i=5111,x=0.14260896559625547,y=0.2842155054761949 a=eks,b=hat,i=5112,x=0.868450337333343,y=0.8706206691563101 a=pan,b=hat,i=5116,x=0.8762799268435709,y=0.9446805166366606 a=wye,b=pan,i=5119,x=0.4794067150556538,y=0.07923269424861734 a=zee,b=pan,i=5123,x=0.6515686983034052,y=0.5100953103470156 a=zee,b=zee,i=5129,x=0.12609531649583638,y=0.44052343410884454 a=zee,b=pan,i=5132,x=0.33080234532260044,y=0.3096178521788119 a=zee,b=wye,i=5134,x=0.2827895360020647,y=0.2448957006369109 a=wye,b=eks,i=5136,x=0.4056324583379335,y=0.08334576336977417 a=hat,b=eks,i=5137,x=0.878238719282208,y=0.6491135241981707 a=wye,b=hat,i=5138,x=0.06783170016557316,y=0.4197736525433723 a=hat,b=pan,i=5140,x=0.3051559696668491,y=0.06338171371155699 a=hat,b=pan,i=5141,x=0.24126630734948107,y=0.3415400162111678 a=zee,b=zee,i=5142,x=0.5053797938498257,y=0.6943665465448414 a=pan,b=wye,i=5143,x=0.2455006451228895,y=0.2381483502091848 a=pan,b=eks,i=5147,x=0.20821590282748392,y=0.05180957502134165 a=hat,b=hat,i=5150,x=0.5204676158996879,y=0.7837983020069176 a=eks,b=zee,i=5153,x=0.5599128818778365,y=0.6217154146552438 a=zee,b=pan,i=5157,x=0.7088889371664757,y=0.5291365868969226 a=wye,b=wye,i=5158,x=0.03780907803981348,y=0.01743012834128732 a=zee,b=pan,i=5160,x=0.1291394701733155,y=0.3164888119812437 a=eks,b=zee,i=5161,x=0.7070972450015776,y=0.8576144505983694 a=pan,b=wye,i=5162,x=0.23503083628119015,y=0.3804966968759753 a=zee,b=eks,i=5164,x=0.817955788881543,y=0.5354324301609987 a=zee,b=hat,i=5167,x=0.01949832966304421,y=0.44975230900638874 a=hat,b=eks,i=5172,x=0.8901432458076336,y=0.5906289428469621 a=pan,b=hat,i=5176,x=0.13951096415676212,y=0.37397816099478665 a=pan,b=wye,i=5179,x=0.5722581464790939,y=0.6082504729241017 a=pan,b=zee,i=5182,x=0.5458504348562845,y=0.5606252991061377 a=wye,b=hat,i=5183,x=0.7217910708545336,y=0.698686710480415 a=pan,b=zee,i=5190,x=0.958030425108842,y=0.9229656805294295 a=pan,b=wye,i=5191,x=0.34032539138935425,y=0.4003903325198842 a=hat,b=pan,i=5192,x=0.3435706571010647,y=0.06283363667654052 a=eks,b=eks,i=5194,x=0.9601222966912384,y=0.7746495793923044 a=pan,b=hat,i=5195,x=0.5165119272913388,y=0.8970096684776827 a=hat,b=eks,i=5197,x=0.5268012119318143,y=0.9704796636500256 a=pan,b=pan,i=5198,x=0.5788360834761852,y=0.9163631840503775 a=zee,b=pan,i=5199,x=0.863846165540519,y=0.7926861461485262 a=hat,b=pan,i=5201,x=0.13550559685784802,y=0.23666447032870253 a=hat,b=pan,i=5202,x=0.9333837848637749,y=0.7983610377673229 a=pan,b=zee,i=5203,x=0.8164395473206716,y=0.9295267627751691 a=hat,b=eks,i=5204,x=0.09343575555554806,y=0.30344155652002347 a=zee,b=hat,i=5205,x=0.28240510221521764,y=0.2545255694003048 a=zee,b=pan,i=5206,x=0.3994083205887524,y=0.07213558504539785 a=pan,b=zee,i=5207,x=0.5698284352568362,y=0.5897809603851609 a=zee,b=zee,i=5208,x=0.3216207044318503,y=0.038820482913941357 a=pan,b=wye,i=5209,x=0.8306447997004499,y=0.8384123743007208 a=eks,b=wye,i=5214,x=0.6175594035658841,y=0.9608217208353017 a=hat,b=eks,i=5215,x=0.28256241866196097,y=0.265704893607123 a=hat,b=zee,i=5216,x=0.8249008956837504,y=0.7862378134305688 a=hat,b=pan,i=5217,x=0.4700457200943312,y=0.005846894154671878 a=eks,b=hat,i=5218,x=0.7091734686647354,y=0.9683424620144252 a=hat,b=hat,i=5221,x=0.6804959880554192,y=0.5106473873198336 a=pan,b=pan,i=5227,x=0.04907194450053376,y=0.24371127321212294 a=eks,b=hat,i=5228,x=0.08589819615072136,y=0.1928776399714467 a=eks,b=hat,i=5229,x=0.5280780018220216,y=0.850193621850258 a=zee,b=hat,i=5233,x=0.7794106496174618,y=0.950428895380262 a=hat,b=zee,i=5235,x=0.5349332160444686,y=0.7212892273015341 a=zee,b=eks,i=5236,x=0.0096091347524081,y=0.05157241835503623 a=pan,b=wye,i=5237,x=0.29264897203906315,y=0.2708942584778229 a=zee,b=hat,i=5239,x=0.10804287516531197,y=0.25028720143889427 a=pan,b=zee,i=5240,x=0.038521217586762524,y=0.45833782252961597 a=wye,b=eks,i=5244,x=0.4410158520384003,y=0.08878204317661487 a=hat,b=wye,i=5245,x=0.30542326696649835,y=0.03254190401750867 a=wye,b=wye,i=5246,x=0.2619681126430232,y=0.2649618519422796 a=zee,b=hat,i=5251,x=0.6787637703297714,y=0.8107713369785818 a=zee,b=eks,i=5255,x=0.5847457461108924,y=0.8796125841387396 a=hat,b=zee,i=5256,x=0.5958859328721237,y=0.5394313157526304 a=eks,b=zee,i=5257,x=0.6145812801413588,y=0.8667435600565327 a=eks,b=zee,i=5262,x=0.6748387970430342,y=0.9842159808803176 a=eks,b=eks,i=5265,x=0.178487009198119,y=0.3389965086336105 a=hat,b=pan,i=5267,x=0.14941018319657196,y=0.42913266234393854 a=wye,b=wye,i=5268,x=0.44618372032109543,y=0.19531077190155655 a=hat,b=zee,i=5271,x=0.8731584572028818,y=0.8587026343639556 a=hat,b=pan,i=5273,x=0.6161173798530847,y=0.5170002336730243 a=wye,b=wye,i=5274,x=0.9836997370643351,y=0.9073574715868198 a=zee,b=zee,i=5275,x=0.9271419947755198,y=0.7499953605856078 a=eks,b=zee,i=5276,x=0.4436574016008654,y=0.11521473164364193 a=hat,b=zee,i=5278,x=0.6303081078068822,y=0.9708543000113369 a=eks,b=hat,i=5279,x=0.7724785778741878,y=0.8749355527936072 a=zee,b=pan,i=5280,x=0.019491215186811517,y=0.28573440717823495 a=hat,b=hat,i=5281,x=0.8966308328410811,y=0.8932890927799828 a=pan,b=pan,i=5284,x=0.06808879127275447,y=0.2961369332523437 a=hat,b=pan,i=5285,x=0.07045589395497931,y=0.06411882838638927 a=zee,b=pan,i=5286,x=0.5025476621481306,y=0.5455719768538321 a=eks,b=wye,i=5288,x=0.9345047793469049,y=0.7545355491792637 a=eks,b=zee,i=5289,x=0.09683817897484082,y=0.15042392025928608 a=hat,b=zee,i=5290,x=0.2201144900883092,y=0.09304236894658524 a=pan,b=zee,i=5291,x=0.6437086955209985,y=0.6412853324081308 a=pan,b=pan,i=5292,x=0.7101999657039595,y=0.9654389825167757 a=zee,b=pan,i=5293,x=0.44434019344510023,y=0.3616886405725528 a=hat,b=hat,i=5294,x=0.4986619811254004,y=0.36527690926573364 a=wye,b=zee,i=5295,x=0.6218618299228648,y=0.9324975302931531 a=eks,b=eks,i=5297,x=0.450776715605552,y=0.31636578533096016 a=pan,b=zee,i=5298,x=0.3086259636689451,y=0.06652636662046696 a=hat,b=zee,i=5300,x=0.6065263542151584,y=0.8758808605345744 a=wye,b=zee,i=5303,x=0.030537351078086195,y=0.20700838585535786 a=wye,b=hat,i=5304,x=0.4745666526865788,y=0.3396776308478552 a=wye,b=zee,i=5308,x=0.7500932442964064,y=0.552958619063383 a=pan,b=zee,i=5309,x=0.2335642300224079,y=0.31164052398797637 a=pan,b=eks,i=5310,x=0.15387236958406036,y=0.43829110359848433 a=eks,b=wye,i=5313,x=0.0355425881526662,y=0.16802137840026887 a=wye,b=pan,i=5316,x=0.31445904414804127,y=0.235006707754 a=pan,b=pan,i=5320,x=0.9101265684004383,y=0.8101420365566193 a=pan,b=hat,i=5321,x=0.7404633039474602,y=0.9639884498668673 a=wye,b=hat,i=5323,x=0.4830324590268663,y=0.0404568640233397 a=zee,b=pan,i=5325,x=0.888291122851125,y=0.5111470794632866 a=wye,b=pan,i=5326,x=0.07272409700902271,y=0.27564484500916986 a=hat,b=pan,i=5328,x=0.3064216274886523,y=0.4890201595898237 a=pan,b=wye,i=5329,x=0.3470931183432189,y=0.1997795824920121 a=zee,b=zee,i=5330,x=0.13436961326496677,y=0.3095854896519281 a=zee,b=pan,i=5331,x=0.8655317519954471,y=0.8104322805331614 a=wye,b=wye,i=5333,x=0.41853514055951446,y=0.46414849053819973 a=hat,b=wye,i=5335,x=0.8146576023607562,y=0.517623963255214 a=wye,b=eks,i=5338,x=0.9183687166177615,y=0.6742918022088258 a=eks,b=zee,i=5339,x=0.6913946457851302,y=0.5236074895779744 a=pan,b=pan,i=5341,x=0.9609080490571219,y=0.764751472995584 a=hat,b=hat,i=5342,x=0.9571224566918112,y=0.6488786174457046 a=eks,b=zee,i=5343,x=0.1297439418853782,y=0.10986446330230937 a=wye,b=pan,i=5344,x=0.2265442713227983,y=0.08671233554174995 a=zee,b=eks,i=5345,x=0.6690807314571691,y=0.5220733222869928 a=wye,b=zee,i=5346,x=0.42279438877482367,y=0.1357326426861194 a=eks,b=hat,i=5348,x=0.9402905188032046,y=0.6899005608656246 a=pan,b=zee,i=5351,x=0.17054432883772475,y=0.3754155013143816 a=pan,b=hat,i=5352,x=0.577021048756712,y=0.8658764185620885 a=zee,b=pan,i=5354,x=0.8138458432489908,y=0.887184873534984 a=hat,b=zee,i=5355,x=0.4409314249173867,y=0.16661996267618873 a=zee,b=wye,i=5356,x=0.9294777278187871,y=0.9218221729540071 a=wye,b=eks,i=5361,x=0.8752567055200561,y=0.9860616183578573 a=eks,b=eks,i=5364,x=0.27673456069026947,y=0.28606929907632006 a=hat,b=hat,i=5366,x=0.2805736404470527,y=0.39685097136131187 a=eks,b=hat,i=5367,x=0.506031079714652,y=0.9912645565514333 a=pan,b=zee,i=5368,x=0.6865182575714622,y=0.8704513374052988 a=wye,b=zee,i=5371,x=0.26330651984082165,y=0.312969179382553 a=zee,b=zee,i=5372,x=0.5395637542263729,y=0.876693303664991 a=hat,b=zee,i=5375,x=0.5150486678896874,y=0.5093614114895396 a=hat,b=zee,i=5376,x=0.26087420592676525,y=0.45387940157532647 a=zee,b=eks,i=5377,x=0.11113050876158048,y=0.019064162496037707 a=zee,b=hat,i=5378,x=0.7356184687449835,y=0.5091161605127379 a=wye,b=wye,i=5379,x=0.09703125778637067,y=0.25691589979049356 a=zee,b=eks,i=5380,x=0.3345104910149367,y=0.1516506429745581 a=wye,b=eks,i=5382,x=0.6188424819758455,y=0.5722334124286547 a=eks,b=hat,i=5385,x=0.06854514347417606,y=0.028515802052052952 a=eks,b=zee,i=5388,x=0.14459434374592373,y=0.42112443945304057 a=pan,b=zee,i=5389,x=0.11816306719121206,y=0.17831615949339463 a=zee,b=pan,i=5390,x=0.551475598918215,y=0.6565173979014076 a=eks,b=wye,i=5394,x=0.6216628077513283,y=0.9763969655887303 a=zee,b=wye,i=5395,x=0.8476101473277529,y=0.9881007277790081 a=wye,b=eks,i=5398,x=0.36458407067281184,y=0.04100408848224302 a=wye,b=wye,i=5399,x=0.733413532545851,y=0.6459898444733033 a=pan,b=wye,i=5400,x=0.9665506125898256,y=0.5448152784578933 a=zee,b=hat,i=5401,x=0.8543887956499512,y=0.7439702074332549 a=hat,b=pan,i=5409,x=0.5633298053737792,y=0.7410429711654063 a=pan,b=eks,i=5411,x=0.7262036914700832,y=0.9187345564266572 a=zee,b=eks,i=5412,x=0.33286294808080064,y=0.3921681976941228 a=wye,b=eks,i=5413,x=0.08772931753470603,y=0.48815297744510433 a=eks,b=pan,i=5414,x=0.44377217382552636,y=0.13437156912545423 a=eks,b=hat,i=5416,x=0.753762625636042,y=0.6313338577994543 a=pan,b=hat,i=5417,x=0.20986095023321283,y=0.278888203103681 a=hat,b=eks,i=5419,x=0.46399468430524804,y=0.0717886401624439 a=wye,b=eks,i=5421,x=0.4608256396986088,y=0.18257443066884294 a=hat,b=zee,i=5422,x=0.9062976974038087,y=0.825705654266679 a=zee,b=pan,i=5424,x=0.2627796756491889,y=0.05131765835402935 a=hat,b=eks,i=5427,x=0.06062699861257914,y=0.14515726494650738 a=hat,b=eks,i=5429,x=0.3317119302689199,y=0.45073390665129454 a=pan,b=hat,i=5430,x=0.16613227391144125,y=0.41913253603052736 a=zee,b=eks,i=5431,x=0.5545698300075519,y=0.9624415304532793 a=hat,b=zee,i=5433,x=0.7849062201991618,y=0.9640442210529644 a=pan,b=wye,i=5434,x=0.027672040238877704,y=0.09364154641355082 a=zee,b=hat,i=5435,x=0.4045108520910917,y=0.36431937644373535 a=hat,b=zee,i=5436,x=0.9496952473063589,y=0.6756301296750051 a=zee,b=hat,i=5437,x=0.5978983969671523,y=0.6276473499153709 a=eks,b=hat,i=5439,x=0.38811572418657825,y=0.07594870509481821 a=eks,b=hat,i=5441,x=0.5113055435442414,y=0.9478634662218888 a=zee,b=pan,i=5443,x=0.2660546525494476,y=0.036573786936417774 a=hat,b=wye,i=5449,x=0.05598891388977545,y=0.22520895137141883 a=eks,b=hat,i=5451,x=0.22980925307219058,y=0.09539340024354548 a=zee,b=zee,i=5453,x=0.08674939853988706,y=0.0016458788929679669 a=wye,b=hat,i=5455,x=0.9223519005619959,y=0.9896263386831655 a=eks,b=zee,i=5458,x=0.04287045703879866,y=0.3387484748791293 a=pan,b=pan,i=5461,x=0.6162574043540692,y=0.8321486837007045 a=zee,b=hat,i=5463,x=0.5986397200652216,y=0.6968533019592756 a=wye,b=eks,i=5464,x=0.8847165179059643,y=0.8396671337239269 a=pan,b=pan,i=5467,x=0.7658242784400351,y=0.6658002824538031 a=eks,b=wye,i=5469,x=0.5573393787208576,y=0.5674857974105666 a=zee,b=wye,i=5474,x=0.7147670868273149,y=0.5300588513631999 a=hat,b=hat,i=5475,x=0.6079530363728716,y=0.7302013509128558 a=eks,b=hat,i=5476,x=0.20009244252935454,y=0.3819915946964063 a=eks,b=wye,i=5477,x=0.39259835612758154,y=0.30659538127782704 a=hat,b=wye,i=5478,x=0.6770531656328236,y=0.6798247125178067 a=wye,b=hat,i=5479,x=0.8464109156551775,y=0.5746477726666506 a=zee,b=zee,i=5480,x=0.5016540167129663,y=0.8741956310027429 a=wye,b=hat,i=5481,x=0.6695686221456726,y=0.689441485231751 a=zee,b=zee,i=5482,x=0.6069552630891367,y=0.8327367055952278 a=zee,b=wye,i=5486,x=0.3960740290371987,y=0.2157291640948238 a=wye,b=wye,i=5488,x=0.3501090213998701,y=0.1419133192803893 a=wye,b=hat,i=5490,x=0.0114773666847795,y=0.024645492270649272 a=pan,b=eks,i=5491,x=0.37445278083566247,y=0.1319415773692295 a=hat,b=wye,i=5493,x=0.1382138485389508,y=0.42533800225303686 a=zee,b=pan,i=5494,x=0.8834013775449513,y=0.532739443419528 a=hat,b=pan,i=5495,x=0.06870299529036838,y=0.16955231705247786 a=pan,b=eks,i=5496,x=0.7348263636816107,y=0.8630644835981002 a=pan,b=wye,i=5497,x=0.18130548510310573,y=0.012524267398086986 a=eks,b=wye,i=5499,x=0.12579070445810636,y=0.027946488029312544 a=zee,b=hat,i=5500,x=0.31461267260641923,y=0.0748646953586749 a=eks,b=pan,i=5501,x=0.6387163017917407,y=0.9935696733123411 a=zee,b=wye,i=5502,x=0.43904419266704897,y=0.4569132922221508 a=eks,b=pan,i=5507,x=0.21391759502009422,y=0.3447041692322321 a=eks,b=wye,i=5512,x=0.5807870919230165,y=0.9691165477002429 a=pan,b=pan,i=5513,x=0.12503735272775673,y=0.4355589149955563 a=pan,b=eks,i=5514,x=0.24662547688833314,y=0.3287438663802673 a=zee,b=pan,i=5515,x=0.6313995187707404,y=0.833564271162547 a=pan,b=pan,i=5520,x=0.12004377059603999,y=0.17842342731389704 a=wye,b=wye,i=5521,x=0.4952080825177475,y=0.16871841358834394 a=zee,b=pan,i=5522,x=0.36872049705368115,y=0.1990766711673171 a=pan,b=wye,i=5523,x=0.742045965934904,y=0.9721895926892108 a=eks,b=zee,i=5524,x=0.8701165441999673,y=0.5339961636745024 a=wye,b=pan,i=5525,x=0.49890360517452514,y=0.024484853806581164 a=pan,b=eks,i=5526,x=0.7026312260362405,y=0.8810518289214107 a=hat,b=eks,i=5530,x=0.5258934621583872,y=0.720463955146462 a=zee,b=eks,i=5531,x=0.35366192891288517,y=0.08693096089863839 a=pan,b=hat,i=5534,x=0.0019016743345633413,y=0.32222113968267996 a=hat,b=wye,i=5535,x=0.4214775778712955,y=0.22796016352171378 a=zee,b=eks,i=5537,x=0.5232208554018066,y=0.7842118697965217 a=hat,b=eks,i=5538,x=0.4077121389029271,y=0.11707098355780121 a=wye,b=wye,i=5539,x=0.743441288773323,y=0.6405109845442226 a=hat,b=hat,i=5540,x=0.42899567587485843,y=0.23687426121264998 a=hat,b=wye,i=5545,x=0.858697605273768,y=0.8576653967219389 a=eks,b=pan,i=5548,x=0.3627382468806156,y=0.0796990614162374 a=zee,b=eks,i=5549,x=0.7292096702579594,y=0.9691771087568819 a=eks,b=eks,i=5550,x=0.6327683854211364,y=0.6420822760549295 a=hat,b=zee,i=5553,x=0.5166466940884901,y=0.5215576515640856 a=wye,b=zee,i=5555,x=0.8156182188735165,y=0.7385240536968077 a=hat,b=pan,i=5558,x=0.768872222650759,y=0.7571069129173444 a=zee,b=zee,i=5561,x=0.19901052822038778,y=0.010162787621391778 a=zee,b=zee,i=5562,x=0.010968218584134437,y=0.4064143237134189 a=eks,b=zee,i=5566,x=0.8548967678474122,y=0.570131787889301 a=pan,b=eks,i=5570,x=0.6920854194235941,y=0.6152462479121356 a=pan,b=pan,i=5573,x=0.4439499129311816,y=0.452364734358081 a=wye,b=wye,i=5575,x=0.21178209452449626,y=0.15235066856869428 a=pan,b=hat,i=5576,x=0.2328237068625838,y=0.1466943672149028 a=wye,b=eks,i=5577,x=0.1463637145507638,y=0.27512353058563355 a=eks,b=pan,i=5588,x=0.47849756747842254,y=0.36440498978427904 a=hat,b=eks,i=5590,x=0.3632486395529805,y=0.009397590758849828 a=pan,b=pan,i=5592,x=0.39375784368183886,y=0.04590683905804471 a=wye,b=eks,i=5594,x=0.748874819175722,y=0.5391318034694991 a=wye,b=zee,i=5595,x=0.14037849467735208,y=0.17046690443866652 a=eks,b=zee,i=5598,x=0.2962037835362923,y=0.36049737941380366 a=zee,b=pan,i=5600,x=0.6488288447142824,y=0.8870043471299166 a=pan,b=eks,i=5603,x=0.713998278452672,y=0.6065522135018214 a=eks,b=pan,i=5604,x=0.9495183550398497,y=0.861843219886308 a=pan,b=zee,i=5606,x=0.314494599736428,y=0.24386090680148387 a=wye,b=pan,i=5610,x=0.3513354907140842,y=0.23568099743397186 a=eks,b=wye,i=5611,x=0.5581667554162788,y=0.533651422581368 a=zee,b=hat,i=5615,x=0.3921043983626502,y=0.12859994269629937 a=hat,b=hat,i=5616,x=0.12215970633938278,y=0.3357015949156391 a=hat,b=pan,i=5617,x=0.1867388485013709,y=0.11120997350204453 a=wye,b=zee,i=5620,x=0.8136012361181053,y=0.9246893690807032 a=zee,b=eks,i=5621,x=0.6936065900415402,y=0.9835121994811427 a=hat,b=hat,i=5623,x=0.7847006863046383,y=0.9540584320255103 a=wye,b=zee,i=5624,x=0.6715918738207972,y=0.9248713771595384 a=hat,b=wye,i=5625,x=0.3458684025425872,y=0.27012900303390197 a=eks,b=zee,i=5627,x=0.8021710394665355,y=0.8677575901404581 a=hat,b=pan,i=5630,x=0.6751229005765216,y=0.5680107534137527 a=pan,b=hat,i=5631,x=0.6215515202465142,y=0.7335723775728186 a=pan,b=hat,i=5635,x=0.7276807776942956,y=0.8500606585761793 a=eks,b=pan,i=5637,x=0.19782280979787448,y=0.16113009983532756 a=wye,b=eks,i=5638,x=0.6640345835133702,y=0.6498713803920758 a=hat,b=hat,i=5639,x=0.20821268257622816,y=0.4305417007597995 a=pan,b=eks,i=5641,x=0.7319972100987417,y=0.719616216404303 a=eks,b=wye,i=5644,x=0.3698151588984483,y=0.17106212044489788 a=eks,b=hat,i=5645,x=0.7963153151177051,y=0.8008422439449929 a=pan,b=eks,i=5646,x=0.19219529269095814,y=0.20998226328210212 a=pan,b=zee,i=5649,x=0.1882750077103732,y=0.051490445358029824 a=zee,b=pan,i=5651,x=0.7900065659824048,y=0.8799973980821687 a=pan,b=eks,i=5654,x=0.4277856265977521,y=0.46720306495008457 a=pan,b=wye,i=5655,x=0.6238246026482904,y=0.5005719727517985 a=pan,b=zee,i=5657,x=0.10798159915883232,y=0.14419721657117324 a=wye,b=zee,i=5658,x=0.6608918667457152,y=0.9243582421976495 a=eks,b=wye,i=5659,x=0.6991477488632273,y=0.757988136039786 a=eks,b=eks,i=5660,x=0.6338110809908714,y=0.8899492379893515 a=zee,b=zee,i=5664,x=0.9028085500044974,y=0.6560744841877679 a=eks,b=wye,i=5666,x=0.11819158774260774,y=0.3269446466483843 a=hat,b=pan,i=5667,x=0.4124388603109588,y=0.32891147928157505 a=hat,b=hat,i=5668,x=0.28048754020684197,y=0.1586304642802714 a=eks,b=pan,i=5672,x=0.15818268756400555,y=0.06017126006059004 a=hat,b=eks,i=5675,x=0.6776164025070541,y=0.8270479553259737 a=hat,b=hat,i=5676,x=0.26316020747343927,y=0.4439406464012029 a=wye,b=eks,i=5678,x=0.6936453571596785,y=0.5977687990521104 a=zee,b=wye,i=5679,x=0.038384056804088296,y=0.39062169520305345 a=pan,b=eks,i=5684,x=0.5990374956703001,y=0.759556440814025 a=eks,b=wye,i=5685,x=0.2272695825818456,y=0.06890003755302965 a=pan,b=eks,i=5687,x=0.20540821693039724,y=0.4583791378818265 a=eks,b=eks,i=5688,x=0.2681427485140152,y=0.4723384743843706 a=pan,b=pan,i=5690,x=0.15932061131003383,y=0.10750760915363755 a=pan,b=wye,i=5691,x=0.6927406446662911,y=0.9484436166272129 a=hat,b=hat,i=5692,x=0.5189985771163975,y=0.8788751540883317 a=eks,b=eks,i=5693,x=0.2268536055075211,y=0.07181079334560747 a=zee,b=pan,i=5695,x=0.9393222489267224,y=0.774430899802153 a=pan,b=eks,i=5697,x=0.0327219679391374,y=0.09248968708796146 a=eks,b=eks,i=5702,x=0.25289706880351914,y=0.2805563313790924 a=hat,b=pan,i=5703,x=0.72917739071484,y=0.690903665960745 a=zee,b=wye,i=5704,x=0.5782219259637615,y=0.6129742019787713 a=hat,b=zee,i=5705,x=0.04579072787896754,y=0.15799336306835265 a=hat,b=hat,i=5708,x=0.5348701164177605,y=0.871699930863178 a=zee,b=pan,i=5709,x=0.6457903828308892,y=0.9224142093441036 a=wye,b=zee,i=5710,x=0.7433946942246273,y=0.7685021078153906 a=hat,b=eks,i=5712,x=0.6655721179929885,y=0.6283331080904476 a=eks,b=eks,i=5713,x=0.5690397938907296,y=0.9770357412029763 a=wye,b=zee,i=5714,x=0.08482160064983257,y=0.03799417629580293 a=eks,b=hat,i=5716,x=0.21238778822910676,y=0.3806052020082521 a=wye,b=pan,i=5719,x=0.5431877225362253,y=0.8355498406808398 a=eks,b=pan,i=5720,x=0.08305185712441976,y=0.051555598682940684 a=zee,b=hat,i=5721,x=0.2195036864656421,y=0.0024237944219759333 a=eks,b=zee,i=5723,x=0.21507165298767472,y=0.3682335327240591 a=eks,b=eks,i=5725,x=0.9447207896646325,y=0.5966728037991648 a=wye,b=zee,i=5727,x=0.8249759724947993,y=0.8786053736989866 a=wye,b=pan,i=5728,x=0.2648916398523009,y=0.36807949569468823 a=wye,b=zee,i=5729,x=0.38861160385421634,y=0.008675492900147463 a=eks,b=zee,i=5730,x=0.12149239438427939,y=0.4952581794297195 a=hat,b=wye,i=5731,x=0.9834987933267317,y=0.9382393032643578 a=hat,b=wye,i=5732,x=0.5015349091062511,y=0.6216857441435001 a=eks,b=pan,i=5733,x=0.13872819430672179,y=0.13383706933234074 a=eks,b=eks,i=5737,x=0.9827804718012476,y=0.8380939985179561 a=wye,b=hat,i=5738,x=0.8055154582345196,y=0.6724553306516827 a=eks,b=wye,i=5740,x=0.06533958654376182,y=0.08290954242914517 a=eks,b=pan,i=5741,x=0.8637268770032811,y=0.5213399189681543 a=hat,b=eks,i=5743,x=0.5295348501354114,y=0.7258797581771135 a=hat,b=hat,i=5744,x=0.12378910131331311,y=0.40752356675537815 a=zee,b=pan,i=5748,x=0.7440532825684012,y=0.9785802799882344 a=zee,b=hat,i=5749,x=0.21090673582102115,y=0.1689004632484875 a=pan,b=pan,i=5750,x=0.8304494332695221,y=0.5545369624062666 a=zee,b=pan,i=5751,x=0.5728551154691659,y=0.6693087997390269 a=eks,b=wye,i=5752,x=0.4413629999732097,y=0.15979822952735956 a=wye,b=eks,i=5753,x=0.7095091807055749,y=0.724643932584749 a=zee,b=zee,i=5755,x=0.3010837648341733,y=0.025119103758309502 a=pan,b=zee,i=5756,x=0.6193965896501459,y=0.8537626115609437 a=wye,b=zee,i=5758,x=0.7467869025815791,y=0.7773472293348217 a=eks,b=zee,i=5759,x=0.5808704155987169,y=0.7833615756850842 a=hat,b=eks,i=5760,x=0.9162336115551181,y=0.823024870348188 a=eks,b=pan,i=5761,x=0.8487786036617613,y=0.622984817551366 a=wye,b=pan,i=5762,x=0.40655642829036065,y=0.4636508847184254 a=eks,b=hat,i=5765,x=0.18805948712913445,y=0.22065247387702902 a=wye,b=zee,i=5770,x=0.2844962427329081,y=0.46659983713341124 a=pan,b=hat,i=5771,x=0.8904572608374995,y=0.8849293322073792 a=pan,b=eks,i=5773,x=0.5155930172001615,y=0.9788581972056736 a=zee,b=pan,i=5775,x=0.03055433366810012,y=0.1704580136613072 a=pan,b=eks,i=5776,x=0.7165945800863369,y=0.6653908462460456 a=pan,b=eks,i=5777,x=0.8730284129862198,y=0.6933278671481614 a=zee,b=hat,i=5779,x=0.10449109525989031,y=0.09472821919765906 a=hat,b=hat,i=5781,x=0.9223990594381151,y=0.9860563250941797 a=hat,b=zee,i=5783,x=0.6163250225253557,y=0.7015824283135457 a=hat,b=wye,i=5785,x=0.40569525676284146,y=0.22909456416866192 a=hat,b=hat,i=5792,x=0.04225905159882992,y=0.11113794777514896 a=wye,b=hat,i=5793,x=0.7433843634275165,y=0.5164678527321154 a=wye,b=zee,i=5795,x=0.6399305400537463,y=0.5169871749762857 a=pan,b=eks,i=5796,x=0.10739150192981317,y=0.004460524149627276 a=hat,b=hat,i=5797,x=0.5867728931987851,y=0.937578286245456 a=eks,b=hat,i=5798,x=0.3908387810335817,y=0.34330528598151944 a=wye,b=eks,i=5799,x=0.11663940947930529,y=0.2283382768880119 a=hat,b=wye,i=5800,x=0.20766266556079938,y=0.06909200825337258 a=hat,b=zee,i=5802,x=0.4647837023773008,y=0.30037328314118017 a=eks,b=hat,i=5804,x=0.29845440226372855,y=0.24711215673748332 a=zee,b=wye,i=5805,x=0.25960541840206386,y=0.22950027817819518 a=wye,b=pan,i=5806,x=0.6653575136807429,y=0.9060998128185732 a=pan,b=wye,i=5807,x=0.18771994519215784,y=0.26225112077131363 a=wye,b=pan,i=5808,x=0.3666840512152372,y=0.15437085935635642 a=eks,b=wye,i=5814,x=0.3619763137230263,y=0.3300717677846403 a=pan,b=eks,i=5816,x=0.9160561949834121,y=0.5246537157918573 a=wye,b=wye,i=5820,x=0.9675205269852082,y=0.8456558793367495 a=eks,b=eks,i=5822,x=0.6616970307501397,y=0.6091232839670194 a=eks,b=zee,i=5824,x=0.008069601151581285,y=0.4982567352783567 a=pan,b=hat,i=5825,x=0.5827800197345394,y=0.7803525569338927 a=eks,b=eks,i=5831,x=0.2131869859612514,y=0.051574404230206206 a=hat,b=eks,i=5832,x=0.536815843763481,y=0.9725354850537404 a=eks,b=wye,i=5836,x=0.8956966597743651,y=0.8528472084728154 a=pan,b=wye,i=5838,x=0.40192120844730816,y=0.01299427191690905 a=wye,b=eks,i=5842,x=0.6216373633536472,y=0.9301770846288369 a=zee,b=zee,i=5846,x=0.162570991251604,y=0.26519462331398813 a=hat,b=hat,i=5848,x=0.9956327931315808,y=0.8873051757938238 a=wye,b=pan,i=5850,x=0.9313090088228326,y=0.9743729163851863 a=eks,b=zee,i=5851,x=0.22409910130745192,y=0.13300739204811318 a=hat,b=pan,i=5852,x=0.9764589316784894,y=0.5367076815906018 a=zee,b=eks,i=5854,x=0.13307347063070984,y=0.35231749332115525 a=eks,b=wye,i=5859,x=0.07297199386640929,y=0.027345228589134907 a=eks,b=eks,i=5860,x=0.9833629242563793,y=0.9992250545586543 a=eks,b=hat,i=5861,x=0.885544518143363,y=0.6319209563437962 a=eks,b=zee,i=5867,x=0.9115822381629575,y=0.7866137441239371 a=zee,b=zee,i=5868,x=0.6094609434293627,y=0.5377506393673299 a=pan,b=wye,i=5870,x=0.7185567353405748,y=0.9625690376428901 a=zee,b=zee,i=5871,x=0.028580144473957514,y=0.3101568871452759 a=pan,b=pan,i=5872,x=0.3820471070600516,y=0.35563824254246 a=hat,b=pan,i=5873,x=0.48211948675174343,y=0.2808314182510484 a=zee,b=zee,i=5874,x=0.4244763123071966,y=0.27813346850123377 a=hat,b=hat,i=5875,x=0.08023425641620874,y=0.3562943757988909 a=eks,b=zee,i=5876,x=0.42409197009601207,y=0.2580874448511281 a=zee,b=hat,i=5877,x=0.6106977731868735,y=0.8348351384198046 a=hat,b=pan,i=5878,x=0.7267758858416487,y=0.6189509030501132 a=eks,b=pan,i=5879,x=0.9304167092235895,y=0.7812522227544872 a=wye,b=hat,i=5882,x=0.1079539981243911,y=0.27269401005584115 a=pan,b=pan,i=5884,x=0.5893199011375699,y=0.9675602927187726 a=zee,b=wye,i=5885,x=0.7855309055804873,y=0.8242084722200425 a=pan,b=hat,i=5886,x=0.21719695401350458,y=0.30358017023038153 a=pan,b=hat,i=5888,x=0.6047201198005093,y=0.9181081561579384 a=hat,b=hat,i=5889,x=0.585057883337934,y=0.8637135279822525 a=eks,b=hat,i=5891,x=0.38491586194929694,y=0.1469109750984342 a=eks,b=zee,i=5895,x=0.34688995428502123,y=0.05521465426780947 a=pan,b=hat,i=5896,x=0.9024771073805518,y=0.604435930128322 a=zee,b=zee,i=5898,x=0.9638020677593624,y=0.9758009686628205 a=wye,b=eks,i=5904,x=0.791240301793597,y=0.5905379287555277 a=wye,b=pan,i=5906,x=0.25968317122777085,y=0.21946674504226305 a=eks,b=pan,i=5907,x=0.20429202129242863,y=0.2739618927896226 a=wye,b=pan,i=5911,x=0.865745658241438,y=0.58440580479703 a=eks,b=hat,i=5912,x=0.8061623351763454,y=0.6282727719209886 a=zee,b=hat,i=5914,x=0.6882661603529711,y=0.8887129009982704 a=hat,b=zee,i=5916,x=0.5369361894430387,y=0.7602843160092176 a=zee,b=eks,i=5917,x=0.7603685712259192,y=0.6343676597010043 a=pan,b=hat,i=5918,x=0.366468458362766,y=0.03541459276961356 a=eks,b=hat,i=5921,x=0.7220748068466161,y=0.9135263674287071 a=hat,b=hat,i=5922,x=0.7007543076445784,y=0.5785000013877882 a=pan,b=wye,i=5925,x=0.02234819330370974,y=0.24864881451646326 a=wye,b=wye,i=5929,x=0.765996158956063,y=0.7875000435827569 a=zee,b=pan,i=5931,x=0.14870262574003812,y=0.25758171933702145 a=zee,b=eks,i=5933,x=0.21312616005615392,y=0.1555687828207697 a=hat,b=wye,i=5937,x=0.7939967856315264,y=0.9601200264326587 a=pan,b=pan,i=5938,x=0.7447545239901884,y=0.8615464344679636 a=wye,b=pan,i=5939,x=0.32618776050076514,y=0.04356428568705306 a=zee,b=pan,i=5940,x=0.30848692760824414,y=0.4765563067775509 a=zee,b=eks,i=5941,x=0.47731093944717395,y=0.20531029159472136 a=zee,b=hat,i=5942,x=0.14569062187871828,y=0.29647189869590773 a=wye,b=pan,i=5946,x=0.4654804137932894,y=0.034558917439536097 a=zee,b=hat,i=5947,x=0.21695412923454904,y=0.43929843802398505 a=hat,b=hat,i=5948,x=0.5757328621980413,y=0.6353025655596225 a=zee,b=eks,i=5953,x=0.9664924377661902,y=0.5704525111862812 a=zee,b=zee,i=5954,x=0.7314435770258082,y=0.5760633916387623 a=wye,b=eks,i=5955,x=0.11730300164253482,y=0.2437668953328913 a=wye,b=hat,i=5958,x=0.4484915030384218,y=0.0021936451209908503 a=hat,b=zee,i=5961,x=0.3083082640562401,y=0.43599613823729055 a=pan,b=eks,i=5962,x=0.15236030642851295,y=0.11800538936265059 a=zee,b=wye,i=5963,x=0.7842417183077839,y=0.8263558103417791 a=wye,b=hat,i=5965,x=0.7381633325773709,y=0.7044839805205219 a=eks,b=zee,i=5966,x=0.8246457170881877,y=0.546058458654676 a=wye,b=wye,i=5968,x=0.6210050577035034,y=0.6524576650195097 a=hat,b=pan,i=5969,x=0.7090572782654315,y=0.5364015328854267 a=eks,b=zee,i=5970,x=0.6509530715275128,y=0.5780440319964154 a=pan,b=pan,i=5971,x=0.2887825352259904,y=0.15004456717790193 a=zee,b=hat,i=5975,x=0.34854624620098384,y=0.12823216693877193 a=hat,b=zee,i=5976,x=0.12265984923829065,y=0.46184314823141537 a=eks,b=eks,i=5981,x=0.04584617519803835,y=0.07778733739846255 a=hat,b=hat,i=5982,x=0.12903186206218742,y=0.34208394676963483 a=wye,b=eks,i=5983,x=0.20225412929960151,y=0.467369874775762 a=zee,b=zee,i=5985,x=0.5011026241476996,y=0.805862929391608 a=pan,b=eks,i=5987,x=0.4615059476811778,y=0.052616042635722726 a=hat,b=wye,i=5988,x=0.6628427322104598,y=0.7830019543371667 a=wye,b=pan,i=5990,x=0.17713926799897517,y=0.23695227873073954 a=wye,b=zee,i=5993,x=0.5294790360408727,y=0.8997422208092308 a=zee,b=pan,i=5998,x=0.21694616431952807,y=0.39150665545149743 a=hat,b=zee,i=6001,x=0.5185086838193509,y=0.7904042779588125 a=eks,b=eks,i=6002,x=0.39573160678139196,y=0.4615703290236336 a=hat,b=wye,i=6005,x=0.7983815573901718,y=0.7761184973619634 a=wye,b=pan,i=6007,x=0.8053846290661436,y=0.8678997964852174 a=pan,b=pan,i=6016,x=0.7515268934050028,y=0.6517374909352979 a=eks,b=hat,i=6018,x=0.4684056585315659,y=0.337057411818393 a=zee,b=hat,i=6019,x=0.46644646414956337,y=0.37632624811846627 a=hat,b=hat,i=6026,x=0.26534848529863153,y=0.15071960409960417 a=pan,b=eks,i=6028,x=0.8921081985029767,y=0.918512738613517 a=pan,b=eks,i=6030,x=0.6604483059910737,y=0.828006457014962 a=wye,b=pan,i=6032,x=0.18616681775349353,y=0.428462590403658 a=wye,b=hat,i=6033,x=0.17782260468314637,y=0.3212752721293215 a=zee,b=zee,i=6034,x=0.1872485063005922,y=0.11358951848324028 a=hat,b=pan,i=6037,x=0.13535704558051898,y=0.08799048432237733 a=pan,b=eks,i=6040,x=0.02209842222005065,y=0.2707759101194467 a=pan,b=pan,i=6041,x=0.24065041069096327,y=0.096992272385374 a=wye,b=wye,i=6045,x=0.43588050348095864,y=0.4231462786478698 a=zee,b=eks,i=6046,x=0.35017939224895767,y=0.31215765738608925 a=hat,b=wye,i=6048,x=0.7766726125727336,y=0.5675508167476694 a=wye,b=zee,i=6050,x=0.6951984651252766,y=0.5425712622829648 a=pan,b=wye,i=6051,x=0.9427895952822903,y=0.8719941425198732 a=hat,b=hat,i=6052,x=0.5361976672567662,y=0.5331863539216497 a=eks,b=hat,i=6054,x=0.7073320813195529,y=0.9382615280812954 a=wye,b=wye,i=6055,x=0.9034120549999815,y=0.9428661865045129 a=wye,b=zee,i=6056,x=0.9036169505703209,y=0.8702961297029511 a=pan,b=zee,i=6057,x=0.351391651879459,y=0.22131930493166563 a=pan,b=hat,i=6059,x=0.8954915180233931,y=0.5799236237902317 a=pan,b=pan,i=6063,x=0.4553835211035392,y=0.421964673707642 a=eks,b=eks,i=6064,x=0.9195082628714536,y=0.7843278824429687 a=hat,b=zee,i=6066,x=0.6147064931036405,y=0.9150698526901345 a=hat,b=pan,i=6070,x=0.6313496582432914,y=0.9900649342170824 a=pan,b=pan,i=6071,x=0.8928836261132681,y=0.5415114404183805 a=pan,b=eks,i=6075,x=0.8012118002371259,y=0.7203879849887644 a=hat,b=wye,i=6076,x=0.8379974247825939,y=0.6503639424507504 a=hat,b=eks,i=6078,x=0.6372234825627152,y=0.5775364684644685 a=eks,b=hat,i=6080,x=0.5842098929256355,y=0.9268385178778537 a=wye,b=hat,i=6082,x=0.6940314918085063,y=0.9546919945201542 a=zee,b=wye,i=6083,x=0.07677730138586769,y=0.27970074396540523 a=hat,b=hat,i=6084,x=0.8231273607660942,y=0.7945531787758096 a=pan,b=hat,i=6087,x=0.7452242982918568,y=0.933266614617221 a=eks,b=eks,i=6088,x=0.9407795350577164,y=0.8986498240204077 a=eks,b=pan,i=6090,x=0.838908851853637,y=0.9142053659359575 a=pan,b=zee,i=6091,x=0.2805934812907199,y=0.4958691991853912 a=zee,b=wye,i=6094,x=0.38062861091901556,y=0.1551403595265176 a=eks,b=hat,i=6096,x=0.42296496745953693,y=0.028270087708508695 a=eks,b=wye,i=6098,x=0.004861307055076147,y=0.16556471646142745 a=hat,b=wye,i=6099,x=0.45226025959304195,y=0.18641738624575777 a=wye,b=eks,i=6100,x=0.6994211629442989,y=0.5162220389082391 a=hat,b=eks,i=6101,x=0.21566053977410837,y=0.0009137416907488705 a=zee,b=eks,i=6102,x=0.8280966067887752,y=0.694693806129609 a=zee,b=pan,i=6103,x=0.6340964020751576,y=0.62642563404278 a=zee,b=pan,i=6106,x=0.8553526569078405,y=0.9138200519516971 a=pan,b=eks,i=6108,x=0.08545243832367033,y=0.26227816664595516 a=pan,b=wye,i=6109,x=0.42064626396142935,y=0.03834575879901836 a=wye,b=eks,i=6112,x=0.32643889115109914,y=0.057664918435550105 a=eks,b=zee,i=6113,x=0.7830249162665363,y=0.9359267958767102 a=zee,b=pan,i=6114,x=0.12372114799931111,y=0.006510213999872061 a=pan,b=wye,i=6116,x=0.8796441138920073,y=0.7932277172417034 a=wye,b=pan,i=6118,x=0.6353087660069283,y=0.5051898483269901 a=wye,b=zee,i=6120,x=0.8391496713951982,y=0.8272270342812488 a=pan,b=wye,i=6121,x=0.10848385354873591,y=0.4213783243233229 a=eks,b=zee,i=6122,x=0.7851432595398691,y=0.8736148992334403 a=pan,b=wye,i=6123,x=0.14384598748640032,y=0.32134746224637845 a=hat,b=eks,i=6125,x=0.7256280642967333,y=0.8471794523838057 a=wye,b=hat,i=6128,x=0.5798880313425798,y=0.991140739248181 a=pan,b=eks,i=6130,x=0.06722223792791904,y=0.14906728853790685 a=eks,b=eks,i=6131,x=0.8733172145139986,y=0.754180892846082 a=wye,b=wye,i=6132,x=0.21323342519040167,y=0.023037099194546995 a=eks,b=hat,i=6133,x=0.2772309881804147,y=0.03618215388759871 a=zee,b=zee,i=6135,x=0.4368219705298403,y=0.02593555893570043 a=pan,b=eks,i=6138,x=0.09141195779591726,y=0.10884990452426058 a=zee,b=eks,i=6140,x=0.6449410501908724,y=0.7328187261405557 a=eks,b=eks,i=6150,x=0.2543117769739106,y=0.2683840371177597 a=wye,b=eks,i=6151,x=0.2875496688119247,y=0.44319198704607665 a=wye,b=eks,i=6152,x=0.7099732953682635,y=0.5854903351687778 a=wye,b=pan,i=6153,x=0.07854709434875495,y=0.3722757779564305 a=wye,b=zee,i=6156,x=0.06825592495808563,y=0.1502278354043537 a=hat,b=eks,i=6160,x=0.7011580850727354,y=0.6036204870691432 a=hat,b=hat,i=6163,x=0.10827051081377403,y=0.16793651272516608 a=pan,b=wye,i=6166,x=0.5836460911249829,y=0.5913706500552215 a=eks,b=pan,i=6168,x=0.011142080206369753,y=0.11796822475814073 a=hat,b=zee,i=6172,x=0.4805916761138247,y=0.1482140011291747 a=pan,b=zee,i=6173,x=0.07652496417334043,y=0.042388913077830326 a=wye,b=pan,i=6177,x=0.03184609338086353,y=0.0814260689531977 a=pan,b=eks,i=6180,x=0.6707266041969419,y=0.8559378190156729 a=eks,b=zee,i=6181,x=0.2802981253544844,y=0.3174939125127616 a=hat,b=wye,i=6182,x=0.5963539674332015,y=0.8719750664328125 a=hat,b=pan,i=6183,x=0.005703731409972823,y=0.13190978995990732 a=pan,b=eks,i=6186,x=0.8129419229181339,y=0.9565505011070674 a=pan,b=pan,i=6188,x=0.3138266925669364,y=0.1423581267550319 a=eks,b=zee,i=6189,x=0.1600695810764854,y=0.3703741621779819 a=zee,b=pan,i=6193,x=0.22555543203604156,y=0.354448421001617 a=hat,b=wye,i=6197,x=0.9175822141933855,y=0.8289821718204701 a=pan,b=pan,i=6198,x=0.7387220064556718,y=0.634422986160881 a=wye,b=zee,i=6201,x=0.3729199649979895,y=0.3737596699867053 a=pan,b=eks,i=6202,x=0.47394220338381987,y=0.22208820414520292 a=zee,b=eks,i=6206,x=0.4689131127096242,y=0.18743577113193155 a=wye,b=pan,i=6208,x=0.38705607831183175,y=0.33125379993312465 a=eks,b=pan,i=6210,x=0.11164707350592284,y=0.4366699296089537 a=zee,b=hat,i=6211,x=0.1756835304978165,y=0.21235178828034162 a=wye,b=zee,i=6213,x=0.223018528653398,y=0.07665796419452864 a=eks,b=pan,i=6218,x=0.413534591007817,y=0.23614970902594068 a=eks,b=zee,i=6220,x=0.047918107206670224,y=0.11615158016485994 a=wye,b=eks,i=6221,x=0.7465534540087728,y=0.9821197497223434 a=eks,b=wye,i=6222,x=0.06680014273579682,y=0.18844745124665652 a=eks,b=hat,i=6224,x=0.4238158023951344,y=0.2511472296462649 a=eks,b=hat,i=6226,x=0.02496410500180868,y=0.05574344857979974 a=hat,b=hat,i=6227,x=0.38672001205322815,y=0.19823389210483422 a=hat,b=pan,i=6229,x=0.14688149819492824,y=0.09514280973942923 a=zee,b=hat,i=6235,x=0.6700739126174862,y=0.9940554433455402 a=pan,b=eks,i=6241,x=0.8637612972836923,y=0.7179857913303808 a=pan,b=wye,i=6242,x=0.7916044619336652,y=0.8298956143848671 a=hat,b=wye,i=6243,x=0.03245716276075361,y=0.06220544584591636 a=eks,b=hat,i=6251,x=0.7449272998418788,y=0.6080272372617547 a=zee,b=pan,i=6252,x=0.5630148470870018,y=0.9374709146770936 a=zee,b=zee,i=6255,x=0.9316229517968885,y=0.652503212541953 a=hat,b=eks,i=6257,x=0.7050090746554877,y=0.8875603931761636 a=eks,b=wye,i=6258,x=0.9454475219485642,y=0.5012059708954245 a=zee,b=pan,i=6259,x=0.4266553967306278,y=0.4003433468882255 a=wye,b=zee,i=6260,x=0.9923421841444514,y=0.8824722395488493 a=hat,b=eks,i=6262,x=0.3350864667715827,y=0.014819836304338363 a=wye,b=hat,i=6263,x=0.9268271428508724,y=0.8044165287448475 a=pan,b=hat,i=6265,x=0.2970907219742721,y=0.1979486130274667 a=eks,b=eks,i=6267,x=0.6051949380519777,y=0.7786588336276383 a=hat,b=eks,i=6270,x=0.543219579817685,y=0.5740667894014433 a=zee,b=hat,i=6273,x=0.7504799514506184,y=0.5256684190391457 a=eks,b=eks,i=6274,x=0.7402757803304741,y=0.8741323775731765 a=zee,b=eks,i=6275,x=0.10740056926929464,y=0.24466182300866768 a=hat,b=eks,i=6277,x=0.4555390450312061,y=0.29958791124739714 a=hat,b=pan,i=6281,x=0.4484391085565852,y=0.4389498697416624 a=zee,b=eks,i=6283,x=0.5390923448056928,y=0.5167672853818701 a=wye,b=wye,i=6284,x=0.35204669568634417,y=0.4690592822602978 a=pan,b=pan,i=6285,x=0.32173095582057487,y=0.21796469598272317 a=wye,b=zee,i=6289,x=0.7327389149804516,y=0.7332292873505851 a=wye,b=pan,i=6291,x=0.72465968202963,y=0.8111622984322363 a=wye,b=zee,i=6292,x=0.7179223482928053,y=0.7389960044426721 a=pan,b=pan,i=6296,x=0.16446925567275705,y=0.2859671068853066 a=zee,b=hat,i=6298,x=0.9752808469326072,y=0.5811620174961745 a=pan,b=zee,i=6300,x=0.31023070105575734,y=0.11731145460396875 a=zee,b=zee,i=6302,x=0.24914699249882744,y=0.4481166721397105 a=hat,b=zee,i=6303,x=0.8952025142838863,y=0.5374079020216094 a=pan,b=zee,i=6305,x=0.1290986312271305,y=0.12638586813227837 a=pan,b=hat,i=6307,x=0.5265554249602866,y=0.5324141264515088 a=eks,b=hat,i=6311,x=0.9810589871426987,y=0.8707798683477451 a=eks,b=pan,i=6312,x=0.20487685479037343,y=0.3809481389765218 a=eks,b=pan,i=6317,x=0.3794062074790783,y=0.4471294857197765 a=zee,b=pan,i=6318,x=0.2692152520955172,y=0.22081394976202395 a=wye,b=wye,i=6322,x=0.5167349179748397,y=0.9138123003320032 a=zee,b=wye,i=6324,x=0.9515688609245834,y=0.6819481738668132 a=wye,b=eks,i=6325,x=0.9593196183251438,y=0.8367522899279389 a=zee,b=pan,i=6327,x=0.9887417195594495,y=0.8511851849030334 a=hat,b=pan,i=6330,x=0.5128088389522093,y=0.8131565213796835 a=hat,b=eks,i=6333,x=0.3615187221839192,y=0.4910814422431359 a=wye,b=eks,i=6334,x=0.09211420131313564,y=0.423787234189663 a=hat,b=zee,i=6335,x=0.4909870746929612,y=0.4355886224024228 a=eks,b=hat,i=6337,x=0.579470745492393,y=0.8856435834505533 a=wye,b=hat,i=6338,x=0.08580189556409401,y=0.18529503699085126 a=wye,b=eks,i=6340,x=0.893469417305926,y=0.6681902139221949 a=zee,b=zee,i=6343,x=0.1034004605453186,y=0.39652659704684057 a=wye,b=hat,i=6346,x=0.4029829128240823,y=0.11036697991316924 a=hat,b=pan,i=6349,x=0.8269557855792476,y=0.9027369919455107 a=zee,b=wye,i=6351,x=0.9929432399676,y=0.7266233986268336 a=zee,b=zee,i=6353,x=0.021330838330390844,y=0.3809296291373765 a=pan,b=hat,i=6354,x=0.7002692145665447,y=0.5873523948555504 a=eks,b=zee,i=6355,x=0.7096421804081511,y=0.8295306415940142 a=zee,b=zee,i=6357,x=0.49409427660264216,y=0.4850204111936285 a=hat,b=wye,i=6359,x=0.9607252863389836,y=0.5686827648028989 a=pan,b=eks,i=6360,x=0.7560882445267275,y=0.8572550831102655 a=wye,b=hat,i=6364,x=0.914528515618754,y=0.9410825640734111 a=eks,b=eks,i=6366,x=0.3386950606192106,y=0.06992633700519646 a=wye,b=wye,i=6367,x=0.7504949488085239,y=0.786978752534252 a=hat,b=zee,i=6368,x=0.5051737323297509,y=0.7652145340768823 a=hat,b=wye,i=6369,x=0.7463935682542416,y=0.5295073352906969 a=wye,b=pan,i=6370,x=0.49818710578255154,y=0.1690594948792461 a=eks,b=wye,i=6371,x=0.49803548538778086,y=0.22335884494050284 a=eks,b=hat,i=6372,x=0.4246224317545182,y=0.3262297869762637 a=wye,b=zee,i=6374,x=0.18643754020877645,y=0.3123085804500255 a=hat,b=hat,i=6375,x=0.8001034675030699,y=0.9517591892658788 a=pan,b=eks,i=6376,x=0.6252933549201062,y=0.555208264819299 a=pan,b=pan,i=6377,x=0.1234059193898962,y=0.4282585828512744 a=hat,b=eks,i=6381,x=0.9299884067645247,y=0.9833998868880498 a=zee,b=eks,i=6382,x=0.5086463065649875,y=0.7232680771660464 a=eks,b=wye,i=6385,x=0.375259929118559,y=0.37681150088581805 a=hat,b=pan,i=6386,x=0.09907032231055479,y=0.11845065981831315 a=wye,b=wye,i=6388,x=0.023110383118460698,y=0.4068502633328007 a=eks,b=wye,i=6389,x=0.06029233433804437,y=0.0069107595974849945 a=eks,b=eks,i=6390,x=0.37636185226364116,y=0.33595097225386006 a=pan,b=hat,i=6393,x=0.6164331222493035,y=0.799523761418903 a=eks,b=eks,i=6395,x=0.013151988906827783,y=0.3911978077086571 a=zee,b=pan,i=6396,x=0.05693046828037929,y=0.0830535181246761 a=hat,b=wye,i=6398,x=0.8278262369190469,y=0.8063525578215112 a=eks,b=pan,i=6401,x=0.3117980184170095,y=0.3896017834660054 a=zee,b=hat,i=6404,x=0.7164677134055616,y=0.9694565043354904 a=pan,b=hat,i=6405,x=0.9759078114126464,y=0.7063179771371398 a=pan,b=hat,i=6406,x=0.954175493846238,y=0.6691300320475423 a=zee,b=zee,i=6408,x=0.31225714410247885,y=0.2676588944630799 a=pan,b=eks,i=6410,x=0.0771175852385313,y=0.43719251713130314 a=eks,b=pan,i=6412,x=0.028528724411183704,y=0.4117910378534779 a=wye,b=wye,i=6413,x=0.6287761434833328,y=0.9307783735658955 a=zee,b=pan,i=6414,x=0.16675267868516974,y=0.46567693999380766 a=hat,b=hat,i=6415,x=0.8976720079433573,y=0.9828223660778185 a=hat,b=pan,i=6417,x=0.5832411030367591,y=0.9477789434363258 a=zee,b=hat,i=6420,x=0.8712427179950256,y=0.7447570934180631 a=wye,b=wye,i=6421,x=0.5648884056728719,y=0.5634331844443893 a=hat,b=wye,i=6422,x=0.01694176656548152,y=0.07336362857726697 a=wye,b=eks,i=6423,x=0.634648698039043,y=0.6818627870740478 a=hat,b=wye,i=6424,x=0.2615797200021953,y=0.06268282068424968 a=hat,b=pan,i=6426,x=0.6291090221287023,y=0.7077446188899329 a=zee,b=zee,i=6427,x=0.1266840835991615,y=0.4710457768189127 a=hat,b=eks,i=6428,x=0.09464086229090107,y=0.47239885675212656 a=zee,b=eks,i=6432,x=0.9977728531401571,y=0.5555230798468542 a=eks,b=wye,i=6435,x=0.29949442818251637,y=0.2980558556550551 a=hat,b=pan,i=6436,x=0.8917689813015088,y=0.984408429326343 a=wye,b=eks,i=6439,x=0.27627014363793057,y=0.16739805033116262 a=eks,b=eks,i=6440,x=0.54039073822999,y=0.7382909202030716 a=pan,b=wye,i=6441,x=0.5364355943542373,y=0.8667607097366447 a=zee,b=wye,i=6444,x=0.5115020732232286,y=0.5858898596014527 a=eks,b=wye,i=6445,x=0.08215358744465884,y=0.4803964930713249 a=pan,b=eks,i=6446,x=0.44656601416029373,y=0.025883415745221905 a=eks,b=pan,i=6447,x=0.2131521138705983,y=0.44443595051013873 a=hat,b=eks,i=6449,x=0.02954457910704722,y=0.18268010541285318 a=hat,b=hat,i=6453,x=0.6640804340662215,y=0.7894591475325365 a=zee,b=hat,i=6454,x=0.3766538672292219,y=0.4455838705050216 a=wye,b=pan,i=6455,x=0.23373281011403946,y=0.3153880547268789 a=wye,b=pan,i=6456,x=0.03036849011680509,y=0.2750194685259788 a=pan,b=hat,i=6458,x=0.09729717910412794,y=0.19414276392139473 a=wye,b=hat,i=6459,x=0.5675430389740692,y=0.8272519001873508 a=eks,b=wye,i=6460,x=0.5637263196436371,y=0.670195472057473 a=hat,b=eks,i=6462,x=0.9921482859148919,y=0.5987898976105622 a=wye,b=pan,i=6465,x=0.9167490958878957,y=0.9855848244933287 a=pan,b=zee,i=6466,x=0.15059271173810918,y=0.44163751220849723 a=eks,b=wye,i=6469,x=0.5901730276534817,y=0.8155922672887547 a=hat,b=wye,i=6470,x=0.6390276410501727,y=0.7865739186729956 a=wye,b=zee,i=6472,x=0.6214639311843375,y=0.5100489809959527 a=eks,b=eks,i=6474,x=0.21187331402552312,y=0.3570247389877106 a=pan,b=wye,i=6475,x=0.1407760095778986,y=0.4114197966182903 a=wye,b=hat,i=6477,x=0.4489569133156198,y=0.37328013990205033 a=hat,b=zee,i=6479,x=0.702402839401389,y=0.7009502307426156 a=hat,b=hat,i=6481,x=0.6708784819364922,y=0.8308286378718903 a=eks,b=wye,i=6483,x=0.6489598152434705,y=0.725168237682496 a=zee,b=wye,i=6484,x=0.12383076923326797,y=0.10227618505533276 a=wye,b=wye,i=6485,x=0.6359239484918648,y=0.6087629645637064 a=wye,b=wye,i=6486,x=0.26321351409255855,y=0.10213207378968225 a=hat,b=eks,i=6490,x=0.1904681932728718,y=0.39823383688284875 a=hat,b=pan,i=6493,x=0.17669129422616314,y=0.17133013634096628 a=zee,b=zee,i=6499,x=0.5093537663250951,y=0.5070363131757412 a=wye,b=zee,i=6501,x=0.857769146584233,y=0.7284491562757176 a=hat,b=wye,i=6502,x=0.13952314891314033,y=0.21138680405955823 a=hat,b=zee,i=6503,x=0.0821042436799082,y=0.2380454193004119 a=wye,b=eks,i=6506,x=0.2228766869756198,y=0.23547292675257847 a=wye,b=hat,i=6509,x=0.22689252452538788,y=0.01540955658171872 a=zee,b=wye,i=6510,x=0.03761238359284913,y=0.04430693507101946 a=zee,b=wye,i=6512,x=0.5717578999541683,y=0.583339576596991 a=eks,b=wye,i=6513,x=0.2576348537935582,y=0.02891940447221053 a=zee,b=wye,i=6514,x=0.7108561722879589,y=0.5343855601720103 a=pan,b=pan,i=6516,x=0.16436389636346782,y=0.06142769237145096 a=wye,b=hat,i=6517,x=0.9499786087950957,y=0.9169897551951627 a=hat,b=wye,i=6518,x=0.11226676145430348,y=0.3389463928651728 a=zee,b=zee,i=6519,x=0.2323137819710005,y=0.21425984944922594 a=wye,b=eks,i=6520,x=0.7524818540927941,y=0.9710297784453114 a=wye,b=pan,i=6524,x=0.4239737405316326,y=0.24586595155563684 a=wye,b=eks,i=6525,x=0.666984074931497,y=0.5881526921363845 a=zee,b=eks,i=6526,x=0.7035055465426836,y=0.9029683394431433 a=eks,b=eks,i=6528,x=0.35544201168726874,y=0.26203559629802176 a=hat,b=zee,i=6530,x=0.6725507341754717,y=0.8211175540313643 a=pan,b=eks,i=6531,x=0.9263381279440988,y=0.7230758102834317 a=hat,b=wye,i=6534,x=0.09447988348358638,y=0.21201328127649932 a=hat,b=eks,i=6535,x=0.0022062240850495574,y=0.3458564847842249 a=eks,b=eks,i=6536,x=0.08799574586608505,y=0.16463115926454674 a=pan,b=pan,i=6537,x=0.15749262177445233,y=0.3950102135965362 a=pan,b=hat,i=6541,x=0.0420481636052179,y=0.3896076829423738 a=zee,b=pan,i=6542,x=0.6629759666763753,y=0.7114746505059143 a=pan,b=hat,i=6544,x=0.48676766407802263,y=0.2518094002262543 a=hat,b=zee,i=6548,x=0.9011359340858558,y=0.6061658741277544 a=wye,b=wye,i=6549,x=0.2051254389063183,y=0.05111364491561332 a=hat,b=zee,i=6550,x=0.38066561435480195,y=0.42936645455121314 a=wye,b=eks,i=6553,x=0.33502063619497235,y=0.2610167700436856 a=pan,b=hat,i=6554,x=0.7802269675523349,y=0.9534940914356625 a=wye,b=hat,i=6555,x=0.005663846527729333,y=0.48584311997319796 a=eks,b=hat,i=6556,x=0.14062017897722112,y=0.005932662015826984 a=pan,b=wye,i=6560,x=0.0727664463558585,y=0.025570241966542673 a=zee,b=hat,i=6562,x=0.516217374487157,y=0.6640919516818178 a=eks,b=wye,i=6564,x=0.7790458055803663,y=0.6522738145614022 a=hat,b=eks,i=6565,x=0.8990182808114324,y=0.971140059395297 a=eks,b=zee,i=6566,x=0.5308026859083895,y=0.6453041296190671 a=hat,b=hat,i=6568,x=0.6015424402169296,y=0.9136579408737084 a=eks,b=zee,i=6569,x=0.07024602364065347,y=0.10258813515051479 a=hat,b=zee,i=6570,x=0.3550675740695889,y=0.007910225883702049 a=zee,b=pan,i=6571,x=0.1632710729418324,y=0.03017711376568888 a=eks,b=pan,i=6572,x=0.9270875444507882,y=0.637374878466062 a=pan,b=zee,i=6576,x=0.8777708761889912,y=0.5786474005042914 a=pan,b=pan,i=6577,x=0.3993469483222466,y=0.3892398770682076 a=wye,b=eks,i=6579,x=0.24777952654263558,y=0.27916343904186647 a=eks,b=eks,i=6580,x=0.6495626911864495,y=0.9137400574083774 a=eks,b=zee,i=6581,x=0.0552357804759368,y=0.27859129675614414 a=eks,b=wye,i=6582,x=0.047528529169082234,y=0.06138863023310337 a=eks,b=pan,i=6585,x=0.08337736967964804,y=0.03539849770256276 a=pan,b=wye,i=6586,x=0.29250342016498887,y=0.3069941691864093 a=eks,b=hat,i=6590,x=0.036271533325818894,y=0.34617217226715424 a=eks,b=zee,i=6592,x=0.9241230700230697,y=0.7087787442946673 a=hat,b=wye,i=6595,x=0.2134794663649403,y=0.1743187405629919 a=pan,b=wye,i=6597,x=0.7481435165529386,y=0.6957778649603638 a=zee,b=hat,i=6598,x=0.6210617717475871,y=0.6190922851909458 a=pan,b=zee,i=6599,x=0.18502780307376443,y=0.34510172711084 a=pan,b=zee,i=6606,x=0.8486989983659791,y=0.6465788461912306 a=eks,b=hat,i=6607,x=0.7823679742941769,y=0.8209287515709784 a=wye,b=hat,i=6609,x=0.12667845633514874,y=0.1111690903267013 a=zee,b=hat,i=6616,x=0.22594744492269403,y=0.16847954740221938 a=zee,b=hat,i=6620,x=0.49520075702438326,y=0.1675286620908042 a=pan,b=zee,i=6621,x=0.92531350722769,y=0.7331109839366486 a=eks,b=pan,i=6623,x=0.8441127141759738,y=0.9967304913754049 a=wye,b=hat,i=6624,x=0.5591280937962949,y=0.6627435675727004 a=eks,b=wye,i=6625,x=0.5105119511152182,y=0.5062086629041608 a=eks,b=wye,i=6629,x=0.042973374957347765,y=0.3504215411530547 a=hat,b=hat,i=6633,x=0.2959658325331481,y=0.13508551484281162 a=wye,b=hat,i=6634,x=0.09078570109861495,y=0.496300237950696 a=eks,b=pan,i=6635,x=0.1336818909314733,y=0.4638227719158149 a=eks,b=wye,i=6636,x=0.07517679920524767,y=0.4915331134051061 a=wye,b=zee,i=6638,x=0.591256877732877,y=0.5915874489265203 a=eks,b=zee,i=6641,x=0.8781234363470478,y=0.8882819185534889 a=hat,b=pan,i=6642,x=0.005715323745672962,y=0.2447512299512158 a=eks,b=zee,i=6643,x=0.015710994394110722,y=0.33183466779705995 a=wye,b=wye,i=6644,x=0.39250510547900563,y=0.08289629956063027 a=eks,b=hat,i=6645,x=0.261494320247025,y=0.36299917636703616 a=pan,b=wye,i=6648,x=0.23702724653048457,y=0.11584533450215717 a=hat,b=wye,i=6650,x=0.4661494621587131,y=0.17426048946142003 a=zee,b=eks,i=6651,x=0.47348695334894386,y=0.4301930194799014 a=pan,b=zee,i=6652,x=0.4602949257627642,y=0.49975689849461613 a=hat,b=eks,i=6653,x=0.8374977303853919,y=0.5694625331922527 a=zee,b=eks,i=6654,x=0.5422936444892872,y=0.5852344409380648 a=pan,b=hat,i=6655,x=0.6453370235827801,y=0.5399548634478539 a=pan,b=hat,i=6659,x=0.8340965806153038,y=0.9954916059691153 a=wye,b=hat,i=6660,x=0.797154755771274,y=0.5736771633024341 a=wye,b=pan,i=6664,x=0.8410807442089315,y=0.5618783788762672 a=zee,b=wye,i=6665,x=0.750023688775221,y=0.8540304746331103 a=pan,b=zee,i=6668,x=0.5792938319765554,y=0.549059780249718 a=eks,b=zee,i=6672,x=0.8633240831439754,y=0.805776035676606 a=eks,b=pan,i=6673,x=0.5844555116526361,y=0.9258656111924322 a=eks,b=hat,i=6677,x=0.07057457921469279,y=0.27327598383734664 a=zee,b=pan,i=6679,x=0.36757640497694033,y=0.15666791431421667 a=hat,b=pan,i=6683,x=0.6654580371987767,y=0.9155359993727842 a=eks,b=hat,i=6687,x=0.4611093872251627,y=0.4933386211537618 a=pan,b=pan,i=6688,x=0.13485289624642116,y=0.30288273557456213 a=zee,b=hat,i=6690,x=0.5203670639579945,y=0.7962270767115127 a=hat,b=wye,i=6691,x=0.6886657290157878,y=0.9480662991851704 a=eks,b=hat,i=6692,x=0.09793478921203369,y=0.45646997283913904 a=eks,b=wye,i=6695,x=0.9070253492729443,y=0.8359657479869284 a=eks,b=pan,i=6696,x=0.5213061786374872,y=0.9436108956847651 a=wye,b=eks,i=6699,x=0.4863235665190313,y=0.024761627522226104 a=pan,b=pan,i=6702,x=0.09897861729160984,y=0.1632726180578581 a=zee,b=pan,i=6703,x=0.6063357396844151,y=0.9440640953293378 a=wye,b=zee,i=6704,x=0.9929065501226577,y=0.9563353213992627 a=zee,b=zee,i=6705,x=0.6695263366217671,y=0.9094821746571289 a=eks,b=hat,i=6706,x=0.6005219270357064,y=0.7674256844260718 a=eks,b=wye,i=6708,x=0.3630047546497195,y=0.3731502489099452 a=pan,b=wye,i=6709,x=0.6499789136488362,y=0.9975126213435949 a=pan,b=eks,i=6710,x=0.9822306336820864,y=0.9518481162696052 a=hat,b=eks,i=6712,x=0.0038597545092279306,y=0.04201771404673427 a=hat,b=hat,i=6713,x=0.4327034173748717,y=0.40765932026954144 a=pan,b=pan,i=6715,x=0.941886673981322,y=0.6955697200870666 a=wye,b=eks,i=6716,x=0.7399610338026938,y=0.7410171019957901 a=wye,b=eks,i=6717,x=0.867978110755599,y=0.5614068975084064 a=eks,b=zee,i=6720,x=0.14299332956774857,y=0.3448281281418095 a=zee,b=hat,i=6721,x=0.6375447951528392,y=0.9688821643544498 a=wye,b=pan,i=6723,x=0.08857317290220112,y=0.22813936075330932 a=hat,b=wye,i=6726,x=0.8681656798259132,y=0.5422446735924256 a=wye,b=hat,i=6728,x=0.19864833682412852,y=0.07849170872015998 a=zee,b=pan,i=6730,x=0.664189415821601,y=0.9231485351812634 a=pan,b=eks,i=6731,x=0.3748183297884402,y=0.14651294307202578 a=hat,b=eks,i=6732,x=0.19051425073038974,y=0.2534461176951027 a=wye,b=eks,i=6736,x=0.1720144618863838,y=0.07472067325986242 a=hat,b=hat,i=6740,x=0.1638749831040246,y=0.33942864618967783 a=eks,b=pan,i=6742,x=0.7821265240696961,y=0.5002704992494771 a=pan,b=pan,i=6744,x=0.3890975093181427,y=0.13247688252534073 a=eks,b=eks,i=6745,x=0.17791482999411534,y=0.49908183588985267 a=zee,b=eks,i=6750,x=0.411125321089135,y=0.47877014881710245 a=wye,b=pan,i=6751,x=0.5228421813260895,y=0.9476995312395788 a=eks,b=hat,i=6752,x=0.5272144612869077,y=0.5823689048097198 a=eks,b=wye,i=6757,x=0.6668899487792558,y=0.6148196125913775 a=wye,b=eks,i=6758,x=0.24918942240065567,y=0.1175614364985561 a=hat,b=hat,i=6759,x=0.4409476763420297,y=0.37269928936748364 a=eks,b=wye,i=6761,x=0.846782848681552,y=0.7680754064510079 a=hat,b=zee,i=6763,x=0.8827431489428148,y=0.8101223666047421 a=wye,b=eks,i=6764,x=0.8818772544000334,y=0.5852259091501919 a=wye,b=zee,i=6769,x=0.015938042152491505,y=0.2467410432381938 a=zee,b=wye,i=6770,x=0.4647151786207453,y=0.09586765050852464 a=wye,b=pan,i=6773,x=0.1251517157188331,y=0.14006157275798192 a=zee,b=eks,i=6775,x=0.7107364083112168,y=0.747744177326698 a=pan,b=eks,i=6776,x=0.7402366773916875,y=0.5425967566595283 a=pan,b=pan,i=6777,x=0.8587338035081189,y=0.6815723862967287 a=hat,b=pan,i=6781,x=0.31100740187371934,y=0.15295409834535245 a=zee,b=eks,i=6783,x=0.09545968133365756,y=0.010784899546895543 a=zee,b=wye,i=6784,x=0.609956046414881,y=0.6555640945124119 a=pan,b=wye,i=6785,x=0.5316777127876826,y=0.6104961546467026 a=pan,b=wye,i=6786,x=0.25974778249116803,y=0.08881791270926387 a=wye,b=eks,i=6788,x=0.59700206673727,y=0.5092154392509416 a=eks,b=hat,i=6789,x=0.11384620831197945,y=0.21498304087430675 a=zee,b=eks,i=6790,x=0.3259643807042226,y=0.294440283499696 a=hat,b=pan,i=6791,x=0.3918842930839752,y=0.4866508833195289 a=pan,b=pan,i=6792,x=0.5301735918581785,y=0.8191767116079914 a=zee,b=wye,i=6793,x=0.09304197140837533,y=0.41014621328207224 a=eks,b=wye,i=6796,x=0.5909399906562114,y=0.5580035130979556 a=eks,b=hat,i=6797,x=0.9632745089330987,y=0.7078513092089819 a=zee,b=eks,i=6799,x=0.9004852465295646,y=0.9465220966082961 a=wye,b=zee,i=6800,x=0.24904470404318169,y=0.4920531920025397 a=pan,b=hat,i=6805,x=0.8362059152851221,y=0.9472897492210541 a=eks,b=wye,i=6811,x=0.7065407352836623,y=0.8368678138790903 a=eks,b=eks,i=6813,x=0.22195791037233625,y=0.46000678721121724 a=zee,b=zee,i=6815,x=0.5000818809944109,y=0.771946292891575 a=hat,b=wye,i=6817,x=0.8610216667264953,y=0.5382429359595315 a=eks,b=pan,i=6819,x=0.5703992590220686,y=0.8637215064086881 a=wye,b=zee,i=6823,x=0.5781208624185773,y=0.8409446241801248 a=eks,b=hat,i=6824,x=0.43385175975083057,y=0.41792395879700195 a=zee,b=pan,i=6826,x=0.8340499179886257,y=0.9535536917685269 a=zee,b=hat,i=6829,x=0.41031480623763106,y=0.45880274972572666 a=pan,b=pan,i=6830,x=0.1142681517107742,y=0.2829811068526855 a=hat,b=pan,i=6832,x=0.7805431061337192,y=0.6499156385099167 a=pan,b=wye,i=6834,x=0.1500861412508071,y=0.4288594929835393 a=eks,b=eks,i=6836,x=0.8314643867997237,y=0.6792470433081391 a=hat,b=wye,i=6838,x=0.7770652463104809,y=0.6687521390314989 a=eks,b=zee,i=6840,x=0.6482286253811516,y=0.8094333984928788 a=wye,b=pan,i=6841,x=0.2567333227180485,y=0.3632000329956243 a=wye,b=eks,i=6843,x=0.22133780427833827,y=0.12550147451196636 a=wye,b=eks,i=6846,x=0.6423397517155203,y=0.8356059098780667 a=pan,b=hat,i=6848,x=0.13005488453891356,y=0.36376504302138823 a=pan,b=pan,i=6849,x=0.7292341394730394,y=0.9619604141937782 a=zee,b=hat,i=6853,x=0.16224652017611052,y=0.3566205026903966 a=pan,b=pan,i=6854,x=0.7113055088893854,y=0.8848278821601264 a=hat,b=pan,i=6856,x=0.6726315514891058,y=0.9389924558403268 a=wye,b=wye,i=6858,x=0.3955235311928522,y=0.1986261607297174 a=wye,b=pan,i=6859,x=0.3196180023166212,y=0.22620149742138462 a=eks,b=wye,i=6860,x=0.7484529088599197,y=0.9458674650980478 a=hat,b=eks,i=6861,x=0.5333359352881868,y=0.6705965726039589 a=hat,b=eks,i=6864,x=0.5485065278651766,y=0.5820232711323319 a=zee,b=wye,i=6867,x=0.9102230409548707,y=0.9019213473878609 a=pan,b=zee,i=6868,x=0.4631144547528713,y=0.17716733576639176 a=hat,b=eks,i=6869,x=0.2542372110197165,y=0.30416858126881696 a=pan,b=wye,i=6870,x=0.4253800398968478,y=0.033574775026327885 a=wye,b=eks,i=6872,x=0.38036352987366395,y=0.46731687201043415 a=wye,b=eks,i=6873,x=0.9798362101131622,y=0.797643782226173 a=eks,b=hat,i=6874,x=0.5227336833787608,y=0.9908448955682759 a=eks,b=zee,i=6875,x=0.606422651768782,y=0.914840315532674 a=pan,b=hat,i=6876,x=0.5129530277212709,y=0.7790386991794965 a=zee,b=pan,i=6878,x=0.31397281280064293,y=0.16291546501309395 a=pan,b=zee,i=6879,x=0.5284562057774806,y=0.7918033883536163 a=eks,b=wye,i=6880,x=0.5984387679261401,y=0.9753479770314387 a=zee,b=hat,i=6881,x=0.5862597507571483,y=0.7707420703176064 a=pan,b=eks,i=6882,x=0.5334986785639318,y=0.9783513827876675 a=zee,b=wye,i=6883,x=0.7679069545156161,y=0.7810806767827133 a=hat,b=pan,i=6884,x=0.25121382521102964,y=0.08373878679612079 a=zee,b=pan,i=6888,x=0.7705250058516857,y=0.9061349225471161 a=zee,b=hat,i=6896,x=0.7359164967591003,y=0.8293086338798401 a=zee,b=zee,i=6901,x=0.15447805903030032,y=0.3708113295153489 a=hat,b=wye,i=6904,x=0.8610376333440763,y=0.7594915846085165 a=zee,b=pan,i=6905,x=0.2561178270791922,y=0.11749615398320445 a=wye,b=zee,i=6907,x=0.6367788848968293,y=0.6394774166453675 a=pan,b=wye,i=6910,x=0.25097439132798516,y=0.0005109887783484313 a=zee,b=eks,i=6912,x=0.8996806626412216,y=0.8543839233593294 a=pan,b=zee,i=6913,x=0.6587566128742129,y=0.5632886251369115 a=eks,b=pan,i=6914,x=0.6621105804379062,y=0.9655406039971886 a=wye,b=eks,i=6917,x=0.4116075902695022,y=0.28661075899283883 a=hat,b=zee,i=6918,x=0.9078126587488162,y=0.825042025154357 a=eks,b=pan,i=6920,x=0.5871441514609353,y=0.8959550649206074 a=zee,b=wye,i=6921,x=0.5169699337780084,y=0.8908217878266501 a=hat,b=zee,i=6924,x=0.18898941655772628,y=0.41248127061100026 a=eks,b=eks,i=6926,x=0.48658959418573866,y=0.12700817464144343 a=pan,b=pan,i=6927,x=0.2148229483341345,y=0.142698457109815 a=wye,b=wye,i=6928,x=0.9723961772197747,y=0.9337468605908721 a=pan,b=hat,i=6929,x=0.39047545698773434,y=0.1014408675739632 a=eks,b=zee,i=6930,x=0.5526320529536692,y=0.6589359191373861 a=pan,b=zee,i=6933,x=0.736088726276053,y=0.9511504821090352 a=pan,b=hat,i=6934,x=0.0735762788752764,y=0.0008249210316072508 a=hat,b=hat,i=6935,x=0.8448124844892154,y=0.7472136644468284 a=pan,b=pan,i=6939,x=0.9322271691157334,y=0.5636509019339512 a=hat,b=eks,i=6941,x=0.7647380306778612,y=0.5588346481843296 a=hat,b=eks,i=6946,x=0.06859192488355459,y=0.18197505910402123 a=pan,b=hat,i=6948,x=0.6806028930853153,y=0.5337351071127955 a=eks,b=wye,i=6950,x=0.5484166834064047,y=0.5444329351784222 a=pan,b=wye,i=6956,x=0.05509311089172042,y=0.02187042391982985 a=wye,b=pan,i=6960,x=0.3153717815038891,y=0.09047586220595472 a=zee,b=wye,i=6961,x=0.6007313242961704,y=0.6613290251670858 a=pan,b=zee,i=6962,x=0.7601533500363858,y=0.8925522323934668 a=wye,b=pan,i=6963,x=0.48448541281210233,y=0.41562920864135944 a=hat,b=eks,i=6964,x=0.4992605837600408,y=0.43605518279149746 a=wye,b=hat,i=6965,x=0.45740161659615763,y=0.04534932831025773 a=hat,b=pan,i=6966,x=0.7533879705727782,y=0.5865175721970042 a=wye,b=wye,i=6969,x=0.31490517543879204,y=0.21016765203059373 a=eks,b=zee,i=6973,x=0.8858598587998294,y=0.6368695546608352 a=zee,b=wye,i=6974,x=0.989576281733764,y=0.6583358951055004 a=wye,b=wye,i=6976,x=0.3024970191010684,y=0.2093604064761977 a=zee,b=pan,i=6977,x=0.7855530401666628,y=0.9857367912810565 a=zee,b=hat,i=6979,x=0.236940011648326,y=0.43182187533436656 a=zee,b=eks,i=6980,x=0.7036947557005062,y=0.8967163177168612 a=pan,b=eks,i=6982,x=0.0009579203969094507,y=0.4374451455672883 a=pan,b=eks,i=6983,x=0.414932981812524,y=0.43196390781557925 a=pan,b=eks,i=6985,x=0.2597251524181662,y=0.17875541966558117 a=wye,b=pan,i=6986,x=0.397846421602455,y=0.061580742680189204 a=zee,b=zee,i=6988,x=0.9430266721644799,y=0.5094104013079503 a=eks,b=hat,i=6989,x=0.3313418699976328,y=0.33567997892328394 a=eks,b=zee,i=6990,x=0.5148133498496276,y=0.6918563081083983 a=hat,b=wye,i=6991,x=0.25547073172247026,y=0.20184384726111237 a=wye,b=wye,i=6993,x=0.8254022878057393,y=0.633291096076743 a=pan,b=zee,i=6997,x=0.7983517224073071,y=0.5557697277179173 a=hat,b=wye,i=7002,x=0.41061585650926835,y=0.01643773647124569 a=hat,b=hat,i=7004,x=0.5167987887837867,y=0.6125153714308963 a=zee,b=pan,i=7009,x=0.3868986728643612,y=0.32414353523303663 a=pan,b=wye,i=7012,x=0.718361521407771,y=0.5051204438264707 a=wye,b=eks,i=7014,x=0.7012074385988786,y=0.5007374216681656 a=wye,b=eks,i=7019,x=0.3036229968730817,y=0.23518690587775104 a=zee,b=eks,i=7020,x=0.4316289204904483,y=0.08091854356676809 a=hat,b=zee,i=7021,x=0.863877436043872,y=0.5856682390415403 a=pan,b=eks,i=7023,x=0.29791421670042273,y=0.07470613128293369 a=pan,b=zee,i=7026,x=0.5129987522412781,y=0.6196138088300045 a=zee,b=eks,i=7028,x=0.5584826667497241,y=0.7683156302547838 a=hat,b=pan,i=7029,x=0.9655789508856257,y=0.5847058626759788 a=zee,b=pan,i=7030,x=0.6277332467942169,y=0.6792611974173626 a=pan,b=wye,i=7031,x=0.6131961433966792,y=0.687915924439632 a=pan,b=hat,i=7032,x=0.9325179960861075,y=0.9058746805470116 a=pan,b=zee,i=7037,x=0.33589607439034086,y=0.020535990195571174 a=zee,b=zee,i=7038,x=0.2760987429128404,y=0.4680732030302005 a=hat,b=wye,i=7039,x=0.7395205341627435,y=0.7057475465708692 a=zee,b=eks,i=7043,x=0.9227470147480153,y=0.7805110973249272 a=eks,b=hat,i=7044,x=0.9125698654022647,y=0.6003269419507505 a=pan,b=pan,i=7045,x=0.9149867225420508,y=0.8482623017705537 a=zee,b=hat,i=7047,x=0.3821711240746809,y=0.20003488070361253 a=wye,b=zee,i=7048,x=0.20803556414051616,y=0.2099912026909062 a=hat,b=wye,i=7049,x=0.670378278494791,y=0.7076636735945074 a=hat,b=zee,i=7050,x=0.23723928107944892,y=0.14022716241391253 a=pan,b=pan,i=7052,x=0.2551692350228507,y=0.30169763443298714 a=pan,b=zee,i=7055,x=0.3237065988296146,y=0.16406274536872145 a=eks,b=hat,i=7059,x=0.920076220476711,y=0.5876972502303767 a=hat,b=eks,i=7060,x=0.9346394642794167,y=0.6814288404781228 a=pan,b=wye,i=7063,x=0.39952219916088616,y=0.40591491856978035 a=hat,b=zee,i=7064,x=0.14067685725223567,y=0.3092246716986138 a=pan,b=wye,i=7068,x=0.4549499403459556,y=0.49621131228697424 a=eks,b=pan,i=7069,x=0.9886201663452385,y=0.9412530719900734 a=wye,b=hat,i=7070,x=0.665041142898201,y=0.9595343437808125 a=pan,b=zee,i=7072,x=0.2724259823227272,y=0.30192794453375993 a=eks,b=eks,i=7074,x=0.8193690697522501,y=0.503433259768719 a=hat,b=eks,i=7075,x=0.4081232497868382,y=0.44918917218867327 a=pan,b=hat,i=7076,x=0.39435745153096624,y=0.2533507793160499 a=zee,b=eks,i=7077,x=0.9030855046114618,y=0.7353402992136046 a=zee,b=zee,i=7078,x=0.28428013807040586,y=0.3777563622186406 a=wye,b=pan,i=7081,x=0.5027581392155828,y=0.5918516944292527 a=wye,b=pan,i=7083,x=0.6981142504634895,y=0.5779284385442213 a=eks,b=hat,i=7084,x=0.2854516522673507,y=0.20310209686600733 a=hat,b=zee,i=7086,x=0.9886292059134817,y=0.7404507111518657 a=eks,b=zee,i=7089,x=0.2711607560909379,y=0.24024418535758385 a=hat,b=eks,i=7091,x=0.7757377070780304,y=0.9407578395112463 a=pan,b=hat,i=7093,x=0.6397441933292296,y=0.9829200046878069 a=wye,b=pan,i=7096,x=0.07890849487936957,y=0.41485920875555027 a=wye,b=zee,i=7097,x=0.8196751485720796,y=0.9182400853440643 a=wye,b=pan,i=7098,x=0.06668588398001474,y=0.26172812514471555 a=eks,b=hat,i=7099,x=0.22008401563656388,y=0.04305085018273014 a=zee,b=hat,i=7105,x=0.2980064088882294,y=0.3531576463065931 a=zee,b=zee,i=7106,x=0.9884822924298222,y=0.9742451923102192 a=pan,b=wye,i=7107,x=0.2998044704471554,y=0.2269111558178346 a=eks,b=zee,i=7109,x=0.6665600019130787,y=0.5478452197045156 a=pan,b=hat,i=7111,x=0.06963315314613838,y=0.11691071591581381 a=wye,b=wye,i=7112,x=0.5792946910659483,y=0.7652424387264126 a=eks,b=pan,i=7113,x=0.2918757972941147,y=0.09568558582017328 a=zee,b=eks,i=7116,x=0.7404888117639189,y=0.7975704275356439 a=zee,b=wye,i=7117,x=0.3032123219266547,y=0.408039844976006 a=wye,b=hat,i=7119,x=0.6315033401415422,y=0.9740617533706384 a=pan,b=wye,i=7120,x=0.5205183279285498,y=0.6711794774673148 a=pan,b=zee,i=7125,x=0.2551365895416149,y=0.28047087188514475 a=pan,b=hat,i=7127,x=0.30368095354356406,y=0.2597236612256202 a=pan,b=zee,i=7131,x=0.19933196272377474,y=0.33283266063310113 a=pan,b=wye,i=7132,x=0.5712931905065656,y=0.7126877408626767 a=wye,b=hat,i=7133,x=0.8722812709831377,y=0.7402713360198966 a=zee,b=zee,i=7134,x=0.8239370005383643,y=0.8999946232295659 a=hat,b=hat,i=7135,x=0.7884238740570607,y=0.502745899378346 a=zee,b=eks,i=7136,x=0.1151808584625903,y=0.09114185305034295 a=hat,b=pan,i=7137,x=0.2542302739150816,y=0.10795409059370309 a=hat,b=wye,i=7138,x=0.2410727132014231,y=0.4676445777847451 a=zee,b=wye,i=7140,x=0.1974763738933888,y=0.05233731805135977 a=hat,b=zee,i=7141,x=0.5122141330634649,y=0.9464876262232287 a=pan,b=hat,i=7142,x=0.5253509732767064,y=0.8670318755725022 a=wye,b=hat,i=7143,x=0.21543094473021618,y=0.04601417423771059 a=zee,b=hat,i=7144,x=0.6991820521352337,y=0.729482196220355 a=zee,b=pan,i=7146,x=0.9971541764709625,y=0.892947440752753 a=pan,b=zee,i=7147,x=0.04585989364324272,y=0.09848374190945741 a=zee,b=zee,i=7148,x=0.08359037777595768,y=0.18397726583989749 a=zee,b=hat,i=7149,x=0.7990351121845923,y=0.883654825281865 a=wye,b=pan,i=7153,x=0.6258726536948953,y=0.7945230748164691 a=zee,b=eks,i=7155,x=0.33789283812701887,y=0.4922604374749663 a=pan,b=eks,i=7156,x=0.8443027153248559,y=0.6768057967242282 a=eks,b=wye,i=7159,x=0.3902007098058078,y=0.1663592901985712 a=hat,b=hat,i=7161,x=0.05527312148960439,y=0.40628388765166956 a=wye,b=wye,i=7163,x=0.4555929409217334,y=0.46397391790537257 a=eks,b=pan,i=7164,x=0.5336092896068227,y=0.6717538742842986 a=pan,b=zee,i=7168,x=0.05484316817552892,y=0.17151702310481431 a=hat,b=wye,i=7173,x=0.18576991003719212,y=0.32538288858474795 a=hat,b=eks,i=7175,x=0.8596787945183175,y=0.9376543180536796 a=wye,b=pan,i=7176,x=0.6724292506877466,y=0.8820892101229925 a=eks,b=hat,i=7185,x=0.16457422522306786,y=0.3254688160534126 a=pan,b=pan,i=7186,x=0.09026915761362286,y=0.023448958188875713 a=hat,b=wye,i=7187,x=0.4560687123084549,y=0.4064263428720335 a=wye,b=pan,i=7188,x=0.4956424303944521,y=0.2862948969999991 a=wye,b=eks,i=7191,x=0.40387119430799534,y=0.2671989768915307 a=hat,b=zee,i=7192,x=0.04140473031764258,y=0.12247713585949505 a=eks,b=eks,i=7198,x=0.21945638426831482,y=0.02350640610667476 a=wye,b=pan,i=7201,x=0.9400232704650787,y=0.6360498242547704 a=zee,b=zee,i=7203,x=0.6196913167679251,y=0.7693669742661702 a=pan,b=eks,i=7204,x=0.7025276205611544,y=0.5171960435307702 a=wye,b=pan,i=7208,x=0.49730390768352073,y=0.040387788389040336 a=wye,b=zee,i=7209,x=0.2990551204662385,y=0.24766816596397379 a=hat,b=zee,i=7211,x=0.5479599732793081,y=0.7309237182718691 a=hat,b=hat,i=7212,x=0.11334324090228143,y=0.4449813414016559 a=wye,b=hat,i=7216,x=0.5252986145121908,y=0.9054934316514225 a=hat,b=pan,i=7218,x=0.2996125766631278,y=0.4976607588511254 a=zee,b=zee,i=7219,x=0.6269054706790941,y=0.7732047241313896 a=zee,b=hat,i=7220,x=0.9218855933251531,y=0.9884286346489324 a=zee,b=zee,i=7221,x=0.8961118412742498,y=0.5527678285308364 a=pan,b=hat,i=7222,x=0.06750577252048573,y=0.45278767440580836 a=eks,b=eks,i=7224,x=0.826281664166814,y=0.7784066577349854 a=eks,b=eks,i=7227,x=0.5839736448682071,y=0.8252023673907429 a=eks,b=pan,i=7230,x=0.6437767672345736,y=0.880694505581993 a=hat,b=eks,i=7231,x=0.8525023870231172,y=0.8371410685258226 a=eks,b=zee,i=7232,x=0.8665889356718274,y=0.727601457029631 a=eks,b=eks,i=7234,x=0.24279014390270426,y=0.2483565874207584 a=hat,b=pan,i=7235,x=0.8801345341211195,y=0.9358790870593957 a=pan,b=wye,i=7236,x=0.27447738011116474,y=0.004545127562776141 a=zee,b=zee,i=7237,x=0.4441192412902708,y=0.12641379815166043 a=zee,b=wye,i=7240,x=0.08769157759149027,y=0.4682424277651016 a=wye,b=pan,i=7243,x=0.23457496179942383,y=0.25480860225867064 a=pan,b=wye,i=7244,x=0.33418676914584544,y=0.12547224222781395 a=eks,b=hat,i=7245,x=0.15591846641848217,y=0.06738895282990076 a=zee,b=zee,i=7250,x=0.4205283537525053,y=0.017542491951736294 a=wye,b=zee,i=7251,x=0.03690845523228947,y=0.3207859173250125 a=pan,b=hat,i=7255,x=0.005529616019901207,y=0.050405481126457485 a=hat,b=zee,i=7256,x=0.19429528950321628,y=0.2713422241532205 a=wye,b=zee,i=7257,x=0.030816159583946456,y=0.26057323500261886 a=eks,b=pan,i=7261,x=0.5956552210056466,y=0.6731134108078785 a=wye,b=zee,i=7263,x=0.7738670394914589,y=0.7776575420356829 a=pan,b=zee,i=7266,x=0.29284541534943886,y=0.302297804948473 a=hat,b=wye,i=7273,x=0.14732182908248415,y=0.15766209607019577 a=zee,b=hat,i=7274,x=0.12912926442853778,y=0.4373967289737535 a=pan,b=wye,i=7278,x=0.8504546169336947,y=0.8944056123200194 a=pan,b=pan,i=7281,x=0.8126567917280336,y=0.8074968827433902 a=wye,b=wye,i=7283,x=0.7932471858732224,y=0.799314077275886 a=zee,b=pan,i=7284,x=0.9156868185576506,y=0.8532083341105031 a=pan,b=eks,i=7285,x=0.6782016255263672,y=0.6826685678107132 a=zee,b=hat,i=7287,x=0.1793121692955475,y=0.15066781644968152 a=pan,b=pan,i=7289,x=0.5648161072496519,y=0.5225373033056284 a=zee,b=hat,i=7291,x=0.4416432361854393,y=0.4815754525534033 a=pan,b=pan,i=7292,x=0.7818043909150125,y=0.8301584593837131 a=wye,b=hat,i=7296,x=0.06387677434814132,y=0.4016686557239688 a=eks,b=zee,i=7301,x=0.24231768726605574,y=0.36168589987653654 a=pan,b=wye,i=7302,x=0.9493279693158848,y=0.9320553760871662 a=zee,b=pan,i=7304,x=0.6353829183388288,y=0.7926738022346027 a=pan,b=hat,i=7305,x=0.5874095716972196,y=0.7353421801026144 a=wye,b=hat,i=7312,x=0.23122127585115393,y=0.34710066461942035 a=hat,b=hat,i=7313,x=0.04440593404771587,y=0.37885696420400083 a=pan,b=hat,i=7314,x=0.11943754790139005,y=0.36148458916104687 a=hat,b=wye,i=7315,x=0.762849509523023,y=0.5445776666095938 a=wye,b=hat,i=7316,x=0.49431226962351105,y=0.20765083254084993 a=eks,b=wye,i=7319,x=0.7931636018175485,y=0.6139112136646976 a=hat,b=hat,i=7320,x=0.39178985057319626,y=0.23236564180125518 a=wye,b=wye,i=7321,x=0.35700901065371815,y=0.28320908292909874 a=pan,b=eks,i=7322,x=0.23434957604819473,y=0.051931896713069414 a=wye,b=zee,i=7324,x=0.46590974940880736,y=0.38852539050053736 a=hat,b=hat,i=7328,x=0.5360492386373142,y=0.6804516078113585 a=wye,b=eks,i=7329,x=0.5479278609035699,y=0.6395949329290961 a=eks,b=hat,i=7331,x=0.788081413287463,y=0.8378548167327706 a=wye,b=eks,i=7333,x=0.23109457565661884,y=0.175253032327905 a=eks,b=eks,i=7334,x=0.5399986455657582,y=0.8158128369790969 a=pan,b=wye,i=7335,x=0.2567672400806126,y=0.2775523933001237 a=pan,b=pan,i=7337,x=0.03345300533476314,y=0.05011040908993403 a=eks,b=wye,i=7339,x=0.7149884797875254,y=0.5780977956467382 a=pan,b=eks,i=7342,x=0.32087613651983915,y=0.33882735674733244 a=pan,b=hat,i=7343,x=0.9718021240386961,y=0.8360987881082459 a=pan,b=zee,i=7344,x=0.7960579191229258,y=0.8642875358044435 a=hat,b=eks,i=7346,x=0.9392077077039757,y=0.869513883344899 a=zee,b=pan,i=7347,x=0.5598151935312621,y=0.9371568081140333 a=hat,b=pan,i=7348,x=0.5273520540957175,y=0.9743536695566267 a=zee,b=pan,i=7349,x=0.9798614924191777,y=0.661939043406021 a=wye,b=wye,i=7352,x=0.0924480571001528,y=0.30109533355539897 a=pan,b=wye,i=7353,x=0.7001693740890388,y=0.7313365122301939 a=zee,b=zee,i=7357,x=0.37772059495645105,y=0.04160047639165676 a=eks,b=pan,i=7358,x=0.20000198658880186,y=0.2727601315820374 a=zee,b=zee,i=7359,x=0.8789933703062237,y=0.787471191499597 a=zee,b=hat,i=7361,x=0.03789515978860469,y=0.08906319847440858 a=zee,b=pan,i=7362,x=0.37791224094768805,y=0.035794629838716285 a=zee,b=pan,i=7366,x=0.7326832606913403,y=0.988312668973181 a=zee,b=zee,i=7370,x=0.7741716706994631,y=0.8036145555008443 a=zee,b=hat,i=7371,x=0.4507985912029725,y=0.3077642021954843 a=pan,b=pan,i=7372,x=0.7704918547993125,y=0.9834514670413425 a=eks,b=eks,i=7373,x=0.4293751563574991,y=0.321596575054345 a=wye,b=zee,i=7374,x=0.551952261755126,y=0.5902774680877885 a=hat,b=pan,i=7378,x=0.10026227651385622,y=0.04421109516628252 a=pan,b=wye,i=7383,x=0.8494039628427111,y=0.8499184581272037 a=pan,b=pan,i=7384,x=0.147877939581611,y=0.3802766658466368 a=pan,b=eks,i=7391,x=0.4877630118621793,y=0.2703969185758941 a=eks,b=zee,i=7392,x=0.47928188791181825,y=0.4019006064467472 a=pan,b=zee,i=7394,x=0.7577687447939129,y=0.8939904227639627 a=wye,b=pan,i=7400,x=0.6413551187597212,y=0.8585006139152228 a=pan,b=zee,i=7401,x=0.7038547368085565,y=0.833002029439337 a=eks,b=hat,i=7403,x=0.8360641078807856,y=0.9076959476149424 a=wye,b=zee,i=7404,x=0.8798482207846597,y=0.980841539034285 a=pan,b=eks,i=7405,x=0.6745743258945766,y=0.7867105500751859 a=hat,b=wye,i=7408,x=0.9529062878494667,y=0.7852866253859588 a=eks,b=pan,i=7409,x=0.7981122558329,y=0.6186019487821701 a=pan,b=wye,i=7412,x=0.6977929179546933,y=0.5888437383863911 a=wye,b=hat,i=7414,x=0.8736572008864342,y=0.5573924644600762 a=wye,b=wye,i=7415,x=0.30171840067278866,y=0.3419586030343307 a=pan,b=wye,i=7416,x=0.2585223323598659,y=0.3463024564198399 a=hat,b=eks,i=7417,x=0.3785664786635482,y=0.26018775063772737 a=wye,b=pan,i=7420,x=0.637403401738078,y=0.8374737656276083 a=zee,b=zee,i=7421,x=0.27260075448645904,y=0.40666948184724905 a=wye,b=wye,i=7422,x=0.23158788759518745,y=0.2878292702486247 a=wye,b=hat,i=7423,x=0.65748564141991,y=0.991048470406043 a=eks,b=hat,i=7431,x=0.42045666700455464,y=0.1678609743716658 a=wye,b=pan,i=7437,x=0.9282262872069705,y=0.6360386793524121 a=pan,b=wye,i=7438,x=0.14231386871466345,y=0.4954949252707901 a=hat,b=zee,i=7439,x=0.3598352944100318,y=0.24656543972679557 a=zee,b=wye,i=7442,x=0.6608160620662386,y=0.5974595563363765 a=hat,b=wye,i=7443,x=0.25082061911407305,y=0.21021328972399989 a=pan,b=zee,i=7444,x=0.3397136877438124,y=0.2183579843750636 a=zee,b=wye,i=7446,x=0.48989555445269983,y=0.4667529417156665 a=pan,b=pan,i=7448,x=0.2640997209164132,y=0.21566634091032355 a=wye,b=pan,i=7449,x=0.8358772139168086,y=0.5804404380403491 a=wye,b=eks,i=7451,x=0.8347006203497817,y=0.9777231624470996 a=pan,b=hat,i=7454,x=0.5194182222148909,y=0.7430038847189214 a=wye,b=zee,i=7457,x=0.33342706113360265,y=0.14501891527781052 a=eks,b=eks,i=7458,x=0.5811068614884891,y=0.664734231079448 a=pan,b=pan,i=7460,x=0.35138591198463265,y=0.21244588228015993 a=pan,b=pan,i=7462,x=0.6618404094367076,y=0.8219415456549093 a=wye,b=hat,i=7463,x=0.6072686833968383,y=0.7123986333317 a=pan,b=pan,i=7464,x=0.20391564584771982,y=0.016010952251377497 a=eks,b=wye,i=7473,x=0.05762456751144174,y=0.28964111938628945 a=zee,b=hat,i=7474,x=0.43396734243561297,y=0.14885801202307214 a=eks,b=pan,i=7475,x=0.6722348646450019,y=0.7590858841092192 a=wye,b=eks,i=7477,x=0.2981113055444685,y=0.3118479248083458 a=eks,b=zee,i=7478,x=0.7409323823493578,y=0.7821738405034923 a=eks,b=pan,i=7479,x=0.9488581319420917,y=0.5706834161873786 a=eks,b=hat,i=7480,x=0.02963041418290202,y=0.31020752876337365 a=eks,b=hat,i=7482,x=0.5358070419986188,y=0.9271364146014381 a=pan,b=hat,i=7484,x=0.9277546187980327,y=0.6036400626061248 a=zee,b=wye,i=7487,x=0.06930153211010659,y=0.40332380041726024 a=hat,b=pan,i=7491,x=0.6815182530961382,y=0.9995542599759397 a=hat,b=wye,i=7497,x=0.01901911173549864,y=0.12188494912380243 a=zee,b=wye,i=7498,x=0.9598078762930742,y=0.9526096866376772 a=hat,b=wye,i=7499,x=0.636327994634104,y=0.5920454180111085 a=eks,b=pan,i=7500,x=0.28545374834074233,y=0.23198097536923323 a=zee,b=hat,i=7503,x=0.7352529827218478,y=0.629380067609114 a=pan,b=wye,i=7504,x=0.8333715164315797,y=0.9451336949095434 a=zee,b=pan,i=7505,x=0.564057939908022,y=0.5334065367359347 a=hat,b=pan,i=7507,x=0.2115605362533587,y=0.17174864475858942 a=wye,b=eks,i=7508,x=0.5483107008409311,y=0.887289998494882 a=eks,b=pan,i=7509,x=0.7069484914746176,y=0.782150154038626 a=wye,b=eks,i=7510,x=0.6248444849216757,y=0.6630576924648813 a=hat,b=wye,i=7513,x=0.5412688517812235,y=0.5262389205562669 a=wye,b=hat,i=7515,x=0.9897486946692156,y=0.8560315264830626 a=wye,b=zee,i=7516,x=0.8259254313902334,y=0.7412888906117227 a=pan,b=pan,i=7517,x=0.7516545627381832,y=0.7262369325855629 a=pan,b=hat,i=7523,x=0.7491239851649556,y=0.9869320105885282 a=pan,b=zee,i=7524,x=0.8170930769042274,y=0.9831655236845562 a=pan,b=hat,i=7526,x=0.6842184815608053,y=0.5413631696210732 a=eks,b=zee,i=7528,x=0.6805617035261402,y=0.9357708602507883 a=zee,b=wye,i=7530,x=0.7097075423244159,y=0.9664504052194537 a=hat,b=zee,i=7531,x=0.2229334385915317,y=0.3284190225602506 a=eks,b=wye,i=7532,x=0.5296457339778697,y=0.5356809514905594 a=wye,b=pan,i=7533,x=0.7835022697060869,y=0.5470260523424321 a=zee,b=wye,i=7536,x=0.977198066335277,y=0.841156212711556 a=zee,b=zee,i=7537,x=0.45067646463535815,y=0.4846053315615896 a=pan,b=pan,i=7540,x=0.9220993601302719,y=0.7568665001928173 a=hat,b=hat,i=7543,x=0.6227885940707738,y=0.6684149004769806 a=wye,b=eks,i=7545,x=0.022518661429014375,y=0.2901112553388282 a=hat,b=hat,i=7547,x=0.8215672815436097,y=0.5614013828250404 a=hat,b=hat,i=7548,x=0.19269905065728477,y=0.011009649002469146 a=eks,b=wye,i=7549,x=0.7325288469158541,y=0.565544676390673 a=wye,b=eks,i=7552,x=0.8469802002512098,y=0.815964077738481 a=eks,b=wye,i=7554,x=0.7339079956532404,y=0.8285558028377102 a=pan,b=zee,i=7555,x=0.30709526445187707,y=0.4817130705295929 a=wye,b=hat,i=7558,x=0.6038851752558235,y=0.9009580077702348 a=eks,b=hat,i=7560,x=0.10199887225407722,y=0.31764039641093744 a=zee,b=pan,i=7567,x=0.4193214026807677,y=0.394167835232068 a=zee,b=hat,i=7569,x=0.09822492892655521,y=0.05447501970715207 a=zee,b=zee,i=7570,x=0.12789683952220732,y=0.25490189761435 a=wye,b=wye,i=7573,x=0.92008458670793,y=0.6955528667719472 a=eks,b=pan,i=7574,x=0.14478437931649057,y=0.0941855027104701 a=eks,b=zee,i=7577,x=0.14231014763644978,y=0.4717127637144344 a=pan,b=eks,i=7580,x=0.1600952140568258,y=0.4045418954164892 a=wye,b=wye,i=7581,x=0.2175313107798721,y=0.3671212999414236 a=pan,b=hat,i=7582,x=0.2569787233680674,y=0.2148575227188957 a=wye,b=zee,i=7585,x=0.13751395044042258,y=0.034975186947673986 a=hat,b=hat,i=7586,x=0.5889920011506182,y=0.8078788341273992 a=zee,b=hat,i=7587,x=0.03280836042125246,y=0.41282684631580824 a=zee,b=hat,i=7589,x=0.7770699494898016,y=0.7790651064661754 a=zee,b=zee,i=7592,x=0.35146635664435344,y=0.4539874980554838 a=wye,b=eks,i=7593,x=0.04430024252919407,y=0.1263254223270297 a=eks,b=zee,i=7596,x=0.5712662107490064,y=0.6090688560627531 a=wye,b=eks,i=7597,x=0.4310431117208252,y=0.08951460884563855 a=pan,b=wye,i=7599,x=0.9608268596180474,y=0.9070684642079544 a=eks,b=eks,i=7600,x=0.5242885778608762,y=0.7826689200927383 a=wye,b=pan,i=7601,x=0.9208150605661285,y=0.5589433846274124 a=pan,b=hat,i=7605,x=0.3084442479608156,y=0.29052958365713977 a=zee,b=pan,i=7606,x=0.39737589478806956,y=0.02851924706651765 a=pan,b=wye,i=7607,x=0.2998113807261462,y=0.47793002819857533 a=pan,b=wye,i=7608,x=0.7117542206974444,y=0.7970333994894653 a=zee,b=pan,i=7609,x=0.39637889658629055,y=0.15152040674745126 a=zee,b=wye,i=7612,x=0.3473870036653739,y=0.03835525794322947 a=eks,b=wye,i=7613,x=0.051620293140943185,y=0.3354589495771291 a=hat,b=eks,i=7618,x=0.23737869189758654,y=0.43340937762837506 a=zee,b=hat,i=7619,x=0.0396492782791249,y=0.21046790711790042 a=zee,b=wye,i=7623,x=0.8476652404295622,y=0.5532359995865707 a=zee,b=wye,i=7625,x=0.6630299534680688,y=0.9316352338897794 a=zee,b=hat,i=7627,x=0.3510535767246904,y=0.3060628840965116 a=hat,b=hat,i=7629,x=0.6503893869201249,y=0.8748121320804191 a=pan,b=pan,i=7631,x=0.27145158019948934,y=0.09516187714787117 a=wye,b=zee,i=7632,x=0.734823995296927,y=0.7719486421533686 a=eks,b=wye,i=7634,x=0.7109688223985979,y=0.7976941367774835 a=zee,b=zee,i=7635,x=0.12557655765488285,y=0.11534164357950183 a=pan,b=hat,i=7637,x=0.9106017109900336,y=0.8891547034705604 a=eks,b=hat,i=7639,x=0.771170174812707,y=0.7659520407198543 a=eks,b=wye,i=7640,x=0.2743403725668617,y=0.29487651020724404 a=pan,b=zee,i=7641,x=0.9381993656017179,y=0.6132694517353006 a=eks,b=pan,i=7643,x=0.47586159706318876,y=0.4962125479739936 a=wye,b=zee,i=7644,x=0.6513731813421505,y=0.9956216673837286 a=zee,b=wye,i=7648,x=0.6798736010037264,y=0.9310702986321819 a=wye,b=wye,i=7653,x=0.5261687377247655,y=0.9662557892207575 a=pan,b=wye,i=7658,x=0.3621794133271582,y=0.38650038828351596 a=pan,b=pan,i=7660,x=0.5441433972504542,y=0.9469895242558711 a=zee,b=hat,i=7661,x=0.9408442476780763,y=0.8023490934603362 a=zee,b=eks,i=7667,x=0.03246665173355623,y=0.4911639950418465 a=pan,b=hat,i=7671,x=0.5479425830973824,y=0.6792965466963522 a=wye,b=wye,i=7674,x=0.8942818883713989,y=0.5212590944649815 a=eks,b=pan,i=7676,x=0.44645752932549043,y=0.031497838025275615 a=eks,b=hat,i=7678,x=0.07578434084199792,y=0.22918239952964947 a=wye,b=hat,i=7679,x=0.9686531523418166,y=0.924678615947144 a=wye,b=hat,i=7680,x=0.6280201487984101,y=0.536246349153707 a=wye,b=hat,i=7682,x=0.24098953071009122,y=0.26190037231185814 a=zee,b=pan,i=7685,x=0.09709731100349062,y=0.4690475302436993 a=pan,b=eks,i=7686,x=0.18978586580625822,y=0.18115920896147264 a=wye,b=zee,i=7687,x=0.3434686533925685,y=0.48726381835108046 a=eks,b=hat,i=7689,x=0.17159448083555107,y=0.045442427612649494 a=hat,b=zee,i=7690,x=0.7259375308340535,y=0.7674839756219988 a=zee,b=wye,i=7694,x=0.3060398953875496,y=0.10472339189986246 a=eks,b=pan,i=7700,x=0.7077775737786727,y=0.7272353949934527 a=wye,b=pan,i=7702,x=0.6934052269305254,y=0.7343693194312434 a=eks,b=eks,i=7704,x=0.76786474676413,y=0.8734911204128757 a=eks,b=wye,i=7708,x=0.1593131070189654,y=0.21618160132947373 a=eks,b=pan,i=7709,x=0.021236282778372417,y=0.3980616560952607 a=pan,b=pan,i=7710,x=0.6454947652276057,y=0.5934369662779847 a=pan,b=hat,i=7712,x=0.4196809161822014,y=0.26377711630821754 a=hat,b=hat,i=7715,x=0.6233765313325004,y=0.5758791846152675 a=hat,b=wye,i=7717,x=0.2286520253814175,y=0.1192319014188804 a=eks,b=pan,i=7723,x=0.3209098916589238,y=0.4109567715356973 a=hat,b=wye,i=7725,x=0.1378541730969839,y=0.25911129591737747 a=pan,b=pan,i=7726,x=0.43414990019558963,y=0.1556380176176868 a=eks,b=zee,i=7728,x=0.5397828066703505,y=0.6535807927478277 a=zee,b=zee,i=7730,x=0.17826971421632076,y=0.23305955441707682 a=hat,b=eks,i=7731,x=0.6064367170765328,y=0.5843998077541726 a=hat,b=pan,i=7733,x=0.15752257838130168,y=0.025328573078963523 a=hat,b=hat,i=7735,x=0.9286394794387348,y=0.9849690205615684 a=wye,b=zee,i=7736,x=0.5283513685317409,y=0.8859340359150333 a=wye,b=eks,i=7740,x=0.7528542161787996,y=0.7648364405523831 a=eks,b=eks,i=7745,x=0.3215874010779871,y=0.2780127707789244 a=eks,b=eks,i=7746,x=0.35282776725789056,y=0.015349081732579983 a=zee,b=eks,i=7747,x=0.4180982192655389,y=0.2733251523581718 a=wye,b=wye,i=7751,x=0.9578808895640281,y=0.567472797993126 a=eks,b=wye,i=7752,x=0.8308158486543955,y=0.7251988641133165 a=eks,b=hat,i=7754,x=0.5569680022127645,y=0.5333129600306122 a=eks,b=pan,i=7755,x=0.3881304412114248,y=0.4050350844434646 a=zee,b=pan,i=7756,x=0.2999624778639135,y=0.3422859654759408 a=hat,b=eks,i=7757,x=0.005675684156441596,y=0.4710155431561027 a=hat,b=pan,i=7759,x=0.2655863070154898,y=0.4394097550698016 a=zee,b=pan,i=7760,x=0.09922636178391386,y=0.3133271646647967 a=hat,b=pan,i=7761,x=0.5937279590019037,y=0.9494399455643315 a=eks,b=pan,i=7762,x=0.9358045588817545,y=0.7330851249844436 a=zee,b=pan,i=7764,x=0.48750871272402196,y=0.22236263541673462 a=eks,b=eks,i=7767,x=0.53797481529119,y=0.9465659178026697 a=wye,b=hat,i=7769,x=0.3705583652673885,y=0.059144918778647027 a=pan,b=zee,i=7770,x=0.6956017564216889,y=0.66737949839894 a=hat,b=eks,i=7771,x=0.756025188553685,y=0.8094953852781318 a=pan,b=eks,i=7774,x=0.8611049069366612,y=0.7289618171406003 a=hat,b=hat,i=7776,x=0.8353731209463556,y=0.766113750196805 a=wye,b=pan,i=7777,x=0.05858955413860256,y=0.12058424529655198 a=wye,b=hat,i=7779,x=0.6525057028901559,y=0.827506650684489 a=zee,b=wye,i=7781,x=0.8785183426416252,y=0.5929085468141393 a=hat,b=pan,i=7783,x=0.2970040422341498,y=0.3987945132487777 a=eks,b=pan,i=7784,x=0.5773221928392703,y=0.984120457296803 a=eks,b=eks,i=7791,x=0.41888693176987457,y=0.12945875791772954 a=hat,b=zee,i=7793,x=0.958394958736606,y=0.8162724775424932 a=wye,b=wye,i=7796,x=0.7618404269252146,y=0.7082734662093254 a=hat,b=eks,i=7797,x=0.3339037394632195,y=0.33041712223471265 a=pan,b=eks,i=7798,x=0.8964629088574175,y=0.6314628948974991 a=eks,b=wye,i=7801,x=0.2768061453774291,y=0.11197920863328137 a=zee,b=pan,i=7802,x=0.8246321893741126,y=0.9437960471953348 a=hat,b=zee,i=7805,x=0.7220810582203347,y=0.7321859764651767 a=wye,b=wye,i=7809,x=0.00751279921360315,y=0.10191418158652688 a=wye,b=pan,i=7810,x=0.22896336477318813,y=0.3855317875005415 a=pan,b=hat,i=7811,x=0.2803772001943151,y=0.06126665020709965 a=pan,b=wye,i=7812,x=0.6626056412742908,y=0.8119248457418577 a=zee,b=wye,i=7813,x=0.2839449326479042,y=0.21823946066739763 a=wye,b=pan,i=7815,x=0.29912422376234227,y=0.031086896342097492 a=wye,b=hat,i=7816,x=0.9864077710445651,y=0.7857310073202174 a=zee,b=pan,i=7820,x=0.6449176000624874,y=0.6911176673897844 a=zee,b=zee,i=7821,x=0.6652689102876012,y=0.8739835083180177 a=zee,b=eks,i=7822,x=0.6987205194846695,y=0.5636198949945938 a=zee,b=zee,i=7827,x=0.5476130433221185,y=0.5402862105818173 a=zee,b=hat,i=7828,x=0.9857371922518141,y=0.9407026776406513 a=zee,b=zee,i=7830,x=0.00819682639104835,y=0.4240387399947815 a=pan,b=eks,i=7831,x=0.7227922598778895,y=0.8810129413735137 a=wye,b=eks,i=7832,x=0.44768287987315436,y=0.06097808844991881 a=eks,b=wye,i=7840,x=0.15083338360252196,y=0.4677170605064366 a=eks,b=wye,i=7841,x=0.2390993050590302,y=0.4022350252704088 a=wye,b=wye,i=7842,x=0.03868013977565554,y=0.36213469293451195 a=hat,b=eks,i=7843,x=0.2326952229877629,y=0.07810622939834866 a=eks,b=eks,i=7844,x=0.3464583830104778,y=0.24608203542200424 a=zee,b=hat,i=7845,x=0.6258279281533773,y=0.519301606092353 a=hat,b=wye,i=7847,x=0.5913920636618824,y=0.869313774493801 a=zee,b=wye,i=7849,x=0.6838794391771024,y=0.7901996933834754 a=zee,b=eks,i=7850,x=0.38221395674318315,y=0.4647687529098594 a=pan,b=hat,i=7851,x=0.7174129864414264,y=0.6977644513609003 a=wye,b=wye,i=7852,x=0.9237362599816926,y=0.8751578434058209 a=hat,b=wye,i=7854,x=0.06764752166213406,y=0.2082339516770152 a=wye,b=hat,i=7856,x=0.7543839227963806,y=0.7708302534568163 a=pan,b=hat,i=7857,x=0.4184705412704066,y=0.40669972332461846 a=wye,b=zee,i=7858,x=0.9223976078879647,y=0.5779020996216999 a=zee,b=zee,i=7859,x=0.10768947209184598,y=0.3365441234115185 a=hat,b=pan,i=7863,x=0.06726201643453855,y=0.35933180644142315 a=eks,b=wye,i=7865,x=0.32234768937000546,y=0.02406247620613 a=zee,b=hat,i=7867,x=0.7690926832290548,y=0.9300355345607946 a=wye,b=wye,i=7872,x=0.5263396869727451,y=0.6135988456193723 a=wye,b=pan,i=7879,x=0.3148924229301867,y=0.1872406546524351 a=eks,b=wye,i=7880,x=0.03633390115689916,y=0.16903851260082725 a=hat,b=wye,i=7883,x=0.24262458856564295,y=0.01835360943862996 a=hat,b=zee,i=7886,x=0.794970017782755,y=0.6062492046952036 a=eks,b=eks,i=7890,x=0.5715742308742378,y=0.8192093346935977 a=eks,b=wye,i=7894,x=0.5608680829128325,y=0.9585598084195104 a=eks,b=pan,i=7896,x=0.9913466570743009,y=0.6302035261111584 a=hat,b=wye,i=7897,x=0.5421196020388044,y=0.8624723374301944 a=eks,b=hat,i=7904,x=0.2705482127515829,y=0.01971442860313377 a=zee,b=hat,i=7908,x=0.3610060660850839,y=0.24288129482927623 a=wye,b=eks,i=7911,x=0.691697756697526,y=0.877518858711515 a=zee,b=pan,i=7915,x=0.6579171209676669,y=0.6482697150135545 a=wye,b=eks,i=7916,x=0.2877295918648384,y=0.211059870769302 a=pan,b=eks,i=7917,x=0.5275793853162087,y=0.8748428200227294 a=eks,b=eks,i=7918,x=0.12458230242468837,y=0.24069602443528393 a=zee,b=zee,i=7920,x=0.8985365345616582,y=0.6020907480091875 a=hat,b=wye,i=7921,x=0.09671063835019511,y=0.4703227983629693 a=eks,b=pan,i=7924,x=0.3713298410561683,y=0.296460093460874 a=zee,b=zee,i=7929,x=0.25040361330370065,y=0.3462781056544345 a=wye,b=eks,i=7930,x=0.5998999740666952,y=0.940489760974054 a=eks,b=hat,i=7931,x=0.7426863429203551,y=0.5997919568409129 a=eks,b=wye,i=7932,x=0.7539925055624301,y=0.9588704021223314 a=eks,b=eks,i=7933,x=0.8496577484419044,y=0.8749858904217946 a=eks,b=pan,i=7940,x=0.18503477530273849,y=0.2613475073722671 a=wye,b=pan,i=7944,x=0.6010756954347072,y=0.602663902557592 a=zee,b=eks,i=7947,x=0.025642761574512285,y=0.18768382301071385 a=wye,b=pan,i=7950,x=0.13192831258970839,y=0.09974934678356573 a=eks,b=pan,i=7951,x=0.573135783011619,y=0.5173979516422308 a=wye,b=pan,i=7952,x=0.9672001578855394,y=0.5999113434317762 a=hat,b=wye,i=7953,x=0.5332777170304573,y=0.8240541851977825 a=pan,b=wye,i=7954,x=0.1279461268867662,y=0.3465018420126411 a=wye,b=zee,i=7958,x=0.7645204491814582,y=0.853303854748976 a=zee,b=pan,i=7959,x=0.15605455866939177,y=0.46323289916297505 a=hat,b=zee,i=7960,x=0.16017925473869754,y=0.4529356695213568 a=wye,b=wye,i=7962,x=0.18404446909382244,y=0.26269521842771504 a=pan,b=pan,i=7964,x=0.282047967900814,y=0.22212917426772594 a=eks,b=wye,i=7965,x=0.05872308143086857,y=0.38482704713824056 a=pan,b=hat,i=7966,x=0.2501049463368379,y=0.39344676758297514 a=eks,b=wye,i=7970,x=0.7564471093195367,y=0.588547367327297 a=wye,b=pan,i=7973,x=0.018524216435056196,y=0.08446663540594712 a=hat,b=zee,i=7974,x=0.24963209679900955,y=0.016049846424579184 a=hat,b=wye,i=7975,x=0.048154096212748465,y=0.23172149127883657 a=wye,b=hat,i=7977,x=0.5283629678807258,y=0.8918455631655288 a=pan,b=wye,i=7978,x=0.5186376529712587,y=0.8811576068202212 a=zee,b=zee,i=7980,x=0.10892391322425843,y=0.050571608567332116 a=eks,b=pan,i=7984,x=0.49794222352752093,y=0.19964088700431204 a=eks,b=eks,i=7985,x=0.25908328241507117,y=0.41719268312114377 a=wye,b=zee,i=7986,x=0.2712612087411137,y=0.4093087980161978 a=zee,b=eks,i=7989,x=0.5671275966876752,y=0.6710467056302961 a=hat,b=eks,i=7991,x=0.9093001304035243,y=0.6454294428509858 a=zee,b=pan,i=7993,x=0.840708068980671,y=0.7676444206837281 a=eks,b=pan,i=7994,x=0.13873019879879267,y=0.3541885725000481 a=wye,b=wye,i=7995,x=0.5556276037973694,y=0.7103742139489323 a=wye,b=hat,i=7996,x=0.7897718226462853,y=0.7866250828364114 a=zee,b=pan,i=7998,x=0.6173947671381171,y=0.9099504940374747 a=pan,b=eks,i=7999,x=0.1904021794562485,y=0.2442456072044632 a=pan,b=zee,i=8001,x=0.21740880422197573,y=0.009823495326658604 a=wye,b=zee,i=8002,x=0.8483246353215173,y=0.748697867257607 a=eks,b=wye,i=8003,x=0.07232519497816503,y=0.01460395395166092 a=hat,b=eks,i=8007,x=0.37719631868649617,y=0.39591507134214254 a=hat,b=eks,i=8010,x=0.3187905796970636,y=0.3173506685081655 a=zee,b=hat,i=8012,x=0.9967455860256934,y=0.846350626099811 a=hat,b=zee,i=8017,x=0.8289275824108141,y=0.5824677757054623 a=zee,b=hat,i=8018,x=0.47908711384726377,y=0.2078467393092358 a=pan,b=hat,i=8019,x=0.03774190681630729,y=0.37562081779173295 a=hat,b=zee,i=8021,x=0.6283764347998099,y=0.7038955747755151 a=wye,b=eks,i=8022,x=0.9822305246922711,y=0.9025462559345021 a=pan,b=hat,i=8024,x=0.7871049381240648,y=0.9157631088161338 a=hat,b=zee,i=8025,x=0.8464024197077388,y=0.7505262168915832 a=pan,b=wye,i=8028,x=0.03498607510109997,y=0.19549287051995312 a=wye,b=pan,i=8030,x=0.8534063530727802,y=0.5216400536886638 a=zee,b=hat,i=8032,x=0.3470913703916284,y=0.4932013734514763 a=wye,b=pan,i=8035,x=0.17190090759613674,y=0.02144281885832955 a=zee,b=zee,i=8037,x=0.7060201401255403,y=0.9669662969793548 a=pan,b=zee,i=8040,x=0.7171534760409121,y=0.7328586414702059 a=pan,b=eks,i=8041,x=0.3839508814613577,y=0.30631865487711984 a=zee,b=wye,i=8042,x=0.3764616704796617,y=0.0013477620094425324 a=eks,b=wye,i=8046,x=0.6051188687817523,y=0.9131734207686757 a=zee,b=wye,i=8048,x=0.05640085976332132,y=0.0700003098785944 a=eks,b=hat,i=8050,x=0.9874222186130187,y=0.8593466056433501 a=pan,b=pan,i=8052,x=0.6493110423838093,y=0.5347940909170277 a=wye,b=wye,i=8054,x=0.29645291860851164,y=0.2862439675971603 a=wye,b=hat,i=8055,x=0.9283998083818392,y=0.9186794272646708 a=zee,b=eks,i=8056,x=0.21742326077552165,y=0.21215545457837148 a=wye,b=hat,i=8062,x=0.9226631815117158,y=0.9902149324132298 a=pan,b=eks,i=8063,x=0.4162908252496399,y=0.18879569170028876 a=zee,b=zee,i=8068,x=0.1526773413967627,y=0.492096177763767 a=pan,b=pan,i=8074,x=0.47234873863850657,y=0.4467664305469584 a=eks,b=zee,i=8075,x=0.8643916283489397,y=0.8421716629916459 a=pan,b=wye,i=8076,x=0.36180082799458324,y=0.2681111063038798 a=wye,b=zee,i=8077,x=0.291110312999184,y=0.3904237799736081 a=pan,b=wye,i=8078,x=0.2285091327975376,y=0.08630172750559728 a=zee,b=pan,i=8080,x=0.4953944041935031,y=0.13051323550656468 a=eks,b=hat,i=8084,x=0.6415360825871783,y=0.9093765294473956 a=wye,b=pan,i=8086,x=0.7089561346111681,y=0.9346147842120147 a=hat,b=wye,i=8087,x=0.6721158897399355,y=0.8662012495181518 a=wye,b=zee,i=8092,x=0.3727994612209693,y=0.12052581566020104 a=eks,b=hat,i=8093,x=0.9315252187513533,y=0.561169216332415 a=pan,b=eks,i=8098,x=0.02310988069794695,y=0.04436912792860748 a=pan,b=wye,i=8100,x=0.6977704958793126,y=0.7057512041273386 a=hat,b=zee,i=8101,x=0.8813156757676321,y=0.538439525268842 a=pan,b=eks,i=8102,x=0.8253811424731291,y=0.8958384638924397 a=wye,b=hat,i=8103,x=0.6382749094882392,y=0.7690601393055252 a=zee,b=zee,i=8104,x=0.19443211144688854,y=0.39629790432524836 a=zee,b=zee,i=8105,x=0.028359518501674397,y=0.31630049190233644 a=eks,b=eks,i=8108,x=0.8869014997757403,y=0.6363003729185641 a=eks,b=eks,i=8112,x=0.31000078368875394,y=0.36138146669138416 a=eks,b=hat,i=8118,x=0.8557041552120278,y=0.5440118132291639 a=hat,b=pan,i=8119,x=0.21486759901824792,y=0.3923954170049483 a=pan,b=zee,i=8120,x=0.6592841558501972,y=0.8794810617469089 a=eks,b=eks,i=8121,x=0.9178846401562378,y=0.7797206181214477 a=eks,b=hat,i=8123,x=0.8786712780916176,y=0.5986968292379161 a=zee,b=hat,i=8125,x=0.7071191860103717,y=0.5065338033789499 a=wye,b=pan,i=8126,x=0.9928274286457106,y=0.611287542007201 a=pan,b=pan,i=8127,x=0.7855300117843916,y=0.919185243159261 a=wye,b=wye,i=8128,x=0.5451094693684497,y=0.6739488974426652 a=eks,b=eks,i=8129,x=0.4483894040870827,y=0.04899785138545132 a=wye,b=wye,i=8130,x=0.6304140421100901,y=0.8822571743603556 a=pan,b=wye,i=8135,x=0.45117859842393093,y=0.2608070414195329 a=zee,b=zee,i=8136,x=0.6400905852932521,y=0.9035481906697407 a=eks,b=hat,i=8137,x=0.039487665967159025,y=0.2642755984465909 a=eks,b=eks,i=8139,x=0.5696036037683665,y=0.5215775669287221 a=zee,b=wye,i=8142,x=0.6462280039869936,y=0.989075899835102 a=pan,b=zee,i=8143,x=0.03802909555431522,y=0.0805330261761773 a=pan,b=wye,i=8144,x=0.7168864018283236,y=0.9743458426619153 a=hat,b=wye,i=8146,x=0.6466004179249605,y=0.6476130238612243 a=eks,b=zee,i=8149,x=0.9838548523184443,y=0.6613857827470255 a=eks,b=hat,i=8150,x=0.42800158894759266,y=0.13739447644695857 a=zee,b=eks,i=8152,x=0.6420074465872548,y=0.5270375969424234 a=hat,b=pan,i=8155,x=0.6975376085727898,y=0.6899571370767156 a=zee,b=zee,i=8156,x=0.6395251098634284,y=0.5644973057197734 a=eks,b=wye,i=8158,x=0.8469059054134236,y=0.9101861362422637 a=zee,b=wye,i=8161,x=0.7550762971732712,y=0.8530495051917243 a=zee,b=eks,i=8164,x=0.3607826318282279,y=0.1255618535732741 a=eks,b=pan,i=8169,x=0.7194305802045211,y=0.9549210116328868 a=pan,b=zee,i=8175,x=0.5756118666838461,y=0.6166940778091887 a=hat,b=wye,i=8176,x=0.8316169809953903,y=0.7727468837518336 a=hat,b=wye,i=8179,x=0.6913338216581719,y=0.8634446415532928 a=hat,b=hat,i=8181,x=0.23955047854083944,y=0.27040254626774474 a=zee,b=hat,i=8183,x=0.5126902650356464,y=0.8692712883907214 a=eks,b=hat,i=8185,x=0.8449937251277326,y=0.6863834790266286 a=zee,b=zee,i=8188,x=0.8188229466265301,y=0.7731986253520043 a=zee,b=eks,i=8189,x=0.21859629681055648,y=0.04545680236762617 a=wye,b=eks,i=8190,x=0.17387577778883723,y=0.3600963171444731 a=zee,b=zee,i=8191,x=0.6027946184126483,y=0.7560104230688947 a=wye,b=pan,i=8192,x=0.5268204744299162,y=0.7467950199333838 a=pan,b=pan,i=8197,x=0.4524152227370508,y=0.2620560509511556 a=pan,b=eks,i=8198,x=0.895911910015345,y=0.9918773365972562 a=wye,b=hat,i=8199,x=0.7136636567819744,y=0.7470766277154778 a=hat,b=pan,i=8200,x=0.4231374284492073,y=0.1546230087665409 a=zee,b=zee,i=8201,x=0.7750292191321659,y=0.8295732493514495 a=eks,b=wye,i=8202,x=0.36911480147216946,y=0.18354328249876783 a=pan,b=eks,i=8204,x=0.6300000735055588,y=0.5097476114683049 a=wye,b=zee,i=8205,x=0.6442554149020752,y=0.6779628314804215 a=pan,b=hat,i=8208,x=0.7495304237104456,y=0.7417705075817802 a=hat,b=pan,i=8211,x=0.11189505956227741,y=0.4621617318098107 a=zee,b=eks,i=8212,x=0.09903637464949222,y=0.11847710838278536 a=zee,b=eks,i=8213,x=0.6131401826730208,y=0.5022261795262266 a=zee,b=pan,i=8216,x=0.10912632587239346,y=0.23098909374573406 a=hat,b=pan,i=8219,x=0.3322693803060234,y=0.0076976965775436 a=hat,b=hat,i=8221,x=0.046602995923670676,y=0.09042940585063108 a=hat,b=zee,i=8225,x=0.3176890506590573,y=0.04443659691703017 a=wye,b=hat,i=8229,x=0.4802812953776502,y=0.28698445483944135 a=zee,b=eks,i=8230,x=0.37256536791796446,y=0.22484134058612737 a=hat,b=pan,i=8232,x=0.053356023845203326,y=0.20750162756833523 a=pan,b=wye,i=8233,x=0.01730056600220997,y=0.4811950137685327 a=hat,b=zee,i=8235,x=0.5760269820743364,y=0.9876933845887379 a=pan,b=wye,i=8237,x=0.32216831192867235,y=0.4489268007125685 a=zee,b=zee,i=8239,x=0.8722145698985853,y=0.5243287664361148 a=hat,b=eks,i=8240,x=0.3119317638364195,y=0.03153083991370387 a=pan,b=pan,i=8242,x=0.6284004646755453,y=0.5188512495739586 a=zee,b=zee,i=8244,x=0.5648821749696828,y=0.8387452862417517 a=pan,b=pan,i=8246,x=0.978767937767844,y=0.595121683896329 a=pan,b=pan,i=8247,x=0.8877669245621814,y=0.993370582244656 a=zee,b=pan,i=8252,x=0.5300215804178179,y=0.8809898315791685 a=pan,b=pan,i=8253,x=0.14951845911545658,y=0.050337793147141485 a=zee,b=zee,i=8255,x=0.2969343720495279,y=0.17875651030138728 a=hat,b=hat,i=8256,x=0.6242185970220043,y=0.7024165856278344 a=hat,b=wye,i=8258,x=0.8531277255736057,y=0.8769896764505173 a=hat,b=zee,i=8259,x=0.80786266752403,y=0.6716375742716686 a=zee,b=pan,i=8262,x=0.8457444769341051,y=0.878949052752884 a=hat,b=hat,i=8263,x=0.021118246086347936,y=0.1691340461129066 a=hat,b=zee,i=8268,x=0.36840212479306056,y=0.1937179362263023 a=hat,b=eks,i=8269,x=0.11448405024977704,y=0.23838350078789672 a=eks,b=wye,i=8272,x=0.6007652533828618,y=0.9021580447695768 a=eks,b=pan,i=8275,x=0.3873436846104391,y=0.143667378519436 a=pan,b=hat,i=8277,x=0.07383920400137156,y=0.29779174578381706 a=eks,b=wye,i=8278,x=0.46767848884631935,y=0.05594159328112347 a=hat,b=zee,i=8280,x=0.3946923561479273,y=0.26022613248187254 a=pan,b=zee,i=8281,x=0.1263835939366954,y=0.432802462221352 a=zee,b=zee,i=8282,x=0.40991526751045837,y=0.4664079852923113 a=eks,b=zee,i=8284,x=0.18920257463227763,y=0.036407632423777536 a=pan,b=wye,i=8287,x=0.6189613307505946,y=0.6990573098254149 a=eks,b=wye,i=8288,x=0.4497557556254256,y=0.24756315944170548 a=hat,b=wye,i=8289,x=0.565349257018066,y=0.9695790816330443 a=pan,b=zee,i=8291,x=0.735310256094497,y=0.8766337081918637 a=pan,b=eks,i=8297,x=0.9819888226687685,y=0.5660827409414791 a=wye,b=zee,i=8298,x=0.8302599994058273,y=0.7781190613623368 a=eks,b=eks,i=8300,x=0.3945447287695022,y=0.18429543577101226 a=hat,b=pan,i=8303,x=0.46102687899911865,y=0.028654914603273074 a=pan,b=wye,i=8304,x=0.2251798670287818,y=0.1196124323878246 a=wye,b=wye,i=8306,x=0.46134525628997447,y=0.14969908222679185 a=eks,b=hat,i=8310,x=0.9655430452589465,y=0.9245411060012981 a=hat,b=pan,i=8312,x=0.547677016360058,y=0.9650817043634582 a=eks,b=zee,i=8316,x=0.01845753106507053,y=0.07103606295934006 a=eks,b=pan,i=8317,x=0.729335030923378,y=0.9595878811451796 a=hat,b=hat,i=8319,x=0.31751994407032824,y=0.04431824787878602 a=eks,b=wye,i=8320,x=0.32774406925223687,y=0.39755988935681663 a=hat,b=zee,i=8324,x=0.03714831235343263,y=0.18937718204762566 a=hat,b=wye,i=8326,x=0.28959963076391493,y=0.36439348847404984 a=wye,b=hat,i=8328,x=0.5085798206640023,y=0.8237875259659011 a=zee,b=pan,i=8329,x=0.16898862414886817,y=0.15560228332434112 a=zee,b=wye,i=8340,x=0.779538114438638,y=0.8910397798499486 a=pan,b=pan,i=8341,x=0.6773754216149304,y=0.613857099295925 a=wye,b=hat,i=8342,x=0.1458720698488648,y=0.4351692119049885 a=zee,b=eks,i=8345,x=0.5108081370139803,y=0.8369754291473595 a=zee,b=wye,i=8348,x=0.803443835215121,y=0.5295807220048788 a=eks,b=pan,i=8349,x=0.9755546767865578,y=0.8799835489524848 a=eks,b=wye,i=8351,x=0.03641540536678134,y=0.08744451304860146 a=hat,b=hat,i=8353,x=0.055663129013605483,y=0.3787786437258225 a=eks,b=hat,i=8354,x=0.5157212090975359,y=0.8904310076101238 a=hat,b=hat,i=8356,x=0.5915574129139735,y=0.5501666687575646 a=hat,b=hat,i=8359,x=0.672862622018669,y=0.9813314150345762 a=hat,b=hat,i=8362,x=0.8239226232469129,y=0.5363672557332027 a=eks,b=zee,i=8364,x=0.6109061549072763,y=0.9310832897288339 a=pan,b=pan,i=8365,x=0.6603069810848408,y=0.8682978196165198 a=zee,b=eks,i=8367,x=0.4049863490547647,y=0.4247029183107722 a=wye,b=eks,i=8368,x=0.30480439273047766,y=0.48048174444338265 a=zee,b=wye,i=8369,x=0.4648458105978611,y=0.21546080520985877 a=hat,b=pan,i=8370,x=0.7696984054132116,y=0.7047713537963836 a=eks,b=zee,i=8371,x=0.37597533966420293,y=0.08724777473553502 a=zee,b=eks,i=8373,x=0.6150222878860193,y=0.5607136634592303 a=pan,b=wye,i=8374,x=0.4528870946233897,y=0.07597161789124052 a=pan,b=zee,i=8375,x=0.5301175183103385,y=0.8601180937794322 a=hat,b=eks,i=8376,x=0.06489427108475243,y=0.40261315507492046 a=eks,b=wye,i=8377,x=0.563425411256789,y=0.9184806642610032 a=zee,b=wye,i=8382,x=0.7952836839227378,y=0.6833817456403316 a=hat,b=hat,i=8383,x=0.3984261676380828,y=0.1738533271203584 a=eks,b=wye,i=8384,x=0.11104863533882658,y=0.3751765500241939 a=hat,b=pan,i=8385,x=0.49685402919308186,y=0.07834061857462182 a=zee,b=pan,i=8386,x=0.7967208048423021,y=0.6030273368815906 a=hat,b=eks,i=8391,x=0.989982527715026,y=0.7339778723038518 a=hat,b=zee,i=8392,x=0.1535960092053097,y=0.48365184245511483 a=wye,b=pan,i=8393,x=0.5371021532444956,y=0.5076931407974227 a=zee,b=eks,i=8394,x=0.9938525452278908,y=0.9944136062432827 a=zee,b=pan,i=8399,x=0.9401027436536872,y=0.8241834377991233 a=eks,b=hat,i=8401,x=0.21592490518329377,y=0.33061077431647556 a=eks,b=hat,i=8402,x=0.9947356560721309,y=0.7409670678572535 a=zee,b=eks,i=8404,x=0.3493565206043524,y=0.09054805425762869 a=pan,b=wye,i=8405,x=0.4811201910981,y=0.18742552959849512 a=zee,b=hat,i=8408,x=0.9200690263533268,y=0.844860872568536 a=eks,b=wye,i=8412,x=0.30559437664735667,y=0.2954096578389033 a=eks,b=hat,i=8413,x=0.4338584089312799,y=0.1949819510216354 a=wye,b=eks,i=8414,x=0.522368921381192,y=0.6530064427565451 a=wye,b=eks,i=8415,x=0.40077151734215266,y=0.2875570398483994 a=zee,b=wye,i=8416,x=0.44384210652184575,y=0.34372338201033137 a=hat,b=zee,i=8417,x=0.8269419111916478,y=0.5295548379993134 a=eks,b=wye,i=8422,x=0.6050408267820816,y=0.6834071285687362 a=zee,b=eks,i=8427,x=0.4741772361406499,y=0.4439154258100234 a=hat,b=pan,i=8435,x=0.38866184034912554,y=0.059525983951048245 a=hat,b=eks,i=8437,x=0.5253247675869896,y=0.5165646242633789 a=eks,b=pan,i=8439,x=0.8952428124136508,y=0.9997604543675731 a=zee,b=hat,i=8441,x=0.22626716374612477,y=0.3072575476209706 a=zee,b=hat,i=8442,x=0.012897791583037166,y=0.45928268470148015 a=pan,b=hat,i=8444,x=0.033038289736824766,y=0.05539460621434722 a=pan,b=hat,i=8445,x=0.3310467747539301,y=0.028084005329851225 a=hat,b=zee,i=8446,x=0.178210692330519,y=0.4596388855650022 a=hat,b=wye,i=8447,x=0.44766765422608423,y=0.2937943605301816 a=eks,b=wye,i=8448,x=0.9730885844448779,y=0.6233373493085322 a=pan,b=wye,i=8450,x=0.2793484686069333,y=0.44070351370129646 a=wye,b=wye,i=8452,x=0.47072648393194716,y=0.3041985693356054 a=wye,b=pan,i=8453,x=0.8533811491024729,y=0.9678356263785118 a=pan,b=hat,i=8455,x=0.5906501253369019,y=0.6123184772904339 a=hat,b=wye,i=8457,x=0.09332068743830269,y=0.20145292592178443 a=hat,b=pan,i=8463,x=0.278695825691301,y=0.1017956876584839 a=hat,b=hat,i=8466,x=0.14139708059138034,y=0.10409871077285981 a=pan,b=pan,i=8469,x=0.1347759881116134,y=0.2455909077182844 a=zee,b=zee,i=8471,x=0.516240721628621,y=0.6586906452113941 a=eks,b=hat,i=8473,x=0.09764518520867405,y=0.3404811785298787 a=wye,b=hat,i=8476,x=0.8745714693022778,y=0.6067344417467008 a=eks,b=hat,i=8477,x=0.9309461833265447,y=0.5563876226531717 a=wye,b=wye,i=8480,x=0.16146423266136367,y=0.06354282797551147 a=pan,b=pan,i=8482,x=0.8910001828466121,y=0.7723030338995308 a=eks,b=zee,i=8483,x=0.20374081828155488,y=0.4241287356182083 a=wye,b=eks,i=8486,x=0.9422065000597399,y=0.9149504343179683 a=hat,b=eks,i=8488,x=0.4452671926810047,y=0.11987318281596804 a=pan,b=zee,i=8491,x=0.14450135153044963,y=0.4964690028665373 a=wye,b=pan,i=8493,x=0.19415677927998398,y=0.36967456189817616 a=zee,b=wye,i=8494,x=0.6014391280905923,y=0.9035203941606601 a=pan,b=wye,i=8495,x=0.9535261800524316,y=0.6741780286573957 a=hat,b=hat,i=8497,x=0.3932809847758547,y=0.32342585911847266 a=hat,b=zee,i=8499,x=0.6960433804921428,y=0.9688422831160675 a=hat,b=hat,i=8500,x=0.948682263253869,y=0.894330225437426 a=hat,b=wye,i=8501,x=0.9251536771842801,y=0.5375948099135825 a=zee,b=hat,i=8504,x=0.33240950818517156,y=0.08420305010182172 a=pan,b=wye,i=8505,x=0.04933447605388053,y=0.43620839928024635 a=zee,b=hat,i=8507,x=0.8799876950191433,y=0.8626007536651286 a=hat,b=hat,i=8509,x=0.4819653658346117,y=0.47086103178508854 a=wye,b=hat,i=8511,x=0.5399541727181182,y=0.8444405945197476 a=eks,b=pan,i=8513,x=0.10151458816501346,y=0.1389357491074602 a=wye,b=eks,i=8514,x=0.145836390847488,y=0.3255110732802976 a=wye,b=pan,i=8516,x=0.4017850863763818,y=0.44971529290471857 a=pan,b=zee,i=8518,x=0.7275818161813503,y=0.5297860907729676 a=eks,b=eks,i=8519,x=0.20825394541995124,y=0.20861255119440336 a=wye,b=pan,i=8520,x=0.8898604947131726,y=0.597970731230186 a=eks,b=wye,i=8521,x=0.3648001678117977,y=0.19557380766743293 a=pan,b=eks,i=8522,x=0.6966179778593448,y=0.6840334680719272 a=hat,b=hat,i=8523,x=0.440001403027384,y=0.45225896734383286 a=hat,b=eks,i=8526,x=0.6308328182217219,y=0.9629302966330678 a=zee,b=pan,i=8528,x=0.1829199682476771,y=0.22085981047936964 a=hat,b=wye,i=8529,x=0.8572334709695195,y=0.7640619187795664 a=zee,b=wye,i=8531,x=0.32354124502667125,y=0.2318309195815882 a=pan,b=wye,i=8533,x=0.4223281734144666,y=0.10945011806361638 a=pan,b=eks,i=8536,x=0.23950266321443625,y=0.2173609684570218 a=wye,b=eks,i=8537,x=0.8479922856732104,y=0.646967422694876 a=pan,b=eks,i=8538,x=0.9430852556493492,y=0.8645812565386866 a=wye,b=wye,i=8539,x=0.5424202389577869,y=0.7980364309577922 a=zee,b=zee,i=8540,x=0.6480753391409477,y=0.5064183808137883 a=eks,b=hat,i=8541,x=0.38813893407288325,y=0.12561215999003672 a=eks,b=zee,i=8547,x=0.17659256136803803,y=0.2734607705288187 a=hat,b=wye,i=8548,x=0.06872905733725654,y=0.24606652109262273 a=hat,b=zee,i=8550,x=0.5390972348460589,y=0.832817959583314 a=eks,b=zee,i=8553,x=0.1756747767253124,y=0.40173864656676805 a=zee,b=pan,i=8557,x=0.4734760023383495,y=0.24574081766297817 a=pan,b=pan,i=8558,x=0.01915285502673958,y=0.0710080820684984 a=pan,b=pan,i=8560,x=0.8369571665486479,y=0.6640166878609967 a=zee,b=eks,i=8564,x=0.4638040598773725,y=0.34104108677898826 a=wye,b=hat,i=8565,x=0.48113198136329016,y=0.3218458306963313 a=pan,b=hat,i=8567,x=0.7401694289092702,y=0.8501949156927895 a=wye,b=eks,i=8568,x=0.5607940018315913,y=0.6859095069187073 a=hat,b=wye,i=8569,x=0.8193761557404394,y=0.6213974290333986 a=hat,b=pan,i=8571,x=0.3374929371344728,y=0.11008369139923513 a=wye,b=zee,i=8572,x=0.5104050859274984,y=0.84636724693727 a=eks,b=hat,i=8575,x=0.411309283136459,y=0.3134260008884213 a=wye,b=eks,i=8578,x=0.8671191631706497,y=0.848376644694914 a=hat,b=pan,i=8580,x=0.20981130689562955,y=0.4981591059735274 a=zee,b=wye,i=8582,x=0.48899851680494,y=0.05774193348030199 a=pan,b=zee,i=8585,x=0.8620613291960066,y=0.8283882429708938 a=zee,b=wye,i=8586,x=0.6927422583943957,y=0.7194075668113131 a=hat,b=zee,i=8589,x=0.2926550989813841,y=0.35398173553544887 a=hat,b=pan,i=8591,x=0.7873294723300266,y=0.5332360898832793 a=zee,b=zee,i=8593,x=0.2617818185031422,y=0.43707681521897646 a=zee,b=eks,i=8595,x=0.42488684401408794,y=0.2974668150516677 a=wye,b=wye,i=8596,x=0.8826796731081049,y=0.7850131924698824 a=wye,b=eks,i=8597,x=0.006860697351333767,y=0.19549617714299017 a=wye,b=zee,i=8599,x=0.7184888188080124,y=0.8697536607671493 a=hat,b=wye,i=8600,x=0.84790186953787,y=0.8684654646246722 a=eks,b=pan,i=8603,x=0.31611152902489204,y=0.11267222283796785 a=pan,b=wye,i=8607,x=0.7672859830291083,y=0.9905418229463311 a=eks,b=wye,i=8611,x=0.024981210157926648,y=0.4592839770075655 a=pan,b=zee,i=8616,x=0.6883510014246306,y=0.8824450569844674 a=zee,b=eks,i=8617,x=0.4515091274400017,y=0.020225254455900066 a=pan,b=hat,i=8619,x=0.2649678025213431,y=0.39936058228129934 a=zee,b=zee,i=8621,x=0.13218842583668222,y=0.03127532132246047 a=hat,b=eks,i=8622,x=0.49385289030098156,y=0.3427851043390181 a=eks,b=zee,i=8623,x=0.18543631005824213,y=0.19588655519979803 a=pan,b=zee,i=8624,x=0.10763314570414217,y=0.08213428508081799 a=pan,b=eks,i=8625,x=0.6882597637249681,y=0.8142971025439197 a=eks,b=hat,i=8626,x=0.6080795099100825,y=0.8728243765075873 a=hat,b=zee,i=8628,x=0.46540841676613476,y=0.10159896993531026 a=wye,b=pan,i=8630,x=0.6807920836499873,y=0.8665298197163882 a=pan,b=eks,i=8631,x=0.6858410458377651,y=0.7631951114896744 a=eks,b=hat,i=8632,x=0.20944920807915668,y=0.17415067019098263 a=zee,b=pan,i=8634,x=0.3707685639916669,y=0.2775760739581703 a=zee,b=eks,i=8637,x=0.6395976874259532,y=0.9961211959529084 a=zee,b=eks,i=8639,x=0.2524229698549828,y=0.17611542817224723 a=zee,b=zee,i=8640,x=0.08482390402218887,y=0.36890700689619493 a=eks,b=pan,i=8641,x=0.46605482768215767,y=0.07140744226571838 a=eks,b=hat,i=8642,x=0.10408804972672026,y=0.23204314849773244 a=hat,b=zee,i=8643,x=0.3955443156971198,y=0.35524981169296355 a=wye,b=wye,i=8647,x=0.8282095483187364,y=0.5670959372120373 a=pan,b=hat,i=8649,x=0.8273775847857144,y=0.849837822420028 a=hat,b=pan,i=8650,x=0.7798855565061036,y=0.6249390723014688 a=pan,b=wye,i=8656,x=0.5362020839763336,y=0.5898815059855541 a=hat,b=pan,i=8657,x=0.4419120878855759,y=0.04387616479212919 a=eks,b=hat,i=8661,x=0.9412054441857266,y=0.7031238908715453 a=zee,b=eks,i=8665,x=0.16620817209916572,y=0.4183421439519892 a=pan,b=eks,i=8667,x=0.16483965969504477,y=0.008847013569707962 a=hat,b=eks,i=8670,x=0.6115682118401596,y=0.709847191339046 a=hat,b=pan,i=8671,x=0.5876224326167997,y=0.655751406127023 a=wye,b=zee,i=8676,x=0.458348366941119,y=0.0654065118924938 a=wye,b=eks,i=8679,x=0.8714866001900081,y=0.5074064697197682 a=pan,b=zee,i=8680,x=0.8573300862564848,y=0.8110639386847459 a=hat,b=eks,i=8682,x=0.8690529123645934,y=0.9535269156601301 a=wye,b=zee,i=8683,x=0.6350123840910076,y=0.6382912385391265 a=zee,b=wye,i=8685,x=0.584126263404004,y=0.7538247769853159 a=wye,b=wye,i=8686,x=0.43551003027785373,y=0.3236501977657479 a=wye,b=hat,i=8687,x=0.8880686097383739,y=0.6330150426943297 a=eks,b=pan,i=8691,x=0.9943932359314775,y=0.9072697301052425 a=eks,b=hat,i=8694,x=0.742421569895559,y=0.766958291324268 a=zee,b=eks,i=8695,x=0.23665653193040737,y=0.2743956071876914 a=pan,b=wye,i=8700,x=0.849446996637848,y=0.7731446643107283 a=pan,b=pan,i=8701,x=0.6101087522261474,y=0.5619798733118421 a=hat,b=hat,i=8703,x=0.5764546868259887,y=0.5585165186187631 a=wye,b=hat,i=8704,x=0.5825019915262796,y=0.7509760878946939 a=wye,b=hat,i=8705,x=0.2608869277824021,y=0.18054497056171448 a=hat,b=hat,i=8706,x=0.44933047132208914,y=0.2870706030629274 a=eks,b=eks,i=8707,x=0.5126396112669858,y=0.7451349937567859 a=eks,b=eks,i=8710,x=0.23179579194118272,y=0.2720693323497807 a=zee,b=zee,i=8714,x=0.871119409753738,y=0.8880243168317828 a=pan,b=zee,i=8716,x=0.010723117383408809,y=0.3256007021073345 a=pan,b=pan,i=8719,x=0.8266651999765658,y=0.7457257758170397 a=zee,b=hat,i=8721,x=0.18186817750471462,y=0.28188928351608533 a=eks,b=wye,i=8722,x=0.1796424637908317,y=0.08845716187743458 a=hat,b=zee,i=8728,x=0.1222023744265569,y=0.36047803182555027 a=wye,b=zee,i=8731,x=0.35713870378290125,y=0.1671267891620788 a=hat,b=zee,i=8732,x=0.5996953011640668,y=0.62340072229723 a=zee,b=hat,i=8733,x=0.2345433105033039,y=0.10071782641377514 a=zee,b=hat,i=8734,x=0.301665687569308,y=0.3630510637781915 a=hat,b=pan,i=8735,x=0.47526687158292913,y=0.22747265846322517 a=pan,b=eks,i=8736,x=0.5793971065628433,y=0.6408359296127717 a=wye,b=zee,i=8737,x=0.6210812266919626,y=0.8036316255685408 a=pan,b=wye,i=8738,x=0.15856470090745411,y=0.07442697669748699 a=zee,b=zee,i=8740,x=0.7182904394926175,y=0.7258491677192344 a=wye,b=hat,i=8741,x=0.050796016954941514,y=0.2827688297213582 a=pan,b=hat,i=8742,x=0.536032482315453,y=0.7201071015346874 a=pan,b=pan,i=8748,x=0.0504766925956035,y=0.1711562295167237 a=eks,b=eks,i=8749,x=0.43854684004790123,y=0.28682577788725483 a=wye,b=hat,i=8751,x=0.06509359888339494,y=0.177636855552877 a=eks,b=pan,i=8752,x=0.09242339085575646,y=0.32343297889748723 a=wye,b=eks,i=8753,x=0.9973914329853147,y=0.9693279929688737 a=hat,b=eks,i=8754,x=0.370565044079066,y=0.009819699195025788 a=zee,b=pan,i=8755,x=0.8202332245450998,y=0.5597758930454603 a=eks,b=hat,i=8756,x=0.272322951811926,y=0.145224793410337 a=zee,b=zee,i=8758,x=0.9667659565271899,y=0.5623772828898473 a=wye,b=wye,i=8761,x=0.6603209295504429,y=0.5459240190405134 a=hat,b=eks,i=8763,x=0.08300923681882266,y=0.3326688755194035 a=pan,b=wye,i=8765,x=0.7403998857752021,y=0.9560094148670492 a=wye,b=zee,i=8766,x=0.9449147393082301,y=0.6732722707943484 a=pan,b=hat,i=8767,x=0.994940403256145,y=0.6992814067153592 a=pan,b=eks,i=8770,x=0.6298376152653163,y=0.5214339719227405 a=wye,b=zee,i=8772,x=0.754483186364135,y=0.9567133222811894 a=wye,b=eks,i=8774,x=0.3998473670297119,y=0.07393345230936454 a=wye,b=zee,i=8775,x=0.15521659769175922,y=0.2873998987631695 a=zee,b=wye,i=8778,x=0.7616404527480684,y=0.8158713089665471 a=hat,b=wye,i=8779,x=0.600461848950472,y=0.5399884947809014 a=eks,b=zee,i=8780,x=0.5925751420631895,y=0.6690795493308443 a=pan,b=zee,i=8781,x=0.9383737724522293,y=0.7748193135876428 a=zee,b=hat,i=8785,x=0.6464009753631575,y=0.6923362770119578 a=hat,b=zee,i=8788,x=0.2642687755038374,y=0.10859080810253674 a=wye,b=hat,i=8790,x=0.8223311948449997,y=0.5130414892803776 a=eks,b=hat,i=8791,x=0.6818394894701235,y=0.7849388490947223 a=pan,b=pan,i=8794,x=0.9586567458589967,y=0.919190837846641 a=wye,b=wye,i=8796,x=0.534583514132678,y=0.7819265778012215 a=pan,b=hat,i=8797,x=0.4497161697366787,y=0.026741184746243984 a=zee,b=eks,i=8798,x=0.8167620532839222,y=0.8279530206710328 a=wye,b=eks,i=8799,x=0.8471762978662517,y=0.6353417536536258 a=hat,b=hat,i=8801,x=0.017219020782623162,y=0.1624665172562224 a=zee,b=wye,i=8802,x=0.5608298870065771,y=0.5058672809947269 a=eks,b=pan,i=8803,x=0.4433211231528589,y=0.2838323939048415 a=wye,b=pan,i=8806,x=0.08327290658651032,y=0.2550251881973168 a=pan,b=eks,i=8807,x=0.339222785155762,y=0.1751435242352425 a=zee,b=zee,i=8808,x=0.4820472727787015,y=0.017092345316797486 a=wye,b=eks,i=8811,x=0.27073265506551913,y=0.4615910666569303 a=eks,b=eks,i=8812,x=0.07160623229882901,y=0.12458111194427568 a=pan,b=hat,i=8813,x=0.7877743286534948,y=0.8757926217967861 a=zee,b=wye,i=8815,x=0.7068610202368742,y=0.7545170669582756 a=zee,b=hat,i=8819,x=0.8077899694017853,y=0.9694410429631465 a=wye,b=wye,i=8822,x=0.5093848419146877,y=0.7499112900526392 a=wye,b=zee,i=8823,x=0.7521935072400413,y=0.8768924705259773 a=zee,b=wye,i=8824,x=0.17855149771491108,y=0.09366701006513045 a=wye,b=wye,i=8825,x=0.9175145724829686,y=0.733177971733118 a=wye,b=pan,i=8826,x=0.7781119220016439,y=0.5568374194244214 a=pan,b=pan,i=8827,x=0.44994539245047094,y=0.010072546778717273 a=zee,b=pan,i=8828,x=0.8974531793622843,y=0.6299514776398363 a=eks,b=zee,i=8832,x=0.8201188808616761,y=0.7163833146418705 a=pan,b=hat,i=8838,x=0.4461825537060876,y=0.3925097922631463 a=wye,b=pan,i=8839,x=0.4002040179552746,y=0.24694949779242004 a=pan,b=eks,i=8842,x=0.9266082306477657,y=0.5285007006129709 a=hat,b=hat,i=8843,x=0.37872486721691034,y=0.07532645476050148 a=hat,b=hat,i=8844,x=0.0685259642260373,y=0.00776256940978215 a=pan,b=wye,i=8845,x=0.24303613366881238,y=0.13056160975299724 a=wye,b=eks,i=8846,x=0.9676348576302707,y=0.5106172718000012 a=pan,b=zee,i=8849,x=0.6264364311275306,y=0.9563714459175713 a=hat,b=eks,i=8850,x=0.8735595733663851,y=0.5106033973424751 a=hat,b=wye,i=8854,x=0.9304995637638334,y=0.6319621895624278 a=pan,b=zee,i=8858,x=0.7128306783608381,y=0.811303686462451 a=pan,b=wye,i=8859,x=0.9081121983690633,y=0.5712022128090308 a=wye,b=hat,i=8861,x=0.39486469148361836,y=0.49780490997274707 a=wye,b=wye,i=8862,x=0.7736663364376681,y=0.5874621525618737 a=eks,b=eks,i=8864,x=0.8345356283222535,y=0.7112462031216813 a=zee,b=hat,i=8866,x=0.6732648337974786,y=0.9333019394438807 a=hat,b=hat,i=8868,x=0.016222381142314224,y=0.02090746494690887 a=zee,b=wye,i=8873,x=0.12465164468565504,y=0.4217551436223611 a=hat,b=wye,i=8874,x=0.8578330113744658,y=0.5967910955072325 a=wye,b=pan,i=8875,x=0.9700008052690227,y=0.5495480079950836 a=wye,b=eks,i=8877,x=0.21506616709063353,y=0.028566538362973737 a=zee,b=pan,i=8879,x=0.8504405312776793,y=0.6033489024089217 a=wye,b=wye,i=8880,x=0.47595916238031677,y=0.4288837512249194 a=eks,b=zee,i=8881,x=0.45213579710907703,y=0.08748650555497739 a=hat,b=eks,i=8883,x=0.7348243939209332,y=0.8605568412288824 a=zee,b=wye,i=8885,x=0.41758576449425977,y=0.14627581317514182 a=wye,b=hat,i=8886,x=0.9280339369715974,y=0.9297205006311496 a=zee,b=zee,i=8889,x=0.06545001204265088,y=0.3004515856834621 a=eks,b=zee,i=8890,x=0.27962535290039825,y=0.44335679461319166 a=pan,b=eks,i=8892,x=0.3852530201110397,y=0.06941698785655903 a=zee,b=eks,i=8894,x=0.1966531651167187,y=0.4688240979189081 a=wye,b=hat,i=8895,x=0.22463107582925324,y=0.4161186278077874 a=eks,b=zee,i=8896,x=0.22809184804735871,y=0.4707492036142362 a=hat,b=zee,i=8898,x=0.45420946781919536,y=0.10354482418357991 a=zee,b=pan,i=8899,x=0.1500424792671291,y=0.3904357922605537 a=eks,b=hat,i=8900,x=0.4705695658454211,y=0.13058529889276693 a=zee,b=eks,i=8903,x=0.4231582011204885,y=0.4821489267549405 a=eks,b=wye,i=8904,x=0.27693517497385267,y=0.35861877550118093 a=hat,b=pan,i=8910,x=0.49610253645583846,y=0.21986829070394298 a=eks,b=wye,i=8911,x=0.09558215825789063,y=0.018958306464913255 a=hat,b=zee,i=8915,x=0.4040203950712935,y=0.04965833346589221 a=eks,b=wye,i=8916,x=0.46871698272105,y=0.3462467467139262 a=eks,b=hat,i=8919,x=0.4742484069291977,y=0.2514827712591855 a=pan,b=wye,i=8920,x=0.733610226156712,y=0.5651397506818968 a=hat,b=zee,i=8921,x=0.5565613081265703,y=0.9540215346587051 a=pan,b=pan,i=8922,x=0.270663413379612,y=0.4701176631611145 a=pan,b=zee,i=8923,x=0.1853923248765008,y=0.0022929560982657415 a=eks,b=wye,i=8925,x=0.5609329671328473,y=0.589599688677612 a=pan,b=eks,i=8926,x=0.5899990569564478,y=0.9670305978679095 a=zee,b=wye,i=8929,x=0.7910634287616417,y=0.5832583369417834 a=pan,b=eks,i=8930,x=0.9200311370773863,y=0.8086516025019609 a=zee,b=zee,i=8933,x=0.4454093296017202,y=0.3284583037994141 a=zee,b=eks,i=8935,x=0.4486952558039746,y=0.4130427561178419 a=hat,b=eks,i=8936,x=0.9755076232964625,y=0.6362818073430646 a=hat,b=pan,i=8939,x=0.8511623725969789,y=0.6164456458973154 a=wye,b=wye,i=8940,x=0.9818963757219575,y=0.5755972292005318 a=hat,b=hat,i=8941,x=0.7568298583150284,y=0.5846179373919896 a=eks,b=hat,i=8947,x=0.8483324196518135,y=0.6158053719777993 a=eks,b=pan,i=8948,x=0.5318875109400665,y=0.8230182723036877 a=zee,b=wye,i=8950,x=0.2790928413033852,y=0.0772468110330039 a=wye,b=eks,i=8951,x=0.9027943823162313,y=0.6124436018843183 a=zee,b=eks,i=8954,x=0.47758220480911473,y=0.2664181870815133 a=hat,b=pan,i=8955,x=0.3375565375177234,y=0.19102233314969186 a=eks,b=eks,i=8957,x=0.7047805468534891,y=0.5946651385930218 a=pan,b=pan,i=8958,x=0.6519485361202326,y=0.7030912337766829 a=hat,b=eks,i=8959,x=0.6713731052940981,y=0.6013560927295543 a=hat,b=pan,i=8960,x=0.9417167187642326,y=0.8026299128777213 a=zee,b=wye,i=8961,x=0.8154052031095614,y=0.6481399972215665 a=pan,b=wye,i=8962,x=0.0914057435253639,y=0.10822318947000709 a=pan,b=hat,i=8963,x=0.3046680167824908,y=0.09348404024830137 a=zee,b=zee,i=8964,x=0.6189408278256606,y=0.8433159445563726 a=eks,b=hat,i=8965,x=0.958051223919934,y=0.5081338063861043 a=wye,b=eks,i=8966,x=0.8530691152394455,y=0.8692728927718893 a=hat,b=eks,i=8967,x=0.8372819315874948,y=0.8861340588817578 a=wye,b=zee,i=8968,x=0.9977506774202527,y=0.9679468301172027 a=hat,b=pan,i=8969,x=0.45963913428927994,y=0.2847833031004139 a=pan,b=eks,i=8970,x=0.34327965136688565,y=0.2691645574062619 a=hat,b=zee,i=8972,x=0.5786862872644059,y=0.8671986650119898 a=pan,b=pan,i=8975,x=0.30697964139250933,y=0.08659671798153756 a=eks,b=hat,i=8978,x=0.5232916500187303,y=0.8753848427459924 a=zee,b=pan,i=8984,x=0.6987813603715117,y=0.5232757984191948 a=hat,b=wye,i=8985,x=0.932024395968463,y=0.9447580630208217 a=pan,b=hat,i=8988,x=0.5404886782798238,y=0.5374270296539031 a=wye,b=hat,i=8989,x=0.9762152572727496,y=0.8712434910014083 a=pan,b=eks,i=8991,x=0.5236344484593898,y=0.7020390430173928 a=zee,b=zee,i=8992,x=0.285347240060405,y=0.2493240966526331 a=zee,b=wye,i=8993,x=0.7119318558771737,y=0.8612125817012293 a=pan,b=eks,i=8994,x=0.6358666072344865,y=0.930679583655016 a=eks,b=zee,i=8996,x=0.014997169280220546,y=0.38924624193859947 a=pan,b=eks,i=8997,x=0.006957705982631457,y=0.27329586967444996 a=zee,b=wye,i=8998,x=0.45799438726799335,y=0.020705027471035087 a=hat,b=eks,i=9000,x=0.33727508102114134,y=0.13582122939201124 a=zee,b=eks,i=9004,x=0.4893113819292234,y=0.23390278210191928 a=zee,b=wye,i=9008,x=0.8282941376563813,y=0.9889370827954176 a=pan,b=pan,i=9009,x=0.3878236858466175,y=0.06714068514516147 a=zee,b=pan,i=9013,x=0.6305143660449302,y=0.710245374097503 a=zee,b=wye,i=9014,x=0.16891869382531022,y=0.37574058303798785 a=pan,b=wye,i=9015,x=0.3220094028213596,y=0.4839478151356543 a=eks,b=eks,i=9016,x=0.5800740825749267,y=0.8910261945783475 a=zee,b=hat,i=9017,x=0.9502641304019075,y=0.8396710982351069 a=pan,b=eks,i=9018,x=0.4764608908539697,y=0.4728942258779697 a=hat,b=wye,i=9019,x=0.272865007065651,y=0.41472685232133355 a=eks,b=wye,i=9021,x=0.7714689461624145,y=0.7234215610234059 a=eks,b=eks,i=9022,x=0.8213647586189171,y=0.8993719170687399 a=zee,b=zee,i=9023,x=0.7890585709155626,y=0.5099043493783608 a=hat,b=zee,i=9026,x=0.8364001741754985,y=0.8590079093968295 a=zee,b=wye,i=9028,x=0.5239151547368636,y=0.8242755070656802 a=zee,b=pan,i=9030,x=0.5793285227205369,y=0.8038160807198467 a=zee,b=wye,i=9031,x=0.42904790956591343,y=0.292783754196035 a=eks,b=eks,i=9033,x=0.6937567726575595,y=0.9601490785081487 a=zee,b=wye,i=9034,x=0.7679588189607225,y=0.5157794038228849 a=zee,b=eks,i=9035,x=0.8214778175820499,y=0.760903040561442 a=pan,b=wye,i=9037,x=0.5665532246879906,y=0.7400695598140006 a=wye,b=hat,i=9041,x=0.983147388463674,y=0.6432444380950916 a=hat,b=hat,i=9047,x=0.49305007094314124,y=0.3988521392673088 a=pan,b=eks,i=9050,x=0.9286228908161963,y=0.7128664838636729 a=pan,b=eks,i=9052,x=0.9883016421626661,y=0.836414097002929 a=eks,b=eks,i=9053,x=0.578258852447845,y=0.6483953013399163 a=pan,b=eks,i=9054,x=0.4581912096837616,y=0.2396747725609628 a=pan,b=zee,i=9055,x=0.3910891811342043,y=0.3060677650909158 a=zee,b=eks,i=9056,x=0.1257667798355191,y=0.22523050330447225 a=hat,b=zee,i=9059,x=0.8032276523393308,y=0.5895573796523289 a=zee,b=wye,i=9060,x=0.9489845382435659,y=0.7186985210470157 a=pan,b=pan,i=9064,x=0.957433552072592,y=0.612273185217601 a=pan,b=pan,i=9065,x=0.9206660995409818,y=0.6388548120920611 a=hat,b=eks,i=9066,x=0.7938077850540011,y=0.9840395711931128 a=eks,b=eks,i=9067,x=0.7586156840742447,y=0.9657635310428576 a=zee,b=wye,i=9068,x=0.03525325620506059,y=0.20286396861407563 a=eks,b=pan,i=9076,x=0.9828706810264064,y=0.7255065121370968 a=wye,b=pan,i=9077,x=0.285398788706721,y=0.4224009700612671 a=eks,b=wye,i=9079,x=0.2615316643364618,y=0.22800118037634576 a=zee,b=zee,i=9080,x=0.4293043221770476,y=0.17146941589040998 a=eks,b=zee,i=9083,x=0.23246167408482288,y=0.22121933132231686 a=zee,b=hat,i=9084,x=0.3023274634670656,y=0.3919343366566008 a=wye,b=zee,i=9085,x=0.48017021719327857,y=0.0007369823565522848 a=eks,b=hat,i=9089,x=0.17655473424651258,y=0.027572342702157582 a=zee,b=hat,i=9090,x=0.32515391353663414,y=0.24968345250419 a=pan,b=pan,i=9094,x=0.9716001304365217,y=0.6469197673672618 a=wye,b=hat,i=9098,x=0.2804902678845115,y=0.048162079204052355 a=eks,b=zee,i=9099,x=0.43507793732310474,y=0.3953634078162601 a=pan,b=hat,i=9102,x=0.28992810063257124,y=0.0936263604214349 a=hat,b=hat,i=9105,x=0.4895163425613803,y=0.033340055000638746 a=pan,b=zee,i=9106,x=0.44873266752482066,y=0.15530029661112588 a=pan,b=wye,i=9107,x=0.34313847787795904,y=0.2784766094254877 a=eks,b=hat,i=9109,x=0.9754089146191263,y=0.5077651396700906 a=hat,b=zee,i=9110,x=0.6804708680166679,y=0.5357141089061417 a=eks,b=wye,i=9114,x=0.9835650326182704,y=0.8742646308873757 a=wye,b=zee,i=9115,x=0.10698858622424778,y=0.1221930347907727 a=pan,b=eks,i=9117,x=0.03509835946106599,y=0.4760601952379325 a=eks,b=hat,i=9119,x=0.4790316458227425,y=0.39259275204959654 a=zee,b=eks,i=9120,x=0.8458192848056897,y=0.9572808268819287 a=pan,b=pan,i=9121,x=0.9385839358069921,y=0.6047637384188489 a=wye,b=pan,i=9124,x=0.271590915264334,y=0.042888205379760125 a=wye,b=pan,i=9127,x=0.8948475255545615,y=0.6574529698134108 a=wye,b=hat,i=9128,x=0.3669933618796106,y=0.37512574289121725 a=pan,b=wye,i=9132,x=0.6455902674388132,y=0.5382099179246037 a=eks,b=hat,i=9134,x=0.16612397042168814,y=0.3555728981905678 a=zee,b=hat,i=9137,x=0.0053168417053239825,y=0.23970890502186593 a=zee,b=pan,i=9140,x=0.5013642860004229,y=0.6650678922317501 a=eks,b=hat,i=9141,x=0.39054802020070156,y=0.06891218601149551 a=wye,b=hat,i=9143,x=0.4460302810053538,y=0.040278587711885305 a=hat,b=eks,i=9144,x=0.30372533545667213,y=0.4297094831523881 a=zee,b=eks,i=9145,x=0.00769664097559164,y=0.1446289205179656 a=pan,b=wye,i=9148,x=0.7394828765293925,y=0.9475622732914554 a=zee,b=pan,i=9149,x=0.22357262525185106,y=0.20550777850363977 a=zee,b=pan,i=9150,x=0.7364509479059471,y=0.5273598026796336 a=zee,b=eks,i=9151,x=0.3216536526700301,y=0.23861396443066107 a=zee,b=wye,i=9153,x=0.7713603997995606,y=0.8927934282961629 a=eks,b=eks,i=9154,x=0.8033015390132335,y=0.7428789028852476 a=hat,b=pan,i=9155,x=0.4469843980869507,y=0.18928924828611082 a=wye,b=wye,i=9156,x=0.500390135135027,y=0.8848611838558533 a=zee,b=hat,i=9157,x=0.6459716786543495,y=0.8783255778315494 a=zee,b=pan,i=9158,x=0.829825296282736,y=0.9403424810846446 a=wye,b=zee,i=9161,x=0.9794920335555851,y=0.5208178578405636 a=hat,b=pan,i=9162,x=0.36011363532418106,y=0.3418468995076799 a=pan,b=wye,i=9163,x=0.37797791224139665,y=0.39353695559343227 a=hat,b=zee,i=9164,x=0.8838448430378912,y=0.7958865093747128 a=zee,b=zee,i=9165,x=0.7783131261247423,y=0.7403476431916528 a=eks,b=eks,i=9166,x=0.22004086657109556,y=0.19736319549096537 a=wye,b=pan,i=9168,x=0.5370077637228887,y=0.6389653169963743 a=pan,b=zee,i=9169,x=0.030815090059835182,y=0.017547992939040524 a=hat,b=zee,i=9171,x=0.46003847353195026,y=0.4354345395691309 a=zee,b=wye,i=9175,x=0.19674254649951783,y=0.18304515051083692 a=eks,b=pan,i=9176,x=0.21328957209812893,y=0.13489440510159378 a=pan,b=eks,i=9177,x=0.005689888388995534,y=0.19304812808970884 a=pan,b=pan,i=9180,x=0.6528911310033898,y=0.7987231494976602 a=pan,b=hat,i=9181,x=0.6407905148282739,y=0.7653184860370159 a=zee,b=eks,i=9183,x=0.8789109160607933,y=0.6764597514962247 a=zee,b=eks,i=9187,x=0.9492829297817624,y=0.9675987602030636 a=pan,b=wye,i=9190,x=0.8371899774027962,y=0.7968937186611519 a=wye,b=zee,i=9191,x=0.021517369039138368,y=0.1381446138482929 a=eks,b=zee,i=9192,x=0.2695667438992312,y=0.28074171138048576 a=wye,b=pan,i=9193,x=0.894511626988757,y=0.938591468790241 a=hat,b=hat,i=9196,x=0.3980083533361548,y=0.12546876469790447 a=pan,b=pan,i=9198,x=0.6918350451415268,y=0.7037194771160388 a=eks,b=wye,i=9200,x=0.5817459757102148,y=0.7926589099732673 a=pan,b=hat,i=9211,x=0.6420793762242888,y=0.686212047389247 a=zee,b=zee,i=9214,x=0.5228330684403698,y=0.9018872431686975 a=wye,b=pan,i=9216,x=0.945612107018632,y=0.5963971999452331 a=eks,b=zee,i=9221,x=0.41382740826608244,y=0.477677197129144 a=hat,b=eks,i=9222,x=0.6481864881498441,y=0.5386696824239133 a=hat,b=pan,i=9227,x=0.946179027020023,y=0.5244012924468459 a=pan,b=eks,i=9230,x=0.3504445487923017,y=0.0696878797080479 a=wye,b=zee,i=9231,x=0.9610972939563219,y=0.9615810406623142 a=eks,b=wye,i=9232,x=0.9834939198983763,y=0.902120163211437 a=wye,b=wye,i=9234,x=0.07920533790072082,y=0.4210755544521094 a=eks,b=hat,i=9235,x=0.48788423763049804,y=0.4836801731961293 a=hat,b=hat,i=9237,x=0.7302582849873859,y=0.6347279985888814 a=wye,b=hat,i=9240,x=0.8014369373980875,y=0.814100095516592 a=pan,b=wye,i=9244,x=0.2905201186571721,y=0.43425495374391 a=eks,b=hat,i=9249,x=0.39091312069697004,y=0.3308378438144999 a=zee,b=pan,i=9253,x=0.9673157002999003,y=0.7433452506349982 a=eks,b=pan,i=9255,x=0.4613513625777358,y=0.13932504620685293 a=wye,b=hat,i=9256,x=0.961942362261845,y=0.9395596121676374 a=zee,b=eks,i=9257,x=0.8279072561096625,y=0.8490761119202441 a=wye,b=hat,i=9258,x=0.22113630994807887,y=0.04508156412906639 a=eks,b=pan,i=9261,x=0.269529051685529,y=0.4796863618360836 a=hat,b=zee,i=9264,x=0.023456730670551096,y=0.1975931324733875 a=zee,b=pan,i=9265,x=0.007623684349103987,y=0.07551340520872629 a=eks,b=eks,i=9266,x=0.17817560372002472,y=0.49956704475839064 a=pan,b=pan,i=9267,x=0.04690229807589086,y=0.1929566014362788 a=zee,b=eks,i=9268,x=0.3470560427863578,y=0.3275172947002548 a=pan,b=pan,i=9270,x=0.1487528959524752,y=0.4469367832007153 a=pan,b=wye,i=9271,x=0.24595184073704124,y=0.48817169012236983 a=eks,b=wye,i=9275,x=0.09259540108550524,y=0.21275003504178946 a=zee,b=pan,i=9276,x=0.684545528802376,y=0.5890511399726057 a=eks,b=zee,i=9277,x=0.8931272247478754,y=0.9108980465393053 a=wye,b=hat,i=9278,x=0.4908268342979165,y=0.1022036634900918 a=hat,b=hat,i=9279,x=0.2967586295179133,y=0.28353991288502345 a=hat,b=pan,i=9282,x=0.7019948002783253,y=0.631688166262754 a=wye,b=wye,i=9284,x=0.6806389501871987,y=0.6623844311258401 a=hat,b=hat,i=9285,x=0.4737832453554822,y=0.41355006089770063 a=eks,b=zee,i=9287,x=0.8397334293185692,y=0.5061677209701542 a=pan,b=zee,i=9290,x=0.3192448675700893,y=0.44823866938306645 a=zee,b=wye,i=9291,x=0.9454063570448517,y=0.8966671326133628 a=pan,b=wye,i=9292,x=0.23598454792188905,y=0.19161925423381865 a=eks,b=pan,i=9294,x=0.6560425166942336,y=0.6540980604466382 a=wye,b=zee,i=9298,x=0.6400110650985101,y=0.5918078681573676 a=pan,b=pan,i=9301,x=0.9138183195198948,y=0.7104753541099725 a=hat,b=wye,i=9304,x=0.7296704964431727,y=0.7521653716034574 a=eks,b=zee,i=9305,x=0.06306304065329327,y=0.0425317362399702 a=pan,b=hat,i=9308,x=0.6041097470881792,y=0.6019432291571227 a=zee,b=zee,i=9310,x=0.0489167780793065,y=0.1349420473135753 a=zee,b=hat,i=9311,x=0.9072476732379934,y=0.9064380734997842 a=wye,b=wye,i=9313,x=0.8777070865064334,y=0.688500944696727 a=zee,b=eks,i=9314,x=0.23207083417195573,y=0.1459854668671191 a=eks,b=pan,i=9317,x=0.7067142230113493,y=0.8603219297899701 a=zee,b=pan,i=9319,x=0.32868846620305514,y=0.23221497395763813 a=hat,b=eks,i=9322,x=0.4540531923441389,y=0.08529592575810008 a=pan,b=pan,i=9329,x=0.709436743485784,y=0.864805283294307 a=wye,b=pan,i=9331,x=0.15157491016759606,y=0.1781007458002013 a=hat,b=pan,i=9332,x=0.469941809547738,y=0.17916634366371342 a=zee,b=hat,i=9333,x=0.09066429132809939,y=0.11291661870669667 a=eks,b=hat,i=9334,x=0.524982507717917,y=0.7739607975739912 a=zee,b=zee,i=9335,x=0.012865744128303103,y=0.4199812901617862 a=eks,b=wye,i=9337,x=0.967092843190403,y=0.7129610451088223 a=zee,b=pan,i=9338,x=0.8766283655189672,y=0.8633718650644421 a=wye,b=zee,i=9342,x=0.6598872721679194,y=0.5841487864376177 a=pan,b=eks,i=9344,x=0.23032551308519345,y=0.4668513513037823 a=zee,b=zee,i=9345,x=0.20721325482748,y=0.034658616763860395 a=pan,b=zee,i=9346,x=0.16804254918956518,y=0.41515674460320806 a=zee,b=hat,i=9349,x=0.39077150740400146,y=0.35499431123174563 a=zee,b=wye,i=9352,x=0.25522951350527867,y=0.48668317596678823 a=hat,b=eks,i=9355,x=0.7415812921258672,y=0.5371997970549264 a=eks,b=pan,i=9359,x=0.726201179013375,y=0.8974974727334436 a=wye,b=eks,i=9361,x=0.9893854310908603,y=0.6762929165737711 a=hat,b=pan,i=9363,x=0.24144536935297445,y=0.2588538401367807 a=pan,b=eks,i=9364,x=0.20906377399579568,y=0.26492309174424467 a=zee,b=eks,i=9366,x=0.564783511562303,y=0.8736158892678358 a=zee,b=zee,i=9367,x=0.5210119669704992,y=0.6601277179108643 a=eks,b=wye,i=9370,x=0.45402522126988876,y=0.3506046491270858 a=hat,b=eks,i=9376,x=0.7413691108319418,y=0.6875522126693252 a=zee,b=pan,i=9378,x=0.07698056466866121,y=0.3418330456253533 a=eks,b=pan,i=9380,x=0.2066941665945501,y=0.34630072002937273 a=eks,b=eks,i=9384,x=0.6925067244014451,y=0.5943855874672127 a=zee,b=pan,i=9392,x=0.7293619733667298,y=0.9075863768811903 a=wye,b=wye,i=9394,x=0.10611623011471227,y=0.3957794249815757 a=zee,b=pan,i=9396,x=0.6285537391072125,y=0.9531200799497426 a=pan,b=wye,i=9398,x=0.8650573724586973,y=0.5778302746561125 a=wye,b=zee,i=9399,x=0.4320795547957027,y=0.23858094801157526 a=hat,b=wye,i=9400,x=0.2940385536354171,y=0.23832353705367249 a=zee,b=eks,i=9401,x=0.42923024441857793,y=0.17544011645116253 a=zee,b=pan,i=9406,x=0.6365186667658354,y=0.8944728240200203 a=pan,b=wye,i=9408,x=0.12426748935771803,y=0.0845763991164874 a=hat,b=pan,i=9411,x=0.9186069486489989,y=0.8447036557059203 a=hat,b=eks,i=9414,x=0.2255272659717531,y=0.35264234784519843 a=zee,b=hat,i=9415,x=0.008811072137013154,y=0.035134463676480765 a=eks,b=zee,i=9416,x=0.25375738274931314,y=0.2401418182493137 a=hat,b=hat,i=9417,x=0.9120549045686616,y=0.8777751478548385 a=eks,b=zee,i=9418,x=0.6260065420723087,y=0.5130847407197059 a=wye,b=hat,i=9420,x=0.5546625744389891,y=0.592423843346026 a=wye,b=pan,i=9423,x=0.7419375666814781,y=0.637584961040595 a=zee,b=hat,i=9428,x=0.653199130802959,y=0.6335896172568141 a=zee,b=hat,i=9429,x=0.532354384202152,y=0.6240035856800994 a=zee,b=wye,i=9430,x=0.34274658023426774,y=0.30318681846915607 a=zee,b=zee,i=9431,x=0.5467923659024335,y=0.7749657540239817 a=zee,b=eks,i=9432,x=0.011838772084611482,y=0.1275339102058447 a=eks,b=wye,i=9435,x=0.06360578109666282,y=0.46325468037532036 a=hat,b=wye,i=9436,x=0.7601470639179305,y=0.659295809995321 a=wye,b=zee,i=9440,x=0.5929171430130797,y=0.7244452361008757 a=eks,b=pan,i=9441,x=0.6555419304461224,y=0.8327927199446215 a=hat,b=zee,i=9442,x=0.3102917611279977,y=0.1420968126103015 a=zee,b=pan,i=9444,x=0.09343968982332573,y=0.08259490069798114 a=hat,b=wye,i=9446,x=0.17230938096585302,y=0.4547425422305543 a=pan,b=zee,i=9448,x=0.1174681478790296,y=0.24900650669165836 a=eks,b=eks,i=9451,x=0.3293644408777492,y=0.4858482434549475 a=eks,b=hat,i=9452,x=0.06728855986596627,y=0.0225203259981267 a=eks,b=eks,i=9454,x=0.6561623394687102,y=0.8733561225304062 a=hat,b=hat,i=9455,x=0.7967671268259048,y=0.9988457558727984 a=eks,b=hat,i=9456,x=0.3026733411299638,y=0.009039229737229593 a=wye,b=hat,i=9459,x=0.6222194995601943,y=0.7094551547783764 a=zee,b=pan,i=9462,x=0.3728674304211519,y=0.12798138723542984 a=eks,b=hat,i=9464,x=0.8408137777713087,y=0.7528260965110807 a=eks,b=zee,i=9465,x=0.33674248998876777,y=0.10313732374119522 a=zee,b=hat,i=9466,x=0.7785160988373221,y=0.9149400917302326 a=pan,b=pan,i=9467,x=0.6408147454849812,y=0.8180389929482121 a=hat,b=eks,i=9469,x=0.7744532386038095,y=0.8239793457702959 a=zee,b=hat,i=9474,x=0.647685209897895,y=0.8836053801968514 a=wye,b=zee,i=9480,x=0.8749976408632957,y=0.6548646339660915 a=wye,b=zee,i=9483,x=0.8152545316901858,y=0.805340784776813 a=wye,b=pan,i=9484,x=0.6372765009756718,y=0.9390350932955009 a=zee,b=pan,i=9487,x=0.4993989664425713,y=0.05807295824271008 a=eks,b=wye,i=9490,x=0.3047068029924873,y=0.45677847562149443 a=pan,b=zee,i=9493,x=0.14382267645371283,y=0.30310643623917777 a=wye,b=eks,i=9496,x=0.6409095653823011,y=0.9562448788009965 a=pan,b=hat,i=9499,x=0.6409505992060831,y=0.8924125083478576 a=eks,b=pan,i=9502,x=0.16573428170345306,y=0.41898077136905765 a=eks,b=wye,i=9503,x=0.36724763207097333,y=0.20835207321889548 a=pan,b=zee,i=9507,x=0.7813724544334408,y=0.8453351473597829 a=wye,b=wye,i=9508,x=0.7441125682394683,y=0.7008423538608134 a=pan,b=wye,i=9509,x=0.9777133094457836,y=0.8770140891389367 a=pan,b=zee,i=9510,x=0.5805152904440047,y=0.7292694938520734 a=pan,b=eks,i=9512,x=0.8889876510183636,y=0.5398130117495377 a=zee,b=hat,i=9513,x=0.9304009976201171,y=0.7707216462443467 a=pan,b=zee,i=9516,x=0.19069582221512293,y=0.18374946422400285 a=hat,b=zee,i=9517,x=0.7026133177880014,y=0.6466476553765019 a=zee,b=eks,i=9524,x=0.9170688313846707,y=0.5069375781460218 a=pan,b=pan,i=9526,x=0.2141091210993753,y=0.3444756388829696 a=zee,b=wye,i=9528,x=0.8576581178453184,y=0.5844216436491058 a=hat,b=pan,i=9529,x=0.15630461982613209,y=0.4213024290362597 a=hat,b=zee,i=9533,x=0.14919839526856782,y=0.36262847729045855 a=pan,b=zee,i=9534,x=0.028605382208390595,y=0.3310651782769932 a=zee,b=hat,i=9538,x=0.6252849020303484,y=0.6594304208970674 a=pan,b=hat,i=9540,x=0.9246863327027597,y=0.8632603228617942 a=hat,b=eks,i=9541,x=0.4067481238813502,y=0.23429602829888707 a=wye,b=pan,i=9542,x=0.021183317661808254,y=0.17173704813590862 a=zee,b=hat,i=9544,x=0.8363252040733755,y=0.9066361832913213 a=hat,b=wye,i=9545,x=0.8237931228490942,y=0.6154262745221335 a=eks,b=pan,i=9546,x=0.40720117438767467,y=0.23973575256875324 a=eks,b=eks,i=9548,x=0.18870561616460124,y=0.39344511734853893 a=hat,b=pan,i=9549,x=0.810156100508244,y=0.8042316538504537 a=eks,b=pan,i=9550,x=0.15708603238162966,y=0.1775120949821959 a=wye,b=hat,i=9552,x=0.7096131782065784,y=0.9809388281353744 a=wye,b=zee,i=9553,x=0.7419668715219193,y=0.8915237603968896 a=hat,b=zee,i=9555,x=0.24555292038029897,y=0.48675495523019463 a=hat,b=hat,i=9557,x=0.0708280418080367,y=0.028042679168150064 a=hat,b=eks,i=9560,x=0.4502257867908256,y=0.24215826461552248 a=hat,b=pan,i=9561,x=0.3883496618282979,y=0.22856613973468343 a=eks,b=wye,i=9565,x=0.9044412102611812,y=0.9981501201118028 a=hat,b=pan,i=9567,x=0.3290021077530395,y=0.39186940599147513 a=hat,b=hat,i=9568,x=0.5173577930271901,y=0.5140354310886103 a=zee,b=pan,i=9570,x=0.6962209074556881,y=0.9192719817135738 a=eks,b=zee,i=9575,x=0.43349880702663446,y=0.2019764764745724 a=eks,b=wye,i=9576,x=0.40205714986858077,y=0.4741982385845239 a=zee,b=pan,i=9580,x=0.7965009504831406,y=0.7113454506506395 a=zee,b=hat,i=9581,x=0.2752580210770491,y=0.38383648901881584 a=zee,b=zee,i=9582,x=0.05859657717284972,y=0.4628784062589941 a=eks,b=wye,i=9583,x=0.8996740267247002,y=0.5650994189598781 a=pan,b=eks,i=9584,x=0.02695408257021037,y=0.29013109754146693 a=zee,b=pan,i=9588,x=0.6700466485802432,y=0.8589272032654192 a=eks,b=zee,i=9589,x=0.9276643978084914,y=0.5258608330900789 a=zee,b=wye,i=9590,x=0.8441314279623635,y=0.9332236415562302 a=pan,b=zee,i=9594,x=0.23590110682049703,y=0.4376160303971274 a=eks,b=eks,i=9595,x=0.28340752983264006,y=0.11403963974075082 a=wye,b=wye,i=9598,x=0.5312315260758368,y=0.8829573415823095 a=zee,b=zee,i=9599,x=0.5367647772694465,y=0.8214571633873584 a=wye,b=hat,i=9601,x=0.07895223840580223,y=0.194977597106609 a=zee,b=eks,i=9605,x=0.20698996963521232,y=0.1727878106962335 a=hat,b=wye,i=9606,x=0.8834303299307495,y=0.5688694060075045 a=wye,b=eks,i=9609,x=0.6154267547093157,y=0.6251702670753683 a=wye,b=wye,i=9610,x=0.6498025682619308,y=0.7373575543454602 a=wye,b=wye,i=9613,x=0.22534868678381625,y=0.2948136458395363 a=wye,b=pan,i=9615,x=0.9704362849821679,y=0.7056997811176895 a=pan,b=wye,i=9624,x=0.7133865698466841,y=0.929260666330654 a=hat,b=zee,i=9626,x=0.6958926586419276,y=0.9430927470576268 a=eks,b=pan,i=9627,x=0.835956453698831,y=0.9007142296516358 a=eks,b=eks,i=9628,x=0.6999306667567604,y=0.780471447448193 a=pan,b=wye,i=9629,x=0.09405147784147772,y=0.11479025012357491 a=pan,b=pan,i=9630,x=0.5521126309556411,y=0.9964281092981838 a=pan,b=wye,i=9631,x=0.05531336390926278,y=0.03713539762104867 a=pan,b=hat,i=9633,x=0.7402115896026022,y=0.8286389697202792 a=pan,b=wye,i=9634,x=0.24820023272983005,y=0.23862519520811787 a=pan,b=wye,i=9637,x=0.8663800328522322,y=0.9391569730896534 a=pan,b=hat,i=9638,x=0.833781456495762,y=0.7668042837631657 a=hat,b=hat,i=9640,x=0.463917278383292,y=0.3511187165916906 a=eks,b=wye,i=9641,x=0.529202227506829,y=0.8125205279022973 a=pan,b=hat,i=9642,x=0.9841563799754587,y=0.7384543484249447 a=zee,b=hat,i=9652,x=0.929634631262683,y=0.6531235392615523 a=wye,b=eks,i=9654,x=0.2797016068787569,y=0.2814263099253008 a=pan,b=zee,i=9655,x=0.4057734719060324,y=0.15139105154457277 a=zee,b=wye,i=9657,x=0.3194817450421683,y=0.16543264401690605 a=pan,b=zee,i=9658,x=0.5277143419555844,y=0.564254772210993 a=zee,b=pan,i=9660,x=0.7009420239615597,y=0.7800651878215885 a=eks,b=hat,i=9662,x=0.39474659738679696,y=0.43059711110253074 a=eks,b=wye,i=9663,x=0.4372348974243785,y=0.10476776917399111 a=pan,b=zee,i=9667,x=0.4770802050437122,y=0.3612321845191586 a=pan,b=pan,i=9669,x=0.1622773559553956,y=0.2408391953166471 a=zee,b=hat,i=9670,x=0.8623108841707915,y=0.5103999923687886 a=pan,b=eks,i=9671,x=0.6246995141336152,y=0.9570445916327326 a=eks,b=eks,i=9676,x=0.3552193074991099,y=0.48796093863435663 a=pan,b=eks,i=9678,x=0.808264671158733,y=0.7958171364354866 a=eks,b=zee,i=9679,x=0.7801771579924318,y=0.8039168775444497 a=zee,b=hat,i=9680,x=0.8361585788416193,y=0.5904904054602013 a=zee,b=zee,i=9682,x=0.790057108611216,y=0.6026603017260809 a=hat,b=zee,i=9684,x=0.2251288541796853,y=0.0914353575236524 a=hat,b=zee,i=9685,x=0.9783350755125275,y=0.6710234655696609 a=eks,b=wye,i=9686,x=0.2325134660144058,y=0.44098000477056654 a=eks,b=hat,i=9687,x=0.11435792053370386,y=0.3592405692612377 a=eks,b=pan,i=9688,x=0.013751121997101046,y=0.21071503600234553 a=eks,b=eks,i=9689,x=0.1983455661823349,y=0.3353712062497688 a=pan,b=zee,i=9690,x=0.8642706624839454,y=0.5020203992558137 a=pan,b=zee,i=9692,x=0.518772161497821,y=0.5305276254149733 a=hat,b=pan,i=9694,x=0.11556338152672874,y=0.33174635478223324 a=zee,b=hat,i=9697,x=0.609947885859063,y=0.5639255760997719 a=pan,b=eks,i=9699,x=0.5797850274201329,y=0.8706915943068293 a=eks,b=eks,i=9711,x=0.6600637787756933,y=0.8973761456806139 a=eks,b=pan,i=9712,x=0.6042851641458743,y=0.5283912780602698 a=pan,b=pan,i=9713,x=0.8335225275262462,y=0.6504888680594751 a=eks,b=eks,i=9715,x=0.6688071850195556,y=0.8479172328203074 a=zee,b=eks,i=9717,x=0.15919097637828838,y=0.1961372512286007 a=hat,b=zee,i=9719,x=0.43422195883532855,y=0.21527795148734652 a=hat,b=wye,i=9720,x=0.18548878820596515,y=0.0823708416566078 a=eks,b=hat,i=9721,x=0.3055689756821137,y=0.09846251941046569 a=pan,b=zee,i=9724,x=0.5536779382214667,y=0.5953194186331342 a=zee,b=hat,i=9725,x=0.07153658715465838,y=0.3044986057514285 a=zee,b=eks,i=9726,x=0.7429014874999341,y=0.769520753307292 a=zee,b=zee,i=9727,x=0.9994904324789629,y=0.9539638011649831 a=zee,b=wye,i=9729,x=0.585248425583051,y=0.8575390870552795 a=wye,b=zee,i=9730,x=0.21280831790997046,y=0.215168894307449 a=pan,b=pan,i=9733,x=0.4805900786042281,y=0.16269527652434412 a=eks,b=hat,i=9735,x=0.9365415028222407,y=0.7049316644937267 a=wye,b=hat,i=9736,x=0.8357032803599334,y=0.5980478941599903 a=hat,b=hat,i=9740,x=0.6123513158512692,y=0.6254032566567909 a=wye,b=hat,i=9741,x=0.3852066212224572,y=0.18704182599635633 a=hat,b=pan,i=9742,x=0.3298562598570899,y=0.07896336383457148 a=wye,b=pan,i=9744,x=0.22511319050031164,y=0.027172244080271968 a=hat,b=zee,i=9747,x=0.7487247858158664,y=0.7159053727726352 a=pan,b=zee,i=9749,x=0.34522090703048847,y=0.4157608834458977 a=pan,b=pan,i=9752,x=0.49208279855492576,y=0.20454810028776949 a=hat,b=eks,i=9754,x=0.5026259494302875,y=0.8456607478858248 a=eks,b=zee,i=9755,x=0.5983063482292889,y=0.5332133759436987 a=hat,b=eks,i=9757,x=0.008475751466850423,y=0.28105237534152183 a=pan,b=zee,i=9758,x=0.17107174260903157,y=0.37907028999046954 a=hat,b=eks,i=9763,x=0.5172215091010056,y=0.5656123978535788 a=pan,b=eks,i=9768,x=0.20367798282554506,y=0.2900189560591435 a=hat,b=pan,i=9769,x=0.25924528216321086,y=0.09380722776595263 a=zee,b=wye,i=9772,x=0.5622225319493308,y=0.8404440554821954 a=wye,b=eks,i=9773,x=0.13486296020405042,y=0.1370545330575903 a=pan,b=pan,i=9776,x=0.5528717365202791,y=0.6963979512688395 a=zee,b=zee,i=9783,x=0.9571941589309878,y=0.7438875241555649 a=wye,b=eks,i=9786,x=0.36572120295268673,y=0.4315097648133279 a=pan,b=wye,i=9789,x=0.7500082437438368,y=0.6736777772258289 a=hat,b=zee,i=9790,x=0.32608913911284954,y=0.06744557277974006 a=eks,b=hat,i=9791,x=0.6359822783546621,y=0.6518259855994504 a=zee,b=wye,i=9792,x=0.4220728880621055,y=0.17140084746735773 a=wye,b=eks,i=9793,x=0.11689471664414974,y=0.1874183258828398 a=wye,b=pan,i=9794,x=0.4771768380141904,y=0.47458700283464794 a=hat,b=eks,i=9797,x=0.4801061637157764,y=0.27686764370925665 a=pan,b=wye,i=9799,x=0.9939181050884636,y=0.9933949713028724 a=eks,b=zee,i=9802,x=0.03433864233340278,y=0.08512282774742341 a=hat,b=hat,i=9806,x=0.7581986258233882,y=0.6723938004232705 a=hat,b=zee,i=9807,x=0.734026221575298,y=0.5060212582772865 a=zee,b=zee,i=9808,x=0.8976695035586633,y=0.8107371161879025 a=zee,b=eks,i=9809,x=0.9007397692300039,y=0.744200950461551 a=zee,b=wye,i=9810,x=0.33878497822294384,y=0.19641652801433074 a=wye,b=eks,i=9811,x=0.3684889443586322,y=0.03845017409345586 a=zee,b=pan,i=9813,x=0.8206715556120792,y=0.8639781360005004 a=hat,b=wye,i=9814,x=0.34212469593392425,y=0.20687141477181548 a=hat,b=pan,i=9815,x=0.17753782684157615,y=0.0015438604368104292 a=pan,b=hat,i=9816,x=0.24876592451844848,y=0.4470518528813471 a=wye,b=wye,i=9817,x=0.7049827500065716,y=0.70700844125317 a=hat,b=zee,i=9819,x=0.19261418898624927,y=0.050366139741013005 a=hat,b=pan,i=9820,x=0.5447052480269977,y=0.8699888671698426 a=eks,b=wye,i=9821,x=0.5189946092707575,y=0.6854994867317263 a=eks,b=zee,i=9822,x=0.7728584654655655,y=0.8255138151084206 a=wye,b=hat,i=9823,x=0.7885587074785081,y=0.8643021021880486 a=wye,b=hat,i=9827,x=0.2296202003399993,y=0.10085387835757498 a=pan,b=pan,i=9829,x=0.1561292001719159,y=0.16006739551266214 a=pan,b=hat,i=9831,x=0.07903067560527932,y=0.06301267712877379 a=hat,b=hat,i=9832,x=0.6422615702526209,y=0.8249323364395087 a=zee,b=hat,i=9833,x=0.10035889696290079,y=0.003028321603898987 a=hat,b=zee,i=9834,x=0.2640449383149195,y=0.37076593348410314 a=eks,b=wye,i=9835,x=0.5874685326990423,y=0.9287556289542644 a=wye,b=pan,i=9836,x=0.8763125291386116,y=0.5144780339183038 a=zee,b=eks,i=9837,x=0.65481575495434,y=0.7500209738973791 a=eks,b=pan,i=9838,x=0.6496315038661542,y=0.6072257440552286 a=eks,b=hat,i=9841,x=0.09722173469836548,y=0.36827480828558046 a=eks,b=eks,i=9847,x=0.36408179966880305,y=0.005301040380198518 a=zee,b=hat,i=9848,x=0.7494017826915185,y=0.5716008160658336 a=pan,b=pan,i=9851,x=0.001361386759249128,y=0.25792849048845146 a=wye,b=pan,i=9855,x=0.6182578764501776,y=0.7655458252282237 a=pan,b=hat,i=9856,x=0.8102716531871033,y=0.8313089740346422 a=zee,b=pan,i=9857,x=0.466306200678794,y=0.10723178210789208 a=pan,b=pan,i=9860,x=0.5805216264198891,y=0.7328584964292528 a=pan,b=eks,i=9862,x=0.5507783340308107,y=0.8117197523869161 a=hat,b=hat,i=9863,x=0.29207020272823003,y=0.3025947324662317 a=eks,b=wye,i=9864,x=0.11439725902216524,y=0.07940989075873717 a=eks,b=hat,i=9866,x=0.4975899292735726,y=0.004921317195285879 a=zee,b=eks,i=9867,x=0.02662315353765099,y=0.34265021760387904 a=pan,b=pan,i=9868,x=0.4854194107628803,y=0.3198466348114496 a=hat,b=zee,i=9869,x=0.9595189622375838,y=0.501564353037085 a=zee,b=hat,i=9871,x=0.6250842276723021,y=0.6957696470514947 a=hat,b=zee,i=9875,x=0.748712308729834,y=0.7138449723779594 a=zee,b=wye,i=9876,x=0.8136200511878549,y=0.8072663619726874 a=eks,b=zee,i=9877,x=0.4863731414322163,y=0.1035362785381897 a=zee,b=wye,i=9879,x=0.20901422499230626,y=0.4434307845301825 a=wye,b=eks,i=9880,x=0.7843765179845881,y=0.9652357480134778 a=zee,b=wye,i=9881,x=0.7862677717692486,y=0.5179978676865895 a=eks,b=zee,i=9886,x=0.6612732451934941,y=0.8821040941341458 a=zee,b=wye,i=9894,x=0.6202100179528263,y=0.9712368683190139 a=pan,b=hat,i=9895,x=0.8641234318244241,y=0.893546531152826 a=eks,b=hat,i=9896,x=0.10089977663900951,y=0.40511056317517313 a=pan,b=zee,i=9902,x=0.9054776364609202,y=0.6259317176046434 a=pan,b=zee,i=9904,x=0.5481438224523807,y=0.7183018840232132 a=eks,b=pan,i=9906,x=0.19123694955232085,y=0.1361773881166165 a=pan,b=eks,i=9911,x=0.7646508656008143,y=0.9446343254356182 a=zee,b=wye,i=9912,x=0.4701991772804557,y=0.33405458598495386 a=pan,b=eks,i=9913,x=0.8147835691088603,y=0.6617843834409757 a=pan,b=zee,i=9914,x=0.9240645650332355,y=0.8621654329742796 a=wye,b=pan,i=9916,x=0.3042515765931557,y=0.37717959119403555 a=pan,b=zee,i=9918,x=0.062017678365430595,y=0.11198470904331581 a=wye,b=wye,i=9921,x=0.6906719134435684,y=0.8555178209462388 a=hat,b=wye,i=9922,x=0.9728689411167353,y=0.8157055538148639 a=hat,b=eks,i=9926,x=0.1541309399763774,y=0.3791445762682304 a=wye,b=pan,i=9927,x=0.8783682319990223,y=0.6933957357140185 a=hat,b=hat,i=9931,x=0.22344053593327007,y=0.3136460886229182 a=hat,b=hat,i=9934,x=0.20145807804290206,y=0.41891252140867674 a=eks,b=hat,i=9936,x=0.7556816893135765,y=0.7737786856558144 a=hat,b=wye,i=9939,x=0.208097253807903,y=0.11669571201990991 a=hat,b=wye,i=9940,x=0.8460880203022336,y=0.8184128241834582 a=zee,b=wye,i=9943,x=0.4913245348903704,y=0.25864014284309744 a=zee,b=zee,i=9946,x=0.13202631656529729,y=0.021604794833400942 a=pan,b=hat,i=9947,x=0.8783008100979538,y=0.6172168477305974 a=pan,b=eks,i=9948,x=0.6047433842453397,y=0.53470873199638 a=pan,b=pan,i=9949,x=0.12278928201439199,y=0.3424112106292362 a=hat,b=eks,i=9951,x=0.23150439446451176,y=0.362011464774759 a=pan,b=eks,i=9953,x=0.9690028290247679,y=0.5626274346583657 a=eks,b=pan,i=9954,x=0.703550423241368,y=0.8640890526817995 a=pan,b=wye,i=9959,x=0.5523199497193726,y=0.844808439474632 a=eks,b=pan,i=9961,x=0.0018643836079239584,y=0.22214207434571398 a=eks,b=hat,i=9965,x=0.45140832054850244,y=0.4872441473665683 a=hat,b=zee,i=9966,x=0.09915562191171134,y=0.19911839331011605 a=eks,b=hat,i=9971,x=0.16013813822306744,y=0.18970582735969377 a=hat,b=wye,i=9972,x=0.01092212097676093,y=0.19287438329005957 a=zee,b=eks,i=9975,x=0.14164773949664755,y=0.16897907378815158 a=eks,b=zee,i=9977,x=0.4549080098494652,y=0.2027740955809184 a=pan,b=hat,i=9978,x=0.18068678390966952,y=0.24718291910572177 a=eks,b=pan,i=9981,x=0.2544586487901952,y=0.4578886296197162 a=wye,b=eks,i=9982,x=0.34998222187670314,y=0.3061867938018288 a=wye,b=hat,i=9983,x=0.4640332038264391,y=0.019243858556094673 a=pan,b=hat,i=9984,x=0.48914378417931326,y=0.36728976081695264 a=hat,b=zee,i=9985,x=0.5155567078470872,y=0.6010598365861822 a=hat,b=hat,i=9987,x=0.429284826906265,y=0.1787642439603777 a=wye,b=eks,i=9989,x=0.8561772298898314,y=0.6874185671784931 a=eks,b=pan,i=9990,x=0.06739304569008775,y=0.2341964277411741 a=hat,b=wye,i=9991,x=0.3633322891461138,y=0.12892395206278184 a=zee,b=wye,i=9996,x=0.72761807629368,y=0.6860394313092489 a=eks,b=pan,i=9998,x=0.5554835956450555,y=0.7053505857791378 a=zee,b=pan,i=10000,x=0.02349941792343435,y=0.19861196418373683 miller-5.6.2/doc/data/miss-date-1.sh000066400000000000000000000002251354153536500170570ustar00rootroot00000000000000mlr --from data/miss-date.csv --icsv \ cat -n \ then put '$datestamp = strptime($date, "%Y-%m-%d")' \ then step -a delta -f datestamp \ | head miller-5.6.2/doc/data/miss-date-2.sh000066400000000000000000000003031354153536500170550ustar00rootroot00000000000000mlr --from data/miss-date.csv --icsv \ cat -n \ then put '$datestamp = strptime($date, "%Y-%m-%d")' \ then step -a delta -f datestamp \ then filter '$datestamp_delta != 86400 && $n != 1' miller-5.6.2/doc/data/miss-date.csv000066400000000000000000000570331354153536500171130ustar00rootroot00000000000000date,qoh 2012-03-05,10055 2012-03-06,10486 2012-03-07,10430 2012-03-08,10674 2012-03-09,10880 2012-03-10,10718 2012-03-11,10795 2012-03-12,11043 2012-03-13,11177 2012-03-14,11498 2012-03-15,11664 2012-03-16,11524 2012-03-17,11703 2012-03-18,11803 2012-03-19,11787 2012-03-20,12164 2012-03-21,12063 2012-03-22,12180 2012-03-23,12304 2012-03-24,12370 2012-03-25,12563 2012-03-26,13020 2012-03-27,13329 2012-03-28,13368 2012-03-29,13175 2012-03-30,13516 2012-03-31,13937 2012-04-01,14135 2012-04-02,14114 2012-04-03,14600 2012-04-04,14694 2012-04-05,15146 2012-04-06,15123 2012-04-07,15407 2012-04-08,15360 2012-04-09,15529 2012-04-10,15452 2012-04-11,15478 2012-04-12,15420 2012-04-13,15553 2012-04-14,15954 2012-04-15,16098 2012-04-16,15995 2012-04-17,16020 2012-04-18,16274 2012-04-19,16408 2012-04-20,16876 2012-04-21,16761 2012-04-22,16998 2012-04-23,17035 2012-04-24,16902 2012-04-25,17139 2012-04-26,17260 2012-04-27,17637 2012-04-28,17705 2012-04-29,17679 2012-04-30,18174 2012-05-01,18277 2012-05-02,18542 2012-05-03,18595 2012-05-04,19073 2012-05-05,19109 2012-05-06,19566 2012-05-07,19488 2012-05-08,19716 2012-05-09,19941 2012-05-10,20412 2012-05-11,20319 2012-05-12,20529 2012-05-13,20917 2012-05-14,20790 2012-05-15,20667 2012-05-16,20557 2012-05-17,20360 2012-05-18,20816 2012-05-19,21238 2012-05-20,21202 2012-05-21,21357 2012-05-22,21391 2012-05-23,21267 2012-05-24,21761 2012-05-25,21707 2012-05-26,21634 2012-05-27,21781 2012-05-28,21668 2012-05-29,21772 2012-05-30,21917 2012-05-31,21918 2012-06-01,21824 2012-06-02,21830 2012-06-03,21861 2012-06-04,22183 2012-06-05,22097 2012-06-06,22133 2012-06-07,21984 2012-06-08,21985 2012-06-09,22266 2012-06-10,22576 2012-06-11,22408 2012-06-12,22448 2012-06-13,22281 2012-06-14,22212 2012-06-15,22678 2012-06-16,23026 2012-06-17,23008 2012-06-18,23303 2012-06-19,23653 2012-06-20,23836 2012-06-21,24070 2012-06-22,24179 2012-06-23,24071 2012-06-24,24010 2012-06-25,24232 2012-06-26,24037 2012-06-27,23869 2012-06-28,23796 2012-06-29,24199 2012-06-30,24379 2012-07-01,24230 2012-07-02,24162 2012-07-03,24271 2012-07-04,24629 2012-07-05,25027 2012-07-06,25287 2012-07-07,25370 2012-07-08,25397 2012-07-09,25538 2012-07-10,25844 2012-07-11,25660 2012-07-12,25744 2012-07-13,26064 2012-07-14,26132 2012-07-15,26264 2012-07-16,26196 2012-07-17,26610 2012-07-18,26833 2012-07-19,27102 2012-07-20,27350 2012-07-21,27661 2012-07-22,27740 2012-07-23,27689 2012-07-24,27818 2012-07-25,28249 2012-07-26,28080 2012-07-27,28500 2012-07-28,28450 2012-07-29,28885 2012-07-30,29340 2012-07-31,29216 2012-08-01,29131 2012-08-02,29234 2012-08-03,29567 2012-08-04,29579 2012-08-05,29962 2012-08-06,30223 2012-08-07,30501 2012-08-08,30388 2012-08-09,30673 2012-08-10,30578 2012-08-11,30484 2012-08-12,30367 2012-08-13,30689 2012-08-14,30558 2012-08-15,30581 2012-08-16,30518 2012-08-17,30910 2012-08-18,31016 2012-08-19,31105 2012-08-20,31287 2012-08-21,31233 2012-08-22,31082 2012-08-23,31572 2012-08-24,31530 2012-08-25,31726 2012-08-26,32083 2012-08-27,32358 2012-08-28,32659 2012-08-29,32931 2012-08-30,33119 2012-08-31,33298 2012-09-01,33180 2012-09-02,33564 2012-09-03,34027 2012-09-04,34145 2012-09-05,34271 2012-09-06,34461 2012-09-07,34873 2012-09-08,35033 2012-09-09,35473 2012-09-10,35857 2012-09-11,36116 2012-09-12,36263 2012-09-13,36567 2012-09-14,36657 2012-09-15,36948 2012-09-16,37094 2012-09-17,37284 2012-09-18,37420 2012-09-19,37878 2012-09-20,37882 2012-09-21,38366 2012-09-22,38206 2012-09-23,38152 2012-09-24,38016 2012-09-25,38265 2012-09-26,38156 2012-09-27,38443 2012-09-28,38559 2012-09-29,38867 2012-09-30,38856 2012-10-01,39210 2012-10-02,39492 2012-10-03,39837 2012-10-04,40151 2012-10-05,40271 2012-10-06,40275 2012-10-07,40556 2012-10-08,40382 2012-10-09,40841 2012-10-10,41146 2012-10-11,41042 2012-10-12,41263 2012-10-13,41452 2012-10-14,41310 2012-10-15,41198 2012-10-16,41585 2012-10-17,41856 2012-10-18,41778 2012-10-19,42103 2012-10-20,42193 2012-10-21,42673 2012-10-22,42832 2012-10-23,43056 2012-10-24,42884 2012-10-25,43040 2012-10-26,43444 2012-10-27,43541 2012-10-28,43759 2012-10-29,43640 2012-10-30,43737 2012-10-31,43961 2012-11-01,44036 2012-11-02,44118 2012-11-03,44570 2012-11-04,44739 2012-11-05,44804 2012-11-06,45029 2012-11-07,45018 2012-11-08,45278 2012-11-09,45401 2012-11-10,45429 2012-11-11,45802 2012-11-12,45802 2012-11-13,45727 2012-11-14,45908 2012-11-15,46165 2012-11-16,46398 2012-11-17,46864 2012-11-18,46824 2012-11-19,46839 2012-11-20,46948 2012-11-21,47381 2012-11-22,47694 2012-11-23,48125 2012-11-24,48433 2012-11-25,48869 2012-11-26,48678 2012-11-27,48905 2012-11-28,49377 2012-11-29,49490 2012-11-30,49350 2012-12-01,49818 2012-12-02,50259 2012-12-03,50159 2012-12-04,50467 2012-12-05,50669 2012-12-06,50901 2012-12-07,51173 2012-12-08,51453 2012-12-09,51638 2012-12-10,51578 2012-12-11,51549 2012-12-12,51397 2012-12-13,51864 2012-12-14,52139 2012-12-15,52071 2012-12-16,52310 2012-12-17,52542 2012-12-18,52416 2012-12-19,52591 2012-12-20,52413 2012-12-21,52709 2012-12-22,53126 2012-12-23,53386 2012-12-24,53858 2012-12-25,54261 2012-12-26,54274 2012-12-27,54376 2012-12-28,54182 2012-12-29,54066 2012-12-30,53933 2012-12-31,53923 2013-01-01,53810 2013-01-02,53913 2013-01-03,54227 2013-01-04,54293 2013-01-05,54553 2013-01-06,54721 2013-01-07,55010 2013-01-08,55275 2013-01-09,55080 2013-01-10,55509 2013-01-11,55405 2013-01-12,55676 2013-01-13,55855 2013-01-14,56135 2013-01-15,56444 2013-01-16,56639 2013-01-17,56532 2013-01-18,56575 2013-01-19,56401 2013-01-20,56727 2013-01-21,56913 2013-01-22,56830 2013-01-23,57286 2013-01-24,57340 2013-01-25,57370 2013-01-26,57499 2013-01-27,57731 2013-01-28,58152 2013-01-29,58099 2013-01-30,57991 2013-01-31,57949 2013-02-01,58176 2013-02-02,58023 2013-02-03,58080 2013-02-04,58510 2013-02-05,58885 2013-02-06,59080 2013-02-07,59075 2013-02-08,59070 2013-02-09,59504 2013-02-10,59833 2013-02-11,60001 2013-02-12,60073 2013-02-13,60526 2013-02-14,60461 2013-02-15,60539 2013-02-16,60381 2013-02-17,60259 2013-02-18,60481 2013-02-19,60415 2013-02-20,60850 2013-02-21,60915 2013-02-22,60969 2013-02-23,61115 2013-02-24,61498 2013-02-25,61524 2013-02-26,61752 2013-02-27,62111 2013-02-28,62397 2013-03-01,62619 2013-03-02,62997 2013-03-03,62888 2013-03-04,62854 2013-03-05,62748 2013-03-06,62556 2013-03-07,62936 2013-03-08,62990 2013-03-09,62883 2013-03-10,62692 2013-03-11,62867 2013-03-12,63244 2013-03-13,63359 2013-03-14,63719 2013-03-15,63754 2013-03-16,63762 2013-03-17,63570 2013-03-18,63394 2013-03-19,63380 2013-03-20,63384 2013-03-21,63849 2013-03-22,64244 2013-03-23,64710 2013-03-24,64874 2013-03-25,65316 2013-03-26,65499 2013-03-27,65592 2013-03-28,65687 2013-03-29,65492 2013-03-30,65512 2013-03-31,65803 2013-04-01,65996 2013-04-02,66095 2013-04-03,66134 2013-04-04,66039 2013-04-05,66255 2013-04-06,66201 2013-04-07,66526 2013-04-08,66817 2013-04-09,67094 2013-04-10,67308 2013-04-11,67570 2013-04-12,67654 2013-04-13,67916 2013-04-14,68414 2013-04-15,68620 2013-04-16,68440 2013-04-17,68861 2013-04-18,68681 2013-04-19,68747 2013-04-20,68913 2013-04-21,69174 2013-04-22,69263 2013-04-23,69310 2013-04-24,69729 2013-04-25,69723 2013-04-26,69724 2013-04-27,69803 2013-04-28,69999 2013-04-29,70109 2013-04-30,69949 2013-05-01,70383 2013-05-02,70756 2013-05-03,71218 2013-05-04,71530 2013-05-05,71679 2013-05-06,71558 2013-05-07,71359 2013-05-08,71844 2013-05-09,71931 2013-05-10,71837 2013-05-11,71664 2013-05-12,71941 2013-05-13,72000 2013-05-14,71964 2013-05-15,72254 2013-05-16,72713 2013-05-17,73159 2013-05-18,73431 2013-05-19,73531 2013-05-20,73994 2013-05-21,73922 2013-05-22,73927 2013-05-23,74268 2013-05-24,74306 2013-05-25,74515 2013-05-26,74575 2013-05-27,74495 2013-05-28,74994 2013-05-29,74961 2013-05-30,75376 2013-05-31,75510 2013-06-01,75845 2013-06-02,75646 2013-06-03,75984 2013-06-04,76390 2013-06-05,76657 2013-06-06,76928 2013-06-07,76814 2013-06-08,76915 2013-06-09,77156 2013-06-10,77286 2013-06-11,77111 2013-06-12,77446 2013-06-13,77532 2013-06-14,77556 2013-06-15,77978 2013-06-16,78388 2013-06-17,78445 2013-06-18,78672 2013-06-19,78532 2013-06-20,78958 2013-06-21,79430 2013-06-22,79495 2013-06-23,79946 2013-06-24,80285 2013-06-25,80618 2013-06-26,81044 2013-06-27,80855 2013-06-28,81299 2013-06-29,81353 2013-06-30,81710 2013-07-01,81688 2013-07-02,81854 2013-07-03,82250 2013-07-04,82383 2013-07-05,82476 2013-07-06,82929 2013-07-07,83098 2013-07-08,83201 2013-07-09,83307 2013-07-10,83174 2013-07-11,83614 2013-07-12,83700 2013-07-13,84146 2013-07-14,84073 2013-07-15,84544 2013-07-16,84831 2013-07-17,85220 2013-07-18,85664 2013-07-19,86010 2013-07-20,85995 2013-07-21,86088 2013-07-22,86206 2013-07-23,86704 2013-07-24,86533 2013-07-25,86863 2013-07-26,87285 2013-07-27,87526 2013-07-28,87507 2013-07-29,87553 2013-07-30,87873 2013-07-31,87833 2013-08-01,87947 2013-08-02,88425 2013-08-03,88613 2013-08-04,89083 2013-08-05,89331 2013-08-06,89718 2013-08-07,89929 2013-08-08,89896 2013-08-09,89724 2013-08-10,90218 2013-08-11,90687 2013-08-12,91073 2013-08-13,91199 2013-08-14,91190 2013-08-15,91290 2013-08-16,91114 2013-08-17,91321 2013-08-18,91637 2013-08-19,91564 2013-08-20,91670 2013-08-21,91766 2013-08-22,91939 2013-08-23,91786 2013-08-24,91925 2013-08-25,92100 2013-08-26,92566 2013-08-27,92624 2013-08-28,93084 2013-08-29,93277 2013-08-30,93305 2013-08-31,93298 2013-09-01,93360 2013-09-02,93175 2013-09-03,93039 2013-09-04,92892 2013-09-05,92700 2013-09-06,92700 2013-09-07,92608 2013-09-08,92790 2013-09-09,92711 2013-09-10,92654 2013-09-11,92749 2013-09-12,93083 2013-09-13,93070 2013-09-14,93291 2013-09-15,93228 2013-09-16,93533 2013-09-17,93541 2013-09-18,93561 2013-09-19,93464 2013-09-20,93895 2013-09-21,93885 2013-09-22,94249 2013-09-23,94313 2013-09-24,94368 2013-09-25,94388 2013-09-26,94779 2013-09-27,95191 2013-09-28,95198 2013-09-29,95322 2013-09-30,95396 2013-10-01,95535 2013-10-02,95413 2013-10-03,95714 2013-10-04,95753 2013-10-05,96013 2013-10-06,96484 2013-10-07,96925 2013-10-08,97050 2013-10-09,97392 2013-10-10,97205 2013-10-11,97576 2013-10-12,97625 2013-10-13,97591 2013-10-14,97755 2013-10-15,98118 2013-10-16,98611 2013-10-17,98558 2013-10-18,98835 2013-10-19,99333 2013-10-20,99675 2013-10-21,100080 2013-10-22,100128 2013-10-23,99946 2013-10-24,100229 2013-10-25,100182 2013-10-26,100283 2013-10-27,100232 2013-10-28,100447 2013-10-29,100924 2013-10-30,101233 2013-10-31,101612 2013-11-01,102005 2013-11-02,101987 2013-11-03,101901 2013-11-04,102172 2013-11-05,102288 2013-11-06,102298 2013-11-07,102230 2013-11-08,102508 2013-11-09,102649 2013-11-10,102989 2013-11-11,102863 2013-11-12,103099 2013-11-13,102993 2013-11-14,103372 2013-11-15,103490 2013-11-16,103567 2013-11-17,103669 2013-11-18,103737 2013-11-19,103594 2013-11-20,103749 2013-11-21,104137 2013-11-22,104471 2013-11-23,104668 2013-11-24,104946 2013-11-25,104763 2013-11-26,104951 2013-11-27,105215 2013-11-28,105698 2013-11-29,105681 2013-11-30,105791 2013-12-01,106159 2013-12-02,106338 2013-12-03,106580 2013-12-04,106716 2013-12-05,106678 2013-12-06,107045 2013-12-07,107532 2013-12-08,107669 2013-12-09,108122 2013-12-10,108591 2013-12-11,108923 2013-12-12,109274 2013-12-13,109253 2013-12-14,109658 2013-12-15,109884 2013-12-16,109783 2013-12-17,109720 2013-12-18,110184 2013-12-19,110639 2013-12-20,111059 2013-12-21,111414 2013-12-22,111697 2013-12-23,111961 2013-12-24,111782 2013-12-25,112053 2013-12-26,112066 2013-12-27,112443 2013-12-28,112808 2013-12-29,112931 2013-12-30,112987 2013-12-31,112836 2014-01-01,113236 2014-01-02,113432 2014-01-03,113404 2014-01-04,113626 2014-01-05,113496 2014-01-06,113378 2014-01-07,113488 2014-01-08,113640 2014-01-09,113458 2014-01-10,113398 2014-01-11,113868 2014-01-12,113849 2014-01-13,113857 2014-01-14,114291 2014-01-15,114713 2014-01-16,114766 2014-01-17,115164 2014-01-18,115053 2014-01-19,115484 2014-01-20,115387 2014-01-21,115434 2014-01-22,115581 2014-01-23,115942 2014-01-24,116423 2014-01-25,116669 2014-01-26,116970 2014-01-27,116993 2014-01-28,117482 2014-01-29,117667 2014-01-30,118038 2014-01-31,118215 2014-02-01,118267 2014-02-02,118670 2014-02-03,119014 2014-02-04,119335 2014-02-05,119407 2014-02-06,119450 2014-02-07,119749 2014-02-08,120235 2014-02-09,120551 2014-02-10,120538 2014-02-11,121022 2014-02-12,121020 2014-02-13,121296 2014-02-14,121718 2014-02-15,121697 2014-02-16,121564 2014-02-17,121818 2014-02-18,122041 2014-02-19,122389 2014-02-20,122669 2014-02-21,122584 2014-02-22,122569 2014-02-23,122428 2014-02-24,122482 2014-02-25,122612 2014-02-26,122499 2014-02-27,122691 2014-02-28,122837 2014-03-01,123104 2014-03-02,123456 2014-03-03,123441 2014-03-04,123735 2014-03-05,123698 2014-03-06,124103 2014-03-07,124227 2014-03-08,124668 2014-03-09,124868 2014-03-10,125159 2014-03-11,125442 2014-03-12,125476 2014-03-13,125675 2014-03-14,125963 2014-03-15,126101 2014-03-16,126112 2014-03-17,126089 2014-03-18,126542 2014-03-19,126454 2014-03-20,126463 2014-03-21,126732 2014-03-22,126897 2014-03-23,126707 2014-03-24,126666 2014-03-25,126756 2014-03-26,127008 2014-03-27,127421 2014-03-28,127327 2014-03-29,127650 2014-03-30,127984 2014-03-31,127873 2014-04-01,127876 2014-04-02,128090 2014-04-03,127976 2014-04-04,128218 2014-04-05,128534 2014-04-06,128633 2014-04-07,128557 2014-04-08,128745 2014-04-09,129025 2014-04-10,129176 2014-04-11,129560 2014-04-12,129435 2014-04-13,129868 2014-04-14,129797 2014-04-15,129919 2014-04-16,130181 2014-04-19,130140 2014-04-20,130271 2014-04-21,130368 2014-04-22,130368 2014-04-23,130849 2014-04-24,131026 2014-04-25,131317 2014-04-26,131274 2014-04-27,131696 2014-04-28,132033 2014-04-29,132035 2014-04-30,132408 2014-05-01,132495 2014-05-02,132897 2014-05-03,132872 2014-05-04,132918 2014-05-05,133074 2014-05-06,133082 2014-05-07,133084 2014-05-08,133223 2014-05-09,133673 2014-05-10,133751 2014-05-11,133836 2014-05-12,134071 2014-05-13,134243 2014-05-14,134454 2014-05-15,134949 2014-05-16,134883 2014-05-17,135105 2014-05-18,135027 2014-05-19,135383 2014-05-20,135742 2014-05-21,135551 2014-05-22,135876 2014-05-23,136110 2014-05-24,136107 2014-05-25,135994 2014-05-26,136371 2014-05-27,136676 2014-05-28,136647 2014-05-29,136773 2014-05-30,137082 2014-05-31,137209 2014-06-01,137248 2014-06-02,137589 2014-06-03,137662 2014-06-04,137926 2014-06-05,137988 2014-06-06,138187 2014-06-07,138517 2014-06-08,138519 2014-06-09,138750 2014-06-10,138929 2014-06-11,139190 2014-06-12,139460 2014-06-13,139361 2014-06-14,139179 2014-06-15,139375 2014-06-16,139435 2014-06-17,139852 2014-06-18,140055 2014-06-19,140347 2014-06-20,140183 2014-06-21,140257 2014-06-22,140195 2014-06-23,140474 2014-06-24,140884 2014-06-25,140794 2014-06-26,140916 2014-06-27,141349 2014-06-28,141554 2014-06-29,141961 2014-06-30,141769 2014-07-01,142084 2014-07-02,142049 2014-07-03,142262 2014-07-04,142523 2014-07-05,142929 2014-07-06,143196 2014-07-07,143150 2014-07-08,142977 2014-07-09,143320 2014-07-10,143432 2014-07-11,143648 2014-07-12,143824 2014-07-13,144293 2014-07-14,144333 2014-07-15,144720 2014-07-16,144625 2014-07-17,144753 2014-07-18,144787 2014-07-19,145022 2014-07-20,145049 2014-07-21,145493 2014-07-22,145897 2014-07-23,145838 2014-07-24,146305 2014-07-25,146669 2014-07-26,146705 2014-07-27,147077 2014-07-28,147432 2014-07-29,147442 2014-07-30,147845 2014-07-31,148183 2014-08-01,148224 2014-08-02,148631 2014-08-03,149074 2014-08-04,149328 2014-08-05,149536 2014-08-06,149987 2014-08-07,150385 2014-08-08,150584 2014-08-09,150962 2014-08-10,151175 2014-08-11,151115 2014-08-12,151022 2014-08-13,151025 2014-08-14,151118 2014-08-15,151585 2014-08-16,151389 2014-08-17,151889 2014-08-18,152067 2014-08-19,152292 2014-08-20,152305 2014-08-21,152320 2014-08-22,152493 2014-08-23,152551 2014-08-24,152397 2014-08-25,152360 2014-08-26,152832 2014-08-27,152886 2014-08-28,153112 2014-08-29,153585 2014-08-30,153869 2014-08-31,153754 2014-09-01,153769 2014-09-02,153816 2014-09-03,154118 2014-09-04,154309 2014-09-05,154724 2014-09-06,154871 2014-09-07,155142 2014-09-08,154954 2014-09-09,155435 2014-09-10,155806 2014-09-11,155660 2014-09-12,155976 2014-09-13,156166 2014-09-14,156312 2014-09-15,156377 2014-09-16,156473 2014-09-17,156930 2014-09-18,156770 2014-09-19,156736 2014-09-20,157036 2014-09-21,157037 2014-09-22,157204 2014-09-23,157626 2014-09-24,157799 2014-09-25,158135 2014-09-26,158098 2014-09-27,158072 2014-09-28,157900 2014-09-29,157826 2014-09-30,157715 2014-10-01,158165 2014-10-02,158084 2014-10-03,158025 2014-10-04,158000 2014-10-05,158165 2014-10-06,158207 2014-10-07,158599 2014-10-08,158497 2014-10-09,158759 2014-10-10,158773 2014-10-11,159158 2014-10-12,159448 2014-10-13,159806 2014-10-14,159722 2014-10-15,159629 2014-10-16,159616 2014-10-17,159627 2014-10-18,160073 2014-10-19,160039 2014-10-20,160181 2014-10-21,160507 2014-10-22,160515 2014-10-23,160805 2014-10-24,161068 2014-10-25,161561 2014-10-26,161508 2014-10-27,161804 2014-10-28,161934 2014-10-29,161738 2014-10-30,161639 2014-10-31,161853 2014-11-01,161732 2014-11-02,162040 2014-11-03,162383 2014-11-04,162627 2014-11-05,163117 2014-11-06,163211 2014-11-07,163249 2014-11-08,163368 2014-11-09,163412 2014-11-10,163588 2014-11-11,163844 2014-11-12,163956 2014-11-13,164113 2014-11-14,163920 2014-11-15,163831 2014-11-16,163734 2014-11-17,163684 2014-11-18,163805 2014-11-19,164272 2014-11-20,164243 2014-11-21,164739 2014-11-22,164691 2014-11-23,164676 2014-11-24,165005 2014-11-25,165438 2014-11-26,165653 2014-11-27,165546 2014-11-28,165416 2014-11-29,165699 2014-11-30,165511 2014-12-01,165523 2014-12-02,165941 2014-12-03,166320 2014-12-04,166157 2014-12-05,166066 2014-12-06,166352 2014-12-07,166487 2014-12-08,166746 2014-12-09,166966 2014-12-10,167458 2014-12-11,167485 2014-12-12,167985 2014-12-13,168400 2014-12-14,168654 2014-12-15,168575 2014-12-16,168530 2014-12-17,168370 2014-12-18,168415 2014-12-19,168243 2014-12-20,168054 2014-12-21,168335 2014-12-22,168346 2014-12-23,168599 2014-12-24,168842 2014-12-25,169111 2014-12-26,169077 2014-12-27,169528 2014-12-28,169684 2014-12-29,170020 2014-12-30,170221 2014-12-31,170561 2015-01-01,170989 2015-01-02,171404 2015-01-03,171643 2015-01-04,171744 2015-01-05,171925 2015-01-06,171751 2015-01-07,172099 2015-01-08,172316 2015-01-09,172379 2015-01-10,172484 2015-01-11,172457 2015-01-12,172884 2015-01-13,172841 2015-01-14,172860 2015-01-15,172851 2015-01-16,172960 2015-01-17,173098 2015-01-18,172998 2015-01-19,173158 2015-01-20,173109 2015-01-21,173375 2015-01-22,173720 2015-01-23,173583 2015-01-24,173717 2015-01-25,173954 2015-01-26,174060 2015-01-27,174037 2015-01-28,174039 2015-01-29,174046 2015-01-30,174227 2015-01-31,174301 2015-02-01,174575 2015-02-02,174761 2015-02-03,174780 2015-02-04,175199 2015-02-05,175296 2015-02-06,175205 2015-02-07,175532 2015-02-08,175468 2015-02-09,175795 2015-02-10,175859 2015-02-11,175712 2015-02-12,175838 2015-02-13,176007 2015-02-14,176203 2015-02-15,176143 2015-02-16,176581 2015-02-17,177008 2015-02-18,177105 2015-02-19,177407 2015-02-20,177513 2015-02-21,177759 2015-02-22,178004 2015-02-23,177822 2015-02-24,177778 2015-02-25,177795 2015-02-26,178002 2015-02-27,178185 2015-02-28,178543 2015-03-01,178674 2015-03-02,179152 2015-03-03,179122 2015-03-04,179073 2015-03-05,179323 2015-03-06,179537 2015-03-07,179563 2015-03-08,179828 2015-03-09,179944 2015-03-10,180122 2015-03-11,179962 2015-03-12,179873 2015-03-13,180073 2015-03-14,180306 2015-03-15,180528 2015-03-16,180361 2015-03-17,180741 2015-03-18,180906 2015-03-19,181146 2015-03-20,180970 2015-03-21,180973 2015-03-22,180889 2015-03-23,181192 2015-03-24,181144 2015-03-25,181006 2015-03-26,180995 2015-03-27,181043 2015-03-28,181112 2015-03-29,181306 2015-03-31,181625 2015-04-01,181494 2015-04-02,181718 2015-04-03,181835 2015-04-04,182104 2015-04-05,182528 2015-04-06,182667 2015-04-07,182984 2015-04-08,182844 2015-04-09,183292 2015-04-10,183456 2015-04-11,183708 2015-04-12,184039 2015-04-13,184062 2015-04-14,184497 2015-04-15,184858 2015-04-16,184884 2015-04-17,185020 2015-04-18,185376 2015-04-19,185752 2015-04-20,185894 2015-04-21,185930 2015-04-22,185908 2015-04-23,186006 2015-04-24,185844 2015-04-25,186330 2015-04-26,186663 2015-04-27,186952 2015-04-28,186990 2015-04-29,187191 2015-04-30,187648 2015-05-01,187660 2015-05-02,187567 2015-05-03,187875 2015-05-04,187966 2015-05-05,188424 2015-05-06,188243 2015-05-07,188198 2015-05-08,188104 2015-05-09,188409 2015-05-10,188890 2015-05-11,189275 2015-05-12,189216 2015-05-13,189520 2015-05-14,189612 2015-05-15,189416 2015-05-16,189361 2015-05-17,189195 2015-05-18,189316 2015-05-19,189294 2015-05-20,189451 2015-05-21,189487 2015-05-22,189770 2015-05-23,189729 2015-05-24,189967 2015-05-25,190051 2015-05-26,189894 2015-05-27,189903 2015-05-28,190109 2015-05-29,189921 2015-05-30,189866 2015-05-31,190237 2015-06-01,190501 2015-06-02,190948 2015-06-03,190847 2015-06-04,191271 2015-06-05,191287 2015-06-06,191526 2015-06-07,191472 2015-06-08,191771 2015-06-09,191691 2015-06-10,191775 2015-06-11,191814 2015-06-12,192062 2015-06-13,192246 2015-06-14,192180 2015-06-15,192021 2015-06-16,192509 2015-06-17,192936 2015-06-18,192893 2015-06-19,192833 2015-06-20,192826 2015-06-21,192725 2015-06-22,192787 2015-06-23,192926 2015-06-24,192902 2015-06-25,193226 2015-06-26,193685 2015-06-27,193917 2015-06-28,193861 2015-06-29,193997 2015-06-30,194001 2015-07-01,194429 2015-07-02,194584 2015-07-03,194984 2015-07-04,195437 2015-07-05,195784 2015-07-06,195785 2015-07-07,195926 2015-07-08,195733 2015-07-09,196150 2015-07-10,196128 2015-07-11,196506 2015-07-12,196824 2015-07-13,196749 2015-07-14,196767 2015-07-15,197058 2015-07-16,197557 2015-07-17,198016 2015-07-18,197846 2015-07-19,198314 2015-07-20,198760 2015-07-21,199148 2015-07-22,199247 2015-07-23,199377 2015-07-24,199199 2015-07-25,199488 2015-07-26,199667 2015-07-27,199613 2015-07-28,199426 2015-07-29,199329 2015-07-30,199288 2015-07-31,199283 2015-08-01,199360 2015-08-02,199629 2015-08-03,200005 2015-08-04,200503 2015-08-05,200371 2015-08-06,200617 2015-08-07,200604 2015-08-08,200454 2015-08-09,200916 2015-08-10,200890 2015-08-11,201049 2015-08-12,201078 2015-08-13,201554 2015-08-14,201498 2015-08-15,201828 2015-08-16,201994 2015-08-17,202123 2015-08-18,202594 2015-08-19,202895 2015-08-20,202843 2015-08-21,203087 2015-08-22,203259 2015-08-23,203483 2015-08-24,203336 2015-08-25,203201 2015-08-26,203127 2015-08-27,203215 2015-08-28,203645 2015-08-29,203857 2015-08-30,203891 2015-08-31,204148 2015-09-01,204370 2015-09-02,204624 2015-09-03,204904 2015-09-04,204916 2015-09-05,204997 2015-09-06,204996 2015-09-07,205496 2015-09-08,205746 2015-09-09,206131 2015-09-10,206318 2015-09-11,206201 2015-09-12,206403 2015-09-13,206670 2015-09-14,206898 2015-09-15,206777 2015-09-16,207075 2015-09-17,207382 2015-09-18,207497 2015-09-19,207871 2015-09-20,208128 2015-09-21,208581 2015-09-22,208571 2015-09-23,208387 2015-09-24,208718 2015-09-25,208534 2015-09-26,208825 2015-09-27,208997 2015-09-28,209327 2015-09-29,209713 2015-09-30,210165 2015-10-01,209998 2015-10-02,210056 2015-10-03,210091 2015-10-04,210506 2015-10-05,210545 2015-10-06,210450 2015-10-07,210889 2015-10-08,211101 2015-10-09,211473 2015-10-10,211868 2015-10-11,212363 2015-10-12,212416 2015-10-13,212506 2015-10-14,212742 2015-10-15,212953 2015-10-16,213116 2015-10-17,213032 2015-10-18,213231 2015-10-19,213703 2015-10-20,213679 2015-10-21,213753 2015-10-22,214055 2015-10-23,213969 2015-10-24,214026 2015-10-25,214301 2015-10-26,214467 2015-10-27,214324 2015-10-28,214821 2015-10-29,214746 2015-10-30,214977 2015-10-31,215351 2015-11-01,215529 2015-11-02,215511 2015-11-03,215312 2015-11-04,215372 2015-11-05,215259 2015-11-06,215504 2015-11-07,215788 2015-11-08,216261 2015-11-09,216495 2015-11-10,216730 2015-11-11,216993 2015-11-12,216811 2015-11-13,217199 2015-11-14,217233 2015-11-15,217105 2015-11-16,217446 2015-11-17,217763 2015-11-18,217900 2015-11-19,218058 2015-11-20,218420 2015-11-21,218588 2015-11-22,218643 2015-11-23,218553 2015-11-24,218384 2015-11-25,218254 2015-11-26,218119 2015-11-27,218418 2015-11-28,218421 2015-11-29,218319 2015-11-30,218228 2015-12-01,218152 2015-12-02,218001 2015-12-03,217981 2015-12-04,218364 2015-12-05,218198 2015-12-06,218009 2015-12-07,218234 2015-12-08,218126 miller-5.6.2/doc/data/multicountdown.dat000066400000000000000000000104061354153536500202660ustar00rootroot00000000000000upsec=0.002,color=green,count=1203 upsec=0.083,color=red,count=3817 upsec=0.188,color=red,count=3801 upsec=0.395,color=blue,count=2697 upsec=0.526,color=purple,count=953 upsec=0.671,color=blue,count=2684 upsec=0.899,color=purple,count=926 upsec=0.912,color=red,count=3798 upsec=1.093,color=blue,count=2662 upsec=1.327,color=purple,count=917 upsec=1.407,color=green,count=1187 upsec=1.416,color=red,count=3788 upsec=1.448,color=green,count=1177 upsec=1.587,color=red,count=3782 upsec=1.601,color=red,count=3755 upsec=1.703,color=purple,count=908 upsec=1.832,color=red,count=3717 upsec=2.064,color=blue,count=2659 upsec=2.2880000000000003,color=blue,count=2647 upsec=2.313,color=green,count=1161 upsec=2.346,color=green,count=1129 upsec=2.5580000000000003,color=red,count=3694 upsec=2.716,color=purple,count=883 upsec=2.834,color=blue,count=2646 upsec=2.967,color=green,count=1100 upsec=3.0740000000000003,color=purple,count=850 upsec=3.2820000000000005,color=blue,count=2607 upsec=3.2990000000000004,color=blue,count=2573 upsec=3.4510000000000005,color=blue,count=2563 upsec=3.4870000000000005,color=green,count=1089 upsec=3.7220000000000004,color=red,count=3672 upsec=3.7580000000000005,color=red,count=3648 upsec=3.9670000000000005,color=blue,count=2550 upsec=4.021000000000001,color=green,count=1054 upsec=4.211000000000001,color=red,count=3640 upsec=4.455000000000001,color=purple,count=836 upsec=4.515000000000001,color=red,count=3639 upsec=4.636000000000001,color=purple,count=801 upsec=4.818000000000001,color=red,count=3601 upsec=5.0390000000000015,color=purple,count=770 upsec=5.268000000000002,color=blue,count=2543 upsec=5.310000000000001,color=green,count=1039 upsec=5.319000000000002,color=blue,count=2537 upsec=5.413000000000002,color=red,count=3568 upsec=5.517000000000002,color=purple,count=755 upsec=5.750000000000002,color=green,count=1030 upsec=5.778000000000001,color=blue,count=2535 upsec=5.9380000000000015,color=green,count=1008 upsec=6.101000000000002,color=blue,count=2520 upsec=6.250000000000002,color=blue,count=2520 upsec=6.314000000000002,color=green,count=1005 upsec=6.383000000000002,color=red,count=3551 upsec=6.546000000000002,color=blue,count=2511 upsec=6.703000000000002,color=green,count=984 upsec=6.842000000000002,color=purple,count=721 upsec=6.986000000000002,color=green,count=976 upsec=7.229000000000003,color=blue,count=2488 upsec=7.376000000000003,color=red,count=3547 upsec=7.567000000000003,color=red,count=3522 upsec=7.693000000000003,color=blue,count=2454 upsec=7.869000000000003,color=green,count=937 upsec=8.051000000000004,color=purple,count=697 upsec=8.213000000000005,color=purple,count=694 upsec=8.356000000000005,color=purple,count=658 upsec=8.379000000000005,color=red,count=3516 upsec=8.619000000000005,color=red,count=3505 upsec=8.708000000000006,color=red,count=3479 upsec=8.773000000000005,color=green,count=929 upsec=8.809000000000005,color=red,count=3464 upsec=9.021000000000004,color=purple,count=634 upsec=9.268000000000004,color=blue,count=2428 upsec=9.333000000000004,color=purple,count=621 upsec=9.497000000000003,color=purple,count=606 upsec=9.539000000000003,color=purple,count=572 upsec=9.650000000000004,color=green,count=903 upsec=9.854000000000005,color=blue,count=2400 upsec=9.963000000000005,color=blue,count=2397 upsec=10.088000000000005,color=blue,count=2379 upsec=10.308000000000005,color=red,count=3431 upsec=10.321000000000005,color=red,count=3398 upsec=10.542000000000005,color=green,count=894 upsec=10.752000000000006,color=red,count=3396 upsec=10.868000000000006,color=purple,count=550 upsec=10.942000000000005,color=green,count=887 upsec=11.137000000000006,color=blue,count=2369 upsec=11.384000000000006,color=red,count=3389 upsec=11.517000000000007,color=green,count=859 upsec=11.657000000000007,color=purple,count=516 upsec=11.707000000000008,color=green,count=853 upsec=11.809000000000008,color=green,count=828 upsec=11.904000000000009,color=purple,count=514 upsec=12.09200000000001,color=red,count=3385 upsec=12.317000000000009,color=red,count=3359 upsec=12.37100000000001,color=green,count=789 upsec=12.58800000000001,color=red,count=3355 upsec=12.77200000000001,color=red,count=3348 upsec=12.856000000000009,color=red,count=3346 upsec=13.103000000000009,color=blue,count=2355 upsec=13.346000000000009,color=green,count=752 upsec=13.594000000000008,color=blue,count=2349 miller-5.6.2/doc/data/multicountdown.rb000066400000000000000000000010511354153536500201150ustar00rootroot00000000000000#!/usr/bin/ruby $stdout.sync = true # Simulates some multi-threaded program making progress over time on some set of tasks counts = {'red' => 3842, 'green' => 1224, 'blue' => 2697, 'purple' => 979} colors = counts.keys n = colors.length start_time = Time::now.to_f upsec = 0.0 while counts.any?{|color,count| count > 0} upsec += 0.001 * rand(250) color = colors[rand(n)] count = counts[color] delta = rand(40) count -= delta count = [0, count].max counts[color] = count puts "upsec=#{upsec},color=#{color},count=#{counts[color]}" end miller-5.6.2/doc/data/mydata.txt000066400000000000000000000000551354153536500165200ustar00rootroot00000000000000oh say can you see by the dawn's early light miller-5.6.2/doc/data/nested.tsv000066400000000000000000000000201354153536500165100ustar00rootroot00000000000000a b x z s u:v:w miller-5.6.2/doc/data/newline-example.txt000066400000000000000000000001321354153536500203270ustar00rootroot00000000000000mlr put ' $x = 1 $y = 2 # Syntax error ' mlr put ' $x = 1; $y = 2 # This is OK ' miller-5.6.2/doc/data/ping-delta-example.txt000066400000000000000000000011751354153536500207220ustar00rootroot00000000000000$ each 10 uptime | mlr -p step -a delta -f 11 ... 20:08 up 36 days, 10:38, 5 users, load averages: 1.42 1.62 1.73 0.000000 20:08 up 36 days, 10:38, 5 users, load averages: 1.55 1.64 1.74 0.020000 20:08 up 36 days, 10:38, 7 users, load averages: 1.58 1.65 1.74 0.010000 20:08 up 36 days, 10:38, 9 users, load averages: 1.78 1.69 1.76 0.040000 20:08 up 36 days, 10:39, 9 users, load averages: 2.12 1.76 1.78 0.070000 20:08 up 36 days, 10:39, 9 users, load averages: 2.51 1.85 1.81 0.090000 20:08 up 36 days, 10:39, 8 users, load averages: 2.79 1.92 1.83 0.070000 20:08 up 36 days, 10:39, 4 users, load averages: 2.64 1.90 1.83 -0.020000 miller-5.6.2/doc/data/previous-to-current.sh000066400000000000000000000002751354153536500210140ustar00rootroot00000000000000mlr --icsv --opprint \ join -j color --ul --ur -f data/prevtemp.csv \ then unsparsify --fill-with 0 \ then put '$count_delta = $current_count - $previous_count' \ data/currtemp.csv miller-5.6.2/doc/data/previous_counters.csv000066400000000000000000000000641354153536500210130ustar00rootroot00000000000000color,count red,3472 blue,6838 orange,694 purple,12 miller-5.6.2/doc/data/prevtemp.csv000066400000000000000000000000751354153536500170610ustar00rootroot00000000000000color,previous_count red,3472 blue,6838 orange,694 purple,12 miller-5.6.2/doc/data/put-gating-example-1.dkvp000066400000000000000000000000251354153536500212310ustar00rootroot00000000000000x=-1 x=0 x=1 x=2 x=3 miller-5.6.2/doc/data/put-gating-example-2.dkvp000066400000000000000000000000461354153536500212350ustar00rootroot00000000000000a=abc_123 a=some other name a=xyz_789 miller-5.6.2/doc/data/put-multiline-example.txt000066400000000000000000000002221354153536500214760ustar00rootroot00000000000000mlr --opprint put ' $nf = NF; $nr = NR; $fnr = FNR; $filenum = FILENUM; $filename = FILENAME ' data/small data/small2 miller-5.6.2/doc/data/question.dat000066400000000000000000000000221354153536500170330ustar00rootroot00000000000000a=is it?,b=it is! miller-5.6.2/doc/data/ragged-csv-2.sh000066400000000000000000000001761354153536500172210ustar00rootroot00000000000000mlr --from data/ragged.csv --fs comma --nidx put ' @maxnf = max(@maxnf, NF); while(NF < @maxnf) { $[NF+1] = ""; } ' miller-5.6.2/doc/data/ragged-csv.sh000077500000000000000000000002271354153536500170620ustar00rootroot00000000000000mlr --from data/ragged.csv --fs comma --nidx put ' @maxnf = max(@maxnf, NF); @nf = NF; while(@nf < @maxnf) { @nf += 1; $[@nf] = "" } ' miller-5.6.2/doc/data/ragged.csv000066400000000000000000000000301354153536500164370ustar00rootroot00000000000000a,b,c 1,2,3 4,5 6,7,8,9 miller-5.6.2/doc/data/rect-inner.txt000066400000000000000000000002171354153536500173070ustar00rootroot00000000000000inner1=100,inner2=101 inner1=120,inner2=121 inner1=200,inner2=201 inner1=210,inner2=211 inner1=300,inner2=301 inner1=312 inner1=313,inner2=314 miller-5.6.2/doc/data/rect-middle.txt000066400000000000000000000001061354153536500174270ustar00rootroot00000000000000middle=10 middle=11 middle=12 middle=20 middle=21 middle=30 middle=31 miller-5.6.2/doc/data/rect-outer.txt000066400000000000000000000000301354153536500173230ustar00rootroot00000000000000outer=1 outer=2 outer=3 miller-5.6.2/doc/data/rect.sh000066400000000000000000000002321354153536500157660ustar00rootroot00000000000000mlr --from data/rect.txt put -q ' is_present($outer) { unset @r } for (k, v in $*) { @r[k] = v } is_present($inner1) { emit @r }' miller-5.6.2/doc/data/rect.txt000066400000000000000000000003551354153536500162010ustar00rootroot00000000000000outer=1 middle=10 inner1=100,inner2=101 middle=11 middle=12 inner1=120,inner2=121 outer=2 middle=20 inner1=200,inner2=201 middle=21 inner1=210,inner2=211 outer=3 middle=30 inner1=300,inner2=301 middle=31 inner1=312 inner1=313,inner2=314 miller-5.6.2/doc/data/regex-in-data.dat000066400000000000000000000001131354153536500176120ustar00rootroot00000000000000name=jane,regex=^j.*e$ name=bill,regex=^b[ou]ll$ name=bull,regex=^b[ou]ll$ miller-5.6.2/doc/data/remove-empty-columns.csv000066400000000000000000000000421354153536500213200ustar00rootroot00000000000000a,b,c,d,e 1,,3,,5 2,,4,,5 3,,5,,7 miller-5.6.2/doc/data/repeat-example.dat000066400000000000000000000000711354153536500201010ustar00rootroot00000000000000color=blue,count=5 color=red,count=4 color=green,count=3 miller-5.6.2/doc/data/repeats.dkvp000066400000000000000000000034451354153536500170370ustar00rootroot00000000000000color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=red,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=yellow,shape=circle,flag=1 color=yellow,shape=circle,flag=1 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=yellow,shape=circle,flag=1 color=red,shape=circle,flag=1 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=square,flag=0 color=purple,shape=square,flag=0 color=red,shape=square,flag=0 color=red,shape=square,flag=1 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=purple,shape=square,flag=0 color=red,shape=square,flag=0 color=red,shape=square,flag=0 color=purple,shape=triangle,flag=0 color=yellow,shape=triangle,flag=1 color=purple,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=purple,shape=triangle,flag=0 color=red,shape=circle,flag=1 color=purple,shape=triangle,flag=0 color=purple,shape=triangle,flag=0 color=red,shape=square,flag=0 color=red,shape=circle,flag=1 color=red,shape=square,flag=1 color=red,shape=square,flag=0 color=red,shape=circle,flag=1 color=purple,shape=square,flag=0 color=purple,shape=square,flag=0 color=red,shape=square,flag=1 color=purple,shape=triangle,flag=0 color=purple,shape=triangle,flag=0 color=purple,shape=square,flag=0 color=yellow,shape=circle,flag=1 color=red,shape=square,flag=0 color=yellow,shape=triangle,flag=1 color=yellow,shape=circle,flag=1 color=purple,shape=square,flag=0 miller-5.6.2/doc/data/sample-example.txt000066400000000000000000000076671354153536500201730ustar00rootroot00000000000000$ mlr --opprint sample -k 4 data/colored-shapes.dkvp color shape flag i u v w x purple triangle 0 90122 0.9986871176198068 0.3037738877233719 0.5154934457238382 5.365962021016529 red circle 0 3139 0.04835898233323954 -0.03964684310055758 0.5263660881848111 5.3758779366493625 orange triangle 0 67847 0.36746306902109926 0.5161574810505635 0.5176199566173642 3.1748088656576567 yellow square 1 33576 0.3098376725521097 0.8525628505287842 0.49774122460981685 4.494754378604669 $ mlr --opprint sample -k 4 data/colored-shapes.dkvp color shape flag i u v w x blue square 1 16783 0.09974385090654347 0.7243899920872646 0.5353718443278438 4.431057737383438 orange square 1 93291 0.5944176543007182 0.17744449786454086 0.49262281749172077 3.1548117990710653 yellow square 1 54436 0.5268161165014636 0.8785588662666121 0.5058773791931063 7.019185838783636 yellow square 1 55491 0.0025440267883102274 0.05474106287787284 0.5102729153751984 3.526301273728043 $ mlr --opprint sample -k 2 -g color data/colored-shapes.dkvp color shape flag i u v w x yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 yellow square 1 917 0.8547010348386344 0.7356782810796262 0.4531511689924275 5.774541777078352 red circle 1 4000 0.05490416175132373 0.07392337815122155 0.49416101516594396 5.355725080701707 red square 0 87506 0.6357719216821314 0.6970867759393995 0.4940826462055272 6.351579417310387 purple triangle 0 14898 0.7800986870203719 0.23998073813992293 0.5014775988383656 3.141006771777843 purple triangle 0 151 0.032614487569017414 0.7346633365041219 0.7812143304483805 2.6831992610568047 green triangle 1 126 0.1513010528347546 0.40346767294704544 0.051213231883952326 5.955109300797182 green circle 0 17635 0.029856606049114442 0.4724542934246524 0.49529606749929744 5.239153910272168 blue circle 1 1020 0.414263129226617 0.8304946402876182 0.13151094520189244 4.397873687920433 blue triangle 0 220 0.441773289968473 0.44597731903759075 0.6329360666849821 4.3064608776550894 orange square 0 1885 0.8079311983747106 0.8685956833908394 0.3116410800256374 4.390864584500387 orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 $ mlr --opprint sample -k 2 -g color then sort -f color data/colored-shapes.dkvp color shape flag i u v w x blue circle 0 215 0.7803586969333292 0.33146680638888126 0.04289047852629113 5.725365736377487 blue circle 1 3616 0.8548431579124808 0.4989623130006362 0.3339426415875795 3.696785877560498 green square 0 356 0.7674272008085286 0.341578843118008 0.4570224877870851 4.830320062215299 green square 0 152 0.6684429446914862 0.016056003736548696 0.4656148241291592 5.434588759225423 orange triangle 0 587 0.5175826237797857 0.08989091493635304 0.9011709461770973 4.265854207755811 orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 purple triangle 0 14192 0.5196327866973567 0.7860928603468063 0.4964368415453642 4.899167143824484 purple triangle 0 65 0.6842806710360729 0.5823723856331258 0.8014053396013747 5.805148213865135 red square 1 2431 0.38378504852300466 0.11445015005595527 0.49355539228753786 5.146756570128739 red triangle 0 57097 0.43763430414406546 0.3355450325004481 0.5322349637512487 4.144267240289442 yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 yellow square 1 158 0.41527900739142165 0.7118027080775757 0.4200799665161291 5.33279067554884 miller-5.6.2/doc/data/sar.csv000066400000000000000000000000641354153536500160020ustar00rootroot00000000000000a,b,c the quick,brown fox,jumped over,the,lazy dogs miller-5.6.2/doc/data/sar.mlr000066400000000000000000000000671354153536500160040ustar00rootroot00000000000000 for (k in $*) { $[k] = gsub($[k], "e", "X"); } miller-5.6.2/doc/data/scan-example-1.tbl000066400000000000000000000000251354153536500177130ustar00rootroot00000000000000value 1 2.0 3x hello miller-5.6.2/doc/data/scan-example-2.tbl000066400000000000000000000000741354153536500177200ustar00rootroot00000000000000value 0001 0002 0005 0005WA 0006 0007 0007WA 0008 0009 0010 miller-5.6.2/doc/data/scope-example.dat000066400000000000000000000000361354153536500177330ustar00rootroot00000000000000n=1,x=123 n=2,x=456 n=3,x=789 miller-5.6.2/doc/data/scope-example.mlr000066400000000000000000000014441354153536500177610ustar00rootroot00000000000000func f(a) { # argument is local to the function var b = 100; # local to the function c = 100; # local to the function; does not overwrite outer c return a + 1; } var a = 10; # local at top level var b = 20; # local at top level c = 30; # local at top level; there is no more-outer-scope c if (NR == 3) { var a = 40; # scoped to the if-statement; doesn't overwrite outer a b = 50; # not scoped to the if-statement; overwrites outer b c = 60; # not scoped to the if-statement; overwrites outer c d = 70; # there is no outer d so a local d is created here $inner_a = a; $inner_b = b; $inner_c = c; $inner_d = d; } $outer_a = a; $outer_b = b; $outer_c = c; $outer_d = d; # there is no outer d defined so no assignment happens miller-5.6.2/doc/data/self-join.csv000066400000000000000000000000221354153536500170750ustar00rootroot00000000000000a,b,c 1,2,3 1,4,5 miller-5.6.2/doc/data/semicolon-example.txt000066400000000000000000000001141354153536500206560ustar00rootroot00000000000000mlr put 'x=1' mlr put 'x=1;$y=2' mlr put 'x=1;$y=2;' mlr put 'x=1;;;;$y=2;' miller-5.6.2/doc/data/single-for-example-1.sh000077500000000000000000000002141354153536500206700ustar00rootroot00000000000000mlr --from data/small put ' print "NR = ".NR; for (key in $*) { value = $[key]; print " key:" . key . " value:".value; } ' miller-5.6.2/doc/data/single-for-example-2.sh000077500000000000000000000002141354153536500206710ustar00rootroot00000000000000mlr -n put ' end { o = {1:2, 3:{4:5}}; for (key in o) { print " key:" . key . " valuetype:" . typeof(o[key]); } } ' miller-5.6.2/doc/data/single-quote-example.mlr000066400000000000000000000000501354153536500212540ustar00rootroot00000000000000$a = "It's OK, I said, then 'for now'." miller-5.6.2/doc/data/small000066400000000000000000000004461354153536500155370ustar00rootroot00000000000000a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 miller-5.6.2/doc/data/small.csv000066400000000000000000000003761354153536500163330ustar00rootroot00000000000000a,b,i,x,y pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 miller-5.6.2/doc/data/small2000066400000000000000000000005111354153536500156120ustar00rootroot00000000000000a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001 a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134 a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930 a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758 a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627 miller-5.6.2/doc/data/sort-het.dkvp000066400000000000000000000002221354153536500171270ustar00rootroot00000000000000count=500,color=green count=600 status=ok,count=250,hours=0.22 status=ok,count=200,hours=3.4 count=300,color=blue count=100,color=green count=450 miller-5.6.2/doc/data/sort-missing.dkvp000066400000000000000000000000201354153536500200140ustar00rootroot00000000000000x=2 a=3 x=4 x=1 miller-5.6.2/doc/data/sort-null.dat000066400000000000000000000000501354153536500171240ustar00rootroot00000000000000a=3,b=2 a=1,b=8 a=,b=4 x=9,b=10 a=5,b=7 miller-5.6.2/doc/data/spaces.csv000066400000000000000000000000731354153536500164730ustar00rootroot00000000000000a b c,def,g h i 123,4567,890 2468,1357,3579 9987,3312,4543 miller-5.6.2/doc/data/sparse.json000066400000000000000000000001041354153536500166630ustar00rootroot00000000000000{"a":1,"b":2,"v":3} {"u":1,"b":2} {"a":1,"v":2,"x":3} {"v":1,"w":2} miller-5.6.2/doc/data/subcommand-example.txt000066400000000000000000000001311354153536500210150ustar00rootroot00000000000000mlr tac *.dat mlr cut --complement -f os_version *.dat mlr sort -f hostname,uptime *.dat miller-5.6.2/doc/data/subr-example.sh000066400000000000000000000004371354153536500174440ustar00rootroot00000000000000mlr --opprint --from data/small put -q ' begin { @call_count = 0; } subr s(n) { @call_count += 1; if (is_numeric(n)) { if (n > 1) { call s(n-1); } else { print "numcalls=" . @call_count; } } } print "NR=" . NR; call s(NR); ' miller-5.6.2/doc/data/system-file-ojson-example.txt000066400000000000000000000007041354153536500222620ustar00rootroot00000000000000$ grep -v '^#' /etc/passwd | head -n 2 | \ mlr --nidx --fs : --ojson --jvstack --jlistwrap label name,password,uid,gid,gecos,home_dir,shell [ { "name": "nobody", "password": "*", "uid": -2, "gid": -2, "gecos": "Unprivileged User", "home_dir": "/var/empty", "shell": "/usr/bin/false" } ,{ "name": "root", "password": "*", "uid": 0, "gid": 0, "gecos": "System Administrator", "home_dir": "/var/root", "shell": "/bin/sh" } ] miller-5.6.2/doc/data/system-file-opprint-example.txt000066400000000000000000000011221354153536500226200ustar00rootroot00000000000000$ grep -v '^#' /etc/passwd | head -n 6 | mlr --nidx --fs : --opprint cat 1 2 3 4 5 6 7 nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false root * 0 0 System Administrator /var/root /bin/sh daemon * 1 1 System Services /var/root /usr/bin/false _uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico _taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false _networkd * 24 24 Network Services /var/networkd /usr/bin/false miller-5.6.2/doc/data/system-file-oxtab-example.txt000066400000000000000000000003211354153536500222420ustar00rootroot00000000000000$ grep -v '^#' /etc/passwd | head -n 2 | mlr --nidx --fs : --oxtab cat 1 nobody 2 * 3 -2 4 -2 5 Unprivileged User 6 /var/empty 7 /usr/bin/false 1 root 2 * 3 0 4 0 5 System Administrator 6 /var/root 7 /bin/sh miller-5.6.2/doc/data/then-chaining-performance.txt000066400000000000000000000004151354153536500222540ustar00rootroot00000000000000% cat piped.sh mlr cut -x -f i,y data/big | mlr sort -n y > /dev/null % time sh piped.sh real 0m2.828s user 0m3.183s sys 0m0.137s % cat chained.sh mlr cut -x -f i,y then sort -n y data/big > /dev/null % time sh chained.sh real 0m2.082s user 0m1.933s sys 0m0.137s miller-5.6.2/doc/data/then-example.csv000066400000000000000000000001651354153536500176060ustar00rootroot00000000000000Status,Payment_Type,Amount paid,cash,10.00 pending,debit,20.00 paid,cash,50.00 pending,credit,40.00 paid,debit,30.00 miller-5.6.2/doc/data/timing-example.txt000066400000000000000000000013101354153536500201540ustar00rootroot00000000000000$ ruby -e '10000.times{|i|puts "i=#{i+1}"}' > lines.txt $ head -n 5 lines.txt i=1 i=2 i=3 i=4 i=5 mlr --ofmt '%.9le' --opprint put '$t=systime()' then step -a delta -f t lines.txt | head -n 7 i t t_delta 1 1430603027.018016 1.430603027e+09 2 1430603027.018043 2.694129944e-05 3 1430603027.018048 5.006790161e-06 4 1430603027.018052 4.053115845e-06 5 1430603027.018055 2.861022949e-06 6 1430603027.018058 3.099441528e-06 mlr --ofmt '%.9le' --oxtab \ put '$t=systime()' then \ step -a delta -f t then \ filter '$i>1' then \ stats1 -a min,mean,max -f t_delta \ lines.txt t_delta_min 2.861022949e-06 t_delta_mean 4.077508505e-06 t_delta_max 5.388259888e-05 miller-5.6.2/doc/data/trailing-commas.sh000077500000000000000000000003241354153536500201240ustar00rootroot00000000000000mlr --csvlite --from data/a.csv put ' func f( num a, num b, ): num { return a**2 + b**2; } $* = { "s": $a + $b, "t": $a - $b, "u": f( $a, $b, ), "v": NR, } ' miller-5.6.2/doc/data/triple-for-example-1.sh000066400000000000000000000001741354153536500207100ustar00rootroot00000000000000mlr --from data/small --opprint put ' num suma = 0; for (a = 1; a <= NR; a += 1) { suma += a; } $suma = suma; ' miller-5.6.2/doc/data/triple-for-example-2.sh000066400000000000000000000003021354153536500207020ustar00rootroot00000000000000mlr --from data/small --opprint put ' num suma = 0; num sumb = 0; for (num a = 1, num b = 1; a <= NR; a += 1, b *= 2) { suma += a; sumb += b; } $suma = suma; $sumb = sumb; ' miller-5.6.2/doc/data/trivial-records.csv000066400000000000000000000000311354153536500203200ustar00rootroot00000000000000a,b,c 1,2,3 4,,6 ,, ,8,9 miller-5.6.2/doc/data/two-pass-percentage.sh000066400000000000000000000007151354153536500207270ustar00rootroot00000000000000mlr --from data/small --opprint put -q ' # These are executed once per record, which is the first pass. # The key is to use NR to index an out-of-stream variable to # retain all the x-field values. @x_min = min($x, @x_min); @x_max = max($x, @x_max); @x[NR] = $x; # The second pass is in a for-loop in an end-block. end { for (nr, x in @x) { @x_pct[nr] = 100 * (x - @x_min) / (@x_max - @x_min); } emit (@x, @x_pct), "NR" } ' miller-5.6.2/doc/data/two-pass-record-numbers.sh000066400000000000000000000003741354153536500215420ustar00rootroot00000000000000mlr --opprint --from data/small put -q ' @records[NR] = $*; end { for((I,k),v in @records) { @records[I]["I"] = I; @records[I]["N"] = NR; @records[I]["PCT"] = 100*I/NR } emit @records,"I" } ' then reorder -f I,N,PCT miller-5.6.2/doc/data/type-decl-example.mlr000066400000000000000000000053071354153536500205400ustar00rootroot00000000000000subr s(a, str b, int c) { # a is implicitly var (untyped). # b is explicitly str. # c is explicitly int. # The type-checking is done at the callsite # when arguments are bound to parameters. # var b = 100; # error # Re-declaration in the same scope is disallowed. int n = 10; # Declaration of variable local to the subroutine. n = 20; # Assignment is OK. int n = 30; # error # Re-declaration in the same scope is disallowed. str n = "abc"; # error # Re-declaration in the same scope is disallowed. # float f1 = 1; # error # 1 is an int, not a float. float f2 = 2.0; # 2.0 is a float. num f3 = 3; # 3 is a num. num f4 = 4.0; # 4.0 is a num. } # # call s(1, 2, 3); # Type-assertion '3 is int' is done here at the callsite. # k = "def"; # Top-level variable k. # for (str k, v in $*) { # k and v are bound here, masking outer k. print k . ":" . v; # k is explicitly str; v is implicitly var. } # # print "k is".k; # k at this scope level is still "def". print "v is".v; # v is undefined in this scope. # i = -1; # for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, unless # declared local: i is outer, j is local to the loop. print "inner i =" . i; # print "inner j =" . j; # } # print "outer i =" . i; # i has been modified by the loop. print "outer j =" . j; # j is undefined in this scope. miller-5.6.2/doc/data/unsparsify.mlr000066400000000000000000000010041354153536500174120ustar00rootroot00000000000000# First pass: # Remember all unique key names: for (k in $*) { @all_keys[k] = 1; } # Remember all input records: @records[NR] = $*; # Second pass: end { for (nr in @records) { # Get the sparsely keyed input record: irecord = @records[nr]; # Fill in missing keys with empty string: map orecord = {}; for (k in @all_keys) { if (haskey(irecord, k)) { orecord[k] = irecord[k]; } else { orecord[k] = ""; } } # Produce the output: emit orecord; } } miller-5.6.2/doc/data/weighted-mean.sh000066400000000000000000000010011354153536500175420ustar00rootroot00000000000000mlr --from data/medium put -q ' # Using the y field for weighting in this example weight = $y; # Using the a field for weighted aggregation in this example @sumwx[$a] += weight * $i; @sumw[$a] += weight; @sumx[$a] += $i; @sumn[$a] += 1; end { map wmean = {}; map mean = {}; for (a in @sumwx) { wmean[a] = @sumwx[a] / @sumw[a] } for (a in @sumx) { mean[a] = @sumx[a] / @sumn[a] } #emit wmean, "a"; #emit mean, "a"; emit (wmean, mean), "a"; }' miller-5.6.2/doc/data/while-example-1.sh000066400000000000000000000001231354153536500177270ustar00rootroot00000000000000echo x=1,y=2 | mlr put ' while (NF < 10) { $[NF+1] = "" } $foo = "bar" ' miller-5.6.2/doc/data/while-example-2.sh000066400000000000000000000001751354153536500177370ustar00rootroot00000000000000echo x=1,y=2 | mlr put ' do { $[NF+1] = ""; if (NF == 5) { break } } while (NF < 10); $foo = "bar" ' miller-5.6.2/doc/datagen/000077500000000000000000000000001354153536500151725ustar00rootroot00000000000000miller-5.6.2/doc/datagen/mkdat2000077500000000000000000000073451354153536500163130ustar00rootroot00000000000000#!/usr/bin/ruby # ================================================================ # Produces a variety of categorized pseudo-random data in support # of Miller documentation at http://johnkerl.org/miller/doc/index.html # # John Kerl May 2015 # ================================================================ # # Sample output: # # ./datagen/mkdat2 6 | mlr --opprint cat # color shape flag i u v w x # purple circle 0 1 0.5637512757306459 0.4981743566291943 0.36884254478967105 4.480962906000271 # orange square 1 2 0.5232158098904274 0.33717333156510765 0.44646982455699713 5.807558719657881 # red circle 1 3 0.5084894411433544 0.7025118761232125 0.672558508897624 5.094127602621387 # blue square 0 4 0.3145642940519666 0.3040179460903778 0.6388947856924174 7.517194060345607 # yellow triangle 1 5 0.06776212921515201 0.8517576443958519 0.4319941923080997 4.955913436917771 # red square 0 6 0.24407904404655156 0.4297654986740608 0.6681496181121647 4.702469482713694 # ================================================================ # Vary repeat counts to obtain non-uniform distribution on colors $colors=%w( red red red red red red red red red red red red red red red red green green green green blue blue blue blue blue orange yellow yellow yellow yellow yellow purple purple purple purple ) # Vary repeat counts to obtain non-uniform distribution on shapes $shapes = %w( circle circle circle square square square square square triangle triangle triangle triangle ) # Vary per-color probabilities of flag==1 $color_flag_ps = { 'blue' => 0.6, 'green' => 0.2, 'orange' => 0.5, 'purple' => 0.1, 'red' => 0.3, 'yellow' => 0.9, } # For autocorrelation of time series by color $eta = 0.99 # ================================================================ def main() n = 100000 n = Integer ARGV[0] if ARGV.length == 1 history_keys = [] $colors.uniq.each do |color| $shapes.uniq.each do |shape| history_keys << color + '-' + shape end end ht = HistoryTracker.new(history_keys, $eta) n.times do |i| color = $colors[rand $colors.length] shape = $shapes[rand $shapes.length] flag = bernoulli($color_flag_ps[color]) # u: plain unit-interval uniform # v: similar, except for circles, pairwise-correlate u and v u = rand v = rand if color == 'red' && shape == 'circle' v = u + 0.2*(rand-0.5) end # w: autocorrelated time series by color. If you look at stats of w you'll # see roughly uniform distribution. But if you follow each color/shape # combination then you'll see small deltas from one to the next. w = ht.emit(color + '-' + shape) # x: gaussian (boring) x = gaussian puts "color=#{color},shape=#{shape},flag=#{flag},i=#{i+1},u=#{u},v=#{v},w=#{w},x=#{x}" end end # ================================================================ # Roughly normal between 0 and 10, mean 5, stddev about 1.2 def gaussian() 10*(rand+rand+rand+rand+rand+rand)/6 end def bernoulli(p) if rand < p 1 else 0 end end # Autocorrelated time series per color. # For reference please see http://johnkerl.org/rcm/eta.pdf. class HistoryTracker def initialize(keys, eta) @keys = keys @prevs = {} @keys.each do |key| @prevs[key] = rand end @eta = eta @etac = 1.0 - eta @s = Math.sqrt((1+eta)/(1-eta)) @a = 0.5 * (1 - @s) @b = 0.5 * (1 + @s) end def emit(key) @prevs[key] = @eta * @prevs[key] + @etac * rand end end # ================================================================ begin main() rescue Errno::EPIPE # E.g. we're piped to head exit 0 end miller-5.6.2/doc/dates.csv000066400000000000000000000001201354153536500153750ustar00rootroot00000000000000date,event 2018-02-03,initialization 2018-03-07,discovery 2018-02-03,allocation miller-5.6.2/doc/etymology.html000066400000000000000000000160241354153536500165100ustar00rootroot00000000000000 Why call it Miller?

Why call it Miller?

The Unix toolkit was created in the 1970s and is a mainstay to this day. Miller is written in plain C, and its look and feel adheres closely to the classic toolkit style: if this were music, Miller would be a tribute album. Likewise, since commands are subcommands of the mlr executable, the result is a band, if you will, of command-line tools. Put these together and the namesake is another classic product of the 1970s: the Steve Miller Band. miller-5.6.2/doc/example.csv000066400000000000000000000005631354153536500157430ustar00rootroot00000000000000color,shape,flag,index,quantity,rate yellow,triangle,1,11,43.6498,9.8870 red,square,1,15,79.2778,0.0130 red,circle,1,16,13.8103,2.9010 red,square,0,48,77.5542,7.4670 purple,triangle,0,51,81.2290,8.5910 red,square,0,64,77.1991,9.5310 purple,triangle,0,65,80.1405,5.8240 yellow,circle,1,73,63.9785,4.2370 yellow,circle,1,87,63.5058,8.3350 purple,square,0,91,72.3735,8.2430 miller-5.6.2/doc/expo-sample.sh000077500000000000000000000016111354153536500163570ustar00rootroot00000000000000# Generate 100,000 pairs of independent and identically distributed # exponentially distributed random variables with the same rate parameter # (namely, 2.5). Then compute histograms of one of them, along with # histograms for their sum and their product. # # See also https://en.wikipedia.org/wiki/Exponential_distribution # # Here I'm using a specified random-number seed so this example always # produces the same output for this web document: in everyday practice we # wouldn't do that. mlr -n \ --seed 0.25 \ --opprint \ seqgen --stop 100000 \ then put ' # https://en.wikipedia.org/wiki/Inverse_transform_sampling func expo_sample(lambda) { return -log(1-urand())/lambda } $u = expo_sample(2.5); $v = expo_sample(2.5); $s = $u + $v; $p = $u * $v; ' \ then histogram -f u,s,p --lo 0 --hi 2 --nbins 50 \ then bar -f u_count,s_count,p_count --auto -w 20 miller-5.6.2/doc/faq.html000066400000000000000000001120261354153536500152260ustar00rootroot00000000000000 FAQ

No output at all

Fields not selected

Check the field-separators of the data, e.g. with the command-line head program. Example: for CSV, Miller’s default record separator is comma; if your data is tab-delimited, e.g. aTABbTABc, then Miller won’t find three fields named a, b, and c but rather just one named aTABbTABc. Solution in this case: mlr --fs tab {remaining arguments ...}.

Also try od -xcv and/or cat -e on your file to check for non-printable characters.

Diagnosing delimiter specifications

# Use the `file` command to see if there are CR/LF terminators (in this case,
# there are not):
$ file data/colours.csv
data/colours.csv: UTF-8 Unicode text

# Look at the file to find names of fields
$ cat data/colours.csv
KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR
masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz
masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah

# Extract a few fields:
$ mlr --csv cut -f KEY,PL,RO data/colours.csv
(only blank lines appear)

# Use XTAB output format to get a sharper picture of where records/fields
# are being split:
$ mlr --icsv --oxtab cat data/colours.csv
KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz

KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah

# Using XTAB output format makes it clearer that KEY;DE;...;RO;TR is being
# treated as a single field name in the CSV header, and likewise each
# subsequent line is being treated as a single field value. This is because
# the default field separator is a comma but we have semicolons here.
# Use XTAB again with different field separator (--fs semicolon):
 mlr --icsv --ifs semicolon --oxtab cat data/colours.csv
KEY masterdata_colourcode_1
DE  Weiß
EN  White
ES  Blanco
FI  Valkoinen
FR  Blanc
IT  Bianco
NL  Wit
PL  Biały
RO  Alb
TR  Beyaz

KEY masterdata_colourcode_2
DE  Schwarz
EN  Black
ES  Negro
FI  Musta
FR  Noir
IT  Nero
NL  Zwart
PL  Czarny
RO  Negru
TR  Siyah

# Using the new field-separator, retry the cut:
 mlr --csv --fs semicolon cut -f KEY,PL,RO data/colours.csv
KEY;PL;RO
masterdata_colourcode_1;Biały;Alb
masterdata_colourcode_2;Czarny;Negru

How do I suppress numeric conversion?

TL;DR use put -S.

Within mlr put and mlr filter, the default behavior for scanning input records is to parse them as integer, if possible, then as float, if possible, else leave them as string:

$ cat data/scan-example-1.tbl
value
1
2.0
3x
hello

$ mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-1.tbl
value copy     type
1     1        int
2.0   2.000000 float
3x    3x       string
hello hello    string

The numeric-conversion rule is simple:

  • Try to scan as integer ("1" should be int);
  • if that doesn’t succeed, try to scan as float ("1.0" should be float);
  • if that doesn’t succeed, leave the value as a string ("1x" is string).

This is a sensible default: you should be able to put '$z = $x + $y' without having to write '$z = int($x) + float($y)'. Also note that default output format for floating-point numbers created by put (and other verbs such as stats1) is six decimal places; you can override this using mlr --ofmt. Also note that Miller uses your system’s C library functions whenever possible: e.g. sscanf for converting strings to integer or floating-point.

But now suppose you have data like these:

$ cat data/scan-example-2.tbl
value
0001
0002
0005
0005WA
0006
0007
0007WA
0008
0009
0010

$ mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl
value  copy     type
0001   1        int
0002   2        int
0005   5        int
0005WA 0005WA   string
0006   6        int
0007   7        int
0007WA 0007WA   string
0008   8.000000 float
0009   9.000000 float
0010   8        int

The same conversion rules as above are being used. Namely:

  • By default field values are inferred to int, else float, else string;
  • leading zeroes indicate octal for integers (sscanf semantics);
  • since 0008 doesn't scan as integer (leading 0 requests octal but 8 isn't a valid octal digit), the float scan is tried next and it succeeds;
  • default floating-point output format is 6 decimal places (override with mlr --ofmt).

Taken individually the rules make sense; taken collectively they produce a mishmash of types here.

The solution is to use the -S flag for mlr put and/or mlr filter. Then all field values are left as string. You can type-coerce on demand using syntax like '$z = int($x) + float($y)'. (See also the put documentation; see also https://github.com/johnkerl/miller/issues/150.)

$ mlr --pprint put -S '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl
value  copy   type
0001   0001   string
0002   0002   string
0005   0005   string
0005WA 0005WA string
0006   0006   string
0007   0007   string
0007WA 0007WA string
0008   0008   string
0009   0009   string
0010   0010   string

How do I examine then-chaining?

Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step.

First, look at the input data:

$ cat data/then-example.csv
Status,Payment_Type,Amount
paid,cash,10.00
pending,debit,20.00
paid,cash,50.00
pending,credit,40.00
paid,debit,30.00

Next, run the first step of your command, omitting anything from the first then onward:

$ mlr --icsv --opprint count-distinct -f Status,Payment_Type data/then-example.csv
Status  Payment_Type count
paid    cash         2
pending debit        1
pending credit       1
paid    debit        1

After that, run it with the next then step included:

$ mlr --icsv --opprint count-distinct -f Status,Payment_Type then sort -nr count data/then-example.csv
Status  Payment_Type count
paid    cash         2
pending debit        1
pending credit       1
paid    debit        1

Now if you use then to include another verb after that, the columns Status, Payment_Type, and count will be the input to that verb.

Note, by the way, that you’ll get the same results using pipes:

$ mlr --csv count-distinct -f Status,Payment_Type data/then-example.csv | mlr --icsv --opprint sort -nr count
Status  Payment_Type count
paid    cash         2
pending debit        1
pending credit       1
paid    debit        1

I assigned $9 and it’s not 9th

Miller records are ordered lists of key-value pairs. For NIDX format, DKVP format when keys are missing, or CSV/CSV-lite format with --implicit-csv-header, Miller will sequentially assign keys of the form 1, 2, etc. But these are not integer array indices: they’re just field names taken from the initial field ordering in the input data.

$ echo x,y,z | mlr --dkvp cat
1=x,2=y,3=z

$ echo x,y,z | mlr --dkvp put '$6="a";$4="b";$55="cde"'
1=x,2=y,3=z,6=a,4=b,55=cde

$ echo x,y,z | mlr --nidx cat
x,y,z

$ echo x,y,z | mlr --csv --implicit-csv-header cat
1,2,3
x,y,z

$ echo x,y,z | mlr --dkvp rename 2,999
1=x,999=y,3=z

$ echo x,y,z | mlr --dkvp rename 2,newname
1=x,newname=y,3=z

$ echo x,y,z | mlr --csv --implicit-csv-header reorder -f 3,1,2
3,1,2
z,x,y

How can I filter by date?

Given input like

$ cat dates.csv
date,event
2018-02-03,initialization
2018-03-07,discovery
2018-02-03,allocation

we can use strptime to parse the date field into seconds-since-epoch and then do numeric comparisons. Simply match your input dataset’s date-formatting to the strptime format-string. For example:

$ mlr --csv filter 'strptime($date, "%Y-%m-%d") > strptime("2018-03-03", "%Y-%m-%d")' dates.csv
date,event
2018-03-07,discovery

Caveat: localtime-handling in timezones with DST is still a work in progress; see https://github.com/johnkerl/miller/issues/170. See also https://github.com/johnkerl/miller/issues/208 — thanks @aborruso!

How can I handle commas-as-data in various formats?

CSV handles this well and by design:

$ cat commas.csv
Name,Role
"Xiao, Lin",administrator
"Khavari, Darius",tester

Likewise JSON:

$ mlr --icsv --ojson cat commas.csv
{ "Name": "Xiao, Lin", "Role": "administrator" }
{ "Name": "Khavari, Darius", "Role": "tester" }

For Miller’s XTAB there is no escaping for carriage returns, but commas work fine:

$ mlr --icsv --oxtab cat commas.csv
Name Xiao, Lin
Role administrator

Name Khavari, Darius
Role tester

But for DKVP and NIDX, commas are the default field separator. And — as of Miller 5.4.0 anyway — there is no CSV-style double-quote-handling like there is for CSV. So commas within the data look like delimiters:

$ mlr --icsv --odkvp cat commas.csv
Name=Xiao, Lin,Role=administrator
Name=Khavari, Darius,Role=tester

One solution is to use a different delimiter, such as a pipe character:

$ mlr --icsv --odkvp --ofs pipe cat commas.csv
Name=Xiao, Lin|Role=administrator
Name=Khavari, Darius|Role=tester

To be extra-sure to avoid data/delimiter clashes, you can also use control characters as delimiters — here, control-A:

$ mlr --icsv --odkvp --ofs '\001'  cat commas.csv | cat -v
Name=Xiao, Lin^ARole=administrator
Name=Khavari, Darius^ARole=tester

How can I handle field names with special symbols in them?

Simply surround the field names with curly braces:

$ echo 'x.a=3,y:b=4,z/c=5' | mlr put '${product.all} = ${x.a} * ${y:b} * ${z/c}'
x.a=3,y:b=4,z/c=5,product.all=60

How to escape '?' in regexes?

One way is to use square brackets; an alternative is to use simple string-substitution rather than a regular expression.

$ cat data/question.dat
a=is it?,b=it is!

$ mlr --oxtab put '$c = gsub($a, "[?]"," ...")' data/question.dat
a is it?
b it is!
c is it ...

$ mlr --oxtab put '$c = ssub($a, "?"," ...")' data/question.dat
a is it?
b it is!
c is it ...

The ssub function exists precisely for this reason: so you don’t have to escape anything.

How can I put single-quotes into strings?

This is a little tricky due to the shell’s handling of quotes. For simplicity, let’s first put an update script into a file:

$a = "It's OK, I said, then 'for now'."

$ echo a=bcd | mlr put -f data/single-quote-example.mlr
a=It's OK, I said, then 'for now'.

So, it’s simple: Miller’s DSL uses double quotes for strings, and you can put single quotes (or backslash-escaped double-quotes) inside strings, no problem.

Without putting the update expression in a file, it’s messier:

$ echo a=bcd | mlr put '$a="It'\''s OK, I said, '\''for now'\''."'
a=It's OK, I said, 'for now'.

The idea is that the outermost single-quotes are to protect the put expression from the shell, and the double quotes within them are for Miller. To get a single quote in the middle there, you need to actually put it outside the single-quoting for the shell. The pieces are

  • $a="It
  • \'
  • s OK, I said,
  • \'
  • for now
  • \'
  • .
all concatenated together.

Why doesn’t mlr cut put fields in the order I want?

Example: columns x,i,a were requested but they appear here in the order a,i,x:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr cut -f x,i,a data/small
a=pan,i=1,x=0.3467901443380824
a=eks,i=2,x=0.7586799647899636
a=wye,i=3,x=0.20460330576630303
a=eks,i=4,x=0.38139939387114097
a=wye,i=5,x=0.5732889198020006

The issue is that Miller’s cut, by default, outputs cut fields in the order they appear in the input data. This design decision was made intentionally to parallel the *nix system cut command, which has the same semantics.

The solution is to use the -o option:

$ mlr cut -o -f x,i,a data/small
x=0.3467901443380824,i=1,a=pan
x=0.7586799647899636,i=2,a=eks
x=0.20460330576630303,i=3,a=wye
x=0.38139939387114097,i=4,a=eks
x=0.5732889198020006,i=5,a=wye

NR is not consecutive after then-chaining

Given this input data:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

why don’t I see NR=1 and NR=2 here??

$ mlr filter '$x > 0.5' then put '$NR = NR' data/small
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NR=2
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NR=5

The reason is that NR is computed for the original input records and isn’t dynamically updated. By contrast, NF is dynamically updated: it’s the number of fields in the current record, and if you add/remove a field, the value of NF will change:

$ echo x=1,y=2,z=3 | mlr put '$nf1 = NF; $u = 4; $nf2 = NF; unset $x,$y,$z; $nf3 = NF'
nf1=3,u=4,nf2=5,nf3=3

NR, by contrast (and FNR as well), retains the value from the original input stream, and records may be dropped by a filter within a then-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows:

$ mlr --opprint --from data/small put '
  begin{ @nr1 = 0 }
  @nr1 += 1;
  $nr1 = @nr1
' \
then filter '$x>0.5' \
then put '
  begin{ @nr2 = 0 }
  @nr2 += 1;
  $nr2 = @nr2
'
a   b   i x                  y                  nr1 nr2
eks pan 2 0.7586799647899636 0.5221511083334797 2   1
wye pan 5 0.5732889198020006 0.8636244699032729 5   2

Or, simply use mlr cat -n:

$ mlr filter '$x > 0.5' then cat -n data/small
n=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

Why am I not seeing all possible joins occur?

This section describes behavior before Miller 5.1.0. As of 5.1.0, -u is the default.

For example, the right file here has nine records, and the left file should add in the hostname column — so the join output should also have 9 records:

$ mlr --icsvlite --opprint cat data/join-u-left.csv
hostname              ipaddr
nadir.east.our.org    10.3.1.18
zenith.west.our.org   10.3.1.27
apoapsis.east.our.org 10.4.5.94

$ mlr --icsvlite --opprint cat data/join-u-right.csv
ipaddr    timestamp  bytes
10.3.1.27 1448762579 4568
10.3.1.18 1448762578 8729
10.4.5.94 1448762579 17445
10.3.1.27 1448762589 12
10.3.1.18 1448762588 44558
10.4.5.94 1448762589 8899
10.3.1.27 1448762599 0
10.3.1.18 1448762598 73425
10.4.5.94 1448762599 12200

$ mlr --icsvlite --opprint join -s -j ipaddr -f data/join-u-left.csv data/join-u-right.csv
ipaddr    hostname              timestamp  bytes
10.3.1.27 zenith.west.our.org   1448762579 4568
10.4.5.94 apoapsis.east.our.org 1448762579 17445
10.4.5.94 apoapsis.east.our.org 1448762589 8899
10.4.5.94 apoapsis.east.our.org 1448762599 12200

The issue is that Miller’s join, by default (before 5.1.0), took input sorted (lexically ascending) by the sort keys on both the left and right files. This design decision was made intentionally to parallel the *nix system join command, which has the same semantics. The benefit of this default is that the joiner program can stream through the left and right files, needing to load neither entirely into memory. The drawback, of course, is that is requires sorted input.

The solution (besides pre-sorting the input files on the join keys) is to simply use mlr join -u (which is now the default). This loads the left file entirely into memory (while the right file is still streamed one line at a time) and does all possible joins without requiring sorted input:

$ mlr --icsvlite --opprint join -u -j ipaddr -f data/join-u-left.csv data/join-u-right.csv
ipaddr    hostname              timestamp  bytes
10.3.1.27 zenith.west.our.org   1448762579 4568
10.3.1.18 nadir.east.our.org    1448762578 8729
10.4.5.94 apoapsis.east.our.org 1448762579 17445
10.3.1.27 zenith.west.our.org   1448762589 12
10.3.1.18 nadir.east.our.org    1448762588 44558
10.4.5.94 apoapsis.east.our.org 1448762589 8899
10.3.1.27 zenith.west.our.org   1448762599 0
10.3.1.18 nadir.east.our.org    1448762598 73425
10.4.5.94 apoapsis.east.our.org 1448762599 12200

General advice is to make sure the left-file is relatively small, e.g. containing name-to-number mappings, while saving large amounts of data for the right file.

How to rectangularize after joins with unpaired?

Suppose you have the following two data files:

id,code
3,0000ff
2,00ff00
4,ff0000

id,color
4,red
2,green

Joining on color the results are as expected:

$ mlr --csv join -j id -f data/color-codes.csv data/color-names.csv
id,code,color
4,ff0000,red
2,00ff00,green

However, if we ask for left-unpaireds, since there’s no color column, we get a row not having the same column names as the other:

$ mlr --csv join --ul -j id -f data/color-codes.csv data/color-names.csv
id,code,color
4,ff0000,red
2,00ff00,green

id,code
3,0000ff

To fix this, we can use unsparsify:

$ mlr --csv join --ul -j id -f data/color-codes.csv then unsparsify --fill-with "" data/color-names.csv
id,code,color
4,ff0000,red
2,00ff00,green
3,0000ff,

Thanks to @aborruso for the tip!

What about XML or JSON file formats?

Miller handles tabular data, which is a list of records each having fields which are key-value pairs. Miller also doesn’t require that each record have the same field names (see also here). Regardless, tabular data is a non-recursive data structure.

XML, JSON, etc. are, by contrast, all recursive or nested data structures. For example, in JSON you can represent a hash map whose values are lists of lists.

Now, you can put tabular data into these formats — since list-of-key-value-pairs is one of the things representable in XML or JSON. Example:

# DKVP
x=1,y=2
z=3

# XML
<table>
  <record>
    <field>
      <key> x </key> <value> 1 </value>
    </field>
    <field>
      <key> y </key> <value> 2 </value>
    </field>
  </record>
    <field>
      <key> z </key> <value> 3 </value>
    </field>
  <record>
  </record>
</table>

# JSON
[{"x":1,"y":2},{"z":3}]

However, a tool like Miller which handles non-recursive data is never going to be able to handle full XML/JSON semantics — only a small subset. If tabular data represented in XML/JSON/etc are sufficiently well-structured, it may be easy to grep/sed out the data into a simpler text form — this is a general text-processing problem.

Miller does support tabular data represented in JSON: please see File formats. See also jq for a truly powerful, JSON-specific tool.

For XML, my suggestion is to use a tool like ff-extractor to do format conversion.

miller-5.6.2/doc/feature-comparison.html000066400000000000000000000250061354153536500202630ustar00rootroot00000000000000 Unix-toolkit context

File-format awareness

Miller respects CSV headers. If you do mlr --csv cat *.csv then the header line is written once:

$ cat data/a.csv
a,b,c
1,2,3
4,5,6

$ cat data/b.csv
a,b,c
7,8,9

$ mlr --csv cat data/a.csv data/b.csv
a,b,c
1,2,3
4,5,6
7,8,9

$ mlr --csv sort -nr b data/a.csv data/b.csv
a,b,c
7,8,9
4,5,6
1,2,3

Likewise with mlr sort, mlr tac, and so on.

awk-like features: mlr filter and mlr put

See also

See Main reference for more on Miller’s subcommands cat, cut, head, sort, tac, tail, top, and uniq, as well as awk-like mlr filter and mlr put. miller-5.6.2/doc/file-formats.html000066400000000000000000001076701354153536500170600ustar00rootroot00000000000000 File formats

Overview

Miller handles name-indexed data using several formats: some you probably know by name, such as CSV, TSV, and JSON — and other formats you’re likely already seeing and using in your structured data. Additionally, Miller gives you the option of including comments within your data.

Examples

$ mlr --usage-data-format-examples
  DKVP: delimited key-value pairs (Miller default format)
  +---------------------+
  | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
  | dish=7,egg=8,flint  | Record 2: "dish" => "7", "egg" => "8", "3" => "flint"
  +---------------------+

  NIDX: implicitly numerically indexed (Unix-toolkit style)
  +---------------------+
  | the quick brown     | Record 1: "1" => "the", "2" => "quick", "3" => "brown"
  | fox jumped          | Record 2: "1" => "fox", "2" => "jumped"
  +---------------------+

  CSV/CSV-lite: comma-separated values with separate header line
  +---------------------+
  | apple,bat,cog       |
  | 1,2,3               | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
  | 4,5,6               | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
  +---------------------+

  Tabular JSON: nested objects are supported, although arrays within them are not:
  +---------------------+
  | {                   |
  |  "apple": 1,        | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
  |  "bat": 2,          |
  |  "cog": 3           |
  | }                   |
  | {                   |
  |   "dish": {         | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => ""
  |     "egg": 7,       |
  |     "flint": 8      |
  |   },                |
  |   "garlic": ""      |
  | }                   |
  +---------------------+

  PPRINT: pretty-printed tabular
  +---------------------+
  | apple bat cog       |
  | 1     2   3         | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
  | 4     5   6         | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
  +---------------------+

  XTAB: pretty-printed transposed tabular
  +---------------------+
  | apple 1             | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
  | bat   2             |
  | cog   3             |
  |                     |
  | dish 7              | Record 2: "dish" => "7", "egg" => "8"
  | egg  8              |
  +---------------------+

  Markdown tabular (supported for output only):
  +-----------------------+
  | | apple | bat | cog | |
  | | ---   | --- | --- | |
  | | 1     | 2   | 3   | | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
  | | 4     | 5   | 6   | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
  +-----------------------+

CSV/TSV/ASV/USV/etc.

When mlr is invoked with the --csv or --csvlite option, key names are found on the first record and values are taken from subsequent records. This includes the case of CSV-formatted files. See Record-hetrogeneity for how Miller handles changes of field names within a single data stream.

Miller has record separator RS and field separator FS, just as awk does. For TSV, use --fs tab; to convert TSV to CSV, use --ifs tab --ofs comma, etc. (See also Main reference.)

TSV (tab-separated values): the following are synonymous pairs:

  • --tsv and --csv --fs tab
  • --itsv and --icsv --ifs tab
  • --otsv and --ocsv --ofs tab
  • --tsvlite and --csvlite --fs tab
  • --itsvlite and --icsvlite --ifs tab
  • --otsvlite and --ocsvlite --ofs tab

ASV (ASCII-separated values): the flags --asv, --iasv, --oasv, --asvlite, --iasvlite, and --oasvlite are analogous except they use ASCII FS and RS 0x1f and 0x1e, respectively.

USV (Unicode-separated values): likewise, the flags --usv, --iusv, --ousv, --usvlite, --iusvlite, and --ousvlite use Unicode FS and RS U+241F (UTF-8 0x0xe2909f) and U+241E (UTF-8 0xe2909e), respectively.

Miller’s --csv flag supports RFC-4180 CSV ( https://tools.ietf.org/html/rfc4180). This includes CRLF line-terminators by default, regardless of platform.

Here are the differences between CSV and CSV-lite:

  • CSV supports RFC-4180)-style double-quoting, including the ability to have commas and/or LF/CRLF line-endings contained within an input field; CSV-lite does not.
  • CSV does not allow heterogeneous data; CSV-lite does (see also here).
  • The CSV-lite input-reading code is fractionally more efficient than the CSV input-reader.

Here are things they have in common:

  • The ability to specify record/field separators other than the default, e.g. CR-LF vs. LF, or tab instead of comma for TSV, and so on.
  • The --implicit-csv-header flag for input and the --headerless-csv-output flag for output.

DKVP: Key-value pairs

Miller’s default file format is DKVP, for delimited key-value pairs. Example:

$ mlr cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

Such data are easy to generate, e.g. in Ruby with

puts "host=#{hostname},seconds=#{t2-t1},message=#{msg}"

puts mymap.collect{|k,v| "#{k}=#{v}"}.join(',')

or print statements in various languages, e.g.

echo "type=3,user=$USER,date=$date\n";

logger.log("type=3,user=$USER,date=$date\n");

Fields lacking an IPS will have positional index (starting at 1) used as the key, as in NIDX format. For example, dish=7,egg=8,flint is parsed as "dish" => "7", "egg" => "8", "3" => "flint" and dish,egg,flint is parsed as "1" => "dish", "2" => "egg", "3" => "flint".

As discussed in Record-hetrogeneity, Miller handles changes of field names within the same data stream. But using DKVP format this is particularly natural. One of my favorite use-cases for Miller is in application/server logs, where I log all sorts of lines such as

resource=/path/to/file,loadsec=0.45,ok=true
record_count=100, resource=/path/to/file
resource=/some/other/path,loadsec=0.97,ok=false

etc. and I just log them as needed. Then later, I can use grep, mlr --opprint group-like, etc. to analyze my logs.

See Main reference regarding how to specify separators other than the default equals-sign and comma.

NIDX: Index-numbered (toolkit style)

With --inidx --ifs ' ' --repifs, Miller splits lines on whitespace and assigns integer field names starting with 1. This recapitulates Unix-toolkit behavior.

Example with index-numbered output:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr --onidx --ofs ' ' cat data/small
pan pan 1 0.3467901443380824 0.7268028627434533
eks pan 2 0.7586799647899636 0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006 0.8636244699032729

Example with index-numbered input:

$ cat data/mydata.txt
oh say can you see
by the dawn's
early light

$ mlr --inidx --ifs ' ' --odkvp cat data/mydata.txt
1=oh,2=say,3=can,4=you,5=see
1=by,2=the,3=dawn's
1=early,2=light

Example with index-numbered input and output:

$ cat data/mydata.txt
oh say can you see
by the dawn's
early light

$ mlr --nidx --fs ' ' --repifs cut -f 2,3 data/mydata.txt
say can
the dawn's
light

Tabular JSON

JSON is a format which supports arbitrarily deep nesting of “objects” (hashmaps) and “arrays” (lists), while Miller is a tool for handling tabular data only. This means Miller cannot (and should not) handle arbitrary JSON. (Check out jq.)

But if you have tabular data represented in JSON then Miller can handle that for you.

Single-level JSON objects

An array of single-level objects is, quite simply, a table:

$ mlr --json head -n 2 then cut -f color,shape data/json-example-1.json
{ "color": "yellow", "shape": "triangle" }
{ "color": "red", "shape": "square" }

$ mlr --json --jvstack head -n 2 then cut -f color,u,v data/json-example-1.json
{
  "color": "yellow",
  "u": 0.6321695890307647,
  "v": 0.9887207810889004
}
{
  "color": "red",
  "u": 0.21966833570651523,
  "v": 0.001257332190235938
}

$ mlr --ijson --opprint stats1 -a mean,stddev,count -f u -g shape data/json-example-1.json
shape    u_mean   u_stddev u_count
triangle 0.583995 0.131184 3
square   0.409355 0.365428 4
circle   0.366013 0.209094 3

Nested JSON objects

Additionally, Miller can tabularize nested objects by concatentating keys:

$ mlr --json --jvstack head -n 2 data/json-example-2.json
{
  "flag": 1,
  "i": 11,
  "attributes": {
    "color": "yellow",
    "shape": "triangle"
  },
  "values": {
    "u": 0.632170,
    "v": 0.988721,
    "w": 0.436498,
    "x": 5.798188
  }
}
{
  "flag": 1,
  "i": 15,
  "attributes": {
    "color": "red",
    "shape": "square"
  },
  "values": {
    "u": 0.219668,
    "v": 0.001257,
    "w": 0.792778,
    "x": 2.944117
  }
}

$ mlr --ijson --opprint head -n 4 data/json-example-2.json
flag i  attributes:color attributes:shape values:u values:v values:w values:x
1    11 yellow           triangle         0.632170 0.988721 0.436498 5.798188
1    15 red              square           0.219668 0.001257 0.792778 2.944117
1    16 red              circle           0.209017 0.290052 0.138103 5.065034
0    48 red              square           0.956274 0.746720 0.775542 7.117831

Note in particular that as far as Miller’s put and filter, as well as other I/O formats, are concerned, these are simply field names with colons in them:

$ mlr --json --jvstack head -n 1 then put '${values:uv} = ${values:u} * ${values:v}' data/json-example-2.json
{
  "flag": 1,
  "i": 11,
  "attributes": {
    "color": "yellow",
    "shape": "triangle"
  },
  "values": {
    "u": 0.632170,
    "v": 0.988721,
    "w": 0.436498,
    "x": 5.798188,
    "uv": 0.625040
  }
}

Arrays

Arrays aren’t supported in Miller’s put/filter DSL. By default, JSON arrays are read in as integer-keyed maps.

Suppose you have arrays like this in our input data:

$ cat data/json-example-3.json
{
  "label": "orange",
  "values": [12.2, 13.8, 17.2]
}
{
  "label": "purple",
  "values": [27.0, 32.4]
}

Then integer indices (starting from 0 and counting up) are used as map keys:

$ mlr --ijson --oxtab cat data/json-example-3.json
label    orange
values:0 12.2
values:1 13.8
values:2 17.2

label    purple
values:0 27.0
values:1 32.4

When the data are written back out as JSON, field names are re-expanded as above, but what were arrays on input are now maps on output:

$ mlr --json --jvstack cat data/json-example-3.json
{
  "label": "orange",
  "values": {
    "0": 12.2,
    "1": 13.8,
    "2": 17.2
  }
}
{
  "label": "purple",
  "values": {
    "0": 27.0,
    "1": 32.4
  }
}

This is non-ideal, but it allows Miller (5.x release being latest as of this writing) to handle JSON arrays at all.

You might also use mlr --json-skip-arrays-on-input or mlr --json-fatal-arrays-on-input. To truly handle JSON, please use a JSON-processing tool such as jq.

Formatting JSON options

JSON isn’t a parameterized format, so RS, FS, PS aren’t specifiable. Nonetheless, you can do the following:

  • Use --jvstack to pretty-print JSON objects with multi-line (vertically stacked) spacing. By defaulty, each Miller record (JSON object) is one per line.
  • Use --jlistwrap to print the sequence of JSON objects wrapped in an outermost [ and ]. By default, these aren’t printed.
  • Use --jquoteall to double-quote all object values. By default, integers, floating-point numbers, and booleans true and false are not double-quoted when they appear as JSON-object keys.
  • Use --jflatsep yourstringhere to specify the string used for key concatenation: this defaults to a single colon.
  • Use --jofmt to force Miller to apply the global --ofmt to floating-point values. First note: please use sprintf-style codes for double precision, e.g. ending in %lf, %le, or %lg. Miller floats are double-precision so behavior using %f, %d, etc. is undefined. Second note: 0.123 is valid JSON; .123 is not. Thus this feature allows you to emit JSON which may be unparseable by other tools.

Again, please see jq for a truly powerful, JSON-specific tool.

JSON non-streaming

The JSON parser Miller uses does not return until all input is parsed: in particular this means that, unlike for other file formats, Miller does not (at present) handle JSON files in tail -f contexts.

PPRINT: Pretty-printed tabular

Miller’s pretty-print format is like CSV, but column-aligned. For example, compare

$ mlr --ocsv cat data/small
a,b,i,x,y
pan,pan,1,0.3467901443380824,0.7268028627434533
eks,pan,2,0.7586799647899636,0.5221511083334797
wye,wye,3,0.20460330576630303,0.33831852551664776
eks,wye,4,0.38139939387114097,0.13418874328430463
wye,pan,5,0.5732889198020006,0.8636244699032729

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

Note that while Miller is a line-at-a-time processor and retains input lines in memory only where necessary (e.g. for sort), pretty-print output requires it to accumulate all input lines (so that it can compute maximum column widths) before producing any output. This has two consequences: (a) pretty-print output won’t work on tail -f contexts, where Miller will be waiting for an end-of-file marker which never arrives; (b) pretty-print output for large files is constrained by available machine memory.

See Record-hetrogeneity for how Miller handles changes of field names within a single data stream.

For output only (this isn’t supported in the input-scanner as of 5.0.0) you can use --barred with pprint output format:

$ mlr --opprint --barred cat data/small
+-----+-----+---+---------------------+---------------------+
| a   | b   | i | x                   | y                   |
+-----+-----+---+---------------------+---------------------+
| pan | pan | 1 | 0.3467901443380824  | 0.7268028627434533  |
| eks | pan | 2 | 0.7586799647899636  | 0.5221511083334797  |
| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 |
| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 |
| wye | pan | 5 | 0.5732889198020006  | 0.8636244699032729  |
+-----+-----+---+---------------------+---------------------+

XTAB: Vertical tabular

This is perhaps most useful for looking a very wide and/or multi-column data which causes line-wraps on the screen (but see also https://github.com/twosigma/ngrid for an entirely different, very powerful option). Namely:

$ grep -v '^#' /etc/passwd | head -n 6 | mlr --nidx --fs : --opprint cat
1          2 3  4  5                          6               7
nobody     * -2 -2 Unprivileged User          /var/empty      /usr/bin/false
root       * 0  0  System Administrator       /var/root       /bin/sh
daemon     * 1  1  System Services            /var/root       /usr/bin/false
_uucp      * 4  4  Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico
_taskgated * 13 13 Task Gate Daemon           /var/empty      /usr/bin/false
_networkd  * 24 24 Network Services           /var/networkd   /usr/bin/false

$ grep -v '^#' /etc/passwd | head -n 2 | mlr --nidx --fs : --oxtab cat
1 nobody
2 *
3 -2
4 -2
5 Unprivileged User
6 /var/empty
7 /usr/bin/false

1 root
2 *
3 0
4 0
5 System Administrator
6 /var/root
7 /bin/sh

$ grep -v '^#' /etc/passwd | head -n 2 | \
  mlr --nidx --fs : --ojson --jvstack --jlistwrap label name,password,uid,gid,gecos,home_dir,shell
[
{
  "name": "nobody",
  "password": "*",
  "uid": -2,
  "gid": -2,
  "gecos": "Unprivileged User",
  "home_dir": "/var/empty",
  "shell": "/usr/bin/false"
}
,{
  "name": "root",
  "password": "*",
  "uid": 0,
  "gid": 0,
  "gecos": "System Administrator",
  "home_dir": "/var/root",
  "shell": "/bin/sh"
}
]

Markdown tabular

Markdown format looks like this:

$ mlr --omd cat data/small
| a | b | i | x | y |
| --- | --- | --- | --- | --- |
| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 |
| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 |
| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 |
| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 |
| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 |

which renders like this when dropped into various web tools (e.g. github comments):

As of Miller 4.3.0, markdown format is supported only for output, not input.

Data-conversion keystroke-savers

While you can do format conversion using mlr --icsv --ojson cat myfile.csv, there are also keystroke-savers for this purpose, such as mlr --c2j cat myfile.csv. For a complete list:

$ mlr --usage-format-conversion-keystroke-saver-options
As keystroke-savers for format-conversion you may use the following:
        --c2t --c2d --c2n --c2j --c2x --c2p --c2m
  --t2c       --t2d --t2n --t2j --t2x --t2p --t2m
  --d2c --d2t       --d2n --d2j --d2x --d2p --d2m
  --n2c --n2t --n2d       --n2j --n2x --n2p --n2m
  --j2c --j2t --j2d --j2n       --j2x --j2p --j2m
  --x2c --x2t --x2d --x2n --x2j       --x2p --x2m
  --p2c --p2t --p2d --p2n --p2j --p2x       --p2m
The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,
PPRINT, and markdown, respectively. Note that markdown format is available for
output only.

Autodetect of line endings

Comments in data

You can include comments within your data files, and either have them ignored, or passed directly through to the standard output as soon as they are encountered:

$ mlr --usage-comments-in-data
  --skip-comments                 Ignore commented lines (prefixed by "#")
                                  within the input.
  --skip-comments-with {string}   Ignore commented lines within input, with
                                  specified prefix.
  --pass-comments                 Immediately print commented lines (prefixed by "#")
                                  within the input.
  --pass-comments-with {string}   Immediately print commented lines within input, with
                                  specified prefix.
Notes:
* Comments are only honored at the start of a line.
* In the absence of any of the above four options, comments are data like
  any other text.
* When pass-comments is used, comment lines are written to standard output
  immediately upon being read; they are not part of the record stream.
  Results may be counterintuitive. A suggestion is to place comments at the
  start of data files.

Examples:

$ cat data/budget.csv
# Asana -- here are the budget figures you asked for!
type,quantity
purple,456.78
green,678.12
orange,123.45

$ mlr --skip-comments --icsv --opprint sort -nr quantity data/budget.csv
type   quantity
green  678.12
purple 456.78
orange 123.45

$ mlr --pass-comments --icsv --opprint sort -nr quantity data/budget.csv
# Asana -- here are the budget figures you asked for!
type   quantity
green  678.12
purple 456.78
orange 123.45

miller-5.6.2/doc/index-snippet.txt000066400000000000000000000021701354153536500171170ustar00rootroot00000000000000% mlr --csv cut -f hostname,uptime mydata.csv % mlr --csv --rs lf filter '$status != "down" && $upsec >= 10000' *.csv % mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat % grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group % mlr join -j account_id -f accounts.dat then group-by account_name balances.dat % mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json % mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* % mlr stats2 -a linreg-pca -f u,v -g shape data/* % mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* % mlr --from estimates.tbl put ' for (k,v in $*) { if (isnumeric(v) && k =~ "^[t-z].*$") { $sum += v; $count += 1 } } $mean = $sum / $count # no assignment if count unset ' % mlr --from infile.dat put -f analyze.mlr % mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' % mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' % mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' % mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' miller-5.6.2/doc/index.html000066400000000000000000000304101354153536500155620ustar00rootroot00000000000000 About

About

Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON. You get to work with your data using named fields, without needing to count positional column indices.

This is something the Unix toolkit always could have done, and arguably always should have done. It operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller’s natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.)

Features:

  • Miller is multi-purpose: it’s useful for data cleaning, data reduction, statistical reporting, devops, system administration, log-file processing, format conversion, and database-query post-processing.
  • You can use Miller to snarf and munge log-file data, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing.
  • Miller complements data-analysis tools such as R, pandas, etc.: you can use Miller to clean and prepare your data. While you can do basic statistics entirely in Miller, its streaming-data feature and single-pass algorithms enable you to reduce very large data sets.
  • Miller complements SQL databases: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples here and here). You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry.
  • Miller also goes beyond the classic Unix tools by stepping fully into our modern, no-SQL world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved.
  • Miller is streaming: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (sort, tac, stats1), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system’s available RAM, and you can use Miller in tail -f contexts.
  • Miller is pipe-friendly and interoperates with the Unix toolkit
  • Miller’s I/O formats include tabular pretty-printing, positionally indexed (Unix-toolkit style), CSV, JSON, and others
  • Miller does conversion between formats
  • Miller’s processing is format-aware: e.g. CSV sort and tac keep header lines first
  • Miller has high-throughput performance on par with the Unix toolkit
  • Not unlike jq (for JSON), Miller is written in portable, modern C, with zero runtime dependencies. You can download or compile a single binary, scp it to a faraway machine, and expect it to work.

Releases and release notes: https://github.com/johnkerl/miller/releases.

Examples:

# Column select
% mlr --csv cut -f hostname,uptime mydata.csv
# Add new columns as function of other columns
% mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
# Row filter
% mlr --csv filter '$status != "down" && $upsec >= 10000' *.csv
# Apply column labels and pretty-print
% grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
# Join multiple data sources on key columns
% mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
# Multiple formats including JSON
% mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
# Aggregate per-column statistics
% mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
# Linear regression
% mlr stats2 -a linreg-pca -f u,v -g shape data/*
# Aggregate custom per-column statistics
% mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
# Iterate over data using DSL expressions
% mlr --from estimates.tbl put '
  for (k,v in $*) {
    if (is_numeric(v) && k =~ "^[t-z].*$") {
      $sum += v; $count += 1
    }
  }
  $mean = $sum / $count # no assignment if count unset
'
# Run DSL expressions from a script file
% mlr --from infile.dat put -f analyze.mlr
# Split/reduce output to multiple filenames
% mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
# Compressed I/O
% mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
# Interoperate with other data-processing tools using standard pipes
% mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
# Tap/trace
% mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
miller-5.6.2/doc/internationalization.html000066400000000000000000000173171354153536500207330ustar00rootroot00000000000000 Internationalization

Internationalization

Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.)

By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes:

Meanwhile, regular expressions and the sub and gsub function correctly, albeit without explicit intentional support.

Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter). miller-5.6.2/doc/lines.txt000066400000000000000000002064361354153536500154550ustar00rootroot00000000000000i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 i=11 i=12 i=13 i=14 i=15 i=16 i=17 i=18 i=19 i=20 i=21 i=22 i=23 i=24 i=25 i=26 i=27 i=28 i=29 i=30 i=31 i=32 i=33 i=34 i=35 i=36 i=37 i=38 i=39 i=40 i=41 i=42 i=43 i=44 i=45 i=46 i=47 i=48 i=49 i=50 i=51 i=52 i=53 i=54 i=55 i=56 i=57 i=58 i=59 i=60 i=61 i=62 i=63 i=64 i=65 i=66 i=67 i=68 i=69 i=70 i=71 i=72 i=73 i=74 i=75 i=76 i=77 i=78 i=79 i=80 i=81 i=82 i=83 i=84 i=85 i=86 i=87 i=88 i=89 i=90 i=91 i=92 i=93 i=94 i=95 i=96 i=97 i=98 i=99 i=100 i=101 i=102 i=103 i=104 i=105 i=106 i=107 i=108 i=109 i=110 i=111 i=112 i=113 i=114 i=115 i=116 i=117 i=118 i=119 i=120 i=121 i=122 i=123 i=124 i=125 i=126 i=127 i=128 i=129 i=130 i=131 i=132 i=133 i=134 i=135 i=136 i=137 i=138 i=139 i=140 i=141 i=142 i=143 i=144 i=145 i=146 i=147 i=148 i=149 i=150 i=151 i=152 i=153 i=154 i=155 i=156 i=157 i=158 i=159 i=160 i=161 i=162 i=163 i=164 i=165 i=166 i=167 i=168 i=169 i=170 i=171 i=172 i=173 i=174 i=175 i=176 i=177 i=178 i=179 i=180 i=181 i=182 i=183 i=184 i=185 i=186 i=187 i=188 i=189 i=190 i=191 i=192 i=193 i=194 i=195 i=196 i=197 i=198 i=199 i=200 i=201 i=202 i=203 i=204 i=205 i=206 i=207 i=208 i=209 i=210 i=211 i=212 i=213 i=214 i=215 i=216 i=217 i=218 i=219 i=220 i=221 i=222 i=223 i=224 i=225 i=226 i=227 i=228 i=229 i=230 i=231 i=232 i=233 i=234 i=235 i=236 i=237 i=238 i=239 i=240 i=241 i=242 i=243 i=244 i=245 i=246 i=247 i=248 i=249 i=250 i=251 i=252 i=253 i=254 i=255 i=256 i=257 i=258 i=259 i=260 i=261 i=262 i=263 i=264 i=265 i=266 i=267 i=268 i=269 i=270 i=271 i=272 i=273 i=274 i=275 i=276 i=277 i=278 i=279 i=280 i=281 i=282 i=283 i=284 i=285 i=286 i=287 i=288 i=289 i=290 i=291 i=292 i=293 i=294 i=295 i=296 i=297 i=298 i=299 i=300 i=301 i=302 i=303 i=304 i=305 i=306 i=307 i=308 i=309 i=310 i=311 i=312 i=313 i=314 i=315 i=316 i=317 i=318 i=319 i=320 i=321 i=322 i=323 i=324 i=325 i=326 i=327 i=328 i=329 i=330 i=331 i=332 i=333 i=334 i=335 i=336 i=337 i=338 i=339 i=340 i=341 i=342 i=343 i=344 i=345 i=346 i=347 i=348 i=349 i=350 i=351 i=352 i=353 i=354 i=355 i=356 i=357 i=358 i=359 i=360 i=361 i=362 i=363 i=364 i=365 i=366 i=367 i=368 i=369 i=370 i=371 i=372 i=373 i=374 i=375 i=376 i=377 i=378 i=379 i=380 i=381 i=382 i=383 i=384 i=385 i=386 i=387 i=388 i=389 i=390 i=391 i=392 i=393 i=394 i=395 i=396 i=397 i=398 i=399 i=400 i=401 i=402 i=403 i=404 i=405 i=406 i=407 i=408 i=409 i=410 i=411 i=412 i=413 i=414 i=415 i=416 i=417 i=418 i=419 i=420 i=421 i=422 i=423 i=424 i=425 i=426 i=427 i=428 i=429 i=430 i=431 i=432 i=433 i=434 i=435 i=436 i=437 i=438 i=439 i=440 i=441 i=442 i=443 i=444 i=445 i=446 i=447 i=448 i=449 i=450 i=451 i=452 i=453 i=454 i=455 i=456 i=457 i=458 i=459 i=460 i=461 i=462 i=463 i=464 i=465 i=466 i=467 i=468 i=469 i=470 i=471 i=472 i=473 i=474 i=475 i=476 i=477 i=478 i=479 i=480 i=481 i=482 i=483 i=484 i=485 i=486 i=487 i=488 i=489 i=490 i=491 i=492 i=493 i=494 i=495 i=496 i=497 i=498 i=499 i=500 i=501 i=502 i=503 i=504 i=505 i=506 i=507 i=508 i=509 i=510 i=511 i=512 i=513 i=514 i=515 i=516 i=517 i=518 i=519 i=520 i=521 i=522 i=523 i=524 i=525 i=526 i=527 i=528 i=529 i=530 i=531 i=532 i=533 i=534 i=535 i=536 i=537 i=538 i=539 i=540 i=541 i=542 i=543 i=544 i=545 i=546 i=547 i=548 i=549 i=550 i=551 i=552 i=553 i=554 i=555 i=556 i=557 i=558 i=559 i=560 i=561 i=562 i=563 i=564 i=565 i=566 i=567 i=568 i=569 i=570 i=571 i=572 i=573 i=574 i=575 i=576 i=577 i=578 i=579 i=580 i=581 i=582 i=583 i=584 i=585 i=586 i=587 i=588 i=589 i=590 i=591 i=592 i=593 i=594 i=595 i=596 i=597 i=598 i=599 i=600 i=601 i=602 i=603 i=604 i=605 i=606 i=607 i=608 i=609 i=610 i=611 i=612 i=613 i=614 i=615 i=616 i=617 i=618 i=619 i=620 i=621 i=622 i=623 i=624 i=625 i=626 i=627 i=628 i=629 i=630 i=631 i=632 i=633 i=634 i=635 i=636 i=637 i=638 i=639 i=640 i=641 i=642 i=643 i=644 i=645 i=646 i=647 i=648 i=649 i=650 i=651 i=652 i=653 i=654 i=655 i=656 i=657 i=658 i=659 i=660 i=661 i=662 i=663 i=664 i=665 i=666 i=667 i=668 i=669 i=670 i=671 i=672 i=673 i=674 i=675 i=676 i=677 i=678 i=679 i=680 i=681 i=682 i=683 i=684 i=685 i=686 i=687 i=688 i=689 i=690 i=691 i=692 i=693 i=694 i=695 i=696 i=697 i=698 i=699 i=700 i=701 i=702 i=703 i=704 i=705 i=706 i=707 i=708 i=709 i=710 i=711 i=712 i=713 i=714 i=715 i=716 i=717 i=718 i=719 i=720 i=721 i=722 i=723 i=724 i=725 i=726 i=727 i=728 i=729 i=730 i=731 i=732 i=733 i=734 i=735 i=736 i=737 i=738 i=739 i=740 i=741 i=742 i=743 i=744 i=745 i=746 i=747 i=748 i=749 i=750 i=751 i=752 i=753 i=754 i=755 i=756 i=757 i=758 i=759 i=760 i=761 i=762 i=763 i=764 i=765 i=766 i=767 i=768 i=769 i=770 i=771 i=772 i=773 i=774 i=775 i=776 i=777 i=778 i=779 i=780 i=781 i=782 i=783 i=784 i=785 i=786 i=787 i=788 i=789 i=790 i=791 i=792 i=793 i=794 i=795 i=796 i=797 i=798 i=799 i=800 i=801 i=802 i=803 i=804 i=805 i=806 i=807 i=808 i=809 i=810 i=811 i=812 i=813 i=814 i=815 i=816 i=817 i=818 i=819 i=820 i=821 i=822 i=823 i=824 i=825 i=826 i=827 i=828 i=829 i=830 i=831 i=832 i=833 i=834 i=835 i=836 i=837 i=838 i=839 i=840 i=841 i=842 i=843 i=844 i=845 i=846 i=847 i=848 i=849 i=850 i=851 i=852 i=853 i=854 i=855 i=856 i=857 i=858 i=859 i=860 i=861 i=862 i=863 i=864 i=865 i=866 i=867 i=868 i=869 i=870 i=871 i=872 i=873 i=874 i=875 i=876 i=877 i=878 i=879 i=880 i=881 i=882 i=883 i=884 i=885 i=886 i=887 i=888 i=889 i=890 i=891 i=892 i=893 i=894 i=895 i=896 i=897 i=898 i=899 i=900 i=901 i=902 i=903 i=904 i=905 i=906 i=907 i=908 i=909 i=910 i=911 i=912 i=913 i=914 i=915 i=916 i=917 i=918 i=919 i=920 i=921 i=922 i=923 i=924 i=925 i=926 i=927 i=928 i=929 i=930 i=931 i=932 i=933 i=934 i=935 i=936 i=937 i=938 i=939 i=940 i=941 i=942 i=943 i=944 i=945 i=946 i=947 i=948 i=949 i=950 i=951 i=952 i=953 i=954 i=955 i=956 i=957 i=958 i=959 i=960 i=961 i=962 i=963 i=964 i=965 i=966 i=967 i=968 i=969 i=970 i=971 i=972 i=973 i=974 i=975 i=976 i=977 i=978 i=979 i=980 i=981 i=982 i=983 i=984 i=985 i=986 i=987 i=988 i=989 i=990 i=991 i=992 i=993 i=994 i=995 i=996 i=997 i=998 i=999 i=1000 i=1001 i=1002 i=1003 i=1004 i=1005 i=1006 i=1007 i=1008 i=1009 i=1010 i=1011 i=1012 i=1013 i=1014 i=1015 i=1016 i=1017 i=1018 i=1019 i=1020 i=1021 i=1022 i=1023 i=1024 i=1025 i=1026 i=1027 i=1028 i=1029 i=1030 i=1031 i=1032 i=1033 i=1034 i=1035 i=1036 i=1037 i=1038 i=1039 i=1040 i=1041 i=1042 i=1043 i=1044 i=1045 i=1046 i=1047 i=1048 i=1049 i=1050 i=1051 i=1052 i=1053 i=1054 i=1055 i=1056 i=1057 i=1058 i=1059 i=1060 i=1061 i=1062 i=1063 i=1064 i=1065 i=1066 i=1067 i=1068 i=1069 i=1070 i=1071 i=1072 i=1073 i=1074 i=1075 i=1076 i=1077 i=1078 i=1079 i=1080 i=1081 i=1082 i=1083 i=1084 i=1085 i=1086 i=1087 i=1088 i=1089 i=1090 i=1091 i=1092 i=1093 i=1094 i=1095 i=1096 i=1097 i=1098 i=1099 i=1100 i=1101 i=1102 i=1103 i=1104 i=1105 i=1106 i=1107 i=1108 i=1109 i=1110 i=1111 i=1112 i=1113 i=1114 i=1115 i=1116 i=1117 i=1118 i=1119 i=1120 i=1121 i=1122 i=1123 i=1124 i=1125 i=1126 i=1127 i=1128 i=1129 i=1130 i=1131 i=1132 i=1133 i=1134 i=1135 i=1136 i=1137 i=1138 i=1139 i=1140 i=1141 i=1142 i=1143 i=1144 i=1145 i=1146 i=1147 i=1148 i=1149 i=1150 i=1151 i=1152 i=1153 i=1154 i=1155 i=1156 i=1157 i=1158 i=1159 i=1160 i=1161 i=1162 i=1163 i=1164 i=1165 i=1166 i=1167 i=1168 i=1169 i=1170 i=1171 i=1172 i=1173 i=1174 i=1175 i=1176 i=1177 i=1178 i=1179 i=1180 i=1181 i=1182 i=1183 i=1184 i=1185 i=1186 i=1187 i=1188 i=1189 i=1190 i=1191 i=1192 i=1193 i=1194 i=1195 i=1196 i=1197 i=1198 i=1199 i=1200 i=1201 i=1202 i=1203 i=1204 i=1205 i=1206 i=1207 i=1208 i=1209 i=1210 i=1211 i=1212 i=1213 i=1214 i=1215 i=1216 i=1217 i=1218 i=1219 i=1220 i=1221 i=1222 i=1223 i=1224 i=1225 i=1226 i=1227 i=1228 i=1229 i=1230 i=1231 i=1232 i=1233 i=1234 i=1235 i=1236 i=1237 i=1238 i=1239 i=1240 i=1241 i=1242 i=1243 i=1244 i=1245 i=1246 i=1247 i=1248 i=1249 i=1250 i=1251 i=1252 i=1253 i=1254 i=1255 i=1256 i=1257 i=1258 i=1259 i=1260 i=1261 i=1262 i=1263 i=1264 i=1265 i=1266 i=1267 i=1268 i=1269 i=1270 i=1271 i=1272 i=1273 i=1274 i=1275 i=1276 i=1277 i=1278 i=1279 i=1280 i=1281 i=1282 i=1283 i=1284 i=1285 i=1286 i=1287 i=1288 i=1289 i=1290 i=1291 i=1292 i=1293 i=1294 i=1295 i=1296 i=1297 i=1298 i=1299 i=1300 i=1301 i=1302 i=1303 i=1304 i=1305 i=1306 i=1307 i=1308 i=1309 i=1310 i=1311 i=1312 i=1313 i=1314 i=1315 i=1316 i=1317 i=1318 i=1319 i=1320 i=1321 i=1322 i=1323 i=1324 i=1325 i=1326 i=1327 i=1328 i=1329 i=1330 i=1331 i=1332 i=1333 i=1334 i=1335 i=1336 i=1337 i=1338 i=1339 i=1340 i=1341 i=1342 i=1343 i=1344 i=1345 i=1346 i=1347 i=1348 i=1349 i=1350 i=1351 i=1352 i=1353 i=1354 i=1355 i=1356 i=1357 i=1358 i=1359 i=1360 i=1361 i=1362 i=1363 i=1364 i=1365 i=1366 i=1367 i=1368 i=1369 i=1370 i=1371 i=1372 i=1373 i=1374 i=1375 i=1376 i=1377 i=1378 i=1379 i=1380 i=1381 i=1382 i=1383 i=1384 i=1385 i=1386 i=1387 i=1388 i=1389 i=1390 i=1391 i=1392 i=1393 i=1394 i=1395 i=1396 i=1397 i=1398 i=1399 i=1400 i=1401 i=1402 i=1403 i=1404 i=1405 i=1406 i=1407 i=1408 i=1409 i=1410 i=1411 i=1412 i=1413 i=1414 i=1415 i=1416 i=1417 i=1418 i=1419 i=1420 i=1421 i=1422 i=1423 i=1424 i=1425 i=1426 i=1427 i=1428 i=1429 i=1430 i=1431 i=1432 i=1433 i=1434 i=1435 i=1436 i=1437 i=1438 i=1439 i=1440 i=1441 i=1442 i=1443 i=1444 i=1445 i=1446 i=1447 i=1448 i=1449 i=1450 i=1451 i=1452 i=1453 i=1454 i=1455 i=1456 i=1457 i=1458 i=1459 i=1460 i=1461 i=1462 i=1463 i=1464 i=1465 i=1466 i=1467 i=1468 i=1469 i=1470 i=1471 i=1472 i=1473 i=1474 i=1475 i=1476 i=1477 i=1478 i=1479 i=1480 i=1481 i=1482 i=1483 i=1484 i=1485 i=1486 i=1487 i=1488 i=1489 i=1490 i=1491 i=1492 i=1493 i=1494 i=1495 i=1496 i=1497 i=1498 i=1499 i=1500 i=1501 i=1502 i=1503 i=1504 i=1505 i=1506 i=1507 i=1508 i=1509 i=1510 i=1511 i=1512 i=1513 i=1514 i=1515 i=1516 i=1517 i=1518 i=1519 i=1520 i=1521 i=1522 i=1523 i=1524 i=1525 i=1526 i=1527 i=1528 i=1529 i=1530 i=1531 i=1532 i=1533 i=1534 i=1535 i=1536 i=1537 i=1538 i=1539 i=1540 i=1541 i=1542 i=1543 i=1544 i=1545 i=1546 i=1547 i=1548 i=1549 i=1550 i=1551 i=1552 i=1553 i=1554 i=1555 i=1556 i=1557 i=1558 i=1559 i=1560 i=1561 i=1562 i=1563 i=1564 i=1565 i=1566 i=1567 i=1568 i=1569 i=1570 i=1571 i=1572 i=1573 i=1574 i=1575 i=1576 i=1577 i=1578 i=1579 i=1580 i=1581 i=1582 i=1583 i=1584 i=1585 i=1586 i=1587 i=1588 i=1589 i=1590 i=1591 i=1592 i=1593 i=1594 i=1595 i=1596 i=1597 i=1598 i=1599 i=1600 i=1601 i=1602 i=1603 i=1604 i=1605 i=1606 i=1607 i=1608 i=1609 i=1610 i=1611 i=1612 i=1613 i=1614 i=1615 i=1616 i=1617 i=1618 i=1619 i=1620 i=1621 i=1622 i=1623 i=1624 i=1625 i=1626 i=1627 i=1628 i=1629 i=1630 i=1631 i=1632 i=1633 i=1634 i=1635 i=1636 i=1637 i=1638 i=1639 i=1640 i=1641 i=1642 i=1643 i=1644 i=1645 i=1646 i=1647 i=1648 i=1649 i=1650 i=1651 i=1652 i=1653 i=1654 i=1655 i=1656 i=1657 i=1658 i=1659 i=1660 i=1661 i=1662 i=1663 i=1664 i=1665 i=1666 i=1667 i=1668 i=1669 i=1670 i=1671 i=1672 i=1673 i=1674 i=1675 i=1676 i=1677 i=1678 i=1679 i=1680 i=1681 i=1682 i=1683 i=1684 i=1685 i=1686 i=1687 i=1688 i=1689 i=1690 i=1691 i=1692 i=1693 i=1694 i=1695 i=1696 i=1697 i=1698 i=1699 i=1700 i=1701 i=1702 i=1703 i=1704 i=1705 i=1706 i=1707 i=1708 i=1709 i=1710 i=1711 i=1712 i=1713 i=1714 i=1715 i=1716 i=1717 i=1718 i=1719 i=1720 i=1721 i=1722 i=1723 i=1724 i=1725 i=1726 i=1727 i=1728 i=1729 i=1730 i=1731 i=1732 i=1733 i=1734 i=1735 i=1736 i=1737 i=1738 i=1739 i=1740 i=1741 i=1742 i=1743 i=1744 i=1745 i=1746 i=1747 i=1748 i=1749 i=1750 i=1751 i=1752 i=1753 i=1754 i=1755 i=1756 i=1757 i=1758 i=1759 i=1760 i=1761 i=1762 i=1763 i=1764 i=1765 i=1766 i=1767 i=1768 i=1769 i=1770 i=1771 i=1772 i=1773 i=1774 i=1775 i=1776 i=1777 i=1778 i=1779 i=1780 i=1781 i=1782 i=1783 i=1784 i=1785 i=1786 i=1787 i=1788 i=1789 i=1790 i=1791 i=1792 i=1793 i=1794 i=1795 i=1796 i=1797 i=1798 i=1799 i=1800 i=1801 i=1802 i=1803 i=1804 i=1805 i=1806 i=1807 i=1808 i=1809 i=1810 i=1811 i=1812 i=1813 i=1814 i=1815 i=1816 i=1817 i=1818 i=1819 i=1820 i=1821 i=1822 i=1823 i=1824 i=1825 i=1826 i=1827 i=1828 i=1829 i=1830 i=1831 i=1832 i=1833 i=1834 i=1835 i=1836 i=1837 i=1838 i=1839 i=1840 i=1841 i=1842 i=1843 i=1844 i=1845 i=1846 i=1847 i=1848 i=1849 i=1850 i=1851 i=1852 i=1853 i=1854 i=1855 i=1856 i=1857 i=1858 i=1859 i=1860 i=1861 i=1862 i=1863 i=1864 i=1865 i=1866 i=1867 i=1868 i=1869 i=1870 i=1871 i=1872 i=1873 i=1874 i=1875 i=1876 i=1877 i=1878 i=1879 i=1880 i=1881 i=1882 i=1883 i=1884 i=1885 i=1886 i=1887 i=1888 i=1889 i=1890 i=1891 i=1892 i=1893 i=1894 i=1895 i=1896 i=1897 i=1898 i=1899 i=1900 i=1901 i=1902 i=1903 i=1904 i=1905 i=1906 i=1907 i=1908 i=1909 i=1910 i=1911 i=1912 i=1913 i=1914 i=1915 i=1916 i=1917 i=1918 i=1919 i=1920 i=1921 i=1922 i=1923 i=1924 i=1925 i=1926 i=1927 i=1928 i=1929 i=1930 i=1931 i=1932 i=1933 i=1934 i=1935 i=1936 i=1937 i=1938 i=1939 i=1940 i=1941 i=1942 i=1943 i=1944 i=1945 i=1946 i=1947 i=1948 i=1949 i=1950 i=1951 i=1952 i=1953 i=1954 i=1955 i=1956 i=1957 i=1958 i=1959 i=1960 i=1961 i=1962 i=1963 i=1964 i=1965 i=1966 i=1967 i=1968 i=1969 i=1970 i=1971 i=1972 i=1973 i=1974 i=1975 i=1976 i=1977 i=1978 i=1979 i=1980 i=1981 i=1982 i=1983 i=1984 i=1985 i=1986 i=1987 i=1988 i=1989 i=1990 i=1991 i=1992 i=1993 i=1994 i=1995 i=1996 i=1997 i=1998 i=1999 i=2000 i=2001 i=2002 i=2003 i=2004 i=2005 i=2006 i=2007 i=2008 i=2009 i=2010 i=2011 i=2012 i=2013 i=2014 i=2015 i=2016 i=2017 i=2018 i=2019 i=2020 i=2021 i=2022 i=2023 i=2024 i=2025 i=2026 i=2027 i=2028 i=2029 i=2030 i=2031 i=2032 i=2033 i=2034 i=2035 i=2036 i=2037 i=2038 i=2039 i=2040 i=2041 i=2042 i=2043 i=2044 i=2045 i=2046 i=2047 i=2048 i=2049 i=2050 i=2051 i=2052 i=2053 i=2054 i=2055 i=2056 i=2057 i=2058 i=2059 i=2060 i=2061 i=2062 i=2063 i=2064 i=2065 i=2066 i=2067 i=2068 i=2069 i=2070 i=2071 i=2072 i=2073 i=2074 i=2075 i=2076 i=2077 i=2078 i=2079 i=2080 i=2081 i=2082 i=2083 i=2084 i=2085 i=2086 i=2087 i=2088 i=2089 i=2090 i=2091 i=2092 i=2093 i=2094 i=2095 i=2096 i=2097 i=2098 i=2099 i=2100 i=2101 i=2102 i=2103 i=2104 i=2105 i=2106 i=2107 i=2108 i=2109 i=2110 i=2111 i=2112 i=2113 i=2114 i=2115 i=2116 i=2117 i=2118 i=2119 i=2120 i=2121 i=2122 i=2123 i=2124 i=2125 i=2126 i=2127 i=2128 i=2129 i=2130 i=2131 i=2132 i=2133 i=2134 i=2135 i=2136 i=2137 i=2138 i=2139 i=2140 i=2141 i=2142 i=2143 i=2144 i=2145 i=2146 i=2147 i=2148 i=2149 i=2150 i=2151 i=2152 i=2153 i=2154 i=2155 i=2156 i=2157 i=2158 i=2159 i=2160 i=2161 i=2162 i=2163 i=2164 i=2165 i=2166 i=2167 i=2168 i=2169 i=2170 i=2171 i=2172 i=2173 i=2174 i=2175 i=2176 i=2177 i=2178 i=2179 i=2180 i=2181 i=2182 i=2183 i=2184 i=2185 i=2186 i=2187 i=2188 i=2189 i=2190 i=2191 i=2192 i=2193 i=2194 i=2195 i=2196 i=2197 i=2198 i=2199 i=2200 i=2201 i=2202 i=2203 i=2204 i=2205 i=2206 i=2207 i=2208 i=2209 i=2210 i=2211 i=2212 i=2213 i=2214 i=2215 i=2216 i=2217 i=2218 i=2219 i=2220 i=2221 i=2222 i=2223 i=2224 i=2225 i=2226 i=2227 i=2228 i=2229 i=2230 i=2231 i=2232 i=2233 i=2234 i=2235 i=2236 i=2237 i=2238 i=2239 i=2240 i=2241 i=2242 i=2243 i=2244 i=2245 i=2246 i=2247 i=2248 i=2249 i=2250 i=2251 i=2252 i=2253 i=2254 i=2255 i=2256 i=2257 i=2258 i=2259 i=2260 i=2261 i=2262 i=2263 i=2264 i=2265 i=2266 i=2267 i=2268 i=2269 i=2270 i=2271 i=2272 i=2273 i=2274 i=2275 i=2276 i=2277 i=2278 i=2279 i=2280 i=2281 i=2282 i=2283 i=2284 i=2285 i=2286 i=2287 i=2288 i=2289 i=2290 i=2291 i=2292 i=2293 i=2294 i=2295 i=2296 i=2297 i=2298 i=2299 i=2300 i=2301 i=2302 i=2303 i=2304 i=2305 i=2306 i=2307 i=2308 i=2309 i=2310 i=2311 i=2312 i=2313 i=2314 i=2315 i=2316 i=2317 i=2318 i=2319 i=2320 i=2321 i=2322 i=2323 i=2324 i=2325 i=2326 i=2327 i=2328 i=2329 i=2330 i=2331 i=2332 i=2333 i=2334 i=2335 i=2336 i=2337 i=2338 i=2339 i=2340 i=2341 i=2342 i=2343 i=2344 i=2345 i=2346 i=2347 i=2348 i=2349 i=2350 i=2351 i=2352 i=2353 i=2354 i=2355 i=2356 i=2357 i=2358 i=2359 i=2360 i=2361 i=2362 i=2363 i=2364 i=2365 i=2366 i=2367 i=2368 i=2369 i=2370 i=2371 i=2372 i=2373 i=2374 i=2375 i=2376 i=2377 i=2378 i=2379 i=2380 i=2381 i=2382 i=2383 i=2384 i=2385 i=2386 i=2387 i=2388 i=2389 i=2390 i=2391 i=2392 i=2393 i=2394 i=2395 i=2396 i=2397 i=2398 i=2399 i=2400 i=2401 i=2402 i=2403 i=2404 i=2405 i=2406 i=2407 i=2408 i=2409 i=2410 i=2411 i=2412 i=2413 i=2414 i=2415 i=2416 i=2417 i=2418 i=2419 i=2420 i=2421 i=2422 i=2423 i=2424 i=2425 i=2426 i=2427 i=2428 i=2429 i=2430 i=2431 i=2432 i=2433 i=2434 i=2435 i=2436 i=2437 i=2438 i=2439 i=2440 i=2441 i=2442 i=2443 i=2444 i=2445 i=2446 i=2447 i=2448 i=2449 i=2450 i=2451 i=2452 i=2453 i=2454 i=2455 i=2456 i=2457 i=2458 i=2459 i=2460 i=2461 i=2462 i=2463 i=2464 i=2465 i=2466 i=2467 i=2468 i=2469 i=2470 i=2471 i=2472 i=2473 i=2474 i=2475 i=2476 i=2477 i=2478 i=2479 i=2480 i=2481 i=2482 i=2483 i=2484 i=2485 i=2486 i=2487 i=2488 i=2489 i=2490 i=2491 i=2492 i=2493 i=2494 i=2495 i=2496 i=2497 i=2498 i=2499 i=2500 i=2501 i=2502 i=2503 i=2504 i=2505 i=2506 i=2507 i=2508 i=2509 i=2510 i=2511 i=2512 i=2513 i=2514 i=2515 i=2516 i=2517 i=2518 i=2519 i=2520 i=2521 i=2522 i=2523 i=2524 i=2525 i=2526 i=2527 i=2528 i=2529 i=2530 i=2531 i=2532 i=2533 i=2534 i=2535 i=2536 i=2537 i=2538 i=2539 i=2540 i=2541 i=2542 i=2543 i=2544 i=2545 i=2546 i=2547 i=2548 i=2549 i=2550 i=2551 i=2552 i=2553 i=2554 i=2555 i=2556 i=2557 i=2558 i=2559 i=2560 i=2561 i=2562 i=2563 i=2564 i=2565 i=2566 i=2567 i=2568 i=2569 i=2570 i=2571 i=2572 i=2573 i=2574 i=2575 i=2576 i=2577 i=2578 i=2579 i=2580 i=2581 i=2582 i=2583 i=2584 i=2585 i=2586 i=2587 i=2588 i=2589 i=2590 i=2591 i=2592 i=2593 i=2594 i=2595 i=2596 i=2597 i=2598 i=2599 i=2600 i=2601 i=2602 i=2603 i=2604 i=2605 i=2606 i=2607 i=2608 i=2609 i=2610 i=2611 i=2612 i=2613 i=2614 i=2615 i=2616 i=2617 i=2618 i=2619 i=2620 i=2621 i=2622 i=2623 i=2624 i=2625 i=2626 i=2627 i=2628 i=2629 i=2630 i=2631 i=2632 i=2633 i=2634 i=2635 i=2636 i=2637 i=2638 i=2639 i=2640 i=2641 i=2642 i=2643 i=2644 i=2645 i=2646 i=2647 i=2648 i=2649 i=2650 i=2651 i=2652 i=2653 i=2654 i=2655 i=2656 i=2657 i=2658 i=2659 i=2660 i=2661 i=2662 i=2663 i=2664 i=2665 i=2666 i=2667 i=2668 i=2669 i=2670 i=2671 i=2672 i=2673 i=2674 i=2675 i=2676 i=2677 i=2678 i=2679 i=2680 i=2681 i=2682 i=2683 i=2684 i=2685 i=2686 i=2687 i=2688 i=2689 i=2690 i=2691 i=2692 i=2693 i=2694 i=2695 i=2696 i=2697 i=2698 i=2699 i=2700 i=2701 i=2702 i=2703 i=2704 i=2705 i=2706 i=2707 i=2708 i=2709 i=2710 i=2711 i=2712 i=2713 i=2714 i=2715 i=2716 i=2717 i=2718 i=2719 i=2720 i=2721 i=2722 i=2723 i=2724 i=2725 i=2726 i=2727 i=2728 i=2729 i=2730 i=2731 i=2732 i=2733 i=2734 i=2735 i=2736 i=2737 i=2738 i=2739 i=2740 i=2741 i=2742 i=2743 i=2744 i=2745 i=2746 i=2747 i=2748 i=2749 i=2750 i=2751 i=2752 i=2753 i=2754 i=2755 i=2756 i=2757 i=2758 i=2759 i=2760 i=2761 i=2762 i=2763 i=2764 i=2765 i=2766 i=2767 i=2768 i=2769 i=2770 i=2771 i=2772 i=2773 i=2774 i=2775 i=2776 i=2777 i=2778 i=2779 i=2780 i=2781 i=2782 i=2783 i=2784 i=2785 i=2786 i=2787 i=2788 i=2789 i=2790 i=2791 i=2792 i=2793 i=2794 i=2795 i=2796 i=2797 i=2798 i=2799 i=2800 i=2801 i=2802 i=2803 i=2804 i=2805 i=2806 i=2807 i=2808 i=2809 i=2810 i=2811 i=2812 i=2813 i=2814 i=2815 i=2816 i=2817 i=2818 i=2819 i=2820 i=2821 i=2822 i=2823 i=2824 i=2825 i=2826 i=2827 i=2828 i=2829 i=2830 i=2831 i=2832 i=2833 i=2834 i=2835 i=2836 i=2837 i=2838 i=2839 i=2840 i=2841 i=2842 i=2843 i=2844 i=2845 i=2846 i=2847 i=2848 i=2849 i=2850 i=2851 i=2852 i=2853 i=2854 i=2855 i=2856 i=2857 i=2858 i=2859 i=2860 i=2861 i=2862 i=2863 i=2864 i=2865 i=2866 i=2867 i=2868 i=2869 i=2870 i=2871 i=2872 i=2873 i=2874 i=2875 i=2876 i=2877 i=2878 i=2879 i=2880 i=2881 i=2882 i=2883 i=2884 i=2885 i=2886 i=2887 i=2888 i=2889 i=2890 i=2891 i=2892 i=2893 i=2894 i=2895 i=2896 i=2897 i=2898 i=2899 i=2900 i=2901 i=2902 i=2903 i=2904 i=2905 i=2906 i=2907 i=2908 i=2909 i=2910 i=2911 i=2912 i=2913 i=2914 i=2915 i=2916 i=2917 i=2918 i=2919 i=2920 i=2921 i=2922 i=2923 i=2924 i=2925 i=2926 i=2927 i=2928 i=2929 i=2930 i=2931 i=2932 i=2933 i=2934 i=2935 i=2936 i=2937 i=2938 i=2939 i=2940 i=2941 i=2942 i=2943 i=2944 i=2945 i=2946 i=2947 i=2948 i=2949 i=2950 i=2951 i=2952 i=2953 i=2954 i=2955 i=2956 i=2957 i=2958 i=2959 i=2960 i=2961 i=2962 i=2963 i=2964 i=2965 i=2966 i=2967 i=2968 i=2969 i=2970 i=2971 i=2972 i=2973 i=2974 i=2975 i=2976 i=2977 i=2978 i=2979 i=2980 i=2981 i=2982 i=2983 i=2984 i=2985 i=2986 i=2987 i=2988 i=2989 i=2990 i=2991 i=2992 i=2993 i=2994 i=2995 i=2996 i=2997 i=2998 i=2999 i=3000 i=3001 i=3002 i=3003 i=3004 i=3005 i=3006 i=3007 i=3008 i=3009 i=3010 i=3011 i=3012 i=3013 i=3014 i=3015 i=3016 i=3017 i=3018 i=3019 i=3020 i=3021 i=3022 i=3023 i=3024 i=3025 i=3026 i=3027 i=3028 i=3029 i=3030 i=3031 i=3032 i=3033 i=3034 i=3035 i=3036 i=3037 i=3038 i=3039 i=3040 i=3041 i=3042 i=3043 i=3044 i=3045 i=3046 i=3047 i=3048 i=3049 i=3050 i=3051 i=3052 i=3053 i=3054 i=3055 i=3056 i=3057 i=3058 i=3059 i=3060 i=3061 i=3062 i=3063 i=3064 i=3065 i=3066 i=3067 i=3068 i=3069 i=3070 i=3071 i=3072 i=3073 i=3074 i=3075 i=3076 i=3077 i=3078 i=3079 i=3080 i=3081 i=3082 i=3083 i=3084 i=3085 i=3086 i=3087 i=3088 i=3089 i=3090 i=3091 i=3092 i=3093 i=3094 i=3095 i=3096 i=3097 i=3098 i=3099 i=3100 i=3101 i=3102 i=3103 i=3104 i=3105 i=3106 i=3107 i=3108 i=3109 i=3110 i=3111 i=3112 i=3113 i=3114 i=3115 i=3116 i=3117 i=3118 i=3119 i=3120 i=3121 i=3122 i=3123 i=3124 i=3125 i=3126 i=3127 i=3128 i=3129 i=3130 i=3131 i=3132 i=3133 i=3134 i=3135 i=3136 i=3137 i=3138 i=3139 i=3140 i=3141 i=3142 i=3143 i=3144 i=3145 i=3146 i=3147 i=3148 i=3149 i=3150 i=3151 i=3152 i=3153 i=3154 i=3155 i=3156 i=3157 i=3158 i=3159 i=3160 i=3161 i=3162 i=3163 i=3164 i=3165 i=3166 i=3167 i=3168 i=3169 i=3170 i=3171 i=3172 i=3173 i=3174 i=3175 i=3176 i=3177 i=3178 i=3179 i=3180 i=3181 i=3182 i=3183 i=3184 i=3185 i=3186 i=3187 i=3188 i=3189 i=3190 i=3191 i=3192 i=3193 i=3194 i=3195 i=3196 i=3197 i=3198 i=3199 i=3200 i=3201 i=3202 i=3203 i=3204 i=3205 i=3206 i=3207 i=3208 i=3209 i=3210 i=3211 i=3212 i=3213 i=3214 i=3215 i=3216 i=3217 i=3218 i=3219 i=3220 i=3221 i=3222 i=3223 i=3224 i=3225 i=3226 i=3227 i=3228 i=3229 i=3230 i=3231 i=3232 i=3233 i=3234 i=3235 i=3236 i=3237 i=3238 i=3239 i=3240 i=3241 i=3242 i=3243 i=3244 i=3245 i=3246 i=3247 i=3248 i=3249 i=3250 i=3251 i=3252 i=3253 i=3254 i=3255 i=3256 i=3257 i=3258 i=3259 i=3260 i=3261 i=3262 i=3263 i=3264 i=3265 i=3266 i=3267 i=3268 i=3269 i=3270 i=3271 i=3272 i=3273 i=3274 i=3275 i=3276 i=3277 i=3278 i=3279 i=3280 i=3281 i=3282 i=3283 i=3284 i=3285 i=3286 i=3287 i=3288 i=3289 i=3290 i=3291 i=3292 i=3293 i=3294 i=3295 i=3296 i=3297 i=3298 i=3299 i=3300 i=3301 i=3302 i=3303 i=3304 i=3305 i=3306 i=3307 i=3308 i=3309 i=3310 i=3311 i=3312 i=3313 i=3314 i=3315 i=3316 i=3317 i=3318 i=3319 i=3320 i=3321 i=3322 i=3323 i=3324 i=3325 i=3326 i=3327 i=3328 i=3329 i=3330 i=3331 i=3332 i=3333 i=3334 i=3335 i=3336 i=3337 i=3338 i=3339 i=3340 i=3341 i=3342 i=3343 i=3344 i=3345 i=3346 i=3347 i=3348 i=3349 i=3350 i=3351 i=3352 i=3353 i=3354 i=3355 i=3356 i=3357 i=3358 i=3359 i=3360 i=3361 i=3362 i=3363 i=3364 i=3365 i=3366 i=3367 i=3368 i=3369 i=3370 i=3371 i=3372 i=3373 i=3374 i=3375 i=3376 i=3377 i=3378 i=3379 i=3380 i=3381 i=3382 i=3383 i=3384 i=3385 i=3386 i=3387 i=3388 i=3389 i=3390 i=3391 i=3392 i=3393 i=3394 i=3395 i=3396 i=3397 i=3398 i=3399 i=3400 i=3401 i=3402 i=3403 i=3404 i=3405 i=3406 i=3407 i=3408 i=3409 i=3410 i=3411 i=3412 i=3413 i=3414 i=3415 i=3416 i=3417 i=3418 i=3419 i=3420 i=3421 i=3422 i=3423 i=3424 i=3425 i=3426 i=3427 i=3428 i=3429 i=3430 i=3431 i=3432 i=3433 i=3434 i=3435 i=3436 i=3437 i=3438 i=3439 i=3440 i=3441 i=3442 i=3443 i=3444 i=3445 i=3446 i=3447 i=3448 i=3449 i=3450 i=3451 i=3452 i=3453 i=3454 i=3455 i=3456 i=3457 i=3458 i=3459 i=3460 i=3461 i=3462 i=3463 i=3464 i=3465 i=3466 i=3467 i=3468 i=3469 i=3470 i=3471 i=3472 i=3473 i=3474 i=3475 i=3476 i=3477 i=3478 i=3479 i=3480 i=3481 i=3482 i=3483 i=3484 i=3485 i=3486 i=3487 i=3488 i=3489 i=3490 i=3491 i=3492 i=3493 i=3494 i=3495 i=3496 i=3497 i=3498 i=3499 i=3500 i=3501 i=3502 i=3503 i=3504 i=3505 i=3506 i=3507 i=3508 i=3509 i=3510 i=3511 i=3512 i=3513 i=3514 i=3515 i=3516 i=3517 i=3518 i=3519 i=3520 i=3521 i=3522 i=3523 i=3524 i=3525 i=3526 i=3527 i=3528 i=3529 i=3530 i=3531 i=3532 i=3533 i=3534 i=3535 i=3536 i=3537 i=3538 i=3539 i=3540 i=3541 i=3542 i=3543 i=3544 i=3545 i=3546 i=3547 i=3548 i=3549 i=3550 i=3551 i=3552 i=3553 i=3554 i=3555 i=3556 i=3557 i=3558 i=3559 i=3560 i=3561 i=3562 i=3563 i=3564 i=3565 i=3566 i=3567 i=3568 i=3569 i=3570 i=3571 i=3572 i=3573 i=3574 i=3575 i=3576 i=3577 i=3578 i=3579 i=3580 i=3581 i=3582 i=3583 i=3584 i=3585 i=3586 i=3587 i=3588 i=3589 i=3590 i=3591 i=3592 i=3593 i=3594 i=3595 i=3596 i=3597 i=3598 i=3599 i=3600 i=3601 i=3602 i=3603 i=3604 i=3605 i=3606 i=3607 i=3608 i=3609 i=3610 i=3611 i=3612 i=3613 i=3614 i=3615 i=3616 i=3617 i=3618 i=3619 i=3620 i=3621 i=3622 i=3623 i=3624 i=3625 i=3626 i=3627 i=3628 i=3629 i=3630 i=3631 i=3632 i=3633 i=3634 i=3635 i=3636 i=3637 i=3638 i=3639 i=3640 i=3641 i=3642 i=3643 i=3644 i=3645 i=3646 i=3647 i=3648 i=3649 i=3650 i=3651 i=3652 i=3653 i=3654 i=3655 i=3656 i=3657 i=3658 i=3659 i=3660 i=3661 i=3662 i=3663 i=3664 i=3665 i=3666 i=3667 i=3668 i=3669 i=3670 i=3671 i=3672 i=3673 i=3674 i=3675 i=3676 i=3677 i=3678 i=3679 i=3680 i=3681 i=3682 i=3683 i=3684 i=3685 i=3686 i=3687 i=3688 i=3689 i=3690 i=3691 i=3692 i=3693 i=3694 i=3695 i=3696 i=3697 i=3698 i=3699 i=3700 i=3701 i=3702 i=3703 i=3704 i=3705 i=3706 i=3707 i=3708 i=3709 i=3710 i=3711 i=3712 i=3713 i=3714 i=3715 i=3716 i=3717 i=3718 i=3719 i=3720 i=3721 i=3722 i=3723 i=3724 i=3725 i=3726 i=3727 i=3728 i=3729 i=3730 i=3731 i=3732 i=3733 i=3734 i=3735 i=3736 i=3737 i=3738 i=3739 i=3740 i=3741 i=3742 i=3743 i=3744 i=3745 i=3746 i=3747 i=3748 i=3749 i=3750 i=3751 i=3752 i=3753 i=3754 i=3755 i=3756 i=3757 i=3758 i=3759 i=3760 i=3761 i=3762 i=3763 i=3764 i=3765 i=3766 i=3767 i=3768 i=3769 i=3770 i=3771 i=3772 i=3773 i=3774 i=3775 i=3776 i=3777 i=3778 i=3779 i=3780 i=3781 i=3782 i=3783 i=3784 i=3785 i=3786 i=3787 i=3788 i=3789 i=3790 i=3791 i=3792 i=3793 i=3794 i=3795 i=3796 i=3797 i=3798 i=3799 i=3800 i=3801 i=3802 i=3803 i=3804 i=3805 i=3806 i=3807 i=3808 i=3809 i=3810 i=3811 i=3812 i=3813 i=3814 i=3815 i=3816 i=3817 i=3818 i=3819 i=3820 i=3821 i=3822 i=3823 i=3824 i=3825 i=3826 i=3827 i=3828 i=3829 i=3830 i=3831 i=3832 i=3833 i=3834 i=3835 i=3836 i=3837 i=3838 i=3839 i=3840 i=3841 i=3842 i=3843 i=3844 i=3845 i=3846 i=3847 i=3848 i=3849 i=3850 i=3851 i=3852 i=3853 i=3854 i=3855 i=3856 i=3857 i=3858 i=3859 i=3860 i=3861 i=3862 i=3863 i=3864 i=3865 i=3866 i=3867 i=3868 i=3869 i=3870 i=3871 i=3872 i=3873 i=3874 i=3875 i=3876 i=3877 i=3878 i=3879 i=3880 i=3881 i=3882 i=3883 i=3884 i=3885 i=3886 i=3887 i=3888 i=3889 i=3890 i=3891 i=3892 i=3893 i=3894 i=3895 i=3896 i=3897 i=3898 i=3899 i=3900 i=3901 i=3902 i=3903 i=3904 i=3905 i=3906 i=3907 i=3908 i=3909 i=3910 i=3911 i=3912 i=3913 i=3914 i=3915 i=3916 i=3917 i=3918 i=3919 i=3920 i=3921 i=3922 i=3923 i=3924 i=3925 i=3926 i=3927 i=3928 i=3929 i=3930 i=3931 i=3932 i=3933 i=3934 i=3935 i=3936 i=3937 i=3938 i=3939 i=3940 i=3941 i=3942 i=3943 i=3944 i=3945 i=3946 i=3947 i=3948 i=3949 i=3950 i=3951 i=3952 i=3953 i=3954 i=3955 i=3956 i=3957 i=3958 i=3959 i=3960 i=3961 i=3962 i=3963 i=3964 i=3965 i=3966 i=3967 i=3968 i=3969 i=3970 i=3971 i=3972 i=3973 i=3974 i=3975 i=3976 i=3977 i=3978 i=3979 i=3980 i=3981 i=3982 i=3983 i=3984 i=3985 i=3986 i=3987 i=3988 i=3989 i=3990 i=3991 i=3992 i=3993 i=3994 i=3995 i=3996 i=3997 i=3998 i=3999 i=4000 i=4001 i=4002 i=4003 i=4004 i=4005 i=4006 i=4007 i=4008 i=4009 i=4010 i=4011 i=4012 i=4013 i=4014 i=4015 i=4016 i=4017 i=4018 i=4019 i=4020 i=4021 i=4022 i=4023 i=4024 i=4025 i=4026 i=4027 i=4028 i=4029 i=4030 i=4031 i=4032 i=4033 i=4034 i=4035 i=4036 i=4037 i=4038 i=4039 i=4040 i=4041 i=4042 i=4043 i=4044 i=4045 i=4046 i=4047 i=4048 i=4049 i=4050 i=4051 i=4052 i=4053 i=4054 i=4055 i=4056 i=4057 i=4058 i=4059 i=4060 i=4061 i=4062 i=4063 i=4064 i=4065 i=4066 i=4067 i=4068 i=4069 i=4070 i=4071 i=4072 i=4073 i=4074 i=4075 i=4076 i=4077 i=4078 i=4079 i=4080 i=4081 i=4082 i=4083 i=4084 i=4085 i=4086 i=4087 i=4088 i=4089 i=4090 i=4091 i=4092 i=4093 i=4094 i=4095 i=4096 i=4097 i=4098 i=4099 i=4100 i=4101 i=4102 i=4103 i=4104 i=4105 i=4106 i=4107 i=4108 i=4109 i=4110 i=4111 i=4112 i=4113 i=4114 i=4115 i=4116 i=4117 i=4118 i=4119 i=4120 i=4121 i=4122 i=4123 i=4124 i=4125 i=4126 i=4127 i=4128 i=4129 i=4130 i=4131 i=4132 i=4133 i=4134 i=4135 i=4136 i=4137 i=4138 i=4139 i=4140 i=4141 i=4142 i=4143 i=4144 i=4145 i=4146 i=4147 i=4148 i=4149 i=4150 i=4151 i=4152 i=4153 i=4154 i=4155 i=4156 i=4157 i=4158 i=4159 i=4160 i=4161 i=4162 i=4163 i=4164 i=4165 i=4166 i=4167 i=4168 i=4169 i=4170 i=4171 i=4172 i=4173 i=4174 i=4175 i=4176 i=4177 i=4178 i=4179 i=4180 i=4181 i=4182 i=4183 i=4184 i=4185 i=4186 i=4187 i=4188 i=4189 i=4190 i=4191 i=4192 i=4193 i=4194 i=4195 i=4196 i=4197 i=4198 i=4199 i=4200 i=4201 i=4202 i=4203 i=4204 i=4205 i=4206 i=4207 i=4208 i=4209 i=4210 i=4211 i=4212 i=4213 i=4214 i=4215 i=4216 i=4217 i=4218 i=4219 i=4220 i=4221 i=4222 i=4223 i=4224 i=4225 i=4226 i=4227 i=4228 i=4229 i=4230 i=4231 i=4232 i=4233 i=4234 i=4235 i=4236 i=4237 i=4238 i=4239 i=4240 i=4241 i=4242 i=4243 i=4244 i=4245 i=4246 i=4247 i=4248 i=4249 i=4250 i=4251 i=4252 i=4253 i=4254 i=4255 i=4256 i=4257 i=4258 i=4259 i=4260 i=4261 i=4262 i=4263 i=4264 i=4265 i=4266 i=4267 i=4268 i=4269 i=4270 i=4271 i=4272 i=4273 i=4274 i=4275 i=4276 i=4277 i=4278 i=4279 i=4280 i=4281 i=4282 i=4283 i=4284 i=4285 i=4286 i=4287 i=4288 i=4289 i=4290 i=4291 i=4292 i=4293 i=4294 i=4295 i=4296 i=4297 i=4298 i=4299 i=4300 i=4301 i=4302 i=4303 i=4304 i=4305 i=4306 i=4307 i=4308 i=4309 i=4310 i=4311 i=4312 i=4313 i=4314 i=4315 i=4316 i=4317 i=4318 i=4319 i=4320 i=4321 i=4322 i=4323 i=4324 i=4325 i=4326 i=4327 i=4328 i=4329 i=4330 i=4331 i=4332 i=4333 i=4334 i=4335 i=4336 i=4337 i=4338 i=4339 i=4340 i=4341 i=4342 i=4343 i=4344 i=4345 i=4346 i=4347 i=4348 i=4349 i=4350 i=4351 i=4352 i=4353 i=4354 i=4355 i=4356 i=4357 i=4358 i=4359 i=4360 i=4361 i=4362 i=4363 i=4364 i=4365 i=4366 i=4367 i=4368 i=4369 i=4370 i=4371 i=4372 i=4373 i=4374 i=4375 i=4376 i=4377 i=4378 i=4379 i=4380 i=4381 i=4382 i=4383 i=4384 i=4385 i=4386 i=4387 i=4388 i=4389 i=4390 i=4391 i=4392 i=4393 i=4394 i=4395 i=4396 i=4397 i=4398 i=4399 i=4400 i=4401 i=4402 i=4403 i=4404 i=4405 i=4406 i=4407 i=4408 i=4409 i=4410 i=4411 i=4412 i=4413 i=4414 i=4415 i=4416 i=4417 i=4418 i=4419 i=4420 i=4421 i=4422 i=4423 i=4424 i=4425 i=4426 i=4427 i=4428 i=4429 i=4430 i=4431 i=4432 i=4433 i=4434 i=4435 i=4436 i=4437 i=4438 i=4439 i=4440 i=4441 i=4442 i=4443 i=4444 i=4445 i=4446 i=4447 i=4448 i=4449 i=4450 i=4451 i=4452 i=4453 i=4454 i=4455 i=4456 i=4457 i=4458 i=4459 i=4460 i=4461 i=4462 i=4463 i=4464 i=4465 i=4466 i=4467 i=4468 i=4469 i=4470 i=4471 i=4472 i=4473 i=4474 i=4475 i=4476 i=4477 i=4478 i=4479 i=4480 i=4481 i=4482 i=4483 i=4484 i=4485 i=4486 i=4487 i=4488 i=4489 i=4490 i=4491 i=4492 i=4493 i=4494 i=4495 i=4496 i=4497 i=4498 i=4499 i=4500 i=4501 i=4502 i=4503 i=4504 i=4505 i=4506 i=4507 i=4508 i=4509 i=4510 i=4511 i=4512 i=4513 i=4514 i=4515 i=4516 i=4517 i=4518 i=4519 i=4520 i=4521 i=4522 i=4523 i=4524 i=4525 i=4526 i=4527 i=4528 i=4529 i=4530 i=4531 i=4532 i=4533 i=4534 i=4535 i=4536 i=4537 i=4538 i=4539 i=4540 i=4541 i=4542 i=4543 i=4544 i=4545 i=4546 i=4547 i=4548 i=4549 i=4550 i=4551 i=4552 i=4553 i=4554 i=4555 i=4556 i=4557 i=4558 i=4559 i=4560 i=4561 i=4562 i=4563 i=4564 i=4565 i=4566 i=4567 i=4568 i=4569 i=4570 i=4571 i=4572 i=4573 i=4574 i=4575 i=4576 i=4577 i=4578 i=4579 i=4580 i=4581 i=4582 i=4583 i=4584 i=4585 i=4586 i=4587 i=4588 i=4589 i=4590 i=4591 i=4592 i=4593 i=4594 i=4595 i=4596 i=4597 i=4598 i=4599 i=4600 i=4601 i=4602 i=4603 i=4604 i=4605 i=4606 i=4607 i=4608 i=4609 i=4610 i=4611 i=4612 i=4613 i=4614 i=4615 i=4616 i=4617 i=4618 i=4619 i=4620 i=4621 i=4622 i=4623 i=4624 i=4625 i=4626 i=4627 i=4628 i=4629 i=4630 i=4631 i=4632 i=4633 i=4634 i=4635 i=4636 i=4637 i=4638 i=4639 i=4640 i=4641 i=4642 i=4643 i=4644 i=4645 i=4646 i=4647 i=4648 i=4649 i=4650 i=4651 i=4652 i=4653 i=4654 i=4655 i=4656 i=4657 i=4658 i=4659 i=4660 i=4661 i=4662 i=4663 i=4664 i=4665 i=4666 i=4667 i=4668 i=4669 i=4670 i=4671 i=4672 i=4673 i=4674 i=4675 i=4676 i=4677 i=4678 i=4679 i=4680 i=4681 i=4682 i=4683 i=4684 i=4685 i=4686 i=4687 i=4688 i=4689 i=4690 i=4691 i=4692 i=4693 i=4694 i=4695 i=4696 i=4697 i=4698 i=4699 i=4700 i=4701 i=4702 i=4703 i=4704 i=4705 i=4706 i=4707 i=4708 i=4709 i=4710 i=4711 i=4712 i=4713 i=4714 i=4715 i=4716 i=4717 i=4718 i=4719 i=4720 i=4721 i=4722 i=4723 i=4724 i=4725 i=4726 i=4727 i=4728 i=4729 i=4730 i=4731 i=4732 i=4733 i=4734 i=4735 i=4736 i=4737 i=4738 i=4739 i=4740 i=4741 i=4742 i=4743 i=4744 i=4745 i=4746 i=4747 i=4748 i=4749 i=4750 i=4751 i=4752 i=4753 i=4754 i=4755 i=4756 i=4757 i=4758 i=4759 i=4760 i=4761 i=4762 i=4763 i=4764 i=4765 i=4766 i=4767 i=4768 i=4769 i=4770 i=4771 i=4772 i=4773 i=4774 i=4775 i=4776 i=4777 i=4778 i=4779 i=4780 i=4781 i=4782 i=4783 i=4784 i=4785 i=4786 i=4787 i=4788 i=4789 i=4790 i=4791 i=4792 i=4793 i=4794 i=4795 i=4796 i=4797 i=4798 i=4799 i=4800 i=4801 i=4802 i=4803 i=4804 i=4805 i=4806 i=4807 i=4808 i=4809 i=4810 i=4811 i=4812 i=4813 i=4814 i=4815 i=4816 i=4817 i=4818 i=4819 i=4820 i=4821 i=4822 i=4823 i=4824 i=4825 i=4826 i=4827 i=4828 i=4829 i=4830 i=4831 i=4832 i=4833 i=4834 i=4835 i=4836 i=4837 i=4838 i=4839 i=4840 i=4841 i=4842 i=4843 i=4844 i=4845 i=4846 i=4847 i=4848 i=4849 i=4850 i=4851 i=4852 i=4853 i=4854 i=4855 i=4856 i=4857 i=4858 i=4859 i=4860 i=4861 i=4862 i=4863 i=4864 i=4865 i=4866 i=4867 i=4868 i=4869 i=4870 i=4871 i=4872 i=4873 i=4874 i=4875 i=4876 i=4877 i=4878 i=4879 i=4880 i=4881 i=4882 i=4883 i=4884 i=4885 i=4886 i=4887 i=4888 i=4889 i=4890 i=4891 i=4892 i=4893 i=4894 i=4895 i=4896 i=4897 i=4898 i=4899 i=4900 i=4901 i=4902 i=4903 i=4904 i=4905 i=4906 i=4907 i=4908 i=4909 i=4910 i=4911 i=4912 i=4913 i=4914 i=4915 i=4916 i=4917 i=4918 i=4919 i=4920 i=4921 i=4922 i=4923 i=4924 i=4925 i=4926 i=4927 i=4928 i=4929 i=4930 i=4931 i=4932 i=4933 i=4934 i=4935 i=4936 i=4937 i=4938 i=4939 i=4940 i=4941 i=4942 i=4943 i=4944 i=4945 i=4946 i=4947 i=4948 i=4949 i=4950 i=4951 i=4952 i=4953 i=4954 i=4955 i=4956 i=4957 i=4958 i=4959 i=4960 i=4961 i=4962 i=4963 i=4964 i=4965 i=4966 i=4967 i=4968 i=4969 i=4970 i=4971 i=4972 i=4973 i=4974 i=4975 i=4976 i=4977 i=4978 i=4979 i=4980 i=4981 i=4982 i=4983 i=4984 i=4985 i=4986 i=4987 i=4988 i=4989 i=4990 i=4991 i=4992 i=4993 i=4994 i=4995 i=4996 i=4997 i=4998 i=4999 i=5000 i=5001 i=5002 i=5003 i=5004 i=5005 i=5006 i=5007 i=5008 i=5009 i=5010 i=5011 i=5012 i=5013 i=5014 i=5015 i=5016 i=5017 i=5018 i=5019 i=5020 i=5021 i=5022 i=5023 i=5024 i=5025 i=5026 i=5027 i=5028 i=5029 i=5030 i=5031 i=5032 i=5033 i=5034 i=5035 i=5036 i=5037 i=5038 i=5039 i=5040 i=5041 i=5042 i=5043 i=5044 i=5045 i=5046 i=5047 i=5048 i=5049 i=5050 i=5051 i=5052 i=5053 i=5054 i=5055 i=5056 i=5057 i=5058 i=5059 i=5060 i=5061 i=5062 i=5063 i=5064 i=5065 i=5066 i=5067 i=5068 i=5069 i=5070 i=5071 i=5072 i=5073 i=5074 i=5075 i=5076 i=5077 i=5078 i=5079 i=5080 i=5081 i=5082 i=5083 i=5084 i=5085 i=5086 i=5087 i=5088 i=5089 i=5090 i=5091 i=5092 i=5093 i=5094 i=5095 i=5096 i=5097 i=5098 i=5099 i=5100 i=5101 i=5102 i=5103 i=5104 i=5105 i=5106 i=5107 i=5108 i=5109 i=5110 i=5111 i=5112 i=5113 i=5114 i=5115 i=5116 i=5117 i=5118 i=5119 i=5120 i=5121 i=5122 i=5123 i=5124 i=5125 i=5126 i=5127 i=5128 i=5129 i=5130 i=5131 i=5132 i=5133 i=5134 i=5135 i=5136 i=5137 i=5138 i=5139 i=5140 i=5141 i=5142 i=5143 i=5144 i=5145 i=5146 i=5147 i=5148 i=5149 i=5150 i=5151 i=5152 i=5153 i=5154 i=5155 i=5156 i=5157 i=5158 i=5159 i=5160 i=5161 i=5162 i=5163 i=5164 i=5165 i=5166 i=5167 i=5168 i=5169 i=5170 i=5171 i=5172 i=5173 i=5174 i=5175 i=5176 i=5177 i=5178 i=5179 i=5180 i=5181 i=5182 i=5183 i=5184 i=5185 i=5186 i=5187 i=5188 i=5189 i=5190 i=5191 i=5192 i=5193 i=5194 i=5195 i=5196 i=5197 i=5198 i=5199 i=5200 i=5201 i=5202 i=5203 i=5204 i=5205 i=5206 i=5207 i=5208 i=5209 i=5210 i=5211 i=5212 i=5213 i=5214 i=5215 i=5216 i=5217 i=5218 i=5219 i=5220 i=5221 i=5222 i=5223 i=5224 i=5225 i=5226 i=5227 i=5228 i=5229 i=5230 i=5231 i=5232 i=5233 i=5234 i=5235 i=5236 i=5237 i=5238 i=5239 i=5240 i=5241 i=5242 i=5243 i=5244 i=5245 i=5246 i=5247 i=5248 i=5249 i=5250 i=5251 i=5252 i=5253 i=5254 i=5255 i=5256 i=5257 i=5258 i=5259 i=5260 i=5261 i=5262 i=5263 i=5264 i=5265 i=5266 i=5267 i=5268 i=5269 i=5270 i=5271 i=5272 i=5273 i=5274 i=5275 i=5276 i=5277 i=5278 i=5279 i=5280 i=5281 i=5282 i=5283 i=5284 i=5285 i=5286 i=5287 i=5288 i=5289 i=5290 i=5291 i=5292 i=5293 i=5294 i=5295 i=5296 i=5297 i=5298 i=5299 i=5300 i=5301 i=5302 i=5303 i=5304 i=5305 i=5306 i=5307 i=5308 i=5309 i=5310 i=5311 i=5312 i=5313 i=5314 i=5315 i=5316 i=5317 i=5318 i=5319 i=5320 i=5321 i=5322 i=5323 i=5324 i=5325 i=5326 i=5327 i=5328 i=5329 i=5330 i=5331 i=5332 i=5333 i=5334 i=5335 i=5336 i=5337 i=5338 i=5339 i=5340 i=5341 i=5342 i=5343 i=5344 i=5345 i=5346 i=5347 i=5348 i=5349 i=5350 i=5351 i=5352 i=5353 i=5354 i=5355 i=5356 i=5357 i=5358 i=5359 i=5360 i=5361 i=5362 i=5363 i=5364 i=5365 i=5366 i=5367 i=5368 i=5369 i=5370 i=5371 i=5372 i=5373 i=5374 i=5375 i=5376 i=5377 i=5378 i=5379 i=5380 i=5381 i=5382 i=5383 i=5384 i=5385 i=5386 i=5387 i=5388 i=5389 i=5390 i=5391 i=5392 i=5393 i=5394 i=5395 i=5396 i=5397 i=5398 i=5399 i=5400 i=5401 i=5402 i=5403 i=5404 i=5405 i=5406 i=5407 i=5408 i=5409 i=5410 i=5411 i=5412 i=5413 i=5414 i=5415 i=5416 i=5417 i=5418 i=5419 i=5420 i=5421 i=5422 i=5423 i=5424 i=5425 i=5426 i=5427 i=5428 i=5429 i=5430 i=5431 i=5432 i=5433 i=5434 i=5435 i=5436 i=5437 i=5438 i=5439 i=5440 i=5441 i=5442 i=5443 i=5444 i=5445 i=5446 i=5447 i=5448 i=5449 i=5450 i=5451 i=5452 i=5453 i=5454 i=5455 i=5456 i=5457 i=5458 i=5459 i=5460 i=5461 i=5462 i=5463 i=5464 i=5465 i=5466 i=5467 i=5468 i=5469 i=5470 i=5471 i=5472 i=5473 i=5474 i=5475 i=5476 i=5477 i=5478 i=5479 i=5480 i=5481 i=5482 i=5483 i=5484 i=5485 i=5486 i=5487 i=5488 i=5489 i=5490 i=5491 i=5492 i=5493 i=5494 i=5495 i=5496 i=5497 i=5498 i=5499 i=5500 i=5501 i=5502 i=5503 i=5504 i=5505 i=5506 i=5507 i=5508 i=5509 i=5510 i=5511 i=5512 i=5513 i=5514 i=5515 i=5516 i=5517 i=5518 i=5519 i=5520 i=5521 i=5522 i=5523 i=5524 i=5525 i=5526 i=5527 i=5528 i=5529 i=5530 i=5531 i=5532 i=5533 i=5534 i=5535 i=5536 i=5537 i=5538 i=5539 i=5540 i=5541 i=5542 i=5543 i=5544 i=5545 i=5546 i=5547 i=5548 i=5549 i=5550 i=5551 i=5552 i=5553 i=5554 i=5555 i=5556 i=5557 i=5558 i=5559 i=5560 i=5561 i=5562 i=5563 i=5564 i=5565 i=5566 i=5567 i=5568 i=5569 i=5570 i=5571 i=5572 i=5573 i=5574 i=5575 i=5576 i=5577 i=5578 i=5579 i=5580 i=5581 i=5582 i=5583 i=5584 i=5585 i=5586 i=5587 i=5588 i=5589 i=5590 i=5591 i=5592 i=5593 i=5594 i=5595 i=5596 i=5597 i=5598 i=5599 i=5600 i=5601 i=5602 i=5603 i=5604 i=5605 i=5606 i=5607 i=5608 i=5609 i=5610 i=5611 i=5612 i=5613 i=5614 i=5615 i=5616 i=5617 i=5618 i=5619 i=5620 i=5621 i=5622 i=5623 i=5624 i=5625 i=5626 i=5627 i=5628 i=5629 i=5630 i=5631 i=5632 i=5633 i=5634 i=5635 i=5636 i=5637 i=5638 i=5639 i=5640 i=5641 i=5642 i=5643 i=5644 i=5645 i=5646 i=5647 i=5648 i=5649 i=5650 i=5651 i=5652 i=5653 i=5654 i=5655 i=5656 i=5657 i=5658 i=5659 i=5660 i=5661 i=5662 i=5663 i=5664 i=5665 i=5666 i=5667 i=5668 i=5669 i=5670 i=5671 i=5672 i=5673 i=5674 i=5675 i=5676 i=5677 i=5678 i=5679 i=5680 i=5681 i=5682 i=5683 i=5684 i=5685 i=5686 i=5687 i=5688 i=5689 i=5690 i=5691 i=5692 i=5693 i=5694 i=5695 i=5696 i=5697 i=5698 i=5699 i=5700 i=5701 i=5702 i=5703 i=5704 i=5705 i=5706 i=5707 i=5708 i=5709 i=5710 i=5711 i=5712 i=5713 i=5714 i=5715 i=5716 i=5717 i=5718 i=5719 i=5720 i=5721 i=5722 i=5723 i=5724 i=5725 i=5726 i=5727 i=5728 i=5729 i=5730 i=5731 i=5732 i=5733 i=5734 i=5735 i=5736 i=5737 i=5738 i=5739 i=5740 i=5741 i=5742 i=5743 i=5744 i=5745 i=5746 i=5747 i=5748 i=5749 i=5750 i=5751 i=5752 i=5753 i=5754 i=5755 i=5756 i=5757 i=5758 i=5759 i=5760 i=5761 i=5762 i=5763 i=5764 i=5765 i=5766 i=5767 i=5768 i=5769 i=5770 i=5771 i=5772 i=5773 i=5774 i=5775 i=5776 i=5777 i=5778 i=5779 i=5780 i=5781 i=5782 i=5783 i=5784 i=5785 i=5786 i=5787 i=5788 i=5789 i=5790 i=5791 i=5792 i=5793 i=5794 i=5795 i=5796 i=5797 i=5798 i=5799 i=5800 i=5801 i=5802 i=5803 i=5804 i=5805 i=5806 i=5807 i=5808 i=5809 i=5810 i=5811 i=5812 i=5813 i=5814 i=5815 i=5816 i=5817 i=5818 i=5819 i=5820 i=5821 i=5822 i=5823 i=5824 i=5825 i=5826 i=5827 i=5828 i=5829 i=5830 i=5831 i=5832 i=5833 i=5834 i=5835 i=5836 i=5837 i=5838 i=5839 i=5840 i=5841 i=5842 i=5843 i=5844 i=5845 i=5846 i=5847 i=5848 i=5849 i=5850 i=5851 i=5852 i=5853 i=5854 i=5855 i=5856 i=5857 i=5858 i=5859 i=5860 i=5861 i=5862 i=5863 i=5864 i=5865 i=5866 i=5867 i=5868 i=5869 i=5870 i=5871 i=5872 i=5873 i=5874 i=5875 i=5876 i=5877 i=5878 i=5879 i=5880 i=5881 i=5882 i=5883 i=5884 i=5885 i=5886 i=5887 i=5888 i=5889 i=5890 i=5891 i=5892 i=5893 i=5894 i=5895 i=5896 i=5897 i=5898 i=5899 i=5900 i=5901 i=5902 i=5903 i=5904 i=5905 i=5906 i=5907 i=5908 i=5909 i=5910 i=5911 i=5912 i=5913 i=5914 i=5915 i=5916 i=5917 i=5918 i=5919 i=5920 i=5921 i=5922 i=5923 i=5924 i=5925 i=5926 i=5927 i=5928 i=5929 i=5930 i=5931 i=5932 i=5933 i=5934 i=5935 i=5936 i=5937 i=5938 i=5939 i=5940 i=5941 i=5942 i=5943 i=5944 i=5945 i=5946 i=5947 i=5948 i=5949 i=5950 i=5951 i=5952 i=5953 i=5954 i=5955 i=5956 i=5957 i=5958 i=5959 i=5960 i=5961 i=5962 i=5963 i=5964 i=5965 i=5966 i=5967 i=5968 i=5969 i=5970 i=5971 i=5972 i=5973 i=5974 i=5975 i=5976 i=5977 i=5978 i=5979 i=5980 i=5981 i=5982 i=5983 i=5984 i=5985 i=5986 i=5987 i=5988 i=5989 i=5990 i=5991 i=5992 i=5993 i=5994 i=5995 i=5996 i=5997 i=5998 i=5999 i=6000 i=6001 i=6002 i=6003 i=6004 i=6005 i=6006 i=6007 i=6008 i=6009 i=6010 i=6011 i=6012 i=6013 i=6014 i=6015 i=6016 i=6017 i=6018 i=6019 i=6020 i=6021 i=6022 i=6023 i=6024 i=6025 i=6026 i=6027 i=6028 i=6029 i=6030 i=6031 i=6032 i=6033 i=6034 i=6035 i=6036 i=6037 i=6038 i=6039 i=6040 i=6041 i=6042 i=6043 i=6044 i=6045 i=6046 i=6047 i=6048 i=6049 i=6050 i=6051 i=6052 i=6053 i=6054 i=6055 i=6056 i=6057 i=6058 i=6059 i=6060 i=6061 i=6062 i=6063 i=6064 i=6065 i=6066 i=6067 i=6068 i=6069 i=6070 i=6071 i=6072 i=6073 i=6074 i=6075 i=6076 i=6077 i=6078 i=6079 i=6080 i=6081 i=6082 i=6083 i=6084 i=6085 i=6086 i=6087 i=6088 i=6089 i=6090 i=6091 i=6092 i=6093 i=6094 i=6095 i=6096 i=6097 i=6098 i=6099 i=6100 i=6101 i=6102 i=6103 i=6104 i=6105 i=6106 i=6107 i=6108 i=6109 i=6110 i=6111 i=6112 i=6113 i=6114 i=6115 i=6116 i=6117 i=6118 i=6119 i=6120 i=6121 i=6122 i=6123 i=6124 i=6125 i=6126 i=6127 i=6128 i=6129 i=6130 i=6131 i=6132 i=6133 i=6134 i=6135 i=6136 i=6137 i=6138 i=6139 i=6140 i=6141 i=6142 i=6143 i=6144 i=6145 i=6146 i=6147 i=6148 i=6149 i=6150 i=6151 i=6152 i=6153 i=6154 i=6155 i=6156 i=6157 i=6158 i=6159 i=6160 i=6161 i=6162 i=6163 i=6164 i=6165 i=6166 i=6167 i=6168 i=6169 i=6170 i=6171 i=6172 i=6173 i=6174 i=6175 i=6176 i=6177 i=6178 i=6179 i=6180 i=6181 i=6182 i=6183 i=6184 i=6185 i=6186 i=6187 i=6188 i=6189 i=6190 i=6191 i=6192 i=6193 i=6194 i=6195 i=6196 i=6197 i=6198 i=6199 i=6200 i=6201 i=6202 i=6203 i=6204 i=6205 i=6206 i=6207 i=6208 i=6209 i=6210 i=6211 i=6212 i=6213 i=6214 i=6215 i=6216 i=6217 i=6218 i=6219 i=6220 i=6221 i=6222 i=6223 i=6224 i=6225 i=6226 i=6227 i=6228 i=6229 i=6230 i=6231 i=6232 i=6233 i=6234 i=6235 i=6236 i=6237 i=6238 i=6239 i=6240 i=6241 i=6242 i=6243 i=6244 i=6245 i=6246 i=6247 i=6248 i=6249 i=6250 i=6251 i=6252 i=6253 i=6254 i=6255 i=6256 i=6257 i=6258 i=6259 i=6260 i=6261 i=6262 i=6263 i=6264 i=6265 i=6266 i=6267 i=6268 i=6269 i=6270 i=6271 i=6272 i=6273 i=6274 i=6275 i=6276 i=6277 i=6278 i=6279 i=6280 i=6281 i=6282 i=6283 i=6284 i=6285 i=6286 i=6287 i=6288 i=6289 i=6290 i=6291 i=6292 i=6293 i=6294 i=6295 i=6296 i=6297 i=6298 i=6299 i=6300 i=6301 i=6302 i=6303 i=6304 i=6305 i=6306 i=6307 i=6308 i=6309 i=6310 i=6311 i=6312 i=6313 i=6314 i=6315 i=6316 i=6317 i=6318 i=6319 i=6320 i=6321 i=6322 i=6323 i=6324 i=6325 i=6326 i=6327 i=6328 i=6329 i=6330 i=6331 i=6332 i=6333 i=6334 i=6335 i=6336 i=6337 i=6338 i=6339 i=6340 i=6341 i=6342 i=6343 i=6344 i=6345 i=6346 i=6347 i=6348 i=6349 i=6350 i=6351 i=6352 i=6353 i=6354 i=6355 i=6356 i=6357 i=6358 i=6359 i=6360 i=6361 i=6362 i=6363 i=6364 i=6365 i=6366 i=6367 i=6368 i=6369 i=6370 i=6371 i=6372 i=6373 i=6374 i=6375 i=6376 i=6377 i=6378 i=6379 i=6380 i=6381 i=6382 i=6383 i=6384 i=6385 i=6386 i=6387 i=6388 i=6389 i=6390 i=6391 i=6392 i=6393 i=6394 i=6395 i=6396 i=6397 i=6398 i=6399 i=6400 i=6401 i=6402 i=6403 i=6404 i=6405 i=6406 i=6407 i=6408 i=6409 i=6410 i=6411 i=6412 i=6413 i=6414 i=6415 i=6416 i=6417 i=6418 i=6419 i=6420 i=6421 i=6422 i=6423 i=6424 i=6425 i=6426 i=6427 i=6428 i=6429 i=6430 i=6431 i=6432 i=6433 i=6434 i=6435 i=6436 i=6437 i=6438 i=6439 i=6440 i=6441 i=6442 i=6443 i=6444 i=6445 i=6446 i=6447 i=6448 i=6449 i=6450 i=6451 i=6452 i=6453 i=6454 i=6455 i=6456 i=6457 i=6458 i=6459 i=6460 i=6461 i=6462 i=6463 i=6464 i=6465 i=6466 i=6467 i=6468 i=6469 i=6470 i=6471 i=6472 i=6473 i=6474 i=6475 i=6476 i=6477 i=6478 i=6479 i=6480 i=6481 i=6482 i=6483 i=6484 i=6485 i=6486 i=6487 i=6488 i=6489 i=6490 i=6491 i=6492 i=6493 i=6494 i=6495 i=6496 i=6497 i=6498 i=6499 i=6500 i=6501 i=6502 i=6503 i=6504 i=6505 i=6506 i=6507 i=6508 i=6509 i=6510 i=6511 i=6512 i=6513 i=6514 i=6515 i=6516 i=6517 i=6518 i=6519 i=6520 i=6521 i=6522 i=6523 i=6524 i=6525 i=6526 i=6527 i=6528 i=6529 i=6530 i=6531 i=6532 i=6533 i=6534 i=6535 i=6536 i=6537 i=6538 i=6539 i=6540 i=6541 i=6542 i=6543 i=6544 i=6545 i=6546 i=6547 i=6548 i=6549 i=6550 i=6551 i=6552 i=6553 i=6554 i=6555 i=6556 i=6557 i=6558 i=6559 i=6560 i=6561 i=6562 i=6563 i=6564 i=6565 i=6566 i=6567 i=6568 i=6569 i=6570 i=6571 i=6572 i=6573 i=6574 i=6575 i=6576 i=6577 i=6578 i=6579 i=6580 i=6581 i=6582 i=6583 i=6584 i=6585 i=6586 i=6587 i=6588 i=6589 i=6590 i=6591 i=6592 i=6593 i=6594 i=6595 i=6596 i=6597 i=6598 i=6599 i=6600 i=6601 i=6602 i=6603 i=6604 i=6605 i=6606 i=6607 i=6608 i=6609 i=6610 i=6611 i=6612 i=6613 i=6614 i=6615 i=6616 i=6617 i=6618 i=6619 i=6620 i=6621 i=6622 i=6623 i=6624 i=6625 i=6626 i=6627 i=6628 i=6629 i=6630 i=6631 i=6632 i=6633 i=6634 i=6635 i=6636 i=6637 i=6638 i=6639 i=6640 i=6641 i=6642 i=6643 i=6644 i=6645 i=6646 i=6647 i=6648 i=6649 i=6650 i=6651 i=6652 i=6653 i=6654 i=6655 i=6656 i=6657 i=6658 i=6659 i=6660 i=6661 i=6662 i=6663 i=6664 i=6665 i=6666 i=6667 i=6668 i=6669 i=6670 i=6671 i=6672 i=6673 i=6674 i=6675 i=6676 i=6677 i=6678 i=6679 i=6680 i=6681 i=6682 i=6683 i=6684 i=6685 i=6686 i=6687 i=6688 i=6689 i=6690 i=6691 i=6692 i=6693 i=6694 i=6695 i=6696 i=6697 i=6698 i=6699 i=6700 i=6701 i=6702 i=6703 i=6704 i=6705 i=6706 i=6707 i=6708 i=6709 i=6710 i=6711 i=6712 i=6713 i=6714 i=6715 i=6716 i=6717 i=6718 i=6719 i=6720 i=6721 i=6722 i=6723 i=6724 i=6725 i=6726 i=6727 i=6728 i=6729 i=6730 i=6731 i=6732 i=6733 i=6734 i=6735 i=6736 i=6737 i=6738 i=6739 i=6740 i=6741 i=6742 i=6743 i=6744 i=6745 i=6746 i=6747 i=6748 i=6749 i=6750 i=6751 i=6752 i=6753 i=6754 i=6755 i=6756 i=6757 i=6758 i=6759 i=6760 i=6761 i=6762 i=6763 i=6764 i=6765 i=6766 i=6767 i=6768 i=6769 i=6770 i=6771 i=6772 i=6773 i=6774 i=6775 i=6776 i=6777 i=6778 i=6779 i=6780 i=6781 i=6782 i=6783 i=6784 i=6785 i=6786 i=6787 i=6788 i=6789 i=6790 i=6791 i=6792 i=6793 i=6794 i=6795 i=6796 i=6797 i=6798 i=6799 i=6800 i=6801 i=6802 i=6803 i=6804 i=6805 i=6806 i=6807 i=6808 i=6809 i=6810 i=6811 i=6812 i=6813 i=6814 i=6815 i=6816 i=6817 i=6818 i=6819 i=6820 i=6821 i=6822 i=6823 i=6824 i=6825 i=6826 i=6827 i=6828 i=6829 i=6830 i=6831 i=6832 i=6833 i=6834 i=6835 i=6836 i=6837 i=6838 i=6839 i=6840 i=6841 i=6842 i=6843 i=6844 i=6845 i=6846 i=6847 i=6848 i=6849 i=6850 i=6851 i=6852 i=6853 i=6854 i=6855 i=6856 i=6857 i=6858 i=6859 i=6860 i=6861 i=6862 i=6863 i=6864 i=6865 i=6866 i=6867 i=6868 i=6869 i=6870 i=6871 i=6872 i=6873 i=6874 i=6875 i=6876 i=6877 i=6878 i=6879 i=6880 i=6881 i=6882 i=6883 i=6884 i=6885 i=6886 i=6887 i=6888 i=6889 i=6890 i=6891 i=6892 i=6893 i=6894 i=6895 i=6896 i=6897 i=6898 i=6899 i=6900 i=6901 i=6902 i=6903 i=6904 i=6905 i=6906 i=6907 i=6908 i=6909 i=6910 i=6911 i=6912 i=6913 i=6914 i=6915 i=6916 i=6917 i=6918 i=6919 i=6920 i=6921 i=6922 i=6923 i=6924 i=6925 i=6926 i=6927 i=6928 i=6929 i=6930 i=6931 i=6932 i=6933 i=6934 i=6935 i=6936 i=6937 i=6938 i=6939 i=6940 i=6941 i=6942 i=6943 i=6944 i=6945 i=6946 i=6947 i=6948 i=6949 i=6950 i=6951 i=6952 i=6953 i=6954 i=6955 i=6956 i=6957 i=6958 i=6959 i=6960 i=6961 i=6962 i=6963 i=6964 i=6965 i=6966 i=6967 i=6968 i=6969 i=6970 i=6971 i=6972 i=6973 i=6974 i=6975 i=6976 i=6977 i=6978 i=6979 i=6980 i=6981 i=6982 i=6983 i=6984 i=6985 i=6986 i=6987 i=6988 i=6989 i=6990 i=6991 i=6992 i=6993 i=6994 i=6995 i=6996 i=6997 i=6998 i=6999 i=7000 i=7001 i=7002 i=7003 i=7004 i=7005 i=7006 i=7007 i=7008 i=7009 i=7010 i=7011 i=7012 i=7013 i=7014 i=7015 i=7016 i=7017 i=7018 i=7019 i=7020 i=7021 i=7022 i=7023 i=7024 i=7025 i=7026 i=7027 i=7028 i=7029 i=7030 i=7031 i=7032 i=7033 i=7034 i=7035 i=7036 i=7037 i=7038 i=7039 i=7040 i=7041 i=7042 i=7043 i=7044 i=7045 i=7046 i=7047 i=7048 i=7049 i=7050 i=7051 i=7052 i=7053 i=7054 i=7055 i=7056 i=7057 i=7058 i=7059 i=7060 i=7061 i=7062 i=7063 i=7064 i=7065 i=7066 i=7067 i=7068 i=7069 i=7070 i=7071 i=7072 i=7073 i=7074 i=7075 i=7076 i=7077 i=7078 i=7079 i=7080 i=7081 i=7082 i=7083 i=7084 i=7085 i=7086 i=7087 i=7088 i=7089 i=7090 i=7091 i=7092 i=7093 i=7094 i=7095 i=7096 i=7097 i=7098 i=7099 i=7100 i=7101 i=7102 i=7103 i=7104 i=7105 i=7106 i=7107 i=7108 i=7109 i=7110 i=7111 i=7112 i=7113 i=7114 i=7115 i=7116 i=7117 i=7118 i=7119 i=7120 i=7121 i=7122 i=7123 i=7124 i=7125 i=7126 i=7127 i=7128 i=7129 i=7130 i=7131 i=7132 i=7133 i=7134 i=7135 i=7136 i=7137 i=7138 i=7139 i=7140 i=7141 i=7142 i=7143 i=7144 i=7145 i=7146 i=7147 i=7148 i=7149 i=7150 i=7151 i=7152 i=7153 i=7154 i=7155 i=7156 i=7157 i=7158 i=7159 i=7160 i=7161 i=7162 i=7163 i=7164 i=7165 i=7166 i=7167 i=7168 i=7169 i=7170 i=7171 i=7172 i=7173 i=7174 i=7175 i=7176 i=7177 i=7178 i=7179 i=7180 i=7181 i=7182 i=7183 i=7184 i=7185 i=7186 i=7187 i=7188 i=7189 i=7190 i=7191 i=7192 i=7193 i=7194 i=7195 i=7196 i=7197 i=7198 i=7199 i=7200 i=7201 i=7202 i=7203 i=7204 i=7205 i=7206 i=7207 i=7208 i=7209 i=7210 i=7211 i=7212 i=7213 i=7214 i=7215 i=7216 i=7217 i=7218 i=7219 i=7220 i=7221 i=7222 i=7223 i=7224 i=7225 i=7226 i=7227 i=7228 i=7229 i=7230 i=7231 i=7232 i=7233 i=7234 i=7235 i=7236 i=7237 i=7238 i=7239 i=7240 i=7241 i=7242 i=7243 i=7244 i=7245 i=7246 i=7247 i=7248 i=7249 i=7250 i=7251 i=7252 i=7253 i=7254 i=7255 i=7256 i=7257 i=7258 i=7259 i=7260 i=7261 i=7262 i=7263 i=7264 i=7265 i=7266 i=7267 i=7268 i=7269 i=7270 i=7271 i=7272 i=7273 i=7274 i=7275 i=7276 i=7277 i=7278 i=7279 i=7280 i=7281 i=7282 i=7283 i=7284 i=7285 i=7286 i=7287 i=7288 i=7289 i=7290 i=7291 i=7292 i=7293 i=7294 i=7295 i=7296 i=7297 i=7298 i=7299 i=7300 i=7301 i=7302 i=7303 i=7304 i=7305 i=7306 i=7307 i=7308 i=7309 i=7310 i=7311 i=7312 i=7313 i=7314 i=7315 i=7316 i=7317 i=7318 i=7319 i=7320 i=7321 i=7322 i=7323 i=7324 i=7325 i=7326 i=7327 i=7328 i=7329 i=7330 i=7331 i=7332 i=7333 i=7334 i=7335 i=7336 i=7337 i=7338 i=7339 i=7340 i=7341 i=7342 i=7343 i=7344 i=7345 i=7346 i=7347 i=7348 i=7349 i=7350 i=7351 i=7352 i=7353 i=7354 i=7355 i=7356 i=7357 i=7358 i=7359 i=7360 i=7361 i=7362 i=7363 i=7364 i=7365 i=7366 i=7367 i=7368 i=7369 i=7370 i=7371 i=7372 i=7373 i=7374 i=7375 i=7376 i=7377 i=7378 i=7379 i=7380 i=7381 i=7382 i=7383 i=7384 i=7385 i=7386 i=7387 i=7388 i=7389 i=7390 i=7391 i=7392 i=7393 i=7394 i=7395 i=7396 i=7397 i=7398 i=7399 i=7400 i=7401 i=7402 i=7403 i=7404 i=7405 i=7406 i=7407 i=7408 i=7409 i=7410 i=7411 i=7412 i=7413 i=7414 i=7415 i=7416 i=7417 i=7418 i=7419 i=7420 i=7421 i=7422 i=7423 i=7424 i=7425 i=7426 i=7427 i=7428 i=7429 i=7430 i=7431 i=7432 i=7433 i=7434 i=7435 i=7436 i=7437 i=7438 i=7439 i=7440 i=7441 i=7442 i=7443 i=7444 i=7445 i=7446 i=7447 i=7448 i=7449 i=7450 i=7451 i=7452 i=7453 i=7454 i=7455 i=7456 i=7457 i=7458 i=7459 i=7460 i=7461 i=7462 i=7463 i=7464 i=7465 i=7466 i=7467 i=7468 i=7469 i=7470 i=7471 i=7472 i=7473 i=7474 i=7475 i=7476 i=7477 i=7478 i=7479 i=7480 i=7481 i=7482 i=7483 i=7484 i=7485 i=7486 i=7487 i=7488 i=7489 i=7490 i=7491 i=7492 i=7493 i=7494 i=7495 i=7496 i=7497 i=7498 i=7499 i=7500 i=7501 i=7502 i=7503 i=7504 i=7505 i=7506 i=7507 i=7508 i=7509 i=7510 i=7511 i=7512 i=7513 i=7514 i=7515 i=7516 i=7517 i=7518 i=7519 i=7520 i=7521 i=7522 i=7523 i=7524 i=7525 i=7526 i=7527 i=7528 i=7529 i=7530 i=7531 i=7532 i=7533 i=7534 i=7535 i=7536 i=7537 i=7538 i=7539 i=7540 i=7541 i=7542 i=7543 i=7544 i=7545 i=7546 i=7547 i=7548 i=7549 i=7550 i=7551 i=7552 i=7553 i=7554 i=7555 i=7556 i=7557 i=7558 i=7559 i=7560 i=7561 i=7562 i=7563 i=7564 i=7565 i=7566 i=7567 i=7568 i=7569 i=7570 i=7571 i=7572 i=7573 i=7574 i=7575 i=7576 i=7577 i=7578 i=7579 i=7580 i=7581 i=7582 i=7583 i=7584 i=7585 i=7586 i=7587 i=7588 i=7589 i=7590 i=7591 i=7592 i=7593 i=7594 i=7595 i=7596 i=7597 i=7598 i=7599 i=7600 i=7601 i=7602 i=7603 i=7604 i=7605 i=7606 i=7607 i=7608 i=7609 i=7610 i=7611 i=7612 i=7613 i=7614 i=7615 i=7616 i=7617 i=7618 i=7619 i=7620 i=7621 i=7622 i=7623 i=7624 i=7625 i=7626 i=7627 i=7628 i=7629 i=7630 i=7631 i=7632 i=7633 i=7634 i=7635 i=7636 i=7637 i=7638 i=7639 i=7640 i=7641 i=7642 i=7643 i=7644 i=7645 i=7646 i=7647 i=7648 i=7649 i=7650 i=7651 i=7652 i=7653 i=7654 i=7655 i=7656 i=7657 i=7658 i=7659 i=7660 i=7661 i=7662 i=7663 i=7664 i=7665 i=7666 i=7667 i=7668 i=7669 i=7670 i=7671 i=7672 i=7673 i=7674 i=7675 i=7676 i=7677 i=7678 i=7679 i=7680 i=7681 i=7682 i=7683 i=7684 i=7685 i=7686 i=7687 i=7688 i=7689 i=7690 i=7691 i=7692 i=7693 i=7694 i=7695 i=7696 i=7697 i=7698 i=7699 i=7700 i=7701 i=7702 i=7703 i=7704 i=7705 i=7706 i=7707 i=7708 i=7709 i=7710 i=7711 i=7712 i=7713 i=7714 i=7715 i=7716 i=7717 i=7718 i=7719 i=7720 i=7721 i=7722 i=7723 i=7724 i=7725 i=7726 i=7727 i=7728 i=7729 i=7730 i=7731 i=7732 i=7733 i=7734 i=7735 i=7736 i=7737 i=7738 i=7739 i=7740 i=7741 i=7742 i=7743 i=7744 i=7745 i=7746 i=7747 i=7748 i=7749 i=7750 i=7751 i=7752 i=7753 i=7754 i=7755 i=7756 i=7757 i=7758 i=7759 i=7760 i=7761 i=7762 i=7763 i=7764 i=7765 i=7766 i=7767 i=7768 i=7769 i=7770 i=7771 i=7772 i=7773 i=7774 i=7775 i=7776 i=7777 i=7778 i=7779 i=7780 i=7781 i=7782 i=7783 i=7784 i=7785 i=7786 i=7787 i=7788 i=7789 i=7790 i=7791 i=7792 i=7793 i=7794 i=7795 i=7796 i=7797 i=7798 i=7799 i=7800 i=7801 i=7802 i=7803 i=7804 i=7805 i=7806 i=7807 i=7808 i=7809 i=7810 i=7811 i=7812 i=7813 i=7814 i=7815 i=7816 i=7817 i=7818 i=7819 i=7820 i=7821 i=7822 i=7823 i=7824 i=7825 i=7826 i=7827 i=7828 i=7829 i=7830 i=7831 i=7832 i=7833 i=7834 i=7835 i=7836 i=7837 i=7838 i=7839 i=7840 i=7841 i=7842 i=7843 i=7844 i=7845 i=7846 i=7847 i=7848 i=7849 i=7850 i=7851 i=7852 i=7853 i=7854 i=7855 i=7856 i=7857 i=7858 i=7859 i=7860 i=7861 i=7862 i=7863 i=7864 i=7865 i=7866 i=7867 i=7868 i=7869 i=7870 i=7871 i=7872 i=7873 i=7874 i=7875 i=7876 i=7877 i=7878 i=7879 i=7880 i=7881 i=7882 i=7883 i=7884 i=7885 i=7886 i=7887 i=7888 i=7889 i=7890 i=7891 i=7892 i=7893 i=7894 i=7895 i=7896 i=7897 i=7898 i=7899 i=7900 i=7901 i=7902 i=7903 i=7904 i=7905 i=7906 i=7907 i=7908 i=7909 i=7910 i=7911 i=7912 i=7913 i=7914 i=7915 i=7916 i=7917 i=7918 i=7919 i=7920 i=7921 i=7922 i=7923 i=7924 i=7925 i=7926 i=7927 i=7928 i=7929 i=7930 i=7931 i=7932 i=7933 i=7934 i=7935 i=7936 i=7937 i=7938 i=7939 i=7940 i=7941 i=7942 i=7943 i=7944 i=7945 i=7946 i=7947 i=7948 i=7949 i=7950 i=7951 i=7952 i=7953 i=7954 i=7955 i=7956 i=7957 i=7958 i=7959 i=7960 i=7961 i=7962 i=7963 i=7964 i=7965 i=7966 i=7967 i=7968 i=7969 i=7970 i=7971 i=7972 i=7973 i=7974 i=7975 i=7976 i=7977 i=7978 i=7979 i=7980 i=7981 i=7982 i=7983 i=7984 i=7985 i=7986 i=7987 i=7988 i=7989 i=7990 i=7991 i=7992 i=7993 i=7994 i=7995 i=7996 i=7997 i=7998 i=7999 i=8000 i=8001 i=8002 i=8003 i=8004 i=8005 i=8006 i=8007 i=8008 i=8009 i=8010 i=8011 i=8012 i=8013 i=8014 i=8015 i=8016 i=8017 i=8018 i=8019 i=8020 i=8021 i=8022 i=8023 i=8024 i=8025 i=8026 i=8027 i=8028 i=8029 i=8030 i=8031 i=8032 i=8033 i=8034 i=8035 i=8036 i=8037 i=8038 i=8039 i=8040 i=8041 i=8042 i=8043 i=8044 i=8045 i=8046 i=8047 i=8048 i=8049 i=8050 i=8051 i=8052 i=8053 i=8054 i=8055 i=8056 i=8057 i=8058 i=8059 i=8060 i=8061 i=8062 i=8063 i=8064 i=8065 i=8066 i=8067 i=8068 i=8069 i=8070 i=8071 i=8072 i=8073 i=8074 i=8075 i=8076 i=8077 i=8078 i=8079 i=8080 i=8081 i=8082 i=8083 i=8084 i=8085 i=8086 i=8087 i=8088 i=8089 i=8090 i=8091 i=8092 i=8093 i=8094 i=8095 i=8096 i=8097 i=8098 i=8099 i=8100 i=8101 i=8102 i=8103 i=8104 i=8105 i=8106 i=8107 i=8108 i=8109 i=8110 i=8111 i=8112 i=8113 i=8114 i=8115 i=8116 i=8117 i=8118 i=8119 i=8120 i=8121 i=8122 i=8123 i=8124 i=8125 i=8126 i=8127 i=8128 i=8129 i=8130 i=8131 i=8132 i=8133 i=8134 i=8135 i=8136 i=8137 i=8138 i=8139 i=8140 i=8141 i=8142 i=8143 i=8144 i=8145 i=8146 i=8147 i=8148 i=8149 i=8150 i=8151 i=8152 i=8153 i=8154 i=8155 i=8156 i=8157 i=8158 i=8159 i=8160 i=8161 i=8162 i=8163 i=8164 i=8165 i=8166 i=8167 i=8168 i=8169 i=8170 i=8171 i=8172 i=8173 i=8174 i=8175 i=8176 i=8177 i=8178 i=8179 i=8180 i=8181 i=8182 i=8183 i=8184 i=8185 i=8186 i=8187 i=8188 i=8189 i=8190 i=8191 i=8192 i=8193 i=8194 i=8195 i=8196 i=8197 i=8198 i=8199 i=8200 i=8201 i=8202 i=8203 i=8204 i=8205 i=8206 i=8207 i=8208 i=8209 i=8210 i=8211 i=8212 i=8213 i=8214 i=8215 i=8216 i=8217 i=8218 i=8219 i=8220 i=8221 i=8222 i=8223 i=8224 i=8225 i=8226 i=8227 i=8228 i=8229 i=8230 i=8231 i=8232 i=8233 i=8234 i=8235 i=8236 i=8237 i=8238 i=8239 i=8240 i=8241 i=8242 i=8243 i=8244 i=8245 i=8246 i=8247 i=8248 i=8249 i=8250 i=8251 i=8252 i=8253 i=8254 i=8255 i=8256 i=8257 i=8258 i=8259 i=8260 i=8261 i=8262 i=8263 i=8264 i=8265 i=8266 i=8267 i=8268 i=8269 i=8270 i=8271 i=8272 i=8273 i=8274 i=8275 i=8276 i=8277 i=8278 i=8279 i=8280 i=8281 i=8282 i=8283 i=8284 i=8285 i=8286 i=8287 i=8288 i=8289 i=8290 i=8291 i=8292 i=8293 i=8294 i=8295 i=8296 i=8297 i=8298 i=8299 i=8300 i=8301 i=8302 i=8303 i=8304 i=8305 i=8306 i=8307 i=8308 i=8309 i=8310 i=8311 i=8312 i=8313 i=8314 i=8315 i=8316 i=8317 i=8318 i=8319 i=8320 i=8321 i=8322 i=8323 i=8324 i=8325 i=8326 i=8327 i=8328 i=8329 i=8330 i=8331 i=8332 i=8333 i=8334 i=8335 i=8336 i=8337 i=8338 i=8339 i=8340 i=8341 i=8342 i=8343 i=8344 i=8345 i=8346 i=8347 i=8348 i=8349 i=8350 i=8351 i=8352 i=8353 i=8354 i=8355 i=8356 i=8357 i=8358 i=8359 i=8360 i=8361 i=8362 i=8363 i=8364 i=8365 i=8366 i=8367 i=8368 i=8369 i=8370 i=8371 i=8372 i=8373 i=8374 i=8375 i=8376 i=8377 i=8378 i=8379 i=8380 i=8381 i=8382 i=8383 i=8384 i=8385 i=8386 i=8387 i=8388 i=8389 i=8390 i=8391 i=8392 i=8393 i=8394 i=8395 i=8396 i=8397 i=8398 i=8399 i=8400 i=8401 i=8402 i=8403 i=8404 i=8405 i=8406 i=8407 i=8408 i=8409 i=8410 i=8411 i=8412 i=8413 i=8414 i=8415 i=8416 i=8417 i=8418 i=8419 i=8420 i=8421 i=8422 i=8423 i=8424 i=8425 i=8426 i=8427 i=8428 i=8429 i=8430 i=8431 i=8432 i=8433 i=8434 i=8435 i=8436 i=8437 i=8438 i=8439 i=8440 i=8441 i=8442 i=8443 i=8444 i=8445 i=8446 i=8447 i=8448 i=8449 i=8450 i=8451 i=8452 i=8453 i=8454 i=8455 i=8456 i=8457 i=8458 i=8459 i=8460 i=8461 i=8462 i=8463 i=8464 i=8465 i=8466 i=8467 i=8468 i=8469 i=8470 i=8471 i=8472 i=8473 i=8474 i=8475 i=8476 i=8477 i=8478 i=8479 i=8480 i=8481 i=8482 i=8483 i=8484 i=8485 i=8486 i=8487 i=8488 i=8489 i=8490 i=8491 i=8492 i=8493 i=8494 i=8495 i=8496 i=8497 i=8498 i=8499 i=8500 i=8501 i=8502 i=8503 i=8504 i=8505 i=8506 i=8507 i=8508 i=8509 i=8510 i=8511 i=8512 i=8513 i=8514 i=8515 i=8516 i=8517 i=8518 i=8519 i=8520 i=8521 i=8522 i=8523 i=8524 i=8525 i=8526 i=8527 i=8528 i=8529 i=8530 i=8531 i=8532 i=8533 i=8534 i=8535 i=8536 i=8537 i=8538 i=8539 i=8540 i=8541 i=8542 i=8543 i=8544 i=8545 i=8546 i=8547 i=8548 i=8549 i=8550 i=8551 i=8552 i=8553 i=8554 i=8555 i=8556 i=8557 i=8558 i=8559 i=8560 i=8561 i=8562 i=8563 i=8564 i=8565 i=8566 i=8567 i=8568 i=8569 i=8570 i=8571 i=8572 i=8573 i=8574 i=8575 i=8576 i=8577 i=8578 i=8579 i=8580 i=8581 i=8582 i=8583 i=8584 i=8585 i=8586 i=8587 i=8588 i=8589 i=8590 i=8591 i=8592 i=8593 i=8594 i=8595 i=8596 i=8597 i=8598 i=8599 i=8600 i=8601 i=8602 i=8603 i=8604 i=8605 i=8606 i=8607 i=8608 i=8609 i=8610 i=8611 i=8612 i=8613 i=8614 i=8615 i=8616 i=8617 i=8618 i=8619 i=8620 i=8621 i=8622 i=8623 i=8624 i=8625 i=8626 i=8627 i=8628 i=8629 i=8630 i=8631 i=8632 i=8633 i=8634 i=8635 i=8636 i=8637 i=8638 i=8639 i=8640 i=8641 i=8642 i=8643 i=8644 i=8645 i=8646 i=8647 i=8648 i=8649 i=8650 i=8651 i=8652 i=8653 i=8654 i=8655 i=8656 i=8657 i=8658 i=8659 i=8660 i=8661 i=8662 i=8663 i=8664 i=8665 i=8666 i=8667 i=8668 i=8669 i=8670 i=8671 i=8672 i=8673 i=8674 i=8675 i=8676 i=8677 i=8678 i=8679 i=8680 i=8681 i=8682 i=8683 i=8684 i=8685 i=8686 i=8687 i=8688 i=8689 i=8690 i=8691 i=8692 i=8693 i=8694 i=8695 i=8696 i=8697 i=8698 i=8699 i=8700 i=8701 i=8702 i=8703 i=8704 i=8705 i=8706 i=8707 i=8708 i=8709 i=8710 i=8711 i=8712 i=8713 i=8714 i=8715 i=8716 i=8717 i=8718 i=8719 i=8720 i=8721 i=8722 i=8723 i=8724 i=8725 i=8726 i=8727 i=8728 i=8729 i=8730 i=8731 i=8732 i=8733 i=8734 i=8735 i=8736 i=8737 i=8738 i=8739 i=8740 i=8741 i=8742 i=8743 i=8744 i=8745 i=8746 i=8747 i=8748 i=8749 i=8750 i=8751 i=8752 i=8753 i=8754 i=8755 i=8756 i=8757 i=8758 i=8759 i=8760 i=8761 i=8762 i=8763 i=8764 i=8765 i=8766 i=8767 i=8768 i=8769 i=8770 i=8771 i=8772 i=8773 i=8774 i=8775 i=8776 i=8777 i=8778 i=8779 i=8780 i=8781 i=8782 i=8783 i=8784 i=8785 i=8786 i=8787 i=8788 i=8789 i=8790 i=8791 i=8792 i=8793 i=8794 i=8795 i=8796 i=8797 i=8798 i=8799 i=8800 i=8801 i=8802 i=8803 i=8804 i=8805 i=8806 i=8807 i=8808 i=8809 i=8810 i=8811 i=8812 i=8813 i=8814 i=8815 i=8816 i=8817 i=8818 i=8819 i=8820 i=8821 i=8822 i=8823 i=8824 i=8825 i=8826 i=8827 i=8828 i=8829 i=8830 i=8831 i=8832 i=8833 i=8834 i=8835 i=8836 i=8837 i=8838 i=8839 i=8840 i=8841 i=8842 i=8843 i=8844 i=8845 i=8846 i=8847 i=8848 i=8849 i=8850 i=8851 i=8852 i=8853 i=8854 i=8855 i=8856 i=8857 i=8858 i=8859 i=8860 i=8861 i=8862 i=8863 i=8864 i=8865 i=8866 i=8867 i=8868 i=8869 i=8870 i=8871 i=8872 i=8873 i=8874 i=8875 i=8876 i=8877 i=8878 i=8879 i=8880 i=8881 i=8882 i=8883 i=8884 i=8885 i=8886 i=8887 i=8888 i=8889 i=8890 i=8891 i=8892 i=8893 i=8894 i=8895 i=8896 i=8897 i=8898 i=8899 i=8900 i=8901 i=8902 i=8903 i=8904 i=8905 i=8906 i=8907 i=8908 i=8909 i=8910 i=8911 i=8912 i=8913 i=8914 i=8915 i=8916 i=8917 i=8918 i=8919 i=8920 i=8921 i=8922 i=8923 i=8924 i=8925 i=8926 i=8927 i=8928 i=8929 i=8930 i=8931 i=8932 i=8933 i=8934 i=8935 i=8936 i=8937 i=8938 i=8939 i=8940 i=8941 i=8942 i=8943 i=8944 i=8945 i=8946 i=8947 i=8948 i=8949 i=8950 i=8951 i=8952 i=8953 i=8954 i=8955 i=8956 i=8957 i=8958 i=8959 i=8960 i=8961 i=8962 i=8963 i=8964 i=8965 i=8966 i=8967 i=8968 i=8969 i=8970 i=8971 i=8972 i=8973 i=8974 i=8975 i=8976 i=8977 i=8978 i=8979 i=8980 i=8981 i=8982 i=8983 i=8984 i=8985 i=8986 i=8987 i=8988 i=8989 i=8990 i=8991 i=8992 i=8993 i=8994 i=8995 i=8996 i=8997 i=8998 i=8999 i=9000 i=9001 i=9002 i=9003 i=9004 i=9005 i=9006 i=9007 i=9008 i=9009 i=9010 i=9011 i=9012 i=9013 i=9014 i=9015 i=9016 i=9017 i=9018 i=9019 i=9020 i=9021 i=9022 i=9023 i=9024 i=9025 i=9026 i=9027 i=9028 i=9029 i=9030 i=9031 i=9032 i=9033 i=9034 i=9035 i=9036 i=9037 i=9038 i=9039 i=9040 i=9041 i=9042 i=9043 i=9044 i=9045 i=9046 i=9047 i=9048 i=9049 i=9050 i=9051 i=9052 i=9053 i=9054 i=9055 i=9056 i=9057 i=9058 i=9059 i=9060 i=9061 i=9062 i=9063 i=9064 i=9065 i=9066 i=9067 i=9068 i=9069 i=9070 i=9071 i=9072 i=9073 i=9074 i=9075 i=9076 i=9077 i=9078 i=9079 i=9080 i=9081 i=9082 i=9083 i=9084 i=9085 i=9086 i=9087 i=9088 i=9089 i=9090 i=9091 i=9092 i=9093 i=9094 i=9095 i=9096 i=9097 i=9098 i=9099 i=9100 i=9101 i=9102 i=9103 i=9104 i=9105 i=9106 i=9107 i=9108 i=9109 i=9110 i=9111 i=9112 i=9113 i=9114 i=9115 i=9116 i=9117 i=9118 i=9119 i=9120 i=9121 i=9122 i=9123 i=9124 i=9125 i=9126 i=9127 i=9128 i=9129 i=9130 i=9131 i=9132 i=9133 i=9134 i=9135 i=9136 i=9137 i=9138 i=9139 i=9140 i=9141 i=9142 i=9143 i=9144 i=9145 i=9146 i=9147 i=9148 i=9149 i=9150 i=9151 i=9152 i=9153 i=9154 i=9155 i=9156 i=9157 i=9158 i=9159 i=9160 i=9161 i=9162 i=9163 i=9164 i=9165 i=9166 i=9167 i=9168 i=9169 i=9170 i=9171 i=9172 i=9173 i=9174 i=9175 i=9176 i=9177 i=9178 i=9179 i=9180 i=9181 i=9182 i=9183 i=9184 i=9185 i=9186 i=9187 i=9188 i=9189 i=9190 i=9191 i=9192 i=9193 i=9194 i=9195 i=9196 i=9197 i=9198 i=9199 i=9200 i=9201 i=9202 i=9203 i=9204 i=9205 i=9206 i=9207 i=9208 i=9209 i=9210 i=9211 i=9212 i=9213 i=9214 i=9215 i=9216 i=9217 i=9218 i=9219 i=9220 i=9221 i=9222 i=9223 i=9224 i=9225 i=9226 i=9227 i=9228 i=9229 i=9230 i=9231 i=9232 i=9233 i=9234 i=9235 i=9236 i=9237 i=9238 i=9239 i=9240 i=9241 i=9242 i=9243 i=9244 i=9245 i=9246 i=9247 i=9248 i=9249 i=9250 i=9251 i=9252 i=9253 i=9254 i=9255 i=9256 i=9257 i=9258 i=9259 i=9260 i=9261 i=9262 i=9263 i=9264 i=9265 i=9266 i=9267 i=9268 i=9269 i=9270 i=9271 i=9272 i=9273 i=9274 i=9275 i=9276 i=9277 i=9278 i=9279 i=9280 i=9281 i=9282 i=9283 i=9284 i=9285 i=9286 i=9287 i=9288 i=9289 i=9290 i=9291 i=9292 i=9293 i=9294 i=9295 i=9296 i=9297 i=9298 i=9299 i=9300 i=9301 i=9302 i=9303 i=9304 i=9305 i=9306 i=9307 i=9308 i=9309 i=9310 i=9311 i=9312 i=9313 i=9314 i=9315 i=9316 i=9317 i=9318 i=9319 i=9320 i=9321 i=9322 i=9323 i=9324 i=9325 i=9326 i=9327 i=9328 i=9329 i=9330 i=9331 i=9332 i=9333 i=9334 i=9335 i=9336 i=9337 i=9338 i=9339 i=9340 i=9341 i=9342 i=9343 i=9344 i=9345 i=9346 i=9347 i=9348 i=9349 i=9350 i=9351 i=9352 i=9353 i=9354 i=9355 i=9356 i=9357 i=9358 i=9359 i=9360 i=9361 i=9362 i=9363 i=9364 i=9365 i=9366 i=9367 i=9368 i=9369 i=9370 i=9371 i=9372 i=9373 i=9374 i=9375 i=9376 i=9377 i=9378 i=9379 i=9380 i=9381 i=9382 i=9383 i=9384 i=9385 i=9386 i=9387 i=9388 i=9389 i=9390 i=9391 i=9392 i=9393 i=9394 i=9395 i=9396 i=9397 i=9398 i=9399 i=9400 i=9401 i=9402 i=9403 i=9404 i=9405 i=9406 i=9407 i=9408 i=9409 i=9410 i=9411 i=9412 i=9413 i=9414 i=9415 i=9416 i=9417 i=9418 i=9419 i=9420 i=9421 i=9422 i=9423 i=9424 i=9425 i=9426 i=9427 i=9428 i=9429 i=9430 i=9431 i=9432 i=9433 i=9434 i=9435 i=9436 i=9437 i=9438 i=9439 i=9440 i=9441 i=9442 i=9443 i=9444 i=9445 i=9446 i=9447 i=9448 i=9449 i=9450 i=9451 i=9452 i=9453 i=9454 i=9455 i=9456 i=9457 i=9458 i=9459 i=9460 i=9461 i=9462 i=9463 i=9464 i=9465 i=9466 i=9467 i=9468 i=9469 i=9470 i=9471 i=9472 i=9473 i=9474 i=9475 i=9476 i=9477 i=9478 i=9479 i=9480 i=9481 i=9482 i=9483 i=9484 i=9485 i=9486 i=9487 i=9488 i=9489 i=9490 i=9491 i=9492 i=9493 i=9494 i=9495 i=9496 i=9497 i=9498 i=9499 i=9500 i=9501 i=9502 i=9503 i=9504 i=9505 i=9506 i=9507 i=9508 i=9509 i=9510 i=9511 i=9512 i=9513 i=9514 i=9515 i=9516 i=9517 i=9518 i=9519 i=9520 i=9521 i=9522 i=9523 i=9524 i=9525 i=9526 i=9527 i=9528 i=9529 i=9530 i=9531 i=9532 i=9533 i=9534 i=9535 i=9536 i=9537 i=9538 i=9539 i=9540 i=9541 i=9542 i=9543 i=9544 i=9545 i=9546 i=9547 i=9548 i=9549 i=9550 i=9551 i=9552 i=9553 i=9554 i=9555 i=9556 i=9557 i=9558 i=9559 i=9560 i=9561 i=9562 i=9563 i=9564 i=9565 i=9566 i=9567 i=9568 i=9569 i=9570 i=9571 i=9572 i=9573 i=9574 i=9575 i=9576 i=9577 i=9578 i=9579 i=9580 i=9581 i=9582 i=9583 i=9584 i=9585 i=9586 i=9587 i=9588 i=9589 i=9590 i=9591 i=9592 i=9593 i=9594 i=9595 i=9596 i=9597 i=9598 i=9599 i=9600 i=9601 i=9602 i=9603 i=9604 i=9605 i=9606 i=9607 i=9608 i=9609 i=9610 i=9611 i=9612 i=9613 i=9614 i=9615 i=9616 i=9617 i=9618 i=9619 i=9620 i=9621 i=9622 i=9623 i=9624 i=9625 i=9626 i=9627 i=9628 i=9629 i=9630 i=9631 i=9632 i=9633 i=9634 i=9635 i=9636 i=9637 i=9638 i=9639 i=9640 i=9641 i=9642 i=9643 i=9644 i=9645 i=9646 i=9647 i=9648 i=9649 i=9650 i=9651 i=9652 i=9653 i=9654 i=9655 i=9656 i=9657 i=9658 i=9659 i=9660 i=9661 i=9662 i=9663 i=9664 i=9665 i=9666 i=9667 i=9668 i=9669 i=9670 i=9671 i=9672 i=9673 i=9674 i=9675 i=9676 i=9677 i=9678 i=9679 i=9680 i=9681 i=9682 i=9683 i=9684 i=9685 i=9686 i=9687 i=9688 i=9689 i=9690 i=9691 i=9692 i=9693 i=9694 i=9695 i=9696 i=9697 i=9698 i=9699 i=9700 i=9701 i=9702 i=9703 i=9704 i=9705 i=9706 i=9707 i=9708 i=9709 i=9710 i=9711 i=9712 i=9713 i=9714 i=9715 i=9716 i=9717 i=9718 i=9719 i=9720 i=9721 i=9722 i=9723 i=9724 i=9725 i=9726 i=9727 i=9728 i=9729 i=9730 i=9731 i=9732 i=9733 i=9734 i=9735 i=9736 i=9737 i=9738 i=9739 i=9740 i=9741 i=9742 i=9743 i=9744 i=9745 i=9746 i=9747 i=9748 i=9749 i=9750 i=9751 i=9752 i=9753 i=9754 i=9755 i=9756 i=9757 i=9758 i=9759 i=9760 i=9761 i=9762 i=9763 i=9764 i=9765 i=9766 i=9767 i=9768 i=9769 i=9770 i=9771 i=9772 i=9773 i=9774 i=9775 i=9776 i=9777 i=9778 i=9779 i=9780 i=9781 i=9782 i=9783 i=9784 i=9785 i=9786 i=9787 i=9788 i=9789 i=9790 i=9791 i=9792 i=9793 i=9794 i=9795 i=9796 i=9797 i=9798 i=9799 i=9800 i=9801 i=9802 i=9803 i=9804 i=9805 i=9806 i=9807 i=9808 i=9809 i=9810 i=9811 i=9812 i=9813 i=9814 i=9815 i=9816 i=9817 i=9818 i=9819 i=9820 i=9821 i=9822 i=9823 i=9824 i=9825 i=9826 i=9827 i=9828 i=9829 i=9830 i=9831 i=9832 i=9833 i=9834 i=9835 i=9836 i=9837 i=9838 i=9839 i=9840 i=9841 i=9842 i=9843 i=9844 i=9845 i=9846 i=9847 i=9848 i=9849 i=9850 i=9851 i=9852 i=9853 i=9854 i=9855 i=9856 i=9857 i=9858 i=9859 i=9860 i=9861 i=9862 i=9863 i=9864 i=9865 i=9866 i=9867 i=9868 i=9869 i=9870 i=9871 i=9872 i=9873 i=9874 i=9875 i=9876 i=9877 i=9878 i=9879 i=9880 i=9881 i=9882 i=9883 i=9884 i=9885 i=9886 i=9887 i=9888 i=9889 i=9890 i=9891 i=9892 i=9893 i=9894 i=9895 i=9896 i=9897 i=9898 i=9899 i=9900 i=9901 i=9902 i=9903 i=9904 i=9905 i=9906 i=9907 i=9908 i=9909 i=9910 i=9911 i=9912 i=9913 i=9914 i=9915 i=9916 i=9917 i=9918 i=9919 i=9920 i=9921 i=9922 i=9923 i=9924 i=9925 i=9926 i=9927 i=9928 i=9929 i=9930 i=9931 i=9932 i=9933 i=9934 i=9935 i=9936 i=9937 i=9938 i=9939 i=9940 i=9941 i=9942 i=9943 i=9944 i=9945 i=9946 i=9947 i=9948 i=9949 i=9950 i=9951 i=9952 i=9953 i=9954 i=9955 i=9956 i=9957 i=9958 i=9959 i=9960 i=9961 i=9962 i=9963 i=9964 i=9965 i=9966 i=9967 i=9968 i=9969 i=9970 i=9971 i=9972 i=9973 i=9974 i=9975 i=9976 i=9977 i=9978 i=9979 i=9980 i=9981 i=9982 i=9983 i=9984 i=9985 i=9986 i=9987 i=9988 i=9989 i=9990 i=9991 i=9992 i=9993 i=9994 i=9995 i=9996 i=9997 i=9998 i=9999 i=10000 miller-5.6.2/doc/log.txt000066400000000000000000000021651354153536500151150ustar00rootroot00000000000000op=enter,time=1472819681 op=cache,type=A9,hit=0 op=cache,type=A4,hit=1 time=1472819690,batch_size=100,num_filtered=237 op=cache,type=A1,hit=1 op=cache,type=A9,hit=0 op=cache,type=A1,hit=1 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A1,hit=1 time=1472819705,batch_size=100,num_filtered=348 op=cache,type=A4,hit=1 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A4,hit=1 time=1472819713,batch_size=100,num_filtered=493 op=cache,type=A9,hit=1 op=cache,type=A1,hit=1 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A9,hit=1 time=1472819720,batch_size=100,num_filtered=554 op=cache,type=A1,hit=0 op=cache,type=A4,hit=1 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A4,hit=0 op=cache,type=A4,hit=0 op=cache,type=A9,hit=0 time=1472819736,batch_size=100,num_filtered=612 op=cache,type=A1,hit=1 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 op=cache,type=A4,hit=1 op=cache,type=A1,hit=1 op=cache,type=A9,hit=0 op=cache,type=A9,hit=0 time=1472819742,batch_size=100,num_filtered=728 miller-5.6.2/doc/manpage.html000066400000000000000000003162571354153536500161030ustar00rootroot00000000000000 Manpage

Manpage

This is simply a copy of what you should see on running man mlr at a command prompt, once Miller is installed on your system.

MILLER(1)							     MILLER(1)



NAME
       miller - like awk, sed, cut, join, and sort for name-indexed data such
       as CSV and tabular JSON.

SYNOPSIS
       Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or
       more file names}


DESCRIPTION
       Miller operates on key-value-pair data while the familiar Unix tools
       operate on integer-indexed fields: if the natural data structure for
       the latter is the array, then Miller's natural data structure is the
       insertion-ordered hash map.  This encompasses a variety of data
       formats, including but not limited to the familiar CSV, TSV, and JSON.
       (Miller can handle positionally-indexed data as a special case.) This
       manpage documents Miller v5.6.1-dev.

EXAMPLES
   COMMAND-LINE SYNTAX
       mlr --csv cut -f hostname,uptime mydata.csv
       mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv
       mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
       grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
       mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
       mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
       mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
       mlr stats2 -a linreg-pca -f u,v -g shape data/*
       mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
       mlr --from estimates.tbl put '
	 for (k,v in $*) {
	   if (is_numeric(v) && k =~ "^[t-z].*$") {
	     $sum += v; $count += 1
	   }
	 }
	 $mean = $sum / $count # no assignment if count unset'
       mlr --from infile.dat put -f analyze.mlr
       mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
       mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
       mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
       mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'

   DATA FORMATS
	 DKVP: delimited key-value pairs (Miller default format)
	 +---------------------+
	 | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
	 | dish=7,egg=8,flint  | Record 2: "dish" => "7", "egg" => "8", "3" => "flint"
	 +---------------------+

	 NIDX: implicitly numerically indexed (Unix-toolkit style)
	 +---------------------+
	 | the quick brown     | Record 1: "1" => "the", "2" => "quick", "3" => "brown"
	 | fox jumped	       | Record 2: "1" => "fox", "2" => "jumped"
	 +---------------------+

	 CSV/CSV-lite: comma-separated values with separate header line
	 +---------------------+
	 | apple,bat,cog       |
	 | 1,2,3	       | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
	 | 4,5,6	       | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
	 +---------------------+

	 Tabular JSON: nested objects are supported, although arrays within them are not:
	 +---------------------+
	 | {		       |
	 |  "apple": 1,        | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
	 |  "bat": 2,	       |
	 |  "cog": 3	       |
	 | }		       |
	 | {		       |
	 |   "dish": {	       | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => ""
	 |     "egg": 7,       |
	 |     "flint": 8      |
	 |   }, 	       |
	 |   "garlic": ""      |
	 | }		       |
	 +---------------------+

	 PPRINT: pretty-printed tabular
	 +---------------------+
	 | apple bat cog       |
	 | 1	 2   3	       | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
	 | 4	 5   6	       | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
	 +---------------------+

	 XTAB: pretty-printed transposed tabular
	 +---------------------+
	 | apple 1	       | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
	 | bat	 2	       |
	 | cog	 3	       |
	 |		       |
	 | dish 7	       | Record 2: "dish" => "7", "egg" => "8"
	 | egg	8	       |
	 +---------------------+

	 Markdown tabular (supported for output only):
	 +-----------------------+
	 | | apple | bat | cog | |
	 | | ---   | --- | --- | |
	 | | 1	   | 2	 | 3   | | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
	 | | 4	   | 5	 | 6   | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
	 +-----------------------+

OPTIONS
       In the following option flags, the version with "i" designates the
       input stream, "o" the output stream, and the version without prefix
       sets the option for both input and output stream. For example: --irs
       sets the input record separator, --ors the output record separator, and
       --rs sets both the input and output separator to the given value.

   HELP OPTIONS
	 -h or --help		      Show this message.
	 --version		      Show the software version.
	 {verb name} --help	      Show verb-specific help.
	 --help-all-verbs	      Show help on all verbs.
	 -l or --list-all-verbs       List only verb names.
	 -L			      List only verb names, one per line.
	 -f or --help-all-functions   Show help on all built-in functions.
	 -F			      Show a bare listing of built-in functions by name.
	 -k or --help-all-keywords    Show help on all keywords.
	 -K			      Show a bare listing of keywords by name.

   VERB LIST
	altkv bar bootstrap cat check clean-whitespace count-distinct count-similar
	cut decimate fill-down filter format-values fraction grep group-by group-like
	having-fields head histogram join label least-frequent merge-fields
	most-frequent nest nothing put regularize remove-empty-columns rename reorder
	repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle skip-trivial-records
	sort stats1 stats2 step tac tail tee top uniq unsparsify

   FUNCTION LIST
	+ + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~
	> >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub
	substr tolower toupper capitalize lstrip rstrip strip collapse_whitespace
	clean_whitespace system abs acos acosh asin asinh atan atan2 atanh cbrt ceil
	cos cosh erf erfc exp expm1 floor invqnorm log log10 log1p logifit madd max
	mexp min mmul msub pow qnorm round roundm sgn sin sinh sqrt tan tanh urand
	urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms fsec2hms gmt2sec
	localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt sec2gmtdate
	sec2localtime sec2localtime sec2localdate sec2hms strftime strftime_local
	strptime strptime_local systime is_absent is_bool is_boolean is_empty
	is_empty_map is_float is_int is_map is_nonempty_map is_not_empty is_not_map
	is_not_null is_null is_numeric is_present is_string asserting_absent
	asserting_bool asserting_boolean asserting_empty asserting_empty_map
	asserting_float asserting_int asserting_map asserting_nonempty_map
	asserting_not_empty asserting_not_map asserting_not_null asserting_null
	asserting_numeric asserting_present asserting_string boolean float fmtnum
	hexfmt int string typeof depth haskey joink joinkv joinv leafcount length
	mapdiff mapexcept mapselect mapsum splitkv splitkvx splitnv splitnvx

       Please use "mlr --help-function {function name}" for function-specific help.

   I/O FORMATTING
	 --idkvp   --odkvp   --dkvp	 Delimited key-value pairs, e.g "a=1,b=2"
					 (this is Miller's default format).

	 --inidx   --onidx   --nidx	 Implicitly-integer-indexed fields
					 (Unix-toolkit style).
	 -T				 Synonymous with "--nidx --fs tab".

	 --icsv    --ocsv    --csv	 Comma-separated value (or tab-separated
					 with --fs tab, etc.)

	 --itsv    --otsv    --tsv	 Keystroke-savers for "--icsv --ifs tab",
					 "--ocsv --ofs tab", "--csv --fs tab".
	 --iasv    --oasv    --asv	 Similar but using ASCII FS 0x1f and RS 0x1e
	 --iusv    --ousv    --usv	 Similar but using Unicode FS U+241F (UTF-8 0xe2909f)
					 and RS U+241E (UTF-8 0xe2909e)

	 --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated
					 with --fs tab, etc.). The 'lite' CSV does not handle
					 RFC-CSV double-quoting rules; is slightly faster;
					 and handles heterogeneity in the input stream via
					 empty newline followed by new header line. See also
					 http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc.

	 --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab",
					 "--ocsvlite --ofs tab", "--csvlite --fs tab".
	 -t				 Synonymous with --tsvlite.
	 --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e
	 --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f)
					 and RS U+241E (UTF-8 0xe2909e)

	 --ipprint --opprint --pprint	 Pretty-printed tabular (produces no
					 output until all input is in).
			     --right	 Right-justifies all fields for PPRINT output.
			     --barred	 Prints a border around PPRINT output
					 (only available for output).

		   --omd		 Markdown-tabular (only available for output).

	 --ixtab   --oxtab   --xtab	 Pretty-printed vertical-tabular.
			     --xvright	 Right-justifies values for XTAB format.

	 --ijson   --ojson   --json	 JSON tabular: sequence or list of one-level
					 maps: {...}{...} or [{...},{...}].
	   --json-map-arrays-on-input	 JSON arrays are unmillerable. --json-map-arrays-on-input
	   --json-skip-arrays-on-input	 is the default: arrays are converted to integer-indexed
	   --json-fatal-arrays-on-input  maps. The other two options cause them to be skipped, or
					 to be treated as errors.  Please use the jq tool for full
					 JSON (pre)processing.
			     --jvstack	 Put one key-value pair per line for JSON
					 output.
			     --jlistwrap Wrap JSON output in outermost [ ].
			   --jknquoteint Do not quote non-string map keys in JSON output.
			    --jvquoteall Quote map values in JSON output, even if they're
					 numeric.
		     --jflatsep {string} Separator for flattening multi-level JSON keys,
					 e.g. '{"a":{"b":3}}' becomes a:b => 3 for
					 non-JSON formats. Defaults to :.

	 -p is a keystroke-saver for --nidx --fs space --repifs

	 --mmap --no-mmap --mmap-below {n} Use mmap for files whenever possible, never, or
					 for files less than n bytes in size. Default is for
					 files less than 4294967296 bytes in size.
					 'Whenever possible' means always except for when reading
					 standard input which is not mmappable. If you don't know
					 what this means, don't worry about it -- it's a minor
					 performance optimization.

	 Examples: --csv for CSV-formatted input and output; --idkvp --opprint for
	 DKVP-formatted input and pretty-printed output.

	 Please use --iformat1 --oformat2 rather than --format1 --oformat2.
	 The latter sets up input and output flags for format1, not all of which
	 are overridden in all cases by setting output format to format2.

   COMMENTS IN DATA
	 --skip-comments		 Ignore commented lines (prefixed by "#")
					 within the input.
	 --skip-comments-with {string}	 Ignore commented lines within input, with
					 specified prefix.
	 --pass-comments		 Immediately print commented lines (prefixed by "#")
					 within the input.
	 --pass-comments-with {string}	 Immediately print commented lines within input, with
					 specified prefix.
       Notes:
       * Comments are only honored at the start of a line.
       * In the absence of any of the above four options, comments are data like
	 any other text.
       * When pass-comments is used, comment lines are written to standard output
	 immediately upon being read; they are not part of the record stream.
	 Results may be counterintuitive. A suggestion is to place comments at the
	 start of data files.

   FORMAT-CONVERSION KEYSTROKE-SAVERS
       As keystroke-savers for format-conversion you may use the following:
	       --c2t --c2d --c2n --c2j --c2x --c2p --c2m
	 --t2c	     --t2d --t2n --t2j --t2x --t2p --t2m
	 --d2c --d2t	   --d2n --d2j --d2x --d2p --d2m
	 --n2c --n2t --n2d	 --n2j --n2x --n2p --n2m
	 --j2c --j2t --j2d --j2n       --j2x --j2p --j2m
	 --x2c --x2t --x2d --x2n --x2j	     --x2p --x2m
	 --p2c --p2t --p2d --p2n --p2j --p2x	   --p2m
       The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,
       PPRINT, and markdown, respectively. Note that markdown format is available for
       output only.

   COMPRESSED I/O
	 --prepipe {command} This allows Miller to handle compressed inputs. You can do
	 without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...".
	 However, when multiple input files are present, between-file separations are
	 lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can
	 specify an action to be taken on each input file. This pre-pipe command must
	 be able to read from standard input; it will be invoked with
	   {command} < {filename}.
	 Examples:
	   mlr --prepipe 'gunzip'
	   mlr --prepipe 'zcat -cf'
	   mlr --prepipe 'xz -cd'
	   mlr --prepipe cat
	 Note that this feature is quite general and is not limited to decompression
	 utilities. You can use it to apply per-file filters of your choice.
	 For output compression (or other) utilities, simply pipe the output:
	   mlr ... | {your compression command}

   SEPARATORS
	 --rs	  --irs     --ors	       Record separators, e.g. 'lf' or '\r\n'
	 --fs	  --ifs     --ofs  --repifs    Field separators, e.g. comma
	 --ps	  --ips     --ops	       Pair separators, e.g. equals sign

	 Notes about line endings:
	 * Default line endings (--irs and --ors) are "auto" which means autodetect from
	   the input file format, as long as the input file(s) have lines ending in either
	   LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as
	   carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style).
	 * If both irs and ors are auto (which is the default) then LF input will lead to LF
	   output and CRLF input will lead to CRLF output, regardless of the platform you're
	   running on.
	 * The line-ending autodetector triggers on the first line ending detected in the input
	   stream. E.g. if you specify a CRLF-terminated file on the command line followed by an
	   LF-terminated file then autodetected line endings will be CRLF.
	 * If you use --ors {something else} with (default or explicitly specified) --irs auto
	   then line endings are autodetected on input and set to what you specify on output.
	 * If you use --irs {something else} with (default or explicitly specified) --ors auto
	   then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.

	 Notes about all other separators:
	 * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats
	   do key-value pairs appear juxtaposed.
	 * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines;
	   XTAB records are separated by two or more consecutive IFS/OFS -- i.e.
	   a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs
	   auto for XTAB format. (XTAB's default IFS/OFS are "auto".)
	 * OFS must be single-character for PPRINT format. This is because it is used
	   with repetition for alignment; multi-character separators would make
	   alignment impossible.
	 * OPS may be multi-character for XTAB format, in which case alignment is
	   disabled.
	 * TSV is simply CSV using tab as field separator ("--fs tab").
	 * FS/PS are ignored for markdown format; RS is used.
	 * All FS and PS options are ignored for JSON format, since they are not relevant
	   to the JSON format.
	 * You can specify separators in any of the following ways, shown by example:
	   - Type them out, quoting as necessary for shell escapes, e.g.
	     "--fs '|' --ips :"
	   - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'".
	   - To avoid backslashing, you can use any of the following names:
	     cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals
	 * Default separators by format:
	     File format  RS	   FS	    PS
	     gen	  N/A	   (N/A)    (N/A)
	     dkvp	  auto	   ,	    =
	     json	  auto	   (N/A)    (N/A)
	     nidx	  auto	   space    (N/A)
	     csv	  auto	   ,	    (N/A)
	     csvlite	  auto	   ,	    (N/A)
	     markdown	  auto	   (N/A)    (N/A)
	     pprint	  auto	   space    (N/A)
	     xtab	  (N/A)    auto     space

   CSV-SPECIFIC OPTIONS
	 --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1
			    of input files. Tip: combine with "label" to recreate
			    missing headers.
	 --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line,
			    fill remaining keys with empty string. If a data line has more
			    fields than the header line, use integer field labels as in
			    the implicit-header case.
	 --headerless-csv-output   Print only CSV data lines.
	 -N		    Keystroke-saver for --implicit-csv-header --headerless-csv-output.

   DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT
	 --quote-all	    Wrap all fields in double quotes
	 --quote-none	    Do not wrap any fields in double quotes, even if they have
			    OFS or ORS in them
	 --quote-minimal    Wrap fields in double quotes only if they have OFS or ORS
			    in them (default)
	 --quote-numeric    Wrap fields in double quotes only if they have numbers
			    in them
	 --quote-original   Wrap fields in double quotes if and only if they were
			    quoted on input. This isn't sticky for computed fields:
			    e.g. if fields a and b were quoted on input and you do
			    "put '$c = $a . $b'" then field c won't inherit a or b's
			    was-quoted-on-input flag.

   NUMERICAL FORMATTING
	 --ofmt {format}    E.g. %.18lf, %.0lf. Please use sprintf-style codes for
			    double-precision. Applies to verbs which compute new
			    values, e.g. put, stats1, stats2. See also the fmtnum
			    function within mlr put (mlr --help-all-functions).
			    Defaults to %lf.

   OTHER OPTIONS
	 --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter
			    urand()/urandint()/urand32().
	 --nr-progress-mod {m}, with m a positive integer: print filename and record
			    count to stderr every m input records.
	 --from {filename}  Use this to specify an input file before the verb(s),
			    rather than after. May be used more than once. Example:
			    "mlr --from a.dat --from b.dat cat" is the same as
			    "mlr cat a.dat b.dat".
	 -n		    Process no input files, nor standard input either. Useful
			    for mlr put with begin/end statements only. (Same as --from
			    /dev/null.) Also useful in "mlr -n put -v '...'" for
			    analyzing abstract syntax trees (if that's your thing).
	 -I		    Process files in-place. For each file name on the command
			    line, output is written to a temp file in the same
			    directory, which is then renamed over the original. Each
			    file is processed in isolation: if the output format is
			    CSV, CSV headers will be present in each output file;
			    statistics are only over each file's own records; and so on.

   THEN-CHAINING
       Output of one verb may be chained as input to another using "then", e.g.
	 mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color

   AUXILIARY COMMANDS
       Miller has a few otherwise-standalone executables packaged within it.
       They do not participate in any other parts of Miller.
       Available subcommands:
	 aux-list
	 lecat
	 termcvt
	 hex
	 unhex
	 netbsd-strptime
       For more information, please invoke mlr {subcommand} --help

VERBS
   altkv
       Usage: mlr altkv [no options]
       Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs.

   bar
       Usage: mlr bar [options]
       Replaces a numeric field with a number of asterisks, allowing for cheesy
       bar plots. These align best with --opprint or --oxtab output format.
       Options:
       -f   {a,b,c}	 Field names to convert to bars.
       -c   {character}  Fill character: default '*'.
       -x   {character}  Out-of-bounds character: default '#'.
       -b   {character}  Blank character: default '.'.
       --lo {lo}	 Lower-limit value for min-width bar: default '0.000000'.
       --hi {hi}	 Upper-limit value for max-width bar: default '100.000000'.
       -w   {n} 	 Bar-field width: default '40'.
       --auto		 Automatically computes limits, ignoring --lo and --hi.
			 Holds all records in memory before producing any output.

   bootstrap
       Usage: mlr bootstrap [options]
       Emits an n-sample, with replacement, of the input records.
       Options:
       -n {number} Number of samples to output. Defaults to number of input records.
		   Must be non-negative.
       See also mlr sample and mlr shuffle.

   cat
       Usage: mlr cat [options]
       Passes input records directly to output. Most useful for format conversion.
       Options:
       -n	 Prepend field "n" to each record with record-counter starting at 1
       -g {comma-separated field name(s)} When used with -n/-N, writes record-counters
		 keyed by specified field name(s).
       -v	 Write a low-level record-structure dump to stderr.
       -N {name} Prepend field {name} to each record with record-counter starting at 1

   check
       Usage: mlr check
       Consumes records without printing any output.
       Useful for doing a well-formatted check on input data.

   clean-whitespace
       Usage: mlr clean-whitespace [options] {old1,new1,old2,new2,...}
       For each record, for each field in the record, whitespace-cleans the keys and
       values. Whitespace-cleaning entails stripping leading and trailing whitespace,
       and replacing multiple whitespace with singles. For finer-grained control,
       please see the DSL functions lstrip, rstrip, strip, collapse_whitespace,
       and clean_whitespace.

       Options:
       -k|--keys-only	 Do not touch values.
       -v|--values-only  Do not touch keys.
       It is an error to specify -k as well as -v.

   count-distinct
       Usage: mlr count-distinct [options]
       Prints number of records having distinct values for specified field names.
       Same as uniq -c.

       Options:
       -f {a,b,c}    Field names for distinct count.
       -n	     Show only the number of distinct values. Not compatible with -u.
       -o {name}     Field name for output count. Default "count".
		     Ignored with -u.
       -u	     Do unlashed counts for multiple field names. With -f a,b and
		     without -u, computes counts for distinct combinations of a
		     and b field values. With -f a,b and with -u, computes counts
		     for distinct a field values and counts for distinct b field
		     values separately.

   count-similar
       Usage: mlr count-similar [options]
       Ingests all records, then emits each record augmented by a count of
       the number of other records having the same group-by field values.
       Options:
       -g {d,e,f} Group-by-field names for counts.
       -o {name}  Field name for output count. Default "count".

   cut
       Usage: mlr cut [options]
       Passes through input records with specified fields included/excluded.
       -f {a,b,c}	Field names to include for cut.
       -o		Retain fields in the order specified here in the argument list.
			Default is to retain them in the order found in the input data.
       -x|--complement	Exclude, rather than include, field names specified by -f.
       -r		Treat field names as regular expressions. "ab", "a.*b" will
			match any field name containing the substring "ab" or matching
			"a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may
			be used. The -o flag is ignored when -r is present.
       Examples:
	 mlr cut -f hostname,status
	 mlr cut -x -f hostname,status
	 mlr cut -r -f '^status$,sda[0-9]'
	 mlr cut -r -f '^status$,"sda[0-9]"'
	 mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive)

   decimate
       Usage: mlr decimate [options]
       -n {count}    Decimation factor; default 10
       -b	     Decimate by printing first of every n.
       -e	     Decimate by printing last of every n (default).
       -g {a,b,c}    Optional group-by-field names for decimate counts
       Passes through one of every n records, optionally by category.

   fill-down
       Usage: mlr fill-down [options]
       -f {a,b,c}	   Field names for fill-down
       -a|--only-if-absent Field names for fill-down
       If a given record has a missing value for a given field, fill that from
       the corresponding value from a previous record, if any.
       By default, a 'missing' field either is absent, or has the empty-string value.
       With -a, a field is 'missing' only if it is absent.

   filter
       Usage: mlr filter [options] {expression}
       Prints records for which {expression} evaluates to true.
       If there are multiple semicolon-delimited expressions, all of them are
       evaluated and the last one is used as the filter criterion.

       Conversion options:
       -S: Keeps field values as strings with no type inference to int or float.
       -F: Keeps field values as strings or floats with no inference to int.
       All field values are type-inferred to int/float/string unless this behavior is
       suppressed with -S or -F.

       Output/formatting options:
       --oflatsep {string}: Separator to use when flattening multi-level @-variables
	   to output records for emit. Default ":".
       --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
       --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
       Any of the output-format command-line flags (see mlr -h). Example: using
	 mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
       the input is CSV, the output is pretty-print tabular, but the tee-file output
       is written in JSON format.
       --no-fflush: for emit, tee, print, and dump, don't call fflush() after every
	   record.

       Expression-specification options:
       -f {filename}: the DSL expression is taken from the specified file rather
	   than from the command line. Outer single quotes wrapping the expression
	   should not be placed in the file. If -f is specified more than once,
	   all input files specified using -f are concatenated to produce the expression.
	   (For example, you can define functions in one file and call them from another.)
       -e {expression}: You can use this after -f to add an expression. Example use
	   case: define functions/subroutines in a file you specify with -f, then call
	   them with an expression you specify with -e.
       (If you mix -e and -f then the expressions are evaluated in the order encountered.
       Since the expression pieces are simply concatenated, please be sure to use intervening
       semicolons to separate expressions.)

       Tracing options:
       -v: Prints the expressions's AST (abstract syntax tree), which gives
	   full transparency on the precedence and associativity rules of
	   Miller's grammar, to stdout.
       -a: Prints a low-level stack-allocation trace to stdout.
       -t: Prints a low-level parser trace to stderr.
       -T: Prints a every statement to stderr as it is executed.

       Other options:
       -x: Prints records for which {expression} evaluates to false.

       Please use a dollar sign for field names and double-quotes for string
       literals. If field names have special characters such as "." then you might
       use braces, e.g. '${field.name}'. Miller built-in variables are
       NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
       variables. The environment-variable name may be an expression, e.g. a field
       value.

       Use # to comment to end of line.

       Examples:
	 mlr filter 'log10($count) > 4.0'
	 mlr filter 'FNR == 2	       (second record in each file)'
	 mlr filter 'urand() < 0.001'  (subsampling)
	 mlr filter '$color != "blue" && $value > 4.2'
	 mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)'
	 mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)'
	 mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd'
	 mlr filter '
	   NR == 1 ||
	  #NR == 2 ||
	   NR == 3
	 '

       Please see http://johnkerl.org/miller/doc/reference.html for more information
       including function list. Or "mlr -f". Please also also "mlr grep" which is
       useful when you don't yet know which field name(s) you're looking for.

   format-values
       Usage: mlr format-values [options]
       Applies format strings to all field values, depending on autodetected type.
       * If a field value is detected to be integer, applies integer format.
       * Else, if a field value is detected to be float, applies float format.
       * Else, applies string format.

       Note: this is a low-keystroke way to apply formatting to many fields. To get
       finer control, please see the fmtnum function within the mlr put DSL.

       Note: this verb lets you apply arbitrary format strings, which can produce
       undefined behavior and/or program crashes.  See your system's "man printf".

       Options:
       -i {integer format} Defaults to "%lld".
			   Examples: "%06lld", "%08llx".
			   Note that Miller integers are long long so you must use
			   formats which apply to long long, e.g. with ll in them.
			   Undefined behavior results otherwise.
       -f {float format}   Defaults to "%lf".
			   Examples: "%8.3lf", "%.6le".
			   Note that Miller floats are double-precision so you must
			   use formats which apply to double, e.g. with l[efg] in them.
			   Undefined behavior results otherwise.
       -s {string format}  Defaults to "%s".
			   Examples: "_%s", "%08s".
			   Note that you must use formats which apply to string, e.g.
			   with s in them. Undefined behavior results otherwise.
       -n		   Coerce field values autodetected as int to float, and then
			   apply the float format.

   fraction
       Usage: mlr fraction [options]
       For each record's value in specified fields, computes the ratio of that
       value to the sum of values in that field over all input records.
       E.g. with input records	x=1  x=2  x=3  and  x=4, emits output records
       x=1,x_fraction=0.1  x=2,x_fraction=0.2  x=3,x_fraction=0.3  and	x=4,x_fraction=0.4

       Note: this is internally a two-pass algorithm: on the first pass it retains
       input records and accumulates sums; on the second pass it computes quotients
       and emits output records. This means it produces no output until all input is read.

       Options:
       -f {a,b,c}    Field name(s) for fraction calculation
       -g {d,e,f}    Optional group-by-field name(s) for fraction counts
       -p	     Produce percents [0..100], not fractions [0..1]. Output field names
		     end with "_percent" rather than "_fraction"
       -c	     Produce cumulative distributions, i.e. running sums: each output
		     value folds in the sum of the previous for the specified group
		     E.g. with input records  x=1  x=2	x=3  and  x=4, emits output records
		     x=1,x_cumulative_fraction=0.1  x=2,x_cumulative_fraction=0.3
		     x=3,x_cumulative_fraction=0.6  and  x=4,x_cumulative_fraction=1.0

   grep
       Usage: mlr grep [options] {regular expression}
       Passes through records which match {regex}.
       Options:
       -i    Use case-insensitive search.
       -v    Invert: pass through records which do not match the regex.
       Note that "mlr filter" is more powerful, but requires you to know field names.
       By contrast, "mlr grep" allows you to regex-match the entire record. It does
       this by formatting each record in memory as DKVP, using command-line-specified
       ORS/OFS/OPS, and matching the resulting line against the regex specified
       here. In particular, the regex is not applied to the input stream: if you
       have CSV with header line "x,y,z" and data line "1,2,3" then the regex will
       be matched, not against either of these lines, but against the DKVP line
       "x=1,y=2,z=3".  Furthermore, not all the options to system grep are supported,
       and this command is intended to be merely a keystroke-saver. To get all the
       features of system grep, you can do
	 "mlr --odkvp ... | grep ... | mlr --idkvp ..."

   group-by
       Usage: mlr group-by {comma-separated field names}
       Outputs records in batches having identical values at specified field names.

   group-like
       Usage: mlr group-like
       Outputs records in batches having identical field names.

   having-fields
       Usage: mlr having-fields [options]
       Conditionally passes through records depending on each record's field names.
       Options:
	 --at-least	 {comma-separated names}
	 --which-are	 {comma-separated names}
	 --at-most	 {comma-separated names}
	 --all-matching  {regular expression}
	 --any-matching  {regular expression}
	 --none-matching {regular expression}
       Examples:
	 mlr having-fields --which-are amount,status,owner
	 mlr having-fields --any-matching 'sda[0-9]'
	 mlr having-fields --any-matching '"sda[0-9]"'
	 mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive)

   head
       Usage: mlr head [options]
       -n {count}    Head count to print; default 10
       -g {a,b,c}    Optional group-by-field names for head counts
       Passes through the first n records, optionally by category.
       Without -g, ceases consuming more input (i.e. is fast) when n
       records have been read.

   histogram
       Usage: mlr histogram [options]
       -f {a,b,c}    Value-field names for histogram counts
       --lo {lo}     Histogram low value
       --hi {hi}     Histogram high value
       --nbins {n}   Number of histogram bins
       --auto	     Automatically computes limits, ignoring --lo and --hi.
		     Holds all values in memory before producing any output.
       -o {prefix}   Prefix for output field name. Default: no prefix.
       Just a histogram. Input values < lo or > hi are not counted.

   join
       Usage: mlr join [options]
       Joins records from specified left file name with records from all file names
       at the end of the Miller argument list.
       Functionality is essentially the same as the system "join" command, but for
       record streams.
       Options:
	 -f {left file name}
	 -j {a,b,c}   Comma-separated join-field names for output
	 -l {a,b,c}   Comma-separated join-field names for left input file;
		      defaults to -j values if omitted.
	 -r {a,b,c}   Comma-separated join-field names for right input file(s);
		      defaults to -j values if omitted.
	 --lp {text}  Additional prefix for non-join output field names from
		      the left file
	 --rp {text}  Additional prefix for non-join output field names from
		      the right file(s)
	 --np	      Do not emit paired records
	 --ul	      Emit unpaired records from the left file
	 --ur	      Emit unpaired records from the right file(s)
	 -s|--sorted-input  Require sorted input: records must be sorted
		      lexically by their join-field names, else not all records will
		      be paired. The only likely use case for this is with a left
		      file which is too big to fit into system memory otherwise.
	 -u	      Enable unsorted input. (This is the default even without -u.)
		      In this case, the entire left file will be loaded into memory.
	 --prepipe {command} As in main input options; see mlr --help for details.
		      If you wish to use a prepipe command for the main input as well
		      as here, it must be specified there as well as here.
       File-format options default to those for the right file names on the Miller
       argument list, but may be overridden for the left file as follows. Please see
       the main "mlr --help" for more information on syntax for these arguments.
	 -i {one of csv,dkvp,nidx,pprint,xtab}
	 --irs {record-separator character}
	 --ifs {field-separator character}
	 --ips {pair-separator character}
	 --repifs
	 --repips
	 --mmap
	 --no-mmap
       Please use "mlr --usage-separator-options" for information on specifying separators.
       Please see http://johnkerl.org/miller/doc/reference.html for more information
       including examples.

   label
       Usage: mlr label {new1,new2,new3,...}
       Given n comma-separated names, renames the first n fields of each record to
       have the respective name. (Fields past the nth are left with their original
       names.) Particularly useful with --inidx or --implicit-csv-header, to give
       useful names to otherwise integer-indexed fields.
       Examples:
	 "echo 'a b c d' | mlr --inidx --odkvp cat"	  gives "1=a,2=b,3=c,4=d"
	 "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d"

   least-frequent
       Usage: mlr least-frequent [options]
       Shows the least frequently occurring distinct values for specified field names.
       The first entry is the statistical anti-mode; the remaining are runners-up.
       Options:
       -f {one or more comma-separated field names}. Required flag.
       -n {count}. Optional flag defaulting to 10.
       -b	   Suppress counts; show only field values.
       -o {name}   Field name for output count. Default "count".
       See also "mlr most-frequent".

   merge-fields
       Usage: mlr merge-fields [options]
       Computes univariate statistics for each input record, accumulated across
       specified fields.
       Options:
       -a {sum,count,...}  Names of accumulators. One or more of:
	 count	   Count instances of fields
	 mode	   Find most-frequently-occurring values for fields; first-found wins tie
	 antimode  Find least-frequently-occurring values for fields; first-found wins tie
	 sum	   Compute sums of specified fields
	 mean	   Compute averages (sample means) of specified fields
	 stddev    Compute sample standard deviation of specified fields
	 var	   Compute sample variance of specified fields
	 meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
	 skewness  Compute sample skewness of specified fields
	 kurtosis  Compute sample kurtosis of specified fields
	 min	   Compute minimum values of specified fields
	 max	   Compute maximum values of specified fields
       -f {a,b,c}  Value-field names on which to compute statistics. Requires -o.
       -r {a,b,c}  Regular expressions for value-field names on which to compute
		   statistics. Requires -o.
       -c {a,b,c}  Substrings for collapse mode. All fields which have the same names
		   after removing substrings will be accumulated together. Please see
		   examples below.
       -i	   Use interpolated percentiles, like R's type=7; default like type=1.
		   Not sensical for string-valued fields.
       -o {name}   Output field basename for -f/-r.
       -k	   Keep the input fields which contributed to the output statistics;
		   the default is to omit them.
       -F	   Computes integerable things (e.g. count) in floating point.

       String-valued data make sense unless arithmetic on them is required,
       e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
       numbers are less than strings.

       Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8".
       Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo
	 produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are
	 summed over.
       Example: mlr merge-fields -a sum,count -r in_,out_ -o bar
	 produces "bar_sum=15,bar_count=4" since all four fields are summed over.
       Example: mlr merge-fields -a sum,count -c in_,out_
	 produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1"
	 since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to
	 "b_y", and "b_out_x" collapses to "b_x".

   most-frequent
       Usage: mlr most-frequent [options]
       Shows the most frequently occurring distinct values for specified field names.
       The first entry is the statistical mode; the remaining are runners-up.
       Options:
       -f {one or more comma-separated field names}. Required flag.
       -n {count}. Optional flag defaulting to 10.
       -b	   Suppress counts; show only field values.
       -o {name}   Field name for output count. Default "count".
       See also "mlr least-frequent".

   nest
       Usage: mlr nest [options]
       Explodes specified field values into separate fields/records, or reverses this.
       Options:
	 --explode,--implode   One is required.
	 --values,--pairs      One is required.
	 --across-records,--across-fields One is required.
	 -f {field name}       Required.
	 --nested-fs {string}  Defaults to ";". Field separator for nested values.
	 --nested-ps {string}  Defaults to ":". Pair separator for nested key-value pairs.
	 --evar {string}       Shorthand for --explode --values ---across-records --nested-fs {string}
	 --ivar {string}       Shorthand for --implode --values ---across-records --nested-fs {string}
       Please use "mlr --usage-separator-options" for information on specifying separators.

       Examples:

	 mlr nest --explode --values --across-records -f x
	 with input record "x=a;b;c,y=d" produces output records
	   "x=a,y=d"
	   "x=b,y=d"
	   "x=c,y=d"
	 Use --implode to do the reverse.

	 mlr nest --explode --values --across-fields -f x
	 with input record "x=a;b;c,y=d" produces output records
	   "x_1=a,x_2=b,x_3=c,y=d"
	 Use --implode to do the reverse.

	 mlr nest --explode --pairs --across-records -f x
	 with input record "x=a:1;b:2;c:3,y=d" produces output records
	   "a=1,y=d"
	   "b=2,y=d"
	   "c=3,y=d"

	 mlr nest --explode --pairs --across-fields -f x
	 with input record "x=a:1;b:2;c:3,y=d" produces output records
	   "a=1,b=2,c=3,y=d"

       Notes:
       * With --pairs, --implode doesn't make sense since the original field name has
	 been lost.
       * The combination "--implode --values --across-records" is non-streaming:
	 no output records are produced until all input records have been read. In
	 particular, this means it won't work in tail -f contexts. But all other flag
	 combinations result in streaming (tail -f friendly) data processing.
       * It's up to you to ensure that the nested-fs is distinct from your data's IFS:
	 e.g. by default the former is semicolon and the latter is comma.
       See also mlr reshape.

   nothing
       Usage: mlr nothing [options]
       Drops all input records. Useful for testing, or after tee/print/etc. have
       produced other output.

   put
       Usage: mlr put [options] {expression}
       Adds/updates specified field(s). Expressions are semicolon-separated and must
       either be assignments, or evaluate to boolean.  Booleans with following
       statements in curly braces control whether those statements are executed;
       booleans without following curly braces do nothing except side effects (e.g.
       regex-captures into \1, \2, etc.).

       Conversion options:
       -S: Keeps field values as strings with no type inference to int or float.
       -F: Keeps field values as strings or floats with no inference to int.
       All field values are type-inferred to int/float/string unless this behavior is
       suppressed with -S or -F.

       Output/formatting options:
       --oflatsep {string}: Separator to use when flattening multi-level @-variables
	   to output records for emit. Default ":".
       --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
       --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
       Any of the output-format command-line flags (see mlr -h). Example: using
	 mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
       the input is CSV, the output is pretty-print tabular, but the tee-file output
       is written in JSON format.
       --no-fflush: for emit, tee, print, and dump, don't call fflush() after every
	   record.

       Expression-specification options:
       -f {filename}: the DSL expression is taken from the specified file rather
	   than from the command line. Outer single quotes wrapping the expression
	   should not be placed in the file. If -f is specified more than once,
	   all input files specified using -f are concatenated to produce the expression.
	   (For example, you can define functions in one file and call them from another.)
       -e {expression}: You can use this after -f to add an expression. Example use
	   case: define functions/subroutines in a file you specify with -f, then call
	   them with an expression you specify with -e.
       (If you mix -e and -f then the expressions are evaluated in the order encountered.
       Since the expression pieces are simply concatenated, please be sure to use intervening
       semicolons to separate expressions.)

       Tracing options:
       -v: Prints the expressions's AST (abstract syntax tree), which gives
	   full transparency on the precedence and associativity rules of
	   Miller's grammar, to stdout.
       -a: Prints a low-level stack-allocation trace to stdout.
       -t: Prints a low-level parser trace to stderr.
       -T: Prints a every statement to stderr as it is executed.

       Other options:
       -q: Does not include the modified record in the output stream. Useful for when
	   all desired output is in begin and/or end blocks.

       Please use a dollar sign for field names and double-quotes for string
       literals. If field names have special characters such as "." then you might
       use braces, e.g. '${field.name}'. Miller built-in variables are
       NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
       variables. The environment-variable name may be an expression, e.g. a field
       value.

       Use # to comment to end of line.

       Examples:
	 mlr put '$y = log10($x); $z = sqrt($y)'
	 mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0
	 mlr put '$x>0.0;  $y=log10($x); $z=sqrt($y)'	# does all three statements
	 mlr put '$a =~ "([a-z]+)_([0-9]+);  $b = "left_\1"; $c = "right_\2"'
	 mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }'
	 mlr put '$filename = FILENAME'
	 mlr put '$colored_shape = $color . "_" . $shape'
	 mlr put '$y = cos($theta); $z = atan2($y, $x)'
	 mlr put '$name = sub($name, "http.*com"i, "")'
	 mlr put -q '@sum += $x; end {emit @sum}'
	 mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}'
	 mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}'
	 mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}'
	 mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}'
	 mlr put '
	   $x = 1;
	  #$y = 2;
	   $z = 3
	 '

       Please see also 'mlr -k' for examples using redirected output.

       Please see http://johnkerl.org/miller/doc/reference.html for more information
       including function list. Or "mlr -f".
       Please see in particular:
	 http://www.johnkerl.org/miller/doc/reference.html#put

   regularize
       Usage: mlr regularize
       For records seen earlier in the data stream with same field names in
       a different order, outputs them with field names in the previously
       encountered order.
       Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8
       output as	      a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8

   remove-empty-columns
       Usage: mlr remove-empty-columns
       Omits fields which are empty on every input row. Non-streaming.

   rename
       Usage: mlr rename [options] {old1,new1,old2,new2,...}
       Renames specified fields.
       Options:
       -r	  Treat old field  names as regular expressions. "ab", "a.*b"
		  will match any field name containing the substring "ab" or
		  matching "a.*b", respectively; anchors of the form "^ab$",
		  "^a.*b$" may be used. New field names may be plain strings,
		  or may contain capture groups of the form "\1" through
		  "\9". Wrapping the regex in double quotes is optional, but
		  is required if you wish to follow it with 'i' to indicate
		  case-insensitivity.
       -g	  Do global replacement within each field name rather than
		  first-match replacement.
       Examples:
       mlr rename old_name,new_name'
       mlr rename old_name_1,new_name_1,old_name_2,new_name_2'
       mlr rename -r 'Date_[0-9]+,Date,'  Rename all such fields to be "Date"
       mlr rename -r '"Date_[0-9]+",Date' Same
       mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015
       mlr rename -r '"name"i,Name'	  Rename "name", "Name", "NAME", etc. to "Name"

   reorder
       Usage: mlr reorder [options]
       -f {a,b,c}   Field names to reorder.
       -e	    Put specified field names at record end: default is to put
		    them at record start.
       Examples:
       mlr reorder    -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3".
       mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2".

   repeat
       Usage: mlr repeat [options]
       Copies input records to output records multiple times.
       Options must be exactly one of the following:
	 -n {repeat count}  Repeat each input record this many times.
	 -f {field name}    Same, but take the repeat count from the specified
			    field name of each input record.
       Example:
	 echo x=0 | mlr repeat -n 4 then put '$x=urand()'
       produces:
	x=0.488189
	x=0.484973
	x=0.704983
	x=0.147311
       Example:
	 echo a=1,b=2,c=3 | mlr repeat -f b
       produces:
	 a=1,b=2,c=3
	 a=1,b=2,c=3
       Example:
	 echo a=1,b=2,c=3 | mlr repeat -f c
       produces:
	 a=1,b=2,c=3
	 a=1,b=2,c=3
	 a=1,b=2,c=3

   reshape
       Usage: mlr reshape [options]
       Wide-to-long options:
	 -i {input field names}   -o {key-field name,value-field name}
	 -r {input field regexes} -o {key-field name,value-field name}
	 These pivot/reshape the input data such that the input fields are removed
	 and separate records are emitted for each key/value pair.
	 Note: this works with tail -f and produces output records for each input
	 record seen.
       Long-to-wide options:
	 -s {key-field name,value-field name}
	 These pivot/reshape the input data to undo the wide-to-long operation.
	 Note: this does not work with tail -f; it produces output records only after
	 all input records have been read.

       Examples:

	 Input file "wide.txt":
	   time       X 	  Y
	   2009-01-01 0.65473572  2.4520609
	   2009-01-02 -0.89248112 0.2154713
	   2009-01-03 0.98012375  1.3179287

	 mlr --pprint reshape -i X,Y -o item,value wide.txt
	   time       item value
	   2009-01-01 X    0.65473572
	   2009-01-01 Y    2.4520609
	   2009-01-02 X    -0.89248112
	   2009-01-02 Y    0.2154713
	   2009-01-03 X    0.98012375
	   2009-01-03 Y    1.3179287

	 mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt
	   time       item value
	   2009-01-01 X    0.65473572
	   2009-01-01 Y    2.4520609
	   2009-01-02 X    -0.89248112
	   2009-01-02 Y    0.2154713
	   2009-01-03 X    0.98012375
	   2009-01-03 Y    1.3179287

	 Input file "long.txt":
	   time       item value
	   2009-01-01 X    0.65473572
	   2009-01-01 Y    2.4520609
	   2009-01-02 X    -0.89248112
	   2009-01-02 Y    0.2154713
	   2009-01-03 X    0.98012375
	   2009-01-03 Y    1.3179287

	 mlr --pprint reshape -s item,value long.txt
	   time       X 	  Y
	   2009-01-01 0.65473572  2.4520609
	   2009-01-02 -0.89248112 0.2154713
	   2009-01-03 0.98012375  1.3179287
       See also mlr nest.

   sample
       Usage: mlr sample [options]
       Reservoir sampling (subsampling without replacement), optionally by category.
       -k {count}    Required: number of records to output, total, or by group if using -g.
       -g {a,b,c}    Optional: group-by-field names for samples.
       See also mlr bootstrap and mlr shuffle.

   sec2gmt
       Usage: mlr sec2gmt [options] {comma-separated list of field names}
       Replaces a numeric field representing seconds since the epoch with the
       corresponding GMT timestamp; leaves non-numbers as-is. This is nothing
       more than a keystroke-saver for the sec2gmt function:
	 mlr sec2gmt time1,time2
       is the same as
	 mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)'
       Options:
       -1 through -9: format the seconds using 1..9 decimal places, respectively.

   sec2gmtdate
       Usage: mlr sec2gmtdate {comma-separated list of field names}
       Replaces a numeric field representing seconds since the epoch with the
       corresponding GMT year-month-day timestamp; leaves non-numbers as-is.
       This is nothing more than a keystroke-saver for the sec2gmtdate function:
	 mlr sec2gmtdate time1,time2
       is the same as
	 mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)'

   seqgen
       Usage: mlr seqgen [options]
       Produces a sequence of counters.  Discards the input record stream. Produces
       output as specified by the following options:
       -f {name} Field name for counters; default "i".
       --start {number} Inclusive start value; default "1".
       --stop  {number} Inclusive stop value; default "100".
       --step  {number} Step value; default "1".
       Start, stop, and/or step may be floating-point. Output is integer if start,
       stop, and step are all integers. Step may be negative. It may not be zero
       unless start == stop.

   shuffle
       Usage: mlr shuffle {no options}
       Outputs records randomly permuted. No output records are produced until
       all input records are read.
       See also mlr bootstrap and mlr sample.

   skip-trivial-records
       Usage: mlr skip-trivial-records [options]
       Passes through all records except:
       * those with zero fields;
       * those for which all fields have empty value.

   sort
       Usage: mlr sort {flags}
       Flags:
	 -f  {comma-separated field names}  Lexical ascending
	 -n  {comma-separated field names}  Numerical ascending; nulls sort last
	 -nf {comma-separated field names}  Same as -n
	 -r  {comma-separated field names}  Lexical descending
	 -nr {comma-separated field names}  Numerical descending; nulls sort first
       Sorts records primarily by the first specified field, secondarily by the second
       field, and so on.  (Any records not having all specified sort keys will appear
       at the end of the output, in the order they were encountered, regardless of the
       specified sort order.) The sort is stable: records that compare equal will sort
       in the order they were encountered in the input record stream.

       Example:
	 mlr sort -f a,b -nr x,y,z
       which is the same as:
	 mlr sort -f a -f b -nr x -nr y -nr z

   stats1
       Usage: mlr stats1 [options]
       Computes univariate statistics for one or more given fields, accumulated across
       the input record stream.
       Options:
       -a {sum,count,...}  Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or
			   one or more of:
	  count     Count instances of fields
	  mode	    Find most-frequently-occurring values for fields; first-found wins tie
	  antimode  Find least-frequently-occurring values for fields; first-found wins tie
	  sum	    Compute sums of specified fields
	  mean	    Compute averages (sample means) of specified fields
	  stddev    Compute sample standard deviation of specified fields
	  var	    Compute sample variance of specified fields
	  meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
	  skewness  Compute sample skewness of specified fields
	  kurtosis  Compute sample kurtosis of specified fields
	  min	    Compute minimum values of specified fields
	  max	    Compute maximum values of specified fields
       -f {a,b,c}   Value-field names on which to compute statistics
       --fr {regex} Regex for value-field names on which to compute statistics
		    (compute statsitics on values in all field names matching regex)
       --fx {regex} Inverted regex for value-field names on which to compute statistics
		    (compute statsitics on values in all field names not matching regex)
       -g {d,e,f}   Optional group-by-field names
       --gr {regex} Regex for optional group-by-field names
		    (group by values in field names matching regex)
       --gx {regex} Inverted regex for optional group-by-field names
		    (group by values in field names not matching regex)
       --grfx {regex} Shorthand for --gr {regex} --fx {that same regex}
       -i	    Use interpolated percentiles, like R's type=7; default like type=1.
		    Not sensical for string-valued fields.
       -s	    Print iterative stats. Useful in tail -f contexts (in which
		    case please avoid pprint-format output since end of input
		    stream will never be seen).
       -F	    Computes integerable things (e.g. count) in floating point.
       Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape
       Example: mlr stats1 -a count,mode -f size
       Example: mlr stats1 -a count,mode -f size -g shape
       Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$'
		This computes count and mode statistics on all field names beginning
		with a through h, grouped by all field names starting with k.
       Notes:
       * p50 and median are synonymous.
       * min and max output the same results as p0 and p100, respectively, but use
	 less memory.
       * String-valued data make sense unless arithmetic on them is required,
	 e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
	 numbers are less than strings.
       * count and mode allow text input; the rest require numeric input.
	 In particular, 1 and 1.0 are distinct text for count and mode.
       * When there are mode ties, the first-encountered datum wins.

   stats2
       Usage: mlr stats2 [options]
       Computes bivariate statistics for one or more given field-name pairs,
       accumulated across the input record stream.
       -a {linreg-ols,corr,...}  Names of accumulators: one or more of:
	 linreg-pca   Linear regression using principal component analysis
	 linreg-ols   Linear regression using ordinary least squares
	 r2	      Quality metric for linreg-ols (linreg-pca emits its own)
	 logireg      Logistic regression
	 corr	      Sample correlation
	 cov	      Sample covariance
	 covx	      Sample-covariance matrix
       -f {a,b,c,d}   Value-field name-pairs on which to compute statistics.
		      There must be an even number of names.
       -g {e,f,g}     Optional group-by-field names.
       -v	      Print additional output for linreg-pca.
       -s	      Print iterative stats. Useful in tail -f contexts (in which
		      case please avoid pprint-format output since end of input
		      stream will never be seen).
       --fit	      Rather than printing regression parameters, applies them to
		      the input data to compute new fit fields. All input records are
		      held in memory until end of input stream. Has effect only for
		      linreg-ols, linreg-pca, and logireg.
       Only one of -s or --fit may be used.
       Example: mlr stats2 -a linreg-pca -f x,y
       Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape
       Example: mlr stats2 -a corr -f x,y

   step
       Usage: mlr step [options]
       Computes values dependent on the previous record, optionally grouped
       by category.

       Options:
       -a {delta,rsum,...}   Names of steppers: comma-separated, one or more of:
	 delta	  Compute differences in field(s) between successive records
	 shift	  Include value(s) in field(s) from previous record, if any
	 from-first Compute differences in field(s) from first record
	 ratio	  Compute ratios in field(s) between successive records
	 rsum	  Compute running sums of field(s) between successive records
	 counter  Count instances of field(s) between successive records
	 ewma	  Exponentially weighted moving average over successive records
       -f {a,b,c} Value-field names on which to compute statistics
       -g {d,e,f} Optional group-by-field names
       -F	  Computes integerable things (e.g. counter) in floating point.
       -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no
		  smoothing), near under under 1 is light smoothing, near over 0 is
		  heavy smoothing. Multiple weights may be specified, e.g.
		  "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted
		  is "-d 0.5".
       -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to
		  the -d values. If supplied, the number of -o values must be the same
		  as the number of -d values.

       Examples:
	 mlr step -a rsum -f request_size
	 mlr step -a delta -f request_size -g hostname
	 mlr step -a ewma -d 0.1,0.9 -f x,y
	 mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y
	 mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name

       Please see http://johnkerl.org/miller/doc/reference.html#filter or
       https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
       for more information on EWMA.

   tac
       Usage: mlr tac
       Prints records in reverse order from the order in which they were encountered.

   tail
       Usage: mlr tail [options]
       -n {count}    Tail count to print; default 10
       -g {a,b,c}    Optional group-by-field names for tail counts
       Passes through the last n records, optionally by category.

   tee
       Usage: mlr tee [options] {filename}
       Passes through input records (like mlr cat) but also writes to specified output
       file, using output-format flags from the command line (e.g. --ocsv). See also
       the "tee" keyword within mlr put, which allows data-dependent filenames.
       Options:
       -a:	    append to existing file, if any, rather than overwriting.
       --no-fflush: don't call fflush() after every record.
       Any of the output-format command-line flags (see mlr -h). Example: using
	 mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ...
       the input is CSV, the output is pretty-print tabular, but the tee-file output
       is written in JSON format.

   top
       Usage: mlr top [options]
       -f {a,b,c}    Value-field names for top counts.
       -g {d,e,f}    Optional group-by-field names for top counts.
       -n {count}    How many records to print per category; default 1.
       -a	     Print all fields for top-value records; default is
		     to print only value and group-by fields. Requires a single
		     value-field name only.
       --min	     Print top smallest values; default is top largest values.
       -F	     Keep top values as floats even if they look like integers.
       -o {name}     Field name for output indices. Default "top_idx".
       Prints the n records with smallest/largest values at specified fields,
       optionally by category.

   uniq
       Usage: mlr uniq [options]
       Prints distinct values for specified field names. With -c, same as
       count-distinct. For uniq, -f is a synonym for -g.

       Options:
       -g {d,e,f}    Group-by-field names for uniq counts.
       -c	     Show repeat counts in addition to unique values.
       -n	     Show only the number of distinct values.
       -o {name}     Field name for output count. Default "count".
       -a	     Output each unique record only once. Incompatible with -g.
		     With -c, produces unique records, with repeat counts for each.
		     With -n, produces only one record which is the unique-record count.
		     With neither -c nor -n, produces unique records.

   unsparsify
       Usage: mlr unsparsify [options]
       Prints records with the union of field names over all input records.
       For field names absent in a given record but present in others, fills in
       a value. This verb retains all input before producing any output.

       Options:
       --fill-with {filler string}  What to fill absent fields with. Defaults to
				    the empty string.

       Example: if the input is two records, one being 'a=1,b=2' and the other
       being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and
       'a=,b=3,c=4'.

FUNCTIONS FOR FILTER/PUT
   +
       (class=arithmetic #args=2): Addition.

       + (class=arithmetic #args=1): Unary plus.

   -
       (class=arithmetic #args=2): Subtraction.

       - (class=arithmetic #args=1): Unary minus.

   *
       (class=arithmetic #args=2): Multiplication.

   /
       (class=arithmetic #args=2): Division.

   //
       (class=arithmetic #args=2): Integer division: rounds to negative (pythonic).

   .+
       (class=arithmetic #args=2): Addition, with integer-to-integer overflow

       .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow.

   .-
       (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow.

       .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow.

   .*
       (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow.

   ./
       (class=arithmetic #args=2): Division, with integer-to-integer overflow.

   .//
       (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow.

   %
       (class=arithmetic #args=2): Remainder; never negative-valued (pythonic).

   **
       (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix
       operator.

   |
       (class=arithmetic #args=2): Bitwise OR.

   ^
       (class=arithmetic #args=2): Bitwise XOR.

   &
       (class=arithmetic #args=2): Bitwise AND.

   ~
       (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the
       regex-match operator: try '$y = ~$x'.

   <<
       (class=arithmetic #args=2): Bitwise left-shift.

   >>
       (class=arithmetic #args=2): Bitwise right-shift.

   bitcount
       (class=arithmetic #args=1): Count of 1-bits

   ==
       (class=boolean #args=2): String/numeric equality. Mixing number and string
       results in string compare.

   !=
       (class=boolean #args=2): String/numeric inequality. Mixing number and string
       results in string compare.

   =~
       (class=boolean #args=2): String (left-hand side) matches regex (right-hand
       side), e.g. '$name =~ "^a.*b$"'.

   !=~
       (class=boolean #args=2): String (left-hand side) does not match regex
       (right-hand side), e.g. '$name !=~ "^a.*b$"'.

   >
       (class=boolean #args=2): String/numeric greater-than. Mixing number and string
       results in string compare.

   >=
       (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number
       and string results in string compare.

   <
       (class=boolean #args=2): String/numeric less-than. Mixing number and string
       results in string compare.

   <=
       (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number
       and string results in string compare.

   &&
       (class=boolean #args=2): Logical AND.

   ||
       (class=boolean #args=2): Logical OR.

   ^^
       (class=boolean #args=2): Logical XOR.

   !
       (class=boolean #args=1): Logical negation.

   ? :
       (class=boolean #args=3): Ternary operator.

   .
       (class=string #args=2): String concatenation.

   gsub
       (class=string #args=3): Example: '$name=gsub($name, "old", "new")'
       (replace all).

   regextract
       (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")'
       .

   regextract_or_else
       (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")'
       .

   strlen
       (class=string #args=1): String length.

   sub
       (class=string #args=3): Example: '$name=sub($name, "old", "new")'
       (replace once).

   ssub
       (class=string #args=3): Like sub but does no regexing. No characters are special.

   substr
       (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n
       inclusive. Negative indices -len .. -1 alias to 0 .. len-1.

   tolower
       (class=string #args=1): Convert string to lowercase.

   toupper
       (class=string #args=1): Convert string to uppercase.

   capitalize
       (class=string #args=1): Convert string's first character to uppercase.

   lstrip
       (class=string #args=1): Strip leading whitespace from string.

   rstrip
       (class=string #args=1): Strip trailing whitespace from string.

   strip
       (class=string #args=1): Strip leading and trailing whitespace from string.

   collapse_whitespace
       (class=string #args=1): Strip repeated whitespace from string.

   clean_whitespace
       (class=string #args=1): Same as collapse_whitespace and strip.

   system
       (class=string #args=1): Run command string, yielding its stdout minus final carriage return.

   abs
       (class=math #args=1): Absolute value.

   acos
       (class=math #args=1): Inverse trigonometric cosine.

   acosh
       (class=math #args=1): Inverse hyperbolic cosine.

   asin
       (class=math #args=1): Inverse trigonometric sine.

   asinh
       (class=math #args=1): Inverse hyperbolic sine.

   atan
       (class=math #args=1): One-argument arctangent.

   atan2
       (class=math #args=2): Two-argument arctangent.

   atanh
       (class=math #args=1): Inverse hyperbolic tangent.

   cbrt
       (class=math #args=1): Cube root.

   ceil
       (class=math #args=1): Ceiling: nearest integer at or above.

   cos
       (class=math #args=1): Trigonometric cosine.

   cosh
       (class=math #args=1): Hyperbolic cosine.

   erf
       (class=math #args=1): Error function.

   erfc
       (class=math #args=1): Complementary error function.

   exp
       (class=math #args=1): Exponential function e**x.

   expm1
       (class=math #args=1): e**x - 1.

   floor
       (class=math #args=1): Floor: nearest integer at or below.

   invqnorm
       (class=math #args=1): Inverse of normal cumulative distribution
       function. Note that invqorm(urand()) is normally distributed.

   log
       (class=math #args=1): Natural (base-e) logarithm.

   log10
       (class=math #args=1): Base-10 logarithm.

   log1p
       (class=math #args=1): log(1-x).

   logifit
       (class=math #args=3): Given m and b from logistic regression, compute
       fit: $yhat=logifit($x,$m,$b).

   madd
       (class=math #args=3): a + b mod m (integers)

   max
       (class=math variadic): max of n numbers; null loses

   mexp
       (class=math #args=3): a ** b mod m (integers)

   min
       (class=math variadic): Min of n numbers; null loses

   mmul
       (class=math #args=3): a * b mod m (integers)

   msub
       (class=math #args=3): a - b mod m (integers)

   pow
       (class=math #args=2): Exponentiation; same as **.

   qnorm
       (class=math #args=1): Normal cumulative distribution function.

   round
       (class=math #args=1): Round to nearest integer.

   roundm
       (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is
       the same as round($x/$m)*$m

   sgn
       (class=math #args=1): +1 for positive input, 0 for zero input, -1 for
       negative input.

   sin
       (class=math #args=1): Trigonometric sine.

   sinh
       (class=math #args=1): Hyperbolic sine.

   sqrt
       (class=math #args=1): Square root.

   tan
       (class=math #args=1): Trigonometric tangent.

   tanh
       (class=math #args=1): Hyperbolic tangent.

   urand
       (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval.
       Int-valued example: '$n=floor(20+urand()*11)'.

   urandrange
       (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b).

   urand32
       (class=math #args=0): Integer uniformly distributed 0 and 2**32-1
       inclusive.

   urandint
       (class=math #args=2): Integer uniformly distributed between inclusive
       integer endpoints.

   dhms2fsec
       (class=time #args=1): Recovers floating-point seconds as in
       dhms2fsec("5d18h53m20.250000s") = 500000.250000

   dhms2sec
       (class=time #args=1): Recovers integer seconds as in
       dhms2sec("5d18h53m20s") = 500000

   fsec2dhms
       (class=time #args=1): Formats floating-point seconds as in
       fsec2dhms(500000.25) = "5d18h53m20.250000s"

   fsec2hms
       (class=time #args=1): Formats floating-point seconds as in
       fsec2hms(5000.25) = "01:23:20.250000"

   gmt2sec
       (class=time #args=1): Parses GMT timestamp as integer seconds since
       the epoch.

   localtime2sec
       (class=time #args=1): Parses local timestamp as integer seconds since
       the epoch. Consults $TZ environment variable.

   hms2fsec
       (class=time #args=1): Recovers floating-point seconds as in
       hms2fsec("01:23:20.250000") = 5000.250000

   hms2sec
       (class=time #args=1): Recovers integer seconds as in
       hms2sec("01:23:20") = 5000

   sec2dhms
       (class=time #args=1): Formats integer seconds as in sec2dhms(500000)
       = "5d18h53m20s"

   sec2gmt
       (class=time #args=1): Formats seconds since epoch (integer part)
       as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z".
       Leaves non-numbers as-is.

       sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n
       decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
       Leaves non-numbers as-is.

   sec2gmtdate
       (class=time #args=1): Formats seconds since epoch (integer part)
       as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28".
       Leaves non-numbers as-is.

   sec2localtime
       (class=time #args=1): Formats seconds since epoch (integer part)
       as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z".
       Consults $TZ environment variable. Leaves non-numbers as-is.

       sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n
       decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
       Consults $TZ environment variable. Leaves non-numbers as-is.

   sec2localdate
       (class=time #args=1): Formats seconds since epoch (integer part)
       as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28".
       Consults $TZ environment variable. Leaves non-numbers as-is.

   sec2hms
       (class=time #args=1): Formats integer seconds as in
       sec2hms(5000) = "01:23:20"

   strftime
       (class=time #args=2): Formats seconds since the epoch as timestamp, e.g.
       strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and
       strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z".
       Format strings are as in the C library (please see "man strftime" on your system),
       with the Miller-specific addition of "%1S" through "%9S" which format the seconds
       with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.)
       See also strftime_local.

   strftime_local
       (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone.

   strptime
       (class=time #args=2): Parses timestamp as floating-point seconds since the epoch,
       e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000,
       and  strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000.
       See also strptime_local.

   strptime_local
       (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone.

   systime
       (class=time #args=0): Floating-point seconds since the epoch,
       e.g. 1440768801.748936.

   is_absent
       (class=typing #args=1): False if field is present in input, false otherwise

   is_bool
       (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean.

   is_boolean
       (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool.

   is_empty
       (class=typing #args=1): True if field is present in input with empty string value, false otherwise.

   is_empty_map
       (class=typing #args=1): True if argument is a map which is empty.

   is_float
       (class=typing #args=1): True if field is present with value inferred to be float

   is_int
       (class=typing #args=1): True if field is present with value inferred to be int

   is_map
       (class=typing #args=1): True if argument is a map.

   is_nonempty_map
       (class=typing #args=1): True if argument is a map which is non-empty.

   is_not_empty
       (class=typing #args=1): False if field is present in input with empty value, true otherwise

   is_not_map
       (class=typing #args=1): True if argument is not a map.

   is_not_null
       (class=typing #args=1): False if argument is null (empty or absent), true otherwise.

   is_null
       (class=typing #args=1): True if argument is null (empty or absent), false otherwise.

   is_numeric
       (class=typing #args=1): True if field is present with value inferred to be int or float

   is_present
       (class=typing #args=1): True if field is present in input, false otherwise.

   is_string
       (class=typing #args=1): True if field is present with string (including empty-string) value

   asserting_absent
       (class=typing #args=1): Returns argument if it is absent in the input data, else
       throws an error.

   asserting_bool
       (class=typing #args=1): Returns argument if it is present with boolean value, else
       throws an error.

   asserting_boolean
       (class=typing #args=1): Returns argument if it is present with boolean value, else
       throws an error.

   asserting_empty
       (class=typing #args=1): Returns argument if it is present in input with empty value,
       else throws an error.

   asserting_empty_map
       (class=typing #args=1): Returns argument if it is a map with empty value, else
       throws an error.

   asserting_float
       (class=typing #args=1): Returns argument if it is present with float value, else
       throws an error.

   asserting_int
       (class=typing #args=1): Returns argument if it is present with int value, else
       throws an error.

   asserting_map
       (class=typing #args=1): Returns argument if it is a map, else throws an error.

   asserting_nonempty_map
       (class=typing #args=1): Returns argument if it is a non-empty map, else throws
       an error.

   asserting_not_empty
       (class=typing #args=1): Returns argument if it is present in input with non-empty
       value, else throws an error.

   asserting_not_map
       (class=typing #args=1): Returns argument if it is not a map, else throws an error.

   asserting_not_null
       (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent),
       else throws an error.

   asserting_null
       (class=typing #args=1): Returns argument if it is null (empty or absent), else throws
       an error.

   asserting_numeric
       (class=typing #args=1): Returns argument if it is present with int or float value,
       else throws an error.

   asserting_present
       (class=typing #args=1): Returns argument if it is present in input, else throws
       an error.

   asserting_string
       (class=typing #args=1): Returns argument if it is present with string (including
       empty-string) value, else throws an error.

   boolean
       (class=conversion #args=1): Convert int/float/bool/string to boolean.

   float
       (class=conversion #args=1): Convert int/float/bool/string to float.

   fmtnum
       (class=conversion #args=2): Convert int/float/bool to string using
       printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers
       are all long long or double. If you use formats like %d or %f, behavior is undefined.

   hexfmt
       (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff".

   int
       (class=conversion #args=1): Convert int/float/bool/string to int.

   string
       (class=conversion #args=1): Convert int/float/bool/string to string.

   typeof
       (class=conversion #args=1): Convert argument to type of argument (e.g.
       MT_STRING). For debug.

   depth
       (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0.

   haskey
       (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or
       'haskey(mymap, mykey)'. Error if 1st argument is not a map.

   joink
       (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'.

   joinkv
       (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")'

   joinv
       (class=maps #args=2): Makes string from map keys. E.g. 'joinv(mymap, ",")'.

   leafcount
       (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps,
       same as length.

   length
       (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1.

   mapdiff
       (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg.
       With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed.

   mapexcept
       (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset.
       E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'.

   mapselect
       (class=maps variadic): Returns a map with only keys from remaining arguments set.
       E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'.

   mapsum
       (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with
       key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'.

   splitkv
       (class=maps #args=3): Splits string by separators into map with type inference.
       E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'.

   splitkvx
       (class=maps #args=3): Splits string by separators into map without type inference (keys and
       values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives
       '{"a" : "1", "b" : "2", "c" : "3"}'.

   splitnv
       (class=maps #args=2): Splits string by separator into integer-indexed map with type inference.
       E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'.

   splitnvx
       (class=maps #args=2): Splits string by separator into integer-indexed map without type
       inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'.

KEYWORDS FOR PUT AND FILTER
   all
       all: used in "emit", "emitp", and "unset" as a synonym for @*

   begin
       begin: defines a block of statements to be executed before input records
       are ingested. The body statements must be wrapped in curly braces.
       Example: 'begin { @count = 0 }'

   bool
       bool: declares a boolean local variable in the current curly-braced scope.
       Type-checking happens at assignment: 'bool b = 1' is an error.

   break
       break: causes execution to continue after the body of the current
       for/while/do-while loop.

   call
       call: used for invoking a user-defined subroutine.
       Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'

   continue
       continue: causes execution to skip the remaining statements in the body of
       the current for/while/do-while loop. For-loop increments are still applied.

   do
       do: with "while", introduces a do-while loop. The body statements must be wrapped
       in curly braces.

   dump
       dump: prints all currently defined out-of-stream variables immediately
	 to stdout as JSON.

	 With >, >>, or |, the data do not become part of the output record stream but
	 are instead redirected.

	 The > and >> are for write and append, as in the shell, but (as with awk) the
	 file-overwrite for > is on first write, not per record. The | is for piping to
	 a process which will process the data. There will be one open file for each
	 distinct file name (for > and >>) or one subordinate process for each distinct
	 value of the piped-to command (for |). Output-formatting flags are taken from
	 the main command line.

	 Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'
	 Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >  "mytap.dat"}'
	 Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}'
	 Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}'

   edump
       edump: prints all currently defined out-of-stream variables immediately
	 to stderr as JSON.

	 Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }'

   elif
       elif: the way Miller spells "else if". The body statements must be wrapped
       in curly braces.

   else
       else: terminates an if/elif/elif chain. The body statements must be wrapped
       in curly braces.

   emit
       emit: inserts an out-of-stream variable into the output record stream. Hashmap
	 indices present in the data but not slotted by emit arguments are not output.

	 With >, >>, or |, the data do not become part of the output record stream but
	 are instead redirected.

	 The > and >> are for write and append, as in the shell, but (as with awk) the
	 file-overwrite for > is on first write, not per record. The | is for piping to
	 a process which will process the data. There will be one open file for each
	 distinct file name (for > and >>) or one subordinate process for each distinct
	 value of the piped-to command (for |). Output-formatting flags are taken from
	 the main command line.

	 You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
	 etc., to control the format of the output if the output is redirected. See also mlr -h.

	 Example: mlr --from f.dat put 'emit >	"/tmp/data-".$a, $*'
	 Example: mlr --from f.dat put 'emit >	"/tmp/data-".$a, mapexcept($*, "a")'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'
	 Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >  "mytap.dat", @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"'

	 Please see http://johnkerl.org/miller/doc for more information.

   emitf
       emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the
	 output record stream.

	 With >, >>, or |, the data do not become part of the output record stream but
	 are instead redirected.

	 The > and >> are for write and append, as in the shell, but (as with awk) the
	 file-overwrite for > is on first write, not per record. The | is for piping to
	 a process which will process the data. There will be one open file for each
	 distinct file name (for > and >>) or one subordinate process for each distinct
	 value of the piped-to command (for |). Output-formatting flags are taken from
	 the main command line.

	 You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
	 etc., to control the format of the output if the output is redirected. See also mlr -h.

	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'
	 Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a'
	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'
	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c'
	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c'
	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'
	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c'
	 Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c'

	 Please see http://johnkerl.org/miller/doc for more information.

   emitp
       emitp: inserts an out-of-stream variable into the output record stream.
	 Hashmap indices present in the data but not slotted by emitp arguments are
	 output concatenated with ":".

	 With >, >>, or |, the data do not become part of the output record stream but
	 are instead redirected.

	 The > and >> are for write and append, as in the shell, but (as with awk) the
	 file-overwrite for > is on first write, not per record. The | is for piping to
	 a process which will process the data. There will be one open file for each
	 distinct file name (for > and >>) or one subordinate process for each distinct
	 value of the piped-to command (for |). Output-formatting flags are taken from
	 the main command line.

	 You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
	 etc., to control the format of the output if the output is redirected. See also mlr -h.

	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'
	 Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >  "mytap.dat", @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"'
	 Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"'

	 Please see http://johnkerl.org/miller/doc for more information.

   end
       end: defines a block of statements to be executed after input records
       are ingested. The body statements must be wrapped in curly braces.
       Example: 'end { emit @count }'
       Example: 'end { eprint "Final count is " . @count }'

   eprint
       eprint: prints expression immediately to stderr.
	 Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)'
	 Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }'
	 Example: mlr --from f.dat put	'(NR % 1000 == 0) { eprint "Checkpoint ".NR}'

   eprintn
       eprintn: prints expression immediately to stderr, without trailing newline.
	 Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""'

   false
       false: the boolean literal value.

   filter
       filter: includes/excludes the record in the output record stream.

	 Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)'

	 Instead of put with 'filter false' you can simply use put -q.	The following
	 uses the input record to accumulate data but only prints the running sum
	 without printing the input record:

	 Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum'

   float
       float: declares a floating-point local variable in the current curly-braced scope.
       Type-checking happens at assignment: 'float x = 0' is an error.

   for
       for: defines a for-loop using one of three styles. The body statements must
       be wrapped in curly braces.
       For-loop over stream record:
	 Example:  'for (k, v in $*) { ... }'
       For-loop over out-of-stream variables:
	 Example: 'for (k, v in @counts) { ... }'
	 Example: 'for ((k1, k2), v in @counts) { ... }'
	 Example: 'for ((k1, k2, k3), v in @*) { ... }'
       C-style for-loop:
	 Example:  'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }'

   func
       func: used for defining a user-defined function.
       Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)'

   if
       if: starts an if/elif/elif chain. The body statements must be wrapped
       in curly braces.

   in
       in: used in for-loops over stream records or out-of-stream variables.

   int
       int: declares an integer local variable in the current curly-braced scope.
       Type-checking happens at assignment: 'int x = 0.0' is an error.

   map
       map: declares an map-valued local variable in the current curly-braced scope.
       Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is
       always OK. map b = a is OK or not depending on whether a is a map.

   num
       num: declares an int/float local variable in the current curly-braced scope.
       Type-checking happens at assignment: 'num b = true' is an error.

   print
       print: prints expression immediately to stdout.
	 Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)'
	 Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }'
	 Example: mlr --from f.dat put	'(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'

   printn
       printn: prints expression immediately to stdout, without trailing newline.
	 Example: mlr --from f.dat put -q 'printn "."; end { print "" }'

   return
       return: specifies the return value from a user-defined function.
       Omitted return statements (including via if-branches) result in an absent-null
       return value, which in turns results in a skipped assignment to an LHS.

   stderr
       stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename
	 to print to standard error.

   stdout
       stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename
	 to print to standard output.

   str
       str: declares a string local variable in the current curly-braced scope.
       Type-checking happens at assignment.

   subr
       subr: used for defining a subroutine.
       Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'

   tee
       tee: prints the current record to specified file.
	 This is an immediate print to the specified file (except for pprint format
	 which of course waits until the end of the input stream to format all output).

	 The > and >> are for write and append, as in the shell, but (as with awk) the
	 file-overwrite for > is on first write, not per record. The | is for piping to
	 a process which will process the data. There will be one open file for each
	 distinct file name (for > and >>) or one subordinate process for each distinct
	 value of the piped-to command (for |). Output-formatting flags are taken from
	 the main command line.

	 You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
	 etc., to control the format of the output. See also mlr -h.

	 emit with redirect and tee with redirect are identical, except tee can only
	 output $*.

	 Example: mlr --from f.dat put 'tee >  "/tmp/data-".$a, $*'
	 Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*'
	 Example: mlr --from f.dat put 'tee >  stderr, $*'
	 Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*'
	 Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*'
	 Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*'
	 Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*'

   true
       true: the boolean literal value.

   unset
       unset: clears field(s) from the current record, or an out-of-stream or local variable.

	 Example: mlr --from f.dat put 'unset $x'
	 Example: mlr --from f.dat put 'unset $*'
	 Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }'
	 Example: mlr --from f.dat put '...; unset @sums'
	 Example: mlr --from f.dat put '...; unset @sums["green"]'
	 Example: mlr --from f.dat put '...; unset @*'

   var
       var: declares an untyped local variable in the current curly-braced scope.
       Examples: 'var a=1', 'var xyz=""'

   while
       while: introduces a while loop, or with "do", introduces a do-while loop.
       The body statements must be wrapped in curly braces.

   ENV
       ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]'

   FILENAME
       FILENAME: evaluates to the name of the current file being processed.

   FILENUM
       FILENUM: evaluates to the number of the current file being processed,
       starting with 1.

   FNR
       FNR: evaluates to the number of the current record within the current file
       being processed, starting with 1. Resets at the start of each file.

   IFS
       IFS: evaluates to the input field separator from the command line.

   IPS
       IPS: evaluates to the input pair separator from the command line.

   IRS
       IRS: evaluates to the input record separator from the command line,
       or to LF or CRLF from the input data if in autodetect mode (which is
       the default).

   M_E
       M_E: the mathematical constant e.

   M_PI
       M_PI: the mathematical constant pi.

   NF
       NF: evaluates to the number of fields in the current record.

   NR
       NR: evaluates to the number of the current record over all files
       being processed, starting with 1. Does not reset at the start of each file.

   OFS
       OFS: evaluates to the output field separator from the command line.

   OPS
       OPS: evaluates to the output pair separator from the command line.

   ORS
       ORS: evaluates to the output record separator from the command line,
       or to LF or CRLF from the input data if in autodetect mode (which is
       the default).

AUTHOR
       Miller is written by John Kerl <kerl.john.r@gmail.com>.

       This manual page has been composed from Miller's help output by Eric
       MSP Veith <eveith@veith-m.de>.

SEE ALSO
       awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and
       MIME Type for Comma-Separated Values (CSV) Files, the miller website
       http://johnkerl.org/miller/doc



				  2019-09-21			     MILLER(1)

miller-5.6.2/doc/manpage.txt000066400000000000000000003000461354153536500157430ustar00rootroot00000000000000MILLER(1) MILLER(1) NAME miller - like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON. SYNOPSIS Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names} DESCRIPTION Miller operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller's natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.) This manpage documents Miller v5.6.1-dev. EXAMPLES COMMAND-LINE SYNTAX mlr --csv cut -f hostname,uptime mydata.csv mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group mlr join -j account_id -f accounts.dat then group-by account_name balances.dat mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* mlr stats2 -a linreg-pca -f u,v -g shape data/* mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* mlr --from estimates.tbl put ' for (k,v in $*) { if (is_numeric(v) && k =~ "^[t-z].*$") { $sum += v; $count += 1 } } $mean = $sum / $count # no assignment if count unset' mlr --from infile.dat put -f analyze.mlr mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' DATA FORMATS DKVP: delimited key-value pairs (Miller default format) +---------------------+ | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" +---------------------+ NIDX: implicitly numerically indexed (Unix-toolkit style) +---------------------+ | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" | fox jumped | Record 2: "1" => "fox", "2" => "jumped" +---------------------+ CSV/CSV-lite: comma-separated values with separate header line +---------------------+ | apple,bat,cog | | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" +---------------------+ Tabular JSON: nested objects are supported, although arrays within them are not: +---------------------+ | { | | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" | "bat": 2, | | "cog": 3 | | } | | { | | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" | "egg": 7, | | "flint": 8 | | }, | | "garlic": "" | | } | +---------------------+ PPRINT: pretty-printed tabular +---------------------+ | apple bat cog | | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" +---------------------+ XTAB: pretty-printed transposed tabular +---------------------+ | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" | bat 2 | | cog 3 | | | | dish 7 | Record 2: "dish" => "7", "egg" => "8" | egg 8 | +---------------------+ Markdown tabular (supported for output only): +-----------------------+ | | apple | bat | cog | | | | --- | --- | --- | | | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" +-----------------------+ OPTIONS In the following option flags, the version with "i" designates the input stream, "o" the output stream, and the version without prefix sets the option for both input and output stream. For example: --irs sets the input record separator, --ors the output record separator, and --rs sets both the input and output separator to the given value. HELP OPTIONS -h or --help Show this message. --version Show the software version. {verb name} --help Show verb-specific help. --help-all-verbs Show help on all verbs. -l or --list-all-verbs List only verb names. -L List only verb names, one per line. -f or --help-all-functions Show help on all built-in functions. -F Show a bare listing of built-in functions by name. -k or --help-all-keywords Show help on all keywords. -K Show a bare listing of keywords by name. VERB LIST altkv bar bootstrap cat check clean-whitespace count-distinct count-similar cut decimate fill-down filter format-values fraction grep group-by group-like having-fields head histogram join label least-frequent merge-fields most-frequent nest nothing put regularize remove-empty-columns rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle skip-trivial-records sort stats1 stats2 step tac tail tee top uniq unsparsify FUNCTION LIST + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub substr tolower toupper capitalize lstrip rstrip strip collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime strftime_local strptime strptime_local systime is_absent is_bool is_boolean is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string asserting_absent asserting_bool asserting_boolean asserting_empty asserting_empty_map asserting_float asserting_int asserting_map asserting_nonempty_map asserting_not_empty asserting_not_map asserting_not_null asserting_null asserting_numeric asserting_present asserting_string boolean float fmtnum hexfmt int string typeof depth haskey joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv splitkvx splitnv splitnvx Please use "mlr --help-function {function name}" for function-specific help. I/O FORMATTING --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" (this is Miller's default format). --inidx --onidx --nidx Implicitly-integer-indexed fields (Unix-toolkit style). -T Synonymous with "--nidx --fs tab". --icsv --ocsv --csv Comma-separated value (or tab-separated with --fs tab, etc.) --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", "--ocsv --ofs tab", "--csv --fs tab". --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) and RS U+241E (UTF-8 0xe2909e) --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated with --fs tab, etc.). The 'lite' CSV does not handle RFC-CSV double-quoting rules; is slightly faster; and handles heterogeneity in the input stream via empty newline followed by new header line. See also http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", "--ocsvlite --ofs tab", "--csvlite --fs tab". -t Synonymous with --tsvlite. --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) and RS U+241E (UTF-8 0xe2909e) --ipprint --opprint --pprint Pretty-printed tabular (produces no output until all input is in). --right Right-justifies all fields for PPRINT output. --barred Prints a border around PPRINT output (only available for output). --omd Markdown-tabular (only available for output). --ixtab --oxtab --xtab Pretty-printed vertical-tabular. --xvright Right-justifies values for XTAB format. --ijson --ojson --json JSON tabular: sequence or list of one-level maps: {...}{...} or [{...},{...}]. --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or to be treated as errors. Please use the jq tool for full JSON (pre)processing. --jvstack Put one key-value pair per line for JSON output. --jlistwrap Wrap JSON output in outermost [ ]. --jknquoteint Do not quote non-string map keys in JSON output. --jvquoteall Quote map values in JSON output, even if they're numeric. --jflatsep {string} Separator for flattening multi-level JSON keys, e.g. '{"a":{"b":3}}' becomes a:b => 3 for non-JSON formats. Defaults to :. -p is a keystroke-saver for --nidx --fs space --repifs --mmap --no-mmap --mmap-below {n} Use mmap for files whenever possible, never, or for files less than n bytes in size. Default is for files less than 4294967296 bytes in size. 'Whenever possible' means always except for when reading standard input which is not mmappable. If you don't know what this means, don't worry about it -- it's a minor performance optimization. Examples: --csv for CSV-formatted input and output; --idkvp --opprint for DKVP-formatted input and pretty-printed output. Please use --iformat1 --oformat2 rather than --format1 --oformat2. The latter sets up input and output flags for format1, not all of which are overridden in all cases by setting output format to format2. COMMENTS IN DATA --skip-comments Ignore commented lines (prefixed by "#") within the input. --skip-comments-with {string} Ignore commented lines within input, with specified prefix. --pass-comments Immediately print commented lines (prefixed by "#") within the input. --pass-comments-with {string} Immediately print commented lines within input, with specified prefix. Notes: * Comments are only honored at the start of a line. * In the absence of any of the above four options, comments are data like any other text. * When pass-comments is used, comment lines are written to standard output immediately upon being read; they are not part of the record stream. Results may be counterintuitive. A suggestion is to place comments at the start of data files. FORMAT-CONVERSION KEYSTROKE-SAVERS As keystroke-savers for format-conversion you may use the following: --c2t --c2d --c2n --c2j --c2x --c2p --c2m --t2c --t2d --t2n --t2j --t2x --t2p --t2m --d2c --d2t --d2n --d2j --d2x --d2p --d2m --n2c --n2t --n2d --n2j --n2x --n2p --n2m --j2c --j2t --j2d --j2n --j2x --j2p --j2m --x2c --x2t --x2d --x2n --x2j --x2p --x2m --p2c --p2t --p2d --p2n --p2j --p2x --p2m The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, PPRINT, and markdown, respectively. Note that markdown format is available for output only. COMPRESSED I/O --prepipe {command} This allows Miller to handle compressed inputs. You can do without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". However, when multiple input files are present, between-file separations are lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can specify an action to be taken on each input file. This pre-pipe command must be able to read from standard input; it will be invoked with {command} < {filename}. Examples: mlr --prepipe 'gunzip' mlr --prepipe 'zcat -cf' mlr --prepipe 'xz -cd' mlr --prepipe cat Note that this feature is quite general and is not limited to decompression utilities. You can use it to apply per-file filters of your choice. For output compression (or other) utilities, simply pipe the output: mlr ... | {your compression command} SEPARATORS --rs --irs --ors Record separators, e.g. 'lf' or '\r\n' --fs --ifs --ofs --repifs Field separators, e.g. comma --ps --ips --ops Pair separators, e.g. equals sign Notes about line endings: * Default line endings (--irs and --ors) are "auto" which means autodetect from the input file format, as long as the input file(s) have lines ending in either LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style). * If both irs and ors are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you're running on. * The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF. * If you use --ors {something else} with (default or explicitly specified) --irs auto then line endings are autodetected on input and set to what you specify on output. * If you use --irs {something else} with (default or explicitly specified) --ors auto then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. Notes about all other separators: * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats do key-value pairs appear juxtaposed. * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; XTAB records are separated by two or more consecutive IFS/OFS -- i.e. a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs auto for XTAB format. (XTAB's default IFS/OFS are "auto".) * OFS must be single-character for PPRINT format. This is because it is used with repetition for alignment; multi-character separators would make alignment impossible. * OPS may be multi-character for XTAB format, in which case alignment is disabled. * TSV is simply CSV using tab as field separator ("--fs tab"). * FS/PS are ignored for markdown format; RS is used. * All FS and PS options are ignored for JSON format, since they are not relevant to the JSON format. * You can specify separators in any of the following ways, shown by example: - Type them out, quoting as necessary for shell escapes, e.g. "--fs '|' --ips :" - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'". - To avoid backslashing, you can use any of the following names: cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals * Default separators by format: File format RS FS PS gen N/A (N/A) (N/A) dkvp auto , = json auto (N/A) (N/A) nidx auto space (N/A) csv auto , (N/A) csvlite auto , (N/A) markdown auto (N/A) (N/A) pprint auto space (N/A) xtab (N/A) auto space CSV-SPECIFIC OPTIONS --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 of input files. Tip: combine with "label" to recreate missing headers. --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, fill remaining keys with empty string. If a data line has more fields than the header line, use integer field labels as in the implicit-header case. --headerless-csv-output Print only CSV data lines. -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT --quote-all Wrap all fields in double quotes --quote-none Do not wrap any fields in double quotes, even if they have OFS or ORS in them --quote-minimal Wrap fields in double quotes only if they have OFS or ORS in them (default) --quote-numeric Wrap fields in double quotes only if they have numbers in them --quote-original Wrap fields in double quotes if and only if they were quoted on input. This isn't sticky for computed fields: e.g. if fields a and b were quoted on input and you do "put '$c = $a . $b'" then field c won't inherit a or b's was-quoted-on-input flag. NUMERICAL FORMATTING --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for double-precision. Applies to verbs which compute new values, e.g. put, stats1, stats2. See also the fmtnum function within mlr put (mlr --help-all-functions). Defaults to %lf. OTHER OPTIONS --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter urand()/urandint()/urand32(). --nr-progress-mod {m}, with m a positive integer: print filename and record count to stderr every m input records. --from {filename} Use this to specify an input file before the verb(s), rather than after. May be used more than once. Example: "mlr --from a.dat --from b.dat cat" is the same as "mlr cat a.dat b.dat". -n Process no input files, nor standard input either. Useful for mlr put with begin/end statements only. (Same as --from /dev/null.) Also useful in "mlr -n put -v '...'" for analyzing abstract syntax trees (if that's your thing). -I Process files in-place. For each file name on the command line, output is written to a temp file in the same directory, which is then renamed over the original. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on. THEN-CHAINING Output of one verb may be chained as input to another using "then", e.g. mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color AUXILIARY COMMANDS Miller has a few otherwise-standalone executables packaged within it. They do not participate in any other parts of Miller. Available subcommands: aux-list lecat termcvt hex unhex netbsd-strptime For more information, please invoke mlr {subcommand} --help VERBS altkv Usage: mlr altkv [no options] Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. bar Usage: mlr bar [options] Replaces a numeric field with a number of asterisks, allowing for cheesy bar plots. These align best with --opprint or --oxtab output format. Options: -f {a,b,c} Field names to convert to bars. -c {character} Fill character: default '*'. -x {character} Out-of-bounds character: default '#'. -b {character} Blank character: default '.'. --lo {lo} Lower-limit value for min-width bar: default '0.000000'. --hi {hi} Upper-limit value for max-width bar: default '100.000000'. -w {n} Bar-field width: default '40'. --auto Automatically computes limits, ignoring --lo and --hi. Holds all records in memory before producing any output. bootstrap Usage: mlr bootstrap [options] Emits an n-sample, with replacement, of the input records. Options: -n {number} Number of samples to output. Defaults to number of input records. Must be non-negative. See also mlr sample and mlr shuffle. cat Usage: mlr cat [options] Passes input records directly to output. Most useful for format conversion. Options: -n Prepend field "n" to each record with record-counter starting at 1 -g {comma-separated field name(s)} When used with -n/-N, writes record-counters keyed by specified field name(s). -v Write a low-level record-structure dump to stderr. -N {name} Prepend field {name} to each record with record-counter starting at 1 check Usage: mlr check Consumes records without printing any output. Useful for doing a well-formatted check on input data. clean-whitespace Usage: mlr clean-whitespace [options] {old1,new1,old2,new2,...} For each record, for each field in the record, whitespace-cleans the keys and values. Whitespace-cleaning entails stripping leading and trailing whitespace, and replacing multiple whitespace with singles. For finer-grained control, please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, and clean_whitespace. Options: -k|--keys-only Do not touch values. -v|--values-only Do not touch keys. It is an error to specify -k as well as -v. count-distinct Usage: mlr count-distinct [options] Prints number of records having distinct values for specified field names. Same as uniq -c. Options: -f {a,b,c} Field names for distinct count. -n Show only the number of distinct values. Not compatible with -u. -o {name} Field name for output count. Default "count". Ignored with -u. -u Do unlashed counts for multiple field names. With -f a,b and without -u, computes counts for distinct combinations of a and b field values. With -f a,b and with -u, computes counts for distinct a field values and counts for distinct b field values separately. count-similar Usage: mlr count-similar [options] Ingests all records, then emits each record augmented by a count of the number of other records having the same group-by field values. Options: -g {d,e,f} Group-by-field names for counts. -o {name} Field name for output count. Default "count". cut Usage: mlr cut [options] Passes through input records with specified fields included/excluded. -f {a,b,c} Field names to include for cut. -o Retain fields in the order specified here in the argument list. Default is to retain them in the order found in the input data. -x|--complement Exclude, rather than include, field names specified by -f. -r Treat field names as regular expressions. "ab", "a.*b" will match any field name containing the substring "ab" or matching "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may be used. The -o flag is ignored when -r is present. Examples: mlr cut -f hostname,status mlr cut -x -f hostname,status mlr cut -r -f '^status$,sda[0-9]' mlr cut -r -f '^status$,"sda[0-9]"' mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) decimate Usage: mlr decimate [options] -n {count} Decimation factor; default 10 -b Decimate by printing first of every n. -e Decimate by printing last of every n (default). -g {a,b,c} Optional group-by-field names for decimate counts Passes through one of every n records, optionally by category. fill-down Usage: mlr fill-down [options] -f {a,b,c} Field names for fill-down -a|--only-if-absent Field names for fill-down If a given record has a missing value for a given field, fill that from the corresponding value from a previous record, if any. By default, a 'missing' field either is absent, or has the empty-string value. With -a, a field is 'missing' only if it is absent. filter Usage: mlr filter [options] {expression} Prints records for which {expression} evaluates to true. If there are multiple semicolon-delimited expressions, all of them are evaluated and the last one is used as the filter criterion. Conversion options: -S: Keeps field values as strings with no type inference to int or float. -F: Keeps field values as strings or floats with no inference to int. All field values are type-inferred to int/float/string unless this behavior is suppressed with -S or -F. Output/formatting options: --oflatsep {string}: Separator to use when flattening multi-level @-variables to output records for emit. Default ":". --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. --no-fflush: for emit, tee, print, and dump, don't call fflush() after every record. Expression-specification options: -f {filename}: the DSL expression is taken from the specified file rather than from the command line. Outer single quotes wrapping the expression should not be placed in the file. If -f is specified more than once, all input files specified using -f are concatenated to produce the expression. (For example, you can define functions in one file and call them from another.) -e {expression}: You can use this after -f to add an expression. Example use case: define functions/subroutines in a file you specify with -f, then call them with an expression you specify with -e. (If you mix -e and -f then the expressions are evaluated in the order encountered. Since the expression pieces are simply concatenated, please be sure to use intervening semicolons to separate expressions.) Tracing options: -v: Prints the expressions's AST (abstract syntax tree), which gives full transparency on the precedence and associativity rules of Miller's grammar, to stdout. -a: Prints a low-level stack-allocation trace to stdout. -t: Prints a low-level parser trace to stderr. -T: Prints a every statement to stderr as it is executed. Other options: -x: Prints records for which {expression} evaluates to false. Please use a dollar sign for field names and double-quotes for string literals. If field names have special characters such as "." then you might use braces, e.g. '${field.name}'. Miller built-in variables are NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment variables. The environment-variable name may be an expression, e.g. a field value. Use # to comment to end of line. Examples: mlr filter 'log10($count) > 4.0' mlr filter 'FNR == 2 (second record in each file)' mlr filter 'urand() < 0.001' (subsampling) mlr filter '$color != "blue" && $value > 4.2' mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' mlr filter ' NR == 1 || #NR == 2 || NR == 3 ' Please see http://johnkerl.org/miller/doc/reference.html for more information including function list. Or "mlr -f". Please also also "mlr grep" which is useful when you don't yet know which field name(s) you're looking for. format-values Usage: mlr format-values [options] Applies format strings to all field values, depending on autodetected type. * If a field value is detected to be integer, applies integer format. * Else, if a field value is detected to be float, applies float format. * Else, applies string format. Note: this is a low-keystroke way to apply formatting to many fields. To get finer control, please see the fmtnum function within the mlr put DSL. Note: this verb lets you apply arbitrary format strings, which can produce undefined behavior and/or program crashes. See your system's "man printf". Options: -i {integer format} Defaults to "%lld". Examples: "%06lld", "%08llx". Note that Miller integers are long long so you must use formats which apply to long long, e.g. with ll in them. Undefined behavior results otherwise. -f {float format} Defaults to "%lf". Examples: "%8.3lf", "%.6le". Note that Miller floats are double-precision so you must use formats which apply to double, e.g. with l[efg] in them. Undefined behavior results otherwise. -s {string format} Defaults to "%s". Examples: "_%s", "%08s". Note that you must use formats which apply to string, e.g. with s in them. Undefined behavior results otherwise. -n Coerce field values autodetected as int to float, and then apply the float format. fraction Usage: mlr fraction [options] For each record's value in specified fields, computes the ratio of that value to the sum of values in that field over all input records. E.g. with input records x=1 x=2 x=3 and x=4, emits output records x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 Note: this is internally a two-pass algorithm: on the first pass it retains input records and accumulates sums; on the second pass it computes quotients and emits output records. This means it produces no output until all input is read. Options: -f {a,b,c} Field name(s) for fraction calculation -g {d,e,f} Optional group-by-field name(s) for fraction counts -p Produce percents [0..100], not fractions [0..1]. Output field names end with "_percent" rather than "_fraction" -c Produce cumulative distributions, i.e. running sums: each output value folds in the sum of the previous for the specified group E.g. with input records x=1 x=2 x=3 and x=4, emits output records x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 grep Usage: mlr grep [options] {regular expression} Passes through records which match {regex}. Options: -i Use case-insensitive search. -v Invert: pass through records which do not match the regex. Note that "mlr filter" is more powerful, but requires you to know field names. By contrast, "mlr grep" allows you to regex-match the entire record. It does this by formatting each record in memory as DKVP, using command-line-specified ORS/OFS/OPS, and matching the resulting line against the regex specified here. In particular, the regex is not applied to the input stream: if you have CSV with header line "x,y,z" and data line "1,2,3" then the regex will be matched, not against either of these lines, but against the DKVP line "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, and this command is intended to be merely a keystroke-saver. To get all the features of system grep, you can do "mlr --odkvp ... | grep ... | mlr --idkvp ..." group-by Usage: mlr group-by {comma-separated field names} Outputs records in batches having identical values at specified field names. group-like Usage: mlr group-like Outputs records in batches having identical field names. having-fields Usage: mlr having-fields [options] Conditionally passes through records depending on each record's field names. Options: --at-least {comma-separated names} --which-are {comma-separated names} --at-most {comma-separated names} --all-matching {regular expression} --any-matching {regular expression} --none-matching {regular expression} Examples: mlr having-fields --which-are amount,status,owner mlr having-fields --any-matching 'sda[0-9]' mlr having-fields --any-matching '"sda[0-9]"' mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) head Usage: mlr head [options] -n {count} Head count to print; default 10 -g {a,b,c} Optional group-by-field names for head counts Passes through the first n records, optionally by category. Without -g, ceases consuming more input (i.e. is fast) when n records have been read. histogram Usage: mlr histogram [options] -f {a,b,c} Value-field names for histogram counts --lo {lo} Histogram low value --hi {hi} Histogram high value --nbins {n} Number of histogram bins --auto Automatically computes limits, ignoring --lo and --hi. Holds all values in memory before producing any output. -o {prefix} Prefix for output field name. Default: no prefix. Just a histogram. Input values < lo or > hi are not counted. join Usage: mlr join [options] Joins records from specified left file name with records from all file names at the end of the Miller argument list. Functionality is essentially the same as the system "join" command, but for record streams. Options: -f {left file name} -j {a,b,c} Comma-separated join-field names for output -l {a,b,c} Comma-separated join-field names for left input file; defaults to -j values if omitted. -r {a,b,c} Comma-separated join-field names for right input file(s); defaults to -j values if omitted. --lp {text} Additional prefix for non-join output field names from the left file --rp {text} Additional prefix for non-join output field names from the right file(s) --np Do not emit paired records --ul Emit unpaired records from the left file --ur Emit unpaired records from the right file(s) -s|--sorted-input Require sorted input: records must be sorted lexically by their join-field names, else not all records will be paired. The only likely use case for this is with a left file which is too big to fit into system memory otherwise. -u Enable unsorted input. (This is the default even without -u.) In this case, the entire left file will be loaded into memory. --prepipe {command} As in main input options; see mlr --help for details. If you wish to use a prepipe command for the main input as well as here, it must be specified there as well as here. File-format options default to those for the right file names on the Miller argument list, but may be overridden for the left file as follows. Please see the main "mlr --help" for more information on syntax for these arguments. -i {one of csv,dkvp,nidx,pprint,xtab} --irs {record-separator character} --ifs {field-separator character} --ips {pair-separator character} --repifs --repips --mmap --no-mmap Please use "mlr --usage-separator-options" for information on specifying separators. Please see http://johnkerl.org/miller/doc/reference.html for more information including examples. label Usage: mlr label {new1,new2,new3,...} Given n comma-separated names, renames the first n fields of each record to have the respective name. (Fields past the nth are left with their original names.) Particularly useful with --inidx or --implicit-csv-header, to give useful names to otherwise integer-indexed fields. Examples: "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" least-frequent Usage: mlr least-frequent [options] Shows the least frequently occurring distinct values for specified field names. The first entry is the statistical anti-mode; the remaining are runners-up. Options: -f {one or more comma-separated field names}. Required flag. -n {count}. Optional flag defaulting to 10. -b Suppress counts; show only field values. -o {name} Field name for output count. Default "count". See also "mlr most-frequent". merge-fields Usage: mlr merge-fields [options] Computes univariate statistics for each input record, accumulated across specified fields. Options: -a {sum,count,...} Names of accumulators. One or more of: count Count instances of fields mode Find most-frequently-occurring values for fields; first-found wins tie antimode Find least-frequently-occurring values for fields; first-found wins tie sum Compute sums of specified fields mean Compute averages (sample means) of specified fields stddev Compute sample standard deviation of specified fields var Compute sample variance of specified fields meaneb Estimate error bars for averages (assuming no sample autocorrelation) skewness Compute sample skewness of specified fields kurtosis Compute sample kurtosis of specified fields min Compute minimum values of specified fields max Compute maximum values of specified fields -f {a,b,c} Value-field names on which to compute statistics. Requires -o. -r {a,b,c} Regular expressions for value-field names on which to compute statistics. Requires -o. -c {a,b,c} Substrings for collapse mode. All fields which have the same names after removing substrings will be accumulated together. Please see examples below. -i Use interpolated percentiles, like R's type=7; default like type=1. Not sensical for string-valued fields. -o {name} Output field basename for -f/-r. -k Keep the input fields which contributed to the output statistics; the default is to omit them. -F Computes integerable things (e.g. count) in floating point. String-valued data make sense unless arithmetic on them is required, e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, numbers are less than strings. Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are summed over. Example: mlr merge-fields -a sum,count -r in_,out_ -o bar produces "bar_sum=15,bar_count=4" since all four fields are summed over. Example: mlr merge-fields -a sum,count -c in_,out_ produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to "b_y", and "b_out_x" collapses to "b_x". most-frequent Usage: mlr most-frequent [options] Shows the most frequently occurring distinct values for specified field names. The first entry is the statistical mode; the remaining are runners-up. Options: -f {one or more comma-separated field names}. Required flag. -n {count}. Optional flag defaulting to 10. -b Suppress counts; show only field values. -o {name} Field name for output count. Default "count". See also "mlr least-frequent". nest Usage: mlr nest [options] Explodes specified field values into separate fields/records, or reverses this. Options: --explode,--implode One is required. --values,--pairs One is required. --across-records,--across-fields One is required. -f {field name} Required. --nested-fs {string} Defaults to ";". Field separator for nested values. --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} Please use "mlr --usage-separator-options" for information on specifying separators. Examples: mlr nest --explode --values --across-records -f x with input record "x=a;b;c,y=d" produces output records "x=a,y=d" "x=b,y=d" "x=c,y=d" Use --implode to do the reverse. mlr nest --explode --values --across-fields -f x with input record "x=a;b;c,y=d" produces output records "x_1=a,x_2=b,x_3=c,y=d" Use --implode to do the reverse. mlr nest --explode --pairs --across-records -f x with input record "x=a:1;b:2;c:3,y=d" produces output records "a=1,y=d" "b=2,y=d" "c=3,y=d" mlr nest --explode --pairs --across-fields -f x with input record "x=a:1;b:2;c:3,y=d" produces output records "a=1,b=2,c=3,y=d" Notes: * With --pairs, --implode doesn't make sense since the original field name has been lost. * The combination "--implode --values --across-records" is non-streaming: no output records are produced until all input records have been read. In particular, this means it won't work in tail -f contexts. But all other flag combinations result in streaming (tail -f friendly) data processing. * It's up to you to ensure that the nested-fs is distinct from your data's IFS: e.g. by default the former is semicolon and the latter is comma. See also mlr reshape. nothing Usage: mlr nothing [options] Drops all input records. Useful for testing, or after tee/print/etc. have produced other output. put Usage: mlr put [options] {expression} Adds/updates specified field(s). Expressions are semicolon-separated and must either be assignments, or evaluate to boolean. Booleans with following statements in curly braces control whether those statements are executed; booleans without following curly braces do nothing except side effects (e.g. regex-captures into \1, \2, etc.). Conversion options: -S: Keeps field values as strings with no type inference to int or float. -F: Keeps field values as strings or floats with no inference to int. All field values are type-inferred to int/float/string unless this behavior is suppressed with -S or -F. Output/formatting options: --oflatsep {string}: Separator to use when flattening multi-level @-variables to output records for emit. Default ":". --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. --no-fflush: for emit, tee, print, and dump, don't call fflush() after every record. Expression-specification options: -f {filename}: the DSL expression is taken from the specified file rather than from the command line. Outer single quotes wrapping the expression should not be placed in the file. If -f is specified more than once, all input files specified using -f are concatenated to produce the expression. (For example, you can define functions in one file and call them from another.) -e {expression}: You can use this after -f to add an expression. Example use case: define functions/subroutines in a file you specify with -f, then call them with an expression you specify with -e. (If you mix -e and -f then the expressions are evaluated in the order encountered. Since the expression pieces are simply concatenated, please be sure to use intervening semicolons to separate expressions.) Tracing options: -v: Prints the expressions's AST (abstract syntax tree), which gives full transparency on the precedence and associativity rules of Miller's grammar, to stdout. -a: Prints a low-level stack-allocation trace to stdout. -t: Prints a low-level parser trace to stderr. -T: Prints a every statement to stderr as it is executed. Other options: -q: Does not include the modified record in the output stream. Useful for when all desired output is in begin and/or end blocks. Please use a dollar sign for field names and double-quotes for string literals. If field names have special characters such as "." then you might use braces, e.g. '${field.name}'. Miller built-in variables are NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment variables. The environment-variable name may be an expression, e.g. a field value. Use # to comment to end of line. Examples: mlr put '$y = log10($x); $z = sqrt($y)' mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\1"; $c = "right_\2"' mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }' mlr put '$filename = FILENAME' mlr put '$colored_shape = $color . "_" . $shape' mlr put '$y = cos($theta); $z = atan2($y, $x)' mlr put '$name = sub($name, "http.*com"i, "")' mlr put -q '@sum += $x; end {emit @sum}' mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' mlr put ' $x = 1; #$y = 2; $z = 3 ' Please see also 'mlr -k' for examples using redirected output. Please see http://johnkerl.org/miller/doc/reference.html for more information including function list. Or "mlr -f". Please see in particular: http://www.johnkerl.org/miller/doc/reference.html#put regularize Usage: mlr regularize For records seen earlier in the data stream with same field names in a different order, outputs them with field names in the previously encountered order. Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 remove-empty-columns Usage: mlr remove-empty-columns Omits fields which are empty on every input row. Non-streaming. rename Usage: mlr rename [options] {old1,new1,old2,new2,...} Renames specified fields. Options: -r Treat old field names as regular expressions. "ab", "a.*b" will match any field name containing the substring "ab" or matching "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may be used. New field names may be plain strings, or may contain capture groups of the form "\1" through "\9". Wrapping the regex in double quotes is optional, but is required if you wish to follow it with 'i' to indicate case-insensitivity. -g Do global replacement within each field name rather than first-match replacement. Examples: mlr rename old_name,new_name' mlr rename old_name_1,new_name_1,old_name_2,new_name_2' mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" mlr rename -r '"Date_[0-9]+",Date' Same mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015 mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" reorder Usage: mlr reorder [options] -f {a,b,c} Field names to reorder. -e Put specified field names at record end: default is to put them at record start. Examples: mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". repeat Usage: mlr repeat [options] Copies input records to output records multiple times. Options must be exactly one of the following: -n {repeat count} Repeat each input record this many times. -f {field name} Same, but take the repeat count from the specified field name of each input record. Example: echo x=0 | mlr repeat -n 4 then put '$x=urand()' produces: x=0.488189 x=0.484973 x=0.704983 x=0.147311 Example: echo a=1,b=2,c=3 | mlr repeat -f b produces: a=1,b=2,c=3 a=1,b=2,c=3 Example: echo a=1,b=2,c=3 | mlr repeat -f c produces: a=1,b=2,c=3 a=1,b=2,c=3 a=1,b=2,c=3 reshape Usage: mlr reshape [options] Wide-to-long options: -i {input field names} -o {key-field name,value-field name} -r {input field regexes} -o {key-field name,value-field name} These pivot/reshape the input data such that the input fields are removed and separate records are emitted for each key/value pair. Note: this works with tail -f and produces output records for each input record seen. Long-to-wide options: -s {key-field name,value-field name} These pivot/reshape the input data to undo the wide-to-long operation. Note: this does not work with tail -f; it produces output records only after all input records have been read. Examples: Input file "wide.txt": time X Y 2009-01-01 0.65473572 2.4520609 2009-01-02 -0.89248112 0.2154713 2009-01-03 0.98012375 1.3179287 mlr --pprint reshape -i X,Y -o item,value wide.txt time item value 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt time item value 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 Input file "long.txt": time item value 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 mlr --pprint reshape -s item,value long.txt time X Y 2009-01-01 0.65473572 2.4520609 2009-01-02 -0.89248112 0.2154713 2009-01-03 0.98012375 1.3179287 See also mlr nest. sample Usage: mlr sample [options] Reservoir sampling (subsampling without replacement), optionally by category. -k {count} Required: number of records to output, total, or by group if using -g. -g {a,b,c} Optional: group-by-field names for samples. See also mlr bootstrap and mlr shuffle. sec2gmt Usage: mlr sec2gmt [options] {comma-separated list of field names} Replaces a numeric field representing seconds since the epoch with the corresponding GMT timestamp; leaves non-numbers as-is. This is nothing more than a keystroke-saver for the sec2gmt function: mlr sec2gmt time1,time2 is the same as mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' Options: -1 through -9: format the seconds using 1..9 decimal places, respectively. sec2gmtdate Usage: mlr sec2gmtdate {comma-separated list of field names} Replaces a numeric field representing seconds since the epoch with the corresponding GMT year-month-day timestamp; leaves non-numbers as-is. This is nothing more than a keystroke-saver for the sec2gmtdate function: mlr sec2gmtdate time1,time2 is the same as mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' seqgen Usage: mlr seqgen [options] Produces a sequence of counters. Discards the input record stream. Produces output as specified by the following options: -f {name} Field name for counters; default "i". --start {number} Inclusive start value; default "1". --stop {number} Inclusive stop value; default "100". --step {number} Step value; default "1". Start, stop, and/or step may be floating-point. Output is integer if start, stop, and step are all integers. Step may be negative. It may not be zero unless start == stop. shuffle Usage: mlr shuffle {no options} Outputs records randomly permuted. No output records are produced until all input records are read. See also mlr bootstrap and mlr sample. skip-trivial-records Usage: mlr skip-trivial-records [options] Passes through all records except: * those with zero fields; * those for which all fields have empty value. sort Usage: mlr sort {flags} Flags: -f {comma-separated field names} Lexical ascending -n {comma-separated field names} Numerical ascending; nulls sort last -nf {comma-separated field names} Same as -n -r {comma-separated field names} Lexical descending -nr {comma-separated field names} Numerical descending; nulls sort first Sorts records primarily by the first specified field, secondarily by the second field, and so on. (Any records not having all specified sort keys will appear at the end of the output, in the order they were encountered, regardless of the specified sort order.) The sort is stable: records that compare equal will sort in the order they were encountered in the input record stream. Example: mlr sort -f a,b -nr x,y,z which is the same as: mlr sort -f a -f b -nr x -nr y -nr z stats1 Usage: mlr stats1 [options] Computes univariate statistics for one or more given fields, accumulated across the input record stream. Options: -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or one or more of: count Count instances of fields mode Find most-frequently-occurring values for fields; first-found wins tie antimode Find least-frequently-occurring values for fields; first-found wins tie sum Compute sums of specified fields mean Compute averages (sample means) of specified fields stddev Compute sample standard deviation of specified fields var Compute sample variance of specified fields meaneb Estimate error bars for averages (assuming no sample autocorrelation) skewness Compute sample skewness of specified fields kurtosis Compute sample kurtosis of specified fields min Compute minimum values of specified fields max Compute maximum values of specified fields -f {a,b,c} Value-field names on which to compute statistics --fr {regex} Regex for value-field names on which to compute statistics (compute statsitics on values in all field names matching regex) --fx {regex} Inverted regex for value-field names on which to compute statistics (compute statsitics on values in all field names not matching regex) -g {d,e,f} Optional group-by-field names --gr {regex} Regex for optional group-by-field names (group by values in field names matching regex) --gx {regex} Inverted regex for optional group-by-field names (group by values in field names not matching regex) --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} -i Use interpolated percentiles, like R's type=7; default like type=1. Not sensical for string-valued fields. -s Print iterative stats. Useful in tail -f contexts (in which case please avoid pprint-format output since end of input stream will never be seen). -F Computes integerable things (e.g. count) in floating point. Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape Example: mlr stats1 -a count,mode -f size Example: mlr stats1 -a count,mode -f size -g shape Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' This computes count and mode statistics on all field names beginning with a through h, grouped by all field names starting with k. Notes: * p50 and median are synonymous. * min and max output the same results as p0 and p100, respectively, but use less memory. * String-valued data make sense unless arithmetic on them is required, e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, numbers are less than strings. * count and mode allow text input; the rest require numeric input. In particular, 1 and 1.0 are distinct text for count and mode. * When there are mode ties, the first-encountered datum wins. stats2 Usage: mlr stats2 [options] Computes bivariate statistics for one or more given field-name pairs, accumulated across the input record stream. -a {linreg-ols,corr,...} Names of accumulators: one or more of: linreg-pca Linear regression using principal component analysis linreg-ols Linear regression using ordinary least squares r2 Quality metric for linreg-ols (linreg-pca emits its own) logireg Logistic regression corr Sample correlation cov Sample covariance covx Sample-covariance matrix -f {a,b,c,d} Value-field name-pairs on which to compute statistics. There must be an even number of names. -g {e,f,g} Optional group-by-field names. -v Print additional output for linreg-pca. -s Print iterative stats. Useful in tail -f contexts (in which case please avoid pprint-format output since end of input stream will never be seen). --fit Rather than printing regression parameters, applies them to the input data to compute new fit fields. All input records are held in memory until end of input stream. Has effect only for linreg-ols, linreg-pca, and logireg. Only one of -s or --fit may be used. Example: mlr stats2 -a linreg-pca -f x,y Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape Example: mlr stats2 -a corr -f x,y step Usage: mlr step [options] Computes values dependent on the previous record, optionally grouped by category. Options: -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: delta Compute differences in field(s) between successive records shift Include value(s) in field(s) from previous record, if any from-first Compute differences in field(s) from first record ratio Compute ratios in field(s) between successive records rsum Compute running sums of field(s) between successive records counter Count instances of field(s) between successive records ewma Exponentially weighted moving average over successive records -f {a,b,c} Value-field names on which to compute statistics -g {d,e,f} Optional group-by-field names -F Computes integerable things (e.g. counter) in floating point. -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no smoothing), near under under 1 is light smoothing, near over 0 is heavy smoothing. Multiple weights may be specified, e.g. "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted is "-d 0.5". -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to the -d values. If supplied, the number of -o values must be the same as the number of -d values. Examples: mlr step -a rsum -f request_size mlr step -a delta -f request_size -g hostname mlr step -a ewma -d 0.1,0.9 -f x,y mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name Please see http://johnkerl.org/miller/doc/reference.html#filter or https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average for more information on EWMA. tac Usage: mlr tac Prints records in reverse order from the order in which they were encountered. tail Usage: mlr tail [options] -n {count} Tail count to print; default 10 -g {a,b,c} Optional group-by-field names for tail counts Passes through the last n records, optionally by category. tee Usage: mlr tee [options] {filename} Passes through input records (like mlr cat) but also writes to specified output file, using output-format flags from the command line (e.g. --ocsv). See also the "tee" keyword within mlr put, which allows data-dependent filenames. Options: -a: append to existing file, if any, rather than overwriting. --no-fflush: don't call fflush() after every record. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. top Usage: mlr top [options] -f {a,b,c} Value-field names for top counts. -g {d,e,f} Optional group-by-field names for top counts. -n {count} How many records to print per category; default 1. -a Print all fields for top-value records; default is to print only value and group-by fields. Requires a single value-field name only. --min Print top smallest values; default is top largest values. -F Keep top values as floats even if they look like integers. -o {name} Field name for output indices. Default "top_idx". Prints the n records with smallest/largest values at specified fields, optionally by category. uniq Usage: mlr uniq [options] Prints distinct values for specified field names. With -c, same as count-distinct. For uniq, -f is a synonym for -g. Options: -g {d,e,f} Group-by-field names for uniq counts. -c Show repeat counts in addition to unique values. -n Show only the number of distinct values. -o {name} Field name for output count. Default "count". -a Output each unique record only once. Incompatible with -g. With -c, produces unique records, with repeat counts for each. With -n, produces only one record which is the unique-record count. With neither -c nor -n, produces unique records. unsparsify Usage: mlr unsparsify [options] Prints records with the union of field names over all input records. For field names absent in a given record but present in others, fills in a value. This verb retains all input before producing any output. Options: --fill-with {filler string} What to fill absent fields with. Defaults to the empty string. Example: if the input is two records, one being 'a=1,b=2' and the other being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and 'a=,b=3,c=4'. FUNCTIONS FOR FILTER/PUT + (class=arithmetic #args=2): Addition. + (class=arithmetic #args=1): Unary plus. - (class=arithmetic #args=2): Subtraction. - (class=arithmetic #args=1): Unary minus. * (class=arithmetic #args=2): Multiplication. / (class=arithmetic #args=2): Division. // (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). .+ (class=arithmetic #args=2): Addition, with integer-to-integer overflow .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. .- (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. .* (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. ./ (class=arithmetic #args=2): Division, with integer-to-integer overflow. .// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. % (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). ** (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix operator. | (class=arithmetic #args=2): Bitwise OR. ^ (class=arithmetic #args=2): Bitwise XOR. & (class=arithmetic #args=2): Bitwise AND. ~ (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the regex-match operator: try '$y = ~$x'. << (class=arithmetic #args=2): Bitwise left-shift. >> (class=arithmetic #args=2): Bitwise right-shift. bitcount (class=arithmetic #args=1): Count of 1-bits == (class=boolean #args=2): String/numeric equality. Mixing number and string results in string compare. != (class=boolean #args=2): String/numeric inequality. Mixing number and string results in string compare. =~ (class=boolean #args=2): String (left-hand side) matches regex (right-hand side), e.g. '$name =~ "^a.*b$"'. !=~ (class=boolean #args=2): String (left-hand side) does not match regex (right-hand side), e.g. '$name !=~ "^a.*b$"'. > (class=boolean #args=2): String/numeric greater-than. Mixing number and string results in string compare. >= (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number and string results in string compare. < (class=boolean #args=2): String/numeric less-than. Mixing number and string results in string compare. <= (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number and string results in string compare. && (class=boolean #args=2): Logical AND. || (class=boolean #args=2): Logical OR. ^^ (class=boolean #args=2): Logical XOR. ! (class=boolean #args=1): Logical negation. ? : (class=boolean #args=3): Ternary operator. . (class=string #args=2): String concatenation. gsub (class=string #args=3): Example: '$name=gsub($name, "old", "new")' (replace all). regextract (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' . regextract_or_else (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' . strlen (class=string #args=1): String length. sub (class=string #args=3): Example: '$name=sub($name, "old", "new")' (replace once). ssub (class=string #args=3): Like sub but does no regexing. No characters are special. substr (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n inclusive. Negative indices -len .. -1 alias to 0 .. len-1. tolower (class=string #args=1): Convert string to lowercase. toupper (class=string #args=1): Convert string to uppercase. capitalize (class=string #args=1): Convert string's first character to uppercase. lstrip (class=string #args=1): Strip leading whitespace from string. rstrip (class=string #args=1): Strip trailing whitespace from string. strip (class=string #args=1): Strip leading and trailing whitespace from string. collapse_whitespace (class=string #args=1): Strip repeated whitespace from string. clean_whitespace (class=string #args=1): Same as collapse_whitespace and strip. system (class=string #args=1): Run command string, yielding its stdout minus final carriage return. abs (class=math #args=1): Absolute value. acos (class=math #args=1): Inverse trigonometric cosine. acosh (class=math #args=1): Inverse hyperbolic cosine. asin (class=math #args=1): Inverse trigonometric sine. asinh (class=math #args=1): Inverse hyperbolic sine. atan (class=math #args=1): One-argument arctangent. atan2 (class=math #args=2): Two-argument arctangent. atanh (class=math #args=1): Inverse hyperbolic tangent. cbrt (class=math #args=1): Cube root. ceil (class=math #args=1): Ceiling: nearest integer at or above. cos (class=math #args=1): Trigonometric cosine. cosh (class=math #args=1): Hyperbolic cosine. erf (class=math #args=1): Error function. erfc (class=math #args=1): Complementary error function. exp (class=math #args=1): Exponential function e**x. expm1 (class=math #args=1): e**x - 1. floor (class=math #args=1): Floor: nearest integer at or below. invqnorm (class=math #args=1): Inverse of normal cumulative distribution function. Note that invqorm(urand()) is normally distributed. log (class=math #args=1): Natural (base-e) logarithm. log10 (class=math #args=1): Base-10 logarithm. log1p (class=math #args=1): log(1-x). logifit (class=math #args=3): Given m and b from logistic regression, compute fit: $yhat=logifit($x,$m,$b). madd (class=math #args=3): a + b mod m (integers) max (class=math variadic): max of n numbers; null loses mexp (class=math #args=3): a ** b mod m (integers) min (class=math variadic): Min of n numbers; null loses mmul (class=math #args=3): a * b mod m (integers) msub (class=math #args=3): a - b mod m (integers) pow (class=math #args=2): Exponentiation; same as **. qnorm (class=math #args=1): Normal cumulative distribution function. round (class=math #args=1): Round to nearest integer. roundm (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is the same as round($x/$m)*$m sgn (class=math #args=1): +1 for positive input, 0 for zero input, -1 for negative input. sin (class=math #args=1): Trigonometric sine. sinh (class=math #args=1): Hyperbolic sine. sqrt (class=math #args=1): Square root. tan (class=math #args=1): Trigonometric tangent. tanh (class=math #args=1): Hyperbolic tangent. urand (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. Int-valued example: '$n=floor(20+urand()*11)'. urandrange (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). urand32 (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 inclusive. urandint (class=math #args=2): Integer uniformly distributed between inclusive integer endpoints. dhms2fsec (class=time #args=1): Recovers floating-point seconds as in dhms2fsec("5d18h53m20.250000s") = 500000.250000 dhms2sec (class=time #args=1): Recovers integer seconds as in dhms2sec("5d18h53m20s") = 500000 fsec2dhms (class=time #args=1): Formats floating-point seconds as in fsec2dhms(500000.25) = "5d18h53m20.250000s" fsec2hms (class=time #args=1): Formats floating-point seconds as in fsec2hms(5000.25) = "01:23:20.250000" gmt2sec (class=time #args=1): Parses GMT timestamp as integer seconds since the epoch. localtime2sec (class=time #args=1): Parses local timestamp as integer seconds since the epoch. Consults $TZ environment variable. hms2fsec (class=time #args=1): Recovers floating-point seconds as in hms2fsec("01:23:20.250000") = 5000.250000 hms2sec (class=time #args=1): Recovers integer seconds as in hms2sec("01:23:20") = 5000 sec2dhms (class=time #args=1): Formats integer seconds as in sec2dhms(500000) = "5d18h53m20s" sec2gmt (class=time #args=1): Formats seconds since epoch (integer part) as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". Leaves non-numbers as-is. sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". Leaves non-numbers as-is. sec2gmtdate (class=time #args=1): Formats seconds since epoch (integer part) as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". Leaves non-numbers as-is. sec2localtime (class=time #args=1): Formats seconds since epoch (integer part) as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". Consults $TZ environment variable. Leaves non-numbers as-is. sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". Consults $TZ environment variable. Leaves non-numbers as-is. sec2localdate (class=time #args=1): Formats seconds since epoch (integer part) as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". Consults $TZ environment variable. Leaves non-numbers as-is. sec2hms (class=time #args=1): Formats integer seconds as in sec2hms(5000) = "01:23:20" strftime (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". Format strings are as in the C library (please see "man strftime" on your system), with the Miller-specific addition of "%1S" through "%9S" which format the seconds with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) See also strftime_local. strftime_local (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. strptime (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. See also strptime_local. strptime_local (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. systime (class=time #args=0): Floating-point seconds since the epoch, e.g. 1440768801.748936. is_absent (class=typing #args=1): False if field is present in input, false otherwise is_bool (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. is_boolean (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. is_empty (class=typing #args=1): True if field is present in input with empty string value, false otherwise. is_empty_map (class=typing #args=1): True if argument is a map which is empty. is_float (class=typing #args=1): True if field is present with value inferred to be float is_int (class=typing #args=1): True if field is present with value inferred to be int is_map (class=typing #args=1): True if argument is a map. is_nonempty_map (class=typing #args=1): True if argument is a map which is non-empty. is_not_empty (class=typing #args=1): False if field is present in input with empty value, true otherwise is_not_map (class=typing #args=1): True if argument is not a map. is_not_null (class=typing #args=1): False if argument is null (empty or absent), true otherwise. is_null (class=typing #args=1): True if argument is null (empty or absent), false otherwise. is_numeric (class=typing #args=1): True if field is present with value inferred to be int or float is_present (class=typing #args=1): True if field is present in input, false otherwise. is_string (class=typing #args=1): True if field is present with string (including empty-string) value asserting_absent (class=typing #args=1): Returns argument if it is absent in the input data, else throws an error. asserting_bool (class=typing #args=1): Returns argument if it is present with boolean value, else throws an error. asserting_boolean (class=typing #args=1): Returns argument if it is present with boolean value, else throws an error. asserting_empty (class=typing #args=1): Returns argument if it is present in input with empty value, else throws an error. asserting_empty_map (class=typing #args=1): Returns argument if it is a map with empty value, else throws an error. asserting_float (class=typing #args=1): Returns argument if it is present with float value, else throws an error. asserting_int (class=typing #args=1): Returns argument if it is present with int value, else throws an error. asserting_map (class=typing #args=1): Returns argument if it is a map, else throws an error. asserting_nonempty_map (class=typing #args=1): Returns argument if it is a non-empty map, else throws an error. asserting_not_empty (class=typing #args=1): Returns argument if it is present in input with non-empty value, else throws an error. asserting_not_map (class=typing #args=1): Returns argument if it is not a map, else throws an error. asserting_not_null (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), else throws an error. asserting_null (class=typing #args=1): Returns argument if it is null (empty or absent), else throws an error. asserting_numeric (class=typing #args=1): Returns argument if it is present with int or float value, else throws an error. asserting_present (class=typing #args=1): Returns argument if it is present in input, else throws an error. asserting_string (class=typing #args=1): Returns argument if it is present with string (including empty-string) value, else throws an error. boolean (class=conversion #args=1): Convert int/float/bool/string to boolean. float (class=conversion #args=1): Convert int/float/bool/string to float. fmtnum (class=conversion #args=2): Convert int/float/bool to string using printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers are all long long or double. If you use formats like %d or %f, behavior is undefined. hexfmt (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". int (class=conversion #args=1): Convert int/float/bool/string to int. string (class=conversion #args=1): Convert int/float/bool/string to string. typeof (class=conversion #args=1): Convert argument to type of argument (e.g. MT_STRING). For debug. depth (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. haskey (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or 'haskey(mymap, mykey)'. Error if 1st argument is not a map. joink (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. joinkv (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' joinv (class=maps #args=2): Makes string from map keys. E.g. 'joinv(mymap, ",")'. leafcount (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, same as length. length (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. mapdiff (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. mapexcept (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. mapselect (class=maps variadic): Returns a map with only keys from remaining arguments set. E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. mapsum (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. splitkv (class=maps #args=3): Splits string by separators into map with type inference. E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. splitkvx (class=maps #args=3): Splits string by separators into map without type inference (keys and values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : "1", "b" : "2", "c" : "3"}'. splitnv (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. splitnvx (class=maps #args=2): Splits string by separator into integer-indexed map without type inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. KEYWORDS FOR PUT AND FILTER all all: used in "emit", "emitp", and "unset" as a synonym for @* begin begin: defines a block of statements to be executed before input records are ingested. The body statements must be wrapped in curly braces. Example: 'begin { @count = 0 }' bool bool: declares a boolean local variable in the current curly-braced scope. Type-checking happens at assignment: 'bool b = 1' is an error. break break: causes execution to continue after the body of the current for/while/do-while loop. call call: used for invoking a user-defined subroutine. Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' continue continue: causes execution to skip the remaining statements in the body of the current for/while/do-while loop. For-loop increments are still applied. do do: with "while", introduces a do-while loop. The body statements must be wrapped in curly braces. dump dump: prints all currently defined out-of-stream variables immediately to stdout as JSON. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' edump edump: prints all currently defined out-of-stream variables immediately to stderr as JSON. Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' elif elif: the way Miller spells "else if". The body statements must be wrapped in curly braces. else else: terminates an if/elif/elif chain. The body statements must be wrapped in curly braces. emit emit: inserts an out-of-stream variable into the output record stream. Hashmap indices present in the data but not slotted by emit arguments are not output. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' Please see http://johnkerl.org/miller/doc for more information. emitf emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the output record stream. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' Please see http://johnkerl.org/miller/doc for more information. emitp emitp: inserts an out-of-stream variable into the output record stream. Hashmap indices present in the data but not slotted by emitp arguments are output concatenated with ":". With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' Please see http://johnkerl.org/miller/doc for more information. end end: defines a block of statements to be executed after input records are ingested. The body statements must be wrapped in curly braces. Example: 'end { emit @count }' Example: 'end { eprint "Final count is " . @count }' eprint eprint: prints expression immediately to stderr. Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' eprintn eprintn: prints expression immediately to stderr, without trailing newline. Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' false false: the boolean literal value. filter filter: includes/excludes the record in the output record stream. Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' Instead of put with 'filter false' you can simply use put -q. The following uses the input record to accumulate data but only prints the running sum without printing the input record: Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' float float: declares a floating-point local variable in the current curly-braced scope. Type-checking happens at assignment: 'float x = 0' is an error. for for: defines a for-loop using one of three styles. The body statements must be wrapped in curly braces. For-loop over stream record: Example: 'for (k, v in $*) { ... }' For-loop over out-of-stream variables: Example: 'for (k, v in @counts) { ... }' Example: 'for ((k1, k2), v in @counts) { ... }' Example: 'for ((k1, k2, k3), v in @*) { ... }' C-style for-loop: Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' func func: used for defining a user-defined function. Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' if if: starts an if/elif/elif chain. The body statements must be wrapped in curly braces. in in: used in for-loops over stream records or out-of-stream variables. int int: declares an integer local variable in the current curly-braced scope. Type-checking happens at assignment: 'int x = 0.0' is an error. map map: declares an map-valued local variable in the current curly-braced scope. Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is always OK. map b = a is OK or not depending on whether a is a map. num num: declares an int/float local variable in the current curly-braced scope. Type-checking happens at assignment: 'num b = true' is an error. print print: prints expression immediately to stdout. Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' printn printn: prints expression immediately to stdout, without trailing newline. Example: mlr --from f.dat put -q 'printn "."; end { print "" }' return return: specifies the return value from a user-defined function. Omitted return statements (including via if-branches) result in an absent-null return value, which in turns results in a skipped assignment to an LHS. stderr stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename to print to standard error. stdout stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename to print to standard output. str str: declares a string local variable in the current curly-braced scope. Type-checking happens at assignment. subr subr: used for defining a subroutine. Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' tee tee: prints the current record to specified file. This is an immediate print to the specified file (except for pprint format which of course waits until the end of the input stream to format all output). The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output. See also mlr -h. emit with redirect and tee with redirect are identical, except tee can only output $*. Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' Example: mlr --from f.dat put 'tee > stderr, $*' Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' true true: the boolean literal value. unset unset: clears field(s) from the current record, or an out-of-stream or local variable. Example: mlr --from f.dat put 'unset $x' Example: mlr --from f.dat put 'unset $*' Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' Example: mlr --from f.dat put '...; unset @sums' Example: mlr --from f.dat put '...; unset @sums["green"]' Example: mlr --from f.dat put '...; unset @*' var var: declares an untyped local variable in the current curly-braced scope. Examples: 'var a=1', 'var xyz=""' while while: introduces a while loop, or with "do", introduces a do-while loop. The body statements must be wrapped in curly braces. ENV ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' FILENAME FILENAME: evaluates to the name of the current file being processed. FILENUM FILENUM: evaluates to the number of the current file being processed, starting with 1. FNR FNR: evaluates to the number of the current record within the current file being processed, starting with 1. Resets at the start of each file. IFS IFS: evaluates to the input field separator from the command line. IPS IPS: evaluates to the input pair separator from the command line. IRS IRS: evaluates to the input record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). M_E M_E: the mathematical constant e. M_PI M_PI: the mathematical constant pi. NF NF: evaluates to the number of fields in the current record. NR NR: evaluates to the number of the current record over all files being processed, starting with 1. Does not reset at the start of each file. OFS OFS: evaluates to the output field separator from the command line. OPS OPS: evaluates to the output pair separator from the command line. ORS ORS: evaluates to the output record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). AUTHOR Miller is written by John Kerl . This manual page has been composed from Miller's help output by Eric MSP Veith . SEE ALSO awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the miller website http://johnkerl.org/miller/doc 2019-09-21 MILLER(1) miller-5.6.2/doc/medium.nidx000066400000000000000000017543671354153536500157620ustar00rootroot00000000000000pan,pan,1,0.3467901443380824,0.7268028627434533 eks,pan,2,0.7586799647899636,0.5221511083334797 wye,wye,3,0.20460330576630303,0.33831852551664776 eks,wye,4,0.38139939387114097,0.13418874328430463 wye,pan,5,0.5732889198020006,0.8636244699032729 zee,pan,6,0.5271261600918548,0.49322128674835697 eks,zee,7,0.6117840605678454,0.1878849191181694 zee,wye,8,0.5985540091064224,0.976181385699006 hat,wye,9,0.03144187646093577,0.7495507603507059 pan,wye,10,0.5026260055412137,0.9526183602969864 pan,pan,11,0.7930488423451967,0.6505816637259333 zee,pan,12,0.3676141320555616,0.23614420670296965 eks,pan,13,0.4915175580479536,0.7709126592971468 eks,zee,14,0.5207382318405251,0.34141681118811673 eks,pan,15,0.07155556372719507,0.3596137145616235 pan,pan,16,0.5736853980681922,0.7554169353781729 zee,eks,17,0.29081949506712723,0.054478717073354166 hat,zee,18,0.05727869223575699,0.13343527626645157 zee,pan,19,0.43144132839222604,0.8442204830496998 eks,wye,20,0.38245149780530685,0.4730652428100751 hat,eks,21,0.0023058336158985338,0.16665492414949412 zee,wye,22,0.9270813051677103,0.5523236165919244 wye,pan,23,0.7975862089313748,0.8430307846116346 wye,hat,24,0.7286126830627567,0.19441962592638418 pan,eks,25,0.291444729043585,0.2680100577363237 eks,eks,26,0.7433678407354926,0.8295062256195103 wye,wye,27,0.9439687243972539,0.9305553444632164 hat,hat,28,0.5811879718711469,0.3934172489640808 eks,eks,29,0.05713488327208227,0.45012758797367913 zee,pan,30,0.7514525581952406,0.5869901584461873 eks,pan,31,0.5701563454882129,0.822178550628332 wye,wye,32,0.5112738997714514,0.33107563648490446 hat,pan,33,0.09303747345405,0.18404048980291832 hat,wye,34,0.49061881414751796,0.4721354893261027 zee,zee,35,0.12565828887119346,0.1936186210637818 pan,hat,36,0.9436794292675323,0.9111218711707734 wye,pan,37,0.056537252420374995,0.5450112991603523 pan,zee,38,0.508250895522605,0.12919877119684198 hat,pan,39,0.4591095934684415,0.6526252088703994 pan,hat,40,0.30302850095892986,0.2884018711352886 pan,hat,41,0.08143769954761992,0.030906489980379925 eks,eks,42,0.4614430092810964,0.552479841087209 zee,eks,43,0.8456728393970536,0.8501991168644704 pan,zee,44,0.8980511441946196,0.6728135588610029 pan,eks,45,0.6247151870956413,0.8275695927895051 pan,wye,46,0.08834857197997548,0.4444202016249801 eks,zee,47,0.4544511154182116,0.22787905378091933 hat,zee,48,0.4355461545206776,0.8758429593971929 wye,wye,49,0.21920222273431333,0.18979580426582043 wye,hat,50,0.4942114498754957,0.35138166631352374 hat,pan,51,0.744071908772339,0.9166693426799131 hat,pan,52,0.4302467414632086,0.9811029877493174 eks,eks,53,0.9985342548358704,0.9590495928336531 zee,eks,54,0.9314828033134765,0.8687851184407838 hat,wye,55,0.07268958233806955,0.49851026308988333 pan,zee,56,0.06982762802945175,0.033405940208281026 wye,pan,57,0.7302705254635534,0.7851652600343977 eks,zee,58,0.4767244077783851,0.6343726024100323 hat,hat,59,0.23821881669710454,0.2495882683265671 eks,eks,60,0.9940192460481878,0.23460275425446875 hat,wye,61,0.5661361038240923,0.30297884091448213 zee,eks,62,0.6925670766279615,0.6309283897492339 wye,wye,63,0.3034237022482048,0.4570355951663545 eks,zee,64,0.7150944451661773,0.44407448850132425 pan,hat,65,0.9374806227235818,0.5142245475995557 hat,hat,66,0.8467681996061774,0.7322484476601094 zee,hat,67,0.2584112989773649,0.4004276976232398 hat,wye,68,0.3362076167096233,0.10257516543234868 wye,wye,69,0.5045822356009134,0.37117047177904894 wye,wye,70,0.03459890490173678,0.6153285711977126 pan,hat,71,0.7573370490708291,0.07373145387947322 eks,wye,72,0.5981608655833305,0.6748831518079305 pan,zee,73,0.8832262928532921,0.41423111475143115 eks,eks,74,0.47929526118952226,0.04122489928296569 wye,hat,75,0.5852781359846899,0.2530983414392004 zee,eks,76,0.48749884261245857,0.4733893888865026 hat,zee,77,0.49083602889086597,0.9060845389367156 pan,eks,78,0.8066566257701527,0.5756861577587412 hat,eks,79,0.36764688836079906,0.3891921555248843 zee,zee,80,0.8318990957979263,0.9881725534495532 hat,wye,81,0.17534099646455403,0.2603138043676684 pan,eks,82,0.16030863176622356,0.3818559883741389 eks,eks,83,0.12617292637489663,0.2322389628774958 hat,wye,84,0.6438639100413308,0.7352455517915716 wye,wye,85,0.4632506196324333,0.47736149585488863 wye,hat,86,0.040744707036128314,0.03301111174849969 wye,hat,87,0.6505610031501867,0.8780409741829391 hat,eks,88,0.4467819157449152,0.25053527761538363 zee,zee,89,0.8495466480863977,0.32621281477326824 wye,hat,90,0.47950389571017593,0.42674583688195655 pan,pan,91,0.9831553489472493,0.8956966539093748 pan,eks,92,0.558471394524429,0.18097017277790595 wye,hat,93,0.5870769045363674,0.9424742244710793 zee,hat,94,0.9025271534348577,0.45924993374839684 wye,wye,95,0.49658345077223354,0.9177517032161158 wye,hat,96,0.6981858011144773,0.7500496060047478 zee,wye,97,0.9848235494485748,0.022289257742961754 pan,wye,98,0.7858397459820843,0.17868083683024716 zee,zee,99,0.9317555381388605,0.7821791090489817 wye,zee,100,0.45744184842338,0.8682791684654946 pan,hat,101,0.8551893009031044,0.5817332905396572 hat,zee,102,0.6981668049063121,0.7047537152787725 zee,hat,103,0.4414561871794942,0.9469598103198476 eks,hat,104,0.2120601199719776,0.5815731915374246 hat,pan,105,0.18287006336938183,0.7049942001890025 pan,hat,106,0.29173443059817517,0.7752097526541691 pan,pan,107,0.04969073649124267,0.3496530999805786 wye,eks,108,0.7225927195065096,0.4187910102687944 hat,zee,109,0.6352241884717337,0.5627539222500982 hat,eks,110,0.23052618333925456,0.6381223147292577 pan,hat,111,0.9154288048749503,0.6519249542119475 eks,hat,112,0.04982284101245715,0.7642422832858892 wye,zee,113,0.3320543853278368,0.30390890533333614 wye,wye,114,0.5448671671522891,0.4560013210405327 zee,eks,115,0.6020602802269807,0.49151403260985893 eks,eks,116,0.6525970433533309,0.6038254664200311 wye,hat,117,0.5151714700146957,0.07461822977630961 hat,zee,118,0.869072185421898,0.24935951674957813 eks,eks,119,0.7271030983543114,0.49297558822358944 wye,hat,120,0.7615397120903524,0.9797450222382247 pan,pan,121,0.613826139364826,0.9594055166987485 eks,wye,122,0.38075252326113784,0.015438488067683442 wye,wye,123,0.5795446579685392,0.35893969199526243 eks,zee,124,0.5720422015264689,0.5847353398497057 eks,zee,125,0.20393191361301366,0.5417271858177272 pan,zee,126,0.1495175173899136,0.37751439353621485 eks,wye,127,0.0766455676519866,0.8562543633218965 zee,hat,128,0.4962404023217607,0.3377314781015287 eks,hat,129,0.17009251828726202,0.517544397009653 eks,zee,130,0.8191166461936853,0.6036827248166735 zee,zee,131,0.8820504927451462,0.17262406561122967 eks,wye,132,0.6634725445660961,0.3836479034081546 hat,hat,133,0.10275440550496173,0.24475094001022435 eks,wye,134,0.224629215365013,0.6849916283018126 hat,hat,135,0.6950203918361871,0.6680826428134803 pan,pan,136,0.10793035048973287,0.26815648351708954 eks,hat,137,0.7869909808709532,0.3001475489161951 hat,eks,138,0.9349507622807055,0.1692665561677016 eks,zee,139,0.11179490410324633,0.603721160232944 wye,zee,140,0.21454586218739624,0.5492253214081585 pan,hat,141,0.2240396548356538,0.2500739139538637 zee,eks,142,0.7814387149488571,0.5062129648989182 pan,eks,143,0.7772439867698123,0.970133177930633 eks,wye,144,0.5300792274901561,0.3329098127249156 hat,zee,145,0.9039391234331099,0.17366986802981454 hat,wye,146,0.7557462730554149,0.8354966950279341 wye,wye,147,0.19573082452335644,0.16675321752165628 hat,eks,148,0.6206402300915382,0.821425348018401 pan,pan,149,0.2983431833827429,0.49328391364637114 zee,wye,150,0.6465476525020952,0.010839998639479487 pan,wye,151,0.7628297388566211,0.25945524901441286 eks,zee,152,0.39677449578160984,0.01242383070673192 pan,eks,153,0.3403054358911233,0.20856161342555235 wye,wye,154,0.7473556150405872,0.5878222144661077 pan,wye,155,0.8308266904064261,0.6160102482290218 hat,zee,156,0.06969918779892115,0.12332013609343595 zee,zee,157,0.08770785920874291,0.1694018877034732 hat,wye,158,0.5750041834429883,0.8988889437381339 zee,hat,159,0.3949341964723728,0.21461635038581106 wye,hat,160,0.7700798652245849,0.07882734380346257 hat,zee,161,0.241833257737751,0.2595728278064434 zee,zee,162,0.30865469474514673,0.04807979540420082 hat,eks,163,0.1276067871735147,0.60275669734591 eks,hat,164,0.24635677428468206,0.026325305117816278 wye,wye,165,0.8845921239269926,0.31637090814582536 wye,hat,166,0.44829526779246864,0.9231413532216132 eks,wye,167,0.4655842156857275,0.37721410941530287 wye,hat,168,0.7006512384825274,0.47994014933998974 pan,eks,169,0.772606170256783,0.2822045789726282 hat,zee,170,0.12938897709124275,0.8919705275016901 wye,wye,171,0.06972810304721344,0.9401580287060083 pan,pan,172,0.5464624353474236,0.4315049479416151 wye,pan,173,0.15061916413672838,0.399506367745217 hat,eks,174,0.2254130292138935,0.6999307939959456 zee,pan,175,0.3493963468867093,0.2448706490036231 hat,hat,176,0.5951138587106596,0.851049910114082 hat,wye,177,0.39004663496677305,0.2404193708137553 hat,eks,178,0.7778109990978507,0.4353416180768024 pan,pan,179,0.5158487973995551,0.3857173070225889 hat,wye,180,0.0983048320526585,0.3605050602699248 hat,eks,181,0.06881556874834038,0.02776354780439838 eks,zee,182,0.8795883767333226,0.7913268326625821 pan,pan,183,0.6986560980027141,0.10540771793654646 zee,wye,184,0.3918665170311699,0.8726348045234303 eks,pan,185,0.49921597322068556,0.7926600920736209 zee,wye,186,0.4488271641509629,0.6778168337109446 wye,eks,187,0.1765361867584282,0.7166382775023783 eks,wye,188,0.7195019639137887,0.6101293217348989 pan,eks,189,0.48651849518653256,0.3310583783958194 zee,hat,190,0.9187417496732211,0.01357822326345659 wye,hat,191,0.6036920337427446,0.10361603649711493 pan,wye,192,0.7721928274839366,0.730996300378133 eks,hat,193,0.8250294635521217,0.014592155431475518 eks,eks,194,0.6636241298839136,0.5259126321800084 pan,hat,195,0.6642514282295026,0.9448672883012781 eks,pan,196,0.36476881994778887,0.7206833750684084 wye,wye,197,0.07466320732554754,0.1470636187800869 eks,hat,198,0.04736012928828348,0.09632719090688924 zee,hat,199,0.07495669138561056,0.0033556400316512303 eks,pan,200,0.25160946724271127,0.3153026554896944 wye,eks,201,0.43178278951820004,0.6395054755372058 wye,eks,202,0.8067281849918618,0.45331926346459483 zee,zee,203,0.9685128952631964,0.10935985453746455 wye,eks,204,0.0866873459163141,0.08597589292509311 pan,hat,205,0.2896936796389531,0.9186383587296384 hat,wye,206,0.9712065807938725,0.8814161529894458 wye,zee,207,0.23493288178707172,0.9202087940900824 wye,eks,208,0.638370131847482,0.6031891659074958 hat,eks,209,0.08722321261724375,0.1699175655988554 eks,hat,210,0.4371757785089875,0.6860038700835268 wye,pan,211,0.20888984269730204,0.947777347490174 hat,zee,212,0.7028540974957029,0.2764448806144022 pan,zee,213,0.910694728148218,0.538005658230806 wye,zee,214,0.3552257616717024,0.7272883402124964 pan,zee,215,0.8250379925053151,0.7418087278106543 zee,zee,216,0.8378134809357036,0.016812447916020323 pan,eks,217,0.22619506065989436,0.6341340791970084 pan,zee,218,0.9817869716469648,0.49201333191352814 pan,wye,219,0.8177491896372755,0.4265728829799966 wye,eks,220,0.9707941416650918,0.5446983207141396 hat,eks,221,0.9623773206695981,0.7961697529692682 hat,wye,222,0.19310273682362344,0.7734873966667793 wye,eks,223,0.7008326115259359,0.8171891486894675 eks,pan,224,0.7439085948665143,0.02788543310463787 eks,zee,225,0.2567945604892924,0.24424154648770224 pan,hat,226,0.6257005988135916,0.042000423208434334 zee,wye,227,0.5324819986117966,0.43906785967359585 hat,zee,228,0.6353440745576056,0.8565317288607986 wye,hat,229,0.5097848345332788,0.8249641724859278 eks,hat,230,0.23668880559764938,0.9795999884306217 zee,wye,231,0.4952269526615126,0.998055015071858 eks,wye,232,0.5507351778417637,0.7118263982857057 hat,hat,233,0.2131489206395062,0.08647965840929162 wye,pan,234,0.4686994090286404,0.7301121378084597 wye,hat,235,0.37176718775770257,0.8655732826697372 eks,hat,236,0.06364189456177682,0.4949298511378918 pan,zee,237,0.4520047694204633,0.7431070780984742 pan,pan,238,0.1802663344712152,0.40747996818620213 zee,pan,239,0.7069459453313341,0.24901349035427478 wye,eks,240,0.11369718773090787,0.4362931656865052 pan,hat,241,0.5298443076284122,0.7286240415109126 hat,hat,242,0.17197294875303992,0.42960373892313586 hat,wye,243,0.40008739772830226,0.3431833719273334 wye,eks,244,0.047932173034763714,0.15974685050052528 hat,hat,245,0.6047108965207437,0.00023825870459259768 eks,hat,246,0.5031823192345856,0.1530255494090368 hat,hat,247,0.13552744935597638,0.7642516336910976 hat,wye,248,0.8794750860292233,0.9633187985176084 eks,pan,249,0.7650242839504571,0.13484454578382632 zee,wye,250,0.18225031260376368,0.42639010352161133 eks,eks,251,0.6366142860676015,0.7279525837465141 eks,pan,252,0.7489029711796827,0.6216975230273389 zee,pan,253,0.2896285025325088,0.4107984626977105 wye,pan,254,0.40783269275640843,0.07873948964651878 pan,pan,255,0.4310139640663371,0.133668391263563 pan,zee,256,0.715203591010661,0.3049124395637157 pan,eks,257,0.08448448051072821,0.8143297719717848 pan,wye,258,0.21573850217727963,0.7972074125763187 zee,wye,259,0.6485993255572561,0.9239849074696734 pan,hat,260,0.7786431758578792,0.9906513397624532 pan,hat,261,0.9547041198642143,0.46035613392656816 eks,wye,262,0.20205307067280354,0.8159138156555881 pan,pan,263,0.735966834511216,0.8642501328542477 pan,pan,264,0.0365319279313181,0.01547685459691761 hat,zee,265,0.594302803640343,0.26329631667022746 zee,zee,266,0.8645462287461376,0.3192124287902842 pan,hat,267,0.8759426552130376,0.8128071892594659 wye,zee,268,0.334247707070338,0.07108295911604934 zee,pan,269,0.8962601880511555,0.42772238076912505 zee,wye,270,0.9840112531079188,0.03199538649369371 pan,zee,271,0.38241767385691083,0.47652036205919546 zee,eks,272,0.5076219094472946,0.8598422972471865 wye,eks,273,0.4666963378862372,0.8511149275440506 eks,pan,274,0.5094754996388772,0.8630831763542761 pan,pan,275,0.0702163840810267,0.49744457340186665 zee,eks,276,0.7494501132627315,0.831480047566556 hat,eks,277,0.9160765564583604,0.9665017202156387 eks,wye,278,0.3405469715018894,0.39395981360241694 hat,wye,279,0.7709353111571556,0.0741458017139579 hat,zee,280,0.30432388754514095,0.9094986664334528 pan,wye,281,0.2807837856477664,0.5185246955685402 pan,wye,282,0.5934682340749541,0.33551685400674336 wye,eks,283,0.3857770915059473,0.2520288213780115 eks,hat,284,0.2823409534969953,0.6424410943891458 hat,hat,285,0.5231416402386272,0.8268208737366626 pan,pan,286,0.7741141348990104,0.22151996054945777 zee,zee,287,0.6530502437373199,0.28290337083561623 hat,wye,288,0.41079993080494803,0.6788656658934381 wye,zee,289,0.6118394231953472,0.2017219713934819 wye,zee,290,0.3867610140403043,0.5119527530254661 eks,wye,291,0.2544198663482523,0.9572070479148829 hat,wye,292,0.7857064933058493,0.5074038206162027 wye,wye,293,0.48768027264524494,0.858140960943469 hat,zee,294,0.3704436769585995,0.3120229742987346 eks,zee,295,0.4706744506967422,0.5788534321133716 zee,hat,296,0.014194623144548224,0.5791381505013093 eks,wye,297,0.15536712579543976,0.24068588834787485 pan,wye,298,0.2554134483434475,0.5924810928892916 zee,eks,299,0.8277425415026218,0.27844715446692714 pan,hat,300,0.7146992829593928,0.5429822061061883 zee,eks,301,0.30731567290334727,0.5306701215524663 zee,pan,302,0.7544266351625367,0.36462424597130505 pan,pan,303,0.9181020134419905,0.081593490099233 eks,eks,304,0.7883980268101866,0.23415186590563442 wye,pan,305,0.5103104415224277,0.6005096012353242 hat,zee,306,0.9883564018988095,0.42316915798436483 wye,eks,307,0.6064616942445623,0.565814763986132 hat,eks,308,0.40085643331635357,0.09395240921387538 pan,pan,309,0.5155063246540209,0.1492080054471291 zee,pan,310,0.5166885866040305,0.05595794333763471 eks,eks,311,0.09369987234653387,0.06802932452953492 wye,zee,312,0.07612086875946633,0.27326136662066614 zee,eks,313,0.25858901604075357,0.8923698739553502 zee,pan,314,0.906390102311296,0.454409013999299 hat,zee,315,0.34523405773089744,0.4354275687352226 zee,hat,316,0.13504220690406277,0.3795391182446578 eks,pan,317,0.46957588924343485,0.3400251823752689 wye,hat,318,0.18637343210075064,0.45983893886751714 pan,zee,319,0.16606734288775093,0.21473289889901537 zee,pan,320,0.8307425029665492,0.9687981266665243 zee,zee,321,0.6999788077300872,0.526382289897085 hat,eks,322,0.9979624896088678,0.38870780074027156 wye,zee,323,0.7167871674039571,0.8146661281584913 wye,wye,324,0.22862799493809793,0.45776956542633673 hat,hat,325,0.8502045677344342,0.06531154070205691 wye,pan,326,0.5817376394212832,0.2811644998873859 zee,zee,327,0.1254581943608959,0.01871101782750706 eks,pan,328,0.28146620713469994,0.45414955407945334 pan,eks,329,0.03763317797683374,0.2401750869051401 pan,pan,330,0.27222804399530887,0.8283442325329333 wye,hat,331,0.862986205564722,0.021211611355487214 wye,hat,332,0.5529572417601349,0.10365182374492421 eks,hat,333,0.0677128764291699,0.13888954761924865 hat,hat,334,0.8122872254151258,0.9343598605592562 wye,wye,335,0.3136448355146325,0.3030034178002945 wye,eks,336,0.3723857599541325,0.12311828419230408 wye,eks,337,0.8517094711110174,0.7107950535254092 hat,wye,338,0.29886440908142087,0.44199727275540557 eks,zee,339,0.4583899635695151,0.06228530919187403 wye,eks,340,0.23528308849163693,0.3882734087125834 zee,eks,341,0.6862997171756073,0.15490090302333992 pan,eks,342,0.23702739214960689,0.13214761320752622 pan,wye,343,0.2724033449540535,0.45196387793887527 eks,hat,344,0.6604478311777118,0.8554572649437313 wye,wye,345,0.11573898528830462,0.7254541105786084 eks,eks,346,0.4314505110520016,0.35990136288181707 eks,wye,347,0.013154121167666677,0.8417854982925147 pan,hat,348,0.14077282669103053,0.6589658883444618 wye,wye,349,0.4473451552346923,0.560474868919231 pan,eks,350,0.7749620340665812,0.6934753745173732 hat,hat,351,0.12676653838858187,0.7306420663956253 eks,eks,352,0.8908223033829336,0.756634722087033 wye,wye,353,0.3561234723336817,0.25848510016885773 wye,zee,354,0.07167250764974309,0.04755739805455228 eks,pan,355,0.6260379271888249,0.9999648102177897 wye,eks,356,0.9105767596182323,0.6275830055247574 hat,pan,357,0.584955714773423,0.2694061184561868 pan,eks,358,0.7793042404385853,0.3575901643950514 wye,pan,359,0.46013788462671257,0.07923543496739904 hat,pan,360,0.8209514688962976,0.322642334738109 eks,zee,361,0.43390275775283316,0.6995243187004873 eks,hat,362,0.9858910807074641,0.6063471357443468 zee,eks,363,0.0603319537288447,0.903548344851872 hat,pan,364,0.22048203347659634,0.9648789798257121 eks,zee,365,0.2429839206497697,0.5838305480202817 wye,wye,366,0.8697917247196751,0.11967963730609776 wye,wye,367,0.09106459676772116,0.7044423738663792 pan,eks,368,0.3244982645940453,0.8587867062845185 hat,zee,369,0.18008064179308536,0.31358866392662854 hat,zee,370,0.7032327626709055,0.4844486606638011 hat,wye,371,0.48451798820346725,0.08468945923087656 zee,hat,372,0.8713237021766693,0.18775438815480894 wye,hat,373,0.9062681519121573,0.6942343130437282 pan,hat,374,0.8711355253639088,0.21056604953749913 hat,zee,375,0.5411012705685904,0.49472395657244717 wye,pan,376,0.9148906431225965,0.6865707031323998 pan,zee,377,0.0873375214879103,0.9512779365638556 pan,zee,378,0.30162069682241655,0.59487547378256 hat,wye,379,0.723368325539696,0.9239506513259356 wye,hat,380,0.3284426805925267,0.8338493039051695 pan,wye,381,0.5162110464238533,0.028931464336820256 pan,wye,382,0.10290553602186514,0.15037258795056763 wye,wye,383,0.5865652699352844,0.14421401993609984 pan,zee,384,0.5491251090567257,0.9145935172366898 hat,eks,385,0.8339951693283406,0.3033056717379309 hat,wye,386,0.7028181061111627,0.3480791920548796 eks,wye,387,0.5486856774729921,0.46054237397329445 wye,eks,388,0.5468979682673912,0.5716892746572024 wye,pan,389,0.8711354046280742,0.7000550458179466 pan,zee,390,0.32965901763834493,0.4764401595448211 pan,wye,391,0.8693210254564347,0.39042419999368405 hat,eks,392,0.2668797007178766,0.9538969507044115 zee,eks,393,0.6953842859899757,0.9546625350220701 eks,hat,394,0.48773327214873685,0.6690593283014772 wye,eks,395,0.5496441289397975,0.9130998398573059 pan,eks,396,0.12088261778903142,0.2915014516366682 pan,pan,397,0.6527193676882986,0.5140617542371629 pan,pan,398,0.7206692031862747,0.4350967619148699 eks,eks,399,0.010510711223853386,0.08397157710064007 wye,zee,400,0.3788030627053418,0.7831833396943373 eks,pan,401,0.08749968996168989,0.3703456609602497 eks,wye,402,0.9870844142664434,0.07570772729385356 zee,hat,403,0.8371422088541587,0.9376680469763548 eks,wye,404,0.9276329844702215,0.30151980049765137 wye,wye,405,0.5955452707872064,0.5663276615611866 hat,wye,406,0.3016062899704931,0.1481359817881971 hat,pan,407,0.3557842656104653,0.8619332107179143 zee,hat,408,0.13829592936600588,0.4643427499672679 zee,zee,409,0.3885779964636952,0.8355517296208552 pan,pan,410,0.3369457823719886,0.6595559599218499 hat,pan,411,0.130208615128796,0.8157820943662931 zee,hat,412,0.5684534581822444,0.7576411674301173 wye,wye,413,0.1924325306941328,0.7584253339041852 pan,zee,414,0.09069900090430805,0.8557236931723043 hat,pan,415,0.9713015252603615,0.4287777397307879 wye,pan,416,0.8898988612865336,0.8930372261944983 wye,eks,417,0.9035749108061284,0.11475796206309319 zee,zee,418,0.36259161480392366,0.03106838412360613 zee,eks,419,0.9669197256156522,0.9525495700296412 zee,hat,420,0.2472176643017414,0.4766709326963189 hat,pan,421,0.5484055610018505,0.7401624563813598 wye,eks,422,0.9843960933372673,0.8274060260108933 pan,pan,423,0.08736573145179394,0.47080422361654306 pan,hat,424,0.41967399152692275,0.11281967088191636 eks,zee,425,0.1541100762311376,0.2899666127124777 wye,wye,426,0.8189862069673424,0.04342559105332089 pan,wye,427,0.42286545073700454,0.4861336428493519 pan,pan,428,0.8513998866661314,0.18344030684570167 eks,zee,429,0.10194433521396717,0.20006319684657992 eks,wye,430,0.5857626187839062,0.5321382987939495 zee,eks,431,0.8583324116859721,0.994808666622831 eks,eks,432,0.7853965492176864,0.9164907493679918 wye,hat,433,0.1717036971229997,0.820252389423276 pan,zee,434,0.3719511404416881,0.9187328704871145 hat,hat,435,0.02744685418877102,0.6376228704372093 eks,eks,436,0.6933382044724179,0.6338292052517879 wye,pan,437,0.37712852260119445,0.2533800875229283 zee,hat,438,0.3425559514322971,0.7292109440844495 zee,wye,439,0.6058194548394703,0.1349506589946292 wye,wye,440,0.33549631716864114,0.5044355487644854 zee,pan,441,0.6917806418576951,0.3830829559702531 pan,eks,442,0.3051229752913909,0.3927572304818523 hat,eks,443,0.35262831982100495,0.5903148558170942 wye,hat,444,0.009596883381098431,0.7627826236742389 hat,pan,445,0.693707602798371,0.9355332457358334 eks,eks,446,0.32733245362496055,0.5235444779640992 zee,eks,447,0.31894704216497904,0.8410708131567204 hat,eks,448,0.18956024307293828,0.7651866504059165 zee,wye,449,0.8505833795792004,0.9244534714701724 eks,wye,450,0.6844926010909408,0.614368249300009 hat,pan,451,0.6296608646086276,0.4470390043301713 pan,pan,452,0.5045572974857859,0.4793103881363998 hat,wye,453,4.509679127584487e-05,0.22031599198733764 wye,wye,454,0.2443606067405415,0.6398645261834082 wye,wye,455,0.804633328675182,0.48300382684775944 eks,zee,456,0.410350850017583,0.9892210383992472 wye,hat,457,0.0933236073619339,0.9291691566694624 zee,zee,458,0.4844711931621539,0.27495542782645344 eks,eks,459,0.3611062645335037,0.40226115300495247 pan,eks,460,0.8223780119629852,0.9126194557839794 hat,eks,461,0.3252432769092649,0.658382796137213 zee,wye,462,0.5396036185572467,0.25336124010413796 hat,wye,463,0.5222301823622756,0.38087060395976524 pan,hat,464,0.7246049387606904,0.45691838399060136 hat,pan,465,0.9995625801977208,0.23491153961213218 hat,wye,466,0.4276402941162851,0.029924580250603294 wye,hat,467,0.8502632858410699,0.22370398176509754 wye,zee,468,0.6372967659876994,0.024138253192505066 eks,eks,469,0.12954404025896205,0.13771358880489826 pan,eks,470,0.6368746235564642,0.31586391338281394 eks,hat,471,0.7738089394551085,0.4919427799587256 zee,hat,472,0.5201558372951883,0.5500922568519445 pan,zee,473,0.28235480114669276,0.01789197833877909 hat,zee,474,0.9737504172221616,0.5620581498765591 wye,wye,475,0.39240247578786536,0.7480836274059417 wye,pan,476,0.7337177223414596,0.33451199751230254 eks,eks,477,0.034584510761659026,0.43469127809305075 pan,wye,478,0.9492235640609361,0.3382725473893562 eks,hat,479,0.935311382854882,0.5581569700476232 pan,eks,480,0.6265973838424406,0.7055055050235215 hat,pan,481,0.0821695972704326,0.35414544375322354 wye,zee,482,0.4898198409702952,0.9025273479460141 wye,hat,483,0.2316003856711063,0.43956136357576003 eks,eks,484,0.6641863677348001,0.6447460873709984 wye,wye,485,0.2617661797012584,0.42266716043415287 wye,hat,486,0.30133537944217137,0.10221649013386602 eks,hat,487,0.06223193198721644,0.9204160326915265 hat,pan,488,0.9232269980553737,0.6301846340531019 zee,eks,489,0.47256613643793366,0.043043925407927786 wye,eks,490,0.05509649068009248,0.7725681545197371 wye,pan,491,0.2513964759410543,0.029649890186790206 eks,zee,492,0.24404562827103082,0.21765361298784158 hat,eks,493,0.1664695548518379,0.24789421681152946 pan,eks,494,0.3713429019328153,0.6705235456747188 zee,eks,495,0.9946822846385448,0.4850476812126694 wye,wye,496,0.9274092551834339,0.2541879419841372 wye,wye,497,0.7021621810855977,0.533290838271892 eks,eks,498,0.7227433480694091,0.6862413971745326 zee,zee,499,0.36612213225774104,0.6372766826351961 zee,pan,500,0.9372377490487999,0.5618667924767166 eks,pan,501,0.040475122297163324,0.16567765824398517 hat,wye,502,0.6077314844130164,0.768942559474086 pan,pan,503,0.0738664869271265,0.25330608830961776 pan,hat,504,0.25531331734422,0.7865269588902073 eks,wye,505,0.910806292687196,0.9026141937080411 hat,pan,506,0.15630232440709246,0.9158685116698817 eks,hat,507,0.5820790015257209,0.07776020965028863 pan,wye,508,0.9048575733678795,0.2624876849034098 pan,pan,509,0.30214111076722505,0.004555052573727347 eks,eks,510,0.2716828558768003,0.8096330043733283 wye,pan,511,0.16150441052668496,0.9285095431973928 zee,pan,512,0.19477333058846336,0.2603817709639791 eks,eks,513,0.31922688479267713,0.834593837944139 hat,zee,514,0.3540200248392754,0.2390584570033465 pan,hat,515,0.20952222920525165,0.7943223745285899 wye,hat,516,0.3140651518806169,0.8926293957852705 hat,zee,517,0.49137770000060343,0.35141387324505546 eks,zee,518,0.2568385171206745,0.5364889783697552 hat,pan,519,0.10212966989515981,0.16533265211820058 pan,pan,520,0.012153536247427765,0.5649175470315574 zee,hat,521,0.3838787804586675,0.8057523001988509 eks,pan,522,0.28735731367601225,0.01067207233763956 zee,wye,523,0.34414490686076227,0.26451700279951407 zee,eks,524,0.07661268800300436,0.336140096726808 zee,zee,525,0.2340021990274821,0.19565171550317406 eks,pan,526,0.9916766172123481,0.4941629586579006 wye,pan,527,0.23490598090770587,0.04525601514058908 eks,hat,528,0.558596725535886,0.18453457803026696 pan,wye,529,0.25303243992392954,0.24620118020872683 zee,zee,530,0.8324822558401548,0.6988570770856138 zee,hat,531,0.008609039703687982,0.5468838181663499 wye,pan,532,0.6825242751147447,0.4637231032445399 pan,zee,533,0.7751095714402214,0.5255361584302058 eks,zee,534,0.45468067939968737,0.6307288279730315 eks,zee,535,0.918189166469818,0.9631682259880161 zee,eks,536,0.9772047656933902,0.27024499862207607 hat,wye,537,0.05229927642142651,0.556739261699473 eks,eks,538,0.6478937309967303,0.8641203708540487 hat,pan,539,0.7269218850428996,0.48514423955986363 hat,pan,540,0.7444966092534115,0.8005631784590818 wye,eks,541,0.31793693438539106,0.5338521836000718 pan,zee,542,0.45523794139189355,0.7625878689224138 wye,zee,543,0.7175140108300609,0.47463314228548703 pan,eks,544,0.3070977911148097,0.8601511205546479 eks,pan,545,0.6594595904219487,0.9953938324572855 pan,pan,546,0.6157989578235565,0.5516616028345289 eks,hat,547,0.9313805274362773,0.08303742296566352 zee,zee,548,0.9236546276965072,0.7185917789599708 zee,hat,549,0.10683412342384302,0.3609954494938745 zee,zee,550,0.442695858154603,0.2279810907065235 hat,hat,551,0.010195105734865595,0.8966350444752939 hat,hat,552,0.23961750012587524,0.7097949558865199 hat,wye,553,0.6455436846500622,0.18485559566207277 zee,eks,554,0.06517756796746732,0.8796685374823151 zee,zee,555,0.42969241921044865,0.5290835130803165 hat,pan,556,0.6486062750649167,0.7897824130903452 zee,pan,557,0.1878359832100659,0.36569848741631705 wye,wye,558,0.44297135060478476,0.5083526674553874 eks,hat,559,0.27722769169135486,0.6987550099842482 eks,zee,560,0.24564874858670038,0.8997800191444999 pan,wye,561,0.23019585224736527,0.33146344086760515 wye,zee,562,0.9090864712373032,0.6795157215425431 eks,pan,563,0.595802702383979,0.168651831473682 hat,zee,564,0.7039566464970486,0.11164900949647594 zee,eks,565,0.5452772873196364,0.39972630770376316 wye,hat,566,0.5358639536626888,0.7343387003323596 pan,zee,567,0.36579393243898306,0.7559831353974735 eks,pan,568,0.9357934717739306,0.5799507923614251 wye,wye,569,0.7665973069675542,0.7195592313665612 pan,hat,570,0.38210149896595413,0.6304766007845428 hat,zee,571,0.26634229030281786,0.973201156636735 wye,pan,572,0.21135242286079792,0.8934489624895702 eks,zee,573,0.9268019021927346,0.17379821868719336 pan,pan,574,0.5760503711916657,0.25841636920363253 pan,wye,575,0.21812558940117743,0.3918449054425934 hat,wye,576,0.9187805829729324,0.7265918618789776 eks,eks,577,0.6757641755808136,0.8438941757795644 eks,pan,578,0.08138468100156837,0.7679042873713715 zee,pan,579,0.8628900762701416,0.49668430223471005 pan,wye,580,0.7375265988223096,0.28754696324486384 zee,zee,581,0.03169831018517821,0.26542940289146955 hat,eks,582,0.15837738839177617,0.04767102936713474 hat,eks,583,0.9124356938988999,0.43270325299399315 eks,hat,584,0.21498015726965602,0.7651057421754358 hat,zee,585,0.6805895701299852,0.9163445111607751 eks,wye,586,0.7911985256947109,0.29846866889111534 zee,pan,587,0.8338045555120547,0.18127234053022412 eks,pan,588,0.2983121220479472,0.7836442261015891 pan,wye,589,0.8045092117185423,0.9810352594851226 eks,hat,590,0.17485208172241573,0.10386578574214755 wye,zee,591,0.7581719018917179,0.16248881933435744 hat,wye,592,0.25971796023192173,0.17042472633318229 zee,hat,593,0.05696407643477175,0.6739629581626518 zee,eks,594,0.7405522732897065,0.31187891301120196 zee,eks,595,0.1915646079106995,0.9366091103378753 zee,eks,596,0.9553146355738393,0.47618665485485456 wye,pan,597,0.9041321135345515,0.7679179807567709 hat,wye,598,0.3095910881025504,0.8653973492352675 wye,hat,599,0.9310931043540538,0.9627637520286313 eks,zee,600,0.10930837103642799,0.734892377459777 wye,pan,601,0.10514810449108858,0.5812271144341119 pan,zee,602,0.9884538231531689,0.9826428169828403 zee,hat,603,0.04308972133597455,0.5287126434418946 hat,pan,604,0.43188828562650494,0.050660555822547026 pan,zee,605,0.2529032876659366,0.3388959543441078 eks,eks,606,0.35689384699612214,0.4336296598478725 zee,zee,607,0.06487858333497942,0.9820515846728632 hat,wye,608,0.3631005984856752,0.17908512378632557 zee,eks,609,0.0885240972512874,0.11687754329610434 eks,wye,610,0.976870279166798,0.979024408220298 hat,eks,611,0.22058278727333458,0.23176980505367228 pan,pan,612,0.5001009219306088,0.844066356281099 zee,zee,613,0.30995155197043656,0.7020213088533442 pan,eks,614,0.3108839226386939,0.3561979428678962 wye,eks,615,0.30764905368295004,0.3507626708329916 wye,hat,616,0.7717383349877469,0.1875503990617584 wye,eks,617,0.2660764665919485,0.145799475554256 eks,eks,618,0.697318049680538,0.8904258470184732 pan,hat,619,0.503320378593238,0.03835628235587274 eks,pan,620,0.9358015206061678,0.07000472867831498 wye,pan,621,0.9195273303281286,0.29958433313761934 hat,eks,622,0.6369034391881591,0.40912695001571486 zee,hat,623,0.3258804550058424,0.78858008240255 zee,hat,624,0.04964230770489264,0.579602188490132 pan,pan,625,0.6915515843242978,0.6178010854014475 pan,eks,626,0.41509674152822296,0.9607620788899446 hat,wye,627,0.9225950318933018,0.46973980998460607 wye,wye,628,0.6670242157242242,0.32410876974705904 wye,wye,629,0.0503400168303868,0.10527602332963393 wye,pan,630,0.6992730519827314,0.21425077312475782 pan,pan,631,0.782561530337917,0.3007736131403983 hat,wye,632,0.5674934046837635,0.8372958944262796 eks,wye,633,0.9138839617434728,0.031060548633509377 zee,hat,634,0.7745019360438186,0.3417641107496465 pan,wye,635,0.00861695712771493,0.5441803604064096 hat,zee,636,0.20399264976283815,0.7450909531960087 eks,wye,637,0.10597293490004256,0.20904153809081627 zee,zee,638,0.6998724502294686,0.15842755789229168 wye,pan,639,0.6297328922259222,0.24669534343310429 pan,wye,640,0.5760120638145232,0.6662486414541403 zee,wye,641,0.903530980816814,0.08429459129055339 pan,zee,642,0.6222272826627048,0.18325502513152692 wye,zee,643,0.8440287778509163,0.08413199380954395 hat,zee,644,0.9789858624275163,0.6867108424306388 eks,pan,645,0.28589757090653023,0.2874816869622683 pan,zee,646,0.03971681746631206,0.11488578458241061 pan,zee,647,0.9002505665510399,0.3919843474342828 pan,hat,648,0.6975350070264588,0.5434923294790459 wye,pan,649,0.017833700431765576,0.28497950273429307 wye,pan,650,0.8995516713685614,0.9709755173196244 eks,eks,651,0.23479328023133328,0.517141351688706 zee,pan,652,0.774338764727154,0.7866779831902309 pan,zee,653,0.598251646829306,0.798568072477333 pan,zee,654,0.5450721032047166,0.32230118106744865 hat,hat,655,0.43895262867533247,0.869617554872027 eks,zee,656,0.7342238031294267,0.6344399868216409 eks,eks,657,0.9526997294869483,0.6231118783065456 hat,pan,658,0.625646089688133,0.11860595050930467 eks,zee,659,0.5013803781985338,0.20397067203535713 zee,pan,660,0.3829079054237686,0.46767052095812467 eks,eks,661,0.16124263574065234,0.7861689392233051 hat,eks,662,0.8455895630959102,0.3950043508928123 pan,wye,663,0.4853719483437431,0.9100750401717121 zee,pan,664,0.3334670290589219,0.6393920946436594 eks,eks,665,0.5054850171460168,0.413768182196923 wye,hat,666,0.45353783164970474,0.530754898058723 eks,eks,667,0.656573731471621,0.902119091388546 wye,pan,668,0.04920210066939823,0.23851670466645347 hat,hat,669,0.6845954830331666,0.48983710746829556 eks,zee,670,0.36532897274847353,0.9866431832953275 pan,hat,671,0.6547944885588621,0.07142328653562735 wye,wye,672,0.7648029293390511,0.6650048997400388 pan,zee,673,0.8850456267920793,0.37595832006593455 wye,wye,674,0.07426167294984953,0.8983728711808775 zee,zee,675,0.14647630359578723,0.2444767037770159 wye,hat,676,0.6451848990883488,0.5038417150477158 zee,eks,677,0.4431725573720502,0.6602447847445098 hat,hat,678,0.2580287161696614,0.7294988098275678 wye,eks,679,0.36159847148560065,0.7499182579533756 eks,eks,680,0.0338572036055631,0.9757808949108091 eks,zee,681,0.8149561431006924,0.21088097822222962 wye,zee,682,0.7810987533825186,0.9667043995307188 eks,zee,683,0.587160737176585,0.03329448136151336 hat,eks,684,0.3749971755428878,0.21431876719781595 eks,hat,685,0.6737904998208634,0.019679445031305476 hat,eks,686,0.21050937771050438,0.41045403895167065 zee,wye,687,0.8487067932198148,0.11727125464987997 wye,eks,688,0.9002872154674284,0.42471026747794716 pan,eks,689,0.10444316592264569,0.8885602119427745 zee,wye,690,0.14854213084769508,0.9731706277100254 eks,zee,691,0.7240287030381926,0.79896437710086 hat,hat,692,0.14117333894379847,0.3225535116195155 zee,eks,693,0.27068880582424437,0.044369525310762326 eks,wye,694,0.1076349089443529,0.6101508286985079 zee,zee,695,0.9140507860836669,0.19365517291844658 hat,zee,696,0.16963322576469086,0.09487337662478568 hat,eks,697,0.8909103010365073,0.5323201554130181 hat,hat,698,0.07422312178663493,0.8831561730391124 pan,hat,699,0.44595497600145795,0.6267440405997144 eks,eks,700,0.09447912510249834,0.5957817269862618 eks,pan,701,0.8004210061445566,0.03952440744830843 pan,zee,702,0.8107677028439462,0.32429410872359143 zee,hat,703,0.2248043259303365,0.33203303056970623 wye,pan,704,0.595716356245294,0.004929607103288602 pan,eks,705,0.7388154708435315,0.797179757859978 pan,wye,706,0.5008032407057831,0.9591889291114695 pan,eks,707,0.9759907833320285,0.8936617707540555 pan,zee,708,0.7148877429133659,0.0667177678154226 hat,zee,709,0.5664816823643944,0.8967488777240636 wye,zee,710,0.8443019828048438,0.7860920608434899 hat,eks,711,0.6493317768253313,0.6921590557236297 eks,hat,712,0.7026564244799071,0.2532401255958231 hat,hat,713,0.34800467364944343,0.512231318502013 pan,wye,714,0.1707903602306352,0.1624539753347971 eks,hat,715,0.3702687648873617,0.5532443902814762 pan,hat,716,0.3526679330017216,0.9879415167199294 wye,hat,717,0.9126869246167464,0.8539144029222125 wye,eks,718,0.6170824308099435,0.42167938160852547 wye,zee,719,0.8648654985592689,0.744990377385103 wye,eks,720,0.0737982261184581,0.215040061968929 zee,eks,721,0.6857948820947404,0.24824277122401872 hat,pan,722,0.9288228199909815,0.2781250242506387 eks,hat,723,0.5223004827368406,0.7436988563433049 pan,zee,724,0.161391991386723,0.4896835486539596 zee,zee,725,0.6421372014622713,0.9769320758361035 hat,hat,726,0.6769964245482417,0.6143975572853417 hat,pan,727,0.07418538306763378,0.647862004010661 zee,pan,728,0.40960942207244977,0.4243129116901595 zee,hat,729,0.8560108659093649,0.11506232971202268 wye,wye,730,0.5648923679634816,0.23257155122856343 wye,hat,731,0.9839746222616559,0.2446478089699543 eks,zee,732,0.07883081296682193,0.6660416108034422 wye,zee,733,0.842462695985326,0.966657486505284 pan,wye,734,0.01934339909570837,0.05189496476807132 eks,wye,735,0.9417156459424341,0.9870712135656121 hat,hat,736,0.2947986604568096,0.9512796485274094 wye,pan,737,0.16300656842731953,0.3545653890588314 eks,zee,738,0.8977243371620829,0.5262722450488325 hat,zee,739,0.5948040912191594,0.3056178698423182 hat,wye,740,0.6686093454184745,0.6740449093675628 zee,pan,741,0.9598570146790528,0.6398488862754813 pan,wye,742,0.8257519339015849,0.693194093940406 eks,hat,743,0.04434098258715646,0.3266898058988358 zee,wye,744,0.7524245915453669,0.5461439986683315 pan,pan,745,0.6719897687291242,0.7565622573163691 eks,pan,746,0.916062376572181,0.886967557372127 eks,pan,747,0.40506409795178244,0.6998873497812762 pan,wye,748,0.5826370817680807,0.08078351188422772 pan,eks,749,0.8465950965363382,0.416842562059375 wye,pan,750,0.6658476587001316,0.5556451189688414 eks,eks,751,0.3242951995611114,0.5680663477563322 wye,wye,752,0.13191473062692816,0.19377767709093607 zee,eks,753,0.5186702283396277,0.5344580097568402 pan,eks,754,0.023312954423954868,0.13646462067848675 eks,eks,755,0.22961935180882087,0.16011525129191817 pan,zee,756,0.09666705485436378,0.3548198552440588 wye,wye,757,0.19425165484936957,0.9581201227608445 eks,wye,758,0.5362262223046377,0.5049539834712841 wye,zee,759,0.5321536977324647,0.369621860654502 hat,zee,760,0.7941529932304345,0.2064198694392868 wye,hat,761,0.38624241523517244,0.7325501625853548 zee,pan,762,0.9385694344762825,0.49700272359344677 eks,pan,763,0.3501489521153939,0.6398058286945986 wye,pan,764,0.16567218737817557,0.7953657761380494 eks,hat,765,0.324248802737786,0.8599723260499864 eks,eks,766,0.22335745734469326,0.21867582342847736 wye,wye,767,0.8255592677399582,0.2538516298356094 eks,hat,768,0.15841238344171704,0.574922286058442 eks,eks,769,0.18506419568907773,0.4760883565274585 hat,zee,770,0.18690741307246328,0.6711988977493772 hat,eks,771,0.9178219022568258,0.43350695723226085 wye,zee,772,0.23583751371437855,0.12279242944303292 hat,eks,773,0.26528801262285184,0.4010080804811049 eks,eks,774,0.6386491500093009,0.24632366540539852 hat,eks,775,0.03827924004922145,0.9441328448191567 wye,eks,776,0.9585382111164209,0.6306113838967866 zee,wye,777,0.7623811038765134,0.6139534724314861 wye,hat,778,0.19955726522431594,0.5077217624640397 zee,zee,779,0.3411759787401816,0.2865091416991973 hat,zee,780,0.5811342153834129,0.4772695688880223 hat,pan,781,0.1192837713483601,0.40681848859583813 hat,wye,782,0.721843867108292,0.44923817786818343 wye,wye,783,0.3438923976161088,0.5649145034717639 eks,eks,784,0.6165630308304775,0.3304084333387801 zee,eks,785,0.6562657631329122,0.8258194011693597 hat,hat,786,0.3439593168095797,0.8518997303215115 eks,zee,787,0.0654097106697118,0.4660389375188869 pan,eks,788,0.2217685316094703,0.16649100910012216 eks,hat,789,0.4717662995603106,0.44972566215644705 eks,hat,790,0.47887299708709874,0.7841667814595291 wye,wye,791,0.00519908348997844,0.3991391178091711 hat,hat,792,0.5475862720333128,0.9675473146380916 zee,wye,793,0.9545515061227288,0.8875064703498067 wye,hat,794,0.16854110528640676,0.23899152324736783 eks,hat,795,0.9414011524374403,0.38624947508331575 eks,eks,796,0.44475337389030567,0.3562483351552209 hat,zee,797,0.3458790979025249,0.10530555367157357 wye,hat,798,0.894955252691444,0.9020401281837919 zee,hat,799,0.6678020932140406,0.7272829012287039 pan,wye,800,0.6728857720452479,0.9063282177143175 pan,hat,801,0.6232260305196619,0.3246940048519549 hat,wye,802,0.6939811641375604,0.9772213376028769 wye,eks,803,0.735398041020814,0.43528061054041123 pan,wye,804,0.7553025953132643,0.12826679900502957 eks,eks,805,0.7970666568024275,0.7141982352996962 hat,hat,806,0.6283301745043451,0.2958341149885232 hat,pan,807,0.6054239018991081,0.44535311447129966 zee,pan,808,0.068327326345054,0.9193569789768139 wye,wye,809,0.779445087567334,0.6995188082196249 pan,eks,810,0.6751597242266821,0.5514064392004425 pan,eks,811,0.5542215714866076,0.14391751751745208 hat,zee,812,0.5623829182379033,0.0721774446182929 eks,wye,813,0.027045543431586827,0.5270107047302233 pan,pan,814,0.7042024611472535,0.5509286378129169 pan,eks,815,0.05860005161315873,0.0005735237078376976 eks,zee,816,0.11392244176975941,0.08027592413428164 hat,hat,817,0.2182634028675824,0.031522781055713156 hat,pan,818,0.5333781740115907,0.4837112511279462 zee,hat,819,0.062483279659384605,0.8930370625962232 eks,hat,820,0.6028476657314659,0.6800202871943302 pan,hat,821,0.11959405115201827,0.9706185345930702 eks,hat,822,0.2180916247267669,0.20200687440786602 hat,zee,823,0.4553739759143408,0.04377256284181141 eks,pan,824,0.14058200329018555,0.7690462771050751 wye,pan,825,0.6611884797250076,0.9588317557532128 zee,pan,826,0.2407553754423183,0.14438176167139094 zee,pan,827,0.5280509086050722,0.35353193017246765 pan,eks,828,0.9994029107062516,0.20066601756099478 pan,pan,829,0.9031593450788309,0.3797948680956209 eks,pan,830,0.36350612065623267,0.2886476639992571 eks,zee,831,0.692611920160873,0.26262694975977385 hat,wye,832,0.7659227499835054,0.6521346139410953 pan,zee,833,0.8267760334483312,0.8318269743977437 eks,eks,834,0.7372846052959475,0.386390580949861 zee,pan,835,0.9167189417830722,0.07204465286089479 zee,wye,836,0.5756190775565698,0.7938251688467333 wye,wye,837,0.2328642613637898,0.46278413120375006 eks,eks,838,0.7797750429004653,0.29884322034130906 pan,eks,839,0.8726738283401857,0.04628087648432999 zee,hat,840,0.6677673890093077,0.6533094635586054 hat,pan,841,0.4486203012761554,0.3566552462496445 eks,hat,842,0.4549321247838193,0.07592100983285954 wye,wye,843,0.255982822267825,0.3803102296515556 eks,hat,844,0.3446014862942576,0.7572793591602713 wye,eks,845,0.6203491211980909,0.15025452711014609 eks,zee,846,0.9460265533905371,0.45198587094481946 hat,wye,847,0.49389611860028626,0.07353689220151671 zee,pan,848,0.7169514982586007,0.9408480112735236 wye,wye,849,0.6446224014740414,0.11523766674998448 pan,eks,850,0.7274412652107003,0.6621932392565703 wye,pan,851,0.3263942251497617,0.9932583238060141 wye,eks,852,0.664738707605857,0.7223078050122264 eks,hat,853,0.1880170274631281,0.10968535421904191 hat,eks,854,0.6939278762348635,0.5313359369168281 hat,hat,855,0.7112683657239158,0.6136040745504255 zee,eks,856,0.5439786015377756,0.9686655026402698 zee,zee,857,0.10264607530788517,0.3331005309508399 eks,zee,858,0.484034536497318,0.5074658760998881 wye,hat,859,0.8335422363466695,0.3120932232687599 wye,zee,860,0.5661718614546278,0.008186918681462707 hat,pan,861,0.9969936112759107,0.21269969787446608 pan,wye,862,0.30274837710060487,0.015353477159141038 wye,pan,863,0.23680176335245073,0.23457864754397195 zee,zee,864,0.809561039932752,0.6017320599557826 wye,zee,865,0.7815565737026456,0.8572095724845105 eks,hat,866,0.5917695655140688,0.560162197865116 hat,zee,867,0.722695048982041,0.8684988555802282 wye,hat,868,0.21734964563610804,0.8045525190525901 wye,hat,869,0.226340504641239,0.6618680946496492 eks,wye,870,0.03466858500680492,0.5621939039921067 pan,wye,871,0.6789169629628927,0.5193967453982994 pan,pan,872,0.7564798789126915,0.7115590422599338 wye,hat,873,0.45127322199816233,0.7742566444517696 eks,wye,874,0.5403377945244225,0.16069845073082 pan,hat,875,0.1859774664492485,0.3619489833924334 wye,wye,876,0.4835086084877356,0.4540385079562712 wye,pan,877,0.27907367543536465,0.12385159649360233 hat,zee,878,0.3102237192022368,0.9669823901049626 eks,hat,879,0.6888483812825917,0.5505783461131407 hat,pan,880,0.9443559576513696,0.776626094540373 eks,pan,881,0.6733492820398447,0.11891510514178161 pan,pan,882,0.439665640988951,0.4549660840547012 pan,hat,883,0.5540100503192463,0.8429668921287791 pan,zee,884,0.9569511624197534,0.009698935906691575 zee,wye,885,0.4317067888424335,0.7251769880284373 eks,wye,886,0.3652904236362593,0.20906833314831175 pan,pan,887,0.6949995284041934,0.8053235553778822 pan,zee,888,0.7370727975606584,0.4485080316317849 wye,wye,889,0.9080280619248189,0.9139513254924729 pan,hat,890,0.680338712677067,0.010994432325418524 hat,eks,891,0.6355325141001417,0.07695298953416263 eks,wye,892,0.1376969209844151,0.834454990298031 eks,zee,893,0.9355755568148436,0.25640673765414823 zee,hat,894,0.06918579614388565,0.8717142673159294 pan,zee,895,0.9990440068491747,0.20478744699359197 eks,pan,896,0.18020508273454894,0.18233459061350799 zee,pan,897,0.16948195877360084,0.4673040380612351 pan,zee,898,0.048671024346735314,0.4634456617937973 eks,wye,899,0.6376504261357228,0.4968859553621585 wye,zee,900,0.0634446641763643,0.47070339237478154 hat,pan,901,0.3948962420926134,0.2858499628646297 zee,hat,902,0.792376744926382,0.7540301970987514 pan,zee,903,0.5150758332324689,0.8265689553462827 zee,pan,904,0.6774926045379539,0.2790431227538289 pan,wye,905,0.46948597026992234,0.6282160374404341 wye,zee,906,0.5370940115523006,0.1284825381186716 eks,wye,907,0.5764461281567995,0.6560112583406935 zee,hat,908,0.2293422544193603,0.5310403236033165 hat,pan,909,0.2565065893296261,0.3546175861833417 hat,zee,910,0.026474784279227448,0.7004167503216063 pan,eks,911,0.06608607463859384,0.07128733055849312 wye,eks,912,0.3364968005146698,0.5787883063495668 hat,wye,913,0.5696196789270859,0.5118141918287126 eks,zee,914,0.8582285128247622,0.7604153187806654 wye,eks,915,0.5460355036287519,0.8958184949801713 hat,pan,916,0.2607796424126346,0.2105454483785194 wye,hat,917,0.3846528045634492,0.3124085567677639 hat,eks,918,0.5027707430075526,0.4544234955959021 eks,pan,919,0.7703238268018578,0.11858518036609156 wye,eks,920,0.6878423136601669,0.10216851974973384 eks,zee,921,0.012096720577898457,0.6297080697429681 pan,eks,922,0.2886175127593028,0.828634782804935 wye,pan,923,0.9626100389715443,0.3905150319464591 hat,pan,924,0.3002347573504318,0.7414891858002532 pan,zee,925,0.3447367209775769,0.8487811195467444 zee,hat,926,0.3969942807955067,0.7524046203617899 zee,zee,927,0.7610101430574051,0.4964453780226331 hat,pan,928,0.9769401114714371,0.19866082639978944 hat,zee,929,0.9119484815981432,0.9002090722192556 eks,hat,930,0.28511500317711636,0.728558620027423 pan,hat,931,0.15134527475607873,0.348369087467138 zee,eks,932,0.7361189289061444,0.3847525716179372 wye,zee,933,0.3661453331509762,0.004152078250187152 wye,wye,934,0.447099608509545,0.17594771830007339 wye,zee,935,0.3196703223884384,0.8888974787225958 zee,zee,936,0.562838339421027,0.007778020871679225 zee,eks,937,0.02003336919176857,0.26669570512199325 eks,wye,938,0.3043257328168447,0.2906418445735329 zee,zee,939,0.8978345983120852,0.030447079101845298 eks,zee,940,0.5585422926486657,0.4978694410328127 hat,wye,941,0.5621962178745717,0.26772849156914025 hat,zee,942,0.6242711478551904,0.09401579423266704 eks,eks,943,0.27194272184638746,0.9612750351440212 hat,wye,944,0.8822781716699086,0.6067074807238132 zee,wye,945,0.7825493610673169,0.32373164668188725 wye,zee,946,0.1013010312091508,0.8534111346417461 zee,wye,947,0.8584260523164629,0.23498149964077852 zee,pan,948,0.7984764587459684,0.6810243958256237 wye,hat,949,0.23478741222352084,0.37065868020096504 hat,wye,950,0.09950476962568644,0.08527686061721151 wye,zee,951,0.032452509100876825,0.13213830932576387 pan,pan,952,0.20155399565096999,0.26323541426295427 zee,hat,953,0.7258512915506337,0.7130469035339413 wye,zee,954,0.5189900736412828,0.9806684784703058 pan,zee,955,0.6876410065228761,0.049081361078488706 eks,wye,956,0.8483404387366377,0.6963230727503091 hat,eks,957,0.7658922923332185,0.42890062704958776 hat,wye,958,0.5889300471089299,0.09950882081879164 zee,hat,959,0.5401768517178055,0.576926299555725 zee,pan,960,0.14284356858511216,0.7464892897966853 zee,hat,961,0.6778089684859776,0.0814354668691658 eks,wye,962,0.49553623626743193,0.9650390956306768 pan,eks,963,0.022898529014032887,0.8442755412229669 eks,pan,964,0.11974210479568592,0.1727873170586557 pan,eks,965,0.43364055944870217,0.9883467323590831 hat,eks,966,0.3126841836488823,0.8616419739774406 wye,zee,967,0.8957509371936184,0.6646859799560008 wye,pan,968,0.6531533778557712,0.8078705982263845 pan,pan,969,0.9309046826091119,0.16276567995818791 wye,eks,970,0.0003669282805145446,0.7009817497170139 pan,pan,971,0.48986271798634495,0.9495185819962723 zee,eks,972,0.25911127762915553,0.6423261731196327 pan,wye,973,0.31594050674870533,0.3202147086921625 wye,pan,974,0.10722011957438404,0.8335217073851289 wye,eks,975,0.22837011741983626,0.8508657508706551 hat,pan,976,0.2213905763595585,0.9144918892479273 wye,hat,977,0.8403881011140902,0.15373049137990247 wye,pan,978,0.2223195417593009,0.9927065687777529 pan,eks,979,0.3047140631616194,0.012239402814423261 pan,hat,980,0.08006366208466742,0.46683918475842656 zee,pan,981,0.1460023204833616,0.6268639860761865 zee,wye,982,0.37341981725134477,0.043362859112128116 pan,eks,983,0.23455765897855474,0.5826786823171225 eks,zee,984,0.1229552360203735,0.4375490388704373 eks,hat,985,0.011903992841803879,0.20158842970916258 zee,pan,986,0.36309769750156073,0.41372304201591836 zee,pan,987,0.2675153812056569,0.31944778253720596 zee,eks,988,0.4159116125988659,0.0527646250644187 zee,wye,989,0.8290703900542629,0.0029342637852388664 hat,hat,990,0.6968268719895765,0.7388049214848422 zee,eks,991,0.04205521417416125,0.7400694180318313 wye,hat,992,0.1082025069192426,0.382293188133744 pan,hat,993,0.9655911362500376,0.6528068171940502 pan,hat,994,0.06296083376713069,0.924782731671716 zee,hat,995,0.19931174025957066,0.6628915066032653 pan,pan,996,0.3896870360326876,0.7398938519226621 wye,pan,997,0.6473214345392985,0.1580211199769581 wye,wye,998,0.7054609891598416,0.11530820363956795 eks,wye,999,0.7530797661303167,0.7943533279150342 hat,hat,1000,0.27862167380000924,0.8957145512576364 pan,eks,1001,0.5972691205647312,0.4313550003841107 zee,wye,1002,0.27589217856931847,0.4784417775011829 pan,wye,1003,0.6022804421463093,0.15258107959053602 wye,hat,1004,0.7556173435575428,0.5360056181198413 wye,zee,1005,0.35533936034338987,0.5883076566864401 pan,hat,1006,0.4446033039150368,0.9979731391657491 zee,wye,1007,0.6726350502133611,0.9779321628810685 hat,eks,1008,0.19927285497348735,0.22487729305731685 eks,zee,1009,0.6292400672017409,0.344666919378786 hat,eks,1010,0.32802933242359655,0.2955845001645365 pan,eks,1011,0.7217042904394803,0.2232569692246722 pan,zee,1012,0.5003888723420944,0.03004905415183634 hat,zee,1013,0.6449280930394627,0.012641120692678642 pan,zee,1014,0.2224977060602883,0.1335049252959022 eks,eks,1015,0.5441091824904251,0.27206919115344796 wye,zee,1016,0.17366739952321908,0.937706710544049 pan,zee,1017,0.787790582328257,0.844311491671081 pan,eks,1018,0.015795494747047223,0.8254990704093889 pan,zee,1019,0.23762521364858846,0.8673593962442501 eks,pan,1020,0.902360533880021,0.7028811168584178 zee,wye,1021,0.008857541583488837,0.21509348675167894 eks,wye,1022,0.33588773148782947,0.40718964301240856 zee,eks,1023,0.21227584421525614,0.7891727565371357 zee,eks,1024,0.38754385741774056,0.42814516635986044 pan,eks,1025,0.19841453521545604,0.08811826842406556 eks,zee,1026,0.2741615196854501,0.5767980610310797 eks,zee,1027,0.7911574513154387,0.7553091091067402 eks,wye,1028,0.31990228399247944,0.9227512605727171 wye,eks,1029,0.2129672492537904,0.455409159116715 pan,pan,1030,0.5408386772361381,0.7160509492545313 hat,zee,1031,0.48469619278770393,0.6097136149080437 zee,pan,1032,0.8214019848831586,0.6593835512799063 eks,wye,1033,0.9319773759232135,0.8773892832568154 eks,hat,1034,0.21608546142882312,0.30554114451483116 hat,hat,1035,0.09020906616714786,0.10290991425754714 wye,zee,1036,0.3531778666649932,0.2809207717510849 hat,eks,1037,0.0945175541677894,0.3745112769716772 zee,pan,1038,0.5692057342171193,0.9606327704233413 zee,hat,1039,0.3081554551270379,0.4385650169051888 wye,hat,1040,0.5455490636956486,0.2139309079198488 pan,wye,1041,0.1485239533830236,0.1776854474981574 pan,pan,1042,0.15706603838853506,0.7751554210841053 pan,eks,1043,0.9037009385297075,0.6127765961736429 hat,eks,1044,0.1317980665424846,0.5354311378322799 pan,zee,1045,0.18824317733657336,0.5079230664372042 pan,wye,1046,0.6487563188200542,0.017743851244559794 wye,pan,1047,0.9924515398966479,0.8295830268367035 hat,hat,1048,0.866877027845022,0.3657752233481316 eks,eks,1049,0.5783739636973764,0.4270609054347013 zee,zee,1050,0.7931385685414742,0.7121487657433946 pan,eks,1051,0.07958271178407761,0.7510868078663989 hat,hat,1052,0.967055767380358,0.2710585230744418 wye,pan,1053,0.7709670432157318,0.18501678400499033 wye,zee,1054,0.08626749693608815,0.25205147479956 eks,eks,1055,0.7570291652540911,0.5426597756349021 wye,eks,1056,0.17697196127444081,0.48721255903838334 wye,pan,1057,0.34801756734906164,0.5214181842054965 pan,hat,1058,0.8522482352165042,0.7495559067319948 hat,pan,1059,0.2746468542015157,0.06589726142698449 zee,eks,1060,0.18748360833449518,0.7624096925483054 hat,hat,1061,0.7349337283030247,0.8809097022915752 zee,hat,1062,0.8802861735497903,0.6464219752541935 zee,hat,1063,0.4065008342810489,0.886323765340433 eks,hat,1064,0.4424079924279726,0.9148635648447586 hat,hat,1065,0.010130482768756055,0.9048046422071615 pan,zee,1066,0.0174503828855882,0.3772767215216971 pan,hat,1067,0.5324513907264202,0.7766825690772374 pan,zee,1068,0.9292735422372311,0.7845794722193757 wye,hat,1069,0.10796407185484191,0.026926570164813146 pan,eks,1070,0.48689932881768716,0.8580079152498714 eks,hat,1071,0.15020029058361362,0.45627529973691716 hat,pan,1072,0.44604654951505474,0.8038155982865464 eks,zee,1073,0.09738725055678144,0.08505208961455624 hat,hat,1074,0.3236826909608632,0.49627141594209967 eks,zee,1075,0.7153896932288586,0.9778494726905622 zee,hat,1076,0.7057228729875391,0.3212868771712061 pan,zee,1077,0.5856627674432751,0.9241757857209006 eks,eks,1078,0.35578945733022505,0.45528814372216575 pan,zee,1079,0.028491257749501564,0.7125221088820232 wye,wye,1080,0.016813529366139446,0.30619226711821357 pan,hat,1081,0.9328542327992406,0.9238747036441417 eks,hat,1082,0.818988631617168,0.6912196193544532 hat,wye,1083,0.8665578508008973,0.22211673759850004 hat,zee,1084,0.41406718708821955,0.02723245214010661 zee,eks,1085,0.13035161260495198,0.5640103641360239 eks,hat,1086,0.03139277667157425,0.5383540545781755 eks,zee,1087,0.041919682544647396,0.43365253130183956 pan,zee,1088,0.8344662624969731,0.05039883331049 wye,pan,1089,0.10459506042932876,0.7767794982555558 zee,hat,1090,0.05459959955270677,0.6641081427852065 eks,wye,1091,0.9741063795340834,0.5869419824678774 zee,zee,1092,0.913252015241433,0.41317703347248136 wye,pan,1093,0.060917243371145124,0.0729984416375653 hat,eks,1094,0.06571775207401842,0.6161858340132806 eks,wye,1095,0.9703612589022951,0.02299184173282698 pan,wye,1096,0.3123275732448444,0.9046978224447048 pan,eks,1097,0.36433855475903487,0.28640575782602984 pan,zee,1098,0.9388863703832938,0.9481045761632589 wye,eks,1099,0.1801852674259774,0.8001313396984383 pan,wye,1100,0.9449163664787465,0.21041416481960495 zee,pan,1101,0.9851142251459588,0.833308434948654 hat,zee,1102,0.6058843659959886,0.914771957616851 hat,hat,1103,0.09907505801136207,0.9886361549898667 wye,zee,1104,0.6026401587598063,0.9232948941188992 hat,zee,1105,0.7049227417732974,0.0462839144297168 pan,eks,1106,0.5485375288525932,0.41787054723627115 wye,zee,1107,0.2172040459296869,0.04347447260250059 zee,wye,1108,0.17849311848568739,0.15336908789618675 pan,zee,1109,0.9209948537835644,0.9617211607571948 zee,zee,1110,0.5617606152508641,0.12922472841055488 hat,zee,1111,0.5096259842809261,0.9716058274135191 eks,pan,1112,0.4601480008274824,0.6621941381779669 wye,hat,1113,0.04619109705664248,0.07731183378456241 eks,zee,1114,0.6225031791605239,0.724470067269006 hat,zee,1115,0.4384136215828739,0.8991776975784843 pan,pan,1116,0.3318167439135842,0.07638995864053721 hat,pan,1117,0.08389296153750614,0.616903034571171 eks,eks,1118,0.42321284015690686,0.18075244176916405 hat,zee,1119,0.9947060390455312,0.9155106367235321 hat,pan,1120,0.322426480645594,0.8107856936608234 eks,eks,1121,0.011345137277951278,0.30150866101509777 hat,hat,1122,0.2386256214986372,0.5024389651151668 hat,wye,1123,0.7175177574035164,0.49060053901509204 pan,eks,1124,0.08353595333636898,0.5861415970535602 eks,hat,1125,0.30127828892745145,0.6471608610675756 wye,wye,1126,0.8391082612863554,0.8564234939160587 hat,pan,1127,0.832626957843269,0.6240442951248336 hat,hat,1128,0.8806935192862494,0.7838162296913623 pan,zee,1129,0.3315347253194,0.008089402263374845 zee,wye,1130,0.01851853736108866,0.17184568517491516 wye,zee,1131,0.8126126224772602,0.9995009548069009 hat,zee,1132,0.4073244488743951,0.5406132572557787 zee,zee,1133,0.8240890643910131,0.13624992612749198 wye,eks,1134,0.7808769789539313,0.8783411417393904 zee,eks,1135,0.6515492928760739,0.03540134679084295 hat,pan,1136,0.5009194590736257,0.37469060025761247 zee,hat,1137,0.925731020213508,0.12357673418366155 pan,zee,1138,0.7159872385785992,0.04528852253706328 hat,zee,1139,0.6331768836278109,0.1369717170583027 zee,eks,1140,0.048571653758132216,0.3492112898081101 hat,hat,1141,0.612461401988446,0.14847850688380781 eks,eks,1142,0.027183982557207553,0.588477870478424 zee,pan,1143,0.9927901703526475,0.12700602926571025 hat,zee,1144,0.007391695879485738,0.9756749119225023 hat,eks,1145,0.8273428505388051,0.9831021972218925 pan,hat,1146,0.8460372878397171,0.3239568575223264 wye,zee,1147,0.011254496718364537,0.2947614358547457 wye,eks,1148,0.510274781147883,0.6342886591607202 eks,hat,1149,0.08103428766976473,0.530747032666464 hat,hat,1150,0.4058826696970118,0.4216435681134768 pan,pan,1151,0.6861388937798399,0.33890003075281316 eks,zee,1152,0.5857634146388722,0.042952777230192085 pan,hat,1153,0.6757867606577086,0.7740341802587707 hat,eks,1154,0.48734948309736814,0.03392833831821873 hat,pan,1155,0.15696039673828777,0.29845938463448995 eks,eks,1156,0.7220504220155584,0.3069530341008503 zee,hat,1157,0.8122264673038031,0.8517729655458225 zee,zee,1158,0.8088760687957014,0.21112197613175976 zee,wye,1159,0.46769194201594133,0.4329746427091592 wye,hat,1160,0.7263377504273455,0.17415133160693874 wye,eks,1161,0.6442949189199954,0.1494819214827784 eks,wye,1162,0.9629901424599551,0.7303763539966592 hat,pan,1163,0.1540633521892789,0.30579559836649084 pan,pan,1164,0.0565757314681804,0.8372880556318811 hat,pan,1165,0.6211654981395032,0.8227816494549414 eks,eks,1166,0.43746753562542595,0.4554692262381064 zee,hat,1167,0.3367047133504143,0.8141824349803665 eks,pan,1168,0.8136679912512943,0.597540308230969 zee,wye,1169,0.5770899885002667,0.28863298687378613 eks,hat,1170,0.38648551728927116,0.444170386297162 wye,zee,1171,0.6468403370363878,0.9265036001050484 wye,hat,1172,0.24417531360698597,0.4885016640644757 eks,pan,1173,0.14021562324171288,0.8343881176338883 hat,wye,1174,0.8826971260268877,0.5204304309651815 wye,hat,1175,0.07253012277298443,0.23424850735777059 hat,eks,1176,0.006644223863763399,0.0816917135559706 wye,eks,1177,0.9032818287668923,0.3192995339899316 eks,zee,1178,0.6806297878854731,0.5818723196551134 pan,pan,1179,0.8705072785671686,0.6988727124241529 zee,eks,1180,0.9994378171787394,0.13347602700579186 hat,hat,1181,0.9918698253530575,0.1452498294514708 hat,eks,1182,0.7176916554404814,0.11479832193407902 wye,eks,1183,0.6661595747080763,0.38719941985040585 zee,zee,1184,0.12344811253503452,0.7278140023096202 hat,eks,1185,0.8923180879132536,0.05433793092315187 hat,pan,1186,0.18605162703349232,0.08984973385947226 pan,wye,1187,0.002298959425301561,0.8456888165062316 hat,hat,1188,0.12094979737180311,0.6069817211275821 pan,hat,1189,0.36260151632409887,0.5849544530123062 hat,wye,1190,0.6833808585344113,0.09408333641094069 hat,pan,1191,0.6073887594007545,0.582980066141568 zee,zee,1192,0.20794006469650417,0.8379074082927926 pan,wye,1193,0.022245524512133796,0.6352302232122171 eks,hat,1194,0.9006853879899086,0.05583549785972808 pan,pan,1195,0.16832227022787238,0.13828673042487394 hat,eks,1196,0.3928690398294634,0.6037073958974022 pan,hat,1197,0.3580350006103836,0.814312590748317 zee,zee,1198,0.7027548035545187,0.5696437156771905 hat,wye,1199,0.5089871727765719,0.22764827796274545 zee,wye,1200,0.6577969186215513,0.13335841083829625 zee,hat,1201,0.8874397146268569,0.3285624695821543 eks,eks,1202,0.8354259959835246,0.05671746191419269 hat,eks,1203,0.13371374012873294,0.255811175503322 zee,zee,1204,0.7698393537978214,0.15023057683572805 pan,eks,1205,0.7829882013835832,0.8062997039846184 wye,hat,1206,0.8250443883729883,0.40002163110909417 wye,eks,1207,0.2912587148785738,0.8031779767496858 zee,hat,1208,0.6858599554715019,0.18452417758198125 wye,wye,1209,0.7107203114111836,0.00017993344165900815 pan,zee,1210,0.3363044695544226,0.6283867129304496 hat,eks,1211,0.8188718956849538,0.8967648753839026 pan,wye,1212,0.664842209320305,0.5067617041720663 hat,eks,1213,0.99973332327313,0.34548764769191365 pan,pan,1214,0.7158445324765502,0.7170272500849562 zee,eks,1215,0.17023806172245382,0.11112961156527701 pan,eks,1216,0.032830805279464026,0.858300617398515 pan,pan,1217,0.058339498506774445,0.3299590477816785 pan,wye,1218,0.2981850301136384,0.275715699110609 wye,hat,1219,0.9269469541827934,0.433885024903532 wye,pan,1220,0.5590392185080515,0.3532795367709467 zee,pan,1221,0.1120496540408027,0.052474214794520524 wye,wye,1222,0.32857456764622284,0.9839624955444709 eks,hat,1223,0.07964593404126263,0.5223768981550353 zee,hat,1224,0.6087209788431407,0.009657060823042296 pan,hat,1225,0.2062334403825843,0.9229745059225746 wye,zee,1226,0.17708548635341936,0.9990248955111103 zee,wye,1227,0.35351274012969736,0.4041475707851616 eks,eks,1228,0.5030002251433316,0.8127865742005792 hat,eks,1229,0.6208757978424075,0.5685317001125881 hat,wye,1230,0.4033883868841214,0.21662083975598512 eks,hat,1231,0.8372211910010664,0.05104830485393308 zee,zee,1232,0.6255227701030528,0.7068037158292888 zee,hat,1233,0.16099869622122553,0.03145480439751913 wye,eks,1234,0.29236003818241163,0.0038729096629406268 zee,eks,1235,0.4597704185565915,0.9921180702735245 eks,wye,1236,0.25200335314789113,0.18668063103395705 pan,hat,1237,0.7976885073930762,0.5851390530977472 eks,zee,1238,0.09123558516113806,0.7444584317010036 eks,wye,1239,0.28018636325329804,0.9609284482216048 eks,zee,1240,0.31745479549254885,0.19433880518244362 wye,wye,1241,0.02167407035426938,0.8517578603799361 zee,zee,1242,0.6106259696599957,0.022315745293787215 pan,zee,1243,0.6589609168139929,0.6454105665267801 wye,eks,1244,0.2787899466812519,0.06055887677281169 zee,pan,1245,0.2470406639222188,0.5853815139856057 hat,pan,1246,0.45904971489441826,0.5163058230383074 eks,wye,1247,0.9834930996078813,0.4959362914616142 pan,hat,1248,0.1525604218696871,0.07482470280574516 hat,hat,1249,0.7002367713266386,0.6487527612372115 zee,hat,1250,0.9701426957388892,0.7845500860373503 pan,hat,1251,0.5290805139059341,0.7100071242645416 hat,hat,1252,0.09930445608258032,0.5660530272938328 zee,eks,1253,0.5423655422122198,0.859227213109029 zee,pan,1254,0.21221332375586466,0.26582553763793293 zee,eks,1255,0.5793553556065434,0.563660887083747 pan,pan,1256,0.10769070223113286,0.7797941844365985 wye,wye,1257,0.23334157949355694,0.48533573180276546 pan,wye,1258,0.2995600681122321,0.7432427054977825 zee,wye,1259,0.18343409452228054,0.018648673229345936 wye,eks,1260,0.7451552312920868,0.7083570752878636 zee,zee,1261,0.5511811148393049,0.1182107616782363 eks,pan,1262,0.6119687598964016,0.8309635765979287 hat,zee,1263,0.990205350112817,0.9130137981522629 wye,eks,1264,0.2728580162726342,0.34083170474058677 wye,hat,1265,0.03629556392023969,0.14427174473473803 zee,eks,1266,0.042350338334240956,0.1289699792266037 eks,wye,1267,0.6455892671517784,0.2737715815072643 pan,eks,1268,0.49258185461644277,0.6767874718351204 hat,zee,1269,0.23099691497930386,0.010607810026782571 wye,wye,1270,0.7995556109605628,0.16274406637511674 hat,zee,1271,0.6536639656492141,0.4372415589868961 hat,eks,1272,0.9299854741714102,0.1361271855956554 wye,pan,1273,0.3500305547201491,0.19911752000719163 zee,pan,1274,0.8415267085560889,0.04046540168663748 wye,zee,1275,0.45988125966489024,0.44169640932292065 zee,eks,1276,0.5025321996588512,0.23509973545961738 zee,hat,1277,0.4881304294165376,0.5108673128747018 hat,zee,1278,0.34542108789754955,0.6393029254293789 hat,hat,1279,0.652274017608231,0.2139035554469655 hat,eks,1280,0.46886095371359493,0.40718264857353603 wye,eks,1281,0.23006798520906935,0.08383446031686925 wye,zee,1282,0.19157221596770568,0.8125166888087554 hat,eks,1283,0.5054724357500647,0.7470906139600201 hat,zee,1284,0.1351519159722092,0.4498407585837816 eks,wye,1285,0.9928332865840428,0.6970272102748626 zee,pan,1286,0.5903100219747524,0.3978181484200255 zee,zee,1287,0.9279289993969526,0.2801555418399182 zee,eks,1288,0.9628830236233576,0.9651783931494015 hat,eks,1289,0.18315393370531752,0.1945534839637214 zee,hat,1290,0.24224308391281513,0.5569008521094203 eks,zee,1291,0.9018025573968887,0.8449305240236747 eks,eks,1292,0.7608771883116217,0.7517241556722504 wye,hat,1293,0.15064377804093187,0.4793850890733947 eks,eks,1294,0.9835365178053855,0.4991321788048013 eks,wye,1295,0.6604229543170217,0.28382403297933256 pan,zee,1296,0.4653477162195633,0.8951405958621811 zee,zee,1297,0.27094318332243583,0.7304405621024768 zee,wye,1298,0.779174519106144,0.8363414405399494 wye,pan,1299,0.412255986899035,0.6866252838817691 zee,zee,1300,0.005776325077187949,0.8475053706800095 zee,hat,1301,0.7301684966378752,0.2613687718642025 wye,wye,1302,0.18017602702804525,0.2080647082488024 eks,eks,1303,0.2453496160424028,0.8111166316808313 eks,pan,1304,0.8469416170979848,0.9095929671389578 hat,wye,1305,0.1011787110939425,0.17876379874526727 hat,pan,1306,0.354306631649279,0.14650574878242473 pan,wye,1307,0.7179146053664565,0.0912103605838348 eks,eks,1308,0.38852974503903526,0.9366885248501026 hat,wye,1309,0.44974216883963103,0.90399629076228 wye,hat,1310,0.5674008146861433,0.24793347465919724 pan,eks,1311,0.4468521405894835,0.8073232684030767 eks,wye,1312,0.7048361671767605,0.2809802874043469 hat,zee,1313,0.6080368706120283,0.7923296244615721 pan,hat,1314,0.978539901340635,0.4361858063106284 zee,wye,1315,0.49174797358568,0.21477329503908604 hat,zee,1316,0.8447890636321257,0.5448553401794702 zee,pan,1317,0.234827977442866,0.36535789013854214 pan,wye,1318,0.28563288006029197,0.8722097325921051 pan,eks,1319,0.1574949973988704,0.737864320805229 hat,eks,1320,0.49021876898019556,0.9850723155763529 hat,hat,1321,0.10849276460754553,0.7096856014411096 eks,pan,1322,0.7704102390506976,0.2939166316548699 hat,pan,1323,0.785186354961605,0.5187554224402933 hat,wye,1324,0.4653747699218791,0.07316638818680055 zee,pan,1325,0.0726981243268019,0.9334085397103126 wye,eks,1326,0.5019035191475638,0.9808444985066099 zee,zee,1327,0.7577704935146902,0.07319296743342829 eks,wye,1328,0.027884294519191055,0.9742594194746489 hat,wye,1329,0.30934341709858726,0.7358665625064501 zee,wye,1330,0.20196851520666603,0.4686296388879383 wye,hat,1331,0.9886209096293992,0.35033943519876 pan,eks,1332,0.9437028531431318,0.8092545870987017 zee,pan,1333,0.025047095442164324,0.6492043063154611 pan,hat,1334,0.8484332941587861,0.24802424949042978 zee,zee,1335,0.5987101585948386,0.7670719549466084 wye,wye,1336,0.5875375382759155,0.12052683112565199 eks,eks,1337,0.5316127857819793,0.19131458191720963 pan,pan,1338,0.08200277948024282,0.6794187346086508 eks,wye,1339,0.5575467999942988,0.7816590387896203 eks,zee,1340,0.1329029001223042,0.7468954697559254 pan,zee,1341,0.8491462615453724,0.7667214357631618 zee,wye,1342,0.016857231484302737,0.7189825771028026 hat,zee,1343,0.0204145133471626,0.9850483398706436 pan,eks,1344,0.14343578380352173,0.3534760283313706 zee,zee,1345,0.3068266605225908,0.1872593613407797 eks,hat,1346,0.75151508070612,0.2636098408590172 eks,pan,1347,0.6927435409900552,0.8895994295177906 eks,pan,1348,0.6801900016838289,0.81285575413888 wye,pan,1349,0.5495196174214054,0.024059334079716832 wye,hat,1350,0.7464955639967092,0.635601451124977 wye,hat,1351,0.1945383266452364,0.6098906438896057 hat,zee,1352,0.2313757351431155,0.9047115591444801 zee,zee,1353,0.09798837394769866,0.4857389187941127 pan,wye,1354,0.020855652150608917,0.7979437738522005 pan,zee,1355,0.4204132169844832,0.016976719720622646 pan,eks,1356,0.3722527646196434,0.9516382491937279 hat,wye,1357,0.6527272744396904,0.5760550769108022 wye,zee,1358,0.40135887170615936,0.49587544313347875 eks,zee,1359,0.5832103840317804,0.4551385962898433 wye,pan,1360,0.13086231928141434,0.010866288916755895 eks,pan,1361,0.9224505345587571,0.09488253298885452 pan,pan,1362,0.21757550606480047,0.3250911878972238 zee,wye,1363,0.12002019129987074,0.330458068115164 hat,zee,1364,0.11093600453342645,0.46812386024583597 pan,wye,1365,0.2446315231324211,0.734485128500915 pan,eks,1366,0.44912372133198186,0.13603083622218803 hat,wye,1367,0.4410716319202098,0.5052447169227966 pan,hat,1368,0.5290826491768821,0.7868317670838846 hat,hat,1369,0.9003291714409005,0.6548894347969356 pan,zee,1370,0.20647577118202198,0.6570041239170981 hat,zee,1371,0.46970274230450093,0.9041951983476588 eks,pan,1372,0.6125178186376162,0.40366807591765197 eks,zee,1373,0.7520637884030741,0.7184683086802719 pan,pan,1374,0.9344059163223443,0.3777271392017554 wye,wye,1375,0.12707467974137798,0.951904259345876 hat,zee,1376,0.3256794711244385,0.38645249736136067 eks,hat,1377,0.179526538530434,0.20081807319252887 wye,zee,1378,0.2516305024121336,0.6994126099643698 pan,zee,1379,0.6583708842508542,0.12745947685299774 zee,hat,1380,0.85880207513692,0.5362089929386346 eks,eks,1381,0.7480180475780296,0.9104247466520813 pan,pan,1382,0.5734287289517749,0.8325676507978588 wye,pan,1383,0.7445746522867436,0.977610514961822 hat,pan,1384,0.18929691453341568,0.09316356559826999 hat,eks,1385,0.8173647642606612,0.685818179101868 hat,wye,1386,0.7472200309764511,0.040129476799068864 eks,hat,1387,0.6336667717285401,0.7885877398020724 eks,eks,1388,0.6391264035893477,0.885429385188037 zee,hat,1389,0.2737321526786327,0.40630528382661724 wye,eks,1390,0.8747667631201688,0.44871788319272277 eks,wye,1391,0.4921330479506649,0.23072265405056214 hat,wye,1392,0.03644384893663821,0.8601480046083115 zee,zee,1393,0.568247504526133,0.7756896840334044 eks,wye,1394,0.2879212011081145,0.2954751331645483 pan,zee,1395,0.6235312578229149,0.9190115143142508 eks,hat,1396,0.3925348585643007,0.6541017210621741 wye,wye,1397,0.1908719616976211,0.49066946794315214 pan,wye,1398,0.44636597753534346,0.1332459124221107 hat,wye,1399,0.15627409090669087,0.6666239928392401 pan,pan,1400,0.7498043663610715,0.9134287398239703 pan,zee,1401,0.1954474110318004,0.7423530907643979 zee,zee,1402,0.014212868410986568,0.725003340165483 hat,eks,1403,0.7141565502820018,0.8983828801012884 eks,wye,1404,0.014080795466545282,0.18026639861936977 zee,pan,1405,0.6715143596794965,0.921403075922691 zee,zee,1406,0.542929251925297,0.5096745932177545 hat,hat,1407,0.925464277899458,0.8114581401124622 hat,eks,1408,0.8155145601390111,0.4662651057032756 hat,pan,1409,0.7360283636432529,0.530485536184739 wye,eks,1410,0.18097124504277107,0.7796289744650133 zee,zee,1411,0.036610885557006756,0.9383609949487812 zee,zee,1412,0.3608642872844662,0.47981840619533633 zee,eks,1413,0.5222789053544413,0.2735382327354091 pan,pan,1414,0.41821681358517837,0.09261463379853807 eks,pan,1415,0.36407936516918227,0.412995532484439 zee,eks,1416,0.8037535280997706,0.9967016304554022 zee,wye,1417,0.03656836512418926,0.24047847966373825 hat,zee,1418,0.9966705327199551,0.24331478490278557 eks,zee,1419,0.0019272339003844063,0.4494856127708353 wye,zee,1420,0.26078653509711935,0.8205856479809418 eks,zee,1421,0.3781190702325734,0.7756276321642843 eks,eks,1422,0.8685238966563206,0.4749950592532425 hat,wye,1423,0.015363751269120707,0.7156073118022606 eks,hat,1424,0.816131333846752,0.6719670303804344 pan,hat,1425,0.7608261327843064,0.8033020578141182 wye,pan,1426,0.15941112007072045,0.5893140312689553 hat,wye,1427,0.37742125258201054,0.21248345631269194 pan,eks,1428,0.2179834817521752,0.6045604185833173 wye,hat,1429,0.6945031453929469,0.4781622710344138 hat,hat,1430,0.2249233470581683,0.2783168994644075 hat,pan,1431,0.4641755096893504,0.9173237513729213 pan,zee,1432,0.7027031224037956,0.3317909620850288 zee,hat,1433,0.7968305326329156,0.02115891484339094 eks,hat,1434,0.824832015791001,0.15206099206432044 pan,wye,1435,0.9895511842399779,0.24672707930718718 zee,wye,1436,0.03443424698915787,0.7036923651780208 eks,eks,1437,0.7077146987434991,0.4772318639588453 wye,zee,1438,0.280848551545003,0.581684502725692 wye,pan,1439,0.29634793935457593,0.15883447307684273 hat,wye,1440,0.9552968869720926,0.7549130979076563 eks,wye,1441,0.782665993384691,0.6769028671991114 wye,wye,1442,0.1111822347810345,0.4098271097617635 wye,pan,1443,0.9004115661167051,0.8953351280072975 eks,eks,1444,0.7825483490155876,0.1911154945653185 wye,hat,1445,0.5126253689092004,0.9851511494903027 zee,hat,1446,0.5683263846018851,0.36460301344654333 hat,wye,1447,0.0058754901082536115,0.774777974548495 eks,hat,1448,0.3708973278245986,0.8180561446210824 pan,zee,1449,0.7342563560822476,0.5866440660526566 wye,zee,1450,0.057991219063554644,0.5720271334501862 zee,pan,1451,0.7266623210900269,0.5529202681153802 pan,zee,1452,0.6045149915326044,0.43879278090859253 wye,pan,1453,0.7396355861845729,0.07902637119446942 hat,pan,1454,0.6796123362492761,0.07338367835669557 wye,hat,1455,0.6393700516557285,0.3786022905745211 pan,zee,1456,0.6285804221646021,0.9875061625049019 wye,wye,1457,0.020604286592247223,0.9051047892954668 wye,eks,1458,0.9288057779036796,0.08184955257646931 eks,hat,1459,0.37211255193051374,0.7275732107413054 hat,eks,1460,0.8976672611360175,0.11158201921723399 pan,pan,1461,0.8953302483551178,0.3176124805910262 zee,eks,1462,0.11393628149045654,0.14776897927457688 zee,wye,1463,0.9485009664381004,0.6876104431895068 pan,eks,1464,0.5034433003230543,0.9194125130762513 pan,zee,1465,0.18563268428375257,0.09241285966004353 zee,eks,1466,0.9809617365136725,0.41584412119368963 eks,eks,1467,0.5966766034558736,0.5918168248126415 zee,wye,1468,0.8524700641554818,0.9423215024482277 hat,hat,1469,0.30981599429404116,0.8121609570712267 eks,wye,1470,0.3172972103854893,0.5803204798913618 hat,eks,1471,0.33123267379248844,0.816316950700786 pan,pan,1472,0.13616411059500877,0.29064871767206657 eks,pan,1473,0.2072400514044095,0.6358868351183312 eks,wye,1474,0.4211179162576446,0.21058536437655107 pan,eks,1475,0.4704809160051703,0.8307787116985389 zee,pan,1476,0.13639522899731849,0.23338840020951146 pan,zee,1477,0.2723828998857428,0.9470378753636345 wye,hat,1478,0.9181407667919723,0.542065887413139 eks,pan,1479,0.36997774655144844,0.9163407928935801 hat,eks,1480,0.4110600513034226,0.762934868654504 eks,hat,1481,0.07888272339471736,0.9970129572140034 pan,wye,1482,0.18636069480197193,0.9912578166928323 hat,eks,1483,0.14507297992678936,0.005565478369193744 wye,eks,1484,0.12541139811813662,0.7168687280478707 pan,pan,1485,0.39466783430726504,0.982498465405116 wye,pan,1486,0.42338989462787613,0.21044104481161763 hat,pan,1487,0.15371916098016003,0.6216331795342438 wye,hat,1488,0.24032388275558492,0.8561385404203309 pan,zee,1489,0.9254041583361616,0.8626755735608904 wye,wye,1490,0.6717355270144156,0.12382812446245695 hat,zee,1491,0.8374077645159174,0.2868130167653046 zee,hat,1492,0.31566626553195365,0.18969237480034762 pan,hat,1493,0.7443466050859169,0.5883736148067066 pan,zee,1494,0.489472189755636,0.2436710488233178 pan,hat,1495,0.31071524278241913,0.3032733210952677 wye,zee,1496,0.6743178734293219,0.018796476267587625 eks,zee,1497,0.13194664583383386,0.13915515391288613 wye,pan,1498,0.40290420886277534,0.45645851051725006 zee,pan,1499,0.7372530102597384,0.28172203934687556 zee,wye,1500,0.8051155053673082,0.628483371578552 hat,pan,1501,0.8675575754177055,0.5525846951861648 pan,zee,1502,0.8765052305323637,0.3446134001019854 wye,pan,1503,0.5396577054171726,0.6580836727630581 eks,wye,1504,0.3351263725136986,0.16701945030517473 zee,wye,1505,0.502492235570156,0.27616039273844517 hat,wye,1506,0.11505114122495796,0.344787577171222 wye,hat,1507,0.84331982245662,0.5563459493044525 eks,wye,1508,0.19701887217577851,0.5005677125700215 hat,eks,1509,0.6569568959744496,0.37010077528594765 wye,pan,1510,0.7194905750125422,0.37415889411709513 zee,hat,1511,0.9889028039860764,0.25079970858002243 zee,hat,1512,0.40679341185508744,0.5138676082375969 eks,hat,1513,0.10774228377040074,0.15410741897104152 eks,eks,1514,0.4621589895594861,0.9572796836020941 eks,eks,1515,0.37334324705844235,0.5146787371775148 pan,eks,1516,0.322276672926436,0.4473633411895408 eks,eks,1517,0.9166592846030838,0.9746072560912218 zee,zee,1518,0.6805021595118457,0.0973567941307375 eks,zee,1519,0.008458305921919762,0.13018614842795018 wye,pan,1520,0.6365490008145669,0.717108948902972 zee,eks,1521,0.8128775978881801,0.8496069709075166 zee,eks,1522,0.7549485896689099,0.8158698570741542 wye,wye,1523,0.005603558151104915,0.7322907338442813 eks,wye,1524,0.2173598291514076,0.8332636657137272 eks,hat,1525,0.9893289065716524,0.4815313236058858 wye,eks,1526,0.5993045597268822,0.8066671481799782 pan,hat,1527,0.28028817426492336,0.9622494242847022 zee,hat,1528,0.1807703534747297,0.5647917504765553 pan,zee,1529,0.6659896188082082,0.08073793623287506 wye,zee,1530,0.0001874794831505655,0.316767027644979 pan,zee,1531,0.8883596657541506,0.5839060771184763 eks,hat,1532,0.901005316986836,0.8140237382706386 zee,hat,1533,0.9413660325436318,0.06622163813109339 hat,eks,1534,0.03906160456377494,0.1079795640773159 pan,hat,1535,0.9317916001293041,0.3898775157821377 wye,hat,1536,0.015674157771976116,0.69356849237495 pan,pan,1537,0.24487835477169373,0.5533586202131611 pan,pan,1538,0.7004457835988849,0.9254536373090144 zee,zee,1539,0.08095025737185801,0.42649957909211544 zee,hat,1540,0.5503724625066438,0.8550739169017145 pan,wye,1541,0.45409966242017596,0.6097069133161814 wye,wye,1542,0.8929002429586355,0.32554836024869227 pan,hat,1543,0.5949367118079497,0.8559890968130015 wye,zee,1544,0.9409798267255335,0.018548163160445608 pan,eks,1545,0.7534669087213052,0.23450536691315327 pan,eks,1546,0.2200107807755327,0.4056585225829311 pan,hat,1547,0.6431981362856164,0.20869397212585072 hat,zee,1548,0.7802297233261388,0.7951833869084849 wye,eks,1549,0.0689521292391374,0.7883769928657323 wye,wye,1550,0.08609382344969774,0.39902582557569544 zee,zee,1551,0.8470067873893261,0.16901402355720452 wye,eks,1552,0.7411482258747379,0.5326218258597286 eks,wye,1553,0.9069733522359251,0.30710040658612636 zee,eks,1554,0.27856650294803487,0.3773512841270542 pan,pan,1555,0.5341857564145447,0.33670626249057545 zee,pan,1556,0.810331031324778,0.8529873485281747 pan,eks,1557,0.8809860667113874,0.6544680775174134 zee,zee,1558,0.5835792774028313,0.7084079588663174 wye,zee,1559,0.44436564072900075,0.5752434865340957 hat,zee,1560,0.05594331248193807,0.6221392828715202 pan,zee,1561,0.705850527727704,0.9592589404430422 hat,hat,1562,0.31193139935992087,0.16547553772610035 wye,pan,1563,0.619202510644987,0.43091955100529267 zee,eks,1564,0.3001925600592342,0.8376369289625749 zee,pan,1565,0.012156208135737478,0.3456043711066239 zee,wye,1566,0.8568468043920444,0.4407063036969697 zee,wye,1567,0.9107751651007914,0.4338277282451076 zee,hat,1568,0.7354460222177639,0.9579628704250065 pan,pan,1569,0.28206876750655996,0.6360639371724323 zee,eks,1570,0.8221229536271197,0.11834502495832944 pan,wye,1571,0.6137258407313767,0.9758738290281926 pan,pan,1572,0.21906870698568925,0.09712236243897499 pan,eks,1573,0.3161549490930624,0.6465981924405851 zee,hat,1574,0.392507481283901,0.8101156318295134 eks,eks,1575,0.7966043024311776,0.2593981756391409 zee,zee,1576,0.8002836252017393,0.8669638365198293 wye,hat,1577,0.0784765489757262,0.2919577999135742 wye,wye,1578,0.8007027846918099,0.16134496938130005 wye,zee,1579,0.8737327971880199,0.7021864790253274 zee,wye,1580,0.5926703370632916,0.6204701558848567 eks,zee,1581,0.3258371500409273,0.4813220118624293 wye,wye,1582,0.45519672674498746,0.6149833786028758 pan,wye,1583,0.7445036133271608,0.3559946225162539 eks,pan,1584,0.21680886346713335,0.8184061883186948 wye,wye,1585,0.031589920237896196,0.5767882347019143 pan,wye,1586,0.6737421455744065,0.8440144488545762 wye,eks,1587,0.2445786639209251,0.4387287649518946 hat,pan,1588,0.5212487539988067,0.2199522299331076 hat,zee,1589,0.6381249665841564,0.6622471527137181 zee,zee,1590,0.49197726385941254,0.2851074772091239 pan,wye,1591,0.27721780314806643,0.42224771091002244 pan,wye,1592,0.945365956010478,0.09306257348741964 wye,wye,1593,0.12456537324161354,0.709614178322504 hat,wye,1594,0.1981221992299298,0.6757943828554006 pan,pan,1595,0.5198729892603339,0.8135669258519346 eks,wye,1596,0.8578168450376926,0.8632162279300964 eks,hat,1597,0.3540018556898594,0.7991052287555176 eks,wye,1598,0.9276333581678391,0.06549902318059164 wye,zee,1599,0.4561658314107403,0.6365134752538643 pan,pan,1600,0.9022636603358615,0.2162188539106099 zee,hat,1601,0.21917535804489907,0.49754205213030844 wye,pan,1602,0.8342980736735198,0.6640472095662565 zee,wye,1603,0.8557749370240072,0.05159217506855951 eks,pan,1604,0.6578249784146099,0.08991421995527515 pan,hat,1605,0.7597487093068874,0.8484514239165745 pan,eks,1606,0.6945970040541443,0.2660407416106616 wye,hat,1607,0.9316005854017254,0.061544811707459846 pan,pan,1608,0.1076571003288127,0.7762663913386769 hat,hat,1609,0.6237995866155571,0.07849520372537022 wye,eks,1610,0.09062598480760276,0.3361854985819238 pan,pan,1611,0.007836662246717752,0.5697242748348913 eks,pan,1612,0.34051658433735943,0.28757859267810415 hat,zee,1613,0.6572715559476069,0.39371095173028303 wye,pan,1614,0.8905869590474236,0.047907908875908234 eks,wye,1615,0.05539774482352222,0.030230875132911672 hat,pan,1616,0.31269372542106866,0.5929050080918079 eks,eks,1617,0.5259315994925159,0.3120388126285063 zee,eks,1618,0.41825022828100444,0.010066997525972399 hat,pan,1619,0.9529901310801209,0.24566804188484748 eks,hat,1620,0.1861273836070172,0.2869387265308132 wye,eks,1621,0.4197448738879491,0.057355525921190864 eks,eks,1622,0.5188894343183612,0.14708356201436057 pan,hat,1623,0.6787950657750607,0.06224754425761503 eks,zee,1624,0.9376797227474318,0.45224464425072863 wye,zee,1625,0.7652458613408694,0.959285581308301 wye,hat,1626,0.3525357465470107,0.7113074877138676 eks,eks,1627,0.6651612159386544,0.09641171687890637 pan,hat,1628,0.6018119249348337,0.2647753300105741 hat,zee,1629,0.41083118021802867,0.019106148002514645 hat,wye,1630,0.4217815192818861,0.6702955396816114 wye,hat,1631,0.7242804590797115,0.9448679681099966 wye,wye,1632,0.11624568451306994,0.8905809281772715 pan,wye,1633,0.38538324135826085,0.9883618907956973 hat,pan,1634,0.5776207387085575,0.2528561924267074 wye,pan,1635,0.8895974823179132,0.9200024991202054 wye,wye,1636,0.9393356532728606,0.6298264999340702 wye,eks,1637,0.9073542081519019,0.6848431646656846 hat,wye,1638,0.41413865923623305,0.9996509466622345 hat,pan,1639,0.4583916991957001,0.6357936726110696 eks,wye,1640,0.7198824080298333,0.7037862057023272 zee,hat,1641,0.17301970050562698,0.7988297836126249 hat,zee,1642,0.08350260061450743,0.7500700943710352 pan,eks,1643,0.4445332045218795,0.5668553575161199 hat,zee,1644,0.958532242547598,0.2998060164234553 pan,pan,1645,0.8386173577817879,0.7579883039951569 zee,hat,1646,0.4223193298481345,0.8728331174039174 wye,zee,1647,0.3542223974517451,0.4616303281316404 zee,pan,1648,0.1732057619535785,0.21331253786975357 hat,wye,1649,0.7928655951515221,0.29258856907772846 zee,wye,1650,0.8310778499617896,0.8744033167682863 pan,wye,1651,0.22292538964605568,0.8685911019201707 eks,zee,1652,0.5205479143101123,0.2930255040077785 wye,wye,1653,0.6034173789737551,0.7826811363427305 hat,zee,1654,0.1272383433369223,0.7739737595522014 zee,eks,1655,0.31813723998346144,0.2538852441364856 wye,hat,1656,0.18836020025377764,0.20683034404839462 pan,hat,1657,0.6185887927483923,0.10371843594601571 wye,zee,1658,0.42244696220990907,0.25272710810302346 wye,hat,1659,0.29012052922811093,0.41591681426338967 wye,hat,1660,0.4268085841844734,0.3388035517120921 eks,hat,1661,0.13934499347961038,0.03663996929413327 pan,hat,1662,0.012677030530496736,0.510781054167575 zee,eks,1663,0.40503031227105424,0.6047965215819301 wye,pan,1664,0.6399761240712305,0.09533593475272217 wye,eks,1665,0.8939474493355103,0.9223252135239184 pan,eks,1666,0.16666185875740613,0.5177501799126248 pan,wye,1667,0.7253392873302943,0.09162119951978043 eks,eks,1668,0.513508182615633,0.1685023831639888 wye,hat,1669,0.4710950479501834,0.03651025725804602 hat,eks,1670,0.6003116669898597,0.7981557111587316 pan,pan,1671,0.8116187328458756,0.8072718271616067 pan,wye,1672,0.7034003424147444,0.6847351199705963 wye,hat,1673,0.5949143416873871,0.8102803139285161 hat,wye,1674,0.5855903947052084,0.4648428630367838 hat,pan,1675,0.3455272053677292,0.6971667108454541 wye,wye,1676,0.29137127774161453,0.3509788972831772 zee,hat,1677,0.051223624824948355,0.48806061670524303 pan,zee,1678,0.22830360777714898,0.040523234104181904 zee,zee,1679,0.2004874019427556,0.2692182176272302 pan,wye,1680,0.7590576123107873,0.17200150784460888 hat,pan,1681,0.8474039861745504,0.5929326488850256 pan,zee,1682,0.6678126441832403,0.7581822567177666 eks,eks,1683,0.1656742241132675,0.25898444627641315 eks,eks,1684,0.08681268181886848,0.14340546739344362 pan,pan,1685,0.96441969603388,0.3414555586796736 zee,wye,1686,0.3371665714902127,0.9792785331415429 pan,eks,1687,0.663918740679759,0.7797473286438443 eks,wye,1688,0.26502140138042296,0.8841653957891482 hat,eks,1689,0.49022956784197735,0.4412363150159613 pan,pan,1690,0.4323862798117054,0.9572877683405837 wye,hat,1691,0.19346871577634817,0.3548449217449817 eks,zee,1692,0.2220528759711472,0.2854499747333922 wye,pan,1693,0.6318004848086037,0.8235151199361017 hat,hat,1694,0.22300051255024678,0.23627303242311026 pan,eks,1695,0.606816508396926,0.4747964191601073 pan,eks,1696,0.5409026908587434,0.8707138792965543 zee,eks,1697,0.8215348448990311,0.5963587804425763 eks,hat,1698,0.4552430260978796,0.7656888582137643 eks,eks,1699,0.5528124536495131,0.03385319757100913 wye,pan,1700,0.5921927876548824,0.13717891760982504 wye,wye,1701,0.3521072429813412,0.9393268458767366 eks,eks,1702,0.615481896967935,0.4253334980050465 hat,eks,1703,0.04267213782959711,0.6683763263616654 zee,wye,1704,0.417590320872979,0.7481853946231414 eks,wye,1705,0.4519026086752629,0.721298569465698 eks,wye,1706,0.867732327367188,0.7815034918779579 eks,pan,1707,0.21735365651407101,0.6786702647895654 eks,wye,1708,0.7426314107643154,0.39737817100828876 hat,wye,1709,0.7255615455173713,0.7788950854100821 pan,hat,1710,0.08892696718996207,0.9572747456151248 eks,hat,1711,0.8331359499607889,0.8880694168170389 pan,zee,1712,0.07987647709173995,0.13417502683990923 eks,wye,1713,0.43055194021989684,0.12038634859450736 eks,eks,1714,0.5087128193007605,0.9531328272635052 wye,zee,1715,0.5007673042035596,0.0839554814172323 zee,wye,1716,0.9367542179955354,0.8831199104153296 zee,zee,1717,0.8370665182431167,0.46590727343637683 zee,hat,1718,0.6417213786646256,0.12267793340629607 hat,pan,1719,0.48165651092697337,0.9550338464219692 pan,pan,1720,0.26837378206040097,0.3273738090239059 zee,eks,1721,0.3013268284235642,0.9999170047266996 eks,pan,1722,0.7488627212441221,0.7589673147670182 pan,zee,1723,0.22059597690872113,0.4590031168653098 zee,wye,1724,0.11085385425683147,0.18276048166565262 eks,eks,1725,0.8016828955823794,0.5017037375277129 eks,wye,1726,0.9929352438598067,0.836317286740252 hat,pan,1727,0.015544541266721779,0.4301942866494898 wye,hat,1728,0.24080891134309446,0.5995840846866549 hat,pan,1729,0.006810750830322787,0.855871006710109 wye,zee,1730,0.17481728816675346,0.4661820645212398 wye,zee,1731,0.255264888272124,0.9481051880482031 eks,wye,1732,0.9141703983722962,0.7783272768366281 pan,wye,1733,0.4811498350363058,0.31752434003930774 wye,hat,1734,0.33815529285945034,0.8025791463907084 wye,eks,1735,0.4660052329093146,0.6822728002131543 eks,pan,1736,0.42070034175427795,0.8250949093967167 hat,hat,1737,0.8848216308084669,0.49372633356388596 wye,wye,1738,0.41919127534471545,0.6972253946537716 pan,hat,1739,0.7458644297757762,0.06863960925170765 zee,hat,1740,0.5467481093982075,0.20576784027619854 hat,hat,1741,0.6667341296371178,0.5083249671499618 zee,zee,1742,0.5570445537603863,0.9969595288070264 hat,pan,1743,0.3878736075798501,0.09689320155996384 hat,wye,1744,0.47545940383287155,0.035171107409935454 wye,pan,1745,0.05202061770868127,0.6566730002228411 zee,hat,1746,0.058673442891371996,0.28933038921745524 wye,hat,1747,0.14150517117852657,0.536530005390096 eks,wye,1748,0.3689045321575106,0.43375960646000566 wye,eks,1749,0.08070562415535032,0.7601097373668262 zee,pan,1750,0.42748309274481444,0.40582328846411353 eks,pan,1751,0.5101125068297688,0.17416701133200285 eks,hat,1752,0.6822739323301563,0.934728306935636 zee,wye,1753,0.5815603591837878,0.42946603160181884 eks,zee,1754,0.4411659420836479,0.658970404212564 pan,eks,1755,0.16413727843701775,0.9186399984720109 hat,hat,1756,0.6677910628012946,0.7992076156627536 pan,pan,1757,0.018771917494669887,0.07627637321631209 eks,eks,1758,0.3849737318613389,0.10314796719548613 eks,hat,1759,0.004605943802663104,0.13706408448625906 pan,hat,1760,0.16534300738225027,0.6267714211033921 zee,zee,1761,0.9779052389253532,0.5003086801528233 wye,hat,1762,0.04507239441313149,0.7716812127623998 hat,hat,1763,0.6315164191885015,0.4375276804518171 hat,pan,1764,0.02195532641775666,0.2526330533315183 hat,eks,1765,0.2835946220779688,0.29118113110322497 hat,zee,1766,0.382493150516817,0.8520221210763981 zee,wye,1767,0.3657210401100467,0.6620479513955376 eks,zee,1768,0.7033634045957338,0.47107520132096625 zee,pan,1769,0.7412198854939575,0.34206923036029935 eks,wye,1770,0.7022926949673525,0.8178450530445518 wye,zee,1771,0.8754670655329418,0.17333696566959766 hat,eks,1772,0.585792241890598,0.7443360574921659 zee,zee,1773,0.6522535015576731,0.21757325076071798 pan,pan,1774,0.09695201653405716,0.8252978168426179 zee,zee,1775,0.977214551248574,0.4647124207647422 pan,hat,1776,0.9052349202388439,0.23607383279010508 pan,pan,1777,0.8770213930313705,0.2649679554558544 eks,pan,1778,0.5825936705834729,0.5453162110699705 eks,hat,1779,0.5006571233548579,0.1243780561189558 pan,zee,1780,0.1846415746915494,0.04736023830541203 wye,pan,1781,0.578399885263909,0.04308726031144994 pan,eks,1782,0.9210030244758979,0.7773896236831834 wye,zee,1783,0.9426077714915372,0.2538200528298715 wye,wye,1784,0.8612436216521431,0.8048330008328066 hat,wye,1785,0.9754832792942771,0.28923936562916985 pan,zee,1786,0.2494860009657509,0.17194280903044357 eks,eks,1787,0.368000320083405,0.4886055420500375 pan,wye,1788,0.26250246334689176,0.04787633922145995 pan,wye,1789,0.7301945417230211,0.226509032748324 hat,zee,1790,0.37729036546983097,0.27703668720411234 hat,pan,1791,0.05762772701528418,0.8943100353103193 pan,zee,1792,0.8322225569737312,0.7917170874641617 wye,zee,1793,0.31884392088021907,0.48529327738748296 wye,wye,1794,0.2263305044828683,0.937998380780705 hat,zee,1795,0.16118129356442434,0.16950272509494824 zee,eks,1796,0.4942226187236075,0.14210516571467535 hat,zee,1797,0.7287749063387707,0.9927587108357429 pan,hat,1798,0.6828185492461075,0.4502861054322417 hat,zee,1799,0.9355569291824988,0.20314844189673253 zee,pan,1800,0.72307448294554,0.6376778174182595 pan,eks,1801,0.8102218415617043,0.6044303313247449 zee,pan,1802,0.357073805593369,0.8319647967908266 eks,wye,1803,0.5196592664144227,0.7156673976778524 eks,wye,1804,0.29264863959299714,0.708791737405034 zee,eks,1805,0.8443555032696601,0.064863387129513 zee,hat,1806,0.6164118793332103,0.1255925909310226 wye,hat,1807,0.14657249890035728,0.5230067969283422 hat,wye,1808,0.2287730659373145,0.20360891960927452 eks,zee,1809,0.5828879813451391,0.8871296430025095 wye,hat,1810,0.10808902686015609,0.003095657967865484 zee,wye,1811,0.879138779526544,0.8158846610141476 zee,wye,1812,0.8726848944578037,0.06260871597344408 eks,pan,1813,0.7037266550933726,0.35602278298025203 hat,pan,1814,0.9644298322610328,0.4993991438913755 eks,pan,1815,0.5418348248161854,0.9355389520025802 hat,hat,1816,0.09792806194299297,0.14176660544329966 pan,pan,1817,0.5655519977509864,0.5975680493813812 zee,wye,1818,0.8214459119942229,0.29965361128737544 pan,wye,1819,0.18318519888267681,0.43197282065530884 hat,pan,1820,0.020838363795188775,0.8508185143390146 pan,pan,1821,0.38294698779651215,0.8341489509213522 hat,wye,1822,0.522603809398008,0.6634567147948507 zee,hat,1823,0.5191794392445693,0.5255931403873793 eks,pan,1824,0.44104659188971895,0.6594737117599939 wye,pan,1825,0.5392802909916755,0.8897079123047565 wye,pan,1826,0.8957889050713344,0.7119911089910552 hat,hat,1827,0.7124428569925854,0.5480761759295041 zee,hat,1828,0.05786804641448351,0.4254319991402028 pan,wye,1829,0.4687534933888111,0.706582639979992 zee,hat,1830,0.2721305750226911,0.005377285991549963 pan,hat,1831,0.18303692231105184,0.21025826705763861 eks,pan,1832,0.2038945772719637,0.5357417117465196 hat,eks,1833,0.014590280685686796,0.7002596722333126 wye,wye,1834,0.949816635928921,0.1930644264586816 eks,wye,1835,0.9900052984177767,0.8879825093814294 wye,pan,1836,0.3181487584311439,0.5523667763399458 hat,eks,1837,0.9591593624436306,0.6113919452246622 hat,zee,1838,0.559343676070325,0.890209332873675 pan,hat,1839,0.5368391085129115,0.8180683703610315 pan,eks,1840,0.80438348711484,0.2022566057940537 wye,hat,1841,0.5532887348403182,0.24429939746293128 pan,hat,1842,0.9898704891265324,0.7317672838087951 zee,hat,1843,0.5087737269682078,0.0806841886079015 zee,eks,1844,0.09986788038161976,0.9714739666784168 hat,eks,1845,0.09049828109166225,0.1947578588027301 eks,zee,1846,0.74504290778088,0.46929232899960105 zee,wye,1847,0.5102908546678789,0.8622466590956885 eks,wye,1848,0.9737508284191876,0.6060569185675129 pan,pan,1849,0.4022620876038918,0.7846557844677974 eks,zee,1850,0.31039634454352627,0.5252329961384006 eks,eks,1851,0.7390412177790203,0.769519937153525 hat,wye,1852,0.6238871121990431,0.41186598086229964 zee,wye,1853,0.8447601423313442,0.8520011644241022 zee,zee,1854,0.2962334576293918,0.926132945738903 pan,hat,1855,0.8401351548600108,0.6504879006085633 hat,zee,1856,0.07606845988104194,0.00034299355854428004 wye,zee,1857,0.4582107832207104,0.2944016633400677 eks,wye,1858,0.9930106907313097,0.7391793267018062 hat,pan,1859,0.42255637553704006,0.02707473931820803 zee,hat,1860,0.24049082129786625,0.987975708111131 zee,pan,1861,0.47821784409887513,0.8783256619433235 eks,hat,1862,0.8127278660333865,0.8191943473539423 pan,pan,1863,0.8302838683545155,0.24734279452032182 hat,zee,1864,0.826660555911501,0.2651509088000916 eks,zee,1865,0.38057266246696253,0.03213839928081663 eks,hat,1866,0.8031652473986357,0.5958264736432561 wye,wye,1867,0.15951611637472107,0.4077662801256805 eks,zee,1868,0.6732934218406293,0.7505416061385557 eks,zee,1869,0.633163245609033,0.8429419490648784 wye,pan,1870,0.10163096579388076,0.13758281047223042 hat,wye,1871,0.08107553652444954,0.2640692772059776 eks,eks,1872,0.42414648489598794,0.6065273117846864 wye,hat,1873,0.6051325007195336,0.0842051888808607 zee,eks,1874,0.4161594343684122,0.5842158524042167 wye,zee,1875,0.9548486055254091,0.3424491192867498 pan,eks,1876,0.6468659335884865,0.710835697336098 hat,zee,1877,0.9303319011279677,0.7113730786626118 zee,pan,1878,0.14398708400857807,0.7966487889999802 pan,zee,1879,0.527406345229876,0.47062036425973675 hat,eks,1880,0.8853889990767594,0.29294894207487143 pan,zee,1881,0.40105266769707004,0.7644044149977851 pan,zee,1882,0.9327815865652367,0.3602677495267469 pan,zee,1883,0.34429591718844843,0.05689015367587591 wye,hat,1884,0.708143215528541,0.3560504482521065 zee,wye,1885,0.11851805777842395,0.23782759573809764 eks,wye,1886,0.33449907630162523,0.9409666461544096 hat,hat,1887,0.9314693861337467,0.13863337436919843 zee,eks,1888,0.3519272451539994,0.5053162657228568 eks,zee,1889,0.8736600260492586,0.19107483910062717 hat,eks,1890,0.4174883365897032,0.6879531497535479 zee,hat,1891,0.5382838856043256,0.8806888516912734 zee,eks,1892,0.8124856255009596,0.9417530148525823 hat,zee,1893,0.6120649825518716,0.8578129408524632 wye,wye,1894,0.4169983470765677,0.31293410227278906 hat,wye,1895,0.10961101368157089,0.32892883700517095 hat,wye,1896,0.9132730441559633,0.7487099837821863 hat,hat,1897,0.7675505245773306,0.8461420935545583 pan,eks,1898,0.3252151127693067,0.9364118111641275 wye,hat,1899,0.1709902864944267,0.48516354025753305 hat,pan,1900,0.6087321537907773,0.7970729316915601 pan,eks,1901,0.24652370926788014,0.5636927917895729 hat,zee,1902,0.1264928014486475,0.6961063811057807 wye,eks,1903,0.31804488869587366,0.14285299153786624 eks,zee,1904,0.33758768803317096,0.5523041691821023 hat,wye,1905,0.7783001976331004,0.4281025219221022 hat,wye,1906,0.2507442607453316,0.9002257467281997 eks,eks,1907,0.9438758492662777,0.7214758965332612 wye,zee,1908,0.32738813438706793,0.7623152593994879 eks,hat,1909,0.7314442344747841,0.030358065216463115 hat,wye,1910,0.7380789095291242,0.9502552254648776 pan,pan,1911,0.3011591867627148,0.6774130244502444 wye,wye,1912,0.7175207335721732,0.5163511962741214 hat,pan,1913,0.010071221635602146,0.5065324934192511 eks,pan,1914,0.30367239205139296,0.7075141985416662 hat,pan,1915,0.6426932948416931,0.5081694432335289 wye,hat,1916,0.47018235692725985,0.8010843037704246 zee,wye,1917,0.529838527546025,0.975044822917303 hat,eks,1918,0.019159081788694077,0.5386166416064818 eks,zee,1919,0.45717869373411757,0.8830819174369392 eks,wye,1920,0.6319288641477111,0.47412119650722184 eks,wye,1921,0.9456983171768308,0.8913471052406744 wye,pan,1922,0.6733026865976656,0.5941565401265938 zee,zee,1923,0.15497719261601373,0.9824185888787137 zee,wye,1924,0.14261091973981976,0.03891416444006246 pan,pan,1925,0.051704291514689915,0.30096139627683915 eks,pan,1926,0.08149680519340818,0.371502322922598 eks,pan,1927,0.26745370041393246,0.7180946178205809 hat,pan,1928,0.03866554054364113,0.7467583161789872 pan,wye,1929,0.715219843779286,0.7347318985161266 hat,eks,1930,0.18556549546801415,0.8376753664837346 eks,eks,1931,0.6283884556872956,0.714926049974028 pan,wye,1932,0.08318436818892117,0.43049862856264764 wye,zee,1933,0.9047633922940572,0.7844909689207981 eks,hat,1934,0.2175670413228329,0.8617365456033637 wye,wye,1935,0.7550429521371519,0.786133808170408 wye,hat,1936,0.3345630973104814,0.2823268521687281 pan,wye,1937,0.9521970743863757,0.5949587882541866 zee,hat,1938,0.18206318284329825,0.0011400311959023357 wye,zee,1939,0.1903296792451994,0.9350080777637384 wye,hat,1940,0.37178768301191467,0.8451055253202524 pan,eks,1941,0.8294899690053994,0.7564416563177322 hat,hat,1942,0.44482696874869365,0.5961297980178011 pan,eks,1943,0.9719276019842854,0.640150164953268 eks,wye,1944,0.09816590063186759,0.8960419732965261 wye,wye,1945,0.8188272907846742,0.22236697182142784 pan,pan,1946,0.9840946983738358,0.24604842054457776 wye,eks,1947,0.5609426547261931,0.1519761843166667 zee,zee,1948,0.8526284266294675,0.7580336598194982 wye,eks,1949,0.04793743314382193,0.511362467180759 eks,hat,1950,0.5205580283603881,0.09466218875496657 eks,hat,1951,0.9392053569680634,0.9768144646610879 pan,hat,1952,0.491307664252547,0.8646927260623539 zee,eks,1953,0.6668788836391065,0.7090525532474364 zee,zee,1954,0.7595127799385754,0.6001574207956651 pan,pan,1955,0.3407552952250241,0.8020102136226014 pan,hat,1956,0.08503694234411441,0.7387665239824308 pan,zee,1957,0.9854793880226635,0.7095712814074717 wye,pan,1958,0.6114481880293695,0.22917077844582012 wye,zee,1959,0.5016850781819963,0.42040146896727615 eks,pan,1960,0.7325260743545391,0.35098817238458924 wye,wye,1961,0.29833631790760273,0.4831530650838167 hat,eks,1962,0.36631759989103085,0.29865431150806365 hat,eks,1963,0.23176876123591383,0.5612909158675198 wye,pan,1964,0.7334272338627286,0.650447648017669 pan,pan,1965,0.9367163916661853,0.9638919891814807 zee,hat,1966,0.7301180056013357,0.38279312633041496 wye,eks,1967,0.3271166838493157,0.8030348688816051 pan,eks,1968,0.7530954976867642,0.5048913343158832 wye,zee,1969,0.6270200861888447,0.24983293440736842 eks,zee,1970,0.12406730011560674,0.5862034791938755 hat,wye,1971,0.4654113772986844,0.03490618297713166 hat,wye,1972,0.5837244835312924,0.78564800693725 wye,hat,1973,0.5256418800394103,0.5657320340909927 hat,zee,1974,0.9946797442560897,0.17991015295150847 eks,eks,1975,0.5611515257329109,0.45353155787641375 wye,eks,1976,0.90900092404583,0.9088347779743747 wye,zee,1977,0.2485784939054746,0.5715538711284616 eks,eks,1978,0.43223859004330245,0.25096305614713244 wye,pan,1979,0.044824962223491194,0.26304195982115053 hat,zee,1980,0.8574700507192768,0.03240481571430498 hat,pan,1981,0.7205280959278643,0.9765256304646956 pan,eks,1982,0.11118021831380087,0.1736432452425345 eks,zee,1983,0.3665362715223871,0.8769601803237262 wye,zee,1984,0.5159131102473629,0.3138392498746069 hat,wye,1985,0.6785523977842361,0.9088522942899968 hat,eks,1986,0.8391540456864279,0.13395352775796587 wye,eks,1987,0.33553215256369306,0.8998597387125332 hat,zee,1988,0.3273336625347204,0.5235087574026606 pan,eks,1989,0.8846030796068061,0.1229509863981878 hat,eks,1990,0.972524874310568,0.7588379528101111 zee,pan,1991,0.4266265409041532,0.46661051389718977 eks,zee,1992,0.18951913536280773,0.3044420239454556 hat,pan,1993,0.6524602479494983,0.2683536424804953 hat,pan,1994,0.3458198938210745,0.15708271475158309 pan,hat,1995,0.2451140421214234,0.21125136662021793 wye,eks,1996,0.7260863327463748,0.8391383362988085 zee,wye,1997,0.3390776046149281,0.2943389939229085 eks,pan,1998,0.24597512351551498,0.5579233145456394 eks,zee,1999,0.6180255159787116,0.7640028449996572 pan,wye,2000,0.8323911295033875,0.05968766127057723 wye,hat,2001,0.15924096642007157,0.24059632344634185 pan,zee,2002,0.5349190357320186,0.508630259684438 pan,wye,2003,0.3562571816102539,0.9351982273289634 hat,pan,2004,0.5792914584913227,0.9721311150467201 hat,pan,2005,0.6721200696331198,0.5074220436659838 zee,pan,2006,0.36314674395500735,0.05966789024528896 eks,zee,2007,0.5198150674035192,0.5307294576536602 wye,wye,2008,0.8038374651958967,0.863525245703629 hat,eks,2009,0.8954319835423661,0.6074686757262493 hat,hat,2010,0.14682904757610016,0.5836897852849614 hat,wye,2011,0.5554922764125422,0.044893468168582085 wye,hat,2012,0.3272476785644499,0.2852380145740261 zee,pan,2013,0.5272911037027838,0.9007193862227653 pan,zee,2014,0.8942547964450125,0.7308860097948163 wye,pan,2015,0.7429848323935544,0.6564456028979551 wye,pan,2016,0.8976852390968387,0.3715619777706992 eks,eks,2017,0.5870221936023131,0.5886336776923361 pan,eks,2018,0.7548510407648094,0.259810938746426 wye,hat,2019,0.43322808613233055,0.0385758517767808 zee,eks,2020,0.6430370762426636,0.6948330772772741 pan,zee,2021,0.4140878244124503,0.398400762850186 eks,pan,2022,0.3500684495606733,0.14698881032642608 eks,zee,2023,0.8926094968763351,0.6086053558590667 wye,hat,2024,0.020600223126170603,0.20728018182250796 hat,wye,2025,0.0007025729724531304,0.6265023865043876 zee,wye,2026,0.8573260145899378,0.9080875650609371 eks,zee,2027,0.22981492296559103,0.10600637415066061 zee,zee,2028,0.6842296172237651,0.896024172825087 pan,wye,2029,0.5829130314173805,0.3189845366520674 pan,wye,2030,0.14984955320446725,0.8011645466128109 wye,zee,2031,0.14619362934789815,0.04433757197092214 pan,hat,2032,0.5611491467878738,0.630949265472906 hat,wye,2033,0.005567301262607405,0.6290855880213555 zee,pan,2034,0.40924963766916733,0.922632813755277 eks,hat,2035,0.33767734812921923,0.5658087617423716 zee,eks,2036,0.25944332814164905,0.11267646149361388 eks,hat,2037,0.4613748353843449,0.5072335485279396 zee,zee,2038,0.3797322702325565,0.9465025393896492 hat,hat,2039,0.8389132941448142,0.9200224995580027 pan,pan,2040,0.7463150208227146,0.34885266263688197 wye,hat,2041,0.6563952046485523,0.7555478004412313 zee,hat,2042,0.2743477126375994,0.3824464564910681 hat,hat,2043,0.8811861962295147,0.5191315240489268 zee,eks,2044,0.3599144261574607,0.24553060035029017 pan,eks,2045,0.9781655353605474,0.2730587268790037 wye,hat,2046,0.7333941298571239,0.5739371545354796 hat,eks,2047,0.06042270034486685,0.46301889302926746 pan,hat,2048,0.10911169262757925,0.007073831794458529 pan,pan,2049,0.8624169299220058,0.9006582996702346 eks,eks,2050,0.040691774802510294,0.8066732453567129 eks,hat,2051,0.40407704836251557,0.26395123641005147 zee,hat,2052,0.009808918561178714,0.2302545994571994 wye,eks,2053,0.7633729697198686,0.8187837109642871 wye,hat,2054,0.10710381581294204,0.3286506389479086 hat,eks,2055,0.9832237471284704,0.23991238481161792 zee,pan,2056,0.6210754046594348,0.49331354774956016 pan,zee,2057,0.28231501416039284,0.12643281231603754 wye,hat,2058,0.045046526806835296,0.681451721478501 eks,pan,2059,0.9331162879465084,0.14664803314097596 zee,wye,2060,0.7720929751822915,0.330085050859654 zee,zee,2061,0.14974934709461651,0.697616433647398 wye,eks,2062,0.945982672513977,0.36668794201328303 eks,zee,2063,0.10743808879213779,0.6963841526487657 zee,pan,2064,0.5676519201496846,0.24351963361710904 wye,eks,2065,0.606169952184269,0.9495081658090401 hat,pan,2066,0.5362186062455647,0.18683078751407345 eks,eks,2067,0.23118685760407975,0.4886672632279645 wye,wye,2068,0.0181286937053855,0.4027507216590225 wye,zee,2069,0.8920322140255575,0.2821329353409344 zee,wye,2070,0.2845370086876513,0.4200729779675041 eks,wye,2071,0.6616434446154568,0.028717804930202817 pan,zee,2072,0.13789801706952376,0.6865579908342762 hat,pan,2073,0.14024645801145608,0.2232995634066972 eks,hat,2074,0.8416373289721065,0.009957706782034892 pan,eks,2075,0.2730024769669228,0.6092063716892284 wye,hat,2076,0.6679556713229464,0.23886590929858575 wye,pan,2077,0.6772238022128941,0.35715527067676667 wye,wye,2078,0.0007441043225671073,0.9342244226449593 eks,pan,2079,0.00844716490372166,0.7042488450623287 zee,hat,2080,0.9840706098598035,0.7011152185727909 zee,wye,2081,0.3382103536180968,0.04576622304303102 wye,hat,2082,0.0855328407000916,0.7955310778574013 wye,wye,2083,0.654630167298159,0.9490657525005854 hat,pan,2084,0.9418973198231615,0.8869025666330164 eks,eks,2085,0.38148259830551734,0.8664658521060588 hat,zee,2086,0.9687249489223216,0.9138672864469205 pan,zee,2087,0.4582214393900814,0.8311346736169871 hat,wye,2088,0.3324758019863273,0.4703648792781622 hat,hat,2089,0.9166551411558639,0.0986178333688883 zee,zee,2090,0.5043939613961448,0.9818791944950958 eks,wye,2091,0.1351492269897414,0.9388421670767862 pan,eks,2092,0.6581611437110156,0.2936463974495629 eks,wye,2093,0.5685533529741125,0.8133350683940237 wye,pan,2094,0.07847412023993783,0.3613060871668645 wye,wye,2095,0.20230852407018185,0.2291747261210969 eks,eks,2096,0.43638629510919924,0.2881257309332079 hat,eks,2097,0.26844813288649483,0.39273900559861075 hat,eks,2098,0.9966377977643898,0.5245550930114457 hat,pan,2099,0.03219741593758807,0.8801777270031927 eks,pan,2100,0.8264573211830318,0.3323904264186872 hat,wye,2101,0.5557805350665251,0.5952937921640231 zee,wye,2102,0.749445246206683,0.9220669751971446 pan,eks,2103,0.48622365678958046,0.5824051664305276 wye,zee,2104,0.24393506694975353,0.8625197120864077 pan,zee,2105,0.42667111990222584,0.4200738107939501 pan,eks,2106,0.6899381403750706,0.5175558265399449 pan,wye,2107,0.046210916618416364,0.25213670524015686 zee,zee,2108,0.7086278430636463,0.7267047227599615 pan,zee,2109,0.8286002064140777,0.7422535714385249 wye,eks,2110,0.9082291930295346,0.47111153171260134 hat,wye,2111,0.5188526237698469,0.10386838578674262 zee,pan,2112,0.02494942612055806,0.6771165590440439 pan,zee,2113,0.0793213913259122,0.046201894636212604 eks,wye,2114,0.339791829917532,0.6311099033330176 hat,eks,2115,0.09151886587216429,0.7423362419494414 zee,zee,2116,0.4003379315212102,0.0193682083394614 pan,hat,2117,0.3429130580701697,0.6027060638473042 pan,zee,2118,0.9627595397700258,0.13997934081700658 hat,hat,2119,0.8206707686267524,0.7611213033730956 zee,wye,2120,0.5559252019928892,0.7174146654070022 hat,wye,2121,0.9803985810617651,0.8394646120202436 zee,hat,2122,0.08631486480591943,0.5785230915820572 pan,wye,2123,0.9115498197515648,0.9169354954307747 hat,hat,2124,0.7798071504849725,0.19792727612064476 wye,pan,2125,0.8561718307822236,0.1291568082386848 hat,wye,2126,0.2863145718712009,0.5710669434512489 wye,eks,2127,0.06803650937651173,0.3577026589688229 wye,hat,2128,0.9111033241507589,0.10783082272199751 zee,eks,2129,0.28267518376958845,0.17688870699173864 hat,pan,2130,0.19116926141337387,0.27875749703114405 hat,hat,2131,0.3254603712033679,0.9274447308988584 eks,wye,2132,0.11768724156109422,0.8908179117578706 wye,pan,2133,0.6516558397748747,0.774009470971533 hat,eks,2134,0.9053305484140348,0.37780854020278265 pan,pan,2135,0.7849642445184846,0.2074226048103197 zee,wye,2136,0.2843358696868167,0.17750391830130807 pan,hat,2137,0.6831781526100863,0.005628299955970917 zee,wye,2138,0.29832744224162844,0.33074245583419115 zee,wye,2139,0.4116759409721965,0.16673308079819182 zee,wye,2140,0.3063387912982882,0.3715575632516237 pan,hat,2141,0.41506057628652626,0.013486526190589099 zee,wye,2142,0.517904841622836,0.53285652127 hat,pan,2143,0.9156355367699018,0.8823700552229912 pan,hat,2144,0.6484157591768972,0.18545458215405763 eks,eks,2145,0.2511948002161768,0.6576693696214415 eks,zee,2146,0.4990209540685181,0.1364915882864166 eks,wye,2147,0.15240384791463035,0.4599246782338706 zee,pan,2148,0.8912158164832823,0.0715866507974654 zee,eks,2149,0.7025420244699133,0.987609520343113 wye,pan,2150,0.3436366777295877,0.3694637710717039 hat,zee,2151,0.9616090415643731,0.8945473597755025 zee,hat,2152,0.480760014274322,0.09273697945051707 eks,hat,2153,0.17176533143479,0.9370337444082136 zee,pan,2154,0.1391723805955094,0.9355089025836978 hat,zee,2155,0.005175137015667519,0.6082400770560145 eks,wye,2156,0.5266959602940757,0.2966790787127306 wye,pan,2157,0.40990967259698485,0.46693754055942116 hat,hat,2158,0.36568864609540286,0.482086719899368 zee,wye,2159,0.46324422760937845,0.18957042856735318 pan,eks,2160,0.0032731741464655517,0.24265930126172286 wye,eks,2161,0.17517848527969948,0.08180586013473534 pan,pan,2162,0.4403551635970905,0.22942697632655906 wye,pan,2163,0.09273957715469416,0.6132959825744481 pan,zee,2164,0.19524512170581543,0.5460739296935951 hat,hat,2165,0.46165958964019504,0.6029962831405496 wye,zee,2166,0.8944862196737927,0.34807401159779683 zee,hat,2167,0.42312576374129274,0.10048800632229682 wye,hat,2168,0.6568978924854212,0.5101756478889046 eks,zee,2169,0.05684290839594597,0.6167859837759624 wye,eks,2170,0.4198547582787967,0.2376285818765217 eks,eks,2171,0.6714359981321629,0.37149274278995337 pan,wye,2172,0.2057396940089804,0.8420562089794659 wye,hat,2173,0.4502790891675549,0.8635812727509119 pan,eks,2174,0.8915519585149145,0.297092301064787 wye,eks,2175,0.6684886052688896,0.23351427152549686 eks,eks,2176,0.018008652733587316,0.9614835324200763 eks,pan,2177,0.7183922577315158,0.48505114281853134 zee,wye,2178,0.8235592349921356,0.21457612748044042 hat,wye,2179,0.8080588257410165,0.8760901920518874 pan,eks,2180,0.6055815021312241,0.8480036770514022 zee,pan,2181,0.5449270457570026,0.7992463596093999 zee,hat,2182,0.3727527045897696,0.8534533340738414 eks,pan,2183,0.8003361363186678,0.8955368869223884 wye,wye,2184,0.009903387473833902,0.717874178791943 eks,eks,2185,0.33802204835640726,0.30007036518314967 hat,zee,2186,0.7146865245671944,0.4887379966859555 pan,eks,2187,0.09332217805283527,0.2731125734848725 eks,zee,2188,0.358076509887842,0.6122466113672775 zee,eks,2189,0.984738578757059,0.892051880694554 hat,wye,2190,0.9791796147633219,0.30772131333366337 zee,eks,2191,0.8618827816008505,0.3898158650484316 eks,wye,2192,0.08897197433077497,0.5341085853768164 zee,hat,2193,0.44938360138176914,0.04690228110148875 wye,wye,2194,0.2622599637682992,0.33190780821668475 zee,pan,2195,0.2456231364010899,0.8439355736973392 zee,zee,2196,0.7874461922758034,0.3195592889082516 hat,wye,2197,0.3540930552112632,0.4554803152418352 hat,eks,2198,0.12965400774700986,0.4139588865738947 hat,eks,2199,0.6553924554328745,0.4899538937166197 pan,zee,2200,0.4507994878036382,0.9785717062046653 pan,pan,2201,0.9526982671410141,0.3425963974364795 hat,wye,2202,0.4709189260548132,0.33410477791419135 wye,pan,2203,0.8491557372816053,0.5530531109549706 hat,wye,2204,0.7973426670893504,0.38438739471274264 wye,zee,2205,0.2774377944743893,0.45205678592354026 zee,eks,2206,0.4133477502781451,0.555969888477931 pan,eks,2207,0.9193964373230882,0.4625301712579941 hat,eks,2208,0.9772889351986918,0.3249537135963736 wye,eks,2209,0.7841059777895694,0.6947456883865291 hat,eks,2210,0.46786259691563536,0.31576530398682046 pan,hat,2211,0.3000341492694927,0.9961655477923976 wye,zee,2212,0.2800829848930697,0.8599095044857418 wye,eks,2213,0.7099477247456799,0.1413865209495151 hat,zee,2214,0.2971188903315465,0.44965916160853636 zee,pan,2215,0.06251445207257622,0.13216970387427485 hat,wye,2216,0.3382952859935743,0.4400906767156443 zee,wye,2217,0.49170781106474626,0.1402042893515265 zee,hat,2218,0.2583991751219392,0.36652517821181607 pan,zee,2219,0.14927136365683047,0.18664967620347506 eks,wye,2220,0.5726690878517332,0.9834177283918458 hat,eks,2221,0.7726531947838272,0.15165188282492126 zee,eks,2222,0.813180106527479,0.621185672504634 eks,hat,2223,0.289329024465074,0.36110779604692067 hat,pan,2224,0.27094205048996056,0.6489628299416983 hat,hat,2225,0.013545905550584214,0.8494572427931795 eks,wye,2226,0.3454244478858154,0.29090367914645576 zee,wye,2227,0.39971822303581617,0.17475090292312834 eks,zee,2228,0.9408003473361174,0.9376913825387122 hat,wye,2229,0.4494538288870511,0.13090866722624483 pan,wye,2230,0.8809697124067445,0.39092344601998064 wye,hat,2231,0.900794437962015,0.8967390597734215 hat,hat,2232,0.15713550210076666,0.7206735582912116 zee,wye,2233,0.9004219588711274,0.7577516737491493 eks,eks,2234,0.27871867532288996,0.2911552878960423 eks,wye,2235,0.5013653314603624,0.8333248001496258 zee,zee,2236,0.30501285370800013,0.5849535705099613 hat,zee,2237,0.45674559029260486,0.8728724386781094 pan,pan,2238,0.02847848077848736,0.9207996601523926 pan,zee,2239,0.010173755043218158,0.22123822336488064 wye,wye,2240,0.5930605475370612,0.3433603733657331 hat,wye,2241,0.5014017541132575,0.7090960181653438 wye,hat,2242,0.9458244074853481,0.7456393313493013 zee,pan,2243,0.29001787500073173,0.045527725574051714 hat,hat,2244,0.9708832254888226,0.15752383437958462 hat,eks,2245,0.4770264537232787,0.6736468654550781 wye,hat,2246,0.7714374257659208,0.5425954287320883 pan,pan,2247,0.8014273299143657,0.7288163705942878 pan,pan,2248,0.954246012713997,0.8279688125072744 eks,eks,2249,0.3345668023105298,0.31811620191709955 wye,hat,2250,0.5431274222493861,0.1566355934693281 eks,hat,2251,0.8946184447856771,0.8281124954281727 zee,wye,2252,0.5655358148358,0.9169255629455827 eks,wye,2253,0.6383105313881284,0.1027304181651264 wye,zee,2254,0.8612725048242387,0.056706665236205156 hat,zee,2255,0.4883498572156204,0.0770621976268544 wye,hat,2256,0.10604947211581683,0.8870919841683852 hat,hat,2257,0.6942446034273736,0.6246228939328669 eks,eks,2258,0.6930800244883837,0.17611165906867554 pan,hat,2259,0.22286725838973298,0.6076445332790815 zee,zee,2260,0.8359749877662224,0.08101114122788078 hat,eks,2261,0.9105620468307024,0.3593642950046009 zee,zee,2262,0.7490208516776408,0.7277121821219803 zee,hat,2263,0.012838825936875464,0.5223435911532996 hat,pan,2264,0.37286192432196275,0.8365432517009491 zee,pan,2265,0.946352430931429,0.27693938121291084 pan,eks,2266,0.5631724274367673,0.0642506263060727 hat,zee,2267,0.7578871147776249,0.14754564446673257 hat,wye,2268,0.17474153753114763,0.9634949103419465 pan,eks,2269,0.5541880960714733,0.9158224391454514 eks,eks,2270,0.5090886478757912,0.7656587962141506 pan,hat,2271,0.16768184769644479,0.8215102227732646 zee,hat,2272,0.14140036239733678,0.8390759674518355 eks,hat,2273,0.8127008522217432,0.9949059480342844 eks,wye,2274,0.9075350776906357,0.024516079984659767 eks,wye,2275,0.5212081176523184,0.8177991905419402 eks,eks,2276,0.5329538624469671,0.0018158942180759308 pan,wye,2277,0.8553908959608967,0.021430068067535557 wye,eks,2278,0.17901836368365676,0.14044395537918564 hat,eks,2279,0.012280680223469398,0.277342303022595 wye,zee,2280,0.4217562022758986,0.051936162685817355 zee,pan,2281,0.1383792519119802,0.47235511628254045 eks,hat,2282,0.7011958061953378,0.91083574253739 zee,eks,2283,0.36444369039046853,0.8130301163410548 hat,pan,2284,0.00437293898208746,0.5682527005859528 pan,pan,2285,0.7982165489798513,0.46696290935411433 wye,wye,2286,0.777938701974155,0.7615824205677968 zee,eks,2287,0.0007106109478662859,0.8643696111639223 pan,zee,2288,0.5745888818383479,0.8421462451069522 pan,zee,2289,0.042515149065466495,0.3428290162671168 zee,eks,2290,0.14418296982644663,0.3545011820617253 hat,zee,2291,0.20256672348423999,0.7387630204148321 pan,wye,2292,0.27678771174110695,0.35760728439380474 wye,wye,2293,0.7466090205883998,0.26526277458892455 wye,pan,2294,0.08185339484509935,0.528639660976175 wye,eks,2295,0.08642901521217838,0.7537214070316656 eks,pan,2296,0.8896433327303079,0.37296324484846344 hat,hat,2297,0.4483608002905408,0.9685358655584886 hat,wye,2298,0.04470660416233252,0.5097725516351974 pan,zee,2299,0.9075871262764453,0.2516247032796314 zee,pan,2300,0.9291273399024345,0.9606720070997913 wye,pan,2301,0.21033222836103416,0.992833477876893 eks,zee,2302,0.17194913992026895,0.7921934271129547 eks,hat,2303,0.99161495045373,0.41941465442597237 zee,hat,2304,0.1127642829456843,0.29881658214862383 pan,zee,2305,0.11496965057148123,0.19753250624952667 hat,pan,2306,0.3342389415345628,0.985240345385304 zee,wye,2307,0.6678594262004072,0.2626625984540243 zee,pan,2308,0.9899815839130719,0.49399198581194637 zee,wye,2309,0.12120595243094534,0.3417676704542142 wye,wye,2310,0.6528439645535314,0.626705481063678 zee,zee,2311,0.965416713125537,0.675622189665188 pan,zee,2312,0.38832123076906144,0.8770818996569462 zee,pan,2313,0.4308881860064431,0.298139087353108 zee,hat,2314,0.9107705033446805,0.05369007195738784 wye,eks,2315,0.1958584059822993,0.6458957990948471 eks,eks,2316,0.1898131609601975,0.2576221943783219 pan,hat,2317,0.37219247017788026,0.9659877761503816 eks,hat,2318,0.6179437679435674,0.6255315742679604 hat,eks,2319,0.5617665438640009,0.03790286141600696 eks,hat,2320,0.43513392007253626,0.953280068715905 eks,hat,2321,0.9006870009567153,0.8537806242130159 zee,zee,2322,0.39299000984576493,0.48675520394221294 zee,zee,2323,0.6924646229067376,0.961728591715515 eks,zee,2324,0.3656731818815381,0.4348170464549541 zee,eks,2325,0.9310044743908388,0.5915717923626269 wye,hat,2326,0.5390947464654677,0.9171443353099715 hat,pan,2327,0.13236042343196264,0.7018827248938442 eks,zee,2328,0.9233414160859896,0.9426916138193271 eks,wye,2329,0.32236596243200943,0.12349447265840763 pan,hat,2330,0.26562360950781083,0.6143914548179807 pan,eks,2331,0.7795985947092806,0.9791969083425154 wye,eks,2332,0.8888447587498162,0.9274917692848156 zee,eks,2333,0.0339047026172683,0.9899797336099346 eks,hat,2334,0.4706495392838296,0.5339895561589622 eks,pan,2335,0.43389388336403034,0.6527555471857784 zee,wye,2336,0.2132138095588999,0.3350510820375012 eks,zee,2337,0.18310611841718727,0.27611093961149813 zee,wye,2338,0.5849778358487363,0.4472676087156583 pan,pan,2339,0.7632065771231693,0.9533148007319427 zee,zee,2340,0.7979106986767058,0.34142212009441275 eks,eks,2341,0.1689642670369339,0.08666058738902227 pan,zee,2342,0.7289455213274276,0.04597102157281818 zee,zee,2343,0.6910588757833684,0.2853388537359345 wye,eks,2344,0.46559621387184413,0.6453632272888741 eks,eks,2345,0.7240818295178657,0.7697201439211158 zee,pan,2346,0.2106452223867551,0.8198492988109947 wye,pan,2347,0.9345794244994885,0.5611924241664724 pan,hat,2348,0.5703090995325857,0.5762676020746584 hat,zee,2349,0.2589915838302729,0.04497637706481694 wye,pan,2350,0.8998392369608815,0.03747679005136095 pan,pan,2351,0.6724810273079015,0.3212043712768039 zee,pan,2352,0.19948276246295482,0.27886956486778547 hat,eks,2353,0.19721696160232083,0.1902097573367555 zee,wye,2354,0.3060499042971171,0.6230526367576228 pan,zee,2355,0.4132334507678017,0.0958935038625609 pan,pan,2356,0.49220586447091974,0.3637263342876337 pan,hat,2357,0.6035016232976687,0.2654296683236047 hat,hat,2358,0.5472833606897747,0.11508965130492199 zee,pan,2359,0.3123116477611221,0.5313965363528594 zee,eks,2360,0.7646045437647716,0.4374368628092571 wye,pan,2361,0.8368170215826418,0.1513261409766582 hat,hat,2362,0.7586788480149922,0.6167614911809044 eks,zee,2363,0.2829560793295287,0.31877554125357643 wye,wye,2364,0.8255236580889759,0.30884248417286686 eks,wye,2365,0.10694687582616103,0.12549118259779624 zee,hat,2366,0.8434948128398014,0.7566711862078771 eks,hat,2367,0.11100450503347647,0.26231820024625485 wye,zee,2368,0.7948774475212161,0.10865250917846037 hat,wye,2369,0.03135249091794745,0.3202037119775658 wye,zee,2370,0.5078848120383039,0.5495294084638471 eks,zee,2371,0.6296689722217776,0.8808041685758371 hat,wye,2372,0.36694062952440554,0.03285188729261823 wye,zee,2373,0.5980535785869657,0.36584311596027363 pan,zee,2374,0.8057531144421612,0.1103465158096888 eks,hat,2375,0.39566127922010763,0.926370579143245 pan,eks,2376,0.7036015015427707,0.8896688757860348 hat,wye,2377,0.3840916366205712,0.6117763705069971 wye,hat,2378,0.4244587912309,0.5147488063855301 pan,eks,2379,0.0126919318388804,0.05364265512252031 hat,zee,2380,0.12629846495196628,0.00017118893583800698 eks,hat,2381,0.551443915184712,0.4189803949942186 zee,hat,2382,0.9419188430791652,0.5943076078356421 hat,pan,2383,0.3305527530124114,0.9744246737507011 wye,wye,2384,0.11982738948595928,0.5927050811984642 hat,wye,2385,0.6993064388052053,0.33556275655578294 zee,pan,2386,0.4400144230398596,0.40718760512261376 wye,zee,2387,0.6500939509690578,0.45169252354648837 wye,eks,2388,0.6542816745109832,0.013759212456254444 wye,eks,2389,0.6332584135319546,0.13251231094237437 eks,wye,2390,0.6331896102608988,0.9589307439412602 wye,zee,2391,0.6731897745167693,0.4283772233112926 eks,zee,2392,0.7923894749706849,0.8917271151038314 eks,eks,2393,0.9746844751820227,0.4893807704691421 wye,pan,2394,0.2920699646605315,0.7387920697224446 eks,wye,2395,0.27334460412686323,0.9029783332632627 hat,hat,2396,0.07185787494215012,0.8691631482259681 eks,eks,2397,0.768257729490193,0.31910490090314103 pan,wye,2398,0.6626457206760483,0.6952332207508496 pan,hat,2399,0.034841768970897746,0.5723693878842167 pan,hat,2400,0.15181645902125407,0.7998239378911912 eks,zee,2401,0.07479813220400944,0.6026675734691738 hat,hat,2402,0.7741341758574097,0.24407851593657948 zee,wye,2403,0.4652916798345421,0.5826939451920669 eks,wye,2404,0.5546642401893631,0.5985846330820938 pan,pan,2405,0.2358853113430821,0.024003950417810227 wye,eks,2406,0.28179350936795733,0.5023264174705517 hat,eks,2407,0.2457970370438457,0.811421289170773 hat,hat,2408,0.6751131270509296,0.48856361143986005 eks,zee,2409,0.59847879634121,0.7916259405367129 pan,zee,2410,0.04515829439395114,0.24330613797458922 zee,hat,2411,0.22712092810863416,0.8127998680800427 zee,zee,2412,0.21505489058022198,0.8006638202348123 eks,hat,2413,0.13598286981810193,0.86160038906847 pan,pan,2414,0.8144512562961078,0.9177829414099823 hat,hat,2415,0.6600221567552329,0.0584486480823484 wye,wye,2416,0.7428129016480294,0.14965046440370033 eks,hat,2417,0.6492293161864587,0.9521947928976578 hat,pan,2418,0.9704055340867738,0.5799798105012466 eks,zee,2419,0.09047960361588969,0.48999371435226136 pan,pan,2420,0.9333731806896786,0.6043241512179962 hat,hat,2421,0.21707010100448243,0.5150327861442825 eks,pan,2422,0.00863696577870754,0.11509725431793605 zee,wye,2423,0.4653066475033094,0.21997612033850344 hat,wye,2424,0.9062179939941751,0.2875912231476856 zee,wye,2425,0.398155311000022,0.0933499833149607 pan,eks,2426,0.6379726091040971,0.5194384530463447 wye,eks,2427,0.539037074058747,0.7531525516774173 pan,hat,2428,0.7520504631719865,0.34660951591602773 pan,wye,2429,0.8020766995566793,0.7689029735366432 zee,zee,2430,0.6271482513925272,0.4944204099323506 hat,wye,2431,0.3036891373264764,0.9909449455648611 zee,wye,2432,0.30385506685705554,0.17382245218515768 zee,pan,2433,0.6754312777622205,0.07005068705650719 pan,eks,2434,0.013657995328708816,0.45586613889144767 zee,wye,2435,0.9416754660578306,0.6579056008950284 zee,wye,2436,0.090487272126626,0.6726267738306646 wye,wye,2437,0.8441032403303297,0.7236974901617537 pan,pan,2438,0.9785415873749357,0.14648707376766656 hat,zee,2439,0.7318268760763208,0.7357122474543071 pan,hat,2440,0.4546313043075274,0.9868446327538511 eks,zee,2441,0.7384348801280877,0.4331993419540827 zee,zee,2442,0.3563884899582277,0.8944727395958034 pan,zee,2443,0.5467338009669124,0.3737101047888789 zee,wye,2444,0.6743475636626085,0.5841642214951493 pan,zee,2445,0.150471438909343,0.03999544722112036 pan,zee,2446,0.8427836793414677,0.177257809167512 zee,hat,2447,0.9165212208454823,0.6343832698422787 wye,hat,2448,0.8350423281884237,0.2422590088973925 wye,pan,2449,0.5042681244213146,0.908306481649806 pan,hat,2450,0.3717927109546766,0.7872600125241359 wye,zee,2451,0.23883689209402614,0.4489097810835715 hat,wye,2452,0.7256914244489449,0.07408098995861301 hat,wye,2453,0.4787447016730605,0.027781641677141033 wye,hat,2454,0.782215232098275,0.17908166243221946 zee,zee,2455,0.15793062293407878,0.9604346209844584 zee,eks,2456,0.09865545345297155,0.8348979205972645 pan,pan,2457,0.3927934924087789,0.06769141197493256 zee,pan,2458,0.02903168922821775,0.9416706505805262 wye,pan,2459,0.0074179863852393835,0.13412770282159325 wye,wye,2460,0.8546039006462764,0.5794887921093801 pan,pan,2461,0.39765418222695004,0.607893298841388 wye,wye,2462,0.9445996918832312,0.4706780924111563 pan,zee,2463,0.9563932642460863,0.31484480296442896 hat,hat,2464,0.6604485499983388,0.6145786977176719 zee,zee,2465,0.3505544906675998,0.1954960429503897 pan,pan,2466,0.7769548783450912,0.8220089791630163 eks,eks,2467,0.9350039614092526,0.8756536110782422 zee,pan,2468,0.7178372288982118,0.4062989111358041 zee,wye,2469,0.9204186818975437,0.4747739907393056 hat,zee,2470,0.910842331244497,0.8937381551221251 pan,wye,2471,0.36510756117868337,0.16172467779589483 zee,zee,2472,0.08880173246131728,0.7982278670793287 wye,wye,2473,0.07909826171256307,0.855556979661628 pan,eks,2474,0.7828499578474473,0.9442071626420061 wye,wye,2475,0.06324401276925695,0.5950858034074182 pan,zee,2476,0.2262395290029181,0.49451050699405674 wye,eks,2477,0.6306465815187388,0.46790600889102485 wye,hat,2478,0.4614473986661236,0.4721517855532317 eks,eks,2479,0.3091965203151934,0.9145596089559873 hat,wye,2480,0.014430995239748112,0.35346467775779145 eks,hat,2481,0.8284728324140498,0.2977503297359205 hat,zee,2482,0.15810752007547613,0.10215153278169598 hat,eks,2483,0.5002024621775637,0.9187983113959539 zee,hat,2484,0.04124901160673633,0.1095855587112885 wye,pan,2485,0.7244385390670799,0.17205034306117317 eks,hat,2486,0.4923487745128049,0.28889637616320174 wye,pan,2487,0.3300250547987864,0.22540259142646224 eks,zee,2488,0.0023333167684839173,0.24088326731558385 zee,pan,2489,0.5050787967691673,0.96990681663883 pan,pan,2490,0.853399144959847,0.3768453915244885 pan,eks,2491,0.11150304854042947,0.33331036327124963 wye,eks,2492,0.9214469071128305,0.28676404710502656 hat,zee,2493,0.8773662066308794,0.17323941800052478 pan,pan,2494,0.3207059888232746,0.8664631709525704 eks,hat,2495,0.910628314565378,0.4258002135216937 hat,zee,2496,0.1577724924590801,0.4739307550526024 hat,wye,2497,0.8872744210629263,0.14605498570574493 wye,hat,2498,0.23359521101241776,0.5844213774291599 zee,zee,2499,0.8613769284558995,0.9685505021744841 eks,pan,2500,0.8597477426689076,0.17079339571919316 eks,zee,2501,0.9988110946859143,0.8013707404671317 zee,eks,2502,0.08631339989521669,0.7626498621504472 wye,pan,2503,0.6021619570218234,0.7998420154096526 zee,pan,2504,0.8178599713104803,0.18283102556915032 pan,hat,2505,0.7319860671662751,0.11573142291632155 hat,eks,2506,0.38864742500184934,0.9549915162000734 zee,eks,2507,0.06006684599594547,0.32800136057911744 eks,eks,2508,0.2459351356992232,0.6992300046304194 hat,pan,2509,0.9399094021245685,0.9766927628695118 eks,eks,2510,0.6122854089898786,0.11735880955927658 hat,pan,2511,0.3658401332558662,0.8058278063627171 pan,eks,2512,0.9712759091673199,0.35741783697299145 wye,pan,2513,0.9941884027342468,0.7427222275160807 hat,wye,2514,0.759666601296956,0.5029288106582336 hat,hat,2515,0.41858436455494885,0.7397180761147025 wye,zee,2516,0.22158162509494428,0.1717438346245811 wye,hat,2517,0.25809778439746667,0.8942638085822656 eks,hat,2518,0.8156500849184675,0.08381965183304241 hat,zee,2519,0.023141000554160573,0.159821225039678 eks,hat,2520,0.38461965648830476,0.8779474089328696 wye,pan,2521,0.6746733937181614,0.12172129656898323 pan,zee,2522,0.3836823470783707,0.2530933368188705 pan,eks,2523,0.2467086564140698,0.9098280255547708 hat,pan,2524,0.5483698024028446,0.80652225685914 zee,pan,2525,0.9332167021929317,0.8274407370101524 pan,pan,2526,0.22953431238745692,0.07163851427849766 wye,hat,2527,0.021510700973820462,0.7950798338977892 eks,eks,2528,0.7481860062358446,0.6037295548285344 eks,pan,2529,0.3393051290797555,0.025397429828768137 zee,zee,2530,0.6149438991743728,0.7634078131671355 wye,zee,2531,0.6511465358134351,0.0536653751892201 wye,wye,2532,0.0054964576725233805,0.28953245784366877 wye,hat,2533,0.15518569216470812,0.5686747295053566 zee,wye,2534,0.12207545315374224,0.9746444335548179 zee,eks,2535,0.5565415302093949,0.10288505903505452 wye,wye,2536,0.43315262752486194,0.27205902504143986 pan,hat,2537,0.3113077953556219,0.8505260803244152 eks,eks,2538,0.38906239415188226,0.2685051550780454 zee,hat,2539,0.6345180823665123,0.714272732680164 zee,pan,2540,0.7633387673070651,0.16850854825088746 wye,eks,2541,0.9200450459897079,0.5203187898658775 hat,pan,2542,0.416076924166804,0.4567226915609339 zee,eks,2543,0.8882507111625345,0.6834591517880225 hat,zee,2544,0.6234518321227132,0.568093714839173 pan,zee,2545,0.04811425968953953,0.5966158652406183 zee,zee,2546,0.5921140592243828,0.3199967249370237 pan,hat,2547,0.24011644563078283,0.12009590313568308 zee,hat,2548,0.4304009679094255,0.3235635213023209 eks,zee,2549,0.7611031921737661,0.689829708430865 zee,hat,2550,0.9107046316959098,0.9267025956859704 zee,zee,2551,0.5534453229003656,0.19470214949450948 pan,zee,2552,0.7099889805872556,0.2612275639524275 pan,hat,2553,0.8260887056078599,0.6576752537408973 pan,pan,2554,0.4479850467242381,0.605644729638017 wye,pan,2555,0.8635009458180566,0.057986705329265864 eks,pan,2556,0.680151798371677,0.9721202344719171 zee,pan,2557,0.3624846239071149,0.38096311190739685 eks,eks,2558,0.39585447743449853,0.9090232688363228 pan,eks,2559,0.41182608064067716,0.4651557950827221 zee,hat,2560,0.8207042664095232,0.972493490219255 eks,eks,2561,0.9568943633067363,0.9942427604342767 pan,wye,2562,0.7844571232021518,0.25212822563492654 eks,eks,2563,0.7448606140977615,0.7677875733269816 eks,eks,2564,0.6984324028424346,0.6867698395582814 wye,eks,2565,0.3850930672708389,0.6142341088294833 pan,pan,2566,0.027948166482267056,0.10155712046334942 zee,pan,2567,0.6373779619859908,0.8254690568634606 hat,zee,2568,0.5351681178046073,0.8555068797919759 eks,eks,2569,0.6837390714119882,0.2555760527745451 zee,wye,2570,0.7332356879541984,0.7095236956282258 wye,zee,2571,0.6045866476300921,0.9472308056954024 zee,wye,2572,0.5192819052899776,0.18543077448215517 pan,eks,2573,0.6173980620064918,0.7399111725286391 wye,hat,2574,0.12423956865216534,0.989639508760292 eks,hat,2575,0.33031955019827075,0.7108284566198849 hat,eks,2576,0.8598307222093972,0.677493082731475 pan,zee,2577,0.2591109015365989,0.9393069496539326 zee,eks,2578,0.11420274089804072,0.6781907800368309 hat,wye,2579,0.470168322914005,0.3245499585879692 hat,wye,2580,0.7501598293607254,0.4721867436018571 eks,hat,2581,0.625746894720574,0.33737938119664646 pan,eks,2582,0.4136169698568053,0.3221257100507432 zee,wye,2583,0.815721986649748,0.45027193508163077 pan,zee,2584,0.32285180303468286,0.5767328321662406 pan,pan,2585,0.3671198622625018,0.04290161860716368 hat,eks,2586,0.7548839524754403,0.3140601750346328 pan,wye,2587,0.149414261676316,0.8817567568143645 pan,eks,2588,0.13689661134333897,0.5584038012783021 hat,pan,2589,0.9259610701768484,0.7567071664063917 zee,wye,2590,0.35176292753881166,0.7374790902726833 hat,hat,2591,0.09004868118257148,0.6922893442005552 hat,pan,2592,0.18016216606425406,0.2099121503498219 pan,hat,2593,0.6510610556921332,0.10742569633195376 eks,zee,2594,0.07159878226683902,0.20989783292032282 hat,hat,2595,0.9678207161209708,0.992049177363607 eks,hat,2596,0.18014846649609306,0.5629283001780467 hat,pan,2597,0.6191641186208192,0.91398214172482 eks,hat,2598,0.012851434303710274,0.14814227972741656 hat,zee,2599,0.9048118287143257,0.8847594382115711 zee,wye,2600,0.5561307219276355,0.15276515927874457 zee,eks,2601,0.19257014095901703,0.7774457342825621 wye,eks,2602,0.9514647938068078,0.10795242094349111 hat,wye,2603,0.31179190517346567,0.01609407680873831 wye,wye,2604,0.47775304052473055,0.38671047718640983 eks,pan,2605,0.2344602349071444,0.8645430924168496 eks,zee,2606,0.1439484898344945,0.9439005895698022 eks,eks,2607,0.8629787970160852,0.8183015089362451 pan,zee,2608,0.880820846632719,0.4542838900435503 wye,eks,2609,0.5124204798290518,0.4054974158118896 wye,hat,2610,0.14713673147626471,0.193770427584398 zee,wye,2611,0.9269147206987636,0.3354668582497363 pan,wye,2612,0.48759095161412014,0.9486718920730824 pan,pan,2613,0.9093120035098351,0.993257702527396 hat,wye,2614,0.7781647480152264,0.993772240196278 hat,hat,2615,0.275311283835037,0.741356597630266 eks,eks,2616,0.8400827662084357,0.904384801897908 pan,pan,2617,0.44875309896113624,0.20709074311528453 wye,zee,2618,0.7355696569603329,0.27564344454988243 hat,wye,2619,0.19051153642139496,0.46651684239833613 pan,zee,2620,0.5592572385681548,0.672039894065432 wye,wye,2621,0.9091768138788122,0.07363030569876483 hat,eks,2622,0.21855190429616178,0.306255719577206 hat,zee,2623,0.5579915433786629,0.9351922009068756 hat,wye,2624,0.16649980465987524,0.9174497541816296 eks,eks,2625,0.9025640383772568,0.4657693509889542 wye,zee,2626,0.21020261586647726,0.2011091555698421 hat,eks,2627,0.037644003067944465,0.9166549903188604 eks,eks,2628,0.5037459860860201,0.20718835826701032 eks,eks,2629,0.7314957198821074,0.0818653656966235 hat,zee,2630,0.9194151240931991,0.07423066472063256 hat,hat,2631,0.8669833462776865,0.024944214178881152 hat,hat,2632,0.40619921403492654,0.6776699682132551 hat,zee,2633,0.11167516897133345,0.1968557916169683 wye,zee,2634,0.12637912495756354,0.932738782222326 zee,wye,2635,0.6187681447031627,0.274704452983646 pan,wye,2636,0.6460342181062689,0.7795324745240246 zee,zee,2637,0.19576834398868515,0.679453943382103 wye,eks,2638,0.36177627776550847,0.8386225553120263 eks,eks,2639,0.12492716932261638,0.21510868197623745 eks,wye,2640,0.885996241979663,0.059743642576263634 eks,wye,2641,0.7008702235836195,0.39708447632667465 hat,eks,2642,0.19929727396144037,0.5393711342556087 wye,eks,2643,0.7038379533640264,0.2415724804873508 eks,pan,2644,0.1021121482244629,0.676614797112832 wye,zee,2645,0.22135649292487047,0.3353372961478748 hat,wye,2646,0.8302037270628269,0.29829682191098783 zee,hat,2647,0.7129222271572655,0.3569951209382327 wye,wye,2648,0.5590007902215932,0.44142931845984645 zee,eks,2649,0.8676857104115077,0.6062661030015066 zee,pan,2650,0.9849457970315111,0.0914154862759321 zee,zee,2651,0.08318080628977687,0.08723840975656705 hat,pan,2652,0.3556516386966647,0.6019467128167675 hat,wye,2653,0.279635601734451,0.4522275293507577 pan,zee,2654,0.2553738664507069,0.8359675139928466 pan,eks,2655,0.20861278160790098,0.09276404710956598 eks,eks,2656,0.714144646455272,0.3211201665161757 eks,eks,2657,0.9118213055286543,0.2304692673683172 wye,eks,2658,0.8878589425876583,0.16500927178713598 pan,eks,2659,0.39231354538410634,0.19261788337249341 zee,hat,2660,0.5125720965755153,0.3101033226433013 zee,wye,2661,0.9409834902940938,0.06519737249713942 zee,zee,2662,0.8522522520922186,0.0821437591034958 zee,wye,2663,0.7126684401510096,0.8051899200649238 eks,wye,2664,0.151141097038609,0.671754932411165 zee,eks,2665,0.9622613991461785,0.19912987672139137 pan,zee,2666,0.9074679274351196,0.8957847934010839 hat,pan,2667,0.9240389772763548,0.5231982813953002 pan,eks,2668,0.3525652118913354,0.49330814134258383 hat,wye,2669,0.14565423862972182,0.18195721833206513 wye,hat,2670,0.5314631858298513,0.9247384504550191 eks,pan,2671,0.2191775509938665,0.16221454397918067 zee,wye,2672,0.2957478300120929,0.9566416400315985 hat,eks,2673,0.5317253402583432,0.47720559893968584 hat,wye,2674,0.5685867476642044,0.9536560186396535 eks,zee,2675,0.7116584351173386,0.8813675632259913 zee,zee,2676,0.6369443311903168,0.20245472621871452 wye,hat,2677,0.03828177316116377,0.694988753462705 wye,hat,2678,0.44478934074526144,0.6593596173323781 zee,wye,2679,0.4234179513345332,0.9156320336038198 zee,zee,2680,0.28695958426961987,0.35447908228108094 zee,zee,2681,0.5753537491643719,0.8698920433502088 hat,eks,2682,0.7144081950600689,0.8253921612815761 pan,pan,2683,0.9474694135785586,0.5331573468403473 pan,eks,2684,0.3066978542374318,0.9327810898395875 wye,pan,2685,0.5059670030001199,0.5002012382517893 wye,wye,2686,0.5187856380368512,0.8665210971116168 zee,pan,2687,0.5064156313100883,0.5164969637045003 pan,wye,2688,0.9170439177596071,0.7855194635003687 zee,hat,2689,0.7018760912024224,0.9018580557735235 zee,eks,2690,0.9007898309642012,0.45508381746621207 zee,zee,2691,0.5231651296128275,0.09791858989165081 wye,eks,2692,0.2877718302322071,0.7350128229993341 pan,zee,2693,0.6621261710619304,0.765604369363381 wye,wye,2694,0.5113378128718417,0.7447015937237151 hat,eks,2695,0.20486591930659304,0.08546083685115857 eks,hat,2696,0.04425126652191069,0.9193247377962478 pan,hat,2697,0.4397272166348868,0.5119020678265614 pan,wye,2698,0.24786027932789856,0.25028548790543437 hat,hat,2699,0.18362126379498567,0.3583685237385621 wye,zee,2700,0.08296135187962883,0.9476795899696359 wye,eks,2701,0.2631227677304565,0.8380786611056333 wye,hat,2702,0.6107721059185136,0.29607498743239313 eks,wye,2703,0.385921871325144,0.72206084966027 eks,eks,2704,0.7289032202296384,0.943448586243151 pan,zee,2705,0.2681131456172976,0.03881677277584117 eks,eks,2706,0.042331033396890594,0.5816340794859904 zee,eks,2707,0.09716550757790055,0.7946966787875323 eks,wye,2708,0.6794836901391871,0.05370583587162048 hat,zee,2709,0.4719223070024049,0.8798667170009199 pan,zee,2710,0.3235306005938401,0.3944479990658286 zee,zee,2711,0.6152705208747911,0.1871405298405333 eks,wye,2712,0.28680813614749745,0.9091560294185156 wye,hat,2713,0.7816282897070512,0.8725529048814329 wye,eks,2714,0.5337563133061932,0.8113476754885716 wye,eks,2715,0.830862652732706,0.31332718593186215 eks,wye,2716,0.632360024350908,0.3523899339535477 hat,eks,2717,0.8517633647797415,0.6075520102742804 hat,zee,2718,0.3739110752469652,0.7344229221023192 pan,zee,2719,0.13091802232794136,0.4147418371197401 zee,pan,2720,0.875012865695414,0.6301510344124231 pan,pan,2721,0.7634027233725996,0.9537462437208611 eks,eks,2722,0.7485292786111598,0.060074780780270065 wye,zee,2723,0.4692411142423141,0.18086715737750947 wye,zee,2724,0.3016910888319093,0.2815838391993606 eks,pan,2725,0.09842524478857917,0.4039455571089149 zee,hat,2726,0.673450582305474,0.2368758099721252 zee,hat,2727,0.3699736290437986,0.9456050995886015 zee,wye,2728,0.8748783567240713,0.9127365833223035 pan,eks,2729,0.9890321807426645,0.6544105013007959 eks,zee,2730,0.5913012155193706,0.5125849403012366 pan,hat,2731,0.7319063656923598,0.3661739653385341 pan,eks,2732,0.7776625957923161,0.7377246871264523 zee,eks,2733,0.11325755544848148,0.32415018564505305 eks,pan,2734,0.4544389365010312,0.36274017551484594 zee,hat,2735,0.6753256152256654,0.7111448175040769 zee,pan,2736,0.13316236671850434,0.49210023866083397 wye,hat,2737,0.8250578484602521,0.44752314931586656 hat,zee,2738,0.6324404521389477,0.5991554446942754 hat,zee,2739,0.4523752260828632,0.4097560532434581 pan,eks,2740,0.16601226995675156,0.18151654867600586 zee,pan,2741,0.8311173071571613,0.40630856689489725 hat,eks,2742,0.5093718066070119,0.9913946330960695 hat,pan,2743,0.3698356457904749,0.912970532909554 pan,hat,2744,0.5286755809647917,0.1651174363994401 wye,pan,2745,0.028208712274286007,0.45797747909936903 eks,pan,2746,0.1995882002967131,0.9988195280621234 wye,eks,2747,0.801718741445332,0.8343436520177938 zee,eks,2748,0.11153132519318998,0.17527565983385196 wye,zee,2749,0.39908796305565186,0.8203196495353728 hat,eks,2750,0.7691621480087831,0.04624795153739847 wye,zee,2751,0.8233374811260633,0.28118965684997943 wye,zee,2752,0.5421828769626178,0.6932556944834627 zee,eks,2753,0.38158944973875963,0.9978357823939198 hat,zee,2754,0.7970322675458169,0.9056375064474206 eks,pan,2755,0.5550958032704141,0.42460295509180657 wye,hat,2756,0.5906831195384066,0.8552080634179315 eks,eks,2757,0.9555433089030078,0.1012177575954587 eks,zee,2758,0.7664329663706339,0.15228215819457713 hat,zee,2759,0.7270670926222843,0.029636297862852157 pan,hat,2760,0.5529628324424195,0.672560428419093 wye,hat,2761,0.9138967886693034,0.9213145915711659 pan,wye,2762,0.17716806320819933,0.5447158699924802 hat,hat,2763,0.022393825286782576,0.858016600540151 hat,hat,2764,0.603392328507201,0.2363695702425591 zee,hat,2765,0.6459575860068912,0.49490736001017566 pan,zee,2766,0.830723134231425,0.665433991421394 hat,pan,2767,0.3457100418361476,0.4664053612526614 pan,hat,2768,0.051556933697434526,0.17976239369842706 wye,zee,2769,0.9668199998927879,0.775654943293786 hat,pan,2770,0.27594379871232555,0.07411463454718337 pan,wye,2771,0.1174987458859269,0.005708083531397623 pan,pan,2772,0.05392321788248433,0.8060831057224058 eks,hat,2773,0.69291317851219,0.7469948294872729 eks,hat,2774,0.9533669824863673,0.12771923797645246 pan,pan,2775,0.7184184194719956,0.4904968081523946 zee,wye,2776,0.7910444608980398,0.6491427094511163 pan,pan,2777,0.7969059524383465,0.669103483462524 eks,eks,2778,0.4044385597446536,0.8914365675089366 hat,hat,2779,0.3474761482419263,0.8741149984223016 wye,pan,2780,0.2907618155304045,0.6492086022779383 eks,wye,2781,0.4061806402666983,0.36644038967272896 hat,wye,2782,0.6917795282383538,0.9185836699082268 pan,eks,2783,0.5239744947947007,0.100504836859581 pan,hat,2784,0.18256579384445848,0.6843696194592838 pan,wye,2785,0.621716134059889,0.5300633007674981 pan,pan,2786,0.591903135564393,0.9817870263065608 wye,hat,2787,0.8988078039296443,0.3324514276733742 pan,hat,2788,0.17679205732662606,0.7527210010920257 zee,wye,2789,0.053717462803680616,0.05452469526931114 wye,wye,2790,0.7984829227541226,0.5087673080038057 eks,wye,2791,0.25879893217096905,0.8220530299185523 eks,hat,2792,0.574814951546933,0.838521058328272 zee,hat,2793,0.016119118073299465,0.048486447355322926 zee,eks,2794,0.650899632819198,0.32295818131218135 eks,hat,2795,0.9828163659495991,0.7271574141684917 eks,wye,2796,0.9795666089681072,0.6936068995013053 wye,eks,2797,0.0955127453952278,0.3193873136743336 hat,hat,2798,0.6770658307401128,0.9612492884585951 wye,zee,2799,0.21161639516025754,0.5474527237981746 wye,hat,2800,0.7093628384045736,0.345927559025347 eks,zee,2801,0.7870199221618309,0.43806525264266394 pan,pan,2802,0.8498273803284082,0.6695254936819108 hat,pan,2803,0.9905728716452045,0.06817205087359623 eks,zee,2804,0.6933897404058519,0.38922468118999143 pan,hat,2805,0.7075088693645657,0.42506017139149 eks,pan,2806,0.45982174205757165,0.21639041126785252 eks,hat,2807,0.8031386749353514,0.0456999691548835 eks,wye,2808,0.7600783211059084,0.007237947568672576 pan,eks,2809,0.7165979106211948,0.39409630219954705 eks,pan,2810,0.18551339605772543,0.380046863146443 zee,zee,2811,0.5396926661842615,0.7423060132429089 wye,hat,2812,0.4080552691530873,0.23715395574697773 pan,pan,2813,0.17404926584053904,0.80645434088305 wye,pan,2814,0.4232831301914316,0.003575690575454038 wye,hat,2815,0.2753349005711472,0.2981607803589118 wye,hat,2816,0.0548741999804403,0.8717529254849362 pan,eks,2817,0.9437261643896192,0.6585456269208473 pan,eks,2818,0.5445166922773753,0.38460962685588984 wye,zee,2819,0.6749831740629705,0.7181822687947076 zee,wye,2820,0.3580004431691963,0.6240683366699936 pan,eks,2821,0.4716526277671149,0.9325757014700042 wye,zee,2822,0.14098677511513125,0.5582313771144721 pan,pan,2823,0.8970769946774317,0.8143443328628265 wye,wye,2824,0.7341426123679048,0.6900466491014886 hat,zee,2825,0.9719365537990282,0.24324139738802553 wye,eks,2826,0.4233744319170222,0.8058439449826745 hat,pan,2827,0.007693535697102405,0.358018000756796 hat,wye,2828,0.41676624317270083,0.6624100442632929 wye,pan,2829,0.8978699958731674,0.5078843103822455 hat,hat,2830,0.21960808360173467,0.8264732984361639 zee,pan,2831,0.9137972915067373,0.8146525548769581 eks,pan,2832,0.4530789281841252,0.6341898004637524 zee,zee,2833,0.6526333204333133,0.8962754703239799 zee,hat,2834,0.6338906419145569,0.08004293967389409 wye,wye,2835,0.7415127201223656,0.2613633462577486 zee,hat,2836,0.846671334452858,0.24855668017395638 hat,hat,2837,0.5655910185189842,0.9183250775072218 hat,eks,2838,0.16902131337166026,0.7584866069936619 hat,pan,2839,0.5193100111654236,0.20166854425847602 pan,zee,2840,0.5303948386863744,0.9080864546926949 zee,wye,2841,0.09731314104522193,0.31228305132515555 pan,eks,2842,0.7549176932437908,0.8640405171715994 wye,zee,2843,0.2777710660360485,0.5714718654538901 eks,pan,2844,0.7384309958383901,0.36866931513449486 pan,pan,2845,0.606181068721247,0.616002039068612 hat,wye,2846,0.3265631003841204,0.374492300721745 hat,zee,2847,0.7881568154651081,0.5559821919859138 pan,zee,2848,0.9624756126657645,0.9574074942948696 eks,zee,2849,0.12952438020370405,0.9270908752540581 wye,hat,2850,0.05470860141262479,0.04658298467108257 wye,wye,2851,0.0020446268545805113,0.009943917182808737 wye,pan,2852,0.42940687832989866,0.1468318742685415 wye,wye,2853,0.990161382728111,0.3499379688024109 eks,pan,2854,0.6338735592995826,0.15761281386438764 wye,eks,2855,0.9419146917622048,0.6060209650374142 eks,pan,2856,0.7115880622754508,0.8964623782367054 hat,hat,2857,0.08346734323720095,0.6474711871979782 zee,wye,2858,0.2826186316140814,0.6695478005175661 eks,pan,2859,0.02447776772167043,0.20688297772055575 wye,eks,2860,0.5600033166985924,0.3484813313151226 hat,eks,2861,0.9138579231935814,0.16832803063229773 pan,pan,2862,0.09800893976590253,0.8457845208352374 pan,hat,2863,0.1834990915331669,0.528761462797945 zee,wye,2864,0.42109865017533243,0.9324216458693535 pan,hat,2865,0.1829857546300825,0.7541272830946107 eks,zee,2866,0.8934857222410671,0.6256367404608381 wye,zee,2867,0.9489727374596107,0.8632434631696883 eks,hat,2868,0.4247265114092217,0.9641274059396724 hat,pan,2869,0.04903454618587899,0.48019476723366983 wye,eks,2870,0.13588621486865515,0.46171851137675657 eks,hat,2871,0.8766196552731117,0.3432628950600898 eks,hat,2872,0.0824464474583485,0.41500058370516746 wye,zee,2873,0.8623888758101239,0.47502811946398604 zee,wye,2874,0.1681357784018227,0.8392880686727994 hat,hat,2875,0.8882531275158145,0.30970406610040124 wye,hat,2876,0.4100612516068668,0.5241347164240856 zee,wye,2877,0.7488377252084604,0.4727904641808244 pan,zee,2878,0.9718428999206795,0.32151486300776966 wye,zee,2879,0.3368479146214749,0.319508849901748 pan,eks,2880,0.6248138883456014,0.4323808730206413 hat,wye,2881,0.8870137115236287,0.6557420558079095 wye,pan,2882,0.20508256902105493,0.24625712578663705 pan,eks,2883,0.17469445546060924,0.7502077456439166 hat,eks,2884,0.01803842185770055,0.7123720723174057 wye,zee,2885,0.4079982232706686,0.42382421978789164 eks,pan,2886,0.5056322667148411,0.4290653381431411 pan,wye,2887,0.6338351841317565,0.4907041096317738 zee,hat,2888,0.9703529871646023,0.517811760850648 wye,zee,2889,0.7686343850863733,0.5742253808106673 eks,zee,2890,0.18685211627025788,0.2370568703128223 wye,eks,2891,0.3968173236793585,0.04738783308138439 hat,pan,2892,0.5956805463320682,0.3609140423721199 eks,zee,2893,0.5531039940725316,0.7306512817266388 pan,pan,2894,0.8634113930447151,0.042975650168931456 zee,eks,2895,0.9753708467911276,0.615940530686146 zee,wye,2896,0.7277583590103486,0.49504307091898514 hat,zee,2897,0.5678455159032189,0.7910090421492175 pan,zee,2898,0.23271930748884184,0.4088902304553087 pan,pan,2899,0.15868622973775615,0.9693856805728462 hat,wye,2900,0.9619050081633596,0.7954950376163313 zee,zee,2901,0.9156042982679851,0.46085055630239913 hat,pan,2902,0.2080952766035833,0.9323723777621576 pan,eks,2903,0.34600684567011875,0.2803937160495198 zee,eks,2904,0.5195992086409938,0.57773770500564 pan,hat,2905,0.004044853443978869,0.5461411566611463 zee,eks,2906,0.8608071169231579,0.9846761059035525 eks,hat,2907,0.5503089823322713,0.7762987168630092 hat,hat,2908,0.06422544393476348,0.04831803951278302 eks,zee,2909,0.9735920834852287,0.6045980049718644 pan,eks,2910,0.4552157780113615,0.45436268452495654 eks,pan,2911,0.3540491877210178,0.14296150972097188 zee,zee,2912,0.34907798271188584,0.6838642852489554 eks,eks,2913,0.9528487416801219,0.9770139821982978 zee,zee,2914,0.6713487756784149,0.6851459487246977 eks,wye,2915,0.18003026071883055,0.7605790766570338 eks,zee,2916,0.3111065625389652,0.4900633108457091 wye,pan,2917,0.10226439038444546,0.32221570886934225 eks,pan,2918,0.07324611102045919,0.5397221232035317 pan,hat,2919,0.5539681113785856,0.22898580497204302 hat,eks,2920,0.584814627427767,0.9854086527153794 pan,wye,2921,0.8092163085387806,0.5552811725641776 hat,eks,2922,0.38004354197524004,0.9564525660110145 wye,zee,2923,0.5170783036546709,0.7221456579996477 wye,zee,2924,0.6270174635047546,0.23008678243789993 eks,eks,2925,0.7696289189244249,0.057396523424096735 zee,pan,2926,0.5318019616386042,0.9627343736200256 wye,wye,2927,0.2329842191757341,0.7858658681445121 eks,zee,2928,0.6133201827668029,0.49769995246446974 hat,wye,2929,0.3314067590262917,0.2089161550583003 pan,hat,2930,0.0946626417566162,0.7642456152582329 zee,wye,2931,0.4294178052742412,0.001833098567169067 zee,eks,2932,0.27878008616849204,0.862578455284283 hat,wye,2933,0.4977072740481646,0.6875844573519313 hat,eks,2934,0.06412360974253373,0.22600333579859744 pan,hat,2935,0.8626379833482911,0.9150292252328203 zee,wye,2936,0.5768883618530124,0.918139479854031 wye,pan,2937,0.5377017444604313,0.6977594925111669 pan,hat,2938,0.2765222912827068,0.20398898222008643 wye,pan,2939,0.15430209185442478,0.3054947262512059 zee,zee,2940,0.33908084985171905,0.3559785704920787 wye,eks,2941,0.888622878020096,0.9305395559526985 pan,hat,2942,0.8426210638730054,0.4910437389080752 eks,wye,2943,0.43116472402260675,0.5431912750926549 pan,pan,2944,0.22818877662838155,0.08013191447933687 hat,hat,2945,0.855770419141142,0.9504972075792718 wye,wye,2946,0.7063288975843842,0.14617579736608532 hat,pan,2947,0.4735373969736173,0.6728372575825865 zee,eks,2948,0.027656885408126497,0.8228770381611789 pan,zee,2949,0.9950626279412539,0.3439388785004105 pan,eks,2950,0.3557454554545477,0.35596931491049777 zee,pan,2951,0.45736186455134964,0.8552078753422031 pan,pan,2952,0.6956146036887194,0.7094299324737594 hat,eks,2953,0.6683768178930775,0.25260524697474684 zee,zee,2954,0.7139612884395727,0.521259999124225 hat,hat,2955,0.5751429586126809,0.17785127736470563 pan,pan,2956,0.17229422895082336,0.24883239435188065 pan,hat,2957,0.14582342165786877,0.4356307792657701 zee,eks,2958,0.9798520574677635,0.42174871239678 hat,eks,2959,0.8069448445065791,0.7001343626890119 pan,hat,2960,0.3756435277345719,0.047826156911501605 eks,pan,2961,0.8176993405474695,0.995125161400413 pan,pan,2962,0.6998988727502398,0.4001842416106014 eks,pan,2963,0.11173104822679536,0.6370518407136563 hat,wye,2964,0.9298169180566062,0.09131710178593277 pan,zee,2965,0.4596689215584,0.6112438501475592 wye,eks,2966,0.2641518333282219,0.38955465518639776 zee,zee,2967,0.42822201314164976,0.006074939297309734 eks,eks,2968,0.20950457390651211,0.07888932379405189 wye,zee,2969,0.289378401347387,0.7440165584936792 zee,pan,2970,0.2731397114360453,0.8759259221000683 hat,eks,2971,0.8266785429565111,0.897325116301253 pan,hat,2972,0.7032052034018701,0.2009782870263226 hat,wye,2973,0.19266544419630705,0.5730436792504735 pan,wye,2974,0.20451527019757088,0.0206184692976914 wye,pan,2975,0.51006790151616,0.586042056906746 pan,zee,2976,0.8782971392557426,0.7428023579415594 wye,hat,2977,0.9504447063856765,0.94067852216513 zee,hat,2978,0.33851596868477396,0.8334798475916935 wye,hat,2979,0.3014946499505823,0.3166621276039525 zee,zee,2980,0.8838963894635692,0.8052149644100633 wye,zee,2981,0.5154924055050366,0.7978166707046667 wye,eks,2982,0.613351743297237,0.8395323005164117 zee,eks,2983,0.48954358421735966,0.9354933367243893 zee,eks,2984,0.6070104477111674,0.42140737208696954 hat,eks,2985,0.4613625094242657,0.9834443486684832 hat,hat,2986,0.012529011658969247,0.19751371734088574 hat,hat,2987,0.6395639802554064,0.2647659207339501 wye,eks,2988,0.8289886576552059,0.9130379115658384 zee,eks,2989,0.6115566437731396,0.654382371446181 eks,eks,2990,0.9192312982792387,0.933633690100049 eks,hat,2991,0.17088819954927414,0.1940915669377936 zee,eks,2992,0.7975067562633096,0.7188787477650647 wye,hat,2993,0.7386984969630342,0.5918321915044837 hat,pan,2994,0.6175875126511366,0.5310338441204902 zee,wye,2995,0.1553956256476441,0.27030029752780416 wye,pan,2996,0.7517640622761323,0.48287590582310524 eks,pan,2997,0.7960098234515162,0.9293203088509989 wye,wye,2998,0.2259174651286836,0.5554793712549178 zee,pan,2999,0.19942029200045563,0.09337986668927678 pan,hat,3000,0.7814546932332067,0.6000946585621107 eks,eks,3001,0.5998159531946954,0.7729581156588532 hat,wye,3002,0.8285272249030134,0.9302564445098462 eks,zee,3003,0.32175750111047774,0.9174648845846595 pan,hat,3004,0.6936167302032076,0.34099561246852717 wye,hat,3005,0.05536700717456822,0.10240541011411275 wye,pan,3006,0.4707778178190908,0.9739982771022873 eks,eks,3007,0.33350360416191926,0.2321416996453538 hat,wye,3008,0.793700582315604,0.7819730529107373 wye,zee,3009,0.8588342479923059,0.6774442006552894 wye,wye,3010,0.7683834748330075,0.8315497206524393 wye,zee,3011,0.4808351970354847,0.4758472571744147 pan,hat,3012,0.3219915061675801,0.5309453409773968 zee,pan,3013,0.8669507229743478,0.9303002206266048 zee,pan,3014,0.6036472794089942,0.5392590440608642 zee,wye,3015,0.44076973462262803,0.22601425557115284 eks,eks,3016,0.14517527208436098,0.4422293378481955 eks,eks,3017,0.8306135722899411,0.10636363353069911 hat,hat,3018,0.46054396234881867,0.3731307386931515 hat,wye,3019,0.7451272273092002,0.9191708709874246 eks,wye,3020,0.36662020525022576,0.562402663612683 pan,eks,3021,0.6322320887182494,0.37724024424135094 wye,pan,3022,0.7585013008000357,0.24891818506988306 pan,eks,3023,0.7972083825965124,0.6785915910266607 wye,pan,3024,0.2264089359117355,0.02834029309178865 zee,wye,3025,0.20048730201468612,0.22503692249617124 zee,wye,3026,0.620337023862303,0.8479919985880766 eks,hat,3027,0.4902155165931996,0.34683593338631313 zee,pan,3028,0.4877814673013795,0.6540470265442844 zee,eks,3029,0.11413363994060732,0.18491037637118812 pan,pan,3030,0.05555019543717121,0.25564439988112275 zee,pan,3031,0.41930991083452396,0.9053752256549477 wye,zee,3032,0.6829080864945356,0.2589038995740719 zee,hat,3033,0.1945237174643939,0.04785693318973694 eks,hat,3034,0.777291960919939,0.13986709661108743 zee,zee,3035,0.22350085923447272,0.6932534345647985 pan,eks,3036,0.6669439868955551,0.5083766717543267 pan,zee,3037,0.4601123673241928,0.589035207964983 zee,wye,3038,0.9846294915268529,0.7245527090730468 wye,eks,3039,0.17248806811657325,0.3766117373894895 zee,hat,3040,0.09621613036773924,0.09274768655857912 eks,eks,3041,0.5351382501931934,0.12235949381541733 pan,zee,3042,0.7822379718483918,0.3278369973742308 hat,wye,3043,0.03791889192037379,0.3879285406506343 wye,wye,3044,0.008609845384408454,0.6630442142382447 eks,eks,3045,0.8779655290898389,0.9276702739930572 hat,hat,3046,0.960016973419662,0.08732247689827766 wye,zee,3047,0.8309049399070346,0.7082428624476516 hat,pan,3048,0.3745994561931344,0.8417922239746083 pan,zee,3049,0.5327270669677042,0.30368855674177586 eks,wye,3050,0.8299993357777166,0.2238418279755512 hat,zee,3051,0.35348860200536536,0.8211471760032776 hat,hat,3052,0.022155682158138235,0.22804250396069936 eks,wye,3053,0.40298772117416637,0.5310548635233784 zee,hat,3054,0.8975586946419573,0.8371128774375303 pan,wye,3055,0.11898366225879431,0.973067950910434 zee,pan,3056,0.5580433239689949,0.2207032579590179 hat,eks,3057,0.6216704870927365,0.5368073736943582 hat,zee,3058,0.7143749715262198,0.8268686099704066 pan,pan,3059,0.6284468013862667,0.9107779672871813 pan,hat,3060,0.6279788132841725,0.7966531861283309 hat,wye,3061,0.3399453078984599,0.9563683369526331 eks,wye,3062,0.7538022280814409,0.4317566099915433 pan,zee,3063,0.8834284343378148,0.8232921415981069 pan,hat,3064,0.4713927103837089,0.9270600022151935 wye,eks,3065,0.725831736511898,0.5497593420610962 pan,eks,3066,0.3546378076377753,0.751660464737342 pan,hat,3067,0.14912115137943105,0.8537419730854358 hat,zee,3068,0.15034534971981672,0.5991052546814497 hat,zee,3069,0.4210145115702397,0.6847329962869824 zee,zee,3070,0.8140199067124364,0.40845696417778843 wye,pan,3071,0.4419206171851453,0.15330946039593318 zee,hat,3072,0.2169139656710095,0.024309947214042227 zee,wye,3073,0.3204085048627119,0.5177596022884065 hat,eks,3074,0.6550427877323648,0.571804931654245 zee,hat,3075,0.09224547266943217,0.27630390686135065 wye,hat,3076,0.142566387091713,0.27801610209718775 zee,pan,3077,0.9828350031666842,0.2911042298547496 eks,pan,3078,0.7520400964406814,0.06477631117085936 eks,pan,3079,0.7876590569822286,0.08167315862021418 wye,hat,3080,0.9121720715420508,0.27595593913920513 hat,eks,3081,0.9256606535733007,0.6699893991173689 pan,wye,3082,0.02986898401074356,0.02865740061148525 hat,pan,3083,0.43255930345398574,0.16451673283391233 zee,wye,3084,0.761217263172412,0.38734953067609035 zee,pan,3085,0.9640093000659047,0.025667634889210977 zee,zee,3086,0.6070527044301867,0.36774684626978793 hat,eks,3087,0.8008471329449127,0.4950773666671012 eks,eks,3088,0.42383094655044284,0.3113550671070515 pan,zee,3089,0.505503302798009,0.3205385386369711 eks,pan,3090,0.45506560432905374,0.48045443192943516 pan,wye,3091,0.7238244246263034,0.2314305015321535 pan,hat,3092,0.2820421299406517,0.6948986244320373 eks,wye,3093,0.6296930505212618,0.28305081013586286 eks,hat,3094,0.9895960932461209,0.48997629742606663 zee,zee,3095,0.5250712031905327,0.25343374690524134 pan,zee,3096,0.85788069900133,0.5286390892779154 hat,hat,3097,0.8481737493253426,0.22795592498176165 zee,hat,3098,0.8134078580345757,0.04760505233880952 zee,eks,3099,0.13183545798325502,0.7832803595814398 eks,hat,3100,0.07108443716756485,0.31816018481405606 pan,hat,3101,0.4069137599331083,0.9819670340442527 hat,zee,3102,0.3343254952473229,0.035494955233627556 zee,eks,3103,0.23523417159414106,0.98949954046695 hat,wye,3104,0.3204490612720853,0.0691818430184431 wye,hat,3105,0.9472477355051101,0.6702789389942152 eks,hat,3106,0.178408829993969,0.47163529118192904 wye,pan,3107,0.2923687400336503,0.5988171487852212 wye,wye,3108,0.0967008571691299,0.5910810037087718 wye,hat,3109,0.183095401433091,0.5893121732700413 wye,pan,3110,0.8967101456216812,0.8085016458992474 eks,wye,3111,0.9706322412385915,0.1385826306820812 zee,eks,3112,0.4493727221740449,0.16704994503241388 pan,pan,3113,0.7927985055919656,0.9023056637507897 hat,pan,3114,0.2690618409790604,0.9750006243924199 eks,zee,3115,0.8122516823974709,0.034777149921719985 zee,wye,3116,0.8411583744381673,0.3367223940453469 eks,hat,3117,0.6278279883921511,0.6783776757536581 wye,pan,3118,0.0780608220831499,0.34219170347854155 pan,hat,3119,0.0773284361282679,0.8087620482239243 pan,zee,3120,0.6479059739692804,0.4847407102135154 hat,pan,3121,0.44037371230003286,0.6579475199919346 zee,zee,3122,0.5294122704675105,0.6857110786673584 zee,pan,3123,0.4772167563026266,0.8953319261849312 eks,pan,3124,0.1911839922513059,0.16422636870934193 eks,eks,3125,0.34087831336678864,0.5699628829691863 zee,eks,3126,0.2514477009793492,0.2498314026061056 pan,zee,3127,0.5132442039074944,0.07963430048086384 wye,wye,3128,0.8001592917309861,0.2595871624611582 zee,zee,3129,0.027975828338240083,0.46442407872411695 eks,eks,3130,0.2455308797278265,0.13309025352554837 hat,wye,3131,0.4803964481769877,0.5234608286996335 pan,eks,3132,0.7271701616492765,0.5650626367615349 pan,wye,3133,0.23651873567883164,0.3764128593161674 hat,eks,3134,0.9970634534653143,0.8349282777208548 zee,zee,3135,0.34594612609624187,0.22911649635660625 eks,eks,3136,0.7717959001675492,0.8076412924980277 eks,pan,3137,0.9536337598657055,0.010853472417537202 hat,zee,3138,0.27317174947779554,0.646988499341493 zee,wye,3139,0.5684780382451567,0.5720874081361975 wye,zee,3140,0.366288776550753,0.04378768748862749 eks,eks,3141,0.07079750623034164,0.6704842466344859 wye,eks,3142,0.05521456504163247,0.9500745301432092 pan,eks,3143,0.9750373739856155,0.26053373356331044 pan,eks,3144,0.5530175425021646,0.8944089100243684 zee,wye,3145,0.6844032050501776,0.7132658565772104 pan,pan,3146,0.9710413684746768,0.47971725236580287 hat,hat,3147,0.0053700807986794,0.9348161701107937 hat,pan,3148,0.007135675731816615,0.26790355487815287 wye,hat,3149,0.3564530503749801,0.8151097852673919 eks,hat,3150,0.5356404368957323,0.5401388412379213 eks,pan,3151,0.0677212385434749,0.4111467324640289 hat,wye,3152,0.3304026703418458,0.06256059204934794 zee,zee,3153,0.8571384195554904,0.07978949404055691 pan,wye,3154,0.16108434266645066,0.4223970209540501 hat,pan,3155,0.2149573485418389,0.8001616345217611 eks,zee,3156,0.5903395185451377,0.6284941637547498 eks,eks,3157,0.005620302559396273,0.5908603311050712 hat,wye,3158,0.4946858056236574,0.6718815240562283 hat,eks,3159,0.3772290185802739,0.7716546902601435 pan,hat,3160,0.4338772208506313,0.9209566304134479 zee,eks,3161,0.16149623520591205,0.8191827690376345 pan,pan,3162,0.2443000912024087,0.8277963236917038 pan,pan,3163,0.5737538909065584,0.3575809203203234 eks,hat,3164,0.1678243487522464,0.1296504375686386 pan,hat,3165,0.7163182383385346,0.1300805568939386 wye,pan,3166,0.2735080310434773,0.6786442937707285 pan,eks,3167,0.48168869036370665,0.8968310574568457 zee,zee,3168,0.3961829207208839,0.2622983994021634 eks,wye,3169,0.2536595801738487,0.08261588685057286 zee,hat,3170,0.7316564704807246,0.30372246853485163 zee,zee,3171,0.27819614904389,0.11787924109496262 zee,wye,3172,0.9313276309501597,0.06784065184241639 pan,zee,3173,0.9635998480283486,0.12292283146783456 eks,wye,3174,0.2566078750567745,0.05360968786999365 pan,eks,3175,0.9685323733434764,0.1278804691222305 hat,pan,3176,0.776656326879061,0.4278875482927529 wye,pan,3177,0.6848262739198221,0.5321892371672183 wye,wye,3178,0.9845151630820034,0.6080801511979752 pan,zee,3179,0.6442678944579725,0.32523273097572414 hat,eks,3180,0.23662417282509318,0.6499193149885536 zee,pan,3181,0.12870746190802307,0.21635539491335465 eks,hat,3182,0.27201825487678566,0.9413561927236772 pan,hat,3183,0.8541608865089346,0.4366080716736369 hat,zee,3184,0.40026444936770444,0.8965715190797674 hat,zee,3185,0.9325030093530197,0.040633192110803185 wye,hat,3186,0.31825681489643076,0.3867222210818564 pan,hat,3187,0.7581463326564405,0.18210426293229232 eks,eks,3188,0.13550843210847796,0.20870138759868107 pan,hat,3189,0.026314019590705673,0.18939923462316988 pan,zee,3190,0.0946195302667141,0.9170310729203291 wye,zee,3191,0.2541806115835422,0.7506597466069973 pan,wye,3192,0.7448507872358296,0.9175983360847946 pan,zee,3193,0.3376000211106229,0.7592946456540783 wye,pan,3194,0.6242009188843649,0.1437894916755703 wye,hat,3195,0.6601677176592059,0.014754580715863108 hat,wye,3196,0.6843473825379831,0.7390543536399969 hat,zee,3197,0.48954739752340115,0.7181499788655996 zee,hat,3198,0.4197184822020955,0.9015807728046735 wye,hat,3199,0.5950661155016866,0.7876820843797742 hat,eks,3200,0.6465062834343134,0.5218982684290329 zee,hat,3201,0.060837643441948086,0.06449850438005456 hat,pan,3202,0.3172017484222194,0.05112537969570785 pan,hat,3203,0.11472288877111181,0.278764852494509 pan,zee,3204,0.9047148747559682,0.04965210128934949 zee,pan,3205,0.6892430196905853,0.3657149811550592 pan,pan,3206,0.6248657938226793,0.8681563350185779 pan,eks,3207,0.6881257122613184,0.804141641741672 hat,pan,3208,0.9922055997300119,0.9648120708367885 hat,pan,3209,0.3619120930679631,0.9853160311413681 eks,eks,3210,0.45293528719314957,0.17947685156612458 hat,hat,3211,0.5613170559787437,0.5352246021671387 zee,zee,3212,0.7964737415528816,0.5558173183901908 wye,eks,3213,0.8883434034808566,0.4617422375169109 hat,eks,3214,0.3321384410187088,0.7317250838743725 pan,pan,3215,0.1413377562828586,0.44678231607159036 eks,wye,3216,0.29373386203032203,0.4631723587487283 eks,wye,3217,0.34111783868014145,0.5839315442691357 eks,eks,3218,0.6880428093376797,0.9103207963454706 hat,pan,3219,0.7474182668789385,0.5590391934991645 eks,pan,3220,0.9532855829386742,0.8800478978800655 zee,eks,3221,0.767029184744309,0.2596274975760916 zee,zee,3222,0.5138831052561117,0.47989679105419414 pan,eks,3223,0.009907068182697043,0.7478047711855503 eks,wye,3224,0.8943590875125406,0.6208131688490002 eks,hat,3225,0.4838255169683877,0.2140927440076752 pan,hat,3226,0.35642723142223887,0.9711625405713799 wye,pan,3227,0.7070990060513,0.5452513596675552 eks,hat,3228,0.9463721381595557,0.5282145729291476 pan,pan,3229,0.9242949068835605,0.6700494745496223 hat,eks,3230,0.0584193890994712,0.4718114656898049 wye,wye,3231,0.030244834940777232,0.6087749649541813 hat,wye,3232,0.34678472033142016,0.4446414363995591 pan,eks,3233,0.5471314567981557,0.2169784309597168 pan,hat,3234,0.7648908069032151,0.03159384287802769 zee,pan,3235,0.013980830949869794,0.2508908461970313 hat,wye,3236,0.6969519489568067,0.6395027023616561 zee,wye,3237,0.8234005688200698,0.3631748220150387 zee,eks,3238,0.012602991921698004,0.22634995064837027 hat,pan,3239,0.02254180433325681,0.7359441973013121 pan,zee,3240,0.5877493357317612,0.548066125189975 zee,pan,3241,0.30421967413326567,0.5234487663288749 pan,wye,3242,0.9611019977003785,0.681330883403185 zee,hat,3243,0.17998018908462488,0.2200339352675208 hat,pan,3244,0.5444834083087221,0.5306965663976729 pan,zee,3245,0.7759221188096915,0.6025062049702136 eks,wye,3246,0.9681111792743258,0.45013761820073994 zee,hat,3247,0.7005880770412263,0.9156129778807589 hat,wye,3248,0.15641983171365736,0.5385071761397577 eks,pan,3249,0.2874972552716878,0.25110619048650307 pan,eks,3250,0.2829120767349058,0.09835801807841182 zee,wye,3251,0.4637348926957112,0.542576911836454 pan,hat,3252,0.9877179689365846,0.31240448781527486 eks,wye,3253,0.4072943512790075,0.6799266447871808 pan,pan,3254,0.350457431460238,0.4302184547620955 hat,eks,3255,0.23726834440158573,0.5292284240941152 pan,eks,3256,0.7135080861062042,0.5712799934745325 zee,eks,3257,0.20289239990952312,0.362603885203753 zee,zee,3258,0.8218885195808542,0.44721748770524405 wye,hat,3259,0.08107176449903364,0.29319048909041645 hat,zee,3260,0.8800473905727186,0.7552020057189927 pan,wye,3261,0.41821226279651147,0.8850253360947092 zee,hat,3262,0.32568444506228,0.6065878837570879 hat,hat,3263,0.5430211603262051,0.022421059979423008 eks,pan,3264,0.829909329738617,0.9788813279683912 wye,pan,3265,0.4953326302591503,0.864833969133287 pan,zee,3266,0.3412837479312676,0.8486794212655834 eks,hat,3267,0.39932762162444313,0.953150614321362 pan,pan,3268,0.001904789877841595,0.2107702989499245 zee,pan,3269,0.5531033835416052,0.3659293527971088 wye,hat,3270,0.3399739634399507,0.49965908692258354 eks,hat,3271,0.11643573302292032,0.35717256575069845 zee,eks,3272,0.8616836237809823,0.2555712577320536 eks,hat,3273,0.8348848872325367,0.48966840491973995 eks,pan,3274,0.25513593682652125,0.39337835968432966 zee,pan,3275,0.3232344110781661,0.47637792160425796 zee,pan,3276,0.5834425639683404,0.23108217202798198 zee,zee,3277,0.9181379020242023,0.40705334764249457 eks,pan,3278,0.5097190157077268,0.04899861849664533 wye,hat,3279,0.9157221686398738,0.5671280092243552 pan,eks,3280,0.9442806463291782,0.9335857464104109 eks,hat,3281,0.5361984419807034,0.15587235520500609 pan,zee,3282,0.86450976120493,0.8170786827110009 hat,wye,3283,0.5057733411836555,0.04923731532668796 pan,hat,3284,0.414038070322006,0.4761906775736686 pan,hat,3285,0.48063067035883633,0.4966350007922782 wye,pan,3286,0.7217297767808066,0.9865570013659641 zee,wye,3287,0.049406279942573406,0.4381024486414813 eks,eks,3288,0.8590013149268277,0.936500197803695 eks,hat,3289,0.9568499040898423,0.3653704666883357 zee,eks,3290,0.40120382485623196,0.21124233932924863 eks,zee,3291,0.9770383012651398,0.2432263238178496 wye,zee,3292,0.9521492688907935,0.6087321738215051 hat,hat,3293,0.47067984267026386,0.2670742530232063 pan,zee,3294,0.6918379159173412,0.31495560827632296 eks,zee,3295,0.4372879409717054,0.6053789536304973 eks,zee,3296,0.21986184005655396,0.3247997718602733 hat,pan,3297,0.9729466791999957,0.5771820308689207 pan,hat,3298,0.7522212873607641,0.17501638801193387 wye,zee,3299,0.06852018338234533,0.5000015791152141 wye,wye,3300,0.6831118314601023,0.5728211330223406 eks,eks,3301,0.8886973140588106,0.7986263263709766 hat,zee,3302,0.36319331709268987,0.87884157727253 pan,pan,3303,0.0916484218320428,0.6140281532216169 wye,hat,3304,0.4319885161986502,0.11333627655422829 hat,pan,3305,0.20275914918267568,0.3188057450261915 eks,pan,3306,0.7128512847755833,0.8374752272564904 zee,hat,3307,0.12238507918350494,0.9886825082749487 zee,zee,3308,0.24501938424108383,0.2620366749016796 eks,eks,3309,0.6736625417797468,0.1759055405630674 zee,wye,3310,0.7640238780203037,0.5545749802574607 zee,hat,3311,0.7391015948965168,0.7783105639991896 wye,pan,3312,0.9912133558674248,0.792510678216663 zee,wye,3313,0.12157734657040631,0.5335120372360502 pan,pan,3314,0.6554607159333067,0.9770255281674824 pan,wye,3315,0.1108498180405314,0.9467953471924881 eks,hat,3316,0.5888965480684432,0.045574928515849766 hat,zee,3317,0.8991863104086707,0.8351323082787309 wye,zee,3318,0.8368882450019627,0.9558667451117976 pan,eks,3319,0.34803167097398835,0.6217481359344504 hat,wye,3320,0.5049375453273435,0.07971841779344901 eks,eks,3321,0.36879345677908304,0.7533458977670897 pan,zee,3322,0.4071079549678054,0.5216483192298931 zee,wye,3323,0.956745510209848,0.7277085431442248 hat,eks,3324,0.6530059095611962,0.4110782521026085 pan,pan,3325,0.3674804417277773,0.9040679087190475 hat,eks,3326,0.07009249966420861,0.25922706016534536 zee,eks,3327,0.14046308364385085,0.059686547583128746 pan,hat,3328,0.9232634224803832,0.02622931272244866 eks,hat,3329,0.5694104895719442,0.896791407570237 eks,pan,3330,0.34148617036917717,0.868694856533039 zee,hat,3331,0.5580004279189276,0.13162220092963606 pan,wye,3332,0.32760226290506067,0.20546606340653295 eks,pan,3333,0.4410927567165518,0.9434358777012175 wye,pan,3334,0.3692628443912691,0.04456305695935858 eks,wye,3335,0.2886377826496196,0.5510326222058004 wye,pan,3336,0.0830596216722399,0.42130620217712367 eks,eks,3337,0.8502898262908782,0.808554017252108 wye,pan,3338,0.4258737140465607,0.20746386470004785 zee,hat,3339,0.9958679007877833,0.03637803286845476 eks,eks,3340,0.8772219678712854,0.6738364551822755 zee,wye,3341,0.8674680931450676,0.08495173932166111 hat,wye,3342,0.039731587832649184,0.7153198737893809 zee,wye,3343,0.28331195090016237,0.3609364099093614 wye,pan,3344,0.5916979456033509,0.4261672292650668 zee,hat,3345,0.3236007641260298,0.31877697899629276 zee,wye,3346,0.0631478998746885,0.6649602440405321 wye,pan,3347,0.61444979062327,0.13673022117181688 eks,eks,3348,0.38993896958048435,0.2335429118604364 pan,wye,3349,0.376031512913815,0.4929792401226455 wye,eks,3350,0.9327767394224131,0.7607839483352263 eks,wye,3351,0.18464331650677035,0.6120397829138642 hat,hat,3352,0.550190920585813,0.7696873798459735 wye,eks,3353,0.5877052746857248,0.5545585412269964 pan,zee,3354,0.2801717488802852,0.17038214633612547 zee,wye,3355,0.024194919016248595,0.13545067511197206 wye,eks,3356,0.6380780240701133,0.9408087514008974 eks,pan,3357,0.6623105955866089,0.4258008296217072 eks,wye,3358,0.4071377938114724,0.7108273628344846 wye,hat,3359,0.6347502280299748,0.13907882326502974 wye,zee,3360,0.8494626745217564,0.023483418292297054 eks,eks,3361,0.6555829047838948,0.8920276297804856 hat,zee,3362,0.9880826407125887,0.11010372754824016 pan,wye,3363,0.6526207146787799,0.3813540848159578 eks,zee,3364,0.28621636247260607,0.5342782090242255 wye,pan,3365,0.5700040498735991,0.8850660888169822 hat,eks,3366,0.4556207889124957,0.07128477762040519 hat,pan,3367,0.18923164185093178,0.7138172870807187 pan,zee,3368,0.7831951158978603,0.3315912232116869 eks,wye,3369,0.3991655712684341,0.6297930225870115 eks,pan,3370,0.9558238449527896,0.27697054714540026 wye,eks,3371,0.794226121886924,0.42411771070954085 pan,hat,3372,0.43937440052467935,0.4563691901909951 wye,zee,3373,0.6530552443760023,0.15544449101184865 eks,wye,3374,0.8269474339710359,0.12072235071637616 zee,zee,3375,0.4367949309522303,0.013673838744716393 zee,eks,3376,0.5377434458282238,0.23314241806418468 pan,pan,3377,0.45145970444322747,0.8856960898087811 hat,wye,3378,0.012877279074692716,0.6068979505584087 zee,wye,3379,0.23678623178363256,0.05041356234716987 pan,hat,3380,0.9872783151204066,0.48841231625195825 zee,hat,3381,0.7373174186367665,0.7964198412222034 hat,wye,3382,0.4115788506813578,0.5970142880431725 zee,pan,3383,0.7218790645435766,0.45969503904769105 zee,wye,3384,0.16492065527363664,0.9315720353082685 zee,pan,3385,0.05670367935833176,0.2963435909908908 zee,eks,3386,0.6420030353862732,0.23114095824311187 eks,wye,3387,0.8708836596594736,0.18168328151330237 eks,eks,3388,0.711689030667817,0.08741327203084581 wye,zee,3389,0.40891337260400795,0.9839548655687227 eks,eks,3390,0.4329319528885155,0.7161120212330097 wye,wye,3391,0.9407214715817039,0.16134765993593336 wye,eks,3392,0.764135299542596,0.46303754738896463 wye,zee,3393,0.9822570907790836,0.7299006638143403 hat,eks,3394,0.6851390329252532,0.9050274462052531 pan,zee,3395,0.7512424175943134,0.4059836895379698 eks,hat,3396,0.9607050331936833,0.7948112675657537 wye,zee,3397,0.05596493072960251,0.9435195318051948 hat,eks,3398,0.6053108138597539,0.5992354123506696 pan,eks,3399,0.048684103098098785,0.1633725907413952 wye,wye,3400,0.10069663909544047,0.9482094389350565 zee,wye,3401,0.12603857687396403,0.9644862170094224 pan,zee,3402,0.27741250695381336,0.8159372840391408 pan,hat,3403,0.7370714816662562,0.8697953979508419 pan,zee,3404,0.31468021565829374,0.4427420339087643 hat,pan,3405,0.8863854452798668,0.033442919864234644 hat,hat,3406,0.45429743426633307,0.18433478859999053 eks,wye,3407,0.9617046721194548,0.9093815718950851 pan,hat,3408,0.07330408010392908,0.4448942751848767 zee,eks,3409,0.3364026277159641,0.9868364857498738 hat,pan,3410,0.08445928966500227,0.0703789054946542 wye,eks,3411,0.34156100908061116,0.8010566111511997 pan,wye,3412,0.8423508832374376,0.6949323092381406 wye,wye,3413,0.040886939254273114,0.47897154534037656 zee,wye,3414,0.25217276547664036,0.036553945399371846 zee,pan,3415,0.5599190631540909,0.924868567464608 zee,zee,3416,0.48916626975610933,0.5220243096247617 pan,zee,3417,0.2837666956657495,0.38177621330614264 hat,pan,3418,0.9442741844519087,0.3017027866540207 zee,hat,3419,0.06600809539932284,0.6981900505881413 zee,wye,3420,0.23090328234417856,0.2832500437007679 pan,zee,3421,0.9466805608495066,0.20786286772685625 wye,wye,3422,0.9363152201437546,0.28852583041792845 hat,hat,3423,0.0844657406732815,0.035913466762956925 pan,wye,3424,0.8784967044400372,0.604737958747047 hat,pan,3425,0.6609492899115649,0.5467085754935348 zee,hat,3426,0.075752725904918,0.609127836669268 pan,hat,3427,0.8416597040795218,0.8525979909355791 wye,zee,3428,0.16948281534078558,0.5287767961751489 eks,pan,3429,0.6884416724548735,0.37076683601683813 wye,zee,3430,0.06722038251076656,0.9227889532742807 eks,wye,3431,0.09226104972636995,0.7254707163058396 eks,wye,3432,0.9890932308131895,0.23151574428068822 zee,zee,3433,0.8595470542087552,0.8498636271417952 wye,eks,3434,0.5407110734310688,0.05363800054311196 zee,eks,3435,0.0439664086678202,0.9140005792113355 zee,wye,3436,0.9752652636201881,0.47980923190874036 pan,eks,3437,0.025261472762689308,0.12799888376709667 zee,eks,3438,0.16021119119058125,0.7792702864503347 zee,hat,3439,0.6820189455688497,0.10951500585648855 wye,pan,3440,0.936544606740171,0.03446044548668015 eks,pan,3441,0.2537650754015236,0.05620296178361983 hat,wye,3442,0.6287605552712544,0.33295303984892444 wye,zee,3443,0.21494998659532738,0.7690234752214624 pan,wye,3444,0.6714922124805293,0.4749161688649426 wye,eks,3445,0.0550862548275467,0.9962657146123411 zee,eks,3446,0.2804194256928545,0.23979661671683972 eks,pan,3447,0.8785960556284188,0.7011073928320367 eks,eks,3448,0.5502631585453132,0.11319904721842211 zee,pan,3449,0.524308758962708,0.6332502139032691 pan,pan,3450,0.8213036158322992,0.6456770989043784 pan,pan,3451,0.8025436057063862,0.7060797186033781 pan,zee,3452,0.5760028039744347,0.6132903113537639 eks,hat,3453,0.05717780028504649,0.07422864049114308 eks,hat,3454,0.9110638506299676,0.9591332251303966 zee,wye,3455,0.51833979114664,0.6939970837947521 eks,pan,3456,0.4252463974393268,0.39275828072553476 eks,wye,3457,0.9769460675156931,0.8198707026075209 hat,eks,3458,0.30514346329289554,0.9833267802770143 pan,pan,3459,0.014452973503922828,0.755728000485021 zee,hat,3460,0.588470670827405,0.6174548562216325 zee,wye,3461,0.1990979839956707,0.023566934582078036 wye,eks,3462,0.7242013186291925,0.47306057653207245 pan,wye,3463,0.06717794490486906,0.48623828005334757 pan,eks,3464,0.8155896300126392,0.5894548806723218 wye,eks,3465,0.9422913151044523,0.361126352245832 zee,wye,3466,0.209141807598481,0.7545695892430896 hat,eks,3467,0.9391826144539274,0.9934443990210938 zee,wye,3468,0.2358251666384058,0.4863498031303115 pan,pan,3469,0.4258863723941383,0.2095061249114658 eks,hat,3470,0.47997276184744964,0.06659122141821061 wye,pan,3471,0.2764533988832033,0.3208516601140218 hat,wye,3472,0.4069308223369382,0.7259811106485108 pan,eks,3473,0.244297825943407,0.31169012284386755 wye,pan,3474,0.6738217687467104,0.2638420139509079 zee,wye,3475,0.8997076621651254,0.35716661851825715 zee,hat,3476,0.4788250437439896,0.5377374198573633 pan,hat,3477,0.6611093704674268,0.6687601867132502 eks,pan,3478,0.08557950916786583,0.37592412501843786 zee,pan,3479,0.8231858428238995,0.28514406372275236 wye,eks,3480,0.4670447991864045,0.46821183232819474 eks,wye,3481,0.0018822508391512782,0.4734813045472098 pan,zee,3482,0.21972014701783804,0.9122864135454931 zee,hat,3483,0.2095348234287714,0.9927778389609139 eks,pan,3484,0.10029139579593083,0.535016375595021 hat,hat,3485,0.36431575992404175,0.9966126666610623 hat,wye,3486,0.2849558278410832,0.3539958226346893 zee,hat,3487,0.866561498905371,0.6749719599240999 zee,pan,3488,0.05018208235181909,0.3964541287147757 wye,eks,3489,0.8077315081411627,0.7479997434577657 zee,zee,3490,0.10200642169348917,0.31165758001404054 hat,wye,3491,0.12886564721513227,0.7037939176865968 eks,hat,3492,0.43102073349691117,0.5993057473020176 hat,pan,3493,0.555202486463376,0.36825782870554846 hat,hat,3494,0.9044026544451589,0.37279264245660304 zee,wye,3495,0.9934345872412148,0.8688371909960622 zee,eks,3496,0.12474075821856478,0.7664439797094331 eks,zee,3497,0.9892124342839178,0.9379196159380152 eks,hat,3498,0.6909633362296115,0.5517990615632886 pan,eks,3499,0.10345255049088942,0.02234404876115914 eks,eks,3500,0.3991733155276741,0.8199397764785649 hat,eks,3501,0.002293403878501854,0.4879144111797784 zee,zee,3502,0.5345656776152677,0.9046658240543963 zee,wye,3503,0.9917665563701388,0.7473226514963157 wye,hat,3504,0.5918745558045386,0.2286796079695561 pan,hat,3505,0.9587176731534732,0.12809903557671276 pan,eks,3506,0.3942757672769698,0.3445410354016084 wye,zee,3507,0.8698234232439451,0.6003476393534727 eks,hat,3508,0.6230637620114838,0.424076726635791 hat,zee,3509,0.9622867726071316,0.1432938077777307 hat,wye,3510,0.3386148986151456,0.7431914358914263 eks,pan,3511,0.3837436116647608,0.8533106760534216 zee,eks,3512,0.7150929360997113,0.9600218860596139 hat,eks,3513,0.33373578693097705,0.5234647971537469 wye,wye,3514,0.5856301380406596,0.1275528964200492 zee,wye,3515,0.37723354796784714,0.9997851122732699 wye,hat,3516,0.44369718809353986,0.4894205500423119 wye,eks,3517,0.322389903088264,0.05702987241410096 pan,wye,3518,0.11882480113661997,0.3858296816561547 wye,zee,3519,0.7202765028894381,0.12574040969710987 zee,hat,3520,0.0928487341029709,0.3330386484000102 pan,pan,3521,0.22867195583127464,0.33603525596818895 pan,zee,3522,0.7242093277954511,0.831898967676118 zee,eks,3523,0.42001209130403205,0.5036656584109297 pan,eks,3524,0.30252752965606133,0.24419009734033026 wye,hat,3525,0.9824695650800549,0.222603495436539 zee,wye,3526,0.04315340497837039,0.38068506172393646 hat,pan,3527,0.6632440400457205,0.1820945385520728 zee,wye,3528,0.7076813404535067,0.027521703948078957 wye,eks,3529,0.16368069077854164,0.29359040780910695 zee,wye,3530,0.217015339519548,0.8474352672037695 wye,hat,3531,0.598374987624828,0.6802372735701074 hat,wye,3532,0.3438213922655702,0.28091154307295796 wye,zee,3533,0.2380647747461756,0.9297096582745085 pan,zee,3534,0.5808212068478656,0.9148727191488517 pan,wye,3535,0.7265966050847938,0.21414009357018593 hat,pan,3536,0.7017454439056625,0.2590514800523752 hat,eks,3537,0.23900423399657456,0.2588795683734507 wye,zee,3538,0.784669987647248,0.6504554048913334 wye,zee,3539,0.26623848938137373,0.5547651697635625 pan,eks,3540,0.6492339089502173,0.6963037893628019 wye,hat,3541,0.4456255182136123,0.6615870162361136 hat,eks,3542,0.20295072778526713,0.7574601201974366 eks,wye,3543,0.9795917719021048,0.41272909038566297 pan,eks,3544,0.660437682897796,0.9976869991284935 wye,zee,3545,0.2910302714747729,0.3219344480841323 zee,wye,3546,0.6680653445050417,0.864596002429439 pan,zee,3547,0.7639660507096179,0.6193776992233352 hat,wye,3548,0.2983669342833217,0.9026909166111313 eks,eks,3549,0.1538517544982081,0.5455919445696917 wye,zee,3550,0.15207698807295011,0.9519397932545018 eks,hat,3551,0.4342338573806348,0.6933807304285913 eks,pan,3552,0.965663991619718,0.5930384036340364 pan,pan,3553,0.3101812940186591,0.2727128797499023 eks,hat,3554,0.18260657532777225,0.5311854832790144 hat,eks,3555,0.3893225708373611,0.5611190752491995 zee,wye,3556,0.7278766469231946,0.21929031459492465 zee,eks,3557,0.8571691661862111,0.5461980618981016 pan,eks,3558,0.8344799261872303,0.3256634336181796 pan,zee,3559,0.06279062797134494,0.9004664994169836 eks,eks,3560,0.4525336606815864,0.7037155484173209 pan,hat,3561,0.19425929127106012,0.24083853125540766 wye,eks,3562,0.07556315455842999,0.7950176869999145 eks,eks,3563,0.11705838779214672,0.8232973229982639 eks,hat,3564,0.4273089616257022,0.8991684257803373 wye,zee,3565,0.0168691413650478,0.18821185808166463 eks,eks,3566,0.1825897444890373,0.8746110728517744 zee,pan,3567,0.8121651250250981,0.686457266195396 hat,pan,3568,0.18054803232549899,0.8898083043065161 wye,hat,3569,0.8089924807824601,0.6633779430154854 hat,hat,3570,0.23144140451317397,0.756629243011781 wye,wye,3571,0.38887372145181665,0.20495538006007763 eks,pan,3572,0.35534650094834996,0.47884355218030206 zee,wye,3573,0.6566568341390783,0.6074553589369566 eks,eks,3574,0.6035504498536483,0.4034395784600332 wye,wye,3575,0.6697828249944248,0.7638274219999387 pan,zee,3576,0.35707993266640137,0.5998235579404124 hat,pan,3577,0.8477996338004375,0.10094293678130806 eks,eks,3578,0.47993080744275407,0.7674479934775376 pan,eks,3579,0.8628339613928006,0.8518114551427095 eks,wye,3580,0.06010165714354565,0.944192401862212 zee,pan,3581,0.6103322948705803,0.26797145325571314 hat,zee,3582,0.8139735237051052,0.41109841413309234 eks,wye,3583,0.27009503691464387,0.34604318820252766 pan,eks,3584,0.29901280575806055,0.2606367826081081 eks,eks,3585,0.9444152014675282,0.08541204554484039 eks,hat,3586,0.9746502905906368,0.5008159057662351 eks,eks,3587,0.3503288922335456,0.8393293676314583 hat,hat,3588,0.5428335261613996,0.8746507311887247 eks,hat,3589,0.04503314762859012,0.4498210841109198 eks,hat,3590,0.21099486037176274,0.15918964285673298 pan,zee,3591,0.9647151077978772,0.21127797222603706 wye,hat,3592,0.794447944887749,0.04835321965805062 hat,pan,3593,0.8800094797708875,0.26888925214636394 pan,hat,3594,0.30914801544685455,0.38087457746812736 eks,zee,3595,0.5231819036675817,0.40713616193177726 zee,hat,3596,0.5397245337903605,0.22318277532785968 eks,eks,3597,0.3001045399300144,0.684654835830757 wye,wye,3598,0.7511038686147846,0.16271559707006 pan,wye,3599,0.24928033876518263,0.5468336781217452 zee,zee,3600,0.8913764206699744,0.10963338992957028 zee,zee,3601,0.2744348997210646,0.31854494443399084 wye,zee,3602,0.054351745514601424,0.6361866150927422 zee,eks,3603,0.5229720340996624,0.057088462748232205 wye,pan,3604,0.7144947248233644,0.6725505298381226 wye,eks,3605,0.6414071793103325,0.5040707081922082 pan,eks,3606,0.8517449653369746,0.2950457092186415 wye,hat,3607,0.2865652516469479,0.10334063882665867 wye,pan,3608,0.24799522500173943,0.029628860448197347 zee,hat,3609,0.519616508395717,0.280205313320282 eks,zee,3610,0.06251116908017895,0.23236755910808227 eks,hat,3611,0.2146220845642176,0.1332540175691711 hat,zee,3612,0.39065626156480215,0.09272883365156981 pan,eks,3613,0.04243312520650444,0.12731535921213588 zee,hat,3614,0.9992938250588376,0.7586006131131866 pan,pan,3615,0.955045779277772,0.8579181695107918 eks,wye,3616,0.14187634853420827,0.2180915198390927 wye,wye,3617,0.7840113988617385,0.15653631848249716 zee,zee,3618,0.015927778136068382,0.6135932738526103 pan,pan,3619,0.19730522485789048,0.6132793786163574 wye,hat,3620,0.6713095225608523,0.5954491704569804 zee,pan,3621,0.4092160575415905,0.30771033889968114 hat,pan,3622,0.8901185751582916,0.1870407451165942 wye,hat,3623,0.5152268528423625,0.013485915142624427 wye,hat,3624,0.13584832757741117,0.382341043184265 wye,zee,3625,0.7390723547209095,0.6804645486376089 pan,pan,3626,0.17323378929158628,0.22177151771660586 hat,hat,3627,0.27427850969768897,0.39696397114401794 hat,hat,3628,0.12300146024961678,0.7010677704464917 zee,zee,3629,0.1203621553000902,0.03649730823892894 eks,pan,3630,0.6432472290390947,0.6493064608702905 wye,zee,3631,0.5501609784896981,0.5442209389820327 hat,zee,3632,0.9887195745001507,0.8462799528384646 zee,wye,3633,0.05961380658144755,0.41153390509403887 wye,pan,3634,0.779500491235004,0.5677694423637825 pan,pan,3635,0.8517678780538765,0.37570897363715816 zee,zee,3636,0.3540502081666034,0.7557010012298948 eks,pan,3637,0.5208357640093749,0.5659221306135821 hat,pan,3638,0.7845171840273204,0.3502193918421451 hat,pan,3639,0.31221536384885895,0.8777925678653494 wye,wye,3640,0.3117811337270454,0.6199259533630647 zee,wye,3641,0.34634768849647446,0.1722807458856409 eks,zee,3642,0.04372051184301495,0.7131048031620709 hat,eks,3643,0.39531406696346205,0.7072916873720192 wye,hat,3644,0.5912661057148787,0.49271215252480305 zee,pan,3645,0.3353629361519648,0.27452402896726324 zee,wye,3646,0.4302250977906721,0.9570565709617685 pan,eks,3647,0.8754763901824134,0.4440861211150172 pan,pan,3648,0.9502862550981916,0.9040781097596586 wye,pan,3649,0.07083776693984412,0.42161605810186464 hat,wye,3650,0.027750870484755663,0.059142569848676385 hat,zee,3651,0.7388454792523287,0.6889713924377876 hat,hat,3652,0.12134854954936014,0.12339998428589616 pan,pan,3653,0.42035180771481173,0.872087852987371 pan,pan,3654,0.741537059135207,0.9230584052244919 eks,hat,3655,0.1316863843779006,0.4213001572015598 hat,eks,3656,0.14075093892206003,0.21208162198013836 eks,wye,3657,0.8011409482794655,0.017450835880964632 hat,eks,3658,0.8537796341502905,0.5982760622218769 pan,hat,3659,0.09110243804094742,0.35916077607118146 wye,zee,3660,0.9000633600969007,0.2868625781042997 zee,hat,3661,0.32611268243475844,0.12873678851672 hat,zee,3662,0.7673614981915601,0.7295742505814344 zee,zee,3663,0.913522524093555,0.4340116921500242 eks,eks,3664,0.28693486076576824,0.19397030458410913 zee,zee,3665,0.3813728809412974,0.8915253351559728 hat,wye,3666,0.7295635205285994,0.6119784896875866 wye,pan,3667,0.41467178462553234,0.8608278645584995 zee,eks,3668,0.5993837930923437,0.7509474480036791 eks,eks,3669,0.9355633368933711,0.9694655041497229 zee,pan,3670,0.4986606323353615,0.3252967314272578 hat,zee,3671,0.9851663975549066,0.7574307817453141 wye,eks,3672,0.8646473696955588,0.8313013386958765 pan,wye,3673,0.2515908234672535,0.056725699540206675 eks,eks,3674,0.3536670370401426,0.3355576484883924 hat,eks,3675,0.0929703970918907,0.7140596291048347 eks,pan,3676,0.8723087423163797,0.6109859185908899 wye,pan,3677,0.3996143053161535,0.8616939694819011 zee,pan,3678,0.8491710196926309,0.6558159307696828 wye,pan,3679,0.20307168892773197,0.7086180793037447 wye,zee,3680,0.7425818200196079,0.9810014583943923 wye,wye,3681,0.02721573926299492,0.07804891308055895 eks,zee,3682,0.39124881803949274,0.9059680205710228 pan,eks,3683,0.11128670399371465,0.6228832493398745 zee,eks,3684,0.5257462041656636,0.23566322936666084 zee,eks,3685,0.7398298697417746,0.4194935104256209 hat,pan,3686,0.9301169302245861,0.7982783216031746 hat,hat,3687,0.24482997045240362,0.8750823381392218 zee,hat,3688,0.5723630888086361,0.8172243896570902 hat,wye,3689,0.8355718873799872,0.8007108863141698 wye,hat,3690,0.3502150576320706,0.9931617687282244 eks,pan,3691,0.1796260215186376,0.9607252375862692 zee,hat,3692,0.573338911032452,0.5241388333942388 hat,pan,3693,0.7781206646766762,0.5080484241731826 hat,zee,3694,0.33067301800352,0.7754516395280142 pan,eks,3695,0.4992904970087908,0.742643746741839 eks,wye,3696,0.9448270882170847,0.4103666781094296 wye,zee,3697,0.522725396720144,0.18925111602486566 pan,eks,3698,0.02978537252653579,0.5654493110146563 hat,hat,3699,0.2902217497914289,0.6770102706214468 wye,wye,3700,0.9046703649949718,0.7600607720698596 pan,hat,3701,0.7653688084959293,0.9589886741282106 hat,zee,3702,0.31427641268831985,0.7319186674523148 hat,eks,3703,0.04581508270551782,0.7555154492651157 zee,eks,3704,0.6944927784356837,0.6778190994819128 wye,wye,3705,0.40469824814249367,0.8841785778563369 eks,zee,3706,0.28192270569849476,0.3669079489151894 wye,hat,3707,0.32172668895407197,0.23641326221038772 pan,zee,3708,0.9367338792831362,0.4695354410183338 eks,wye,3709,0.5793435558579774,0.5284203604486059 pan,zee,3710,0.8358876467213303,0.010883794663985147 wye,hat,3711,0.7062248515236889,0.7592554719549557 eks,hat,3712,0.20158466043698664,0.2506153993203297 hat,zee,3713,0.5453918537789201,0.9591221613154766 pan,wye,3714,0.7007443629312707,0.69979486340907 hat,zee,3715,0.4982158038764617,0.1845463889797414 pan,wye,3716,0.7794631862118141,0.38174400926867047 wye,zee,3717,0.20372686286113306,0.48178229369817827 pan,pan,3718,0.6978201901277095,0.029333538689990557 eks,pan,3719,0.4534387451777433,0.22731879465386806 hat,hat,3720,0.9601728250087456,0.25178938182476607 eks,eks,3721,0.8929949309089861,0.2753211862235905 pan,wye,3722,0.9375469687103644,0.3374245074403295 wye,wye,3723,0.47515921315887333,0.9657952342754725 wye,eks,3724,0.7362078619104057,0.10855543465047734 zee,zee,3725,0.15221580400712498,0.5846857209085365 hat,eks,3726,0.7864690866743678,0.023450973928021757 hat,eks,3727,0.02778608789107495,0.19112025359038776 eks,hat,3728,0.5830906923999751,0.1825999304288003 pan,wye,3729,0.6339377797999709,0.7940228471998122 hat,wye,3730,0.9186140626854419,0.4158937617414502 hat,hat,3731,0.03433461671749849,0.37009846068918584 wye,wye,3732,0.24997685932838876,0.7647954464137104 wye,wye,3733,0.19073435311282794,0.705275429721041 wye,pan,3734,0.5747797481156508,0.8274654836314349 zee,hat,3735,0.20101546519059987,0.9017936214420659 eks,eks,3736,0.8706261619141413,0.5428739515744351 wye,pan,3737,0.5574876609423702,0.8504937121138577 pan,wye,3738,0.5390690548412024,0.3716168991158759 wye,hat,3739,0.971775360771065,0.3319565969194058 zee,pan,3740,0.9333817720718712,0.4371222668297464 zee,pan,3741,0.9571682809413955,0.6570144668674751 pan,zee,3742,0.05182394212116692,0.8208128933987844 eks,pan,3743,0.4905151151584467,0.320903002068355 wye,zee,3744,0.7710752122842248,0.6182369915664692 zee,pan,3745,0.0634219140814758,0.0909389524119274 pan,hat,3746,0.016317522611819957,0.4500858677522094 hat,hat,3747,0.2731453345797118,0.3612727190378229 zee,zee,3748,0.7692098314967419,0.723183352513404 pan,eks,3749,0.6600164034317578,0.22789566978678333 zee,zee,3750,0.4584069341764643,0.6052673722009491 pan,zee,3751,0.1376132992218041,0.5327305744083769 hat,pan,3752,0.27781099183901203,0.24166942932110203 eks,eks,3753,0.9130333710330752,0.9434343087469547 pan,hat,3754,0.39530750680824867,0.285187450605236 wye,zee,3755,0.5821904936762373,0.9440238426951152 eks,eks,3756,0.3151274913498434,0.2613270252067468 wye,zee,3757,0.27126594951001737,0.2696036535766695 pan,zee,3758,0.1144851508437299,0.43717693060689256 wye,wye,3759,0.8659325090962396,0.500920016668498 wye,zee,3760,0.14033050146326476,0.7853558549084289 pan,pan,3761,0.6277167190080807,0.820462327799342 zee,zee,3762,0.40740521496915294,0.5027677314620422 hat,eks,3763,0.702517766279011,0.5201760035681132 hat,pan,3764,0.9684950471794708,0.9824729038297494 pan,pan,3765,0.7505504157884441,0.5688693727587826 hat,zee,3766,0.3053846255939139,0.29250711868083323 pan,hat,3767,0.07270094398967542,0.819707679427309 pan,wye,3768,0.39157640275144845,0.29940355516568284 wye,hat,3769,0.2813634801023107,0.33793045381955156 wye,zee,3770,0.3006731850375737,0.41117593228974025 eks,zee,3771,0.8966388980866674,0.6767775863177413 zee,eks,3772,0.09712051675224176,0.1992258338913524 wye,hat,3773,0.05484010565512498,0.6891554266059904 eks,eks,3774,0.10098411790939343,0.23016371716573425 zee,hat,3775,0.7941735867493203,0.2594788677041825 zee,zee,3776,0.9683966232439434,0.25528882348504156 wye,eks,3777,0.5229176412769544,0.8857285221477562 eks,pan,3778,0.5543756678908779,0.8979653327985948 zee,eks,3779,0.692670964675647,0.43868001633055353 eks,pan,3780,0.6536521341657655,0.6026553230815477 hat,eks,3781,0.22056344697345842,0.16263581703146368 hat,wye,3782,0.9802208332262505,0.42156225597643915 hat,wye,3783,0.5246681466694276,0.3988002197517633 wye,eks,3784,0.2896043360112557,0.03933436470492446 pan,zee,3785,0.6699335151046618,0.1867082955540268 zee,zee,3786,0.0022910915202805082,0.8679336791294139 zee,hat,3787,0.11351579052401195,0.5365315180789991 pan,wye,3788,0.41697687514270476,0.3863350720666795 eks,pan,3789,0.2647880014677908,0.495992120309258 pan,wye,3790,0.4871902945382671,0.22753844996371497 zee,wye,3791,0.9587582682512387,0.9041552661112677 pan,eks,3792,0.8303342159408211,0.7063245550219001 pan,eks,3793,0.43293237945019947,0.26733489278694356 zee,wye,3794,0.8976337510372844,0.8750629709298201 hat,pan,3795,0.8432372103239337,0.9510111805966026 eks,hat,3796,0.823953148854179,0.3020905534872981 zee,wye,3797,0.6303527344509033,0.17531824895427106 zee,pan,3798,0.9979923700274865,0.6588578150120853 pan,zee,3799,0.03921193583035787,0.7303677603577615 hat,eks,3800,0.6540911583411234,0.6156768180814669 eks,zee,3801,0.41291944190449625,0.04630035513500563 pan,eks,3802,0.21101198189616388,0.6878498019067313 zee,pan,3803,0.6938862506507568,0.09123194788888433 hat,zee,3804,0.13831455085494204,0.6878495274227865 hat,hat,3805,0.9077137203924546,0.6604195772537097 zee,pan,3806,0.4130639175002534,0.4140992672289935 hat,zee,3807,0.5264705799180144,0.05933317807985761 eks,pan,3808,0.18073645069225752,0.47471602068305085 hat,eks,3809,0.07620205058855944,0.41909302154687966 hat,zee,3810,0.9274217320420701,0.23200196179581423 wye,wye,3811,0.9262768212215141,0.583254627467812 eks,eks,3812,0.5738580742119982,0.22201053907217239 hat,zee,3813,0.8381595697055793,0.8082122321715743 hat,pan,3814,0.3227628236617065,0.09200255049758854 zee,pan,3815,0.5420566318553253,0.24311173211623627 pan,zee,3816,0.0679585117420517,0.9334969672578366 wye,pan,3817,0.21834728153634142,0.009580087519049041 wye,pan,3818,0.6892726476500824,0.328130518469796 wye,zee,3819,0.6612561643616807,0.647643437411651 zee,hat,3820,0.030987943391648676,0.6485266624267947 pan,pan,3821,0.09753442464986295,0.3452736158284476 eks,wye,3822,0.23064104633743454,0.6206626510995845 hat,wye,3823,0.0660248906480213,0.4768167157060277 zee,hat,3824,0.07286963812865666,0.9841111028377353 wye,wye,3825,0.7412307338094147,0.8357569402941348 pan,zee,3826,0.8700896084310135,0.7743947935823393 wye,hat,3827,0.5505247366282321,0.4487041560677363 hat,hat,3828,0.4439300237744592,0.3540302359317383 zee,eks,3829,0.8461894479274499,0.1091063374403779 wye,hat,3830,0.31602199194810077,0.23756301234064214 eks,eks,3831,0.4588783903640905,0.822431348022218 wye,pan,3832,0.3154044653633482,0.6954789197372386 pan,eks,3833,0.9435147604130275,0.6343874692425551 pan,hat,3834,0.7491688531360436,0.6632149460503455 eks,zee,3835,0.7084199117993816,0.23836696302687854 wye,pan,3836,0.5783001097508949,0.5326591809573153 pan,zee,3837,0.007599613269725358,0.5985657848153627 wye,eks,3838,0.16276307163297787,0.4480412721243018 hat,pan,3839,0.04332885941703746,0.6974767645258779 pan,hat,3840,0.6308501275600921,0.15448447296698842 wye,wye,3841,0.7854392875246197,0.7264036810522736 zee,wye,3842,0.9500031218945214,0.9557435110983296 hat,eks,3843,0.8979324823898589,0.22043224466362787 zee,eks,3844,0.5533769309499299,0.4231610222317168 eks,hat,3845,0.956021508845704,0.05912536350688913 pan,zee,3846,0.12083257325362673,0.6880217459012083 eks,pan,3847,0.9538690048763792,0.018466194565513683 wye,eks,3848,0.6500527955774431,0.023909990362617428 wye,eks,3849,0.7149976391333995,0.9748913470930238 zee,eks,3850,0.7036643435758647,0.29910186188725063 eks,zee,3851,0.6884645549243478,0.6729540888918134 wye,wye,3852,0.16575767054134194,0.3519742254585112 zee,pan,3853,0.16807480611879477,0.6916258245977434 zee,eks,3854,0.9118453703518822,0.4970364912618278 eks,wye,3855,0.7041409587449016,0.21248706433820264 pan,zee,3856,0.7166199842938143,0.5985908973683398 eks,pan,3857,0.911885736627155,0.7775693985993537 pan,pan,3858,0.2655493421352306,0.5008269003029236 eks,eks,3859,0.23564525774209633,0.6200721762867689 eks,pan,3860,0.16404594209083445,0.2945650928508321 hat,zee,3861,0.5532707570794401,0.3218958838799141 wye,eks,3862,0.845977895190702,0.2105916632815279 pan,wye,3863,0.8914098448143842,0.941827688174933 wye,pan,3864,0.40887317017480806,0.9211253311538701 eks,pan,3865,0.6410821318604495,0.742344518102107 eks,eks,3866,0.8820740686865273,0.6336399556322359 zee,zee,3867,0.9124099806717596,0.10039063827592765 pan,pan,3868,0.5708876065677694,0.6788408195369369 pan,hat,3869,0.5531285064534339,0.014934021539296571 hat,zee,3870,0.40688870301241575,0.4640784108862729 eks,hat,3871,0.576479904048506,0.31414898223457755 wye,wye,3872,0.47105100438757685,0.05894343228765331 wye,hat,3873,0.08895748908550638,0.7503852698192701 zee,wye,3874,0.36954687122878715,0.07524269626487912 pan,zee,3875,0.8656993436002198,0.7910484890727197 wye,wye,3876,0.03808754965335226,0.08658971281465833 pan,zee,3877,0.09904785925240933,0.6676400108509978 eks,eks,3878,0.0506506132923914,0.7242690651435119 hat,eks,3879,0.03588331465146932,0.7484282721818893 hat,hat,3880,0.4235813324669898,0.24387827945280804 hat,hat,3881,0.7822034723161025,0.7478339704565765 hat,eks,3882,0.011719496883464853,0.24640876061080674 eks,hat,3883,0.4614594041430371,0.3205017019419516 wye,wye,3884,0.9807726374776462,0.16883444992338326 wye,zee,3885,0.31672532313467505,0.2365343741445356 hat,pan,3886,0.18873324663018243,0.7292335881068795 pan,hat,3887,0.030126862485056027,0.7407216218234761 eks,wye,3888,0.21823480875880663,0.6891953143456548 zee,wye,3889,0.039039225578129,0.043618607590064085 wye,eks,3890,0.1974840445022984,0.43475405724957294 pan,eks,3891,0.9382818311518488,0.9030005498802104 pan,zee,3892,0.27112454369214156,0.8859937112495071 eks,eks,3893,0.4046249389793575,0.21056190964042465 wye,zee,3894,0.7443136068289423,0.8294047544954046 hat,hat,3895,0.4564412341948818,0.7759614897360431 hat,wye,3896,0.04335080026755522,0.9820438391823961 hat,pan,3897,0.49376649897367464,0.13401013066245737 eks,pan,3898,0.6998124732144403,0.3446237971866837 eks,wye,3899,0.1432600644239883,0.7912100443742818 pan,hat,3900,0.8799773683889426,0.5220746421238783 wye,zee,3901,0.8739801518514984,0.13243512076702868 zee,eks,3902,0.8645468539063139,0.9700412096469742 hat,hat,3903,0.6603175490464367,0.7332253490191969 wye,hat,3904,0.2808463214358832,0.6400325080698059 hat,hat,3905,0.37058852723699554,0.10112929497538448 hat,pan,3906,0.18587769312561342,0.5877405963198684 hat,hat,3907,0.5156840561144312,0.48828123151684966 hat,hat,3908,0.011436139295365133,0.698305213173947 eks,zee,3909,0.8701294324647131,0.6010009857684786 eks,pan,3910,0.7754775924406334,0.9607498923245504 zee,zee,3911,0.10611443109176355,0.9500980959450185 eks,hat,3912,0.40688370124160333,0.3725099736322035 eks,pan,3913,0.7572616191019003,0.009426657564762575 zee,pan,3914,0.568449276718281,0.44428728066132994 hat,zee,3915,0.4715771685615844,0.679035167069352 pan,hat,3916,0.10385472378813976,0.8696276556798485 zee,eks,3917,0.4610838052133647,0.5166912532440093 eks,wye,3918,0.3468839319991631,0.7460608153868107 hat,hat,3919,0.20968623039533885,0.2249710535207634 eks,wye,3920,0.06633524516092837,0.21897455790581 zee,hat,3921,0.24462442594768674,0.7825101030749122 eks,pan,3922,0.09303768776585819,0.9097350521192294 pan,zee,3923,0.7828038174006502,0.40187653591870354 eks,wye,3924,0.24552287892234603,0.8709339930853457 wye,eks,3925,0.9444615936887226,0.5492757409492689 pan,eks,3926,0.2577383831501502,0.42247048365748696 hat,pan,3927,0.2961162902664337,0.5026763086626909 hat,pan,3928,0.3294192690721903,0.0018064795955691215 pan,wye,3929,0.5373694134669578,0.6408298650436733 wye,zee,3930,0.3772473940400355,0.4855477755417952 pan,hat,3931,0.8947844528349447,0.6976181039979583 wye,eks,3932,0.902042488611117,0.8695780909283909 zee,eks,3933,0.9377651072146025,0.49393343661090683 wye,wye,3934,0.8890179128922202,0.036534071445648686 eks,wye,3935,0.8719220728834155,0.626436829723036 zee,zee,3936,0.2789666429898331,0.7718880254003965 wye,zee,3937,0.8620266789446326,0.133104948798772 wye,wye,3938,0.4264030481171944,0.2469737981294069 zee,pan,3939,0.9776442331945898,0.4655162963934556 pan,hat,3940,0.37339956142433084,0.23248823182301037 eks,hat,3941,0.8182766432429959,0.2282730594932706 eks,zee,3942,0.7678757943544514,0.9693217394374674 wye,hat,3943,0.29550708533363845,0.16362618484177738 zee,wye,3944,0.9305603171944418,0.2631848553023146 zee,eks,3945,0.9502316772099553,0.19036371662120233 wye,eks,3946,0.8350585462480241,0.7491629688087337 wye,zee,3947,0.8226133287365867,0.2794421547836373 wye,wye,3948,0.02572471641992602,0.6920862746683303 wye,zee,3949,0.3676627709059406,0.3957927902894449 zee,pan,3950,0.32474388588887126,0.02474711989630063 pan,eks,3951,0.7409946857015619,0.19548589834215446 hat,wye,3952,0.6350102710290926,0.2620857765590283 zee,eks,3953,0.30922267009534077,0.3284230853853207 hat,pan,3954,0.052368455214725995,0.4715978875853839 eks,zee,3955,0.5312946172484967,0.12098565859835453 zee,eks,3956,0.1849505395742288,0.6971047278578605 pan,eks,3957,0.6165622172072422,0.37237191581951723 hat,zee,3958,0.07310839831115146,0.32925431162438823 pan,hat,3959,0.1292574457299427,0.3582879075778822 pan,zee,3960,0.19211441013639674,0.11950330832710931 wye,hat,3961,0.6511854877418017,0.4589218300880824 eks,hat,3962,0.9657235616300794,0.05144636955135773 hat,pan,3963,0.2775863198412192,0.7891255209818445 wye,eks,3964,0.9210830069555165,0.5838970142942722 zee,wye,3965,0.23984259901508576,0.26442599713920145 hat,eks,3966,0.23733058400187923,0.7016365873249447 zee,wye,3967,0.9985449436152721,0.7330838738578122 eks,wye,3968,0.015400799144512867,0.6014606839935781 zee,hat,3969,0.6861552175518395,0.46267309304633597 wye,zee,3970,0.3424738374943377,0.6234959936497562 hat,pan,3971,0.47236749903854525,0.49755810812875845 pan,wye,3972,0.06499356218753538,0.5661193015342019 pan,hat,3973,0.39627283237990996,0.6628720545942175 hat,hat,3974,0.2255823178745917,0.3328848639919585 zee,pan,3975,0.41021697311932137,0.5253220869630462 eks,eks,3976,0.3872364913819858,0.12628018436476995 zee,wye,3977,0.640238580570024,0.41378547967160495 eks,zee,3978,0.10057250053848688,0.6832812035658576 eks,wye,3979,0.05509300519176841,0.3449069313995392 eks,wye,3980,0.17739908838951735,0.6189549035709109 eks,pan,3981,0.798588528905017,0.7451168881460923 wye,eks,3982,0.7480880614402182,0.8419207681331152 wye,zee,3983,0.8362240426090267,0.77769018412775 hat,wye,3984,0.020984581151031745,0.9379819495871566 zee,eks,3985,0.05962271913450001,0.8797820678732818 pan,zee,3986,0.4205297371360823,0.9963268123973551 eks,hat,3987,0.3908629932350629,0.5854417332644798 zee,zee,3988,0.7335921993524305,0.5879895671878599 wye,zee,3989,0.2700024864980135,0.8437375152003208 wye,pan,3990,0.2551633201471506,0.4633660311722343 pan,zee,3991,0.07557797117002352,0.03446642347570361 zee,eks,3992,0.7507600776739561,0.6732032182262292 hat,zee,3993,0.08221997898229427,0.21489690844146592 zee,eks,3994,0.2399390749091379,0.8600537400054703 hat,eks,3995,0.6854597775410988,0.6047357220116547 pan,hat,3996,0.4669100032261838,0.48298621327550606 eks,hat,3997,0.8201134204882613,0.5748852394805374 zee,eks,3998,0.39329877289726367,0.8779820074659457 pan,pan,3999,0.1966197290195203,0.539503732197533 pan,wye,4000,0.7030828102156571,0.12232197500884245 wye,hat,4001,0.8174301789619988,0.9053657573378745 eks,wye,4002,0.3850636313361996,0.552180695877821 eks,hat,4003,0.6772262101934939,0.12567047648579976 wye,pan,4004,0.7607827500015804,0.6235619294990873 zee,zee,4005,0.6393382677423634,0.026928024799432126 zee,hat,4006,0.48789661545234886,0.21227412408894908 pan,wye,4007,0.5905532262814199,0.03346277389076979 eks,hat,4008,0.890243383339597,0.7267223805200799 hat,pan,4009,0.5706952995715363,0.9230695483570237 zee,hat,4010,0.42440597576906447,0.0704425276034597 hat,wye,4011,0.24251335510099137,0.23960695465439596 zee,pan,4012,0.5455876516440495,0.4916025226658389 eks,pan,4013,0.8704264127290353,0.5876599831119824 hat,pan,4014,0.31319409877544535,0.37600379424562247 pan,hat,4015,0.6791412275551999,0.8868908402993898 pan,eks,4016,0.8587762124701115,0.7327173343378633 zee,eks,4017,0.3047836325798219,0.7894212582792598 hat,pan,4018,0.3048776737346697,0.13707959214248555 zee,zee,4019,0.32116201777416775,0.6159942228124887 hat,pan,4020,0.0435632469106455,0.8600282250289863 zee,hat,4021,0.3130407621764443,0.2693181610377101 wye,zee,4022,0.40301649786733384,0.9524000685947437 pan,pan,4023,0.10367305449954967,0.022130374916290774 pan,zee,4024,0.2180038149057033,0.2890891058720141 hat,wye,4025,0.6365723951389777,0.7003325245087676 zee,zee,4026,0.9441858479531559,0.3388368972590644 wye,hat,4027,0.4037114359444258,0.90743641296412 hat,eks,4028,0.20788010249626498,0.6884626872862553 wye,pan,4029,0.3428961154684751,0.8868244204307322 zee,eks,4030,0.3317839760740481,0.4161099049929635 pan,eks,4031,0.09704619121471669,0.0779275379233505 wye,wye,4032,0.2974124725329491,0.20863438296756043 wye,pan,4033,0.44164928623031885,0.3935479870985933 zee,pan,4034,0.407013802751526,0.7638222768155006 hat,hat,4035,0.5832281654804606,0.30161246333228053 hat,pan,4036,0.3630052335487458,0.1756001401202808 pan,wye,4037,0.40101967210862355,0.21622386613658062 zee,eks,4038,0.31593174924868916,0.30590560916984444 pan,eks,4039,0.053167065399378544,0.9320171029412466 hat,zee,4040,0.9955496827175224,0.48098153603493243 wye,eks,4041,0.6663441339123051,0.8594459082303051 pan,wye,4042,0.1587273385461524,0.6669257024952429 eks,zee,4043,0.28076996721337844,0.7010179301082176 zee,wye,4044,0.4445193542875734,0.10451265229731932 eks,zee,4045,0.7400078317069471,0.6537027971576772 zee,zee,4046,0.6525804691103836,0.2545220514360603 wye,wye,4047,0.5414929203702645,0.4539331132426315 pan,hat,4048,0.26401325806452103,0.5055541652981963 zee,wye,4049,0.3865785757267529,0.3257613178120228 zee,pan,4050,0.22133212632288612,0.46497223755296413 wye,pan,4051,0.46330422466377885,0.0013216245762560641 eks,eks,4052,0.26951508961424153,0.8159189781286144 hat,zee,4053,0.8866052673521815,0.4046547094268781 eks,pan,4054,0.740840958021636,0.4460391910997835 hat,hat,4055,0.24697770493624438,0.612234746493852 eks,eks,4056,0.8643394873777513,0.9659257127064651 pan,pan,4057,0.3102888737344549,0.40268801525857945 zee,pan,4058,0.9750004025056389,0.30221484127549403 wye,eks,4059,0.5063318396525335,0.4417901089284284 pan,zee,4060,0.008052078028936815,0.8144830537845575 zee,zee,4061,0.5943115025128368,0.7926566656770357 eks,eks,4062,0.9875301794451499,0.7335426236266079 wye,zee,4063,0.8739281191211792,0.4835160480530071 wye,wye,4064,0.054986884076116516,0.9109000045675829 eks,pan,4065,0.9790714906563968,0.007030356364051138 eks,eks,4066,0.9312192725082208,0.4963799110654653 pan,pan,4067,0.5063639370311482,0.004264053556000236 eks,wye,4068,0.1524845394038703,0.8431776270630555 zee,wye,4069,0.969881192737605,0.7454405956242405 hat,eks,4070,0.18629806750635058,0.20897903127133244 hat,eks,4071,0.17058445050982152,0.6566712054825186 wye,hat,4072,0.5889180149165333,0.24917849958971638 pan,eks,4073,0.2657367745661936,0.2985150423046431 wye,pan,4074,0.7170683734519407,0.6616939907637078 hat,pan,4075,0.7741097521171826,0.5862044466287508 pan,eks,4076,0.6711827040032985,0.1902299755507466 hat,hat,4077,0.5011592202840128,0.4774266498958699 wye,hat,4078,0.45606720248652644,0.8123287155978273 zee,zee,4079,0.3760881437289524,0.8847359365393963 eks,zee,4080,0.6036589730049234,0.5196679309887058 eks,pan,4081,0.8636397669083807,0.39559043404091077 hat,hat,4082,0.5572557445251078,0.624066652987969 wye,wye,4083,0.8666445318722942,0.767288613574896 eks,zee,4084,0.5618487213544217,0.30293876669064146 wye,eks,4085,0.5272061090337726,0.9162627017806118 eks,wye,4086,0.3119331822264977,0.4703087590730718 wye,zee,4087,0.041369624776661396,0.1706574091421187 pan,eks,4088,0.6090012823832082,0.812489654491081 hat,pan,4089,0.6181818234320513,0.3456834903874286 wye,zee,4090,0.08760748700129917,0.046823223997924046 pan,pan,4091,0.9477496006595305,0.6877721274230629 pan,eks,4092,0.05823591729943611,0.2271541631902052 zee,wye,4093,0.5115949427264939,0.7463065447615764 hat,hat,4094,0.8294711965470426,0.5100796086516896 pan,wye,4095,0.002245348719915996,0.4758218988941505 zee,eks,4096,0.6921498725707808,0.11138574708230264 eks,zee,4097,0.5977012193299909,0.6349007809350186 wye,pan,4098,0.9826450383900536,0.1400761078947168 pan,wye,4099,0.8910882964590207,0.33701906973508144 wye,pan,4100,0.4194005326767647,0.5452164572329079 wye,wye,4101,0.9070001852862156,0.5366667269362855 pan,zee,4102,0.936276054438326,0.40450742681553564 wye,zee,4103,0.40338842748518,0.16714248436837198 pan,eks,4104,0.4763532787659751,0.6087591109968019 pan,wye,4105,0.16729489652734397,0.5307591339000314 wye,hat,4106,0.6762148011530986,0.7998537880048552 zee,wye,4107,0.1740567415346871,0.8534128359069896 eks,zee,4108,0.3415946367341153,0.19830581897594968 pan,hat,4109,0.06408072699727674,0.7782480536170286 eks,pan,4110,0.7201591775410024,0.9280174950278048 wye,hat,4111,0.27092702426036697,0.40264205326846036 wye,eks,4112,0.21549872173717677,0.7712851660284064 wye,eks,4113,0.9978834111387961,0.02729153021305819 wye,hat,4114,0.5672845724991237,0.8126100904189216 pan,eks,4115,0.14786482586108984,0.7088885498409112 eks,zee,4116,0.5374530235586998,0.1554131021415981 zee,wye,4117,0.973704237758867,0.2722193342177551 eks,zee,4118,0.44761492415732196,0.8962682037215072 wye,zee,4119,0.14069101423742136,0.3916394205657444 eks,hat,4120,0.7278136147317754,0.992128682834371 wye,eks,4121,0.3436640653132741,0.12875649374791853 pan,wye,4122,0.5589346838220178,0.4914922406604886 hat,zee,4123,0.11667168949423246,0.09343624851787202 zee,zee,4124,0.3762744289665654,0.4657534810646099 pan,zee,4125,0.8167559403831369,0.6726503484988995 zee,hat,4126,0.16302778730181566,0.2748655824617119 wye,wye,4127,0.7262693332963976,0.7800792471160094 wye,pan,4128,0.343037394179604,0.8198518248958258 zee,wye,4129,0.05680148699183385,0.6245423259174248 eks,wye,4130,0.8598238868873511,0.012220950836815403 pan,zee,4131,0.3675182883990802,0.8604415347784466 wye,zee,4132,0.14673501967206204,0.2171503552857429 wye,zee,4133,0.7389607262096376,0.036648057677968304 pan,eks,4134,0.5678246594857959,0.8501122230105806 eks,wye,4135,0.06467946568449268,0.8481570975546845 zee,eks,4136,0.9750589992032552,0.8792931621208594 pan,eks,4137,0.727677709722926,0.990782873469676 hat,eks,4138,0.680011121560662,0.8738045887343792 pan,eks,4139,0.8882078496509985,0.7037523368580344 wye,wye,4140,0.4072330251968732,0.5912138499903089 pan,pan,4141,0.7099916507740912,0.7023882125149881 zee,hat,4142,0.59845620196533,0.7654415799243958 wye,zee,4143,0.7319199702444085,0.3284383385587504 pan,eks,4144,0.20066813487611335,0.14876626920283553 eks,eks,4145,0.15065242524890976,0.12428817259719527 eks,hat,4146,0.24650476137003852,0.24493489109337752 pan,eks,4147,0.18018100232038436,0.6774654990004214 pan,wye,4148,0.3413539884717429,0.42693818289018026 pan,hat,4149,0.3302318191152641,0.76393329273942 wye,wye,4150,0.18070207422954976,0.5101494095812327 hat,wye,4151,0.9300760758556822,0.7773525646273065 eks,eks,4152,0.1811147851470688,0.27238019374865363 zee,zee,4153,0.5846722719463249,0.6311555286184487 eks,wye,4154,0.14862179863191494,0.8693912096400257 pan,zee,4155,0.09454282552502047,0.49923403772444375 hat,eks,4156,0.15799120592162896,0.038371812406094774 eks,zee,4157,0.4858235480097448,0.09279407391803784 wye,pan,4158,0.1333970187468101,0.28784426376744954 zee,wye,4159,0.16633086096833194,0.24966226951484904 hat,wye,4160,0.8054114157818849,0.7345641356600717 zee,wye,4161,0.0010540410989509086,0.4824535316499434 hat,wye,4162,0.17183301057444123,0.5814481871152551 hat,wye,4163,0.7378974454559613,0.14329858381160532 eks,eks,4164,0.1814557125976639,0.16922072136830046 hat,hat,4165,0.1667557442764379,0.4707835711078464 eks,eks,4166,0.8001532760200558,0.4710414364372668 zee,eks,4167,0.7619530390058822,0.930540767502347 zee,pan,4168,0.599752942239787,0.2632005449641026 wye,eks,4169,0.07899981174582527,0.8711975079555797 wye,zee,4170,0.9950566917608218,0.8929860757345622 zee,hat,4171,0.6164466931885032,0.046028336349777765 pan,wye,4172,0.9552928088345413,0.4665974055074307 hat,wye,4173,0.5631533277539057,0.18005042555248219 zee,wye,4174,0.43302095958952536,0.9058926327335167 eks,hat,4175,0.14893444050478133,0.6668089129536704 pan,wye,4176,0.4341923489619599,0.7002062767529537 wye,wye,4177,0.8269582967617823,0.3873323406990482 wye,hat,4178,0.10338061245651997,0.6598406918574121 wye,pan,4179,0.8403305474491944,0.5265486487825841 pan,wye,4180,0.2142912364810604,0.5902490540194396 hat,hat,4181,0.9215787418719625,0.87388922229494 wye,eks,4182,0.34389709563449355,0.9265777131373166 wye,hat,4183,0.7734961393992563,0.8972101418171253 wye,eks,4184,0.26453922756144566,0.04144136482622762 eks,eks,4185,0.6545545397873997,0.3003265405693454 zee,pan,4186,0.09176822676571406,0.5263428400902627 hat,eks,4187,0.9865778952946068,0.9315331182266391 zee,zee,4188,0.5768573162811447,0.03374115506424635 wye,eks,4189,0.8653650223373014,0.05928658347043925 hat,hat,4190,0.9900519739227561,0.3950239124798106 pan,eks,4191,0.637972872375815,0.17992343467853944 zee,hat,4192,0.20233463129873608,0.8387699339680452 pan,wye,4193,0.782060968571005,0.5226067196250769 zee,hat,4194,0.6917599608609465,0.7645848884839161 zee,wye,4195,0.05217934744029562,0.9588458237749052 eks,zee,4196,0.9253885848590683,0.3616430584909154 zee,wye,4197,0.04731297366084686,0.5416374414603988 pan,pan,4198,0.2033916216857976,0.920262918619217 hat,hat,4199,0.14718338407807485,0.8513271413790102 eks,eks,4200,0.7461940655714095,0.22725935726388635 hat,zee,4201,0.5742688863471991,0.20563261535996558 pan,hat,4202,0.23693797784996196,0.7710519376518159 wye,pan,4203,0.24740078542575394,0.031517413903408564 eks,wye,4204,0.09707778409356904,0.4413369985080463 zee,hat,4205,0.9035555263299718,0.39000800205677044 eks,zee,4206,0.591250716216349,0.533942741704139 wye,pan,4207,0.03750222722365337,0.7243329653363689 eks,eks,4208,0.23584245665114634,0.13929514505423546 hat,wye,4209,0.01599534158357141,0.888241457991452 pan,pan,4210,0.7140111302670499,0.3769195273604298 wye,eks,4211,0.5693885676546375,0.8180582438424654 eks,pan,4212,0.7602507606210257,0.39631475864139476 zee,zee,4213,0.6569921162319814,0.9398725266121587 zee,eks,4214,0.6757239578204182,0.6370305085828928 wye,pan,4215,0.24941440834260942,0.6514695259568407 hat,wye,4216,0.11546817052646863,0.987858819464426 pan,wye,4217,0.4097976618902073,0.141878119206427 pan,pan,4218,0.37182041744304883,0.5321264950796094 zee,zee,4219,0.6441844499665529,0.23588688400237645 zee,pan,4220,0.30704268738508733,0.5886080352557902 zee,zee,4221,0.2777713687698916,0.9525579988213925 eks,wye,4222,0.2916049582954635,0.36479303527285845 eks,eks,4223,0.18203746990797298,0.7219165981682398 hat,zee,4224,0.5666319712329421,0.5421871427604233 wye,eks,4225,0.4458349858817956,0.9706195326043711 eks,zee,4226,0.16294492416963813,0.8362146915120445 pan,hat,4227,0.7293597006505415,0.35215231788343837 wye,pan,4228,0.0036540728637147746,0.9534351724118004 pan,eks,4229,0.651806061031575,0.6877628315760286 hat,zee,4230,0.3033701670401001,0.6978700190197445 eks,hat,4231,0.9813730880370696,0.8073301729919906 hat,hat,4232,0.4406941528960675,0.11038994093232624 wye,pan,4233,0.6049346739736081,0.8481638285484625 wye,pan,4234,0.03250269370708647,0.07284046091092433 hat,eks,4235,0.8805603004827004,0.2757599334574219 hat,eks,4236,0.35959828200975064,0.942305832708083 zee,zee,4237,0.3542208694505635,0.9173262586874656 wye,hat,4238,0.768952199858574,0.3860553554975482 wye,zee,4239,0.15775845219755535,0.6337543088194983 pan,hat,4240,0.7490446337745393,0.7787017014295363 pan,wye,4241,0.39480526500730084,0.8301232751171009 zee,hat,4242,0.34372514541539545,0.49770081510285935 hat,eks,4243,0.38836962308546263,0.20018023403843987 pan,wye,4244,0.7365286003534705,0.9834124894169503 hat,zee,4245,0.8079109744541904,0.7703976742527068 zee,wye,4246,0.4282487915196205,0.20203065558191458 pan,eks,4247,0.9507204029429733,0.5630361304031504 eks,wye,4248,0.5065699052598817,0.6709355384501077 hat,zee,4249,0.09530331139521941,0.6141770440290856 pan,wye,4250,0.574482871032033,0.24679198539791947 zee,pan,4251,0.36882904197494304,0.20694570729434147 zee,zee,4252,0.18869049168164287,0.2881249393129065 pan,eks,4253,0.8529162429192656,0.6126252561626568 eks,eks,4254,0.9121680240505416,0.24514174410079137 hat,pan,4255,0.29284172836172306,0.7411592078657947 zee,eks,4256,0.340648501185675,0.8624542687016871 hat,pan,4257,0.5337295526676911,0.20956745825751122 hat,eks,4258,0.23233951000696584,0.7359066130916937 pan,hat,4259,0.5012993133229816,0.9840303477621715 eks,pan,4260,0.0557110727165222,0.3692997658300152 hat,hat,4261,0.7017095010065938,0.2235290487843009 eks,eks,4262,0.45572766007890264,0.8865479382954524 zee,wye,4263,0.5008782411049667,0.6537828452513129 eks,wye,4264,0.17630798589531016,0.8870092132233037 pan,wye,4265,0.4723205963134164,0.5883227580402909 eks,zee,4266,0.7813498909756447,0.3554002183159217 hat,eks,4267,0.6709709261548794,0.6826054557997793 zee,pan,4268,0.5869984233644046,0.4215965891872716 hat,wye,4269,0.23755705980379305,0.565717672067408 wye,hat,4270,0.05437547367302842,0.3843634628840725 wye,eks,4271,0.33499684404101904,0.7363519893989602 eks,eks,4272,0.42076370727497103,0.347103929260111 eks,hat,4273,0.20223347366198052,0.6349185327342544 eks,eks,4274,0.7194619239494552,0.6726333368969638 pan,hat,4275,0.15064209086091185,0.5650744857540827 eks,wye,4276,0.03269653193879951,0.29083447280996944 hat,wye,4277,0.9383386369025388,0.09737047596503401 pan,wye,4278,0.6033940134557939,0.1524866624571496 zee,hat,4279,0.919407700741633,0.6700497097456894 eks,pan,4280,0.09769799852915939,0.3471066706498296 hat,eks,4281,0.9148347334297323,0.3595323954523194 wye,pan,4282,0.32493658600558517,0.7120462337991681 pan,hat,4283,0.6050379829344159,0.018006169529162563 hat,pan,4284,0.37191179153184073,0.832305267226861 pan,zee,4285,0.2957451251158941,0.23349218064678878 eks,eks,4286,0.8813752969569559,0.3063937411460197 pan,eks,4287,0.22955891589246613,0.2437355707416211 hat,zee,4288,0.2100291042828707,0.3046125296846791 hat,zee,4289,0.6942460642160058,0.871648415206408 wye,pan,4290,0.13303046989523815,0.45261676602514167 wye,wye,4291,0.24091267860783117,0.432502161153847 wye,zee,4292,0.6513153856124736,0.023025130979235975 eks,eks,4293,0.772799624621821,0.13641136437762147 hat,eks,4294,0.9391670129701266,0.15143599739807145 zee,hat,4295,0.866742316822531,0.5669492043473316 eks,wye,4296,0.11546282204080383,0.9128514066164883 pan,hat,4297,0.020837302984029304,0.3069132274412595 hat,hat,4298,0.006892430057588106,0.6798603206549415 hat,wye,4299,0.6559693329859475,0.9101410668227939 pan,pan,4300,0.14308736404653355,0.35525668832657153 eks,hat,4301,0.04475741710473613,0.3360654229410476 zee,eks,4302,0.300825418985067,0.5528561991382178 zee,pan,4303,0.3269045708474553,0.9274904871303865 eks,hat,4304,0.4580262055344778,0.9863999543980315 zee,pan,4305,0.054247648849443775,0.03062117326702829 zee,zee,4306,0.2506554143610683,0.5597570122349527 hat,zee,4307,0.6572769759538587,0.7762188360555565 zee,zee,4308,0.6244811945148983,0.6455417265947343 pan,pan,4309,0.14825540740448062,0.7586294908793549 wye,zee,4310,0.3157871729124738,0.3917102144253892 eks,hat,4311,0.6708501828317742,0.004568949785298204 pan,eks,4312,0.20998610203251922,0.7744934955144873 zee,hat,4313,0.40564280799464325,0.33455931413035944 hat,zee,4314,0.26557751620121417,0.030582294685487232 wye,eks,4315,0.8346822718173391,0.9087526385931736 zee,pan,4316,0.6650102486494331,0.47444093050485336 eks,wye,4317,0.5533052426698345,0.9963296753932288 hat,wye,4318,0.8500427306718407,0.3980491400101921 eks,hat,4319,0.587710279503696,0.7637256058032382 hat,eks,4320,0.225195776008963,0.34680409151838987 eks,eks,4321,0.3743649517286406,0.371323975760271 zee,wye,4322,0.08196046591615203,0.9354600035181082 pan,zee,4323,0.1270141412555008,0.9359092028185755 pan,wye,4324,0.8265091425517825,0.8730857418980851 wye,hat,4325,0.18762256928648036,0.3496377335361346 hat,zee,4326,0.5027579931171035,0.4533737960921881 pan,zee,4327,0.8574481014982461,0.5295177741370016 eks,hat,4328,0.04469772107287828,0.1558945876794342 zee,wye,4329,0.040009010165471426,0.23762769464838596 wye,eks,4330,0.7337424822041352,0.9253645788362634 eks,pan,4331,0.39774327394939324,0.7598516907632268 zee,eks,4332,0.6650861493530829,0.9532385654163494 wye,zee,4333,0.623256894200598,0.9959963338862539 hat,hat,4334,0.5194251677645445,0.6069457992071033 eks,eks,4335,0.27590012941997233,0.4710389173795224 eks,wye,4336,0.20559084127748029,0.07907344682124973 zee,eks,4337,0.7274918229548967,0.4560003890137745 eks,wye,4338,0.7956872034220226,0.5293505141201019 eks,hat,4339,0.7870829513432012,0.43739349603781874 zee,hat,4340,0.7603664092180368,0.9580821743227704 hat,wye,4341,0.13255591202916173,0.6036817350896815 hat,eks,4342,0.894832446069551,0.20041478240523392 pan,zee,4343,0.25499861370064547,0.7429826617008429 wye,wye,4344,0.052662357337272314,0.29674416350945576 wye,eks,4345,0.32377948428256254,0.44346746414092775 pan,wye,4346,0.981200940391299,0.3540023526814763 zee,pan,4347,0.8084421949971258,0.30776403749247283 wye,hat,4348,0.4821078789121165,0.4162262532349117 wye,hat,4349,0.4367902393016294,0.05920613613537973 eks,hat,4350,0.9339368174600853,0.7317847021280102 zee,hat,4351,0.9429615758129121,0.5240015841208292 hat,zee,4352,0.0664957669868742,8.818962627266114e-05 pan,eks,4353,0.8282722812326957,0.23408835381449733 zee,hat,4354,0.1538284653082913,0.6089810980954452 zee,eks,4355,0.46866002588451194,0.9134518194404112 pan,eks,4356,0.01315481017386444,0.44644705644627847 wye,pan,4357,0.15872648196015937,0.4101120817770719 eks,pan,4358,0.4048463543687769,0.8180080997048252 eks,hat,4359,0.18749105355156304,0.031119717506070232 wye,eks,4360,0.5994338059975802,0.7593584300322925 zee,pan,4361,0.4041175236502057,0.563867680719028 pan,pan,4362,0.4776831446864783,0.31255268452634855 zee,zee,4363,0.737623707262791,0.07173859048743914 eks,zee,4364,0.06851910387772064,0.6267119426769414 pan,pan,4365,0.8056978268678051,0.6122184248222929 wye,eks,4366,0.6130750784896909,0.3739723925301818 zee,eks,4367,0.5479247041679578,0.8471361139630293 hat,hat,4368,0.6173031043354198,0.7380826201700894 hat,pan,4369,0.18322206558953436,0.3662885008446586 zee,pan,4370,0.8569969483007317,0.731735360698434 zee,zee,4371,0.20408101154886704,0.43495561327109344 wye,eks,4372,0.3106731927957148,0.8646328772903458 zee,pan,4373,0.39321439524831203,0.2914282319820135 zee,hat,4374,0.683824883019394,0.585513739811086 hat,hat,4375,0.9928427533843932,0.4919698293838758 eks,zee,4376,0.8528651690503563,0.6839515405337084 wye,zee,4377,0.6209381983202935,0.37443140551688425 hat,eks,4378,0.05864089512370707,0.3851321842794584 hat,eks,4379,0.385346641589309,0.49130997093061135 wye,eks,4380,0.41688102647846714,0.4373087113569425 wye,zee,4381,0.7486814244189324,0.45486094891390894 wye,zee,4382,0.6423172315048185,0.43668923283070715 eks,eks,4383,0.8187617783793841,0.9557936564036845 pan,eks,4384,0.5100350554093268,0.8092077539642156 hat,pan,4385,0.47426099560303103,0.6325566666019241 pan,wye,4386,0.03535725248176258,0.21559585940453474 eks,zee,4387,0.5578706674280356,0.5892456559407706 zee,hat,4388,0.3301766575217969,0.3233192495545678 hat,wye,4389,0.17144446980658334,0.17462284811463846 wye,wye,4390,0.7204182651096341,0.09552085794825671 zee,hat,4391,0.4346285785864693,0.9698660828641514 wye,eks,4392,0.08391983953449689,0.4685350106442322 pan,zee,4393,0.4995072530912873,0.7435874077135464 eks,hat,4394,0.6446893978656929,0.742983523935812 hat,eks,4395,0.05068057954766625,0.32284857142742274 zee,wye,4396,0.031143786348458158,0.4250465603658179 pan,zee,4397,0.47789346509127195,0.35190784679302956 eks,zee,4398,0.18676354095379522,0.8523337248259436 pan,zee,4399,0.4023182691161423,0.9889383169990947 wye,hat,4400,0.06936764963814968,0.3043996463710237 hat,hat,4401,0.1471442142546867,0.9419015090081274 zee,zee,4402,0.05608507131691576,0.3577189025004591 zee,zee,4403,0.6778157751992904,0.3796072620376758 eks,wye,4404,0.20538620731982282,0.20907310428515913 pan,hat,4405,0.770037239607531,0.8918149402479805 zee,hat,4406,0.5633321574207005,0.23765572260844736 pan,hat,4407,0.5936012356219856,0.9640723007408432 hat,hat,4408,0.10549405386012722,0.5508069885788562 eks,zee,4409,0.42871073222230527,0.7803087556052989 pan,pan,4410,0.2570515021562684,0.18774521042902936 pan,wye,4411,0.06223387369679134,0.9162029404566593 wye,wye,4412,0.7213015230538632,0.6718375213896831 zee,pan,4413,0.8367397203622533,0.7284961033977948 eks,eks,4414,0.6694554317033412,0.9879307986798048 eks,pan,4415,0.557526011305301,0.029599606830183034 zee,eks,4416,0.362024615946302,0.01598375230508753 hat,wye,4417,0.3577525385238439,0.8867789429771926 pan,eks,4418,0.9353086997459791,0.840900748615823 pan,eks,4419,0.33299408925849605,0.9684574693908093 hat,hat,4420,0.9677858495817456,0.3852147823991926 eks,pan,4421,0.09737990168391619,0.8610505154621456 wye,zee,4422,0.18372838583640871,0.677719382536205 zee,eks,4423,0.9639383645238275,0.6490468629834018 zee,eks,4424,0.7312421688490892,0.8667063684553176 pan,pan,4425,0.46845749017099236,0.11757543510403212 zee,eks,4426,0.5623944023007167,0.7586419852976186 eks,hat,4427,0.9350368655950849,0.9337007230580264 pan,wye,4428,0.28446652374011305,0.9335853004150079 zee,pan,4429,0.2435597397475192,0.9504689136369295 eks,eks,4430,0.18612060795223095,0.5312429574676665 wye,wye,4431,0.6855292088150996,0.5336035912975299 hat,wye,4432,0.3714804665656307,0.5063602618918502 eks,pan,4433,0.24252721996042959,0.28456246724868983 wye,eks,4434,0.1632748286056276,0.6415721193438837 zee,eks,4435,0.3774471419632248,0.29246801034228276 wye,eks,4436,0.21438792699902287,0.1153507200959073 eks,wye,4437,0.47860288810882523,0.25957684880561227 pan,hat,4438,0.35637893830039535,0.566432274547929 wye,hat,4439,0.8059627789626932,0.9269765317602825 eks,wye,4440,0.5734217911203672,0.11837434570151262 hat,wye,4441,0.9694639452414799,0.4236734467526825 wye,eks,4442,0.5598645482568733,0.8346150307672233 pan,hat,4443,0.7863543856807507,0.44923205034018343 zee,pan,4444,0.06405328319447168,0.853068557145527 hat,wye,4445,0.16426131233686758,0.9176538861190784 hat,zee,4446,0.701715405648832,0.8559468613900958 hat,pan,4447,0.13582612436147878,0.497058893619451 hat,wye,4448,0.6624067185928518,0.7937707954447804 zee,zee,4449,0.6191704067390206,0.43116585741152647 pan,hat,4450,0.48601459169792693,0.9674848773976846 pan,zee,4451,0.9254868696106908,0.9850750432504393 hat,eks,4452,0.4276425759791995,0.9805685474387745 pan,wye,4453,0.9879231882058336,0.05532023052523416 wye,zee,4454,0.9975176429595021,0.3219020340649893 zee,wye,4455,0.9045463102006963,0.848434465758308 zee,hat,4456,0.08456763094566144,0.010673585995051305 pan,hat,4457,0.0033725690276290576,0.9788940035931831 hat,wye,4458,0.20520432149483148,0.5343150390458646 wye,wye,4459,0.5647236635302233,0.3680663878959515 pan,zee,4460,0.1592478815974211,0.4117697078037489 pan,pan,4461,0.62386217954306,0.32217051912035644 zee,zee,4462,0.18223498064407118,0.36892881666552835 eks,wye,4463,0.6602307362128103,0.824908201375127 eks,eks,4464,0.4730857339400537,0.9000760203605631 zee,wye,4465,0.9363792956174969,0.8531230483001019 eks,zee,4466,0.8051994741838333,0.5378817334878282 wye,eks,4467,0.30400985135251946,0.7987746479150503 pan,hat,4468,0.6433621739438674,0.6213575464612451 eks,hat,4469,0.9576601311217493,0.653626721264175 eks,eks,4470,0.98941560149702,0.36720018654175823 wye,wye,4471,0.01614755296128778,0.6311179470884701 wye,hat,4472,0.36611005710206224,0.8033266539816868 hat,eks,4473,0.37497169859420076,0.979993946243979 hat,wye,4474,0.9049733829008388,0.2530406481106403 eks,eks,4475,0.7604785827914787,0.0635000262397527 hat,zee,4476,0.09254183760409695,0.9759835344600776 eks,hat,4477,0.09002534954722263,0.0791900913528687 zee,wye,4478,0.7347401014901926,0.5874553765719767 zee,eks,4479,0.18927674591359955,0.9166186983358086 eks,zee,4480,0.06846268410645817,0.17937317736357228 zee,pan,4481,0.9513688420096763,0.23610642422264838 eks,zee,4482,0.5207774812238394,0.7322116837434511 zee,wye,4483,0.6011563904137914,0.6359195042320677 pan,pan,4484,0.5657005920846724,0.18970181926871021 hat,eks,4485,0.14129738926071922,0.09762322511903287 wye,wye,4486,0.587567750076066,0.6669838072984797 eks,wye,4487,0.5516672019589355,0.7655831718008789 hat,wye,4488,0.7926043240629409,0.5015162896194846 wye,wye,4489,0.6948771123324418,0.5976836677553925 hat,hat,4490,0.9101749423682922,0.9101168870690818 pan,wye,4491,0.5070024474601975,0.7305420057451063 hat,eks,4492,0.1759423893989127,0.3959141841599947 eks,pan,4493,0.6837930443900314,0.6284806971996789 pan,eks,4494,0.01334023940553175,0.8984813314174203 wye,hat,4495,0.4602646789703714,0.12318800994516399 wye,pan,4496,0.7594514407425375,0.6656599679572212 zee,pan,4497,0.0776140160787101,0.02352743433085669 wye,zee,4498,0.02184839096132485,0.3911325637076585 wye,pan,4499,0.8747947010040115,0.9998479502810276 pan,zee,4500,0.47622133460809657,0.12656764784587515 zee,pan,4501,0.9880755588957435,0.780394078164109 wye,pan,4502,0.5872223616487092,0.24413711463218768 pan,wye,4503,0.3169372633496723,0.6300856859908801 hat,eks,4504,0.7328180759655728,0.8128425968959323 pan,hat,4505,0.4952953134840421,0.7414385634621263 hat,wye,4506,0.6481956843803017,0.6728352515966057 wye,zee,4507,0.5592247301828953,0.38151239977141804 zee,eks,4508,0.6599555713404097,0.05617030765448339 pan,pan,4509,0.728902215552813,0.27293683220270937 hat,wye,4510,0.3413847510209549,0.9446873420872602 wye,hat,4511,0.9311713164896562,0.5805780192421368 hat,eks,4512,0.23786081178866836,0.36277905022985646 hat,wye,4513,0.965484537526872,0.940488169982859 wye,zee,4514,0.6337020189425001,0.24780419902689788 eks,zee,4515,0.5658257878312276,0.07673202860335637 pan,pan,4516,0.3492462945952187,0.2946268275283319 pan,eks,4517,0.3809006676495632,0.9025992620313033 hat,eks,4518,0.44713434909121097,0.16699429132092636 hat,eks,4519,0.04008702328986802,0.6174480537157027 wye,eks,4520,0.21810500990652393,0.23695212300002177 wye,eks,4521,0.8007710094864122,0.4612346253522104 hat,eks,4522,0.6458119971443835,0.21584168033920748 wye,zee,4523,0.05279712720226515,0.027511378098411865 zee,hat,4524,0.1957893855808428,0.2551266540561208 zee,pan,4525,0.011543703995189447,0.22663954461488478 pan,pan,4526,0.04880772479373874,0.07481795594892848 pan,hat,4527,0.31836250428860824,0.32626988649341593 pan,eks,4528,0.31647815243381505,0.9543304719705902 eks,eks,4529,0.6724206236624584,0.407679006701397 wye,hat,4530,0.01951408829488066,0.8016601846958178 eks,zee,4531,0.34858797365915506,0.4282397998858426 pan,eks,4532,0.8877015003398467,0.7747761049575923 zee,hat,4533,0.20311049077197163,0.9056538940562936 zee,eks,4534,0.042723672522825384,0.597559530943149 zee,hat,4535,0.46136202746827326,0.42271339711114486 eks,wye,4536,0.009469467689817823,0.5905509650490668 hat,pan,4537,0.835149120257535,0.33196199258862646 wye,pan,4538,0.7691954303113361,0.5906545288840418 wye,eks,4539,0.666121467152889,0.7009152639751882 pan,pan,4540,0.8705353878768347,0.569382489859167 pan,hat,4541,0.4923885483714453,0.9049207586310641 hat,wye,4542,0.27993688119753957,0.7737127207588408 zee,pan,4543,0.06684443758496139,0.669147012692109 wye,zee,4544,0.41011486047935275,0.7628128623557089 zee,pan,4545,0.6170845342886218,0.16351912171251637 pan,wye,4546,0.30897074727172746,0.07486636973164118 eks,eks,4547,0.03524990401153394,0.904683107161618 hat,zee,4548,0.6838256979656141,0.9575551645763191 wye,eks,4549,0.9129619062625066,0.7815822557674902 wye,zee,4550,0.4016549692069845,0.724711080886896 zee,zee,4551,0.5217798806787498,0.060225688816844425 hat,hat,4552,0.38397767907558444,0.6583775510562486 pan,zee,4553,0.8167689053817359,0.28922410230760154 wye,wye,4554,0.9638574684692321,0.29330354945805037 zee,zee,4555,0.5750699152551632,0.06554938093659102 wye,eks,4556,0.43879872159435107,0.5781692813513072 wye,pan,4557,0.43671727561555884,0.8495155027864089 zee,hat,4558,0.030771073498329193,0.22547664086558517 pan,zee,4559,0.8853445527158975,0.9598699991813698 pan,pan,4560,0.022873859395381335,0.16717654342761945 zee,hat,4561,0.9373515354219202,0.2891538081093269 wye,wye,4562,0.9962200957849251,0.7504411563669804 hat,eks,4563,0.05502367054609869,0.6444826263272572 zee,wye,4564,0.7531892953023888,0.662798570253206 pan,wye,4565,0.2693404460591514,0.8267302541357341 wye,pan,4566,0.8263810161941457,0.049441142990266584 wye,eks,4567,0.0013320296153030986,0.3527351039106079 pan,pan,4568,0.7262006271124115,0.2750926075667838 pan,hat,4569,0.6676401567199843,0.15611308180709593 hat,pan,4570,0.5538202729746985,0.4068149726511291 pan,eks,4571,0.968095869026238,0.025471172108070594 eks,hat,4572,0.4698777463924877,0.5590684721569192 pan,pan,4573,0.8739437627285006,0.29509284815603065 pan,pan,4574,0.8828597588783772,0.0029763172734756926 zee,zee,4575,0.4923232521663191,0.31138573511811585 pan,eks,4576,0.4634084033597302,0.7040687106187243 pan,hat,4577,0.4415962788129276,0.8575497231199157 pan,hat,4578,0.6072792806625152,0.45767228806970406 hat,hat,4579,0.7716061175886524,0.5940949446227113 wye,zee,4580,0.8815091817106934,0.19682219276482926 zee,pan,4581,0.6615122130690573,0.743282484093763 hat,zee,4582,0.7466772782921713,0.6024593387871963 zee,zee,4583,0.7293308998803242,0.9194675588274827 pan,wye,4584,0.9785223653345103,0.3599874182922952 wye,wye,4585,0.49005088405256925,0.19667802308060156 zee,eks,4586,0.07759080031155674,0.5800418301347179 wye,pan,4587,0.028648375277809612,0.7340705243928477 hat,zee,4588,0.15982614073843593,0.29678575429874954 wye,zee,4589,0.7660330001010108,0.12214362772060794 hat,zee,4590,0.5798093869980113,0.10378695075036093 zee,wye,4591,0.3549198162177106,0.15971238689401845 zee,zee,4592,0.3725968594942376,0.10170369746035934 wye,eks,4593,0.7856019829313924,0.4108035864939361 pan,eks,4594,0.9636076558747869,0.6429412934414747 eks,zee,4595,0.6544038361180394,0.4941333402391265 pan,eks,4596,0.6771264909006598,0.008696187477938766 pan,zee,4597,0.5913051026982411,0.41009568634323257 zee,hat,4598,0.8546218618730578,0.4453962412371504 pan,hat,4599,0.31929533389085374,0.9456168170774322 wye,wye,4600,0.9581114071286606,0.07673690685162327 eks,eks,4601,0.17142456675630824,0.428244260538891 pan,wye,4602,0.9706134171920786,0.2394012508489064 pan,pan,4603,0.7077416345290591,0.3940789509138629 wye,eks,4604,0.26884887570750515,0.0629227877462456 wye,hat,4605,0.9967036371872702,0.9394080649718911 wye,zee,4606,0.4136967828620527,0.9691879757554137 wye,eks,4607,0.7882253618539071,0.040484731408140906 wye,hat,4608,0.8502136933818653,0.22282199291281735 hat,hat,4609,0.3806800313299039,0.7432483423888808 eks,hat,4610,0.8546204254968556,0.544666096374198 wye,zee,4611,0.9797738948452778,0.7539379828966757 zee,zee,4612,0.5658890329943034,0.3209865549677199 eks,eks,4613,0.036974707048940014,0.13498566781731325 pan,zee,4614,0.4962373115799128,0.34690328340466625 hat,eks,4615,0.03988943828313485,0.5198278894510299 zee,wye,4616,0.3113084465595777,0.5849628571688789 pan,wye,4617,0.6064318491662761,0.9709587074540149 eks,eks,4618,0.6067298140262544,0.6856518510847851 hat,eks,4619,0.5013319604077514,0.09625820792492479 eks,eks,4620,0.9081698767653911,0.09914145966043864 zee,eks,4621,0.30992740946284036,0.3114230762548156 wye,wye,4622,0.9124025251398724,0.9456164182783081 hat,pan,4623,0.8700806062428935,0.2702206397600061 wye,pan,4624,0.5833679710036083,0.9019285736689665 zee,pan,4625,0.8458203200231942,0.5450580672631699 pan,pan,4626,0.8541837089895298,0.10662879193504415 pan,pan,4627,0.6949946108264341,0.32599427511471524 pan,hat,4628,0.8957043450158336,0.5673889892957554 wye,hat,4629,0.8464282723870642,0.5202135613238874 wye,hat,4630,0.613215207985136,0.3257127644270309 zee,hat,4631,0.9018507034320511,0.7039556507979018 pan,pan,4632,0.4889756359426054,0.3597265690523318 hat,eks,4633,0.9578525826572483,0.14404380765797786 pan,zee,4634,0.3044854324264554,0.7688031286868651 eks,wye,4635,0.6963926992471413,0.3473111484128578 zee,wye,4636,0.7694758941220707,0.18753300419759023 eks,zee,4637,0.016930162668300386,0.916668923894452 pan,eks,4638,0.1800152730244199,0.8740912343460313 eks,eks,4639,0.36139046295982613,0.40696722185592216 wye,wye,4640,0.03629701172915789,0.5927800218745649 eks,wye,4641,0.8718989050597648,0.39307440967351814 zee,hat,4642,0.3250137468458404,0.6558363341062954 zee,hat,4643,0.4795723404826593,0.46439187383822056 zee,hat,4644,0.5269030281828351,0.5294159733959858 wye,zee,4645,0.09245439495290197,0.7686039676164822 pan,hat,4646,0.831713886231876,0.2677496071207002 eks,zee,4647,0.42422452591610793,0.2126460780549554 eks,hat,4648,0.5207613338836535,0.48593533079307305 hat,wye,4649,0.23701829308813094,0.8653571299757888 wye,pan,4650,0.20994504688794036,0.6907804524857445 eks,zee,4651,0.2453117436615031,0.6150127076085181 zee,zee,4652,0.042537661080377376,0.8584990883333112 hat,pan,4653,0.21286942433921574,0.8764916061320036 pan,hat,4654,0.5285099685069632,0.5178008352128922 hat,eks,4655,0.26641282472179073,0.5266452477752575 eks,pan,4656,0.6818528635056993,0.337950728316578 hat,wye,4657,0.14061995895280166,0.47199609775073736 zee,zee,4658,0.6602472108733521,0.2687315624525114 wye,zee,4659,0.2520902351101554,0.8428783239555871 hat,eks,4660,0.30472363074700515,0.07217266625982621 hat,wye,4661,0.2091333254634984,0.1548046270754979 eks,pan,4662,0.11981801924487756,0.8469445222208282 hat,hat,4663,0.3119827522367612,0.4259694252127655 eks,hat,4664,0.3269411701545405,0.9376670988013223 pan,zee,4665,0.054344923432058434,0.16217922759144587 wye,zee,4666,0.4186702128599753,0.2835839275998192 wye,zee,4667,0.0646217379660351,0.30530257092910784 zee,eks,4668,0.07870649960682297,0.2515794150323323 hat,hat,4669,0.5003476787456538,0.6310918883710445 pan,hat,4670,0.6275111165777365,0.8054897414350336 pan,pan,4671,0.1499838451712301,0.6223414752307141 hat,wye,4672,0.4988884658239877,0.9906049192655605 zee,eks,4673,0.984318771878163,0.7280796955832692 zee,wye,4674,0.23054557107461504,0.19681174789488143 wye,eks,4675,0.7334463313910938,0.28306119200330626 eks,pan,4676,0.1423438599979604,0.35330918689671975 wye,wye,4677,0.6577383987571024,0.15021996734596066 hat,zee,4678,0.9082274952383252,0.7405877302837555 eks,pan,4679,0.8074215267431348,0.5236668774007812 wye,hat,4680,0.5108382071350746,0.47151957178400083 hat,wye,4681,0.9809419297944051,0.23507029745163854 eks,hat,4682,0.9342926038131985,0.7979695752949024 eks,hat,4683,0.8736202694364024,0.38219743850966714 zee,pan,4684,0.44163999038860213,0.38504226387550344 pan,zee,4685,0.03027055342778162,0.08035681468258382 zee,wye,4686,0.08118893501639246,0.27655291599781473 wye,hat,4687,0.06385275336646346,0.35108434035108427 pan,hat,4688,0.5644746928123485,0.35881287919613414 wye,hat,4689,0.8811472299764586,0.603532565127673 hat,wye,4690,0.2892596087785041,0.7179425188945073 eks,wye,4691,0.4661213596465832,0.6018977897376697 eks,wye,4692,0.6256084558730343,0.5912072106343357 eks,wye,4693,0.43739401507823317,0.4449591712634142 hat,pan,4694,0.22337135846397238,0.6406931174403291 pan,wye,4695,0.39634806245632836,0.6355835294701532 eks,hat,4696,0.008662277886696601,0.3721538653338412 eks,zee,4697,0.7171113231602343,0.7425350749221431 zee,zee,4698,0.9050833916740578,0.46132560825719815 eks,pan,4699,0.3986676727991927,0.5705940358286782 pan,hat,4700,0.9055844258025669,0.7437707529087395 pan,zee,4701,0.8070216695328106,0.4694866303836862 zee,zee,4702,0.7415668922687337,0.8797752247285192 eks,wye,4703,0.7722596990678992,0.7367517235830364 wye,pan,4704,0.9555278566799899,0.2423309359426713 pan,eks,4705,0.9264663466646326,0.18799757892955882 eks,hat,4706,0.6995046411916459,0.9587840493554082 hat,wye,4707,0.7945060726118334,0.8708814355187628 eks,hat,4708,0.1778567317636336,0.4554107042944405 eks,hat,4709,0.8605269620945222,0.9282320361391482 zee,pan,4710,0.7925893623491367,0.8373876174093722 eks,pan,4711,0.6921652120265591,0.49820807295967395 eks,hat,4712,0.8183219512899657,0.4748837712114852 hat,zee,4713,0.3394230162235836,0.4370239027445896 hat,hat,4714,0.8405345514548883,0.8644132717621533 wye,zee,4715,0.8120809467339879,0.44574425551887853 hat,pan,4716,0.012844309530080089,0.25779486121957473 hat,eks,4717,0.7365074627250664,0.9439422879543493 pan,pan,4718,0.23929472797530638,0.15699808756834377 wye,hat,4719,0.9471866108884663,0.03869282767938487 pan,wye,4720,0.8444868689691774,0.46503509886894867 wye,eks,4721,0.9347768806843397,0.8839032510290749 wye,wye,4722,0.3742418961489814,0.5186714928696796 pan,wye,4723,0.7424435191645153,0.2988557048069972 wye,eks,4724,0.2784537107571192,0.9729902650787269 hat,wye,4725,0.07061996836486473,0.7738977079370831 zee,wye,4726,0.8269425781542478,0.7279915540846144 wye,pan,4727,0.9998228522652893,0.19388380502268276 eks,pan,4728,0.0933124028124549,0.6002309994378867 pan,zee,4729,0.18970289783165384,0.4228791314162068 zee,hat,4730,0.19347150884164055,0.37509711156847003 eks,zee,4731,0.8015159150372596,0.006137056655737272 zee,wye,4732,0.9567066838864685,0.6222637241828745 pan,eks,4733,0.2972122648067026,0.8561276270460755 hat,eks,4734,0.4361140296691789,0.19415398432919728 eks,zee,4735,0.028008275847919872,0.12986606641246612 eks,pan,4736,0.3770691592676825,0.7987276999117943 eks,hat,4737,0.6487232074787501,0.3406218786292676 pan,pan,4738,0.10422609081686773,0.7198350875588949 zee,pan,4739,0.7741427673583083,0.26198990214937334 hat,wye,4740,0.1119893643732226,0.41788347372200485 hat,eks,4741,0.7241531241241961,0.9089044568897544 hat,wye,4742,0.8802453504639547,0.7366398321703834 eks,pan,4743,0.2504490581104497,0.29547558676954633 hat,wye,4744,0.4979148854618458,0.11700636396309227 wye,zee,4745,0.9393988198376061,0.485008216753421 eks,pan,4746,0.16989991264520043,0.018451772273192057 pan,wye,4747,0.6742534054657287,0.2313198886390252 zee,pan,4748,0.7418671304073968,0.8575401492075233 wye,zee,4749,0.42654335022770995,0.5311170879512087 zee,zee,4750,0.27987943738440046,0.6560072393556038 hat,pan,4751,0.5858041848273323,0.6295306564064627 zee,eks,4752,0.4429063010177615,0.6964425867324696 zee,wye,4753,0.8545851137163856,0.9679476038287586 zee,wye,4754,0.0024174510881032063,0.8687606547332845 eks,hat,4755,0.7839088793029254,0.524722394465856 pan,pan,4756,0.397023046047854,0.11000986851499284 wye,eks,4757,0.21991834430842194,0.3045979240462181 hat,hat,4758,0.3227532114958719,0.8948973181698502 pan,wye,4759,0.26645602877267305,0.7437714335312278 zee,wye,4760,0.022667005941863883,0.45092868070487113 zee,zee,4761,0.5717912178641216,0.35870172894832364 zee,hat,4762,0.9059466160415109,0.6087785388744085 zee,pan,4763,0.9251602172892174,0.40701572328742064 zee,wye,4764,0.31384490226563877,0.7399150124011242 zee,zee,4765,0.9455569776929973,0.8604499298561917 zee,eks,4766,0.37773136340995606,0.25694678545170857 eks,eks,4767,0.7219583517207702,0.727638969023518 zee,pan,4768,0.08069188699987828,0.976850177257017 zee,wye,4769,0.9897615767481157,0.6975316151559802 eks,hat,4770,0.23499057343433494,0.47659932458800036 wye,hat,4771,0.1844047653981028,0.022663675164210306 zee,wye,4772,0.09271907588361772,0.13142402431280997 eks,eks,4773,0.4725220407504178,0.9526498802931831 hat,pan,4774,0.3043981591451792,0.7226259220082152 eks,eks,4775,0.1884342557611145,0.8408029444627654 hat,hat,4776,0.2338057751520678,0.09800686529861335 wye,eks,4777,0.7891590901274228,0.34487105920096073 zee,pan,4778,0.3599347922656181,0.18218338698595427 hat,hat,4779,0.5478941318063015,0.039942288716842134 eks,pan,4780,0.5515560102138437,0.9790752715442088 pan,zee,4781,0.9530344417320495,0.5854254757860599 zee,eks,4782,0.2679740964392081,0.9539737990088547 zee,hat,4783,0.8937130637825316,0.9482001237924185 eks,zee,4784,0.535394341606814,0.9507496372757723 hat,pan,4785,0.6905839897107999,0.7545488329990303 hat,wye,4786,0.01916979841839017,0.2780999914884037 hat,zee,4787,0.9707632375104736,0.823966840635361 zee,eks,4788,0.2900344019459282,0.4551744845405584 eks,zee,4789,0.581964402755552,0.6562137540702333 eks,wye,4790,0.5159650104250221,0.6583847382580487 pan,pan,4791,0.4314747391635376,0.11719605119566623 eks,pan,4792,0.25200941717038683,0.5319239571062138 pan,wye,4793,0.8596672453072937,0.7203822316562272 zee,pan,4794,0.41119242720559135,0.16288056185655064 eks,hat,4795,0.3563187687683087,0.9628268767119371 hat,hat,4796,0.8166219529056433,0.38174138297770366 hat,wye,4797,0.6239839123252174,0.5446595433698003 pan,wye,4798,0.5914484609361321,0.5863799669381212 zee,eks,4799,0.05246384333604992,0.7084334011458191 hat,wye,4800,0.7975814555638998,0.6742547886299404 eks,zee,4801,0.32122401484315466,0.17580532480506172 hat,pan,4802,0.9532078757744794,0.11431895466047837 eks,eks,4803,0.07646493070387805,0.43572994178375957 pan,hat,4804,0.7521042104003381,0.40785444565501394 hat,pan,4805,0.2078967635625505,0.39646961279273085 wye,wye,4806,0.2900119081724013,0.7387990125329715 zee,wye,4807,0.5734922188510542,0.9110138243945486 wye,wye,4808,0.5888053656056721,0.6357658487621642 hat,wye,4809,0.9209565722669064,0.6387306072748612 eks,hat,4810,0.5922647221870971,0.8442189902394986 wye,zee,4811,0.03606766464192224,0.6770940604237418 wye,wye,4812,0.6090893281675697,0.647518662887554 eks,hat,4813,0.5365520827981886,0.3202367220791762 eks,eks,4814,0.1473763964352245,0.8033805314306441 zee,eks,4815,0.23445194234627598,0.26893786383591456 eks,wye,4816,0.1147712927157829,0.7402057160513233 zee,zee,4817,0.23202362739606153,0.47886038007736564 wye,wye,4818,0.7928418369663099,0.46501269022958036 eks,zee,4819,0.712974515799127,0.542449640039289 zee,wye,4820,0.3079653233324052,0.6574173411380181 eks,pan,4821,0.09797648760110378,0.1605809921671595 eks,pan,4822,0.7899521961417237,0.29314917908691485 wye,hat,4823,0.581757236497391,0.9463973717007303 hat,hat,4824,0.40413977500334364,0.08865258409882204 wye,hat,4825,0.7001704003542419,0.7416812627335253 zee,wye,4826,0.8846834351985541,0.9987381458494847 wye,zee,4827,0.9763864041558291,0.6651833167661081 eks,pan,4828,0.3701118364091578,0.929356390393571 wye,hat,4829,0.5458229710063858,0.12382895782525949 zee,hat,4830,0.5163276995322134,0.4142396117545545 pan,pan,4831,0.6131916476098028,0.7258426490475796 pan,pan,4832,0.6315103295350951,0.5044543655861339 eks,zee,4833,0.9679369605057206,0.011684326982985715 zee,wye,4834,0.34898673117720225,0.6580602623791368 eks,wye,4835,0.4939841533621645,0.5809417229170144 wye,pan,4836,0.569545208750187,0.7786619129324108 zee,wye,4837,0.5226423611496498,0.9996700213544367 eks,hat,4838,0.935982420664342,0.8799965660826473 wye,wye,4839,0.6500461572660748,0.44309281124092303 hat,zee,4840,0.4899151526577582,0.7548638962729715 pan,wye,4841,0.9467012654543959,0.4850494160239309 zee,pan,4842,0.30320721599497247,0.5095143023332701 hat,hat,4843,0.17685636300959084,0.7787222148601067 wye,zee,4844,0.626255827932442,0.4064381262515122 pan,zee,4845,0.28060256724829724,0.1194472053493133 hat,wye,4846,0.8368724870819061,0.28659871919539215 hat,wye,4847,0.4904015837947624,0.7008487005892795 pan,pan,4848,0.67625412710794,0.44913802116649393 eks,zee,4849,0.8081214809760484,0.4375026041190979 eks,eks,4850,0.2525590429487127,0.36945113778662786 hat,eks,4851,0.5131509545709081,0.583688721156048 zee,eks,4852,0.014141655432134415,0.5189268194067536 wye,eks,4853,0.8412950512846047,0.25597362111669464 eks,wye,4854,0.12400039159204757,0.5713605164804926 wye,eks,4855,0.8743253482906079,0.7740900498864154 eks,zee,4856,0.9765509957513644,0.06071911475075953 pan,wye,4857,0.23806525172795734,0.2959143584631805 pan,pan,4858,0.9189791410736298,0.7770463990190287 pan,zee,4859,0.8322629927658091,0.34582111363584955 zee,eks,4860,0.3338609486281813,0.3484284682131591 zee,hat,4861,0.13328569444496707,0.4177841139240035 zee,eks,4862,0.48622017397025397,0.07896067004609653 zee,wye,4863,0.6240325596862799,0.2809015820805495 wye,pan,4864,0.29934656970455364,0.401161898451611 wye,hat,4865,0.33964644206576833,0.37831409639409463 pan,hat,4866,0.3348192796730043,0.39422602502766824 hat,zee,4867,0.8800967275591628,0.869121595376977 pan,eks,4868,0.08813504131014349,0.8615201735498272 hat,hat,4869,0.03137488493693985,0.6013253974236795 zee,zee,4870,0.5723345813434529,0.5920424414132134 wye,hat,4871,0.42866884650575776,0.8587406078406857 wye,pan,4872,0.8048299563371534,0.09309848925430309 wye,hat,4873,0.48343329104464405,0.684262350564715 eks,pan,4874,0.9190574216192423,0.023243819371963403 pan,zee,4875,0.6013577540137748,0.636284103659697 hat,eks,4876,0.876674932281404,0.09417500045463179 wye,hat,4877,0.3699653574585806,0.4481319838637625 eks,zee,4878,0.8140883903787601,0.9675148391636573 eks,eks,4879,0.8227355186912324,0.754836723664535 hat,wye,4880,0.5107655326943182,0.429814017179746 wye,wye,4881,0.8494740781256328,0.4865120606762955 eks,wye,4882,0.5564517747676477,0.8364351449356273 pan,hat,4883,0.8723128492154898,0.44043984808323666 pan,hat,4884,0.9402178619522376,0.19405443014027346 eks,eks,4885,0.8707313650863101,0.8057609437403466 zee,hat,4886,0.7016030425978176,0.10558873487974474 hat,zee,4887,0.19592751855539559,0.6245017403424943 wye,pan,4888,0.24417888243946928,0.4591742086366801 eks,wye,4889,0.9179229941131368,0.2037862299046369 eks,wye,4890,0.04910880060108913,0.07316217290218352 hat,eks,4891,0.2297927732533699,0.6559737139197993 eks,wye,4892,0.630140714403855,0.4123205327848799 eks,zee,4893,0.8863621874744464,0.35341030613050206 wye,eks,4894,0.08956997835221292,0.15153433659257443 wye,eks,4895,0.2302595629324965,0.2862207000255006 eks,eks,4896,0.595542985856601,0.6247689899970194 zee,eks,4897,0.7608028013428353,0.878174748817996 pan,wye,4898,0.40450598472844423,0.9381773198691041 eks,zee,4899,0.1567102404262226,0.2213311716892986 hat,hat,4900,0.8901137791212611,0.6090349204378238 eks,hat,4901,0.4107962861135135,0.6382257944674624 zee,pan,4902,0.699059960351012,0.9885800960251768 zee,pan,4903,0.8266877732317284,0.0677848179065984 hat,wye,4904,0.30857036671389493,0.21668637382948186 hat,pan,4905,0.6411579594900462,0.5351923498013205 eks,pan,4906,0.6854190139070013,0.8299360694533708 pan,hat,4907,0.5936171298524064,0.7041056598923683 hat,eks,4908,0.8503470988840566,0.6331693431984986 zee,eks,4909,0.9517994594813314,0.07539953012409928 zee,eks,4910,0.4535445737616459,0.8218048881320029 pan,wye,4911,0.4369913287175713,0.4720871164245992 eks,hat,4912,0.9940947899133816,0.4687982909569981 zee,wye,4913,0.7975684270658338,0.6973895935548693 zee,hat,4914,0.8248078318753365,0.24648082781434477 pan,hat,4915,0.5972128798923884,0.02932462768715416 zee,wye,4916,0.6624686517748942,0.8016741542650369 pan,pan,4917,0.24891816767946373,0.7798969646202224 zee,zee,4918,0.641375026211945,0.8347424300045329 wye,eks,4919,0.22099244372718618,0.4659468290849962 eks,zee,4920,0.7311583488804345,0.07752342335337659 hat,hat,4921,0.5785465847836638,0.6908978810578349 pan,pan,4922,0.7647463305911298,0.28073564029507714 pan,pan,4923,0.7385181536058433,0.361414367741285 hat,pan,4924,0.40224441655955634,0.19530268026233755 hat,hat,4925,0.653842164262253,0.6280602144296272 eks,hat,4926,0.5370983012158481,0.8265755341115193 pan,hat,4927,0.20003498013779974,0.33067633213900816 hat,eks,4928,0.2616862784842936,0.8976330171178399 zee,wye,4929,0.6597792701685063,0.5747306201637469 wye,zee,4930,0.7005469670714589,0.8590565664901815 eks,wye,4931,0.056783946256193096,0.13845635335075446 zee,hat,4932,0.17914823686110226,0.3724424181901871 wye,eks,4933,0.35047905702830917,0.03585739880658767 wye,hat,4934,0.5052702257066015,0.26639197043310225 hat,pan,4935,0.7192181204742805,0.3595231416956127 pan,pan,4936,0.2268254080621852,0.4964858179117778 zee,wye,4937,0.6231176411317095,0.25674942672821843 pan,wye,4938,0.8307759374051367,0.19772109525743065 pan,pan,4939,0.9918663359881192,0.3908108219044335 eks,wye,4940,0.3939161722668897,0.9425714270572593 pan,wye,4941,0.684790210390548,0.9744745064587994 eks,zee,4942,0.7765052392233155,0.12663912158745527 pan,pan,4943,0.27521613107535237,0.035785181333226945 zee,pan,4944,0.5842395564913692,0.011897528078530284 hat,pan,4945,0.28514048743680753,0.07363097335604496 hat,wye,4946,0.4057436295571034,0.571241351522998 pan,pan,4947,0.08892185709515954,0.824188422644117 wye,hat,4948,0.31710176239516497,0.2704638711875881 hat,hat,4949,0.7395993281771386,0.5735970605731027 zee,wye,4950,0.9215266366214452,0.4500407010606755 pan,zee,4951,0.9198627133436097,0.2906368510730867 zee,eks,4952,0.3969923775629448,0.22024693929882533 hat,eks,4953,0.5154408810016854,0.7038009086382059 wye,hat,4954,0.7843273989738635,0.3830263696806163 wye,hat,4955,0.8340489175824841,0.6288838568483295 eks,zee,4956,0.7811008985162822,0.8018574276178609 eks,pan,4957,0.19948892249539518,0.6412104115690623 hat,pan,4958,0.32954001616237283,0.13809011794903436 hat,wye,4959,0.3753128948010216,0.47542625730960586 pan,zee,4960,0.775513146568018,0.10589570588100916 hat,hat,4961,0.4416884389198312,0.9511653213275143 zee,wye,4962,0.3532053262185273,0.5274524054522398 pan,hat,4963,0.7498291735257391,0.2463257969663506 eks,hat,4964,0.9386114992431355,0.39299390498123243 zee,hat,4965,0.45139611357151777,0.38795035866424066 wye,pan,4966,0.07045237248114167,0.8099864640689171 wye,hat,4967,0.24118009132354112,0.1629785769528157 hat,wye,4968,0.04728174638088167,0.24887900862466006 zee,zee,4969,0.04313535474378283,0.9961893037121993 wye,zee,4970,0.64845292806442,0.0783662989719438 wye,hat,4971,0.1358347479828308,0.5733638726371927 zee,pan,4972,0.8445417535581274,0.5401648117511082 pan,wye,4973,0.8602817547452486,0.3630459570585407 pan,zee,4974,0.7126917418857502,0.45078360189374256 hat,hat,4975,0.8793776042522701,0.27141043268942633 zee,zee,4976,0.05992605295674014,0.7074936036971408 hat,wye,4977,0.346394513794262,0.29350246124167567 pan,wye,4978,0.5095513696287198,0.6796749104642862 wye,pan,4979,0.21965536908012684,0.9260144908739824 eks,wye,4980,0.7947621013643159,0.3813039850148131 eks,hat,4981,0.6239763460715818,0.5785443365814726 wye,zee,4982,0.23421805243604576,0.8666355498558119 hat,pan,4983,0.8485485930791395,0.4491405780816806 zee,wye,4984,0.052468448246404065,0.7811213755089573 wye,pan,4985,0.7439428126731077,0.9235490434329954 zee,zee,4986,0.8301353367964757,0.8649908229299215 hat,pan,4987,0.7155127400138539,0.725960059877104 hat,zee,4988,0.18338886820824507,0.8754893547448714 eks,zee,4989,0.018601982778751247,0.7913367608240889 pan,zee,4990,0.6245117285311684,0.5893294863439663 hat,eks,4991,0.8595121491036393,0.03409935768812744 pan,eks,4992,0.30073741634815365,0.27875382911011104 hat,zee,4993,0.5620368555651936,0.11559735452435582 pan,zee,4994,0.46131994902690476,0.9908240648244072 eks,eks,4995,0.13302596047508553,0.6892154279564321 pan,pan,4996,0.13517161511402043,0.8982044069226925 zee,hat,4997,0.5678552312876715,0.135724108125433 pan,hat,4998,0.9535726959631937,0.8197092073820271 hat,hat,4999,0.20718170417583293,0.15443490334276233 eks,eks,5000,0.5474103987606213,0.8639022623566207 zee,wye,5001,0.08843009472207297,0.14945328753720988 wye,zee,5002,0.11843248048480792,0.10564749120283823 pan,pan,5003,0.4789366550469353,0.22717511611934216 eks,wye,5004,0.47636937977487326,0.2810082791040678 pan,wye,5005,0.6626206294858628,0.9073394670955045 zee,hat,5006,0.19063843659030766,0.9540528860502674 pan,eks,5007,0.32167311196502024,0.9736668589456996 wye,wye,5008,0.03995088246162504,0.8906248987030765 zee,eks,5009,0.03028572303145005,0.9955507546832659 zee,eks,5010,0.09758243590212268,0.9326749078724424 wye,zee,5011,0.5166258594604775,0.31080741827085223 hat,zee,5012,0.10474935534605045,0.8820142826206279 eks,eks,5013,0.6206929828322025,0.31290830603904707 eks,pan,5014,0.7386573050111648,0.9236218998819093 wye,wye,5015,0.2541399902465252,0.9389113315138905 pan,eks,5016,0.4869636506082311,0.9502946331199825 zee,zee,5017,0.5038628336682738,0.6629947699756096 pan,hat,5018,0.888380448419866,0.9524601673710467 hat,pan,5019,0.33990101411005635,0.4348664315239562 zee,wye,5020,0.3672167922652847,0.3368467808484725 wye,zee,5021,0.07663456505244592,0.2631577836245168 pan,hat,5022,0.060489795371573285,0.8285572517841496 hat,wye,5023,0.7884614415246883,0.7586781551216389 pan,hat,5024,0.20846872150137863,0.2990773668794384 pan,eks,5025,0.588830614588479,0.21537813765089953 eks,eks,5026,0.12876049793274924,0.15585641140542594 eks,pan,5027,0.7572211331764787,0.2325134648801609 eks,zee,5028,0.35386542107386076,0.37117012291309726 eks,zee,5029,0.6649005742152306,0.968640074749029 zee,zee,5030,0.5875090511863751,0.2797909799076582 pan,eks,5031,0.6958326538393494,0.8708243653761277 eks,hat,5032,0.2945439456101079,0.15728143751762003 zee,pan,5033,0.974924650628186,0.9669570839581866 zee,zee,5034,0.9203642855427807,0.5206651807226769 eks,wye,5035,0.7880820779075502,0.7490003085045434 pan,eks,5036,0.6669037309103186,0.7852898502819553 eks,hat,5037,0.3861256788895815,0.9849326988419349 zee,eks,5038,0.27646436821800646,0.966795943629766 pan,hat,5039,0.05805817405705915,0.9932179958604398 zee,wye,5040,0.8804560258917605,0.5859741175246163 pan,wye,5041,0.8215150463068943,0.41746899820589767 pan,zee,5042,0.5160594808754981,0.34038151643511527 zee,pan,5043,0.4729643897380491,0.8082796095448785 wye,eks,5044,0.944933980409295,0.7127158343146003 eks,pan,5045,0.10534087226240663,0.7542791199133174 zee,pan,5046,0.43365029209841155,0.7392132819618191 eks,pan,5047,0.9240822180479168,0.4314552821051867 pan,zee,5048,0.7380043154543273,0.6241669393170018 hat,wye,5049,0.6158161626836199,0.23107643291636182 zee,pan,5050,0.5149206518156693,0.443722826592738 zee,zee,5051,0.10806215838843414,0.8316091936418926 zee,eks,5052,0.13123538643662702,0.8993374561672973 hat,hat,5053,0.023117725750200657,0.033915988824823384 zee,pan,5054,0.32314928212370087,0.05688167384675946 wye,wye,5055,0.3342612127307919,0.42233407978529247 hat,pan,5056,0.9666322975798146,0.17947032558912945 wye,pan,5057,0.6923954779265878,0.034012875290441835 pan,hat,5058,0.3825906955163786,0.8103254262396773 zee,zee,5059,0.11722281926454714,0.4784698788530096 pan,wye,5060,0.3993713904293549,0.8630955008829282 hat,hat,5061,0.8982925202936236,0.5153152768869278 pan,wye,5062,0.6541733479114709,0.14435606729689698 hat,eks,5063,0.7404726614057833,0.14934213540808206 eks,hat,5064,0.11826065449979817,0.44361936119890544 eks,pan,5065,0.16113803077069544,0.1931224993069398 pan,zee,5066,0.160970845859988,0.3653498317855951 wye,pan,5067,0.984014519910755,0.1085442049474844 zee,zee,5068,0.513447706607767,0.9552034872186853 zee,pan,5069,0.9699280626129259,0.054007659482251835 zee,zee,5070,0.3974043085931761,0.04564461949638321 zee,wye,5071,0.8135506068560597,0.9608362809012473 hat,pan,5072,0.9182632141669294,0.43231306945460934 eks,wye,5073,0.6147484385420419,0.5363878643299302 pan,eks,5074,0.5845946846241253,0.6243144568720979 pan,eks,5075,0.06225295939318909,0.47296164563217147 eks,eks,5076,0.7982506064893715,0.35691237251141883 wye,eks,5077,0.231763398457011,0.29533799083169177 pan,pan,5078,0.7379292282342623,0.32576070412274116 eks,wye,5079,0.4620414482111399,0.10454449264714505 eks,pan,5080,0.4154239126338921,0.1558721394610474 zee,pan,5081,0.38422127165844955,0.6011019199719426 zee,eks,5082,0.12455848010524884,0.970273373226025 wye,pan,5083,0.598195485668647,0.7711986200741965 eks,hat,5084,0.5007295834146884,0.028607275454148873 pan,eks,5085,0.6467927352142951,0.6809546997794357 hat,wye,5086,0.5496362637078044,0.2720688549660476 zee,zee,5087,0.10493923293046115,0.4813239698030355 eks,eks,5088,0.8414465852290272,0.22833809125034366 eks,wye,5089,0.27190062244408597,0.8657800314514896 pan,pan,5090,0.6064110590077285,0.36771074250450764 zee,eks,5091,0.6465716391447923,0.23897122778060764 eks,pan,5092,0.14584747968792888,0.19250348835022613 hat,wye,5093,0.06193876102851703,0.7031996658938712 eks,hat,5094,0.490742515210689,0.8308001526807453 pan,zee,5095,0.12743414057293911,0.3674063708637675 zee,pan,5096,0.5190322323030374,0.3578341596299308 eks,wye,5097,0.33724586909672605,0.2808209264792111 zee,pan,5098,0.5191394718493332,0.6948029406893036 pan,eks,5099,0.4686142873190169,0.47194949482921567 wye,pan,5100,0.5289724539988195,0.45192202668859927 eks,hat,5101,0.05611052621758694,0.14551172850676686 hat,hat,5102,0.28592095486470515,0.5702639619125038 hat,eks,5103,0.45909975903968236,0.8370518995297732 zee,hat,5104,0.12383004586365431,0.25661110382216856 zee,wye,5105,0.5972154159415002,0.03575292723673351 pan,wye,5106,0.44560649854859324,0.44398213053605406 pan,eks,5107,0.2991869218909077,0.4855377015585889 pan,zee,5108,0.8696312098499749,0.9234420344814674 eks,pan,5109,0.6347308371468083,0.1326692680255398 eks,wye,5110,0.055715443104116136,0.4615507678180293 wye,hat,5111,0.14260896559625547,0.2842155054761949 eks,hat,5112,0.868450337333343,0.8706206691563101 zee,wye,5113,0.8961064659188982,0.1944648523597512 wye,eks,5114,0.44892526756143925,0.5497795546938405 wye,pan,5115,0.4740055676174042,0.7911350546389597 pan,hat,5116,0.8762799268435709,0.9446805166366606 wye,zee,5117,0.7818146150023622,0.3854558191994354 wye,pan,5118,0.49177947702902347,0.7423017808370791 wye,pan,5119,0.4794067150556538,0.07923269424861734 wye,wye,5120,0.7036317641291522,0.25076154186882316 pan,pan,5121,0.8862196092737421,0.0033279610366836465 pan,wye,5122,0.3687043552254645,0.8549560734268002 zee,pan,5123,0.6515686983034052,0.5100953103470156 hat,zee,5124,0.8484226442959659,0.3697927989244223 zee,zee,5125,0.4116570693381614,0.8943311044914664 eks,wye,5126,0.9547804139837082,0.47195131805052704 eks,pan,5127,0.011993047445383431,0.7287085495775942 wye,zee,5128,0.07513405469493029,0.9154830290251537 zee,zee,5129,0.12609531649583638,0.44052343410884454 hat,wye,5130,0.7684246903338762,0.23751976841777223 hat,hat,5131,0.8922493612645849,0.2882212197666263 zee,pan,5132,0.33080234532260044,0.3096178521788119 hat,wye,5133,0.3942617617355668,0.8686679943940434 zee,wye,5134,0.2827895360020647,0.2448957006369109 pan,hat,5135,0.09957083263754218,0.5980806620300303 wye,eks,5136,0.4056324583379335,0.08334576336977417 hat,eks,5137,0.878238719282208,0.6491135241981707 wye,hat,5138,0.06783170016557316,0.4197736525433723 zee,hat,5139,0.301521500457932,0.7493817768168342 hat,pan,5140,0.3051559696668491,0.06338171371155699 hat,pan,5141,0.24126630734948107,0.3415400162111678 zee,zee,5142,0.5053797938498257,0.6943665465448414 pan,wye,5143,0.2455006451228895,0.2381483502091848 eks,zee,5144,0.048487900564839426,0.7986829177323632 zee,eks,5145,0.943348462297874,0.49699730029153877 zee,wye,5146,0.31739948115727923,0.6000335929359446 pan,eks,5147,0.20821590282748392,0.05180957502134165 zee,wye,5148,0.6971578309400973,0.05130727558151871 zee,zee,5149,0.01730237891149944,0.7994974955185655 hat,hat,5150,0.5204676158996879,0.7837983020069176 pan,wye,5151,0.46792698874985184,0.8655145758102156 pan,eks,5152,0.7698104203177931,0.26202820594725107 eks,zee,5153,0.5599128818778365,0.6217154146552438 zee,zee,5154,0.9860645516631891,0.4316727707502638 hat,hat,5155,0.6598214440228759,0.3829372068865968 eks,wye,5156,0.8891940614044549,0.06487886134646581 zee,pan,5157,0.7088889371664757,0.5291365868969226 wye,wye,5158,0.03780907803981348,0.01743012834128732 wye,hat,5159,0.541375591656728,0.19271971067809746 zee,pan,5160,0.1291394701733155,0.3164888119812437 eks,zee,5161,0.7070972450015776,0.8576144505983694 pan,wye,5162,0.23503083628119015,0.3804966968759753 pan,wye,5163,0.7745902001026395,0.05547251429169031 zee,eks,5164,0.817955788881543,0.5354324301609987 wye,wye,5165,0.8025727679132887,0.19141681065547878 zee,hat,5166,0.7360375371224098,0.29561728150687583 zee,hat,5167,0.01949832966304421,0.44975230900638874 eks,hat,5168,0.7853520653542873,0.21913075886744116 hat,wye,5169,0.10431463074876668,0.9319628819493798 wye,pan,5170,0.2834142139187724,0.8015795778401339 wye,wye,5171,0.8563300778556382,0.29021146719669166 hat,eks,5172,0.8901432458076336,0.5906289428469621 eks,wye,5173,0.23209666592661993,0.7954117026433107 pan,wye,5174,0.7220313992623487,0.47674307211032296 zee,eks,5175,0.007929525800474901,0.7115763725040718 pan,hat,5176,0.13951096415676212,0.37397816099478665 wye,pan,5177,0.32426760784210895,0.6275207008763184 wye,hat,5178,0.8483367054488846,0.3438036340567002 pan,wye,5179,0.5722581464790939,0.6082504729241017 pan,wye,5180,0.4531005566059778,0.6317423583403005 zee,eks,5181,0.8810030632200981,0.38442701936628154 pan,zee,5182,0.5458504348562845,0.5606252991061377 wye,hat,5183,0.7217910708545336,0.698686710480415 hat,eks,5184,0.5362269296471793,0.05511158796442561 pan,wye,5185,0.28943459067392874,0.9963452393967427 eks,zee,5186,0.19471121838287642,0.8475932004442778 wye,eks,5187,0.27341937394530447,0.5835195238055988 pan,eks,5188,0.1098179895780228,0.691118264458782 pan,wye,5189,0.5424445870456038,0.47980328960531937 pan,zee,5190,0.958030425108842,0.9229656805294295 pan,wye,5191,0.34032539138935425,0.4003903325198842 hat,pan,5192,0.3435706571010647,0.06283363667654052 zee,wye,5193,0.01565153403082964,0.559742349020455 eks,eks,5194,0.9601222966912384,0.7746495793923044 pan,hat,5195,0.5165119272913388,0.8970096684776827 pan,hat,5196,0.5242448227650341,0.40727326602398184 hat,eks,5197,0.5268012119318143,0.9704796636500256 pan,pan,5198,0.5788360834761852,0.9163631840503775 zee,pan,5199,0.863846165540519,0.7926861461485262 wye,zee,5200,0.9308584180091819,0.1060885355033907 hat,pan,5201,0.13550559685784802,0.23666447032870253 hat,pan,5202,0.9333837848637749,0.7983610377673229 pan,zee,5203,0.8164395473206716,0.9295267627751691 hat,eks,5204,0.09343575555554806,0.30344155652002347 zee,hat,5205,0.28240510221521764,0.2545255694003048 zee,pan,5206,0.3994083205887524,0.07213558504539785 pan,zee,5207,0.5698284352568362,0.5897809603851609 zee,zee,5208,0.3216207044318503,0.038820482913941357 pan,wye,5209,0.8306447997004499,0.8384123743007208 eks,hat,5210,0.08770207583625389,0.7725018412751664 wye,zee,5211,0.33912997635684583,0.8105461466866878 zee,hat,5212,0.7610245335034946,0.23104051545907822 zee,wye,5213,0.630076553798416,0.4732456051973126 eks,wye,5214,0.6175594035658841,0.9608217208353017 hat,eks,5215,0.28256241866196097,0.265704893607123 hat,zee,5216,0.8249008956837504,0.7862378134305688 hat,pan,5217,0.4700457200943312,0.005846894154671878 eks,hat,5218,0.7091734686647354,0.9683424620144252 eks,pan,5219,0.08321970448060567,0.9552244458317039 zee,zee,5220,0.7678115603005319,0.17456048525769519 hat,hat,5221,0.6804959880554192,0.5106473873198336 hat,wye,5222,0.08046680632449676,0.5515390101660408 hat,zee,5223,0.28029330967388233,0.7219566130837053 zee,zee,5224,0.7555723920288009,0.3761074889073034 pan,wye,5225,0.4049308387224845,0.7002764807468328 hat,wye,5226,0.7522569018366815,0.18119883657776303 pan,pan,5227,0.04907194450053376,0.24371127321212294 eks,hat,5228,0.08589819615072136,0.1928776399714467 eks,hat,5229,0.5280780018220216,0.850193621850258 hat,pan,5230,0.3059897834653845,0.7239860853683812 zee,wye,5231,0.24344354397416768,0.9681438520522745 pan,hat,5232,0.1881342701340306,0.7919638741482248 zee,hat,5233,0.7794106496174618,0.950428895380262 eks,wye,5234,0.1964278841499737,0.9230114722930227 hat,zee,5235,0.5349332160444686,0.7212892273015341 zee,eks,5236,0.0096091347524081,0.05157241835503623 pan,wye,5237,0.29264897203906315,0.2708942584778229 wye,eks,5238,0.877475809945589,0.4753884279556253 zee,hat,5239,0.10804287516531197,0.25028720143889427 pan,zee,5240,0.038521217586762524,0.45833782252961597 pan,hat,5241,0.6242964208021841,0.46876845876825834 pan,pan,5242,0.03478916499976592,0.8872591850817888 eks,eks,5243,0.3532736876730329,0.8100993157058493 wye,eks,5244,0.4410158520384003,0.08878204317661487 hat,wye,5245,0.30542326696649835,0.03254190401750867 wye,wye,5246,0.2619681126430232,0.2649618519422796 hat,eks,5247,0.45824524247081966,0.6844159528310743 hat,eks,5248,0.3283595420804768,0.8574880365351013 hat,zee,5249,0.7484157555119979,0.39553557685807894 pan,pan,5250,0.7554789617512107,0.2317754776472134 zee,hat,5251,0.6787637703297714,0.8107713369785818 wye,hat,5252,0.04799306200946163,0.699111788491548 pan,eks,5253,0.09939382730538704,0.9181166624382701 eks,hat,5254,0.3788407507062852,0.6050730090302495 zee,eks,5255,0.5847457461108924,0.8796125841387396 hat,zee,5256,0.5958859328721237,0.5394313157526304 eks,zee,5257,0.6145812801413588,0.8667435600565327 hat,pan,5258,0.39378429867517395,0.66637394577698 wye,eks,5259,0.9417378953261469,0.4145045232597019 hat,pan,5260,0.1040138249574939,0.5711578035148099 zee,wye,5261,0.2807184907727448,0.6881546576599258 eks,zee,5262,0.6748387970430342,0.9842159808803176 zee,eks,5263,0.5854346090243887,0.24780046831336067 zee,zee,5264,0.6651087221905022,0.4694678243278747 eks,eks,5265,0.178487009198119,0.3389965086336105 hat,wye,5266,0.60584735950502,0.08711755746003325 hat,pan,5267,0.14941018319657196,0.42913266234393854 wye,wye,5268,0.44618372032109543,0.19531077190155655 wye,pan,5269,0.8715465668907355,0.15578281828771234 eks,zee,5270,0.272381988376838,0.749508925403637 hat,zee,5271,0.8731584572028818,0.8587026343639556 hat,wye,5272,0.7141686842916973,0.2536343098230014 hat,pan,5273,0.6161173798530847,0.5170002336730243 wye,wye,5274,0.9836997370643351,0.9073574715868198 zee,zee,5275,0.9271419947755198,0.7499953605856078 eks,zee,5276,0.4436574016008654,0.11521473164364193 wye,zee,5277,0.41785833930772587,0.5581905438338015 hat,zee,5278,0.6303081078068822,0.9708543000113369 eks,hat,5279,0.7724785778741878,0.8749355527936072 zee,pan,5280,0.019491215186811517,0.28573440717823495 hat,hat,5281,0.8966308328410811,0.8932890927799828 zee,eks,5282,0.20474699819177533,0.9563609260887708 eks,hat,5283,0.8232222331296849,0.43288890410832115 pan,pan,5284,0.06808879127275447,0.2961369332523437 hat,pan,5285,0.07045589395497931,0.06411882838638927 zee,pan,5286,0.5025476621481306,0.5455719768538321 hat,eks,5287,0.6864003316225611,0.08724809130852695 eks,wye,5288,0.9345047793469049,0.7545355491792637 eks,zee,5289,0.09683817897484082,0.15042392025928608 hat,zee,5290,0.2201144900883092,0.09304236894658524 pan,zee,5291,0.6437086955209985,0.6412853324081308 pan,pan,5292,0.7101999657039595,0.9654389825167757 zee,pan,5293,0.44434019344510023,0.3616886405725528 hat,hat,5294,0.4986619811254004,0.36527690926573364 wye,zee,5295,0.6218618299228648,0.9324975302931531 hat,wye,5296,0.3811141224627541,0.9228475537405691 eks,eks,5297,0.450776715605552,0.31636578533096016 pan,zee,5298,0.3086259636689451,0.06652636662046696 zee,wye,5299,0.4581205277744118,0.8883132608926249 hat,zee,5300,0.6065263542151584,0.8758808605345744 eks,pan,5301,0.26907393999080953,0.633331389237707 pan,hat,5302,0.2662060484446822,0.501911240454392 wye,zee,5303,0.030537351078086195,0.20700838585535786 wye,hat,5304,0.4745666526865788,0.3396776308478552 eks,zee,5305,0.5607499175198385,0.21583087167043014 eks,hat,5306,0.690451786737028,0.0861194392792598 pan,zee,5307,0.06684973668910421,0.9544628284207586 wye,zee,5308,0.7500932442964064,0.552958619063383 pan,zee,5309,0.2335642300224079,0.31164052398797637 pan,eks,5310,0.15387236958406036,0.43829110359848433 wye,zee,5311,0.7866346249384528,0.03570506892329006 hat,wye,5312,0.5514251601334069,0.4379220457409775 eks,wye,5313,0.0355425881526662,0.16802137840026887 eks,eks,5314,0.04767639014474101,0.7923199475995649 hat,pan,5315,0.22846522556430016,0.8271404016977637 wye,pan,5316,0.31445904414804127,0.235006707754 zee,wye,5317,0.4335088190275804,0.5671270126055555 hat,wye,5318,0.15817916140514576,0.6371355203785057 zee,zee,5319,0.9627644186331633,0.46453264491285806 pan,pan,5320,0.9101265684004383,0.8101420365566193 pan,hat,5321,0.7404633039474602,0.9639884498668673 zee,zee,5322,0.6420718148305066,0.37414212799368096 wye,hat,5323,0.4830324590268663,0.0404568640233397 hat,zee,5324,0.5028487276011456,0.020932159991859267 zee,pan,5325,0.888291122851125,0.5111470794632866 wye,pan,5326,0.07272409700902271,0.27564484500916986 wye,pan,5327,0.0888998337471314,0.9919041685553374 hat,pan,5328,0.3064216274886523,0.4890201595898237 pan,wye,5329,0.3470931183432189,0.1997795824920121 zee,zee,5330,0.13436961326496677,0.3095854896519281 zee,pan,5331,0.8655317519954471,0.8104322805331614 eks,wye,5332,0.01695205279543599,0.6253163249860758 wye,wye,5333,0.41853514055951446,0.46414849053819973 eks,wye,5334,0.9312528403346797,0.34690398003679423 hat,wye,5335,0.8146576023607562,0.517623963255214 wye,wye,5336,0.9644696679607304,0.17623585722771673 hat,wye,5337,0.0491647681854408,0.9084359968915301 wye,eks,5338,0.9183687166177615,0.6742918022088258 eks,zee,5339,0.6913946457851302,0.5236074895779744 wye,wye,5340,0.7574842345027994,0.35438559050849205 pan,pan,5341,0.9609080490571219,0.764751472995584 hat,hat,5342,0.9571224566918112,0.6488786174457046 eks,zee,5343,0.1297439418853782,0.10986446330230937 wye,pan,5344,0.2265442713227983,0.08671233554174995 zee,eks,5345,0.6690807314571691,0.5220733222869928 wye,zee,5346,0.42279438877482367,0.1357326426861194 zee,eks,5347,0.566584546381942,0.14424580074370563 eks,hat,5348,0.9402905188032046,0.6899005608656246 wye,wye,5349,0.8220699059748584,0.08673018838619662 eks,pan,5350,0.223912795614429,0.8705191204953174 pan,zee,5351,0.17054432883772475,0.3754155013143816 pan,hat,5352,0.577021048756712,0.8658764185620885 eks,zee,5353,0.6047802080751319,0.16748745069598325 zee,pan,5354,0.8138458432489908,0.887184873534984 hat,zee,5355,0.4409314249173867,0.16661996267618873 zee,wye,5356,0.9294777278187871,0.9218221729540071 zee,zee,5357,0.7978605597846053,0.19629225024825436 eks,eks,5358,0.020853766511345406,0.9622073813280082 pan,wye,5359,0.30351132190401986,0.6285435222862336 hat,eks,5360,0.20965717538739437,0.8407225718631762 wye,eks,5361,0.8752567055200561,0.9860616183578573 zee,pan,5362,0.7742820785303554,0.12159579314900681 eks,pan,5363,0.045340262727698866,0.8347997035721408 eks,eks,5364,0.27673456069026947,0.28606929907632006 hat,eks,5365,0.1389831981773636,0.958748587909282 hat,hat,5366,0.2805736404470527,0.39685097136131187 eks,hat,5367,0.506031079714652,0.9912645565514333 pan,zee,5368,0.6865182575714622,0.8704513374052988 zee,wye,5369,0.8603176374144329,0.3346439571733928 pan,eks,5370,0.9070851500395942,0.03151443822439248 wye,zee,5371,0.26330651984082165,0.312969179382553 zee,zee,5372,0.5395637542263729,0.876693303664991 zee,hat,5373,0.34909843746802205,0.8568124167530461 zee,zee,5374,0.3028178173036057,0.7391998484027293 hat,zee,5375,0.5150486678896874,0.5093614114895396 hat,zee,5376,0.26087420592676525,0.45387940157532647 zee,eks,5377,0.11113050876158048,0.019064162496037707 zee,hat,5378,0.7356184687449835,0.5091161605127379 wye,wye,5379,0.09703125778637067,0.25691589979049356 zee,eks,5380,0.3345104910149367,0.1516506429745581 eks,hat,5381,0.5792199947921147,0.49613092724134833 wye,eks,5382,0.6188424819758455,0.5722334124286547 wye,pan,5383,0.4199976827116998,0.6380529017621875 eks,zee,5384,0.7599800240198485,0.19856983882208867 eks,hat,5385,0.06854514347417606,0.028515802052052952 wye,zee,5386,0.31992003300785,0.9257458880403014 wye,zee,5387,0.8545498814228611,0.06322205211700338 eks,zee,5388,0.14459434374592373,0.42112443945304057 pan,zee,5389,0.11816306719121206,0.17831615949339463 zee,pan,5390,0.551475598918215,0.6565173979014076 hat,pan,5391,0.4696624324268569,0.9440798879738231 pan,hat,5392,0.2906675154826033,0.7331663429068216 pan,hat,5393,0.2596796215047702,0.9407425847640128 eks,wye,5394,0.6216628077513283,0.9763969655887303 zee,wye,5395,0.8476101473277529,0.9881007277790081 zee,zee,5396,0.8702478883993182,0.2813073047318746 eks,hat,5397,0.9584988429207648,0.16350049486702678 wye,eks,5398,0.36458407067281184,0.04100408848224302 wye,wye,5399,0.733413532545851,0.6459898444733033 pan,wye,5400,0.9665506125898256,0.5448152784578933 zee,hat,5401,0.8543887956499512,0.7439702074332549 pan,hat,5402,0.16703607056661052,0.678760520989282 pan,pan,5403,0.8295505457000276,0.08557288192430035 hat,eks,5404,0.24083859157948273,0.8456272874080909 hat,hat,5405,0.7303478280030506,0.08240241730334918 hat,hat,5406,0.16072785206888152,0.940229803599545 eks,pan,5407,0.8649757853523717,0.49430262836010985 hat,hat,5408,0.5776416796711862,0.38502333915273557 hat,pan,5409,0.5633298053737792,0.7410429711654063 eks,eks,5410,0.9778916491011578,0.2273478424516322 pan,eks,5411,0.7262036914700832,0.9187345564266572 zee,eks,5412,0.33286294808080064,0.3921681976941228 wye,eks,5413,0.08772931753470603,0.48815297744510433 eks,pan,5414,0.44377217382552636,0.13437156912545423 eks,eks,5415,0.43246842646662487,0.9003920363683975 eks,hat,5416,0.753762625636042,0.6313338577994543 pan,hat,5417,0.20986095023321283,0.278888203103681 zee,pan,5418,0.15332749400308754,0.8904428676045328 hat,eks,5419,0.46399468430524804,0.0717886401624439 zee,zee,5420,0.47725202464468663,0.9096066884668478 wye,eks,5421,0.4608256396986088,0.18257443066884294 hat,zee,5422,0.9062976974038087,0.825705654266679 pan,eks,5423,0.829675619825074,0.30094578297716856 zee,pan,5424,0.2627796756491889,0.05131765835402935 pan,wye,5425,0.9750271883009257,0.10505350281212911 wye,wye,5426,0.2694712165014862,0.617405875060473 hat,eks,5427,0.06062699861257914,0.14515726494650738 pan,wye,5428,0.9471818920457628,0.2665032520198297 hat,eks,5429,0.3317119302689199,0.45073390665129454 pan,hat,5430,0.16613227391144125,0.41913253603052736 zee,eks,5431,0.5545698300075519,0.9624415304532793 hat,hat,5432,0.9825886641650767,0.4606811454162322 hat,zee,5433,0.7849062201991618,0.9640442210529644 pan,wye,5434,0.027672040238877704,0.09364154641355082 zee,hat,5435,0.4045108520910917,0.36431937644373535 hat,zee,5436,0.9496952473063589,0.6756301296750051 zee,hat,5437,0.5978983969671523,0.6276473499153709 eks,hat,5438,0.38522029067066954,0.9206254386424841 eks,hat,5439,0.38811572418657825,0.07594870509481821 hat,pan,5440,0.3245042501769525,0.5860367509842646 eks,hat,5441,0.5113055435442414,0.9478634662218888 hat,hat,5442,0.649952463378999,0.40331287808319716 zee,pan,5443,0.2660546525494476,0.036573786936417774 hat,wye,5444,0.2933645151017673,0.8565796439445684 hat,hat,5445,0.19274932648900556,0.6752612195498396 zee,pan,5446,0.6843298638997956,0.18463787286549893 eks,zee,5447,0.4465765938644741,0.6465428046837856 wye,hat,5448,0.7104951786733581,0.007575728589058528 hat,wye,5449,0.05598891388977545,0.22520895137141883 hat,zee,5450,0.6973457907641605,0.3767547727152859 eks,hat,5451,0.22980925307219058,0.09539340024354548 pan,hat,5452,0.3157808212188198,0.6787208591042566 zee,zee,5453,0.08674939853988706,0.0016458788929679669 pan,hat,5454,0.45512276442779265,0.7647008695253613 wye,hat,5455,0.9223519005619959,0.9896263386831655 hat,zee,5456,0.2599314461144381,0.8810566831796974 wye,eks,5457,0.3716116598539073,0.6158074210009791 eks,zee,5458,0.04287045703879866,0.3387484748791293 eks,eks,5459,0.964192450580381,0.0021921221413634395 zee,hat,5460,0.16317765667465844,0.5350462588301713 pan,pan,5461,0.6162574043540692,0.8321486837007045 eks,pan,5462,0.1418039983669439,0.6211011915118961 zee,hat,5463,0.5986397200652216,0.6968533019592756 wye,eks,5464,0.8847165179059643,0.8396671337239269 eks,pan,5465,0.64956961455677,0.42814835565709897 wye,zee,5466,0.078362139340725,0.7041742329715265 pan,pan,5467,0.7658242784400351,0.6658002824538031 zee,wye,5468,0.7694464457122385,0.3630968380462761 eks,wye,5469,0.5573393787208576,0.5674857974105666 wye,wye,5470,0.9070377249974354,0.2288418409874835 hat,hat,5471,0.9390885842014736,0.4885661765278554 pan,hat,5472,0.15616642541017933,0.723291076738834 hat,pan,5473,0.8339379553110595,0.27272554707575325 zee,wye,5474,0.7147670868273149,0.5300588513631999 hat,hat,5475,0.6079530363728716,0.7302013509128558 eks,hat,5476,0.20009244252935454,0.3819915946964063 eks,wye,5477,0.39259835612758154,0.30659538127782704 hat,wye,5478,0.6770531656328236,0.6798247125178067 wye,hat,5479,0.8464109156551775,0.5746477726666506 zee,zee,5480,0.5016540167129663,0.8741956310027429 wye,hat,5481,0.6695686221456726,0.689441485231751 zee,zee,5482,0.6069552630891367,0.8327367055952278 eks,eks,5483,0.7469659158360071,0.10223878164983224 zee,pan,5484,0.9278433464500453,0.1755972033710903 zee,pan,5485,0.5724120522769688,0.03415735625364058 zee,wye,5486,0.3960740290371987,0.2157291640948238 zee,wye,5487,0.4006137623075525,0.915996687470202 wye,wye,5488,0.3501090213998701,0.1419133192803893 eks,eks,5489,0.86861919099865,0.25681726556775375 wye,hat,5490,0.0114773666847795,0.024645492270649272 pan,eks,5491,0.37445278083566247,0.1319415773692295 pan,eks,5492,0.24969695350122256,0.7787009090435869 hat,wye,5493,0.1382138485389508,0.42533800225303686 zee,pan,5494,0.8834013775449513,0.532739443419528 hat,pan,5495,0.06870299529036838,0.16955231705247786 pan,eks,5496,0.7348263636816107,0.8630644835981002 pan,wye,5497,0.18130548510310573,0.012524267398086986 zee,wye,5498,0.07850770050431843,0.6592896086014353 eks,wye,5499,0.12579070445810636,0.027946488029312544 zee,hat,5500,0.31461267260641923,0.0748646953586749 eks,pan,5501,0.6387163017917407,0.9935696733123411 zee,wye,5502,0.43904419266704897,0.4569132922221508 eks,pan,5503,0.8033268068277595,0.18844163406954773 zee,eks,5504,0.9596958577456198,0.04773563051124652 hat,wye,5505,0.5520964703015074,0.48453868182721893 wye,zee,5506,0.4087385270797551,0.8564815497838665 eks,pan,5507,0.21391759502009422,0.3447041692322321 hat,eks,5508,0.27910653275458874,0.5485292937357691 hat,pan,5509,0.0989266416174771,0.6959930085614316 pan,hat,5510,0.4611680765379149,0.7214873034272665 eks,wye,5511,0.23798712129455957,0.7587550612183068 eks,wye,5512,0.5807870919230165,0.9691165477002429 pan,pan,5513,0.12503735272775673,0.4355589149955563 pan,eks,5514,0.24662547688833314,0.3287438663802673 zee,pan,5515,0.6313995187707404,0.833564271162547 hat,zee,5516,0.33305390076062613,0.9170789339963947 wye,eks,5517,0.8721055830589473,0.02704639391207897 pan,pan,5518,0.14313525389664383,0.7459994619303395 eks,zee,5519,0.7813269749608942,0.43515581235296563 pan,pan,5520,0.12004377059603999,0.17842342731389704 wye,wye,5521,0.4952080825177475,0.16871841358834394 zee,pan,5522,0.36872049705368115,0.1990766711673171 pan,wye,5523,0.742045965934904,0.9721895926892108 eks,zee,5524,0.8701165441999673,0.5339961636745024 wye,pan,5525,0.49890360517452514,0.024484853806581164 pan,eks,5526,0.7026312260362405,0.8810518289214107 wye,eks,5527,0.7997008739733962,0.18410432351101302 hat,pan,5528,0.8212044358760883,0.11209149520678119 pan,eks,5529,0.8511463764647872,0.14138132753417088 hat,eks,5530,0.5258934621583872,0.720463955146462 zee,eks,5531,0.35366192891288517,0.08693096089863839 eks,pan,5532,0.02230190397042897,0.6075383296925656 hat,zee,5533,0.958788084715825,0.20611877870477535 pan,hat,5534,0.0019016743345633413,0.32222113968267996 hat,wye,5535,0.4214775778712955,0.22796016352171378 hat,hat,5536,0.7965347610723122,0.2771962774393667 zee,eks,5537,0.5232208554018066,0.7842118697965217 hat,eks,5538,0.4077121389029271,0.11707098355780121 wye,wye,5539,0.743441288773323,0.6405109845442226 hat,hat,5540,0.42899567587485843,0.23687426121264998 pan,zee,5541,0.8254948808955715,0.4991271884600853 zee,wye,5542,0.755488383171051,0.4137799115139683 hat,eks,5543,0.48020817778428815,0.9225205496681843 zee,eks,5544,0.6602401325197925,0.32279850833980206 hat,wye,5545,0.858697605273768,0.8576653967219389 pan,eks,5546,0.6631984443201948,0.3727938739078658 eks,hat,5547,0.6895459625786122,0.22640122479226865 eks,pan,5548,0.3627382468806156,0.0796990614162374 zee,eks,5549,0.7292096702579594,0.9691771087568819 eks,eks,5550,0.6327683854211364,0.6420822760549295 zee,eks,5551,0.28298845518306814,0.8947425604116854 pan,hat,5552,0.5841578438331838,0.1596820606396967 hat,zee,5553,0.5166466940884901,0.5215576515640856 pan,pan,5554,0.9579182517583037,0.18510227855201322 wye,zee,5555,0.8156182188735165,0.7385240536968077 pan,hat,5556,0.4092542192178087,0.8148464821295865 wye,pan,5557,0.25358407312884057,0.9664484962083387 hat,pan,5558,0.768872222650759,0.7571069129173444 zee,hat,5559,0.02119490837909377,0.7608765429541047 wye,eks,5560,0.5167434492366938,0.2556264017975728 zee,zee,5561,0.19901052822038778,0.010162787621391778 zee,zee,5562,0.010968218584134437,0.4064143237134189 pan,hat,5563,0.5922101576133584,0.4027972800052315 eks,wye,5564,0.49763688623866753,0.5883123179094881 pan,wye,5565,0.7684392835456383,0.3749236173392554 eks,zee,5566,0.8548967678474122,0.570131787889301 zee,zee,5567,0.31067383496587675,0.6147427008783484 eks,pan,5568,0.8429203216611878,0.1574744061469351 zee,hat,5569,0.08829574118086814,0.5348102685441779 pan,eks,5570,0.6920854194235941,0.6152462479121356 pan,pan,5571,0.6728243500766502,0.4062647573271557 wye,zee,5572,0.7192603411774698,0.4187864354572167 pan,pan,5573,0.4439499129311816,0.452364734358081 pan,eks,5574,0.20220091735345957,0.7994491452794874 wye,wye,5575,0.21178209452449626,0.15235066856869428 pan,hat,5576,0.2328237068625838,0.1466943672149028 wye,eks,5577,0.1463637145507638,0.27512353058563355 eks,eks,5578,0.7678172951406467,0.4330114463831388 hat,wye,5579,0.7640191949316547,0.24039019030979936 wye,hat,5580,0.302423176696171,0.8421273065109021 wye,hat,5581,0.8901857920101928,0.29658407519577457 wye,zee,5582,0.9976903742848702,0.45676971223633933 eks,hat,5583,0.9279820319463397,0.2328972990196413 hat,eks,5584,0.33098984262520037,0.558064177488057 zee,wye,5585,0.8492581279138114,0.3377131419417513 wye,hat,5586,0.3843644484125802,0.5395570591826665 pan,wye,5587,0.2563692488210999,0.8648625544244997 eks,pan,5588,0.47849756747842254,0.36440498978427904 zee,zee,5589,0.16028903050640975,0.7637743011708871 hat,eks,5590,0.3632486395529805,0.009397590758849828 zee,hat,5591,0.30560662975374475,0.7718259824315155 pan,pan,5592,0.39375784368183886,0.04590683905804471 zee,wye,5593,0.6639341156412852,0.21782811751505382 wye,eks,5594,0.748874819175722,0.5391318034694991 wye,zee,5595,0.14037849467735208,0.17046690443866652 zee,zee,5596,0.10182342354198881,0.5446008492963108 zee,pan,5597,0.6907943477760979,0.4189830850027354 eks,zee,5598,0.2962037835362923,0.36049737941380366 wye,pan,5599,0.16480658469175224,0.8389670972825451 zee,pan,5600,0.6488288447142824,0.8870043471299166 wye,eks,5601,0.9541704944878237,0.06050893170404792 hat,wye,5602,0.9634543762478623,0.2995192276364238 pan,eks,5603,0.713998278452672,0.6065522135018214 eks,pan,5604,0.9495183550398497,0.861843219886308 zee,wye,5605,0.9500848655829623,0.45916889205740574 pan,zee,5606,0.314494599736428,0.24386090680148387 zee,wye,5607,0.7689855715450897,0.11045228604478441 pan,pan,5608,0.2591280268253763,0.9062746985784103 wye,eks,5609,0.038203945200321776,0.5754771176043 wye,pan,5610,0.3513354907140842,0.23568099743397186 eks,wye,5611,0.5581667554162788,0.533651422581368 wye,pan,5612,0.6476139827218337,0.1625920960990147 hat,hat,5613,0.43541285982294176,0.9781241021866268 zee,hat,5614,0.07143295094027957,0.5146773830335898 zee,hat,5615,0.3921043983626502,0.12859994269629937 hat,hat,5616,0.12215970633938278,0.3357015949156391 hat,pan,5617,0.1867388485013709,0.11120997350204453 wye,eks,5618,0.6179065708118318,0.03936978657358048 pan,eks,5619,0.23990263600951223,0.8386791333746637 wye,zee,5620,0.8136012361181053,0.9246893690807032 zee,eks,5621,0.6936065900415402,0.9835121994811427 wye,hat,5622,0.46042861129071444,0.8690567617780255 hat,hat,5623,0.7847006863046383,0.9540584320255103 wye,zee,5624,0.6715918738207972,0.9248713771595384 hat,wye,5625,0.3458684025425872,0.27012900303390197 pan,eks,5626,0.5311033870913179,0.17537860987554665 eks,zee,5627,0.8021710394665355,0.8677575901404581 zee,zee,5628,0.22133674407714776,0.650517614686327 eks,hat,5629,0.19299554543178998,0.926482748769109 hat,pan,5630,0.6751229005765216,0.5680107534137527 pan,hat,5631,0.6215515202465142,0.7335723775728186 pan,wye,5632,0.8548923960863601,0.22525018696051402 zee,hat,5633,0.8768635937091291,0.17829195183165314 hat,zee,5634,0.6015751224700235,0.0644975490073253 pan,hat,5635,0.7276807776942956,0.8500606585761793 wye,eks,5636,0.4833228626835777,0.7378551070407615 eks,pan,5637,0.19782280979787448,0.16113009983532756 wye,eks,5638,0.6640345835133702,0.6498713803920758 hat,hat,5639,0.20821268257622816,0.4305417007597995 hat,hat,5640,0.5586511327847578,0.1326971674398928 pan,eks,5641,0.7319972100987417,0.719616216404303 pan,hat,5642,0.13804409751652513,0.9924728363763738 zee,pan,5643,0.5223512543043243,0.4991596521110977 eks,wye,5644,0.3698151588984483,0.17106212044489788 eks,hat,5645,0.7963153151177051,0.8008422439449929 pan,eks,5646,0.19219529269095814,0.20998226328210212 zee,wye,5647,0.3429668212121526,0.8081062419069119 eks,pan,5648,0.6185038317407525,0.13922536086565684 pan,zee,5649,0.1882750077103732,0.051490445358029824 pan,wye,5650,0.28997067788262,0.9817716356894414 zee,pan,5651,0.7900065659824048,0.8799973980821687 wye,hat,5652,0.6169368270983073,0.10348718268597767 zee,wye,5653,0.17648668002767787,0.680848224860555 pan,eks,5654,0.4277856265977521,0.46720306495008457 pan,wye,5655,0.6238246026482904,0.5005719727517985 hat,hat,5656,0.13794992086740376,0.8837838569509247 pan,zee,5657,0.10798159915883232,0.14419721657117324 wye,zee,5658,0.6608918667457152,0.9243582421976495 eks,wye,5659,0.6991477488632273,0.757988136039786 eks,eks,5660,0.6338110809908714,0.8899492379893515 pan,zee,5661,0.5036749461847732,0.26738310174407787 zee,hat,5662,0.8842361839832931,0.2166296985577939 pan,eks,5663,0.7069322205111267,0.3613403478317495 zee,zee,5664,0.9028085500044974,0.6560744841877679 eks,pan,5665,0.42180175898330097,0.5602780165419919 eks,wye,5666,0.11819158774260774,0.3269446466483843 hat,pan,5667,0.4124388603109588,0.32891147928157505 hat,hat,5668,0.28048754020684197,0.1586304642802714 pan,pan,5669,0.355899451932013,0.6719277980511792 wye,pan,5670,0.8835631178552948,0.030315290308040144 pan,zee,5671,0.6000348059150206,0.29058998333691977 eks,pan,5672,0.15818268756400555,0.06017126006059004 hat,zee,5673,0.2279653016908878,0.9182355806226783 eks,hat,5674,0.30002134346912324,0.5070589085102488 hat,eks,5675,0.6776164025070541,0.8270479553259737 hat,hat,5676,0.26316020747343927,0.4439406464012029 hat,wye,5677,0.21137471648135742,0.5132924852429177 wye,eks,5678,0.6936453571596785,0.5977687990521104 zee,wye,5679,0.038384056804088296,0.39062169520305345 wye,hat,5680,0.2396335274387169,0.5617745220517328 hat,pan,5681,0.754469633162002,0.0837659053517874 wye,wye,5682,0.13450523706607276,0.5466840856340288 pan,hat,5683,0.3334514488024498,0.8403356176006205 pan,eks,5684,0.5990374956703001,0.759556440814025 eks,wye,5685,0.2272695825818456,0.06890003755302965 hat,wye,5686,0.0781769662654741,0.610149228572904 pan,eks,5687,0.20540821693039724,0.4583791378818265 eks,eks,5688,0.2681427485140152,0.4723384743843706 wye,zee,5689,0.06033196478297487,0.7884610426494236 pan,pan,5690,0.15932061131003383,0.10750760915363755 pan,wye,5691,0.6927406446662911,0.9484436166272129 hat,hat,5692,0.5189985771163975,0.8788751540883317 eks,eks,5693,0.2268536055075211,0.07181079334560747 hat,zee,5694,0.9574100016777235,0.17039179071493438 zee,pan,5695,0.9393222489267224,0.774430899802153 zee,eks,5696,0.2640774691558284,0.8627504344994997 pan,eks,5697,0.0327219679391374,0.09248968708796146 hat,wye,5698,0.06810484760017288,0.6639875840703167 zee,zee,5699,0.6656525429975034,0.2656212467516811 pan,zee,5700,0.28090923774332355,0.8374951101696497 wye,wye,5701,0.1179627885550506,0.9975425331219988 eks,eks,5702,0.25289706880351914,0.2805563313790924 hat,pan,5703,0.72917739071484,0.690903665960745 zee,wye,5704,0.5782219259637615,0.6129742019787713 hat,zee,5705,0.04579072787896754,0.15799336306835265 hat,eks,5706,0.2189964629062231,0.6072901175002905 zee,zee,5707,0.5807599756368977,0.28039036085635494 hat,hat,5708,0.5348701164177605,0.871699930863178 zee,pan,5709,0.6457903828308892,0.9224142093441036 wye,zee,5710,0.7433946942246273,0.7685021078153906 wye,zee,5711,0.243617265440373,0.9593069077433208 hat,eks,5712,0.6655721179929885,0.6283331080904476 eks,eks,5713,0.5690397938907296,0.9770357412029763 wye,zee,5714,0.08482160064983257,0.03799417629580293 eks,eks,5715,0.6755655231911353,0.4811405314521109 eks,hat,5716,0.21238778822910676,0.3806052020082521 eks,wye,5717,0.6979537966601973,0.42962472621589876 zee,wye,5718,0.5593594936211146,0.16162369293678702 wye,pan,5719,0.5431877225362253,0.8355498406808398 eks,pan,5720,0.08305185712441976,0.051555598682940684 zee,hat,5721,0.2195036864656421,0.0024237944219759333 wye,zee,5722,0.10456345278337953,0.509746172766625 eks,zee,5723,0.21507165298767472,0.3682335327240591 hat,eks,5724,0.8143828554234033,0.24040241057094147 eks,eks,5725,0.9447207896646325,0.5966728037991648 wye,hat,5726,0.14625361456888575,0.5773510905462336 wye,zee,5727,0.8249759724947993,0.8786053736989866 wye,pan,5728,0.2648916398523009,0.36807949569468823 wye,zee,5729,0.38861160385421634,0.008675492900147463 eks,zee,5730,0.12149239438427939,0.4952581794297195 hat,wye,5731,0.9834987933267317,0.9382393032643578 hat,wye,5732,0.5015349091062511,0.6216857441435001 eks,pan,5733,0.13872819430672179,0.13383706933234074 hat,pan,5734,0.5107753291897712,0.1890771910893585 zee,eks,5735,0.16433787761695273,0.9899324406741649 pan,hat,5736,0.09547147433477066,0.8232711347746213 eks,eks,5737,0.9827804718012476,0.8380939985179561 wye,hat,5738,0.8055154582345196,0.6724553306516827 hat,pan,5739,0.6476551335592238,0.2601855690050563 eks,wye,5740,0.06533958654376182,0.08290954242914517 eks,pan,5741,0.8637268770032811,0.5213399189681543 hat,wye,5742,0.34236446310071245,0.9934982483299798 hat,eks,5743,0.5295348501354114,0.7258797581771135 hat,hat,5744,0.12378910131331311,0.40752356675537815 eks,wye,5745,0.3665816980119626,0.6375063009827584 hat,hat,5746,0.3584851213141641,0.7358326774690753 hat,zee,5747,0.43583700578338747,0.672265347255106 zee,pan,5748,0.7440532825684012,0.9785802799882344 zee,hat,5749,0.21090673582102115,0.1689004632484875 pan,pan,5750,0.8304494332695221,0.5545369624062666 zee,pan,5751,0.5728551154691659,0.6693087997390269 eks,wye,5752,0.4413629999732097,0.15979822952735956 wye,eks,5753,0.7095091807055749,0.724643932584749 zee,wye,5754,0.7672243199159505,0.2279066139221857 zee,zee,5755,0.3010837648341733,0.025119103758309502 pan,zee,5756,0.6193965896501459,0.8537626115609437 wye,hat,5757,0.1224660035525037,0.9089730465198579 wye,zee,5758,0.7467869025815791,0.7773472293348217 eks,zee,5759,0.5808704155987169,0.7833615756850842 hat,eks,5760,0.9162336115551181,0.823024870348188 eks,pan,5761,0.8487786036617613,0.622984817551366 wye,pan,5762,0.40655642829036065,0.4636508847184254 eks,zee,5763,0.5976566500579671,0.43395514824679315 zee,eks,5764,0.3648319525198409,0.8451336137273936 eks,hat,5765,0.18805948712913445,0.22065247387702902 hat,eks,5766,0.46718203983164364,0.5797529176785338 wye,wye,5767,0.3576483350283548,0.7099943913835636 zee,wye,5768,0.3112657659379815,0.7236135438320516 pan,wye,5769,0.12034641162140858,0.7632931531006384 wye,zee,5770,0.2844962427329081,0.46659983713341124 pan,hat,5771,0.8904572608374995,0.8849293322073792 wye,wye,5772,0.7038981127406301,0.494354667366391 pan,eks,5773,0.5155930172001615,0.9788581972056736 zee,eks,5774,0.28797189143581137,0.8675122476473998 zee,pan,5775,0.03055433366810012,0.1704580136613072 pan,eks,5776,0.7165945800863369,0.6653908462460456 pan,eks,5777,0.8730284129862198,0.6933278671481614 pan,zee,5778,0.18335757641115535,0.5465471193000622 zee,hat,5779,0.10449109525989031,0.09472821919765906 zee,wye,5780,0.4996898459570338,0.788832071937286 hat,hat,5781,0.9223990594381151,0.9860563250941797 pan,pan,5782,0.21543034149293305,0.7487921850342059 hat,zee,5783,0.6163250225253557,0.7015824283135457 zee,pan,5784,0.25355692244085803,0.5122385042700014 hat,wye,5785,0.40569525676284146,0.22909456416866192 wye,zee,5786,0.03516048679248873,0.8905801671138128 wye,eks,5787,0.21927016627884677,0.5789606863931362 pan,eks,5788,0.02515332637605694,0.5642073646656487 hat,wye,5789,0.8879926912167789,0.288087517987045 zee,zee,5790,0.8365237122409817,0.3161681746915882 pan,pan,5791,0.9821624001072915,0.035862016352741 hat,hat,5792,0.04225905159882992,0.11113794777514896 wye,hat,5793,0.7433843634275165,0.5164678527321154 eks,hat,5794,0.6887872847411916,0.485721605301096 wye,zee,5795,0.6399305400537463,0.5169871749762857 pan,eks,5796,0.10739150192981317,0.004460524149627276 hat,hat,5797,0.5867728931987851,0.937578286245456 eks,hat,5798,0.3908387810335817,0.34330528598151944 wye,eks,5799,0.11663940947930529,0.2283382768880119 hat,wye,5800,0.20766266556079938,0.06909200825337258 zee,eks,5801,0.019645955696274475,0.9094238943256715 hat,zee,5802,0.4647837023773008,0.30037328314118017 wye,pan,5803,0.5646566533554874,0.15673400226423917 eks,hat,5804,0.29845440226372855,0.24711215673748332 zee,wye,5805,0.25960541840206386,0.22950027817819518 wye,pan,5806,0.6653575136807429,0.9060998128185732 pan,wye,5807,0.18771994519215784,0.26225112077131363 wye,pan,5808,0.3666840512152372,0.15437085935635642 zee,wye,5809,0.1494185162017646,0.7860811687162453 wye,hat,5810,0.11952846412695983,0.8522219808940303 hat,eks,5811,0.44094875130964795,0.7732717099587513 eks,hat,5812,0.5559531679203801,0.026931495207055067 hat,zee,5813,0.5451345812741655,0.4792657127863339 eks,wye,5814,0.3619763137230263,0.3300717677846403 eks,zee,5815,0.48687526629526545,0.8584389551214576 pan,eks,5816,0.9160561949834121,0.5246537157918573 pan,wye,5817,0.3309523992695672,0.8070632628360801 pan,zee,5818,0.20345133041566366,0.5750982955524265 zee,eks,5819,0.07183321376053509,0.9726675502317286 wye,wye,5820,0.9675205269852082,0.8456558793367495 hat,zee,5821,0.319976254021178,0.8734609010107423 eks,eks,5822,0.6616970307501397,0.6091232839670194 eks,pan,5823,0.5176519151206722,0.021797183751670723 eks,zee,5824,0.008069601151581285,0.4982567352783567 pan,hat,5825,0.5827800197345394,0.7803525569338927 pan,pan,5826,0.2538325082222126,0.9476879457255432 wye,eks,5827,0.9514763137560248,0.20882670554843952 wye,zee,5828,0.9320615638508492,0.19881625022009897 pan,hat,5829,0.9764966414862699,0.4156514128952272 hat,pan,5830,0.3667779041985445,0.705757188907245 eks,eks,5831,0.2131869859612514,0.051574404230206206 hat,eks,5832,0.536815843763481,0.9725354850537404 eks,wye,5833,0.06151529817648871,0.7067840865178908 pan,hat,5834,0.40809909826591584,0.9348168564556171 eks,eks,5835,0.565996045716497,0.4508098512548929 eks,wye,5836,0.8956966597743651,0.8528472084728154 eks,pan,5837,0.4574051555265334,0.8299651056659689 pan,wye,5838,0.40192120844730816,0.01299427191690905 wye,hat,5839,0.9215400303532923,0.45266271324432283 pan,wye,5840,0.24154556129725246,0.5622236434363397 zee,wye,5841,0.1727248222190798,0.6210983576320617 wye,eks,5842,0.6216373633536472,0.9301770846288369 eks,eks,5843,0.7492151915521785,0.39861528823986403 zee,pan,5844,0.760328363920412,0.25716006527035284 hat,eks,5845,0.43975939611821113,0.8916429935358784 zee,zee,5846,0.162570991251604,0.26519462331398813 wye,zee,5847,0.27955183683250895,0.593734945819627 hat,hat,5848,0.9956327931315808,0.8873051757938238 hat,pan,5849,0.7302167315792862,0.21263835483392501 wye,pan,5850,0.9313090088228326,0.9743729163851863 eks,zee,5851,0.22409910130745192,0.13300739204811318 hat,pan,5852,0.9764589316784894,0.5367076815906018 hat,hat,5853,0.9153388125321756,0.3586120018450708 zee,eks,5854,0.13307347063070984,0.35231749332115525 eks,zee,5855,0.9817510205071746,0.345441110032638 hat,hat,5856,0.02372556298430306,0.7721928675615208 eks,hat,5857,0.5417934009900822,0.13544385674063442 eks,zee,5858,0.0460418994677978,0.5267262848816568 eks,wye,5859,0.07297199386640929,0.027345228589134907 eks,eks,5860,0.9833629242563793,0.9992250545586543 eks,hat,5861,0.885544518143363,0.6319209563437962 wye,eks,5862,0.5814001743292831,0.2775598540805262 eks,wye,5863,0.46034553116676624,0.8419263560507274 hat,pan,5864,0.8998046024201602,0.13280033695524907 zee,zee,5865,0.7705835578927107,0.47218544336953905 wye,wye,5866,0.0548129640505145,0.8443145744599417 eks,zee,5867,0.9115822381629575,0.7866137441239371 zee,zee,5868,0.6094609434293627,0.5377506393673299 zee,wye,5869,0.018050024906604567,0.7925383948436677 pan,wye,5870,0.7185567353405748,0.9625690376428901 zee,zee,5871,0.028580144473957514,0.3101568871452759 pan,pan,5872,0.3820471070600516,0.35563824254246 hat,pan,5873,0.48211948675174343,0.2808314182510484 zee,zee,5874,0.4244763123071966,0.27813346850123377 hat,hat,5875,0.08023425641620874,0.3562943757988909 eks,zee,5876,0.42409197009601207,0.2580874448511281 zee,hat,5877,0.6106977731868735,0.8348351384198046 hat,pan,5878,0.7267758858416487,0.6189509030501132 eks,pan,5879,0.9304167092235895,0.7812522227544872 pan,pan,5880,0.16403167139407027,0.9377394665165222 zee,zee,5881,0.9728622687660967,0.15656315863552106 wye,hat,5882,0.1079539981243911,0.27269401005584115 pan,wye,5883,0.3575378506176421,0.6513985153042581 pan,pan,5884,0.5893199011375699,0.9675602927187726 zee,wye,5885,0.7855309055804873,0.8242084722200425 pan,hat,5886,0.21719695401350458,0.30358017023038153 hat,hat,5887,0.9478034096451651,0.408314973093156 pan,hat,5888,0.6047201198005093,0.9181081561579384 hat,hat,5889,0.585057883337934,0.8637135279822525 wye,hat,5890,0.7193606570599776,0.13247216321287003 eks,hat,5891,0.38491586194929694,0.1469109750984342 zee,pan,5892,0.9813253864700262,0.35805907741021115 pan,pan,5893,0.3991583932113212,0.9300651976220902 eks,hat,5894,0.4664037391639634,0.665201311994492 eks,zee,5895,0.34688995428502123,0.05521465426780947 pan,hat,5896,0.9024771073805518,0.604435930128322 wye,eks,5897,0.8964292531785713,0.4797408068859207 zee,zee,5898,0.9638020677593624,0.9758009686628205 pan,zee,5899,0.1740859761427278,0.6267077732379096 wye,eks,5900,0.5229577213131821,0.18158149929552536 pan,wye,5901,0.7384787869595655,0.41300809363121915 pan,hat,5902,0.41567839319864996,0.6586070339163206 pan,pan,5903,0.16296558429713726,0.6335579931374635 wye,eks,5904,0.791240301793597,0.5905379287555277 eks,eks,5905,0.8611318706939175,0.012613640405385818 wye,pan,5906,0.25968317122777085,0.21946674504226305 eks,pan,5907,0.20429202129242863,0.2739618927896226 hat,zee,5908,0.5139620538238665,0.4911358765578846 pan,hat,5909,0.2621296183552325,0.6724917830910391 eks,hat,5910,0.42415855241583555,0.6705675010493037 wye,pan,5911,0.865745658241438,0.58440580479703 eks,hat,5912,0.8061623351763454,0.6282727719209886 pan,zee,5913,0.07513903167347802,0.6097002489929698 zee,hat,5914,0.6882661603529711,0.8887129009982704 wye,wye,5915,0.25957436941921963,0.5267742816791648 hat,zee,5916,0.5369361894430387,0.7602843160092176 zee,eks,5917,0.7603685712259192,0.6343676597010043 pan,hat,5918,0.366468458362766,0.03541459276961356 hat,zee,5919,0.572831435062068,0.03791669059169456 hat,eks,5920,0.22277164773544,0.6701548094942816 eks,hat,5921,0.7220748068466161,0.9135263674287071 hat,hat,5922,0.7007543076445784,0.5785000013877882 zee,pan,5923,0.07333176505461592,0.6129972451763929 eks,eks,5924,0.7977706056198149,0.3145761502534876 pan,wye,5925,0.02234819330370974,0.24864881451646326 eks,wye,5926,0.31862517237026744,0.6707830122783046 zee,wye,5927,0.7736532335919073,0.06276902730360534 zee,hat,5928,0.571180118057766,0.23249209976534324 wye,wye,5929,0.765996158956063,0.7875000435827569 eks,eks,5930,0.9258500136940602,0.14002804460000795 zee,pan,5931,0.14870262574003812,0.25758171933702145 hat,hat,5932,0.6061740180931977,0.0647099944297298 zee,eks,5933,0.21312616005615392,0.1555687828207697 wye,wye,5934,0.32174717605868364,0.5617674601864029 zee,eks,5935,0.4278905571169318,0.7204350849259756 wye,wye,5936,0.5169276990526274,0.34471540929660927 hat,wye,5937,0.7939967856315264,0.9601200264326587 pan,pan,5938,0.7447545239901884,0.8615464344679636 wye,pan,5939,0.32618776050076514,0.04356428568705306 zee,pan,5940,0.30848692760824414,0.4765563067775509 zee,eks,5941,0.47731093944717395,0.20531029159472136 zee,hat,5942,0.14569062187871828,0.29647189869590773 zee,eks,5943,0.8514541851665678,0.47380190170636116 wye,pan,5944,0.8579979653959152,0.020846772517364776 pan,eks,5945,0.6760904036707333,0.038710653329522726 wye,pan,5946,0.4654804137932894,0.034558917439536097 zee,hat,5947,0.21695412923454904,0.43929843802398505 hat,hat,5948,0.5757328621980413,0.6353025655596225 wye,eks,5949,0.9623043477520935,0.11211455399205761 pan,eks,5950,0.2489174544195356,0.9543858789744019 wye,zee,5951,0.2551744295171663,0.6371014605832375 wye,zee,5952,0.6661892172394466,0.25609424535345615 zee,eks,5953,0.9664924377661902,0.5704525111862812 zee,zee,5954,0.7314435770258082,0.5760633916387623 wye,eks,5955,0.11730300164253482,0.2437668953328913 hat,wye,5956,0.2856744287649412,0.5130003461790801 pan,wye,5957,0.7991558243539277,0.04715962071161517 wye,hat,5958,0.4484915030384218,0.0021936451209908503 wye,eks,5959,0.4276118637683318,0.9781842697081753 wye,zee,5960,0.5390282464497976,0.21779961652631485 hat,zee,5961,0.3083082640562401,0.43599613823729055 pan,eks,5962,0.15236030642851295,0.11800538936265059 zee,wye,5963,0.7842417183077839,0.8263558103417791 wye,pan,5964,0.42422897642936763,0.5598064063472771 wye,hat,5965,0.7381633325773709,0.7044839805205219 eks,zee,5966,0.8246457170881877,0.546058458654676 pan,wye,5967,0.03056556054577575,0.5661151347932647 wye,wye,5968,0.6210050577035034,0.6524576650195097 hat,pan,5969,0.7090572782654315,0.5364015328854267 eks,zee,5970,0.6509530715275128,0.5780440319964154 pan,pan,5971,0.2887825352259904,0.15004456717790193 wye,pan,5972,0.831991442447814,0.26469776729003514 zee,wye,5973,0.20543699412375216,0.7115776392376905 pan,wye,5974,0.2632680009756867,0.5045539888483129 zee,hat,5975,0.34854624620098384,0.12823216693877193 hat,zee,5976,0.12265984923829065,0.46184314823141537 zee,eks,5977,0.9593214911106812,0.18841934020738382 zee,pan,5978,0.29873353271383263,0.8224260506438726 wye,zee,5979,0.3367480944275053,0.9086030526073715 eks,hat,5980,0.6119122505853635,0.08152300908632903 eks,eks,5981,0.04584617519803835,0.07778733739846255 hat,hat,5982,0.12903186206218742,0.34208394676963483 wye,eks,5983,0.20225412929960151,0.467369874775762 eks,zee,5984,0.43322997404163954,0.5286653070293011 zee,zee,5985,0.5011026241476996,0.805862929391608 zee,eks,5986,0.8754701645608397,0.38365755627001585 pan,eks,5987,0.4615059476811778,0.052616042635722726 hat,wye,5988,0.6628427322104598,0.7830019543371667 hat,wye,5989,0.9291945030562897,0.3850137859960868 wye,pan,5990,0.17713926799897517,0.23695227873073954 pan,eks,5991,0.7450679111488475,0.28865753240279957 hat,wye,5992,0.608480151924532,0.2124705647477415 wye,zee,5993,0.5294790360408727,0.8997422208092308 wye,pan,5994,0.8452227401580423,0.17900534407423696 pan,pan,5995,0.9106908084952221,0.4539070115302676 zee,wye,5996,0.5373426059376083,0.4221246992022961 pan,wye,5997,0.5531071589049933,0.08637347865871003 zee,pan,5998,0.21694616431952807,0.39150665545149743 zee,wye,5999,0.6413081783785531,0.1998976766972167 eks,eks,6000,0.2792519668247778,0.5138064566303124 hat,zee,6001,0.5185086838193509,0.7904042779588125 eks,eks,6002,0.39573160678139196,0.4615703290236336 zee,hat,6003,0.0715926003170353,0.6334247799868317 pan,zee,6004,0.24114560678004815,0.9328567037965978 hat,wye,6005,0.7983815573901718,0.7761184973619634 hat,zee,6006,0.5384751396537175,0.3888207115072827 wye,pan,6007,0.8053846290661436,0.8678997964852174 pan,eks,6008,0.41565599952378685,0.9850186434544672 wye,wye,6009,0.0929139240769814,0.5373260828931007 zee,eks,6010,0.6485105788304564,0.4297840734143743 hat,zee,6011,0.9000836207274523,0.21471020343061598 eks,eks,6012,0.6658398998195909,0.13678166324566765 hat,wye,6013,0.4176340542833341,0.9065866640956619 zee,wye,6014,0.8507681738053369,0.11610028428937647 eks,hat,6015,0.9615655580235888,0.3722658883094253 pan,pan,6016,0.7515268934050028,0.6517374909352979 pan,hat,6017,0.49152531929212073,0.7512315139958677 eks,hat,6018,0.4684056585315659,0.337057411818393 zee,hat,6019,0.46644646414956337,0.37632624811846627 eks,zee,6020,0.8375544392876899,0.06208795125761901 eks,wye,6021,0.853613881880828,0.42565283184216685 wye,hat,6022,0.0008045774133644823,0.9649087112765938 eks,wye,6023,0.728964866290429,0.20299302934138896 wye,wye,6024,0.17509415050833677,0.6602044660320481 pan,hat,6025,0.8660100438564455,0.43409555049096815 hat,hat,6026,0.26534848529863153,0.15071960409960417 hat,eks,6027,0.6918174742812051,0.18022893420812924 pan,eks,6028,0.8921081985029767,0.918512738613517 eks,hat,6029,0.5291325936429374,0.11343528410923331 pan,eks,6030,0.6604483059910737,0.828006457014962 hat,zee,6031,0.15437854915261007,0.503378274348622 wye,pan,6032,0.18616681775349353,0.428462590403658 wye,hat,6033,0.17782260468314637,0.3212752721293215 zee,zee,6034,0.1872485063005922,0.11358951848324028 wye,zee,6035,0.40200320956425806,0.5915516801877846 wye,eks,6036,0.6743134456217715,0.03587684243454348 hat,pan,6037,0.13535704558051898,0.08799048432237733 eks,hat,6038,0.45829076005760183,0.9312783969989717 pan,wye,6039,0.8260078705928582,0.015009473265236828 pan,eks,6040,0.02209842222005065,0.2707759101194467 pan,pan,6041,0.24065041069096327,0.096992272385374 wye,wye,6042,0.1257432277214967,0.7056875982657411 wye,zee,6043,0.19024789027868116,0.8414234848855409 zee,wye,6044,0.5264647677402654,0.16668422327274046 wye,wye,6045,0.43588050348095864,0.4231462786478698 zee,eks,6046,0.35017939224895767,0.31215765738608925 eks,wye,6047,0.5417973498575591,0.47047382812068883 hat,wye,6048,0.7766726125727336,0.5675508167476694 zee,wye,6049,0.9832175361809419,0.2682166583462263 wye,zee,6050,0.6951984651252766,0.5425712622829648 pan,wye,6051,0.9427895952822903,0.8719941425198732 hat,hat,6052,0.5361976672567662,0.5331863539216497 eks,wye,6053,0.7102521301167394,0.017628741065697007 eks,hat,6054,0.7073320813195529,0.9382615280812954 wye,wye,6055,0.9034120549999815,0.9428661865045129 wye,zee,6056,0.9036169505703209,0.8702961297029511 pan,zee,6057,0.351391651879459,0.22131930493166563 hat,pan,6058,0.4633029443317498,0.9006978783785164 pan,hat,6059,0.8954915180233931,0.5799236237902317 wye,pan,6060,0.011291356990852042,0.7765350029774964 wye,hat,6061,0.8964276551673388,0.09468753423212417 eks,zee,6062,0.32542453183848197,0.5356755758750752 pan,pan,6063,0.4553835211035392,0.421964673707642 eks,eks,6064,0.9195082628714536,0.7843278824429687 wye,eks,6065,0.43792520749353625,0.9395208618424521 hat,zee,6066,0.6147064931036405,0.9150698526901345 zee,eks,6067,0.22286944513587603,0.5667267901072823 zee,pan,6068,0.1015880769763784,0.9719880080896737 zee,hat,6069,0.8599055004647317,0.09826062758286946 hat,pan,6070,0.6313496582432914,0.9900649342170824 pan,pan,6071,0.8928836261132681,0.5415114404183805 zee,wye,6072,0.7452277791699898,0.27999313704075457 wye,wye,6073,0.018510579550919615,0.6478773625532628 pan,hat,6074,0.14632992450201188,0.7026424321895863 pan,eks,6075,0.8012118002371259,0.7203879849887644 hat,wye,6076,0.8379974247825939,0.6503639424507504 pan,zee,6077,0.5778438306895812,0.3635043725548298 hat,eks,6078,0.6372234825627152,0.5775364684644685 wye,hat,6079,0.788390001290666,0.08406257620709923 eks,hat,6080,0.5842098929256355,0.9268385178778537 eks,zee,6081,0.8045184557436604,0.3550708830410243 wye,hat,6082,0.6940314918085063,0.9546919945201542 zee,wye,6083,0.07677730138586769,0.27970074396540523 hat,hat,6084,0.8231273607660942,0.7945531787758096 pan,zee,6085,0.149414209891241,0.785222866060064 hat,zee,6086,0.8656687722742876,0.3783605596273294 pan,hat,6087,0.7452242982918568,0.933266614617221 eks,eks,6088,0.9407795350577164,0.8986498240204077 zee,wye,6089,0.20326626549933924,0.9955640843974876 eks,pan,6090,0.838908851853637,0.9142053659359575 pan,zee,6091,0.2805934812907199,0.4958691991853912 hat,hat,6092,0.11050475306966923,0.6388348781021509 zee,hat,6093,0.665308883447062,0.06804657653188073 zee,wye,6094,0.38062861091901556,0.1551403595265176 eks,zee,6095,0.6890247160219993,0.37496310117295584 eks,hat,6096,0.42296496745953693,0.028270087708508695 zee,pan,6097,0.16613072961880582,0.6781440562566766 eks,wye,6098,0.004861307055076147,0.16556471646142745 hat,wye,6099,0.45226025959304195,0.18641738624575777 wye,eks,6100,0.6994211629442989,0.5162220389082391 hat,eks,6101,0.21566053977410837,0.0009137416907488705 zee,eks,6102,0.8280966067887752,0.694693806129609 zee,pan,6103,0.6340964020751576,0.62642563404278 eks,eks,6104,0.35610230144127086,0.6916343444424629 pan,wye,6105,0.2907054181631238,0.6928671017273116 zee,pan,6106,0.8553526569078405,0.9138200519516971 hat,hat,6107,0.16347811679340452,0.6796304402643298 pan,eks,6108,0.08545243832367033,0.26227816664595516 pan,wye,6109,0.42064626396142935,0.03834575879901836 hat,hat,6110,0.06431500264016754,0.8198549278735412 pan,hat,6111,0.8176964039522118,0.27991537751096096 wye,eks,6112,0.32643889115109914,0.057664918435550105 eks,zee,6113,0.7830249162665363,0.9359267958767102 zee,pan,6114,0.12372114799931111,0.006510213999872061 eks,pan,6115,0.14468978749350747,0.9503328335027744 pan,wye,6116,0.8796441138920073,0.7932277172417034 zee,zee,6117,0.9246694666039478,0.18141663220397541 wye,pan,6118,0.6353087660069283,0.5051898483269901 pan,wye,6119,0.5863942231599231,0.001428085680191149 wye,zee,6120,0.8391496713951982,0.8272270342812488 pan,wye,6121,0.10848385354873591,0.4213783243233229 eks,zee,6122,0.7851432595398691,0.8736148992334403 pan,wye,6123,0.14384598748640032,0.32134746224637845 hat,zee,6124,0.05088458565782927,0.9994183544894671 hat,eks,6125,0.7256280642967333,0.8471794523838057 eks,pan,6126,0.6585496392017636,0.4276868684164896 wye,hat,6127,0.645442843855344,0.34584198249412534 wye,hat,6128,0.5798880313425798,0.991140739248181 zee,zee,6129,0.8451024180287646,0.4474449179206156 pan,eks,6130,0.06722223792791904,0.14906728853790685 eks,eks,6131,0.8733172145139986,0.754180892846082 wye,wye,6132,0.21323342519040167,0.023037099194546995 eks,hat,6133,0.2772309881804147,0.03618215388759871 hat,wye,6134,0.3566779583699996,0.7569810016480044 zee,zee,6135,0.4368219705298403,0.02593555893570043 wye,hat,6136,0.13423307209566393,0.7786764748609936 pan,wye,6137,0.26321994371190116,0.7448472659747205 pan,eks,6138,0.09141195779591726,0.10884990452426058 hat,eks,6139,0.8439060414873816,0.4078177506117555 zee,eks,6140,0.6449410501908724,0.7328187261405557 wye,wye,6141,0.31425705029105533,0.7492859328412478 zee,zee,6142,0.657143123361377,0.37319179681546233 pan,wye,6143,0.8303922450488143,0.04133052528317438 pan,zee,6144,0.054269779082146474,0.7280169255714574 pan,eks,6145,0.9449211141040083,0.18293190122317016 zee,wye,6146,0.28919940890955353,0.7696928449638194 wye,wye,6147,0.29949161102957667,0.5548662350346921 zee,wye,6148,0.06803050982105852,0.6066130537591169 eks,zee,6149,0.6534482020575438,0.2506945890953125 eks,eks,6150,0.2543117769739106,0.2683840371177597 wye,eks,6151,0.2875496688119247,0.44319198704607665 wye,eks,6152,0.7099732953682635,0.5854903351687778 wye,pan,6153,0.07854709434875495,0.3722757779564305 pan,wye,6154,0.8844645043086019,0.0821083597407316 zee,zee,6155,0.3642127687872748,0.5633536743710837 wye,zee,6156,0.06825592495808563,0.1502278354043537 hat,wye,6157,0.96483308459617,0.005464821632367056 wye,wye,6158,0.5486690225111291,0.22135008972861803 pan,wye,6159,0.962029830876355,0.39858158874481264 hat,eks,6160,0.7011580850727354,0.6036204870691432 eks,zee,6161,0.08747236952448512,0.6025426256044452 hat,wye,6162,0.7456669839482689,0.1394569856909862 hat,hat,6163,0.10827051081377403,0.16793651272516608 wye,pan,6164,0.8979852141961816,0.13235901577397613 zee,zee,6165,0.15629723258639028,0.8654019947072258 pan,wye,6166,0.5836460911249829,0.5913706500552215 pan,zee,6167,0.6207688091598478,0.47548687622711405 eks,pan,6168,0.011142080206369753,0.11796822475814073 wye,hat,6169,0.27571064540346324,0.849891289726519 wye,hat,6170,0.05037038984895503,0.6127522806306696 hat,eks,6171,0.6128807090186297,0.13380041255048647 hat,zee,6172,0.4805916761138247,0.1482140011291747 pan,zee,6173,0.07652496417334043,0.042388913077830326 eks,eks,6174,0.43221049405771506,0.9702133355298461 zee,hat,6175,0.22992120482659384,0.7893723418315517 wye,wye,6176,0.8712880934289053,0.1426259097448438 wye,pan,6177,0.03184609338086353,0.0814260689531977 pan,eks,6178,0.18328780306168269,0.7969641159371771 pan,hat,6179,0.44176808883841967,0.606631222409441 pan,eks,6180,0.6707266041969419,0.8559378190156729 eks,zee,6181,0.2802981253544844,0.3174939125127616 hat,wye,6182,0.5963539674332015,0.8719750664328125 hat,pan,6183,0.005703731409972823,0.13190978995990732 wye,eks,6184,0.8185740040040715,0.29143129414848035 hat,pan,6185,0.38534047699412566,0.653203878373999 pan,eks,6186,0.8129419229181339,0.9565505011070674 zee,eks,6187,0.9102216458464243,0.14788252816414793 pan,pan,6188,0.3138266925669364,0.1423581267550319 eks,zee,6189,0.1600695810764854,0.3703741621779819 hat,zee,6190,0.855253088583113,0.4268359685582771 pan,zee,6191,0.4936690941214801,0.8239585275348885 zee,eks,6192,0.9698866358660461,0.45918790442353197 zee,pan,6193,0.22555543203604156,0.354448421001617 wye,zee,6194,0.567972797574568,0.48947921344717205 pan,wye,6195,0.32782196923608053,0.5904659635589349 hat,hat,6196,0.6643469112984154,0.21978754163260783 hat,wye,6197,0.9175822141933855,0.8289821718204701 pan,pan,6198,0.7387220064556718,0.634422986160881 hat,hat,6199,0.27873509309298805,0.8518009401398621 hat,pan,6200,0.9456083795785362,0.07976539092371093 wye,zee,6201,0.3729199649979895,0.3737596699867053 pan,eks,6202,0.47394220338381987,0.22208820414520292 wye,wye,6203,0.43456592177296915,0.8898632264012567 hat,hat,6204,0.01568433367414035,0.6760088307426864 eks,pan,6205,0.9867459947802004,0.048081368596216145 zee,eks,6206,0.4689131127096242,0.18743577113193155 hat,pan,6207,0.35740607834132276,0.9046883371614931 wye,pan,6208,0.38705607831183175,0.33125379993312465 hat,pan,6209,0.1164284726722783,0.5077787588883211 eks,pan,6210,0.11164707350592284,0.4366699296089537 zee,hat,6211,0.1756835304978165,0.21235178828034162 wye,wye,6212,0.4370538758875272,0.6712221542567061 wye,zee,6213,0.223018528653398,0.07665796419452864 wye,wye,6214,0.3196105142466139,0.5918579198886101 hat,pan,6215,0.2642111043247998,0.7655889787356082 eks,pan,6216,0.830827137944212,0.04852612916637178 wye,eks,6217,0.8805402436632958,0.45841077395866314 eks,pan,6218,0.413534591007817,0.23614970902594068 zee,hat,6219,0.16354591153161113,0.9206152927733066 eks,zee,6220,0.047918107206670224,0.11615158016485994 wye,eks,6221,0.7465534540087728,0.9821197497223434 eks,wye,6222,0.06680014273579682,0.18844745124665652 eks,zee,6223,0.722803247048192,0.36350236589598184 eks,hat,6224,0.4238158023951344,0.2511472296462649 pan,pan,6225,0.9203832973582675,0.06804134828535513 eks,hat,6226,0.02496410500180868,0.05574344857979974 hat,hat,6227,0.38672001205322815,0.19823389210483422 zee,wye,6228,0.82604777396307,0.4659557204008049 hat,pan,6229,0.14688149819492824,0.09514280973942923 zee,hat,6230,0.7075949539072733,0.4235760111709499 zee,zee,6231,0.5376973727140149,0.2898522104137249 hat,eks,6232,0.5875320141178829,0.2318829378753392 wye,pan,6233,0.608930346989634,0.4394723390502957 hat,pan,6234,0.3711000240622062,0.5630248688807553 zee,hat,6235,0.6700739126174862,0.9940554433455402 hat,hat,6236,0.4937178916169107,0.9804247824378383 eks,zee,6237,0.9471147772457458,0.08993646421096724 pan,zee,6238,0.8826315387759526,0.29842130130234024 wye,pan,6239,0.8739810335218393,0.2932188268287632 zee,zee,6240,0.7765733461710617,0.2833840343701606 pan,eks,6241,0.8637612972836923,0.7179857913303808 pan,wye,6242,0.7916044619336652,0.8298956143848671 hat,wye,6243,0.03245716276075361,0.06220544584591636 wye,hat,6244,0.12210504687225221,0.6815533723212936 eks,zee,6245,0.46823867638384764,0.6642014993474107 eks,hat,6246,0.29665539600807134,0.7003997740545368 eks,hat,6247,0.3362821619192434,0.5279161806972573 eks,zee,6248,0.5444822392275463,0.0876616329488289 eks,hat,6249,0.20745998433546498,0.6115074760010532 zee,wye,6250,0.1678104597445702,0.6488476640200247 eks,hat,6251,0.7449272998418788,0.6080272372617547 zee,pan,6252,0.5630148470870018,0.9374709146770936 zee,eks,6253,0.3902801767495462,0.5732026335466424 zee,eks,6254,0.16850436138589997,0.8738130855818549 zee,zee,6255,0.9316229517968885,0.652503212541953 zee,eks,6256,0.5901306196182216,0.0931368428666508 hat,eks,6257,0.7050090746554877,0.8875603931761636 eks,wye,6258,0.9454475219485642,0.5012059708954245 zee,pan,6259,0.4266553967306278,0.4003433468882255 wye,zee,6260,0.9923421841444514,0.8824722395488493 hat,hat,6261,0.40702432370099206,0.7171214051987123 hat,eks,6262,0.3350864667715827,0.014819836304338363 wye,hat,6263,0.9268271428508724,0.8044165287448475 eks,eks,6264,0.4779658182518448,0.8202291191900539 pan,hat,6265,0.2970907219742721,0.1979486130274667 hat,zee,6266,0.7137087061271212,0.013510967108152694 eks,eks,6267,0.6051949380519777,0.7786588336276383 eks,wye,6268,0.8158250525163169,0.4134056153971454 eks,eks,6269,0.19963046420567765,0.7765565982643615 hat,eks,6270,0.543219579817685,0.5740667894014433 pan,eks,6271,0.46967904346855993,0.8165981152983919 pan,hat,6272,0.866140011093518,0.3038034829369789 zee,hat,6273,0.7504799514506184,0.5256684190391457 eks,eks,6274,0.7402757803304741,0.8741323775731765 zee,eks,6275,0.10740056926929464,0.24466182300866768 pan,pan,6276,0.6952734267926836,0.3034126351184192 hat,eks,6277,0.4555390450312061,0.29958791124739714 pan,pan,6278,0.8010308117452736,0.10301620244633602 pan,zee,6279,0.7313615800627254,0.1256082104913564 pan,hat,6280,0.4855733066299236,0.8761128788327854 hat,pan,6281,0.4484391085565852,0.4389498697416624 pan,hat,6282,0.09083588457295921,0.7896685475022054 zee,eks,6283,0.5390923448056928,0.5167672853818701 wye,wye,6284,0.35204669568634417,0.4690592822602978 pan,pan,6285,0.32173095582057487,0.21796469598272317 zee,eks,6286,0.144962592956428,0.7722195658556293 hat,wye,6287,0.2714129569031942,0.8615826556040387 hat,zee,6288,0.07477462162312054,0.5791036060536199 wye,zee,6289,0.7327389149804516,0.7332292873505851 wye,hat,6290,0.21334531120997036,0.7835004731984553 wye,pan,6291,0.72465968202963,0.8111622984322363 wye,zee,6292,0.7179223482928053,0.7389960044426721 wye,zee,6293,0.6388081928409085,0.34955396223940427 pan,wye,6294,0.9468440956319596,0.4217394313328563 pan,eks,6295,0.5390564367625461,0.044601959541880176 pan,pan,6296,0.16446925567275705,0.2859671068853066 zee,zee,6297,0.36656402569411484,0.7479751436902188 zee,hat,6298,0.9752808469326072,0.5811620174961745 zee,pan,6299,0.8830811226882286,0.2699573596370525 pan,zee,6300,0.31023070105575734,0.11731145460396875 zee,pan,6301,0.9479037050282592,0.396609639351287 zee,zee,6302,0.24914699249882744,0.4481166721397105 hat,zee,6303,0.8952025142838863,0.5374079020216094 wye,eks,6304,0.7278787302021043,0.4613586504326308 pan,zee,6305,0.1290986312271305,0.12638586813227837 eks,hat,6306,0.12880877413554215,0.7937042890401891 pan,hat,6307,0.5265554249602866,0.5324141264515088 zee,eks,6308,0.6932899560091913,0.4224058829341274 eks,eks,6309,0.6584180105748301,0.46624011433648027 eks,eks,6310,0.4455507880824502,0.8273180891731959 eks,hat,6311,0.9810589871426987,0.8707798683477451 eks,pan,6312,0.20487685479037343,0.3809481389765218 eks,zee,6313,0.8361568272178401,0.3358472395165475 wye,zee,6314,0.463204899148721,0.8170995486225013 eks,zee,6315,0.4236416770354665,0.6484535277551096 zee,pan,6316,0.2909481028983725,0.6310311151465591 eks,pan,6317,0.3794062074790783,0.4471294857197765 zee,pan,6318,0.2692152520955172,0.22081394976202395 zee,zee,6319,0.5181926783871064,0.1991481006591117 hat,eks,6320,0.9361894740111099,0.11767606452557877 pan,wye,6321,0.2769079772213442,0.7118580604878051 wye,wye,6322,0.5167349179748397,0.9138123003320032 hat,pan,6323,0.001915577829406656,0.5325392190044987 zee,wye,6324,0.9515688609245834,0.6819481738668132 wye,eks,6325,0.9593196183251438,0.8367522899279389 zee,eks,6326,0.6840763322653561,0.48711604133900366 zee,pan,6327,0.9887417195594495,0.8511851849030334 zee,wye,6328,0.4752524014081069,0.5948633790977842 pan,zee,6329,0.8670969736419382,0.22322204023719405 hat,pan,6330,0.5128088389522093,0.8131565213796835 wye,wye,6331,0.4909465554349871,0.8422488044877716 eks,eks,6332,0.13395594485063067,0.8961331478845271 hat,eks,6333,0.3615187221839192,0.4910814422431359 wye,eks,6334,0.09211420131313564,0.423787234189663 hat,zee,6335,0.4909870746929612,0.4355886224024228 hat,zee,6336,0.45712566044414527,0.7396866168330615 eks,hat,6337,0.579470745492393,0.8856435834505533 wye,hat,6338,0.08580189556409401,0.18529503699085126 zee,hat,6339,0.012498941021629406,0.8894278634707358 wye,eks,6340,0.893469417305926,0.6681902139221949 wye,wye,6341,0.7436478988526702,0.2699384378114361 wye,pan,6342,0.494186739181505,0.7777818161245044 zee,zee,6343,0.1034004605453186,0.39652659704684057 zee,zee,6344,0.13448148210620792,0.6260474107034932 pan,hat,6345,0.2613437423487872,0.9940438754118295 wye,hat,6346,0.4029829128240823,0.11036697991316924 zee,pan,6347,0.565275716092621,0.23420880259350974 pan,eks,6348,0.5980140331893903,0.06910125165307579 hat,pan,6349,0.8269557855792476,0.9027369919455107 hat,zee,6350,0.5352885898361499,0.3388698770867209 zee,wye,6351,0.9929432399676,0.7266233986268336 hat,hat,6352,0.4603922787242829,0.8630173727305803 zee,zee,6353,0.021330838330390844,0.3809296291373765 pan,hat,6354,0.7002692145665447,0.5873523948555504 eks,zee,6355,0.7096421804081511,0.8295306415940142 eks,eks,6356,0.16187658808999894,0.8302220496819485 zee,zee,6357,0.49409427660264216,0.4850204111936285 zee,wye,6358,0.2708188103232835,0.9662266139049696 hat,wye,6359,0.9607252863389836,0.5686827648028989 pan,eks,6360,0.7560882445267275,0.8572550831102655 zee,eks,6361,0.18272065148367533,0.739247187328454 eks,zee,6362,0.3565928726289197,0.7787122695765799 eks,hat,6363,0.2435075200137201,0.6410578487821268 wye,hat,6364,0.914528515618754,0.9410825640734111 hat,wye,6365,0.8343977017390618,0.4038557567547202 eks,eks,6366,0.3386950606192106,0.06992633700519646 wye,wye,6367,0.7504949488085239,0.786978752534252 hat,zee,6368,0.5051737323297509,0.7652145340768823 hat,wye,6369,0.7463935682542416,0.5295073352906969 wye,pan,6370,0.49818710578255154,0.1690594948792461 eks,wye,6371,0.49803548538778086,0.22335884494050284 eks,hat,6372,0.4246224317545182,0.3262297869762637 hat,pan,6373,0.0020932075053449184,0.9854117764909686 wye,zee,6374,0.18643754020877645,0.3123085804500255 hat,hat,6375,0.8001034675030699,0.9517591892658788 pan,eks,6376,0.6252933549201062,0.555208264819299 pan,pan,6377,0.1234059193898962,0.4282585828512744 eks,pan,6378,0.110887922625855,0.6850395297332329 hat,hat,6379,0.8361850070054325,0.19844462435428833 pan,eks,6380,0.2714658186149983,0.8900328486062874 hat,eks,6381,0.9299884067645247,0.9833998868880498 zee,eks,6382,0.5086463065649875,0.7232680771660464 eks,zee,6383,0.14567680811548367,0.7666281407205074 pan,pan,6384,0.6344408306479109,0.06196040433120564 eks,wye,6385,0.375259929118559,0.37681150088581805 hat,pan,6386,0.09907032231055479,0.11845065981831315 eks,wye,6387,0.5738630943778305,0.1629984838329911 wye,wye,6388,0.023110383118460698,0.4068502633328007 eks,wye,6389,0.06029233433804437,0.0069107595974849945 eks,eks,6390,0.37636185226364116,0.33595097225386006 wye,eks,6391,0.5269052228103134,0.06811348549954421 eks,eks,6392,0.7225625151417873,0.24647861320372433 pan,hat,6393,0.6164331222493035,0.799523761418903 pan,eks,6394,0.9066239795995487,0.3810678910603539 eks,eks,6395,0.013151988906827783,0.3911978077086571 zee,pan,6396,0.05693046828037929,0.0830535181246761 wye,pan,6397,0.09815785100601382,0.6838294083636631 hat,wye,6398,0.8278262369190469,0.8063525578215112 pan,pan,6399,0.10214678849235426,0.8695638422967837 wye,zee,6400,0.30136696499099913,0.6753346559057617 eks,pan,6401,0.3117980184170095,0.3896017834660054 pan,zee,6402,0.9804741377964931,0.49631735811047895 wye,pan,6403,0.374109581008899,0.9110444354943075 zee,hat,6404,0.7164677134055616,0.9694565043354904 pan,hat,6405,0.9759078114126464,0.7063179771371398 pan,hat,6406,0.954175493846238,0.6691300320475423 zee,hat,6407,0.04895042948869599,0.5565817121631146 zee,zee,6408,0.31225714410247885,0.2676588944630799 wye,zee,6409,0.7688696231859601,0.2251514431056416 pan,eks,6410,0.0771175852385313,0.43719251713130314 zee,pan,6411,0.6943439597980344,0.4529874687497758 eks,pan,6412,0.028528724411183704,0.4117910378534779 wye,wye,6413,0.6287761434833328,0.9307783735658955 zee,pan,6414,0.16675267868516974,0.46567693999380766 hat,hat,6415,0.8976720079433573,0.9828223660778185 hat,pan,6416,0.047236756072866926,0.7378794124793239 hat,pan,6417,0.5832411030367591,0.9477789434363258 hat,hat,6418,0.3743966868977374,0.783174113073371 hat,hat,6419,0.7816923607003607,0.26730270554894997 zee,hat,6420,0.8712427179950256,0.7447570934180631 wye,wye,6421,0.5648884056728719,0.5634331844443893 hat,wye,6422,0.01694176656548152,0.07336362857726697 wye,eks,6423,0.634648698039043,0.6818627870740478 hat,wye,6424,0.2615797200021953,0.06268282068424968 zee,hat,6425,0.4347562105046442,0.674781093628785 hat,pan,6426,0.6291090221287023,0.7077446188899329 zee,zee,6427,0.1266840835991615,0.4710457768189127 hat,eks,6428,0.09464086229090107,0.47239885675212656 wye,zee,6429,0.4663382505006868,0.8049521146793138 zee,pan,6430,0.4694715777452184,0.8671762254103113 eks,hat,6431,0.5070929456626403,0.4141949031576415 zee,eks,6432,0.9977728531401571,0.5555230798468542 eks,zee,6433,0.7714689740358521,0.4682319612714012 wye,zee,6434,0.3396705468736063,0.7170093938098063 eks,wye,6435,0.29949442818251637,0.2980558556550551 hat,pan,6436,0.8917689813015088,0.984408429326343 pan,eks,6437,0.07063477691831455,0.8731745285524414 wye,eks,6438,0.9311531747307039,0.36017141690300103 wye,eks,6439,0.27627014363793057,0.16739805033116262 eks,eks,6440,0.54039073822999,0.7382909202030716 pan,wye,6441,0.5364355943542373,0.8667607097366447 zee,hat,6442,0.1019419739884182,0.8210522328943843 zee,hat,6443,0.8392717810036734,0.4095062555606819 zee,wye,6444,0.5115020732232286,0.5858898596014527 eks,wye,6445,0.08215358744465884,0.4803964930713249 pan,eks,6446,0.44656601416029373,0.025883415745221905 eks,pan,6447,0.2131521138705983,0.44443595051013873 hat,zee,6448,0.8877041378948662,0.37718161280744267 hat,eks,6449,0.02954457910704722,0.18268010541285318 wye,hat,6450,0.06540529634689618,0.6973248364919504 hat,wye,6451,0.3603702418256457,0.945714519438643 eks,zee,6452,0.06223787640046563,0.8925718669036773 hat,hat,6453,0.6640804340662215,0.7894591475325365 zee,hat,6454,0.3766538672292219,0.4455838705050216 wye,pan,6455,0.23373281011403946,0.3153880547268789 wye,pan,6456,0.03036849011680509,0.2750194685259788 wye,eks,6457,0.7538211276818132,0.001441310514862515 pan,hat,6458,0.09729717910412794,0.19414276392139473 wye,hat,6459,0.5675430389740692,0.8272519001873508 eks,wye,6460,0.5637263196436371,0.670195472057473 wye,wye,6461,0.6778284989779373,0.0285879376093221 hat,eks,6462,0.9921482859148919,0.5987898976105622 wye,wye,6463,0.3211875999010735,0.7834800976581381 eks,pan,6464,0.2544291614706208,0.6807274563683547 wye,pan,6465,0.9167490958878957,0.9855848244933287 pan,zee,6466,0.15059271173810918,0.44163751220849723 zee,hat,6467,0.8143906454818576,0.05494909360709832 pan,zee,6468,0.9487811607055657,0.47218047025346854 eks,wye,6469,0.5901730276534817,0.8155922672887547 hat,wye,6470,0.6390276410501727,0.7865739186729956 hat,hat,6471,0.9494189095418566,0.3376440579707607 wye,zee,6472,0.6214639311843375,0.5100489809959527 wye,pan,6473,0.38012438275479565,0.990757480229546 eks,eks,6474,0.21187331402552312,0.3570247389877106 pan,wye,6475,0.1407760095778986,0.4114197966182903 zee,eks,6476,0.9687676442631526,0.3778953089069811 wye,hat,6477,0.4489569133156198,0.37328013990205033 wye,wye,6478,0.42854180852415313,0.9807031803546391 hat,zee,6479,0.702402839401389,0.7009502307426156 eks,zee,6480,0.9676699721896564,0.22422126244502638 hat,hat,6481,0.6708784819364922,0.8308286378718903 hat,wye,6482,0.8345542484122913,0.2115567403921984 eks,wye,6483,0.6489598152434705,0.725168237682496 zee,wye,6484,0.12383076923326797,0.10227618505533276 wye,wye,6485,0.6359239484918648,0.6087629645637064 wye,wye,6486,0.26321351409255855,0.10213207378968225 pan,eks,6487,0.4153808872409316,0.5380953444898547 wye,zee,6488,0.4298876367578778,0.8740569087259292 pan,eks,6489,0.7368633007515517,0.3235565157293787 hat,eks,6490,0.1904681932728718,0.39823383688284875 pan,hat,6491,0.40162401516303015,0.799676980010159 zee,zee,6492,0.6594479172290615,0.14884894304112206 hat,pan,6493,0.17669129422616314,0.17133013634096628 wye,hat,6494,0.4038680680240342,0.9000810248451881 pan,pan,6495,0.7458398054156802,0.15394809221770678 hat,wye,6496,0.024616285726912657,0.5198835249687588 eks,pan,6497,0.1184790227809902,0.7840803727709396 zee,pan,6498,0.9228447198201761,0.09844115301637657 zee,zee,6499,0.5093537663250951,0.5070363131757412 wye,wye,6500,0.04793995870348999,0.7326376271762662 wye,zee,6501,0.857769146584233,0.7284491562757176 hat,wye,6502,0.13952314891314033,0.21138680405955823 hat,zee,6503,0.0821042436799082,0.2380454193004119 zee,pan,6504,0.22170850644080387,0.8591089479037638 pan,pan,6505,0.6670057101772067,0.369664928277994 wye,eks,6506,0.2228766869756198,0.23547292675257847 hat,hat,6507,0.2037318613195901,0.8653218491418396 zee,hat,6508,0.5293143753649202,0.3032899464869183 wye,hat,6509,0.22689252452538788,0.01540955658171872 zee,wye,6510,0.03761238359284913,0.04430693507101946 pan,eks,6511,0.4156974178513727,0.6505604437223226 zee,wye,6512,0.5717578999541683,0.583339576596991 eks,wye,6513,0.2576348537935582,0.02891940447221053 zee,wye,6514,0.7108561722879589,0.5343855601720103 pan,wye,6515,0.20906185021483092,0.7346487645413573 pan,pan,6516,0.16436389636346782,0.06142769237145096 wye,hat,6517,0.9499786087950957,0.9169897551951627 hat,wye,6518,0.11226676145430348,0.3389463928651728 zee,zee,6519,0.2323137819710005,0.21425984944922594 wye,eks,6520,0.7524818540927941,0.9710297784453114 pan,wye,6521,0.4364322319855357,0.8466924609197165 hat,wye,6522,0.9673009309832951,0.33015592019384987 pan,zee,6523,0.5065662166353603,0.017151576997059825 wye,pan,6524,0.4239737405316326,0.24586595155563684 wye,eks,6525,0.666984074931497,0.5881526921363845 zee,eks,6526,0.7035055465426836,0.9029683394431433 hat,hat,6527,0.48083662190863985,0.6503200309394563 eks,eks,6528,0.35544201168726874,0.26203559629802176 eks,wye,6529,0.6483532909041725,0.27350007757294326 hat,zee,6530,0.6725507341754717,0.8211175540313643 pan,eks,6531,0.9263381279440988,0.7230758102834317 zee,eks,6532,0.9504925230076702,0.3707214379298016 pan,hat,6533,0.2968690724659714,0.5710523550663877 hat,wye,6534,0.09447988348358638,0.21201328127649932 hat,eks,6535,0.0022062240850495574,0.3458564847842249 eks,eks,6536,0.08799574586608505,0.16463115926454674 pan,pan,6537,0.15749262177445233,0.3950102135965362 hat,hat,6538,0.4868613643303731,0.8080900505454058 pan,eks,6539,0.7612094490147115,0.4401071622837852 hat,zee,6540,0.42723999009924263,0.5155261035021511 pan,hat,6541,0.0420481636052179,0.3896076829423738 zee,pan,6542,0.6629759666763753,0.7114746505059143 pan,pan,6543,0.8686279923185595,0.3493091545672151 pan,hat,6544,0.48676766407802263,0.2518094002262543 pan,eks,6545,0.8135981715168512,0.4300391107446847 zee,hat,6546,0.18939671235009936,0.5074696127752749 pan,wye,6547,0.7600528676641951,0.4426657030274146 hat,zee,6548,0.9011359340858558,0.6061658741277544 wye,wye,6549,0.2051254389063183,0.05111364491561332 hat,zee,6550,0.38066561435480195,0.42936645455121314 wye,pan,6551,0.018388994580471718,0.9954888468513496 wye,wye,6552,0.6253051834446587,0.29559701533864535 wye,eks,6553,0.33502063619497235,0.2610167700436856 pan,hat,6554,0.7802269675523349,0.9534940914356625 wye,hat,6555,0.005663846527729333,0.48584311997319796 eks,hat,6556,0.14062017897722112,0.005932662015826984 zee,pan,6557,0.3235867320680704,0.9056759816070373 wye,eks,6558,0.8070546249299714,0.09046129583350693 eks,hat,6559,0.9459853213004996,0.4362855250788259 pan,wye,6560,0.0727664463558585,0.025570241966542673 pan,zee,6561,0.6816547334568862,0.4142699086191578 zee,hat,6562,0.516217374487157,0.6640919516818178 hat,pan,6563,0.05685851331978431,0.6903540720393333 eks,wye,6564,0.7790458055803663,0.6522738145614022 hat,eks,6565,0.8990182808114324,0.971140059395297 eks,zee,6566,0.5308026859083895,0.6453041296190671 eks,hat,6567,0.4215632982227624,0.7633632892500558 hat,hat,6568,0.6015424402169296,0.9136579408737084 eks,zee,6569,0.07024602364065347,0.10258813515051479 hat,zee,6570,0.3550675740695889,0.007910225883702049 zee,pan,6571,0.1632710729418324,0.03017711376568888 eks,pan,6572,0.9270875444507882,0.637374878466062 hat,hat,6573,0.05509535512573205,0.8918234294509011 wye,wye,6574,0.9555552809704153,0.41421382030170906 pan,wye,6575,0.15402188087239954,0.8691716209727222 pan,zee,6576,0.8777708761889912,0.5786474005042914 pan,pan,6577,0.3993469483222466,0.3892398770682076 hat,hat,6578,0.8463232011086974,0.18319003947637869 wye,eks,6579,0.24777952654263558,0.27916343904186647 eks,eks,6580,0.6495626911864495,0.9137400574083774 eks,zee,6581,0.0552357804759368,0.27859129675614414 eks,wye,6582,0.047528529169082234,0.06138863023310337 zee,hat,6583,0.8563606600171147,0.015181563909825058 wye,eks,6584,0.3654798126861838,0.8807563837162635 eks,pan,6585,0.08337736967964804,0.03539849770256276 pan,wye,6586,0.29250342016498887,0.3069941691864093 wye,pan,6587,0.5020409286292801,0.009939761220784549 pan,hat,6588,0.6710775244097316,0.29891597994587726 eks,eks,6589,0.8981260130197878,0.341172072262118 eks,hat,6590,0.036271533325818894,0.34617217226715424 wye,pan,6591,0.42885075582120236,0.9638923170569789 eks,zee,6592,0.9241230700230697,0.7087787442946673 pan,eks,6593,0.5671688159882186,0.2525080171055939 eks,eks,6594,0.09678454503956313,0.9394372732793339 hat,wye,6595,0.2134794663649403,0.1743187405629919 pan,zee,6596,0.7535951031670416,0.3524925624995391 pan,wye,6597,0.7481435165529386,0.6957778649603638 zee,hat,6598,0.6210617717475871,0.6190922851909458 pan,zee,6599,0.18502780307376443,0.34510172711084 eks,hat,6600,0.34120771327893296,0.5437219745072818 zee,zee,6601,0.7435038730289294,0.06225845908254546 zee,eks,6602,0.7661471810537874,0.11870848331729167 zee,eks,6603,0.9777797463621237,0.09720023036402714 pan,hat,6604,0.422595464517281,0.8343132654700024 wye,hat,6605,0.10761057631214699,0.7430467022453479 pan,zee,6606,0.8486989983659791,0.6465788461912306 eks,hat,6607,0.7823679742941769,0.8209287515709784 hat,eks,6608,0.7400121945607447,0.03882673241167289 wye,hat,6609,0.12667845633514874,0.1111690903267013 hat,zee,6610,0.9346894562923037,0.10587701420327944 hat,wye,6611,0.6262544347274932,0.30525530738772355 wye,hat,6612,0.8337403987989883,0.25060970159832463 pan,zee,6613,0.8461001648282795,0.42374948718873573 hat,wye,6614,0.7344391388034486,0.25789180389511723 hat,zee,6615,0.78349042546449,0.44915494280220225 zee,hat,6616,0.22594744492269403,0.16847954740221938 hat,hat,6617,0.1680792215326481,0.7434162302269155 pan,zee,6618,0.034862418341202295,0.7671853898444302 wye,hat,6619,0.48364559195372436,0.5916684625577362 zee,hat,6620,0.49520075702438326,0.1675286620908042 pan,zee,6621,0.92531350722769,0.7331109839366486 zee,wye,6622,0.28966831942694526,0.5726274862219165 eks,pan,6623,0.8441127141759738,0.9967304913754049 wye,hat,6624,0.5591280937962949,0.6627435675727004 eks,wye,6625,0.5105119511152182,0.5062086629041608 zee,hat,6626,0.9866848527389168,0.32213040281236427 zee,pan,6627,0.021852600596809824,0.6287762047371142 wye,zee,6628,0.34899619352678224,0.6762953600092646 eks,wye,6629,0.042973374957347765,0.3504215411530547 pan,hat,6630,0.5318569983484858,0.1981595013443107 hat,zee,6631,0.3770252104819539,0.9521141704617042 zee,hat,6632,0.251621124332819,0.8820641410404748 hat,hat,6633,0.2959658325331481,0.13508551484281162 wye,hat,6634,0.09078570109861495,0.496300237950696 eks,pan,6635,0.1336818909314733,0.4638227719158149 eks,wye,6636,0.07517679920524767,0.4915331134051061 eks,wye,6637,0.3352816408227677,0.8140380433910319 wye,zee,6638,0.591256877732877,0.5915874489265203 zee,zee,6639,0.9221422139699282,0.47360413794657386 eks,eks,6640,0.38457971591828066,0.7022912637900967 eks,zee,6641,0.8781234363470478,0.8882819185534889 hat,pan,6642,0.005715323745672962,0.2447512299512158 eks,zee,6643,0.015710994394110722,0.33183466779705995 wye,wye,6644,0.39250510547900563,0.08289629956063027 eks,hat,6645,0.261494320247025,0.36299917636703616 pan,pan,6646,0.24764166684766364,0.9615131721631346 hat,zee,6647,0.07946351924617867,0.9130106536641815 pan,wye,6648,0.23702724653048457,0.11584533450215717 pan,hat,6649,0.6519700937726137,0.34886054594961424 hat,wye,6650,0.4661494621587131,0.17426048946142003 zee,eks,6651,0.47348695334894386,0.4301930194799014 pan,zee,6652,0.4602949257627642,0.49975689849461613 hat,eks,6653,0.8374977303853919,0.5694625331922527 zee,eks,6654,0.5422936444892872,0.5852344409380648 pan,hat,6655,0.6453370235827801,0.5399548634478539 wye,hat,6656,0.796475923939686,0.010301259372155425 pan,pan,6657,0.7793713291305154,0.43736432518686286 zee,wye,6658,0.026272697033822512,0.8586650268622298 pan,hat,6659,0.8340965806153038,0.9954916059691153 wye,hat,6660,0.797154755771274,0.5736771633024341 wye,zee,6661,0.8188492526845532,0.4439387096787365 eks,zee,6662,0.692659935953495,0.014750331023098417 pan,hat,6663,0.5189752727315453,0.27114682476438556 wye,pan,6664,0.8410807442089315,0.5618783788762672 zee,wye,6665,0.750023688775221,0.8540304746331103 hat,hat,6666,0.6568757213906617,0.023741446240077235 hat,zee,6667,0.5925080941699123,0.26022346139524233 pan,zee,6668,0.5792938319765554,0.549059780249718 pan,pan,6669,0.40578589985803115,0.991882019921512 hat,pan,6670,0.5062335371686814,0.25014874809168464 zee,pan,6671,0.8485250852135324,0.42291127183964006 eks,zee,6672,0.8633240831439754,0.805776035676606 eks,pan,6673,0.5844555116526361,0.9258656111924322 eks,pan,6674,0.07876117692793061,0.6162828639866715 eks,zee,6675,0.6002332633428729,0.02737805769773405 zee,eks,6676,0.7361247716287402,0.4981984945475131 eks,hat,6677,0.07057457921469279,0.27327598383734664 wye,eks,6678,0.13317313653408192,0.833936738251508 zee,pan,6679,0.36757640497694033,0.15666791431421667 pan,wye,6680,0.7228498260423928,0.16029570100550605 zee,wye,6681,0.23575638607482352,0.5267963423656761 wye,wye,6682,0.05864862278509386,0.968278945419499 hat,pan,6683,0.6654580371987767,0.9155359993727842 eks,hat,6684,0.11258817875708949,0.5202664086593939 wye,pan,6685,0.2633941946281759,0.611467934771218 eks,eks,6686,0.8316637163146731,0.3179748046122216 eks,hat,6687,0.4611093872251627,0.4933386211537618 pan,pan,6688,0.13485289624642116,0.30288273557456213 zee,zee,6689,0.9273055357466653,0.054449902661783844 zee,hat,6690,0.5203670639579945,0.7962270767115127 hat,wye,6691,0.6886657290157878,0.9480662991851704 eks,hat,6692,0.09793478921203369,0.45646997283913904 zee,hat,6693,0.6887185377427641,0.2725371105355715 pan,wye,6694,0.08459665725133014,0.6480627030857502 eks,wye,6695,0.9070253492729443,0.8359657479869284 eks,pan,6696,0.5213061786374872,0.9436108956847651 eks,wye,6697,0.38079548707281974,0.7146301348085543 pan,pan,6698,0.24992815869516327,0.7828473032320792 wye,eks,6699,0.4863235665190313,0.024761627522226104 eks,wye,6700,0.11486299826891566,0.7732953412442202 eks,pan,6701,0.11289143979118377,0.5154344501380237 pan,pan,6702,0.09897861729160984,0.1632726180578581 zee,pan,6703,0.6063357396844151,0.9440640953293378 wye,zee,6704,0.9929065501226577,0.9563353213992627 zee,zee,6705,0.6695263366217671,0.9094821746571289 eks,hat,6706,0.6005219270357064,0.7674256844260718 pan,pan,6707,0.7568092546831552,0.30011145741383816 eks,wye,6708,0.3630047546497195,0.3731502489099452 pan,wye,6709,0.6499789136488362,0.9975126213435949 pan,eks,6710,0.9822306336820864,0.9518481162696052 wye,wye,6711,0.6529313233924365,0.16117133810135675 hat,eks,6712,0.0038597545092279306,0.04201771404673427 hat,hat,6713,0.4327034173748717,0.40765932026954144 pan,eks,6714,0.6768196355507363,0.4866501412692976 pan,pan,6715,0.941886673981322,0.6955697200870666 wye,eks,6716,0.7399610338026938,0.7410171019957901 wye,eks,6717,0.867978110755599,0.5614068975084064 eks,hat,6718,0.24524935543537574,0.6137124860108586 zee,pan,6719,0.1581978243465465,0.8467816744572415 eks,zee,6720,0.14299332956774857,0.3448281281418095 zee,hat,6721,0.6375447951528392,0.9688821643544498 zee,wye,6722,0.13464497699175937,0.5072303450060313 wye,pan,6723,0.08857317290220112,0.22813936075330932 wye,zee,6724,0.9180101472288132,0.4772553128152984 eks,zee,6725,0.5257382125487153,0.28145993503907585 hat,wye,6726,0.8681656798259132,0.5422446735924256 hat,hat,6727,0.6760254739914621,0.38899478823906797 wye,hat,6728,0.19864833682412852,0.07849170872015998 wye,eks,6729,0.0725487679182576,0.6718016982732007 zee,pan,6730,0.664189415821601,0.9231485351812634 pan,eks,6731,0.3748183297884402,0.14651294307202578 hat,eks,6732,0.19051425073038974,0.2534461176951027 hat,pan,6733,0.420176119585988,0.5325617521489726 pan,pan,6734,0.1580686510357059,0.5545289683879925 pan,zee,6735,0.34376736360822124,0.8783403362652445 wye,eks,6736,0.1720144618863838,0.07472067325986242 wye,zee,6737,0.7735497202626829,0.39904858822422706 zee,wye,6738,0.6916920100867227,0.15860111481046824 pan,pan,6739,0.7724445003059343,0.10599738910890832 hat,hat,6740,0.1638749831040246,0.33942864618967783 hat,pan,6741,0.5132827171435942,0.30511383816187543 eks,pan,6742,0.7821265240696961,0.5002704992494771 zee,pan,6743,0.5963266420934059,0.29065786430330587 pan,pan,6744,0.3890975093181427,0.13247688252534073 eks,eks,6745,0.17791482999411534,0.49908183588985267 eks,zee,6746,0.9727441527624078,0.1416421024960326 zee,wye,6747,0.723551831416918,0.2807129773827569 eks,hat,6748,0.5710553437496192,0.06737951674524745 pan,wye,6749,0.9967283968435253,0.4586425241398737 zee,eks,6750,0.411125321089135,0.47877014881710245 wye,pan,6751,0.5228421813260895,0.9476995312395788 eks,hat,6752,0.5272144612869077,0.5823689048097198 pan,pan,6753,0.6092847281248764,0.08166906720980371 pan,pan,6754,0.03127627780352893,0.7077713273089731 wye,pan,6755,0.9394158998984187,0.4097422792388996 eks,pan,6756,0.7136237306098985,0.44757595968820907 eks,wye,6757,0.6668899487792558,0.6148196125913775 wye,eks,6758,0.24918942240065567,0.1175614364985561 hat,hat,6759,0.4409476763420297,0.37269928936748364 wye,eks,6760,0.7875787294909694,0.039280684999618454 eks,wye,6761,0.846782848681552,0.7680754064510079 wye,eks,6762,0.6630016803214965,0.35559642495764865 hat,zee,6763,0.8827431489428148,0.8101223666047421 wye,eks,6764,0.8818772544000334,0.5852259091501919 wye,wye,6765,0.6302491045216058,0.35058599080261854 wye,zee,6766,0.8428810279931461,0.06453198742123845 hat,eks,6767,0.41034801950126865,0.7814715051154284 eks,hat,6768,0.807164432383456,0.10155228923520643 wye,zee,6769,0.015938042152491505,0.2467410432381938 zee,wye,6770,0.4647151786207453,0.09586765050852464 zee,wye,6771,0.5282093689650457,0.45570775635349325 pan,wye,6772,0.8587471775202551,0.07946050584311648 wye,pan,6773,0.1251517157188331,0.14006157275798192 wye,zee,6774,0.6171307886636815,0.23263807093903088 zee,eks,6775,0.7107364083112168,0.747744177326698 pan,eks,6776,0.7402366773916875,0.5425967566595283 pan,pan,6777,0.8587338035081189,0.6815723862967287 hat,eks,6778,0.7374724325083976,0.33507894275895755 wye,eks,6779,0.051803530307045764,0.9635968624328757 wye,wye,6780,0.7420078463856731,0.24580232345831476 hat,pan,6781,0.31100740187371934,0.15295409834535245 eks,eks,6782,0.47803669544518634,0.9519657570611978 zee,eks,6783,0.09545968133365756,0.010784899546895543 zee,wye,6784,0.609956046414881,0.6555640945124119 pan,wye,6785,0.5316777127876826,0.6104961546467026 pan,wye,6786,0.25974778249116803,0.08881791270926387 eks,pan,6787,0.5461613458666269,0.40749063143865827 wye,eks,6788,0.59700206673727,0.5092154392509416 eks,hat,6789,0.11384620831197945,0.21498304087430675 zee,eks,6790,0.3259643807042226,0.294440283499696 hat,pan,6791,0.3918842930839752,0.4866508833195289 pan,pan,6792,0.5301735918581785,0.8191767116079914 zee,wye,6793,0.09304197140837533,0.41014621328207224 zee,wye,6794,0.9068197358960509,0.08182204172224206 eks,hat,6795,0.6802118298728432,0.3352065052212123 eks,wye,6796,0.5909399906562114,0.5580035130979556 eks,hat,6797,0.9632745089330987,0.7078513092089819 eks,wye,6798,0.15363778133009276,0.6325423246809744 zee,eks,6799,0.9004852465295646,0.9465220966082961 wye,zee,6800,0.24904470404318169,0.4920531920025397 zee,pan,6801,0.6403589395715946,0.11274127473071038 zee,wye,6802,0.09957278874549647,0.715843577221054 pan,wye,6803,0.22156558120148118,0.6572540721541829 hat,zee,6804,0.7027731517392186,0.3606531856415711 pan,hat,6805,0.8362059152851221,0.9472897492210541 wye,wye,6806,0.46185714288118773,0.9932895877413421 pan,eks,6807,0.5997233937030831,0.005793331189633544 hat,zee,6808,0.8753345579411498,0.04597732362263285 wye,wye,6809,0.8141741575210425,0.16783710466982837 zee,pan,6810,0.15680318230138823,0.9869386425704416 eks,wye,6811,0.7065407352836623,0.8368678138790903 wye,wye,6812,0.4084090484238747,0.9288230265446697 eks,eks,6813,0.22195791037233625,0.46000678721121724 hat,zee,6814,0.06615677821987875,0.9808603644184125 zee,zee,6815,0.5000818809944109,0.771946292891575 wye,pan,6816,0.9209420415686578,0.13984027426134304 hat,wye,6817,0.8610216667264953,0.5382429359595315 wye,hat,6818,0.9490099609383663,0.06552721253446325 eks,pan,6819,0.5703992590220686,0.8637215064086881 hat,zee,6820,0.2416040451020256,0.9776127555858962 zee,hat,6821,0.4912693762402818,0.5204860488656815 hat,eks,6822,0.1966228532052421,0.975043572227354 wye,zee,6823,0.5781208624185773,0.8409446241801248 eks,hat,6824,0.43385175975083057,0.41792395879700195 eks,eks,6825,0.24716919525264047,0.9659819670046521 zee,pan,6826,0.8340499179886257,0.9535536917685269 pan,pan,6827,0.7938211511368373,0.4559826830758338 pan,hat,6828,0.3431841672353826,0.9731740314694275 zee,hat,6829,0.41031480623763106,0.45880274972572666 pan,pan,6830,0.1142681517107742,0.2829811068526855 eks,wye,6831,0.6311471125678166,0.35079658233745936 hat,pan,6832,0.7805431061337192,0.6499156385099167 wye,hat,6833,0.5448291589816822,0.24233292928888261 pan,wye,6834,0.1500861412508071,0.4288594929835393 hat,zee,6835,0.3554971979233431,0.7003527906078075 eks,eks,6836,0.8314643867997237,0.6792470433081391 wye,eks,6837,0.1301888660610001,0.9808398029246085 hat,wye,6838,0.7770652463104809,0.6687521390314989 eks,hat,6839,0.6771345756994601,0.3254097306513094 eks,zee,6840,0.6482286253811516,0.8094333984928788 wye,pan,6841,0.2567333227180485,0.3632000329956243 hat,pan,6842,0.5591318142449471,0.30371083367502205 wye,eks,6843,0.22133780427833827,0.12550147451196636 pan,zee,6844,0.6378228582954686,0.173029586655695 wye,zee,6845,0.18295530986921293,0.5733022672604575 wye,eks,6846,0.6423397517155203,0.8356059098780667 wye,eks,6847,0.5654097817406883,0.4917356814957925 pan,hat,6848,0.13005488453891356,0.36376504302138823 pan,pan,6849,0.7292341394730394,0.9619604141937782 wye,hat,6850,0.9700608965235021,0.3990830943961574 hat,zee,6851,0.626771477414734,0.20044484931996054 hat,hat,6852,0.12907922332721755,0.9897873547381626 zee,hat,6853,0.16224652017611052,0.3566205026903966 pan,pan,6854,0.7113055088893854,0.8848278821601264 hat,zee,6855,0.03040686539549997,0.7759017452917722 hat,pan,6856,0.6726315514891058,0.9389924558403268 hat,zee,6857,0.1411606825265106,0.7112133367607912 wye,wye,6858,0.3955235311928522,0.1986261607297174 wye,pan,6859,0.3196180023166212,0.22620149742138462 eks,wye,6860,0.7484529088599197,0.9458674650980478 hat,eks,6861,0.5333359352881868,0.6705965726039589 eks,pan,6862,0.03969161279974032,0.6429740057666072 pan,wye,6863,0.8290379851119192,0.4133616397651474 hat,eks,6864,0.5485065278651766,0.5820232711323319 pan,zee,6865,0.9369018030633546,0.2730985696260336 eks,wye,6866,0.7518803820253178,0.1629275612174501 zee,wye,6867,0.9102230409548707,0.9019213473878609 pan,zee,6868,0.4631144547528713,0.17716733576639176 hat,eks,6869,0.2542372110197165,0.30416858126881696 pan,wye,6870,0.4253800398968478,0.033574775026327885 eks,eks,6871,0.5063694703652393,0.006032505525179865 wye,eks,6872,0.38036352987366395,0.46731687201043415 wye,eks,6873,0.9798362101131622,0.797643782226173 eks,hat,6874,0.5227336833787608,0.9908448955682759 eks,zee,6875,0.606422651768782,0.914840315532674 pan,hat,6876,0.5129530277212709,0.7790386991794965 hat,eks,6877,0.11459832283361682,0.767333306893435 zee,pan,6878,0.31397281280064293,0.16291546501309395 pan,zee,6879,0.5284562057774806,0.7918033883536163 eks,wye,6880,0.5984387679261401,0.9753479770314387 zee,hat,6881,0.5862597507571483,0.7707420703176064 pan,eks,6882,0.5334986785639318,0.9783513827876675 zee,wye,6883,0.7679069545156161,0.7810806767827133 hat,pan,6884,0.25121382521102964,0.08373878679612079 wye,hat,6885,0.05142094104336947,0.9978267954724354 pan,zee,6886,0.27515151044558905,0.8898719178215098 hat,wye,6887,0.3290836499787756,0.8942355162084987 zee,pan,6888,0.7705250058516857,0.9061349225471161 eks,pan,6889,0.8727519098818294,0.38422445867709476 zee,hat,6890,0.07814285019815281,0.6524720493819127 eks,eks,6891,0.553350512403786,0.21084722161813896 zee,hat,6892,0.307754111293953,0.5638948621786333 zee,zee,6893,0.8600709509023364,0.160849705704027 zee,hat,6894,0.5702891448833654,0.4084412240884401 zee,hat,6895,0.6946417768735003,0.41460355943617566 zee,hat,6896,0.7359164967591003,0.8293086338798401 wye,hat,6897,0.051569812567012985,0.7086891870318104 wye,wye,6898,0.890610959944813,0.42067321781938505 zee,zee,6899,0.5568256158466047,0.15682857405624617 pan,pan,6900,0.46106520857783606,0.8984962995391143 zee,zee,6901,0.15447805903030032,0.3708113295153489 wye,hat,6902,0.2178563623721872,0.5234598648171618 wye,eks,6903,0.22666531785803,0.6725621891005873 hat,wye,6904,0.8610376333440763,0.7594915846085165 zee,pan,6905,0.2561178270791922,0.11749615398320445 hat,zee,6906,0.07026123437146103,0.8267280415036612 wye,zee,6907,0.6367788848968293,0.6394774166453675 wye,zee,6908,0.809527772497878,0.13573629343090665 hat,hat,6909,0.2602273628092978,0.6319094113304579 pan,wye,6910,0.25097439132798516,0.0005109887783484313 zee,zee,6911,0.8474137462624203,0.25704106383367986 zee,eks,6912,0.8996806626412216,0.8543839233593294 pan,zee,6913,0.6587566128742129,0.5632886251369115 eks,pan,6914,0.6621105804379062,0.9655406039971886 eks,hat,6915,0.2111094032818116,0.5848242928084593 zee,hat,6916,0.984302853476379,0.3318129327554279 wye,eks,6917,0.4116075902695022,0.28661075899283883 hat,zee,6918,0.9078126587488162,0.825042025154357 hat,wye,6919,0.6271510270374615,0.2788131116617252 eks,pan,6920,0.5871441514609353,0.8959550649206074 zee,wye,6921,0.5169699337780084,0.8908217878266501 hat,zee,6922,0.26862211703298666,0.7329656688559485 wye,hat,6923,0.9326808746284245,0.1899255490512184 hat,zee,6924,0.18898941655772628,0.41248127061100026 eks,eks,6925,0.013945565190257692,0.5578850256771833 eks,eks,6926,0.48658959418573866,0.12700817464144343 pan,pan,6927,0.2148229483341345,0.142698457109815 wye,wye,6928,0.9723961772197747,0.9337468605908721 pan,hat,6929,0.39047545698773434,0.1014408675739632 eks,zee,6930,0.5526320529536692,0.6589359191373861 zee,pan,6931,0.9169134272880114,0.45914482802505263 wye,eks,6932,0.335776156098611,0.5748799322742809 pan,zee,6933,0.736088726276053,0.9511504821090352 pan,hat,6934,0.0735762788752764,0.0008249210316072508 hat,hat,6935,0.8448124844892154,0.7472136644468284 wye,zee,6936,0.8005403193787164,0.00364938998415798 eks,wye,6937,0.21622217154383783,0.693609603948259 pan,eks,6938,0.3920264992178498,0.7658079570315041 pan,pan,6939,0.9322271691157334,0.5636509019339512 pan,wye,6940,0.7428995263807269,0.28179583615338055 hat,eks,6941,0.7647380306778612,0.5588346481843296 eks,zee,6942,0.43808251265668563,0.7626481299623035 wye,pan,6943,0.9077501006486136,0.15938270549685063 zee,hat,6944,0.30931352961195646,0.7930984054369467 zee,zee,6945,0.7497323025761014,0.19551835687807828 hat,eks,6946,0.06859192488355459,0.18197505910402123 pan,eks,6947,0.6992727384765998,0.29778601894865464 pan,hat,6948,0.6806028930853153,0.5337351071127955 wye,hat,6949,0.8798782820732383,0.08851766994161492 eks,wye,6950,0.5484166834064047,0.5444329351784222 pan,hat,6951,0.26580629226731123,0.6717468181544698 wye,hat,6952,0.3046906425663285,0.9311855954257118 wye,hat,6953,0.0716884908750034,0.7032897899381292 zee,pan,6954,0.19883557252817674,0.8081642410948915 zee,wye,6955,0.2873302616631028,0.8940998424635924 pan,wye,6956,0.05509311089172042,0.02187042391982985 zee,wye,6957,0.6879906058837991,0.12542105731118525 hat,wye,6958,0.18834573262459287,0.5850606930814083 eks,pan,6959,0.11939644968502994,0.5520356552775578 wye,pan,6960,0.3153717815038891,0.09047586220595472 zee,wye,6961,0.6007313242961704,0.6613290251670858 pan,zee,6962,0.7601533500363858,0.8925522323934668 wye,pan,6963,0.48448541281210233,0.41562920864135944 hat,eks,6964,0.4992605837600408,0.43605518279149746 wye,hat,6965,0.45740161659615763,0.04534932831025773 hat,pan,6966,0.7533879705727782,0.5865175721970042 eks,wye,6967,0.9773513257418902,0.2380306718479056 zee,zee,6968,0.6712412554088817,0.2720254276549653 wye,wye,6969,0.31490517543879204,0.21016765203059373 hat,zee,6970,0.797989047174311,0.2162177019841508 hat,eks,6971,0.05477486899188533,0.5389943813219003 wye,wye,6972,0.4404514385321253,0.7283283568308369 eks,zee,6973,0.8858598587998294,0.6368695546608352 zee,wye,6974,0.989576281733764,0.6583358951055004 eks,pan,6975,0.1301868947541912,0.9369685664682424 wye,wye,6976,0.3024970191010684,0.2093604064761977 zee,pan,6977,0.7855530401666628,0.9857367912810565 pan,hat,6978,0.9643587082677965,0.3525023561742381 zee,hat,6979,0.236940011648326,0.43182187533436656 zee,eks,6980,0.7036947557005062,0.8967163177168612 zee,pan,6981,0.7258773601437264,0.43569247036733716 pan,eks,6982,0.0009579203969094507,0.4374451455672883 pan,eks,6983,0.414932981812524,0.43196390781557925 eks,eks,6984,0.9329999431393118,0.17135830698518684 pan,eks,6985,0.2597251524181662,0.17875541966558117 wye,pan,6986,0.397846421602455,0.061580742680189204 eks,hat,6987,0.10959780180161571,0.8943020336797796 zee,zee,6988,0.9430266721644799,0.5094104013079503 eks,hat,6989,0.3313418699976328,0.33567997892328394 eks,zee,6990,0.5148133498496276,0.6918563081083983 hat,wye,6991,0.25547073172247026,0.20184384726111237 pan,pan,6992,0.03213631773319936,0.554769673785168 wye,wye,6993,0.8254022878057393,0.633291096076743 pan,eks,6994,0.3537340849132855,0.8841969050289067 eks,pan,6995,0.09806828374128973,0.6430042633610615 wye,zee,6996,0.5747272683926599,0.48989582464308623 pan,zee,6997,0.7983517224073071,0.5557697277179173 zee,zee,6998,0.7651332678935355,0.1986723127864063 wye,wye,6999,0.31230656247460964,0.7709719364206021 hat,wye,7000,0.44889249877909887,0.9296219735657666 pan,hat,7001,0.1931728782354155,0.9434264276805716 hat,wye,7002,0.41061585650926835,0.01643773647124569 zee,wye,7003,0.5815308271025876,0.07558886006933907 hat,hat,7004,0.5167987887837867,0.6125153714308963 hat,zee,7005,0.17030551513160364,0.6743869951544157 zee,eks,7006,0.9635379226473363,0.29850368521754844 pan,eks,7007,0.20071792427547297,0.8474599823946072 wye,wye,7008,0.8591581165484377,0.3991724887525355 zee,pan,7009,0.3868986728643612,0.32414353523303663 hat,eks,7010,0.6030024004661663,0.3056681212721363 eks,pan,7011,0.08663635855557505,0.8292216812769441 pan,wye,7012,0.718361521407771,0.5051204438264707 pan,wye,7013,0.277094876326926,0.602002918971647 wye,eks,7014,0.7012074385988786,0.5007374216681656 zee,pan,7015,0.5613769792191474,0.2784096473095522 zee,wye,7016,0.9594027753815709,0.21779948075500577 eks,wye,7017,0.5420542017862827,0.36305123317879384 zee,hat,7018,0.32805123696394034,0.5124093456505748 wye,eks,7019,0.3036229968730817,0.23518690587775104 zee,eks,7020,0.4316289204904483,0.08091854356676809 hat,zee,7021,0.863877436043872,0.5856682390415403 zee,hat,7022,0.2071927381626798,0.5309301582209865 pan,eks,7023,0.29791421670042273,0.07470613128293369 eks,wye,7024,0.8917532472992171,0.14489189839111738 hat,pan,7025,0.37840242944286007,0.5252842371930347 pan,zee,7026,0.5129987522412781,0.6196138088300045 zee,wye,7027,0.23097612498471853,0.86560943277181 zee,eks,7028,0.5584826667497241,0.7683156302547838 hat,pan,7029,0.9655789508856257,0.5847058626759788 zee,pan,7030,0.6277332467942169,0.6792611974173626 pan,wye,7031,0.6131961433966792,0.687915924439632 pan,hat,7032,0.9325179960861075,0.9058746805470116 zee,wye,7033,0.08845711389601285,0.6556664190853554 wye,wye,7034,0.6178564629606926,0.257518710051613 pan,pan,7035,0.6283536854585481,0.2469987747711726 wye,pan,7036,0.7418713116937065,0.21710781972748616 pan,zee,7037,0.33589607439034086,0.020535990195571174 zee,zee,7038,0.2760987429128404,0.4680732030302005 hat,wye,7039,0.7395205341627435,0.7057475465708692 eks,zee,7040,0.6082940902168954,0.48538987636118824 wye,hat,7041,0.20266698834916153,0.5813828944396172 pan,zee,7042,0.837647351501191,0.08974718944866877 zee,eks,7043,0.9227470147480153,0.7805110973249272 eks,hat,7044,0.9125698654022647,0.6003269419507505 pan,pan,7045,0.9149867225420508,0.8482623017705537 zee,eks,7046,0.27001776810888767,0.5884950099164382 zee,hat,7047,0.3821711240746809,0.20003488070361253 wye,zee,7048,0.20803556414051616,0.2099912026909062 hat,wye,7049,0.670378278494791,0.7076636735945074 hat,zee,7050,0.23723928107944892,0.14022716241391253 hat,hat,7051,0.08564555647369987,0.8035765944470057 pan,pan,7052,0.2551692350228507,0.30169763443298714 hat,hat,7053,0.5800900713331231,0.1120629753999538 wye,wye,7054,0.8075288799285653,0.40080406376291855 pan,zee,7055,0.3237065988296146,0.16406274536872145 hat,zee,7056,0.11778152617272919,0.6479030514858882 zee,hat,7057,0.3051810429960812,0.7908669168132235 eks,zee,7058,0.656344016455348,0.36896554924499647 eks,hat,7059,0.920076220476711,0.5876972502303767 hat,eks,7060,0.9346394642794167,0.6814288404781228 eks,zee,7061,0.5738169055546608,0.21575746069772594 pan,hat,7062,0.4847233858259188,0.7657727011149124 pan,wye,7063,0.39952219916088616,0.40591491856978035 hat,zee,7064,0.14067685725223567,0.3092246716986138 eks,eks,7065,0.8605698057139388,0.32299577521005374 wye,pan,7066,0.8824319081192505,0.35485300016641663 eks,eks,7067,0.6109777816801221,0.24224058206368682 pan,wye,7068,0.4549499403459556,0.49621131228697424 eks,pan,7069,0.9886201663452385,0.9412530719900734 wye,hat,7070,0.665041142898201,0.9595343437808125 eks,eks,7071,0.8618148405551886,0.3478823253266865 pan,zee,7072,0.2724259823227272,0.30192794453375993 pan,wye,7073,0.6028342052246591,0.07993824024604124 eks,eks,7074,0.8193690697522501,0.503433259768719 hat,eks,7075,0.4081232497868382,0.44918917218867327 pan,hat,7076,0.39435745153096624,0.2533507793160499 zee,eks,7077,0.9030855046114618,0.7353402992136046 zee,zee,7078,0.28428013807040586,0.3777563622186406 zee,wye,7079,0.27996765719480765,0.873411216265053 zee,wye,7080,0.4095476180955867,0.9089358780031519 wye,pan,7081,0.5027581392155828,0.5918516944292527 eks,wye,7082,0.17393135812804061,0.8723860687774272 wye,pan,7083,0.6981142504634895,0.5779284385442213 eks,hat,7084,0.2854516522673507,0.20310209686600733 hat,zee,7085,0.010890023772322621,0.6157830695335651 hat,zee,7086,0.9886292059134817,0.7404507111518657 hat,pan,7087,0.8819873483332783,0.4236719882838914 eks,zee,7088,0.6374047421710877,0.16806648423408932 eks,zee,7089,0.2711607560909379,0.24024418535758385 zee,pan,7090,0.23901675556827195,0.9642697268066455 hat,eks,7091,0.7757377070780304,0.9407578395112463 eks,pan,7092,0.260858501720898,0.6591425472718141 pan,hat,7093,0.6397441933292296,0.9829200046878069 eks,wye,7094,0.44868457406229934,0.8112443348137468 eks,wye,7095,0.0906962202117284,0.591681350241042 wye,pan,7096,0.07890849487936957,0.41485920875555027 wye,zee,7097,0.8196751485720796,0.9182400853440643 wye,pan,7098,0.06668588398001474,0.26172812514471555 eks,hat,7099,0.22008401563656388,0.04305085018273014 pan,pan,7100,0.9285737504002782,0.009817451138142141 hat,eks,7101,0.981509594449636,0.3512738134950749 hat,hat,7102,0.014273713288732837,0.7356741638793522 wye,pan,7103,0.4829108252034583,0.6462618208312636 eks,pan,7104,0.2936586449378221,0.5697398551523063 zee,hat,7105,0.2980064088882294,0.3531576463065931 zee,zee,7106,0.9884822924298222,0.9742451923102192 pan,wye,7107,0.2998044704471554,0.2269111558178346 wye,eks,7108,0.2586819630109063,0.7581262202061657 eks,zee,7109,0.6665600019130787,0.5478452197045156 zee,pan,7110,0.8179518622169052,0.44278658627392875 pan,hat,7111,0.06963315314613838,0.11691071591581381 wye,wye,7112,0.5792946910659483,0.7652424387264126 eks,pan,7113,0.2918757972941147,0.09568558582017328 eks,hat,7114,0.9289422804383715,0.0973877277219467 zee,hat,7115,0.6512838863936804,0.2516748002564705 zee,eks,7116,0.7404888117639189,0.7975704275356439 zee,wye,7117,0.3032123219266547,0.408039844976006 hat,eks,7118,0.34505031276366815,0.8337966400074031 wye,hat,7119,0.6315033401415422,0.9740617533706384 pan,wye,7120,0.5205183279285498,0.6711794774673148 zee,eks,7121,0.6246582352065935,0.26995458439418407 eks,eks,7122,0.7551924972639424,0.43086081813515076 pan,wye,7123,0.1635996059631727,0.9577567705724599 zee,wye,7124,0.5036489463705721,0.3876971054515429 pan,zee,7125,0.2551365895416149,0.28047087188514475 eks,pan,7126,0.7428006686642148,0.09900719636423816 pan,hat,7127,0.30368095354356406,0.2597236612256202 hat,hat,7128,0.6279447467606394,0.4225543625896867 wye,wye,7129,0.5482218790981049,0.2894225177955031 pan,pan,7130,0.5209682344960287,0.3459917950310737 pan,zee,7131,0.19933196272377474,0.33283266063310113 pan,wye,7132,0.5712931905065656,0.7126877408626767 wye,hat,7133,0.8722812709831377,0.7402713360198966 zee,zee,7134,0.8239370005383643,0.8999946232295659 hat,hat,7135,0.7884238740570607,0.502745899378346 zee,eks,7136,0.1151808584625903,0.09114185305034295 hat,pan,7137,0.2542302739150816,0.10795409059370309 hat,wye,7138,0.2410727132014231,0.4676445777847451 hat,pan,7139,0.34808712588524904,0.8828628930362004 zee,wye,7140,0.1974763738933888,0.05233731805135977 hat,zee,7141,0.5122141330634649,0.9464876262232287 pan,hat,7142,0.5253509732767064,0.8670318755725022 wye,hat,7143,0.21543094473021618,0.04601417423771059 zee,hat,7144,0.6991820521352337,0.729482196220355 eks,pan,7145,0.5837334896130115,0.3007149582733508 zee,pan,7146,0.9971541764709625,0.892947440752753 pan,zee,7147,0.04585989364324272,0.09848374190945741 zee,zee,7148,0.08359037777595768,0.18397726583989749 zee,hat,7149,0.7990351121845923,0.883654825281865 pan,eks,7150,0.06880418014853351,0.774850869582918 hat,pan,7151,0.7525794901534716,0.2866308656913933 hat,hat,7152,0.9710254927009822,0.2710815765754221 wye,pan,7153,0.6258726536948953,0.7945230748164691 wye,wye,7154,0.0785227436298842,0.5694736271045654 zee,eks,7155,0.33789283812701887,0.4922604374749663 pan,eks,7156,0.8443027153248559,0.6768057967242282 zee,zee,7157,0.5562106087670207,0.03587821373906863 pan,pan,7158,0.004511539489729266,0.7768848294530629 eks,wye,7159,0.3902007098058078,0.1663592901985712 wye,pan,7160,0.4066344147201285,0.9578296410706988 hat,hat,7161,0.05527312148960439,0.40628388765166956 pan,zee,7162,0.762250186313408,0.10837770076532993 wye,wye,7163,0.4555929409217334,0.46397391790537257 eks,pan,7164,0.5336092896068227,0.6717538742842986 zee,hat,7165,0.8455323374846566,0.0849930980915663 pan,zee,7166,0.4778764959737758,0.838605100252609 zee,eks,7167,0.10058553136359771,0.8527719709495678 pan,zee,7168,0.05484316817552892,0.17151702310481431 hat,wye,7169,0.20795586378052433,0.7648155272308214 eks,pan,7170,0.37156761781681846,0.8390576537440628 pan,pan,7171,0.11014202080800839,0.7384835945172147 pan,eks,7172,0.6981612913907711,0.05072492614651758 hat,wye,7173,0.18576991003719212,0.32538288858474795 wye,hat,7174,0.4517242075190575,0.7384551615771798 hat,eks,7175,0.8596787945183175,0.9376543180536796 wye,pan,7176,0.6724292506877466,0.8820892101229925 eks,wye,7177,0.5749745903887773,0.4151184059091343 wye,pan,7178,0.4069058311850614,0.8985915120635419 pan,pan,7179,0.34025617153772425,0.7362436479716264 zee,wye,7180,0.9735765701999921,0.3536158455578553 pan,hat,7181,0.33202126409882426,0.6393977150538188 wye,eks,7182,0.8209372270884935,0.22933427059194011 pan,wye,7183,0.7589482772018452,0.34920417666135495 pan,zee,7184,0.4443660624344251,0.6792046483658297 eks,hat,7185,0.16457422522306786,0.3254688160534126 pan,pan,7186,0.09026915761362286,0.023448958188875713 hat,wye,7187,0.4560687123084549,0.4064263428720335 wye,pan,7188,0.4956424303944521,0.2862948969999991 zee,zee,7189,0.6872200803930903,0.33825858578605605 wye,zee,7190,0.7091610020939861,0.11636512757451645 wye,eks,7191,0.40387119430799534,0.2671989768915307 hat,zee,7192,0.04140473031764258,0.12247713585949505 wye,eks,7193,0.7904392489862636,0.3255246590384645 pan,pan,7194,0.8605715825783998,0.30866294108908654 eks,pan,7195,0.3063063420456562,0.8778236978497203 pan,hat,7196,0.47951019710347087,0.7687346833879765 pan,pan,7197,0.571144729887671,0.3556625598706247 eks,eks,7198,0.21945638426831482,0.02350640610667476 hat,wye,7199,0.5813406427006567,0.3332804684828835 pan,zee,7200,0.905315344809699,0.1528899922373057 wye,pan,7201,0.9400232704650787,0.6360498242547704 wye,zee,7202,0.2595277149011631,0.8540466345462062 zee,zee,7203,0.6196913167679251,0.7693669742661702 pan,eks,7204,0.7025276205611544,0.5171960435307702 eks,eks,7205,0.8476919005501825,0.33999828204602445 hat,wye,7206,0.2484899687204748,0.8552754879346082 eks,wye,7207,0.5111288494558484,0.31828385178170016 wye,pan,7208,0.49730390768352073,0.040387788389040336 wye,zee,7209,0.2990551204662385,0.24766816596397379 wye,pan,7210,0.05433220416409046,0.7683173788573371 hat,zee,7211,0.5479599732793081,0.7309237182718691 hat,hat,7212,0.11334324090228143,0.4449813414016559 hat,hat,7213,0.17855300168610388,0.5777528971707431 eks,zee,7214,0.8432742398345661,0.19519802350924498 zee,eks,7215,0.027726411224188063,0.6253184802891883 wye,hat,7216,0.5252986145121908,0.9054934316514225 hat,pan,7217,0.18576029964130547,0.9066585641073414 hat,pan,7218,0.2996125766631278,0.4976607588511254 zee,zee,7219,0.6269054706790941,0.7732047241313896 zee,hat,7220,0.9218855933251531,0.9884286346489324 zee,zee,7221,0.8961118412742498,0.5527678285308364 pan,hat,7222,0.06750577252048573,0.45278767440580836 pan,zee,7223,0.5422551743173196,0.48196997280820075 eks,eks,7224,0.826281664166814,0.7784066577349854 eks,pan,7225,0.21428073770333067,0.7357536006823585 zee,hat,7226,0.3525785753907552,0.8580740440780245 eks,eks,7227,0.5839736448682071,0.8252023673907429 eks,hat,7228,0.9933636751222338,0.20481742503678568 eks,pan,7229,0.04398478871595091,0.7794740728564747 eks,pan,7230,0.6437767672345736,0.880694505581993 hat,eks,7231,0.8525023870231172,0.8371410685258226 eks,zee,7232,0.8665889356718274,0.727601457029631 pan,pan,7233,0.16532133170819407,0.6129115845589822 eks,eks,7234,0.24279014390270426,0.2483565874207584 hat,pan,7235,0.8801345341211195,0.9358790870593957 pan,wye,7236,0.27447738011116474,0.004545127562776141 zee,zee,7237,0.4441192412902708,0.12641379815166043 zee,wye,7238,0.08465889757356693,0.5167264969332714 zee,hat,7239,0.37409052113954255,0.6558372047842991 zee,wye,7240,0.08769157759149027,0.4682424277651016 wye,pan,7241,0.16048892749077326,0.8088730543110708 wye,hat,7242,0.7810183175877844,0.11112670210527198 wye,pan,7243,0.23457496179942383,0.25480860225867064 pan,wye,7244,0.33418676914584544,0.12547224222781395 eks,hat,7245,0.15591846641848217,0.06738895282990076 hat,wye,7246,0.4083519225238026,0.9205841027663143 zee,hat,7247,0.995551497542232,0.20626255566312157 wye,pan,7248,0.03722910071622887,0.666426594713559 wye,eks,7249,0.3336400413872498,0.9930112481730917 zee,zee,7250,0.4205283537525053,0.017542491951736294 wye,zee,7251,0.03690845523228947,0.3207859173250125 wye,eks,7252,0.5180151961590858,0.18663669340288258 pan,wye,7253,0.09014357778603788,0.7770581018902949 eks,hat,7254,0.08477920149342666,0.8536609969299198 pan,hat,7255,0.005529616019901207,0.050405481126457485 hat,zee,7256,0.19429528950321628,0.2713422241532205 wye,zee,7257,0.030816159583946456,0.26057323500261886 pan,pan,7258,0.4996723711675731,0.861409653660949 hat,wye,7259,0.6482012699497162,0.25150090033880335 wye,hat,7260,0.3722574884303841,0.9096204632963236 eks,pan,7261,0.5956552210056466,0.6731134108078785 eks,wye,7262,0.6111098139614397,0.15517709802904156 wye,zee,7263,0.7738670394914589,0.7776575420356829 zee,pan,7264,0.3693607630046949,0.5055013090983799 eks,pan,7265,0.9551577221486072,0.29383627386535827 pan,zee,7266,0.29284541534943886,0.302297804948473 eks,wye,7267,0.7682692325496115,0.10545189803719768 hat,zee,7268,0.5187716634369838,0.4578907340058458 eks,wye,7269,0.34228005996384936,0.7962044127378957 wye,pan,7270,0.6526947310324253,0.22517849223509379 wye,eks,7271,0.3000326333821377,0.5981658390236453 wye,zee,7272,0.3433404141399181,0.9542907816350394 hat,wye,7273,0.14732182908248415,0.15766209607019577 zee,hat,7274,0.12912926442853778,0.4373967289737535 zee,pan,7275,0.8310286639738583,0.23874521098835433 zee,hat,7276,0.5541611116464608,0.11389221370130065 wye,pan,7277,0.7078871914506895,0.33655897282671654 pan,wye,7278,0.8504546169336947,0.8944056123200194 wye,eks,7279,0.27325948155789803,0.9780751132127382 hat,wye,7280,0.8630577882216759,0.3401148862570683 pan,pan,7281,0.8126567917280336,0.8074968827433902 zee,eks,7282,0.7505245483102981,0.17388594473052665 wye,wye,7283,0.7932471858732224,0.799314077275886 zee,pan,7284,0.9156868185576506,0.8532083341105031 pan,eks,7285,0.6782016255263672,0.6826685678107132 zee,wye,7286,0.7477781751613256,0.47420402963502417 zee,hat,7287,0.1793121692955475,0.15066781644968152 hat,eks,7288,0.47506460337294665,0.6344735780644974 pan,pan,7289,0.5648161072496519,0.5225373033056284 zee,wye,7290,0.07866679545878696,0.8281670295675017 zee,hat,7291,0.4416432361854393,0.4815754525534033 pan,pan,7292,0.7818043909150125,0.8301584593837131 eks,zee,7293,0.15209082772656235,0.8094992950290192 wye,hat,7294,0.7071475331155577,0.463983028008944 wye,zee,7295,0.9580523714631302,0.44770394756077214 wye,hat,7296,0.06387677434814132,0.4016686557239688 zee,wye,7297,0.9096641147013969,0.3198678677416569 zee,wye,7298,0.3398026136728608,0.796415365588005 wye,pan,7299,0.1271157644108325,0.8215802283737754 zee,pan,7300,0.7996204817268934,0.16695600702508173 eks,zee,7301,0.24231768726605574,0.36168589987653654 pan,wye,7302,0.9493279693158848,0.9320553760871662 pan,pan,7303,0.9626006756922457,0.3454344654908674 zee,pan,7304,0.6353829183388288,0.7926738022346027 pan,hat,7305,0.5874095716972196,0.7353421801026144 eks,wye,7306,0.5141888431558487,0.25073225691473777 wye,eks,7307,0.2143162664337741,0.8580034716749112 hat,zee,7308,0.13221833833166552,0.9172258570287248 wye,wye,7309,0.9524036783598119,0.012525060888625927 hat,pan,7310,0.06459215228779991,0.7528579464907585 pan,eks,7311,0.5502139795389652,0.49591789494048777 wye,hat,7312,0.23122127585115393,0.34710066461942035 hat,hat,7313,0.04440593404771587,0.37885696420400083 pan,hat,7314,0.11943754790139005,0.36148458916104687 hat,wye,7315,0.762849509523023,0.5445776666095938 wye,hat,7316,0.49431226962351105,0.20765083254084993 pan,eks,7317,0.9283829868445185,0.053320653955502006 zee,wye,7318,0.9779192041341719,0.45913392788037144 eks,wye,7319,0.7931636018175485,0.6139112136646976 hat,hat,7320,0.39178985057319626,0.23236564180125518 wye,wye,7321,0.35700901065371815,0.28320908292909874 pan,eks,7322,0.23434957604819473,0.051931896713069414 wye,wye,7323,0.7111896724396426,0.3207922792041831 wye,zee,7324,0.46590974940880736,0.38852539050053736 hat,zee,7325,0.923332148981879,0.24711153523263418 hat,zee,7326,0.6477850327935991,0.166272703335551 wye,wye,7327,0.017676716675338322,0.9778332141214291 hat,hat,7328,0.5360492386373142,0.6804516078113585 wye,eks,7329,0.5479278609035699,0.6395949329290961 hat,pan,7330,0.30931842449078206,0.9848451565724043 eks,hat,7331,0.788081413287463,0.8378548167327706 eks,eks,7332,0.5489481141023792,0.1898445505274633 wye,eks,7333,0.23109457565661884,0.175253032327905 eks,eks,7334,0.5399986455657582,0.8158128369790969 pan,wye,7335,0.2567672400806126,0.2775523933001237 eks,zee,7336,0.29854063622113325,0.6880575576316322 pan,pan,7337,0.03345300533476314,0.05011040908993403 zee,hat,7338,0.7240024979256982,0.4923630478351134 eks,wye,7339,0.7149884797875254,0.5780977956467382 wye,hat,7340,0.3027659530127267,0.8901256310015528 wye,wye,7341,0.9095596401410326,0.16616223702173794 pan,eks,7342,0.32087613651983915,0.33882735674733244 pan,hat,7343,0.9718021240386961,0.8360987881082459 pan,zee,7344,0.7960579191229258,0.8642875358044435 wye,zee,7345,0.97794870050786,0.3755010163868553 hat,eks,7346,0.9392077077039757,0.869513883344899 zee,pan,7347,0.5598151935312621,0.9371568081140333 hat,pan,7348,0.5273520540957175,0.9743536695566267 zee,pan,7349,0.9798614924191777,0.661939043406021 wye,pan,7350,0.22127788655478875,0.8938285029323859 pan,hat,7351,0.5233972953461609,0.1299030288348728 wye,wye,7352,0.0924480571001528,0.30109533355539897 pan,wye,7353,0.7001693740890388,0.7313365122301939 zee,wye,7354,0.5619890666183939,0.23528736664694083 zee,eks,7355,0.8301624729023548,0.0615273482256774 pan,hat,7356,0.5045510100638597,0.23513093423261755 zee,zee,7357,0.37772059495645105,0.04160047639165676 eks,pan,7358,0.20000198658880186,0.2727601315820374 zee,zee,7359,0.8789933703062237,0.787471191499597 zee,hat,7360,0.9083001482768445,0.3841688843397407 zee,hat,7361,0.03789515978860469,0.08906319847440858 zee,pan,7362,0.37791224094768805,0.035794629838716285 eks,eks,7363,0.1789979975700029,0.9323731265959059 hat,eks,7364,0.7057751089174641,0.3218193615346736 eks,wye,7365,0.4037294740938493,0.827514532289803 zee,pan,7366,0.7326832606913403,0.988312668973181 pan,wye,7367,0.050978150403878986,0.6397760763553187 eks,hat,7368,0.38478100718255326,0.5987722480044325 zee,wye,7369,0.12183474068456046,0.935692190729219 zee,zee,7370,0.7741716706994631,0.8036145555008443 zee,hat,7371,0.4507985912029725,0.3077642021954843 pan,pan,7372,0.7704918547993125,0.9834514670413425 eks,eks,7373,0.4293751563574991,0.321596575054345 wye,zee,7374,0.551952261755126,0.5902774680877885 pan,wye,7375,0.42955545463755385,0.9934718779427805 eks,eks,7376,0.3445135978821475,0.6156808849126956 pan,eks,7377,0.34789754809053564,0.6075272228064196 hat,pan,7378,0.10026227651385622,0.04421109516628252 hat,eks,7379,0.24988599675183953,0.5075999788186907 hat,hat,7380,0.27192573832264333,0.8068429680053445 pan,zee,7381,0.9697283975533304,0.28635495669422684 hat,wye,7382,0.8019809972589643,0.005365368085154643 pan,wye,7383,0.8494039628427111,0.8499184581272037 pan,pan,7384,0.147877939581611,0.3802766658466368 hat,wye,7385,0.6891675084646794,0.21966643420211807 eks,wye,7386,0.06869104618996669,0.9055981024968931 hat,pan,7387,0.04127341734955359,0.5872280653454409 zee,pan,7388,0.29756214466232356,0.9313351005781804 eks,pan,7389,0.2598351155486429,0.6198880821789519 wye,eks,7390,0.6980368648478577,0.3472713980791412 pan,eks,7391,0.4877630118621793,0.2703969185758941 eks,zee,7392,0.47928188791181825,0.4019006064467472 zee,pan,7393,0.32975449059840245,0.7244778074880798 pan,zee,7394,0.7577687447939129,0.8939904227639627 zee,wye,7395,0.5803000300289758,0.4776490273972346 hat,eks,7396,0.15220840867031593,0.8065677095962809 pan,eks,7397,0.7805268684800922,0.40839477314823913 zee,eks,7398,0.6991548640255947,0.30943844921705455 zee,eks,7399,0.9620019895205045,0.04121066152708375 wye,pan,7400,0.6413551187597212,0.8585006139152228 pan,zee,7401,0.7038547368085565,0.833002029439337 wye,eks,7402,0.8512179412309284,0.11635538096923825 eks,hat,7403,0.8360641078807856,0.9076959476149424 wye,zee,7404,0.8798482207846597,0.980841539034285 pan,eks,7405,0.6745743258945766,0.7867105500751859 hat,hat,7406,0.563984894776307,0.22186356075852087 zee,hat,7407,0.21870541414543287,0.5381352837603439 hat,wye,7408,0.9529062878494667,0.7852866253859588 eks,pan,7409,0.7981122558329,0.6186019487821701 zee,eks,7410,0.28326065224069574,0.9300177238169315 eks,wye,7411,0.9969817321900778,0.46830380409504446 pan,wye,7412,0.6977929179546933,0.5888437383863911 zee,zee,7413,0.5789877301693207,0.21648842981409888 wye,hat,7414,0.8736572008864342,0.5573924644600762 wye,wye,7415,0.30171840067278866,0.3419586030343307 pan,wye,7416,0.2585223323598659,0.3463024564198399 hat,eks,7417,0.3785664786635482,0.26018775063772737 wye,eks,7418,0.006639005627157579,0.5729637583197084 hat,hat,7419,0.2273259043408271,0.5563529993801493 wye,pan,7420,0.637403401738078,0.8374737656276083 zee,zee,7421,0.27260075448645904,0.40666948184724905 wye,wye,7422,0.23158788759518745,0.2878292702486247 wye,hat,7423,0.65748564141991,0.991048470406043 hat,hat,7424,0.10089391588727137,0.7817715852844856 zee,eks,7425,0.8261837120346296,0.06964125640579655 pan,pan,7426,0.07638817370818407,0.556879044634861 pan,pan,7427,0.26915621186308547,0.9818876276497374 hat,hat,7428,0.39688244993813704,0.9331868149522005 pan,hat,7429,0.9357825556156103,0.4134876666224273 wye,eks,7430,0.6505309265233103,0.08052144928451366 eks,hat,7431,0.42045666700455464,0.1678609743716658 pan,wye,7432,0.7229621008200041,0.31447862305937724 wye,pan,7433,0.1438112738288524,0.9525096683562059 wye,zee,7434,0.1904070234884352,0.933784711872319 wye,eks,7435,0.19859477051626107,0.9333014786736845 zee,hat,7436,0.05768708104754017,0.6575915330429977 wye,pan,7437,0.9282262872069705,0.6360386793524121 pan,wye,7438,0.14231386871466345,0.4954949252707901 hat,zee,7439,0.3598352944100318,0.24656543972679557 eks,hat,7440,0.25828687688130847,0.842768437062058 wye,wye,7441,0.48729002348282646,0.9161401465437051 zee,wye,7442,0.6608160620662386,0.5974595563363765 hat,wye,7443,0.25082061911407305,0.21021328972399989 pan,zee,7444,0.3397136877438124,0.2183579843750636 pan,wye,7445,0.08633640516764107,0.8061389023613882 zee,wye,7446,0.48989555445269983,0.4667529417156665 wye,pan,7447,0.12261193061376408,0.799087216626477 pan,pan,7448,0.2640997209164132,0.21566634091032355 wye,pan,7449,0.8358772139168086,0.5804404380403491 hat,hat,7450,0.999952670371898,0.02385920300033073 wye,eks,7451,0.8347006203497817,0.9777231624470996 eks,eks,7452,0.9039050523436697,0.2854652762069536 eks,pan,7453,0.16650506760957007,0.5597579813350784 pan,hat,7454,0.5194182222148909,0.7430038847189214 hat,eks,7455,0.5414111357368178,0.20940952316770656 pan,zee,7456,0.9804921267993308,0.016246164251253248 wye,zee,7457,0.33342706113360265,0.14501891527781052 eks,eks,7458,0.5811068614884891,0.664734231079448 pan,eks,7459,0.2226239493776776,0.5135994340181766 pan,pan,7460,0.35138591198463265,0.21244588228015993 hat,zee,7461,0.7384848550717226,0.24830667641463977 pan,pan,7462,0.6618404094367076,0.8219415456549093 wye,hat,7463,0.6072686833968383,0.7123986333317 pan,pan,7464,0.20391564584771982,0.016010952251377497 wye,pan,7465,0.7773724564001473,0.2347275530159466 zee,hat,7466,0.46902698855775327,0.6551810919348852 hat,wye,7467,0.9615308149819951,0.21971550212549507 pan,wye,7468,0.5738436863958716,0.15248721298846157 zee,wye,7469,0.07385275759024545,0.988298861201188 pan,eks,7470,0.9940613416045865,0.07142955197723755 pan,zee,7471,0.7206962235321295,0.4041386971591123 wye,pan,7472,0.9988712528911804,0.10724690438707674 eks,wye,7473,0.05762456751144174,0.28964111938628945 zee,hat,7474,0.43396734243561297,0.14885801202307214 eks,pan,7475,0.6722348646450019,0.7590858841092192 wye,eks,7476,0.2793082894315966,0.6921191873971512 wye,eks,7477,0.2981113055444685,0.3118479248083458 eks,zee,7478,0.7409323823493578,0.7821738405034923 eks,pan,7479,0.9488581319420917,0.5706834161873786 eks,hat,7480,0.02963041418290202,0.31020752876337365 zee,hat,7481,0.530165909368211,0.3499068052213301 eks,hat,7482,0.5358070419986188,0.9271364146014381 eks,hat,7483,0.641587995068053,0.39862033216100345 pan,hat,7484,0.9277546187980327,0.6036400626061248 zee,zee,7485,0.18250243629492235,0.5110714625281656 hat,eks,7486,0.05432606225417025,0.846037438857557 zee,wye,7487,0.06930153211010659,0.40332380041726024 hat,zee,7488,0.9738235845036819,0.11750653625892593 wye,zee,7489,0.586694906363601,0.485804661756557 eks,wye,7490,0.19672144728622376,0.8795897188259745 hat,pan,7491,0.6815182530961382,0.9995542599759397 zee,zee,7492,0.9924139789261013,0.39715459387237506 wye,zee,7493,0.30230649338335736,0.6455888156649094 eks,eks,7494,0.6054081816351222,0.18385964263706056 pan,eks,7495,0.153249592750631,0.93584890369611 pan,hat,7496,0.6974292707231954,0.2143287930146287 hat,wye,7497,0.01901911173549864,0.12188494912380243 zee,wye,7498,0.9598078762930742,0.9526096866376772 hat,wye,7499,0.636327994634104,0.5920454180111085 eks,pan,7500,0.28545374834074233,0.23198097536923323 zee,eks,7501,0.28446902555255327,0.7217441754314862 wye,pan,7502,0.4908870880910682,0.8748956439477087 zee,hat,7503,0.7352529827218478,0.629380067609114 pan,wye,7504,0.8333715164315797,0.9451336949095434 zee,pan,7505,0.564057939908022,0.5334065367359347 eks,pan,7506,0.7892604620140382,0.4458012446463657 hat,pan,7507,0.2115605362533587,0.17174864475858942 wye,eks,7508,0.5483107008409311,0.887289998494882 eks,pan,7509,0.7069484914746176,0.782150154038626 wye,eks,7510,0.6248444849216757,0.6630576924648813 zee,zee,7511,0.6377020664864278,0.03108546393426559 pan,hat,7512,0.5379752912051612,0.224779054520575 hat,wye,7513,0.5412688517812235,0.5262389205562669 eks,pan,7514,0.6610230005876971,0.3614899634971477 wye,hat,7515,0.9897486946692156,0.8560315264830626 wye,zee,7516,0.8259254313902334,0.7412888906117227 pan,pan,7517,0.7516545627381832,0.7262369325855629 wye,eks,7518,0.11113013523732362,0.8868844523482303 pan,zee,7519,0.8278328235609442,0.20410343800651054 pan,zee,7520,0.9899477831046952,0.14660509070885575 pan,eks,7521,0.8118281802749344,0.2234359726399897 hat,pan,7522,0.24133540171495538,0.5588871341097482 pan,hat,7523,0.7491239851649556,0.9869320105885282 pan,zee,7524,0.8170930769042274,0.9831655236845562 eks,hat,7525,0.8698194027224814,0.05435121618572081 pan,hat,7526,0.6842184815608053,0.5413631696210732 hat,eks,7527,0.9217058451870804,0.21666960274280356 eks,zee,7528,0.6805617035261402,0.9357708602507883 eks,hat,7529,0.31981099050142825,0.8903683820537329 zee,wye,7530,0.7097075423244159,0.9664504052194537 hat,zee,7531,0.2229334385915317,0.3284190225602506 eks,wye,7532,0.5296457339778697,0.5356809514905594 wye,pan,7533,0.7835022697060869,0.5470260523424321 zee,wye,7534,0.1466838920302843,0.5483633847205762 eks,eks,7535,0.09134795754962621,0.843889939620117 zee,wye,7536,0.977198066335277,0.841156212711556 zee,zee,7537,0.45067646463535815,0.4846053315615896 wye,wye,7538,0.23718351292469453,0.9441763901099166 eks,wye,7539,0.26816744152538996,0.6815708508524089 pan,pan,7540,0.9220993601302719,0.7568665001928173 eks,hat,7541,0.5161023046647734,0.038809351906244016 pan,pan,7542,0.20122530941942418,0.7472458340839414 hat,hat,7543,0.6227885940707738,0.6684149004769806 wye,eks,7544,0.9740791622624008,0.07927202429603264 wye,eks,7545,0.022518661429014375,0.2901112553388282 wye,zee,7546,0.18448181492287075,0.9152350814320122 hat,hat,7547,0.8215672815436097,0.5614013828250404 hat,hat,7548,0.19269905065728477,0.011009649002469146 eks,wye,7549,0.7325288469158541,0.565544676390673 hat,eks,7550,0.2558306743415637,0.7422910597132735 wye,hat,7551,0.3483947470200932,0.510297078100616 wye,eks,7552,0.8469802002512098,0.815964077738481 eks,pan,7553,0.5358909567117672,0.4100558446457958 eks,wye,7554,0.7339079956532404,0.8285558028377102 pan,zee,7555,0.30709526445187707,0.4817130705295929 hat,zee,7556,0.8122054753287119,0.20604868440565904 zee,zee,7557,0.7640201646131568,0.07069070372885133 wye,hat,7558,0.6038851752558235,0.9009580077702348 hat,pan,7559,0.5523119384745296,0.3127290290515127 eks,hat,7560,0.10199887225407722,0.31764039641093744 pan,eks,7561,0.41848341511646414,0.5635397789589572 wye,pan,7562,0.11656719650390013,0.7876569096468866 eks,hat,7563,0.026862386488812562,0.6617623406511374 hat,wye,7564,0.8296346152245616,0.22172618374176756 hat,eks,7565,0.17354141768396691,0.7068716816979178 zee,zee,7566,0.04190996301140926,0.8085114623622482 zee,pan,7567,0.4193214026807677,0.394167835232068 eks,pan,7568,0.5271419780589164,0.1432057817925363 zee,hat,7569,0.09822492892655521,0.05447501970715207 zee,zee,7570,0.12789683952220732,0.25490189761435 pan,eks,7571,0.22380898154758588,0.9433203311960137 hat,pan,7572,0.445759638952951,0.6137807210496694 wye,wye,7573,0.92008458670793,0.6955528667719472 eks,pan,7574,0.14478437931649057,0.0941855027104701 pan,pan,7575,0.9500548333140316,0.18833841450136246 hat,wye,7576,0.6030949657537056,0.14875629679301372 eks,zee,7577,0.14231014763644978,0.4717127637144344 wye,eks,7578,0.06201408130259789,0.69048502266567 hat,zee,7579,0.05435384851495728,0.9902847007425324 pan,eks,7580,0.1600952140568258,0.4045418954164892 wye,wye,7581,0.2175313107798721,0.3671212999414236 pan,hat,7582,0.2569787233680674,0.2148575227188957 pan,hat,7583,0.8536220104505021,0.2523759042998861 zee,hat,7584,0.09065491442429796,0.5048830484306086 wye,zee,7585,0.13751395044042258,0.034975186947673986 hat,hat,7586,0.5889920011506182,0.8078788341273992 zee,hat,7587,0.03280836042125246,0.41282684631580824 zee,wye,7588,0.5288696811580935,0.48744579505300667 zee,hat,7589,0.7770699494898016,0.7790651064661754 pan,pan,7590,0.3953702626804989,0.8410161773270264 pan,hat,7591,0.2245253698516796,0.7737639246478398 zee,zee,7592,0.35146635664435344,0.4539874980554838 wye,eks,7593,0.04430024252919407,0.1263254223270297 zee,eks,7594,0.6200947126046739,0.24510543274951047 pan,wye,7595,0.20918481361880603,0.6732663492566918 eks,zee,7596,0.5712662107490064,0.6090688560627531 wye,eks,7597,0.4310431117208252,0.08951460884563855 wye,wye,7598,0.06633817142669896,0.5442252601992482 pan,wye,7599,0.9608268596180474,0.9070684642079544 eks,eks,7600,0.5242885778608762,0.7826689200927383 wye,pan,7601,0.9208150605661285,0.5589433846274124 eks,wye,7602,0.5833785073086928,0.04443501942703898 eks,hat,7603,0.36191015100917356,0.710442357988238 wye,wye,7604,0.9697192149941326,0.09592438977685924 pan,hat,7605,0.3084442479608156,0.29052958365713977 zee,pan,7606,0.39737589478806956,0.02851924706651765 pan,wye,7607,0.2998113807261462,0.47793002819857533 pan,wye,7608,0.7117542206974444,0.7970333994894653 zee,pan,7609,0.39637889658629055,0.15152040674745126 zee,eks,7610,0.3668009982476311,0.636238165533322 wye,wye,7611,0.9172464082645518,0.21030281985055865 zee,wye,7612,0.3473870036653739,0.03835525794322947 eks,wye,7613,0.051620293140943185,0.3354589495771291 hat,eks,7614,0.26171105103308545,0.7349252470172892 pan,hat,7615,0.006420504177456654,0.8005473595004451 zee,pan,7616,0.6250802601130294,0.350073441110904 hat,wye,7617,0.3667157138284648,0.8788517472187893 hat,eks,7618,0.23737869189758654,0.43340937762837506 zee,hat,7619,0.0396492782791249,0.21046790711790042 hat,wye,7620,0.8866095807323401,0.1303857423099647 wye,zee,7621,0.17096221571163828,0.7965958396369065 hat,zee,7622,0.03375086644321179,0.6603973570703182 zee,wye,7623,0.8476652404295622,0.5532359995865707 eks,wye,7624,0.4036466177426279,0.9323311367204503 zee,wye,7625,0.6630299534680688,0.9316352338897794 eks,zee,7626,0.9362983270638663,0.02530583139989606 zee,hat,7627,0.3510535767246904,0.3060628840965116 eks,eks,7628,0.6580765451729311,0.3478545363218032 hat,hat,7629,0.6503893869201249,0.8748121320804191 wye,pan,7630,0.4658141836395999,0.8966097764457495 pan,pan,7631,0.27145158019948934,0.09516187714787117 wye,zee,7632,0.734823995296927,0.7719486421533686 pan,wye,7633,0.16036619135517816,0.6056119689930829 eks,wye,7634,0.7109688223985979,0.7976941367774835 zee,zee,7635,0.12557655765488285,0.11534164357950183 pan,hat,7636,0.06705624100603413,0.6451188760762676 pan,hat,7637,0.9106017109900336,0.8891547034705604 zee,zee,7638,0.2748491611629733,0.80651606034967 eks,hat,7639,0.771170174812707,0.7659520407198543 eks,wye,7640,0.2743403725668617,0.29487651020724404 pan,zee,7641,0.9381993656017179,0.6132694517353006 zee,wye,7642,0.20250440741625753,0.5663711206888612 eks,pan,7643,0.47586159706318876,0.4962125479739936 wye,zee,7644,0.6513731813421505,0.9956216673837286 hat,wye,7645,0.7915745853842925,0.34176706803861534 hat,zee,7646,0.5142370614917985,0.37306603953034023 zee,pan,7647,0.4270489725783423,0.5331035003317631 zee,wye,7648,0.6798736010037264,0.9310702986321819 wye,wye,7649,0.06713737802328557,0.6633680869367675 wye,hat,7650,0.8930880818631942,0.05300924902758186 eks,wye,7651,0.46360005487315714,0.5379475572098419 wye,zee,7652,0.006772483197185153,0.8526037392488609 wye,wye,7653,0.5261687377247655,0.9662557892207575 hat,eks,7654,0.930363511771148,0.40431933522117625 hat,zee,7655,0.7870611543157765,0.3879247735466407 hat,eks,7656,0.5567810208255114,0.08177612908836551 eks,pan,7657,0.9396222500433881,0.4873885569213413 pan,wye,7658,0.3621794133271582,0.38650038828351596 pan,wye,7659,0.6372574031531049,0.4008307542658702 pan,pan,7660,0.5441433972504542,0.9469895242558711 zee,hat,7661,0.9408442476780763,0.8023490934603362 pan,pan,7662,0.7195689266210618,0.19413596115835852 hat,eks,7663,0.511020096362885,0.37947905296566964 wye,wye,7664,0.63099124038326,0.08422373938558314 eks,hat,7665,0.34062598597350535,0.9340112462726258 wye,hat,7666,0.567402800484997,0.03927156134016285 zee,eks,7667,0.03246665173355623,0.4911639950418465 pan,eks,7668,0.10428072545494949,0.705703566436069 hat,hat,7669,0.9372199212901666,0.2848921895320988 pan,wye,7670,0.4293848817589905,0.6839311106774395 pan,hat,7671,0.5479425830973824,0.6792965466963522 pan,wye,7672,0.8149257619922751,0.04756755305626292 eks,pan,7673,0.8071000122718018,0.3069131904807898 wye,wye,7674,0.8942818883713989,0.5212590944649815 wye,eks,7675,0.5955058458574938,0.4676247967613243 eks,pan,7676,0.44645752932549043,0.031497838025275615 pan,eks,7677,0.5906841474792559,0.39720028182162814 eks,hat,7678,0.07578434084199792,0.22918239952964947 wye,hat,7679,0.9686531523418166,0.924678615947144 wye,hat,7680,0.6280201487984101,0.536246349153707 zee,pan,7681,0.14883118602285983,0.5148080394741317 wye,hat,7682,0.24098953071009122,0.26190037231185814 pan,pan,7683,0.6653528080679457,0.23663023500818714 wye,pan,7684,0.8868188354900317,0.43208980346634795 zee,pan,7685,0.09709731100349062,0.4690475302436993 pan,eks,7686,0.18978586580625822,0.18115920896147264 wye,zee,7687,0.3434686533925685,0.48726381835108046 eks,wye,7688,0.6488879560928158,0.042222720585220475 eks,hat,7689,0.17159448083555107,0.045442427612649494 hat,zee,7690,0.7259375308340535,0.7674839756219988 hat,hat,7691,0.8777344389987419,0.13098255040262852 hat,eks,7692,0.8385522296255185,0.33460046618507555 eks,hat,7693,0.8955356576888092,0.48158644758234315 zee,wye,7694,0.3060398953875496,0.10472339189986246 pan,zee,7695,0.3094975482418527,0.5858128371070169 wye,hat,7696,0.4662656698623283,0.8544965801108738 pan,zee,7697,0.6678143703378705,0.09581777907957223 zee,zee,7698,0.17073541333474684,0.6197461253961557 hat,pan,7699,0.28150223924025986,0.7949334007434804 eks,pan,7700,0.7077775737786727,0.7272353949934527 pan,pan,7701,0.43912855740961954,0.5952759302937142 wye,pan,7702,0.6934052269305254,0.7343693194312434 zee,wye,7703,0.0832141448099386,0.689610820157997 eks,eks,7704,0.76786474676413,0.8734911204128757 zee,eks,7705,0.9142550768210165,0.42338987508974 hat,hat,7706,0.4389747985376733,0.5868957432180422 pan,hat,7707,0.4742489895390498,0.6875201433051585 eks,wye,7708,0.1593131070189654,0.21618160132947373 eks,pan,7709,0.021236282778372417,0.3980616560952607 pan,pan,7710,0.6454947652276057,0.5934369662779847 pan,hat,7711,0.38583521508275165,0.5401757081161919 pan,hat,7712,0.4196809161822014,0.26377711630821754 zee,pan,7713,0.155281849590593,0.5244565614620743 zee,eks,7714,0.6373285599346649,0.1336713798341309 hat,hat,7715,0.6233765313325004,0.5758791846152675 wye,pan,7716,0.06175476953603409,0.8534290829785786 hat,wye,7717,0.2286520253814175,0.1192319014188804 zee,hat,7718,0.267306560937963,0.6639413524240723 wye,pan,7719,0.776170709486471,0.04166930319722717 zee,wye,7720,0.9961164879374235,0.16594871214649265 hat,hat,7721,0.6299836686087046,0.13572824583073617 zee,wye,7722,0.3686941934605621,0.9443406667411673 eks,pan,7723,0.3209098916589238,0.4109567715356973 wye,hat,7724,0.6570505905515743,0.15899862539640153 hat,wye,7725,0.1378541730969839,0.25911129591737747 pan,pan,7726,0.43414990019558963,0.1556380176176868 pan,wye,7727,0.8676654887349956,0.4278534479696323 eks,zee,7728,0.5397828066703505,0.6535807927478277 eks,hat,7729,0.02721562297052116,0.8792751973629769 zee,zee,7730,0.17826971421632076,0.23305955441707682 hat,eks,7731,0.6064367170765328,0.5843998077541726 zee,zee,7732,0.306490201972222,0.8466305229690627 hat,pan,7733,0.15752257838130168,0.025328573078963523 zee,wye,7734,0.004805891882058155,0.7847915958995085 hat,hat,7735,0.9286394794387348,0.9849690205615684 wye,zee,7736,0.5283513685317409,0.8859340359150333 wye,zee,7737,0.652833563987708,0.08525874301989911 hat,hat,7738,0.5904289054724924,0.015759945451949697 wye,eks,7739,0.20047031500415902,0.8454528005125532 wye,eks,7740,0.7528542161787996,0.7648364405523831 hat,wye,7741,0.9811094199766318,0.28309547772560684 wye,hat,7742,0.9283700112189616,0.4397004799577646 pan,hat,7743,0.26831057042317386,0.7077299528211933 eks,hat,7744,0.9850127339517182,0.28247386637526417 eks,eks,7745,0.3215874010779871,0.2780127707789244 eks,eks,7746,0.35282776725789056,0.015349081732579983 zee,eks,7747,0.4180982192655389,0.2733251523581718 eks,hat,7748,0.27317227631391283,0.6152013002721723 zee,pan,7749,0.408781801299804,0.717319277351812 pan,zee,7750,0.27375467840491696,0.9485370229814897 wye,wye,7751,0.9578808895640281,0.567472797993126 eks,wye,7752,0.8308158486543955,0.7251988641133165 wye,wye,7753,0.35648228848353636,0.825810007353184 eks,hat,7754,0.5569680022127645,0.5333129600306122 eks,pan,7755,0.3881304412114248,0.4050350844434646 zee,pan,7756,0.2999624778639135,0.3422859654759408 hat,eks,7757,0.005675684156441596,0.4710155431561027 pan,zee,7758,0.36890917101981324,0.9763006270617745 hat,pan,7759,0.2655863070154898,0.4394097550698016 zee,pan,7760,0.09922636178391386,0.3133271646647967 hat,pan,7761,0.5937279590019037,0.9494399455643315 eks,pan,7762,0.9358045588817545,0.7330851249844436 zee,wye,7763,0.5786653829827114,0.2618880168331781 zee,pan,7764,0.48750871272402196,0.22236263541673462 hat,hat,7765,0.8891522513963568,0.2668239844400174 zee,pan,7766,0.30364046910111253,0.6891273587279694 eks,eks,7767,0.53797481529119,0.9465659178026697 eks,eks,7768,0.28912890940887614,0.7442458122620677 wye,hat,7769,0.3705583652673885,0.059144918778647027 pan,zee,7770,0.6956017564216889,0.66737949839894 hat,eks,7771,0.756025188553685,0.8094953852781318 pan,pan,7772,0.6990222040473527,0.033151103195916964 hat,wye,7773,0.978940590729752,0.12080187423149347 pan,eks,7774,0.8611049069366612,0.7289618171406003 hat,pan,7775,0.24037840559946289,0.5476859366235767 hat,hat,7776,0.8353731209463556,0.766113750196805 wye,pan,7777,0.05858955413860256,0.12058424529655198 zee,zee,7778,0.7416290206514613,0.3921085843199572 wye,hat,7779,0.6525057028901559,0.827506650684489 hat,hat,7780,0.35967618349426034,0.6155205527426165 zee,wye,7781,0.8785183426416252,0.5929085468141393 eks,pan,7782,0.9147117130322603,0.2625104340138019 hat,pan,7783,0.2970040422341498,0.3987945132487777 eks,pan,7784,0.5773221928392703,0.984120457296803 eks,eks,7785,0.7533984992681583,0.34117949445154283 pan,wye,7786,0.4922908537138324,0.8016564975759202 hat,pan,7787,0.9606695287435937,0.2724371377986182 zee,zee,7788,0.39665748675823,0.7990204115613213 hat,hat,7789,0.9011093799553621,0.233507874232196 hat,zee,7790,0.0071897888391820874,0.9914209553595086 eks,eks,7791,0.41888693176987457,0.12945875791772954 eks,pan,7792,0.1663832456913965,0.7815381913771416 hat,zee,7793,0.958394958736606,0.8162724775424932 pan,pan,7794,0.6756648486521578,0.3164832583304539 pan,eks,7795,0.5007434672508728,0.45116398803311886 wye,wye,7796,0.7618404269252146,0.7082734662093254 hat,eks,7797,0.3339037394632195,0.33041712223471265 pan,eks,7798,0.8964629088574175,0.6314628948974991 pan,wye,7799,0.22115218679677484,0.8945303177931078 zee,wye,7800,0.7914989655477432,0.43386605796501754 eks,wye,7801,0.2768061453774291,0.11197920863328137 zee,pan,7802,0.8246321893741126,0.9437960471953348 zee,pan,7803,0.14679410267991433,0.7951490909241772 eks,zee,7804,0.2527677515169743,0.6402837194288739 hat,zee,7805,0.7220810582203347,0.7321859764651767 hat,wye,7806,0.8114485139288578,0.10936244859497501 zee,eks,7807,0.2431299964406336,0.6806744199778801 hat,hat,7808,0.8890059022302841,0.22235264592897086 wye,wye,7809,0.00751279921360315,0.10191418158652688 wye,pan,7810,0.22896336477318813,0.3855317875005415 pan,hat,7811,0.2803772001943151,0.06126665020709965 pan,wye,7812,0.6626056412742908,0.8119248457418577 zee,wye,7813,0.2839449326479042,0.21823946066739763 hat,zee,7814,0.9824109871068729,0.24702350802138673 wye,pan,7815,0.29912422376234227,0.031086896342097492 wye,hat,7816,0.9864077710445651,0.7857310073202174 zee,zee,7817,0.8037520801675582,0.23521748865500658 zee,zee,7818,0.8547716274640922,0.19464566963124352 wye,wye,7819,0.48778425728806885,0.5848857294076643 zee,pan,7820,0.6449176000624874,0.6911176673897844 zee,zee,7821,0.6652689102876012,0.8739835083180177 zee,eks,7822,0.6987205194846695,0.5636198949945938 pan,hat,7823,0.010016579560818473,0.8874400130011928 zee,eks,7824,0.819077078113403,0.1908070440081936 pan,hat,7825,0.1352980142489283,0.6116246247477668 hat,zee,7826,0.45007045338969864,0.8838605924784972 zee,zee,7827,0.5476130433221185,0.5402862105818173 zee,hat,7828,0.9857371922518141,0.9407026776406513 eks,eks,7829,0.6388976780469364,0.1723731781397092 zee,zee,7830,0.00819682639104835,0.4240387399947815 pan,eks,7831,0.7227922598778895,0.8810129413735137 wye,eks,7832,0.44768287987315436,0.06097808844991881 hat,zee,7833,0.38094799324344375,0.842105346910846 hat,hat,7834,0.7048613327865254,0.1492452682364549 pan,eks,7835,0.7503216413048331,0.22610681402742594 wye,hat,7836,0.18033444340025684,0.5396596125945982 zee,hat,7837,0.7596610024208577,0.13811213680042633 zee,pan,7838,0.46989555714248354,0.5731236845422526 eks,zee,7839,0.2378040998190729,0.8687389259046864 eks,wye,7840,0.15083338360252196,0.4677170605064366 eks,wye,7841,0.2390993050590302,0.4022350252704088 wye,wye,7842,0.03868013977565554,0.36213469293451195 hat,eks,7843,0.2326952229877629,0.07810622939834866 eks,eks,7844,0.3464583830104778,0.24608203542200424 zee,hat,7845,0.6258279281533773,0.519301606092353 hat,hat,7846,0.7328028225195036,0.11369450919398072 hat,wye,7847,0.5913920636618824,0.869313774493801 pan,hat,7848,0.9911771508550357,0.4789157458695267 zee,wye,7849,0.6838794391771024,0.7901996933834754 zee,eks,7850,0.38221395674318315,0.4647687529098594 pan,hat,7851,0.7174129864414264,0.6977644513609003 wye,wye,7852,0.9237362599816926,0.8751578434058209 eks,eks,7853,0.4518707326185428,0.6617696626513239 hat,wye,7854,0.06764752166213406,0.2082339516770152 zee,wye,7855,0.28326864641471117,0.7936013908655049 wye,hat,7856,0.7543839227963806,0.7708302534568163 pan,hat,7857,0.4184705412704066,0.40669972332461846 wye,zee,7858,0.9223976078879647,0.5779020996216999 zee,zee,7859,0.10768947209184598,0.3365441234115185 hat,eks,7860,0.7452070101622097,0.17526957060226422 zee,eks,7861,0.5097508654113272,0.21814047343538046 hat,eks,7862,0.27105430205532133,0.7490102016231208 hat,pan,7863,0.06726201643453855,0.35933180644142315 pan,wye,7864,0.3103009370970985,0.8407327110613196 eks,wye,7865,0.32234768937000546,0.02406247620613 wye,hat,7866,0.6773974203264422,0.2145912727473317 zee,hat,7867,0.7690926832290548,0.9300355345607946 wye,hat,7868,0.9396022178120012,0.4338845485635848 zee,hat,7869,0.9505475018937193,0.14630084195031035 eks,pan,7870,0.31855769422540314,0.8895458854037835 hat,eks,7871,0.5921983075931928,0.4229347949955703 wye,wye,7872,0.5263396869727451,0.6135988456193723 hat,hat,7873,0.8940280465724006,0.23131247213081552 hat,wye,7874,0.09904413256911793,0.8854746496958716 wye,wye,7875,0.5037904698265824,0.32995968281854504 hat,eks,7876,0.5344512004977263,0.11225525657163704 pan,wye,7877,0.9050244381025329,0.4700479323860336 zee,wye,7878,0.5290284670419653,0.35507751760627737 wye,pan,7879,0.3148924229301867,0.1872406546524351 eks,wye,7880,0.03633390115689916,0.16903851260082725 hat,pan,7881,0.8711990119730865,0.4293663097385956 eks,eks,7882,0.8471544066093775,0.40223962006438685 hat,wye,7883,0.24262458856564295,0.01835360943862996 pan,eks,7884,0.6922724138336023,0.012397141051616933 zee,hat,7885,0.3025111314280283,0.9069884084952201 hat,zee,7886,0.794970017782755,0.6062492046952036 wye,zee,7887,0.8726346787308475,0.3029668754826792 hat,hat,7888,0.20756986827268153,0.6363026946616206 zee,wye,7889,0.23271731636441206,0.548253711367059 eks,eks,7890,0.5715742308742378,0.8192093346935977 wye,eks,7891,0.6699323585736414,0.1435311317094633 hat,eks,7892,0.42467396461692,0.7347899103390217 hat,pan,7893,0.7439486973392055,0.17955726400681704 eks,wye,7894,0.5608680829128325,0.9585598084195104 wye,wye,7895,0.44727463294971703,0.7872043941311472 eks,pan,7896,0.9913466570743009,0.6302035261111584 hat,wye,7897,0.5421196020388044,0.8624723374301944 eks,eks,7898,0.37298028446417475,0.8728404913054509 eks,zee,7899,0.8332042684792176,0.07345290916251856 zee,wye,7900,0.8094076175677304,0.14978155572080065 wye,hat,7901,0.9355960796171349,0.18626647870004664 zee,wye,7902,0.2637291967134705,0.5442660467355056 zee,eks,7903,0.12158777831041234,0.9890244717689465 eks,hat,7904,0.2705482127515829,0.01971442860313377 zee,eks,7905,0.44670524308794834,0.5845415190296815 zee,eks,7906,0.691867757886342,0.2848167176859655 pan,zee,7907,0.33908058571920063,0.5335427401965982 zee,hat,7908,0.3610060660850839,0.24288129482927623 zee,wye,7909,0.9120826455472996,0.44475380738945147 zee,zee,7910,0.567164847298404,0.399455541894602 wye,eks,7911,0.691697756697526,0.877518858711515 zee,pan,7912,0.31982431730922556,0.7058492177082524 pan,zee,7913,0.7134779956631648,0.03877802504200312 wye,hat,7914,0.4366613963535759,0.8447738266648783 zee,pan,7915,0.6579171209676669,0.6482697150135545 wye,eks,7916,0.2877295918648384,0.211059870769302 pan,eks,7917,0.5275793853162087,0.8748428200227294 eks,eks,7918,0.12458230242468837,0.24069602443528393 zee,zee,7919,0.5222051770223615,0.1878235700153812 zee,zee,7920,0.8985365345616582,0.6020907480091875 hat,wye,7921,0.09671063835019511,0.4703227983629693 hat,zee,7922,0.8879147106591082,0.19697818805308442 eks,zee,7923,0.38870229665971356,0.5985607302963999 eks,pan,7924,0.3713298410561683,0.296460093460874 zee,eks,7925,0.5420534501009495,0.05866294852898357 zee,eks,7926,0.47492169105504933,0.8587163655741379 pan,zee,7927,0.7972209851115417,0.1287619061325339 wye,pan,7928,0.4065863120979525,0.7016224626335005 zee,zee,7929,0.25040361330370065,0.3462781056544345 wye,eks,7930,0.5998999740666952,0.940489760974054 eks,hat,7931,0.7426863429203551,0.5997919568409129 eks,wye,7932,0.7539925055624301,0.9588704021223314 eks,eks,7933,0.8496577484419044,0.8749858904217946 zee,hat,7934,0.39625425573088036,0.7516162692981885 zee,eks,7935,0.07413718973123662,0.9540488375627403 hat,eks,7936,0.43057462793549084,0.83261804348024 pan,pan,7937,0.7944834203394888,0.4910876849942255 pan,hat,7938,0.7835615902262538,0.030503750805517593 wye,zee,7939,0.20769387630166103,0.9857694928121757 eks,pan,7940,0.18503477530273849,0.2613475073722671 wye,hat,7941,0.4205902145088837,0.8454165597750689 pan,wye,7942,0.14289054655956812,0.5590237538729541 zee,hat,7943,0.007346899370313853,0.9435542424367808 wye,pan,7944,0.6010756954347072,0.602663902557592 wye,pan,7945,0.204176839139523,0.9444532348782411 zee,pan,7946,0.22356842063761684,0.6173414017420112 zee,eks,7947,0.025642761574512285,0.18768382301071385 eks,wye,7948,0.6258015401993495,0.4655464102747875 pan,zee,7949,0.2888268615751203,0.5754370603975112 wye,pan,7950,0.13192831258970839,0.09974934678356573 eks,pan,7951,0.573135783011619,0.5173979516422308 wye,pan,7952,0.9672001578855394,0.5999113434317762 hat,wye,7953,0.5332777170304573,0.8240541851977825 pan,wye,7954,0.1279461268867662,0.3465018420126411 pan,zee,7955,0.26370302153935266,0.709886854064376 wye,wye,7956,0.08185493324300519,0.8430295223333161 eks,eks,7957,0.990948668400743,0.1741418790774628 wye,zee,7958,0.7645204491814582,0.853303854748976 zee,pan,7959,0.15605455866939177,0.46323289916297505 hat,zee,7960,0.16017925473869754,0.4529356695213568 eks,pan,7961,0.6125869749454478,0.370095068843984 wye,wye,7962,0.18404446909382244,0.26269521842771504 eks,wye,7963,0.5558763888070763,0.185510369521809 pan,pan,7964,0.282047967900814,0.22212917426772594 eks,wye,7965,0.05872308143086857,0.38482704713824056 pan,hat,7966,0.2501049463368379,0.39344676758297514 wye,hat,7967,0.8987874844489919,0.49750601381227266 pan,zee,7968,0.7089490867118664,0.45255811448776784 eks,wye,7969,0.6608518009893678,0.22790991951466288 eks,wye,7970,0.7564471093195367,0.588547367327297 eks,wye,7971,0.3177159468656713,0.6507595896357143 wye,zee,7972,0.6981615941048016,0.3554268056065458 wye,pan,7973,0.018524216435056196,0.08446663540594712 hat,zee,7974,0.24963209679900955,0.016049846424579184 hat,wye,7975,0.048154096212748465,0.23172149127883657 eks,pan,7976,0.406288377613479,0.6746918193025293 wye,hat,7977,0.5283629678807258,0.8918455631655288 pan,wye,7978,0.5186376529712587,0.8811576068202212 hat,eks,7979,0.1757549377495632,0.7507650545931341 zee,zee,7980,0.10892391322425843,0.050571608567332116 hat,eks,7981,0.5740714306503298,0.34091415824926563 hat,hat,7982,0.15020550177808045,0.9076080995933096 pan,hat,7983,0.5450883311922072,0.44507084646454187 eks,pan,7984,0.49794222352752093,0.19964088700431204 eks,eks,7985,0.25908328241507117,0.41719268312114377 wye,zee,7986,0.2712612087411137,0.4093087980161978 eks,eks,7987,0.6808132597759162,0.10935069218341964 wye,eks,7988,0.8262618950608377,0.09248423605386846 zee,eks,7989,0.5671275966876752,0.6710467056302961 zee,hat,7990,0.12246709018315027,0.9902823724804396 hat,eks,7991,0.9093001304035243,0.6454294428509858 pan,hat,7992,0.28055455032097176,0.7076435705928082 zee,pan,7993,0.840708068980671,0.7676444206837281 eks,pan,7994,0.13873019879879267,0.3541885725000481 wye,wye,7995,0.5556276037973694,0.7103742139489323 wye,hat,7996,0.7897718226462853,0.7866250828364114 pan,zee,7997,0.42328017164614196,0.8968239987659891 zee,pan,7998,0.6173947671381171,0.9099504940374747 pan,eks,7999,0.1904021794562485,0.2442456072044632 eks,hat,8000,0.494989535411282,0.9858490482421876 pan,zee,8001,0.21740880422197573,0.009823495326658604 wye,zee,8002,0.8483246353215173,0.748697867257607 eks,wye,8003,0.07232519497816503,0.01460395395166092 hat,hat,8004,0.38823106724151646,0.7637253093388771 pan,eks,8005,0.8569860709125309,0.12024935239203738 zee,zee,8006,0.4339798390608952,0.752225427449917 hat,eks,8007,0.37719631868649617,0.39591507134214254 hat,zee,8008,0.2500892579626076,0.6235655047728978 zee,eks,8009,0.21398276966281848,0.6412152131738255 hat,eks,8010,0.3187905796970636,0.3173506685081655 pan,pan,8011,0.5376262182105622,0.4824151159482998 zee,hat,8012,0.9967455860256934,0.846350626099811 eks,zee,8013,0.6750010866052097,0.380258473116171 pan,hat,8014,0.8682985870091493,0.13867025721075266 zee,wye,8015,0.876659392160873,0.005960162771398214 pan,wye,8016,0.17217503903346676,0.6363974355768541 hat,zee,8017,0.8289275824108141,0.5824677757054623 zee,hat,8018,0.47908711384726377,0.2078467393092358 pan,hat,8019,0.03774190681630729,0.37562081779173295 pan,pan,8020,0.25202925423609734,0.8758710479186967 hat,zee,8021,0.6283764347998099,0.7038955747755151 wye,eks,8022,0.9822305246922711,0.9025462559345021 pan,hat,8023,0.17809600073620713,0.7136989224391156 pan,hat,8024,0.7871049381240648,0.9157631088161338 hat,zee,8025,0.8464024197077388,0.7505262168915832 hat,hat,8026,0.27076546874115703,0.717232478948042 eks,wye,8027,0.47677652985856545,0.742388612767014 pan,wye,8028,0.03498607510109997,0.19549287051995312 hat,zee,8029,0.8902222199776184,0.22597809584182216 wye,pan,8030,0.8534063530727802,0.5216400536886638 wye,pan,8031,0.399100924785613,0.8096553851806476 zee,hat,8032,0.3470913703916284,0.4932013734514763 hat,hat,8033,0.10816322348365748,0.6629283579053702 zee,eks,8034,0.7893326165734248,0.0055174814334882916 wye,pan,8035,0.17190090759613674,0.02144281885832955 hat,eks,8036,0.4487638977131928,0.9316999919622478 zee,zee,8037,0.7060201401255403,0.9669662969793548 zee,wye,8038,0.1386368820895454,0.5056689278962295 pan,eks,8039,0.09184144959885043,0.6340163134818283 pan,zee,8040,0.7171534760409121,0.7328586414702059 pan,eks,8041,0.3839508814613577,0.30631865487711984 zee,wye,8042,0.3764616704796617,0.0013477620094425324 hat,eks,8043,0.3534996104529119,0.7450885137370724 hat,wye,8044,0.10170616112045472,0.5317124791229391 hat,pan,8045,0.7300195962365097,0.3308540333941833 eks,wye,8046,0.6051188687817523,0.9131734207686757 eks,zee,8047,0.5374608283378429,0.31273904942423725 zee,wye,8048,0.05640085976332132,0.0700003098785944 wye,eks,8049,0.5114158496176794,0.12846145668110132 eks,hat,8050,0.9874222186130187,0.8593466056433501 eks,eks,8051,0.9761481708304064,0.15123613115180856 pan,pan,8052,0.6493110423838093,0.5347940909170277 pan,pan,8053,0.9130131367137716,0.20063251495257384 wye,wye,8054,0.29645291860851164,0.2862439675971603 wye,hat,8055,0.9283998083818392,0.9186794272646708 zee,eks,8056,0.21742326077552165,0.21215545457837148 hat,pan,8057,0.805271595399746,0.46020440997594847 pan,zee,8058,0.2152394578214053,0.6196385518512275 eks,pan,8059,0.39413913874172746,0.8509631752611558 hat,wye,8060,0.6704371607062275,0.002101362140308649 wye,eks,8061,0.38279862612807036,0.5895252762171836 wye,hat,8062,0.9226631815117158,0.9902149324132298 pan,eks,8063,0.4162908252496399,0.18879569170028876 wye,eks,8064,0.520433239579577,0.4738497455813805 wye,wye,8065,0.5952586854249843,0.050797298251500145 eks,pan,8066,0.7550938758657687,0.03587749109184113 pan,hat,8067,0.5198389196832879,0.2056652183357338 zee,zee,8068,0.1526773413967627,0.492096177763767 hat,zee,8069,0.6263854342684977,0.4917794632623357 wye,wye,8070,0.19425905980457325,0.5136004485194701 pan,eks,8071,0.15980232628622404,0.7963848087282333 pan,hat,8072,0.8729803431362889,0.23389287840183937 eks,pan,8073,0.8414137403991204,0.013708060374022835 pan,pan,8074,0.47234873863850657,0.4467664305469584 eks,zee,8075,0.8643916283489397,0.8421716629916459 pan,wye,8076,0.36180082799458324,0.2681111063038798 wye,zee,8077,0.291110312999184,0.3904237799736081 pan,wye,8078,0.2285091327975376,0.08630172750559728 hat,wye,8079,0.04336915531209018,0.7750227412335468 zee,pan,8080,0.4953944041935031,0.13051323550656468 eks,wye,8081,0.9893684193709726,0.009655042259111513 wye,eks,8082,0.5505998662939379,0.4793977598693524 eks,zee,8083,0.976642999884874,0.41575660829151373 eks,hat,8084,0.6415360825871783,0.9093765294473956 eks,wye,8085,0.19986686946961607,0.6001471405049741 wye,pan,8086,0.7089561346111681,0.9346147842120147 hat,wye,8087,0.6721158897399355,0.8662012495181518 zee,pan,8088,0.2999863643844106,0.9736282819386414 eks,hat,8089,0.780371764692202,0.13534345378955825 hat,zee,8090,0.18588301944750896,0.9295096790100238 wye,wye,8091,0.3136153634214588,0.9518615611124033 wye,zee,8092,0.3727994612209693,0.12052581566020104 eks,hat,8093,0.9315252187513533,0.561169216332415 zee,pan,8094,0.6896842396279547,0.2659526826052142 zee,eks,8095,0.013899464399908745,0.8010549230884639 hat,wye,8096,0.9312335027031023,0.22775044082337215 pan,pan,8097,0.2875217953665159,0.7352692976694222 pan,eks,8098,0.02310988069794695,0.04436912792860748 wye,eks,8099,0.9922978662257267,0.1009226522265646 pan,wye,8100,0.6977704958793126,0.7057512041273386 hat,zee,8101,0.8813156757676321,0.538439525268842 pan,eks,8102,0.8253811424731291,0.8958384638924397 wye,hat,8103,0.6382749094882392,0.7690601393055252 zee,zee,8104,0.19443211144688854,0.39629790432524836 zee,zee,8105,0.028359518501674397,0.31630049190233644 eks,zee,8106,0.04927046404341662,0.8091340642622323 pan,wye,8107,0.4038787839956157,0.8184040881437044 eks,eks,8108,0.8869014997757403,0.6363003729185641 eks,wye,8109,0.9098383165363556,0.06949042541302553 eks,eks,8110,0.24771678765070493,0.9300163398042232 eks,eks,8111,0.3084468757714339,0.9610528375033978 eks,eks,8112,0.31000078368875394,0.36138146669138416 wye,pan,8113,0.8110116541728041,0.36626731504545484 wye,hat,8114,0.8838936751784368,0.16448491200443816 eks,hat,8115,0.2092866675789835,0.6207159056705113 wye,wye,8116,0.5430690309464962,0.3836390944257766 hat,wye,8117,0.14958982301791146,0.8124903759523353 eks,hat,8118,0.8557041552120278,0.5440118132291639 hat,pan,8119,0.21486759901824792,0.3923954170049483 pan,zee,8120,0.6592841558501972,0.8794810617469089 eks,eks,8121,0.9178846401562378,0.7797206181214477 wye,eks,8122,0.6079549297413829,0.16695883184694493 eks,hat,8123,0.8786712780916176,0.5986968292379161 eks,hat,8124,0.6050565349569751,0.17711761175975083 zee,hat,8125,0.7071191860103717,0.5065338033789499 wye,pan,8126,0.9928274286457106,0.611287542007201 pan,pan,8127,0.7855300117843916,0.919185243159261 wye,wye,8128,0.5451094693684497,0.6739488974426652 eks,eks,8129,0.4483894040870827,0.04899785138545132 wye,wye,8130,0.6304140421100901,0.8822571743603556 pan,wye,8131,0.722244198415005,0.4334139656985445 zee,eks,8132,0.9155857784701777,0.3496924391322812 wye,eks,8133,0.968745042493151,0.20226923971903277 pan,hat,8134,0.8128492182669791,0.392568386730878 pan,wye,8135,0.45117859842393093,0.2608070414195329 zee,zee,8136,0.6400905852932521,0.9035481906697407 eks,hat,8137,0.039487665967159025,0.2642755984465909 hat,hat,8138,0.9944665404962163,0.03601538456153819 eks,eks,8139,0.5696036037683665,0.5215775669287221 pan,pan,8140,0.24967169231618214,0.6896632292080579 hat,hat,8141,0.06250971300811059,0.6284789386523464 zee,wye,8142,0.6462280039869936,0.989075899835102 pan,zee,8143,0.03802909555431522,0.0805330261761773 pan,wye,8144,0.7168864018283236,0.9743458426619153 eks,eks,8145,0.45913426278863745,0.7259328042437585 hat,wye,8146,0.6466004179249605,0.6476130238612243 wye,pan,8147,0.7564890511190168,0.3370280131510147 hat,pan,8148,0.8171601926388993,0.12709291977727588 eks,zee,8149,0.9838548523184443,0.6613857827470255 eks,hat,8150,0.42800158894759266,0.13739447644695857 wye,wye,8151,0.43651846968412356,0.716297573022078 zee,eks,8152,0.6420074465872548,0.5270375969424234 wye,hat,8153,0.07009589864190946,0.7822728799879559 eks,wye,8154,0.00955231084174002,0.7545442970218491 hat,pan,8155,0.6975376085727898,0.6899571370767156 zee,zee,8156,0.6395251098634284,0.5644973057197734 zee,pan,8157,0.39296205632043724,0.5511832594601693 eks,wye,8158,0.8469059054134236,0.9101861362422637 hat,zee,8159,0.11438608585479293,0.6137417386563446 wye,pan,8160,0.6081825274202294,0.14769534194863843 zee,wye,8161,0.7550762971732712,0.8530495051917243 zee,hat,8162,0.5735901437760568,0.20486220503074404 zee,hat,8163,0.13773260453775793,0.9660659918112889 zee,eks,8164,0.3607826318282279,0.1255618535732741 pan,wye,8165,0.7460078629419659,0.20509518109673885 eks,wye,8166,0.2703585359160412,0.7519449563416004 eks,wye,8167,0.6912089808005739,0.351675852657667 eks,eks,8168,0.8121986201818601,0.4587202609317872 eks,pan,8169,0.7194305802045211,0.9549210116328868 pan,eks,8170,0.6998846923585399,0.49886417024119634 wye,pan,8171,0.7170199430209871,0.4596547273774765 zee,wye,8172,0.2188044470516215,0.9409262537024545 pan,eks,8173,0.7415922617357986,0.0627371763205734 pan,hat,8174,0.2520020123957777,0.5935359054834856 pan,zee,8175,0.5756118666838461,0.6166940778091887 hat,wye,8176,0.8316169809953903,0.7727468837518336 wye,wye,8177,0.45262062218854693,0.6417926617217392 zee,hat,8178,0.3414767323625455,0.8276355992219739 hat,wye,8179,0.6913338216581719,0.8634446415532928 zee,pan,8180,0.7018819862110542,0.30230351547636003 hat,hat,8181,0.23955047854083944,0.27040254626774474 eks,wye,8182,0.2922405169121165,0.6645061373641254 zee,hat,8183,0.5126902650356464,0.8692712883907214 wye,pan,8184,0.9824979545102979,0.011383619081017482 eks,hat,8185,0.8449937251277326,0.6863834790266286 wye,zee,8186,0.04497354678950516,0.5141925160548166 hat,hat,8187,0.8262556263127695,0.21920924731404545 zee,zee,8188,0.8188229466265301,0.7731986253520043 zee,eks,8189,0.21859629681055648,0.04545680236762617 wye,eks,8190,0.17387577778883723,0.3600963171444731 zee,zee,8191,0.6027946184126483,0.7560104230688947 wye,pan,8192,0.5268204744299162,0.7467950199333838 pan,eks,8193,0.6279753535291541,0.1032502911892883 eks,pan,8194,0.4677408184985905,0.6073881904140683 zee,hat,8195,0.016890946717297295,0.9176976283367435 eks,hat,8196,0.24986039875431232,0.6476803155115554 pan,pan,8197,0.4524152227370508,0.2620560509511556 pan,eks,8198,0.895911910015345,0.9918773365972562 wye,hat,8199,0.7136636567819744,0.7470766277154778 hat,pan,8200,0.4231374284492073,0.1546230087665409 zee,zee,8201,0.7750292191321659,0.8295732493514495 eks,wye,8202,0.36911480147216946,0.18354328249876783 pan,zee,8203,0.11943983237768319,0.9064110889547424 pan,eks,8204,0.6300000735055588,0.5097476114683049 wye,zee,8205,0.6442554149020752,0.6779628314804215 pan,zee,8206,0.7692427917331188,0.11292590381570122 wye,pan,8207,0.39637091869319985,0.76304090412573 pan,hat,8208,0.7495304237104456,0.7417705075817802 wye,zee,8209,0.45586308498398453,0.9987194582307727 hat,hat,8210,0.6476477827460192,0.15239181174134397 hat,pan,8211,0.11189505956227741,0.4621617318098107 zee,eks,8212,0.09903637464949222,0.11847710838278536 zee,eks,8213,0.6131401826730208,0.5022261795262266 pan,eks,8214,0.18560914156032815,0.5491754568832973 hat,hat,8215,0.18871663617759393,0.7013352032606388 zee,pan,8216,0.10912632587239346,0.23098909374573406 eks,hat,8217,0.9215273193717863,0.14757043140565207 eks,wye,8218,0.3534829912574341,0.5696087711664961 hat,pan,8219,0.3322693803060234,0.0076976965775436 hat,wye,8220,0.8522954785865527,0.0007129432355447163 hat,hat,8221,0.046602995923670676,0.09042940585063108 hat,pan,8222,0.0007290941902635684,0.9057125778564156 zee,pan,8223,0.7575639565865209,0.29884828498056126 eks,wye,8224,0.995186116661242,0.2471757939983208 hat,zee,8225,0.3176890506590573,0.04443659691703017 pan,pan,8226,0.46997531114555335,0.91414102033992 pan,eks,8227,0.7045690818004235,0.016544250381158587 pan,eks,8228,0.6859024128283686,0.43310740395134806 wye,hat,8229,0.4802812953776502,0.28698445483944135 zee,eks,8230,0.37256536791796446,0.22484134058612737 hat,wye,8231,0.5993464309625437,0.09529154836393428 hat,pan,8232,0.053356023845203326,0.20750162756833523 pan,wye,8233,0.01730056600220997,0.4811950137685327 wye,hat,8234,0.7002619408413644,0.29378327426642736 hat,zee,8235,0.5760269820743364,0.9876933845887379 pan,zee,8236,0.6939214180664733,0.01597187286439905 pan,wye,8237,0.32216831192867235,0.4489268007125685 zee,pan,8238,0.4974895037561218,0.6955723789507248 zee,zee,8239,0.8722145698985853,0.5243287664361148 hat,eks,8240,0.3119317638364195,0.03153083991370387 hat,hat,8241,0.8231293488825948,0.44236728060318375 pan,pan,8242,0.6284004646755453,0.5188512495739586 eks,pan,8243,0.7790459369722915,0.38281709292600563 zee,zee,8244,0.5648821749696828,0.8387452862417517 zee,pan,8245,0.28860321455069415,0.5335162435192266 pan,pan,8246,0.978767937767844,0.595121683896329 pan,pan,8247,0.8877669245621814,0.993370582244656 hat,pan,8248,0.3673861400753813,0.7147327203599682 wye,wye,8249,0.12404890706154814,0.7443872152100742 eks,zee,8250,0.5731463701870027,0.4981231530018835 hat,wye,8251,0.2058939811865338,0.8011049893656047 zee,pan,8252,0.5300215804178179,0.8809898315791685 pan,pan,8253,0.14951845911545658,0.050337793147141485 wye,wye,8254,0.25412836603193123,0.7648066786148572 zee,zee,8255,0.2969343720495279,0.17875651030138728 hat,hat,8256,0.6242185970220043,0.7024165856278344 hat,eks,8257,0.26153012394521724,0.9173648797055972 hat,wye,8258,0.8531277255736057,0.8769896764505173 hat,zee,8259,0.80786266752403,0.6716375742716686 wye,hat,8260,0.8282560647084989,0.20433611074471913 zee,hat,8261,0.1113559979634432,0.7406405068913335 zee,pan,8262,0.8457444769341051,0.878949052752884 hat,hat,8263,0.021118246086347936,0.1691340461129066 zee,wye,8264,0.9518459612960978,0.2793142544459978 wye,hat,8265,0.07060877965846446,0.7105555726161993 wye,pan,8266,0.239318068730919,0.9656322414777047 wye,zee,8267,0.9407755844234869,0.243380428927656 hat,zee,8268,0.36840212479306056,0.1937179362263023 hat,eks,8269,0.11448405024977704,0.23838350078789672 hat,eks,8270,0.8887588347134354,0.3965985425548265 zee,zee,8271,0.6960229915393261,0.35933925756783236 eks,wye,8272,0.6007652533828618,0.9021580447695768 zee,wye,8273,0.5248356199666635,0.26596318599910873 eks,wye,8274,0.12638772701100054,0.98169945968464 eks,pan,8275,0.3873436846104391,0.143667378519436 wye,zee,8276,0.9887489614515038,0.2317693120893085 pan,hat,8277,0.07383920400137156,0.29779174578381706 eks,wye,8278,0.46767848884631935,0.05594159328112347 pan,zee,8279,0.0664546736505951,0.9617417667852406 hat,zee,8280,0.3946923561479273,0.26022613248187254 pan,zee,8281,0.1263835939366954,0.432802462221352 zee,zee,8282,0.40991526751045837,0.4664079852923113 hat,hat,8283,0.7155306719275212,0.06447259326334698 eks,zee,8284,0.18920257463227763,0.036407632423777536 hat,zee,8285,0.2926888932381453,0.7371130359478189 eks,zee,8286,0.8003927399144655,0.417202355775281 pan,wye,8287,0.6189613307505946,0.6990573098254149 eks,wye,8288,0.4497557556254256,0.24756315944170548 hat,wye,8289,0.565349257018066,0.9695790816330443 wye,hat,8290,0.1961063995221537,0.8919123622039012 pan,zee,8291,0.735310256094497,0.8766337081918637 wye,pan,8292,0.11264565494014644,0.9526134134675315 pan,zee,8293,0.42564320453866944,0.754899630271162 wye,eks,8294,0.03212624806856701,0.6046010405280738 hat,zee,8295,0.9314009276546747,0.3634004587734717 pan,eks,8296,0.4120888305335959,0.750837757399676 pan,eks,8297,0.9819888226687685,0.5660827409414791 wye,zee,8298,0.8302599994058273,0.7781190613623368 zee,pan,8299,0.7102421054905385,0.18545230561185977 eks,eks,8300,0.3945447287695022,0.18429543577101226 hat,wye,8301,0.5127430759316344,0.37361440070960017 zee,pan,8302,0.6034067583933804,0.04121009695962874 hat,pan,8303,0.46102687899911865,0.028654914603273074 pan,wye,8304,0.2251798670287818,0.1196124323878246 pan,pan,8305,0.5277320763446786,0.2381453397638834 wye,wye,8306,0.46134525628997447,0.14969908222679185 zee,wye,8307,0.4681491013126058,0.5960038288514199 pan,hat,8308,0.49210482260143007,0.9993016708772244 wye,zee,8309,0.8206434836667577,0.48326589462644276 eks,hat,8310,0.9655430452589465,0.9245411060012981 zee,zee,8311,0.1815329790070851,0.8035031242939596 hat,pan,8312,0.547677016360058,0.9650817043634582 pan,pan,8313,0.6126245890384583,0.2627563830782662 pan,pan,8314,0.5494985537362173,0.4929560062893006 hat,zee,8315,0.24017154445473743,0.8801615057175497 eks,zee,8316,0.01845753106507053,0.07103606295934006 eks,pan,8317,0.729335030923378,0.9595878811451796 zee,wye,8318,0.3037988276042912,0.9939532896787204 hat,hat,8319,0.31751994407032824,0.04431824787878602 eks,wye,8320,0.32774406925223687,0.39755988935681663 eks,pan,8321,0.2983894526754026,0.6350152253803334 wye,zee,8322,0.21110663580942235,0.5844040682223098 wye,hat,8323,0.27575135446576815,0.5943122394277006 hat,zee,8324,0.03714831235343263,0.18937718204762566 zee,hat,8325,0.6815362179515927,0.054322149908386796 hat,wye,8326,0.28959963076391493,0.36439348847404984 pan,eks,8327,0.4907923620285024,0.7411167930742034 wye,hat,8328,0.5085798206640023,0.8237875259659011 zee,pan,8329,0.16898862414886817,0.15560228332434112 wye,eks,8330,0.29464103904562966,0.7341494813651416 pan,wye,8331,0.7050741639259068,0.24486480402061384 wye,pan,8332,0.7019265469630769,0.07151895734610458 wye,hat,8333,0.3553335894794559,0.9167960838619573 eks,hat,8334,0.5699916051880387,0.13240719214910757 eks,wye,8335,0.22545133259971217,0.9891874451094091 wye,pan,8336,0.751226927786043,0.4644307134498339 wye,hat,8337,0.9324084470957861,0.30464033139638336 pan,wye,8338,0.8320742055010252,0.3040383465855868 zee,hat,8339,0.04629611790555632,0.6570852521967993 zee,wye,8340,0.779538114438638,0.8910397798499486 pan,pan,8341,0.6773754216149304,0.613857099295925 wye,hat,8342,0.1458720698488648,0.4351692119049885 wye,wye,8343,0.818540088896837,0.09911450492965423 zee,hat,8344,0.1958836142058411,0.9176685083913124 zee,eks,8345,0.5108081370139803,0.8369754291473595 pan,zee,8346,0.028776659972544194,0.6948652507080405 hat,wye,8347,0.5681600007983288,0.054076468737378036 zee,wye,8348,0.803443835215121,0.5295807220048788 eks,pan,8349,0.9755546767865578,0.8799835489524848 eks,zee,8350,0.24384090338130648,0.6466628002800704 eks,wye,8351,0.03641540536678134,0.08744451304860146 zee,wye,8352,0.5212869356402663,0.28575619803116314 hat,hat,8353,0.055663129013605483,0.3787786437258225 eks,hat,8354,0.5157212090975359,0.8904310076101238 pan,wye,8355,0.7949456612203025,0.03903053598722972 hat,hat,8356,0.5915574129139735,0.5501666687575646 zee,eks,8357,0.7920429015988977,0.11834165152142673 pan,hat,8358,0.42334512731520135,0.6760099049563617 hat,hat,8359,0.672862622018669,0.9813314150345762 hat,zee,8360,0.621024648933727,0.20026822440380232 pan,hat,8361,0.32174647083648733,0.5895462222915597 hat,hat,8362,0.8239226232469129,0.5363672557332027 zee,hat,8363,0.2786903002001039,0.9687065243326013 eks,zee,8364,0.6109061549072763,0.9310832897288339 pan,pan,8365,0.6603069810848408,0.8682978196165198 pan,eks,8366,0.8584731893684808,0.018687872462489152 zee,eks,8367,0.4049863490547647,0.4247029183107722 wye,eks,8368,0.30480439273047766,0.48048174444338265 zee,wye,8369,0.4648458105978611,0.21546080520985877 hat,pan,8370,0.7696984054132116,0.7047713537963836 eks,zee,8371,0.37597533966420293,0.08724777473553502 zee,hat,8372,0.5295738751761022,0.49181407244012054 zee,eks,8373,0.6150222878860193,0.5607136634592303 pan,wye,8374,0.4528870946233897,0.07597161789124052 pan,zee,8375,0.5301175183103385,0.8601180937794322 hat,eks,8376,0.06489427108475243,0.40261315507492046 eks,wye,8377,0.563425411256789,0.9184806642610032 eks,wye,8378,0.49250711472543074,0.5894409813302941 wye,wye,8379,0.3106946403141324,0.9203740586209803 hat,pan,8380,0.46061124100732664,0.7117135535467465 pan,pan,8381,0.9008707927717292,0.3595902617465878 zee,wye,8382,0.7952836839227378,0.6833817456403316 hat,hat,8383,0.3984261676380828,0.1738533271203584 eks,wye,8384,0.11104863533882658,0.3751765500241939 hat,pan,8385,0.49685402919308186,0.07834061857462182 zee,pan,8386,0.7967208048423021,0.6030273368815906 zee,pan,8387,0.1807569167154014,0.7798562786722997 pan,zee,8388,0.019186371949722614,0.712217475239358 pan,eks,8389,0.7546663778603894,0.19055481748967162 eks,hat,8390,0.750192269695654,0.2196686846490249 hat,eks,8391,0.989982527715026,0.7339778723038518 hat,zee,8392,0.1535960092053097,0.48365184245511483 wye,pan,8393,0.5371021532444956,0.5076931407974227 zee,eks,8394,0.9938525452278908,0.9944136062432827 hat,eks,8395,0.5759238042621931,0.47928472474217776 wye,eks,8396,0.7599928088669528,0.44980430671729377 hat,zee,8397,0.652668800860253,0.4288216397914163 wye,pan,8398,0.46997259303660743,0.6215175533218944 zee,pan,8399,0.9401027436536872,0.8241834377991233 wye,pan,8400,0.09022482342468607,0.7117741343367263 eks,hat,8401,0.21592490518329377,0.33061077431647556 eks,hat,8402,0.9947356560721309,0.7409670678572535 eks,zee,8403,0.17272225530114538,0.8080858181702887 zee,eks,8404,0.3493565206043524,0.09054805425762869 pan,wye,8405,0.4811201910981,0.18742552959849512 eks,zee,8406,0.31784551409346495,0.7449149218097839 pan,wye,8407,0.6830421268168155,0.23886758610551817 zee,hat,8408,0.9200690263533268,0.844860872568536 zee,pan,8409,0.9273895913936498,0.34564042630503233 wye,eks,8410,0.8159771407795444,0.17344618297387282 hat,zee,8411,0.17599234652950568,0.8329306332017614 eks,wye,8412,0.30559437664735667,0.2954096578389033 eks,hat,8413,0.4338584089312799,0.1949819510216354 wye,eks,8414,0.522368921381192,0.6530064427565451 wye,eks,8415,0.40077151734215266,0.2875570398483994 zee,wye,8416,0.44384210652184575,0.34372338201033137 hat,zee,8417,0.8269419111916478,0.5295548379993134 pan,eks,8418,0.4380512868717956,0.75013896261849 zee,zee,8419,0.0075621874159564895,0.6690403936644571 pan,zee,8420,0.23857482485031023,0.7909075804228464 zee,pan,8421,0.3657309162534651,0.6228123699358817 eks,wye,8422,0.6050408267820816,0.6834071285687362 pan,eks,8423,0.926919755552011,0.26857376981837733 zee,pan,8424,0.8931825703051405,0.3852663649349296 wye,hat,8425,0.7453660507413682,0.13411772302924097 hat,zee,8426,0.15542783988635755,0.704049056631255 zee,eks,8427,0.4741772361406499,0.4439154258100234 wye,pan,8428,0.08174430747151484,0.6148589268621117 zee,pan,8429,0.5376842505367805,0.3213151447208863 pan,pan,8430,0.7934355146306612,0.2130128581792352 pan,hat,8431,0.39291331641736893,0.8094069164458879 wye,pan,8432,0.06348257739180108,0.5106796157018605 hat,zee,8433,0.5390621535629033,0.2952379177915695 zee,zee,8434,0.9547567491718741,0.12013342742496513 hat,pan,8435,0.38866184034912554,0.059525983951048245 pan,pan,8436,0.006149130517828727,0.5641604969336926 hat,eks,8437,0.5253247675869896,0.5165646242633789 hat,wye,8438,0.17892790253218238,0.7014261262330826 eks,pan,8439,0.8952428124136508,0.9997604543675731 hat,pan,8440,0.9697671337199946,0.4191895939702769 zee,hat,8441,0.22626716374612477,0.3072575476209706 zee,hat,8442,0.012897791583037166,0.45928268470148015 eks,hat,8443,0.26800839200996895,0.6418100107433928 pan,hat,8444,0.033038289736824766,0.05539460621434722 pan,hat,8445,0.3310467747539301,0.028084005329851225 hat,zee,8446,0.178210692330519,0.4596388855650022 hat,wye,8447,0.44766765422608423,0.2937943605301816 eks,wye,8448,0.9730885844448779,0.6233373493085322 pan,hat,8449,0.020061713489634814,0.6882480566852568 pan,wye,8450,0.2793484686069333,0.44070351370129646 pan,zee,8451,0.6735785887971937,0.2100853452380218 wye,wye,8452,0.47072648393194716,0.3041985693356054 wye,pan,8453,0.8533811491024729,0.9678356263785118 wye,eks,8454,0.586163122107279,0.18970011803086628 pan,hat,8455,0.5906501253369019,0.6123184772904339 zee,hat,8456,0.08188017117818536,0.5533473423116015 hat,wye,8457,0.09332068743830269,0.20145292592178443 eks,zee,8458,0.6797834696384837,0.10797028132301578 zee,wye,8459,0.6609343823302558,0.42546615879700533 zee,wye,8460,0.8953715335446936,0.11110049694702284 eks,pan,8461,0.3064924756043348,0.844175432052883 wye,zee,8462,0.8562111449628035,0.3207655114753235 hat,pan,8463,0.278695825691301,0.1017956876584839 zee,pan,8464,0.008481311112248147,0.7901219557747767 wye,hat,8465,0.9233177773701866,0.4551415267122566 hat,hat,8466,0.14139708059138034,0.10409871077285981 wye,eks,8467,0.15399092408367587,0.8471702381741639 wye,pan,8468,0.7612272119425962,0.4244931128555939 pan,pan,8469,0.1347759881116134,0.2455909077182844 zee,eks,8470,0.7123089216903319,0.12685439711002044 zee,zee,8471,0.516240721628621,0.6586906452113941 eks,hat,8472,0.6674728443046178,0.1746237628027798 eks,hat,8473,0.09764518520867405,0.3404811785298787 wye,hat,8474,0.022760068608759787,0.5809138462442031 wye,wye,8475,0.9378861915703766,0.2850230950144711 wye,hat,8476,0.8745714693022778,0.6067344417467008 eks,hat,8477,0.9309461833265447,0.5563876226531717 zee,eks,8478,0.26305562568234253,0.9564416471738901 zee,zee,8479,0.267729670683009,0.8948780265074652 wye,wye,8480,0.16146423266136367,0.06354282797551147 pan,eks,8481,0.7416513487460877,0.3796824390692355 pan,pan,8482,0.8910001828466121,0.7723030338995308 eks,zee,8483,0.20374081828155488,0.4241287356182083 eks,pan,8484,0.2661511616359886,0.5443269070761398 pan,zee,8485,0.3471597707881957,0.5383222143237165 wye,eks,8486,0.9422065000597399,0.9149504343179683 zee,hat,8487,0.8443654519702793,0.40835643886431905 hat,eks,8488,0.4452671926810047,0.11987318281596804 eks,pan,8489,0.8711743497988805,0.05126471215006212 eks,pan,8490,0.21893201804499796,0.841786373878745 pan,zee,8491,0.14450135153044963,0.4964690028665373 wye,zee,8492,0.30534075186128107,0.8304463953467625 wye,pan,8493,0.19415677927998398,0.36967456189817616 zee,wye,8494,0.6014391280905923,0.9035203941606601 pan,wye,8495,0.9535261800524316,0.6741780286573957 zee,hat,8496,0.621523130626718,0.4636815949354597 hat,hat,8497,0.3932809847758547,0.32342585911847266 zee,eks,8498,0.5874342193773027,0.07510933559358712 hat,zee,8499,0.6960433804921428,0.9688422831160675 hat,hat,8500,0.948682263253869,0.894330225437426 hat,wye,8501,0.9251536771842801,0.5375948099135825 eks,eks,8502,0.7145487756177015,0.48881971388046497 wye,hat,8503,0.43025676669473123,0.7342583446741899 zee,hat,8504,0.33240950818517156,0.08420305010182172 pan,wye,8505,0.04933447605388053,0.43620839928024635 zee,eks,8506,0.5644240816881203,0.30905524481111557 zee,hat,8507,0.8799876950191433,0.8626007536651286 eks,pan,8508,0.5903156727749356,0.08521525736448865 hat,hat,8509,0.4819653658346117,0.47086103178508854 eks,pan,8510,0.09221850268394138,0.5189296436201934 wye,hat,8511,0.5399541727181182,0.8444405945197476 hat,zee,8512,0.8829979498980527,0.22352194169557127 eks,pan,8513,0.10151458816501346,0.1389357491074602 wye,eks,8514,0.145836390847488,0.3255110732802976 eks,zee,8515,0.5023980888022918,0.49053802703856897 wye,pan,8516,0.4017850863763818,0.44971529290471857 pan,hat,8517,0.9781793338882204,0.021166333309513008 pan,zee,8518,0.7275818161813503,0.5297860907729676 eks,eks,8519,0.20825394541995124,0.20861255119440336 wye,pan,8520,0.8898604947131726,0.597970731230186 eks,wye,8521,0.3648001678117977,0.19557380766743293 pan,eks,8522,0.6966179778593448,0.6840334680719272 hat,hat,8523,0.440001403027384,0.45225896734383286 hat,wye,8524,0.859237452752394,0.1542124316389395 wye,wye,8525,0.725596832315083,0.22913389637676507 hat,eks,8526,0.6308328182217219,0.9629302966330678 wye,wye,8527,0.8115562833033729,0.4166596968518107 zee,pan,8528,0.1829199682476771,0.22085981047936964 hat,wye,8529,0.8572334709695195,0.7640619187795664 zee,wye,8530,0.7086732598851492,0.4127159537504168 zee,wye,8531,0.32354124502667125,0.2318309195815882 pan,hat,8532,0.9446099166208107,0.1614735751140206 pan,wye,8533,0.4223281734144666,0.10945011806361638 wye,zee,8534,0.27597556866373363,0.8816530467647844 wye,hat,8535,0.7402933295244709,0.2866045341793103 pan,eks,8536,0.23950266321443625,0.2173609684570218 wye,eks,8537,0.8479922856732104,0.646967422694876 pan,eks,8538,0.9430852556493492,0.8645812565386866 wye,wye,8539,0.5424202389577869,0.7980364309577922 zee,zee,8540,0.6480753391409477,0.5064183808137883 eks,hat,8541,0.38813893407288325,0.12561215999003672 zee,hat,8542,0.17586391865769935,0.610479743176282 pan,zee,8543,0.7196826298375226,0.21171452421116865 zee,eks,8544,0.042214602250652544,0.7797653758284612 pan,pan,8545,0.6623908411097427,0.2713858225948562 pan,eks,8546,0.8347245917805975,0.32344231920229216 eks,zee,8547,0.17659256136803803,0.2734607705288187 hat,wye,8548,0.06872905733725654,0.24606652109262273 pan,pan,8549,0.45957314823744033,0.5826268929712483 hat,zee,8550,0.5390972348460589,0.832817959583314 zee,zee,8551,0.9479215142295764,0.31091453552453974 pan,wye,8552,0.8946104855739115,0.2336514856632098 eks,zee,8553,0.1756747767253124,0.40173864656676805 eks,eks,8554,0.35767825814151055,0.6530934959898533 eks,eks,8555,0.9294958471853418,0.44323868180332826 hat,wye,8556,0.2055964313614329,0.7508496809797562 zee,pan,8557,0.4734760023383495,0.24574081766297817 pan,pan,8558,0.01915285502673958,0.0710080820684984 wye,hat,8559,0.36628589114868737,0.7546365740130917 pan,pan,8560,0.8369571665486479,0.6640166878609967 pan,wye,8561,0.9827417467300459,0.47548149029733666 eks,hat,8562,0.9263781942963408,0.13871044819580336 pan,pan,8563,0.9901067426610356,0.22526379572530497 zee,eks,8564,0.4638040598773725,0.34104108677898826 wye,hat,8565,0.48113198136329016,0.3218458306963313 zee,pan,8566,0.6161448715164534,0.48576149543063263 pan,hat,8567,0.7401694289092702,0.8501949156927895 wye,eks,8568,0.5607940018315913,0.6859095069187073 hat,wye,8569,0.8193761557404394,0.6213974290333986 hat,hat,8570,0.218909328728924,0.7083399518815072 hat,pan,8571,0.3374929371344728,0.11008369139923513 wye,zee,8572,0.5104050859274984,0.84636724693727 wye,pan,8573,0.304284204335561,0.8057462093976527 hat,pan,8574,0.1304164384473907,0.7795954672055522 eks,hat,8575,0.411309283136459,0.3134260008884213 hat,eks,8576,0.8094118504289595,0.3462825803661308 eks,pan,8577,0.8378950242503957,0.3281587348968884 wye,eks,8578,0.8671191631706497,0.848376644694914 wye,hat,8579,0.3629850782784485,0.7894725040297135 hat,pan,8580,0.20981130689562955,0.4981591059735274 wye,zee,8581,0.9549730188079689,0.16399154830304508 zee,wye,8582,0.48899851680494,0.05774193348030199 hat,hat,8583,0.18626492222161328,0.7003807702816355 wye,zee,8584,0.36453353655204557,0.784021739601697 pan,zee,8585,0.8620613291960066,0.8283882429708938 zee,wye,8586,0.6927422583943957,0.7194075668113131 hat,pan,8587,0.0052693086009946155,0.6525496192910188 eks,hat,8588,0.451596899385722,0.5139458108988265 hat,zee,8589,0.2926550989813841,0.35398173553544887 eks,wye,8590,0.9239196319519597,0.14591437779625882 hat,pan,8591,0.7873294723300266,0.5332360898832793 zee,pan,8592,0.6070860534520608,0.06388885983216774 zee,zee,8593,0.2617818185031422,0.43707681521897646 pan,hat,8594,0.6468386400257026,0.38978242152795606 zee,eks,8595,0.42488684401408794,0.2974668150516677 wye,wye,8596,0.8826796731081049,0.7850131924698824 wye,eks,8597,0.006860697351333767,0.19549617714299017 hat,zee,8598,0.07939885603933172,0.677412657910395 wye,zee,8599,0.7184888188080124,0.8697536607671493 hat,wye,8600,0.84790186953787,0.8684654646246722 eks,pan,8601,0.8421109599018441,0.16320118728086785 pan,pan,8602,0.26047864829581335,0.6808750509660122 eks,pan,8603,0.31611152902489204,0.11267222283796785 eks,wye,8604,0.06845978562369492,0.7238513464535802 pan,zee,8605,0.6530000366736074,0.10675264632456327 wye,wye,8606,0.06774372832796882,0.567171071395945 pan,wye,8607,0.7672859830291083,0.9905418229463311 wye,hat,8608,0.9486273082548317,0.49394451768421244 zee,wye,8609,0.8594077389671471,0.39612060375973734 eks,hat,8610,0.20455104503269428,0.8497404270304781 eks,wye,8611,0.024981210157926648,0.4592839770075655 wye,pan,8612,0.9729537123818344,0.31179500609148325 pan,pan,8613,0.9509457095140577,0.47129012611509 wye,hat,8614,0.9846913444886134,0.02710103368583705 zee,wye,8615,0.3010264833529994,0.7455884610745039 pan,zee,8616,0.6883510014246306,0.8824450569844674 zee,eks,8617,0.4515091274400017,0.020225254455900066 zee,hat,8618,0.8851862421614336,0.15621840171343437 pan,hat,8619,0.2649678025213431,0.39936058228129934 zee,pan,8620,0.7597636742317367,0.1317502476459378 zee,zee,8621,0.13218842583668222,0.03127532132246047 hat,eks,8622,0.49385289030098156,0.3427851043390181 eks,zee,8623,0.18543631005824213,0.19588655519979803 pan,zee,8624,0.10763314570414217,0.08213428508081799 pan,eks,8625,0.6882597637249681,0.8142971025439197 eks,hat,8626,0.6080795099100825,0.8728243765075873 eks,eks,8627,0.770624339998738,0.07831235750300036 hat,zee,8628,0.46540841676613476,0.10159896993531026 zee,pan,8629,0.004614760806835205,0.9592385994725491 wye,pan,8630,0.6807920836499873,0.8665298197163882 pan,eks,8631,0.6858410458377651,0.7631951114896744 eks,hat,8632,0.20944920807915668,0.17415067019098263 zee,wye,8633,0.015521112321513986,0.870629718512366 zee,pan,8634,0.3707685639916669,0.2775760739581703 pan,zee,8635,0.6292193294154781,0.21469655787258057 zee,zee,8636,0.6107700273929492,0.14811799805161463 zee,eks,8637,0.6395976874259532,0.9961211959529084 pan,wye,8638,0.8056202987173707,0.28960110672185313 zee,eks,8639,0.2524229698549828,0.17611542817224723 zee,zee,8640,0.08482390402218887,0.36890700689619493 eks,pan,8641,0.46605482768215767,0.07140744226571838 eks,hat,8642,0.10408804972672026,0.23204314849773244 hat,zee,8643,0.3955443156971198,0.35524981169296355 zee,hat,8644,0.7215420507798297,0.03391309500084805 eks,pan,8645,0.9910156023068047,0.21643864467214002 zee,wye,8646,0.6658298582773444,0.36894449402470386 wye,wye,8647,0.8282095483187364,0.5670959372120373 zee,hat,8648,0.0831367015182175,0.7424505172193498 pan,hat,8649,0.8273775847857144,0.849837822420028 hat,pan,8650,0.7798855565061036,0.6249390723014688 pan,hat,8651,0.15776823313362787,0.6837656369090205 pan,hat,8652,0.12499193321086843,0.8909115194708364 zee,hat,8653,0.623624299660614,0.28437293457698065 wye,hat,8654,0.4794478591209653,0.6149276606394762 zee,hat,8655,0.9202280019494714,0.43438007188126115 pan,wye,8656,0.5362020839763336,0.5898815059855541 hat,pan,8657,0.4419120878855759,0.04387616479212919 wye,pan,8658,0.37394689239227175,0.6932810199911174 hat,eks,8659,0.09027772061731287,0.5938968603299669 hat,eks,8660,0.44939114811664815,0.8033098658688053 eks,hat,8661,0.9412054441857266,0.7031238908715453 hat,wye,8662,0.026880033398767544,0.9570616615315023 pan,zee,8663,0.16400229878818795,0.7569220441881562 hat,eks,8664,0.737351462653292,0.008534196836191721 zee,eks,8665,0.16620817209916572,0.4183421439519892 eks,eks,8666,0.2605898276210701,0.9107791581080643 pan,eks,8667,0.16483965969504477,0.008847013569707962 hat,hat,8668,0.5758275186132803,0.4376894563403356 wye,eks,8669,0.30935622306150556,0.5406996947409577 hat,eks,8670,0.6115682118401596,0.709847191339046 hat,pan,8671,0.5876224326167997,0.655751406127023 pan,pan,8672,0.7383754184207463,0.4204832285810981 wye,wye,8673,0.9992635865771493,0.4216138590799462 zee,wye,8674,0.30144308355523053,0.985811453648491 hat,eks,8675,0.7901168710228115,0.02854873755150633 wye,zee,8676,0.458348366941119,0.0654065118924938 pan,eks,8677,0.576018794663166,0.021732489132554877 wye,zee,8678,0.051768914692817525,0.9811531769362358 wye,eks,8679,0.8714866001900081,0.5074064697197682 pan,zee,8680,0.8573300862564848,0.8110639386847459 eks,wye,8681,0.9176784134359273,0.2764422061252122 hat,eks,8682,0.8690529123645934,0.9535269156601301 wye,zee,8683,0.6350123840910076,0.6382912385391265 hat,eks,8684,0.6215103356564846,0.14887437241814006 zee,wye,8685,0.584126263404004,0.7538247769853159 wye,wye,8686,0.43551003027785373,0.3236501977657479 wye,hat,8687,0.8880686097383739,0.6330150426943297 wye,zee,8688,0.7635796389205769,0.2638125019378026 zee,wye,8689,0.3761531727653552,0.9022543136929991 wye,eks,8690,0.08913417768338172,0.9531306393247156 eks,pan,8691,0.9943932359314775,0.9072697301052425 eks,zee,8692,0.5457000332265722,0.4837579979584361 zee,pan,8693,0.4765529256302863,0.7047109057288847 eks,hat,8694,0.742421569895559,0.766958291324268 zee,eks,8695,0.23665653193040737,0.2743956071876914 wye,wye,8696,0.2888070230684594,0.9935631592216062 hat,zee,8697,0.1507630405832039,0.8444262680025181 zee,pan,8698,0.9647755452332127,0.3090467608406059 wye,wye,8699,0.18194655224399203,0.9052438757034091 pan,wye,8700,0.849446996637848,0.7731446643107283 pan,pan,8701,0.6101087522261474,0.5619798733118421 eks,eks,8702,0.2860963732537126,0.5616399941521609 hat,hat,8703,0.5764546868259887,0.5585165186187631 wye,hat,8704,0.5825019915262796,0.7509760878946939 wye,hat,8705,0.2608869277824021,0.18054497056171448 hat,hat,8706,0.44933047132208914,0.2870706030629274 eks,eks,8707,0.5126396112669858,0.7451349937567859 wye,hat,8708,0.9654821455735791,0.4030015908373886 zee,hat,8709,0.12072257756980032,0.6331889132322128 eks,eks,8710,0.23179579194118272,0.2720693323497807 pan,hat,8711,0.2745931092811078,0.8275977373766176 zee,zee,8712,0.16788282836102386,0.8552502071604215 hat,eks,8713,0.17690637256217367,0.7529327963215693 zee,zee,8714,0.871119409753738,0.8880243168317828 pan,zee,8715,0.06440670061693166,0.7697496461773731 pan,zee,8716,0.010723117383408809,0.3256007021073345 pan,zee,8717,0.6961198318349152,0.46776215866881776 zee,pan,8718,0.5501338319067216,0.4585993087188408 pan,pan,8719,0.8266651999765658,0.7457257758170397 wye,pan,8720,0.6983669783370258,0.18024570857490163 zee,hat,8721,0.18186817750471462,0.28188928351608533 eks,wye,8722,0.1796424637908317,0.08845716187743458 wye,zee,8723,0.18784777106560657,0.8680814485784762 wye,pan,8724,0.7535113517713046,0.06635813172501992 wye,wye,8725,0.06677961979475944,0.8150664034109032 pan,pan,8726,0.09110059809025017,0.634882036803602 eks,eks,8727,0.07770263986306736,0.6339732062069904 hat,zee,8728,0.1222023744265569,0.36047803182555027 hat,wye,8729,0.38616984963682455,0.6665706605579002 eks,wye,8730,0.03564554727285307,0.775754590350077 wye,zee,8731,0.35713870378290125,0.1671267891620788 hat,zee,8732,0.5996953011640668,0.62340072229723 zee,hat,8733,0.2345433105033039,0.10071782641377514 zee,hat,8734,0.301665687569308,0.3630510637781915 hat,pan,8735,0.47526687158292913,0.22747265846322517 pan,eks,8736,0.5793971065628433,0.6408359296127717 wye,zee,8737,0.6210812266919626,0.8036316255685408 pan,wye,8738,0.15856470090745411,0.07442697669748699 hat,pan,8739,0.6747028428344869,0.05546525602545038 zee,zee,8740,0.7182904394926175,0.7258491677192344 wye,hat,8741,0.050796016954941514,0.2827688297213582 pan,hat,8742,0.536032482315453,0.7201071015346874 pan,hat,8743,0.23212794392337244,0.9962892434331647 zee,hat,8744,0.15548275830576097,0.5597164039669866 pan,zee,8745,0.053519007571192656,0.5880763072120166 wye,hat,8746,0.4039984554038578,0.6360272605402368 eks,zee,8747,0.12768838944842187,0.7694103697647696 pan,pan,8748,0.0504766925956035,0.1711562295167237 eks,eks,8749,0.43854684004790123,0.28682577788725483 zee,zee,8750,0.37684822924899897,0.6896149386123666 wye,hat,8751,0.06509359888339494,0.177636855552877 eks,pan,8752,0.09242339085575646,0.32343297889748723 wye,eks,8753,0.9973914329853147,0.9693279929688737 hat,eks,8754,0.370565044079066,0.009819699195025788 zee,pan,8755,0.8202332245450998,0.5597758930454603 eks,hat,8756,0.272322951811926,0.145224793410337 pan,eks,8757,0.10217035846864753,0.8463196056537164 zee,zee,8758,0.9667659565271899,0.5623772828898473 zee,hat,8759,0.03620010006756513,0.9300101887480641 pan,hat,8760,0.7972381410312142,0.3059551797120732 wye,wye,8761,0.6603209295504429,0.5459240190405134 zee,hat,8762,0.8972125526805521,0.12801932204763655 hat,eks,8763,0.08300923681882266,0.3326688755194035 pan,hat,8764,0.19654713910488297,0.9815477858639055 pan,wye,8765,0.7403998857752021,0.9560094148670492 wye,zee,8766,0.9449147393082301,0.6732722707943484 pan,hat,8767,0.994940403256145,0.6992814067153592 pan,eks,8768,0.9628487500260046,0.2914751295622189 zee,hat,8769,0.04870919701921694,0.9387243884055145 pan,eks,8770,0.6298376152653163,0.5214339719227405 pan,hat,8771,0.05539194558306315,0.6044013107155554 wye,zee,8772,0.754483186364135,0.9567133222811894 eks,zee,8773,0.7529293581975827,0.2684999525860745 wye,eks,8774,0.3998473670297119,0.07393345230936454 wye,zee,8775,0.15521659769175922,0.2873998987631695 wye,zee,8776,0.5452491171201722,0.050076673250635584 pan,eks,8777,0.5238633710326642,0.019941096658736224 zee,wye,8778,0.7616404527480684,0.8158713089665471 hat,wye,8779,0.600461848950472,0.5399884947809014 eks,zee,8780,0.5925751420631895,0.6690795493308443 pan,zee,8781,0.9383737724522293,0.7748193135876428 pan,pan,8782,0.49034005500698785,0.80873396896634 pan,hat,8783,0.5183921754082103,0.11862486021555674 pan,zee,8784,0.8772019876864762,0.1521542632208297 zee,hat,8785,0.6464009753631575,0.6923362770119578 pan,hat,8786,0.16224717165693037,0.7476369567248122 eks,pan,8787,0.9541941134181783,0.39739249865003967 hat,zee,8788,0.2642687755038374,0.10859080810253674 zee,wye,8789,0.789145574444134,0.24974632777903916 wye,hat,8790,0.8223311948449997,0.5130414892803776 eks,hat,8791,0.6818394894701235,0.7849388490947223 eks,zee,8792,0.2729303223525674,0.8719161161689617 wye,zee,8793,0.9343780609627443,0.05352320375085495 pan,pan,8794,0.9586567458589967,0.919190837846641 zee,eks,8795,0.27124185699244374,0.6001949173753478 wye,wye,8796,0.534583514132678,0.7819265778012215 pan,hat,8797,0.4497161697366787,0.026741184746243984 zee,eks,8798,0.8167620532839222,0.8279530206710328 wye,eks,8799,0.8471762978662517,0.6353417536536258 zee,hat,8800,0.4068819800794493,0.6647858452666756 hat,hat,8801,0.017219020782623162,0.1624665172562224 zee,wye,8802,0.5608298870065771,0.5058672809947269 eks,pan,8803,0.4433211231528589,0.2838323939048415 hat,wye,8804,0.015128205072592937,0.9382969714739184 wye,zee,8805,0.41033971377507983,0.8903811666103645 wye,pan,8806,0.08327290658651032,0.2550251881973168 pan,eks,8807,0.339222785155762,0.1751435242352425 zee,zee,8808,0.4820472727787015,0.017092345316797486 eks,pan,8809,0.8772675192449497,0.09405065417217506 eks,zee,8810,0.4802724150878229,0.750654827698973 wye,eks,8811,0.27073265506551913,0.4615910666569303 eks,eks,8812,0.07160623229882901,0.12458111194427568 pan,hat,8813,0.7877743286534948,0.8757926217967861 wye,pan,8814,0.8234802661475596,0.47740951215608096 zee,wye,8815,0.7068610202368742,0.7545170669582756 eks,wye,8816,0.42511667279750365,0.7472491957445023 hat,pan,8817,0.8982686805610952,0.41213109883329235 eks,eks,8818,0.0006917972627396018,0.9154889032308835 zee,hat,8819,0.8077899694017853,0.9694410429631465 wye,wye,8820,0.5128274083278233,0.1925061634264612 wye,hat,8821,0.48953047787044934,0.9309635789095997 wye,wye,8822,0.5093848419146877,0.7499112900526392 wye,zee,8823,0.7521935072400413,0.8768924705259773 zee,wye,8824,0.17855149771491108,0.09366701006513045 wye,wye,8825,0.9175145724829686,0.733177971733118 wye,pan,8826,0.7781119220016439,0.5568374194244214 pan,pan,8827,0.44994539245047094,0.010072546778717273 zee,pan,8828,0.8974531793622843,0.6299514776398363 zee,hat,8829,0.03029077173623984,0.8996371412607174 pan,zee,8830,0.9250374016750887,0.21170234142774214 hat,wye,8831,0.2886019989070704,0.8746854292394444 eks,zee,8832,0.8201188808616761,0.7163833146418705 hat,pan,8833,0.4781516414425546,0.6243657645336355 eks,pan,8834,0.30019128687682395,0.6215357926899209 zee,pan,8835,0.28411203290841713,0.880506908200805 zee,hat,8836,0.12727398470205364,0.6861531204026988 pan,pan,8837,0.6585419955018336,0.10473471849452742 pan,hat,8838,0.4461825537060876,0.3925097922631463 wye,pan,8839,0.4002040179552746,0.24694949779242004 hat,hat,8840,0.2591704876662355,0.8145986246056769 wye,pan,8841,0.38972915905002337,0.5603702988216951 pan,eks,8842,0.9266082306477657,0.5285007006129709 hat,hat,8843,0.37872486721691034,0.07532645476050148 hat,hat,8844,0.0685259642260373,0.00776256940978215 pan,wye,8845,0.24303613366881238,0.13056160975299724 wye,eks,8846,0.9676348576302707,0.5106172718000012 wye,pan,8847,0.19766194187411346,0.6722053323380418 hat,eks,8848,0.18275312440508307,0.9764304146821695 pan,zee,8849,0.6264364311275306,0.9563714459175713 hat,eks,8850,0.8735595733663851,0.5106033973424751 hat,wye,8851,0.8277257237676418,0.38220594008932074 pan,eks,8852,0.5590462379202299,0.07402923834402797 wye,wye,8853,0.6030890949494638,0.024154261693530632 hat,wye,8854,0.9304995637638334,0.6319621895624278 eks,zee,8855,0.3608005376988722,0.9009155444417519 pan,hat,8856,0.31871112874254814,0.5214655695969946 pan,eks,8857,0.31972354861237895,0.7327700228563248 pan,zee,8858,0.7128306783608381,0.811303686462451 pan,wye,8859,0.9081121983690633,0.5712022128090308 eks,pan,8860,0.7438203192490614,0.28338323389587416 wye,hat,8861,0.39486469148361836,0.49780490997274707 wye,wye,8862,0.7736663364376681,0.5874621525618737 zee,pan,8863,0.7598351732843991,0.16402301245225137 eks,eks,8864,0.8345356283222535,0.7112462031216813 zee,eks,8865,0.9403263935444554,0.07461363367845775 zee,hat,8866,0.6732648337974786,0.9333019394438807 hat,zee,8867,0.4989779025451857,0.9076709264537641 hat,hat,8868,0.016222381142314224,0.02090746494690887 wye,hat,8869,0.2676602361580831,0.8275937851537348 wye,zee,8870,0.5771716563773662,0.3486638387791615 wye,zee,8871,0.8326977668224673,0.042247928422714076 eks,pan,8872,0.46276796521083263,0.937222119081556 zee,wye,8873,0.12465164468565504,0.4217551436223611 hat,wye,8874,0.8578330113744658,0.5967910955072325 wye,pan,8875,0.9700008052690227,0.5495480079950836 pan,hat,8876,0.14594726337052932,0.7756413451049061 wye,eks,8877,0.21506616709063353,0.028566538362973737 hat,zee,8878,0.8446285361381319,0.08785108055341062 zee,pan,8879,0.8504405312776793,0.6033489024089217 wye,wye,8880,0.47595916238031677,0.4288837512249194 eks,zee,8881,0.45213579710907703,0.08748650555497739 zee,eks,8882,0.1414462883645664,0.9081746803701161 hat,eks,8883,0.7348243939209332,0.8605568412288824 pan,hat,8884,0.7853971344779014,0.004051486898246415 zee,wye,8885,0.41758576449425977,0.14627581317514182 wye,hat,8886,0.9280339369715974,0.9297205006311496 zee,hat,8887,0.7347475121162593,0.03993326351233917 zee,zee,8888,0.8278911862966036,0.4003238193899692 zee,zee,8889,0.06545001204265088,0.3004515856834621 eks,zee,8890,0.27962535290039825,0.44335679461319166 hat,hat,8891,0.019843222350497625,0.5313009507007954 pan,eks,8892,0.3852530201110397,0.06941698785655903 pan,eks,8893,0.2977417830889273,0.6332182300346895 zee,eks,8894,0.1966531651167187,0.4688240979189081 wye,hat,8895,0.22463107582925324,0.4161186278077874 eks,zee,8896,0.22809184804735871,0.4707492036142362 hat,eks,8897,0.4271783841263873,0.5474566889867322 hat,zee,8898,0.45420946781919536,0.10354482418357991 zee,pan,8899,0.1500424792671291,0.3904357922605537 eks,hat,8900,0.4705695658454211,0.13058529889276693 wye,eks,8901,0.7851072833003859,0.010949059596507271 eks,pan,8902,0.36598892555347484,0.8692921887688625 zee,eks,8903,0.4231582011204885,0.4821489267549405 eks,wye,8904,0.27693517497385267,0.35861877550118093 eks,hat,8905,0.2021072148174844,0.5782529159344267 pan,eks,8906,0.6095360635614762,0.15147456052535202 pan,eks,8907,0.730295298034919,0.2551125391698271 zee,zee,8908,0.3638375152320661,0.5373463704499434 pan,hat,8909,0.5579467202447957,0.1630566373150174 hat,pan,8910,0.49610253645583846,0.21986829070394298 eks,wye,8911,0.09558215825789063,0.018958306464913255 zee,eks,8912,0.5946765644498425,0.4861950247721053 zee,wye,8913,0.7753872326222572,0.130388837660953 zee,hat,8914,0.8820731335941235,0.12986802677134568 hat,zee,8915,0.4040203950712935,0.04965833346589221 eks,wye,8916,0.46871698272105,0.3462467467139262 wye,hat,8917,0.5720192464320304,0.0819820791306417 wye,wye,8918,0.8054579412182167,0.3836759639818865 eks,hat,8919,0.4742484069291977,0.2514827712591855 pan,wye,8920,0.733610226156712,0.5651397506818968 hat,zee,8921,0.5565613081265703,0.9540215346587051 pan,pan,8922,0.270663413379612,0.4701176631611145 pan,zee,8923,0.1853923248765008,0.0022929560982657415 zee,pan,8924,0.7050433080915809,0.4961082324924917 eks,wye,8925,0.5609329671328473,0.589599688677612 pan,eks,8926,0.5899990569564478,0.9670305978679095 eks,zee,8927,0.6589844496396701,0.07234525669075342 hat,wye,8928,0.9559160182621979,0.2564401800691153 zee,wye,8929,0.7910634287616417,0.5832583369417834 pan,eks,8930,0.9200311370773863,0.8086516025019609 zee,eks,8931,0.7726442152731748,0.3006011490460859 pan,pan,8932,0.9200924471782158,0.30104452372640955 zee,zee,8933,0.4454093296017202,0.3284583037994141 wye,eks,8934,0.42726184573719983,0.9963781447633139 zee,eks,8935,0.4486952558039746,0.4130427561178419 hat,eks,8936,0.9755076232964625,0.6362818073430646 zee,zee,8937,0.5683636673391735,0.329434458320802 zee,hat,8938,0.35289211042725366,0.7543520598626876 hat,pan,8939,0.8511623725969789,0.6164456458973154 wye,wye,8940,0.9818963757219575,0.5755972292005318 hat,hat,8941,0.7568298583150284,0.5846179373919896 eks,hat,8942,0.601894549758784,0.13992074533051124 eks,hat,8943,0.35887195487544743,0.6953516641971523 zee,hat,8944,0.8805088303643233,0.08493946930957796 eks,hat,8945,0.7539371156991909,0.4116992595762401 wye,hat,8946,0.16141868331242304,0.9136362828702729 eks,hat,8947,0.8483324196518135,0.6158053719777993 eks,pan,8948,0.5318875109400665,0.8230182723036877 zee,zee,8949,0.4716296186751222,0.8472833535757873 zee,wye,8950,0.2790928413033852,0.0772468110330039 wye,eks,8951,0.9027943823162313,0.6124436018843183 pan,wye,8952,0.39603795348082305,0.7719031240961284 eks,hat,8953,0.8716876316900987,0.20148989402965545 zee,eks,8954,0.47758220480911473,0.2664181870815133 hat,pan,8955,0.3375565375177234,0.19102233314969186 hat,wye,8956,0.44049488264331627,0.5092306826033091 eks,eks,8957,0.7047805468534891,0.5946651385930218 pan,pan,8958,0.6519485361202326,0.7030912337766829 hat,eks,8959,0.6713731052940981,0.6013560927295543 hat,pan,8960,0.9417167187642326,0.8026299128777213 zee,wye,8961,0.8154052031095614,0.6481399972215665 pan,wye,8962,0.0914057435253639,0.10822318947000709 pan,hat,8963,0.3046680167824908,0.09348404024830137 zee,zee,8964,0.6189408278256606,0.8433159445563726 eks,hat,8965,0.958051223919934,0.5081338063861043 wye,eks,8966,0.8530691152394455,0.8692728927718893 hat,eks,8967,0.8372819315874948,0.8861340588817578 wye,zee,8968,0.9977506774202527,0.9679468301172027 hat,pan,8969,0.45963913428927994,0.2847833031004139 pan,eks,8970,0.34327965136688565,0.2691645574062619 eks,hat,8971,0.24298535978329028,0.6326328755167427 hat,zee,8972,0.5786862872644059,0.8671986650119898 wye,hat,8973,0.7183329442429014,0.3363191065286383 wye,pan,8974,0.551888889672068,0.3209850549321359 pan,pan,8975,0.30697964139250933,0.08659671798153756 zee,eks,8976,0.9556339095055809,0.021482277034970076 eks,hat,8977,0.3585667547454152,0.7507818063628751 eks,hat,8978,0.5232916500187303,0.8753848427459924 hat,wye,8979,0.002400498001248641,0.5428314927562883 wye,eks,8980,0.31030792190565804,0.851109380675088 hat,eks,8981,0.8950141191932938,0.3343291380416574 wye,zee,8982,0.007647040296205221,0.5252318459052353 eks,hat,8983,0.6822585854384956,0.009453423471399658 zee,pan,8984,0.6987813603715117,0.5232757984191948 hat,wye,8985,0.932024395968463,0.9447580630208217 zee,zee,8986,0.8552570190589601,0.08815519942713801 wye,pan,8987,0.27750649660566373,0.76526956752658 pan,hat,8988,0.5404886782798238,0.5374270296539031 wye,hat,8989,0.9762152572727496,0.8712434910014083 wye,hat,8990,0.2691586619417575,0.5122780764115732 pan,eks,8991,0.5236344484593898,0.7020390430173928 zee,zee,8992,0.285347240060405,0.2493240966526331 zee,wye,8993,0.7119318558771737,0.8612125817012293 pan,eks,8994,0.6358666072344865,0.930679583655016 eks,pan,8995,0.43393822544853966,0.5656571369668376 eks,zee,8996,0.014997169280220546,0.38924624193859947 pan,eks,8997,0.006957705982631457,0.27329586967444996 zee,wye,8998,0.45799438726799335,0.020705027471035087 wye,wye,8999,0.18512302956813365,0.7121523046316812 hat,eks,9000,0.33727508102114134,0.13582122939201124 eks,eks,9001,0.517121854692058,0.308749201053908 hat,zee,9002,0.07358032166019501,0.736123828569227 zee,hat,9003,0.004824023551166401,0.759916663671451 zee,eks,9004,0.4893113819292234,0.23390278210191928 hat,eks,9005,0.45618459558425717,0.8962930076422373 zee,hat,9006,0.6562108769673498,0.13991018518940446 zee,zee,9007,0.3650427655416524,0.8531673941547171 zee,wye,9008,0.8282941376563813,0.9889370827954176 pan,pan,9009,0.3878236858466175,0.06714068514516147 hat,hat,9010,0.2007850497817364,0.6400219844960209 wye,wye,9011,0.6252481085403859,0.203071024510721 wye,hat,9012,0.4675098280645633,0.9904823978688722 zee,pan,9013,0.6305143660449302,0.710245374097503 zee,wye,9014,0.16891869382531022,0.37574058303798785 pan,wye,9015,0.3220094028213596,0.4839478151356543 eks,eks,9016,0.5800740825749267,0.8910261945783475 zee,hat,9017,0.9502641304019075,0.8396710982351069 pan,eks,9018,0.4764608908539697,0.4728942258779697 hat,wye,9019,0.272865007065651,0.41472685232133355 eks,hat,9020,0.03877794357017561,0.8924528458892764 eks,wye,9021,0.7714689461624145,0.7234215610234059 eks,eks,9022,0.8213647586189171,0.8993719170687399 zee,zee,9023,0.7890585709155626,0.5099043493783608 zee,wye,9024,0.3645469383907922,0.7980710103585312 eks,pan,9025,0.7614330300379404,0.039049698191956694 hat,zee,9026,0.8364001741754985,0.8590079093968295 pan,hat,9027,0.142586581614627,0.8402014883489196 zee,wye,9028,0.5239151547368636,0.8242755070656802 hat,eks,9029,0.8128575668904885,0.395268947973739 zee,pan,9030,0.5793285227205369,0.8038160807198467 zee,wye,9031,0.42904790956591343,0.292783754196035 zee,eks,9032,0.6146666934752367,0.26568169357263305 eks,eks,9033,0.6937567726575595,0.9601490785081487 zee,wye,9034,0.7679588189607225,0.5157794038228849 zee,eks,9035,0.8214778175820499,0.760903040561442 hat,wye,9036,0.13026398297350839,0.8705769782903738 pan,wye,9037,0.5665532246879906,0.7400695598140006 wye,pan,9038,0.565327438099348,0.231520424905162 hat,zee,9039,0.5300522543665926,0.23348061445665524 wye,zee,9040,0.6003398441074326,0.39489635735776574 wye,hat,9041,0.983147388463674,0.6432444380950916 wye,zee,9042,0.555504813496403,0.005666564490671155 eks,pan,9043,0.5141737191526409,0.23406402155139128 pan,eks,9044,0.4915948295461785,0.5674330258517061 pan,eks,9045,0.4125775873836637,0.9745899732717427 zee,wye,9046,0.27009823817926015,0.5931288546151294 hat,hat,9047,0.49305007094314124,0.3988521392673088 zee,wye,9048,0.852593383706857,0.13271142657885082 pan,wye,9049,0.10903067000808575,0.6457675593887455 pan,eks,9050,0.9286228908161963,0.7128664838636729 eks,zee,9051,0.7368149289050578,0.040114995641035156 pan,eks,9052,0.9883016421626661,0.836414097002929 eks,eks,9053,0.578258852447845,0.6483953013399163 pan,eks,9054,0.4581912096837616,0.2396747725609628 pan,zee,9055,0.3910891811342043,0.3060677650909158 zee,eks,9056,0.1257667798355191,0.22523050330447225 wye,wye,9057,0.8018497438432275,0.13069916829224115 eks,zee,9058,0.46306509283004527,0.6479906691686209 hat,zee,9059,0.8032276523393308,0.5895573796523289 zee,wye,9060,0.9489845382435659,0.7186985210470157 wye,eks,9061,0.5843515776382836,0.09689548652828073 eks,zee,9062,0.29235718302362745,0.8058919599706711 zee,eks,9063,0.3746671187448585,0.7104834374120668 pan,pan,9064,0.957433552072592,0.612273185217601 pan,pan,9065,0.9206660995409818,0.6388548120920611 hat,eks,9066,0.7938077850540011,0.9840395711931128 eks,eks,9067,0.7586156840742447,0.9657635310428576 zee,wye,9068,0.03525325620506059,0.20286396861407563 wye,wye,9069,0.9854601376745921,0.28297920890020123 eks,zee,9070,0.7790422604287773,0.28267242056842967 wye,pan,9071,0.9604400242139107,0.09079642708772462 wye,pan,9072,0.5208132164872745,0.013972758368806626 eks,eks,9073,0.2792153884168088,0.7248580986479927 pan,wye,9074,0.9826230778886313,0.30895404125911885 zee,pan,9075,0.3488738872635716,0.8235123319669855 eks,pan,9076,0.9828706810264064,0.7255065121370968 wye,pan,9077,0.285398788706721,0.4224009700612671 hat,hat,9078,0.049288778502150965,0.996399226324633 eks,wye,9079,0.2615316643364618,0.22800118037634576 zee,zee,9080,0.4293043221770476,0.17146941589040998 pan,zee,9081,0.00020390740306253097,0.858089025239552 zee,wye,9082,0.2857614979340398,0.6179068250859443 eks,zee,9083,0.23246167408482288,0.22121933132231686 zee,hat,9084,0.3023274634670656,0.3919343366566008 wye,zee,9085,0.48017021719327857,0.0007369823565522848 eks,pan,9086,0.43284428230137006,0.6679282652138314 wye,eks,9087,0.5126283529841884,0.414628158508178 pan,hat,9088,0.10076670744312233,0.924513056086707 eks,hat,9089,0.17655473424651258,0.027572342702157582 zee,hat,9090,0.32515391353663414,0.24968345250419 hat,hat,9091,0.40076821857198996,0.6602879383328565 zee,zee,9092,0.26080219359430634,0.6103007265821453 pan,hat,9093,0.2925006896788842,0.6480842668339396 pan,pan,9094,0.9716001304365217,0.6469197673672618 eks,eks,9095,0.5806604417079977,0.3031395509663418 eks,eks,9096,0.3734935600143474,0.5772166478411038 zee,zee,9097,0.9600502263246077,0.39644027119291114 wye,hat,9098,0.2804902678845115,0.048162079204052355 eks,zee,9099,0.43507793732310474,0.3953634078162601 pan,eks,9100,0.4123076209388652,0.8034708206600174 zee,eks,9101,0.39275338043203933,0.6958341586624519 pan,hat,9102,0.28992810063257124,0.0936263604214349 hat,hat,9103,0.05803247800352507,0.5686807585943757 pan,wye,9104,0.27797911143024934,0.942706265472493 hat,hat,9105,0.4895163425613803,0.033340055000638746 pan,zee,9106,0.44873266752482066,0.15530029661112588 pan,wye,9107,0.34313847787795904,0.2784766094254877 hat,wye,9108,0.614870837142051,0.3488517641548976 eks,hat,9109,0.9754089146191263,0.5077651396700906 hat,zee,9110,0.6804708680166679,0.5357141089061417 zee,zee,9111,0.0703606204232261,0.6245056563608682 pan,wye,9112,0.3153235029768974,0.5484733757485007 eks,wye,9113,0.49754317676073356,0.5477171066757857 eks,wye,9114,0.9835650326182704,0.8742646308873757 wye,zee,9115,0.10698858622424778,0.1221930347907727 eks,pan,9116,0.8096317851752184,0.4495015727565027 pan,eks,9117,0.03509835946106599,0.4760601952379325 zee,hat,9118,0.6070026967820008,0.27123198811450044 eks,hat,9119,0.4790316458227425,0.39259275204959654 zee,eks,9120,0.8458192848056897,0.9572808268819287 pan,pan,9121,0.9385839358069921,0.6047637384188489 eks,pan,9122,0.45413891231860504,0.7591849964061139 pan,zee,9123,0.026931116208210204,0.552290792057422 wye,pan,9124,0.271590915264334,0.042888205379760125 pan,wye,9125,0.004588040579576735,0.6300579166147449 wye,wye,9126,0.5171856925914533,0.24961569992529742 wye,pan,9127,0.8948475255545615,0.6574529698134108 wye,hat,9128,0.3669933618796106,0.37512574289121725 pan,hat,9129,0.6586229255026295,0.1784724547766009 hat,zee,9130,0.27552193496369337,0.6578126148590314 zee,pan,9131,0.6444063407232797,0.4063279946367009 pan,wye,9132,0.6455902674388132,0.5382099179246037 hat,pan,9133,0.9317711632235914,0.3230694970784014 eks,hat,9134,0.16612397042168814,0.3555728981905678 wye,zee,9135,0.7750442450200157,0.06656439748434029 zee,pan,9136,0.5002884150544058,0.21659717683648372 zee,hat,9137,0.0053168417053239825,0.23970890502186593 hat,zee,9138,0.05408301987702224,0.8596429828563238 zee,zee,9139,0.24544320815673137,0.677429657112386 zee,pan,9140,0.5013642860004229,0.6650678922317501 eks,hat,9141,0.39054802020070156,0.06891218601149551 wye,hat,9142,0.29433621999949233,0.7751648810637005 wye,hat,9143,0.4460302810053538,0.040278587711885305 hat,eks,9144,0.30372533545667213,0.4297094831523881 zee,eks,9145,0.00769664097559164,0.1446289205179656 pan,wye,9146,0.9108896246536903,0.20685277919402034 wye,pan,9147,0.8702610842064613,0.13016678459764375 pan,wye,9148,0.7394828765293925,0.9475622732914554 zee,pan,9149,0.22357262525185106,0.20550777850363977 zee,pan,9150,0.7364509479059471,0.5273598026796336 zee,eks,9151,0.3216536526700301,0.23861396443066107 hat,wye,9152,0.629862943457729,0.2161824319117963 zee,wye,9153,0.7713603997995606,0.8927934282961629 eks,eks,9154,0.8033015390132335,0.7428789028852476 hat,pan,9155,0.4469843980869507,0.18928924828611082 wye,wye,9156,0.500390135135027,0.8848611838558533 zee,hat,9157,0.6459716786543495,0.8783255778315494 zee,pan,9158,0.829825296282736,0.9403424810846446 hat,wye,9159,0.6553956343389391,0.1525879472674848 zee,eks,9160,0.6080812576081395,0.3155419271117481 wye,zee,9161,0.9794920335555851,0.5208178578405636 hat,pan,9162,0.36011363532418106,0.3418468995076799 pan,wye,9163,0.37797791224139665,0.39353695559343227 hat,zee,9164,0.8838448430378912,0.7958865093747128 zee,zee,9165,0.7783131261247423,0.7403476431916528 eks,eks,9166,0.22004086657109556,0.19736319549096537 hat,wye,9167,0.6758868789217809,0.24720804895114945 wye,pan,9168,0.5370077637228887,0.6389653169963743 pan,zee,9169,0.030815090059835182,0.017547992939040524 wye,wye,9170,0.8353343256800804,0.3768654473939027 hat,zee,9171,0.46003847353195026,0.4354345395691309 hat,pan,9172,0.032538252982685534,0.988500077283618 eks,wye,9173,0.034581992091101466,0.7801643183419578 eks,zee,9174,0.6550305066967593,0.16344251291756706 zee,wye,9175,0.19674254649951783,0.18304515051083692 eks,pan,9176,0.21328957209812893,0.13489440510159378 pan,eks,9177,0.005689888388995534,0.19304812808970884 zee,pan,9178,0.9154191363169403,0.032732957728748735 zee,zee,9179,0.9807519030460864,0.4665860553591783 pan,pan,9180,0.6528911310033898,0.7987231494976602 pan,hat,9181,0.6407905148282739,0.7653184860370159 wye,pan,9182,0.9562838531255896,0.27319300978963235 zee,eks,9183,0.8789109160607933,0.6764597514962247 hat,wye,9184,0.0454922541303826,0.7789503923765669 zee,hat,9185,0.9488182203633042,0.20055459864504688 pan,zee,9186,0.8094929584839381,0.017753827357001706 zee,eks,9187,0.9492829297817624,0.9675987602030636 hat,wye,9188,0.5484371698132414,0.48898521397678274 zee,hat,9189,0.698589129880174,0.4354385113427839 pan,wye,9190,0.8371899774027962,0.7968937186611519 wye,zee,9191,0.021517369039138368,0.1381446138482929 eks,zee,9192,0.2695667438992312,0.28074171138048576 wye,pan,9193,0.894511626988757,0.938591468790241 wye,pan,9194,0.12628217214956572,0.6168175982380071 pan,zee,9195,0.5535590246543304,0.2526444377074163 hat,hat,9196,0.3980083533361548,0.12546876469790447 wye,hat,9197,0.3508027024722644,0.8470842806054778 pan,pan,9198,0.6918350451415268,0.7037194771160388 pan,wye,9199,0.09935798556479436,0.8306198911393249 eks,wye,9200,0.5817459757102148,0.7926589099732673 wye,pan,9201,0.6973989669681704,0.029025785391803005 hat,wye,9202,0.541438501860869,0.43313624277905893 zee,eks,9203,0.03325991383215876,0.7053312999685288 hat,pan,9204,0.972877655785142,0.2339442404736457 wye,pan,9205,0.650403525932319,0.3896918481459313 eks,zee,9206,0.38877534437698114,0.570145295749778 eks,wye,9207,0.4768627348776039,0.8140053040358975 wye,eks,9208,0.7602904558546134,0.40132374234963053 hat,eks,9209,0.9001439023825403,0.03672742376278848 pan,eks,9210,0.9435871837198925,0.17154456862061596 pan,hat,9211,0.6420793762242888,0.686212047389247 wye,zee,9212,0.5791530677301323,0.4958922872459267 zee,pan,9213,0.5172383902917987,0.415686177469048 zee,zee,9214,0.5228330684403698,0.9018872431686975 eks,wye,9215,0.04381430874634051,0.6032242723440449 wye,pan,9216,0.945612107018632,0.5963971999452331 pan,hat,9217,0.5519808331424808,0.037818522708640945 wye,pan,9218,0.45248627667931407,0.9107065056547308 wye,pan,9219,0.9023383971006868,0.007488783487717088 hat,wye,9220,0.7052123508658505,0.38765508481678934 eks,zee,9221,0.41382740826608244,0.477677197129144 hat,eks,9222,0.6481864881498441,0.5386696824239133 wye,hat,9223,0.677511714967485,0.2245548025295082 zee,eks,9224,0.23401414583819413,0.9738879243097983 wye,pan,9225,0.8767378564000506,0.4275905594606648 pan,zee,9226,0.4240169603576853,0.8296431435579869 hat,pan,9227,0.946179027020023,0.5244012924468459 pan,zee,9228,0.05618069066896114,0.7424835122028975 zee,wye,9229,0.40650226274306367,0.9887079480722842 pan,eks,9230,0.3504445487923017,0.0696878797080479 wye,zee,9231,0.9610972939563219,0.9615810406623142 eks,wye,9232,0.9834939198983763,0.902120163211437 pan,eks,9233,0.8804184286373076,0.4945856574840146 wye,wye,9234,0.07920533790072082,0.4210755544521094 eks,hat,9235,0.48788423763049804,0.4836801731961293 wye,eks,9236,0.9192818812102141,0.1515679068232202 hat,hat,9237,0.7302582849873859,0.6347279985888814 zee,eks,9238,0.7403878392403773,0.34071315515449585 pan,pan,9239,0.8213696571357758,0.17138348492013578 wye,hat,9240,0.8014369373980875,0.814100095516592 pan,pan,9241,0.3913547136873715,0.54960018873529 pan,zee,9242,0.9438072144493844,0.06767533471560916 wye,zee,9243,0.5569913771099433,0.18691552708330927 pan,wye,9244,0.2905201186571721,0.43425495374391 pan,zee,9245,0.29006760780733076,0.9489792158642996 wye,zee,9246,0.21902763341829212,0.7943599432988762 wye,pan,9247,0.8348408249460723,0.45052677140725683 zee,eks,9248,0.26940493140011434,0.9610522390775448 eks,hat,9249,0.39091312069697004,0.3308378438144999 hat,wye,9250,0.2762755403834666,0.9174844589095804 zee,wye,9251,0.4183886566774483,0.9616112086487094 hat,pan,9252,0.03920827797790982,0.7576567680032309 zee,pan,9253,0.9673157002999003,0.7433452506349982 wye,eks,9254,0.924508714560465,0.19996024545680346 eks,pan,9255,0.4613513625777358,0.13932504620685293 wye,hat,9256,0.961942362261845,0.9395596121676374 zee,eks,9257,0.8279072561096625,0.8490761119202441 wye,hat,9258,0.22113630994807887,0.04508156412906639 wye,hat,9259,0.5343061739795472,0.3925155297434233 hat,eks,9260,0.6027628673680535,0.29907777128173474 eks,pan,9261,0.269529051685529,0.4796863618360836 wye,wye,9262,0.09116905745671411,0.6431265280186941 pan,wye,9263,0.18094504922785837,0.6552196736780825 hat,zee,9264,0.023456730670551096,0.1975931324733875 zee,pan,9265,0.007623684349103987,0.07551340520872629 eks,eks,9266,0.17817560372002472,0.49956704475839064 pan,pan,9267,0.04690229807589086,0.1929566014362788 zee,eks,9268,0.3470560427863578,0.3275172947002548 zee,hat,9269,0.5409419616161683,0.3958039424067026 pan,pan,9270,0.1487528959524752,0.4469367832007153 pan,wye,9271,0.24595184073704124,0.48817169012236983 hat,eks,9272,0.8194471147409262,0.06810057179235018 hat,zee,9273,0.4611616764401677,0.8051508540162687 pan,hat,9274,0.5857275960463182,0.1154346418508585 eks,wye,9275,0.09259540108550524,0.21275003504178946 zee,pan,9276,0.684545528802376,0.5890511399726057 eks,zee,9277,0.8931272247478754,0.9108980465393053 wye,hat,9278,0.4908268342979165,0.1022036634900918 hat,hat,9279,0.2967586295179133,0.28353991288502345 eks,wye,9280,0.7214470432782933,0.3196837745294565 zee,eks,9281,0.5357035342523082,0.4498861677161915 hat,pan,9282,0.7019948002783253,0.631688166262754 wye,eks,9283,0.3146560370204342,0.9598216687345593 wye,wye,9284,0.6806389501871987,0.6623844311258401 hat,hat,9285,0.4737832453554822,0.41355006089770063 eks,wye,9286,0.9872826301151825,0.2639815365115553 eks,zee,9287,0.8397334293185692,0.5061677209701542 zee,hat,9288,0.21107288266906798,0.6423943950594364 wye,hat,9289,0.9539770475173472,0.33368774127122824 pan,zee,9290,0.3192448675700893,0.44823866938306645 zee,wye,9291,0.9454063570448517,0.8966671326133628 pan,wye,9292,0.23598454792188905,0.19161925423381865 eks,wye,9293,0.7765814539440627,0.3128212435040012 eks,pan,9294,0.6560425166942336,0.6540980604466382 zee,hat,9295,0.6842327967828038,0.22627755842144792 wye,wye,9296,0.4655851206978665,0.572270128810435 hat,pan,9297,0.04780798739920045,0.884344079010386 wye,zee,9298,0.6400110650985101,0.5918078681573676 hat,pan,9299,0.7099587184174139,0.026383946823356652 hat,pan,9300,0.8979895176793228,0.32530725941578 pan,pan,9301,0.9138183195198948,0.7104753541099725 hat,eks,9302,0.8146457149078221,0.49936330932918804 pan,hat,9303,0.19068920109866783,0.5863544157356678 hat,wye,9304,0.7296704964431727,0.7521653716034574 eks,zee,9305,0.06306304065329327,0.0425317362399702 hat,zee,9306,0.5892447648917019,0.26424215126062567 zee,hat,9307,0.40286235516928426,0.8843324963600357 pan,hat,9308,0.6041097470881792,0.6019432291571227 hat,hat,9309,0.5418892395718498,0.3894965192603561 zee,zee,9310,0.0489167780793065,0.1349420473135753 zee,hat,9311,0.9072476732379934,0.9064380734997842 zee,hat,9312,0.47773815390175445,0.7350455011720012 wye,wye,9313,0.8777070865064334,0.688500944696727 zee,eks,9314,0.23207083417195573,0.1459854668671191 eks,hat,9315,0.5953234480197771,0.17617996349844 hat,pan,9316,0.4588300778601382,0.6017358841802433 eks,pan,9317,0.7067142230113493,0.8603219297899701 eks,wye,9318,0.8917960222408765,0.13297569276200116 zee,pan,9319,0.32868846620305514,0.23221497395763813 eks,zee,9320,0.2336595066443039,0.5433625711598566 wye,wye,9321,0.08724329840345546,0.526071263228722 hat,eks,9322,0.4540531923441389,0.08529592575810008 pan,eks,9323,0.015142033208188965,0.9025875096361236 eks,pan,9324,0.2776566751941013,0.5186679560214653 zee,pan,9325,0.21535440536922212,0.5985912955734372 eks,zee,9326,0.9314022909750975,0.48900523853727407 pan,wye,9327,0.6213414890218699,0.3534669210352892 wye,wye,9328,0.5529670045133065,0.3657722177869842 pan,pan,9329,0.709436743485784,0.864805283294307 wye,hat,9330,0.7856558845965795,0.1735275218393233 wye,pan,9331,0.15157491016759606,0.1781007458002013 hat,pan,9332,0.469941809547738,0.17916634366371342 zee,hat,9333,0.09066429132809939,0.11291661870669667 eks,hat,9334,0.524982507717917,0.7739607975739912 zee,zee,9335,0.012865744128303103,0.4199812901617862 hat,wye,9336,0.3598356400708439,0.6497623418471714 eks,wye,9337,0.967092843190403,0.7129610451088223 zee,pan,9338,0.8766283655189672,0.8633718650644421 eks,wye,9339,0.3555024023169856,0.8712144867378462 pan,pan,9340,0.24667037823231752,0.930054068315833 pan,eks,9341,0.9847985606188508,0.002920168705884074 wye,zee,9342,0.6598872721679194,0.5841487864376177 pan,hat,9343,0.11586150580933774,0.8232025034483835 pan,eks,9344,0.23032551308519345,0.4668513513037823 zee,zee,9345,0.20721325482748,0.034658616763860395 pan,zee,9346,0.16804254918956518,0.41515674460320806 wye,hat,9347,0.9555426542676889,0.3336472181106118 zee,eks,9348,0.027241967830535785,0.6546273692203828 zee,hat,9349,0.39077150740400146,0.35499431123174563 pan,wye,9350,0.897415684005392,0.0054949420910770375 pan,zee,9351,0.6475971487532642,0.2993123271198067 zee,wye,9352,0.25522951350527867,0.48668317596678823 hat,wye,9353,0.6279030165419767,0.14783115221664478 pan,eks,9354,0.0010353989176113965,0.7228482030180055 hat,eks,9355,0.7415812921258672,0.5371997970549264 eks,zee,9356,0.3273618744303315,0.7034589444097167 eks,eks,9357,0.7638755117313554,0.37304708043971646 pan,zee,9358,0.7274485972079328,0.027395796712653575 eks,pan,9359,0.726201179013375,0.8974974727334436 wye,hat,9360,0.009237964269686039,0.6456624352507632 wye,eks,9361,0.9893854310908603,0.6762929165737711 pan,hat,9362,0.021355365998413367,0.8849112911074679 hat,pan,9363,0.24144536935297445,0.2588538401367807 pan,eks,9364,0.20906377399579568,0.26492309174424467 hat,zee,9365,0.2716712677588158,0.7480148549966943 zee,eks,9366,0.564783511562303,0.8736158892678358 zee,zee,9367,0.5210119669704992,0.6601277179108643 zee,hat,9368,0.09391533461405244,0.8033292481660601 eks,pan,9369,0.47109046860253434,0.7533692481022667 eks,wye,9370,0.45402522126988876,0.3506046491270858 hat,wye,9371,0.3288376239355628,0.9711363417175689 hat,zee,9372,0.04803081055457803,0.9237983355638324 hat,eks,9373,0.13505404407952326,0.9843128058775863 hat,zee,9374,0.1687355361920142,0.5136082981945438 zee,wye,9375,0.5866436779364502,0.49139965761407123 hat,eks,9376,0.7413691108319418,0.6875522126693252 wye,eks,9377,0.8850578085185158,0.12984077539965466 zee,pan,9378,0.07698056466866121,0.3418330456253533 hat,hat,9379,0.6567829350592936,0.42166759832139167 eks,pan,9380,0.2066941665945501,0.34630072002937273 hat,hat,9381,0.3011098756670775,0.8241475200392532 hat,eks,9382,0.1595168703472838,0.9632363240817852 eks,eks,9383,0.316374240183787,0.894701260202343 eks,eks,9384,0.6925067244014451,0.5943855874672127 pan,hat,9385,0.8929259869658823,0.13255544013678944 eks,hat,9386,0.9458375043305679,0.0711986701172268 pan,eks,9387,0.42414161600219213,0.8727447652075521 pan,zee,9388,0.16102926470006396,0.7076666589050068 eks,wye,9389,0.38573189008702746,0.7862235218204946 pan,eks,9390,0.009185746132245987,0.9615590214943641 hat,eks,9391,0.6541239333254625,0.4465038993768474 zee,pan,9392,0.7293619733667298,0.9075863768811903 eks,zee,9393,0.5270647942493862,0.3208644368195749 wye,wye,9394,0.10611623011471227,0.3957794249815757 wye,pan,9395,0.04167582918996382,0.9345423545353554 zee,pan,9396,0.6285537391072125,0.9531200799497426 eks,wye,9397,0.22691889482992367,0.821434358932521 pan,wye,9398,0.8650573724586973,0.5778302746561125 wye,zee,9399,0.4320795547957027,0.23858094801157526 hat,wye,9400,0.2940385536354171,0.23832353705367249 zee,eks,9401,0.42923024441857793,0.17544011645116253 hat,pan,9402,0.050855729288162066,0.7490381251654518 zee,eks,9403,0.2945793937707598,0.7184571034764143 eks,pan,9404,0.18971476661419018,0.8587967149525896 hat,hat,9405,0.8781331270774858,0.22282398620968602 zee,pan,9406,0.6365186667658354,0.8944728240200203 eks,zee,9407,0.6393982916726031,0.42468859570082085 pan,wye,9408,0.12426748935771803,0.0845763991164874 hat,hat,9409,0.8968671619037487,0.17554843424501398 hat,wye,9410,0.008668685325378456,0.5585204180254394 hat,pan,9411,0.9186069486489989,0.8447036557059203 zee,wye,9412,0.20193830450565098,0.5853957332725758 pan,wye,9413,0.9095023537816819,0.03850690961125591 hat,eks,9414,0.2255272659717531,0.35264234784519843 zee,hat,9415,0.008811072137013154,0.035134463676480765 eks,zee,9416,0.25375738274931314,0.2401418182493137 hat,hat,9417,0.9120549045686616,0.8777751478548385 eks,zee,9418,0.6260065420723087,0.5130847407197059 wye,eks,9419,0.05078132617198228,0.6850739609021935 wye,hat,9420,0.5546625744389891,0.592423843346026 eks,pan,9421,0.3027881637101668,0.6808643872207955 wye,wye,9422,0.37276454834771744,0.8714783706587489 wye,pan,9423,0.7419375666814781,0.637584961040595 zee,wye,9424,0.7703279734371525,0.06486561364647381 hat,eks,9425,0.5549660221796285,0.025089141119986502 hat,wye,9426,0.09307376603254536,0.9353448863380895 zee,hat,9427,0.1030256845979749,0.7734068134003184 zee,hat,9428,0.653199130802959,0.6335896172568141 zee,hat,9429,0.532354384202152,0.6240035856800994 zee,wye,9430,0.34274658023426774,0.30318681846915607 zee,zee,9431,0.5467923659024335,0.7749657540239817 zee,eks,9432,0.011838772084611482,0.1275339102058447 pan,eks,9433,0.8206211659130856,0.3064654802677319 wye,hat,9434,0.017191670800521974,0.7085199387051128 eks,wye,9435,0.06360578109666282,0.46325468037532036 hat,wye,9436,0.7601470639179305,0.659295809995321 wye,eks,9437,0.9367938724373632,0.017440063316899512 eks,wye,9438,0.08469295491745277,0.6859916432738016 pan,pan,9439,0.8916122427540487,0.3044045541494258 wye,zee,9440,0.5929171430130797,0.7244452361008757 eks,pan,9441,0.6555419304461224,0.8327927199446215 hat,zee,9442,0.3102917611279977,0.1420968126103015 pan,wye,9443,0.5029377247494847,0.13904388591573225 zee,pan,9444,0.09343968982332573,0.08259490069798114 zee,zee,9445,0.7881482118621499,0.14841414165625988 hat,wye,9446,0.17230938096585302,0.4547425422305543 hat,wye,9447,0.9179072696408536,0.07438240520747308 pan,zee,9448,0.1174681478790296,0.24900650669165836 hat,wye,9449,0.47777327288439886,0.6489946706089305 pan,wye,9450,0.012891972793683926,0.6683256849475698 eks,eks,9451,0.3293644408777492,0.4858482434549475 eks,hat,9452,0.06728855986596627,0.0225203259981267 zee,wye,9453,0.6954345063830266,0.39093627278723897 eks,eks,9454,0.6561623394687102,0.8733561225304062 hat,hat,9455,0.7967671268259048,0.9988457558727984 eks,hat,9456,0.3026733411299638,0.009039229737229593 hat,zee,9457,0.048573658961714505,0.6212752707665637 hat,eks,9458,0.3567374350316811,0.5763840507853728 wye,hat,9459,0.6222194995601943,0.7094551547783764 zee,zee,9460,0.20547852694177993,0.6209825112942681 zee,zee,9461,0.9078512942646408,0.457893412939096 zee,pan,9462,0.3728674304211519,0.12798138723542984 eks,zee,9463,0.9866166648988529,0.17872754778259448 eks,hat,9464,0.8408137777713087,0.7528260965110807 eks,zee,9465,0.33674248998876777,0.10313732374119522 zee,hat,9466,0.7785160988373221,0.9149400917302326 pan,pan,9467,0.6408147454849812,0.8180389929482121 eks,wye,9468,0.4450915490400188,0.8824862158939643 hat,eks,9469,0.7744532386038095,0.8239793457702959 eks,zee,9470,0.3380551755097342,0.9960822877834217 pan,wye,9471,0.19841074697657957,0.585082594173758 pan,wye,9472,0.24546532083386097,0.7604287018742679 zee,wye,9473,0.7950056898263439,0.3564547166869826 zee,hat,9474,0.647685209897895,0.8836053801968514 hat,wye,9475,0.6632008131941411,0.4341909885612145 wye,hat,9476,0.3069739795755916,0.8833844662300937 zee,wye,9477,0.8339299679122139,0.3475658687207359 pan,pan,9478,0.061365475952511406,0.818350624274383 zee,pan,9479,0.52329697201472,0.43298303575134856 wye,zee,9480,0.8749976408632957,0.6548646339660915 wye,pan,9481,0.5642187826825651,0.34484130192623874 zee,wye,9482,0.8624170951363191,0.39655837242080083 wye,zee,9483,0.8152545316901858,0.805340784776813 wye,pan,9484,0.6372765009756718,0.9390350932955009 pan,hat,9485,0.9951942673622418,0.24029104242438515 zee,pan,9486,0.5811802467756935,0.2889437683040591 zee,pan,9487,0.4993989664425713,0.05807295824271008 hat,eks,9488,0.2735790874645423,0.9082260037697276 pan,eks,9489,0.6975989077779615,0.09410891805021981 eks,wye,9490,0.3047068029924873,0.45677847562149443 eks,hat,9491,0.8064028259566911,0.23750639868456547 wye,pan,9492,0.8385671784002926,0.16511708685555704 pan,zee,9493,0.14382267645371283,0.30310643623917777 wye,zee,9494,0.1971697941455559,0.9572851470177893 pan,zee,9495,0.7883366151370216,0.3948433476009946 wye,eks,9496,0.6409095653823011,0.9562448788009965 eks,pan,9497,0.5364899166331132,0.2068390306785195 zee,zee,9498,0.8078967452757337,0.3300003462355645 pan,hat,9499,0.6409505992060831,0.8924125083478576 eks,eks,9500,0.7367548086654266,0.1195022439518929 wye,hat,9501,0.7080642380603698,0.2215162974776509 eks,pan,9502,0.16573428170345306,0.41898077136905765 eks,wye,9503,0.36724763207097333,0.20835207321889548 wye,zee,9504,0.39741592004944626,0.9293543997296885 pan,wye,9505,0.9560872444441273,0.07372493247854506 hat,zee,9506,0.8278984427570538,0.42279600093868386 pan,zee,9507,0.7813724544334408,0.8453351473597829 wye,wye,9508,0.7441125682394683,0.7008423538608134 pan,wye,9509,0.9777133094457836,0.8770140891389367 pan,zee,9510,0.5805152904440047,0.7292694938520734 hat,zee,9511,0.6147425358709413,0.07609273803938887 pan,eks,9512,0.8889876510183636,0.5398130117495377 zee,hat,9513,0.9304009976201171,0.7707216462443467 eks,wye,9514,0.30105501363454046,0.6134456172343001 zee,zee,9515,0.49203474036972605,0.8884765700634494 pan,zee,9516,0.19069582221512293,0.18374946422400285 hat,zee,9517,0.7026133177880014,0.6466476553765019 zee,zee,9518,0.9360532474806631,0.3150191945268458 hat,hat,9519,0.7398790596655229,0.39271231521470007 hat,wye,9520,0.4732400431646818,0.9988992430260081 eks,wye,9521,0.5220677770619295,0.22799544453185772 zee,zee,9522,0.42835064707125325,0.5919336704352758 hat,wye,9523,0.9605618074441231,0.4152052252584968 zee,eks,9524,0.9170688313846707,0.5069375781460218 wye,pan,9525,0.3863168227783099,0.9070811441436243 pan,pan,9526,0.2141091210993753,0.3444756388829696 pan,pan,9527,0.8963731964519087,0.4182877370577519 zee,wye,9528,0.8576581178453184,0.5844216436491058 hat,pan,9529,0.15630461982613209,0.4213024290362597 wye,pan,9530,0.9935514622913653,0.0905032997544325 hat,hat,9531,0.6515604108858241,0.1838995493742861 wye,eks,9532,0.7441241444485516,0.07237060435987241 hat,zee,9533,0.14919839526856782,0.36262847729045855 pan,zee,9534,0.028605382208390595,0.3310651782769932 eks,eks,9535,0.2897105250506825,0.7327433725996669 wye,pan,9536,0.3206273570986442,0.6278333197115907 pan,pan,9537,0.6651951277546836,0.04848147036578743 zee,hat,9538,0.6252849020303484,0.6594304208970674 hat,pan,9539,0.19370943950685016,0.9984558689466796 pan,hat,9540,0.9246863327027597,0.8632603228617942 hat,eks,9541,0.4067481238813502,0.23429602829888707 wye,pan,9542,0.021183317661808254,0.17173704813590862 hat,wye,9543,0.5871893596056772,0.4980677307811977 zee,hat,9544,0.8363252040733755,0.9066361832913213 hat,wye,9545,0.8237931228490942,0.6154262745221335 eks,pan,9546,0.40720117438767467,0.23973575256875324 zee,hat,9547,0.262730021858643,0.9775392644170577 eks,eks,9548,0.18870561616460124,0.39344511734853893 hat,pan,9549,0.810156100508244,0.8042316538504537 eks,pan,9550,0.15708603238162966,0.1775120949821959 wye,pan,9551,0.27897262749013574,0.6810625461380688 wye,hat,9552,0.7096131782065784,0.9809388281353744 wye,zee,9553,0.7419668715219193,0.8915237603968896 pan,hat,9554,0.3423989249268735,0.9243111067539105 hat,zee,9555,0.24555292038029897,0.48675495523019463 pan,wye,9556,0.24636402971605553,0.5875667064956803 hat,hat,9557,0.0708280418080367,0.028042679168150064 zee,pan,9558,0.6684221558470672,0.30650078371682876 zee,hat,9559,0.43239927669791367,0.9087149456158999 hat,eks,9560,0.4502257867908256,0.24215826461552248 hat,pan,9561,0.3883496618282979,0.22856613973468343 pan,zee,9562,0.38705906045142546,0.8201861527861242 wye,hat,9563,0.7048435545008259,0.48292367120675417 wye,wye,9564,0.31482422203360294,0.7773413323819734 eks,wye,9565,0.9044412102611812,0.9981501201118028 eks,pan,9566,0.8603999193559607,0.050257998909329804 hat,pan,9567,0.3290021077530395,0.39186940599147513 hat,hat,9568,0.5173577930271901,0.5140354310886103 eks,wye,9569,0.7320928489540067,0.32241117771050576 zee,pan,9570,0.6962209074556881,0.9192719817135738 pan,hat,9571,0.888257035194179,0.2504282311488486 eks,eks,9572,0.9118388496610922,0.4477922591240877 eks,eks,9573,0.6740019306244561,0.08236636121482144 wye,hat,9574,0.0519270658523715,0.5083523326544599 eks,zee,9575,0.43349880702663446,0.2019764764745724 eks,wye,9576,0.40205714986858077,0.4741982385845239 pan,wye,9577,0.881168878098415,0.19056106338416623 hat,pan,9578,0.7487655114338957,0.17555433868225578 hat,hat,9579,0.8966618053662483,0.4330076918462582 zee,pan,9580,0.7965009504831406,0.7113454506506395 zee,hat,9581,0.2752580210770491,0.38383648901881584 zee,zee,9582,0.05859657717284972,0.4628784062589941 eks,wye,9583,0.8996740267247002,0.5650994189598781 pan,eks,9584,0.02695408257021037,0.29013109754146693 eks,pan,9585,0.4535709808960595,0.5806226415527737 wye,zee,9586,0.5222675900946373,0.2730687743275988 hat,wye,9587,0.8298282901710073,0.4244293086366463 zee,pan,9588,0.6700466485802432,0.8589272032654192 eks,zee,9589,0.9276643978084914,0.5258608330900789 zee,wye,9590,0.8441314279623635,0.9332236415562302 eks,hat,9591,0.4827772018239752,0.5265209579835296 eks,zee,9592,0.26199786487068166,0.6277586753372824 pan,zee,9593,0.5450234908021439,0.08615595529756348 pan,zee,9594,0.23590110682049703,0.4376160303971274 eks,eks,9595,0.28340752983264006,0.11403963974075082 zee,eks,9596,0.35304408286489164,0.8124829013597039 pan,eks,9597,0.12573249703948852,0.7661395734572027 wye,wye,9598,0.5312315260758368,0.8829573415823095 zee,zee,9599,0.5367647772694465,0.8214571633873584 pan,eks,9600,0.014723374949171641,0.5395465432733608 wye,hat,9601,0.07895223840580223,0.194977597106609 pan,pan,9602,0.8253467012158633,0.1789489998930841 wye,hat,9603,0.8921240644062436,0.4426730752788607 zee,wye,9604,0.06643820319339155,0.53243917974831 zee,eks,9605,0.20698996963521232,0.1727878106962335 hat,wye,9606,0.8834303299307495,0.5688694060075045 pan,wye,9607,0.7447919202299266,0.288491034452374 wye,hat,9608,0.5353991342820382,0.17933052450743758 wye,eks,9609,0.6154267547093157,0.6251702670753683 wye,wye,9610,0.6498025682619308,0.7373575543454602 pan,pan,9611,0.5949770409017805,0.12908671407875727 pan,hat,9612,0.33776075209807155,0.9036967387336143 wye,wye,9613,0.22534868678381625,0.2948136458395363 zee,hat,9614,0.18625473663791048,0.9908832589746321 wye,pan,9615,0.9704362849821679,0.7056997811176895 wye,pan,9616,0.045274112402005295,0.927169630245143 wye,eks,9617,0.47705336261321385,0.6750550500462088 hat,hat,9618,0.12470215534695595,0.6384166019909083 zee,eks,9619,0.2581941043200088,0.9649567414630514 eks,pan,9620,0.9018226733942377,0.36177533283317176 eks,wye,9621,0.9710728242015396,0.03785169422146961 eks,hat,9622,0.3797960123033828,0.8885266797541085 wye,wye,9623,0.8866788918745252,0.1725138886130947 pan,wye,9624,0.7133865698466841,0.929260666330654 zee,eks,9625,0.4926378355160854,0.7904306245961183 hat,zee,9626,0.6958926586419276,0.9430927470576268 eks,pan,9627,0.835956453698831,0.9007142296516358 eks,eks,9628,0.6999306667567604,0.780471447448193 pan,wye,9629,0.09405147784147772,0.11479025012357491 pan,pan,9630,0.5521126309556411,0.9964281092981838 pan,wye,9631,0.05531336390926278,0.03713539762104867 pan,eks,9632,0.06596720074216122,0.5047584331504461 pan,hat,9633,0.7402115896026022,0.8286389697202792 pan,wye,9634,0.24820023272983005,0.23862519520811787 hat,hat,9635,0.46092562373997625,0.6247131098820621 pan,zee,9636,0.28131833297516473,0.8846710544611799 pan,wye,9637,0.8663800328522322,0.9391569730896534 pan,hat,9638,0.833781456495762,0.7668042837631657 eks,pan,9639,0.382030344664966,0.7882388680685686 hat,hat,9640,0.463917278383292,0.3511187165916906 eks,wye,9641,0.529202227506829,0.8125205279022973 pan,hat,9642,0.9841563799754587,0.7384543484249447 eks,wye,9643,0.4320217008326096,0.9206705868869096 zee,wye,9644,0.44428785284867134,0.5020097257793937 hat,hat,9645,0.9504824754631439,0.09348851365055577 wye,zee,9646,0.33420875392550375,0.5893334569374644 eks,zee,9647,0.5673775461311286,0.12307074649995897 hat,pan,9648,0.622994461222752,0.24151966026299154 eks,eks,9649,0.5350085360772315,0.172869985141348 pan,wye,9650,0.6754011861080255,0.05797717400310154 hat,wye,9651,0.3235716165591942,0.6778947432413094 zee,hat,9652,0.929634631262683,0.6531235392615523 zee,zee,9653,0.0005486114815762555,0.7390531741942926 wye,eks,9654,0.2797016068787569,0.2814263099253008 pan,zee,9655,0.4057734719060324,0.15139105154457277 eks,hat,9656,0.7989570844648637,0.18643578362186397 zee,wye,9657,0.3194817450421683,0.16543264401690605 pan,zee,9658,0.5277143419555844,0.564254772210993 pan,pan,9659,0.2294759703953444,0.9048171749557317 zee,pan,9660,0.7009420239615597,0.7800651878215885 hat,eks,9661,0.953827560931939,0.185884517258452 eks,hat,9662,0.39474659738679696,0.43059711110253074 eks,wye,9663,0.4372348974243785,0.10476776917399111 zee,zee,9664,0.7236352219650497,0.08403018416427377 eks,hat,9665,0.05892665049965862,0.9092582016648947 wye,hat,9666,0.060690152753413606,0.7684174554192018 pan,zee,9667,0.4770802050437122,0.3612321845191586 eks,eks,9668,0.9444367104990204,0.4453839788188664 pan,pan,9669,0.1622773559553956,0.2408391953166471 zee,hat,9670,0.8623108841707915,0.5103999923687886 pan,eks,9671,0.6246995141336152,0.9570445916327326 zee,hat,9672,0.1269462523668624,0.5944133371399858 hat,eks,9673,0.4200506848108232,0.5676463512767541 pan,wye,9674,0.5610478784857535,0.03318888871240755 eks,zee,9675,0.20265536384504856,0.6923879412730425 eks,eks,9676,0.3552193074991099,0.48796093863435663 zee,zee,9677,0.7404662009786069,0.11704524348651668 pan,eks,9678,0.808264671158733,0.7958171364354866 eks,zee,9679,0.7801771579924318,0.8039168775444497 zee,hat,9680,0.8361585788416193,0.5904904054602013 pan,zee,9681,0.0881721087846773,0.6134254647769964 zee,zee,9682,0.790057108611216,0.6026603017260809 eks,eks,9683,0.591870649889634,0.03952287487189998 hat,zee,9684,0.2251288541796853,0.0914353575236524 hat,zee,9685,0.9783350755125275,0.6710234655696609 eks,wye,9686,0.2325134660144058,0.44098000477056654 eks,hat,9687,0.11435792053370386,0.3592405692612377 eks,pan,9688,0.013751121997101046,0.21071503600234553 eks,eks,9689,0.1983455661823349,0.3353712062497688 pan,zee,9690,0.8642706624839454,0.5020203992558137 zee,eks,9691,0.2257785909803941,0.7399889531061412 pan,zee,9692,0.518772161497821,0.5305276254149733 pan,wye,9693,0.5247714869016064,0.20906476377409644 hat,pan,9694,0.11556338152672874,0.33174635478223324 zee,eks,9695,0.7368043937171205,0.19022664969335668 hat,eks,9696,0.45233728948031515,0.8621802693175313 zee,hat,9697,0.609947885859063,0.5639255760997719 pan,pan,9698,0.8228841939557919,0.31636476080699183 pan,eks,9699,0.5797850274201329,0.8706915943068293 wye,eks,9700,0.5883942014435751,0.4251422885431637 pan,hat,9701,0.6223555273725319,0.23801172242502744 hat,pan,9702,0.47371944906908836,0.8829841445810995 eks,pan,9703,0.6629053709037614,0.2666968632816322 hat,wye,9704,0.0020992599710109028,0.7828207905256124 wye,eks,9705,0.8295502211195385,0.2601557950975687 pan,pan,9706,0.49968159892099573,0.8538626308087385 hat,zee,9707,0.452146182413364,0.6070096571093107 hat,hat,9708,0.20800822198744873,0.6831793769522073 pan,hat,9709,0.37466193491417743,0.9006405341772813 pan,pan,9710,0.7926733788975334,0.08649107188287852 eks,eks,9711,0.6600637787756933,0.8973761456806139 eks,pan,9712,0.6042851641458743,0.5283912780602698 pan,pan,9713,0.8335225275262462,0.6504888680594751 hat,hat,9714,0.08407860919578702,0.6696777791854102 eks,eks,9715,0.6688071850195556,0.8479172328203074 eks,pan,9716,0.7699539494161064,0.26819674031242324 zee,eks,9717,0.15919097637828838,0.1961372512286007 pan,eks,9718,0.764067350428244,0.40784722026028675 hat,zee,9719,0.43422195883532855,0.21527795148734652 hat,wye,9720,0.18548878820596515,0.0823708416566078 eks,hat,9721,0.3055689756821137,0.09846251941046569 eks,eks,9722,0.7595314601613131,0.33493549394323163 zee,eks,9723,0.6798345440149453,0.20549268600871629 pan,zee,9724,0.5536779382214667,0.5953194186331342 zee,hat,9725,0.07153658715465838,0.3044986057514285 zee,eks,9726,0.7429014874999341,0.769520753307292 zee,zee,9727,0.9994904324789629,0.9539638011649831 hat,eks,9728,0.8039188324095456,0.3485837756125213 zee,wye,9729,0.585248425583051,0.8575390870552795 wye,zee,9730,0.21280831790997046,0.215168894307449 pan,wye,9731,0.5632993384118764,0.039984476208001385 wye,wye,9732,0.8690690369493996,0.4780287234110929 pan,pan,9733,0.4805900786042281,0.16269527652434412 zee,zee,9734,0.685896959785486,0.04306632327231985 eks,hat,9735,0.9365415028222407,0.7049316644937267 wye,hat,9736,0.8357032803599334,0.5980478941599903 eks,wye,9737,0.9524795937075123,0.10018533556749787 eks,zee,9738,0.9571796062292364,0.23794282932532718 wye,zee,9739,0.9969978586906577,0.12087339658352203 hat,hat,9740,0.6123513158512692,0.6254032566567909 wye,hat,9741,0.3852066212224572,0.18704182599635633 hat,pan,9742,0.3298562598570899,0.07896336383457148 wye,eks,9743,0.9717135336552146,0.07632785790260654 wye,pan,9744,0.22511319050031164,0.027172244080271968 eks,wye,9745,0.8413814458463156,0.3006239950449451 wye,eks,9746,0.8712637246437533,0.3533804932864615 hat,zee,9747,0.7487247858158664,0.7159053727726352 wye,zee,9748,0.5840196841699298,0.4370626364171394 pan,zee,9749,0.34522090703048847,0.4157608834458977 hat,zee,9750,0.7718731752355878,0.003718233758628786 pan,pan,9751,0.9143236771785547,0.25370981239174295 pan,pan,9752,0.49208279855492576,0.20454810028776949 pan,hat,9753,0.9706978016906814,0.10150626192794265 hat,eks,9754,0.5026259494302875,0.8456607478858248 eks,zee,9755,0.5983063482292889,0.5332133759436987 hat,zee,9756,0.7064136847926241,0.44538611409928863 hat,eks,9757,0.008475751466850423,0.28105237534152183 pan,zee,9758,0.17107174260903157,0.37907028999046954 eks,hat,9759,0.017723241565128722,0.9328595930739089 eks,pan,9760,0.12671066296153322,0.5377141169726312 pan,pan,9761,0.5230226494775585,0.13327609324548828 hat,eks,9762,0.7178138929211814,0.1071446592333627 hat,eks,9763,0.5172215091010056,0.5656123978535788 hat,zee,9764,0.7656352275177252,0.2648922718032728 eks,hat,9765,0.48052681626037963,0.7749660798351525 wye,wye,9766,0.259817607695608,0.9840660882388936 zee,pan,9767,0.048130721334256,0.7454770180064983 pan,eks,9768,0.20367798282554506,0.2900189560591435 hat,pan,9769,0.25924528216321086,0.09380722776595263 zee,eks,9770,0.6363426074022088,0.4319301718266042 zee,zee,9771,0.3356843529120048,0.5926710392808378 zee,wye,9772,0.5622225319493308,0.8404440554821954 wye,eks,9773,0.13486296020405042,0.1370545330575903 hat,hat,9774,0.35744829640564457,0.6788365316031054 hat,wye,9775,0.24625364619227708,0.8195103714348378 pan,pan,9776,0.5528717365202791,0.6963979512688395 pan,pan,9777,0.2517658835424562,0.6092188620965916 zee,hat,9778,0.01504264188606863,0.5413773331319965 wye,hat,9779,0.5571763577936231,0.008720265560284046 hat,eks,9780,0.09487662655788398,0.6514663782722071 hat,zee,9781,0.04241382763446522,0.8022615952391015 pan,wye,9782,0.6824468663215681,0.48194582894494864 zee,zee,9783,0.9571941589309878,0.7438875241555649 zee,zee,9784,0.40696198225113067,0.5926120348164292 hat,hat,9785,0.32320628233550797,0.8120858769211963 wye,eks,9786,0.36572120295268673,0.4315097648133279 pan,pan,9787,0.536020466205729,0.36476940865976226 pan,zee,9788,0.18548410059983933,0.6484359981774218 pan,wye,9789,0.7500082437438368,0.6736777772258289 hat,zee,9790,0.32608913911284954,0.06744557277974006 eks,hat,9791,0.6359822783546621,0.6518259855994504 zee,wye,9792,0.4220728880621055,0.17140084746735773 wye,eks,9793,0.11689471664414974,0.1874183258828398 wye,pan,9794,0.4771768380141904,0.47458700283464794 zee,wye,9795,0.7547326233775347,0.2923139817159962 pan,hat,9796,0.04688093205740962,0.50212295582611 hat,eks,9797,0.4801061637157764,0.27686764370925665 zee,pan,9798,0.2234307924316019,0.9911544429536859 pan,wye,9799,0.9939181050884636,0.9933949713028724 eks,wye,9800,0.3244253214963203,0.5909643779096942 pan,eks,9801,0.40857906819081213,0.9965875678612408 eks,zee,9802,0.03433864233340278,0.08512282774742341 hat,eks,9803,0.2637466257688432,0.91230604083564 wye,hat,9804,0.9290204990737289,0.39908048283039077 pan,pan,9805,0.03871655125329254,0.6099093593302857 hat,hat,9806,0.7581986258233882,0.6723938004232705 hat,zee,9807,0.734026221575298,0.5060212582772865 zee,zee,9808,0.8976695035586633,0.8107371161879025 zee,eks,9809,0.9007397692300039,0.744200950461551 zee,wye,9810,0.33878497822294384,0.19641652801433074 wye,eks,9811,0.3684889443586322,0.03845017409345586 eks,eks,9812,0.5467455763864191,0.2509547627082641 zee,pan,9813,0.8206715556120792,0.8639781360005004 hat,wye,9814,0.34212469593392425,0.20687141477181548 hat,pan,9815,0.17753782684157615,0.0015438604368104292 pan,hat,9816,0.24876592451844848,0.4470518528813471 wye,wye,9817,0.7049827500065716,0.70700844125317 zee,wye,9818,0.7922870761657094,0.1588053154611868 hat,zee,9819,0.19261418898624927,0.050366139741013005 hat,pan,9820,0.5447052480269977,0.8699888671698426 eks,wye,9821,0.5189946092707575,0.6854994867317263 eks,zee,9822,0.7728584654655655,0.8255138151084206 wye,hat,9823,0.7885587074785081,0.8643021021880486 wye,zee,9824,0.7856139049382169,0.18039878866135772 wye,hat,9825,0.5289400839880876,0.015600624873499225 eks,pan,9826,0.2030275078795114,0.7367196912046005 wye,hat,9827,0.2296202003399993,0.10085387835757498 eks,eks,9828,0.7116944851584103,0.4451057001626685 pan,pan,9829,0.1561292001719159,0.16006739551266214 zee,wye,9830,0.022447139657367665,0.7657756294873818 pan,hat,9831,0.07903067560527932,0.06301267712877379 hat,hat,9832,0.6422615702526209,0.8249323364395087 zee,hat,9833,0.10035889696290079,0.003028321603898987 hat,zee,9834,0.2640449383149195,0.37076593348410314 eks,wye,9835,0.5874685326990423,0.9287556289542644 wye,pan,9836,0.8763125291386116,0.5144780339183038 zee,eks,9837,0.65481575495434,0.7500209738973791 eks,pan,9838,0.6496315038661542,0.6072257440552286 eks,wye,9839,0.9533298751342247,0.023940678831367967 zee,wye,9840,0.2852685772877177,0.691521855604441 eks,hat,9841,0.09722173469836548,0.36827480828558046 zee,wye,9842,0.9106754203674021,0.44421367548499935 zee,zee,9843,0.43260196585756017,0.7253288611322654 wye,pan,9844,0.12361870847069467,0.8005113079266706 hat,pan,9845,0.75413528558763,0.25353880305437526 hat,eks,9846,0.39360425072719285,0.9727010611978959 eks,eks,9847,0.36408179966880305,0.005301040380198518 zee,hat,9848,0.7494017826915185,0.5716008160658336 pan,pan,9849,0.07314118820090576,0.6728814876086208 pan,pan,9850,0.03810488399365641,0.6301648369861882 pan,pan,9851,0.001361386759249128,0.25792849048845146 zee,pan,9852,0.293496771264693,0.5611287273924571 wye,hat,9853,0.18556020761414638,0.5317691684291805 hat,zee,9854,0.5972939543247376,0.4330238320114945 wye,pan,9855,0.6182578764501776,0.7655458252282237 pan,hat,9856,0.8102716531871033,0.8313089740346422 zee,pan,9857,0.466306200678794,0.10723178210789208 eks,eks,9858,0.3843542033136572,0.943645502584351 pan,eks,9859,0.25317568143298785,0.546876245709709 pan,pan,9860,0.5805216264198891,0.7328584964292528 zee,hat,9861,0.2178144713563437,0.7034064666412133 pan,eks,9862,0.5507783340308107,0.8117197523869161 hat,hat,9863,0.29207020272823003,0.3025947324662317 eks,wye,9864,0.11439725902216524,0.07940989075873717 eks,zee,9865,0.007673493448299595,0.7065454787031791 eks,hat,9866,0.4975899292735726,0.004921317195285879 zee,eks,9867,0.02662315353765099,0.34265021760387904 pan,pan,9868,0.4854194107628803,0.3198466348114496 hat,zee,9869,0.9595189622375838,0.501564353037085 zee,wye,9870,0.5215850818114982,0.4286413152070583 zee,hat,9871,0.6250842276723021,0.6957696470514947 eks,eks,9872,0.2737032476182002,0.9151070142618852 hat,wye,9873,0.6217399084607139,0.1324645008753036 hat,eks,9874,0.2999314090059486,0.6837336951519206 hat,zee,9875,0.748712308729834,0.7138449723779594 zee,wye,9876,0.8136200511878549,0.8072663619726874 eks,zee,9877,0.4863731414322163,0.1035362785381897 pan,eks,9878,0.18800091230044202,0.6362766839502966 zee,wye,9879,0.20901422499230626,0.4434307845301825 wye,eks,9880,0.7843765179845881,0.9652357480134778 zee,wye,9881,0.7862677717692486,0.5179978676865895 pan,pan,9882,0.7627902949547447,0.19790202442128657 zee,zee,9883,0.9799742729336977,0.28992926827299315 zee,eks,9884,0.05789237193201191,0.5580049129122333 pan,zee,9885,0.8352546612543933,0.29808563018476386 eks,zee,9886,0.6612732451934941,0.8821040941341458 zee,wye,9887,0.03800555126962368,0.5564528314361259 wye,wye,9888,0.15173705344284016,0.8028950342833062 eks,pan,9889,0.4757333931069331,0.6709064008045604 zee,zee,9890,0.04473360870043863,0.7488172425798428 pan,wye,9891,0.6641701958582154,0.045390088141842866 pan,wye,9892,0.6400396948750516,0.2741016723165629 wye,hat,9893,0.07086887541312281,0.9995743686923368 zee,wye,9894,0.6202100179528263,0.9712368683190139 pan,hat,9895,0.8641234318244241,0.893546531152826 eks,hat,9896,0.10089977663900951,0.40511056317517313 hat,pan,9897,0.1706694949653771,0.8882049668710424 hat,eks,9898,0.9012519500883333,0.35484059538741897 eks,hat,9899,0.26412200768049177,0.8469250510935257 pan,eks,9900,0.18024054303984605,0.6531731873858931 wye,hat,9901,0.8417240952654167,0.09572553012932483 pan,zee,9902,0.9054776364609202,0.6259317176046434 zee,hat,9903,0.9287944849908445,0.46735676241217305 pan,zee,9904,0.5481438224523807,0.7183018840232132 hat,wye,9905,0.5457200264172307,0.29150693945838846 eks,pan,9906,0.19123694955232085,0.1361773881166165 pan,pan,9907,0.9805858575888526,0.35107718527657394 wye,hat,9908,0.8027037826343639,0.02454307542444223 eks,hat,9909,0.5392855167210358,0.04490931508757068 hat,hat,9910,0.07042038780612936,0.5146702744032997 pan,eks,9911,0.7646508656008143,0.9446343254356182 zee,wye,9912,0.4701991772804557,0.33405458598495386 pan,eks,9913,0.8147835691088603,0.6617843834409757 pan,zee,9914,0.9240645650332355,0.8621654329742796 eks,zee,9915,0.6616625895734575,0.14135816098909115 wye,pan,9916,0.3042515765931557,0.37717959119403555 hat,zee,9917,0.9463027359513574,0.20816847808308991 pan,zee,9918,0.062017678365430595,0.11198470904331581 zee,wye,9919,0.5748726266575598,0.3779573684358648 hat,wye,9920,0.3438737626946553,0.5489498676687791 wye,wye,9921,0.6906719134435684,0.8555178209462388 hat,wye,9922,0.9728689411167353,0.8157055538148639 wye,hat,9923,0.20975092024121644,0.6588638151332867 hat,pan,9924,0.3254178263556141,0.9839978841946503 eks,hat,9925,0.7275202634311879,0.2129559326323187 hat,eks,9926,0.1541309399763774,0.3791445762682304 wye,pan,9927,0.8783682319990223,0.6933957357140185 eks,eks,9928,0.09936486720481041,0.8907110968753766 eks,pan,9929,0.5193758781368972,0.409871414549149 pan,hat,9930,0.5677825974360403,0.4567634115934158 hat,hat,9931,0.22344053593327007,0.3136460886229182 eks,wye,9932,0.7744014553941428,0.318908757325456 zee,zee,9933,0.5227775810997735,0.10751874257421012 hat,hat,9934,0.20145807804290206,0.41891252140867674 wye,hat,9935,0.25910371069218296,0.6568892395017885 eks,hat,9936,0.7556816893135765,0.7737786856558144 pan,zee,9937,0.5546876661250906,0.403008800918636 eks,wye,9938,0.5330080701180497,0.22709767551835436 hat,wye,9939,0.208097253807903,0.11669571201990991 hat,wye,9940,0.8460880203022336,0.8184128241834582 pan,hat,9941,0.5525707759822344,0.2904413914902232 pan,eks,9942,0.5757720306595114,0.008223444000978186 zee,wye,9943,0.4913245348903704,0.25864014284309744 hat,pan,9944,0.09459751273648653,0.9299307121234656 zee,pan,9945,0.44635620401009446,0.5129261056747197 zee,zee,9946,0.13202631656529729,0.021604794833400942 pan,hat,9947,0.8783008100979538,0.6172168477305974 pan,eks,9948,0.6047433842453397,0.53470873199638 pan,pan,9949,0.12278928201439199,0.3424112106292362 hat,hat,9950,0.8421815876690498,0.04784842315950366 hat,eks,9951,0.23150439446451176,0.362011464774759 hat,zee,9952,0.187055253929304,0.7872831108348827 pan,eks,9953,0.9690028290247679,0.5626274346583657 eks,pan,9954,0.703550423241368,0.8640890526817995 wye,wye,9955,0.1708681258811735,0.5385038134896668 wye,zee,9956,0.3732949851683247,0.9189853496560824 wye,hat,9957,0.6466417304468489,0.4955279123282218 pan,hat,9958,0.8447936799573535,0.45561414780776455 pan,wye,9959,0.5523199497193726,0.844808439474632 wye,hat,9960,0.1339766165243773,0.90209906677784 eks,pan,9961,0.0018643836079239584,0.22214207434571398 hat,wye,9962,0.27668665603289977,0.8949840037944731 wye,eks,9963,0.7660038618991021,0.0724322389595311 zee,wye,9964,0.14503471143188695,0.6572300809799787 eks,hat,9965,0.45140832054850244,0.4872441473665683 hat,zee,9966,0.09915562191171134,0.19911839331011605 eks,wye,9967,0.9705821420611176,0.1682630903706045 pan,wye,9968,0.3049598321025262,0.8146693779796157 pan,pan,9969,0.4470842181156869,0.8188080614674343 hat,zee,9970,0.7615491651523039,0.3309208743280688 eks,hat,9971,0.16013813822306744,0.18970582735969377 hat,wye,9972,0.01092212097676093,0.19287438329005957 eks,hat,9973,0.9278177925083565,0.14699304090594456 hat,wye,9974,0.34339938249336444,0.6938846096026958 zee,eks,9975,0.14164773949664755,0.16897907378815158 hat,eks,9976,0.9051959081404853,0.3084507684845691 eks,zee,9977,0.4549080098494652,0.2027740955809184 pan,hat,9978,0.18068678390966952,0.24718291910572177 wye,hat,9979,0.48039589777666136,0.8099902771432259 pan,wye,9980,0.029289120404769053,0.5923039290360491 eks,pan,9981,0.2544586487901952,0.4578886296197162 wye,eks,9982,0.34998222187670314,0.3061867938018288 wye,hat,9983,0.4640332038264391,0.019243858556094673 pan,hat,9984,0.48914378417931326,0.36728976081695264 hat,zee,9985,0.5155567078470872,0.6010598365861822 hat,wye,9986,0.687016150489404,0.14515901345978532 hat,hat,9987,0.429284826906265,0.1787642439603777 zee,zee,9988,0.16947406856911285,0.6350945353981919 wye,eks,9989,0.8561772298898314,0.6874185671784931 eks,pan,9990,0.06739304569008775,0.2341964277411741 hat,wye,9991,0.3633322891461138,0.12892395206278184 wye,zee,9992,0.348286564151128,0.9559121889830311 eks,eks,9993,0.8231194474452225,0.08896471922413896 pan,pan,9994,0.7310844732875349,0.16823055115657648 pan,eks,9995,0.8981803676290844,0.34464277045717084 zee,wye,9996,0.72761807629368,0.6860394313092489 pan,hat,9997,0.700242583670093,0.27129926260336745 eks,pan,9998,0.5554835956450555,0.7053505857791378 wye,pan,9999,0.19004481082030356,0.8073900575802198 zee,pan,10000,0.02349941792343435,0.19861196418373683 miller-5.6.2/doc/mk-func-h2s.sh000077500000000000000000000011071354153536500161570ustar00rootroot00000000000000#!/bin/bash mlr -F | grep -v '^[a-zA-Z]' | uniq | while read funcname; do echo "" echo "" echo "

$funcname

" echo "" echo "

" echo '

' echo '
'
  mlr --help-function "$funcname"
  echo '
' echo '
' echo "" done mlr -F | grep '^[a-zA-Z]' | sort -u | while read funcname; do echo "" echo "
" echo "

$funcname

" echo "" echo "

" echo '

' echo '
'
  mlr --help-function "$funcname"
  echo '
' echo '
' echo "" done miller-5.6.2/doc/mkman.rb000077500000000000000000000167151354153536500152340ustar00rootroot00000000000000#!/usr/bin/env ruby # ================================================================ # This is a manpage autogenerator for Miller. There are various tools out there # for creating xroff-formatted manpages, but I wanted something with minimal # external dependencies which would also automatically generate most of its # output from the mlr executable itself. It turns out it's easy enough to get # this in just a few lines of Ruby. # # Note for dev-viewing of the output: # ./mkman.rb | groff -man -Tascii | less # ================================================================ # ---------------------------------------------------------------- def main print make_top print make_section('NAME', [ "miller \\\- like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON." ]) print make_section('SYNOPSIS', [ `mlr --usage-synopsis` ]) print make_section('DESCRIPTION', [ """Miller operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller's natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.) This manpage documents #{`mlr --version`.chomp}.""" ]) print make_section('EXAMPLES', [ "" ]) print make_subsection('COMMAND-LINE SYNTAX', []) print make_code_block(`mlr --usage-examples`) print make_subsection('DATA FORMATS', []) print make_code_block(`mlr --usage-data-format-examples`) print make_section('OPTIONS', [ """In the following option flags, the version with \"i\" designates the input stream, \"o\" the output stream, and the version without prefix sets the option for both input and output stream. For example: --irs sets the input record separator, --ors the output record separator, and --rs sets both the input and output separator to the given value.""" ]) print make_subsection('HELP OPTIONS', []) print make_code_block(`mlr --usage-help-options`) print make_subsection('VERB LIST', []) print make_code_block(`mlr --usage-list-all-verbs`) print make_subsection('FUNCTION LIST', []) print make_code_block(`mlr --usage-functions`) print make_subsection('I/O FORMATTING', []) print make_code_block(`mlr --usage-data-format-options`) print make_subsection('COMMENTS IN DATA', []) print make_code_block(`mlr --usage-comments-in-data`) print make_subsection('FORMAT-CONVERSION KEYSTROKE-SAVERS', []) print make_code_block(`mlr --usage-format-conversion-keystroke-saver-options`) print make_subsection('COMPRESSED I/O', []) print make_code_block(`mlr --usage-compressed-data-options`) print make_subsection('SEPARATORS', []) print make_code_block(`mlr --usage-separator-options`) print make_subsection('CSV-SPECIFIC OPTIONS', []) print make_code_block(`mlr --usage-csv-options`) print make_subsection('DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT', []) print make_code_block(`mlr --usage-double-quoting`) print make_subsection('NUMERICAL FORMATTING', []) print make_code_block(`mlr --usage-numerical-formatting`) print make_subsection('OTHER OPTIONS', []) print make_code_block(`mlr --usage-other-options`) print make_subsection('THEN-CHAINING', []) print make_code_block(`mlr --usage-then-chaining`) print make_subsection('AUXILIARY COMMANDS', []) print make_code_block(`mlr --usage-auxents`) verbs = `mlr --list-all-verbs-raw` print make_section('VERBS', [ "" ]) verbs = verbs.strip.split("\n") for verb in verbs print make_subsection(verb, []) print make_code_block(`mlr #{verb} -h`) end functions = `mlr --list-all-functions-raw` print make_section('FUNCTIONS FOR FILTER/PUT', [ "" ]) functions = functions.strip.split("\n").uniq for function in functions print make_subsection(function, []) text = `mlr --help-function '#{function}'` text = text.sub(function + ' ', '') print make_code_block(text) end keywords = `mlr --list-all-keywords-raw` print make_section('KEYWORDS FOR PUT AND FILTER', [ "" ]) keywords = keywords.strip.split("\n").uniq for keyword in keywords print make_subsection(keyword, []) text = `mlr --help-keyword '#{keyword}'` print make_code_block(text) end print make_section('AUTHOR', [ "Miller is written by John Kerl .", "This manual page has been composed from Miller's help output by Eric MSP Veith ." ]) print make_section('SEE ALSO', [ "awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for " + "Comma-Separated Values (CSV) Files, the miller website http://johnkerl.org/miller/doc" ]) end # ================================================================ def make_top() t = Time::new stamp = t.gmtime.strftime("%Y-%m-%d") # Portability definitions thanks to some asciidoc output """'\\\" t .\\\" Title: mlr .\\\" Author: [see the \"AUTHOR\" section] .\\\" Generator: #{$0} .\\\" Date: #{stamp} .\\\" Manual: \\ \\& .\\\" Source: \\ \\& .\\\" Language: English .\\\" .TH \"MILLER\" \"1\" \"#{stamp}\" \"\\ \\&\" \"\\ \\&\" .\\\" ----------------------------------------------------------------- .\\\" * Portability definitions .\\\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\\\" http://bugs.debian.org/507673 .\\\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\\\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \\n(.g .ds Aq \(aq .el .ds Aq ' .\\\" ----------------------------------------------------------------- .\\\" * set default formatting .\\\" ----------------------------------------------------------------- .\\\" disable hyphenation .nh .\\\" disable justification (adjust text to left margin only) .ad l .\\\" ----------------------------------------------------------------- """ end # ---------------------------------------------------------------- def make_section(title, paragraphs) retval = ".SH \"#{title}\"\n" paragraphs.each do |paragraph| retval += ".sp\n" retval += groff_encode(paragraph) + "\n" end retval end # ---------------------------------------------------------------- def make_subsection(title, paragraphs) retval = ".SS \"#{title}\"\n" paragraphs.each do |paragraph| retval += ".sp\n" retval += groff_encode(paragraph) + "\n" end retval end # ---------------------------------------------------------------- def make_subsubsection(title, paragraphs) retval = ".sp\n"; retval += "\\fB#{title}\\fR\n" paragraphs.each do |paragraph| retval += ".sp\n" retval += groff_encode(paragraph) + "\n" end retval end # ---------------------------------------------------------------- def make_code_block(block) retval = ".if n \\{\\\n" retval += ".RS 0\n" retval += ".\\}\n" retval += ".nf\n" # In case the line starts with a dot: retval += block.gsub('\\', '\e').gsub(/^\./){'\&.'} # In case the line starts with a single quote: retval = retval.gsub(/^'/, '\(cq') retval += ".fi\n" retval += ".if n \\{\\\n" retval += ".RE\n" end # ---------------------------------------------------------------- def groff_encode(line) #line = line.gsub(/'/, '\(cq') #line = line.gsub(/"/, '\(dq') #line = line.gsub(/\./, '\&') #line = line.gsub(/-/, '\-') line = line.gsub(/\\([^-])/, '\e\1') line = line.gsub(/^\./){'\&.'} line end # ================================================================ main miller-5.6.2/doc/mlr.1000066400000000000000000003243141354153536500144520ustar00rootroot00000000000000'\" t .\" Title: mlr .\" Author: [see the "AUTHOR" section] .\" Generator: ./mkman.rb .\" Date: 2019-09-22 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" .TH "MILLER" "1" "2019-09-22" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Portability definitions .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq (aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .SH "NAME" .sp miller \- like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON. .SH "SYNOPSIS" .sp Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names} .SH "DESCRIPTION" .sp Miller operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller's natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.) This manpage documents Miller v5.6.2. .SH "EXAMPLES" .sp .SS "COMMAND-LINE SYNTAX" .if n \{\ .RS 0 .\} .nf mlr --csv cut -f hostname,uptime mydata.csv mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group mlr join -j account_id -f accounts.dat then group-by account_name balances.dat mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\e1:\e2")' data/*.json mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* mlr stats2 -a linreg-pca -f u,v -g shape data/* mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* mlr --from estimates.tbl put ' for (k,v in $*) { if (is_numeric(v) && k =~ "^[t-z].*$") { $sum += v; $count += 1 } } $mean = $sum / $count # no assignment if count unset' mlr --from infile.dat put -f analyze.mlr mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' .fi .if n \{\ .RE .SS "DATA FORMATS" .if n \{\ .RS 0 .\} .nf DKVP: delimited key-value pairs (Miller default format) +---------------------+ | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" +---------------------+ NIDX: implicitly numerically indexed (Unix-toolkit style) +---------------------+ | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" | fox jumped | Record 2: "1" => "fox", "2" => "jumped" +---------------------+ CSV/CSV-lite: comma-separated values with separate header line +---------------------+ | apple,bat,cog | | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" +---------------------+ Tabular JSON: nested objects are supported, although arrays within them are not: +---------------------+ | { | | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" | "bat": 2, | | "cog": 3 | | } | | { | | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" | "egg": 7, | | "flint": 8 | | }, | | "garlic": "" | | } | +---------------------+ PPRINT: pretty-printed tabular +---------------------+ | apple bat cog | | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" +---------------------+ XTAB: pretty-printed transposed tabular +---------------------+ | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" | bat 2 | | cog 3 | | | | dish 7 | Record 2: "dish" => "7", "egg" => "8" | egg 8 | +---------------------+ Markdown tabular (supported for output only): +-----------------------+ | | apple | bat | cog | | | | --- | --- | --- | | | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" +-----------------------+ .fi .if n \{\ .RE .SH "OPTIONS" .sp In the following option flags, the version with "i" designates the input stream, "o" the output stream, and the version without prefix sets the option for both input and output stream. For example: --irs sets the input record separator, --ors the output record separator, and --rs sets both the input and output separator to the given value. .SS "HELP OPTIONS" .if n \{\ .RS 0 .\} .nf -h or --help Show this message. --version Show the software version. {verb name} --help Show verb-specific help. --help-all-verbs Show help on all verbs. -l or --list-all-verbs List only verb names. -L List only verb names, one per line. -f or --help-all-functions Show help on all built-in functions. -F Show a bare listing of built-in functions by name. -k or --help-all-keywords Show help on all keywords. -K Show a bare listing of keywords by name. .fi .if n \{\ .RE .SS "VERB LIST" .if n \{\ .RS 0 .\} .nf altkv bar bootstrap cat check clean-whitespace count-distinct count-similar cut decimate fill-down filter format-values fraction grep group-by group-like having-fields head histogram join label least-frequent merge-fields most-frequent nest nothing put regularize remove-empty-columns rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle skip-trivial-records sort stats1 stats2 step tac tail tee top uniq unsparsify .fi .if n \{\ .RE .SS "FUNCTION LIST" .if n \{\ .RS 0 .\} .nf + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub substr tolower toupper capitalize lstrip rstrip strip collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime strftime_local strptime strptime_local systime is_absent is_bool is_boolean is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string asserting_absent asserting_bool asserting_boolean asserting_empty asserting_empty_map asserting_float asserting_int asserting_map asserting_nonempty_map asserting_not_empty asserting_not_map asserting_not_null asserting_null asserting_numeric asserting_present asserting_string boolean float fmtnum hexfmt int string typeof depth haskey joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv splitkvx splitnv splitnvx Please use "mlr --help-function {function name}" for function-specific help. .fi .if n \{\ .RE .SS "I/O FORMATTING" .if n \{\ .RS 0 .\} .nf --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" (this is Miller's default format). --inidx --onidx --nidx Implicitly-integer-indexed fields (Unix-toolkit style). -T Synonymous with "--nidx --fs tab". --icsv --ocsv --csv Comma-separated value (or tab-separated with --fs tab, etc.) --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", "--ocsv --ofs tab", "--csv --fs tab". --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) and RS U+241E (UTF-8 0xe2909e) --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated with --fs tab, etc.). The 'lite' CSV does not handle RFC-CSV double-quoting rules; is slightly faster; and handles heterogeneity in the input stream via empty newline followed by new header line. See also http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", "--ocsvlite --ofs tab", "--csvlite --fs tab". -t Synonymous with --tsvlite. --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) and RS U+241E (UTF-8 0xe2909e) --ipprint --opprint --pprint Pretty-printed tabular (produces no output until all input is in). --right Right-justifies all fields for PPRINT output. --barred Prints a border around PPRINT output (only available for output). --omd Markdown-tabular (only available for output). --ixtab --oxtab --xtab Pretty-printed vertical-tabular. --xvright Right-justifies values for XTAB format. --ijson --ojson --json JSON tabular: sequence or list of one-level maps: {...}{...} or [{...},{...}]. --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or to be treated as errors. Please use the jq tool for full JSON (pre)processing. --jvstack Put one key-value pair per line for JSON output. --jlistwrap Wrap JSON output in outermost [ ]. --jknquoteint Do not quote non-string map keys in JSON output. --jvquoteall Quote map values in JSON output, even if they're numeric. --jflatsep {string} Separator for flattening multi-level JSON keys, e.g. '{"a":{"b":3}}' becomes a:b => 3 for non-JSON formats. Defaults to :. -p is a keystroke-saver for --nidx --fs space --repifs --mmap --no-mmap --mmap-below {n} Use mmap for files whenever possible, never, or for files less than n bytes in size. Default is for files less than 4294967296 bytes in size. 'Whenever possible' means always except for when reading standard input which is not mmappable. If you don't know what this means, don't worry about it -- it's a minor performance optimization. Examples: --csv for CSV-formatted input and output; --idkvp --opprint for DKVP-formatted input and pretty-printed output. Please use --iformat1 --oformat2 rather than --format1 --oformat2. The latter sets up input and output flags for format1, not all of which are overridden in all cases by setting output format to format2. .fi .if n \{\ .RE .SS "COMMENTS IN DATA" .if n \{\ .RS 0 .\} .nf --skip-comments Ignore commented lines (prefixed by "#") within the input. --skip-comments-with {string} Ignore commented lines within input, with specified prefix. --pass-comments Immediately print commented lines (prefixed by "#") within the input. --pass-comments-with {string} Immediately print commented lines within input, with specified prefix. Notes: * Comments are only honored at the start of a line. * In the absence of any of the above four options, comments are data like any other text. * When pass-comments is used, comment lines are written to standard output immediately upon being read; they are not part of the record stream. Results may be counterintuitive. A suggestion is to place comments at the start of data files. .fi .if n \{\ .RE .SS "FORMAT-CONVERSION KEYSTROKE-SAVERS" .if n \{\ .RS 0 .\} .nf As keystroke-savers for format-conversion you may use the following: --c2t --c2d --c2n --c2j --c2x --c2p --c2m --t2c --t2d --t2n --t2j --t2x --t2p --t2m --d2c --d2t --d2n --d2j --d2x --d2p --d2m --n2c --n2t --n2d --n2j --n2x --n2p --n2m --j2c --j2t --j2d --j2n --j2x --j2p --j2m --x2c --x2t --x2d --x2n --x2j --x2p --x2m --p2c --p2t --p2d --p2n --p2j --p2x --p2m The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, PPRINT, and markdown, respectively. Note that markdown format is available for output only. .fi .if n \{\ .RE .SS "COMPRESSED I/O" .if n \{\ .RS 0 .\} .nf --prepipe {command} This allows Miller to handle compressed inputs. You can do without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". However, when multiple input files are present, between-file separations are lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can specify an action to be taken on each input file. This pre-pipe command must be able to read from standard input; it will be invoked with {command} < {filename}. Examples: mlr --prepipe 'gunzip' mlr --prepipe 'zcat -cf' mlr --prepipe 'xz -cd' mlr --prepipe cat Note that this feature is quite general and is not limited to decompression utilities. You can use it to apply per-file filters of your choice. For output compression (or other) utilities, simply pipe the output: mlr ... | {your compression command} .fi .if n \{\ .RE .SS "SEPARATORS" .if n \{\ .RS 0 .\} .nf --rs --irs --ors Record separators, e.g. 'lf' or '\er\en' --fs --ifs --ofs --repifs Field separators, e.g. comma --ps --ips --ops Pair separators, e.g. equals sign Notes about line endings: * Default line endings (--irs and --ors) are "auto" which means autodetect from the input file format, as long as the input file(s) have lines ending in either LF (also known as linefeed, '\en', 0x0a, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, '\er\en', 0x0d 0x0a, Windows style). * If both irs and ors are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you're running on. * The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF. * If you use --ors {something else} with (default or explicitly specified) --irs auto then line endings are autodetected on input and set to what you specify on output. * If you use --irs {something else} with (default or explicitly specified) --ors auto then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. Notes about all other separators: * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats do key-value pairs appear juxtaposed. * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; XTAB records are separated by two or more consecutive IFS/OFS -- i.e. a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs auto for XTAB format. (XTAB's default IFS/OFS are "auto".) * OFS must be single-character for PPRINT format. This is because it is used with repetition for alignment; multi-character separators would make alignment impossible. * OPS may be multi-character for XTAB format, in which case alignment is disabled. * TSV is simply CSV using tab as field separator ("--fs tab"). * FS/PS are ignored for markdown format; RS is used. * All FS and PS options are ignored for JSON format, since they are not relevant to the JSON format. * You can specify separators in any of the following ways, shown by example: - Type them out, quoting as necessary for shell escapes, e.g. "--fs '|' --ips :" - C-style escape sequences, e.g. "--rs '\er\en' --fs '\et'". - To avoid backslashing, you can use any of the following names: cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals * Default separators by format: File format RS FS PS gen N/A (N/A) (N/A) dkvp auto , = json auto (N/A) (N/A) nidx auto space (N/A) csv auto , (N/A) csvlite auto , (N/A) markdown auto (N/A) (N/A) pprint auto space (N/A) xtab (N/A) auto space .fi .if n \{\ .RE .SS "CSV-SPECIFIC OPTIONS" .if n \{\ .RS 0 .\} .nf --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 of input files. Tip: combine with "label" to recreate missing headers. --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, fill remaining keys with empty string. If a data line has more fields than the header line, use integer field labels as in the implicit-header case. --headerless-csv-output Print only CSV data lines. -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. .fi .if n \{\ .RE .SS "DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT" .if n \{\ .RS 0 .\} .nf --quote-all Wrap all fields in double quotes --quote-none Do not wrap any fields in double quotes, even if they have OFS or ORS in them --quote-minimal Wrap fields in double quotes only if they have OFS or ORS in them (default) --quote-numeric Wrap fields in double quotes only if they have numbers in them --quote-original Wrap fields in double quotes if and only if they were quoted on input. This isn't sticky for computed fields: e.g. if fields a and b were quoted on input and you do "put '$c = $a . $b'" then field c won't inherit a or b's was-quoted-on-input flag. .fi .if n \{\ .RE .SS "NUMERICAL FORMATTING" .if n \{\ .RS 0 .\} .nf --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for double-precision. Applies to verbs which compute new values, e.g. put, stats1, stats2. See also the fmtnum function within mlr put (mlr --help-all-functions). Defaults to %lf. .fi .if n \{\ .RE .SS "OTHER OPTIONS" .if n \{\ .RS 0 .\} .nf --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter urand()/urandint()/urand32(). --nr-progress-mod {m}, with m a positive integer: print filename and record count to stderr every m input records. --from {filename} Use this to specify an input file before the verb(s), rather than after. May be used more than once. Example: "mlr --from a.dat --from b.dat cat" is the same as "mlr cat a.dat b.dat". -n Process no input files, nor standard input either. Useful for mlr put with begin/end statements only. (Same as --from /dev/null.) Also useful in "mlr -n put -v '...'" for analyzing abstract syntax trees (if that's your thing). -I Process files in-place. For each file name on the command line, output is written to a temp file in the same directory, which is then renamed over the original. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on. .fi .if n \{\ .RE .SS "THEN-CHAINING" .if n \{\ .RS 0 .\} .nf Output of one verb may be chained as input to another using "then", e.g. mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color .fi .if n \{\ .RE .SS "AUXILIARY COMMANDS" .if n \{\ .RS 0 .\} .nf Miller has a few otherwise-standalone executables packaged within it. They do not participate in any other parts of Miller. Available subcommands: aux-list lecat termcvt hex unhex netbsd-strptime For more information, please invoke mlr {subcommand} --help .fi .if n \{\ .RE .SH "VERBS" .sp .SS "altkv" .if n \{\ .RS 0 .\} .nf Usage: mlr altkv [no options] Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. .fi .if n \{\ .RE .SS "bar" .if n \{\ .RS 0 .\} .nf Usage: mlr bar [options] Replaces a numeric field with a number of asterisks, allowing for cheesy bar plots. These align best with --opprint or --oxtab output format. Options: -f {a,b,c} Field names to convert to bars. -c {character} Fill character: default '*'. -x {character} Out-of-bounds character: default '#'. -b {character} Blank character: default '.'. --lo {lo} Lower-limit value for min-width bar: default '0.000000'. --hi {hi} Upper-limit value for max-width bar: default '100.000000'. -w {n} Bar-field width: default '40'. --auto Automatically computes limits, ignoring --lo and --hi. Holds all records in memory before producing any output. .fi .if n \{\ .RE .SS "bootstrap" .if n \{\ .RS 0 .\} .nf Usage: mlr bootstrap [options] Emits an n-sample, with replacement, of the input records. Options: -n {number} Number of samples to output. Defaults to number of input records. Must be non-negative. See also mlr sample and mlr shuffle. .fi .if n \{\ .RE .SS "cat" .if n \{\ .RS 0 .\} .nf Usage: mlr cat [options] Passes input records directly to output. Most useful for format conversion. Options: -n Prepend field "n" to each record with record-counter starting at 1 -g {comma-separated field name(s)} When used with -n/-N, writes record-counters keyed by specified field name(s). -v Write a low-level record-structure dump to stderr. -N {name} Prepend field {name} to each record with record-counter starting at 1 .fi .if n \{\ .RE .SS "check" .if n \{\ .RS 0 .\} .nf Usage: mlr check Consumes records without printing any output. Useful for doing a well-formatted check on input data. .fi .if n \{\ .RE .SS "clean-whitespace" .if n \{\ .RS 0 .\} .nf Usage: mlr clean-whitespace [options] {old1,new1,old2,new2,...} For each record, for each field in the record, whitespace-cleans the keys and values. Whitespace-cleaning entails stripping leading and trailing whitespace, and replacing multiple whitespace with singles. For finer-grained control, please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, and clean_whitespace. Options: -k|--keys-only Do not touch values. -v|--values-only Do not touch keys. It is an error to specify -k as well as -v. .fi .if n \{\ .RE .SS "count-distinct" .if n \{\ .RS 0 .\} .nf Usage: mlr count-distinct [options] Prints number of records having distinct values for specified field names. Same as uniq -c. Options: -f {a,b,c} Field names for distinct count. -n Show only the number of distinct values. Not compatible with -u. -o {name} Field name for output count. Default "count". Ignored with -u. -u Do unlashed counts for multiple field names. With -f a,b and without -u, computes counts for distinct combinations of a and b field values. With -f a,b and with -u, computes counts for distinct a field values and counts for distinct b field values separately. .fi .if n \{\ .RE .SS "count-similar" .if n \{\ .RS 0 .\} .nf Usage: mlr count-similar [options] Ingests all records, then emits each record augmented by a count of the number of other records having the same group-by field values. Options: -g {d,e,f} Group-by-field names for counts. -o {name} Field name for output count. Default "count". .fi .if n \{\ .RE .SS "cut" .if n \{\ .RS 0 .\} .nf Usage: mlr cut [options] Passes through input records with specified fields included/excluded. -f {a,b,c} Field names to include for cut. -o Retain fields in the order specified here in the argument list. Default is to retain them in the order found in the input data. -x|--complement Exclude, rather than include, field names specified by -f. -r Treat field names as regular expressions. "ab", "a.*b" will match any field name containing the substring "ab" or matching "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may be used. The -o flag is ignored when -r is present. Examples: mlr cut -f hostname,status mlr cut -x -f hostname,status mlr cut -r -f '^status$,sda[0-9]' mlr cut -r -f '^status$,"sda[0-9]"' mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) .fi .if n \{\ .RE .SS "decimate" .if n \{\ .RS 0 .\} .nf Usage: mlr decimate [options] -n {count} Decimation factor; default 10 -b Decimate by printing first of every n. -e Decimate by printing last of every n (default). -g {a,b,c} Optional group-by-field names for decimate counts Passes through one of every n records, optionally by category. .fi .if n \{\ .RE .SS "fill-down" .if n \{\ .RS 0 .\} .nf Usage: mlr fill-down [options] -f {a,b,c} Field names for fill-down -a|--only-if-absent Field names for fill-down If a given record has a missing value for a given field, fill that from the corresponding value from a previous record, if any. By default, a 'missing' field either is absent, or has the empty-string value. With -a, a field is 'missing' only if it is absent. .fi .if n \{\ .RE .SS "filter" .if n \{\ .RS 0 .\} .nf Usage: mlr filter [options] {expression} Prints records for which {expression} evaluates to true. If there are multiple semicolon-delimited expressions, all of them are evaluated and the last one is used as the filter criterion. Conversion options: -S: Keeps field values as strings with no type inference to int or float. -F: Keeps field values as strings or floats with no inference to int. All field values are type-inferred to int/float/string unless this behavior is suppressed with -S or -F. Output/formatting options: --oflatsep {string}: Separator to use when flattening multi-level @-variables to output records for emit. Default ":". --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. --no-fflush: for emit, tee, print, and dump, don't call fflush() after every record. Expression-specification options: -f {filename}: the DSL expression is taken from the specified file rather than from the command line. Outer single quotes wrapping the expression should not be placed in the file. If -f is specified more than once, all input files specified using -f are concatenated to produce the expression. (For example, you can define functions in one file and call them from another.) -e {expression}: You can use this after -f to add an expression. Example use case: define functions/subroutines in a file you specify with -f, then call them with an expression you specify with -e. (If you mix -e and -f then the expressions are evaluated in the order encountered. Since the expression pieces are simply concatenated, please be sure to use intervening semicolons to separate expressions.) Tracing options: -v: Prints the expressions's AST (abstract syntax tree), which gives full transparency on the precedence and associativity rules of Miller's grammar, to stdout. -a: Prints a low-level stack-allocation trace to stdout. -t: Prints a low-level parser trace to stderr. -T: Prints a every statement to stderr as it is executed. Other options: -x: Prints records for which {expression} evaluates to false. Please use a dollar sign for field names and double-quotes for string literals. If field names have special characters such as "." then you might use braces, e.g. '${field.name}'. Miller built-in variables are NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment variables. The environment-variable name may be an expression, e.g. a field value. Use # to comment to end of line. Examples: mlr filter 'log10($count) > 4.0' mlr filter 'FNR == 2 (second record in each file)' mlr filter 'urand() < 0.001' (subsampling) mlr filter '$color != "blue" && $value > 4.2' mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' mlr filter ' NR == 1 || #NR == 2 || NR == 3 ' Please see http://johnkerl.org/miller/doc/reference.html for more information including function list. Or "mlr -f". Please also also "mlr grep" which is useful when you don't yet know which field name(s) you're looking for. .fi .if n \{\ .RE .SS "format-values" .if n \{\ .RS 0 .\} .nf Usage: mlr format-values [options] Applies format strings to all field values, depending on autodetected type. * If a field value is detected to be integer, applies integer format. * Else, if a field value is detected to be float, applies float format. * Else, applies string format. Note: this is a low-keystroke way to apply formatting to many fields. To get finer control, please see the fmtnum function within the mlr put DSL. Note: this verb lets you apply arbitrary format strings, which can produce undefined behavior and/or program crashes. See your system's "man printf". Options: -i {integer format} Defaults to "%lld". Examples: "%06lld", "%08llx". Note that Miller integers are long long so you must use formats which apply to long long, e.g. with ll in them. Undefined behavior results otherwise. -f {float format} Defaults to "%lf". Examples: "%8.3lf", "%.6le". Note that Miller floats are double-precision so you must use formats which apply to double, e.g. with l[efg] in them. Undefined behavior results otherwise. -s {string format} Defaults to "%s". Examples: "_%s", "%08s". Note that you must use formats which apply to string, e.g. with s in them. Undefined behavior results otherwise. -n Coerce field values autodetected as int to float, and then apply the float format. .fi .if n \{\ .RE .SS "fraction" .if n \{\ .RS 0 .\} .nf Usage: mlr fraction [options] For each record's value in specified fields, computes the ratio of that value to the sum of values in that field over all input records. E.g. with input records x=1 x=2 x=3 and x=4, emits output records x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 Note: this is internally a two-pass algorithm: on the first pass it retains input records and accumulates sums; on the second pass it computes quotients and emits output records. This means it produces no output until all input is read. Options: -f {a,b,c} Field name(s) for fraction calculation -g {d,e,f} Optional group-by-field name(s) for fraction counts -p Produce percents [0..100], not fractions [0..1]. Output field names end with "_percent" rather than "_fraction" -c Produce cumulative distributions, i.e. running sums: each output value folds in the sum of the previous for the specified group E.g. with input records x=1 x=2 x=3 and x=4, emits output records x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 .fi .if n \{\ .RE .SS "grep" .if n \{\ .RS 0 .\} .nf Usage: mlr grep [options] {regular expression} Passes through records which match {regex}. Options: -i Use case-insensitive search. -v Invert: pass through records which do not match the regex. Note that "mlr filter" is more powerful, but requires you to know field names. By contrast, "mlr grep" allows you to regex-match the entire record. It does this by formatting each record in memory as DKVP, using command-line-specified ORS/OFS/OPS, and matching the resulting line against the regex specified here. In particular, the regex is not applied to the input stream: if you have CSV with header line "x,y,z" and data line "1,2,3" then the regex will be matched, not against either of these lines, but against the DKVP line "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, and this command is intended to be merely a keystroke-saver. To get all the features of system grep, you can do "mlr --odkvp ... | grep ... | mlr --idkvp ..." .fi .if n \{\ .RE .SS "group-by" .if n \{\ .RS 0 .\} .nf Usage: mlr group-by {comma-separated field names} Outputs records in batches having identical values at specified field names. .fi .if n \{\ .RE .SS "group-like" .if n \{\ .RS 0 .\} .nf Usage: mlr group-like Outputs records in batches having identical field names. .fi .if n \{\ .RE .SS "having-fields" .if n \{\ .RS 0 .\} .nf Usage: mlr having-fields [options] Conditionally passes through records depending on each record's field names. Options: --at-least {comma-separated names} --which-are {comma-separated names} --at-most {comma-separated names} --all-matching {regular expression} --any-matching {regular expression} --none-matching {regular expression} Examples: mlr having-fields --which-are amount,status,owner mlr having-fields --any-matching 'sda[0-9]' mlr having-fields --any-matching '"sda[0-9]"' mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) .fi .if n \{\ .RE .SS "head" .if n \{\ .RS 0 .\} .nf Usage: mlr head [options] -n {count} Head count to print; default 10 -g {a,b,c} Optional group-by-field names for head counts Passes through the first n records, optionally by category. Without -g, ceases consuming more input (i.e. is fast) when n records have been read. .fi .if n \{\ .RE .SS "histogram" .if n \{\ .RS 0 .\} .nf Usage: mlr histogram [options] -f {a,b,c} Value-field names for histogram counts --lo {lo} Histogram low value --hi {hi} Histogram high value --nbins {n} Number of histogram bins --auto Automatically computes limits, ignoring --lo and --hi. Holds all values in memory before producing any output. -o {prefix} Prefix for output field name. Default: no prefix. Just a histogram. Input values < lo or > hi are not counted. .fi .if n \{\ .RE .SS "join" .if n \{\ .RS 0 .\} .nf Usage: mlr join [options] Joins records from specified left file name with records from all file names at the end of the Miller argument list. Functionality is essentially the same as the system "join" command, but for record streams. Options: -f {left file name} -j {a,b,c} Comma-separated join-field names for output -l {a,b,c} Comma-separated join-field names for left input file; defaults to -j values if omitted. -r {a,b,c} Comma-separated join-field names for right input file(s); defaults to -j values if omitted. --lp {text} Additional prefix for non-join output field names from the left file --rp {text} Additional prefix for non-join output field names from the right file(s) --np Do not emit paired records --ul Emit unpaired records from the left file --ur Emit unpaired records from the right file(s) -s|--sorted-input Require sorted input: records must be sorted lexically by their join-field names, else not all records will be paired. The only likely use case for this is with a left file which is too big to fit into system memory otherwise. -u Enable unsorted input. (This is the default even without -u.) In this case, the entire left file will be loaded into memory. --prepipe {command} As in main input options; see mlr --help for details. If you wish to use a prepipe command for the main input as well as here, it must be specified there as well as here. File-format options default to those for the right file names on the Miller argument list, but may be overridden for the left file as follows. Please see the main "mlr --help" for more information on syntax for these arguments. -i {one of csv,dkvp,nidx,pprint,xtab} --irs {record-separator character} --ifs {field-separator character} --ips {pair-separator character} --repifs --repips --mmap --no-mmap Please use "mlr --usage-separator-options" for information on specifying separators. Please see http://johnkerl.org/miller/doc/reference.html for more information including examples. .fi .if n \{\ .RE .SS "label" .if n \{\ .RS 0 .\} .nf Usage: mlr label {new1,new2,new3,...} Given n comma-separated names, renames the first n fields of each record to have the respective name. (Fields past the nth are left with their original names.) Particularly useful with --inidx or --implicit-csv-header, to give useful names to otherwise integer-indexed fields. Examples: "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" .fi .if n \{\ .RE .SS "least-frequent" .if n \{\ .RS 0 .\} .nf Usage: mlr least-frequent [options] Shows the least frequently occurring distinct values for specified field names. The first entry is the statistical anti-mode; the remaining are runners-up. Options: -f {one or more comma-separated field names}. Required flag. -n {count}. Optional flag defaulting to 10. -b Suppress counts; show only field values. -o {name} Field name for output count. Default "count". See also "mlr most-frequent". .fi .if n \{\ .RE .SS "merge-fields" .if n \{\ .RS 0 .\} .nf Usage: mlr merge-fields [options] Computes univariate statistics for each input record, accumulated across specified fields. Options: -a {sum,count,...} Names of accumulators. One or more of: count Count instances of fields mode Find most-frequently-occurring values for fields; first-found wins tie antimode Find least-frequently-occurring values for fields; first-found wins tie sum Compute sums of specified fields mean Compute averages (sample means) of specified fields stddev Compute sample standard deviation of specified fields var Compute sample variance of specified fields meaneb Estimate error bars for averages (assuming no sample autocorrelation) skewness Compute sample skewness of specified fields kurtosis Compute sample kurtosis of specified fields min Compute minimum values of specified fields max Compute maximum values of specified fields -f {a,b,c} Value-field names on which to compute statistics. Requires -o. -r {a,b,c} Regular expressions for value-field names on which to compute statistics. Requires -o. -c {a,b,c} Substrings for collapse mode. All fields which have the same names after removing substrings will be accumulated together. Please see examples below. -i Use interpolated percentiles, like R's type=7; default like type=1. Not sensical for string-valued fields. -o {name} Output field basename for -f/-r. -k Keep the input fields which contributed to the output statistics; the default is to omit them. -F Computes integerable things (e.g. count) in floating point. String-valued data make sense unless arithmetic on them is required, e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, numbers are less than strings. Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are summed over. Example: mlr merge-fields -a sum,count -r in_,out_ -o bar produces "bar_sum=15,bar_count=4" since all four fields are summed over. Example: mlr merge-fields -a sum,count -c in_,out_ produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to "b_y", and "b_out_x" collapses to "b_x". .fi .if n \{\ .RE .SS "most-frequent" .if n \{\ .RS 0 .\} .nf Usage: mlr most-frequent [options] Shows the most frequently occurring distinct values for specified field names. The first entry is the statistical mode; the remaining are runners-up. Options: -f {one or more comma-separated field names}. Required flag. -n {count}. Optional flag defaulting to 10. -b Suppress counts; show only field values. -o {name} Field name for output count. Default "count". See also "mlr least-frequent". .fi .if n \{\ .RE .SS "nest" .if n \{\ .RS 0 .\} .nf Usage: mlr nest [options] Explodes specified field values into separate fields/records, or reverses this. Options: --explode,--implode One is required. --values,--pairs One is required. --across-records,--across-fields One is required. -f {field name} Required. --nested-fs {string} Defaults to ";". Field separator for nested values. --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} Please use "mlr --usage-separator-options" for information on specifying separators. Examples: mlr nest --explode --values --across-records -f x with input record "x=a;b;c,y=d" produces output records "x=a,y=d" "x=b,y=d" "x=c,y=d" Use --implode to do the reverse. mlr nest --explode --values --across-fields -f x with input record "x=a;b;c,y=d" produces output records "x_1=a,x_2=b,x_3=c,y=d" Use --implode to do the reverse. mlr nest --explode --pairs --across-records -f x with input record "x=a:1;b:2;c:3,y=d" produces output records "a=1,y=d" "b=2,y=d" "c=3,y=d" mlr nest --explode --pairs --across-fields -f x with input record "x=a:1;b:2;c:3,y=d" produces output records "a=1,b=2,c=3,y=d" Notes: * With --pairs, --implode doesn't make sense since the original field name has been lost. * The combination "--implode --values --across-records" is non-streaming: no output records are produced until all input records have been read. In particular, this means it won't work in tail -f contexts. But all other flag combinations result in streaming (tail -f friendly) data processing. * It's up to you to ensure that the nested-fs is distinct from your data's IFS: e.g. by default the former is semicolon and the latter is comma. See also mlr reshape. .fi .if n \{\ .RE .SS "nothing" .if n \{\ .RS 0 .\} .nf Usage: mlr nothing [options] Drops all input records. Useful for testing, or after tee/print/etc. have produced other output. .fi .if n \{\ .RE .SS "put" .if n \{\ .RS 0 .\} .nf Usage: mlr put [options] {expression} Adds/updates specified field(s). Expressions are semicolon-separated and must either be assignments, or evaluate to boolean. Booleans with following statements in curly braces control whether those statements are executed; booleans without following curly braces do nothing except side effects (e.g. regex-captures into \e1, \e2, etc.). Conversion options: -S: Keeps field values as strings with no type inference to int or float. -F: Keeps field values as strings or floats with no inference to int. All field values are type-inferred to int/float/string unless this behavior is suppressed with -S or -F. Output/formatting options: --oflatsep {string}: Separator to use when flattening multi-level @-variables to output records for emit. Default ":". --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. --no-fflush: for emit, tee, print, and dump, don't call fflush() after every record. Expression-specification options: -f {filename}: the DSL expression is taken from the specified file rather than from the command line. Outer single quotes wrapping the expression should not be placed in the file. If -f is specified more than once, all input files specified using -f are concatenated to produce the expression. (For example, you can define functions in one file and call them from another.) -e {expression}: You can use this after -f to add an expression. Example use case: define functions/subroutines in a file you specify with -f, then call them with an expression you specify with -e. (If you mix -e and -f then the expressions are evaluated in the order encountered. Since the expression pieces are simply concatenated, please be sure to use intervening semicolons to separate expressions.) Tracing options: -v: Prints the expressions's AST (abstract syntax tree), which gives full transparency on the precedence and associativity rules of Miller's grammar, to stdout. -a: Prints a low-level stack-allocation trace to stdout. -t: Prints a low-level parser trace to stderr. -T: Prints a every statement to stderr as it is executed. Other options: -q: Does not include the modified record in the output stream. Useful for when all desired output is in begin and/or end blocks. Please use a dollar sign for field names and double-quotes for string literals. If field names have special characters such as "." then you might use braces, e.g. '${field.name}'. Miller built-in variables are NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment variables. The environment-variable name may be an expression, e.g. a field value. Use # to comment to end of line. Examples: mlr put '$y = log10($x); $z = sqrt($y)' mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\e1"; $c = "right_\e2"' mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\e1"; $c = "right_\e2" }' mlr put '$filename = FILENAME' mlr put '$colored_shape = $color . "_" . $shape' mlr put '$y = cos($theta); $z = atan2($y, $x)' mlr put '$name = sub($name, "http.*com"i, "")' mlr put -q '@sum += $x; end {emit @sum}' mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' mlr put ' $x = 1; #$y = 2; $z = 3 ' Please see also 'mlr -k' for examples using redirected output. Please see http://johnkerl.org/miller/doc/reference.html for more information including function list. Or "mlr -f". Please see in particular: http://www.johnkerl.org/miller/doc/reference.html#put .fi .if n \{\ .RE .SS "regularize" .if n \{\ .RS 0 .\} .nf Usage: mlr regularize For records seen earlier in the data stream with same field names in a different order, outputs them with field names in the previously encountered order. Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 .fi .if n \{\ .RE .SS "remove-empty-columns" .if n \{\ .RS 0 .\} .nf Usage: mlr remove-empty-columns Omits fields which are empty on every input row. Non-streaming. .fi .if n \{\ .RE .SS "rename" .if n \{\ .RS 0 .\} .nf Usage: mlr rename [options] {old1,new1,old2,new2,...} Renames specified fields. Options: -r Treat old field names as regular expressions. "ab", "a.*b" will match any field name containing the substring "ab" or matching "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may be used. New field names may be plain strings, or may contain capture groups of the form "\e1" through "\e9". Wrapping the regex in double quotes is optional, but is required if you wish to follow it with 'i' to indicate case-insensitivity. -g Do global replacement within each field name rather than first-match replacement. Examples: mlr rename old_name,new_name' mlr rename old_name_1,new_name_1,old_name_2,new_name_2' mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" mlr rename -r '"Date_[0-9]+",Date' Same mlr rename -r 'Date_([0-9]+).*,\e1' Rename all such fields to be of the form 20151015 mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" .fi .if n \{\ .RE .SS "reorder" .if n \{\ .RS 0 .\} .nf Usage: mlr reorder [options] -f {a,b,c} Field names to reorder. -e Put specified field names at record end: default is to put them at record start. Examples: mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". .fi .if n \{\ .RE .SS "repeat" .if n \{\ .RS 0 .\} .nf Usage: mlr repeat [options] Copies input records to output records multiple times. Options must be exactly one of the following: -n {repeat count} Repeat each input record this many times. -f {field name} Same, but take the repeat count from the specified field name of each input record. Example: echo x=0 | mlr repeat -n 4 then put '$x=urand()' produces: x=0.488189 x=0.484973 x=0.704983 x=0.147311 Example: echo a=1,b=2,c=3 | mlr repeat -f b produces: a=1,b=2,c=3 a=1,b=2,c=3 Example: echo a=1,b=2,c=3 | mlr repeat -f c produces: a=1,b=2,c=3 a=1,b=2,c=3 a=1,b=2,c=3 .fi .if n \{\ .RE .SS "reshape" .if n \{\ .RS 0 .\} .nf Usage: mlr reshape [options] Wide-to-long options: -i {input field names} -o {key-field name,value-field name} -r {input field regexes} -o {key-field name,value-field name} These pivot/reshape the input data such that the input fields are removed and separate records are emitted for each key/value pair. Note: this works with tail -f and produces output records for each input record seen. Long-to-wide options: -s {key-field name,value-field name} These pivot/reshape the input data to undo the wide-to-long operation. Note: this does not work with tail -f; it produces output records only after all input records have been read. Examples: Input file "wide.txt": time X Y 2009-01-01 0.65473572 2.4520609 2009-01-02 -0.89248112 0.2154713 2009-01-03 0.98012375 1.3179287 mlr --pprint reshape -i X,Y -o item,value wide.txt time item value 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt time item value 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 Input file "long.txt": time item value 2009-01-01 X 0.65473572 2009-01-01 Y 2.4520609 2009-01-02 X -0.89248112 2009-01-02 Y 0.2154713 2009-01-03 X 0.98012375 2009-01-03 Y 1.3179287 mlr --pprint reshape -s item,value long.txt time X Y 2009-01-01 0.65473572 2.4520609 2009-01-02 -0.89248112 0.2154713 2009-01-03 0.98012375 1.3179287 See also mlr nest. .fi .if n \{\ .RE .SS "sample" .if n \{\ .RS 0 .\} .nf Usage: mlr sample [options] Reservoir sampling (subsampling without replacement), optionally by category. -k {count} Required: number of records to output, total, or by group if using -g. -g {a,b,c} Optional: group-by-field names for samples. See also mlr bootstrap and mlr shuffle. .fi .if n \{\ .RE .SS "sec2gmt" .if n \{\ .RS 0 .\} .nf Usage: mlr sec2gmt [options] {comma-separated list of field names} Replaces a numeric field representing seconds since the epoch with the corresponding GMT timestamp; leaves non-numbers as-is. This is nothing more than a keystroke-saver for the sec2gmt function: mlr sec2gmt time1,time2 is the same as mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' Options: -1 through -9: format the seconds using 1..9 decimal places, respectively. .fi .if n \{\ .RE .SS "sec2gmtdate" .if n \{\ .RS 0 .\} .nf Usage: mlr sec2gmtdate {comma-separated list of field names} Replaces a numeric field representing seconds since the epoch with the corresponding GMT year-month-day timestamp; leaves non-numbers as-is. This is nothing more than a keystroke-saver for the sec2gmtdate function: mlr sec2gmtdate time1,time2 is the same as mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' .fi .if n \{\ .RE .SS "seqgen" .if n \{\ .RS 0 .\} .nf Usage: mlr seqgen [options] Produces a sequence of counters. Discards the input record stream. Produces output as specified by the following options: -f {name} Field name for counters; default "i". --start {number} Inclusive start value; default "1". --stop {number} Inclusive stop value; default "100". --step {number} Step value; default "1". Start, stop, and/or step may be floating-point. Output is integer if start, stop, and step are all integers. Step may be negative. It may not be zero unless start == stop. .fi .if n \{\ .RE .SS "shuffle" .if n \{\ .RS 0 .\} .nf Usage: mlr shuffle {no options} Outputs records randomly permuted. No output records are produced until all input records are read. See also mlr bootstrap and mlr sample. .fi .if n \{\ .RE .SS "skip-trivial-records" .if n \{\ .RS 0 .\} .nf Usage: mlr skip-trivial-records [options] Passes through all records except: * those with zero fields; * those for which all fields have empty value. .fi .if n \{\ .RE .SS "sort" .if n \{\ .RS 0 .\} .nf Usage: mlr sort {flags} Flags: -f {comma-separated field names} Lexical ascending -n {comma-separated field names} Numerical ascending; nulls sort last -nf {comma-separated field names} Same as -n -r {comma-separated field names} Lexical descending -nr {comma-separated field names} Numerical descending; nulls sort first Sorts records primarily by the first specified field, secondarily by the second field, and so on. (Any records not having all specified sort keys will appear at the end of the output, in the order they were encountered, regardless of the specified sort order.) The sort is stable: records that compare equal will sort in the order they were encountered in the input record stream. Example: mlr sort -f a,b -nr x,y,z which is the same as: mlr sort -f a -f b -nr x -nr y -nr z .fi .if n \{\ .RE .SS "stats1" .if n \{\ .RS 0 .\} .nf Usage: mlr stats1 [options] Computes univariate statistics for one or more given fields, accumulated across the input record stream. Options: -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or one or more of: count Count instances of fields mode Find most-frequently-occurring values for fields; first-found wins tie antimode Find least-frequently-occurring values for fields; first-found wins tie sum Compute sums of specified fields mean Compute averages (sample means) of specified fields stddev Compute sample standard deviation of specified fields var Compute sample variance of specified fields meaneb Estimate error bars for averages (assuming no sample autocorrelation) skewness Compute sample skewness of specified fields kurtosis Compute sample kurtosis of specified fields min Compute minimum values of specified fields max Compute maximum values of specified fields -f {a,b,c} Value-field names on which to compute statistics --fr {regex} Regex for value-field names on which to compute statistics (compute statsitics on values in all field names matching regex) --fx {regex} Inverted regex for value-field names on which to compute statistics (compute statsitics on values in all field names not matching regex) -g {d,e,f} Optional group-by-field names --gr {regex} Regex for optional group-by-field names (group by values in field names matching regex) --gx {regex} Inverted regex for optional group-by-field names (group by values in field names not matching regex) --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} -i Use interpolated percentiles, like R's type=7; default like type=1. Not sensical for string-valued fields. -s Print iterative stats. Useful in tail -f contexts (in which case please avoid pprint-format output since end of input stream will never be seen). -F Computes integerable things (e.g. count) in floating point. Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape Example: mlr stats1 -a count,mode -f size Example: mlr stats1 -a count,mode -f size -g shape Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' This computes count and mode statistics on all field names beginning with a through h, grouped by all field names starting with k. Notes: * p50 and median are synonymous. * min and max output the same results as p0 and p100, respectively, but use less memory. * String-valued data make sense unless arithmetic on them is required, e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, numbers are less than strings. * count and mode allow text input; the rest require numeric input. In particular, 1 and 1.0 are distinct text for count and mode. * When there are mode ties, the first-encountered datum wins. .fi .if n \{\ .RE .SS "stats2" .if n \{\ .RS 0 .\} .nf Usage: mlr stats2 [options] Computes bivariate statistics for one or more given field-name pairs, accumulated across the input record stream. -a {linreg-ols,corr,...} Names of accumulators: one or more of: linreg-pca Linear regression using principal component analysis linreg-ols Linear regression using ordinary least squares r2 Quality metric for linreg-ols (linreg-pca emits its own) logireg Logistic regression corr Sample correlation cov Sample covariance covx Sample-covariance matrix -f {a,b,c,d} Value-field name-pairs on which to compute statistics. There must be an even number of names. -g {e,f,g} Optional group-by-field names. -v Print additional output for linreg-pca. -s Print iterative stats. Useful in tail -f contexts (in which case please avoid pprint-format output since end of input stream will never be seen). --fit Rather than printing regression parameters, applies them to the input data to compute new fit fields. All input records are held in memory until end of input stream. Has effect only for linreg-ols, linreg-pca, and logireg. Only one of -s or --fit may be used. Example: mlr stats2 -a linreg-pca -f x,y Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape Example: mlr stats2 -a corr -f x,y .fi .if n \{\ .RE .SS "step" .if n \{\ .RS 0 .\} .nf Usage: mlr step [options] Computes values dependent on the previous record, optionally grouped by category. Options: -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: delta Compute differences in field(s) between successive records shift Include value(s) in field(s) from previous record, if any from-first Compute differences in field(s) from first record ratio Compute ratios in field(s) between successive records rsum Compute running sums of field(s) between successive records counter Count instances of field(s) between successive records ewma Exponentially weighted moving average over successive records -f {a,b,c} Value-field names on which to compute statistics -g {d,e,f} Optional group-by-field names -F Computes integerable things (e.g. counter) in floating point. -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no smoothing), near under under 1 is light smoothing, near over 0 is heavy smoothing. Multiple weights may be specified, e.g. "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted is "-d 0.5". -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to the -d values. If supplied, the number of -o values must be the same as the number of -d values. Examples: mlr step -a rsum -f request_size mlr step -a delta -f request_size -g hostname mlr step -a ewma -d 0.1,0.9 -f x,y mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name Please see http://johnkerl.org/miller/doc/reference.html#filter or https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average for more information on EWMA. .fi .if n \{\ .RE .SS "tac" .if n \{\ .RS 0 .\} .nf Usage: mlr tac Prints records in reverse order from the order in which they were encountered. .fi .if n \{\ .RE .SS "tail" .if n \{\ .RS 0 .\} .nf Usage: mlr tail [options] -n {count} Tail count to print; default 10 -g {a,b,c} Optional group-by-field names for tail counts Passes through the last n records, optionally by category. .fi .if n \{\ .RE .SS "tee" .if n \{\ .RS 0 .\} .nf Usage: mlr tee [options] {filename} Passes through input records (like mlr cat) but also writes to specified output file, using output-format flags from the command line (e.g. --ocsv). See also the "tee" keyword within mlr put, which allows data-dependent filenames. Options: -a: append to existing file, if any, rather than overwriting. --no-fflush: don't call fflush() after every record. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. .fi .if n \{\ .RE .SS "top" .if n \{\ .RS 0 .\} .nf Usage: mlr top [options] -f {a,b,c} Value-field names for top counts. -g {d,e,f} Optional group-by-field names for top counts. -n {count} How many records to print per category; default 1. -a Print all fields for top-value records; default is to print only value and group-by fields. Requires a single value-field name only. --min Print top smallest values; default is top largest values. -F Keep top values as floats even if they look like integers. -o {name} Field name for output indices. Default "top_idx". Prints the n records with smallest/largest values at specified fields, optionally by category. .fi .if n \{\ .RE .SS "uniq" .if n \{\ .RS 0 .\} .nf Usage: mlr uniq [options] Prints distinct values for specified field names. With -c, same as count-distinct. For uniq, -f is a synonym for -g. Options: -g {d,e,f} Group-by-field names for uniq counts. -c Show repeat counts in addition to unique values. -n Show only the number of distinct values. -o {name} Field name for output count. Default "count". -a Output each unique record only once. Incompatible with -g. With -c, produces unique records, with repeat counts for each. With -n, produces only one record which is the unique-record count. With neither -c nor -n, produces unique records. .fi .if n \{\ .RE .SS "unsparsify" .if n \{\ .RS 0 .\} .nf Usage: mlr unsparsify [options] Prints records with the union of field names over all input records. For field names absent in a given record but present in others, fills in a value. This verb retains all input before producing any output. Options: --fill-with {filler string} What to fill absent fields with. Defaults to the empty string. Example: if the input is two records, one being 'a=1,b=2' and the other being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and \(cqa=,b=3,c=4'. .fi .if n \{\ .RE .SH "FUNCTIONS FOR FILTER/PUT" .sp .SS "+" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Addition. + (class=arithmetic #args=1): Unary plus. .fi .if n \{\ .RE .SS "-" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Subtraction. - (class=arithmetic #args=1): Unary minus. .fi .if n \{\ .RE .SS "*" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Multiplication. .fi .if n \{\ .RE .SS "/" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Division. .fi .if n \{\ .RE .SS "//" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). .fi .if n \{\ .RE .SS ".+" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Addition, with integer-to-integer overflow \&.+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. .fi .if n \{\ .RE .SS ".-" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. \&.- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. .fi .if n \{\ .RE .SS ".*" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. .fi .if n \{\ .RE .SS "./" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Division, with integer-to-integer overflow. .fi .if n \{\ .RE .SS ".//" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. .fi .if n \{\ .RE .SS "%" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). .fi .if n \{\ .RE .SS "**" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix operator. .fi .if n \{\ .RE .SS "|" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Bitwise OR. .fi .if n \{\ .RE .SS "^" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Bitwise XOR. .fi .if n \{\ .RE .SS "&" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Bitwise AND. .fi .if n \{\ .RE .SS "~" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the regex-match operator: try '$y = ~$x'. .fi .if n \{\ .RE .SS "<<" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Bitwise left-shift. .fi .if n \{\ .RE .SS ">>" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=2): Bitwise right-shift. .fi .if n \{\ .RE .SS "bitcount" .if n \{\ .RS 0 .\} .nf (class=arithmetic #args=1): Count of 1-bits .fi .if n \{\ .RE .SS "==" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String/numeric equality. Mixing number and string results in string compare. .fi .if n \{\ .RE .SS "!=" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String/numeric inequality. Mixing number and string results in string compare. .fi .if n \{\ .RE .SS "=~" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String (left-hand side) matches regex (right-hand side), e.g. '$name =~ "^a.*b$"'. .fi .if n \{\ .RE .SS "!=~" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String (left-hand side) does not match regex (right-hand side), e.g. '$name !=~ "^a.*b$"'. .fi .if n \{\ .RE .SS ">" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String/numeric greater-than. Mixing number and string results in string compare. .fi .if n \{\ .RE .SS ">=" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number and string results in string compare. .fi .if n \{\ .RE .SS "<" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String/numeric less-than. Mixing number and string results in string compare. .fi .if n \{\ .RE .SS "<=" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number and string results in string compare. .fi .if n \{\ .RE .SS "&&" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): Logical AND. .fi .if n \{\ .RE .SS "||" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): Logical OR. .fi .if n \{\ .RE .SS "^^" .if n \{\ .RS 0 .\} .nf (class=boolean #args=2): Logical XOR. .fi .if n \{\ .RE .SS "!" .if n \{\ .RS 0 .\} .nf (class=boolean #args=1): Logical negation. .fi .if n \{\ .RE .SS "? :" .if n \{\ .RS 0 .\} .nf (class=boolean #args=3): Ternary operator. .fi .if n \{\ .RE .SS "." .if n \{\ .RS 0 .\} .nf (class=string #args=2): String concatenation. .fi .if n \{\ .RE .SS "gsub" .if n \{\ .RS 0 .\} .nf (class=string #args=3): Example: '$name=gsub($name, "old", "new")' (replace all). .fi .if n \{\ .RE .SS "regextract" .if n \{\ .RS 0 .\} .nf (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' \&. .fi .if n \{\ .RE .SS "regextract_or_else" .if n \{\ .RS 0 .\} .nf (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' \&. .fi .if n \{\ .RE .SS "strlen" .if n \{\ .RS 0 .\} .nf (class=string #args=1): String length. .fi .if n \{\ .RE .SS "sub" .if n \{\ .RS 0 .\} .nf (class=string #args=3): Example: '$name=sub($name, "old", "new")' (replace once). .fi .if n \{\ .RE .SS "ssub" .if n \{\ .RS 0 .\} .nf (class=string #args=3): Like sub but does no regexing. No characters are special. .fi .if n \{\ .RE .SS "substr" .if n \{\ .RS 0 .\} .nf (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n inclusive. Negative indices -len .. -1 alias to 0 .. len-1. .fi .if n \{\ .RE .SS "tolower" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Convert string to lowercase. .fi .if n \{\ .RE .SS "toupper" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Convert string to uppercase. .fi .if n \{\ .RE .SS "capitalize" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Convert string's first character to uppercase. .fi .if n \{\ .RE .SS "lstrip" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Strip leading whitespace from string. .fi .if n \{\ .RE .SS "rstrip" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Strip trailing whitespace from string. .fi .if n \{\ .RE .SS "strip" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Strip leading and trailing whitespace from string. .fi .if n \{\ .RE .SS "collapse_whitespace" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Strip repeated whitespace from string. .fi .if n \{\ .RE .SS "clean_whitespace" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Same as collapse_whitespace and strip. .fi .if n \{\ .RE .SS "system" .if n \{\ .RS 0 .\} .nf (class=string #args=1): Run command string, yielding its stdout minus final carriage return. .fi .if n \{\ .RE .SS "abs" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Absolute value. .fi .if n \{\ .RE .SS "acos" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Inverse trigonometric cosine. .fi .if n \{\ .RE .SS "acosh" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Inverse hyperbolic cosine. .fi .if n \{\ .RE .SS "asin" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Inverse trigonometric sine. .fi .if n \{\ .RE .SS "asinh" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Inverse hyperbolic sine. .fi .if n \{\ .RE .SS "atan" .if n \{\ .RS 0 .\} .nf (class=math #args=1): One-argument arctangent. .fi .if n \{\ .RE .SS "atan2" .if n \{\ .RS 0 .\} .nf (class=math #args=2): Two-argument arctangent. .fi .if n \{\ .RE .SS "atanh" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Inverse hyperbolic tangent. .fi .if n \{\ .RE .SS "cbrt" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Cube root. .fi .if n \{\ .RE .SS "ceil" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Ceiling: nearest integer at or above. .fi .if n \{\ .RE .SS "cos" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Trigonometric cosine. .fi .if n \{\ .RE .SS "cosh" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Hyperbolic cosine. .fi .if n \{\ .RE .SS "erf" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Error function. .fi .if n \{\ .RE .SS "erfc" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Complementary error function. .fi .if n \{\ .RE .SS "exp" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Exponential function e**x. .fi .if n \{\ .RE .SS "expm1" .if n \{\ .RS 0 .\} .nf (class=math #args=1): e**x - 1. .fi .if n \{\ .RE .SS "floor" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Floor: nearest integer at or below. .fi .if n \{\ .RE .SS "invqnorm" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Inverse of normal cumulative distribution function. Note that invqorm(urand()) is normally distributed. .fi .if n \{\ .RE .SS "log" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Natural (base-e) logarithm. .fi .if n \{\ .RE .SS "log10" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Base-10 logarithm. .fi .if n \{\ .RE .SS "log1p" .if n \{\ .RS 0 .\} .nf (class=math #args=1): log(1-x). .fi .if n \{\ .RE .SS "logifit" .if n \{\ .RS 0 .\} .nf (class=math #args=3): Given m and b from logistic regression, compute fit: $yhat=logifit($x,$m,$b). .fi .if n \{\ .RE .SS "madd" .if n \{\ .RS 0 .\} .nf (class=math #args=3): a + b mod m (integers) .fi .if n \{\ .RE .SS "max" .if n \{\ .RS 0 .\} .nf (class=math variadic): max of n numbers; null loses .fi .if n \{\ .RE .SS "mexp" .if n \{\ .RS 0 .\} .nf (class=math #args=3): a ** b mod m (integers) .fi .if n \{\ .RE .SS "min" .if n \{\ .RS 0 .\} .nf (class=math variadic): Min of n numbers; null loses .fi .if n \{\ .RE .SS "mmul" .if n \{\ .RS 0 .\} .nf (class=math #args=3): a * b mod m (integers) .fi .if n \{\ .RE .SS "msub" .if n \{\ .RS 0 .\} .nf (class=math #args=3): a - b mod m (integers) .fi .if n \{\ .RE .SS "pow" .if n \{\ .RS 0 .\} .nf (class=math #args=2): Exponentiation; same as **. .fi .if n \{\ .RE .SS "qnorm" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Normal cumulative distribution function. .fi .if n \{\ .RE .SS "round" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Round to nearest integer. .fi .if n \{\ .RE .SS "roundm" .if n \{\ .RS 0 .\} .nf (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is the same as round($x/$m)*$m .fi .if n \{\ .RE .SS "sgn" .if n \{\ .RS 0 .\} .nf (class=math #args=1): +1 for positive input, 0 for zero input, -1 for negative input. .fi .if n \{\ .RE .SS "sin" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Trigonometric sine. .fi .if n \{\ .RE .SS "sinh" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Hyperbolic sine. .fi .if n \{\ .RE .SS "sqrt" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Square root. .fi .if n \{\ .RE .SS "tan" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Trigonometric tangent. .fi .if n \{\ .RE .SS "tanh" .if n \{\ .RS 0 .\} .nf (class=math #args=1): Hyperbolic tangent. .fi .if n \{\ .RE .SS "urand" .if n \{\ .RS 0 .\} .nf (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. Int-valued example: '$n=floor(20+urand()*11)'. .fi .if n \{\ .RE .SS "urandrange" .if n \{\ .RS 0 .\} .nf (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). .fi .if n \{\ .RE .SS "urand32" .if n \{\ .RS 0 .\} .nf (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 inclusive. .fi .if n \{\ .RE .SS "urandint" .if n \{\ .RS 0 .\} .nf (class=math #args=2): Integer uniformly distributed between inclusive integer endpoints. .fi .if n \{\ .RE .SS "dhms2fsec" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Recovers floating-point seconds as in dhms2fsec("5d18h53m20.250000s") = 500000.250000 .fi .if n \{\ .RE .SS "dhms2sec" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Recovers integer seconds as in dhms2sec("5d18h53m20s") = 500000 .fi .if n \{\ .RE .SS "fsec2dhms" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats floating-point seconds as in fsec2dhms(500000.25) = "5d18h53m20.250000s" .fi .if n \{\ .RE .SS "fsec2hms" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats floating-point seconds as in fsec2hms(5000.25) = "01:23:20.250000" .fi .if n \{\ .RE .SS "gmt2sec" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Parses GMT timestamp as integer seconds since the epoch. .fi .if n \{\ .RE .SS "localtime2sec" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Parses local timestamp as integer seconds since the epoch. Consults $TZ environment variable. .fi .if n \{\ .RE .SS "hms2fsec" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Recovers floating-point seconds as in hms2fsec("01:23:20.250000") = 5000.250000 .fi .if n \{\ .RE .SS "hms2sec" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Recovers integer seconds as in hms2sec("01:23:20") = 5000 .fi .if n \{\ .RE .SS "sec2dhms" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats integer seconds as in sec2dhms(500000) = "5d18h53m20s" .fi .if n \{\ .RE .SS "sec2gmt" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats seconds since epoch (integer part) as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". Leaves non-numbers as-is. sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". Leaves non-numbers as-is. .fi .if n \{\ .RE .SS "sec2gmtdate" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats seconds since epoch (integer part) as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". Leaves non-numbers as-is. .fi .if n \{\ .RE .SS "sec2localtime" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats seconds since epoch (integer part) as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". Consults $TZ environment variable. Leaves non-numbers as-is. sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". Consults $TZ environment variable. Leaves non-numbers as-is. .fi .if n \{\ .RE .SS "sec2localdate" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats seconds since epoch (integer part) as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". Consults $TZ environment variable. Leaves non-numbers as-is. .fi .if n \{\ .RE .SS "sec2hms" .if n \{\ .RS 0 .\} .nf (class=time #args=1): Formats integer seconds as in sec2hms(5000) = "01:23:20" .fi .if n \{\ .RE .SS "strftime" .if n \{\ .RS 0 .\} .nf (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". Format strings are as in the C library (please see "man strftime" on your system), with the Miller-specific addition of "%1S" through "%9S" which format the seconds with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) See also strftime_local. .fi .if n \{\ .RE .SS "strftime_local" .if n \{\ .RS 0 .\} .nf (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. .fi .if n \{\ .RE .SS "strptime" .if n \{\ .RS 0 .\} .nf (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. See also strptime_local. .fi .if n \{\ .RE .SS "strptime_local" .if n \{\ .RS 0 .\} .nf (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. .fi .if n \{\ .RE .SS "systime" .if n \{\ .RS 0 .\} .nf (class=time #args=0): Floating-point seconds since the epoch, e.g. 1440768801.748936. .fi .if n \{\ .RE .SS "is_absent" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): False if field is present in input, false otherwise .fi .if n \{\ .RE .SS "is_bool" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. .fi .if n \{\ .RE .SS "is_boolean" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. .fi .if n \{\ .RE .SS "is_empty" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present in input with empty string value, false otherwise. .fi .if n \{\ .RE .SS "is_empty_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if argument is a map which is empty. .fi .if n \{\ .RE .SS "is_float" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present with value inferred to be float .fi .if n \{\ .RE .SS "is_int" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present with value inferred to be int .fi .if n \{\ .RE .SS "is_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if argument is a map. .fi .if n \{\ .RE .SS "is_nonempty_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if argument is a map which is non-empty. .fi .if n \{\ .RE .SS "is_not_empty" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): False if field is present in input with empty value, true otherwise .fi .if n \{\ .RE .SS "is_not_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if argument is not a map. .fi .if n \{\ .RE .SS "is_not_null" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): False if argument is null (empty or absent), true otherwise. .fi .if n \{\ .RE .SS "is_null" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if argument is null (empty or absent), false otherwise. .fi .if n \{\ .RE .SS "is_numeric" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present with value inferred to be int or float .fi .if n \{\ .RE .SS "is_present" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present in input, false otherwise. .fi .if n \{\ .RE .SS "is_string" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): True if field is present with string (including empty-string) value .fi .if n \{\ .RE .SS "asserting_absent" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is absent in the input data, else throws an error. .fi .if n \{\ .RE .SS "asserting_bool" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present with boolean value, else throws an error. .fi .if n \{\ .RE .SS "asserting_boolean" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present with boolean value, else throws an error. .fi .if n \{\ .RE .SS "asserting_empty" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present in input with empty value, else throws an error. .fi .if n \{\ .RE .SS "asserting_empty_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is a map with empty value, else throws an error. .fi .if n \{\ .RE .SS "asserting_float" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present with float value, else throws an error. .fi .if n \{\ .RE .SS "asserting_int" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present with int value, else throws an error. .fi .if n \{\ .RE .SS "asserting_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is a map, else throws an error. .fi .if n \{\ .RE .SS "asserting_nonempty_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is a non-empty map, else throws an error. .fi .if n \{\ .RE .SS "asserting_not_empty" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present in input with non-empty value, else throws an error. .fi .if n \{\ .RE .SS "asserting_not_map" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is not a map, else throws an error. .fi .if n \{\ .RE .SS "asserting_not_null" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), else throws an error. .fi .if n \{\ .RE .SS "asserting_null" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is null (empty or absent), else throws an error. .fi .if n \{\ .RE .SS "asserting_numeric" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present with int or float value, else throws an error. .fi .if n \{\ .RE .SS "asserting_present" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present in input, else throws an error. .fi .if n \{\ .RE .SS "asserting_string" .if n \{\ .RS 0 .\} .nf (class=typing #args=1): Returns argument if it is present with string (including empty-string) value, else throws an error. .fi .if n \{\ .RE .SS "boolean" .if n \{\ .RS 0 .\} .nf (class=conversion #args=1): Convert int/float/bool/string to boolean. .fi .if n \{\ .RE .SS "float" .if n \{\ .RS 0 .\} .nf (class=conversion #args=1): Convert int/float/bool/string to float. .fi .if n \{\ .RE .SS "fmtnum" .if n \{\ .RS 0 .\} .nf (class=conversion #args=2): Convert int/float/bool to string using printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers are all long long or double. If you use formats like %d or %f, behavior is undefined. .fi .if n \{\ .RE .SS "hexfmt" .if n \{\ .RS 0 .\} .nf (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". .fi .if n \{\ .RE .SS "int" .if n \{\ .RS 0 .\} .nf (class=conversion #args=1): Convert int/float/bool/string to int. .fi .if n \{\ .RE .SS "string" .if n \{\ .RS 0 .\} .nf (class=conversion #args=1): Convert int/float/bool/string to string. .fi .if n \{\ .RE .SS "typeof" .if n \{\ .RS 0 .\} .nf (class=conversion #args=1): Convert argument to type of argument (e.g. MT_STRING). For debug. .fi .if n \{\ .RE .SS "depth" .if n \{\ .RS 0 .\} .nf (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. .fi .if n \{\ .RE .SS "haskey" .if n \{\ .RS 0 .\} .nf (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or \(cqhaskey(mymap, mykey)'. Error if 1st argument is not a map. .fi .if n \{\ .RE .SS "joink" .if n \{\ .RS 0 .\} .nf (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. .fi .if n \{\ .RE .SS "joinkv" .if n \{\ .RS 0 .\} .nf (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' .fi .if n \{\ .RE .SS "joinv" .if n \{\ .RS 0 .\} .nf (class=maps #args=2): Makes string from map keys. E.g. 'joinv(mymap, ",")'. .fi .if n \{\ .RE .SS "leafcount" .if n \{\ .RS 0 .\} .nf (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, same as length. .fi .if n \{\ .RE .SS "length" .if n \{\ .RS 0 .\} .nf (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. .fi .if n \{\ .RE .SS "mapdiff" .if n \{\ .RS 0 .\} .nf (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. .fi .if n \{\ .RE .SS "mapexcept" .if n \{\ .RS 0 .\} .nf (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. .fi .if n \{\ .RE .SS "mapselect" .if n \{\ .RS 0 .\} .nf (class=maps variadic): Returns a map with only keys from remaining arguments set. E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. .fi .if n \{\ .RE .SS "mapsum" .if n \{\ .RS 0 .\} .nf (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. .fi .if n \{\ .RE .SS "splitkv" .if n \{\ .RS 0 .\} .nf (class=maps #args=3): Splits string by separators into map with type inference. E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. .fi .if n \{\ .RE .SS "splitkvx" .if n \{\ .RS 0 .\} .nf (class=maps #args=3): Splits string by separators into map without type inference (keys and values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives \(cq{"a" : "1", "b" : "2", "c" : "3"}'. .fi .if n \{\ .RE .SS "splitnv" .if n \{\ .RS 0 .\} .nf (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. .fi .if n \{\ .RE .SS "splitnvx" .if n \{\ .RS 0 .\} .nf (class=maps #args=2): Splits string by separator into integer-indexed map without type inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. .fi .if n \{\ .RE .SH "KEYWORDS FOR PUT AND FILTER" .sp .SS "all" .if n \{\ .RS 0 .\} .nf all: used in "emit", "emitp", and "unset" as a synonym for @* .fi .if n \{\ .RE .SS "begin" .if n \{\ .RS 0 .\} .nf begin: defines a block of statements to be executed before input records are ingested. The body statements must be wrapped in curly braces. Example: 'begin { @count = 0 }' .fi .if n \{\ .RE .SS "bool" .if n \{\ .RS 0 .\} .nf bool: declares a boolean local variable in the current curly-braced scope. Type-checking happens at assignment: 'bool b = 1' is an error. .fi .if n \{\ .RE .SS "break" .if n \{\ .RS 0 .\} .nf break: causes execution to continue after the body of the current for/while/do-while loop. .fi .if n \{\ .RE .SS "call" .if n \{\ .RS 0 .\} .nf call: used for invoking a user-defined subroutine. Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' .fi .if n \{\ .RE .SS "continue" .if n \{\ .RS 0 .\} .nf continue: causes execution to skip the remaining statements in the body of the current for/while/do-while loop. For-loop increments are still applied. .fi .if n \{\ .RE .SS "do" .if n \{\ .RS 0 .\} .nf do: with "while", introduces a do-while loop. The body statements must be wrapped in curly braces. .fi .if n \{\ .RE .SS "dump" .if n \{\ .RS 0 .\} .nf dump: prints all currently defined out-of-stream variables immediately to stdout as JSON. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' .fi .if n \{\ .RE .SS "edump" .if n \{\ .RS 0 .\} .nf edump: prints all currently defined out-of-stream variables immediately to stderr as JSON. Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' .fi .if n \{\ .RE .SS "elif" .if n \{\ .RS 0 .\} .nf elif: the way Miller spells "else if". The body statements must be wrapped in curly braces. .fi .if n \{\ .RE .SS "else" .if n \{\ .RS 0 .\} .nf else: terminates an if/elif/elif chain. The body statements must be wrapped in curly braces. .fi .if n \{\ .RE .SS "emit" .if n \{\ .RS 0 .\} .nf emit: inserts an out-of-stream variable into the output record stream. Hashmap indices present in the data but not slotted by emit arguments are not output. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' Please see http://johnkerl.org/miller/doc for more information. .fi .if n \{\ .RE .SS "emitf" .if n \{\ .RS 0 .\} .nf emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the output record stream. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' Please see http://johnkerl.org/miller/doc for more information. .fi .if n \{\ .RE .SS "emitp" .if n \{\ .RS 0 .\} .nf emitp: inserts an out-of-stream variable into the output record stream. Hashmap indices present in the data but not slotted by emitp arguments are output concatenated with ":". With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' Please see http://johnkerl.org/miller/doc for more information. .fi .if n \{\ .RE .SS "end" .if n \{\ .RS 0 .\} .nf end: defines a block of statements to be executed after input records are ingested. The body statements must be wrapped in curly braces. Example: 'end { emit @count }' Example: 'end { eprint "Final count is " . @count }' .fi .if n \{\ .RE .SS "eprint" .if n \{\ .RS 0 .\} .nf eprint: prints expression immediately to stderr. Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' .fi .if n \{\ .RE .SS "eprintn" .if n \{\ .RS 0 .\} .nf eprintn: prints expression immediately to stderr, without trailing newline. Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' .fi .if n \{\ .RE .SS "false" .if n \{\ .RS 0 .\} .nf false: the boolean literal value. .fi .if n \{\ .RE .SS "filter" .if n \{\ .RS 0 .\} .nf filter: includes/excludes the record in the output record stream. Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' Instead of put with 'filter false' you can simply use put -q. The following uses the input record to accumulate data but only prints the running sum without printing the input record: Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' .fi .if n \{\ .RE .SS "float" .if n \{\ .RS 0 .\} .nf float: declares a floating-point local variable in the current curly-braced scope. Type-checking happens at assignment: 'float x = 0' is an error. .fi .if n \{\ .RE .SS "for" .if n \{\ .RS 0 .\} .nf for: defines a for-loop using one of three styles. The body statements must be wrapped in curly braces. For-loop over stream record: Example: 'for (k, v in $*) { ... }' For-loop over out-of-stream variables: Example: 'for (k, v in @counts) { ... }' Example: 'for ((k1, k2), v in @counts) { ... }' Example: 'for ((k1, k2, k3), v in @*) { ... }' C-style for-loop: Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' .fi .if n \{\ .RE .SS "func" .if n \{\ .RS 0 .\} .nf func: used for defining a user-defined function. Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' .fi .if n \{\ .RE .SS "if" .if n \{\ .RS 0 .\} .nf if: starts an if/elif/elif chain. The body statements must be wrapped in curly braces. .fi .if n \{\ .RE .SS "in" .if n \{\ .RS 0 .\} .nf in: used in for-loops over stream records or out-of-stream variables. .fi .if n \{\ .RE .SS "int" .if n \{\ .RS 0 .\} .nf int: declares an integer local variable in the current curly-braced scope. Type-checking happens at assignment: 'int x = 0.0' is an error. .fi .if n \{\ .RE .SS "map" .if n \{\ .RS 0 .\} .nf map: declares an map-valued local variable in the current curly-braced scope. Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is always OK. map b = a is OK or not depending on whether a is a map. .fi .if n \{\ .RE .SS "num" .if n \{\ .RS 0 .\} .nf num: declares an int/float local variable in the current curly-braced scope. Type-checking happens at assignment: 'num b = true' is an error. .fi .if n \{\ .RE .SS "print" .if n \{\ .RS 0 .\} .nf print: prints expression immediately to stdout. Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' .fi .if n \{\ .RE .SS "printn" .if n \{\ .RS 0 .\} .nf printn: prints expression immediately to stdout, without trailing newline. Example: mlr --from f.dat put -q 'printn "."; end { print "" }' .fi .if n \{\ .RE .SS "return" .if n \{\ .RS 0 .\} .nf return: specifies the return value from a user-defined function. Omitted return statements (including via if-branches) result in an absent-null return value, which in turns results in a skipped assignment to an LHS. .fi .if n \{\ .RE .SS "stderr" .if n \{\ .RS 0 .\} .nf stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename to print to standard error. .fi .if n \{\ .RE .SS "stdout" .if n \{\ .RS 0 .\} .nf stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename to print to standard output. .fi .if n \{\ .RE .SS "str" .if n \{\ .RS 0 .\} .nf str: declares a string local variable in the current curly-braced scope. Type-checking happens at assignment. .fi .if n \{\ .RE .SS "subr" .if n \{\ .RS 0 .\} .nf subr: used for defining a subroutine. Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' .fi .if n \{\ .RE .SS "tee" .if n \{\ .RS 0 .\} .nf tee: prints the current record to specified file. This is an immediate print to the specified file (except for pprint format which of course waits until the end of the input stream to format all output). The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output. See also mlr -h. emit with redirect and tee with redirect are identical, except tee can only output $*. Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' Example: mlr --from f.dat put 'tee > stderr, $*' Example: mlr --from f.dat put -q 'tee | "tr [a-z\e] [A-Z\e]", $*' Example: mlr --from f.dat put -q 'tee | "tr [a-z\e] [A-Z\e] > /tmp/data-".$a, $*' Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' .fi .if n \{\ .RE .SS "true" .if n \{\ .RS 0 .\} .nf true: the boolean literal value. .fi .if n \{\ .RE .SS "unset" .if n \{\ .RS 0 .\} .nf unset: clears field(s) from the current record, or an out-of-stream or local variable. Example: mlr --from f.dat put 'unset $x' Example: mlr --from f.dat put 'unset $*' Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' Example: mlr --from f.dat put '...; unset @sums' Example: mlr --from f.dat put '...; unset @sums["green"]' Example: mlr --from f.dat put '...; unset @*' .fi .if n \{\ .RE .SS "var" .if n \{\ .RS 0 .\} .nf var: declares an untyped local variable in the current curly-braced scope. Examples: 'var a=1', 'var xyz=""' .fi .if n \{\ .RE .SS "while" .if n \{\ .RS 0 .\} .nf while: introduces a while loop, or with "do", introduces a do-while loop. The body statements must be wrapped in curly braces. .fi .if n \{\ .RE .SS "ENV" .if n \{\ .RS 0 .\} .nf ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' .fi .if n \{\ .RE .SS "FILENAME" .if n \{\ .RS 0 .\} .nf FILENAME: evaluates to the name of the current file being processed. .fi .if n \{\ .RE .SS "FILENUM" .if n \{\ .RS 0 .\} .nf FILENUM: evaluates to the number of the current file being processed, starting with 1. .fi .if n \{\ .RE .SS "FNR" .if n \{\ .RS 0 .\} .nf FNR: evaluates to the number of the current record within the current file being processed, starting with 1. Resets at the start of each file. .fi .if n \{\ .RE .SS "IFS" .if n \{\ .RS 0 .\} .nf IFS: evaluates to the input field separator from the command line. .fi .if n \{\ .RE .SS "IPS" .if n \{\ .RS 0 .\} .nf IPS: evaluates to the input pair separator from the command line. .fi .if n \{\ .RE .SS "IRS" .if n \{\ .RS 0 .\} .nf IRS: evaluates to the input record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). .fi .if n \{\ .RE .SS "M_E" .if n \{\ .RS 0 .\} .nf M_E: the mathematical constant e. .fi .if n \{\ .RE .SS "M_PI" .if n \{\ .RS 0 .\} .nf M_PI: the mathematical constant pi. .fi .if n \{\ .RE .SS "NF" .if n \{\ .RS 0 .\} .nf NF: evaluates to the number of fields in the current record. .fi .if n \{\ .RE .SS "NR" .if n \{\ .RS 0 .\} .nf NR: evaluates to the number of the current record over all files being processed, starting with 1. Does not reset at the start of each file. .fi .if n \{\ .RE .SS "OFS" .if n \{\ .RS 0 .\} .nf OFS: evaluates to the output field separator from the command line. .fi .if n \{\ .RE .SS "OPS" .if n \{\ .RS 0 .\} .nf OPS: evaluates to the output pair separator from the command line. .fi .if n \{\ .RE .SS "ORS" .if n \{\ .RS 0 .\} .nf ORS: evaluates to the output record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). .fi .if n \{\ .RE .SH "AUTHOR" .sp Miller is written by John Kerl . .sp This manual page has been composed from Miller's help output by Eric MSP Veith . .SH "SEE ALSO" .sp awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the miller website http://johnkerl.org/miller/doc miller-5.6.2/doc/multi-join/000077500000000000000000000000001354153536500156565ustar00rootroot00000000000000miller-5.6.2/doc/multi-join/input.csv000066400000000000000000000001121354153536500175240ustar00rootroot00000000000000id,task 10,chop 20,puree 20,wash 30,fold 10,bake 20,mix 10,knead 30,clean miller-5.6.2/doc/multi-join/name-lookup.csv000066400000000000000000000000411354153536500206150ustar00rootroot00000000000000id,name 30,Alice 10,Bob 20,Carol miller-5.6.2/doc/multi-join/status-lookup.csv000066400000000000000000000000461354153536500212250ustar00rootroot00000000000000id,status 30,occupied 10,idle 20,idle miller-5.6.2/doc/mydata.csv000066400000000000000000000003001354153536500155540ustar00rootroot000000000000001,2,3,4,5,6,x,y,9,10,hostname,12,13,14,status,16,uptime _,_,_,_,_,_,-0.0489,147.2,_,_,jupiter.xyzzy.org,_._,_,_,up,_,342 _,_,_,_,_,_,-0.0489,147.2,_,_,jupiter.xyzzy.org,_._,_,_,down,_,5667778 miller-5.6.2/doc/mysql-notes.txt000066400000000000000000000065761354153536500166410ustar00rootroot00000000000000================================================================ brew install mysql ? not working on my current OS rev dev.mysql.com ... sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist /usr/local/mysql/bin/mysql /usr/local/mysql/bin/mysqladmin ================================================================ mysql -u root -p SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password-goes-here'); DESCRIBE mysql.user; GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password'; SELECT Host, User from mysql.user; SHOW GRANTS; FLUSH PRIVILEGES; somewhere in there helped?!? ================================================================ cat ~/.my.cnf [client] user=user-name-goes-here password=password-goes-here chmod 600 ~/.my.cnf SELECT USER(); ================================================================ CREATE DATABASE db-name-goes-here; USE db-name-goes-here; CREATE TABLE example( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, CONSTRAINT pk_example PRIMARY KEY (id) ); INSERT INTO example (id, name) VALUES (null, 'Sample data'); INSERT INTO example (id, name) VALUES (null, 'Sample data'); INSERT INTO example (id, name) VALUES (null, 'More data'); SELECT * FROM example; ================================================================ mysql -D sample -e 'select * from example;' mysql -D sample -B -e 'select * from example;' ================================================================ mysql -D sample -B -e 'select BIT_COUNT(id^id) from example' ================================================================ ================================================================ CREATE DATABASE miller; USE miller; ================================================================ CREATE TABLE abixy( a VARCHAR(32), b VARCHAR(32), i BIGINT(10), x DOUBLE, y DOUBLE ); INSERT INTO abixy (a,b,i,x,y) VALUES ("pot", "pan", 1, 0.323455, 0.78234); SELECT * FROM abixy; mysql> CREATE DATABASE miller; Query OK, 1 row affected (0.00 sec) mysql> USE miller; mysql> CREATE TABLE abixy( -> a VARCHAR(32), -> b VARCHAR(32), -> i BIGINT(10), -> x DOUBLE, -> y DOUBLE -> ); Query OK, 0 rows affected (0.02 sec) mysql> mysql> INSERT INTO abixy (a,b,i,x,y) VALUES ("pot", "pan", 1, 0.323455, 0.78234); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM abixy; +------+------+------+----------+---------+ | a | b | i | x | y | +------+------+------+----------+---------+ | pot | pan | 1 | 0.323455 | 0.78234 | +------+------+------+----------+---------+ 1 row in set (0.01 sec) mysql> INSERT INTO abixy (a,b,i,x,y) VALUES ("pot", "pan", 1, 0.323455, 0.78234); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM abixy; +------+------+------+----------+---------+ | a | b | i | x | y | +------+------+------+----------+---------+ | pot | pan | 1 | 0.323455 | 0.78234 | | pot | pan | 1 | 0.323455 | 0.78234 | +------+------+------+----------+---------+ 2 rows in set (0.00 sec) ---------------------------------------------------------------- mlr --onidx --fs comma cat s > t DROP TABLE abixy; load data local infile 't' into table abixy fields terminated by ',' ; load data local infile 't' replace into table abixy fields terminated by ',' ; miller-5.6.2/doc/ngrams/000077500000000000000000000000001354153536500150565ustar00rootroot00000000000000miller-5.6.2/doc/ngrams/gsl-2000.txt000066400000000000000000000364051354153536500167730ustar00rootroot00000000000000the be of and a to in he have it that for they I with as not on she at by this we you do but from or which one would all will there say who make when can more if no man out other so what time up go about than into could state only new year some take come these know see use get like then first any work now may such give over think most even find day also after way many must look before great back through long where much should well people down own just because good each those feel seem how high too place little world very still nation hand old life tell write become here show house both between need mean call develop under last right move thing general school never same another begin while number part turn real leave might want point form off child few small since against ask late home interest large person end open public follow during present without again hold govern around possible head consider word program problem however lead system set order eye plan run keep face fact group play stand increase early course change help line city put close case force meet once water upon war build hear light unite live every country bring center let side try provide continue name certain power pay result question study woman member until far night always service away report something company week church toward start social room figure nature though young less enough almost read include president nothing yet better big boy cost business value second why clear expect family complete act sense mind experience art next near direct car law industry important girl god several matter usual rather per often kind among white reason action return foot care simple within love human along appear doctor believe speak active student month drive concern best door hope example inform body ever least probable understand reach effect different idea whole control condition field pass fall note special talk particular today measure walk teach low hour type carry rate remain full street easy although record sit determine level local sure receive thus moment spirit train college religion perhaps music grow free cause serve age book board recent sound office cut step class true history position above strong friend necessary add court deal tax support party whether either land material happen education death agree arm mother across quite anything town past view society manage answer break organize half fire lose money stop actual already effort wait department able political learn voice air together shall cover common subject draw short wife treat limit road letter color behind produce send term total university rise century success minute remember purpose test fight watch situation south ago difference stage father table rest bear entire market prepare explain offer plant charge ground west picture hard front lie modern dark surface rule regard dance peace observe future wall farm claim firm operation further pressure property morning amount top outside piece sometimes beauty trade fear demand wonder list accept judge paint mile soon responsible allow secretary heart union slow island enter drink story experiment stay paper space apply decide share desire spend sign therefore various visit supply officer doubt private immediate wish contain feed raise describe ready horse son exist north suggest station effective food deep wide alone character english happy critic unit product respect drop nor fill cold represent sudden basic kill fine trouble mark single press heavy attempt origin standard everything committee moral black red bad earth accord else mere die remark basis except equal east event employ defense smile river improve game detail account cent sort reduce club buy attention ship decision wear inside win suppose ride operate realize sale choose park square vote price district dead foreign window beyond direction strike instead trial practice catch opportunity likely recognize permit serious attack floor association spring lot stock lack hair science relation profession pattern quick medical influence occasion machine compare husband blue international fair especially indeed imagine surprise average official temperature difficult sing hit tree race police touch relative throw quality former pull chance prove argue settle growth date heat save performance count production listen main pick size cool army patient combine summer hall slight command enjoy length proper express health chief evening store language degree lay current gun dog hotel strange separate boat fail clean dress anyone gain pain object knowledge depend relate below dollar advance shape arrange population yes sell mention dry check poet sleep join hot bed electric dream due season manner fit left progress neither strength notice finish opinion bill western truth wrong travel suit bank exact honor brother quiet marry corner handle danger hospital pool promise blood shoot scene literature arrive film base freedom bar maybe hang suffer manufacture frequent rock loss burn sun audience essential glass prevent poem poor inch song skill post popular radio animal conscious worth eat election faith wave murder model forget extend edge distance memory recommend division staff leg discussion address fly dependent ball shake frame extreme engineer thick comfort latter camp oil discover examine difficulty tooth middle choice refer enemy practical marriage bridge declare lady cross daily afternoon attend director balance wash capital speed block citizen mouth hill green please motor agency encourage governor worry affair shoulder bright mass sample pretty repeat roll push trip council clothe parent forward sharp straight gas weight discuss fix load master whatever round rapid laugh finger spot propose shop broad replace reply extent lock employee ahead sight spread wind approve destroy none pound fame importance reflect advantage match regular wage refuse existence hardly perform title tend exercise thin coat bit mountain youth behavior newspaper secret ability sea soft justice reasonable circle solid page weapon fast representative search pure escape crowd stick telephone avoid garden favor news unless dinner someone signal yard ideal warm miss shelter soldier article cry captain familiar seat guest weak excite king everyone wine hole duty beat perfect bottom compose battle expense cattle flow kitchen dust bottle admit tear tire expression exception application belong rich failure struggle instrument variety narrow theater collection rain review preserve leadership clay daughter fellow swing thank library fat reserve tour nice warn ring bitter chair yesterday scientific flower wheel solution aim gather invite moreover fresh forest winter box belief ordinary impossible print gray taste lip speech reference stain connection otherwise stretch knife village blow mistake sweet shout divide guard worse exchange rare commercial request appoint agent dependence bird wild motion guess neighbor seed fashion loan correct plain mail retire opposite prefer safe evil double wood empty baby advise content sport lift literary curious tie flat message neck hate dirt delight trust nobody valley tool presence cook railroad minister coffee brush beside collect guide luck profit lord everybody prison cloud slave chairman soil distinguish introduce urge blind arise upper curve membership key entertain soul neighborhood friendly pair stone lean protect advertise mystery welcome knee jump snake stream avenue brown disease hat excellent formal snow sheet somehow unity sky rough smooth weather steady threaten depth oppose deliver ancient pray adopt birth appearance universe busy hurry coast forth smell furnish female hide wire proposal ought victory quarter engine customer waste fool intend intention desk politics passage lawyer root climb metal gradual hunt protection satisfy roof branch pleasure witness loose nose mine band aside risk tomorrow remind ear fish shore operator civilize being silent screen bind earn pack colony besides slip cousin scale relief explore stem brain musician defend bend somebody shadow mix smoke description fruit guilt yield sensitive salt pale sweep completion throat agriculture admire gentle dozen particle pleasant bay cup competition moon terrible strip mechanic shock conversation angle tall plenty star yellow sick thorough absolute succeed surround proud dear card lake breath afraid silence onto shoe somewhere chain slide copy machinery wake severe pocket bone honest freeze dictionary calm swim ice male skin crack rush wet meat commerce joint gift host suspect path uncle afford instant satisfactory height track confidence grass suggestion favorite breakfast apart chest entrance march sink northern iron alive ill bag disturb native bedroom violent beneath pause tough substance threat charm absence factory spite meal universal accident highway sentence liberty wise noise discovery tube flash twist fence childhood joy sister sad efficiency disappear defeat extensive rent comparison possess grace flesh liquid scientist ease heaven milk sympathy rank restaurant frequency angry shade accuse necessity knock loud permanent row lovely confuse gold frighten solve grave salary photograph advice abroad wound virtue dare queen extra attract numerous pink gate expensive shut chicken forgive holy wooden prompt crime sorry republic anger visitor pile violence steel wing stair partner delay gentleman pour confusion damage kick safety burst network resistance screw pride till hire verb preach clerk everywhere anyway fan connect egg efficient grain calculate drag opposition worship arrest discipline string harbor camera mechanism cow grand funny insurance reduction strict lesson tight sand plate qualify elsewhere mad interference pupil fold royal valuable whisper anybody hurt excess quantity fun mud extension recognition kiss crop sail attractive habit relieve wisdom persuade certainty cloth eager deserve sympathetic cure trap puzzle powder raw mankind glad blame whenever anxiety bus tremble sacred fortunate glory golden neat weekend treasury overcome cat sacrifice complain elect roar sake temple self compete nurse stuff stomach peculiar repair storm ton desert allowance servant hunger conscience bread crash tip strengthen proof generous sir tonight whip tongue mill merchant coal ruin introduction courage actor belt stir package punish reflection breathe anywhere amuse dull fate net fellowship fault furniture beam pencil border disappoint flame joke bless corn shell tempt supper destruction dive anxious shine cheap dish distant greet flood excuse insect ocean ceremony decrease prize harm insure verse pot sincere cotton leaf rub medicine stroke bite lung lonely admission stupid scratch composition broadcast drum resist neglect absent passenger adventure beg pipe beard bold meanwhile devil cheer nut split melt swear sugar bury wipe faint creature tail wealth earnest translate suspicion noble inquiry journey hesitate extraordinary borrow owe funeral ambition mixture slope criminal seldom map spin praise spare plow telegraph barrel straighten scarce lunch slavery creep sweat gay stiff brave seize convenient horizon moderate complicate dig curse weigh priest excessive quarrel widow modest dine politician custom educate salesman nail tap eastern possession satisfaction behave mercy scatter objection silver tent saddle wrap nest grind spell plaster arch swell friendship bath bundle grateful crown boundary nowhere asleep clock boil altogether lend holiday precious wander ugly reputation ticket pretend dismiss delicate despair awake tea fortune cap thread haste bare shirt bargain leather rail butter dot inquire warmth decisive vessel pity steam pin bound companion toe reward forbid wherever tower bathe lodge swallow multiply bow kingdom garage permission pump prevention urgent aunt zero idle fever christmas regret jaw soap pronounce empire bowl outline organ imitation caution mineral disagree blade trick treasure immense convenience disapprove destructive fork noon ownership tune polish poison shame loyalty cottage astonish shave feather sauce lid debt fade confess classification descend cape mild clever envelope invention sheep splendid stamp float brick rice businessman backward qualification artificial attraction lamp curl shower elder bunch bell steer flavor spit rob cream interrupt pen weave orange rescue crush humble fancy decay polite tribe bleed coin fond autumn classify omit loyal needle lessen complaint pad steep skirt curtain calculation laughter solemn grease interfere explode fasten flag resign postpone patience boast rope envy airplane rid shield veil kneel tray explosive brass taxi wax duck button invent remedy bush thunder weaken poverty scrape arrow tender cruel soften mouse hay anyhow alike circular juice shelf bake hatred cautious basket wreck width confident log heap suck ladder gap obey hut axe translation collar delivery reproduce confession pan prejudice voyage tobacco simplicity paste cake elephant ribbon harvest ashamed cave customary thief damp sew rust separation waiter pet straw upset towel refresh essence fur ambitious defendant daylight dip suspicious imaginary ash carriage educator saw stove rubber rug misery awkward rival roast deed preference explosion theatrical cultivate collector miserable wrist rabbit accustom tide insult thumb lump annoy toy heal shallow repetition soup whistle scenery apple offense cork ripe temper sore pinch diamond razor imaginative hook copper landlord influential rot hollow enclose harden wicked stiffen silk upright selfish stripe pig inward excellence rake purple hasten shorten applause ache apology knot nephew cushion drown nursery pint fierce imitate aloud gaiety robbery tighten perfection scorn whoever trunk wool sailor competitor moonlight deer bean everyday drawer disregard nowadays patriotic tin penny cage pardon lately offend coarse spoil horizontal sting ditch librarian meantime cough deaf sword messenger vain castle elastic comb rod widen sorrow inventor cliff umbrella interruption merry gallon conquest headache tailor bucket scent signature cart darken sometime applaud underneath hello pretense descent conquer framework confidential adoption disgust waist momentary receipt pearl ray lazy limb grammatical beast monkey jewel persuasion obedience sock vowel hammer inn chimney dissatisfaction annoyance ornament honesty outward sharpen handkerchief greed heavenly thirst niece spill loaf wheat worm secrecy rude heighten flatten loosen cheese rivalry royalty discontent complication fright indoor flour actress congratulation ounce fry everlasting goat ink disappearance reproduction thicken avoidance spoon strap deceive lengthen revenge correction descendant hesitation spade basin weed omission old-fashioned bicycle breadth photography coward mat rejoice cheat congratulate discomfort enclosure attentive paw overflow dissatisfy multiplication whichever tidy bribe mend stocking feast nuisance thorn tame inclusive homemade handwriting chalk sour slippery procession ripen jealous jealousy liar homecoming barber whiten berry lighten pigeon hinder bravery baggage noun amongst grammar cultivation companionship rubbish modesty woolen deepen pastry cupboard quart canal notebook deceit parcel brighten moderation punctual hurrah lipstick uppermost fatten conqueror hindrance cowardice obedient saucer madden scold weekday rotten disrespect widower deafen donkey businesslike motherhood sadden handshake calculator headdress scissors translator possessor shilling redden motherly whose cultivator whom homework electrician oar bribery sweeten sow pronunciation beak plural miller-5.6.2/doc/ngrams/mkv.mlr000077500000000000000000000027131354153536500163750ustar00rootroot00000000000000begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 1) { str a = substr(v, 0, 0); @a_histo[a] += 1; for (int i = 0; i < n-1; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); @ab_histo[a][b] += 1; } } } end { num a_sum = 0; for (a, na in @a_histo) { a_sum += na; } num a_cumu = 0.0; for (a, na in @a_histo) { num a_p = @a_histo[a] / a_sum; a_cumu += a_p; @a_pmf[a] = a_p; @a_cmf[a] += a_cumu; } for (a in @ab_histo) { num ab_sum = 0.0; for (b, nab in @ab_histo[a]) { ab_sum += nab; } num ab_cumu = 0.0; for (b, _ in @ab_histo[a]) { num ab_p = @ab_histo[a][b] / ab_sum; ab_cumu += ab_p; @ab_pmf[a][b] = ab_p; @ab_cmf[a][b] = ab_cumu; } } #dump; for (int oi = 0; oi < @ocount; oi += 1) { oa_u = urand(); oa = "?"; for (a, c in @a_cmf) { if (oa_u < c) { oa = a; break; } } str out = oa; for (int i = 1; i < @olen; i += 1) { num ab_u = urand(); ob = "???"; for (b, c in @ab_cmf[oa]) { #print "BC ".b.c; if (ab_u < c) { ob = b; break; } } if (ob == "???") { break; } out .= ob; oa = ob; } print out; } } miller-5.6.2/doc/ngrams/mkv3.mlr000077500000000000000000000043631354153536500164630ustar00rootroot00000000000000begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 2) { str a = substr(v, 0, 0); @a_histo[a] += 1; str b = substr(v, 1, 1); @ab_histo[a][b] += 1; for (int i = 0; i < n-2; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); @abc_histo[a][b][c] += 1; } } } end { num a_sum = 0; for (a, na in @a_histo) { a_sum += na; } num a_cumu = 0.0; for (a, _ in @a_histo) { num a_p = @a_histo[a] / a_sum; a_cumu += a_p; @a_pmf[a] = a_p; @a_cmf[a] += a_cumu; } for (a in @ab_histo) { num ab_sum = 0.0; for (b, nab in @ab_histo[a]) { ab_sum += nab; } num ab_cumu = 0.0; for (b, _ in @ab_histo[a]) { num ab_p = @ab_histo[a][b] / ab_sum; ab_cumu += ab_p; @ab_pmf[a][b] = ab_p; @ab_cmf[a][b] = ab_cumu; } } for (a in @abc_histo) { for (b in @abc_histo[a]) { num abc_sum = 0.0; for (c, nabc in @abc_histo[a][b]) { abc_sum += nabc; } num abc_cumu = 0.0; for (c, _ in @abc_histo[a][b]) { num abc_p = @abc_histo[a][b][c] / abc_sum; abc_cumu += abc_p; @abc_pmf[a][b][c] = abc_p; @abc_cmf[a][b][c] = abc_cumu; } } } #dump; for (int oi = 0; oi < @ocount; oi += 1) { oa_u = urand(); oa = "?"; for (a, c in @a_cmf) { oa = a; if (oa_u < c) { break; } } str out = oa; ob_u = urand(); ob = "?"; for (b, c in @ab_cmf[oa]) { ob = b; if (ob_u < c) { break; } } out .= ob; for (int i = 2; i < @olen; i += 1) { num abc_u = urand(); str oc = "???"; #print; #print "i=".i; #print "oa = ".oa." ob = ".ob; for (c, d in @abc_cmf[oa][ob]) { #print "d = ".d; oc = c; if (abc_u < d) { break; } } if (oc == "???") { break; } #print "i=".i.",oa=".oa.",ob=".ob.",oc=".oc; #print "oc = ".oc; out .= oc; oa = ob; ob = oc; } print out; } } miller-5.6.2/doc/ngrams/mkv4.mlr000077500000000000000000000057731354153536500164720ustar00rootroot00000000000000begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 3) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); str c = substr(v, 2, 2); @a_histo[a] += 1; @ab_histo[a][b] += 1; @abc_histo[a][b][c] += 1; for (int i = 0; i < n-3; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); str d = substr(v, i+3, i+3); @abcd_histo[a][b][c][d] += 1; } } } end { num a_sum = 0; for (a, na in @a_histo) { a_sum += na; } num a_cumu = 0.0; for (a, _ in @a_histo) { num a_p = @a_histo[a] / a_sum; a_cumu += a_p; @a_pmf[a] = a_p; @a_cmf[a] += a_cumu; } for (a in @ab_histo) { num ab_sum = 0.0; for (b, nab in @ab_histo[a]) { ab_sum += nab; } num ab_cumu = 0.0; for (b, _ in @ab_histo[a]) { num ab_p = @ab_histo[a][b] / ab_sum; ab_cumu += ab_p; @ab_pmf[a][b] = ab_p; @ab_cmf[a][b] = ab_cumu; } } for (a in @abc_histo) { for (b in @abc_histo[a]) { num abc_sum = 0.0; for (c, nabc in @abc_histo[a][b]) { abc_sum += nabc; } num abc_cumu = 0.0; for (c, _ in @abc_histo[a][b]) { num abc_p = @abc_histo[a][b][c] / abc_sum; abc_cumu += abc_p; @abc_pmf[a][b][c] = abc_p; @abc_cmf[a][b][c] = abc_cumu; } } } for (a in @abcd_histo) { for (b in @abcd_histo[a]) { for (c in @abcd_histo[a][b]) { num abcd_sum = 0.0; for (d, n in @abcd_histo[a][b][c]) { abcd_sum += n; } num abcd_cumu = 0.0; for (d, _ in @abcd_histo[a][b][c]) { num abcd_p = @abcd_histo[a][b][c][d] / abcd_sum; abcd_cumu += abcd_p; @abcd_pmf[a][b][c][d] = abcd_p; @abcd_cmf[a][b][c][d] = abcd_cumu; } } } } #dump; for (int oi = 0; oi < @ocount; oi += 1) { oa_u = urand(); oa = "?"; for (a, c in @a_cmf) { oa = a; if (oa_u < c) { break; } } str out = oa; ob_u = urand(); ob = "?"; for (b, c in @ab_cmf[oa]) { ob = b; if (ob_u < c) { break; } } out .= ob; oc_u = urand(); oc = "?"; for (c, d in @abc_cmf[oa][ob]) { oc = c; if (oc_u < d) { break; } } out .= oc; for (int i = 3; i < @olen; i += 1) { num abcd_u = urand(); str od = "???"; #print; #print "i=".i; #print "oa = ".oa." ob = ".ob; for (d, e in @abcd_cmf[oa][ob][oc]) { od = d; if (abcd_u < e) { break; } } if (od == "???") { break; } #print "i=".i.",oa=".oa.",ob=".ob.",oc=".oc; #print "oc = ".oc; out .= od; oa = ob; ob = oc; oc = od; } #print "U IS ".oa_u; #print "A IS ".oa; print out; } } miller-5.6.2/doc/ngrams/mkv5.mlr000077500000000000000000000072401354153536500164620ustar00rootroot00000000000000begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 4) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); str c = substr(v, 2, 2); str d = substr(v, 3, 3); @a_histo[a] += 1; @ab_histo[a][b] += 1; @abc_histo[a][b][c] += 1; @abcd_histo[a][b][c][d] += 1; for (int i = 0; i < n-4; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); str d = substr(v, i+3, i+3); str e = substr(v, i+4, i+4); @abcde_histo[a][b][c][d][e] += 1; } } } end { num a_sum = 0; for (a, na in @a_histo) { a_sum += na; } num a_cumu = 0.0; for (a, _ in @a_histo) { num a_p = @a_histo[a] / a_sum; a_cumu += a_p; @a_pmf[a] = a_p; @a_cmf[a] += a_cumu; } for (a in @ab_histo) { num ab_sum = 0.0; for (b, nab in @ab_histo[a]) { ab_sum += nab; } num ab_cumu = 0.0; for (b, _ in @ab_histo[a]) { num ab_p = @ab_histo[a][b] / ab_sum; ab_cumu += ab_p; @ab_pmf[a][b] = ab_p; @ab_cmf[a][b] = ab_cumu; } } for (a in @abc_histo) { for (b in @abc_histo[a]) { num abc_sum = 0.0; for (c, nabc in @abc_histo[a][b]) { abc_sum += nabc; } num abc_cumu = 0.0; for (c, _ in @abc_histo[a][b]) { num abc_p = @abc_histo[a][b][c] / abc_sum; abc_cumu += abc_p; @abc_pmf[a][b][c] = abc_p; @abc_cmf[a][b][c] = abc_cumu; } } } for (a in @abcd_histo) { for (b in @abcd_histo[a]) { for (c in @abcd_histo[a][b]) { num abcd_sum = 0.0; for (d, n in @abcd_histo[a][b][c]) { abcd_sum += n; } num abcd_cumu = 0.0; for (d, _ in @abcd_histo[a][b][c]) { num abcd_p = @abcd_histo[a][b][c][d] / abcd_sum; abcd_cumu += abcd_p; @abcd_pmf[a][b][c][d] = abcd_p; @abcd_cmf[a][b][c][d] = abcd_cumu; } } } } for (a in @abcde_histo) { for (b in @abcde_histo[a]) { for (c in @abcde_histo[a][b]) { for (d in @abcde_histo[a][b][c]) { num abcde_sum = 0.0; for (e, n in @abcde_histo[a][b][c][d]) { abcde_sum += n; } num abcde_cumu = 0.0; for (e, _ in @abcde_histo[a][b][c][d]) { num abcde_p = @abcde_histo[a][b][c][d][e] / abcde_sum; abcde_cumu += abcde_p; @abcde_pmf[a][b][c][d][e] = abcde_p; @abcde_cmf[a][b][c][d][e] = abcde_cumu; } } } } } #dump; for (int oi = 0; oi < @ocount; oi += 1) { oa_u = urand(); oa = "?"; for (a, c in @a_cmf) { oa = a; if (oa_u < c) { break; } } str out = oa; ob_u = urand(); ob = "?"; for (b, c in @ab_cmf[oa]) { ob = b; if (ob_u < c) { break; } } out .= ob; oc_u = urand(); oc = "?"; for (c, d in @abc_cmf[oa][ob]) { oc = c; if (oc_u < d) { break; } } out .= oc; od_u = urand(); od = "?"; for (d, e in @abcd_cmf[oa][ob][oc]) { od = d; if (od_u < e) { break; } } out .= od; for (int i = 4; i < @olen; i += 1) { num abcde_u = urand(); str oe = "???"; for (e, f in @abcde_cmf[oa][ob][oc][od]) { oe = e; if (abcde_u < f) { break; } } if (oe == "???") { break; } out .= oe; oa = ob; ob = oc; oc = od; od = oe; } print out; } } miller-5.6.2/doc/ngrams/ng1000077500000000000000000000001551354153536500154720ustar00rootroot00000000000000ourdir=$(dirname $0) mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng1.mlr miller-5.6.2/doc/ngrams/ng1.mlr000077500000000000000000000015371354153536500162700ustar00rootroot00000000000000# ================================================================ begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); for (int i = 0; i < n; i += 1) { str a = substr(v, i, i); @a_histo[a] += 1; } } # ================================================================ end { # Define this in this scope else it'll be scoped to the for-loop. map a_cmf = compute_cmf_from_histo(@a_histo); for (int oi = 0; oi < @ocount; oi += 1) { str out = ""; for (int i = 0; i < @olen; i += 1) { str oa = sample_from_cmf(a_cmf); if (oa == "") { break; } out .= oa; } print out; } } miller-5.6.2/doc/ngrams/ng1.mlr.txt000077500000000000000000000015351354153536500171040ustar00rootroot00000000000000# ================================================================ begin { if (isabsent(@olen)) { @olen = 16; } if (isabsent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); for (int i = 0; i < n; i += 1) { str a = substr(v, i, i); @a_histo[a] += 1; } } # ================================================================ end { # Define this in this scope else it'll be scoped to the for-loop. map a_cmf = compute_cmf_from_histo(@a_histo); for (int oi = 0; oi < @ocount; oi += 1) { str out = ""; for (int i = 0; i < @olen; i += 1) { str oa = sample_from_cmf(a_cmf); if (oa == "") { break; } out .= oa; } print out; } } miller-5.6.2/doc/ngrams/ng2000077500000000000000000000001551354153536500154730ustar00rootroot00000000000000ourdir=$(dirname $0) mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng2.mlr miller-5.6.2/doc/ngrams/ng2.mlr000077500000000000000000000021731354153536500162660ustar00rootroot00000000000000# ================================================================ begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 1) { str a = substr(v, 0, 0); @a_histo[a] += 1; for (int i = 0; i < n-1; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); @ab_histo[a][b] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define this in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str out = oa; for (int i = 1; i < @olen; i += 1) { str ob = sample_from_cmf(ab_cmf[oa]); if (ob == "") { break; } out .= ob; oa = ob; } print out; } } miller-5.6.2/doc/ngrams/ng2.mlr.txt000077500000000000000000000021711354153536500171020ustar00rootroot00000000000000# ================================================================ begin { if (isabsent(@olen)) { @olen = 16; } if (isabsent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 1) { str a = substr(v, 0, 0); @a_histo[a] += 1; for (int i = 0; i < n-1; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); @ab_histo[a][b] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define this in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str out = oa; for (int i = 1; i < @olen; i += 1) { str ob = sample_from_cmf(ab_cmf[oa]); if (ob == "") { break; } out .= ob; oa = ob; } print out; } } miller-5.6.2/doc/ngrams/ng3000077500000000000000000000001551354153536500154740ustar00rootroot00000000000000ourdir=$(dirname $0) mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng3.mlr miller-5.6.2/doc/ngrams/ng3.mlr000077500000000000000000000026661354153536500162760ustar00rootroot00000000000000# ================================================================ begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 2) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); @a_histo[a] += 1; @ab_histo[a][b] += 1; for (int i = 0; i < n-2; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); @abc_histo[a][b][c] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define these in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; map abc_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (a in @abc_histo) { for (b in @abc_histo[a]) { abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); } } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str ob = sample_from_cmf(ab_cmf[oa]); str out = oa . ob; for (int i = 2; i < @olen; i += 1) { str oc = sample_from_cmf(abc_cmf[oa][ob]); if (oc == "") { break; } out .= oc; oa = ob; ob = oc; } print out; } } miller-5.6.2/doc/ngrams/ng3.mlr.txt000077500000000000000000000026641354153536500171120ustar00rootroot00000000000000# ================================================================ begin { if (isabsent(@olen)) { @olen = 16; } if (isabsent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 2) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); @a_histo[a] += 1; @ab_histo[a][b] += 1; for (int i = 0; i < n-2; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); @abc_histo[a][b][c] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define these in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; map abc_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (a in @abc_histo) { for (b in @abc_histo[a]) { abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); } } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str ob = sample_from_cmf(ab_cmf[oa]); str out = oa . ob; for (int i = 2; i < @olen; i += 1) { str oc = sample_from_cmf(abc_cmf[oa][ob]); if (oc == "") { break; } out .= oc; oa = ob; ob = oc; } print out; } } miller-5.6.2/doc/ngrams/ng4000077500000000000000000000001551354153536500154750ustar00rootroot00000000000000ourdir=$(dirname $0) mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng4.mlr miller-5.6.2/doc/ngrams/ng4.mlr000077500000000000000000000034651354153536500162750ustar00rootroot00000000000000# ================================================================ begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 3) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); str c = substr(v, 2, 2); @a_histo[a] += 1; @ab_histo[a][b] += 1; @abc_histo[a][b][c] += 1; for (int i = 0; i < n-3; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); str d = substr(v, i+3, i+3); @abcd_histo[a][b][c][d] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define these in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; map abc_cmf = {}; map abcd_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (a in @abc_histo) { for (b in @abc_histo[a]) { abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); } } for (a in @abcd_histo) { for (b in @abcd_histo[a]) { for (c in @abcd_histo[a][b]) { abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); } } } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str ob = sample_from_cmf(ab_cmf[oa]); str oc = sample_from_cmf(abc_cmf[oa][ob]); str out = oa . ob . oc; for (int i = 3; i < @olen; i += 1) { str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); if (od == "") { break; } out .= od; oa = ob; ob = oc; oc = od; } print out; } } miller-5.6.2/doc/ngrams/ng4.mlr.txt000077500000000000000000000034631354153536500171110ustar00rootroot00000000000000# ================================================================ begin { if (isabsent(@olen)) { @olen = 16; } if (isabsent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 3) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); str c = substr(v, 2, 2); @a_histo[a] += 1; @ab_histo[a][b] += 1; @abc_histo[a][b][c] += 1; for (int i = 0; i < n-3; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); str d = substr(v, i+3, i+3); @abcd_histo[a][b][c][d] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define these in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; map abc_cmf = {}; map abcd_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (a in @abc_histo) { for (b in @abc_histo[a]) { abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); } } for (a in @abcd_histo) { for (b in @abcd_histo[a]) { for (c in @abcd_histo[a][b]) { abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); } } } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str ob = sample_from_cmf(ab_cmf[oa]); str oc = sample_from_cmf(abc_cmf[oa][ob]); str out = oa . ob . oc; for (int i = 3; i < @olen; i += 1) { str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); if (od == "") { break; } out .= od; oa = ob; ob = oc; oc = od; } print out; } } miller-5.6.2/doc/ngrams/ng5000077500000000000000000000001551354153536500154760ustar00rootroot00000000000000ourdir=$(dirname $0) mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng5.mlr miller-5.6.2/doc/ngrams/ng5.mlr000077500000000000000000000044001354153536500162640ustar00rootroot00000000000000# ================================================================ begin { if (is_absent(@olen)) { @olen = 16; } if (is_absent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 4) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); str c = substr(v, 2, 2); str d = substr(v, 3, 3); @a_histo[a] += 1; @ab_histo[a][b] += 1; @abc_histo[a][b][c] += 1; @abcd_histo[a][b][c][d] += 1; for (int i = 0; i < n-4; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); str d = substr(v, i+3, i+3); str e = substr(v, i+4, i+4); @abcde_histo[a][b][c][d][e] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define these in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; map abc_cmf = {}; map abcd_cmf = {}; map abcde_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (a in @abc_histo) { for (b in @abc_histo[a]) { abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); } } for (a in @abcd_histo) { for (b in @abcd_histo[a]) { for (c in @abcd_histo[a][b]) { abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); } } } for (a in @abcde_histo) { for (b in @abcde_histo[a]) { for (c in @abcde_histo[a][b]) { for (d in @abcde_histo[a][b][c]) { abcde_cmf[a][b][c][d] = compute_cmf_from_histo(@abcde_histo[a][b][c][d]); } } } } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str ob = sample_from_cmf(ab_cmf[oa]); str oc = sample_from_cmf(abc_cmf[oa][ob]); str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); str out = oa . ob . oc . od; for (int i = 4; i < @olen; i += 1) { str oe = sample_from_cmf(abcde_cmf[oa][ob][oc][od]); if (oe == "") { break; } out .= oe; oa = ob; ob = oc; oc = od; od = oe; } print out; } } miller-5.6.2/doc/ngrams/ng5.mlr.txt000077500000000000000000000043761354153536500171160ustar00rootroot00000000000000# ================================================================ begin { if (isabsent(@olen)) { @olen = 16; } if (isabsent(@ocount)) { @ocount = 16; } } # ================================================================ for (_, v in $*) { if (string(v) == "inf" || string(v) == "nan") { continue; } int n = strlen(v); if (n >= 4) { str a = substr(v, 0, 0); str b = substr(v, 1, 1); str c = substr(v, 2, 2); str d = substr(v, 3, 3); @a_histo[a] += 1; @ab_histo[a][b] += 1; @abc_histo[a][b][c] += 1; @abcd_histo[a][b][c][d] += 1; for (int i = 0; i < n-4; i += 1) { str a = substr(v, i, i); str b = substr(v, i+1, i+1); str c = substr(v, i+2, i+2); str d = substr(v, i+3, i+3); str e = substr(v, i+4, i+4); @abcde_histo[a][b][c][d][e] += 1; } } } # ================================================================ end { map a_cmf = compute_cmf_from_histo(@a_histo); # Define these in this scope else they'll be scoped to the for-loops. map ab_cmf = {}; map abc_cmf = {}; map abcd_cmf = {}; map abcde_cmf = {}; for (a in @ab_histo) { ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); } for (a in @abc_histo) { for (b in @abc_histo[a]) { abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); } } for (a in @abcd_histo) { for (b in @abcd_histo[a]) { for (c in @abcd_histo[a][b]) { abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); } } } for (a in @abcde_histo) { for (b in @abcde_histo[a]) { for (c in @abcde_histo[a][b]) { for (d in @abcde_histo[a][b][c]) { abcde_cmf[a][b][c][d] = compute_cmf_from_histo(@abcde_histo[a][b][c][d]); } } } } for (int oi = 0; oi < @ocount; oi += 1) { str oa = sample_from_cmf(a_cmf); str ob = sample_from_cmf(ab_cmf[oa]); str oc = sample_from_cmf(abc_cmf[oa][ob]); str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); str out = oa . ob . oc . od; for (int i = 4; i < @olen; i += 1) { str oe = sample_from_cmf(abcde_cmf[oa][ob][oc][od]); if (oe == "") { break; } out .= oe; oa = ob; ob = oc; oc = od; od = oe; } print out; } } miller-5.6.2/doc/ngrams/ngfuncs.mlr000066400000000000000000000021171354153536500172360ustar00rootroot00000000000000# ================================================================ func compute_sum_from_histo(map histo) : num { num sum = 0; for (k, n in histo) { sum += n; } return sum; } # ---------------------------------------------------------------- func compute_pmf_from_histo(map histo) : map { num sum = compute_sum_from_histo(histo); num cumu = 0.0; map pmf = {}; for (k, _ in histo) { num p = histo[k] / sum; pmf[k] = p; } return pmf; } # ---------------------------------------------------------------- func compute_cmf_from_pmf(map pmf) : map { num cumu = 0.0; map cmf = {}; for (k, p in pmf) { cumu += p; cmf[k] = cumu; } return cmf; } # ---------------------------------------------------------------- func compute_cmf_from_histo(map histo) : map { return compute_cmf_from_pmf(compute_pmf_from_histo(histo)); } # ---------------------------------------------------------------- func sample_from_cmf(var cmf) : str { u = urand(); output = ""; for (k, c in cmf) { output = k; if (u < c) { break; } } return output; } miller-5.6.2/doc/ngrams/ngfuncs.mlr.txt000066400000000000000000000021171354153536500200540ustar00rootroot00000000000000# ================================================================ func compute_sum_from_histo(map histo) : num { num sum = 0; for (k, n in histo) { sum += n; } return sum; } # ---------------------------------------------------------------- func compute_pmf_from_histo(map histo) : map { num sum = compute_sum_from_histo(histo); num cumu = 0.0; map pmf = {}; for (k, _ in histo) { num p = histo[k] / sum; pmf[k] = p; } return pmf; } # ---------------------------------------------------------------- func compute_cmf_from_pmf(map pmf) : map { num cumu = 0.0; map cmf = {}; for (k, p in pmf) { cumu += p; cmf[k] = cumu; } return cmf; } # ---------------------------------------------------------------- func compute_cmf_from_histo(map histo) : map { return compute_cmf_from_pmf(compute_pmf_from_histo(histo)); } # ---------------------------------------------------------------- func sample_from_cmf(var cmf) : str { u = urand(); output = ""; for (k, c in cmf) { output = k; if (u < c) { break; } } return output; } miller-5.6.2/doc/oosvar-example-ewma.sh000066400000000000000000000001511354153536500200110ustar00rootroot00000000000000mlr --opprint put ' begin{ @a=0.1 }; $e = NR==1 ? $x : @a * $x + (1 - @a) * @e; @e=$e ' data/small miller-5.6.2/doc/oosvar-example-sum-grouped.sh000066400000000000000000000001321354153536500213260ustar00rootroot00000000000000mlr --opprint put -q ' @x_sum[$b] += $x; end { emit @x_sum, "b" } ' data/medium miller-5.6.2/doc/oosvar-example-sum.sh000066400000000000000000000001171354153536500176660ustar00rootroot00000000000000mlr --oxtab put -q ' @x_sum += $x; end { emit @x_sum } ' data/medium miller-5.6.2/doc/originality.html000066400000000000000000000311501354153536500170070ustar00rootroot00000000000000 How original is Miller?

How original is Miller?

It isn’t. Miller is one of many, many participants in the online-analytical-processing culture. Other key participants include awk, SQL, spreadsheets, etc. etc. etc. Far from being an original concept, Miller explicitly strives to imitate several existing tools:

Unix toolkit: Intentional similarities as described in Unix-toolkit context.

Recipes abound for command-line data analysis using the Unix toolkit. Here are just a couple of my favorites:

RecordStream: Miller owes particular inspiration to RecordStream. The key difference is that RecordStream is a Perl-based tool for manipulating JSON (including requiring it to separately manipulate other formats such as CSV into and out of JSON), while Miller is fast C which handles its formats natively. The similarities include the sort, stats1 (analog of RecordStream’s collate), and delta operations, as well as filter and put, and pretty-print formatting.

stats_m: A third source of lineage is my Python stats_m module. This includes simple single-pass algorithms which form Miller’s stats1 and stats2 subcommands.

SQL: Fourthly, Miller’s group-by command name is from SQL, as is the term aggregate.

Added value: Miller’s added values include:

  • Name-indexing, compared to the Unix toolkit’s positional indexing.
  • Raw speed, compared to awk, RecordStream, stats_m, or various other kinds of Python/Ruby/etc. scripts one can easily create.
  • Compact keystroking for many common tasks, with a decent amount of flexibility.
  • Ability to handle text files on the Unix pipe, without need for creating database tables, compared to SQL databases.
  • Various file formats, and on-the-fly format conversion.

jq: Miller does for name-indexed text what jq does for JSON. If you’re not already familiar with jq, please check it out!.

What about similar tools? Here’s a comprehensive list: https://github.com/dbohdan/structured-text-tools. It doesn’t mention rows so here’s a plug for that as well. As it turns out, I learned about most of these after writing Miller.

What about DOTADIW? One of the key points of the Unix philosophy is that a tool should do one thing and do it well. Hence sort and cut do just one thing. Why does Miller put awk-like processing, a few SQL-like operations, and statistical reduction all into one tool (see also Main reference)? This is a fair question. First note that many standard tools, such as awk and perl, do quite a few things — as does jq. But I could have pushed for putting format awareness and name-indexing options into cut, awk, and so on (so you could do cut -f hostname,uptime or awk '{sum += $x*$y}END{print sum}'). Patching cut, sort, etc. on multiple operating systems is a non-starter in terms of uptake. Moreover, it makes sense for me to have Miller be a tool which collects together format-aware record-stream processing into one place, with good reuse of Miller-internal library code for its various features.

Why not use Perl/Python/Ruby etc.? Maybe you should. With those tools you’ll get far more expressive power, and sufficiently quick turnaround time for small-to-medium-sized data. Using Miller you’ll get something less than a complete programming language, but which is fast, with moderate amounts of flexibility and much less keystroking.

When I was first developing Miller I made a survey of several languages. Using low-level implementation languages like C, Go, Rust, and Nim, I’d need to create my own domain-specific language (DSL) which would always be less featured than a full programming language, but I’d get better performance. Using high-level interpreted languages such as Perl/Python/Ruby I’d get the language’s eval for free and I wouldn’t need a DSL; Miller would have mainly been a set of format-specific I/O hooks. If I’d gotten good enough performance from the latter I’d have done it without question and Miller would be far more flexible. But C won the performance criteria by a landslide so we have Miller in C with a custom DSL.

No, really, why one more command-line data-manipulation tool? I wrote Miller because I was frustrated with tools like grep, sed, and so on being line-aware without being format-aware. The single most poignant example I can think of is seeing people grep data lines out of their CSV files and sadly losing their header lines. While some lighter-than-SQL processing is very nice to have, at core I wanted the format-awareness of RecordStream combined with the raw speed of the Unix toolkit. Miller does precisely that. miller-5.6.2/doc/paragraphs.txt000066400000000000000000000022051354153536500164570ustar00rootroot00000000000000The quick brown fox jumped over the lazy dogs. The quick brown fox jumped over the lazy dogs. The quick brown fox jumped over the lazy dogs. The quick brown fox jumped over the lazy dogs. The quick brown fox jumped over the lazy dogs. Now is the time for all good people to come to the aid of their country. Now is the time for all good people to come to the aid of their country. Now is the time for all good people to come to the aid of their country. Now is the time for all good people to come to the aid of their country. Now is the time for all good people to come to the aid of their country. Sphynx of black quartz, judge my vow. Sphynx of black quartz, judge my vow. Sphynx of black quartz, judge my vow. Sphynx of black quartz, judge my vow. Sphynx of black quartz, judge my vow. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. The rain in Spain falls mainly on the plain. miller-5.6.2/doc/performance.html000066400000000000000000000216361354153536500167660ustar00rootroot00000000000000 Performance

Performance
• Disclaimer
• Summary

Disclaimer

In a previous version of this page (see here) I compared Miller to some items in the Unix toolkit in terms of run time. But such comparisons are very much not apples-to-apples:
  • Miller’s principal strength is that it handles key-value data in various formats while the system tools do not. So if you time mlr sort on a CSV file against system sort, it's not relevant to say which is faster by how many percent — Miller will respect the header line, leaving it in place, while the system sort will move it, sorting it along with all the other header lines. This would be comparing the run times of two programs produce different outputs. Likewise, awk doesn’t respect header lines, although you can code up some CSV-handling using if (NR==1) { ... } else { ... }. And that’s just CSV: I don’t know any simple way to get sort, awk, etc. to handle DKVP, JSON, etc. — which is the main rreason I wrote Miller.
  • Implementations differ by platform: one awk may be fundamentally faster than another, and mawk has a very efficient bytecode implementation — which handles positionally indexed data far faster than Miller does.
  • The system sort command will, on some systems, handle too-large-for-RAM datasets by spilling to disk; Miller (as of version 5.2.0, mid-2017) does not. Miller sorts are always stable; GNU supports stable and unstable variants.
  • Etc.

Summary

Miller can do many kinds of processing on key-value-pair data using elapsed time roughly of the same order of magnitude as items in the Unix toolkit can handle positionally indexed data. Specific results vary widely by platform, implementation details, multi-core use (or not). Lastly, specific special-purpose non-record-aware processing will run far faster in grep, sed, etc. miller-5.6.2/doc/perftbl.txt000066400000000000000000000015411354153536500157670ustar00rootroot00000000000000 Mac Mac Comparand DKVP CSV seconds seconds 0.016 0.013 cat 0.189 0.189 catc 3.657 4.388 awk -F, '{print}' 2.027 1.795 mlr cat 2.292 1.940 cut -d , -f 1,4 3.540 4.516 awk -F, '{print $1,$4}' 1.600 1.390 mlr cut -f a,x 1.694 1.648 mlr cut -x -f a,x 0.845 0.643 sed -e 's/x=/EKS=/' -e 's/b=/BEE=/' 2.076 1.842 mlr rename x,EKS,b,BEE 5.643 5.031 awk -F, '{gsub("x=","",$4);gsub("y=","",$5);print $4+$5}' 4.019 3.679 mlr put '$z=$x+$y' 2.481 2.628 mlr stats1 -a mean -f x,y -g a,b 2.587 2.389 mlr stats2 -a corr -f x,y -g a,b 23.247 14.466 sort -t, -k 1,2 3.023 5.658 mlr sort -f a,b 17.224 15.523 sort -t, -k 4,5 5.807 5.194 mlr sort -n x,y miller-5.6.2/doc/pix/000077500000000000000000000000001354153536500143675ustar00rootroot00000000000000miller-5.6.2/doc/pix/mand.png000066400000000000000000023570411354153536500160300ustar00rootroot00000000000000‰PNG  IHDRÐ…åÞØ pHYs%%IR$ð ÅiCCPPhotoshop ICC profilexÚ­–gTSÙÅ÷½7Ъ”Ð)ÒEéAA:Ø %b{gpÇ‚Š –ûXP b/ƒØ»:(¨ÏÁ‚ •÷Gx³ÞûòÖzÿµîº¿µ×9ûìsï— p:E …ŒÔòå*e\D° %5MÀl4`J$.TÅÆFÀÀûïóá6¸á,R(døßFW’Y(ˆX’Bq>@ˆ±B©¨ÖÓT @Õà+SRÓê~v?·àgôóŸøÊ„¸€ú°8"‘2àЊÅÙ*€cÀU.‘ÊN€Qâ‘à¬0,?ªà4pÈø7Ÿì¿yf¨=E¢l5÷ßÀ •*d¢øO¾¬hà +œed;€¨Ë›¥fyƸ˜–J€Î)ŠL`qaHÚKD¡Q\”—4À"åà^©J˜0ÀÊ©qj¹l\´Ú?S¨æÌ°øÎ’† xfNBòK“Æ pa^|Ôàšµ®,ŠSgÎR†«ï˜_8˜M,”˜†ÙX€R”cÖ  ›±uØý8Œc8…s¸ŒVÜ´¡/Ñè%‚Ip aLX¶„áNø£ˆ0"šˆ#R‰t"›EÄlbQNTUÄ¢žø•8Jœ".׈{D;ÑE¼%¾É!ù¤iG'}È 2ŠL '‘Ùd9“,!—‘ëÈrÙ@ž"/“·È6ò%ÙCÒ¤ (KÊ™ò¡B¨*Ê¢”Ô\ªŒª¤j¨=T#užºAµQ¯¨Ï4GМiþ´HZ"ML+ Í¥-¥UÑêh ´3´´vZ7í;K7¥;ÑýèBz =›>^J¯¤o§¢Ÿ¥ß¢wÐ?0 †=ÛÉHeä2f1–262ö2š×O=L&Ó˜éÄ `Æ0EL³”¹ž¹‹y’yÙÁüÄÒdY°ÜYá¬4–œµUÉÚÁ:ÁºÎzÎêÕÐѰÕðÓˆÑhÌÐX®±M£QãªF‡F/[—mÏ`'°sÙ ØëØ{ØgÙÙï455­4}5ÇkJ5çk®ÓܧyA³]ó3GãÈ áLäq–qj9Mœ{œw\.׎ÈM㪸˸õÜÓÜÇÜOZ<--¡–DkžVµVƒÖu­×ÚÚ¶ÚAÚ“µgjWjоªýJGCÇN'DG¤3W§Zç¨Î]ž®›nŒn¾îRݺu;õ˜zvzaz½½­z§õžò(ž5/„'æ-âmãåuð|{¾ŸË/çïæ·ð»õõôGè'éOׯÖ?®ßf@Ø dË öÜ6øbhfd˜i¸ÄpáuÃFCŒ2ÊŒöÝ2úb,03Î3^i|Øø‘ ÍÄÑd¼É4“M&gM^ áñ"R6dÿû¦¤©£iœé,Ó­¦WL{ÌÌÍ"ÌfëÍN›½2704Ï5_m~¼˂g1ÊBj±Úâ¤Å ¾ H ¬œt[šZFZYn±l±ìµ²·J´Zhµ×ê‘5ÛÚÇ:Ëzµu³u·…ÍX›Ù6;mîÛjØúØæØ®µ=oûÑÎÞ.Ùn±Ýa»N{#{¡ýLûö¸£ jne õš7tãÐVGÒÑÓ1DZÚñªéäå$uÚètm}˜ï0ù°šawœ9ÎAÎÅÎ;Û] \¢]ºvy=ÜfxÚð•ÃÏÿîêé*sÝæúÀMÏmŒÛB·F··îŽîb÷j÷›\pyG<ÞŒp‘9bÓˆ»ž<ϱž‹=›=¿yy{)½öxuyÛx§{oð¾ãÃ÷‰õYêsÁ—îì;Ï÷˜ïg?/?•ß~¿¿üýóüwøwŽ´™9rÛȧV¢€-m££ÒGý<ªm´åhÑèšÑO­%ÛŸ Ê Úô:Ø5X|(øcˆ_Èœ¦P*4"´,´%L/,1¬*ìq¸UxvøÎðîψYM‘ôȨȕ‘w„fB±°^Ø=Æ{Ìœ1g¢8QñQUQO¢£•ÑcɱcÆ®ûpœí8ù¸Ã1ˆƬŠyk[ûÛxÆøØñÕãŸÅ¹ÅÍŽ;Ï‹Ÿ¿#þCBpÂò„‰‰E‰ÍIÚI“ê“>&‡&W$·¥ O™“r9Õ$Ušz$™–”¶=­gBØ„5:&zN,x{’ý¤é“.N6™,›||ŠöÑ”éôôäôé_E1¢QO†0cCF·8D¼VüR(Y-éÊ È¬È|žU‘Õ™½*»+gtNeÎ+iˆ´Jú&72wsîǼ˜¼Ú¼>Y²lo>+?=ÿ¨\Ož'?3Õ|êô©×NŠRE[_Áš‚ne”r{!Q8©ðˆŠ¯R¨®9ýPÔ^<ª¸ºøÓ´¤i¦ëN—O¿2ÃqÆ’Ïg†Ïüem–xVólËÙ f·Ï š³e.17cnó<ëy%ó:æG̯[À^·à÷…® +¾_”¼¨±Ä¬d~ÉÓ"~ØYªUª,½³Øñæi?JlYâ±dý’ïe’²Kå®å•å_—Š—^úÉí§u?õ-ËZÖ²Ükù¦Œò·WŽ^YW¡[1³â骱«V V—­~¿fÊš‹•#*7¯e¯-ZÛ¶.zÝ‘õ6ëW¬ÿZ•Su«:¸zïÓ K6|Ü(Ùx}Sà¦=›Í6—oþò³ôç»["¶4ÔØÕTnel-Þúl[Ò¶ó¿øüR¿Ýd{ùöoµòÚ¶º¸º3õÞõõ;Lw,ßIî,ÚÙµkâ®ÖÝ¡»ìqÞ³e¯ÁÞò}ØW´ïůé¿ÞÞµ¿ù€Ï=mn8Ä;TÖ@4Ìhè>œs¸íHê‘kGÇmnôo<ô›ËoµÇ,U×?¾üûDɉ¾“3Oö4)š^Ê>õ´yJóƒÓ)§ož¦ålÔÙ çÂÏ>tþä…€ Ç.ú]·x^ßéÞy¬+¼«õÅ„//{_•þC÷^;¼>øWà_WºSº;Þ(ßô½]úÎø]íûï›{b{ÈÿÐû±ì“ñ§ºÏ>ŸÏIþò¼wÚWæ×u߆~küõýa_~_ŸB¤(dVð¶à¦¼V€­Õß™DÏú;Èçþ^ ðjÄù@t°© °ßß­c$‚ôðP?ÿšÂ,÷~/Ž êë{g0oʾ¾Þ}}ß¶Ô= © ¿«C¨°72f-»znñtæ| É»Ãó8›iTXtXML:com.adobe.xmp 2017-02-20T20:40:30-05:00 2017-02-20T20:42:01-05:00 2017-02-20T20:42:01-05:00 Adobe Photoshop CC 2014 (Macintosh) image/png 3 Display xmp.iid:84eca15c-5f5d-479f-aec0-b1c399918b9e xmp.did:84eca15c-5f5d-479f-aec0-b1c399918b9e xmp.did:84eca15c-5f5d-479f-aec0-b1c399918b9e saved xmp.iid:84eca15c-5f5d-479f-aec0-b1c399918b9e 2017-02-20T20:42:01-05:00 Adobe Photoshop CC 2014 (Macintosh) / 1 1440000/10000 1440000/10000 2 65535 720 645 ‚>• cHRMmus ü݃dpèìh0>äì™ê š/IDATxÚìýw›G–å ÿL¸ ‚AYª«¦gg§ç[Nµ}ßÙ™.M ™HÒ¥‰ýÃsóaã]h+” ÏÖ482’¸ºÁ#J!¤À[‹Œ"¼1xrùü7Þ«P*ÜÞæ{ñ„±` ΂Pœ['ïÚ‹}÷¸ÿƒøw}gú,äßc“n÷ï€0‰„Rë5±Y¼uï¸^ÿT·ö­w¨?æåÃ~)VÃ#ì«r£‰sÛûá»Î…whïÛxQ¨õ3òΆ˜ç{þ†o×T)ð¾  TLÿÙÍÅ9å܆ g{„#¥j[û,¬Á;IïƒÈØQœO0EƒîõP1ؼDê \Y#¢”ä(Ã%^ÆèD¯‚(á— ¾_?ýÍ€£½¤ÆÎ¯™¿ºBèèàäJ!…ÜyÆ·løâÀÓ{§ö;÷¾/øÝ÷ªývèìœÅúaçq—Þã>‹ïÞ8¡~ûÑ?"Ž ó—“60K‰z¼)0³ëÚg¿{B⪠}rJÒÔ— ä O”Æ` RC³¨Œú✦†(Ž@iôp€t%õå/<¦t=D ‡ˆ‹ï^!:#ú‡T—çÌ_މO ðeE3ŸRÏzžR]¼¡Êª]¬ããcâaW”Ô“ ¦(Q>ñh€ðï=R Po:#9N(ß\R\äè~݉ñncóW–ËèñÀxZŽ hdªh&9ÉÙ–x¡Ó•FÔ—ç׆¨ŸP_O‘:Â[ƒµÐ}ò¤Q]N(ÞNˆNNèœô(Î/qULºÄG°fõ“Ry„–‡ÏÛß6?Åž~÷Ï›óÙÙð I\9cþü'£ŸåžõS^®6dwBPç^³áH%´Ø8•€ÐvzÍìå-ëäûëÇ+ŒAõFôžƒ©·ç‘Ûsùçî<ó~»?½•øjAu5ÅK…k Mzr„JT{ÀÛ‡ç „ðˈïE˜“ró7ؾoç„ÚX³6×}óþFŸÅj ôvŒo¬3Ëÿ¿ 8ˆûÙü~ç÷´g§ÏËö\E}5G¤)®)ÁKlUâ…$Jbœ1ȬG2êáiïiãŠÝ÷°ó«ö ÉíïÙg$˜’êj‚²!¸vÍÍ>ܺ÷xoûÚ;J#ã¤BY,pµk4‡L3t7Å[»?¶Ú×[÷pKû±•G 𶦙å휒¨^‰öˆ=1Øm÷$ZagSªëBëeí–˜“_Hýæ%ùÜ3xBu¡2Ž‘B!Vè–§Î81úìC¢Ô1õ–fáˆCtæ1E E%`kD¤zø¼¤© ?&d”ŒÒö$(ðÁûöƈHÑLæx•!ýœÉWçÅy ±xï:BIµˆúñÁñC·ß|ÑNPí@BbmƒóîæÄ¼µˆlÈñ§GLþð éÇŸÒí šÚ€Ø¢ ºšaÆyân†p.</Bp„BFáݘ<§ž•ئ":{Do(˜7cð/Ÿ ]EñöŠ:7ÄýÅë×DOž’Å5ã//‘Bꌸß›SOæ4EF1JIlÕ€Ò`jD¯OÚ‹° ƒˆZÔEzÜ¥O±@yþƒ&É„Έ‡®œÓÌ+¤TyCzz†¡!?¿À‰”áÇ1“7\ýõ-éÙ#²ã.4[̨ Çà“,¾ýšªŒÂg£˜dÐ%À+°%ÕlŽÎºè,Epµ%9€­©Æ%ññCñú[7b„t4E)+¼~ò„ì4fþÝ9ùÛ‚¨? î…Åx…fûÛT@‹\/‘`ï¢ hL‚NÕdN<R:r‹¶²¤§¬×®=4Œ ëj'ÁÓ¢ÙÎ…L)í˜óÑP!髊z²câ®ÔÚ]i¼ªýOñûèlÖ¢=t·$±Ú\½©©'9x‰·Žøl€-@§D½œoñi…о)).§x¡nî±?£>ÿ3½gßXô O2êâM36Bˆ÷>þ@#v‚lK‰“ šiêõ­ã×eÐ!%¾Ì©gsDÒ%î÷%­ æëñ˜&oˆGCt§Í`¶_²ïÚ=v9§ðÜR7½XßûƒÉz­‘Â\±VuÁØ8f;ø›ý•—Ï0•o3hvƒÂ$nÆyBâMC3_€—ˆHâ«” ±E’à« =÷êË+¬SÄÃNòîsOÿ£µoÇ‚Ç#PÀ™Ìp^üý™ªR ”Þ¢’ÉH㪰ç«4Ð?qKÌèþIú[È7Ú ‰oªp¸ˆ3¢n§=1-i›‡ãÎ{olÈH1ÿó¿ÿzBÜœþ×ÏIãŠË?|ÉôUÉÑo>côlˆ© ‹¯¾#Ÿ–dÇG¸|N9cEÆé¿~Nš‚H4ã?|AcºDqA1.QJ#dFÜWÔã+êRÒyüˆ´çÉ_i¥*„ê¢:B)’^‚«+Ê‹+šÂõ¤'\žS©$O4êã¦ç\þá9"í µÜ;ø¼w(£TË =ˆ2ÜqzÛi/„À45(…–¿µýþß8p:œi°°£Û<áú5šÐÌk†¿ø„Á“0‹’òí¯@ÅX×~¶¡™Íñ2BÊ€F›¢¦žæX×Nè><…bÊâ»7ºÛÅWMcHGCDSS. dîš”hµ(¦Cj…³ Õ´âè_?G7Sf¯ Ò³\5ÁTšìÑT ®ªÊÑr­ãa‡d˜"³”âù·\üþ9É£é4³o^àtŒÀãŒA')v^Òûå§tЦ–ÄIq>ÇVs¼ìÐû Ãâ›·$‘iß\ ‡”°äsÒ‡Í5ÿçKT÷ŒtÔGøœübF|r‚¦ÀÚì¹Æ"ã@p&"9!ý‚üåŒèø¥,¶qtŸR¿}ÁÕ—Ï«5Q÷ˆ¤Ÿ†ú68WæxRK2î 2E3c›˜dÔii¨©¯'4µÁTŽãß~Šj¦,.k„ðT×sâ9úìŒü›o©f%ÎxL]úÔo¯É>ù„ÁÃŒëß…¡CÚó× ’AšODÔë!äš×è­C÷ºÄÃ1ð»©I¿FͶғbJ˜†r\‘€TÔ×sP1ÉQºÁÁ”¸ÙW~ŽSéÞ›žÜ3Åü;¶ÇïÐTƒ7SûïÕ°…¡ÿÉ3úûØÆ®©iRƒÍ™ýcAÈ”þ§§T/_ã“cº;8»¸…Šð³ .~ÿ .î"…ÿ™öùõ=oßÓ²¶Â–gqüù#\Q´uûú 6–wQ6æØ -¤À7ÕUŽG#|E=-ÑýA{Ýøn!Bâªõt†ˆ2¢~7d)½@Æ‚êêÛÒÓcT…{7vU¯²¬•IÏúHíCì-A(- êIÕÄ}‹öîG2eáŠÖÅm°ÚàWcýˆb\5Ç–žhØ ¼[Ú2<gqÖ‡Zëhf×8¡m×_©RT7Áæ3DÔ#î'4Ó Îi¢AŒÝØs&¿F¡›ÙGÈè­¹ä;™À;åC¿qÏöÞ‚ˆ‘Q¼„÷Œ ºš€ê’Œ’°.ù=ˆûVfb‹Ì‡ßŠrý˜jy°3ó ÅxŠÎŽI‡Üòž›Ù±›1Ø¢·ÛË$¦¹zËâå%"ާâßÿí·”¨n†ð-ô.<Þ[ˆbìd†m2Öxcѽ¬í”ÃÕ*Í+¼oS–-;ðýõc\ÞyT–¬÷8±9¸ý÷Í æFý‡ÉðÛÞ´|SO8 Û8ˆÃ@ ‹É–ïÃ^±ü{)ðu‹˜/ ­½G&*ëŒîõÂ`‹™uBÁ´o³ÄÆúÈnaà.ËEIì|²œ’°n')º›n Þ7)7BJ\‘‡¸$‰qu›…òZDÚØ°nwÌ|†s’hØC´…dH‰Àaò[Yt¿‡Ò"ìMJ#„¿YÀ»K±¸ï^/Þa3G¼C{ÂÞ f‘ãw[½ñŸÙÙ]·}xÏýõ÷ï—áÚÃÔB©ç½GêK\mB|é?ˆ’„`B­ˆt("üŸÿö뉈ºƒÁ'OÑb™>D£.RYß½Á¹ßL¨mÂÙ¿~†¨  aöÕKšTQÏgX+ÑJâd|@ÿÙ öò9¼¤ûÑüä‚*7-}À£ÒX_f}¢n&«-©¯' ÍÔõ‘²Ä;M=žàÓ>½ÇÇ( ˜rñ¾Äél]¹¿AðÆ ¢˜(J í÷¡¾;Ȱ8€é·M]Sc½CEq˱>À¡»×÷ï¶gjÜ¡Á|qØŽ~ó9ƒ‡1ã??Ç郎ÂàkOåÞªqŽ· ©,Í<¤}̬DöFŒ~ùõ›oXŒ#†ÏRƾäè¿üí¯¹øÿ¿ óùgD”8cD‘û5—xÌ:á ñà·ÿ¯ÿÍt,xøß~M’9ò7cšyE½È¯;ŠÐQB”J1ñ`€pÝÏHF1ã?Éä» :Õˆ(dVEÎâ}Dçƒ[‡“·‚êú g3²}l9£ºœAU™‘g”ç—ô>ÿŒH—Ì^^NñÕ„ù·D§è>>ÆW5¸šz<Q/æ4• ÷ø1ÇÊß1{3%JSŒ©Ðé1ÙP1ù–øÁC´(0¹GFÙÓ#´†ÅËs̢Ĺ”dQ]^âlLr|„Œ7‚P%i¦×Ø&&=íƒõx“S^NpV µ¤ž— ~õ)½ã˜üüšù7¯Ñ?dpì¹üË%gÿö;d~Îùÿú‚ÚEdý>³SŽè¨‡Ï¯ÉÏ-ªã1ó™,®Õž›îuˆ»gÛ ÞùuznÐ-¹Œ›èRól=؆j\o¨.ç¨Áˆô(Ew¢-;,ˆ;¹àòßâtzs>ÿ'C Í¼bð‹Ï>bÒîÖRŸ_Rž_Q“Ð{rLõü-dC’aDÜï¢;j¶´ïIHÍŒ·ÿë ŒHÖ¨ä{úD =¦°ýË/<ì`jÇvÝ€[)mV«y£`Ï/'‰ÛÓž¥ÒU;ïLC5)[¾'Äà ¥C²_ˆLÑ&EÄ4T×9ÞËv¾IDäi¦l#0‹ÆKÒ^†LzèÄQO*’ãc„Ë)/¦¨þ:+u  ˆU͇`­ª´¹ÆMlmŒÔ &/‘iŸxÐ ñ’ÞàH@!ç@Iì|LS¢A×,°óEÛ¯ÕIÂ+ ˆ‡Íõ%Öh’ã~‹p·`!Mà=ׂxt„Îôa.ö^Zì¥d¬ÚÞ@ wŠo´ßE wùÖ;œòå3ÖŽf2 ÔJ¥5åFüâ÷é·õaß|Û×Þ; *N-ØžC‚m~ÿ¾¢ÀÍb= ®)p•½‰ãÀidÚEèÍ ¤ÍÐ%JÌ¢\&o®bÙ¿»ˆPj‰)甯Æ4U…Pj)c'B‡Bt„¯ º—i°N ³_W8ïi‚$G¸ºÁëÀ_ZnH„„ˆ8‚Ú`ò ¡e‹Ú¹m*””+‰4gíŠû(¤ZO¼å&-$ø€úIxLBì¼E¬ÄžEMŠ[Úb{³øŠö¹–&¿çwÝã¤ó§C望¢´ Èž’ÈHoÐpßWÅÂã¥'ÂABÈ€¦wb¤Ô¸EŽ[ŽiÞ/¹b%á¶dµ…ÍR®‹sÚñ µÂ7[7èa_ÖØÆ„>DQ4õðU‰)š0üUº¼1ÈNæKa¢E×[©@•&ëMÕ¼ñÈ4Ù–Šôþîá¨"„7x'‘Ä•¶¨ÚÓfEd–u¿›Z¼Q›Wæóß Yù{ðr½ìñ4EE-‡\J|Ya+‹L5¦¨qBP€tøÆ “«M úz'óv5.„øöùŸà={çQIxç»ë¸8,ûv?zg‹ðÛÁŒošv®…=Oub¶šÝPxÛ`ó&¬ç)ÿ¥ü§_Ò:ÔÆþÞÖ"-Qä•ܨØÓ+g°CÅñ éZ!E[¸‚b჆¦³-£Í«4Æ›[[då'©À9lY!´F¦ñº¦‡ Š’ ¤h3]A’n‡5ÐJ¤.eAeîcx)Gëªר›€Ÿ"o&ÂAJâñË å½ñíKøUâÆßŠÜï'Q/ã3 Ô˜pß÷5¬„˜Šÿ·_OˆûƒÑ/Ѽ¹¢óñ¸ù%Wy‹êÑr„JSê·/™¿Éé|ø!¡eòǯ©ë§ÿõCÊ/°ú˜$uÈaQ]3ùjNzz„w®,i5‰N£°yŠÀÛ²µÁ” 2ÒDÝ*‰B¬ë+ª«kdÔEw{¨LR¼~]úž¶‡X°®þø N¦Dï6]ÔŒ~÷5çüÿ|‡J’·FéÑÂ[ü™CPƒsXÓà%A&Ì™.Pê’ìp Å´ßø‡€Õïl û*dÿØF¿ø˜ÎQ„*¤nc¡hÑfQã­DjG=¾Æ6Pè~Ÿêâ%.=¦7Ò,^ÌIN;˜Ù4,ı¦¼žàDDÒIðÆŸÑ{:B i®^sùßâtŒ÷1'ÿås²Ž§¼ţŋWÈÞ Ç¿ý€ü›¯˜}» yxfŽ- ¼—xÙ“Gt¤L¾ø& ЉnSŠ ¥$B$$Çð& bé°UŽ­*ë¢2+Ø¢Bê2KÁ•Øb·*í »1xC=™"“>éƒq?£>ÿŽë¯¦ÿ_¿A»œj\£1õÕÕÔaë‚jš?$éIª7—X*ÒàbŽ÷„Ù_ÿL±ˆ¶Ä똣_~†/ϹþêŠt4ÄÎkqŸìhÒ!¤§º#âÉ Â ‰-¦Ô×y»I ýg¨^<ÇúŒá/ãÊ1“¿\’}ôŒÞYÆôËo@uˆ‡âNŒŠk®~ÿ%eQ#œ@uûÄÃ$œì—ˆÞ‚J‰GÃ6µéн$¨p4!ˆ[U|l!ã{y¸ /<³?~IYkF¿øˆ( ©dܱ^¥Ô¶PœÀíµ³K®ÿô¼Uá8´êš ?tûû~æ]ÛßuOÉýúSz§)¦ …Z2N¨_ËäuCÿé Íå”èôa ª”Z¼Y뫯ߛoc ‰T5—ÿñU­CýõϦÏÿ$ïY€™•ô?û”a[Ctƒ»+c'öpjwÉM„èä:˜4½€®Ò߇گJ<Í´ Òu{î'x/ì¢tþ¦"ņ,ÝòË}èxª“"–YĶŒe»EDƒ 3»¢™ ⣛ÏÛ€7"}0ÄÎÇÔ3C||LÔO‰[L(¯&Èl@²’âô;¼r¶Qw¿OŽsób¥ßå2ßÚçõÑ@o73« pó¾v("»ÜéÍg¿Û^d$h&cêE[ ¾›Ú§†²/›³O®t·Ý>:ËÀ”s¢Á:¬Û 3ë{ ÌŠ“.Ä!;öp¦ÙF ƒ±B¥áPèÛê%:¢¹Üä@/hÒhઊfaR"#¸UuÝMÔ×s¬S¤Ç\^b*Š4Ñ0SSOêöTë‚î­ H©ŒÔJ¾.Œ…ÀëR¶§\JnS·HBÅ*ð(Dª`¡ºRZÊ«k÷—‡î 9!i(¯«Sh˜/‡È7xÓ;g“å’RÄg):ÿ2 E`ÜÓöxÉp€Nd;·,nG,Ü[C3+CA‘«Û´^¥i‚4g%:‹ðÞ´ò’ ¦ÑqH£‰(%êF %v1§ˆ8¤ŽãÁ(˜¼ è³ÕÍÐÝÀÛ­g+-̓T¡JW&*Háå2ŠW…d -ZÍÊ€ˆ¶àÀÓ¾ߢ ¢5dñr…þ ¡Êb+L"âa_Ì(&5ÉÉIC3.ÑÃ4¦†3ÎÔ ãVÕ ÁyÔ ¼$9êÒŒ¯hŒloˆú]p õ¢DF ÂÚÖä$Ì0tüJnJ(¿â.3/AÜ#uxîÞBrÔSSMjt?CJÉ‹pâ{.¼¥™æØeƇbÏ`®ÐfDà“ ÏªàÇ;OÔë 5_¾L·Ê]ª©•È}[jE¤B ;¢^¸l{R‡â† Qà^ÖÓü°ºÎ.­uDƒ.:Vëõ\)\¾ š–!;„ ”&hß™8@=X¢:¼¡Ïñ„Ú{Þ_?ì›ÃO<ìe cÜúMìÖlîý<¶ê¥öÄ ûÞó>ú 8xxk0³×Öœp_úàf©X ÿo%B¨6¼kæ²<4˰69Ön4J ø ®_¿wÝ ßmßr³[n|@K9HF½ %9³ýîSìô%ÓW%ƒ?DŠŠòÍk ˆ$È]é íjk‡Œ˜Šj² ©Là&'A>)T“ué=íS|÷†èì1Qê˜}sNòàÒ͘|u…Ô ™tÑ]I}q…µ'b²“c¢Š‹ LI7èD«î€xÔE)Œä:(h;©;1ó¯¿eüí52nSj‡N1[ ¡5Jê'7k›uš½ýS* fv^’?ÀïÙ·†­†ÂÆoÜLaFWÄÒÏylYÓýèÃgÇØªÞZH…”ØbNñfqô,£|þÑ;føé ‹/¿cq>%yð€¤å¡éTQ^ÎHŽ(žÃäeÉño>E‰‹ Gçá•Z‡Y4!0ÆÐä´ÄΧS¼”h!ˆN’Áü›+doˆð®,¨f9B¥Äý.®)É>x‚0W\ÿå-:K‘:%uÛ"¿öYJ‡« |Ó²tØðoÜâX…@Ú;‰îvifcP=âQêë·Ô•¦û°‡™tžî"#‹­ññÒ‡`ÌY‹Š5:Õápe-¦0«1'ÚŒF½¨Ðƒ˜æíÑe¨D…ƒá`àmKwÚRí`µÙD ×L¾xõŸv•£÷ñ:Ç)Îø-í[©[ã ›3ÿnLúøQd±Vì˜_ˆú/‰2Áä¯ßRÌ\»Ž³v·|@ÿÍ}šiNöôCFí¬Ã5‘¿·mS%±¿=~·t‡¯Ëa££à^è6æåN†hSyg…nu¨meqµ[¹!n¢z~Û"Û"R˜éu¨“÷‚¼ÜElèLß,à[©›ì~ÿAþðÆþ¼BÅÖkñÖ»ö~û>Ü@cá¦^þ÷m¿Ë^ÊØmq wÛ D¬°Ó1Õ8´[hò K餿Qz'Piïž¾%Þ,¨ÇÑè©ÝZJs¯–µÀ» W”¬^Ò!4œ}è¹g¿ÊN`…¯‘YÖn\k rï’áýn;>âs}EñvŒˆ¢uuc̢Ļˆî“#ê«·Ô¥";êk°UMSÖ™uZ¢ø*}àG³(±Æ‡`µMo è”t”ÐŒs¢Ñ_ç”×ñéÔSò‹:ŒÉ@³XД^$¤ÃJYªùÛ*Í£¨å@ë Qimû{Ñ ±”±¦|{A1.J¸oµÛw"i­—ŠKG¼¡)jDE!e8ïC³ýàÐág³¶:(;°ŸOv>¸Úœ‘LѬ‘ÖVgX§‘J¡’IƒIGP¾à¼@¥8ŠctGSsâãÕå%õÂÓûà4¤i®âQ†îv .¨¦%Ñp€R–z’cGJO“!{IDÚ%J<ͤB¥ Â”-çYÇDY†o Ôàš ³—StÖAÇqðíJßäÄîO—‚PŽüõUéѱ2 ·!a?IŸÿ¹Þ³« Éé)ݳ¶¬BèV`ÌÁ9pó½ù›}¾ó=’;ßë,z(ͽÝ¡%Ít­\kÒµó|î<È,3¾òvnþ&!ïöïrxû îÉ»ÛƇؽíÅRÍGdÙï¸'{_a β@ÛÛ—ñë ̆¬Ý;ÜÏùy¤ìÀ«ÖàÅmd({xF+°KI\U`ò¤Ü°ò–)ÃÏP¾|AU% ?{„œ3þúÇD½!ñ°‡kæØy°Ft^‘­$lt!"pµCÆ* ‹ ‡N z}I]›À{.,ÝOž ò dÇÄIÁøËsD¤pÆ¡²!ÃONiÞ¼bqÙ9eþås²gϰׯÈÇ­åM¾ó½t oy¶Õ·¦'nf¾ >y@ÿÃc̬ ¢ö-ù]JK=)Õõœìéôu).4‹ÝMÑiå˜É‹1½>$I<Åõ [9\‘SW†þ‡ÏbÆâU‰îJœU¤gGÐÔjC3=ïA_爸CvÖÅY°Ó1³o_á¢!G¿x@ùâ5>íc®¯ˆN¢Ýã; >9¥~óœÙۊ˜Ù4s¬&¡v1G¥â£¥Fâ«9Õ¤ >=EbWk¿J5õÛ·X2²ÌtB3«ÝQ($+kt·×Ž»;¿dñfBöä²§8_Ðyòéf,^MPÝ>Íì*(h‰ HO‡˜ë×L¾¹Dw»-å¤=䭂Ͱs)¯B¨•ã§—)ƒgGÔo¯ðº‹-ÆØ”Žqu…LûH]cMv’±øö"ÉP:¢ûäÞ•Ì_]Ð,‚ÁQÜ?Fg`y€î…Ç{Mr< Å‹K°Æ-Õô‚ÌÔZ€ú!µD&b•Zõ›K÷Ö]¦®˜1q—ñM'Âwœ ïžþüS¾sŠx#[$<õ¼ {ü˜ÞƒÖØmÎ$ œ§š–ènŠŠh][9À±d “qLÔÕÌ¿}Åâ²@iùwîó?ò{ÞsO2ðM^>`øá)¾©6@½ûXyï³ÁÞ;›èê%;èCjÜä°<*P\ã7{~ÕÛ1 ièæú ç’“^ë>¼“)Þh¿}ØAcwi+»Ïvãž½÷û®}ô>ˆÈä^Dù@ŸooÿÃõYè›O©¯fAÚï^þ‡â˜¶¸=ÍÚ·ÔÚàQ¨Àe^,Ú@[lÕdœ!S¯ \YÓzÈso§Ð¿ÅYÔ[¼WÈ$k8nG¹X…VØùŒf<‡µ•· :ýòó¯¾Á0àèóê« ¦/'È("ê ˆ{˜SV+ÿz'ÁbѨ‡Rç5É(¡¹šRMkT*i&3ª¼Dè¬'>"ë}òé&\ñ–¨×ÁÕ%^÷9úÅõ‹—äSOÔéûGïÐÃ>4 ¦_¼AŽéxÖ"…aúÕ j«ò¾ ë§ÄÕØ±õ}rÂü/ß‘}ò {ùŠÅÄE;F*÷æêl´á=ÖÔ˜Úà]”Jì8Hݯ¾6$ bÊ·Ó–'Öž…ÅÖBišY.ûOFm½šEÞ€´ë}Aÿ³I"ËâÕ%Mm‚ösãèü a¦¡ ð( ôˆNНMàšû¦ÕòVA\Ý•¨Á Ùi†O)ߎ©ò¯;Œ>9añõ+Doˆ›^bEFšé yvÖ¡~ýŠùùœhp‚’­FùRo@úÀOöjUŽxWãƨ÷æáCñŠ+Kœ×èDãªg%2Q-—Zƒ¨0yÝÒÚƒÉlL9-IŽÎˆGu½ :>¡s¤˜þõ j0BØy@ƒ£@ˆFˆfÂõoq Xc½  ¥­N9+>}ÿ‰-+|Ôåø0—c¼J©Æop>FkIS4¨´‹Žm@ÑÓ[V­ë“'yx‚ò ó×o©ò©#âΕ\µ4u±àT(²]®¿R¬,Å·­|×ÐO<ê¡b±iO¶ƒXí  77±â´‹8FTsÆ_¼ÄëäðÂø·Îçû~æÇnë=y\iè}ô!£¸ud­2€ë©§ªŸµ”ñ=ô˜­tûö†®RÍü›çäC”E7ig?yŸÿùÞ³¯¢³‡ ŸŽ0³ÅZƒû`½ÜÄ÷öŽïùEDÜÌÌD ï?Ÿ…V4³Âlgªü­vçBxFÅj#{uC0„½i\õ½µýCƾ€ìPû}ý íjÿ}û,ÞT8ããŽàðÖ`R8p¡bd¢VûBØçÚ‚UTÐošm-úvÝ*AFoƒ'ÀÁóð}(þíodMTË.¸cÍð‡ôà91 5uZMÅ¿ÿÛo&¨tÐý GùfLrrŠ™\P7J…jRklUÐä%"îõ|ÕGªŒ… `}qE~>FÐ}xŒ[\Q\ädOE ­ÇSêiI|2BØë:$]ÏüÕñ茸Åù„htŒN‚=ósoûôÞù¼‰ˆ}`Òž Ôòÿ¶æÞ¹½J¬åìîåÓà÷·ÙG[Ù DÅNð=ìÈ÷ºøýXíß±ÏBé`Ù>™±âyx!\ßf!ã©=ÍxŽê‰{åÅÞJt¿ìê«&”îË®„ä Dýþ÷³ñ™wmˆ(ÞpkÜoûƒó8 ^_Uزj)ÿý×âÁàôÿzJùås¢Çh./06EŠSBÔKqEA9›!Ò£3ωúChêÀ—ìjD“÷-W=§óñ'œüúCìÅs®¾¼bø/¿$Q ÕxN9™c Köä×1$íT\þñÙƒ'èÄÑL to@2ê÷%Ó/_RŒ’~|‰ *Ñ•§ ×üІ¨­ÔÁ­ÈÄ!.Ø9帶 QÒê´Ž7ê~÷´½¯ˆPì  Å4Nu8þÕGd]ËõŸ¿e~‘·5b5W‚2ÊÎiR\£œE¢EMöô)GŸž…TÉ’cæ,õõ/¤´,ÎߢúÇ$©§ºœ¡OÎ||Fóú9W~Lûm­8ù×_ ê—y>:%‘ ¤C:2ª‹®ÎY\,HŽúØE0èP‘¡P‰Â” Ê‹)¤úÏž’è‚Ëÿø+V ÉFÂT×–îG0ødÄì¯_qýõ5Ýž É©sÅè³#f~…èv®h•5–ÏF„ 7R¦+/éQF3cjP‘T•¡b‰êtˆROu9¡ñ¶¢¼¼F&}âAН ¬S¨$ðºdãæcŠqÌ\\A33ô>>eþÕ—ÌκÎЪÂÙ„ôáq/jUl¢Ypñ¿¿ÄF5 ª™tZkº¦A N9ùÕ˜ÏÈϯ0MŒ…FGôžŽðM…1Šì¬‡O©æ†¨ëÿé[ štpDÒKÈ/^ƒîvlcpAÆ=t ¶Ì,XÛÖÞ5Sä"ôQ‰Vð›©O/‰GÖ¨aÝÚGáØ2^áÆÆ+³7¾àòOÏ!N·3{‚n>ß#At+Òø}Úÿ }°eMçÉSO†ØºÙÖw¶ù›9Éé :¡­¸›Âá}@Ž„”ènÌì«o™¾˜„÷ü3èó?×{¸ª":yÈÑçñ‹ù& ç~–ЛvØBÜRt¸gÎ q Ç¡ùyïù¼)A¶nãP¸Ä®ɲhÐêu®8'Ël‹V²ÙgöHœ‰ýÜrï÷?Ûƒ¦"»F*;Cp‡‘Êž€øV#•Á÷CôY|U`ÊzÛÑô¶CÆ =¨£H O}5A¤}ÒaFu}­#’ãÞ¸ªÚPÒ÷üþ;17Pá±Ê¡>ìÄ_}ÚïÑD?$õ·ýê´ŽyŸ.R̬"õ0³)Ö†{ŒG}¼©iÕ YR‡¼PDƒnÐP•2To/q*F:×öAã›§D½;ÍIŒ+sœñ¨n_—˜²!ˆº v1£ž°TÌp.èªoÙë~?ÈX·Ôl‰ÑKÞ£ÜNÕ݆öB iåïòœzZ]í÷>ÓCÀ Ȭ-Î\!‘l*TÃ> »mܱ›Úߨ'„$¬“µæwBm§5ß_?ü{ô/ã näí€û2y¾ºú®hìß>ŸoïÃ=ûì—¶äí’jêxÓa—"rðäsçgÞõ7~ní×}Rmh¦ |kæuó9ÜE‹ò,…ã¥ÖxopÆz¦opERo Þåû¬öûú î"M‹Ã'ãÖp§µŽh!üÀÇÝ~Øgñâó7RƒÔš¨“àŒ¡žÌ‚6szăÿú!õ·/°zDz£R…·=èR½~ÁÅÿ#¾ç»ïÉÕ5jpÊéï>F59¶¶Û¨¡ÜÉâì–ì+À½m¾mÉFþí9dk}¾µˆXâq/é¬ÖmSØÖ5›ho›q\#¯÷D wdìöÛTïi/Äý迵ý ìwìs›átMYmÍËо†³ùî„Ç;…J»ˆÈo&BJœ)pE½Š;nÒPö}?{hA{ú°·€uê¾EÙ—ipx¯Qq†ˆd˜<·óÄE(¾n.ß0yµi¤ÂÀÛ`*·6¡8@´®F2ËŸÔÚÀdz[ÕèQ?ˆŸûÖ’»¬×ã%– Ûy„å½u­½w@ÿ¼1ˆ8Aj‰Í Á´ÅÕu@$#…k ®¬Qƒñ »B>×:ÊmÑ¡‡÷Æâs+B|ëD+T¢1ãÄâ§`gz±Â•u8ô²@OhZ¾ôî„Rj›²{ªw,Å¿‘‘Âe0ˆØuå´7vU¹R…÷&eKÂÈ,ÆçMQ¡{½Ö Ã‹÷&؉{P±¹9X*F÷Òðþ|°ŽöÙ1¾*±.:d#ek®5R ll¡½uè,Á-í­;Y°»v_×ØÆ¢ú=T$Be÷Rv­jðÆ"’(ÿôæ¿.×íœR;ñ»PÈ;ÕÞá3·µ÷ܤ}þíÿæû4QWÕx!ï±Ä¶™Ž¥Ó’s TX§wµ¡ý†{å?Âb*ã»-+ï™ Õ ;{@:Ê0Ó1Ÿ"êˆ:’øá ~ò’ɹãì_?¦¹œ£"Ãø_QVžd8$ˆ2’Óó/¾äê‹`~”(¥"!="DIu=ÁÖ¡ÀÌ+ú¿üŒ¤[qù¿¾%:}Lç8¦zýš¢€þG¡ìœéË·¨Þˆ86]ë ‰º1 ‰Ikí¼„ZÒÌJÐ1Ù£>‹/¿æòϯC`ô½èSN>;büû?Q›(˜þˆ•·[Ôôñ Ž>=Á,Ê­× d¢=eû½\:G3¯ñMЭ'טZ¢;] À6h¶Nê–&‡ä¸Gùö’Þ'Ÿô ž™ðŒ¯/ñQŸÞÓ!õå ïÂå\ñšÑ¿þmgÌ_ŠGØ|A9/ˆGè>>%é*‚D˜°¦((ÞŒAwd!ÇIIçÑäW̾™ Ò˜ù«·ýîÈâŠÙëŠäx„î&A-ãò-åÌÑ}úªšh"UË­SÁôÅ»µäš„Ö¸üšùó9Ýž #Cu]bŒ@§‚êü}úˆ$-™¿,IŸgŠêü “¯_ádÔÒlR²£#dt‘ÍõÓïÞ?&í+ò7çDƒŒ>}ˆR®uY÷è~Æä?þ@iœþêÕUN<è€oL‚„ŽÉœs˜Ù¤-ªa‹ Š©§ÿÙÇdÝšù_¿ÃøÉñÙIçÒãêÛ„’Dƒ>ZÌ¿|׈$ÐsÆ3H3|#“A›ñ‰‰1¾±mµõ>ÄjŸå,; Ûíu'aþõ×\y‰ê$í!ìŸ ™üÐX!0³?âøW°y¹¦}á¨Ç%ª›¡"¿>op&m1Q5áâÿý’ÆG­lÝÏ´Ïÿ„ôr.xcðQ—Óß}J$jœ;4Üà4oZIoò’Å;ïß}~îmÏ-¶Ö7çó^δ߯³FõîêóÒ¬¥U×RTªçu†<7QôM{íF*ûû°ƒä²ç»÷¢îü<¬¼o ÝÁáOorê« ^©óËžC·[Za§àrÊ‹œøhn3Üõ}ãÿ‡² ?Ø~g‚äMïrš×(ºŒÖ¯q?}@1J€Lbš‹7Ì_ìXy/ÍFVFH„÷¨N¦ÁXj•×Èn¬?=¶` "ÖèNÚÚ€W«AH‰@"¤Ç{‡³Këå€B«n†!U‰\ʉ,©"¤p˜Æ “¥=δÊ™€Rwpn«€O(‰—ˆ( öÑ‹"˜ ÈïAôóé`š1Ë·y†?Å™É:T' 2S6Ö¬3 Ë…^¶f2©£Öö¹åR/S^MC3ËAÇ!­£Z åáZ¢ô7]žÂ×{gQ.ÂÙ ­¶ŒÙ³ŒH šÙ’_%°A÷:HkðRä»ãκð*Œá[u¶4A‰b‰D¶¼7©Eàù‹¯M ¸T zÐ…¦ÁÕ6dJZ »UQ›ÔÝICædùLÄN*Ñ{ á‚YŽÊÒ l±¨‚Ɉ’Á^>ÖÐ4ؼ‚8BÅ3ϲ¬–…Šux¾Î✈< hLU€J‚!Z:5i„p4y qŒbiàá* B šñc‚®T²Ųq–Õ8±e‰³o ê§¡j¸q­½k íˆ8AE×T!›Ô¦ê åb­§LTƒmZ^=7d¯¶©z;š«+¡$®¨B†A¾'á\œE¦)Q·Èñò¿{lU#Ó¸%½‡¶>Úy‰Û|_ﯿ­ˆz »¶„cÏ{óþÀÜ9Ð~Y º]¾ÏüÜ#c'î=Ÿwïé]Û¿CŸ• ŠNe³c.ôwF eðnÚA¢â\cCíϾŠ\ÑÆŽ W'tÈ´:ƨ ûͲ>æpÂAë«°&Õÿ,ÒÆ¡pC:î0xö{uEòÁ”®˜~sŽ™÷=á u±@ N9úåS"a‘Úsù‡/¨æ‚´ŸaËœºjÐY¤¹\P~°¶Fèé°Ô¾Mw¯Oªf1£™¨¬O<ì†ÏùŠÅësT§‡– =’u·³¬q5莅d›' !Q™búå·ÌÞ,2 ‹RÉ›ü–[ ø-‡ØZD÷˜ãOFLÿôµ F-ßKðûÎ º§½­æ¢Ã5 ÑñCŽõÑmq!ÈÈëè:&>ÊJ¢’‹à '5¾œ’·r‚JØ­S´ˆf6…}ËI¶z4­€z§‡ÔŽâí9^ÆDZ ßPÎ tÖE¸c,ñ ‡ö–ü:'ûð IÔ0uMÓ4` ñ醤\ü?ÀÊï'¿ùŒ¤ë™~ùŠzÞÐÿäC²G}fú‚üª&{ôª1ÅuIúàQU œ+p¥'‚j†YsÐC°h$Þyt/F%rÃÞ[¬ÌJ\c0…%ê¥!£á‚v¦Ð [4X fzE5©VªÞ¹ÐFxê©ãè_ž2ÿúK\|Fï¬(2q„]a*EÔä/¦D'=\>¡žCr<¤žžc*EÿÃHŽ»a1ó:Ð0:›—8#Ê÷8EˆšzR´RdA3Ù.æÔµbðù§diÅõŸ¿¤˜³¬#>9%ÒÙ9"jòóq¯G3½Â”ŽÞÇà××s\鉎‰É yR£;ºÍlä÷@ ¹Þ¨NBþü9“o¯QItËü÷Üܾoû;æómóSüíwú <&¯é}ò1Ãg#Ì¢ÚAW&7ÈH#£ -î÷ £s}Îåï¿ÅG2V­­úÏ´Ïÿïùî©Íì™Zrô›OÉ2ЉïD ï‹Lî´¿ïüÜÛþ6š=hì]ôNz'½§Ï„º ¡äºÆçP¤ØFÈ7QmwÛ3Úמmzƒ–xÀ!;¾;leĶÐÀ^+ï>ïk¿×Ê{_ûöС.ŸR]ÏÖ›ïÁ dÚA¦ W.€ ìŒbjÉΆøÅlm\&ná‰ß@‰¹Å5ó¾í·V÷ÒÞÌ ¯>ì¼UÚµ£ÀqÃóãö{’IDsuAþêGk4R³õDÃÂUT³²ÇœuÈ,%9ê#­é©®§4µ'J¼«1•G'Rœ3xãpÞ"dŒŽ£–þ-²ímƒ]*/Īý†¦®Q‚RW[t/#êÇÔ×sœD£N¨†\¡±¡BTÅ’òêš:7í)õÝö…hÍ,L«:tÈFšë1yDZõ]ÊBïOKU ‘¦$Ãe¿ÛT®t4³ gƒQŠkºßEi;¤ ÜvÛ…7ú+ÃÀ⦠ŸÛäî:L^àe„RŠ¥»³¡¸Ã›€Žë4FJ)+8»G1î!fÿíÛ¹F[$H¿ÐöNÏÛCÈ þeCíЭSzO#lN5âjAÔë#³Pd†T¸rŽ)Ý ¨É/‚ùu‰“šì´OsùšñWˆ$î…ƒìù6¸Âc«oÛ@uÉ[–"´i%ê Ùƒ„³ ¡z{‰×]’QŠNBjym,Т-¢aòÅw”y°—ZÜžr8À[sUMòà1£Oàêá<&Ÿ1ýæM0Àw½´ ô{~ï#å{Ó ûÇôŸ!Lµqj (²Ø@¼w-ƒA¶ˆkÚÌö Uà]Z°úfJÊËëÖ„DO%IOØÙ%ù•'ê êë2îõ#šñgðõ >Š«®™¿X Óï¶.p6FCà©g £ùÕ,¨«[Lhæ Éñ1Ñ ƒðS²³.ÕÅ$°Ô \)ˆOŽÑ ¡æe:s“¿&±`öŷ̯*TÔºþÕ5úøGŸ?FØWÌÿå;Œ‡=[4ô?ý˜Á}š"HØ©¬d½Ç,*êyMzÚG Z3ùÓW3üè„Å×_Q7 G¿ú3+Bðïr&_¼Â‘1øôÍÕ%ŤA)ÐÃ#¤¨i¦5²›âÛÔ›ABQ%)¶.¨¦'O|xŒ+ ¯Îñ€îiÄõï¿ÀÒ!J4¶nHÎN6§žÕ8cðÞ‘=~JÚ³L¿º :>CRÒÌæÊbÑñ1QGã…Ä×5õt‚-+DÔ |síAºÃð„‹ý*:‹™}ó-ó·q'Ù/`ˆWúŽóùŸŸ?Ð|¾½˱÷Ý“´u"l‹E½Ç¼BʆâõɃÄ=ÙŠ TšPž¿bòÅdÖY9†ý¼ûüúžßýž„wÔyÃàÓè uPDºa¤ÂNæ¾àóPûtõN+ï]=áûÎçíá~*ÜчÝ{ÿ»öy·k:Úæþ”´ Þ°ÕO!oC Ùoý-¾G{BæÝÎ'T×óPl¾sð^¢Ò" ¨~3¹¢Î’AUľuX·dqö¹#þXí÷ÝϾ©êÈ•¥­•÷úC7äöVÃâ#"ҘɘòbŠˆ–VÞ¸Cw‡è¼¯qF!u¸ËlASâ¼"{xŒVžêbBc=·†øx„¯fLŸ_"┤7@' ïmP,Ð \»‰£n®5íi)¨vèκ€¾8PÄ^¼íŒæÁ#‰ÁâÅkªZp/JåÊfßXôhHç¤ošv7«Éß\a÷Ý÷]¿ñ®í¬ÛÞÔàˆÁ“S¨ LUoˆ–s;ÿ˜}¬°‹œz¾ËC Y€ ÛÝòØU(”‹Ž»¸ÅœjìÑ]hæB¥èTÐ,‚›]ÈT*z?Àc¯óVõ"œý¦ଠûÁ”M%48'ÐI lmQJvÖ¡9Ÿ`‹Â[‰Ôá¾T–õ“•€·~cAĽ„üõŠi”-†%zxÂàé14ß̾{ƒñ)=®²tž>&ů¯±N’žŽPÒaæsªë â„ä( çùœÅ›1è˜tУ¾¾ÀÈý†4ãz0@«†ùósœOè>9ÂL®)§ Q'[©^àÛ"¯ ûTŽz¶@¥L1§.Qš=<%J$åù9NvHšâÕ%^Åà ¦văÂU˜Z€kpx²ˆãšÅË9Ñp®óÒ$Sj\„—xœ±A38JH†YP¹ql;…݆öl%2V”—×”“ò°ž¿Àð·´ÿ¾óSÜ8z‹­š ÛI8k©$j9’wá•[78®6t?¢s’° UqðUIu#ã\…)-ÉɆ ¢sÝíbg×Ìž_!âèGîóOüÞ~ïùoíC¨çé={HùP£p[¡ÕÞúþóíÇmÿýöîSŒæ†}¾k¿mã…êz÷²³Å¶rÈÁCØŽƒ”8ÌIÛ‘/3XAáÊ[ßJѵ޵"Ô¤9+‚5· ¦É› îfk9ÞCE~w$´ö;ô­6ÞïRé gÄwÒfrêYPK+o zO!\Ny5ni›§‡Œ3Àâ¬$&,¾{‰È+ôHeºÑ\OiŸ(©™|ý!cP1Q/ÆLçÈÎw¦•A´2y=’£¾œQ]/ˆŽ‘b‰žÊ™öÁ˜eKNE€­˜wŽ“éʱòû^Îô`DçlÐZa 0ù›+œW?Å!ðÎù²¸KÿÃHêuÃ!nÏ— [éAÂAiëtÚzÇ C}5n«Å]xQŠÊ|“cKƒÔ*$êµM¦P`sšYî ˆûq0Õ® ì¢buÂñç Îx²‡§Ä½”f‘S§ØªAJî ÉθrÌìÛ1z4 p¯ÚâT=ƒQ? úɾµ—o×#©=óçç˜Z¢b±­vâ ¶iÕ%P¨(Š,Ÿ“YħgtöAê‹sòkÃà“§3£x;Æ[ESU€DG1º×Á,¦ÈlDÿ£#Š—o0…'=ÉXGIß9’4¾ÓÊ[)\žcæ9¬èd£h0UD–!¥‘J D ¾¢©I?¦xûÕ9"Jc¼3­Mdà’êã´Ê™|uŽŒ„Hˆûͼ@uèÄaëªPa³vAD :Ið¦ÀV•dl’×½uè^k€±CßÀ–L¿yEã47öã]òúÊ`ë`HN‹v^ O0úä _U¡QS0ýæu‹Lî?ì=ÁìE2îh¿o.lôÁ;‹HŒ~ñí*LÕ*§qKç7Š –24BKÌ,§^˜•>éös (´kBJ¼H• 3UÐ ¥l!Hk5¿…0Ô³9&÷Dý>QGP]PÏ‚ ûÒÆšÛÀà“'hå0…£É¯)Æ:NINŽÈŒÕ˜ë?Ÿ£G#”¨qMË1–"¨…è(HÔQD:êÝŠ`òÅ·T•DÇrÛ ô6}S!hf9Ùã}|‚ˆ"ª—ß1»4ýúüôœÅËkÛÔaQk<º×ÅW3ÄàŒÁÓ>‹o^î‘&̾ø‘ ‰²g L^ÑýèCš«Ì/<‘¢)%qOÙÆTQÏkâ~‡f2¥óìüì I{ŽÉŸ_B:`ô«§°¸âê_ã£Ù ‹P~ojœH"T uM9[õûh­:º]7vµÐ âQ'ð²ýfJLlq§·Òb•jòW¯Y¼] –š¸þÝçÂßÔþûÎÏCí N¡Ä}F¿x‚2Þ T“/¾#Ÿ6(-ØK¾kUPœÕŒ>ÿ$¡>h£ÈÕÕÙíg†Ù—¯é€(KÚŒ‹#öHN:¯^3{5 ÎŽ?fŸ¿çöýž°>{låèöŒÎ@c*»6ôØ ¬n Їç›?PDxçüÜC÷žÏ·ì=Þo´ßׇÁäž"ŸGŸ·÷†Ûö[±ŒO” ž,°•ë%ï(é¶@‹ ”æŒá¦˜ôNFÀ-Í“Ã,[¶®·õ2„ªq {ßÃí²Ïöú¼9?½"TÀçÆ9ãzX½l/#¤ž/g­[h¥ñ ¹âõwk…]Ìh¦%2‰ƒ yY`CÅI’C Ó›ç¨n­,–`ÃÜL T¿ÒÆ „ô¥”X…«Ú~@›V,]É”`º!6Hß-³J_¬{*œ¥ÏÛBšûç½…ÎÃcl>£šÕàÑpH2J1e½ÂÞ¼5Ôãù†Æò=¹t·ÿ¦ög ÎJ²³*bE¸Í5LkÑJ[>Õ-ùB$êH&RhÕ¾}Oë÷"tÎ`‹ ‘dAÎM®Ím|Uâø˜¿ëÛ÷Ÿñù‚jV€$NQ¢¡),:So®ÑYKL^£:¾)q­«—î÷V…ÈvåX¥¢*iÆãöÀp?#ßX’“#âaLq~M9^ ¢!-^j²“#„Hnu=Å5‚øxˆÔ€ŒpÕŒêbСü*èE•–ìì¥<åxFÜ?B§žjZd]h¢,ÂLçxï"Exg‰C„¨(/ ¢Aô´O=¾¦¼*IŽÀ×aÎ °yˆZ-lcÛM' "ÎHކP/(¯ç¨^¥å ŠY¨_pëe¥;ÎM¤gb°ƒöH­h¦sšE½}xû»p~ ùi-2ë’žtC†mã°!µ^gyö’ï6çµÝ)\¦cÛv2È1 !CŠÖ™µ†¶aç‹ešñ'\“¾OûÀ÷üƒÝS(5eM4’ Ò ãy#¼›ª‡¸{Ûß5?ßµýî|ÞŠÜnÙ{nÿ©û¼,Zwûiw"ŸËKJ|]IZ©n¥Fˆ8l]ÅãD ßÔ%‚—ÿ(ï–D¨©µoÁ!ZÆÞ9K{)BœÚ,‹ÿí7¢@áP­åñjL¨€¨„» ¢¢ºža +¥ÑQŠîeT—dÏ>"IJæç% Š©¡óà¤UŒh°uHqo>ï|ªKupÉZ¥r$ñ°5ð›Ò2Ý›H©Ypõ‡¯ƒÑ‰ ¦Nà÷ =á¿û¦Á4’³ÿö š7ß1~•ƒiè~ôGŸžaË: Ò^àë9WøšÆEkZxþŽw&dÐÛv^°÷÷(0݃Xy‡uG¿xFšu"ç7P€vR O=^`š6+,åÚòS®µ”—ʼnøšjxB”X/§È8Ø Kã›gjêI2=ÆÑýüÊÏ™|}Möø1]_|Åü¢${üéM²´£ºž"“:1Ø*èAc-®iQFÔí"lÈ ¨î ¨ñ°V"Á9d’Ú Ñz…¥àŽÔÆüÜ’hjÇ¿îD̾øšéë9ºï/*y—¹ð£´¿ïgBŸ]Y gœüæC¨òuÀ+hëØ‘îb-Cµ¢y¿)Kµ1Ÿ• üç«|µŽz/H†*«´LcŠW/sµ–ü1úüNíÊ÷æÿqú,À,j†¿øŒþ£.¦l6P4¿Öûw~ùÜ‘³kç˜ß-’»£ýþù)V‡¶ï×~½Ç¦z/ý=úð“÷ÖNÍwì·ËÏËXQOrLi[†CVáÛ¨û–‹÷¥ÁVm-·ÑØ*ŒJ{x—SspKh©e0=Û2™ù^VÛ?vû àô]¬¼Eˆ8€¾Þí?ß~_»8¢¹~ËâÕxSÆN d¬¶>%¤jO;¦¨ƒ,2ÜœTÈHãœCF Gj­JœUè,ñT;š…;«ˆ½ˆt/ Áöò¯VH¥Ø %­7ÖƒMªDz %6/Cá™{ž†o­‹3„p­¤jpGÄmQ“++šEÙ¢åm ÷Zï‚XxgQYH›»N’w î¦AÑäë¶ð> “»ŽDJâË‚fQm ‚&õ±ù ï$k~ôÆ£T2lîmÕ®P­±‹_Ÿ¢ýròûÖ¶]ˆÍѬ£ÕIqE÷oMCf R+”‚z–£² KšÉ¯b„³ˆ$F؆¦2èÁ¥‚m¸ßxýB© ©Ü{žºµèAo &oZ¾îròúÕº”Ò`ÆQk¯.´ó(¯IuƒG :Hí¨'­¥¶¨$Exƒ­ ºß×`ÊoÛ”› ¿më ››pZ‚±¡ªº›¬lɱ&*ÙΛvÁq‘¤ènÚ˜!ZµÙߪŒl ­&v5äo4R ÿJãÊS4;r“ÿxˆ¥w§è^¼âÜù}æ1[(Ú÷0›pʤ™ÚÂÂVšre¤¢®¨°ïdPóÏ„4ÿ£!ÓgC´ÊâV£ø½‘Ê?SŸ…!S*ï²Ò¾¥zUÊPC”o޽‡7è‹¢r{?7v'Þ¸»¬ùðø{´¿9^Æ*?‡oå@ßÒ~rÒ©üÏÿþë Iðàÿþ%‘¬ÿY+̢ĔW-h*íƒÏY¼~웞áëŠôÁ€¸#cÅì¯ßàDŸ£ß>¥øæ ®¾œÐ}ò˜h°ENÐìÝIá8‹ì ˆ{i‹B·§¸V·˜V’Í;GÔïÛ ¡}8ÞªëïɨCrqõaú:|×-šÀ{ ºÇéùŒXÕX³æÒJ­if  ¢¾ââèt×\" ‡æÆ;õ{µrÍ¢ ûÙ/;ÎÿŸ¿"’ì&z-î#àï°6âäדvÖ½Ù9ËHQO LŠŽVñbF3Éâý~HHŽº˜ù¤E¸Åö‰oeû·t‰Ý>opÒ´Æ3ÊëyPYñÛT8ë0•çä_Ew$¹úýw8Ù%éYš\’<8¢ó`€Ÿ¼áü÷¯ýî_è çÿ¿¿ââ~ú–èÃé,ã¿NÑÃQ·C:jåkìÿéK¦¯¨xmçÀ)T€ÉNþïß"o¸øË:KÖ ]kÖ"¶ô?zÆàA‘*„T4Ó¦$ÄòÕkš…@¦‚êâ’ºt?|JÿaBuyÁüu,›?û”¬[2{Ùpô›'Ôo®iŠõ¢¡ÿì¢T/cò§¿pýí˜xÐE¡ð¦F¦’£^x¾ÆUE8ôìJ:Y‡H»Ä½´-¸ÜÞLœóDƒq7ZÙ{ç‚yŒß±’_!Ð4!ØBc6ìo£~ÆüË/¹úê ½YìvkÑÑ-óí]ÛªÂ?ø™ýóç±yAòÁ3N~óŸ/öY@ ÷r]Å"&[IÁI QBÒ‹ƒî»ñ[¨›ê¤,¾ùŠ«/.Âsý1ú|Wûó½ý½ÞóØ3/èþ9GŸcòj½ny°Ÿ«»…ƘŸÚß6?Žçó’f´‹(ïî=·Œí]Äz3+sG~Ú>/ƒÙwﳌ5fQÑ,šzlôyˬeÝ(^“Q„[L¨§‹­"üÕAJšEêôÑ™ KëáÀ­ ©½ª#û8Ç·X°ÿ=ÛÃv Ó–¢C¨@ÝGíwH¹ƒ^ï§¿°á"¿™5TILýö5óç—ˆdiå-Ä@eñZ/7jd¼7®uþõ'/©ª“âM L@œ¥–¸¢Ä6.pm–§ËåFë7-!ý*ˆFÈP)Ú¢_B€)*d‡â°¥ P!£lƒw¡xÆ–^HT– ¥ÀVõÚTc?¹™DÁ•K,i„AZAB0RØ¢›ÜEjOtR¤s˜¼ hÿ÷fûxt'¡­µ½½€Uø i‹ºP¯¡µ‡Þæcy°. ª·9,Þ8¹‰¶vƒ²ÓžÜÖûk«¬"CÀ®: nQâ•|ü TQ:)‹©*dš"ñ¸Ê@Æs"¤«½Ç55ˆ`©ÍÆR`˿䋶²>‡žë2u*Ó¤¥<Ø­Eg…?üÚ¢’xeŸîë %g1ó™DAbO„¾{cPý á}›ºUDƒ ê:Ø[Ç;¯Z£²¸åÐJ„Îδù+‹ÕTÝûý»·_.Èj;g ‰X#åMs` ÜV°{Ûc&h[\Ùðîºa?ºhG‹/ÇÜÁ>ï¦&7i“b'Èðb{>Khgó/%Ѱ‹°v£D¤m/ÃsµUƒø!×®÷×7ŒœCÆ•DAþpEØÍØî÷™Ÿâö!¼oM÷žÏ»¿±mÚáï3¶7çÃ?iŸƒ‚FLµÔKé} )ñUæ³^?í÷ ¹µÇÝP.ñ.×§1Xƒ-«eôò{ךñsk¿ñ!ï¶QÒjkÜäÕ·~›ÙeÚqÇžñþ1ÿþo¿žõ'ÿú‘jðBbæÖ€L4.ŸQœ!e†âª$=Ð\Íüê¤-X¼š÷ÈŽ;ˆ(¢|õ‚É——!@ÕÒ£~[i¨®Æ£b¹B·*fidØ éçÔ”Sôð(d¢É¿{q)½ŽðÎ÷â@_fP–Jk÷¹5+¶N‡nmû¼Ò¦Õ˜yóšxƒP¸éÿç+\Ô¹©¾ñ=8ж¨é~ò1'¿zLþõ—\ýå5ÄÉááq+'ÃaæøW“vŽ8ÐËÓ®Œ#L^¯9±‡Äé@HC=c—®”rÃ6xWè…Þø`ôt±©°ù„zR†Â&g1u‰“N÷qì .ÿ÷_ýG¨úšŠýÓ”üù[LQaœEwŽÉ1õäŠjnè~ô!iG’Ÿ¿EÆ}²ÇÇD½{ñ’·ÿû+\ÜY¶‡ªwËÉû-²ºàíŸÎÑi|ƒçÄgâdVê´f?Ëw¤ïš@P]üטÿõ/Ì® Jyl^ÓýìSN~õˆêÍ+æß^b­ |_k¨æs¬M8úì)ÝGŠ7Sšâ^Jõö ÕÔ‘œŽÀ-°¥'w4ÑPsýû/˜_”èXáAŽÉއ­ãàòPÐàÊ]ºý³•ŒŒ‡ÝP ±‰~´t•FD™^Ïѽ|CÿŽèM´',LªŸQ¾øŽË?½FfŠtX®è~ÒÞþŽÏ°‹ŠîÇsô‹ØEÑJsÞÒçÝùÙ>÷Ë}h”fÜâŠÅ«‚γGHšVÆr@·Ïåëç\ýñ%2ËÞá™Þ÷9½ç@ÿ ÷$f^ÐyúŒ£ÏâÊòà@°„¾ïüß·=7åï;»?mŸ×ïë]8Ðk­ÆU MnZàèûrŠôE$1³1õ´Ú¼= S…-Ûëüf¾³È´Gr4 òÀWc¼hé›RlXµs‹Õö>„ø§h¿Ý…@·qu‰nkPÖuoR[Š·cT:"èõºÙÒ \µ–çðšøhD”yªñ˜¦pH)Zz\‰É‹¥ŒÝo'(9ˆú„÷&²³ÁÆçpÎ1JLc‘IŒ¯-Éq;c½D÷¢¶Mã«’f^­™ÔpÁò¸6¡{ÑJñŽôÁôk„Ó·†x* :§ÎÞB7;T廽¦±m‡™x¥ˆ²8åT%åt2 ®~#˜TG2â^†]4óbíQÿΗÃYˆ½P—÷}J`EÈ´Âìë¢Ë=ÇoÙÊØÛÒîI]ÚH¥-õƒ—‹›·'5Q7Ck¬áÇ‹ µ&,‰Šƒê„­Ð )"”f¶ âR­ù¹"ÒèN‚+sªILV6ho<ñña*ªÙß{£_BȽ*V›è®óc,dLzÔÁLgãÛ¾YT'#tqEA=ÍJ#£Pý¼´ÂÖ½ ‡LGàfÓjR+T"[Õš0t/CG‚j2oû.ðN¢"…Ap[ò~ÏanwïK%¿gŒ:t7ðÌWô€ Rabû ÕÖÁ_#ŸjV´:¤ÿ8h©ÀcAvº$½dÛÜé–>ßg~îoïAhpM(ìN“€0ïhÂs]PÏëÖ…ðýõ³G¡Û5#ê¬Í nÜ´µ¾k~T˜øaæó÷Û·ôaþ»öùûÅ«}EIlY‡ìé­k]ØCB¡vëÉ 7îwåÓ°´ª^ßÀ <ܸ—U6~éÓ°ú~ÿãÌ}Wû%p·¬‡›@´¡¤Ã;ÙÚ–ïflmën½<$©À|p&$VqÌ*0_ê@wG¿ù-›ÖýPãšœ5×—ˆtHÜ5Œÿø‚äìºSòç/™¿£ºzg'D½=HY|ó-“o¯÷NH”ÒAŽNDDÃA+·¶‘öU_˜¼D÷ŽÐ™§ºÊIN[o±¬6}©ÐI«fqÀ%Hp x“à¯ÎòïÎÙÎY¡ÐYÅøjÆÕ¿Áøè{ë@{l³ž0úì!å«çL¾|QrSÑñ.=Qïð2ãøW¡(±îÝú¼ì·PÁ¤ÆY‹Éíz£¾q"–ÈXP__Óä;ºÑ{hZûï2 '7›ÏhfARÇ6"1xzDóê%ÓË’þgsôÑ€ÙWÏ™¿É¦FŸÑ=Š©§†d ™~ù5ïÐ}t„0%ˆ ”8±F ‚QŠÖˆzÆÕ¾ÁŠ„Ušhåø„\;ày(Z¯èC~GgR줵èî1ƒg=Æ¿ÿU©P‰^=v[6tž>¥ÿtDñêœz¼À–Nw9úÕCæþ u‘ úÈ8d?Êó×ÈÑC†S¦ú+Z¾1J06Ô¨$ÂÌJ²ž!› óˆÁØé—Ä''«lO@ ÅMSk‘>ÉQ/ лš¨Râ¬AE©H‚÷maÜÍÕÛø†»Ö¿íXõn¼î$˜‹7\þé9D)·ÖxþLôMQÓÿôúº4E³¢§ÝÕçƒè}EJ[<ŠY‹P¤ã ƒæýNûö¹ªN;>çêÏ!N×qÄ{èŸeŸmÙ=þ€Á³ãP tc¾Ý|Ï7ÐØï5?h"ù||רæ–5fþ»÷y_Œñ}–2PN3ƒë×¾B{êë+šÂ¡»= Â *é!´ÅæÅZFtcyã‰FÇ޼Hø††ƒÐžúê ÓøÜw8HþÝÚïÄ[s’€>§j»ïmF¶¼˜‘=þŠ·—˜Üî¹ËùêÀG¡ök1ÁVb-A*¾ª0EJ.u £Az6BKøWJbf šÂ „'¡(Y¼£‡GÄ]Au9ÅÔ·%½Dõ3â~BuqE~¹îtRÔÖƒÔ*ŽgLÔup|s-—¡‚=ðJÈüÀIÃyd’ {I+‘·‡Ï$n9îp¦„’4³¦4ປ…¸4kA€m(/§8è&ŠÛOHA³ÙãC|rB÷á€æê*Ø>GÑÆüÁ O²¿è{¥'i0VÒyx‚–7ucï-_· êu+±¶B¢o<ÿE×ÊfùÕ‰v)/¸æÉ€Œ V6­?Kuf(ᨋšìáiO‘¿½¦žÖáh…ÒÐ(é©óÆ(¢nÚæ„ÌA0ã±ènŸô¸ 'ê‚Åë+¬Ð[‡ýÕ‚+ÖB)¤”k¾[Åm1fÚ#E,^¼Á ‘b#eÑÉ1Q õ$GhfsœîÐÿ`DñêÆ%ÄiÊÒµÞ9¢Ó%íÆTWSœQD½gê"åœ@Ç&/PƒÒÍ©*E6L¨.ç¨4 5MµÞ$Ä!‡ª[Lê¬Cõ;Dݸ-ÂÜGÞmÈ´{~?*³g~ ¥°óùù¯t8|Gj?!î@$þÖö÷šÏ ¦´d§Ç¤£ gÝ;÷ùæüÜ3á77 l¼ëIHR’aáíú·w ƒ„ÖØÙ¤]ct¤÷ð8ïÙçªýùÞ~è÷ü÷Ùµ{C6Jà w¥}hì}Ú¯±ú·Œí}pì-èí?iŸ…{­)š‚¶›ã#Ô -÷P b‰GÁƒÀº‡½6›Œ_K‘îž{Õü쬼ýZÝhgKRµg·¢Ò­ D„ uE2!Ê4¶)Ö´ Ö’¼kuÔäš g6ëƒssp\ê@ëtÐÿä1Â48ï©ß^£FG(Q’ŸOiæs¢Ó'ôÎRæ_}‡ìÓ{ÚgñÍK\<"&èH®DüU¬VR<ð͂ٷcÒ‡',¾ùŽôé3’Ä2{q·)Tw@<êà—…Zέƒ5ysµr²ë ÎïŒ$±oÂù­“îÖÈ’je)ì½cm^Ä¡¼)™wŽõz]xw¯¼œÇÖŽþÇO錜Á´m,RiT¤Z‰±ö6¤eúÕ ªâu;çqág  ”Ä»öyû¤'THkxܱpí³u›(€D&’æêÓȵä’ÏÇU™u»±Ó„”’]ÌhrƒŒT×I{Œ>{ å„üõ5¦4ù¢˜8ŽIá«åUM|4ÀSŠë1ºsÂèãêë NwÐ:¸ÊX!ã˜êíkÆ_ž#ãx]H¸9áZ™›åÁ.F,Ö4xÙfLüÂëÖ„]*ˆ¢¬ŠWÌb E¶q‚+r|ÒcôË!¿düç—Èì„î}ªó·H;äÏ_@Ü'éXf/®‰»)Õ,GF :NIJça—ù×ß!Gɺ_”$Ç}hæo TGQ]/ˆOŽÕç726RÅ[ôzõ?çVÇ£]û[ï<*’!SÃ&2´·¶íÙýÓ{„PaíðlÁäË4FsïÛwU1ƒw¯]ô[{ú?¥{Ó”M`…|÷>ÃMØ[Ö0!%®¬¨ CÔÍVZç*ˆhÃpjã] ©PIŒ/ÆŒ¿x…1ï¤ø½žÑ;¾‡»ý÷íÃOÜg!&ÏQÃSFŸáêjÿØ;ïyUäïßþ¾cu‰âþ c{÷`±›-݇LþöùÆ~»¹D†Ú/·¹EÌøJª·—u‰G6¦rÛ_ëöðʽÛ0|c}ö+Ÿ ËQ.Í~êÜÏÎÊÛŒPIh+¬3BIÌbN=ÍQ`Ì< –„ ¤¥ºš"“>ñ ƹÊO­³+R­í×Y:^S®3AgƒÁ'°ã MãÀXD⼤Πt@¤¡/ˆŽŽéGL¾x‰ì§ÝÉЖ¸-UॊP]l¯èA—òâ’îÇG ³—x§ÐY„Á2ßãPò£¶ÿ¾}ïÿ@}ð!Ó}4À/¥Z¦¹÷ «~Op"îÆîÑD¾9Víï±ß~ßöÿà}‘ÂÌAÊnË…&!B†Z!c¤7ÕFüÓÞ¾u{ ¶Û*VmëÅBÝ÷ ï?jû”w@jêÄŽº†Ø2§ž—¨¤KÔ‰7¼ 6^‚rÁ„Fuˆ;ê¦RÛ­™ÀemÉŒrœ#´j):$'#¦5 ZÍf:ÅV'â ¨~¸ã©.æÈÁi*©ó)åeA4¶pøêj‚µ•õ霰ŔzVú4ó ÍÜÚ`ó:È­$âQ/Èám>gáCQªkDl)Év§ü4ÚÎäñ¾u\ÓrÍÝt:´5åÛ Žw+$ôVÐ}|ŠŠ,¦aÍûB„ñà\‹¤¯é*ŠçÆßDéVCÊ;lÓ´Ö beÿ.¤Rt7&™ÀÙÐ ÅÍÔþ 9;Õ«» €Ä̦ÁpElTË•†‚?pÔ“y8 ¦ “/poPƒÙ bñüdJÿÉØ‚z’‡ÚÐ^[Îhò©%BDDÇG$YL3½¤^âÑJƒó)—Vâ;›R^ÎB€±ç’í©dSªO,‹½Ù€»^°µÈÞ€ÎqJñâëå–¿÷>¤cFdÔ—T Gzve²YŒR–êzŠî h&—ˆì˜HåsM÷4£xýÕ‘Œ"Êóë`“*ln±ÂL&x“>b¦sêË+¬Hé?{@s}ISØ5øâ@&Á‚ÜÌs¬óè8ƒFÆÄGC„·{6”•Ó›kXÊíXÛú £ïVOß¶B ¼õas`w# rš+Ô8¢x{Aq]¬¹ë?éåˆÎãS¢Øaê¿Êüì ô[kŒßÏë‡ÚZÖè5Z%”¿Iíº1Ÿ—÷ 5Œ†Å« L#Þ-“öþúiF™±è~Ÿô¸7Íþhï!wGô6·¶¿©ý=¶w²V{ïéçÒçAê½ú¼ü‡lé{â—Íš6DÈ”â¶Õ´ß»fàºìy²ÿÍlB³hVøÁÒ¡Âɽ)•³}‹®D®%*ͺ­sÚ#åº4 ·AM¼?*¾mQ”K+ïtÐýàÙ0AeŠzœcj‹¯sLaqu—)Ù⤢x5Ev‡d']ÌlLq£â*UA·*©'3ªEŽî?àèóGTožSN-q¯‡)'4 O< ƒ-mèZ”¢Ý:©­;ï¬'v‰zQàŸ, ÝÜ†Ä {$ vO¢ûdr•ÅTç¼JHFñúT²RÿPϹþÓ·Ô>BÇú&ù|Ï‹pMƒ5’Ñ/?&ëJZ…½`TS”TW TÚ!9ÊÀ™mÎꦰû‘o)&®­§TãœfÑžˆ{ªUrXóȽ©©Æ%ñ°‡Ô~KBP,­Îl3ɃV¥–øÚ¬ÇŽزÀÔnC”Ý!H‚ý´óÙ¿£{'¤=I½˜cJ¯JôÙCºCÏÕï¿4CÈ”ãß|„»|ÃürŽP)ɨO3¿¤ÈH¥Ãöorš¼Bg½5·ŽhƆˆbª7/¹þëkD’.§ËZ´Œb”û´'ÖÙ€S½r›aôèŒþ£„ÉŸ¾Åùå‰8âÎYš¢¤ûìÇ¿|LþõL^ætŸ¾*qN“gA*ÐmðÓñëÊr!‚õ÷—ß0{[´è‚ÿéIïpuƒ“)G¿|F¹`8u—LÖ}Ö¤}Þ\°×…VB)lQPMŠpp•šä¨”WV•ô·H}Ñz©úŠë?}CÕH¤)I¡Ä-Ý÷ôOÙW5Äg>;ÁWÕ:{³£ï{Û{Þj¿¤ÿÜGÒCcõ{Ží-c”›}>(c÷OÑçíc9Ÿe$1‹‚zV¯ ñ÷¡ââOü^íoCÑÙ1_!ð|Ý-`ÉAì»=–±ã@¶- ¢‡2‡2ܯ½ˆ4frE~>AD++o?ðεÒ'k×1¢¸•ÎRTãkœ“$Ç#ìtº2zð¥Av:HíqUƒkl‹ty„Jˆ:‚âÍ%¨Œô¤C=žàŒD®Òÿråêã­AÈ=쎕®ChÙ"ž7"¿ËñØz_7O2~3U,Íx†Ð1ºmÈÁì¶H©ÊSgØÆß²Vzɨ”kl«†°v \iPK±çdyGvúdÓy_a‹9¾•vñõr²¾dòýSÌð§¿½ÃøOb6“&$yŠJÔº[Ô{Ð):Ï>BõÁ’“.:U-2vÌfÓo4Ñld ×ˆœ hÆ/¦d‘LÔ½•‡³IDÏÅ¿b1u±cûÏÑAÒçξÀˆ2rÙw%­ðeA=µ$£nT a§qòöÂî2ÑØÅ‚ÅÓsDÒÅô³µ–è¦%ªßéØßø}¢Ç×htW`'5Éé)"8„ ñmÃöBóËR^´ýViË#ÄK­LõdL³ðør¾{ŸÓß>¤|ò”êj­j\%é~|áæç3P)Ùìâ_¥˜®§ž’Q‚¯Lo€~¥§lúy¬Nø9]†§4¡™3ÿî%.|Uã\Ø× !.•·¦?v-'d i.R–²÷1áÓÒQ!\t-Òz:Á–\­“ø[ã’gÿô€ò›dŸ´¡ÎᛀîÐé<ÅŒf2C¤=Ì ‡°õtBð *O ¾À×qž©NÓmo„fA=«0ƒaTQW,^^!:ò¡ÂNËÖ.¼Öñ9å‚ò|Ž0)éÐÄØV³óZSÀô3¦ß|Ëå×oÐ|9=†UB8bÙìÞû¸¤EöN¹ó_>C5ÎùÕú¼µyÌÁõ¼F oc¤"dDüëq“óa¡Y7;¿…Á†h˺kÿåkÆÏfÑÚ^Ê}{ûëÐXqÍoú6ÏámŸÛûxη‰áÖãß_ ¾ªIï?âäËû„ª|w#¿A±·@cwÆßÚH庹ýcT–ßé¶F*?I̬¯·2R‰ k3-h ·-¡ºzÿc(ý>{ãø] Gà`%@(påWûmNöMÔØM–6~“Js„7½Y¤î Sï9>G”oÝü¹=^¦†úüóg—ˆd…@‹L®¬·¡qç M¢CY#ó$–tkнWD[åPÌãÅDëè(Ø yû¢ÄI†îh|m‘&ÁW¾ñ Û@_9  ¥i‚~m_žšö‚¼+z¾³áïnJÞm7ÔmýøQÆW èHØèó5¢è«ŠnkǢÞÀ·‚ç´ïÖ(›ç°èº€Ðĸe¢Öê#DzŸ¾Bà«¡Û!·ýÁáHf%v› ä²ù³M0&3B›Q%×›RˆöÕ+Qì%«à\›¨È•{¡Ð¬Ã5¶å¸*T7Á͸†ˆ†Ú»ˆH*J‚õ«îc!X5'ªN“Ø@¸~æñBìªfÚkˆ[!Ͳ¥+ø½snwð~•€DzƒZ›Ãl>«?pù¾rM» ÍGµBaãå9Æ?+J5ªDR_Ny'rÛ«LŠ´œZAãcã‘   ´¦7ªÍZ¼µj²•\Ê EšÀ²ñ!ׇÃRÐiÄ.¢xÌéoÊrýÜ~Ìs¾­©Hx‡³çº¹½uÞ0!9f¤r0†_P̈íôv1·ôÊi‰«‰B7íÃGÏç[îÛ‡dìÂŽÞ| ÞÙé8Ò¸VŽÈáˆ>½8bvò¡Æo"Ð;{ËuÍŸÁ#T“PïìI‡Ü'Ù‘Ü¿ @¦ Í›—Ìžž#’¤E …¨4¢ AÈxAqaUFEnkãð¥Sß‚SÞ‚heÁD‹,æ9Z ì¢FæiDk‹ZUê¨x bµT iôú²·Ae64z¥ ÔMœr{c[z¢§&Ê©íI¸DtÍ-ÊHñÙÉÐ&:ò…]Øúà+‘‰ÆÍçø Ñeóa¸>a]9 BípU0™ê$s{ürzh¨”±ÙiÉ׬Å[y­Ç¬w³oçb#§[A¬»‚}hxÑZdn ’ënÙõÅ2r„Û‹®Ô( ®´í>«RI|eñ!jdÇÍÉpŸéýZ¯:8À[d·O2HñóØlˆTËþ¾u‰+ÌÅ×R¾Ç4`—úàÏð`žb5COXÉÆÿæýšû¶üýV²ˆ[ï¿F=¥ÔéZPRñ÷Œ–ça›ŠÞÎÍå. “„]›ò©_·ì³ÚßZŽ/Ë‹21­N¸¿VvãÔñµã«[Ô;h©¸õ×?ŠÉø€Ì¢ÔÛj=ßH»Ýú|§˜[Þ¤4·˜cç÷FsïajŸx‹ß´Ý;ª:î§2Bîâmµÿþ÷hÌ" ïnAá|»çüãæê{žÛï4þ×s< ¤ÑщviðqÓ¾ú¶zâï°o )b_N`GÆî?ÂB:ô›,å¨ÞVÿHò K´$ÆŸ= 4ª›³xò-ó KÚMQéÙ?½¢|s‰--Ö[„ÌIûú_žP>yN13d#ƒîõvÌìEEï“`~Áø»§X¡ÑÆ \DÅL_ኾŠÒg2ëE»Æng&­ýåö„ÝP ð~/«! RÎԟǾzÆÕWÏpÚ`tÎâ‚ÖÐEEþqT¥p³͸¤™\2¿XœÝ£w¯KÚÓÌŸ¿bñªÀÕ>’Áé kÑÚ¥–@CõfŠ q‹ 2é#MC°ÕÏÐI|†R+¨'œÿë74>!öªù ½ž2m£ªÊI[t8Öm½S*:¤)I}qI]ÒQ¶¢²„¥yõ’_­å›12’ôTl4•놿l˜°øþ ³7W †ÜýÃcæO¾fò¼¢ûð&uØÅ²äVÌ¡øYžàÉé Úl î[ï°k²§m*_ÇíCÀtRt®×ê.Þ­e×sõÝçö2Á"­ËéÊ„(€5ÿþ e!bõn·$»! OÊéï?'Í<Þ‹µFµoU6nXÏÛèÓ±~LÌ­îhÕ`K\G禣׫ÍäB2´9¼‡mŽ,i8±úä'ç¼ùã·x™E“…·q_=jk} ýÀã¹&)ïqü{ˆÁW5ÉýGœ|qoÍ>¦H±7÷<çÛÎÕƒgÜÕ;·¹A…ãösõçyç\8óJ%«í9‚fÑDÀCP¤8´ïrå[îÛbmõì¿vÙßsy…­6,­—gÝ­9Ê;—Ê>~7 ‡ÿÿ­FÎ  Wȼ•:¬Ç=u–-[øH'nÎ_3¾Éb ÒŒdFEмuISÚèä&7Œ"pÑòZ´ J“œ$Ô“9¶èD »1{¶Ó:r/Ã55Î{„Pd¼Äè@mWûòá qoe»4eÓäÞœG÷:¨Lâí¶e@p;¯bcŸkÉó-÷Så*3íý¼½>ßòS7.I­ z½täÛÈVÃîäXm¬“‚ªŽzÊIŠég±‘Ðmh>îTÐr…f†eùysý(…›/°¥G¹uDT? Žß†W¶ÖC^Æ»÷mU„A' !ÁUx©Iº9v<Á9°däh!‘ \U£û#:wº4“)vjÚÓT瘎AÝŠ¡×xR ¤JZýïµL\°±Poj„0Hí>QHHÈØm Šó)¨)cÒ‚Òm.f¤¾m,B!`£dmj̱0J4ÊÈ"öËqW»ˆ0jÖüài‚N4ÍxLÓ4 2òÓÍôŠº˜,‰r„NîˆÊoPq–%¹ÝMöÖÜ>Ûæî„ëk‡êæ˜LoTovÖ¡ËáµæWLn0´8Ê‹ ÖâÀ-eWT‘QÒ·É û¥ÃkÖóãßGÌJ¶Ö¿iLì·PÑxGx·õh¹&†½ÃäºñBê‚â|B¥[nüßâÿg=²›“ôó Žóâ¶Ïù¶sõº³êƹ}Íú¼nü‘­õW3wÝZít±¡Üõ¡yâ(ÇÎ/!ö!ï£ð¿zkÑx‰=YKšVØQ^»¡œÑRo}³©Â! ¨”Îý{t ª«˜~ó„â²aðù'„êŠÉw/A+d÷ŒÓ/N˜üù+j«b™º‘äwÏ ûtŒ°W¯ó‚`R”6H™ ûé"`Ë9¾«Ë+Î!óÉI?"л«ØÎN"ºzA=d÷N[îjØÊƒs%[d,le"®\Eùf‚¢SÙ6Œ TªÖc‹HG! 3-e@ \/^:ÑȤ5bÙ³ [®CÎE®Še:o£®ÊT¼L!¶8>¢½üÙ…[­c©–à E’F\ˆï+£D˜/¦To.I—ìô±Ò»¾ÓÞêXׄÐÈ$Cd:æœOP'wèÝK™ÿ0&ÿè.öÕ9Ƀ»$½ˆHξ}—9ÔÔ.çäˇÏŸâéŠ×Wt>yL’{Æ}Aþø#c.þö•%HÑr˜ƒÇ9‹îéÞ=E(ðMMñú "é#E«L_Ò\NpÖÅêI?¥<µ$Û”"”ÉÃGtO5ã??A(T0˜á©6u¹¬Ç#Sl‘èë¡×¼ äF„rA9±È$^\|eÛDÏ"LÓíBI3™®\©¼õȬ‹5®hVMškEÝ¥o¹ÏbÞD%n¨Lìß@áUí¶ƒc£Æ©’h¾v5]·®‰WG9D±·>ßv= ˜i›³CÀ–n¯4ÑIlWá°ñ[ÆàH2 Â\þõ;êzGò({MMù:ŽòO2þÈk~ôø÷ƒ¯’;w||‡°iå}ÓsþPsõ½ÍíçùVÞ?S ׎g>få½~-ÁFìVÆûÚ‡‡=Žƒb ›Uq­ñ³+ª‹Öé”#â ×ñ‡ŠñË×l)up‹Ï4Çö%¦鳫Jæ5 ׂ¨}uIùfSZ0Z!eB:ìb ÅË×4%¤ý®(hŠïAõOèßï0ýÛ÷x#°x+Ȥn°¥ 9 ìŒé¨^)® $ƒR¸ÈßôMk3­f#ÿt£ m…‚ù¢‹Fû;B­ãZõº¤ƒo]ë€&À5T—‹ˆâúØX¶\ º›c†9~¾ ºZÄÕ†dÔA8Û:Ùšé‚fÚ`FÑF:R8v7V×°¼×È5²äË’zR´ñ¿›Q%à-„D‰¯*êñ¢•;n¿Ó’{º’Ç‹Bív¾Ô‘wî£Î±²Õƒõû¿«XªMØ}½ä°TaaP™WSçˆn|˜Q¿žZ~|r6"ÉÍ¢µGáêäzg}ª7¯ð!E'‚r2'¿ÑÌ™¿œ“?~€òS®¾?GhƒN2”WVXH}´„V…ÅÛ 0 ¼Õè4&$ÁZ)&×4‹)MPÚDÓ© nÐggä=ÉüÉ9H‰³©³(Ûì6'ùÜ8!äöx±éjò’ú¼'9íÊ [Xbž°æÇ×h¤Ò 𖯲|o‰P!"Ç}{êBªíL];÷Ãál[\ºo4øºT©MIÇCÍ7 GÆ<¸FzˆƒVõ{ï}ÌÊ÷½Œ1·#an^POЏߙ”tØÙ[üP1 „¯™>}Ec%&5±þ~þ h)p‹ÕÑ{4"4Í‘¹ôK›ÛÜî}l}½@ÿÊb^R —Å_ï¨/çø ö‘ç÷¼¿·ñ˦ovîZ„ã—Û›bx¯ãÄp#§üØg„жc>òÖ÷¶(ã*”\_ ‘ºµ©ø ¨ÏÇÔ“²ÛCjÖ :Šæü OýöÅßa]‡á§wX<Š3'd©¥¸,IïÞ%I*&_?Å'C†ŸžP|ÿ oèDÝ/B«=<à :5íÅÍ·öÂ#$~ì½p›Ž©.gÈnŸtÔg×hßÇ*^’ã–¼ü$±RWTx ¾²ˆ¬ƒÔ7/QýéI´÷έ/°‹‘%è$êSG]ÇͬpyÁ€`CDŒŒØ°çn/ù^àË)õ¤&¹s/é>Ú ÝZ~‡Xnv“K\-H‹r8RF-ÇõÄXÚq³^ÔBlAu~E@Då‡ÓÔhõ›^ÍÚl˜»´ “Y¾²JÐL®h ÖÑé‘ ó—t?"Ìg4µ#4QŽÎÖ õÅ‹Ëø[šÒXÊË9ÉÙ]’ŽÂÍkH$v|‰- ûÑ}²»}êWϘ½©èù)ÊM™?½B OÁ.°E“…n"b›ôåóWxÝ¥÷hÀüÛï±d˜eêJQ$òá½f 2íÑ{ØcñÃêRa=”‰Õq°O$ì4e\U² ðï%! ²ŒÐÓ––®R.­š+|½iڲ乮9w+’DÛ¬(Ó¡\´P)éÉá›V|Ç5oãð{ܲ ˆ-T ìh‰Æ÷Z€ +Kù}ÜçPgö^‡ùáréÝy»³ûú´ÃŒYÄý!ØÐV“–J¿îÑøà1Gs$Jf?<§œ4íw¸¦ìù®fjüÑŠï 1¼íøƒ¯ÒûèÝïÑ̊×¾cÏy-}s›}>ðO¾žÃ„ûçŠùx ËÇå›å…¬íyì8 ßb>6þÐ>¼i#ŽÛ‘‡ƒ1ï~Æfò ÀUTW+)ÛëÝ9¯I”~–ñ׿&ž¡¡Ò(•ìÃÞ™¾¾o·¿‹RøùŒfº¥6(:côÅc²® ž.˜={ƒ-! À/pM‚éÊ×—øtÀÉ—w™ýíoØÐãôw)_>¥¬ yWQÏ,ÉÙ IÖpù§o 3N>;¡øæ>í£“6«aqÅ,ºßåɪTШVA`7;"–î]U•%[®{»™m°5è‘ä‚òÕ8J´-%û_:Dš£tE3«‘Ygƒß,Húi´KvK±´¦º]’AÚ6M…UãÁQ]α5¤'½-”.f2E+Ã×àë€Ì3„xçIF=L/Eh&3êYCtû‹\d| I:ê"•_I”I­hfÍ´ÚpkWãª&–’‚D&iˇnž„¦Â-u`ƒÚJ ©S¤‰M[BkÜbLµ°È½!Ý‘düÍ¿ýœ0â¼Ã7¶h¨ç%ÝO“÷ó§WñÂ/2”q—3Tg@’¶‰*`‹hKž?|@÷£!åwß0ym9ý¯¿CV—,^ŒñdˆÐ€‚fZ ò*”4¥ åq’‡”áç§Lÿò5µÓèÄ 7Û&õË9d>¤ÿQ—Ù×?ÐØ”tÐC&´\󰃔ì.Ψ%îmÕºNŠ}ν@KmZJÌò¿·å#% ¡‰úàÜÀ_Û´/UB6QÎ.´•¥Á>¨p&Ç »xɰ‹NÅo½Ù­Èpä€c]R=vXÉKë^9óÈáöc¾Ó‡CÌB+šÉ<ÒÍðˆ$M©ÖýÄ1 T*˜|ó„ùU…ÉÓ„ë«1‡œ_æøÛ¾æmÇ¿Ýwò•%½w—Þƒa«²~%s›TŽ[¬çC2v›1o%2¿ ˜·¨4¬š‘’PT—kúH“ß¡}õ˜DÛ{Ù·$ùN«3ËâÊx?Z¯£å†7Uzü¡ ÑmÎÏ–¹ªº_sIFá¦cŠ‹Bë #®|€PyòîC3¥š6˜AŸPÏ !%å4çX§ÐR6”ã)Rà]À ûYS¼š¡óˆ\ ÄKZˆ›¿ojpKù:eɶÌ?ÂA£€Ò¤€Cè3èšš};¶%šê ×€î¤kƒ,ÍÕd¥sìÅ[GÒ‘œõpóÍd†o„ÉIF]šósœ$£atQô!N*)Ö¶Úží2¼ð ÙæYBDŠ]X™VçVf,"‰U‘v1$&ƒó®˜Q¿µ’Ü\o¨û®“Xü‘4Ô—1^™h¼­£øê-ZÃï:%u°ó¢ÕÆöØiL3ð ¾ñQ"Ðņ·ôt©'uAu1ÅYEv÷¿Ó,,ª“E½èºF$BXêiλ¤Ã[–8K´.*ô`vN]:÷ÏÍ”ùË „JñÖGŠH&¨®¢õ¸À¡ûC²Óõå%åÅ<Ê Znç‹÷>RXŽ ÆûVíeØ,¨É°égïòÜ~Ñs›ëiVï:Wö˜å@ØòÞa_}oãÜ&ßé3"­VHO3žâ< xß¶Ù?zü-^ÓJ°"£yV8bN%6ÔPBÝà«ä’Â!åÀt;ñ€àéSÜü:tN»ØÙIìx‚ :í Ïâõk\#Ɇ=„„äÎ=´˜pñ×è¬hÒa!|‹<{¼- –=é‘£ÙF;±ƒe: *‚•¨4j͆‚Ü[A·ÝÒ¨xþ‹Ïñ¤TTã1>hŸ}LÒW”/§¸jAŠîÜl‚Ýï£Z-bÕYÊJ¯Êh¶¡4Á6m3c vеŒP_•m¶ªV±ÇCI ”§™ÎAç˜Ü€R¸ùßHô°=H7,UƒowmOÃRvOƒ«hfS)*Kn¯£™B+¬Ü¾$J v )Ÿ¿ÁƒJ<Å«Ktw„4å« ôºCÎ~ÿ1Â6Ñ0ò‚¦2äwF”/)§Žüô •Ô4“•õ‘Ú²xýaFœþîv|IµÈÖ2\ N‘~N=ô>{„fÊÕ_ž¡:9Õ¬$½sŸÁƒœÅËWÌ_èT“Ý¿G÷ã3šWϸøÓ“µößÔxï¢ú‹Ø4RaÍ놼àf8Š&>ÖoÍËí t“B/gö{D€ &C&×øF¬-ªIý´öÜKúÇæû @$ºÓ‰tÛLÚäî %ì%ãxƒÏÎwñ‚dÔEiß& ?ACÝMèðê>h£ÕÆXÖØÅ‚ò|ŠÐY¤é$Úx{Ç­šËÞẄÖÄ&aúÕ7ŒŸÏ1Ýd§Qçïô;')°Ó‚üÑGœ|y¯¥c…¿7þâšwŒT´ÂÎ êi½ªøŠ=ºÇ)»ÖÜ»ã¹ÆÊ{ëlØ¿›ÈlQÈ ^;„ôØÙŒ ôºr}íÙv(©zãwÑ52v×Þ%7ç¡÷ TbÖ}w»9ÆRÆ.14—o˜¿¼Úh"„ÁºDåÑT–"$Øy0¦ßÍeÖµ¥µ¯n9rÁ9šYA¨-jÐEi‰ÌAk„VëÚ;k[f–òxCÆÑ$D~n°øÊ!³´œ÷×föKº„+m,“[»¡n/¯BÅ Ä"O‘Áa«€î$ØYHLD[•"Ø_[Db iÉ ¾œãJ‹ôWäÂè–wÓ6>*Ep¡ý.ËÃÎFi¼ ×_££Zc‘i‘ÑrÃ<¦Eðu–î7ø´(V¨+ìl2> ˆöé¤m‘ƒscâÏ\7Ñ‹ciŽb‚‹¾˜ÑÌmlëdí¦âÚÿã°Óè¡À.Š(u¨®nPY3ÈpóͬBå9B |ð„: : J \UÑÌK„Ôeñ¤NÚÉ#•ÂUf4 T5 ®A¤Që¹H­w:£ã<åZ•ÄýÚ±y1ÚЛø<ÂáRÏVözÛdyélÉ2‰q+WÇÃk!l@÷ºQnÑoŠœK‚«i¦ó•qJpımµdZnÊ><Ê';°P[ÙÄ=Ƕ£4Ñ%Üki¢?õø›b8ÒDô®1›§£’‰ÛA¼âeU´¦Vv6'…Î[·ÒMÅ•Ÿ!f© ¾\ÐÌëÿx ?úìºÛAutl ~Û¹ý£æê{žÛ?ÕzþIcŽûëJ`£º¬‹{¿àöZ{ûð-ÇsËϸ2Û±$1-begë#¶ß¿4`úV¯‰w?Ô²zp‹„x ÖLÄÿü—£ÔÀôº$»XPÏ<'ÿüZΘ|7Æ FèN©HF9J·!IB=ž2ýþ9®ôô¿üm\þë÷ˆÎ Ù¨×^:\YD§4¹#YrHÖd§I!ø€Ê{Yaç2ï“ :-ë×—t¢ÌÝ2SŠYân!‘YÀÍ‹,ÓCP“£ºŠòÅ+ÌGtïÀüy‰R ‹WÙý;× L :¿ œX²w0Ê‚ê`ziKÁP„jJ=®0§£ˆÐ.­G÷s²³Í|A}¹@¨(±'ÑP_ Rãë&6ØÝ½Cš{š¹Eå}¤ª[tbÙL¤QYŽî˜ ˆm¹œPÍ©¯¦‘û½J/52ë"Ó€/¸2J¾!Jª—4u éÞý!c\£IïžP_¾¡žZú¿ù”ld(^NIFÒ3”¯_Q]T¨þ8fÏŸc­ÆR’ô‡äÝEÖ—\üñÌé=”Q+¹A©ù£?|ÍøYIÖïÄFĺcH;nQ¡»¡þ—(ž>£ir”)Iî|„‘c^ýïïYt–#¼%xErr‚N¶¥õæ‚: ó#5Tã+ê‰%ŽZc”VIÃo#Ы¹}K·blÍq…ÌZawÞøÒí ¾µ…+T\G˜¥qÉÆZ MA}5!HÕVœÄŒF+™Æ]ÿm¨H‡Y”¼cÓþ–}[Û ´w¥*ضÀl5Ónš lÛTïÛZoÙSï¬ÿØÄ*Çö›ŽÄ&gzã;¿Ô}?C8ܰóŽ1/õ›…‹j:­µk°!%ͬÂÖ ;Šúü/;¤'„'=ÿóÄŒ@õsæß~ÃÅWoÐÝ|¿„þw+ïÛÇÐV“쬢ÿÛ/9ýüNtƒäºçöÏy£ÇåmžóÞú|—õ¼Ú'_ˆ÷×óÏ3G¬¼YõfU— œÛæBR®É-{qng6š×6nô¿‡po˜»øC(÷FÌ›vçG p$RêÉÎÊV4ÊÁYº=êê¿Y)ÞZs·½KnW„ÎQ‰ŽáÈÖ>3™šóW;VÞ0ˆ²ZÙêäŠÄlÀ×5Ò$MDÆ”B¥IË÷\?4ß´Òg0ÑÁ.Ô–°kw,äÚŸü­èúIÖ-7º¥¬P?!#M4Åpe…o|;'âkW%lÕ6¬-³F ò4 Aʈ¨×uDœƒà›fýÛÓf¡5]s1{­l™NÑy²æ±±¾ È<o£µÚxðÞáʺ•š m²ùÆÁ‹6ÓmV†«É-UÜ÷þZÂ|4ÕØI¹— ›J¶ïÑda¢‹Ÿ/«ø9­!Gh9êR´ˆºk¿sÍ\Y#’$Jëµ%èÈw×Òd´…w٢ྪ…êDk_5,Ý„‚ßIåiüÌ¢ŒÿœEZ…«šèL—°W[„–©VÏ j¦‡VÑå-m<7_ÓnFB¶í¢[RHï2·wÊìK­Ð¥õv[­QYº]zÛ£p¬O§­gÝR8VHp-ï~c]Iqw WÂuhÌ5œ²ÝØJ4…ýòÚñ‡.%áÈ­æ@ ׎‡-‰“½ÞoÌÑF7¢þ*O Mƒ+d'GÊ@3ãÊ è^!<ÍxŽìvH†½VuhÃàIüt1 )ðÖÅ5z“EüßÿnXû>Vh‰þR«ý‹Îmæöæ%á½Íí]ŠØ{^Ïo5W?pÌA€R¬ *Ûûj Þ\Yá‹w{?àøë²½wüŒ稯ëxÆ q=Ê{ õý%ù«ÀZ^XÊLü6öÀøñ?ÿ%ZyËL£’§ÿðâÙsª2!éD«iÕ퓞ö1U"Š1çü–Æ›5¨©¢¾°0‰j/§¡;d+{dW.N\³éÈ”¼@å]®ô{2! ÛïÍÕ%Må×Yh¼"d†Ês‚/p‹9ø¡SºŸÐ¼z3´Y0þëkÒ{èz?}Íôû½Oϸø×¯èýþ·pù’ËƘ~NÚÉð!€w‘¡ú9:5°,íHÕ&<Ñ•¨zý† :dw«Æ³Ð,¨/Æø¥N³$wî l>âÇÏ?­ÉÏrêËY¬ƒÎ5®li{M»œ²}Ž^ ³.ªc°³1Õ› úäùP1ùæ;ôà.IžE††z<¦™5¨<ô &‰ºƒN¡<Ÿ¢ºCŸ­8ÿ·¯ÝSîü—Ï©Ÿ}Åø•ãìŸî3ÿöœî§p“ Õ¤Fv’,!½ßcúç¿1½ôti®&È´G2"š)Åë9ÝÏc’˜à”¯®½Ì_ñúßž!S9}Èég}.þ׿ãu%<ÞI’“L.·/ŸK¾s8"yÓJº ­p‹)Å«KDÖ§sÿ l³¶—W-ÖÜ~±³‰]÷–®sU½þM‹Ô ™’ŒFH¢ù6‡p“ð7D<*O1½¤M†ÂIwnyµÛGŸ·ø€G$ 6‘›½ñ‡«›»öwºËo¥ÂöùŒ{|àw‰áýÆ,¤À{K3©£jK3§º*IÎ΢æy]âê‚ú¢$}ôÑ\1}>¦óðI7‹ë IÒKj¹yþD1#P½œòÙœÿùELôol;p@ÿ§ç@ìÂ2úýo<ì`+·vòÜåÝÞ4·Ô\ý©ÖóÎoy“ Çјa£¼kÁ¼[Úm:ÜýšE+\,çïHÀ-ÇŠ½ïþ–ûðu2“»1ìò²Y; qÀÆûÀø-÷n³åÆÌ°mÙ. _bK×&{·¸c¼í±ï y¬™szsÝy{¬ÑÚ#Táàê÷/ÁW™&Ôo^2ßC E¡I|YâkÊãmÔ2”Y›àKp;+¢Æ¬ØáR¶æ«² j­‘¼ÖÖ¹[Û‹ˆ–áx¢ÑYL¶” –àÃ&TŠHià@¦)$Dz»/0ý¬E 5ø[:Tž ÓéêyîfØÉ}Òƒ²¢^T R´¼XèhÉÝ~—è h·U9´ˆ¥~¿-,TÛ(Ù–L2&Fý_–QÍ"ÑxëÐiË•ku&£ÖõÚÚTÈ¥²‡¿º´øöñ=——xbÉ"ZÊ ¤Ž¦%®­Óž‹rƒJà­]ñ²}ãQÚ û)¡®iŠ’à$É  ¾¢©i/Ã-jdnp‹ï¡©Q½.:5ØÅgJy¼—Ñd¤±ñiJéæ(ÑS7¯ 5`kªÉ¤@¦I®©¯f¥[ ÕÚ‚ûƒ”·AŒ¾q!Q&AÊ€÷>>OZ ó Þ•‹R:!´l¡zIÅ?˜´•¥ Ý1­N¸Y_׿õÈxqèBØ–·bg_=r1‡Ç¯^qÿn¢tS ;1‹áGÅÜ6ÛyÝdit¬Ø€4Š€ÅUí~hhÎ6*[me"'~CßþÃÇ,”Šr“³&6>‹¿}¿}Y+î·º×Å$j ¦¾Ës{ÏÏùðú|ûõ|óú·Ž9~}µ®Üîßm¨»MÌ-l nQâ–üÞ_ ü®ô{þŒ@Û³ããÜâ?ÐzBÕ´–œ÷å,B\k^¶iåÉ9ýýçhYqõÕª¹§sçBUÙ!æøÚEmb;ãò¯O°^·%›»´A±nªó.ò7mõ6 !¶9&’`ø¢>€ JTÖE¦W.ðµk9Gaﲦ®ˆ#™OhM,T–ƒ­™Êõ¬De i¯‹[̱"#ÉÅeA÷£éŒeqµaHòdËCm,"íŸ ÍœÅËK,jÝ ØòUqQ9B§IDûÚË›w‡íÙ„T+*,‘Z±ÃS1ó”ìÊ|û—-jÚ¢—ôÐv‘"6ájÙ^ÑÝËÛ[9„Qhcpe‰@SZÒÑ I/.IŠ/æ¸õr¤ö¸Æâ­BšÐr]lN9òr#ªµfÞ”³j›¥B*…P[•Ø¢ÁœŽH´ÄyTêÍçºÓE)Þ¶(h³% "’ã7.Š¿RÖÞ\ÈÈit¬\Æï:Ë1½¨ªÑL laIïô¡)q!EŠ‚âÍ‚dÐkå#Ôn«ï2hò‡'„zÂüÕ¢•txßÊ ÊÈŸ*:›QlI³[â¼Át$…éçq²ã©.'ñ‚¾ñŒ·4žrÞ[@aÒ ¡<Þ…·ìœÞœr"rÙë€JS„¨ãû!×*x×r»®³F  Búô’ƒ%eŽ—Ñ„Æ!;9I/i¿'K”‡KbÏ¡MûÐ÷9Ô˜q †pà»,r¤ø1üÜ1¸†úªˆÈ´uH©cån)iˆ‹yðR+?šdÒŒgÈnÈ óÃÇ,µÂN',^Á¤(£[ àï75]Óà­ ¿wŠÉäÊ`ë½ÏíÛÎÕ5·¯YŸ×­ç]tø†˜cãm‰-› õ—p qóyݾz/ömöáwíoô3ƼY|«³í}Œß¥pÜö3Žq¶=„M“‹«BxçÚ — gRFp®± ÅDüÏùýÓ ¿¸Ãü«'ølÈè‹Sêׯ(.!{0Äd•jÜä yJБã+6Ê'®lè}þ ‰.©«“T\ýí9*ë€4$ÃÞêò¶ìüZҌǟ`F‡¯ðe l.Ö®XÇRçîE8¾¦€`y©<®*¢ös™u²‰êbYj×­,œ¥O ^áëŠôÑCŒ¶ÑˆCGS‰§œÌ2Á$ [8†¿ÿ 7}ÉøÉÀ OHzŠæjJ Éh¾Ä-­mùÖM.¢ÕÊbRåÈ•_C=™¬Œaï0½!ØAv|~ŸP\Q¾©Hïv˜}û Ù"B¹·è¦˜'„z[Ôñ¡¯8kÝ1ÔWSdÞGçª5ÈSørF3)Û¯è@œSô>zÕ”fQ¡;]ê«Kd~J÷£n^c§,.ƨl@2ècº)RÌ añì&OæäwîF‡@kã3t%¾òÈ,'øŠz2Eª(Ë&;=„(ñu@‡H{䆄ºj“ÇìÉKšjÃð‰“©¶Ët›Z–-¥Ç7‘׿æsК{kó‡è ¡* >*iM¢*Ù°#€³ˆ¤Kz:Œ<ë UáÞ…pxóSF"h“†Ü»´gýØãÄq:4þbu„{w#Í>ÇíZ·6nóM1|à˜[ —«¢æjùêÙ‘tÌJ=EÉ-DÉQ!写ÎOs €¨<ÅO/¸úê^¤kòÈE Üò’ý¡ÇêÚ¯ã|§à *côåcŒ¶ØÊÆv!¹‹Š…_ÀÜÞ¬`}€õ¼‹ÈÞ´'µ\¿Ú_—Ї“q@qa­£|8iG¬¼î«o»oߎùÖã?TÌ»Ïíšï$¶ôÚíø–gÛÛž…?jü-^ÂdÈTÃR]ki#@hA3` «Þáš&R …XÊØ™A6ê`§"Íé<ìP½¹ žIL.Ý>Ý#ìå&߽īdc—h_ZºŸ~D¢j—aLÉäÛ7È4!8EÒÍ£#ßFÒ(l1ÃÕš¤Ÿ¶Ò2M¼dmX^B„ y‚®‰\¥èpØàÊ!Ò¨"Þ×øÆ¼ˆÂ2ºç­TÔ!-¶¬ð^âëÕï‘f ׸–µ¯ë²Bè´åû úŸ?ÀMß0y1ïÑÝ!Ù Á®Q˜^|‰·Mëz¸Ôvø¢:"Œ®‰ÿ–Û,ÀÎæx'ñ®ÆÖ–ttŠô ŸßÁ]½¡¸ t (~xM0&•æHpuÙrgãe<î<iͼ@š.º£[÷B« |ÀYê¢B$Pd£Q,'—ˆWÍADWÊàÀWsÊù• H:¦µ&‡ôî€æê ÅÄ“v»¨TG¤8B¨ð¶}6ÂÒÌç UDÞL ¸*V.TÞ%¿7Šb „h˜~ÿ‚ªjsƒ6#J·h¿¢ÅJÀv¦<è¬Ó&GÚ×7„Íf»Ô¸ažL;Ç,Þ5­•÷‘šï-Ü V®”Ȩd²«s~!ºF8Þyô ‹é–ÊsûeÀ][ÛƒñCß,Án™ìP=vÍ]öšc~ÆÞ9æeû¦£¾\àƒÇ[‡PIä7 A°™å$Ã,ºþ‚bRáçWL¾È»H±ƒNýgo"\‹jèŒÁ'0Òâñ¹ÍáKî¯in‡pTtk챘·>C"ŒÄÎØy•£ö”4ÂqÔVˆ·¿{ù:jÈqË}Xrþ»ÅøÍÏxŸ1zÿC޳»—ú¶ÒÂO즸«þÖî‹bg:„Ö=:‰àìr¿[,°Uh¹÷oWªkñ?ÿû?z {9•¸Ê£'$Ý„@Ô5öóK¦Ï.&C%m™®…ð¥\ËÃykñ„l›•e0Ýß4[åE©Íd†0Lßà+»ñ—?ŒÃN dÞA™u3™ Ò݇C|YS]œS/ÉÉ?·wبº]T¦Z}?¹óü|ëή¨> •Â7Uäz‡œÐ½;B´¿ME}5ÆÖ‘Žš@rvFv§‹N)/'ñ‚§–â ù†àzÀ·VÍIJp ¾‘¨ láÈï ¨^¾†$CJi•*šÉ2’ $å¸&éönÊìÙÐ]L7[•´„Øé„ ºßA¶Ä7±”i2R«hÏ9c‹Ýë£44“)¢;¤÷ Oýò >HlQ‚&»w‚Î%B|]Q¼¾BÈxùÇZBhNc†”ñˆTQŸO©'ª“ÅĦlÚLyy©ÚÃRD+—èf3dgH:ÌXGøù”Ù“7xe¢­1¹½."}¤å±yP º—·ô¶\…‚wxvúKvøªŠIHËUÝÜ”D›EXÄë¸n"M•艒†"둎¢Mý–\Þ.j°ó¦{ÈD{p6бI=ØutmîÁŸklpv)F”ßzü-bxט¯ýNï)fÚêÀÒ©t5ßÖï µØÑ¼ý¥Äé$ІÙÓ׸°¤öÝ su«ô}Ž¿E™øú¹wúNÁZToH÷Ñ)Â6„àpµm·“÷4·yËyqÛ¹zýñëó]cŽ”ËnØó6›ÐÂî³¾n_ ße~—ñG(?kÌZáfšYu@÷†³íPÖy­\Ý5ççÛŽßü "I‘+ýçpà@+°ÐÞe¥À×nZDÊlD ÿqŒÊû¨ø`Z7*8$§ChÆ\}ý ™¤;1´ÖÈ"‚¬a;“ Þ!DJ2è¶|aUöêÉD‡¤o"§d÷‹‹†jR¢;t;eËׯ!1úÝ}ütÎüû(æÝâg<¡À-,f0$éi¼ñ‚é[ÝÔÕB:êé ×´®B®ÁyÎ!»º÷ïbtC}Y€¸jA³hPYН-ªÓÇt$® j|QãC&]”Ñ |4yo«–ë-INp \“`2OyY’Ž:ÔWÈnm  AyÜ|†¹û€¬#˜¿¸Âœž‘&5—þ§Gt=„ íoæ©g39é0‹îˆ¶À;)“KjhfSê¹'‰¥xözgœþî.å·Oq(êÉ™tè}t‡¤Ÿ€Ñ4c¯/‘I¡|¹¤ŠH¤NIÏú¤CÍì»çLŸÌHF’¾ÀKÑvò¶ÿRgˆÄãË’ RÒÓ>I?nrÎå_ŸA‹pm.– sm„Ò(e®Aˆ¤{~ß¡ö›W¶šŒþ¦Â;±}Ðí54C©\‹4lpÿ¥‰&3>µµ¿–ΰ¹”œÇ »$Ý$rÏ7ƇÝfÂCSöU8ŽŒ×Xù†ëÞ7†•IÀ¾•·8s8bå-ŽXßÃn×þ‘Þ[Ì@p õå ÊèÖ~=‚óèN‡d˜F;ùÍü/$f©Å„«¿<Á%¨óŸù-£)Ž·ŽÐXôé]N~óQ­9m¸ýÜþžóá¹úcÖ3{VÞ[’™7۬XÏÔ³&‚áÄ÷Pbò¶ã¢âï¾¿Óø=Tÿ]bx¿1 Etvvñ™°)qÓÙ¶wÞ¾íøõyô¼Ý9Ÿ7L¿â¿H“!\ƒ¾ß¯–´V8[R½žàª”Zªp0ˆT¯Jtž#³h¬!ƒ/JšÉbe¨±®noK|ìÖÉ…N"5¡i6 ñh¬GjM„Aef[†nù~Îâê:– œ'IO3šY‰­¦ÓAipU…o,¶(pM ¿7Â/fÔ•@©€]TÈ$Ü`»äC‹ ב_ÂFLDôO²;gPΩÇsP±¹Çµˆz°Ó Gùf†ê HzšêõDE )Z:À2´@°_•‘߀µ£h.'Ôó3êcRÚàæS¼3(í)/.!ÉQ­Ÿ·mƒf™E»ïPÕøÆA’D黪AféÚ†ºMR"zÜ`‹Š`ztJÒ,ž½&HƒPšÎÝõÕ^&à\Ñ`F#”ö4W„ÉA Üb 2Uø¦Æ×Ñú<; „§ºœ#”ŽöÝU&%ôÞ­‹d[)Á¤\#¨B#°Tc|Ûœ¹D“÷.y¾{éæÜ;X_=’ÖzB›„¸ESàûþ󑤘^­½zŽ!„Ãٷвߛ{E¸¡,&}Àqààw GËh77Ô¼íøÛÄð1_ûÞWÌ¢UÑqÔW3T¯2m‰Å{бù8ì!Ê¿ ˜‘(ö|ÿ3þë0ƒÉ0kÍnnÏ¢›_øÜþëó]b^ÞttmýR¯Ýó®Ù#ßå5¿öñïó3"¨ñ‹9ܻͬþÂVbõ’äò휭טGU‘A ŒZ[yÿùDZÐù ÷ñ#dXÐÌJ²{÷Ȇ¦UÓ2T/Ÿsñ×çDEûƒk…Öf_˱ýçèjØ%uZjûÃkO=GN‰çQù€d¬²„‘›šz<¥)0Qò2øtDýfB9-PY†ð±™ÆW WT³Àÿú%azI9ט̲x›Üò»#|5¡ºœP›ü2C—gqM…«jôÉ}Îþá#šÏ©f‘t+µ¤¼šÐ4‰bðå3ãüOòè3Fgœÿ¯?ceŠÖÙhˆL ¸3BÆŽârFùâ >?áîÿûKd9¥šÌ©.&Wæô£Ïî@¨™}ó’JVL¾&‰º±­º@"ФwO¡™P]ÕáI—´'i&–ôtÔV6³zA3ÓÌ¡©ÃSòždòÕ÷„N­{œýÓæß<Á©>ÂŽ)/kò‡0ICu1EuGˆP°8¿@˜:'9ÍôŠrZ “Œ“ß~†J³§¯!D¾¶­jTÚ\qëÐýÓÑ”çsP é0‰\q]ù„T„rÌ›ýKÚÊ'¶)·i^Þ!M7R ¼ÛË>÷¸h[Ù¹ÑÄÄ&È MÐôîET)Oî]X¯é`QÏ\˜“µöð·â^Ç7ŒÚ•º×!¤…>$Iµ‰(í6n½ÿajë;í½÷¡ñìXοÒm7±Ý¤t>Ã;Ä|m ï#fÀ7T—%Á[ìtì QºEŸ{]’AÒ&ÊlŽÿ…ÄZWpþo_Q‡¥ÿsYy‡V/_ˆ€]Ôô¾øœ“/îD÷:VŠTûh쑆ºŸý9³cký–s{Ë´d戭õ¡„VØiA³°#7Æsø7ÝÝç·b8²Oî5hn¬Ï[ç-xß¼] ’w‹ù­cØú»f¼Ð·˜ÑÌ+„nƒ|¸ñl;HÕ»î, lÜqެÏs=,õVŸã!Tš<†¾s`^´ÿÓ6YI#hfìÂêšz¶@hµ!cgBkBã¢þ¬Ñ­Ü™Ä-¢öò’O¼¼á Žo(¢½á»°GÇJm_DDÛaëÚ¦¯eIH«õb¹AÉØÖ¿ng¹´¶Þ™oÇÓt‚s­bÇÏ”3‡€Ð:οݽ“ü oîÁ¸DbZIh=²¼÷ûxß·HÒíÖ㯫Üvü{ˆáCÆìÛÆÑ6¹Ž¼¼›žÛ/0æ¥$oYEêÜÄ9€Î£IXJª q¸yí­ŸÛ/}nï~§wYÏ×ÄŒhï&¶]bUÅ]sG9^i\Ž[çú×ì»é3Þbþ±ãß6æ}¯ô÷óB@¨hôêŠf^nH ¾ÇE¥b#}p®mž7ŒW-½'ì\ëüöïvì¶åñ"ø¶îI¨}´ò* Hûtï ÅÝ=A¥"^ü•ÄN/Á èv±ª ¯ÿÏWÑÊ[¤IPB±'ey»QEWW¥PHTgHzÖÅͯ¨.fmp)ééeª«+\%hæs²Ç¹û‡X|÷ “*ÒÍâõŒüác† çÿ÷OÔu{ÿ¯Ï(ß<áâ« ìÁGtOʧ/©ÊšÐJËI©Á[¼ˆ™Nð_7dÊÙoŠy‹DV̾~Æìb¢ÃðóT¯ŸRΠÿø!ºkÐyQ½æÕÿúÕâ›2Æh ÂIÒ;'àçof %2Ìézw<çÿö‚ÓÿçKfüŽÞ¦|úãç ’<§ûàªk*ª•ÀO_óæß_’>¸Kñä9'ÿϰ/¿åõŸÎ9ù¯ÿÈð~‡ñß¾‡¤O6ìG5Œó1 pÁ"A‰¹•ŠÐTئ&8‡Ü¥ÿ`@óò%uéPy†ÉÅÅ 58‹Ê2’AÚ–•ÆFø†,ÕGq/¶Ð´ 4i—£¼A¹BT¤‡¤»Ä'{í GbÞ’gºM GÆ‹á½Å,bÕ¤ž”Ô†£kœŸÁZT–xnèÒ/%f@iÇÅ¿þ¢Û(ôXÚakÅÿòòžÀyÑ*mžòc·šÛü¬Ïy{®Þ4¾ÝWwçö9¬égÍ´ÀÕm#ô1S‘ƒ(=טŠlü³I#Ê/R¦äg§HScÑ}ÉN'XÝçìîR|÷’`†ô?é2ù÷o Ù]º÷r¼óØyôÑaÊëÿý7Äè!wþés1åÍ¿~MYdËlpEM÷³Ï8ýí}ìxJ³°è^Šf2£:SLfxgÈÏN¢D&}Ì C%Ôçœÿñ{d›ƒS¤'#t5}íÜMˆ䄯îÙ‹ïÑý eÁTžR<{ÂåW¯ã%òÈa•` J©}õ‰½L·•[¬ÙƒdÔŋçx›azú²&=;…PâŠE‹Bïdχ¬EwÞ/óÞwÐ}iÞ"Óé¨Ohš}ÔM  øok)ï Û-Ÿ<*{xÓ3üš¿vˆçº+“µFm¡Z×_%9b‰Ùã4ѾÑHå€VîÖÎŒÿicJâª&r9å§QÄ*WõzŠ‘ "Uë$1,ŸÛ/?榣¸úó×Ì.´‘‡Q½›þ~éF*˪¥Ì8ýÇÏ1²nåaå s›½…=·ìsûàëùÈž$nŠ9¶ ÊDã+‹-\tç,‡e&¯á4’|ß1s„»~‹˜…ørB=®P½>PR¾žb'è•Ëæ Q*\1'ø•wQi <¿Bèé(Å;¿Eå ®jû“–ÊX¡õ¾è S¹¡‘~$½ÊÞšé„ÅóK:¿û-ݬâåÿï¯È<_ªp„P _Ò;=BSÒL-ª›aún¶ ™·ë¶´VÍÑêUJ¹±ÐZû䪽_r¤}D+¥@JÍ3L‹2KÙ–4%¸=‘¤ê2~!‰Žv‰ˆ’h^·Hz|ÈÑ”E#Tˆ*)Tcœ™äd§9õå%ÕÌ‘ž ÈF¨õܲÓÔ5ÍtŽÐH!®Æ{Pé ÇÍçTÓ ™¨¶º Ðý.R8ê« MLä-À{|ð«¦B\ÀÙºó”D åãzô‚Д8‘’2ü¼i餙G©:¥EDÀÄ 3p Åù Õí‘:`KÊË‘jQ0á!õIv<ÅVœöMEuµˆöuMÀ`ŒŠvéȨWœ¤(ã)/¦E…ZˆµÄÃJ {GÑ¢å)·÷9ÓÏ‘F¶e;…ͨ&ņÖdD­Å’¦Ö¾‡Xj‘¯¨[íwX*ªë>–Ñ?Ü{‰ToÒÀ¶ûÚϯ$°ìC»ûÀE&¼G$ ¦—­z 67â|«I|xÙœÇKéá4˜8¬¯øýw>ãxÛñ×ÄpÈ/ã=Å,•Ä5®jÖ%Ôeì.VÄpÕI·AŠ_UÌ)ÕxJSy”Ö±ÊsÓ=6g?Ôxn zÞ4¾íóñA û(Ö®‘·ž¿Ì¹}l}áÇ,µÄÎ"CjÁ-ÅÞýÐã‰ßé=Œ,Ï‹èà‡p¸Ú#”AªëlÄ«õaÃCÁdzYjâ1H¤ˆ÷Åxn/ûÊ6¨$[Õ?v÷ÐM„w Í¢B †¨.g¥Zh:÷‡ø¢@u¤Ã K|ãÆPŸ¿büÝ„Inܼ|YÓùôs:ÏÅ¿~+íè€ogÿüõ˸ü~Îɾ$Mj¯,*‡æjBS7$£;d£>&¸ºAèXÒDD—;[…¨‰êÍÕ˜êü dŽî&ç¯i—P•زÓ3„¬(_\ ‡'tïŸáæˆ7¯Q½!Ù(†+ÖEÅ™Ê1ó§ç8Piäì„Ωdü—¯(¦ŠÓú£-çÿö-æÞCºA9qÑlDÅÆC;_0{ò džŽðRš=¼Ãè7 ¸`ñl Iì^­Óï^PMKBãÈ?þ˜|à˜?[ R°%dg]¦ß~Cúî“ “o¾ÇÉZ6rFÿðîêWß\’?z„›ÎÈœ$àƒ@uR?üÀùŸž‘=zÌéïššêÕæÏ.уnáèù1Ú8‚R4ççXßA§–òÅ"é’œv,“¯^¢úg(ÓD–VÎÊ;îH†hšÕ¯3Õïˆv!‰Õ%[jÓÚ©‡Õ³Ó “oŸcÑ[&Y[R¡¤Ä55‰Òf Á . »}LϬ3Ö¥©÷mÉãÊÁÐC>t¨ªÛ^÷šC<ÎÝñނΣzŠk³]æ->ðކêÁñÈGÊëß0„€Ê4:U« ÁA Ø $C\Óå!Ê[|Úe¼×Œß‹aƒ3Éa”NQ*ØÛÞvü¡˜EœÏ® +À¡žS^¤wï ¼E&r•Lþúbn!M´¦ß~ÏäÙ•ªÿXençÙ€“ß~„hæx/ŽÏí-~/7¬ÏŸÿ9ïñÝße=_ó~€ëbn%WƒõØÊoToÂz+ÚAÑ·l­·xÜ›¶Öa ÑߊyCh{_úÚïgì Ä»ÚÚòÐø[ļ†ß:æÕs»eÌBâËõù8žË^¥åïvT®ÐƒHPYëR@I}yN]zÝ!uM3s¤§#‚Q_–˜Ñ Rû-$úÐZ^ÍÕ½äPüJñREà3¬/Ѿvt?yÌà³f_}ËÕW/‘iºt"4ÓMÀ·È娋N%Þ‚L4öê‚éË1BG8¡U‹Žìé`=æô„Äx//Aëõ}ÀIŸÞ¥zõ‚é«‚ÞÇ"š|U#tÀ×5¶v˜n!ÙY{5Cö:¸éÒJÔ45dg}|QP_Nð¤Î2PSIÔv“õº¡žÌñB“tûh£âºnN’Œº¨D‚”Øyב3ì|ëÂg0ƒ>ùiJñì%ÅÌÑ}t4Ì_¾ÆË”´›àª‘æä§]ÜbFu9§©]4v©„ÐñPlÕ.lÙ ûzî"í”ÅË92É1£?/¨f%ÞBcIîÜ%ïÃâÕ™DMX¼£žÏIõ¦Sƒ+x4ÂV„¤Gÿ“3üøœÉó1éè¬ÅŒº™(ŠW¯™¿˜Þ½Kïá ¡,¨.&ØÆ¡+Îðó)!IQÁÓhpCÊÝM‘ÚR¼œ¡û}D¨ðÎop Ä¾q‰Ô˜~† ~-Y'ÂÚ {³iV BÝP_N±‹¼÷cðTHÎV R©­>ãh™ž¡S¹±¹ï¾Ã{ ¾U(9dÍ}Lsuk¿x{+ï–ÿ›h3óÝÛ5ï·¬Ç,­¿wm`7]… q¤,¾'Wt@réÅåº÷ß*îÐ¦Ó¼Óø°]ŽæÇÅ,Æ- êYµ6ƒˆÞíQ¾PJ‚ƒdØm¥/\J~E1ËDS¾zÍâ¢@e)ʨm-úŸ‚·¸9/x‹­jHºô!}³N6oœÛ‡Jõhnï^jßê91z§õüãcZáæ‹HRâšæÒ¶ëšE`_}ÿãoóµŸñžbÞKÚnkå«×æ(óÛ̧X+PRF³m±˜<…Ðàê¶Kî­BªõÜhûÍ„R<Þ¶ê`rÍoö.î¹QA$,Àè‹6”Ô,¤'Cò‡êW¯™=¹D$f‰@§ƒîG¸¶‘/¢Z—¡tÜø„fÁâÙ9uaWüåÍ_Ò7 éÝû¤Àôû—½‰Z{êYÍàóOéÝM±ÖS¼xCÙ0§ñRVA:Ê)ž<džHé>¾Oh&,ž/HïßEŠšêõ²ÓG(/.2!8Aÿ‹¸Ë ÈNbFñjNz÷.{}êË×̾ Ó듟"a=ˆHU˜Œ±‹š¢[::%¿?ÀŽÏ™|óФ$YN~wDñê.$hé('ÙýG$¦búbÂà7Ÿa˜3}òŠj.ýÃÇøé¦/ D°¤wïÓÿø ;+qó æ/+zŸÝañý3’»1©À…T ò„æâ%³§s’aޝšªB(ƒR *ÏÉïu(^G'4WçL¿zFèœÑØgúÍSÌÙ ~¶ ¢’8Atž"Ehœ ØéŒújŠL{Ñ©§)¨g%B&˜a;SÏj’þìþ¡¸`þjÆà7_ ì”ñWÏ‘'g¨ÐÚ`³Ô³`†Q^°•ˆÓ@¶ m•ˆÉš¯£ñ޳§¯h¬BÊ#õ$ïcS6ˆö"Úb«º?ˆ*3» t» ¯B"Tˆœ+»Ñq~¨$yÐZôˆá=f‹>á2ôÁÖÜWk¸àÞzüÖëÖ‡í ­Øíþð±Œ*ÔRêÈgì„[AGín€ëº{ñ>¤lrô‚ö¿û±ö¸îo³ˆf)ÞÆ’t¤)|1¦žZÒ»g«JCð!e»nÃ/4æ@ƒîeT/_2yzÜ«d†[@Ãïcüm_sýø`Ôà”á§÷ )°UÓöB¿ÍÜæð%ò]ŸóÁõÿÎí·Žù-æê–Ú‚ØVö ’€c¿éÑ=c'Ébg*ÙWý¦ïm>ò›þ1_Ø…”ørN}9%Hµ_æP¢´6-cIÓÈr„Œ’…‘}¹jDK£ðÑ)z^¡º½¶r½QÑPW̱³’¨|@~–³xò OFrÒÅ-¦ø:Þqu·‡d¸ù,R”W2|±We‡$øïC®ðaI¯›ˆÿù/ÿ4F™Av:D†h²ámkýÛ[[ÿ.%­B5gñükaç#¤ÀÎ ’éöù(¡|9.6¸Õã)Τ0t?¿å˜Å«Ýï#•£™-"G§°¸¼Dš ;/üîcÂøŠº1˜ÔcK‹êtÉï‹ “¯ŸÑxA:<Á$j­-)!Øš€$Ô5MeÉîÝ#?I)¾{ÆüjFPŠ$ëtsêÙ’ %õ¢!é vNU+F¿ûY]qù×'TuÂéïcß¼`6¶×`îܧ'§ž6˜Ì1{6£÷é‹^“=zˆòõ¢Á×s:€fÆüù”d؃¦¢ÏѬ@wzô>é³xöŒÙó‚þ§é}<¤~ýšéw¯ðI|˜P¼š`†}”ˆ|ð`ô ßZ©G…ÐDKa×4™!uÀ7%¶tÈ$#t)/^RÍÙ`ˆÊ¾˜ÓxÃðó¸óWL_Í1ƒX-ð.rÛcv¨·JoHM:ê D,É•ç3d–“ô£JDDNhµ ¼ªHΆÈfÆøëgÔnyÞ¾” Ý&{¢u˜ôkŽFðÑV]wzè\îa‡¸ZÑÝ»ŠàÄi ]Y=Ó8B¸žþqH&O´z–þº¬þ‹×ÛŽßCÅÅáCn³œ'4éI|nñ7Ü18f!»#“u£…ìž|Ò51‡cý±úšïtðRrÛŽZb§ šyƒL È€’`KlåÐyNp¶M8fØÅd®Aéý/9æõ8•%”/_0þî•ç¨D¯KÑ¿"´W–ˆÎÑçMÕ&¸áÀ}OsûWôœß*æC”4Ên®ŸÙ‚fִΪ·ÜÃŽVKnt_}Ûñ?v~‡}û`"óbŽô‚µé×ugÛA*c …4鯥xçÞÊ̆PÒLktÞEêMŠH¼@ûrA=¯ã”19IGQ'xŸ’3\5ÇV¡¥vI†®^POË£ÞBJ|S”B °e.€ë tzuxK·¼ÕLoU#Bx@Ah¨ÎÇx/[nNcm1§§d')¾aKæ/ÎÁté<8EµZ¼Îz|VÙ†›_ÑÌ=Âܬ"H¢N±ÖÈ$á°‹!3TGãæSÜ"~–I-ó—˜nWUèÁ£™ÍWh™«-ÉÙ´nX<¿D÷G˜Ž¦_Эý5+95WTȬƒL ¹TFçá´†fRB¢ÑêéŒêªX•DÞ%õñ³+šÊc'$i AwHO:”¯^ãÉèÜëbçu¼´££@BSa' H õÕ‘d¤Ã.º“à ‹··˜á‚¡÷`ùÇ_Dþ”ÝMqu«¦ß‹q^]R·"xŠ7çØJ¶VÑ Ákô  j&cšÉ‘´RZ!Z‘ûºÄÕÑò»óè&i¨gŽä¤_̨®¦€ÂÖ :Ë[™;‰oâd Σº=L/#,y·­Ø{+ë–;3S™(ÜlJ³€ä´–€ˆ•b¿¬$ŒÁM®X¼ž€R­ÂN[2ÕÉ‘&6–¬"‘sBÊÍ„‚à-¡ªy߆Q¶,Çô»Ð^¨öA·c®ðãÆïn^‡tÝÛÿ5B±D£­„ã¨Û[?ǵãÅñô¡ËÅÞw ‡£·H rÓ ¶  = ;ØéÕé´+!Vf„·‹á—ó²GE³+7Ÿ0ymÅO@­½ýøÐXô`DçN[–ks†÷:·ÅÏùCÇ–n­?f;òÚ'w/Â?Õ>¼ ㊻o¿EÌoƒ„º ™Ì·è·;õnN¨—¶ÜZƒ’ûT”Ö¤O,éÅ>Ò6¤Ñ€Ç[ׂxK…اæëå˜ã +A!¢©œ³Ë ô?ŽÑÙ ûè.¢åÇ&ýÖ6Ö0 ;_Ð,|T¥êú«ò(Ì!ÁZ쬤óé§Œ>?#Ø€½zÅÅŸ~@ îqò›H´%©¯b¼CM¨¸F#UCñò‡ tÑÊ M†ÐW7à“x®æÔ— Òè çúžd8¢º˜’œÞ#Í<ó7¯@wQ¡¡œWäw¢EÁìÕÉÉC².oÎÑÊèÖßÜ‚¥™ »$Iùü5>pö‡O°¯/¨a4ÝÏŸ2y>C%_–¨Á)½{wpÓ78'ÐÝ!ù™fñä5úä{)ÿëÏX=âÎ?ÜÇÕ–P•”s„JÒbç *OX¼~ƒHŒ¾¼‡”žÅóx)ô‹ Ê:áìw÷ÿë÷èÓDXà*Gð •eWlJöø”$•Ì¿{B]Ì`Dÿ£ŒË?þ‰r‘Ó{p ¾ ¸3J‘Jã3켌@x*SÔW—T³g£ü I˜R,F¿{Dóâ.þöÓÐÌ&Ù% Q©ÇÕ%ÞÆ¹)Ó'QJm%ï£.´T« œCõ:ä÷4—ç,^$g§$ý$&y!l«IÝ^½E’ 2CñÃ÷\üõ2ï ŠæZ¼$ Ð ‡–å¢kK››‹ „ª½@«÷k¤â=è•DE†·*¾×Òá5¥ÀàñÒQ•Ê}*ÇJµßŒÒ6rl66-ŸÁ51ˆ•Ô×6’qÐH…#F l|ÆŽ¤ÛÞøÝ5ìˆáXÌB·= ‹¯x—¡2‡w¦¸¢@óJZº:HáøuÄÌ^›H웜ÿù)¤9jóàGЫnw¾NÆîFŠÕ ”,!­Vwúà#N~óÊâV1þnšÛïé9ï>·[>çcëó¶ÏùV1_Ãá†:¡5®(¨&ÕêRów ÇÏMሠª-`󙥕…[ž…íÿl‹ÖÜÒ$kknq WüúP¤|L©§õ¨G6€åÿ«¡¬°EJ.›Õ@u2DˆTa¯f䘎!xGhZdZÇ’x@¢dD`½‹&ºß‹MGÎEÞ«”ÑdÄÖ4óªŸã¦ œm•µèAájšZ ´Ç;IvgˆðošYA±ìï«݈©5èA<¸má¢HÝž ¢N —¨$%Âà©®* B"ñT——x‘‘ hÎÏ‘½¡,IN°ÂtPÚR½™";]d"qó¨È sƒ›ÈNéCÚvÝë!¥¥ºœ!»=„·øªZ•w1y4'ñžÕïõ-Í$Zbã=ªÓ!TÎ|mѽ.J9l£H ÕÅœdÔ¥™LðNcÝ•†2JãSšE…4i;_*WØyƒéÑ™§xyȺ(e©.È,‹ååöBêŠ$Éh€Î$Íx†mº×GøE”¹S©ÍÚz‹++ð;ÁRÆßke)éÉ ƒ+J0)zÉ M5¡*i¦Ul€x¹ð€Äô»ñÞê<254—c¼Ð¤ƒ^Dðê‚fáЃÍÕU4Èqneò¶»X„Òu?ds}4¥n3]kß/Â$èNå¯C&ŽÁsï:þPùìºñºE¢ÒAêf#…·èü¹iü†^Ë­Ì&v¿ÓM¦"7Å͞⌂¡œÓL£u=BaýuÅJýN¿Ž˜<ç6©Å5Ôãõ‹7\ Ö¡»ÝXAóÑ$æÃÍíŸÿ9ÿ¸>dÌ"Þ¡Bø{Ø hì‡ØWö}ûÃÄ,¤ÄWͬ\Ý>øŸ|eÞ]U',›åáßóР‹Û;ÌDüùýX$ÝÁð7Ÿ ƒÃûšêb‚ÈúèT¡ò”t”µäi¿Bߤ¨8ÿׯ(KA¨j†¿ÿÃÇ}\M@|URB=§¸rŒþñ!õ“¸z>!9!5/?CÔ¯˜¼„4­(Kͽÿö;DYš)Óo/ÉÓñ,ž¾"ÿäSŒšrù—7ô¾üœüÄ0ÿî´£7 ÷F× 5õå‘u¢¡<_ {]²»}ìù ÞüŸ¿áó; ™}ý”þ?ÿ1¾@ ï᧯¨)i¦ß<…lDçn—êõt焤§˜>}IrzšKªRÀ¼ ýì3gpùÇ×dîš)¾nÝ“$ø*=¼G~·ƒ—T— d’’õGùêœúrN ¦›ÑSª«‚z>£ÿÛ Û«¸üvFç$eþºàìÿóåßþFUF»jeDT³Ð·˜R¨lˆÌÁ%ô>ê2ÿæ¢wF’y.ÿòùŸÓÉ.ÿü'%ùè.:ÓçñMA=™¢Ò¦Ó¡÷é Ó¯¿b1I~~—æüÓgçˆ,ÅtNȆ֯¾‰ ‹_ozPY!£»àRé‘ôø²@dI$ç@Ç2wS4<Í¢‰”“`ñ$="$§=”\üÛWXÑáäw“Ž:Øßñú¯ô?}Äâûoñºƒ´¨õv¶œCšéI/vx±‹$‡½RQk•Ið%¾ˆÉ™Øâ•´›•ܑٳڕû™½sˆ¬GÒËðU½g¼²*S‰¶ÑÂùí÷4þV1\?^hI=)p¥Gè¨gî«ÍtÑVâ:$ýåü[뢛ŽÂ‡#1ã÷¹±¿ ˜[ÛŽç&ˆt?¿äÍÿù +¢~¼Ðêz4iQûàVÞ¢Õ©÷Ñlê‹/8ýÍ=ܢܨVÝ.æmk䷜ۿÒç|}Ìâ°‘ÊfÌ;èˆ*\Y®PCl{—ÜNsZ\ÖjFâ'{sÏc ßß“vIy`|¸å>¼Çßà¹ïíÃbM•Ý2²áúfÑU oóÁÇ,DÜÇì|£ ïƒ#ÐI¤Ý ¿Cs9Ä׿ÁHå-ÇËÔмyÅìÙ9"IZ#•¾iA ² •jBpøªAJL«Å»ÍkòÖµ£DhÖ†J#œ‹´ Õ,¤”xæ|YDþd–€uøªFƒÌ ­ÃRE_uW•„& ó•kܼŠx"£2WÖ‘r åŠî%ÂDÙ8_[‚T±$^G.1REkrZi© ‘Dž÷ ² ¡iu£eëäæ#'¸ª×k[ëØÔà#jë뙥„ºY9ÀùÚ¡{9º›Ñ\ޱ¥#9 ðØñ,jn':Rœeå<BIT¿ u-jdª#Ÿg©q,!x×É´Y•‰ò0¾®p‹ ™&ñÒÔÄnR™˜X$È"ÊéeT_× 4RI|Ý´n<‘G<ø&º¨ ¥Z ïÕiý½wé ηhê¾Pp>Ryl‹Î)ÿ’ñ²(#·ÉW5HÙºRÕxPyBhb@ˆŸ³–± OÜ¢ˆU€]DdY½ÝÜ ÷Ü6Jˆ×AdKÚÅæ´Ì’]ì2>øúe“à¬=x5¬;ù²\Á²iÑ•%¾qQ #MQY²>Ðo¨s )ãœ(Êh‚“gï8_½¦lmÕ•F% +§©AjµqX¹õÅþÚ¯t¤Aæ½ß§?Üzü.à¨8ÆÝ×Hçiûß—ë,‰îfÑÊ~Õ„Ó*Ôu ,þ+Šù¦çæ‰1·º¬¾±? ‚u;˜‹"7Rȶ*¦ã~´§³üKžÛìSQ~òçü>ÇKÙî÷.îK¶ÆWÕí´š¬öI;_D¥ªÌ¬¼ŽC”Zæ—2þý~†‚àl+Ó+Â’P¤ƒøYö†vµM„Zò»C„…ä$Ê›ykQyŽéÅËÚvfÛ^ìdDRêiKñ=M_ÕÔ³ © x¿aújBöð1¡ ¾œâÉQIÀ7®°$÷˜ç|IçÓÏèÞÍ‹9W_ý@1÷ô>úˆ“/î0ÿî+ŠºGžÖ̯ý‡&_}‡H;§Iïôi&o:ÇÏKÒ?¦{fX¼˜aç—ãùDPè~Ÿl˜¢RAñr‚È;(鍿–æâ%–.½;“oŸ‘ކÔã+ªRqï¿ýY\rùÝ%ÕdÎè¿üi¸äêuàÎoO™ý0¡ûxÄä¥XhºN¡)PÙÓ7Ô——Õ!;íÑ\œÓL „‘oÐ]ƒ++TÞÅ.Æ,ž_ÑýÝo8ùô„ñ¿ý•º6tÝ£¹x­éé²ux4ýŒ¤ŸÐÌ+šyL~|1£zuNµ¨¢jŠHÈïÜ%íjÒ“>®X@Þ¥yõEÝgx_rþ¯Ïé|þÝÓÀü›'W’î'wð“1^e„zFöè—¼þ×§$½A«Í•‘"²¼Ñ+”ˆÏ¹rÛ†2-Ò‚‰a;Ç× •ç_"dW ²ÇàqÎÕÿý §O8ûÃcìååÂ#…@&’êâÌÔ,ž^`î< {jÿõœIÛÄ9^L¤I#MPB!³éIœ'¸‚ò|Ü:#Å;2<Áôôþ&Üv*ªó+¼W±1Ò ÌpD2Lpå_Úm‘ú6f'øf•J6KD!€³È¬O2êGŠHû{ Íø’¦Œ¨”ŒHY¤Y³„ÝÈ …Q¸Ù˜êrŠê£ª‹³k”bgü2)òÅ”òÕ>d¤wGèT!œˆ~›@¬Œ^Btt4ýVÈx‰âøpy:f!»ÈÈ[Ú/cØBIÙæAÝÚæî¢hÆoV*öb+¾-\é#5ÃhÜä[I’³!ÂÚ-C‹@wRL.7è1ü‚c¾ñ9·‰T¸øãW,.më"ÛÒ¤øiè^WyNþñ·ôî¦x×V{ŽØM¿ÝÜÞ@Îí_Ês¾i}þ˜˜¹} r-f ¤Â7u«­ñ‹+ê¹'=;A8ÛÊî*„ Tç—ˆt€é%k0ì ·;}û6Øì#û{Õ³CVÞ›ã9bÙ~(æmÞ÷ÞçìÆ°ÓÓp8†[Ä|ð¹]³¡5~1¡ºœ®õœoâq_Ç+¿q|{~z…Ê»QJu·òË´ž#ý­Ç/è—Ìžn"Ð0@´%iZ}^‰ê¦y bG¸ÜG´p‰ˆÍ+d–¢R BàŠvÅ΃õpލË+ZŽtk ¼çÝnT¶¸ZD4+ÕøYõ.j4¢*–ŠBÉÕz!´ÙD*ÁÐïQÝ„•Bð+úõR'Ø¥6¾Tg[öR†QVNwG1Ñü¨7í׎€Ô±¢àÃZÅ¿¼Ü{*6T…CêF­£¤LT'm)=QU%¾f×ò÷ºòX)í'«×Ü`±¦v^âˆîšÎP(£âï²û¾> —”¦[¼ÿ/1æ·úNìlA»ý- u"ü¤ÈÒjïj«Åº×‰­-äuòù“ÿQçö/0) U‹xÊõå}™ôÄJF«Œ$äÚ8cGMãzªëþÍê×5~÷5 f! Ö¶Ê;œä?ǵwèßßÈûÏ ´, ±4Zqˈö-Å ;½ƒÉ5®šáJHF'$£ •*|ciæuÛìßVwZŸs!pÇ—nõ˜T–bz Õ«7”çc„é¡sEuqI]6¨$côåÇÕ0~AhzpФ`úä*?#í+êñ38E¥mBäÁV»Q_ö™I§‡Jå«sÌàÃß?`þõ_™_)N{—é_¿%è!ùYNùò²œæêŠÎãǘ´âòO0}Âàžáò“ ¤@š.ýG÷ñ嘦ª¥£^ÈÞ€¬¯±ÓBwI |u0)BDêäìi®â%I Üb‚êœÐ¹×cþõ·sèrò‡'X¯0ÝW–¸ P>>ÄüñGˆúŠÙ›’³þ7žF*†Y–C+åKÞZ쬩 ÍŒúbìö²¡Y¼œ2üçß’ª‚Ùóøg:ŸÞ'Í%ÅÓg”Krr‚”•çHæ´Oõâ{.þöÓË[C‰l©;Á+’“2iÁÉj“‘-4)¬K1!Êï5³ Å›ýú ©Xpñ××è`F'áÞ¨B­]vÕØ:Ђõ[ü2Ý1HÍ*¡8صφ*ÀgRD{ލpìᅢúì©ì 7»êbÓöØx¶Q=¢4§o,vaQ•@3­7€ª5ÚèD£Ry\…ã€>ð/*æC¶Óת¡T~ ˜®Ö¿DÈšòåÙãGˆ¦ ®¦“ìñ°Ãfïħ÷0}\yä0Ž Ð⎠Ð⎠Ðâú¸ÒaúpÌñ ‰ÂN®¨¯ŠØ»Àª¼»ÖŽ*¼ËøÃ¯ ! “n¤ ïö(ì®ÿë:ÒwÆK#¨'cš¹EM¨¶T8þ0F0&CiÑ:®ˆ6ûÎI9v:§ž‘ëAJL7‹‡t‹@»¶)8êwP2ÐLŠÈAn@ho¼‹—ßd4Bº[5-ô¡)©‹¡»˜\m‘:mÏ" 9´<ܣͨv“w¸*¨d§Õësê&¡w7§|}AJ³ú>®¨HÎNPªfñrŽ IòÀâù>D”ZƒR©ãûÛÊaË:–«ó¤EB¸hóÊ’–%â…ÅhÀáläœê^mõÅÖùV°;šŠH# .DŽ ¥w•D Ÿ ²“~V ;i‹j¤+î^‘»»üu(€Ð(°UI³ðäOPÔTãpøFa†*5øé kBÆKzpßÌIP”W‹¨ àÒDNup!Ûï²´Á .*²´T“¨ ‚Fw¶°¤wF(á(ßÌA0 ’¨d‚÷4eƒJs”WZ’Ó!’šêªDH_05A÷Oȇ†âõ¬å¿ˆ*¯7-DhðàC@§Ùºïo½ÛGjÆŠŸê¶åÖhÕG­bˆkHŽê×€2 ÒšE2Ť‘û-ó©%v<‹ê!×C ëáκ¨Á}h|+Åå‹•¨Õ¦!4e…LR”jÝïq-m¡G¢c™ÿê@˜~'ZÈû°­ú'í¿Gd¯”êíƋ-zÄ¡Òþ¾¶x8üËñ›ßEÜ<^š¸~›IôâÚ¿š¯%whÕÍâ3 ¿Ö˜ßý¹ ­h&ÊËùÆMìÑq¯znÞñ¼ÅÙ°q÷ ’ßiMÅ6ñ¹Ý˜„¦¦™’ ³Öõô}ÌÕŸÿ9Œù<çkÇoú–»‘Ñø² ™Õ-vó½ccz°ädˆp õ¢jA¶X¥{ˆ¥X_%nÚÃn»çâ‹säbxÓ¾zTÿþ-Ç¿m ר¹lRÍëMßtV}Èñz£ZìßÎTiëñ-Yñý]SãmƒóËÊ𖃤ŸGcÌÉITcìä gÙÝQ”ï©iÍGD”²‚æüœDóŽêâ¿X`eÎèwæ%Ïô›gäŸ|‚%‹ó¾¨°Ö!¥D¦]²Ó¾žaçE«/7¥`æä”¤Ÿmð™ØF å¨^_É õœ¦°è¼‹tñÓ×”3Áé?‰,ßðæO/è}ñYË¥“¿| Ý{d‚ó?>%½÷˜“ß=ÄÏ/YzŒ}ù—œpúXüð„«¿\–4Š]¤A.‹mT "oØÇä'&†K^h‚HS5¡,YÉåímb«©B¨ÙÉ ¶ÄE,=m^ÚÿQyBI)I_Q½™“Ü=C‰ör»DWÚ’XØrÛF—¶Ð—CÈÇ&²ÔÚ ªT!“ͦ›ˆòm]Ù¹qo#%ì bûŸ±76tl¯ùN»ã¯±;Þ!¢ÿ¤Â^]à|BzÚ_YÍs–J®øÀ{šå¿‚˜÷P´Ã?ìÂíå8#I£Zîl»hš9W{‚u¥8B‚¾æÀõeMþÑcŸœn)Ý›çÃfgÿ¡–ê*2&ñ®òq^ÑÒ¿Þ6fkÓÿLÏùhÌïí9/Qý·ˆYJ¼õ±Ý¦•;ÝÝ“Ð,J„1˜®¡¹º¢ž,­Ÿ-®¨V½0ˆ$r§…ß®fì"Ðás :á@‹k8Ðá@s„}h;UÊÝ}øØ¾½‹@Œ9{õåÍ"Ÿâ Ãã g?v<û”ª%}põû´ça–îKÓÞˆ@ –f<‰wÛ%ß[ÆžŒP7¸(h°¾@§ƒ|å@§´ŠÆ-Šš ï$ÒDã Ùi,HA3Y`Ëè– A$‹[Ì©+Iÿ“»¸Ë1>@5“?z€²%uiÁZšÚ¶¨ŸÁt2B¨#µx„4+ÏŠ¥¿­OÌ@=ÈÄàŠ9>h’nÔ ¶ó16¤ ¿øY]rþ——t>ûŒN7ºÒL¿}ÝÁ˜‚«oÎIOïÒ}8‚zNùzLSy¤RØbŽŠ$OQ‰Aè;¿Â†„¬—`¶¥`X²»]fß=#}ôwñ «úœ~qêü5ão^ »#²ž¡/PÝ!Ý{)å‹K<†f>FèiO•gå ÀäÉ“ ºŸ|L–Y&ß¿¤œ[uèÜ;EeW5„ÆR_ñÁ DÀVf¨4ÄÏM{è, ’A‰-ù©aò·çvI:Šf¾ 6†äÎá+Êó"ÚkûãoŸ#²!ù0£<¿ÂŒî˜ˆê %°åß(tn¶øjBi„h¨ÆS¼S„à0£!²)¨Š†üî]t¨ÞŒYìNJŠó)Þ«èÞXÚ¨˜â\íI¥x9Awº éi_Ψ®¸Ê“œÐ¹×ÇŽÇTW 2r<ÕÌ’žœ C÷2Î7ßÄJÂÃa{‹2ûë,^#‚Ïe0!lT&8d×¶ë:å¢k¤Ôh¢"KØÔ3¤vQ%X‚m•dŽ•ºoƒ|ÜÉ.`F=t­Ô·èÝÃöhÉ—’ï‘ñ»<ËÍñ›ŸqÃøõYr|| ÂF¥b¥ZÒŒç¸:Ä=*È7s‹³ù; »˜\oqÍ·c8PÚÿ c¾y<ÛÉäŽLVxËç ’ÐL¿‰E!…ØG—jPíñ•%½þƒaTº&æõo×xElC=^‚"u¢:Tؾ»ñî1ÿ\ÏùhÌïó9ï6síÆØŽAKܬˆ—7yd/^îy2¬ª ÁÑÞgÜÎZSÑ»`Åæóû†Xö0!ÕŠ·¿–öýO€@‡(‘|ëä{ô<¼æ¬z/ã÷J%„‰=YàÔífK³(âºmŠ_rîCcqUµq†ÂÐûønÅ®¡.Ú&&êH‡y”/C\Au1ÇŒNcõL%ÍdL3küj‹H{ô>>ÁÞJ„pT¯ÇÈþ€l”Q¾yMqQD®_ÞEåß4ÐÒ |U‚ 8HNFèLá],¹IÝn„vy…ø]”Œ¯i<*O°Ó+ªË92í E¨ šÙ':Œ~s—òé—Žüá}º÷z”/_R\V˜Ü û¤vT¯®(t®©ç½O!}MUXìl Á`Nû„bF=. ¬‰C3^`z|1¥±’ô$§~ó†Å«)?&Í=³ï^"û#:w2ª×Ô ÈïȆ‚€âåÅËsÌÝ{ä}Åô»ç¡Ä5 Þ‰ÿ?{ÿµ ËqeiŸ)!S ‚EV±ºfþéê·ì~¶žžêfQ£R„&þ óÐ)Ž{&/(ËÈØnæfÛÖ^{-TbÖsl-JôéúOO ¶ÆW»¨0Ã;šbÁtsÒaÎòÕ æ?H?¤÷Ñcê‹çÌ/*_¥û¤C5™±x1¦¼až~ÌðIÂÕÿü†`Ò557°ŠJDÅÒ‘>}Êð“sü|Jy¹ ¨”Γ”å¯±>Ê÷é,£šŽ˜¿¼&ÿèc†Ÿž³øæ{ŠB2üüŒñÿJ-ºä§’<v9Çœ=@Ôc¦ßÏÉžœ¢¤Œ‰Ù‘?²|õ¯sTðÑdD TÚÅô’uãZpÕd†w Ãß~L˜_1}9Æ•´B›”ätHçÉ)~òŠËÿÙüho%éIWÌ >¥ûéRxæ?½@õÀü›+Djð¶ Wô¾ø„ÞãËW×,^^¡ú'(å)^^àdFvšc' tgˆLå/¶qØ,ÚJJ{e·VnocIÎUš¯yÉ¡."mfË@@ì%Á¹õåQ˜•®¬¿9.N¯¡*°Ë ‘dè´™šãböì•E".Çí%nÁzô KÒOð~[æê6¸Û}«ôPKyuÛÜå ¤|ËxZôÁ÷ä¢1J4HBµ'«\UàJÌâ~&”!=éDÈÐ&ŸÄ¡Ýñ¶”دsëøÖïÔfZpŸy¾-fq]%„–˜[Æ¿IÌp5åut©½.ºY %2Ï7&dï<æ;Î3Ê­ýγР;_PÏê¨~²¿'ÛàÑnöT)wéUZEwÌ4mzwχ&Q⾩ÒYlQ4_Q"MS©§m¯ãî&!·Åpßñw܇ï¶o7Jpe±æ·6¯´R2D+õîöñ¡Ò쟷-—†­~#‚Žß_´ ïâ0Öí¤:„Hÿ¬F×Th-±Ë‚P{¢Ñ–f=è#¥eñâX‡9?C†’âjÚ'lÝ:¥Áô:É… žLq•²KÞ#’ ¡,¶¤Ãœúz‚>FÍY>¤hPÝÑ5UHº†òõˆ tž77È€¯#¥#Xêö#JçC#‘­þvÎß”„lh‘»â–uÓ˜%M4~°‹%*MÀÙøý³3ì!ƒ¥ZZtž!\A9^ ²(µç– |ÉJ#pøÚ!ÓB‡(ìÞë ôÊv4Ε4Šêò OŠÉ$Þ t/GJÙÐbb)µ(/§“#E ºƒR%ó—St–#ššž÷±ùp…ºª&9;E†’jaIÏúq·»\` HO‡HíBPO§Ø¥CwºÈ¼±ê.¢mºL2Ò®¡º#»]Ü|J½Œ²ƒúdH:ì!B¼DÔsKú &±ÅõŒôl@}u…ènI1)‘2š%„†ø„[’á)Ù0Å.æÔ³_U¨þe<õÄ“?ìQ]]âœBuS|±tL>LÚØ +P_k²óþZF-:åå¶Ö¤ýÓïR__R\Ï1èmìÊ:ò»mÐ|»Qz9Z&¾ù&|l|p3ì£L³~½ßâRËÍ&å*ªÉlí¤I@û}t7I´w»òuÇ´rW%Èm³±½1‹#Æ {%´p„‡Ö‚@ï~§Õ­Ï7è³8^6 í<·›öK°-Èä1ˆV¤ñ昣7®‘´ÏCØH3ˆfoÚE°>ô˜oÿÆ1ð÷1Ï{.£ÁEçP¤@((/¯¨Žô´©&ù·0¬ÐŽ÷ó>ïù}Åükγˆ ëa›Úh-{RˆI´Xi$šþO5™àíÆ-ÔUÔÕ—$gÒÁt Õõˆ ÔZZ2¸€îv£QKÛÅå¦}Xˆ7Ÿ˜7ìÛ÷øNxêIä ¹Wݼ±ÙàX·ß»9?ï>^ ´^ ×ÞȤ ­¨~C‘\Ÿ•+£31ÿõ?ÿ~LÚ<üÿýŽ,-¹øŸ_ãE—0Ÿ"NÎIDÁbRû„i1@cz=„ ¿x†]é&;LzÔ…¢ÿÙâù5ùGOqãkj'‘T7%rÂì¯a>K9ÿê”ëÿû¯xÝ'xŠÀEM續ڼu@õ¨$Þü’“,nNÖRM+L?"оq±«G ¼Ð亸ŒâbD=[RÎç= ¦ãhº’ä Þ‚×äŸFþîüÅuL¬˜rõ§ç$>Æ$W6 ôö¢õ™ôª¤šZÒ³S²³7]`ë˜ËDQ¼¾Äû“;<¦›DI4©I†9:Y!‚Ù7ÏQ§õ+†$fÆëÿõ¦×G¸hœaë ™¤‘(õtNï÷¿Å¸k&¯çø„°\P+ÜrÊòrFúà&S#pË9åõt‡t˜a§WÌ/¢}÷ÉúO £?þH÷«Ï±?1}Yl9;£ÿécÒ~F}õ‚ÅëšÞç©/GT3Oï‹!×ÿãÏ$Ÿþ]¾ââ?FdÃ>‹seRD³žœ-±µ óè!y“@WÓ[Ô˜ÓsŒ®(®kòÇìøŠj.HÎú¿À»¨™-T ¢DÜ[+:OÎÁVø*ºú廌ÿü7ªªÃéïc2Í웘_N1ƒ‡dÜà-¸•ëŸÃUÁFjÐ[%Ûïeð[¼F÷û¨•´[Ëx1žÆ‹ß:Gp »}Tnv›jÛ\Òö‘¡}“€ýMV´4˜ì#UG«–{ç;Å.f3ì’tUcN)vÆ¥pȶ†ѽ ¨™¬ƒñ[ReûS!ì©®lÑVÜÌEA5)Rmq>wçA˜¨bä}¼@È,'ċ߮ìÕM1ßÃ/sûø–Äy³}S’f±+æu bWe7ØŠâj/OD1•Åë—Ô¥¢s~†îjBm‘iF2Ìš*Ã^~ÿ®b^7à…VËæwó;Ÿç{Í[l`³ó%õÜî¢ÈGQ÷ãt†U³˜ ¦žÏpV¡³Ò¼«6=/Þ!’.&T£qômð¡©ôú(™›éCõ“7Ù‡¿Ï>|kÌwØ·wRìl¶kèôFˆò¯@;•¤[JZÜb¤ÂN%Pj¨¦cê…C/Jìb J­8ÐaôVù×ÝR Ü¢Z7&bwTǪš¥Tü>*óC›×d–¢ò7™”‚ÚVø¢BŸÁá­@¥‚j²@&9º£¨¯ÇÑÃhBíÑÝN£I]Eñn£J7åîšz2ƒ$v\êNŽÊü² È(±† ¸²Ä"ÍÐÝ„P•¸"Ú€ºÅ ”AgÑ&ÚÕÍeÁL¯‹°Žà+êéïU”äR+m=B|¤{ £ÑY‚›-ðH‚­£9‚ŽÛ(E¨ªÈ­î¦\DÄgKBظ»Eþ–&–µt Ðzc6R×Õ1_{T'G÷;øùŒêz‚Ⱥ$ƒ.øŠz:¥¥¢±ö6 ¤Žæ9Îãm¤ê%Ýð6+ªñœ ¢Å·ð"R®µÐ2Ê–õ:„ª È ÓÕØùWÔkkÜ +>jÕÉð‹9ùÜ>¬ 'dfðe Tª#7YDºît©ŒëWB°W¬¬§5º›DIÃn7J‡]Y)õ¬@*IX£±2òŽ÷àC$ú ¢Û ºÛE¿6$´˜SˆÕ¸ …cõþIÖŽ ªr\þ^l½·»”¯ãÍ."ÒÄŽ~~ ²ÃJ3»AÙWÉ·£r,Ù/³‰w0žC½íïÔ2~…¦‹Ho‹Üþmñ­±J`'s0):3e½h uÂßYÌÜsÞBk£ÒßKÌÇb.Š¡u#íÙc52A/÷FmY€ûFíßaÌ¿Þ<Ǫåú=ÛJºï¼çìI«wSm Ùd4³e½©úh.¥Ò”`ëè¾WÖ‘ÚÚHáŠKÀMû¤hïã¸g oó­ßi :êù¤F|è´ç›~”|cI»UåpuÉ]™ÿ52vÿ4FªédøªÂáÑ*cøÕgô>0ýë7Ì^²7/¢ˆyaÑyŠa£•¹âB']tÇàS–/¯ wÆùï±øú[œ×Ôs‹9é#|êB9AžzD÷Ù·XRMÊH° Š×WXp Or~NçqŽ/–ÌŸ_P“$È´‡éIª‹«¨g­5aî9ûÏ¿Å^±œ†¿†»þ™×ÿö2Ï6¥V^ï ƒ/ž"Ë%Aw¨g¯¨+‰Q²”ôž>&,/™_tž< |ý3"ëa”FõúQrÑGç<Ô³v±Ýcðù#êË+¬Óô>9eúõ_)ª>çC–/f9^ ÓØç5ù㇨µ‘Š@È€¯øzSŠ?,™†þ™Ø«(…ذ4Ép¸–‰Û‘N:fƒ»_Ú“‚v Ù¸w­¶¹{\º}ËÖ=CŽããÛbØEK¼ƒt˜£²U?ÅàãÜh¼ äa—ÿmF*r+†mÉÁ=ûâƒñëçÙf±i²ZáÊŠzZnÖÇÎßÈLÆWÓ'é'ë‘I‚陵úʽc¾É`ã=ǼA»n¿J”Ä¡ÚBð71¢ÖÍxKAåÕ‚à$Òxªñ»„ôüëè3|³Þ£òCr’#Ù2jú{Šù—œç=#©%vÙØxKy÷=lµ'³ÍÞFÑÄNÇÔóª‘.“àkl¡IÎ2BQ#³„òj„9yD64±¢´OðÍåjí•¢nnà4¿É¾}l¾Ó¾ÍÆi“šj4Â#÷Û$oâ}¿Ãñý7bÁÞ©; A¥ÙÞ—lEÅÛøÒG­¼Ã`%Op´Žæ'U´¶Í 3ˆ†¯wÛu$KôJEޱ÷ØÆ¨AªxƒŠèv@giƒ`ºFR¨¹m®þŒl´ÉRGE¤S(„_Ö¸EIh^*ÕI Ë´F%”Ú¹hãíÊ„Bå ¡,#2n="ÑèNù6Þ<½_wê"tlÔ_:t¿ uíyU”‡”D&ʊМxëâm¯YBEÓ¤F& J ìtŽ?¸Å7H—V³–Þ*ñ¯uxÂf£«Å$cØĪÑXBK/-ª›cz)vºÀ-Ê5WS˜X†I‚ðn-«&SC>"ÊJGuªÄ…ˆ˜K­â<;›ðT4bq BFz8‰J®(ãsn\ÁὈëPÑðÕ¶²Hd|Mx´Ó !þ+#™‡ÆnYâ­Cå¸[E-ïhŽÖŸµqkQB;Âr¯«¬ŒïCpöP]ëȯ¨Ø…w<þ&ºÚ]ÇßCÔ–Y‚”b›¶WÙ;αG8“ágRpûî9~›&ÒBÕ; JÍ»!ÅÁ<)p‹‘e z¬n‰Ä RE¨·¬¼ÿ^bniÀy»ø`cnÿNa]­uËØô,©R 7_D üÔ4 ÉðQy‚X÷é¼ç˜÷çímcþ5çYJ|Q6|eÉ]ô¾oÚŠncR6±òèªjMÓY?n6²w7ìó;†3¿æ¾}ïßiŒ¹ÊXŽ7ùCú¹I÷ù->˜ˆÿö¯ÿ8ÆtýÎX¾þ[¦<ø—/¨/_P̤˜Rûœ¬'©FéƒÓ˜Õ;¿9,¶tC#ÿá—ÊѼÒ0øâ1îÕrxŽÖœu±“+F_¿Âù@÷£OH2ÏòçרºÑ¸ Žà5Ùƒ!v6"ˆùƒ•e˜®ÁW%v Z—\ýéoX²µ«.]pË‚ô£OyøŸ>Ã^>göÝAD°”óÀÙ?Fùüg–SCþ°Cöè wýWÿqAþð ê D‚Ì#$íg莡ÍÝ.åcYuyð1ýó_™_ÏQIް5u8ùÃWôæ?¿füí"Ï0 –£)ùÓÏé?ŒþüŠüÙCÊÏ©+MvvŠÎ£(h6f7Q/%ÙÙ 1á((¯Æ„ ñ®“ ½£œÎé|ú9g¿{‚›Í©Ç%õø’ùuAþøœêâž”PÕ˜çQD‡îÇðÓW\þñ{B’ Ò!ÿð„ÙŸ¾Ã}Fÿqá ^ý÷¯é|ñ%ƒ§9“ÿxŽsšä¤‹_PÌùy‡Å«1ýÏŸáG#¼ê ;’åË—„dH¢+¬Méöxªëv:a~y…óQê§éCT¸%Wþ–b)Á"UBvzNr’Q]_bËØpxÔ®F ¾šã«p¤™ãÐÅëP ¹ «ŒôdÐð!ECíböûhR"Ñ&àß6~Ÿë¶ßQï·«›ŒQöùt·ŽkÔ*é&é7È~ g²ÍTäÝp ÷l­oå‰nÇp XJ¼uØE½Çuox–ÆS¾¾FvN0ÝÈYŽVñ2›ôÓèÖÞ5ú=ÆÜ:þCà@¿û˜wùÀ{ã)Õ´À[ѸÈByq IŸô4ÇWdHzIÔеþÝz똷­¼ßwÌ¿z †Ô5õ¬^+e¬?ׇ7ÛÃÖÈü6:.c3QNjt¯GðsÊ‹%ætˆðs¼máìÀ[„éœÎîR•"Ð{ñªáq¹n«¶½«˜÷Ï!Á.©.Gx©uÄ[âöy~·ã[ÎÛý¾£Ú•å øØrÖÂág·P Ó„úâóŸ·h!RK|cÕœžv#¸ YãCŠI¶rHe"1[H¤Pµ0×¥š5§ÕãmS¾Š !ñU9ÄÊë9N:,Þ7NC*ê7úÚ!uƒ¢¾F¤ fЃb‰«º£X^ŒA™QÜ»xÙ²NÔU. êYSj_…(‰·\âAÉ’£šWQæ ßXr¼ ˜^“Gc„¨*¼0¤„j<ƺ9«¡ÒÃ$»(±Ë:"Þ5ŸÕE%;)¢ü‘·x*i6U¿žÀ•hû†;êqÖBˆ·q¡d£¬T!ó.éI?[`•Bµ´(cˆÎªAÌ$:U'Py†”5ËËR+‚Ô¤Ãn2ã"2ï£s¤DŠÆ¦=Ä®óè_Õë ±¸Ò­Õ D¨© ‡N5Þ{ðDÄZ+»(Aéh)í*ÏP‰ÄN#ª‚ÅYGXYˆã›F.~>£Í‘y‡dÐAx8ªÑ ë¹P(m*Dm/QkD£…CwÅf¿íU¼á½Þ„ûß…ñÎæ»ŒÍ»«&º—ïò$oDWZêhïtüþïˆ; 7í%abõÅΫ͡´5.ÔucŒ³ÍCŒ{¦0•§üàßIÌ¿ê¼}`17Ü$;+𡡸Hù϶éQPQmèÿ›ç·/Tä(׋ !uƒ‡w»‡ Îo´ñ¥j.gAJ….rµChäíÀ[·“ß–“-(è±ïÔ\®·zn"?[ÅÏ áýïÛ!ö!ß³Â/AÇ\Ylª k-m_åÈ=ƒ¢ œoªèR6婤‹Ýœýó—(·`öÃ%É£‡(m™ýxAþôc¤}Íø…åÁÿù~ô‚ùó%Ï™þÇ×…DÊ€T¹zØ"JûxRãë%Ž”³ß‰K¯®Y¼œ“={‚QÁ ÑbÄøç‚óÿã`ö’«¿¼¦óéG„ѵOé~tŠp%Ó^“>|‚bÂÕŸF$‘xðO™þé/•F©­´gY‘ò)'ŸROçeÀ-˜ÿp›Õ4”Kø7yÎèÛùÉ)Ù³PŒX^”t?†6A@ªÀõŸÿÆbìÞ1øÝW$jÁåŸ~B¤)&Í£¡d´ê‰½€uì²—Fã]H i¯‹NðIŸÁ³.£?ý G‚NrÒá™8Ür«@eT'ÁMGØRœô#¡´¹H卯S\°ó%Ï>aðÑWָŔÙ÷/¨]FçÑ?SÍ+¬u$½. H>Â׌þò#Ù§¿áäãœëû‘t Ö6Rsžà%Éð„d˜P^^âÉщey9F*MÐ9§_=¢üñGæã:^ŒdB÷“gøÅ5ÅØÓùøa”|} é€ü¬Cõú%Ëi óì JÕ×còÇObÁèÏ?™¾ sòóåëkÌÙ#´Š즓 û)‹o¿gôý¦—GpÔo6iô–1HÀ×Õ ó(QãjŒ¯pÅrK2®Ùè½@æ]~Qµ–BJ¤û]ÁÞƒÎHO‡o›îßp6r³ î{¿(µ”|CÇKÄm]ûB 3ÂGi(!Øà†#Ú´mܾdb±jÓümÓ± 7Œ?ö¶yŸRFmùFÿ~m¨±2^ ¢x5FŸ<Àdb¾ïô·$2^”où¶ÊÁ/óýÇß6Ï{¥Ö2f%ݶ*=B®<…+"%§º¼Ä‹œì¼G°nožßqÌ´h.¿¯˜ßÉ<¿á¼Ñ4tiû±æõ¡iÑIÐ1ûò­D}kŸFá¦cÊÑ¡uó]<¢;»œEЪÑç·³IÚëDy³„>à"=?E¯]*÷bÞyF!W}M½eozpB:ìj{tß~Ó˜wÑkE(¦”—cPúðrGT5hWyãñ{kµíruÓy»¥­²B[êÉ”jV‚VÈ b0È"%§ZPަkºp3<Áôu4 œ[p.Š(Ùè@ëtÐûøœúâ5UÙƒ¨£öqúà!T×,&‚áçp³Õ,žæ¯^Q,=Jë㢙‰/Z+lY€ÎètŽ_S•¡)cÅÆ€äôì„åØÒûä)byÍäÇëè,Î ÌYikÊñ 5‚Ä M,}K#¨fºÛ'ÉT4,ètH†)åå˜r¼¢P’Ä-X«]¬©F! M†N£¥ôºüÈê¹ê› ©AØMÜÀáí[}LÒŶ Þ:RæúUÇ¡­ììy!¢(:%æˆà©6Ú­‚·9Ð7:—Ýbý{0¾…'zàxdüÎásxQ"JSFs‡jOUd-•²FöK!xD’ôšKÜßCÌpÔ„ ¼Óyûpbn_«í1 -©§s\é›sXE…¥$‹µ­ÛeìÞWÌëµúþbþUæYJ|±¤1ÉÜsOÝÿÛ‰ØõDl%bè¦UÆ­-Ã…”¸¢À!H²´‘ú¥…û¬¶B[}Kmè¿_p›ýt«rÙ¦ý¶1ïŸYÁUí¸1!~§ã[è;Ÿ·4s´É¡„ô¸ªÄY—J£Ò eDcMn±Ëj÷9zÊ2T®*qUïñQ‘n"þÛùç1 œ• ¿úÊ^&dƒ [Ö̾û =|BgXsýõ%ÉÙ n:&êH§œüÃ?ýHÈÎ<ëâ- %õxLñâ§»ôžQ|ÿ˹#9=#?ë¢L”&+/^0ýq„îtQ ìb‰W9ÝÇCŠ—ÏAwéò¿\R{M>Ìc’㤛2þæ(«:ï EÜ\éè}ñ ¹ú÷1Ÿ0üìQÔ”^:ì|†«<ª“E}ä×3z¿ù‚ÞyÂè먦%ºÛC'†ìÑ "8¤ Ì~~M½ôׄ4(2ë!SO}5Ý!ö¢fùúÕ?%ÉÔZzÍ{‡ÐêõÌ %,kd¦)®Æ¨N)êHƒY ÷«ØÈÙh@ƒAfiƒb)ÊËKD6$íé¨m9¯p.–UÖ¥÷lH5š£:=L ‹ç¯½º»,_¼dö|iA£ŠšÈBcú}„Z!c;[ u™K‚H­ðå;wtžSÏæÈ¬K>4,^¼Ä‹.ùÃ!ìè“®Ðy7&”>à½% I'èLà–%Î2ƒ_L(.®!ýOc4øºbü·qNÓytNzÚ¥]2ýá‚äÉÇtú’é7?"²"HÌ`Ãv/8ÁQ‹{D „Ø—Fn>× œ¡½ ¤í6 à"í’ž  ®PŽX¼ÞîhõŽÇï Or¾Ã Ú×{§Ê¬([õÖÜ{ˆÕ;?p®pÄây—ùÿvÇGiÃÆº[m•þÂÖæí—3Ìù´»èóÖ<¬šªß<†_&æµí¯86þwý­æù×y‡¯{‡˜EœP‚PØë ¬5dø²B¹k¨ò®b¦oüËÅüþæyß¾|–àJAŽíamHf;»á7šû;1Dº¡ÐP]_ÇdJl$|½skùY¡Rd*q‹™uÊá‹%Á†]e“ЖÜF~ò:\W¶Fv$§}°õžƒäÛÇ,ŒÆÍÆ”WS„1‡´ qälÛ¿°½ïñw9o×J9•5=&>:Æ %‘JbçÊëæü1i'°øñ5bmù½ùÁGðG¨h¢ãë:Š]H¹â@ûóŠáÁl†ôHû)Õõ”Ù/1žÑz&ßHNzØé$zÒ;MÿËÌ¿ûŽŸsòñï<¶¨±ã Õt—“'¸é”²äÎH:·¬Iœà¦LžÏ1†<^¦dÃŒjtIŸ=%3—s²Gçhm©æ¥k¦?^€2@@jéÞá–žþWŸ"ì5W}Eþñ' ?>¥¾¾¦º.ðÁâ­ÀôrÜrJ1*é~ñŒDf?¿ÂÖ•æh È&v¡<Óof9^¥HÞ;TÚC%–òzŠYä7ëšÅÅÝ?#ÉäFòf•Œ…ŠàB5Üo-¨g*Ë‘ªŽF­nM‚j/$BC9áÉIsÊG GaÝèŒîãìtU>\M=/0ÃSzŸP¾|ÉøÇ+TšE}mïðÎ"0˜ntXŒ·`ð®dssBà킺ô?~@}uóŠì¬ƒL IJ¼êbäœëÿxêôâ¦î£Y‰s’txB’«*BHP™^7¤.¯Ç„dÀÉ—ÏÐTTÓË«IÔÑV ùG 3úúúôœ4•,¯ÆÈ$Aéå1Ïá8Ûðt9"ì¾Ç <æ˜uÌ•k}¬d‘BûÍü¨ñÊ{.‹Ý„@s´:Ö8b¯Ì2Ò“Y=°æGâ°1!9:ž–&Âí]Y­£(ÝÆ”?7II=]DI-%ž‘!vQ"’l·7cõuœG&i´òvvw@ɘW¹¸¾û¼˜oa7fiv¶ ž×WdÓ/"4ÉiìŽ,]Ø´ß¿û˜·ª%ï3æûÏ3o?oBª2V“Yéô¾ÁvàíJXÁ»­¿±>{ B;|妃ÔW—ѹRq_¼éìi@¡¤øÊî:ȾmÌD'FB½ùì»|§ûÆpÓøÆEzm¥Î±ñGÎÛU^µâŽ7†R›Í¥uµt”À êi… 1)TãYtCÚù{=;RÊ WVMý¯ÿ8Feƒî³3Õ¬¤¼ž!TFrÒ!t±£×Ì_ÎP™Æ[J’˜•ãÀkò‡1]ÁòÅ%"ë!üœr!è<È).gdNqEEÒO)^½¢œL¯ƒLB„Ò42Ï"B<_à­G˜Ó5”ãAuè>`§×׎üÙ9*T,_bó ” OW ºT*©'\%ЩÆ B’Ó}ò€P $J;f?¾ÓA‰@ sÒEÔõ¤ñ‘¿tÖÇWUcbåL®X¼º¤¸^"BJ…·Be˜A7R6êhÔ’ zÔ³q”»Ó"R’ „#”.*1„ÍZ5Ú°rƒ„¶õŠ Kȳ9ÁÅÎáô´9íR¾ºÄV݉›¹êô0]EñâOJzv‚É"U//)Æ&7ë?"d‚îæ,ÞÆ†‰(X6úsû®@*ŠÊ[‰ÁÎÈN¿X¢ú}ò³.ÕÕKŠ™ pJ(ø²•’œž …ÇÛßõ…ØqtÿQ•$$=ƒ-*‚W.©fKÒ“²Ó”å« –×%¦›#œÃ;e½'àc™h´s{Ñä&ÔönR7oÚ—<Âd˜a±*×os׸)9<¼¦ßœLÞc|Û¦·ôì&è¡mÛùü†·'ŽURܲqr¬›ô®ã·“î¶R}[³RÛømzB› Û‰ýz'mªOÚ— I¨Tã’äü ì’´þ32ì¹0È1ßqü[ÅðaÆ|ÿµ*Á5´:[L/kԓرµ_9Á@jW1ÿŠóâžã]ôû{Òa2ÙºOî€ÛÇöÕøÞÖ“it#{èéú°v€Fe;›â¬@%&V›oè‚/‘tb”µ»çÈ[Ä,´ÂΦÔÓb×Hì.4‹wâä½ÒËOÁUøÚïJ‚Þå'„I‘‰ŽýFˆ¦ÊìÞ­È4ÖÈTáæ3êyÁ6ïñÞ„@J‰Øªkl’üUƒ©˜ˆÿöŸ?&é ÎÿåKŒ¬)G3f/FHÓ%=M‘IB}õšùë1"I@H´Ò¸ºŠMb&'í÷¢“àhJòð1¢¾b13 'Œ¾»æäwŸS¿¸$}:`ñí,§’¤ÛAwM\ø¶ 8ƒJ ¾žSMæÍÌÈô(G—xŸsúϨ¯^2þ~ÁÉï?GË9Wÿë[BÚAiƒhÝL¿É¡šL°Elîq³òüg_<¤øùs6DÉ’Ñü€“Ê „Ééõ{ýšé陉¼Ý,Å׎ô¤ƒ”ž€Dw “¯¿còbŠÎRt’!„GÈ”dØinA5®tè4¥š‰r*ªáòvØyy¤]Bj°~<„ Êñï£éJ÷Óg¤=˜~÷š 2tj)' ’ÓÇt(Æþ/{$½œô´Gzš2ûá'¦Ï'¨ÄDýJ%"%t7¨m ÞV/Ö¨Fp¶ŒoœæB‚Ê$õ¼D¥®^"d‡þW±×Ïÿ¸¤÷ì1¡œbçs)ªÓ‰šár»QDà«’’H½Šì,§º˜€Ê¢búÃs²gŸröÛs¦ß|Ïè»Kt·ƒV&^ðV]Ô!€W˜AŠÝ½A‚îa7£·7• Ž55lŠè¨¸ÒwG¤{öÜ›å# 1áºm|›•÷ãÛcΣ{ÑÞ[·[’½Ñ¨aÅ7 ö¨ñ‚8xF·©ˆ­JÀ]Ì&öÆïÇ µ¤/°…C&&:¯6ˆÑq‚+pK‹êvâA·eš\¼Ì¥'YTjþ1s7ƒws»‘Êmã·CqDÞìï æƒµÚ2~uÌ £âÚXºX.–"ê|KJ¢Ë-[^Á̰‹éè]ŠÏßAÌï}ž÷ŒTŽÇ À[Ê«YÀˆÃªÛ6Z{Ãvû>,šÊÒ"þ­îqSiTA‚Lõt‚­Àä;厧@8ü~7=>1zíÌË-1ì5pî;¤jÝ8¢ |¹Œ*aJ¶[…ßå<|ãñ!6û¥ Á/›ËÉ–ôâê™m£Ë- ¡³H“: (Ò:¿±éwF5Y‚ÒÎVJ'{•ÕDs±måýÏcðƒè"˜àˈ܇+-Á{T·ÞŠjm )„À»€î汤`£ÄŒ0àç%®ªA„«¢¼¸Ê¢²hd¡:Bµ¤žWH­cò%dœÂ.ὑáÆêøû²“Êx襧ƒxèY‹,¢ÝuUPO—øÉ𔤧±Ë »XœÀœöãÃ\¡¯ÞG“ùJn>§^Zdš4]²Qu@¨qVšµË\üM§žÎŽùmW®qÏ3‚­pEt1œz2Á–•w¾Æ–%ª3À¤¦áÇ¡07_b—åÆVxõÙ.ª‰$2Mc,vK^Ç9DÖöÞÎ62opØÙ2Îq]âêŸ )¶¬&'9"\ ùRnøcB€Òø² žÌIFrÚCxO¨*ªé ï5ÙùKŠ«)véP‰ÚXEkçbe›+B“¬ì=×&¡Á9Þ›W©÷ˆ46¢nÛ®ï^lïiñúžÇ¯ãÎVÞQ^Ph…»RK·[ùn’CD¼m|Û^|Ûø­¿Úa]»ãÝRÃŽüœPçZ`g3êY‰QÊSf1‰FðÍÞÕ‹òGköVL®±¦­¼‹ÞWÌ{«B÷y~w1¼ÿ˜oŽ!lPçUìÜîÇ+EXΩ—sÚo*P[ù–Žë í¹~˜1`ó¼º|{KðÍù$Úäøî²OÞ6>4\Úú]SѬ êÉ<–ûCsöKâ÷ó±*!´\ñF°ç®Ðf<Ò`]„w{-ˆw9V”ítŽ«lü½-‰·_ç'\¼ Hç`룣Tíèø6P|ËÙÓ2Ï;ÃFB×Õø²^7|ïcÞ²¥/¿zß›÷iÅ• è>²¸øL£%õ"&”éÉCLÇãeüë"PM,Ãß}Ž¢¤š[žäÁ)ayÅäû%éi‚NAtй`öü‚ôá”+‘½!Ø9õ¢Ž%{@f}KÊYàôwŸR¿þ™rQR]– þð~üœñwsNÿÏߣê+^ýÏ0½A£õÛÜŽ"9=A§” ]ã}Nþh@uùœ²2<øO_`_]aË’Å«)Ãþwùœëo¯ >?zJÿóHWÇ&¸ô»`-Þy‚$ƒZrëâÄ+¹{Óð~ëù6ª Í OdœÇ/ˈJס¢”™LSt¦©G‚JЙƎg Õú–.&”¤iü|ï@kpP7%)¶Èc¢¹)ÙÅ+•%±´ëüJg=Ÿ®¬6 :2Q+Ïë]Ú©³ØEAb#@u;„e[V¨n4«‰\ê€ÍñA¢2ƒ›—è“ÊD% Ã[ßXwT¦±³9èhὺ=³º®8FÎÆN×N_æø‰!ÔU\Ë#"¬¸C€o„ç*5„Òbh‰îfÑr½(â0²¹0D+u»Xâ­Í“BF­ê$‰å—²nÖáV¹çV1øæ¥òá"ÑÁGƒ•'ëË×1¥!Á èÊ­ãÀ†Æï¡C·RÖnÖœ0™&­zKóG[í¦æ’aüÎï4ˆ1_ÕÃ0cðe\+;™DU e4¾(pUäñK- ÞGÄqå,õAÇÌjÆÿ.ó|,æc#–%}Y7{±jé%ŽH𷙥‘j¸S¡ ÈÔD‰´Õþø®bÞŸ·wó‡:ÏWÚønÝÅ;æ}íÃ"*=l_èݲˆ{„hΦà›JUœs±ªÀ*“³;ð}£ê‡Dw¢AÕMÎßë/Áü§+lS²0y‡¤×#{Ô‚"AkÏìûŸA÷0]Iu¹@u ‹×/ñޠИÓJ—¸ªa=ÛHEIφ$] 8P^/QÓÓ v±ÄÕ"ò>ÛðÝœG*ËÕÿüšåRŠ’áï~Ëàã>³_R^Îð. „£²ŠÞ§Ÿ –#Šñ„zQáB¬Œœþÿ‰ÌLyõÿüˆéöšÇåA¦¤'C„tÇÏæŸ_âË­hõ¸'éOƒHÝX!ÏmRBûè^›%÷¾,´ZyûdìZM Âq9¤íïu0žõæo†ytŸt[¶²»Yÿîs o³ò¾•}ÄîxŸ'z0~ÏîXìÎUðŽj´lÕ&#©..ÐgO0bÄè§‚ó?|NñâšôAÆò›(ˤ1RhÖD–bzÉúRz¿˜oŠá]ÄÌÝ­¼Æßqž›ËíVÞPÌ1´Ä¼ªÖ³[x„Þ¼ŸBIülDµ¤NbÅ44À”X•ª-*ÏH ý®b¾Ó¼½YÌo=Ï‚ÝDæmc¤TÓW³Ûà+n°Í~Ó}ø`|Û> BzªÑ(r¦€!ø€J{Uã–%Á[l¡IÏ:„rŠ÷ªU¶o½õ‘ÄóM„–ÊáN‡r#­YR]ð¨Í÷†(¿éøÕÑÝÆ5Ókê9¤N"UÔ¯.G.ôpØ´š6åå5 HO’X-„PøjFy5Ôšäl4„³‹’þW_ñð1ý÷?ñú|Ìó†ÂAÄ2,˜a§AY|´L®- c÷¨³@tR©ÆM‹¨`d“ ¹hŽ!B£,gHw³h¤ØE¯=ºßi©=ÁÚˆhkÕ ¶¡¹,ùÆl#Þ”ô 'ÕÒÆ2„Û2ߨÖPÜ£WÜ²ÐØ1®”¢„eAUZ¤2(puÓü¡¾öQMCj´Žæ"ÓØY "òyÃÊVIÊ(ýfk„Nc?\ˆMQÁ9d–Å_»x+Ù®mHäÄ…ª>”sY#Ú_Û5×2ÆÀÌY\M5­" “•šhUn}ÓÀhMIYeQù$ˆèàè*‹TªY¤±9ÊY‹L³¨=)eԻAš]”ÛÓݬá0êYÈuŒÁ-–x$¦“6¼ä•`|dm¹å2ºÜ6h28êEE–£»,£ù:AÖïtUI]ºØ¨QÛfÞã÷kXˆ¬·ââ/õ^WiPj¸í¹dò¾Çßõw‚@×sç9ÜøÙšÅs8NŒ£‘¡S›ÊNp7/·{·¶)‰!Kœ'ø¢Fæ&V¦ÄŠ£V™§¨TÆFé(æ#äò|Þ>œ˜…;/ A6ÚÞ{d)cµ‘ “‰Ù€Í.® ‚³ëƒýÿ›ç{Îhr REi»ð®ö¼·ØW…–±7j]mò#±Ĩk¼ØÇ£e±ãgPÔ£www÷†Ý*áù³é+ˆ™ßänÐP~7†3ÇÏsÚyô! Aȃ,ì<ëuµ ŠTžaº vQFyR%W*ƒÁÃÿëŠïŸC~Ui‚N :OP©¤¸˜bç%"MPYJš:®¿þ–bRÆÒÉéúG ^ýßßÒùÍo<Ò\þ÷¿à„&ÈŒ³ü‚,g]>p¥Ã{‰›(¯g¨ÎAÉârDÒ d ^ Ù£(Y†¦,¾ý‰ÅË1Â(Yl ÄW.6z‹dÚA¦zÕH°KªË1uYáEJïÙCìô‚bZ¡³Œ°,Hž}ÌàIÂüû Â/_!’!i¿îŠheí é`* ;D5ÃՆΣ„Ñ¿Cä=”tQ ïáa1¢˜T$§g$ƒ|ãw¿Ã/å)__#º§$]½Õ¨ÒpuŠÙ–Íæ¦Lœ@wút>}€½ü‰«ÿ¸@%•è>{€_⊂bïûû°íã﵋h¾2ºÆMñ¾ºQ\MÂ&JQŽ'¤¤yŠoUMòØeJ“˜ î_”ö•= «w®ªñ¦ã/šœ-*–mÓ(„2äç†ÑŸþJUvè<8Eg²%´°çl+ÊSŽÆ±z.Û*Ê»ŒEïj|hôÙ¥ÀNt~óºš×ÿýoÈ,k¬¼U2ÈöpÓ9uIã æp…G÷»(¨§U<|E†lØ¡¼¾Æ6t_[’g(_²¸˜¢O†˜DR]MJ‚ÐdgC”l2z¨g®¨Aøˆl …”Žº,:Ek…«*„6H%ðe…ètPêÉ‚€ŒÜ]¯›êiCÛ·ŽžrÔõ‹òrÞE<“eW`«xë u… Éz’êºFO9_"DŠÉS” TóÈ mDÌ…ÃUÝí¢ey1Eš!šÎàÕ¬H¹ÑdƒîRMýVý)–jüš>»J²·­õŠÐ˜Xè~áç,¯ ¤Ñ¡ÐI‚ﶬAj²³Ø2Jý©¨Olä¯{ïJ£ÓFK¹)+šaPר¢ˆ¥çiJ2삯 6Þ¥Tã¶öíàG S:gÊ‹k¬ßë²±[Y'„W{¤”‘[š|½ÄÖ“æè4PÏÔµ É“hÏ^Ûèo¿óBI”1ˆFô%ÚyƦIo‡’-½ÚwÖM™éúŽ—žZQ’ps¹êMÇ¿éwo=w-ŽpÛ´©÷ùeǬ¼íõ-N„·nûF Û禔Ú©BIܲÀΊµ¢ÏϨ)Ç ¹]1ZÉk¢\ÁZDšazÑ<ê—Ž¹]¿ûˆÅó±ño9Ï»{ô‡s{ íã¥Ô³e“@o™{¬‡„õ¿Ò/Þ¹t7&D¦ß‹ÏŠ(úaÆü~çù†n/µÄNÍ™.ÞÍž÷VãÃNócðáÆ³D-ËØ÷Óô`E¾rˆÍÇ(D\F5°–üøM< îSt}ã…-”ŒXÑÕMyq…ó)Iž!uìQ‰i`Îú©x¹h5|]Ç ‘l¸ê[(óaŠâ"#A*¤¸²D OHt ¸œ"´Úr" It"œ_0]Ðýüc´^0ÿiНkTÿœìDR]Wtžtýékœì T|A¤1`A(„«‘'çôÎ5ã¿þ@PiLjšæ·´ ¾üŒÞÓ>³ïŸ#óÒ!ÌþöWƒLz$}Íòâ5è\E5/|õ%i(¦–ìá öòóWKÒ‡}êË)fxŠT[.Á‰Cg·&Eæè\á–2Ë ¶&{tŠ‹×Ȭ‡/'Ø…ÂtÅÌsúûg”?ü@1µTóšÓÿôöÕÔò„á''¸Z\ÿõgT÷ÙyŠŸMð>ò•Þ8NI-Q™^¼vi#•abSÊ1*Ê®ô!`‹Æ^²A¬««+êt¯ƒ/ç rL?#ø€/ç”W#Ð}†_=E…šååÙM¨^¼FÏQbÉòbJuY‘=";íªÅÅ‘w¨®¯É=Æä‚rZƒ+¢ìaÞ'ö vÈ4–/e"™}ÿœå¸nßÀ¢“¯]¤”ˆ@Ønukä}Y ÏŸ1|’qýǯ é)ƒOΘó3½ß}‘ö¿9ýÃ?ç5W~ÑPŒz$'݆ov>sUÆr‹ÅåÙ铟€­šÍ8Ò\¹/ZÝöns" Öc†§˜aF¨]‹Ns8äˆí«€„C„ë }'û¼Ëxv¹q­Ö¿û:Óûã#‡Og*ºr…÷eñ|l|Û}ëß=«`ØÂÆj•ÜvF#RÇ$7Ì[s¨' ;¾¦¼^`NÎâšÛá»{ö-”¥Ñ‘ÂaÝ=c~»ãÿm­¼¹˜ïekMcù«eÓ”í÷P ¾¤¼¸Ä9Múà mä=\!nÓ¸¯³˜8…p“­õÿ­¼oˆ™¦áß\å@*Üú>s$æã¨ûÝöá u¡Ç×TÓ2RVºø±n4^%Ïn>ÇC÷“HÌ‚é7Wè“¡œm*¥û@ÆMgÕÎ%à=8 ¾éx2͉:8£BbCŸö”×#| Þ×xHûgQÍÆ9¢ÙÕ‚jTbNN2 ŒÄN'ØÂG©fïâ»Ñ‚`»JpöÏ_`¯ž3úvDÿ7ŸsòÅf_Ëä›Wˆ4ÝÈØ¡ i¯‹±±/{ò% Êq…¯+\‘ia:ä2fßý„õ:ºiâMIȆ§^¡NÏè $ÓoŸTÒxÖ×ñyXO÷“'åY^LH<$É,ó/qN “&£Â䄺 šÕô>ÿ˜¼£('‹F{yJ]*’a†›W¨¿ÆôÏIr‰«–¯v¾GpÕíôҸʂr´¡·šXo Ñœ¢K2H×ô‡PWTãå¦ÑX‹¯"GXXBˆ®GEðÕdªKÿ“3ÜtJµpéqË:ò³C‰«­kLo5£}e”ã éÃGhé¨fñѹ _O&t ‘Â#`òíÌG&KPky¢>î¦n¯\¬2´ðÕ‚µèÓôN&û¯»dý”j4£óÙSüø’éË9ÝOžbTÉì§ B „L£=<¾N'®*¨gK09i¿³ep"Úã«’\Ü6‚°}ÅŸwoÑGøîV¤Gi"¿Âø´gó ’a7Ò7àÐâ9´•ÑnKˆ[Û­ïq£ûbK)ðØw ¤ˆU¶r4ß2D¸9æ}js ›~ )n|®ë÷¿Ÿ®›ˆïó‘¤ä1·&V÷œ·w5ÏG« `Ì1Üa¼Ô;>kÎé*ù .ðR7=i­°Q¾BkÒal¸nÓæó!Æ|¿yÞúN7Îóí1/uc©¾¨›~†#ïóÁ¾wOe;ï« çÙÛÝ=g‹>'Úzž%)·œc­¦óä­+ŠKTÇàí26®äÛä8nìçÔø€@Ê¡öt÷‡Ë{§¬ øï!é#5ι¦¯¢^XtÖAªèøYϦÔeh¤EREu¤uUÀÇ‹³‚Á—Oq£ f/t>~Âà“sÊ—/™ýxHÌ*•h\Qâ›2TÔ2Ž_Ìœ?¢÷hÞãc¦ß¿Fu(á·Pðe®ðÎBP¨D#¼ÃzAï“'$ X"¡ІêâÕRÓûì a1fñü^téò€åÏÏ1Ñ}˜²xqÁâå‚GfÌIá–ØÙ²1F ˆ4J·ùjI°«å~éÀ³ÑŽ‹î…2K ®j„DfÁ×Ñ–Zéh¢S²aŸÂDÅtÞÇ‚WøåœÅ/°(L'Cx9¢´Ø¢€†fSÝÖ¹$ºï¸¸áH-b"¸Þ{v¹:Ѷtƒ¬Ö‹ ÕKñó1ÕÌ"UŒÏÛHIN‡àæ”—œUt?~H:0T£1åÕ2¢ ;˜nB1fòýK¼Œ”©RºOá«A¥H_°øùÑ?¥ûô é-Á-˜|ûç5ÞŸBÿI‡ÙO/˜¿š£ŒmÏ×Ü5™Ðûä”òÕ+ªÅ7iGŸ±ÀÖwÁâj‡4:JÉH=X’™¥źeùZ7½f“R6¶éoí& 5õ¤À ¸ùŒ 3²G„³Ô‹¡ÁVÑULˆÖÌ*X bÀùãN79pÞ~ñÛ<ÀÃa£¾Bˆô{±)-ß ™<†@Ý6^Ü\òÝwÙº á"6Á²Ò3—ûϨ…Ú¹îÂ(êëk‚ÈHN»)Ëæáàý¿sÌû(Ý=b>–|Þ ™ÜOzî:Ïû1´çÐâù‹ùnhì~ÌQówí"¼Ãù”ábK’lÏ®FzÝ7amÓØ¸€Ð!ª{„»¢±¿tÌ¿ð<ß³læ ì}§ãï3ÛÊï|^]Û8ЂàV òPZÎ{T·¾ šYtžPOG sL¿Ô.úNø»P8ŽÞ¥XAWÞëø•àA†Ht‹A#.Úèk#DcG>¦/ICû­¢lèª?Ë–ìÙ3:')AJülJq5AõN¢š[]!Ô&qµEHƒ4 gõhDy9‹‰½”[ tšàëjÃùk<¿}U£û'ô>~åÐ~zÁb¼@&9íÐ8†Ë¨8\s)U¤u’áWŸèŠÅ«²Ó‰|ç…æÞžvñ‹9åh‚ó†ì$§¼œÐùìzOR–¯®X¼˜FGüGÒ‹Üåm°Ž¼ceñ¶&¸­’Œsxç7S´e!Б‚â ‚ˆ6Ú¾¶È¤‡ËÑ”¤×Ç.ç²h]žDG r4Áœ>¤ÿÙ)nº xuEy=¥vޤßEµ€MhT86ˆ²[/æàjª«¨Ó| 9íÅùÖ&µr€ ¶¢¼šGÔZË&¶] Ë2êMjMKª o¦ßCPPŽ&x›Ðÿòi/0ÿé5õ¤ÔèÓIÏ`§“9FùK´[7.I·õMÔ5­®'X4GHû”S&ß½À¢ u`ðå§ôŸv™|óÓ礉ÍR5¶ëÁƒÈ~yNñÓÏM½Ï³ Îá½G6víÞ¹æ¶.cš€éôѹÜâ2·Xa3Ei8ò—’rRbº9n¹™“ LD€‚2‚¡ÚØò¶%Ð!–¡”ñûn¤|ÜÜhq¤,ö®Æßù;­xá:ÚÚ ; ×¶¼[èV#Phk"í q¸¡éHÈèp$Aoþw EJ Bݼ?¨†“zCÌáxù3¾cWx/£ºŽ÷7–Kw*Jͺx_1oÏúZÂaYü¦yÛ+sßožÙ³`ÞM^ÂßIÌ»kõŽ1¯ÐÏi÷èµ$‘Êc52K_…ÆÈ!T‚Jõ¦O&Bñ34ê +Ï[b¾ë¼… !"(¶•tGêö{˜ç6c¤ƒy¾}ÞŽÆlv:§žÕ-spÇ=ï˜\é> óÖû°_áÊ’¦m-þ¥•Ûqi:;Ã.%¦#)&× º¤ýB”, rã껟mrä°ÿ¿w.#¿âøB¥Q??øµ÷ıó\(‰+æTÓ2zz¤:J6&„À•5ªÛ#í$  ÔuL’u•s‚&{ØCÔ%¾yϤRØe@¥£ºšQNf­WF*z »¤ôQð»A7e–¡»ÑM°ž-I•*¨«FÄ[G³¦ÛØ—E2iRdžD+çe‰‚º°$çç h‰[QúÎ[\QÆ›¹Q¨$#Fn²L5åňjî$žÊÓ(LïâC Ön¹™5î>>–R ¼ó¨N¤•/ÂþÂÆGT;I¨¯Gx‘’÷±ã+ê¹C÷{øj‰+«ÆòÑâkHNOTÔóeü›uLôÌpH:è᫲éñó”—cdÞÃttL¤ÜY<Á‡õ&¶*å„°_Îl’m/"RNEu½ˆ6ÂÞ¸*Þ–fSªé©B›(IX8L¿‹/çTóŠôìŒì¤Cñê‚ 2LGP¼á H¢t‚î˜xÁ ì-D¤\¤9*!¢‰Š¡Iª§„¦ÁÁ[5Ë•BÝ »¾áòmž½· ’®e˽X¬›ùD#K§ò¼¡Ÿñâ D”T)*7[\ñ[ššf…à*Bµµ†hŒ.TcñI¤û¬P _—à%2O »‹HoI‚Β͸ۼEáx’ûŒÍr!º`ºíýNì¡7a‡Ê}£5¯¸ïø½³á.ãCSÍÍ‹—Ñ;>£–ç$´ žL°ËÈ¡SÝ.º»jüâi°&QÙÿï³ØkäzÛñ{¼ïƒy»ÁÊû›ç_?æƒäí.1HÖX!ìq,}tj•y†+¸" û„·È$G÷ÓÍ~6F;¨¤ð[å~q˜ÜÞ7f!àýÄdõw>Ày¾KÌžxi{C>´}uKíA¬h «=¦°ó¯Eè™i|Y‚ÈÜàëÓ‰¹µ>öòØpw©½ù§‘ñJ#³{nA¶EsfûªÀ.Êh£¾¶ˆ÷‘'}2@O]8p5¾¨Ú z]”v”× ’³3¤ðë*£±E¬.FÚ‡‚&â¿ýë?ŽÑù ûì1Z–£ Þ ‚ ˜Þ€ä$ÅÎ&”×sd6$éKª«Ö9„ÊÉ}Tm³ílB5³ ¢HxzÒÃ×3ªÑŒ¶´d’¤ñ–ëk‡0 7±¸žc²:‘`rúŸ=F‹L“ÿø‘å¨F¦ÛÇ ÓFÞDà]SˆRpÑÑ.ʨÑ1ÑÎä˜nºcⱡCxò'gà—Ì~¸@˜I?ÇÍ£M¯Ê;;gqy…î1*à@àÔ‹¨KíëW;Ì`€éäQ§:€PŽz²@d=”¨Ncå»6R ›í°ÇÚ*½ )EA9.ÆDËÐi…êõ7ÔÇùªÄ–5‚€4]%ÅUAv> ]°[Nþù·túpýï?@6$?Ñ/.¨*‹Ô©r’AB=¾Ž®‘R Sƒ]VÝÁt=®’˜~dØA”#®þò6$ëï³qp4(¥wyq«Æ{œm±”MwºÜ2¨qÞ£´¯I‡¤©©ÆSÜ ¹ñÝé“ ÊÄÚ¾[–êvÊio |Yï6Ë¡‘IŽPáp|½ Ô™™ÝÒÒμ5/´QQÙÅÖ„Úït°Gh±©¦uGƘp(®ß6~m£½?~Ÿè(Mzšƒ·Û„ÌvÓ™6kÞ7Ï6Õb¿\Ún¼°c¦$%¾,©®„¦ûúÀ¹-æýJFƒÉTâÊvQ7’‹}tn6ûË‘y Þ£»GÞÿ;żݨtSÌwÏ®TûóÐn°ñîçy/1úß!榉Í.—ÔS‹Ð¢Ñ¦×QQ]/Q½·œRŒk̰Ñ6cu“­ÓÐ8©éa—¤·gý½ƒÞî#Ð-Ê[FDOy=Ç»->¶ó¨~‡tݾVßdžï5o÷¿5Vj…[”“òàÒº»‹ö*å»Þ‡ï<>JßÙù [ù¨´¡B¤¨,ÁWSªIM2<`ÉŸžâ§sÊe v‰«ÃÖ…k 5÷~w¯ã–ït£„â/5Þ#DŠ4šFÐý ‰ØèDûrF9^DÒ³h¼&lI½tœüá·dI`q1ÅW‹¦Ÿ«CrÚC‰’åËéƒó(Ѹ&ÛùïÀ[K9]@íAŠ…ƒÁªT³’qJƒEm4OÁ;‚‹Pyì4)i¸ˆ~®oÅÁGÉ'õ"Ȥi– a ¾ŠÍk*ÏP‰Š´_Q/ ‚o,œWÔrcš&æz+A’;È¡îucC+ì|F=+ѽ:×kûݲ†ˆr0Ë’ £Mùº Z6BìÞ#Xñe݆÷ÝÈæ ¥77Þ†báר¸ˆ¦+ª)C¸€H«òµ¡H¸-ÝZð.à‹%¶ŠruR¸Ø@¸nlSM)co¡JâË¡RÌ ¡/1á˜am Ø€t *¨–•%—4Ⱦ)Q‰F%šz2ʼn4²¹¹iT7‹æ9Öc碠l×ÀÎñ®ÎƲ˜ÝrŽè¼Ûp÷V›ŠQÑx'ˆ=™¨•¥nÕÐ'LœÃõ<¡]­+÷ùZ[nR­ã÷6££Àec¤“dè^¾Õ¨¸ŽÞ¢Kw@{GãC‹œ’82Þûˆž½ûlnDWß÷x¥Àú¸¿È.ž¸é™nÿØPkgs\éу:O3(¼tºÖ—ªÕ¾r¯÷ÿ{¦·ýÎ<Ïï-æ7øMW¸›Íp̰Õ‚zn1§}ür¯#­Pf2m¤X]ØMBÅ~Á4¾ƒBÊ–¯Ónͽ&Г2¿Úï÷ÖꛞUÊ< +N~‘ o¿¿Ë}»ežC©"MÓ-¸’¬JÍM°i–Ó2Jbú˜'E…­óŽ`="ÑMŸÆß<ÝÈ=Ju¤*Ö6÷–÷„ºŽ¾U"<¾°¨~­¡ž.YŽÒPf ­ŠzYêäè,AhóÕEµºpMÄý× Ýô?}‚ ”§¼!’Aä}$|Ay5¹„ôô6eªíË€l¬/§Í-d’Ñûô1I&À\YQ^,qÎ"ÓÆH#hLZrù?þLIJb’˜X;‰ž n9‹¦[ÍÁÖ Éph#¨'cêY…žFÕ‹•ÇüŽ»DOùz„è IzfCÄ¿éF,D´1>é5ÝESf 5É0‹ ªI-C£Š!ÖÎ„É ç6]Ê«¿#¶;›w…ã…RøÅˆÙôé²A²QBÐ ;/°…Ã3|e@–”Wd÷§¿=añíKäà„êõ êR’ôzt¿|ˆ]0ù¹&;Ø¥@&_8t·G°–ÎÇg_qõÇïé€Þ£>õt„w†ìáé #Ì/¸øŸßPû$6 Æi”Ô{›{h¨3)éi©VŽBiõtL5i¤~D,_!s²³"Ø-{ó-”Q+ìôjmÙÜ·\nF÷mNEË<ïp¦÷mQÙëHß©?¸ 7Ã9DÖPˆÊj‹SØ‚¶íXÈî­¿6ôì(»7~¿ô¾o¸àw×öþøÐpГa®ÞâMî7/„[×ö*AoCÑö8–wµòÞâd ­ð«ÊÚ:X|¸1æ]“‰†Ve="Øù„âb‰>9%?É#BwtÞvѳ`2O›gé6<Ñ;ÅÌÆ¾¸eÞij‰°oš!öåÍÚæ­eü»˜çmKè”îC‹¹m¾KÌB)¼³,z‰sšäì„°ŒûZrzN¨ç,/¯@dt?@&¢AžÅÍÕ!6´…6öžJYrˆ¯À*¹Ù[âY•’ šµúKÎóÎ<¼ÙjHë^©n^‚6©©ê¬)7‡_'© \YáË™$ÑY7„ç½÷‘ĦFœm.Šâïfž…ø²ŽH¿VÀYð&ÛOtç ÖÝZñ@2öy¢{(ÌÁÚÞCWöírhv9“úˆîèxIô»kUˆc(úB´½¶ÄÜ:þNê »È„Ô »Œ: R«‘NàM;O õ‚r\’œõ±ãëÆy99ÅtÌÝÆ™Þãc7Õ+¡4¦ŸD]`—˜q]9‚Þ0~ÞZP÷pÓøw6Ϙþ|h1ß{­®Æ0:*,Kv¤ÑV\zõdÄâÕœäÁC:úøÊ6”‰[ècïóþÚ»ëÚn[«[|`Ñ ÝÁ:„Ö$«õÞvž¹û¼½ÍÊ ¥×ŠSq‡u"»jj»´®²[n,RÉCÞ‘µˆ$]s¡£,°ÃΖ¦VrT*O""H‰/ \å1ýÎ&1Þ~¡•Ä-–¸¥CõRÔÊ&{§¬qÈ3BmèE-=z»¶½ˆÐ7_âÊxÓBDÛõÅõ. ½ZIQ¢ÅƒÔ]Þ®Q5”Fg;™ÚXc›~/ªªÔj‹È»¤'9n6ÃVÝÍ‘€”r<Å6 Rªef8\[\¾­G|£ç¼zöw¾®ú›o«7Co9þWOÈMñ—þJo9>øhü`ºYûÚ¾…Þw\7öøtL7ú.Ÿ÷#™h|Y`—v× à¾Ïh DÙ>!e£’uƒ$juIJ½ýoQÝ1ÍÞ'Þ>æ[ÇsD[÷†ßy«y~1üò1oþd¬~Øeµeæ±·â›îké^Zm*žïûý¿ãïI‚î6hÝ^ÞóAÍ3ìòH‰/ëX‰]›Ú|ûêíãÁÙF‰BAÛý°Fm½­c%Y©&wŠçn V•×—Ÿ©¾á!­”ÉÔŽüÐÈÌÊæþ¶Ž™Í:2j®“¤¤Ãœ°XR/-¦ŸãæK< Óï µ§œÌñ6RKƒcÓ(.X!ÐÙ óô1R”ñfâÅ!é=ø(¶¾ˆµ)›_,¢Ùúöæ‘:C¦)ÁT£1Î&œþãG”/dqéüæc²f_ÿ@1*Щ¤œL ;ãô«,þö^åõ² Avz†Llä5\Â䤧Ã2À–ç¼L º£72q[·=;嵨뱟DTy›/@¨ˆÂÙ…2Ä„T¥rÝÀ·– Y™rì!“Ñ7Äà­Ã—•« RÐfñ,ª“2ÿî{Fß]¡R³v® u×Î~÷‰¶8)+Òh¼÷/^c—Ýïl_.²Cþ Ãô›ŸP§çÈjêž=èÆ†ÑÒ£s_X6¥éF#4þ3Å«KêI IL¦Zàg#®þôµOH:9JIœ­ñ›Ð:"Ñ!4W­’a!7æ6+nÜŽtÓÊ«åEÛÜ>) õWÔ[-7ܽ ñÁ͸müÝäzûBï"í’žÀÖ-*·qéØEHÞåø6ŽíñMEgòèÚÞ±_ó÷ц#6¸k Ê»ŽßzümGˆæÐ´¸„‘‡HÒ¥k‹y‰‘„zNyµ¤÷ÅC?üH1ò˜®AzÐX¶[÷ybMsÒÓÐzn‹YQ6ØS*`ŽY¶s¨p°¯²ð>æ¹uÞøÀcf{{טãÁm—¶=–¦Y&Šz|ÕXŸ“œt¢jÇ]ßç}´ôÎk»e­¶ñ±IÍt'RÿnæYÆf2[ÚM?Ì]bþ¥÷áƒñ2ZFQ)BËvýä6ºùçÂäÑ£Qþ·ñPÊG‘t€éé¸ý(A¨–ø¢>0Ãy'ç盌÷¡³¨xÕ;‰·ˆ"B ì|J=«U»L‚¼u®i$$`—5ýÏ?ãä7™÷=Õ2!?SŒÿã'TïŒüÑÂ[³^A2 ØÅt2’ÓËï¿çêßBfÙJZ tž#ÖŠb+ØžhÕP |~WÊ!fþ›>*±iГ’êÈórŠüñ ~­¤Óó”tT£(-»\LŸþÓÅÏ/ñ2r|­(Lš#µÅ[±FÊw…Õ7/hpÕÉ0dá^ߨ-õx%Tœ_{T¯CÒÝ¿IÕxm8C@:èTo•¨¶oÅí*RIêé,ÇœeÍm~ŸÛ"‚f :×T—×,®ѨaS ÝG'WEùÙæóí|A=+:*›@Ãÿe œ,£2‰´Ô…G÷»(áñA‘ô\QD£ÝÜÜÚ„ïnQ`K‚H" ’”ô´“zÉüå…R«Jƒ['ÐRÇ„Ã×>rªñÑ­2M‘Êãß8wÝçÅ $`TZ îƒÏ¼Ãï¼ñx¹'UÈÔŽ>¿äxïYí§›JÑa˜â@7¿ ¢e|8:7è@ïD«‹¤ÄNÔûèsÛZºË3 ž@4³¨®GÔe@'šuåîMŸkš’ òHùòþ¼¸SÌmóð¦ão™·w5ÏGÇ€1ß;†íñJÊ’zV²e“Ú².ÂzßßÖü³÷ùžk›ãÕÏýw@è3lèƒvˉøÞóüæíŽã…Ž•¨zº$–rïó‡°¯EÁýùñB7yÜÑ ÂcËd#Þ Bøh@·ÿ5ÑhØ7¢´{þZwüN÷=o·ôû£ÁOÌ)•йCØÎ¼ÃÕ‘õ€w±?L7~g±«þð•'=;%?ëRO&x§Ñ—„IbîÕä¹¶°¨$Eê€L2Ì0£X¾ž6F*ÿúOcT:ÈÎ{øbArO}kT&©®§èÞ *øbÙÈïl#Ö "51Ù–!¢Åw=Y òº#©'3ªñ }vNïãGˆ¢¢½böjÁð÷¿!ëÔÌ~¸Dägd§)åëWÔ…B¦¿(ã69éé`—ÝL¸Q|{âVü-!cg½«‰N%¡1Y` ½Ü.) ©¾r2‘‡׊ãÛ‚d"_9©‰"ˆCäCeŠÙw?1»Xb²F‰Äïg^–z Ã/?"ÍÎoº¨¥Ö åó—S|ù„êõs¦¯tž> |ù óà)Ýó ™iŠçÏýí%æáSN¿z†¿fôõO8‘"EÀ•“߆½|ýÇÆ,)yÆÿñ$ HE’çÈàñ[ܯwÍ/¨óGô¦Lþú¨$¾ÞE••Á` Ñ?Z_=ÜôÖú_„Òî5‹µX…ÞäÊwïñÐjz`Çj *#;?ÙãëoTìš7óßÁø}äj[b‘ñ}’Éö%`³¶Å ]þGß…½Ï#ã÷K²bÿ}Þ¬ !®x"ïYÞ=æ£f"V5ª«9!1„º&=;G%a“»ÈGæažWn¯.¾ÿ*‰{d¸1æÃ=éÆy¸ïø[æíýÌ3í¥÷$æ][ë7‰YàkÃû)‰ÄŽ#ÒHpÈÎ Z Ûz—V²ý>· Ð÷^Ûì9arÞ´EÝŒÎxñl ¼É<¿»y»y|ôp¤9Àí1ßã}~—û°ˆ”êúšzé"ÝôMΞ—üÐ'„Bf"QÔãÁ§¤g=|¹Àeó•\1§\UФxGçç ãæƒLM|N¶ ¸Nùˆ@p`†C„¬°Ó´ŠÂuiŸþGOH’¸Ïú:²A” ºžPOç1w•)ætHÚó̾½ yôQ)§%õ¢)è<ûQϘÿø ‘$M-ÓAzšƒ-£‹œhAøÖ‹-–Ý…tÔ³•õQQûر¥¢ Äš¸’‚òTÓ9BuHzšºXPæˆ4#ô£Þr(XN zŸ}Db*–¯gø`Â6j9ÒX\i£qŠLÐéFÝ 4Z»ÁEt5é§;”Œ„XAy9Cæ’®>D@×ã7“.µ¤¼œ"ÒŒ¤k@éÆª»©ƒ;‡«ê=°tC7ˆ slIDo½ÛÝ‚À 2??gqU" ÿáê×/½$aÆìÚ’d°¼œ ’(e‰¶½Ø…ÀKôÙCºg†Ù7/A™øÀKL·‘èíòã>U*§K­xßÑ0ñˆfék››ÇïP8Žð]‡ùúß{Ñb=XK»Í)·$ê·¡D÷Œg¹7>xLRÌ0G8wz»„Žp[¨7ë!áftËF¼ýùR ªÉ[…x`¾EÌ ®Ä•¡Á;‹”iìý¸S¥ä*xP†ä¤ƒ$öl¬.Ww‰¹•'º×,v+ø qò6ô]æùîóöÖãßcÌ›ÿºÌBIܲ š,Rw¨”¡q×t9‘¤Q•lun½ã÷ù×êj.„$v£ÙD×Ü_rž·›p …R¸E4ËØéµyƒ˜ßzüç-4 ¨ŠàªÆn@Üã¬Ú?{Úý  ©dõ|Nð I/Á×ËfBp*^’\Iði4!T ­8¬½“óvEyô !“¦_M\A1™Æ¦B%A[ZL€”KŠQ…J5ÁZlY ÒœìôŒÎyNu5Â9ÑûBà(®§ñžWWx«Iœ’%óï^ã•A‡÷»X Ҝ΃3ÜlÌòb²’±û§1R t·!üªÜåC$mÍ¡bÒ†“Sã–UÓ\Óò¢íd¤1QRBGÓ ©rTÇDÁpQR¼ºÂZ‰Î|åPÝ.¡^`çéÇ˜Ž¢£v¯Oz: ,§”—#¼TàÉéIÔ!^ÏOˆ4í¶}kÞÆÜegwÞQ1!£LuuÉüÕi"OG¤]ºÏΑ¾n]znË=+Òæ+I-X<M]ŠèÌŽ$“ÂS/kòÇI»Q@}ñó \Èè=;mšR¶°àU£©]Ræ¨NÕQ©©ÇcŠëEÔo³¢ý¶_£ù®¶©!Ô S’¦k°ãic•6_÷À*YBpø: µÀûUshDñ|å.*‘­‡Àm¥À•™Op¡¬o>4Z×6ïnü±½58šät“%Ú¥káÛ¨›Z¨cãhv«øïŽ =Ç®ª1­1C ¹¡´¿úO'Öê…÷ù`¼”øåŒêz&fOY‚‚€oè™o3o‡1ÖVé»Ïè{RÛ<Üwü-óö~æù&ºÄ¯ófß~Ó˜ÅZ5Ü }+„lœy§”—cd§OzÒß(:½Åû,ö5ê·öÒV4ö.{ÍzUMÒ¯y~wóvãx!A4Îż}Ì¿È>]ëÑ8J¼ýÙÚ“öÐ46 ­Á„Af¡^â.öP‡@ðk¥Ú˜Q5,¸šP–&ox~†€0_ÖEPVEGb,õ|[zºŸ<ÄM/±¾GçaNq5C&)é°C(JŠëkÊ™¥óø;¹¢šYô ©-¥E¦iŒÙ.©G“XÉW†Îã˜\R^ŒÁdM/ß´“ضòVÙ óø!JV¸ºläÚÄ‘ =`&i8Èo«ø;R´'ÜÛ\ÐÈ$C«J C¨€êuI2ÇüÛË:òeCBzÒÁêEˆv§‰Â–s|åI†Î3¨—ØEóß PY•鯙ÎF^ó0knóûÍJÜÜÔ°UŠÚ$QÚG%ÝËXüø£o¯PiBpÙ=áô>FÙÀבç,-M~ýhV7O•Âè¯ßQÌ:UG/¬«_´œ|õ“‘&ùš*ô8ÿý3|±ÄÍÑè%IšÐåÅ„ôÙ:§)"I˜÷ £o¯Ð½N£_}˜±‡íÅ­ JHdÚCgžjÔæ´•”Ä©)r–œë(l’3 6(47ÜZ[n·BH‚+-Gq™œ¶µzñ;ÿ[´ß¸w~ÇÇæXï6ê3»|HÚßÄ‘f—6É¥ÖñûIÀžYÀþú\©8¤IIN7E¿k|`ÞÚDtßñ{ïg«ŒÝ&Ö•±s"nEosTå©ñU*EçÏï®kÌÚ:ŽßžçÉKN:¨Dl™S‰[ŒÞlk¿?ámæ™–Æ©ûÎóßwÌB)|¹¤¼ÞC ½ŸRÊEä^vºè,ž)¡ö "é6ûEkRǵý&kµe¼wä´‹ÎTÓàÅÛ5Ìó óvlž·æ-J¡.£¼Ù¶ŠÅ[Ä||üÛîâѪ¦qG^à¶«úGóª#2v7žoíÖåBDe1_Ϩ§ŽädÐð†-BGô6ï’J|½jÒ8'í(ªÙï5É Ãͦ”×ó(ó—¦ÑíXÄ|ª~¾@ud¸ñ˜âºi"ŒVÞÝAï“s(¦x/wÑ0qäƒÊ‚[à­Ø8ù‰½Û¡þ`|hBÈÉøàS¤v¸b ²‹éh\9Ç×aûêÞ Ê¬ùý›Þö E"TDDegU%–ÂÒ“,–þ„DWL¾ùÌ{Ÿ/u‚bÍrÙ¿A‡#îz;Ïsãn¹f0ÄôLÓ”JsY ·7£lQE‚+b#ÄJÛ²MÄþèÚnAJZ­¼÷6ï¶Ãv_öný»žà5ºI WÖðaeYÙº¶÷nóÇìQ¢è7Ù©¶ ûEçA*ÒÓN,÷ù°gø³ÿ¡Mõ6:×2~ÇJyßúw_òo]¹¨)¯ñ"§Ä;‹YI¨—Ô³¶´èNÓÉ6TöV8.«µ½ÏÐ"Å·cjÖëA:$ýdk[{Ò¡ü`«=òÞv`ÜCû¼Ýož7‘›Çß6Ïüª1[«7ÇÜŠ- ªÉJú†÷sk])ñÕ2zLz$=My9Fõ†›z¿Jîù>ß$׺¶Ûö¤xÖoÖjzðÜïeå½=ÏmVÞwžgFQO—Ôs»q!|W1ßô>sÛ<ǵ!”Z»"¿·žÎ¢Ã]Ϫ¯ÔRm«”=ßBì/Kuc™- ,/œþÓ',ø‰ÚvI*æPk`RüÞy»]½Üº I“#“Æ@î®çùÖ<ìHÛ®¨.Ó óŸ®È¿øŒGÿò)ó¿}Íüµçä÷Sþô“/iŽ+-ÙÃG ?;ÃN¦Ø é=R<ÎøëׄL{<ü—/ÑnÁòr‰­#Ú]^PSºÏN(~ü‘Éw¯¶TÂÀ[‡0&úÝßH\ WïQyŽJÍ®;“à-v¾Œ C«Fÿt•ûˆ,gf}@ã*ìlA&šsÈæÜp+×¾Õá­v‘ç­ÿR‰ÁÍgÔó•åèa'–¬ãm¬H]Qn&ü]PÈ•G=›xÓhP[|óÏV/“+ªÝ2Ü›þ¬T‘ŒFi›/ ²1K‘bÇ}.4ò5kc˜.ëû×A!%(ÕÒY“€íNà[¥|VŠ[‰dü|yo„{g#<ÖŒókþÖ%YœGæy|¼?ˆ»Ïý¿ pW* Ê×®½iå–÷ç]ŽBÆ ©sѽMŠÛ‹g÷‰¹±ÐõeÕH dšÜMñêÌ[4¯0óh€we§Ìý›Ë~uËæ¿“˜‰òiÁº¨ç,ÅÝ×ÅJçßyTšà ¼˜alÓTöÞç·d­J­"å$„_}]­£ì¦s7¸6ýBûêöø•éÚ²\£÷+ðoGmã×øi@ !cHp™4U|Ö kà³¹ Üú^­ ×áÍ­ê ÈÒ@wóاUÔ[^ 4ÊQ&þMç"ýB+¨,(…ôU‰+ºŸl…s LóÐÅ‘¤ÑLnQD*®1«×¹QáÐj?|L’+\5æ"7/ì–&‚÷„:`†§èžÙ˜–¬Lì‚êzD Ãô;x;ÇWM­ èþÓÏãF³’ŒºƒÊHäÊ™±ù[:ÏHNr|±¤VIôfµJ#¨&#êI…9€é%àhÐ×j›¹¾õI±{ë @ÊŠ‹ûš¢”(ID»Ön2GÌ­›€[”ô¾ü’³ß>Š/P3ÎWQ•A)ËÕ¿ÿÅ, Ü$ß·!ÐB´ìá_•è“'œ}1àúßþDíÓø<Ýê%»7ØÆenU>Rº#ßù›Í,8‡Jº¤§½=›mÐj<Æ.ìF/W܆”ì&¿Á9TÚ#=ëEŕРP¢íݲ© T¸bAêýøÚ>x¶ûÕ•íy-2<ûºÑGþF°=<ÅôÒÓÑú"Öø\Àíö9‡ûÈDZñm%ßmÃíï"ý*fHå·¨bË®VìTaŽ¢tb!ömÖ¼¢±Š4P•”ãh×.¤háMb±Uh…_N©®¦±iP¦$Ãá.…cÿoøpˆîÝõ;í—l$±„hL£ÒAé öµˆ­y¡ Õ[¡9Çæ­eü»˜ç7A&·cø…cÞán1K­°‹2RðVô¶»¼ŸDûo?á\F÷iÊè} Ùùù0V~8ò~ÞqmïšÁ´|§}¾î]Öv³V½uèNF2Xíco1Ïmôæy¥tU`‹ÆLðîc~Ã}X‰›Ž©æÕ°ºíì9vVíŸ=74‹¶ò¸Ûþ†wÕAhKy½ ==G„:‚ëõ-©&׸*!{Ð9•÷ç÷·Ï´æ-­ã…$Ø%ÕÕd#C,©&3ø1ãõÿý"O1“wP,æ•D± Õéb–—3tÿ”þ'¨/~f1ƒÓßE¢*/®!É1Œþü½ú-º¼æê/WäÏž"ì„éw/»ÿò‡10ØÌs¸'Msó”»%è] rí çʪ‘Ä2Ïò¦´c ¾¬"w ¼ ¶F˜ÝIñE‰[VÍ&"c’¶U¶X‚e‰¨^3È Uu³™E«|ZÓøVTÇéÞwy^Σ²wüèM) !póâ­þÆîü¤‰2{v¶B ÷nœÛнŒÉ‰hJ,BÈ›o×Âïj‡ï#¬Û›Öº›=ììe‡¿&Ö|ðX6–[¼|O`¾)ˆFámý÷ŠFÇË!.´¨—Däó°üö¨q÷@*t'‰®„a¯Ãÿ(ðÓ‚[Ço¡zR­i¡ª°Eu÷Îï»Æ,dD«xhHc#ïç¹Þa¼£šhàî<ñ#k›)ÊÁ¾Ž#·÷˜·_oü/shL°BUE«ûØÈ µÅÕ™¥H%p‹Tl ”‰AÊv±÷då}çñÎ#²4Ò} „¦Oé¾çíÎs@ ¥B[–^ñ¯±OÞÃFiLånÅ»8èßGyte¢"Ø©¢ïžíñr)Ö ƒÀUÕžË;…È·dE|¬Cv3¤”¸Ê¼Å; "è dhŽ4Á6,µ¦6à­G*…J“Xp>²úƒGeÂ[œu¢V³/4 ´TƒìÁv…nCéBð'IÎΚ.Üp Ñ¸D jÊë+\%IÎNѹÙȼm Â’ò"¬h ¡i8SYŠéèˆØ6F(ñ0ñÔÓ od¸)•-±Ó1Õõ Ùžô1yôƒÛHÇèØÜ8åòßâd†”GJ|m™Ý~IyÍuõëRìqþOŸ¡\–ë¿|G1'rc÷7òc¤zÑ^¦ôu…>yÌé§}Fÿë/Ô!]SC㨤jPðšäñGô.þŸÿ@fƒFjm7Îõþå2s¼ÛBŸwÔǶº¡çÊ«9ª3 =í®Šíç+cêyƒÜØ,zçù{BШ¬*l`0±½Ö§”¯®ðiŸÁ§OñÓ yì"¡‡Æ.‡ã÷òœ°ÅÍ5õhJ½¬¨‹Šþ—ŸÓÒ§šV„Úb—5Á/pµ¤ÿÙÜt†Ìr„¬ÿågd÷„þ§gj¼3ˆêŠ‹?~49A://ÐgÐ,)Gz0Äô |~M1š­t ÿ01úþÜш[ßÎÞ ¡Q=#°#ŒÞzy‹®bÛýYÁydžÆÄÛíR6ð–zºÄ‡­mõi‚µ’‡PÓ϶ÞÓ»GÄ‹›¿î,Õx-ÇïË7Üò|W ÙIá=R ÊшºòH¡7ô•7ådyÈ:¤]Ey1 µ¥EÖ•5:Þí‘d‚âr :JÌ…c"òMYE*q3­iµ9‹«BšÆÊû†ŽŠ"5Þ†ÆÅ„XcýmôÊ[½ %Á»èèv U"pÔdàƒÿŒ÷s©ß «+ä_ÊÕ_Óë4ì-M”ÛpÄHåèû¶3^¬÷¡$n±Ä.÷LÞ Ðoþöú`7U¡7]Á[Ð ¦—Å^•w¿ô)ÚѼ»Žß9´n›··™ç¶¤á®ã?̘£yJ‰+í­ JGÁ¿}­æõû)ù Ëcç½6˜~#}šê£oh8ò]Ísóž"€?]4fZöž5˜?ô)ª=©]ÇQ7Æqi¤Íò]™çÉhÑô6 ©‘¼µ„¶G*ŸBF‹mbåÛ×o㹟¢”£šÑ[B)%Îk’~Ž›ÎŒ°\R-ãZLN{H_c¤°xu…Ði¬È ®¬Ú uˆ—a!‘&‚G ¯~…@ËA2ì!¸®GÏà Ò³S¤Ú²¾ÞÿÝ®«@ê@ñê ÙbºÉ^³Á>ßh÷­¹%*UÍâÛ½IŠ-ŽÎŽx¼ŒÝ®ñVÖ£òx+Þï¶nÓ™B½`òÍs¬×ícÁý’3¡®Ñ'9ýÍübJ»´€&{1ÿá¦/—ñ&-n) Y„+â¾ i4båü·*‰oçàRâ«[Õ‘2Ь©Ì¡¹€wÈ´ùëÎÞˆºÇÿZqºý†'ßv•ª¹©Ç—Í—3ªëȘD‡-j!¶,уS²“Ntœ¶ŽùÈx)qe4ßY)D™·ðæ1ßÈè]â¬!}0„Únö›[»öïÀ™|“y#4%F‰_Y޶ðíaáÿÿÙûÓ'G’#Ëý©™¹;¶@DdÖεIN7{æÎÜ÷¡ï9ó—=‘ûÞé™nöB²ªÈZ33V,¾˜éû`ÀápG 2#—y!BaiÜÜÍMÕŽ=g_©¤û;þuŸs'q<¦}ý“˜s´xµîW3O]«";7פÎP¾|EÅóKìæ˜ Çú„µÚ­àðz{Œ’¦&´ªÖŠ»(…¦yn}ú÷›1fÙlnc“ÑÇ{˜ó©ã%³„ûÊ«ÅVûùQqá)bÕÉ¿Ñr{ì(C@²1n\$iÖ°w˜4êÛ[ªÛšìüœürBsý‚õ"0ùä#ðõ!x€ˆÇ8êÕžß„H¤íjˆÕªD¾»F°Îž}Äå¯bïW¦\üîçŒÏ2LáX¿xÁÝWט<ÇHC¹®™|üÆ6„å26ê³Sþ0»\2¬V”7KÄÙ´›Œzø¡Cö‹IÞÁ˜SCŸ\ÙæÿIɓ٠ŠIouÈy›ÜE®‹Nbâí{ND= cƒDGD`Eu³ŠÈZ ZDý¶ÁaÛ %tS±úñß–˜9éô6|¬Š¦+çœýìT%¡\³¾ZâaüÉå«—”÷7:CAÐ-äX ÖÓi–=ÃŒà›½†AãI.ƒº•™Ñ0n„ÙÔ[›Zß=z n¬`~M³ªé‰—¤l2"+\§k066úªD¦ò"­ÃÃv§2t"9ªs@í9ñ7z¯I†ïe¿-߃§úíERkÓü¡I£=%ÓGßgE=äSla[%6Ý“šÔC†[#›’¬êdͽ;¸¾Îœ‡÷¤î±&mBNôé¾ÿ1ã·KBMƒÉçIг¯ §ë¹·ôö†Æ=·Çg¿ôÞ äíÛ‡ûÙû™sÿZž³±–f±Š{–1'?çþM2I7,‚ ¢{éoeí½•ñq_ÈϧØÂ¤fðŽŒexè9ËŽ¢¹Qƒ¨+ªë*ö=Ïùô=)í’§Çž¡XuRì9…ö)‡Û>%ÛÊ›:Õ£ørM³ØbL6-õ’z­ä³)¢ ¾ 1ǰ1 Ñ=&¹G·ã|E³*“ÌŸ¤Ž*Å{ßr¼ÖmåÝL/˜}4fñõ_©}ÁìgSŒ >4TWw”W+Ìx„µP¯×ØbŠ1>þ~ûð–p,11— U•ÒŒé$ÐmÛíÁ¢:ƳsÄ×Ã\ƒSzz6º MeGTä8ÐQÞ­ É üñ )fäçÒ)õsï8üw_´j¨%f2&ˬì0Ùƒ…$hS²øæAm=Èxà-JeÙ”ó_†•&ª•l:aýÃ÷ÜÿpŸ( '~jR0f§}†DËþ‡dp²)Ô+x_T1Öa:'Võ ˜œl>Ý©›t^²Ãûª{®†GÇoJ7Ô±{¨·Bswd˜I¶5ø‰d%õÍ-wœÿî3ª^˜àf–°^ªN–z°Ñìv}«ÙÅäá`Òÿ=ï›ÉÉ/;è×åq‹DÞÚâ†êÕ=8R`ÇŽ°^jCþü—'ZÎï3©¦î'&“þ÷³­áÙÓqíëžý®ykÞL=å¡ñmäÏêW¯P;Åå5Õ]Cññ%4ͺõÜžêš:¨í¦|¸¡®iWö€'ÚFõZã·¿ÑåwP½ö¼õÜd}ÌsÖ„X3þÝÍy¯{ÊœE@MÒúÃu@SR^Ý ˜Xk »¼Œ@RÐ÷óˆ GŸËÞ1EŠ'^Û[Ã@#[^Ô¸Öýç¶yÎ&6‚‡F«"-ðÛswœ8‡_´9Ð ±çăÌp¬âñ0îlŽÉ³JJì]‰ŠeÐÜßÓÜ—à"z3ûÅëo¾¥\øè3pq~û ÌþaI¬ET ¡Ùå$Æ ùhPBSâMàFñUM½j˜ýü ¦O!ËXû÷ß¾"›_’_žáò ±¿Ïdf«td Kð€q4¯~dñí«– ‡1óâ|–œ„d¸$°µDu±+=i÷s”zÈî-α6ìÙY„ϯÖû6›ÒÞ(%¹êU¨:ò‹Y”ÈiZ´ê!’)=¥z‰ÎbåÕUõ¤âb†'qpiÜÚ³ZrýÇoÙx'yüTuÁC>ãâ7_à´B‘Ø…[VßÿÈâÅ"q†Oø é$ЪÃ'ia½nÿchj`]9H{ p@ܘ|–š¦MMî$?Ñ“@?f¼8¥º[€ŒÉgY¢w¤2ª_SÝ-h¼ãòï¾ úæj?"Ÿ@hª¸o8à}¥1yè]èr´äxIíµ~#qÐ6‹®»¦6½ýÍ/Ú¯¶ƒ Ie¢Œ*B<|XÅW+Ô[L1êpïÞçY;PÌ[r|í’æ€¡$mÔòzi%Âpiï9÷Û©÷ÌA£ÜØV;(&w„º“#ÒÄCÖ^“O?=éð`5pM¯1~Sy+æ£måM»ÍM{Ín‡”v) Œ?ØW_sü¾üØ~ò¢½I†ìŠ®aÆ{šóÁ o%öhÊŒ ìcUšâ‡§ˆ$›úP­¨n‘X·c濼dõ—¿²Z4ˆÉÍÏÀTÔ÷UëkÌÞa4æ$Š16UÇcå0²’bZSïï!aí™ýúçÌ>›Ñ,ÖÜù ‹—7¸é%ãçg1óÅ0z6¥¾½GŠ1ÅEAu½ÀWJX-X½¼m72gOoRÒ(]–]ÌIùTëÞžbt“hÉîD©b›2Î~pÒ »ð¶`mÀFɺCà0ºõ"›¦¸ÍsUPcˆàžl“w1]äÃà2aõãËèN#ýåß“ÿº ‚†HªW!4Êø“çóå‹kêU¹3Sxú©ÚÎD}c#m·M:ÓMö5‡›Œ:vé}Ù‘RÔkŒW%ji’¸vm$@l¤KÕel^Ä"¹KßoËQüí8ÑHwÊæñ€«Hg/Ûß´H‰ Ô7·øZ{¤æÚj$€‘MÇ)Vû,ùžï?@&[C7ïA[N‡×ç¶L¦ì‘¹:÷Ãs>}¼$êJusƒ¯ ùÅ9ÙÔQÝÜÒ¬šøþÅŒ&dgð~7¾9?Á5 Ž×€¸´ïu9‰}ï8z{ÂøÞÏtVƒœ>þôkâ‘ãßÝœw¹½œ6^$%¾úë" øÈÿÌ Ô—híc/ÏÙœìl´5ŠzøûƒÕ“®Õ7¿ÝºêÄ$—Nùýàœ­%¬Ôw«ÉOñO¬‹rÃnÄ›þµXu°˜”kÆ|" M”6.º4 øÅ“åØqÏÌu}3ÒéZD f\ .&Î~½"” DÕ~¬Íö®)*ŸAð ÁGÕ±âÙGÌ>¿ÀWe4a˜c†ÖáÍ$ºˆ1„ºŠbUÓ¢p;=?‹2vb†U)‚MZéÔá¦ÑݯŸÂÑ9ý«D®¤‹4ŽÒ¾&Õ…º¢|µ@Õîk‰]ÈÙ|F>Ëa¿écX¨½Gä|cÏ— ±By½ )5rp‚ÇM'ä磘µŒT„’ëÿ eTNâK·¥HöæÓ”ðì?ý–ÑXyõ‡¯X/J\‘÷Ÿðz×´bœÛ[@:äÖ4°É´Ç à›& Úm¤ï¬m‘€ØùÙÁ·.Qúц¾Në'¿ùŸ h…/שºà°ùq»DO›5¡òý'õv–ÔE2t œv€~ô G£K™`2ÜdïíÆ¹°ÛìBÓ( Ø,ɹlàû  .V,2Óƒ ¼Ï]ä£Û0¦=M¢mä°ïû¥|~çÄñƒ­“´¡ÃM¦¸‘¡Y/S½±ÜÍ0ErI}h΃%ÜúÏcæì¼Ï"¢¹yÒc*¾9E›f±' F¿­uÏø~“i%ЧŒo#¾²_Y<2ç­:C7!Þ€*ïxÎÛ€}✳Ô÷«ýkµ¤¹¯¢@ý ˆvÈ’£&ûÖÝW÷«§ƒË×X«½M¸¯»¶´Soƒ](foÓîOoÎb­×ø²Ù§£œŽïÒV^7öœ2>DŠ¡Í]¿ËàŠM÷9·â¸qBusƒê˜âbi;Õ‚êfÙÒü¨·dçsÜ(&ÐÍâ–já ø°Yžü,69LÝÂk_VŒþKžýíçÔ/_R^WŒ>½ÄhÉúÅ2ú†L ¾ŠÔTÉ3ªäîOa}µh!Ð"s±Qæ-Z:÷Ñ ’Èf“$IÒ B™ sbšûÐÉmwJЦÙ5_lšƒz˜{ä.*6€|t®¦›ƒEä2Œ¨‚Ýt`î”æ¾-•÷ÖŽu(J³¨(ž_à2¨nWà Ç.ÞÍéM,3`¡mó`뻵Jµi8ïóO$"†Mt¶lKÀíÔ6c)KøžNù±ÃYÈfÓ]ûöà©ï–©Ác§Õ¬iC1&ñ»‚MÇ©9Múét]rnÊ7rÔewÿ|±_Ï”÷8>©¤Ó,ãáJœ!”‘>寣ØL[Ö˜b„›É¡ó]ÏYwûž1ûÍXGÑÕî/=~üо:Ø€÷˜}8º.ìówá8¢¬Ýôè»s,9rŒ M Ü" ºÇ¬‹ôöÚˆÀg©oïÀ"õ° ÃßêZÕV%øx?ßhüOaÎÖ eI³*Á~’‰*•0ÂS¦?I™dSUÄÆ>¨VR%oýöð$ÎAhÐ&6! â)ÇÓåJIî‰6Ç õr >©’Y´Q²³ ¶pQý#B¹Žhµ1·ò_ÿáïoÄMæg¿üFVï3›>Ê•LÆÉP€šÔ9•u›dó16Û¹È6£ìÙ9Åä å«RŒÈgŽà7åh^§i@2jmrG}·¢YyÅŽGdó"•Å6±`MÍËÿõï¬×ke˜’ÑEN‡ÔŽfÕpù_~Ïdæyù?þBµZ#™Ûç‹§{f² +fßæ•Ô¶¯ªOé¡ñFЦ"M´cŠ‹è¾÷þI}àôÉÓŽ‰ÊaUîKù¼iÞ¶<ûT¯) Á’_`ódÆÓþÍVuE¬C´¤º¹–§›F4ç¨ïîiŒÏÏ’5zDÜtÒ±là}ÖÖZ=*1µÿ®õ"Iò:ã9”{hOjBIys 2"›ÏX¿ú–¦vÌ>ý_ÞRÞ¬={ul›šPû~ý-ÍYƒ’Í'dÓ´ïuäùÀ uÝCµ íí}uhüÁN܇MLÊëUDVéèùw * 3—Qœ¿3©xGs>@­š3‚ÉÍjM}[Å’°r|­ž¼¶Sêë[pSòyAð!& íÏ=1>÷¬=ó„kû¤9¾Ÿýïó¦§C ›ÄJ?¤9Ÿ°'¥q&Ïëõí2Oš‘Ê ±JAÜ;r;ùºÞ÷‡ƒÏÜÛ'/™Ã/o)¯WQ­†Ã†w1‚¯kBë0Ökò/~ͳŸùñÿýx7ÁØM¸ø»¿aþÅ«—wÈh÷?ðÃÿý'Ìxœhe®‰ã'-Çi7z-|7–¶½´„cxÄ“óþÁ¾Ÿ‡¶÷ï&ZrJ–aé¡•½Ìæ­Öuòs)2læBÒâr×MÑ}7 ¥*’¹Dj'òw›È•nsZµÿè{úãy›ãßúBÜL쯷Gjh¿6§ýmüÆf/ñõбl:²aÞãW%š”K¶jÊMð=‡9‰ïõ²‹_ð{óÍñ±‰Ð¯×„: V’„¦ÒdrUó±;Üörüßâ4Zwï™Æ<Õž74¾û™cMÇ'ÿF’E4sëæÐâúØ=Òxø3¹MRéÁ$ÞöœùÆ ;Ã…'[b¿JUkuƒ¸ 7Î÷ãÕ£6hý ¼Ï)ùY®P±­ùò“›³!”%¾ò±ç@úñÃŒ=ýãõð}y/ˆzËi²]õ4e‘=|.ò¨ ZÕ{¡úÏ¿¤üúüø?¾„l”hÅfyj«”Þç#:ßÝ‹zÌøà‘lBqqÚ´9-þ`çEÔ=ÔtÎ}ãwk­o<{öÂZ¯ëŠé¢õ‡ƒî±ñ{·¨cöÓ}Î]û'þƃפ„FÈ/.“ÑÉþ¦ Õ’êÕ jìVîQÕ`'SоLÒ}«ðì|ŽÑf¯?AzÞgí¢J{ÜØ¡÷¿LH?wµêÑEWûP@Ž ±]¾n™ÜZ bÊëkT-åõöì‚bªÔwÕNâ0IwçHë½í9«*nœã&n¯9toï Ý=o`_àŸºšYœ2>% .Z[׋˜4ˆô´çŒ¦Š‹ÏGñlW?Ô9[‹¯jšíü ’È©k{s/õÍ5õJq³3K°3ŠË ZÕ;“©ÐJ&»VÍÐûß·VXÛ'Íy¨rÀÞL&T¯®#ò~9‰¨{МØ“HFP¹Åß]SÝ–;•–× {졞ªòÁÁð ãáÁøä˜ÑhÛ§Æsú«h}‰{W;¾5>*´Ü´îiO5}{5øªÂ¿›(z[°bÓ¶ö\üío8ûdBPÁNF,ÿôG^ü¯1£ñN…£‘#Bhj¢…c0|b3ÍÆtC5ºÛÉ) hƒ›Ž0F >ôŸa°q||ç‹_k¼IïT ¸ê=ÕÝ‚€ºƒòîl¡5ìxL~6&,WT‹Aw|8éJ˽{2Ôþ§Ͻë§jÙ}:Ê®”½{öÙ$'$…æ´–%¹1nÑ»îý³¦c¤ô¿3×J¨›ä2e¢à5Ø‘…®ñ¦Möà[߯âÃŒæ)#ÜÆ è÷¼ÃàÓ{YJ’¡ñQ«]º¦!ÄÍü*ò÷-ØqTÁl‘ÇêÀ{Ÿóñç V’·¤ú4ë"ª ED_kKCÝ Ö&D3<î]ø‰ Ðó.õqïÛ¼»?™9‹A›h?½‘\ûß+N%gÛÍ{£¡<|òxóÓbuv°OL“‚i¬JKmm(÷R²Ù—Û­Tž_­¨îKĶU8ža½¹¨M)Ê/îñfÌøÙo’B°Ïžasép‰ZpúµjYÿºIƒ”öðD·<´ÖѪﴷ7ŒTNâ@ïŸp7ãÍxDùí_xù¿¾Â}ò žÿþçH³FŒÃºÀÕ¿ü™ÕHôÑw§'!9!nwG’ÐD«Ìü£Ï¹ü›KVü’åmE¤Ñ¼yfrÊõô9DVOŸì<óóéÎ%mŠ%eL=0åhM¹gü¾nl§ç#ô›\ÓÞ½é¿ßTo,v4ÅäŠ_- ûÂô-t5¿<Ç„fWÅŽyD½íj¤K¹‘ÚÓÇ¥Û3´èã•rˆÞéG{ÂÀøn,´^Q¾ºF7M–Áà¦BµÀsò‹IlBÝnc-Ôñ­Ï9¡Ï“›EÖͶûJ·gøÑÞW{Æ·MEäô}¸|Ô´­ut±äPgvcÁ¾‡L†G<ç´Ï»QrÈÔw7ç׉=ÆEnh½¬·®išóÞûÖo0¹PßÝP¾¼”†Ü Å”â2VˆwM]í9wçÐZ«]S‘ǾŸCãOš3{̾:‹É õÍÕ}…±6:ùŽÏ> 9Û“ &“xý‹:ÒY{«@ Ÿ*"Ö›çh±£ ’õ˜;ìÝÓ¾ø8~‡@ïâ qPÝÞÐ,}¢,ç0‚à}M½(¹øÏ¿Çùk^þá{ì(Ε’PÝ-Såw*6ψ`ÙSs@ ¡*ñ!›d‘Óµ…ë-[Mæ^ìÃ@lŒ‰Ö¿±,7ħéA ìTOß—,¼M梞uÚŒÅ9üÝ ‹n°gçL>>‡¦Â×MôT¹¾Ç7zš‡>ò¦]P5Éèm9°Ϙ>ŸÒ¼º¦*›xñÉ<Åš–#Щd'yÊ80^¢mvÿÉ{øD8„°¿ œ[¤U“‚Ä›ÌáIÇ¿‹ßØŒO6¿ÖDs ’áºMÜÓU¨÷³o|[W~Ãá1ðœ7î)ñ}O±ç}Ä*MñGÚ·q¾vüo¥ÄΠMÕãu ÛƒÍÞÿÄ9 PS½¼Â‡úËð>üqa/<¿ãØóÀø8ÏØ§aò RØýÞ³GÆÿ.MÕX¥º¹#4Dôy{#6÷ *²eu Q±ŒÆ£b16z\<ˆ5¶Ðqm’êÈv“QÓ²þm-_Ç2¢³QgÏŒË@šÄ•ΰy¥÷Ú¿"òµÇQÝ4Ç57Ÿ’ŸåÉŠT·–¤ƒ›X÷t¢Ýññ?¶È"'}w«ñFÁdpÿõ·¬—aפ>ý·qmKî] Áû&êµpþ»Ÿá¯~äîåŠl\€OÔ/l'µÝòdh5ääÌIóvÏe«—(„˜‚l:ü¾ŒÝëÒVzïÙæÿðÛnüÞ$WfÞd|gO:Y©`°Êò†×”8ÆÖT·ëh¬PäˆÔÉtEú7¾àwÍ7‰Ö`¬;¼÷szèô@¸¨C²Êž”U_ÀíC'N¯9ÄwHÛ ¿}O}@Ä"ÎìóÌßáœ7•:7r­ƒãáþÐ[þìÙ'•#Éäƒûª&®©¡¾]P/=bÍÙš€¸l?–¼ésN®œÅÅ!ìTËÞÒœ{Ç‹³4Ë%õM‰dö ×vû ´YÂ5ê‰ý É+¢ùϦ/f@Š.£‡ÊתöYt?Åû¬ý{LwÎéì«u f„qžàC2Iå«Û:RŸo}ÎûcÄÚ¸Ï4u«Áÿ}Ū·ð§ŽWAlŽq©wG{’únnt ý߬h–+|ó$Ù+€§<©I t =6ÎEº«ê=>4-´úI#°—@ÿÃßßàFóñ§ahö7ëmµ#,ï"Â5:#vuƒnyIõª#­f4%¿ÜWíè]p²e¤¤í àcÕNÄŒßü@¹ðQËï¡FLBrÿ|U£Á`r‡1o‡M.ìnÃÖÐW¹@Âæt…âë1ã¿®(>ûŒbÔp÷Õ l1îz0oâv:Åì~—ÿƒ‰[{ÃKk5ø=Aÿ£’QÝä¹Göªûyõ5Z–-Ω®åñ·0þ1‡€'¾¦d5­Í_gd3Gs·ÂN&ñQU;ÚFûû½ÇLÎÈ/f°1NRÝ•Eeeè ýeîG O1¾}NAJ¶tIu}«jìÖµÖŠ;?';+¢Åû{š³&ã)ceÏÜfÿ½yˆŸØæ}sd_íѾíèòkH=A"Û>¡£sˆ^è¯÷Üé!íÍõm͹'öHOÅÑ…nD¡Ÿjmo¾Û ¹ÃßßP]Ý#£)b•æn±„¡ dçd³"6Ὣ÷ù žóPƒ¬äþþšêzX!4!5jîÐhT*šd àÌY Z­¨®nPq­æÚ÷«ÞY<Ÿo&+¢oG"øxüïÏ¢3xtÐm–÷øµß§qÈ¡‘ÑF_¿ý¬¶ŸÑ@ð~/áîÃñ4´)ÿð÷7¸b>ùä&ø}#Ž-QÞªͺD\¶z²b~½Æ'ƒ“m³Hà Ü(ï ›`Ô³X5(f4¢8E¹vÙd϶›@ïКh¡šã åæß¾fyÛ`Ý¢|Às9EåƒánîÞÓÞ 4yt|4†Ëzø}ÝrFÀoN¶ŸëŠéo~ÃxTòòßMfû ©ÙBdÓ3ÜÄîë ŸdãÉÃã_ç3Ýñ…†ŠPU»ÆÓw¹q•ú pÈÀƒ~¢kŠ¥1ÅSÔ/ðe†›(õ]M>Ÿ#RâÓýÚÙoÐç€d#ìhcQÝÕòì¡(t¯ãO´-°©È 4£¨>n|×à¥/é9/  ¡®cAØ!ΡöHVDå‹ ïmÎê•ì|J6qû¢=wÔ®Œ]]íÐ8ÜW¥79l¡« b”êzISk†æ,‚IÚı·Ä§>·ž³ª!?Ÿ`³®LÖÓÍùäØóÀxq¿^Q]¯vùO±¶“óšÉ-¡\ѬJÄ@C³.±Y¶­¨÷±9cs»ß@÷¨µýÄïçë¾Ï†hläõ MÙàFù˜×_¾kšÞÑœ5¹¿zür½KÆÞV¬êR8äH’ñäñðqãci‘辸óZùB¨w4ëä52tèBз§Ì”S¥gªÉsðMTŽÛW[ ñVþÛÿõo0nžÍ”X¢Ðt-9§¨Ó‰â$-¾{šûq6–H½›“ÏvNgå0¶nMB@‡„Ô‡’BÍúå Þ[lf1FПœFLB,N”¤jÚ–j#­Rµ‚ì¸h©{De”î™K Á÷>õجÀ[=>^$–¿š:nJ{ ôz€#_ýîÆ¿ÅßP%‡Ìª5Ú€±ñLkœš4Ê$©WÜ|Ž+쮺´)oöʲ ¼ÿC%Ð7ùÌûO,7÷+ÈFdÓZ—Tw+Üli>¼×9lh9P\i[Hë‘=ò”ñÃ߯ õ§„tÚÞiÒ»xµYSß•¸ó9Ö6T× ¤˜’]ÿíxÍ{¤h˨ð)ç<ÄËŽ=>‘tˆ ‡Îp¯½ŽqBsO½(1Ö"YŽ)r¬ Ôwk$ÏѺD½àæg¸Â’³îÓ7s½ãñÖVKšÅ:vY¤vT›H¦>`g3laû‹ÞÊÄ Õ’úvÎ ²ª±çMÇk R˜,KyɩƑ,C7¼æ*4½¾‘‹ˆAø Œ?¾¤zù3™QÌòddÏúåâ\²òÎÆó³_|†Ý˜lOW}§ÃŽŒUûd迼§YÕ-V2j˜M‘¤” ÎbœA¿å(©œ¹âbÑëLjًÅèšWÿ딵KF'G å%_wü$Ðë–Ó¡Öf1Níˆåà$¦{§PéT¬í«U£á šQ\ÌcÎPGºÈÞÈ#Ç÷Ù…rè"ÏÖ Í:¾½ÒtÒov2Xb}Óñô_ÇQ{t8¡ŸpM›û³5Hï” ¦˜bG‚¯V„* ,’t„5ÜÙ»g`tâûÜ‹@?ÔD؃LöYÈöŽçУ½vÌÀŽ6ö|¿X ¢¹[#Å7Îbcîj‰qÓ$±©ýˆØ;šsJ>Ÿ’MlêG’žñoÓH5å«%!ÄwQŽÍƒÖKêEMvñŒñ3Ëê›itB6q=Ž ú@sÙðZU…|>Ž–öúa©l¥Q­!”kÊë5"æñk»çýT[Xüz‘¨“ Rà.æäÅŠÛ»"{6Gë{üZpggéýo—ÔÖö£×êãßà9÷ïIQ³>¬ï©ï׈5˜l†É~µl„ƒÁN&˜Ìì÷–½­9CôËpŽP%‹î=]ô·«º±§£‡bOâþ¶ãgR72ERÑ7Ï1¶’‘†zq °¬éÏ“ÄæI½‘@]+g¿ü”ÕW¥øå¯¸ø|JS+n:fõåŸøñÿùªeå-27y~âÑæÈŸ&½O³¯T h$]'ÍÞf±Ä¯›Ä¿Í¶Ärqq.Ò8‚?8Ý =å•Ä¿õ‹5ŠyPûCG y¸¹*˜Ø ІCt탼¾I mÂ:!¿ëñOñ›ƒ„KdMÉ8Gë õšÜ3%ÅMÇ1çÞP8N|‡Ož›PJM;¯=¾µ_ B¨’åö s1ˆª›{ÜÅ%V4öi¼…ýØdvW }’99ðz ÷ÇOwêµÇÒû –°üb‰¯ãLª¨x$Ïp“1~±Lh³ÅÍÆ±ª«OôÞ(¯±±±Ê]•4÷ Ô8Læ¢j‘Öi‹3ô.?ñœÅÂzQqçb!úÓ=om|Ú[ŒáI7†ä"(V¾v“ƒž&BÕÄgyp©Û Ó­ü×øýäÓùùo õž•o¯ Á€Íæ"Ó‡Vi²"½»eõã’üùGŒŸOMh¡)ñ¤ÍrŒ„'Ûì[6oN¶Æ¡Ë+^üÏ?áí(jËi~‹蓬¼ãœ­ËÍåH—ïƒÈgÏ|‚7ftq†à÷å”éA»–Ù¼æø½ÏôñD‡C¬ Í ¿ö¤kilÿwwÜSï¢ûÝó¾ŽzèD?åš‚)°£1ªKªÁ³(ßT.Ѻu¸Øû^ÙÙYtÌ|è}Þ{÷ó>¿Æøöú°µÞO?rý(`{üÞœ7¥o‡– ª«ÛÈ{QÝÞCm »¸À]J@xOsŽ:Ên6"›ØÃ&­ÜÚ!½åê¶ ­ºòlzhEÛ€ ©)¯W(6£œ4gƒHIõj™¦ªÇМ=·žslŠ›àFfksýFs=Ì"=¦<ߨ]WT7%{dÐGÏy'LÕÍ Íz§†¢Mƒ={Æì‹KVý+õ²ròËslf’ç‚îÏyh­š¡çÜ¿V®í“žócrŒÖ=6BX/©oïÀMq#C³¸EŲËK\n"UžxÎÀŒ$¥˜%¹ßë8ûîbÕAUl V1€º¿Ëø™DÄŒ±#—€Ó7Ì1öP÷¡C©)¯nðu%䡼 |SÅ º95B¨=TÌFÆ™ïɾ;™i'ù“Æ÷œÖ6´½/ M,×Û,º %Yž´Ô¡,î¤H–eñ}ªÏÈëŽL¬»ÿ¿n…Æß°m>žÖC`è»~èc=N=¡¿Îø×A-^ÓxC´eõjlLªT%Yë¶™hhƹ×z?Þ“×uò~ìžñÔãE¢nâÈE„(¤¾Žø%BäÇæ,×#©õîæ¬ªØq1¥Ê†ÐÕ®Œ]÷÷¨ñ©ÊhšU¹k|{pÎQ1”5l,¥ßêsVLî:]÷òz÷¨ô*kü„@ש‰¾ä¿ÑÚÖdÔÙϨ›X5p©1ÜÇŠ£)òC)½÷´¶Ÿn|Zs‡7#˜"#”eÌŸ¸ “Ûaל³!”Uj.cwȲæ§«Þæ5µ™"~ƒEÚ“Æë–j6œ ѾÀ@Á„@ÿ·øý ùt~þÛ_bµà@ï[s?Ì™lŸöú8“›ŸîsŽê@}÷Šà-ÙùQ04à¦ÙÄÅÜaËC‹¥]]óòŸ¿ÄËhŸ?þÆœæwÀNåRk³XN¦·TÀ£›Wö€ó€¸1ÅùŒ=fé9…î¡ßxìø6Wì€3IO·uê’·ª¾ ­ÆÁ#Ð}¨û»ßýçSt]ú ˆaGylôaúÉœêÕ-uíÑj‰6rHmië–ãÈ/Î“ÃæÛ~Ÿ[ÈM2ù ßPú‘ªAÎdW×ýa´Ø.B€;ÎÕõ@Ð&à..ÉÏ Bå9‰ý6æœ/;ÉÉ&Au]¬tœîø®bDkÿcMM}[îšvUO›s²G¯®®Œ./0®µöúÉðÈçÜZ«n’'#®×Ÿs;–<¿¾ûy0ž4»Æ{mλ†aóþûiööVc-~yËúÅf4ÇŽ,auOPFÈž]&'ábü‰kµ}ÌÚ>™}êžÔF #ºººº¦_|„¿}AÓx%»xF6ËãaBÛê)ýôa•›ÃJ“)ÕõÍ:¤*€¼ûØ34þà3(½Ëø©±cì–ºû†9†H¿ü]oŽ!HõÍ õÊ')â¥U|SÚrvm…—Ú£{´ÈÜ8ÇQÙµ'‡¬Û8E,˜¨ÅGËøh 4ŠŽ¢Aˆl‰ÏÛÎfm*ÖW‹xÚ”Ÿ:¾œbR“Î[8u{B?ñQœ†ÄŸ:þ±ŸÙ òú®ÖÞ»†c(oˆ¶õòܤ ,WxtP*½{ÌßÞòœßÁø–éþ3êiË”c#»ôýÍÁG;o›ÊЂtÐÕCɨ‡hí¯›ùÖõý:Ò[=‡hÊ$ÖÑÕ‘~ê{¤²³1b¢³¬¼Æœ‡èñ èãÏAÀ ZÖ4«ªÓTöÄk;$žµ‘¸wHØÅ‰:Þ„MW¶MV?µ}uhÎ&5M+bÇ6½ÛÛÄù”¿ÇT¯Ù¹sö ¥„­Àþ×¾¯{úþŸ› h7¶½ë#™ÿ>í=„àSü° 6!ÐÙt>ÿ›Ÿaµ!Ч•I¿îeëpèîÔÒílŸƳÂEpã¸Ô÷5&˰£¸ø²Á—Le<$«í‚l>KJ(ì«]ô9h|ON/=]ûÚ=%¶ç`A«uDÛ'¢‡¤„z¬?Ÿt|w74·±òNúõ}z¿o{Î"‚úH)q·Kþ{QzöѼnrxÀ‘ßGcÅ‚÷ÑŒ E‡GÏÙ{šU…›Œc5í->g‘øœLá¢TàÄ9¹G{ÕÝ#GÆÓæïT5ör¼­µíþî:®mgéå“hL0³óKòóñ΢¾ï7L›÷ýžßçÖº>˜ó}kΛ¦NoãY/І£«·èâ#l­»kb¯G!€aG¿\¤†Uy¿±êCˆŸ­Ø¦—Èžãp]ìÞ1=6¾ï€»÷‚qPßÝѬ=ÆJ²­!Z€ïŽÁ4ëŠé/ɳßÎòßÿÈËú+f4J:Ðbçn2BÒî' Ž$ŸQZ­õ¹ à2òó *Ê«%îl†ÍclîÔË;‘m ] ø5‹o_lµGн~°î‰Æ|Fz'uÁ‡h Uj».=(KùðxUEL–Ì!ü04”¥=߯;d ­ä¬¨%ØöóûRÞñx8nå}ÂoˆtõgfÓ“ xB¨A³äLW÷Ü›î÷Ë¡Nø‡FvŠñ'fcßÝ,Õžåyû=2I둨ÇÏY}Àͦd³,r=ÛIOo0éüKo Ñ–Ånìkñ«U´ƒ?@(OEzlD„Õ§ÉÛ¸Ô²óiÒ8Ö}JFïœåè=Ú•êá@TŽŒßnȇã7ê Õ]¹=˜¼½µÝº†m®º¹F“’ÐM‚­ïÿý|ÐÑN4½ÈÞ¯hÚ;ACªE+Òo36(‚ hˆšü›æU}o±jÇñSdóLž(Çxh<û“5Îê5¾Ú´wÈ^•IÕªß(¦pуÂfh¹Æ]nÌž#{\:!¯˜Löýæ5Db¾Jš`jœ"ÑL¼®hÒÒþ~ƒ+„û/¿¡\ë¾Õö`óß@FüàøÏœ<^k1Æ%)¦°ÚŸy2›MOPK~vËKt垤û(=4~î»ü#¿a¢tX7-¥ Þò=zñÏù1¿¡‚)ÆHfvñ°ZÖU‡Wv6ÉG¿?q /Ï·B}ŸèÎøîû<ˆê±¯†ÐâL ×4ÀœÃ‰ãÅZÂzAùò¬úñEF¨Öû @Ó Ó9Åå êfÿ7Þåœl­ˆm¾ánÓ3~shê ѽדþŒA=©ôÝ>Pô|æØœ!¬T/_¡nJñ좥 ô„Ϲ³V£aTÀX‰z¿œ0gé¹G­L•~ ‡¿Gá8Œ‡Š MèTp^oÎûßßዊA«å‹´¾‚ÁLFàׄ: Çž]P\tª+§¬Õƒêä[zŸ“á—hEùêš ={Q{oÞK¸;™lçÜ*½ÅØ-÷°ùư,Ö+4¼§X•zjL.I+Û¼Ÿø©ŠdEl0V}ú˜ñу“EIéˤ˜2ÿ›Ÿ‘ÙWø†ñ/Aóã_ÑÑsÎ>ŸQÞ,X}÷’æ~ ÎÞÊû‡ÿxƒÍæ£ËÔ´ÇKË> ãn òðxPÜÙ„ü¬hYæjkoj•Wz7ïîx0â¹ÿæêŠ}þ燘@‹1}]Ñ:p=C]¡:|ýݤJò¨ ¬Í¾µsŒ9açXÝr ~½›·ú9žø9÷\“z;Ÿ‘O2ÂFÏ»wÎGîÑÇí¦-+o›¬¼oVÉ\ìÍç<8^õ5¡ŠðšXXŒµ`B+-v4Â8÷†&ôÇ’“Ÿ›¼¥çœ*o{úÙ'îÃØ8¿í{}ôxhß~­Ø »û >íÃòbO€£4Ǹ@¨ëd$5ðÌÞfüT“µ„}Þ<Çki+½ŸÄêÅ_o”‘cƒoðM|wB@Š3.~ó9K^ýáÆ¿úÍ÷ߦqþù”õË;Vß½ Z–ˆm%ÐÅó LlQ:ñ&u«Þ×3QEœI4§;Õƒ2Ú1EŠ¤Ñ‡R¾ºÁ7|ð¢ðÒv0z'>›±Ì°ÓIl¶ÐåNéìQãOA ‡Æ ¾"TÍaWñQ˜÷ăғ8È´68±’g[qóýb ¹_€Í±…‹Ã›’P‡NÉ÷‘פà!¿H:°Êiïs¯£Õ)ãû =ÁêØø·|ðcåŠúfÄ`2GhêÝW47Ÿ“кN‡û®ûä;ž3Ð(Jîò0®vöÉ=¤T@Õìèsr¤²òÀœÅXÂêŽú®ÆL2BÙD%Ñ'NJbOR¦qìUòTûçð •÷kÄžýç¼oå­ÍT×ÅkÎy0Þ&)TcA+ª«[4f”ÓܯÉ./°¦¦¼º3š’Ï¢aÕ÷>ÇxUßÞGnh’çà›…úëìÛ¯TÁD)GÝðõëúÄÅ·{\4Þ75»§O?U£1‰ëéùz _ØC ·±SñËUô‘c´’˜sFÊZËèDÕÛ;kÔ4M,sGð "­×¸óK&ŸžS_]לּ·ŽÏ?î±òîlGO CM‡ãƒdó)ù,#ì(íÍ–!AþöxÁHÍÍŸþÊz-û<èAc”uñØñƒtÿÚVUŒsëv6ÍÇ뿎ßCÅ"ê–ŸŸE+oMènÐ’¤žïD&‡gJwDwÆAýšP6Û†œŸŒŒ]jÚ ÿbR骭N`,b<Õõ’‘Ÿ94€ú5¾ò»[ñZsPT-n:EÔT÷›-žð}>D“:Õ’=%‹#ã·º V²ŽOy–u*šÅ21a 0Šú*”âÏdŠ9ðáñsxksŽH´ÅżU¥Ð³&zèv#ލ®—4U£ú×ÅðT‰ZÙ™E} ¬„ÚbrÅ7›ú‰žó€}±6©š9/" =h°ÓŠCf0ª‡ïóƒ±g8V‰µ„rEy½Šü㧘óƒï§5õýì˜lZPÝÞbF3\h–u±²n\´ÖytkS8Bsy;k{ï9ˆ 6ݼ«ÒOíÝ·U%@ýŠÐtÔˆcÏSƆ’a\Fið ‡1‡ âÛ’±K‘ “gé35¡®Ð.-æÄÏx®ÈgöS¡jRl û¡Gs ARC /“AÐQ°ç„<)|S'GÝ/êÛ“ŸÿœçÿË?ý‰Wø¶ÛD8î$KÙä+X(¨OÝÂæ‘ב’Oúkî–ýi¹ ¿Û¿Ý&"yž¬qõ$Œû]õŠéæ„h$Ú»7Í“Ùá¾ýÛbw Y] 5%”U¤ b‰ÏoîÉÁG>ëP{Ül†Íí®ÉèIßgÞÁžñæãÅÂjI}¿ÆŒFÑy]“ŸŸ¡u‰¯;as)á±Æ ï`Ϊq=Ó:xopxXÕ( ª‰>ßþ¡ˆÌ=€ ¡œÅ/ï©oWس9®04÷Kpåʦ“wKÚ×dzPsY-y„Ãk/u /VI yá¸LÚ“ß#ƒqB}K¨b]tw ‰J&ûR°1ñ4dg³mßÄ{yŸÅ@]Rß-P‰TŒ×Šq> ù!ÑTÞeÜHÞb_–‘‡>aœD“›ðŽ®G¬‹ï†»ªUãßOÝÜ—¤‚¤Þê@~1¡¹½Gm•1ôal;ÆÏ: ½åËn<Ù|†G€+¬KšûX{+ÿõþþF²ñ|þëŸ%º{JoÁph¦Ð‹|Цß`ƒä—Ñvs'=Ô5jèkR¡ööµF*^ýÓY-Áåvßù©Q~OVÞ©”a]¶Ï‹í‘¥ëGN¬$ÛŠÉ dó òy–,Õ;¨AOƒ_ï÷·Q†0pÒ3#‚¡ßèržeÓPXÒ±ƒêA>úÐíÍGŽß"ßIp_õÁ€«*˜lŒ)ì–ÿ¼Ñòë@JÊ÷ØÙÖ•‰—%O<E½!;?Çv—ʱ÷ù”÷¿gmKh5? tÚó>4žŽqŒ±‘·ôðytí…E¶TƒêöÉfØÌ³~µ`üɧH¨ð!`Gy’‹îÞ£Î5½‹9¸Äål?·Ô{Zïz%¿˜àÆ97v6Òë’òjµsÜPÉ>Zzðœ‡æ,ˆšû[še»|Ž•’êªÆÍ,¾òdgsŒ„K[ßœÓáýèsî³ X«êìdB~^$^¯ªr Äžîû|t|+ÎõÄ*±†P•T7ëéÓÍùèû©¦Ž,"3ƒ”øU³3 Ù^@Õ‘Ïç1ŽÂ·ñÐý&kû”çÜ~ŸU ^QÝܱsE;uÏkÕbG#`Ý1ä¢ç 5„¢¿î>@ÆØ\)_½Ä7Åå9n¬øõ2¢â[`åM÷ùnìÙ—.7Ææ.UC(ñË%ŠÛ-ç·?·=MŠq#L‘Å¡Õå=\þþSîþå+´xF>!)"É1ÒÚ®®ocÜ4Çò$íA {ÆA:ßT¨´rÍíš³ÿð[.~yŽŠcýõ—¼øÇ¯1£qËÊÛÙÇ[y‹FdpÃ1éõÜìd•L±Aæ´·ƒý8eb€ °·£N´VMLX>TÀRÛRÿ§¡<„龿xa×$õT÷ªW®)YPëC§ï Œ¤ ¯ýˆQ²q}'®9ªÉ½.Zã>¸¨’¾÷ž+šu¸"G}_®ÑíI|sÿŸòtngjŠ3£QÔà|S‹j^ã3Ohå¹Ì%~UÒ£YÙèMŸ‹æ(1ÎÆCã–§Ø`Šž{ôº÷é æ,Vð«5~]cÇcl‘ÅĹw¼F«æž.u¯ŽTn^ÇwÌASÓÜ-!ϱ£Œ°®Â Uìd›4yë"hŠ+‚6þ„8Âpìì?{úÆ‹uà›ø žÌÊ›•“9üzE¨c+›½,% Ýu¡>U'}ÀŒG»äë]½Ï›ÞgO7@úÑÔ,ÍNNÜ»Ÿ²ÒK¤:íÝg1q¿‡(ôæ´ý9ç" ý®ÑçvLÜüY{}šMqVó:܄̛ÕkäI½ÿŠÉ&s‘VdaUÊŒ¹•ÿú¿¿‘|6¿øÛ_a›2©ìÒÛ'Ü6O,ž(²ù(¢É:`ºgÏ©[.Ì>šÙcz ~ßÇCclR0pSÇÕ?ÿ·ß-É ×‘Aû€hÛj*{P2FÊ’CãûÖÊCã…a>ó)ã£=r~9ÇØNç»KF7ëíúˆ]麥chê5!Æ—‘Ïó¨}{€ˆ _/Ñ`ZS=ÏêM9\Ć+;š€¬#zcL§D¹_ Ð Ø|Š)LÒ:WÈ,n4‚rAùêÕÊ_\âÆ¿ZiOÆCƒÐ@v~Iv–GªHHå[~jVÞ`òœ°¼¥¼¾ßBuP`Gc*­#A}ºG³m|úñöç,Æ&ËÙ+ª{O~q›¦ç6dw¬ûW„ŽžµlËõ{Îs&v¾KîË[–ß¼ÄÌ?æâo>bñå—Ôë:-8Kvy‰Ëe¿ªùDVÞ’‹F¢±Jž%e'öbÉkÄžA[뎑JË>Þ¯KêEƒ±­½à‰æ|8‡îx§Ô··øZ·aÙŽfˆ©ðËrRtÞõ‚›Ÿã&YK%‹§µòNr¥’g„ûkÊ›eRyÓ=/ò ÝÙŒòå÷3cré¢ôX”y«ý1›=ÆP¾¼Å=ÓY¹ÄWºËÿÞš•·tLŽÖ(cFÏ'hµ ø>IÇ#ˆ²È#¯IZÏC0Å4VBC8È#M(¯nµà›Œ8—ísUT8Âs(¯ !¢ÐIì¢Y4\üþ·Ì¿8£¼^B6&Ü|ËÿÏ—mš¹ú€É³#Âã[¸2Þô¹éhŸ·Ò£÷Ù£4™tÇ÷ikîݰ¡ñ‚±B½\á«Xºù AèVSœªò¿Ï_Ú{ ]<’T˜¦ÒžÄù«š¤1ÆZÚ•”ÞHâv¾û×íx—¤Ÿ-ÊÊÐçÌÖÄ@’nù†oµ}7ò_;ËÝ·½Þakm+Î!™‹Žq?¥Õ%mjB’™¾þ:Ýʶ c:XÄ&9·ú¾“·BÕ$y¸d~a¢$Ù‡°OˆB]£O×­»Ý8G›f'‚±±Z~— )^1ã"éÚŸ`å}Z¬ÚÇLŠU»ßçÐzcã-ïi7ŽUYí¸g‰ Q‰å˜z’‰Šú–v‘X-u“¸±†§Û%½Î ŠÅºdgþ.ß¡-øH]pñ(Ëð'¸†MžáЉùšôÉÎÊqtVkchÿjбU“ÿÇfïÛÐŒ¤E5z·{ ¼Fþs.Ô7+Lî#Ôw+Äš”@™Ïž3¾œï$’úl6ÓÆè&9"a—ü)'œê[˜¼¼îxNB¬0YF6+¸ûó—\ÿùv”oÿ(»i÷D£šÄáy@a¢ýóºënÝœ°¶€•ì/*U°6"Ñ[.t×…¤¯1Й}ÒøÎgžd<.èŽ+×¶›ÕÖKìå'\üòŒëü7‚9£xvÍjÖ/n°£s²™Eƒʇvl9Å|¹Dkvüê¾Óp»»¶÷þ;Dàñd+™¹ ŒÆ õ¿ªKÀBlM0¹é§J´™ˆ§Y¯gü¡kzìÆx™D“ÝÈ+µJ}[â½Ïé¡Dküöև<ÑãV¾Ú±þã%³4w×;Ǽ׾G4ÇŽsBµ@ý†“©h°óKŠyËò¸Ã¥Ý–^cβkòÛ·S„šêÕ^“ t²_ÎΊ`ºßß TÝSØñQÆ÷$‡ªÏÙd†úúŠjYG[š² £/¡ªÛiåk?çããæl$• Ù4U÷ž2ö "Ð>gkðeM³{ ÚO>ç¡÷3©[§T×W4•¶xÀÉg×àëý¾¥Í?6Jv‘ª1^Ÿü}1˜Ü¤*Kµm,{£=¯˜Ñ S$kúz…_WDMHí§ h¿Æ5µ|ìÈQß\Ó”ŠçØÌîçWúÄsîĤ؇“%íûME DÚtÕÄR¥î(b½W=±1fr˜N Í9í1ÍÝ Õ}„¨Óœòc³ä˜Ýâ‰0(Uð¨<)¾Q‰Cñ<û¿¥(`õjÅòÛ¿â>ý9ÓIÍÿß?mT8þÓ ÂÜdùÖNZ6Tcöo¢zKv6AÔïiò J ¹µ <ð~¨~Hxý8ÝÀä–êú†õÍãÛª¹ÑkŠ|¬cçpAƒÇ7!]žÁ8‡ˆÇ×~{£ª”—,1cvVÞªƒœwºÕŒ#‡Þ£ùpß™SN?tMÚsO$‰“ož±¢hÓ`FSйcõÝ+Trl‘c¬§Y׈ɱ™ ½ÍŸzP ‰¶f@Ÿú1ÄÕÐZFšdÛâö·÷Tß:8vF¢Ã5ˆ„–¹C÷š Bt¡Üi¡œâOžÃcÆH~°"'›iè)Û=ö‘ÞC‡uQªÐ­šÈÃU†×á0&”{zc³·ê…á]¢V¢Jéþ$Cš3l4™ßó )FñÀQ7Ç·{2‡_¯©Xx¿«çÕ’{6¢ÐÁ·$ͺû˜¼ÕËŠ½ıŸb=áž×vmÕv¯‰¹4ÝYN‡À‰ò)­O§ßÂ!F uEðD.íàZxŠ9Ë&Êî* DŠ£žòƒñ61Ô·dæNÝ,"fWI>Ï[•£„ºN´£M¢b0ÆîòTÑÔçæ’0‘î'•'í´ã;‘añlëïãL¦sòLYþpt ÿ¯ÿtƒ1óül‚Ä¡†üÙ3²i¾¢‰2O¡ép²dXµ«CJç4ß«cÙ/fÈ]Úž.ß„D›‘ÄæZÂÀøN7±±Žæö%×ÿúWÔŽÒƒ<¼û¡¬(>ýœ‹_KRË+®þåk¼9ãòï~‰ 5f”s÷Ç?a.>#wK®þíÇØÚâÏ)`­ë” mBúð‰êØ"—·7>ø† ŠÍ2ðž ‚µÑ(„¦&HÁèã õ¶tÅ7ô¾÷SõƒXÐrµ“ÍGµA «du:Ê·'uÙCÒ¥ÒÈ>ª×­˜9¨®nÀŒÉÏÇ £µh¢½ë&I:ÉHG˜/[7;Ù¨uQ<»ÄØD'Ù̹Mj£î-§¶4¦×ÊWèG¬Æ›L¨®¯¨u’¶’äãÔ{@ ìH(_Ý“ÍÏAc£U›‡®ª=ZÜàMÜ ·;VŸ4爮T/_dÌèùl›ämÖšPQ¾¼CFc´YáWìò‚ülÔƒ@3`|ä¹ ŽïtÈÊ[ÜÑÜ^Q^¯°ãâ<~±@Ü„âùší|δ¨3=öåÃHæ sñàjG6R¤ÞIìi¿!4mZòzo{ÎCãLn⻳lbùÙ&“âFH.„åewˆÔFq—ä³b‡^¾Îû|0gÁdP]½¢^ìl†HEXÕ=޳Üóº@£‚äcLÝê´^ÖU‡M§=I°“)¡^ÐÜ׸IÞïÕ0ào Iebçvšè"ˆ„¨ÂÑÙgžrΪ‚-ÆHn÷9E9n\r4Þ¶âà*ÞIV;ß¿O‰çûyÆÆ)Õ/Ô·+°)qn]“¯àâ÷¿¤~õ w?”d-–Áps$OÒ€oš-°j˜ÿösôþÍÏÑõ-ÁL°Rrÿå÷H‘oh3Ïf#ÄoŒTb÷ð8KŠ.§¸˜$õƒI§‡Nõïb|›÷Ó—ôé‘„»ó[báþšÛ¿¾ÄŒ§Ñ]+IUúª&øÔ½_yòŸ3ûôÑ€¿¿åö/?"ãsfŸ_¢‹5Ù³3Öß}œ='³+nÿr•ÄÃ÷ÿLJ U LNá!3ý<©?fü®9I};¼MDmÑ„Mm\»òE0"[>ž˜œlRШ=Jžw<¡j¨‰Nôr¤òA?E"I}½ëQ‰ÆG2C³\|N6u­ÒÞí¢¥ô†#}òA锃Ìko©‚l‘öпN 3 ïÐ˜ŽŽ—-z'F Þo™2o6çØìj¬§º¯p£1bëVSͱû¤‰G˜EŽ;ÈäÀÒ!YÇ:ŒIÈPâ¦G…šP“ö†tMÆnùô‡×Ó‘78IUC_ã¹íÞ—ÈUm’@¼¾Žf4qúÈçÌ#ÖÒ sÉ‹m¬Úô켓Øc#ú\ß-¨ïëEúÛžóàs–ˆÔ…f'¾ÑÎUݾ¾®ã°é)DâÞ} _ÿðû¼I‡Ì,"rØÄ¾›”QÚMžjÏÛÄ„hm\ì9 ¾j]ˆr²sGÞШŒËÑPâë°Õ¡>jâµùgU-ÓŽ#*ñBÜOCÛ^Ü<áœÙ:Œc“séñx MÂNúò¤xûØøüúãžZEÔA¿‹jaö«OhndyÕå.¦í¡‰}T™=¤°‰´ª½°(½'ªødë*Á Ó/ž¡Ëu`j œñTw+Ør …¹-&—çQò ¹ŒsîuC]ø\º.7æ¡ñ{›“öÛ~Ê‘ñ=‰ðAé ‹ ]S²Á4aÍÝWßã%Èâ+eúóOÏóx–(®µb² kJî¾~Éèó©~øŽõ"`ó4n6ß7.Ù½IbËØ˜pvÊ3o½L~Êo$‡£Ð4ä—3~>¢¾]ã&–Õ·?à½Û"ª!–|ÀŒ&¸i±ÝL”ŽÝ7´7 oÊ<æ`ÏÞÐÒËNˆlo¹NãÕþdz~yËø‹Ï·×x‘Ÿ9|í|ZUý*-GKcocü¦D· Ô;î톩;éÅ!zÀ¹l±¢_7v‡Æ6;>0‘79=?rΉ&¡nVàW÷¨H¿³'¶9úr¬ºz¨o¶i(Š 3:#›eT?¾ È7É Õ*ò²CÀÍÏÉfš#È$‡ˆòÉ㇞ۦ*—ê«ëˆfºT1òÑ:¿<ƒºÞ V?çc×ÔA23gQÔÇýÔØX~ØÅïØsÂø¨æ’@͉ïÂS̹û~ Ü)YsCu½LM¸%É–ËvÃN4a:» Ÿbí„÷Y2CswKu³ùþþw!¾ËІ€É§ˆõ –§Ùó¤#Bãqã1Ya(oV`,„šP&mîÖxã""îl’ër@­K¶zÉ Ln·ÀH¼#5õí;9Ãd¦UÙ3ñ{·“O´Ï‡hcÞ×`­{ÀD ¾YDeŒñP.2p€>9> ÏñSÇ‹ËÐfMs·ê•Ç MI6®Km<ÙåGäãÀýWßA–§C¿¤É´£­Åš ;!‚oY{+¡QFŸ~D1ËÑàcÓn)¿{ÁêÇ$Ë6æùì W Uio›ý(ZÈ6>½¤Îæ®,R[¦„C{ÔÁñÛ´«Â!‡|ÀÇŒ‡V³T»ìƾI²;½ÅL]ÜrõoÁ›c_*óßü‚éeAÀÐÜÞã5ÃJ½ðL>ÿV/yùo/8ÿ»_QþåKwÚ’¬jLÜMø¬E'ìáY ãE¿ÿ9ò’¶Ë%Ò’kbwy]3úôgÌž(¯–ä÷ü+MpûâæÉDÄ¥Da+cslÓ:±~0ã÷R´bõâšìÙ3dµ$˜ ùYvP¾Ü£pÔ%Ì~p–¡ëÑ~ý­ŒOHL1ކM³3ÅxîM2úÑq®GpŸæâ×któB>éœ 4”1Y•#ïçCÍ({ Ë#®)ÄX'4«²Øð¢»z°£ñކÖk©LO¢wÊsxìs‹‰¨ú:Yf³å<‹Ø´ÃW瀮 ±½MJœs”¡¸œbÄïª<{ªÇQ'Ô7KêuˆÈóÛžó#žÛ®ªjÕ _6QŽÐ ]îW„&>ÓXI`·hô|ز︵.BµÆ—~Û”{ô]P‰öζ!ÔÉ0¨Kå@N|×ÚŸ1é{S}1#9Ö?ÜF“˜di½=0`"ýÂE§ÍfyKS:Šó ê˨r fݾ¦«1™må#‘Šê®ÄMæØ,°Áh"¨TêÐé…xì¾ÝÝ“d;oŒo©¹ôn‰Ég¸‚Ô«óáÅ[1–P.¨îÖˆ±`åÀ§Ã¨÷ØÙ9YV³øá ¬‹ž=6Êà}½åJ« â#Ò-F¾Š=k›ïÂqñ»_0žg±Úæ,¡nXüé¯,_Ü"yv+ÿíþþ›Ï‹Ë9„¦}FÜ%Ew‚äí°'1×oªÝòµ<~|ïo´Ç ЧŒ`[³“Øô'©DåMêDYÐèJ.–°¾gýê.6Çe†ÐÄ“‹y¬âV2‘㺂O @'¹µ"¢›šcœ÷˜,‹ùp’2ÆÄ]£»Æ #û³ ;m"6$´=t`àÃ/¾Æ¯Ö¨¸hv‘ÛÈiuêvéù •÷Ü\tB1"xB°ÓÙYëð<Ÿè~Ÿ`¬¡¾»¥YÕé°%ýèÅ[½GšJuѸDÌk¾kªH^D)¦²~\óU´>LŽ“›È÷–ìb¾sÔý2²p&…#tïs;‚@÷ð54÷ |#˜Q†V¡ª0ùw6A‚G¯é¡uÑ7ž7›sE¶ I’ôwõ5bO•nPÙñ:EßýœÛô‘ç¼AÞÄYÂjA}»Hô;ƒÉGd³‚P•4«õÖåS““ªŒ&äói4$ 5ÕÍ-ÓãoN—T‘,‹ewo0#‹–%‡„î»æÑ²9 ‡ŠsѼ#ýsX-ñ•ÇÍ’‘ÉFjTÒD ~¹[ডòñý¬ø­,GœìKÚ¦ÓuE¨84ôdÄ uI]VHža$–8šjM6?Ãåýµ·±"ß2%:n”¢¨²ÙY˜}i£½ëè ~­ñ›»'ÿúãÅX´Y²~uŒÉ/Î065C:õ:¢9]îÜ Òð\Ñû¯A±ãil¦i¶š¤uÓ0>Pæ«b…fyOSùŠÿ®çœÌúîט<Û–X»&‡¿!«qãhNQ5ÚЉ״‘Õ+l’Õ‹‡2ãZF$t¨gÇŒQè#ãO¡3ÍL.4÷ B“aÇ¡YʱvTì»jÊÀº€³zæðDsNûNðübºÛ·Ÿ öÄëñ”W‹fÙQ7Þöœ{ŸÛiã£ûß‚fQ¦†3‡É"•ƒº¢©…H¶Ä}$ŸMGÐõý}¬É뾟ñ cG3BuC³ÊÈ/~±êw¡U&UÅ1%ͺÙÅø.Ê“‘,é0[Ksû‚r%L>ýñUD¼7TÍÌÆÆ5'T77_P\ŒP¯h( e šh9A÷-ªU¢\\nöMcT@jªÛ[šµ¡8?ÇMÌŽs,‚6-‡¾Þ¶—„´år˜§¶®©¾½§^U4>0zþ1£Y« ò”ñùéâmÌM–T×›5ÇVaå0VßT۔ί*¦¿þ5ÏþöSêW·Ü}ù5^'\üÝÏ_"4\ýóŸX-k6ßÝ-µN‡7#´ÌMQ C Tªà¢4›úf+M&}^‹½~ä;ûàä?4¾ÍÏìµ`Õ#'¬¾2+ecsˆ%߀+2 ¡ivåçÖƒÞØ‘Ö÷Õ~iëÁ“—¥'8é™âc΀É%+¢Å†fYã¦#šÛ»Ømd§P‘ĵÃÐ$:ƒvdæ^×ú}Œï%ÅxŸ’Ë1¨'xŸPe¢•°¶ÖéO ]ïnÊi®[]T›áfÕž>D•~DY4&_iŸÆÚV#Ïû˜sJM³l÷¿oö·Çü†Ÿ­=òc¯i×̪©k_CÀŽGo`iüš=C3àËhNeM4™ 62ÎáÆEKÏþ‰¯ë æ¼±å•Mr–äG{m¹‡b•›ð6æ `Š&2Cb”ï`ΧþD{œ± M´c76RóB¢„–d$;šB4ƒÚÐ5쾟é3Á#Y¬à„*ºi]h\‹K®Â„1±I´ñ žâ\j dÛ”ïÊUCv6Ð FhkBíS,·ˆ3 LT“h%8ØímO‡°×à¬í=ÔLîvMã­ø.bãg?€BŸ.Ÿ·½G­y~SÒ›ßÐwO¨*ÔÄü®ý.|HI7ÏÁšm-E›æÁ­q/—~j«nbwfZNž è5=yãî{6VÞÓùùo~ õ¾l[ò'¤‡lÅù¿wŠ?Ž@ë¾jÇ–ýa!ÐÛ9˜ñ‡.V,_Üa&Sг"Ú–#û°¾€¨¾ýšÿókd<Ù®½kp‚DN[}ªØ,ßo8<¦ÂÑE Á—k|hÓ0úÙ¯9ÿÌòò}Ëì矲øÓŸ©q¸<ÇŠªì}g÷ûm„l~N~–õóhµsè>…3õ¾Æo¤ÈŒ¥¹ÁòºbúÙ筷€¯VhC~¯G z¹nïyü^ÐMAÕŽÈÏÏÐp ñµ''ÖAc¨©onð¡-‘÷>çœ sFSÄi ® |M«Ý1Žiko“(ÁÓˆ@¯ªêxÊ5¡¡^Õ¸Q1±<;¿ÄvŽ=ó•ô¦oßfÀZ¼çY™Xr€&Ð,îñM¤'˜b†˜hmÉÆd³ 4þq×ôØ9¼áœµÕ÷ÀùÄdiƒØª‚I ú˜ØÓ® Ô`7I£ô &ŸtOSå ×j(~nöÖ¯õš~½‡x{t|ÛŠ|ófê£ò’ޱý#*>ú¿ýÃïoȧóóßý²…@÷𲶆*a<5(ÙY-Ìn24(žú¦Œ¥ÛDp³Ñ>­uÒî³Ýï„ß~Páh!Øâ,õíÉsŒUªÛ;.Ȧy ZFèš—ÿó”k5ºïƒÙ4Oè5…ÇZ ö,ªÖY—mè‡8ТJSU¨‰åÆfYqñŸÿžÜÞòãÿøKìø·†@SW¨Öå:–äN„C4 Îècö¥}ûÈ;ß²06B½¼£zuGÉgÏR‡vÓ>™ìèZ÷×êAøip ÷’¤ƒj†ŽëÛÿÚ|Qùæ¼[«b„zQa'g¸±Ç/ë'êåºñ¥ŠM~Pƒ›Í©n~  c&Ï‹XïòXÌYˆÒKMÙD ÄÎg7~ÃÆRycåb³SŸ½øð¾ÝÚ;VÞ{¨ä–J§¼Iqúæ&YB·öúM >ŸR\ΣŒÝVj s-ÒÇÕ=´µÞßY?O8ç‹Øíïº -WŒìšÇÛÕ‰÷9çîs{à9k ë;ÊWw±éYwHfü}“$Î"WÚ¯}oÿußOö+W!ZNÛq_ÝPÝzŠç—Íî‹lå÷TröÌ5hUv@‘8K³¸¥ºIRh!Z™_üí„»—ÜüùGÜdJuuÍäï~ÇÈ.ùñ¿{öœé'Ï ËkÖ/oÀL=›ÇŸSb‰A¤dýâ7€@Ç;aаÆ/Wñ¤ÚÝ/úüªc¶ÙƒñM0™RÝÜP¯"ÉÍ.(ÎG;jÄŸã º¹¦^ù¤¿½’í3m¼¯;ÚGò0cЪéá@?ÈÛí¡Ü(¸Ù뤼tùÉ¡¡¹_R/°†€›Ž£2ÃVÞk—˜7j8ÅNuhüþâSjâ„úv‰‘ÐPÝ.1£Qr! » ŪÛÅ®ýüENrè7™ØXjo÷¡€o¢%»%x%;Ÿ!¡¦¼]&ž˜A4ï5"l¯÷§ì4Hõ'ºJ2»ÛÀê*6âÚ,éàö8©~ ¶ËÒ_×Òü»6¡‰<;“Å=,„øï1a41€Hsk!…&6_[gÙOlKB¼9ÉÀA}T¸8,¾È^Ò,vcx£ïÞØoI¥­êËæšCHöÑ Î{EcßvðC›sRÞQ¹ÙHº†]nýï®l(ý¡½/@´}Õ†Ð\î¢utZkKçøl€ª£zöìý9BÓ䈮·n’ãk¼gðe…;›c¥f}½Æ96s¨¯cÌL½@§Ä’šDÇÚ|vhûKÝ[ª[ßÞyµMÆ7²Q9eM°1´ñh0I+Ý¥½.:y?Œ¢èþx\|‘6ø÷È KÛt6Ïós¬Ö['B-^÷íN5è>- Cüßp5l9fvÍb-nìˆm=(ÀöDÙ>ÕkG×yÿÓ/N;yã’SšUƒoÀdõÈ‹³¹IÒ5©~YÝóꟿÂÛ½è:÷dµÇÇmz}%¬´ŒÍâÆÑAÔ7øfC+ „óÑù5ë¯þÄýUƒu1©16KŽI-ûϾÖ–¾Ú¹{º‚QðàÎædÓ,mv}]þ='ÐA$ó]¨[ùòì„ùo?Á_¿`ñ£gôñY<¥‡¢.Q)r u€=ð ?(hyûêû 2Ü8ïöu*}†„Þ䉮®¯ ¡`ôÑ~yKu½ßTˆ+v´S¯d—ˆ_“Õ4‹@ñì Í–÷ks¨õ«qyS¿ŽêÈpÏ„÷˜Éœââ mêCdòÁ}»µ¯¶ûI ×Ê»¬ŠSªë+š•â¦S`QÉ W÷½ÏªH1@ëU’?3 ó\†ß7!P/ÙÅ¢+B•¬½‹ ¦°¨ˆXÔ/)_Ý`Š9³_|L~&Üýñ¯,~(ü ‘5ë—÷¸é9ùEªn¹±žòævËßV ¡Œ«¨®W€â늗¿ûÒ,¸ÿêÊ;Ïåþ Õ·¦É?æìYàÇÿþ2á\ŽPÉ(ÎψåhöŸŸÐ–TW7Ÿ“_α¹2¼öÀù¸_øÕjÛĶUÖ(&˜ ÕH{$&ÑžÊáñ0Ù¼7‹;ÊëetÑÄ`ò ùÅ4íaj|Þ­7“šûªûf…~È/C ê›xÀ‘¬&æ…Zù ýo;wã"%GN§vù>8^öOV>`F#²ù8Ù„·“]=ò‚±òîs$܃ mO”òæ>5 ¥‚ª÷¸é„l–J¦›ßÔ¬_%ÝK>Í<öôó¨ñ @1›ÎðnÒ¾©bBì,ËìgϨ_½d½ð бcÌ€“ЛMBؼÀ†àýÖþüÁŸyìÚ{êñ*˜ êU‰3údBs¿ ºõ¸iveÖˆXëût|Ëãûî×ÑÏD¾¸IÜñÃ}±=›Ð—¢ø²$ø 7ŽªC¡ 1ø¯+Äå¸Ì ÁãÅæE,5«ÅdJ¨Áæ9bmBÚÄCgÿÞPM4P‰º¶[ƒ¡csHºÆè¿ ²KwÊ1:`q¦ÅFiMI–Äç»åÃ{Ÿ_;V=Ñø÷>‡]‘¤÷Òû#.Q½Õ*Z$I¨ª<â}‹kܯ5JFÚ†à7TËh·½é' ””w+l1!?c2¡¾YPÞ•¸ÑWªûȈâl‘êTa¨“!ˆ¢£˜|„užfíS³î ÍgÌ>¿$Ü\S­êè.ü‹O7/iò9£¢áö«‘bB–[|Ud¸Qž´ÄíQŽ:ãØ&6Ñù*´‰öîbµ½—ÐǦ¶?bµ)€Ú„~ëã×ѱ=À€¯*šÒGEÕáFî*ê›®í¤Bاw>òûÅ@SE;xãÌéªEU“‚êéºå’ÔÈ"_}£=šÏ~þ9F“‘ÊQd⭿Ήx9‰ÉúÇWH~F~>Ú–(ÕïJåQz›IÒr|€WÖEzèÍÚö‹’zYc§c²Ü`ÒÉPÒwëÖf7m8´Yqÿõxu÷>ˆ@¿RÝ@Hõ vþ1³ÆÜÿñ+¼u„ªF\†ËFbÇ®¶ù¬zÂÛ0ÔñÚ[ „Úc'óÄåôÇç¡è[/ˆiX¿X0ùÅç„›)WŽârÍ2š0üýBU¢Mè‘͸®‡ø@ÚøƒÏkØ `rìh„jEX—;SeÎ-Ÿ7Ú±f”1ˆ…zM}sGpS.û õ÷ßp÷¢bôùçÌ.sÈ å‹+ª% ¡2ØÔw%Ùù"ûsÖÜÝÆÍý ¾4dg~¹Š’VÝÆªîœ4 >jòÏÎaÃÁ?eßfƒÒ5”¯®vj#Äb7¿ ?ŸDµ¥í^/ˆÔ”¯® ÞD' ¿ÓÄ —ŸQ\žAÓ¤~”À>‡s}0–  ±Åžƒ9ëi±ªï7ùÆ™Ã;˜ó`¼ãMf¨¯¯¨î+¢`@§Ž8øþèÖêØäSŠòfMñüVw5ý}7=û€âp“qLx¥A±ó ,ïX~wiù¿ýˆõ_~À]<'?nÿí¯dŸ~A¦÷\ýËL~ó+Æ3Ï«ÿõ%’O0Î š‘_LðË{‚‚¯Á:Ä7x€nþŒ‹ß~ŽÔkÊ›[Ö/n;ÂÍÇ,¿ù–âó_âê+n¿½ãü?ügî¸ýæžùoNýòU|g¬RÝݪÊm§g1¶5~«¬Q_/bròÙ4ò“•cÏN[ªë[ÄNÈ6*V§Æ¶ã¡6Ïð«õí:šfÍŠh–öãm¼Gkê›[”"ª:YmÉ¿>îûMæð«{šû¬=ž“te $éOIvðVþÛ?üÇl6/.f û=™ÒƒUtíBåÄñÉæPѨVaóxò°ÌÕùy\xû 4ý¤”’SÜXMÉꇻØå äg3l¾É½$chÖÜó¯v×Ds*WF9þÔ$¦=wi—'„PG»]ã v<£˜8Ê—Wxcw·Åº=äcžzý›XbãSP°Å„l’í¨§lÇ6ù·2^0ÖE±ùû5fTV+ÔŒÈ'nŸs׃ԉ„誎Hñô¾ ?±ñ½‡Ã¾ÏÀÅw&•[åa¹¢÷2g‘hËN¹^QÝ.ÑbÆù¯?¿ø‘û«5&3¾œQ<ŸR__±~Õ ºÂWù™Å¯n2]§½Î%ÇAAlŽÍ Íú_:òYƒ} /í³‘7®¥Û5Ü1f øh§Lì uy“[30.îÇû†Gq¼Ö¾ ç¶j[R2o£…1]Ûz9úãtgãô£cOw|¢ Š•$IêÓ¡^ö‚£sP7þÌ9nl«á.Y°‡¦Šü}Mi¾ÏŠ˜„ëûšb>¦q ~+é&Û5ؽG>: ºÉ—8(*‚±J³\E„ØW4Rpñëg¬¿yEñù䣊Wÿô5îãOÉYqóå+Æ¿ø“3¸þ׿LA6!êÈg9Íêžà êkpѦZ­cp—Ìñ ¶Y³üö“Öo½¸CŠ)&””Ë’ñ'ŸáìŠå«š³_}Jýã+c=õb¹=€jPl>ÂŽlt ÔÔ÷ ¼ˆä³ Æ‚Bˆõ j ¡º»GuD>}(öœ£uX(Ôkš•Ç“(žà›CTøIâmr,¶õkêû%ª9ùlhÒ¾Ò×myäûE Ô%Mé;9¯êIÔþ÷Qáâh^µÉ­´ñ‡ ôèãgˆúÃçàDž±~yO6ËX~û=îâ3ÆE<ˆæ9áþŽzÕ|ƒqÆ—÷ùtЬ@ˆ.ƒ¡ªÉŸÄì‹g”ßÿ@½ Ø™£üáŽñÊûh~Vøõ:îSu‰3ÆŸáooX½¼FI¨f’£2Ön©àªŠÉ“Ô$1õ‹ ÉÒ×€V3žÄÞ*}(V b•úv‰ϰ#!Ô¡?ö Ŷ“ãaìûUQBÓ ®ÀM£IØSÆÛh8·¦Y¬£`µˆ„؈­ñPsÛÚßþþöÚt }(‡i!ÞüÃL”úNXH7šO?{ŽQß1ÊV°D{Û€¤2±MRº˜må 6ƒÎ¦<ÓD¾ï“±K'–#2v’YšÅŠê®‚fMS ÙtŒ*Œi%ñ²é0ûÝo™=sÜþË×TëÝ"Ï»{f\Ž5¦?ùj“#‰íêAˆ6ÞgsÜØìŒgÒX=2g¨4èÉã[¥Ç¾z°V[NGÔT7wÔ ùÙYLzT;R7}ßèà«dƒË°ŒÝ`ㄜP]y‡ãሌZèek @†Í °©AÛ1wø@æŒÁØ<êÀ‹lÙÂzA½\ã›0RO¦L~6§zõ’Õ+eú‹Kòó1aQ²~ñrËÑÌçgجf}µÀgd£hý‹‘¯.crÒF|6æÎA‡-2‚_ﯻ7yÎ{Ÿ ¨:²Ù˜úö† ®pàòÈ9 ¡'Fp¤å”XòTãÛhÒ&9¿Zâ}äLšl„ÍmLк 9¥Aîš3‚†šPUÐ{NzÎÇÞç $€dØl²¦¼Z`Çç¸"Þ×ЬñeØ©Ul›,&a²@}Oy¿&;› «^FLžO¨®nP7ãâ7ŸPþpCññˆ«ÿùgÆ¿þ2¿DG3\X|ý#*cÐMS0ÿbÊõþDí-6w¸¢ ¬Ö4ÞÊŠé¯~ÍüççÜÿù/ø:#›ÊëŠó¿ýÍËïXß7d“ Ë¿ÇÌžcëÖkËÅßþ .ÜðêÁŒÏWÕ+nrFv–ÇžäzIu³ Þ×—!ÁàÎ΢[;ƒV=è}1ˆ T×÷à&d{P‰x0¶="~g¨·ÔKŸ*Iqò³qDñoûª²»aÆ9Bµ¤º]uü2Ò5z!;;ÃMìVLBCèôh‚ÆšåÕ¢n)Ëèpƒl·Q;x|Óôœ :y˜´òhÕ´›ÝÜÍÆ+ï7DõDÐ:’ÓÝÈÐÜ—¸ó „fO{ŒU;8»ÕÌ–ÞäíX§¥MJ©C<•²Ô‡˜$ƒ¤2Cß/‚Ö%åÕ±ùާóý©äçgäg#ªÛ;ÊÛeÜë¬Å¶K½-ûrUå­LFÁŒŠXò~¿4ý¡þ%Å’PÖÑB%raÕï{œP(Pï[fÿÿ¿èà~]G·3_ïhÖ[©&΢U…_­‘Ñ„b>¢¾¾ÛBƒ¸é”lVàï4e™NÉÆ9ayO}»BŠ)L‚É,Ú4H^ ¡l¢íxF>ͨ¯ï‘ñ˜±Ahª“ß› %*–Ïy{û“‰Rc„(fGcì¤h%þZEIp A2GX-¨eTCÉFdóIt$ì•€“Xõ̹þ|Dyõ­h­JªÇÆ6;.§Y«5Ø;Êö,Ý·IOð„u)•"`Ù|†+,ÕÕ5JN6³¬¿¿BÅ€1Ø,C²¨Ð¡¡¡¹[“=†¥¤Z&Ÿ_à—+ÂÒ“©®o¨Ë@ñlN6Ê""/úæŽfQE*‹ZÜlDsw‡‡›Å„;þ]Þ¤`t1¦¼¹¦º«±Îí¤Lééß„^6-ÙWg÷>‰æ,ª©aSÔpYDæÃî e™¨^ɜȼMùÏÊŽƒPÇ}I$Ò5šæÜ”÷àþ!hUšb¬ÆÏ˜³E£#“»á¦}³©àyĹH]Òw[nå¿þÃßßH6žÏõÅ®‰pH¨Ý¬wp"NÒpÎm˃Z5,£ X|õ3¹ÀZ혵´«Ð¦~ò‹1ƦE×µ o]‡öH ‰µøuE}W%‰ E²‚â|””>BK¤½Sâj“ÝCW7¼øÄ»QüªÞD›~¡c}ñ]Äàƒ#½œõ]Ååü[žýî×ø#Wÿþ#v”!.ÃZ7àŽ'‡œ7N,Œ×à!dä—ç[ny¢¬m„¿óýGè“Æ·VÝyHÞîd­”Ww¨ ,Ååy¬~Ð1¨üþXz õŠÐjÐ:Dzvä'2†›»Ÿ >ÚçÊúå=ù|²"4m;ï·5‡ÝaqoÏè»þ$oiò vâð‹[Vß½Â~ü9—¿šñòÿþg¼EÝÑ&Ÿ~Æhj¨KB(°cC6?ÇÙ%·øšõª†¼ÀeÙ®¹GqyŽú{ª› mJdvÉäÙˆòÇù³ 4ø*ÑÞ{ÔBzUa‹<–Ñõuîigê>çP2ìx!r?QÅNç¸qF(+z Lºví2$×Kúl­ÅžÁXuˆ@˜"#¬î©%bbó¨åé0p(‰z0‡@a}sN Äþœ|I³\¢Ũ>³££ïó)ï[@5Ã#ÄF*tyu L).ŠføvÊ‚HEu}K]zšÆ3ºüˆÉóéVVÏ7k–?\ƒµøª$?¿Ä¹ ;qÔw·¬~¸¥øÅÏÈ‚ÕÊðÑþ-zû=‹oWL¾8çúŸÿÀýµá£ÿã·œ}:‰òlùñwÜýûøªÄÛ)“Of¬¾ý+˜s&ϧ„¦Äão¯0ÓKæ¿û˜ÕŸÿÄ‹þ+vv¶÷Ül–ŒÅº~]JŸšõu|ƒÉF¸,Ã×e4(3“OÉç±±R"׃òú6r¥ƒ_MìÎbúÔØöÈø)ÖЬî¨n+„@ÓԸѣ‹)QZXOŒ·‡ëh3^œÅ¯î(oVÉ»âxŽ¡>`'sŠóqKª°oT·74K¿³ôæ!®xOHð4U¹ç´*ÎÆ¤¿ OšPÖ=VÞ™KâHÒO©98Ì÷˜!ZCX¯ð«Í©d³Yz_ŒTþôþxó‹³»ÒvЈ’³å<ªH[% ¬Åä¡*w¼~M’Y……¦Á¯«¸m¶Èð‹E4o*²$ƒùС*·üÃè~ã˜#‚Ȯۼ•¬¼ÀÑÚxÿRµn›§6 Ø 7EtíXlxl,y›ã­àKBì(Cë—ì8sú£²ïyÎíí8|¹i}ۯ؎¾÷Oñ2ˆ‹Ÿü¦¢¢‘j”Ö“¢À:ƒ_—[úgðŠ›ŽeäV›"Gë(Uç΢6²¿_'C°3Ä7Q¿ØÄ9š›{¼÷¸ñ8±X¬ƒæn¸ ¬DÞlj¼·ã n6J±ßÊŸþŽ úßQƒçøU‰ÑPã×M뜗$“YÒv2-ê÷ñßÍÛFVeO#>Jó¥< ‰¶îog7ÕkNo ­^žõ¬h”>4²/úð¨&}»u»ê‰@X×°£ “E ÀWÍ®ÒèßßH>Ÿÿö—-#:£=§gmÿpÌÔ·Í÷ñT¯Mƒd²ù,Ò1ºbó{'|Z(©!ŸmZ§¼ :Üå@o®ÇS]¯ð>qbr¡ºº†,ʲ˜,#Ÿ¹}›ÊŽ=êöde6 þÕ÷¼ø§¯Ð|²£¸¼o:ÙŸÆSaÀ׆˿û5ÍËo¹µÂf6½p1버VQÕè“h:yü†è^0zvâ‡9òìŸZ„Úßñxq¿º¥ºZ¤ÍkDqq5õÄˆ¿¯– ]•C÷¨.¯qï@Øm’Õd|w]ôX¶<çŽ*À†=š"¦¢)Wh“î)~ú9ÄäXJ¿uõÛÿlä÷Ú>ÜÍxTKª—×4MCµô|ôþžÑL¹ûòÈ;Éð‹”œâ“ÉÌ=/ÿÇ¿P†3>ù?G&+n¿|EñÉ'L?›R߯©ïJ°Ž°ºeñ—bNñìcJšõm¤½Y·•f„-F@…_ŦW9鵞ÛÑçL¢½¸±c}õ q6·-ª@ÀLç»FBßQ×éZTwcI—GƞǎOs5…¥¹¹Á7vZà×· ùåÔ;µ÷Ðýw9ç¾~ øÕÍ]j"ì3æÚç½Ï§¼oí¿ »C ÷öaA¬§¼ºÆW‰k,¡^£Æ2ùô œ«)_^Ó¬jêª$›]2ýdN³¸¦^*ÙümîX}GñÙÌ~Áâë¯>#›Ïßàælf”Q¾xÁÍ¿ü@ñ³_0ÿùŒåwwHXqûõ·˜ñGLž Õ""¾²óKìȪ&&äå+~üÇ?Áh†36v[ÍwÛÄm#14Œ›²3>þ/?gñ/_"矓ç5««ëÈÿu4Ÿ1ýô#Âú&šva“aS†5Bh ›_Ï3B^/žðÉ,~yCy]FÚ{l>BBƒ†ŒâÙ9&c¯Y~oOzàû#Ïú†ê¶L4‹ÇæCãO]ÛÇÆ Z®ÐÉ9ý—ß`ë5HÍ«ÿùoÜ~_ñüÿø<ûÝ3®þé_¹úÓ«è´º3RI´5¯•¸Çîǘ©Ëɉ֛¦Èº×'º~ä{Dåƒ=ŠÅpibc“é—ëdiÅÁÅØLðe…dYD|`àPß_Ž®jšeùæ'°·êm›AQ9nãùŽPF‘G®£÷AG—©GÉõAãõöß¾õÿ¡›Ê¼Ég$PU7ÈåîÜvº{;sh+R˜(1ØK¥“xYÒ·6ö,9#*£`ÇÔ5Þoì¿£œO¨ÌxŒÍ-Íý2"c³~]¢MLÞìdLX¯¨ïKŒ31èZ—®AQÑ$‡•œA¥#_–ªu:ˆ>lþ&÷4éõn‚Úûfи¿[¹Šô„G€@ïÀÖzÓ­¿á˜î¬É7½1©J¹~|@s8©¨IË[NçÄ?Åû¶µ®ûZÕÝ8´…¥™H[’du­ÉLE=hX‚ˆs˜ÌÊ:J'";ŒµhY $Y†›ño*šUE¨fœaÄÊŠÙ¸E¬ÌDtMýRb-hÙˆlœQßÞ¼ÇdYzWMÒcïLQ4dIÕqägcšÛš&©`‘zRìV%¹çé–RºiX—½ÃîÛ ª+˜ ·-ÅRdä[]ªÜí­E:.ƯYi4&nƒ­ÊûéÓOÖTÖ’‹mõ¯Y­ð^q“®pøué7~K•IVÞùt~þ»_%zÿô'H«¤Ø> ’A}uE]Fé3š!ºB¥ ¸<‹òLÚA¬@ U7²£;cú8Л2Pß—€ÝòyêÅÉ3¬3˜"Çm´æ¦Åjsã¶?-ÄÛ9üÍ ^ýËר÷—ÍŽ"ÊŠÂFía#›¢zXîðn}GðÈèœçÿ+¬–˜\¸þç?²¸j°YÇ5ÆØÈîrïzO{=õ©SƧ®Ýâr¡iåD¦‹ C{QwR×%‡Çwºð7¿ã,Íò–êf•áB´"¾8CÄï½ rìû·›L ”«¨µÚ—ˆ÷q‡ø‰úøÍ¿÷™}lÿÿ€˜3.ö;Í%qÅËe4#0òVæ É×Nsš›W4¥£x~ÖáÓõ¯#±‰¯wµHkCñÍï3žÿçß®¯³ ²ÌsýoÁΞSL•ꮡx~ŽÖÚë?~Çô·¿åâ‹‚—ÿøï¬—g?¿„ª†¢ ŸÊ›ŠÑ¹áÕ?þ Þ\2y6Ú÷Fñ«%"cÌ8é,‹!”wTwJq9!¬îú|ê=j,úP™½ñ±r`Š Æ5øuÿÚÖà‘|JñlMÝCküph“ªë+êU´ýÝnU›J‰Q\žGîþ±9|¨´hÖ”¯®Pp§}Ý÷ù¡÷3Í;*<1©®3˜M%Yœ¡¹»¡º¯Á7dŸ|ÁÙdžÿŸ"Œ?æ£ÿôk2Sšeƒð«;V?ÞP-—¸³Èǰ¾º&?;C°—ÑF^,”/¯ › Í_»FíŒùc^ý÷¡‘Øè®!Of©?C±ã НÜtë;Ê»šé¯>ÅOy[‘ÍÇ,¾þ3·ß-±™!¬+Æ¿þ ³yÃÕŸ®xþÿú=¶^²~uÍúå qcf¿yÎú›¯¹þú›ÙhfæÜnoþ[›ˆºggy<à Å68”)ìW‡ñÖd–úî†ú®Œèªî(&½JY½eßóý»x+ÖÐ,o©ow`¤ø@jŒ+0ÚÎõ““lLY*‚˜x?õôF:Å„Ðøm~óÿø[Æçß@¨£N¶õ ?þ÷/1ãñF…Ã̵û¥.vdê-°Ç8B7Í&)Á‚4©ANäít²OcpÓÂÞMm'°¬‰/¡ú:v¾³+cÆFÆÞ˜lZ ¾‰òjAZÜéN²×þ!cÑõ‚Õ«&/Þátž¨%ll” ÁDz—µ™ónb.£8Ÿ€W\n©®o©Êp  #ÆÄ{’ÅôcžÃ©°…úX.Ïo—ÛøÛË*R˜=?x ÆÐß$.Z2@1Y5Âym1ª†~•AªÎ)°Ò‡6þzÒ~9iûNFã–îJQ0 •~Ê9´×q²Üõ5ÁK´Ù6 mñaeA}o4]wˆv±Þ2ùôº\"“dºp`b5ʦ&éKk”jU’]\2šZÖW·øJp¹ Á`“%|(nê(_¾ÂkŽË²ôoø6®Ç”4i¨µÁfæDkô×¼§S1 ÉÊ[ûÖö†ÆÕ‰Ælµrßhyôg†Õ_»ñªíúÄsx‡sNË~™ý±ïóS¬¥¥¨'îĸg¢äžBÀŒ§dcXÿp…æcÆÏϱĽ¢ºh7²„ÆS¯WˆEz~uœ%´ú¡±I,ª5’å¸BXýxš,¡¿q9V˜Ô0§Ll#±‚=ÊÐPݬÈ.æñ€}_mQe7Ÿ“ePÝWÏϦ¡¾_¡â0î,§Y.¨–MBénO"¡Ðí3ŽˆÉ’™Ü‘5¡©¢ÂãT£¶ÏAkB­ûÚÊÛê#Û»Ø ë6]iï§Áïš![‡ù x¥¯ýþ¤žÙä:a‰ÖÝ®ýÙ{dÔCq9'+"E¹¹_Ä"ê)¯îg…Øy>ŸìNm§ñس Š‹ilÑÏEŒ–°¾ÍùTh"7®¸œíèî Wºû»ïÕ Ø Ä´Ë='{ïiVÍvt[Kâ(mÊŒbp#»C:ô:®Š¸ ©\ýá+¼ä­õDNsú󫆳ßþŠ‹_]róÏÿÆj™sùû_¡7ßrõ¯E³úI‡ûjH>eþ7_™Wøšªq8'ûû<-ÔÃŒÉ[¾_èwE¯Ácó Ùù­›þ|D8ÄÇœ‹zÊéÚ¬©®ïv‡34VÚæç¸©Û—F{àûÅšÅ-Í}é?¾ÆŽÏ)æÔ×;ÊÁI×/@/×)!Ü?© ½èêOl|/bÕåÆÄä˜ÑüŠõ‹ÔcüÑs²QlÚ Õ*ò“<áˆÒq£}nÒ¤7BXßS]Ý›_œ!z6å~‹6+Êׄl³¿ûÍ«+šà˜|<áößÿDf¥|yÎÉÏÇQr«^°zµ¤øø3f9_Ky»ù³ÈæQþÍŽsÂꊛý3¾Œû¬6ûÎnÄ’¼;›‘…Õ‹Ðà—+ØØŸ|8qüv‘·h6Ç$u¹VoÉŸ?‹‡´¬ÃÀs6Çl­‡ÐÛ‡Æ â”êꊦÔÔ±?„pišƒ!ö W؃¸xp-]ZÞÜŢå=åËk°Ùás>†êò>?êýléÀ›;mUcbõO¨ooñ¥>ê«cbÓVžo¨WKêÚrñ~ÉÙgcî¿üž»ooÀÀôç¿búqÁý—߀3ùì‚òÅ >B¹DƒM±Kuõ’º dEŽ6w6Hk(©¯#>¿˜¢~…úœÑgjêÒ57ÿüa4çâ7_мzEí-Ù8Çf7Î"ç›$ƒwÍêÛ{Ìù9ùÙg=÷ß|G½P¦?ûœü,ÇŒ üõ÷¼ú·ï0y‘r`ÁZ·íµRc››˜x‰mb•òÕ-¦˜‘ͲC™Ðx(ÎPßÝЬBÔtß"=>ÑVDÄÿ¦Aò ùÅ6•½¾xk ~uûã6tØ ß벺‡s‰àdðqŽÖbmW,B·‡‚à|ûŠ%C gÓl Ô´j˜üæoçÑÓEJ Eæn:j%Ð)7³³ov§¼ˆ~4É”Åt¸-¦ÿ%z™[AWMMNÒij«ŒÑFŠ­A«’êz™:×K®©÷H6"¿§nPíX{›RrÎYÝsÿ—ñ&ÇYLìõ”:à« Cå™|þ)³O§,þú«ëšéŸbMÅòû«hõûPÊ MYA>åìçŸ2Êî¿ù²3X¾‰ „‰GÅãäP²40>:ªe¸<©oèWnH𻽠ØC‰œö…ŠzYîu—«J”ʤóHû¹ÈbíÅöÕš¦RDÞ7Ø,rW¥­-.CÄ¿ŽÝ±¤æ#µÇÕZN¼¯öøSß焞‹hEyo,ùÙ —™Ä¬ÑÐgÿû¦s0ˆÉZq^P_R/KœlRÄŸ5¦wÝÅͶŠv³¶`úé%þ憺†ÑGg”?þˆgJæJÊ;0Îb‹š{¯Vdg—Lž;Ê—7T÷ &s¸ñ1Qò3›O«åË[T Üd„1ФªÊÆrºª1“1.7T¯¨=4`xÒçÜÊÕ‡}Óƒ“~ÃÄç.:Ìq|ªµ:KºÁ6$tÖž°¾7¶ëv¬”bxïgßv´q÷íÒOzÎosÏPq•Œ1I¹CñåŠà-h½³‰gÇM¡!xÃøãKFóŒõ‹kÖ7ëH¹¸|ÆøbLõò%ÞLžŸEýhç*B&a2¥^ÜÓx҆¨Œ!ÄïצÁWŠÉ³xPª;cµdcX|ù=¡˜0ýôz¿ *›ô^xÜ,%¬>±y°º¾CÕÅCšDuj±ÆŽÆ¸Ââ×5ùGϱ,¸þÓ÷˜bŒ±àkM0éPÏ9ÆÉÖ¤$Ú`ïÐhõ±iQlˆ´U;ÂMÜ?Ú•”Þ¥©t~½Æ×’d07½€>šÀ I–²1d+p#Ghšþ¥ªÉ@Å—4ë–¢‰F=yÓ¢™òÈu·A·ÃNÆØXÕ×CM½qÕ.ø&¡®}ñ…­¸ùãwHž·èq±³yÞ㯦’d²1¶˜ñü:•¢\‰™ÌÈ/fÐÔÍ·zè”±ù= ŠqQëo'/·›t¨· ®ñ«T©kÌx„u¦U݈ —q´‚ÎcÜ 6Ï0TÜ~ùu%1g?šX)A2æ¿üŒ,‹Wèë†Ðh*#ÇÀâïoY|{áH³ˆ M={Æü—A]âWwÜ~ùÁŒbþ}¬˜ø×ƺôœe¸’ypXÝïΖnírܤè è›ñ2àÀ®­fT¥¹¿Ç×:h˜&^[C;c wÀõì&ôb‰¿‘øúX‹â ØZ‹›Œö-·<®¾ ¦î­‘h˼Jž=òpé“SÊéàøÁ˜.‡a±&ÏR³Œ‹FMä3n mÊ­€ÿSÍ!6Å$cŠÈŽ=fÛš€¥¾»'4}ë.¢z"ŠÚŒÑÇϱIJ¬#FçS_ýâò7ÏYýõ;ÜÅÇà+ÔåŒæ9ë~`ùý‚â“çŒ>šÿö’àÔÜ<º–5wwÔ‹7;ÃMóØfâA:ºÍÉ[zÎó•!›Ñz³®Oûx „ò‹K²Y¾CÅÚ=H¦  ·ªý(úÉã1˜ÜR_¿¢ÞêÆöÍAA-ù³ ŒÝ4GK¯•÷þ¤‡O/ïdÎb"ÂW½ºç÷œßúžáAvä¨n3lfÌáw(ù|Lð­WÔwKƒOð0ùü²‰¥ºº£|u‡»|Îôó V_M¹¶L>™°øê³ß~NõÍ·TëŒâù¿¼;A¨°ã9ù,P^Wä—çÐxŒ©¸ÿë+²?gzn¸ùó_‘âœÙsªÛ5Õ«T‹7*P±¸qFùê–Ùß|ŽÞÞP•Yôªpñe GssCyu·µ‡on¸ù”ÑÜq÷ÕÔkÃìÏi®`q³Ÿ}Œ¿»¢^ÃÙ/.¹ÿóWÔÞa$&Ën<ûWª"‡rI}—t”E°™#Ô5!D¥ 4ê€Îp“|Ï%´à‚(ǹ^D£™=±iQ+„nfG‹ª# 1ŸÆÃ[7ß¶¿¸Ç¯Cj¶Þ ¾!h@l¤ºœ¶ì´“£†\¯Æ½gŸïÏžu·È”©¾í(ÅŬ—Âqðý{™U,ÕÙQŽú%¾j‹PØÜÚ¼+¶Ç©‚P\v¬¼Ó Õ¯W”W©ùk[vKz€x;9:õ3“ŸIÏôÈ ºÍÙ²„’›?~CU æ!Q Spþ›ŸSdžÐæÅn/ëð×/¸ú÷ï c ×9íµî¿Ä9›é¿ù©+h–\ÿÛ_iì8¶V½)µûC±öm”rÈ×0nL6+"Ň#kŸË–’ø£ú~‘h{÷š&@ƒàF“–E* ±É¯^­Ûߨ¼¼7A)ÈgãXRÜpºN¸þÝúñ„¦DƒÝ5Æu+Çh+¾oŒO‡tݶyýïïÎáïà7"yt¹"$½â¨Ñ®â¡<ñï´OÄ0N÷K ­*â©ï„äâõ™»y¤'ˆeôìÖeD8F|`õà Ü'Ÿ’ËŠuUpöÜòò¿ÿ;æÙ\þæ’õW?P|þayG½òϦԷ/Y~¿fò‹Ï4¥þñ{nÿú É'ùò†ìlF6êû{ª» 7n!]-çwÖÓ­‹Ðo°rì9C,ã–‚›æ Q¹âqÏ!ªØbÕFÒwê¦QGä êÛ¯¿sûn§2€´cÑØ “á G5H=¡Öhbz³†N|8žÃëÌy8~FåŸ4”ùœßæž”öÈ1™RÝ.°£3\ ëû{TGägÉ5ЗTwK@M÷†ùß|i–T÷åõÁ8ûü#š›¬njF—ªEÃü7³þòkÊjÄäùŒêöÉΰfsFÓ†ÕkÜÙ‚cta¸þׯ1óO¹øå9wúf3»ÌX¿* å«›{D d#ò‰£¼]2ûõgÈjAµ4Ø‘‰½§óY«ï_êL†-rüªfüù%ÙH¹ÿú%åMàì?|J¸ÿ‘Û¿¬˜|òŒ°¼¡ò–ùÏ.Y|ùêà¢ì¯d³9nlÅ×à«ELHJg¶pQ󻨆¶ˆàŽ4Ômr¾\Q¯=¦åz¸ÉdãZ¼É¿:ù‚†€¸1ùly']ðÉ Íê>Z…[9X¾i"…ÇåûÅÛÞ GÚÄ>¸ J¨k4Äû2è^§¯äaÑëAk²•±c.lÖ¸@ fäð«5nzA¶á¡ÆúF'hõl2Cotû‹P8"¹=Õ8¤UF§¦ººÇÎÎ÷®HEÙ3TIÒÈ!•Dzè=´ •£­‹%3À!Ü㈅„¶uøÞb’Xwj6Ê4k–ß_°ý{uÓàÎÎ?ŸÐ¬Ëô› åË+êê4¥Õ“ów\ÏICƒbqãÑ®ŒÂ~)¼÷_®P5 ¡|Ìõ¤&¸ç„à&&P_ßÒ¬•ì":"j[ã»—b±Q~¸£Y5‘—+žPÖ-ŠJL\òó3„f'Ñõà5=vO7^¬%,ï¨îVH– »¯çp¼…=©ƒBƒŒ#Ç?¤wÏÙD;­Kü:Òœ¶ûuãÉ./°ÎЬV˜¢ ˜å,¿ûž¦É9ûùG4·W±‘·˜a-4«{ªûŠéÏ>ƒú–Åw Š/=»Äß]S]¯‘‰C+%›Œ©n_ÑÔàŠ1_†˜¿u¡‹3Gùòžì|‚_¬±³Õ‹—h–GšiíSUK’¤c- ”üÙ”êÇ+(¦„rA~1‡zMµ4ŒžÏ"=k½ÆW vZP¿ºÁ«ÁXi&¾ÙU~b/ñ·CjÄ–HÝ쨫H–íÙ‰÷Ç+¶Õ ­ëÝÁ¶{QÞñ¨-FÚÙP„X·Ë³zòMó1'‘¥=¥ûM öŒl¤,¿}™úžøOöµÚÎÇct_õâ¨%¬úxªå„zek²vgãn¬ö Б&–}©q.voviçéèÔ?”™Û¬úÿãî¿›#ÉÒ3Oôw„ËЩK·&g8wwí~Êýdww¸Ãa«Ò••*´‹£îÇC¤¨î&m¶ÌÚºØtD„»ñžç}DC3]t<Ø›t‰ë›É¡ßœ  IzŠ`ý ëûæ³¹I³ ¡K¤ö¸º¾AùxG”wত£|7†þ–Xxï‘y]¤±Ðð{NOû×9°¦v»ZâŒ$é÷£+ì(„›¹½âJ °ë%® ¨¼¢Žép›¹áÁIT¯‡ÄG¯ý[”‰›{ÕmDùàõ²;tý Ç!Ä:t¼Ž.)¾YaWõáĺH”÷/ˆþö*†ÿÈp XZãš%í¬ÚuµÂ´–lrDÞOqµAJŠÓ!˯¿a½J8ùo¿ÂŸÿÌÅ_ß’Ý'+<«7o¨® 'ÿÛï‘ÍgzMïóO?™P¿zƒ©$*ó˜¥%TgohÛ@šgH! RFc½&½÷˜Áý”å³9ïN©Ÿ¿E–=V/^A1"ïow{|0-Îe¤‰oI?£~;CõJê³×”_}Eâ,ß8Šûý¸ÝT ¼Ïè?0ýÓ74V“déuMÓÍŠwXg‘Iz9ÓA—Ò~rVy÷º'°ëíÊFšë]MkÛø=¼QÜ_îHw€¥ÛŸÎ¬1è¬@+uÇ­ó§î®÷7–.Wµô¾üŠþÀröoßCšß]òÿbZF³„Æî©0|·Ðãæ3‰ÁÁ´ÑÝ T™£RuEú Ãê!:#f¾B%*Q×àûýð³\G¢sgk¶™ˆª(ÐÃr÷W¦Á,T¯D¥òÕ¹¢‹}$º+œƒ#HCÛ"R}½…pˆÇ}'*&:40¶¯…÷|Dž„ ´‹ul){‡î•è2ݦz=)Ì.kBÐd“nµB¤9Ó¥AÞð´“ŠtP`‹Î9%ì ÿO¸q‚ >\!àîögð.úr ɦûñACïÀ8 Ö‚ÔˆD¿wS>þçQýRzÌ|؈8EäæÅ6ï~Îïh}†ïeW8gwABâcêM*Âu‘éælt>‰&ÿ›èÕî¹³;¨ˆy¨Õ€øÀ{]¨R@d9I/FòÚÊÜhMÿÒÏ¿³åÒErË÷·¬Ù‰L7¼×àl‡öÆCwŒí–—Û¡Ê‚–à3²I·˜Ò,"J%‚Á­[d^ •À;ƒ¯Û:¥5Rˆ¨9Íz$yÒ‰^ºw˜(ìl‰Ès0uô-ÎÒ=ÚÁî…^£NmÑÙµm›¸Û÷>×h+%:?Õh¸Giú¥ïa»ñGû@¡T¤ïs èú€&GØ‰ŽƒßLy‡È ’~±·t{IGÕ‰¨gtf:V¨ÆÄÏUIü[»—Êû·l¸ÿëB Üj…­L—ˆ§nuMþ±óùã×0™¨[~ðÛuÙ˜¸6hÐI/ÃLg$ºÌpUì É<‹µ†”Ø*IBJp { f¶"д‹¶òáQƒ"ÚË%"ÕÉ0ÇÌ—1Á08l»Ñ¾m¡©RèTcf³haæÎz²ã1Zšùzžâ{Á:ÐI¤Õ Hî—$yŠklëÁÖª—uãÓaæˆaCغ¢Ü_ý®µL nsÑÞA½ñášKÊ­}3„_0¼·Þ¢±Ó•Žúøz©ÝÎ:R¯ëÛÛ Â\¬¥niÊþ^n’»ß2ÿçÿþûZ‹Ó *¸Û–C·!ä¨<žzƒÑ¥Þª?ÅõáÝ"›A*›Á#´´ó =œ tÀûüØ=‘Ô]|éO×’÷¡;ƒŒHÊo,[MY­)Ÿœg+n¢aùSM÷ÇØÙŒüñcüü%ç=Cåé–# c´èâÏfµ(y€2IQJ6g¿Å]ïFÛâC@錸3åäGCîºðà¦=˜PøvIs¹ØÙpÝ, ¤$˜6 ü’ô\úÙü˜t˜Æ6R8„–ÄПv6ÅVß¿úŠ,[ðö<'é¶÷M†ìžµášÎ¾Ðð–'òÆ?VàÛõ.FšÆôâó­;4AÚ!7û(tÇ]k×—îZØ›0Z|]í}ñ›¬ýÿ>„$ qyºi{u u×Ðs§ºª¢è¤G0³^DNú¡0•»~ÓGÜCð “2rÝ]×ïžéµa+ã×\-ã8 gj6V¦vÙ0þ/¿!×5«3G~Œ›_a–Õë¯p•ECTh¦—ØŠØÂé=A”Ñ©¡é¸ ØŠ«?½ ÿë/PvÊü¥¥¸?èœ^B7"z?Ê;J{ÈL‚T¸*Æç&e—°µïñè=û.ü&ïæœZ\]EoÜkèp¸>>ô½y‡2W­wŽFÃ{Þþ·sˆb@:(`ã H‹™Íp.vç\ÝbV É舴ODoƒ'ÐÑ7|·n“‡ƒT®#Ä›®Ðë·…w Ї®ßìCû‰ÒÈL`sÌÚìß5?ïšÏ7Ÿëóù#ßá5,Ï£Ÿ8×ç›Ð ·žÓL×ññCz'‹¤n3ü¿Æ¼ü‰åE -Kò'Ǥ¹`ñýÏ„#µ¥YzzƘ‹+d9¦ÿdHõêóçsœ­É<¡HVÏÏA d6bòë#V?¼"ú a5£^:t&igS=TRc›„|’²~þc=ªÈ¡öd''Œ¾:bõìgª©&É[œËIJO;5¤“1BÔ4—´ë@ùèŠî[¼ðøz…,Çô¢Ûâ’óÿ§ó®i¹Ù›7!#"vãm‹õd×Ãínì‡z8&;¸Þ¤²ìb¶ou®noVBÜ<9`oÿ& ’ %äž9E÷/ÞâLKˆI68£¸÷߾¼þ‰é›zg±Y›7àRÜ™A°IwÜÄÈo)NòîSàµÏ;å¡/ˆ¬ÆâƒröþC©…{Û»6ièÚf2϶ÞI,9|J1×d–Eç¾'¡à ®jBí!‰ŽA,täç€PUæ[šÇªHS”ÞãaJµmgçqu)Hyz›öpú¾‘o;Ò|¢·é‹ûÏÀw~Êø€LtôbìÈý!¸®x¸u·.Òhê–`=z<@ ­Íõ!žŠe|.¾57uwD®Þ<ùm××=ôëÚºÁ`?hmÛ£7/¾ýï?úŠÐ!ùÈ»¿1„kȉˆÏûzìmW„†°óä¼ö»ßõ=›qÙt”: ÿ8ÿîø\)®·cß'ÜÙoÏmææû^Äd%|Ôõwý’·¼àƒµ['”íu~Ïíçïñ›:å:èt×êtc(…ìºBwc¨5¥Õ•tébt‡œuß.þ]UˆŽWØE*üédm݃$øÆvpضPƒw.òמuˆžÇAˆ.çÇ¿Û÷ùæóÚÌï Jµï¼Aö½ÿ¸÷¶¡59w7*þKÇjw7æW eU{\ÒˆÚâüî™(ñ‡ÄÐMýã¯Bàê&ònµÚî ¿h~þÒùÌG¼çYÃn®e~ÓPlDh×Â/6?zO¶j¢ÎÂÙè ÖZ\Ónu!¡5ÝøîºZá«‘i°ÝiS|m{×5ë::ø€Ê³-GZ £û’5øÖE~6VˆÎ-c“/¬EªÈâwZ«š[ó!„Cbð¸}^ï<½?¼Ž>‹®nz÷¨ü°=Y´ {å·Û¡!xt¯À7oÝõÛ €‘êjìû×%vüï@kÿ#7ïL¼ŽŠ}ZéaqoŒ {§î›\K:k"ç°µE’pídl@&¤Ã<þè­¿½oþîZL÷>Š+ÂÐL¯p$=š  ½Q:ÄÖ×KšËy·{ð‘ä ¾8¦zõ3—ßž“‡dýoZd> b‹ÎÅߟ 2”fÏZKáÛ–vÑÆ‡ÚµÓ~ ùMvü5׎=D&„jëݵBÊhggD‡xûk׆v~È"NZW5˜•é à„¤Lh//©/¦Q2úÕÖ?ÿH=“'cÒãi¿³•“7}Ëù"è<"LJ^³t97R¢tÚ¥A†mËÄûh97楻¸Öý¿½q°a—z½3!%Þœw±xU1îtû‡>_€·¤?"oÆÞ>çK •¥¹šáÚô&ºvkð”ڴЈœü¸Y\áš}D)ºT> ô7c‹·ªcnG0‡°MÏ ¡í7y›‡*6møûvžúaŽåÍŽÃÍë9죸eC¨ •g»5Ôúâ ™ IG=IH‚]ãÖííCÁMwœ÷ÝÃv#1†:ß¼ƒ›¨áõä¦û‹P·ž²>»"ÈpàŒäø¿ü ‚HIJÕ%lw¾ÖÖÐÌêøn0ù´Q hÖW¸ZŸœàÖçÔ+(ï q‹9¶2Ȭ$ Q©D—)‹Ÿ~buU¡3 R£„@¦%Ù¸OðöUjëT¤ctns¹DC²É0>ߪÚz©‹€vEsU“ŒOÐi‹­+‚Ý"eZ¢òoV¸ªå OHÜæÝJÝC$Q<|«Ïú7Õ»®¿±fL{¨BáÛ5®6qÎ¥eÜŒÙYbÉÛ{Õ­xí®ÛØÝŒó¾ù{®…x‰×s;Æ{£ãHÁL§˜Öo’ºgî¶½ÓIä}Ïõ®ð>f »1»u ¹œP8S#dÎèË'äãÒ”úù ª™ ¼?Æ]"œÃ®[òc´™)fß|Çìç5Çÿõ÷hqÅÅ_ßRžª%õŠ{chøF¡z}d¾^ãÌzÈ\CøfN;sdGÍå‚üÞ)I.1ËRMRd¨Ï^±:›’ßÿŒñÓœËû+&¤àýOžÈ€ ŽÐV˜EC29¡÷h.à×W\üù',)J‰ÎrSàËà‹ÏQ~Áì§·È¢@ë4Ò“ì‡[@ÕtoD6Ê·]«Ûë^Œ¶7óiô¨ß µa„º‘ŠÎ!“t™}4Ü ÏÛB9~¯L”N ¶ÅY³3‡èĶ•œþ·¯h_ýÄôu…NÕöãë}ú„ãOû\üë_p2ë¨yâµÃ×5éýÇÿö ˜†°žqñ§1!½îœ¶7|Ý>ø„É“‚óÿþ'œ,:¯q›B"%¡=€@T>ŠÛÀY lUóâ&p¼qÇð×]ä–›zDZeóhnª@»VøÖu#$rm`w!#› I†)¾n0µ¼¤.’Vp­Ùþ.ßô°¿åB "bš³Xo['1^¼ói½S™ÍmþïM¬W+Ü|…G Ëç€éÿæz‰[׸ÖGk’ôRÌtHÒèÜ—&„ªÁù@hzP¢‹xâJZƒYVÛÓ÷‡qäDdz ×OûŒ&?þ’µï~Šü ß,¤Bª=¾Ö¾C‹èLÛý^‘ÚQ|®³µêÆ«PѼ~á a×#ž€¼±ØtEË6òÞ჋vv7cªCü-á½°ºx/÷{SÅq®@ßɳü@Pìc¯ßÁ͇îcó.b¼nôâÝ º8hh/»…<|X—Œú>á=ß›áÆyH‚Å·}¿Á ²q¿ª ÍbøB'>õh[ÌªŽœ|µA˜}7´:¾T(àmƒ÷•%‘Êå,A¨NäºxÞÓw‚µ¸–I%766wsiCˆ9Au×oÆì´ÝÁnß÷ÿš ‘‹ñçIŠ.ο®Ùû ïD»$/ѽÇý5$ðŸ3V·kŠÛ3…M0„þ…Dá$±¸{%›´W)>p.¼gOç>W±grÄv,ÅA|øvëÆy¸ÿ‡Tž eDv}Û`ÖQ;!„ê¬ £'²È‚HŸ³ë»nу"̺žÎ¶ÅYÒj7~÷ÆC\o6ëF´ÅÝp­ƒ³]˜‰ŽTÅàAŹ@‹óU–$™¤½œá¼@vè©” REÛ6È2‹ |2àë»Zãº5k–²áúwÁ&|KÛ8©$ÃÎîúžçù»‡b\·6 ”b×øÛTàýkom·®Ší‡;b¶ãºZâV+Œ‰ÂFLÖ …,2’TafkP°SÞÚ‚³ˆ¬³Ôóž`-vYŵ玠ï<2/HrI;]F))äí½ãú¼Ùó>¢öM³o‡!¢I2ÏÁ7×xw·Òi6û»wˆ´9¥Î R²Ae•Æ­¦4—Ë®msוëÊÝkï!8léÑ»šb××4OŸ— A%(\~ó’taù×ïIŠ¿|ÅjÞ q/Ô »¬xÿ~À;‹Êú]T¹½Ö­”:ÐÎçØÊu1ÞwïÏB@»lÿó—ˆúŠÙO‹èµì-ÖÚ¬4åþih[Ë;ñÙî@Ý.Z&ø5ƒûWúžjÖ0üâsŠã³hvÁô»gX1æô¿nµê,Oc=#¥åê¯?R¯#¹a;t¥ GhÝž ‡C•%»€ƒŠøÐ!›¸Pˆr€Ï*>Ð:6\×yÁƒ†÷×^¸Ãµ1å`A·©Ð*A r„o©.è²ØªNÃiÝ[Т ØÆ;Z\Cu?ïh]¬»Â ÙÞÊDaWK¼OHGùŽÛèüöV…êó›óƒ’øªŽ>Ÿ*r/}k ¤ÎQ¬iQiŽêŽÁ´„4#•¸å‚õÛ+‚ÊP‰ú ¿èÝ?>"p^Óz‚_ÍXÏjdÇ”R PøÅèØµ :Õ]4­øøÏÑß>4l¿Ç ‡cŠ~J»¨IŠÕ‹s:"BDjÀ”zÛÑ{›˜×Ô˜º%E’åÈTìyÓþ½Ñùè&àmk%:×Ýkp]”¼NÏùŒòÈâJn/¶. wÁ¢ìÁ‚`/~9n*„F%²Ó ¼ÿaçð›X\y¦vHò U|±€VÃåqç,,fºîô_©s¤ ˜¶ÂÖQí/µFÉ‚Á¶-$½Óöj†uu–IJp ¶u¨´@¥òV'.8‹“׉ Ûtžp=›~3F©Zrã0²%°vH‹YW £µ^´NëP&R¼3[_ßÝ{ØcÔ(ѧÎÒ0„¿eìý­×o¼Dþf± û'\·}?½=tø|ßõ‡:™›T¸÷ð_IdûG?×.AÆñ±)†½÷ÔNþÿˆÎ)øט-w×û€Ò)Ù¸GÒO©^ŸaCJyo×ä:¢Ì²H0Ó>hÒãÒYê«)M’%1ÓØHmÈK„t»#Qï°/¯§;››± Šl2ÀWKšYƒI‡ v¾À‡•™×¶n‘©ÂÖžÞÃcÌìœfH Mp ’,Ð. ºTKò“1æj†Hs‚mp5ëÖ9|\÷#2‰°[4š€7-μöÿεŽâá1ÒÔ¬/VQ3 Î4xvqÝú™öK|Sc‹×ͰÑ&ïwMEÀ(¢CKuµ" H'#”²˜µ')%ë—g8YÐ8¢=¿Äzµ- ƒu¨AŸlXD]›S³~{‰#Öû,@W7Èþ0®Û[Áñf<:ª³+Œ¹aàÔíoÝÞ¿) å0;?ÁCÈ¡§ ™e×F{ÄÝHã !ËÝ­›C¦û(®B•9ÁÖxão+•· v c f¹ÆÖ-®µ”O£ì’¦NÈGšêÕE|ñ™$xE~|„”¾ã~GŦ]Wø ¢ÑƯ”Mê]Ûù¦ÃÄÜ8v¨{OÅ„Åhå·@µÊº‚kÁŠÎ­jç÷+Ó¿šQ_.Zâ¦ÿÉsqN57‘[Ô)\…J)NO£×´÷¨4AØÓo_ĨPy‡€ãææR&¿}Lóâó³çñDI ·cq83ç`¶ïÎñ埒é5—ß¾Eåîp÷Ÿ¿AJœsÑÿu_.vÖtqßÔЛ08í±úéœôþŠ‘¤~}F³2x\.yI2Œáf¶Ú"‘Þ„,È'#T&pÒÑÂ>²t¹>ƶ¶Ó)È’l’Ç(ì½ Ž°øªÚ;è}Hšâ¡œÛÞÂwì·[¡f’#S½uß8ȽK¢‹@»hI£²zÇ=‹Î†í¶³É^·Ì „ h¯æ ŠØ1سa»þ{Ä6âÝÞl;o:8w]`âKþð!ƒû#B0¸¶ãc ‰].i/¦™“ JêË·8«>}Lq¿Ïê§,_]"‹œ$ËmäšÖ¢ó>ã/ïÓœ¿añf…L*Iâk¸f' h’Ñ FNo:JbfSÙ¤ˆ‡í›t£nÝZÒN¯€¢;Ð;ŠÐ®içËøLµÂ»Û8ʇȆ92Mbñ™!?™àͺÛèÞCLñZÐ^Í@椣ßÔ]p‰xÿØûرú¡×{;©˜ò֠ǓÈG½k¿ÉU>¤¿äzn9Zš‹it™ú»Îç_ò\éçª,°«9víIFCt©oY†w®y]²pµ¤G€hƒ‹ðÞÅÿ¸NÌå'OPnÅüÙ›(Úí}þE H¼3̾~Nrú˜þqŽm#•@çq­¶U‹w·©‰H%v6¥×@a>Î1\™-0u‹5ñWŸRe¬žŸÑÌkŽäè”4³,~~C2!¬¤ÿé1‹o '(ÖxŸ‘Ž Ú·¯±¢Gï~I{¾¦xtV,^¼¦Ywé¸rC7T×Àª;÷ÏC´Ÿ}Ú-&ÓÝ€Úþ~ÀÛ´¸Æ1úÍ—$jÍÅŸž“?ú„ÁÜêåŒôøRfß?GôF$ ‹é0‹ÀO"pC%2z‚wõ•P ×¶TgSÚy, ó{÷PZâšÕ+ÉŠ!,¶±$ýœåOÏY]µ(-ðÆ’ŸÐ4Á·ívî¨$EiËô»çñ¹*ðuKñä)ƒ‡}̪âVvI•¦^j77UžÑ¼~ÉÕ7¯Y¾£p¤ý2zÞ@”¶^'’i hkö’8q‚l‚]âÐæ¤»Né{›b¢¾!8 Ï=ZÉÎ&+Ee2q4Ó9íÊà½#›ŒÑ2àœBiG3[#Ó ëÈ5ÒÉÆ|ËñÆ‚ØxØí˜à鸌‚ðg?$Å­VØ-ζˆÊP»\cVíÖ/9Û…¼”ˆùÐít…÷r{¹QÞ"!ØèÒá Î$ >=Á/®X¼™ã<ÈŽ+•&?¹G6ÉÁv¼mS1ÿé5>)Ð7 Mnq8¼Ã;‡Ð=Æ_œR¿zÉziщŽ™ëm¤ðޱ8€ÞÜuýFežÞ¿G"[–¯g¨,Û뎼ëóo—ç ‰J’¹öÑ,ß·-A¤dƒ·¶$ƒj̲Å9O!rÕˆ4'éeø¶Š\W!£±»3 2²~‰Pþ@òß›>Düàë#?Ï55l»1\GmLUì’-Ã;®ú{çóÝVBBl%ﺇˆØÛjm@—=tÑù·ïo¾ŸQ,r½»áö|Wì%5D_x]’ ¢P1ì‡:ؽ®„Œt/ïÁ‚”q]w•&Û¿ñÖ¤À51XÀ·-2)èNHú]€ lK}¹è^‡FiI»ŽBÂÁÓG$,xA½jÑý"ëÖbÚ”D’2øì”úõ Ö3‡ÎB¨ØõÙŸ?!zž&e‰P;¾¤ÔSE{äÔÝ88<Ž„ 1ÙTäÛ$ÙèÝ`VuL•³^aM ¸wŒÙï!BM}aI‡9ÎTQÃB\³…J‰D£™eIÚב÷mÃáq~Pìö1cõÝ×o ‚B¦)B|v2ºmaH¶^÷×£íœ&…8Lû´Wܼ®ëòa»b®+ô$×÷ê[âA2Ÿ?乯p$•Jìz©ã8Ô…ŠsXªmè&-Qìñá]k2A¦YumÝÑß®›lbž7tdo=éhŒ––j¶Š»bÈðÓS¤mABsqÅòõ YöÉòh­+Ë’l\â«fV60yW,m¨aBKð¶ëF ‚58£H=$ fUa­Å,Z_}J–ZêË*R¹ZƒH2„7˜Öô p‚ü¤Oõö„kÉ€l”Ò\žÑI1ê¬Gf9i!X<{‰Z‹m¨œPݾÛÂwîŸ6Åà,ÞÆŒ†ø‰ïߟ¯G@ ‰ëh¸¾±ô>{J"+®¾}MzrJ1Ö4oÈ"æmHå©.q¿Ì 8EpŽd2BgærMz<» BJT¦i¯f˜Êâê /4Ù 6Ž}‘d“ÂÆµZ¥‚åϯX/ J |kHï2x|Dh6æÁ„ô,ž½¢­C4j,ùƒ £&ncuÛÍóC^å2K0,_\!Òd± À¸}|A$2ËbÚÑ2Æi>µ¼KÉÑ-\yF0Õ^[õ}ª†@pÄã› ޱ;_`ê@ïéCŠaBšv¾ ]¬"ìÞï“õÚ«)v£ö{ÖP„JÑòöø=РkCÈ~¯Äu~'øŠíéñºš9Ú'ÙÙÖ(²“aWànxu¡BTîwJëà2ëbgë¶‹AÎA4˜«m~ñ ^doq. rSÞBˆ¨œ”èD°zõÓr=uè¦` )Hûfv‰i¢°F%º+dÃGªv>.BÚ·-é½c´²¬ßÌ»wüKTD1…­8éQ½~±b ¸‰sw=Ót„™^ÑNçØV’ž CƒYV¸ÆF ê +c”徿dGmò­E=ÔÆùáC:Ên¡Ýy½èa°\`jÍøýÞXeö¡­ï˜kÜSþ8ÕQ J“}úðu*MðÍ:¶l} ˆ=(vÂÚƒÏHì¸ì7ÔâÝɵû×(ÎsU—n¦"'ò\³¸¹mDª2¶‚½ [+£ä蘴X=;‹¼çÍ¡ßJŸÒ¼yƒèQŒtôh'úLoº¶ÁÌæ¡‘Y‚o ª(°ÕœúbEùÉ'd©¡šòQÎúÍ9º,q•¥x4Æ\^‘LîÚ)«·«.tï@Oˆ§~‹þÅJv½ÂÕ. á‚•u×ÜñL• 4 ®n¯ëÄf|{\ë)Ÿ<$hæß½@d}ÊGCš³)õå™è~¯+ª6ˆ•‹EII2Œ{‡«lä¶ ñ{ï»>€—È"ßF?^×Ù„jy˜†¶)®ˆ…[2“ 7®7ùô×9Í·ÓWÁõBÆNÀÕœ Bè¸Úš`ÃÁØåä•üÂëoþM<À©¢L7;ÑæÑWKœ$Ã>ÁVØÅ:æ8(E0ÞÓÓÎáfŸ'ê(«¿Ž ßX‚µÝgí€4׉+ƒ…ޣѹ5×h– Vœ§]W]¤’]WX`f±€ÛŽ C“Bkp6þ~¼¤÷ô3=£ž¤öت!=:¡¼?Š]â³yôOSò{š·¨áiO±zù³²ô?&)ÍÙet®p’âá=²B°~õ–fí· Ú&N[Jš|Ç; Ρú#ŠIÂúù[¼Ð¿ vëDÍ{NEÑ’/®eYRÞ?Ưç4gSœ¯Pg9ÙÉ3Ÿ#tN~o@ýú m¥(Lt9ÃÚ‹ÍÚŒ†HQîâ{NÇGdã>~=£µ$Gc¤Œ¿Gé8·"mçp{¶´ÞF‹>!EìD+¶…²w¿Ÿ^|íú:€Ngg3ª7SD’좼ó£Á.Ê{¯à‹Žf)2UÑ2n^“thõ5BÉÆ_s#€ ·O¬!$1Q04] eÿoïæ‡[˜!Ĉä‹B"©®¢¹˜bZÁàóÇôO ÚEM»hqí·¤§ŠqAõê5Ît“´ók`³Dˆ‘t>ÒH]²q)7a3"¦…-Ö´K³3ëöñ´˜N"¢¼£ßÆ$&»\cÖ6 o¼F÷Š8(;¨ ¡|L^²~c`ŠJ „lqÔHm©Ï¯0­dø«§¨fqá|´fKT´[Ù"ܦßüDÝ”¼ÎãÞp«ÕSŽ2ê‹3œ§u¥Ó(¦»ïÞµ ‹÷#7Zõf]Q|ò˜TULº$)Ê=!axÇçߦp sòIA}öãDŒG»…خ֤žpôÅ)Íë7´Ë5íʓ߻‡–-õlN»lðÞ¢ò‚$ÏcÀ‹ ×h ñë\DûCt!¯Y.ÞÍ¿Åí½y}è„w7^¦‚v:ǹ´³*òÜt‹7 u[ì{Ðì&"&n´|Ã{9Дi䉿瞅Øåï*ééç\³z8ô›ÞÃíïZàÖ+šE :Ú2â,Bå¤ÃØ8]ÚÅׄŽ"bÈŸ<¡8f~޲s28«9þçTφþ)ãÇCB˜Å*ê:A*E0f¹F$=’RS_LQåü‚õUEvríªÊY¿½ öiç-ãß>Ƽzƒ::Å/Ϙ¿^¢ó,úoÛáDJ:è!°ßYRU+ÚY‘h%º éw¡(»½ŽGƒÀ®˜Êo}ô÷Ѿmq^1üê Ú­™}Fþä1åX±xv†© *ëÅà’ýª£ÌÐÌVÈd@:ˆvdކ뇀÷½«ï¼>BçÑMƒ];œq¨,éÄPþq¤Ù•]d¸ßãKÞa÷. Ç!+¾C!#¶ª»«7¿¿b·;ºŸïæ3¿¿ýðç¢Ã‹ÎbdK‰’¸jŽ­Ùx@°+ÚÙk\LLmaôÛO°³×Ì^,PIç÷¬uÊ9G›qt  %%8ƒí\6ÁVμ•L~û¢ZAѧ8*p‰…’„¶¡¹ZwkI:)Q©ˆÂ?ãðm…3>[Znç l?ìÒ1þçϰ¯¨—©,Õå‚ìôã/îã¦ç,~|‹óÝ2úü˜Ù×ß“<ü”2wL|uŠb2ŽÔ4ßàꊶ’ ¿xDšf?¾¤^ûv¶G…‘BÇjß“ýûm°†d|Jï~Êü¯Ïð2½á\ñ!û³ˆ>××.‹œgWU¨á “ÏO©_½Â®Û(H…N’A‰¯*ô½{ä}Éâ‡W8«ÈÆ}’ta§S̺¡^4¤ãÒWT—k¬iн>å½”–ø¦ÂÕ‘æd£¥Ã–z{…„¶¦Y²“Â6• ´Ø…Ëlj ÙÀ44³–lÒï’%w×lèF²Hi^½búídžílìîŠsÞø#B§¤¥Æ,븘vkB@¤)"¸hò~§S$iy ¢•Øáï¦Ð6غF¦=Š“>íå 9êvݼG÷‡¤£<*c¯V™l[62ÏöÖ,J4:O±ëf^!’‘è¼xûE‘”»ÀŒ›P™  L¸±…ÍÆTn½Ä,V 3d"që5>ĶÊsd¦qUDé6¶r2+H{ŠúrE~ÿ{5E”}’"¡=¿‚4I ºÌºä/Að†úbïÿ†Ð#8‡êõ)އ¸õ’úü çd< ˆ}nP#*þqvÁZôdŒôŽvº-?ÌÊn¯ºm§ãñÆ#Ó)v.Á:ô`@~<ÄÕkê󮱨²G>Éh/¦8RÒAI’+Ð v>£:_ Çc²RRÏ*Ù¸2ÏvÑÇþ£÷÷Šö|Óà;Þ¼JsT‘Æû³î– z‹B«NPê‡Ùý­ïn³^huÛAä@ÛQ& Á4تEeiü;~á3:ðù:*Å}cv\ÖÐ=³Å]È qCלìB•‘Áâ½ÇÌ–è^Ý,D†îçà<¡YÓ.kdÙ'-v>§YYŠÓc³¶°ñRäØÅ[T–v±ìoéhˆîI̬‹kÞ×]ì½õÈ<™ UC°ìÞ¡¹XÅøo­âmz—ºÇÇkDþ‚ÝðÙ‰nUB1éÓ\]¡z”Œë·k¼UHÑÒÎëÈ,s!ê3¯jDVFÁ#Qd‰ï´#ÿ´¶ûˆÖàMÌCØ%ç¾Ô»FáøùÁl-À¶3:ѸÚD Џ{¯å?î'nëƒýõWH½»‰LÔÎŽ¶£v¡£]™xÓvc3zÿ«LwŽ‚ä 2¼i·Gb-ùñ)®‹‡osÚiC:’ʈ¢ºŽò¹ÝãííÆ-DH…Ln½¢¯‘Yäò»jã®ùés9Å˼©$2ÏQ½¿Zã*Ó9‚-0•E)íâÄF$©Fi0‹ámœ2f¾Â¿[ÖC‡è4PÍâ8þ {ב\':á?¿`/=¼wÄša@>ɱUô¾”X‡™/ "Ö¾i·Âv!h½ Îi‚_×ÛdÝà"ÉH‡I/ÇL§Tçó¨¿S¡St¿Ø4|÷˜þzryˆ€h°‘Š™Œz¸Õ[’Ñé­0Ttã ¸îûÕ^ØÕ5|N€VøuE;_#”Ú‹ò¾7>`c':á\ŽÐ™g䓜úåÃ5 öÚc%BÔ¸*&L‰îÆ6“&ò”‚[ã¼…@où>7‚BPÑ' ÛÂDt¼*WÍY_NÉ&>.¹üãw¨ñ}’°Æ4ñâìä½§šç?qñõ+’ÑQgS”‡ñsmŒwN&z&´g,¾Df}T‘F,ÞݶùÑÜqƒ$›”H±;ɈDbW ¦C¬…xSa×B•¨Ä³>;‹ÊR•’Ǥã”úâŒzeI”´5ÙÉFÎÿí“ù‹ÿ+éÓ/)²–å‹+²Ió@uH!Èh™cfœÿñŒO·'Û$ÁW ùÓÏ8ý/ŸÑ¾ú‰‹?þ„×Åî´*v”©S”R{tÞ©x¿Å¥}GAH‰YUdˆšù‹sdž£ur= íàçï¸ÍÖîYeí;¬tÑénÝÐÿâ ÆŸN¨^ÍcèÄ|…îM<P¿:Ǻ‚òÑ€´LyÊú§Ÿ8ÿÓ Ê_ý†Ñ±àì_¿A &1€È)ÒÑ•rÃþê&òpœê»¯ßÙäµUhòñº§®+™ˆ„ôxSïD3w¡I­ÁÞƒ@²±óÑFfû¿íî{Jv1¾ª7"•1 dŸ }GÔöá{¾~}¤5D±¢PêNDÜ[礎ŤµfëÎãM‹H >y€lB°˜yEñéCBuE=“d£<~NµÀ¬_0ù¯¿#•k–¯¯0³šìñ÷{,~zE~> ‚§ž/ñ!£ÿà”ÁgÖ/žqõlJR(•ì:a×ÕËÆ#tæh¦3šiËðw_È%—~C2œŽË.¯¦½šãƒ/IF#’"Š3íjN»°<ÖFàÝçäw÷™þû÷_|Å`¢ JS¿¾‚þi®8ÿãóXÀ …Lz¤=A;_“ŒŽP:DÏo;‡â.´ô®±÷±cõ×wûHZ ÓÍo{l’Öwâ#ÐØø=D]÷2ÚÙ‘öÐi‹kö&álìÞ@ô=ïïͱ ºæíu«7QÞí¬ê„­=²aB;½Â;µ³–Ý·w•’жض‰Hq:àø÷Ÿâ/¯Eâ$cú—ï¹üî‚ѯ¿dòÕ)n]Å­­Dèìy%fQaj‹4%ðmÝ=²Bš‹Þ:L+¹÷¿ÅêëopÙ1:,;‡ˆ,Z5)¡^à|JÿÉ Í›×4«&Ú€êõA6„6!=’¤’õËWYÐ{t„p™x®þò#ë¹EeQT髆ò‹¯è=gÿú-"ïuºÿþ}DêMSGŠW¢ã¹X'×ÐïÚŸƒÇYs;¾ðuCöè޾:ůV„àh.+‚7ØE,†¨Ì|F;7±ðu ƧÇ9~í‘ɦ²4˺×'ÍJ²‡cúXÿð=_¿!#%’~/:¬9¿Õ¬éAt˜l„DG{i¯¦43ÏàócÚ7¯¨W2jnrÓ^I6ʰóí¼E(7–tÜC©°' ŽƒP•9õóg\üñ2Ï÷¢¼?xú@«m<**š|ûºA¤I´ ±”ê]ÜtD¢·ÑÞBuö4!@w->æñÈξÍÚÛ…QÇ¢3¹Ž‚£Ž‹*£Y¸êõ]k>…J$v±$¨$†–´¶C¬»âJtEqÏ)Ó‘ê81õVT(dtá†uŸÑ % Ðy²§6Ží ™¨½XØ(X ÖvJ÷儉”Qx¡dçüá Rvv,b‹Žm,v„Ôè\c놺Œœm[5(„ ‘–$è&~ù=Ô«èµhb`IßþÎÜ‘p ¶¹'ºìBLÐÔ*"™Æ-–˜ù ‘¦È$EõR„wØEyvûè÷&TE„NQ‰Ä­6&ía—®ô÷„B7¿âhÕLßóÜ·Ä®ð1ºA‹¼c½ÝF—obŸÅ‡ÝJEn½5±è–rWìþ=P<Õ¥:w½€»µEõ °6R¤¤ØŠ§…Öè"ZJ™Eê•á;*ÕÞyCMPªK’~‰¯PƒLƒ­º_‚kp­ÝZ/‰,')»i¹ëf¶$HÍü7ÇÜP–º5lc H HuNøö]ˆmèTGlÜÖãb³öîdU/ Ýª!HÑ žBÛvkœF8‡H£`ÐV *‹n*®é,Bîâ‘ÿ^cï_¿?î>à7}ì\ø¸‡àýÖ‘† _Ø:î4Úý›æóÞCŽ‘hù‹Ö·8îå¶³éŒòza¸õ?ïÇ4C¥ ·\oCÂ\câ>¾OÚÉ’$víö“‘‰9áFúd0í®#ãC4è¶nIŠ[­ -H …­[‚õ[Ú‡ïì,ƒ‰5JÆTƦÁµ‚C9*K0³"MHý¸÷w–™Ñ¾¶Á×¼E#± ¬¹é­­™Åî«[7‡ãºßÓïëêlž«ëÄÙ[ºê2RT ¶ {>ÅQ¬¼9GÅoPeùÌ>RI}GaݬY›ï‚ t¯ì‚Ó:~¸N®SR›3]!ò4®[‰EsžŒ6ƒZ¡ú}Tšà– \ëЃ>2‘\㬈]@`h·5Û}:A…¿7Þ$Ȭy_>tÅó”ÕUMyú-׬ßÎЃc²‘¢¾¸"ˆùq_/±U…ª(À¯X½š’Ý;AQጸŠà"‰(³[­oœ€ÁKTV"Ó8ÝzN{µŽ¢wÓtŸãß}ŠhVØ6¾0™ Ú«+<I™Ä´]qñ?¾ÃªŒ|Ô#Tí&ø‚$÷4 K¨T ‚P$…Fèœt4è {v>ÑÇØKNôN½¹ °d½™Eš`f¶rˆD²I?óõŠv¾@è• ZšËK„,ÉOFÔ—¯1 ”“vµ¤5Ž,O1âè÷÷©~|… =z†§%—ÿókê*#/íJQ~rB1Êm<í¼A÷ t&vȸجÎþü¢³‡Q½ý6݆³¶ °™;è¯ã,Ö9T’u§h±õ»t¦!(… *Ipo|¦”‘£êìVwZ9&ø5Ç=šé ³r[ã~ÛZdÞ£¸J1pÌ¿{F³–¸zêäýg,¶u„¦EÝgòi³ÿûOX™¡uA>_G é2Ù í#¬79Ð(ð¿¿1™‘¡Kuƒc}éA dìy|‡m²8ìÀ Äè¦"ðÆèâÓîÀŠ߾瘶9§¹ZÇq§ ò£aT…w=£C÷¼wmÇß~þ´êD@gºPçp5œþÿ€»ø™‹ŸbHP]Gêø÷þùsX½eñÓ5¸GÿaÎü»¨ç©2ë“Ò®ˆÐøzF³Œ¿:fþõs¿ùŒå×_cÄ“/ލ^¿dñfA>¢32%LÈú1.\f‚«?~Ë⼉ûEo 4Z*œiIÖm¨"¶Å•"8ƒ1f›þ…T1z×´XkQYìŠd[¯ J“¤ig§o1Õ Ñ?áÞ?}Š;¿¤­<ˆ–õë dLÞ»îÜD Ÿ’÷[ÎÿôŠãÿöOØ×ÏX¼­H‡G$½è¶*äŽ? ·-Nouc>r¬Þyý­×qÉBŒðn;Tüæ˜>0¶ÿþ¿é—^OÜ ó>2øf-¥x÷ü¼k>ÿ]îyó›zÈTîæþAÂä}Ÿ~vh>wæíl†Y{–vµ¢øäKÆÎþÂë"¶ã¥ŒHxèù®v«éý'ÿþ)ÔëmH•Ä`#»U›õÈWK̪!„€/qIÉà“Gȶ¦]6ô¿;Åž½àì|U9iž‚S$ý£ßžRýü#—ÏfHï)>ùŒñÓ#–?þ„÷ I¯¡Ó[õÈr¦þ–é‹9:Kº4Ò͘}G'pK±°È|Äà³'äEÍÕÿü/³­]îP=qf$y€¶)bt¶>~ÀÉïž@³¢™V§PiDž«Ù S·©ÈG#„k¨–IÑ‹4‰àc†E6àè×OðM…ìõ¨_ýÄÕ³Yž¢zcÒÔ—st™#px#IÐ:Ö©º—Ç ¡…é‰oט٠d¬ƒ¯hÎ[¿û íç,^,dÑ' ë+š¹!=š ¼Ý-Pý‚âÁõ÷ßsþ?FæÅzÏ&L„Å]äë5C“°=Ê º¼QÅn¢;·5¸Ç‡ {$š¢oÑTßI7îlB B§x >Ú®íRd·‰ø-w:\ ,J¢{iDí&=' ´êœî<2Í¢`Û ¨ˆÔëQe´xqU§ÜÕ \ØZç·“Qfiücñ& So%.‰ˆxJð­ÁµîÆ‘®³‹³{ ×m LgÖí]ç Æà»\y™¦¨Tâk¼1 E leð­Gꀷ ²è*Qm‹YÖÈ"ïj‹½Pœ˜¡1ت½¾a¿ 5غ!²‚ºëT»÷7›"ï†T$XmÅЇ7 »øÙ±Ó¢2«£a¿Ht\p‹-.©E¾ª ï*fOBpŠÈw[5ÛØhy«Þó_êÌâÃÇ Na“Øéñ!lÃ*Ä&Éó#¸ŸÿQÿñ>Ìâ. 8ºÛÄŽ[¸‘6úÞÏ\t [Gq-&|óžbò 7>zÈ»S™(¾K³XÀË„¤W‚­1‹ ï éç±’ xªC,:[MOÔØy…¶¦Ø}Š(³w1 G¦Ñ>.êÈ"8»‰˜ö׋ŒkÖŸ"¢Î­óI°± Úø¿Æˆ|hïºNag3&6ÏgyHS”Vøe*r›mU#’)ºhcºhã$Aj¢·kž!œÅ»ó[«“÷–-J£˜#ö?†-ö„Cá?“ý·ÝE<4ÉNh¸ñ°ýägüMñ Èq‹øh¨{ïí}Ôµ(-qUónä»sŽYEö,-àª:ºp(µœÛé$¶{ŠGHMpUh¼1¸Ú¢G´[µÈ,A8©ªm$tê•ë(\o=Â9d™£…]×±þé ãàâZ ‰«Zœý…<÷îwG:ò¸wn$öeéÖüvî[ÁyD38„wØu÷ÖD:ÜF#¶µàó5»ˆ»íèúºE9Xƒ­mL"#ȶ ظ¹˜8ì[Gz4DxC3]ok±­¾Ã¹k!.º—E¯s9#D7¡TÇðÛoä^wŒT¡²4v¶ôÆ…ãdÔ!Ð{§ÉL^O áÚ¿§C°†fÚ€´Wg4K‹VëIQ^gwh”ˆªw×DT@&=t/ÃÎϨæŽòÁ„[uqá ©%Ít‰è)'ERB(|»¢¹¸Ä†œ£ßNX\PÍÖ!±kƒÌz$½= Â‚õ™¥ÿ´Ïì//Ñ£{¨¤Å®WØ¥£ÿåS¤›³:ó$Ãß®ðU»ç*âñ^‘MŽÐ™Äµ Ít†*F¤ã˜~Ã>òº¦=õÛ+Ôð˜l˜vÏ´ã®4WSDR¢ò¼ó| ˜ùœfQcêšñïKžÖL¿½@ 2zN¡ºdöÓ“ùŠæ§g´¦O~œâªˆ!k‚OIGý­t:Ȳk‘i]G H~¯Oýâg.¿yÝYäñÎbt·¡GÏO¥„÷¶$q&âl |9tâw´oVÏáúÇÁ0˜7OH0‹šÁ—Ÿ3þd½>µÆ.¦,¿}N+û a^¿Â‘3øì!¸YÔ¯_RÍiiÅ„¢g8û¾…r€î¸h±U.§åy‡Ð%ÙdpYeO±ï¿.¾]Ò\Ì@•1^Xøë7ÈÆêfHˆô¸z57c°?Ú·x“ן}D:»¡¿#Haÿž…RøzAsµìèU)Ùd„nW4 q˜ó6郆æj¶EÛƒ%¢ ¢¢¹\Ç ²s¼±m—÷þù+¨.¹øúz|LªZÔèÅIŽYZ’LÐLW¯pÍ’v:£ºjÿó¯é%œÿë׈Ñ=NÿåSª¿çì?#ËÅñú2ÖÏÏÅ1iÚËA—ØÅ9–Å@â­"=‚1Û`%ï=é¨$?.˜ýý:$èéÞ‰kaô«Oñ³·\=»`üûß2¸§¹ú·0>ŸÜ'Á,i§sªùŠfa8ùß~\ŸqþÍylm¶±»rò»O ³W\üåGZÛgüÕÂ|ŽÑž¿AÝ'ïµ\þéPƒÆŸõ¸øŸ?R~þîÍ êµ$?£ËHÇñ¦ŠÑÙÏP™£2‰«V„ ÷^¯¸Ãø}cõŽë÷è¼Dæàë5nãdq—ÏôÇ|ÇðõÁ‹M1Ȧ=|x=è—ý¹çëk€ÿ€ù“—Í §Ðv:ÅÕ{ÖuBFQ§µxÜöð|ˆ’b× ÅÓÈÕuËõnoÛüGÅÃVW»Hí[Íc¤¸ŽÖ—fUdÉoïÓ¾~N51À(‰‡…üxŒ0s¦~Fk=Éð$ú;Û³Xuœê–`À.f˜PPÞ+ð-ô?y€fÉÅŸ~ Zu¬%wN#>ø¶!òƒ#Áùÿó 低­ÙúN¸58o¯§OP=îýóS–ß|Íjº8ì=ºiIOî3ùòærF)JÔ\}ó‚Ñý Íßú8ùí ËïÂ…!YßpþoßC’ut'¿Àü/ߣO?aø¨¤™¯™}ý=êä ÃÁÙ¿_)dýá!«ïŸãtjTo„í¢Þ¢åÁ´4ëŠtpL’+¼­p•¥¾Z‘œœÐ»7 ¹¼ÀµšlÒ¥bÂe;åüÏQ£”ã(´Ž¬&;îS=û‰‹?>GZ0ŒÛDK $"‰Ï$úØÞÅ)Š< `}‡dßê’]ô² òzœÁ¶oBTÿÓÒ,,:i=B¥HpÖ“ ¢ò×JTðÎâ½Bˆò5‘A:î#œ%¨hmff ‚Ôd“n5§ºX!tŠT!ú¤v×…ðΜïñ§ÜGb}Œ|ý0‚l\?”/xè:¢úzë¾U¸i™t …¯kÚé*I:^• •ØÙQö®íD&– s”‚vº­¥IØWÒÝúÇ|<á¾ÿFbw'‹7QÅ.ö=§? ¹ñ]á%oØý½ÿÙÜ¿úEß9ÇϸþÈD#„eø{ 7ãf!”éžÛÁbMK ¥<#LE5¯*‰ñ„hÁ&ÎyDxb7%À¬iæmç2àYA>"\Cs5ÇvH¹Ò RÆÄ/YHé0‹–@ôÖNË3[‚Öß­j?R¾ë,nfJç°°õ üÔη>¤T]§36kûÿ¢ô¦ß+Dgå…Û‹HüÂFÐß1G¨BÞ &ÜXí%8:røàwEæ <Å{‡k,z8¢˜”QgÑièÆ§è9Íl‰kc-}—wµIpï%é¨À­×ºP’àÀ T)3¯b—X¥(Ýu‚ˆëXðk“î"Áã@§D¤'„èŸîÃߣî=²W ÷*©v±à7ÁßõVPçn2éÅtÆÆ ‰8TÙ#í'Øét‚ ¢»ùÉs5…¬O1Nh¦ËxhÖ.:X¥›|ü¨‡¹šA^’ \UQ]ÎPý1iîY¿!t†Jd ´øªélì,Þìj©°œyïãAS8¼‹vŸÁÇ´U¥`[lPY‚L2‹¡Ví|MLÌó±³è~I2̱óE¤j5ÿçÿþ»:–îEßb@&Ð\LªG:ÚÁ•[Ecw¡bz—€´_’h3žòécd˜qùçˆÙ8Å-æTÓí²bø›_¡Ý³×†É¯>AѲzþŠj±&íPiNïɈõ‹g,Þ4$IB2¢ûY¬=\…¯šîÍt¿ÕKTYà›5ªœìžÑ(ÈÇDv|ìKÌÚv›ÊVß° t À6-¶†ñï>E4W\}sAzr•ÔTçsʇO)Gpù—ïñ"'X‹Ð*nÐN #’A AàêíÕ ”B÷º¤·S’“cüòSGK4Yf¤Ãù¨Äœ¿dúbÍøWYüåZ—ì,bî:æ‡ê]qWuû¾1ObØÄüû—¦ï/œo- tɯ?!Q-ÞG´ ìM$ׂ¯–Ѳ(Që°ͬfò/¿Â_¾böj…žìþcŽ~õ€öõsf?¼!¨,R,œfôÅcÚ·/¨+H´Ú[‡<2í‘ŽŠ˜ ÷Ž(ïè,³ ­£HK ! ºE˜;£¿·t[Vvà› Uì(ÝâdÞü÷CÈþ¶C""–—ˆTÞùàøòˆ†[Ó\ÍA¼$Ñ©¸s¸ÄÏß9•¿9˜Ç¯µ«5ùÓOèÿã[äèG¿ýí¯xû¯?‘=ý„፮ªè œêÎb²Ž^³:Š£²²ˆö–- ?BV*𤧩Ïf˜–èoêA‰%‹ç3²{÷qË%Ùƒ!Í«7´MJÚ ØeìÈ(Íö ³±è’©`öͬ§†$”£ìÁcŽ~õêçgÌŸ½î¥Ì̲aø«/<ì³|vIÝ –$k™~Îè7ŸÐ¾|ƒž’ëg¯ƒúOÓu8œÇµ ¶!=íÅŠÙlV >xt‘#Z½!ÃO¢¤Ã­§Ì¾…yŒÀv ‡¨\î¢0o‹¸†vºèèu8ö>x¬Æ°•->B÷v½B"ó´»ÿ%f("CK»h½‚4O°mÃêåKœ•äã>n>ÇŠœñ¯?Eš+¦ß¾FNIsY¬H†GèRƒT˜ó·,ŸŸ#²t.þÏÿã÷3„&½‚Í%dÀT5B–¤=Ý!†JäMçüÓ4¨¬ +3|kÐã Ò-™¿¸Df9*IXLíè=¾‡›žS¯ -û$=‰7ï£iú5n‡DtMèŠ{×ÖøVD•ä5ži­Il³1Ô¢]®)?&+–ojúï£SIs~N»Iô“Šü^êÍ[ÚZ‘¤*žt2ÆGßy GþPäÆlt¬‡ —w7þF¿åv [olÛ´¸VP>>"ÔKª‹š¤ß‡PaG69&+<‹goð2‰(„ñ°"*M#‡ °Í Û8„Ž1ÇJù"#$RC0€FH‹Ìr²I;=guÑP><¦}{ŽC`rÜL´Š\"gR§]á÷®ëßÏÛ•i† SWñÐ’êkëZ#ƒõ.²Ôßù8v<7•ÑxŒ~GEîBpܺÂ,büëncðØÚFJAkÈžàSê•Ex‡Ž<:Â^ž±x5‚KÞ´—ãª.HÔ^ÜyÀ#D‚JÕA”~ã °éìx×âêˆ!Zäé";Œì~:/Á[‚—·¼2ßÉ‹yoÐYØy#;õð1¯ùö=ˆn©:‡ Qi[¥w¹Â„®³C S]ªX<Œ;\cHOŽI“–ù³sôø˜ÞééVÌ_\€.ÈŠ×l=™¥³n¢´P¨D¡´Â¬VX#~öå¬×d“»XÑLWñ{“’l$©ßÌ2CÈh/®hW]ìW™ç¤Ãb§¾wZšIÖoΨ·1µ–äø˜Þ¤¤y{N³n¢ûËFTDÀÕŽòñ}åh®’ãJlíIz°~³¢|4Áœ_âEÒW7È~Ÿ´Ÿtñó]¡Ò64ÓM»[E—ºÂÙ€³ :ÅAqt¬ú.--A&>òÛuŠLÞtïèÞnþ=~ÓßïúX oæ´ÜºÍx×lé@±Ð‘;@X¼{>ÿ­÷|í7}èü—±ãêZÿNÔ\n7þÖ·Žüþ=ŠINs9£VÈ¢ •1m.xÚÙŠ(oê´]JCˆ){Bj‚õ"ïQÞ!}äݺºíÖ¨[/qVÓ{x„ÎõësLmAæ$…"»;ÏmÂÙ[ÞºHÓø›¼‡`X½:©¹Ý%2Ib¾†q<Øá¼M©óuŒ)G)Õë º“úG¶p»gi¡÷ð:õ8s]œºÑäkh®æ˜’2¡/)?ÀOÏpɘáãíÕ³¬:×¢xHð.®»RG7¢v9'‘– ¶®^“”9B8œ‡tbg šª%8AZÐضŸF[b'ÒÆ}T윴dA² $®^`­$ëçøº!$ýÇ÷͔ٳ d9!I7\ø®³*$¾­±Õ–ýû2f“á.z…V˪¼†hm"^më~ñIÍô»×¤§÷IXcÚŒþ“ÜüŠê͆ŒÑçQaÉôû3Ч`uÁâÅšt<$¸Õ¢3 RÒa?ž…§.‘Y](„Öøf…YDcs¼Ç;Gà5ý'ÈG’åoГ{Ð^QÍ4iéX¿¹ è­5¨œòá1a=¥ºª|ú·|Ëòm…’‘õ]oÚnlidžâÛ5ÁnR½bP‡ŽHGe´Úö¾¥¹œFßÕ½4›[í˜àA&¨<Ç{Gq<À­Wø ÉÇ%fµÆYHÊŒæìç%ÙdÜñz\$“¤Q=\Ÿ]`…[Mñªdøécüâ‚õë«Èíjz0$?ÊX={IrrŸD¬i«”츓 ¥&)®ž³|~ßO²»«¥$}FŸ³þé'šVÞŽ w-Ú·—Hß²ûÈrK3‡ò4cþÝÏ1ª\œñ¯žâfoYœÕgÉî?`ðx‚]5±}Öý.×@v±"Ûd–àV3Úéz=-2t©1ó®÷Éï Xÿü‚fmI‰W9Åé Ê/™ÿø/v!;ÑJçz;:xL2t/ï åoœüµÀ.Øj“¬¤T™’K¼37Õ{<‘o¢ ZƱܺ­;ÅC×Þ[ØãCªÈ—W\ö~ÐozÇ= ÒFzQG³ v»zs“ û v¹îŠ,Ö8²£#„]c}BÿÉCd3eöÓ dyD>áë†t’S½|I³ >}„¯æX«)î üêŠå«)zrBÿ¤ÄÕ+V¯®h×Mþµ=>¢¼×£¾Xâí³’ ?›Ð¼¹DQ=AH‡ žŽqó¦MÈûxc:j|NR DwÎRIaSdØ.âVF1”ð×Ñw®CoL MÈÍÅ%íÕ:j-j *àŒ¤¸7ÆÌ/h+G’å÷OÀY¼PWaVžüô¼Gø–æê ozØÃÎçä÷@;¥iKÒ´b}ÙÒØgþÝ T9DÐÃA2o ¹-Ï}E;‹\ÐdTÆB|µî:7ùº|øX׋gdj|™¯‰¶£Ó¤]¢[xw2껿ã?óú Àž!‹¿^ÒÎWˆ´$n’Ô:øºÚ ¯ÃÇ{1# cýÍ¡$¾©±ëf/ä#¼¿ƒ¹Oãðî@7 ÌrMz|ÊðéQœk ‚o!؆ör‰>>Bk‰H%æòk„hAeôãWSæ?½B¦CTš“Ÿä¬_¾ŠsxÜ‹ÏÚZlUÑ®[’áqô$^-º< ½£ :“Q',";Ç®ÕhÈ4†­*OXþð3>Sö=Óï^!’ìÃöÏÓû žѼyÍêåeìXÝqýûÀ!í²¦÷ø!ÅQ±KU’öò³öd÷Ž> µ¡~3Cöú¸ÕUް«s¬MIKE;]¡Ê>*˜Ù™éÝb¦Ô³©2²“ɰÀW ê‹ÁXLkH†²Ñ% ÕÛ)²×Ã×sÚ™!LT¸V¡ A{9‡¬døéhd*™ÿðœäè>iêq!#gØÆC3gþì5Î d2¤<éáÖ³˜W"Þ8’Ñ„ìd€yû†Õ«KDšv6v*æG#$;˜P×TØÚﵺöN|m‹maôÛÏÐnÍô‡WˆbHÑOðAEAJSÑÎ8‘1øô!©Xsþç—ô¾úoY¼1ä“I?Å.§4³•% Ò~â!í¢ŠBÃBvíý5íÊlOsÞv–J*§wÿˆ¬/˜÷ 5‰ENuÐ…§™¯@§(ÎzÒÑ„D{lÓR>y@ûögf¯Ö¤E.ÊÎÛ¹'g •ë(ذrËŸŠ§Ä,"ºŠÓnc Ï6ݶÂFìdA$H‚§|p„¹¼"$Ù8§½\âUB’ª·ç sTY’õ5íÕYÄÔ/ÝKiÎ/1k…·sL+)ŽÆ`*ÚE}«A: ËêÕ%åçŸÊšêÒ¡sÕ9S¤dÇ#t¨˜~ÿ놉MWÂâêò1'¿~Àꇨ[u[ý.ߊOžRä†Õ™¡+¦ßüŒ×9:Sصeô맸Ë7,Îkp–âÉúã”faÈzç:Û2OŽvVwBMÛ¡1ªxG«ðñg]Kqƒ/¡DÍì‡W8y¿‡HS’Á-Ö\ýõg(z"owÓǹÖ*õ•‘é±Ýz*¤³^ʦ¢Ÿ' ”F Ñe¶uZ¸ÓzèV{õÆ(޵݂.ØåResÝ’êÚwy Æø¢„¤'‹º^Bh1ËÞÉèzá:¥ô¶Í(v´ÌHú= fÓËlµÆÚ@yz ÍM­}ù ²½äòÛ—d÷¦ID©Y}÷u“Ò¿7Š-pC´iL“¸ˆÏ[Ò£#z§=Ú³ V—K\c£¦ m‘£cÊIÊúÕÁ7˜6aôå=Ú7çäÔççÙcøù 4+ªË¦‹‚V#®餇ÑWzÓâ‹G)ñÕ³d§c$<Õù<¦”e¢;,EÖú|¾¥·¸Öàm‹5Šòdˆ™]Ò¶l8 âó .vúÑWUj„°˜Õ ¡K’"¥>?'}ðˆD®YOÒ¯h]ÊðÑ€å/!-A"Ó8Ø S‡ªo×´‹™”]l{ˆœPg;~ô qÙ5¾Ç{b×ý h„ÒZÚåº bëû…n7*†úŽÿÌëé’ß2T"puäß ]Ľ³sÂãmÛ!ª‚ph!þ»ü¦Ý³*EjqûprÇü§5vmwnVBt8„? €¼Ž˜‹àqÖÆ9]*ìö‘‡>ÇŽåF\v¹ŠV•Æ!³¼Ó'€o[Á®@—ôN°WgÌžŸ“Žî¡¤¢xP²|öœ¦Ö”Ã>t” `£5«ÎǤEÀÖÕ¹ È8;cÝ둎òh<ÐY_·Œ„^U$,¾þ0¸Ï`—_¿D¼‹Î¸¥oÄŽÕðé=ÌÙKf?ž#{=Ä»¼gÞÙÍ øÆ3øü Å@aj‡Ð ßÔÔgS|Ð1IÖ„°¸ÖÅzFxT’Ó..²OZªó9*‘ÚÙ ™¨$¶,bìz@%Å£#hæ,Ÿ_Að´Æ‘Ÿh ¾¡ž®QEo–Ø& –¡Â5 ]JÚË+Z—0þê!îbFr2dõó ô½GäÒbƒD%àZ óçg t´×ÄC="ÇY†.RÌôŠêbHôFD(‡ªÈö&†è‚QÚÈ‹“׉é^hzŽ Í’fºÆ‡„âþá ëó9ÁX‚1ˆþ˜bœÓœ_"Ê>:+HKÅêù+Ôø*,Y_,>ŒÉGšõ«Ëh-eýö·H­bËÏo(&j'ª ›b4Âìd„VŠ ¢³¡B‚[®pUÛ¥iǘl8Öç1í(´†ìÞ}Ê{ÍÅ%Í Ëß6ø6Šz fQ¡Š*ßÄè\$±«³8 ëf—²tи< ²¼Á5>~¶·ÛhIÓ! Ù¸‡J5vµ&H 0k±ËÎd^œ#èT±~q Líð'´4sDV’ŸL¢¦z=E 'èªó ‚,ÐÊ‚êÚɃ©X½š!Ò)ß1éœC}ÊGˆfÎüç3‚Š"»Ö;ÜÑÍôÞâ[ôÉÇ1JØ7,_ÍHONPÂT‚ê B¢è2˜ç*‰>àAädGÌåÉÑ_­¨Î—¨~J‚™%ΩÅ.«8F2E0UÈŽ{ˆf1£z3%(A28¦˜dÔoÞb:Œ¸oÞ·Òˆ´K’ „$`«*Z!*½‹Wï,…¢Õ¢B¦éí¶Ý]î(ï*ˆ…ìü²BkßÇ@$i á9ËÝQ8Â/ÿMw^/d°ª€Y¬º…ÌoyÒ×Mwˆ†Uëm |tåk–/ÎIî=ˆôŸß=Œ-Ýׯi[×Ù! zOï#Ü’õÛÞ²£ *1¬__!Ó¡b‹7ß;"¥˜ÕšêÍQ–qÎù„tÔCx¢fõê‚@|wéh„T1„Á7qLo„.²WÆb— :êÈAÞº§HAp’Юi§s¬ñ!IR³‘΄³$:/b.Á¶¸ªÓ»?¢Îу¢]³¾\aëÕë‘ô üzE@“hgW˜5”¢óF½tôŸ>@ú5Õeƒ=<"?îaçSêËEŒÏERœŽ±WW˜Æ!ȼ@åzO ë:lÇ¡7æï¯e“{QºèãžÆ7®õˆÿUU„›¡ï\,X³lA[Î{…­’xÓÄ묲‘¦-vɼ8ÿ…JÀ·¸.Ö9øxˆ”‡qƒ¾µ Y#œ 8=&Í£0O÷¯ ž.å´ =!ú·ó® H­puêÉOºŽ,ઠ[5ˆ,ër_4i?ÁÕ Ž„lãVóˆ–â "#øºÚ5h‡ƒÝ¡Mn€‚î!þGì­¥Σû%fzÎêÍ*v¼n7ÁÆ@lÜ‹r×°~s‰G63ú€ýYH°ëšdrD±qCóak\¬…‚—ñ;uÀL8'н‚P- ª¤¸7Â-.X½™¢ûcd¢ÐEB{qA[Êǧ„õŒÕÛéÑ=z÷]€IÍúå[l•$EÌ5i/ÇÌ/Y½Z ¥"` ‹>½G“hIkÎ4¸Úà­Å7=èLƒHr²amˆôÑ("í^“ib÷v£W‹¼Ÿˆ°ö"±[‹5©f9Ǭ]—ÜÖ¥a9ƒG¿û ûú9ë¹A%%å§G¨`™ÿøŠvÑ‚ðÈÁ˜²¯Xü|Aþø!‹J‹Ÿ#:¬Ãšõ¬Fš@úàý{ ó¿þŒCw±“áÖ ÷ÿÉ;¬5ð.áè7Ÿ‘žõÙ‘•(íhç-ÁTØÆv 3 ²×£Kfß=Ãú ¿Z‘ßcüù=ÌåësO~:Ä­®h®"ú¤’xr•YäÜלØr—ER"”4â°0£³ûRYoؤ“h Nˆ¼õÛKôà˜b”â­ïâ)º? í%T/_áœF%)Ίû#B[1ûá 5‘fmÕ£1IíÅ'KF_>À]¾e}¶Fõ‡èT°~ûÒ!ù@a[H=²IŸ0?çâ/?òy1ˆ…DôMÖ ûŽ÷byÆå7ϱ¤l9ÅÝ6<án1 7=¹ÇäóûkfÉÅŸŸ£Ç}2Æ­W4sƒÊ’nA„`\Çoìh*GçWµïáæ—Ìž]‘L&ä…o$2‘±-% Íùë —ˆÚ’?yŒ ^(±æêß Iñà)ƒWŠBË$Mcæµ½!Â2-I‡eGáèæ˜ô´‹ÎDþvä¥ïŠÕ˜F•“ŽâëÚBùÞXëÏtÓ.ï:*Ç]ÜÖPD@*oÄróÎïøØßt÷õ¡íb‰·2r;…Š±î„ˆZºÿ±ÌzCÓ»ŒÆ°¾˜£ÆG$Ô,^_’NN)Æn1g=]"t M`üÏ_ Üœùó%¶j(?ûŒ¼Xsñï?£Šo-*M0+Ãø÷_R«×W,_ÎE4õ‘“ôR !.ÿü^÷N‡èRàÚ ßÄH_U$„¦% É&=–ࢩ]7´‹–dXR·®h—!ë1þü>æìï5„–v1ÇÛèÅ— †VQ z†Ì{H²£RF€BÈ€75Þdš`çKêË}š0Œml#»ØÅèh#ZµáfvÏÙ»€îõйÀ.–Ø6ònt¿G~<ÂUkÌÕ /RòãÍù =âê5ºR3] uJ2È ü2RFÒQA{5% â©lc‹³ ìØo/_CyÎ:ÒA?¢¦JÆHkç‘YF0 vÕ‚øÆNF„*"éÑ;¿"$QAÞN‘»š—dGCB³¢¹Z!’x²t¦¡+! ³4ž˜Û6¢`Ἃ“1U1ösÛ&1ùwŒN>$$¥ÂÌ–1Ä@ƶB2ì¡’øÁ[Ìl,K²Iä+6³ ™¥‘*â<¾ d'c” ˜u…6Þ‹* ô ˆ Ž QÙ¿XâÃND¬‹[Ã3_`[¢ÒØZ‚õØå:¶«þNÈNè óu?ï’‹B*B0˜E…P)º—`+̪‰ÏEªn¸JT#Øe¦°‹5z8„¶Žñ¨"àÇ{‹HrÒž¦]4dGcÜr†©|´ùÂFËÅÐb-ÉhDÚËpÕ‚¦Svo…¤û­Åk11Žû¦ÿuÊy’á í†Û¿G•ð.DZ„w6>ˆÒÜbï,£Þe=È(h>.–ý#hÖwÓâc¨Á•Ø6x,ûѧùr2îç“n¹À îeøº‰…A?ƒX‹«+leÈŽÆM ÚùWGŸÓÐÙœ ™£ó4ZU…87U‘bVÉpÝ…Ö*Ëѽ ·Z`kE…”±xi-èZ³µå ÞÅï4'õ¶V“qL@{1Cdº—²µ ÄïX·ˆT#eJ2굈TÓž_"û#hW¸ PÂajGv2A8‹kÛ±[Õ¸Ö“ôHåqU•¬CH…Ì“oÜÆbÝ.Ë(Ÿ¯Qã JÚEýÍóœtPâk‹Êf>ÇÖU–;¯w½í€Ôظnþ½ƒMDבhL ‘é ‡`ì.¤èù¢ý#Bu"va9Y¶Ó®8ÿa⳿FÉ-üQó³â·õF\îö­„wÝèòЃ"†¼I‰Y.Ae(¢•ˆ(Òœ´ìm0«y™ç;‘"M:‹V‰ÌSTÚÕ;M ?àëŠvºFö ”RH©Ñ…¦Íº  B‘{Øü°È{“ˆ¹ Á8Щ“è´n>(ä,X‡î•è~ŠwÐÔ´óêzÔõ/y½Î“ z¨,‚Mì{¨wõ>RY‚Œ4•ª¨ïYd–w6s!”w1”$ìYÈÚ¦Ù ·½5f¤½‚ÐTÑ»=IpëUï­C$]ô¶A$)*…æj“§Ë.…Y ™e¸å2üIðU‹,r’^‰ð¶o>ú~û(nO¹W×mí´&ƒlg•‹múŸYÍ£ý‹ŠÅtŒÀ x—rô‡/)žåó·¬ÏjÚÅŠòËϘ<³üñíå£úÿö”ùŸ~BO¾%=¢uàâ_¿FÞ{Ìé?=ÂÌV¬ŸýÌj<³üñN%ߺB' ÞY¬3¦§S]Šëņ­GøŠÞ$‰'$)£ð°m©^ŸãZÔ-뫚Éo?Áž½¤šIŠûcìì’ôÁ„9çìß^ REzï'¿{BûüÓgoPå„òhÃQ./q&ro|3§]’~Ñ¡É*žß¶_o·­ò¡¡¹œaZ_nëé=}B˜ŸÑÊ>Ãû=ªçohÖk<ФwÄÑoâæ d?Ç-§\þé%ù§Ÿrÿ_>eùÝ·œÿé92/:¡‚%sò_…²ÕÔ01T vèþ]¦$ùQÚçÿó;Œß!ÊvÝ0øÕ—Üûý#fÿþï,¦’ÓÿϯÆàë)ü!^¯Þ#:<Ä“·¯÷mKrü“ß>&¬—]%1Ë9«Ÿ§ä2ü|Âü›ï¹úî•ꨴÎfåÈ&cÁ§#¦úÊ”]жõsìjÅúâŠäôN¾pñ?$øwþ–õÒÒ{úˆÄ[’GǸ«W\|sFÿѲ“ ÚÏ8ÿ·o Y[ˆmnR…ÒÑîÈߊ#×îÑU–ѾBù)—½@åÉ®¸õDF6"¤¿žD÷!±ÖûÜÁ‰Í7<\ß³{ó;n¤1~@”÷Ý×Gº™Îp›©Þý¾`-z|B^zæ?¼ÀkM ãþûœùÿŠzðGŸ–Ì¿}AHFô”T¯§ ‚YR7Œÿð)n6è޼œ€kiëœCõ£[ÖáíŠæ²!?ê³zû†ôÞÊdùâ5è!ãß>&¬Î©ç’b"xûÿ58BI:£².R}ô‘t‹¼±ÛÔD™xÚù UŽÐ™Ü&© ¥ f=]ñX£(ÜCáI`þÝϨ“ˆå9.‘§-ëE`øÉ)~Yá'ìô‚jÚ ÆHåh šé â¡ReCÊÓpKÜz !GfŠàkÖ¯fdOŸ„%³SÒ"§xøˆò(cýfNù ÇÕ¿ÿ™Ö éŒQ¹ØÕm·Þs<”º¦Þ:§|<ò)@›1@È™zê‹éä©#%&FÛw"¨ÿÅèí8RE&‚Y²|;#?}H¢Ñ=Û/ÿ(Ú‹ÈgÍÕÎÆÕøš$„Ä7˦$wh!$ζ8ïPIŠÒi³;4„Ðy5§ýá ŠR@–°~öòc´\põíÅɈ`‚ÌÈF‘âhæsܦ;D÷†¸úŠõù,4IBÚ ó‚ò4aö—oYÏ4£Ïà«)ëóšìè¥kD:¦ÿ0cþ—©5^*²ÁˆbØÉÇ×ÖØŽN¢²a¶ ØÚ¼ýšU¿`ýü—ß¼EåÙáýSìºÃvÙÐÿò ޾¼‡·sþ’ó?>ƒ¼ B¸-Öõï|6EÇ;~±•eò»_1¸_bßûóŽW~u<‹bf»Z`×™÷âØ°®K³Vàkš‹Ù¤Rᜉ¢P!ñuEzú˜“?|†»|Áêù Yd¬Ï߀Ìñõ‘•ôOïQ_¾DŒ2<¼ý¿þ‚?ääŸ>C¹ï*K±ÕšÕó Ð=’AB{u5 ½'§“¸˜|zâª(4ÔWrŽþù3Ö/~àêç:U×Ô»ñäö¢§Á. “?üŠb˜Ð\Õ±øJüzF»ôÈIJ:[2øô«ž3ø§_!fX9 ¬.!2úõCÌÙæ?¼Fè!ª'¨Ïä§<Ê™ÿ‹·Žþé)º¯:¸¿ÂwYðq¡J‘y‰Ô6Æ)o8wb3qÊh8 Ùåig3ª³%ý/?ãè×§¬_¾dùÓ2LÆäý–‹žL¦eðÅc?|ÏŽ){ŽÕë9®iq>nŽI9& €»\uùö=£3‰ÌÒ¾âºä·.1Qìž®¦dt°p ¢½äü?²{öÇ" ­úGÿþS”­ð.ú9še‹wžæìŒzÑ’ôrTé/2íEú… dCÁúùK¦Ï×Lþù RV\}…*†¤ÃÕ+Ézšå÷?Ò6)½‡cêW/©—Žüô”b’±zþ3Mƒ'ÉÆ=ô&Â,v¨»ˆ „«-Gÿò{´»âì/gdýÞ®}zƒ6Ñ•&&Qé¤;äDäY$‘¾å?ß…Ür…ÞG‡>ôzÊÒ^M±• ŒI¶AG®?ôÞÞùËõݼH$f1£·qA¾F+Ùh4>XÚEÍñû=Ê\rö—7H éƒ'ôFšå÷/!IÑy.KdâX>Mzòˆr˜aš–`+Ì¢ÂYHû)„$®K¢³¦t³®(ž<¡¤ÔÓ+\ÕÒN08æäw§\ý÷£ö}ú÷OI2«W1f\lø›YôÉF}‚5]x”¡½ºÂûÍÆ»@ztŒ +š©#ñ@è*šË)mÈŽÉG_ÞµÑZÑÍY½¨Hއ(¶r÷R¦ùšz™süûÏè?íqõoßByŸ¼XpùýŠÞÃöêŠfU#“ œ$¿Jyœ‘Œ3ßüÄâÅ’á¯?§8Ê™ÿå[Œësôë çÿý‘“f)2R"IÆc’~r-%r»aúWUåšàZ|ôÍ÷{«›ý×UÖCdדP…øvI35dG}B³ŒÏT܈¨¿©Ë7P½ýë>ä7‰ÿìë=ˆ•KÚ«Kš…#¿JÖTgxG|y¸ŽJÞ<ø|À{¥Æ.§Ô—+toL>éÇ6ø»¢¼÷º\BÄXòærNØÚ§vëd‡Lºº¥÷å¯Låé„ÐÖȲ Ô-d ZIÖ¯_C>!Ë ³Ÿ^Q~ÀñožR¿ø»®¨ç–ô蘬¯)ŽÇ¸¶¢:[¡úE¤°µ’t2 4mLyî: õÌR<>Eù ëRB3ÃË>Å$eýÓÏ4¡ä䟳úëOPž ³°ç§.Y‚9{ÃòåEgc×q CÇÏr×ÞÚ/~ÂŽç)¢½””v9+"DÒˆÒv|ã.bìVU<\â·5…, ”ô¸ÚGµt׺¶­A¦9:“Ø:Fâ !¢e݆ÃÖ-!ÈÁìÞB6Äh¢ˆÂظ@ë %Ö:¤PÑÒ¨L"縊)ɰmüV«Ž+›€7]p"çØÅS”Š»‘—‚¸æf² zÙ{Û±/ºçÝÏ_ó†wøÖ"{%i™ã› SÛ.$Eg‚æb‰ì` ²ÈðU :P©b“ðQ˜$äÖöïZ¡"ª+óhÑ…YïŽNŽî`—>HT*0óªã°}j±mñ¾“u£Ö!ø(úsU9^›$$Íï¥ØSŽ 5I/<°eCr4BK»ª»…è»ÝLŒAw¥ .žt…Š”&‘ÄTÍ ºŒÜêànUGóbl+žÈyó†vÝFôcÇw-vö漺ÄÜJ‡Ú6ÍÞGyýæ§ì!uûù{¥í­“‘øàß¿mÆ0"·WT ø ±™ŽßÁ¦u-Eì*ÄDD…좂‘]/Dª.:o×Å©wp†÷!ô^øBg|t@Ði¡b*¢ÌÐ:†éì,Ón¤Áyß¡àŠúþA5vã‚·€Ž^ÏE‰T1LÈùØžÖ"ûEÇùSh-ãš&"^$ ™)Ì|…÷’¤ŵf¾†4ïxÍ-*KºuÔoí‚ ¤ã>*‹sÝ[Ѓ቞õ*#Éf¾Ä ‰Ü³@‹(Ç{q Çc³6nRŽÂã71®qíÜhböÊ9*Úimi ;$Š­ÿ1ÿÔõ¢³­ŒQÑ*ÑH黂GܟݱöÜ*ªïzìéñã\oB£´¼®Ýøô¹›¿×ÿçÎe£+8UY¢5´óU:2%¸ù‚ bWEH½Å²Tž.ê–¤F& ˆvk;[OÑQæ¢ó†`RÅlÔãHMäæC²PåbÀˆ‹Ý©ÒØ€Nwó'÷*™fè"Ù'Âû­Ô»®°•»žÔyÇ^ªÊ’$Ó7ö“.ÐËYÌrMºc”úÈöU$ý ·\㜌{Æ^g*]TQ·ÑÛûýÁwk¥Å®Ú­ãMèºÕXßçž8=n…8N:ÝX\òlBo8éqÝTeA’)ì¢-qU‹Ì3DðˆtÓ1–@48ªãOo¦6ã§ «RI‚Òoœu 4B8‚LH{~Yãå&<ïÿOÜ­I’]Yšàˆp¥Æœä=U=ó–ófS_wV<œS.ì°¹8¢jÄÍìÌn\1e"‡í½Ö¿öëOüÜÞЮkñÿýï¿_‘N&§ÿí3êï Ý ”ÞŸöüÍ\%îµBÀ4žÙï¾`t’a£~y(&(ÑÑ^m™Fˆ •g„àI§%ùT±üË+¬/ɦIt¨öU–§vÝâ›-ë_^£'§TÆ´oÎIÏžPžæÑ Ydôo_sùÇŸÑ'Ï8þ‡O‘®¦[õ¨,%©ôUž¢*Eóú‚~S£Ë)¸-íŽ~ÿ„ÕÿLk5YV’ÎÆ„~‡,çd³‚þòœ~ëÉŸ’•†Ý‹å§O míÒÒ6Ø­¡üôTX³þeG~:'xs£æ!íÚ¾rÝWM·ØD÷е$ÀwŽño>Ç-^Rw%gÿú)¾m ÎÓ]^Ño<Ùñ³¼Âv•jœ‰i|¾mQ³#f_~í«$ó1¾ÝÁX,$ó9I•â­‹- ¥H*O§‡ˆîp3A*…kz‚$“lhµ)B»âúO?ãTv‹Ú!>8×@)òªÀl6¸[¦žp¿gg-¢œ2~zFšÅà³í#o6}¤ý!‚Å}s ø5× „tÑüÒ@:›¢Ë[ñÇ^ÿ¾¾úÁ÷ø¿r=w: ­\³¡_î@ª÷72&çùAÖAxÓ£gg}ý”öÕ/tu ?:BÊ›øìîâ’ FdGU¼ ͆îz[ŽÁ|B2)éô˜üæ++v—ãû{þ3—¾¤xö˜þâΗ”Ç Å÷áÆqˆ*jãñU°õ oŠ'GHf½Äîjú¦‡}+ùˆÝ//!;fòÙ¤¦}óŠå÷oy‰R AB2!“¸Ññ.J`T‘`V×ØÚ“NŠyK_<Á ôxJ6‰¦o×[|иëWl×’ùg3.ÿÏoÕE<¶È6 ÇSÒIz'XåŽZ:|[G³®x u§êécˆO^!ôû{J1¤Œ™#;žGO Ãëûtc>VåCs<ˆÿ‡¯÷1¾<ËãϪíå‘MHÇé­nííªû}JưQèë{Ïëýko݇äîßK¥pí†îz{o|Þ—dÜŽH ÷¤Ø7R6g->øCa/X‡ë{ÒÓ'ÿî9¢¯é®WtË-íª%=;Áo® Ÿ£Â†nëЉÀzMùäŒ$‘»“ëïßò Âl0ǵ úè”ÙWÏÛsêKKõlLýò==F‡*T¦QEÊú›¿Ò‹GŸÏÙ½¼lüí²££XX¾˜*Ò¦ânITÂ~ýÀz ¨qEûê‹ï/y6¶îêmç™ýþKªY‚íýÝnñóK¼/J.þýGòçŸ39Í¢âÆ fõD³ôë]²­[·\¦ILa¬]”æ)ÒI¥fH»é¢úMÆ9Õ,—˜Ú Hq`÷Ë<x–~¹¢ß8Æ_~Bõ¤Š2) Îa–‘ïŸNrìvEs¾%9:&)íå%fkÉ¡dGóft5F¥ Iy–Ѿ¾ÄQ¡KIw}I»Ø¡«Š|v ¡&ÈŠÑ©æòßÿŠS9Zfdó)*‹E´~±„d„¤a÷ê‘${a6©é..é{N’!z:àUe#)½õ‡Á罤8;"¯Ýj‹© R%‘g:l^ö•› $Ù´BjGs¾&ˆ €s¼DV ZKì¦%36êmð zR¡Ò˜è#31Tkä¨"?š!}G·¨Ñã1:³jQU ®¡]6HsÌq-Ö'T§cÚwX:M‘û:ø€wn¨w Q»•®{ô(¥_mqV¢RñKGO'(ÑÓ-zT¡‡E" ØW/ýA¶ù°‹Úâºx‚Ú‡³@Dßägsh·ôVSžNÆâ»†nµ‹Œë=÷ ª–Öà¼'™ÌH Aw¹Cfš€‰^…C_Þ¼Gdé8#ôöÖ{ú!4˜Å– 4É$gÈAÑ¿‹]$Ÿ|¨Jrа X©Ði á#r¹èhE%é8GâèW5>Ä*\`OhPßÝÂëÄ ³÷g:/HsM¿ÝáIH }`¦ ­ÁlïPY6 QÀB‚ô±Q”$Uù«2~š‹%.$§3ÒBÓ-7ØÖF]y± ³§HH9 ëˆ<Ê¡*'tD6‰AÿçƒGÈä&¾ücô½ ÄßšXÿ­ãN 0jÚ…Œ‹’íCÄG%âã•£_ýÿ׋›øßfóž2xwGóœG9Ù¨À.×xÄ]YIˆÈx¸âîÕÀ ¶.V#H©p¦•é|Šô-¦W”§cìfI³èIG%®YcF' *ÃBÅ‘êû*´¸UG!ôàÉP‰ÇÛˆõ¶Çõ>O¹€žU¸õ‘Udã¤ÂnVì.V ô@Ð÷(oPb×ѹžàbgç~ÂhðCÜF&m2J0«&¦PÚÍ6PT´ï®b;ý §wquHU”å‰ßöÐAtwå‚}§ñö†rÐxŠð~´†P@I i:ÌonT’‡Býš ©ø;ÿæÿîëÙw²¢ž=ÎïÛZd’£’0˜'Íx Ãüõ‘‹?râø3¸Î*úXê?yk£øÐzŸ9©nØÝÁ;|7ãc@‰<#›‘ÎÄÎJgI™ÇÒ,Ȩ•udƒ7&(²yNwµAè){œxÓá½ ›#»}çIÆ)nÛRé&ºHZÒ¼;Ç’SŒ3úÕ.2­‰(Õx‚*óΣFI©ïh ƒ÷ÃïÀŠÁHfµ¢YÖÃ\÷€Àòã9i©î¨ãs°}×ÎQ¿]¢çqï÷+2²îø¦Ãvžt^³qƒ«öÔ3‰k;lmÉU@¤é°Î`6mü>)ë½Å=@UèA>(âÚãú@:›’ÞµR„¶¦½nPeÊ%f¹%H}`O 5x9†®Ùþ·Õy6Ìã=Nðµ!ÆæZú:Ò×T®Q**¯Hr¨ß]âP(¥c8Ú­‚HH‹èÿ÷?­~â½&?9eòɘúÕK¶—Â9ª/>'/ Wø}ü”ùWO¶= <Í®‹è¦2!)¼u8+ñõ:jˆ²2žš\KývAñü9I¨Ù^,ñ^FMéi‰¹ÚÑ^^ÐmTÓâ)åã3’LÄ u¢J`Z‡ÔC«³ <®÷è,!8G¿mè– ºuK6?!?áê ÁT5‚~Åî²aòõ'4?½ yüŒT6¯ÎiE>¯pÍBÒÐ/YEùä1Eåb®|~DR(ô(£¿|Ëæå•ëÈíUQÓ:úEOQ)·$ï§)I) ¡ðyƒ#UIlÓ⡆€¤Ð¼¾Æ‹×.é6-B(ʧÏÉò–«?ÿ‚¬*$ÒyE0;\é|Ž®’=¸øªLÝœ>#9>nLƒˆí›¡Õ<_oXÿò/’{¼î{]CÓ£§'̾~Šèœ„üB< ï»5©ì'y‰Ô o=ÎDƒ‚Hv9‘º#‹ì8á)™ÿæíÛ—¬^l™þ×d©£w Êo"?;+Á#“i##î,ø¸™J¦G±­À,.1 ägGhMì´ ‡‘jê×oؼÚ0ùÝWäYËõ7onŒ_ûÍ…•L¿ú„r.Ùþr‰(føæšÍ›*ÏQJGÕ^ƒv¯õ|ç ò™U¤Ór¨òaæê{Ïž×Ñ/ׄ0H”æT"â{ß¿þor ßoÒœû½> ¤ŽZååvèÞÜUCõ":º#¹C¦L>;Cöæh­è[\ÐdãlØH ºós¶o–Q‚DfB[춦_¶Ÿ=C™ –IÚ±ùñ-é£ç”3Åê»!›“OǨÌS¿½B–“˜R¶_€ö¤“ñ\½‹õ¥ ‘y‰Ê¶ÞÑ],ÑžR”õOoQEƒ'¼fôÉ3ÒÔ±{sN»nÅ ¡²Ù1é(Æu‡­ëá=²,À5Ø%{ôjúd§³¸ö;Ú«åóGàûø{:Å,ÏY~û†â󯙜*®þç÷ˆj‚R<ÁI’é•ÉÃ3z  ½wŸRyê‹j4'+uü¿d OpMyäC'óæPÞ{¶…R¸Ý Û ²“)Áô·¼%àÛzHãü€úaõнêïCºéÿ‡¯÷>bQó,²æ}¸EBô×Kåпb¼‰Cqå=)À¡ª)¸·¾€ˆ‡Í`›¸® šfoÍÍ¡îþ¶ÜYd1eò|ÌúÛèPïãùÓSÜ®ƒ`1‹}Ûc{^1úä åÓ)Í‹×X›‘U´çïð^S=?ÅíZ’qÆîÅ/ì–á £/¿ Ëzê Cõé)ô-õÛˈm‘»Ù暴êñcÒ‘Š­ñ¶Á·ýàyÖäGó(Ù›lï„+ŠaŒ„‡i(CuK$•èáù¿§C4ÓÞØÃŠ[¤×zT®ØŸfCˆ›KÛô˜Æ¢ó$Ž ã#Žs³ ]Ò£c´ª©ß¬PãcÒJ"SE’öíAä'ãhÄöÄ`½UKvv†4˜ëkLç“ñmŸ‹™Ä*tðƒ¬c_pt˜Õ[[|ߢOŸ0>U¬~ºbò›ÏÑÒá:G¿j@ƒÝîh¯ÖäOŸ0ûê1fqÉö§7X5föÅœöÅ%!Éé7 LãÈŽŽÉÊYDÙªÎ4fqÁâ»WU”28¼$³®!$ÉtŠp ÍÅ¡I„LP—Tgíå%õ²%ô†âésòʱüö%rzÊìóG`ºCu¢_ÖØ>NK’qŠÝ¶˜‰1Ö&VNdš"¥¡¹^£Ç’$P_­¤L¿xІî²ÁÛí¦#)+¼­ !%«Ê*éщ¡[uÈDÅöA’‘SúÅ=)1«ˆÀ1»Ͳ#ŸŸUÓ6tœBK»iI'cìf‡žL‡Ï´@¤SÊY†íÛ¨qr[×8/ɦG”§)ýåc4XCöèv¯Wk0!©ŠØ®=ý¶G%Bº;Ú͸·âÈ`0uõ8=Äï[WRÆŠ¾Rä³#²YŽo¥Ý¢Æ{…ë·1¡¬·¤'(Æõo Ë‘B"E#v±11HÊ{©ÓtJ6-c«e?§jAwµ$''"Û¾eÚ»w ‚Ô®0 ïZÈFL>=C˜~<á0sÉópÛð†•kÖ v¨@F¶®‰'N•¢Ò˜le¶;L'vŒ¹¼dwÙ1þú9©´/®a÷n#¾%x…. ¤4xkâ¦R(¤ÖC‡Âá»>V·ó<†­øHd@*’R³}ùšÍë £/ž“ÈŽÕO‘´p< ò„b¢h\'b|xïc¬©—±öžéPÜ®OÞ,žIARèA›'>R©zÿðF°‘ÅIL‘Jª©ö>mp?V —ÐÂþõ1,¢Ç¶æFW=´.]×#’\‡iÍ0äéñ1“çÇ`ú[ɦ1t¢[l1».&xÍKBÛÒ¾»¤ëé¸DxSßRpmƒi,2KQ" Òœ`Lm£¬ÂºÍ† rÒ¢$©$íbª$-ˆf.y“¤&DŠPḭ̈@jÔ@2»0¡&ÒÚå&¼ÅAZP lׇžp²PIIR$ÃØŠA<( ­€H*‰E‹pc^ Þœ$?›`®×$ÇGÓ òŠÐ.YþtIþì9ÕX°úþ!ÉPZÑÊ1ŽW#âÁR§Üc³|O³Ü ³1é€A‹ÿ>D2|Þðœþ–NSÇ.cPyzçú¨•G!y_‹þ€–øÃóPœêÿMׇØ-"|(w#¡v×Ägq”>ÿñj÷ÒxHBè"W7¨XøˆU!Avï‘ ‡Îi9åYÉîÅkl;>0‡ûà2o-jrÄäé s±ÄÞ)Óõ8cA3úô)iã£CØ'$:Dš‘MsúË-éé”îÝv«ž`,å³§ä%ô |2ƒº¡9¿¢ï ÞÒñ¥íj7È“ :W8cÀ ‚p:ûï}Õ|¿{Òìdž“N‹!ã ܘöîËt„¸s¶9\îKõnÉp”ÄívØ&ÄЗa’Z#ptËfgÈNfßa$?c·Kº«YŽH+Yn°F“IJA¿Üż‚!3d˜ ~O^Ó7]#g£»CÌ#Ðß”T7!Áõ-®×ì£å6ovL~û -Í»Öi’Ja6š‹-Ù“3f_<®®Ùþü—N˜|2Ç\¬ðL½¦o!ŸLI2ízdQ’pë»wK‚NsXp=Ê ®Åuñ;ꢿ£]ìJÝl e’¡Ò=Îqë-j4!g íÅ! ÒI`÷j…ÈÒ!ˆäzº«äc²iõ.ë&2ÿŠŒ`Ü®Æôžt\Ú–¾ñL¾zí‚å‹kT^ S‰.gä3Åæ§WLÉÆ[7ˆ$~‰ˆ±‹±ÞÞ¸C‹À9+Ò:E—)Ýr‰,fL>=¢{û’Δó„~mÈæ%ýÎŽGÐטݖnÙ‘1z<¡y÷ŠÝeG’jD>"›$ØU‹,ìv…i¢¶&¦$UF{“ýt‘¢óz”âê-fSƒHb»ÕxTUEÙÇþ!RßÖ1p!+HFÅ^©€Ým£pÀØÄ–þ`vðgzÐãOΆM_À,ׄ$FùÚuMú茬tì^¯QYŠ76Vï;ƒÀÄ€‰d:ìç[-%©Ã †Ø†³§‘ p÷ôwBºšúÝ‚ ô[„Þ’Ù1Õ“)®®x0o‡vœ·ŒïWc­ͤ@DŠ˜Õ³3g6H$\ÛG³WV1þä”Ð÷qòî¶Ôï¶8ë)Ÿœ¢”£y·ªy0¶Àú±­åú–`b{(OȎǶÇyÒÒ/—ô[KRM)ÎF±‚O<µßðP÷•~p¦§_¬è7щ\>™Ñ½}ƒu)ÅIÆî—óA¦só“xC'ä9)ÉxŸvx_rü½1Ѱêšf¨\|ïbjV®ß«N…p …x ãð±¿ùÀg ÷ »žAªÔ´M„÷×{Æ_<Å-/pbÌøÙ Øõ‚Í/ç¸p{ð} zvF>M‡Üâ¸ÀG·Žäš€‰FM§Éñå£ í›wxrò™¦y»Fd I6› DÏîÕ²£3iU®Ã·‘äÂÊ2¯Á§ÝòßIªOž ”¡y»Àõ–d~B6Ñô‹é|Ž"S´ç×´ëjDȼ@æCPSqÓ,<¾kšÌ`!™Ío™‚b€’aH‹&™(voÞÒ­,B3È‹Áöјg‡Ã@÷u<¤u‚à:ìz‹ó’d:#ÉõÀò  Ý™ÝßM·{è¹Pßî0Û]–¨"½£ûYCÇC|°ááT¾_crƒ_ÿ7ÿÅ×GƒuŽHõ]<Ú{f´Ø2ïWkBHoäwçøüûÇóÐaU„Ån†Ð’A“³ âÿL‡ÈGŒžÏ tì®iÐ{ü(CÒ¡8HL= „D(‡]îyïvtëzˆœöèéœñócüv‹&Õœt,è.V$³ò‰ŠÏPðôWë(×ì Ag¤Óa<Å£1ÛŸ_¡‘•’öj%.Œ¦¨,à›þ`¾…pDåA¤y”dÑHˆžk¥žRaP9‹»’Ã:ât'ß×ë‹;«C#g8 ¾e÷ú9>B+H¦eT ¬{¤Ìò{3žè*Çnš¸/lôèˆt’b7+úM{ç{î?ïgp0ÌË4G¤2JZnžao;z7•y1ÈRz’ãGTÇU”OÒ±}ù–®ÓŒž?FÚÛ7×d1y2¡ÛÖlz Yô:¹Õýf‡µ‚tZ!œGv»Aæ‘À%d¬Æ¹Ý†ú|‰PI<`"PJÞÄ­ïäe¬ ßH8ÂDè‚|2!Yíð!¡xz‚N,»——ÈrFZZê×;T•Dã_>Š¡¦C$E<…õMd&ëlÐv1ÞqÓŒGÐuô;Ïô÷Ÿá·ïXüxM:›dUÍ(ÆÅ_~‚ôˆ´ ²ýŠBƒ7{í5Ã&V"mß#”&IJ²YN}þŽ FLsF÷æ5FMŸhÚ¥§<Ñ\,:Ib» ¦$“ ÕÓ)íÅ[š•!ÑçÙ,#t„Å÷®“$ãCþä»>gõsŒØÔÅ”tœÌ.ºƒª^¢«2j¸}l-‹DáÛ8ÀeR‘Ž‹áÄnct±»Ñ(gq>n ƒ·¸¶CäSæ¿y‚»ZâεHl½¡~·¢üò3F3Éæ—ë(üï-:St›.FïŠg$º(¢Ö7TB>/†6 Ç¬£V(ø@:‘” ïïWÒ5~»`ñí+¼ÊPÙ›h!quš0ÿê1tQ$‚£[ìb¢áÑ]¨[Á âlÒPÖ‚~Yãzwpî´À}d~;k‘£9ó¯ŸàKd™ãê ÍU‹ï Õ矒$ «ï."ä^dd“ 1è#×áMKp±E–>"Ÿ%Ѩà¹!là®§]´¨rB6Q¨"ÂÚ#O|¯©•ÓѯÚèþõS[T5"%Ô/_ÁôŒÙ³’Õ7/9höÜ}ÛŸj?q ø© ÒIq—9þÞü€„C˜ø¼îõóAÄêa~oÂ{}uß ø¡Šõû×ïebÏGÝÓnßkïß3O…Á|+”›š~ÝR 5ØÎ3ÿ§/±ç¯°jÎü‹#<{ù–Å÷o!ÉníŸÎFŸ<¥œ¦8ZÅØìeH£›ÞµQ O·\ƒH±»ÅŸ2š§lzƒœœPL»kd®°mORMQÚÒ^oAÎÍâú|ˆºDÝB÷ IšÔoßâCFu6'ØŽ~µ‹üåÑŒl$£#>¯È&%ùqÆê¯?²~·#Wh­‘iI2J#ÛÙûaa´øÃq¯)bkÖ9d£ÃCßß„aÊ›¯i6¥n-Òƒ¼Kª$Vm†êy:®·«Ïï5E$Á5ô« ¦ƒìhÎ-„ìÂàûÑÐ÷$_QòÓWu1!ç÷Æ‚€}zOy­ùáƒЛëï$vîÓ>?jR¼'Yû¯ÿÐõq ¥Cááã¿‘P³ÙàCN6+ºL¤‰{&ÂÿÈxþøõ¢q³%=P§d|…@'®m ¨˜~öÑ·ô›çÙ´ ¥tWk<šl’ÅßZJ„3tËö0|„ ¸Ö ´ÆõM4›Ë€oÔô„ùožVïØü²!9:F¥=ý¢Ff#ò“Štœc¶;ºë ¶í±Û!©(ŽK|c)ŸNY}û Ù'_ëŽÝùŠn±Å A>9Bêo¢Ätÿ¡¼L¹Aij”ºÊÃ÷ Ù¬BJw£!¾õ›Š4%´;ºUOz4F U뻘ٻ¦k!¾ë†Æg]/¶$“#Ò\"‰ovÜ+†Hô¶ÁÙŒlžc·M pñ=B—qŸ×ÕØÎ¨i{3aL\u7Ý¢½DKç±øæïuxDÜÔ÷ë:î—d¤#Ù¶Át=étÎèñ é´Ào¯ÙþrNo$Ùì- »‹+²GO™<›Ð/·ì^½Å'åÑ_¯0»ÝP=¯ ï‘I†ëuÃш¤JIŠ[_pýç„$GˆÌåA¥®k†È I†F`ë”L„2™ä§cÜnC{Ý‘ÍIGŠn±Âu)=$ étÝ:ž<Ò ß5ñ¡ÐŠ`-n¨ ï£jU9&-ºËkH2‚³¨4¦ÔÙÖ ³ Ea|Ö,Ö”V Ét†NÍù%A•èTFþb³‰›ÛqBwƒ*“zv¯—¤''¤©Çyœ5¸ÖÄjmìŸçhEv4E`hΗ$ó2ú%™ŽHÊ»ZÑm{ò“c$»Û"ž]·Ål:•qÝ÷~h7ª{Ѐ@“Û°ëƒ\jMuvo\Në N£á4$†”!UTäÇã¨ì]lYmjlPÒɈt\`¶[œ‘(ÕÓ^o‘I[^IŠLb¤qÔCù(rYFm\tD\´—;ôlŸn8ï­>AÄÖ–ær‰sânH¤uèñ„|^`Ûî€ÙÛ›("¸q¡Â] À­Í^ßdÜ€è}›*¶ìUY ó¸é®£¹Zàœ XÈšš~Ó!|CsY£2Ó-³ß5¸Æ¢Ê ×´ˆ4G%ÑaÌ`´»]H'fÛ ›‘€Ùµ õŠúªAeÑ /ËiB»¥ß’ù·©Q£_GTb°ñ ˜ŸÍq›õ»õMüð-©Ìíxð}kS¦)2OÁÙÁì&~%õ*V®}cIrƒ‰^Sìƒk~­±éï%q©8¹ûÎÞÝlÜj«<Æ¿Þé¨KIèc¬Pú¦m}Ë4ã­# AØAÍe‘Gîi)=ÉlïÑÞ§à<ÈxÈ5;Kv<‰QëÛh 2ËkÐR̦GÐã:ήƒühD{ñçTÄ&i~Ön Âãš×zЧPÂÒ®kTžÇ ¡st«Þ(²£ ¸‘Jš7 ôäˆê¤ ¹¼¦[wH}"I‡p@XÚËâ€Ì¼YØ<"sHÔ™ìe³ÚÆES¾WNæ.O!±ÃrÂç¨4R'$e†7ý!þÃD·ÈØ¡3‰Ùl‡Jؽ“CÊš÷¤ø÷=Ü‘$Þ &³í Lÿ¥»V‡±ú±ËCXFƒ«ûHQ@¢Šìá0›ÿT_ˆï•¨ƒ·DÜî°]³(iiékœ‘í;àKõ¤Œò¼AmVkLÓ¢‹ ™ì®¡ãw ƒ‰ÕZÔhL>˱Æ ø¦Æv Þ(òGsìògc¥>Ê[2ËPENèvô›=GY£s<¶Ž‡Ìâì) ýÖNÇÓÒ/w7ØÛé8šÝïñíÃíñã=ÈA¦âß/|¥°»-¶Q6ˆÿ8~pœ#­{+c÷¾i Rbêß¹¸’±sBüó³#05ÝÅBæù0G{|Û!T†*\³Ã9‰Î4v»E$%ùq‰]oðdH-†î±¿÷ÜD¸ï,²(Q‰ÀµíÊ–¡“@·lX¼5š SðÛQ`"ÝC¤I,Ö;úå6æé•c²IJw}3 ]åø¶E§¨lHðL5n»Áv’ât¥4ÞÒ\¬IOf˜Å5ž!]K*±´—›ý:1`ì²ñäì¿ý{þŠõ»]4Þ%1Ŧ(Ù`ZAõé3²²g÷ó5AÅÓLCrKÝÑmk‚CÈ$ž’žÍ/¯°h„–deŽÖšn¿H:˜MAÓS/7ˆT¼fôì)YjY¿x‹(æãQ¤ôïÞ`õ„ÉÓœõ·WdÏ(OGè°ãíÿøžüÓ/™>.RcV[ÚE¾ÅuzÅy„×K&_>Ã7KV?]2þú Üêë׎£ùœ´TÔßÿÈvi}ö9EiؽzK·“L÷ ÝÛŸY¼X“iÜ€)uks~ õãu̦/£k×îÖô3h„ÂGzSiBâL‡H3è{LßIuŽäøÇ¿}F¨7ËÖѼ½ ^xtQQ=Ÿ¢´ y»!9ž¡üŠ‹ÿõªámL'óhÚ‡5„!ŒFUc’"Z¾1ZÜl{’ñ$šÿFE4Ò¹¡U(nÌñ¬¾æúO?ÐÍí½¶k;ŠçŸrôõ£¨Ý¾˜!†êQDæ¤ãdÀMÝ6®EŽew½Z€q1©Àn7Ø]l‡«2EHµIÍåÿúò)ÂʧÇHѱ}u>:%•-›ó%2MIÊÙ¸Äw¥“Í+ºëª˜‘N’ÃFĬ.¨¯¶Œ¾üŠÑII½7NJCýnÁì_~‡»~ÅâçédD>™!Hª1JíXIzr†p‘oZúm|6G_|Fy’±þëOìΗl"cHÆ{§»u¨|D:*J5àq“6lV‚­é–Û¨ à\5b~L6JM-ïW¶>öaé¸^& Soè7C0JàÖØñÒÙ•„[•ÌAÛ×l¢‰äöC¶tCbªw‘D#Þ[`îjKÍÎ0ûMÄqú°?üÆNFûîçFŸ?Bt;êËB ê7WÈÉŒ,s˜Af#|·¤ï5Å<§_uäÓ‚æü&”È)N¦ØÍ’äô)ÕqÂöåq¨æ÷DúÕšncÉÎNÈ2eGcŠÓ v¹¡~óOJ2™’O2”ê8ÿß‘}ú'¿=âúaùËš|\¼EêŠìx Ö0Q®3˜.÷óp0;„ÎI¦²I†6v$rÉò¯?²½îQZÜ$’Êè£P‡ ôíêÒíÂä)jORIMÍ“QŒ©ç?öÝ~m‘*ÄСDÞõ¸ÅâŽ'îtÑ~=ÆN*†7×{:v5µŒœ`ÓÆŽ©ï¿îG±tçõ¤.‰ä*ÿ„–Øí:J2‰ë%Ùl þ–wBü_¼·9æ·¿ƒ¡=ýjë‡åCÆôKç Þ9ôä˜ù×ϑݒúÍõ"Mô@Ž.UÜ+H .`6×4«5é茴ìÞ¾ÆË å<ú¨lpM>{ÄñoŸâë Ýeƒ3]¬PoÅÓ#ÌÕÖH’*=pùeR o×4C>?FÒຩ3úÝS;¦_Ž–[Ú­fú›ÇØÅ»—×!ñVŒG1dK| gÐ §³bo·î× 3’YBqN}iÈÎâÜ%Rw5БÚ!±›k$ÙQÃZlOwÝ l‡ª Úåí²§|tF’XœInGP#&ŸÓ½yK¿ÚÑ5–t~L’I„ ¸¾CÈ]¥ôW¯i›”ò¤ ~ûYœrôÛcš_^ãäq‹öãa˜ŸíŽ~Ù£G’"vö¼•ô«5ÕןSŽõ¥¿¥_òÇÇ_ãvûM·Âµéé)¶ ˜åÛË i5"QNáêßâäœÑIEð=²˜ …CfùIE÷î í Æ_=‰éÏýš‹?¾fúÏ¿¡ùî;ôÓOIí«&äcÏò/h×õí(ï0 > ò<ÆÒ¶}d*…ÊSTQFÔQ×D9*jb¶»âvñ†$E†·QÒí,«‚ Ø]‡È‹˜:£@ø®GÇHép} ©Rì®CŠ˜Qï%*Mx\×§è=*Þa–‚±• 4:ÕÈLc¶;¼ñ±Ú ª,!ÆMê"ÃÖºÊ Þb·ý°t9×bêG¨HÀè-É|oC5R Ø9ßvñ;ß'Üj«"‹‘Ó­=`·d–£Ý6„a# ö&‰Aº¡Ê=TCmÝGÝ“Ò$e9d´lÓEB…1èéúž~Û SLs’²ˆmÃib@Â@0q>VN±m;𙑬1æÆ¢« ]¥ØÍTŠ®²!ÎøVLÆàŽÈ,w£VÞ¯Q"< ‡‰Â÷.T”ª ¸að úÊAZ!ØÝßÇϯ«2jãŒÅ÷q–iA’HÌv‡ØÍ×C:#UÀÔ]Œ.ªpAH’2j½¼ $Ó*Âç7-zTë!!Eª‹m"¿\ÊXE÷]?ù†ê{‚8†MŸƒƒ]Ä*˜ÐQã‡$ã °˜]‹³Y†J%v[ß&½H•!6VÕü’ïjƒs‡1qc6QˆƒZñüîo6ů¨@‡_ño{ãÞpPJ|huKƒvw“,¤º1}´ ö·>´DWBÇv¢kvqNšL¾~Ž2Üó*ÇnkD–!œ9Ì“ºÌc„oobŒ¯-@™(|o²ï¢ KhãÆ…D ã`íb»~á1Ûf¨>:d–ÆäÃCÕ¶ŠAûødk¢q9Ñn¹¸éH‰ï:ìRö4“ýÚ·q˜âªOŠ÷0á¿ö9ºól[;„7¨AŠô ÷Ÿîù¾±O©CÕÍ? tžL4µ !þk³4—ø¸¡TêÃßëÖï'öLóÞÆ¹ÃÇéûìõ¿ÿ>ÄöÖsG˜¨(5”꽌¶H÷ðÈ$A•ØØÙIf#ÜvSŽ“Ø™ÆÄ×Lø2‹akf]“̧øí²¬Áõ‘¡¯FRúëÍ0oªý®°»Žd2B‚v‘’È”ªˆ/³Uæño•Än·Q<²ªbC³‹Ý.¡]:AŠ8Và Óúîó×5”ŒÏí~¼‰ý:¢n´úžÁdל»_Ô£TÅèú †ûꉈ± ®‰fc!2KbE9ÍIJݵÑàY¤ø¦C¤ ߇a.øÎÁÖ5ž¤n±E¦Ù@OSè"‹éËÆ̽{¥Â^:„ˆßYçñ}Q¢ËbØk´Øm,«H#Ú4È"Çw*Ïâ:m#+XG06ú>…o[H3’Q‰0† ®éãžÐ˜øÌŒ‹è™²~È`1˜]‹Ð)˜~èŽP‚`<"×b.E/û(ï0q²àñÿç·4?~ËúÊ"…G*Íä«/)æ íuƒo6lzƒ/gŒŸѽ~#Álë9ýÕ ýbÇúÇŸ©T^ÏNÐENq$Xó 9}ÄèqE:ËØ½|Ãú‡kÒ³G¤¹¥ßÒ±¢»®ÉŽqÛ-¨¸ÉP™¢½º9"›e „©©ß\G„‹U¤óãÏæÐ7Ôç˨¡êºš0úú)¢~ÇòEÃÑ?>a÷ÝÊÏ>Å-ÏY¿¹F¥ñ¤V}õ9tçœÿÏW'É&OÌÉhB:I"âËEý¦lüëoÏc›ôö´ J)|Çÿý7¸åV/jT¦ð]OþìSF§‚ëÿtüÛàb;+ˆ€­{¦¿û Ç¿{Äú›¿põ—w jzÊÙ¿~Ž=¿Â9E0-Ûó7QròO_a–/¹þqVŠäè„é—§˜åŽ´Ji.8µœ®«ñíš!‰Q d‰L=®©ÁšeCùÉ'• ~w ɘ¤ÔÈ4%dq ‡0Ø~Ý¢EJt!â$3T$¢üb@éÜFð ›J™&˜uC¿îHf#òyŽYo1;O:/Áô‹– ÁnVØ^ T†žäH=Ö„eûò ‘—èÌÑ]6Œ¾:c÷ÃtuJùèˆâéœþâ%×=G¦o,jþˆÓß²þÃ_h›Œãý v\þùô,vS¬Ñdóæâ »µãä¿ýw±$™¦,ÿò-ÍF’)ÎtÈ"'+sBôغFfStæi.·dÇsúźdòù3„ÛbZ vƒOçÌžç\üß ²)rß×»-«t=š’N³¸ „ð@ ‰Ù­éWí{€»qØLç¤c};uéïÿ ÖšþL$ýf‰ÙÚ°ÏÑÊ÷_óc¤‚Û›4)q¶? ìn)C6šRÍb‹QìfM¿îHçGHÕckÔ=»Ë-ãÏ>Gt ä‚Ð44‹ ÍÕ†ñ×_ròÏèÞ½aýãÖÒùÓç%WÿÇiú˜Ž©óH©ÎLØuìšÝõ¤D4·µ‹³ÿí¨*¸úëÏt[Cše$“*¸ín¨k’ÙŒt¤¨_¾¡¯ã/Ÿ3údN÷öо—d•eù—KÒ£ŠîrCv2Çl®€©$É$¢,C¬¡Õ0x®âA'JfbA¢~ñW~åCRE޹ïß7!#³Ûšn¥õ ¡ð@F6Ÿ åíƒÒ¯Ž϶–ô«ÎåäGÕ S ïµ…æ=s;ññ!¤Û=víÎI1¤5ú;(1Uä`:L»‘íò¸ùû¡9lý×P*Õ´ÊèëÝ],qt>#›”ññ»¯mþ;ïƒÐ[¯éWÝá ïsA~\Ð/¯qæ‹ûvÚÔø„“þÕ_pý§s²Ç¡[Ð, z4%›%ô«e|}­¶#$#ÆOg˜« ɼÂ.7¨é _/1m _Ñ“Rtô×ÛhðuÓHò£’öâ=9aúÕœîÝ;¼ž‘Oõù†ôøe®¹úë;ªÏ¿DÙ™ Ö¿¼ È,FÖg%ųDwÍæ—5Òø¶‘“Î&Q Å­êüþ^ì)bÓìVâéͳ'µÄì:Ì.®Ëb–õ1Wc–‰Î7h©v×bj;¸è}ƒ[úÅ’ fkÐÕ);D2¦|~ Í5Û×5Ùé1é8Eb©ß, +¡·°ë%ýÆâÚ}òˆb$ؾº$›Œè6kTqÌÉ?>fýí_Ù­ZJ’ÉŒì¨À¬—ôËkHgœüÓS¶ß|Ãn ¾é™ýÓï8úêˆÝË×lY’=yF1±l_쨞OX}ó†é?}Á毤©S%@ÇM³œ‘í»kd1¥x|L>Ò¨TÒ¼¹¤ÝìN‘NgèRG£¸Œ|·[ѯ-ªTÔç$Õ×l *%MSÔhŠ·Kv¯–QÅ å¾Í)Iº§}ˆLhɰ9Œ|ËH=p7‹ùÿí` 2ÏQy) H¤àæÙøHÅ,ñQúÖuÞà=èü¿[‰¾—{>"ýxºð]·öS¶ÏÈúÏÿO¸ýÝ?ðBƪ<ûgu_Ùý !jó¤B¸‘‰zàK;7hHÓ¸¡j ®ˆÏ cJf0nut—ÄrÇ&ûÜ-‡^·ˆ•âÎD¿‚”ƒœ'J Й AJ>މ0´µõ¸D¥ _ïǺǵ6²­‡k‚·„}BœZÁÁU³2ÊZsÐÖÇ,cPH‰7±Â'„|ÀŸn6yáVª©xÿNR9ÅßóÝû·pã9f ˆ|x,Üý.¿®T<$ò yÓŽ¾óycñ#š[Åñk_û?áI·â׌ÍpxåÀA?HÀ Íè>ì;c·M¦ï•À?2 ˆ,‰:ä®Ã¬J! pD‰o8ER‡h™¤C…w?çø8ŽoÇÇãA+DPˆDÄMâ€õu3Œ3÷€Lu?D„H@dJ‰¡C?<+{T]–ía÷:±ª‘¼ïd¢cõÛÜ+@Å*±ðqb¸_BÆŽ¸·CŒ¶à`bWYŠkÛˆzÖ©5R|ßƒŽ¸Vßt¥Ig¾Þõ÷w0v[ešÅ9Âð~8'7÷:Opu\GÅ­îúmykðŽ 養ìI”!u”pwñsË,EÊ€1DÊîzdž" 1¡rø ˆhÄ”{jÏÐ]×ãº.f”„ÖÆkÌ[Wñs*‰&ïýA'¸€ÌãÞÈ÷–{)XQÒñäÑÿþ;ìÅkvW»è>ízÊO>#Ï!ÍHÔŽõ/5å“1ýUMõÅShÖ\ÿõg¼,9þý§ô—o¨WŠ|®6а{wªÎ=áV×ôÇ« Óù-Ò^rý×K¦¿ý-YÕS¿©IF ëŸ.™ÿÛô/Þ={Nýów0F™u4»€±y³$å£8ú—¯HCG}¾`ýú2+ÉÊ ×LÝà}@%i,¯é’êÙ)Òt˜ÆÌrº‹+šå..\B‘Œ§$ãüˆâêš@F:™ p$“’àz¼•¤³1œ€LíHGýrK¿³¦äcÉÕÿü+›kC’©ÃL`qÊ!|@Uœþós¶ß}Ënb[vÓP}öóßžá{ÙÐõŠÍ÷¯i[ƒ 'ÿòd·b{±Cê D‹ï=8‡žŸQŒWÿë;¬HIò åq¡â;ÈOæøf…Ÿ’ê†å¯båVE Iq:Eô[úM*%?š‘•ñôf#%!8K¿Ž›U‚ æCEIt–7ýpИݭ²ÄkeÃxÚó5^ ’ªZP7IJR:ÌrIßXºuCùÙSòÔQ_né—käü”É“ í›s`[ÁäëOÐiÏúû7˜&0ýÝg„æ’‹ÿù3åW¿cú8åòÿ÷'œ.)§(<ý¶ÅZ‹mzæÿú{d}ÎvpòÏŸÒüò ýÒ Ë”$?ª¢FL'tË5íb]·‘iúé)åñ·:gñÍK<ÑHk:G~v‚–-fcIfG$U‚*KDsÉùÿú QTÄ®\©E·ÔAÞ’jB2èÒïpAo»ð…ŒÕŒÍ’~c#Ý~wXcB te£â–¹n<#æƒ91¼¯k¼_{ha½mž¡f½¦_7­Ð:¹óºáhñ ôC‡±ÃŸÝªp½Ÿÿ‡m=óß}Éè4ÇÙ(‹ñÆ`v߬1k‹,ÝÕ}'™|ý ûîGÉè³#Ò*‰÷ýíK®¿{‡ÏH”Ç4‚éï?%I=ªHX~ó=«·;Òª@x' uÊMtXÀ™ÓÃÉ¿ýe6l/×è®—dŸ}ÎäQÊâÿøªcFÏO‘΄¡»Ú,ê=9Æ\¼ÄÇÌ¥,þôU¥ôæäŸŸ±úÓqò˜rVâ]ï¡"&«)Ùl„]]ѯ{ÒãcÒJ!µ@å «ï~`ýf‡JÕ rŸ|@§1íÍy‡LR”ÔïuBð R²ù!Ü­>´x0ÄôvzÛÝÊj,†ôËKšëš|v6x5ìÝ1qëz!¢ªýûºø‡bäȬBfj¨<ß{¶÷{e1¶tÃkKy7¬å½±óúï¼Þ¤Ž8ÄCúïü>ÖZá»5ýN0ÿí#6ß~G·KÈg¨B>¼ÿ¿?žïkеÄÕºë ^J”Nïhã…¸¾Ç‹¹"DãXúè)'¿Ž[¼eûrƒªJ\³AÈ„¾®é·Å£ÇH·¡7åI¹¸¢ë,ÙtŒ U¨HH%Õ§SüfI»QønéòYFw±Œ2<¾—Ìþñ Òܰüö ÍÕ–ôä˜$±ô[ê> ¸³‚ÉG¬¾ù Í.côø׬TdÓthªt¸º=„CHÈæ³¤²¿%r¨ûHfJÊ÷R„’˜]7Âjg{¨À ûÛËÛ’Q6ðÖ÷kh쨚m,>úz‰i$é4£¿¼ÕtÆøËÚ·¿°üiM>¦ä¾7”§OIRÃöåŠülF{õ™ŽH2Cë&SŠG3t*¨_¿ÁnA¦žÝå–âôˆöÝkôxFè[úÎöbHŒ)Ä)I5&›hê—W$ǘ|6fûÓ/ì.ºÈgnÚå†ìø)óß=…vKsqÉöõ–êÓOPÂ`E]Y’ŒsÌò‚fÓ’}'=±ùö¦ÿö/h»bûnƒÊ+-ˆo–‘NVätÛÙdD¿jÉÓ]¼CÏsô›Úó·,¸ŠÅ‡Þƒ{ ‡ž$ãß48ç·Xx Uåˆ`£5U$É8Ãn¶ô­C%)Ù¼Â÷}4s)Q58üg,Cµ'ÞôàÉt„ð=ý¶܉Äï:œíp^’ÎJBÝ£Æ#ÜfY‰Ö~Õ‚Á Y}H²Ùa ÎXlÛàEÔâ¢)nØ#dLyÛ£Êö§ÞàH-‡Ó³ŠßÃË‹ ÞX|ˆæl>Æ×;¼JHŠ˜zƒw S‰]×d$£)ý¶Áö1ÄàY;Ä‹úá7QIN6/0‹%f¿Þ{Г’$ON´$˜ž~µÁ9*!—`zÜ~`ÝröʼD§Ð/6ƒÎZ¡ãR@*‰³±Š$EÀÚ>ʆjœÊuÔÅ÷á@‚ª t~+½Ðô˜í0iOÆk»¿‡¥ºµv*‰ÝEŽLð}ØÓMö›ðHí>ÒP ­õPõwC+KÇ8zëp²£ ·ÛáŒ@ã×q ÍÕ=LjïÕ– J ¼Üí­‰:}ßãdFšC¿Ø‚NãýÔ± )­k:œé# Â'$U‚L5¡¨ˆþ±E9;#â©[Uã¨+»ÞLÞ!HGŠ= ö)޲ÈïžddH{î&Eî£dÅpïü¥Ô>èí÷ØGà ñëmû!ÄÄM!£Ø;(B>ð¹ÅË~Œpÿ;~ä‚ $ãØACªè÷h"åÃçÊc;12ò“¥T$³èGDbG³l"R‚·.êìöƒõÛ†¨Õ÷)ÅP½½ë<ÞC6Ÿ@ßbm8ô¸B)Y·QOJÆðœ}5Ú‹°k;ÔxJšÇ%™Æƒi2)èkÐI*cˆŽÛWõäŒ;I~xvT9Pm”Äîç±ÀÞçJ¥1LkÀ[ !¸Aïbe]ˆ‡oxÂ8ö€àÃ{Ï]q ÁBa¤æý°{BÞ0pP…ð·ˆøÊ¦²ÀÝDÃh‡ çßÒàÿgýG<ðÿí±‚Å{M>ͱ›-ƈÈ—ñ9/©DÄ4Aocö6xè<ĪáÍ3²ö}k‘eIqÄ!/£ÌÅš¡Çm6)pÍS»8¼³ ‰ÅöƒÑUÆêµG’Žrúå ëICa‚Ó(½ÿUü½¹R ÅŸè)C©;>U$U JÎ ‘Ú©fÛàŒ?Ü×(ñ÷èH1ìCw³AOB×bjsj‹¦pËÔ x9Ð펾q‘nââZ ÿF A§ÓD žN£_Êâû ãËuŽk=*ÍÀDšàM¿Ã^O,<`â†AàÃ0FˆÛÅÏ£Õ€7Y”¤£ß5غÃ#㺠-‹²Z\ˆ{C@Š˜ž¬sm{²£c¤©é{ƒ A¨ø{û¡ø3<:Kq½A¦ Ávqÿ0(L›îöP$’I:š Ä ý®EW HNÏÈJI}±WÓ\oI'%fmÿæSªããêÔœé'SúŦ‘Hm!%?=F+C{ bÊØßØ~Áîå³S¤]±üá5éì1i™b[CõÉŒí÷ßÓ6ššüóÏ(GŽv“¯Ÿ`¯ÞpýÍ/XÒHQhj<ù|9¶·­Ráv ÚcôÉSÜjKñdÄöû±¡Daé†Îà<ùÙ3Fgšå~Ä E:ž’2ñ4—ø^1ùú9ÂoÙütErúˆ´€öõ9¢ˆ¦„öb…*gä'%åé˜Ý«,¾=gü»ßQ ëW óßFûâg¶×-Åã§”Ó™‰aâˆÁªˆ|Û|·‹ú¥2¥¹8Gd¹ˆz)+ʧs²IRÓ_¼æú›WÈj% jhO¹XYþþK²Ì°üö-¦³”Ï>gô(aûÝÏX_R>9Á×5Ayì¦Fç$…ºõÞbˆ)Ui ,¸3±¿'áw«‡Ehh]y‡m"OÓ×kÚ«u4Ìgª4{.?šâ6׬~¼‚dX‹¬Ž˜}J÷òê«@~6§__A2¡<*Qå óÖ[‡·S·{ùk3Žþù9ÍËFhD>‹ Æ“ŽÒa¹añÍÏ£o:;"NNÓß~–+®þòŽ|:!8²¢|4bûÓÏÈÑ¿ÛàI©‘Îr’IAûê×ß¾EUBr(˜àR'È "mœßÕÏÝ–ÅhèW+\ ¡â)Í nû.yàP! wM/Ȩ[{Ãx:(ݰ„–~¹:èCï¢ëÂÀ{ñåyù‡zÉ·9êÞ»^ï{ÏøóO(sœñt—×4ï„|DyvŒß]Ñ,zгÝÅzzB64ç×èé IbØþòª9ÅXÐn£ÇSš—W”Ÿ='Y®ÿð‚â³Ïñ«W¸ô„rÔsõ§×~‰{ß3Ðo:f¿ûŠê¨ >_#ÊÑo©ß^“’+úësv×KÒÑ»­QÓ#ò*9D°Ëlh©"‘¢§y½DMfè<Ð/Wô»˜zšÍŽH§v³¦[lpÎ ²1å£t*Q*Žg•i¶¿¼dwÙDvõ­û&öYpüÏØ~ÿ]›hIàý6~ð¡sÒâ.¿öð[¨¨×íkD:"›!Ø»d -±ÛÊ’H$¡ ÒÙhH_»§ó8)v³Äõ1eíP±þ ãøá‡/ (OF˜Õ†¾ Ãj8´šß-áê<Ì›þ sýëƒG¨•'·‚cî'Ô}h#¬À5´KÐi©±A–’J?Ìï¹>Åm҇Ʒ[úU7F!àlOàzÁÉ¿}EûóO„ñc&J¬„vIsiÈŽfC×§…bDõhŒÝ¬¨/¶”O“¥l~xMw½%{ô„ñ§'øÕ9Wþ'‚Sÿë4?ý“'X+(N'ƒLÓa·†~µ¤ÛZFÏN¨yM‘¡Cæ$UL,Φ%æê Wß¼ŠÅ;¥°Mƒ*J” z0Ÿ¡’}áP~€)î V“LÌõ5ݲAώȦE”œ"H P³³Ñ—D9™Ì4Ýù9ÍÕŽüÑé¬c„o,ªHbP›”øÎFÓå,æë Ýb=$¡qH:Õ£‚~uM¿q”OQ>‰ »5@ׂíé;dYR¿}Cùùh¿äê›sòã3²£1¾_ã[У1Å‘bù—_Pó§ŒO dÝù;º­"? ¦?ƒÙu õùŠÑçÏé^¾ÀsŠQ _µØÎàl‡šœPÍ3º‹5r2§˜(Ö?þ„£`ôèŒd”⺖~³ÁmäèˆñóŠÝ÷?Ól%ÅÓcºw/±6§ztD0[š‹šêËÏÈ‹ŽË?üLzö)³ç×ü– FH!(²ã)®^aêAÐv³¯@A**«H2…mv˜Ö¡Ê­4j4B G¿nð¶Ã´Ž¤Êñ½#;š’éäENV(œsCD£‹2¥ÑEÄÉyb%â0–¥ÀumdšžTH,ÍÅUŒÑI4&ÓŒöü’¾—Û£ç¤Úc:Eùh‚[/ؾ]FÇešDxHHó<„ÜkëzÛa{‹J ¤dG9íÅŽáz¬qCD°'™“W’æÝ5ž€Ê*’$zº]M°šòé·C¼¸Æ›~ظd(åè·*/Á÷èi¤7ìÞ®È?&K ÍÊP=:Â\]Òµ™d“ ª!,dK Ù¼Äíjúu+&aH–ª##k A£“=É¢#\ÜzE}¾Ä«•¤(=hy¤À6ùã3Òİ{·ÁYK:?% ÚóÈ•eØ ›æûÕ¢öëžÝ›Œ2ÅC¨p£w?T˜ßG-¹]ƒÙõQî¹æƒ:èσó$óxpj.¶uSyUåˆâ¨À­Öô è"Á4[d2"I¤9É8¦0†¾§_ÕˆÎm‘PœU´ç×]’¦ïuäoj=œú%Rê7—1rVDýe4^)ÊÇÇ`¶Ô×-ùtL°f8Y÷»ª¨Þ º-M2ÎI¦f±ÚG…ÞÓëª!¾Ù#¥ŽÕï$ÑìþQÄ"b‡¼¹_.¾Ñ‡à%Е$£@ø;Ô_ Àû@´ó¾Ë,oç~5döCU±[ÏÞž5.x‡3v`«k‰ƒêñ Ù4‹¦Õº:RŠtTlC_[’2ÃÖ 2-I ë; ByúMM I®pÖ£´ÄõžütŠV>’Næ¸Õ.“ê–íÛ:WØ>ú-T¢cçÃl¨žž¢„ÃÔ.ê ­±ï˜ž¾­QYÖ!T«è‡±΄ xÛá:¢€¨ë>‚”4/P¹Œ Pm@8št $ã!¢÷¤9¿¢Ûôßu Iß78œ×L>9¡?Go5QFþѬPóÿ¶¦x HnaïzlÛƒÌй¾¥É¾ñxgcjœØw9’Ø% .&·é t+æ>긛Ȉ-’[sÌè>s™$¤ã³ÜbÝ-Ò‚‡NßÕë‡ÇÁÃEÞ\¿—F‰¢ÉÅß;‚Á¶=ÁÇCRp™¦¨D;w7ÒÃm¿!Ûw¤nÉX‚7a¨žúøÌ9+??¥¿¼„rN–¬OЩ§_õ‘~aÌP™NÈ+|SÓoZ’ùÚ«&vFª""û»7×8! ^2úä˜þü 9™£}‡ ÃëXƒÝÖØ­°½‰Ø.V_…Ž8B¼Gé|͆ݛk‚ޱÕÞ¹ø|ú˜Ô§²©} >“ë¾ ^ ±J >’µÒi«œ«çö„N2úļ—¨<þ‘[r(ï!V¨D‚–¸Íî¦ú¼ŸîÌ©±ò/•™o*Ѥdžær‡OH+I{¾ÀùHQ©¦_Ž‹r;6o7$U…N5Kp™&$• ~sM%ÅQ‰ÊdìÐu fÓ ø}D; =¶íi$•ɬ ɦé1uLMUYL«èAÉÒÓokÐzïA!´lé|L>U´o/éû( ¦Æö’tT!¥¡[w$ÇsÙ²y½$;yL1l_¼…t„g@ç9Ðáº;6ŽxH†A¡³I~7 éñ ÂÕØ‹§ÆÈO‘ÍK”–àvÔo¶$''$ÊÐ,’ùsñšÝ¢#ɲoy›²œR=:Æo¶éqmËA5l ÀÌÁ·XŸPVl~ø… s´JIg#‚m ÄÒtZa®ÏYÿxIzö”ržQ¿|3ä˜ËÃûßqu{H „r¸Ú¢'’RÐ_álÜhçggdó‚þòO‰Ê õË+‚’Ȥ¢<­Øþò޳¯žºë+d’!…êœÐïèK¬Ï˜~õ„îõK¬›Ñd6&Ÿ×cÛ!;¤Òå„鑉g÷ò ‘McêÒy)´Æ7kúe‡šŽÑE†–Žæí‚ôÑ)ýÕšU‡’št~D:+J „FØ-ë_Òû’£ß?¥ùù%É£§ˆúã*FŸÎ°«–æòˆŠò4gýÃÏ'Q*'›ÀÇøïäí\ÔLÎGÑH1´c¤€ðÜׯÞh\7Ï*½5ñܪöµâ®w7€ë许°ÇãÅn™%Ñ$âßúfM»éHFv»AeI”ÃŒ'¸ÝÛ¤YNÈŽ&øÍ‚~Ý#« ú†nÝQ<}ÌøIÅêÛŸ1®Dú-N–LžDK½dùã;DV¡5TàÉlBèwq°ÎÇÐíh/—Èñ“Oæ´—+²£®^±yqMùÙT·¡ëRÊGSìúšíëk„Nîm DàÞÔ:èVo/nïmnoHÂ½Š‘w‘Ç«“¿õÞ­Ðɤˆ›¹ÛUÀëpo-÷1ÙË?@Öð7Ä”+¥ÿ㘱`˼.w5ž3ýâÂt‡ùÁÛÑcJ`–+œ×(ç¤t6Â×›¨gO5¡³”OçÔo^Ó®Áöäž0ýì¼£¿¾dóêUT‘¸!4ùq‰Y\±}Û0úü9Ò®ðrBš5lÎ{æ¿ÿœ°½dõÃ+Œ/˜}ùŒ¬ÓÅJJa— l¯ 4ô-L¿~Fh[ Röl_žC^¡D«-ÉÉ Jö´KDV¢òb%yò£œæÕÉécüæ»E‡0†äñ3òÌÐ,zFÏÏèÎßàŒ ™ÍÐI,V*Fæ0{ú…Æ®.Yý𲊴Hè+‚Î"®Tê»ünð’•’Œ†ÈïaüK-°› ¶¹®#b[‹Éd‹ûÏ "~еÑp7ìnw•L>›Q¿xCH§èL6ª*PRbëú a¨@‹ŸmI° íõDI6›Ò×ÇÔ0|ÛóÖ=¾óÃæº^?ÈŒÄ òþZ|(‰40„wÉÃæÊn·¸ÎÞÂŽIÆÙ­.— ƒYmâFЋ(ÁÌÕ/ m3 Ñ$x‡—)£ç » NhŠ£’îò‚vÙq…®*Üò‚æª!=™´¦ž~±ÁöÑsDgÅ©ºeC2š!¥¡½^!‹X!ë"fÌ7ÅgÏQaÅÕŸß?~ÊôË'¸å%íå:†~œÎÐyü]úu‹é ¾Ù‘LŽ‘bÇêÇstU V¥¸áõ’é$& »hš fH`–âû^"‹ŒàZ|íÐó£¨ÓïíM'cس)n=ûbˆ¨ïæ¼`ý{d¤ˆo„îü ‘OÉæÅw!ñõ–~±’u!¨ˆ,•h\³Ål;|gHNSÎañÍ„üˆù×OÑÒᜣ}w2ÁlÖx‘RŒóhìQºóKœSèÑ]Q¯-¨¢ ýõ}|Fuš±ûá^WŒ? ÝŽúõ-â-¦ëq­¥|þŒêdLýú ý®A¥¶©A%(•Q<>!ÍÎÅb­L>$¸õ›_^#F§ŒŸÏq— BšÐ-·¤ón· Ûô¤“ éjrJ1 ,þô.?eþÙ »ŸÄ…’ühD07ÔUMÝ–æ|9p ÿ÷X¡ŠIq\Ò-7¤³)~·Æt©<HË1ÉlD6)íšúÝÒŠâ¸Âmw˜¶ÇlwXç£YDÊdÑ!²’|:AXGqÁñæV’ñ4¢²*¶qvžòdJ}­STªÞ¬&9*ÉO§Ø«+6¯®I¦stÝr‹Ì’è’|`’ ! u‰P}Ä¢+¤rø®Ç41¦7X‘®ë@å¨$`·5f×dF6Ji¯¯Å”ég'øvC}^£ò,Ê*Œ¦<;&ôÚË^¤”g3Üf…sФ¬Ú£Æc”vt×ut{wÐf$™e÷úk4:Ó‡°…¨³î¢n0Q‘ØÑµøOXíÕ}Ȫ ©ÉlB’ºE‡.`óÓKúPrô›'Ô?½@Ÿ=!•^¨ÔÓ/ºØ–ÏJÒܱþþ äRht‘!uÔ "•½Ô ?Ü·fcî¼Ò7轄C$C åfK·¬Aedž.„‡Ì(í€\»i8üV"jÊ„D¨4j‡%B_Ó5ޤˆ¼H™¥qñ×ÛÆàEÎ7R€éðN£2°õŽnçù Õ\±øëϘ>Æ’6P>>£8*±Ë+6¯®ð2A©}õ’ª$ø–rÒI†kwôëYN=žb’£ n¹`ýnEõÉc”kh†üìáj¶¯® IîT”¤Ò,ä|\_~¿Š¶wµ&êÅ…TjÀý-­„™’éïñ7ªhƒ„ÃlcdëùÆ~m÷1åQ'’äV·ã?øeä¥:o#¥f2gúÙY乇hj/V˜6üâûHeðF ((‹`ðMx(N¦´—ç4 Æ?yÂäÙïÁ-¯Xÿr‰, $ dBùdDuM³²¤ãá{ÔôÑ/Ø\Zæ¿ÿŒ°¾bõãk,Ó/Ÿ’&1º×¬7ôÛ˜X(TŽo—ô>cöå#ìÅ‚Hk3të5¡E‡Y6Œ‹Pé-l¡ ?-¨¹@Žg„v1t÷L÷©§o=åÉ ¡ßâz‡ÐÙQ1ðÎ9P„Їz·¼bùã9r4!+RÌfuÑ̤’dи߲<8‹7CÐ(‹Õ£aü ¶Ùa[ /ÄE fˆ”¤*n¯Dý£mvØfˆªÑ‰*'L>³ùî%”s’<êF£éD€ ƒ¿âo73Þ{¶¥B„Žúzñª£‚Û^ÉCÝ÷‘ûàæêþæùÞàùèõ784Ð7‘ðáo4o’J nS׸~ÏJH™ òxpb¯³«ñ~Ø@W:ÃPâûSßB’ÄÊŸw8(ŸÅ"ÇÂ£ÊØ™¶»M”ÓÌ+\gP©ÄÕ5íj‡ª $UŽaK³îH‹)’–v³Cdy”'Ìe¡$ÁxÊO#º‹¯)ž>¡<*éÞ^Æ“ÎÈf£˜²«5f¹ÃÔ=`ÉNNvÅ⇋› ´Rös|5÷†Ÿ7ll¯ß W¾ÑÇ騩u5® ÅBÞ3Ó?8>E;ã‘!ï¾ 0ß÷ ²C‡(’$úØuÞ›ª‚B¨!#iËvm,hYGzúˆbìXþå3ûü²¯i–[l»ó¶nbÇ?‘x#l[×87dTÐÆÏ"óè—6ÐêøÓ§#¶?¼Ä’1zv‚[-i×-ªÈ°õ6’4 è²"ŸL°ÛkÚ]OZƘu‘ÄÐ:¡²£Q$X•£˜,|Õúšv½EV²*Á7]iºõ–d2#´+Ú]ÎRt’’£Ø²üö%Œæãœîê'JŠI‰Ô.’H<¨¼$ô»Ø!ÖêFÂ!T¬ôÛšòù”èØ½Y“žœ i©ß-b´¢¶‡ ˜k,åó3è¶X› ³€kí`nŠUƒˆ„ÛŸ\%é|ŠJÕ!âÚ¬tW+’£3ò‰d÷Ë;¼NÑi6TÂÁtukk̦CW#‚ïè×»ˆMŠt6b3¹ÕJ‹“¯×ôË™é¡Mjc(Iš"Ë »Ù€ÊЙÄî"DMæTŽ®¡ ™¦½¼Â4qã¼Á¶†üôiáÙ½|é˜êÙ1n»¤~·DfÕã)ýj9ƒ…/g‘U”g_³{}‰5Ùd„ÌÁíêJ@—c¢7'€ ¸Ú’ŸÍ1‹+ÚUOõé3Ò4P_,PÕjúM x4Œ:¶%œCª¡»ˆ¢ 8™`· ý&ºž³“9*´ìÞ,å„lœÐ_¯0í` ò>Â×§UlßúhÊÙÊ›*ã Všþòœ¾WTOPù` Ü Ó8l‡ä¢àîjt…ˆmi³\áì]«ÐC%¦ïÀ ²ã ®­±»Ûu1>1ào*/Ñe>TÔ[lí)ŸÌ±Ëí¦%MõøÉHÒ]¯b¥G¶t›@6-éÎ/ Z¿‰@Ue4ŸK°[(¤FªX "Ú†@J:êd%*KÁ"2Ûìh¯Ö õ½bê ¹ø»@nïoT½µ$³c²± ~u 2½I}ü¨|cˆ_Î>P±þ@ún”¯‚jîÆH-ÖtNq:¡{wŽêï$ÝKónðºÊ¡Â)@‡ã»”IKÛ°i‚Y,0u ™”$eŠïv´W5²È±›ÙãSÂz…él4«‡Ûwf<È¢¤x4‹ÏxðØ®ÇlÚHKH³˜V—%èÇ9ñ¢K*u`Øzï¹–”q¡¿V*ä}ß#ª£§Ç„zMýöо×L>?Å\]Ðï!Ä&Êl(üŠÛc#×Óù,šÔì­øòÛ^©À™˜Žø¡Ãé46ÛD’ÝJ"ü[ÂÏ[Æa­‘‰ÀÕ5fÛ‘Ïщ¥~½¼5'‰Á 6àP;Äs‡á~ˆà ¯(Oò5??A ‡LÍù%Îdcëc¸O2vWì.jª§sš7ï°.eüÉc’\Ð-Vtë|4ÂË"'=šB×м»"ˆt@0ì.ÆT‹,CW%¾Þà‚¤81˜í³3d§s”¾Ù¼ÊTÓ_/é6–üÑ)‰êؽ¾$¨Á$zT‚= ó„Œs$È$DÃ見2–®Ö,ïÉlNR%ãÚÍÙÿa޷سµ·+úeM£ÚÚaZ颷Ä챩þýb‚w‚±81¬¯*OÈaOâ8˜rW§§hm£œT%ˆà0«-j6£8*iÞœGio™ãMKð ]ŽP© [,ÐãÈ»:Á­.Ù¼¼B§dÇ3=ýå 7ÌÅélJ0;lëÐe…ë¶ó&\ÓÇ€—Ö 'c¤°È\Ó¼½ŒúðÓSŠ“*ÃîZT‘#dOw±Æ…m£†]†€šÎÁ¬i ù£Ç¤™ŒÝ/'Ȧ”´tÛfÝ’L¦¤ã Û¶ôËõtºç@+5‰î׎úrÇì_¿"eËÕ7ïP³c²ÜS_oÑI‚³©’Ë fk˜ýëW¸Ë×Ô»„rª°Ã&+x7œ–ná˼$™N#KÙD¢±ë%ݪ!ú”b«?ÿŒ ‚t2%«Ê»ó–ø¶Æ¶™Ž¡¡^¬IA’g$Uy×”v0 |×àZƒÈ„³´›è,MËŠd\Ð/„“ŒÁ¬kúºAæTOÉÇiœ¤£y{E·6¨,‰¦Ë.PœœäÄM³ß<§÷’õù•M™}~J{ñ–nKÄÖ ²³Þ"г߂ê—\ýùGl‘—%z¢qMM·jpÎVǤS‰ïRE*Jv4¦¿¸ YwÏžRTš~·Ef¡ÛÑo-ù“3ò‘¢½X‘LÇ(Óü\׳ýéœäñcF§9õ˶Ý"Ë1Õ“cè\ó1:¦œkÚók¬‰Ýà|Ô‚ÎËHçìâ& ›•HqSQ‰Ânlë1ëkz«¨Næ·‚¢óV©¸Á ·6ÐB+|×Ò-ê&÷e—\SÇâËÁ¥iÊÓhDé$ãONé/α.Ðovq]Ý‚‡tvL>«ÀXl³¢oóß=¦þñ'¶×-º,)OŽÑ¹Ä¬×¨ÉZ6lß6d#Íîí%>IÑZƒ…d=zÊèD³úË/xqŸØs;|%â…JYÿà³Ø$v½†é §ÿü9~ñ–Õwoè\ÆÑ?<ż{G½´,"ÕH/YI:ÉìýVoN©¶¦ßXÒq””<Œš6Û®¼'òaLÀØ}«w8 „Ì©ºÅÿŸÿ£Á(Ñ|lvºë†êËÏÉG–å7¯iz Û<ttK¶çûQ͘<)X~ó‚ôô)GþhÌö§ŸèME9Ë#E%×Hà–ìVŽùïž°ýö{ê6á䟿"ñ5õb‡ÙÄê¸Ê4ÙéÅqNóâ ÍõTA:£RG¿^cê@:žN3Ú‹·øtÆñ?<Ç]/©Ï/èZÉô‹g$i$Î bØTýúÍyOõÅ´Ørõ‡Ÿ£1Z+pŠd2F%–nàP›Ýïr’Âavt:ÐÆnöž©íELýÌdaÖûCjÜ\kd’Ǭ%0» ¦v‘fÆD '©ÎÎHR‹ÙöÈ¢ÄuêW×ä_|Îü“#Öýž¶±¤eN·X"óiY RG}~EùÙç”SM{Ý`6Kšë²˜Qž!}ƒÛ5ÔËè1å´ÂtKú] ˜#†®d“ßKt»“2­":¶„Õ/Y¿X1þêsæ_a–kº‹-A'ä§h×ì^]Ò×Ó¶¤ó)Òd5A˜íÊG3p>v¤¼‹—®o1m‹JG¨<ÒCÌòšæzƒÐú&H%b©$ÅÉ»ÝESà4 P#¼ƒˆØ4™Dna0怦C¨Ø2ÜãaöÊI5$Õ óŽtWKDZ¢Ë$Ò´:ÄÇS]lÏ{3¸ç‡£­Ø·‚µŽ†*¥2Q‡XK¿ß˜q;Êw¯%JÀv˜ÕnÀ•iDªpMƒk-é|Š.ÁÇIÎÖM F8€ùÊ ¤ÇSp="ɦƉR>FEÏò¨R):‹v=Ÿ!EÀlv #&ÈÕj4!)ºók JG4N2á›Ó8¤–$“ ‚Žör;`lâ$çzO~Y´íÅ}m#+ÑQ3›$ÈìÖ ÇU¬Î{Z`ëῃÙv¨ª$)4fÛF¦hgJ“Œ4ý²FÏf`úm‡ u„Žétå3ê–¡m€€å¾ïN Šl0‹q€¿ßhzü`Æb[]äYs+îWà1›m”ì«[:A¤ßÝè ežÇ†é1»Ý Ÿ,ñmƒÌ+=ÝbÓšÒ‚t:F†–nÝ TÑf:Ð^^ã\ Q‘e…Nf¹‰±ôZFY 1ti·Ú«2/Ñã"V »8„I¤ðô«M¬h*Iê¿ €!„8†ƒ ^Ýà¹ÿM±PŠû`8ñ1TÖ-¿¸ løÐë > K¸ ëø{¿/|¹¶¿FK¤’ˆ4¡¿Zbw=ÉlŒ.Ó¡=.¾§¹Þ “ ßwQ¿[æC°ÑV0„‰,')sB_cêßGQlv:'´[Úe3„Cˆ!h¡$äô—KDžÅî‰Òñ·Š‰ˆDEòŒkè®71)²JiÏϱN’T#t•"¼=„¹¶¥»X!Ë’ìdа‚§[®ñVű°‹­N©úXeWUŽI'15ÌÖ&ÊÌ$“·Ù"Gc„ïé®·1mµÌ‡H\A2É0‹%²‘3Ìz‡i O¢tm±†ýÆYü'=׿K&$…ˆ1©SRJ2ÊèôtŒ°=ý&þûM¬ºxïY½·¥¼[}¶1Ä,¦'ÌjE…0=ÞÇýï,*MQEdÜw‹-aHp ²£Ât˜Ö Zóp@ߢB§d“¡@¤â^Ñ,WØÎEÝ’"ED6*°M˜å† R’*!YÖÂï|Ûa· (5˜•š$ã·óýÛ¸Å9Æ”$¥&™ õ‹¿¼‹©9º$›Ocôs[Їö\ØC¾‡á*ó]d7èRyúåQLЩ@–Ù¼ÀÕ5ÝeH2ÒYйÞà]|ÍtV¡‹Aò¡4¶mé®kTQ’Ž$ݲ%ØÕÓŠô1\¿¯dº¦¥[÷`Zúõ6þ¸2^×o–ôkÏè³gL>ŸaÖ[ºë³½¢Ù´ä£Šv±Df%28Lc(?}Žv†äÉîú Û¥¢¬»•et\²þáéé)‰òì.7äOž‘gúò‘Mѹ¡~y¨æ”'õ/oi!VvŽÿûï°/¹~±F!˜þÃ?PT ïþÇwdñæ‹€sš“þšD4¬~¾Àvßw¨ñœ¼Rtâè–ÙÉá"sX¨€Ý®ñNॽZ‘ù“cÉòÏ—$óWoA™|yD÷æ¯*ünE½Ø„ Ÿ‘”× ’²ˆ÷y_¹=¹JÌ3Üf‰íäЂr7(»Áø|l›§Ó ³‰‘Þû ë†Ã‘B*Ù®ñ^$dv»¤_6<^F<œò-ÝzEÙÉ·^A:»¥Û9”xŸP>Bªwlº„rFRjt"©ß]tÔÞQ‘ä–î:¶ÿ°;ìv‹i%élŽÎÜ­¨àH•EÜŒ…¶#HM6˱«-ÖÄI¸x2¥}ûŠÅ/KTªo°áîb¤’!è„¿‘öP JÆÄ,·oUËhZõÞ"u >hhÚwB—d³1ÁÄCA*i C¸ehtt«MÔXJñ°(Óûh`¾õBRÇJoø•ßYãoGyßû=ƒ³¸^2ÿǯÍLÓ³}ùŽ~kÈOOÈæ#tè˜ —ø‘ FàZ‚Ì(fst!c7§^Ó-›øÓf%ùé Å ÖßüDo®3”Ÿ>AÙší»"Õ(}×’ŽO(3ìºEä ¾ÛErƒƒì¥@¤QöáÖ vK²“'dY`ýâ¤3òñ•IòÓBX|Hð»s®þð É“Ï8ùÇO]K0;.ÿð½©?žcÖWÈé)Ú®©×=Å|ŒÐ9I‘cV×Ѽ“¥éÑ·Û!Ò©,ÍùëÅü !¼‰ùýÕ†òÓg3ÉÕŸ¾góv‡Žñ?þ#£²åüßFW£úîA}¯ŒÝ'k{T–Ç ´¾ÏÁãv Å'Ÿ3}’±ýyÔŽíÅ%éÑ3柎¹þã÷”¿ý-rý–ÅO;òÓc²IÛé÷BB¢´ì¡g; }·¡½^#TE6#ö™$Á5˜ Åûá(<¢ÞS(íç=™Ê›¢EøpØÌ5Ð#ÅnW‘þ”$ÑO`{¼hÞ”Ýë\ ð] å”ãúåBtW;ÔdDèÌÖ!2‰ÛEÓ¨Ô‘$£¿[Ñ\­ÑeA·Ú‘ž#Ú-r|‚pK¶ï6è4E&%ÙÑœýy$Ê?e¢é/_Óù‚Óÿ×ïõ%Ûßa\Ì?På§súw¯ØíRFGc’|ê¹ü?¿Å«!¢_%) ’É”d¤c!JJ¼Ýßãûz÷›û\@Æ$£ŒÐ›A’4tV“¸P³ÝDÝmCþmükp òHèñ]”M"Qi…Ì _-ñ.‹F¸CÑ"ÜÈ>ÖklÏÀ‰(IÎ ², ›püûç„Õš®öÈ4о»F¤ʧcºówÔ‹$øàÈÏž1~œ²ùî Ù“çT§ «¿üÌú͆à=³ø=i²âúÛ5åã1nk)tkÃÑ?~Âú¯ßÂèÙm±6%;*â\èòÓ´Ürõ?¿Ã„•Hlã9ùï¿Ç_¿fñrƒÒjàÆGrIp‘Ž9ùç/IeO}¹Ã9ÛE¿*Gè\áGOƤyÇöņÑçǬ¿ù¯'L>Ÿáë† 2г o,ë?ÿÀöÍ‘¥û t˜jTÄ“™‹ÝÐd‘G¯dáVü©Ã *N82/b´3‚е¸Þ¢Š<Þ Û‡ñ½†ÚzD"ãë÷f0ðh¤V1NrˆÕüÚaÒ‘’`,¾‹R 9D,ÊlC>ðOo·ÅdŒ«ö¦[§uR±$µ’ª*¢é¡·‡´<¡¢\5|W ¾m‘iŠLcüx0†0`ibÐL‰«k¼ Ch‹Ê³AJ2Äl§É 2‰²È‡ê½"vcZQß„TQÃÝ™ÃfUdId 8PWº§7¬S…mºx:»%Ož‘…ÍŠQ{ˆŠˆ)ßňÏÐ9d>„5 ]‚`£1K$1ÊøÎ}¾Gp»d‚e„ÞÚú)¾¢a¢'Õ$E—xƒ­ÛXſٲ:Þ+;à†’Z+àßõQ/Ÿ%QûÕ[Ðj8}{’ɬÅ65ÁÏÀ MEE=n°ƒÎ{p9Gi?$,‰!}l¨¼?DE먵ý޵1ÂØT™:µ¯£ªó>óø×¢ÞîÆ(ß–Ú}x>@㈧ùÿ)Cp+öƒßᡟáÉÄáa,Þߨ¤ïµÜ1éKbw Ά¨‰íZ‚P¤³ Átغãq˜‹¢i0)ZŸ“DßTï2Gè¨ýõÞGt"#½ÀYd’ &¸þ&Céárß‚óHÄŠ©uq~p¡4®íY†ñpìv-jT¡«xiœ³•&ƒÞW ¾ž[9˜ †çUDT£oÂ:3lnÅ-²Ã>Q-J(BoYùµz?öÄ€·¡u>¦¹÷™§1¹®íx°\}DMoz\ÅÀ¢Õ6ÎKEçÞªŒ±èÁq½×õwN{†ØûϦ÷7Fjè’yÿëŸ}X÷¬Bãî¢Ñÿ×ç´ì×Þ}qL<¬,y·'d|.$®ë£|F‚ˆÕh¡‡5½·7^‰2‹kjŒáûuÐÙ¸ÑL“øþÖª¦ïû5"98?ºaõ O<8é¡…ä¢oEÏÆˆà1Ë $ ºŒšÛ˜F(nä;~Ð ïÏtÞßtÿÖ½ÝW¢­C¤ºÌ¢‡È;\ÓÄP­0$~èµäp(rqýðm;øŽb…\æE"Ôw‚~ö!‚à‘iƒ–ºX´Zâš>v½²»i⟆€,ó(³óûѰßpd¬Z«T-Ñt¶:æ’`Ýl§ÑUÌ`p&®ÕXIœ‡d;®‰•oö*£µ}{ƒÃÛ¬œM†±,n­2‰†X×uY¢Ž_&1Û!~Æ€,âPï •`ý3î÷A*b’ŸQ¨_¼CNðÍ%ÍÊPÌNH¦Ùûúª @˜X…ö‚`z2‹\]$nsméñ ±Èš)qü*Ï¢é%„98?˜ݲA¦)ºTõ'eÜí#!ý 01M/‚öm¡…"£¹Ä6žtœƒ·t××´×Ue˜õ5ÍuÇôŸ¾D÷+\zL*W\}¿¥<Íi®г)æjM29F–úõ£¯¿$ìÞpýʴ̰} ZSž>"«JìæŠvÙ‘LFøfÇè«Ï±«×\ýõ#+C~·¡}û–ÕË5ÕgŸÇjØ®4''ˆ<£yù’ë?¾$þ³/Ϩú‰z±E§#tU¢ ÁîÍk‚ÌÑɈì¸ûŒjf¹ú÷¿Ðt’b:£:;‰Xë£aÇ4¸ºEãZ`o¢sÃ-Â̢QÔ‡”tZ ¦&î…~ “Â>iLIdžb®.¨ÏWdgÈçB¿¥¿Zâ…ºÐ2Üw• 4WÌ(Ÿ#¬#?ÎX}ûË—5ÇÿöLžŽXüá¯lÏ7”gOQº£ßÁì÷Ÿà×—¬º@ä9Zêà}•{”á¶ËÈ,t \ùí)Ë?ý‘¶)©ŽçñY•oj\e²‘MG`b`:+R‰DçšÕ÷?²z±ŠP1`Œ´Ñ!E“(›QB>|ùhël| •ÜZ|Ãß@jÝÃÉœ|>¹ÑA îá ï}žCUL ´£[®pÝG*Ð÷*7Þ<þ®kh7  oëcɆ³q³ô¾®4jI'œüó—$¢Ãõ…Yִˆò“SÂîŠõˆêù)ô»¹b·¨ÉÏž&=¦îºBåßÕ¸Ö¢ò1Áï0¤|4¡û&R…ŸÒ_#ÊiêI…·[v/.ÐgO8þÝsš`ýö ™SØzM¿nñRS=Â7WX9¢(íÒ1ÿ§Ï®ƒÐ±ùñQœ0ù|Êö‡ï¸ú~Áøë/ÉTËê—w=´ ³)'ÿò%©Š©«¶1´—[²³I‹¿þH·ëIŠ’t:'-«ÎÉ?%Õ=¶­£q<ÆukÌΡ3Žt4CÈŽnÑ’Îf,Ùñ˜l’£ŠŒÍwßsýý%ªÌ-i­¢,¢LïVê\Ó3þíפɚóA:™¸ÛÏE6Kv×0úêk柱ùáfÓ &'Œ§,ÿüŠêÿÏÛ6I–]gºà³ÅQ®#"u–’ͱî¾6rîßšc6÷²‰! (•:C¹>j‹ù°¶‹ˆŒÌJ€ä”ÁXÅ*Oðã[®õ¾ÏûÕ—h¿âüw?1ùí¯È‚ëï·øÏ;0m&ñâæh¿Óâçðëí¢ãs6¤8ÚçüÒ\PÄÐÊ¥d'ªØ‡œ¼‹úäï7H•C”ï÷Äx76Z}@ý FÙÔa¹Þ¤ïê®2¶º¡_Ç÷8ß§Ïœä%AÚê™­˜~ó)彊öjMÔ9† ‹?½ íÙèÃ3BÝ€ñ´—W¸VR‚åí%Ðkñëú¨Ú{ŒÎÔ˜bˆÚë+¢+)Œñ›Í›kzߣŠÃ{°YKs½ ¾Ü2üò3¬_²øùŠÑWß2~ Yýå%Ñf’MÐ)OÎè.Þ¢†÷¨Æ™œŸ» ¾ 71vï©@*Ñ^¤NÓ‘\^]M{=OÒÄ÷t&ľÃ÷9ùÔÒ^m<½OX_³½X´E¨ž<ÆÚ–ÕOo ¢¶dY†ï²ÉÅ #„†Í‹+ªÏ¿àÞo2ÿÝ¿Sw#N?­xûÿù=Lqï7Ÿá._±|yI»‰<ø?þ÷ú'úò!U±fþ¬eøpD=ÇmZ¢©>}ÄàD±øó3ÌécÜÅ Ì“Ï)¹æêÇšáþU”÷ÎÈ˞ͳWx¯Ùž¯8ùï¿!^¼¢u#Ê¡§¹\cÇ'à7¬_¼FMpÿŸ²ùÓw4E«ˆï;Ȭ¬'»âLê”ÄD óÎpöOß0œYšyKpúž"¡]Q¿¾ÂÎ3ûrÈÅÿý§ gcŠY‰ï{ ‘ùá;úâ“™çõÿûèjp“ û¼òz¼-²R·&ÛÍ‘èVÙAªŽ¨¸×CR ^„fTar• ë7ËcJEúU‹ $K>¼«-SI÷ïÀXíéÁZšïƒTÙ;‡o»Ãd×JªíƒNTèéj‡©"[½œÔFbzÍxHl\+‡¢“*t2Kš2#ö­eh.ez—*@Æ$E.4½ä•&› ‰Û•K«"j©þ¸Ö‰n„«QZª£éöAôáJ%¾dŠOWJ¢¤›>ý÷€wØ‹ƒèðnªåÆb2M¿ÚÐ+ WÜ\c8\ˆvAGßÎ2¹í§êS A4­æ–‰æc"›µ8º}½ë ÜÅ ÞËTuOò2M>®ðÛ }Äå¾ó Xl.—h[XܺkRü¼å%Êf¢oK*uDt&Çä%6“ç$ãÙ£lò ¤‹án14¥=HŒŒÂ×2Žd>Œ[e ¸°×ߪÈj¯ýü(Ýòßòúå+ÿ­Õ³!0†¿©x}¬Ë;üü(ZßÔÆ‡€ýÁ d„lP¡J‡Î2ù¶f V¯ ìÐ:Ñ‚ú€NQß7¹Æq”^B ’áYÎõq¯—$ I'Dy†µ·X3¡ó˜Lã]‡ïBº0!›¶¶bm Þ±Û¶„6’K)좶o}ßÊddƒRäZѯRÅ}X “dÂ÷~À v+ì.ô(F"F"ëUª¹ä™<—ÐF¼-v"J pM+mzsd’’ÞßALŒ˜ªDkO»îQvçwœ”}À $Á4“ˆ^SdømO6Ö+úN"Ñ•÷¸Æ%²Ü-fï>˜ä¦†XéC2gŒé{ÖÏ<Ø+]ï.ãÊTyç?¨dþ¯þ+eýËúõco÷ìTj"K×ÎäZhÚbrƒ[Ö„àDû£0©ƒF7týÁx—’?XæÝ©Âƒ°š÷ÝVB2ñºOJËŠ>1Ľqmf Û†¨"¡O&\£ÁO*¤P -ú›Û·öÎÈÖý™(>¦˜ˆv:“(ëàeßk ? òLC „D…Ò mÁ5=äÅtˆ_¯q­ÇV†~ÕŠ‡hT›-]ÓÓJªäy‰Q‘~ÕˆÄ+3t_„l\ˆá³ ¨è1“!Êwô"Ê…>°eA¨[gô; ñtÛ&ùí¡ñrfŒR%¶•œ£vuçèI×[Êþ[NvXa‹ ·Ùâñ–í‹®ÑuFVeâ ò•ÚQE¬( ©¼+ƒ5Ðm”ÖKõþß,È'“ÿýs–úõ&btFyr†Ùƒ;Y 4Þ×Í%µ œ"?=ÅŒ´,÷î`ƒJü2!¢ôë•eä£ ×8º•$øe£|_aسc¬Ì²AiKqÀæûŸ¸þáSæòT¼GUNûÖ'S€VØaÁê¯?°x¾Ä$l]~ÿ1§ß<‚¾£_.Xý¼`òë/Èóž‹ßý@þè)ÓO§Ìÿb6cöõëŸK™ÿˆiìÚ· ãí–„üÓ_°¼Œœýæ¶ÏÞMAVE6?ž3üæs²êËýrIùä)yÞ²øë”­°Ó Yîé.VPŒ>°þù«·[²BÜó®m(ž~ÆpjÙ>{MðOÁä‹Ô?ÿ@SgL>yB>ɉüzÅöå[‚P%0ýàѿޜÆw[ºÕ†âì>~uEWŠ“ ´&ÑnÎåï€Á Vy‚“@…l ð͆ÐíZ¹ÜŠvÄ`(NO0™ƒââšvÞ’ÍNȧbïn9ã»ZÚDQ…Êšíå5˜¡DŒ¶»@µ[ßE£^ˆ /´KúU ŸUº9Rf-®©éê–ÁgŸ3œVtÛš|<"+ÅÀ©¦_¶˜ª$¸VH-ãï<ÛçoPù”ê®÷#^[²A‰ÖùÉ S|ÛЯW„Æc§GŸ9îH4`Kƒ²‡Ê”J…óÿû;È«ýÏRwîäRGBßã{Íé?~MžGÚeƒk7iÁŽØÙYîiÞ^ð]ñ=šO-—J Q¦§½X€2xב‡¸å–òé2US_nÉNÎ(fCbïñ›9}Ŭdùý ªÏ¾Äø–híÅœÓäUNȧ•t1z¿×ÁVgËï`}Ñar Ít¢=hTCÀõÁ{|¯9û§¯1¾¥Ù8ð;A³bóâ] ^¯]n$DŠ‚òd†Îå²×¯Ô¯T_}ÁäaÁüßþ‚Ë&œþæSº·×äg%Í‹Kôø„ÍO?`NsÿŸŸ²ùñG®¾{“Ú³U͘>9aýÃ÷ôQÚúó1¸uMõÅ×LïkÎÿ¯ï /oDÌ+¥puÏäÛ¯˜~2ÁÕÝþÀß¾=§{tí²cððw}Eñø ÅH£Ê’íóŸ™ÿtM>ÊÁ*z0•hšã!1Sgš~5§ßø”¶èɇT…nL›÷Í…F)oêÔ ¾Ù]Q¶ú@47“ò-ºL|…ãÎ×ߘŸ¿ð޵ÜnK{½$Fs{k>«}ñ¼ÇSpöOŸ°þówl7  ôë†ñ·ßpòù ÞGÂêŠõ‹5öäŒjÛŸ^ÒwÅý3²¢»¾¦¯]*ÂÝ¡ ?.¤ÜF#æt•á×s¼+˜~9eùÇg0:côd ]U4¯^²½Ö”§•È Â’«?=ÇTò*Kºc-$¡^SžœŠ:Bì…òõ^]Üm}ü]šõz}@éRˆÃ–Õ‹+&¿þ–ÉËúåÛ×k|דMN0¥G™ƒ3Ãü?£+I–v­£[·÷ï“Uæ(ßÐ^®Ðåm;¶× £OŸb ø¶¦™Ïé—Žl:eüõ}üò’å—”ÉZæŽ÷¸Hp¾«q[‡[7˜Ñ”êñ,ÍsE>ʉ͂«?ýDÓ<úŸß°ýë_påCF‹CaŒ¦[\KA*xÚ•HAQD¯ÉgS²±¥›_ÓoÜár46T tm`ú«Ï±¡ÇLFl~ø aðHªè/ZN~ó%V÷t‹ðôWWÔë×{1öG‘¹)…õug"Ì'ƒûcº«kºNª,&ÏÑ6¡èüîKôÄð~]£´æÔ~ÁVy! F)¾W©H¿Ø¢«Šlѯ·úø¨ƒs~¿ÈèçTQ‘OrºëÍ¢Ù;‚‰lAu6‚äÞÔÖb C{=§]KÂ> ªŠb:€®Mq™Šâl mC»jÈfŒêi¯kÌxHVä¸ÍJ¡:Ý6½ÜÀC×cgCL ¨¼"¶KšZ3<Ó/×¢1ò=}íÈOGĺ%DƒŠj0ÄØ@·Ø ;ÒŠÛ^© ˆØqŽ[¬hë>™§À;‡Êr²Ü¼èˆÄ`dÄ%ZIŸTÈ"¡—*‰É­hu« ¿ÚŠÆ*™!äÖÔnR*¤±˜ Ik* ð!aqtLÑÚéçÄ÷ØœþìöÂßÃî½q;Ü\‘w‘C,ï.eSð†$e…Nar…ï…ÑŠ¶©’Þ£ók ÞyLQ’KTÍå 36ÈJòI…¯·tËZ*]™¢¿ZãCÀªt~ÚU¯âÛoº”è•ð³M<ÈìÓ&5~[Ó.6Ó] Ȇöòôæ2­ô«­JïºÔEPG|tÅGªŒßyÂHÇI…Ä3UñÇ”àp]Oôê#é û:xÒš“ËXؼZ sKðNƺµGb>@$‰.lXÕ‹/î"aÚ»úQ)ø%Í¥tª·Ü]¤²€ršHÀäVÈ,yŽÕ1iŠ „žMJ Õzºº©P&5ßv 5&ÏÃ; µhWYÃÏJºù‚¾ ¢ÜUìÕ®"eD¼èî£ãUÓãýNÏï’/Iº6³ôM-/r²²Bgrò®Ãm{²Ù”bhiίñ*£:á–[Ì´Ä/·xñuO©N+ºùr@ô‹9y™º–pÇ€ˆÎË÷œ;Ö)©l'¿tfŠÙX"¾•FY%á^«l…ÉÀ·ížþ`GÚJ÷Ï­%òx·AÊè²É”—ºXƤqÛI*d ¢£¶%&S‡ñÿ±V„]ýÖÒ»þÀQœùßbuø{^ÿ7ý%ËÎÝ`q+m91ﶈÊ{#úë…e(ˆ½'›M)'¥ìõ†æºA—ÙØÐ_¯‰J p;¿‰žï4BÜH~—ü§¡36ÃVŠîr‹ÊJ,6ØÉú-íÚc¬ÁŽíØž_ƒÎEÛ«"Z\Ó‚–äe$›AÝ>©;Å.ï^êwÑèJö»œ'*¡èvû –Tëȧò¡¡_×’*BÊzè¼"hºËqGÜð×9t^–$A:/…Ã%4­ÖFªÕm+qÝFc'Cðí¾J¸]ŒIg&-kf1™IçGå•°¡ûšíÅ5Î[†Oñ‹9}¯ÉŠLxíA€1îÒ­{ †Š>æ¤ùÙ˾¢­JÃA~î±ì»8›· jPâ–Kb6$ÏõÕ–l2£Zú¹ Ê{ÆCÓ>=„]/è á–@JŽJ®àv8!›²‘ ‰±mÇìJioä³Óù÷¦ƒè#¦4{÷ê.kŸ‡nÄDؾ}Åõ__£òòÖJ6Œ˜ÞKeV8ÄÇ«àð>cöíg”Ïü»ŸÙÌ{²2]¢`¦ììŒÉ§÷ıKËöÅœüÞ²2²y~N»l|ò„êÞ·éP&œÂ߈!È7[¶—âþè6s¶o®~õ+F3ÏÅïÄaúލù`ÌàÁ åiÁâ¯?²½Œ?ÀŒJŒÖè<âjOl¶¬ž¿ Ú åDÚ$v<·¦[÷èÌê ŒNݲùé~7Haüåcª{‹??ÇùãÏÎй¦{û†n<9£yýŠzá%Io–Óo74ó ýÕ’üéÊ¢gó¶cðè”öòRÚØMs=¨œb2– ¯R)ºÔ½O¥=JpqѺ—YêhÄw\ï·5b*3øÕœv^§[¥ºÉ¸Üëå Ë*×°{»KB‹ReÝrIh‚ðÇW+²ÇOÎW¿ÿ¨³t±È9ùÍçdÖ§Ô<ð­üsØ.éמ¨zºMM>á7úÆ_=ƽ='dClîð­¿Ñ¦ÓÅâtŠÍ®îð½JxëˆÉ ¦°¨,£»:gõó$L`JZ÷*Þ ¾LÿÒ7“úš¸>gþ|‰±rQÒÚÜè¼?¹;/<Ñ{b°ä³q:XqKËyóâCG7_‰Û]¿ïÂô·äq O2îùÕuòéÓ’Å_/˜þæ2µæúÏ?Ó6êÃÀè!qòÍ'XÓá[ÙL”±dƒŒà<.ÅBï‚C|í‰.Òo̰<A”„AùÕœîz 6l…)íåZ⻩Y=;Ç÷ŠêѲa&²í%Wy 6;äì³ýËϨ“Çä¹cõü ùýGèvA+F÷-W¿ÿŠ ³kË&ƒ¡¶Z֭ѨŽ2$ÔKºùF¤PDúÖ1üì ƒiNˆ‘úÍ¥¬A®Ã£È2K»ÞbË [ }:eõýl—›gýNÀu ¾uŸ2<ÉYýõv4ÂmÌ <}D>ÒÒ2ͳCš2ÄzÎÕ›FßÛb@ó›-zö€{ÿð)t5G}Ù`9aµ#i²2´¥©$,ElÔ‹žñŸ–KÌxHØné¶=Õáž³üé]Gññi\O§èÜÑÍW"å1f/«P@ô½p‡g#A ÞÒ«÷Ì…xCo|eÝ]Ž·^ûý¹E˜ùˆ×ʸëwú˜Ïâ¦wÞ ýj«wFô»Ö$1çG¥ö—Ï}"ª „®'»ÿˆ³_?!6ú•à 1þkƒ- ¾„.ìM¬{Cóîç…ÒŽöúJÖÖ£ ˆÊD‹ï7sÚUGqïÃû†æÅKÚàں뷴«Àì×_b³†ë'’ß{ÄôÓ«ïÞP>~@óâg9Ö(|ç¸?÷°']û°¢ÞßÙKÝe…Nfн[ç÷¯U 0Åѹ'&ä–bšÑ¼<ÇLO¡_Ó.[O“5›çøZLÐ1Ód£ƒ³!«Ÿ“?ü„áYÎê§glηŒ¿ø‚,ïYÿøJD.Õ„r"øÇòþ#†r6Ï_ÓušO¨NQÊßôÓ캒…¦}sÉæÕ†ê“ÇÐÎ隌“xJþ’«?üLȇŒVnS£Š«!Ü‘Œ«Ò|q®“$Å °ã&7hkðÛÝJä :O‡ÉÜÙÒ]m<}DVi¶o–ä÷g°¹¢ÙdŒ¿xˆ»zÁÕŸ_¢Ê ”Â$¯‘÷ݾð\O4í®nÀì‚T”š(«S\p¶O .b«QÒ¬8Éj'¹Mãmd•Jq’Pv""?¢¢˜§ö‘­j¯PÂTâfÎòÅ%Êæ¿$kºû†«KÆŸÜÇÒ°~}M×ö~Ädh''ŒŸžAßà¶kšËšâþtê«5Ñ+Šû§Ø,¦ O¿ñä“‚îr :Ch7Kt>¢”ô›íªeðÉSò¼cùã[t^¼K:ËÅtL9-Xýü‚®Ñ£’¢˜ÿ²H7ßBp4«5ÊŽ(F®®ÑÙØâi#Fï„?[Zü¦Æ9'Õ·ÚSÜ?cø`@s~E3wTN°9Ô¯Ï!Qé¯.¨—-&¯¨îOðÛ5}ÓãV[Ìé)E¨/ŠÙBKè[úm‡wtN^Uè<Ýð¢;¤ Þ¾î§nƒTp ´‡q ñ„Ò{¾_uxDÅÝ•ë£IéŒgBâíD$F-á+mïäRæë{ïÕ–?¾›\¸Ñ2úä!™í\Œžîj ¥rB·¦kzòшP×8ɧür‹*آǵ’Ü'f/U~[Osú«Îí6ã@6bº( ›9«çW‚ú›ç­M«Œ¿|J\_±ºØïX›Tu‹Y~Oöo0ØA¹ÙÈw|ðô(¥÷·vb«a¬«yÿü>JÚ3;e85¬_.~þkVÏßÒõ¢Övw>U v:ì@PãO`q íÕ •W³‚~µ¡›×˜ál6€¶¦[Ô(ÉK‘:Q‰2 —Æ·ÈS¤›ÔÓ®z†Ÿ<„fÉör%Õ *'ô˜®³žåOoˆZ(˜~ñ€îõ9ÁThWk)*t5q0f0ÉØ¼ôKm3 GñR-ÕÖCOL‰J’¤è[|spû^¶ÕØÒ-×´‹˜mœ“J‘1²¶Ø “å”g%›g¯éœÆZ QœK² Ðy‰Í ¡é1•аâªÏfS²ÊHh–Nf_Dß;VÏÞàU†VwíèâVÛä]ˆt›-˜Œr<W½WdU‘ ¸-}ëÈGStÒ}G¾kÉf#èk¶ç+!˜×Ù[Uhëp[ Dzçðœpå«òÐeû¥9úKòXuHñÓ&0ùðþÉþw¼ÿ/VžÿžŸ¡¥Óà½NÀ÷Ïg9C|à{~0…vK{ݒ͆ôóf4"ºùFbê÷ê³C‡rwØW:í5ÜêN’a2ƒoWt5TPŽ#õ‹·¸PH—¨“€§Á“‡XÓ±úùz8exo@÷v‰©JÜv…ëSÇ=‚©FäC+‡¾(6h UuÑ7}Ž·$²Vt”RwtÐdS&íi·«ë&\Ää¾­qµ#¿wF–EšË9-™xL6$¯ õÅ5z0&/5Ýz‹ë=Ù`ˆ±Ð¯7xçå>иMƒ6Õ£!Ý傾Õäc#—™¬ Ÿ”I‡hU»Ëaý|E³h÷!^f2eôäõ–ùo¡`8M'ä#k³}>D žàü^N¤´&ø>y¿4ºÈÑ&]¶Û׈(\™‚¬Ê8„wu ݇vK·vF(×Q_ÖØé«ëçoðÁ JVkC½Tá‘N.YŽQ ß4GI„ŠÉ®5"tC6“2úÕB6“jD6]#h³Û ~µÓz²“SŒjé6žâÞ ô²ð)˾"¼;@ë"§½xËæõJ0_wé±~ñÐ ò’¾Œ¿xLX\Ò¬oV%æAUŒö«=Þõ4oW³Š|”³yö‚®Í˜|ñ\»§4íZx~³¥[‹ˆ=«J¢wtë ¦œQœå =¡©q[èæ×˜rˆÁ²å·¸N‹ñg»AÙŠlXâë%¾—¸ÐÐlPùB+ƶ´6i-[•ø­cðô>ù ²øñ5íª'¨®î0Ã)¶Št×]RÞ;AiW P¾#蜬4e¸ëKVÏß ò “È'Ct’mŸÚ&Z]+x—;ûv‚F Ñ…ÕŽlzB6­¤“q»âok Sz½¢_Ô‚Š¿°Èǰ7•‰N7G—…8äS”j¿ÚÈAÚÈ$ÜUä‚CÚsé3Ú7riBWK+]ܤ)ú÷v™ëý‡ÿ;§ýßÄ}¼\.C×äJ©)â;Gõè!Çc©~MìV´‹Žòþ ±Ož‰drJ½Òe¿AkB»¥¹ÚRœž¡”GY%‡œ@:Je?Ô+š‹9‹L)'–úå9vvê^ÅöùkÚeK>›ú5í¢–îL> šËkСë<}€ ®ÏÉOFhýâŠíù“•bZŽ–l2Bg‘~¹&¸˜ÐˆCLeNP¾>BÁE륣C ŸPL$‰•|D9²l_¼!ƒÖº2z4¢ysÙ„ò44gÓŠ?ÅZ1Cw5Í›k¡Ô)Kqv‚¶1)¸´ìý. †s;gõó%ªLFÃøþ´<<×At+‘¬ä“1ÙÀ²yùŠæzC6žŸL0FÑÏ—b í;”͉}&cøðùiEóö’úb"¢''Œ Øþô  GjïÉ GUC!òäÉ$ÿ7˜l? $‡!ƒß,i—[²áDL\Áÿ§½ÿÊŸ‰·Íœ SX|½ÁmÝ¡ }Ç|¾ü»ë{~tBØv(«DŽw†aÉ íåÞ—gCè½g”":ˆ¾£»Z¸ >P¹„zDçaëkêó ¼2ùò VKBd{uE}]'ëÅ”Æj´-°CÍæÅœW(,ãÏ£UOßüf%ábJÉy\%Ü^’}¶Í^nxÜQÛÿ”¶¨¢B)‡ßn!êw‹IÁ£l™ð}áàA‹Ž~µ¥qÛ†êé#†g\ç]ŒãzE{µ$šÇË^1üü h–r鶪äº$„‚òIJy~ª&h«Ä´\pß²yñ=œ0þäT:›«ŸßôÍdQ¥ä<øä ™nXþ|Að;}ÀøÑ˜úùK<¢„ÅÙBѯ¤ë}*‡ÓaBÚ6ô«-*Ý b3Haf‘´«}—1xˆ¾Å­j lq>É¿Áy1ç–l<‘½ fŒŸNØ>»@‡¸ÍR >i=Í&n5§ïi4‡ ´N2e Úä)!¯ßlèV ¦’ % &ôý¡½cÞîÙ†’¼¦è½J±“r¸ÉgrÉGÀyS4¯_²|>ÇŽªw+êC§‡›¥L,³/Ñ¿f»ò‚̼õú<ªœ0ûú)6¶´× Úµè³IAyBýóÏÔuÎɯŸÛ6™;ê×K|Œà;úM‡Îs²aN·\ÓÕ=Åx†hcˆ¾Á×ú­DßvË T9ÂQRYöåÄâVk”`JKì·Ä GÖµ  ˆ-ݲ%8‡® lnè· ù¨¢›· ?}Ìð~ÁâûŸX½ÙPÎÆX£éëSް¥ êúNSžž`tÀ÷žòÁŒXoéjOõà[ÀæçWÔó5d“(†i£Þ›¥Òm:´„>Þ å—†Æ9Ä߃)ª£¸ÙT­tïn »øR!£$Nãñ!ýC±¶Ç‹’g°Ì"Òrɉ^§t­Ž¨D3»ÏD£«ô¾rÇè«Ï=¨¨_Ÿ³}½Ä+ÈÒUi— ÀqbÆô×Oé¯/è¶ùØÐÍçø.$Ó«´; JôŸ'¡¬¤jŠé.Þ²øñBÅïÇ«þÂ\¸ùz‘Aeè½ÜFÝ45½g©ÿç}¯ß1ÁÁ Gd³§Õ„~K·j¸)æüðûs‹;pçë•Ù–“–ðqƒâxøºgðé'L??¡»\àzMVxêó ù½: ¿9FY‡„°ŒÕZÓõ¢AoHÆ@6’sºÅ†~ÓѵRµŒ9ùt„V-ý²cðùc”Û°üé\L˜“1®^Òm¶DÀæÓ¤aÜ…ÁøëǨnE³RØÒ’ͦ(·dþ——è|€BÐfù8ůÖ>¦2é¬ö5]ºÈ(’]§ß7Dl9¢œè×׸XP”ŠÍ«sTUbt-*†O‡Ô//ð¡dødJ6Êé[Úù3’3ºó+\Óãšer²±´P³éˆ|œÑ\Ìq–î×òŠåÏo‰6?HWâQÙ[b×cOï3ûê!ªk‰ÁÓ^®‰&šˆÒت ½¾d{µ&Í(¦ÊCè\¢$™¢À×”)=}Hõ`ÈæÙsÏ®Q ²{9ù|ÊêÏ?ÝŒWïNºÚ–G¼]H~ïñ h¼ãýµFç¿YPÏרr*ÝÊîàªÌëßû;©¿ñ3¤ä¼Íú€›»c>+bš³ì~Á9á£(HqÍmzlU¢²9>ìå—ûâ°è¼·‹òN¥âÄë’ûÿü9Í‹ŸÙ,<*@”Q  F)t>$ŸRUO‰œ#ôé v4Á 2¡nìZõ&£˜ oUü4˜ŽP3¦,éÞ¾àò/PÕ@>ðX—÷TÝbz >çþ¿|IýÃw¬®¶Ðïý Ù@Ä7žÙ?|j¯¸þñ*UOÞ÷=äþûšÜölß®äÁLjïzŠû3ABmÕ‰eýÃK"¥ðF“þC™H¿ÞcN6ɉ]M¿lPÕlXA·•ÿžÄRÊäRµ­Ýåöì1ÕØ3ÿã+1C4 ^Y1¾Ÿ±üþ. )ÆF¢º•·+BŸ¡­ Ýp(‡œɧCŠiïzV?¾¤^lM©ÌºÈeòXÑZù¶N1Õê=-=O¿…|:BQÜ- |JmRY„»»QÛˆÛlñ¥·Êñ=Õ›Ûè²4:Ë“FQ%á ׄï¯v² ICÞ÷‡4GÀoZÆß~Åô“ó߇+fÌ>²ü÷WØé eƒË?ÿÀféȪ’°Þ2øæ+&+êóšòþ¿½bûrƒ®„kºH~"1õ¦,Xÿøó/±ÃêPiˆ ¿ÎlZw¢xkl§Ï8ãÂ>2ã&ìÝ1*~c§îÀØÅ‘Â\À‡Ê2©Ú¼³‚Å#¿Òí÷¿c÷Á×kIô¾¿;¢û}çòÙ;ôð”Óøã$½ËTŠËýsö„Ù§S¹8§ö°ÙÒ\oº¯Bë#ú‹5¸MM¿îÁ&“ê…Œ1™cýò-Ù‰T‡V?þ„:yÈhâ¹úîŠáãr‘¼õûÆäB›úz)ˆ¥ÐŘb6”ù¹ú}~N´'•¬wÂÚýÕ(ãé–+úº§ß¶Lû UåXþ<—Íq8£š)¶/¨rˆÉuªÎwÔ ºÚ3|ð­7lÞ.ÐÕ€<Ó´«5AiŒPé× ”)ðõŠ!“O’ KX]rñ»¶.}§8ùÍ—ŒÎ êËQå'e ËÚe ;š·k0àW5äì@S¿='Ú1Õ¸D Kª3ÁÒ…õóï®ÈNÆD×aòåY•È<•eèÌ lFþ’‹ßýÅ Qt’A9™ëAÖS0*MAuÿ$} TG{½Á fd•ÚK¥nw|î¾+”U¸íŠnãQt1¢˜TbVŒï¹Þ±û ã=»ãùqc-Pw£øîú1áþ\½¦›77?w:GD焤³ïuŒ¾ýšé“1óßý‰Ž!÷þåkâÕ+.~ÿ#Þä§9ûǯ°¾ÁyKž‚KRYVþÙõ´×[©2"Õi·YK!f*¨$Á®^Òœ/¢®8ýÕCú×çt}ÅøëSÂúšÅ×Äùä“µÔ t1!UhÕ²¹\R=|HXžÓ4åbŽ×åˆb\ñ;|+¾eÔÁh½ë¨2%:·û”ÇCb 'tÔ-Ñ謢(…¾¦[¬E^–:¹ÝrËø¾fúpHßôè<'ºžúå[%ÃO û9—xIþà~yÎæ²fðà³_=¥¿zÅÅï~¦üô+¦ ®~ÿWÌp‚ކá§ ë F”Ó UÔÏžqõ—7(«±'8ýbÂõÿú#=¢ã6Y./¥ŽøÝ{º<Ä Á^Y†ò†l2ÂæŠù…±-!~íõSMÈúy¸Œ L ¯0å”Ð]áâ€r¤i.âk›eO8ä›A Yú«s6¯ç¨<[ªÿóÿøíe&Ù¨Æçb“n2TèèWÜ „¶=TgÔ.®º&*›tˆ-¡qèÁ€lX$$R”ÁÔ¾JõÎA8iµÖDßÓ¯¶ØñKÜõŽPˆàùx,­ÔÆ}4è^Ò†à<®nÈ¢Œ2úÅ ï5Ù ÁÝGá¬f&EgºM-íˆÉPBTŽÒL¢‘¸¸¿9EקаN6¹e¹Õš€–¨Ò@º}‚ÉsÁÑ5±ëñN°.&g|Œ]ŸôACLiÀ'MÐŽ„DfûmC¿n¥¥b¦vÕÊ,—Š[ü¡íeÓIª÷^ûBjù¼¯B¸Ó,ûðÎðPuþ—\ÓÅÅÜp™ï5Ç©˜ÞI¥Çfdã*™íÕQð ¨ÜÒ_/EŽRü¦Ee™@Ý[‡ ÐHœ))VØm7ø:M+1Dô×´‚L8ÊÚƒ©6ÄÔ ié×Í!¡Mi²q…[m0Ã!±o„q«Ã"cÕ’äÂÚ¯¶‚`<ò(ÜJò÷>áÙd@l[¡”|,îïû6o\zÿCŸ ö‘ˆàuÆ…J¨¢²$+sbׂ‘Тƒ1ULÓq—²w-[µÇz)<ýrEˆ“ ‹Þw3¨0U&› CdÏ÷Ú?ÜL´¸N’YužµÄ¾%¤P%©Ä“P¡qöѨ£Bı,&ö’þ·') &¤Õ@•9YYà+žb` #Aº­ñRQRSdb O¤èBºä|—´‡™t„B[ã·Žl:djï‡Ò!Ñâ©ËÙ˹ÜÖ‹¦s³¼”JQÓK»>z¼“êsTJŠÈJº§b²ôò¹ó;`JƒßlqÛ6y.*òq¾Kݧ’Ür-‚I…[-é7mŠAw7=Ê&ítHÕÅÌî©S¿äÙSjž¢Û“îYeÙkíÇZ >†d£ÄXïœn*³G‰z÷3T #‹>b‡•PX¼œ«ëéW-v6"¬VøÝšD$jñ™€–®It™Þ8Éê7v6"«òt‰ /)Õ[),ˆnº_nˆ&]~+FxA5tQ’ AÍ*ÑFÑ/øì`@6©Û ÝºÆ F+UK3JQ´nñ>#ùþ`rK©Ç{ï>„H槬)Â{*vü‡4F³›è½£y+XM9i£‰(A3j xék¢)ɧ~³Æ­;ù½Œ’ŸébŠâv(e1UAhkBˆ‚½#‚UÒe òÞ1º½Ô·íž„¢ŽÉHJº:òÄnÝV6»!?!ÍÇýóJñâOhÜyPü;©è½Œ½Û „Äò—9¹CŽ‘Ç$Ò[Ø]~@ÖãÛž±i] ¢þýß,(Æ“‡ÿãרÍË—"¤|úˆ" l^^«)Å ²}sEÔ’>e‹™Ä?þá;Bñ€á‰ÁÕ|0£ ù¨Ü3TóI¡£¹Üb‡Cl¥ŽÐ.é—5Â:u—¯9ÿÝ÷xSa¬Ií´»Áƒ5ùB%Ю:îý¿!\½bù²Æäæýˆ}Ø„¢[n™þËo0Ýçz‹MA-Ñ9ôø>÷}«ÿëߨnKþ?…Z^°¹êÓ¯Ÿ“1ÚÐ]ŸTNy2#´ù´Â–:aiÒƒW_׸ŠÓ±khçÙt€µ‘~³¥>_£«!ýê\\¬DT–1úäS§êgÏØ^¬$\B•T§'˜R‹#º­‰¾ ›–r0v!Âr4¢G·•æê÷au^c«LŠ &“ʳw(;8 Ph¨/è|,U€pë9Æ]|V+Õc#Ä1)ÞÄ4¾“£ÿx¤ýºYŽw›¹£=Jè²”ÃM<ÒϽ·6ß,©__3îýË7X¿¡¹Ø¢‡C²¡$1kûòìŠõó·˜{O¸÷«§toÎñ*§:` MŒ;*YüïßSw#üËgøõ†Ø÷4—I3*2ð~Ÿ–$¨Õã)ÍO?rñïÏ¡.uÌF<ø—O™ÿëüæ7Ä«çÌ_nÞÛ»¸æûÿí[ ½âüßþB]+Œ9F"Ébfì]ìÎR9Šö.ãÞ¿|Fûê«·=&Óxý]ïÏG©(¼ï;7ïûVÕ;̨w+¸â;‡u¼£mCñøSîýÃ'Äz›÷ü¡a5ýª¡¯=J+̰‰Õå¥LÚ$ºë%ÑH‚`»ZÑ®ZÊû©N‡¸ÍBŽ)K‚ßšö@0ˆ3¨ˆ¡&tò»êl i¦Û9ÝÊSž$ŽQOhë#*Žt u®•Ÿ£ùÙ^/÷a6Jk|×âƒGiCèZò{O9ýjÊêO?ÈP¦$—,zFõÙœ}uÆöÍ5ͼê‚2òiŽ[nðNèÅÉP¤µ#Ÿ±6²}öJÆß%\^³¶Òl_¿‚|ˆ.2i¶-6ËP¶¢<¡â–~½"ú\ÃÓ‹ÞÜ5ŽÐÔU1þòòíe”tÝ~µfûzŽL)NJê—/X_¬ÉGã$k”gëû•ú¹@dãù´ØWo`;ouÑtnèW Úy#Ñ™¨¤ã{KÓ¬~)Êû#^¿×‰Ö4W ©àC~2#«4á.]iLr¨[Ý)ºåœæ|ËàóϘ}sFh:ðæåK/7Œ¾zBûì'§Re’Ã{ic;†ùI"?³ßtL¿ýšé'c|ÀhBÛÒ]×û4a‚Bgžn¾!R0þúí›\þ催ªÀõ˜³‡œ|:äòÿþ=½žñà_¾Aw –Ï.i®Z&¿þ’ñ'#®ÿõl—pòOß1çòo9ýïÿó7lÞˆ¹ß”Šöúœ®‰X-ºÞbZÉ:q¤Ç8ü¶CçÄ-¾]e¯ØS5„-ÍeM~r†ÉRZâN™’YÜf!X×]q¯ké½áôŸ¿¡hti¸øÿþžžN¾<£»ºÄµ÷øì`~Ãæâ’l<…ÆcÆŒ©é×NŠ*¢t…2!Ê“™p÷ÇåYÁÕÿþ3ËW[L®oJ,SfÃn5Y’&bQ6ž‘3‘FhChW´Wkááè[OùàEi¤K‘dR÷í}‘R]ƒoº£3E€˜aŠ 1¡ñžùR ýšz¤˜ˆ ;œàV¬Ÿ_ òü`"4U†[ÕHNµGY‹Î ¡sIË(qÃ+ñ¨MƒVЉ >žÀJâE,g1U‰É­ð£sûnëVIÐÉn„Σ¬ÚêF;èÆÆ÷žÍT"´¥r?¶P"¦ÌS ³{çKÑÖÚž¨&ÏäÖR•Åbۋɯ(D{ÙvÅ]äàüá&f4ª(ˆMŠÑRIî{t5÷øõ’À͸ÔÝÂbªmnÓcÊL4èû9˜žãAšÂ="*ÏÉgc”ßÓå9§”Ñmín¼ñ¶¡$×8?®4ù·j–ÙiÚŽoåü¢Æ5þR¦lŒïp¢ÔméƒJm#-ß­Š_w¨RðV:·ø¶—ŠGô‚³Qe¥’ì×býÔn_’8uÁ4V2¶šV\ÄVô©º,ÒtÛ™osL‘¥ñ æ˜*-¶ÊñÛUÐtxïïð*T.úüØ‹þînÖ?ø+ô‹î6öN·ÿEí’ç•ç_ª³Å¿áﮫÅTQ4¹½S‡¯´Â7=Á‘U”Z!Ý+¥RÛZÆH¨[BH%J£|Üwy¸aŒ¼©Ç¿¹Q-ƒZ¿»©Üµ¨CEìUç»×G óÑ{„b$Ô­ìg©û%D¢(Éd´ôM‡Ê,º°øm·/>dÓ*ˆ|ÍŒG‚ Ûl!³ï0¤‹Œß6bÒKZרut«dÞIQС­ QpSÑ;°Â7—Ê–:ìGZ£ ‘.Å΂O…ÿt‰Èrßv’ÂXÈÿú>±ÜcªpZ©’:Xg¹ ²['?RÛŸ‚ªRµ–.¢;H(þ³ý7¾w%fÔÛ ‚ïûÕU”îFŒï†^í>GvÔÑìS¨1ò]sHÇüØùe è2Kè4º^‚†¤úƒ2錒èJºÊ‰} 8‘˜©(•S“e¸Õ†˜eØ,K ^Pzƒz¿ƒ]K·67øÖ¡xh¢•uZ© ÕØ]@ÑMI—Å(‹±úÀ>y¨Î#QËŸSÇ’š UyçÒ™*,¡iD¯¬4¾i¤[œØåÊH†ßÖ`¬d$ODè¦,„îáÝ>œh'_Ú×L™£µÂ5ráÝ¥AÆø~áü¡¿u âÖ£ÚEf©ÝùQ%^ü®h²[÷>4voñ®BË/Í£Ûë¥âÔÀ£õ7½û.Ê{<¹ÿß¿%ÌÏ™?{ƒ2Ãû÷¨žžÐ½yÁv™QŽaóüœüþCŠ‘¢y»¢zú˜êL3ÿýϸ8$ô¸ÇT#”I"÷à‰ª¤8¢‚Ç rL±ç±¡´Bͳî¹ÿ?~ƒq-íÕ5‹^âH G; §¶ïT©ö’-À§– L^H2×­"¾SÖ„Ð㺓Ø[m³â~Ð :Kðc¾îý÷þáë¿þÀòç-ï>%·+®þü–Ù?ÿ–Ên8ÿßß³]Éfòí7Œî—ôM¤˜Èá9îZ©½§_¯i¯×)9K,J“ KÜjÏ'œ~óˆæÍmaõó3‚Qž`K$f»77Ùè“7J®øaŽÎŘc`õýÏl¯6²¡%v·„4xœëжL5ùt–Üý7õäq·àÄN4ñHŠqã¦ïÐ5ˆ]Ñy ´Û›QáïèŸw±ðNŒ«C{ëG!ñø"€BÛH;Ÿã›Lï:bïp¾—çç=nÛ3ùÕל|uF_·Ô/Þâ]ŽR }c˜~9cõ§ï©·|2Âî0ÉT\ 8;#Ÿ‰ÛíõœfÓ`‡3g33,å3¸]+Kï5b;§v{UcÇCò‰fþÇïY]´ØÜð‘m‡9yÀýß~Z¿áíï~ÀQ°ë +­Þ„Ý}Ïq—Üõñh#Þuû$;“Ý5×þó4ÐJi‰† áHº?²oýw¼^AhZÌô>g¿ýÝÕé¬wø´Ñ Ñ769úE'Ÿ_ãœÅVCL¥ñí–ÐtÖJ—è,â·9œÜÐÞý=”‘ˆgI>l%¨!ª›×TÙÓù@Ža‡-ÔBôIqêò\ÕÞ|0ßcpPL˜}ý9ªžÓ^_Ó¬<ÕÃGä¥ÂTvœ³üÃwôfÊÉç#®þõ;¼RÝ¿Ñ Íå(˜ýæSÚ‹ç\~wÉðɆ§€&f"5»£s`òW7t«ÝDznuÅæòŠlòá½A2aé¯éjÅéo…r—\üÛϨ²B‡5xÃO>eò(çúO¥ SF÷JºÅœæíœìáS#˜ÿõgŠ{O$!-úUÃðË36?üH½)?™QœÍ‹Wœÿî'ÔpŒµŽ JP}ùdFvÜ©;R¹ÕrÖVѯ–l_]3üõ7Œ¦‘Ëÿõ#ztJyr+¨e¿”~ Hå®XT´&vAœ)û‹ó3/ȉ¡½¸"Fs£’§Rá÷YÇ¡pôïœ#ߟ„¤Òà¶âOß+pÝÁ<¸ÿ\©bÙÏWÔWKP ·õØñ˜Ø¯ð®`ò«§P_°~Ù3ýjÂúÇ+L•³zqÎðËO1Í’®UØáˆöüúô ³§×ÿë;z5dðp‚_\ƒª0e‰ä MYÿüóŸ× <$Ÿ¦À¹È¾“¥hi.VØñéAÿÞïM£èؾ}KÔ:hò{§à–´‹­#®ïÀXª³‡Œ>™áæk‚w¬zÃà‹ÏœåÌÿüͪÃf)ÌPaKÕ¢‡9±ÝÐ,¶„¨É2‰J·¥Ae™t—Szi¨ç\þ^ö•¯Õé |O³©1y J’šã¢RàÓ画ÆN¦äãœèÂôáöþh.æèbJ>ËñÍšÐø$NE¨Þ ÙÚñ¸1úfœúí³ênﻎu)?#"èz{DïH4ŽÑ·¾Ä_ž§(om'Ù°$ºß% ˜ ˜Ñ‚Ãmšt›1)¡ÚK5¢”Í×µ.=DO mŒÜÎR×0º š8k0–ï¢Uµݫۮq]$Olb·®ñ!Þ2Ô$JÂ+UáW¬ÔGÕg®p 1üÑ@b°‘Cͨĭ7¸ÃŒD@ïÖÙlŒQžv¹Á{¹MÙñí!*²Q!ˆ¿Ð{\Ý¥d±Ô¦qRRš¤ÓµØ2Çoê4nã^á@èõì“ëTÜ9"¾äÑuE"n-ibè[·àäŒÝÂ($ŽSRyt 95ÄuÓï°[ ⡳Ó%¾÷ɦ_@GÜa»©u'q¹•2"eˆ!UA?ì7Þ'´:lh7ö3 Q*ªbSdã6·¸íßI{ŠØ'-³¦_ÖD#Rº`ºpJ‡=OX.ySUè€?*1ÙîóÜœ÷*U"ܶC ŒUt+ù=´9Òþ;Ê òÉ:Úù‡!¬ÜQIßóûk!» }¼qù”çäohÒþ–Æßª€Vj·ü_X»£+¥òœlT&¹Íí"þ{XÖ),ÄלmuªH+-Ýž#öè"£³]E'Uß·J)“¬$1É7~!´\›¤OÜ(é@…ãƒD`>€Vu £-µ  e ÒÃ:xºÅ =ž,íÅBª|{Ì¥<ˆlRâë-í²Ã¹Èò2K6”gzlHRJä!ÑÕëp½ÿÑÞ,¬ÑBp„V‰…ž¾ŽäcK¿ê% ô„ ¤adï]M,ä…‘µ%¤‹„ÂÙK Ÿ ñ$[š\:Ã7¥gš{\/zÛ_€è½64`2‹Äu‡ýX‘Œý²‘Œ†È&tôôu³—n)“íIH %óågX›Þ?Ù”%vƒ—P¨è<ýº>\’R“”~ú¡±¹'\%” 6&ͱvY×dŒÅc“JZ/Õq죡XÅßHuº±p+-©ƒ¾¿Ã{°ë2ì#Û“„C3ÉÆ'ŒMÙüü‚88¡e’FØÕÄQÜ?#Ó+®þô†òÉ'ä¥%+=›ç—ØÓû¸ù9>0y'.×Ég÷>½eÍúÅ5vz¼’¡©rÖ?þÌâÙ\^)Å0t}BÑèýDÙ™cŒÖw,HïÞ|ï$ÒÖóÐý6†G"Eå¶ôîÏ8:4DáXªô»„àp]ºe‚ÃL0{:dñ‡¿Ò;³×/)¾qL~õ%&®¸úÓkAé¤ #嘳ß|‰êÄ%¼y»fò_¯_ц1Õ0²úñµpÝgpo„ê—\ÿég\,1²³¡Yƒ®°¥'º•yüf‹Ê‡³nµ™IŒè*£8°ýù9óŸ¯÷ƶýÁRéT¡ô¯Ég3²‘¦›/è-ÙdŠè,£˜d4oûª„Ò_7(;@ç:Åo ͧÄÝs:é>B•¸hÁš²B æÙ¾yC´cg£[zW-½qhWè\ãVKÚÐbÌ2.¼kñ”œþúsÊ¢Ûô(«iß¾†êY¾åòߟ¡²] )gS´¬ªðõš¾­qË• }uկؼ’êqìkB³3 8™Š6[+bïÑ…•’ÝDÈgpG!-dãëbñr… žâñSN¿}D¬·ø¶§¯½ð1­èèl•³üþG–¯Ö"IØÌ·dåÀczN}ºßæLx~¾ÛíS¿øz¥Á÷„oVÅ?¶µ­Ôß(-Jè¾ÇNΘ}ýÕ7{^÷¾zq¬íßWÂß›kÒÁ/¢t¦éæ×ÂÞᘼ—°€“ ʈíÕ5!ꃹì¨bû×ñhÄxh÷ÞªXÇ1åˆè7ôëHq6Ùnä=åÏèLÓ¯—Ô¯çT_~Å`ذxÞ0ûæŒíÏ— >},èG'¾é$„¥oˆ]ÀŽg˜<о=§ë ÅýŒd,¿û¶µ(ÈOO1¶´çl(x.w¤ÍN;;Èd­H䋾øí’özʆ¢ã 5Ý|A»t ¿zJæºZcÆùhˆ-4®vØÜP¿yÍæ|Nˆ…&V(f4eøô·8gþÇ—d÷3ýæ>n¾ÅäžÕÏéû ßlÉN¦hßS¯¶c}þ%å°ãò÷?¢ËÑÑ4‚Wd³)¶Ô797Ö$%8´ëÞË!ZR×ÞtJÓ¶’ÎÕ±úØD{‡úÝ5ï=¯×šÐ®%÷6=ç—æç-`ÄÇÎç]‡ø†þ­ùc€lĽßaütBðý†ëæTOž’•†¬´ØAdþ§ŸX×äà ›ÉX½‰Þ÷(3¤< Mº¾G‹~¨Æ*´ t‹¡Wtë £o¿d0ù_Ð÷Žbö€ÁÃÆD´mYÿ|ETCÊûC²eýÓ+º#ÉNF³ŠöåK–/W”ïA³$úŒü웩$ûM'^ˆl˜»%×ß½À“¥†ö²3ÖÍþ–x׺}¸ø°Ã Ù$]œß·?[ðÍ6uÑ${©¸°;h ºÈÐÝ¡òºíѹwé]¿T6Êx¶—d£ æ6 ^‰Ñ­·´‹5ÊÚƒÚV% O·i±1{HEÏœ˜¢4=Ûó5Ùh!’MJÜjKÄH{Ǻu‡Ê4&+±e­Ýõš€%ŸTh«PFâs»M»×ã|XŸ¢ßÏuŽ·4Z!\¿¯ú(­oa×ÞÝ_]ׂΰ™Ù·_$Íæö-(ÑÒÅpÐúø€)GÍÛk¢67.i¡÷Tî£cÍæíZ°dÁ ß50x0ÁÏ%I)´ŽüÁŒ°Yз†¼²ôë-!*òéXª×]Csµ"j‹ŽSZ|WBF6CHL¬[e±]§ÒB1ƒ‚lTÐ^]±½Þ µ=zNQªä …ÉȪ“ɳòm@g¹$¿åÒIè²kkPÊK;8ÚƒšdÇï¼ë%BnÄ-¾OÕÑ;8Ó1"¢•~+¦‘bX¦ñÞ£”J“ï:|„ åâ}+0øç ƒ‡§dY¤_¶˜QElk¢­ÐaÃêå5*+RE-G©]GBÒ6}+á-ù½!¸ŽnÑcr“>B#îRS‡Æ&º¸Ðó^k ±§½ÚbF#L&)íÅͲ…ȦÂŽïèVížp ú5Mýö’fÑÞHm2™ùÈCeª’*³_ÌBH:íÄ-WÚ|Üüü;PûH×ÿË(wºCßB6`ð`†òýM¦Ôuõx1VjçïéS›ôx#‘UùÐGŸ;¤êÊ.USݨD/¬m™'ñ}}–´dfd.IO¸õG”ÐAœP_²{÷ÈtÃæªcø`L¿h(NǸł® +ZÊÁ B¼¤Oײáˆbb¨ß^Ðu 1"¥ËÁé;oÍÏ ›J°ÐŽhá·µ$¼ia+vë“'¸ž¾ÏIVˆŽdF#Œ ¸&PLt4[I"ÔJ¤m;¼–P±£y»ãû$Ç-kteh/—„(²!;¡BO»ÙbòŠÁƒûhÕ°}=ntG'X%þ!sG3±Ëe®8\Û‰ñs7ƽz–6òyu&fcÄ#áÃþŸ]oÇG‹ÂášžŽ ÿÏç(ë›Ò¿HÁ” Œi^_`N¦°Ù³R¤?IךFP°Öîۮݶ§z|JXÍéE1 LG·î@åØ,⣥œåÔo¯ 1¼? »¾¦ÝDT ØÉˆòl,ç‚Å%Û‹–l2 ˜N°Y`ûVÐ&ù^âQ2`ðc4>t(]qWµ¼…T§ç…=¹,8éxù¦£xpFQi¶¯/éZÍq›O+Tl¥ ²i!H¿ù†€ÂƒÈ+C󿂾WØA¹ÁîH~¦3u¨XïÖ®]åï8ìå†á €(’i bÙ±Áo왦½ºÄ÷›ºÕRx®¿zLûú íåœfÛ ôˆ“_?¢yýœÍ¥§ºw‚¢Cå#ª3ÂòœÅOoPYA…Aëœ|6Á”à¶B—L”NÖH[Bw½¥¸† îà5Iz}y~‚¡ó›%ÝõZbïÉÐ¥¥»Þ0ùú asÅâçÃOQLs6/ßû¡£m zü„Ñ©aùý8?döõ#Ú‹W,_­0y†V†¨ÓÅÂbV0ýò)asM·ê±Ã!nuk"ã¯?Gõ×’W—˜ÌŠI8ufv÷3 ;ûš"ú†n¾Ú‡qí=8¾#jƒÑißÚɽ“OƠ½äNùð{Ð7.·Æšµ>w±Èß5?ÿöù,•ã_’}J¡Íúbœ…qôßJ.ç‚ýsŽ‰Û®·TŸ2ýòŒØõtW ºë¥H*UIõhLýì T3†OFøå‚¾3¸ÕÞ ?º‡o[LU¢º «Ÿ^Ћ-C¼—J¬1„®';½ÏàT3ÿî*¡cwŠl2>Œ‰Ý÷¦wßÃ6Ø òéX‚=V‚‹ ¦ÐÐÕŽEô†âİ}v å [ê‹s”©«3†PœèÞ>c}vþb¹%´[¢3äg'˜\ U&×éC’/ÆnËúç·xî’ŸÄ„Â4ïòÃï> «!v˜ï ¸ï’"¾©‰^ÝŽïFÃÇ ’ár 8¥‰®&ì4з©_¼'N}_át KìPâÏCT·æ™ÈºBÝÒmj”1»4SV›“ ,õÅ9dCŠQ)V“al&¦•Ö§[¶&›)&ëŸ^³·à;Ê'O( Ïâû7D#­5ÖHÚT*FŠSúù«×+Ù+íåî˜Ìm²¤Žïˆfõ )xƒ!&?˜§|·ÅmPõ›_\$t0þê1q{Íæ¼IZÎ*áYÇäL¥§ßÔ°P·¾„èvrÆàİøË3‚ÉÞ+>TÑyÌø„éç÷¡ïD[Ô÷t‹ ›‹kTV28â¶+šuC6(±y Qa†Ša`ñÝÏtÞbL$FK1“C²’j6À-r?à |ˆ¸.øÝÌx„- 9¿&F‹ÉŠžë¿¼eòë/ —o¨7qßÊÙéö}½…rÈ䋇P×´×K\çˆÞh#:_!øõ‰7{óC4h›£LÀÕ_n+15…„à“ q F/†C›ÝÐm+­p͆Ð[òÉ i¥Â!ô"ŸÇ(eŸªèJkI:ó>í~ÆOÆôçs‚) Ýš¾“,I{P<£Ú›«–Ñ'gôçWxJ†Gl_½Â¹›iÌhDyVâ– ýº‘n@äRïZ’þ–bmÍ`@ž.­ôÎuFq2”JwºŒHUNnÄ~³Á;C1«è.¯ñ½#1||Š_,h·|Z‘UVôõeE\ÏYüô²ü# xìåF¾íˆzÀÙ?<¥yñŒ¶µXs ÀçÎùywQ쎖ï.Êvÿ#ÝQëðï4þâë%13ô=¾D'›áä“3軣`Œã¶øÑÜ6RëÌÔþ@l¬Œí¦• ú-~LÕ0ufÂŽ‘®Þƒú;ZS¢ž«½ŒqìßH ³ºÕç4Ê;ú¦£|ôáé€ö;ô]K¤dúù=ÚË7l®ÕtŠ­¢t&ÇC”[±øñ3‚èA›œlPb2E]*:ˆ4Ig „ “çï~þÁÌḻ.Q)¹cí²aôÙ#hæ,Ÿ¯)?¤@}¹L$ ]g¨Þ§ÃúùKœ«8ùö Í›¬ÎŠÉœ“î£Í1*Ș|ù”0¿ ïbBûÕøÆS>~€ [Ö/ç"ÙK­o½?@GZ8ÓÅ­xá(ÒÂ[Áôa>E¢$Ò6}CN‘Œ©*#H*ÞÎß#kÙGp :‘aºZ »nÊ®…ÿQóóoÏ·ÔÍÞUÅÌOcãÏSŽ,®íÒ^¢ÒaFÛ†vÞ‚Q™|RÁ|×㺞òÞ=†'øõ†öz™¢ ¾ ØAŽÛJ—A›^ÎÕ€~}Iת٠|#i¦ÎÑ®–ø öšçH”Ô`-…/;=¥š*ß¿@åÃ„ÕØ¢MüQWMYKè¶é{@¾çá­{ºm ,3Zôñ}MÉ2÷†r–Ó]nÀ–h#¿—2¡k‰6§ ɦ#b}ÅêuCy6&¶eEêƒÝë™íxH6ÌÄ.m0EÍ’ù¯ß)*ÊG]É´nC8 3o.;Ør 2Å÷âS1¸ƒÔå®6Æ-ýmDËzgv÷®Vò9´æN„ê‡ö¶@åIãŸ"Õoa]•‘ên}ë­tNõpDûæŠìþcüü-Ž’Ñ‰|\¿¸ÀLÎ=9Eù†vÕcÛço(?"£¡Û*Ì(—Övf͆í«+t5&›ŽÑø¤ûÜygrL¦ÀX‰…|y 6?ÒõqÃDˆÖG:Ë»Zû;@Lá#êf%#´µ"oÓ‚ÃÑ£º`IºàÃÑ T¿Ù$“Þ»«¾÷-!²¢82ù µÿ< 1GŠªŒ tÆðñ=¬‰` !Uˆ5äÚŽlzBVzÖ/Þ¢«SFN“tÝzMŒ¶ˆÔo®éë]Ud…Á×;â×5ÅÙYÛ×çôµÇV¡ói³„à0ƒÆ‡¬Ÿ‰Ðd7+ʲÁ3È“ÁSnqõÛ+‚ȱà Yi†O¿Ëò¾±Q(|] v'·ûCCtTnu.•çèo8xwß³6Òsëý¦–øÓÝD ;JÌ®’°’Ðùt(I"Êæ§gåqÍ–n]Z‡Œ±9t—sb9bp: ½X¡ŠŒØ:tipÛŽêẋWPN°¶ÇùCK}µ%?ë-èŒl6M’6ˆ„±:®‚ãA¢0:­&¤èZ¥$þmñ›íåR6fc0ô›;£\ƒN±ƒL^–Wl߬°ƒò=•ƒ÷èô‚GCFOî£ÃšÅ¯”h#—­ŽÓÿQáQZ½ñh¾¨_¬pÝQýè×'9rç(Ügp6éVpRK3ùî ôñRûèݽ _9ºë9®Õ§'ØJ‹QæÝç»ÏK[M·XƒEiOhûàƒíÒðóš•NÅfÖŒ œ'øk¶—kìh” ¿ŽP·"ÓÉ nÓR><#Ô ¶ç;9¡zp†îW¬_žƒ0z2¢9¿$¨B'á4(TQŠ´k»E#ŠÓ1쨷«¥Öà× ¹ìð;3tVb²@¿ª±£Å4#•S„fI_kO¡[²}»%›Mè/Wfl_¾$ð˜Œ-«W+òÉ;.‰ÍF¤.…x$|§ˆhìXbÀíhByVÑ_Ï…õˆE»›ºqÇôûpŒwŸ¿˜2Õmëaj-©wö·1“ZúJг˜ÁSÚw$q¬@E¨·¸m‡²Y’N&\Yðraù˜ùù·Îç[K¾>–d}ˆëž.‘¾ïñÈË“R‚È”’CmÔÐoiç+éÞr0ñ¢4¡í°³1åéH(G£_¯^É3,,¸–ú|Nqÿ>¸›×+ŠÓûØ"Ð-–’ y6’õYYŒ…úüœví‰Þ3xü£Ö/bzu»øè°ïJ誔pËv-!>‡ï£ïYí÷²è}:ÃhBS£SFŸœvë}ê‚….R<.†aå ¦n¢p¥þ哱÷=þî}Ûø ë]ŒÑm‚0È?Ô³Tïï|Äx<o½^)¢Û£Ž$vÄé?>¥ùù9ÁŽéççÄlÌé?|FX½åâ÷?c<åôWOÑõ*ÝÂëgçŒ~ó%Y·b;×”†d“JX‹‹K–?¼Á gdÂÐöd³!6× Ÿt“ÆÒ_½eñÓ9dÅ»è´Àh›aŒ9BnqC;ƒ% ÑÙîÖ{ä4׆Ðmè–uJ0R7ÛÄ}GTf0T›·„è7ݯVø£8k© HŠPÔ¨x°;ÛJÚK!É B'zm] ™|ù˜"´ó×y1ž…Ûlè]dòåWeËÕ~ÀÎ3ýô”~¹¤¯¡z8Á]͉ƒ!Ö¶,þôŠ®íÐEE>È u$›–øºÆ”còiN{qIW‹^è70„3E>¹Çäñ€ë?ü™¦÷ÿAsï1eA9=ÃV’¸eK‹[ÎÙ¼•*wt‘òìÅ('ôN6›=0?Üš)j{µA™ùÐ&7»&úFtâ¦DG&¿£AMßs³¤YÕè¬L‹@ †|<„¢·YÓo½´ÆƒÇu-¡ï!2z|Ý÷`Íâ’ví(OÏ(G†úÍ%jzñ}ËâOä÷F„º“V[בŸžP?Ž}ô„ªtÔW¥Ú­¢:­ÄD¨ Äs°s³‹™ÌΦÓœÐ9 X4’™4jÅÉ[iÚù†~ÕKèt€ßÔ4׸M‹ë$eΘH³lQ¤{°TtØé„X_qýçW¨¢ލ•ö£P"ïÓKDïÑÕ„éWOÉÔ–ë?ýHÛ´Š˜,µÃïZí~±åûîÚïªI×ø—‚TÄé.&ºlßè—5ƒO?aúÉ,œáýÜŒf¾Áp–Ž\hD¨‘‹7Jt¦õ–è ¦Èî®SÅ-]à.9ôÑ"ÉX›ºh7 ‹·žçíCÉ‘IrL®éÖK|'ò§ÐvdÓ¸íV3|xBh;!lkt>"ºå;£h©/–8çÉÇ'Œ>}„Uk®~ÿWB~Ÿ{¿}Èö§—;Äèß%éT1@›×th[b*I«‹½Rµµû ‚2Z w’¯SpI†Î ”êðGÛ’òáTLºDus¶—žÑWa{ÉúÅ;Ð^,ÈÏf4oÞ2øæKL{ÅÕsªÙÙ¤$º-¡S(å ]‹«{©ôŒp›%*Ÿ0ýönñ–뿼Ey:@kŒMæÚÛïîmJi¼k‰Zc½¹¿Ý1w‚‹dÃ1v`Þ ´ânŒ˜Ó¤K×oo%ô†ˆ÷½tßÛÁùÌ盯WJ nö’òóY mbôŧŒQ¶BvÑE®Ám›]„¨Ä„Hè=Ý|EõùgÙ½XÑž¯qÍš3éXEhk¶ç F_}FؼeþÓŠÁÙ=ì áASOPnËöÍšâtÌúÙÏl®;T„Ùo¿%Ók®þü–l88ºÔìd¥†l4Äd*áx-¾YÓ­“4Ë‹oGç7±-7ž“Öøí{ò³üœ¸8góòš˜¨<õbK6™ežnÕÒoZÌtF5&sKž.…­ªý7] › Éǹ¤fýå®ÿú= ½sèÜ&¾ºI>šˆNÆò½®0­/Ùh€NÝ’ÛûóûǪ€B×JqÒèw±«Ü!ɸ5`µ­¡Üö;QwJ åî ´z·~HeŽû‹ë^Âa aÛЮ¶» ôo¨lRž–4—s¢'g6,éçWÔóSì¯^Äí:§œM ú¤»ÜB^V—S Öèj-·M›£rEhz²émeSÖàëVX„£‚°­E dîÖCßL ûÀÅbG¶xg–Ä­öøº{'ÉNç9*3Çî–{ãËŠéf³‹ƒÞmv>`ÇclÝÕZ„æ¿dÎRrpSyIy:†¾¦¹Zc¦cÙC®Õ*1êÚb×Ð\͉XlY¡´ÄŽÅ´µ¥8™š !ä”§C9@÷e5Ñ9ºë-ÙtDwuN¨Nt×sšë ÙlF>,FËu:ÁXˆ'Eô[(M¿¼¢¹\a†#¡|,WSUè\Ó/—¸Æc‡¿mQyž6 ðN0ö½èªŒ>b>bp„Nâ‹ß³CõcÒ@‡=“Y±3fG†³£Ðå€òl ݆ú|…=™ÖK"9ZG|×KTp‘Éâ #M7ßbgTp¨ÜÒ¼¾ÀŽgä“ßz‘j´¾î!Ë…§Ù·‰-ž´q™0³ÝzETùt í†~•\ò{¢œN‹r ñÑZˆ1¢‹mÁÕ½¤‰•ŠæÍ}'.þl4ÆŽ2Ѩ¦tÂØ5´‹†ütŠ›_ãœz?(FT–“2:G™]4ëbN%ƒÊß±k#ÇC¢Õº¶9Ft–SœLÐt4—K¼—¢|6Á´$©;ï qÒ»äAäÐçvPíåhJÐIç ²{„Fá›·m±ƒt ´"4Û®“õ˜EY Çê—ìhŒ­¬˜» íª%?IóbCÔÉÛˆJ‘Þ=v<¦˜Tøí†&UÉóÉ[xšË•$x‡**Ñ'¢äÛÇ$£Kú^“‘MÆh$ö¼G²‚CÒ™2©•u1¤ð––è%t+öbèΆS¹T¶ ®[@¿X¡C¢wÒKpßKˆ•Ê4¾nˆ}@vRœˆ†X2žÂfE¿Þ‚ÍRU¡lN6*è¯çèÁ˜r&¼ïvÑ ïÞæ”÷Ï ÝÐ\^bFq2!«r9¨¢Ñ™tBp›šÐ§ƒn̦`Ä„i K·XÒ,· [¨ß£''¥£ÚV迦«[ìp@9™’M´Iß¹xËÅ_®9û|ËúOÿζ6ý}ÇFÚ=}À½_Ýcþ¿þ.G,ê£C¶µ þÆŠ•J†NéÝÙÎû?âõÑ;ôð„³üŠÜÏyó¯ßѶšØöLý5“G#™{6™c¼—*D2¨à…‡ž*3¸MM·’.}À9tá㸧70âžTxˆþ‡…Úuô›5¦˜`‡™š5ýªÞ"ô‘¹ðÝðnâƒG©— #¦Ðl^¾F N Ñ£!ª_P_:†ONi_¿fýzVØ\Óo=ÙxBhæD3büÕ#¬ò,þôõF_~Á`ì˜ÿá'9M6’ ÄúšÐúž2ŠA.QÈgiœºõè"é¥emׯ³½8'Äk Þµ¸Ö1úü+ÆO*¶?œã•Ag7o0£ÊvøfK¿êé7 ÙÙ=§#|³N v9Ùx.Pœpë-ý6P=™Òž¿äúÇ9¶´·„Í;ÔçßS|ªB8‘îê- Ô-Ã{ôZ*ÕH×ÈM”ÚñyA©d¨_ÉX5úË¡w(¡H^Ò eüG;JwT ]GØóðÒú’ÐÔ±žˆk³øšÉÃ!íbK¿uè² ltË-:ÏÓ)CçÙH±úþ9T'ÜûÇOh/^±z¾Ææ‘>fŒž>Fm®X<{‰WîÿóWh¿¥YödãŠ|Rˆ·d¹eýò }í0¹AÛ‚l4¦˜èBc%ËïàúûKLa%`Eû¸RÚòÙ[ˆŒ¦_/èWNº,®#;yÈäiÉõ¿ý…hÒÛ=§ÐKñfÓ0øæ[f –ß½ízCPrÍË1Ó/Ûš>(ÂvÅö|-ra;¦  ‰½hÉ‹“!¶J] #똯¡|8%,Þpþ»ïñÅ=þ·§Ìÿí;¿þyX2ÿé×u’rc@Aq2Nt îFÆñ®qú¦Q/ºZЙûBÊMä-wV·åúßô7n ²ñPºWQ|SïíÐ-n³¥¯{t^‘O†)×A^§‹‚þü «ç¨bå ’V'FŸB²ûoVMµ×áÇ”¥ Ë´h”Cj{ư[ôRHCÚp¢w’fw6Eùžn±ÅŒ‡dƒ\è ;Xd|¾îöîl3(Á;iéÝu+IlB¼Ä…ÞLú¹_Qïê wøœp‡[ó8®2Æ»rpÁHˆF<Šž<,>Gº¬nj¢õN-œiŒ"ú€© tfˆýñæ“»T£òLÚžNtk1lUaJK¿Ýº®C•¥D@oêTñŽøÎ‘M‡ÁI;ÉT%~[ãÛ•bçP:ÃT¿Þà]CBÓAQ`ˌйÄ\Ž õ—BJ\Ûù À×"?ÑFnлp‚½$ÈŸÙñwáèú‰žÆ€> wb醻{ϸ¯PÝL_Œ‡ Û>•ÐEŽT„¾Å÷S|ÓºˆærQÔe¡í ½ßw8ì`@ìêýâ­ 1ÀöóÈ€r-ß•VR-B¥ïËÝÄ1*R°KÜ›2Ôþy¦JafÁ¥v”–”3aJ·2ö•g…Kß³|§±÷(«]oœüûa™$^ ™!9ÞÛ^´ªw@B„,ÃV9Ñ÷øºOfÆWzß+¥ø¾ú/-%ršs¦H” ß­2ßÔ©CÚ˜Q)áN›šh²}¬íμz—¸Æao¹áÍØa{>„Ùé{õ)H‹rç—Ø­ÁûÃOHá¨_ ”¤÷¶f‘–nCçÙí›6IêäýM%k².%´Ä·ÌQ6#¶í¡º¥ Æ*\ݤ ®&c<\î”1Ò¹S²¾áýþ!•hûÁZÕ>¹L‰‘g‡ºÃù}E:å7í?ƒRâ‹Ñ™Æ­×¯JlnÎ¥g—ªfÚb‡%±“äW‰`S•ÄVÚÂïÒîX_>F"|ãÕÍy7/ñ‘÷ìUw:üö©qwE+î+!í·þöÛ¿ï3sK.d L.;3ì.dçP÷’âHÓâ6-x‡ŽD6¸Ú£(!evX¢ULþ"9dâƒlƒ), Ñ8\ÝàûHèZ²ñP:µÈ˜ökÁôšAŽßÖ/¿ëŽ,{ÐÊÓ¯›$ARï;÷¦ÏÔ娬d­7™MÅ•#‚D”Έ)39nÛýÚpŒ .ÍFľ§_×(ºÈR‡Ò'ù“„{ÙÑ*Ïö{‘JXÀ#¦È¤»±óßì¯}¿§bí´Ï1ÞuøpZJzŠ}Lî]ƒEÒ¢ä<÷7W¡%ËT%„´6«Ñ쫽I¥K?—JöQç0zGìý±ZMlUœ£8™Ú†vÓHÌv^`´%úSLÉǰyõŠÞxðß…nÖ´ÛÈðé Ûgeùº¥¨,ÍrÊ lV•»[Y ÆŒülJX]Ñ®=v<¡¼?%I{N¾òÎ÷ÚÞ[ǽÿù°~ÍÅŸ/ÈF•Ü|v±Žû dÛÞé ¶àî"wÜf¸»‚óÎë5ÐÒ^I î¾úy»o¦¤<™‚ÚQK"ýrI·lðxtV`¸¶Ý‡–H¶£ogÿø-ãGºµPüzA»ØbÊ1¦,Ý’íùµ¤yÅð³Ç˜,Òζç/é6ŽÙ¯~MnW¼ý·1åˆàjT6áôןRÎ ›çרÁˆ¼R,ÿúؼeýê-föÉ“õOÏèû’“zŠ¿:§wCòq–Z-šÐu„6Ü–æü ç=ÙøŒÑÃ)¡^±½ZÑnLQ’eÁ;L>’`‡n%²!_Pœ "ÍÅíuËäE¦®9ÿ·çèáÁûSžPÍ&謧¹žã[qög“™D©F…¯öjwIšZ•(×Ón&¿ú†é“1›gWP–”cËöÅ5±(œ0V›l\2ÿÓw¬Þvß“=yÂÙ7ØüåÏ^gÜÿoßRÙ-ç¿—Èö,³hk_)N‡„~Cض#å]ÕÒã eð(3@çà7+ÜÖÑw-¦1|x ¡aûöšvÝ1ùæW §ŽËÿõäʘýê1~µ&ŸØ¾xÆæÜ1x|[YBçPYN1)d!ô.þõ;zUì)+û1dcÉ~Âýÿö%áüoÿíb6sÉ]Î{õž‹kúw:Ë0êè"%¹¯¸tQˆ©ûò_Q>|.OP%÷ÿÛ·™#hƒ[Öô­ÇoW¸º—V.™|ñ)l¯è®T5Äì ¤æî@«²ŒrVº†n^‚|†|RaÊÄþ~§ºz$K‹žîº^²>z6êV¥dçïp í|NĈ7à8ÜåFÓƒ®0{Ù”BOs±@SÊÓœn9§[t„®AOÏ8ûç/0݆úbMô–\Ý ÌlœÑœ¿f{¹¥œÞcðéŠAÇúç9ƒÏž’e5ÿöW<Õ¤’XïÁŒÑý1¡÷_L>Ñcä2G¼ºS9’zE Ãe:tºùßFbtøðuCþàîÿ·Ï ÞzG?ŸÓ\µ¨b€L– Gz³U¡tCŒyJÁuÂÚîùÉ[jL™±øî{æ?ϱ)F}ˆPJXðÇé"wÉ|nèš¾—Hk›Ò®6Fôϼ‡Î²ßß$Ðê V½·i«é× ºeûney/—S´‹š“ÿñ¨õ+.XR«#ÓödƒúÌ7;±Çhß´TŸ|νß>ů–´ó–lT¡ub'ëdšÎ,ýrM3_ÓÏ„jÊpš±üËO„Lößò“{L>QÞ0ÿß¡YçØ¢¦¾Þ2¸ÿ[XBðؼDņær…NؾzAùÉ—Œ¦–õÛÕã¨ú-Wß_3þüsÂzIˆ©6˜ÁöÍ+¢ª˜~ñ nñ–åËkt™Ò•Åhp}‡:^ón=³Ø÷èÁ 'ßžpý¿þ¦F ¿í™üæ[îýæ«?ý™Ë¿œ“ "Ű¢/Ùö”žP-›·¯h=ÕéŠi‰ïÖ„ºKnÆ’|6)S<ÄÌç±#©¾Ç¶Oç”*ê#¶T\þîϬ¯6KR‹ÝÁßfú{Õ•‡KA “ÉOÆrVŠïŽUe¡ßâ jÄx«à îÜC£ëQù|:çî–Þݵ®¢‰ý–îzATZ¨(“)&#™5Á”í«—,|ƒ*‹]ZMTfD$žl¾a§ySûb¡èƒT$àAedUFh;I}RiCB)Tô­yôð´6éf©ºçÀ|m²*ˆ¾7$ ”•àz\ëR\¬Þ‡¦Üð»”§›ùÿ¹Ê@Lµy¥î’úUÔQÈ®#â>lïQ7XG¯È&Caø®Ä Œ´ìSÏDÈ/·83L¡6J¥É C«%ù,zOT[ŠŽ/´=ª°©’%Únmåû !¹ZSÕÊT±ëEG¼ï0 âáFBBÓ¥Û¯Kÿ.iu÷!êèÆzÄ̵z. bôô«Sd:ã½®”°m£„=íàX»on.·Z‹Ñyìt,z§¥„Žh£pË-dF>këPe†VH¬¼óR¹ ±™E¥1U!a2^ªnáÔtTjÙ%¿¥yÿŽË8µ–±{C¾›4jÍ®û™ Nàè#zP ­&Ô}Z|@å¹,ÌE†ß4D%&-©p;0[å"ƒsßt„cš@ê´Ä4™L™‰‘¤MU£ÿ³HÝA°JóF%²Á/¥²ÿÇg2 ±U.‡U­ñu‹ï<ʦ*oŠ¬Ý­/RYN‘Ó·¾Â¸ïjĶÃm[I™Œ 3HºÙø¡Ï$Aßõw•(ïþõwQÛ)b;„xc¨GuÐdªx4Got äâ~H”V¨¾“5X™4fÅ ­úK QÐŽƒ|êr”%¶0t×+( ‰«ßUÈÑk»¨P„´.¾›R·ƒGóæ˜½¿[wÌ(œs[¨ ¾Ð$Ã6JºzÎ Ä&ÊOHìÛôþ]Îá{ÓŠP·x/d¢œÚnW*A"„¡'bÇ.…mïÇØ±š”úe$cŒ¼÷ÏýÎKïîG¸€U(×áÂ3Æðþqù·T ÓáòøEŸæNUÛß9̨:ÊÔa?B×HT+ ÿÚÑD„¦#FM6Ì¥;䂤mÅï#ZYÑB'&yL> ø¾C—•ÄaokT9Àf+/œf¡yÅdê ®#tQð»:Æ ’Ìnwâ>bp½;&j¬) ~StšF§.PN>.ñ놾Nt)•°›Î1BhR ¥Œ„¹„ä#QÊÊ Ž üGÕ¥ªÈ±evÐ!ÿD{Ó‰—J¥ù–²ÖoÛ˜Ô7ÌÑÇ盘¨<êãÔ‡D ÑwÀ>ÜùT6ÛÏó¿9$(Éç@ ¤èÛ ly.é-Õÿù?³ ON~õ˜Í?à(0A‘ß;¿¡¹¬É&SŠ“~» ¹\ ŠN}Êå¿þ™á¯…m®˜ÿ¸$;9EùzúÁ¨áòO ?y"-è¨PÚ±=‹k,ÃÇ>‘M+¶?üÈú†4/ßÐ6¢TÖ`L&‡='7™,ŠÐ5PŽ)gÝùÕ‘ž9’[zeÞ5eÄ;Çîõ»ÚÍǯWRMîæs|)B(bpè|Hq2"z·ÓèË&€Âäš~9§[»½¾;zŸb‘#èŠÓß~AYB»®©_]È¢m’Þ-”­°ƒRˆ"— œw¸^súÛ/ˆ«+ôäqý–>ÎL{®þý%:7x•3xpOB BO;_à:ɺŸü÷ Êž¶)ÈËšë¿Î©V úmG ùÉB‡Î*blMÀT#P-¡7hÓÓ®ÃOž`UÍúùú6`ó‚Á'p‹s–/¯0ƒJ´ìa í„„¡…áWŸÐ¿}NÞcöéŒåw?â©}úˆ¸º`ñÓ ¼·¸É²dn½H°s³+ŠÏ®°Ú:ÊGžØ<ÿ §F ï ØþôÊfßœP?{ƒžžÑ¾yNÛ*ò"#ô;ž1üìÚ/ؾÚß{@žÕ\ýñ{:ŸctŠµÖšàv0•ʸ—tÂBjÓí‘KAc 9ܸSd¶„®T(ݲz~ÎäWßR`óò×ì0|ÙƒSмæâ_ÿL,N©îPŒKüvM»Ü0xò„|¨iç ¦,ÈRlxØ\qñû Ù³»x~Û1þúKf_Ñ/·¸Ú“+Âú’«?>ÃëâF·ò^ð]:É÷Å…ïŠî}/AŸO¸þ·?ÐSÞý3þ¼ýW—I–¥ ~B”u ŒÌêêê¹·×üʹÿlîtWWV² àgÆ• ™Q37w¸#YÕ7^2–º»U‘#çìýí¿cÀûäëq˜Ê3ùþ+ò‘ ží!u;\ßn>÷Q8Äm³íq[‰˜2o}Poì& wâÈ÷:A¦ìÂai{ÀÜ~·Þƒ¿ÙœúuµÍ1¤¡PŒsTªÀ œÙàšp ¾eÜÝJÍ”Äl–tË&Dh›–®Ü@>å蟿!Q–/ßÓ®ñ8ø-Ôð͆¶‰H‡’õËsô(Cø˜xšÑÍ×ÄÇ4ïÞ£¦Çøò’ºÔ§¸j˜dŠÊúû¾ ld±W Ãg&n]—2A%)^øâPF’nµ ]u½ì­£Ý¬‘ÃCŽþé üêŠòýâœx’C×ÐU›ð~“ñ@™›÷å ž#iq#¼±të=@}ÅåŸ^@”öRBÂa¿âˆôýf§ïïׯ®¿=Âñw5л½í~ ôÇö6¡%f½¤[5·4ÐâÄ$¦ª llë}¯uõ{’÷§ÈÝ7‚Ú¿^ÐwŸ÷Sd=AèPƒC¦ß=Eù&üûÖo $Î{ê÷W˜JœLHÆ Ý¢ t®¦¹žã¥¦[…Ëžœå¡4Ét@{ö‚Ù« ÿò=ÚV8Oß]ýŸLQfISzòÓc\·¦>Ÿ‡†aTPœž #ˆ‡Þš Ç^¯PéˆâÙvöŽË?¿­QÅ!‡¿;fþÇ¿`|NhøßùžEXÓõCG *çä_>gù爟I"7\üÏW$ÏŸ1:‰(Ïj„ì(ß_àãÅÉŠ:ì ø?Ãâ]CiT>$žæ¸j‰ë* |ôm0¤­:âéÑ0Áu[ƒi¿æt%ÍÕ5Ö§ žŸ’2Èc)ë__0ÿù2ÈDvM@Ð: )®:tÝ÷Jª“¼5· G[…›èsª È¡\Ù}˜,ü@:Ȇ!I±3ÒŠnužÅ/Šßu¢¡¡¹\¢Çèäfr ³„öÝ–¿ì:ÐX ÔHÇÓ¶»v³P:0;[‚Tb¹‹FÆ$ãœn¾ ÔÛÑnZ„Œ‘Ê"â) íª x:…BB·ÙàÐh¥ˆF9:‹B1WZT¦ñfk&èã[¥º­ÃŽå‡]/B:tAúóŒÊŸb=›4J˾#"v…ÔaürWôÞ~¼3Xão>ú(kç$ÙñEG³ÜàBE}d¸ Ab|}KW58:¸ÉÑÙˆc\Ý€ ¼Êf¾îï!…N£¾#î°íU5†h2By‹#B)Mà g”…Ä"á¢6»)À62Ø´¥¤4t­TH(u£5Ž£íÖÖH R8¬ ß–PŒˆcE· ^©=¥kún|_¤ÜðtÝN êïû Ïî$¨!´@£ãﺾ3Ñk›TJ~T¡ ¸A/úöž¢G:ò!º\ÅÄÃ$0®?-o_Wt"åõÕßE…ߊ@‚°»ˆÕ[§^8¶3ÄcD S¾ï l¥,ÕÕ åA6Õ;ü1¨¢@`èV2ÍÐEŠÃ¶¦š}×êŒ#È&fµÄ´’ôp„¯7}|¼ú»'ùŸ£àåD’çŠúb : Œÿ¬ß¿i›xT ô>™÷žöÚCñ‘ëñR7ÄGDáÎa6Í=Õ't]ä+4 åÞïØFÜÞ9܈›Ð¿íLI…ð6HËtJ~4Aº¾ÝÿïLX}w2ø)TÝxúhjÓºþ€lñB‡é¤17Ýoîû°™îu&w¯­ÿ›l7wµ“ÁÈž¤³ªØÎíXÆ®kp*&ð› ^l}1=w]p^¢’¾+m-"ŠÃdf{h7ì^_wتéãÂ-Õå²÷ÛÜh[Å}f©}?†³7õP[àøH*ïÿ×iøÚ°ÒwfÛF?«°–ywËî–MèÁ}sÛìpöágÚ9DœNFßí"­ƒö]bë&¼@æ!Õ¬68䎌%¤ÜM‰¤ ÷¡ˆS¢Q†[¯éjGz4Fl§Š@œá[¬UDYŠ75]½•X†4ekñ¨ÀUL+úI¨GHßP^,ƒ¼'Ê) šëN„ÏñÞ‡ÚoãÍ·_ˆ&=Ð]/P£!Ò6”×ÑtDyÚyÒ„I¼NˆÒ!:º²%>ãë`²¤ß«Ã~Ûá¬êBLpm¢_ 5š )€ôû–Ú†Þ*›T>ÐqŒÙ¬i!2\HuÃ'¨ œéú}ÜvM"Ô *’÷Lkúõ`¨âx…ØÊx~Ó¤EþÃCšÖT/zæõígÃÝÖ@»‘—㯟н{‹o6t7Äí4¬ ¼¦]ÖŸ="*Íu‰d˜«sÊyÇðËgH³dñÓk|œ¢µÆ¶ñxˆ´–¶ª1m‹Šâÿœñçxç1×ï¹úËKÄð”ÃïŸa®ßSÍZOY¿z‰š„¢¦|¿@æ#$%M-õ‘_pýןišœãÿöÍ›W4MN~2 =cæï™ýp†Hâ;3Z‡máàŸ¿¢~õ+>?åàË)åÙ{ª³®×¬Š¨ ™ft³kLëðâæt)z¢ó>h²vÎ`3ÝnœmkÃðËÏœæØ6˜—ºËKªË%*!•aõnÆä÷ß‘,ó¿¾EO‘  ¼Ü3åfÁúõ5²çØš¶íÃn'fzëQù€hÜÄÁ»¶ï@÷&''‘YRª¼DF[®zŠˆG¤#F_ŒiÞ¼e3sÏa®ßS¯-I‘!cŒ3m‹ÌðûþÃÖG¯½áOH Õû{ÅíäPG[º۳׉¾ïúÛfÖ[×@á¸é0ºÆõ¿»’©·;+ò&úûç·—µmCv?ßGàê@¥±å³ép]ƒ0ýú1õ›WlΗ¨4¥+[Š/>ƒÍŒÕ›9ƒo¿"‰k®ÿúç$Ó¢ 6oæäO(_¾F‡Ä™Bsº« 6çKâñ!ñ(ÛáèÂûéBŒ¯ë IŽìãÈo•vá6‘º=)˶h¯+ôô”é·Oð‹÷\ÿøšÎdL¾yBýú úä ²™±¹®ÑZbÚ&ÜÒ`|:£øìm C‰Ê"ª7oY¾™Y}“ÆïEe} ëñ;¨7Öö&âm¹Ð¨þc«;E†·=ú2Q»ÂüS÷6±ýž×ížëìš”A'^UdOž1ýî í»—\ÿt†J;êˆ5!”E q£ï½÷=ôëpÿ ˆÛÛé-s¡ïy™~÷œ8õA*$^ Ú«í²D%¼¯éJKrx€Nc’±üé }x‚¨8™“>‰]]³øùÖÝp†=_Õ0øòKFŸOXþåg6+ŠçŸ3xr€ßœ3ûaÆð›'¬|A|ú”ág)›çד;Äà ¯p›Wÿþ+..Âß?©ÛïŠî”ž~Ç]6«ŠÁ×_1|<¤]µ˜Õœn¹F¦cdìi/¯hfôåcêWoˆNá×W”ó–ìàh”Ðͯ1&*ºyE|0EàÒ±ywIöô)¢¼dõ~Czt‚ÎvÓ„)TÉÉcG‚Í/g¨ƒSŠÓ”å/X¼š3úö+¦ß>¡y÷’ÙßÞBœîžEHÎz¢Ñ]èôó¦Û¿WC„­+¼ÙNÞ¶EõG0w*eo-ªOŠ á¸¯ͧ®«wÙú™Ætçg¬^ž#’Ú¼ÐÄEº—:èØöE{»Å޾HG»nÉ#»šfÝ‚òتÆy¸ŠMCW7Aß#%¶kQIŠç-¶iqB”ñ¿Î‡$ÁúÕNÆH%ï¹ïÄGq:[-Ypا¨(h“î%gxîï ý=“+Lµ¡«;„¨(G§wÁöý¡C)„òغÆîålSt\¯÷‘Rc›e$EŠm74«–ôøˆâdˆ·ŽnvÅêí%äc§GˆrI]òÇToÏãCd3§óùPP¾¯ˆ:ÀĽ€t˜²Ä¶’ôd‚’Ž®lƒ~¹í°m‹H òã1Ýì’zÕâD§zÇF&(ÕÒÖ&l  ”ïÎh;ÍèÙ vµÀÖ5"lMy¹¾Ç¡³Ú¶ØN1ùî)Ýù.3|TÐ.V´‹£ºHL]…¸pDŸ”Ô+¼´Ò·Šçº0¢#°–ìÑIˆ†íú¸ìùª¿‰ñ¶¡­ ù“S"ݲ~5CM¦DÚÑ®ZdÜݪ¦'ŒHlۀ{]›ð³½ûB&tÀ @zçAUHÌ”ØzC»ê‘B¥é4Å.WÔkC4̱›%]'ˆ½ë¶ $ÑpLœ–¿¾Ãõ²½½½Îzô '&»CžßBïé®J-1Ë VDD‘¥|?Ýóp|Êqÿï_ïE¦9ùñÑnX½¾Äé4>©Xþ­-h3‚âÉ qHg Ö¸Û¾„Ýšú‘(ï;ëÊ}×ßüÏ%! ohç¬Ûë ˆ,J÷LÆB‡s2sßÏ„îT˜2ºžÞT÷‰§‘f¤“Ýl†i½ÅT 2MÖbšŽôÑ1Z6¬ÞÎQI‚NRS›Ð\XnˆF$YOueƒsèTí…M„U¡=Î4x+z]¶t”ÃÜòm!fBXºªÁ{¦€!â.<Ï›5˜0üìÑ®Y¿9§s1Ù¸ÀlÖȬ@˜Š¶uH/BˆHš'[7È$#™†þ¶[¬‹ 3¿f}¾BÞÊøØ½çwë’í[z:&•¾s§Š’Z÷½2„0)Èm×P»?•U8ÓìI¿>Öæ)x¦iˆŽ==¢»xÇâÕ5z8Fö\]kÍnÍówõÙ{…ˆ½^W|úzáQdG”º9蛲 ah€T)Bv˜Få¶éˆ ÚË9^ƨÈcëTp˜H×zÁúí^ê[ˆ?×ZòÏE–å¯ï±^’NˆnÍúÝšôdDs6#::&›*ÚÙ†®t 2M‰†)«V¬^ŸcˆB#Pm'{®uÈ8ètï&IÞn³©IGŽfQß„6IžµªÝá<¢]¬ùIGW¢|HnrÕÃÁUX˜Bú]uÙN´x™’±Ë –//‘iDñò6HO<ð¦ïnÍΘp¶™ˆŠx/ÄÀ¸¹íop÷t ýÅ@*h—+èi*+P¹ê1~w–nµÆ™>iËÕ!xçúSÁà³1íÅ‚øhBsyN³´ˆ>>ÛnjÔô€üxŠ++PŠ(îX¾¼&{ú˜öÝÑÉd;§31JµtƒŠE07ì°3n' У!Ýâ 9˜’äl^¿£-;T¡Ò!é4fõËKd6%dتD'à:D$mQ¢hWÑPÓÍ*’ãCTÔ²üùYLIÇIˆ^ÍØ¼¾B=fx’°üñV ™|ùÚóïQièZäø€Hʳkˆ4JkT–‡ï—3–¬_½£Y·aÔ/î‘pàñ$L¾~Dóþ-õÊb«Šä䃧êwØF tHpŠ'#ÜfIWZЧ‘¢Ã ÎùQ²åšv¶@箪°;b€"ŽÐy8¸ìâw*@ ¢£[†´ŠÃ‚aÊ5í¼$9yLq±yñŽÎj¢AF7ŸƒRØÊ0øò²YaEJz”#„¢[\±|q†LÈÇ=Õášg®óÉ;H‚±fû9ßÇ›ï3‹÷£ª2Öt‹›w³pù-¼ªßÐ"öÖ ³Åã„s¨X°~ù–¶áNú?­½Ó^;®éÈž„è|kšõ†øè ã'9‹^àD0߆fU@—Ê[§¾;É¢ÖiÛox>½Wä‰cAðƒ ºùg4z˜bË%ݪEHõŠá—O¦¦™¯èÊSYŸ?»`ñË52Ö!¥5î›sýgàú¸l˜uI|tÂä«SìzM5ÛàÚ†vU†¤cTâÙ¼<£-]pH{í¶íЃ ùéZU¬^ŸÑÖà;CñÙc†O'”oÞ±z3éƒ÷ügÇðó'Ä…À´>H$´ÆÌç´‹‘ÅЉ 2aøô•z–?¾C£Ì’åëë0qö"0~:`ùó[’GÏÐÒ¡²ˆúÝ{ôÁ1Š’åËëp‡‰p QÊàÉ€Õϯ±$h%ˆ&SÒIhÚÎàt××4KC|0ÀôT gº€­t!v^&êvâ÷î^í›JuHgR>èøPòñ!&ÕÛðlD“¶SÖ;Ð÷¬«Î#ôž¨a»»PGÉ$¦»¾¤<›!â¨/ ¥%ãáBÅíñ¶ÝƒÚ|Ôo+Úu…QpIºŽvÓ&使G¤c†_`f×4³2è0ÛPhæOrš³ –oWD£!Qâ±$=9"Ò5ó_ãU!ý)Æ÷cÛ3ŸžÆ ‚‹zËÜÆr‹(F ‰Ê‚Åuö65ãúA½´¿Ñ«ÊH`Ê ¦TDEtû5î¢ÄûÂËô)D¦Ã Vz÷7mWC<`üùÝùœèpBýþ=õÒ ¢¯R·Èáˆü`„+kDž“=ó¿½AOð›5"I¾Ãû¡ºêuwqÚòS{}T3»"~ü”b¨™ÿð+]:"&.ÕÕ5zx€Vb„‡èh€žzQ"| ®$EõnIòø”tà™ÿð§$±@M†øjÎõ_Þ<~Æè4eþ—Ÿ°Ñ˜é·ÏÕ’ÅÙ*"šÒ‚(2Ô³„¦T„΋FU’ƒ!¾-Y¿»¦kÃ@FÑÎDnö ½t$üî å/?³ž0†â‹ç 3ʳK<¯)gÙá³^`»ˆáç'¸rõ %À¹Û˜~çD 4Ë5ÉdŠÝ¬°áF‘ †7ú=ƒƒßQ ݺ ÷gdRf³¦]µ¤OžPjÖ?¾¤®Ùñúò'"„$c¤íù€dš³¸fõæ ’þû6Ø&ÈEÂÔ$í7Ï@D8»ˆx6õ튱»uû±•ˆ#ºËs/.QƒâaùÆ'zº~»ø ž£qa˜ÿíWªJ¥R‰ß¬ûü-¯ÇÕùçOåtesÃÉÙTÜø qe¹§{¾ïú›®õ Ð_o›~”¾öZÑ÷?·Kb˜ŒyÓÞî¢ïۻת“^à0å&häGc†0×tEÅ!Ø'>(¾cñÓ[(Æ$‘¡-%ÙÑזضÁ…*†ÇëׯX_´L¾ýª –gu˜¬5í4× ùÑ€n±ÂË”¨ˆvò“0õ8Scʶÿ˜#¢AѾž®ÜÐmZDáÖ%b4aòå1‡ÀR_†”D¡ ]Y£‹®*ñĤ§¢"ŒÊ»å ÛdÇ)J4ŸiÄúÕkÖï×· ž^¥’èƒgBÈP<ÛÆñ%ÅÈ3ûëëÐú õ¡ö¾iCŸ`Z ÐYH£ d¢÷ª½>8*–˜ª¤«ì–µÿø€HH°†®©‰3þ5Œ×<¶,à »s¤§‡D¹¢:»Æ‹©:¼HÑ‘ :»€t@q2 >O×EhÙ€ö}r¤¤[Ï©.KT’„-DuK‰ph¼—B(%¾m°e :ÞEçmYHùsí1j):ïµÐþœ¬aûx‡ÝTx¯ÐE†JÂçå­¿•ˆ·[ì¼¼ëï"[Ãhз ¦¬Ã©8IG»,‰H E»\Ò. ÉÁ˜x: »xO9«Ñƒ³ZB4 f˜r‰÷¡3£µ#;„.~0 ì4ìÚùgÙÅiw«52 …‹]/h52M°& íº&š±Ë²ÈÁÖtµ@j°«㞎ÀzŽvS‡Ž»´ØªEô Ax̨Þ`[Ò$;~µB ‡t‹zz€¦¡)Aé VY„ݬM|0 á,Æ#cìc~Ûëkª‹Ñôt¤)߆¢SJGW[òG'¤…ÆùP.6ç—˜N¢"‹·ù£Íl Rãššh6©êìëaãƒÞ ôp„²5ëwç “þóîML¶»3bõ "t‘îðL¾k×xT–… Ó`Ö%¦5èá”ü0¥~¿ 99Ä-ç´uׇa€ÑYõ°U¢[¥èé/!D"äàZ¼q; ¬·™ ˆÇض‡ÖïÁÁ,Úÿ½~OêÑU”çaãø» ß@½5†Hø]éÈO‰’òüšfÕÞ¤“þç5 o­¿¦®ÑÃ1ÙÑ l°·:Ê·;â>rÏG®ß ìáNz|ß¶Ÿï°¬Åï?u_Ãb‰i\<|€ÌÒ&±WØ ééë>M³ ¹ž‡D¾ Ê÷KôxŠð ®iqb•‡P.] jÙ¼»Fe92JHÆ õùE0$˰يÈ#£3¿¢©¡xr„oÚ¾èkX¿¾„¸ ?ÐÎg4k‹’™¤¨<øÌ¦Á!z"SÀSyëQ8XÙº%žNI lÕáê åù• Q© [µd§tWW¨ñaKÊó5Éñ1ZwÁÓGa ’ä$ÓÂÛ]èŽTúæðÙàMCuvEßV/t†ôô¥ ›~R‘þÏ!3 z#“C¥*ûøÞ&TYò.Ü#¿ïÚüœm±V ´Þ‘Gnƾ®Ï2ØÃ5zë©B~ÑçECò“1ôT*ÀÚ–úý’h2Â7êYL$J뀡Ó1ºH é8b]í¾G¡ƒéѶ.`Ú¤Ü3œ‡ý‚oUO¿–Šl@~25DÛ`–+:+IOÆ´ïfÄq‹kD2$;R_\R_.û:I ’œh *Ò»C‹³/v½¦Y”=2-L„1ùéRØ^îaöü£g×+šù:Ü÷:%;*h.¯‘£1Ýù5jz@’‰²Q(]­Ø¼¿€xLq2¡[Ìyޝœ¸jƒm<éá˜øpŒÏ(ß_!ŠÜ^.Pƒß6Á<¾ '‘2H~ã<žfâ£câTÐ\^õSƒ>Å߬ï:ûzd¯Nê:þ3¸¥Þ9d>{¬½wü`]íï_!Â4ᆵ·' Ùþ|a—ýw°+ ¥%“%ã>…§+û.Ièª ™"{[Ò\/q^Ò­&ÿå[Ò¤ '*]ãeÖ†õëwøü€ÃoNYýôM£I‹ •¥Äã‚h!ÓŒîòŒ«¿¾A$)V…t«‚h8º…îRâš Í|…Ð’qØR ”§[-1µëõkcâQŒëL¿}x¢¹õïB|xò٠ݥ¡],0"й¼íõþÝÎíVFÛ–4s¬‡ìèQО]>aúå˜òí;6 é$ÐíåÕò£ŒÍÛ·ˆäü¨ÀU l×ëeOÆH:ª« =§Ð\—ˆ¨=ú³Yã\„.2l½¦z¿ yúãgÊ—oé*A4ÌÃhN´t½´¡›ÍIŸ~†tkª+‡J-í|Ɉɷ ­ðmGy¾ È8ßâ:‰JêIfÉAŽ[¯i7Žô° ½Zâ¼ÃVÁŒR¿'ûâK²ÌP^Z|· .%ùÉ·^áe0øHßàú`ŠÀmõ¬}Åêí%é󯘜&\ýëßp:ümÓÂÁᄂ8L¨ç%¦6˜õGŠÒ Ö&Œ¿<¦~{…5 ]i<B~œ0ûÓO´]FuØ.&*¶öDþ^³>»ÀÇ)ÔÛ”º}Ðqo‚”)ɤ®^:Ú^ÚãDÃñ(ÆlV4³ÓVÈ|ÂàtDwµê¹¬ ålÙë5c<šøpD~:¦9{Ãìooú×H ÎiÒƒ!Rµ¸Nô#é~±ˆÂB†ÒÄ£ˆîz…µ!­29⻚vÞM‡D…/èæ\ÿù>Êz"Ëþâ¯wx,ÿ*Ü­Ñtèá“ç§4o_ÓT0xúˆt*™ýå6³®R~H#úñßÿw¯`ˆüùçL¿: Éc­íßÞžÁd«E¼ѽGX¹}ýͳ/#¢¿—͇ŸÕ},ÆI8îéBmë½Éáþïu@ŒŠc<¡;8òÐ\͈N?£˜F,þú G EÌþüšøð1Ò¯1µAª ¤'{rÍŠf¯6×k’ñ©²ãŒÍ/op2A*‰JsâQJz2býÓOTUÊô›cê³éÉÒ®¸úÓ/¸è€ÃïS¾þ•õ•%Ò •I&¶ZÑ\¯N- Ɉ®³8×w]Õ0üö†'9íÚ¢üŠË?¿$=ýœ86TWkÒ£)ÍÙ9Ù×_¢Ìœë?Ÿ3øÝ7¤yÅÕ¿¿FgÖ6Dù˜8KðÎOŠ€Ü7€n ‚Báë%³_‡èòmª¬1t«šÉ?ÿž4©¹üã«Ð¬PË*úFÏþ÷i»Û×;ëÑÅ0xŒ}`2чx­–t•»³6Ýî{Ä-þrÌîwR]gzôa‡ŒC˜ÉÖL¹E´þ]$‚¸¦%:~ÄÁwO .w©Æí|I3o)¾|Œ]^2ÿù5*ÈÆÌjE×I’q‚¯=*ÓÔ××Dň®\!┤HéÖkÚÖ¢uÜG:‡@‘d¡~sÓ íe žMC‡ØyZùâ «óÑô˜|2Óà¥Ä·”2¨¡øâùQÊê/¿°>¿F >Q½½DOÇ(oQ ¾ÂÖilUbII’êº$=9!’5«×ï1B£Ád*Cú§JÄ£t—†‚UZ\Sïa,ïLõ>XËîšüÄN³ïA&:ƒÏ磦@vä"%$“40ž÷•ýó"d_gÃúçה˭„ã D4Š Ýr…*ø¦ ¦‡[Àú-—V"âŒ(Ot!ZµxASÒ5†h2AÚšvYýK¤Ââ¾n Ö¸¦ía÷Ïh˾=®ÕN{é·YÁÞ#âpóÜž|õæÝGÝÚ½vß6Y…ÖÕUé§ Xssg$ t´Ón´ýF¥5¾kw'Öß|¢—}´skÑ£:UÔ—x“±åš¶±`<ñx€JdHÇ‘i8é-*Òãc°%ÍÕ=¢t¯ýÖჃ:BD¸²¤Û”}2_ojÄ „áуºÓJ¢aD7_‡iDãI´³j8Bø†nLBl?cP*%æÛaÚ6Ö"³¬‡Í‹>~×áÚSwý£CHbT¥±ÁuëÈ´@E`Ë¡tí¡ˆŠ!C°ƒÔŠîz†—)éáoÚ ûÆ÷nsp¦o2H|4ò¾k1›:<‰«ð=,PÚÓ®ÊÐý޶á? `€˜h”᛺—F„„,çîÐÄ µ†¾ƒåº=¸{O}Ì»·Ás ”Dg9R;ÚyI4ö‹xL³ZÑt‘4]Ùö†$2 <^gJÒm*LÕîô“¾Çg…C‡ ŠR}4éö9ZAoB…ŒÐyÆÞ„ܽ¥û1—)Û[ŒÙßÖ=ðˆXå)¾3ý½&(*ŠÂ:ñøýŸŽ0 (M™fÄÃi|×q³‹{Äþ6¶p{ìl¦'PÜ+ï»=k|ÈCxßõB \UcsoäôMÀP¿FF:L¬í}ºõï°wZã·ê§ouƒí,Xð¦ æÛH…û:މ‡9v± X1áqMG4€k± Á_Óz¢a$UÏħçýúíÿïŸÓc.{}©s!8%縪ì"¸»ªÂUžà}‰‹(ðú­Bç ®ëˆ†9®®°­DåaÒäBÅ ×6†Í·Gím÷Á}ÚõÐ95ëª7n†ç8Dƒ˜v¹¢]w(­vÏÖiw—kûÉ£”ÛÚfêðQomâú{S|ÔT(ö&¬ÞÌ`<àÊ 2-ð¦¢]·7ÑÇBÜê{ð¿­¡>"åa½r³)ƒyÙXdÒMª {—qö.SÑ.k⃠f1Ã9ÕëüƒüAâñR…îží~CFrw>÷&Lbòxwv²›º/lC„·ÌÒ@Yõ „Xï…]kQà )üÙˆ”aªA(*}SÓ®ªðï*"g½‰îF’…=e± œã4 ˜Ú̪Äu=ÌÑyŒ-{°áùî% q®iç+¼RøÎ¡9Rì£YWˆ(2§µ 5GỚúr°ÄZ¯ˆµ!P/ Óko\ÿ\†@Û4夓»^bº^²è"Š>Ò¸^BØ\^œÚÛ½¿PýÎÃ÷’·™DE‚ß*>i]}s«—¶º}œ¸½¼÷p ×4áµ ¹ÿŸÿþýBDƒÑø«cÌõ=ãª%]ë‚)`ÿÁó!d– #M2 šµÍ«K\”Ð]¾§í†ÏqÕšn¹Aè4ŒfŽ$Ë¿¼…ÁÑnÑ€ôtDv<¤üõ®þz†ÌÒ OТijæžLÐY0ÉÜ5'ì>O·W„½]\c»˜ôhâb«æÎ¸´³H dÒë¸öO.~oóèhf+d:"Þ‡ÉûxZÄ[.©/WD“cÒ,~y‰K&ýÓWÈrÆõ¯oiÖ†Á“'L÷”êÕ”UÎøTsýÓŒÃÿö;ìùkÊ‹–â‹'ÄYÐë )éVQˆñ,KêókÚUµ[’´‹ÓXª«3ŒÑ¨ @'èl€Œ,®núIC_K·•€’æbƒÈOŽˆú&àe‡h 8(]Ä,ú…Å«%*Õò~(jÛu-z|Âáž#›MÏ)é”ñ0cùÃÌ^/щþ;äOŒþ¾«QÞ£ÁÖ5ñégþî 4Õ ©d?}N<Œ¥»é@÷“Vt« S†ÑòÓäù•·O÷ë@ïwW$2U˜õ2PvÝíû4Óï5*-P‰§]/©Þ.É¿þŠÑ#Åü/1ÁÉ„ôð€( “ !Þ4li1uÓ£ÙBz-Ɉѣ õÛ3D’4£¡€îJ¬‰°›KL4âèûçl~ü‰êzõqQ¯Ö4eC”eèm7sW_Yl[ÓÙ„Óÿó+º·ïÓGÄT—kºÍ ¸¶…âÉWCÖú‘ºŠI& ÅóCª¯©«ŒâIAõî I) ±‹9^¤Äãa8T8O4 ›5|ï{ _͸üc “Òc*Ãä÷ßrðõó¿üÄüÅ5*K>(\U#ü=è‡(÷FgÿG¯¿{"û”hnÀ[l×`\ÂÉû’îìŒèô)fþš«®‘Ü+Ø?õù k¦ï:dqÀÁ]C·YS]Öˆ(ÂÛ•Ž0Õõ¢ ÁOIÎèÙ¨ç4‹–ä`ÈæÍkš&È U” ´Æu• I&}ˆÛ×Ö…8ø®çTËÕÐ.ħO9úçÏ]‹+g¬_¯iJ;¿B¨‚xœƒ«©Îg¸(!É\§‰GÛA<e2t •¢• c’Q„Ì2ê7/ûà•58à蟾D™×ËD¤0«š®¶`¦^ጠįшtì™ÿñGZ;`ðäˆ( :év½Àw•Ò#CÒ¬æò¾"y|u…*ƤӜì$çú_ÿŒ>!S çŽGÿïïp«å›÷lÞ]ÑšˆáóÌò‚jQ£tJ~r ~M}¹¥’ÄiD»nIŽNH‡‚ÍË7Ô­'J¤¨Á˜xœ‚ó¸vCs1ÃÞ”¸Ñßt~C3ÕÙ:¤znÜ}þ¶dÖ;PÃ1ñ é›QýÁò>ÿo™$Chº;µ_ÿ:ú”c@2ê—/¸ø×—È,Û×@‡HLomêé#L›[·7ú!±»×ƒ«µrÛ6„nhè¶`{Ý¥ÌLßt8çiÔGŸöá"Ɔ“Í.Šû†m-ò·‰,·Ö¶¥_×XÜ)š·ïánaîl¯±²·ù¤¿¥‹ÐDŸ0¸u1ãºHqë>γ×Ò‰8º5ÍðÖ!´ ùö‘þ­,O \’žô E8ú€—€Ü}vJö²H½ !‘Þõ‰ëºüQêw]Ÿ’'C^àûS¤7¶±»î„Ð}Ú ߯7öÝdÛE}-6ÄIË<¡*­Ýsx‹pbïnŒ(®iƒ.«jpÖ¢ò,l°U^£ÒEM•£OˆŽƒ3|SÝ —¬ Ý8)J£Ó$[TÎúpËlMu>¤fy¥‚QѺ0ÊLc„½‰J½}xîÍ)¾õ,û]WÛyˆë×v7„‚(àïlÝe¬qe‰ý©Þ;|‚°M~ ÝžÇÎôéWò–Iô5ëÀ45a<â­·ñÏ!DÇ÷ÝY©¶jqm÷@÷óÓ t¢§~­{™Åoe}`Üü¿¡ í<2ÑýÔÊ~Ähuúƒ¢CÊþõ?”QîïtÏþö·®lUã¸éþ½f¦ÛFTo8 8[ô‰ŒÔÞt/È>¼uýâ61cw+yë`á;Î!³ !‚üBj ]¥ƒ;Oƒ_ªpoƒ3îæ“ Œ³Ã5"‹ñUà°ËD…ÔGcñÞ¹‡T€íÑ‘ ’°÷„ÉS0£™²íǸ*o"€½ ŸKoRõ¦õ½®¯ÝíI™"öÄ¿ó<øÔëýíÏþS£ßù ã“~F„éCk±‚.˜ñdšöÑîÿÀZà k÷–±¿éS[»š‚ýgHl1œ¡ñý:.ðxÖ«°‡È­x¼7Fö )oS[Š“YäA ×TcVëà_b×Uõ€H3¤û×dN2š }ˆœY—¡s©0aél˜Zª0õ’Û=sûùJo:lgƒI3‰ðm|SZ#cÖ|èº"Q‰Þu¡nÓ*t¢ûà¹ðx»p Ž5ÂylÝ\ò}J¬û ŒD&1ׯ- ò4üî¦ þ£$|×®5ˆXáºÐ‰ö¦ê$ö÷ÃýÎîÃY޽ģ/`m¯¥î§e·[)oØê¦  Ö•%Ü$éùûozïä^«›èxx€ˆ*@ |cú˜ïm:.Fãož£]‡Ûw‹G »Y$’”ýÍ£Òï*Úë9õ¢¥øê9Y¡¨®®¨/7 ¾ù†tPsù?A#„³tMC< ;Èž=fðÙ€ùŸ~àúç+¢AÄô}^{ o¸64ï OˆGÉMâžîø€¬!¤Âue(:÷»ÜÑÜô›„Œ²SÙÿ|Cy¾bú_¾¤}û†ºÉH'ñô]­ÎíïDF³ZPÏ*¢á$DËZ7kêYÇôûÇl~}éW_R¯º]U#z)@À2Ux݃üÝmÚFæ×$žrðÝ)íÕßT4ó>9Ë+TVà½!{tˆ¤cñó[šÙ’èøÅ$aýók¬–Ä£CŠÃ‚êý{ºÚc›5œ0ýýSüú’ùç$‡'e°ë5õ¦DÈ!ùa7 "Ê ÛÜf놱I°e§ ó?ÿ¶+˜|õ˜öúŒÕù2¤œ9Oþäs†'‚«?¾"}ô%Ö½#6Ãu%øŒâË£à$þá×uX<éô8ð\]Ø´ãiŽ·fí™ {BÅ¡ðöÎÓm*T: ™NÐY¿i¶ ‘§Bl(ßÏ Š‰’ ­ûq)ãï³yñ3‹÷q–§÷Î,È5nþ„XÓb½ÃU Å—_3ýêˆõ¿Ð­*‡Íû%“þžbÐ1ûËKʹAé£G$ƒˆæê™ÑªfùjFöä ¶è" ‡VápõïÝrƒšžpøOŸÑ¾{Éâçññ1‹–òâ‚¶6ÐÁäß‘žÍEI2¢S@½£np2N‰D)«ŸeþjŽN£Oë@‹€ Úb¼k sô_>ÇΗD£ŒåO?±¹6¡øô?¹½mv¶ ññ¾} MýAGùˆÿ 4w;ÐJbªÛ¸þÀ¹gÚïnïò–ïÁ(ïm·J{ºùeòýS´è™çqD{=§¼\à;GWVXëˆò‚(‹À´ÔËàɧÈ8Ô<Í|†)=ùÓG(ÕQ¾zOSÕèÁ1Ù4¬kâéˆîzNò8ì ‹¿üÈì—+tžìÖœ…xÄñyJýòm›)íü™0|>%çtg\ÿÛ¯¸|Âø«§ˆºFST"ðT¦)ߜѵ)É0¡]ÌÂá=)ˆ'#°7#`GÈD"¤ÂÖ-í²A¥ Ñp«§íÍöÛ½H†¦ƒ.Ö¿¾`öËe(Bîè§½s¨8 ]ÔÌëâžÎ0·×Œ®Á+…Vú¶Nú!ïÁí éû'¹êïaåö`®oæx ã£ß}Çä«C–þ‰Õ›Kˆ¢û‹ÏMzæ^(š·™O9üÃçhWS]^Ó,[T2@e’v>Ã6>Œê­ADE@^ͱÆâDor´Šø`ŒŠÌ&Ä;;³Â”’dš`7+ A¦ÁÏ!t«%íª¦Ýl(¾üšƒoNXÿð3]­IF‹__!Ò!Zð½Æ“1ølB7›±9› ˆG ³ >©ìô%-ÖxâIN”¬¹™Jù®¥[›`zsÝí°&è‹»Ð2µÇ×!ÛQo<ù“Ìõ%È¥¤ÆÄƒ˜Å_aùê‚â»ß1:,~¸fò_¿Æ\/Ѓ [Ö¨"eóòW–ï7Di² üéêŠøè3¾„¹Zàeõâ%å&ß>'’ ˟ψŸ>çð»G,ÿýÏ”kÁá?}Aóþ ¢”¸ˆ‰Çšù_~fy¾!βÛûaoæD¦$ÓaàÑo©‘ ¹ºÆSô¦à%ÎD¨ìf³kú¾ŽQ© zÿc5ÙdBŲñxÙ{æöB­öУRë QÜŸ¬ÞÑ@o×y•§Ô/__Cºë@‹Ñ–ax÷Ú¢·BÛ÷9ê!ÂÒv¡»%£ÙÇ©ºÖ…¨c Íb…—AŽáñ¨,šØ$µtë’®îRÝ—lµV!Ê[î\íÞI†’çíîòI|¿®ýÔ>ñÍ ÷fTà°âQttÝ=®æ‡8[bÿ3µ=µ£@„.‰#èùÊp’õ¾ ¨[¿GÞ:%?ô†¼µˆ<#Št •l»BÖô§ÐA–YÔs'[|×§û…—ƒ³v{ߺz1øâi87‹ 'ŸåL\ÐI0t"=¦&ôšv¹ÕˆF«Êíl…× Ò{\ך„ñ±*‹‘xºuLzºïô‡o%z#,ggBB'qÐ8ö[iˆ)®»ÐES²×€[h–%¡k!| ~øgƒCÑkª…ìS½ÅmŸï:ºeNß"|¤¦©±>°ª£"GiA·Ù`ÿ ëƒvÌ:Pô CÊ~ UVtÕoè:mƒ„¼Ø«÷Â!1.2\Y£Š³®°V ¥ÿí~ƒô?çi 8ë>,4>©H¿y½BILbR©`Ö6f7Õ’]RW#÷4ÿ±©Úöžº™šíÌÐýØ´Y1¨A–nU‡.k+óéMH­jìVëolŸÈLArâ°½–9¸„B h×›}X÷Eº?®³È8&&˜MI»nÃgÕëH}¯ñ)®,±NŸ»ø¶ ÈAŒY¬BÐÓ6ˆKJtž HïQpÁ¶l;€ÛïwQklÓ=ÙH⪚®lQi„L“8ê·¹ÞtßwÜ…R¸¦¦+›àÓ¸ë+îM¨·JÓ=ô½›‰§6ï>@yùOÛ ?¹ÍüZOìðtþŽU!”kUã…ë×ÉKg÷"¿·ábÿ½÷÷¿ŽˆÂ… §—€Ù*(@J¹…Ê‚3˜ºíÏ0>x úIŒÛÑlŸ¨lC ï.J~Ç»©¬éPÅXC»)AFg°}êq@£†ûYJ±»Ï¼Ý>'áÞM¾°O<2QI&Ï.ì9¢k0­GCר{y‹4$„Ø…wt«N‹eg*V}wY!¼G |UÑÕ]¸Ÿ£¨÷58¢\a6-ªÈðU…,òÐÑ®Ûþï…EÈ{‡ˆ3âLaV%^„ 8çúé,ÁumøÝQØ»E–‘Œ ìr…C†ïOyºe5¦?ÔßeÞô¤¸ñØ ÂáÌÈ>Ar»wù;šæ°öÉ8èÝmçØÇá·5HŸÀé¨FÞ9d’ ²0‘½Íóÿ°¹"T t›¡äRü_ÿýûQ1}ý å÷¢6…@ôÝÒvQ…›Q%È$Æ#È š‹Ñt‚Š,›·—!¦:‰°«uÙNO‰ ݬñ"!‰‡z—/µFrª7/™ýxÆ¥;ž¦èOD ]e™þ×oQí’Ùçx-I†At¿k|h“QßVÁX³ßý{ˆ½òvÁ^Wÿ0(Cu6CˆŠý„¹Þ fªõnaP¨4ß…¢lÛ®ÖMM%ð¶¡[¯CXÐ~'é¬íÚ]xÈþ(ÙV ٳϙ~yˆY^5>¼¶ÍÛsT–cê’®³ˆ_FÇ–¶ÜPŸÍðéˆì Âw’äðêÍõ5õª%:8!É<¦ F< [ìºAÆ*Ëðí’Íå†Éï¾Â¯—¨É»¸`sV‡`žÇC\ÝÒ\ohf3LÝ¢bE³ê~õÕ¯/ȾùQžsñÇw ¿ÿŽÉÓ1ë—ï°›’¶jˆÆDIŠ-í¢$9>‚vE³ ›3Î!ã"DÂV0ùþ)v¹Æ;GõþœjÞ’ž¢E‡Lqë ›3y6`þÇŸñéÃÇ6¯Žð匮q;|àÖÈ’?eø(bþ§_w!»n’ Ò&!fSŸ<á蟿À\¼fñË’dZ°~{Îèwß+‹HcÚ‹s¬2|>ŬJÖ¯Þ`š¸ï®¬Ã(¿™M‡Oðõ9:BÙ5m“dަV|{Hùë9jz‚VÍ|F·2D£1éɈäp@ù󬮼¯éB Ëöz©n"WüÇŠbq§ ø\ïo¸Î·öI/Ÿ {gtøˆƒïc®—X'ˆrÝ«"·ž‰_Y¾]!œ%yü”ƒoá› o=ÎÓô!PÃðÙ™Ê!´¸¥ý÷í†æzÑK.5ªHqÝßݼ;•Ùi’»ÃûvoV© ¾º¢ºZ3þ§ß“Êgÿ÷Od_~ËøQÄì‡s&¿ÿœò‡éLÁÁž°yõ‚j0þú„îêœÕÛkÒƒGèÔÐÎ[’Ã)øŠv¶ ÝX¢ñ„ì°÷O¡bA·éz™œ#*b„´t›g÷ž}2°›ÝÊ¡i¨ÓlMsµ.!Œ){r‚4|È,¥yûšë¿¼E¦é–¡F*éu¶.¤Þxï‚vVìdAë>ñªB½¡«Z¼½þ¥£k : .ÕQà ¢QîsÛ/H‘¤Í©ç *‘–¡£0V}lrçÈ"LC}½%C'R}‚«XôP'ØØy8ry{‹õjÒIÇ}÷Ùï:áœiî‰ó#@q«Yínu÷LÎÚ›1…5ý¾N¢RÞæÎ™ž–y[CŠu¨AA2â«’vY‡îqÛõÖ?m:‡ŽÒ»ÞÕ4ë5œ†$¶² ú3'LÓJ‡±’m¬“èD‚ ô  7!J´iƒ1-Îôï_špXFöÉU†¶6d§GøÕŠ_×´«–h4&G´ó5fc‘ÃÔRi¬éqŒ¯[â“ TåÕšøhJ’&t«Î ¼íQ†Ž4Þ6XçûŽøö+öý´Çë¥=]Õ¡³ ×U8§PzïDظÔ3¼Ð»®‡èAþaêÁZÔpD~<­×4³&Œ.«šôðª Yd¸ºÄËŒdšb×5íb‰s*œÆ·„´í®sAgî;J‡ÛÛÓv#¥lð(&§Dƒ”n¶ ^µ!¦YY\Œ‘Ñ(cz)¢@F’v¾¢«ÍÍýù ô¶cÓá#t•ÂkïÖ5ªÈщ ºšÓnBw[(>_ÿ¿±€nD: ;†÷zOZÜ÷³~Ïý}_<º’تÁTín„íʼnJz†·»NÛ­Ÿ÷þƒõB°Çææž¾©¹eŸ2:Èa=Q»õHÈÐq³u(ˆ”ŽC—ؘËýÆTžøpŒ–ÐÎ×8$ñdˆð5ÍUƒÌ¶1Aß6 cgi†¤Å:…ÄâDDq\ôÏšFEml]àþëAJì/¤ötëŽô44|ÊE‹ŽStôÎÎøð»;Œ¶í>"=xÓnÓöþqÝwÃ4ÛÒU-ÎJÒiN;_ДÝÞ¾°EÕõ{¯ŽPR`»Åø®ÅZˆ²©èþ^@ТË}]^È]£@ ÃwîÂú ¶2Ž;i‡ÞyDdg>,ɸ ÀZaWë½ •ÿþûQ6<ÿ -ÚùœòrƒNHÇ)vÇd©3 õ¼bøÕsâ$p ?½AcÒ šÙ ã@KSý‹jñáé:¬qÈX¡…m-Îz’ƒ!Ýå;6מñó ó?ÿ„•)J«^.ÂîF‘‘kI†¤7ÆÀûþSßTaãïG>Ÿ¶áŠÛž]z—B¦y?r7'Y!ð]«Ûw{Ú&ªï\€Î#âcê†ää”Ág´—Ôﯰ*güõ Õ¯/±>'…„Ææê’fÕ¢ã„üùS´_°|]1x6fùó TqL:“N$åÛ÷¨ñ1nuE×e žNBÎìŒåÛŠâÙ æbŽT—ï°mD:¢r $nÈ®ÙÐ.J¤ÖtÕ/RŠGÇDyD4J)_üBÝfLžM©ñ°@ÇÃ5yÊw—´•&6…Í'2tÒR_DdiWñ8§¾¼&šž9žp¸¦Æµ™ä¨<Æ–KÚEŽÎFL÷ˆîÝjzŒ¯Bá†È<Ç›:¤j¦óðŠÅÓc¤´È,aóò5ëó2Œ×vJר=nÎßH\c<ÆàÉ0¶½Êµõù5ž ]äÄÃ8Ô1¼3TgïCÌúHP_ÌÑ£Ò©¦:[¢'‡D ¡S,$"´×K6o®h«šøè”ñ—®Ã;‹©=Cýþ}pHsñ–jÖ1ùö ”.YþtIrrB<)B*fÜåÞKT¢Ù¼=£º®‚äçîæüPò_Ó‘>zÄàÑ(˜V·ÝÛþžvmoVÓ½LLKd’PŸ½eñâ*x>É€%>éõìh MGòè ã§“`üÙ~oaì>ÒÞ×+ïù+„Æa·ÕAºÛÚ϶h Ž|»ZÐÌÖ ÕN?X<Ѽ?§kÃaL¦yüè`2Iб¦¹¾ ][’ɤë 3[ömßY•’n5Ó3x’³úáu?- …jW6 ¾zŠ/¯YžmPÊ#â‚t: q^’H,íº¢º˜á­¢xz ÝŠÍ›9ÑÑ1ùQÌú§—4]Êôwiß¾fuÙ2úúsÇ1›wTUà ŒIŠ\‹i|òëkÚZ2úæq(Î[⣒I†ÎÚ÷oX]YO&T¯¯IO'l^¾‚¸@+B%Âè_fct0™7E¨F¥®­úï$|F®3˜¦EçCdä0« •j¼IGØùõÚ ’xwK¨(&ÊÆÓWKæ?¼¢³ÁLv÷€t³š÷÷’”QévåÕK(P %u?æþÔGávGùa•PßÀrw¦·ˆû vq§qe;lBLÐ ã/ž eð ’„ècì ¶è5±Ûñ¾5Î8d¤úhè°7‡¼ÑK\<¦ÚówãINñõGŠN=ÍÅ¢~v=ý@àÊ3lµAÈ[­é §§AáT­^ô4‹9*e1íbMþäAIuiÈŸ Ì‚ÕÏ—¨A(âéÉÚë+ª+Cúè̆ú:ì}Þ´´MK2=&åA ¨õÅ 5: Ê4h‰YÌ;^ËÛÞ )qM‡éº`,ô‚vS’>>eüü(H`€n>§]ò'C–?½Eafï1mDv4E"š‹sŒI&iHõŒRdÜë÷…¡¹žcA<¡‹«¡¢Y±zñòò£_6èÑyd÷˜Ê`ìë®/hÖ’d:¢»:§¼žãdÎøËG”¿¾ ûâsÄfF¹ÄÓ ß”Áäx üàÀ©ÐQŽö–Y)oj"¿0”¢¥¹œãdF<΂‘s¿ÓàÂú«bÖÇ;Ž-[¦ íù{–¿œ#’d)þ¯ÿþ‡JâApO¯¿L¤Ã8@®M_ŠáKªÒ2úâqdifK6—ktQÅŽz¾Á9R'4qƒu©w]§h˜ ºåOLrQ¿{K]E ç,þú+VeÄYºíÃödÛ?3!Ù*Êã=çä=yáñ~Û}~ÀÐÄýZ—¯ï»Ñ2p“…wÌP}ñ£¿Ÿ¼ ÷’÷¯³ÝÛv 4q>æ-®«Blí½?Hèpà0MKrtD:\×Ô4­bòõ å/¯ðÑkŽf>Çùˆ(RD‡‡DqCyÞŸl^¿G¤T$‡ÝlO¡Z±9/‰G¤G#ììœÕYIz8 $ È“dйsC{ÛÐmjð`ê /bâ¨Þ?ävzñx”‡:øÎº½ÈDÓ]]³~;ëƒTþû¨x”?>@)ZæR#”£½žÑ•©e¿¶[)Q®i®®1GgYˆJ.›uÀêݪB¥"’O´Û âã)¾ZS_­q²ãSTìi/.q2§xúiV¬ßœaœ h2/BOär[4ÚC.b)ð]{¡Æ'lVÜNdÊcëºÇ«p#À‰?äu #"õ§Õ÷7žo[¬±ÁlฅQúëÖS–ØÚàLG|xH2Ì(ßádÆðqÁòç3¢ƒCD³Á‹=ÌÈ”oÞbÈIrKù¾!9aË vSa{³¢ð¡{æ\‹méÉùɨ/¼<‚šfÞ0øâv½¤YÖa³³&$IŽÇÑa–Õ=ÆÅ“C¤ F»æjN³lÑÙ€äxˆ[ÏX½¾)J‡ëïpD}.E?HNÉŽ‹€s‹cìæšò¢!=9F‰–êü’θ`Vµ=á»ï4z˜âê›éÀÑÕa(>;&Æ´ëS„¸ªÂ;‰ŒÞ)⃠¶=%&àÞÚÙŒêbCöø„ág4—ç¬ß\Cß›‰‚cʆäè˜âÑ8nBâ]S ïè6LÕ!ã@¾pMÛŽ-ÉÁ éD°þå §rÏŽ‰"ÃêÕ9m0‚ųψâ–ÕË+ôdBþ軜S½½ÄÊ„âé1¬T‹TDœÆ8Ó"‹ éÁWÕá6Wý(lþ"uŒ.bê‹ Ê÷«0)z`»¶­%|J6M±MÆ•‚½’^Ûh·a8â @ª¨UZßlX¿¾ÀíàÿȶéÈNOÈO†}`ˆÙÙ¼–pÜÓ~àúÝBì{ZÃÎjÑ–÷‘Dn1ªåÎX¸+Ðm;³þ¬žA§ÔícÆÎoZù ¥S*HÖVœ—H-h—%é“'ĪŘˆx’†(d!ÁYºÕŠfÙ0xv‚]Íé«[’ãc¤ØÐ”‚tœR½»BF¶m±V1úú ´k–/®ˆ<RŸŸS_Wè"h3…ÔȬ *ºù‚ÎDdÇ#Ìâ2è'-BäÇÜæšõûK¬ XJaj0@Er,ä MÓ‡k"B%Þu¸Æ"“ß5ˆ(ÁÕT>&9ˆ©Î®:'D4—sH ¤vt‹ ÉÑ!Z{œP¸õŒ¦RäOŽð›kÖo®iŽŸXŒö…²#büÅ íÅ9õÊ„c?®Þ&ÿÝK™A<¬âø{×ïÌŠî£ø'ºr±mÔìå®5¤Ç'§ƒPØî$HþÃl‡mò§Ü¯¥¾Û›ìú†æj…ž cµƒ lN¾ßC}³¡™-¡oêá2î4NÒbW]S¡F Žsš‹%>Šðu‡ˆSâIŠY.hV ¾u$'ÄM»±d¾­iV*Ó˜ë9Ö)T$hk’GˆtÃêõ<àRû/BnCª¼Båi †u½ì"̓²lBg8é [D û•åÍáOW–èყ‡˜Å:„iéžñ l¹FÈx€$D&jw{gèê&˜ç‘ˆ$#™æHåqMÐ?wóåû%ñÁ Ùbõë;ˆ†¤C„ì§ÎJâ‘a=¨@2\µ ­ ;á«5ŠêÝÍÚCH˜kÜný¿ñ~DÄÓ1{‡`ó¡”îötOöIºëk ÉÁ Ôˆ>x—6>vŽ(ÂÌç”ïçˆ(º‘pL¾{F¤ õl’›b‰mª›Œs=z,CÅÐ.W˜6hÌ\UÒYA2 ã¶®\Òm:t1&JC¼lh£{œ•!qÎwT× ŠüøAK·Xã|D2á«%›‹kŒÄyŽ$€Á£BïrÔÃ&îî_ DТyS‡CÁ6aÐß3Êýà ¸':ÒÛ`8ˆs„6¸¶ zÞ}ãÎq¼ÜËþ E@ÒÃûˆ©°@)ðÆß¸ƒÅšÒjE]ÓfC»n°mKöÙgÓœÕ?b¢1Ó¯¦,þü 9!L‹)éã1ÙaÎâO?`â)ƒ©dõë’äp‚oW”×Á  ”¡:€s–®n(ž?cp”S-@j|·¢ZÆ_=Ç/.Y]Î  ¬ Œª¡]µatçlÐF&ƒ§‡(ŠÏêÝ{š•G§ññª9³ß>eò¼`þçéHÂ$ÀV†Ñ·_kC[ ЧSÚó3Ö¯7ćchKêÙ‹DÇ1®¶ÄÓ RÔ˜J3¼­é–Õ.ùÒšš®òL~÷ƒÃ„újM»iC÷°\aj‰Î|ÇîôAc–=S½aþbÎð«Ï9øöÕËÌ~¹@ ½#8l&»ÃOÏ5« ñÉc&_õI•-ÍlRÎxÛà|RÉØc6Úe…uŽìñ3‡’ù¿ýH'r&ß}A>ðÌ~zIµ2ø¶cô»¯‰Øpùï¯HŸ>gòüêõ[šë%m'ÈtÔbÈy†Ô%5.$Ñ(¤Ò4`‡ïŽ¢¨-ß¼añò:|ÇеeøÕsÇ9®ëSçn-v„ô¬ „X„)’äÃŽ­”¸rÁì‡7ø¤@É þãúOÛò'<âZÛwæü‡A'{ñ±·˜|Òõ»p)ñMM3«n´Ê¬a¶1åCÒª¿3Þ¿†9 „™ýÞ,øA³ 'àxÚ²i%B LÕGë4*ÚjìeHu5íÆ1þæ1Íû·´‚®#yüe®)7£G‹¿¾ÒÌŒ•L¾ÿY/X¼º@¤C²QB·^aG”Å}1Få²#Mõòœ¶‰wBýæó³†Áé RVØF’NѪfñÓ: éJÅD£!:¸]\¯Àû.pomÀ´ê4Qc6¡ '”G&Ýâ 5:apZ°yóO‚ŠEHSŒSpÕåŠüÙS”­ "ÍŠå«ų'Dºäê?ãtŽJz)×ÇîÕÞÇ`ÛGÆñ¿|Aóúë¹A'QÐK?¤í÷LWÅo¸^ˆ^Âa( 0ý]Ìdÿ¼U-ùó猟M‚Ds?ÄÂ[lcnwÄ÷C…¤ÄÕ5í<ö¥’¸®Ä”™e7š[q‡Ä¥4$;ý©Ý{ÎbÚÍ ©r¤îh—5]µAO˜<P½™ƒ˜Ú Óœ¨´Ë5]cñ­!}úùPQ/jÒÓ1Tõõ:Üg&P¨„Tg×d_E¢V\þå=q‘ã¼Eª˜¸Hð¶ßóÈ}Ø·zAÛ7 “¾c¿e;w´« ÎJ™­+šÅ†ì‹/˜<›P¿Ý"³¹®î‹EEWvÈ$C§6 f¥¸ !±†¦lˆ'£@ÕééÚ'cÒƒ”æý9Ë_/PãFÏ,ÿô>Ž pŽøhmM[š s5]¤ØjN½4¡ãëÒVgŠv¹¤]¢Á ¼¦ÚÞh–÷&BGáù¹¯ÑðAívO#C­Âä[§=¯ZE$ãœÆ´¿߬©*iÞŸ1ÿé=òF¢Éé(è+Lc}˜AFÁ¸ejl¢+A†Ä£”úü*H6F9BF¸jE³Ø òb×B÷­E¦1f³Ævž¨ÈBg­ ˆˆ"¤¸”ä`‚ŽC—²¾šõ]ÎÐu‘¯Ü€ï{E'ƒ¸=`¿þ#§h…ˆ%®©Á‰„è¿ ß?ÈJÝÒ½yoqU‹HÒÝö¡“ÿÍO9\]ãm¸K-ñA9Q‘ „#–‹¨„xœ£4tUM·ip­# Ú„ÅGÑcà*ÒáhâL€¨‹4@Ê]Ýì`þ2 …–+ëЩ—à±¡© dÛÐ\/ñQF:Éh®‚,D+C3/7Ül¨.èƒ)qá‡Î <Ÿ‡âQú[DÛv¨Á%›à¢ÀršdZ`ל¸ÎœNq›ÕuCz< c¹ëu€Íï°…IßÙº¦Ý„P¶!'R!ÓºMd Ö„E†.¡Üõ¼Ç¶Å`jê«%^*„P¤‡c¤ ’f¶ YÔ$Ó ñ(Æ6Ý.¤! >‚¹LHY¯ûg3îa,‹3 Ö*¢Ñ˜8—`Ê‹%žà|½É;ô_®Ã´©2ÎHrš‹KŒ F`¥%¦np¾—cuY ˆŠˆîr†qŠäð%mïjî;˜J÷.hÿ@¬µèÇá[”£¸'„$ Ñ‚ác›Úô@œòv+õÕçÿñçÒ‹DEz³¦xö$·OÄâƒNñǯ¿¹|ï=ØÞ${]æÝœ•… Ø–v¹©?á=÷8ŻӺí4LË[]o»ðl‹mŒöM£Ï¶}b—3¨bD”B3¯HO®Ã¬Ö=ÈCÝhYã(ÜÃÂã…Žf/ß±A"¥D*Op­Áõ¦À»[V8b’à Ql¨Î¨á”86”Ëðz2IWwèXÑ-k’£)Jª«9¦²áQMÃZ…ø¶ÅY¸é¦Á–%ÞGć¢ÄÓÌ–teG4"”Ŭ¶á¢¯q-Þ Òé‡äQ!#ÚùŒnÓ‘LFÕajIz0AØ’êjsòFÆwoÓÖ#¢$¬4lήqN÷h¯ÿhGø7=ÿ~çö³3{Òǽ¿'£ð¾Å™öƒgÇ÷Úè¶¢[·DÓ)RöØÝ{ž .é–UãÙs!orE¤C°[ס‹QO5ªéêÀ¡o—+PYÇs»—ïc­Á#tÒÇÞ[’ÃÝìgC¸Uz4Â,g3x2¡/p­@çŠúrÌŠÐ/ëéO¥)2Qت%™(\d'R÷(·ÖM3ºÕ‚úb^›”(­B`èá³ ‡SÕû°¼ëµæÎ"“œh”ƒóHai®æÁT߇!¹ºˆÇéJLã‰GŠêª&=>Bù’f¶ 4deÞ6ásÁ`75¨¦D…¦]VDÂvvušxíЬ!ܯë'D[w€$ýwÀ߉±Ø ”¼Õˆ ¼ý’uÿº-´ „¯e‰Pjå]Œ†Ÿ?!E˜zCs]î…Á,%Rô0Ç·kš«]Ó`}Âá?Cµ\ü¯_ˆŸ>gü¸ ¾,i¯ÞS. Å“Ó~¬qµEç9ååͦ%;œ"º–zS‡@J”Òˆ(gòí¤©QyÄõÿJµ‘$yŠm*„®h”“Œó^£ÃMŠÏ~l¶8SáÚmê–¿§S,>Sù°{Š&Û”x/?ì<Ýí@?(á;C¦ŒÄ®ø DIs] '¨ýôWñÐÉJ D¦uȵZbVkâ'ŸqøýÌbEõöœf±Æú”É>'’Í|Íæý5ÝÚ’N‰2‹©z‡³±7ã’`h[dšaëÕå=™’M"̲ <ï¦AdŠÃ_¯ƒ– kÙ“Ghm°$Dºaöï?có#¿žpý¯?¢?gò4¥:»Äë!¾]±|qNúùç ÍRMàòý„ÌÇHw{tã:GöèéKªYM”Åt«$&_OYÿø+m-0UÇÁÿñ~þŽ‹¿\2ý—?ç—ÿ㜠1®Á š0xr›ÕªÂ‡p=¢ðÈÁÃÓˆõ«ëyí<ñ8Ggj§¥”‘¢[®1­${<Å\¼áòO¯ðQ *çðŸëÀŽ^üí'f¿Ìÿî¦_ôÒh,ÎÒ\— c¤ #rkdú ®±˜rƒ±ùÓÇä¢[qý×—4­DÉ ýRˆý«ðmƒ•‚daë0Js›9õºC% :iK¬$y˜ØIN »º¦*ù“Çh,Ñ8ï¥UìXÄÛà–~øV‰¿Ó޹~‹lç%¦d4w»¨×}å Ù­¹ú÷_h]q좄?Ô3ÜëOðÖa6 ƒ¯¾`òù4t¿îv’?xw:¿õúÛ7¬Íu»ÙOé÷DÏî:§}Aéoé°ZÃX“¼@ÆyX‹ÜväªðmI3_ížãmЙÛ#]Ó>û’áÔ1ûñšé¾Âœ¿£^T7D  üFe9PãM6ímd+Úù’¶6ÄÓ~Ý’}þŒl,)Ï67È)!𦢹žÓu’üÉF§ ³?ÿ„zôœ°¶?è@û;þø}Ãë=RÅ[r£÷*!T õØîö?Ë´{×8¹Ýv DCÿð±l1]Ÿ+o>¡Âý×.Ú@†( Ñh˜åâΤjw¹W·*A‡V¸¾×£QYŽkWÔ×%ññ)ã/±óõ²#?M¹þ·ŸQ“ÏHr‹)ר¶ÇÍ:Û, !tG»2ä©Þ½¢³ÙhDz’Q¾ |ùÛ)Td©Î7DÓ´niæKºÆà‘$ƒ ñ4£›]P­¢$‘‘Nê‹‹@}Š#œméêŽôè„É7q›+–?^" ‚l:À”žÉïQ½xI¹òD‰º‘èöf:çDƒ40Ñ·X]0ÆQ‘ÑUKš«Šâ«/ÐîŠÕµäàË!W|Eþå7 ÆžÍÛ÷4› ›Ôy÷È|IsµÁ‹1ùzÄú§w¨bD}uF×Åä“ *—½BOáMšJ»éXD4( ×*‹ý&Ævoq7>‡ýæ ‚ÛSÀ>íxKŸòÖÞ RÙŸ TžP¿zÅÕŸÞl1vÿ´À»‘íñtDóu³‹QõÖ!Ó©†=NÑE ›^ °t«MÕ÷Z8ÙÇÝîB âhÌz½K,ó]*hÌTü\]†háL‡'èÛq-¶sxÜØÞA4 ¡@7Uˆ“ð ˜îVºÕÎèÒô÷˜qô2ΈqŸôÔVl×ô ®2ʃLstªÃýá‚B÷XgÞ´ásÐ:tª:ƒL£°ù‡ÊS>0Ó—%2 1¤‚>RXhµ#ËíR·Ä~¬èMÆáç\]㌯٘ð UÞ0Îözï©¢@Ç!eÐ : °û²Æyº$ZÝr2‹íæå|Ý 0Ùw›ƒQE3LÒËT\^¤uˆ[ošp+Ç:|¦âY‰ÿ˜×HÜohòý(ÑÙÞ,(î½þ¦@»P!eüèܧ=îΣò¥{RPýšaw‘²÷½ñ`‡ø·½çí3ìL·ûÛW'~¿êúãe^Ÿ¸&m#½uÏöADBÉ^Åžàv› ƒn“¶ ]œ~ú'•,øªícµý-s˜ÐQX¯¶ccA—¾±_à‰PÜ |ßAÛa­ë;ù.tÒûà/™e( ¦*ñNÝ ÎzV@,Ø+H8dÿ7\x´Fª›,•À–5^FDƒyå,¶êðÂcï¦E ÆÒU-Q–¡q©êÚ€¬l-ÂKx (ÐSbT¤0eÙ¯½Üh€÷§ÿ;Ñ[)Ïo1þ'u§¾Wr„˜w©ÅíZ†€¯°î‡‚ÚÛ-ZïžE¨Þ¦b›½é0›’¨:Ò°¥œÆ\až…ïÙt½6Xáºg<Ñph ýTÜ7 Ö8t‘÷¯ÂÒÎWa_gk.mQiJ<É1«à“yŽN{„œëM«ý½H¢÷ȰÇP©Æ,Öèñ8l5ëo’€«…@‹ÑamWJЭCý&¢(<§Þ£²¬GŸÞ^œs{Úà‹°›2Ü»*ÈGdž£‹_o0e e¸¦ 8:cÑÃ,x¹š®—ƒ¹0ýÉtx€S!zܶ¸.Ôh~ûlÚ°Ï…¢ýïßá:‡.Š>$Œ©¿é^ó>Džk” â#ë¶”ø¦Ýƶ÷´£ôèˆt0@&³^aZŒ"š«úÑgŒçÿ÷_!’MHG1ÝüŠznIަØê’jnP¢ƒ#†ÏŽˆ1vþž‹?¾Àˆ8œœZÏ䟾A‰†õÛ%ÙÓChæ¬^ÖDCIsµ áó–?¾düßþ€»|ÁìeEqrB<ŠûÌóDä̆æº&98Knw¸‚»¾ÂmGãwŒ{·£¿ïÿ£×ï-B·OÝ £<<|\»¢™µ$‡ýÈjï›ÛSÙê€v„ 4TgK&ÿôæú-Ë·:‹qMC³X?~ÆñýaZ¨ç¼ÿ/™ü·ï©þ™– ÅA„mJ\ÛÇk'ɸ#/À·´ó9^(œq´Ë’èèˆ4stÞ¢FG‡‚‹ÿïŸðé)ÃÓ‚Íû÷èÑ I"ˆÇÄ…bþ§Ÿñé”é—¬~>ƒ$%? eÍò—·tM@µË =:dòÝÌõ.þý%ñä ÉXÒ^mB¤vÿ=K-è– êÙâ%%]¹BŒ¿|N,\þå5é“/‰h1Æ¡"I3Ý÷ôô˜ôpD<ˆñÕ‚ÕO¯Ù,,ÉÑ#¦_¨ß]Po4ñ8ÁnÔW%º˜.˜'ãp0s5õå‘ )>› ¼ fÈ"#D;©ßnØÞÓÌ6È4#è€4r)ê7¯X½m|þ8DÚ»†f6Ãû„h˜Ónæ˜M(øÛº"}òŒ¼l^_´£H>³øáGª´ŠI'è\îºÄ7  ýèiÐ.LyZä7£I(ú‚}{:÷žÄ ~MˆÛæv ï‘ôƒž]ëÀÒÌt‘‡iÌu,îÄTû›‚l›`ª ÍìO?²<¯Ðq/M{Jç÷d_S9þé[†§Ö¤Y³¨QYJ<ê,÷¼ñŸøžýÙ…§]TØ®÷Wìw@öÑx^‚­i—« ‘ÿä5l×öÞ[S"ÊÑy„Ù,ifë¾Ø½Ó™Ü½–0Vµ6tééГÿ{½è%NÐ.¬u˜õ"˜pû¦AðÔX *N¢as~sÊ;d’’L' jlcCbæº &_é1u…q1Çÿò¢¼¢œ9l½ÁX4ƒ'›¡‹‚ü®þõoX9@ë¾±` OH¦)fµ ¾\b…@ë8lØRbMƒé:’bLœ¤'ä'CÊW¯)/:ÒÇG$£ š—ÿú#­Oˆ"Y׌ÿùwd¹gùË21Ez4į.8ÿŸ?bT^7€­Ï¤nHž~Áô³”Ëÿߟ±"í™Ýû÷Aèš)©÷ð¬þ“ü&«»FúB‚$δXg¹`p¦ù·j ?-ÅÓ[‡m‡ÿü-ÅTcÚ^¤5®ϨL/<0îüí¤Çísª¶ih½Ï‰ï*Úù"<;2¬«åÙ[äàˆ$1¬_] =áè÷O¡ëðõœ«?':š"Ì ×jôhˆŽÃÁ1žf4goi6ƒçSš÷ œéú½S"DL4,¨//ˆN9øý ÕÛ·¬_\ ÒxD2JÒÐ\VDÍ»÷7 ³_4"ìœò}‹J=«· ÿ_¿G®¯¸üË äpi›5>Ÿ2<"Æ åâü ™="G@­Âs S½‡tó;ÝÍZ#ÊÒ.ØÎ£’˜v¾ÄÆÏN°óKÚ¥Eæ _m(gK¼rüÏÏi¯Þ±:«QIŸRnˆ=ãà«Sª¿Òµ’xzD~¨¨ÎÎX¿kˆ†câI_—Ôvïuݨx§‰'“ ÙñûÝç½ký=~±»½íïîdâqœîvz{/©"¥zñ+—ÿ¶å-=.=¹Â„VáÇðn6uÏ¥ :[z oØ}ÏpŒq]9‡ƒÐÑ^m Òa£õ'¸¦ÁY‡¡m0¥AåQàÁh¾LVYÔŸ¼nBþÖyãf¬àá_»ópnq<7`‡Ëÿ‘ëo™CéÎN8œ÷7\é=•˜ßf˜#vxX/EÀ°ˆÐ±qTãÛ»Ô¸='D± Ô$¦j‚¾°jQÌ`ýÈCè~Ô6A¥ö4Œ: üdëB¼võ'Aƒˆc$Ûõïwã`|`A ïÂ)UKT’€ ¡.z“…éçB‡ñ\Ý„{M€íºStó­o£dé¡Ûïö¤ßƒÑyŠ]W½ßL…è]|ß‘Wø¦Á+‰*Rèl8F²ÿ<¶æÙþþv6|Ol£—ý͉Ճ*²Ýßwuƒë5ÿ2Öá9R*˜ë|è¶ÙÚ ³Ði $…Ê"\Û 5at%E˜®l»¬}¸…ïAèb4SøØužb7ÕmoR½î°7Põ£øÝ¡ ß›wô+¼qýwév,ïí¨Òx÷,þÝP‘{º¢÷išwA*>hmå6àéëok¬·ï3tz½*nαnïù—ûI¡ôSÙwa’£ò•ÆaZaÝGrWþãïy÷›<¸ÖôQÛo-ñ=R|Ä(ù)k˜ßþ>ðÝßò`l'(Š$®jƒ!BÒ¤³¡$REa:Ôµ½Æ_Þ–ªx d…ûÛº›éLÈGq"Rø¶C¤ñ®ƒìûà¡£ÐQ³®—d© ¹Üï`í\wöŽÞÀ L™DaŸs¡ã~Tö!,•¥Ð„÷ã…ïµã ÒÐáCiD¤pm *!dÐ5t›*¤Çm%Kû…ñ®!¥À®kîGËÜñ6oþ¡æ¯¸ç÷ý?©·þðöTIO×aÍ*tMÕ"’œ­àù:›nÛ5¼¥ÝN3¼ï5Ð}°U`ö«Þ<&$¦êz^z`‰Ë8 ÁZqL4Ìpeƒs lÕöIÈÁ îš¶ï Xd1@Gá î}0j²rxO·®YÜb쮩 “¥|xßBà¥Bgf]… -6è°…@Fg;\çÑY¦Œu¿çf ®ÙNuýÄ,»ýi[Anÿ}›Äéš0‰õ; w„Ò=Ö×Ù>Ä%4\hbRnwxÿZKºÅ EAå%жØíþÚÓ_>(öîxVMü5ï§ú÷,ªBöS+ƒ•%ˆý{é¾éö:Ðÿç÷ âáèøÿøªë<Ýb†5[–´!Lƒ¨Üרuˆ†VIÔ'Ähd’á½%=ž4åûeÙ% ÒWTW5“ï¿À\¿gñö’vÓ¥“ï¾$jÖ¿¾ ,Àã)Q®ÎÒÎç,~~‹A¡¤DxE< ¢>MèvpÁG£›³säàˆl‡‚RJœ)qu·÷…Ü“wþ ãý¹ž]øÜî$Ëdˆ7+ªEKñèl»wÁaßw‡·f*¡¶›5í¬&ž µÃ™°a¨DÑœ_ FÇL~w‚]WTgïiçYÄø®Ū ¿~t¯K‰èÐ}Æ{t®1« gñ$ÛŠòÝ™4×gˆÁ IÔЙœÁ ̘1ý¯ß¡íœË?þŒñZ…z;[’÷5ÃÉü/oP£’QŽÙÔ¨4!.4¦íPI Þ✤>{Mµh‰óOJ2-ÂB³ƒ¦lÙ ¢‡ÅÐlTkÒGO=S½_ó?ÿDk4G<eùçÇØëw\ÿ|EqòE¸zFµê<ÿ‚ÁÔqýÇD'Ϙ~=bþ×™¿XRœ<"%`ÎÖíF´›N‰2Asu…i}–XÂéÛvˆ('™†Žu<Œq]‡©<2æâtA<Éû ¥ÆVKÚë9è,D/ëŽæj$Ä£!2S´ó®‹H‡½n²ÄuŠÁ³ ë__Ò–Á€¨óƒ¯ŽÞR]n_s‹óˆQY„mV¸FO§è<ÚÅÍ ÑÎP‰÷7µØ×&ß%Rø;]ÐO¸¾¯$ͺCjLöÑoâ^Îì]ÂŽPº_X*O©ß¼äê¯oAkTqÀá?}²Îõ…Ï^z¨Œ‚+»]„ ¡T%lnÔ?þž÷½Ÿþ BdöNm&ÅG:Ðͬòý”5Éÿÿ™ûÏvI’óL¼M¹ yDÊÒŠ {zw{ÿåÎ?Û™í6H@éJ}T(—&öƒY¨#²²@²gb¥?áá&^{ÞG„{u!ñ U¡Â\8úüByú›® IÄ”B6ܰCÁ:‚®8ýÝgd&nH‘ ¢pmãËëýõ:ZSÉ UTѲúéÓ?üŽÑß¼¢½i0“ ú†AUœ|ýª{ÇÅ_Þ1þü#êï~B>"4—të!ñ‘s²“òùSÄMß× ®þcÅ•)CÀ ¶ríºlÛ gO8ÿú”Åÿø77fòÙ9¡YR_®°½C›ŒüüŒâñSìÕ+.ÿô#>¯Ðº$ŸÏP¹"ùÖ“cªHŸÓ9‘ã. ù¼BË–Ë?}ÃúÊsöǯ˜<á¿ë: ©°—o¸ü·Ÿº¸Çïv¯ƒÙu&¥Biðaï¸ô=nsšc8Ûïu¬âÛŽÿàà¢_º>8‡­f¿ýŠéGlg“ÝâcÄ=AG[ôÙw=C㎸¶…šè®—øP0ýêœæ§¨ë‚<ïhn²ªÂ®k„6˜Q©a6 ²‚òé)vy,çL¿<§ùùG.þù{Ô£xü_¾Dô5ÁG{ÙîjÉæb…šœ0y>c¸¸@ŒÎÈGËŸ[fŸÏYü¿Ñ2†ï8¢=ìu´y“²¡_ö˜BÑ®j”ÖØÎSþ¼Ò)È,ò£¥Œ^ͱY&½Ѻ1Í­â7¦zjÌ´ˆß©~ÖB†(ØÚþ#0rJ„° ]Ý TâÊ틌FJpÎ!”Á”ŠaµÁ¹HqAafø€«P19n_TÅÏ*t´ç ôƒà,Bg1`çNñïµ¾ÆîÜ\”7Ð-jÔxƒ#Žö[ñþûßúLQ9½¡]6qá49ù|„tn?[ŸAE‹,»"7N)T•E爴ÆDßïcg€bLô=MñÙ„„ø? æ:J-”‘ϸiðŽ_wÚ"+þáæƒTÄ;Ðv:°‹ÃV¾Ü!t;Þ¡µqÌlëB6bkÕ{A6›ìéÄñm›»nÓ˜–û1$Êúº‹Ž6Cƒ""Bêô„€.G¨ÜÓ^®Q™‰˜:®E.…ÈH_„‰c¢8óf…Gíÿ^ÈQ\&|J·Í'†îbó %á™ xŸö4@f9Ù¬Àoš˜ «5R&ÁvsG$Ý@@¥0 áfE3©ÁÒÞDªd>Ÿb²ÈÝZVJ­]C»X'¿âÀj…<ŠGö„âÞVèqÂ`\¿þg²?‡6ÍÇ1ÁØú]ë®ËÏ±Ë‚Ô ×4‰£+ï<Ø¥; ô¤ÀÕ5nè,àœˆ±ØÛ¸ìdç=É“ÞF•#òi]¯h¯7Ȫ¢˜MR¸šeXµéœb'FFzœªJ=CÈÆ9v±Æ ™\ŒÒáHF¾/RG„ùÌmv> ò"R?}ÀÙ”x«b¨Š,³ø 6 J…]5i¯J1ØÁÇ ›È'—ÙÁZï=®îc-š4ÒÄNe¬5Á5xYPÎršw+T™G‡žªÛ3Ô6‚FÇ®ª ÉዽpYă¼Ò¶4Ö”kôÞ˜Üp”¼ç²m×T¡'Rìú›ñ¿•Ä·]ä¡—åþ™öªãþZâë†~ÕDŽè=šN>;Ç]_à¬AOF¸f‰m<¾ïP§gŒŸÒ½zA½X‘Ÿ=eòü솫ù‘âÓϘcòùÜâ5«Ÿj²³1~}C³°Ìþá+ª‘`hâ¦?¬Öe(ii^]зmò{•èò‹üØóYpÀ””„¾N-jçG/¥Â»ž 5’9ÐÛÌ9D1áô·Ÿ mMWÛxHN5‹, nyÃPƒª2„É(f9íëW¬ÞÔœþÓ—¸·¯Â»¹$˜ åDÑ]/é×Äè„é'‘ë ~Áô÷_â/Þ0¸1ºß6 ëszNõd×Ôôn¤Ö(í¸ùë4+Ÿò3H’Ùö5áì1¼ü‰Õ;ÇüŸÒ¿{AÛT§°Ëk†ZÍó:YœWœüþ D¿¢¹ZÇ5ÔzÌü3)]<ŒéB%¡´@÷$åYÿŠ §Ì¾<§ùù'®þú*Ų'g‡ðKèí@rçô¤ÙîúåûVL·¸oû¿ÞrQ‡eCõÉ'Ì>=I>úánj;Ÿ•Ä÷×z„‘;ËØýõ|Kwy…9ª,Ì Ãõr|N–w,¾{ƒ-Ñâ,äÎQÂ#³ŒòÑ”æõO\ÿízTŃ·øn ˜'¿ýŒ²²Ô¯/Ù¼Û$–¬Jçé€.'˜Ó)&ëYû’Á‚9ùÉ,ÅT‹½)€ë±‹}o)NÎQ™&(Ï 6?þL»ä§s²‰Ž!­ó²SœÍ]i·ÎÇp"o±mÔ©Ò$@&3ì4/‚H#ñ‚¡nyŽÅ•~Õ!$Èl~M³°œýñ97ÿã[Ê/¿¦,d†þêšõˆ¶ÅÌÎ)OÆ‘bÚ‹k¼Ô(mxüÙéß­ ¢ÂŒ.öwëªíõgù â¨s¦Ë¢n“FÅ­}A%º°óûg¾Ã™Þ¯©ªÌé^½äú/¯¶.ÿ°@ª©Ê ‚H¤–J‚Åõ×µ sòñˆ`cÄ´®¦”ó »¼fýnCñô1Õ\Ó\.VŽìlŠ’íEy”~`h-ÅãG”#M{yƒµ*úù&Njè~‹mͽD'ø"ûØj.Â>Þ1DûyK1.d`hº‘?}°`><¡? öûï½SÔ´HÞ¡‰o<yB"úïPç÷þ¹·¹Jô=×µ;XT™“=¶‹ªö®n©ž="/Ý¢fØ 1` ‹B£Ê‚|VÆ#`ÚˆBpô7›ØaHhÎ.Bi²Ùé;Ö/ßáEIV‘^â,ƒÐ×´  ŠÓ1vqƒõšêшöÕ%NT˜ÜãÝ|)ML_r}¯[.£‰žBâm‹ëBD¼Ç#(ÏOÑ:ÆÎ;§Q\ï°M:‹èÊȧ»è@úÍ’@ÅøÙ vsC·r(­Py~M»ö³qŠï*§z)Û;ÀѯV¸ ÈÊ<:ZdyLWò.ùŽFÿÞn±Àœ“O·ê2=(SªüÐíg¥$B™\a;lç&ÒS‚©l~~׊OõyÊDô 1Þ¯ÒJp€HùƒM6zfÓ"ª¢÷~GÑùà6z{”l÷ô-mzú«5Îd–Å1%™Pâ~ë®ÛFïùL÷"V·¯O(ô°hvÁ b¼àÀÌ*T®Ž)2*ñû›:º^Äk<Љ  d÷ÏæãüŠ¡(âš\Û.Œ¿K»ç¢KŠøðu,ÄúCÄ:R]¤Çˆ€ë£ë@ü‹€(*ÆOOÑÄîA¬¯SÄýUeÎÚÅ‚®sTON¡ipN1ÔKÐ%y%Ö CÛ#LN6“‚æbEñ쌰Y3t" ‰|DÙª*U½ñeˆ]Ô\Ѽ½¤ïü1™\|Ü 2SÅ÷õ‚æÆR}tŽ]\зš¬Òq]ÁÊèL0 ¸¡Çc˜|ü˜P/±Ct¾ñ>ñºÓ<ÚÍÇ-´ÉÑFÆÖxw± ¨‚ê鿸fýfÐú^ó•åK©ï¯³Ù ½K!|çþƒÜªþó®÷ƒ#;™‘O‹ä¹üÐ|ŽÑßvÝDºÇ­¢éXŒæS‰FÈègoÛš r´ 1>=èä9ðA’+$1è%|JèÖlÞ®bñ¼ãíУ§g=Ð^-in"_‰´hܦkŽaóÓ¬]YÊ‚H÷€Ç5=Îy²É %Î:²y‰],é6>Zf"F™»t@r‡ Fþv ŸquÍÐ8²ÙAÂó­ïo霎:Û½AìB:ú.P=žÒ¼z‡9{Df"Êkbk»™UdU–ºC-ݺMN< @ñ"ºrøžàstùÔ÷‰Lãÿé½]éáøõž MŒ…în4÷ß¹W ׬æÝ atB u1~ùá-n•K6?¾€rÎìóG1*õåuäe ؾEÈŠÑ“y2ÀÎvް+6¯×Q|1š0y:¢}³";„‘5W{IùÉ'øëW8}ÂäÙï$¾¹bõóuTeKƒ™Ž€(.‹V¯"¢µC"ƒo…‹[Ež·Z›U£ŒÃ-®Ös:Cºšõ«7Ø^!QèÙ](|×âš5™Fî´ ˆ°¦½h)žÎÙüð6d(}ü¼¾ï1§™~ú1ÄVû°Z²úñšìé öÝÙù3й&‰ïVl~¸@LO=ª¨z»ŠÒE×ù W_ãzÉøãg¿¡ysƒšžPœÍpËKê·ŠgO1yˆ|/ÐU‘5/_²zµÂŒÊoÞ'lÅå>>{_<ŒÇÿlñüÐõ¾"÷h»¢Îç„&…(ê™Â.oÒÁ6ŽÁìd†p!=ÝÕUØRÝ;ž\M÷n>{ÂäiAóry†[-°¨Ñ„òé„îõ+šE.LV«HŒ‰¶=nðV‘Ÿž2~6e¸º†bŠ-Ýu9›¡ÂŠå7Ï?BÑáê5®ƒüñ)nyÅ úe÷ÚвùþNåägç䕤~õ/2FÏΰËAVçc¤HV¿‰òèûHÑ2ö{ƒ|pÝÞ­I[Ú©qï_µ¨jB1É7›ŸFêàÍšìt†Ìâ:Ðß,h¯Tfb xÐQ®2ʹbóã;D9Cš°m„Tx[ãjw,Ü!Äû¸sW[Ìé)Ù8ßíSPY:ÄúÛÎCâáú^ßèýõ"7 ¬ºDdÙ¶€.§³¯ŸÖëh„£~{A0#f_>CØ5õëàikdVü€Ð‘j›BÎè“9؆æ²Á7\6aöÉ”ú‡·ˆrJ17¬|KñÙG¸·¯ðÕ£‰ÂzpKn¾y“D%&žòtä_ÆBÀïZ_[ñ´pƒDê¡¶^·1x ªTå±bùPyüPlö½6<¿pýí :‘ÖmÛ£ò1Ù$ÇÛ6 ´úyÀ5$8ð ©Í®÷-ŒFHO¿X.ÑÆÓÝÔ#&?%3›Ÿ_Ó\{&_=Ãonèk….,¶ödççä™åæo?t¾‹ýõgòùGTóĵ-Í›K\/Q…N)}1þÝ[‹múèeª$¨¤” Û>}4GꕆM™MââÑ˘h¸Ýè‚‹é“ÎRB•£L¶Km Á#¤&øŽaYÇxX]1ùô¿©Ñ“‚þꊡ—H<ú䄼Tl~~MÈ&”§šõ·¯Õ”l4"›kìrÅæí ;X¤‰‹cvþ„ñyFûj0×ûø«U4ý÷P=}ÌèÉÛ´´¯.hW5An)Ñ`Þužü|Ž è¦RtW× N`Œ [®Ñó'LŸUl¾ÿ Ljñ's†ë%¶7è2¼B+\½¦¹Z‚1(eâ’ëä¿/e *W»ùpléHœc„I|ßÃEçÖ<(Šó)‚èH8H†Ú‹ãŽ Ü£»Åaô:ÝP¿Y®(æU<‡û¯?¶Œ;¦&nÙ…‹¹{>Óë·<É!FªCêºÜN¼‡÷Í}I„÷^·»²k7K;t.D­Ã!hà‡8¾E3G~©Ç(½@ïxøG5Lâó)øž¡é¢&#ZÞZ¼÷xoqMOþä)³ÏΣãÅÐÓ]Ç„ÙëŒÉÛ: ƒi \·Â…‚É'§ ïÞÑ.{̤Âo}Åu¢rò“1Øhg§GLáX|û3N¨ QÕˆl¬?S%“cŠúuMùdÊæÇi;™4™[AvÂëéœñ³pŽþúŠõeKq~]ÈÆ˜\"«èÙüøÆs&OG¬¿}½ß…Ƕ31¬.°ƒ¦˜Ž2ñ«¥Ae¡oè×=z2¡<-é¯UäÈ2šW¯X½\F}PßÞÛU ÷VªˆŠî>ѱDP¨lìÚþÊ(ïÇõBÀ°j(ž>eú|ŠëÝ{ç³ÔQ2l,ÒȽÏ0¤F¥dLp¸¾ńΪ<&´—KÔüœÉÓŠæå™k†õ g5Ùx„Çâ°«û¸$(’rDæ#—à%ùlNV)!ñ‰ƒÆœŒPaÍÍwWg¢uŽbf?Äy UÔšE'›Žþz‰WÕ“3¤«©/ÈjB^˜èfåjTFM™·‘Y ýu&&h¶ï–  òi}ÛJ¨nH5XÔÚØÍ†~£Ð¥*€–~Ý¡«1JÇð´âÑp¨"cXܰyÓ~•€Aa ùT²þ¢³´Y@ð=~ö£~ï–tâbw'wëXüÈÑE*;).2¶xÑݽç={Õ‘](sCñŽå—È<Ûú@«©.3†å;@q~Nu>a¸¹¢~»@”´ x'}ôˆÐGAˆë›¸`*Ez^\,ôd‚Êóv½BO*ìÍ5}ãQÚ€p1!‡,&d“2Ìž`;úeŒvVzÛÞ’Ùþ/]·ž¬t´ãŠ­ ‰ý}¿/¢ÿS{PwûbÁzdU"¥Å®»d'~Ýïˆ;Q , .ù4°H­Ïi¿G$‹]'¿Ì©aóòŠâéS=CâHÙMÍ©M–Ôoר¼ˆ±» oS쪈V[ÙÉ)Õã Áz\½¦»¬)ž?F T’aÓàe†Éîãþ ”’‘ž6çÈý ÛÎQ, ×KÜ ÈNg°uá ¾Êáæ&Ñ%’]^^Æt¶UƒO==Eøo;ê— ²Gð›ݪAWãè2áÀw HCv2CKð¾aýãæÑS²<¶U‘1,WtW«$•¸¡Cè 32ø¦EƸvï|P‡ÛĨs™E»:¡ Ùl‚ð2Ô¯®‘“9nuÉÐIòI²,'äCûö-ž,†ºx‹Ì L©è¯¯ð¡Š). œt¦’@$ „eóò QL":ñq#u$ò=}oÆ^ xI6Ÿ"U¸E!º}8”ˆÐÑ]oP“9zWàútPº­ò¿çT˜¶'¢¦¶cDÎ }ö‡hì½õá± ÿ6¢|« ¸sýÎûöîõ{p>¥ïŽ]þÂýÞº·Ýïñâ=ú^`é¯W`2BסGS̬À.nèW펛-¢5™Âº„’ߥ¹ÄÍQeI3±ZáRQ$³Uq|t}r˜q8Õ³sh6Ñ-fZà½cX.Q˜ä1”§ôo/¡£L X‹ÝĘe \ÅÆRz\ÅaÞ¶t7K„Ê)N§¨B%IuE¿òèI!F)¸š"RõÚw7ô+QµÔÝA)DQ‘Ló(¤ŽŽL!…C Ëkê× ô|Fq2 …à%:´—8›¨RMOñô1YÝM42¢y‰*¶õu‹)‡³aÃõ êCæ* ŒcHF°LŽ©rT®ðCT^º%õ›hÍôŸ0XÌì„ѳìòŠúõ5Ašÿ+ê>èïåã³ÈïmÝŽNõÞù¼íš vÁÝ¡Ûùãy°XÄhëªÄ÷|/PÅÖ•AB°ØÞ"MŽ”×÷x»zÊè˜Øìè =. C‡«£u¬`»ïbqW<>Ãä!ÆÐ¦dó)JFÊTpŽa±AM§h¢8nk—Ü‚„È<'´5«Ÿ/ÈŸгQê” B·¡~s…©ÀõòÉ9y¥¢u¨Îb½÷nµ§…"£zzŠR‘Vˆâu»¸a¨‡P:. ÞF/nk„̨Ï–K†Úc*ƒ,j2G©žæÕhEøFƒV FUD÷ ³R⇖àRˆ˜Òº´O¡ >Î9]ewEÕɮɮÀ¾wïùÀ½J˜ªµ—+„ÞQ8ªéøùœæÍKúN1~ö„bV0¬V´ ÄhFV†N2ýì {µŽ"v)Q)iÇyÈ'3 v'3Bo)ŸU¬¾ùž¶Q­vÕ~p©…=‰ x Á7ÔK²ù#LA„Háp·6Òp‰üŽ:$‘¦@f29¼kSHwTû<À±ä•ÿû¯¿‡ò!À62OBÈÆÞEU?èw8 C³ã$I õ» D6£œç;û>×mèoVÈò”ÉÇ‹¿þÌø÷¿C,®i×=R{ìfS2ùâ)4W\þé;¼ÎQfÂ-¿ïzŠçŸpú›§øõšæÅ+6׎ù?|Š»Y ª*šÝo:²é(•…Ì4¾©“øÍ0\¯q>y{»@~>×Ó/D¦ðÍoUôXvH½ð¸¾Kjâ¤à-FZšWo £Îþñ d×€èYüõ-²šàškšEGqúˆblpÖãÚ%¶SŒ>zB>V W—\wAñü9™ò˜³R Ô¯®é—¼ˆ.2C×"Í”¬øÞ¢ó‚ææn0”³)ªôØÖa×5^+òI…]0•Aåžæõ ˜ŠþærŠ‘Ànzd9Æ‚a¹JQô2ŒžMcaQ«˜¶h"Ë¢ÀPFz“ -Wþ™`æ#[ÅÉ‘":µ´É„$GEÁŒÜÓ‚÷ÑË÷-;úCF ¹‰n*Ù8O¿+ܲŒºG˜q€( )ñmC¿è@i‚óä'£¤“€ã {ÐÛ‡D„÷ Ð|ý­ÝÍïäÑ-¥ÑéÐgáòm—¸µp‡ƒ›ža= ª’à;„ª0£˜âÃHÄqfÀ 2w ÁÞýGˆü`½H…ƒ´W ½Àd1DDæ#²ÙˆÐ¯éBضÆZÁèÙ#”ëñ²@ÛqÔá:KZÚgôü”áb‰(Ç(ã¶‹8óŠQÆPœW¸åŠîº&ƒ”–ÍÕ;‚+˜}ùù<‹må"£}õ’õ‹†ülFRžŒÉ÷×½Õw/h®zDèñYN9‹kFqZп[àœ$›˜JÓ^­‘£1nõ†Ë?½¤üü NûŒ°ÙœMŸ+Ä´º.j%†®güŧTSÉæç›Hráè=Ú6Ú}™ñ˜ü¬BH‘¬ÿ¾ŸÓìºüñSNûöòWþ‰`н‹àî÷`=©|Àõ)Üiçožþ¶–éWŸ3y:Žyï›ÏÛ5FŠäÀÓÐ-»dcwØ•Ùï%¾ÎR*Ïq}Œè–2à†c­‡žv]#u™‰vˆHo¢ ÊT@ËD懸ïz“yýÐâ…À·“ß}E‘w,¿¿FW#ÔxLy’Ó_.S‡º™“ŸŽ0¥Ž{¹Ññ<ÄA)í›w¬Þ.ÉÏž`DÇærI~vý:Šó?‚6ža0¦ãêÏßãU×Ãô‹O(gš z\Ò¼ø™›oÞÆBu«YqNfÊ”¢¿Ù„Æ..:Ð…Â66ºÞðmG»Þ óg¿Nûæí*`Šh@ FdÒH87 M“Ñd³iþ±/þ]C°‰®êÛ¨…Ûòº·FÕ©Á[Dz+I6¯PzïÂqd)ú+ö*Uæ´/_Šÿ¸?õƒ xtÓ­V5vÓbNæèŒ„ºIÌ$BôÝåYU„ÁGKµµûIü¥ÎFÿÅõ&Š%”Œmqaê"3q`¤°± o•(£’uÒ>²9ÞìW—·qß©]³]í¯»Ç€ 0Yrµ°I$÷w~†mĪVƒ$ä‚Û…©B¨øÝKPZâÖ5Ãà0£¦ÒôË:Š…’}‘TUŒ0#Musà1{Û1I°¸!™·ëœòñ»ZcW=Ù£öæTŒ-EH\½Ž­@г)týÞ¹/ÄV5!¡:‚˜ˆ<Á I˜µ”‰v_~'¤ÜÆ‹ëù Y)£‡1Q}ŒÀLŠhI$ ¡o@çèq@ÁPÓ-kD‘ãëòÉŒþòG<±+Pã‰#8…40,Öˆ<*¸‘û¬L†ï{¼Tж ̓œöG€ül 1VõÎóWeYdéºX0)Ä. «< /­@W¸.;¸”!?c—klÛGQ `¦%~v-®aݤ9¤î‡ÈLì–¨Ñ=JI„G›¢Ø©—wïΨ÷èîCco#²ßÄBÑœL#]¹[´„{ èÛ¿OüÊë?(­--æ·¡v¹$ 1Óêžïé×:ÄÂvX¬b&SÛ®¡­JG½xà—†Û‚Ã¸&É,ÛㆄêÝVD²±’l6‰Î5mŸö›(ŽóƒsÐZdQQ̪]Z™™”‘$$2׸Õ:nšZ¡«ºÈv<ýb*§˜•±XoüŽ:¦²aR0‘qsïú(Äu3›bJ…k;0Ò÷q¿J%BÇe?XÌ|-½ 2 ul»fÅйӻý&Ägó Ê‚ÐuÈцŽ~ÝbfS´‘1¥2¡uBª]‡ {wY…Î`XÕI×"Žœ \oÉÏf¸Õ†`rL.Sb¦ÙŎߢ¦3,ÖØÄcý»¶çQã ©<ÝÕ&‚$ÿ7BŸCòœÏg£hexà!âƒç¶fö—Ò·Èð:L4Yßï%u£ºŽkYæ1ø§é¢†@¥`³í~[äq¼ [*Œ”„Dj.Ãrƒ0EêE ®&H90Ô3ÉnVx'QUõ:UŒðзÙÐݬÑÓL)éÞ^Eÿä&4KšÅrª“FŸœúŽ®®§{wM»©YN19.Lí€O£’ud'¤t¸!ý’õ‹ ùãGä#I¿¨c+}½Ä9ƒ)sº›KÔè á4K˜|ú)ùé†tÀ Ëg›/arJ.[V¯ÑG L™¥ŽtKÇüãnÞÑÖ£g³HK@ÒQL½TèÌsõ/ß²YÚÄ%ýô=!^®í}ñ%£‰åâÿüQ”ï½þýô¯ˆæNæzJýÜi$±àrtÊù?G¹vt´³‰„æçýA*Ûô¸ßµß Õ,ýÕ&:Vi].pÎͦô‹7ô]ÎøÙnsIýnÊGˆàö[ªSägS\³"„Šü¤8><‡@šÑ“œå¿½@Ts\sA»gþ‡ßcä7/-§¿=ãæ¿ÿ«&TO¦„¦A•Sг e@”%ÍO?pñ¯/(>þŒÑD²üîÁ‚È9ûãW¹#©~K{“ß>Åß¼æÝ?ÿ„šŒ…uÿ¹.0ÿÃל|:æê_¾áæÇt™ÛÄ;‹§àì¾$ÓAjüÐsý/ßÃô„j,Ö`fcÜæ‚f8û§¯q—7˜yD´ÛU¤øfó9Ò€*G{Ãå¿ü&O|õ1§ø¿\Ð÷»^Ð-²ÙIÜK¶{BîÀ@ú½Å_ˆžüj<‹Ù­²(‚c"®“zTÌÞ‰êö*5*hü‹ÿqå ÓÈN•È—1ê¹·È2Zšù¾ vyÏ~ˆqÅ¡’¡¼À.k‚(y/ÛÓr¸mC¢T<í…ôÏÉœû~tx[tŠÏñ6A}ê2 vþ‹GNÿîÓºOˆ;®">ý»£>š¡£TŒÍlûh®^d„®ÇµÃQ˜UÊzN‚ûïÁ")’ˈMº2ñüÔÎ2†¢¤»–¹aÿïDêdt1x+rZ!3v‹Ž%K­~ÀûmôsúŽ¥„¾'ÈmñáwèºÐ)d´¯S¥¶îw±ôB&DIj²i…ßÔØÞÆï*%ɤÜô°,òëw<¹}ô°ï[‚ÐH…ªÊak—%4f”ã›&Šad²Sb÷>Ã…“B«ºœGCl÷ŠŠØ~)*Z"¢hLê„Ü+²ÔЍSè£îA𠙢â…V·fü/!Ê÷µˆÅßwý=×Nä±èOHÓ³ê‘娪Ha ·Šñ~©DL"lS‡€Äß=ÛE5ïÄ…îV‘ßaD§E÷±)ÆLî5#‡ü@]}‚µ¸Áã‡=.cLüªÆ5}|O»ÁÇñ¤GyŒOî]¬“ÜÁÚnbÒÞÇP”º%ÈTáö¨c "q©»¹Âv½¥ÏmÇä¨"4-®·‘C)“®»•z¼ëšÔ‰JVw}¢}cž¥Qø¦'¤ð¼¨]Jj ¢_¾E?ÛÐã›QÄ@±€ÜÙ}II˜‘ªfSê`@(T±sˆR¨,¥zwZäû¸F²MÝû{÷Œ„@ nYÇŽìÿŒ?i,mÿ9ô©ã¼ Ò:qa_U©=ökçóퟹãô¸ØîßñÒh|Û&ëÆã. Ö/ÆpkÅnLní-·®Dw:W2î9Áº.c]etâÁdaÖŸù4þ·`Ja&£(ä«»Ý\>Ü›w‡‘´—Þß·}ìꈈbžH{ú62\‘*dÀu×vH¡§ap¸º=ê¨ }»c×<Í“ma»[¯tZW®û+ÎíBT‚¬øâwgNÏmWkDQ’M«ôün"$Þ·WÉ4v»m”÷ûãB¨0 Ùˆó?~–\}û‚à §ü{õë•áñùœÍ7ß±y]“?{ŒÉflP™ˆt­PeÎúÛo¸úö]ä‘öa ®oñB¢•IkzLÌOOÁ¯°]Nùh‚ëÖø¦¿ÿÈ{„Ü[4ý2xïè T…4W×»vÀ¯¿ÿ>yìhSÜYm É·(œFV%¸ ÞÊ]Äðîsø5Ïœâ—ó"!x×mp½@•£èQ+$®YÒ],ÙŒlªè®7Ì÷Z5\þë V EÀÚäìäªÞG~’Ž)}G…Ë¡CÈí²Ûw­’Ÿc*ä£Jð€ó/ CŸP†O±— dU  „­HBÆ8ÑíH.µo‚gXµx'‘Ú3,—)…,þœ*'ê—ï³sÎþð1örªJT‹qÛ9ú«† åÓsÜò ÿãÇÈ7ÔšbR!‚&›–Ô¯_P_÷œý/ ši®þå[š› ²(0yN63þäå×¼ýÿý– š–òóOÉ ÈÙi—4ׂÙ×Oðëõë^f膛kºU ;ƒ[Ó/úXxg†¼Ìè ñè¿D¹†$z¤¸ü?ÿB×”œÿ—OèßüÈòN¾þ{ñšúí5zþˆbžÑ½]0þòë¾£kÇŒU!ðý6Ö>°TŽ™Nb²ä퀓ÐØÛ3ø€è*qö¸‰á^ÙN ­$aè®;\»ÂYA~2kÑ£•§5Fþ’ Ç1§YÜæZªöïáLÞ¹þÖ3ýºÛ„ B©(P½^£FSÌlŒð~º‰[BÜÃß”i®op^л¨íLî>{Ø&pŠ »ð()œ/1•§}{Ìçä3Mwu…÷œˆ1¸E Ö‹¨;Àcm×®lÊ£?>£ýî%.1\]S>ÿ˜ÙWs–ý–Ë¿¾¡8Ju>Ç57øôxE=EAZ†fÍ°Š¼öl\à»gsÌB0ŒŸ•\ýé;ÔéÇdÆGOât·õ’îrµjúˆÉãÃåQf„¡fójÅäw_1ÿdÄò›Ÿ jNõ¤¤_ d•¦_µ˜qÎp³¦_ c×sôÅcÚ¾añ¦g|>Üu%cûݺèO]· }‡·ŠÓ?|E>‘´W-f>!Ô´KÅè‘æíÿög¼*£O01ÍuöÕgø›Kœ™RN .HFÏg„¦¦[ôd“‚îÝ5ƒWçPUéŠ.mô!zF瓈Ð1¬¹üço轉Jñ!ñíQœ£®ë)ž}B‘,~xlPÿ“èàzÄù?~‰2W\ÿùVoT[âÅÇŸqöûg„¶9òxß|ÞvÏÞ;Ÿo¯a[Á´‹Õ©›$ÌV”÷šâ£1jÅÍ_o(žžÅ¢ÙG‚kk‚Ó¨r„4Üñ>äÓ÷?!"_¿ysAùÙÈæËkÅÓÿ÷ïÞ½dõÍKšÚ’ͧdZÒÜ,@•L?}Fwõšõ»*‹~ÕJ›0æl¿Ó·l¾»nÿæwLN=oÿ·¿"ò»†’2wÝ€#á…|Êô“ç% (kuSZóHMì.ÞP߬Qùˆ¬ÐáènzŠgϘ}6¥~ù‚›o—O۱åk.ÿô#då΢NŠ”H­±}K"Ö#Rú'åÙcòéaW¬~¼Âœž |‡0eìÒ5vG“Šé¹%Ù|ŠpvOáiýÕ5AV˜iA°¡ ù4ÛÅ—?´W©QIóã÷\üó-:f\áëvò¡G1Š1È eýÕLøa@E²»Š¿@Èho64ü!Híã­_ªLöt)<øÿ)'áíïÍù@4[ƒÜÆö&¦VðnÂff‡ ‰d‰xüïìÀ’åÐóóp Ûù@F4Äû€•„6¶…؆£ðѤˆ'³ €­û¶Kñ‹»#蜬0¸u‹—ÛØŽôŸK1q£"E‹†pÌiÛ…*vÝcfc:‚”¸u‡w>:kT%Â[úMÇ©HQ¢ÁF½O Ñ“*†¶%„)Ä! Ê2Šƒ†Žn¹‰‰p‰ )E@”Ò[ìà¢8Ï éó³+€¢ïþ6jž]1&BÀõ2/Ð#CK"õ”~Ó‚“dó×õ1ŠT§Ä8¡v‰{²Êpuߪ­_¶¸å/+ÄŽ»ù÷ŒÀ˜ìçc!ë;VnîÐaÜîüÑ×ÑIdfÚ¢ ³³È{?}8ÜÝp‰n|»à¾½ ÇzŠa¹{òžäØmAë‡z\HHVøÅov‹z¸aˆ÷¹wÝŠë§T‘ŸyÁJ%$ϧƒkÒzOH~àRÇð“°E‰‰ëï–k¶üÒ­µ`²(`\· 5¾ëÆ +ƒ­[l뢳ÌV°•칂ŒN%BFZCŒNî½TD£·Ui°ëM,ê÷xÇ4 >"þb›$)vÂ=©b°–(b0ƒÛlð)!Ñ{ЙbX·¨QIèûäÄàñ.®ÇÐôñ 'ÕnÿŠ`À€ó>fHy0“†>úL‹¤ÓHáV‚TÇH+ìPy@Ñ‚0 ÑsW·‰E"à‡N#ÃnÍ™A—ù…·›(Bûû·°J¥Ò‰é?`­þÚwfœït.®mvžáÁûJTYê@ü;çóvMƒønÕ=´Fg±›.½ƒ½þ&j·lìÈ ÇPÛ8vw¤­3ÏA|*”¸nIBü;“%.°ä³*ŠHëï2ÏbÚé65v‡žîS&ã×ï)í¶X‡•HvÓ&-M¸çú¤§z`d ©ÐU‘ÐîJ`ë.Ù >îÅι(t·vW÷„ÁF¹µI?#µEð ë:؈Ã-!~Ž\LÇLO)eúÜa',”&‹µÊŽÛ·Õ"$‡%cGú}îÔ¶Áßvï‰,rtàñž±§$¡íê¡d* E˜b*N~ÿ1ayÁòå*¢v@w³B?~J53tï®å˜l>ÃGfŠÅß¾cuÑ¡µØmŠHMÅS« ùER,Ð;J…Äw5¾½e/wF(Ö6|àõÞ#TŽ, ð®©÷ö6tÿ½²>X99’a¿úzM{yÈÇä§s„jâ @š½éï ‚Â¯}æ[ù!ïó°È×E¤ x·O0 =ýr…kÙÉ3Ò "âÓß4je²ù ©}²œ‘‰3y{£O“;È{Á½“Ò=Ù£™?/¸øßÿoFÉy%àÇô·_2yZáúX`zgV}—-C@(O}ƒ<"DQ¡G9vqEýæu•æÊ÷t7 š·›È÷ 5¾”ÏŸ`—oYþ|… JHÜЂžrþ‡§4/^°¾ê> ü`}öÓ'‹ý¯g”'†Õ÷¯ÈŸ}ŒÑ¡`óú rt‚-Ýr }u™UßÒ¼½ÁÖ™•˜YÉpýŽ®†É—Ÿ’©5—ÿú=fúŒl¤èn®Öpò_2\üDæäYÃÍwo}úã3ÏÕ¿½¢úô ŒôØz“cýq2¥ßw1äéñ»Üä@ýæŠìì)y)ؼz‰#gt~†6tïx­)¦EvvB1Öt‹ Î6?¿À¢ãZ£dª1šH%ºµ™i GŠÃDKÜzCwS#´ZŠÿõ¿ý~MOÿá3¤ï°ÞÓ½ºÆ<:‡îë*¦ŸŸÑüü‹Þ‘?zN>¡„‹Öh™býó+š›aŸw°™Ä¯ñC‡ )5 ôtŠ®ôP@\‹oº[!'Ü¿ÁqÏý!ׇ…%<`_ußý=C~zÃ>î5„#d)ÜBݶ ’ÕŸÛ,b!¦õ¯{†}æà:GæfOÈ'ò¥û› ªš¢ ± G‰ä}qÐ.Úó-·÷–Jb7ë½'íÁ»vÖ&„aÿÅi .&™ïðÖG -? ˆêã™|Ó¦b›9`[OèºË­µ^ô-:§xzÍžž‘ÏrúË º›–ìÑ#t&èWmÜ$ˆQÅ&W6?]’?"+lï ý@ûî‚¡Žó)ÈŒüü„r–1Ülð*§:-¨ß¼æúoo˜üæ7”EËòuËÉï?Å­Z‚mYÿô/+òé8Å´&ªÄÐà;›Lù=2«ÈOg‘ªu+šú!¿ƒ@Gô9rhC\¨9Šw<5ÃN¸æ{ëc|¬PQ<æV7´—+ÔxJ~2MöP‘CiÚ*ºq„{¸†·ÑnqU½ó™M5Ñ’ðá~ÿ3­!ýŸ#&a›‚'8Ý»¢*ñ})6`æ'dÓ2ò<…Ä·kúË›˽õ‹¯-z6»aXÛH¿ê²GO?ÒÜüùÈæd³¸"M…™UàúÅ‚~Ñ`NÎr…6CÍúÇ·ôM¤P(“³¸à÷G]í ÌéS¦O2nþò’Éï¾F45^ìò†¡ñèñ»¼AV§Ì¾:Ãnúëví…¤¹¸@è ¥otV1ýü#t¥bziÓŃe²/=Š ÀœžbF(‰[ÝÐ]¯‘Y‰¬FèÌÑ¿»&(“܈$ýbCùéGdª¥ï Š,þüNJ²Ùå|̰ºÁv¾ Œ¿ø†럖äO£Œ§}ù§GTOf KÊNèß½¥ßÄdÔülLõxJýó\ó–âü9f$é/®² ŸO2Ž…a½dXë)ž!ËÍÅ5Ã&P>=!tk¬5çcìåë·KÌdŠPšòl®%Øüü†vc‘’HrÏÔi[ S› lÛúN¢Ê½µ§Ú!¶ÃÞ²ä>.íû£È’8Às'¸àÖÉl«n—JîT›a‹ßßgzÐëWTÜ“²î¢Â‡œ—ÿÖl®ÓÏÑ¿½Â–v½Š‹UUE¡ËNÌ<ìOå!!ß*ÅÏŠûÇêCc;xÈf£xp¾) w“”–1b·õ;ÉžÇ9ª»(ëäÃÌb¨ÀŽèo‰ïãLÞ#z‰³Ü@Ó g”òxßõ·žáà3I#VMÚøÅß‘%Ø(°F¸¸ŸŽ"›•4¯_²|± ›œ¢3ϰ© ääÓ*ô×ÕØ>r@ÍÉ㦸UCwqIÛö˜²Lr…œ˜i‰.b{~7Ĥ"Ôk6o¯A™‡›‘¿D{Þн£xrŽ–¡ƒü¤ŠS¦ÝP¿I’¿çþú3!¢¯nŒ?yð|¢YÔ5ÝMƒ¬*ò“ô Ý¢#›OÒ1‡Óòhþð“hO‰]Õôëáh­¹»Ç‰äH±Ý¦úD¦öXÞ-é€BeÃæ4Y™å]ÈQtYÙj‹ÂÁSöj†UƒÈGŒžŸ£e´ÚƒµFëØ¦œ K½µÆáº>Òľç6©ÛÄ/ë[RwØï„ä"ÅxÛ$‚ŒŽê£§ŒÎKº«5ý¢ÅœLÑ™cýÓ[D1cülF¹@ŸÍ ^±~³@U3бfhk‚‹a]Ù4‹yÛÏåÂH†ë5r}Ž[¾¥];¤ÈQ…—ѸzèA—dcÉê§ ŠgÏÉ2JÉ5B†›w¬_-RêÕžÇ&¼Œ&î:¶Nƒ ÇWB@ãØ³ø¶=®8ß;AcºS~2g;f„¸UlÑž›Yf «Ul z99ÁêDÞ›dò8=w¼™ïó¥>B‰ï jHÊývMµŠ±­¹püðÐõ!m<™9²DÊf#ú=AÜCu¹¯>—†Õ?€2òàšppà ·LëÝ:äŽÆ‰ü¡C`üñSŠ©ÁvC¤E у]NK½ŒtZdUÐ_]"G'Ì¿zÂpõŽúmƒ>=A‰o-ºÔ/ÞA1Âw Õ³g0\³øáš|vJ6¯â‰ÝúHméÚÃA³SÈ¢À·Ñé$|JVå`×ÔïÖèé)&‹E¡·1Ij2Ò¤ÚŠW)$BDZ÷Q„%4 ¡]ÐÜxÆÏÆÔ//&gXÖTÏ3\¿¥Ûx²*'ô=SLhß^#òŠl:޶YaÀÖ‚;X\¹¶\D¹Oæˆ`ÕØŽ"Ópà*sñyøsQ˜%ö¨­ˆüÏáÝ[ºÆŸGм¼@ÏÏ©Î+ê/¶”ôÅøÁ’?yJ^ lÞ¬}ú ôKê— Š§¢ëÅëz6Á¯¨ùcò|`õÃ2Ë0£1Â8º«2!¼GO¦èBb› ®ÙÒºj4#Ÿ@{YcNÏÞÞBWÒ/â}«? Q½Ýމ·U†åÍe—Úé3Šb%oBPÈ¢Djè¯nÈÎÎQ&ιèѾ¤}sÝqF9¡ГHEQ#ÅæçWÔ— RJ²é)Ù¬ÜÇ kMð-ýõ=\ !ÒdQ|‹]÷‘c+DÔMªd7hi/ÈÑ,vriÄTñ͆úõAš÷oâ—ë#?XòóSŠ“ÑŽ*!¤Â·uü‡~ÿÇýßçÂ’ÓÏä“'hå°ý°£Åì"·· ›!àŽ;L·Š!Åé«à£pUÈí½oin‰…‚þú×ÇšÄÌOÉOGØÅ5Ýõ:vˆïPD’øqÔãý °ÞÒ(y4j”'JBðl2ÃÌÆH‘Ña¹Y’M ÜÐÇ®\Øó¬}Ý$z; ¼hq«÷­, CØŠÂTL>}ŒpQó¡2ûøÏQë&+\íØ%?›2\]àMv:Å./éOqr ôØM“§çp1þ[h±ÖúÅ ÃrÀœÍÈfc„w„¡¡¯=ùlŒ5›WX+A8¼µ¨,œñÉ3* ‘€š=ÝN¼¯Ú… Iöå%r4!?)*Ðõ«k„ÙÐRL³q‰­òó9nuÃàb’š¨¦ŒMñÝ×™#è©/–˜“GŒÎ"Ÿ¤_ÖȪÂݼåæçEÌFïÐY:q[‚‹¾†Ê¤ÁŸ8Èw}]%B:\ÛD’à@I¹=&º}¸Ã®èS袈íý{x‘jÝãF™@·Z£Lžl“LD¦ÏÑfø>ß×ßBn&" v\ÛEâM„¨ÜƒŠßËûÜ¡BlBÒÉ4г1n±¦ïPäûèp¼*Jè×k\Ç>¯žpO-L¦·Í=µâ]³¯?¥¨CïZẎa=ìZqø>ªy¥LhOô³î./P§O8ýú1Ý›×Ôï:ô¸Œ¾Ë½C•о^¡§cÂPS<{†]¼fùªaôè1ºÑWYªø;†>¹Äˆð“:_ªš†ÃZŸ”“‘•м¹3¦8©Ð•¢¿®éWÙé)†NR=™‚³ñÙ»hÑoTešþfCk|‡³¥êwãgôïÖ`ýª&›Í°ë«@ 0“)J t7+„®È¦U”\ ·‡èÄ}ã( |Un¢pïvùž±$Ö­èÈäåð.rn=ÁG{¨à¡ïé7Ùé9£G%õÏ/i×i¢SŰ®‘ã9åTâAÊ!¦ÇŽ&˜LP¿»Äúx¨™ŽßÿzCþìÊ¢eõ¶çô÷ŸÒ½zÉÐ+ÆŸ<Æ^¾cñfA~zFX_b))Æš~Ù FWcDè¨/¯º@ø˜\«spCKðñ°àº==¥˜Býj*·"âãõ:¸è\“”¸ÕšaíÈÎ&×Ñ^Õ˜é] º‹5r\A¿¢¹ì"jfCD’ƒGà#ß¹!3GûöšâÙsŒv8¡)N*úëkšW— ÖPœUø&u–&%ÅYÁò›ïY¾\cª’b~šÖ ›> BK·ì1£ !º¤‰–ÑÓ7ØfØó`M…Є°Ø¶GšˆÜÌlšG¿w)×{A0U´0ïWŽïvô¬ÛlÓ3ùê ¦Ï' ›¡ºÈñ«+®þú‚ rîY¸Âð ô-B, Kæ_Œ² .­Gâ6%CB×Ñ]o¨3ÓÑß[‡žŒâ÷dÅO©Ø™pÑê´¿Ùàv~Ë[ú >y'šU<”ÉdÛì¦2‹ß%Qà}…Ö¡µN]Æ;kä¯ÙŸøŽ~µ!„ 3®P&Ò2úÕŠŠ8·KŠMÂÐG't:¬ÇdZk-R›däpè)¾Pªc¼@$ÔÚíé}¢˜pòÕSÜÕ5}'(Onx2òY¶]K{¹€P ²(UFa7kf\Òݼcè%ÕÉ)BvØv@š•gñ³I~6­7Ø!DC‰Ôh„T ó“ ºë údŠÑ«ï_Ñ®-¨<¨,Ckýâ3}¨¿§lV!Õ>Ê[¼o¯Ú¦´*I¿ZÓ¾[“ŸQœæHmè^¿ææ»·ÈHáø‡ÒL‹³}úr” „ÞbÎN6"2±§Bôl‚V" …BêÈ#«(ÎføõÛòó¡]S¿½N‰v ýI—,Šø°·=–}kzTáº: òƒAl²c¦U²)¹Å×·0ÕÃ…¹ïV«ô¹ãàòôdù2>Ü]˜š#ƒC(A{yÃÐ:èÌÙ Å´Œë{ïcD²öÝ%.èè; QàÀœÌ¢£»nã;U2çèjúa ÃüB6ZIšÙäÈží^nvet^9âßm±óE=ºZI|ÛĸôQ± ¾¹w¾¿C+î¶p…º1¸ÂÄÝu‚ìdßÕQË70y("9µŒÙ¢ZŽƒäÏ÷­ÉÛxë`SÛØ!ØÍQ­û¶‹xô¸®‹VuƒÇœž TD õä„bžÑ¼»Žþ®ƒ'?ŸàV+œ•d§ch×´+T×Ìé¥b@–*LìvdŠîò†öº&?K©_ƒßÐ^lÀdà£(/??A…žúí’ììœò¬¢½¸Á®›È s.ê&#6¡ý6ub¾kÙ3-Á „°õÊwû üÈn>¤W(SK ~q© ¸å§úh­%‚ŠÃâϤø^úÅ[-) …ïuKvvŽÉ ½ZaŠ ÛÅ}Ç;K6‰Ò²šSždô‹ÍÅ™1ÞÛöø>ÚsI-“w±Lˆg \Q£fVFÊ®fXwèù4¶•·Ôƒb¤Ø EÚ£„ï¨ßÝàƒz%v.Æ©?š!ܰ/¶Ú£è.¯pÖP<š`—ñYPJ«ÿ qÞ7xò³Œ9ÜfÅ­Fr؇쪽}ìöޝœº™¾ÝÐ^.‘E…Ì4ºÌ“%¡`X-±V¤ÓJ{ú«eG:#›MöïAn)"Y:†Ô¡ûwibZâÖË»ÎZ¿vöÑŽMjkÐYJÙ‹l-owºâºâÚ\¤ƒ!$Rª½­¥‰@ÓŽö!<®iwª!e,ì:ÄïÌID™ÐÜ|6‹º G =ó’ÐÖ «´¿IÚMsÜz۱¨rD6á6 l2½#`>%îȲßc7ñiT @ÊÉOKÚ7—Y’OÓj4B‘–Æn½qñ>š ˆÛ ž¸?Ô³…}‡5¤:Ô×5ÝÍ¡õRü¯ÿ¯?,ÈÆÓGÿå#ÿú-¡øÈmNbjœ÷ÛX=tÿÛq¸¯u}+„äöõÄìx»Ú’ÂýN›á—¬õî»ÞG¾Ì3‚­é¯—øPÏ&H抇„Š2š›uD ¤HÊwÿp›h;)·)IÎG.´ÊÚ-¬e¨-³ß|Îì“9ú¥_t¸~ƒ’líУ’~¹BOæ¸õ[Ú´–%1JÐw=ÅÙ#´´´—òós°-AÆ´/i$í»·4×5ùé²±ÀÕÍî½;D¾ÖdŒ2[sú3NÑÖÉ|½¿YámtéÈæ£(ŽM>ãj\1\¼ââ_~Ž)}ÅŒ³?|†HÏÍß~¢¾éÁZFŸÎé×+Ú7+BQRŒ=×ú†<Ù‚z”6„Î1þí—h±dùCMùxç‡sÉÒ`À÷Ñ[t§®~pE»B=!ÓBÜvQwÇöVtb-Þz²“Qâå ÇDšgÝuxââ(V5¢Ã5® )±Ñß;ß‚óGèÓ‘°1£=RK†uð±[ÕÁG÷ ¥ãAåímäYgãlû¸?|%}‡2Óñw¬‡´yÞB Ð attÙ¬±½Û[@‡Qè»ÿÎDŒØ^Ü0´à»óèFt,zKñÑÌ?)¸ùçŸQ³1Ø=®ðM4£/!ì†æ­EÈ–~åÉæcT•“O „ðAb*ÍâoßqýíÓß~ÅÉg1qpuÉæeƒš–„fÅæ¢åô¿~Ü\qù× ª/?cú¨`ñí+úe>&š1ÅtùÞT!!Áõ ˆ"r}·k6'%vµÁn]LÓøÓU9ŒR$af«apûˆëÌì²Pq†>¦¸ Ýu‡)º‹wÔ—Žl6#›iš·oÙ¼^0ùÃïO—ÿòÙx„ëùé‚£z>¡{õ–Á–L¾8§÷Š›o®ÈÏÎɦ%¾_ã»tH½}ØK©¬²¨¢¿¬ßm°ÇLÇ{ÔXÀ˜é36ûÔO¿o#Ó¯¹ü—ï¼Nai>Ø”š¦æä1gøÑ7éöÛÞ@åŠúÇW81föõ#Ú?sý·W{KÙ{‹½{Lѱ8¼_„ïáô_gŽdŽrlQ·õ!ß õÒÑ’~Ù`·Ÿg EuõŠærÏPENùd‚ÛÔ¸!àš5®E™MQr _Ö)é0ÃŒîï~ÜÝŸªâã}ˆZ–Ú#VuòÄÎyIõ|Dÿö-ÍUì$鱯­Wx_ 2‹­»¨ Ùžé ú€šLðí‚öº#‘AlŸ1ûtÌÕŸþŒSgŒÏÇ\'Pe šr‘óŠÐ7´W|0äó¥o!Ð÷ˆQÃQ½Ç.GhE¿X#² êËå]1‰¥¦zc»Q0,7¸Îbæ1MkØ4iVñ·Ýq ÃİßvȲŒ Bp1’Ö«˜lÝ¦ÓÆ.×Q…«Sœ÷6Ôck§â"¾hþ/LŒ•Y.MŒ`þ NÖm‡X@o•ºéž¾PU[Ù%þÒýòg|ßÂt0Á„Râa$¸[öw|,}L¿*"§Qtƒ ¦£…Cô÷n!"ÃUdž¥Ö™ïs›lw¼CEÜLž†1]PUJ ‚’øa`XÖ„aH±È%R¦S³È0#ƒ]DdÚ=f6CâèW ª,PEŒö. ÊœÐ68/Ñe+„ÎQ¥!XºÝ¦'‘ÄLb1éS´°pÛMÙãƒØ!]1RÜ&•µˆÎ"ÉãO(…ë"2¢[áñ Ígý¶lªM1Þ™Žá6[›¯@ŒòN­\o-"HDBÏ£ÈÁÚÈÝ;¸,ßâ½;·í©QJ³¼Mé‰jO†M‡"F­G俀R%ÔncÞÕ‘ƒÝ›]l/Ó ·Y3ÔzT %Œk)ŠOàv(Ì6ˆG%}ïÂÝâQŒrÏýC±å›¢|Þ“Ö°í/ UŠéõ÷!C‡âpë7øƒÃñ!”å;_I$)ó|/~ ™”Ñø¾a¨]Ô¦$×Û‡.Ø6¦r -˜džEýºAd9ºÈ*…Y]PB°» ÐÛbWuD( ï‡Èå×aHð×E÷!%h±[›Sûà Yä¨Âì¬(£n%RO|ooñC²ÈÃÀ°nw]‚­%]Ú[7ÑòrËI-+Ì(Ç·Ñ2Ev2Æ-7Ea£ïf:AåŠaÓ¿Û2ßEo7R¡bÇ-ø€žLÂÑ/7 õQ`Ämh88UÈ\w0ÝÂq:ezVaô±¯þÁؤæœ)tª*ã>èDô!Ü3VãÚ-ýâ3ù®ûñaÌöŸ­®«29ºß<<Ÿ£7¹»e´—ßBî ±tE¡ëL Ú¾ÿ­fê¡@³{5 ïy,c]ƒÝt)ýöç» }fçRm“'Ñy²õ¿Ô€NÁ" „Úƒú«°«ÅneüÑ9¿[ ´ñ¬~ ·¬™ý×ß‘±áÍÿ÷;Êß|ÅÙ—OXó-.äÑ÷jƒM0•I9׈b†.d¤¢ø×ôé;r 5”O¡tbxkÑ£è_ø®£¿®A²Y>¡HºË5ÂädSƒÌóh{õ·7ȲØm–!8¼Ï˜ùœþÝ+š"CŸ"£  Z™”Šæ¢(×Ê¿œG^wy‰å“(ÔÖŸÏ£0c;,tÀ5›„üÊGÄ yü=~[ìl­~‚$ ±aæ§Hv‚`3)1“,’!ºŽî¦a×ÏÞúßšrTп}ÅúÝŠÑÓç˜q‘Н»ó-ø€ª ²I¶÷ʽƒ@o«vç%.”ÀmV8«"ík»nøp|ëPã2Ý?¼Ž]“aÕb0ò~ÑávN+ϰ¸Á{µ\¾÷=‚WÑ[ÜD¾9QžŽ}÷3»áì¿ý#Æ7lsý²Åû@÷î‚¡õ%m[ääŒÉ³’Õ_¿Çù’ѧÑYˆôŠÜ`WœSä³"µsýÕ ýÕ‚@I6ÍY¿zA×8Ê“SLVP~þÑ^ñîÿøY˜rSռݶIÝ­­Vl£›ÊD?e)71éc|8ŽÍ±ànþ‘Ë¿¼DäEÚa'œÿÓ—„Ås2aýý7,^·(…†f~ÎüëOQýïþû_ “g<úÇgt?½Æ‘ìׯ_}ŠÉ‹o^Dw“ÓGL>=‡fÍæç¼p´+ôt†Î†eÏè«/ÃoÿùgÊóçäóqº_›:N[zÀ÷=žÆn•‹/J“ÍKDpcO¨©Ø8 ¨,põ/csc ýÀô7_qò宜üñø"ÚpÞÔ sŠYÚнþ™Ë?¿ˆíò£ò/¸ð¹¹…{ôï»ÞcÛÀé?ý–ÑTâì­”[ϼïx‘1ÄQß_Ÿè^ÞÑ_׸!®Ãâ}bîÙÓå‡ìÏ÷×ÂHìzɰl÷¡à߃@oƒXšÐ_¾cõê•EÊŽÍ0#“êž Sªд‹T?kBÉtÀ8®Û½ã"%m+…Ôß~ûÿþ²¬¶QÞa¬CŽ |ÓE®‡Ȥ“]Šn#’N€[Ræ9‡oúØVËâÉ{ÛæJ% €‚~ˆÝ™-?Ó‡_@Y‡IbB鈂„5þý!‚EÀ÷‰CSæQ|¸m¡ý{m{nøâï>³×v¿û}ÌWŠªþ[ûNe‡á âïüÖ­ä7‹_ z±3dßm Ûxí<#t=nð¨QpцGV2yëú®Kr': Ö'«!SŒºxz•R¡ªˆZº6Å,‡(V RíXÂà>Ùj'ΧqŸUy:dì¹ô¾icé´B*¢göÅ?1.|˜Æ€“w¬ŒJ"‹×ö÷Ä3§®ŠGßg¸‡÷¾w‘8¾{Ú“à(à–ç"*² ø¥q”¦Ú`£à)S RR¨©Ñ©ÐÝ}C™EÅzè‡(À‘âáù#%¡ëp):Wå& {n=øR'ó,•þÖ}66ïüAqlw6DwR?w@pºÿöš­ã8R²‹¸™ko~Ç/Íi£ ]·‹¦þEû‚Ãñâ’gvC'ÄýÔUžíýȃb0‘’L@Y†. ¢4z\îB"‚ZÅöø¦fX4ȪŒ‚ ºM'9¿džE‘n7ì¹£wÞ™£WÈr´…Ø(¶Ž­:U ‹"!œ×ÖÉá>n¬Gˆ U‰ÀK0ÚA{Ô`_ÔIí鮸.ì9¯|ßã‚;y§9ùýçTSÍÐ[ºËíÕ’~Ó`f(f·Ù$žTIqZÒ½½¡üô#”rô˸`e§SìÕK.þü’l6'OÈçsò‘eñÍ´KEq~ŠK\³ÁµUކà4ÙIàø=êÞ]\#Gst&F“Mò}kt[„ïü{Ej‡'m\™Ó¼ü‰ë¿½Ç{V¬X%ÕôÁX;£‚“dó9¦<«"‚};W"Ä€m:T^|¢¼å{ÆÑßxˆf’·YÐ_¯£xKä³)ìlï’Q¿ºˆä2ãoÏÏ=ÿ9ú´.–-zz’x¥Ãƒó9º¢Äv{ä*§ÃÎ:,¤`Øt8+P:‰Â-¯±½&?›ì©_ÛC¤Ø[(…£Ð†ll’Nbk­úßÁH™¦Û/ÍçÀ°Xb;wlûwç=øý\VÑ^oX-h¯ÌìS8Ú‹|ˆz AÀöpú_19/Ú˜\×^ÜÐ×£O¿f<ëxûÏ/}öÒHǘ®ªµ ›xØ‘Já» Ý» :—1ýôÃÛKÔìœ|"Y}ó‚ü“OQî’‹}Eyd6"?¼Ýq᣻AMR±à=jrÓ3/nâúä,>dŒ?}‚)Øûq , º×?qõ××È¢ÜÏ çRÛ;‚[Ÿ{×öŒ¾üšñÔñöÿ+¢ÅØyòé ÕÙ ªŒâ²Õwo0}Ì“ÿú9õwßpñ§ŸbÁUN™~þ åX0¬ÌlDóêëW Bxôä„l*°«fø<„ U|¿Æu’üô=: Wv‰if’#…?.:pŒ9Ü{Â+@ºODWeú>Óº+î¹>li|‘?,ó‚l¤w%™çØ›7\þå-ùOæ@ïïa7³ß}Åäq™PèžùÖþyäœpÏ3 ¹G„V¸¦Ç6.®Y©Ü U“íÏ÷ Ð÷i¬D¤‡øz;ÜZݯ›bÿ¬Ò”Iû: ÝîL$ó`kº«sršø½Ö½‡ûó¡SV1ÐÝ,¢`XÞ‹ ‚·¸aØùÒ;«9ÿ§ß CíµD滼¡_yò§gcÍæ§Ÿ±FW¾¯ik‚7œþñKB}E׿(Q³øöb4¢œŽ°ëïÁT9~ð^Dç($2x‚’HQ¨fLŸŸ0¼~I½öäN}ƒ`F& ýWØ^‘ÍÇf’!pG.3.Xþí;n~¼Aú×™3ˆt(¶‡4L÷.ÁÛà¬Ç5Ê‹DRÅÿ5:ñgRºq¢‰)Dô¹ÌóäÅmYüE>B„ÞEÿS!ý­èÅ»ÎB«ƒâë}¤Ý9IŠÄµ¶„ ?ü´ú+å¿ëúäyügî= ç@hB¸½ÇzÉÆ)mâB\]Ýïƒêï(rã¼ޝ€ˆ‚ž®Ÿ÷áqñnˆþÝó)¦”ô‹¶ » ¡u´Iˆ²Î 1“Ø¢¶Cˆ€žŽÀYº› º,"ç;d¡Ö¼‹R‰ÎDòˆTû0‹Cg‹‚[‡ªÊ$Tˆc9ØhÁ#¥¸»wlù½uM¿j¿ú#ì­eŠë ïáÝmíòfݾ‡ˆùD+áßó¾è x¿CÉ·'ümÁ)îØuüš±}ˆ*û#‹¸è¹¼>8C˜ª,òwž¨ÉéBE®¯wáØ>ÑGÞ¿òþýNˆªGæ9ºÊ#Zqàða7Q¤%į›ÿ‡i ï›Ë©§zð,ޤʢqïð‰ ¹¥Å¨²$g «5Cë2êd9"+%Ý¢Ae9`ñƒÅɾ¯2ØMƒí\ŠÍvQ·å¦nXÑé!8šŽ`6mr‘ØÇ{o£é÷.©ƒÄîÙ„Ú¢Rû/CåÙ~ËûNœ«kúu‹þ_@8ƒsèÉ­Ýõ:è;ÊMJGõÑÁ# QäÓ·ÞЮÖlƒ²¤Ò˜IÛ´¨*Ç55Cãw‰mRßnæ„ä  @ÂçöØo!‘Y!o»VÁ'nî…RxÄZoç‚T¤uJá65AEâ!…*t-ݲŽ|n%ÿ-Ö_w}ŒS.Ñ[®ÿg>þÁT÷!зùOá€Ç$î¶ñn£Õ!óžîSùÞy†xoi$Ã⚾ķŊÑ;VKú›k„žb¦&…#4±¹£bßÿe÷ñÛ¹™2Z%£ÿ{OÄ®¡¿^Å sûý‹ƒv)Æ;…*HA69aòñ®®±Cš)p›ÝUMñÑÇ”£–ëïo˜|ö)~¹Ä 9–Cl-I-– æÑFg’õwo±½ÃÙž  Š“´Žˆ˜m68Ý¡Ö"«YDφá–ÚZìÛlé°Õ_¾ÃšâÉ)&WÐ/¸ú×BÆ=,®îÒ'Ò¯‘Z£¤Â;‹sB Ð÷mN §St©Ž$5¾¶FA…݇Â=©™·3#·Ô'oÝàmD Ofûà•_=¶ãçF&£Cˆ€,Æä'“½èñ¾ù¼&ZRaª­ðÓã6C Ù0|I‘lìn®â{;Ÿ¦ÎÕÁçºo> ±£ù®aå-ߣڿóÌÛŽÒ CŠ,¾ÿ=ŬÊrÏß±8Fá6 º›¡õÎÒÏÛÇ­tNõøQL,†Å%v…ÃR1ýhÊò¯ßA6"+tÊÎæè,Y‚·ŒÁªœ!ä@óî-NŒ˜~ö Y>°úþ jzÆä“íë\ÿõ Õ—_1yœ±øÓ÷ѪTeäóiÜ\·‡%ð}«ôtƒœ\B…‘¢’Id&ŠÉø}ʲÂ-Þrõ¯?CVÜÕ_µW“3Œ1"ß©Samç—TñPÒGꉙÌÑ• ¿¸Ž­àA2þò Ý«73¥8Ébת³û¹tðÞ‚×u.¡¿ºbhܾóæCt’šTè\:›è»]e¨LÞE)o“·øúqÏØÛj¡:+RÌöÏ|~à™ï½ždÿ¶} b}ŒÐïïÇï®sû£÷®aÇ\¡~³ŒÉ¶‡üÚ®²Ìc—ë°â‡W·] Š B‡kꃵû®wôn­º,o‰·Å]*”ø¾¦¿Yj·þîœÏnñÞƒOD%gøŒþÝ;B>†¶ÁœOq7Ô7µ´ Kõü1¦ÌÀ:tiÐ%,þú›«Žl\Bï(>þ˜Ì¬¹ùaÍèù|Qðìä”b‹o ^ hmÈg'èI–Ö_I°-¾IÖw"@Ðd'ó”)"îRG…D—±ÃE[¸г’õ?²¾ì0‡èó‡Ò¥Œ5Jï@Š}!RE$-²¥²“I´(Y:„rØ&qJH)±Ee%ÅYEH1ÌÑJ¨'ƒR×Çv©ë-Ò”Æt×—´+O^1£èä`Ûo5º{›©ûN]·IõrP{ïésá­Nˆ¿âþH þûÆ¿ç$š­pC‡9jÏÝ×mÿî¨ð­÷æCŸ_Â6Eqw ÙˆzïvE¸©F±¼\c­@› • †¦¦_väçÈË勊ùYLö\7!cq:Ôz6'AýæoaqÞPL'È0àCB,‘ác×AÜÞ$î~„À d–Gk ¡¡½\âQ¿ŒHÝÎ'êµBJ‰wñ{‰±¯DÝ€¸' &HTž#õíݡ߳KsHüïy@l…;¾ð! 2sà«$þýc;ÅwvH~1ôlû¾\D³IrÕð–~Qー­§=š/ªvßçOžçÁƸúæôlÛNÐ{ßCH8µ÷ÁÝ´ÁöØÝü’iLÆd7]”(¥bÁ¨RÄ´PHpN•C½!„È!Ž¿ãv›w»XD·Û58'1£F{úMGŠâÑßlؼ]Ÿ“$ÍË0Ñ5FeY´~$ìЄСFáöûIïÅLGiL'í¸ÉZãÖ ê· ‚Ò±èÓ1S ÜŠW>¬v.û»‰B ¦‘ˆ⾤4Ú蘺&5B%mútnðÃxÛÑøÎûÝÂd}ü=Êèl"TØ‹S“Ï|6ÏÜ-ÁX¸Þsàq§À.9Ý¢#;‰®QPZÅpޝú†Í›09[ªùÞŸh™ŸÎ0…¾?Hí×>s¸g-ïûŽîâ‰èél×5C½E&ÅŽôa5†Øih„ûN„ˆ<âc¯y›:SÛ9i×î× ÇÔû>ß­œÛ:ãì‚ÅnM·lò¼ëqƒ%ȜѓShjë‘^=ã6kº¥Cj‡³ Ë‰Ã;ÈOçh3°~ùŽvmɪ‰ÄœÌ‘aÍúMM>6A6«°Ë]3 •AgÙÕMÄïi fˆâVŸØu5E–“ÍÊ$wô‹gE ‘«×t›!Ù_þÊ?‰æ½¦Å­®L¿ø˜bªY~÷‚újÕÿn@ŸXc(‰[/iîæŠæÊ „vØu…HrðÁJñð¾ü–ú!ĉ䨓û…ÅßOù@\øæ|èÌr½žDœxj„wX·£‰zkQý3Æ_?Cš@ïrxÚÛ Ýº¥[¶äÏž1ølL{ýŽf¥(Î$ónI/Æ4×oq®¤¸:Zâ¹>]“ /ÉÏŠh‹YÓ­ ý/ž“$ Óoß‘=Ë m-IF9®^o½Ötö …Ô©Œ©È'Þ ë¶ßó††(´býúÕ´Þ…Yý’w{3™<à@ ?tÎá]ÂèWŸÈŽå›;Ú¦C*‰­’ó§ _ô©~|EÓ)zŸ>A¬tMD˜k‹Ì‚wŸ‘nÎê¶cðÙíõœô¢ ½™áe†ïZ’³®^±~·@æIo㌹9RQEmHoN2¤÷•ô‡'Æû¦í˜ížux¸»½W”œ¸þTGüK®)GÞu÷ø–›Ã[C³4¤£>R´ÁªŒloN&)^p÷¯÷x/* (Êñ›uÐqÌj8•úˆG½Mê‚ G’‚T >ŠÎñ*¡[M©&k’Þˆ|TÒNopIŸÁ“‚Ù_~ÂgŒ¿¼ ½¾¦­À62ÍÈú=\×âIÈ/†`×ÔSCïEŸù·?#—$2L°œí"*lmƒÛ„V[j?‘¼uèá^ÈÆöž%¾]2ÿá>-C‚ç‡N“Ø\)¥O$NFûA…À ç_ÐûN~¯Cÿ›¾çh¡'Þ TšcÛ%ÎHT¦#B'vž·ó»½X¥ˆÞâ€ìð.º¦¸Íã’•ÚªRRãÜ…ýðúgÇMÜøSÿ’õ)˜Žz¹@CÒ"Å9{8Î}ðžEäo8‡âЙä±õéCò«Pl''*Kð]M·nÀ{ºÖ1üê9¢®h×ÍlFñÙ§h»dþjAùôÚÕd†W9io€N¶­}0áÚ %u”-Í¢EçÞÔ´+Cvv†VÕï£O;«B!ed£”ö6L~„´‹]-ÿæ3üú–ùë%Ù蜤°˜ÚFÑ©)~)J‡xlç<Þåì¢T"YñYvkæ?¼¡ó=–ˆCßn‘zcQ:Eø½ZɨÚï‘ô$f½ "3(:Ïb!"ƒ–Ķx«‘IŠÔ•s&î¿ÞFt]‡DÛSïÒAâìé³Ê[O2î‘ä:†x‰ÐØãßæµÚ#а~;ÇËÀôжѸšÙ_ß`UŽ>’<6½úØÑ[¼ÞuŽòÙù ý/»çºžôÊS×Ç=ÊÖí´ÚÙí1BEîñáö¸¶Ù:8…cZ#t‚P&Ú7¦ 6ïÑß{>{_¡ôŽòu¯æ‰g®©hW R%ۦęT²- ;ÏlÕ1üâ)ÒÔØ¦£™.±mHûµ­C% ù‹+¤YP/å…böý Ùùvz‹=²^LBáÚ.§´µ'+Hí#•¤ÅÔá]ÈzžÉ—#”iñ2ˆ^mWã?œæÅÖ[‚ËŠ¸vüQ4÷½ïY 3EõöšjÞ~ €>ýn‹hwº+ ÿõ÷3T>ìvÞÒVa.’¥³*ûÙÒÜ®‚¨+ËÈÏ ê÷·tMàF gBTçÕ"FÁªTâœBõ|,œœñdçdã”v:§¹Y’\^ µ£~?AõH-BÔ#" Ð…Ž  7taG>“BúûŠú ÷b÷Kÿ½ô>}ï?ù7bÙtŽiÝnÔ°á'u1®3Ñ(M°YB~Ä>ö7)-ƒP.K#íAXÑèÁé¸À·{葱ŸÛp±;¹CÛ¡ ꮕgýöš®GÂû\£®vqÕǯœó!l(Kö è¾7±¿Av{Ë÷¬Y‚k‚Ý—ï*p*…¡˜YíÌßønG4v:‹áÑZ>ˆŠýÆöL¦¤g£€¬Nf!l&&V‰$Gõó ŠÚr”^ŸBkìzI7] ËIäàÞŸ4tÏÝtW)¸×¹#îëÓƒHR¼ XÏÙŠõ›B'!ÙX’¼@(è–5Å“3\³dùzJñü²Â0ÿñ}HÃKB!˜Ž4ÕÛ)¢à뤒ÐĈ,4u®]Ó-jDVP^õinæ¨~Ÿnz‹W%é0§_ëüjDÒKqëŽn± ÜâtH~–ÑN'´sK2êáÍÛ(t)qm°z NÍdèZeˆÂIB{wÇúý±Æi€Ò!#BJäÞ³ôÖ!³ÝÏ· Õst‹uÐq( }š¹hY§SA·¨Ã#ºE > ‡sš‡)QŸtR ä:{:Kvç¾Tb7µ{ˆžpŠ+ö£ø0µFêpÖíÈK'ö°-X¡3Iõþš¶ò{ûØ/áK~‡ËGv1&í¥{É¿Ç=?Já8¾î¹kœjzD÷õžîèŒÓ‚n6 Í Œî`ƒàsn–5‹oÚ8Èö[áÝ–®&¢{ýÒ}[î…k‰i«B(„°˜Õzk)'¢“ËÎá„mü·ÇaÛDFïÅE tK…Y78c£0pMsSƒ7X¯HËS5—Ý5›Þ,lçI†oj\VP^ñÕœúvŽ×%ùYÁêå ågŸÀò޶l‡3‘6¸O[Q)IŒ`?dˆÜö<ö=‡@•æ.Nõ,d?žÂá7x»(ï‹ùŒîõ+:“`Ö+,%dx1zCtÜ ÂH´ÏøW—T?þÄrÒ ¡©°hÊ« \µ ž¬Â8D—¤«×˜ªÃ9E:ÑÿtH{{Ãì¯w$O.È2A=Y’öÇÈÄb›zÏ»6íBŠûëóAj¯«Ü>‡Ð)ÙYð.Ä OWØŽ{ÄCîc×ÉŽøC ” QÈ`O´åÙJ„òغÂv6ZªFˬ®ÃTÁßTçɇ[Üpˆ0žì¬»~u®‘iàÇùSMɱ-ÚØµó¶[ÿfœ¥]-PÃKÎý‚öݪëšäü Ö×·X#|òœüIo÷ýo´Fëë÷kT/§~7A ÎHKA2è“_õYÿô’»?¿"ÿìKO2æü¯úd£~àS Õ4 ]èFÌä<^*²q‰”nç8²áTÞC2BÀð5“?ýHÓm¸ß>Ú%[ïÖ)S‘ÒÛ#ñî€VYt˜Ç  ‰}ñŠ8£âè€ü˜ïÙY z·›€ÈãkœÙ·Õr¡‹,ÒW\û=*H=“ ¥ŧª"•ú0Övû{"A˜Ûu»fÆY…ÞÔŽWcŒ¼kÖ˜Uƒ,z¨Lã›îñõìƒr; ÜàmƒY[d‚MTÞ?´Gbÿz@Ã2¤Û  ¶õ»½l߆l{Z³k\“!,éÕÂ,˜}wƒLl[cäãKÒ\Эkú_¼ ¹~ÉÝwFÿðkŠ´âæ¯ÐE©%º?¢ÿ´`ù×wø¼Ä7k„.P‰rD -gjš»N÷}uNýÓ5¢7 [Üáer\ÒÌn麄áWÏIs¨ß-°¦Å™³Ýë“f¹¤™·èÁá–˜:%¿H°kCà -ë»IÿœÞ“É0ChMõêó—“è¿|4Œ<}©R”{Y•õC€‰éâ»+²£™®Pù] ¡­E–Ù ¥~;à й®8๠•LKî½Kâ´(ðþYh[N8ì™ý‘ð“öiú©®¥¹[á¼&;ïm§bÛéxÛÊIå˜ÿðŠºò()>œ‡ð€ðøÑët‹†Á×_п,Bªâ½³ä ²÷| 6þØëÅþ÷‚ÎÄŽÚÙÖ4“u¨ÄÖ‰éÂùlcaÜ„NC–€ïÛ­gúGïÿø|Üi™¤ ýižøfÒŽÄ»šv¶ÄoøÃp(h2ПlŒ§w¯JÎ~ó‰l¨'í2ø¾çÏÏ‘vÅò§ Ö ³ Œ IÓ«•gAÔì‚£Ž™/°2gøå'hU±üá Æ”O¬ß\“>¹D»Óù˜! ÑyGÁÚ°že†.òQþvº2H#Ý?ð= t¡™}÷#«IKR蚆¼ÛRà[R ƒˆðŸf`‡ÞId–áº:Ò™êB vqÄ®£[×àC²—oc@€sA¸’§!*ÒFT,Š?„ß5تEä!6[8ƒ71>×»=~g¨fChF²Î3}Úâë¡°(RÚ%Ò° Rq:Ç1?BqOQöw ðù!ÃHv¾ŠÊØ=aƒ|×nùwáÀŽ?ö¿é!‘I-ßøÙT÷(ÛÏív£¡¢Gv9ÀL§Ôwk’³«G0"Éѽ„n¶ ]ÖÑZÑÑÞ°‡Y-1•%2ÂÌ&tk,åb—-•#U¥ã+àƒ¢¸ë‚Â?nÁ­ŒÎî ˜RÆ1§Ûã5?lgbå͒Кn:ÅZE~1DÀÛ6tÞBŸ~}6BËmàÆCˆò1ϧ±å6ÜëG¥ ߱ߨ˜¶ÑvÇ…¸ÛÐ <M2„Fÿõ€{Æ|‰ó2™âp¤-’4Äœ·qó&XZ&ã®Zï ñÅF`¶Kü òå|àï+­*„NI†ýØ8œ^›B*\½¢[T1ž7Ú¯ÅÈ\ßÔ`\¼?q=‡ú9¿^"ò4"—‘ʈT‰½õæQ—í¾•€m0UƒÌKòQA;¹£«C¶ Ó!B²Ÿ—çHÑÑN‚ÐUfiH'ÌÒð¬“$¼ouâxe Z!´&ít³Æx¤Ð¤ã2ð)×” ây!£ó…Pѱf^‘žŸ£SO3™£ËJÖï稲G6Žn~`%Q¹¦›Î!ÍQÒÑΫÑÇ"DÖ2"ÜnSjÇfÙžp¯a|¸ÂÁ¶ò±ñ®H3t/ïÿ¥gÃr[?ç-MéxS}Ô—VìÕáóÇÔCᣮXœ¾þÔß`ækì䱄ÐAvÆøÎø¿ïžÿ¦ëÁÏDçÅm“¼1;hBÈTðl\[Õë“ôsìrA·\GZ…<Mþ_y>«zˆ9Ÿ£SÈö ®iÃÚ¢ Ðo‰°ØÎ“F¡ßU»X`ƒÌаO7 " 4Üv:ùÝËpUƒîõC¾†µaOqëï>¼†êݪŒu¤“È" –qÛe‘$àÁ9´0މŠÔŽƒ=ÝŸ4ŽÑi†Y-‚ûÓ/Ù[îÿ3ÿöÿú‡R u1¢¼ìÓ-g˜ÆÇhÞé ÙúñmF˜5«÷ï16§÷ä­;ªÛ¦uägW¤£ ðf…k*Ïãaghg3L%HG#’Æ6k°ˆÀµÙ#ž‚OÑý×T¨râZ7‘Œø\—#>© ~“Ù( ?·‰þ´þ/¶±Ò ³ ]ÖÖ/ö¸»=…´££ã¨ÄáõB*° Ý|‰—rç^¥ݪCÒ¡Æ51Cððg(wñõQ àT–íYj Xx½›1{ñßÐÎg˜µE$3Ÿ£¯žrñûOXÿå[×-ųíû£ü {ûŽÎȆšúú†zZ…¤-Ó¡œýê9õ럨fŽño?eù׿°š‚–‹ÖB‘ /Cì¶3E¢  Th esª~°ƒsûh¤¶ZÎy²‹: î„rO¼²ëp·2 ³Êþ µðäŸ?ÇU…¯¦ÜüÇ_qº–§Æ¾ÇÍÛ‰‚pSØ ‰ëZ¬³¤ý ²QÖ\ÝìüD7ká"&p 3TšÆÿ­Ã6ÞÊ]¼ëÉ÷("ÄýRú½ÑÖ‘Ý"5›µkhç‹ÕHŽV…î!u·‹E×)²‹!f>ÁºMá½û;ûÂZïÝɨp„ˆþ¡B…ß/“’d<Þÿ -”ÂVKºEµ+~ÉP¹Â¶+|«Ð£á–ÆqïúÖ›w]ö±õ Óe¤C‰]­ã%)2Ïwó⤈Üx¥±õŒÕÛäð)—¿Jõí_™ßV¤gC­:ÅÛ5P¢Ê$ˆý\K{{GW'äç«w·ÏžÓÞ¼E/ItCu[“ŽÏѹ¡~?Åšò3.~uÉì¢í2”SŒþéK´\1ýö†®©Ãá›$¤eƼ1T$é%,ß¾#}ò)å@QO¦dWÏQnÂûÿùù³/9ûÕÝÝÝ+éæs R9ê› ÙóOæ–›ÿ|Ò>£ô!@áZʃ´Nïlv÷‚E‘ç èIÛíÅø !ÁÈ­cÈÑ><Â{$½ ß´÷ØC÷b›O8?xëý,qÒåONöü©iŽ‚W”ÂÕ5í$ì1›Â/¨„5 'B¼ü¬SÚr÷‡ï©ëBÄ[Ò9ЧúØØœ›VpþßÐéÓQÞ÷îùHD¸[«Oh5Çq8ÍC÷|xý¡ð0¸Áø¶¡™Ö¡It`ÛupËrœ[ã»Pg¨þ€´_`Wsºe¦&û®-ÿ¥ç³y"CeY¸Žßíã1 F÷]³¤ö´ó9¦v¶ŸØhhÑ\ý÷ߢ]M×zÌbJ·¶$Ã1ø5ë7·ˆÑ%ç_Ž˜ü¯?bSž`[T>@(Pe&ÿ*ìwíÒ’•´ïÞ1{yM©C šJZlBä¼5 3’aaì!ˆº7qõΡʂt˜m)z‡ì©|÷=ÓŸ¦Ä•2L¨ýGp ¥Àµ×t)wA*Hk»­ªYh¸#"Oö`œÂVä6c< {ÑÀº³ Kûjw!ÅAHdž…Mòˆ'&„vL>ŒHdž‡(Ò£±¶?¡œ (BâSu¤º=ÝzŠø œ âÑ? ÌÐÄFœnŠ…À·mˆzNôi Ñ¹PXoâ'ùß Ü#MÉ€¤9÷‹~,DqŠíˆu—šåiŠÌ4v]‡`ˆTE!{»O(dšlÅlÞm눨ŸãÛZ¤òo:lÝ¡z=¤ô˜Å*<3µ÷.eàî*ƒ1B©Ð)ºi ÞáœG&١コ§ß%/‚Wïr Z£ò·n±]E(›QlÜÅÃèýÂ|?P*6^ò0îÙ»]£+ÅÇÑébwOFìsá>æËÞæ¿Y»¨`Óaª6ü ùX·] „ŽHœÝËèfsdÙ‹ »ç­°U³u§@ÉõЋ¹9 "rí¬=~ís—e,Úüþde×Lù­—ñC×?BºX¨Åâ Ñ»Q´1G¡;§–ææ;È4 ‰ë×Ù‰^„ð»nB³èAfºP˜Uƒ. ìr( è‚ W*± zQrK“EŠ0>¼Ûë5΋]\u–"óß´Ø.ÿ؈YE„šÅ"òÝAõ{A”Øv %Þºy…–¸Å ë*K·]›€„M|nÓá…8âê7zgpm‹‹û¥@ R}9îOXÀŠûº×v‡¨ä Z*¢ŽÆÒ¥üÇÞ³ˆŸUœð¾Mþ˜{>5=ðTpqqm¿³Pçlj±ñRaÿsÖE÷ ƒ]Öá úßq6KèO–yÓ—rØDì;˜Ä©ŒÊs„W7˜ºÃK2 °˜M’ˆ4Eg fQ…5ÅÔ]0!"öÞ…(zD4? ±ÝhµMƒÝNçMÐA©" S䃗eCÕ kÝ[‡ˆñöëžmì$£0>äeˆn""ÐÿŸýýLèÞpðžšãœˆ^³=d&#cckÌ^çg2/¢jyµ®µ„;LÑÛóA1\‡Œ‚m×&bwCºítеá3¥gç1Ü,n‚µã9’AARêj}Ü}žˆæJ"µÆ6 í¬Þ‹k}„Ÿ$ÅÂpÊQàʦەW­}c{ðî ›DÅô@6¸ªÛQ8¼@8õñú‡®ß_GÁ¤]mÐ0ÿ³ß¯;ÞV4w3¼W{ôó0š6‹Ù—_röbÈâ‡w°Q#Iû’ÙŸ~B]^‘ˆdU¨=‹7…kTïo±jÀÕÿŒæ¯?ÓÚ>ƒ¯ÇØÙ-«7k²gOfÅòçkToLvÖ”Ñb«™•àר6pžUoD:,bxG˜NˆØLu‹d)JÉ­­šÌ²m‡ëýá$ìW,¾#ú”áWg,¾ÿ»¿¼hÄÁ´UÞGÑ” ›Cäô µá£Yd’âÚ&ˆ E¸¥d8&$'œ7öß=ŽÞ»j%ØjF»€ü¢ÄVË(¦§}W߸‰y z4&é‡Èrߺå,ð¿ïAR¼«Þ"T‰P-Í´¥|q¹R~õ‚öú5‹×k¼uô¾ú‚þ“’å/±m‡Ð}TÊ6žþø¼•ö²ÅVÍi*Ì£÷ü1ëGÜ6ºÞ;„ʃ`Ô pkêÛÉè•ú{ëMê„nöžz å“nÕœ]R^(Ö¯^SMÙù9é0¥M0ë!íl†MzŒ¾ø;_ zŠÅ·¯þËïðÓWÜ~?!ôÎaE)…iÖ¸øÇ¯È´¥]WÔ×SšyhpízEúég\ýãg4¯dõ¦"½¸kÉÎKìºÆZOýþ=Í¢E HÏ/(® çð]—Ï2æ~…OÆäg 8ÌSÒa÷äs÷Ž›ÿ§ËÈv9æ¶:„NPúùóHIÇC¤¡ ÄŸßUâïY<,bs‘öIǽ@Á9ɉ›Bj’QP.Ò¶éiÜGc÷¼çȸ»^êÐ u•‹iº6ÐÜiœÞú-¸uYÝ; \HzŠ»ÿüŽåMƒÎÔáÙöÑt¤–mþ¾³ø¤Çå?}CªÌ–÷üÁ{>:Ù·±Gçù©ë?öžýÁw¶ùLBI\ÓÒÌ›P«¸åß³@âÚÝlÉ¡©öß{>oBy,BæÈ<¤¸öùÇŠåÍ„8 ‚nSÙ¨ gŽi›PŒöϹú§/ñ“÷Ü}÷ã¾sô¿ø íÖ¬nÖ,GqùœD·Ì_Oè}ù%©4´Ë ”&õÈŸôY~ÿ=·|ÓB¼1ÛéžwŠôì ‹­Q[/Ad£ÞŽS~\W9ê礃4Ђ¶´ª¾g΄t‘æíKnÿð ‘å+-†áýÚã¹n¢W#Òq@Û´µ^Uù-ˆhZ¯CÖûŠ)¤À6mଦzÛ=œBr7¾Œ®3ئ Þž‰:ÝyíÛÞu2ËQ™:eÞsG)”À5M´8Ó§^›eŒ{…êçØe~µqÈ2C)…­BXH|óvŽl> Òþ ÁMÜs^ܧKí.>pÏÝý­¿e½ßï.îy#®›B±WTlìÓœ@ép8;ëçk±>>8ÑÞY”Šâ—™&q¿U.¶í¢ÅžðyЦ N(ƒá‚€\æ9D JA(r“2ÁuÁµÂ„ø\¿®°>ØdK×uq²ç‚¦FH¼$½3߯LƒRY¤•f¿p¸¦ Ö}1àb;Ù?ØAŽ7Òæ|°qÝŠ˜Ö<´ÝÅfWfé®0ypŸ7x!Ñe¾ ÿìyÝŸZ+öϺÅ,ªàì“&þãÈø‡<áO9ÆH©ª0HÜìHŠŒ–ž~‡šê"?ñû>âžÅ#ürï?|Þ~ìõž]ʨ”ø¶ÅTÍѤïC5@lŒ½_ÌþÝ¡o~—"øX(Ó=¾÷>¨pü¿m¹8åö/üVd«óW5¡é‰þæRk¼·! ØYD’ Ò0ro_*ÒÀH2t‘†ó°j¸néŸ*¼Þ=ΰÙÊ,=¢ÅD¯gãPe`'x÷€©Ä£µ^‡YÿM|èX@K9ÔeA’郔ïAæ=„ìpU{ÈÁ9á0!¤Ä¶A¬¥S‰HKÒ³!tÝA× ¨o&ˆlH:ÌvÖUû©y{Ñ"ñ´“ ÝÊž] ó½¸_N˜Ó{t?C§‚=ðèЃ¨`öÆ×bËôÎÒ-šAÿ¿ &rún=§ÝDzOWµ¨,E*pÑåý$Ô¯JáV3š»ÅvÜq²Szˆcõ@gF¼=T™`Sº5dgx³¤½›ÑµÝÀ´x¥ÐRïy¯~„ C¼3ضÅu}~Åèóç$©@¸%‹îP£Kt=dgºu‡L\Û†QþÍ^t6äì7O¨^¿A ž¢³ÈÁŸ/i;‹Ö R¤ãÞ®±Uˆµr_ "×–³ˆ´G6`wtë–ôìÈmì®*²¡m\?/Z¼ ‡„î%è<#T‘2ÿö;f¯–$eúÁfoó­z¿þ5½~ËÍÿü ÝìœYöuƒÆº¿gu÷`hÉ®°I[sšÉ Ý‘Ž`VØu¹Ý¿à=:š(í˜,ÁþI$%B[ܺÚEè]õ!3dQ‚]±~MÛh.ÿéKÜü9¼BtSŒí¡“Šå«šd hgÙy~ñ.ðÙLÕ;ÅLá­G¦Å^3/ð®ÅÕá¾ÍºA¤)*9‘žypÏÁ+_•¾[Eßõ_¾Þö­Í„Α{–…Û=Ô·×4Ë…†aöä,¦ëðB"¼£«çÿøkzg‘W›nzÃü»wˆÞ9åyFs·¢÷ù ’´áöźš9“&YžQ>éÑÎj’~®£¹kH’úÝÑ;Ã×s¼,±Í„åÏ7d/>ãü7Ï0Ó5I¿@¸%7ÿ÷·TuÂå?~Mÿª k ÕëkœÏpÝŒ¶R䣔êú–´? ÎÐã!Ê ’³sT.QiŠ–vÞ"“„¤ŸFm©GÒF®®$Éä^sOD§¥éx„Ê õõY Ði‹mÜ.oà#Þí{ÿ¿³ ‹]îÌáY°yç· ÓеÞ’y"$d‹”nx~ (™ªÃ6UjºÉÎådç}°U¨85Óñ=Ô=©xÿ ïyá– Û´‘•rˆóÀ”û$-$®a*(½kþŽóy?ŒG¨"Цö…ïû5˜8LÕJaëíduŸÆ´ œ‘¸è¾á;CúäSÆŸÌþãr|ÅàÓ‚æÍ;ª™¡[¬É?ý„²ŸPϦØÚ„³dPÒÞ¾g}7Eèœ$ÍHÏÇd£œt”3ÿË÷LžúH!Il ÷ýô¥ SD³£Ü‰H—’YŸô|ÙKòtè^Š.5¾ó'j’]XÑ¡6f·ÞdžÑ^¿aòí[H³ ‘â‘(oï,¾1{QÞ0 ¤ry4Žd8âiŠœ²rüûdS¢Nrh7›“ÜC¶ý8¹"QѼ^qÀ?<Ø×ŒE•E(hÜý ²ç´èðà?Ê0±ëæÄ‹÷ <õÑ|0y„‡6x1úV©ø]ìoîâϹÑ$W?Ö_¿ùÝ )Á¹gˆ±ÍÛšÀíR*ŒâÄ¡ïê–Š ™ðŽ|Üð„Pè² ée¸¶¢]Ô;Ë8üvã Ä~·‹/ë<*+Éšn^¡ú„­1Mp ± ÈÔ¨TáLàV‹-±ëÏÈ>p%ö,³¬C•%I/ŒÛ}»¦ÖˆDáè~‰”Á}Då)f1§ù…*_oÉxˆV†êvì‰îÁ$‘f"“ÈÍþ¸wÎû°¾½m‚w©JPIœløÓká£Þ¥¯aÁmèhR%î+¶»ÍF{ ¦npV•¸ª #6ÓàUR†fR!3…·•ÜVüf Ž5RE‡™„uûì7u܃ÔǬŸŸ«û×Ûq¼†Oñ=mÛ´W©Ók.î¹ÞA~6Bgg,.º:ø¶¥[®qN¢´ ho¿@âh¦KD£:J+t¯‡ ØdªAa[ÚY…”Ð4abl-2ÉñfE³ìHÎÏÈ I·hHÆC¤mXßL0VR\ŒIË„n¹¢[D³Æú„44ë •„TÙ òìlHÔÂФê²@•iØö\£W×3œ~óïÃá{öVl#Îmkbø‰ÇÛ‡ÆÝÇhò£Ö{¨w R°GÑÚŠ tJÚÏ£ÿû QàÑŸ:ÝÙ[;B ̲ÂÔ&6`Á}ÀµéKyàdÇTH¯st½Ô’vö0™$‘bæ=ýœ³!*ÜWŠ|\¦hþˆ{þÐùüøõ$ ÄeŸ@ ½¿A -±« Sí™ü>ñ>J¼_¸ý]çóÁá÷‹ã‹š´­¶\Äé"aÏwá”Þ×YdÙ#¤tÓ‘¥¤ý»ZÓ5Á…) Ð)HÎKRB.Ð?¨DÝZÙ#t‹9Íl­LE`$z«íò.³ûîÄguGu$£©CÿºK‘ÜÕL¡¿ó(×­pëŠvQWÄÚB<2gß5Ü;:÷bO÷cŒ[L *';?C:³D„˜]‰YÌhï–¨Aà ú-ú|Ä–{ r?ºû”·³ÈTÑÞMp¤ØÕF” ?ŠoÛ~’÷Uè-ÇþA/Î{Q¡¤m”mí!2~Œ@$ù#›Î8ÑØÅ„f²¢ƒ=g#ƒýS&÷Ôãb¯—ønEs3ÃIuO˜ø@u58#“4’þý^¢’?MÙtÝÝšvº$$ ½3Ñ9Á¹À÷Þáºt³ß|N¢ n_œ'tww,~¸AŸ]1úÍsìÍ+¦?ÍýþX/Y¿_’?£”§Y¶4“ÚEÊòàÎÐ5X4ùå’[U-xFÞÙÅY°hÛ_ ÛqW‡[ëн‚$x¸ÖªH˜ÿ#ë»–¤HŽ”Ï±;:l@ÍgDg¬$ ƒzßBµýÉ‘´Ð’v:Q’—øÎD+ÑWÕ{ôG¾G'¶†ýFPê ™çxSg äý³&Š9dZ¢Ê[E¤D¬5að‚t0 ÏÒÚ@‘äøõç4ýO¯èîÞ±üyNrqP;?éí¢v=§¹] Ï®(ÎRÖ?¾Â8ð^S<=GØ*¸ÜÈÇîۃר"ÅuUxUþæõ¶ã™îY®í=Z„—ûÅ׬ig+@n§2Þtt«ŽÁן3xÖÇvá^Ì¢ÆYÊÐÞ­ÉŸ_‘¤†ù¯YÝ4 ¿ù’¼§X¼zl#…"žÓÿü »¬ÑyB3½£ž®éVùÓ+ìü9zÆÅoŸ³øÏ?°ZJÏGÌÿü=6)HË%<]]cŵ–áo¾¦è[–?ÏÁµ´­¤üôвcú혮Gq9܆¼õ¨rˆ· šy…ÒcýÏ?ACv–²üñGê¥@k¹ m8@ ÈÕ›[êë)]ÛnmOÅÆ ß t¯Oï³ÕëW,Þ­Ée mmò%¬ l‘zo%éÙ©ZlmŸë×;EvqŽ©ºÐØÎFG@*ÜüŽå»½¯¾ K}&ñËe–ÒݽgúÝ[ôÅ Î>2ýã·—îYØÒ½±£ŒM”·ê^ŽŒœËMÜðŸÜzÂF?`Tà±ø°†NÙ;Ë6n$Ò[žá1ú)ĉ/øX6U™äØfN× ²A“Èv×{çI†=d*OsÒ<ØÞqXè*…¯*ÚYŠÜSן2?Åã:؈eä9wá–òPMëš{à×xÒúò”÷C>Ís½ôÎ1á]çþ‡q$ÞU͇~× ‡ÛªkcÊSR0øä å»`àÑ_Y•jìzMu½@–=ÊgçøÅ‹›ŠÁ—Ïq“)ÍÊR<ãÖ+ºÊa›måHÊÀ³sm‹C“ œ5x'ƒ-Þ§uäú»}1™<œ°œú"6´JȆƒ³ 2Íúý5Õ¤Žöñ« ƒË@l–LÓ4XÇ”*)‘BݤEΗë<*+Âì7ˆ½Šhýž7´= jQ©ÆT+l§оíXìá$ã£Þ£‡{rS Û­Ç⦅Ùð71ᦠH%/¢¯×äƒ>ÂlDTÀb[ƒ*ÊÀŸÎ1Gy˜ìù½»6¢ËÒÒÎWxx»¶ª0mƒµš|<@'ÛF'“ú­u@u|NôûEñÖûù$(q …~œ»{@ë·D‰ð^Gõ–âùʳk:ºÙ*„¿d*‹.¥|zV5³ßR/ùhHÞ/èª9ͲF IF#ò±¦¹Y‘Ž˜Å Ó:ºªA÷ûøjè)Ï{4o¯éœ"-4í|‰—*h6L@Z½ðøÖ’=¹$цzÒ×Ö“Œ†d}Xþø†Î•”£2éB€™æøfA³nÑYŠ5çx#(Ÿh®ßÒ6ŠC£”à†°{¶ I™Etë¸îØšpøGx¶÷¾7¿Óù¸Wˆð^†tD݈4øàN“³è±þP½sÐÙ $›†fºTÍÅ¹ï ¾¨^A2Hþa1æïx§bç¹^¦ íÝ Ë·sdÜ·NQ8lc(ž=¡?§è)ªë%ø–¶±¤ƒn]áH)°MGñɳ°–§¾ëh–˸ÇTY*‰ï@eùÓ’n:£šÔ¨,AJš+°\˜†n©.^¡‹ ©C´k®Ü^>ˆ‹”V Æ¢G}ÒA†Y®iõÖùË·5ͺ%ŒÈGEœïñÝ“°7t“;/o£KúW«Ÿ^cб¯>aÑh·Ù½ºÈ‚u—A Y¨z³œÓÜÎýqH4íî>ò©ÆÌî0$» HÎ!uðÞAé;ëÜa(ωœz™)Ú›k¼P\ô‚¢^pÈÂ+ÌS/íÇF…Š}±•Àuþä˜[ˆFDþ±X*é¦Úy‹îõÊbWkD>ÏÕšÃ.‹cžØîÙù®¢ÌñB=\äÚ™<q½ßõB#³|OquÊF*pÕCѽIó!Ú·ó;eóf™xlÄð3Oà{÷?{N1ʰ^ÐÝÍè–UH)L-õ»yˆáœ-°dŒýŒúÕk:×£|Ò' °³kf?ß‘ÏH%Þv¸ÎD:Dè©,òJlcÂû¢sdžáM«›ÃÆOœ‰![¯ð" Qóéf¢H2…ÐÇ vïV,~x‡Aá Œ~õ)v~Ãò¦B) hy@mØþ'ÑÃ~ˆ"ÞüJâª5ݲŠŽàÑœ ú[á¤Ô‚æö‘ ÈFYtØìK×´'ŠàHÌñœ2٪ţ¯±k±õ ”;.^‘d!Õ T gÌ|lŒ\G»né}òœò²dýò=¤}”6˜Òž`ñã[Hsä¶ [WwA1.×L¿{OñÉgô.RV?¾Æ©>å³'dYÃâå[ê¹  Ð=…««ˆžíÄ}ˆ$úÙÛí˜ÔµÑùžDŽÐ`æ‹0Í9p¶»Ú ©‘i»£Gy‚‡ë»³®·ÂŸ`t`ƒÝv1ùÓg >¿¢y÷–êý =c›¥aõúQŒPÒ…”aFõî ëë5I‘j‡ÖQQ/IÆ=\µ {§±$gcЧ#ì|ÂúíY IÇݼ"¿“d†ÅïhV>Ð2D|¾RS>}Ž”5ÍmEöä­+æ?¾Åº¥\ÁRU=’~LñÜßk¼8x¦;`ˆ{6nx³KÂ=Á­iÒà‡ê÷щ§½½Ã!Á Òñ]î4ÅÐ+©÷è'¦™"z–;ãöŸHR–æz‚ꟑ”:á_ÞeS¬N9ÆœB|O89lé^× î#Ö! Õ ‡8õûOÝóiÞ÷/»‡Cdض4+Ä(§t\ÇÊ}ÝÕâ¤Î*Xw´wÓàn&þŽó9†MÉhyé¾ë XµA¤ƒý› lM·XïüÁý†ncî¹§ <ÉðœâI/P*›ŠêÍ->ͽ³³8k1MRAôG ?¹Bà°«ËŸßc„&íe¸u‹ìõÁÖÛ³Ö{.†anj~Óhx\S…©Œ;÷~·§ÊD`×+Ùù!ÜÖC](ô" ÁeñÜ×™ÄÙX¯ú#‹ÌêwïX¾™¡ò<€Z®Ãv!AXˆDÁу:R8èÚ€Òåyp`‰¯ïšèUCòF6%pM…÷:t>ñZï騇T‡¶QB‡Ž©V‡~¹þÄïè‹:ðïu·g!÷P™ÜêGÑß-†­¹ÜuiXmÕþ÷ï™GT¾Q…UðB‚m*\*+³®: œcç?üû·õmR„Ž»Ðú¾)øÁçºwB?>²F#uбyÇ´0Vê–+¬ <Ô½vœÃš/mÛÓÀèëÏ(Ï2ºº¥›Ì1%»zBZ:V?½ÃYéjºFqñÏ_R¿ü™¶É(FÙ“ ìâšé·d£ ’^ºõ{öÎâ}àÉ6³B•èÌ„He%2Ü,ƒkš€ÜFwão¾9Œ}Üh)Bl׆hé4'¿ìa šYG:î‘ ²ÝÁæ#²Z0ýöFh¼\üË7tׯ™¿]#5È4'ÙŒó÷+Ç[ƒP@o>›PÛ¬é–Í6ÁO Ë|» ÈLÑL'xÕ'¤±©ˆ“ßFš•8¤èlÙ~GÓAÎó`½mâÁ ¾Åm’ ñÏÕ;‡Ô2‰üQd˜f¬B"jW­0F0þÍ—d©eùv‚L{HÑâUAZ8fß¿Æ'9Zë¨ÏtU@#Fÿô[7çæß¦øâK†ÏûT?½¦Y ²ËKzO–}I½ÖdÃ:¸®ÞjÂ6´ Ñì›ð# ¶k‚hqƒÆ$U!2„ò˜u˜^m¸ñïÒÁõ»ƒñÃVª MÜ“¼‰œ½¸Q !ÂzŠ¿ÖÖ-åçŸÓ?O™ÿk?x>©œ¸‡Ý ÜÒNW¸MÔÏç9Ïá!ëÎi5‰ÃYó‘çíCçsLöUYX›éç) Ø~®’ñl¨·I•BIkÌ¢‰žè"M)..ÈÆ9®ªin¦˜Ö"Ó$Ä(ÔÖX¬iHz}D×ÒuÐÿüSòaBýú-ë»ÖCÚ˱kKzvvN½hãw"IŠ!I/ Î4ÖíÕi×µ!ÀHîÑ&­ âÉćœ4*˶ç†ZaÛ:N™%X*!Oj¿ÇŸ–iJÒÏX¿|ÍüÕ4èõއ½Ü+ivÍ·±øÖŠ…JHGC¤òqÔ.xwƒëû¼ÌÃ/zÓm-ÍÂŽjŸÇ%i°·òˆÓ˜õ :‰L4®­q­Ý!iÞá¢ÍØá.žœ¡•Ø ð©ßßb|J’:ÚÅ DBÚ$õ]E~5¦y÷çSŠ'CÚé„zQ£’ ¥ÎÛ=ßT…* „´˜Eêõ·"¡%®®ÂNÀ,+„N¢?dÖBÓl©GÜd¡:Q¾f½ÂÔ1Ú~0@gQ­‹ØN2Ò¾O['”Ï/p« ¦ áÇfrƒj„p˜UxÛ¹Æw θ0 ÑI´³ZÑZdQDšM¼gGËÎo¯ÉŠ÷i4B \™q̆g¸¿çEmÁfâmÛYŽÉ ÝÝc‚Ÿ8Þ# Ö«@©P½¾«h+tøõf±ˆ ‹F D×aš:¦ôªäÉÉGet–­:TY4§1{Eš ›T(-I¢'S“§¯¿wGºÇ('kŒG(]ªÆØr,f±ŒBö9o>Ÿýf*6ç¸ÇYÿ2Ð7 ›]×;ðe«OŠt«¦E”=Š«QЖ!ÒÑN8#Q½×4HƒtÈ,')ÌìŽõÍ¡Rd–’ôú¨D¢ IõþšvåÑy²u4qαNÐE…컢Ÿ®Ý&G‹$ ÷ÙÅõh“· [9|u¯îçÁ­Cù-Cs秨oïh-*I#uòjEw ðÎ//H³d§î>â(ùcîðÁûŽ‹ê=Bðm:A:*‘ÉžïÆ>FI\ÓÐLÖ÷-¯ö7¶nBÈG¦¶©bût o=騇*ä^>üÑM¸‡èƒP¾ki&k<'\GŽ»ï½çãcq"µÇ¬WaÃG¢²ïÖ˜e‹*{è"†rÜ»çGFDG÷¼+  Å\cÃbƒbø¼?&Zºº4”÷’À„8~©ö O·\`j<‚ã€5í.Rœÿþ ÒÄaZ‹Ê‹^R¯²Â°¾™!Ҍ޳O)z-·|MñÙ§˜·¯±"§÷â’n~Ëê:R+¥u ˆ,4†º¡¾[¢òI)Ã;ªf5Ù¶,ßß¡Ë>Â)ÒÁ•YlÛz‘¡hJ%®3x<:ÏÀ€ë*¬©ñ­@=òËI/Áv&Û2êíÂ’]À4$fµdõzFùÅ'hmp"Å®n˜~ 1)Q:EX‹1ÁÎKXIz> ƒKƒ”â` )wé¨>l€‹¶Þxi–Ñl—Êöà.ŒÌc|±w"|ç‰@(­ç´ó†¤WŽNiRbQŸí‡ï†×Õ¡h.zØfŽm’`Åå®^ÐÌt6ã⟿ÀO¯©¦BkTZЭnéZOyq… ¥›ÌhÖN~²k£_I1RLÿð}~EÿYõÛ¶šÑ´šñ×O¨ú™z­é=ÓMgxY’Sœ1»¨ðm¸ wj¦kT9"é«×Øhg'dD’o+ÚyK2 Dˆ&ȶØ<#]Æ4N{â ©¡[-é*»gÕvÚE`3B·ÞÅbÝŒ/(ú Íõ mëHû%í|AÒï£T¤S¹ðÎÚvF½hɨ¤£.±Þ"uŸ|”cª]e0­¡xòÑLiMFïj&RáM@O“Á•v4³9¶!ûRb› êO²gÙ(ÃÌf8 F__±üñ¯,ïZ|güæç ËŸ¦èó1Z̹ýÓ{ÊOñó)MÝE.Œ\ÕV7°—iƒK$¤£>Rº½:v—Ûuí =abÒº€ôf!lÂ{…ΓC ÀÛx¥Á·}ÿl8Ú·¬SOfÜ£r¸ m_/Xß®È..PzbxçP½2ò«Ý¡¨îDLõ¡çøÑçyèúƒ³ç„hoïó ¼ï×ooñ$¤ç#²Aì>|ÞŠOÐ^¿A ×ÁÉEîÏû‰®X®bvÉ<Å7uü>ª î8ÖãÚ ÛYt¯DG·hPepªh'5Éù¥Ý¢ÚÞÃÖûwkž­·ÂÁ=¾ü.öl'¤Ú„ˆ—uŽÀÅ÷2DÂÊtó}Mm6EEÛF$? ïì&äæo¯}b­íÜØ6B†æØ£Bj³ Èë,"KÁTš µÄ¬*Ð)ªÈ2Ò¤\‡Y׸ơφØÙ ë$zaWÞÄøiILKW­C`’ÖÈT„%Íѹ! BÞG†\pðÖ#²,ç½@$rë3½=Fòþ=ï¸ÌM´üL¹o©²û[Û|û?wÌ6„Ih.‹ðýG.p5±[-B •°³ìL4ºÈÂwa"K¢ø- ç"Mpu : ÂÎ.¨à}×…)‡VñöÃw"”¶Ä¦˜1iS…}ÓÆÄw,0Ûu!ƒÀ5˜ºE Æ$©Âµ H°ëfï8ò³ï=2ÉÐ¥¦›/C!`"Iv^ðѹĵ&4¦‰ÞsZÙ8fÄIŒVqxæïÅH ©QeXS‡õØ/Ü·OqÝÛ SôxDx½ÍpÕt´5‹–¨þ‘¯¸§Uðœ‡â¨nûÐõlÅr¾³!DInÖ¶xøú>Óß|½µÃ㓆ÿ¢óöÑëE˜X­k>Êõò—ü³qíÒšHlÛŽA„ R‹ÝÖòMHc»Ýb'aŠdPàê kÙy/Ø[®jœóÈTa×-ªW r…]'±ÿ ÷šÄàÑŸì¶»ºÝNz7FßuøÎ»ð½£ [Õ¨^),Ý|½¥ˬ é…i˜ßX,-mµÆ¬ÛvÌ–þì]3ÿö¯ÿ0C«aqõ„bÔ #°Í‹±+9‡H3²Q¶‹IŒ]¢ÐŠnQíìC„¥°Ë)¶!HźÅïàA7¡ûfRxïÃÛ"˜é 'rÒè1¹-26 „õ$Ã]¨hï8DÑöyh›Ï¤$®®cœ·:8 »½S]= !;ÚéëvÄo=º?BR¢Ö®»½g«sø=p«@2Äö³ïÕC_Dƒ§®sàÓhƒãÃbQgëÍt½çºr,.‘t«5Ù§ŸÉšÙOïZÔmó~Y‡i<ÿòÊ`úç×Èá%ÊÍXÏyÏR¯àò¿ÿÕÝ2ýÓ5åW_¢üšÉ·?SÏ;Îÿéw(ËÍß“öû‡þãÄèª*f Bz—Íš«VÐÓ»ì±üù%Éè)y_³ºyKWiz—çÀšviqõõäç_\²úñg\ÓQ/W“Ò~,óêà¬#’~à' ¡ðÍ‚vaèõ%:Vo—dÏG¬üžÙÏ—ÿýÐrÊõÿz‰Ì²ƒ¯\%é}ëø¸¶Æ8G’{ÔŒ½wk;LÝ1þýïÈËš›ÿëÇPLf²³àr±+ÄIN4f>ÁÔšür„7« ôóó{ë@¨ Ìð{ñ¹;®›¸ÇRa×SºJÐ{ñÚílŽGPO+’ós´¯Éž½@ë5óïnPƒÙù˜´4“Št ©ß½ayí轸¢¼Å0`ðd@}ýš¶Ë(/K\Õ¡ûcŠ‘çö?ÿBÝjQ\c—wè‹ ž,º ûÒžCˆŽf2ÃÜ%./ÁÌ1mFñdÒöønÉêzA~õ ­¢#ÊþóÑ ³š`*M~1Ä;³lEÇZÐΦt•o‚ l’½ÛŽ Æ;ƒéº`Ô ù'_pþÍÕë;„JIG)Ýt‰5¡ ˆK·¶ØfIý~†¾zÎø‹ þ3뙡xö%ÖØºÂwÕ+p¶Bª¶™a›”ô,øÄ†Ï“ ²0âEH¤&ÜÃÚkM(ÜÓ>åÅÂW¸¦¢º¡zg£ír‚© üônqÍꦣÿÕ ”ôx#(Æ’»?ü…º‰>Ð1±UÅ€'ßuèó§Œ>+˜þÏï°$€";÷ØÒÝš»5º?&;+w‰°¾ÅÖkðê„CÓ¾­–U ûø®ÝžmÛ}øîÛ> "¾s¾šÓ® Éh€ØL)÷÷yÎ8Tž‘Ž‚ ÇA@ÈÁ>!D ý‰ë~æÔõ\±ÈŠDc›&x´§Ù0Ç{{\vt¶!Ê÷îa/ êÔ=l®8ÚY…³¡)”‰Ž´¦=âáÁDé#ÎÛãHèSçíƒß³@ÐÑÎfx™¦ŠÎå>ŸC@Êò(?Ü·-g7S¾¡¹›áœŠÎsgZ¬‹þåÖîºsˆrÄå?³¯g4U…J Îÿ5Í»¨êWÿò)f²dýæ ÍÒQ†ï,º7¦÷¬`ñãÌßV¨DîB…”F©3ÈÉÆ„pÈVoÞ!Ë Šq†³PuÕ‚úf†õ•(Æ}¼ ©¦*Ìÿúå7¿"—+&ßOÈ/ú¡IÐé X¶&£• #ÌþòÓ§1$hwVºÇÝGÿCrá½(o†ÞY\*¹áTí)åÑ‘K³@‹Jà¬lì¨Bg\Ó‚R¨<=L:1úõ]têPPxŒh yn÷È—xc‘Yú¸ LJH.›ƒÝlx{âÃ?sŒRy\B¤ÏTíý]tù/_9Mä~àRЕΞ¶òyõ@'¶¡ù=´|óŒh ‚ÎSFoð.j{h´w5ìBü{Pobá]üï#®)ÄiT²‹ÝOûúP—.N„xb†%v(¢ T!6¼îxÏQO!ó4 OM_ÊÀ[vM‹*Ëࢢd´ ‚­ ‰B)d¦‘JƒuØ® “±XˆT‡‰Á&{SØî;cxH|Ûá• öLm‹—{QBºl?‹8±‰û »5¶yïÜ?7¢˜<Å·-θ€ÎØpŸª—#¬ÅV-$•¦ÁÖÏ…O9ÂùN•h|×âL@”7°{ÍÑÖ*1† Ÿõ½àŠÍ~±w°ïEB… Û´ñ`wÛ5î7!Q"ZUù E Úd©, g…±ƒBOG»ÐÆÄïäðÝÞ‡ÿ^ÈCjâ&zþcã¼£7¼*òG.ú¸};x|7Øp8Ç&_GZÐ?ï@d 2‘ÑyàˆªûÐy{J 'xÜÿúÔùyôû…Öxc°uôT~®‡ÎÛS¿ÿä¹"îM6!EÖÇgi×U8³dWôÿ"²+ÿçsjl]i©øåÈçñõ¨£ÿÑû÷é͹rl³ä"Nˆƒ»Š'Ûš8uñÌ zÝϰËèõ¯ST–àšÛTY„ ¸¦6Ó32†<º[ÅýÎs’°Ÿ''7 œuáœØhsŒM“"E¡Pi†*ö¦ÞÞá³ý\Og>""}ûnh=,®F#HÎÎÐi…ø½MBHMÒ‹v/0ÄG“L¶jéV6l¬>Ôé ÖOÁß=~•8 0ÚY¢r{ñ¨G]Ö‘Á¹w2d²™>‹{IEÀþ´Í#<1tËÍâú-"vžÀìÖ4··8Ÿ‘Ÿ²ú‰ëï…®lc-9hÉXÿ|MþÉ Ú÷ohë ]tØÆ¡’àƒ]/«@'‰ßõÆm`óŽ:ÓÑ­V”_ÿ†á¹çúÿ÷ª"L‡‰.'vm¹øo¿FTS|y‰X¿g5K¸ú?¾¢{÷’ÉŸ^ãe"!‘:jR •¤ÞálN~Ñ …™­·Á(ûã!zpÖÈ’“dž?<™Ÿß GQÊ0–Ï2ÒDRÏW¨4ÃÖN´N" …w4³%NJ²^/Ätoš½±mC3[Ó‡ˆüì!ÖtóÝK*#IJ…kVL¿{EÛ8T"ãØY£„D•C²ó®6žÞG Û5´«Ž‹ÿñ;T;Åês´˜rý¿~&¿ü”¤ÍÍ-¨ÙxˆJ-ÍdJ·òdg!‚!±Õ<è>¤ŒJ—Œü|#š)I7ŸÒ.ºH%ˆkÌ9L×àDÎø«ç4o~bqÓpùþ±¸¡iJÎ~{…­Ú0¶µvÒ-:Tž¡²ð˜ºÅÖ‘iìrF{7GäCT!±‹åiÁTlPeÖnëf `àdQ"uG}3Gæ#Ò~È 0ËͬÛâ‹!ÃOŸc§ï©f TÒGç9Å'chjÖ×+Ò˽g#Úë·,_.Ñgg%ÂYT “?~ÏjjÊo½_·ÍŽR(©ïõpÞŽ/NÓQ¾¥ay[ÇP¡–Žp]5'="ÜaTõ½}û hëþ¾-S½Ý·… \™¤g#„5»ÂcŸ/ƒšt˜FòýF÷‘óv‹$Ÿ¸~ÿÚ{×sƒ½¡X*LÝbÖ&ˆ­MM’aŽ`/Lpš—}ðlŽ?Ó‰Ïupž[ÚyÔpH‰L<ÍÍ‘ IÙî÷D Ñ–³™:ÈÓçùéóVÞÃþtéÞ3ŠŽTóÖ°=wwÐÁá]p‚'~ôÞy´=*ÏvÂB)|ÍjF;o#pæçÁšd‚’2èÏL‡q_·dÏ?ãâw/ðÕo Í¤Æ ™NñRÑNÖôý~õ–Å-œÿþKüê=³oß‘^>'ë+V/_#Ò!é £[Í1• )‡Ö Ó4 ÏÎ"]’‡HÝÒLæ´«&h]”ÚRDm×â¥F'!2²³1ý糿|ËüMËÅÿø=©¯1º@4·Ì~®)Ÿöq«Õï£2D…œuè2#$A×¶C”ÆÎo¸ý÷°2;¬Ê½ïW |{Þ§#„‘ Ú>üÀ_NPyƒKNp¬´Ä®kl½á ;D’¢{ÙaØÉ½.RÜog­Á¬ê‹R'Á¬§ëp>DÕ É#1Ãþ¦å»E:i¤|X!{¯‰r‘&‘Y0÷Î?Ú=Ür~,aÊŸ~Ž"<7owWìµ™›à<ܦ`nxS„heg61—ÁYA*ý!ZºqˆÜøÍÅ+³œ$WØU‹äÑòL`V!T¦AÄf›&LIÓÈ#µAˆ˜JÌl‰ì—øª¢« ÉYaM°÷R:D Ÿ}àégã>~½Æé$óš.pD½Å,×x• b‘,€º î±Öo‹Ù둤³èPYº ïX¢”kwÅc³IÁfGå [‡cS…±£JUÃF‡Sw1}oú²çð‚w!¶¾ßCk"¿\mFïŠÂ}Ë€¼{'I ¶jwö[ìmÀBÄìî½Ü wÑß{"„¬ð±÷×WàázFe[Ys R…äO©4EäÁy$ˆÁ|ðéÔ)Ã$ʹݢR›Àž "s.ì *Ë‘Úaj„°<µ{9¾­1ñƒ¹¶jòˆ˜Iq!:œÁïI? ú™"qtUdTœ!QYüõcHÐÆÊN±ÇUß­E©ä}àÖY‰8܇¿&ƒg\÷w-.~¾€zÅÍкU,‹pö+öì&î÷:¡–è0ßol˜8ƽãð8ˆÅ‡ô‘+¿¡$ø2ä7b×)\Wã½FxArVà›.èzIH³¬+ÌÚ ²$ø»7u  ®*Œ ¼L±q!œRÊ£ ήˆð&ìERɽw+×ÿe@å¶0œs!þÆ}{ÃÉv™dÑÏo3NB•{®#"ÍнôÁóù#²¼ïÿ ñ±×ïlÞ§­[‘NÃçÚØŠÎÛ>ŸøLÎo÷²­ïÑÞ8~3aÅu˜Â9c¢ë’ÿ;ÏÛÿÌΑ,î•BF=ØÞú÷âã~«ˆçö¶vuÂGG ‚Áö‘ÖmtvœÂîŸÏÞ9T^„}Ä€-[…©šPA§æÚ°Ç`ÖÔ³†tØG¥ ³ªãþí¶§Pl‹ „øX?lÖ妑‰“åíÙÀö{ “úào‚ûRjÝÏ1Ó]gI†C 2 ¶£›7ÈL;Cïv®8ÑÁH tªâßÛkˆ:C·\‡d×îý&½ôÞÒÚó>¢„£[×@Bþär›X8D•ËîõØ7rËßb‹’ì+Ç*ßÇ£E7"*!eðl|ôÞïêýξ¤ ~«Î¸J⣑ϒóÇuÀIs[›]qù€õÑ !ŒÔ·D6hRŒ=ÿîÝGr ïye>l‡´)…RØÕŒænÅït/¥ÌQƒ!®^€(cÝ=7‘ÝÈE¢A3›†t3%vœ?ï‚oj¿H ¢7­ÛŒeöÆÙ¡ œyçSÎ~ûibñJ‡ÖÆ!óˆÆL–È|€†vºˆ¨YO4ÒAÒË@r~Aùt€LÚë7ÜþçˆÑ3.ÿ9ІnÙaš@Y0MGv>Ä­¦¬ÞÍIÊ™ö²¥]tŒ~ýtwµ|3¥üòsξ>§zõ–êΡË$iÝ’jÖ0üâ3üj‰WÐÍ4‹ /$ùøœd˜ãª®“¨²Ä·sV7+Æ¿ý‰ªXþx‹W9ý¯¯hß¿bþó‚Þ§Ÿ_Ž‘í„Ûÿü§2 eôÍ š·/©WfKQÚšæ;‚ëF>âü÷_¢ýœå·Èþ%:s4ÓÞgØvN=]‘.IrK5™¡’ "ŽP™£Íh¦ÉÙ9ŸD˜nÇ„€[­cA$Qy‘ m÷ù†Û¾N"O7›aª@UAѱ:ÆðEÆäO¯éõ5Êv l@ùï’ñ)jêÛ%Î;’þé¨ †©X]ß’ôG¸j…ÈrÒ,Á¶5R<=‡ú–Õëª?À›feH/.ɇ I_…‘Ñ¢»ãöOoÑe6lÓât‹ß=eúï¡øú·”}ËôϯIŸ>#I,Õ¬£¸¢Ò8nlæÌ¾›P<¿býú'ŒKPHô`H:ÌèSºy›¢ºÞ{M:«ÅHùÚD‘·ófQÚíæ6RG6S³°ø±ãYáñ2çìWŸ‘æ1ŒG+¤Öض †N0³kª»–Þ/¦Ý¹î…A­Ú=+½ÑÐù¬C!(.Êp0Ö5ëÛ • ªŸïÐCºÉŒä슴€f±Ÿ!D‹k (ª$í+êëý¯ž²øö¯$Ï¿dø¬`úçY¾º¥ÿëßÐ{nþçwä ÛÀù?ƒ2sf?ÌQe?î{o+\ÕîhGRN©ö]ˆ>? þÌ›ò£÷íð\ÛÉSK’ó>: ô¢m¸Î©}Þ{d–”Aè¹±þ:y>0Êûø<§ÑØÇ®'òŽ¥[›hÛÀ-]¦HáxÜ<Àþe÷°»ÞÖoây¼),E˜Fø¶£™Þ*È/ÎðõŒúnMvqÜYxà¼u{gàC5À£ßsØ—Ûé%TV" «—¸N£Ê,ü¸÷'¤“ïžÈy(l^R>+Yÿø3ë A2Hè– Úé/RÚÞaMƒõ)ão>¥}÷Šõ¢Cªëš­kÔð’óß}ŠèÖtk V GývBùå'4¯~`µÌ<éƒNÈ/ú4o_3µ x:¦¹ž]]ÑMßÒVŠþó§ ¾¼ y÷Š»oß#”@Ÿ=ãì‹ó?|‡qI´c”8kB:¡T$1D Ï)¯ú¬~ü‰õÝœdpÉðÓ!ÍÍëK„ïeA:(¨ß¾aù~J6~BÒW¸Õ2¸…ÇYIzqA0è þÖºŒY%Jcç×Ì~^2þÇ_“Ðàœ@—šÙ·eñ¾ÚÚÏúÎù@ 1TYýC b3*Ž<¾€f$Ã(Tpîps@v?¢œâYºþd´è&šs½Ež¼÷àÄN°è-E2,‘äæøå»çÑŠòJãÛ†n^í!Ðu„ât‚ ÿ€bõèõb«î÷û‡šÓt! ŵ8¯Ñ©ÚSËàlAÊà;*„B%ÐUkºÚ„Gn€-ÕêÁG¨”$‘tM8Hú¡gá¢|6@áAIºÅÆa?Þ=t¬¶iãF;•d¨Dà²èBRb—3Vo¦ˆþÞ“12Žõ“H¹™h¸‚Gº 0X+ÈϘù TPñËá˜ÞEI·XÐ.G42]Ý UN^t¡pÔi†Ô‘c*tô¾nikKùô;Ðv %z”㪊vÙ§‰ÄèªTE>õÆ–4râ “ ï?•Œb&o=zP’–)Öh íbÇb½É[i@‡\‚Jb#áãa¿OG9ÕÛ[ôÙ9‰è¨î–tMGvyE–[Vo§È,ߺleËHSQMƒ£‹ÎTœu‡ieˆU>Åaß"ŸB<¾oŸô\Žü|‘ ¤åc(»ÎÄ8û~züøÏÛ‡ôI{½P[7˜ei¤&•HoCR!§>Ó‰óùC÷°¿/9C;‹~÷§Žk¡Âsu!ÜZ™ÿúóÙ„³ÀGq周OltA!îê@ã• 3Ìlé"š+kÀ‹s&L碓–³$)RLµ¢ëü.Á5"Ųף¼CSÑÎÖx⺳žìb„]ÎéjI’+d¯@kÇúõ Æi’RÓ­’¢Àuk¬Õ()IÏ×RÝÌCLÀèŒbœÒ¼›àPÁi«Û„—E÷yd^’”)ÝôަjÑÅ|¢»möOO¨I]×`è4Æ~›-€ÐÁ(ê§d™£s…w"p½×sÖ“†âÙ%*Ÿ2•Ô7w4+³Êú)Ä\üÛ¿þnFR_¼@:¨‰ ¹»¥™Ö¤ç¤ã tÚl¦* ÈaÌæCŽGŽpÇuOp¤ Zá-8+p]C;ïYolà>ú}Ž•8±p"êÔŸàV³ %°; +y@!+™Þ`ZMþd|_~r3:ùûÏêøoˆ£ê? ÚÝ7¶— W/ingAÅ^*žw“'ƒWä¤ÖKÌÚ‘ 3ºéšd<À®fÔ“šþWŸ3ü|Dõê-mP\ Q©Â­î˜ý8eð›oÐnÉí^Ñÿõ—°¸föf¢`ã~¼™Òÿì Z»0ÚßTÖã½Â.'t ƒÈ%¾•+Úéšôl@}}Mrö”Á'êwoiª”ü¢‡ð’´Ÿ„|ÕÒ­k¼T¤Ã@ROfa$,e0^¸f‰«º ²m B+šéšÁo¾BÙŠzåÉÏz$½3Ÿ°|y‡5 Š!ƒO{¬~xƒKÎè2ñÉ‹ÈÞ•3ú­Ýô4‹†áo¾¦è{?^“œ]@;eùfIñì)é ¤™Iõ¤"?ËX|÷u«Q lÝ1øÕW$jÍíþLöôξy[¾gñóœô|Ìêå[ŠÏ?ÁÏoY¾]ÐûòSÊË«—oQù´ï™û'Ó-b#¸(ÎKûƒâöšÃ=^¢@"”¥,i¤§¨@Ç6S{…•”¨TÒ-Ñί@ú–j¶F¥çF¿úŒ,kYüxKzñ•Zæ?¼ÆvžÁ—_¢Ü”Ùë5£¯®X~û#-8ûÝ š·¯XÞÖ$EARöHÆ!zÚ®[ªë÷˜&¡|6¢»~OµªQyè ¶…üÅÊ×xUÒÿô‚îö ÓïÞâ•ÆÍÙï¿$Õ-«÷k’‹!ÝÍ+f?.üêk”Ÿ³|½"¿bWKTÚ§÷bÈêåKê¥ûfäá:ã(ž=§Ãì/¯A¥;[GëNh â¡éýÑ ÙÇCñDS¬ÚOzŒ¿yŽ0Ñ+wëž ðZÑ^ß`;Mþô Lé©T"µÀ6/<íõ-"“_–tÓ;ÚÉ´:=‚©|HHFÌä=«÷ ÒA‰Ìzôžhîd#„kX½º¥Y«Çl|AvVÒÍg˜eMrvA~Ö "¬-u/ bB* ©—®kiç-fµ žÌð:!í(/û˜ÙË·Kz_}†bÁâçYp¼Ê{$Ã^t4i‚Mòtó`(Wø—³‚ìì]ê­•Ù>Îw+š› Nääg("´“ ]eÀ9TL¶w¯§]qý± Ç ”¦½½ÁÔ’ìÉYH8¶&¨R‰HÄ¡%ꉅÇÎçÓ®WÑ!¡u8³°‹…T· º©H/.›„³‡ÎÛqÉxð|Ž.íÝëår{Ìë,jE»×Íjôh›9-hÛз6.cÞ`×!´øì£OǬ~~Å쇊Ͽ¤&˜üñG¼ÎãÇõtkÃð×_Ò;KcüºÄ;mXÀ%dL.ìhïî0­"¿:ÃV‹­vÃUkÄàœñ×Oh' ’AI’ÀúfCâVK’ñÅUå_ÂÈ!ƒ«„»ÿøGƒ8l'9û‡Ï17o™½Z1øú3ݲ~;%_ eKõ~Eþì :•+d"¨ÞÝÑM+²/vÉòÝ‚lTÒ­:ÊçWØå =*¨^¿¢^è ÙÕS†Ÿ]ÑÝ…=^ä=T 6¬ðÎj¤’ئ¥øì RQ3ûö%"Ë¢ˆPéa:ì—MoHlUÀ¾ œ¡dT"¼=‘SÿÐbàÄ‚æ‘}ü’dÒÔ."¢ Åq*!õÞœ6j?)ü8…@Š!\µ¦™UÄLó°ij"}#ŒK;@…ôµ{¡"œæ”‰ø‘£ðÄÓ´p9¶]‰%Iô÷Pw/‘*Eè]–7¦]*ÌÊÞ¡©B à§Ï½R½}O55dg’~†[ÍX¼]2øúSüüŽÅ»ågÏp³–7Ut•»¤º ê"2_<#âµ`1¥0ËM<µ‘!u‡­=RyÚU‹.2Úù ‘õ|r†]-h–kdž“–Šæv†s:„ªÈ`Ï#u‚5kºeÆiEÉìÑ6~£BxªÉšÞŸ’ÐRM+’Ñ€ü¼¤›N©o– +J_Œh^ßBÖGÊŽv±¾¶R!“,D„·1Î T*i–5ƒ/?A6KêyGñéìü=«ë†ül´µ¦rë5Í´!;/Xýüš¦‰nC¡÷Åg$rÍä/oIŸ»Dš‹··8ã)ž>CË5«»ŽÁ§cVßþLësÆ¿~Fóú%ËIK>‘(õȯØÉœÕ»[¼ÌI ïjªÉ"ˆÞ¬ÅH†=”0Èþ˜â¢G{ý†ùO78¥A¤ ¿xAÖ“Ôïç¨anòžå»šòé˜õšBWã]Fù´Ïêç—T+OÚ+ÐI(¬|gI/¯ÈúŽÅïƒó‹8´Cût‚}ªÄÑ2vÖ<\@CHˬHzŒ¾zN"ÃÞB‘/Ю×4wKPI´wt Cšœ”!"ÙZB1d£¤»]ñ&âDjÃ7ŒÉ²B·¡fµÆzA’*<š|< [¬HÏzt“)me±mµ‚l8"-5ÝrŽi,ºÂ_6S—lÜ |vŠ%¡ƒÇ³YV˜µÅu+ªÉ’Œl0@hfÝ¢£üü)ÒW¬ß¯Ã¾¤3t¦caÒo'vŽ`:zÒú=±ÙÉ$¿8½ÛºfÈmZâ>Rꌉg…ÞÖ…Î'l¸—-EŽÓg‰·=è‘Ä–ÿçíæ?;ŽB]ŽÏOÿÈw#`׸º¦¾!t†Jt¼ßà´”{Ó\ð;ÞþÉóùáCxK3]áœ$äêM œCæI Íí ±±„Œï®.=÷Î܇ÎÛ‡ÎçvHJ6xçï§)î!èB_{Li-ºè!õýMì…°O=¤F(¨ƒKCïóçôŸôXþôŠùÏ·d/>¡7NXþøëw¿ÃvžþgÏ)I¨q$ØuK·ˆ³ÒÛšF+ ¶©qN¡²[WØŽè~Ô úzç}ºÙ=¢•§™¬°Þ᪚dtF~Y°úñ%+è]d,_^‡iqŒ Ç úŸ_ѾÇò¶¡¸<#+Uà­')؆neQ½)\Ôm$O†¸vÄÉÞ#t,|AR*LeH}0‘IÚùœ®µ`,2+é}òê)ó—t¯|À£Q0!ª›)Bë¹ø·ýý ‹'ç¡(ŽEÌV˜¡f6Á´’ìb¶Û£EùC«¦SÆëÇEë©ÂöÑë£-›ßD~‹`s…ƒa1úƒ¸Æ“‘œ§Ä=±ÕÀìý;7o6î>$ÀI9Wì,³œ¿¿1{åîÑœG¨ÍH>ªÄO ÜÑöRb«íd,ÒN%£·!|@¤*.~æÒÑÍ8I?c¨§k²/Hü’jå)ŸžÓMfgèª& Ùù˜¤Ÿ…GªÅ6Ð@J;õ´3¡xÁúk‹DáªõÍŽŒt<ïIûAx¨ËŒf:Ç¡ÉÇ%Ý|J}»ë*C¦‚v6Á˜„ÁgO1Ók𕧏ã}K7_¡ãT&‚…3á=ªH°m("‰Ü d¢ñí’véÉÎ ê·7X#0uCùÙs¨ç´+‡À¡#tjY½½#={B>,_ßR¾x¤Å I7ŸÓÎô`„T†nYnV’H¬æ¤J‚b·…DÄ`Mç­Á‡«ÚéQ¤`,º7 $´7wt­@ t]ˆ•öÈ"Gg BP%¬ß¾c=©‘Qt*E,4úE°-C€âK×yÔ ŒÅáCkÎÐ-V;ñ ;a¤P2ÒÂüÞÿ¼¡Ø„û³uMþâ9Ê®0&#¿È©oÐ5X—Q>c&ïéÊäOúÔ/_áŠ!ZÔ,_MÈž<£IV¯ÞáE "aðéR¼Ô¸¶¡™,pÅÖô†ôž=AyƒP>hMMýnW)É 'í—à;Öo®‘Ù€òùˆnº k|ðï,* ëõ«÷¬g5JGŸ_gð.P6îÏìcH‘”‘NÇI$Ê9»å<Ÿfmd9¤ÿÉ%ÂÖtë–vÞ„ %Â^¦å–¦æ ~·óm'qöág61Á"ZºfI;«Eèbì{ât£ˆ×·íl‰ì|z[O©oÖöÈÇ)ÍÍdC¤[SÏ*tÞCÊ@-¬—8«ÈÏGAÁï7b¥€’ÕïÞCÒ'ª·w¨þ½ççøº¢ž¬Pý•Hd¢èÖõí*xÝâCpC‹)¿WÔù`æ+DV µÅÕÇ¡Z'¾ëy í!òH´ÎÛ<ç:ƒõ$ãqØŠÁ5ïóá;ØAORi>â¼Ýü_gt!Ô^Jð‡Îç}_±#„ØI‚[MiW–ì*L4¶,Ž4D{e°™ ƃçóc5CLBg× ÚŠ¸¦¦›ÌB#˜'¸¶Âµ‚älk|„O³ø®¦ÌðBïÑ-¸ïð²õ©ö!Õ²Ìñ¶ÛÖ;º_"lGטûáv®Ã,V!Ðäò a*Úi…ŸS\Â9ë-f1£[yò§—Hºí»cM­šë;d9@ú5m¥É‡žÕuMïŘúõ[¬ÍHFƒHëtîЬ1ëœEö¤ƒ»jÐE{W×4¤£3T.ùY¤H)èæSªwDoÌàÙ€ÕË×t­¢xrFÞÏ™¦¾¾Z—˜GB—=T¶6OGÔïßѬ(&¼Cèp Â"eB2B·¤¾]’^Œ1Ó;œOQY†”(åpÑé†fÁâÕ ¨ôÁ%v4©0-¦³!¸+P8B]>¹@:{GJ´su…s]¤¡HÇeLßÚ‰KÄÅ B="*ôƒ×ïE…+§à¶°IdîR€5»Í~ÏŠFpÚÆÎ?ÖAï[Úì[¿9C;Yál@˜ó‹Þ4´‹n÷™Ž ÿ“é5» Ç;ÌæÏzÐÕ4w±{–<@ùð‡v?”|L)rmð£>ic²{>Á¾+C&rëÝFDíb‰©»úfíº!½ºDûšºrô./pͳZaj "+|ýÑ®1> Èí|©!;ïÆØôít…i#à¿ùüiÒ'3:#ÉÏÆBhD6.Qªëyàl]ö¨¯o¨®W-#ï´D%ŽÕÛwXQ0üä ³¸e=5”ççȤ¥]¶$e‰* ²a¶¥¾­È.ÏH As³€,'?/iÞßѬµÞ¿¡š9ÊgCê·ïi×–vÕqöÏß`ï^S-ÊY’'Ïɲ57ÿñåg_ÑÃô»÷ô¿ùŠ,uxá©®oéÖ¥¼Øùâ ¸Ðé Gi¶±­µÎÞ»+xcigsÌÚƒ <㤢ROu=Å‹œü¢ ïDcâûªƒ,MÉF%*³?ÿ•j i&±žP@ËŒtXD¿N¢£[®hÉÙy™à6ãŃ4Q‰í| ü÷Uïû‡µµXÓíF11‰J ±ë–á?ÿ ¦o©M³Ï/XþôSµx‘“–[­@åg\Ö¯Þ#çdIËâ݌ާ_Ò;sÜþǨr^Ñû䊴'‘iBs3¡º›Šn¾Àç=úO/Òq]C}7ÃÔ Ó !,ÙÅÃêÍ5ª?&hšë%è$¢´ždP4³ï~bù~.³ jiZDš‡h똈·…ÁŸZ)”T{6;;×¼dëÔ„r´‹5")Ñ… –Rœz6‘“¨¼ÑÄ$ÕG®ßŽäª(ï܇µàŒÝÇ8ŠIïºtÞíÙÊr$’{“¿£óVðmC=mIÏú(iqnÏõ#ÏçÍ"…YV´‹&Ðiš5Ö’A“\Or™7ï¬gú¸88>Tcìß³ÐÎVØî7 ¶ª@äáyÓâ­ Ïk7vó= ö{@âÀ%ië\f[lUo3 >l‡,ce­7uLoö)Њâ]C7›Óµ’üj õ‚faIÏF¤ÑICõûHV,š’^]‘Ó`#é£8¹j¨ÞOHŸø"KÉzC<-BDŸ­a‹³Zà º„%=“Ÿ— $fòžÉ_^ã“| œâ­™]©êŒD„ÿ0C¨a2(w¼æM—ã…”mÝX ± X86­:!RðÇc¨{þ‡®ÜçG[4!y° ~T8ýÁëø†ÞoŸøÄvx¿c}ÌTÿ÷G$ãžéÞ÷àïs=8ƒlþ{¨Ý*lf‰!¼(Ì&Ç›.Ø÷îíH7ôI†9v±ÂTf+˜q®Ã[I~u†³ªèªT‚ÊRt*c^½*b±§¹Ü›¿>àOuËhȯ˜Ë;LéQäçC|»¦]ÆÀ ¼Ô¨^ ÝS{Êgg˜ù”fÑ’âÉØŠæ®A)yø©"Òi\G3_⺠*BÃJµ´•£¸<H˜±˜uŠPâ¨oZDQ"hñ.¥¸áºß™+è_ýë»Ùž] ¼8ëQýI.hï–èÑ¥bÌ1¿Q*ÜjEs;G9éh€JílhW½,ðºo'´‹•‡"Nè,?&3¬×9Ò³1ÅYI; ÏL)Z#3ÈÎâbì¶"z¾n\Â$cã½AZ]Ý"ôaèÕ÷›ˆ×=Û.!5ÙY×U!Ý,ïNùÝQ ÉFf¾@ †Héé&sœÐ¨"#ígaœ<[£Ó/Zl#HÊ»^ƒNH†9f±¤[’AŸì¬O{œQÒRR½‹ÑîIF2è#]G·ZbÛAë½Á5¬Eö{dã~5§ž.:Å[H/F(¸2Ms7Á9MñdŒ™MhÖŽlÜ£¹¾Á ½×;Çõ¸?ÂEšÐÙ(§L±NžÌ›Ø¹Þ¼Ðäg#°mÔäFÛ6¥v@é}xS)øØd‹ãk¡ZßFÔ-Ù¢_!è#Ûß…‚À»‘úAs3!»ãÛ³n‚Ç-šìò ·žQ/:t‘+Cyønl‹¼s¨²¾¥‹Å›Pç4Ù(§›Nñ"Cê„d”ÓÝMÅ$14K‹*4¾ •¶-*Ï£]X ±‰Ô‘ÇìT= tŠÔ×Ö!hM‰콄(wgpm·ÕÎÈ¢$”A´rŸßœ‡àÍáÙ¶~

ÇâL(¹µÜdˆÏçSçgp(8°¬•\&˜N’އÁ‘£³jÿl“»¨Ã`—‡kŒ{÷|ÂDåàÄξPxK·XÇøj{`7ëCf%Éð±ïaï¼]¯èëè¬#N8æ|èŸ(ØMÒC]>«íù,U â1m‡JÓÀá–™ÁáË#„Žßk°èLƒ0qЂn2Ãy…*\ÝbÛ HBcáÂ7íßÓˆ¹Î‚Ö(åhnfáï÷¤ƒŒövi]Ó_`Ök¬W$ýàä“ zØÕk²ÐøÎ††Ã4tkCz6À.Wá\R)é ÄÕ^i’LÓ-4‹:PmD˜šo§kؽFWˆp‰³ Ä\üÛÿù»ixñß¾!]˜¢ê€6x‘åaÕ íd!%0í§{ö/â¾aû)ÓõcKš‡BE¬ò""жÁc5®B§!ÂÔ™Ã@’{ÆëGÝÞ#QÞ§8YékÔÝïlŸ0v÷ܳطïÙ âGѼ›ëebÒ»Õå~}>A* B¦jO ûýA䲦%2“à%®]ÒNW€éfJÐÌ*Æÿíw¹añê™õ±õÛ¤$¥§]{Î~÷ íû Æt4Ó*í“uð Õõ Õ‹n±øö]·¥éÈDÒ·Q¦×TÁ B2Ce9Þ­iJ3þ‡O ™1ýîÒ”b4À¬–XQP^aWw´•âì·OYÿõÖ C·¨8ûo¿#O*&¹Ef}ÒQ8IA4ÞqûïßÒ4*DzY× ÿá÷äL™¾3\þÓç4on±­ß%ÒálG;]ѬЧÏÝ+œÿæ õ»®«hg5ªèƒ7äÏÆÐÔLþò3ùW_S-³ïîPÚÒÔ‚Þ§/PnIs·Bö†gªPÛQ¨ÐWU4óßV4ws|:äì7Ïp«%õ¤%{2 ˜¦eþ—Xß­ÉÏÆ¨L"dN’KÌ|NµXÑV޳_Åèó!Ó¿ü•ÅÛ5iž"Ó鸌֔5Ít^aMƒÐ)JFŠ‹u¨r1k(¼]ÓL ô½ëïÎbM¼8½Gë’ñ¯Ÿc·Ì~Z û²¡¢¹b“>½‹»2ô¾x‚¹}Ou[#óð.çç#°5óÞ‚î£Ó–v Ù8¥¹ ò1ïϩ_¿bñºaø»¯(Æ’›ÿï/8ÿ¢ÏüϯúRÉ ÐiºÅk4I¯ÀT3Ú¹Áµ5úé3.ÿñKìûŸ¸þ÷ŸH/¯°óšd<¦¼*QE(ìgÿñGF<ÿÿ†ê»?q÷Üþ³ –?¿ ˆô1#4uR§(µs½´ŒsÆ_ö¹û¿ÿ“–HÇxÀÀ›YžqñO_¢lö=9µG±1–fÄ­ø©}[(Ý|‰rÏ( «Î¬©oæXgZ“öÎÉû0=áâüLß1yu¦iJ2ÑÍoh›„ò<Ǭ«{œp¿)¸œ@÷˜zÂêí$X¦‚®K8ÿýsÿùgœ¡”¦ÿ«K–ú?|FY6,^Š'ýà›Þ.©ïf Šî}¥»M¨×czš z–iLâϘ=ô¤þÆã½®Âµ!%Õ;è[ýoÍ6%Ó[8êJàÚU椃4Üÿîdð†7 ‰Ž¢Sw@)Ï]é¸DZþTÌç³Vt‹ eZN;Àu+LmHúCÄFéï|ŽÃ:Šô¬Dr8åþ˜CH²‰ox4¸ ÀÐ-—x¡-Sì%ÞyLK’2 Éè „V!íu½ [Öá%¿L—åÀë­ðö šß/^ÛÍd×XÛa#öÑR†4Ñ4‰v‚8ƒ‚¬_ Qè~á"…vºÀË"¾ó[Ö×3$™ ²²G6*Pñ½©¦¹žâtNV&ÿñMké=ÿ‚Þ…`ö§×ÈÑ’Ô!ÉúÝ{œ/}ó]Hª—oqä”ÏÇ4ïÞÒ®<ƒ¯_`çsDÙGÊ–õë Îhô(G鳘PßN1.¡|þ a[zŸŽXÿø†®+ÈÆ)v]“\œ!êkfoZ.þá+ªŸ~ k%*+P¹ã@KÊ—4oâúoѽ<†Tj<utV}\M·\ƒVsñoÿú3”ª^†0f‹vlbŽ¥R¡óØF§ZlkÑ£èPÜc([ÌøÖ=#ÖGèd4Ñîæ P ºÌˆMÅ Š“Åî“mL°ýý8äãø\±½^œ@{¯ÿ¥÷|ÜwÐ÷GDBGˆÀçU'bUO»‹:ãÛ6,|!O¸áxP:¤Û°9ï5 ›©ƒ.2\Û…Ù6x"ÚmU#Ë^ © zX†¿å|ˆ‡F‚–ø¦ jÙ¬@h‰Á\ÓaªÕïTÂnÒÀü6&8|þnYºñ£–ÿÚþ³=’+ËÒDß#Lº‚$ƒLQ™YUÝ=3ý3çþ²ûÜé骮JE: ®Lq?ls‡CÙ=5ü’‚wƒÙ9ûì½Ö»Rénê,AYÀ¥î‰}/®6é°ŠÕnZÉDº™!´ ûøc”èö¢wøm{wô†ès£‰ƒÜ³ˆe„º‘‘Xb¡–&²° ÷ÈŽú« ¡îPiŠ„V6Ød2Biðu- óÝ™.Ë0:à6[¢-HF9Ñõ² ºäcwˆR|¶ÃaËZ¶˜€µƒ¾ÁŒ&$¥¥[må¹RHÁ³K§tw:Ѹªî¿tâ£7h×}¡xcÓ¹ËwÝ%¦¹;1²7YUñfä+ [G8v~ô᫚Ðù=±B ¦­Ðyt‘Aß‹á¹È…¨ã=‚L±ƒvÜ£³Lº~’² vC(‡²$ãRº™ËZ:´‰hÌc+f ­ $fÿ®š±ø×§iFŒŸÎQTôÛ@2C¡N’ÂÐ|ø@·öØ£Ê{’iA2¶tëWy1ðUkáp›áóG*Ãä9Ñ{²Ó1ù,§ß´‚\<="¬Þsö¯?‘?ûšÑ£‚öÓ1*|ÛáZÅä›Ôo~$ùâk²°`yÿ·o 3ý†‹ûž^ÉË®“ £4Q+bÛâ|Ns”s0žsúû.ÿÛ¿Òôcf_œÒ~|ž?E÷Wl>,)¾ø’ñ|Býá ÕÕšäè§ÿðŒöã]§°™%)šósê«–Ø5™ýî‰^qõ—O¤Ÿäz¯+ÞwBÀŽKl®h×½èè ”arM·\â{…Í¥°o®6¤ÏŸ19™Ò­®pë]m(_·K‚“çÂŽ&Œ¾8¢~û#Wo*òÉè:Ðá 8ò}‡JRÌ#ú€ Éî`Ãl*Š&¨šà:|ð·\õ‡ã̄ɗ/°Ñ‘OÀ÷t•#TkºõÐé6…f³AgsÊã’Э.‘À‚\\¯{L6jÚeO~r‚ kV?Ÿ3ùÝ7¸ó·\½¾âø?ÿ#óoŽYü÷¿²ùtE~òŒl:"ôk)h"Ò%ÊÅ)zOþü”°|Ïå·d£œh'ýþˆê§3Š/_B½¥¯&iŒ¨Ôâ«5Õë0ÂéŸ^Ò}\’”pñ葉2ŽÿþêÛU7ŒëÕõ˜}ЋG;âè«Glø.é ÝWÔ ä›ä3„N1ÿÓo(§f mÞZ“Pà:ÚEµ/¿qpÒêFWO¡]E·X &†¸××ë¬Ä”šæÓª<&Ÿ@{Ñ`Ê•¤ŒN,çÿíßhCFVŽ9þ‡¯ÍšÞürA»òéß®%èäFÏ@º¾v4Æ·+êK’çÏÉmËæCEñhD{Q“?žª†ôxF÷ñéó—L¿:bù翲øéŠl:s¼-Éæã!{wð ø®"º{ö’Ã5~è@›|„Î"¾­ˆ={Éíëw›³Áä¥hÒµÂ×k9:øm3b<‘”üxLuN_+Òù››9+vú`J©´ŠM{vAÔ%éQ!Žxé=$“ “é}ˆÏà²{÷gy&\ÕJ0’=x.´Åo.©/Ê—ÏС»ߺ=í½!+ºá³m†ôÊÏì·‡û³R‘~Ûá;®ŸÛÛ‡Ãû§èÜûÕ®—ÿmJ‰–öU/’Ãt$vçîD°«DãÖWÔXÿ:ìÑndZîÈNޱ¹雪¸úóú¨(?'-ÝÇ3êm#&ÐO‰ÂŒgB¥ñ;Bœ!;Êè[ìxD6Ë?Ïæ²'6 ãßþ–ÇÿéK¶ßÿó{JsÐcST wAjW×t› eÍ.Ê[M•ÑèÌ^Íê¾8Þ!"·CzN/º°øâe§á{¶v?æZ+X[…«Ú=µÁ÷~Ï_¶…Ä—þúŸn&Üû¾þÁïðÀw¾á<¾ù>O¥ÓšÐvÒ¥IÌÑPh»[1©ìS•ÖÜþ4ŠHœŠz@gyw B$PYNRäж%'D]æà<¾íÐEö½ ©Š”~UaÊDÒ å{¢Ö{]\ Òå116¦©ŒNâðì‚O¤ƒŽVÂxW;MôøVpAoÜuìû.óncWw0ÿûì}ÇJ Íã;6nÂb$Dr¥s+nˆãµÉ>‚^©ˆ«ÛýHÓ”©ð]öNéf«¸ ¬PÒ™×bpĺOm…{ÝŠÉR ÝS ƒ0"IÙoÞaOe1ãT¦ÏM/ðÿD´²¡êÐEŠßÔ2fWƒÑH‰VV @:1’æXܺ"ìº[;©™‚:ˆä½.$åÝNêþÁÔmσ)³!îþž‹v:ËJ&ûá€V„®»N{eGMRcº¥7×»}¬²—^ÙA¯e2Z·—¿ª,Aiƒ¯+ñ$DÇ!]ìŽr“ÚÅ¥[1D‡@ì{¢}¿Î²!Q,â;wÝ9=ð²Üö~Çø íC}Sç¬öSàÏí‹7ÿO5üä-)ô‘ëÓî>™2—5ÑS§_èr*-̓Ð9a­'FŠgŽÓLÚ½?á×îŸ2Q:›wƒCtég:ñw„áF´ï~Hòý5Ÿ'*´5ø¦áö«rúúì'¼ZÛžÐ÷Ò4’è)÷ìþ½~2ô¿ÿù†ô½µÂá™`xòCØj̨fñ¶" FÁØïâîå9L–ûN¼-ÆÈ䵓0Yù}…€kÐöz*8ÜØW%z‰°7Y*{nÛËT¶Ä¥"ìµÓ"ié¶½ì‡.b‹\tÉ(Ù;‡T]b@&IÄŒéü`œ ˜`yã@pܲlIRÇD ±²?W-¦Ì†¤èfÿîè<Åæ)¡iñ­LÙv¦õϾï׿—!H%O§ß|Až7 çjo(¸Ö1KRL·h0EN:3\ýå{ÖgèEAð%_pòÇÐÔCz`¸Ù]½ k÷踸ÍX6ŒLužŠÃtøåEïoA乫±¾³yS—Í­XÑ{¾óÏõ ßáP#v££|ësÝ÷wß¹ž½ÎŒàéVí¡NE7‰Ô­øÏ‡ø»N‰)ÕûÍ(ÆŠàSˆ íbCzüˆñGô—k¢‚þjÁöãšéC\¾§O37|ü¿¢xþŠâÈÒ}úDWkÒ“còYF¿®ÉžLñWçx5£8ÉØüøVÆÒF¡lA6Ÿ¡‚$D¹m…* ÒQJwµ Û qÁ1 l6žêã'<›$Â,îZú¦eúÛßrôê„~½Åµ‘Pmh/`ËÁ$ž–ny…o‘z˜~ýŠiÏæõšìÉÒ¤bñ·Ÿè}‚RcE&b§3²£‚~}EwUÉXyH8’Â!ÐUŽñ7/Л%ÉÓçø«·TUÎÉžÒœ¯Q^Ño®è«ŠÐ‚³d'ST¬N7ó/¾"/¶\üåœòÅsT¨ÄtÈGê4éñ1InäQ qÐe­èVf<_Ñ^.‰Aã»Èì¾")"Á[L®tŸÞS­#“/Oé?|$˜‚ôhF6NЙÙØqAýúg.ÿþ 3íãÙµ±ߣm†Þ[ÍÔAÚl@²£|$øŠv [Ü5P¢Ò;¼ïïïDG9d“2}õù£BB•º×D’QJwqAs±–Í/XòÇsüvA_‡½OaÿùöX¤—ŒŸ\þË·d_ü†É£„«¿þL»êÐ\/É—ÙÑSŽ^Yýûw4-bƉ Å£cÜf2ûÝ©1ÚNx¥ºeõÝ[úÞN3´2 Sò'3òã’à"Û~bóñŠüé ‰LïzÒY‰1 3ÍÕßàêÇ+ŽÿËŸÈ̆³{+‡½ý’á !ãñùšúÇïX/$-KÝÐÜ™»ã;8úý+Ê©•³í5lw¨‰ô«V"¿•B%Ð/¯èk¿§UètŒN¼È¦nlqþ—÷$E‰²9Ù|2xj:Ðm-¨·Ãûz8+Šœ°ëÒG|7hšõuʤ˜Äe‚¶'-(ÐVѯ—ÔŸÖd_¼ ³=õyGvRà7kÐ&׸ª!=:Á$tr¹W»~M°bXKéü„d’p–ov­cŒØ"A§êgwïóÀ^¥µ$°vá`:ïgSb]õ­hîCMsb²~uÿ³z@²è7Ý05á—}V7$–Ã:‘jÜrA_{b[áBN~:"lÖ·žïû4Ü ïîc³«Ï]?¼;Å53û†ºÝì5Ї¥]×Ìþø IܰúyIùÕ—Ç9›o`;¤¢c!XƯS¿}ƒWF'äèÏßpñ×O$åˆ]8…²%ùqAwuIè5ÊjBßãú;*I³•Èç3ÂöŠíë÷t}Bùâí6øÎ lFþìˆ$ÓÔW`-6MéÎ?²9_`Ê1ªWŒ¾x†Š‚‰‹!Î&dÇS¾~s&fîlÊ音ýû·l¯4Çÿô5:6´u$ÉÙ­%¥€.À°¹âêï?±]t‚¥ÝŒÞ#1$Þí–£:€G„ºÁU5˜]Z1E’Q±ofȦsOGcèjùªÇNJlíÕš¾½æ]Æà1ňlV¢¼'†¸ç-°R÷ÉM®Í!ÿòu‡ß'2)Ì(ÇäC~ù­ëyèKßÞK£ßÿº^}&Šô¾;‡<õæá_úFﻣéúïFùêvbÔ/9}ÑCŠ\Ä5J§$Åöèz" “g˜Dˆ1‚Í|Ûa¦cbµ%˜Œ$ Ô‹-&MQÚ`¬h Er!H×xs.“˜1ùQ.5R½¥«vœÑ-6¢mÕC S¦Ø"Ám+º«šhµƒeIgcŒ–‰Gs¹¤Û¶d§ÇXåéVµèeí»$ZŠ“1nµ¦ï6°–Èúû–-¥®¤³6y@º/t¸UMÀH亾ּ^‹l…òq£=¶Ã¹)Ygˆ3.‰mƒwŠüd"’’®¥«Ù,§¹¸¤ï56MÑ&º@2?Bûšúª¦v“Ú=D-;IŠgĺ¡ß4 #Ákl– œcO_KdxñhBlkš«íРNôM,C´p¼;åÒÕ~$µ»‘ÃÄ-rºÝ4†ë¯}&BZq¸^HF:1(=èÔ¢uiÙ®Ûè㵌æ:«;´e$Ê3}ßDøÖaÕŒ² ò¹ýóVy¡% >ôþÞÏuc¯2zG~1§M2)†çn…†x 3;P¤†ì‚~Sï;Öë¬?'CŽûÂ>´-!hLn¤Qùemõ/þ³»ÿš{ÖQöhm,(+Ûc˜~¬—»Î«kéñƒ£¯Ì¥T8^÷|Éxgòžïo“/n_ÿÐw¸q=7GÕ×Çx—Ýy}ý:F|ë‘HØŠöâJ@íê3§ÛÅy\ßh 0™ÅmVÔgkÌÑœldhÏ.:#Ÿ£TGlÚMw‘lv„Í#¾îˆQc¬F™ è¨/.QéœùïN©^¿Æ91 öUÏø›/1jÅÕwgŒ¾ü†òX±ùñ=‘dІLYh‘oàc@¸ :')ËAGáé–K‚“ Úu6FiÌä”ãß¿À¯Öƒ#¹¥þ°À{…IrògsŒöl?,ååÊs’"CÇŠÕo ªÄIå‹Q“M°e"Ý–j…«!;ž†Žn±ƒeFV΃Mˆõ}úŒÙÓ”‹ùŒž0{9§yó =››-f|L>ÏHŽJªäêÇ+ÒI‰Ò)éÑdX,{u…9AÝî7ÇáR*ÅŽ2úõýÖË(ÏutuCþä9Ó/cS…ß\²üî#KŒšüÑ)£'›×¯Y½ÛÈ=I$æ5‡0y2fóý[\Kgv¥Ô ôMCæMêMônr/?}xœ]Õ1úò%ã§c §ŠÎ~Óɨõ€ª‡]e_¨XƒÛ,釅v€˜ S‹k·4ŸÖŒÿ £ãŒËÿ==åø^о{Os¶$„Hßw‚²)éÉœtl1EJŒ‘Í÷¯Y¿;ÃÎN=L>ÉЪfõí'ôdJ¿\’?yJ¬.ؼÛ=z„Í%á/MÐyFô5íù‚v˜ÿé+¨–¨â˜ÑÓ›Ÿß°z½< w¨âˆã߿Ą×:T’ ´Â–›Ÿ^³|s…Éì¹G$cþû/±ºÎŸY‡‡Cˆ™x|e"´¿¯¿YÐ^èa0h{•½®:|Sá6-¡í»)æG–íû ÒÓ§Ì^Né®VÄlDš+®þö]˜¾z…‰«ŸÞ£²RÌëêZ" ”"x‡kZòç/˜<žP½ý€w­s̨ÄäVè}Aþõ‡×,¾;ÇŽF$©EÙœtVJˆÉaj¡»\¡Ò1é$9ˆµßm9n§×)銺Æ×Ð9²TJQ¡”£»Zâ{0iJv|DwuF0fßÁ”£½y>{t„r-^¥ènÁâ‡s²QA×Bñøªµ2‡ƒeèÙÉ)éQ†ïI.rB×Dp Û7 Ò“)Õ‡”_½bü(gù÷·¸ÖÍKYëûšîâ §Ò£9£ÇcÒÂP}º¤>_“ŒS”Ö$ãŒîì=‹¿ \g¯•AIÂ\ª!Ê+ÝçxÏ^µ§pˆœÖ×-=DyÛdZ<9ÆDS°¾/>…%hR3`‘¶ïÎq˜{œ·Û«lÁøÙ1ô5Þ«›É<F‹Šö°[®¡”$à;T^’N²½AñÞ?{ŸXÿWWÔ]—ô}ÿ]ýšïðtý áˆ]C·‹aßi»+ä¾U°N¢¹æúÎàœ¸Pó1iiK‚ÎH'SŒî½£«[\çÉgGØÄã:¿!×6•"²ªPfÄèÙ”îü’h2qÑ6ŽüÉ :Öl?­ÈŽOI [nE›è1$Ø-i>.°³éÀ‹þΠIŽE’Яë=*I§ &úÓ9‹F6g’±9ÃFÑà{MRìÆénÐàŠf.zé(#î_3?¡(aõã;ÈÆäã”~ÝŠ³;¶DŸÍÇ$Ó„êÝGªË–t\ ”ÅfVùð{®ò®8Ü%f©ÃSô~ *Nöàúý>ðmC$¡xtB6/‰Û%›wWè$´ª†ütB·¸¤ºj0vxVÔÐ ‹†4³tÛ“—Ò-=ðíÇý¦z]Ð?l9BûfHÀý´Û¶¤''”óB\áÖšJbË•¹§¯n6D}ûö?Ë tĵ-¾ äÏOHTdýæ#z6gt\Òž/„?î=®uè4A+…¶É4@ÿ¦¦»Úз ¨œüdJ:)0tTÖ¹%†a‚á"¶¡uO¿m0Ù›Ë;Ôo¶ôfòÕ#âz…79ùqNóñœíÙZR0ƒ¤TŽŸ ½¤gF (tfiÏÏÙžWÃI_xÑázEùô1iƵvòW­Ã[A¹™[]ëîùµÅ!Ô‚>8Ø i™*F¼ï€‚$‹´›[N?›à–B’b5{sT6C×Ò5½h7»^´ÂC—L)MÄãê–äø„Ñ|L¿\à#†“À I¯P<ªÛOkñ(Ò‰Œ€oí ÚB·ÞI‡¢5>ÐŔ޳x:ü^ƒã@QÒÆ*‚÷òÜ™ˆo¼‹Ø<Ǥ Ýfï%‘ÍC¿¸¤w`óEOð¢‘ã½xé™%;½¿âÎÍ/ ‚Ÿ7È<7M“ŸÙ«tbé7[ÜNÚsg? áöÄã3-èÛY3>LGØ2¹{ðŽîjKرº?+²¾GÚ¤nîqX/¤-˜ øÜ~ð\è[æ²Ïë«/’ƒƒÜpãÝ뇵Û5-Ú–ØRï h!µ´ôu¿Ÿnø>R¾x„ÕïÅóâ·íbƒÍÉg9í§Ô›Žd|„µ¢wF'D×H#,IHާh_³y¿Àdc‘ '5ƒÖûÀµd>_”IÑ~Ãúã†t”ãÚ@:)À÷C£'Ï»•ŒˆÐÑ7ìdLlÚÅ–ˆ4MfhW²'ITO}Q¡lŠÍíÐ?kÅgl!áb6KèWkºªA™*/Èæ%ýâ‚Í»$&µwûw}¥®§ÍŸçh-þšÞ A*ÿõKl>ñ£Ý~ìt¨ïÑIBuÎêÇ3HRÑŠÜøPê>WÇáÓ듯ž“¤aØÈÔ]äNò Ð7ì{±ZØìáa'·Óù»ófúAF#÷w ïåXÞónó]xªW·Ø<Üîp¯;·"^U¢q«+ºU+H¢;¸»C‰B—%Ñ5„&Ú Æs&/Ñ_|¢ßlp.cô☰Z¡ò’öꌾ‚ѳ'¤³E3NPk!8š«1zºÅ–ü‹çèvC[E”r(;¢x2#n.Y¿ùé”l6A[Gýé3>ÂGŒ):7æMtݪ!™Î$Dt¢„ý܈y T‡è:‚*8úÍ3Tè‰>М¯Àfh+÷Ëm׸ª'{òCCõiÃøÕcº÷—¨rŠÉÝÕS”øvMô©$–ÅÙ_kÑ-¸õßB2ŒÜfC¿i®#ê„|6¾¦Ù8òÇG´Ÿ.(^¾$,?²9Û’Œ¦Œ¿~qK–ßfR2}õ KO»lð!»ŠÐƒ)Jv±ÉbžÊÐyºï®(åqÛz(2¾nȞо ©†Äã÷ÆÚ»qÛ*ÃäßVD¤î‘@Å_ЉDPû ©û>Ïõ=6™¡_/é·î†–^í0v»ƒOtt›ŽÑËçG©H/” !ÝâŒågØ£Ç̾:¥ùôŽê¼cüåS²)Ôï—¨rFl—T×Cš"˜´Ä†P×D,Ùü“A·XЭ{Ìh ¾B§SFÏ$ÖÛÕÔ/ˆFüC¡‡ÑOè—g¬ß/ÑZ * ¾–4Ý×x¶a2#Ò¨P±'ônHÙ èt„¶vÝP>}BØ\Q_­Ñ:#ñÕ ßF´)žKªd»fõÃ\´Ã>uÏiGi¯{te¼¿|Þ¥6;'xÈÃzòõ3¬ò7;Ë ‹’¸¾äê‡d¿Â>z’Je̾~Ž-n?:¼ùrp;†1‡tË-ݦ'Éí&8žâMSàq€»s~9H徂ø³ßá?æzS¶»jn¥Ýj×{Ñni{›‘=8¡{5#Æ–~Óá»]–d£Ñ7²I·Št–ã75ºãªKú²¼$9ž`ÓHs¶aWE)418” 4—[ìü¾7ÄPáaôü)VoYüý5züˆ|\¢mO³XI`Åðƒ![|éš¾¤ã J Bpõ×¶À·èmc€|ÂÑ7/ImO}vI»v˜4G›á”Þlq]$;:"ÖKêZ1ÿýªï? Š)Æv´Ë “•ÄÐCN:ª1Œse$Ûo¶¸N‘ŒÆ¤ãß5´‹5®w S¤Ä¦¦ï ù¼¤9;'™ŸB³¢©I^2úâÚW,øH B:fþû/IbGs±Å/ë~7 lÝ ÓôFR'=´ÒŽ~[á{ Gꯖ¤Ï^0{9aóÃ{ºmƒ2ÉHÓ\])I³ŒìdŒÍ QiüzCÐ9ª_°¾pÿé´ë‰nËâo¯q*õOÓ6AEð®âÊîT8.ÝË“4Ñ÷×(»{m ‘~Ý2úâ£ãœ€p ÛE%Ïê¬@vðë5Ay*‰•×·ÒÁ]Ñ÷i›¢úP9£ÇäÇcܪ¢þô ×hìdD6ÏéÏϨéïŸQ¿y‹#&Ï€Hõö=ÁN˜<ŸÒ/+B×R/–D#E¯o#Óß¼$M#ÍU…¯¼ƒâéÒ¬cñ—II>ãë mÓ‘d%IVÉÔM’¹ã’ “-z<&ðc(I·ëÎ>²ü镊CždÄÑ7/HLÍæÍ39¦8¸Ë!Þ ÌØ/Ãò³´Ut˃(ïÝúÑÇARqs¹>\fèTá›-ýVx¬fd Z'({ý~)¥‡Œ¿'É÷ôu=$ÛJsÓ¤ö†Ž]Å@WU„h9úíd¥’&Ã0Qíçl^_b3~>§ûøŽúªgüÕKò#EýiI_GB»¥¯†i–ØdB:ÖøzKˆ›æ ½Px<˜¬Dé•IG†îr+ ïEºäÁ)) /?°|·Æ™pý]Gß:’ñå{B°$ãÚÄ¡©â]KÄʾֻ¡ÃÜPoZŠ“Çh_Ñ®·ètDR$tÛ¡WØ2%™QœŒE3_¯¸üËOôd$¹à–ãÿ„b¿Ã=Ù7ŸA5Ñ|Û‚ÞI8Œæ§G(ü‡©J,nµ¹"¿ƒ)ú•@­·žüÑ I®÷IjwÍ+×'Û”H‰C"Ĩî(ßÓáúlú?úúCÒÇCƒõÐw~ègèÁ=#´;C%©HÛ5ݪmâ'F£s;ë,Çdš~¹ÁÌfd¥¢[õ$Ó1±­é–k"àjOùÅ#üò’¾6§t®‰QÜ­Šp}: JˆWtYª ݦ%Ï(ÏñU5Ð1ÄxU¿‡ó ¥Äd•=>&62~2£1Úúu%Ÿ5O u%¦RmOô.ÊZÔd:§|<%ö²9_Ô$ÓI)ݢµ­˜øèqë-z<'›6?@eùÐÑI!‚˜]¯‡`“\&»ˆâèqÛ _{òǧ¤#Mýá’‚ô(§;¿À÷†òù)¾Þ⃦Berêo/WDçDוÃöí|¾­î­- ýz *G[ïÀŽ2A:F‡ß _+|`×´äÏž`â–õ»I‘K"`‘H°ˆÕ„¦•{n¯õ^Ñ Ô ›£ú õÇK\˜lÊèÉŒöüLÌk;o×#vá#»kz¥H¹ë}Cú=9Á¤2ª¼¦ „k3Q¸ù"D$çö(WP` ýj#³yœQ– è?I¾ÅW=¡ï0Ó9£'ÂNƒ‹„PÓoZìhŒ[]afsh×8Ÿ1~yLyAs¾B¥ š:AKáZ¢6„®ÇW */$о]Q/:ò“ n[J‡N'ýŒß»^¨=ÎìÆaaàðj{ÀÄË´(j´R¨š³¥œ¦ùu¸Fäþ©[”gá:DÂê­è1¹±Æ¨4:‚q/õRÆ CèZ Ãqž€¡|r:G†‘ì¶FMp-º˜’Ž¡»jÑy®Å÷AÒÉê ѦÐõÄ$£|<'Ô+ꋊt:R¬-I‘¡TÎ,õ‡Kú.`­¹Fríº{1ˆ<È<«ÃzÊ/DrïýE}Gèûëâ3ÈTlW¤çäþ˜”òÉ›Ša—ÜÕšnÓ ŒàÅ”òtUŒ «‰aè>ÞçhŒ¨*ÕÄ>’Ìf’n3mÕݽäðê½jë–Œîžg/ªÁ¬}'/|ß…Æ·¸UELslž\Sÿ>ïò¿·Á¥¬Æ]]áCJ6 Eç=²uWy÷;+¹¿Ëƒj¸·÷É>w’˜ˆÂ¢ó”àÚÍø ô½h+’Ì0˜_»ßzìx$†ëmEð ;–WwdN°‰§z¿ÉäžÜg™ÆØŽêÃ} w}‚ê&ª•Ïi8Ôž¾u3Êû?}ƒñÂO<ŒU·LÁßÔ×Éz1I°EB·Ú ³J5´W5®«IŸ¼àø÷/`»¢9ß:ä`òŒöü‚üŨæ«óÈÉŸ¾Aµ—,¿û€)e3t­˜Z´ÞE=‹”ÈÇ”ù¾Bu—,þ~Nþø)Zµ„®!1ú¦³\pñ€pkQ„!æ}DR6&7…[áCúIÕ»3ú.!%w's1ÞèÆD@[;t•$üµnÛì' Â76”¨¡«3¼^R݈ íUÞÑ;ÅѾ&Kí¢Áuj¢Wµ˜ù)åQ¤z³ÁŒRBßÊÙIkšÕ;ãW‚qü§—„«\~Fùä9&JQ‘ÍÆ$#1&V+O’Û!‘,!ɳ{ëqÞÉTbà–Ç’ÉtdÄ;FÁýó"ʺ•дQƒá«¥o…ì"Ünà¿'œüãoÉKðƒ#Ò7íÅrÐz†º¦ë4ùñÕo áºÀ»Qì 2TŽN¡uò;P·º½÷âÓnþÞƒ$³RÌk^]6oDxÚø« ×sK¾q‹kÑ׸ÚcFcL ô^«Ïy”îÛŸµ"´5èlH$öC³DÝí@«_BƉôN’<ïÜç™Ö “¥D_áÛ;ê:`â?¤"SÓ¨¥ñí†~Èæsµx|J:)ÄX|Õ2þíפIÅå¿þLÌ’!‰0È8ùÃsª¾gù¡åè_3}2ÆÜäе4çËR‘a²héW‚׸ª¢üê%å4Á« Õ\°ü±"\š“ƒ¼)’ŸN¤Q;žæü 3Ìôù„ærCv<¥ýðž®$ã)Úl =ž‘?*Ùþð3‹ï?õ[f.ÿõ[ȧ¤¹•çTAh¦ ³ïÁèÀóDW­‹VžöjKöèÅiï=õÛTk9 Ä€Ê&ÿá©©¸üËOTË^Z,‰¦ùA’&í@ÊýÌýPã.ÆîŸ–¨0Q‘”ƒk:ª=ôßW[Ѽ¤æ? .ÚÈd4¾³1ÜLéé– #ÅsYbr}ë„ïÁÞÜ×!þ&çs×ß3Rút=¿Ð8dRêë—ÎhDïÓXÝÓ†ˆJRb[Ó¯ë}ìòþÀ”9¾ª0E‰ÖnU¡Ç3¬îéÖéÉÑP{ÜjM0 ±÷’Ÿ*I™Z­iW[ÌxB:•`’è%Š5ôýº&MÑJL‡‰ü%Är')Ù´ _¯pØ"Ç|jq«%Á[’Q*'è ·¿&”ìäµÊüF:®vZ|$¶ n½ÛpÄ$N'Ķ›òh½ ‡Ñ -ÉtŒ±Z"LÛZâ€m"Š~0FìÛ'»±·Â$°€t¬‚ Îb舤¤¹¦].!‰:4¢QT ·Z‹ózRà·k¹~œÐœ] »3ËI&cŒ´Ë%ݦÁŽFdGc|µ¡»ªÑ£›jº«µþ¬!$g#K¯—ØÁÙ0eNl+š‹+”Íå- ÷}<¶“çn×Aõ½&™„Mƒ)º« éñœØˆÄ*™I§9n½¥[×Ä Æä׈ª_G^‚‚è~íhL2N`þ}¸Üf+F™ÝÏ]ÈDÁ­¶ƒäè:@éÖïê]1|P`‚L2úÕ5éx„Î0¤~Ö½'´–õ28|Ði‚[.ÑåˆØ6ä$¹¦«Z Ít!Àá–J³M±™½¦ì¤*ƒT sçØ÷`ÕMÍç¯Z“ôNà$Ü/C‰Î³Å7nßdPÃó¯´"v ¨q¡ùFâµæªÎ3‰ ^7‚#´)éÑHb¸‚Ûnð]Dg©ÐFÒ”d<&¶ý¶Þ£Ò”ÖkpMG2Ÿ¡º-mHF#1)ö ¡ëQ&ÅNd<}Ĥ n»¥_7$óF9Ú«íAhŽº JâÀÙÅØ«<Ü`$š):“0Y+¼ [íDÖF¿Yáš@z<‚¥íâ /ƒ2Ò“#bµ¥¯½¬½}M_ Üm¶‹¬wè³AªçÜðŽrs}‚³e±'|WxoçÍšÁìï1Ûë›” Åý?#^w¡•òôWK¼7$ÓÆjn§Óÿª½ÍÈ¡b–µ[·ñînú³ßYÌßýº‚B~í\]]¯ý&%™œÐ/B´Â_ZØ´†3Æ?*%!p„¦ÁNÆÄ®Á5’ˆ¨ó1é$ÃmkI ä'f”£‘îün­Ü7„¦Â7ÝþŒ¡’dˆÿŽD°Ç3¨*ÚME:?ŘžîªB—#t¢PÁï¡£Îr¿Z£Ò[@ûiÆÈÏwS¤„¦&xE:ã› •˜DáÖ5è0 `õaR‘`e§“ÁĤ:ŽkÍÚ€åÿ´ΕMpËݶÃÙ¬÷éј¤HèW‰/7føáס€o~´VÓìè˜é1YÜGgš"“ …Î1Ev‡ù ›VÝïR&F\í™ÿã笠.ܵ˦š+®þrŽ=>‚¾FçSò“’¤´×òC ÍÑÜ÷jšw:—{¯—MÍÃèA*‡è›QÞ÷^Ï­Ïuã;ÄÇ{ëvÏÊ=ÌÏÛôÃâ|„7šP­é7-jß…Þ~–d”Q_,½z…j?qöoï)¾ø’¢ˆ4W=å‹S豯¨Þ/1Ó1ø[‘?žŒ¨_ÿÄù¿üDòìKNÿé+T[½§[4ø¾§úpNùõ—¤¦fóÑ‘ŒSÐ=ýbEÛôd“¾Ñÿé«¿ý…í•eòô£3’iÆöÇŸñL)æpñ}‹Wš¨!’sú§o(Æ ¦HØþðÇŒžÔç*:º‹KêÕ†` ʧÿã7¨nCï-6µÔŸÞÒµf ”òé1ôDMè+êË5¶8"(|[]ÇÃt#P©œÒU;˜{츤__¡ì”Ø_àóŽ_ä|úÿþ;±Q|ñŒíOßqùãŠã?ýŽ“?>cýí·\þí£Þ÷êõ¡ß%Y™ë˜êÛϹºÆNùºcüõ+æ¯NpmwçýTDÚ«š#~»ÆuAØ«©Ë)I.©×s¼¡ õ;*ñÍ’vÕ‹aOA쮫ˆÙŒGÿô qù‰ú²•Ísœ÷Øù ×lÞÔØQFa²Œ4×4gKTž°þö5“þñâ 9áèŘ͛+¢¯ 3y~Lýö]Ý M2™bR-ŽÐyN:“Ÿ¹ë8ö«FÜïGåДˆŸY“ÖÊÞoÛÐWþ†®Y›!éÎ]‡T)kÑ ô«%®²YŸC§“!Le d¾®£9_bò#’©ÅW é“G$ªââ_~ÄGŸpò‡¯HTC³hˆ(üvI·õ$Ó)¾ºÂ»ŒÑËh{º« ª«A²QIb›WÌþóÑõ«÷žñ³# ï ¾®Q¦ Ž uKz<¡x”sõçï¸øöœãÿíŸ)²-Ÿþå éxr ÇÚêŒð² u£(QÆê%õÅzHÄLÈŽf(Q&Ò-¯p-øí==âø^Vï¸úyÅøÕ—è®#ú–Íû´­G{ËäÕ è7t[Mñüwñ‘ºI8ýÓcVÿãgôüc®5šJGBWãûx=i8$©TНµóê3ÝØƒ.´J“Cë°ã’lšI×1g·‹Z¦[Äk"…ú\GYoé7bLHf³EnÜîìmÜÔK+…2 Wm‰!E™Žè5vTïÄÝëït“•Ö ¶ôËs]Æ|®½ÿû#1Ztš“LD6ç}ÉjÝß ’94MG…IKôÀ––šP\E{¾ k4ã/Ѽ{GöâKT}ÉæbKìzН^19gûú®ª©WÒ£S²¢¤x6®úÚ zn}-³j¶²æ fØÂÒ®—„ú¦¥xñ KCýqMöô)6íéÎkÌtŒ)2òI>äDt’¼gñ¯#sʉbýÓ9v\¢µôÜÑBEp ÙÉ”Í?’¼øŠñQäâ_ß¹OÔ›Š6YëH»hHON¯±}sY¥)ÙL‡¢w´— é|‚M¯q®¦ÈØþô#—ßaòìÎó‡©ãüG_NXüû·,~ZŒKŒÒû}ˆÛ 7bFy3U‰ŒŒnÃÆ1(­øù'Fî×Ñà Sâ`CÛÉèhp=ªdp¡Ç›ðk&ÆQ¡b}Žh ªŒÆ–™`vú†à&M®‰.u#ˇuè©Ô¢ÐÂKí<*M†-m ¸ˆk¤Ëª„iD%ãå8#;¥÷1ê„[t”Ûw:Æ›R„À· èTºæt½U\@ç)&KpËDšk†8Q#×Ç 8£<•®Ýª]mfñu-tÈq)ãµ^bÈÕ_•4½é«å6 z2BAîéLÒÓbﮃ|v#a¥ˆÎ‹aʼnÞÉ2膵 ³hk U=Éä!jùÜ÷3výÃñ·Ã=Ó‰•®FïäÞÿB@StšÜs€üÁm'‰ÎÚˆÜàpŒ» °énÿ¬xÝÚƒû[6!‹)ešß9Ñãw­˜´ ‹oq¿NJðNz4%¶­HN†œ0Ü?¼ÄÕ£å}TZÛ^6•"˜«a˜"H4­J…[-D è®6¨¢Æï¡ æÎš¤Qƒ¹gOðÑŠØô„8H”&ô-¾jQIŠ)s™¤¨(qõ.¢ÒD 6ïѹ|N¿mn™£ã¾‹‰9Ÿ‹¤#ÔC0Ð`À2eJh{|Õ šA1½ÅNÄŠÊjܦF%)¶ÌðU%!=E&øÊÅûNó:j]Ñ+ê4ݯµ’@&c`…:É8ôoëh£|•XTb M{©6èÅuj÷ë­VJ&^f˜9.r1BoDnòL~O‘í9GèÃAëkúˆêþÆŠ¡+R šbˆÿŽ7½’÷šv5¸­Üom´¬¡ÉÁ´Øy|ÛÁaÂâ¯J‘=}w˜. ‹\dp!þªvßÞÇ0¼ÃJ)‘ºìÖƒ‡>ËA}ì{AŽŸ_óÿh•I˜’¢ÕhÐæóè=v/\?s;-þ0%ôM‡„¶‘4ËDƒÅn [ w]Ì¡Ã;­"¡–Èú8Äp￾1ÒuÖ³‡P£PB'áiÉxDô¾é1ãRÐ:‡Ê2ÔžÔ7­ø‚'ø€É3Ù·³\l®'öòì©$‘߱޸mwã½Y ß÷mYHpÌÐ]ßÞ+¿ãAfå[7„ÉÝ@¸p7Nþö£`Ÿ×ûz2˜ »þ–!ô!û>Ïc¥þÏAýøÿø=6¶CHíG·Í[‰òÕyv¿VéªÍ>ž{ö¿aörŠkÝ̾?á®é´Äè!½P§¨[ öÛÝ•;4ÏQ8â=šé¢EÎXnuÃs§ësûÚÁ¸ºN¤*JßИÉH‡›1¤÷~绫ëxÔë.t·Ü^§üE+1Þ™§zAñòKÊ#Íå¿ý€=}Áø$òéÿ÷7ÈKŠ“ÇL¿<Á-ר¬¤8M¹úËw\½^‰ÔaØøeƒï!›rúÏß%ŽõëKìüˆ$ \üËw¤_¼b4jøôß_cË›IGší§ODR²Ñˆl>¦Yœ±ù°búÛßpôõ1›ï^ã%{4‡ÞC¨é.+tYP}z‹Î§øõšôùKN~÷×´Ôoß³úñ=jþ”GÿôаX º¬œâqÉò/ßrõv1 ;=fôhŽÛ\Ò­#ùq‰¯×b`R8á…d¡´ºß%~ðl˯Dc²SZºå%¡K±#E{q…“$ôÇñùÿé#æô%VwT&Oq«Kú äÏO°YÝ–örK2?Áf·Ù°z}Ž9:áø·ÏÑÚÑœoP6•Ó¿»âãÿýGÿôOX_¡‹œîòŒÞ•¨°aóú’ìÉsòIdùý[ébIf‚²‘êÃå_`YsõÖÉ?|A¢Vœÿë˜ò ÙDôu¦˜Q>›]O{Ù`'Å“)ÍÛŸ9ÿ·×¨¼Ü•‡P·i™þî·œüá ëo¿åâ¯ÐE~ë@o`±|Ý1úêóWÇ×è[ï„Æ‚Ê\Õá*'°ƒº^Ó]­Q69ÐïB?ÔþÏúíŠvY‹y%1}õª–ß¿!}ö%™ñÄ4EyG·¼4¡mh«†üÑSòI9Œÿ!{TÒ}bõfC:›£X³ýt…Éò ·m°ã 0dGG(†$I‘Û¤ÓLÒ\ýPL…Hw¹ ]u¤Gs;ÊeJï¢Áð¢gO&%Æø=®Tg_w‚ÊJK×.–èrF6Ÿ÷(zÚÅï’Q‰«—ÔWd_~Ažö,¿ˆ–ÑmkÁÝÅ„üñ±]Q}ÜP|õ’”šÕë ²Ó§Ø¤f»h9ù§ßáÎÞQ¯i×=éñ óß=¢¿<Ç© £“‚õ?ƒ“Ž-ÍÇOô¥|ökÙé˜Íß±üÐ’å)v2ǤE$)6SôaþÇçT?~Oצ„n‹*JŒwÔ›J$‚zçÂ?ˆSvšt~„´åò\,©ÏÖdO_0}ž±ø—ïê&åBiM·ÚP¼úŠãß<·=îê‚íÛ T:E—#FOªŸ>ÌŒÉcúÅ9«ŸVÏŸ2zy„BÑŸ½ãìüŒ™Î%<&xùLÇÇ$#s“‡•0ô›ö:†›@®ßp+äëUC¡“@{±BS’ÒJ~˜{;F{ßí}`¯"¢¢"ú†v0w T‘ÌŽ°…½žšÄÛã<÷=Ô@ã·kšóÁG²ãÒY)ð5­©,ûáb=˜^ã­šûW€îói«¢.ÉwÆFâ:î,¶ZBIRzšOKYßLÉ£ÿô‚õŸÀÌ_$-ÍÕSLqë3\,™<Dwñž®K8þãKÜÕš«¤©ãçIR'¢Á硌Hô¤¨Ö(Õ±ýpAròÕ®ÁÚ 5=¡)úV3ýÍsÂòçÿú}LpßôýãÈÓšf›‘ß_qòŸ~‡»\“N-‹?ÿ•ÍR3{õ’r^â¶5Ýv‰2c”i ,Ýb%M.eHŽŽÐ*`Ç9ÉàwSJRoã0EQJ£TÃÅ¿|GÓiŒ98´©¯ÖžD”N0J¢# §ü«ßpôHqöß¾E—⺿ú–[¬jºªF3P8´&³rТ]_¬µ!45}ÝÝM†ûrnó;*‡—:HLãð3cßá‡w ÖJÝ/hzèÀ§è*ÄÏ8-ÕÿÄõJÝ×^ŽŸ7sjƒ2j tbù̽Uwþ[üeòÎõ1ÑØû?.ZIeÄnFc ¾ª +±&Hp€2˜4Ãæ¿mÐyŽI5ý¶ÂuînŒsŒ`¬h“£§¯:ô¨@ùžv)EœÑA8°ÚLh aXßÌPŒ÷øÎc§#ô+Ñ¡’°¤ýcŒ^8ÌÚBß¡Gc²£¿­éW[BŒè¼ -ú«5ÑŠ^ÍXĘÙ8 kQvˆRv{–éžÉ©´$i¹o{IÁ¯ÒI t‰(ãxmâ>Î^‹·ç„Ö‰ÖË÷ønÐâ⥣›Á¹ˆN¤öyI.“‰ :G­ðUvgö}3tI7[T!‰¾m´?h”´Ž@kÙŒµ•"Bº<3ïè–ÉQ‰1H<µ†ÒB»0E"šóNa‹;ÊMC»}áÝá•AL9"-\ÕÐW­¼êóë†)sLžÈ=î?e³läY5’”º¯”t]nžwÒ§]7)Šv.†!B6FÁ3õ~˜¹‚Í-Á»¡›£…‰î‚FŒØqAtÝ€Ö“ 7$*j=Œ‡‰\br•VDÑe._7„pX ¾ÇmBˆÃô'bJéfîõºJ_ }O_÷ØI>¬óêÆ}ò}DïL—F|¾éŠ#IêBE™p8/Þ‘a­HPÑ !GZ8¬{¾²0ÂcðàA'•„„t Îõ„`P’i&ÄZéÄíþ›HÇéЧ'SèúÆ£µšö{£±I-¾íH&#bÕ!F?L–¾óÒi½‘ä9t+ƒGê ¹<† ¤,Ãf·iîºc”È[tžKyS_èú=yA§¢•ö}ÜÓE‚GâêwI£® žM†UÃùP„ƃxģЈö kéöE?LSÂÐÍ»Ef:€qúnлÛiÈÿÚÞsûz¥½¾Ò×r }Ï~~¨6îÜ­œ‘ëCòŽâskýÀ¸kO.ÙÂù˜ñîn¼ÒCmº›ä ö¿ŸÛ!•Bþþ}}X̪žˆÆŽ’Á ¤üfµä„€Ò ê1EJ¨‘Ú%ÃX”×Ë£R²ÞG'“¦á~í Œ²¯ê!Éžž[X”ô›úº>Ù1·Øñ­%ßCã^“ŒúeÎ3‚ëĸ8ìw»i®Ö†ûá~í&åŠè¹juÌdfHvG#nÛøõÉê× ½zŸ”c&46A¨e·yöj˜r‡›þµaŸZ©ÿÏýÃ’d4|õ‚¬TƒsZaÊŒÍ?²|³$å÷ bâÿ„aïÖõÃÇmʯ^1ÿæt_(í“€œ'î‚3©7´}‡ä[è×ßÖ4¦=4¾þVúðçÜŽä¾Ý6šÐ:\½3¨}HÊõ‰5|†[Ñßü×È-½µRw¢Âꢻ\Ë8õIå[–û®¡ß6Lÿøвãò_~&9~B2V´g—¯Q½:ÊXVkͽþÏàqMs†“ÿô;zz‡týV-¾iHNŸ3:åßÏIæ#úÅ%!ää'cÜVô•±÷ÏŸ1þbÆöÇ·Ôg+Òù)ÚôTŸÎÁæ¤YA2-ñ݆ЀÎÈæ#Úo©5Ù¤¤½ZâÑdGÇ”ó& ,þüÅoC׬?zŠÇ|½–0­nêp4ºA¬ mx@ßv€ú"Š1,+d“Ü7‰A]Mw¹ kÓß}ÅäqÊêû÷tmFv”Ó->Q_l)ž}I^zV?½#™Í•ÃÎŽHŠH}q†ï Ê;HGŒ¿xB¬4ËÈä‹’Õ·ç”_<¥?{O ÃŽJšÅ$SÊÓ±65®õ(ÀûmB×Iè†wômOùì9弤úðžh¦ä£Èúõ;ôäóß>%T QÖß¾!{ñ“%Wÿãz—1ýæ é8Ç/?qñçŸ:—u8F\ã™ýþƧ™|+#ùþìy I~kr®ÿDÇèË/˜}1ç‡ßgI…Ó(k ½£¯Üþ »-íÅ•pºÔN*Sb M¿”à‚è{ÈFŒ_>Eõ+¶ï×”/Ÿ«+šÕ _+Òã*ÔèlJv<­·D“‘=ÿã[ágïöçÑi†µFÌe£#Ò£bÐ×ø]ç@ô»®¡¼gÑ9”MH&)¡ëp›^Ðg´´—Ò㙆ö“'ØÒJ7Ü9‰:g“ÑšØ9ì(E'á1E¿»GbÄŒí†öb¦{“z6¯?P|ùŠéó«¿½¡o5Ù|$rª~ÍúÍ‚üùK¦®þö=Õ&b „¦güÍ×L¿œS½ù@ýñò9Gß<¡~ý#ëóšìø1³WšwgèÉ aó‰ÍB‘žvÝŽKt:bülLõózgPÑ?:¦]|¤ZÔB­h[Ò'/˜¿:¥ùx…N¡=ß2úò„Õ·?¢gÏÍ3Bï±³1~ù‘Ë¿¾‰’Òh› CÀ9ÁêÃWû¸äƒPg4“ìÍ}J)¼ë DBÕœzÒ£'L¾|Œö+Vÿ™hf¤G9±ÛÐ.zŠ/ž«s–?3þý?0šô\üù-ùñœØ¶øÞ¡Ó£çÇÔÞR-LšaÌàápï{’ò˜tlh/˜<§ß4$ó#ŒêQI‰¯W'n{E 9£§9Wý)_’Dšª¾§]®ýæwL[ÿò>›2ýò%iZ±þñ‚ôÑ)a¹$¦%íâ#ds’¤eóþ‚dvJùè˜P/èÖžÙo_J`rl">9€¦$e2ä.\?G*6\ýý5m¯1Zý¢â"ªÝ;zs¸K.Ž9„„C=m$:ErtD² FJúË3ª÷ Tš hÅTÙ”|6&ß ßê®®h–Íë/žÊÔçH‡ŒWOztD6Mq­—ŒòÃxÙxÁ£@ÒÄ4Êê>¬ÎaWûM³º'Ê;ÞvûïÜØ<ŒÉ‰wè^®l»$¡øënéý ø_ºž{¢v‡ô¨QèZì|NšFê³Õà˜ßu%~V')F3tåöm¾áÄ}½¸ß×R>™¶º&¢M@)Kè[È&äcMs¾F%ÂÅÑÊEïœ'9:"Ííbƒ÷“æ(®o‰Ac³“H-Ñiv݉bà ‡Hð’hRs—¼Áç¼îøÈ¡.`Ê‚dZà·ýºý áÆæŒ˜I)‘ÔJšf¸VßX’éhÀê]ߣPÕôÛnà«áïÒñVeíª"==%5=ÍUƒ¶:ïzbçp.bG%ÙÄÒœ-è{ AŠ®sPh¯Z´UD¥IF%a³¤©:tR’çøM….Ç„fE·Õ‚žl{lšcÒŒtb%Ù.hÌàpmƒÖ³è&K¡Yl°e.ëPdoÖfï<ÚXáî+dêå6+ä4Õ×2ÙÛ‹%¸šRÒ2…Ø”Åf†îb…ßÿšÔ÷"©ÈNIs¨?-‡î¹„ª¸u=”2epu&CkG_µ²Oå„ç ?žë-}çÀ0e)à¿ ƒoª§:[u"Žx7±r'ëˆ1vsó Suªw”ygÄô™^¿”"º^(0jŸD8šÎÿð”õ·ßÒTj_Û©Äb¬¹>!þGu w¥·­HOž2}u‚[5RHî:jos—ïKð»•töY=Ó-Æé½i÷r¦?sýí$Å;®` E .^/ »ý÷çÄÆC‰È®û=×C¨V´—ëÁazÃɉ—¸Í eÇØBK@AjÍÑ0öB¡L ¿ºÂ5ÌfÒáR _mèWµèÉvÓƒ1t´ëŽéᆭeöÍ)› ÚD´VhkѰOúªFŽ˜½zLûá-«[&¯žÓ¼}‹šc}MPvd ½—ΰoE?xž_&!úpKƒ–¶ÌÁÕøþVxA (Š™JkŠ“1±Û²þé‚üù34 ®7ŒžÏéÎ?²þé ;;Ťö²aò›çX#£éöÓ’¨¥x±£›*¶ï>á65ftDñø£=&‡õïiמØwä/Ÿ3}9góÓ[š‹ Ùñ Š–fÙqô»glü¦RÄÞ1ùú+F \çé/—´—+aôâ‰IÉÑ—'lüžíÊpú_¾!,>±z[‘Œ2òÓì(%4ÝQœ£â–Ë?¿£xõ5£©$4šn¹ÁMq\î1`D…r‹o_Ó;CìÓo¾`ô¨ÄÕÝ@s  Íåj/cÀ[Nz1¡-é×»hû݈>³Ú€ùR&Ò/‡8ØDb]CßMBš§ôu-¦L^œâê íjC¨Éñ é$)‡Ö˜d(ÈcÃòo¯éc‚M¥“\ÄN&‚á ÉZi«;Æe‰ÂMIÆ)Á Ä’D@TDWÓ^nHŽO0F¤‚ˆdÏ)ÞÉu¯¢ÑÔúи—äìFë¡ÝÒ]®$´!–ähL¿º¤ßT¢põ–äø)óß>#¬/¨>n •tÈ$7ƒ!\Õ°}ý3B1u\þûÏØ“gLž•l<#™Ÿ¢uC¿’‰ìøXö Ô› !däGšå_~ gÄñŸ^7 VïÏð5Œ^¼`ôx´þ]G_GŒª¹úö ^'¨P>9·¦ß’ãcÊGcºËO¬__Š)j§‰GalrÍ-Èë* ‘æÇ×´µH(Jºî¿ýš,m8ÿ××dO^2~bY~÷‘ôñ3ÒÜ’«ïÞâõ„$ë}$t=ý¦BfBŒ©5óßž²úö[ú.!ºžà‘÷áé„Кó%KZ8¶ï6Œ¿zN·8§ß6Cgù`í: B»QHˆ f0jÚ霤L¸¡A8ŒÚþ¥½gÀµ…fM{>[ì_Mƒ. b_ºpÓ ¹Ÿò¦˜ÜšZÈêP–ÑiÎSbW?¸n^oòʸÁðú@óê—¢¹HxŽ!¢Ó ¡[ìä"aH ô«5}ÝbÀ¤t=öäóß>¡?ÏöÝ3?¡8Jh/֤ǚ·ïQ“S²‰¡]u("®Úˆ©6Ÿ2}õH¼-›ßx¼÷è$£]ðBš“–šn)‹îòœÞ¥L¿zA1µôUE}¶D™‚ìÉLè/«Èô·_¢ëKV¯?uÑRÐÛéŒt’à6kš‹5ftD2Öô‹•x|$âñN1~ùœb6µâÏÖ}=°ã5ÚfØéMDgF"ä‡cQÜIªBÄ·AJdLi¡Y~ÿšfDzvl­o$áÞ–»ßkÎél z0]†ëCžN,nuEs¾B%vÐ@Û|:yyÄöçw8¬Uÿ! ¡©Já{ÑvÆ®'{ú”Ñ<£½ªIçãQx»}OA<$ÄéÔŠVõÖñbÿBk邸ÖÝ<…ßå}ŸƒýöÞ7NúÜõì"¹-n[ÉXÕè_Où\ÒÑ/\oc¸î¾I,®©@•צ”xÈßÝ«¡kqMÄä6Ó®»¡¯úA½súkb½åèåS,Žnëpõ–ôô YÖrùí;l1@ýh´µÍ¥NHò´Ç×¶‘äÂ3 ]‹w–òÙŒö쌾—ÔCyÝ4:“”«~Û`Æ3F'tŸ>°¹ê(Íé—KT>"IÄä¤Ì CÓšûõîq~›¡èïÄ€Þ,zÌ8&í£ÆÝ¿HÙqIyEWy²Ó9Ú;H²“ ýå9ÛKL6‚Øãƒ¦|r‚MÝjC_{”NÄ86cMýñ×9L^b³Œd”‘Šõët5Ä®#{öˆr–S½?õd4&º-m™~ùˆê§Ÿi;Mìå󧌟Îp› ݪ%~¸m¡8bþõ)õëŸÙ®aö›çP-©.ZLfD£½sš')ÙÑå·\ýpFñü9y©$¸Àjܺ!(5 á®*åV?Äa‹Ž^<¥œ¥¢á¶¿ÙâšHöH4°íb#Ý·;ïÂrŵÞR:×»ÏéñºI³‘¸÷,CÑÓmktQ¦†n[a'ÇLžã×W´UCp “f"Ÿpe{¬U쪗8e±Ã/xäý)ŒÄ,»–ào?C…HÔ u`»:Ì  »ŽSr=B4{¢µ5ƒ–×_&ã ùæ¹8î7-¥†jGF‰ÃT%•{äÁعj‹™2ÿísÂòÛwkT1&?)PAHý¦Æ·~%¡ ÅȳüîjvÂøQIýú=š`Lï[B¯P&F¬ ø¦E—SÒ2²ýñ#>)˜~õ”¸^R¯7ø’¼$—¤“\6êÕßÒ±bý㻕\ÏFè¤Ã5ò}òÇsBuÉêõb Ú\ßmÌMÎí8éêBR2~6¦y÷j5ÐK¬ÂU-å—/É’–Åß?ž>ctjXÿxŽMÁ{òã’örMŒ :q€xúm‹ÊŠÓ•Q>ÊÙüüRTptUÏè‹çŒŸŒè—[ÚËJ‚t2O}ÙP<žã—ô.ˆ&ü>jÔ‰²ÐÚ*‚k‰$×á(üOP©Ôu@ˆx$è(ûŸi††NKð:èa—ÏkQ:½$7î›;?ŠVH”üî¹yX8˜+k ô¢¾=1¾¯ù™p§»{²m²™n%;*pMƒk!z´I¡÷ØÓc&Ïf¸«+úeGÐ ùéˆî|Er:¦ûpš“$žvÙaCp ݺBg#FOOðë]ÕàÛH"õÒ*â]ïzìè˜lí²#Yš«%Ñæ¤EN>Ÿû–¾iQXÐAB1ä§H³žÕOD+é–'e‰Iý¶¢¯6cG¿½¦ÑßKÀÚdB>‘”)$·®èV-¨žÐù}¢ŒÉÑ›©ý4tBðÛ-® ¤ÇãÚ¡Ð&°~ó®Rª“ä Ù;ü”߯½&™hÑ ±,öSºª†!}µ]šM2-Ÿ?&+Ûwi·~0Ýü¿ñOÄwòÙŠã\šÞá*/Í\ïžönÐû¨ZC¨W¬_Ÿtúp[¾ïIæ'ŒŸ]û°£öÞÞ~ü•׫[:©ÛßAb®ÅÄÀS}<Ô[ßé@ßÿBÇ>Óëµ!ÔA]íq=Q j™`¹Tbˆ]…«ýÁ<€N¤C£,›SŽÐ–ý¦¯´–íî¡ ýzƒw†òùÒLä dV;¶oÎðºdüâ6ñ4ç |¯ÉŽç(üðå~„ÞÑ-.‰*Ã$ß)ŠGs|µÅŽ,ͧKú.¢µ!QºÇ Ná|:¼Ó˜rLyœ°þñjrŒñ¾“C„J ”rÒ)E¡³’t> üòtªé ºuG2ŸKä±ó·¦ƒýr‰«ÝMLc”{ªÓd0vF²ÙˆÐ6è"§_^²=ßJá€Â–#Òù”$ñÔ/ˆ/ôAävwŒÝuŒŒÚgcÚ‹åË—XÓ : ÝzIÔ9é8!ôìä:šÅ–ìx6D +¢ 4ç úµ@üäǧ”›Ëïß“ åé_Kª•R;žaÇÉàdŽûƒXŒ›‚ëwµB%†îâ’RòGS)ØöïŽ /¾¿ö1˜ý|dì§xàÝQ¨Äâ·+º+ P .`¬¢ojbH™|õˆöìΗL_Ð_|¢mf¯žˆYÅLªé®.©Î—ÂØMSì¤ÄÕkBÑF¡Ë±È#ગ†8"’”dÒSŒ„½ÓCí;}žÐ6û®›ªIqˆ’ï±Ø Ȭ“@o¹m.Ìæ¤G%ýrAw¹Fgdó 8w0MTèÚó*•6øzM·Ø (‡È®ˆ.ÆØÒÒ]^b¦'d¥ãòÏ?c¦Bìégt›H~z„ß\Ñm„–R¾xnÅæí“'˜´žcmËæÝ'ºµ"Ñ´ô›–ôÑS²Â±úá$é!5HúmSÿhÂÐÅ'zOTG¿}Jþ‰êª#”„ºÂ“3þò1Ê­Øüt)a26!›Ïðõ–n½&xÐÊññfåcB6N¨Þ} è k3ì¤@Eoµ Ù*&-ÉŸÎè/´Wz4ìêOcÕ·Ù%þ×?.±Åtö»/)Æ‘«ï^S¯=ûzëÁ“ØCèóèÐ÷¸Ê1ùúKÆG„£_·è,';*†N_xÈ¢onl2,¨ƒ³ÖXüú’Åßßm†zà&ù¶'{òŒ£Wˆm3ìÑÿm€ú½F90-Þ.œŒ*Õô«J FÝS slå“R¼-îömÙŠRšÐ7û"qi+1M%™ò*Š|ÁžŠdH³Shëi/7èlBR¨{åròïé–kú6’œ0}6£»XÒ k=ëŸÏdŒ¿xJZêwïèÛˆÍKùYAÄüh;vËsœKɧ ®SdÓ± Ÿ•¬ÿþu­°IJ6™ “^bUî«|È]' ëï?³1‰îш®éçÅn2lžqmV`d±ótß%a.>ü{3ßÔÛlõÁkP*•[ô(áVìјþò«¡€ø€.&”Ï“Žõwï +… ²‘(rS$B±Ù}T-€~ü–jÑP<:¦»º$™žbU c3Ú«3<#Šy‚¯=ɸAÓ“žNI‹YÂÐ]]Ñ^Ô’Üæ#£/È' íÇsêå Ê“#‰ öjà>'¤ó é$ÝkvNzuëÝÑ©Ð~Åéh8˜<å{ûÙAí¢’¬[ï‚Òj ´htj m¯[|'$“tœÑ.¯ð>gþûg4ßÓnæzN÷ñ U•2ÿæíÙ •¤$EJ¿¼dýáLNVŽH&®ZÒW¤Ì%l¤()MðËO\}ûŸ”†ì£5¾wØ|B:ã5ᔤ#Qïe£:ž;¥ˆ}#$©"0i†R=¾k‡ÂAÒ=u*˜Lß´(›a²”Û `e¢0ÕÍàzßQ ú×t{v¶ü"Dƒ²v”Ð|ü€:~Êx9ÿïßaOŸ3ÿæ9݇·ôÂæ)¡«qµmH&„jM½¨ˆ&b̘t’@tƒìDtèé|L:MiÏWQ>™ì oÑ;Ú‹¾èi–[²ù:’G ]²ùØÍ2|ÝâêtJ6›Qœ¦lß¼§Ý’2CÛžÐÒÇ1¬Yüõ-d…<;Ãsdl2Їk½¤ y×s¨»ñ>áäO_оÃòÚl2Aõ-^—L¿y‚v[Ö?ƒµè$#Lбe{~†ë Ö|ߑ̎±¶¥kYi©/®’MFv4&ºŽìñ¿^Ñ­A™ždþˆbž²ýù=Ý&LÇÃdÎ “7Þ 89ƒìiŠ0  Ñ©;7x>ÿ}po"ÂLzP=Lõ¦k3¤7JQ,¯u Æ}OtS–à+‚ט,ƒØÈ¯:)©U+|iR‰Žî›a]ƒH™ “&„Ð^x¸ûv}Y«{&Ê÷˜ Í­R’¼y{oC-AEJd`W5Ù“çã–Åw æÿø%Ý»Ox,±kd› J¼ºä.Z¾»5D·¥Y¶Œ¿~‰qõÅšÁÕ:)˜|ý ¿|ÏúÜsü_О]‘'l¾ýHL˜¼ã—¬Þl0iÎø·/Ðý’ÅßÞA’ Êx  íué^Iì(¹GÚ‚~<¾ñ¨$Áw[\åщDž«´À–™wÆ™¡•D7Îèj'ÚÉ Ig”r´—+L9Æd–Ð÷‚Ú³_m1£1Ú*úm‡.R’¼@kEì¶4’t¨Ô-ù=ˆÊ[8¼“ñoñx.“à— \oHF)Ýâ lN6M©?á|ÆèÉ)6Û»=}Ýšä˜\áG:áê ݪ%™L°©‘}RƒßTtÛíP\l‘í'y —Ï™ž•¶`5±m÷Úà8÷ØÉ[¦w»x÷®{B½q›ý¶ Þöý-“`(›£S-’#k0Úãꈤô—+’£9nuI×8´²‚é¤Ç×íuí¯E Á"bŠßs¤“Tº£DB×I Ñ59ÞÛ RI*HÀ¶ãäûáÎáÐ5‰v7¼è„F¦Yrxµ²Oº•N(OrªwŸð!¡x4“ðš®Ã9W¨7tË5X É ½Hº˜£9iiãtE·mI&GÓR¿» IO´¹Å·[B§I¦S’±<ïÝr)R‘,9@ú*L‘´Òe= m'ëµÖ÷<Zºð^‚ÉzI&~³¤½\ËÄn&FÞÛ,ne-nµ”÷ßþrØÒvÀfÞü>äùW ”Ò:sŸÄw¨§¢ë‰ý`"ü?ÿ?,U:>þß¿bý׿RUZºÏê;ê/B è®ñNsüÇo(&f(t‘Ѽ{Ãå·чFsüǯIG;JY}÷#Ë7W.ñ‹š®[Úæƒnpà&ÇúšÔôâ*=\ou ãíð’Û¦‰{:Ðñ HEC·Ü¸ê–¹ìþŽõ¥‡à蔸ˆÎ‰®Íèë?k$\#øÛ¦ÆÝï  T.”‡¦ºvd«°=aè@g9J54[ìdŽÍ—êí CT„nK¿®ö:TïZ\…v”ÓWkºUƒïÅÜàƒ#ÍÉŠ’úuKñü)ùLÈ ÝbM ‘nÔ§ 1›ù”lbÙž]‘ª+|¯1™Å$•èl¥ cñáï7£6‹ôÛ ®v$Ó*6xgIg£ëÃE¸G¯âZ÷»“ eÁo68ÇâuðîD/-ù¥CfÊ Ä-íUGztŒÉzÚËJ $ß Q#Jéüß0~TPŸ¯èV*JHè„äaF*4øí–zÕb‹#æzÂæïßâ³SNÿø”ê§Ÿéš„òñŒúÃ{¼7$£)Fµ¬Þœafs²ÜS½¿Âž>æä/h?½§>ï}ùÝ]rþïHNa‚бóèr,T“Agèë5Þ%Œ¿z„Ýu8–RhkpuMõö3=fô|*i”÷#]K684s|ãvQíƒA”öô›5¾Sd'sTlè6Êæ¤Ç²iFóæ-õEOúèX$+Q4«ùóa½¤Yk²YAh¶tW+¼*(Ž6oÏÉŸ¼À„ n݃)˜þá9ý‡ŸØ¬Sæ_\þù=£¯¿Æt+Öï>I…ãªƤäÇ'6Ôç[Ò£SlÚÑ.:²Ó ±Ùˆ~~·1 g¥5¡iñ.bGç­B ÙT SòIA_mhV5ùÉÊÓ®Ú½•b:*-¾©‡{x`zÖêšÍË1tèüùýïBg†úüŒhÆSƒ«Á¤ ¾ÝÐ-+lY\‡RÙñ„fñ×ÊÙ1v–ª‚ñ«ÇÄõW}‹'ÁæÙ~’LFäÇToÞ°øûTšÊä1bR0~ò„ÑqNèÅ$ØÔŽ´È¡w$ÇIÒŽõ›Øñ#òY)$„0t­ÏW”_¼$Í#ÕÙIàµØÑ«·\üÛ÷“_/é½ wRsïÛcÀ5£?ü†É“’öjKõþtŽ-ýjMPc޾žqù/ÿFë&LŸP>“åtÚu‹oVøPýÖ3þê Í»·tMÄf%ù©t¢]!ö´çW´Û¬!ÉgdÓr9Bß%FÝÓq eJtŠ<êÀŽ&ò>êçÃÀß?)+Þecyã†"5~¾{‡Nr&4&;™ŽÛ×+l™Ð]‰­¹8“ÈsRœœ@XÓ\ÔÂ0Ö•¤8"?š hðmMôj(ä 9”¡„4ѹ[&Â[èáЙ¬ÏÂBןï@«ë{£L.)½7$ eÝj…¯ƒôƒ>¼¯·Ø“5áò¿ý;½žrúÏ_£ª A§¤“”~µ¥¯&OñÕZL¦É6Æ_>£{ó‘ò·_“ežv#‰«®n°ã¸ŠêíªÈ±Y)Œ¾&ôfäÇc²ÇªâòodIŒ1¨hI§”>L6T×úxëÄTÒYëe2b¬ˆ½ÁŒGØ<‘gdS¡’;“O3Ñ»‹a EÄLFÔo_³øî “§¿¤¸v2Æ$Þ¸_"ºAŒòûËŽ&’ÅàãœNúÅÛ÷W;âTÖNu¯^é—Å#<Ðu¾íŒ×£‘u¶è'oòä®=xávX«ÿµÏt÷ï^B´Õw5Î70y÷lèŸAÞÄ@¸ ‡½»æZTrÓ¤ A•ãŠ;)‰mÛÔÄ]w9º_õ¹©@Ø|vš‘„Acö‘Þ[ÜI—€kó‘ôÏJK`…\ðßv׆&£S“hÅla¥[0¦D¤«hÇ¥|/«¡íèÖµD¿ë4ü=&Ïp9«p›˜ÜJçe¸ž¨sL7$ˆ”•P¥p‘+‡MPƒ|ˆ[iDJÙ» ÞDyÑBSKÚÞÃfÚe‡îHðbŠ1ä¾÷òû4zÇaDr4ÅÚ&(2@±ïñU#QÐe6pÔ&ÑÒ-ÀN"z•" Ð:ÒZלt S+µ(’ ;› T »Ü ó;ÎñÛvÀ †!)* Xß²¶ÝO? wô€» ô˜Úá܆ÀŸ;ï×ïÑÞ»û]ø Á†l×UÕ‰Æ-…¢NLšÊ¹¿‰&6-aXctbQyJl°Ї2}M/ &b¶ñQmbÄŽ&p•“ÉB%:Nm-¶Ì1E‚[Wø®'º^´Ä™’TÄ´”‚Å ²B¾g×K`Í.‰¸ïŒÄÞ 5bˆ•Ì_@Ù„t:’.Õºô§q0Y ºÀDHDéò`8Otm½cVË ®†Š}쵬!!oòTžC5hòûWw˜2ÇW¡‡äh®¡[Õ §½V‚§Úá¨õ€XTX£lBØÖJ“én´ŸÐ÷¨4!TÉñL¢î7­<«¾¥ßt؉{$½Q:øÉdD¨+ÔHâçƒ ²¡×5®íEÖ¶;´ ! Éd$á^­»5Ý{;‚Ç”åà#}h¨)Æ  SÒQR=ݦlc a‚„9'zÌiޝ;´µø¾Ci‹-n÷ºMjbÑI‚²†àÝð¼Ni’‡°¤8P¶¢sònhÃ}Y ‡\ü8tfíXL¢°·Ý\<˜Ö©_?±Žñú;[ N¢ë±VºéJ4ï;­ï:L9!føí–à v$û€oe}Û{y Òu8Ž÷æØ{ö>e X#Qòhi\õýç5Ó»?·ŸæÄº¤ÃžéÄX¹7«•t½_u$Gcl–ÈÒ¸Ýâ¶­PœŒÖÜ1F{Ú‹%f6×â¶=Á;L‘“NÇøÍ×E™B®+°V& Aî»É2L‘†OYïpݺð­C¨Ð^š1Hõ©åýhI_µ“‘lÁÆâ*ñÉØ"e— )RÝ8<“ƒL,ˆÊÕ ¾vƒæ×ÇÅßÁ *õ@·ùþ*IД²^¨Är/Çr˜jR@+¥¦döfUþKXº;!$¿cîŽÅvd‚;X°Ã@”“ÏCþ½Ù_øLÑ{|'ÿü{ʩƻ]÷÷ à‰·£O:»ï~ëúý8Ù@{±‘´žDÀøeÃPfîq¿Èï‹­Ao§…[¯è–5v2-ávEwµN±×ªÝèèFúÑî!Òúnð Ü ƒÙ‘ML†Î [|0EFè¶rª\Ð: ¶§wè² Ÿ¥Ôï. ‘Õ$‘úìͦ#ŸMP®§OÆøíGÊä՗䥯è†óÿzˆmËô÷¿cþÍ11*º‹3V{CëâÿŸ½ÿì’$¹ÎtÑÇ„«™‘™¥«»Ñh$ç¨ù™çwݵî]ëŒ A@ë.™*´+S÷ƒYˆÌÊ*48˜³Ž˜þÀ¯ÊÈpw³m{¿ïóRž>"+2ÁÓS„o™ÿëkª—/ȳ-ËooÉNÏ(ϧd•"¸žî¶&øXäå'º”©°uK¿±È\c7 lÅÙ4òi‰Êw£3‰Ûvô[“œÖ÷Œ¢÷ è€@[¯"qåÈe.D…,íõšl2‹]}ÐÚE2ÅÛåäcyüœíñÁc– ³ÿð{Fg9õu8Û%íå->›pò«'tï®è;Áô—g¬þíkzƹEϨ¦Í¢SS¿½EGqÿLÏ‹i"÷Øw-Ù£Gä²góÓ5Åó—œ|6cûÝwln×]Q 4BhÔhÇÖÇÏž÷ 5ù8?Ò¹E3]¿ŠzF‘¥Ô¶,'ŸÒÉQ@ŠÌýºÁl Ùx@>-R´ëÑ¡Å;úyÄ  %Z`– ¬ {޽²ÈÒ®_ÓÝ.é›dÉ`6#ŸflShÌðÑ»^à]ŽT†nÑ’Ÿ1~>%tê÷ úµÁƒÙn}õk¦5«¯ˆÜS_ߢ²S[Îþç¿£È;nÿõGšuKè £ßþ–ѨçýÿïOdO>g|–±üæå“䥡¹^¡”Ž{UŽnƒYŠóø-Ýõ‚¾éº¢:™Q=Ó¼yÍêÍ ÅlF1(0Ëm<¼g#ÊÓß® .‹›’dòñ¨j„Pñ vèBgÈ¢BDÏ"ýriK¿ÝR>ûŒóß¿Œ–…%nÿùÓø5õ÷dñ¦eúåKòÜÒ\o0Û† 5y™Ñ×-Åx€Û:²Ù)ù8C*sŠó«ù7ZN™½(¹ü?þŒL£61ɳúáì?þû†«?^1ùÕWdlØ\uŒž?NïrƒÝn€ŠâlDóæ=rtF–ä°bôâœæ§ï¸þ矃AÔ€»¨Å·<úß~‹»}Íü§MB¬~|/Ù-1¦þ—Ì~uN¿ªéW†`êØ)n[d>aôô‚ÁYI¿ÜÐn:|»‰úã"Ãw¶³ä³3òªÀÖ jXâV5rX‚q”ONhßýÈí77èaE>šQL«86ßMà„Åwu"]¤Æ\9Z¼‰»à\Ó¦SÌ="Å{ƒCdò“Q,º¢­_,ˆvâ#ØØpÏ({¤wMÉxªƒÛÒ\/‘å”òü„Áy…ß®˜ý ' ´ôtëšâÑSf¿û·xÃê‡5ƒ'±ëëk?Ce»âI §ãxÞ»fo¿Cá!2‹!j é—s¼-ɧ‘ø³×8îšÜ„HþðªT{ìÚÃØ»ØÈ1ëýÚÆæ‰ˆ‰“¶ï ‰üBð˜ÚqòÛ/9y>Å´õ»lÝ¡Ê „-ý&P=y„ò[Ú›šÑ/ŸÒüô]«ñÛ5Ùó—œýêóÿüz7böÕ˜ëÿü=Å“ÏвÁÕ[¼Qd§§ÄóZ Ê+Íö»X].ÐÕAFq2A&)­Ðàº:š9÷$±û÷Ùï£ÚU–ÖâÅ/'ÕÁ„Ï®öIȦÊó«?Ëâ§e*¸ÃÃHÁOÕž!ÄC¹Î>|è-{ }ø9ž¢ÑWå¤Q"©9æú=›×7ˆ<ßu ™üwåÖý_øŸ@@å‘îœVD—~$H%PRA¼'RDS¸¿ ìxЦO®ZJÇ®©±xã>ÔcIi.$³Û‡¦ŠññŽÿî Pè4bî÷± »±Jp‘gûNˆÈ3°>ꈄBWyŠ¢îÒºã‘yŽÒj¯“óÖ¥díØ¡ò]ŸØß;ôÉ)<Î&v³é˜Ð÷±³vÝI{—ºÇyép!# }×A•U±÷ìÆçÞ²×ÓݹŸÈÝe¼÷.Æ”²ÛXî„e9Ž÷£tŽÆ…wÃzÂh$Z#¼Ãuï2Ï‘Jâ}@W%$•Â÷Ñ´(¼EÇ(f±ÂË =¬"±¤íc“2‹\o’\HkT™ÇŽvb˜gp}µ«B@BË}‘›½b¯ÙM²-­SD¹ß›[EžÅgÙÛ4">üþ2‹E…ë,ª*¢$!uÚvÁ5B€?~ßB½/ÜyþvŒ÷]·lwÀ‘yã²Û.F\rè}LáôÛF*rÄ.ÐÂDHkC–Å®–‰ÿ½ïzÔh€Iç*R }¿—¦ÅñÆ:œ;tãQ±Ó I˜M :CfIÃhAVYìÈ÷&MÊÒc¢äþ`¬ª‚Ðõ8ã> ô8šfÞ «ñYdûqך8ùQßÅgÔ{®JBgY|¶|ïRšØßßâÓ[c^ÄHvâßͽÂtwoï¬á|¨ûõá  ?_ˆZü»f/ÒÚý—;…á Oº“¢+ˆ4ñ-« ·íÒ„Ìá[Ÿ+ëA)t®pI닣ݮ¾{^c»ð`=–IÞùLâ®7`ÿ5&¾z¸÷½=ðgw*?ÿ‚÷x°¼£n ŽaÁa‡F ‘J&”F‡o#39&¾)8ŠuÕ)SBJBkð>N¬d™GÙ_ÝBž€½Mu¥H‘_éT ŒE”9*רm»ÏfØEpïÇéy‰æõßoUÉÐ’ü‘¸®}4v=wË:a…C”·PâÈ h0[“.³¥_¶ç‘¡¸Ç³ÄÑ™Û,èM:Õ ÈOgä•¡þé-ƨøÌîôh©s TÛññ òÓ)’:Ð_Ï¡Œ óÝZ fúÅúî˜Nˆ‡'ácè¾0Á#³2Óû—ß%cšÂ»×Ãì÷¿‚ö†fqö>§ó×ø¯3 ââ?|Fýí×lV1ín7brMKñü%¿ÿŒÐ6ïéo#Ä<I¿^#²ÕÙ)ÅÅ]J¶?¼Áû‚ÑggGw¤.[…«ûýhÿ޾]HòQž¸î.1"K‘гñ~ –±ã!2‰Y.#;vë…ÞAüŇ81#j¸w0þ¨÷ ®¡»YbS´½«gÿËo›[¬>¡([Ö?n)ž]PŽÍåšâl„«;²aE?_az¶Ô³sBsËúý‚á³Ó´ºùç2†/ŸPel_½£~ß’ŸÏ(Ï"O{ùÝkäÉÓÏžâWk¼i±›=žÅ`¿K5Œß‰@¦àxO…’˜m‡3"!‡Â¾ l”Ôdãˆãc!ãõÞÉXü8w•gd£,.ÒÎc6Ý_•ÞOY(ìjA¿éF´à²Bæžö¶aò«Ï)ª(¨__Ñ7 !ZPʳ)Ù@ÇÏb-ý²Ãl74·[ʳGŒ¿˜Ð¼zM³ÉÉŠží«+ôãg̾zLûÓ%Ndd•ÆmÚX‚W9Åx@6.âø=dsÃíŸo¼|AVhŠAàöO_ÓÕ%ÃóStŠÝ›\’Ö/˜šîfqŠÑg/Ѿ¦¯·¸ÚQ=Æàñå¿~M=·Œó%eVsó_þŒYž•ägct–Rǧ䙥ßBy>‰È»]1ˆÎE šR¤§Å´ "+(†%޲ɔñ‹‚ëÿãk¿þ ÝÌéÍbZ¤ICF~2ÀÞ¼áö»§ÿø;ÄæŠù×oèŒ'/J&Ÿ=§8S°öÍ\ÿËO¨ñ$j2É(N¦é’¥ Él”Àµ[„¨Ò»Ö센'ýÕugÔ  f1œÆ‡([\rý_¿!Œsñ÷¿ £´žB²üú{6—u$¡Üß«¼'¨êà×I±Óû¤wÅ{ÚׯY½ÝR={† 6j²oVä'L¾œÑ½Ãò‡RƒsvgóC纨ñ˜þvŽŽ)† Q–Ô?~Ïí×—èÑ¥"^È‚ât§>GÝ6±/$c76Ø×ôwµ£÷iŸÜBôs *¼ÝÌNOÿ1ŠÕ!¬%^¿Ó•‘e4^ù~Kwu‹“§÷ ŠÂc¶–~½¥_­¨ž>Cçó?üDßÊó' Ÿ?&Wnþå*(ŠG§øvI;ïÉOgÓ2¸m¤ñ\ó‘.#Ë!r—œiÌòšúvC1½ 8¤Î¾ ¾iŽ *,†¨a޹}OWKO/¶ÿЖ•]B+ìfI¿jSA2º›>6ª1'_>Gªžúíœv±Æô©4ù$z&L8ùõKº÷¯X¿m8ý»Ï¨ú+§äyOs¹Æ9ƒ(ɰÛŠñ€~±%;{DQJ\g)Ÿž67´ÛœÉ//ðÛšúݶ3rTU¥Éa ½^ Ë1º´¸ÆöÂ#ÚTð*ÒqT\±ðqŠíê޼eþncÒƒ䬿ÿžå®þµd€ :I<Ã_Ð@ïC†ŽÂ¬‚“äÇQÞE†¹¾dûæ~Zü÷â>ÿß í ŸÑ™À9>\îkRwuÿéèz5Ë:u™Ôþô%„¸‹Æ»×©Ü_AD§¶Û6i¾ÿ„H„p"äüÑ‚–â›w£ò#Û쇺¬ÿùø}Çí]ýºÇ¥ñ^ŽàÅéá:¬“'|½|è]Ìî¤Âokì=ÂG°Q)Oñ¥³=ÝjK )D<¡æ928DQ!¥Ã¬d5@WÙÁu‡Ó,qÛ&j•>’W8‚èaÙ›áNC©3BßaêþÁØhHìÔ"òø•)Òõ®µøÐÝ¿ ˆZS—´åa¿eãÂô„¢DJÝä G Ù6Èa…ß4Èa‰¯{‚QS™‚|ÛãEL[ùœ×Ñ--Š•+|Û⌺W—PI·×ö#baœÞ¡¨m?6¸„ÎУrÀšÉ&þ¿ÎîMH‡ëuì*î®× ß´˜Æ$£’$X, ²aD³c"ã9ËîpЃuïcVzžRK…ó6Ex?lc.vµ&&Bƒ7˜uŸ4Œg<Ù$êc]ë‘™ÝÖ²¢˜UXì±cVw=²(ÉFy¤¬ c¤óºKÈÀ pë˜Î¨´Ž¨ÉôàĈ]ð„O¾Šú±?ˆX‡”(!°›/Ùh€Òžîv‰Û!}Ä‚ é°mìBGŽªà¢|‰°×°‡N*uvñ‰l¤Jªø³ó’l¢i¯¨ñézLãR0‰%èŒl\êÓ:ŠÓv¾ÄI-B¡ËŠl ‘:ÃÕ[ÚeBJ)â]úøzû#çW$¤ÇÂ1Ucò¢kMëQ½G<{ß6tË ä%Åd“×B$6ØMZ/äGÔ”BÆw’p4=Nš}"Q$ô=fµM“†Mà Ǧ¯£À“ûbè‹Ç÷ ŸNÐ*`·M’WB6‚7ô«6¦ˆ±€Ãœ~1Ç¡#­#W„`q¤ŒÏKð"e0„ƒòÎþî追³©åsí|ÛîÏÊ›íœ@ejÚúj¾Äww)F¤\!âçu™—Ó*®6NÉlgbÃJ•Heñ2§põ’® ä㮩£äJ9LmãrŸ)„Ј`°Æ£Ë‚`âÄLø8Å“ƒá<^ꘒÚ\Ý𑰄ܯõñ{SHîšóŽ÷X­{/»XîŠl¥©À§y„V˜u ‹ßý¿¿¶‹þy‡ïþ±ìœ‡š±q}Ý­Ãìï7.Eyï:лŒxñ‰VöÏ*¬Ä§>Íßàúÿ–Ïô‘ë%˜UÃè‹Ï™<ŸDRÄÑ©g]*˜Úâ «4«o¾' fL_Î0ó[úÅ9šRÎNíšîö†¾–TO“•áòî9Fw\jë£A]ðÒïé±ïŒÁîǧŠÙÐÝ®8À½ùtxÌqÌù_ ›IÎUYæ^cú"‘t·7˜:FnúÞîY¡»Ó§ÔÛ÷‰9š¼amÏð—_1¨Z.ÿÓ·eÈjÊÙï¿@…$È4¶ŽR]ˆØŸÓ*…Iöq¬¥=tÓRű·mì¾ ˆ\eûAd{4ýYœá.0~PÑÓÞ¬E®‰eyý¹[8?ð½†Èû•yäyûv“3"—ÖXö’bh/¯©oòÙŒê|I.ß²~uMõâsF3ÅüϯQ“S¤íÈÏÎp›%A ©Î‡{Væ‹F¿aþÇïiû’ó¿ÿœþíO¬o ºxcÉNÎɇ’îò† +ʳÂ7¸º† öf’`=z:#Ÿ…ÍøãÍ*ì¿•Kºë‚Qœî–v‘­°µ%èoæˆjJ>ÉS#™ë„L˜Žüü‰M¨7A¿˜Ó/;ŠG¢¥_ô¨Q•’ù"·Üo×l¯¦ÿ%þú-&Ÿ‘…-. ¿œ²ú·?ÓvŠÉ—_ ÝšÕ¯ð )O§È<&t†Þ#Š!zTàÖ·tKOq>À7–ò|Bóö¦ èAžêÎØÅUÅo·ô›†l8@ˆŒÑ³)ëï ï3v¾æà(ÒÍïè“M®©ñ!'+rT)qmKßô±€NÓ‘øžíÌG ]f±³žíeÁGi\@dÃü@¬Ø!ÙdôŒtó-j<&*êw×ôM@ê5.¤¦œMPIß*t\/Úù¡2T®îÄ;ÇéÍN"“%rE8Лˆa6!28Íhß]Ó¦q¹R]æØm>Q íÕ"Qu$ Pež‚ Rzœó±°3Á©ÄÚÞÛÃ=ßËA~îÄÊloH~é½G>@òúðz¡<¶é@ä±qo£/E T^¢”Àu5¦]„мFå9„HÜÈO'ˆvÅêõ²œ1|TÒ\^ÑwŠbX¢ ­‚(Ð%ô«5>(²áûhâq°ïåÑ¡)< œø€4&Àõ˜Î T§zé] ÷ ž8y8¥¨,ËïÞÊ ãg'ØùgªP)ŒF¡2ð.NiDQ’åí›ëØ€ª¸_^œáV·“‘WvYDFV*|P¹ oZT1$Ë¢~^ž …Ç6}슅ÄÒ7-2 ”HSäÙ¹K§Š”ŽD/Bü»ÿ›"Î}ïPÊlœÂòœ¿g0;4e®éç·Ô×Û}xÞ.°mvôï©%ï2ÀÅÏ`sÜûË¥›|:Çh±kwüÍFûí¨ÿ÷½þß)OBàŒÁn[ʧϘ¼<&¿p7¸.v R ²ANðg=~çSJx˜½NZpÑ?Ä]¾ãP¾g>ø§9<ðç>HR¼;—‹š·–îfYÍ‚OÆüÅ`—àC<}Ñàqw!NÏš"F{÷¥w±ÓUŒÐI»ˆE³ÔH)ï~GåÞxЊ…ëcÇØ™ÀäóçT§"Ól_½aýf‰Ê³ƒù3xPÓ/Ÿ£¥9l´»nUÂVªLðw_èÝCÄQopÑMÌÞÑ­ðÍšúÝ5r0¥<;‰š¯ÒH/FUÛÕ‚~qƒ?êÈ„ b×Y4®¤`ß7ØM š“¯^âV׬_¯}ñ‚Ð^³~»E"Ð'§Œž?‚ö–õëÅÅ~u‹sIÃuzŠD}²Q‹kn¯X~€RÆXTÃZTVÄC€H$"/ÑÃb_ º¾Æ'>ª¸çjŽHª5‰&œ{ðÙ–™¤»¹=Œ]ž¤öõ‚nÑ‘_œ#¼Mè5è®æˆ2â«B2-ºí’þf¥áòŽ1zâÀdYŠÙÝK{DL/«·˜­Af9¶ÙP<Á``Ø\ö ž=Bk­ Áõ˜EžÍй§½™c›8Y Þ!tÍ3"Lu‡Çð‹ÏÈdÇæýuÔÅˈñΤ <9ƒÐÒ¯{ÊG)†‚í«×´µEe1½0x;×)˜À;»7=ÛÖ2þ⃓kb§Çm6˜uãt´7 ‚T'vT …è7¨Ñ)“ÏÏHÜêšÅׯ°!šŠ"]€RHp±àq¸>BÔð”“_=Eö ¶QóÑ,P¥ÂnÖ˜uçxÖ(É'fÓS>:ƒ®ÅGq6¤¿º¦¯5£/áW7¬__¡Ç3òñ !¦v¥ÃµíA*Lj!Ë᡽‹»Ïâ³´ëL„p¸}®sH%‘É}¼ Ÿ hÞ¾eýnÊõ} ÈœáóGhu´$½÷wuž®©i/7¨áo¶{¤É+T•ỆþvW'¿þœLõ475"/Q™ÀuÛuø.&ñ9cR£v˜´T<ã$Ùé˜Ðo1[G6¡«¸oÛ?k$ÅY|×à;wW¾rgoˆÒˆÃ÷?ïz‘Õä€Wݯy‰.å­ÁùŒÓß<ÃÍoðù ;Úùlìtû¦Áú‚Á£ ÝÕ»È'ŸM0ë[LçñuGõùK2Ù°üþŠòì‚lTÆÉÑ=éÉÈ'”Än#v-î ðºþþþlÛ4{Í­·&šûÅQÙs°1Í98cöÛÏÛ5ýÖ « ™ Öß¾ÂË aãôhô⻺¦[Xª§h§ˆ¦qèR³}ó†~+}Mñø£ÇCšë5¾oRBì Zº÷—ÔkK6=eøhDwuÉúí‚Ñ/¾ –ß^¡«ïùé Â÷1þŽÇä°gg‘Řòüº íõM¢qÅ©k ¢ŒÞßÐ9YU T2†{úûÝÁ7ËPÉ ºkúS³üæ56dw|»?¯ÖK8]!þýÝÛd6÷½) èLñiqÈÇ:“?·b½‡ù›_ÿ—º¥?ïzßõ”Ož2y1ÃÕ ®ïIvWúù6†Fø@~2$h‚ˆšÚ~ÝN7÷Óê2fÈû‡žð„¶øÈAé'bñíYˆ7~×ÁJ-t-?žcs¤>ê<‡ã×J¢rÙ¬±}ìÞ»‚2¢Ë˜hæ\@%R<ÄêQgév§“Ýfç鷆ыg Ϩ*§~ó–õÛå^ïºßÜTÁèÙ9J'c£âHÚ*ŠÙјîXö!DÂÊm1[{À(¶ÃlT5@íÒ‹Žî[df&ÿŽœ‘yE't8’¿$J‹íbds8¡™þâ9îæëËšñ—/ðëK6×=J DV2xþÅ–õó¨ÍM|í`},UD©Á€ò|Œ¹zÏò‡KÈcr£H©âaÆ™>êN}@è*öÜîiã¦à¥H;j„Dª™˜Öw£ƒ£F.Ò( È,joEÔpî°[ªÌ+UôG׊=%8³'©Ä¸¯ûîcú¼»É„ЇñÝ>à `ëfßYµÛ†âÅ#Aýn‹ÑÚÓÝn£~ÎÅï36úý¦HUÅHì4¢Ç[ºMŒgÎ h7´«>>rp Y1FÐc;G> |O¿­1mA¢‹b¯ç2L³&ràÓ»0þìƒÓŒn¾Å4Bì’È|„ ¥/ *Gé)@*Rm¤¢_ÎÑg˜<›àz‹¹½fõã Ed!W))s§¶ŽÌ"Þ!Êãgç×Ð^×d§c|³Å¶™‰}ZbÛ–ülŒß¬iWžb6$t5ÍrK6˜’ ‚7‰n£c\pßàí¤s(TÕ!-0”óé•‹´$‹»R!mK·ìÉNLJ„Z!PeÆö§×ÔóŽlX¤‚= ºž *¦Ÿ?MŽ»#~qßÿb-ÝíÛÇÉVp}ðèä ?;G˜ ÝÒR<:E+ÁÒÞÔd'%ÝÕ5íÊáûžòÅS†'õÛ 2‹žßãš–¾s¨r@^I̶¦[7T/ŸSæ†ÅwïQYŽŠòä) Þôû°ªjgã3eà5†HžÛX„.£ÉÜ™Ó8s×ôP#0ĉ?BúšÍ«kj×þ³kÉtoå1ÙCˆèEèL”–æ"¸È…ÏóJÉŸÁ6ǘ ÿßj"¼€Œ_¨m{ÔxÊðÉ XOÉÜK¦ù˜"„k2Rgzß, ÷ƒ#î©|¤ ÞÓ´Ã_s½8¯d`KìýnÁ_šf$ˆÌ D&Žºy÷G%!FÆ×B†æ{Pypqñ‡]o áá ˜½ 3Ä1R Q Ÿž‘•õë+ºU*òÔå¾7’TåÙ4Jv‚÷„"ê®.ùX®Çñ÷u¯Ã¿w§P—àÜϳ?D‹ýø<ÊE6ô‹ÍúÞ åE4udòpÒ¶&b¥„`°=”(ÇŠæê† ÈÐ!‡dhؾŽð|\Æ`bÐÄÉ *>!Ý3@¨Ø­ï·lÞÜàEê4î7þ(M‘U, w…jð†Ð™¤Á=ɼDä’еµå²î™±‡º&`˨¥U‘N ŠŠ`êü?9‰òÆEm]ß$‰„L]™:],ΓN„°_ôd"bE”›‰†@âH5ÓG8Áˆˆ aw Mtï¢çÒ[ä`ÄðÉ l"Q[œM•¥ðÛ%Ý<£DÞë‘ÅHmg!Ÿœ0x2Å.˜„vŸQœÁlSÓ-ZÊGg˜ù-zzFuZÒÞ\ÑÜl£9çh¢$ðø >=C ƒuGîr©@hÜfŽÙX²´àÚÛ§iŒ ϶¡¾ZÄXò“ ù°Dø†~iȦCÚwï0^¦sHÂjîLhÄwA%åùamZ x‘x.¢.ÝfM¿ÜîyÓfmâçr í|MyqA9-hÞß"Ë‚†úrƒ® ¼3QŠ +²AŽ­×x#Ñ£ºŒÁDÞøäõÈ¼ŠÆúIÓáþÜŒÛÔ©+¤NC á°pm‚ˆú¨"YÐ.åèT5&Ø-Þ— eåï9² ýrƒ÷ò¦ún×^x5]Ô¦«ŠÙ¯?gxª™ÿù{ÖW :WLcö‘í¿y‰r-Χù† 3ŠY•>øÀlpŒ+Œéѱkíš6â¥üð¾7óîƒH×GžH?#¦šÈ¬Dd»ä2ï6ôË8×áCF5;%Ó>â…²ßmÕáêwsÔpOõ>€4¸Ö «QÔG6’Oò” SÅèVÜþÛ8™'$yL*Œæµ€ŽÈGÞÚôH÷1ò„Ö¸º¦_‚ï V!‹\‹ï;ºm}VP>šì–Íû9ÙpÆø)O†øÍ Û·[t•³}óãÕ½Z(Êhd¦ñ]‹(&œþö%Ê´éõ È\aV ¦¶ñ³šoBUÑb6="DK}³føÙK&OJ–~…ž£åŠ›?¾‹|ðÄÂWjH9-1›9®Sd“ º‡ç.¶…Ì‘GãßàâÔP2I=ý¦Û¸EVŸT1‰t¼ ŶäÔ?ýÄâ‡[d‘œAgÌ~ýi¼wºf;)€ë fÕ>Ðh{‚…7]¤¤ ŠÔˆžnYíÕÙZlm… Ø׃Ô%" dÓDwËüOo¡Ì ¢âì7OÙ~÷-Í&Ròሼ?šõ»Žb6Ždš{k7ÒÇî´W÷ wÍ“ÌòøÌ)è—KP#Šië¶ñàz§sí A£ÊAŒ†Gd¤®¦_Öio‰og >}GfÝ2úÅçLžŒ¢¤Î:Ú›9ÞfÑÒ¬z¦_}›[Úµ‹á H·]P߬E‰Rúˆ7?O>%?È\a› fcâ94Oªh.O»IŒÌ [®Å4ÇïÐ?Ú/·„£Æ„s‘Ó¼kRçPÕ”êl‚¯W´7K‚”x£8ûÇ/è.bþÝ’Ù?þ†\µ,¿ß%²S<‹?ÿ„“¤NqV(àÚM _ ÈrˆR³i’¶|@6ÔÔï ^>gô´býí+Ö¯Ö×6Êö|¡ÇuíÁërè(øí2J2Âþ¡û5 ‡|@jŠÓAŒÍöGuÇ{¨ŠD¨îf‹È£À껟0^§-XüÅϛؗ™þ@r㻞üÑSf¿}»zÃÍ¿ý€+f\üÝ3¶ß|MÛådZì§«‡mÚ˜ ÅQúüso÷ôˆ¢ˆ‚wçîžÒŒò¾k¢ J2¦lŸ¢öñvoH°øˆ<„‡…ßYÒ|¸^æ·ÙDüÖC]h!¤þng\Hïb4­Ìó¨+½}ã³c˜ÂWä­¿«UôߤÖá=ˆE“È Ši…Y̱&•º3 |¨]î] VQ:vKƒsqC–òΗ”Ò…æÇ™ÞÝu_ïï¸H‹ê¹û.ñE QˆZÖƒÖkPœ@WÓ.6 $Î8òÉUM0Ò%tf»ò—,2Î}gÉO&åæãH ÆßÐÞl ÏÐÌ(ÎNÂÞ9! ­põ–n¾AF'¾?fߦ.ø®-žPq¶îbx Ñ’M†HfÝ¢†ƒ˜Â¶n#j®,¢äF*B³¥[5È2‹]?•4‰Ó/„¼›¦š±s¸ÛaÏ—™¢¿YDƒÕ¤ÜGÈï;aáa£˜*I€vŒ9—sxxoÐ »Z㌈“ç>pù %pÛ:ʼ¡3ÐQg‰óÈ¢BeövMq6MÑÌ]û©ŠªRj°=¶6d'c¼í±‹–l¥4¦µø¶CŸœ 4t7 D"œ<´v %ãx݆O¯Í{oG ÕñmM°Y•w1»çF\Ý@–§˜æºÐ"ó‚l énW±óé‚…üt‚ÊÎdžá6±Á 2™ŒÞÙ¨À¬¶8ëbG´ï0Û>ÒO>³‹ª—ßõq"˜ ¼"$ŠÔñ G|V|ƒ ¤ÖQÎe<"ËÒéã:&‰ÍŽä<ÇÓ㤗hŠÙ8}‰†³L–aëlmɧC„ðØÎ’Øåæ¥$ÞBïÑ“ÉÞŸEp‡@/oéæ+œK ~ñ£ª(£—ÉÙR“ä%1Â\}߸ÃÓ Ñƒ<63øK5‰ cÒ¾(3|øîµ—áí›tɃd–ÛŸ b¨Rq:EJOw³À¹‡j¤DÆAF#®ÜÕ*:™”ïÖâÐl[‰ÿýûýR(1e–6ñóŸê@?¨ËþDGùßsý'?Óûõ¾ëÉ.žrþ›g„z›Øßw£<ÅqÔ©8 רÅîGŠ}²Ïþ…Þ9ÃÃÝøÏÈBl°µ;Š0¿ÿ÷ßûö#øaö!|x½Ô³YaÛˆu:ð{P ó¸hbZE]-èæ-z4%Ÿ"g8|ä¾=­.„ÂÛšn¾"u÷%û@cå°} Ãs.~óˆå?ÿ M«ã”ú øà}v8—qþû_Rä›´®w ä‹ûN@ÀÑ}Kd•]!°ï ßC %1«:rubç…ÒÓ`Ö[v]£Ç#2éñ>vddÇf®YÓoÌaÑògZŒÑœÿÃWäºcñõ%d#Ot—׸P2¸˜`·M,Z|K{»ŠX+j8F—êNÀ¡ŽPvÁÕù3!F–kˆÔ”]Oê¥4ÞT1"?ÆÃƒO¡4;“ôxÓ¦s…x@/y*“:0Hd™ÝfyÃözI>zDq"éç ÕãSÚ·oq^‚ÁG>9£:`Ö·8SRL%®q¨¢<RŽQŽÉÄ+¤Š:Ðù6IJŠ“ Jõ´ó%ΗH¾ïÉNsö»—ˆ®Ž5ý²Á¹€oÖ˜‰…‰²Øu‹ ï äèAF·šS¿¯™ý¯¿!s+Öoj¤"й§}{IgãÏ?#5ËﮘþÃ/±×ïiæ‚bVP>:Ç^ýÈòÊñè?þáæ5WÿôNæx³ßý’቎„Ò¸¶ÅÔlC¿Þ"ô ~G¡fónNõä9å@áƒÃ¬ÖÈÁájêw‹ýtEhGÿ£X «\D]'Qä4¯~äúŸ~ þÿ9¢¯#›:¡)ûe J" ok̪Fc„ßPo§¿û¥ZsýO¯(_~–5Û÷ T>¢z6CgvÑâ×s6W Õãš7¯q"GkE6(“="pBÒdç²Q ø£EÁ[,f¹$È’l\ÆâMçd“Üa­üغ-¾mè׎b6×BÙŽ®—EFwõžf¢LÇGÁÅc ûqÛ¶OÉŽY…¸fE7_“MÎ(F‚å7œý/¿¢þó¿²¾‘ŒÅ`ŠàQÕ€òt€]^Q_Æ¿|޹zGsÛ‘M‡ø.zw̪FOÉ K}¹@¦'ÃØPØ5)ö @0mÊ¢ºg`O¢òà5ª,÷µŒÐ‚~µ$„*E6Ûý¡t·øiioÖ¨Á ÙH%ÞµÂ,n TqÞôô‚³ß¾@v[ÚÛï=®Þà‚&0ËKꛖɯ¾¢(jÖo '_²ü÷82ðšâ| ¡ÆÕL£ÃÄôX©sŠÙˆÐÜrû¯?`È‘" UNŸœ’4Þd5Áµûdá:Ê;R‰È"e.8ÿ`q\“ÄäЂ|’RRwÀŽ&¾‰ßn7-ݪE'; Ä·Kæü³7íý.$yÅ®¼sÈጋ¿ÿ‚°¸fþý[ŒåÆ.vµ<=ïP“»iñ±4S+|ÝÒoj„VÇQÞÿ/Íòþ”kSÆÔ@™eG‰9÷ëyñ@áö@âáÇL„µìNg¾7)•NÜí «{Zß…w?TøÈï(T Vðm‹mû»˜—£ a·Èî÷RIÄÛü•ÏÎN’‚&îc¡Žµ‡wßÛFÆÿÕú'„@Ù]Ó¤ø ÷àc÷ùƒqæîžÅhç!nnã».uëS7_Š}ÁïÃLdöÚÁÝ=’"²p‹ŒþfIÐ’¦3Ïð‰]Øc’ÎN,TœØ>£„8þyì¨ì;á»`ŒÎ¨é &¤$H&E §® ÎF¬ŸH]„Ÿå»ï:‰¸è:—4"ñ¹EL “1N\«È51ªY–y”tÉ 8ü©“x§Ëã=²ØÅnÐêÐAðÒÊáË>zÛ®K²K6Ì’"vª‚TŒ¸>¼zëX°‹dâŒ(B=ªÀö‘C0T ëpÄ眱øÎ¡'#p®vÈu¿“!$B‹Ë{XðQ2Eݓ̫Û4øÞ¡ûŽ&H6…(¤.¯K›e<@%¸¦¨aI*ò‰}ÓFG‘6MïSáêqG ©u‡wAK|Ýàú¨kòs:#¸ºÅ[„mƒ2r“U|\Û#ò,êÎE «ÛžºW2ÏÀÙ;Ñ¿Ñ[¿—p¯G|Û ²Uêˆô¬Bïžã‡•dwÖG2‘’:“áCj”qôí]”x8ƒ­[Y l’>£ìÐo;#¤7Q–(-0«$U ‘Ñ×[\Ó#µF«ôÝx‚ëqm‡ë=¢ÈRÆÎ¢5¨ÂE4šOoȱwCÞk,|êìÃi>ø²\š:(õÁÞv(gþlØËwþYè(AVqºå%zTŒÁ¬k‚ ¨á•ÅÀ ¹C¤p(r.*|»Ó AIè{\gîð†÷“ª´fì'w:;ÙÁÑw!ÅAб{­Cuw:¥÷Ö—?Ó¨2Jݼõ©säGû£(3”Ö‘a,Ø@P)§ ·ñïÍ4¡ë:CUyJêL϶ñ¸¦#H±÷ŒÆ÷ÂÅÏ)åiA|OÝGÇÚÁÇ®»J]÷O ¢a5ɾšòH})x(Ö$×¶øÎÆg8Ó‡gŧßáþ÷è2æì½Ĺý^êÛù¾·®}ÐGý9È·£)¼ÿ£ýÉë…À·-rtÎÅ?|0uœ>iãÄN—¸nÿG7F$÷¯¿ÓM>B} µ“ì8Aè{ºe{РÞÿŽ:Åw þãØ;¡%®^'çð 9ª¬²zi/!Ô.rúX3üÆîÎb,ã{ß­én7iLs÷æG—ÿ¡ HˆŽ{%®kã#ª>bàüè}öØ60ûýW O3¼ãÎ=‰_cß7q—ºñÁ}Û·»ïK ÝôØÆ™eøvM7ß$ùDú^«B¶oß‚QŽÇ ¾x„_½çú¯‘eÁyGÐC.þñ+Äö†Íû-z4¢½|ƒ~ü’“Sÿògšeƒ.ªCmjZ%åtJy> ˜Dn0 ¶6˜õ59çì>ƒ~K{Û‘Osº«+Öoט¾C%JHÔ`B1â¶KºÛ%è å,§»Y¢ÇgèADÁùCˆ3ÇúǘÉ-ý¼ENÀÞbsö‹)—ÿßÂeÊéŒÓ/Ÿâêë×·˜µ¡||ÁäËǘëWÜüñz8DÊŠ|’ÑßÞÒ÷Ž|2$ËbWÈÏð‹ÏP¬¹ýç×1F×;tY!Çt-¢(ѻ΢³Ø„>Û‚1PN9ûÝd´TêNˆ˜BÚ´˜Ö#<˜õÛuH=Ža7רF1þêÍ«aüˆÑ´Äô†|2Bå³6³1Â,¸ý—÷Ïžb._c]Nu1CåÑ@™Ÿ”ø&šûò“BE¦ñŽ@Òob\»Ð Qhpn~%&E†«[ŒµÈ¬@&Øôw¿Àܼâæët•!¤$œ‘#Ò-?9cÐÃ’âD³üó+ÈO=¥’X$ºÍ5›Wk²Ù9ÂY²qI>)è·=¾÷ØzI¿îPÅUøfA· ã6kœÈ¿œPÿøšÞTäC‡«cœm{T1A<ÝÒ2ûý3Öÿú¡:CkGùìš%›7›xI£k¡"ŠÍÕÛ¸ìyEq>ÅmVɆݪ*ê?qû¨á=÷õþº¦Ý»Kºu`ü˧È(Ç×+‰ïMÔÓ*Ñn—)f§(ièó”ç!PÅY)ìvMw9‡ÉŒÑňæ§wÈ2§¹Ýrò÷¿frQR_-Ù¾»%MÊ(û’LM{uµ9Ùä„ÉC6ß¼¢kJ‡TOÎ0ׯ¸þã{òá(Jì$ò˜«R¹ ø®Nf_±s}ôÏ䨲<‚¼ d&0ë%Ý¢EONc7vO°ðû.¤ÌýjE¿jâa,¼’Hè·kÔÉÎÿî‚æÛ·ˆñÂvˆ²Dç³^R_FüéðùK´êÙþø¤ÀÉàÙ ÑÔøPQœ•Øù9>cú›'4ßÃõ¿¾A'û€“ˆœÝ±«‰` Î{Tb9ï¤h»ŒÛ6 3´Ö÷Rùü>œçÎÞ–:ÐÎÚt¾=}Ìùï^"Ú5Ý*²ÛÍrN»´äg3Üö Ó—L¿|Ju>Â\¾âú?¡FSDÈ"­ÆlF#«oT9!›Ä@+!$Ù¨€vÁõ¾Ã„HeRyŽoÙxJ>-¡WA|‡oÛC„„¸‹ Σ†“(—1æSý^Mâ=ªŠ)¬ÁØ#ÏQ@O¿lñAEO€udãAú<>iÏ“ ¯[qó‡o1>þ»<W÷ ¿ü’³¯.bâ«ÎqËK®þëw8›.» %åLî64ïi¹…ŒÍ€¾nJý ô§¥²ŒlPl<¬ûˆàøÁNèG “Ÿ:¾¥—7ô[wi¡–©KóW ꮦÓZLv©H“yˆl°;v®åfÀñ÷îµbLmø»ùW4½õ Âù?xyB‚Åó‘ГŸsŸƒHÝHݶQ§¢¾6X»+;J Ú:ñNƒD!ÐÂà ýº‰¿]GHô°$4}ÔG:‡o{Ôhˆ"n K»{ÝÆ "w×Ç(‘eÓÖTǯÂÅä55*Îb{™²’´(ŠHØ's&gµ?BðG©ÀѤœø0Ýt7âé»w ¢,@&¨ÿ.r[Wyì°ï\áAOF(íi :SñûËc·×u6uDðûˆÛDóD*’|H±éû6‰Çë»w ªŠn}™¤h5‹Jà;ƒ]×ñ;.‹d®±‡çU©=Û‡h#Èa\W\ãУœÁlÍ“¶gÈ2G |#ÖÕ°H›£Jß¿ÃnúH½HRgI’;k>}&d4 j%¦é¢jKx@GJD aûr²Q»ä½ƒL¡t–t•.™RcPBH5zX"¼Ãl¶1ŽXÊTˆÉ;ÚØ]0B°5ȰM‡w­w]ðÃ8ug*Ò¹ˆ\î"8DU€Ýu¼£ü¡ˆts´Ž…擙Ŏ•ÐQf‚Kúßn:Ëḹ$‹ë-"ÏQ¥F¤Žîñõ»ÎàŽ`³+ª ±‹F´<¬i!ñÁ¥ÃÖ¤Dåñ»‘E†­[TYU¶‰a_ÂG]þ~Iëíã;ª†×¼ïc‡.XLcQy¢Ú؈$Þªs<¹B!E íùHkþîžé£ŒHʰ G!2;„\Ø-éç )ãR¬3t©K9½;»Ð.•)Srdè:ü.^IDì¦,ušÙèÅ)c Šo;l“ðrɽ½{ÆD¿ÊCws7™á`èøˆoÛÒì'ÿ½ÇS½9¿óöD\ÖãZƒ3"Ï Æ']´Ãêhî vۥɛˆ×'ø&r´}’•q’gzÌ¶Ž†ÕðÐV/,Wv䊽œáh zŠb÷÷Ô]öÓAY•¨BÆib" Ääåø>ØÖ$ Ȫˆ ëïîÖÞb·þ´*Kt™Åu"âqÛÝ™¬îÁ¿W˜¤Hñ‡Q8J½k¢ýÌ®Þ'Þ£&ý ¯ÿk>Ó_}½À·ÙÅÎ~ý ¿ë`„#wöqJÓ® <Ò1ßÑ5u/Åñõio?u=GÏ݈6vÓá¬@ª{üÄ¢Â?ÑÎv½ˆ,ëã±[¸W8ßïÆVB¨²x@Î!Žšáâƒb° Ý|™4ÐwµÏâž134=Öš#Ê_qŸÓ)<ðLycÈNqöw/ o.ü¿xßß­`jƒëc`ƒP2­6KºÅY QUI0[ºÛ"2úìå$§[nYÿø–nY#ó]ä猞ıÂäÙÆ‚&¸Ží›KʧÏÑaA½ÔÌ~ÿ‚еt—×,¿ƒU#Î÷%Õijùñ=õeËà³çTõop”ä• ysƒHT5w«}rÎäù”æík¶ó–¼,“äÁá¼Cê,‚õ¥Dé ßôè³sªqN³šãMN6Õ¸mv"A¡Ê!2÷ôË%¶ ×”bøì%*l薎ɯ_ LMó~Iß t%én¯0M +JŠóº*è®ÞÐn<ƒçOÉ2M>pÔonðz€™Ï)?Åo.©çÉWϨÎ`,ÝåËï_ãÔ„Gÿásêï¿e³pQ•Òt ?ÿ‚óß½ þá[nÿí5!Ë‘ùˆÓß|Íœíë%údFVFæ³(süfI¿väç'×°}u…ôëžÑ—/0ï^±™÷ ž<"“=A(ΣÙǯ¯˜ÿñšüâ *ëSÇT¬ˆ!8£œ`Ó„d7~ul¤±ÛײqA6ÊñÆQ¿¿Æ51Ìl²ÓGL¿˜Ñ¼¹Æ“!•aýê’ñW_QVnm(Î&ØÅ{Ö¯[ÊG'QöZ\Ó-¥ìhÞÏQãSªó!K¿6È<#f±ø¯]Â} –îö×K²ñˆà‚ÏQe|_ÓÝÎq¢bòù#ÚŸ¾§^F/ž@¿¤Yv{ßEp==göÛÏpW¯¹ùÓ5gÿë¯è~|…aB>×6ÑðF@#ð5Íí’|r‚ ;¸Šï ‹Þ’ìt Æ èJŽ~ÝÇp“d*ÔUN6P1]ô¨@±SI0ÈyŒ 2]çŽÅàZº›|(PÕð¤ä=rP¢¤¤_Ü€UP¿]S=?Çͯè·áçÏÒÐ-;‚oñ;ÐGT…Ì¡¿Óמɯ>g8+UÎêOß°z[3zöŒ`×8[2˜e¬¾ù§s”,)“xÇÊ™¦¿}Oße çhö¶{ë<Ëçê5ÍÕ9<¥˜(úÛ†âlFŽáÓÍoØÜ´¸¶cú÷¿¥+.ÿÓäÏ^0yñˆÐF„^1­ðý–öjE»Üà…Fz‡5Žá‹ÏÐrÃú͆Á³Ç :ÓÔ?\Â`FuZ  ‰¬J¶ßÏíŸ/QÃ*›i"&*Îÿá%í?R¯Âþ> %n[“=~ÂôÅ)ÍÕ’êñÒ®¸ýÃwtFzÇÙÿü[Âêó×ÃA,ØÚ}ú”Ù',ÿõ¬XM!ÞúmËÉïK.×\ýóë81=¢˜pöû_Àö–Íë£/Ÿá··,¾½EŸ‘‰Žn~þ-6Ìÿø#2#ñÓ£ò»n™þ‡_#VïY/$ÕDQ¿¹FŒ¦ŒŸ?FXRSNó?}C×dd™ˆ&ûÑ”l’$ÁF¬f~:CÊT §ÉÄÈvgåˆât Æ5MvÄ’Ô¹µ!e\/–ÖlR:fáé.ç¨ñŒl ñÆ"ó =Ì ÞGé†<$î÷g)ö‡ýþò57ÿö ÊAJ1=ª‚Gé )Õ‡ÊÑ20îÊ6ƒ ä§g·fóê‘eGècÝÏÿË;ÏB¼é!PÍŽ8¶tEïu_ Sá#"è;#îcêAøÄõwôºGU¿·˜UËŠ£6ÿâhâp´ûoÁË#mñ]£ØÇï?U*ÅG‘#Çß•zañ·|V½G”ªÙßu÷¾qWƒ}¤#½ƒ ”»n’醻$Šp$ßIÝ÷¢3_騱î7Ñè£t”µèAÝÍÖÆî‡wØm›ÌnàLNP¡¡ï$Õùúšn¾ÁZ‹ƒÙ{úuƒm<ÙÉáM’ê¨d.k‘(ý¦CYîéëïY®÷zÉøÙc7*ÈŠ,vZ§èiÓâLê ûcà¹L`7o“Y±ÈÐyA0 ^ää“J8úÅ—ºÃÞvÌXˆÉ‰Á5ô'«J±Ðq›6¦Ýy‹ ì4ù8Ýk“Sßâ‚bðhй¹ÅX¡Â‘M§ Î&ØÍ‚æzE ¡ ÊÙ¿Zá‚ÜKz„Jôà#+U ðé ¥®·õ…ÅT9º1Ù2ËbÑÛ4ôkƒ®* R/÷zÞû8L)DÔ8–³Úâ › ѥ¬·‘‡­Ô^¢F#ÊQÝëJG—ÿ¶AO§(ßcjƒNW³²1<"DNv<¼%á®S<*÷cW5(ɧ‚é1 CcÔC$H¹– H•ºu©så}@å:êv] Tk°Æ¦®uœ,ˆ¼Œx½åc¡<cW|ÐHå¢#ìÖL ¾ÇôU¢§3‘vë“Ð:iNmê𗑸d:úÅ6Þs‘PŽãª±¨NëwØuåŽg›¨Igã©®équŸ:Ïá‘—ÖM±[÷ÒŽá cà‹÷I +Ñ¥"8‹·"RXúÓ„æ(BÛœŽ»cÈŠ YHÚ«ú6PŒFx[ãŒDg×÷øÝ7M-v‰¨RKl»ÅIVå÷4ÏnqÔG©Ê¶ è¢@¨€ªý¢Æ™D”ÎÐÒÒÎ7ÈÆ-WÃý<‹”d…ÆÖz2Bci®o1‚TObòÞÆ“•ybLÇÔ½b\bnWø´~ >DMnq1Cú†Íå:N˜|€¼¤:aK¼Ì¢D«ïéVM$ )mÙt€RÑ*t‘8Þ r…­;ò‹3¤­é·•ïdHð^F©ÞíOŽÖ2E½kdZ¯ã$:æ¸ÞGÉ—<êÁwHõ½³ŸßÍ`؇íÌ‚ä°"±(¶–~]G¾¾³qOŠqÎqêRVèaS'E”ÅõH¤ÉûiÊ~Â%¤À®×4óm #ùŽfÚâÁ±÷Ç:«»ý:Yš²<úâTi×–]¡õ?4Ðø®§xòŒ“Ïϰ›MzXÂ8Ö;]ÒûŽcêÅñIæ˜æptý]¢Æýë¹§½Ýýý‰c ®³Â';Ð÷5Ó©È$v½ŒX {è´|÷ oŽ»çÈb€ÅQ1üÐ!`GC*„°ôËUL÷GJ÷å-ñôéœýð‘ùw>âI9ùõK”ïÒ¸ò¾š}\µkì¾0ÞýþBÅ„¦Î¾Û,#ê« Ë’Ðoiç tuJu>¢Ÿßà¬@—9fµAž]PU°þö-AI²É)Å4§»\R<9Ç­nè׎Ñ/žã·×ôý€é—ç4¯b󦥸AïQ…¢›¯(?¦˜fûïßn;Úùßv¨Ñƒ3ÍêÏ?áƒÆÙ@õtuƒ£3¦¿8§½|ÍâÛkT‘Ç1©Rä“ã§#º·oY]vŒ¿ú û†íÜ •B¦‘7m:öã‰F±–¹Äm·ô‹-¦¯ÉÏŸ3}1býÇoi;Eõø2Xª'SºwoY½ÝR=º@)Kóþ9šQÍ*ìüktBN6©{0mKœE OÐô×K‚ ˆrÂäåSD¿¦½Ý §ñ{V…Â[m:‚W䣈ò&ß›¸(ïôÒ}<Ùõœ~Õ¢#‚o±Û@~Záë5(ñíšæ¶eüëÏQÝ’¶-<žÐß\ÒÝvdççd™aõí„lJy:Ee×Õ„ãNˆˆ­Ûø¦UUÚØBLø !m,‘ÐÃßli/oðù˜É‹S¶ß~Yƒ‡lcÈgçTçô°Äܾc{é¨.Ô?½C§è²@hO¿X¼B†ÈRE,à¦AcŠóSD¿¡½¾%ˆ’lTP_ÞP>}ŠêW„|JyQa·6×·,¾y‡,†à\ä…{¨ž_ú5õ»šòÉc„Û²}sKqñ˜bäY~ýNH/bp’ ¨ñ”l˜Ýõd‘¡_ÓÜÔ§˜›9Õ‹ç Î*–þŽ®vƒ"Aœ #˜š~ÕŸŸ#E”´y뙊El8¬)®c±MÃ8ÒÞb65v[ƒÊÈ'x¢âzIPú`2ÞÎ"Òxª W¯énVˆrSR7KÚµ£¸˜¡|Cs½$ÈœÉ/qÛ[úD#ŸÍ(†’öjNõüZuô½FÚ íÒ1üì ²¿eñíÙé)ÝõœÉo¾@´ š[ƒÌ+ªç§Ð.YüÛäø$®5­%›œR‡ÈOÒ§öý{Ö¯wSjã×¹(ù:&s†8•ÌgL~ñÚ–íëwÔ·+TyÊÉ—O)OË?E^ùèÅ„Í7?²½\D#ôð„ÁIÉö§×x•m›±À3Ë åóϘýúq4å ®®‰Á)Ùì‚,sl^¿ÁZ mGöôƒ‰`óͨN9ýís01.<˜žÅ×oг3¨´óžñWŸ£UÍæÕ–Á˧(µeýÍ;DYL~õœæÍlnZtÙÿÞ8Ô`D6‰ØNvš~ß㚸®ÞñÜßcc¼WggdA?ŸÇNöÙ9ù¸ˆfî#C©íÕŠlvŽÎC>K‡H!1‹kÚ¹£|tŽÒ!¶qxЕF•×{¼W7•1|2 ŸvÍâÏ?aC¶¿Ç2îÊ8.¢ƒ…l:¥BKÌ|N{½Bdú áPy9‚Ç6Åä.½£;ý¤V÷ÅüϽþÿŒŸñ©ë…ÀÕ j|ÂèÙ)¡ïRHï>Ñ~¨st—lqïš,J|¬½Ëv‡ØQsâžžX|„rO·"£"ø£¤ Â_(>ïI9ŽsšS—QÜï&‹OÜáäÞ„ú{£àGîwöàÄý[<Þ#ò’êÑ)Ò™ƒÎ-¡xdr<7-ý2žœÔ‰{ª©2ºè}×`ú™E‡½7&…ºåQȲ@¿î£¶R*"ù*!°ˆ]ÅüìLƒ—ÕYEwyC;ïÑ£<ÒÜœÅöŽÁã ²Jà}4cº¦Å¬·±s3STŽõw—ˆ¢À4=ùt¶Á;ÍðÙn{ËòÕ":¡E„Ñçã)åDÓßÜÒ¬-ùxD0±û.…D²JâŒÅÜÞ˜R·,~*‹³mqÎ\0<+¨|C× òñ­%ÅÙ€öòŠí¼£˜LЙ§[¬ùˆb¹À!±ˆr-®XßwÉßéY…ÎÁ¬êx`ÍKÊÉá:œºÍl:DWšn»üÞÓa4B…cH(´ ¦¶Iƒ"#ø×kò±ÆÕ±àVy ½©)_<"†vi¢¶Õu¸N¦ICK»XRއ:¼³‡Øë?mÓ”"¯ ‚í£y3Ó)ÚÐ袈þ®Ç¶¨‚| h®oqA¡´&«¢4D¨œò|B6Î鯯in;T©°uQZ#”¥_o>‹µŒæ˜0&2‹Ï¦3„ ÉÊŒf~‹Ðò\¢NNô8#(ϧ¸ÅËŸnÅ ú¶r‰šâ|‚ï6´·m,(…ÅÔ=z2%Âæ‡7¯ÉÊ2RL¼@å1þz²Kk™Pš`·´«Žl<ÄojʧQ¢cýêš  Êqc¡S‹-x“¾}4ºud“z¥Ž§Äw-ý¢t¢ê„y}D¢Cê˜Åvö^þÂ]ÂE ~‡‘"ÐÅŽ©Œ:lK·±d£!JÙØ•,*Êaë{„¬™Åµ 3G·®!l8ùí Ìå[šF:ñ«=j8Dgžúí A©˜ðX¦ Aˆ’@Û5˜Æ¡ò•#N?Š˜:2»·ôÛ5:eøh@óÓ[z«)¦²ÜÓ\-г ŠÒÓ­[|×a{(ÎOÈ ÏöíUfô«†áÏÝŠfi"§¸"\ÏöÍ-äù@G–»ÈÉO(µ×‘M­1‹ͼŽSŸ¦žB£sý@=†ƒØ¦#?;gü|FhzÌjE·­ rÀèé šë r8FIKýöÓE*‹ÈKŠªÀµ-AF߆Ðy4½ Å£G Ïñ>ï61×ÑÝl ª@ç’~»Æ9A"%y¥#ÅE— O#Ç;ºÅŠfÙ“ßÒÍ;ªÏ(JÃæõ–òñŒ¬ðl_]%n·¦º˜ÒÝ\Q/;²AEvΣË6ä­EKØHr âašXx¨fH¤.áSòp8LèÂýI~À»#âH5ª¢ÔCê2Ó «Š|R!¼¡;hòq‰ÆæS¿éä "Ÿä ÃæÕ{,JlÛ#³Š,„ifû)Ä ^ž»©Œkkú\8Ò@gú.m'pw¸…ÿO/ ãÃý˜áãQ ¾à¡¨í£®äGº¥áë¹£ÝÊ=~æõ‡¿?ªƒGu®¸×µ?Òdß+ e&è Lmê8Ìäç™?4A¦x×<¿+ÇøK²’ R÷6’Gìö^¸Ë‡b¥}äráoò\ïù€áÓSd°Ø>¤$ªÃ2jÅvìãø¯ðA²Øam)Üf•’È,AU bGíÑT°¨aÆöÇׄâ„éç3š×oq¡¢˜@ý¾føtF·ˆ¬lD žÉJDnÛÒÏ—¨ÙÃó‚þfK`·†ÁóÇä•cõÝkºZ ß9x·7•ßC~ÂÉç'l¾ËðóçØÛKúF¡9¶Þ G3†OÇðí†æí<.ðÓ)Yã³ÑŠÐÔØÆ"t¤×xr²Éßm1ë:­Šl4F³ÙÆx–¡ó˜~e» dÆŸ=EzK0 ›×oñª$/‹X ‹w=šìÛ*†OÇ4¯ßbDê‚ÑË3Ú›w˜.CKP%åÙUfÙX×´—7´u‡®*dd§Sd'D‘É-"u7ù—!Òè®æÈá åiA?_`;¢¾W(0kÚ•aü‹—H_³ýéY–xÓa;®2|Ó &3FÛÞâ՘ы'H¿aõÃ{Ê'OSñ߃˜ž·ÅµUhlÓàÐÓSªÓŒîòŠúÖ2þÅS„]³~µ ›ž r’ÁÑàDÉôËçdÊbû¸&Øíšöf‰i åùcŠi‰ëzt5@É–ÍOï±N"¼@O§³¾ny͆neÉOGø®&t=¨U*º›ÃÏ^ dÇæí<‘.$®ëpΡ§Ó_¯ É­eê:VEùô¡_°úñ–l»€Þ µ K =дo¯ñÙé·lÞÝÆbEK²á”áã©ó{Mþô%,ßãò1£Ç£”)±ëõû2« X| !"b…ÎPJ òãÏË ïÒV2%ªvóm”¨€mL˜|ñ‚bšÑ\nJQžŒÀ¶´‹oz\g¾xý–í»9ÁiFŸ_à›%Ö"ÁäfÐY ÉgS„í£ÂÄ„¥%d‘ÎÓ\¯“iö„ñç¡Y°þá=6è;a‹¾7”Ÿ0|:Ån[lÝÑ/ôÛ™,¦ñ _<#ÔsºuO1;§˜ ‘ìz*‘ã¼ysó%'_=¡¿|G³¶Ñ«$®©Q£3Æ/g±I—‚¸¤Œ Šíå"DGCl»Â¬S×Vø=ùFe’@Fy>Å×KÌÖ!òŠÁÓìâ=«×[òQ‰ï{¼µÈá”áãn½ATaÓ ÊŠ~~ƒœžQŽÍO—ÈrCŸl)Ü Sùd À=)gêâžžF¹šu‡×)ñ¦»ÛA¤ñ,`75z8%?Ð__ãlNùhBèûÑõ÷ïÉ?Bv¬ÉЕJþµ-ÈŠb"YÿŠRz\Ó_¾À­®X_Õè|§…ÖxžŒÒGr—HèmÚÓö)'ºŠº¶Ãëœp.Îâœýà”)Â'´­«`ÂßâúOÌêÿâgúÄõ"ví¦£zþŒégg‘Ê'¢¹?ˆÍæÓ×ß¶äž¹ïc×?ØéD¢VÔr׈÷A”÷ýS¢@ä2ò­@oþ2uäx<¿ÿ}u, ƒ»«ÉþXúþiTmklçc*ÐCÃQˆZQî%ý;Ÿ‹à¢1yùå[š«-j<"«"ÓnjÌÖÜ_‘¼!vFÐ;ˆi‘öº(±é;B6aü¬bù§ѧÉ$†l¾…˜>f|–³ùá=r4EgõUÏøóÇôW·8/‘™Çl[d6"JlÓм»E_0¹(hÞn9ôÃèóç”cXüñ;º.#Ó1/8‹>êC ¦LŸY}ûžá—/ó+ú>‹ºÔ¾!›žQÎ ¼qøvK{¹™#˃‹ÝÕ-½ñQ_gm”ø€È*òQM“«:I]4Ùx„.§îdÇüO¯‘Ó3X/'gLžŒc¨Û ÄÞ^²øîY 9f!Îô1‡D•C²ŠìaÄ=™Œ¼·Æ!K…Ä÷ÚÛ-²(£ôÎö¸>0úâ™´´·-"SdÓ!JqffK»1œüúØëwÔ·¤®<ŸúÓŠØ•_µÑ?Q–1#í‰Þzò“!Ù@ÇÀŸ7oXþ8G(ÐÓsN¾zŽÜ^3ÿók ÙQpaøùg O šË5B¥CÀ¦1‡ÞKªÓ ~»ÆA9;AjÈ òi\GB½bþÍ+zSpö»—t¯b³p(}hÔåO˜~qN躣¾™§_¬ÓÚX +ÌæÓ ”ôÛ-"+É%ZõòUŽ7-ÁFãqõò _ÏY½Z¢Ë2r£¼b0›Åƒß:TUÑÞ^B1¡(ÚÅ™W‰<ÖÆ{.äÃ5Àýã¡ôeï A¢Ê*¡äŽ›z€ëq}"CÈYD9¥%ªRqéÙ°ùé,ýbÅúÝ‚l:!SocÚ±È2ðèEå˜ÿñG¼*R1ûý¸ù{–ï¶èª@ɻЄã˜/ï$ùd”|ñZc× šÛ B냉ð>³ðˆa“Š«Ãñ?'0áÿVÿ¼q”g§“gM§ˆ‡%=Din”püµ×?Pùí0oB€™Ã3þ‰‡ûèä'4˜å gB<õþMìx".0½G–Õ^á 8(}´9œFh»HÑ®bž‹Œüæ¿ÅGÑÁ›ŸŽ.u£¤8èÀ‚¸ ÕGLC¿\s°oxHˆNöd`ó-® èj€· vÛ"dð¸¾Ã6U ÈÏ&Hˆ0ykG–³i©ϰÛ9í ggT§%¶óÓa[O6!LÍöÝ==Aô5Aq,$Áôñpd9ù¸Â­6Øí:MÈ™šÃ ÅtˆÛ¬1›Y•ÇÌÅlF1R4—KDVQ^Œ0Ë%íÍ* Œd,w³9omùëàdî0ò¶=Mõè4Æ]ëXÜVÁ³×–›u‡È¶±)ÌÄâ ”N]‡51*:dt·7´ó-Ùè4~?®£Ÿ¯£d--ôÞ:ôô„l‡ˆCàm“¢cUrîËx@ôÉ`çB|Ö1xKŒFvLíMÄxIEy6%d¢ûÛ®×4ªÈ°ë-Áõá†føì] ê×רÞE" ‚@ T§1s½ÂÔ5¦…Á“ Tf©¯øòÑ9Š„Ô;Ó«ÃYGðÑTcÖ+Lí¨Ÿ!\M· §#0=ýfƒ÷šêì•Y¶o¯‘ƒ)Å8§»žC6@Ð^-B t±jÉ4„„YÎåã ÊÓýÍ-A³1n}M;7ç(ÑÑ\ϱ½¤º˜ÅBA1ÚÍUL‘å,w4ïo2Êž„ŒÁ(­ˆZVï"C–ÊÓssCß@ñèá:’lRb–ºù†€@ǧv]ã­Ã›ŽàÙtJ6Ðô7sB^‘¶±ÛaH¦Ä 3²A.³½$Àw³ÙàÚ²] ØT˜ƒÛ6ˆ¼"¸[ÊGdE ~w…—%ƒG3¤0´×éò»ÂÞ¡²‚l2ŠÆÕm‹wR'²AF¿\aƒ ÑûZÄŽlVÄ.í½ !R¤q*(‚5 rT;õǑ;iÒá@|àg Þ¡ª1ÕYt\³­#?  JbæK¼,Ð¥¤¿ž#Š(¥ê—òÙ )Íåœ|vаýÖ¢'D°ø¦§]qDöÉ” ÷aGQ‚Û¡ÎÆE)£ñòÎÞ™r"Nìqt¾m1u¥=. Ç#ô GhI}%wU–¶'ªгQìæ…ÌwFÿÝwëöA>Q;Ÿ|ÝD¡°Ë8RyA0”†Oføí’nÑ@VB0ø®Ã, ò“"Ò˜–=BĵIæR(›mca^œLâšÓò“)Òšù:Qµt”쥛éûîßWïEÜý=ÏRÊw™&˜>Éâ2l ,BAèÙ쌬 tWË„‚) 7 ò<¦ÿnôpDq:¤ŸßÒ/šxà Ñ"D´£ð´7·ts%t$™ǪËÝ}IQ.‹£â?Õ'¾ëAÊC:Rúžñëƒ/Åaù æCííÏ‘|¤ý³ÿÌ¿çz±ß,Ûé®6L¾ú“ç\ïî…›uXïE<óÉï×w ¯?î@ÿ¬ë÷B`úùç"/tÏJå`X ÞÆ p\|‹èÚm¶1ðAýNÅzïððÀõÞa¶žl2Eåa¿(}`:Üý¬{h©ýf…©mê@k‰ïŽ&vh —’ß‚‹îÝQjõ ®óÝg/˜Š1³ß~rÍì$&©ÙmƒÙØÄˆõ óÓFý­P{Ñq/´Jzî•çx»Åw™WÙÒÝ6èñì†nÝc»–lzÁðñßð‚@ƒïªT4W+¦÷ÝÛïY]v`zª—_pö›Çô×·t75VHÛ°z}Cv6ƒz Ù„|œ¸zE·ìÀõxY1zv‚[låUxêËȆƒ€k²‘ |³Á¶U ÁmÙ\.ù ÆŠÛú1yÌì7gl¾û‘ù×ïY†Ì2•غá(eRHïŸsG„‡(&œþêYèho·˜.Pž'^qí‘Y”3xã ¦§ÝÔȬ$Øç5çgHÓb{Eùô„Á£ ›¯¿fñãœÑgŸ‘•9¡ÝDÔVUÅÅ4¹t5D•zïì]5ãûg6¦†yõ¯Bd1€Ðà ¡¥¿Ya­%HïaúËÏ—´ó-¦6ÛDŽ. ¼©quC·^Ó›Œó߉ö5‹Ÿ®°½G ¢¹»ëÑŸrú‹3š®p¦ÇÛ†fa8ùý¯ÈÜ–ÅïèkG9=£˜È¢¤˜±Ë•&<ݼ!n»Æ4>Rë6ï,ã_0xzŽÝ¬#Q¢Œþ ~§åiu¨C¬¡›o#}GF–¹ïZœ]Ïþv˜žqö»¸›wlßÔˆj„m4b¯²0ùÍ#h7,¿½ÂK1½ x̦¶aFÅi”Dx!ÐUŽ‚~½ [ÔèbL~R¥@¢×µ‰ t¯ù|wð½wÿ¸Õ!ù›Ž%™Á#D‰ÌÁ5‚ÏÉ&šëw‘¬4(¡sèé)å4¦">ÒX×^¡«‚~½BN¨NrºÛ9ݪ%›L(fSòqÆ ¤cùõ4u@©{Zî¢WEgç°¦OMp’l2Edì©åæöŠíÛ9"Ïþ=QÞâ÷CÞ]H£lT!ðwšÊ{£øðàaƒ\ø„&H<¬»sÍô?cŸŽ&÷”`-B‰øâ;÷Ãx(*ô0.|‡CÔù2~Æ}™Ž5ÿé‘e/ã¢h(X³ãøYõœ¹ê/3êv‘¢ÆÕ B‹ˆÍ1=f“ñ™ðÈ,'—Ѹåù@ªlбÞųîH,òá5«5¶î™'ìãR…{§{p!5Áö¨Ál‹©Ù¸Œ†/¹Â·=²*€.*B·%¨)£žU—9ÁÙ8Þ_n“I&ÌBk‚é"K؇Ôו£”£¿]#ªßµ ¯"x?xœq±Cå|Ây|gc§ÕZô¨Bê7m7+‚*‘Âl@[›dòØF­«À½Ã÷ýB©Ä1c BÀ¬V T!°›”d¦uê ØýVeêbXä "VøzK¿\d”ÅÂÁÇ1åN×îÝ>ulÿéò*‰¸}ä¹Pñç{¢ J¨œ|Záë³íÒ{R.½GJd¦bˆ€”„®Çõ&Ñ}tïëœlT¼Ã{p›5‚‰)]*O…œÌcj Jš¿ºÆ »ðÆ ò\M5¹NïL)œ@–1Ň€”šÐwP”d•¦Ÿoy4±ªÁ¥€ º÷ d5@Jƒ³šâd„¯7ôÛYäø®'›pëYÐUNðŽ~µÂw1Zš "Ó`S˜MQÆâ®o±u‹,*T.1ËžÃÚ¤ª‚l2ÆoÖXÙd‚°}Ôº÷&¢Ýª’`út0U`®mE 0=(0«HŽeÆÆ U¨a—°à÷‰{f]Çuò(LèÀˆš³oN$ÒHèí!‚ùck«HÆòî3á—B1¾=ÏÑ£*F¶7M ˜Q*…Eý¿ïÓs#Eìvû]÷^%J„#yãRÇkvqö1nZGS»PÕ¸ØF4™”ä'c¤ˆ÷͵vÝÆp)£üF:ÌzåZEM³ÆÄ€¬›qÙt‚TQJãËcƒEVºô·ôtÂΗ, ¢ï»  —&Ä2~Þø½‰]d±czGè»È¢È&C”Ž®Ù6‘,"Aæ9!™zóI÷¥!X̺A*BôB ¤T±àÝ}w;±äCê„D7úpRÌk¹ c÷ÁNìµ%5IÝ’ŸL)E‡ fÙDèîÝ ž`bâꮨöm‹ŒP:6B¤ ô«-² >œù(9w†Â¤¸ûZ0ìQž»ßIHµ[Vâÿß~·D©I6"v¿äCNËû^8Ó'ôæÿ…0v 3v'èHΜE g\üÃ/Ю=ÄÛÇùÝ9)Ýlþ[Dy?„± w£¼å*ïúŽnÞ°IQƒg–«˜ø¥Tê’ÆÅ_”#òñ`Ÿ„«Y-qøAú€¤!dÇe6x#†‚;h¢ˆ(áö2‘~¹ÀÖqüÀ~½gLä—"pMËà‹/9ÿÍ|o1×o¹ú§ïºº‡Æûðgø¾'›=áü÷ŸA»Ýë§ {2ˆ”ø®£Ÿ7{óÓþû:ú.eBš&"°â³ä@Äxtp{9ÔÐ\^Q~ö%Ú¼g=Wœýæ9›¯¿ÁÙU¶ïo)=GÃðË ¶þ7zÂhlÙ^y&_=ŠûýâŠëù+ 2]Qžž¢«€mjðÛö '%‰ý¢G ò+Üyð’òÉY©°]¿_D£ŽwM·°“œÍÛkN~÷²ÐaØÕ²Âo¡8¥œXVß­™~9ãæ¿üKŒ_Õ2EÈ HñìÎ¥¤FÀ[¨N8ÿý(SÇÄ®,²c½õØõ’ÐÚÐ/jD.•C7_`ûH)ÏQäØÍÔ€ÁËÇ„Õ[®þù{²“gTgDp€ÅÖë(kPâÞ7çsª'¨N4f±Æt’Á³Û^cúŠP¿Ç•ç<ù_¿¤{õ=×ø¯ŠÔgØf¿û%ÃYF oÍÛk‚/@4Ñ€6*‘º$)§%Á·ÌÿåGÔÅcÄò’pò„ñ©çíÿç_Èž|Á£üÙ×t‹%ímKã_Îèß_"†ç„ú‹×†áy•ØÁ3hWt7 ÈsDPèɈöæ-íÂPÍNÀl “Gœ<¯Xüó±ÀF“ÏNPZ ¤§~{ üGEõè·¼¡ßTîX¿_sþ?}Éò¿þ+Å/~àòôµÅÕqª¤Š!ÙÙÍšÛ?¾"Ÿžb– , e(! RÆñ²±dE…®4B”ˆÌâ{Éä‹‹ù7ê­Dç‰5›Æ«®nÈΟñè?|‰»üž«?¼§zù w{Iß:lk™ýO¿…å[6ËŒÁ‰¤¹Ù"¼ÇØžlpF9ÉpÝæn×m÷n{‡LÈ'C|½¢_¬#˜;n)(ȬV4—+²‹ &Ÿ=Æ\½eýþ–êÑ ŠÂ³üá'(FhíbÃäïÃôéù¾Ãù’á󡳘í»Ý"²1z qÛ-²˜"s‡ë[Ú÷sò—Ÿ3š:Vß7L¿œró_ÿ ¯f Φ¨ÂáÚ×E9ŠÊ$²,(¦eÔÕ/.¹üÏ_ã‹1Y–}°ÝçÑ£òI¥ìBÃ:ºÛ%Þ«;ÙÖíÝž&"»>yg̪fü›_qòbJ»hñõŠn¾F–¤0l/¯Ðà Ó7ó,N‹{C6Râ ÁGÊÌdñk»)º’ûbP *²¡¢yý>† O³qœþþ+ e!W4oÞÑ®\$G‡>='Ë=ÝÍôUVÑÑÏ—´ËšìdL&åËgH·äæ¿þUÒ ï5ƒ§O –|…œ3|4@4¦î0똮*óœâ¤$Øž~Ù\lÎÈ\`×ËhfW"¥;–È"Ã÷úÛÖY¼pþ¿¤Ì=¦ëYþù'¼×QR–(Ç× ÊóùPbÖ5ÞJ|×£§%Í›·l—5º,QA «ñ¾“þ L¦ Þ6øÎ5TïáJ½F Jð ®÷)¤íJ+퇄ê©ß.˜þî—¸Û×,¿ßrò_QT=‹}ƒí-²SœNa‹Yw¨jŠšëKꛚá‹çäÊò ƒS¸ý/ߢ¦Œ¿xL¦Z®ÿð-ÍÆ£suTã…x;=¿ˆ‡öà¬I„R1Ê{S#´ºÛþ«Êá¯Ip?ðßrý¡¢J~òƒ)P™~0MéAã§òÑ?E—¸{Ý2ù€íAÒ„¸·¥Ú\g¸cì gßµ¸>Ä¥ÜgËãŠÔ—¿æÞùd<ûK7<¾'Zœ‰rŒE¤Ü¿²ÈC3:È÷ñÁéeöÎUÄ@ /$2x‚Ò©e£ÉaÛÞóßÞ½÷±S&ö‡M!u”o»I¢1VWÊØÕÇ\l­@*T‘ú‘bªDìZ–YìÔ ÉYäs GѬ1_=v§ö¿t(”…:ÄçJkû¨KTj°wQË}œžIÔÖÉ,‹\{ëb(BYÄXð¶O“w¸½™Šòÿ³kp±ë·ÿ!êA‹!yŽ,c9ô®6È*K8´hÄÞu¤e–áêH,‘JD‰}‘ÅP>vµt•á:‰ yж-Ëyk¥J÷ÌaV[P8‹,SðNY¡T$–¢y±ëAeèau«„ˆñb|ô÷÷MjÝQrÃ)Ý×½ëÌ‹Ùåïí‡Ð»Ò÷¥1 )3ÁÆ2F¦p2yì Ì(—"• Ô¾ß?3ë†?ið½ÿÅœVú  ï‘z2BTêQðK}^ûðE߆*ãÿ²ZɈûWL¾ÄPZð1‘ã#Oó=WSàö'ÿð5㓌>E¤H"þ…0ütú´ßøc56ýºHåWŸÿÀËü!–NYM_u„:€QŸ(~\¤òhÁr¿9ø„Ú}¿èp>©ö牤Jñ‹ív Ý´¥¥?½ûM7ø™ŠÑC^î£c”ҧεì¤ûíšþ%À1xìÔ1Œò Z)ñÆÆàke*>x“>y¿ÄP7¸ó§œþýK´o¦÷“…Ï›º·»Èh; „™‹T>ö¼«û±O ß4Ä î 6f–°_ÓoyÙ}à‹ ºcJE¿ÛQ¿_ãÎ.p¶Ã÷'ÿôê¾Z\¥H}µ#jEõöfr‚޾±L÷6Þ7L^]Ò¾GWuüªìçÑ9Vn$صȀZ¡ì”ùï.hÞ¾Å,žaMK{ˆ¸2§¹zKu·•¿/›rþ¿} »-]%êqì=qXXä§èæ–ÕŸ7Œ^]bÜÀët·ÿú Õ>IZÕ2û‡¿¿ç¿ü„ʲ{e"ª’³ú’Ìô„xÜ Še&´¾IÄzK·é°³™´ÞÞÑì'ÿý”cXýñ5¾O¸Übg'ŒŸ/„°¾æúßDåSBÕqòßÿ€éT›^ ÷Sƒ?¬ð¾`ñù”Ûÿû[ÜåStØ{PÊ_zšã†ö¹ê§9¬<³ß}IQFºm)ÄëšÐyú}G{÷žfS3~ù9³W§ÄêŽýwo9ljHâÑM¾A3ʧsTè𠸉¥ßuØÒÐo|]q¸ºÆMçøí5^0>›È‚ˆÎ tܳúÏ!?aò|_ÝÐzº}ÃèÅ &ç|ÓÑ\¿§ºÙ Š‚Ñå3¦/NÑaÇþÇ·ìÞ7OÎñwïÉžÎò³ëû3ûë-ùò Ù(ºH¾8Á•;2B_(G顸T?¿'—œ|ýœæíú}M³Ûƒ3:Ÿ£¨¥ $‚ÎqÓ )-žÆèAÜȰúÏïØÝ4ØÌšV *¾¾ ‰§Âží+ÆŸ½ î·Ô»Àäå’æÍkª½£œš«5! WÞ ŠÅ…XÒÚÃÐBøøYŸ>ÊpDˆòŒ4#E¿ÙR_mÈž>cr.È<8Òˆå߆eÃûÿë{Æ_ÿÑ$°ýá•MˆíŠöàÉG}Ý-ÎÈGší?Ðv9—ÿç憎û†8}ÆÅ?\°ýæ{6ßÞR>}Jùä Ý^sûÍ-ËúŠæ»ïØo:LfÑÑà– lî‰>#ùíjOvñ”Ù“‚»ý#]”Qú¯<Ð!`ÊÙb$çÁW´w›­9Ø úVžÕGs÷¯&‡Ç‰µ,ü|Õ³ø‡ß3¹(ÙÿøŽnS‘?¡˜6ßÜ1zù‚|l°…çúÿýŽÀŒÓ|JwÅúÏ·ä§g¸1øCý êÓ±&ABÚÚÚÛ[š}âôÿ;L¿¡º;ÛHþä’Tݲýù7 U=`c#Ý¡gùß¾Âv[nÿ|]œ2}v"vªÃ†æý-MÕ€3:=Ÿh±ã6×f‰†FÎû¾¤PÚÓ­×ø~ÈB&Aõé\C6.}E»Ú -¾9‹?Î'%š›:›“-2B³—ùãBùþž¦1åÃzAYC·]‘b‰-<Ý6Pœúý0ÉPh£iï¶LÿîkNÎáõ6ß^aFKlÑSozÊÓ1õÕšÉç/ðWoéEJ=}ÝR>}ÎüÕ9Õß±¿î˜~ý «ešC$›É—ëÿü–íÛ„žÑ«Ï9û§W´?ÏÍ¿ýÙ´ÂZ'Ž#õ‘ 7(Ð^2«¼ÿö”¥ü£)=jÁû/£å¦Šéת­¾¿ØþÒJ<ÞW:¦ÙlŒqê~Dþ±=!ý¼™ú>¯øôbòS"´vRbºð!Sño×ÿ§ŸOÃv°t¡‹0¼o Tø—õ–¥A µ¼xpô0Q¤(añiÔÐì¥dK|XýøRJû–8l‰‡ZÝO˜>ú/$T‘ öæ¾´cP>vŠ|¼ ø‹×ŧðƒÒôûVEú·fi,ûÐKÅžp´÷ÄÁŸ<“’:† q8–_‰ß=4µðvD¯0…„®` K<ÔÄ£Jñ‰kõ¸Û¾·"iñ:k“á&è¬[ ?´òP7Rß­HDeɧ#RuÀYHj«ï=“:³òP;x´•ÎÆ$ÚíïÅ{Oð˜é §Û¸o*³Ù}T Ô#oyÛá·5I‰?“ÚDBï…:+HuEßÅa1*ˤ˜EôÝö0\Ÿ;)P>=‡c4!I 3\©hV{”Í1N‘¼¿/§I¾GÎYúíV¬ÒNŠ]üGáÐÞ'ïKÀ”Ð[/ ¹(‹xQR"z”sää¨Á©3ßµ`çh2)HHè5õâ5“­ݦAg*ùA¼RÄQ¢\C¾&¼0¹EEQÆ|?œ×®“à¥nw ø„±n`gËóó¨öõ[AAêäï‘…*öDcÉF#ÂnN:9ÆÖi¡I‡ƒmˆdsk,n2}³ßUŸ$˺,p£\î}¤VÝW7~µovZÛŽÐŒ³R=zÐÂ…•édÀQ6óQ=š¦=zæ)ÁCÊ"‘âÀçž¾öhk°Y&ë¯Ðã½ÂMGXõõ·˜£CGW÷hãPxÂà…•¯0Tz{·òÅX8¾Å˜|–ÓïöôMÿªµh' <7“5! …¤í0gè;RÔØq!bøö ªãÑ®6<5ÒPe,…Nú~³ýÃó[ 6A>£õ¯ *ŽžÒã}ÝyJ 7¡¼—¢í°c)Îiïöè<—ÜA tûŠ” ù|Lê¹–´C[ù›ÃñJzPPåXÝ¿£ÒÑ 9T: G/Ly7ŸBÓŠY‹—œD!Mú‘‡œÃà!?c’§ÝT$m0ÎHÞGY´ßtÃsÑ<`Ûâƒè¥œô.¤Þòe¬´LÊURÀc¥¼I¼áfô3±ÎIDЬQ™ÃMKRSÑn*¢2Ãr°æ ý1Õåã¹>†õ‡ÚìyËPîul•ýà…9Lƒxì{ìÇ\© ï­ÜʽÕG™b…@Œ ;*p¥#'›É¢uLJNïÑÆ ÿ7Áä)ïQ2U1"†hOivR`,´›ƒTç„•äó)©ÙÓ¬ t–_æJ©G×õ½Xøˆ=*P1}Zþ¤úñšJBOŒõèñÂÀ›_éÆ÷ÿFl[ÜÅ3N~÷ô^q#)Áÿé{š=ƒÿÃÕ@2=*Ÿqò÷Ÿab3 „aœ§>­@ÇÖÿU ôo}^kBÝÃS|ÄÓä£Êm>¨ïý¤BüñçգƼ!pöºÕždôpV2LéÍahÇúkè£Â¬ZJúÍŠrŠ“ñÐ.—yãØé›Ó'g ‡ Ý®"!ÊÂF¥ø!šzxx'ßR$µÅËÏ™ž(nÿå[RV>\WéÓAËØõØå‹/Ÿ zñôûNü¹‚ø7œ·_)зã8S+|Õ*4žë;t·“ G¼Á#Ð m~¿§ÛVƒ½('õÒ —T;bù‡/M#·ÿö ]›3}v90šîæ ß ú-¶í¯XÕ½ôÊ©m_7Uìñ$Âo¯þ9óçwÿòjvÉhØý´BiM¨`´àä«S¶ÿúGªÆròO_‰Úûç×ÔÛf˜4jÆÏ_1¾±ÿîG«=ÙhD»©™ÿÃï™_X®ÿï?Ãô’Óß°ýótmÎòψ]3Œõ†Q­ÖøÆ^À$ãX¿½#†œñ³Õë×ÔÛ@~zF>3tï¯è*˜ýá~ûžÕw·Cëa‡™0ûì¦ÛPßÈÏÏð› j4"Ÿ~yMµjÉŠü¾-.t5ÑN9ûç/qtôMKýnMLŽÑó%ø¦_±ù¥¦¼\·)Þ19¦´´w[Ìx ¾Bå3èÖ„lÎâ³SßÿŒozo˜¼zÁh¢i·úFª¥SŸäØçS\iV;Üd‚Ñb†4·ïi6=óßÉärÄþû·rÊ‹… ûã‡×·˜Ù)³Ï¦Ô?¿¡ÞFŒ†âéò™£zsßW´UƒÒ22A1ùì%å̰{ý3‡«ŠÉË—”'%ÍõØ“gZú]K»ÞÚírúÝŽ¶î)/Ÿ`MG»®)Ÿ<¥˜%ö?¼Åû‚ù^aÒa`¶ä¥%t;ï-\i%Àå=ý¾—ûÙ)Ü´dÿýOlÞîP)_§\Àæß¿§ó eÇÌ?;§úåb¶`4ω)Iãf#Ö¥stY’BEwWaç'¸2qx{…/('†önC[52j/甋œ°kÉNfÄÚý»åg/ÈMËþÝš¾iqóSÊ“9±ÝdSÜK=ú€É…<Ьf_~ÉòïŸPýø«?½%¿|ÅüósT{Ç;!ò£‰¥okúª¢»Ý‘²‘d´’"¡¸góíÏøè†…Ñ#Ô˜u˜¡3¥ì…܉zX„ ‹›{%:Fáõ*qè'ÿÅØPÝì¨onA(Ÿ.0Öö[ºõß…I¥#Ö‰Ùß¿¢»ú‰Í›†ñå%nêH^ÔðØ‚I©!Ö)8줤ÛnH©`üêD(½Ðeú &Ÿ]¢SRšêú–îÐÑÞl}ý…m¨ÖŠñÓL¦hß¿góã;’ËÉ'3\Y⦎Ã/¿Ðw†ùç/ðû;š•§xv‚+K,{¶ß^£g§ç MM&©d§gÓÑ\o¤ðW¾3’k+v²nÑn„.ÜàÛmèî¶„ÉR.gé6ÚºÅXG±<*|­=;Ãe ´îÙ~û†zëaPhÝâ”r9[Êñ½œ)¶t«5Ñ;²“¹ÔÙßOt団U2]” â}.H[M¿ÛмX¬¬ÃhO×(г)©éÈON¤zV¶+ªë½|ž?gñ»Kºw¯Y}ó7_bT¤¯úF('ñ°¢ÙÊå ¦Ð˜ñ”,«Ù¿­È%ÝíŽìô |‡Î-n’߯“RJƒ°©È–¨WÜþûxIJ÷„h넦U7øº…š­ùÍvÎOYN- ©Í‡bŽGšî1§üÊ&a!bçsFgÒ1…°ûê«;úÌPU{\µ§è…@[2¾\H{Ù£…•R¿¡@§ß j¨ßP ƒ­>Þh<†„?ú¼2Š~[ “Gõ×y‡‹ý—>ÿ+•4~d§±ƒU±ôÿRaDÒoú¹§W¾®!¥\ض)‰J$ýº dsÜ}Bô-¾“IJ³õØ8X"BïQZv›!F’÷dËS²Â³ûé]–ÃwLòYãø€t‡XsôhL±‹ ¤öÓN§Øì¸‹äÃkã·Îó0ÆG¬@‹Š‘Š ºMEŒëÔë<ˆ‚#»æáw«$%>M/Vy›£Tž-€É_ž‘9Ïîçwô>#ƒ·Í Wz°‰|¿{æ·~ìs{° É4½Æ4ívOvrN9wTïnQã9™í¨ï”Õ„º&¹’ÑÙ„þ掮M”—'¨¾¥«Z¡ ù‚l± +¬TC×¶(MO~~B^*ö?_C1a|1¡»Y㽦8•Ðãûóxï„a}ܧàÑe‰+Ýj#~·,C±ì¤¨p‹)±ÝSß,P.'+Ÿ÷qb¢ ‰€6_ïñ^c33LN¢°¸]Éøb‰!Ðï+|Ÿ0Úáæ9øHÔê»[æÚ܈ßyŒËH©2R8²Åt„ßîˆ1úˆv9ÅbBj[|ïI) íà›—‹ ð¢¸§èê=ý!0zv‰³žvSh®ÙÈÒï*”B>MFq^ÒÝ®è[…+f2Fkðû=Á‡¡†Ý¢5ôm‹v%yiéë} ùd$•Ö¾Cå¥ÐCºŽ°ïI*ƒGÛœÐÖô]Ä•Š@ìùÉ›êww„”Q^. ÙS­ö(—ãœ&¦#†3Uc6TÁ}ÙÉãÄ×Þ®hv-Ä$ï‘S)ùðþ<†~ÃÀ(å@uø¶ÇM¸2Q¿]¥6³„¶E—²\ˆ‰üa2¦¥êØ7ãJl¡ðMCJãD‰ >aœ“•VÔÁ†ºí»Á³.j76Ãe9¤N;ïùéj …®#ö‘üdÉèrF{ËþzK¶\âF:µÞ¯Á8;x^U ß72AšŒQ©'¢±¹¢zwKˆEÚ i˜£?& ýÖ``èÊ£ÒŠß;Šï\B„=Á+&ÏÏQ]ï5)È{ă3GEá§÷BÖ°¹!´=ùé’Ôh÷=®¡m"ú ÇE;´I¤ä/I¤¯[R´ä'cÜ4'ì*º]….Çd³œÔõ ,©­ñ]G»mÉÏ—dY¢]·˜qq¿ÞÒV É\QнE›Z—Kmw׃F»„²9®„úý]L°Ùƒ§=yÿ@¿Ša˜®ÆA€ÒBœ.Ë𬓿O¸Ä™üQ¡TOwxÈáØbò®°Ãâ8=ìŒôîÁdù=òï˜HÉ@¨ý™J¬)ö„>Ý_¿$ïW§Tà”q¡r˜ÉŒÑÅ ¿½ãp½Ç'ÃsD~>›NHýï5.—̆•Øü¦¦9Ã;$Ü\žƒ?XÄÍÃÐ%²åŒÔìØ¿[‘t†Öq°q=ª ´P‚ÇñÛ5í¦‘0ͯÚíE'‚«‰MZŸ¨¶Œjø™áfvŽØliW•øÊÜHü™«­xâµ~ LÝ<Â!¢,’ïè»Äòï¿ ¬ß³{_/E¬+Ìü ‹—ÖÿùQe$,Ë?¼¤{÷šÃz¨G=>Ä{™-™>?EúŠÿvÏþ§[Ìì„báîÕ€¿xžµ&úDìpþ‡ œÉäç|ë!¡c°°ÝŸ7å,~»Z„³S÷/›ãB] Ç…jG¿k†€’x‚ûº¢ï'øŠÉeÎæÛŸØüxÇøÕ+fŸŸ‘ZQÛCHL¦e£d$™ŽN%áÆpØÒÝîÀY¾NdË%Z·To7Œ^½ ¬~Á«˯/èö-*$úÝJ”r4Æåç liØýðŠFÕ´›FŠ:š3YRžŒû†âü º†d4n’‹×¹‹F qÈ#|x­&Ôp\ÉCLа[Óm*t^¢\& >¡3C·jωrÏõ=™‘ ¡jI¾Ãw·È‰u‡ÊJ²yNØmÙ¿Y1þêsr×°ùîŽòé%åÅL’ý1Ú~s'úÕ†ÃÕ†üÙ3L¿¥º«±Ö '3Æg9›o~ÆŒ§ø}Åø‹W¹¢k"ºpô7WD5¦<ŸÈ³ëp ½Ùˆ%ÄæägSš·×¸‹KT»c÷ú†Ñ—Ÿ3ž%ojtݦÃÍ bÝâKò±Å†þмV²Y†¯#4{v?¿C–³ŒúýŠñ«WŒ. 6þö0Ôä”r¦©n*ÆO~|Ëäë/)F=7ÿãGò'/)ËŽÕŸß¡F3²‘¦»Û`g§”K+5äÏ>gù†~³')ƒoZƯž39+‰!B¢ßÔô‡½„õÚŽ¤ f_£ÛWì~G¨<ùÙåùŒXݱþó/ø”aó!œl-Zk~Q«”Ã-¦(u??*y{DƒÇÅfB˜òû=ý¡'éDò=vyÁxYÐÝì St›†éç—øõ ]%blìv2Å-Çb ê#±9àëI”ç§Ð8\ß¡MAl˜Ós&çc¿¼Çïj¢ÊÉ–cR½#K~vŠÉ"õ»[T1£8Ó]_BFùô¿º¦Û¦_½€nGýn‹•t«5å³g˜´cóz‹&IY?R M‘ß§á¯þê +|U“]\0{¾”sÝÒnÄWBìé¶-å³ ²‘4üÄ^Ô¦Ð4´wia[ŒÄË÷(íh Kýþ†Ãõ^v¹¾Çœ3{y ]÷`û¨šû/ÖZ§hõ!¾ê7KEŽ_ìSA¼¿ðye5~W‰5³â ñ×bÿGFÝSáß_}ü S¦ÁÅøû6¥_Û1 ÚºaQ)ú¡íMýª¨äXneäg$ЕðÕßI¹ª e“(NU‡²—g¿þîÇc#ÑwĨ…ÙXõ̾|AÜ\³»iÐF8–*ô¨ñ’ÉYÎîÛ×DãHɱøú)í»76^Àè-‹Sf¯ÎP® e"õÕ;]O‡ÍLúKçMPtýÃýâ“(-‹Ùb$éñ;)R‘€Šx§R ²ëµÛŒú1’(jï½PéÈÛnè÷’º—Ű%†ßÃìÕsÆg9»×oÙ½ÙP\^Huo ÄFì3IgäËZ%”ÓôÛÀӓëN<ˆáõ˜"¾;Iõó¶ÂŽgÄf+¡´“’önÊBêñm-‰¼düdAlìßmáEC߃!Ñ× f<#;! ¨:·Kíu` 1ð"?ZÞ¢’êåÇâÂÑovô{aöJúZ®cTGh…Nj™ľ—M^Û’lN6Ì1£Ã令 ÀHY}½¡|õ‚ÂulZ“_žS,r¡Y w(E¿Ù|¢ÛטÉz†HÊÆŒÏ ¶ßþ‚›Mé÷-ãÏž¢»šv×ÞGÝS3ã M{}G𲑶£cݾXÛ-ÍÝžüÙSÆsM}U£¬§Û'²YFìz´‘/G¸±¥½ÙÐ×2é1³ Y‘¨¯ö(èö{’‘ŠvS1~ùœ¬ l¿‹kÉdy¢Y×d“’¾ê˜|þœÌõl¾{‡Yž;ÏîõÉ(¦_w¸Ù—÷l¿]\0}:aÿË¢*° bÔØ‘&4ífƒšœ0qF÷þš˜äﵓF{)]8f-ŽÏ²`°¹%FÈcñA#þãûpõ1/s%úŽn]‰/ÕˆR½ð»Í-)›âtO[Cy2­py¢¹9P<9'îvÍõ->XF‹:×÷ÖÁ⣅‚E)Ùè¶ë†Ñ˧ŒÏGtëšæö޾éd3=ƌɧ²¹¢[íðfôòŒ°½býã†|~‚%RЃʟÈci–Ë&3ÃT&â«=õíUäd…%ÆŒÉËýõ-Þ›VGÚiQ—3‡ß­éZÅøÙ6‚É2l»ŸÞRí:l–IÀ,ÅáÙõ1ic(T„›<¡÷¸ùg"ÕÍJ‚Å °³WOȲH·m >ûоª “Š®WÌ^žÓßn1SC{µ!„œéç't7Wî:¬µ¨¬ÀœÐ9ФÐâ+±pv»£WÏM-! ¹ÊW¿o ›0yq õŽêö ¬…ˆ Á¢ïÑÅg;ªÕžâô J­ªZüéÝvGW÷BqÒzØÌYtVÏ3Ú«ªM…rް«}ö‚b¬iWÍ l¶Ä0¼ÂOòâ¿66²-‚»‹íßl )c|Q²ýæ{º>gt1'î¸“Š“’phi×kúJîÍâlJª÷ÞÜ”n¯$^b¥H£î×z ’ÁùC7ƒúK.õˆL#iß4ô‡Ž¤ÁÓ(籉 <¾IL?¿$¬oé:ˆm‹o¦aK JJNˆLh’AYQˆûF&ûþP“=¹d¼Ñ\]Óïô>£<›HgBrh—É4§ïQ¶@é€?Ô([` ‹¯`rŠ“)ñðïV[Ê—/pºb÷f/4¤ö£´2æÓ#üß5Âønˆ^*lïS«êA.×Vß׬ÆÞS\œ3:Ë‹í¸*<šãQB¨Ibhî¶ä§§ŒÎÆ2º‰½„Oîýý¿¶dü­Žÿòç?>D(ÄqnŒ¢_­Hdd'Sèýž³í¿¼=)þ§­Æo7t‡þ!Àð«Ñ[vŠŠä#Ùr‰-4í®F’¾‰m Ê¢³|€ß –Ëïö@†[HÉC¿Ù“ò’Ñù„~µ'?=Ãd‘ý/Wôõà{ÒÇÅ[¸§h7füdBõË5ùÅÖ©7¶|hß¿£m,Ó |ÓËÃ+Êw,D þ(yE…J§Ãn!Åø€x¶ê7ϳRJ‚CÂÄÿСÒôÿðôû¦¢ß7d'KètÛeí':ƒr•4:Ëå{ žXË‚Ýd;™‘M5‡ŸßÉ$4áý0v¨°³9Åé”Ðt2ZTTܤˆI åZª”uIq:Åï¶t›Ã}‡ÒÓ•Â*Ýíð•ÇÍ'¤¾¥?42ŠÜhŠ- ¡ªHZÆë©: ò‘Œ¯ïPÓ%£eFõf…*2RÈóaD)÷º¶z¸%’"h#''†4$Î5Ê&º›5ª˜’/ úí–~[I ¾N¸i.V4ÑGÊË ò‘2Ü—(C¬ô{)Kðû–òò“Aý~M~v†ßÝPݶ䓂”<*Ÿ4ííUŽPCU°¯*yqáO±â˜Áz#¶ß´CÑD¢¯zŠóSò“‚æêŽ„£8›bOÒ‚´·ÚCÀÍÆ(ßK Þ$C% ::HŒS³™£Û4¸IFsuMˆùù ô{B*1¦£¯5ÅÂQ_ÝIKž‘ͧdcMs³âð®bôì’ñňv³¥½ZU.m¦§½]ÑUŠòé)a³ÆLç(P6ÊÛ©8.ÆŒŸ]àtÂwµx;UŽ)Ýv‹],°ÊS½_“Ÿ µ£¾Þ‘œ`MOs·%©BPl÷®2M¨ö  Š¥¥¹­ÈN—Ó~ë$Õ¨0„1ɨ[) bG»ÚA^¢b‹ßwØùü޾I¸ÜÐî˜bŒQ©“vÁ ãñÉgOIÕŠÝûÆÚ±')bêé·[’Ê0VÂK~_aNÏÈóDs½•<¯1ØrŒ6žúvCùìªkQEF·"øŒÑ³%*µ4›VžÁŠó*”NTo¯éª(™®#?¿dúò¿ÝÓÕ[@ûö†Þƒ-óÁ’¡%ÔVŒP¾!é‚ñ³3ÒAÆâå³'èX±ÿåš¾7ØLìGKÆ1ø)Û` á&X&ʱ—w¶8eüt‰ i(eJº»•L’ê·\0y~B{Ãþí[dbÑÂ^ÏlÄw5ÕÕFr8öh7È)cD'(Àh˜<¿$V;¢väËõÛ+šÛ­´r.d1©bOlö¿Üà£cöò ¿[S¯[AÛ)Mhèñ)“ó‚ÝOW˜é¿]“Pñ«˜p º9Ÿá¦%a·¦yC°cÆONH‡ ¾U—Kbµ•ûýtyèÅ › 嘾8ůïh¶;ž`Ç¿›šçÄ.ˆè-ùò„|¢h®o½ÂÍg¸IN·º¥½kÉ/ΰ#yWà;êë1™{qR¸ZÚ<‡R’D¼_3lRM™?zשßÃï«Á¢("•Pq±í°‹ÊeN}½E9G6ΉõÃõ•hnyB6qDßË´t»bÿv…rù½¥”ôgPŒ^œcuO³ªñ‡ 5š3yqjîØ¿Ùa¦SRw¸·š(cU.?_Ò^¿§ÝFFOOè÷5¶PÞÜ¢ÇKòIF>+¨¯ÞQÝy²q&ï“ðØÂ¡õÌŽÊý)Ʊú4šæcV®Ò’R õI êþî™|þŠùóùƒ—yðߤ*ÚµÔjZvoÞ‘_>gþâÑçéîåá»Üãï>„L|„€ûk¦~Ëòñª¼[~õùc·«ðm ¶µÔøîžLôÄ^ÆÎéè}ý•M„ÐI-ê“~fßàÛG´ô©s'¿3¶žâé¬ Ô7•,j":âàs6EHÊšäéö”“/Kü~CsµFÍO˜¿œÓ¾ÛP<»„vÇö—ÚC+œJ3xžÕpSÆ€Êçœ|µdõ/ßP~õ{Æ3-hIÐeNýÃìwš³üLÚÎ6µØ)kƒ›˜| v|ê=þŸº¨6¤ˆ›ŒÉæ¹LîkÈSèÖ•ø¶´X­é¾Åíã—‰6²Cö]'áÀÐà»øá9¸/*:’c4&¡ÌÑk¥ÍžnÛ¢¬!?¿¤œ+Öÿñ=æ£Â‚ÐtŒ^½bz>¢¹= #Íøð·è6‚„܇oŽç„æ@hE•>ZRÔò3žv»£?x²ÓLÜS­[²² Äžl²ÄÐ⻀Òn*M‰*/ÑÊS_Ý¡ægLÏ,ÛoWd'#bï1y)~ï¶ÇÎÆäóœns ¯Z'0ÅÙ„Xïiïj0nx)GÁÙ[Zb×à«íF@C¿Od³œ~¿Ãwž Xœ0{uŠ?ìð½!+Í]5¨™EºMËô‹çÐï8¼Ýâ üî†fçÉFÚ(Á’iQIŽI¥ÝfK_ [;’Î$d;XÓ¢÷„.ÍGø]ÍèÕ \Ö³ÿéwvÁè¼|hul^¿£ÚDÊ‹4ÅÓg¨Øq˜,Ñ­éâÉù<§½Ú’¨~|Cï5FiÊççà+ºƒB¥UÌ)šÃ7¯©ªŽlvÊôÅ9.ï9¼½¡ºj)_œÌ!méê„Ë mUc³)®,Ð.HEuûzòùÚ«×ì®;ŠéXÔI7ª­Ä–ú ¬UD/ÕÉîä„rbiîÖtu‡•ã9:Õìo÷Ì÷%ºÙ”¦ßì‰QB©F'šÛ½àólÉôå9´ ¦´l¾ý‰z¤¨¯é(_¼dùÕ9ýÝ–æn'žý¶¥=Ô¸É=XK¿«Q“VµøÎ0~qî×l_ï™ýþ3ŒßpûŸ¯ñ*Ç:õˆ›ÐFP¢É÷DÑ™»þ íá×±ØuØ“ N¾~vH}O»ÞÑíj”1´›=ù³gœ|uNý˶?Þ¢` û>Rœ_2}2£_ß²¿Úàû ¶çÐG>ZðßËÃŽ@ÄP.¨¾'»\àrÍî§wTw”qŒ.Ÿ0z2Çh…òwú‘ú`8ÿo_îÞ±~»ë àÛwö”Ù¹eýÇ·ä§'t›ú"}bôôÕnižÑɉÔ{êw×x]2y~õN,r‹)*4´‡~˜.ÊuŒ‘ Kè[BÊ8ùýSúë+ö×ùrI±ÌiïnèšH>)‰]/Ó{•“/¦ëñuMì„þS>]àwwìßÈæSLž“/ÇP¯Yýñ5½JŽv"î(#øÁ4dKb ›=z/XÜdŒqi úéGÙôÈú¡ uôû1ê¬JúÝ÷äó'3ö?^‰íhâè®nد‡`tL¨¬Dk0£B¬·ï¸ûÓÈò{®·ÍrbSÑÕ‘å?}E¦ª›†PèƒfúÙ+2W³ýæ=‘÷Ò±9R9Kw·Ã]rò÷O8|û-‡»ÄüË'´·ÜT³ùÓ/¨ñÅÄ1zº¤~÷3»÷5ÙdD¬|ý+Œÿõác›Á_Y ®” obH€ì ÁD’FJä‹9ù´ ¥0tªë‡+=†Ü?^¥êc]=ýfiɧC{ëç?^\=pšÓ~q$Elkúí²1Ù4£_ï1Ó÷¥=¿¹ÛûõqÖVÓow„.Þ«…ÿ³ÒeÊiÁ˜¶µÔ`‚Ï8.˜CÕ ‹BË‹*‰5'ù0X"Ýö€N› > *u§3ÂaO0Κ»ý½êIò„h/»]%‹Ùl9—ðDrdcG‘TèwîdJ¨öô‡N”óìȰŒ|س’>:Vꡘ$[ªôG‹^G)p_½Ý¯7 sܬ|ГI ÉÓmw¤c¨Hx;×ÞpΕËDUêzAe–P×(#%)% Q:CìZ í©!¯Òƒ÷òƒ}m”ÈxDq6CyÿaZ>>Ôò¢Ey:„ßÒmÃè[£•ÐV–‘M üv'H¬å«zêÛ-j¨í¶Ó)š:ÐÞÉ5wT¾µµR€a„NÊK†ã£ÂM'zOšýzEˆŽlbðuÀNgÐUôû=)=Bk ȱä:Ï*‡` cß“|¸Ç…¶%„D6™-KR9VË÷Û½ ìŒ*¹=ÅÓSânCÔ9Z0Æ%ºM…ʤ å>`nRâJƒo{ú]MÐ6JÓŸ-Èæ~WãæcºÛÉ•h“PÚ (¥º˜àrE}}7ü{™¨ÿCmìkR1ÓROÇêïûp²ÃäŽØÜ|"u¶eAÜïé» ›á¾—qgž“MJí®Æä%¶ttë•àJù7`Ø„{!ë„&P^Nh¯V¸Å’Pm‰© 8ѯ7´ëš|yB6s´ë-¡é‰½&?›cí Ú TÂïºÈe$K_ÓlkHfL1Pæäó1¡’ë &‡-s’oˆ}ÂÍfh-e J™{ô †ä[ú»l¬Í¿ˆ‚·2ãœØ5â7ɦ.Ô *Ëqc+>i“‰ ë#v:&› »-Ͷ–Ít ÷<”ÆX+“±>ˆÂ?͉mOˆJ* »†~[Aæ¤RÛð=}Óá«vP4[ì|!„‚mGùäœä+ºuƒ›èÖâïÚ£B+EL‹”ËÉg9Ýz‡Î RëqË9)´²àêûAÅ5D Ú•d…Æâ‚ßë6[i¿{lL4å„lbioVD†Å×oå¥$µ5`ÆäÙS,‡öOmÑV2S¾jIVøÓ ©Ç>QœÎIýæ¶ÂÍç¤ö ”£¡챑D;¹ßú!L즂` §ßU![Ì„èzb/ĤÄn,‚ Â}:ÏABíŃì2ñ½ö-Qc…ò¡mIj@·ê!¿•,å“3TWQßÜÉ(N'ôë5£±óØé”l>&ÖÝzGB£]†›”´·+Üé‚TmEw“g˜ñEO¿9ˆàÒv(ãd*Rh•HZ£b"õRgåÀ)Ô`%ìvµ¡M=ÂUÖ¾?…Þt|Ƕ¹w (—I™VLšýüCI×Ñf4ÔzM62´»šüô;|ÝšˆO0&’BB9a¿£]ט"È“KYXvºDÇ–fW \›b$SÓ®¢[W˜Ñ7rÃÔÃbG¾:à ´j¨Þïɧds'ÏédÈ–K±ãÑÑÜ®ñ^a]6LI?XU=ªòžŒÿ*Ðþ·¢¡À>i©IÇJmbù_3^X|ÁBÝÐmšû¦´|^ÞƒïÐî~WƒÉÈ&öCºÂÑ÷q(P=¢püV•÷諼?¬.MŸò@ïú*ˆ—h`0ÊHù€.çdC·Þc¦ Y@8¾}ÙŸðXíΚý£Îoø{ï÷:“Pn¨ÁݯéKq2%Åãh¹¡¹«q“1¾Úáæ§¤vÅaU“ú–üé+æg†Õww,þðœæÇ×4‡„çã/žÒ¾ù‘º3*=›Ÿo†’Q¡Ñ%³Ï/á°¡^‰©¼<‚'H€ ¾¢ß÷d''¤vGuµ!;½ +µéˆ|ž‹ÛOŸgºmüÀ 7jŠå2©·Máþç´Ót»–Ðün‹Ê&dórh±&%IvÝÝvGÍÄôˆz14Fé “¤X›šsìØÑ®¶èbN6µFLšØìiWûaQ~[úOlŠ¡íÈ.žqúûg¤jÏѲøÀ×áÁª¢Û{Lž›Ýf/ QåPFü}ÅÅ‚Ñå„»ýOöW‘ÓÿíKTwÇíü‚ÏÈ&ÜD^Ðåå„íwß³_õØ|¨ãÖšl´ › †)4­')ìl†±CóTîènoð!§˜úM‹MÑôlh‡- P-¾êѶČòp¢!TÔ×k0¹$¾½Çï¦_É⋱{õ=ÍõŠþÐàëùlL{³£|õ U툪$ù-fñ”Ñܳùfƒ›g´7+LY5+=›‘M2êëµð|çK´î¨~O(O8ùÃõwï)^œ±ýó¤ü”ftkƒJ¿?Þæhá`FC 7¥ÿ¹]Aè„FðWwâ ¡¸tT›!³AaMÇ:Y­0ù€þ û±ó袒ƭ¶”ø_7¢$…ˆ™N$üÓÔĤ8¿q‘¢‚~½• w1¥æÐJnDå… ñZåøý¤,Ù´Äï#dŒ”,hk¸üÐuÇç^i’O(ƒü,vœCˆ`¥” þ2ÐR’Ñ÷Ä(áXWô |x³èG% ¬•ß©¥“~°pè‡ ¥2€?|xÿ)%ÊÅPˆÁ£¬ÅB·øÔµ*0xE¨*QÜ\&ÕÝ1âg\ª yXèL°IØLF¥UVÊ4R3 5'Šâûø•<Ö½E )%Ž ÷Ã{uÞŠwØ‹Šb¬’pG^H.8Ak™¢@;)ÑxØ(8ܬ$Ä A1mÕC%¹±ò=«šèƒPQLŒ‡JÃ4F uðÉ{ÐF꟣|ÿcUº•÷I~/x,[Z¡mHÊ`'i·' ¿KÁ¦dàìýdêèÏ'Ftf1¹ÔÕJyT‚ë̉q@ºùªÇN&(ðûZΩUR½îrlaˆm+d %•ï¡j°Ëa½¬óÞ6øC‹ÎÚ(|Õ J¡¨î&s¤¡¢;¶-äNŠ?”’›. ÇBšáb'6“;bÕH…nD®4lˆ¦…h1IÍnHrÞ2ñ­KÁ†d"$j•L3R…óý3R+bݪ¬ÞF¦8臎/…Ô5FrÍuAT½¡$Bg–°Ý“´T›2dj°E‰)DÀ m}ÿºp‰{Lä=}Èhaj×­ÜCm:’¯ÔPMâý¦^:Óô«½<›² m¤ÔCY9Ρ‘ðÚ}•½FpAAUf‰M{O I1¢Ë;Ôª§ a5íœàgëv@¤=®Á*Õô£oºûÍðßôWâI7¹(ûÇãgòœXWøª“ŠíÁÒhGÝÍœ•"°˜mÿè™3ˆl!K"ðU3T¶÷„ªR7<{ƒXÊLŽs;ž'cdÚxîÑ+y/•èZËM¾áåØÇ#¦tÀÒ¯±˜0#YXjg‰}‡Î R/ïJ­§Ml{”•€§õâ€ñ’ªçåÖÎ eUÙýÆ& ás’dd8Ö[©y‰-¤"]B¹¢°ÈóBB©)ÊqO]Cì…=Þï¥ö[ŽóÚ 7›¢R¯»{KÅãî5¼·Ô}»aÄŒG‚O£,äDª¶Ã¡‘÷Ÿž‹÷M°3* ôø}=LJ‡ûEky SLåܽ#!±Ç˜\6©õ¨Ì ùõp †û÷þ÷䙼ú^Î]z•"Ê5t¼ßì¿èéuïÑüëŠT>F®q,Áøk还Q¡@ß+ÊŸT ¸O*ÐÖk§?ô¼‡º¥;ô.2Ml÷t«œ¤c -hÜɉ$Šæà›ú æü~œk}‹¯vvÍ܇2ïë5;Pù“RTèLL)N_ÑÞ¬ Áã½ãâÿüÍ?aΟ£Úknÿãšñ«WŒ/¦„]%å(yŽò5‡w·è"GE°³%¶Ô˜²$›eòýc”檨è×kVßýŒ0}zBlw4ëZðqM9»¤Eš»Èò÷KnÿŸÃsÊÅ{NwuEß—Œ.'Øb`Çj-øÄu z˜N(I2+«ñ‡ž¢9³)ùBË!zRP¨Xqó/ßÐ÷Õ(T £Ï¿äâ¿Aóã7\ÿ˨rüIÔ1„vœ®Þ£(‡íÐNÿùkÊĤe³ÒuÔoo自k¨év‘òdÄþ—×x?æâÿ÷%Ý»ŸØßˆ²[>Y RG·'#bÛЭ*úÆ/'4?ýÌaå!€ÍÉfŽ~·Açs&¯NdºY­¸þ×ïHÙ “4Ùr-õLc"Ôb³ÓårD¨;L!“Œ-*u4U‡ËEDRÅœåžRÿ|EþtÎîß¾§øâ+âö5ë_œS¨lÂèbIØ]S­;FOŸ3y2!Ë<7ÿãÏlßwŒŸ\2y6£¿[A>cújIê{ˆ‘æí›Ÿß“ìŒÑÉSDBS{©ïQÙ˜ütAV*ºõžÐÊóŒêíz|Æè¬ʰûã7Ôµer9e÷Ýí°.»/‰mbôê)ªßr¸Úâ%9x(kú¶gtù”ùg—hh®tëkšÞrú‡'lÿÇé˜ÑÙSDünGhîdIq:£»zÃæçìhŒ¶Åbª!´,p•‘Í Jšúý)›PÎ ê÷ï°Ó9Ö8t>ÂŒ Õ›7-pYËþÍ-n~Æèâš»«Š³ÿþ%ÍwßQD0tó%nbQÖÒß¼gÿË-*Ëy ÿèt_Æ‘þ+UÑ9b”Š^þÆ—‹_u -všëå ´ÀåN¬R©ì®ÿ³Â’NjΊTþêÏ2Z›–І§,FTà¡ MCìÃ=X\9;8†Eh+ O÷âŠR’HG£>’|h 丒Ž>ÂÚë†Â“4ðºÝ´ Uj2‚®¡o=z°ì Àûjð‚BeƒÒÑTîйÐiƒÏ¬oéV{âÒSæàþ{’aŒÂW¢²ØÜ j–à}.»ü” °ã &sƒò+¼Øz 0Jª¨žùƒZl™‘Ú–¾¸0uƒAiôý±J÷“©UÃhU& ©NŠAµâ…²úágu³÷Ã)¯9ª÷©$JsJQ””#¾0&Tf°e>(¨šØµòUQþþNŽPÖQ)‰r¯±ë@Yñ» (>[8âíDËøÞû9¨?¦ÈˆMCÒFÂ5}¸¸Ê¿r²Ht ,2¤‚WTb5T¦‰ƒBi´l\t¦‰M/ðz'H¼&3¢6  †ÖK!¼XŒsRœ¡,O¨„µ¬¥hA.wƒ p|eQ1 çN£0\¢D†Êè¾—Ò“2M'ƒÞ¯ƒ• õlêßžRà»^˜ÕFQšÔz¹ßÔQH”Å…¶B*ˆ!I…m„7;*ÐIŠvB†¶Osï´“bexe›v¨ð~à`¦¨E®'%á'%‹9_÷èÌÉß ,ÙlJªö²!qVžW}§Ð6#6-±ïÀe’È,ÆY”³Ä¦‘E½¨¼F ÷;—P(½—ò ïÑyÍÊÂî@RBº€Î-±êî”4œ›$° Œ‘V·&725ª:A6)¦0‘Ý´DùžÞƒË­ü¢Ðl2+t‰0´“õ”rx°£LCMOæ9f/>,hREŽË‡²©!Tª¬L¤îøÑù@Éq1Çêc-êàà+ÕEŽÖŠp¨ðÃfÿX%>kî€èÜÉ3õžó)›x•ç˜ÂÈ$w¸0|Ý~Æ6ò*Ëp…L|=ä~ c¦•Ú¶™Çï;*è Αچà‡ë» ¨á>PJ}&R˜Œ(TL¢b[%Šl‘£‰t«= |À÷q@óIÆ'¶-IklY ¢Ô}÷ûŠ„ypÛ=¬8D©Œ×øyâ¨@§ã3ùˆ~QÇZñ‚d¶ÉLzT>Í&X o;òÓsòù„ÔìÄçª Ü¤ ¾y'mkVÃQ±ŽòÉ3ŠqÇõÿó'Ìôå2'T¢wä§'˜L“H„ª%’°ãR.òv$ö™f5ö 2ƒ_Ý¢W0„¦H úŠæfOö䌴_Óµqh4¼ÑùTG{½ÂGyð©`È– tÆýXV;K·¾¡^peI6_2yyŽê7~ºâ°n$Ä!=(Ó±ëÈÎ_°x^pûÿü‘ ‹AH„61ûú3Òî†Ýõ~(ÊAÆN³SNÿåºíVø¿Ù7Ë?èÂ[úC ¿YÓvšég/‰»-ùÅå{TYv·¬þíôé9óW—F5ìzGÒ–,Ó//é¯ßRÝEF//ñÛ+öï÷¸r(9H• Î)V­#¡­:,§__ÓìZòÙ•&OÞ¯™|ñŠpý–ý]KvrÂôÅR¸Ó?¼A//Y¼š±þ×o‰ÊÎ?»À˜ˆ)3¢ïH8L}P>ÐW­ À’BÑQ__S¯§ÿíå\ÿßÄ^>§Ì+Öo;¦—ª×+ÜÉ+ª«ù·gg¤f…ï5Å´DÙ©ßÒÔšé‹%ý»jœÓÞmÉO/)æ¾méë=~Óƒcôê YQ³ùãÙÙ%ZÕ®®…’v"VYÐZ²É‚Øo¨îFOŸauÍþíãÏ_Ñ¿CtSœé±³3Æ/çìÿø›×WèÑk ¡ï0å”å×ωݞÕþBùì³/OØýñ;áygvzÂè4ãðú–Ùß})×ì»5¡•Âѳ%ýí[v?U”//ÑÔtÏä³9Ûÿx9yÊø4ÿ»+°ËáÇ·ToïH™¡<¿$ŸŽˆM+-qÇä9¶Pt{ááÆö@s³F÷ l‘hnïÀh"&+±³r( ˆèb‚çô·ïè|Æé?~I¸}Ëö§-å‹g¸ BßÒ®ÖÔW;ÜÙy‰>£¸\’Ú›[šZQ^.éo×ä—ô7ïHåwÔ;˜ÿþsœÚró/ß‘lvÌù?¿äðÍŸ9ìÄQê–É_0µ6¬ÇŶ¢[ohn6² ×j ñŒ1cC{{ƒÊ—,~I¬öôû@ꬼá䟿¢úáÏ6†ÉÅ9v|¬UV$_KX÷¡{˜‡@”U}ÇwÕu“l` Kåù㎥z\Rÿô=·ÿñ3}(ô|XA¨;fÿr»çú¼F™sú¯0¾ö~ˆ÷H¿Pw„6¡ Kêý~C¨t¹`ü´¤z}ƒ],èoïHn‚›:ÚÛ+o7”Ÿ}ÆhªéVÙ¢ »[‘tëžÅ?~…Inÿø»¼döbI{õžd¦äEÍÝ·wL÷;ʲáî?¾¥m n(‰>⦠ܢ$6{9¦Gq)%úº•UÃc^TkSLP¦Ãj´“ÿ½¹«=F1Ñ÷͹¦Ô~|Gu³ÇMf”ÏÏÈ hn+Š“ŒÃw¯é}A~2¡ß®ˆÞŸ,‰þ@ýö5šSÌÑ[¦/§ìþøu¥)/Ïp™¾“"´H9f\öwTw[òù9nT ¾æŽÐˆêï¦~·¡~wKÌ&L?Af~Ù1þüV×Üþûw4âL“w }T×~,0 ãòû,]·kXþïÀ¿ÿ‰N-8ýÝ9¡í©yËö§÷èñ’òü‚É¥aûŸ?“ò%ù"£8™Ðݼ'˜yÙp¸ê)/O‰ûíªF§(Õª]”ĦÂΖ¨TÑmRŠBi*gŒŸŸ“•’)Zýñ æô§|qËòň°¯I£SEõ¾bôêyÙ±ûñ ÝàbI>áf òÓ1ÝÕ;oï>T Õoí*ÿJ¤†R—éi—¿bý—))(ò“©$eCú(°ð1!#â÷5¡K£¸Ã×B<°“mý®'[N‡°X¾óãv¿@áø”­>!ǧOq#]D]ö‡þ~ôi?¹x¤ž«ª‚pZêׄ›R Çî¡É*zb|+m†câ‘”-ÜOy,;]ÌW ’GO&Xíi7ÊD|7< t¼™1'*AJ Wf¢ø¿¬¾_¬ª{OCªÂdvÀé \Õ²ÄåbHÇßó°Ó ’ñ,+=ìZ“¨nšƒ÷’m3Z/ýÐz§Õ|‹Ï}b˜(mf¨V=ª¼)Šjç2TêékÓZ;Œ•òâ aCìkºªÇ¸ SØ2Cáé·}íÑ™D©”â””bólðaʨ]9^ÁtVb´œŸØyRVPÎ ÚÛá)3L˜n>&Ö5äFºm#êtú¸^Ö‚¢XNP¾¥Y7dg ,‡Û ›YRÔâRqTàmž“BOÒcäåEðø>I[^4h+t…”äzÒF¡ RÛvœ£t ß´*1àÛ´“ËÓ Ÿ?ô’l×&—${ÔØÜAÔp;xé•ÁXƒ)K=íj/CgÑJú“È&9±mè«nmºÕŽ8´¦ªÁŠ²ÂØÞï…#YbÓa&Bè6=¶4„®C¹’|êho×ø`)ϦÄÃär´ò´Ûf(9’38K6-èWÂÙv¥Áïj|#ÏÆ¤"¡ÿª6Ò €ÎÐ*52¹0r¿Ç¨¼XYI1Éèn×2Yˆ-ƉI¦€ú>c‡¢c•ä9 ;”%X’ï@g¨Ô£!?™@hinw$cÑÖ‘/Ƅ͎Á>+¡²É7ÎÅÆÄÑçÜÓï*Òýµz$úèášô`rBßÒ®¥†>$Íè|†ßlè;°ÎI?YŒÃj@aþºœáƒWš<ÆüE–á&ú2}Tb´%”Áï÷´Û“ÛO¿«ŽÚ‚ÒX[šUƒ² lF¾˜¡bÿ!$Ëü¡Â7a­IÕøQ9´£ŒTµ¢J‘À0…é†NƒÉD‰L!ÜÛ.“Wä§3T/(¿cs^J3cT Yí¥å®Ô´·[¢¶b#Â6ö¸@¿rêÅ> ª>÷½)Fò<•µ£A)/S;eÉæ#â¡ÆNÇÄ®¦ÛwòÞU;-0&ÒízÜ,ÇïöÄdÑB×ÈdÚÚ7øÖ£:P2R+¶!½ y•8TWk“$ ÏP5ßuS íƒCVŒ$ÃâeÙKaZ6+Qª§?D²ù;ê»!ÈšC ˜`¥ÜÃ0"%bŠRû>@ bÈϤj‡Ç’ÏG„º•5ZèIÉ`Ë76t«Z:'´GËûšu›+©Ÿò½ÇÜÜ$J¥†s!9¥’P™¢B…<ëö;šC/9…å}y0BØþžPåf9~³gŠÈrÂ:”•²¶_UyÛ²ød‘Ç_Fº …ÞËØõÑ8ë¯ÃÞýÏQyJ%ú]ËäóWL.GRý«>ò>ò4kcˆ¨AŒ!Ðï;”2¸‘¦ÛKX‚˜°¥E;õȪükúô½¢¬~ýùǤO|þx¼îÛUÂúGH>>lìS2¾î7kºû’“‡sð)1?EÐùHì¸Õ©«h·-Ù|‰6q¨‡nµ]’Í‹ûc»ÝzÏ€ Ai諞å?E¸û…í»礎ÝNFµD’Î=;#Ë{nÿõ{²gŸQŽ`ûÓ;ê› £/¾dzªÙý°Â.O(¦‰ú—;R>=ÓßÞâÕ”|b¨ß_ÚˆÂõ„ÉÓ ÕOW˜ÅŒÔíI^B±­0å·(Ånq<îQ¸Í¶…LBØ"öácûµ4í-ÖB6[õõ519Yùˆ],1¦£¹Z¦<B1Ó¯o©îî@É‚ m0Æâ÷{ò/™=RßЪ£½©ÈÎ/ȧ‘úÝä ¡hE·©i7w˜Ñ‚ñ“)¡n‰AcMÇúÛ¨–“?|Îhfèj¡OU¨c"]ÂbÇja¹¨CÅŸKÅ{·mäÁg Á—ņövEÂà›7›@çÑã9*UèrÉèT³ûæÔè”Éó1»?ý@×åÌ¿z}MÀa3iRJFj©ÝH3Ýô“AlÔëŽüü„TïQfB¶ÌéV7´ûcÉ•L_=Cµ ¾ª[£CgåÓ~u‹OF§9ͺ¾¢ÝFf_ž²ÿö¢šCô²¨ MKRF{£9³çsêÛ-&/‡;b³Hõæ†äJ-ÕÏ7dÏ_²ølÉá§7C/cúõ L¨¨¯îhÖ-åó'”'%¾ ô«¢1:ËØ÷3>˜ÿî©®hV-ų)Ýû÷®[Rßá..˜½8§»zCwÐ%í»SÆ—3TôôN,¥„Éd3ØÝ¾§¾ ”OÎHMC¿ßӬײ¸ÅàN„zE_y²ñˆ˜ÑŒüdNª7B8›Ò¼¹"òT„ýšú¶–Ð_/%UÆú¦BÛ1n<¦8S½yM»OL^ÚaÔ›MpMBÛDê5ã3vßüLþüV×ÂÎÇd³\›õŽæf%E³‰Ø±‚ËþÐ1þú3X_áÝ”ùg§ôÛV‚”‡;Vú™d3b¯Xþý8—h7 ¾Úêˆ[,p³c:“`°?x´ñì~~K;dbÛQ>}ÆôùBr!àk?`õð\ t«;|«°“1±=Э$ Ùâœât†µžf]ãFŽÝ7?Ò+‡Ë¬Dú(eK³\h¾¹ óÙÉBè&GKG&•ï÷„Œ#îÑ´Ti-èIaKƒð«+îþô•¿ùÚŽmGùä)³Ïω]Gl"&×R{üAÐIÝÓ†´ i{{G{³%Dp³F§Ží7?Ò¦_½ ÞÝÂø„¼ Toï°'çŒNKê÷+’v:üvK½î˜þî3âúš>”‹Rì £—yêŸßÓûœÙ—ÏÉKÏêO?Ðì-£Óvl õžÐHxX=^$):É— Ù[ÉQ„”¡MG¨¤±4%:—|I µ>ìi× ùÅÎIjÅíü’ÅgcVÿþ3£/¿"S=!$Ü(ÇŠÝwo蛀Í-¾nq‹S&ÏOˆû[Öß½Áï(‚"?]» ‡wF¯^±øò’úç_¨ßï0ãÝ¡"$Eê“/_Â~Cï3Ü(Ò¼¿#™‚òÉ%£“œ~hQ”I®´BïþüLÎÉòwÿùVøê¨_‰†2M• þäÕ &Og„Vʃ…Fiòù˜l‡7WT7v2ÆdØE¡"岑¡¹º&ÙL”ÙÉ)¶4Òé ¯<ÚY|:b[³ûù†âÉÝÕ{²ç¯ÐÍ»÷›A´xÔ¢¨µ¿|B£¦ƒèv~‚ŽÕ»;”s híÜ'š» åÞs‹%,Å¿~UüWÉÐé”=R>9g´,ðM'©tõX…üÄHéH±†p¨è6µTçŽ Ý0QF*ÍàâÁã£>Bí}€S›Y-Üoè~muIZDîíŒÊ®æŽÌƒú!l–ÂPYË£ñ܇uÛÜW4kYëŽ<bh¤~Ùh«¦aÀ7Ú–ØÂ Þ®$Eµ— h¸zBãö„tX±¿©sã Úêû¯«³L¬γùþ=Ùå32Õr¸^Ñîò‹KF3E}%( W&ÚÛ=I êÆŒHMM»ór]…fh&„Ð¥a70¥:RÅ;:’ùgy< ƒ µ ýºmõAÉŒx¿%WIm©lTÝAˆÆÈ"ÕŽ&ÓÓ¬vD¥pã F[”ò´ÕŽœx1­F+ƒ¯kÌò„ñ¼†«Úê´ÅM~»§oÅùL¸•;RUN(–#b]ãëˆ-‡_ÞѶ†Éó Ê©£¹Ý‚-Èù <8€äo;ž…ßÕ„.“Èð¨\È>(±]OŠ ß¶˜¢ÔQ9¿'¹ åÜÒÜìÐÅ72ÔïnðÞ0~vŽŽ]5PœƒèQùëzoï0£96פ¾¢^wd‹:õ¤”aG_ïéۈњ¤4n”ë~Hî’&;+Å òIF¿;ššåYIýæ=£•'ôI<–Áƒ¶(ßtN¹ '÷ˆTŠ¢p¸ŒèkºM;;c4/h¯odÚm ʳýjžŸcTG}{šÇ|A>V4ïîð1cülF³Á{M~^Ò¯¶Â:•äãœÐ6ÒPªdä®#›ç„ݾ ÷Õð¦,ÉN¦¤jCsWLo‹6‰ö°¡O¸é”Ôoh›DVJèIØÓŽ;H2í‰}u¨©‰Æ¡hévZ˸™¤†ß]á&ËaÃÜÑ0›‰"4´QÄ þk[Ê´ÛUhWˆÅ*LáˆÍޮճŒÐtÃ|4‹BøéÁÓ×JçØ‘‚äPª#M±(©ßÞâNΰ:Ðl÷ „8"Á©†v»'& kËúNò]‡Y,(JM_{™XöT×k’Ò$,“§§¤¦¦oJõD?øì‹BT: ù–vÕà–#š÷Wtíq(ÎϤi7Db#èUejŽåœh±¥ÝV`-®ÈQ.#eô›‘H¿¯ )a¬EE±!ÙÑ›«¡þÜÀ¨ê1¹ñ¼¼§yèÑïÁ…(Ó¼în'\éiZv;ªÛ-ʺߠ“ð»— ÊÓ ýz‹oùr2 óÔÇÊØýû9VÝ®!EQAítJ6Ñ~~‡v<Ž ¸ÚN¦†f<%+ ݺB ì|ßvøÖ“-f¤¦"ª‚|ìD9çX›h®îªdúü å+öïï1#/ ” „^²5JdEMCVEë{q/ƈÖèþAÜÞ;25L@À·ýPTb,ô‡Zü¸$ÌdÉä,gÿÓ{ôh&6þ®Ç ÏÉvs8ð}™Ì(ÏçèþÀöÇ7tÁ’Æ!´ôý¾¥xö”Ñ,£úù=ÞGtžc­¢Ý쉃-ÅMÆèI*C™ž~ß Œ%[,ɧšöj‹]Ì¥ñÓÈä»y¿ÁÌæè´gûúNrO÷4(Í ±ï9FSBë)..˜>Ño÷t[é>P™¥8™ ~½§? ^pHQ‹?™Œldèvûa’lßÐò«Äâj3Œé©¯vRÖ4Òtë í Ý¡ÅMÇ„jÎG¨ÐÒµþ^ øxŽÿ¸–\*E±OØñ£[šuõc÷h>¹Ä}ä~L@;6æ é¿vAü·. QR”à«–òÉS&ÏæBNø¸‚ùc[ T ¹LéÒVIþ±B,‰vúOò‡µÙîx¥ÕÀFÔˆG*rúÕç§GéÅãâSžií ÝzE_õèadNŠbc( Rl‰u- ›‘ŸŒÉ&9û_Ó<.wtU5  ;eÇýnCh5Ùr†J-Ýö@Da”4ѹùB-…hAÅ&¯ž1y¾àðÃkêT§fG¿ï±“Œn]Sœ-èV·˜ÉåÙx‰yB¯¡Û°ùñ=ÊðÈÑž¾é(Ÿ]0¾˜”¥»¾¦Y{ÜÜêÈøù)ÒilÐ94Wwtû)`gKá4÷þÃÚó#ìñµ€ŒµÃnsÿ¾çd9ù¼”Ý)Эïm¢ßï`¼dþò\‚Õ†êÝŠ¤,Z猞ÍñÛ }m±‹‚l”£x‰M ßlè«J^ö“ziGóÕly†ÉÁ;TØÓW WÂájËèåKò´M„N¬-ÚȆ'ô “é®ÕØ')q &õ@âpâîVûaÀ Ø0Ø£tÎèé)n¬hn7~¹Cç”'#ºÍŽp¨QY‰)ÊK(„ÔQ½_‘_>¡[¿¼%ê’l¬‰-¸Ù”Øliî6˜rÁü‹3ªŸ_Sm&Ó¨¨ÄNzO $S0ûü †@Œ‰öæNj€ÃPþp>#lï8¼_Q\>§\ŽÀ{LžØ|û†”-˜½˜Ñ­n©ï:Rßb—§Ì^êŽÔ8ü²ÆÌOÈÆè×NÑ\Ý¢§Kœí©¯Ö$‘-—8×°³&¿x‚³ SjÚÕ†êÝš5ÓWÏ0Îsøå†ÐF’³d¥ÅW‘òéF{y±”™?š@ò²@ÌNNÉ—RÛI«ç¶¡8¿Äº„É-ý¡"a)NG´·7´ww"ÅR¡ÙÓ\‰g94;ŸÒonIjÂäùSXü¡¥»»¥ÙìÑ™ ¡„V3ÔöÆ„mñMÎ✥¯+T±`údÆá§ïÅ×ýù ÒþŽfÛSžŸJ%üæ†z=½Dû »7+ò‹§"nšQ¿O» ¸Ò⫚¨™ƒ®IägKð½XïvÒ^&­-£Ï)ç}¡o¨Þ^K­ú|,VéWFö?¿£«îÞâ'‹W3]0ûü’°¹¥¹­Ñã‚~·…h??¥[ßâaUGW%FÏÏQ͆ýÛ;”-äc¬x”CÂ-OqS i+¡ÝЋåÊf²°Ð66j`3÷p?âëNèâƒEéh=2š¾ªA‘GhäÿžY 7.Q1ŠÂf4Ýv™•²ø{}ùW*BÝ%Çð½ø½CI“ûLŠv|øÌPuÙÃ:B9‡ß¬8¼[¡lö› èØyò³3Êó‰û6ð@àydkTΫ­¨V‹åÐÃßèw{ÁÜËèÙ9*ÕTׇ‡ðdôô^3ûü·&e#úÍ ¥3ŒM„ûx†ɦhÖl~¼aòÕ üííÁC7ža§9©­Ô§AçdË9 ¿Й¥»½&2¢8›x]Mê´·w2+s-xžڣ³1ÆEúm-ß¿óØr$v³C‡],q9ôÛý®¦xñ”bévŠ|aØÿ3}1ýâ%eѳ}ý Õ]Ïôó§8+­Â¾®ð>P^<¥8¡š;6¯×L¿zA¸]¡gKâaE½i¤@Æ €åPº§Y·gsbµƒ¤ezóê©_³ýiÍèÉ &ÏçÈî-±-l¾»¦|ñ’b$î e4¡ëñ½"V;úÍA,ÑaÇ–ævÃøóW辡o#v”p °¦ÃZßÑ‚ÑÅ¿ÙUÄïÜ|)£én®‰©`ülA6AøŠíïIFˆ3Ê8ž¤$¤6ƒíd ^™ ;É:K'úÝŽP ºÏM3úÝ–nUEÚß°p¨¿ @?"×ï?È›ýíÍ…ÛÏĶcôâ“ˉ`¸Ž;ßO”„|°Xý „$ÝûeºÕA¼0êÁc‡ŠçÇ;ù—¢¤ZûõŽˆ#_–÷´A}Â=µ$%  Ø6´«{gþ¯öRæäpÅ£Yeh+*lì’—tùdŠ&±ûé-½OX«é•¬…`Ȧ…@Ö;#/£XÓm’QeжÀMG¤PÓo€Æ÷’¼VúmÍèå Æ'9Ûo~ÂÇ‚ñ“Sb+Á47±ôÛ;ê=º˜c3°ó)FõôÁÙ†»?ýŒÊÆXg¤MÉe§$põô óW'ø}Eýî–2ÜX‘p”3èd,o MsuK·—äºÎrñ4ÆôQÐ%£Jõ5IYiZ>÷ñ2r,/Ïç}$¶)*|U”eòô’|9&îïØÿtCÒíJ&/´×7tµÅdÒ––/KüvG»î$y¨€RŠSB@GèDס¦ÞT¨ä‰Þ¢MO³i)..È'­€"Êñ- ûGðâ{–|9Æ”ŠnUziªD+Rß»0´f9Q÷{´›0~vB>³ÔïnØüt‹.&”Ë1¡ÞÓíkt6%›YbÝ¡ó1ƪۺœ1š•T7ï !§<)H^šµR¿çp³ÂÍ.X|¶d÷ÃTû€u2žÕy†J^Ž6˜Ù’åOPÝfµ.¸±(¥Å8–z³o)NN±eA>+I݆õŸß£F',¾˜Ó¼¿¦Zõ¤®FÏ—,¿~†Š¿¹a÷Ó;ŸcKñÑ‚§ÛU‚K-}%^a;-±¦aóÃ5nyÉø|Š%š«Û_nAçÌ¿|ŽJ»oÅ*g¸Üàžüt‰Žw6#µÚuEJ²ØˆIáF¥¨·]$…–vßRœ,QÉ“Ÿ/ »Ñæ”gcÚ«+ÚUÀ-§ØBÓ¯6ô´¥…6b\†ov$]2~¶ÄØD·jI¾¢ÞU› ©F½^𨴨Éç íöÎಌ¾©@‰¸YÝÒ÷†Ñù’xXãƒÔ%ONˆ‡[v?í½|†ËZ6ß¿Ç-ϱDܲ¤[­èk)VꆖRç4}«]ž¡¢<íjMè5Ê$úºaòÅŒçŽÃÕ†ØÔt»F§¥ð½•Öä‹‚ÃÛ7´…Ë݃ØÒ¶03}º¤{…o5¦0tûP0ûú)íÕšÚQŒ5ÝÞSœ/±ªbõí;Ìx¡EÖjÉ=ä¤arp2&VÚÛ½´N.ÊAÅãÞÖÝíHÚQœ”bC‘ºVðšvðõ·­Ð[”Â× !*¬•–>e3I´ä:‰WY!:¸Ó*öTo7  Ü!|<žÌ¢Ex9¾Û¦Òv›î‰ƒg¼mhW‚×äË &Sä ¥P™Å¯îؽ¹&ü§^çZáwùåf/ÄÎ?¼k}G»:|„°üˆOï[Bë¥×ÁƒO” tû¾‰Ø,gôò*ª›jÈN|u 9Ëß_Ò¾~OP9¡ÞÉô23÷–>íFè\Æóô-Må™ÿîíϯ©c2²É S@¸ó^?äsò‡|ÒýÆ¡%©l˜â× AòñHŸjˆÞ`Š_ïA•˜¬§[WD/ä!í ò±¥Yíq‹S²"Ñ47{Ê—Ï)§‰f“•ÔoÞÓ6Pœ]09ËØ|÷=»«ŽÅ>#Ï<Õu…?T„É'dóyáYûžñÏHë5A¨(Ï¥4v\“»³bçØt”—'¨î€o¾Ù×Ïð›÷lßÔ”'KyÇäz¨í5¨Pq÷§wL¾þšr$Î3üá@·k…]=T‘ËÔÚ]Ãôˤ͚¦h…ÜoJxØ V—„Ѐ$ÓÔûˆÉ ÒXªz4côt>¶·{6ßþ‚'“ò&>œPkÌ h´Ã•Å` ô‡¾7–NßTt«š‡cL,””ˆêÔo7Ãu4r”ÔJ«Ìˆ²kþ°'ÆDh<ùé £ó±ŒâúÖ¡´#5ÚµTªû»[B4çäxÖÙâW(ª«±¾¶Ê'Œ.f´ïÞж†ñó Ò~M²%åù„æêŠ®3L_\ª·×xrÊó3tЍLã·|ÄÖá#¦”½ßîÞ•ctqNVBýþ2ŠÓ©ÞÉ).&4ï®é‘òò­©¯©®î¤ªu4bt>§»»&ª1ÅÜR¿»C§dÓ1±nÑE¢½ÝÐ× mãççÄzG{èp“)Ù¬ Õ{ª«5ºœS,rª7oñQÆJù…ŒqCÕ¢Cå9n$íœÚBõö\Iê”+IÝŠ)å|BsýŽ,£‹%~{ )E¨kb(.—(ßÑÜUd§'½ÝH`Íè!Ì)7É2bÓ‘]œ¡º]“årñ$ï:Ê'Ë¡üÅ¡‡ 29Úiš«÷Ô·{Šó'äS¨¯w¨¢DûŽè½ÜãKÂ~'¡)Ùéɰ²zsKÔ† åÓ ò2ÑÜnI*'ö{ºmK¾\Èyìt›;-èWkÚC xr³Ðn·C1ǃPbÊùBìI)’O˜Âѯïè*›ÌÀWt»V©ãRF´47wÄ”‹åÄ·’¥èv<ÅÍ ™b†!g¡Ò} ;ÅAéÕƒ!PËâûA|Ò¤¾K†6ÔŽ  QǾƞ,0&Ðí=ÙÔÒ\í0Ó©¦U‡ e Šsaû ¥6¼Oü¾R÷ ´›M¤ '}ønSFª}È–BÞÁ‹>=®ƒPòûíj_Zò+q«÷g§d3+Á@Ňâ£ø$\¨GÈ?õðܵšÔÔtk!”0‰˜‘,|û•T¬›Ì«ßõèÑ”ÑÅBr,«–âüíJÛá ïikñÛ5þÈϤÐЯö2õˆÊs ›b,S†ã±LQ6Jó‰ ‡…³r\é0V“ˆ„6¢sƒßèVì(TfÃèÉ%ÅHT¢½ÝÒï*ÜbIy6±ávƒ›—‚n«|ס]†¡áP£&3ÊeAwð¸BSýü–h&ŒŸÎñ»íÎãŠZší;[RžÍI½¼§}ÉÍû÷„`eQÞ6„6J!L©iÚÛ*ωLÙÜl†ÍAg†ú¨É£§sb#èÕØv2%³nT¼Av6Ç•F,ÅÎÐï6ÔWÛáZ•úÑÞ)áMõj8Å@„!Ȫѹ»·ëhkÄe‚”°eô þÐ?ÚžÃmÅâï^Ðüø=ÛÏÉ?}M9Ñ~Ù€1ò Û·h•hv{t.Ðx­ÿÿìýW—$Ù•f îK„*7ê܃e¢P]Õ=ó+g~ÙôZ]™` Î*zÉ<Q3sÈîZ]«gü%¤º¹šªˆÜ{ÏùÎÞ}Ó¡“b#Õ‚O?£‰Ñ£TŠ-Ë»M¥ìf¡©p»°‡Hƒ¢ßnè[‰¤“9Yiñ}ƒÉ¦„ú–ÝåŠììó/cÜŠ›ßG]&Oa „à諊3òy‰owt›¢L’c’…©D>Ôôd'çÓ•'¤¹¡¹ÞUOè"¶( ]G2‘ŽúmE}±D儵 éØÒÞî$ßWªÖèD6Ǿwª<Êä˜,‘ ývGðš~W1þê3fO¦ôM'·VÛÒ®Z¢k¤4Î%cÃ]š|ƒÉ'h£è6Ëah*‚-)Žsš÷Ò±x2§¿YbO1ÿ|Æê÷¦Ú'œþ—¯ð—o¸þÄtÎøÑ VÐß5¯î¦ß•Έ±%Ô-ý®Âëœãß}›+êe‡²v,,a=žQì|GW+г*HÅw÷æ}L) f_³ûæ{\~ÌüiÎæÛKLQ¢•ÅïyÎþ»7ì×-IYR/ˆ¾%´šäxD~2Ã]¿gùÝÙɲvï?à¢ïÉçSBÝ@1!M=í¶%M°eF:Ï…q›xAN¥ÚK2!vK‚39?¦¹zG2Ž~ñ„îí5^GºÛ[êeÏÑÿüKôî†íEKùèEG·®dnÄ»;f|‘b6¦ßTØã#Rëñ}‚2A¤4íŽjÝ3ÿõç$º¥z·&9š“Ð.+|é·KöWFÏ¿`üȰûæ=ʈ®•&\“¯žR¿ûíEK>‘LÇ22’XÓ²þË;TšÑ7ùéÓ'#9<ùüšfÓ1~ò”Ñó#Âæšê¢¡|º yûŽÝmKvrJ–Bu{M»ïå™Ýšæv"Ù8-ÉdŒ«×’_žÎÉf9*ÍÉ Ïæ/¯è}I~4B!T'¢Â#Lnï"a ¡6ä§SŒvÔWú} ?›‘MšÛá?ödcUÓ¯…Y¬jñ2Ç·{ª·7䟽 yêµat¦¸ý·÷äOÏPm'ÚûõLIqZÐ\^ãbNy46pl mw_dñ;LuWN`ˆUÄvk!™Œ DÒùènÀüe;0x»‹wÜ~ý²ügk_¾î˜|ñ9ÓgS©$?‘JV0J®ÉTñ6/tµ Ȇ{ŒØª‹KH§3K·ÜR¯7$'9úò Íë¨VžÙW/Hò Õx#s:q0¥6—·DS2yyFØ^³üÓ[ôh‚Û‹ WGOЖb~„N;ܶpBßHFƒ‚Þy¼BE2² ÄxÙ­›‘­ÀÕ¸}@å–Ø×w)aÄëáJHOfdcCs¹#™ZšË ÅÓǸÛ:§Ð!’ÌÑÚá:M:I¨^¿§Ý4˜2#ÔƒœèL²Ñw4ËÝz™1ûê~}Íö›w´CgsŠyŽÛoh÷-vT’æ  èWk8:cþdFõæt º¾!ª §¿}ÆþÜËåÑ TOuµ"Yœ2y|$N/Å š«%¤#’<Á5;|¯Hʨ3>"ÍZ6ß,Iæ#ÚÍ5ÊNÈgSòãÙqÁêßþB¯¦œþî9ÝÅ-ÕÅ5ÁyÚíô”òdLô{B§P6#?›‘Ž"†îâ7_¿Eå¥t){>¢DY‹Õ ÿc ˆxK~4äköŸê>²Ó¯n¤hx7DÓû!ÀÃúÙ\ñ=°ûÿ’±|ßÊÙçä0;G:—(J¿Þâº(¸Ã®tÄCeæ“çuð~½ µà1ã©T?—;Ìt‚Í ýªÂŽrˆ-§²?Uà÷*-Ц§ß:’©PM|ï¤ê“'øN”M¦ÅæfR™œ'Èuá:º]K:ŸÊ5”$øÝž0XAM’b§¾ÞÓo{É’ M'Úú,Eé d­‡Áìšn[˽«-ɸk£í²É,n¿§ß5CÅKÑ.7Q‰ä!£jPÐv:O‡œ§ 7¦ÆC4¤³¿Û‰´,„°«ÐÙpl6ƒàK:N*+I§n½ÆXüõšÎÆ$“·­é÷;H'dãdÈJ2ÉŠd6&Ö®(œÌ`XMìÝ}-ƒumó æ"¢(S²©?P¡¼°›êÓ&îƒJš–b‹útæH=Ø„7u|ïi§;ÊÕý¦sx*:úÍ~pȳ(úˆ•ľ%=(æ ÊFQA…JÔ ‰¤‹ ±kè¶ É|†A f$Z"IN’ú¦Ád&Õø¶¥|Ó¢ ù.âÀË&F¢ké75f2F+ÖÞÅ\hÀ‡(X‘®0|Rõwû¾îQi*´0×CP$“‘D$—k¢¶Ø¢D[Y\Û :4ª§^¤YòyJÅ4´f2†ƒì&ȳ[›ˆÛ;’q!åàðäÉQ÷qS•È@^ì:°¶Ì†¨_©QÓÜ!…}SÑï{ò“cð5ÍÕJª½z X Ú„amo[¹'9n½Ã£IgS”kTÄŽsúå->JgF)Áñ†ÞË38ÕôU‡°I ]nˆ1¨2©TùU‚‹HLkT·ÙKîAäæ'Æ¡"­¬•½ÒnO úçS‡Ô\è²VJMIÌÝô¾NRŒ2÷ðõOŒ¾ïî©ÿ¨šûÿè넺%=Âñ/Ÿ›ú¯V ù(oÅÏë)"ʺM3 ,]Òm{ò³ÒI)䮿7øi>©<øï‡ÍW÷ÿDŒ½5 ˜(kåtìÜ}všÃ„¯B'`wÍðPÔs܇,t$z+–¾4ÐnÖ¸F6·ùËŒg‘ý‡†ìh!¢ŠMG~zÎä†PÓ.kÔ`:ÓG§diÏúû÷èbDV¦t»ÉìœÅ—G´—X~wK²8åø7ñû%ëïoðu å„ñ“STÓáÛ-ûë5Éô”b–£Ç»šöbMrþŒéÓ ë?}C³­%‹¡>y&}ô¼x­t>aôø˜X¯é6=ã/N©ß¼Ç,3y:¦¹ÜЬk ¾î‰}KÛŠãÝõŽùoê×ìÞÝÛd×v(ÿþs5t=ù“gä©cýíkôÉSN¾š³þý[&¿~Îö_Ãô £YŠÊSö?ü€KfYOµƒÓß~Nõý·l¯–øP0y´ ¹ø€ž3:Jéw;P9éÑ”tde3ZÝpõÇ ¿û'Ô~ƒóqؘ—4WoÑóÇœýî%û¿ü‰Õ«£çÏ Û⻚ÐiìhB~\’L2¢è<£~û#7|'‡ÈrÁÉï¾ Ò÷½Â·ßЭÊÏž“–Žå¿|Oç"Å|]KÓ4›Ë|‰Ê(ç(ÕU¢&¸ ܆¦ÕLžÓ_]ÈÈæsLioV¨dBºÈq» nß ñ¨n±ãÙ4¡»¹¡«=Jbìi6{&ŸÁÉ?=¡½ºdõ‡èõ˜é‹úÔuG6ŸÐ]oHŸ“§êzC³Û““Oí]GVTk¦°„¾"øPd×N 9ÇuîBU‘LsŒw臢°ûýǃõç`Œ=T¸—»z°Qy¸6vòæ…Ö‚mjºu;`Ã4¡ÞÑï«QAòÙш~¿5Â$ ®NHÆ2ð¬”Á;áFû&rú¿üû–«?^1ÿç_19R,ÿô–®©QÉ”òÉ£ãœöbEz¶@¹~ˆ V‚ß›ÎHÊt¨èÚß ÝªÂLæäG%&¢(Ö¡ØÜýîŸèΕWïðMÀäctfè—×xJ¿|LwyA»Ùã[EvzŒ ŽüÉ1͇WÜ~s•X#O§"ù¤Äï=ÉbŠ:ËÑ*àÚ=íõŽôñsÊiËþ¢gúò„ý«+‚ „¦F)K»ÛI¦¿ÈÐùˆÐmi®w˜ñ”ÑÓs[±þËv:¦¹~OSiÎÿŸÿ„¿}Ãú]ËìóÐmÙ¿¹Â-Q>•‘M3ªËw 'œüö3ö¯¾Ã¥'<ú¯/Ùþá,ßÖÌñéȢÎÍ÷7$³Õû×ôÎ`•²·ÛbÏŸ0š³þÃ’³GŒO Ë?|MHŽ)&#ÌHÓ]-Ñã“— I˜¿¾äê_¿' ük“ˆ,'òÓgrt=frÌüËSš7ø`$:Kè¯/Ù½ûDå­Cì=ÄÈÿèbˆèÌzGÿWÁîü ôG¯×ŠÐZç$½“[øº&89ùJ¯ú}å¿üVŸ`é¸Û$‡®ÅW *¦tƒ¨+}Õ ÌN„+;´ÿ=öÝÕFŒ?wšÔágÇ@p3ÊÑiJØK–X†2Œà¤¤ ÷q]†9œp;µÅ¤_5ÂZ®ÈRèÕ¥R¢0~¦ÀÕ%ÓgŠ”ÐÔ`Éxj†Š¦#¸A²’&w*×¾ter Ã+b2Yä!< ¸©œFõ ãÁS,^3ÄU¿ø7÷JýT s8•ªHhf2¤WwÂZÕVªÌu+­´¦%8y:³áà bw²!”A§·“JFlù.µl¨A ðj8…¾÷‡•›»KyÈti©f*« >È€jï¥ú©åýG?\¿F àÀzÀÀüḛ́È*ôp€SCµÙ7Ãõ‘%RD6¢pNõ¶|G˜dÀ—Õ7@ï¾Ë†¶GJÒi)Ÿ™ïñU{·x*޲ÖÊ{'©¬Až)#˜E±,Ö÷LéxôÜSQ¡ó“ØIä‡ë+!4=f”êsVƒ6{¨"aÔ ¢²zÈ}ŠàHç9ÊÄáù Á9éBýìE§†ù…ˆJEA»V © x%ã‚Ø÷æJ6·ÑyL.FÑØµ„VâeÊjpòìÂXLšƒ·wÿ`—ð Ž$J‡B ˜qNhº1.Ý*;*%êµoÄrª5±éŠÂ¡%ÝxxF+ÐEÉ3É’ö>Uø}s×úWƒOiÎð_5Ã{’Œ®-sÑ$籕ï×ä ±÷òŒÑfˆã‰¥Ó7CǦä‰tð¢¬7y6Ú¼œ0€cƒ^pVÎ 1ºÖ‡5ÃÞU`CQTX²f¸7ʦèTáªNr½: d£€IÌ(“é¶¾ga·=f˜A l™AðríÅ(ó3‡{Ù˜×ïÈýº¥eC‚ľ›ëÎðý •LÿÖúùðzÖC…Õ²þëí߯µ\1 1Y¤Û¢îŸY‡güƒ!Iy8Ävàû÷© ^9º”¡ûP7"ÀHR’2Ão¶&„¦µôLàäÙe‹ìî~=`Í¢ïï:;²Üh‘kt={—q¾«^#]ieÄ2{4T‰ˆHBTØÜˆŽÜ©¨Vµü¬ÄÜ#£`ßxx0ŽÂT6£Lö0G%úÎØllFªòJi”ƒHM»þÞ­@ÇOL„Ÿd %fñÛÝJâél.ˆÐâvE< D-,^j|=ä £G™e:öWгÇXQöÞUNšZ’Å1“/ÎèÞ½â꯱å”d2eòüZ¹9ï>'iõçiÞ_Ðm=öèˆr¡©¾ÃæzO:Ÿ‘& ×:\ÓcòT¬z*Û;2žvÕ2~~Êö›ïýâW”E}ÓMб£¾ªðõŠzë˜~ù9¦ß²{I×9" “'°™Â9O¿¼!¨“—g‚Š Žîú–Õï‰vÂèx.À BW‰]L!9Ñׄª–EÛ#ÊäÃàÀ0„Úxªë+ú6ú@~|Æü«G¨èØþð옴T´Ëšôø˜Pmp­ƒ ±“)¡ßÒ­ÄÚƒ‹Z>gúl»^“Íè—KÈ&L^S¿û‘›?_Ÿ?¡<™Û­l>º€ÕÇ×´ÒøªB˜=_P_oÈO&´·[0:/©^¿aó®"åäÇÇøú–ýÕúÓõãkö£º—XFzþŒ“zms‡ê÷{êË[‚OH&%íê;„eÃêÇ+ÒéT†E3Ïú›qÚbíˆòx*×t'U1;™‘Œ2Öj¶´7yPGO 3.]É'·§½$M‹™Ÿqö»ÏÑ®¡½]Ó®6Ô7 Ó_~AylY}ýš¾òØÜ`&GL^w{ÉÚ6-ÕÍ;9b|~Œ2êâ‚à´´Ùw{Èf,~ó vW,ÿôšz¯9úÝ/˜ž%¬¾yÃê›ÊÏŸ“Ù Æç Û?¿¢Ù÷IJvÃÆÙ{ìxL>] G)Ižán/ØÞtÿö)«ùsô‚£/¦¬ÿü5û Œ'Ò)çÌ?{B÷þGv·=Çÿõ×ÄÛ÷ÜþùŠéo¾dtœÐ7ŽÍ÷¯©o÷èCööï¨@GçH‘$ûw—¨bDV¤øf¿| Í’Ûï.IæGÄê=='55›÷KF§!TÔ××x3¦<9f|6"›¥Üþé[öW&DŠÏ^0}6¥~·D%©°Ðw5¾†ü<§ùðfIFÌ8¡~ý#qrÎüQÂåû Éô ù"ý÷ìch.®1³cFÆCüBblíª&zM:/0 ¸º¥¾ºÅ·L§¸jI}±%;ÌèÑŒØ9©2ÞÜRoj|“$èhHõ=>eöù‚úí×ìñm‹Š‘zd˜ ÄeÄ,èšáPf"Œòt!´€"CGEŒ=Û×ï°G™œh¯o¨/WØãGÌ^,h®¶dG ë?|KÐSŠÓ#FOÆì~üžÍ‡†¬ÈÎaò éb$1«x8õBòF*ž¹"4{\Õa's’I^âz /Pó€õ`}øh½ë»u‡ÉSL®ïÙò?»Þ~º>?¨lk-ˆÚ6âw+\kH§é æÖ ¦¡,?±ú*¥ñÍV6žÊ|ü|ï{úºeôü'ÿô”úíkÖß\ÌO°e‰1-Û7ïE–¥,éÑc\--z3šÊà}ï?ZÛcˆØqŠÉÌÝg-Å.Cl;Úu#þiŽR"¶êwÁ‹ž¾¾ZѬw/>§Èz¶vLž?#ì®é˜~yFóæÉ£ÇPݰúa‰¥ éøˆlQÞ ÖÇP ¥ãÑS´nè¶{”.±ÓŒîæGŒÍéw;âs‘dV’”žÝ× ºÕAOMé7·  òã9~·¤[wd'ÇhÝÒ.÷¨´¤Û\Òn<åééQ‰»½ ÞFÊó)¡î°ãù,CgbžÝ|ÿšúº%),ºœº]›°øbÁæOoIŽÏÐ&Ü[zï¶=ѵèù ÅXÓ\7Ìÿùst¿dõÍ{êmGR”ÇGd§òňý÷ßqóç÷R\U e,ÖX|×Ì&¨®Ç¹ø1Nñn¤ÌÊÉOç2°Š\ÔYBwsÉþíà ´2Ódœá÷•äψwâ¥ÿç¥Ä ugxùÇÿ¼˜<—E×?¨ Ç¿bQüÙœqüifZë¡"à>Ú\Þ ]ôî>+tÀüü­ßóçÏ.÷žõƒ3¼Ñ?…•¨ø‘èeà ɤ=è]/ƒV* ó‘°W÷®iEq© ¦HE•Ýwòk}]>T™”±r¶ò¿¹ÖIÞ0Aê l‰ühЇ,•,CŽ€"M¡ÙÓ5;aoÑ÷„aqRÆíp0ÑÆH¥ÏJÐÜ7“§$£b˜lnðQ0¢n> »x!P®/¥QÚ û´ý“ëBÊ7w9¶û‹d¨t{7VkåhŒ5Ð×õðž….ìOÑxË‚àï>è—AØ‚˜ÜËWIŠŠ3*$ºm$Óiîµâˆ-Q}¬zgÈÄe›f„¶Çäš~×J^r,K×…{vy C6oPÑ £6C•d¨®ï:—!T3¬¡_­‰ÆÊÃZ!†´Nª7‰ŒNV ƒáá5­Tɉª<Á${QbÁÝ ‡ÐYAR¤(?à‘<Š-Rb×áÚ! l4&ÏEÉÝ„ jÐr«{4¥:TjŻ֘²@ãq›=}HçÒÌЮ÷ø> Ã`¢ ÖÜf/SÝÖ~\µ;``|’¾S9‚²ØBÓo÷DR²Y)U{/Uû0aÔ ŸÇXlfm‹ï!˜LÑïöQQzP{7pÃEÌ”NFĦ¢ë„"£†Ï?ú(×¼I$så9‰=·6Ðo+|?|'ã=Ýzi†ÍÜvGÔ‰´Ëûï5Z^rÚEŽ&àöÝÀ©:gÃ3Y!•/;–aZ‚påc+ƒ¹ÑhL– ”’ÃèƒL/8B0ò3|?èÓ‡V{ßµR‚ŒÁ£óRrâÛN(GAž·ÁòîRÐÈõ)×—ÆŽÁP±SA¾Û Ñ›hÂ@™Á&X+u•'RW zHærm¸Ö‘@ODòÛJ?x^¨kŽMxˆþN>hyæìHìHƒ ÷2CÅ^†9*z©@g©PT¢ÌùÝž˜¥h¥á6üŽ1š{}¶Rèļ8ãß=(©¼*Oôò9hk†J´pŸº“"ïë×FI@0(Ô “ªôA¢¢Q1â}'b¤C'Ú7ø~ V(?üZE¢V‚[í¥¬ÐDßmN:Néo72Pÿp?¨†½„Öq¢ Ò[¦¨àñU'‘DÜvE³ªe¯ùãÇÓÈæëWÄtNq:¢»Z‘žã×7Ô«&Òª­kšÍ~ØÍ(OGt7{f¿zJûî=æø16éÙüðžnß“ò“)NO°4lß¼ÇÎæøÍ†¶qÇsp-Î+Šé»˜Ø†ýÛ@ÓíöÃð—\ÛÓ/?#n/©«Hb¡ÙV÷V3£Iò ÉhÌèIÁæëïØošHvrŠ5=ííŽìÑ#ÆOt—¨®j²óGŒpý¿ÿsòœ“_,Ø|ûŠÕë%6K~æ9üןۡkIÏžQŽ›ïß="É#»·Wdçç„õŠòó„ÍöKšöD;eöbÁîû©n·èlF6Ÿ`SM~T°ùæ{Ôì1‹/ŽXÿþ/l/6d‹96‘¸˜²2§Ðo+1VJôÖu¤xöƒÇ¹ÈèñŒîf+R¶¹;ìÄ ÑY‰gƒU3 Å×ôÄÞÓm[ÊÇcv?üHµñ$EFØUd/^°øò”ý·?à}Ayšp󝯙9'ÿüYP™eýõ·ìnz’ÔÐm·äO?cúȲþú†tQÒ®+æ¿xIl÷`slÙ|ó2ʳ1n»¦¹Ù`f'Ì¿@±`öÙ™ 3wÛWoéMº˜“N ò‰âöOßcQõ-ûÛ=ÚZ²éé¬Äíné·Î3ÚeÅâWOÙýøÕ: ðØ¢$Ÿ-P™Á× ';š›nèÒµ4×kìô›x·,!)í=;zX{ú͆æ¦"rNšK A=œ z(²ŠAô^ý¼HÅè;¼â„äv=àá~Zy>µ”Í1y:Ô°nˆ^BOˆ‘Ðô”/ž3}:§þ°"jƒ±Z¬€l¿¿ =?Ão/iV=ùÉ)ù¼Àí6`K²ù|TÖá¿Ã˜ÂÃ*ýaxÐjúª#FƒÉ4íÕ ¤cÆ/Np·X}{EvvN6Ÿä­®þå/.ÈŠ‚ôlJs!‚¢ÓGd! I´%'[Ì¥S÷àcJ¦ýí%.Ž)æ°ùö=º˜“‘& ·¿ÿ†¶³ØLß-†¡iÈŸ<çøŸžÓ½û‘ëßÿ€š=æä—'¬~ÿÙ󗸋×ìWž“ßý Õ]sý§˜,%žŒ5n»3fúbÆê¦mS¬‘"[2›“N’»ƒˆXŽ{šTæ£ý_Œ “0ãŒ~yE³®(?côdm ¡eùõD3gtvL2KÙ¿zÅîbƒ)29,ˆml°†!–#÷’ɇ¡ÏvÑR0:Ê_yF*…NúÛkªKTúPåm4Á ,¼8Y–Œ¡_¯©o¶RôÍê'y¨g­díº@qvDØoh«þ~*7 ØXýÉZN“ÁÉ)1:O:ŸS,JÉ2ÅO´Ù?ŸSùdý7^oþoÓó‹}ÐýÆAÎæ®þZ…>þõÅê~À0<Ø…‡{UèaA´¶¢ÝŽÃ”³—“±6j¨ zBïD_zˆb"ë®?°úî•dý}ßE¦_¼ \¤Ã&Úá]ø)¨ŸN¼+¥~¶¥ôÖ‡9”1Þ‹>ÒyËnB¡´£½• Iz|L2J† õ'¹g~^¤‚R2ÐÕ0$(úLS”DZaÅ¢ ½IDçINDcÝ,Ù½¹Æ÷÷6§=¾L?Šrí^Þ§-ghj¶¯? ÓR0fÑ0ýü±è9“‚òlÌöûW4;M66t›št2Céžêê–t2ÁW=£é¯?ÐVP>:¥8ŸÒ]½gõÃ%Å£ç¢WßKþ«hon1Y)Y±WØù”âxL¿ZÒ^¯èšeJò…´%Íh.v8£°£”îòŠÍÛ›A!+m/¿ ­Üá{±“1É$íW¸Þ’Œ4®öçH³–Ýë÷tÕáù±“)é8mp»%õí[.Èf#­´ÒÃ!ò0p±‘iv;=bòü\7`™Â Ê•¡à†ù‡Vn~e4¾Þ\ÂäåÝòšövKßt„`=:#_äØ2ÃíëAôP` ¾§¾¼¦º©HæG”Ç%íÕ5ͪ%=š£UK·éPxº¦!™0ÿâZ|§†œ\ÏæûWØ£G”SÅö»˜“s¦ç9·ÿö5!]°øås´ï„ú’Ȫä[Ieqpuߊ•Ð9Ýí’ Û5$ÇǨ~G³nÐV£³£5ÑÒ“#ò±cõ—·èñ)“sáén~xK½Üc’„d²À¤žö⚌Yüæ45¾sô« Ae¤ó餠½|ÏöÊlz‚N<Íí-$cæ_=Ǫšåß>{†®Ö¸Û%! ¸ïñû%›×ÏžBß`òŒd¬Ø|÷–jÙa3óÀTe¤½ê®íð>J¤D ™VZÝòl‘ë“{,Øð, Î ÃiCõJëûçÃÀæ>`¸tšˆFú€¿r–Á¹!ç+r∖òÑ£³1Íõ%»[É@oão<·•\³z|Äì³'·§^V #ýfOñèÙTS_,évüÑ &nÙ¾ÞœœPžŒQnÃöÇ%ù“3ú›KúÊb'B£ˆÑ³~»Ç¡=©ÐãzÍä‹'tï_ÑTeS¦Ò¾]ÑÕŠlšÓ¯V`ÆdóB¤ÇO:T]ß:lž“”#¢r2 k²A¶Ô‹JÜE‰÷¸Ž®î dŸRŒ;V?¬8úÝo°~Åíć‚üdAq<” »Þ²KzvÎô³G¸å5Íåe ízƒó–ñÓGd£´ÂŽ3º«¬_Ýb ŒzÄüË3º‹wôMB:S]| üœÙ‹ë?ÇîýŠìøÉܮǎ3úÕ e䨭rÜ!RƒØíüœÉã„å¾ÁÛ“ÇçÕRßlÐÙ„tšP_~ÀÇ‚|žáwÕ}ñF¥’Ö‡g¼»÷ãA3¬g®9Dè"Áð “ܯé?}½B=Ì;¨OhVwK¥†®¢½‘j±údJÌÅÝ öíз"¨ ó_=¦~ÿ¯§h·¥w i®ˆÑ¢´ÊÓœíw—Ø…Ð.²ã õë·øtÊìÅýêšv§È’5h3Ù¨"•¦H©Þ¾eóf…I¢sèñ‚Å/ž ]#µa8Í÷ÒÙî7KÚU5 ôÐYJh6Ô—7• LÎô³s¨×lÞ,)_¾`rZ²{ýA6n T6"[þQ†¡5&5øNb”¶´è4¡y÷†zk˜>—ªpÏŒÓß½¤yõ=Me±v°Nj%|ë®G™DbžÁɰVxçÈgSbßÈ¡ÃfŒ?ŽMZ¡{D%À…LÓïéâ˜É³’êí}—“Î,¾Úãë3ž‘-&Uò íÍr˜ûR÷4à²$ôÒõ7£1ùÙ1ªÝR½ß`¦èÐ:°óÙXÕužÓ^¼cýý5*Mä5æ.&*׀̰…þiÓÿÓ}äÏÌM)kñ›ÍíeíÇ…’Ü烟;GrrÂôÅ)þöšõïqþ^“ƒVã_ ŒDe)ÏŽIÓHs½CƤcƒ&ûå ›7ט¿ûß)¦Ÿ?%i\ Æ+Ê?Sÿ›èO+ÄJ6fýnO¿ëîÉ MÊÃ&ø^*žI2TAôpúŠÿNúPÍ*xîÐò¢6)Úy<4®í€%4ÙÉ1IÚ‹>ZI¥Ï$‰`ÇúÀèé ªkè º•£|M½ªH&©¶0yyNØn /9óþ ×'¤…´›l1A…Šýí–l>‡¾G#ÌJ#¹'áÖîØ~X‘’ŸLÐÑÓÞlq^Ô›&I‡Üß½%]LH Móá†à½à¶LIV&RŒF–£ÙшþúŠÍëk¡•dfÜ‘)†CžÍK’Q"˜ —äÐW-¦SåTï/è*¹Ö„®` ‹¶V$'Mu‘êè÷51h”Q¸º&D-UÝ®#Yœ0}vLlê!c{àJ+tªéV®•Ü™²®ÞLÁètN{Mßtt»’‚|”“ÌJÒùˆ~-(!;Ÿ‘Ï BUÑÞ®iª[ŒIrðMO_‹DƤЋ:Öwä%£ó#Lìho÷ø`dÂ{³ÔV™Ðï*b1f´Èؽú@ÌFLžãWk\§ÉN'Ð5t[·håi—•R Žˆ†™ª#™NQ¾¢­ÜÀ‹6kˆÎ.¦dãÀæûKôøˆÑ©P&êë5nè$™dDRjú͆>f,¾zD÷á ™ÝM»RtJh¶ÔÛ†´œ¡ihw{T1cöò w}ÉîfÐ1¢³’Ømð¦`üh&öѾ¢ú°F¥b•+ÎŽÈç û·Ø~Ø l‚ÍYü„´ÌÁ÷tûúŽÇû³Ñd¦Cý;¦ÖðõÑG’rÌøéÝú†í‡Í ø{~öaÎcx0ê„l* S¿Úá†Vt2‹%ôzI¿Õ”ÏàwTo+’Å”ìxŒv{voÖäOOq7—ôt|ß Ï2EèZœ#™5оthwôm É2l™£m‚Û/é]J6¶t«:Ÿ’ ¾©h·5ÎÒQ‰&â|ÀIG˜ÔãÛeRƒL¨©DÑžg®s¨¨IONÈÒ†Íû=³_¾D5vooˆ*ÅKz2AÅŽý»[º}ErrÎôÑ”öj)],pN::I>’Š­wØÙ„P¯Ø¼ºE§Sù„é³9îê¯2Ljho—dOŸRdÍ›k|ˆ$ùmœh„ C·Û¡S!-¨$‘@Õb‹’$O }Ï),Ûo_Ñ…„|>ÇDGßõ(’N2ºõ }›Pw9hÉfÔŸÃvxP'£ôÞz«• W5J ÍæþúûôõC¸™ÏÁVvˆFýuÌŠ#ñçÿ_1¢TŠ6CÙèØÐ᪊à2¦_œP½~C Œªñ>%›&CØ¡ó1Ù8²ýþ;;BÓFb{¶`üdAì÷4×í•N>#²}©M&%íÍ5»tj¥C1š3}vL¨vws9:5ôë=}ã$ë”+u†ÉR¢oh·û¡éI§²ÂR]ÞbON/JšÛ•túÒ¡À¤ó16×ôÛ¤Ó ¥ ÝÕªbòhÌæÛqfÊâóSš·oiûaíåð …p×í–¸Eðï=IYQË“dOথºÜJ°ë2‹e)ŸNh/¯éÛ”l’\C脤9Øè¤(q@'c¾¡]ïQɈühD¨+‚³Ø‘SS0„>ÏȦ)!Fš÷Ø]ì°ãBº3ƒƒá®fI1 ï¶tá~ægç醓¾´¯ö´BÊyá°f¨| VÒò@¾ÂŽçLž£ƒ YèTS½¿¤Þôó·†ê ÅÙ‘ð¶­¢¹º!ê1ùqq‡2Öü„d¡“ÈþÍ1ÏÒû¡®F¾+Ê3—ÿvš8wùd-Ø]»æAöK>E‰ ¸}wžÐÔèlD:ÉpÂ_­@+T"ZbQH›A“¢‡›ÈmEkI ‚Ðñ=®ó$ã)±ßâBÎø|D{½';™R¿{‡Ç‚ ä§ÇÒ¶ûp‰J§hSÑî4ãó’Í÷oPÙœñ“Ù`³*° ¨Ôâ6kª«µDF+§ÚdÄìÅÕ¯é:ÃøÅa»¢Y;²ãÉ<§¿Yáö{2C»†ýÛ T>côh[ÝÒV‚y*ÎNÈ#‚¸Í-}­ÈNP¾Çו`Ñ’„P·Ø©H!„Ï,’›¥„jÃöõAÛæý”‘œr8¨6­¾s2HYZúõmÇ”Oçt×—TËšòé#th¨.6‚¡‚w2Œb¥RºÀèåcè6lßo¤Ê†–l>aòì¤U½ä·]Óm!E,Ž)&)ÍÅõ@—ˆ¸.2ùü1~uÍþZ&„C»ÇäSò¹aÿæOF:›I5¹ñd'SÂvM³jHÏNŒh®¯©®6ƒ¹+¢’œòl!SÄh0ær :'[€—Âdêý-*-1Y *:iŸ+Sh Ò2‘¡» ˜) Æ+¶ /×ík‚’ÃBztBq<¬W½¥¹Ú¢Ê9ù<¥~ós|‚j÷tûßõd§çäÓ„êí‚)™<*Y÷žâÙ ’ÄÑÝl¨W{ìtnwЬÈÀZ²“´5Õ» ÚÆÏ£cIŠ[ÝR¯öéñ1ÅÑ„Poh®Ö  ŠG lÒ³}sI» h¥öCÅöͤÃBâ‰J"'ÿ×é£þý vè{ÂP¶’, ‡œ¿ Cî^ ÊêÉ¢Ëã¶%=*h>\cçǨУòš[6¯–äçO)Ž4õ»k\ë *gòüˆêÕ;ògOñË (˜PÑûŒ|jèvâdAlVl?¬=Ž õÕŽôh¶žÝëK¢JÈŽçÄfKô)ùqÎîõœ3€aòü1ia1Ò­—´7 ùù JÕÔ—Hö v”Ñ­Wxg™<ŒÖ=ÍÍFºrº§_ï°óS²‘bÿú = œ'™OÑ:¢„tž Ð(+¬çn¹C—òã‚æb‰JÇäÇ)õûKú.¡8bó ›ê¡u}8èÊTw³&Ú m"ÝístJš8ªË5v4F§†ØVD•‘ŸL Ò¥ ¦Èh//Ù}XË=z‰¾3Æô·K̼Ä]¯Pã~»De3ʳ‚Ý«ôû•¤Ø$³¢Ëó_<Åø×x’IÆú/ß³»iD@gtrÈ¥ÉÃ9tAå,¾zNšHÕ›+Ȧ”g£{6ãGÀõᢰêÃ=š’O“¦ðãr{Œ?p(õ‰†ñÁF8ðQûc´™lžBUӮĮ§ÔÏ”õµ–Ö– bÁIF$e"ìÏÖ-Lfw?(i,*Ñ„¶T£Z¦€ÆäÊŠ)xùí( W(ŽÏÍ =#/§¬ÿüütFõî=Þ¦„ªcúÕK²<²¿";?Gû5Õ-ŒÎ3Öß¼F•§,>?¥½º¢wå<ÅóSÜúŠÕ«¥DÐè‰Ù˜ÅW'ìÿü-ûáø?†¿¾ ÞB6aŠ·]Óךüx„ß­Ù_-ÑÙŒbQÊûn{‚ƒéç/È&šúr‹o+P©œ;Oè+\ã1yFŒ=J‹ÜŽG¤³LÚ<Ú¶·,ÿò†`ó»S¢J &MQý¿Žo Ûï ›2:.én—è|FqTR]| Þ9FçÇéÖ•dZØ4¸’ÉÝ¿áÛÀôW/ ›Ü~{ƒ³¢wèrÎâ—OÑ} *Ò­÷wR¾<¾uôÛ=z:#%´×ëââi·ŽÅo?Ç]¾eû¡#?YÝ=9etbÙüéº>aôøåw4Ëšt6A«žúv‡ÊÇÌ>;£_^°üö %2´RÎ8úê)Ú KÙÕݶ#t‘üÙ1Ïæ‡·$Ç)Æ=7ÿö=frF1\5CDà›•¤£L2á¡!ô mS¢ß㛈)rB_ÓW=©ZØbDqvB’Asq‰ïŒp´uGs½GFØT¦ø›õžüôŒr1¡¹|G¯G,>›³úÃk¦ÿü+Ôî–vßÑÜn¥ÝÚ®h÷ž´H±Ó£ÇSš·ï©.×x“³øÕ âvƒW†öê’¦r¨è0åŒéçϱjÏîÇ8Jf_’MQ¾¥÷†´4ÔnðM Ù˜ñãÛoÞÍ„ÙWsö¯ÞRo å<ÃNF¤³b0Ù ]©HsµÄµZÌŒÚQX¡&3ÒÄQ¯kÒÑ‚¤ˆø¶!z)rpìt†IvyžÐ\\°y¿Æ¤ðm‡JGŒÏO¡ëÈhÞ_ã|Jl÷ØùåɈêÍ;ê¥(ÅÓqÆ`òüÎüGÒ„-P ß4Ò…Ò–zYç’ôî9} ™ŽH&éƒNìP±¾­†A±~``e®`¨|ÞÝ;‹kDÜﻯ XWmR”•Œ¯ÖÔë “bIŒ‘¾Þã:ÅÑ?Išxê›SZúÕ×$¤3Muu²3F'ÕÅ vvBšÉaÓÕ5Šðg|™Äi¸c•G –ìß¼eû~+3#wÛ ‡Ê&Ì^œ£ƒX(Û›-ª(ÉÆ Qiü¾¢¯JÉšïªF:=éˆÙOÐÝžÕ« òÇOÍ6?¼¦Ùt$ã1Æ‚7ä§Ç¤£"¦´l¿{Å~Õ %]¨(Œgc-*Ôêê®ùmKQ’»jG·ë„Dd ÒI17ÅÉ„t¤Y}ý ¯'X*êm‡MÅp+‡†„âhDõaÉô×/ˆ«[zW`Sè«-肤°Bús¨ÉŽKü®" ðû=Øc9ÓÑíiY~ý ]LQôt•cüì1ÔKªuÏèñ#¦ŸŸÒ¾ÍÍ×0£‘Äl¬­"ÅÀ*w“•Ò9qî矱]‰Åm–Ô×[Tb¨¼‰xˆ08G–òlJ¿\cÆs²‰mé7kÉ÷XÙD«4#?ž¡cëÝH*¹Üm´{þ³2šn¹Eå9I‘ü¬*ô'1‹H¤ò „ýðúÁ(ˆÑ‚ ñç[ŸÈd¦ß­… R¢¹†t6‘½¼QôÛðœ­2G¬|>¡ÝÑ^o‰F&* L0A·ÝcÆs’"ÐÜ´dGÍÕ†üÑ1a³E—ct¢Ü~‹wƒQ2µ(è—{¢ x‡³¬×»Õ–¾Ž$©Ðv˜¸îèw½TB’@¿Ý‹CEi%ºFBù&âƒ%?]`u$FÉ‹uÉÊ ðuO2ÍGt«5¾j¥šæ¤£ßÔôû;ɰRŠhÐf*zl•D+º›®õd'sBµÅ“‘¤žvç)Ë4÷FòÄn³¤]·ONѡÇ„Øí ¤ä'ShÉPf†öfyg"RD\Û“ÎŽ(ŽË¬‘Rñ®iôТl‘Ûí$Cœ%¢½nfT’ÎÇÒ2jkºM-í©“·YãjN¾ ØÑ˜t¬©/n@çØ2—¨NÓÉd±VrO”šp‡µ‹Ã¡-H§~¹Æ5žôxFl÷xg)Îf¸Ý’®2”'súÍ5í¶#?=¯7ÄDCÃÀ?=,rJÙ¡R`H¦SŒ–\p¿kï"SÑ‹ð#™—ÐȬØÑÝl!-щÂä·Ý£³ùñ˜n¹Áud:FyùβŘîæß«;è¾Ûn1Å”ì('ôÐ×´Wk¢))Îgô×Wx *ÈT~zŒ -Qå¨X³¿XŠ…ÑZˆ2_p¦UC–9xùìŒÕFù?úŸa >jËߟýS²ã©Ðbê@v´À¤CÍ$¸í-í¦';^ UC·jI3Ü~I}Ý‘Ï&"ZØÞÐî _’e49étŒM¯uÀIbRB½¥¾Ü šm…)&äóýfI_9ÁmåÙ Škð=:)±%ôë–ìd!å>ðAˆL1…ØÒïkL6No𠢆n'_7ØéŒâtF¿^ÑÞì0“éoØ‹è éÂáëV„@Z¡ ’ÜnòDܾÁ¤9:U"…Â’-Fbì=8'ÙÏјdœáv5¶HpÛ-ÞI…7;šÉÌÇrM¿­Eõl5M:‹ò]Gºõö®³&ó{ú­ Ç꼤8™A·§¾Z¢Å”¾ª°“:8bZ@_ÓÜlI¦3lžÊ&½?>*K%S=ž`>{<¬‡Z“{ÞNÇr̓að![œë¨¨RVË&wÛbÇcl‘ C´†ÐìéÖû£šˆƒ vÕƒÙÏšƒ·“‚YRÀPžohV{BëAɦ7==#MÕ‡%Éì˜t¢©/nEŠã;Bv:!)¬ Û#³Pí©o7ƒ0$!?–®„²šövk¢  ²Q6!™QÑØÍ0 IEp‚6øíWyÌlJR¤èÐPßî°³~½&Mv4µ´Ê)NF„Þ¢vG½¬ÈN% €z…ÍRÜV:ÌÚ:ê«Íݪ<ÔO|$ÚÈ@è8î^pƒ2Ã)<˜9w±/eQ~·NäPÞÊr1£&“9Z;\±ÅÀøPuñÒ‰Ïк§ÛuØéºšn×RœŸbðôÕžnÛQœÑß^ÑuƒÃÌ&¨ÐáûŒlji®nR?~’GçIèØÒ,ëA"c1ŃøÑÏᇛoçtí•·Ê“ŸNCþ´¿rgˆ äÿÓSª¿üˆ=}Êø<ƒ4£úñGn¿»Âdb›Òã#Žþé%ÖÕB8P ö)‹ÛT„hH§Ùp"‹LDɉ!‚NÛ/1“Ê“üîgü¤òüW@í5Œ?ÑŠþäõ|$ªPZ»áþØþ0"b5¡ÚáZƒÉ¼P<¬,I9AZ$]8  ·ß£Š9ó/ÏiÞ¿£ú°¦÷žl6&Ö Î²Ùe[ܦ%{ü”¬hÙ¼®˜}6cõ§÷L~ù”îÃÉ£'˜ÐÒ×ßîñE[°Ó)iÖrû¯?‚¶8={Æhž‘ž”¬~ÿg¶×½è<Ó’t^Jî©ßÑ­:ÒÅÆ Ö­«[¢²ŒNN í m iªéz?}J1OÅħz6ß½c¿êPF>gß‚pz>eóíôûŽd£ýðŠ>=aœWܾª8ý¯¿ î·4·5Ê*ünÃþºbòË—$~OÛ¦øí5O™ù[êMK>3,ÿ ]/hm-nW3úü3ŸI"ÞK¦/¥ Û4¸.bR%‡˜tj m‡Û×èé ó/OéÞß༣¹^£‹Ù ‡¨qMÇ Næ'G†Ý·¯ !Gç%Úöt›-‘ŒG˜ÒŠ-IÉ¥`½† m…,¶ÝzG»îÈÎOˆ»%!›±øÕ9ÍÛ7ìÞ×”çç„ê†ÝÍžÑÓsÜõ5žJÕ{U•B# &2D£Sl)¹4¿[³zõ^ª)|ÝR<ÉÑ—§ÄÎIµíÃÝ>`Š‚Ðu”/éÞ}€ò˜b‘P}ØU„iØ¿^aFýz- ¦J°eA»¼!9zÄìó1€[]³þÓk:]0>_P¿OEø³w”/÷7„ô˜4¯¸úo? 'Sòqßîéûþ®mxoŸŒwvÒŸèÿZ6Yý´"ü÷ íý_ðúdãåñ„ýû·¸R-ÈO§hé–5ýíûuÏä_’g»ïoÿâ%ÕëïX½Ù3~þ„|”`§3Âæ-ëËÈñ/¹þÿü+>]0}ñ„D{úJhIÙ¿»¥zw‰:~ÄÉ/ž°ÿö;šMÉÇ$£1:qt›íºÂ¹žl:!+³!‡€ c=»‹ ’É9Å<§ºzO9‹_}†Š Õåžèjú¦'L1‰`׊³ŒÝ7oðJ†÷‹gOÈf†õ¿cwµ&=~L>5Ä.ŒÆCîµ§¹\‘žŸSÌ3TšR½þ‘Ûï®ÑZagÿóKôþ†í« œ/Èfû÷}õ™©©×ŠØ®Ù^,Iæ§”Gsp;©¦G@¥bÂs J˜Lß JFÖû=ý¶#™MÅ(‡bØ©;XS?íÌhc†áÛŽ~_aò)¶´6Ð;úm-¤ LV heƒÔO°®*645íÍŠÞ[¿ùÝ,Ù¼¹!„¥ínOþøEØüøžôä9ó—cÖúÒZõ„^cŠùɘdœŠa2ËðëK®ÿŠ˜¤([rô›Ïɬ‡D±üã7ìn»!¾ñ Ã<ª˜sòë—˜ ƒ„èRàeî)t-õõ’èL™¢ó‚¬è¹þ—ÉŸ>C×KÚ}düÅS¨—ô~Äô‹cÜzK»j ÝŽúrOvvN>O±™–*sn©^¿‡ò«×\ÿÛkt1ª°§ýÎÈ7p¡§3Ò‘%|jzŒ‚ mMô)ºHm-]b‚_BìûAF–/tøÖ£ÓŒØ×¨lбR °ã1Ù$2ô÷û0·ßQ_I,ʘˆï¦ÌqË+šÆrò»/ÐmEsuÃêÆãßý‚þýl®zTßS~õYÒ°¿òäÅöͺ(Ѫî¨H¨=Óß| k–ßÜ¢¶é´¸/êþœ,Pɾµ¿½fÿþ!Ʀ÷‰êø÷U8ùƒŠAT‰JZè"­9su¨X¸™ׂ5Ñ·­À Çïwøì¤ îöÚŠnÕÊ ËO Úñ¯ÚÇ%Š¥îíJ> î¿ñú€ðÃiÃøTŠð“è–”Õ B/­ïF¼„ÇÍ y蹯;ÁÙ(EDcG±Ù¢’|ªV‚ÒÚwrÒÏ l"0·©‰F;7È̽Î3z”²Ø"•ÐݬÐÓ‰hˆM",Û. #zOïïÑÑû;5¯*ç :±„®GkƒÎ4n ‡(›HÅDÝSbðè"Ã$Fx VÝ饥]gîÓt?Ñ7›ë(S5|r”÷b'#TˆôU…ÎǤ㌴T•”Aç)ô;)Eé ˜Äâw51‘¡†Ðuè¢@„'i ßî$/–©‚Í~hC”ÛBÛ ù Ùl†¦©E–J–Ì{AAZ…k:‘Ëè(†*'1zÉ&ÞAú-É´ª(út­Á{BÓ£³œd1&ö nß¡¬%mûØ9T–¡=hlvR`Ç#BÝàvQ+ðˆvy§ˆÎ2l™Q-GmœÊ`€l½`ü,÷ô1Hþ¬ïè·‡ö­'F©$Ç®¢3E¿®…œHœ@ m‡(U߇– Ÿ³9 $=Êæƒ ‚³é‡¡Ò€)2L‘@P„¾y`òZÔZVû{Ÿ{ÿ=_ÿßaºðg^£¨Ìu’Èü`×à ŽHÅS…žn[‘Ìh¼ å:d­k°:b‚IÁUŽdRÊTýJ†§’Q.±¿¢ß£CÕ‚p¹T‰}Õb”¹çQY!¼äu-²"“çjÝÊ=1)…Ê‘fh­ñu-\ôDÑov`!â´Žäh!ÕWáDjq›=K2Ά ¿`çt’b…ÛnïÀ’É¥‘.¿ZkLaq#)rÀÑï!õDO´“J¾9tÒ9RIŠN4®nIæ3b]Ël‘`5±é1ã 6Sô›=X™kÞɆ4h’Ù“ê»aØ´7Y`4¢Q ôë=*æj‡Î’ÁH×᪆hŒ¬‘šŒ—÷£Bç‚Ç»ËövRá%¹!ÔÝÐ!•uO…ßíX’q!ëö…ÓK%)é,dïï÷ jОßadž™¥ïøÑ±ïï%(÷™aQ;)pÛ3*‰­`Eí¸„Vª˜¶Ìå³ö:)Ö™Ñc£Ä_¬šÐµø}7DH† 'Ä+M–ö¶ë?éÞß¿–óè¦Ì%î”Ôw½‚úÃÍÆ £Ûèa7”)ýú ×eý§—¨fO³\Q_UŒ^>%ì6èù¿ºb%*NßîMÿe»Òš¾jQÖbS‹JJL™à6·8—Q,Rö?¼!˜)Åq‰Û¯p­l„‚s´û=å‹Ï8ùÕc¢¬餤¿¹`õÝŠìÑ1:VBðÁçËa[ÓÔ‘âìc‚,XÛ-õuÅìw¿$S;.ÿ·WØósfONä0á*ºõ†HA2N¨.—Ì~õíûïqų#Åú‡l>%t+ªMÏèñŒrè4ÅØ@}µ$=9£8ʤ\Õôu”¼ˆÑÑ-k‚7gcBÛÒWkAêµ;-†áµ*?âè7G\ÿ¯büëf²Ð4õå×GTlé·5Ñ\Ý¢‹)å£ch;òÓœå¿Å›Å(àjÎI§ÝõÍ*-2šë¥P L‚ÎF˜BÑ-—ìß-)¿øŒÅçGì¾CèStâØ]\aÒaÐjèê–v»cüÙçœþî퇷ì^ïEÜË÷»=ûë=ùùæ/ø¶Æ÷†ü¤$4õ»ô•ÆŠýÕ%¶<¡<.énV/_`uË퟿§­åéclÚáöähNy\bM¤úpÃúÝ%&C_”¥˜ŽéVKœ)™ù’$ t·7rªH·vL~ñ’raPyIõã÷Üüù3ÊÞFªþLóäõðw>WV=þ;½þç~‡!²æ›†ìéKNûáö-Û×[ÊçOP݆›?ýHÛ¦ÏãV0:¦+úÆ`SG·éÉ?&Kk®ÿík¼9âô·O©_½¡gBšvD3·fí(ÏJ¢7Œ_>&Q;.ÿÛŸéú§¿ý\žŸm$T[öooI'Œ?{B¢w,ÿ=ª8&_ˆ97êS*úÕšìü ùijü—ïèÕˆâ¸$´=étŽ"éfœÐ.÷´·5*32ÌÜÞ²ûaƒžŒ[˜†Aç]Ñn{Žÿóo(JØ_WèÄâë *0:S_m(Î0Ôì^_R-[Lš‹*:—ŸÖï¹ùú=å“ÏHÓŽÍ›[FÏ_¢» .8ºõŽ®v¤YNñä´kšu$?™ •ÜŽöf¦ ?^`Áš"';*‡J)uWMTZ ¼uM“ah3‘J‰˜Bª® èáa¿«L<ôè,Á×5ªÈ1J® Œª8Èg©(Ñð<°³1fà¡ÆÎ•”xGì=¡ëØ{Nl»Ë+ÕsŒdrïû˜“*|ç…õKD¥)Ñ{¡(8'Ja-LÞp—«¶òÙµ½|ÖÞßE˜D¨ ‡*H¸'éÄxˆŠn0¹èa]#˜>­zv-‚5üžÞË¿9‰JyWÙá:M,¡mÀ˜áÞÎÐD:¡ªEH2t ”:Rm¥²‡úH wU¥C'KªD®®ÀŠòü®B†Vi&Jh¿o@J´=-UK%Ùªsÿÿ?]QÐI"X­¾ÃuN™·5*K‡îÐÐEWÚ(¢½°ïzì¸ TT!'9¡®éë^žkõ£Œ‘˜óè4EEOß4ý‘ ­cé¦E†Î£Òòo 1'Èâ(Ï»(]9k!8‘X Q­5¾ë‰~Ð[…ï{aò†¡ó¡‘®X"ä™è£¶†<¼„ªÆ7nÀ¦yT–JתjPe&ÑàzÐßUâA³Þ­kÃsÆH¥{j0ÙÌÆ‘.Ópÿwï1 ÷"œ»XÁ°Y ‡Ní°*GQ¦GÄ1HÆ|ÓK—RCè Bô¨L¾C]ähé7•|žQ›ru·VÄÞ“Ì'’ÉvR™Ž½Ð–îâšñ^ôb²“Y\ÓË÷÷ïÎÉ_>TõCïäZ»£"¢¶ƒ¬GÞ›É-¡R™ ž ª©VèÌ:9D)¤3Ü?û«ò¤Ã~à |ò÷?ÉK'ö®“wø>¥“îâƒÒ‰ÒÅÕêþßÕ¢mÑ`Çé@ãøt¾LþPwÒP²ö«4Åh…¯Z¢Œž“u4v=ÑÁYk:êÓ$ƃýÈG¹x‡$vu+YïqÈq¸Æ?öq?ÀØý]èOfðœÃ5‘ù¯>gòh„hn³£Ý;Œv´7”V´U…I§,~ý„îê=Õµ#]ÌP¦§»^á¢"›”( ÃDN ìµÜðb§óè,%§bu{˜i~€¿S‰•©Ö:ùcs8FL9OTÞáîê2ppw*é7í}›„¹éŸ¨¼ÅÚHhhoW;Vý|f2zйlhCM{³nr¯ñ ¿¾`ùÝã¯~Áñ¯±ûú/ìבɋº—Ä©W óÿô+Rݰ~uIè"Ñ÷„6ˉm…S9'ÿùKâvC³ì(ŸOÙþù;ÌÙslÃö:2~rŒ¯·„¦{1ÿ•êá?­erº&î6ү׸:€ tÛ-Ù“—ÌŸØþéú>#;;!#ÀõöДö™ÊRÒ2G©DØ­ZcG{¹cüÕšwoØ^T¡8{Dh¯‰Éœùç'To¯¥‡á¨®.‰*%µ–âå3”[qû‡÷äOž3ÿêŒæõ+Ö?|À›”|6ÆêHèÁŒ¦dÇ%I™zG¿“¡–¨4é8ÅW[ê«õ ÔwB°…Åí6t›Z®ç®EÙ§ÿé ›?ÿ‘õ¥göù FGácT¿§z·ÄŒ3”J½8<›±Ø"¡¾¸`ûà =š‘ŸŒdHrS‘NŽ0´7Ktša3ÃþÃ’ò³—Ì_Î ] ¸ž~ÓÑÞ^ÒlÅ锿ò=}Ÿ2z|‚ö{\­H¤ÓœnuCóá=ÄôiÊúë+ò''ô×KÊ—O¡ÙQÝ4ØqNq:£»zÇîCOñh!È ~ÇþzÏÑo…qöï×xo=;&›¬ÿðªM`þë/IXrû—[æ¿|Âêß‘=Z/É_<¥_~`Õ’Mò!f”a&#ò£1:l¸þ×·”/^Ð_¼¢ÚÀì‹çøý»Ë-&O?ÁKþ=ùáÿûe ÿ=‘ ^ï*±'™œ§Üþñòg/é?¼Á1fñ‹sŒ…ÛûšXqòÛ—4?üÀþªcöëX#(š~ÛÐíz0‘öúšäôyºaõ¶eühÊæëïðÊ‚N)ŽO˜}¶ ¿YÓK’[tšÊóð›[¶? ’˜PœÍh.>ÐÕ‘~·gòë¯(òŽí»Vª[]iFy<¢ùð¾îh7{šMÇÉÿòO$~ÃÍŸ.Ðe†5²1£Óýê ßKõ5ŸgçðÇU;šk1 9:güȲþÓìÑ)ãGcünÃêÕL1&l6$Ož3>£z³$hE2™`Õ–Û?¾ÅžÍ:ý|)g°‡ §é¿•T²±WQ,wÄ=PRe‰=¾ bÜIÍr3H=ì`.ƒÐG²ã)ªohv­ü]䀣£¢±$㿪 Ê—ôË ±(Q &y*3 ûÊ Ÿ§Ä¡ú‹Ž+ÚÃE[J ƒr]Nü¾w˜É”¬Ô´·B0"6!½# :Rm„’ Ù$" ï(É.úºmyhc‰¾lL>Éñ›-þÏ9† ªg­Ð*ÁŽ2iwîd&Í4íjƒë{¢¶$CnY(]ä$£_×ô›ZªoyŽ-­h•M2\’!%´x`¿z©öÒ–tœá¶;zуûŸ&öòO«A^ ´D2†ŽŠ6Š~¿£Ûõh“asCðR1Ô:CáðÞIö=µ¸ºF•#ò±`‰\µ§ßÕúÔàÛZª†y&2ŸpÈ KõØ÷l*LèMu¨§-ÆÂÅì#*Dì´$ú–nåHFép ´¸²ù˜°ß”tŲ@ÓÓ®vD•‘Í ¢ïèv=ùɘöú–¨´Ò$‹1¡©è÷0èÑ!E2*Ѿ§¾Ym"Z“¤V²Ñ!Àÿ¸çÿkÑC¬$Í5íj ÆâÛLF6ÏQúÝŽäd¹¡_oð:#_LÐx"·oå~Ö®j0ãIêi–µÈU«:ÍÈf9¡jd#H•×äÉPÅôC—AøÁ¡wƒÈG²ûv>Ū@_9L:H&è4%¶-Q £ï<Åé1&öÔË*1ÃüC˰€Ã쀗ꦋ¡Áö/õtëS¤‚£k}[1à=z2Âp{IA%¤¥¥]îPiJ2J%s‰È£H%Ûí7;šÍ•£ð]ƒJG¤£“ú]ƒkã=A 1‰Ãwˆ"ÖCTÄwH@….sln…iÁí+ü/\}$”ˆÃ‘ºë2kÃ0÷á{Gˆ“È0$ƒ:F…VZ¨Lñ¯q ôðú‡Å,;Pr:¼SòŸqx‡Dy6jÅ]»M6›ë=Þ|Û¦dÆ$â‰Ê`´<¡§ŠÃ¼•2ľ'ô3žN2Ùk6íªæ¨l ] =šB×ÐñàwûhŸð½'™NHsKTJ:t` UDßã"–Ðv`ì(Áíö´»mslz°?jÒÅÁK>Þd·•8Ð*U€hÐú$‡O ú=z"FöÏágòÃZòè2ä_‘W6!™äÃfõP´27ý†¢[l¡R… Ó®¶øA¹]$;žkh·­H¶ÆcÒLÓܬ%åf¤£ ·ÛÓ "3õ zß¿ŸÛ:Ü'Á9éÖØeþÖèHtkTwTcS´=8'ü=…¥¦*`ÓêÓx‚úÑò“ m`òù3ÊE†wîêѦ[.énôd"‰ÚQ>›¶KvïöŒ>{†fËîmK:KðU%°v1²ã£a_!7±²Zt¡áÓŒNÄUrsUƒ. ’L&|ïªÊ^ZK…-¬´qâÇS–mz’>ß#WZS|<½÷ ±Û *RûS™ ê#û—²™°t»ÝÝ©X›ˆ2‘nµ¢Û8F_¼€íUe™<™°ÿæ>›pô›—Xz‚ï¹þoßQ|þ£™aõÍ[Ìä˜òdLõî-!䔿t7H"±mh–;¢ÎÈç´õ„N=%¥S̤$É%&ñ)_[d0¢"—*‡Çï‡ð= ¦(Åã‘ú­ þtbñû-ŒŽ8úåcÚ«5é̲ùú;Ú®dñ‹gŒ—¬¾þžÝEEšgäOž¦57¿ÿ˜X;l¸] ZR–XkÀ$GÂê’ýuMñì i&-±tªYýùÅóψ»÷l>4”GSbßQß.ÑÓ3¦Ofô·{FÏg¬þø=§”ÇÚˆõñ)‹ÍŽúâšhG§Ç„j%›Àh¡—ƒ€ ØÑ”ÉËGتwï‰*'?^ûöΖÂruaLqZÒßÞàj1IúÞ2ýò1*4Ä>\Ïæû·ÔCnñ«'ôWoØ\G_=ǦŠÐ,ٿ٠Êƈ$dôùçÌŸŽ¸ýã7ì/kFŸ G»Â›’Ù—'´on(ž²ùËw˜ÓgÄ›÷Äé)¦]Ò¹œãzNl*|­§[¯q­#/MCöhNûö5MW2}² ¾x‡9åÙ·o(ΦÐ7`¢ôû†úúšnÙ0ùå/Ȳ-·_/ÉO§  uCz4") íº$×~I»ÑD¿¡ÝFÏŸ‘š=˯ÄΑæ:Ó´·×´»îQ÷÷5þ¸ýÉï½'øˆNÌpH?¡˜$Ó’êõta"4‹ïßó™ˆH.ÖŒ?{Lûê‚ìÅSÚ÷¯°§Â²­W él‚__QÝ:&Ÿ?ƒfÅîÍŠâù»o¾§üÅW¨ê‚õ›=Ù¸D0“IâØþø†X1}q‚»¾ ï £'gd‹Œ"íí-û×7¨Ñœñ³3L¨©oö˜É£:Ú[Á}¶7ïéªHZæ‘Mö¯ßÕˆÑyÎæÛ Ò³'sØ¿ý@uíÈOˆÝ],˜~qBýãkºÊ0~Vrû‡W$‹ÜæŠS›“NSÌ(§}÷#»µeö¤`ùÍ5“ÏŸPÿðžÑ—Ïh/ß°¿m1&!ÉGÏŽÑ~G·×ŒžÐ]]Ю=£çs¶ß~O³1çs´iñÍ@Ü19Éñ”4W´ËJ·|ô´—kF/ž“5AYp-ÕÕe,~wKÛY¦ÏiÞ\bfǘ¤Ç×µ¬sQ¡‹¨–P÷C”¬@Ù@·¬IÜn…ÛÃô—OÑaÇúûv:Ç$½ðµ‹\NHñgI‹è´”í¡kê5ÕÍZÄd¹¢YÖÌû%îê Ë·,þù+ŠQ`õí¥ä¢3‰¨ø¦“C¾1$yŠÉ,Ýv‹s$ ùã'ÐÞR­ó/ލ߭Hf%ûW7”/Ó\¼¦«³/^elÿò#»÷K‰$æž#<ì{L"CéQ›Aˆöà6òïû¡åŸ2~ú„rj* q™ažˆ«Ä:L/vÙül†5˯¤«¦/Ó^½GÏÏ(gåÞ¡³Œd2!™ŽÁ9LžŽ5«?ÿ@µ $™DBÛ’=yÁäDsû¯ßL‚²%Ó—çtÞѵòû$ã v”ÜÙý@Cùø»bGz´Àd—JJ¡eÝ™ ]¸ûŒL «¿üH½v‚Æ{]Á MéqÁòß’’»ó‡VsÒ‚=`çBˆ"<†Àƒóè$ÃXÃà{¼—ŒÑf2/HgåAÊ=Süàyè99îö¹w¯˜ÙC„Å­n©/W¨äŽÂ§ñ¹Rü„BáD!oÐi2mz‚S”çÇd¥•,æa“e,±«‡áB+¹g£ð]O2¡|G·ª1óFut«€-¢ä&µm4ö£*hô3.%ÂÑû»¬®drÝj‡Ru#öüd ôðA™Dàöñá>†ñIú![™hQý4ïô)wúNEªþ7¢°CĤ¡¯<&Ë¥¦®i N“N b[Ñ{MZXºõŽ`RÆOϰj©ºÝ““¥Šúf‰÷–´Ì‰±^³¾³J*zÚÍž¨S’,íïN“òû¼ß;$Müi .A Êø}9DhmA‡¡Ùß ƾG'”‹‚öz‹¦Ô®jÄètJ26ÔWKšuIròÓ#´ªÙ½¾†¬ÀdP„¡“%6³( tÀí÷ô$ãR2¾.’¨ß_bOQõ†®ƒlTˆhd_ÍHódd3ÃîÍ*›$ò÷“¹òÇ 3hÒr¡¡«j¢×Réˆ3¶SžMd"6ÝÎjW±9¾ßàú„òÑ|Bãv[šmw›åg3Bµ£^5dGGdóœPmhnÄ0¦•|ÏÉÑ1ãS±6;OVŽˆ±Ã7 >Zг)aÓ`gÍÕ-$±© +Pퟌ™>ºŽØ÷t«FÕJ*7ErTâ6ÚÊ“ä9¡oG"ÆÀy9Ð; _7C±¦Û:òG§X]³¿¬H'™H"lŠÒ"0‰¡½¦Ã5ö´û üñÄS_,Ñåk¤“ÓW{\ÿýØsü‹Óÿ‘×óüÿÞ¯ÿýQˆF%FÌdŒÛ-©WÙd4d^ 6…®j°eN¿­°£1~¿FÏd™ÅÕ,Ðm…k‘®ŠŠ2c®î(Ÿ¶7ìnÒ,C'V„6®¡Ùì‰IN6Ê$´(Œ3‹N ~¿¥ºÚKTo.*òîjE8ðä²P·Û¢ÁZE2?"Í5ÍÍ•—$¹¢¾X£Ò‚⸠[®i÷Qˆ"ý²)ùÄÒÞ¬QÅT”Яn±“)¡Ý¼ÁfÉ yžç4ï.h;KyœÉPäxLè<ùÉ”~µ¤m …ÑÙéZú&Šf¹&êŒt–Ñ/WtµÐƒL&®àÂ{Ì1úª#e¸m&ÐÞîHONСCå%Z9šÛ:Ɉ¾¢­<ùt$œê¼@‡ï;‘y)…V”#„CqE†«]„qïº'tD’8ê늨l¤#fô'þ…xÙ8Ì< d*¥í ȨÁ’2ú}Mþø¿Z²¿i=;#Í"ÕÅt‚-¬äÝ}—É)Æjº½<’¢À–™¸bÆè|D³!*«Eíds‹³c‘U]­dþ,z‚‹Ãž'Þm•±h¥~þ\ã@ˆ’¡Ï òY‰N‡ aD"~_ÓmÛa£(ƒyé´À&‘íë÷øXRÜ~™ÍIsEýaI@‰‘8 {ޱ9T®iv›§(<ý¾%=}Äx‘°{õùˆR²q&ômÑJ yfØt#¾•ÏM¤añãÙ2%œöa‡ß™‡ÈBhnÖÿ_öþ«K’äÊÒ?!Ê: ž‘ H PÕ·»kÖšyûoÍËLßÕݸ @ÒàáĨr2¢Î‚$( ºê.ø € wS3U‘#û쳿1¶÷]ׂEsŠƒ„úÅ[¬Ð˜Ë×ÐQð5Ρù@\•×Ý^ƒu)õˆ9·!n5Õ#]X|,víýïFoŒ´È®Å4=H¹ÿퟱ%*f³§'4/žÑ"P}¸¶'½wŸÉö쑉†nÇæÛWXræŸ?DÉ@\WÜ2LRö«Ã΢&®3¨$l‚Å£‡DÁîë×8™P<:Äí6”¯Î“’IÄPöLŸÜÇì/h×ÉòªQC2¾Q•lçÆa)‰Š»o_¡—'ä‹t,êßcÆ/Cjq­nßÉuw=_ÃÝ_a¾¯Zõw‹ï;¾a¡Àut—WèI?n šOBt®ãjT¢±mIóvCòð1ij¨^îHÝ#Íõ›·ôõ8 #5Ù½%íù"=$?Ѝ^]âÛ¾­!3½7§þþšt>ÁÕ-äÊ›ÿ¶,Âäôhyx_5±›‘ºFUßF½Þä 6•çø¡Á4æz°Ò¶5>š0ÿâÒ´ UGs~'&š„4•ÑÓ¼]¡îS¥Ô?<ÇÀCÈKDFŠa»a¨ƒ×O“ÏcL9Ì5åó äì€8‹ˆ²„¡ÚÓí\Ób½CE1Éá!ùñ³½`ûýkœ˜QœLqíÛKTžá]‡ëíØÉƘ¤=Íå]0ypˆN=ý6„’£ýÅkª‹š(ÑX Q¢CQd‚õMÓ#TL4Í‘I„Ùoh×{’ÃLŸ,¶û VØŽæmIúà·ÛàuN²Ì¶ÚË !vPćdóˆn½CM¦D±á©ßžÑ¬ZTZÖRˆ€!>šC½fûrEzÿ>lWtÕ€žäØýŽèÞCÒ¤eÿ¦#¿w@¿ºÀûˆüÞŒî<øEMmHîâ› }ã)#]M¿t²~}A·ë‰fs„ôH-è.7d÷g=ûçëEHdVç–ò»—ôCÄì³øªBbhq*ÇWÔëŽtžámHÍöûcêÃ0ÓµòücEç¥ÎýkÿÍô׿ûo„Ç‹µ)4ùýä'ú‹7ìž_"âh¬Q¦‡å/žÐ¾¸RÑN±ÍŽòÅ/ñô€h*1›-}ÓƒNISl³¥¹¬)>yJ– ¬THW³ýú%r~Âôá’þÕKÚZ†$‰Í%}£IŽ' —— "|žóó×ìßV¤§ |3Íi_¾%::fò`JùÃKœš§ûÖa@×B4_’LÝÛK¬ÌÉŽ§¸zCsY“Ÿ¥ØÎaË’öüË„ÅçG4¯^a]Œ”ÛY²ûǘý]3ÿâ4 NW]¸7#KózCöè³]Ñmñ|ŠÊ$¦*±µ!Z.QÊR¿º€8B)ÁÐXòG÷É—û^Ñ÷1ÅÉ”~} i"ö´Â=CëY|õa*Ê7[†mIt|Êü“ú‹Wt{ÍôAÎæßC¢ QÄóÙ˜ÿì¯[á¡N‘¸¾¦ßVãпÅôžÙÏ"ê-»;Tž¥vü^£IvGD¸1ýbL5ˆD<ÆÆuýz,–ÌÏØ}ýŽ ÙÑÉ<Áì6´ÛïÑl†ëö ½bödAw¶'ZÎ0«Kš}ƒÊïIAóú å‹ÉýLïT¯Vc,­ ;š`Ê=ÕÙE!B×+d$ªšèà”éIÂö?àD"øn{ŠÅ‡ hçìµäꮄ:F“Ó{'ÈÒ,v´—„Α± ½,™}þ RÔÔ%fߣLEß+fOi.vè,Ci,®V"“ˆ¨HØó=VL9øêÍ‹ïYýñ ñÑ柞"]G_ è,¢~óšfÓZ¡uX3 uD»ZÚÕ–z³EÆS²yíjœÑm0Í€ŒSt*¶;Œ‘$Ë%J+ŽTž¡®Â€ÉÐ"Òœ$×x‘.4õ‹ ²˜ tÈuCO_J )ÑbI~2ÃUö// š“N4ÎÔ¸A£ÒhCä’!âóÜ•4›zrÄìñ•r2puÑ­.:OGXgQJaº•æè(ø8 YËJé‘ä´§¹Ü“=`ú  ;/‰§˜Íš¾v¨,ØœœQd`ØS¾ÜoÖ H礋„ölƒ>˜â¶jVàšŠêí/AG1R«0yœ¤D©£|y‰Ì'ˆ¡Ã.(6u:<$–=ÕyGz0ǵ;œ×dGS†Í‡bØÖ¨ÉlÍÐ &ONQÔTo*¢É ?ìÙn±@`‘ =_žÅÍe3&4hâƒ9ÉÊo_ÒvŠÅÏãV+Ä|Žr]Õbv;'ÉæøIO³ÝïéÇ"æ>éö±JRü¼þGßÓßúõÙ5xkÑiFœçDËbرùþ,d _ùCföô˜æù3ú>aþÙ=|»gÿì¯ñd‰N,¦î°}‡1’t1ÅTkúÆ“išå[³ûæ >)ÈfÓ2´‚üÁ ³ÝcMŒ.ÃfñL¯rWÓUžôhÀŒ4ýº$>: ;J)¿{‰‹çdS(_nÆ\zMT¤Heðƒ!"‡ë{\çÂáôtŠÙì¨ß¬ðÖ!é邿Å+ŒP‰ÂÖ=Ù£ûÐlh[M¾Lè65REcvsO·(žÑŸ¿¡ÙA2M"¼7㬙ÖeH—‰I³Ú¡òó§Kꗯ躔é½ýnMWuè$ sB†}ƒu’ÉÓûDê‹íºAf³O;Ã¥cr/có‡çÈbŽ;´³ÎÔ8ërCåÃZl[cûÐaõƒÁZÁäÓÔÐPžíâz2çŒQ‘Œ¿â:­ÁÙ0ç#dð³"ƒæmϰ¯ .(îM©~xŽñÙ|J”IL]az7†exSbdÆìáœþl‡ˆF2coð(’ék†ýžnÓ’œžPæ´oW8Þ ò{ †Õšz³¿V4e’€7´ÛÑá=¦Ç »?ü€Sñø·Ãëü{]åqßö.ÌÒÜÙF€©[ôdÁôá!zãê–~½ ³O>;φüþ1¾-1ƒeØ•ø(CùM˜=:¤{s†“Q¨aÄXà iDùÍ9åàç÷èÞ¼bóíÔâ˜ù§÷Q¦¦]µ$‡Sš·¯(/[T#½Ç:ƒJâlŠP(|SÓè@–£µk0èIA%^ã×14=‚`®úîb…5ž8/y@[w«YD© =ß‘/6á`+\|Œ—3’ÃEPÊÖj¶ Ê"„ëh/¶ôµ¥xrІê͆h1GÒc{M2•4g+D2'=H©^¼ANf¸²"9<‹<—(TdhÏÃä³Ô¡Mm;G¼œãÚ}˜Ü^.ˆ&)ýzE¿«¯¦‰‚?î?0|û?ÊÏ®Ý"ŠÐ:‘Ý·öEÉá‚x’2ìJœPHá!J®£[•ˆbF”XÚUë¶G&)¶ …s=/ÐiŠ$t-†ýŽúl qFvt}ÃÐÔøÞ£§AÁv2']˜] ¶§¯ºëˆO¤GKt…9XÐ_¬qF’M0u‹Š5¦¬éöU8`ŠÄeƒb»5™‘MBqë{ÚmG~ï %ÍÅžôôßl¨Ïk²û‡ÄEF{q‰i:D4¬ ÔÕXaûk,¦,é÷-ÉÑQ@£_¬¼E€³’é£S¤44ë†x>Ç•”g;”ŽˆŽˆSOóæ™ÏÉŽsº³5z1£;»@L˜åxïi/.p>#™Åôå@2‹hßžc](ÒbÊÛZô¤@H˰Ù#'s²ƒŒî|™ño¨É! ý¾!™Ïñ¦¤>¯P±Â£Q©ÂVªÈÇG:l]cꕨ"Æ÷¶îI(§Û"íjúmK|tL:OÂ^)Åø Þ{†ý'¦Ž0ÛC Bú0 šHí®aRBFÈ4%*D¨s†Ý5] lE}^†"yD‰Û~¬ DˆE|Î!îˆaÎ{”Žnå'‡ù"ß;²‡÷ðí–füá¾ï1ƒA¥ºÈˆ3hÎ×èùÉDÓ¼^!²Ù2Åt¦*Ê&Pƒfa¯vcÞ…â¬TñØ‘t¡îÒa(ßöï¦npB"…"ž¥¨Hâ¥ÂÕÖxTªp¹éæ¨Ä;c4Ÿ£ó[ôEç2ÔeÞ^Y}Ñ$¦»¸¤ÝH%þôܲT7áWÑ~#KÄÛ¯RŠÓi¸Wí;ЉÝCªËéÝ_EFJ|טk G>[þâ"a°.d≫Àiz…ÍMñ)c¨_^`lL”޹·: $º¾3˜=BÆ€Fç’æü-íÞ2yúÑné:I¾È0e,äG1»ßÏ`2²ƒïzd\ª“õ·LàwO3›`'‰Óëâá}µ÷VœË­c‘·Žh^„8ÈmÝf¤ úw<2·N”²|\+Ð~'Ëw§r?ðž®s8} a]Mˆ -°mMs¾#~ðé¡¢z]3y<§y~ŽS9ùÉ y†º¥~yI|z¤0lÿøÛT:#šÈ±‹¡±ÇìdòQ„(Àx_S¤„·t› k‚×\jˆR* të8A$Þu˜ªiv ]d´«sD¶$_fغEd9ÙAŽm*úmw ëCÆ‚úü-ÍeÃü—?#{Öß^?@ª–nÓM\Z€âVÔ’w ÒIÈúvÄ %Íå&¨n`è,óÏ?!-ÕÛ xMr8'^dø®£}}Fy¶Ái…°Ùá!*îé62™eaÈøª})âˆôxŽ2{ÎýŒâó/˜6xN»u¤‹ɽ%Ô—l_UdG3|gÑ©¤9¯˜}~Ÿæõ3öùÉ!q²dÕdCI{iHsúõ3ŒtÀf_=%NÕ›uhïg´o7à½J$ѱ×`A·¹ÀAZ̉g(QS>Û¡É—‚õ¿¼dòåºÏèmŒr–¡È?¤8ɨ_a;‰ž¤aâ:õÔ/^Sm,Ë_}N,:Öß¼BdS’„1 E„´ÊQÚQŸïÑ‹)n·'9½ÏôÑ„~SÑ\ÔÄS”j©~¸À:³žhš”ñb Cƒiî[)Isñ†nߎñ‰þÇýÀ?ëûXVü_ÿç¼§¿õëÿJ×ì J¥†nWr³àz¬U,>}H6‹¨^­Pó9Z¹qª>Àrô|Jœt¬ÿðšäÁ'ÌŽ3úÝžn߇N’Hѳ$Ä'ñ$¢}õšòl…S)ùÁ!Ò÷8?àº0°;ìÏ\Îôþ¶ÞaëŠf½ÇI=P!;>&ÒRY¬è./ññ”é½)ݦ&9˜Ñ½yÍþbCTL‰"¢Y«1ñÇt¨£cæèÞ®±]MS¶d‡'DÚRž]#ºû7[&_~Îì(c÷ís†¦Ÿ‘$˜¡sd"t«sÊ×[òO>aùøˆúÙT«=hí%‡ÿôª¯¨/TѯW4›ðD‹#Òê·—$§™Eì~ÿ’ü³Çtg/LÁⳤ¶Ô/.pn$½©˜ü$fÿûlJ²˜£3G¿Û1”Žx1GE†úå9b~ÄâñŒý7Ï‘Å!“9å·oH?AÚ=ûç+ЧŸ ÝšÕ/ˆ²©s¢úmG4›…Ž/!™e¨JúÊ¢³‚¨ˆp}C¿ÙãÓ)ËÏè^^bœDF–ö²DM—LNgDóË]¿¾À‹ ):ê‹ ¬˜rü«GÔ?|K]*²iæ£dt¸n”'FæÙ‘¢}¹%zíoÿ@ôø3b»bõí:$¹( a3„¡@!CØðr= y+öϬqòÀý8$Àžôøi†.€Ä\SÓî+d4!9X2¹³úõ·Äž²|”²ùýsºJ1ûô©<ÍÙ¶qŽÎÇ9.cpÖÏCç@èP¿ u‹)WŒÏ,ìȦI"Ùñ S7t ^¸0 ‡ yØ"àþ\׌Л(ø¯Õhñq'$ˆ–nUa­";™“Ì5Û?~Oyц”©YÃ<áÐqã+¿;‹æAKfO&!×꫸æ›Åé*wüº6 ÖØx w¬¦â¿qgùk|½Œ5Ãæ’úl;þó?lQr¦'Yðw*ð»^…ò$EOÒ¶½¿m;¸¦4p•-cë S† _1žHd¤°mG¼(è7»@/ÍeÀ,'‹9Þ›ŒTÈæ“*Ó¸¶?’—òI:wþ#+¼Ãìkd–£´ü5êîè¹¹š¼ôƃâïÿ“†Ã0Lh«f<ü3dž[‘9WŠÏIHÄ9:n½ÇÈîFÏØÍ‘å¨ÈÓ¯ôlF”)L3 ¤§ßU47‚pv¤u8ñ]©ð7ëÏûjðcÄ­úwБéJ7ŠhC(¼éñ¨€ÄeÀ9…Žýj‡HlÛŒD Gr||õ.Ä»…ŽFK¿ïÑÓ 2RwÛgW§C%±Õž¡l¯½Ö¨…âÙ÷x^L1»¶3È$*ëB¿ Q@ÞB¼Èè.WÈl†ݦAÏç(9Лš¸Šåq¥ÎôdJ”§¡Ö]¯ñ" 2ØÎïxYƒÖxc‰3„µ˜:´V±CÕƒ5ˆ´ÊÐÅTT¦i¸–~_ãú0г*²ô›6\Ä›×’£„ ùª¦j‘qŽÖI¢4de↲㉗v["’4(ßMà:}‡i,2–áýG1éÁ »ÛsG¡ýé Nh¢XÑ]ni†Îc\×!ã4¨÷±Æ5- Áµ+Iñõž¡6D‹ f½ ö“ºÂ´#j¾ª“C|[Ñ­Cëõï?ÿæZôuŒæ»q—Þ ¢YTg!0MÃPöãš p¨8 ´>ohÎ/°DÄ“I˜ðãÊúm =±â¦‡ÊSTDH*&ÐW s´64çÛPDD1éáé{ÚM‰³a(>šMÂPv*R0v]Óˆ1À;œ Öd9G¥Ša[…V¶p eG4Ëqí€L#̾9‚Y¼œ‘a€8Cki ñ2gØU¸Þ\Ç\†X0O¼XOB”¨)+LmQyžåƒ‚~³ÁÔžx9Eê-‘‘¼¶Ö8/ÞÒo÷èù,\––˜Mì8lmgkm[ºmX§¥¡"ŽqèŸåeÂàh²È°uƒÙ7XÉb‚Ým1–ë"x¨ö ¥Ai5«Aô*ìáBÈP6¤Iè CPƒ')®m1u¢Sw$Ë ¶¬ðRã›9Ÿ‡ý¡bN¿Ý!âŒ(ÏC¡g¾·Á>9ÆYê"CÅQXwBvØušX·Þa­ ;Zâ»’®´èñ~cL|ˆ«=ÏâŪr‚%Çk½Nn°&D>Žém(˜*òLUÖˆ£:ËB¬êÐÐoZd’ ÓD” ´ÑwUI_Ž÷ïÐ¨šŒˆ¦ä†q„Ùì ΄`Fl¶PïñrŽ$X5e¬ö5CÙ…ñµ,GE„η™ñ$Æ”!½+ÊÆ$4n‚˜±3+=CYc‡1ÊîGãâ¸óýøOHfSI°ýÜ.r…㻽›¢&TïÝßýŠŒñ´cBÅNüŸÿõ«-Étvò_~FDT/.0C¦•MÒë.Ü”!v&žgèLÒoLë‘Ið‡ô»O@´˜JÏÕùŽ£ÿüÛÿù;â§Ÿ‘ø’õ·x¥˜>xˆk.)/*²Å„v½A&Kòe|¨6pËõ4Ø8nGàÆL>$Bš3]Tå­T÷,¼ò¢ôXHGúÖïæ}ô÷Ø;n)ôãáB(„0 »î“þîÉJ\­ž£ï9(Ð*Éz̶ަÞÓ^–x)˜|òùdàü¿ÿ›púŸ±ýõïQÇ0o_?}Jžvl¾¾$š/ýÊ8„«Ù½Þ±ü§¯È‹5nh êJ_ö#ú<&ž'7yŽXúm‹5â:çøý¨¿ñá•¡¶-²ÈÊ-ݦÆZK2?`öå#”ÝR¾¨Ñ¹dØtQ¿}ƒW¾ëIîk^ÎPÂ0t eÅæk’Ó#T,Wù±ãG.£¡aØû‡Œõ˜á£âdOw¹Æû”üþ’a}NWy²£C„hè75Ö ¢,c%XüâÛßý‘ìó/Qõ—XS|ò-kvÏÏIPßÝ`®`Óþág¤…dhÃnÌHòŽêm‡Î%foQ™¤z{Izü€(2ÔgW,]E³jñC<|ÀÁg 6ÿã÷ôNÏ–,?»kv\þþ{D:!R‘Mˆb‹©ý¸{ íyMzzŠÖžôxÂþ»ïèLÁdY`­AO'¤ó »_Q~÷Šº„éÓûô¯ÏÉ>{J’:ª×{âÓÒì¨^÷¨ÄR¾>CäG}uú›o)·ñdJ~¸ ~ó‚èÁ'äùÀþeG2ý«3Ò{Ÿ0{²ÿú%Ù£'Øíu0Å\œÁô¢}ÃþRròŸ?£úãØ¿m™|v{¹§xrŒÙ^²}¹A¥)n¿GßÄáÏï±ÿý7ì_­q|WEø×`­ÿ”øÿ‰(ï¿ê5;œQ÷ï19*ˆRvÿòû×M(Ž¥$žÎQ“”tžÒ_œS¾\Ñ0yò$‡\‰aóÍô•A ‰•NÇnŒH™ÜÀüaÆîÛ_ ECtt­KV¿}–Õ¤àà—Ÿ™-¿ýž¦…8J9ü§/hß|O¹’$…¥¯%É,f¸Ü`¼'žøv@ýnK³ë8ø§_0™k6ü9=&[xš³žü~Aób…Èsì~ƒ5šh’ãmw Û´ˆlŽV5õÎqôŸ¾ þŒjU†A:È¡R)¢éŒôdNrP0\¾¥~Ý"´¡Þôüò1õ×ß2¸œìh”5ÉIæqØ>ºŽ~ÛãÚ’¾´ŸÜ#ÊÝ*ÄêÙ\Eófƒ×ŠÉã'LâV¯¹øÍ÷Ø('Š¢[ßð(Ëcª }zïcWoÙÿšaÈ(,é/Þb}Bºœ“?ZÒ¾øžÕ·+¢IŠó¢…sXoñ!bâÅoKÚ‹†ü“Çüâ>ͳïÙüþ5zqŠÒõªáðŸ>§þötCŠèZôÑ1±ì±"GɆݳ·DóÒy1Šz=ýzK_õcI‡ä'³‘¢“Ì‚VHJ.~û-ÕNrÿÿý ÌÙ3VÏöD“ ­ô˜BÅ}ΚÅ(ÀYA4ëªs×á~(éÖ! ÆÙ/îLÏÐò{÷ɦ ÍÅ9C9 MrxÌäþœîí+ö/+ô|ÉìéœábK߃҂äè»{Íú‡Šé£ûø¡Ä65ÞÇijàB.´ïÃà|6EEîÁu]oI²˜¾1d÷P,cdªÑYÌæw¿§\[²"AÍÉ%û?¾ mTc{GrpÄüé”êûWô]ÊôÉ’h_»ó×DEE(Z.ý5M#PZ¼£â~¸JU:ºaü‰yš¯†cÒÃEP”o§ch1˺BâyK–³[ ôíHÞTÏëfŽu¤Lã ¼3FÔ§aÌ2Ë‚É:ÜÐãzƒŒƒ’ä  8rùB®±F&ñˆZ QwWé‚U£ò8Lt×݈R ' )B>¬•4çüˆA¾tí]Õs ðÖy.à”!¨ * ù?zªùÊ[\¶©:dš¢òq(þ“#£Æ)Ó:àÍAyyägGÅWŽ>»wØó·«Äk§ §á‹ðoÇÓ¶È$àÊÅXTzssú—Q‚Œ%¶lq4¢ÎøÆ_™½¥DÆÑ¨xsŽõï JÜQž…”TdÀb çð:ø„µØ¶P‚ÈE×õNË™Ä`†`;FTó$ÃwCHOqvlE¸v%°UšhZà‡Sw7ŽãçŒ èyÛu #¢<Áví¸…©0=®$ºHqmÈtÆ…#l˜–Z…Ï_kT–è‹ ‡&•Faر*`€NÞŒ¨^vl“Eáh<^7Ð/*غ½ŽY …ï j’ƒB‚G>o7˜ Çÿ*­êõµœA×à\Lµu@Ó%ÁT=*‹1û}^JÎ8Ü`‘‘DÅIÝô&že°Ý¸6Ä1~w(…ˆÂú øòŒ±OQŒŒ®íq¤ŒÀ÷xK ¬C·Ie¦j@k¢I†­Zœõ¨4 o1e‡7&|/þïÎçW?R†çz|Þešâû/4RƒÙUˆ4#*lÙ"²ß¶Ø.¨²²È6¨“è` ĹðÜŒ@×AÅ´t@JûëŽ]ˆÏQŒž„6·)ëñº"ÑJdºdÞ‡ùÛv€Bg1¶ipÖ…çÛ„™+@žåÁ¯Û;Taw5"Ã`“Øn@(ójQ)"÷Ö΄÷,$*MpmƒÐ1BÚqÙá5×^R½jGÎÒöß8 [ŠV0X\×Aœ Ò€%vuÒ&\°6"'¨ÖvŒµ¸¦ÿ ðË;Öc2ðÕ$ƒÞ\éC˜}5²Â:®g³1.®Â´=2ÒÈ4XlÓõ°HñmƒWáÖQy-ÀÈHâMH¢òæªSeF´úü¿ÙUü¡ ‡ça¸™~ð]äaÎæj¨u1w"Öa½,®Ÿ!vÂQ2ü÷zaïF¸ n%N|è`y‹p¬’èÖþêCP€¡ã°†WmØ µÄ5Cø,FŸ¸Š4Þð ¤Ç÷oÍ5ü 9v@G¹Êb|?Ú.|UQ„NBÛ‡¤œ¾uUÙÖcÖX„VèYºvU€à]GÏ9ô4ÇD¢óx´2š›N½uï®?=)óOkÁâæP÷ÑA¿ÙcÿûÃU½fƒ€,´ïC-„Ÿù(#;<"N,Ýv‹3éÉQ#”¢{ó’¦ÕüìˆÝ¯¿ES¤78¯ÑE¾Æ¶Å™Ü? ™jÚWkLg:ßP¿Þ2ÿåHÓ 'õ³oiêŒÃ_óOï!ÅÀ°íÐÓ )=ÃjÅåï_1ûÅϘ,ÆÏ»m;LOÀ$›á†V4F _ßœW¤=yó}xcéÎ/éÖåÍA@Ä0ýü˜îÍs.¿]£#‰í{Ⓡýã§°yÉù¯_=$I‚5!><¦_½¦-ÒÇ“²øê!ýÛ×øìˆÉ£ Ûß|Ã0$LÑ¿¢o$ùÉŒöåK¬ÈYþò1®ºdûÃ.Dœ’ŸL±ÛëRõÔ¯w¤MÑ$¡z½BÏg —¯Ø¾ìYüü1ùQ+kÊg/©V¬K)NOÉ4ýÅ.$O<:Àw û^‡â=™""ƒ7Šéã›ùm£H'¢Y*lëPÙׯé*(?¤8ʡ۰û~C|tDóê{—’/¨I‚Ò!a#žfØý9¿ù¯³›m,¨W˜ºeö‹Ÿ“çÕ…göé~Â@¹bÿü"ˆl¼èéœhcö[ºU‰^2}rH÷êÛÞ æ'L'l¿yÆô~»W\~»FE ×vèÃS_<&N%¢[qö?ž£—G(ßP™ÝÀü—_ ÌšÍ÷5éQ†­ê›a=§‰— ”×a•§!-†‰Û]pþëoq*‡Û‚°§u„5=^´ŽÞ!$ÞØíЋD³Ñ4m# ¦/i/7 þÃ)å×ßÐÖÛ¶$÷î³x|ˆÐžæÕݦDè•ejÊײ{' çèƒSfˆX°ýí×4å@q´ÄÕ5mµ=¥89FøÛµxãG-c¦n‘Å’(ê¨Ö†ƒŸ±þŸß Ÿë–v½Á{…N#Üâõòã‚úÙ+ú² B‘óH ÕEÅü¾ r-}/P‘Äu™&Ä“8òåšó_ƒUù]åù'Ìe|P¾½Èx‹Ðňæ6à}TQþ§ùO(Ðï¦o(p}w³/i.¶·A*ÌܨþÉ‘ã=׉RÊÐÎÐ:W˜MƒÐrôõ#®•WÊ#¤Ø6¤šˆ[£qØPKƒ><îЈý àD¼«« ó¨t<´Tø Ü€ë`r’€±˜ª-Âp¢¾pˆ«ñ¯kÀȵhèÆŽõعV©Æìškz¢ë‡`T„Ï)KÞ^Ï»83 „¾Ž³SyÖ⮺Õ*‹ÃgÝ÷ e7®÷³ “ùáߟ³óïOS´³äàéƒ#â™ zyFý¶eúå'¸ÝkÊ­¦˜ÁþmÅìóÏH¢=—¿}‰>¢12Ƙ›àq+YCŠÛåˆòÞÞUÇÞ½¼GF2‰ÂáÄ ðÝzƒbÒ“¦Ü!Ô„xžÜx¬ÆÈ8oúÕî&ûö*èÞ XïÂ3Õ 5Ń'äSËåo¾ÆÊ  eÏüËO™Þ+èv-E<ßɾÈíÏSŒv—Á`ªaœô}ÛÂ0ì¶Ô› g@Çá4M—¨Ôо¾ÄxH&)¦óLžœP}óŒìéçÌ&ìxËÐÅd§st*¯“>¼u åØÔ„ïGȰ¸Ö#Óy\½¥ßèÅœì0G ‹©ÚUW¥Ýæ’v× ’˜tqŒŒ† ÒÆ*+ЉcØn±F¡§¦\Óï Rx¢ÃS’ܱûþñÁél¨hÍå[P I…/›†¤ihÎöx?^+9ü?žÒýð‚ºrvD” TÏÎpqD¶8m Q¦Ñ‰¤> _é¢@Áê`°»])˜>™°ûú-ññ²ED4Ulþå[¶/K¦OŸ0{t@óê%ûW—aXÇyOÂäÑ#f'›?|G×¥,¾¸G2OÙýþ[vÏÞ?zÊô f÷Çï±*B\'ÑÜ>ZŠ=vJÄGDJq2£~õ–éW_`/žSï I#â“{h]³ýÃkd2%:˜SÜ›áË-»ïÞЛ`݉g3¤h«vœÿ‰jìž¾?¢®þ5_ÿç¼§?÷þ^³wa'9Ò ŠO1\<§ss¦G’í×!ÂÑ·Û  ë7HŽþ/èßü@S)”3¸('?žc« ž„d1ÇlΩ.vć÷IsGùò-zyJ>‹i7k„ž€«¨^Ÿ!ç§þüýÛ—tû1õ"Qä÷4¯žS¾¬˜~ñß\R­-“{³8yø€tªð¶ãò7? GH³ÅI©€\>>Eéžú¬añócÖÿë&?ÿœáåK7¡x4£yþ?9bñpJùbJÚÝ@vÿÓãŒa½fóü BOÈgØrƒš2}zˆ­†rÀ÷-ÝjƒsÛK&Ohß¼&:}H¾P¬~ýGÄò‹Õó-HC}Ù0ùä>l/¨ÖñÑ!ZuØîªÕné„x1%Êc¤Ùsù›ïˆQÒcjËügŸ2}0 6±8f¸|K»ä')›ß~‡E_Û·¼±$ó¶,Q‡§ä³‡ =Èi_¿¥»ÜÐMñè!Å\Ñí*šUCz² [fÁ'E˜ÝŠòûs¡s’£C²9ì¿{F»•,õ”áò%»·–ÉÃC|_a›n”0S’å< MìŸQ£óEÔÏ`ýõÛÚ#äXè{” 6T-tz¢éœh–\Ûê\_ѯöáäw•?,<Þ@4›ßÄ›¾+nyèyZ##O¿ÝÒ¯[&_~ŠhϨvšãzŠk[º³3ª· ùãûز${8§}öжNHl[ámL|8ƒvºQŒT‡¿¸OóâÕ¥'=X/f»Æë)Ij(ß–,õ‘è(_mINfôoϱbB~\ 2‚ÆÕ¼[U˜^Ä´Ï_S®Tš%*\÷bI4Ëðƒ ð5!‰fŠšËÿû[z×*·„¾¤üx@©è%æ]+ƈæ^LÁ›»‚â‡x·k—ñ4¿¿V ðcíéå{¿[F³¯h×{„Ö7h§ÄÓ©þÂ4½Áõ}ÙË@ï‰&S’©¦9Û G?™üaØž® ž®( Ãh¶ë‰­¸NS㔬ó ¯H2òÚö:0Ä»É1<û–…ƒÑ {mýÂRü´ 僞fk Ð°Ô⺞|ÿõ7~£›¿é華Ý{ä;7Œ ±wNi…œÆ['"BHNè·Ç>F% |ot¢É”(ö´gk¬¸vo=Ñ|BœÇ ÛGÈ„¼jEÝ O¼¯@_ùe¤pm˰onÅX]Ü`»Ñ;~~RÇå°m‹Å¡ýk\gˆsâ<´žú]‹Ì ’E6FêylÛâÖ´§Ûê~[†² ߿⥧„Ç” ÖŒ³1Zb»–¡é‘IL”† î@Ì; .–„VB†3¡—IŠô=}kˆò‘ã½Qõ ¨(XµÆ!!™eÄ™¢_× ÁöΊ`9ÙÕ8§P:¨s7ãó’åÁi®Uéå=ÔÑdB40ûÓ´AéÕ9ÉLÓ¯÷x©‰&Q.i/6´ûx’¡µÄtÃMú¸`:*ÊÈ–ýv‡$ÙѬ¥[ï±Ö†á%Â÷*þ\vt8˜º%9ZâªCZ+ä¤@ah.¶ 4ªÈÑ)˜m‰¦Õá‰òé¦þ”ˆ¿ÿüÅ?ޣ⠚OqÕCL”8š‹(iè›R„ƒôhޝkŒñ£‚¥ˆðü»A†Ãy? ¢ 9úºEF:Xg>ß04•g$Ó»ß㤠k‚wÄË)¶ÞÓW)l;Œº„ÀPiL4‰±ûоóè,Á÷¡s§”Ä9ætŒÅË„t©©ßl‰–ÐV#dž9›“æqær }ãÃsYhlYÓÕM@q'1ø'DÓ×Öô›:¨ŒrLaèƒ_Øw†èp‰–Žæb˜LHò[v830ôÅÕöÁ&µÇAI*0D¤ƒG¼kh.¶¸qopƒ#9Xnìêٺ…N%íÙ%ÖË›È0 ʳà5šHkD:ö¡ñ΀Œ‰g9¾ ‘”ºHB(À¸ÿ»¦a¨š îKpFÏ2LµÇôžä`’–ZI\DaÍóï ÂGˆ—,ºÈÑ™)1ûí¦ 39×Çý«\ç»e!Õ­$ªÀs0½¹#’ÉqÆæîk?ö,ˆ1®°ÇvÎñ}Iß ŠÓ|SÑ^n±^"UŒŽ"ôLү뀆O%μÕ(Ôx;˜À+ðšt9ÁV%¦&añ^âm3!2Ð Ez´@YC¿kP³_×ô•!šN‰§ñØ-’ø¾£ß4ø("žÅ¸}ISv+Tå:xì,ª8%š¥Ð74—¡Š»!DK%?˜´qÕI‘WQ{?²‡ºÒŒŽ’ ÿ5ÊóUþôh{O7!ÞÏ™1…ã¿ýóW[¢b6}úåjšËÖ(¢b‚ˆ ßlPÙœÙ秸ýŠòÛW4µ%*r”´ý™Ïq݆¡âÞ ~¨iÞ\@±döhI¾F͖ĹDhPILõòå«*KD”ŽQ]ü˜ª±*QÓ)Rt¸þ–iß»€¾Œ¶nƇنPüÃT,?¨ú^¼;x‹¶'¢³_c*P&xñ#ìp'£ðJ±¶ëPð)ù#Áw'Q="JCð–".¤á%c›HÜ%ü\ˆ‡m,øwNV[7¤Ÿï]hÿ'*M±}Ű-ñ6€U¼á¦í(¾|J¢j.~û¡j²dùåC”ï°ænö¦ 7ØŸDØrK¿ëPyг›ÖHÒ“t-Ñòáúuš/‰g ~pá@ckÚó5^(„’Øf@Ä9Ùƒn¿Á«)Âl©·žåGì~÷ V̘<9 {óš¾u˜¶còɦæ4¯Î©_½Åª‚t™2ì “ Êï_>zÌä8¡y{ÁöûùÓÇD~O]EÌæT/‚‡1Š<¦í±=¨4™ŽêÅ[’ãûDqCùª%zŸX×”/JÒû§hâë†ÚO3\³eûíbº Níånì„ A)…ë[Œqc¼Çõöš<)¥=†~l÷þ¹Ê¤ Ö-ÇaD=ÎLú`™ò¡pIމGûv‡œ`*ü ÉÓ]4ºJôGòŠÿ®@ÿ{¹f1Æ=…á;L­#>¸Çâç§ ç¯Xÿñ%rrÊôÁƒL%Õ‹4ÇâgŸ DÅþù&Ø/â)Ó‡9õË ù£{˜Íš®“Ŧyûë3æ_܇vEWÇdsØ~¿fòô˜î͆ø`‰Ù¯h· ݦbþ‹Ÿ…çåõ€Î<ÎELÒ½}M³êˆ¦ têiÎWħ§Ä²\!:AϧDñÀþ›7áà—÷é_¿ Þ@|0Åw%¦lÏÐ÷%‰f',>?Æl6´— ÉÉœ8 Ô¶78'ñ}Oõê"š±øê!®¼ ~Ó’=\Ò¿½ÄŠ?´D³9®Úá£)ÅýÝÛçTÇüÓcº7kÔì€t»çÏi¶6&ÂZD>'?ã»…y¥5ײž¸±ØvÎá¬Ä–š7kКx¾ £ºÄ›ˆìÁÕ³P‡÷ÑfÃöå†tqˆÊbT–g†Ý·çL¿xHûâ5ñÉC¤h(_®ÑÅ‚ô¨`X¯è7ª˜#Ô@¿˜}zL÷úí^/¦HåÃÞ\n±&"žê0xŒ]¿å"Ø>]°›È1Œ @ç9f{ÁúëWˆ8½u¯z¤ŠnJëÑÅ=ï磺,• "C㈦ST~kèþöâP:ºío%žqfDëž© 8;=Fzƒ·-ÍÙ59$™)̾Dfs²£iÍ:­öÔo.éŒÙ§§(Q³vÎЀí[¢ÅJtôûžìþ=$-íª'YÆìŸ]0ýâí¯ÑG§ÌM(Ÿ=cû|ÖÕñc‘iLœÆØ}Íà4‡ÿø„îåk •؞PK“œ,Ñq8ØÉ, Òýàˆ&1þ†$ŬÏ)ÏváàyGX(ÝÌýØ:6Ì<ñ<ÜWƒÃÿ'þý½B|èßH¼mClòm×Ã;¾l¡B²N¿¯JíÄûa”ggjTFÁƒ¬\È}ͦLà«-Õë5ÆX¼H‘LcL×¢âÛ¬é:È z†]‰u* õ=ˆˆx1̵¢¿\ÓlT…bTÅDÙU$•Ã¹Ž¡PqŠŒ,Ίñ9x‹¡ÝMÔ ›óu ëîý]»òîæ ®¬Pˆ´ #*2>(C Bîím»õFï$qDHuûåþî„©ø€û^j£‡ ùÔ%¼Î4 Éý{¤©eûÝ"ŠÞÙ»Á‘?¸G>±Ö¿#¿ŠíéæúrGåÙ”uð*qc/¹Väm8§ÊÛ× m<´¾g¨[¼“c€»¸ëº!yxŸD÷l¸^«|ÊôÑ1Òtcvµ(leS5 UìâãïZ†ªÁ9E”'¡­4úëݵUÎŽm·Ð*ºöô*íx…Α \¢´Ž3v_¿ÀÉ”8ñfÀºà9Ï> É<ݺÅõ-Cñ4ÆÔ:èv Å'ISK³ÚQ¿-‰O‰èèûˆü0¦y³E$)ñ4Å× };h¬ªzqˆô Íù@öp‰VíE…LrâY`û•'ض¤¾hГ ZÚ}3&Œ‹¼RcpþŸ),ÿ¹¯ÿXæ=Bkâ|²ÂDj°}PaTaªc¸ö¹ÿY¿ÿ¯y ­kþßñúÿ×ì†],™>ZbwkÊ·kD\g)Þ⃜æõ†>búÉ1 5íº kb”‘Æt—\hË}ëˆRM·^c}Êì“c0á%–zÕ3ytÀp¾ÁzÀÑ×5ý¾cúÙ'Ī£:kQ‘‡(';,èÎκÐ-S±§Ýl!ÊI§qXo¬Gê„hš!å@õò¯rŠûSìvC[ÅÛ`ºðA8†½£ùùA†YW!£~¢Ãá5v{ú}Œ"\Wâõ„É£\µ¡ÛZ²“)í›KBYpr´JšNÃŽzã˜<šÓ¾º ¤ÀÔúͺ&Xã¢ê«×èDDø< #L‚‘ :¹B†d³¯è÷=‡m (PqÈ ¶}ƒ·Ç åUÌТ§Ù7èdŠN5"‰‰’ýó5Åã{ØíŽèð_nhË>xãÕH»s!$]eÉï/0ëKš=$Ó):£(P↋jDHð¸Nh ñ,‘­dJcv[Ê×—!ÇY„5%(›êfûs ÓˆàEï¾ÌØ4ØN ³<`Ïý¸·Ý^—®Ÿþ‡0å¥@ëx h±^‘Ìg„YývW£Ò)Z…ÎÔ$G'ŠaWcÛÐ…IAñ0Ëõë5fؾG¥9Q*pÃ8e[úÚeŠnß/&˜ídJñpŽ©vÔuHyraF¦)qª¶%V$L?YÒŸ­±V#”Aˆ1ýËÊ ò Œb¢\N‚ˆÉNfa¦h°Øº¦o‡pÏ^¥”õ^FÄYzóû~jÚ»BdPÀu–†úú°n¯gÞ›TüЯ|oªQ0·jÉÔmJâÚŽ¡êêŠD¨’Yñè¥B«¨¿X14*Í*Ä ™ºÁ‘ÏLÕ3}|Dóê9m5¶ÄÛžüá#²YLùú-fß ¦sâBcªø(xE¯BÕuÑž¯h×uÐ “%Á¤î-R¥D“I8!û`¹Š™Q:\ÕA!¼€ð·ŒôNA‹E šY÷ŽgzDm¯7¡ÕþΉ# yY„Ê©Àñ/Aüˆ¿çÚ?̇î ë† _¢JÒñx¯°‘suÕD7ê³·ö:²GÈ€î´}PjÕ8Xñ¡›È™g>òþÂJÂôñ)J!³T¼mN+ìnTh½ÃÝE& ëMHa¹…^Q¢Ö¬ ¥Â`ª:X›ì€ÐQ(F¿Qýmˊǘ<<%™j¼ß—»9%º¶¤‘ãQÓow#p¡a¨:¼Ã$ÑâɃ%~èÇï* @õ†>VŠÇÇØý§fÄiÇþÙ I¼ÊY|öé»~Xïé÷hé‡ç|¿*ÑÉŒîr‹ˆ4Þ 7Ь*âãûä˘~½A¦¸†ú|‹ŒTšåÅ–ìž_=xD6…êí7DÄË”xZ`v´;Grt íŽn½‡tBzú]à]‘Â;Ivo‰À!UŒJÛo^ ŠÙTQ½xƒSáÙc´léÉ ¥ýõÜD|0C K·ÜtÓn+tš0l×Ô«šâÑÒ T¯VˆdJv˜âŒÇ‹_­i÷–dQÐ_œÓ5žéÓ‡SÒ\¶¤Ç˜ÝŠ®d‘ƒWß`ZÈOô»="ʉb,}K·Þ!t ¾Åù„ôp‚ðÛU´5ñá:r¡°³Áæ!•@¦ša·Çì‚Z°ÝÙé1QìñÒcv5íz‡é-ÉÁ* P³%IT¸¡Á”}ÕQ|òe¬È‘ª§»ØìŠð"&=9@IÒ •KÊï_ÐÕ%e@ O4®±†Þõ¸¶ÉxŠø`‰NÍÙ $ó¡Cº–í$Ù½èvìžaFiyk~lÛBœ‡®[âÜ•¸äGÁAHÇâÚ6$RÄ"Ñ\+3· hS¶¨ô|ËýcíÏþ>ºNxï˾ìk†²…Ѿ!{;çB.¶Ò8k°v„|üˆ:tsf»»ãzg!š°üâr ©U UCHlèÆlÏ4¾›ûèAH³Ìè%–R‚Œ‘ZÞ Y8‚\–8£p¦CÄ Þ¿”`íµÒpõlóÏ“Í4^*LÙÐoÚYë:œ5¦A}¹!ž/¦¡¯¼ß ħ÷Y<=Æ5uHüðŽa½ §æ¶Çö‚ɧ§¸ýd «ß½‹èô€ƒŸ?Bö(G{vA}Þ£²”(Èh°{K7ÄLO°m;ÚMÜÐÓW†x¹$É$CÕâ«s¶¯*òãÂyD’‘°ûáŒâégsOùzM¿‡ôtJz6Øæ²Cg)¶­ƒï±Èr ½Ø#‹9‹Oi/^³]%;ôïÜëS2=Êû¿àõ?ú7î>;Þ+²Ãt$B®v$1mÀ=_-ÆùïÿW\Ãßìšÿ ^ÿ¿éšm;=~Ìô8£=/q]Eùæ™æàT>£8^Äì¿{MW*Ò£¬ÑãÔ7Ôô»k"Šûô›r2G C»Úã$óC´¨ÏVxÔ±¸ÈÈ@ÖÍ4íê‚vß“-O~GuYMçhíèKËügñåoÿü9™‘æŠæ|…)éAïqMçRw¬¤‚ˆ©·ˆlN¾Ìè6Ñ$gX_P®¦OŸP,%»o^!'G÷2úmÃP xÓ†ÎK,1åž¶¶Ì¿|Šl6að>)°Íc‚VJ…j¼ŒÉ¦4¯/pB¡”Igz¼ô8¯ƒJ›kº‹‹@úT1ñ² Ê$CÕÓo¢ùC{¾Áa]éw zº`roư[ÓWÓ6tûšx~HR†²]RÇ lÓÐn;f_}‚jw´&Ê`([ÜPéfd§‡(ÉH(¬Ø½8Ǣ(RȱÈs½goz\Ûûd„ÕIÛ´ b¢yA²ÌéWgt[Gþè_®ØþðC<Û#BZH‰mH òyöDEHƒñ¦Ã >|ïQ 2ûë"Z†(ÕõMˆr9B·Júr šN‰²Ûì±}mCWUÉX<âøús"DY¹¦Á)UPkÓœìhHDW^qAì³â:*QÄ*`º"žÄôë=Hð^¢‹<ü.¢”\7Ú¼Åt*-ÈNAq0CY#Ò[•èùaºp(=Ï'¸fK{YBì…Ž‰g):Õ´çkÚÕ–äôIb¨Îv¨<Åu–äp‰’†a_bÚ€õ½Eͦ¤3|³§¹Ø…b–!Ü@·Ùa†qhvìŽø$¤¤)I"¬èh/k¢ù[ïªw5é|Óý`Oà±Ã€ÙéÂõô»!Äþý=¾î?ÔO˜ë0¸!XÞDZ0yx C‹©‚Í*ZÌBôcœ"è±F!}KsQ"":2³IPEµ§zy†C#œÁ!B¼£g,eè¾¶;oÃÀºwoÀ£N"l× ÒÙ<¦=¿ÀëŒô £=¿`¨ =Y„(»¶¥ßԨɌh’`«Óµx#If˜ªÄ9‰ílgÐEd§š78¯ÈŽ&ô—Û $$’aß‘àê5ÆFHLÈï’0ÓãU«HæsT*nTõHcv— • EcM¤ d)'èÃß|i7Aèþ â½Sɵ-³0¨Ø¶7>Ù¾þ-ƒw-·ÿÍ{m8ât,>ôeKüPÓmJî¤xŒ^î;žc!ðÖ`‡I-Q¬Æ÷ã|Ìâ‹'$‰ V)Þ‰k3Эê»i)"|g*ÑA9¯Í-;‡ jAs›¸%µ`ØïèkƒŒ4¶ÜÃô€ãüÚ*,jÜÄ ­6{ˆRt&¨_]€ÎѱgØ–¡€6AyBÁÂ4ý¶ÁºXâú}pÂá—÷Î6xá/ϨÏÞ¢GhßÒ×EH Ò×–˜Ê¡¦1®ëñVS<9 ⯟SŸï˜ýê—YÃÅo/ÉŽ' eGvzŸüvüÁÄD©Â´2)˜|zŠ´%ûï/iŽ.¦d3Xÿþº^#åèw#q3ω³¬D/&ä'sh·”Ï7¨é”öü-]çn@câCßóO¹/>ÒûXkì/úz½Ç¶Žå?~NLËú» ÌЇMë¯òûÂ5ÿ%ã¯zÍÿ;_ÿ·ºæqð[Eg!Ÿqð󇘷+†¶Å´Ùý|]!f3D[ad‚2[.~û½˜“ÎDEN:K±õŽí³· C=ü9×|å‰MŠ<ÊeF2Uô›"›3}0aÿ‡ïh*Åâ‹Ç÷Sªo¨ÏZâƒR„ÿ®Lž ”E)ûo¿g÷ª"ŠcôtN<ËpÝ× T–#|Ks±Æ‹xLA2 MK¼8"il*Òˆ$!É «ß|‹ÑZ†!j¤ÀGT̈¦ñ5Ñò½zP;„âý”cìZËd†è¨Þ¬ÐócÒ\…œgBGÖ”[†}K¼XM'$M·®ˆ ÚW¯zM¿Ý‘ú”Xî¹ø—·!™iÜ_…cZ¬‹(NNX<]R¾ø‹ß1ûÙ~uSÖ!žÎZº‹KL# z¨©ÏK¢£#4 í¦'š/‰ ϰ¯ÀG¨4bW‘9ó/âë-ë¯_‘>|Lq³ûö2_0}z‚Û]°þÃ3ŒG@Í»¥v'­CB‡µ¡{>æ¡›Ö±øùg,žÌÙüá[6ÏVDE¬5¨( IK™¼õÑ;çÑÙtL³·¾3S»Ý^îÔIíá+~´6”‘ÆìJšË"Ò7 ™„ÖºU±øp‰°Özô$C8‰ë›@>š&ØÝç#âé•°o 5’ÔJÉ•$!·U„x"i†]ø;z’ŽÑs*#C,)raØk¤ñU°* t"Cñ¤"„À…ëÕtJ ¬â+Ôò_¢Z]ALÄß8:+úB«;-ñ±×)yç”äó‘ÓÖmöè_ðþ¨"ýÀ>ûÎï²Á¿Š”7!ó?—)«àWA+wÞš<Ãp}“ ©‚Rm-2 ݦ C¦³|ô=Ùk´§ï̈& $¦£äâ1³r’í¯qänpˆ8FG"d=âÂÿçÀµ]ˆIóq*³4 Ľ¾÷„Öè< ºè7{ñèµ78Ñ$gé÷{„ΈŠ8\ãU´S:!JB¬lÓ¨À–Ø9¤ÖÈ$ÌàÕíÔ¨;'o¤ ÇËkì¹ÔÑõ°Ñ\ùrœi/!ÚòïªîÌ éò#úWDœ >˜bËÓ[t–£2†•†Sµø±›&´Æw™è±óç¯iÁ>6®³2œ¬…B@x°Ä5 Ì»€^…SåT"¶%"IˆŠ$¨™^¢ó, •=›!Å0U)T¢Â N‰ Űޡ&¼é1Eçá`î­Á4=2NPZ0lwx ®k±ƒý$*‹F/0 LÓ]ƒE|?Œ@0ÐÓ`×våõ°õ•£¡‘Ä5íMÒ’ãc­¿þŒŒIðF׫–ãþãÀšý"ħ†€»¡ï =’u÷_ +ÐÓa;Lçˆ&ýz‡³…ï!šOñmiÑ,ovõ¸ÇÇ!Ù§kAD$Ë)¦ 1ž‹žN`hè¶MˆÝu6|3„éÊ5Éñ]‹mm°† Ðß·‡ßß½}Œ¹+`½W3ø1NV¢®â|‡án†åd¼öˆ"Jãûï!*rÜÐb;Äオ›ê»¶UA 0÷=(ð"ì‘~ ÛÖ¨,CiÀP†û@‡Ž§)¶,±^‡˜½® ð4COrÝ”MP˯ŸI†J#P— ˆt!¾ë1u†4ß«YÞ )¸*ß©©Â æhÕ•Ay¾6k|`žì=˜à•:ü!·€â«ø!ñ6éøO×i× ø?ÿëW[’éìä¿þÑlhW{ª7[ÒGaw†I–ÿê1¶ª©¾ûžre™>:¤üö[Ôâ”|Ôá~»ÁßX$q‘`Ë=½Qä÷NÐjL#Z¤1ëß}Íú»5Ùñ IêQ³CÒ¢gý/+’£‚úÕ+Œ×DiJŒþc0]Cúø)‹ûû¯ŸCÞƒmª@{»ºq㙉à9mí­(š£¼ßU”C—ß04:O¸}ýß熹kZçÎÂE8Ê2îVÆæm\87^nã±*à×mw »}çyNœswüH(y“›íÜM4W tÂá/?'ÉÜõ°¥¸ýžü•7i´xK·i°F µD& ³ß1Ôí¢?P¢)*Í¢£>; ­ïa¤ˆõUEñé—Ìš0\žãäŒÙƒˆ³ÿþ;|\ pØ^0ûô!²ßÓlz¦_~‚4V¿{‹ˆTx?A{~s³OÙ÷¹<"jv€kwT¯6Ä'hUQ­Zf_|A^´œÿï™ýÓWØWß³}cȉ¦Q8Œßÿ»ûmèt7׃õ¯ܨäæm±]F"¬÷ˆ(CÅêÚ–èHÙ³ûᜃÿò~õ†Ëï6¤'G([#¦ÇÌM)Ÿ¨ èèV[œíš­cþŸ~†ìÎyóß¿#{úG_=‚®¢[5 û=Öx¤Î™|:§yþŠ®Iˆ ƒm]Ø—£Œx1ƒ¶¤[oñcš–<ñr‰Î"lx Ùñ³/JŽ;.ýGŒÊǼè›n³Œb”Ò7¡ ª‘„¸öŽ †¯;èR¼÷<Ë(F q'Zøýºë¦Ëâ­"^.ˆ2yS+ HÜPáÚþæPô‘ÚPÆ¡ãÝ\lF”÷?ÿéfzNÑУ—Õ†G7áÑJ¬õpÂEë€FE€Rã çB;IxLÓ"´ÓÞÂiJ*1"‘5*‰Â+Á—æ{¾D­Âu[wýa­‚j1T8ö¦êÆÓÀx⻳¢Ž¯wÿ:õ8°0G„«¸A…þ4©ã©ðªO;·ÕÜk¬w¸ñ‚G˜¤·gÄÔÊ(Í£áG»¨âFñ½ú”DÈsæªÍ¦DH4¹6ëûñ¦‰Æ˜™ë‰§¯Íýþocš>`»ûaT ß¹¹àÝm]*(Z㭿ɱFÅé¨ Ç” ª(B³Aȉ­ú•¨ÇÓ°saáöç,ѤÀ&(Ê]€¿ˆ8 ÷>¨'½ÁK‰Š¢qduCé Òô& ¦j‰-+l?fÜj‰B²ˆS_l݃ô×0U„ö›ÙVx)*D Éhü÷½ Ês~M¸¡7?rÿŽŸ½¼Ýzú“U~NÚOý7îëÿ5ïéoýú¿_óßæšï ÞƒL|7Fsú°ÎéIŽ[67ÝÞßÿšÏèFi½«DÝ?F½ (äû87Ö-"MÆà„]$lÉi®C|§ëÚP é ¬rizÔ¤@ 0U3®Õá=yÄ'»/ñ*Bj9ÚnÃ^‰±Øª Öqm¶Ãq2K"͸ª`ì5PIFшlöwö%PJà ÓÆYÆÛua½v!:.¬c?˜04žÆ¡Sh|ð¼îz!QI‚³}Èœ&DÛJ)ñmöYçB{ߎ'­q¼†¬{ÃP×È<Ó@Ï• CŽ› gžáÛ© þšaTžïÚ¼ïy ïFÚþ‰Àû»¤$רzn¥qùqžEôÎ|À7Â^õ(Ïñ¾“‰Åt7 ³$`àë×;Tãú×Ûà!76|ïã‘ÔcM6t£Ÿ;s3ÖÞTœî*ÎqÄÙw}Pȳ«¨G‡¸ýù}$‰Lü„•å]ëÌ»ÿðC5ÏýÐ;ƒ2ç#ãhã{ó·ò;µÙÞœ¼­@ÿóW[MgóÏN°› ¬‰PYÊf¿¥Ûõ¸ºBrüŸ@[Ñmz„ëØ|÷šüÓ'Øósœš$A©;Û O˜¦ôç%r¾ 8Öì~ÿ]M(|›ŽäÁftçôCrÿ„8©¸üýËúRUrñCSe{ñ?'/,ÿã{ÔÑ=–ŸP}óåjü1N.ÂÀ[èLáº×»ÑÚñnÇ]Êÿ¼¥ ™!ãÑ<¿œám…7â®÷éÎôæ§§YÐWî ëk\oom"D‚ÎÒÐÚ‘–ör‹Ì‚rŠ »5¦H§ã`Æ·G*G·Ùü¨múM8üÕgIJíÆ"fû‡¯Ù¾Ø!œ%}ø„ß?ÀµÍ­)bÚk”wˆð±]ÏP×§éÛŠ˜2Ľ؞ærN†ˆ™#uŽÝj{"ú}Ãü?}IâKv¯ª1^(B)ñlBœxºuE4-°uéô.ÖP_¼ahß„Úl€üñÒe„:ÏéÞ¾àòw/QÅ”d~ÈôAÎú7¿£·9‘# Téñ1ñr‚Y_P¾À\œA6Ã÷;œ/ÈN&to_0ˆ)‡?;¢úú èˆfsŽÐ3fOè×ç4Û¥U°ÕXK<9 Yä#‚kP˜í¼wS¿à§×Î#£™ÆxS‡Äþò¬@Èžîr‡ÌæÄÓ(Ôu]©ZT6A%ñ-ÐË•?úí–aßlS£ŽN9øô”òë?R×0ûä Ô+úªG¦C¹CDS’eŠÙo@æ$‹œ'š&,ý¦ ÉR…¢Û6 #²Ó Õwßsùû7¨<  é’ã_ÞcóëßÒRxTCƒï.þŽ ü¾§ùʲÿS¯ß÷8%IŠ S5whÍ×%öuéåPù”x^Œøvü.>PŽM³Ý¿ë3©Õõ‰HN}»ò}&)É<Ç·azápŽqJ2d¶ê$¤2غà ‰Žƒš¨’•È@„ó#²Ñ™ @K Ý– O³ª‰stýnÏ08„“DÓ%CäHS¢TÓoö!l\p!YèàÝ ¾iÇÇé?E±qDBXì8q+~ôwÞõBy!#æÙãn ÓÛx×æÕ ËeRÅHyå!s#¼æþOq3]þÞ)kÜ œ³ 5ñ¼@Ž7¯Ô‚~·§o‡H2âi:èQš®ó¨{lw{(÷OÃÞãFO¡P"|ŽWugÇØ˜€ùôn´[Ì'(aÀ‡÷ ¸*ÑØÎM2L]KÉõ䬎ç<*δkqh’y†)|˜*t˜h6&L5KÚqJTDt—k"¡ïÃl4MqM;æ@ª 0»ñû“`꽘çSu¸Þá]1.øüu´˜¶'šÏfÀô}Pµ•ƒiJR$ô›-Þ)<+î@éDëå8+ÇÏÓýDáí/ þ©ÿæÏ}ý¿æ=ý­_ÿ÷kþÛ_³ -ï0]µvÄ-‡5AF¡{ù£ƒÐÏH\)ºyŽü˜j$]XÇÆuFªœ­Ñ‰Æ¶]X‡Æ–³w=Wµ—¥À‹:D­‡ @ƒ„ÐÈ47„¬zçB×M‡œE G%üj6Ç#³ )tQ`·;ìˆá^ "»´Bª0ë44B†ù!k†M×:æìU—qTòlø[<àRB)¢I‚©jœõG˜ÍãÉ¢ÀÕ5ý¾„5x·ÃXM€‹Äü“”æŸXýØyØûñ3¥Ãþþ§6F!Ôȸú^â*MŒ÷ýÒ¸k~Ç Ê{öÙ#T!#A¿^3T•O‘D&1Q"hÏ÷xåp%š¤”/ß0ùò bÑ3ø»9£º¬˜RF0úæ±wÖ¡óñ"»ú=xg¦ìz øÊü+ñ¾Ç5!Qì݃ÔSU!Ô@ëå-ÔL§ÉxÊëÐ#Rƒ3È<'NÝ:Dƒÿ¬¥+Ò“#"ié›S5X¯ˆ‹áC!dú¿«Fï–¿‚†¨ Š|BœJº‹Ã…–…±‚Á>^Nð]ƒí}.kBûD%):X éÁ ‰¡ß– CÅ1B[¼ýÐ ·¢Ø>²߬î£â§FõÙ✠ }çËRi1m *–?Žú¾>ˆ†ÀqT¸ñãBîß+ØCŒ¡ ‡¼Eñ aÉUýõÆKr´D˜kÉ<ÓJ|˜¸}=wn"‰­új¡(wýDA·£‚<žÞ£\ÃP[Tš¡c9ž°úªCçs´ž<¶7H’Ÿ.ÀÕT¯ÖckËߤ¢`‚¿XE8Ó€HšñI=¦í@h„T¤‡S|ÝеC0 žGá³+)N˜õë4Î$EŠñ³T e9‡íºæ¡â"ßÓ×5ÈÇ( 0¦7¡‹Cw¾ÁX‡.¦¤óŒaW‹ªÓ•ÂïýkŽöM…Ìtìéw=é½CèJêu3Eþþó÷ŸÿØ?Þ{T!œGÏ&`:†r?Ë¿uî·÷6(¡~Tó¬ é;Iºo},&¤‹³ÞÐÖÉtŠ­*¢£¤mé÷†x1AM"|=Ðo6 F’L³0?¤"„tؾ¿N) s D$:S ë*Ì`OßÔ0t¼À÷5ͪAÅz|ÏÅo1m‡P1*–J˜dD‘Ä‘ÞW“Ì5ýªÂˈd‘áö-2OQ™ _‡èQ•&He1M "JI—9f³eè,:ÏBÂŽn`è‡q•ÁÓ<†{/ID)ô›Û+T&°m‡ílˆØK}ÈEš«ÍLÅ ~èI†ò'd‡S|Ý2”íxü ÊÝ®!t M‰S9J´£ˆ² ÄIo\@vË0›$Ô¸G_ïüÚð=¦s¨8 QwE<¶ãˆ•øH ðáÃ{Bƒ4×I).RŽ˜iwû€¨®Ñå7]èàðv /[ôbF’GôÛÁ4–h BpÎaÛP—I}5M'o¸ÞƒÒij­å]ò²–ئ¥[í0ÖÞIݺû Ùͪsô¯¿¸Ê¶¥T¢þ èýÏ[`;ÃË»eÓh¡ôƒ dìka”Í&î!± aX­:lÖ!Ó?T˜NQ<¹h6l_\0ûâ1”Ú] èˆ8#xD<‰ÂM=8†r‹'"YÎv{d–%’n}ÉP[ü`ÑÓÙýy:w%ÕÛšìþ’îík†6"=YàÛŠf½ÇöŽÉ“OH§–êÅ9 Òöt»=ÍeE¼<@ÇÈÆíúnlÑÇ…§yuŽóúæ :‡Ð12IñÞŒaðbŒ‘sadp7|wïß)&(DÆá<÷á˜÷”ñ`k1umL°83Ú.¢[à˜[oYÊ€æöïG±ˆç<®³ÿöþ²O²ìJóÿ:&+…U]}ïô̧œûͦ RIIÊ`'ãC›æÅ>æ‘P’ªº;ì•”±Ý̶ZëYP<:¡<E«À ðmK·5äcD°Cƒ»ß÷u7¶·%t¾ÝЯ{Ò£ æü ç’+Cz¡¢K ¢"Aûúò)“O¦t/ˆ²Â,Ï !C•%É´ Ÿé/^rùû¤ž2ÿüÍ«˜t™àš™Vña2IðýŽþrƒ5rtÈì‹Ç„zG¿ÚP_\`;Éäó§(_S_ìp]OzpLùpŽÛ¬1ËU¯ª ™•”*ìåõ¥Á;sÕˆkIŽ™<™ÐüùÏ4[ÅèÓ‡Øó3<ß7˜Þ¬§xøˆñGôkºó ŒÓŒ?:dûõ3ÒÇõ’ncÉ#ihÎ6ñÁ“JQŒ)íË74 :ÒI*ô!ü|vÒ¿eý;Q½¿àgüGÝÇ=ÿöà VQ<<&Ÿexk©_Ÿaê.Þ;ÿ¦{@Êä“Ǥl¾{íº(P“‚ü`DzF»è)éζTOØ|ó ^Uh¦é1MKvò€bRÒžŸ"²)ÅD²úúz2ÁÕ†òéìÅrrˆÎ¦1‘뺩ÑÓ9Ùl‚ «oŸÓ[E’$e‘ʶ¼ ¨IÞ³þó):Ë1MÈfŒO¨ÿüšòó1/éÚ”l,é/·XcHg‡ä‡3„w(ÝÓ¼>§Ùô¯HŠŠâá”⨢~ñ‚Íóå“'dó1˜áÖÏ/HæG¸õ9¦H)‘J_va ê ~ûÁkÆŸÑ¿9GMO(ŽR¶ß¾¢ßtTŸ^}×DJh‘ v‡bˆ oéõà™ÝÇèmu‡Oÿ®Bún;BñCëC3oºCn¤ôEJŸU˜ÍÓ8t~H~4kB¡dËê›g8FäÓª¸f‡«Éü€d’õ¨ô½´oX}óc#ò|MyŠžÈÑR4Ü[ÏH ™káNóq_Þãªq÷ju=“T)ÞÚ;qÞï‰ò~g&A¸¨»I­%Öq®í0»¡äD¨ô$›NPR Ègm X^ªœàj¬‘dÓ1˜šfÙ2þÅcÂj1»iðNQ<™¡¤§»ØÔ@?(6„[€ðï#7Öµ=?$ ÌÖ“Žõ«-Åãìåý0ÎÆöôu‡mzʧOÉ+GýªŽ¦à@Rä„zÃv±Eå#’TÜRnï XtJ6´¯/ñ"¹r¡¹ÿ …Á”·„ÔšLL¼rû‘Àõ öùÕèXðŠëzå^1Œ#âyÀ7S³×w8EyÁ ô¥^·y΃…'D= êáû¸!UI¡Ò$úq¾w'ÇóßFÔ!=ž¢Ä€‚ó6]EH…kúu[o#Ý$1 R&W‰R úÝBŽÊýbƒ˜2ûxJûì Ÿ$Øí™ŽHÊœà;ôdН¬þ|Fþä#&gt¯_cB%פÎãÍØ¨¢öÝr‡mÔìˆéÇØ‹-!xºÝkb¤¯Ûõ˜Î óФÊÁ ±ð’h=”KÜrÅî²Åi2ƒ Y?šÐ¿>¥k!?œ`..åá[ºº#ôŽüÉFÇÝ›-®ÝPo åá˜ælA~|„05^¤(-ñ¦ÇIjT*ðF‘LF¤#0kšm÷NEó}ã®{'*?¸þ'Àág¬ÿYß鯴þçîáÞÿ {‘–%éẎú|»Ï¿ÿ¯¾gO0ŠÑG'SÓ\ncDš‘MH´gûÝKœ,©V˜eC:/Ù={IHÇ$*`Zƒ5}¤oå®Ùd†Nír…ª ܶ'™Tø¦] Ré,¶'ø€Î dš‘V°ýþ½—(™ÆïQ%‘ËÜ4èÙŠ «ï.I'cÌvÃaª³iÿâ ýé Ú:¥¥Ò7.9ñîûï(pyßtÿz­7•—$…Âßj*~ éïÈÓmkWI•{§-#·5B©Vù$?c—8öÆÕ2É¢¡9\K¿n&‰Ä¶=žˆÈ•OÈg)¶â†¿ä`£i¾÷Q˜ e"žcòÝ®±E#dz[ZªGcÚ³‹HÅ(貊cîèq/b©<¶íÑã)ù,¥~q ªB—1<"\ÆßìpF’LŠHëÀEû½d÷{ÏT©#ñ½õ›ÇljdV¡2}ÕÛGÛ˜$ñÔC®8J‰uMkc§ÌrtUú»kâû ÐU‰ÔÄMG$a(„â*Òrzï®LÉ}o)?B«ŽÍ‹K„ˆ|ÌèÉ!¢ß²}yŽó*N¬Œ#=œ‘³ëoÀxSÓ-:’ù’ˆNïÇ%R„!e°‹CL‹Y® "^ô¶5d‡s’R'xÂ^)¤¤¿<§]Òù¼'›èÎ^Ó¬z’jD6‘ŒFøí’Ýës<!R+¼cElOp’ìÁ!˜š~ÙÌçä‡c|o°Û-ýb5œÓqš’ÎIç%í« ÐÙa9„7Òi9\ô´gtu@¥é¸D(.K¤t˜’2Á׺ŎÀ4–ñg0—§´[(¦Ää­×;žtvD9O¨_/)²{ö}ø¿<%¤cªS\ÓÓ]^dA>“ì^.Ðã v³âÎÅ;f^uöü¿òžÅUÝ‘Qé š‹ÝUèÇßfÏ RŠ“9RX‚PØõ×Û˜AP·¨Éœò`mÜ”£>]‘'Ÿ:zÛÍçÙt‚ïv˜Í™)'˜íŠúlCþðÑÖ8«HfUÊ9AR$ÐoY?ƒ'It*œÁ5†ôðI‹ëɬŒ6yWÀN¡Ì¶ÆÖ="M ¦#ÎlÙ¼ØÏf¨"ž[>ÚÖI­Ú‚Å·] …QêŠÇ{]`EPLUEô¯F1Hk»‹Ï !ÞÃ5oét†.“·ýoùº „³ZbZù}ߨgø®!Ú*Fñ¥jªJtž£•¥9½À‰œâ°Â®VtkCv8C—i´Ê½…ÜJt*hޜѷ å»Þb="ßÛ³þ˜”í÷×ܑΩªŠÈ4öï¸-½ƒ#òÎõÏ×ß·±fÙÿ“Œô'oìÍ(ïr2zr@Ømðܰ ¡sd|·£_ׯWàŒ!ð­eüù'ŒŽ¢à`èf¢Á¶%•ô‹uD°*ÒRav=®s¸¾Å[…¥„zCßgL?°ûúÏÔµ'›Ž sˆ,'Ø-4*™=È`i×[²“§L,ÿøÆŽ(æcÔ Z°»¶ÓdÓj¸xnv­w"º¯¬f•ö'§CZLÐYŒB\‡ëmä9gÉ5’ CÃ…uf³Æ´)2ÉÑEŠ·-¶î†c§b75˜íÛ:„RƒÐ Tä’GqÃþÂ4ƒ.1à:Ëè‹ÏHš‹}…P59âàW!›K.ÿð=½×H ®1Œ?û„ñ£q¤˜ Ú7[òÖ_?C>À¼~Aòø&Ç9ÍyC¿<Ã'3&3xM~4¥»<ÀO ¸¹ðG¯ÇxëÇÜ”~(`ã'­ÿ·ìá/¼çŸ½‡{þ©ßÉ Ï’ÉGS¶ß=cý|t ›={‚L))¦®o¢ÓÄè—kÄhB9რ˜Áâ_Ÿ“<&Õ†íé%ã_~NX¼dñ¼¦œQUA:›¢ü†Ë?>GãG]äxÓG¥èɈü°¤{õšÕ÷ dªQi…Êc¡³ñþ—Î*º‹sÚÆ @¡GStŸ¹B$ã ÅaBwqÁúÙšôpN–ºM‹Ù5ˆ|Lù`NhVt+ÇèÓCÜÅ«W;ªã¯1ä¤)t»6‚3ÆLO˜}~Dz£ËÏϱ>%QyßúÕ%Æ¥TGsÜî’f±Bf3ÊÃôv‹M¤Y ‹w ªŠÂz¡òƒŠ°½äò«ÌH‹¡-Áõ+QeowˆlLõt‹\k Æ#I¿¬qÆÒmvH•#eGúà Ò^rñ¯¯ÉæÇd£|H7ö·¦%BA°ÞÞ¦O\W{ƒv+ÍbË…€ívxË•ÅíÂx€¹dœøª¬Œ“†ûè›7ýŽ…Ç›˜JÖnðW~{ªBœŠ ¶1ˆ,Ý_ÒI^#3…L2² ¬þð‚ §L>ŸÐ¾zM}i)ç$ó:ß{kÇ´cß[¤t,ÿøg:«cz/?|½@ª$ˆ»E÷}6“á×óûÖGg*]Åï}‹½ÞAã¸ÍýîõÑÁÅõÝúE «Ð·ÝÑ.6{áïV&ј\Ýþ–‚«8O¡4"K‘2F†º®‹ÊèiÁG·Æ²(É&%Á™HA0>F£J£¼—+lcZÉ{jàñv2²YE¨·˜6&¥£¡ýf+$È,zºvC{¹CÈ©bÇM+™dCòÒÞ:mèØ¬{ïBè$\8wûàî­Ï’™ á1bHôc ÀôUä±ËíúØ¡f:϶ޢ"„¶¡ßÖÑÈf%v[G~•~ÛÛ7Üá9ߊuU•$£9Ø3ÍÍC1ÌmàlEKáû„–Q¤°®~ë£äà‡¸ÆÖ] Ah‡ïúØø–9n[”&;˜©±¾÷$³)Rú£$v³Ãö–¤*Ñe†Ýn°­GiIP)Ù´Ân6xçpÝÐLä)¶i6ÄcœªhìÞ‘¶*¥8c×[Piäø/6Ȣ߃LIÇ9fSC’£µÇn›Hi‘Šl>Ánƒø1‰›PC”©‹Ó­ÉæÝÅguLgÚn ª"É<ý²Ž?i–¢‹„þbMrxˆtÍÅŠìøa·4— ‡žÌÉF‚ætƒœG$û0›¯¯ÿ_"ÆDëÙ%<ýz7Ã/€Çu†ìx] 1-©¢ˆÙÞÇD¶Æ"d‚L®í£kHocb›²´«&¢¤Z#ó\ŒkÖ)*Õ¨úÕ&úòj…*Êø ÚQT¤¥¦¿\!’ ™%xë:!Åæ s$=íùUMHfèv´ç—"œ@OJ„wtJb€UèûøèUå( ý²&;šÒ£Æó˜¶¸l"úÍëñAG¹‹i±Î ÷ü€Ðúʉ"F]›8ÝÍr”R×a¶éÁŒÐl±h•.ŠÉ‰a:2K ÆÆrɸDi‰íÎ8TšDkÑ$òw»‹ "‘Oóáþ'ÞBJTžEÁ—í2Ò䂳ƒ–%>;nRׂ1C„û»†±°åFwœ$ á=WÁA2 H{øó8¶uœ^⪑Œò!ì†[´!=fµÅBS»kГ): ´ç„Ú¦™“L¡Å£¢ub¦èÞœáDJq4‹Ç®kè6éÁ‰G% ýzíü¿)“î/þº:÷ÞqÐ~ªW^¸SÐ ?c®k¡ë÷¼æ@ÇSÔÀ½¹Î…*ïàAä¨\ƒ‘H¿Ü‚ŠIBW<œø¡¾‹]ßÑožB×\!±ÁÆ‚Ãìv´ç+œõ‘ˆ.@$%BD!ƒ9£§Ç°[Q¯¶„rð›ÏQºgýÝkÌ6Þl²=9Ä_¾ä쟾ť#)‘*zTÚ¾Á{A>=$¤1ÆzèCèñm{MÎׯŠ{÷ ¡rT¦otª±+é—Kl#I&c’Qr;ç]‚ÙÒ-{ÒÉ ™Zúå ÛÒùŒt’`6kÚ³¢3ùì’°âìü‘V¯9üûO±§/Ù^XTbpg¯ÕÂaH`Ú£ÓûŽÑnªO>aþÙat‰kº•%›åôËÉl„Äwù6ïh]:C¿ÜÛõí»CqåGŠÖ„n‡­CLœºúû³ZÑ®,Å“cüv—cF*ìnGp„ ÍÚR>|€Ò‚|Q…å·/h–Ó_|ÆüÇ´§oؽÚúšÎ(&=%ÔKlßÑ.7¨bJ1Ño¸^ŽÆˆD=nWÓ¯vødÌÑß=bû‡ïù!ié©ÏΑå*ÔÏ™<±ûó:±t§ º¶'1þèýå+ŒUäE†í{t9…ÐÑ^¬HF1ýÅ‹úgz3âøï?Åítµ&Éíù:6“9iؼ8'?yB"ZÖ/NÉŸ~„h.¨Wé,éÓ˜ Îþë!/ßÏû|×íg¯¿çîroÄå{x¥ï[ÿ7ÙÃ\ÿs÷ðaÏÅ=|k)?zЦaýò™$ã={l Gÿð+T¿£© Âwô«‘”$¥F9å,§~~NHRt¢ñ}Ëîì f+8øÝç$iËæÅ&òhEL„ 4¸Ú¡²Xˆ—&lŸÏæ´AJI6>D¥]|>ŒçT‡%æòt…Ês‚‹S1]hú‹!Y³»ØR=|DR„Í‚õ‹78 UN1Ÿ£²ë¬Z×ôàôtFq(Ø}wAõécVÿú'’ÇŸPèšÅWg˜¾G—3ʇÈÐ`YjBWÓ¬¶øRÎçè"¦{×â;‹ÔE ºB€kh/jŠGG4¯ŸtE>ʰu‹éD¡³•e·£9¿ÀRqôwŸ‘ælG7xgSŠSÚçßqþß¡Ž?âè‡,þç¿Ðû,Zú(ž ìšÝù•eW“Ûè‘“ÍÆé‰BúhIgo!ï ÏÜ Ûûx¹Ù²‹Í”¸qR…‚“$“ÉmôùƺÛï/Êc7›«©£,*t®c-u- !ú¨EJ3„쩟_ÿâ Æ³ÀÅ?¾@fÑî.ôÆ)FŸúâ="ÏP:Ž‹|?Oå)kLzBKyàÅ̵B§ÛcŸÅ ±!€èq¯#¿Ox/nELùòJI‘%GbX‹*³xê a2M£¿å®2äUbð÷LʈÒz;x•F;;Wï ÉåH&éÕ¤Bä: àq]w’tZ >1ò9ç"Ѩ"Ã7 Þzôh4ðº-Þ TšàM‹wÄÈU³~ dš#5˜õ‘æÑzJŠhæ¿Þs…ä`Þ2\7>ü­Ý»>¼>¼þ Ð⃌÷Øð·ž¼ˆ!–Øà;»—tÅ{Ž úíë¨7 n°|™¦¨Tá»ýÝb›îê~ï’­t£•· ¶7ñ¾¬!(Dp¸¦EdE|fÖ;¼èq‰oklmГHUŒá!\ùðªñ¥ÀîêX4;GP1î[¦éð|ipt®°»tÖE‚$Þ+CœöÅ&ÆÇ{kš\‡€È}l²¿¦CúpåO|m»ïuÞX„N"ã<$œGè•+|wí-d,ú“ªÄ5 Aj”ô¸=æ‡ç¡Œï|¸U…A€º¿ß$ð†p$ß"ßîãÁ½ÿÑ"Õ0Ð)…ÖÃ„Ú ¶BUÅÕäð=æí¤ø;t£˜Ç¡ñmƒm-*Kc3r—3=œrx~ƒDh‰7®6×ï©StuCf³•’L*Bßâ ñ™ë£=›H’È p´®é‘YŠï:D’Eïè¶Ãß©}~˜ãücìp†éª,îø@_²àÃ_ÿqÓ²8°?¦kñÿý/¿Y ]MÆÚÞ$¨¢Œ¼g®Û\ƒÁ¾¡»Xჼ>9‡Â2ØÁ­ Ü ýðørø»_eŒùì}Oóòï3‚ÛÐoÅ“TÆÐ­Ø}÷šÕ놃ÿü%Ú®Y|w‰é:òÃ$©¥=_“G›0sþšæ¼gòË'ÔϾcûÆ’ÎIÆÉ~›ã"#RÙÖ„½ÈÌ TV"3ùƒV(Þ8ª±‹3–ß-ã8ÈL×Åõé˜éÓCêgßÓ[Hò蕹wrÎ’=úˆ"íÙœvýç©ÿô¦+˜þò!Û?Ãæ¬C§êF± U=;áøwŸ`N_М÷Œ>{‚o–l_.©>zJ:´‹»^@>§œ9Îÿç òGÇ„º!™ œ‰VH¥!±uƒíÙ À ÃIG·l¢Ú8‘Ø]‡¬2èjú'{tH^Iêç—•€­Ù¾ZP}ö1ÚnÙ¼YdÂäã§øfAsºEòn?pÛÆè"P¿¹¤üäÖœÿóK‚”>fòÑŒúûg˜Ö\=Ì\kcs`Èœñ—í%‹}Mþè)Ijé.vˆrÌèÉs¾&Ýë—¬_¯(<¦˜ˆ,!ŸæÔÏ_àlJ6+i^½¦Ýu ù(ŽUÓãcÆо|F½Œ?=Á¬v$UN{zƒ„cóü]í)f“«d.—Ž©s6ß|‡K§L?~‚Æ!2A{zA}±Ž"o þ1KÞ—|@ ? ÐöüWÝsðYpòŸ>aóÇ?°Û¤ð$£ é<^äL~ù²;åâçh^_ÄçУi•²{q‰( „ß±úê ^Šƒ‡àÖ4ËŽòáCD0Ñ_Y8ê7ç´‹ŽâäˆÑÇÇèB²ýã×Ôµâøÿþ%æå3.¿zNHfL?>»cóâ59äð7O±—¯X=kÈ2¼t6CØš~µ¢¾X#²1åáojD2"›•˜å¶×¤#Mw~I@àº8™T‰¢[l˜þÃoIÃ’×ÿõ;ª_ýšÙÄËÿö§èâp8Ü- Q , xÃE®õÎûP±"&'jAsö: Žº'ˆ‚üx†–úÕ\gh7[L¯˜|ô-!Q”èÞ|Ïù¿¼ŠàÍ~" èÁ]ãîA ΣG3Òé Ä=Õ˜àMëÃ0}ÿ‘ÑÜ! ÒR™…*#NÎÄFf?é¾äq÷ýoœÛR úÕ³µ$³9É8)7xº{››!"‘ØÍ ³š7ïiI:? + «ýÇ„òÁ»Z@>#©42ÏÈfy¤¢ ¿cp©zNÿ_Sýæ—èú’¶É˜|q‚9{Îù^EÚ»§ô@÷•âí)÷Ý0»p»¶6Lf¤Ó4 ßS‡Ý€÷V­÷Ž¿ùëe–bÎß°}qHÓ›ôu7#‚Dˆ͹ÃMÄy@ÆÄÞl[\‰ô~¨£B¢‹,VîCl²kâÈDijÁG"¾Ld"puƒ5]k£ë‡uq“%W¨§Ê4¾‹œ+]¤¸¦Å¹™ï²CÙSao˜-xñn~ÒÍô@b×f¾·OäÌìmi|cÍEØs¯m~°p™ óC*’)lÓâ\D³EˆÜ›0t÷"Ñè,Å7m (K|Ûâ¬E—ÂvXã¯;dfÛ¡òØLxãZ£«™Ä´_·x$ºÐp½÷ˆÂ =’Ž£Jgâ2I¢¥õüÇ"™}x}xýŸ†€ƒ® ìz‡óƒà[«ˆÒšazªfgã£,•ëÈ×m:DQ µ _ïB¢²$òz]¸B c(‰Þ[\œèIÀnkÈ2t*quŸ!Ã}I¨}ܶG9Â9\gQ‰º1µÀ.-;Úˆ€ 9ŒÝñW¡“ˆöZS" ß%g1u‡,óèık bø"n£¸!ޏQÌ.„¸u‚/ÂÞÖUE‘œÌ²8áÛÕ1¬ª¶¬Rëšxé‚ÁßF>÷ŽT7}“߲з-áî>Ó&ì{Ð3üTóóUØTÁàâo"äxÃÜE¢÷Eù`e|¸BÔ îNÁºIUüþCØ2ÚÊÇ•+™.R|Óá¡ã„Ç[]Ár}Í4¸QäÚ]‹, „³ØÖ\iÊLÝÇç»·Ó‘‡šç®-ð»mXï3É[ù,÷Ôa÷6Òÿ–¿ù1ë¯ÑîÁ…C“êéƒ+»2™º‹%BHgC×¶/Ãuä¡–n¹Šb7!º„Å:‹ÎÄ$có Ú×8¯P™ ~~Šu9¾]"òf¿:!ô¿»dólCrxB>ÖÈD ´`óÍ3ºm@gUÍÈÇØÅ9Ûgo <`üxÂö›oé¬ É3dèÉ”¤JîŽï÷04¤öt+D6Ž)ˆþö˜$ÜUÔŠ}’a„n×4¨£õˆþ|EpBG¹E”n»%?y@ñ Â[ÏîÛg¬Ÿ¿!™?"Ÿ*º³-éÉ I.щDU)ºLYõ-—£YôŒ?û”´ðÔÏOqÖ“0z<§=}mkŽ¢=Ð~¯ZF1_$ãÖÛ©€­íJ#©À®–ô;ƒJ£³qÅAJs¹cþ»_Q¤ gÿø5^Ž®¡o<Åüd””DgiÝ踣«KG·ZÓ/w˜¶eüË_1šv¯ª±»]¤Ø]‡®4ÍóS’ãÐ,ikMy2AæŠîõL«þ{þšË¯Ï˜þæ—d¹añ//È=aü¤dõ§g´‹šòÑ#dhؼ8#›ŽéÖkT1cöù#„ôô›ŽÝ‹çÍ?žã­Eê ¥vß¿¦^µ°·ê£>aôpÌúO_Æ'Œg–å÷;F&¬¿y†Ì \çÉ hè.zЧ [°z¹@¥Éß>âùC”÷‡=Øó@Ç(8øÍÜÅúVÒž/É?ù˜ÙGS¶Ï^Ó_néY|P…ÆÕ[‚ ô;ƒÏÉrt™Ó½¡o“ÏŸ ºK.þùœ*ЉF'9ÙáŒlš¡s…±‘n_=gñõ›õEçêFQn©áB ”ÃÕ-"-¢Åµnjx{{šÑÍbPÜR‹ÿÕBB6Ÿ!å@?7Énëo#ÐÜ·ÞG2©nøÓ8­´µÁõ™IÌbóÅÃZy̶Å;. µ£9]’?zH>ÕxªÌižý™‹}#Âï²Vµ&½ƒ¨npêÎ’>äð×O¡o®RUXüë·ÔK‹Ò‚|äD+}…º‡ë¢2àÌgèL¼}ùÞ8÷¥#ß²|Ë<%Ü;{ËÍêG®—Y‚¹8c÷jH“}”·ž$yŽg#"æ%ìc¤ãwû6ð<÷Q–øÀßäí#!§ÒyêÚ÷××È"ú8»Î‚³Ø¦‘Ž‹Hò~9©R‰XÌ͈pj¤ð˜¶‹ž‡:ZšH¥‡¤ºëñœ÷áž¾2 ‹@Óƒ@(y Ä‹ÁBΆè Ð^^{ЙÞ9d’SŒbŠ©‰Ú›ä`‚ÂÐo *‘x'#€ÐXÌ8‘_)ܧL´Ÿ›T(åhÎV¥‘2]yëУ*Þ\D}]Ó¯k‚’(FQVôkHR‚k±äÇ3éwÎX¼¨Dcûnˆ Wà ¢Ñ]ô®Ödy†®*u¸Æ‘LsÌr…1aOô¼¢ ™Äˆkslî¯ø¿Wkå€~‡›õ :ÅÀ•RD Jo¢ªRñþj ÖÙáûK²ƒñà ÑF=Ì„n4NRª[6pr¯/rû¨íý×|·ýB!ƒ°ðÔ¤+ÄWÜ5F¾.ôö´Ñ£+„zQ½ŸõÞ³4„èȤË,òÈÃõwqu7Ôo}ևˮÀ¬v¹÷SÇG T2èn´Äí̶½n|~ ÞÈ磨—ÛÛý*h+l®ö}-Ü»ku釰½äÞŸó?Ö"‚ÄÞ¸Áúÿý»‚ Š¥úàßnpm¨rB:+°»5fY¿uˆÁ¾Í;‹óC.úÍß(xÐ%ÓO¢ä„2mõó7èƒ(wÁâ»-Õãøv‹]oqÎá¼GˆŒb>ÐÒœm(¿ø„,mÙ¾èH& ær…s/+Ž~÷”úÛoØm"–W⵫꣟¥È'ä£<6waý C¿Zã¼Ñ ÊA`=]oPÓcæŸÒ~ÿœfÓᬤ89Dú× ÉyiEõñTذüý3|’’”ÂkÒÃ1æüQNÉfell¬èBpØÁ65ýv‹k£ª;?ŽÈ¼¯kÚÚRÌpÛ7¬¿_“ŸœL2ºš`%"-H¦J«ëîØÅñP€Ö¢‰þ¾–‰À¬–ôÛ>60Ä`·l_­˜ýöSºWÏØžF?aü`?×G»C×xT1„Ð ÂÛEôÀ.Wx2’INwþšfÑ’”¡7ø›³ RfŸDu Ù½xÃæeM~rDõx†]žÑךt$i^]@m‘lkÐe\Õ˜üÁ³8¥YtÒÑnåƒcpž¤ÒôçgtÛè|â#2ùì_/è69ê—[Òã v¹ ¸”ôp ®Æl åÇfÉÅ^!³‚´ÌÐy…LÝ¢&¡ßÑ®[|D7B"¥¼_9ü¾'?üõÖÿ¼ûüO_ÿ×ÜÇ=Øóî! TBZ¤˜ÍÓ;@“Ì)&H)°½¡}ýŸM9øuœú힟1Ä$1þè Y)é×5²*0篩-£§OHª(މŒ”¼¶3tË‘h’"Ee‘¦ôçoXA:9!+ÜnÃȲŠt^¢2Mýâ9ÍeCR–à-"Q=:À®Ö1|JzìvƒëéÑ!ù¬Æúñ>/„$ô[–_=ÇX=Xëi„èñ]ék‘–ï:|ÛÂ>/b°C ÜÕƒ”ŽDRæWzŽX>º‹ l¯ÈH' ýbA·¨ Hpc:ôèˆñ“c´r¨Ìqþß¿&ÿôsTwÉòù©#ÍSÉH ÷Lžv7™ÄÉç°Wo|ÓßRÜÈBÜv|wܬ =8 )‡ßçª øvCw¾Šf ¨!0-G©Žw§%áú&W÷Îz™ÄŒÇ«é‰ȱ R…¹¼À…ŒüpŒT©Ä 7±(ÒóÎ]§çÝék6Ï18îG^;âfAyÓ¥:S¯L:"EJ}q'‚&›M@ÞæÔßK¯¸ŸüCŽŸò7?°>Ú÷^Òœ­Ir]@G¿cI6©Àu± ñaˆHÔ¸®Æ¶f°w×*[@Jý„½¿ö¶n@ç=è‚ñãc´Œ®"ѸzGw¹#9:F†-õYO>­âç4],\|@gcÒ2Á»6H•£½4èúM§ňɓ9íëW´M@% 9´>Á;¼õÈ$#=öt ©4Byºõ¡Ëá³ìµÅÕxO ɇq"nŽU"© gúèO\Í™>aNOi¶MZd¨$¦ÙºÅû„âÁzÚ× , ’$rhH©"ÂüU# Š,¦åu ý¢ ¶m¯¨(Bj²Ã1RxúuªJ0;v§;Òé ¥D¼8IäÒÉxœ¯nrâθë&Çmày‡a’pÕ ¡‘J|K·5Œ>:ÁœŸÑ6¥4ÅÑù¼ÀƒÙÔ¯H§yt ©À¬ëkuµHP©Â¶[Lë"åÃûUn ÎiFOOÈKA¿©i—- (NfZš³:6>Ï{cñA ³$rç{‡žŽÝ–nйÃtt<Ž>­Áà{ƒë#tá½Cˆ„êÉJš³ÍÀéNHÇš~½Æ‡œlœChqFRœà»uLƒÔ):O2C*Çl‰ŠVEuÍ×oð޹õ_|ý;þ毽þÞ?ìùßsÏÁƒÒ$yŠÝÕx¹£:ÏI2ÅžÄj¶+|6bt<¢?[`ûá¾¢˜Ž.Nû¤‘Þ(òQ J’ŒŠX¦;FŠgÔöx;L“CÌii†Êr²I‰Ò–íËù£ˆzÅö²AJRÆú-qߣîAå:‹ÅâUñ]€ì>ZÏ[§ÏÚ‰À"¼õ7û!bq£¾ýmô^ÜóÞá áõÁ9ÐQèiûäBYí¢O³ÜgEHT‘‘Œòhõ}¡"Ñ!¥»8§>«‡ÉDø ×ÛÍÄÆwV²'/wmì&·ý·ßêøþúÇþÍÏX/”Ä· fÛ’7 h7æ­#¨D£”Ѝªó!ùw±ðÎïnFI’ÃcFfo!bÚ9yÃfµ¤_ôt‚ fÝ0ÈrFyTa.7ÈjB1ÓlŸ?Ãô-5ÙÑÁà5)p@—¾Ù²ýþ%ÆÆÎTv/ÀTY¡GYpYwåq .sX‰Lu´ì骡GÙ:ŒN\´2áfXãþå­#™Ì}|„ßœ±úæQÌÉ&)®®ÉŽæØÍ’íË éÉ!*ÔôuŒ„î×t9¥zt@°=RÃöÙ+äè˜,ƒ¾3ÓBH@9|ÓÇ‘MïJFÞí§¡]Ѭ,Áô1Jûø„ò°Â6¥{v/W”OŸàÛ ý¶‰E© ¤³9É$v½À¶’tšÐ_îHÁÇtÁÅÓyä@c‰‚Æ ‘êˆê£P‰Âõ-®éñ½§úè»»`õíåÇŸPŒ<«¯ž!FGL>9Aú×7_ ðEf±Ä6©"Rƒw”TONÐÒ iSm´…S ¥Åë>§<EFÌ9§ßtQÞµt—[²Ç”‡M°íùfHzrÃP<8$I6ß¿¤ßÁøã‡Øí9›ªÇÉOæ¸Õ6/wŒ>}‚¿<¥^Õ¨¢B¸c<Ò ô|†Ö³µè‘Æmk¬±¨,ã"ú,~D4÷û8Ê“õ?û¾õÿ®{ø ÜØ{þ?hÏQá-ؾä:W>:Ä®/©ÏjŠ'I‡ë%*ñ´g œ$e‰ÂÒ,ŠáoèZ(¦£xÏÙ6èj†.n»Ã7pc+úõYNвǵ‘¡ª)J;úÅ*¦’’âÁZü€^ËLÑž^F·¦5H­bn!ñM A!Ò"º-åꪰ >9nsÉúϧ] 2}m·æ}_û–æ=*/£{’ßÓÍLÌQD/Þù]ê{¯nFC‹aÂ&el;£MªÛ®è7†d6C¥,û¾æÍ9ͪhûÂUÞñîë“Ä VôƣʊdœãûŽÐõ·}žï;§ï=•"rê$=˜£÷R•»³½ðUza,¯jÖ»èç·—·8ÐâLjâúý×¹>¹¥¶5?®ÄgÌÝõ7Ñð@LyÜ,X~…~ßõBÕV¯!¼«ý›tž+D]¢«òê9(Þƒ‡{Yâ=txCü¬õB+Ün‹Y× Ô¾€‘ÆØÆà#Fg)Rê«!’è]ëÎY¤N¢ÃÀÞ¡A ÇÇùH'8˜‘ޱ˜Œ|±ölÇ ¾Çl ª¡tO·îÁ!‹Y©q»‘•Ç»g/q2'‚€&;š •§9]£ÇSŠƒ‚öõ›h&uìÌ•ŽH.ƒ[FV  = ©×ïB¹!Ç^\)zƒèb uc¹2@öý¦&}u}ˆkbÞ8’ÙãOñ«SV_Ÿ"«9:×Ê'ǘÅëgk²ÃC”néAš£N‹C~qLûê‚ìdNýò9Æ£Œ Á÷«@ >™>\ùOÛÆ1ùÍG°¾ YZ¼ié·Õ'ŸRÍšEC6“l¾¾`üågØÅ›8¢t> ò•Ibð1–‘?ÝEet¼æ=®ï{Lq£«Ì"×ÍïG8°Ø¦ÁÔÉ—Oñõ9‹¯Îýâ Ê‘ãòŸ¿CÍ0ýìÔkÚË:¢úƒwxUšˆL‹ëýàp¢ÈÈÇ·ëèw¶m"^Æß#™P>˜€5¸Î|À¬[‚ôÛÓžïHž0:*£uÓ¶¡[n¢Ö8D"ñò“CÒÖ~‰é$ó/?ÁnNY?_1úäcòIJóâ%ÍÚ’Í}M³®ÑU¦Ã:pYŽcáÚ¢KE0ñ{'Ó ÂLgâå“‘~ {þ÷^ÿñ;ý¥Öÿï°‡ÿÅ÷¼w ðÆEWn±ð~òû_ÏÖqÚIDc]]s$àÅÑœÐïè¶–t:F‰g5:Øíc| Sê{º¥xp€¹8ÅÉœr>Âl·ôMOZÎÐEL»³MG %­Rºí™Ð²ÇûXä ™ƒèéW»XÊ”d2¦8ȱë-¢¬PÊÇGâšš¾îPI‚Pé8Á›|2Šžd2"%qoC—[-Ø<¿ (…76ú>üÙÈG•CÚžG¦I™Dµ'ìM7p…etÊ\Ûµqczyù\ ™V¤ã³Þav†à ÞHd&‘YNq8AàʳþöÍ.‚)Q0§ïpž#Ü) b°ÿô×ìPyE:JcÒ±õ÷¼7Ï¥÷ñŸ#è$³<"áÜ(‹{bíÃ[縸³‡Ÿ#zÄMšŒóˆ4#› V³7ˆ\;¢ ½½»Eƒ*K²ƒJßðKÞïù–@N ós~ÊâÛSD’þ¸ûüÐÉ+q`x-æ]×hœ`'ƒúíFWÜ îôâ=Mý{ÿ槯Za·+ÚËíí(o¡2²ƒihëÈq•‘{›Lg$E ~u * Gs‚êñ!~»¢ÛÚh•â\†/5 A¤ÇcB»¥9o(ž<@ØÛ7ktY •Œ ¶nI¤¤É"c (Òƒ)n}‰é:—¸¦C&¤ã|÷qÂ<¨TÒ],è6=RIt9BWÙÀkîpu7À”LÆWÏÜ»¨cèºË5dÕñ˜öü kû°Ž¹§*kA&¨2'¸ŽÐÙ!`+¢Ôz4’ŠÃ•[ôn½zÆÿb@×voB 4¾«©O¬E¤¼¥¼#ŒÔ]æ vÛ ³Á¢uÿ¼÷ñž¼ÂÓÄOk&¯PE:#„¿-J¼ëæp-C?xeßú!…þ×µL “`qƒõîa' üí«4@…k¶ÔoV Ö*ïg)uý»ýíøÙ‰_7„žï¿lˆqó^öÍüÍ®—2õu=È=…C2ÑÕ„|É í.Ò":ƒL ’j„LÞv˜uiE>)(ò‰ãò÷¯˜þî ºo¾auÚ1úìÊÔìζ8בLŽ(OfÑ‹ôÎ̶eü«ÏŸ´çÑZÏnWX›RdØAç‚õ÷ç䎱ËKduH>’ضŽnòaƒ÷×ÂQqºÙû]zrH;Œ ‰¡_mð6Rv„Pxop."çÁÙÈË&üæc’Ф _Õx/ ¦ŽqíY¤Þ¸í’f±&H…RÙHS_,™ÿÝ—ô¯¾cw ³/?F¥žîl‡Ù\bdÉáo?ƒÍ)Ûg´E6- ¦&=<¡8È¢ŸižÒ>û–õëžêÑœöå%éñ åq…Î,›oß°»lAÞðÿ1©Gb㎾­Õ£§”Í«KBp4—X¯®}æÅ;f‡?ˆÒý­ÖßsÃ~ÇžßÙÕÿ»ïágîùÿæÃžÿÚ{Î!Ë9óOf¬ÿø5m'b0à>!W*„–?È)õÆÅp "Ê:úè#Ê“»ÜѼ|Ánå(BסGU¼‡ö©¤ÎIÇ(áhÎk„è©Ï/@Í8øå ýé+¶çŽé—O _sù§7èIEZdx›žúì!RBPd#üv‹È§'%ÍËWXŸSfØMéUI6-XB³éH'´¯Ÿ³|¾Fç)éhN:J‡gjE~Bœ@Ç15Ñ^k”ð>º…5ÿü aüã_°þýi:…Îbs"”Fƒ'¯LJ²Ùˆ`w¸¦½¢Ý/Ñ£èå‡Ô_™ç¤Ó{믕öb‹U$…Q%õ W²Žöå6¯/ð:BÅ­»Ô¥‡`7?p­eF6#U?£œ¢ qcAü×໩¹·Ðgq?jzõd'$¤Ó1Rß°Õ½{ ïˆÿ¾ïø½…X‡û«áŸ±^¦»¸`÷fyCDx¤B´y ¼EO&HläWå €Pv½ÃûµNLª˜óÁº6 t _®AÇ8H=*#wkÛÇŒªB—ßuBxúÅ&^ÈÈ‘•yŽJâÍOh=thC—ë£p.™Žqõ6’éÅ` îýµñøþø‰!þRÜô¶¾Ñ{:´ŽÑ˜]íãÔ ØsŸî ÞÑN¢ËlSÄXrÛ´ñ;ø0x)–Î#´Š67{»Q….ý²‘–:¾OSÓ­v1‘eªkš!ˆD•z/(D”¿µˆD‚HÈÆØí6 öŒ‰‚—4‰Eí] 5­b¬îMD_¡ýŠ‚ Ìf£hõµÀ"ìÓ¡|@f養#(ï"rïÐ0ë Þ+’I ¦Å6&ò±†i†ÈÒhSضXë‘iNèjDQ ƒ‹ñ´E‚ÝnñRÂ@?„ÿ¸h¯¤Biìz ’l>'ì–të–ìølƒgF㈔w=Ü´Ýû‰ÍvðÀ ¼q~0Ç—÷¿Oø‰Ÿñ×^ÿNþè_xý‡=ØóûÖ‡Z¡Ë ·iÑ£ ™Ê++ËÐÕ˜]÷îëjFÒÙ˜Ðw˜Æ ý¿CdQhæ:HJM¹Ä‹HáK&cô(‹tÕ5žNF¸Í ³mQå(&Äùÿl6;äh„èZH3d°t«úª¸WyÓI×[DžC*\k†"Ôc›™¦­éþYŸeýå @J=ð]à Z\™ R 6†Lù®ÃPÙ U ´DÊd6&é>º;˜M7Ñ[XÊh*° »Î„JQÙ Æ7xãPE‰*’!œE"¢ÇõýÆÆið0áD)|ÓÐoÛ(ŽtƒyA–Þh„ÚÉþ=€'­‘†p–znX¼Ý>¡äU¨HtÓ0?î„ ¤&E·“pƒZtÿ©»ÿî{[?Ÿ›ûIÀÝÕw¸Ö·¸äWÏÝ!tÆ¿½þºI¸ñ’ß5˜M9íâ/}}†÷{¯ÿXøš8©Æ‡ˆDKñ¾àbÖïè ÄÏ_MUÙ#Ðb’“3ÚÅÞ*ÌvKöä1yêðŒ>9g½¥=½ÀlêÍ]–$J£ª1ùñ˜¤T¸>ŠïBßÑ/;Ð)‚Ž~Q#òŒæÍ9ã/¿ Mw,¿^`ë–ìácf¿|]CðП_°úî&²rD6ž¢Ê8"RãŠ$õôGvXÅÉl8ýïϘýÃoèž}ÅúÜ T@&)Jé;a(7&?LÓ Ò­õ­¢à*›ŒÝù‚ôUQ(¤ÀYƒßs÷ˆ£éÅŒ£¿ÿív´—-®7Ôg¯q!C — <Ö{t’‚ÛwÑÐï óÿôKƇ)Û LëÈf#²£vqÁú«W˜ÞB 1>¶kéÖ ³ßü’ñƒ‚veºóWì–;’ј´¬H'c°5›W/±]JutH2Ѹv‡ëü:ï¨*“¸nã΄ Pi‰ÌÔu3è="/(f‚Õ¿|‹q R3Râºk ¾ëÉŸ|ÂÁGôg’i Á^ã®ëhO×8«©>=BtKv¯-2s4¯Nqª¢zò˜,íéK¬Ñ¤³1õ‹ïIÂø@PŸ¤2ì¾{…Í9þOŸá.Èj„ÎãÓn;œ4Ͼ£wó_~Œ¹xM»òÌû1vñ†úÍŽd~„”†nµ¤_wxÜ”©{8rïŠ ø€A’¼$Mízƒ âm1ÿWÜñ‡(ï{þ¼çà-²<äè×Gì¾~Iþô)Ò÷´‹=ÍéÏÞ°=ß “äjr¶§hí‘@ÛNþ?¿Åž~ÏùŸ.(¢œò€ùç‡Ô¯°‹Ý®ÅÍüwŸ“–Ý‹Kv¯ÎãfŸ<À\žS¿¹€tDõð| 8NYüá[(IiÑÇ‘æ’ó~ÈŠ !s’±¢;ß1þå'ЬX|÷’nÓSœ< ¯f×#HÑÓ1åƒ1¡mA¢RÏâ÷ß°[¤ŽÔ¼)¿:ò·e:!;Hq›]¸v…7 éA óy#­­»ž.ZC{ÑÎÈÆÅ¿|GWk²Q‰žå`blO»Þ ²9ù|´qÊ,$Þôh‚.“«LàB%‘³ËP yU\ !UNýÝ·\~u†®ŠÛÌëd’¡]Ó>ÉPåc²y‹`ÞžÜu±¸5zÜðÛ¾%Ö»ç; Òøü¼Í-nÚÍÝ8ÿà [ºàé¬DeôfBò€Â^ñ™÷4H%â´à*þ[\=k¯ c!n¥/«² ?}ÁÙ¿®PéP°Ú˜ÐçzG/i çRÄó·ºS)â¸HGˬŵ=d)"„Øeö}äIÑgcž÷<å}¥HLåß?~¸þá"ëßîúÄõ»O= wŠï›‹Ã #‹4z'ûØ™ Q×vñÿ âˆå¦³úÞJ ‰FI³×EdB§³mB£²¼Åõ©tä§i‰Y„6¢Ë4¢ËxO0ÃØg81e¦¯ãA÷'JàZ ¸çC¿+zÓk‡\ „Ö1®öZ}À¯;g‘DïNß[TYFqbÝ¡ª2z—SF’$î­‹BUe1Ô¤3åO“âb¬¨ŽFò‰ÌtHúÃKƒÌR™gÑ £3èщÅ\7)^^^?VrxFT™âV[œ ×|]¹)‹ˆN âýBˆ(ˆsñù ´&È€¯{‚Tè2Á7¾7©R¡ŠßFTÔ÷¤ŽŽO}ݤdoL9ËÓ1¡i±Ö!‚ ™ŽÀ[Ì¦Ž¢³Tl©‹j°)íúHØSÄ [ÊÔ €K¯Ò½=ìU\³ˆ¶sƒúÇw="M }uŸtMôÆei_<ñÙà­»*ü>„#‰šŽ`÷4>µAÉ ‚Ô|c¿÷B·›Å§Ð ™¥µ½á;|=äx"­ÂÝ"%Þ¦„Ïæ[~?°ñcnËâÇ{CáêGåw„ÜådÜé,È<‰©’ánáÆ[kß®S~Äú»ÅªŒç‘oÍ Cúk„s‰ëb^üÈkø‡¦¸á¯÷\ŒR.ñy§ámÖâÿù/¿^‘Ž'ó_>¦}þ’ »íÿæ üêë3Áè8Ã,·U çSʹàòþ‘Îi´R¤e̾1ÈQe„áb^`¶‹è¤””§äSÍæÏ/iW–` " Ä–f(Ž*ÌÅ%ªš‘9Þ;ª'Sº—¯ñéÓ/Ù}õ5:7¯«¢wàc¹X«$EIyÿ5uíƒë%‡ÿðíËoYŸ²<.Øs8㛯t±BâLÃ^¤¼)US=œ@ßBD¼•¨ úåÛE^“LÊ(d”ÃÁ5t—+<}Ó““Rd™c.ÎhWžò£#t¢À8lk)\ü·?’ú%³Gí²¦[´xgÑ“ÕÃ9öì9gÿô="l‹5’£ÿü+´k©—],ö¥ ØßªÌPy6Œß¸#L˜ÝŠ~Ý#‚Ç? ØÊ{œ3v×1ùå/˜}<‹“ ïc££b#Ö/—´g Éñ º í¢Cfè ôlB"kv¯[ò‡ÐrÇîÏ/±¾"©R¼«ñ­ ;9Œ~—5z6'?ž“Cýf‰'AHCw±Àlaþ÷Ÿ"ÌšúŠGSüvÅîù96XD2¡œç´ç§¸ ‘² <žá» í²Á㯻üŸŠÒ…€H’µ»\á…–@ ? ±öücÖoAUý×Èú’‹?=G¤Yž„\~LšÇMIÃÙÿ½©¨Ž¢C@„o7 G$™£»¨IÉ*…ýOHô(cù gÊñß?‰¢&h_¿bõªáð?}Ìòü‘ñßýóâ+¶KÉä£Gè\ExO„Ò¤Ó»YÒ¼¾À‡œtVQ¿zEùÅ/H³߿!›NHªªÈÐy…xAàLM¿©IFó«=ˆisÁ‡ˆv#IÆRß ?甪JúWÏ8ÿý Džß¨m#(¥Ò}÷©K²ù8¢Ü7 Лæ:„ëôÉës/\Ñ.oð®Å7íðVšl>D„78Ç·ë»ql|’Q“ˆÃïvµ.ÜÖÝ S¹ÑdÝDžïºjìÓ2§yþ=‹¯Þ Ëâ¶Hñ/@«$6p?J±wW8ùV9wj¶[ÊýàG­÷¯ÈfóÈ÷w÷|ƒ—}ZÜ@ ûóSv/o"ЈI´¬±Ñ Á‚eÛã:PéP üQ™@·Øâè, âØÁ;ADdÑFá•Ðç(H’QŽ”3ø##78;„jˆ§*#Ò€÷È*‘L•&¸¦”Æïv0zÞÁq¹*‚<$“ßÖØ> Ÿ;(l÷^‘C ÌMÞo¤]»AHÁÕMAå2S‘3$Ô}Øó‡=¿c}™Ž ìz…±>Ú­1ˆ•UtéD¢¢SSk¢KQ×£’ ¼ÁI:.À÷ô[3Ħ ¤J"nnbw$ªÒWÖ¡"‹qÒ®n#<Ø¢ê2…¥XÛœŒöš}ŒÐÖ£*&Éî6;|HÐZ^iu¸r¸òX#‰Beiœ¾B=™$˜åGB6ÎãßZ‡Ýìp2!?¨è/7$“QÔY‰Ú»*1 ùJRHý©½Ò(¥ëzôdŒ †nÛ"ô =qÑZ4HãÂ%Bß¶VÝŽ¢ÂxïÓU<©î¶Ðß´zzI¤ˆ…¨Ø»}ÜËwñÛûTÜp\Á³7’z E”7¨7§°oW·A_7h£ÔA½¯ U( ® Ø{ŠÉp=á¾õ÷ÄûG¹’ø¦Ãþ@ô³¯Ïá<½®“þa…Xk 'Á>üŒÉò0! ·8Ђ‰H%R”GL½Ä®-“_†ôk£Gɸ$IJw\üþ;úF¢„$™ÍIª(R´›%¶Óä‡c‚3CÓ#ÊÒ¼^R}ô”êAA¿i!hT.°MŒ¾AhWœÿá Óß~AX¼fõ|Gzt€²;Ôì˜D7Ôç–üdÇC£#”£?_C^â›íeKñø1Z6¬¾}:xÀÁ—ñ»Á1D¹Èƒî@êŒìdB>/qM‹­ºL1—§¬_l¨>{Œ_,‘eDVÔôéÖ˜t"蛎òÑSªGcìå³ÛѭטEOgL?=&t-ÖkB½dýì™eïvð׈j0š[•Ìð² £õ÷ݸÄúüŒð¿îžö>ìù/¿3–l<'W ¾kè.väO?"õ,þåE¤Lh‰ï{¬•”è/_Ó7šéçO°Ësú6¡|8Á,/¢dòé1ͳ?³½è˜ýö ”íUFýâ»W-åãʇs0 Ûç¯ 3þøì†Ý÷§X“Q³“‡Ì??fûý·ì‚ò %8M:z‡N{.þðœÙßÿóê[6ç=B}˜­…4!ÉRlÓ’LçdÓ1: ضÇutœƒðô‹5)Áb:HrËæë×èé!ÉxLy ¹ü§oÕYÖcwm5[MÉ&øí’æô‘ŽIª„úô=;D…–öbƒé:Æ¿úyZ³zÑ2ÿòúÛSD1Ùâw")Ñã¥ÕU‘‚GERék‘Ÿ‰Ÿo[‹m=I• s ¥"81ÒéלÿËk¦¿ûí÷_ÓlI¢·¦d7ã ß¶t 6L¦¼ñþF vG¿hIæHå‡Å@èšN#ßužz¼U¤‡èT¼}ÎîyÏw5W"‚I2Ó1þûŠÌ®ž Ü ¹aIw+Îû]ë‡Ï¸ötÎèÞ¼dùÝy¤Ðü…¯Ï|t¦Qú ôCá4âNCòo]wï_BŒ;çEríúq“»~ß–÷QÞY‚¹¼ ~½@¤7]8ä@’/2\¿Ãõξ¡]¶pÆÅÎU*Tª®PWÇ6=‘ô—+ÌÖ¡ Ap ¥%Þ”´ë-2‘f!ÆuHfc$»7K¤Î£o%©t¢×®®JÒiA¿XP_îZ]w’ž+3÷ý%dôÙ ÞÅ>õÊL2 é‰{þnä*G_K‡÷)ÞY:¢âÖÞ*~¼ñ¶¦¹ÜÅÎÙÅ0˜òx Î Êic6×»HcQ7œg€Ž£¹ÈÁ¶!5¾7äQ¾cûjšŒ)Gøm‹˜)ÑY‚” TBðd ¶¦ï-:«Ââƒ&ŸO¢§9]`½D©.2‰›ò¶Ç[u}JP iqAUÙ¬À\®°A“dñÖUQô~Ëî¬&p͆feiŠ’=™¡SO¿h#wÎíàaàŹ¡XObܸè"ƒ`±mÈ òI޹ܤ¢‘¼LR„9ÊHG9v»ÃARjºó¦B¥?¤‚n‡1"jhzK:›‘æ³h@ œé°]@¥ùÑ8¢õC‹éÌ­iÄmÔà'p:á?Ž Ãßʵá‡=|Øó¿ãbñ óÞ{T"±u‡¬&$©¥9¯¯èqÞ¼—$EŽëj<Š4O£w;)I)ãý4É)æ%ýÅ9m åƒCØíPÓv½ÂöMYA’IúÕŠ ££pý¦EhÙîðASO£ÂÖ¢«d éYP)éH²{µ p‚[]Ðw¥÷÷`‹H3’Tãº~ˆíÖ¤“ ·Ýa{Hç¡k1[G2/Îáƒ"É»×KTGö餠_nA%HipC.˜*N­ç:žNÅâ¶ï‘:E í»˜h{tB–9šµ!Ÿ¥ô— Bga¢©”ÐᢎÈï©‘f¤“â:Ñ7~ f]ãZG2)cÀ™ØÏ7N6Û±;Û?8Ä..0F¢¤¸ -_Ñ ¯½ý[Ì©4B‹«ð´½]ž7ÍpOãó7È! Ï]å<¼0¸Fƒ¬½ip=Š.,W…[óN*ÄÛ”º›û[¶nâúk adfµ¢Y4è<ý‹_Ï{·1ñ÷ü=ñû«ôŸµ~€‹}õÞ|n1¸•y¤JQ©¸ÿ…w#óBëèÒUßôb¢ó‚Ç´ 2)˜~þ»¹¤osʇp)쮡ßõè2ÇnkTYl‡iv¸mGvü¥j6ÏÎIç²§_udÓ‚útÁì7ŸÑ¿zÏI3I‚[žÓ7 Ó/ŸBsÁúϧx*ÉÈç$…@hyí$ÑÎnHÖ±]@ÉžõwÏè&RÜõO?&KzÖß¾Bdé à:Ïü7ŸaÎ_aÅ„Ùg¸.¦-Úå)ë[&¿ú ú+uhŒ$u´¯/ S>G¡ž³1Ñq_÷?ñ )©Ž(ôª¬ˆ, EH0ë5Á+úåšâ£˜~z@ýì%ÝÚ!3è+ÈFŒ>~Jž¶¬¿{Eß \ÛP~ú1²[²}³%Ÿ ç%Iž#íšÅ¿Ç†ë¡ C´ë0 “ p•‘L'[c–kBPxH&ôç$‡˜ÿâ„Ý·ß±=ë(Ÿ>F…šî¢%™ØÕÒŠâÁˆ¬Lèv=Ûg/è7*KÐÅ]Iü®¾Ñ1jT•ã»™®¡_6CT¼A–S&?D† õ‹!£sAýú”ìÁ#”ݱ}½ŽãHoIÆGT'#úó3¼‡vÝ2þâ²Ì³üê9AtH:ÉñÛšvU“ÎÆH ÍeC:Ÿd1qóÝkÔøV,¿»@ù;Ü£þþ1#"øñbŠ¿öúŸ¼‡{þ°ç¿ö¶óL¿ü- «o^£FS’Ìak®Ãë’ɧ'ôçË<Ðô§+D9G¥Q˜.tÀ¾f÷ì Ö¤dN¨$õ÷/èè7-ã_~FX¾Áç3ª)¬ÿ|®¦¨L㌉ö Ó„íŸ_B5g|2B3êg/iV:QôÛzrLõpFèz’QŽïkúEM_טΠtJõñGÐ.X}F:#µ€`ñN‘£sGûæ/sð1"<›çì¾ýž®TŸ<%‘Ž~]“Ô/_Ñ®!ŸGŽ2B`·k\/IgÕ€îïÁ†~YS}ò»¼ÄtùQ‰Y\МoÑãÉxŠ ®ÞBF~tÃ¥|@¥•ªëA­ìÉ µ§¬D–Ò½~ÉêÏ×Hé@áPip D,z_ ”’âíιar¼_Àª*t‘DÀ©ÝÑ_®I¿76ýúìÛ†à<”Å=ô·‘Mo<Éü fFìÝ´nòhoò‡Å¾`æŠs bH·õÛžÔâºî¸E„Û(õ°N•%n}Îòë׈$û _Ÿ{€ò:òÇ‹ÞàÇ¿£ªïቅ;ë…xkRÆó!ðžõ€…d:Ef±ôz{H¸OÇ!„Œ ¶ô—ulz¤¸. e…ÎYt^R=>ÛÐ^v $Éx„ÖQÔ RyXR#k{œë&#úëW+ŠÃ:lI¡i×ÊGGØ‹K¬KIËTÀ5Î ò£9IîÙ}y®Z!dB:¢¦ï™Zk#Z>Öl¿IïÔu¶C#’D`êäÛŠïaòåSúWÏéCÅ쓃!â]Ò²[Z&_ÄbZÒ]àeIùpB06zGï£D¥_·1¦úê;EîoT=sD¢† „Ãlw8+qmKñä!Å8¡[l@ˆÐÐ^® *±Ö#IýúÓG„#Ž Í–®õä“9RÛè%;Öß¾"¤U´3Rú†%öu¼C蜴*®ÁìZ@bv-z<ÆïVèæŸP?{Îî¼£89@zƒmˆ(L‘B£F•¥øÎP¿yCßx’2CêÜééˆPiÏö]Tx»£_õ‘:ä 23þèi74§;HJ”2Ô+Ôh‚=ÝΡÒH5’º"›¤ØÍ¤¤ßõŒ>ж5›7Kåƒ)É´$lê¯}0F9ËîõŠìáÒHýbÍÀ¬X}wR_Ù EîðÎÒ·_«Àò¡°ú°ç{~÷z1Lê<Ó/?Eõ[Ö¯.‘ùˆ$µ8«®Ã ?œc.בM5f¹Ã“úŽôèéú’JÒ¾YàlB:“Ží›ÖIlÛ’LÆøõ1; š¥4§KBШ4-‚žúl‹ª¦TÇ%éÁˆÝ÷ÏhÖ~’ràH²ÃvµÂš€m¬q(­IŠŠ`jºÆDàcÏŠzàšz¼‹ÎQ¾¯Ñ“CòqÊîûgt­$?ƒô‰ì0e÷üm-)§³(òsSïð>!gðÆÇ ¬Ða6†üá¾Þb»„lœ`ûAà.SòÙB#±B¥iÔïO2­"]Âùë)ë-±Û zE•¦èQFûæ ›W«hË÷#!Q!u¼÷†}m:AÞ( ƒè¢Dçû<†.z\£Hǃýmlz@¢A§ôçtµ'WHv½¢Ûu¤“Å<§~õš¶öŒ? Ÿg4¯/åiÚ±~v“œò|‡ï*OéW²ÃCŠÃœÝ÷¯jÌøÓÚ7çt[ôlŠÎ̺å0«Éü˜ò0§y}Š(&¤¥gûý9r|@1 lž/©>ýéÌrM·éQÕ|sõÐðÆá{ƒÌ+Tè7=£©Ÿ½&{ðÑoi.›x^M~rH>Ëè– ÁvôëMŒœ÷ìz™š%íΑMGÐïð^FÏn¥ÉæSìòŒzÝQ¡´•QhVü†¦º(#×Μ·±«'ú‹z%¢_j×Ó·Žé—ŸPͺõŽæ|Ðå`š¾ÙЬ7$“c&Gl¾ù–í ~õ)£ãŒí³SduˆdÅâO§¤Ó£¨‚wutyÉÝrKv|ÌèQÉæë„lÎøQÁæëñ8£Ò ÀÛݲFg¤˜º#;9A«†Å?8xÀôaÆêÛ f¿ù{öšv]ãºx¹v‰—)ŸÄìb‚Y2>@ë–Ý¢ãà7OYýó×äŸ~BJÃêÙE¤ AöðÕLS¿\‚r4—+‚Pxc¾»ºB‚ ¤óc’ÔPŸ/R¿ƒOÇáä=ÿì=|Øó_~Q`^MèÈbB¢¶÷NõËg+ª'QJºm&cB½¡]u”Ÿ<†õ}È?œÓ]\`K2Êp} ›Í)Ž4»oßàdERD=FzXÑŸÓ7šÑG˜‹7lþ|Žž£Mñ°¤?[àD†Û¬ÅékÚe©zI:›¢´Å5;‚1VHÌjMöô “Gcê—çôË Aädó øš~cPi‰Ê<à0[‹H2 ݲAMæd#ÛÚ˜ú»éIg#D° L½¢Ûõd³Cò±ÂljlÝ"Ê9“§Û¯ß@žã»Žl>Ãî´Û>R"PWÂ[ôõßG®s¸{ÝÝ|ßû’Ϊ¡·^®D„Ü)ÞåýV¸ËàèâzFg$I–ÄI*?ýúŒ& i”0YLõÛÁ.w ñŽ÷?q=à{‹' ¼ï¿ïýÁK’ªBeƒxÏ~ƒ@$`6›X¦î)8RÅ䦥Öâÿù/¿]¡ÒI:­¡£_Geªß.è[‡NÁIg<²¬ÒbÖ-Ét¦Á‡­{ÒÃ)JXš³ z2&VØíФÓ1JYêÓªú¦¶PEÂb· 2ÍâhLC·Zâ]B6ŸD ‡‹¡$Ñ4_âÚíEc?ÅõΓΧ¤UŠ÷n±ÀlM ¹qÀ‚ü`]Ô`ÄîJ%Á·˜Ú£S‰ÝÕ¨ªˆ?¤Š‰„ýb‰Ù²ƒºLé//ñ!!ŸçtH3p&Ú»e)ÁDC~™)\SG›£Dà›Ìr’"Á÷ý:¦# áðG¦jàá$èq}‡YïINReèLÒ/טÆ!•BO&¤…Æumi¹Žv±™SMIrI{± «M´v ¡Sô¨D*‡]m "!™U( ÎÆ‚S\½Æ¬džÇ• I¦9f[ãG2Î#ON`»(ŽûÑ‘‹\ö!iiß}gGB×ajX¼ñ¨¼ˆ1´ B·¥Y5d$©Ä¹øð±«5΂IÊ\G¿µmEšGŽšéA)0–~ÓàzCzpHRÚÓsD>‰öOË-IU¢RÏîå’ä`Žò-ݦáA—¤¹ _n:!Èf"ÝÄë¬(®Çlw€ƓᇧÝìÍ>ìùÞ߳^DroAè˜Dç Ýå5®(pÛõù ©cX”L‹hŸª£Õ\ýý+ÍÈÒ@WGÚ¦¦¿Ü¤ X‹)b s0Ͼ§_6ÈL#Š‚$+À¶´çx©B ‰‹÷…®EVŠã ¾3Ñ‚®ÝÑ.d5%%øÝ³3¤ó9É4¥}y†s’âÑ!ô ýº! Át>Š€ÔºAHF%ÉtŒÛmiÏÈbBv0ŠnÊÓ]¬ðN’ÎKpßûˆ^»0€* *Op½ëI&v»¡ß™ø –™¦È,Á5;\ÛG ÉI&Q•(¯íÌöÇjˆ-ÑZêz`@*èkLëQZs5uÿ¹çê-x(MW§<Î8²£92ô4§ë˜0l‡ïZºË²ÌñM‡È T"oü…k‡Àš÷tuRÁ•òæ?y‚éc!¬StÏÁû"°oÕ’ñåw©áÆc$ÜÓ¿Û‘"ܰrS‰ ½\Ga¼ø×§cPã1i©hÏVÑŽö¯>€ „ È'Øõú*WãÇþ­Ðú½ë¯êáñMA/ù®Eû •¤šŒ?û˜Ñ¡d÷ì !™Ð_¾¤7’r2" éFûŽ8Ø ÝEG:cwK\/0uÃøWŸ‘ŠÿôŠò³Ï˜<²ûæ[ŒÏ˜~ö·>§>«Q£ á;ÚËA(Šã#|·d÷æ‘æä³cmÙž½!„’òh†Ò GÉ(¹â€™³W\üþde´ûU2z ׎ٯ¿`òxLßtl¿~ÆîbƒÊ³A¸‡í‡¿ýœ¼ 8/J`·5¶ ÄdF3PEzú¥¡úä!Z[úML÷iOO±­ˆ‘°‰¢[œ’)㇠«=%=š̆àRT‘l²Df`– %ÉHÒ¾9Ãú”òÑ i& ]Ãöô=?FÙ-õù=¡µÄû„òÁawÉúå’ìÁ#ÆG¤¥äò÷_ÑnÕÑ¡Aåé4Š&ÃvÁù?~M/'ÿî F’‹ßÃæ¬E%1ÔDæL~ñ©ªYõ‘Ï©žD Âe[è1µÃw;LÝ£‹ Ám1­dúùcú7ÏYŸî(Nް‹²š!Šfe‘€³="IÑifHPô.F˜ÿÃ/Pí’Í›³Ý@’R#3…**Rµãü__1ýí¯)rG{Yã´oÎp}BvX’LGha©Ï¶ -ý²#™Ï=™ÐŸ.P³vyÉúù ×·d')&ŠæÅ9j:#W¸º#4#«gÿíP‘©ŽvÓ#œ!dªã"Žs›ëSþþˆíËgg‘‘`wÑ¡Eëwމ>©ð!TäÞÆú€kÿð ’Psö?¾'}ü„“ÿësšoþÈÅßÍg˜íš FTÇG”+BßpùÏß!ÆŒæÎE±x0 fïiBkœéð¤P$iNv<'t±¸Ôù™+d’B·cóò ¤ §¥>¢¬fµ&ûøfOéÎwäÇ3Âö”Ó|AöèŠ*ê]ÚeG:? Ÿ¦ìž¿„|Îì‹Cº7Kœ¶§kþîרvÉåŸ_á­bþËÏÈæ)«ùŠíÙ†üøżŠEFß`›gã/ãwÔ}L œQdó)Ánp½dôtÎæÛo©7Ž$ËôhB:+ðÝßÙ=„…Ô7íËÄuØGp™e¤Ó<Ò*ü5ú¬R¸üý×4Û€Îä=hì9/xó¤¼PÓ ‰Dks=ý¶cþ¿%±¼þ¯ß‘=~Âô³§¤Y {ó†Ý›–dZ`w;T1%)÷Ò ´é6¹N"öþ ø‰_Y"Tø08Jí/ßãº|QêR_{&ﯧ0¤h*y•îë:Kv8!©Þ )ïG¬ï ÐWbÅbÂÛÂÆˆDë\ÄXøµE§jø*>:³ˆ+fë[œåèá=8Æ´Å'Ÿ39Ñ,þçwdüÛƒTÞ·>úãŽÿ_ŸSýGê]Bz«ñ¹›yMFN’Ngè|HÛ|g”·@K¿Z㬸‘Ù÷­A«ÂÂÄ™¨vÕY ¸f‘j\ÛâÑ(°ÛÝ0 P1–Ôy„T1!Ê:d™£óo:\Û ‘¥1’Ôµ®s¥PeNèZDš!ð˜]ù·iTˆ®‹qÇ"2‹1˜h5ˆ¶†nÊ‹HŒF$¶nQyý‰äþ½ULâ˜}o,.„âGý•mñ@¸íg|ÇÛhe§'%RÄÝ,7 S’ª†) ¦Ç;‡EÛ3³ÙÅhØáä"ø2ËPY‚mZ‚‰7]$Ø]ë#5Eð½AU%R†ø½‡´Eïb€‹.R|Ežº,cÔuˆ´!5zR )‰îêÂ"\‘‚@ {BI|ÓDzJVÄßËd–£” ¿\A–!¼Ñ C·L]‘!µÀn»øÖÆ¢Çx‹m,*OPƒNè{\ïPEÃT2üFŽ€c¾¥&þ†ƒ}¢ÐÃy ¯RÏq­‰×RÇ÷Jd’àw1AiBˆç]è,ÉÁ4z:7=zT3˜mg%°›]œ0膣G¾©1­#Wè*Çï¶ôë™g×çˆ×9ÒÙ‚Ál»+åî_3žôÃëÃëÿÌ×ð ”ßYôx„T.^—YARæxÓâM¤ˆ™Õš 4Rêh»IÀ6 !¨ÁÿÃ[A2ʰ›m±‡ZÅÏØ5Èj„Ò³ÞÅû € Ãø:>GTU 2]oAE‘½Ù4ñÞ¥ÁI’2Á¬WQ\®R |ß#Ò] ©¾»š~¹C¤Ñc_j5Ôdq +Täëú]ÇÿŸ½ÿl·#IÏ3Ñ;\ºå·ƒGù¶”8£áüË£?v.K±Å6eá±íòé‘ۅêê&Eª©ÁúÐ;—‰4o<ïcd5B·k:­µªªúbêºù@]à] „QÉ'ûº£«'%aßuVJÖÁ{—ÖÌ›¨t…*rnÔn×…Hp75š0*ýæßE˜‡u6´Þzþ9ÉÊ©«`ÐU¢œøÞ¡Ê_·¨ªÀ·m2·º¦˜3á÷[ú]ƒÌ2Bï™A:Ž“:BÊ›.«”$ë^ÄP$Š^tîv¯†hïÜÜIäÎy¹¶jïr±oö‚`û(&“ÀÔŒK¢ëð}D*T®ïP6B¢þˆ6%Þ­=?ˆ@ߥ½ˆw®1¤î™ÝÄ–ßžðT$»âŽ`Ãíu»^‹“Ÿá_Nwþk£¿‰©v, ×tD/îÔ3?ÿù‚ĉGª?ÿ[cJϼ+ |çKnÓˆ7â?ÿÃo×B‰©(4®þÇ_0>Èð\ÓÑž§‡XD‹]í@ Cåy¯êH¿Z³³füÕgÌOiÎötg¯iö0ýÅT£ž«ÿþ-b4!4žâÁ1Ôk²ûˆÍ9翃. ²ÉÙXâëýMR] =™Q¥I"¸4© †(Ò…nËÙ{ÆøW¿f<¸e2M&!(Š£ ýÛ\üî9Ñd3æð?|A&Ú>¥t²)é:šÓ+bÌQy ¿¸¢Gÿ%ʵ ›oÞ’?Àä R{lpëKº½dñ«Gô§oؽ¼" yRI\Û€2ÌùÙH²{öŠ~µÁ›)G¿ýœîåw¬^m©ÜÇ­ßÒ­#ÿá+¤[²~±%g Š„ˆoùAEØ­pÖ0ÿå#ö?|OçF”£HT#²i™"H…"›—RB¢x7±HH…Ì nuÉòw?àˇ¿yJ÷æ‚ìpFl7¬¿¿DæSò™I»an»¢]ÖèjJyÿb–Ѽ~C_wØgö‹ÏPªM–†‡'ŒNHº·ÏY½l9ø»G´ß¿%è *sì_¡îC}IÌæŒO¦Øí Ww¸muâhŽò–zÙß;B¹‘ÏÑ¥LI_Y¤¹¨Áµ‰b‘%Òÿþü =>`úø˜ý›ç´kÇÑÿù[¤»äíÿ÷OäO¿âàóõ7/ð$‘e»ìYüÇ/ÛS–ßn(ïSÝŸá7kºå™Oʱóç1H¦ŸJžGúýŽ~½§ïú$5}D ?¢±Çü/s |:ÁïkôÉ}ª*²ùúa4göéCâ¾ÆÙ€.ÍëSœÕ,~ó)JXº}*ìò”æÊS=œ'ßáÖÑ×6‰çF·Û£¦‡·eûò =ž“M4¡ÞcKpWä‡ t ÝÅ’üѨ߰ü¡aúÉ#Üò õ.0}rÂþ‡ïðjD1Ê!ê‹5ÅÇLîÍðÖê ýzÈ Ñ:\çPF#T z:I<勆êÉcTØPï$_ιüÝ ¿ýûê%½Kü(5RTŸ÷—l~h(Ž ü~Ÿ„v¢bþùëoþD³“h¡1stnqµŠg :P%ù| 1y?CJQ4“!q6ÆT8ûë]Þqá0Ãê÷ß²>mÐF¤Âôhˆñæ3ß‹5Lk½„¦#ô”ãß>¥{ñ Ë—-‡¿yÈÕÿŽÙß}EûÃ×l¯\¸o[&¿øŠƒ/YÿÓ×ìN×èÑSJ„(™|:gûÇçÄjAì6 '˜‘Ä,fd9ì_¯AØrY JM°{ˆj; ôz”ÝŒ÷tø;ñÎÚ{íòà·+êÓ%zR!0ä‹n}Iß²Å]šáœ¤ÉÈfyÅ"·›šÍ¡¸ÑáÜÝá:^<Þ0Sb=ÎÙ|ýë×;°=Õ'ŸqøË„¦yG¤)• »jÈ'ìŸ}Çêõ~@­‡T¾ëksÇD™,é©ÄO ËïX©½» øÑñBÛ†9ú?‰±W\þãXg’Íã?Ÿ"ÝÑ ²ù]ÉKâ›ß¯w-ÝÕšRb¦o[¢Tè¼H›Û]¸A aVµ.òÄÁQ’Ðû”§¢œOÅ€ä&þYÊi‚HQÁHóu²D™vyC4÷õ¦§"$ä8^sÎb>Z¤øR‘BNd‘”ºQbߥHé\%tr¸“mÛ§Ý LN´Ä®÷D)0³1±iñ­M1¤BaÆ8‡ÐšÐõc x\= ç"õ1¢”¨¼@A|çQã’°ÛC6D“oÛÔ9)Kt.°›6¡Á†ÎW²° È2GOp™¥6ÔzçA$Ïk3mÝ4È2GåÑöøÖi ¸€,4®µ‰ã$#Á “›ÒèQ‰*LÚYƘè8! 2wâ,Co ½…̤ÈôºÃÌF¸u¢S ’·&ރѕÞ}2n—&…IRGÐ÷¸¦COÆè*y]ǶƶiÂõÛ}êDÈäÙ}úý×q®ˆ@ŒÉ(ýz·+®'‡ÿlŸÜ<Ê)RL|rç"‡7;Ÿº*Y0‰è°µEä&ùºn«Ã˜"sÕ¨€Þ&ÛF­nΫÐ:µ¸D:ÇBžÚ6"éž÷¤æ_³| Þø8æcþËŽÂ ¥ÉÊÌ ŒNÈ«g@C bº¶EM‚Žj%Ešw¬G(ƒÌѺÔ)Œ.Y–ÒZFZ»¤õ9l¥5R&¡Ð.µÛ!‰Ü½Ã5iä ²cL¶˜œÒ8DZko‚¥R»8âîè’NšÔ…‹.9^Ýœ£Áh”QøÎc¦EŠõv ËŒèÑEd¡Á§4G!ÓùHWZ¾G&W.ÞŽýZv(ri]‰ž`#ªÌoÅdw.â»ÿW 3…¯›Ôå½÷µªK"ÔAT’=q›ò²ÈÐUN¨[\kÑò¬Æaׯ¹®! è°À7M¢~p=*Á…d…†Äáó¥H½é7¥Îû5’C¼ ï¸ßÞEm†×ÿÎ3$’Žèºþñƒîuz9"":¹!!ѾëÓ9-²á~ø®Kî¸Y~˧¾FV½Ku‡ÉP¹¤_nÓ}.“·¶.®ãì‡ÈkR„}Ý!«‚hmz^¤ø™çSÜÙÿþ”¸PÜ @ùi®u:.•Fåþ×N?ïÚ"q©? ?ÄÆÇ;¤ô»<ÿÛõüÚ…CNͨ"Úï=nß3ýåLŽGtÛi4~¿¡[íGÇj²y‰]_Ñï.Ù¿¸ÂLGlŸ¿!ð„ÅÓ ëï¾eý¼fòäã§GÈèØ}ÿŒÝÅ5:bò䊚æíŠâÑ=b»dÿ¶#[Ì1“<=vXœDGsº¥|ð­#ÞõtË%ÍÙ–ñ¯¿¤È¶Ï;tii[Áá¯>£{ý‚úrKŒâ&h§XTd#6ÿô{ö»Œ“ÿãó4ÞnËöû×Ô;ÉìËGôož³=oYüúK~qÌÕým˜1¿¯X~·bñëÏèÞ¼¢¹Ú£ò ©Ì äìiޮȟ>ar Ù|wžxÍуª?=ÆïjÌ´`ûýw,Ÿí8þ¿~ƒŽk.~ÿfhwÆ¿pb}vû›9þ¢•¾çRèïcþÙ÷|óÿÒ1¾í)î?d|oQ`JA¿n’ÓE³fûvÃüï>'œ¾E=@tK®þxŠ>8¤\ŒB$*˜ØsùOßà™3:™m ºDˆ·íqEcʇGäcMóê¶dóò±F)tjóý öçktY¢”Fåctáh®jÊ{÷‘qÛ[TUÑ^^2þü3Âò%­8`2nY:ŸÎØ|sÅô'ìþôª#ª“œý‹´5d×”G×ãcDéŒØ·S2~pÑ­é÷=ùÑ!Ø»·K¢Ô£@Ѧ¡Ù:&ŸChžŸpøë§HÛc¤ß´È¢ 8ÈYÿñ;Ö¯·ˆèÉï?æð—ñ«svÏÏèkfÌâG쿣ʙN H‘£ I¿jé¯Î±®`þåœý÷g”!UËæûS\ë“+…”ĮNj4‰,ÆÌñMO}±¢ÛÔi\>¢g Ì8¿ccïð¾ßë®È÷‚QîwÄ÷‚TîZÒ]óšý@ It ýå!æd‡ ´“ñjr@yRÑ_Õ7–v ÈFšöbM4%¦€îjƒ(Æ”ÇÓÄ‹ï]Juô[LîYþá[ú%q(Òöù¼¦ÇˆÔf½¹ƒ2{s}BuÕuÎ5ÿø¶pM¿c>yÌÁÓ1—ÿåwXY’•ÅPèÞñËþ@[ìCÅyÂT²q–4 ×§Ið5ÝÕ&¡ÆÝÈ»Ž(Z)8ЮnŽÿû·kS©d"‘‹HèæpÆÒ­„Î*cЬvqˆ¿vx›â0óy™väázW¡o‡I¢De‰NI7@pͧIý¼sè\áM;Ÿ£ÃíÎåš¼‡ÝzŒ ´B—Yº©>€X%o8¶¦Ê†æõŒëéV5ÙÁ¿Ûâz1€”‰c{m(-¥.Ovo>™ÕÇfO·ë=b6FFK»Ú‚0¨2Ç”·iÑó1ØÛX|’u]LcSYŽðk‡ PFâûnˆH9ìÂ¥H<æë$Ä¡å¥G9v³#Ê,¹eØ¡ J ¼óCÚà»;ãkÉl6"´{šU‹4©â;‹Ì+²±Jž¢Bà%FIq0Æ7;Ú­C› 3)Sö~ó© rˆv€„¦ÅÛx; Ò9R)Ê=¡=) *݃ßZô|Š»uHíðB‘O&øíS»ÔB@•%f’Ó/W8Ùl4L4ß´ØÖ¥ccâ«ç³)fdè.WÉÅÄDÚMC¾X÷{lß%T™8â’„pK´¸ºGHðÎ ÷Vß6èy…Ûnh×–òÞZXšeýÑÿùãëãë_„{ÑG¤ÉQZ"ŒAÛׄ Fbë6¹ü4 Éû²£ßõ¨‰‰ˆäô¡ÒüàÚ.­U7ÓÞtQ uâL )quƒšŒÀöD•¡•£ïùHc·}r7Zn‰Â 4¸.­×èûm]Ýø ™¡´L62ÍW6q}Óš ‘Òã\@ç‰~p¼'][Bpo ›[´Th…ˆ)ø#¸ˆ—H#ùI~OˆCoÈ5XÕˆ¼Hà—”¸ÝŽnÛ WA>#¼‡˜Õh„)Ýz‹­m¢ŒFóIr*YïðAŠü Â+H™ÖH5®xì®O]S¡0¥Æ×U%½Œµ×.! •Ö&¯_%Ò ´!›¦øx»«ñƒµnªóÄ{>Í?ÓFù l:¸\ý%ÈõÝc®S—ïŠèÙ),ݪî“R§Ì}Ök!SgÄTY JE°iŽ}êÒ¤uuòŸö˜®T}§€Ž‘0tg¯mèâ{ DúNo;ÈG”“<­ÙR ”‘øÏú=)ØÌÜ„½{NýÀ ¿Ý8&mVÒÔ¥,£xݸM"YjOøÖ3ÿåçdEÄ{…2‘íw/éöÕÃ'cÙ¾ºbö«/ˆ›Kº}¢E4[Æ_}J®ÖÏVdÓŠèv°QÓå„êøI@†|Q°þã·lÏZŠII°UNÐ#E¨÷7jÖ%"+É&Ò Ä ˆMª^qÛ"ˆïЧ |çîdÏ7œo±«%õª'?9B‹ß“c>B²$:Xí@*D øh˜~~öÙK¼3yz@±(¨ßœ²{±BOè üÞ"Œ$ö5ý&P<¸ÏäaÉþÅ[ºÚ/r„TØõí¦¡<{ ®!š {ù–zÕRÎljßIˆáøA4ѯ¶Œù%ã…aóü DžDsõï ãGcVø– G䕦[ÖŒ?ÿ”r¡XþéYÖ¨T Íö›pRƒfüäÕÌÐowˆb„VžýÙ6qºTÃæÛST‘c[Gvpˆ’q°§j“7¶÷i²×‚è<ªœQhšW§ØV‚#\O>†VSñàÓ'GÄ>%(ú¦¡»X…$Ø€³ÉAE›<‰}v;\Œ=%¯zV_?GMï‘—*‰ŒDÁøéí›8¦T Éê/Õ”òèB$ŸÂî‡3ää„é£v·býÝÎô]È_ÓÚû÷vüÿcøYOäcþ›C aÈgsT¡™FW%öê »”ŽªÖliÏöÈñ”|–£t¢Ú5Ï Þ¦i_¿¤YטÉ¥K&Og¬¿þÛWŒîRÝŸÒž¾dõlEyxŒåøfC$£9Ä×}Êh64g;ÌbBóö”ñ—_’gžzÙ"Õà1,ø¡ßcwÉçvO{±¦Yï‰H”ÒH£’gñ@¥Tå3› 32–Í7§D=ÁŒ%¾©“`l@£÷ˆ|D~0E\Sá+ÞIÃ{¿Üïh—-ÙÑ!&¨R½S, £Á!Äàð½€×H{¹G+t.Sg[%Xôž`}²’ÝÔH㛞âä!üÜ QÒŸÒœïZ¢§TGcúõ3Ñ´¯®(?$+diXÿá;œœ1š+š7W˜ÃŠIàê÷ß(‘Dô¨"Ö!¸€™/È&ï©Äð~$ô€®Ê÷‚Tn|AW!Â:æ®/µ¸ãý~óýŠ¥“iCÙäpxMŸ•]HÖß<§^õ(-puKqïó/NˆÖá÷KV_¿ÄÇ •ëwqÝ¿ây~ÇÃãë>q‡46uàâõùñÛ6ä?az(¸ø¯ß@5NÈó€lßÿç&±øîY ƒ–ò}¡¥¸ý·áÐÐz&¿øé׬Ÿm|Óº“D˜P²€«-å£{(×d‰É¡>½Ä‡ˆ©ÆàúN0ýä!a}A×9·oÈï¡é؟טQ²¹ñ}O”SUŸx¿Ù|Œ™šÓsêe‹)ª´ƒïûÁ!B$›)· î„‘x„ÉȦwSX 1 ×?Îíì¾Oè°«‘R}Dú}*«dn߇&2xö†¾ÅµîöÆ ]e‰Ù¢"çØí–nÙ tÊ#Ñ]ï¼v×Ì)ïOqë5¶M7oâƒ÷¸¾Gš1:øº*üª(põ†¾ dåˆl^¢Ê|7©©Ï®ˆ¢De`w ùÉÒwôuŸxÉ”ÖwxFᆷgë¡ ¾©Éî©@·mPY™Ð}WDN13ì^¼ÁSrBï0óÚ@{µL»|¥Ó9Û62¢1UE¹a7[D5A+Os±EM'hãéηÉ6°÷éüK‘º¡'ùÎCC@æ#ò‰¡¿¼Âv1¡Nw8€Ém$bfsÊÃ*!*!Ð]­ð^ s«[œOI–J'¾¶ïBK²ùF÷l_œcfǘ,qê£Ó”&tggx=¥šÀöÅ%"Ë1Õ™It%éÎ7„¨)Æ„¾¥[·CÊØO(¡~’?ö·züO¼ç¯=þoiÌÿÜ1|ó߯˜“Ý&/„àˆŽ!’Y¡«Súõ†ˆ—4%ÙØ4oÏèö‘ò`Al74Û3!Dê¶5oOqdh$ް[vg5¦,‡BÈß k1x‚ƒâdLwyI»õ 𚬣2I –`S7OÈëëõBn‰§3òi1¤èùäKí¦R´«ÙÉŒ°Ø&¹F¤i(°B‡wŠâhŒ[®ðA½ÅYÉKH=“Fe¤J9 ²e÷jI:ø"xw ¾O»¹[˜D?ÔL*u-w¾„Š\ÿWŒØMƒš–(-nœ—ÓÐvôëƒP å/§Ø«b4B›ž}‹ëÓ›e–“!8žè%ùÁ=Âhš³3úF’W ×9ôx‚É=»×W)óÀdfnÆIùáJòçÎÑ Bcfòæ\½wnnŠÏ÷?ÿ=‘¯¡%n³Ã{E6OàwQUÍÙ9íÞ%æ@Ÿ€¬êd>š-û×—e~ògÿÏ~ž…Ò·æRâ»ÛZò£CòJѼ½$Jusÿ ¥¯öŸÁ>”í$Ò3@L÷Ò;~ÜwŽ¢”¡[³}³œàÂ$BÁTh‰ïaöù#”ôÉÿNGbTÐïp"[äô›ž|–í‚>`þÙ!íé9¢8 ›(b˜±Á7=íùÝ®CëÕ£d™§~s‰(f‹*,ß²}¹FeDF6Ÿ}Gh¢“d T&´‹Hi=·´†Ð®ç¥Ò¤¢7奓L诮hw5ÙhDèºÈ z|©ßÃo/éZÃèÁ<‰Á”ïi¯–´Ë-ìûô|‚ =¾õHcˆÁâºP¨rBy³~Š9:A)›5‚N)L‹T0ï_¼%š £ãŒÝ‹ã'l¾Íø³§´/_ &÷™?™±ýá{ú0b4…«?¾@-î±øô>öê”nç)OŽ‘ÒÓmj²ù¿]Òl"ÅÁ„ÐîV ÊŠèúuËôóû4¯_ô ­¼+¶ø`ÁñW¸'ü›ÿïù×>þã˜?ŽùŸs| ©s ‹ÙÑS•Äú’ýYKq<Ç]^Ð5êé}Âò’ýÅ=›QÍRŠêÛKäâ˜ù§Ç´§—„ ÓF¾G ²EÆî‡—ì/:´5]0}zŒß.Ù=?'…ÊJŠÃ9‚HÒÌ-÷l_^ M†@ 'SòÅ„h{¤–33AûæŠ9&kXþñ5"ÏQù„llè×——SÏ Ý†`ÅMw1Ñÿ­pôŽ(rƸÍûÓ†ñç‘nÃöå–b˜ûÜÕëgg]\¢¤<˜!t*ê£íûSqƒ`Ь$[LÞÝvÖ†¿_ƒÂhÜú Û ŠãE \¹F°• åͼiý>bxëšl@j™„(u$HÂ~C¿NN©n½Áv=²3~xHu­=Ù|ŽÌ$²(Ý–íË3ÌdBèzBpØ60ýü4[|(aŸê“yNs¾„lD^Býê 5›»ÑQá. gs̤Hâ»ëB,~˜-Äh|¤Ã{ŽëîÏDy#n?IBú¹C<›Þàlò¿.Ø£wƒmßnÌí÷ý«?ÏâF¨:Kõô)yÖS_9йf÷ò iªÔMPès ßÿèãÓ¡÷”`LÇæ‡Ëd¡ü£ :uº#·k(A‡ž˜—Ð×U¢ØÓn :¬h—-åqÁêß#ªcfŸ,hßžá\Ž)%²ÈÉ#Bki^¿fµCå%HOÈ2ëz„NŽ j:"¶k6/—H¥‘¦¢XL!4Éö-šä·ýP7y/–d³"y7ŠäÂÑ]í!©hÍ|Œ)5QJBÓa÷É Ý7Úº'ŸŽqë¤ÔÃèÕÓû)ûÂ1~zœÞ" º‹söË-*¯½ÇÌÆH:\ãÑUIèÚMì[²’|bh¯¶dó$mâ­9‰šüþ “¶ßÿ€ÏfLï—l¿»bôôý‹3Æ_<¡óŠÞ•Ì??¡=}EÏ„É\pñ»ï³{|ñ€öå`¹vš»@þ`†½8c¿„ê Âµ5RåH¥‰¡¦¹l™}õúÅK¼š‘ižOÀîØ¼ºBš ÑYÀÖ]ŽQÆc÷;º­(–ælCöè!Õ$°{¶ÃL voÑUFhkú}‹0%ó/ãÖ§lß6‹R;ÜvOßYtY"‚NÖG¶Á[&OÊï;Q› ᱄¾‘# C”{òŠJໆ~]CnÈ« Á6çQùm"ûËãÏcO_±_GF'IôÚ¯Ötû!f¶ Z¶Ï^ÒÙŒù0tÔûd™GKsaÌ„ò@³ûþ =ÎéÖT9#+bôôÛÛÛŸ( ÿÄÇ„ºcþ8æ?{¼C·…Œ3c*@—˜¬g÷b…š$$²Ý¶äGÐîiÖ f6§il]c·5b4arNw¶B˜œSnAyrLq˜±ùö9Û7[ìø‹/â×—lŸá½$›ŽQF!P˜ƒ‚îìÛitæévm$KR²ŸÖDÉç#T&t•c¯–3ÁÈš«¯_ÉÐÙ”¬‚vµ9!Ÿ‘ºt¾·ÄÑE–jŸœ\ïУ£üfÅúù’ò“Gh»a÷¶¦|pBõà€°¹`õý)2\‡PYY$ÌI&$?¸»uPDˆa­¹S¸%³?ðÐuº.MMˆj('²Y•€­k÷ ñºz'ÐBàé–{\)Žg˜"i¬Boq#úW·@ž¢Ò›š¾nÑã Y‘a›¤Aœ“bWÓnjÌd”¸ÀÎa›ÈâWO‘®¦ÛEp5rr@VHÚ‹MrÓò×Öª\ÀÒ"¥E‘t?>¼S¸%ÄüN1ù>ª|½)19ù¼L¢ôðžèûBÂwÎÑ{TñóÇG$¦lxIÛF¤“sRìÅÃûd²£ërF’Õ7/Ù覀æG©‹޾ñn-ôŽêé£T@w‰0êGÌ#)ý¾&*…ðüä˜é“šW¯Ù<»DæÙFüçøõ]L«“C”ò<í銀&› í–à3²ÙP ™@}±#Ÿ/p›K\Ph¥‰8BïQã1Rú« r"uò"Î#t–‚l:O¾8$y¶¯W”'ô—kÌÁ¿¾ÂvÉÒOø²1ùX²s1X­ŒNé/W`F„v‹*GäýrC·nQZ%ηQCtz²ÅÂ$~t»Ç[P™&zKECݶ9ßôèñ©<ízƒoåƒ-ÝÚ¢Æ%J”²ÔW€Iì|šÒ@cBn£ˆ“ Kˆ”e˜, 5ôËD#I—DšÁ†ª¨È'šæôÓd­³¡3ò£q¿f÷v‰9<"Ë"®”'S‚ë‰Öa75 ™¢ß솠œ˜ŒÛe$[£3Góvª Ñ Šã”vì__b[Ê4RÊ»œ¯¯¯ÿ‰¯`åÉ!ùؤ¢}ýk5Õ½ ý: £uh/6ȬÀÕÉ2Ó·­‘Ó9Úú«-z6K! vGs¹C–cDìqMCðŠòä8Ñ*" ,Y®S‡))G4o/!/±›Ùâr>&±WW8+Ð…"‰W¤ 4%ÂÅ FÒ/¯h–*—ˆ˜(pªÌ®#x2ŠÐíSò†S*ó‚h;P9Ù|œÖÄÐÓ]^P¸ÚQ><&Ë 0Ð%¸í𿢯”‰Î ”F„ˆÈ³$´ëúAL(Þ) …Ô  tÝPàÅW3Éè/—2òƒ)x—è%ñUA¾÷™?Eá¸A%BAw¾‚bB¾(é/¯è®¶¨*ñ·Mýzƒ­f6Cx‹å„fO·ì’ýk™»6ùZ<¨ª„ù4£_­è·É QMF˜BnƒoèéVbìñ¢@–9¡kðÅÌç˜Iy²Òšñ£ºN¼WLÇ»>²ïó~Êã8~ø‹ŸóDˆØ³³L¦Š¿ÙÕ)ZGvx€Ržúô‚(’hWþe,7û‹dŽ\Deú&iò¦îï`üä„°_S_Ôä‡ òù·YÓ^nZ´)§ãǨ \³¥9¯!(̼ 45äcб¡o<ùسü§·d'‡ô—§‰/¥ç80“R¶4g+äâ˜Åç÷h_<§¾´T±«KBL;º“/Ÿ› ¶/öTïC»a÷æŒ`&Tc„oV¢F̧vŒ1ñ™ÆŠîr›xeƒB8×’™!ºפ¶Ê ±ßRo-ó_~A‘[ê³® øvG~ï!F;¶Ï.1ÇSÁþ»WX›“5ÍÕQh£O1~Ÿ]€,ÃLKün‹ÝõdG3$žn¹Ef%’0„LŒˆ}Šþ”yF´6ŒgåÂ{Ð¥5*‹´ç+B4IÅ+ ÆçC ǵÙ8‚hÝð {ìzMR‘’øÝ×^‡i¤#ðà‡|ô1¡IE´ ó’l’ãÛ»í’ú×(TY¡ _í£ŠÐîè÷.]T™ì”p(“˜!´ ®í“7µ ±³¨² ?œãw›ÁÒÇ |ª˜ltÈ"'ØnP+Ç›¢í­KB˜löô(Ã7=j4&ö5.4v·Ç5Uɧ%„ä¾a·-ªÊSDuÓc&”Øm=XªÕ=Á¦¢<†ˆO”ê}Ê„¿±• CÒ«•”½ÙdF~8¦;¿ [5¨*GJGÜ®&Ò$.1¹¥­nl“M"8ÅT" DƒõȲ ö"+Èç|½¹A ƒà0„!<¥@&%/®Wô».ò,*´‘ M/³tÉ´Æ· ¾õ·¼+ï. ‹"ÙDKè=º,Á[|ïùgzþ||}|}|ý5HUHB·è\ 2Ù–¦„“dGcD…]®@g˜I¯lR@—ÉÉC§p¥þj…wzàðvØÎâë™å˜Q†ïf<‚ØÑ¯²Ùˆ~½"8Mq<Å®7Ø>`ªœØw  Ì´$ú!.Ú{„t—›d¬R0ÕmôuÖ 5pbš>ÍÅEŠÚNÿ88M ö^)’Z¢Œ¤;¿‚*QíjDzbp0HÂya4~-‘ò]zòàŠ¯­ð„¼-Ðİ>[™ÎЕ& \Úw‘R?øçßqdêÝÊ'ú´Èx#ZŒA ‰¹»Ù%N´QÉ–/F„CŸIŠÔ9´ uzR,¡•c&%¸îÖýÁhìj(*L¥pûÛvCR¼“À9¬»)Èbˆ¨ªB—yrûpþNàI1¬cáÏ$¼Þå çñ}׎?üO!Ð8^p–n]…ÃÏ´ó˜ù{Úe“„®7”Ÿá<ÿÜgÇ[Nwô!mu »Ú’Úß·5×µƒƒ|>A—š~·Ç_'sŠ;A*Åá EaRE~8¢?{C½ê˜ÿúW±æâwÏPåA€˜STô›K¢¨(&ô›%1VI¼½¢ßFŠ{‡T÷&(¿ãâ¿M]kfŸ>!Ï¡Y^Ñ]µdGGŒ`Ï_³yy Ê“ØÁ§‡ù&6s¥89Bé,šttË=æà€îâ ûË]šÌ‚ÇùêøbÂÑo>¥{õŒõ›+dV¥†T}þ “Ƕ_?§¹Ø!ód­Ônw‰áÅьЭéö~ð{žST¸ýŠîbƒ %ùäŇ´oÏzBØ\¡îSæ¬~ÿ-õå5;bòè>åTÑ]l°mDO~»aÿjÃèËϨ`ù?ÐuŽ|~B1CÛíSáï@O¦è$ök\˜|~ŸîÍk¶gõТÿ~"ž?Fyó¿Ç1‘Ã×®BiF3y4#4Mޝ"Ò8ÚóŽûŒNé.ÖÔç;ôdDy4†¾£_®Ù¾8ÃYEõð“IæõkäÁ}fg´«–êÞ„îÍš¥gúÅ1›?ý‘f_0}|Œ]ãäˆj®é75Ò”dÓѺ$6«W¿ÿŽýUJ*CP…Ìr”PD×#³Ùt4× ”O)¯£:7ö2/ÈFŠö2ùEó»Ù…Àn¶ +&ŸÓ]¼âòŸ^£Æ#´ÉDäIw$ü ¸;¡Ñ7„ÎÞøß´y‡öwô '³;ësZ£S"lHY" 3xÊqðÅnSª!E‰ìÒxe $s}DoRºbhº]M”¡ Å´ÄíÅÉ YîÙ<{No%Z(ôxJ~0"ô;‚7ä‹$,$/nUÀþùAŽS¸†K[[òÅ*ÏvOh»„ºKöz=T©(»#´D cv eÜ=Ÿïq•ßý¾¤r}üOÙØÝõ~¾>F¾ËB ›)AlÖ\üã·8Y åO<ÏÿË×ðeöÛ_’…5çxƒ*‹Ûq ™Ë­WâΤ<ÝÐ6•o:Æ¿ü%ã‰ãô¿ü ²|pØà&ñ2ú€o-óßü’ÉIÁîÅ9íÙŠnWŽÿû7k„šÊÜ$× ª*mƒ·)ö5ì8}¸Î~aÈ1N»»A¼p]ð¤äPÔJȳa÷6 ÎÚD̃½vëY‘ÐÔ}MòÎgŠwv ·(âG÷€T…#2ôͰ{•CøHŠ Þ#s“vÊRÁÀ‹Ö‚’C„ó`#cŠ"ÌÓ¯[hH…¼N6¼cjÖ©µåÂuîoÿ>¤)F牽7ôº`òݶÌõdumãwÄçAšä z‹Ì³´;o†¸n%“=Œ‘Dgñ]âëP£ºÐÛ'ÏÑ!TÀ7mš0cŠg÷ûYB‰›9SúžˆLé‘7‰>×´ I=!‚Åíû¤t1¡ÚZݵKE€áý¨]#(9WbŠÚ”ŠØw8çʤØ…ÛXÐ!rU(x„Ms[ã…ÐY–H•‚õéoQ G*—ث͚!T$´Žà"ÞW·D!™!ô=jT{wó[>¾>¾>¾þÑ«ëe)3iΑhS«6"J­S—/ – Ö"‹B 4=r\ A$¿o‡DÒ&GF«ÛäÑÜYD‘£sMèR÷Iå)Ö; ©qÒd‰VgíMQ*3 Þ‘ÜÔ'“ç}è,èô;£ ‰F×4D©ÒÜ5Ìß2ËP¹Iÿf‚˜üiu²§ mÙwi-¹âÝ5çzóÁh:!¤5I hê;‘ÛéÜá}êì8—Šú˜:ѩ赨q…Êõà˜5´ÑµÂ®ÖzT¤¤`= î×Üi‘â@çÖ×-u)E7õüõyJ£Šlô‚Qږл´†H™Á¥Na´ÉS:x;lR$èá·zwóÝ èytU}%þ¨82mÞIa ?ñ ÔÏÒ~âø÷ß3ԩΰCoxÝÓϰ¨q>âÛþ=ÎüŸ{#w4G‚Ÿª# eþ#H£÷_¤Í¬0z ÜÈDßêÓúŸîŸlìþ?ÿð«µÈ&ÓÅ/²ÿî[š½`öùc4-ÝÞ¦Š\@hº¦CîDM¶X 2Ÿ·þÎ vSïz„¨yÀ7)w¾½zK»ƒñÃ{ÉÕàr‡÷a2F÷aTÇú»xiÐ&Kª¨"Å\ÇŸÚ½¼³Šä)ó ¡@GGcD„Í9ç8cñ~MX]âENl;òûSüò‚ÞVL?]mj9…í%ÿý{œ*0™yïþKvBzz€2vÙDÒ]5äGGHÙОoQ£9f¤Ò&Â0šÐlé–»$Ìbô5ùbŽÌ¸£T~ÏòIð Ýå¢Âõ-Q¥‰êà?þŠ\7¬¿_¢Ê _ïqjÄøÞ˜ú‡Kò“Íùk„™1ºw„®$v¹¢¹Ø¢îaôžÝiKuJhÙ¤ ¿\£fh#Òï ŒÂ­¯ðV“NÁº„LÄŽn¹¤¯z2!g÷4Ï¿¥qS>±ùÓkb„n¿!ñNsï~AóÃ׬φ‚˜&§`{ÌáŽ~ûÑ×Äè×-HƒÛ7”æ„í’ýYCôä3·Û#³ ÙX³}ö=›ê=½ „ºcú˯˜Þ«èë€6‘útKè6ÔËŽñ§Ÿ’Ë–ÍË×ì¯:&OŸ°øê>õ‹oÙ¼õ̾|LÜ^²yö Æ'ÿÝ6¿ûžò³ÏѲaõýklmÓDüþˆÆ~ó¿Í˜¯©>Íï1ÿêázìvCsºCVSt%¨ß¼!!m‡º÷ˆÙÂÍž 2G·îYüús„­q6$ÚG1EkAT’Øn©ß¬Òï3ÅÑ‚ê°À®–4Ë–òÞ ÍÛ—¸XRN$‚|>J³0ø+»ˆ™æ¨RALó„Wì¿û–«ï.™ÿú×äÙž«¯/=¹G÷ò½˜‚ß¼ Ú€žÎ1“<žR“MÌ … zÐyäò|C³eÄ ¶NÚ!%“I˜ùÁä6KáÙiÝjI ©;èÛ¡é†c ª¨ÊâêUŽpûÞ Li@3ž¡ó˜(.ó8{׌H-°Û Q%n3>Ñ ¢¿ƒ„ßP 2“Øõ’~Û¡' b¿b±EgÞ Ê{ÇÈè)ïω]‹0Rl°Ë ö§T‘‘Í=^ ½C*ÏÅᆭï3²Ü`ë=; :šàëmÚÌgº¬€·ï0“Åâö.âK)1£ D¸Cáï¶?åßE ß?ž÷Ðç÷èkäYITYÒ½yÎÅ?½Däe:䨫´Àí[æ¿I¬‡óß¿MÝû]î÷ÇBgƒ¡Eïñ.Ã?9‡‰Ôõð}Oþà2.þëº xÅáo¾`´Ð4ë·w "ùñõš³ÿßwȲºò„t­¥J);ÁÑõ*E,{‡© xGI‘+·¨ó(ôNòZ€h{âPÉGï‰Ò)u'ø8xíÉäZà9í$"’¼2ãµ§a¼Ùm"Ä»Ö1ïOäbðvYdè"#8K »ïÉfSb['­ƒ¨iÎјâÖ‹8ö=ý¾xa)Ž4ÞIÓI»N â:žuPî*y3F!Ô0Ç;o  æßEâAß½Ó®m‡Ž*ÿÎÞˆ7…”ˆ!¶Tá±­mÁášþ&NZh•xxJ§DŸ¡å”®·Ƨšäc¬B‰ß~½Ó"-¯[CÎÞ8a$„GàÛa'Câ[÷=•"Ûk‹oÓ÷E ›V„¦ÁÙpc­† IfŘ“PbW·)­JHt•#‚Ç;ŸR³„@fÃ=Óµò½:!݃Á!« !HL®ñM”ŸÁË[1¤húÙ¬pûaÒ½¼O­Ó*ÃíD‘ƒ³‰÷€þøúøú·y qé z¤5f:FxK¿Ù‚*!€PC)ˆ½C9&WIË¡r”„ѹÁïö8QÆ _!@:‚æq)oPn3-ñû†Å0Y©%ÑE!Ã<=u©<ÖKC‹ðMë"ÙtŒ~µIDÞB_¯yÉ9 ñ’¯õªÊÓÚìð&Eì®ÖñŸ:y)\ëºÅ}Í7b¾µœš¢ŽÅ$9‰¼>Ÿ"9$ÿáÈ â™šÇ;—m@H…H¿fñÞqÁº¡C‡1ižbL¿/íAʪG†Ðô` ±ïR87ií÷¤ón' %qûTHÁ{¢P(%‡ ®Ûñ DZã‡!~\Æ»ÊÒºÞí’‹r›ã{ëŤ¾¦˜üÜñ©ø–Jº»ïn;àû=$ÂÀM–ôt›n¸wþ²y@Üã_º‡ˆ(2T&±ë¤C+L5Bkš!´H¡Çy*Îëäu¡d*ó ¿|‚Œ=¶c(x"vsE{µ­É÷©f°ùáŒüÞC”hSܱOÕŽ™/0ãüÖºFHb·£»\U…©2ìv“Ò¢¿)€Íô€r1N4„fM³uüö+2½ãê¼F/`rK·ÙmJÚ }·1%†ðãLÈb„ÌÑwô+úÎQ§›Ö”sÉæë7TŸ=%¬ÏjÎô‹ößýÀåŸNQE–œ&$| jÀ,æ˜BÝÎ%½ ñ½ÚÙ³dÞ®Hñ}C´ñ†‚!³B{ü~ª@ezhñø¶Ë¡ÙÐCÚ õÅU,(æSTæh..°]„àqMÏè³ÏX|vLýâÝrŸÐP™£ŠA)íýfÏì?üÙœ³üaÃü׿Ĩ-—ÿø=1¯(ó Â{Tiy¢YøÖáZK¿ 32€Ãn-DO¿Ü@Qá¶k"ù¢(@‚hwô;ÈçýÕ’%ÁûT|+…Ýî(žff<Ð~â_‹@óãïŸ;þÎg«ª ~ñŒå·ç¨ªL 1þ»˜“\c™ÿêKбÂnj؜sõÇ×ȼø‹æ°Ûr,Þl¾ÞÝmüø7kÑóc~ùÑ^²}¾¡züˆ¬ì8û/_“?ý‚² t-èLÒ¼|Ms¹As¤¦1fT'ün‡m“ϯ4×ÖØÆ#BšEJîÉ&#ðÞ‡A”ugWCB‹‡k"™¨¤Vµo]*Eâ mJ&dU8¬ dóJXúU“ Ù Äh .¥ìïˆ^¤xÚî£@iE .!‡")›¥I„qÛõ˜jšè\ÃNµ¿Ü¡çcbS#ò1Å¢ _®hVMJ!R}’uÏV¢²,m„tSˆaòJþÒRÊëÍú ª»©T ¡AÚÑFq½=ĨÞ09ÒùKªäÛ&[>mÒÎɵ{¼H™|›ÕtFQúÍn௠èŒHFûR|Û`[Óm]mº–æbƒÈ3”ÎBðèq‰Ò29›ì›¢ ÒîÍd˜ÙzúMP‘Λïl2³7wz¼¨L¦¨÷8옥L»æÞ"Çù¤H{g±ûfˆÀMH?CÄlßz„Iß!²3ÎÀ;|ÛcwÍ LIm]ï‡À€AúÛt©ó’d³ %,Íù†(s”Ni3›ºݦ§<9üc78›'¥ÔÚâÏÅÿô6úoôø¿ô=ÇüqÌÿVcHZœà!*òÑjÚÚ’ÏæèìUMT9ÅaNØvƒ7ò5Ye’þ£Oi~âÁŠo{PÊHì.‰Æµpô‹Ì"Þ…ÛndˆÄ (&ØÍо“§@(!Ò|í]Z›ˆ~èP¥˜e·Ù!ªÙHÓ/·`rDìhW–¬ÊðCfƒ_´”)~z@ ïuºž™–ˆŽ“JЯwØÞsÓ½—y׆!¼K¶z ¨<Ñ\ÛŤH^Ñêº Q ­·$¼.ð¤6¨\¬»E«ã‡+¨ÈÐÉ|1 7ÿ‘:šÃ:Cr_’2…­èÑŒ|¢hήðÑ€ïEÖjXsBhb´¸¾Ge"ZlÛ…LçÆKTfÃZ•rÜmöÄ; ˜¼óÍ2‚2d“2¹‘Ý- áâŸ÷¾þê'9ÐïA9~·¡Y5ƒ(îßÏœÜ Ò7¸ Q*Эv7ô¿èóErç ž¤wø³¿O¤{©SŒ“ƒ×Öb&S´ñÔç«dJöer¢k±7ô?üz.§Õý)Ýé=›!eGwÙ ‡Œ- |p›+ê7+Ì$§Ûtd‡sh[²£Cüv5„Ÿ‰JP¤¢Íµ¢‚ÐÒ^,‰R!Q¨ñˆÐíiÎÖäî3~0cÿÃsše\)ŒB"p}—ŠJ/Г´;Œ>ñ¢¢k”.2t©¨Ï¯ÐÓ#²2Yþ¸ÝŽölMöøó'‡l¿ý†v“ËÅn‹Ðß8Æ_<¦¿zÍêÙ3*PJ¦ “IýíÃpGµ™ï„àŽCb½¦«ÝMËìµ¾~°¢F•†ÐÖƒ¯õÏ!¥7·–F1ˆ=ÍÅUòçÄÓ×-£Ož2y0Án[B”ÄfOw¹] ‹¥»7çŒ?û íöø|Œ²k6/kòÃiÚ¹&9Rt;š×ò{G˜R€óµ “›¶Ut>¡Ò)§5µÆš×6©MÓ$u‘Ä:Cr“ZKBFìv‹mz|g©î?`ô`šTë1,CÁìíê g%z4"Ø··ÃCcñ]š²øê!±éˆÁÑ/—ôûU–ˆàèêŽà-RçT÷ï3º?Åo/Ù=;§ïÀT#ÆOމ¾eóì ‘Uä“„<µÛ}štõ`ªODDR ùz?íýOô'ßÿŽÿsÁ_Èý÷2æî>ŽùodÌI±?ùüS&§¬~ÿ ]«©Ž*ìÕ²)£GcÚ—¯©— àŠÎ*¦Ÿ?Âm.°¶bt$i.,Űúã÷x™£MEõॺÊÙ¿xÎîb©2”ΑF$gÅ c"B[–x†µ¥x$…Â75æþ#&ŠËÿñ-¢\PŒ õ6y×GM~2Çï7¸½K6y'G6\ýéå½ÇT'ú« úMÌ*ô¬DÉ$fW¹z'Ö9W·á%2“ì^¼¥Ý¤èð÷¯Q ‘OY|qLóì9]+7y³côågQ³úîaÙôˆÉÓƒäÜáV_¿ k ó/Ÿ0¾_±{öšfeQ*(1cE¨›Ôiþ‰âXd%fV% løÝqˆœÑÒ^]‚¼¢b²Ë¬DæßÖø]ë[|,8øÍçÝÓœ¯Ù¿]’?zHFËîõ*QûBDfTÇSìz‡Ð‘öbËø“GHÑÓ®ª¦’„¾&¶n ?Ü¡S²ƒÃ”V|ׅ㚆Þ½×ç@e 58YýQæ.ï¯ðž[Ç{ÑßªÌØ={Áî¬&å8ïíóüo»ö!è75Õ“',¾8¢~ñŠíË+D–ýÅcˆÖbî3}P²úý·x‘ÝzQ|H*+DJ9ÎÆÌñ%¸†Ý‹ÙÉ=âö‚¾D×c»¢D¤ÎÏFüçøÍ™OóyÛ7 eÎ#®v 4åý$=õÛuš°l*½3NÞ½ R ^&.­( òEE¬kúm—üõ|ŸøE0Ä‚mèV{Ìñ1ãà íÛSÚ]M”Šl4B+hW[0JJT^¢K9x.’üwݵz1M\íf‡*§deÚ-»zG·jÉÜc4/Ùýð,ÛLˆ¶Ia'NP><¤_ž±;­ÑeŽ4* „D©J`Ê 7xŒñKËä\a“B3ÞÉ­G ž?MÈþð>1^#µ „>q©ß»…0‰vÇ|]ài7„©À¶ôuGõ𓇠ÜnO¿Ú't@‚“è²BiËþôŠâác´«‰ÕawÔ§–l–]O”Ù$Ç.—ØVPÏÑïÛ#B€íé×uJi$E† S×À‹Á¢I ‘¶·;ÑD÷‘H¾ïp­ÅÖ-åƒLÌð½%Ô5ýÞa&n½'Ęb:¯Áu/17Ãäáw¹ÈÛöÈ,COßtïPyIy|L61„݆æbƒë#f4¦8mÏþí¢œRŒݦNŠþ˜¸ŒR¾'Rˆñç[ãèrý%uÉßÔñïRïþß5†cþ›sÚtwŒ>J‘{Öß¾%Èœ|’Ü•ôxF17ôgìW ÂBß¡óã§'Øå9ÖWŒ5ÝÚaJÁîÅ\(S‘ aóØÓw•e(¸ÍB*„6dã)õÙmmÁ¤Ö(¥ ÎaŽ) Ïú»·¨É!ùXº&ÍñÚ º–ëâW“ŸÌ ß°y~N~ô€ò Â^^â¼æÏœ Æ%f” ÎTñÝ.‚Ê2t.ؽzK»½ܼs.è’ÑÉ{¾ÄŤwq]`üÙD·fõì Uäd‹CÆ÷S ‹Žýë ºN0~xLuTR¿>£Û¸”ÚJA6ø6åüH’lG¢¬Åmx· ŒžèÝàŠ0Ï×õ¥Ì~yk{¼w sF„íÛ%ô\9Zlk‡Nyê|ë¼[‹ÝZFO CK¿Oâï õ7ºŸ¡½$.¶¸æuÿHèÿ>Z|m60N¡.~àèÆ÷>ûCôûëíO£ÀLKºósöçûTÃü;›Ã„»kÈŽŽ™=9 yý†Ýé=.ß« ¦ÚÀ'Ç¥ÅMmºQÎlx(FC÷~°²³ýMðšÔ&9Öô-QULžž áè®v„˜ìežáö;Úm›(P©†¹¦p0U™AJ, v_'”WT©Ó¦Oð»w™-Ft§gøÄÙb†.L2u õõŽSê-ý¦';:Lm™HÙ¾÷©%$Ó®)´{úå3; ›VôW´›žégè/ßÒîJD¼ ¨r”’ŽÂèÁbMXúíW;²ƒ”´4g—ˆÑŒÙg‰õ’ÝóSD9£8˜%K2—b<³iAw~ÆîÍ& <„@ p}Pfh\·ªTzˆßyÀä7^iräLJ_Ó.›;ˆÀíÎöÚþƒmœk¹@T‘‚ <Ѽ~‹žQU´WºÍ¿Ý#F3ª£œætOuÊþå ú.gtA¨÷èÙ~{Aßgcð^“/¦HÜ- ¹±ðã®ä^Xš bjOݱHb8FãwkúÕn\¡,v[†˜USø¶¦«-ºÈS I5&«4ýÅAêNº(R”mèSЉï{ôì€ÉÃ9¾i6b÷{|—\`|½Gä‹’Ð[Ú³sºÝžl~Dq0AŠˆ–Íw§d÷O`»AÍqË·X1¦šH¼Uä3MóúÛû› >íK‚'Äø1Kåãëãë_íñ&Ÿ<¤?{…cfŸ#Ah6l_œâ1]2ûô„öåÌý„õ)û«–ÉÓ§ˆ°c÷ì}xD>ÍðÛ–òÞv{E{Ւͨ\"óœ°ßÐ-w¨é"E„Ÿ^B^QÍ¢g÷âŠüäåÌ#¸®OáaÌáyîØ>{E#²é¡ÝÕ–êÁ ns732¢–óã{”Gsüö’ör¬J¢moèÑyô,ñ q©¯ëµkÁ›eûâÛKtnn¢DÿLÁèxBsú–®Ì>HØ]±;­=x@õ`FyIóö‚ F”ÇsÜfE_7H™¡G9ýv‡4#Š£¦*q›sês‹™„¦ùp5Aä9D—Ü.„øQ•'îPDV&;Vníô¢í“Õ™øå½C´NÈ{w¹!Ê • |#ZP£ C¿m1ã’Po©/w‰š©“‘,ÇèBÚîÖVö.õă™Ï’3XàÇÉ‚ñÃhlb%›ß†ýDAü#äùç h*4ûWoi·Shþ=*Ù}ï=¼O>ÓØÆ¡ŠŠX¯Ø¾¼Ý˜+/?¾O97ì^žR/[”–g1ó#F÷§„¶GâØ½<ÅŒzGõð>墩é¯ÎÙ>¿Àœ0~4'4ûÔµw­Ô€Ûn¨O×d''Ì?;¡}ó†íó D–]‹Õ4_Œ^ ò [oð6ùÛÚÕ ut£_>¤?}C·ä9Ûï^#Š È¼@j9$V Šɽ¢»¸JŸU–ˆRr‰¸LB ð6Åmë•—`w4«†É'è.ÞÐîÁ…k{T5¥˜—É“qÓ¶R ÷šÇÕ{\Éæs{vo¯ÈN2zHûâ5í¶AºÈ—‰ÄóÍGÔ/^²~~…,2¤ÉÐZãm7¸Ž\ó#*Oqžñ}>S|‡a“ÒbRq«ªDÄ×ùw£ †ç7û÷ÍÁÅÒQ¤ÆED’ýËKЇ÷ÉKèÖ=Q:úå1>`r’±ùnÍìËc6üšÖ•TóÄ“ù»]&!ÇX`k™Ï)’‚=ÆHèíMËIfÉi%¹o¸¤ðÖ_×tËúÆ’éö7Ç;Ž)ɯù&'j”)@YúÕÛz„ÑÓqê4Ž|T!•@Rz\Û i‡’ÐôxŒ«WØ„ô¸¦Åßgñù=b½£»lð¾O¾©:#âdC–Än.i÷Õƒ'ŒL‰mÒ–óÿç9£_|†î¶Xoè¯Îñ¢$/@Tsª…dûÍ+z›|ªÅÐz”:!Ü>"ÂQÞ»cþçŽáã˜ù[ˆò^P=8¦û±¸ÇÁ縦GšŒ°½âêO¯ˆYhFÇsºóKÌñþê  £“Ü.¥–ªÉSbTTÇsìꊾñi- nHÐë±Û&W¹Àn6DYR=8Dˆ‹ÿñ‚âáSF†ˆ$t–úô×@õä>Y‘h"_  §[7Œ?y€[Òû-zºmOqt€2šØ×ø6"rE´-Á†àXeJÎ- ²iqÉQ bÇæù[z'o,š‘ió6GM ‘M˜=ž²ýæ;š6ãð×Oñë3vç=Ó§Éf†îbÛ5x/0“2¶ìÎNAÏŽpõd…*f~€ô¶Ï÷d‹‚Ð¥\1¤$ÞB 2ˆàûëçmÖÈDaÔך äølƒ]ï ÎáeÎì«Ç˜Ø#ÊŒîü Ûi”Œ‰ãí[¢7˜Å”bšÑžmÈŽGØÓs¶ç;"SäÉR°œ óä`u+ðÎÍ$ª,êÖÚõæÏÑÿ8‰ñÎý½GGdÓä}}Spÿ(Hå:úû<{-d|ÿxªÔÔ/ß°_vI¯ôW=ÏÿÂçSˆ”çÑ["•é#þüçûÎ1zôê°Ly y†»8eùí[Èò'”à$³/ž2>ÌX}÷œÝyƒ2ŠÐu˜ãûÌ?;A8Gl¶,¿~‰&ÐgòÙÆ'hMóæ5˯ßÝÄâóÛ½§[îA!u¢á6kÌÉ}¾ºGýý,¿>EùµS!"Kðr°IPú!Zv4G>-è×5ÙÁZø´5ù@;ˆˆcúa—è‡RP tìrƒm<ùñô{ú]Ÿ¢T+!"ÞZzT’4v³Çµ„¤8>$v[êó ÊBðH£ ƒ¯ëT¤ŽÊ˳`-!Š„dÊHp€à“õOŒŽÐõ 4zZ¡”L¢F­ˆÖb7lÓ!³2¹w¼w3†¾,Ü~“4JÌ4Ee'ù…ãbƒÇÕu^üvcBÁ³!ÂuOöëšâÞ!ùHÓmZ\ÝÀÐÚ X9ÅÂМ­Ñã¸UŒnvó1Üfº"ŸWøzM{µ#¢ˆBRÎQ&Y÷tËý¶f6Ç`w–l6R­ÞhTÒ€hEhö¸}7Äškd¦‰®'tüèBkZÜ®Á,0ÆcÛˆ2‘æj‡ªJ°)§ßì)OØÕ²šc2mBx\Ó 1ðR!52Ï"b·{ôhL6-R x–#µÂm®èv|^Ñž¯¨öšUŸŠúÃZE‚øzÝKòE…߬q.ó›º?×'û)÷û¿…>Ú_ÁuýW=þã˜?ŽùÏsJ„ˆØ}Kyÿ%:ÚµGU¡kÓæ:7çR@BoAiÜ®¦xxÑïé[AyoAØoq­Gåš~½C9n·¿é,å‡sb·§[÷'Gàšó5Ùü3+S؆'­cÂúˆ*3Ú³ |/(î-ˆí.¹åù€>šd·¶o£ t ýz9:BÉžúÍB›$ø3rèjÌ,­%×î#1„{»Ïa@Ä$¾Š×á[D¢õ˜ÙŒòxŠ]¯h/6‰^©ùb†RW׈ÜàV[0 Pêίè–;d™cFc” ´;ªG'øõí¶G žj4FjG¿M.Áz„TÄèðu›ºÎwÀ aÌLá>€@ËÄ}C[8ÅRûßö‰fYŽ)öâÛKòã9~³Ä¶)BJ I£Ôíé–B Ba¦cL•ÖüöòŠ~×Aô]¢JM¼F¡ßY×â­ÛØ;A@d%Ùl”|­?À·%FÐIC$!å7|XDøNúîñÒhúõרmÑ¿ÙóBçGs”èiÎW8Ë_‚r‡†â›³ùÓò“ûT9õ«sÌÑúžnÓ“ÍG‰ß38*¼rè.—´ë„ '‡ÄnC¿d“ßõø> s…«¼7äó9ÓOÆì¾Ææ¼%ŸŒ=¸‡Û^°? Ô½E• Љ¦_]ámFq8Á÷[\ÑvômƒO('x ÒÒ­;²é]:ì®Eˆ‘ ŠÃ9J{šË©2üþŠÝù=9¦œVÉa㆞}“Šò»\Ø›ÿNâ7=£Ôdù®z7Äæ ðí×5Äðž€ðú ¡+t•§:€P–ͳS¦¿ú%“£ŒærCs±‚˜è%v»ƒ|ÎìIÉò¯É޶E˜ •«”¾èÝ€ ä÷ŽPnÍÅï¾#èDÆÁ¯?#Ï#²ÈØ|óë7;DðTŸ~ÎxÙ½Ü3ùôþ]o¼®…QØMƒÝ;T™mÝõ‰W(2dVý×8²Ù{¼ëè®jʧOÈó–v«ÉÊ–Õ÷+Ê“9±u¨\±{{ÁìWŸÓ=ÿqô˜Ñȱ?÷Ä~I³é)ŸÜ^D4  º’lxIùÙŒg ÛKL%è–-¡ÙÒ®ÅQÉîõ’ÅüœxyÊêÕ=SN2Ì|ŠÎ›?~µÕƒ îjI»«q.bŠ¥$ÞY|ïqØãç/>4—‰¿Ñã?0Áð=ÿŽùgßóqÌÿ«Æà[Çì—Ÿ’ÉŽýeÀLòAIŸP¸¾ëÈÆc´ÛZÚUÍüï¿Bn.Ø]FÆOðû ÞitæiN²ƒ’æì-¶“8øí'¸Í9›;ª‡÷ ß²»XS<À”\rW*ǸÝQŒÐƳúÓs\,˜~r·:cóìQ–˜bF>3zPо½$è1~{…m#Õ£û„Ý›WWèjŒR]ÀƒÂL§RƒG+²i>èn†Xs"¶\ýþº^qm’囎Ñ'Ÿrô›GÔϾçò¯ÀD1åðWOˆ«íÆ1þüˆúÙ3Ú®döø€öü-»·KÔdL¹8Âèžíë ‹¿ÿŒöÛïÙ\4d³ÒÊOŸbä–õ5åÉdH¾“à[ºå™©`@ȬÙú08–¤tF¡D kÉ P)ùM(:—ZÚ-í²ADOÐ%ã Ú¯°>còøˆ~uF»ódyN¶˜%ðKJp-Ýù’Þ:²é$Ń>Ù¦gûýKÚºGJ-(ç¾i¸ÛfŽ7º«÷ÖgQ¦)1£ ó#AÝuB ÷¨òNç \ϯñ‡ñ¾ýÝ`]wÒÜ/Еfûý ¶ç5êþóÿäçsHÌŒˆ‹¼èzb6áè7_ë=—ÿã{šV¤îÇ_üùßz&Ÿ=ero„·áŠîµ«[´nzÚ€¥ïžà%Ù4OZ¨¶Ãî=Ùá)\J¡$åV¥èW"†ü Jì…kc›ÞÝ$Ø÷«b Ô ÉLcüþŠýÛå;˜çÑã‚дøÖcæŸgøºÆA‰+Qy‘ìjº.Uÿ&ŧú¦ÅÕÝ]PºÑ¤ÉnÓñê~éÂS„¸1˜'JÌ8Çí÷Da’:wàǾG˜UšÄws!Y¾ ÎBBpþÆ¥B—%z\â÷û(R”(sjâéW5z2Fªô!Ædg’ yˆ†lR`W+|àÚ…P:í ƒ#vfBܵ»QèIyÛZãÃm“èzܾE\SJDüàqBJBWc·uB¢µ ô‘ì`ŠßmÅ\—„|ÁâmÄLªd#è=n×ÜtÄt•º×¹!æ\¥³$ Unâ»b‡k[¿AñM™ ©KiÇw0“ÂV’>Rê×z¤¬èT2½—Y†ÔWwÄ(o6[©Ý˜BX”ѸÍ6™øËÁ:OÊáÜ&ñaèR"šÌÐÂÑ­¶i®†å¸]ƒS+vï:™ã›BYT™¥hÞëTvÇݹdU'R¨ãý®v¸9fRàw;ü@Q?Šiû÷ªüß uý8æÿ½Æœ‚:ô|Jì;ܾ¹9^æ9*ׄÁ¦,X{c­™èwªØmïü`·ª…N ¬ói DGnߥ¹YFlÓ§ðŽëÐqMo3ÄÞ"Œº]¬ƒKANå8¥v v_ȲkÓß‹"imv{ähB>¯m Œºql_wèQ…Ô1­y&¥ôÝV×]΃ü±†câÀ·hjè#"S©è#º2ø¶•c*ÛuD ±wÈ\§Z¶,nBI\Ó$zH”‰"'ShWt™eiÎq(€bÖÅXʈȬ@Wn_'ƒ€˜Æi&U¢‚è ,!*Ì(OçQEúÕ³˜¡¤§ßu„a퓚Á˜oj‚KB»PwD) ½ÃÌÆ7ö©B«„nÛ8äMØ;ñã©îÑ£*9£òhqHèhZøÉn2zžónùzÿ–ïÕžâĈ?B£“e›ß·C@ÿJÏçðÌ«ÔÚ%—¡ fRÅnÛÔ=ïÉ?ÿùÑ{Ô¨HQ÷ñVo–¬à,noQ“ ÝÓmwxt=r<ÂLÊ„wý¾NÏ=! ©‹!Rœ=J ×1Õ•¾èÉè&¾>ÚÁÚ13©{Þ$Ÿt„@¤ó¾ÿù~»ŠiÌFÿý§t/ž±yí8ú¿¾ÂžOÓÏ8þÕ}Öÿô'vçKää„ÑQ‰ßì1óCp=ÙÁ„|šl@–ÍËg\þþ¢̯• Ÿ2ÿüt®¾~I×X„ˆ¨¼DÆHPPδi'1™š– øT¹ PT5£8¨ð}ßíh—[‚2)¾R*¤xÛÑï&_~Åѯм|Æþu‡9œ¡òŒ|’c¯Î¹úöŒâþ#¦&˜INýê' ÓÏîÑ>ûŽÍËŽêþ„íw?àTŽÉ2pnðñ\M5Á¶ôWk¬‡b2&:;´. f<ºíþ¼cŽ~3Õº-ýÚ¢g¤N6ÇHñ£ã…L¢Ìn³EåSTh®öTŽ©Ÿ=C="×}ï€pù’Í•âÞúœØu„vËîù!*ú­ãà?~N÷æ–¯ktvç†4‘Ýãu;c f©”(I¸}Möà Ç¿}B¬÷7¼,! ß4¸.¢rƒÌn»¦ß´‰³—Ò¢’wªÑýëÖ:DèqÍÀ=0zú Y¶ãüwÏÑ£¡oˆl8ú?~Mž9®þøõÕžòä“§Çøå9Û×ȼJÖ~-ÿ§Ï©ÿôŧŸã.Ÿ³Ûhª™"Æëìr´·£»\§„È!mÊ5æèš ¢<àèïŸàW;¶Ïž±»ØP=¤œe4oÎèZ2þ´…Ïûto¾Ý½Få#T)qû ݪ!:‡š0ºwˆ]žÑmv¾ƒÃÿô%öô±:A¹3öuÅÑ—Çì__!èé·é—ÐÊÑœ/S‡ºœ0zt€ï aóšÍyäð7÷Øý–hýjOq|ïÆa*¿7£?{Íî£z0'ôû¤BJZ N’Íf ÕÿÀzþNÀÉ{.7gq«ˆÎ!t6Øÿº[nópœx?På¾ÛÝOôW32¬þø-›ÓzèZÄÿ Ïó{ϧ·m˜ýÝo(ÌŽ³ÿö ´DÏN8þŸ#wgœþ?ßàd‰RÿŒç¹±L¿üœéÃ1¾7ߣ}{F¿äG‡ó‚h®þøŒ ròÌ G²IžDšA`7—ìÞžÔ„Ù§ÑÑ¡g#t)°µÅn{TURްW§ìßÔd‡àÜ ]‰0»]ãö3[à¶잟#òìŽ̼Âï\ãPU†”Ѝ"ô`{â•)”@Eô©õ ²”Ô—LÑÓ®Í[÷Ž›„™©!áP¦¸j•нХI(qUÄ ¤Ž "&Úu4hòôÄwCLüÖ]ZßD’ !YJ·Ã'‡†ÐuD•a Mèzü³ªË™i|k‡ôA9$,&aš)$H­“uÐ@Á¸õàU#ñu›¼@~÷ḉäÀýnúÄ[þ©ã¯%âÛC{´‰ï§ÊœØ÷„(Rë*Ä>xZ†ˆ*²t-îF¡ß §?·Q‰G.B«$¤¼Fb®9ÝÖeR1ëZ¥ëR0IB½ÂDL× ×3º0pÉ zT&ô`ß$ÂÐÆR%ħm B$‘õ7FÿÁ“xñ]Ê$´¢i‰*qÚ¢H4£x#nġׂë›ñÈä."³ )S¾ TagJä”==è· ñ¯¯¯¥—HhU¼N‰\[K%ÍC¡R›¹uDoÚæ2Ói]’™gĶÇ7}Bý°¶i…o:ÌlB¨µ5™VH­’/†Áî,m´aX $ÑÚ¡U,o¬ÎB—pUi.îmÒà¸[+Va²Ä×nS¶ÌLÊ9¸.^bL\ãàC ø»´ð´vú®Oyá–÷y  JB›,eeQ Œ¾éúù¶%¸8pIeryjR«´ÀÜZ1ä D$Ù¤Líõ¡“ç;7Ôf×`ø‚xG wí¦¹î(‚0y²zímBý\H@KI0Øwˆ&ƒø­Eªˆ(æL—¬þÇ·D¦G) º¯-ADBÛS>|B5͉Ú`²–ý«ùñ ôkv/–Œ¿ü„b"‰H\Ý<‰#æíÙ9vÂXö Gÿ9ý«ôVáw¢˜P•t§´ë–ñÓOÉÊ@{z•N¦ô›ÀâïžÒ½~MoKLiñ­O…©wˆbBVIºó ¢,Éæ‰òpw·wãêo¬ï°{ºeCvx˜â?ïî{@qXмºÂ뜼p¬ÿø  ˜²düdÂþ»·îѾyƒÉÑgò‹/ÐqÉêeËÑÿù´[úmOèÁLrÌD°ûî-¢âЩŒñV`7ôºÔH•Òy¯*n(x¹Áïö4{ôx”辡=ß2þÅ#º×o1÷cÏŸ±½pd*`CÆøÑ a¿¢_ïS¡f2#ŸeH#ÐãŠýóç,¿=Gæ& ´„DÈœü`ànGÔöbÌ'ä‹‚öü Y.˜uýw?Ь‹_=¦=½ š£“œÍŸžÓ59¿}€½|Åêù–¬Px=âð?|ÜŸqùoQ3„ë0Ó²yÁþùs6//™þú׌f‹ÿö QjähÆôñCh–ìÎ.ˆ1CD‹·P‘-JB³M€š‰{MF¶˜%jÏDöuú'£¹ï Èw»-1E†ërh=ß Êâ¯à@߯˜iÉö»ïY=[¡r}'Ô+þËŸÏquÏô_0{4Áõ>…ªÅäªÖ­ZÌd„É{.÷m#nø÷ý™Ïo,Ó/>K´ I0j{ìÖ‚6`kºË%¶ñ ¡oAeÌ¿úe<Íeƒß/éjAuÿ<ºÈq» ζ„:’ cC³l’XXiòé8Qg¯)¤˜Dé´5Ñßî@¥1¸ÍnˆòÖwèH2•6‚à¿áàÒ 5‰$ÂÁ­ÑUT©Rj‘íïØ² !¼#"Ä(ȦL.è·{|OB“[2¡st!è.WD9ì°½Å-&!“ …Œ2qc³H¿é†ÀA/&ˆ8«~ß•$›¤¨în³C˜ )>̨ 4Á'õ§0ºP‰Ëåü@/ñ„Aý£@DI6Ëqûß ¤¹c)sÍ%‰Ã{·z7‘Hª zï¢ô7ÊÞ•õUxwS2›DŠq¸9‡[GÐw¸6  •žûèñ.¹{Äà‰È¤y ‘Øj@^îÛÝë—8Y1…éT#ŠiEŒ‰ãvÍK¼'ݶC˜ÊµwuDVI@â÷5Î:bÔ˜\á¬ÅL&d…ÂîjlgÓN\¤¸XBŠ;¿Î¢ 6’Í*|½O>£=2ø¦ÃÕ©#!D¢KñÝfV`¯6Èj”¸áEO_¼Û:”I΀RÆ!†tžÝPi„Ö„¾Cæ&WôÛ>DC7ÀG¤2‹ ·ÛaûðîáÇ×Ç×Ç×ÿ¼WDeÃsc¥å >¢”Iº R&XP˜QÌvÝ@&Q:ñ(‹(£’–ƒÛ÷¨q…ßÖ„˜|•C˜é:lÈ#bgñuC=%{»mƒÐ9fdpuM·ªSçJ&ú›$$T[¨A "™t8QAèñ^ ³ä‘|N0$ÁÞ Ïº¾B« µˆ@ªTèÅ„K%a˜‹…„Þáš\t!ýMhòY…ß×PTÐ×x ˆ€·]$šïzÐ¥5¾³˜q‰4¡3ÜfC·O©‡1D¤‘Ú BÈÁ=%­GI|Û³*O—¢ÎÈÆ%±ëqÅL«Äqï"f\¤D¸Ö¥¸r¥Éƒ‹É6Yã*$="D$ødwªu ]nÛ9…2)ÖöÀ5\ ôY~í¨4 û×NüKÁÝR·c°~Y†%1áÏZƽÇ{~_Š ´ÂmwôuŸj!o;3ÿ¢†O$Ÿ¸åƒkÉMx ynÒº*£¥[ïðAÜÑXÊ¡;ü|þlŒ)‡Ï—’Øu¸] R'Ý’ø®:Å”&ŸOÑâš”Îì{0UNð)4E* §ora(/têÔ“èKI§‡zE$*f¼¥GÝZ1†dS(Ä­ G¾8 ˜ÏPY _®°­lQ6ˆÙ1ヌæõ9"¡òœà<ù$c÷â%Ö%ÊÃÍnH¥¦[Ž€w‰¦­ÃÖ–ù¯¾`r”ÒŒ–5®®‘“Õa…]îÕb‹o,ª,ñõŽüð„êá˜îìœÍ7o³ûLel¿[2ùü˜Ýwo0‡‡„효 |»G˜1Ñ®év–Ñý@K¾Ä‹Œl¾`òhDvF»ä‡˜iŽ]®ðNýŽfµ¥Xœ ³ bGsyŽë ÕÉR¶ø6¦ÂÎ{d5%_Œ’HâzƒèªÒ¨,ÝÌ¡÷øÎߺv„÷vc×ñ1¢ ƒ.’-`ð׸;j`‘”ÍWW„`Påi®UÌI”ˆ®0ãÄy“¦Jí¿ÒÓ]mùÿ³÷ŸK’dÙ•.ø¢Ü¨Ó`‘¬( Ý}gpßrúÑnËt7€ªÊ¬dÁÙqe‡Í£æ$Â#+ @70÷†‰”dI¦º»55Õ}Ö^û[²˜N4fµ¢ßšx“}¿]³Ç^:‹ÇãÃè‹Ï™>žÐ­v¸>Ä‹}¸YÛA¦]&xçhß]bê¨vg§„í9› ÃÑþ5ìÎYþéNdoé›žìø˜4Wèé˜b^²ùó·4­æð_ lO° õ«3úVÄaPÏ•k Î8¼ï‘ÅŒòhFèÖ¸NNKìz³àŒ$fµ&{ò„ƒ_âšAÀ¬;Ìví`üìÕŸ¿#9}Æè(a÷æ’îrƒm Éá £ÇGhe‡ïVÏúÛ—Ô›¸ö‚àþ;?Ï]þyüG~æo=þ?Òšÿ¥kø´æç5¬Ì÷ʶ´;ƒovÑ|2A¥¿ÛÑ® *…í/i…³5Œ¿þ é·x9AÚ+vÛ„ùs6ß<Çô•VŒ¾x€Nzê·W˜­%¸@ùô1Ò­Xüé-!‘èêˆé“œÅ·¯™üæWȾÁIsö†fÙàÛžê‹/˜~6g÷ÓK¼KØÆ1~ö»º`ñÃ9Óß|l–ød†dÃöMOq:Ã5|3`?C2 úv·±8€§&3²i9+ÄakGp=ýbÙ#;#„Ã[…ž¤ôçW4oϰªbþë'ôg ÒÃ’í_^‘=~±ÌW-éÁˆP¯q!§<±{þ’~'bÈZÓ"Ò2q¸ºAèU&ØzCw¾ŽvXµÇØ 1IF%X‹÷aà2;P ¾­±VîÑiÜpI”–ضèÇ:LLÊkøxxèöÚ¶l xxB¢,íb‡³!F)ꌬÊð½¾á†ß-ÉdB:I1Û íùQŒ"¾neÈJº‹^HÄ0í»†@¡Æ:A>™mé·œUèшâ Á,·Ø~°ž TF™ä•õ´¸9í¼OH« ˆ“›×´‘ÁCÆ%î„õ¤Š-}¥°Û³ŠÕáï·'ƒvz%ºH@ \Ý`6ý0á†BÚ­%Ï— Ã_ŠttLS²ñs»ö¤ ‡m BEÅßuîZ5ø›êf„VˆèöÁŒ';>¤˜çtë1WñüxK¿nÑ“::MO@¡tJ2+ í†vc)Ÿ"MMýúGL¤tÆÅ¨qГJzêWgø¬ :=Dx–îr‰uƒÁ_ñœ6úâ½ï "'åx×ÅÓ³o•IyÝ]qmCrpHu\EÆxßc¶™*Bˆ Óúí%úàí{ú:FÁú¾Ç{A:‘LЍ‚ØŽúlM@p7»þÀ8~·ógÛÛÿ»ç_¸†Okþ´æÿekØÞ3zòeûرÂÇŽS™“N BÓa6 Þ÷t›™(°­%=š!mGHr„­é:IyÓ-°Æ#³’òx†”†n¹Á´¼ =#…£y·ÂO:=¤ 6¯.ÉžÂvƒ »Ý`½D¸5;¤gt‹!c0Žñ» õÕŽòÑ ¢Ýâ“RÔ4ç=é('3̨ÉÅm£-cï… ±3)ˆÊ™HÒi)ƒ5O(‰YlIF6Ncfƒø¾Ã,·ÑG:$Æšº%?=$4;ÚeƒHÙdUà®Ã¬wR âP€ë<ùñ·[c:Hò8|œ%¨œjž±}ùÒŠÛb¨Ûvˆ4'É%HÎ4fÿn°]¼W@‘ŸL¾£[uƒpâ ÉHó [w$“”~±ÂšHd ®5˜®‹ÙB dŠÎÞ6Ø6 \îHþŠê£eï%â°R¸wç7<ÿïìù†Nµó¨QI2J‡üîÞS0ìû —I-‹o ’;Š@ä' uÏ6pv挔^AqzHZ¨Œøˆ!eÑÀ²–©¢»¼¢YÔQÅ!c þ ƒ³’êÁ!I&†N¶¸íßéèWmTEœmó¦GãµTŠÎd¼F»KJuz€[oP“”öÍ}pˆ ‘PÛXôxD’Ç÷èlBR%×6¡lT›e:$V[\k† Àë:L‚Ф³I ÍÅj4ƒnƒ 9ÕäÖÑÿ´1ŽQÔ,¿{õ:N[X79Ä4‡÷ÒfnZÚ‚,¶‹’ÿè‹gã@{i!4´;ÇèÉÜz*+™Jd¦hÞžÓ/;t5F 2KP¢cóü ž!<*ÏÐZÆTÃ$AOrüå·¬¾ yIqpLu:¢;¿¤k 8“”2FQÛaÝŶ‘¨,Ð-ÒùI!h^¿ÅKozÔdN6ÍpÍW÷¨Ñ„l)„ØžQé> {X½ŠÅið!N™¾7‰§¡%"jãpcï@ƛյ¿jïiÓžþòÛïíòz˜îÚÌ?„‰D¯œ@*I¢Á¥R×l¼±Ö˜ÕnH`?Lš‹áf»#=:eòì`Ll£âzƒÊíiϤGäÇ%ÛïŸÓ,[’Ûø&ƒojBPƒX%y=vÛ ª)ÙÁ˜`bÚ«Jä0èèήPã9éHãm@h]_a[Añð˜Ð­é.·ˆ"Ãn²Ã„ÝÅB5+PeÒܦÆ:O:? :™F¡K@óî‚ 2„°˜å1šd!Ú`”¥ë&ÏNh~úãõµré[KõùST¨Ù¾¸$?=%›—´goéwP=z€oW˜]Lfì¯.h®Z²£9"t¸²ãi´‡ëéX±}õg3°X$I´'B ½‘)ét­?n"WW·È´DÈר»! ÁHÉg·<з‹Û÷ªÓpSàF¸€pÜRßKæ»ýÏ÷½Ò÷Y8~æx!÷V\EZà…pÓQV©`óÓkš•Aê{¾xÞ#ÒŠé—‘! :cn”á[ïGH…k–´ùÔ°Ù2I‰ºöè»Í‚åw¯ÙŒÙWÐÊ`;-LÚ7ç]ÅÃZ·tWK¬ñ¸ÎS}ö€bžÑ-Lg°›5裧§ÈîŠÝÛ éÑf¹!?a×ÈJú³×PPÎ$õÛ]ÄH*¡¥»ÚDÔ#ß ªgp»Kú­†i[ðûÚO‚HȦ¤¹£>¿B¤c„Ûa]J>-"Ò+XšâtŽp;V?¼Á˜èí Á#uŠ’r SDOîõ†HªëÖ„w1Ú÷–òÙò̰}Y#uO×8²É ámTp dGc0 íb‹¿¬ˆ´‰2GËŽõOï@xÛÇ(ñTÑ­w‘¾P¦¨¬À÷;šËè„âè”â §?Ðs‡#t:ÄSYméV;dR!DC¿q$ã :šË%èŒÐ’ÙÅ$Åv5®µÈ´ˆ©QÖ þ A:«2\sDû•Â5 ý²ž7Oï!›U¨a óš©¡ké–õ{Ñ¢©®knÐkwRˆâ7Vˆdˆ:w{8Ãðɾ­&TŒŒ5»!~uø¼Loâ®/‘øÖ3:Ä‹›!¶ýj(º…@j°µ!;=D)ÃöÅ9Öt’ TŠVŽúr‰žÌI ¸Hz Ñãä­ŠD‘Äèí$àë-ͪ#?~À踈©ˆµþ;!é× ÄøÑ¢½è(#}?ıJÌr7\÷‚¢_-ãC¦_ã×Kê7Wôm‡“g'øÕ5ŸvúÞãwB1at\Òž­ãFQ¦äG$ ëç¨jý–®6?“Âtêë—T ÿ[Žÿ¥•Ì=8¤_rü¤5ÿK×ðiÍÿŽkŽÝ·tTâÛcfÞ x9Å´Àl®h6–t4aôpJ0¶_ã\Jš)œ‡üÁív\þéjv€ö–ìôá[ÚËg¢·S è6;D–“•9øh¯ë·=ã_FX_ÒlÙH`Û":Ô~ÍÁ t™Ð]\‘>~„v;êKG6+%o_mÉX@Ûèç*2Ôd’\äë뼌ɮÆ‚$›˜Õg÷]á›ÀÈçïA£‹l‹3 5ôÛ:¦G»¨ !%?(Òc׺¦';:‰Ï½mƒ³&v«Rö4kD6"­$®ó¨$`:ÈÆ9íù9Ž€rpžl>G+© ùé Ù(¡yýšvëÉ‘t8k*Á5 ¦µ$£1’š~ÈŽg¤#Ew±A$åIÆê›ïñéEéJª[нG¨œ´Ê¯}åÑ…á"UI$iðæ}ãºHUÈDߩ܇‚ ¹ÞÒÙË›dHñžšü^Ñ}§8¿'ÊûÚ›ûÞ÷3òÌŵÚ´TC2óÍ÷Ge±€®7æ7w§€v˜~þÌMA|gprÿµU¸zM»è)!nß·5~½`õÃ|>cöÅ´°p¡v»£[ìI†J‡”êÁc#…Çõ=®3¸ÊÇÇ”ÇÝù’vÕoéÁœ¬ ì^œ#ÒŠà<å“ÜbEoeòô»¸ « ÎTVQœN Í–¾”§Hoè·5ÎJt™¡Ó|WÃ=ÈF¨Ä 1Ü£èMö)@¦P¿¹Àš=­@#¤8-1$죞 cH[Ç$BÓ£'dóŒö|ïzdV’ÎǵæA&Ð_­ùÝÁ/¡5¾ÝÒ_®aˆ I†Lv³ÁìÅéùIIóêŒæ|…ž’æ’nÓÏèß^ Ê I)1› vg)“ô+Ìz#•…'ˆŒêá ;àAã3ÇÖÛHezLo@(t1¦<ÌØ¾x…uqžJWBFT ïzähF6ÁÁK„mØŸcûŒé—pë Ú•'™ÄÄݽ µßXyëb¶kol©B\ÕBÜã ï%élzM—ø8ï?"ü¤ nù=î°ÎÅÝ¢ùN=ð¾}ËÏ>v¼j%äšGê[‡ÞŠA ’d–üˆ'koáðwwÓoBÖ¢ð5 hÕ=1ä·×,â/Øë° R ƒ…t‚3ø«ûš~¹•Æó"þ¯_Ŭ<Ó_bzE>ìΪ'§H߃tÔ¯ñû2K1›šîr…,¦”G¸!Ø/˜³îIæèÌÓ]­0»¸¡JPÊО­ãwRˆµø¯ÿ𻪜”¦[ã­B¨„ìhw¦^“MsšWoÙ]¬@ëX`H5XäµÜ›)R$£l(4:úÕvHIŠª¦sï}DÓ}ö”é“ ÍËE¼|=g³¥Cœ‚ñKﺖöÝ‚îrù4춨}‚Ÿ€~Ù1þÍ3Ù°üá‡@…iIVJêó ‚LÑY]«Æà‡–Rñøó¯Ž1‹+Ö߿ŇœüxÁ"¤Š¤…Íç¡_,i®v¤c\½Âµ ‹4«>úÁ“q[j׳âNû&|€½¹ž2LÖºº¥_µ\O¨ ø;©=ýj‡ÌG¨\»#åÍ—ÅG.².Ò»yòA"u†HqWÓïúøE Öö8£˜ÿÝSänÉæ] ÊgI3Oýz(Jòy ®£»j@J\[GÕ=Hd’áÍ–äà”¬²lZ£gò£ áìåR…ݶôëg¢º5T‡þê˜ÍŸ¾a»„ƒßI"zºµ‰6¦Å®ëøÐJ=ÝÅ+ræ¿}Fª-ír‹Ýuì^_=}ÊìñˆÕ7Ï#FQ L×i˜ ÙhBZ voÏ)ž~†6?\¡§òI…ŠÐoØ]‘LŽ)ç9Íù9½ ¿`êù“ýIý´æÿkvF0ûÕgˆ¦FM'˜Å[V/6$y†i·èù)ó/¨¿ÿ‰¦'(ÛR/âz>?bþ»Gôç¯X>ß2ýúi ÝÕ?ÄR—Ç›çÏÙ^ö¨D ’”lzˆÊ ¾çš—d³IîXýðŠfmÑY‚RCÔ\¨$2‡ý`û*'?¨0Û%ˆßu¤'©Žrv/Þà¬C&ET•÷IxÒcv "-ã û¾ˆ‚з1ã@$¨4CHC¿‰Á^£¯žQe¬¿{A}¹Fæ¤Y ÛÊ“ý»jz@’{ú͆úâ)Õq $3M‡«[¬³¨bJ9œ#;á¶[L'bºv·Ã®kŒ‰"U6; <Ô\ýo02G«”|2B&ÛQßiN:Ÿ¤Ð¯{ÒJ°øæ{Œqü_>Ç¿esfÈf“(²X“(x]Gœé£Â/î+ßS…ñ*MßS†ï·pÄϹDªp3Ð)îW ¯I^÷ Þ®úúøa†*s4̺Æì,àQU´&áì 1—[5Æðœï…»|ð7n[¬Ä{ƒ·ëxoé7=ºÊo%5~lÍ·!ýí5®Cªb·Ž~wDŒa·uCj5*Oé— ’ƒSf_²ùö/4}ÉäD³üaÁüï¿FÙo–|Cþùçä…¡9[Óœ­HN2yTÑ-ZÒqF÷î]-}ñ˜43ì^_`k z$À_£Üe: 9Šáç Ø³­o"eÈ“$àúÈÌîZ…Ø·2ÓÙ$¶k†A ”ˆøšºE¦Y pvךìp„”Ûdª°ë ®=#]´û¨¼ˆ,tçbC+lÓ‘ }K»hã¹£ÃÔžl^a¯–©PU£Ï;ÐÓºÊñ» ÞId&1« È4NfÛšör2ù(¢ðÓëÓëÓëßïBìšÉà°.zÓqAè¼S$£„îjýÃiôÌ:cÉ&SÒIF{vN»éÉHJ /ÛÓ^®‘YE2.c‹1HË8Ìf‡kBP誊÷J?(°J!ØM}M`7/ñ‘çB§dó KµÂvUUàûhË»í:ñÚ]{Eö¡þ;vc^þ[,ƒñ÷$ ©®ï°Û”D¥ *Ë‘Y‚¯·ô»Žd2Šj¸‹C•§q¾iÓF×H¢‡`1…Ûnp.Ä ¡HÆ#|·‹hºq…Ê¢Hä»>v=eF1¯°ë A¥ ®6ñVcÜyO·ÃZ>öžÞ;^)B×Ñ-v¤'Ho¯tþEkbÀÿúëY¬½•o1ëíPëÄ D3„©áz¼¨^ç E6› ˆÉ ݲEfÙ|„ §=Û ’™g/I+E·Xâ]ü -ä èÙ…r5ÔZüþáw+¡«Éè³Cè6ØFP=}ˆ’=ÝÚ’Nñ›w\}óQ”(¥"#›M²£[¬¢7dßK“±SÙ˜tV^{Ã=ÝrßÔ5’eh5ˆ!ÄÃô7ÉNâ-ÜúßÊÏ?gúhBóv9³áŽz«rE¿¼Â¶#”ç*¾älC¿\áƒ6ä’~»£üêUåYýpAþà1ù$°øÇïñ^ã\ORMÉÆ#À‘?:D˜†í«s¼ñq8nTÜL@û–~U#‹1ùa…*Ô°!xŠwñ7×&ý¡èÛ5ô»~0¹ß´Lð ýªEM¦(98Dî>}‹Ý57è¼ë“De27Q³Y`¶&bú?|ñ”JI²•kú펠­Õ„lVú¸ñ‰ÀЯփ ß¼D¦%ªÒØÝ†îrƒîȼ³8§9úû¯Ñ®¥ÝY¤–1lo)‘2ÏÀ·tç—ô6áà_‘§OœÄmÞ-ðF“=9DõK.ÿø"Îdšà !$¤Ó’úìjr@¦=¶×¤G#Üò‚ÝÒR=˜b// ɘɗGto^±}gÈŽɦ f±$$%iUÐ/ÎðäL¾zŒ´+–~I½î‡D¤AýÙ_ÇáoPé>Fø˜êöo~ü=Jã½´…ŸQ&îøÿHkþ—®áÓšÿýÖBdökõ7¬Ùã¢<9aúÙ3„ˆ¨*2§ÑY†©7oÀ&èQ‚Ù5TO?CëŽÅŸ_зŽêä]¦¨¼@³åâO?’ÌRL*\Ó’MÈæÝåšõO¯è6 ª,)HÊ‚tœEÁdXüñ{š-(ðÞy Ãó,8ú»§Ø·¯Ù¾[áŒ";œ BK2µôËA”ä³W×·ì71ϵ\£T=•æçjúíšöj‡wU‡$Y¾Þ]ÕLJ³#x“_³DO¿Úa}ˆ!*jD>•l_¿Æ…„|:B:Az4%t5¶×äæ$© ~}†è)¤ÿð€íŸ§s²QÀìd>!%øÞ „&åñ|z¤åòŸ¾§i:XÎÞŠl|0ªÙë¡¿ÞàÄîµ¼ëñ½s=‡Ž I'ãk¯ñµr*cá‹¶©É¦ÅM<·¸hsOô÷½Á(òÞÛL<Ý¢Z ^ëŠtœîG›†tÃp£øÞScñaMr÷ø}.îW”`-Í»sêËŽâáЉF$âÆšñ‹ÖÌ5 †}ö…Vø¶¥_Ôù% ‡f-ÁR Ì®G¦Ù4ÅÔ[úUmÂÁÇù4rŽþð5Ên¨Ï×ìÎרjÆÁïÙ°úöèŠlV% ë^bUŠtTAï@”Ÿb/ÎY÷‘gû •0‰0õ¸PUå„Þ`Ö5zR¢Ý61èc•yo)¸Ù5¸ë/Þ[¯[¾ÜvD¢c”iÓ Êð}s!YdH)q]óÍÞÒ ±Û™W1\£nbTka!òû†øUÕNnn$j2B8‹ÙÔˆtˆ™F¡«4+#öÍw¡"kQ&ûße†(Iqí[zˆ"Õ·1rwŸ7?Ë]•’Л(Ú¾d¸ùýRÉ8I|Ë÷w×Caã¾ëc öþ\¯ß !21'˜ÊJÇ8T­aP¦}Û#tŠ*SÜnyÓRÞ$%ÞFàíÿFæ‚xîoí€#2v|7ÄpŠ!±ïq&FÎJáqMI7eˆˆ¼Ëf³Ã`}YUè\c×õ®՞ر‹1³2C?®3ñÚ*zèuÕ£&v&T’๎XQï}ŒL/Jt-EMè-zTà›‘à ®ý¹AÂO¯O¯O¯¿Ý­¢]«nøHæÓG\ÓqÆE¤ ¸Ì3B×ÅXè<άxÿ¿o:ö e¡•(âQûgâ` ð>jÇÖñÑ Š¨¾&‚ìQ¬ªL‡¢î–äÀµ-B©ëøâ˜¾fqmZ"d ¦'HEè 2KcDqÛÇ÷•¨p²v>vµŽÿÿcóBĸë@ÜøËý3y/F¥%cŒ²Œ…¦kûA ŒÈÎàª,"ÍAÈzÒôñ=JpEÇlô® k;¬Eªh²®‘E>D”^ð°GߺAtñóJ³¨úë¡K\|ú¨rû6"÷qÞ±˜¼çìyuûZà~FÛÝÇóþyµÂ¬Ed9ºÈâç.C¼î½Hï"¼çÙ‰Àú.úúº±Ø]‹k-j\"EÀ›/î™uúël÷ŸyOûNÝþy?¡%fÓ Úۿ寬™ˆù½mµÞÏáB¼&Å-KV7¸¥¾ y=u] IÊsD"0‹¢ÈÑ©Àmüàý¹Uo ‚—$£8kàM@bøjúº‹óY2DyÿÃïW(5IÆX‰.GŒ??$ô5›”Ož¢XpñϯHªIüÒ hÒù ©oÓ $ýjs9ùA9àÍn›Þ¹ã’Zb¶+úuGðŽôè“'‹ÿþ¼ÌnM ËÈ*ÆGúÉ3~ó€Ðuר¶àBHÌnCýz…ÏÉ&š~µÄìzT9E*ƒÝÕ™£Šè订T/•¤ßìÈ=¤+v¯Îé[ƒÎs²é”d<"›$¸º£ß¶ØvƒÝºˆ·›d±¨JRÒI$‡]•Ð-Tž£ ùú=ô­]°qc‡êú;0õ[Ʀ…AÞ2âT ßlè‚Tá Qy…*íù[š«žÉ×_2ÿÍ)Í?pþ? qôwOñ˦¬çl"YüóXW1þlŽY^Ñ/ëØ>2ãMÝ£Š$ª!t¼ÉØÝ:¾ÿ`±&’N8þû¯Ð¡ÁÙØ-°µÁu‘)ìjÙÒãôš· éQEwqª¢8žLOC{qm<ùɺ,°ËsvWKÒé1YY ”¡9»Ä»„ê³ÓˆiÚtëè+äÁ1ÇxFÿú³Û²~sÅÁÿë·¨íçÿü–ÑoÍäAÁÕÿü–vµ#;yJ1ìž/ÉŽF4— ªgO°gçè£SBsÁæÝzx(~R ?©±ŸÖü¯^CpŒ˜~vÄî‡轺;opïï¾Ã<¸ÈÈŸýþ7LXóœ *Æ_=į߱y±côìÕ?ÿ™¦WÐ{Æ_?ÿ†é¾: ~¹ÂvÛ!ñ­‹©·.áäÿý5ý‹Y¾h9ü?~EؽcýÎSe8+ɦ’RGÞðÐ¥LF ÿ×óG~u€ë-"ÍpëKÖyƒi –œÙWØ}ÿ}tŒìkÒ£SÆO§¬þñ4nÌÑ×'lŸŸL¾Ã7;BÈÐeŽ·;¼×Ï©®7¸ÞŒ¦è,'ø-»·KòÓSÂníf»¥üú+¦§›Ï‘eÙØï.±–!*:¬$™Ïѹ%ð»5õ»zþÉgÛ.HŽÀô$ãœt’Ñœ­1½Ã\^"Š9IÞÓ¼k)>;¥z0æŠË|š= É ®©ñnT3=™‘Žs|gb ›—(-P¹äòþ™zI¢Ðã)Ù4Åûg'·¬×77ɾ×Ó©áÃ^_¶]V_c·j<#”3„ÖŒ2¤ð·ˆ³ï©½wÔØðŸ›¶v n‚X±P4ÛÎ ²ézRä2–h(Êác÷A!>rç‚@&I,8¬þ»@Š.%µÀ»ÈÔŽ‘ʱϩF"ø¨@‹ÈVyŠk»¨¸u‘7&Þ¥¼ÁéyP¹¾&)¡HÇxƒmMŒW€Nd‚®²Èõ¶[÷CwÓÂ~6*ÄNªp¤CQ¤F €Û÷Ãà 7÷ãÛ…áçï>EÙÅß-%"ø_"FDZT!uBð~جÅ4f]¦`Ì ÂöcÅm’Å­ç´Pß´1QÞN ¶x ªÌ¢å"iFY Á {“BÃÏ4hþUÇßœG!Àu&zÎe¤x]‹†ÛhïOeïp]7Ô0âºÎó]瑬c?d“,ÃM=‡¸#(Š!èÇ …J4¡€ œGOG‘ú²ë"Mªáøp­Zû¶Å¹€ÊR„óÈ,®åÛ]3Âo’E&qþý¯a»BL§¸õ;®¾9Ge B+Òꀤ ôW é|†îÚß#†¸E³^â\F~PÅ/êmï­ŠX <ä¨L¶1¡ÆíäõnOA¿i™ýç_#ês®¾¿B&ê:Å'8‹È§þþsthc[hH_r­Á;Û­†]‰@È •gqŠ2¤tôë5ÍeÍôï¾&qŒ˜’ÈËç5ù$¡Ý~÷%ÝëôMN“ÎQ‰Dešd”bÛ[;’Rß쮆 9)Îÿ¯?£æ™?㌿#ßÜÙ^+>7k°Ml¨4E—êÖ@È]µçæxÌ4n»¤_îâ àá€^¡G%v·ÆY"žÄ@þ‘PÌ=˜°ýñ'H ìºaòû¯É”Ž<#äT‡Õ·Wdǃ¡¿¥9ß1ûíSv?~“G¨þŠÕ«%ùá1åÃC¤³ñ!Sè$vû­‰‘žõ†~ÛÓ/7¤“gŽú]KvXàê ˆŠÉ¬¿ù–z½¥|ô˜É“9*SxëhÏ/èΖ„tÊäË9ÍóçtMÊäËÇ$E`ùÍs¶g+ÊG™~~ŠJÍóì. óÿôšMô4_zæø‚ò0åâ¿ý—Œ9üígˆ`0;ƒ.4¶¶è<м~‡é*ÓôÛÓ(Á;­·ïQ܇>ªÒý;ÿQ¥‘lüÜñÿ‘Öü/]ç5ÿû¬Y”R„2~zLóæ9míoTè÷§ü½C¤ã'ÈÊèë\gìÞ6è²B• "Í› ¶—-Ó_¨¬icz M}þ€âtDûvq š+v—–âdŒ¹¸Â£IË„n¹ÂA1ùês²JP_5„~² ;˜â6—tËŽôð´T‘€¤â ·­;¼×tožÓ™Œ£ÿô9f±%˜†ÝËÉaô rò“1ÅшÝóŸXþ¸@g)*“Îæï{ç48O:áVWìζQtp' -rÌfƒGà­ <="I,íÕ6vauBùô)yÕ³}µ#åô—[’Ã$<ºÈHF ¶1Xðõšîr…È&¨ÔÑ-:¦¿ýº»WkdYâÛ-ù£¾üö‚òég¨P³üö9>+Hó œ Íб{¬ t•aV—ÔW  FG~}ÀâÿûOt>%˜Àì·_Ögl.êXƒ'Iôd'Eäúº}'] ¤‹^h#P£1®[akOR¥CgõöÜÐ]0X²“ünÇÝÇ VRÅ»½pv¯øZí¡ÞŠ›”b­®cÏÄ·[b¶–ìè0ÓÞGµ[Öw¸«øîkŒ[¾ê;>ë÷¿£ô±ã‡aN³í¯7$ÞÅs¨suwñy$b†ëi^-Õ”t¹{¡+t;ºË(ÍMBæ%RG¾ºÐ ßlé®6XÓ£f§þêÝ7ßÓµbøŽõ”Ÿ?Ý%»«†é_P>šàv5¶±$e†]¯hΗ úÝkR*$‘$q“\7 ÔZü×ÿó+ðï=Þ ª‡‡È¾Çg ·«iW RG¢†ÒRYlëânV¼÷- $…Êä­Ï*|PD„Á¿K°ØÎ^{Èoî{eXE>óñ aÚu ab”§·tN~8Fz=´2îÞlÝ`wý°SQ7; !UÀGUÔÆ\2³H+´ì¨¯Tª HòÙ·]cmDÙì}Yz\‘N ìjéé´Š¾âë‚5†Š´—kDQ’•É`ùCå{¸B¤FзmbÔ4 ³Œd”‘÷Û¥û€–×¹[¤<1D°ßqðÑ¥’àí5aCW9RyÚ‹5A¥$™Â¶-BG%6™‘Öa{ƒï;d5#-<íå™fC¤¬Ãõl^ѯX+xœ è"G%1±PÊèyÒeŽÄaw=ÎÚ!èePÿ•F ·ljjDJ>/hÏ/1& ö'M6¯Ðã »Þ !0„"åØÕ/Òq¦¥]7S£« ¥ÝÕ– “8ñî{ìfGßòã’~¦ d‡st¶î™Æ7U*Ìv‡÷1^4x‹í{@¡ô'ô§×§×¿ÿ9R.¼ è<ÁµMlãŠpg£*Ä>e5€H™Œ"×]¦ ¾ièkB£’¨2Û¶‹*­ÖCgÕãúŽà5Ùl„*~gñ¦ÇõqÊ_%r|(­ñÞD”1\IC¿é¢e#Üj I‚tºøƒTÛ´¸]ë;È ²q]m‡û‡F&Äg^/Ig%é(¥½¼¤]uÃó8"Ö¤²‚ÒžByúý`…ØwÉ\ì"Z‡Çá­@§ÉpŸvxoE2£Ó}ä¯gÙÄÐ=Ö£]%ØmÝõˆ=ÝiPôA‘Œ±ËÖItªñ¶GVdhé·e1·³qE ‘š%ÔtBŠÔ‘â­‹CŸzDyÓ¼»ÀËè=WiÀà¬á)BÇ®¡—¨ô†ê0hŸÃš†g¢íñ^ÜRsowxŇò îñôÆšC‹hãàñâ^5VÄçÆ¦¹Æö¾_[1øéÅ>ysO× è¸÷ûÞÛ¡~X3ˆ[ÿø%ÇߨJïÛQg0ë6¹Ã`§ž”èLÝ-ÿB,¶oÿ~!v·_û0›5ØEnæên}^a?¤ÏugIj·1á:xYE1+ðÛ-ÖÆ"=8L5¾kqAÏç$£¿«±m܈˜õæºaÛ?t½®÷NAìéÖâ¿þÃoW$ãÉácÎÞ²~»Á4†É³Ï˜~qHûî ÓgèÔ±ýé5d²ùüÝ´™èŠ3ß™»9ò"Aå9aIDý˜õ ³1$ÓÙ­·XÈ6¼$X©ûsÖôü˜ùס¯ã@×9œ;=•kÌj5 *uØ]‹JJÐŽþj‰9³ß<¤?{ËæMÍèË'ÓŒÕw?Ñ®ZÆÏ¾ ˜–ú/2¤ÊÉ*‚Ùl XГºŒvޤPÚÏ­ê &‡ > R1¤)¦ôoXþå-¤ùõpŸs’Ù×ÏÈ+sñÆŠ”LïcÛ‹pï—aZñ6 *¼”€ hug×&d@¨@w±$ð€4ïÙ¾ªQ£2> ú-ݲ%;<&ŸÖß¿$9~À褊mɬÀ^½âò›w”O¿`tœ°ùæ9Žïå£hé雎âÁ4+~KöàãÇSv/^Ñ­Tš@Ðäæ¸ÕŠ–˜Å9b|Äøt‚·]H̪¥ßlñmM»nH§T€òÙìê’®IÈ+’"ÁCsvAð ÅéJƒ7-»ç—èƒc’\°}ù9> /<íUªÁ)ŠÃœæÕkÚ­¤x8Ç\\¡OH3C¿îpMC»Ý¡ÇQAê¯.Qå]”TJÚ7ïX¿Ø0ûÃ×è°áêÛ³8pp¯äö_éǼ«ÿ[Žÿ¼®ÿ–ÇZó§5ÿµã‡â3­rÌzƒO oq^"‚#H‰D`Û=?¥:Ìi^]Q}ñ-#~ûæÓ:òƒFOŽ1—oÙoÉ&#|×!Ë1Ù|;c©!1»™¦tï^Ò¶³¯Ÿà–4gWÈjFõpÕÖ´¤<ÌØ¼xÎæeM~x•4wËߊ„ÐájC2_«“B€HÜnIwU“ÌfÇSìzI{¶ ï{¼M™~ù˜ê4cù§ïY¿®©N’NP ÅQ…[]°øöè |‡éÓ¯ž1~X²{yF¿“è*Eæ9¢ßÒ^YFÏÆ¬¾{Mñø ”]Q_n¨ž<Äm¯hW’ì¨Ä®ƒò=ƒ¹"­ŠÖ Ô ©® )Ýå%ý²CM礩eõ—‘£9i.i.ÖT_޶kVÏ7¨Làú]ÎÉOЪ§~þ–ÞÅsa%éá ·[’ÌOÉÊŽ«?½&ðŒñ\þñÙø«Õ³§$…cõ—·ÈrÊäó#úó7lßudG“¨lúß4Ñæ²W›öU’°e·£²ƒ™‘ QÞ·êžp‹aÌ{Ýä0äÜ!^ÜfGßö'öqÛ&±/rS…]\a{E~2#X3 OÆtE™DlßퟹÓý¼­ž¿ý->zü=÷¤¯Ûñ}¼¦y³&98D%Ü„ØÜ*îu®®7b{–µ·Ñ3­RAw~ ÙXÚ‹UʽÞì¤è"v|DRQ=œ¢R…Ùd–:¢ë%ëïß`1~zHóê]t"£tFùÙCüæ‚Õg×À„àü˜ˆç@¥1uZMgäã|H4¾¢9["’d"ÔÙdôd†[¬hkƒi:Ê“ªÓjHbq€ÃÖ-B—¤£|@ƒíýÉbصB°7Þ×w?=$ã ¶‹Á³eÛý΢³]èk[B$9(„°˜¦;æa7Îb›5™3~tˆ0ýp!xúUsâZ~Ïi£:  ¤vôë Î&Œžâ×+꫎âñ i »·ïèGqú,·l^œÇ‰m«Hª”à‚S×€ïà<²ÈÉæ£‹éà ZoˆÚnÞ]TN:JJ£Ë ³¸dóú ¡ÓõÙKFOH³è—öÖF/—¼ìÂM»f\±›fg‡$ ˜ x³—vn2‰]0›j2EËžva£·\‚‹ð™*„t´—[²'Tóœör IvËæå‚ìäÅLQ¿ºDè ïzd^’$ Þö¤+yóü=?޶·‘[­Eô3K”!%ýnƒH ’T‚NЙ »l:‚Ãv&^NQ>>À7š‹žüdNvPbkºåY”$U޳ÙÐ7H%èÖK‚ÊÉG)¾a?Aedó·\Q/»Èû Dô• ­pmC¿­QÅ„´P˜¦Fect’e´g—ìÎÊÏ’ˆ–Í›Ul—Â/ð•ýL;ü?úñÿwXÃÏùç5ÿ»¿'Y÷é¨Â5;DšEZF’"¼‰žE¼"Oñ蘬t—KêåÛ9’bD6Nqmƒs ´Äö–¤ªJƃÌ&f ØÍ’vë)f®kñÆ ’’òdŠ]®è[K:a7KšEÎJ’BDT|¥o,A¸!ÝMÏ©[Ü2¡ªŠ´J1Ë Á9ºíçRF)r¶/_±»ì)f‡èÔã…$;šB½bõÃ[ÐBZl靖2:­hήèw‚t”œ‰!*Ɉò@³þá¢:$ÏÁÔ z>Ç×+º5d“‚@G°!vÕŠ‚lZ ±˜Ö"“$κˆø¼ >໎~µ™#‰ï[úmDú¥™¦[פ§Ç$¢£~·!A) ’Rã­!‡é;dšq¨¼ ˜r|HštlÞ,ÉŽNÉ+ÏîõšdZaV[²“#èkúmA ýŽÝ›†tR ¼W‹ß vïÇqß¿{‹ßÛÿþçæ¼î%Yˆ¿ò} ïíJ‡ây¿¼‰]ÍHr¹ùCÁC2©P‰¸ù‹ïq£ï¼§÷‡|?FùØñïÿ÷Q5¼Ç,71NBë!]Øß²Uyd–“N‹Á†Y"Y×8bÇÆ‡˜Œ¢¡TqîÀ8¤.P ˜®#Iþ`ŠpíÅ9ª">¦¥»Zc:A:Î1›5ÖÆ¹,)I5×ÒíÚkzîÆ@jM0UT¤…Žsrm‰|ô}”·ž$ã)R9ì®A—ãØ2éýPÈî A7;úU±4r/¥|ׯ V©îàFb{ÃEå3Ëbg]‚Ymé˜l’Æ"qxÓIpf³% # Fr²}O~xÂèɾ­q6Λ@p™xú«^Æô¿øACJáš5ýÖŸœO4fµ¡¾Ú‚Gi…=ž èéW[Dš¡¸^ ')v]SœãM‹ ICb„֘ś痵vë›äM`ôÙ#Š©&È„öüÛ׫HæHÔ{_´€ï->|g)= < Ä·Ïk¸µîp“*$oq¶¥Ä7[úÅvP±5*ÏAÌz#°=dÇsòÃQLq¼Z`6™ úº§|p‚ßn!Ið}LsT®d– ´Âv®ñøfG»Y#dI:N1›-²mèWågHòŽöÒ ñ³;Òã#ünKîj…¬FèAW³ª3°¡Á·³ÝÐmZªGI+Xýå5j|ÈøÉ˜íO/©Ï·”Ÿæ–í›%Õ³ÏfKûnGöðˆîÝ+ú^PLF¸¶¡ÛÔ¨jDvxHšk|½aûvAzxL9OhÞ^ Çs”êhÞlHOŽÉ§ݺAG¾­0m· ùá­ ¶±¸ÞÅ ñ7øDÿZ1óåøŸóÆþß} ŸÖü¿} Á{DR’Mrú«+*/ÈLèß¼Á„œâ`„Y-è·-*«ÐãŠ|–ƒÙ°üËÙ£'”“tߥßu´ç \דž’•°ýñN¤TŸ’$4¯Îñ2‰*»Û;’ªBÇhѱùé%V”ŒŸ’%Û—gÈjNuRâlÀ®Ö´g—8™‘Íg1è¡koÝÏo-\ÆÁ?‘d„`1« !)}öD;|°l8Cäòƒœöݼ1~zBþŽnå˜üê Òo¨ßnÑÓCtæX}÷’äè”4©Y~{Föð1ÅX³}ñŸÌ˜>}ˆßœ±y·¦|ôˆ|¬A!3IuE·´qîG¶l~ŠLg‚bòÕCÌù[ê•k)œR=˜â­Ç·³^â½¢8™ãš™%tgç‘â¡#OŽ&(ÕcwžôxŽÖ é6o$³Ø™ÌŽIJ‰·UH̦¦?»Â’ «¿]aŒ¤ú쉊JäîÅkÄèMMsȪ¸q=¾5w@wëæû,dB:› ,÷å.„÷æšîx,ÿÖã£Ðؼy‡åÃù0œy k6x§…ì%·SŽïtˆÂ]É…°¸çø[?÷±ã?(¸¹ø—ÚÓ_A1!R©o,7¾ï½)ø¨À_»V ²¨PE†kÖ¸^S=šÐ¼|…5 ï<£g§„fC·dG#Òq†Û5tëžà:œQT'4/ÎP³9Ò7ØÆ‘?8ÆÕ—lßl£hè#ˆB%%鸌”ýç"£¥Äû€Ð¿Ûb6õàþ‡ß­PÙ¤8:@ÉŽvU#Ó1I©î`‡áV¼©1;O:¯°/ ]O°7¨“Ûž^®=\‘Å,d ßlA–¤#}“¢£5ø³ÙEÀ¹’7ˆgéw5ù£ÇLϰuS£LGw5¤ß…èY…”Ã…>x†¥RØzE·sd‡T§cüzÅæÝ%¦÷d“ %$¨ üS{ÒI‰ïl-É+|Û’?Á[ÏäWQ¶¥¹²¤ó‚üxŠÛl©ß­ Xœ‘dÓŒ~Q£Ç¡ßàzÅè‹ÇøÝË/÷L爢NFd£"’_¬¿ÞÔîÏ•L4v½ ¹Ü ´¾¡pÈ,‹¨žD.†V܉h9˜óûõUŽ‘:à»~°ˆ{1×øù’]¿‚ûp³+ÛïNÑb |DóxÓy@e¡oiI6JhÏ—"‚ŪÆèT`ÖÑf q1T%•ØÎ”9¾·HíéWú';œ!|‡YÇhg•œOÐÊÑ/å„l’P¿zY1 r"öM—»ZãBJ’Ë[“¢·¿caPÙ‡ëNj”I¬%™NHFÙu[áN!³/¤˜«5ÎFî´·žd6CJ9ÍZŒÃC†¨Qg<ŃcB³ÂôšòÁ ³XDûCVDK…³Ûâz("\K{U£F#Ààv©%΄NP:Cå™jt–‚ð´ç DZ’Ž5ýÖ“ŒsBÓbÖ«8Ü7›D|oA ’QA¿X`{I~4Áw=fµÁ¶]Dß% hè åÃ#|³¦ÛÒQŠÛÕ„4'åt—xb»F&Ðo:ÊÇvGsµCHI~| nG{Ù’•ôË R'˜mMv|ŒJíb…k<G2Ÿ‘d`6†t’ѯjDšâšŽìpŽÔ`6-hE>aV+Úøeû4öéõéõ7¿â½N#òyï»lxÕlÛbw5j<¥˜pu‡o:‚‘¤È`è·-éÁIK¿uѦæB d*sT¢Q©B`¨__`­¸Þøæ'Ð7¸‘U‚nÕ’Î'q€N ÌzE·í(ŠÃ#ô(Æ›eÉOfÐw´—WØÖÅÎîu›8bF½1Qåï 2)I§cÒBám‡iúÛ-$zÖ÷/:Ð_­!–‚Ãÿ\@Ô÷s‹|´åyg–@üÕý=kÉ/DñE?üM<&ß¶•„÷:[ýfëCœ—sß;‚·È¬¢<LÜÈeǧhÝÓ]¬ðzHߊìxŽß,é[(OçÐ7˜ÍÓzT*±¡xxBhVÔ«¥Tªo…Ïí-T–€Šá@*ÄëÄ…[›žÁ×-h]LFO‘ÁF?³ô8Óìí•‘ÊYvËî|Mvô4µØ¶!8q‹Ux߇cU^F–ïû;½ýå‡Á)ÂÐ^,ðÄ$(k él» arÌìqÁòBUK·5d‡'dl_½EäSò±Äû)%²ÌÉ*M{Õ&4ß¿`·äÇ3„ÙÑ^uTŸ?!ŸjÚEM0vS#ò:…Ýë·¨ñ„D'ˆ¬@¦‚üpŠÛ^aLAšµ\}ó ’ìÃKøz/îý?¦Æ°›–ÑçϘ<™âŒ»wg(¤ _¯é»aÚ’é ¥fÓBÀî\€t2BË@·ÝÑ®;ªG§È®FLŽ˜|6fóç©× ٸµNsÚ«wt[Ááùí¶¬ž¯Qùü&Þx‹„v=8‚BÕ£1¾îÑó õßa’#æFìÞ.‘Ec\w[)ºªÁa¶=ÙÃ9åQÁêOßÓ4 “G‡øºÃ¶›Ò’§4*StË éá!~·ÂQÍ› |>¥šgl_¼E#’\£4Ô—[²ÓRmi—5¾÷dÇGÐoè[Íìë9Û¿<•Ò\í˜þݯIiX<‹i ÁXʧŸ3:4—†ò0aõíÉ´¤¹¼$;zHVDø}r¦?C·‚ü(eóýjrÌøqNýê¦Ë¨ÍÈKºwKœLQ~ÅêUËüWÇÔÏ/)>{„hV\}÷ Ókæ¿zJ>Ó¬¿C9*éé×ÍêósD2gþõc²±ãò|K½–ŒŽÑ•Ž­xƒ|‡ïº¼q=áÞ:Æ‚Bgùxýs ô=Žûè¡hVꦀV»­ *¬¨·üÑáCÅÚ[O:«¢üž°¶;ÊòúÖûú¹ã¯èÛÇßú:‡ÿF¿¨‡Ê÷Ö R7&BG@[ ‰LÁn7xÉXvwE¿qà Éá)óß=Æ]¼âê› ²Ó‡¤™a÷jžÍ°»+‚3~2£yõжÌóZlÙþôŽ8"èV-³ÿô5aõ–Õ›:b-“¥†Ü“=cˆlϦSTjq¦Ü‘hÜzKs¹F$úV”·‹òèÍ4¨üÐϾ/p¥Få ®®ãëûÇ~äf(«ùð½TˆDǨLÓ‚$›Oð]C¼ÃÕ-j2%IݪA2MÁázƒ·×²ƒ9"ô´Ë:ƒ ‹ël<MƒÌ+’"Ã5[|P¡õzRáë®±$³q¼¦l˜”i‚ðž~»‹í>²ÕEà¼Jv½ãz;þ¯Ñ]¼GW%*“x>š²Eˆ©=(5D­ÆhV·ÝÄŒøDGµC‘àÞ_ãa’qÓ 7;¼X§kµR <ÁFß”D|SïAxtY $CèML C,¶*rT*é+œ ®îïøþD’ I0•g¨TbÖ[D9Báè—k‚TÑêbµ¥¹Ø’Ÿ’d=ëoß¡fGô—¯Y¿YQ=zÂü×O ÛQ_nPi†ï,2 ôçWft«ŒÃ?|‰[Ÿc™¢¹bùªgòdÎî§×¨é“§Gè4Dæ~QŽ4ýªÆvñ4µçoèjC>›"|Ož·®mIçs¶?ü@úä ¦§9ë_I°I™ƒ‡tZ¢Ó޳ÿö£ßÿ®^pù|ƒÎ¢p%´Féú<*Ƀ'Q(‰³=ý¶aüõ×|u„k{Ìâ‚æÊ¡sÁîÍ–ù³ýóP3ûjÎîÅ\ý¸$—(•œA¥UÌRÜŽõ‹KÿßÒ|÷-òôstÎâù–ÉgI&%¡ÝÒ_,hw ^|ÈfGþáÍ‹Ÿ¸úiIR(2“ÍË›À“•뻡ƒ.îó÷Þ®c LN¸èp½ƒ}Kµ ï{›Å}A*ÃóDjp-ýb“'Ý0Àæz:#)ôMºàþ÷߉"l?Æ¡'%é(¹]Þª‡– ñ^4÷ÇßX3î=þöšýÍ{RÐolëãósM¾YàŒ&ÇZH ¾¥_4ˆ¢_Ó]6$‡Çd£/€nk½“#ÊÓ1²_±þþ9žÚÎ l]Óïz¦¿ýy¶æâŸ/(=»bàSFÏRÌ‹?ÿÀúÝŽ¤ÌÑJã­Ee#²y5¤›Þœ[!=®¯ V‚™$˜Õ†æb±¢¼ƒ÷÷›Þ?š%QÚĪp¿ çgÿýþgÕ'LKܶ€·1RTîcžoÇU‹aª6²ƒ1q¤u¼ái*r‚éñÆ„$‹HÔ𷆋Àš¸ã¯R|Ýàmˆ‘™þæ®ï½Ž”Ý¿‘èè?îÍ/1¿w›@KDˆD!•üp##ø“#dò !*¾`âJ_·®¢**ñÆÇÖE¡q›:þJ­ã°¡Ö¨"‹=†ûÖŽPŠ0(®*‹¡Þ3„dV dô Å¡å$îF­‹ñ®Rà;ƒP *•¸¦GBìÛU*×ø¨î2 „2ïƒÅg¸ ÄÔJ­½ÚtQ¥ViŒEÇîB^{àT‘Ç!ËxµàE$q Ó5í€ÏùW„Ÿ {‘FµÆYw Û|z}z}zýÒ{apT‚e1ÞyÓBñoÁŹ5.ÖGO¯"æ¤&Ø]‹¸º½ÆJ5(A Šá ýºÄ!…Q ëbö€Ôr˜#Ù‡wD¼§Ìr¡Ä5Õ!ô}T³”Ðǧ”Š2‡‘‚³¨¢ ô}¼¥ï1wJ!2E™º‹*ìÀT–‰B°M‡H4zT¬Á¬›x¶´!•MÊkœj Hb‚ïgšTœE’"Þχøl‘j01áî¦øQÝ·žA‚á¾í á_b(–»«ãûÏ T®±›Þs½q½½Áß¾9:?ü\¤>…Î"²á301XÃ÷6Þgµº)$µº~zë®=åwŠaÞû;RÜ_“|¤ŽñÆ¡ò,úÇCø—JÐ7çÖšX×$q˜M éa(âÇ–ÏûÊ(k"5L+ÂûÁ.·“@îÝ¿W ‰jûXø¡¨¿ÿø{Nœ š ™}`ÊÀXŽßÝ8kDœyÃûH “’`ÜP£‚Šuï-²ÌR 4"Î[kpì.±FC§¨4nHb=¢‘*ÖÞº»×Ý-õ5¹MÜgbp˜îönP •žÇ3dpñ‡¸ÏtãBäè\²{ûUŽ£¬ÞOÁ rßǧ¼¯x‡j؉lß.©>{„=¿@ŸB}I}Ñ0úâ)Õã ¸€[žsþßã“ÕqŒ ݾ}²¢˜ÍUBwö++æ_>Áœ¿býfKq:Ã^­#æ'wØ&R)‚ d''„úŠÕïe§1oø×yõ·'k{PòN±ýWýƒ·w«¼•üþkʉĚ۱›òf'|;’óVWF¦ ®íq\½Âì@K|·¥}w‰“Çÿå+ìÅ9–ŒêtÄê›oÕCæG,ÿò‘ŒÈæ#°ž`º«%aÈ“o—kDQ(CPŠ1£/’¨-»×5£Ï`–[T‘#‡ ‚æÝ9‹?¾¥üú fƬþò"’”Ð/j’ù!2Ô4gkŠ'Ègšà@æ ÝÙ;šsÔ4kOùpFØ­ð6#äl^½¦zö³g¶?¼Äë9YÑR_ª‡»ˆD²;_‘Ÿ£CÃöÍŠâÙS”]±zy…T‘&ÇÉ2Çê»çxÞýE~àáB‘»m¨¾ø’ùG¬ÿø-»Ë5è[ä•OèO~àOk¾ß¶Bj’4%™NÉæ3tXsùǰdÌãûèwL2Oß üæ‚Í›ÕÓ/©`ûbAùøn{Éêù²˜søûì¾ûŽº)˜uŠÛµ˜z«kD2!Ÿ$¬¾ÿŸT䣌ÐZª¯ŸáÖ¯ÙœC9Ót‹Ø¥ÓUIšõlº úò3¶ßý…ÎŒ8úûÇØÅ‹o.QEœáñº¢8, ­eôìˆîÍ+V/wd'Ghß@6¡8“ÎJú³×\üãO L[磈¡%®±§˜}}‚]]RŸ[T)°›¶ó$¹¦Ûn "%¯2Ú«5“¿ÿ bsÆöRRiÌrwƒ1xÈ4«o¿g·´ƒ:§pΓLæè¤§½Ü Sj~H„#“žn±Âõo;Dš’HIr|J>ñ\ý÷ïðÅœ£?|Ž»ZÐn Åé”|–²üæ{V¯Ö$e>(ЕŽIg ®Þ9él¥ Æ Ç%é4Cè”þÝ .þé% OÎᾦš:.ÿÇOX?"Ÿ§±èyOtŠÉ=®©c²ð­äÞûëž[>h§HæèT¿mè¨û˜°wǧˆæ¾uÞ§zO2.й`â½ã?‚±·Ðw"J ÁúU$Å„é8Cfƒ°ù1 ‡¿e+ ™é˜0Ü ›”Û¾o!¡ßE‚ŽNâ aÐȼB³‰s]¶kÈÁüiÅúŸ¿£·%óß=#I Þ‹!-°Çî,õÙkLÈŠçòã:Õ$…FO]&¬þò=ë7ÛáºÓwÎKü‡¯If¨$æxÔïÞÒ åaFûú’öjsÛÍDÈ¿A Ä­)õ½8Å¡ó7žØ ‘2àlÄäÅ€ Þ⃌~Ù$ú®ƒ1ô«]Œž.r¤r˜¦C¨ Š©éqÞ#TM*Óø~˜ O@J "Äi×`ñ(¤¸Žm¼Éˆ¿¯uyèó·(—²åVÁ¼ ›Å$¬kŠà{ÿu•Ãå­´ AÅðm‹Ù¶ B¤“ìwSÞâœ$ø¶Áõ=ÊñMMH3”Q=WÑ“ŒR1DŠKÞ`;‹Ôqâ:ª¹ UeHáãïË5vÓ¢F0¨¾Æ¾º4~¦¼À7ÄdœB—zP†®ý{¶©|¼Ö„Œq¥2&SºÞ 'ã8°©ñ^Äd/‘ ´Ç¬:d&±­E% ƒíãç,ÅÍyJ"UÜÅúÛä™íÕl=jT‘fIäZTúæzúôúôúôúè£ÙýB@ ¥ýz‹¥T ó Ùl„ô†þZeŽÔŽ$Øvðô¶¶ï2æ"ŽN'*vû”¢§”à=ÞÇB"ªb*Þ+»×{$ïULÏs‚´Ìbñ]dƒÂªbøˆéè·}Tc¥HU±3§2…ïzìpOÁâŒGe jTB×Ò­6¡¶ÿþ~%ÙgSèÉ©¶¶‘X:ä)쑯A¤”¸ÎFU=X\*ÅŒ71ÙVhAư‰íçJŠ[Nœá9åȆH˜ÂÇ7c¦Õp¿·®qJ“”Øåçé´@%‚~ÓFZÅ£w!RTðæ=ËÐmðÖ£«*&Í o[úME?!B‘ŒJ”ô›vh(„½öÖµugúíoçœs“¼xdž¤TTRÃ{¹f ®ì­€ûgºsq~IÆÚÁû)*C̵øE–,†šÅ ³GêCÊÆž5ýþÏ߃ˆá+ŸÅÁ춉ÏZº*"ydPsÅ=6—÷¿P»mc—Z‰ûÕ}!n<èì?ÇXë9éºÊQ©Æ× A&¤£"νó¶1ñzq† 4R¼%nB„"U`- Q‰¤ßì°­Eh…¼–³b—>ìi+^ µN óF‚F%ah‚ÿÏ¿[!å$›OPøÛ¦€ìÄ!¤è2Ãu[‚7‰x÷)Ð÷Z8ÞŸFõ•!‹œ`jºÅ BA~4¢__P_6L¿þ’Ù×GÔ/_±}¾@•Sd}"#MÞ’L ‚‹©UÝå9ÍÙŽtv€*=n[#ó ÕÃýåk-®éÑÕ˜îê ÒIêГcÒ¼ãòŒT!qQéäCAEH‚³xgùˆ{ÿ^ÿ ï{ôü„Ãß>¾‰é;úuƒ5 ÙöqÇ&.õà5r˜­‰Ñ= [ á¹Æ¬ØäOŽfÅæåŽÑÏHä†ÅŸ^£ç‡øzIjh(HÙ#’ùñ¥`tÓ¼~‡,¦è\RŸ¿Eè)“g'4¯Ÿ³½ê=xn ÉŒrî¸úöœÉ¯~E¦v,¾û‘¾-?>&›fè2)Ùýø‚õów$žpðëG¸åïJ9Ö?=lj‚êäˆtœ¡JMýò-ÍÙ†ìô˜ü`Žr+.ÿù{|z@1©"C D *K¢ˆ°kJ’äýfBãúÀô7O1ï^ÒYMª%Î „ëèšž|vJRAwyEž…v»¤¹¨ÿúsÊiJ·1è2§{ûŠz8úÏ¿FìÞrþÇwŒý+Ê´‹-Û—TÏž ÆËÿþ‚ìéS¦+6ßü„uÙ<§}·dö‡/ißüÈnHRE€jL:)(ïydã=S&‚n±Ä»ŒÑ'$:°þî'º¶'?8%EßvwµÆM6ÎZມ%žh’RœÅ¬Zúí×{²ù‡ÊS²Ã‚õ_~dùã*‹ ™¦EÁá\+ƒ@$\@§$£4*ÃÃÀ^°-®m£½àƒËôgè;×n¸Û­w5š’Í*ÂÆm/íÅ=;@g×èD¢p›Ýb; NcTxz0½ö–Èj†û(Á{t™"u¸ÁÅÝ«@Ãí¶u{°èÈXÔ›m?¤ïÞü|pѺ©‹•«»Žƒ{èë³™j|ïnTè[kˆ¡y Ýå"nï8mºãÍ[Kt)0Ë5Ö¹ëÐ=×yf¿ù’ržÑ¼]£§ˆnÁæUGvaè’t2%VùfÐYÌ û]Š›­¢M‘“”ôË l£â0ðXãš]ŒoÚåö.ZeÉß° Q…– ÈñËl¿Ùé…Ûa+R0ض'M’'x×b[Oq|D>Íh— ìΣ’ïÍð³1JÜ÷üx¦Å´.ú¦Gê •í‰ ºHñu‡óï*I0õ†R’B¡«1RôÔo¯ðR\ôïH­nÄ;¸%?.~‰º¸;qÈrDu2k£Zn-ݪ¾ÃÇΡʒd½ØÁ̦<ßï™ü÷gÔ ô¸ˆÍË–t:Fe³h!Qø¾EèdØQª¸³²UåèD é…)é¤Àm78}JÞv¸>ÄŽ€sø°Wî*ÛyŠ“#²QÄMÙÆ‚ ‘puƒíBR2:™ãW+ŒóH¥®S)}Û£(F íå !S=}kÑyN<¦µ‘ ’€í ‰JõM„º’xHÇ9íù’‚â¨Â,W4ë™d(-ù«@î­˜Wõ¨$–˜å‚fÑd}çw8Ç~°ö-â â=~02Ô-B¸¡ ÷îóþj s-4Ê÷„÷v”A\+öÌ÷Š!!E,E¼®?Ø”~ôA®¿·á:ÊûƒÀÛÊÝWÈ›”çëäâ¶¡_··z·þ¢ $“=ì}[vøà÷ÇN²Âílg¯ïŸËÛê¸T‘æ¡h Áµx§ã÷ Ôì$¢ð\çÈO®£_÷d'S°5Í¥ צ6šd’Ò_F(ÀÐJ#“¨¶û ÐiüÞK]’³‹Á=é¨Bgg:¼“qŽ Î7ì h9IÆ2„÷ÒE?ÆCŠÝ<Á÷m< Æý1_\‘ÈaÚ7*ÑŽ „Ñu®7˜¶AÈ„âè„ЯéO>áw[9é|J6‚õ/hV• ¿GI‚wC+'^´:јÆQ={ˆØ-¨-ºšR>ša.ÏÙ¼¾@$2Q$ÕãÇ»^bŒŒvdqWiÄE†¶Ü{jîLûÝ6Þ‹hE‰ Äh¤ïm\·Ê™~ùˆô:õòÖ.tØiðD¼‰0oئŽn/®Û1"ËJ"„"ôÚeòù1»ŸÞ>|„l–4Ë™W”'c’2Ã;‹k,2Ùÿ=ÁÅvHn6*ט!äDUYÂëv˜ÕçAf̾~¦Áöß÷ØÎNGä%õ‹×Ôç+òÓGT§Ìò’ö|ùˆì À­VX£(N§$e ¯1;‡žOÈfš–í‹·t[Ev8Æ·’ñùqœÜ¶ë-¦$ºcýrÅøWŸ£ý–æl‹,§¤cE¹@MŽ~Íòûsdšüm®›¿Õ¥3¤azâõÁ_óÈó7Ï¢ü/;þ_ºæ¿ù}Zó§5ýͶ§|ò„ÙGÔ/^ÒnÅ¡fõÃ9Ùé#Ê)Ô// É•„ˆ ’àzƒ*Kòy‰]-é.×xëé¶5A挟>ŠqݯÎÐÓC”رþé UddótUB»fýêŠéožbÏßR_8òG”§%í»3šEG:Êã“‚‡ušé×¾§[ÕôëÉdj¥Ç;‰ß®¨ß^¡ª)ºTØmKùð¥A¦H%Øüô‚¾vh-ð¤dó1Á8ßöˆ¤ÅÉŒ`jß¼"9:!Ï=ÎfÓÀÅ?~‡,)§xÓâzOq2CJÇê// SžFÂ’JãUwyÎî|‰L&TçôWgtu ŸÎ"CÙíÏd,hšn°²êˆtKÝÕUM¡_#ÊÒ¼cõãéx‚T>®IA:ËèÞœ²¡_Ó\m}þ9yåh.-I¥i^ŸdBð&>Ÿçd³”í‹—ì®zÒ"¹¡P‰”±€"%™TѶ±vóqèS ì½à|ó‘o~I ¨8e‚ ï)«& ¾TQ\‹ÝuQMO ²ƒ)ØþÆW-öV ñ^cû¦c?Ç(†=„÷=Ó·ÞÛu¥aÎA{‰Â\]á\Jq:‹îz¦…ˆáERIT6̽q÷ú}‹F{ë<…[›/dÌð¸¼"ýý²‘T:úþÅ`Uuà¬ki/¸ ÈF98‹w’d2Ƭ.pbD>Ôï–¨¼D—U´x *’ë󣊔úõkVߟQ<ý‚jâX½Ü0ýüˆõ·¡ër~÷*Ô¬ž¿Å4b~@2+°‹«è¾­@'U60?’˜3˜áÅp±Â`¼ÇFù/* Ã6]ÜÑJ„ÎÌíãýpá{¼5t›é¨"M°õ‚®¤U‡’DŒml/.ik7°‚Û;æ¸+J‹”~Û‘N'(zúÆ!eŠ)ÌrE·3¨"xÌ3ª£Œúù¬×CJâ­eI³ÒÃÀ ס…o¢'ûö®4‚Ș<{@¢A ÉT.ÜAÌ!btùbG@  ‡÷ÑÒߊ˜! …ïVt­`òÙõ‹3äh‚³³•QœŽI'%vµÆ´ì "fBðø®¥[Ô±µ¨L¼%xL#ëÑw;ºÕç21yvBخ蛨ìû®EMǤUÂö‡—t£|ð¬’ôWK¼ÓQ1ÎÀ·× ò‡s´rÔoˆ4GWé´ 4Ú«5¦S(- Á’Îæ$•Škm;lçQºcûfCõì35ÝÅ– r²ƒ·Ý!Çs„Y³zq…LõÏ?Ø? Ôý?{Íõg>­ùßâ= !"kÞªÏ3ùlNûú íVMëä¡~½] õGèiA6š õ»B)ºÍkÙhB6J0›-éÉ)RÔ¬þòM6›“ä)¡ÛR/Æ_>ļ{K»匞cWìÎ:ÒiŠï#žË÷ë%Õ£#¨Loð¦¯ÉާCj¯³9»]Ž‘ÊázG~8]QÀí¶¯Îð*#MƲéœGˆ8ä'T ޑ̶gõÓ+‚®(Æ "«Ðºeõýkd>')rTß_z4A˜žÍës‚,(æ#‚ï‘iI6J©_¿¥ïz‚þR×m±F–#t.¯ñgI6Æ`H7©„²˜]‡L B·AÍNÉKÃòû·¨¬D B$‘ZáZú­EWÞlh.·”OžPŒ¡½è©À¬#Êvél†’âÁŒæí+¶—=i™ÊwÌŽPJ·„T1=.ìi\×ÂÙ¾èècCˆûÛââ~I: øÒØy•‘0Ewc_ý¹‚û={RÑ_\‹m,2U¡z fqc±øPÐÜÛöïKN«aÍïYPn+зÿ@&³ÞaÚÈCûzlPÕïx°oaï‚uèɈtœâ´Â»3b·—,»<;éj÷®!†˜!°­E¦:—·J£0f4ÐÓ­6C] ØÞ!d†·[9Iêi7;¤ÎÑEŠšü`„À!3kš7ïX=¿ xú9Õij~½eòôíw?й‚ù¯ž"» Ûó¶‡4¯H§%¾ÝÜŠòþ‡ß­ÐÙ¤89Bân}`w½7BH|»»·@h²ù·^c‡éŸo{ܾSðmCèq]Ï yÀIO¿ÜRG™t©*KhÍ&y‡}ÿ%ù¿æÃÜ5sIvC•®T¡]šsÈȪèæe§¯……Ì,saîfçìýîW Š"™MÉæ3¤ßP_¬0Ç3ÜrÈGèD¦ »¼¦­¢W¿iÑYŠëZôhJ>#uùÎG'(·¥ºhÈŸ’NGô—glÞ\@>¥8ž 1Ï ©ãçk.¯0óS’´§Yò£„vÑ’Î2êóé£ýÕYNI i±6jWÜæšíÙ •føaRÕÿŽ`AJ„$ó ¢ÛÒ,*”x¯‰À×Ý`Oç‡&Ãâ-”/ž DÃæ‡D’ góˆÊÙ–àš« z}ÍŠ¾î ‹ü¥o7ôÛ•¦•RœN©^þ€W ¡é)ž?C† ë·k”Ñ·ÀÓ@GxüÎ2T‚ ¨¢Dgƒr´ÉŠŸµm¹—ó#×ii‰Ü‹äC_¼ü3ëžÛ×&,Bg$“2†µùw:ʃÞó.øgô³ ô;¢°ÿ¢`QDæ€F­°«%Þ*’£Xw[pÉ·N†Š;àä;>ðA õÉ]0öÎÊbhš"R8¼ß‡E›Â™¥„®ÆnÛX“‡³ñ>(Ÿe4g7¸6DQ¬—¨Làš@2Ëh/—èÉ “ŠèZlAeI¼?W—´[Iv<¢½^!’’t,ç²Éxi —TçTšÜÐÅããhcwgá¿… Ø[7ql¢wÁ(MLT²vÿ ©£?¯‹¹âš‰4)B;n­¤¬ò‚A&)RõTgט“Ç(·as±DÒšôô”Ñ“ ÍË—¬Þ\cæO˜vÄæ‡ïÙÜt˜,‰*Kö7}p·’\!®ïJ:‡žÍI ˜“9¢_pý§ó˜$L™ÇèUá¢RÙî¢*%Áõ8Û#´AI3 ô?Ë(D‡C ‡ï]L:ž×¯[FŸ½`|ZÆ÷ÖåüÀÂÆÑÝDÕ´TQä=I«øoZ?hŠJ‚«©¯o@æ(é-Îõƒß§8Hmwø¶ƒdÌüW/0¢ÃÊÛ—gtÛ@2ÉpÛŠ®êH&S’Ù”$m¹þý·¨é1FD¯îúò‚ìÅ Š‘gýÝ5ªƒÝR-ZŠ'O‘nËözEv†zIµj† ¢Ä”Sòã)Z7Ô—-ų)íÙ}ŸPœNpMiAØ\QÝH’‘§^lHÒŒ¾©ÑؤS<ÉY~ù-êè ÆoÙ^4¤Ç3T¢pË%ÕÍ5^äGGhÝ%‚ÖWõÙúÑRYSo&/rêó†ìذøÃÆ¿ùûæ ½Í)žŒ¡ïh®+Ò§§(·âú¯I:hd1únü<£s‰0ŠÐ·¸ÆFN¬Ì:àÛ:º‹ìQzHFŸ=G†-«o¯¦$™¤õ>Ih.—øíES‘ƒ'ãëuß­°”Ì>póÏß`Žž1yš³ùþ-Ö¤c=pHðϵÑc›CïgƒL Á7ø^ ò‚`«˜ì˜ŽÈŽrüfC»©p$ŒžA³Åë“eÔê› Jk‚7Fl_½B–c¦eôwŸ#ú+n¾¾‰”Ͻ•Œßç½LŠà@Ƙ\í…g‘öÐFk·ñÔû‚ó_ç!ZÒ¯*úÚÅ<‹‡Âi„BÊ)¨‡œòÝ|¤æÈ4!ØšnSCÛ48ï‘$LõI¤î~}F9Ê4´KO2M…NEL«L òG#Üv ù£=}/P44‹å{'2!zì¶¥Á==‚憫߿AJR¬Äû?»D艗ыï}‹_ˆ¨h‘Óѯ6 MW9™ŽQ™ŽÖeÕ–nµE%ɤ¼íf*APì¶Šæíê>')šä£Stž`×+lãÈ”¾©h¯V™Q<žÐÝ\c»A¬e4IOTfðMƒwÄ"÷¸i(džÄ"¸j!I£g`†“ÁfMßæÔGÛ•Tø@È~J6¤Ù…=Ã#“ŒtšÑ^ÞàCô‘N&(QŒ}ì§Tà†dÇ¡; >ò™g=Òh\µÁÖ™¥éð.¢úF#ð¸¦\?é᳇à‘IN6Çq×`'“„4n[ÑW ®í1“ ÙÑWÅC—¤¥¦½¼&èSDΑ³»®‘YN2‰¾ÚÊ\SÑ­[¤Nb˜€–Øå 5›ctˆ‚»>Dt%3„¶G•ET¹¯Öt›Å$’hÅäÖ7´[Oz2Åm£½NSÌ8¡9»Àöb°8ü·°“‹hFv<¡¿¹Ž‹ØAá‡Ç‡G4Ú¤Žô¬á~ñ] iI:)èÎ/:f:Šèbï J “_-èn*ÔhŠÎ%nÛ¡Ê”îê /”˜y9X 5<ª£S"Z5Ú5í²‰¯‘ ú›ƒžæ(mðÍ’ú²Šk©‰;[µ˜ñ!íÞ9 )qõ–nÕ¡s"Z'³ !ÃXôÑRNɃT;¿Ÿ&ÓQ,%¸j‹mí€df€ÅÕÑ—_§‚n±%9™ákÔ¤ÄnVt¥q7fWeAz4‡~C}¹ÅŒ'Û ß×øÎߢÏ~”¢îABa|µ£L€DåY䥡'"T"é–d^\‡«Zôt'‹ºu‹ÎS„É0¥¢½Xœœ ¥TœÅ ýÆ¡3ýNÁúîZ.¢ÒZPÉ@=ÜÇË ¿ƒÇ÷ý]šª6{ýÁYúW÷¨Ô œÜ mÿ¼kœ¨e aGIðç:ÅLGïxÃ궪’ÁnQü”~~ã=ÕAA/´Ä®×x+If£ÛD¾÷ŸÅp­Êw ô[ÊÇp݈fuÁ¿‹>Ö’Ò¼û}îÁ6Ðy|×TBv4C›@¿ZÓ·ßt 5J„ÎIŽ ü¶¢[o $qºãûÊØ&Ò:õñcÍùh4 È40E‚]oc(K®±Upï±ÿõ³&ŸŒ?~Š ö]óîCóë¡ctô«Y¤t«kB¯I¦¨TíÁýªBæ#Ì8ën¿ØƒIh«6ôÛ..FJph¢±¶J2T õÕ%õuMvzÊìó§(¨^G+:1bö«G´¯_Ó¬¶kÆ ‘èrB:KéW×ôµ&;Gñ‡oé–K\—?cë%ÝÊ“žÌÔ´‹i¢­ŽPél<,`–n±Âuc‰é€aܹðä€X–wÁö¨ÙcŽ?›qõýºúÀü·_0š'Øa=FI\Uc·žä¨dPö!¤ÀnÚÈe~¯¨²Åµ•ï|%þ/‘ÊÒîÎAÅñçî3ykÑÓŽõ¢?@>”ÄuÍÕ’vYÑÜ,)>ýœ“ß<£¿¸¤>ß’ %[ª×Kd9aúÅ n]Ñn{\½Â‹‚l–#”&?™šV_½Æ…SŽÐy`óò jrB1‘´ë»^ádIq’ãšÀø³'¸›K6onh6=éÑù,ÃÕ=zRR~tLóÃ7Ü|·¤|ú”°­pBP<#CÇâO?Ð6.úe¾oÔö·ŒµdÎø£š7¯h»Á®ð=4Ñw?Ó‡(ïQÞÿ¾Î9X‹SÎR6?¼Œô™ŸcAQQ„®¢y{MH§rúUƒg4o/À$ˆ }ñ‚þæ7ß,ÉÆéñ1"ÔÔW ÅGÏÈF–Í7gÍ1™§[® ²@—šôxNØœqùϯ0Ó)I>A¥Ž~U¡Ç3$ÑaÂŒ 2K©_ýÀõŸÎI‚HL´Ê Ž4ÉtŠJ\:ªH T*Rw“Ò{ˆÅ:º5C-ГnsA½l(Ÿ¿@º-õeÇô×§ÔߟS~ö‚úÕ·,Ïô.¥­iHž¾àø—O¨¾ü’õYEþìjpÊãû¿ã÷J‰ï:\ï1Ez›»ûû³}b^ȤDIy\o*“´×Ìl†«¢_úø„Ñ“#º«3Öoè,'O1…ˆSØOŸê ç%õÙªe…ÎbðÊ~tÞGÀÑ¡b4%™¤‘Þ±ÿOèðM½×p… ‘IŽLnãe¯ý–v±‰¢Iy‚ó>„ø]ôV(‰­<’¤L£=\paFeœJXwÏfî^vP¤ )qmG2+›¼ƒP”¢>€}ÁYÚë-ÁÉÁ¯ûösË,¥¿¾¤ï Åã)¾iïQF?Ë].óaxÊã‡ïE³¿à|¼WjIaéWëôYÜazH#M,ÔC¿¥:;Ç’3þè9£Cs}M·ñØí'5ijГ9£ÇØë36ß_’1ɸŒ8£§0Û·W¨ù#RݳüîmÌ”(|0ã Gùñœí—ß#&O(g‚ÍÙ v±¦¾Þ©ˆIt"øÚÁŽAo;lÕ‚ÖÃ,ѽaûË!‚ÚFáïƒØAŸÐ ß6ت}×êdàöHÇP1†„f÷ª¡ÓH‰pë† EŒÄtƒU;ª”·ñ¯»Ò£?ƒs U,ˆ'ˆÁÄF“wÔ°@Á?5 ï¤îCOîÅB¢Òèy§ÑƒŠXk‚ç$ÓdXÄââÛݬy-Ù¤ÀU5®Æ&‡Á B ö4‘F"¤¸ó=‰.Ì.Î; BGZÐ]-YŽRÄ ^”è<ÃW®i‘yÅ" –„¾Ãu™jd2ð—ÚDéâ¢bºÌÀZúªC¥=* m­:Ô(‹“„Æ#=t¬±KeA‘Z\äí‰$8U1J¼»Ú 'Dè°uÏŸô×ÃÙ"…£w­? Ï?㞉b0L3t‘à¶[œ(yÖ¡Š<:! ƒ™æøªÂnÛa}÷ƒ×n¦šáEDì”$´]\3tŒýIi8ð™$1ÔiÓ ò•$C2 X¡1£bW‡Š‰Ÿ®n‹_ÛÖûЈˆZÔÎhÐ*þ½ï‘YŽ.Ò[×¥¥ÜF®jyŽ=ýºB&Hv]!ói†=ÏùFÖDZý¾À“‘(BïðÖ#u°¿ Òý qP > Š•¨!d.Ú¡Ùm£™w‚¾á¿kQeM¨lØ;Qé,Gå&¢ŒnX#•Œè|H} ²…x¯Ïø½T*Ngýý8ì”T>@¿8ÍE°Í#Œüö_8€ 1Š>ÄÆðÛœ# Ñe´L ?Ö}Î_¶j‘Ï{_/þlBÝž£ÛÙ)Öñ>ðÛ*îérG})¢+ÚOîeïk^¸Þª ׯ°™e·,Ûa«&¦óŠðp3.D¤Q¸áþOt¦é–ô|u5ˆcmb§€Ð :Kmƒ³ñ:`¨bâ£^è:0)º0¸ª‰ú>ç†8ñ¶"„„Dš~¨wµ/+ñ_ÿñ×K‘”“é/PÞÞòhÄ=~Ï`9úš~¹ŽáÛi ²GG(MLJ’LJ{°þ~Š :¬XúíŠn±‰W¬d#–n“©Mw}ÆözK6;%;¡’”Ä4\ÿñ+ú~Âøñ Û,h—–t6'™¦’ºû…ø-ÍU…™¡M8°‹ã W­h®6¨|L:ˆ/ïr”ˆæÞ%5ZÚ›%Þ)¤¸¾Çw÷yÁGÁJ6åñÿë—„›kºö¶øNf‘ÛÖ¯+ºM ·C$Böt‹-zr„Nãgï× úm€èïx\ jMÄb:ú†nÝÑok|°‘Û4„»ÈnKsSãD¥°þîúø)y*³1Ò­Ù¼iÈNð›Ø Ž¿ø­:ÚeK}¾¡üüöâ Ëo×Ñüÿ´¤~uFóæœ¦WL>ÿCO·mqÖQ¾8A†ž›ß}‹>zÂìXÿþTÉÑoŸQÿék¶ë~/HgÇÌó”þêŒÕ÷k$–¶i)_|ÊøÙ„~±E:i‡™Çøí9›Ëm×ü[¢±—LHykNùþ€Æþ{w-(ôq¯2ãÙ£1vyAu½Aé×5˜É ÓÏ£´¡0ãŒåþÄÍ÷Ê“S’I‘\[ãë DGÄDñSèz”“ŽXýþ4ý˜ù‹Œ‹ÿÏï IZ¡µ¼ÿ5é|ŽEJ›«-j<#¥O—ƒ}T t »^"ÇS„ÝÒ.jÌÑ1Šk “ÏÚ&Æg«ÿþGª (&A*§$ãoû(>¿cq÷ׯÐq¸WßÙËêF/1Ó9:´8¡5~³¤[×··Ûb·ê™üêS¤Ýâ“IX}õ‘ŒÉNg$¹nÉÅÿŠÞ'Qè=€EÒ$(©oóî§îjN`f³h‡æº>Ã{D~· ŽPW/èÖžìø|kª±¾pòÐwôÀý¼@eÈ߸»¼ëàC2› QÞµ’Œ–uÁEû[!5¡_Ó^W˜ù;øAç˜Ò “‰ïZÚE ÙOÄwï7ð¿…Øõ ïR„¨ð>!™cz_x×–îÁÚð ºüðþ—ºÕ2fA Ñã)É8‹÷IWÑÝ,#5õï2j7 TžàëÍÅ ÎŒ8ùû§lÿ=òèÑ-bX•ÐeB{þ†¶SÌ~ù)‰q4+\pø¦G%íò‚zQ“LÆ$FaŽ“–-‹?ÞetWÉÑß.ñB•cdâ±u…J'¸ê†í«KD’Ü"ÐïpÅ{:ŽàoÊåkc‡¦Õ»«ãOZíÀí]§acǹKǹ¿ÐJ±H9Ä(‰ÎSìzƒƒ†ðào£!ï|žÝ‚n¹RÛ×xB?©µù ú`$qÖ€ý¢QšumL7 ÏUy»ôª;È”çáÛŽ¡{Ù[ûìí¯˜p\´w‹»(kMÀG¡… c0“úÈ ÃwèlO°Qµ«Ê %ÀÖ7¦D“I´½sC) bD¨Ö£"’nè˜z%óé#"-Fc´ ô‹ "O#5e]ÔÎJQ€ ÑÚÙÈWbþäHÝr•(%c˜ç^jæ¿ÝÃ[§ Á]ñ8úÃãßç#„8Ć$4íAc2Z µ}?DR;D–¢´ˆˆ¯IQÒck7ßÁqÁ»x¿ ᣵ™” ôýàª$‘©Ö-×Éin®iãmˆÞ9\Dî|´øiL3“IŠÊ nÛ¤A'ÐoÚAÄ>TjÐQv™ƒ;“Ö;ˆ´º5¬›wc¶U#ÂC ®ãlÕàBˆá_Bì#˜w[Bð îG?¿£Xz  e à Ç}Øßê‚„"ÑíN‡ã÷û¼Ý6èñ@W»À«˜ŒÔ$ó’Ð4تßáf{é=aÜŽpt<·&ÿ²U‚p1_AðnÁþ¾í^ AiÞ¿;‘·ˆ¼b°p‹?„2þyÐŒÝéO\¥†`-®‰æªHËÙxŒÌ3”Qq2+ãµæšîžNŠw¦üìbàME„ÖòÞMò'EÁwÿQH…ÐßõÀ¢,”zo‘#/È¡óò´ÁŒ2ìbµ>zhSŽFéa¢Ý"LJ2)p«Í `¼½œu©â×¢5R€ÛÆŸ@ü®T‘æàv •Š(·Ú0„X‰ÿö¿^’”“é£B-îro„$tÛ½¨rL‘⺠¾st„)ÌÁhå^„ä}cñû]Œˆãßlè®—ÓfÉç!t9ÂÛŠæì1š“•P-;Žþî)Û?ýå1:Ý=OÜ»Çä€4;s,’½Bå%rö ­°ë¶QdÇ‚ëßÃn{¢îÐìÐÑÝ,ñ~(Â¥Ä[‹ó.ZÉt-zþ˜“¿ÿ6笾¾BSLi"e%´g—Uâ"äÆO®¡½^à9숺hï:CeÉ-Z@*O{³ÀõW7$3}q‚™d4/¿eñý†Ñg#íŽèoF×t8ïQ‰¦»Ž¨DÄú7a/oh5^t™Sž–,ÿð5rò”b®è:²K®þô†âé ²ùê‹oÞ2ý¿Aû 7_¿¦]·äǧ”/Np7,¿}ƒ9ýˆùgsêo¿§ZuÑÚ&€*RBßÑ­;Š?búù1¾ªéV]¼–VQ€T>-°×׬߮±ÞÍ·xxQ ï[(ÞMwz¨Qú9Çï1Å„ñóGÔ篨 òŽ€èg~¦¿õñÅsþ7;‡÷ÿ—žÃ‡sþ«žs €M8ùOŸÐž½¥ïsk¶ktž‘‚ßÒW’é/æ¬~÷É“§P]S¯:T–‚w4— òÏ>c4ÜüÓ÷$ŸÇ4Ô‹+º&zÞgG3Ò£˜D(Cýê%Û7–ôHãzAvt„ÉD,‚SÉÍï¿f{Õ¢3=8¡àl‹ÊÈ'†íÙd:£8™“Î3¤øÞ#Cè:úÊ“Îrº«+šË%Afä&l¾ ÅùÔÄ4Á.Rd>&™–à=¦ŒEÿI€Òí¤@f)ÝÙ+.ÿû7ˆ£çœüâ˜Åÿø­M0E†w5Á9d6&ÝWïÊðn@Øîÿw´‰à¢«SQ 33<+ÜåÆTA·¾¦¯éÉ|@3BZÚ«%$cFŸ±ýúOT›„“ø¿9§z[“œœe:®ÿékšFF3×M¡ôÀ{jH숒ù4·Üs½xg~_!,vSh…]ß`kIv2(;®>@ ï;eì®fë°­ôDn·h­V¢JCwsA}S‘NO1£€¯*/WU·ÙÃëzçÑã)é|Œ[ÝÐ\Ý Òé|†Ø%0ÊH½ÙGT#b ä»qÞ‡çj$v¹ o$É| pëFÑïýÎw¦îþaÔ)nkª:Ö¾¯ê°ÀNé°–ñ‘Oìi/®pªdôü¿¸¤o%å‹'dSC’îzM׌1t‹K‚È0¹dõÝKDR"‡ëÛu z2Ft-N•Çc\½ŽL=¨mÝbÆ3Òió.¤Æw=ÎKº·oX}ó‘¥·A*rÇËŸp±Ú™K¤xÛ„º;x¨1ùQ÷¤Ø‰Eþñ ’}Oë#„$„>Š(¤FIŠtšÑ].ð*‹7[¸¯:*/½sÜ&à~º¡+”C‚‘×áŒ!!<Ðb½kž.„º­Ë€Ã÷vßï¿Á£ëÁ¤d³ tý¶‹jH¡ÒãCR\ŒO§»{9Ð{t)äÐ¥EßN!=®ïðN\´L2£’d2"Tkªëmô9 ·hõ®£Eˆ[m±] [‘yAZ&ô׫è©-®ó¤ó»ÙT1 "tѪ(+¢ÅTSÓ×ÎÆÍN'ÑñÅv™äÓœ~¹¤«û¾#ÃÀ©ó¸®G˸é4õíÙqÀÌ(Á× ]Ýßå…ÿ¹Ó’ŸsüO>ÇGçèš@)ùàDü¯ò™þÖÇÿ¯ø™þZÇÿïpÿ Ÿ³·¡ÒY¯+œ‹éd¶ë@tZ C‹uŠlžÑ^®âK‚‘{k-}Ý¡çc´ôt˧1Η¨a‘z§ËIaB`·›ÁÙA`»e£ 6?„6ùÖ¡¢fd4D²er”ÛÕ „Ufƒ?µDÛl±­C)vµE&:¢}Rb›i2L&ñ¶®£ƒÅ(Δ&çˆàöÁ;°DÈH D*|µ¥¹‰ÞØÙ8¥¹ºÆ×”Á¯ùŽ£–Ô±PÚ9}üÔCˆ[Jà΂°žæÁçIBpC:ü“Ž“=ÊñmC_õ$Ó!=ý²E¥)f\ BG{³Æ:±Çó¼·ûV…”‚l´b *úC‹ÀÏ1†øHCz±¸¾BSÔÁD: qæë-s&î¥ÎTÑ‹Û÷-}kcØG¦†TKÂßNW¸‰‚^à¨}#Âûꪟ®Ãög>•áqÖ™ÌM~¾‹å½ão¿;qû]ÞVÃoé˜r¨a4Rz\×âœ@§;δDr´‘x<¶êpƒgzÔ©E“çüžÒ'n@’c„·ÉÒ¡ö³x+žˆÂ{d‘"U ÎñMƒ«{Bð¸Þîèß,1ùdüÙG´¸í~î¹pì3à}Ãê»—`&”Ñ©Äû]A'ît<á°Ká­BпYÐ\¯é™F+¼€|ÇH<ì¾¹‰:Œz=,åÓÇ(Ñ`ëz¿`©pU…õŽŠx¡ÜGAvbç´ŒïÝl!Cf0fø†»CP _¯é–ÕÀé.yˆ°K¼‹7{è:’Ó§Ì¿xBùšÍ›-z<#xGñtÄö»ïØ^ÊÓc¤l >E‹Û¶·|Ùû½uÈ´De×l Þ ‹ ×l"×HO˜ýòˆõŸ^’>ý˜ÑÃöå%]%Ñ¥¡yûŸÎ8þÕSª—<®©‡U!³•KúõŠörƒyü„ñ³cBÛb7KºU‹,G'%n»fõý f6Cé–~ÕÆÈr)ÉŸ<&ŸgÔ—Ò¹aõå+Ôì)Óg9˯¾C”8úå ë/¿¡­3Šã”õ—ßbuÉô³„í:Šh3Öt‹kª³ŠìÙTذüꙚèã*ôd·(¨±úW)&£§h~2Etªë z4BK»»ù?Ð è/ç, )gäFtWÔ×ã_|Õ ]—3ÿÍSêï¿aõª"=*¨Ï×Ìÿá—ˆ¦Bæ)ÕëX¿ÝbòœâÉÒYF°–úÍkš æ¿ùVl¾¿AŒŽ(Os6ß}Çòõ¥E% W9ÙQ_/ð>%™Ï0yŒü•Jáz‡wà«5õÙ5˜f¤cq‘‘ÌsB_á:ïM0ÜçkèWË!86?Éñ#”¨X¿\’=žªÍ]GŠÐm™I'Ð÷·Ö|ÕU;º‹@ñÝãD¢pë%õÕŠàÉÑ1él4pôï‰*ïÔ†‡èà •Cz8ÞÄ÷è–Õ­°t·bPEBw³DSLA¯~µ £3OsµDe3’É`“‹Ž‰ÎÎb·£O?fþËÇTß}GS§ŒO Wÿô5jò”ñ³ íùz~‚Ö‘HºË+¬51iSiL#Aµæò‚õù–òùsò‘BÖ_}Ïúlƒ.°{ÊåÎZML‘ø@‹÷¬—›§ÛVȬ@Üçw„±áǺ½{“À0¨]…‰È«·îYÀ‰ÝM¡£•ŒÛÐn¶™#”r±KÝñ–¤ŒƒSd‘;ÂÕ%R„Œ±ØøÁz…»tÈ ï&€J ¡£¯ûƒôÆGö~˶kã{4¥<=FôQÐ(L’YNsvNS Ò2GelŒ­ŽŠl±ç) ¥nT1¸‰„YN#:Ò6¸¦]0z6¡~}š‘Ïúå–¾ ¨LÓ¯¯éCÊøñv¹%‹ë{„Æ—~×9:\ÝtB’'Ã{[|ùÓÉ´ 45ͪF%9: ôÛÛXLfdÓŒn¹E4Õ«K‚.)ŸŒi/¯Ù„òqI}vA·“KºUF¡LŽ6·ÃL3ð–nQ¡ÆS”¶To‘3©Äžw¿åŽŠçˆ¦ÿ8ìû— ?u¬BgI¤Ò¬¶ˆ$C8‹u¥ÕOT÷?—Õ÷—ÿ·8ç¿äøçü¿å9ïã•ou(¦(2©è· ÉÑt[¬5Œ?9Á^Ÿ³zµ&çØÎQ<=Â-ÖèÙˆîúŠfm1E‚’5.1™¦yó†Ö%L?{Žt+ê‹ Îj²“’~yCµlQƒc“‚€Š¾õÁâû@†dš£ttê°›m V×ô r’RÑo6xR§¨DB?¬“bŸ'… BZ\]ÑÕΦHÚXv–¾îÑy†NãDN"‹!Ê$Ó¥ã”Te ÍÅ9õ¢GEÚuäTžTz5JT–¡ÌÁtèÚÿ6voU÷,y”Ýñ½ï™w!hòîu(Äí$6xšdZ ‰>ÖÝr‹k<Éñl×îшt^ª5ÛóAš[çv­%;=¡8.HìòšíÛ2Ÿb2=P-ÅÝÙ²Rû”¾;4RvvjâÚ³·‚Žn&wBQÄpÎC}¡Õ°ï¾;}[3 c衽-襖¸¾,pcZ¢4ú†® ˜2‹^Åúº§®ÐBÅÿwÇõì=uÕÏ®ÃDÔC¹.jtží±ïí†ß[>äÇ=„¯„!%’ûA3© oÚÐg†«««ñ>E'Ž~Û‚Ê0™ˆiˆš†H^ödC¨^õê5]›PiVß½E¦Ñ¥ ÜálÔ3˜•Æ Îƒ6èÔ`—7Të–dë”d–Q½zÃöº#)“ªî èüÍMÊç§w“ÔßP@豫5Î ÝöühPÞWÅÞãÝÝC_è]ÇêïQèEŒ‘î— úM/ÌpK›JÆ V lÓìGL»·*ÞüÞ¹÷£%Cô§Lrdjì`¢‰ºošá¼%2ˇexªŠ†ùvð³ÞudÎ;¤2×Gûïè‡.Úè–záÉÆå7稼Øç ¥ã˜BÅï¢[nÑ‘åžæÆQæ æäÇ9®ÚÌŽIÆH‰Ý¬h®Ö1L#Íщ¤[6$GB½Äu’d~„)5¶j°m‡.Kò“1ÝÙ[V?\¢§'¤#Ms}ƒÍ¢•(;Ìd'䪣˜¹˜Q>;E‹-«o_TÌHÐã1‚™”èQy¤ö¤Ý>v¹Ý$Ó£ò{ý†Î–”GŠÅ—¯ISÒva]ÃzéËUŽ0erëä´³±˜n›A|ÞzÌt>„_ÙÛ½}_ Ä"P(R]c±êû[$2Æ¡û}@ïôq!züJ±úÅ’úü† ïЃ½ª°nHæâwe"ÍÏM2±Wb“ðìf­í­¨~W—Èd8ÞÝÄVô«%>hÒéèÀAd—=‰…ô‹”èÒ ¬ß×GÁ5ôë3™ „G(è×›HÛ´$'É&)}Õ“N „mé6m ‰këø;iŽL5¡«K¿ˆv§GÓHƒü±ºêpÚþPÔö€@ÛÅg2 ØÕ‘H&wýðvþs¼¯ÒºÅ ý¶ìmïq={´^ªè0&LŽ0rh@Co#@°¥&6¶M³ý¦¥üøò©gù§3²ÇOIÇ Ýr‹*K”vl8CÏŽ=S¿9cûv3ä}8T1¢x2¥_ÖdÇ9ë¯~@=z†={yò©®Xþp³§W ôo—(3ÉŽ¦CýžáíA"U ßlA›c«ß‰–¿óÃÝéþ¸û)\ˆ¼!ïîzMß^Ø:Ö¾¿;^9<û–7‡¨Hðà%ÒdˆDÞâ„Ðú~˜N¨A®Â÷CàÛŠnÓÝÞ¨|ðHc}‡0)Â;ºªaôŧ·¦ZHFOøT64•¥(#÷‚Ìn±F?yBQzê+Oq$¸ùÓÙãcìê¡£Ý÷1™J%"Zð4¼È(N Ú‹5ˆ@_WHcÊ„~»¦YU¨´@ô-êø„é³#ª~ ^Ö¨|F:R4××8›0þø1ÅãœêÕÕE…4™•(ÑÓ·P<9Â.7˜yJýò-Ö%à;<Š$+Æ£§sŒªYþé r4'›(b‘ILªÚ,i7=i9!°«Kš²qJ[Y&±ùò[:§Ð&gö«ç4¯¾§ó#Žý”öòÛ%¤ãÀâ?Tz·1à»=£‚¥Ù6(cºü¿ aç±l÷ ù¼Ä×5¨Sjd¦èWkÚu}—SøÂñÂñ¿Ó9;‡*¦¤¥ÄnZTžúÒ7-¡×”Ÿ!ºŠfaqõ'sf¿üš6?,P£)ÂõƒX*`ë™1y°ŽáOz<%-=‹?ýfFZjBˆI¶Âwt›„ÇnúªAf%: ôµ'•`k‚×­oùˆXšã)I®©~xMµÜ¢²)I.hVkt>Eë[äX è§k¶‚–SÌ%«?}OHʘЗ¥ÙCH*ŠÍÈDônDðJ‰Ý4¨éwý–Ö•ŒŽ%7x IŽÒz_pß‚S!¢‹E‰ÎÕöHgp°gou@d’!åÎÓÿ>z‹ìd6Š£ð°³€­é–í`Q›Î‹;6°BKÚ˪“eû4ÝÐö4oÏ©–Ûè,ugíômPâ¾Nd’ŒŠÈ™ê© ¯·ØÚߥÆÂ`Šì^ú2ÈDÓ¯—8Ÿ’ÏJ¼í‡ìˆHÇ .j‘d"bý#²½}ßA\M·u$“)R„ ôÛ ®ø®Áö3f„Ž ò£ÝÕÇwõàþk™H¼k£05P&¦[:´Dw èêªÛ‰l ŒªÇ5=B¥H£bÝóòüsâ˃@& o;¼ îcï©ÃR§u÷µo›“Û«B°UM?ð’}oÉžbü|JýöœÍ›5*ÑÛ#‹éðï ²'cÖüŽPÌ`»&ûôÚ®X| {ëîÐéÑqP@‹w¢¼o?xp Ý¢&}4Ãm–ô[™ŽcÜòý+úäìÅ–wà]ÜãÝ÷‡ÝÌÚ[Ȉ$£~»¦[Uƒ Ê0*H4¡ëùóW9I£rºmð;ð³æ–:²ûtÁß±˜4vK¨!…ÛQYÝÜË;;xØKlSc¦'dAõv‰)'$ÓŒ~[E£®Á–>ºÈãÖ´ôEè€*fäEõæ5šE«ë1ãŒàzúÆA߯ j:";šB×Ðo›8® ŒÁVùé#èV4•$)$íå²1åéˆúõkz›0þø”þ朾¶O®íIަä&ØÕ‚æ2Ƴ&“„îzž£´@«jÚË r?G}í ÙqNóöçeôñž]C·iH&S’yFýú rʧsúå ®ó¨Ñ£Eߤпò™ÎÉ¥´W ºEE1PAéaÔud¸€™Œ mE)* ô«íyÿ‚z÷zÃÞǸÖñSH|¹[jd°Ë%ý6 µ@˜h©cÛþ^sù¿ùsÎùß \ý[ŸÃ‡sþ‹?ÓÎ}SÆõc¹A3\ÛÐ-²“)¾ÙÒÜtd'S” ¸^"”¥½jÉi/.!cF:Ut77´ë–ôhŽ) ÝÍ*n;iŽ’‘t§REwµ$$)Ø¡|ß Ê&q´Ë†l^Ð\\áœBÊ8"V£œÐ4‘fE ®ˆN% “lÅI­V…”غ‰"¥TálÀ)¾^²½¨)ž=nC³ØÆb@*DCDdš“LGq/“á.j'*Ñ4çW4ëdáp´Ñ{Q`eÉaòA)$Þv bMlè[\íУ2ÒúþÎïç{‹*Æ$“|¶œ,„ %bñ¼‡Þ¹E‚wh¥ÀdD››kšE{ë>ä¢NE}OÀ6X¡Á‘Ý·Ô Ÿ’"J-rJÛÛp¦•°x^¡÷ˆ$EØh«§Ë(v´Û:nyò@ôwh¦Ž~µÆÛxîÊÄ´ôôa7tU Iº%™$To¯DJ‘*G(=”Ý®&Q·Üè©”ƒ™Nö¾Ñâ½Ñßï©«vÔ’í–nµ! #§Þõ Ìl‚ð‡ Õï¯ ï¿¾ÔÐ/VØ>ÜMÛý©åãи;„J‰Þ[!2Ø»*² âôCâû=™ ”¥ÛzÒ©¡:[?}Ф£½^¼ŒÏu…­-rK…NAZ\3¸åÜlHŽÑ©£¾ZÒm:¤Šžäá0Ê{Gá=;E†ƒ Þ! h»u”ŸÓ_œÑ¬ÁŒG¨DÞR@Â@^WštV p·wÙ]h…ºU¡å]¤únœÎÝ‘ƒ’ø¦wH´A% ×W׿GMÎEˆJÛ´@¥àº&"¹Rü´):©S¤÷L¾¥[m£bX œíñ»èíuEþÑ'ŒiÖ_¿EÏQ>Ñœ/¢çiè©Înå„b\â]M¿é°M ‰"ô”|ëo.Qã9J;|ïÈŸA×Òn:\µ¦:_ =fþŨ*ª³Kl×#UŽ)¶oßR|ñ9²¾d}%(Sê×g„ò˜£/æÜüß¿£cÂéþ”ê«/éBŽ‘P_­È^|Äñß=¥»8cýõ[¼™2ýtJýú‘Ž’£»¼fùý}tÄøtF{~Fßk²yFýö’ JQµô47K²ÇO)N–|‰ )å³#üf‰mz4&›¦4— ’'3ÚWg´!?ÎñuŒ[퇱Sp1Œ…SI¼…ìø%:‚,Q²b{µBšä^Í_Ñê+ĸVSRœžPÌ ÝÅŠfíÿâ„æåÔ‹€Ô‡Ä(IWE$ú'‹’6vùñé9|8çÑ9g‘Å„òøˆÐµä§ô7W,¿»fò«Oa{ÁúuÃø/P²¢>oÒÑ·ŠégSÖ_¾AƒÈ/5To_Ón<“Ï?&i¶oÏ ÎD*Ô Þ–‰§9_#³©Bf¸fEP#¤]Òºœ£/æ\ÿ߀d‚RnÓ’=y„è*0#¤ni¯¶X}¥u’¢³•|oÑù3IÐE‚L ÝÕ ‹ÄHO»µŒ>>Å/Þrù‡ fÿá7ˆÕ‹7™`ŒA$!4@ŠÎ HM:‹Á½DcÊ„õ×ß±|³F'úÐ@â@¬´A ícV€’ ï:“LÒXtkÚ¥áªÃu-ÁÝ Å‚¨¼DçILîÝ-ä!•Èd( ¬Óî<`o¦ó„Í÷?°>ߢŒº7ª{·0SÚ ïPín ï‰ò¾3…¾s¼Gˆ”d:B»§jÊDb« í²"h… €ÌÉÍÝ’nÙa&sTÒÓ.WØ ’éÇÄ_!Å»5ÀbMßÙd XHæsüö _1}’P_ôä'†«ÿþ'D1GÿR Zâûßݦx÷]FG«îMôE„B"U¤öø-cø¼2ÕxÛÒ-«˜¡ª˜°©2L‘³'yï?RWí¦Ú uÀV[œ ïäy ®ºccBfÈDÝ ûAXºõßïøä»Ù~ò EÖ²zÛ2ûdÂÍÞ0þÕç„åÍbKðÑe'ô5¶µ1f\KDH¡&¨œñ³›¯Þ~ô1å\pýÇo©®-I–D¶AÝ`딼ª<ØK÷¿wÚŒÁÒf¨®ý`tíým\æé r0{w®-1ø†ËÅ>9ägŽEŒ]ƒ]W{·„º{? –ÄtCßw`ßÓ½[¥äPè<°‰8wÛ‘ï®ëÐe'ø.ÄÏßôщ¤ªAÆ(êìÑ ·YãE}@• tݪF& *O°Ë>ˆƒn[IX=¢§¯{̤ŒŠZGlvµÆf‘{FW‚&9žBßÐ.6H!­›ÁB/ÞÄJGû#ï¿3U$øÎFÔ™žÌgÑJª©éWÑUE•¸h7#«¼Èûs nU!Êa-A%(ÑÑÜTÈË®·ÑjRJ‚ÑÊÒv8+MHSt–DІׯØ]Ú6_ik:dšaòU¤ØUtB’y#wÅ·>t7KooGúBJô(Z¦u«™d‘ Üy’ù»ZázÃMH%QŰÀ6 vÛ’Ï «é '£˜—°ÝÐU Bfè\ã FªX #‡p”ÁnÔEÁÝȉÂ@èVÑ+:Šã~ ÉÛk¤ ŠÛXô¸&1>»ïbq,ïퟻã­C¤9f”ǵúÐ’Ž(‹õšx°d¸OC‘Ja·5®íРüô±‡PWq/¼ìŽ&1†ÏÈ$Ù'óú¶C0ˆ­Eä:ærúèû>g²z _Û·Ý:&PíÕ^ÜEbPIL[öÞ¬ ¸–€!ô‹:ZüÙ.ÆÇëdøÙE×Û[·=.£¥á»ÄÁh¶Ð·ôëmD•Çå>:;òÄ7¸Ö#• H!†@ Ýuòð÷üÐ-@¸jçÄ^ö/Y+~¨/ß2Ú*FfÃíy‚Ã;Ta÷ê8™ïìõ¥ßO \Uѯ¶ˆ4Å”9®©ðVŒ2ìv‹—‘z¯ù€HÒºv}D ÿë?þz)L9™ìmìÐ…lìn;w ¼Ûõ fÞ2II¦iìŒ\¸sv1Òh\•¸ûá!»•{Ü!eŒ m¶ûhñ;‘¡ZXȽ¯óñ„`ÐEŠ·ÕA7ó3:¥!ñH%2U÷,k$ÁÖ´7xd¤mô]Ô-åçŸqü‹ÇxpëK6?l‘©¢½YŠ®ê9þ?~Iûý×4vÂñ¯žb¦)õ÷ß³üò‚ü£OÈàúŸ¿&è»^f×ÛmÃè—¿ 5+n¾Ûrü_ \Ëu××4× r‘î# ïê-zzBñ¨ ~yF·Ù‚,P™¤½¾¦ï<21$i‚4QÄ‚ˆE½)ÙñŒ`7TWx$®²Ìû+ò© >[R_.ɘüñ»¾¢½®Ðy‚m³¿ÿ#-"•ÜüÓWôL(' ¤ ¾ZP_Z²“< +B‚L2Tؾ~E½²ýÃß‘ç’fÛ#|Kýê —Ž?}„[oEN:Np]G¿õäO&´o_³½OÆô‹Kêëõ-ïî¯k=Ätã=2ËœëI'Çè<£x2!I-oÿß¿'ùè3fO2.ÿû—„lÊè´¤y}NS5·1§¢¼ÿúLjòþ78g1¤ïE¿ã`cS™cÊGGø®Ã‹@sƒ9yFq¤i׎´ì¸úŸoIO±«k„(HçírIp)ã_œ’ŽS–¿û’õÙ‚dö˜|6&ô+¶ç—¸ È¦sÒqŽïc!ëí=>aüÉÝÙ+¶¯¶Èb ÔØÊF‘V_±½Xе¦˜$ÁL§$ó1É(AØ–æ²¢¯647[ÒãDØÒÜÔmHç3ò''P_pñß¿FOž‘Ï\µ¶8…™ÎÐY\S÷E‚‹!É$xPiàúŸ¾d»°ÑnSňg¿§ŽìqÛÁþN™9„›ì&rÁÙ¸ÿfcÒÙ\cªýPðì÷ÁáGv‘IÆQø¸+Î#áI&QËáÃ}ÚýxçCºLXþék–¯WEßé>Â×61†\ uk†ñsø½Bâû– %Z›ƒ=:D0($¤ó)B„ tË%¶v­±ëæÉGÌž&\þÿˆO ŒRضA˜˜¨ëk»ôø©ê³%^ ´Ièñ㸶¦oÉdÎü7!}Ïöõ™gøzE¿…âñ„úÕ+‚.ÉO¾¡º\ ͘t–‚ˆuJsHSõ§1³ J ·‡¿ø¶¢_.Aå˜éI Ô"šô`7ëhü≿¥Ã†{x÷‘èpš‡D(].qáÏ`¼hÁöØmËa×hûv¸.DL[–ŠÐ·8k#8ë,"ŸqòÛÏ0¢Å‡èѨ4ÁÛžúü†úÕ~tÄ£ß~BõõWt­aòÙ›?½$3|}IWƒsôá–¬¿;?Œòf²÷øÛ[ïü…D7AT†*…LÌÐUó~;9D<öþÖü'Þ#>§ÅÕ-B롈—¨<b¹®ibÄëOµ?CÚÍŸ×&EÔ•‡ÂcêŠPràíì èÝ^…,³lä9bç¯vQæ¹We†»®ð!`F9R™ˆ\ø5ë· á^\ið™F>·Û6 $ªÌÁƨTß»¨föŽ ¡ˆÖGwðåÜ6 5*ÓxÛïUß¡÷¨,‰‡ c\zˆ×L°]´¶“1TGe 2QØuëlDy„ÇmDš¡2•Ý ÉXÆ Â®›¨ÞM®jA(ô¨ ômT 3b¼Ge)¾íQãa»½ÚVšh;%d‚Ê5vScŽf¸Õ Ûô¨Q¯¡¦C(‰Ôß÷?}­ü9Wˆñw–!Ƴ @ÅïÆ÷]¼ñÓ”à"Q„ÞF!kÁ‹½ ôÃãÃãÿÑHó¡îÞé@Ç¥Ózd–à›™'¸ªA˜¥ÁµÑYš¡!´}¾©ÈY”YBh»èF‘ÅI™Û4ª,"‡v°“Jâº.®¿~˜ J§g*Šø!¢ÙFíy•¶Ž(±åoq­ž×N•F€ÈuUäqˆê":è;{o­d"ööavï"¯c‚a°ƒ“ÖÑêÀ‡8 ÀïìÞIC(…LtlFz{››è=Z'ŽÍIÛGEš‚ëcô¹Ü9a¨Êöïy°×õC`É@%A Š4O$fࢊá{ïvX‡Û¹š'?„a¹Ýg?ªÿ|úÖK9$$¿ïÀ=?p±G%ÒõôË- RE~°¢¶…$ôoÝEáà½v“ÇÁL`wÝ{Û ‹ñåJÔ&uOeŠ[oY¤ÇíM†ïþ¡Æ4ìâ¼¢^ n0b pwàÐÂ-J¬d¤èvåggûûç-‚¦JóWJ"˜ôÐ ¯Wq‡a¶K•ÜøÂd’lK¿¬bdwž‚–„¾l%ÑY‚¯Ûx½ï€a!‡ %†ï2¬Äý/¿^’Œ'§ÿåW$º§YúÞç@v•ìoÞpˆ^iB22øÞÞå4¿ƒ@Ç÷Zá¥[Ôì­< ¼åÝŽDh…¯Vt«ú¶8 CŒ't _.°¿=Ã5}ŽIRlYþáœô£äÓÀæûsœ/}rDwö’Íe`òÅsÜÕ[–ß½‰" <:3ÿ»§ôW—ô6G§–êåLŽŸ–Tß~Oòè#{±DMFøj‰µ ¥2d&±Õ sô”4­¸øÿ} i¯éƒ*„áïòVóRòJçÛžìésF¦T/¿¡ÙÀø‹Ï(F=7ÿó+êJ1úô9y®p> t¤ÀmoØ^,Úì¯Ó;ÓžôúñsÃf/•&É3T÷ƒöz‰:}ÆìEÎòŸÏÈŸÌXÿ†âãOP¶%hMq:¡9{ÅòÛ£/>A¶Kß½%ú1&qØÊ2þôíÙkꥠøè1ýÕßœQþâ—}qBóödB:K±Ë𾮨ž¡Š ¡®“9F·T¯¤Ï>bú|Lu±&z„t-ݲ¥¯[lU‘žœÒß¼a{Ý`Òt¿Ÿù¶Á‰„âùÒ,*ó=‚üш~yÅò«KzÛ£’t˜@µŒ)OF„ªEf!ÔÔçK¼0ŒŸ’йFÖ>No%1¼A úMK2S½ü–Å+„³d}Ì£ÿøý›o¹ø¿¿Æ›Œ 2ŽÿÃçäy …·–埾gýêŠÑ¯~Åñ/S}ÿ’öüš¶—ä£8¤ÇµÞ[c6ÑF`å@$‚&Í:»Æ@yäXÛ¡‰¸S3L‘u¤ïÈ<£}õ=¿{-b¥¸¥˜ìðà‘:AIµwÙx×Oø°¦’8Ûã¼Eê­ô;â´w‹Ð8ÁumOþâc&/&l¿yI·ÜàBJz;òÝ‚†ï‹à?€ÒÿÏx¨R7ywÓµà"ÒªŒˆ"pvQ ©5¡kQ“1JxºªMë òýÓ£,ꂌëJßã½ÂÌFhýj2Á»i@‚³=ˆõE R= Ú“Ç€•&,ݪ‰š©ìÞ…9-I]“p™%H)°m'«j§Ã462ºíTóèŠ$œG¤ :|š-‘ïÝpÿ;úU,óèÝÄâFæ9I‘â«-}P¤³1¶x!½Ãu®÷è¢@I‹­Ü`3c§Å^Œ¸£OÊè&eBûÊýýÜù»ÔâyÑRËż[·võÃ.Žü°R_7tUÃîËŠÀCd7¸a=¼ŸïÖL1hªîƒ{ï_¶Åž¾*¼G9JA?8i…> SYŠlˆHØ6&ìF EEÇY,Î ’I ]ƒí£h/ôßuÃ>%‘|pˆeˆT1žÆ ºn0?ê?÷µ9Ü{ í ½ç0rççPÑÅpïK¥ÿñŸgá®Xü{øp¾?Ñî“ÂêÂ|óøwoéÑ„Ðl°(­â„=I1™ÂVѲP¦¡vÓßy@yÕ;úY¬Vâ¿ý㯗˜rrôÛÏвÛà…’¸ÎFN¼õ[Þ¹A dO{±DMŽ0¹Æi *‹#é=zvˆ\‹¯³Øß<®·¸ÚFúÈ;‘âà9»ŽCã6KºÅ&vçº =Úyƒr€‹{ÈI¸ñ ·Üi »¹Æ¶þ¶Øºß©$èÂÐÞ,QÅGŸÏ~»¢_µœ4‹“)£'3ªïÎÿöSÜõ}—ì†æjƒšÌú͆ꢣ|V°üýã¿û{ùšfµyȈ¸×-æèÅ£œêl*Ƥ…cñû/©6†ãß~Æäùˆ«ÿñG¬˜0š6/Ïé˜âÉQDKÊÚ†f±!Ãì—Ÿ"BK}Ý 3C¿º‰b-pÁ0úèˆú›7”¿úÑm&§8-Ù|û=׿{EöâŽ~ýŒþzMè=¶îHMH2AsµbùÝ2ŸR>ž óŒdœÑ/ΨÎ-ùiÆê˳H¯Øl)^~NVö\ÿÓ—89còÑ)K Uhê×gX›ŒÁU=› UOsv‰“ÏNè¯ÏY|}CñÙÇÌ>žÑo\ëQ…¡_V¸^InþùO´]Nñè˜òñˆúÍkÖoVŒñ‰¬Y|ó&Ž@ ƒhG+MññG˜ÄÑl=ÅTh {è.pÊ$:ÆGOïFyßA‡ý6†r\S_®Ðã9é| ¶ßŸ›)dÂ]׎ަ’»º¢>k(?y†[®ÿùšV¢†ä¾ÞEWM¥“Ȳ\¯ •Aý-´«–Ùú%¢ºàúë„·èÙ#f¿üÙ/Ø~û†jÛ¡’ é=}S#“œòÉc²“\Ûbkç„êš«þ†>L8ýÏŸ°ú§ß£Ÿ|Æø8¡k™Qó+JTL™$¸Í–æfÐzç­'éñn£¼…–¸mÑÁÁþî!DÄtŸéª,Ðå€>ßùíîŽ÷ß§’ø¦q¥Þó£Ý!Æ»ñŽX@„ðî³Þ×­†wpôá7ÚQ2Þ·‘Då³ëz„J:¾Ž·=®sƒâVî›!Áµ?™šïbôxW;”Q1ÌÃ8ìÖa E{Saæcüfƒ %Þ¹=mO•y$®6¤˜RÓ^\Ò¶’âô„l¬«:M6Iã ÝyTb"ê!Ä4®ëMv4ßIA ïZ\ç‘RèTc·-æxŠh;Dž’” íbIu±D§dãŒþf*ZG™qsÚMC»©*Á IÐeNhªÈÌ4íå™'H ªLquE¿q$GS”´4—eO&#thΕ E¸½V¿Rd‚ÎE´a’qôãm†ì¨Ä×[ê›3›Rt× )i©h¯6ˆ,Ç‚êÍ%N$$E†Äá:‹seˆ`éÛ!Á÷ÑeFjÞâÞ_ìß ÙÉá{úÖÅæd“;© R ¼íè‹)F˜lçbçîã8P¹’R‚kÛH×çCý¡€þ_÷œ“|ß₤BØÌõ}ÛaÆ3’q ¶¦¹l¢¦Ã6Ñ…F‹ÁkYCˆM3*ÎÑ­Ö©1EŽÊ ¾¸‰ÑØEŽP‘Œ™ç˜\P¿¹ÂK‰e¢µVØíY;„×yBP˜DF›Ï4'›¥ôË%}#\Ó4˜Ì ¡[‘t¦éñ8eDKF—…äh‚°5Í¢3èª!2ô.>8ìÈbFïÇãa˜x…a*ºŒt½p¸ŠßùªÆY™ˆAGc7ÑY b™Ì³è/ÝTtëŽzúº‹û§’ݵ˜üf-(ƒIô þ1˸âŸwûüý_`&Å@e½=‡0L»•ÑQìV9’éZª‹%Öñ³@ƒ}t7D¤pïÀ±£g†wéØ"Nm]kÉžA»¥^6ÄÈnE:›`2I{}CßyT’£¤§«T^ ˆ,'&ô«šà$fšáª-õÕFOç´—h”–vÓ òõ÷½dGÜr…(JÒÂÐ\]ÑÖ“æ1&ÞÝÆ°‡`ñ¨Dp·5Ø¿(I¹ †ÚC}áéê.FÈKb´½?òy|¬9LS+jʺsàû^o{lkZ±Ž×£íñÁáƒ"?>Â$nÍ"’y†«ÚUó;„D Žj1„H‘ä´—+œU¨tˆlœã|äëï| óÉä‹ghi‡éôÛ«8Š Îc÷%zDêÛ“ÞÁçþ P ;ƒí{]Ãâ2¡÷wøüï¸pìÖ{£p«Ý²Žæðéˆôh<$æò¹7÷¹:‡w¼pd"é7tUÏoòÝÈɨdÈ$Ú Qq_oè–UNØ^sóÕåçŸàÎ_¡=Ç„%ÕZ1ýìýº‹^œ7-Ù“Sìâ g-}ÕÐmZ&¿üŒ4ëY}s‰0%*ó éñ”ÐõÑ©Ðxײýá UNðí’íÅŠôø”t¬±‹%¶³ 3’i]…k=bøme^ÆÍgÛ¢ò1R;Úë%Þ{¼˜bÌøùíÕ%›³uÃ9Oúì)³ONh/ÞRŸ¯@¨8&l£OŸM‚”´ç—10æÑcò¬¿~‹È猞•´+ÌlÂæÛHž¦{¶okÌÈЯ-£&¬¾üšz£9ùŸÑ¼ü&1aÃöÒcrO}yƒž>búÙcè{¤ôÛ•TH'ðÛõõ&~.%°u‡*&dG#ì6ÆHo¾ýž¾O1é à·UŒ1ãÁ²Õ÷øv ‰‡Šgñpåü:iŽ_·ÜénîÄ`¾¯Š¾uÔAc&Ýõ‘Qªõ† U±ðÜR%>„žn¹P÷bIzSïåœñG1ÒBÍöU IruCúø ùQÆæû×ôµ%L£N-O ïqõšÕËk¦¿ùÕ-Ø^õ(ßÃÕ5ݦF(5 Ð:™”=BáîÀíBˆˆ×5í²‰JbïÒö ™•¨Tðpî‘×÷õê½Sñ2ØØ55Ý¢”ïG C¸ ¾ÇµnðoÔ‘Þ ½ûÌàzïò¾Do‚Dè!OA£qÍ:ò%x¡=?%¬o¨–5*ËqëÉ“'(»¡µ £“‚æ|ý>…Љ;ô¸¾¥¯{ú¦§üè1IâÙ¼¾Aêf$ðÝn£è#™•øvK·é‘ÒàlE·®bbá<ÃÕ ®nðÞ`F)„[[„¬¤AÈ×{¤Î²£[USG ³‚òÉ”þzA½¬©¦CŽÇŒŸŸà·+šë-°M"¥|~„6vYãûž~]¡f'3X}õQ1~VP½¼DæÍÕ‚ôô1£G%ÝrK·¶{Þ¶ìËݲŠ1§^‘ާ”ËèŸ ôËŠ¾î¢3˜\ҭרrFqœR½¾B$#”rˆ$ÁU5^$HQÑ,*ôhF’©ë›(\Ý£²)=}Ócû¬C•cŒöô­ eøí–®q$Ó)ÒÙhÉ5ï¨ß.QÓ9Å“»¨±› ¶ëè›SNQ¦LJ{s‰˜QΪ——´Õ Õ9Ù8ÇnVØÞíG¡BŠÈ[|ßµÿáñáñ¯ù3„Š~ºÎ ’јé§hÎÏhkMšÚM‹ÎÇChG@¨”ìQFµFÏç[Ñ.‚û„:UH¿aýjI2-ikôxN’ î !Яk’ÓSò‘dóú,‚ :`ëi2‚ƒìéˆîím:1èq‰'±ä߮ٞÝ”Ai‰­{Ìx‚Öƒæ†߇î5­ß”!{TâV}mÑeŠo*êõ!$:aò„ºaÝ€ªX3L@…6ì0u¼µƒó^L‹ÁióPX?Ð «jØC‡ð˜àh×úΓŒJŒÑdO°› V¯Ö$å„dV SGs¾®&Îïcª»Õ‘$9ØÆz(9Åï6ÒÁyÌd„%±F8Âîìÿ¼[è"Ç­¬^^!Œù«_—BiÔ¡ÙÁP¼¸ÖF÷«Rêúo£}[úô)ÅXR_l‘‚È(N26ß~OÓæ÷{yFÍÑý–z)0yOu½ÆÌN(O úEE2cWôlŒ¯6ô•¼rw{-:‰IÎ6?S¿yC³ ¨S‚G¨S˜m¶Ñ±éNŠÎÏmˆïq‰ \iòx_6în.ǃS® è}ͧ‘FÒ×5R%H3 ·ÒJv“}y§ç%qGëvûæ»­ ÂÄ”fçBÇ<¶¦«w1ò)élF>-²£¹Zტ_V¤O“ëï^Óužlz‚É%Áõø^ •§¾YS¼xŠì74Ë.N–MBèÚ{´J&ųc¤ˆ÷GDa=é}ËÉ»ñá8†ëö€ïaòßAq>X¶‡[çá°~8sÕ»‹ËØ?ž‘“îö†½÷C‹÷ø>øúÄ×·«%Ýfˆý Ò}´*Ë#-c±Å?!ŸÚóKDZ¢Ë,Fdn[²ã9R¼P¸Í&òi²4Žú&Ž&„0úè1~sC·uƒ•Œ›€¯èV-:5ئ¶}A’O°7K¼HHOJüzEд®Y}{ŽHdRNRÜfCñGLfÓˆ þÂ(ìêÛ(²ã‚îòš T¼€“$Fzº0Ð%$É|ŠJ%íÕŠ`{„ÊP¹¦[^cIùÑ#„­¨Î¶dOŸ üšvãiÎÞЬCüóësdyD:5Ôç—¸. ŒŒãÃé‰Ã6–t^`7-fdè./©W=Iz<'%Ã8SC¿¡zsȦdÇãȉ4Ð^\£gGô‹súN`Œ@3ŠG3ìòŠæb5ÚÄñS– ’!xÆ*ô|ŒN$ýzM³À¹=É}E·qdO±××x•¢”Ç5¶m1ÓG¤£@}¶AOGˆ>&  œ h“’=9¦¿¹Æú„ѳ9v±%„.ÞN“?9%M£pmO}~­»wyûÿªµs,R´QØÖQ~ô„$ 4« ›7WÑ+ŸÛC6Ÿá]oAJ’<Ð^,èêª:‹ÌR’QI–~±‚¬¤xúz\oc¡á6ß]£fsŠyŠ­+ªW0šS>šÓž½¢·†òñ”êÕ9Ù³G¸ËrzL:’‘n@ØÛpºjM}±Œ‘¾H̤Œ€Jß5„ÖcfsÌ$ÛGZÇÍËG›=ç÷f]ª×g4‹žüøh*i£w~û’Ç·íQ]ðœG–£(!´+êkKvzD6Ëé®ÎX½¼Bå3ÌÈà›© Áö¸N’Ï0Ó »ZÒ^®£9P8L>™þòFô{ Ç¡e‰_Ut[Gz4Žo¸go$Ä{è;!,»‚VìxÖ5Ýzà…÷sï ò„þ憾•dÇÅà‡~œìþ€ˆð½Ç+ðM÷"º5„÷X­ì;PI†ï·´ë3“dÐÝ,A§è,'¸†vQ1úücThéZ‡]¯p}B:‹7kè¶Ô7+P×ÊÓ#ÜfIß)²Ù¡{9Þ®i× :I°})r¤Ð¨TFW¯)>9Æ-®©)[êëML1’Åñ˜ÐlãWf=2É£cÅÁoÚ ïU,«*þ[Ðè"CˆžnUãúx3äÏŸ“Oª×gƒ†FA»YàmÆôÓS„ß²y[cÆcðA•ŒÙ~ý M˜ÿò”í_!FǤSA}~…ëf”!„AèbctÉ®ZÒ“Œæõõʡҥ5é£9Ê8úLbÙþp#‹Â—¾‹â&=c›Ë3¬Wd“R›xíÙ×6ôUƒÊG177ñF­B0‘.ƒ ³%„ 3ŽÔ¾–¤ÇãØ ƒ4»íè¶ù³O(çå.0ÇcpmMJúõ‡!- ’II¿^Ðu‚|2Šb¡ÄššzÙ’ÌŽ(æªHpuGuvN»i£¯wxÁìϰ7{ÉMü+ÿ£Ÿéo}ü‡sþ—œCð´!Í ]Õ3úøy©éÖV/ß"ÒzºÖ’MO²ÆÕ`¦’Q yuA];¤Òø¦“Sͺ§½ZáUF~2….&¶¦“Œ~qMuÙ Ëå‹9¡Ý°üò Š£“cú›·4•§8™RŸ]“<:B¶ .(ÒÙ3Ò1‰ÎDÝFwqÆòû P):ÉIÆ#×Wø^¢Òt˜NˆÑ¥&›eô7kœ×d'cÒyÊúëïX½©(ŽÑÅmÂÞZ*]Lô;[·V„Þ"óF‡ €Œ¡-2Ò»E…³ÑnÎwU椳œÐ¶tË:"ûR„¤x:¢¿¼bs±ÅYORŒÑ fT’L D¿¡zuAßF/ã›5Íj ÄÂRè•j°.þγ"ÖþGöÿCÔùÀŒ*1èQNýê%‹ï®Qiòó®íŸs­Šè†TQ£"bj ÷!:„$#¦/¦l¾ü†¦“„Ö1þüãÓ2:E çÚ–vÑDW¦Ö#LŠ}ÝÐo-2Í}tŒ°[ÚU@çš$鬠»º¢o{\Óã"P™D¦šîü—MÍ5Ë?¾&$© ÒRÓnØ^“”%ùQA¿Zã\B:Ý%ð¶· Îï£V‰{_ÒÕ1A ²WßÐwšlšâÛîa ×}kºwÐçC€1Ò£P6ê…ÂCˆ¸tô{—ƒ†HÝnè¶3ž`Ê[ûºýäFXºÍ×JÒù”`W¬_]‘?ÿ˜ùp›jH”ìh.7•!èè75ùGOÕ‚í›–üù1å³9ÝÙ+n¾z‹*‘޾« ƒó‡ïc­¤2…ï[úÅ6¦ŠÞ"Ðj’ÌFQ°„x@d"¢(P„[hï'Þ/Jyȃð¾Š3ˆ!œ‡ý™º’þf‰HG$Ów˜Æó^«<ñðfÞO£–Móãž'vM"ìÅ.v¹&$%ù£Âuxï÷‚[5ø6Z¼éq‰}$Î'„ŠuUKöhÑ\£q›5ݦ‹–0DqŒÊKt.è"Iðu I6ØlU$ã=AWÓ-;d*è›Á=B`¦#¤ô{îz>¶)ÊÄ‹ß °„tt‹%®…ôdGŒHpÍU…T”!;™ \‹Ýv¸Þafc|ÓÐo›KŒFe9:Qø¾Ãö’tœÐ^žÓU‚üô„d’Ð^]G.Õl„[/‡¢:¥9» è’ìx݆nÕb¦c-ÍucJ¥ 4-2%™ŽQÒQ_Þ óÙ|„@ÐÝÜ HLŽo+\HŽæ„¾A`i—qä¦R3\ö 5*QZ`·U,¤½ÂŒ „kèëï!MH&ýrÐ9Bµô›@z<ÁW‘擌ékÌô_-h–u R„&9šàë íåš 5&Ëö;:74W¸^bÝðøõÃãÃão?3Ø5Êha‰"™¸õš¾rè<‹!K²ã#‚Ý`[…)íMErr‚ -íj"‹´#¨//é[E2J MÜÌPÑ£W%&S¸zC¿µC Ñyœ’uÛ UL0¹¦[¬ÐeAè{|˜QŽÊ†€«ÄÐ_ß`{A:Ié×éQI{y'T£ß´È4ß#MÑ0-¾>Y Ðo{³ÄÚHM&A)EÌÎ"»N\ÝDΩŽ{Œ»Y#³’t’Ò­k‚µø¾Cè”d6‰áW"Æ÷7 ‚Îã÷3§üv}¢Ç¸ªÂV ÎJ²GG„z II:MénVt‹Ml¼µÄ·6Fz‘’èšn¿çëñ•›[Ô}Çßᤠ®ÂCüÛá­èKÚuÅåà¨Ð{ÒÓc„­hnj  ÇS’BRŸ_ƒNIæ””ûFÉ;‡÷r@å}œˆx];ØÙ T‹"%4¶±èì&å=>°?Œó> F¹×‰ÞGž8^(…­úuw'œ"ÜC~…Qè—+PztÏåã=‘?jc÷Àñ@9´}uø™Â~\wK‘È´ˆJ)põ†æbÅ„É'ÏIsh¯7èQ‰«V4‹ ýºeH'cB¨ >EÑ-tk¶7 ó¿ÿlÖÈ2§yóŠfI®cìwU!ǘ<Ó\ÿóÒÓ#ìÍ:Ž•’è}]_œÑ×0ýâÊGto~`õÍ=64‹:/QZ#“œt^ŒSÚEDOò“2RN5Atb·×o7¸N`&¤w$O ›sn¾¾"ôVsô÷Ÿ#Ûk¶¯.éZÃøãGøê†Å7—ˆ~ŠÔýõ‚¶éÉ=&-r¤êY~ó†âÓO( A»íñu…6%+¶/—˜£c„÷¤3ÍöÕ[6—UŒ©UŠ sÌžëYÃl¼Ä¸‚ˆwfšïáÿÔÝò3Ÿó·>þ_rÎù¯Ãæ¨TŒ¾u=¶ê¢ú]ŠxJÉb"Óe¶é¢ØÚ÷të*Š¥µŒQ¿"àÛ™çÐYÐ"†£(‰TeIŽ%qssÛDΰÌ2°.®e‰Îìf­ûÈââF-Óßvˆ!\Šª(#/¹ŽÁ*S¸º. ZCç©Æw=„LõµCYŒÌö±JÞÚ¶RHlÓÄðÁ]ÑÚ~òíÜ"ÌÆÏÖ÷è¢@(ï%BzlÕ"Ó„Ðw1‘ðÐ1aˆeŽSÎè"„DÕ· x‡«ZÌñÑU´ËU䑊‚Be·ÙƽXÆÀ•Cà)ô1hB—YŒ1r n‘Ä[§ŸS3!¢ Ýî,?ÃßäÚŽ×E…ÖJlÓ•Fd ÊHúëÁ˜! Mû*1!¸wø>p"ö_ïðÅLÇa£uš‹M¤P=ö!ãºHqU}O'Sm}p¨¼D)Ý6¨r˜Ö´vد"wW˜Û¨õ0y¼Ï©b_¬»­ÿ‰ ;›â!ñq_3»Pèýñr_áÞó>Ñs1¢Úý€$k}T Òï»}FsùÔC©ŽÖŒ(ô(ÅU ªê ‘dié– 2MZàm@A¿ªÐ³:ôË5¶õ¨,EÒtVm±íPGëŸ~_[é€ë»¨9Î;Ø>ꄸò~ôü#ûHÕÚ¥ÿ ÷ÉÚ{Eí{eqˆXï:ŒááÇŽWÑG×µ-ÝM}Ðõì¼|C\¥&.Ü)ZÞݨ”‰C¤Ý 6ú™N“˜Ö$c”w{½!xÅðè?}ÂêŸþ@òɯȓç *ñô[?–3B%žíù9f<¥[l™üú$¢fõòŠìñ3FÏ'1­nÓ°ùá5ͪÂ9/×BB~4EÈÈAu„Î㛊^äŒNGô× £_œP÷}ü„l2¤=I2r¡B×Òofœ!BO{Sãmü.Ó㸎nÙSŸ¿ÂR’%í¢Š‰_¤x2ï.Y½Y3ýí¯Èó@½ìI¦%ÉHØåÛW *¬ÏVœüç_°ýãïX]ÃôÓH3AßT´ç709æä>&¬6lßœÑ7tvŒJ"—|ýòšÑ¯¿ ñ¬œ¡Å ‹7=§ÿésêï¾c{¶F—J{¶ç+Ò'ÏÉKóžúõKÄì)ógTgkŠÇÛ?}Çv-}ü{u:€ää˜Ð®Ø¼Y¢GSò§Gd“„îü’v§Çÿù×ÈfC½îè×L™ÿænùš«?¼%›NhWKD:£<ž¡SKs¹BŽf¤“4 wD@ ‰Ð†¤TÔçkBèè7£Ÿ‘”’vU±üê[‚)IA½Ü ‹ ïÒš>Dyˆòþ+³ïã½7ÿÕcúÅ‹/¯ÑeŠ)ÆQ3¢JttÿöþsI’$ËÒ?Fv8QUuÏÐLÓ¾äΣínuWVgf@÷pdP± d°?X 8ˆÌèÚ™žîÚ4¢$¢sWQ|ùÞs¾³¨P³ʳÝÍ 16W,Š‘Ç")Hgcp[š›žt–Ó­w˜é ßmh®·¨é^fŒžŸ’ŒSÂöŠËÿòd§”9Áïñ­D'$ÓŒ~½¤ß÷à{ší3:&(|ÝÇBÚîqµÀLg¨D '%Z;º­G™šýÛ ™ˆ»Ncp–âù»¼fÞÌfèÒÄ"S’IS‡âÕ’ÅýžÝ¢Giñþw*J„ëéƒæøýîê ûE‹)K|»#{ü6T7 dÅx4Åﶃóƒë,Ĝ۰3ƒ.J¤ìh—kêUÃø«Ï ¾fónGqô)6t}$A­¿û‘ŸPønGpò®“ì{‰'“!ùñÖˆçn dv+‹áƒ4 ²8ÍTi`ùçÙ/-:•ïŸÏ¯¹·àTü@t¯ºÚ2ùú &O&±ÁÙ÷Ôïâ»:“NQ²¥_o©–qRl´Ä{M†ûpGÐÍH§EÜ4…–êbMz| °ë%vk)¾üœ´èØ|û™Ïª£Yvüã3ªd·Š5… ÓS¤ôÛ$²© ¾ª(ž=¥˜ú–º’£^af3’IÑ~¿è˺ï: ¾ÝG¯ÒÃïè½?MeȤˆAGC}&x[ÅîÉ€·‘ß2‰×Î÷¾ù b|à(«¼DhJÐ.J²Ã"6L…$ôÍõ’ Jò£ýö†~/Hæs’‘)±û5õÕ†ää ³§9Ëþ3uŸsòŸ¾Ä¾='ä3úë+ȧ$iOu±B”sòYë,Jµl~^2ÿ_ÿ€îÖT×vo˜ÃÆ'‚ØõOÎ賺« Ávt«=jqÞ†padü¼MHª,‘ |Ýâšþ®k­‹_7Ø6>ˆzÐÚ¦Cd)fTB×bw ²Hñ]OèèÇšxîR"lF¢¾îß{¡ £ñ}NFSŒ¼S·Æ“ª#ˆH%n¤Ñxë”–1Ú×HTžá«6ú4!>&$â-‰dˆ8î‚ ˆò$ß¶ÑÁ/ »n©PZã÷Mü>Óˆ¬“Úà«*Þ+‚ÁLòëâRÿþó÷ŸÓÏm§IÄ)™š–Ð÷ôÛ¡Õ0VR™ÄnêÝ4©³È2GiI¿­â{"IQI¼ïø¼Áû÷ BÄÇw˜ù¦Å5ÃØ»H†òiBcwe’ÀmZÞ°Ðyë³¹]G"WW¤ J)0&â*×{Ð)d a  Òdpâ{ä ÎÆÉXÍMa0³ ®íïºÂï­Ã$ÎwÝð.–ñs 5è‹£&šÄ†HçA2îv0CHŠõìï)Yøx}>¨Bï¾W7Ln}‡@õm7‰ ÖÇN¢rl äqÚç:'…}£Å³t¸nDv®ˆëóߪ„ƒ®Õ"$úWŠîUôN ݾOåªH£–V‚õQ¢pÛ-U*†®(k[‚¨$v.o—ûÐ[|?e É¹íŒ !ÁÙØiö~(\Ãæ!#ÞVk¤ŒAqÎÅ®ç-š‘àþ6¸$†x•¾üSòƒæ.~ØŽ…¯Àð1 …ÃßÊù~(Ã|J"ÜM>ãÈùÁ}w÷|rûþÆu·wDjã-×;þ®C·}¸Ÿ¢'@ÜÒÆ ´Â5Íð,ÅçÇ;‡Ïr † JS=¶î@(t™àw5‰L£æÞw]|ö¤Œï$IÄÛLÌÝgyŠÔàö-îvBn£¼G“ÃÿðFvqaæAÜöqá&Bq¿;¾{ >è@‡ð‘‰ðîï‚T„Œã¦~Ó‚‚PÓ^ïЇh=Ü8âŽ]_3JA8pÃß/ù(¬! }O·mï’¡§[,ðΠʜàj|燮ô'tCw›†^!³™ˆ÷|»§]î¢ËÚ{\×”Àí{Ê/>£œfx!ñÍ–ú|(ædcÁöçÙÙ!4kÚµgôùSF3ê‹›Ÿ®èš™¤hc™€#SÌVß½¢üú+Ƈ ÞKœíi.n諎Ð÷3föÛ3ìÕŠv½ÅvŽÉWO¨~þ‘õyNîÏ×»=;áð7O®¢^qÿöŠÝ›ŠüÉ#Ò‘¤¾ºÆÌŽ)MhÞ^Ð^¯hª/sŠ£#²iB¿Ü“>=À^Ÿ³?÷ä&QCm×,ÿôŸÎ8ü§/ðË zšR¿½@OHçšêÕ%}-HOf¤Ó”öüœnHIÇŽÍ·¯ñÉéHb÷-ÙãC¨,þtŽ™’=:&uÜü—ï ºDxIñô1Úôl^¾FMN˜~vDõâÖL¿:fÿò5Î9 ºH¶¢¹n}õÙD²üö%Íj*rŠãG”&ô×ç¬^ÜžEž¤J‘vÃòO?ÒÙ<¥~û§FLž?ÁHOqA®.ßѬ{ŠÓ3Êǘ\c—Üüù%¢¡_Üà„d^bF :K°û ír‡ž Ïþå;¬(c0I¥™ ¾¸Ä«ã'1µíÈA~Çõ¿üˆÌgˆ¾!`(žã¶+Ôì­¶\ÿËKD^¢•oqNQœÐ^¿ƒ¤DyG)r<#Ÿ±ëkú}@&°¿¼@¨)Åñ„nu Ò ”Dg˜Q»Í¥Žãg$Ø=7ÿú#m¯Ñ‰z¿¡"¢ BÏŽŸàëŽìP±üã+ʯ¿ft,Y÷†ÍÛ5*O0Z“>zB¢7,¾[?~„pèðõžà 2/‘)¸j¢@êo-Ý"]ácáj††Z#½'99eüùíå9»—WÈ|Fzx@’µ¬þò9š!©ð6æàáö‘|u<Ão—tÛžôè€ÈøÞÅID®¢Œî ô=ÆN ’ÀêÛT‡2â×ß«ƒ~ÚÕ-“ßýŽu/¶£ß5p ——â=׿½è<µC¡ f”Aøëòþ¿‹ÛHˆˆ]îa?7h±ãAC‡Âÿ¦Þ ;•·é8ÃÞámÒ“nwàÑÝ+¥DŠá†×jÐj…è$µ•%€Ãw ³™Ån¿¯°Ö#µ¼Ûy:K£¶°±$Ó)I. €­:\Ó T¡Ç…¥ø}ƒF4é$£ÛlèZbX1*ÔÙ™¤ÓÈ %¤â­'xTqç¬F%J8ÚeËÁá-1:\ 3Épmƒm@*H2´ñ4Wk¼ŽNä°«EBh{džáë×»Ø=Ð ¥c×!ñ.Ì ÜvOÃù9åàzÚMƒ]$èLÒ-·ø ­¦Díjœedì*&“ôë 4Q-@h°»5›`¤§ÛUØ>¾¼ôhgµÅZJs” ¸®C%Âvx¡Ñ©Ân«øß úº µB´”ì.\Y¤‰´Õb‹PQ#ŸŒóè®ïJG÷xÌ5 ÷û:çã÷llPIõ¾øï?ÿùU?Q_ËðìèTl\?ô#$BAp ™*Tªqû:’0L $!Ø»î¤ÐQ3íûï 'VÑÐ6èeƒµ …»ëø©0ãa[šÕ‘¤q¢§¤ŠlzU–ÈžiácóÅä)¶ÞT‚2¦žE^FìÚçœÃy”ƒFÛÙaÌ}ìiô¤Ü¢éðž~»ÇúÀ§%½‘^¥¤Ah‰*4nÓFHJ ŽÚ5±C©¤Háé·íà} xßÇïP*î“‚ã²!vHÝðÌu²Ñài»ª“”W7Ø» ]Ü´‹-AÆn|ð·žš{ Ê]Þ‚”÷ç>¬az”£Œˆ!Ÿ¬ne™v½Ã[‰Ò¿û¯C\ïƒs˜é--õr?Lòä{¹ B\çÐeIRh‚2„®ÁV]üÎl\Âïã ä(îj ïÝ äðV`Æ%¦ˆïqçºH ï°uuã.&öªá½Žkn2N±»è7âv<¾÷èQT1ZZLSL¡è–¬¿×¸ÿ@†!ô]‡üþ‹•C“ÄaÛïcÑ;~ð…¿"€žy{--Á«!Â=ƒ1õPÆiGr SùA^ä‡ÿ?þ·÷þA­p?p}ìøÆúèö÷,Ά;¶šà;< ­‡p½àb˜™NH'%´5}ƒï”–¨2×PÀÛd:H©|”¿(S£CüÜÞ9\g£GL l×Ç ˆE³|Áôx„Î%Áƒ¯ºí]Êï×èb2ûÝs´ìï8{;jì^jŽÅ§Ž|Ì€þåã…ˆÅ[LÇÓ©ö'ø€ªB@ÎuOøÈ÷ýHoø .¥´×ýþ–½îFNaè ‹Da7ˈ•Ñòos Ó‘¨»7ßïéwéWG¬ÿüÙg_1>Öì^^Ð÷&v×{œë1§ó”æÝŠìÉc´hØüü Û'Ì¿yF·x;ÄàúØ‘ñ}M{³Â‡Œüd‚]ß°¿Š¼éÉ“ ݪ¥¾|Kßiòã9ÁZÌhDš;V?üÄîÊqü¿ýöW,^£´@(Mqö˜â¤ÀUÍ{»yd4õXëZâê=ÕÛkôÉcæŸOÙ}û’¶ $ãbð‰í{ú}Cùì9£“1IûögªJrøŸÑ]®Ð#Áæû·ÈÉ!vyMþÙ3RݱüË;’Ç™<™±ùÓwtLžн{K½iÁhp©SÆÏŸLM¼yŠÝ,ØýxAß‚–¤£ßDÄœk›h:’œ=BÙ%ë·5“¯¿@õ7,\0ýýg´/^°_÷èrÄèÑíõä3ò± ¾Z¼£ß·cbÔù³1»ŸÞáÕ©,éÑm<«¿¼€ñ£©bõãk²Ó§ä³1ÂW,¿Ãøw_Âæ†õë5*5Œž>&?›Òüü#›KÇÁ?<¡ùù’ôì­í¶f~ë¾'}ò„,l|KHS’<¡ÛnA9üÝ#ö?¿`¿²÷šÌ_Çþ"rõ¯˜ÎÂ¿áø¿úoüw>þßzÿÎÏ9¸YΙÿö3´]rý¯¯1'Ï(§Šæf‰ó†`+Ìô“µÔ—-ÅÓ#|Ó£´§>¿ «4ã/Î}MµhÈOgˆ~K½ ä'3t'ŽÍÕ ÝÞ“Ìg¤¥BORv?½býzE2¡µŠÅP¦ñ½‹FS<>Àd‚¾Žë†.b‡¨zù‚z§9ø‡Ï¢´­ß³ùþ Me1Å„ùoS½}ES¥”§cúÍŠn]GµÎHH2ËæÇ·¨Ù iýv*gQ‡= édr?E€ïÊhdú XìáWÜnÉþÍ‘hÚõ’ÂeH)Ñã)éA‰Î5íÕ9ë—H“#¤!™NQº§¹Ù Æü~š“ÍSv?½$$c~ÿÝùöç5“ß>¥¿YaÇ´ïÞRÝ8¦¿ÿ¿=gñý ¦È ÁãtGð†âì­:l]áH†dÁp®Cs,< 3£·U¢£!;|Е|Ï7%0“”í?³½®c`Ö]C*|ºëÜx¦ß|Îè(Å91ñ%ÒH„Pøý‚›?¿ÂË(tmàà¿Ä//qbBv”Ef³‰ÆÀn³ ]mAæ$³)ÙwõˆZÚE xÑ™ºã ĦV_GíúmRÝ{D5‰Ì‹˜´8hw…ÒøzM·ó¤sðÝr³†ôh‚ÛmÙIM³¨I¦s”éã3ØvWQ¯¶âxZ˜ “Jú}C“&Ñ5,sÆ&TïÞѶmÄ/7!þ¬á×ÿoùÿYŽÿ÷p¿úxA°ÁŒŸ#úûË5A$ÄXÄ} a‘ÅAñ–¥¢_7èIJ¿Úà¬";šÆØÛm3<ŽnµG–còƒ¡mé·»Qï%É,vúªw74ë&†)!HL}QÆ‘* ôëŠ~×cf#’YN{~NSIÆÏŽ¢«ß[Ú›U|7e%åÙŒæúÛgd“„¾Úa›Øå*Agzx·ÚHÑa  ^ç‘YF2Ɇp Xš›=z4B%âÁþD šÙûPŽ~ÓB k*@ ]Ëaë2K0³~³b¹D$9R*¤NÐ)ôU‹J2 Ã¶ ³ ì'3²YFwµÀ‰ŒòtJ¿Ø f9ÝÍ‚v=;CôvWûWÞÝVHHÊJY¼·ƒ>Wü•½a¸/Ô†uYKLiîÉ$w²OÞ+úT"¨.ohw=R‰J¥P·ä«»âÐãú×г#²‘‰ny{-â‡fÏî|A±ðôŠ'Gˆ¦&$%Jõ1 ÁÜÆ(;lÓ¼ŽÈ2éèv ‰N ÐÓ1J KÎÒ·]LȦ·«èêÈ6Oò•D5K¬"æ¶I(<1žH_èBǵDGÊU¨¶ñó+e RßÁ„ Þ÷:A§êNË×q]ÌŠH²û޾x°% v¨£ä`|H_¾­_Ò×$Þ6¸N’ŒJ ¡Ûîñ6~W‡Jsð í¾G'2 qq¶®ñ^¡³ i|¤ÒØÛÎtì Û¶C¤Ù(ƒ¾¥k<Ùé ¿Ù¡&%íõ!Ÿ“%–ÝÅ‚GcŠ“Ò{ûó 2a´Þ•hl½¡«,ÙñYؽºÀ+EpS„®M@©PFGD2Dôm•DLc1dMÇIN{³!¨„ìhD¿XR_mFßv ³Éø³S”°ƒ9IÜáP>* ?Å|xüÌ⪄Oh t¡C16ó6Þ»¯h{²GÇ(íïwG·;ú<¤(ð ÅèËêï>oø7šˆ ñû5íbZ}ì ™H-†b ßîéW;¼ˆÇ5 "Ñ„.Ÿ‘çì~zAÈæüæõ›wÔç d9AOFhÕ±}y‰98%›$¨LÒ­VTï¶èéSì¦m2tY‚£]¯±µ£x|Šè* ùñ¥¢éÐõ‚ÐUìß\Ç4¥éé!¡ÞÒn;¤V‘6Ríåœñ“èZBHíé–K¼—#“Œž‘ލ~ÅæÕ ù㧌Φ`;œí¨Ï×OOé®/¨60~v„=}É$ÇmvØÎÅP„$°yñ‘¡jÓCʳXhÞî¢ëw×X_P<šÒ¼yMÛ)&Ïž`ÒHO©/.ؾ]#D@ÏN˜<;A);`“*ê‹ éÉéØà} ¹^R½¹DÎN˜}Š«*|ßÐ^¯q]•Q>9 zõ§r’ì¶AOçf¸Í‚æºFŒ¦dcOõzfLzq;ÞÞ2#Ï©·‚ÑOë+¶o×ÏŸ“&íjE·(:×´$GG”'cìvGoIê©ßm“·kH }ƒ÷S¦$Ó»YPÇ´I•MÐY`ÿê/}å9ü‡/që ¶×݃.ôß è¿П>>x‡Ê§$4‹šâô€úÝÅó'ßÐ,÷Ñ=²­P‡GäcÅî§wèÙ鼤_E@2NÞÇœ±D!3M¿XÑUhin¶Ñü<ºœLâ» I:Ïè®XŸ‘äì_¾¢w)åÙ”úçwˆ%™ª×ï‡gÌÙ¾<Çv“åÃ9D ¯OÐRžL¢á]…•èŒûfpŽv³¦Ùô§Gi±½"=œÄŽ@ÛÒmj¼,Ö€/Hf£È¢nC$tx‡m*‚Ê(ŽâDÂõ¹müå&_ž 4ì~|MÛ8ŠG)NÆH×R_ÞÐÕ‚Ñç§4ïÞP-³o!CO}½Eå ¾qxyÛÂ[ªÅ"š¬Gæ%ÚDRv2­WTç œOɦ)õÅm¯£‚EÍ&øjÉîb‡P¡sŠÓcÒ±®¡¾ZÅÀ”ƒˆ»rUM·mèk˜Ì™}vi,¶¦>_E”¨ÌÐܬPã)ùXÒ­jätNùh‚]ÞÐ-{DQÎ5íù’¾Uä§té ª,iÞ¾b{Q3zrF¨·Ôëšôàˆ|"i®o°} )è÷ zABß¡Çc¤li—í ySzêÅ’„à`ö›gØëwl]—ÞaÄMÞÇ¡BŸ¨ªþŽtûw{η¼bßõ1U Ð9i.èw–dšQ_­ý%Úí¨[‚—të úè„ÑaÂîå5z4øËdˆÚG®ëcÔô<Ãn÷´‹ïkúºââ©Ë-U|«s’YF{yƒS#ŠiÊîå+º^”Ýr‹•Hå „‰Ü`cÛÌÆºµ$Ó”öâŠvë0ÓßìékpõGJq0zÜÀoVyRžz¹C—%JZœb¼…4ÞÄ.¼Œzí ɤˆÉ®…¹º¦[5\µ†ñÓ1õ«kÒ'§´ç¯éZ…p„¦|þ­{öon@¦:¬S”'cv¯^a]‚ –¾î}ù‰éX~÷5ž3:9ÀW[ÚÍç%É´ ì›VsR°}ñŠÝuƒ6 !Ì8вQ7H*>pø QX ÓW3-£v˜_XŸïj†ðI{ÔmCL¦†îê’õÏ×1Ý÷¶Ã “/“$á®xZѯ·¸ø¶{€Éû Æ4µB)\UÑmc2`° ¾È$Ê@…TH õõ‚äÑ#ö—5ɸD¨@±ae v³f½CgÁ·RLp|Uˆ¹¤¤³"Ê ‡:A&ŠêÕv;Ì(¿£Ð¸¶zîDÇîèÑÐy‰.ôQ¹ÍªŽô)t ÙÁ~cz?!:ø–`Aê4vUÿ„:b§¤Rx[Óï*‚,??BºU¦ì^¾ewY‘Ì0*D’­¨®7ˆ4~G"¼ç¢Ehw=®îГ)ù´Àí¶4›*þŽ$ň$O±uKr|€-ÛWצÌQYJR¦´‹®±Ø®ÃvÑ“•Œ¦¤cƒ­÷Œ==Âo®Y½¸D¦98)GHãð}q½Ö#L¡û˜NòaC)1™`ûò û•cúåSÊyŠó1f¼y{Îöõâ¶€ŽŽìx†îýbõ‘4h‚?uü{¿>á!hJF„Y¦Ì¢qMÆA÷Zæ¿ú™ÂÇfÃ÷Ž’`Ã}Gü“fñà¢k|³£[í“×íyKdš 4t« ")PÊaw B›h"ïz‚L)Ï1©£ºZÒ\7Ï#ì†í›U4ˆ@§”§s„oho*‚6ÛÞ™F¤<¡ëïÇnÁ‚B&)R©Ø>‡7Œn¨éÁ_íqáJÜÁp¼ØÀÐ51œÅ[ÔhJ~XR_\b«>šgP¨"£ÛlÉIg Íb‡w‚ìp ]Eu±Àöž Å£CÜú†f×¢“œüì€ny#'-ÍÕs8%ÉdÔ§9I6à¬T|AFÙCK·u-¢^+ñ´ë†âÉS²¬gýâ-"ŸQçØmC·ÜBZÆQçv *E&yd'_¯0‡sü~K³lAztYÄÅÈFiŒ¯bä¨LSLºÈh.¯ÙŸïÈŸœ UK»“¤#Cu~_øA UBzTb7[¼7¨\Ó-—ÈÑåaAõö}HGÞÆîŽ’t›É,¡»¾¡Ý6o¥sÊÇG×Ю÷Ø};HTÀÛ@2ÌsìfOsµ"è”d6E¥­Ýrƒ÷àû¸!‘¢‹„ gD·§:¿cþî—ûÿk¯`\”ó“cðÕå&z$9& ´—kÔdD·^Ðí<ù£²‘A& Y],c2ß@º- \Ûá\@çe|GO}yƒÌŠÈOß9ÒiF}~‰&#ì+dåV®õykò1è,GféXÑ^ßÐ×]æÈ¡À±û-ˆK\ÕÅΣLPÉP0Øß:’ù©<ªÈé×ìÎפ‡GdcB»£:´ÉZ¡ŠhL Þz‡O0ã,ÊG÷úړή¼X¯Ü0ο]”Ä×;úMÐÐ7‚üì·¾¡Û²ãÙáˆæÝûë éá i Ý΢˄~±%9>ŒÆáà£*‚ð´WKdZbrÇîÕ5²(Z"Pqc’A}uE½ê1EŽ’ LŠ* ®®:4f><ÐÁ[žŒ£aο¿ÉŽØ°Ûxr~Åú†".v¶¥bºm\…Ø…Õêt£„#|8— ·[Ñ·*òăä Àˆ&qd\G}µ¥[ïÚDó¿H3[í .Jm„‘„Ö¡f3´ì¨Î—˜ùÙÁlC}±Àvšô`ŒP>R®ú¨ÉFÆšE$Éd< ênͪ©Eìêêœâl†Û¬©.VSš”P¡e÷îg£90JUì`ÎC@Ì”â(£~w'bUUQÄ:ᧃò^ú¹k暌¶ŠF|¡KßòG‡tç—˜“´h¨/+ÔhDè÷YRtWו“ÎK„ŒCEýKʳ ¾·´Ë®“äÇ#º«le.}Ý“?>&ìÖx5&›¥´‹%®=Îãôµ]úmM~z¶%h…]¯AdÇ%ýò†êjÉsr ¬5ƒ6]Ó•):׃©æ›ðûw ‚LQ:J5½‹Fåôø˜4ƒê|‰Ðúý(oåjœÿ û!åCCÀÛõ×Dyó~7F4’n±¥ÝÄÄ=! Élˆ u<ˆ‹üÀø¡™1|X¡ßÎ ´Â×5íªyÀxþDðʃ?cº©@·‘˜ÞHi†Îûwç5"-ý¾‹¿è÷;¼*8ü‡¯I“–êrIuÝb¦¨Wì×5:‹ŒQYΙÿæÚ®Xþå YŽ‘²tU2ÆVê™9ܾ½×Xá A£L ÊçT?þ„?"3;V/+FOŽñõ*"à¦ãèzuþŽ%*TÀn7ôM t òð˜ùg§T/^P¯j̸D WÍõ‚üÑSò¹¡¾Ü!‹„ìpŒÛ®¨Ï—tu1WÏŽq‹ªu…™L?>¦¹>§w ùÈÐm,ééÙÄÐ^­ðB“”fŒæªÂœLvO}Õ£rë4:ñT«=ùñ#ÊÉêÛ—è“çÌ?S_^³ýñ’ŽÉ¦»ÙHQEIq¬Ù|û–üóg„í Û‹ oÌd†Vž®lšá›irŠìt‚I$2×ì~xÅê§%“üšL׬_îH§ ÕÕ¡3”iÌ(‹æK™¢ráñɘÑñýò‚z[“NÆ$Ò¤$ã ]˜ØYoh®Öv¿#”s~û„°ÞP_/©–[L^ ‰ï<ÙÙ)ùINw½`óâ"âOæH­IKØ¿>Çÿ­4b×E¨]êØE¹Z#³$’n»Ä/Œù¿ÒŒö7ŽÿÔ¿ñ‹ÝÕÿ‹ÿ·žÃ¿‡s–à;Yõ:aüù3p+Ö/ä‡'Q/ê[|i4ífI³µGGLžbfýrËöÅkzéx£¦Cëèꊾñ¤“ùÑ!õùkŸ09KÙüpCRöç—3¥˜g¸¦EšŒj\'† ^ƒ'’f2"ŸKª×çt!™NÂ"RC{}‰uÅ<‰E·HIäôלݜd^ŒÙýð#ë×[&_~Aq6ů/Y}ût‚íÙÁ¢y(xPÅ=†øvíÀŒŠ!P+E%‚nYá\L¼M”&†]Ùª×ÓìåãcD½aw½gôõçÅòO/¨—5“o¾¦˜CõfƒÐfÑ2ýýsìõ ²Aˆºs!<õ» ÔÁ#Ê#Áú/oÑ£2PШ´¤<+Ù½ú™õÛ-IY ”Ff%é$B0bG.Ê6ܰ>‚=GC¼»Ÿ~JM:+òéõ™뿈Ćv¹¥¯<ɼŒ†·ð>ƒø#PÁ/Ô25t‹+꫎äpN:IãÚüàxaý¦¢¯bJ®’ມËÄBd¨TÒ.x¼miŠè-bz@"kvç+ŠçŸ3:"ú «ï^Ó·†tMr®kbcNÜãu…NÑùÜ8¤íbS°_oѳCFŸÐüü3˯¢Œ#søO_cÜš›?½Àú­ä°¹—£ú¾GÏŸ¥lþü'4¸è æƒÁG4”Át¸n1£ *y8X%qmIh‡<ô=6(Š“Í›sò¯?ÇØ-ÛwÙÁÁïq½!úõ’’üx0 ºLXüç?aÍœ£ßѯ¶47Ï(Žvß¿¢ï"Y̺@v|õ‘ɦ9õõ¶5ä‡\³” ìÞ]“=Eû2›„½¢xv†è—,¾}‹Ê  é|¡Æ¼o¨²DàIJ:Ë"ÑGU¶fñç—X™EÙã]8OKùÍ7¦æòÿýÀ±ûOÿ¸FøISqÄGÍä÷'†#)Ä_ÑÞ}ªã+´ŠEŽL1…‰Q­!éR~Œ¯û+ÿƧ?Óð;RÝÔƒH„O.>ïi¤ŒQ«û6~#LãEðøÎF~æ8¡]í°û=¡è¶ éÑ!2´Ô—+Ôtã"{‡ÎSÌtLhêÁ4)#œ_ |cã®Ðßn›‡NÀt‚-Ýr1£b鈅½.ºP-è¢Ä÷­¶ª 1ÌÃÇx[lGBÚ ETGPy®í@$1yq½Á;.3tjFÒÞ¬é·5æð3ÊûŠnW#Óh®éÖ;d^±0l—5º(1ÓßÖØí’42^ë(ÝIæãHbÙ÷¨<šy@â»g:!H…ëz’£9¢k雸À‰0ƒ#¨Œänã! :2jÈ‚d2Šãν%™ã¦Ñ¶tÛ 3l‡mz‚ $óY솯+DV’ŒS\Ó Æ…@¿kQE”;÷½$ôn_㬩Q:¢¼÷‘û9ɰ»=ýÞb&“8•)ýzKÐ)fTàvfRàÚW÷±#æ"Ë‘„‘pÍÐ Óe|W(±_"&oŠ$Å)Ø6þÛÓ’~±Ä#ÿfòëßþ}üH'øj÷sPàv-n_E£ IPú}Á{T–D¦jd–cR…k¢áØwÑhk&9¡wÈ$‰ÚÅš~×bƤñôÛ™f˜Q»‘ƒ!­_ïE ÑÛ=™brM·ÞBD¥èw;úº'=˜âö{D;Vý¾ÁV5¡wñ=/2Í1E‚ݬé‡1¢Z§H eB i¢¡]ˆøÎñsQàÛ&vEÜH-ðmÈ2LGAxúÕa tibÑSï|ªŠïDÑo÷ u$¶*¯{ÌÁ ­=ízåXIJR*Ú› ªaFšn±¥ÛÅõ&?ž |Ý=:/"¦­ëïÃo”BxIz8Æ7í®‹Ë«kŒ01ÔÅ7}\ú>~ZÆu?Ð"ò"âb]d*ߪ ?\Ÿc½<`aoñw¶¥_ïðC„¹J†Ü_xÙü­#þµzÀ¬ùû×hœ÷² U\ÏkeÞÆë‰&;ša7+|Hâ„Á¶´7[ä8’aêËkÐ&NŸ…D†àÜ=Vðö4œBqÂò/ 0ãRÞ›…Š5–”šÐ·¸Î£KMsµÄƒÖñ !Äû𽩹ˆ¤[“§Œ’àÜÝ~äŸùðàsÇã"I¢„3 Á;nØ©¸F¹Ýt‚΄Ž÷¢L„èé6]Ôþ…Ê\Û’ÎÇô«5>(D˜Ñ=2÷ˆ¹¶¡ßï 2%Žð]‡JãDDèo[ú}Kè-f6G'žnÓ’L úÕç5ùéŒ~¹@æ#|]CRŒ4ýn‡ÝÛ8…L€v_#Ó|02‚·]$å%z’ÅÍUÛ`û’Þ#ŒR!û¡jØ ^0$J&ÉìÉÓtîeŸÜ>üwÐREÊ­\¹!%íáïÝï$e¦©^ŸÓn%Å“Xˆboù‹þÁñw¶âƒÑÃP?Dtß©€Ð»¯ãE6jHÏ ï¦»ôÃs:¿M»R±ÃÐnV§è6;&¿ÿ†ñIÆú»×TòÏ¿`4í¹ùü-~uÁê§5Óß?£¿zCµLóœtfØ~ÿšæfJ “1ÉÄàëÄïo¹—3›!CC»©£¡ $·‘IÒÑo·Ø’ɘvqScFÇ9vWß·Ç‚¢2Kðû¨¯M T¡èÖ úÅ”¾­ fÊôËõ«×´;Åø«§dcZ²þË÷ìozÊÓc’ùcZ¶?½!è Ó/NiίÑóÙT±ùé ÛW{ÒùŒâÙöêœíÅŠâô ‚ß7øN1ùên¿¡ÙGäš.b—È.V´û@~dØ~û3õ®Å…Œãÿø9loX¾XÐw&Ï1Y†”LNz0#)%ý¦Fç)¶ªqÃ5 !$ŸÒ_¼fý¶cüü•ç$jÏÍŸÏ™ý‡À_¿¡ÙÖ«HgàkšË é£'”§9ÕËkB’SJ¶?^ Ë” ¤G|SÓí-¡¯p]te÷U!ñ 4›3;bþå”í?²zS1þâ9Y¦UGýê‚^fŒŸ?…¦&4£=¿ k{\mé¶5j2!›(|ëðMKßô‘3 ùÉ”îæLAZDmY@’Œ'ˆ\‘Œ'P]²üiÉèéÕÏ/±Â »¿k ÿÝœ3ƒÎÆ´U1 ¤ìÞsô¿ý–öÕO¸ü”ƒÏ§ì^]b÷ˆst@>±,ÿtÎø›/ñ«ÔÁt{ªë5ÝÍŽäì1£cÁîç=2—1胜ѳ#ìjÅäŠææ†êrOzx„N-õå5šQœ“Ž5K¿Û³üËãß}Žök¹ÁSŽhW`FŒžBÓ dÏÍ¿g· œþ§ßá.ßP÷%Óg¸}K·YÒm*œw¨lJ6›í«7t­atzˆÝ]ãä£jšMG67èBÒÞ,ð.%O‘é©Àcë=BªÅµ •ƒo"•@&á" tË "cʤÀï·‘÷+È • Úå’à5Ö6¨$AKCñå3[6ß_#ŒDÈ =RÀõ?ÿÈè÷ÿÀøÖß¾fõbÁä÷_3{6eù/ß²»X‘=!›iÜn% :¦ç…^0ùýt—/X¼Ü“OŠ!ŒÃ#’1ÉXÒ-k’Y‰ï¤¡rA{smÁd:6FY$›E2Í·#âÛ,…[ÝwÓЭژö§5¡ÛÓ.Vx‘3~~†Ný°¡ÿõ5ÆmCéŽÚÕ¶ÑÏd2’I?‹w]í ¢Æ¹_ï@ç$Cõê¶‘¨<Ç·[ºí•Ž£QõÍ!™rðÛìêšÅ_.IO‘Ží«w¢FC2› Ý^îká¾µÖ[w*JëtôèqN22xë‘yŽ]^R];ÊÓŒ›þ ½Èb¿N«a>Eð1ÇÅï_iƒ T?¾%–}ì[{¯-:ÚÅz jEޏ™ÌHƆ€ÀÕ›ø½ù”Ù7sªŸÎ1'ÈÆ’~W±þËk²Ï¾ +ÿz èdD>Ñì/·þÇ/Ùüñ83ÁHIñì1Ú8ú^‘N õ»«j# Žþé Ú·W˜Ã‚öÍÉ£GtׯÙ^vHÛ“<ÿŒñIJ}Ó2ùrÎê¿ü™Ö8þ_žÑ½¾Àœ=Âooh6’ÑgǸõ9×~‹*rL~@2‚n¹ÇLç±ã¬À5;\'Hf³˜Ö÷¸ºÇ;‡* ²y‰17üª¥Þ# %t¤Øˆÿã?ýaP“‡ì?ŸÄþÔèPH|ßGaö`JJ#S}\ÈuF"Šq¢MtbÊD¿gÿåñäô'ŽÉ†:î;‹·ö½Ýî¯2¤ A°×õqx¸2tü¤D¤fˆrƒ^hpK. ÝÍŒŽ¶‹pîDCoñƒ9Dr{£Ky§1SE =ÜŽÖÔ  ´È<‹ãÒ' qG‰V„¦ÁÖ]LUüà$ƒ÷ÉMRFÊóaÛÇÑ®4·oQeFè»;<ÞÒïÚ¸iJ¡é#’©0±@í"3¨$Å7MÔÝ7È,1Û­CfßYdšÄ¿¿µçÛ Š(-ˆF!Í"Öƒ’ñ:IIècòŸ"Fž'IŒnÛáØmžFdVñ\CgQ£ •\ÝÆË™¨~{v6~n1…N™T‘º.â)eÄmª¡ãˆQø}ƒ­ZÔÐ-sUõýÖBjuFõwEŠEæ{¿ÞE³õ ;5Ó·ŽCqB&Peľ¹ºCèhÞò> ²تF—Ù¢¥"`ßàÚ>š¥í®ÎL|l\«dfð]Ý7„®G*U¸ª pa¤Â_tŒÎŽ8º]dø¦ŽÏLjðuDoF…\üüADš€L ¡iñˆ8©«Ú»ó]ìÂߢèîHC Ib†σ»E³q§UÖ"µ‰Ý½! %r£v-ïÐyÁ:d:°±è"Åד t4ç‹$&Vgñ=ÕöÑûà=Xw÷®¼]Bb¼‹•E¼>(”Œé§·ëõmœøm§¾:\­j0fR"‚ýôªûkjŒ‡?Rºˆ“Y×TøÐh£Ó-ÞF[ð!¦2סícü{'ྵèé(®V  äñXL„÷5á*¢å·Xâ½®’8ÑuCg)ªÌ"¥BÆp2_÷È"Gª¸ÆÝ‘ÉÚ&‡Àßö£QYznm¼–áS´p?AáÁçõaà1?ønoqŒ q÷·É[rê]üÜRÜ­qàîÂÍbµ2º©M Kê-²H uŸ#A I3úïØ;Ô¤ÀW-², m¢t"½Dª¡>QE@&ßôQ³ÞÇúHOŠˆ¹Ý7%ï¨0BŠX§ñ¹DGì¯kúø÷&)ºÞ+þ>¦üŽ>óË÷ìFü?ÿ÷ß­E2šL¿ùŒ<1‰Í? eÜj ý­36 NÓ»y ºLXÿåVo6áÕ¶$§O9úCìž…‡;ÊÁIÛ-÷ Òy¡âwLÍö‚Qn1wÈ÷5Öá.ié^Òï\íbçYÉ{§.á#SÄ&û¶`œ|½¥]î¢ñNdèL²¿x‹LçdÓ B;l]#“1®º¦^5d³1*-1¹¤[-ñ.eòÍ#v?~K×å¨ÐÒì:òÃS’A{ãm ÍÇìÁ©Èý5âŽË-ŒÂ­—ØN’NÖÞ¯;P2¦}¹ý.¦åñþ¹Þ:¢•$„h4é–Wèù#&ÏÇ´«6²¨×-ÙnþõÅçŸã.ÞPm<åÓG¤cMu~ÈILÍêûW¨ÃÇŒÏ&ØËsªÃL™9eÿâ rö£w\ÿóÏd_~Åä(°øöŠñgÏqÛ=j¤±‹%]ëh—{ÒÓSû”êçïØ­££”Í‹wdG‡¸Ýž®m1ã’°ïÿæ LbÙ¾ºB•1j— Hg%nsÎÍw7Ìþáwd©-©Ï/Y~wIþìG¿?£½ZÑì,¢]³y³#rHØ®ÊÐn·x4ZJœõOŸ ݆få£Cºå%ÞIÒÃй`ñ§¿°~ÛrôÇÁ7G¬þëŸY¿ÞSM-\mzt9%›gl~øò Yah—ùgŸQÌû‹ éÑ!ZVl¿M½ïÐ凿?cõ§ï°rB"ZÒGOPaC³3u³!ôÛYtXÿ–â‹Ïp« öË:áJ¡¤&=>füüÚ†ê݆ ,õå5Ö‰ûøï¿w ÿç>gçÆΧ$zÏò/çˆò€ÉgSü¾&è”ü¸`ÿò5«ï¯HÏ“Ï Íësš}…Ì)¦ín‰T)®‹lù|vHz2‚fO³Øâª†Þ;ÒÙ Å<£>¿À ÓéKñåg½góÓ2‚–Z‡Î$ͺ'?Ñ-ÖL¾ùê5mãÏNè®ßpý§·¨¼@)Ç$³ I©‘&ŽÏû]‹­-ÕÅkº¦_|íŠõ‹·å(#¬­ë0å”tR|…ÝYôdF:/én®Çšëÿò""E$*'PùˆòéŒòñœÍŸþÄ~—qø›6~Hf¨\âê]$*rð5®‹›VaÙ‚‡àºë%Ö¬³¤å”ñÓcªó×Ôëžùo¾&;0t[K2JhÎÏi—j4Fˆ–ý»Ìñ ²ÛãCŽ)%j<¦|4£¿xÅúû5æô£SÉò_~fôÍoÐbÏõ¿¾Àœ<¢(íÆ£Ç9¾ÛÇÖ{7—$> 'ÓXXøð‘69RÞƒk´Ö\…Û®h—D6"MÀZt'¹ï…Í|ªÆxom‹èÛãÃàkÂZÚe‚· )îj¡">ÑnVtÛtÛŒ8üjÎâŸÿHcG̾|„²{6¯—˜“3ÊIе–ôàQ_qõÇŸ £µF<ä([Ar4'ô[¼MIç9Þú¡‘áñFæt7—Ôˆdr€ÎbZ£0»ºÁ‹‚ѳݲŠQõÁ!u`ñ_¿gó¶áøÿñÈú’‹ÿü†ñï~Ëá—GÔçK“[Ö߽ºØFŠ»õ>8.§$³<&{"ñ®¦]¬£IV|b#†”ãp›æØâœÃ“rôû/È ð*ÊWê·WôU‡Í€šæü—N9þ§Çì¿}CñåSšŸc¨Q:-@tøv ”èØ<µU‹ï-Ãá?}EØnpJÓ/n¨®·¨"%›¢Š·¹¢ZZŠG3š‹ÒƒºÕe¤å9éñ!f”Ò^³;_ͯûš()gÌ¿zD·X gSüæšÅ_.EJyö˜dVä ¡ºáòŸÀŠ¨Þ«B›²¶GH9H8`†öuäQžío‘tâ=ZŠWרnÐ{Iy:ÄN¿ß-JDž°6èÌ|û~Étø ‹I¬ÀB)„ˆ;/W7‘ù,]§Fˆa(UÜö}¤T(ý£]…4H)cÇùË:šò$ôÝîU‰) v¿Çùߌ’H]ë1 “¡ó(î’­â¹¼¿¡RÞø·Q£Ñ0€ÊåíDI !±S‚oá·œL¢Çùè"\ìÆ«d‘FçêÐ-Š/±p·Q ƒÜ&P2î*½Ç1˜f’Ò¯kd‘¡T ]VÈ2ŽÂ즊/A)‡ïax»EHaiwmÔð ”*F›š8]pužŒ"µê‡Žˆ@ t®#Ý¥êÑãá}ÜXT ]Õ¢Šœd”á«6BõCܬ¨,¦Yᮚa©LXcÒ uüñ]\Ûâz0EŠL£|È;‡Ô‘´|ü®ãß)p½@ˆ€k,"IÐF`«˜p¨3ƒÝUø!ÆUç×tw×A¤IÔ³y‰”QïŽL¢þK‚ö¨iAëh´aHðÒ :7„¦Ã76ð¬ûë‘ß!DôàÝ3ñ÷Ÿÿ±Ûϱ+&o§¹ÁîšØ­) n»Ì:71Ú¹±÷è/Þ¹þ:ÈØ ñ1ØÂ»04m †XéèO1£XðP™¢ß >ùºQ‚ÿM!¢ž-Q©!ØŽn½(*“Ø]I"}‡íýb"ðAWò¼K·ÁTáW>ë1„£SÅ¡c—Ûàâ»Y—é@§x¦öñùS&ÿ÷Ö!ñ]5ÍFß]/×öñª¾ëc34•±³+Ò3ʰÛ^Häp½¼÷'½²@æ)’¨Ùë«ü¸Ë-c$¸³•aƒ<&H5°È‡N­w¸Þ„Š8±–£%c žŽ‡¼xß»ÞEt»="ÍÐZá« ’ ]$¸í~€ëŠ:øBD6¹¤­·ÏÏ_¹‚ú.¢žŸ¨w¿÷ÇE€Ýî°u?HvotŽ :‘ø¶Gæn_Œ›©a÷x»…A¸ÔšIèú¾¦ Áõ 4JÅwR¼D©Hr‰Æ»>²­Ž××;Bï R øa€h~U:6±‘i\Õâû€4߯µ7™•ø:š(ƒPÈ_0ÞÖX4Ðb’ ”Aæ†d”¢3¿ø(BHè¶Üü×ôÞDÈ„àÞœÈó~÷Æî{fø†ÉY‰moãDF~?Øí~Dø¸SyÂAÀîÚ(ú–bxéÊ÷»3ïéîp%ÒÚë‚“•Øõ2vɵâ6©IeÙ`ð´«®WUdÏŸ1{~@·n±«+¶ç[òÇO~O»\a+Az|H2V4W7èù)š «Wd‡g˜ÜÓ­:’ùßlð½"98@¥òƒøóá:øÛ—‘AЏó쫘Ø$UìV÷Ë›ÈM>GÝZÌŽnµÄv••¨RcÖ²9{ÂôIAõó ¢˜’Ž`óý[ôñ1¢ÝD´R7F¨œô`„Û¯èEq\°}ñ3z<¥_îýæ3d³¡kRFŸÒ/ÞQo £ÅÍùF§ýþŒõ¿þò)n»ÇŸqðÕ›oÿBë§~}¡å:!Ø ×ÒùR8ú*Êb ã_Ç®’gàJU,¿{Io5&IpmƒÈF9ý¾Žæ¿`÷kšë¶îHNΘ~q@½¥ÛlhVk„1ÿêW?²y×SœB¿EÏÏÈÆ=ëÖ¤G%n·‘“̧¤ã×µÈ$'Øší‹w¤§OHËžÅ~S: !ıt}öˆt¬*J„š]‡ðv_£‹)Bv´ë–âÑ#” íõ 5™A»Åù”ülŽ2‚úÕk6¯¯iv·‰Œ)ñ‰÷†G&I¡Ñp(xÈ]ýÕÜ/wcÿ–ëåÿªãÿZGùÿÌãÿï:ç[)æm×Є–q mݰ°ÅM°Pƒ‡Å‡;óÝ­gäö5ì#™Œ‘!¦q&“)"QÑЪº(ILËòÏßSW ãçŸ@Ãú?ÁøˆÉ“’fÙÏ öoÞâ:…Î5õõšòÉcʳ’vµcÿî|”JȤ$ˆŽn±A帞¾ ¤Sl½ º®˜ÿãïHäžÍ«†üÑ»¾¢­ààŸ¾Áø‹?] Ê "ìq˜ùŒì D¥ên-ðmO{}Ãîj1¡ÍU–éï¾ftœ±üã„tFqGJÇØsóÇ ¡0˜ùebƒ¨ß¬é¶ºÌ¡«ðùœÙ³’õ_.Hf#ª«³?ü†°[Ñ;ÍèÑŒýOßÓ‰9£ÃÀÕÿë;ôÉg~3§zqEþì ô;ê‹Îy”1´Ë5êøŒT6ÔKOùxŽë,ÙÑÑ÷¨,°ü××PΡ[R-*ÒÃòy$‡[ãêîý1ÿ]wÌ|Ž)“Xü ޟ܆÷ Ü $*‘ô›e4O礳’`í½6™8¾7e‚Jå]Óä= ô‡ëúCRÇÃ:`èB ß´‘_šë-æà“ ºõŠvYã] üì)Ù,e÷à ºNS<:A ?È:«ï^R~óbsÎæ&Ÿ¡´‰A2û7ÿú§²Šþ`-º(É&3Ôlûëo1O™9aý_FÍ"ÆUŽçÕ#T‰·{š›-Éü˜lªi/®è­¦xtJRˆ¸á:hÞúmƒëÝê +rÿá ìÛ׬>§÷ÇÿË—‘÷9ðþElˆ¨|L2êMŒ/úÓïl!qû=ÉãgŒ×ÿŸ?ÃøŒ£?äžGÍœ¿ß}‡aÇxÿ-®ë AïQã&QôÛšà,.t’"°Ø¶' ÑÙ­ã»]B:ºÖ¢LŽÒ×» Ä †ØØ÷7¼CÚ•s f’ÇΪ„~[ãÝÀÏÎeh/º¡È•Œ-æ[žŒç¤"ãÐ55“Ž v]GŒí¢s½Ì!vî4z.vE}×à]ŒÒt]Íû†ä`Št}GÎK$Û t¨¯×dÓ”öjI}K†üpŒÝm°!!§ƒGd+>î`£ %š'd"£ÔÙ!)rÀJ-¶øÛ k‡,uíoÇ^ÁƒNHFšnYENd ý®¡¯M•w¸6`¦%ZC¿i‰Äu`"×rqMSA’gà:D6B'–veIJí[‚×()Ñã·ïÐã‚Ð7´ë5ž dKs½'H1t{cà ^ Çy|¥ˆú¼Þƒ°¸> •!ø×{¤¾ÕQú8E‘CÇD– ŒÂ®w8ç¢vóWjB”ôÕσÎäm—òï=ß÷m•&±;ʘa"æðÎ!T‚É$ÍjE߃19ùa‰ï[šÅ9šd×[”щÂDÖlÓc¦S’,&¸Ú6&nŠB¤ò1x¸Ñ‚¨ÔàmM·ïH0ÒÓm:T–€«é¬¤<=Bù†úz§0XŠà-2+HÆÉ #ޝ^_ר®ÅÚ89 } ;=BÓÒ,÷ R”‘æèÄQ],‘iŽñ]*µFê€mjú¡;Fð±ë™úå>ÊñzñZ}K¿ïÐÓ"‰LFbû‹j2'ŸºõU„ºÁy}"2!ø~v CwN"Ò”dšúÞ@·®Úàû Ût– Yñ„ƒÿÅvòý^ZüŠÓá>¸õ}„–}0-Öeý=áSè=èaêãÛýÇÇ ]åÚ k§|ïCú>êÝÍl‚Ò~µ'e&’Ûi1ÀãhmEWÉTœ¢O2ünKu½µâ–@\‹…2˜4ëh[Ó5*›Pæt‹ ^DÉR¢ŒF ‰÷ýàK‘ c³Ñ[ÚÌŠá}*Ï>ÆÍEè;‚ÉÈ&9nµ¢­;<†âlB¨júÆÇ.øÐí•ÊÄÈð`±Ý½ÁQ<øž¢r#úÔtBZHêóD1!d%BËXßxð}‹÷•˜8áì‚ÌÈf Ý¢B˜B;лrt&é7¶qw^ßu SÌHÒÞlpAÂÐ)VCCUªØ­÷‘h”‘´7K­’YŠo»XØövK·îÑ™žØUw}idA¢§9ôQ?©lÃÍ&fZ€u(%i—+z{»¦IâÖ»à@ˆÛ$Âb2ÿÃshªˆÑ2Q%8:…Ò¸Í ËïÞtŽJt”ðßÞ½b0¸(ŽÏÎ3ýò˜Ð´4P|°SzÍ-Þë<ßB°¥’¸6ÞˆHî5Óâù ÞÑ\/p.!™„vÆIÁBr|ˆð5Í¢Š/>¤v‚WèÉWoèwæ$§sD·¥¯c¸H·Ú‘M0lëñÁÓ]Gˆºo·Ñå}8Š„@‡Ûï !%=œ#¥G$ Ê;|p×ztª <¤œG½Çwap{ß¹ÐY|Xì~K}Y‘žà6 l‹Q™æèQF¿ºÆ…œl’°{õ™èT!¥ÆLgHÓù„t7;‚11èc±Cˆ@»Û3ztB6ŽÈ6‘&tËö¯78k ’ƒSŠ“Ô{šU…H¾Þá{Ev:ÇíVt•‹Îeë£é»¯œÅѱõäÇS|Ûе»^Ð7žüèßmð6aô¨dóãK‚œÍÆC®}'&ìêŠýå–üè8j´zcA³žå÷?ÑV©@'ùÉ Å£)íù+ökÁäé„êål1zz€½9gwU“Ÿ•ç}DU 2#DE³óÌÿ%ª_rý_ß2úêsìõV¯¶L¿þ‚Ù—‡ÔoÞR/Eºu¤)}}Bw½Áy…É<ëÏ™üîsºw?³¹hÉ™|vŒTí÷/ñzÄè4gÿvËèù»Âú㧇ôËúàº럗è¬@)­wødÌô³Ç¸Å»ëùã§Lì^¿býfK~pD:áÛ®n }GÛ¦¿yŽ‘ç¾s$³‚öê‚zHçÅ]ipmôß|¤éøÞa¦s’iþQëýôÒÛÔÅ(oAL‘ÆbÚx|üi¢¤âƒW†?ÛøÈïN®…·{¸ °quÉ#·õЉ$[»A‚×!L1Š«Á{¬—L¿yN–A»i¨ùéJt4;Ï£w‘Õo†®qq92Ww8g±û ݲBfrÉþÝ5ÁŒ8üýªŸ~Æ<~ûK6ç&1ضÆÌ)gØõž ;ì¾'™Î‘*Äuv¹¤¯ldrç n?t’=Srðû3êÞ çÇØõÍ>2Ð¥6ÈpÞ!¤ŽÑ¸?ï,ñl"þ´üò3òÒSßXL®h¯—ômd°‹ Hæ¤#Åöåk¼“SDš"½Å£IÒ†õO&_Ÿ°þö'ŠÏ¿!+»Ÿ¯ 2Å÷Ò”vtµ"›&4׋øî—˜"AgjÀO‡(s×A°ý®ÅÛ×ÒYŽÝîHŽŽ)ŽRVù 19!‘Ö•¤cÇú»‹¸Q39ÅÙˆêå!™æø}ìj‰,˜|yLóö-ÝÖ‘bdÅê‡WX2´¾-°}üNµÆ7mDýJ9$êtR>>À­6ˆ²D'òž)(ânFš ÑíÙ¾¾Ä«äãWï_á@ÿ5ä…ïz’£F'åríSÑßïм]¿=^ˆ@·Ú2Ž{mó{b–àð}ëeäO‡y›Ï'Õ}<·ëŠâŽ\ :ã×T–cJƒkj\ë&EhMv4Báh–[ººv¯ ×T‘b2;9I¾¡¯j Ê‚wèQŽ)Lì–Ê8b±u 9!¼}oƒ/µ¤ßF‰b€øû€H3Òy]K»Úà½DjyÍœÉ(wqÍR’\Ò,7ˆ$')Ì _‹‰GÉÁ|G·îÉ­Þ+vlÛTBZFV²J£­ßn£¼¥ŽúÁt<úÄÁ„‹@{‹Ù²Ct«£4…fÛ‰ÝùôhMG·oéö¼Ðd£1¶ÚàeFqQ½»À““EÔMÞ^F v»¥ëi9Gj;Œµ3òÃŒêÍ[š!wGƒR ÉÑ”°_PWŠñ£1Í»¬Ó˜2F‚vUÐÙp]ý]4®Ô ¾ÛÑ{Ãøù#ŒÛ³üé‚üé#ìÍû•¥<;fôhJ¿^Ñ®*qôU?Ð]TüN\LìBô„ Q:²3I3Aõö&v­rúå Û Òã1ýb :#4[ÚFOÎP²a÷zà›þM$̓bMJ’ñŒl,ؽº!==Ænnhk?8¬ûxÎFÝköæ×¿3þ»ÿ×giîþ‡;çèw‘dÐnw˜bŒ’!õri‘Dq"pM‹ë$Ùñ©ýrƒ PdÇ%¡Ý³{³ÅÌ6Çm6Tïnèû€™NÉf#”î©Þ¬ÆàëïågGPoؾݒLG¨<ǘžÍ‹sœ4(¥AQ>?ŽãìM@™€,J’IB»cóò§FŒŸŸ`¤­°ûŠ~Û’ÎðÕš¾K=Ó^®ðA"•§ZTŒ>?žçžt4&?‰üìúÝ9>›2:L©ÞmÈÍhÞ]@:Á˜ˆ7KOŽðûvW5:Ñëc—Rh²ñIO³Û"uÉèÑ”vqÅöbO:›‘ކ¤µ>nÚ»^2ýò9‰ê¨—;lãIÊAVÉ8jAôÑäS—0Þ›÷:ÄáãŽu\›Ý½©ïko=ÉtÎø‡îÓà[`€ëéÖ{lHæ£8·áý05¡ïè–Qo{ïy ÷lƒa¤N ¡¥ßGÃ~ŠâÑi*i—[ºÊ’M‘¾§Ý4‘›oÒɰˆ­ÇaÒ­#ÉÁT¢ ¡£ÛÖHS’ŽR\»§¯jzg˜uÂþÅ+Ôá¢^P­=&‘8gQi†É ¤x[ „§!PEã9Rlj¢ðôû}k£6ÅèÉœöíAçq34Q„ÖHp”Òw\jx¤îfþÖ’’äg‚'ô}×G á¯VZÑí·1m°HÁ‚S¨q›Ž7-Å£ Õ»ÒÓSD³£kâ÷c÷;P%RUt• )$í¾& Ø. Ë3ºMgVø*Nec½E, {A6f'äó”í‹·„bB¢z\ÈIrOõv¹ë:#›g´—ë85M$ *Э7ÈrF>Õ47;¤V‘Äõÿõ[:;¨†{X™·‹’Û(ïdR>=ŽEÙ`ò{¸;Æ`W7l_/QEqg$û?åÅ-¾©ÅŒñ³£8ÆGÿõôýC æ{}ðƒwJ<Ü1GÓ@°þŽ_yWl‡Fã÷›è#¡Îâ˜É\‹ë¢)ÆîÔü€ñ£Íå®né›h¸Ñ&côô·]áeA~2¡[mð^¡uÇæ§·Ï™~v†Ý-é6õ A› ÉWaØðþ9ßÉ;”¤½¸†´$?*X~t1bvp Œ¤_-évéÁŒt^`+K¿º¡¯!;‹‘û·+’“cLâcÈM^tJ ï¢8=ˆ¦½fKuUEŒ]½»›40à£dV’LÀm©ÏWÈ|F2QT¯/A•dýfK2?@jKß tbb IÓD3ƒØ:ÆázùãCÂvC0#²Ãý"ÙÉÈÐ/V8kéK:™"•ŠfÃí=á÷1íMkO0cFFÔo/ 2#?ž>Øèøýe)~»¢ï£§'çã[Úu•JmGv<#ô5»W ’“3Æ&t«ê‹í0ÿm…•ø`QÉdHœ²47ÚuƒPŠòñÊôì__G#í_ÓSý½€þ«Ç¢,GóþýKõ?Ì9Gƒžw t4öÄδaöõºëw‘IÿdÆþÅkœ,Éǰ{·aüåsh·4×;džâ»†~c)?;EɆ͋›øþÌS’ñˆt>ÂU[öoS6ÓãC²™a÷âNM™<°{õ.jæ È6Uß,éw×:Ò£øÎs­k¡†àD ‹’q¼ˆ.ün±¢[×èÙŒâ컺b÷󢓌Rºå3Cß2h#é6{Ôì€t¬é÷\ë5ùé¾ÚP_.°> „BI‰÷.šÓE@ä%RY¼ÕäÇSÚ›K\kQ:cí¥Á¡†:Œ·_»ï-ÙÙÉ5á=?ÂwnèZ{¼ H壤¡ä'3\½Ã¶’àö8o?9¦ßîpmK¿ïÉNÛ5]ÛŠ'ÍŠfÈʈ9 =ý¦BbìyvPR_\Ðl=j~SyûŸII>ÍhίÀšôhB}qIã™'øzG»¬P£’d<Šh:×Ñ­+Êç§øÝ*Ê)糘¦)!HÜfÁ~Ù3z<¹Ê1F ÷[7d“¦–Íçˆ$$¦œüá9n±À›”d”@fbB}ÁêÇs0)BðËŒFþÊ[>|úxßu˜ãSfÏp»]ÓÜI&î ïÐŒáSÑÜ"†»ô»š~ÛÞ ßG}|åQ% ¾qîy€®éðV‘L |¿Ã61ïÝÕ5êð˜é£)û¯pÖÑí‚R˜$gòÙ ýjI0cL¨/vèƒ)Æt¬¾}åœéó3üú†fW¬De9BDör2Íð½{ÏØóðœÅàŽ­/7˜ƒò£ÁÀq{º¾§[ìñAE×»ï#³ód'Gè4Ð-{\»¦Û ²£ ¡ÛÑ,ÌdB6»Ã( ¹×ÛÍŽ~Ó‚ÃÕ }g"#¸fK ­ºˆ÷'¸z €ª %ÃÉaKÒQµÁÓÝlð2%›(ê‹-(°›Î3thb§:;œab0MR’Ï @a²ŽÕטÃD·ñ[Í“¡sÒ£JvÔkdZ/Šu4`ÎsúÕŠäôZö´»f×ãmäã=ý¾Œœ-éá å{‚LQY¼/©=®nº¶A¥£¡+né¶2A·¥÷ åZ¬Ì™~vHóæ/2²ã9&‰i‹ÝºŠZÏÒÐ]_ãó)ÓÇš›=É8£»ÞâUÀÕ=åÓcÜvÁêÅ™—L??EÒ°}qAרH;x€€ü[£¥pûÏæ(¥)NJª·çì®*Tª?‚2Û.é­‹ŒÕ* ŒžøÅãÓ\wþ¯:þ¯¼“þ[ßaõø¿ù™â”Ï÷6ú.üœ!!¼£ØO±òþ<çØI˜ÿö Í›W¸ì€Ñ̰}yŽSFöt½dòùöúÛkT¦qíŽöº¥üêiÞ³þñ’¾íQIJzxHqXÒ]EÙ•0É ç5O©^ýD/§LÏÆì^_ “•¤ÓáB…X´öÑ‘=yBq ©.¶¨"G'‚~×a&c? S½õŽ®î°û•I§ ÝjC¿ÙLL?kKt9Aë[v¬Àî[’³òiJ{³Ã»f່®f½À Ö:jV}  Á£ò J·ôM ÎÀ7¸f·]à;ôd‚=ýÖìÎ Òˆ„´¬ø™Þktb^¢Ëɻɪïë@ò`]|v6¤—Ê$G¨ß¹_îBßNª{‡ÐiŒÿþ;èæ“i‰2¼‡± É+´ íªH" ê¶Îa¦#LiîÿÊ[þ2¼¥]ÞÊ1oe%‚~WÌ0%‘a,ÌÀϯ£7g6"´ 2E}½Ç;ƒÁ§èÒÄ.ôHÓ-÷èñ˜ÐlY½'Yv/®YJ:f*XK~2¦zó†íu‹É“A÷<\')Qj yO_W`’!¯@`·ÅgÏ0¢¦Ùi¦_м»!èŒì £9_‘Ž#°•B×Èpû\:åàË3š·×xzšUEz0CÚšv3Òi‰Ý®éI:Í£]öôÛ3Að'ì~ü‰j+0¬µ˜É§oâäÄîjT‘"ˆä™fqMß+òé 36¸zO}½"¨Œ|ñ±Rvì/7L¾ù Q¯¨–RÒãÙAHúëwl®zfŸ²þËôÁ ƒ¼- ]O_5”_}I®®ÿå%2ˆ(oüÄ;AQœÍè7kš]| }Bý ãÿ?"ê\Ð9ùñ\ÿ ºÎCìxïþÅèOÉëŽr‹ŠûãÄÝjoª}Û…÷Ýù T é\ë†pK)ÅÉA”UC¼P‘ÚâªHPF)ƒ–~WC߃N1ÓŒþzžÏ0‰À»q§äTÿ}écxo,s‹ìyH)º‹Su· ü>¾fSB³Ç6™¦QZ²Û@:޻ܛ=f6Cí²¤],é* Ö¡'òù$bfQk%,ýzë£q1bîº(âHJhtjpÕ>¢öTŠÊ”ôˆTÓ^¯hVÙáÙÁˆ~yM×h’±¡[Ud'SìfžL¾£ßÔ„ ZÆ©@³¡¾®0cDˆnZ[u˜YÔ•ÝÊæDªèo–x™b2M{½ÄzÀÀ ï|D•&v×úžæz iI6Îh.¯ :#gø¦#™ÏÞâ‰×!؈΋S€ážê[ì¶ÇL3ºåš Rpý€Kt1~2'?žÐ/´«=-1…¤»YG“ˆV1~·í J£dÀ9‰eq@á:\ÝÇ]ç0“Ù,Ó¸ ðMG “šËA˜_)‡uˆtD6Ëé®n&‰‹â8M¼—ƒ¬GÄhØvO³ªï"™]]Ñm«ãã¿ÿÜ}¯¦ ;œàvûÁ°¢«Ýà3¿{ü?ò99çÁ ²Ã zTÐ/—8+b'¹‹¸1lOs³À9E~t@2Mè+ÚeQ“S„·ô»*nÞ:ÈO't‹%®—ÈTáÛ3=DKßx”t´‹mÄ›)¹³];”òÓ9¾ÛQ_7( jþ•QE°`&cT¦ÉßÇ:ý@¸ÍÚ¹“kÜRFy±;Þï[Ìd|„AŠy^w¸Ö¶p¯ÏkxŒ#·U{·qRF3iHpU=uXlÝ“’NRBøfCs½‹á%!D-ö(£[î(Ÿá·×TËžt:Eª¨—7£%\ôî›Xjðx#¢W;‚ÊЉÇÕ•+úÕš 3’YA}~CzrÍ–fÝ‘LÇHÉ_²<âÅCs’ù ©AJ‰. íÍŠf]®‡:ô(ƒ,OgtË}e.ÙÁ3Öx' ýžær &EšHLËŽçÛb«ßvèÑ3ÍÀöˆ4'Ô[öï–¨<6ù×tY"¤Å×=>H’ƒi”átŽÐí©o¶`Ä€ÙõŠÓã8ímô-Ýz‡,Ç'SÜ~;HtÀœÍ1E¶£¯¢„IHEré1®é®¥_GúVð=ݺ!™O",`µ¦YÕ±±#Rƒ³= .£ßƒ;eCDÚØX!0‘Â!“ AgSþð„úÍϬ/j´‘˜¿Ä¿Ð™ø›c@1Œ:ôôˆù×]ý øäÃÈÏ_Šò‹º¤Š†³eÅÆã¡qJÜ#øî¢¼ë}|Q&&î’i42+Êa·l¹?}U¡O™qLwµá#wÕä‘Üvñ&JÝ®G éw6TN~4®+ò'§$¹ˆ\S­èV[|Ðd‡Exa4÷ BÃ9 Q½Áºè@x®¡ë"p^hý¦EOJ|½ÅyNsTnènÎi]ÊèxD¿®IÉ&†n¹'9±ÿù%›«m$®iÉŸÎìɘêõÍý(Ð÷ئAH…­[œ” 3ž lAbë ÞÉX¼O2‘N4ë~fýs U8üÃößËú¼£8*i®f8¥yuÙ¥zªËˆ’tž¢ò”~yE³ #çlÔ•µ]ŒäŸ$™€ŽêÍ èÚ›%]gI&dpÃÄBšìtL~8¦ßV¬¿ÿ +rŠYAóöœ^ä”gSÂn‡,&ˆ5ꡯñ¤Ç#\Sƒs´W7t{ÝÝu,RúÕYÌÝ‚ý¢¦<}Lv8­®©®j’ã#ÊÓ„êÅ;öëSf$YJ·ÛÒ÷Ñ„u8ŽœSåh—Tšb«UŒ=;ˆøÂmo:D–‘d‹?½$èìãzöÏsð‘N(ç9v]¡ÊßuO ME{·é˜Ã9¢¾âæÏW_|N13ØÅ‚íÕkEìºÙ¨ã—F=ŒúºK=“ZýÏ~¥Ôàßzü¯ý_q¼')à5oñrDR0:=!Ô ÅÓ »_°[Z”ùŸøœCÀ6–éo¿b|œ³øãw¸tÆìñ”f±'?›Ó½}ÇöríÿéK{ªË¶Š.ýä ˆÔ‚Ö|… £§3vßýˆ #ÒYŽÛoù ‰CŒËhúö‚d>A„¨{ô}E·íÂ0ùýsÜò’íyM22Ȥ@j‡­fT‚³w!a‹m:„LcàÔác&OÆì^^€R¨rD66ôëí¦%Égøjõ»¾¦ÞFOÝ–v¹% ²”¾©@¤èñSª{´[¸Ê݆ê¦&;:!-=ûW ²§O?*h7{öo®é÷-¾kÁ”äG#B½§ÝVj’»tW­ ®kpΑŽbW¶¾5zB0¨4nò…,P¹À÷·y â=ßÑû˜9A¢Ë*ÕÃþÉ=Ð hÉ´‚Tn!"ê]ëšvU#L®¦ß6˜ùú–‡èºøw{d½=¡®âÚ†Ž¾‹¬Ò¨D`«=vhpE o‚LÌPsÔ±qç¶íi×Ùã3òQ‚OýŠå·—¤‡S°-¶Q$³ŒêòšÉo¾Ä-Þ°9ï)²‰SË£)&SµH¾ß¬ 3Ms~IßD¨ð¢$ŸK6ß¾AMIGŠÍËK¦ÿákÂÍ9ëw-ùÑ©[ö¯¯‘³CÊYÂîÍé|‚«,ÉtŠp–ähJqZ²úó÷¬^,Q™FH?G r¨}Âñ?>gÿÃwì·ÐöŒ¿þ‚éã A)ÜnÍöå%BGQ½i™ýö ÂòŠf×Ägd6'idž“”šý?³»Ù‘Í‘¶§Ùíð.£8œ TC·±±Apq©ªœ ÜŠëùòɑgú»ÏQt´»»_±¿X‘>zÊÑ>ï.Xþù Öy¬”§g$¹ÇõvßáºxÍ`¸Ä‡(ÕÙõC½ÖÑÜlÐãfßœÒ^¾åæ/çÈÔÜM;"ÐÁG¶öC𛈽˜/Qßbìb”·)s–~ßzî4®ÿýI>"ÆŠ œû•/î_S¤?ø¬»û÷¸—b@×…Sg”ŠÌÑmJÇZ¡ïþcH†ØØÛÈl)Ñyޝ÷þ,B¾}ÓÇ|öQ‚­;쮎œä6Š4†ÏñðewÝáîs+tjþ¿ìýW—$É– ~”w<2#Ù%¨0Ó=?s~ج5= UuY²È`NÍ)2¢fîyIuU¡Ñ ùpWäM w#ª"GÎÙûÛø¾¥ß6ôÛ‡œ#É<°+ñ}ÇØi1è¡$ÞyT’âª×ÇëT1FIG_vâ¿Ý2„Î"@ÞC†FÐ:BGv0\¢tÜGÖ"I1“l‡­ZÔx%ø¶ÁV]”ëŒbFw]dq¢¢ÝLs\]ã} š‰TÝ8- Þ¢Fq*i×ü'ï…ÞG<ªŠáAˆ€·ߺøïJ“Lrúõ-¶ãލ"Ö¡ë;BFDA"Sƒ]mè­G ÷, ý¦¢Øùå&ñýÂòåý¿ýzM:™>úý–ãô?¿‚ÝŠö¶%¸žn½ÆY…*Ƙ‘¢¹¹¤Ùöh!±¾'Ÿ’Î5n·Ž¡"óô–ìé”Ý÷ß±þP¡’XHh“Ú &ÇÿêŒòßc}\´ëåŽÙß}ÃÑsnþÛï©w†|*év’t&°•%™‘Ncà0òÇ DqÌèé(Lø®£[Õ¾|ßÑï¶x§1“1¶\Ѭjlßb&'Ñìj-Þ òEùÃ%rrŒ –d1Fê˜\VþôWÿí ÅW_sôå)ÝÕ3ŘíŽúr‰÷ É|LsyAúüYºáòޓΦ˜É3ÊADŽëvC}k™|ý“'9õÕ&vÐuÃêŸÄê ã“›ß=&I ÎöŒ^>B¸–åï¾£ïó/¿¤x<Æ­nؽ¾ Ùµx9t«œ÷³ep=‘$Ræ¿~òÛ×·dOæô7WT7=f2aôòa·,ÿë÷„ù#Ž¿^Pþ°$:§;?g}¾ÅLFP÷_~A±ÐÜþþ{šM7Wg£cN}Æêþ‰º‚üU+‡ÅÒEiâîx·Æˆ¿ÒP÷gÖ¤¯ßkÂ'æ÷V﮼K­ ×ÃôÕ ÂöŠº äãŒ@†LlÔ¢:K³ŽÉhøp/Š¿rþW~Ï<$ýò{þ…ë₩ÁÐ从ìÙKŽ~õ”êdsã8ýÏϹý/bú÷¿¢üýï ³§$~Çú§ÒgO™=9¦z÷õVPœŽé®oé 3‰ÁJõuIöì)þöOX<³»Ü"EOùì¨<'É taèË vçp6®kùÑ#ÌØÓßnèëždv„N“˜rÖy&_±ýýï Ó罚qûbw½¡xö9YáÙ|ÿN*¼ÓœþÇoÈGзžd>bõ¿£î ÿo¯èoVµÒ),Õ‡sºF‘/0E”ùù®Æ·n(bã2t®¨®ÏÉœ|6¢üðŽâ‹¯ÈtÅúmÃäóÇ$Ó ¿¾äê~À'&ÙÓ²öÒˆãËgé`0¿wo?xvD4uÎÞ£Q݇FG ºˆˆ²HÞ‡&ŽMI&½Âû{´&GѸ?QÑèæª5}-H)ÝÕ=_ exxíP,í–Š`kºÕ äˆôdŒÛ­±C”ú¾±…÷U dC[ß<§¿ºÁ©È–‰ ½^"Ò ¾ZáÍ‚é£ÀÅÿï;ôx°Ö÷Ÿsò?§¿~GuH§cÔ4Á—\È™~õ¿üÀõ?ýˆé°mT’‚s¸à }9:cþꊖúrKð-å‡ œ0H!Iò!m°épò'gH_Ñm<* ”—`Ž8þÕ ò#Áåÿ÷Ÿ(o'÷ÅÓ1Ióî5×ÿü†`d6ãôï¾@û?öBÇ"ÕÖ5Õ‡šë5jþˆ£ß>¥ùñ{n_¯9úÏ¿B45f1¦zûåEG=j<'›€­@çi¼|M{ÛEº†Ôç=côhJw{Eùþ }òŒé£1ë?}ÈÇH¯HŽæhb±/Å}HHÜvIµÜ,æ(™. ê÷è*gÑGÕ{’yÄ&£}ÒóPçÉ&У„Õï¿eýn Î2ùÍo˜Œ{.þ?"Š1JGÏɧÃfbM諚nW!ô!HEL¥‰'Vßöû4é¿äRù+¬Û⯿^€H’8ÎõáÓ?ç/-ÜŸ>%üùë…8¤1=Iè;|gçè\½+ÚE–"¬‹:'±—9|¨$šß!1Fƒ]æàðý`à’ñä¸O ÓÓ"JÄ¤À·}üc–Dx×’p¼‹!"©y€®¹R!”ÀÕ-¨A8ÃÈÔ Tìšß/˜÷z̘Þ$bW~¯Ms_·ƒ;8žôp1n<„€LRÀâDéÃd ? }Ô¼ëQ6¨@üa±ÃGªˆFó­Ef ¡ O¿ÃGéAw-*O†ð}xˆ\Õ‚b~¥£ ícܪ҇B,‚Þãd`Íá&týÀÏŽLìHf‰r©ãï"Fh»Þ!ÒÈäô½CM#¨Ýn+D±8ÁúøyFÁùŽ2â´ŠšDe†ÎStÎëùoèÚ‰½ùî_ý=ü¯ÛÃïˆë@\3\SDãwׯ‰‰o{„4¢†Ñá-fXƒƒ¼Ñàâ=*q‘@)¢©W€Ê >Þãdbâ4GÉØ½´ƒ,/øChQèmÄ—i3ÜË>v¥Šñå.2ècD9±ÑA¼^ ¸(×û®GdyLõ-[\ÓÅ.÷ê„RCijØõÚ£”Aeƒù+D²L3”1K™xÿX¥QÖgc Ös±Eÿ%cé¾G:tïKI¢£oßå@³ƒ™ï‡‰Ò ERC µwFB©¢Žÿo©Xèø8Èóì/ÞŠB šño‡&À~I‘jèêM á0.ChÚ»­Ñû¸'‰oº@áð]&fèlªh¤ëm Òj@®áH\ÙDƒä0J ÷5áÃdYŸºyÓ®ëB Þ§ˆz•|߃6¨,‰×‹81‘Y”AG¢O°.®ÿD=¾û´H}GÒ2šÐ5D¼§÷”2i5r\ I»E¤†àCÔ3¤8& *KuŽÀaÛ8©¥ïâ:í¦FÑ;…Òàmì¶gÙ ùĸ„ŸwE• ŒÄ71QyTŽJ§Þpˆ\—YrOâ÷ÈýAm¿_ ÂdpÖß•ø…þƒ¸kÊÞÐbÀ¤Ý¥ìü+iéþŠë}Óÿ’T7l~¼ {úœÅ×GÜþ÷ßQ®Ùš[;Ð`$£§cª7—dOž!EOWZêË÷4Û.ê&¤ŠÆ°”ÀäòùŒìlB°-ëÞQ]®ý ã©åö‡ãÇGì¾ÿ§ïñ飦»±©¸¿vü|ç>Œ¹ìøa¤.“)ùñˆþæ:"fQ{ÙZDð˜Ù…§º¹%9{Æño^н{ËöÍ z2ŠcÏF=:Âîn°6eöåSг)Ýû7\ýóOdŸ.CÿgÖ}ü£Å½ÉŽ’à,ÈŒl>'$¤ó1Áõ™ •gýÇï°L?{: NÅàÆo0“”Ýoñæˆâ8eûãØPP¥xo˜¼8¡¿¾¢¾ºÅ‡ŒÉ—g´> ÇgL¿X°ýÓw\ÿþ}œœ¼øŒb¸ýïßâä”Åo^¢ÂŽÕ/‘“)*ÔÈÉ1´·l߯¢AÊÇQ3²àø·Xþ×ß‘¼øŠÅ‹j²cŠ“Û¤[qýß#fÏ8ùÍ)»þƧ˜ÜaëŠ`¹“„Øxé˜t>ŽŸ™ohovèù&SئÃõ=¾­Ù”ìh‚J† M¿ãæ¿Gç5Z¥dG t®Þö÷*‚=9DÈžæz‹ÍcGœ€ïë˜P›¨<Å5kºµ½C¶-7tu¥9D1‰ï©ì†g-dÓùlÿ0¾ûÁd¯Qà\”¾)bŸ”ú‘Gé>Æ.þP‰ §]ÞâH?^ Ó*—¸¦$8ƒ.r\³¢[9’yN¿YÑ·±SêGñü9ÓçG”?þ@¹´L^=Cú’~ë¾ þéå²Áö6JqZÇèÕKF ºuG¿¼¤Ù)æ_ÎXþ÷?Ìl:A ¯ÝÛ@2_ KýáèDãÐL_>Ão·$§3ÒqB·©Øüø†®r˜<%=9CˆõwoñIB69&ÉåÅ’é—_D=õçt«Šôìã—‹AІ17LÞ#¯þ°Ä‡”dQ`¦#ÒyNuÎò¿ÿ€1ûüªßR^\Ñí ;[ t‡kâÏy0i\Àµ=r$é/Wd/Ÿ#mCSöd‹ fœzK}~A_ ÆŸŸÑ^Ü`LžßÖø>Ü™F½õ×dŒR=Ýõ .¤¤G ”‘-h/¯ã#Æ/fø¦ úÁ¬ê+®ÿñ{:k¢Jã0aë¾R1µ×v-Aj´6ƒú ¥ðuÌì‡(o˜"¿Lóçoãý5°Ò‡××Cš“Nòx¢Ÿîpü’ë)ÍõA º&Þ¬;È?¼s‡1¨a±q165I‘ÊáºïÕÀK$ŽBä? ¥ÐE†T!è­Z_5hÞ5iÊ Úª3Šš¼~[ã¬èTþÅÏtè’ï}·’{nè@2j…ðQgM¸Þã^¦ñà·Ä(©$!X¼•1¾Ówˆ¬ÀŒMüY­Ö¿èlöÖ£F9¾‰ï!®1¾:F‹;œ‹FÁ0fñÛZô|‚tý¡‹$¤‰Ÿmï ÁE-Ú0®Ig(géë>žèƒÃõ6Æé*5t‘ f”"d4dÚ]Iß9pûÏ)‹ìÚ¡î›ç‡‚ ¡÷xëÑ“ZšU 2ÁËÈsNd”œ qêôÉgÞÇà˜@$Œxb@Ý¢çG$I ]]–A§x§Ýön  ch¿³áøŽ÷QÇ'Ô Fpr/ ‘*.¸Öñº‘QêCTqªazg›6š3ó»Þ1wÀ¡{ïÚ.¢æ§ãxïU%í¦:™ͺú·®ÃÿvëößvýŸ{M{Nm@)®ªi2nµ#HÄ\ì^™qŠÝ–¨É(Nl@i‰ë[œ(-À˜èÙÕ­d¡qe‡LsL&év%¶ñÆ*ÍЙˆ¿O’iAhšZa BDÊÌ!¤j_x†Ø]K&I$äcÒBbëÒ aœÕ˜TÐÞn!M1…¦_ÇçNÊ=%c8Ø©vµ÷]ø;=´P2`¸aÒ#ï'Rô(‹÷®ë¢‰âÅÚ~Ľ‰GÀõ¡2&Ô… P&Šùýäñ€µx+P&Aë,¶¶¨"AŠ}w׺šùˆçϘ‚ïK \Œ¸Vòn½¿„R|x zkïɇ¿ ‡É©‡ Ž±Ù‚àb@U¼:vh¥g#\!Ú˜T㫚¾÷CœzœÆšÙ -{šu=èÂSL¡ít¡–7q楑*N\üÀ‡øI©bÓgHV¶eD·ê,áñuS´F'Rx\Û¡Æ9¡Ï€Ôrèkö‹ŸßOµ÷5OUÅ{:Dm³HSÌtD8Üè˜`(‡)‹&ÁBFOGðwqÛa8C¤ÒĘx1h©-}YÅŸ?ÉãgXÖ0 (c§^~¤—‡a"©Í0}rwÓ~S÷àBô~¥÷Cc"YFHG{»Å£Qºßðze|Fötš½$Hˆ¸/|zi;Ô–÷$©æ#íÆG:¶¿?*~AVñ‰‡À5ù³Ì_`·åš~§;ü+£¼?Aíø¨ý~ðÊA#°Í -È$ÝÍ ˜ :±´×Ð!T–‚';ž ³¸m¾û€ùã)¦ÈÑ©¤½¼ Yv¨é$äŽÍwçM‘¡A‘W(ut w›„"%ØÝ-Ëß3ûû¯°WoÙ-û¸üÅï!`ÇìëÏ?Š>#[vqñÕiýí-}ãîô£w:„LPY>¸³‡“švµÂµàÛò)Ið>aöõ3ÜÍn¸&={Œt=jTNStnpÎÓ^^Ó\o3¤ŽÉ‹AðH•2ùü Ù°þö5»óŠüä4j] ¸ßTžG “TççtGxÉìë/0¦bõ§«8þSL‘‰§ß´L>DùúªèDœâ¶jH¿`ö|Äî?Ò¹”ütJsqÍèóØësªm‡21ª6{ñ³g›ßý€ 9éÉ_¶˜Ù‚l–Ðovtm`ôx]_±þq…4•MÑ©¥Y5̾ù a[Úåš¾éº ;‹f™Ýû \0EŠïjœMHæ)åÛKfÿáWh·cõã%ÈœéЩdý‡ïqzÌäñ”æí{ú>!;ÐÝÜ’œ<ƤžÝûsH¦H_â͘bªio*Ìéù,Pÿôž®5Œ_<"„šíëkÌô˜âQÔt mðÕšò§KúV G)2xšm‰‘ÖÒîbŠU²8&[LñíßJ¤ 4×·¨bFº˜‘ŒÛŸÞàB‚Q¶¬ã=øàÞö8g8úõç¨Ð!’„òÝOÔ·ŽÑé)rœš-¶¤‹v³¤º^ˆ›¤k<“¯>Çßžcõ”“¿{AwqNù~@»«bWägGД¤'gOÆ4W×l¼¢¯kôüŒégOQî–õ÷K²§g¸Õr&ŸÑ/¯Øü´FšÈW×ùhñÞå´—·è£SL*±uE¿«PÙ[ÝR]®i ‹C'þϮÿt=ü2×ùoX·ÿâõõk x¯Yüê3´rTW%Þ{ô(GJAsu‰H猟f”ᨀ =h&¯Î¨/Þ²½ˆé}&/ЩÂuz¼ ›xn¸aüò åw?’þ³gËú»ËŽÙ/ÉŽ'Øõ Õû+¼3ÿíK”«q} œè–ê›AFO“é¯Î©—–ô8Ç•eDœõ=áÛ-íuCúèÙÑøß¿×à‘RÅiTš è±MK&67šd‚ÄdJR˜vŸq×õ„‰1•Nlóe2T"c·Ð?H[ù èý>>È|¤$þfWþB¾C ô½xæ0LM5BylÓâÚ¨¹NçGd'¾¬èV~(¸÷aÀH›J‰‰HVŸ‘ŽMô&:#Ê·ï±ä$i ˜! Ýy©¶Áõ1,Å»6úF”ÄõÞIÆÏO Õ†¶öC¾€!ø®ÄË”tšÒ߮㞦5Z'=m8|‰;IÐ=ÉCVD¿Ýáú½¬m®In¿‚ïÁlÛÆ±¸3šK“b  ÐÚ̲ØŽòb…Ì BWÑ÷6š¢¥Fi;á. U2H÷öZùá’2z¥üý¯^|ᣮppÃd8ב´cäC9¯ëéÖf‘Ó^ßÐuDSúð~>é qÿPIŠÔ]"%¡k±MRÞÓ@ëß…Ü5=£Ϙt ‹ óWOQ~Ãê×ä/žÑ^¼Å2böÅ)vuu¸^ 㺘ÔaÞ}i™}óa{Ey[#”_Ø|œfñëgÔ?ýÅ ù<Áu•Ý»‘¾¡P"òTÝ ·»O* kn·Ž!ZÝë€HdV TÔ‹»jG{½Åœž2ýì»ÚR_ÝÐ7–d”Òï:ò'‘²¥¼¸¢Ý4$Ó ZIº²Dç$#C°žôèIËöõOX—0~ö»¾Á’’äD޶ØGjÞ×»+ôdDèd:¢¹>‡üˆÉ£ ¶óCÂãkœÊÉFctªiw›8bò.Æ:xúj‹(ŽX|õŒîòÛË’ñgŸ“,Õå-zr‚Î<Õ‡d>AŠ[dê©/–“l‹Ê3|e)>Štê›>ŽheñA6@¨i®k’£)v·B¢Š =)ÞÑWå¡s óéLÓ¼¿À¹ŒìÑ·[ãÚ@·Ù’>yB±Hi×ÁVxo=^ÐÝ®bÈDh.nÉŸ=Ak—IÇîõ%ä3FOQ8‚-©.jЧGt7T×3›’˜"¥_]³}½D¤)ébAñdŽp=BxÊw—Ô7=Ó_½$ÔWì>ÔL^½D¸«ï¯È?#Iº›’üÙœê§sB2&4%Éü˜Ñó9Õ›÷lß\’œ=aöê _ÆPW¯)/7èÉFéQº8"=Îp­Å{…ß,Ù¾»À=aö|ÊúÛŸÈ_¼€r…uÉ<&- %qõŽúý ½ ¤ó:ÍI&‚Í÷ïã9J4¸Æz‡ÏÐ9´—K¬³}å%kVß^‘œžÑ~xƒœžqüëGì¾ûžj+¿|m»„"ÄhXýá-úø ²[±»Ü ’dH{ ü¯<}i™ÿú3Âö†òªïÈž>!_h6ü§fÌ¿8¢9_aæSª·ç$ggGÙi,¨ß_R¾»AÍæ$ƒÝT¨Dábúù ›o¿¥ëS4‚ìù#TØÑ5J·ìÞÝ ƒë!=žB½¥Y÷L¾y¡aýã "‘-¢¦Ý75"™’N Íõ–ääám4Ëhlm®>°ùé©5fvD¶˜ú6⾃q=b?e’ú‘ŽIæ#šIÒÄ0ž@?p¤voßQ^V$£tè¤ý\ó X±û„’éü»>Ä>+‰m;²GɧYLÂ,RêwïÙ½»AäJip/f_žÐ_Óû‚ѳ vuK³l1Óñ€˜k¢ùý5+|JCo f±<¢Ø„÷÷P„§±Ñ<¶¥½Y#”4äáÓE·¸“Ò!d–wG¿Ù`+¿z†èw”—¼ï‡àš,˜ùéºx`’Š<íõ-ͲÂÌ·#È1ùBP^´äÇ›ÎÉž>CKKÀÑÞlâ÷;1¸¦"taëiT>‚ÐЭÒùWoèv¾säÏŸÍ ªwoiÖùãäs(ß­)žÓžŸÓV3+¡Å•½XÄÄ?ëîŠèÁ³êZÉUå„r‹í$jd];„YD2!;*è—7ôÙéÙɘæü«×Ktž’.NHçD·býÃBR€ï‘*#ÍPY<õÛULw+Ün "C¦_W'Z{­xïѳ9é4?踣1= ×QÍŒõ‡÷lÞÞ¢’äáW?˜\¥11. µÖ¾xàÙ‹a3Él|hÚ= ³i…Ûnho·­ï›Õâ¯Å!ýÕÄ‹»?)p]‡-{ŠçO?šDîïSà/Ð÷G8¿týG´âg£È`{ÚÛ2¦=‰Oc¤ˆLÍÞÇäA•ŘϪÂö™¥“© ÙãnwËúõ¾€ˆlÌôåc45»××`2újK ³/ãÛ «ï. Ç»….¾éx„ïj¬õŸN!ò¨}0,¾|LõÓ;ôÙŒ«h[I¶Èò´%xK·;•w‹ÑÌ#jÐüèáw/‘:õª®­i—%É£SFGÍÅ×·ôu‡JMìÙîJäxJ1Ñ.¯hkÇèÙ3ÒÂÓ,²ã1͇ ºÖL2¤ìp½(2Ãû·– 4éb„ír‡w‘£-u"Ý BCð}Ô3;%!ž\ïI†ÉS’£1ÝÍ%Û[Ì$ÃäcÌd„ Û×çø¤@â@&¤£1RG\¬mJ‚Ë0c‰ëZYüý¶;D»ç/†dà(7¤G#„‹]ë½!UL4íÍ Õõn öü¹5鮀æS43Ê{ð¡ïïA©$¶ÚÑ®«‡&Â_ì†ü9-Ý/i3~I8ë)Ÿ’Ml×GóÎÏ4ÍŸß=<þåëc”ôÏßCáóA}ør@¹U1rY 1«{ñ¹ˆ#«RÌt‚TŽ~S!LŠÐ>RTJñhN¨*ôdL¿[Q]”Œ^>#)BLñSæ]DdïfgsB[ѬÛX”ò{ˆÈ×ÅŽo[’Å1ÅiŽëýž¾vO÷½ïÝ™&b`xÆN¼¯wtñæ¸[lÒd0tÝUµT^j”IÌ´@ÉhÆRJÐnJl ·$³yŒxf×; §¹XdBñäS(êwרé”Ð#IéšC&ÉbMž€­KlÝ"a}ïYˆõ™MÉÏN0ªgûæ‚üÙ~³%¨¸8!SÌ8Å5 ®j.lÂøùS´hÙ½9§­<ÅÓ3Šã„Ý›+D2ŤÍÒ¢rA·)ÑYÃP<>¢½¾DÏÐÕô èBšvH†Œ÷¤Ô:&iÇ]Ä'ù¾F¥²ã‚à||O":ûªÂ– ¶µ„aù¡oéG:›ÅÄ%'cj¿e{~KñänµBNf_S]lÅ“|(G_õ˜ñWVäO ]ƒíZúÛ-jvDq6Ƶ Sµ¢ËŠâåSDWR_nÉÎNÉæ’õ·ï ;f|–ã½ÃUÍå*¡²§˜\P½»Æë)Z\#HŽgd‹ÛÞ\WÈÑ|K·Ù0˜qÌl¶¢|»DŽgŒŸÌ£^ßuC@ÅöQz¡“¡,P*êýw=RøÒ“v};˜Uc÷M8ArzLè·”–d'OÈæ’òíõF*IZšë5ÁK̸Àu5® (b8ÂXR½¿Ž¦žÎqë[Ú²¹ øH†ö——Uño{ý_X·ÿÏ_ÿç^S\Çú²côâiÔéûŒdžb«ˆú.Fo§§³Hà˜æTï>’1¢«ÐÓ#$%6$©¥ºj=›ÑÝlIŽfôÛŠd6£½ü@ïFK|HHŽÆÐU4×+d>Å’~×’,ŽHÇ‚òýõº' D•¢©–¯k„ÉIf‘0A¸3ö PYùµWeüÿUN~œR_¬E+ËÀºØDŒÜ! ´a¹&´Žd1LV‘¤$”@ª˜èªë$Zõ”ﮟ*žï4õ%î(Þ»ó,?{„NÛ/Å„âd„ëúáP/ð¶Ãu-R¥¨Ñ¥Íõ=[ lM}³=D…ë"ö³žpˆ ç—¥÷TžøK˜ÄcîÁmxÿ^•CWˆ)¹â`²ô1üäR0 " #66eôì­]\ÛDæÕ†æj‡>>BkO}~ :E™AR$\LUj0Ñs‡Ù‹P oI ôMôü­[ŠQ¶¢\¶dNP¡¦ºÜ"ó W–HeEȘÀ(Dœ€bËEäã¨!îcA(¡ý*²²åÞ°;VÇÈíôx!u‹-ÚÕŽäèˆñ“#ìæÛi¤é¨ojŠçOQ®¡|IP)’h2•yJBj‚«q•8÷~ ˜? f1G§êž%ÜýÙvQV—e(9Î u¡0š~µ¦¹ŸÉŸ[“¾¾ûT_2ˆh€´5Ecù½F®2Âêö¡„C¦úß¡p]`òùsŠy‚³áçšæ£¹ÅÇæ?å}ïåh…ÝUô;‹Ðu¡ïw|ù¥#¾§`÷'Ü»(¨×IJ°]Lö]LQ‰¥¹Ý"Í„d$¨o®±>eòäˆP7ä/žÐ¯ÎYþñ’É×_RLë?|@¤éÃnL'™ýæ9n}ÍæÝÔ½ú2ê¡MÂÕ=ã/>gúdŒ¢£ãéràü(VT+úmE_Ú¡Ó® ®\l9ü¥`IäÚJ#è7‚H¢~‹”|6B$šì(&ííuJݦÁ{͆¤¨"‰c½ÖF½ŸEzÄìë§„rIyQ1úü)ýÍ{v·–|œâá A ˆ¼è÷¾ÃÛ†à†¸óõ1š“Ýù*›Qœ#}ÅöýŠùß½¢{ó' ‚Ý“ÎSìnC·ip}CH§}ó w}Iyµ¡k³o>cötÌí~$¤ÇäãŽí›3†úf…”)Þ6¸`?=¡½¸"ûì9ªÛP¯ÉØÓïº;çûð™êb„Þu¸&™¡Û"²)ã—'„ª¤Ûö$‹1¡©¨¯Wø¶jèê–t6!´5}>Æ·KêeôüÅØ²üÓ{&_FûúæÉ3Œª¸ýÓr4ñ§F™–jÙR<šÒÝì˜~ó ¿¹¢Ù6´Ë]ìpÏ ÕÕ•„jMµ³Ì¾ŒŸQ[Šç(Ž5Ëü޶6L_ž’žLè—W¬~ÿ¯ ùñ)Ê(’iN2‘lþôG†N¡7˜“:‘´W7¸NF†¨oi6+úZPœž’$s2F¸†Õ?ÿ„8zÄñožc—7´·ud¨ ·ž â99š!èéw=ýz‰íR’I ^•dÇ®¢]oèª=ÎIL‚šŒ±›Ê«-£W_2ž{–¿{ƒžLh&¯ž`—W”·%Á LQ€hÏPzzF6 ¬ÿ/4*ÉÈŽ'´7×´­»3 ý«w”ÿgî@‡ÁíYüö d³Æ©)éDR_îГ ZÕTç;²'ÇtW+džDùT>Âo×䟿BvWl®<ùê_,¨ß¯½|JwuMЊæò ¯­Áä˜i‚]­¨Ö%¦8"1¤üg#ª÷ï(7=JH=™‘ŒS|WâÚ.šÒL4à{Hæ#T&‘J£Ç9õ»7¬~Z¡Ó=9bü8aýÏïPÓ ®iã¤GwØ:&ê 3¤ÊU5Þ%˜œ£²bà»{’Ù3ÒQ'ªn[ã¥Á$Ë~MÐÙŸÇýýÓwBL– úž¾‰i¤Þ*¿þ*Ö?Ý’>:còlJsµ¢[·‘Ão»Hn•eié7 Ùãc|µfû~“ÏHçyD†>‘>ØA|ңĽâ鯺~o˜ÿXÂ1JØO{¼6•˜a-æ²!4ØrK_ºvk rï!²8MͲÝЬ;BPÈTÄ´â²EdcŒê©nÖ¨44Éh„P=¾ï†âìSïÁ#DF” ×àÁu=í¦eú›ÏIdKù¡%yŠèVl¾]a¶®PÆÐ—eÄ\ÃZ¤-щ‘iŒ¶¾—-!dÀÕUŒ9ò”Éñv‡m éL㬠?™¡„£ÝìèËŠê|Mñùg,¾8¢zûçF˜¬ewÑ2ýâ Ý»7¬ÏW1…VF¸™ÎI¦QCúß ©³÷¡"à;Ê‹;rÕ8.ö„Ö$ÓJǃB ò„úí[V?-‘I$˜H£?™)‚Gšä#áÃ)Hðšd6Aê{C~Ó®o©®6£ïaìþ½,#ÞÇv¢îÕëâaü1?úgãñókîý{üL£A)þś߷Ø]OŒJ¡ÒhÔòƒ>‚ñcÇ x1ŒçldÏëˆ`‹‰ƒQË&÷&¥bà‚ëîtb‡1àƒ‚n¦_ŠU´oq½ˆ×ÁyôhD:EPyTAG3Ü>Õ â7Dœú®ºº÷>óÃDšD­ž6ñ„RîQ"ÜU·›ÂÐ-—ô]@çɬÀ—[ÚU5ÄvëÙ£TÜ„¢NG¤è±Ç̆Hëý¢©b´8ÃF!Ó·]ÇXíñxØ„*lSÁ|ÕÄ1+~Šï<ÛAP¤Gc\×ã{†xð} ÚÄïÒu!"­‚Dg92Qòe±{©Žnã¶AæÌtТL ýj &Å5=Éb£ˆCBz:Á®7´×[‚È,'M¡ÇnˈìÊóˆËrL¦èw;¼WqcokúÖ!ì),E9ñ¸ÁõvÐ#tN:Õ´·f1¥»‰oSh|k *F#Á•ºmK2ŸÆ®Ší±U÷¯Ö!ó¦ÐˆÔàË[Yôl‚Vžæf‰ó†ìtJ½‚¼@ú×:\×bf3L‘F÷½2¤³Q4³Ô3a·kšM‹¡mQ“)Zõ4Ûžl1%t5¶i±MÍTƒÑD˜!,CHÌlФ¦¾mH $=¶îÑ£HnÖÑ×-!HL‘E©RSÑWc&… £¹Ù¡§sè*úªÃ̧Èàè¶Õ°Fða)Ó•ƃAäóƒhîC_¹ïý€1‹©è梋°-ÍrMšd\ÌF´Ë¦€®ò¤óß®£½ÝÅg_D­$Ρ²4zC2Ip•%F–*TªPFÐobäxr4CIG»ÚÅ.žIJà]ˆãÞà†)^Ü'úÍ–n×=Ð]‚%ˆŒüh ¾Ã– ®÷¸Öbf’iF¿Ž ¨É| ƒWGë‡}O©C ¶0»ÙÆ‚ÉȱOîÖas”´Ô7›8’NGd‹ Âu±‹éÁK\]â\@eYDÕ5Þ T"é×CVÃÉÑ,Nk·5É|‘€›&ýCwþ¢P( JD#ç_2L4ÇýáÞ>îA¤ Áö‘ =WíÃxöÆø/î~?>ÚL ½Ù¤Dè„ìhBpíå kÉbŠIÎFšSØ*„‚µ¤ˆ²Îá³ÿ³ ôàïLŽI$\„¾‹fM/Xœs¨bJ~<ÆWe¤j™$¢å†„Fß´ñ`—ÆCTšÁùôoýpoÆâY3ÈòU¼7· "IIŽgÈÐÓ^ïPÓ)é$¡]Þb{qÀÞÆéwµÃÓ1:´7+úNŸÎñõ–fY!ó,¢ø†û9 ámñßf:FÊð†fÑä}…žBªC¬·ojÚÛ]¼ïø´Y5 ¨S!ä''ûÁº»ÿÛ‡‚—hèí0!ñÿþßÿÃZ(1Ù¢!þÒxå£Ñ£ø…‘LøTÕ°¥eö«/˜œd÷:Сèá~¼(â#Sà}ŒÝ½ëñ‡ß)µ¢ÛTØÆó3sääÝýô=ùÆ~¸–~³RnRd¦ñ]E° •aáSïc€H£­ûý{ˆéB*›. \½¡]•‘w;¼×wQ-åG…õG'¥à^eÜ}‚X†\Ý‘={Áñ¯žšÂ^]¢ØipÞ‘žÆ <Øz ÃIM„@À`FYŒ’MÇñÚµlTŒ›¨?¡%:ì~zKÓŠ“ÆO¦´—ì®K²Å)É$=ŒÏ ¶ê:GhbJ£f.=›#Cíéb‚oZŠtyöã02Záªý®F&*K í†zݓ͡®É8biDÀ·5 ìæˈÅ×g4ï¯Ae(åØ}8§m<¸>FˆzK³«aIÉhA6 ßy‡ëêˆmKS ÁÕ5ž`Fé]²d|C¿i‘yJ·-1Ó¢/ÑG(N36¿ÿòz ZÌ„³ÿôáö‚êzCµ¬HŽÎÈ&ï<Éb†t-mi½<²¢|NWdR`òˆôÎÄbS4ø&Ž&ÕhA~$¨Þ®ÑÓ‚òÍ5ã¯>gtšRŸ¯é‡NM¤V,¯¨–;ò'Ï™<;B¸-»×8oho7¨é£Ó1B©ˆgªÉ邤°”ß¿£.ã'T?¾CÎÉÇ‚úfCu³füåWÌŸÍYÿñ[¬M¿|NZtì^ßP¼|‚]]²úi‹™Í¡^â³9™é(×–ÙׯHOõæ-åmM:ǃLš¢S…ïBåäÏOÍ5·ßÞ’?‚ÑW÷dO§Øå9š@_Óîú¨)5šÐöQßš¥dÇc”ÝrõOoIŸ<ƒÍ5»›šâùcŒè)Ïo!.ùh>уŒ$P_ÒYvŸÿâºú·®ÃåõŸŠæþKëö¿äúé{ð1 ïã+ãøßL??E:‡ŽíÛ·4µàä?þŠb&YþÃè“§ŒO4åUEñìa;Ú«kvJÒã#„°QŒê=Ùã9ýòœj))NÒX€ê•&±A€¢8-Øþð=ë÷ Çÿ5YÖ³}·Aj‰È.r׋1É4kô(aóí¬~Zt€}(OÅ‚³ÿô IذùñÛ êË[Š/¿àøëcÊ7ïin}4»!Â^HÒy‹‹û—VèqNóî 7xL³‡ˆ·}á&ÕÐPè˜þêR½ãêß"³™=~D>Öï"u¡>¿Å;Cñò“Bõ~SÛèh¯n±–ˆ²àâµ[]²»Ø0ùÕ71|é§ß¶š@‡t¾Ÿaf=Èi<¾iî¸Éâ¦ÄÁƒLQIBð ¾i ÈC€Zð•¸zë3ÒEJèï°­ÑnéÖ›Y>Ô®é}ñYQsõ_¾Ã ‰,æœü‡W„õ5»·4ÛŽìô”ù«3ð-«?þDc’ ÔçK<Ž  Fg§(ÙbÛ†`¹ i1Ñô~V¤ÊiŽ4Žn³ZÛ$Ahw;’Ç/8þò”æÍº]@M&QNi=2‘ØrK}SbÇäS‰-ÛÁe/[@½Þ¢ŠIªðNÄß™ÈAWÒ\-ñfÌâ×/asCuÓ §3tÕ‡+„™ E‰mS’© ¹ºEäsæ_?'Ñ%—ÿå4UÆü‹'„vÃîý ½8¦8™Äæ’«ã~¾Î 3FRÑ^w,~A9àÁÌr”á †À;‰4{sÎÍÞÉ’Ÿ€%½¸D(¡fb *ôd©jç”îcì`úïâ ³h’nvÂ/kî~éz!¥Äwý§¹ÖŸêD‹‡F _UxTdÿ–u,ˆöA »_ïcªä!”äþø(êÊã#†ïc ×€`Ùk¡öQ˜+Tþ¬¶ëÁZPY”I ú~\°‹Ìegã{ÊîJöºž¦]á=Œþ>ÚûAâactl‘£C‚Ôž$ÒãÊ:n*ÓQìÔ{'M9ÄBsÐøíD•§ìÃ÷#5\\üC‹l5ÎÁ[dbð å «ôñó“CŒrl:\ÓHœx 8<7‡…lø]2‚ÿ¥تŠÁ3F±Ñz؈"D&²Ê¶¬‡t'0÷¨Q½AÃ%-þ©"W×÷^ƒŒ§^OŒ rƒ«¢ÆÖÌÆH°»:zö±áÄѬw1^88çÑ5Ä! cˆqCŒìÙ®²»«ð½Cšá~aXÜmŒX•yD7º¦‹ïsˆ® ΃sÑ´amÄ{ gB@f:Óôë"Ið]ï#±» ”F§† ‰Ï£Û–È$‹ú=­"½„!ö61 â´Ä7mLSβhnR~[¢ŠŒÐ÷1Am<ŠºBiP‰ÂÕ2Q‘9¯t ™PUìºmÁb«öŽÎ“$˜élÝU8bO1\÷=2Iãh´‰Ñå¡ï¯õužÿ¥€Ž!nW«zT‘`ë]‘q‚§5R •Ç0·­bw˜éqAhë8y˜MÐYŠïšáñÃ^C³TžEì˜q½,r„³ôe×­P‰Žæ*“DlÛ>ýLˆ‡’¹ƒ¶9†’Øÿ^ ²8™pmG@AGD4¤:]*wž¨Ôšñ‡ÿ|SEŠï¢Qï‘E‚JÒ‡ÜöQÆçÀ• ªˆÍ ‘¥ý**/bHTYÉ0“|Ð >›aò"äþõïMëáP,þlãrއ­‡´¼ã¯ŠˆY‡1û!.Ĉ÷{´%1øN\Õ Ò}/oâ£É´1?MJT“ZqŽþvK0&×úaï-"M‘Òã:.R\©¾ëïºf8aù!;ÍÐyzØ»ðnØ{8HKľC+ÄaŠ}¿ûÌðb͆åŸQCd=\®jÆÄgºnc}*>ª‹8¿»û_¹-ö’~5Ç5pôwßPLÎÝë.ä qÓ¾¯oÐ! ©1ûâ*øX ìi!8úUO’r(^÷¸§RÜÃê<˜Jл^áÉPÆÒ.×Èt†JÁÕQŠq( ƒ@¥#d¦¢k¶éï"„E‚JÓ;úˆô›H0‹cŠã1¾·Ã‰oSª‚ÄÙabìgx Yù„i'x\Í+¶v,~û5“G9¶uÈ$Á·-íMÝÜÓ,²“×ê˽X 9P["¾®Û6C1<œì³œßë­¥‰ø´úrƒytÆâ‹§Hzš›-Èẛv+Ëñÿã+X^Ѷ 2±´7ºº%[<ÂŒE\Œ‡Ñ•w’d>G©}Óáî{RâË[º2ž“Ž";Rh#ÉÛ€À£Fé<ÇV5ݺ!ò+ÚÁú€!>˜hD2Šæ$vsIµ Ì>?cû§ïɘ$Óz:Æ–k|È1™U`Fv×DK{³‰‰UHÌ|Ò`&Å`$í¢ t`e ×ÑÞÖx'‘ÆÑ\Þ’¿xŽ¢§¼Ü!Júí ÎÌ¿X°ûö#ÒùŒÑãœÛßK³K9úÍ3ÒiB·½eóû74#=~ÌüÕ~WÒîjÊ‹KôìJúÃLsÜvƒ3޾~Nóþ-}Ý#q1̲¨ï÷’d6#9™âVWlß/IçS„“¨¢@¨Žö¦BO#'¹^n±6 €¾.ÑÇO¥TooIlKñxRŽ«ÿãO$Ï^rüÍ ¶P…BP¿ûÀîÍM”묵˜lÄüË—dF¸ª¥¾XÒ^ßR¯7Èñ1³W/Pý†ê|Ãä×/©^ÿ‰ÕÛŽÙÏѲő#ì†jí?š²ýöœ2'?Îìù˜êüÇ­[ÚU0_—t½bòÙ d·¦|¿BŽçL??ÂíJú^ TÎ!™‘/4í²&;;!Å©Èúûwÿ«ý/|¾éHŸ}ÆüiÂêŸ?P¼xŽ/+òçÚw¨V=ÒÌtŠÝÜàBÁì«g„Í®ÿù'ÔhÈϦøzËæÍ}|ÊôÑ™e`×l¿»Œµ—èbL:ŸÚŽôÉ„îò kstj)ß]ÒwžÉ«/§T–1,¥éI¦9*±+¦³ž”¸¦¦¯é,§½¹¦¹¼¥k‡gk’’ŸMh¯.iV L‡4cÌ$Gx0ãA2·Ÿ` ë¢el¾ýŽÕ·˜qöQD}lP¸^qö¿C÷îGnÏkDß3úüsN~ûŒöòœõ~Â&sNþãרîšõ·7Œ^=cóÇ?až}N‘Ô¬¾_‘>:C…ší›+ÔdAq²À•·Ø¦Ÿ€J¿:AËí·¯i×-ÙÑ)é¼ Xû³ñ¸.Nëúhv»Ÿ*dLý°?ȇ·Üžš°ïNz‡Ù Í Në*ʃD¥2@Þ#²¥5ýííÖ‘#eC{»‰æ4Eô=6Ä`ß¶$^püë'tçK|]³}wN MÉçtëkšëšéø5‰¸aõ®ãäï>£zs…Wíâýt<„ÑàZ?49f$Ó,:bë›n½RùîðiÁ ôx†]ŸÓ‹1'¿}NwµÁ·5íjEùÙœæÃ{œH¡£ÙU¨$COP)ùé1"Ø{x&¼Ã„_+\µ¡]–à,>1y>Gnì4þIƒ‹ŽL•%w‰JCcÙ5}”‡ë‚¨ÙZÄ¢uø\Óݪ~®ŽHIÔ< 1èÈ“¿û"£$ÀÄSNp±Û)>µaˆO´²ï§!rHJŠ¢.vl÷YìéG¸îÎ0Hâ©gxÝ{ýÎÜá*OcðÊiìÊ×XD¢ã"Ó÷غe?k¼£‘Ü ¿d¿ïŠõ•çƒC×"dì‚bâAÌŒbçÃu>vd÷/ĘÌÃk"êNpw‡.Bm¤V‡îJÍfñÒÞ…Aœ¢óßöƒqRüü= 2 }GæàD =p=^(DˆNwDÔÇ2˜@ò‡©‡ñ£2KcWbèÊÊ"ë"öHjdº?…[lÕÄÄ<%R¢Š”`Þùx€´‘x¤B§W5 $¾é1‹1¾mñN¡ö¸KiÞÆ8zz4B)G¿mi®‹?5„i»[€Î|Õài½à>ÅIÄdü€óÑiDìh®¾·‡NSè-A ZâA,Ø¡“ACfÐE‚]ïpAD©D:ŒRàÊ:¾例‰šBÇCÎ>íÏÕ ®µñž!vÏ…$xŸ©Æ·ýppŠ1¯ÞÅq¬5ü®·i0yüþ]Y¯1ÙÍÅp—ÿN¼1£–Sæ Âúi®Rd¾q1ŒIDm¬ç„][þ×?ÿ¢‘¥·.v²8Áˆ“ ÌTü³Ò?Œ}½Ãõ²crƒÝ•qûÁqïŠÈøí:ädŒÎvÓt±ñ¿ÇŽ¥Î¾·ÑûbÈOŒ‚¢Ù«6vÓS$‡<|¤-£#W× ”tËm,Ú}@$ß6¨¯$ ,ÎE¶¹ðq²”DÙŸ-kÂ@÷›¼lÞA§}Âqè@ÿ•è¡OÈlÕ0ýõ¯É³š«ø1nÞ?p‘qôÛW$ª?8?÷F™hº›KêKz²kïkÊÑ^¯Q³ô;ºm‹5™cFÝj 7®³1L‹{u Fz>Aú†öê6‘AR|_z´GOf¤GÜvE»Ü æ‚:%âÜ¢ût–ÆÛQyšë5*›a¦&jÛîÑ4‹æÏ„ìáNß[nè6mì:R&r6÷ ‹„~S3ýúK¦Ï&l¿{Gu¹&(Ìædó _ncáýïöS¥pï}`yMΆ¨çnøžv»#}ò‚ãß<§}÷†vÙ£F õõ]%)žœbtG·í¢Qfº@W6ƒÖHI³aG@¦PVµ·–~Û4t*WQwâ‰ùÐÁðq‘ Þa«~ÐW‡Ÿu¸d"éV+úº2 ïAf˜ùa7lÞn8þŸ±þÇ?’}ö Ó'†òí%›nÉ?{ÁäñˆÕïþHÛг ~·™“̧ç{ …Ű ßwØÒ¡rs¸F°e‡³{S„Df_n©Ïoè­GIíZTšáû&H¦S²Óqd0ÿxŽ÷ø-ÕõUdGgd¬¾}‹yôœñIBsyÍîÝŠÑWŸqôå)¶î)¿ÿj'8þû/¶¦ºÜ¡ò„êÝ[ÊeËüW_rôÕ1Ûß°úöŠ zvÊôåcŒñôÛpl_¿GLNÉÇ’~³Á,N=Ÿá›žúÃ9}c¿Q¾¾BÏ£p÷æŠäÑc”‹üéäô ­{ª7pƒÖÐ^ŸS]®†˜ø§4郞;L¦Ø»ñÔhJ2Ñß\°»^b¦gÌ??¥¹ŠaZy‚4HéÙ|ÿ×òç§ä‹á{ºuC¿íЋ”ꇘ³ÇH»ew¾&àiB>?E„Šêò‘H<Ái’Ř~{CPSF§dGsúë7l.zŽ~ó’öbE27¬ÿø=mo¢ê_¸®þ«^ÿ‹¤¯ÿQQÞŸ¾~ß}2ؘdB:–¬¿ƒ™M¡ƒñÏ1™góÃùpÿgä³#d¦£AJ+L*i®¯)¯6˜<§½Ý0ùíרö–õOò³ÒÓ#dwÃÍï~Bfcšd± ](ª.“9¡]Ò–éŸCuÍö¼¢xò\‰k=éb¹ß‡Èí32ئÃ5Qþæë-ÝrESV8‘3ÿâ)îæ’òfGP†âä{Ú«[ºÎ’Ÿ>&g±˜ö`F™ *@M ê·?±üö • ÓÎàÀL9þígÙáºXôËA DÃm +éÖ=Â@w{‹µŠôø˜$S„ྋ&ºlB¾H°›2“Ì'üf”’Ì ·ÿô-›ËŠt\ È||ä$øšö¦Ä̎ЙÇ5Õ]zØk„ΑY¤5$Ð⪑ŒQ9´7+D2Æä»ëIÌtô÷ô;ª«Ù£SünI_Bzº ´[¼ÏÉNÆØÝ*†£ &Ì<®ï26ülm™ÿý¯HرüÃf’R:žOPF“ŽM ËSvß½&ýìsò¤á꿾F-Ž᪠¾k2#YÌÁš9¶jÁ Ò5/í8H°5ír…òž¼AΪ˜êªÛžÑ«$F‚m¨Þ_P­{ŽÿŸßVçì.-ÅãSìîŠzY1þüKò©åæ¾3BŠ„ôx‚ÝÝÉÈ{•Ŷ5úø “Ó‚îr…MЙ!dôå†ÝÛ%ùãÇG½¸l¥"”·\ýÃ÷8£uJ:™ r=„·TøÎßËå¸W¸?˜@¼3_. ºëKloÈŽ'÷4Ó´;Ê'T<X†®C± ïæ±s4ïºÍ¨ád<˜ÚÄ'Dëû®ã/YÇ?©ßtÏİë-B˜˜,Â_&L}¬q>ÞaO͈f˜;ŸEÀu=f>Gkè6eDz…€4):•øAÃ}÷¦¢áRȨÁ>Ägiƒ¥Ô0M xÛG%LpØÖ¢ÇcÒqŠÝl"E)í*¼W(­"BÐ)'~†.ÊýB7¸€*T¢ãwª$¾ièwÃS®t\Ô‚ÿÄ @ ×wØzTõÉ!ìÿ»º“¤HñÑ=ð}‡ó’ìhB¿Ü Ž0Úãš–n[C^)Ýú–¾¥ÃÏ» ¦ Þú¨AÖyt`û¦‹ûÚl®ÇÙ˜Œg7;ì¾Y.Õá»D2·ñ¶s‘­i»x)…J3„ëã!MÑ&à:yÏó Åñ»ÛEÙM–’ÎÇÐÅ®8RàšÛ;’ÙœlžãÊ’fUâ}¼çt1"ºå$¾w¨$AªˆTY†Ì%¾±QW–d¨TàÊgR»YB¡1¤]ÇNˆmZ¼4dó·ÞâQ,ÁUÍÐ ‹59DÜÇg"Ƶëlãm7%r”㫠̣=Ízƒ™B9¶tÛfèkûØÙTqñÞ£ãm}íºøüj9DÙêØ™G!…@OFßÒ–ÉdLh{ÔÈÐݬ°Aò¿šÐû4SH5˜Íâ½…·q`Þ’Ù`ü,»¨­T “æiñ­8y†Ûmãý‘d„¾CMF„¾ÆÖ ‰H¤p4Ë B§H ˆÏQ ”ˆ ˜èñ S$Ñ2¤FéoìȪ¢ ™e¸²¢Û Ò¸½,Åv8/PÚÏðCW]ÆHiß»8­M“8Jб ã°žÉDcwšÛzðÕì E ÙQ¤Ã„‰‚J kd7tÒâ$)x‡ëC u¦Å{þ¯÷Éa2|ÏÏ#%z”¡ŒŒ2ˆÖcÒAW,¢‡(p«=¶±׊˜§ >AT!H¤rCNDB| ûH×’ö0É >®%B8lçÐY«n 2àhd¢bg¶³ƒWŠèÙ ¼çH½J#‘¤YµÈDëŒAi³3àËb×29:ÂhGuµ&È'Ïû}yØbdÄA.éÝ™M¡op­C¦ÉA#„"}b­ï_/ÕÚ¿ºZñKÅóÇhs¯+0<ì÷‹ô?×>ÝN®®Þa·í€0Š…šwvˆ9 ¸Æ1ûê3ŠEB×xúM4¾Õ²úã0SÒÅ$"‚@HOè[Úu‰í=Ùì=‰c¸;<ž„ÐÑ­Ö'ï¹â{ŠÏ^’M=Ûï/⢔͙½±úÃw9Û£¦sÆObxAyS“ RÛUˆlLz4CØþ^A-é֟ͲañÆÃH-¸;Mö§îðý…bTéð9ê,n ñÎÒ\,±½øž&G¦ú€ù‰W×tÛ 5 £ÞXP6—çXŸ1z|Œ¯·Ñ(SÒÅC¦•ª†M ýÍ%«ï>Ä‚0ŸpôÍ Bµé*€"h.oè· z<ÙÑ^Þ²9‹/XÿþGŠW_¢ú Ûk’Ù1É,EH.RÚósš ä'›ÞF-6–f]cŽŽH2Ow[S߬È^~ÆäX±{·côâ”öòÛªˆ™[Þ’ž>";2¬~ÿ#^Î=™ÐÞÜD´]×д‚£ß|[]Ñ•-XÇŽl_;ò£\½Â’3y<¡~ó$*ÉHާ)Ûïß’iaÙýtIHFägGÐEÓg~6G«†åïÞ"ò9~·B-N™vL·¼dýÝAÇPšdzÄäqÆòw¯1'ϧØÁ°Ø|ø‰Í»’Ù×_¢dMsU#’€ïã—p›%›wר¼@!HNNQªe÷ã9L˜ùúáõ²Fåšîò–ìÅcšwo³G¹cùûs„V¤gOŸV¿ÿt¢ûÁß¶®þ;_ÏŸ™®þk^ÿ×¾¦Á´ƒTŸ‘Í`÷Ý:Ÿ1~ñQ¯Ø~¸%=~Äèq.RºÛ-mÙ“.fÐ,Ùþ´AOs|ç™~~ÆîǨ6“$¤GG¸zã' ¤i"âÓ•[Vß¿¥ï ÅÙ)ÉHÒm·q²å}Ä*ífšê™\Ó Í™]mP“J÷C×s4„˜bšÌs|»£Ûµ8ïcÑžÄ@-=Y-НF$yH3†ÍC(‰kz†dšÜÉÊ÷ëú‡]˜aâå ±˜ðõŽv¹]Ý"uBhÓ_¿Àm®Ø¼­ÉΎЩÅn»H‰ÈÆ$cE{½Ã¡“(u3“‚òí[6o×è"E 5ÈöûaFz4EÒÝ>U\ÞE4ãÚÛ3;"?I¨Þ~ .-"8’ù ZÛ¨+?šâ»-Ým‰P×Õr¦Ÿ?‚nKy¹À.a8|¥±‰á-Éä˜âdDsqCñò)íÕ6okæ¿z…Öõm`üêîú·¯×Ìó5TKªóz~ÄøÙ„Ý?²úqEñì Ù´À÷o[|SƒÊûB<ðºÕ-ݪÅ“L3p«Á¼põ>hE GÒ¯néËß¶ÈÙ#&§‚ëü™Œð.š—µ4«’ÑW¯õ5»ËŠñ‹çägsÜê=7xGrü’ùg6úåFrü÷¯»[œš2~6¥½Ùà¼Æ˜–Õ?¿Æ%c²ÓFG9Á6l~ü@W÷(¥=}Âèùœúín¿=Gf9ʤ(­‡w3Ä&I¸k(îu¹Á61ŒäÓ}‘zžÅHrßÛj¤»i¯Î¢´Ð»;Y«ò.ñs¸§T&¸ýÝ÷ìnZLžŒ¯Rê»Zðg¡|!6¿&3ôØ ÝíêËÂì)‚éÁ¨Çß`F!êAú²!=9et:&„áAߪ¬x—ïeÍñó"TDD¿³$GcDpe{ÅŠzÛ ÒE»°®§»-ï6û‚X~jŽ~±Ûû3ó¡¶k±WÅÈ•î‰âïÀÜñvǾü„è—ZÐAÜuÒƒ¥ïlíªøƒS9`›ˆÕ)Žò޲í1G#„k©>ÜdŽ)rt¢Þâ]Ôu÷uëÁdÒD&¢xð ”'ô=Xø˜Ãû¦Œ7¨$jZ]k±®få4C%òÎ<7Ä}›i>1E6æ t·¼×¤‹|0ÞcèÞÏò° %ñmG·©ÚŒï¹íÚú@þäÚŠvc‰'Ø!QÒ2vo‘1>Ú(d¢âç»îtŸ‰ä}ˆ¬ü #¹F†»É 8ÎJ ~ƒ8–JǤʢó,&®cè‡Ô“e .âUƒk°Umö²6˜`Š,Êc‚&É3Ô(GŠ–Ýûôä”â8¡z÷žºÌ^=Aö%–Œl‘Ó¯¶x‘‚òõz+1³£³1n½¢¼Ýb[‹R†âñ#ŠGcÚë+vï–$(eâÑ9‚Wèî~wX< Ü\Žn¹ÂYš7|Lü‘™ÄõþAÈÉÝyA|š¦w_ú!v·B;ö‹ $wº^ï=ˆ€³‚ñÓÇ$x)é–+ÚÕTJr|D:J‘Òú’õrÂôå1v³Æ¹8bF“Î úÕ »·Q#.”ÁL&(è·[¼„`ñÖ¢'`}SÆ(T<Þ Òé_YF¯Îè.Î麌ô('tõ¡‚€HݰÛSW|ÄP ] ã=©ðÕšÍx™¾kßyÆÏŸexE'Þ2ljáp ñ] uÁäå)v‹H=Êè6kôä”|jÙ¼¾%9:î‘»k)žÑ-—9%'¨ÜDþõ‡-z” Øœñã)囟hJÁôÕs´²4«’`}4^ú¡” R²“ ~µÅ©¨÷3ãœtšÒ\]°~}Mzö„ùñ»ª‹=Ê©¯/‘é„tVàÛ’nÓ#³‚âÅ)öú=Õ¿yF¿ÜÐoK¼ƒôxŠ]® “&Bã…¤_ÞP]¬"ÎmT CO½Þ‚,==C'ñ³ÖyFÛ{BSÑ^ßâÕ˜ñÓ»×ïI}K³í˜~õÕo°aD2ò´ËZlåIŽæèTƒ ¨Ì`ë’æv…oųGÐíèÍøé‡­ºÕ‚›£SŒ_œbw+¼˜2~6£~÷šz+™ó ¿[S_ÜÐÕŠé«SšË+\(?ŸÓ|x‡õ‹_=ÃÞ^±ýþÎDsóî‘e¸ÆQ•KÊó 3› ŠWm±Û•QyAq–Ó|¸ o‡iŸÝT]LHOæÐni®KÔ8‹òµ N‘?9†¾CŽr¤°´›nˆN0£ 1LÒ³§d…£º¸1B%®*q­;lÜ2‹Ì"ØHh³àö¡7-“¸¬ˆCç¾¾tèö¹Aê$ã:ß]]âCF~$Ù~Ø2zùí+š«5jqDRª‹+šU=ĨǽFç(ãh—+D’¡µF¦é€PMÉO&´×ç4eŒ·!eò¨`óý[Ð98;HõˆA%#ÝÛ3)ðÍŽ~³Ãy4Û:ÆÏŸ2>Íi—kvooѧ'$I zw‰ÛÑÓ ³Ïލ߼£mc±/TÊèñÉ$E¦šþúœÝ²göÕKD»f÷~Mz|‚)ízGsS#“”ôdŒÛni–t1ŽÝU-pm‰«=£'Ôço)¯-³W/Q¢Â“!(ÙütMvú„l1!Ø)¨Øí N€Šëiù£ ¾ï‡ýnŸxú}M"]ßb»Hn²Û£)=t4×òO±—ç„lÎèñŒ~µ¤¹Ù"³"®EmCßÄ01¥RÆ/TÞS]YF/NÁÕØV"DC}µÁŸ1ÿìŒP/Y}k†ñÓS’‘Bfšòí;¶o×Ã+‰&ë` $$Óq »gzlF‰¯6¸N£' apýÂB t¸ºßßÜ™"ðEå)Ýze;i‚ 5›‘Ló»)u8 |h®6$§''9Õ»sÊe»åÁ„Œ2Õp?v/€è}ÝùNЕ;úMuO½—pø{ˆŸ5¢v'ž(5¾ëý¢böÕKŠ#ÃúÛwt;ÅøÕ É$EpÛ%«7k¦_¿ÂˆÛ>d)ÿ,ÊûPàÞs×íÇO?©‡;½n¸;uH£è6%¶r±èüxá¾O¹h‘ABxøÚ‚@ˆ˜žæ½ˆÝÊ{¢ø¨ÕRŸ(Ð?úù÷Ø”<8…E30`Ë®»‡šùxo !†¨b„l1¡8›"„ï½nAæèBšüt ÍšÛïÞâåŒù—gørC_k„t¨qA~:£¿º`óú:"}D‚HÕÓmK¼‹š(gf4CúŠzµ‹D”á#JF9¾ Œ^ž`ooémJ’GÖ“<ÈAëÜõ}#ÌÆ¨L>”h ‡_nؼ¹$èä®ßz&¯^OÖF&¦ëéÑèÀ ÎÒݖé>ŽÄ|×Dxüð!db¶¦ß”X7„oÌ -}£t}·CŽH³–Í÷+’£Ediû× FÏtW×t!4%å”?ýÄöÝ=)bàL2añê˜Ý·ßSUŠ£_޲%õºÆµ=ý¶Š$‹Ô@Û¤!;C×Ç×™Fãc²˜b·7¬~¼"úœùWOpËKª«eåõ2] !´´«•ÉN2Ú«kœ*˜>›Ó^l@E ŒºSÁkò§ÇHzºÒâê-ÍõQd¤“t ÍfK9éd„ðžädN~œÓmJºU…¸±NŒ™½œ°þî5²˜BSS¯Z&_?# >¢ÂŽêÒ¢‹@¿sÑÑ/‰hy ¾¾Àº„ÙgOñí&vÏŸž’ÍRš‹[lÛôt뙌˜¼:Á­oiw’âÙn}I¹òÌýì–lºÄ…‚É‹9Õûs\È™}qLýî=Í8þÍ ìê†Íwïq*#Øõ=Îè7-ÅË3Üví ¸ }'†TÄ6vÔ÷Îÿ?WwòWÔ ÿ£®ÿ¿ÈkŠ’ªÔ˜|‘Ò\_ãФã1:  'SòÓ¾î¨ÞŸGè,§_oémO2™£D¤¦/žb×Wì>Ô19-O ®¤]U$³#¤Q¤ Mýæ’Þi¤Q/j=&“ íŽæÖ‘ØÍÛz„JHædð˜Ó)¢m¨—BI‚èÑ“´¬¿û€^Ö:ÒèÎ-x‹)BíÙßfHòmiV1(ÈmVxUæçúxÓÃþ½‰qßf\ ½ =Ò]_S¯,éb‚2žà ¾ÛR߬Ó_=Gv+–¿MHf¤iŠ™ä¦Ô>°y»F&:Ê T$–A'–Òÿ,3!pÍ×j’©Ž‡‡ûf1¾HIQDïPԤΑ²Çõ‘ÕnWô­Ãd)&IÀ$CZ Èâˆ&]E_yŠçÉŠÕŸ^³½¨Ðy©eR¡Ô>\î®> N’LFÈa"†ìÙÝšf¹CèC”·˜ÊÁ&îK'î/fÎ!‹ ù<¡ºX‘=:ÃGu¹¤¾­IŽ=šÒÞ\Q^í\,°•Ñ|fùÙ1&÷ÌŸjÝJ|¯€þÙõŸàî’O¸¿ƒÌKþc%Æ'rê÷ýýξTH#è×úư|!ød0fœ""G3Ð.îxÙ¶j{ÉÄ/áö!.! u‚å¨BÓ^/iwj|× òè î–%$#”RèØmI·íñ=‚J´™Ê0…Án·Q_íãÁAj=¨È¢¡RGѪT\l‹§×ÓW*pe^FüOßÇ¢öð]8‚0± †Ž}ªàÇß³ø¶¡]FŠÈÝægf¶ [äøÞÅ- ’ô«-A%àûˆ ’gLJ™'„Àû×[‚äOO¡ÛÑÜT¨Q†OIFWoéV-$)¾©p½ tLhÖ´Û3’ŸÌðåšêbp ®s1$,}Û£òÒ[T1";booévŽìñ8‹«[úƢdžþz… †ìtL¨œUÕGÍ»Iï ÅãS$5í¶"» íò†v ¦PÈdà|w;ÚuMŸYŠ3Né×+ÚE¸}|J>Kh/nè»>N&St&b؉Q´Ë%ͦGx‡9Šée® ¤sC}±Æ–*J JP}¸¦«òÓG(ÕP}X!DzŠaKªë[|Ð`=f±@Ú‘!ÆÛÊÄQ¾‹ñãùÉ”~¹!;[ÐÞ\еŠt2ÆVk‚H¢¾Ô‚°¸V’ŸŽho–˜£#üv‡CˆŒˆ›žÝ®è*AñÿoïLšã8²;þËÌZ»zA£’’¨5¨FòÍß}¶}sø[ø›x>€/ûèPÄÈŠµPI€h½Ö–•éÃËn4 ¢(Æh&¢ßd¡PKÖËÌ÷þË[b¾¢…”SÏVDý!É ¥[еºÎqs¶€8#*RºÅ2H!ý• ÿÒ0Л Õvâ6Д§ Ì`ˆòïZÚuI×Z4šôhŒŠõÉ• È&õó)Ȇ]­IP´TKÒñå–4•&Î<íò£ë§'8R²ãC¨kt/ÆW+šEGr0"ÄÔ§§4MDqœ³üáÒÅÝÍÙ)m#NÒÑ™‰×iÙŒ^ÎQIAœg8»¢]ZâA»ºÄ›œ(RΡó>É °‰`¯:š‹º7$ÊÍ-Tœ DäX‡ÒA¢Õû0%Êøvå [·è´@Ù’z¾"ŽÑÚbWñáÕTز!î÷I&}ìù”jÕ÷3ÚËÙ[Ç`!Ô¦åÓSšÊQܹG2Œ°e‹]\Ь=éÑIbY?Ÿâ|ŒFäô\]‰S{l„Ïc²¢7ä: ½;‡˜¸¥|¾Äû¥äÛGuè´G:*PÁæÜÖõÙšäè87´‹ͪ& ”±9_Aæ•‘P4”'—¨4‡¶Æɰ ] ÌÅ{ˆzw'¨¶b}rê ˆ¢ˆdÜ£™žRÍ¢4Âä´îè¬äØf¶&><@{±£ß¨œ)¥A9¾Ý÷æØ])ãi¦3TÖ'fØå‚vQb­teU0fñV¤[ƒt<$¦WløçòINu:¥³ÒÅÏï L§kĽØ5D1Q‘uªÛ”¸F“¢¨q^äåêçÔ+Kœš«ýŽú.Vß;á¦Eye<]Ý€í®9gz§ÐyŠ+K01Ú€«jÌà€(ñ4 TÖ,ݲÄkÖbzÔU¥ÀL#‡+Žîè*Ovtˆ‰Zªé9íÚߤ4生àw•º”Ñ(£qEgyàô ”Ô7 ®n@o!ze9ZA×5Â#Ûjbª€û¨‰'osø~Îô‹Ç ~÷ EÞpþ§o™ÿXqðéG~ÃÖ†üîíKêyCvçƒ÷'"5õÕ÷ˆŒhs¢­±­0ƒ 5ÑðˆþûcÊï¾gu îRŸ^à]P»è)ª“Þô~<¡=;£¼€(ïh5q‘A×bkE2SLz43ÚzoМ°>W¤CO×ÒÃ1qÚ²úþ M“Œh㉊˜òÙ)uíѮÌÆôRêÓ)uYa²ÒQ6 ÒqÂì«o™Ÿ¬ÐÊ“Ý!ËÞ§äÇ ËoÕ’Q/'?€o™}ý˜¦r|ú€H¯8ÿâ{è èß¿O–7œÿßC=|kÖa,*. ]£’¤ä싇¨áúÇìlMÿÃ;,~MÓäô¨.NqºO’9leˆÓ޶‰}0äâüîCšGO°j@ÒS¸Æ’¾=Á]T¡Òœb2ïÚË9Ögd£„òä9NE·š°ÝºšüÙjìŸëøWý_züë]“«’{ï„v†Ê ­;Öçç4eKÒë“OÑ‘¢¹˜Ò‘’`çSÖ—sÒÁ€úbÅè³1vÁâé%ý÷ÞÅ^þHÙöN4Ëg-Ãwû\~ù-ÎôÉ'Ð6bõ>;gý¼!* zoÑ]>a1õŒ?8`ú¿_Ñ% ßS<¥#E¹†®SäÇÇ$y°Ñ íb…2&É@UÔçkâшv>…tHÚót•TvT’çYhG‡9EwØe‰Îú˜DrBÔÒ+'Ŷ‘¹ÍÒq‰<>ªì¢¤--®YÓÕ‚IvõŒõeE~t£JleÅå±]Ó,[²»w¼wÈú»o˜ÔôÆ9ëéšñçÒM/ˆ†Cp%³‡?b}DÿèG`=íå)åÊQÜ¿Ooè¸øò!–ãe#íí’fi·*×ç·GÆá§‹GSº.ÁÕ ¼Ï‰ 1ŠIÆ#Òa‚²–jzÎêdI2™§ò|œs˜,ÂÛ–fzIctÍ”!. ”¯)ODÃ]9G%#ò;õóÖ%F+È~ò.öÙc.ÏH&ÇÄ1D½„êì”jÑ’=âbªÂ»ˆ(U´ËÓ2‘ÜÂOw$ 7+dS|ð#0Žv±– Wa×KºÒ†Ž´C‘éšf¶À9M»\Óðï°~rBuéÁ­ðfÀà­Œó/þD§\1ù›÷ñó3ª¹8ÐÚ²A™œd´sJìчÉdcqÖYÂâ›ï˜=YÌÎ{0cbÙØúëÝ£®­q²á˜¤mùJ®«ÄA”Ánazír.fe=‡]5˜Þc,íÒbò|{Ïm-]Ù|r€«—xrâ¾=踇RµŒáÉ1½‰añÍ#š&%õ)Þ9¤™>åüá&K®ÖmZcL$2„qŒê4ñpD”‹¢ŒNbÚóç×­¼•VC]Èb¯Ñ‰,\µ[ ±K'ZZ O2’VŒ-J”Š7­ Q®ÂâCñ@cçS(0²ÊíæžÖyÚ¡Á¥`J7 3·DJ ·ê° èHaRÅòÉ9üý?pïóÏùïÿü’,çv}(+ðê ¢ôÁýð•mÌw ~ƒKþ9œã‹´R¯‘¯Oj#ÿâ_pOH W$g;0B\Ü}‹¨¿@ðŽ ÂG,¹Úè­¨üFÞO°Ì^Äòw¯o+´¾­K^æ¢ÉðËAKQT1„t%Ns??ܪ_HEÞÜxo»?åZÕ-U/¿Å›«Š×ŠÃe°÷NDôÍŽô?ÝälôµÅ”CËf§ë®´"Ýæ¹²%;ˆU©¾an®}—eÎUµÝY5ë©`zÒ‰QÉf‹×H1Ñh-æ!x-»hç®SEÑÖ>c‚«“9ž`D Œ`U$վ㒎c)^)±°wGÅÑöoŠm¸Øå*¯®•¼mÃñÁÊ>XÐzç„8GøF~*%ä+EÐôöÌW4 ´Ð7ï`I¯b%¹JK^êÚ.àŽU ïtá„Äî¶¾7¢ï®K*ù`¸";®ÀÌÖbl°%§héPø ÉÈ÷²•â‹ÌO¾Ÿ}¼E»[rئ+&VÇÝV¢SÚÚ.HšŠç¶[‡XEp¾ „?‹ó|0×RgíŽô%b>a»PŒQÊ…1¤¬ÏŠ!WF®m¥õHòÙ²MÐÆà;dò¬hßï¸ì]#YmŒEÂw¾9nóîæÐ9‡ÖÁÁwGÍÚÜÚêZ *Þ¶Ò¥Ûvãnä0eĈÈyQ-²¾íÄ ¦éÐI$¸VT•T0#S1g2ñÕ÷Lx–jÃ빑¯·gé´z¯Ã\ÔIÃ]ÏaQ$F"Ö…kkƒ$«Úº#ƒ ùf#Ië·r¹:6¢>eŒH%¶Nl# "yç¬p2¼m·=: a×¹`É­%Ï;ÞU0àòþåx©ÂÔVÆïj®’b¢Þ1 sçÎ8ºZj µäC¥wòÝ~^­€‘JȽ~GRo3®îa3”®Ïåþ¶9”+ ¾ÂbáµÄ®³ä¶ í¶îƒbþ¥ä¹ûú­”¢1Òù÷á[ÝŒ‹—·s¤/ ¢XnUy1ž1’ão[¿y¿cRøÛkäEAXø¹ú÷¿ûl¦Óh8|bpÔ«Žvƒr’ØQ^ˆE³ò2H[èÝO¥E{–ß4D$}Š*ŠˆG9“8Ž"Ò T—Ia (Õ3ÇÊ8£;‚èÒãSO6mè[C1‰ñ•¥.=ÖB66œüÏ·üí¿üŸýÓ?ò_ÿúÏä£1¯%°ªn'óýÕO4§sW¾Ñɾvœþ•÷¿q"ÚTú]€°l¤’^çoxÿ‚½Œ¿’|áï½£WoáøMçÄû—˜}˜BÓÍC›ÉNÄ *‡U.a«¦eE9A*o@¤ÀŠäH½œcËŠâøøÊò{ûØÇ>ö±}ìcûøóÄ\ýá÷ŸûÛvCÞú-å­êyñÿûMõ†­c˜Š®Õý¥H“»ÿæõ Φ«°/ícûØÇ>ö±}ìã7õ‡ßþ0Ü?Š}ìcûØÇ>ö±}ìãgcþÿZsÞ«?“² IEND®B`‚miller-5.6.2/doc/pix/mlr-doc-sepia.jpg000066400000000000000000005517571354153536500175510ustar00rootroot00000000000000ÿØÿàJFIFÿáExifMM*V^1f2m;‡iˆ6HHPicasa2015:04:29 09:24:49Picasa0220Ö ` Ò  ¤ !ê2015:04:26 14:33:4579f3818a3c4015f1f990ee9f47c7f71d0100`Ò„Œ(”zHHÿØÿàJFIFÿÛC  !"$"$ÿÛCÿÀX "ÿÄÿÄD !1AQa"q‘¡#2BR’±ÁÑ3Cáð$&Ub²Ó%6DVrÂÃÿÄÿÄ!!1AQ"¡ðÿÚ ?ô´óTÆáRª¦Öûg¸xc 5^F®ªü­¬þ˜n´Øz¿!ááúk·Vþ¹cŸÙ¸ëËUÚ…Jª“±ää÷øc´óÆ™tp×TÁÛ3vŽû° ímúÛ :k£nÓ²´‡Óµíðö{pçå™vk›äô¹ =d¹nÎt··;?Böm–#µt%³ê‰T˜ä€ aÜIÅ_µÞ¢þÍpÎs2_@tk¹¾Øqø_ƒ@F#‘i-f&Œrêyt=ø¨ºV]ÕiØÙ{2| ðÅQ†¦žY(¢˜Ø(·VöÕÂùhÛ{:þ˜µqfò<ôˆrìö¯´}W£„2‹m¥»ï~X²Dý¤I&–]@,,Eú߉P·Y1¹Ò¼Q[›1’)’®x©êÚ53FT¬@¾÷å{÷ãFϲøgXçÍiEÖäŸD 9šF‡3•šŸµôr$Û»¹Ñ[$+‘G-¬6«¼àm I2I¸§(Z“Ìit¯¬~¸QñVM%;H™+06Ð|yàzZŽÒ1ýÔ„2ìoFäûôï‰jJ\µ©#ž\ž‚e¦Q¤÷n0''ìKÑ XGl7»ÿÊf bÃksçá‰cN-}mŒ!ªÆäuðëà¯éI­âŽÌž(k2Ú£—µËƒ^Ä›ËlUŹ ”²SO“×Ë‹ó‘š%e`;Å÷ÄÕoÊñ3¼A4z½ì˜0ä–ãZÍæ]s4‹‚fͨw‚»Rÿ"ôUòþ8á:ÓEÃÙµ0½þk&eü‰÷ànã|£+Šd–—=¤rÚ—%hù’E€Ä Û5bÖ!ô÷’Aüq«+zzXlÄY‰üŽ e÷øGàÞK[c—E_ J‘Î5ªÊ…Þ#‡+)MDÔÒ šˆ{ 5é‰ì²lF–F÷öaˆLÒ¹S'‰Wß晦]–αVÖENÎ.Ø‹ ]ëdU½g9$yœôrËYV‚–^ÕQ$*¬Ã‘ s"ÛtÜâ[¯ÚLŠä|«MqÓQý0¿i2ñjo¼LNQEa&9Tåj†NÕ~e)´ÝØt4S+ÒM¯«ibM½˜ø‡$CgÌéÔ÷GåŒ~Òd?â´ßxþ˜V¾ŽŸÂL;ú|ጦ‚·Nân1x"ç5§²LJÉ*GN’*+–äYˆü4ÓMÕvk3–ŽçÑs°õ_R2£ %ž†ú‡¼ß ÍW=ÔÈÊÀX}Çç‡U¢LÄ^4kXm¶Ûÿ<J,Í ì%eÛÒPü0 ™•X©ìRŽà­ÄŒl¿×ÇQì”9wâ5ÉSh¾‚50$ ‘µ¹ôÅ2PA­Yð§iaºØ^÷·RFXìªë%‹FÎâým°>è^™MžI @ _Ç{`ŠF2i„e•¬§M¶·Žá[;M†k31]‡…˜œ %¹±’RÛÀU4Æx”ö²Ä¾¨äÒpt.Ǫäv„ù¼Ê­m‰ï~4Ëä”Eý¢ek‹¨Ó§Hèç5GÓHKUK1~’ÌÝ‚^HØXvc¶0 }]X\0>ÜFf,e:˜µ¬=XÚ‚”C!"¦z‹ô–pöõcià–B¡· bw~´ Læ]ÇœO·õ߃fóAGçPE0P,dPm·RyoŒù­Eˆ½’ ö@£­Ï]ü0’cSåÓk EL¬œÁ‰ocÈòåÏ PÑ#D¦†‘dV#hVÄt85§%‰êpÌe‘Xk¾¡nCl:BØWÒ-T5™MË´rˆÔ$ûp-p9 EE ¨óš %rŠYR5*Û€m¸¿\9 ãÕv&âÛ1µ;vW¹f¿¨a$†Û¦¦£’¢EjjŒØÃ¢5¹ÞûwãZDZH„ýˆ$[n{aØ#¥Ñâ§ÒÈýüÿ ˜«´ªÊ6Óùœ öUèxÊŽ­Ö#Y°7-†ÞÜûU—EujØKL{~8æ\7lÌ‘CÛPÒa½ö8—®€v’ÿÃ#ÿà1ÉYUOŠ)Ñw¤âܶ¥Y¢¯ŽË±Õ¿óÈSµ§Š2ÃZ­)’âãëjÛkâ2ÿ.®«†–:§ª‘Ïî’¯´-mþ\Y©<ô7ÌFV=6¸°'ÙkâÓ¾‰j»%LpŽn}øÔÐ=A¥‚² *AÞ%•KŽûŽ}G¿ÙŠç’!#Kk¢?Àâ^$ 1tA6ÚŽ í¿,]ÙFèìÌ€Ž`°¾š¢ž{iª Š!NIG¼à~!’*YEsÁ$ËOw@-q¨ ƒÈŸ¸†Ï¨bÎó´§Ì2§–••%®}ZÃÂö>' NºUöP²‡5ƒ0ígÉdìÈ6½í×ÃU™Ek¼…2gÞö³7é‹%$UÔÕµn3Ê”™Úë&°Õ±_DÚÃk ¬%¡«©1üìÕJE€ ;zôcñª£ir;²‡Ãù5}-βú‰Rº†8ÊBϦ`æÀ)#™ðçƒò7šnlë;\³.…XCz:ÜHoU‡<%ÍèoŠKe®³7ZÓ%eIu-zxun‡~gÓ:´ŠcE$FE i#ÒWÀ÷sþ ã¼ó9Îi)s ¶–ßOÍÆúù_«XcÌYÅœQfÐßUÆÉ]8ŽÓ¶ß:Àvå‰óª´W…Ý3ݪcU ¤Xt¾<ýÂ9>oM–ËCšp®{r}(é <ϬcÍòqw ø0&ûè«b>•ò)‘æ™ÿ“¼¯6–jj©'I ’UÍ;=Ѿ—Ûm‰“ò5¢¢¼iì7*Êó‡ãÌ‚høs6‚Ž’q®yéÊ„PŒ.IÇB/1§X>N†èä’ïô‡¨®+Ñð¶e&Ð>P¦× ²ÔíÓç1ŒÎŸ3ÈxrÆSKS-R3&sa¡¬.Ì{º`KÁ¼Ú,í6˜vÉéDŸj7øýL6Ù•c¨“äÙH¶”˜G?³Žx¹·8bµ¹€õvßÕŒ¦kÄMÿ[^=nà Ì? Ù!B`n/g{ÛáŒÈ4²º¬bÇ¡¹Ç¯Óçuþ²ÍlXü×fUN´õÕU¯c!Ñ#:XØãHó):¢%ÂÒ»:S´ñÈM'˜eԗ΋T²µ•pÖm<ôó2J¤oyB[ß¡Ì&e¼´ˆ¦ûé¨B1«fIhf›4ì¬Ô ΛOfõï|òÅ65)^!M¢ñCé™å…FªÈ®Eþ—L3-NDìÌõ‘]¹üéXX3bÁN/˨³ ËóxªdËà‘c†)‚Y¬¦¿Ðç׈\¿(†† æ…ž¦ŒÃç•"FN¯¥Ï>áÝ|,,g$›³TÚTY6i5µ/ 5eD“¢U!ë¹çêÀÇ“]p½/˜ÖROSA$uQͦ3!URÞ‘çõG†ý:ã…ñ?’®3¯Ïs ŠL½%Ž¢®ic+47t23¹åñÂÂÂÁUn쀗É')ÙB²·Öó¸Ï¿œòHÜ1äÛ-ʳ¦†’º%•^#*µrVäx˜XXpü»B—éS,OFŒ;J¨•¶°Pp'̨(¦‚R%Œþô²°ëëÂÂÅ7j‰J‘ÿ(GMÉOKiÍX? q´K˜ËèÉ= I¶‰5›tæ@ÂÂÄâU˜l ö¹Œ“ké ~ïLðåÜR¹„py»$’u ];áa`I]ƒm¢Í›f}JjŽhj\r›EˆñÀ”õ9rÆA†Œ 꼓ê¹õ€p°±£“»"½ÿÙÿáúhttp://ns.adobe.com/xap/1.0/ Picasa ÿâDICC_PROFILE4applmntrRGB XYZ ß acspAPPLöÖÓ-appldescPbdscm´cprtÐ#wtptôrXYZgXYZbXYZ0rTRCD aargP vcgtp0ndin >chadà,mmod (bTRCD gTRCD aabgP aaggP descDisplaymluc" hrHR¨koKR ¼nbNOÈidÚhuHUìcsCZdaDKukUA2arNitITbroROvesESvheILˆnlNLžfiFI´zhTW ÄviVNÐskSKÞzhCN ÄruRU$ôfrFRms.caES@thTH XesXLvdeDEdenUStptBR†plPLželGR"°svSEÒtrTRâjaJPöptPTLCD u bojiÎì·ì LCDFarge-LCDLCD WarnaSzínes LCDBarevný LCDLCD-farveskærm>;L>@>289 LCD LCD EDHF)LCD coloriLCD color LCD æÑâÕàÙKleuren-LCDVäri-LCD_i‚r LCDLCD MàuFarebné LCD&25B=>9 -48A?;59LCD couleurWarna LCDLCD en colorLCD *5Farb-LCDColor LCDLCD ColoridoKolor LCDˆ³ÇÁɼ· ¿¸Ì½· LCDFärg-LCDRenkli LCD0«0é0ü LCDLCD a CorestextCopyright Apple Inc., 2015XYZ óÊXYZ qÀ9ŠgXYZ a#¹æöXYZ #ò ½Ðcurv #(-26;@EJOTY^chmrw|†‹•šŸ£¨­²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿparaffò§ YÐ vcgtndin6§@U€LÀžÀ%€ ÀPT@333333sf32 røÿÿóºýrÿÿûÿÿý¤ÙÀqmmod Ì×ÿívPhotoshop 3.08BIM>Z%G720150426< 143345+0000PPicasa8BIM%lK1õûJ‚ÌÖ::ŠÄi¬ÿÛC     ÿÛC  ÿÀÒ`ÿÄ ÿÄv !"1AQ 2a‘’Ñ#BRSTq“±Ò$345brs”•¡UVW‚–²ÁÓá%6CDXcdt¢³Ô &'7Eeuƒ£´âð(FG„…ÂÃ8f†ñHYv¤ÄäÿÄÿÄB!1AQa‘¡"2RqÑð±Áá#3B4¢ñCSÒ$br’²%‚cÂâÿÚ ?ûyKYHqû*/ʯӮi ¦ y]&?uÄ?ö«ôé! ­É[FK‹ò«ôé! ¥ôê?¾âüªý:HH)=:‡ÏÓ"üªý:™ ¥ôú/¿!üªý:‰ `£ÓhÎO¥ÅÐuúêôþ½L…QéÔyÇ¥ÅùUútP+¨ÈÈ«‹ò«ôê$)‚“Ó¨Oûò/ʯӤ„‚—Óè¾ü‡ò«ôé! £Óè¾ü‡ò«ôé! £Ó¨þû‹ò«ôé! £Óè¾ü‡ò«ôé! £Óè¾ü‡ò«ôêpQŠ=>‹ïÈ*¿N¢B˜(ôú/¿!üªý:HH)=>‹ïÈ¿*¿N¦Bˆ+q “¢&Þû[¿¶ÿÎôµ6¢O|íßSþYKIQùÛ¾þ§ü²þ–’6¢=ó·}ýOùeý-$mD{çnûúŸòËúZHÚˆ÷ÎÝ÷õ?å—ô´‘µûëo&¾˯Ӥ©ŠrÊ© ùt'S$$Ãý«|Óôi$%Ãý«|ä“ö­óOѤ—ö­óRB0ÿjß0é$$Ãý«|Óôi$#ö­óOѤŒ?Ú·Í?FRB0ÿjß4ýAIÃý«|Óôi$ sçà7Í?FRB0ÿjß4ýAIÏ\F<ò4Dº"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4Ds’}€hˆÃý«|Óôi$#ö­óOѤŒ?Ú·Í?FRB0ÿjß4ýAI pÿjß0é$$Ãý«|Óôi$#ö­óOѤŒ?Ú·Í?FRB0ÿjß4ýAIÃý«|Óôi$#ö­óOѤŒ?Ú·Í?FRB0ÿjß4ýAIÃý«|Óôi$%Ãý«|äsý£|Óôi$#ö­óOѤŒ?Ú·Í?FRB0ÿjß4ýAI @8Ï+~0t‚’¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"󽯂û®¹n MĨ™­PÉ%Z}OÌ Xa|^2yrç ŒkÍw™‡e¹z»usÞ±¹ðÃpYçhêx†Ä-*Î {rf,UÂ…æÏ6tö«1¨u4âîJ[U®7šZŽnKü6 ž L’ML“$íµê!Y fæÂ60Øñ¾dhh¸>íîE@ªÒÛ×y„Ò›jÕV°†—‰ 7"´ôÇhÕ$´êØÇx¬A_3ÔdeHΪNNäU‹Àþ<ÂØvM\Wƒi¬â‰…¥,ÓmŠ€T\1,ĶI!±œjt}h.äRø»!¼Â+6U}-º{¥/欕ÅD4»F°È¯’9yœà`uÉÝ 2‡O‘@ðL]æû6ïm±Sî:½åS4UrÒ®Øä ÀåUò›ÉJ6~ ÐÓpmâykv9„Çwö{ÞwºÊkÈí y´Ë$h¢‚ɶfTV‹0ê¬Ø'—>\¸Á ꯲Ôq!€Ve¥hÁñ)ÅŸƒ·¬÷ uW««#£™ª«ìuà¾w,J’9”ROC©m2A"¡ÕÚø79„õ¸u{ô¸§j o,jöR1VïHb  dõ jÚ'DÞäUt˜»Ì"} 2¿)H‚GIä]«ZcŒ£r±.. g8릌çÈ ©?ØO.\$¼Ú¡ô‰x»M8 ã–“oTJÄ)º‚Hå>Mœ‚@$XÐ vùQY§øs  .ÒVÅEiÚI]S›ên¨F¤Œå¤'”(õœúÇ·M‰‹üŠi›s˜Qòl[Â%sÇ¿ªd42B’,{R ´œäc^lÈ+ÌW g¦puM±ëe¸«ßn\÷„´ÛïXó@»þ®9a¤Ôìú¸ŒÄ.yP³a™¼€ÏSÓAIÆEîEA¨Ñüy„î»…×[}dT3ñ]L’U¥;6­dŠŽÞÖ\‚£8f”uÉèqcDƒù«H›œÂl›ë=-u]**†÷0lúÆ ÌWš3äØ瓌ã:®ˆHv[Š#dÜ÷„úÍÃúëÝ¢./Ó­]LÑ,0K·*•YÊ÷†"çÂ*œŒôõêí¢K€¿UuPMÎawš¿Äúâòuè—ÍyC §Íñ±%'uÞéóѤ¨GuÞéóѤ¢;¨>÷O˜>%ÝA÷º|Áôi(Žê½Óæ£IDaÁúÂuj4S%{kkÿµÊùœ^¿à};xí•#«*£1¢#DFˆ"4DhˆÑŒhˆÑ¢*íÇ÷|ßÊ`îÒݽ•²-lð-Dnœ¬2':ÂD¨/ÂÍl¬ bòê 9üÚ›…EðxkKò‰bùÇèÒáKá)ÛÕ£«K¼±ú4¸Rø@Ûõ¤%‹ã?F— _ >§®?t‹å:\)|%úž¯û¤_)ú4¸RøHöÔ^fš =¹?F— _;zà=ì_)ÒáKáoWq$_)ú4¸RøKõ=_÷H¾Sôip¥ð©êÿºEòŸ£K…/„}OWýÒ/”ý\)|#êz¿î‘|§èÒáKáSÕÿt‹å?F— _úž¯û¤_)ú4¸RøGÔõÝ"ùOѥ—Â>§«þéÊ~.¾õ=_÷H¾Sôip¥ð©êÿºEòŸ£K…/„}OWýÒ/”ý\)|#êz¿î‘|§èÒáKáSÕÿt‹å?F— _úž¯û¤_)ú4¸Rø\´ÇnÞ öRßpó‰víÁ=uE­kãk5«Ò#e› ©ÊŸ1-pZmÔl•.>g5ßf±VµS¾ÈŒ—Váþé·q‡–Ž&XRhí÷›|5”©R¡eXåPÉÌ dd몛…ZB Èâ¹j4ÒªiœÆ ÝÇxm}‹Lwò¿ÒZè"!$¬®¨XãFbT³t±{N¬j2—Yæ­ÇÔê´IM?]gQÿá·l~;Ô_N£¦Ù;㊞‡jînÔ]WãfؽEúZtË'|qQÑ-]ÃÁ®³ž?òß¶?¦¢úté–Nøâ§¡Ú»‡‚?]g/ïá¶?¦búu6ÉßS¡Ú»‡‚?]g?ïå¶?¦aúu=2ÉßS¡Ú»‡‚?]g?ïå¶?¦aúté–NøâÕÜ<úèû9 ±ý3Ó¨é¶NøâÕÜ<Ô}œü‡6Á?úæ/§SÓlñÅ:«¸x#õÑvtÛgâÿf#úu6ÉßS¡Ú»‡‚_×GÙËûøm阾:m“¾8§Cµw‡µgEþ­ûgúf/§N›dïŽ)Ðí]ÃÁ/ë¢ìçýü¶ÇôÌ?N§¦Y;ãŠt;WpðIúèû9ÿ ±ý5Ó¨é¶NøâÕÜ<_®³Ÿ÷ðÚÿÓ0ý:ž™dïŽ)Ðí]ÃÁ'ë¤ìåýü6ÇôÌ_N£¦Ù;ãŠt;Wpð@íEÙÈùqÃlÿLÅôêzm“¾8§Cµw‡µ'g Hý\6ÏA“þËÅÐ|ºŽ›dïŽ)Ðí]ÃÁ/ë ììNG¶ÏôÌ_N§¦Y;ãŠt;WpðCv£ìê<øÝ¶?¦búté–NøâÕÜ<AÚK€·™’ÑjãÜ©ªªq5<7xÚIdnŠª ä’z<ôévg`1Þ£¢Ú[‰aà¤åCHGÀBO_`Î¥„®y¡á£•娈i¦ÙºÛ¤žï%êÔàڥÞõÒ`w$Ñ:õLg!r¹åñ¨c„œF]ãôRð`H9ì OvS¦á«§‚ïkïÕYa[†ùª×–0Ü¢—–5UÁ ÕÂà·ˆ]â\qn?EV­Èù4)=«¼­Ç{Ùw ^êH)k¼SVo–HÂw_¸ÙU sòªã IR|úÝ•‘®œÿîû*=‡FZ_öý×udB§™AÇ^£Èã^’ó•R³÷4ŸÉ¿æ:æ9.‘šò.¼Eë§6K-Ïr]éìvj'¨ª©~XaC‚Ç=}@¤êÍi{€ ®pkd®‡dÞ+K;ÏkŠŽdLp~nºú c±seµd;$qS×Ykþrߣ§A­¹:m-éZO¾ýµ9oÑÓ ÖÜ6–ô¿­Š?~Úÿ.ߣ§A­¹:m-é$ì‘ÄþB}¨dy‰Øãþ޶äé´·¯FX¨å µÓÑJÝb§Dè:d(^³D4å¸Ë‰Ou*¢#DFˆ"4DhˆÑ¢#DFˆ«·Ýó(uƒ»KvöTͯ­².¿î~cZ·²²wiW*cßöv¨šÔíZ­#rÅVኯxøeÆ<——Â|ý£Y+rÅh4NÏ·9x‡KYéñJ2Â;¾@ª¬‹¶ æå,Trç שÔ8ÕBHŒVIWÄ:ÁUMYo†´ÿ±ªa8.ù¢I^„œ‘ÓzƦj™”ŠB1Z.~"Xi'cKZÀ IG,¸û#Ì<‰q×Ëêê¬ZÚN+*KÇjà†D¢¤+"±3@À) _=Fzh:V!Am ·z_"”»RÒ:#þÔ±€Ò¯ŸF/…>®¹ÔÍiQ’[î[ùª#{µB)$ÝÕ>Z5ÀéËÏ–É'ì}„hVqRE8ÁeQsßhhè-@øŸ¿žxÁæ<¥pÃ8\Vsއ:UÈ §™)²Ü¸“X”Ûa+Ê©,qÅ•L<ÊyúôÆGN¾VuZrS¡ƒ‰MQ,–rh;؈ ¾G™ƒ`&|,òôÁ:VœÒÖUžÛ%\”‘šäRƒœª øê?òÖÂc‰‰Á9Ô¨Fˆ"4DhˆÑ¢#DFˆ"ùíî™íK¥Ç´Ç¿#ƒU»–›êiªmÕÖF%Iª‹B¯RæçBèpHTÇ–¾oâ¬{­r"£ž+è¾ö6ÉщÖ7/Yöd´Ü¬•ö–ñK==].Ò·CSL%%I H[9È#¡Î½‹(-±0¨/&ÒC­ ë+û¢8–ïùÎÝŽŸò¤×Äÿ£>#꺾ý`ð?EóåB·½ã º¢¢¬E¥æîé&h¼}ò¨bSc‘×_*!}4ˆµ_w-=Úª‚ŠªžáOAjGY]QȲGÀÀ³$d3!y"/Ð_Nq0MϺk“oG~£¶S·¤ÏN”É> Iž5 ä&U‡1< àuë DÇêçqµÁ쩵é U(ªôןZä’ž ±e”aHð° ôë©!F´Toû•=MÆËEܨҦ†Hëƒ$q@LÇ“Á…‘2ó äz"!L‚Š õ¸k 5V u,PR­ETõŒˆ#g•LÅœb0à°5Õ¯õLi¶Õ)’•+%¨YexÁX9Z>p\8À`9Hëu8"ÛöÜuUp[cÛ´ SZñ51zÃݤRA$ª]„y. |¥@ÇPAóŒ%„âlÔÕ—-¿8¨‚šsOY–!¦²ÉàÀ |9dA…!mN"]iiâ{½–Šž–’¦&Z¢ÑF“9B%~O SŒê1ëÕˆÆj”â§pÝêv¶ýYM Õtíü¥ÝÛ~Xý18³f4þ”ýòPóGÞ²s qÕ>À<È8Ô_iþcßš\tûòXRoíŸ^œÐq¯nŽª|pªœ2ó(ñJq×AR™þcßš“N þß’¶Û.ša]hßvê˜LŒ‚jzuæSÊÃ"\dA¢5£Z\$8{óY¹Á¦ JcQ_%®e†ñ¼hi‹ÆÒ³IknH£V*›¼å@Xt,zœåª“tây+9iºî­¬È\ñ¿m½XòG…ëË×ëÝ:ôü:‹ìï~jn¿¸}ù)+E4û‚œVXx…k­ˆ€D´´!×˪Êuf‹âZà}øª9×L9°³¹ÿz©ÿ’ÏúM[Fî÷/Ê#vsP›¾ûO°­Ò^·†û£¡¤Še‰§{;0,W› W$aA?‹Y=—:‚Ñ5 5²|QéÛ52*EÆmºYÊr'*säëÝrHÚt¾ÃüÇ¿4ºñü¿%´ýòH·SNÕåEº«¸ç–•a߬l£#ì¤è§§P5VL>vžø«>%¾[}ðP›©«ÒºP^±1i„žZºq¬ÀrzduëÌ:åѵ“æ|·nZ2#Ï~õ•óßY¸I¨®ä÷¦*Ãq¤xsÜ1ËS²‰¨*@Æê]{J<6›±£>;þªÚ›‰šú‹ôm-å­¬¶(•r¿¢û-|¾ :ðµ½™ž_QšÐÝÕþ‡$õ’ïS»•!k´Ž,\Ñ*5S#)”¬l‰º’¬ÙEÏ3uq«u‹õ帨êÜÕžðÉõ[K¶®“× Ák2=]e¢Œ·B|Æàg™±€9±•Ñ÷îœÿíË…Â#ûŠg¹¤®6·==ÂáÌÍ´°ß(ÔŸÚÉg^VêNcQ×,TøÆªùÑ øª–F”áÈ«U¿¦‚šz:‹¿£—hkíë0.2^Eçvè0Ë…\*‘ámloFÄ,…Ù3ÓJ„½µêëïd7s0·Ò°Z@Ób2Ê•[N §¤£!@$j ëÆ'VÏ¿×Z‘vè˜×·íôÔ›‹ómˆc«®¼w¾NŽjo6î~cבÌjS˜ýÁ) @Uë\Æx~Jz·õp>üÖwJMÞ&¸Á »s÷M](Xã²ÙVRàþÔǼe>x'™‡SŒcRàù9ðjÈqrœÝ·ˆéJÃÕ i¨(©‡L—8-ʸæUææËÖ|‚Í¥»¹¥Z{÷¿´ž“Oyôv¬ˆ'}MnXr6‰|Ãøäùú´‡^<¿ÊÛ¦#ŸøUF–ó ÷×Y®˜V¡X{Û¸V`3úÆzþÙÖLtƱ—u³Õ¬{y­º½\µê>Ï–Ke¢£p3Ü¥¨­½ºEl‘–Io–ÉÑ!<Üè¡  à÷Bôn¸#RÒã9å´{ „F{²¦jè·¯rCx‚ ÄñÕÌ´²-,¶ØbJ¿¶/8ï”’sÑå9È «ö¾qÇÃüúªÒÈß¿EÕ†Šº–Â’Üi`£‡žã=ªIæoHCÍ4eZG~PJ¨åÆFG0§Xßøíâ¯Õ »×bë»Oˆ7MÍzšÓY±n6ø’)^*Ê™ (ü²r*ŽÌŒÃÆy|ðzk¹•KݱÁp¾cfôñZë?s>~æÿäPä´¯"ëÄ^ºèý•!Ixª’²‚ÑÛj;±_ƒ]–/ß\¶Ãú+Ñ–Ý×b½O5%šñIU-;òTÇMR’[$a‚’Tä×uꇵÆ^Ycš1 *Íh¢¬ŽÝ]u¥‚yFcŠz…VQÊ ¼Dž³= Ú Ž"@[j.´Ô’Ç\ÑFdb#JÈB–!sðˆ“ìŸV¬\Å@…5ÆŽ±¤Ž’ª9 MË(Š@Ü€y[¡ÁÔG´h9!fœ‡<¹=Høµ*Z"4DhˆÑ×Ù¢#DFˆ"4DhˆÑ¢*íÃ>Ÿ6~èuƒ»KvöTÕ«÷ºâkVöVNí'²ª¼îKe„+W÷þ,`CNÒøB‚uW=­ÍY¬.É=†hçd‹%YA‚:ëf«’ÏDZª« ¢…ª*$åDRÌqäž ©J¤Ò¼3¥*ï!Ï*ó(3ž¼Ü¥N£æ¾`u×?K³íú­ú-xÉ<vá`’;§¥AQNæŽnY 7(Áåûnž¡«tšUz=mŠàzuÖë ÛæÃCSºÖ‡W`ÃÞÙPqæ€úƳÒ4…¦Çü¬eâÚ€òÍ%\g›”¶Íâ?‡®šV{4OOlû†Û}iõ  ÷Ô¯žqŽeòõjÍxvJ®iniÍmm=¾–JʧåŽ-#cÈ’~MI *$ÀTH»OðN¢•ê©wŸ|°²¬É ¾¡Þ6lr†P™Rr<ü²3ç®~™g"Aú®Ž‰hú+.Ðâ.Ïß‚fÚWKÌØò')>_ W#ãÖ´êÓ«Ù+'Ò}>ÐSU0ÑÀÕ3¶Xû5r@¨&M.ú±VÔGM¥‡•ù=ª3œu%pzgTZL}•Í75­hë¢&W«å†™j®-/#?(1BÎsŒù('Õª¹Á¢J³Z\`(ÿÕ oãªW†îùù ¶`y|óŽ_õêºVû Ú'{)Ý£t[/5-IFµ!ÕK7}Jè0<Ø¥¯kŒW0´b¤µuThˆÑ+ÿïyþ:þ}Qý•vv—š}ÒI·%?dËÌ›K‡÷íÑ\nöµŽÏ¶è M\Škc êƒTR]ÏØª±õkÍøƒRÊZÜð^…í§ivõó2åµøËzxæ»vâÕKF¬‘¼Û(’ªÄ¿È ¾w¡WÙÈú/¡ét6Ž#Õj¬ÙœY¯‚ Z¾ÀÜT’*hûºh›bø#RA*Ÿ$G‘ iÐí9E*„f8U•Ûjq¶ïoj »ñmbš¶*š”]ûs£«x¼~¾@= cÙ§C´ \¢tºyU²ƒnñ¦Õ1[{ ñnå]b1l²9C[ìýd ûq§C¯³‘ôSÒèíæ=S¯øÁWC%'a®-Ѥ³$• Œ~¼ªåû·Ä€òsl:€}¹t;F¡Èú(ét6ó«}›iqÊÛl–Û?bž1U¬Á’FŸe·Ž2ÌÂ3™ (¼Ä($à:£g#è§¥Ð:ùUÐâå±d[w`Î+@&Vw{æN`¹?‹ IóÀÓ¡×:¹E.†ÞcÕ8÷‹âd¨^Ü]YbåîÝvQÊò©UÁçõGà:Ž…_g#è§¥ÑÛÌz­Sœh(‘~±^-rFc_¨“„¹°<}‰Òèmæ=VÛfÙãÍž+E_c1×$RSW²Øàó–!ð®p “Ð “¡±WÙÈú'K£·˜õYÑm.0ZæÞÁüW§pÁƒE±È<ÁyAÏ?˜R@ö:£g#è.†ÞcÕ0nqͯ+u±¿bQ,dCÈe4w=$å1±!”ü#×Ë…_g#è.ŽÞcÕ9‡añJž›Ðâì ÅD„°=ÐØ˜¨?Ô¤êãÓ¡Ú6r>‰ÒèmGªeKÃ.6Q]Z¶›±—‘¹éd°WˆÇ݈w¼¦%KËêziÐí9Dét6óª^Ù·8×d€ÒÚ; ñnš>`ÅbÙl2GAö~ΟƒN‡_g#è.ŽÞcÕh·ìÞ-Úeií‚ø­O#8fx¶9^ ±\aú`³c\ÇÛ§C´\¢tº;yTA²¸µLˆ”ý‚¸¬‚¥¨ˆ q€~¹Ó¡#ÙV¾ÎGÑ:]¼Çª4ý ‰Ïë+ãÿ÷4þž¾ÎGÑ:U ¼Çª·ö{‡Ž0ñçd¯d+Û©[x[}&ápÚ†:zXûôæ–Gç<¨£«7¨uÖ´,•›]¤cQÛ౯i¢ê.ê:ǪúÙtÁ·Tõÿp“ü“¯ªvµó#R׷묥’+›E5=²–iѱ^WB†' Õ#ÕíцpA#ÖTäâ%ïW½ŸEt[¥ÖÁ@Ïvµ-#Xæ§i£òpê…F2>ZÍõ[yÍHÌx‰Z2“®µÄ@95^]ÃÃj­çCcŸk,;‚jø˜smyÑc™ð…ûâB°Pœ¼ÃÔ£ÊõPëx}Ö—jŠdÎ*äx´%­’å&ÕÛæY¹„¬Ö¢KøYñuæõûu¿E§3‚äԈ“ÅMÙ65vÚµÅcÛòÛ¨é)Ôˆ)©èŠ$`’N6<δm"Á €P8ÉÍg_hÜñ-MMæ#•O*S0û >ÛãÔ–¸bJ€æ“¹ ~éàÜu3^nÛw¸ÑÔIdÛòNWffRTøX O˜#\%öy’Ü|her ;yÚü9Ø›ò†—ˆQmJ(ê*ÔÌ }Ÿ’tà78-ž`Wöއ] £N¨ŽKõjS%“–õaÛÜ;¡ÚV¿yö´T6êeve§¢ Ƥœœ(8>zÕ´ƒ7›ª—™v)åF᧐ F÷¥(ÈÁ—ч^‡øZ±aŒÕCÄ书ó¾pž’érmÃd–²®žNâàßS3Î9„àóA^R«Ì õó×GQ21ð]LmbkœçW¿d"cûJ­ÛP1?Ü›…\NáæeÚ›j‹Ps<ñÓË·f‚6UpNfð«1`B’âèuµ Ô]ÕfKÔª·¬ì|Öî!ݶ’óKaÞÖ÷ªï©XGQ¢Y£W2±³)å°Ì œŽSާJ®¤×ñ>ILTse¿UNº\{?VÑ×Ý)xpkjmô´b¢Š«jÍJ;™%åLwž ÈÄ…É pp:k)ݘP¶ÒÑ3®U›†œHáÝÎü›g`¥| w¨žC3m©éáicX|%Àò:g:ÚZE×Y¯rÊ­*¡·Ÿ«zékb»º†÷õ:/FN».»jä¼ÝŠ›Åk­6Ë †¦ïeU¨¬ehÒœb,ÂFH$ù®WâõöóW"˜ÄOø]A¨p0¨2î^SZé·pŽ”4µòHª-0I]˜¯V!ݼ>\̉¹O1}½s’è»ZnÞæ¬›>ßÈw‡uoTiè*¿k°yX³ f+QŸP`7\ëZc·†Ý^ådóØò×î>í¶K5s¤VÇæh1dRCw0€æðs€z•>CY¼rÕ³pWaÃ={V7ûdÉÄŠ9dµHaKL f}¶¬€ú9ÿ|#óÆÞC>a|™ŽŽª0Õ³vÕ-#Dq×·~ÅZ°X:¶Xl Æ™MR¯£Ë 2»÷l‡C×ÕˬšÜrþØã«‚ÕÎÃ?îŸ~ií}&ÝH•–h =‹–1S´]Оdð†—-Íõ¦ð¹É'•WV-—â5l÷ÁT;©ž½¾ø¬+¬=Ý‚îÔ;n3#Ý¡á³ÂîÙ? '“–CœxW8=W›BÞ©¯»êÝa'W{Ñeº- xwn¡ŽÇW,ñ\Â6„SÍf,7,k•aÍžeÃcà.iÑ‘ŽRgš²Þ-*Ñ÷¶vïÂ(}›ÞÍç'C!p¨pG„¬§¯W$jæœ0þÕ“NxóL®ÖƒT×ye´SKHô4Â>Ï’º qÎ(Ø3°Ç‰IåLs)<¸ÔÉ8a†©VˆÇn¸Mé¬õM·h)b±0u–œÇl4„ˆBã"ùŠ 2Ox …É$ê·MцÏãïjIŽ?ÝïÑ3ºØ­rTÝj$Û–~ëÓæJ8g]"‘Þ/35I1댲<è¡Ílœ}ÓõVkœÄÿì>ŠÉ»(h&¥!)-ìJT3Û“TRë–úãÊHo9H ØåÁÕàGDûû¬˜H:øûü$¥µÑɹ᫆Û@PUÆæxvœÑ‚¼­–5%‰*NüUXãw=GùG¿Kb–KeÙ­{=Hhšj¨8s—fføqK3åŽTžVñ3c…`5PÒAý¾ªÅÀ'û”îÂ¥–Á¿ísÚm´4F¨ŠZÉ"ÙUÉ2ȆiQª‹ò‰ZUçneåRæ$^»T@ÿSãžÙYÔ7©™<džK¡Ö~ã“ù'ÿ$ë¤ä°¯"óÓã׈½uÒ»'àñTõò¶J|þ5×e‡÷ü—-³ö|Ôƒ²Oh}¿A].ʶmÝ«y£;é¯Ö˦j/^øÝZª8æä…;µX‰ñ1fIrf¯Bµ ,€Eìg&cÈ{ Ý2Ì`:H1„` G2¤è{%ñº{äþï[…-VšE¬¸_f‚/UKÊ%iÞ4c™Ù39µn…i$8œp×ÿtžJ:eœÐ0ÇWý°9¤Ü=•{Iî=”ÛJéĪÅm€¥ÂZýÉ,²%|–šÊiÚ)9Ʀi)Èä*V`£¨h6;c™tºpÖg ó„m®È×Þ Œu Rå+:žÏÝ«¨hZ-£¸’Ü'©-û¥âj)½‚ª¦‘b&­"x*ú8u$ù-´©<°œ1ˆ8 ´ØÉë òÞLn™®“Âñ·jñ>}ͽw­Eu®²žè*ée»¼Ñ‰à¯Bb‰‡,Ai¹Ôò‘‚Bžlt(ÚX¹î‘޽ør\µêÙßFë5nÇšë¢A‚N3ì×râJ$Aö_×¢ ºtñÿ^ˆŽñ3žoVˆŽð|_;DJY>ß×íÑ3ð´Ds ç›D@’?>m➀ùüz"¹Ûðe¢#DUÛîù¿”:ÁÝ¥»{*jÓûßòcZ·²²wi8'®5eUå®Þ>èE_bÍëh±Û¸/Y»ê/;n¶â‘ÑÝâ¦1­,‹Ì§½À9¹ÇLzƼÛm¸Ù*;ÿz6;µ0™ˆÝù Ð|,Þƒˆ¼:°ïÃ@)õf¦¯4½ç?uÞÆ¯ËÍœŒúññë¶M-&¿hqV§¢ªæl0¬ZÕf©¼xÞ©ÃŽîmþöÏL[Mw£ {³/t…ùCýŽqŒú³ai©¢ çì¶³³KY¬Úayß±ïæíO|¿í:¿ªk±Ûh«;ú}äÓ¼‚¥æSSòî°d0a‚H:òì5úap2#~ß%éÛht@ÓÛ<׫èèÅ=Ë'Ï^;~*M«Cw\g¾6/]ß ˦½ªrÝ+×0w­%É×°¼…¸ zôEÏ»Pq/õàðâ’ÛÚ¬íû õ¾Šµ~Žeä\ò 0y õ6)Á×=ª¦Šƒ±off’»[µyïÜñãÔ½ª¯Ûš¾¾Ùº6ómyíò%^íZµŸ¼Ž$ƒ˜xA!‹¸é¯7áµúSÜqçì6/Kâ4z+03:£îW°CEÑŒƒ#ã×´¼dÒþÜÖ‰ñœ÷}>Qª¿²¬ÞÒ{ÐfoëÕ•VZ"4DŒªÄõš"@ª<‰óûm't 1 `š"Ë8#?ŸDK¢#DL¯ÿ½çøëùõGöUÙÚQö?ß$ëö'ójŒí+¿²§q­–(ÇÿYÑþ³¢#"0>?—DIËŸ<üº"9Ÿ·DKŒhˆÇLh‰9GÇòè‰qÿÖtDhˆÀøþ]ÑË¢#1¢$#Õ×åÑà|.ˆµVØrôÿso_Ũ9)ª¥Ç>öÔcïwÿ$ëœäVë—q/‹2l %§µm_I©¨£·ÒÚ¤“¾„TTHU¤$«" tÉ®ZÕôBÙ ª•)Äí•OMÓÇzÊÉkìsíÁ5%¾øZô©Ä?Àí÷Áy¯ž§ˆÙݩB·?r!÷ž®Í-Jò/sRTg¡Øù«k7ÄùoÜ®É=ÛÓ[©²Ž#Úªb’ÛÞ{ÇL Ÿš¶9JšVÀYîÈ+žâÁað˜jwJ2Èmج/hŽyîÚ«Öl5Å46fŽ(#ÇÖåP°œ/E§•CQ“Œr1eÀÇšë&Ý;8“ËRÑ׆8ð]jF®k]ëyÚ¢× ]¶ÂW÷겓)˜ƒ›”ó/<ƒœà*üÕ‰h~¬¶ª/kÏ`+l“X*¶­ýmšH£ª~b7 ι#A.CS(òð’Ã<¾½OT±Ùq'ü(ë·>•®Sb4Û&u{KH*´·UÌÍŽå@æŒÔzGE'œôÓ«ÔËŸ/Êž´¿>^ø+ mk—pËQMµ¥A2æåZí“ “â”r© õQÀåp\ãL õsYcw_ je°¥ªÃCYQe¸îÒŽ¦étQ3xR‚!‚3Ÿ že=~5™»u ÇôZ ÒãõS+ïd–¾FšÛ}»N­#\+`<¡€TiÔe9Q|kö^GZ`rËiúªctgžï§°î Ûl×8£–åmvÈsW;·T **òV9¼K€O\êÏ"öc‰Uh1— ›îC}å~Ä´ŒæÑ2JÍ[<®C:­‘ÈAéàN¯Ðê¯#¼7ûõRÙ¸ßʽ±‚+í€Y`˜J£ë5JIaѤ3ŸQð©é嬩Ýs Z—®œùþíCg¸µ¾ß(° ‚*ꛂªÄ¢-<¹òH*­—o6è¬àÓ [~š¾ª ¸IÇ^Ï®µ…-æÍkë¥Îén§ŠÛ554³M¹nTXJyûÉš*pœ½Ò«yd¡n^º5°IF²2ݳꤵÆ@î=û~‹Ñ”UVÒ%e,¡â•CÆêr®¬2|DëÕ!yd`­¥A9Ç_n¥Bªž¯^ˆªU½)d韭¿ù'\ú—FµòçÝíIÆ.ËûÉyá&ͦ¨÷ΪHë¯w ©¦¶ª'2+¢2ø¤9™•G.2Iøqî1 ‚Jò®Ê÷k»npîôwplXª;¶…š§fJêÇL ¥ëÐzõjUjÒu柧¢­JTê6ë‡×Õ[ÿï‰}Ðþcÿ†3‡aOÿm×GN´ûE‡B³ûŸTß{¡ãÿ¾¼2ÿ§ÿ·iÓ­>ãÑOB³ûŸT‡þè—Ý ?ýñáøƒ?ý·Ni÷‰Ð¬þçÕ÷ľèo÷iÃ/ñ ûn:Óî=¡YýϪ_ûâŸt3û®á—ø…?ý»Ni÷Š:ŸÜú ÿÝû¡Þ­åÃñûn:Óî=ô+?¹õGýñ/ºýÚðËüAŸþݧN´ûDèVsêûât7û²áøƒ?ý·Ni÷‰Ð¬þçÕþèŸÝVœ2ÿ¦ÿ¶éÓ­>ãÑ:ŸÜú£þø§Ý þë¸eþ!OÿnÓ§Z}Ç¢Ž…g÷>¨ÿ¾)÷C?ºîˆSÿÛ´éÖŸqè Ïî}Rß{¡ŸÝ ÿÄ)ÿíÚtëO¸ôN…gÙõõGýñ?ºýØðÏüA›þݧN´ûDèV}Ÿ_T£þèŸÝ _…»øeþ!OÿnÓ§Z}Ç¢t+?¹õ]{°_»oÛ‡´GlžpGˆ·Í‰S·÷^ä44µlù©§îÅ%TÀ¤U š> èO–´£l®ú¡§vÍ lÞ©ZÉE”‰öì'nåö:/ƒæ?½•ã¬ôDhŠ»qýß7ò‡X;´·oeMZ³ï|?ÄÕ½•“»IƬª¸j® ö|â Γrñ»…NüÔv©©"®Ü–¨ê 54®¦Hƒ?ÁIS˜y£>C\V¦R$æ»,Ϫ %a·øÿÃí³a¥Ûûc}mŠK}º• ¦¤¥©„GO(U@ª ³Y¶ÕM k„£¬Õ^â\Ó%t£º.·Û]TÕ2 –DäHe ?c]TÞç´®W±­pL¸÷t³Ùø-¹ï»†ÃÒßI·ªf­µÔcªc,Ñ0=9X ƒÐê-.klîs„€ lÀ›C@0g5ò¯e{ ünáÍγpð£fpãh½Ò(–xl»s³EËß+J©ÎØ$/RHUÎ5òlø¥JN:6àÕ;á´ê´iO‰VOì´vÚþì¶¿ø¡ÿýÓçvÍÊŸ&±ï]ÏÜù÷D8çÇn;¯xÁ¦áÒ×UWo¸Zíæédƒº,Œœî\IЂ •õç§£ð߉V´×¸õçüGáÔlÔo±uËenÌtg—¶ÎÏÛ^Õ ñîQn/{KU­oU5æ~R<±ƒ‹]†!Rðn3<çëŠâªšwKµGÛ躀â6êU(“@>Ô4¯áü:èÓ=s蘯Ö:öºZ©î/)š Ä®–›Í•ƒ…×Bçý­/;Gnölß;ƒ~ìšMÉf¢ÛuS]6ýÂ$’ ”*™jyÁVGø, ‚r5©â:&ÚÌÂúíh1+å¦À÷A8ùªÛGö6·¾r,•´»s`¢™2;¬¤ä ʆqìÎ5ò”þ%Z‘:0ì ê*|:Aú„Ÿ­3{«¿á‰¥{P)ny6A Ê dÊ:~mkó‹o°²ùMˆêúú®ÓاÝãß7•Û…üMŽÕ]Pö*Šû]]ºÚiˆxJsDê¬å”‡\2ø³ž‡¦ºì_´ZXý‹–ÙðÛ=ìÚ»ÿë”ã@¦Z™8{H§è§˜uiüºV|ºu×K´DÝúú.‹B{_OUs´qgrÝmÑ\iåîÒU «SDcqÓ®U”7Ÿ‘ d`롵Þá+QcL+NÔÜ÷KÅUÖ:³ÅT‘¸T2¹~ gñëjos„•‹ØÖœÍÿß3H®ª(_$¼“'0U'Ë?‡Z:ô`¨Û³Š†¡—qÖ"Ýôå³–Hèc ~Íþ½f ε¡ ’×Qï³$&ŸtÑE‘…A«¤^n^S‚œ­‚ÜØóéŒúô"®ÕÓØ¬T†F¤ŒÍŽ~QÍÊzgñkQ’Ìæ·jT#DL¯ÿ½çøëùõGöUÙÚQö?ß$þ+~mQ¥wöTïàÖËhˆÑ¢#DI̹##§žˆŽaåËíÑèˆÑ¢ ùyè‰9—8æ.ˆ—DFˆ"4Dh‹]oî9’oͨ9)ªÈf×PÞïþI×9È­×í+M¸mW£~®¸A%e¢()V¡›ºt Ìü­á\äêNq¯>Ö×0œ°]öR×5ÀgŠkYÁˆõ¶Au£Ù[’ZiªZ®’{uX Èýã2ò²–VcŸHcU4Q²U…qMÐHóLö·fëÎÒŠª g ·kúd ²TW¤¬0pà;•æ, –`Iò9Ô2Èæ 8«>Ôב. ³EÒš­«i8e¼ÕÌë6}öA €w˜äÌy>Nq§Dp2x¨é@ˆ.j¾Ì7¡jxxC»û–^W¥kÁîŽUÂ÷ܸ%‹Œ9ó몛£°xþU…¬wÇÂm»8=Ç{ˆè¸CwcU(EîžÌjBÒra䥕ìíÍás‹Çd>Óµµ‚ª^Aø QQùMrºÃl&n•ÔÛmÐæœŽË]¥’‡õºœyžú¿ûÝOCµÇ`ªô»$öÂo/e>ÓNrœºñÏOþ“UèV³ü/Un™dïŽi寳išN²prëçä*)ÿÒjí²ZÇð<•]k²æ9¦õÝŽûFÖUI<<;¼Àç ,é5Áj'²y)ë( ˜Õö!íTTɰïlÀ盿„úMSåÖ£üO%añ (þAbý‰;L »*ùÐúê =?)§Ë­}Ò>Ë´)[7dNÑö™ÅCpæó/LyiÈü?¶jí°Úš{'’«­¶W!ÍCï>Ä=£÷,ËSIõ;¯OD§å5JŸµ<Èiä®Ë}•‚ ‡5Kص57í»úÇ>kW—å5øe°É\üFÆæœVví5T<<2½©#ÄE\Oåu'á¶³üO/T²ä9ú-Ô½†ûO@T®À¿(U”TÁòþÙ©¶ây(?²w‡5a«ì•ÚN¾Ž*)8UwQá\TS‚×5©±ZÈ‹§’È[l ÍáÍ<·vJí KJ°? ¯9³Qÿôš°°Ú€ìžJ ¶ÌOh/PíZªìiëgäKm[F³^¡*€;ó*9 Áó/žSœtƽ†×ð:ýÂòWËR†Ýµ’Ãq’h.rFëd„«%åPäCæ9=qãϨèÄk:„ƒž­¾ F kÙâµÜî 'môÉu›¼{%+r®è‰Ú_ØÌK5;ŒMœÌ'«tå‚Tc¨kݱý#†³«~Õ_µ\®ÇO<·Ë”ÐÉJ«G-Vò¤ž^"š1Ï8ò<²ø±Ê|ÉÖ`œ1?ûgÍj@Ø8¦¯% Õ·¼ ”×Kxöùr´ÛŽ‘9{¯YG, ý³¨E ü':´&g-£ØñT£Æ3ØSŠÛ­å6½æköñ…ªc Öo ÁÁŽXW§LøäÀëÔ Is®™'ˆû}ÔÛâà}ðZ%»L Ù’‹Ôÿ²Òcq¾!ÅFf` 1_öC'¢ƒËÎ|-ÓP\a˜ÿw¹R/Ãû}ŸzÚÊ«Ôé-}t¤Ã2¬SnZj£Ê"ÚŒ`l«TóÈåÖ¤’ïÈ+8¿‚*].{fÈïpJ %Þ ñK#).êj& Ë× Vè3¬Á!Çü„z•¥Ð^ì1ÿÄÏ Rtµµrnšè©nU‹2mÊy ƒsS™Ç+2ºòB§Õ0Ë?¬ X^qÔ5cÅPpxGß’Ü·•¬óWÝ{¶§‹0¾á¢Ž7ÉLf09äêz0øDäà6®âéŒx…F†êŽFnšš¨7=ö*‹”аÙçbµ7HQ{ÔæúÚƒèã®  ŸCQäßw†ßp®À ã³Ü¨}sž[íºûZ㛕 ýgLÈ{™ åðAø‰Õ)“x¸KGt’?¶9©[¥ÆªÏAmÝ•wZku<°¬Ö–šš@ΪËÞH9ä ‘™Ÿ¹B©#W$€6w€÷ª‡Ó·a'Þ弯UÛZ{š‹tÖZw²¼—åJ³«:).Á•ÛcÁ<`R£‹$þÃß’µ6‡Á"|¿5Ô¶¿î•ž“eɵñc5ïx¥2ab Þ< ÜÈ0:ä®ÖV%á‘Ì}è´0¾yª¾«ÊAË]+#|üæÑN¯÷4¿É¿ù'\Ç%Ò3^CuGˆÇ,K"±êŽ2â׈½uÑ{)Ùí3ñI’kE#±’ãš•­ƒ®»Zke©rÛáG5éA¶vþ2lTyÿšGú:õî3bòï¿jËêgoÿihÿ™§Ñ¥ÆlKÎÚ“êfÃý¦£þdŸF—±/;jO©­¿ë²Ò3OÑÒã6%çmKõ7·ÿ´ô_ÌÓèÒã6%çmGÔÎÞþÒÒ3O£KŒØ—µS;{ûKIüÍ>.3b^vÔ¿S;ûKGüÍ>.3b^vÔŸS;{ûKIüÍ>.3b^vÔ¿S;ûKGüÍ>.3b^vÔ}Líÿí-ó4ú4¸Í‰yÛRµ`õYhÿ™§èéq›ó¶¥ú™ÛÿÚZ?æiôiq›ó¶¤ú™ÛßÚZOæiôiq›󶬩ìvzY…DšTu9VJeR§â dhÑ©EçmOUTg”zúêÊèˆÑváû¾oå°winÞÊš´þ÷Åü˜Ö­ì¬ÚN=‹VU\óvº{ÄÔöú©fXÞÎ`—‘ú:¶ÁÆpöŽšå´ètÐ% ¹·êG¶P¹§»ß!2dºÁu(3Œg|ñÓ:ãÐ3i⺴ïØ8.ŸÃHRžÍrÙc¤EV‘‹3Œ2Ió>Óë×mBä«‹‚iÚ«ÃÙ|‘æ6…oýCj¶ßèßàU¬Õ³Ä/‰dÓBâ#ÿ$kàŽkîFK=¯F{”¿þ»ÛsÅÿ˜.ý?>½‚ÿX=ê^OÆ?¤>õ¯wñ?†öå¹$ªºÌ"òH…LEWf<Ã8:÷kR|•áÒªêmÁ9ÚÛmv•™-¨L‘JÆ"±rV9#>¼’}z–6ãaUï¾é]›hôÛt)÷²zûp¿´W/íóÿê_Åÿ³+ÿêõÏnþþ ¢Åý[½XÑ©t´:&=ç­TVeàâÙ‰÷–¥Ñ¶Ezl­ƒl¤JJëÇ4$5U®ø;…Ž\ã'§™êu×Lèé‰ð\µ’©Õâ¥TVþà·ôhý-[Kÿià©¢ÿ¸qP5\xJN)ØødÜ2ÝE¯”Õ-ÏÞ¼SшН71ä ÏÐûF1×T6˜¬ÚwN:áh,óIϼ0Þ­ÛÂçs²íKÞËm5•t´ÍKH<ç‘cfTéöÌüzÚ¡sXH¬žÉxÓ³i~6nnpÛ6þ*ÏÄ.$o¼'Ý!ôš*¨&jŠe®d»ï©¸»ÂÑ»–bØ—ëÌmj‡1÷Éž®ÇÝzN¥Mĵí¸c¿Eên on)ï¸Ó‰œ(;\[·´–f÷Ñ*=ñ£TBµàÉ,¸õòäk¾…JÕ/ivÂá¬ÊL»qÓ#xÖëhˆÑ¢#DZ«GìIOüS~mAÉHÍUn?½•ówÿ$ëœäVëŠö¬°%U§cIQtžD{½>“âë†ÚÉ ÇX]Ö7bÿ¬W]§ÄK×6 6Æ´ÔU[⵪\Í%Â8e c‘€€ØoV}_µu:®¥NàÂ1ÅbIµ_|ã8)ýå`íiá <"z!¹¨IÖ†ïT© ZŽrK"¬„Jä¦:Â…ÞWI[2•ÈÞóÂA[};a»˜zxÏ…¼ÿƒÔ¯³YÔ™òØ6vDyïXÝ"»>ü¢w¥ºwËMÎd´RI¿pz·+wŠÜØ—+1áæ:ÚAžCPؤFŒå™Öv¨;M=â•æ ºÃ;P£TJûF–’Y@åñK"±Ž£®pÑuÉ'ÈdÐé×À:’Б¸“þ<Ó©è«§ÝIÏA]$&ÂÿjÁT¼ÌÑ5`å¹¹ˆWÂ’Y›¡]Z –ÉUçµ9’ßsƒo^L»„S=[+ˆvM%’©œ¥AþÀ9=­ã°þÐ?ʉÃdÿ…„Ô¶]°ÞƒyfÄkÛÔ,ÿ¶71¨Pܨ ã›ÑòXTñ AêçÀsü$·­—Ëò§j)®"÷1žŽ¸DоEFÜ‚$B¼¤÷mÌz «€­ÑN´ Þü˜"ïåBÇEz’×g­‚Ûu3‡}SÓ¢šec#µc7vËŒ•Jà:¤:è0xªÐ–Þ#'è¥c ¸K¸*àšŠàb6HD¾Ü§™ ¼Þ6XÃsÏ3>"?cæ5h7†Áïì©"èñÚ}ýÓ‹õ-I« eY‰`Nv‹eĪ­”33s'°…èFBù Yãwö¨iùL÷÷-縧¬\[%ôF´C‘pQœåˆÉ€ >­Qó}Þ=óVl]¾ù(Ë%5ð_iæ¸PÞd¤ÊµfÚ·K'×ý¡»ÅR=qñŒê­¼&x²³‹náOÝ9Ý4Õ£mÂÍA\g{|fú£­™Û9ƒ;0ŠVuTð¨ø=F¬ðnþü(a¿$~S¨é.Õ—úúK~ݹÉI%,K5ΤX¥~ìü•‰[웫ʽS. ø…PÐIJÓj§¾Ù§´Ü©­·*Zºw…§š]‰ ÒFòOÈýìÈÀó2¼ÑåUO1òÆ¡¡Íƒþ»õþºë¤aÿ·¾k½ÆsÍÓ8òƽ5æ¥o‚߃üÚ"©Uþæ—ù7ÿ$ë˜äºFkȺñ®ºWeÿÆžôd¿uÙaýÿ%Élý•è­ÑyŸnØjïTÖÙkZš›Ñ¢‘U¤ 2@,Bƒ€|È5ë=Å&%yŒhs€˜T*Ô\=ŽœÍ»V®Ç7¢Á8‚º'x³F²"£EÌ'+©(¤°Ï–¹E²”u°ü®“c«=\TÞýã.ÏáöȦß÷;ƒT[ëf)^AÞ‰NyÇ9•c摺瑜 iVÐÊTÃÎEgNƒêT,…]½v©ØÖZÚêí×Gš‚'iDœ¬Qäç yº²Å~GÜÝO™Æ²u¶›I=þ|­±ÔpF>ÿ*Óµx«¶÷VÀ^%RÍ$V‰Ã=5\ÑàÉnU“”x”è€aëË[2»KI©bú.e]µtí-ÃÛ]Ò[[I[7qpZI&î¹¹P[¼ÕIåb>˧\ë7Zé4ÂÐYj‘*`ñohñ(Î߬™g’™èê hæ‰C(Õ‡„uÇ·=3ƒ)We^ÊÎ¥Ò8¥ÙÜXÙ»æëWd°]]ë(µT HÉðˆ O2ùqŸÃ©§^GÓˆJ”jSh.ãoq/hnk•ÞÙh½ '±Ì#¹Ç$L†C|@0­â©ejo$–jF£$g’çç¶Ç¢§žáS¸+ãjsµ¦qï“-"ÕæT6¥€ G„A×/ÌlØ™ðÀã„àºz£(Ç^# coá·xqÅ+]‡jÞÝî6êZÊú šW†X!©Rð³PpÊpN£]m4«qÍaVÏVˆÃ<•r§¶_gH>눑O%M®ßA=,®õ•tð=DB9~¸Âä”rô(Žàò«˜¶ÙÈ$‰ÈJæÇh#Äk+olW[¨®U®zëgŽ^ãlžŠvgîÝÙyU•9²p NN5ßf ‰ÜvJ“b´DLxx&òöÄàìWÚ{4÷ ” =o__h¨¥§X%%[šURÌE,‡‘G60ÔuF<£o¢°±V á÷Ùꦶ§i^ omÍG´,½¤¹ÜšžŽjâ!ÐHZ&ï•D2a€F8髲×g¨ðÖœO¾8,ßd¯M…λ˴¿öâ¬Ú;£vIOr¢§†yi# žWd•‚ @ˆ{Æ,@åL‘Ì3ŒêjZèRqkŽ#Å)Ù+ÔhsFIÆÂãÿø¾¥Ø›.áQ_$Æ­’½)™iЇD(®À ܹ r†é¥+U*µ.3'rŠ–j´©ßv·«æºW:®WþïŸùS¬Ú[·²¦í?½ñ&5«{+'v“YUQ8®G¾”€“xG¨syëš¾atQì•V$â|8$ƒ×X-§‡G«±'чAëð¶·£“–U;A1íTÁ{/ï¢z/Ô}nXÿ Ú­·ú7ø{õlñ âm=-CPÃ*@ì;„HØ“á]:þ|Í}À8,ý­GŽŠu8ÈS†?1Ÿ£A•2^Š÷*‘¢í÷@U½à»‚ÁSËOЃå¯[àßÖz—•ñŒl…}\’Ée«œÍUkݺ1xÁÏÅ寯,iÌ/“¼á­1°X,RÚãi­P3÷Ž <+Ííój¬cKrV{œ𛉡’< QÐø5¢ÍrÞÒªö1â‚1ÁúŒ® |]ßúõÉnþ‘þ ªÅý[kÁ}•ä‰!NWqeo: |·Ê:0¢Hªééå¼rí¶<óYïÛ]*#ÄFõ;€§à0i ëÓ>YÖ,5‘ W†ÁX×\»P—o@½l‚bÞ‹4ÑU6«<­ÊÇÚM ­š‹y mXw%Ôlfãï5)¼­8¬0/¥z'7uÞcÅÉÍâåÎqž¸×co]šãt^1’{«(Fˆ™_ÿ{Ïñ×óê쫳´£ì¾IüVüÚ£;Jïì©Ýl±Fˆ"4EMß<á—nu—Mç´â¯šád6ŠÇ’WíJЬ0¥À'ÖqŒãXT³Ñªâ\&Dy-©Ú*Òh 9óMwgg> ï1/Õ&æ«ôŠ;…,Ýã°r,uhÀ0½EUbrzf¡ÖZ/2FÞy©m¦³³–KT]šx-O[l;1-=]TR-D™ÑÀ`¦lóH˜ ö¯CGD³ƒ7vr9+tºäEí¼ñ<Õ«eì½»°v½ÌÚv¤£¶Ûáî¨éQ‹Ó$ò‚Nq’uµ:l¤ÀƌƥGUysŽ%Kr©èWúµuDr!ó]c2#(—#ÊpGÇ¢(  ¶Ö»=öǵ¨)® ËWp†zŽc“Þ8Ÿ¯^¤ë&Ѥà b´uZN À#Œ1pƒ'ÌãZ¬ÖYÑ¢#DFˆk­ýÇ/òMùµ%#5S¸þõÔÍäÿ$ëœäVë“öŸ lÛœd{ínÈöø¹-š~!uÙ;U< ¹ì¾#Ù¶ŽÄÛ¶ëæâŽˆIjŒ£Î9cEYÈå@I ’@u½:Íe&‚u,H¾£ˆŠ‘^7ìI׉VÙmŠcï„x>|ü#—œބ{un‘O¼1Uèïb]"~Ëê‘Äo?¨ê_ÁõAú-Nš®ÎcÑWEKo/Ê_Õ+ˆ¿Üu/øÂŸèõj»9©ÑRÛɪWÿ¸ê_ñ†?ôz5mœÓEKo$~©\Gþã©ÆÿÑ馭³šh©mä±›Šò–&ª«ÚÔPƃ/$›Š0ª=d“ü:iªŒcšhiœ'’³¸wÝQÖ§H’¡ë5‰9ó'\”ã¯àv®—̳ÄlPûÊ*cp’>âØYaL5²W80ÁÐcúž {WT©åö Js~«MÒ–Ø8k–[}½Z;%:¬“Xªbd>ŒF dFz㑇@Jù°:‚”xl;6©èŽÑ·b­m¨,jb¦£¤²+AOhèl—hØ`jy²(Èê2¤¯šýˆÖM ÕÐä´yvfx®µ'V–ÄÝ\ó J‡ÛŒ3QCY:“!ž?Bäc»i1Ê:&ucõe¿Ùûª‰¹¯=ÞÇÙdÔÖ?©]Á--€÷rºJ”ö[„ )Ï…á”ó"äü<Þ@L6ã¢8ëí™â>« «u©ö\-m´²ÓG…_kÖ¯£òÌÌ 9·cÌ—ÏwðǬjl3.Øûf¤9Òüøgê;íLÔ‰kBVÍ=º®æhu’LáˆÆÊ@@À,Nµ†ÞÂ8~«>µÝ|”M=ŽZ+ -M¾Ç$¢Ÿ ûv¾j…Ì¥¼4ñâGRJ7—Ãò8ÖD6—ôËÜ­p.8ñ\Êšô{@ÜuòI ©Qöå+PžÓn4‹å=©R×%5<²ÕÚîQÔ”¦›½’HÕ2°BªÀ¨*U˜0-ŽštA1†ã8}˜q'ã_Ýz6Ц ÚH«iäçŽdFÇÖ¬2?C¯TD¯,ˆ0·jT,_à7OWù´ES¬Ç£>>æÿäs—HÍy^"õ×JìŸÿ•_ÿ&Kù×]vßò\¶ÏÙó]ó‰{ËnpÿcÜ÷^îI¤¶ÑQ³ÖGMHóÈèHR«e˜°P£©'^­jŒ§L¹Ù/6“R ks\R¿´?c]Æ•zû=EBÐÜžÛ: ¿P 4°DFæQ”X–"ŒàŽC\äuói°;7d}à»Ûf·7wæ=âîŽÔÝš¥°"¶Óº_ÑI<Ô6ê]ºòHª!jˆÃá,¯È®Äs@óëgÛ,…¹£Vß ±Úóuνž)´kì •6Ë–ÇôIÖ®¦)#[Ž$©)èm‘Fy ‰S“<Ü .zgU‹À¶3Õ¯.$)Ð[N!ÜõgÂWQÚ³ðÇ|pº}Û·,ï-–ù õuÏJñ5A9Y FØ*ä¡éÐó ùõ×k ”o4`q\ÓS­uÇ‚äO=Žo{vÛ}aVRÔVÐRTÒ[*ì“IRÓ:ÄéL0Y^¥VxY”18pK8[h°ƒwf®^8…Øë=¸'n¿x`º7gʾîÚ›îþᥩ’)ª ¶¥Y>`†š ƒÍ5KžVñ-êÀVSEåϦ7pÇî¹­"³Xó¿Že·ø§ÁM™½ouñðú¶ÑYšš[£ÊT•žRÑ) ÊÚ&p:st$äk&V³Ó¨ãvß~ GQ´T¦é›õ¼*Ý4—Íí¤Ô0WV¨««–˜§§—‰gç ÌH_¯° …Ã郓µ˜Ðxs˜"yëû¬­³kÌÇ-_eJ¾íÎÆ;6ó =dž֨ê(ë^8Þ;[°§rÞŽÙláTrð…@y s¹Ÿ¦è-<–íuº£pqãæ¤¸5»;.ZwLü%Û m¸î4ôqU²XÅBÀâ+;UùÔu$$yêôckâ‚wlU®ËYgê~Ôã|ð÷²ç ²¯spÒÛª¼³Ûš ÝÍTì¨ò¨VÊss„b£à¹Sá$©NÇF/73̨§R×Zn»!ôN·ïû;l}·Gv¾ðšßX¶š‚-´ô 4­;„Ê '©ag˜ã©>CV«BËM€–LeïÉE:Öª <㟿5LƒsöE舘Æ #RQHQ™#¤ŠHefr® ycÉRäxTëœ>à ]Ë—¼–å–Üï)z çÙ{dÚlÛ¯gm8¤eD©¦4 g¢B M<ʼne`µ,¤±,Ýã¹Î®*X醹ƒñãÅPÓµÔqkçw%¢ç¾{(K¹*8‰¹¶\÷ê©c-5M¦_L¨T±¹Q‚0ÝÚõòf@NH‡U±ßsqðÅNØq§“žn;²®¿„›HQV½F¬[l°$°)Œ:'9Ç…¹€[ääëk1²—“LAðYZE¤0 †GŠëZí\j»pϧ͟º`îÒݽ•5jýî‡øšÕ½•“»IƬª¨d¡‚åUMG;Hªðœ¼2a†a—¨ê5Ëh@] Ñ*“Cµhm•k]Os¹Hȸ)Qs’E•Žüzç æx®ƒP¸A_8s'woºÌ#Î ÊCѺk¦ŽEsTÌ*ïi=¾-ÜâïßZ¹»ý‘Q¢Ë74Iɇœ/ÛlìUÎÖØ²Ô3üV¶WM¦˜ä¾Eì>%[6¶Ü¥¶\­—)ÌX’'¦«X”eG*H#'¯Ç¯‹e@Ñ}ƒ©¹Ø…$üfµªþdzÝÉTak¯9Lü#ÔuÎO/<êtÃTñM×ô]wÜÚ¾Áº;}Ø®Ð$ñ$»vê«ßN$q„§×9øÇ–½„›ÖÙ÷’àø »b#Þkê‘·‚k¥ZŒŒøu?&¾¶îõò—·(Ë%‘æiîþüV ©™ñs…AÊÅsŒ|#Œ“ëÕÙÆUÜè»Ý6ªCÛ@3 *jƒ7‰‹rçC85f²IUsäÌÉ»yYÄ]‘8t÷Ʊùv%Á Q˜É1瘮1Ì1Ðúºë–ÜßúW™ÔWM‰ßõ,­|p°X$Ü—qmKœ…ƒ5S@9‡BB¶>M|@a}›Œb¥n|6¨¶RTTßeéRGh)ªÜ¿A䃔Np:úެZ° 8ì+¨{Ÿr]éøÕ{«Û±Ì÷¸yyj¥€I!›–PªAæ<ØÀ ‚p5ÙðòáU×s‚¸í÷M&ÞÊBô7¹õzíS¼·nánÒ[srÁF›vÝ%º ɵ)(”U“ÒyZ—¼n‰Ìà¤KêØw¹ÚQÊ>ËÌ¶Š h4Ï9û¯SGcµÇ‚–J\(Â0£\çÐòôë×ðëк݋ϼíªç²!ŸÞ äç’3%Tj¬2 ó )>¿aõk¢ê…CÖ 7®Ýž×cž²’¢çriï)WÝwÅŒ>^DxSÃ’:õb}zUakdIÅ)¼9Ð``¼Ú#°_i%qÛuïý•¶®Iv¿,𠛪¤f"‘¡1ŽlÆ0§ $‚s‚u󶯇ÚëZæ· _Af·ÙhÙÚ×atê½§î‰vuìëÁîvOáÈÜ3Ùì3SnßÕõ2ËI"°îJInñ˜.I$½O1#Ôcmth1­n1Ž>!yŽu–µg¹ÎÂpÄå{†•Ö¯‡öI¸‘IEýíP5ê {OQAÞ¬d’yóêzc®½:F¡¤/çø¯:¨`¨ne©X5¢Í"eýï?Ç_Ϫ?²®ÎÒ±þù'ñ[ójŒí+¿²§u²Å"4DhˆÑ¢$o‚z芅.õÝ›rÝf½ú M¦ŠáJcB“RA(^YI‡U-†È [¨×1©Q3äº4lsfUñºžƒ?Õ®•βѹ§Šž'žWUDRY˜à($“êÓ$Íy[Þê_ v%|Ö.Ø~¨ª£Ñ£¸KPa¤–s͈âåV’v<¬| ‚ˆ8RuãZ>1J™"˜½¿Rõè|&¥@ CwvµÄ+ýÙ~"w¯W ‹h¥êÊêêäô™©(#¥™!’:‰°;¦Þ†ç S¸|ƒŒë“ç““DìÇ_¿rºþSf¸øá©t>û®–ȯ”ö.ì:*V¬¯z8'°ÜC$ñ£;Ƒʪ%‘cI‘ŸØQøÉ.ŠŒà±­ð€ÓwëžqhñWiQï­…{†ãk®š ˆXç#£+)ê¬AS‚ë¯j•Zu˜à ¯­'ÑycĬÑf"4E®·÷¿É7æÔ”ŒÕNãû×Qÿ7“ü“®s‘[®SÚmÚö²¼[†=¾®[fTüBë²vªxc Û{íÃ]Ã}Ziê(é,¸§æ*±ü#áSâÁù1×ZSu^5,‹ª6© 8Ê¡Ù=—*;ÑKfÚ™ô1ÑÊQYbtåêÍ )¤…=5ANÆr\ÔµŒÉ[mvh©°½µ`ÛÒ^;‘%4¢ ¢Å•@y‹73®Éæ`G]MË!laEûUéÆB”Û‹Á~×úÝ«°Ûêg’¬UŠ$›ºó.Ḳ웮N®ÞHõ`*;OPK¤¯4oní+—®ß·dR=m ÌmªC!eeD–9T?*ÌW§ÚŒ°É©fc«Ç|ÄûÍz´í/D ÙǼ”=ã³' íôÒz&äž²¦–$_A‡µaˆ/ž\4ܘ¥Šý‰Qœdj޲Q?þ§Õ]¶ºÄâ?¸z+û²æ×¾¾‡qñý:‚dä©}›RèêÑ¢–p1Ñcb ëå×GXÙ¤!ÎÄn>«6Úßp·¼z&VnÍ» û·ÎÞÛ!­¬ô´²dðXÚ*éÈ|@⺑1յаKÞ'Û â}°ÑÞ'Û sý«R’SîäjÈ™#¶Ö"þÎrÙsSuêÄdƒÕzc\ôÏoÀë÷ wˆ,ñ½ÊƒÞu©U;ÉWNBØ"æW½¼JGqžæSÓ¯ÂòaæF³¨DùmðW§1ç³Å%ʪŒq"Ö‘Ü©{Ãb§Ä›¦d•”Ó>0Ž;¹G.H'Å€Ì|AF„(ð÷)h:#ã³j¹RVCJx†h–•——~µl9ðøanPàc–o!^u Æ?Ýú¾,ÕÐ+¥Ž§Ò§p72§}nxJD¤‘ÌË– C/„œQæ*;Àëß±]‚i·Çfíª+dÕÛqÑCh¼Ð4­'ÖRƒLòV)”#`g œ£Èë:d_»Õ^ 7 íû„þõ_Ee¶Û7"Üé¿`ÐSILfâÑAÝ—U`¡”È#ncÌòx˜€:5gÐ9Gò~j­’ØÎŒûòL·}Ú—nTÜ,öÝÕOm¥Ši'–šMý7¤ eE,ïÝ#z€äŒ³.lupa ùb¬Æ—Á"Oþ+¨mn+Ü+7}Èš’Ö±ã»gú¤†Jµ 0vFpÄz˜œN:ØÊäÔ ÃŽ+ô@a~<0]Y\eXu.d?À?ƒDU*ÏÜÏëúÛÿ’uÎr]5äQååë׆½…Ó;(åLêÉ:k²ÃûþK–Ùû>k»qVñ¶vþŹ_7}•®êZnòª‰`Y ªaB±žlŸXÏ«^g1”Ëœ$/:‹^ú€4Á\wpînÌ›ŠéC¼ !¸OÒ[­RQÀcš´RfZ™U_™™#{ÆSâÇ/1ë®>È÷\œgVq™]Íe©­»z5kÊrŸ‹Ý­Æd¦àÅ2ÒÝ)ª*n’{ÙNužHÕ”¢“Þ<À©elròár45ì£&`sÀkõÿ((ZNoË,N¯Oð¥(ë;?qjI8R¼.ž®ÑÕÁRþ‡ Ñ©ï¢çF,)#C)É^cÔjàÙkØ™üªi¢4—¦#ðœTq‡„]™èbàûXêi-V(¡¢·ÇK ¨aD¯ÌÊÌåœ.z䜜jMz1¢ŒT ígK8œT]>ðì¶ÎÛr»Ô´bª$´Ü᪱҄…3¥<¸c”À. ó"ô†éª –>Édj8 å–¾Ð~ñ‰â¥-§x%·¤­´mK Bâ?Ix-ÔÐ"NUpÙ<á•\Œ¨P¹È¸¶YØHhú*%¡Ð\TÇ·8è·ª{6ÇŠh’¥%¸…©TU;ó(çá6UæÃ â¤4C°ñMöÿ¸"÷ÚÝ·ÁõW„ íOKMOé^‘Pò¤Š«ÌM”nvf0F¡–›=àZÏ ¦J—YíHsüsŒ×loÞñúå2í\¶øºßUt¡'(Y˜º0dljFp¬¹:Ý•hÚŽSâ°}:ÖaœN&»ƒ‹Û?zîêÔl†ºCs¼ÏE[ï’ #gi&åË"Hy°RsÌ2£:‡×§R ¤[2cÒ¥”*Sa©z Ná%ö.ÏV.%ÛxQ_ëY¹î%iaäµÄcfXæeï:ó RàãÓ£º+jŠe¢Näiµ:‘¨`oMø§ÄðÚçA±÷ŽÄ†E ·ú]ž¶BÑ!2DŽW$çÈ*#ÔV«f¤àÇ7,°V£NÓU¥ívy⥶Ó†¼T°]o±ðþ™h首ڲŽ6zŠvŠ›**­àRcíN¯HѬÒë¸e䳨*Ñp±û¦œ âfÌÝ[øm­‘ÃÅ·SÃbjÉ«dŠ(Ý{É"äV2Áƒ§+“Í•åU`"…jo«uŒ«Ò¨ÊwžéÅumv.5]¸ŸÙó(uƒ»KvöTÕ«÷ºâkVöVNí'²ª£q_÷Ê—¯ûƒ~q®jù…ÑK²UW×åøµ‚ÑZxsûÕvÿ›ò[[ÑÉË*™„˵@Ïf=ðÀu;>·þ¥µßèßàUìÕ³Ä/‰ SÂ?â#ÿ$kàNkîFK-¯F{”ÉžÛÛpÿ˜.ùù)µëüú±ïRò~1ý!_I·/ªlWg§­ºÛèLR4©¶®|Dg${<úkéŸ\µØ˜_6ÚÃ+M£Š7#KÝÙk¨*£ŽV»²Ä– ²’ëýz†Ö1‚—Rˆ]Ë]索 ‰”Íb¾Íu4Þl®W ®…Éû|þżOû‹¯ÿ ëšÝý#üM‹ú¶x¯Œ¶-ËÛ5SÕm뜴²ÏŠF‰T™˜_#øpâÜ—Ú–‡f¤jx©Ä:º9h.›¾®Xê£äðëËÉËžLüž~_Õ&£È‰P)±¤]ßÜœ¿Ûv×k‘{º‡X Ù÷##(É59'¾€ùdëÒøCƒ-rvç|Y¥öXBú7aíÃ+T߈3\žz¹;©ÞÕÉ݆9x€ ë×®N¾¶ª-ÍÓä¾yÖj®É±æ¦?T½¾-Ô×=³¸npSEZªmð*¬á&.‡Â|Ž0zt#WÓS¨i>Jš”ÉYhï´WëKIF²*ÇW°”lSê>ZØ<<`±--+vÊí¶;;púÛºwFÆ¯Ü _{Jj+tÑ$‹#Å#sæY#\F Ö:kšÝi§f¦á2atجï´Ô-iˆ¼¥¶ýÚÞR_ªvÞÖì¿ÄT¸ò7¥S55ÈMÈ–J‘…ê#©èFG]yãâ´Y$5záuŸ™YÍîòð®ÝÂÅ?¸–jè#窣6êÄ¥r¾!?.IÉ8Áóuo›Ó‰!P|&¤À+ÜÜ)ßvþ*ðÚÁÄ»=ÔÔ—û55šž¤(’4–5pÊHæ°pH×­F «I¯į*µ3J«˜uV]j³Fˆ™_ÿ{Ïñ×óê쫳´£ì¾IüVüÚ£;Jïì©Ýl±Fˆ"Æ@JŒè‹ÏÜ[âm 6úÜöNpò޶Ó!¢]«t–ÞÑ q‰kpfS0•XÅ(^Ióeuæ×«nmG6›dj?UèÑ¥bs^è:ÇÑŽÓÿ‰•‚˳vuE%e¦ÛFâD·OP¥žd4pÉÈ#fŠÝá%pÀ\çP-uk`Äg„ã³ò¤ÙiQã3—†Õ•šûÄÙ8GzÜ|-œM[´Û¢c·"Þ²0§‰%GaPpà²àò–b24k«iAs3Ï Z¼QÍ£¢!®ðÇ^¿ÒövÉfÚT–tÜ{Š褕iåžsï1*¬0rª*ôË]téþ˜p\©×&“<<õýZî/Áï©ý[Cÿqâ«¥ÿ´pTN)öb¯â ãßÚ2nºMµqµ­wBiçjœ²J¸ñ„)Ð ê<ެ†©ò0#=«z6±LA`Ì æ—xƾï;U·yÚ#³Ò['«–K…E8ž:‰yE8çPÈRIÜ?6S žc–«g«f1S§½‹ééW¥hņ~ª³jÙ[YVãFµ3°¾¤iw¨š¡ÌU™Ý˜œ"óóºŸ%TeQÒ0uˆƒ­kˆYpïbo=Ç5¶ÔðËy½G[5lÛ“’ºv‘‰Fc!¾‘ÀTló‘å‰hsÝu¸•-ceØôë°77Ÿ¸.Öþ¾q»\^¹íb@E²ªªRG9 ÌØ$q××Õ|2ÍRÍg‡æLÆÅó´S´W–d0«ºëÑ^z4Dh‰0ÞÝa[ûŽ_ä›ójJFj§qýë¨ÿ›ÉþI×9È­×.í¨ƒ‡4ëæ×Ë`Ùá:åµeOÄ.«.§VjrÔÜjˆì­qhöûòP)`g![ õ¼¼=G«®µYòœY×Î1\Ú®×ÂÛ’ê»(]ª**+£Š¡…¢'ƒß–fæ1¨,A=} g:å-¢Ò>õ® ê£*£%+Ãͱ°·.îš–íÙ²K%] ¤Ô·V¢&ʨQò8 ‡Áu8½&R{ñ§Õ*>«Y…IJÜ{?ðj¢å5Ê}FóTJ]Ú@Ç€|9gÁìÛ£P™º±é5â/.}áõµw…Ç3ïš+tôuSTAÝk©Ätá‹*a ªL½à'ì¼×RË/Do>õ¯Eµ Àû³;‚lÛ#míJv½MÅ‹mD´¤ ’ç?Iëæ }z&ðâ~Šo½æ.žê¶Uð3pY £ºøƒ#×Û’yjú¶%w–@ªÄæpåÕCò•$tÎ†ÎæÃ\ìFò‚Ð×ušÜà·^¸5tÚÛ¦ë¶w?íÖö™£Z;}nå®GåTï]† <à œžS©uœ±å®ty• ®×°9­ðNïàUÛrXûžñŠŽ¢¯ý›5é¸Õ¥$`®y”*…Vn‡¯) šÎ¥˜½±Múö’®ËCXî»9ª4üÞuÓG=®ín&yV"—˘F0ŒHÄó`*œǧ1ÏÏf¨ÖJÛ¤SéLlîÉœXâl–͑ڢ×tž;Ùâ¥Ü7d^n\·Œc©ñêôì5ª˜eP|Ê¥Keb_L ¬ØìíKýü¡þ¸þž¶ùU³¿Ì¬¾gcîrþÇgj_ïåôíÇôôùU³¿Ì§Ìì}ÎAØìíL§›õsƒñÞî$|…ŽŸ*¶wù”ù¹È.«Ù[…×‚× Ã±øƒ¸–ïp IRkbžYW»~ó•s)-‘Êzy{5Ùc¡RÎ\Ç™8.K]juÃ^Áع±¾h×râG! ŸÆ£DX•ÏR­Ô}®ˆŽPäò°Ž¹ÿë×¢*fÕŠ¬}V+Å^Û*Œ "Ó¦|Oû[/žÀ2|0rX2zþbÙñÔòÛ݆¸WLˆõˆ¢"£@{˜|Lqêê9—ÈçÔF²|Ï—¢Ñ‘~©.~û¶ÿ¢†Eº:5–˜Ì¨ôsFOpÇ/Ï\x“Ö¾ ¶Ž½¥ä6lFÝÑœ³ßµWíi¸¤•Ô÷Á<´k™+©­Èò¦T“ßÃáª^§¨¼ÏÙ f/kž_QšÐÝÕþ‡$ýá»TnÈᆚêâ=¾9"Š’Š~GÌ|¥ccˆ\dò—%TÍð†-/×–å^­ÍYïNj–þ›røÓSîšZ¶ ÓÓ[)ä‘ÇÚ²x'sÓÞÑ–¤‡\v|‡ùP.—7.kL­¸Yv¡ { É­<öòÎZf_ÙÊ /¬cŸƒ¨Ôuú™òç·Ë<”õzÙså³ÏÅOTGx’û2×Gu(`”b¶’‰Õ€„c ‰€9Á>$ ƒ£Z›×±žK!vèËŸ¿U î6°Yn~þ˜š,ËWGïor3!½\¿\=1‡Œ`Œ)ñ¬ú×ZDòúú-:·ˆ1Ïéê¥)ÖðûŠª¦¹[&%Zz99X°Ë¬'¢39˜ò¶| sjâõóž[¾ŸuL.Œ³ßïÉ;¾R]â­äKmÙ`jTﻫ%E’S<Ù=ã0JtbN:«8:r<†‘¸•¹=÷x^«Òìõ F”ÐFdOhAxˆü“½T‚Qó|øžø«²îŒxï÷Á2ÛrîëÅ'¤%ö¢ •­•qòðŽh£Ãöê@Æsƒª°¼¸gÈ«:èiˆæ×QvmC=9½3KoƒQSÛfi¼NaßÔt¨|–Ç&*õ——kåõ9¨`õsú ¾©üpîúíÃY ºöm“QÊÔRÑÓ[éâ•Ê`VË æø-Ô³s … «CËŒARX&'Ík¡´ï«+Z$ŽÉ¹`š™ 3==ž†Q <ü¯ÞJà<¬ÈH,˜ „çÄ4 ¨ØÀðT—Stâ8‹» “ñãäפ¼ä­ð[ð›DU*ÁšgþMÿÉ:ç9.šò(\ üzð×°º_eÿ1ÿ«%üë®Ëï.Kgì®õÄýÃnÚ›"㸯Øë)iiI–šP Ë’VÈaË’2H kÓ¬àÊeÄJóè´¾ h\ŠÒzê [ÞÝá-$RV:Å«dZ´Aá–%Lº#bÁ_,0ᦖ‚ÖzûØ»M•Àçú{Ú·íî3ìê-–.÷tTËÎ{³,FUT<Éûw1Q*”lj›RÛE0!¬Ãß=ªAäÉ~>ùlSÖK–ѽì9»MØøwî6ýQ¦ŠiÜrˆÃ:©P“«ª’GQÍÓZ´Óu.Ö‚²p{jh º²—÷­ƒ‹×*ç¬ÙñÍB"c4ëÀó³/)n\£ŽìžSבão²Àµ*®L·%Z´Ý@v~ýï\þãÅM váà ¸^iîU6ˆ+idW‰ 5ÅÈêÀ*ÎʼÝÙ²±!±Ó\ƽ=,¹’dŽUÒ(ÔÑC_ïr¶v†‡ÛknÒRnNÛk­UÓñÕÇ6¸Ý+ö-=<4ðG5\k3ʬÒåpÑžT ¶9Ö…VÚd–¬ëÒužr®]{PÐm ýÂÑMÃàÑÇrŠ–ž:IBÎÎâréÈeŒ¨O7vÀ‚z bm‚›ˆ ×ïÞŨ²´Ú½ûÚ§¸Æk&ûÜómJ=‹Ol«¥µ­MME €J̽ì*Áœ3ƒ’<]IÁÖÍhmWÝ ƒ ;ESeâ麾»W®Ü1éócî‡X;´·oeMZ¿{¡þ&µoedîÒq«*®yƨ®Óѯ_à£þ¬/'ãþ¯qq‡o}ÏßÅÈÆš ¯\Ñuç-žUFÎ|¹ºc¯ž½Êô´^% º6%áîÁ“hÀ³Õ]+D® ËH+Œ´á0Ä@êqêÒ•+ƒ4«Vþ¥Þ6€#mQ)Å:ô:ô©öóßÛ+šöæ·W]»ñ2ßn‚I¥“f×¢Š2ÌÄFI¤ôõkžÜ ±¿Áob ZÙâ¾6mkîÍ´wWK¥ž¶¢©*VZjºZÕDTaÃb:õÈü#_Òa}£:Õ–ýÅM£¸é}ì½ÚoÕTBQ)ëáW. Š—B>A«švcÞåPÇ7üÕë°%Qµñ¿snË­ýÙ°®óÇ wbLDPJÊFrÊGLd‚<õ×`7j¹ÃP+–Ü&“Zu½Øg´Mß´Þè¾Ø·~еPAk°[î%¦Zäfz–‘YXÉ& Š0½duƽWZàà0Ù>«Î¶Qv‚ÒqۋѲpÛg·½·N •.Âá8/ËŽ‡ê: ^½ 3«ê¼ý+Âè<3·Ó[6ÄÖêPÂ(k)’5wf!A\d’Iüzê¢d.z¤—ÏŠã^ë? ·o;5QRìÎÌqf¶ƒuQÕýKI~šÞQtj•’»°üÅ$Œàcñ f¥! ˜;ö‘à¶°T ªzÑ#î6ñ_?®}•7ïI®{gÜb¼ÕÉ[<²Þª·½|5SJU9¤Ö`Ï•äø'Ë^0¦òÀÝðëG¿r½ƒQåÚAã„û÷ ¼ösì Ù¿ppÆß¼»@ö¯Ú›¦÷w©µÞ,–ë¥ÆãèÔéS41Ô4Žä’4ÕˆRN c],²Ð,mö÷๟i¬à׌·b¾ˆðïhØ6ól]¯Aè¶Û=² +}0rÝÌ1 DL¶I€2zûuîR`§L4dñ*¼Ô¨\s*wZ*#DL¯ÿ½çøëùõGöUÙÚQö?ß$?Áoͪ3´®þÊÖËhˆÑ¢ €F¯DXw_!çb ¦PJáyºô8Ñú0ÀAk\ … ¸ É|Kí9îlìm×·wð®)f•šJk?e’š¡C”2Ç(ˆ,¨Xs¯2äyëÆ«iøSÖhñ»îW±NÏñG·ªãá>áz3‚UüÝ[ß½ø!Mh6+Œ"Z«EÂ’'¬A8 Œzt Ó¥v/6¾™µ jÌïWDàn°YhˆÑ¢#DZ«(åþM¿6 ä¤fª—Þºù¼ŸäsœŠÝr>՗ö¶îÅÜÏ}è7K|æ"ܼü¨O.}Y×%µ×MÛ]v6ßsÛ´Ñ8GSGyØVŠêtÕÛ`‘ávæ_–ÇÇ‚|õÓ@‡Rl®zÀ¶£€W²ìÇNaIEá8Î@üºÞå5Ïz¢ “d¡åôqœQÐivš^¨†°ì¬ï}Ÿ–K´÷%ê‹î›–롾ÕÁh¼l>JvUZ=Ò¥8Û–AݰUÆ#V,?1ä9\x^^`·Íw00´Hw’ÓI_ª«¬Û·[ÆÄ†ìõp½³Ð±‚ìŽïWé,D*õ`äd@.$´–ίp¤†€iäÛ3´Åζ ˶Üá¼Üµ“ÍQÞC+ó/+$ ’™^RÍæA5sNÖLßy*Š–@ {ÍZ8q¶x¥Q{š«‹gfGN´ø¦{,r<Ýà!G3H£ÃÈ1ÓZÒebïÔ òXÕ}¿¦Oš¸Éµ6³Â`}½BciFOFNRëð[ó¯fº4lذ¾ý«Rì ‰Ì®»FØ çŠ8ü9óÇO^£EKºKSjqmÛ;jÊí5šÉGHι§…c,3œ£¯^º°cP^çfSÞH~Ø|º²ª;¨ý‡ç¯DJ‹Ï)ÑÙC·ªxɹ^éMJî-VÀP9‚ýÛê×0 6‡NÁ÷]¼Plm?eg÷‹ekè~EÖ·iîYMD{ò‡¾‡ä].ÓÜ“Q7¸Yö¬4nôT=èCÝFÁÇ—«:‚Úq‚_8®«¿i˦íÝ|TÚu4vØZ9j'…Ì·>òpþŒ#<Ɖo²| uçQ6¢çiç»rôj‹0ktgå¿z¸í8Ñ7ˆŽ…Þ‚¨8ŽÌÁŸÄàæ<³“Óz0 ¹ÖÌÀê÷+žÇ–¿p¡7­ <µ“Fô¡Ù æ gir;˜\gát>"SÔ gQ²|¶n JdÇžßÞÛ qÛSQoR‚ÇN;éöÃr†~º­Íu#¨_²:‡ ª<­ÈÒtGÇj­mû- 3rSÙ)’héÕª’ ‘=+!Êᤉܪ‚ÄH'8è²k@Õý¤{òZ¹Äëþà}ù©«u›”zM¾˜ÄváŽ?IÚÓº:–Áà`ÓdçëMŽðç¨U±þ;6gÃZ¨&ïžß|u-’Z-R×úh,ÔOÏ;¤ÑRl*…ÈÉð¼R¾®2‘œž˜èu%¢ã°þÓξÓ?Ü=ñXÕZ¡_©im‘‡¦wœÛ%ÏpDŒNUX „W›•pËâÎ…½Ûî8õñçîTò[)!¾ÕÔGoŠ )vM«="†0®¹bňÀ½r«u ­.€ãèBÎñºÞTY)ja°5Už­ŠŽû"jª´Ì…±Þ#z<®J©˜ulj—A ‘þ2}Òñ—c‡ŒR¥ÞÝ _ëk|=ËØaE/¶¥(Ò_ óÊÃ× Â/\€5{¢ñÃVÏ|2Tž¨Ç^ß|sN7±î«QïuaNd]¯Xî¸)‘ß3b,5Ç„Qž]KÀœ¹ª†“óDÏpRÓ!ݪá¥QÏd¨ :Y%ñ?{©fúëxP€¬æ9]UÑ¥1³gÝKIÑ¿e´ì±Cv ª­²Cç'¾©Ø²SàžrXÏ ¤ù—©ñ cTczÂGöÇ0´{Óû¾ÅIÖmØ/7 ihéÖªZ 8Ì•!ª¥ç\•Wånî"3‰á«3eŽ®Yx/ã?ãì¨Z ÕŽ¸÷÷M©èh¨'¥»Üöý;Ékzxä5>¦Zdž–nõ¦ âÃaUW”¾Iqª€2Fpú)$™ç:Äcõ^‰·ÕC[Ee9nIH™8a‘‘êèGMz È•æJ„ð[ðhŠ¥Wûš_äßü“®c’é¯"ëÄ^ºé]“ÿò«ÿäÉ:ë®ÃûþK–Ùû>k¾q6ûWµöMËp[éÑæ§¥&1*–I*¼Ìš¨%ĽJÎ,¦\›I¡õ+’^»Eq0ÓÖ ½Â™)䤯zfjÚw‘]Ê«x*ùÁs.ùë…ÖªÐn±w6ÍJEçf¤aã÷ຠµQÁ)ZÓývt¨~áæ2"SÝdÆ eŽ9é‚:êý*¨7K1TèÔˆ¼‚½ñKuß¶>Þ£¸mý®×I¥¯Jg¢ˆ²9æ$)å^e\¶:定Ïu6Ñ+ž‹Qä MvëÝÁ{žóµm¸©¯ÔöºÉ)íέ"zT!ÕGE êÌŠG@J‘¨/G/­Š3NN8.}oíÄëM\6«× ¦®i‰>’"h™aË9['œ'§*Y×(µVi‚É]FÍIÂC¡t »Ä*­ÃÂ4â,ÛN¤T=®J³hÝã:†ð/2‚y±Ð‘Ô#®¦U/¡~5d¹H2½ÉךkÂî n ÏX×}$0ˆ*ûçu«v,KD¯ýl*©V8b[ªŒkF«ªÌ¶æ¦µ6Óˆ2U_ö‡Ýû7uÜ-Ôœ8š²’‰;´‰)çif~u!ˬlª®¼Ü€ÉøEOC[UJo 6@ñ÷à¶¥eeF]áïÅ&Êâ\¼Fßöý«½øI šÒjÖêi% EQŒ¨¿\@9™1â |J~-)ÖÒÕ {2œv%JZ*EÌ~q‚‘â—wNÊÝÿR{`­Z Jz“^ñÌÈUê̘\&J±=Y‡NoZÐúoºÖìúâ©Fƒ*2ó·è ë{NïkDuñ×p6­j©)©¤D§iåUr9–,ãÄP6]8é¬Í²£fY—½‹Qd¦â!þø§^ѼC¶[+o•<"!i)A¨ÈþÀßYðžPÀàž¥G¯Rë]P ¹ï‚¨²Ò$ þø«ï·-Vñ£¹ÕVZL"’à`€KBÈ`Š@02™Z6øÐç#]4žjHËßásÕhaDØ\jâ­uE«l^xk— ‰`ZÚˆ„°ÃL•™ØÏ*b¨%š7 Ëç®jVŠÆ[¿atT¡Dàì=û*ËÆÍç¿6sÙ Ø[jŠºK•{ERjéäp˜ Ë’ŠÜ ‚Ùfò¦uµ¦¥Jwn ••”ßzùˆZ¸=Æ=ÃÄ-Ûp°Ý8_UcŽŽdJЧ%¤n`¸ÁUð6ICœ•C̦¢ÏhuW[ïü)¯A´˜tÏ¿òºfº×"®ÜwÍü¡Öí-ÛÙSV¯Þ艭[ÙY;´œjÊ©­Â×AqNZê8æåtPZšHÉD¦Û¥ú¡zf´Û½ hU–!N{Á)f“ðJàVsŸn³¸/ä!^ñ»ž*V+=º D‚Ž8âæÉH×”Wž´ºÐ!Rñ™K[H¢&«/)Œ®ABJå¾Ã·-Ò{íû³6Ë««ª™¤ª¨žÃ yõ,N:“®cb²“7éËVWÊ‹µöìo5MÁ.]–öGXJAÝŒ2Æ#RæÙ'¨ÀÆ«TmŠÍ&Xl´À‡•zág® pDOú‘pºÃ¶ý-‡¥µ¢Ù&Pb£'¶§g£DËÆ¥¢µa×q*ÎÛjËYPóUÛa‘ýlËçòkBÆÂÎû‚Èí ¶F=æƒæÿ¯M6)¾ýªB8Ö$Ѝ(òWTZê)Ö¢'‚@¬¬*à ƒæõôÔ!r«‡a¾ÈwZÙn7NÎ;BYåròHl±Žf'$ôÓ®S`±ŸàWNµæTLýƒ{#¾à†˜vlÙ„ôr4‘›0ïL¡×”ƒžP¸-‘ŒçuNd¿Ø¯Ó­W;fUç`öwà— hê¨øy»ž:³š¥ ·$}÷Ää °øO‹[Ó²Ùé«@XԴתzÎ%ORl-¡L A¶ècæÆ{ªUR@òxõ{5qJ˜Ô³5u­ãgí±ÿ™©þgúõ:6lKïÚ·ÓYmÔŠŽ8•\·*™öãÛùµ! d ¸• Å[îÇÛ{_ßûLòÑÅ:â‚啤' SÄO·C9ég]Ô˜É~Jô[Qï†f¹ÌüYá úËUkÚ;zõõ0¬)#íÚÅR‚@ø%Jœd`Æ25ÊkÐsHh< êk´‚â8„Úõ¹éw䪸ÚöµÕÒ¢rK d|Àr…-†Œœã9æb@5W<=ä€x+5…­»מñUj†KͶyD5=ðeÀÃsr¯Së×{ ‹q …÷C°*WWTFˆ™_ÿ{Ïñ×óê쫳´£ì¾IüVüÚ£;Jïì©Ýl±Fˆ"4Dœ¾­xç¶'o>1p+u#Øû*Á4qí¤®¤ª½U¼"ª¡äXãˆ2«æfÀ'W1=•ª™{Î/ïÛ7x³k¤öc¸Cúí Òݶ.çtÅŸ‘Y,LÌ[‘T F¾~£mF4ø½æ:…'ÔâGá{÷°•výàï6' 7—Ы÷ÂÝUÊgçÝC•$ Ùrpzkèì©Bƒáì•óÖæÓ¯YÏiöõv½…ä£DFˆ"ÕYûŽ_äÛójJFj©qýë¨ÿ›ÉþI×9È­×í±ÿ“­ÿ8¡ÿ#\ý–y.ëî»Í[,»‹qmÍÝõ6Ã^.Ûr–Jktn¦` c9&Fu»\æYš$ÀÁbæµö¢`IÅ8¨ßÜN;oîj.—º\û³r²Í?Š“È0.2«Ê %Ž|º©ÒÖѵÁ¸œÆÅ:ZG4»­e´8§¾7&çŠÑwà}öÇDâY%¹Ý+ eŒ©UT 1Ëe‰ÎÆ2zdÊÕø, m0£MðNéW¯GˆŒôÎs®…‚¨ïþÛ¸Sܪé(S Ö¨§$€<ÏÔ`è: ùë´ES'èµ§XÓËêšUp]ëîTwŠýËM5]‡¤©—nÒ³ÆÀ(63œ"ŒõÈP=¹©³’àIÄn ¼Àï*ÃèOþ&=sûÇLüÝkúÝþAgú=Þe/ qCûîKýMú:~·OÑîó(ô(}É é¿GOÖïò ú=ÞeÅï¹/ô7èéúÝþA?G»Ì£Ð8¡ý÷%þƒ¦ý?[¿È'è÷y”z?¾ä¿Ðtߣ§ëwùýï2@â‡÷Ü—ú›ôtýnÿ Ÿ£ÝæQèPþû’ÿAÓ~ŽŸ­ßäô{¼ÊKÕ¯¶^ë·ërIr­¯H#’g¥H‚¬Aù@Tû3“£Zàââd”shh˜ôx\“WTA§ˆzÇÉ¢ Ó®2¬3íÆˆ@èÊ?ˆ¹öÒžŒÅ¼Ue¥!-uaãKœòÎO2õœç-Éð³Ì1sÓˆÖ·©=O«Ü¨áS5OXÓR©hHg¬¤PTŒ•=OFr5CŒîß°-0þ«UÚk{qBÝ,Kl§Ù h–;T÷3x§v@á[¯.OŸ.¡Äi†YoØDsÏvÞ*··ë-1SÓÓ×ÛdJxaîZÚ„‰¼>Ô=+cÊŒæ²iiŒ¸Ÿajðé×À{*PÖÐżZ¤WÑG"í¶2Ê7U;r}hi9HuòÓÇä©ÕXêò4“»iUƒsÏ`YT×ÛêvÅð›­®dŠVl Û]T Ï\” N g-Õ†qç ˆâOøPn€ÿ+KÍiHöC ík•‡Ð¿UÈ  ˜Žäòót>B~ŠÞ#á騑Ôˉ۫ò§¾|?°¥]%Và©0\hÝÖ9ŠmÃTî¹…y†d^Tcž«äÀ†^¯­dày•”ч  e®µÒÚ,6©+íZ”÷4sn*øyÓ¾bBÛã\ºçì]¹ƒdük2@kFOÑj.qÇ€ú©¤ž’ Íp©Ž¦‘혓‹ÕTLS˜r£MÊG õ"}q|Û8Ö˜_>O¿ºÏ£Ç`÷öN÷ ΔݒškÍ#JÔ‘÷qɼj;ÃðåŒ/+zˆæ9ºçRâ'>eC»— ¢w]TKÄ+ÒªfŸê~¨ÔfçQ,Üì|á‘»*r9•dêºzá®yÀë9íòS ¢ç´œF̶y¬ª8ÅÇx)’¶^ó¼ÒIÜ[£IŒ’*…\3ȇ«Ë–èÊ¡-¡´Zc±åï$,óÛó÷Á4±ñ£&×,7~O-[×NñÖÇgªŽGÞIŒds£§wžñ•rPuVÚ-‹qð9{óVuž„àì ޲m5Ú%ÍÃÞ> žƒˆ v>ðñä·ÔqgŒwVÜÞ– °e¡¹íÈj*¨£¡Ö™ n¥yŒ*Æ Êeç~‹ zä5à`Füþª¹¤âå™â§h¬­TÜ*¢X%–JQß´Ê 91 xK…Eòæ`GAÖtÖ¬î}SCeï}üpí'5Â:ëg æJHª™Zís¬µh‘‡cˆH’ ¼fm6¹Ü<+Neˆ.ÇÅOl®,q¯r_¨ ½ðö[m/¡UKP††sé,‘‡`%fð÷Mã'¯Áêu§^Ð÷ l vûòYT£A0éËßåFÕñóŽVŠè­»ƒ…ÐÓ–4±GXÕH²M$Aʪ¢ÙnhÀÎT©fÂPÚm 0æìÚ®,Öw k¶ì[dâ¯êèf÷³…Z¥Bj*…E$Ó‘CÓª®ò”%»Ä%6YNš{Q2=å¼ïÉ46`qtûÏr¼ð}níëk™÷®ÖšÑ] tѬ «°+aÀ-Ÿ#AÀÀÉé¡Uõ\A\Õé2™ê æ°Æ[Ÿ“È:èX,–$F殈²Ñváû¾oåN°winÞÊš´þ÷Åü˜Ö­ì¬ÚN=‹VUGžˆ™<5¢àÕTÝÙSÞ0C1õU Ì…`DA[9®ÿiMó›èÓ¬TŸì© ˜éþs}u“ªûêXéÏøMôiÖNªÑOGu‚z‰y)ˆš`ÀÝ<*=žÑ¨ÂT’Ó Çû*:÷tÝ„ßF§¬£ª…7^¼‰MóÛèÓ¬T¼×´¦ùÍôiÖNª9®ÿiMó›èÓ¬UŽnÇìiøMôiÖNª]—ì)þs}u“ª´¼F¯J°´þYY¼Ëìþé”–Ä-àÝÇû7Îo£N²uRó]þÒ›ç7ѧY:¨æ»ý¥7Îo£N²uQÍwûJoœßFdê¯?û¤»ŠüTìÍY°øazk]æãp ¸R±ÌJ g ’¤«(*@ œùp|E•*Yî´k]ß}6W¼v/Ÿ=–;0öÇá/bß»ܬ‹¸ÕužŽúµkYL±7ìvå’:iR‚tbuáÙ™YŽê†Â6ëÛWµh}·®O˜;5yì_@v/¨)."íëEšz–>…¸÷¯?N½ ƒÍ×\ë×¥T ^MJdâÂJïÛbJyvõ´€Ú•1äרÈ,¼×Íã*CVUFˆ™_ÿ{Ïñ×óê쫳´£ì¾IüVüÚ£;Jïì©Ýl±Fˆ"4D‡ '¯–ˆ¸ÿhÉÜ>ãmÂM÷YiÎ奰TP[ª x_Ä©"œ†PáO¨QzáµX©Ú ÿå»lÖÊ”Ïã2«Þçße ÅÙg–m™½îF¦ùKNðÖ55W42_"Ù'®Ož:uÍlWÙ©uóV·Ú›h«ÔÉwº»eºàÓíðÍÉÕ;蕹OÅœã]äšáŒ–µöÐòÛÔ#ðR'Ѩ¸ÍŠo¿jŠ®áon»¢Ý¼«vU²[œH-UÏD¼ô…ðãÂHduÆpFN¨hÒsÃËDŒ•…j­ih8×í­ØnÔüCÚœN²oš{%~ß–n4µ¶óQ }$uQÔ¬¥ÀËÍÕy\åN¸m¿ª¨ »¬vóe¦æD‚¥+%z»Ì”rÜ'34j©’Ks`. õ ôòÕL—B!³ ×ÃÞ­Òº›uTßHi꙽iù[¼F# ÜÄ|!žžxÖô¨^!Ĭj׺ auñœu×râFˆ"4E®·÷¿É7æÔ”ŒÕNãû×Qÿ7“ü“®s‘[®#Ûg?©žÖòŠò5ÃñÚg’î°~ó¼×IàØ“õ&Û!G_x)‡A×à uPý–ø.jÿ¼ïœo;®ç´=ÔæÔ®¼wÕ&:¤¤©dh”(<Ùå+ën­ëÀ®D¼½±tJ†¼aGXw~õÜâŠ.îKlKL$Yî·å'¼U1ªÆór³7R€Ukê<Å£é>ÿ­þt~4mM#‘õI÷ýoó£ôi£ji¨úO¿ë£MSHä}GÒ}ÿ[üèýhÚšG#ê>“ïúßçGèÓFÔÒ9QôŸÖÿ:?Fš6¦‘Èú¤ûþ·ùÑú4ѵ4ŽGÔ}'ßõ¿ÎѦ©¤r>£é>ÿ­þt~4mM#‘õI÷ýoó£ôi£ji¨úO¿ë£MSHä¿QôVÿ:?Fš6¦‘É>£é>ÿ­þt~4mM#‘õI÷ýoó£ôi£ji¹†Öô¡ì2ÔT÷fÕYÝ®„*aߪ2ø“¯­þ Èò\lž¿]OޝˆP»Í«â­œÓÜ'ˆµŠ,¸¹Ã”0u% שld¾M¬êLŸ ¾ Jq{ºüÖ†èÈé«É?ŽkÉÞmèµ—–%a»Q´ŠàFrÇ,,œeUO1Ë1·[Iå´{ ½[š³ØVëUõvÝÞzû•ÝTÖ1§z»í½ 6‰%ˆaŸ9<Ò\ ùI.¸dž!@ ¾"8|™*nQÇ´]nµàN)òWrÒ±˜4ì™Èý“ÐÇ9ðžuž¦<ÆÞu0:ør>°9¼I¨ï®)9 ™Ít¤Ÿ*!"42Tø”†Æ@]kÖ¼sâ}[º¸MÖŸjY&§¹]R‰éù¦h7 4¤w¤eæ‰@=¦ Ç)òÖ@¸1°LxˆõZ@/tÄøá’˜£{ªnºõ¦«¯iSnÓ·,jVt^nݸîâîÝLž°5 ½|ømüõ¬Ì\;¿-IõÁ·%Ê¡é-Õwy£ZT2$5Ö刡æufõå²dúˆÕòpžJÐ1Žj+q[7=vôºÅJµÏ½¤H/4ðF¼Géø¡< “&O)¸Ãj5†Ñì+°°S;²›Y©w}¾æ·ê«Ø¥ˆ©ª•÷5lJ­Þró£( 6äA>Z†‡ƒ&x‚¥Å„@Ž,7†ã¬µmúK}6á»A,¶ˆ%£ŽŠ÷B¢LJ™tš¡yål®Ýàå¥GÀ$ä5º1 ¸˜ì?e#ÇrÜ·KÓÜ®/o¬¥-ÆÍ q¨ £ØÕÀ@T$“%8Ô¨Fˆ"4E®·÷¿É7æÔ”ŒÕNãû×Qÿ7“ü“®s‘[®)Û_ÿ&{_þsCþF¸~!ûLò]ÖÞwšè\+¨’—ƒûbjx˹²Ñ©B| 2ŸÅ®š8Po€\Õ¿}Þ%LWßjípÓʶÙ&2¹VôufØF<ÁöŸ-h\[©P493ýP¨‹Jfµ]QbŒ´"` rô}‡=|€Õt£aS£;B#ß̱´[zøD¿µ–¥*?OA_¯ñh*N¢š=á-¿}­téN»zíy7 zˆ €¹>"sñyyõ ’r(Y0±ú¿£åG÷–òUƒaNyP)ë’N=ZiFš3´)ê~Z˜t’@Cd9Ö“*¶w_ñò~PèˆîîÒ~Pè‰{øù~yÑÜÇËóΈŽãþ>_žtDwñòüó¢#¸ÿ—çÇü|¿<èˆî?ãåùçDIÜ»IùC¢%î?ãåùçDGqÿ/Ï:" íJI7yZY9Þ×VC­˜FÎK7.›–, ã§…ºƒ®vßÕîVÏ=¯Ü(]é ¢¾`°1ÿa _­XÖFý¢%'¡Æ@óªŸ!¬êLù ^ FeçµZJ¡¾í«5d°Gd§,nC$h}ù¸!Ðùd¨Æp¿›G¤Vähω׽Wlô4Õ%ýéš ^•ll8©el‘â› c—®|qyœžƒÈ9lqü-\Aÿ©áùRQÌÛ¢(Þæ5Û¡c†M¤$Œžd8P­ÌO6JÆÝóðòêÐoùlU©çµmšÙS†ûG‰ä«`ëÄJwf$øYŠÔ"c\zçÏStÝvÛî| ›÷{„•ÕYÚ‰ïeh*‘wñŸNæ3Þ0f™CbŸ ¸ó\ñhAêú„u±æ}ñS’PÈ·j³ï\Ñ)†BÝæÑXU¾² 1*Å›ø.<°¾ Ö‘Ö8rTœªƒ•RÑYk…¢Yª3š¸¶L­à9Âü-YÃá³íŸÙU¦#Çjß¶-)üÈûr–9Ý9F<9’‘ˆ/0P¬VCŸ5lWàêXÞ¾Z»°t·?î”îªÞFâª+jFLTšÎŒr¥yO8f$d‚ÝŽ03%½c‡%Pz£kG (²Ü!PŒÐÄ{ƒ²»†`ZRyaæåaäIc–èÃפuNÚ¦zÃj²žµ¨mfÛk¼V8 ©E· “‘Àn¯í€ØÏTð¨2u‘˜³gªÐ&ví?e1j¢‘l3G=ªEGP$ŠMž‘u*É 7ׯsʱ‘â7„ hÑÕË—‡%™=lùû„Ú‚Ëwx–îÖK¬êµmK= VÑ‚áïA‘ŒL¬è óaI\«¾Z€×g‡¢±sr‘Å\¸s¶Ûî7+ ež(jV¢-´-é4h«7…б,¾À!q‘®‹+€qoÚ7,- ÷ë©,…ã$ä|›:ì\j©YÖ•òÜßü“®s’è¯"/?^¼5ì.—ÙDgŠœÄÿæÉ:ë²ÃûÞK’Ùû+Ó‹æ½…å%Ñ¢#DFˆ"4DhˆÑ¢#DFˆ°9"9²pFˆ…9tDº"4E\¸õ­Ÿ¯û£kv–í쯚œGã/ï´ø½°ë»HqrÁ¶vÍÉê"ªÚ•­·oP­$o$õO4MÊœü« G8(’7ý®©ä1lG?}–å9U5Ût †uâwzûÕ­!E׉¦7`7ú{ÖÊÑÄ^Ó´=ªé»4oÞßå½&¥¤½mj¦©†åQï|•©<Ž%bÙ.9XFʨ®ëŠ1ö9cª0NÏ•ÞÛ>€“¦dS·` S¯YÍA©bÄèdz·ðwݤJ[ÎçíǸ^×[MPÔmA|š9g”@ÒÓ¨ÊRI0Fy tb€Ëxj9bvaë䤾ÂL bFáæªªôú#êš@Ná²~‰ì{W·Ì×)l°v÷ÜÍX—¿xÒ#l¼,R]Å$•mJ'0÷}ÀŠ6ýœ €¾#ÀsZå´ÿªvfsÙïè©~Ç?´6ä2ÛïÃ5Æ»‡mž ðò»ˆ2{ WûìvÊøikhh}6–U2W½¼º¼À«¨— (ï sªëU6 ¤Æ÷oP´¤,¯xi¤îЮ6;lvÃõö¤ßÓ‡ôuÅÓ­}óÄú®¾‰eîÑ/ë×í…ÿ M÷ý:GQÓ­}óÄú§D²÷è—õìvÃÿ…ûþœ?£§Nµ÷ÏêËÜ¢AÛ_¶óíI¾ÿ§Oèêzu¯¾xŸTè–^àà=þ½ŽØð£ßÓ‡ôu:×ß©Ñ,½ÁÀz#õëöÂÿ…&ûþ?£¨éÖ¾ùâ}S¢Y{ƒ€ôKúö;aÿÂ}ÿNÑÓ§Zûç‰õN‰eîÑwÏs#´·h®(v¿¶í$q×tß­mk´ÒÚî×>ö•=‘Ê‘ð“™ñ×§1èzcÒøe¦½[D=ĽpüFÏBžZЀܾ›Øÿ|“ø­ùµôLí/ŸeNëeŠ4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4Dh‹]oî9’oͨ9)ªÇ÷®£þo'ù'\ç"·\S¶¨ÿÅÆÔÈÕPƒó5ÃñÚg’î°~ó¼Õ×g].v~íºË@ˆÏïUF“ä© ªœz€ëoL–ÙÚFÀ°¨®àv•ºï½wýŽÝOUhÚÿš¹V©mî„U^BœÄ’Ädú•Ž¥Õ*´H¡¬¦ãÂgMÅíêlô·Îß{Ê™ª´K4O$6Âós`1eæ`3Œ.3’ª+Ôº aV4iÉÂq]Å]ÓK 0‡ƒwê‰j`‰Þò0ai%ä (rüÇ«šMgˆê“ õ‹‹Ž›õûÙ'ìñ¹Á§¢I¤ ñÓÜÓU+ØŒ2²¯…F3ѽG—ÍÆ Æ˜x »¶tG<Îͪ±·ÚËqCKï,TèZ8Àª/•<£š‰ºyW8Qž]dÛ¹aÏé©jûÚç—×Z•“Þº}áÏ#Z–7ÛlŒ^J¸CbÎd2¡ÆÎØ ¸å'Wê‡êËz§X³^{‘WïÔú!±°ŽvçH¦¸T ^¹‚„·«×¡»qÙsö^¾Üù{+¨ìéÊæ†ÉÉtæ• zˆ›¿'ë@jL¿\Ïwðýdhnõ2ç·—žY ½/Ï—³åš°BÖ¤Ü3µ Úcnêl¶&æ0.Iy HÇ—…Á¶:Ó«çïÕgÝ|”‹#Û¶ý%]=“½Ø‚*‘p2®³ahãØõäs‘ð³×Ï« ˜çôZu¥ÄO/ªu4×^jåkLa¶œYª®‘ø R¾"½!P2zžš¹‰' ·ŽeQ$Ž{/ºÝ²ê¬Fù2ÑMb­ŽQß.<¸C$Ë—ã½Pàäêi–ÞÂ2ÚwmQP:î3žÁ¿b{U=´îºù¤œrÔ-]Z3ÕsÈ£•úŽª½Ž€êĶùË^ÕQ7|“pöÓµnËN¶au d†²¹£o †W^wǵz)8UêÜ9sSñŸ%]¾Ck–ŽÛ$ô¶™9võ ŒÔÛ++a›¢´DÆsÈßœý‘ÖN eÔJÕ³'<ΰþÔSiS´÷QÕÉ]k˜! X°ç¦R:s.YÀ0TëV]»«^݃‡°²}ëÚù{*?¾ÛÔòÞœÇañRÑîêne¤^fåVR18ÏÁEÃrÝ5N œµmöUúÆ3׳ØXXà ¤Ñâ{Ô·‹xeSWÑÒƒ ˘õ c•PIò'F€¬|@óGváàx.µÀÝž¿gµ²ÙSNÒÑÊÆ¢i'uEvfŒƒ:‡Á_ s€Î»¬®i§WÝqZZàù>ø'õ_¸æþIÿÉÐä¤f¼ˆ&ƒô„óû úuâBõ×LìŸ$mÅ^T‘I÷²^ŠÀú×]–ßò\–ÏÙ^Q‚uì/)(Ñ¢#DFˆ"4D-"4DhŠ+vRnZë,´ÛNð”Ä©‚ªja*.$>`ƒëÈÕ[ 0UØXÖZ=¿Ç×·OCWÄ[BÌh9!­§²ñj2¤ÈU˜¡P9€\uéñë–¨‚áÁmzÍ3tñ[n–.8-T’Y7í³º³wu¶’Æ"Bª#*X31lž¸\j\ÛLàáÁ@už1iâ­;r;äZx·5\UËô© ˆ¤lþ²ªzì®¶eë¢ökݼnä¤5eThйq®œÆ`îÒݽ•æÝéînpëvqKtqjÛÆÞ%mÛŽï¸ »Ô;gr-2¸‰cU*‰—UUè¶ ±æ:óß`cê9áî²=s-Ïe0ÂÆ˜Û>ª-=Ë]r'i®2ïg½Þ-êXµ'Ü )’ŸÁ:§Ëþã¶f2Ù–[•þbþãvä}y¨-ëî2ösâM5¸©ÄmÁOm¡4vê{Ýö*¨é)Î3 i,,¨‡•r B(9  >YOÔvÇ¢Ÿ™T“Ôn;ªÆÉî/vjÛ5‘ÜvÏ÷õº¦'g†¦‚ëO ‘³++d€%]#Ì1Ìêƒá4A÷O—¢·ÍkçêœÓû\¥¡ÛöÊn3q9)v˜#kR®åA˜hØR'uŠl£2}o—ÅãW? aΣ¸EAñôÛÀú¨¹}Ä.ÉÕm¶t»»yµ¢I^W´µm!¦iÌ^ÈYÑUY±–UPI WåT¦o»EošUŽÃqÜ}Sí™î4vvá¾Þ¸mqWˆÖ MÝwkU’ù --j„±E ¤ƒñáðù5o–2ê;ãÑWæ/èÜ7Ua­÷0ömÅdZîÔüi”MN´óß,yâC•Cáò¨ü'íŽgå­?ê;ˆôAñôÛÀú¦Öïr»†¶‹„w[_h¾.SUÅ xª¢Ý H¤+ <ÝÞN™zŸ‚ÄyT|.˜2éòôR~'Pˆ,lxTî—ÜÇÙÔ"œQö¤ã<~‰©M˽ÖÖC™<žLzœç¯Q[å­ÿqÜG¢˜¼ÿ¦ÞÕ1‡ÜŸá4A?h+¤tª•u¨XB£Æ¡w„Är: cì¾LÀÓåT²¾î^Šß3«Æóõ[`÷+xgICïe/hÞ.EOéòWwîà©é2ssÍÊ#Ç;s1fóbìOV$Û匈Ò;ˆôQó*Æð>«p÷/¶(¨Çiî2w-oZÞ‡”Ò/Áƒ—“ƒí‘:|±‘Gqœ”|Åó:6íÈú¨ë—¹Á[Õ$¶ûϸŸYîx*·R$Þ™¹™Z"÷¬Òdý›øDTü&‰}ܽÇÅ+ƒÏÕFÿac³÷{¾¤i¿ÐjŸ&³w/Eo›Ú;­çêì,vcþï·Ïô7ú >Mfï^‰ó{Gu¼ýQý…ŽÌ_Ýîùþ’¦ÿA§É¬ÝãËÑ>ohî·Ÿª?°±Ù‹=wöùþ‘¦ÿA§É¬ÝãËÑ>ohî·Ÿª?°±Ù‹û½ß?ÒTßè4ù5›¼yz'ÍíÖóõGö;1w»çúJ›ýŸ&³w/Dù½£ºÞ~¨þÂÇf/î÷|ÿIS ÓäÖnñåèŸ7´w[ÏÕÜXìÅëßÛçúF›ýŸ&³w/Dù½£ºÞ~¨>âÇf<ôßÛçúF›ýŸ&³w/Dù½£ºÞ~¨þÂÇf?îû|ÿHÓ ÓäÖnñåèŸ7´w[ÏÕØXìÅýÞïŸé*oô|šÍÞ<½æöŽëyú«ÇgOsc‚]™x«OÅ݉»7EeÊšÛSD]« x s÷|äªD­Ì;µÁÏLž‡:è³|:–¥ö’|cÑsÚ-õ­4î8á>«Òv?ß$þ+~mz,í.öTî¶X£DFˆ¢#DFˆ"4D-"4Dhˆ>Z"4DhˆÑ¢#DZ«qËü›~mAÉHÍUê!ôŠW§-ŽxÙ3ìÊ‘ŸëÖ uMã©8¿·­v «ü´ k– Xi–C!p @þ­a^€®ÀÒbÔ+.eX¶†ÛM¥µíûf·h(£§YÝB³…\s<³ìεcn04jY½×Þ]µI*°êÍŸ—VUYrÿüº"Å!ä9ç:"ÏãùtD˜øÏË¢,^væç#DJªÀçŸ#DX¼íÌ_ú´Džˆ>Üüš"=}¹ù4Dz ûsòhˆôAöçäÑèƒíÏÉ¢#ÑÛŸ“DG¢·?&ˆƒJÙÿVˆDn~Mˆ>Üüš"cLíÐ{tDí$'©r–ˆ·]0䜌zçéÑ´nX»#e€æbN<²~-N*0HbïóÆX å2›P¥*FéŠÙf%¹Tå›Ú}§ãÔâ£$ÎNsOŸáÔ)Abˆ‘Œu9é¢ HÊ,¤rpÞgI)bê’¯$˜aëVèˆdI%8 ëžW óÁóÑK•UˆÈVˆ”äù±=1ç¢$ê €ÄgÏÑ峞sœç9Ñ1-Žf'#=p}º"RÎz4Œ@õÓI)b£”´ŠØ$ÌVË'פ¤%*Á.ˆšûÍjþÔÒÿ7_ÑÔ@ئNÕ=ºŠ‘ûÚj8bb1ÍJ§Ì€¦ÉD“šqÍ/Ýç§I)ÒýÑþqút’Í/Ýç§I)ÒýÑþqút’Í/Ýç§I)ÒýÑþqút’Îÿnÿ<ý:IHæ—îóÓ¤”€Ži~èÿ8ý:IHæ—îóÓ¤”€Ži~èÿ8ý:IHæ—îóÓ¤”€Ži~èÿ8ý:IHæ—îóÓ¤”€Žòoº¿Ï?N’R9¥û£üãôé% ;çöÇùÇI)'<ž¹X„~$¤dy–Éõ’tD¹Ñ¢##Ú4Dd{FˆŒhÑ‘í"2=£DFG´hˆÈöÑ¢##Ú4Dd{FˆŒhÑ‘í"2=£DFG´hˆÈöÑ¢##Ú4Dd{FˆŒhÑ>Z"23Œè‰2¾ßëÑä{FˆŒhÑ‘í"@Ø9WÁöƒ¢%ç»7Î?N’R9ßîÍóÓ¤”€Žwû³|ãôé% #þìß8ý:IH 9äõJÇü#ôé% %æ—îóÓ¤”€Ži~èÿ8ý:IHæ—îóÓ¤”€ŽwûwùçéÒJ@G4¿tœ~$¤sK÷GùÇéÒJ@G4¿tœ~$¤s¿Û¿Ï?N’R9¥û£üãôé% #š_º?Î?N’RɃõÇùçéÒJ@G4¿tœ~$¤s¿Û¿Ï?N’R9ßíß矧I)ߎ’R4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4Dd{Fˆ“+íþ½.G´hˆÈöS.3ÞIx¬¹Û÷ᆎªg”SÔVÔF)ùÈæU°AÊ~ œø|ZÄÑ©xì<Ö¢«.€[’ÆýbÝ"ÛjøÇn &‰ë$Ž×.¹Fsdç8`NŽkÆÀF¹‡’‹f׸CJ÷—ã-$Ô5ÃI w–HUºªæ|33âÈl0Îp4k Mü=ïG<.cïrqúœPC2^훾ۊH¹iä2H…§äÙ‘ûòŒy˜1 ‡ êë: 1{óQ¥9}ù*òl­é_¹"®Žï·Ì´ ºul'#Ī0Áå`T²åyúäZ:…ó# ë[ì ˆ8î['Ù;ÆžŽ;em»m<SÒ:‹ÔªÊ]€\?82 Ýp ’1Ë¦Ž¤AŠ# Or²ïMË=þŽÃQ·l1Å¥\Py×õ(ƒŠº®žßmÛ4&¦®-$†^¡:øÐFîYz c¡ÐV“s”Ñ@’y­x›Zñ Ò‹iªGïíB½÷Üò!êþ^=F˜ÆCá4Buðü­µûÒ÷m«¨¡¸Ï´h§£¦ZšÈj¯l™VG1ÊŒÊÀ1À%HƤÔp0`y¨ i$ù'´u<@¸R¥um™ •y¡– ¥u`|ˆ`¸#ã°5H‘ ˆ2µ\.ûÖÏ5496¼/[P ¤IꥌÍ1V`‰•<ÍʬyG\)>£¨.¨Ø˜Å¦é‰ÁoŠ¿ˆs÷;zÃQÈ庺:ᇘ9ˆàüG¨ÔÍ]ƒŠˆ¥´¦Sï­ÁKWWAS·öêÏo'¸SСé¢rÁÔÂ9U¹ Ø•°zWHàH†ÿ¶¤'ß”æ“y_jÞXéøs5CA/w)¢¹ÑÈð VÌŠAÁ‚=º°¨ã“y…Ë‘[~®£„ˆëöö Á*¯øQ³ø´Òmià£G±ÃŠQÄÎ)+Ytg8>øÑÉN3ì̈ üºi©k1É4Uu/nºXnÉÞÚëé*WÛO"¿ù$ë@Zì•pÍ;î ûŠ|Ñ©€¢J;ˆ>âŸ4i$£¸ƒî)óFJ;ˆ>âŸ4i$¨kú*W*ª€;¡Ð zγ~kFdX#èØ¼jq!êWâ³2U~iïwOœw)ò Z¬”rS}É>A¤’Žî›îIò $”rSc=Ú|ƒH %/uÜSä@I)9)¾äŸ ÒIKÝA÷ùJNJo¹'È4€’P#§>P§Í@I*ò¡..ª«Ð‹Y?´µge6ÕU‘¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4D1øtEdX"#ö”ùƒ[ÀXIJ`‡Õ |Ý $”½ÄqOš4€’QÜA÷ù£H %@ÔQQÜ©},rÅ ãš0ÊÝr2 àû³€D¤pPÛ’Ï`±ÓD)xe Ú&ÂJQÂÏ¢Sã0rŒžžß!ª=­hÁ²®Ç9ǵ •Æõk®Û3SÏÃû•4k^œô0ÒÓ3L©-ʯ!ÀGÏP3øuBæ–EÓžå`×Í憎‹olø!–ÏrÛWˆé&®§¸$•Tô‹<ˆÊT/*ù(™ˆ>Ѻj—X0 ÆR½çœA–µ¶KfÏkÕE¢ï?¾ ²×--4‘¢±G)Ï#VæÏ!ö LS¼D|Kîƒ#†ÖÚ»2Šò×yí÷ŠƒKJ%ïP@cE\¯*´dœò€H\uÔ1”æœ#ßP¶0òO©7.ѹTEPxYVµT*BóZàW^q€Q¹/Go"±Ÿ-X>™þn ?–{ʸÚï´u”1UN¾ŒÒ½ÅK(u|‘Ê}Yϰt5à…ƒšA[Òék˜ÉÝ\©XÆåd :žV ‚­ì9éƒëÔÞiÖ¢ë‚Ê–ík¹;ÇEp§™t†pÅAòÈ\ã8:àì”–æ’ë‘@ø\u_WÇø¡Ý•-í&v`­r]A[¡õjŒí+¿²§;ˆ>â¿4kX )){ˆ>âŸ4i$£¸ƒî)óFJ;ˆ>âŸ4i$£¸ƒî)óFJ;ˆ>âŸ4i$£¸ƒî)óFJ;ˆ>âŸ4i$£¸ƒî)óFJN⸧Í@I){ˆ>âŸ4i$£¸ƒî)óFJ;ˆ>âŸ4i$ªªUoKåþëGd¸Ú¨é­õi-E­æw&$rÅ„¨WÆ1êóÖ3QÎ @ß•© kA3ŽôçÞn$ÿu?è?훵¶Ž•©l<÷›‰?ÝEúOûF—km?)z–ÃÇðy¸“ýÔXÿ dÿ´iv¶ÑÃò—©l< £¸8£r°o•á Ýu÷ÓAé²[í{Byž(y¹C1W'È’8Ʊ}bÚš9“žò¶m êzH–'ð¬|8Ýû¢Z‘_QIS £¦ª¤¨‚ÞôÌRPࣣ»ÊÑŸXöc¦µ¢òùÚ¡eU™oÖ­ÄqOš5´””Ä?q_š4€’R÷}Å>hÒIGqÜSæ $”Ä?qOš4€’QÜC÷ù£H %2¿EPåbP{ÁÔª¼ ªÌ&òg`ýñÿÿ›UfjÏÉNkU’®ßo›Ž¶ôÛWhEODP¤µµõªÍ2¹`¡QH2¹åcËÌ ’N@ÖNsË®µhÖ´6ó–ðæžµ;Íݸ.—‰ËG=Ousä"‡•qêÃstó'ÏQ¢´I÷¹N”ŽÈKZö¾Û²–{(_.â™ó ëF±È*¹Ù”ÿVU^XÞÝ€x‡¹n[U³ŽqÒX.7ÚÛ³SÍfŽj™êjn”•ë$Ò89zaO,P²¥$dG.|ªŸ¨ûÀ8LåŽ`¯R¾›.’ÒHžBeh÷9·}5\47'ÚZŒSY¡«¹ÓY+ŒÞöݪî+"º¸HÚ¨Ô÷u”ËݪP†ü=àĈð;IÃñÅñœ`ψÖÇ Ø&Ô¾çÅÿbÙhêéøÉAa§ÛÕá¶åQWdÛÒ”É5 O1ÅU<¾ŽÄ¥_xc2€’ˆÃÞÖƒx׎N>y}l-ìsˆºLøcÀaåš¼ïÎÎû§ˆF¼ïkmþß%Fæ³nKʦA5-wsA- PNªCr!ÔBêX ]P†Ö¥™õ*¹Àˆ%¤÷ 6ZYN›Zf@ 3ö*³{ìIÚF~É`´ö¶©†÷Q% V_ªi*S»‚ 'Fjx ¨Žiš¨¬ìê…]£dƒ¥M†Ði‘¤ÄÆÑæ¬-´@txc°Ì¨»cž*qºÁ-÷xñÚ_A¨ÜµvƳnÙÌñŠŠáOX•)2ú<'‰U`å ˆQ‹œÅ–ÕÅãS $bNØ9ïÕ«5«í”h›¡˜ÄÙ#-Úõ©êþ˼kÙ´uuòö˜·­eѧ‚ßQ|Jµ¦¦¸Tò*L"†¦!RòQ‘Ûȯ!Vææ×¡Ö¦eÕ3ñŸ<ÎõŸK£SÓËÃ!å«rw±{ ošïíÄ®2‹íVöÙñXVîôNóSGµ­9•ØÊˆµj¡Iž¾.–¥ðú­¤ö=óxDñõU«n¤ê¬s¦c‡¢oqìWÇ*Ë컪ÃÚ!vÕÆït¸×^ÍŽ’qÉQI4fZ@­$b˜M/95 Xè6‹×´I' ŒDd§§YÃnÜÄàe[û9öaâ ·Jn~!qží¹½È(¨i'¹Õ˜ •ª%’YJ<…dÊ´j¼êY†é­’ÇVƒï=åØFeejµÓ¬ØcqÜ»k(aÊà ú޽À¢n»gÞØ=ËlÑI 9ú:«©ö‡\0?:£©Sva\T{r*>My´÷fï*Úl”W5tíüï|jãð-SFæöÇê­¤k»C† öÔÜ•wŸJ¶ÝíéKq·Ê±ÖC½äg™y•Ѱ +/Q9tɳ] æ^ÀØ#"¦u¢¢4E ¸w¯òCódüÖ¬É9° аöÈ6¬Ì•_š†¼l]Ñq¸=]®ôQµCH´ôðS•U*v FO(ÆG¯$õÕIäÈyÛQ€Ah)½~ÀÞÖéEÅkëÔF$hÊ­*´¤ŽˆIˆ¨Ž‡9Πҩ8òôR*2qhæ M—ŽQ«{ãpšUPæ'ºRÌÊC!aʯFVÀ<ß²»i|G¢ÒõžÕ3¥Û LPCUy¹†ˆ;…Ú‰™Éª8ôp¥C0œŸ-T2Õ´ñŠÅömƒõ[ÞÃÇZY³oº]'F…×5Z1ÊJà0’3•9À#¨a©»ixE¬ç08TÞK7h8aVŽ{”¯Ü´/½Ñ*,KÍÜd¿™ÆŒyuÔ]µoâ=Þ³N®ÕHm=ƒÅêúHݪZ§†[Öx’8¸ß¸bdf-$tÔ™|@`b#¡>z¹£S¾yz*i©÷?U3³6ÅçlÁg99ù5¥69ƒ³¨ö¿&Â/?¾oüEüÚ«ûJÌ즺ª²4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ‘½_‡DV„ø#] Gî=Í`ÚV¹/›–ñOAG*ÉUU DRÇ =I|dj¯{XÙq€¬Ö9*£¸xÓk{„vÝ‹ºöd’}i…nàXÝg.…P*‚[š>ôä†U ’0} L0ƒæ·mðx(ãwZj…ËH¤¦mñÊÑ£01Æ/2NUpHÆF²é¿íÿÛð´èô§ùpWº£^”ö£Ì0È&RUˆêTã¨Èé‘åœàùk§0\øŠª~ªUó•ŠëcÅ4€Ç:Åm¬v. 0Ð(ä*ÊKž‹†o=a¦'1‡ô[h@Èóª½%~ßKµ]êáÂ}»-Dn‹?uA”»+ó?Z^ªQåU¹Û¡ø#YKC‰,ýë ž^ªí·6æËÝÛ>Ü.[*ÜcȆ{q Œ€e@À($@ó=uÒÆR©LKGÎ÷ÔcÌ8¨}ÉfáýƒrÑZ`íîᨙä/n&nA”åR6R:Œçùc®om&< ¡jÇTs ¼TeºñdÜó¥¶õÃÛO U-54QIn¨ž'§Râ2Ò=:…!˜VÈĆë@æ¼ÁhŒ5Eb×0HqŸê›ÓG²J:GáNÛ¨®·U,6hií³D°C=ØÞŸ”2¿8PQЩêuG€¸$e‡áOêcÖ0s÷+7O •í±ÃÃ;jÓVkZ#mª`™ËÍÌȰ2««©bY•—%ŽCôpê¹ú),­[v¯U'ßkC}’×}ض؞X"–ì)¬ÈÓK i9‘Ö.YUY›™ˆ±8ÕØhßôT-yl‡ØþWA³í}·`~öͷ詺XËRÓªeAÈ^ƒË$ŸÇ®¶±ÈBåsÞìÊqvëBãx—Èüz—öT3´™Ù|ãü ùµ›;KGöTö¶X£DFˆ"4DhˆÑ¢#DFˆ" Ü·]Çeùïöý½Qth÷-sSS#3¬2%2I(TVfŒÎ@„k˜¼Ó¼à'ö]!‚¥Ö“º®Þ»SÝ-5•”ð yUÏUÒÃOD¥ªbŠT*3•,dB ŒÍ×ÂN²u´´‘£:Ö±‡tFQöŸã%æVÛ6~Ì÷TÜ¥H¦­­Ó­#Lc¼…r„H\‹'Õ²Ðor…sd Þ±¨#îîžÖ·]Ÿ%$îÏÛº6­©Š Nîq$’É#ìŽ2«•¹ŠàsYöãN/S8¨eˆT˜¨0U+Ïq]ûH~©6.ïûEÛÑ¡°\.qÑRÏBiˇ( ÊŒÍÌP…õàžºÀ¹îµßkS„-€cl·ö‘˜Êì|;Ûñí]Á]¶ã¬’¡h­wòª†ƒ9.B€$“€05ßI·[°ºáªëíÚOÙ\µºÁ"4DhˆÑ¢&;‡÷þPj쫳´˜Ø?|À?æÕYš³òSšÕd ·Í[­Á7¢ë=²é&$­§„‘ç=ܨ|2(' $ò‘“¬ßNñ¼ £j]H›Çvâ5§•.Ûb–êƒáTÚ*„NG¬˜f Àºû5[Õ[˜ŸϪ˜¤ìŒx­‡‰V a‹ÕÎÚÃázu²UQþ‚‡ñ1Ôé˜3‘äš'±óO(·ÆÍ¹°ŠƒuÛäsö Xœß79þ­XT¦r*¦›ÆaIC4/4+¯µýZ¾j™,Ï–ˆ¨Ý¥8_rãogýíÁ«MM¶ÙµkíÍy¡5T‘ˆ.ya ¦T^|”scβ¬ÃR“š5…¥ŠuCŽ¥Ä÷o`î&îÊ»…]ÃŽSµ5]U ðíæ­­[l F-1Ä“(…{Ê)ܲoÙGÏ”çΩðúÏ=¿,cô8ï^‹-ôYü<ðœgÔpO({q‚¾å:ïîÒ·Ûµ¶{¥}UE$WJÊa:MOS°ŽEåXÌÑPÅS« IÔ‹rãz¡ γ°ûòPmÔ@i€DlÚ=ù¨ûa®;m8í›whö‰[VÝ´mJ;55†Ýd)P%&VWïØ¨f†¡{ȹR r™hè‘R¯z÷b§§YÌ’É2N¬9}pN÷?dî; fï‚£Š5™wKRSZ­•²,6%tò,è&g i7xÜ}qÉPÞ/¡ö+M׋ׯDnÄcŽÍZÔ²Ùg–unÝ™ßà ºõ/NôQÔþ3¯]y)tEªzÊ:5æ««Š1ë28ŸPH©œ”M_v- wsîÚßiR»|ÕÉÕ ZcZ°¥PêZ?Tj±þÁm«ÍÄŸ&ŠÜÑ!öxæä|c:(=O—ª=îZÙ¸›}ð¬T6Íùý.§Âćã%Ç_-Gë;w3éõSúMßÈ)=·¶¨6Í,Q<ÒI4¦Zªª™9æžB,íë80Wc ŽyyÅIêê¨Ñ.áýÞ¿ÉÎu“óZ³$ïnô¢aÿ0Õ™’«óOõuDh‹MUU5;TUÔ$Q¯Ây*ñ“Ðj 5 pTûææÚû†â–û•®á(§‘‘j)ªdžèX2J &I à uƒÞǘ#ß³Xö‰DÕÍÃé!¦©¸mû¨å©•#-wñ®/1e©ê¬•êNè:Pè°xþVƒKˆpü+VØß6[ä­C½+E/sVKgaœªª»1+ŒpFu³*µØ,MÍÅX²=£Z¬Ñ¢#DP7Ÿß7þ"þmbþÒÙ”Ý)ªf^hiäaíU$V¢ S ,½á÷”ß0ýAIô*ï¼çü‘ú4‚’èUßyÏù#ôi$#Ñ+~ò›òMôi$#ÐnyMóѤ“Ðëþò›ògèÒ HCRV/¤gÛÒ HH´•„ehæ?û6ú4‚’èuŸyKù3ôi$,…g_زþLýAI C¬ûÊ_ÉŸ£H)!‡Y÷¤Ÿ3ýZAI }³8ô9&~ ¤„†š¬yÒIù3ôi$#Ñ*þõ“æi$#Ѫ³G“æi$%ôß¼¥ùŸêÒ HIèuŸzIó?Õ¤C¬ûÊ_ÉŸ£H)!/ Öýå/ÌÿVRBOC¬ûÊ_ÉŸ£H)!/£Uýí'Ì:AI §©rTS¹#ÌÎt‚’B’±†E¿’o£H)!/¡W}ç?äѤ“Ðëþò›ògèÒ HKè•¿yMù&ú4‚’è•¿yMù&ú4‚’èUßyÏù#ôi$$j:À2Ôr€<ÉŒýAI j«70Hù×BçUjíý±nToMr§«ž<ziì• œµ1Þ£ë>½bjÓ"ЭE:€Èú„Á!à ªJm›D*iITtÛŒ²GâRy~¶˜S‘ìóÕbÏ2É_õâ'šÆ[kßÚnsNΦi6ÙçCˆù@‘õj"Ìq»É&Ð0½ÍX!‘B¨õŒƒðüzÔ,Êueò ·§_ëRªÛãrÝh/”¶k-ðÐ<’F,Ö9j£fryAtaݯƒ›¦X`çXU{ƒÀ<¥mM€´’'Îj-ó>ؽ5·{o*‰åe%iãÚóF‹€0Ýâs©Èêo/<šT±Ð÷rRißl°sN.»Ç…—ªwª¸¬Ì”r´vª‰0¯Õâl&pÝßQíQåÓ2ê”\$ã«" 2³rÃÌ(û–ÖØÛ“hÃsJ¥ZX̶êÊËs<°(e›Â„ä(`)àצhYIìŸ{UÃê1ñ÷Qû¢ŸnÔZ/q\wr*É-7¾ëÜjÜÌÁ9[›¡û.@ÀΪðÂ×K¶N ̼ xb£·.Êáõª9«êwu ¾ŠØûªtÚËáv^eRUyݹd±<¤uÆÕ_N“q½JÌ©UØDù«M}ß…–{=Ú¾Ó+WÆó¼u‘Y*Nt<’9(‡—<½3Ñ€Êä ëbê ‘X†Öp"pñ ÝMz žª:ù¥¤ÄqΙPHÉó¬n· Ó¶]Ã-äŸ1çøGÇ©eC;I“÷Î>¾¦üÚÍ¥£û*{[,Q¢#DFˆ"4DhˆÑ¢#DFˆU6ÅâÑA¹w,5×Zh®èBK:©Ç£C׃¬懺N¿°[=®,l _u;õM·?·Ô_ÎÓéÖ·Ùµgqûw>Ûwú/çiôé}›Rãö#ê›no¨¿§Ó¥ömKتm¹ý¾¢þvŸN—Ùµ.?b‡ÛuÔW ßf¡«Šd4@´R†ý{¦A8:£5]¾êïRlïVmj²Fˆ"4Dh‰ŽáýÀ?”£û*ìí&6ß!×ì§Éª³5gä§5ªÉ"4D˜ÿë:"i_`±ÝW’éd¤©ÌTS+ë©k]˜VpȨ¹¸YÃÙO2m*8Oü–>çü‚º¦†–Åm5]© öÔ ®t€z©o5?©ôгT2§JýqÀ pò•š Ó¸ã7ÉŸúœ‘¦ˆm.£×¨"B`¨³´êê)ê(î’¾ª:ˆÊ4sˆJ¨'9»Æ}]sÓÕªhɯ|H€˜~¤öd¸%Æž¶j~R~±OIJ©Õq÷—×-S@ÙŸOEm3¢=}V«íTCÜæ©åUOEHrUÉå„d9O«Ôp@YÚ5ý=šî:¾¾«||0¢¦ªŽºžç2TÅ]é+T´”¼ç# w9+ñü>§Å×S¡Ìý=iŒD}}Sض½âÕª]ëvuIËšiL6RÙä8Œ7(Pqë:µÇ7%[í".…9p€IŒã®5¢Íe¢(Ïï›ÿ6±ilÎÊâ¸wNçÚ\+°Öm}Ç_mš]ÂRI­õ º÷7)(FF@éñkƒâ{(¶éŒu.Ûúμ' ~+Ì?«¿¾®äþœ¨ý=y:zýãįWCGº8$,ª~2}š•€›çŠ‘N‰1ppQ?«?¾žåóþÞOúz¦ž¿|ñVÐÑîŽ V.-}]Éý9Qúzië÷š=ÑÁKl~.ñJºö6õÈۆh®ª)‹´ÌÔò1ÊL¾,å[Àt(N|†¯N½bè.8áš«èÑ Ñ†äÊN*qQ$1?w r;/4w¹¹N n ã¡õŽº5nñâ§CGº8#õTâ÷ÎÜÓSþ–šjÝãÄ©ÐÑîŽSâ‘Ïþ3wôÜÿ¥¦–·xñ)¡£ÝúªqKûæn?éÉ¿KM-~ñâSCGº8#õSâ÷ÏÜŸÓs~–šZÝãÅ44{£‚ø¤:~©ÛŒùnoÒÓK[¼x”ÐÑîŽ Ç±®üVÞ4ÕkÆmÇN)%ÆyyOvïÏ!;¸€B¥úᘠkJn¬ðz矸YTmd ƒ€SÖ~5ÑÑÖÍ÷ÓÓÅ­ö•ž5ï)Ág ‰@ÍDC©+e^!Hà5}V´*T5F'ØR7:>Ú¯‘mÛ’É mLTC öèמ4Ï;d¯.ÌõÎ:êîë¤ ðU»›x MÊnZ¨Åutj8™9‘ÄeȆUŸ :žšƒÑš$Ç%#¤8Àžkm¿~pwoÝbÛv½Éb¢ž¶›Ò¡‚šXãYc9ò¸Säq×8Ô5"­¦è JƒN»…â …)/6$r˜fÞV¤uEvG¸FVÇ+@y—øCÛ«iiw‚¦Ž¦ÂžY¯ö-ÅJköýæ–ºåLÔ• "†c*HÏÅ«5Íx–™P湦!=Õ•Q¢#DFˆ˜îÜùAþ}Qý•vv“ïøüÚ«3V~JsZ¬‘¢#DFˆ"4DhˆÑ[ù+¾Ì[óchý—-¨~ðVl±Fˆ"4DhˆÑ¢#DFˆBîßþH~s¬ŸšÕ™-ÖpÕ(là³g®9}Z³;*¯í*5Ãní µE;UO¼]êâˆ+Czš5U7$€¿eПi:æ-¦ìïq]Õ”pRVã¶6lU^óøª‘å@EukÔ³àò©ŒI!<½rqŒô''Wc™Nb~ª¯|L)Ù7åS5JÙ®$/ h„ ÏÌÄŽNRÙ,1Õ|ÆGCêÐÕ0Vz#9­Rq…9¹lf@,´ƒ|ŽKžcã ãËQ¦ hŽÐ±Ÿ‰4S ¹lnc))Å:w„ð±ÏðNp ó>Zi›Nal‹ˆ–çdYlwHÙÝÕ–ZuSUÉfñøTõúÈ#Õ©Ó …4GhM¨ø±i®©Ë`»Æ0L“KJª‘ެܸQÔu=uQ]¤Ä&‹€™ *ž)Ûi`É·.ä–pPS'2Un ¸ÆCtöàêM`ENa<³ï»}òà-ôvêÁõ°æv{° ƒ‚U‰g”ôèÀYµCŒªêe¢IEï÷ÒOâ¯æÕ_ÚVgeT8ÇÀk_vuÜ»n»rPÜZ®9¨âGfnGNRŒ1=:ôÖ5ìÂÓL4˜‚µ£i6j„2¹Çö6öw÷Ò¼ÿ2ƒè×/Ê©÷Šêù£ûƒšOìmììÿåJóçÓöFŸ*§Þ)óG÷4¿ØÞÙøTææÏÁÿÆ¥ç©$þƒ×çêÓåTûÇ’|ÑýÁÍ'ö6öq=x§yÏüÊ£Qòª}âŸ4psKý½ýô¯?Ì ú4ùU>ñOš?¸9­öÏsÿhíqSYOÄk³M-9†9…<Ð8f^—ÃÍê±ÔçR>M’oâO| ¡4sëfFÎO¯^2 >>Xðê>YL#À)¨ˆæ—û[<~¨÷Ì…Éý…OåòiòÆwŸ2©Ý_sóg´Šoydæ°©ü¾nŸ,gxòO™TîŽh_sãfº¨^#_1'¯Ð©úcüš|±ãÀ'ÌŸÝÒsçgÕùÕˆ°iüþ?Ÿ,gxð ó*ÑÍ*ûžÛ1¤1/ï%òz JÃöº|±“Ú<“æu#²9¬©»ízÕ6î*ßéÜÄU¤Ž²°ÁS€2èG–Ÿ-`Ä<òQóœÚ9¤nÀFWýTïëÐ*°‚@ Ÿé§Ë?™ä§æO?Ä!ýÏí6 ¼R¾0róS@p=ƒ# ÓåŒïžIó*ÑÍb¾çÎÌ2wKÄ»Ùnb:QÓùðtùc'´y'ÌêwG4§ÜùÙ8%¸Ÿ{.OìZ//µÓåŒïIó:ÑÍÜöÙ`ýS¯^`~å§õÿƒ§ËÞ<“æu;£šOì|l 8Ÿ{ñ ÓSyüÍ>XÎùäŸ3©ÝÑý”p¿ª}ë¨'÷5?—ÍÓåŒïIó:ÑÍÜùÙ dq:ôyFiiúçÛáÓå”ûÇ’|ʧtsO ì ´žË.Þ‹ˆ·eY*VZÉ’–Òò­§—EV,Øõ±Éò·ËvíãÉWæO½zèæ™ÿcog•âç§–h ?æÕ~UO¼U¾hþàæ²æöÑFï¯@ãZ8ùq§Ê©÷Š|ÑýÑÍeýŽ=©€¿ªÍó IÑ`èORGN‡Sò¦wÊš?¸c‡jwÝÿê³|çÎyÅ,ÙöçÓåLï”ù£ûƒšY=ÎM¯,}Üœ[¾²`G¦„Œ!Œz½Z|©‡ù”ù£ûƒšÇû{;ûé^™Aôj>UO¼TüÑýÁÍXxQ؃lðŸÛøC¿nu³[™ÌTõ°ª74l„£>LOáÖ´~Ê5CÉ…•oˆ:µ2ÂÐ%t¯Wãÿ>ºW:´…É×BçHÀ8ÁS×âÑ÷`Ón*=ÊïRê äNæ º1Ʋu ó‰Z6©hÀ&µ#Úr…Ó‡ Y9)!=æ3Ôó!ÁÇN˜ Ðaö´ïRÌYB«ã € þ¼~-XbªpUºþî V:{}þ–8i”ŠA5$ÅáÃ3FK$«ÍÊJ‚­Ñ•qÓ'Y/ȨªÍahºprJø")z‚)¦f»ÈÉPÉTüÁ˜F;ðaRYðªN9‡˜Ô:ÎHÏÇ?\‹@/ ½1Bp®ëK¸iêm÷ÈR–˜Á'q,ÕMÞ:1Ü‚`«áä\ò·1aêÓ@C„¯ªii‘ôôN®ü4­»ÓŠ ‹½3RET’QDÔs†!â*XM™¾9cÏRê%Â'{Õ[T4Ìcïr—ƒu•>—kO}¤+FÌ)Ùhê%BK Ƶ™²Ç,[$«Ñɦ9xú«iÀyt}=ÑÀë wi÷ 1Ñ%\ñó™^ŽF+R#&Í€:.<ˆ^nƒSÑ›zö¿¿é»wÜpRöm¥¹íÖXíu{ÕGsʰxQ0@@› z²}CÏ×vÓ{[¹,Üö9ÓuIR[ëSpËWTùŠT‚”óeŸ$3»z$*ü}xÕÀ7䪒.B•bâ—ügZ,Ók±cm9lžeû,úõGöUÙÚL쿾qþüÚ£;Jïì©íl±Fˆ"4DhˆÑ¢#DFˆ"4DhˆÑ6ígÜ2QRnJ8i®4-Š›=l $O#°%(Ä+•ç#‡)à ã”òZšø©uYœÙ-8­>ÛüµVm»}/cku4G#UÊP>Gsá*<¥ˆë,`j̳´°_Ä…WWpy,À-Ñö~àð¨Z¶ØÔnñ³”ÉnUæ#n€àøcQ×$uëÔêE–‡uGI¯y8¤à— (枦=™DÓT9yf• 9%JŸê<$Ç©z#ø¨6ŠÇZŽ—³O*Ú¾;†ÎJ˜®AÔ³T9‰#„«*"†ªYC0û&lê½ÎfFen—\D•¯mm µ³éd¢Ûhh¢’NwŽÀ-Ê? ñkf1”Ä4BÅï{̸ʓÕÕQ¢#DFˆ˜îúOº®¨þÊ»;I‡>øÿ€ͪ³5gä§5ªÉ"4DhˆÑ¢#DPSñjÓVÔ[Þ®¥¦¥—ºœEmž@¯…%y•' ¾G׬ÍVb´žDú%^"m†^ezò=¢ÍUþM+=‚š'û!Wø«ºí7Î]í¨.3TÔQ”†³ÕvÈè3Ŭ«=®¤@ú¥nm@OÔ+ñk¸Ìr×0É=QüÑë]+=‚³Ñ?Ùn"íuøRWŒùfÍUþM+=‚š'û!8²îë᪚‚ÓU#MNˆóE-$±¬X+aÕr VòÏÁ:–ÔkŒcš$©M]Q"4DhˆÑ¢#DFˆ¡wîõþH~s¬ŸšÕ™-¶Œ›LÃ?dß›ðÍ©geCûKœY*£‚†Y9yªiá EÄ9cpή´*c*H aƒ§zåi¿ßý«¥ÂO¿TæÕo’[#,Vˆ"ÖAC$j…¥trd”ŸB6Uè<$0èzê@êåï‚‚aÙûâ–år1¤·Û}¶š®­ŠJg¨CeUº 2Ë’X9l…sKü€Ÿ~ 5ïŠÂY);Š»…STÓÓÉ :Šu:3(a–åV,bCsesF‘ï’œpß4•¶Úè/­5 7RXÖ©â‰Þ,®<"ˆ  œåƒiÛïÁ»=ø¥ŠžWoªËÂÞÕLÐ/#+oBæ1á›'áuÇ)øZGòóüd“«ËÞ*9é'Æs)OV]\Ea“™y¯½ýU<%C|/^qR0¾ûªò'ߪy¸í“ÜàŽª‹ö@žCRÇiPŠ£¼–BÔ.a‘ŠŒ©`:³›xaïûUZ@8ûæ¤6´ º¨âµB…}ía](¦17yž`±†è@ Π°ÈίJ/ˆÙïPT«7 í÷­[/?¾oüEüÚÕý¥›;*Fß{Æ~ÜëFvVoí'º²ª4DhˆÑ¢#DM®¥/#(æTgרvJ[škQ$?_Vª`/ØþmT‘а¹wžÔÚ1ŠÏ»émë"}m«j’ Çø<ì9àÕ_Q”ûF›Mõ;"S›öɦ†éc¿G[°žîzY–Dqí ¤‚~,çR×5ÂA•kš`„æaèê+$Á ‘Éçìά5*hÈT+_&;ÆÏƒÏâÓÍ<–õiý ‘"r‚}C8ÀÔëQ©G^·=ŸjÛ=òÜwz:aíõ“*/0±’~Ô‹Tsø»X^a¢QdÜvÝÍoZëÚŠ®"zÉI2È£+2 ÁÁ®]ðñ Ê9¥†OÔÔrŒJU}C×ç«â©‚¾ïŽe_Û®ÚFµ:–*ÄMâÊãðçðiŠ`³‘¦RüÜŸ zgýZœT`‘^nñFWöóëõcDLïÛ~ß·›½êçMGMä’z‡ ŠY‚¨'²@ü'TsƒœšÒã;Sd§E_3åýZ¶*0N)•Öyy¹zòùyùju¨Ô·êT#DMZ¹t§2Žyå\yæ¬j$J˜0°‚éÅ18RÜŠË‚yNÀ¡i Ú72äJ…–ˆ†ò?ƒDUoWãÿ>¹×B³LxøµÐ¹×*Þ©b}ãp–ºZQ"Ô¬ư+åÁ×¼ ¸èá犥Ý!•ÙNõÁ º¬UõÕ–úØb†D˜TTÆ y‚Ì ,:ç˧¬Fdƒïšœ€#ß$¤®'»EYoiyž¦…ÖUÇŸ¬¸‰#Ö:ã j7ûú©Ü®×‹}®¦Í(½;GL‰ÞÍ"LÈQPóÊàŒcä×Kƒnâ¹Áuì!h¸m¸5ï)ZtnôÅ&áªr<<¬ÇÆsЂy½ û5Ïf˜½Ì­æÒDÇ ¤lUÜ ‘©-ÀM5L^ŽÊnóÍ#c« z1ë=Y¦Î2w5W ç9'[7ppbJw}¹hª‘èLÅÖá$Ì´ìÈ ‰eBܹü/ŒY޳ÇTóU{kÏXrMn6›½ÞžÓjßpûÜEUeU+]§Z–(PU•‡,+ÌÅ”äT®05Rç†'3?áX’[Ž/x¦PYë­;î{·ˆ–¨œS´”nÕq,eÔ¬e’Iy$\«‘“ŒôÆu[¥¯—8q*×l5§€M)ìXn¾‘»øµF¢–C*GïÕd È̹ï&ee*X° Œ ŒcPî»òÞ}TÞ.VòŠgoÐÕUP\k®{ÂÕu†¾f™%¦®œ¤SF2@;rª€XªzÀ>½] Ip3â¨â#Áe´o{²Šš~Ú*ˆ¡”™nSÔw«‰9Œm3³åL‚IÁW-M75 C‡T{\âe¥<³ïÚ(ëÚ;ÇvÝT|„Tǹ‘¹¤ž˜{ufÔâàªêf0iV9.–˵šJ›UtSƲr!:å[dgÈôÖ¥ÍspY¹®Åceýóð7æÕYÚVeOkeŠ4DhˆÑ_yn}ÑA¹­;OjÛíòÏr‚ªy&¸Í"ª$=ØÀ¤±&Aç€>zÆ£ÞÝrµcX\íP—¼ã?Þ›cùÅOèiÿQ»šŸÐßÉV©¸Áv¬¤©¸Rï=‡$TmËTÉt˜˜Îà€¹Ïˆdc¦F±ÜD‡7‰Zh ]ruCÄmÕ_U= çØ’KK(Ž¢5ºÍÍW G/CÊêqê 5aUäÀ-â Ò`C¸-;§Š›§fÞ­›kqÞvœ7+ɓ޻trÕK=PEæbˆˆY‚3ŒjZ¥7¸‰9 T²‹*4¹ ÀÏ$óbq.ÿ¸÷zíë-µ©¦µÔTÅSEߣ¬Ô,/Ç2)\óøL`êÔ«9ïƒoÛÕjQkxN{¶J¾k¥s hŠ•bÜœUÝ-y³ÛvôT­W‘iÚ8T›>ÃÄz(#q|ð£nÙ¿·îÓ ¢ïÒÙj¤•Ûˆ‹9gb}CÔ òYÕ«Rƒ/=Àê´¥JgÝcI>#Ñ2µñ‡|6å·Úë*-òÇ-Ú––áK6Þ¬ ž8êc¨fvVÑäGB:j¢½KàÌj#9Ú¬êî6`åJܸ?öƒ]Oì®fv“ïøüÚ«3V~JsZ¬‘¢#×¢#DFˆ"ƒÙ‡öUïÿ]ËÿW²§›¼V•2o‚ä½§;:q#Š›î=ÕÂÍȶñÃíÁk¦½ŠùU¨îµ L¶ú®äI E'ÃY9Î>×5¦Îú•C›°ñÕ÷]zì§LµÛG dÛelÎ3pß|Ðo[_ž\.¦‚¶ÇI»ý%½î±?´Ç¯ZYÐ"Ó÷ð†ð(îÉu©ò°Ï¨Ÿ"}z›¯$õp÷½Eæ€:Þø)áÕAž ú+œtn±! %#Hé.·çôc^†;W’11©«·“Žëϧ–žiä¶IwŒDG<Í×Õ婌TN Ë=µìWMÁÄ‹u¾ãr¨¤¶­¢6 VFx£¹‰ à.£¦[”ëÆøƒ\ê /bÀæ¶‘ I”Û³¾ù³ð×{Ý.WZÊ{^Ó¤³SÓM; #V[•Yˆ²NÙbÌz…åJ5[-FÒ¨IÁ sõSi¦ê´À¸ž^‹¹pß´oø§^–›ºc¨­pýÝ‘”•–&ñ0R<°r:õGMz4­vzÆëN>‹Ï«e¯DK† þ‚6—&y]°}¹ê\Ë[EFÂ9>ÝB•Ê;Lv‹¬àM~Û¶Û6¼Ï¹.MKs4ë*©žGÎK~^ºâµÚ˜´Ííð»,–Qh%Ñwt§™xúÝ vufî¨Ú"Ó% òj¦ýø,Š ~nUÇÂÆÇLêÖ;OI¦]ZìÝá³2%X8¥Ã¥â~Ïm®Û¦ºÎ’N²š›k)~T~`ž A°I#Õ­+RÓS»1ಥWERôOŠáþëÛÛßl{ë·j*j ‚Y)jˆ'i`ÆùVü%'8ÃÈ êôžÊŒ–øpT¨ÇÓ|;ÇŠ±Ó8è¿ >Íj³[õ*`þ qÞÓ÷sì % &Û­š nUOÍRUK@ª™*‡çÌç8× ²«é4ë]ÖJl¨Iv¥]ìÕÄÝíºweNÍÜw™«¢ô#Q D a`Ã8luVÎ:çk%j}ÇZZ©Scš!zœrŽ\œë:õš¶èˆo#ø4EVõ~?óët+9øð›] r½ñtj]Ëq„\a‰½%]Y‹ª²š…å$ã™È:â¨aç•ÙLK¿ ƒÝÚ¦ã%Dw˜¡Û™„•ñ±\ô,Yjú®q€L«z]Ÿ¾*Ñ/|iºÒ®t­ª¸@ÔŠ¡ä¤KœbP¼¸ ¸ª#”Ì=c½/ƒŽ¯Ê‡Ûð¯õÔÖÚæ§ š8ª±<Ôüê¬sð”ã˜|Yöë¦ lÍ T!£ßÛv’{•UÂÕV¨ª¶s `°^lóàã9 ôÂê‘U‚I曌 â¡*ø“z5t³QPSÑC …«}ñ·®`øBW2¬B©Æz±u‘¬é‡ˆZ M‚‹ßï6ZI„uVºvJˆÒžgµ‡¨î­¦üÚ«;JÏ즜Oâl2·Ðܪ6ýeÅk+E?q@¼òŒ«72¦2çÃŒ½F•«h@12”iiI ·/i­·<•cjÞ• £–Z‘%#G" ~ì‚1’Ä€<ÏNºË¦3aZtGÌHLgík´‹K~Ï¿ÕVSUAÊííÉM(i'çÁ‘ä†Ç\!çªtêz~¾JâÄüÉïê®<9âÞ×âŒRTm¨kBGMA5”¦"R^~\ëðƒ‚25ÑJ»+vVh¾ia¹1ú±íŽ¿ùžéþU.ýöø²7öâ>ê½Ç8ožîÛ ¶ÁÁ;Îç´WÓÕÏz¹YÕíâ%^íDaOxÒ3#öuZ-(=¡¬.f5-,özu˜â^DDë\–Ù]À«õ£³öÞP×ÔÊä¼Ö7¦ŠWh`“ä.,eä,Ç!’Làƒ®lÅØP3áà»H´ãXGŠaz±ð"á¹c³Qö-ÞI+÷sTW)ãŽ$yÈdRK+14Ê .<½T?Z¹¶bèO¿ð¬×ZdÖÿʼÓÅ[Ú#Œ»gˆ¶­¯¹ö}Çi['žŽ}Åc GX“–‰áå++©àäs)éäNºÚ­ ¨ihÖ02°ÂËAÌ$88ê8à®»Go\v×(è/h몥Û×*™êa¥0!ikà|*b d¬sŒë¥Œ,®3ú®w¸> F#èWB¨¸ÐQ4iY[ -3òB²Ê»}¨Éê~!®’@ÍsNK~¥B¬ð‡ý£Cÿ>­ÿâ¥Ö6ÚRµ­ûœ>Š»Æ.8n®îZm·ƒWíÅož‘§¬¸Ù¢ï=‚ç™'”ŒàœtÎUí/¢ð BÖ…•˜Ixz§Þ»_oój¸¦Òì³½jn”±w”ÔµôFª;ª*ÈÏ*’¾JdbëuX7iÞ¶mŠœ‹ÕnSü:í1qßÛžƒd]ø¼ì³×Š¢áYiu£‚E¥IÎe RY£V*d#Ϧ´¥k5^Xá:ã ¥gVÈ)°¼<ߎköfºp¿oC±,ÜDIì1n“yX*m²‰ôP"ï„¡qÌ äÉè=J6CE—°™ËçoÙM[X¬ëå¸Ägº6+Og³ž íóÿ ÿóÛZÙ§jÆÓûîVÊjú ×–*:èfhdä™b1¾Õ°zˆõÖàƒ’Ä‚3U.%\j-;«oÝ(í“ÖËMÆXèéþì´ŒÂ5ÏNf ž™:±-{HŸÑmH1À˜Ëê©ÍÚ¯pZlöúÛÏ÷e\µ°3™lvÙf†9o!FïR9B–d™°¼Øæ¸4Lã°ƒÉoÐÚ\@xó?å4°ö¬ß×y¨VéÙîýlŽdÕKQOPù^íœÇH 2d`sò)Áê«mµ]LŽ>ŠÎ±ÓlÅ@xz¨ýÏÛG{Òmxï»W²¾öžií’VÃOr·I ¡3*#º¿3‘ÊT‘ž¸«þ!P2[IÙN*̰S/‡U‡â‡·vªíM×Àåo‚šáI]G-'¾ÆÜê Ê ‚9>Â0q¬ëUu¥—]LŒŠ½M³>ó^aIìýÿAÅ[ä{Ê .¢¢“[¬µQ\­ËMÊÔñM/…˜ç3Ù= ãÔuvU{ЈÊ}UHÑmÌ;$áŽq軾àýÀ?”ô_Ù\ í&Vßü™ÿ6ªÌÕŸ’›Ö«$hˆÑ¢#DIâòÑ芹KlÞVŠë‹Û ¶Í ]{TDÓÔHŽ ¢/)óSÔ"5mF“ŠÔšne:3ñÕl³ÿ=—ý¦jìü”~–õÏ»Qö‚Þ½™8¸xÝSÂúÓï2È›kÅQU]ZÌê¡#b=|Y$à2Hu•jÕhÓ.€|ÿ J4©Õ©vO¿5w´Ý÷Õæ×Mw¦´[:¨XÒj‰‘²†”Æ ‘œzƒh×Up¿%G6›IS®ÿˆ»mŸùì¿èõ3W`÷ä£ô·¬lvÍÁ᫾ßR;úH Ž:IYñÈÒ’ÌYWÏœõhÐûĹ[t¦õ¢Í"L·³DK¢#DFˆ ÎzCnÝëüüçY?5«2[쿽’¿ °rz|Z³;*¯í**Un™mðI õè´órª4ÕÂWç9S hùŠ®Éè¹êNs®i|•Ñ ü"ãp½ €£y/ .#Ws¿_TåsÕ€#¡t%Óó@¹-wܲ»ºúpI™c0”­F 4qòez. à’3×SyøŸUY€ôN+k®´Õ•—Ê7ºÉ,môÔŽjÌ’á(ø”‘•\…Ç‹:’\ 8óPHI­=ïqµµêá[‡}O„ c®Ñù‰b s;®FW×êŸù©ºÉÿ ¤ Ãi­Šž²¢í$èÑIw%ÂX¤N¬Êÿ[Ã0G(>d©¬¹§æ¬CHÂ9,.Sî3\Ëmë–XÄñ,S\@X››•[ò†á(9S‹PoÎÍdjäžÜ®›š²’¢²Ù-ZÁ: “>ø,èS•‘åy›-|Kâõ“«<‰u¬ÙgÃú«£nXÖ¾²öW»r«TÕ¦&éBä,y½½u4‹¯ã<þê*†ÜÂ9}•ªôG¾oÔüõ|ZÕý¥›;*JÁûÞ?ŽßŸWgeQý¥¯sn{αÔîMÉtŠŠ†Ž3%ELÇ ‹í?Õæu/{i´¹Æ†1ÏpkD”—tPo­š×Í{†¢:êFk}tM”æ ò·_aõ|Z¨x©NXsÉX°Ó©.qÀ]±Å­Ÿ[t®â•ᢣ‘UcZ뀔4ÜÄ™“àSœ`ã'¹,̬ÂMC‚ê´¾‹ÀÆ*áÆÎ*Wp›†— óAb÷Îj0‹2ÈB–g ÌÌ*‹œ“ìÞÑXТ^¬,ôEj¡„ÂNqN·‹ü6¡ßWÛ¤ª’DjrX«r7/:–Á(Þc?Ÿž–jƽò!-4E ¥€Ê»‚‘×BÁc?7 å*~ËËDZ\¹çfhÎW¨Ç˜Æ¡Jã~ß¶åÆH-{j®ÿgSÓ[)¨·L–úŠ&•fxyy–)U]$™WE%:ŒëÖw0À5c}¼p´5âIƒ¯ U©÷û‡£löÎ)l¶²mÛ¬Õ=L›…ë”]¥Q4¥†# ™UO"—æÙ%pu+X 8ŒgµÖÕ²“MÒFÁz6”òˆÔ>1Í‘æ5ë啜|ÃåN²á ¬û¶i:H@Z"‹Ý;7lïKsÚwm†’çNA傲ꤩRF|Ž =uGÓeA®Ê¦e¦Œ»zìø­{ÒÙ²¶ì4DV±,ÔJØ©%‚³¼(B«)UPÝY—Ìô×ñ&E@Æà#Þ Ýøsɦ^ìL®kb¿^6õ>ÕÚ› ¢šG{ŽzÎéÚ .5®Á{É%)®TtU$œŸ.F¹Ì k5%u9­ysŸ¬p é­kš9*Û–FU2ª·2‡åÀX#>½}[f1_.èœÙÉ(®Ùîð?ueUÇûNv{Þ|f¿m Å´75¾ßQµnmYÉr¥’D™Š¯(ð0 \ŸhײËRÐæ9¦.kºÉj§A¯k„Þ[û)prpb\6Îç½ÑWÕÖ¨·Ó4q)”«±'=IòÔØ¬¯³R-q’L¨¶Z[i¨Ñ!]8»í³ï;5oƒá9ï9¼ºrã5ºÁlÑ¢*—65øÙ–ªº &’(šj?G(%¨<¡Kž\Ÿƒâès×Xצ*S ­¨Ô4ê«]šxp›?jÉp¸íjû]Ê®¡ÅD79!i‚)ðŒÂJ…ó Ÿn±²R¸É ƒ½kk«¤|#rê+œœþ-v.Dº"Èþ U‡—ãÿ>¹×B™»^¡³*™hê¦æŽGsàBätõ0£Özkg85bÖ—*›q¯gȰ÷›;t‘Qž´*Ï.Ù}oÓӯæë¬:E=‡[tz›G§vŽí±ïIjmÖ[…*Á ã¹Ú$¥l• ÐH£œuÆW#=<õ¥7¶ Àq³{LâxS>ƒDI&š3‘ƒ˜Ç_êÖ$¨QWGk¥5uõ1C €d–G ª<º“€5˜!¢JЂL·ˆ|9kbUÜ7m«Ðê$hç¨NîWAÎPst,ˆŽ½uSV”bD)ªÎÊe¹o<¬I(/›’ÅO8~âq,Ôë&r ˆó©ó, \g$zõWºÎD9+1µÁ5Ùáµ}ËênϾiÍÖŠž8 «FÕt*¬ï•"bÉn¹AŒsÊDÝÄxHZ_ªâÜŒãˆû^Ñ Ýn•×)û¬É- <Ž€`È˘Y‚ôælO¨@6¬ÆÄ’yz*Ò{‰÷õUªºT¿îG¯Invè×™ÚÑiXÊ´Æc&f~ŒÊH,ªØÖ$^|â<0ññZƒu‘ñÅX÷&ä±[+…=}~äZA ªŽáI•Ñ€"åHØ´e|\¬1’zù l÷µ§cŠÍŒs„€%?áýîÅ[WSGnÞw£Ç]HbôxÁ>úÊ\3–õgV¤æ“ÄûðTª×‹cߊ´´PL1,!ŽCeÓ89èz?[À+!B_ö¯pÔú\·K”#Ãõº:³L$‚¡Jœ“â>g”uAÉÔšó2Vªæˆ„òŽÁmÛ›}í–Åq{ÍãbI%ºŸ à5`Ö±^/|•²Ëûëñ[ójÚRþÊžÖËyè‹ ]騎r9KàdŒçƒD\öÕÃ^%Òîj»œ|Czå’c4ñŸIjþi9¢&J~é<Gð¼Î0¹EÁäÞŽsÇ(ܺ]V‘`gíÃ9Þ´×R]ö¿¶å^ðâ0¬í5ŒUÒAL¹©ŽC(8¡ü>­Aev—ºDƒbZú lb>êï.ïÚ,{®Ü¬A ÞCîƒRœfœŠâ»whv‹ÛÊ´©ÚãoUS-ZÉuô‹Q/vgg‘V~gʪ@P¸ Ÿ=¬µ7 0öW{ŸewúF ôVN?=¶žûVm¨ê=­eLVèÛš@0Uœœ|€!¼'›¥®Ú`~¨T½fŸÚ+«[wnÜŠÝçkš¥!AQ*VƸQÌÀstäãØuÚ*21p\eŽœTëëUî¾8Ð.ÍßqÒ4;N¬Ï-0ÔóUO€y²Èþ¾Í`é} \t`vanØeœßn±»QP|AáWë·5Ò¦º]Ä%§Z{u{òÒ›,ù8©å‹ܤ†è1ð¶®³«F±¨|£zÒ•jB™çr½A³x‘H²q†¥ÙToy)G1õŸƒÓ>zèÑÖïò ŸIK¹Ì¦\Ü6;^Á¦¶Þ7mÕAWV•MéÓIOhKØQõc´º›oóèþ4”ö„¸ý…V;Gû©¶ÿ>éÓIOhKØW0áÏâçö±aâÕEªµ¿¡…µS°‡˜¿&—$G‹Ìã>g\”)Õuœ]|a°.ªï¤ÛA–N;J8aÞ(ÐTTGI<›U`掲Fä¬[¬„‚’¬dò¨¹\©æ|åº(Ò¬^r•ªÑ#½Ê=Tîžû´ø•´ë÷Ïéêi^jäDª£†‘CšbA ©ÀnŸ>­YÁ̬Â÷aŽíJ­ºúO nÍúÕÛêÿbþúZ¤¢ý-tiiw‡Ï£©°£êûbv–Ÿé8¿KM-.ðâš:› >¯¶'÷iiþ“‹ô´ÒÒï)£©°£êÿbÿv–Ÿé(¿KM-.ðâš:› ¨ñ3tí+ÇiQZ7¶yäÞt¤COY3îbO*œ““ø>-cYôÉ`v‡ÝmIă‘WmÃûƒÿjºÝý•‹;I•ƒ÷ÇüþmU™«?%9­VHÑ¢#DP4üFÚ™"¹HÀHÈJQÌG2±F × üZÌU¦u­4OYþ¨Sûa7óÿCM+Dô¿ªÓûþoæ3~†šV&‰èýPvŸŸ§ÍüÆoÐÓJÄÑ=ªÓûþoæ3~†šV&‰ê¹Åßd»ðæïnµKU=DÔl°Ã Åœät“©ÖUê5Ôˆ J4ÜÚ •cýPv ó¯›Ïï¿CZéX³Ñ=ªÔÆ=>oæ3~†šV&‰èýPv¦1éó1›ô4Ò±4OGꃵ>ÿ›ùŒß¡¦•‰¢z?T¦?ßó1›ô4Ò±4OGꃴþÿ›ùŒß¡¦•‰¢zqeÜö]Å=E=ª©¤jnNü4N…y+Ñ”y€|µf½¯ÉUÌssRZ²ª4DhˆÑ.àýð_ä‡ç:Éù­Y’ßeǽ²z‡;dŸâêÌ쪿´¹e¦‹nÅQ%4õ¶úzw%&•€­Ÿ5ø8ÀÏLõ×C&5yz.·>¾©Íe‚Õ¹¬´¨éU,š¢Œ³;ZwAê ÀÏQ’ub D}=.™úú§ÕË·ª¯—;AB*&EJtaOÏ#"‚iùZ#ÈÞ&-€€¯ŸK…ÄzpÉT^ ׎j>à”µv¾êÛ º¦5‰e¯yÖ™– íጯt*¾X8øMœôÕ]¸G/Ea!ØýýSö¢u/{x·ÅG2wÕŽöêX¹‹›!Þ`¶<8øXÕ4}QŽ^Š×ñ8cæœÓGMr¬¢±[-Ô(b”wtÔFCH0Z¥áèÅpJ†û]H‚@éÇ%@$ýøfžRÓÙj,+j·Ä³STKÌz34¨å‹ÍÝw<£œ#+/¨HÈW§ÛŽHU%ÙÏ–>ª=ík|‚ëKm ©ç²µJÕ•¤©ÑYHƒÊ\·…>-RëF jÝè¯yÎÂuïõR3÷…·-¯ÞŠªI‡¢NËB” ÎUJ@¬êsÌYX ±jôn—ˆûz*V½pÏßÕ^¯?¾oüEüÚÝý¥‹;*FÁûÞ?ŽßŸWgeQý¤ßxlûüÛu{Ou[ÅU jrO1F €AAÒ£Q…®cÝMáÍÌ.gÆ)lžÈÛÍ`Û{8UG3¼ËrÌQTwg!‰êî %µÉ^µ; ߺ¨Q©m¨\ãâT‡ w‡ûTð˜Ý/›9= ë;ªëUJóªÏ +© ¸æ¹YN«##V¤úVÚ2[†ÏZ¬«c­ã·Å<ág#âMEÚÚûrª†;týÏì•,²®YprÃ’½z«Q­¦$DBŠÔ´@™Lø—Ú ið¦ýÙšÉSU(‰e‘)y`B[æÆIÁ!G³U«ieÝ…4¬Ï¬Ù•ЬŠ=Ãf¦¾[¥ï «&…ÀÇ22äë×S\ÐBæsK\AOdr篖ueTy¼¨öè‰ gœ¿ ÉüZ"‚ßü4ÙÜP±®ÚÞÖXëh’¡'HÜUÐäÀä{õ‚F²«FfÝx´¥V¥^a‚¦`¤Š–à†5D‰yQW Z¡$­†3•ð‡¦¥BÌ.9Ñ_ShŠÅN ln0Úa³ï |Ž”õ ,3SÉÝÊ¥IðóžSž«äu…k=*í‡-èÚ*PtµTøcØë…ü4¿Å¹á’²åYB×ìÆ¡˜y–P +£©ó9Öli:öemZÝZ«näY¦DNb£ÄÇ>~zî\KhE h‰ÉÏ ?tE–°hŠwì-Ÿ¿í^ño]·Gs¢3¬Æ–²t.°}c>zÎ¥*u[uâB»*T¦éi‚¥i©!¥§JjxUcB¢  `Ä5 T$“+b/)'—DYhŠ­Ån.l¾ Xrï‹‘¦¦š A HWy'©T±> 5jôè2óÊÚ •ÝuMEq¶ÔZÖôjVjw¦‰1ÐÆËÀ|c®´ÊÌ‚ -ÂÕ{·­ÂÖÄÇÌ@d^RHóüz4µÂB89¦ ƒÙœiáþúÞ}…¶ïB¢çcl\!²ªøŠžV#ƒÐãÈë*vŠUj4â•(T¦À÷ ·£:Ýbƒå¢*·«ñÿŸ\ë¡aÄíÃ_·â·ÏApx Ô0uWD .yxëר Mg–AV“C¦UnMñº bãpÉ5?8HÝ–>s…cŒ¯Lg—ðdû5–‘ã_Ñk£aÕõZäß{ž"¬ûµÊ!U—ÃJYI,W>õ pqíõF•ã_ÑN›>«eVõÝ©z†–;ä‡Ä©{ÊPˆ’¤ý‘È>Fs©5*^‰ú(ѲìÇÕZ«-VûÅ[nÔqÔSÌ I ‹•eÉ |`kbÐáe%¦B¬ï­ƒ·a¶ÓÏAj§D†¶&ž!$¡8fÙ˜Œ \²zÊ­6ˆ JuN%PjvÄ›e®·ëm%|õNVŽI¨DÉ-G+‡•©vÁPYzäùü-r–K%ÂÏ‚ê‡À1þ¾c†làaf,.ˆ-má³'5xžZZ~S¼Öºš¤4…¥ ˜Ð«€Ç,¾3æ:zÇIH`°¥8®G¸¤³Ü ¥¶K[t t¯$u53å|%R4U©<ì¬Í– ©b¸^Z`Iãê»xIÀχ¢Õò¤¥{=šŽ¾áQ- +-óQJÝfvg†@knPBò¿7.ÏQ¨Ò ¾þjn$ë÷±\i¬TV*Ù*î\>ÜWI)˜%%U² `åeÇ5Q~0 Œc'¯@hi’Ò|?ÊÀ¸¸`à<ÂêUî^ÓÞrà0R†ÉzŽ»Ù\í&ÖAþÉÇøójŒí+¿²§µ²Å"4Dhжÿ±.wc¯»Zj*’GQG<Ñ;«(¼äì{u™u"`®P ¬b¦áÜ×)lÒÙž²Y&¤Xâ2"±Â³/˜ô鉌%LÕq…†æ¡Ø»vÇSv¼Û­”ÐEsË-"’Ë$“ÐÔüz‡Šli$a¨ç ƒàœ qðÆÍQi·Û*6øaœ%Šƒ™YJ‚ÄGǬìâ“èˆihÒ6©”ósl+uº¼ï ­µhdªTU¸PŠHÀ¯…s€2½%PICärTô ­ŸHy£ÇåU• \ +Åš—xìI߆u´ÖÙëÕ;Šø#hY9dRÁ¹`G+)SŒ‚<ôsEJGG„£\YS¯Œ*ÍG {@B"‚‡ŽÂUŽd›¼¨¶¨wpÈy[—¡B3œ„Xe¡µjzÔU³kblœ&íkì\v‡ßv¤x‚{.ñ±™{®o0 <†IÕt¬ô˜òVÓÙr¹‡5sÙ;"ïCi•8‡-®ïpzÙdôÈm‰11Ê©ê@èO¯]é¸7õ ŸÏR '© x©³µvÏ«nP3O£Z\fÅKïÚ©]±ýÎP3O£KŒØ—ßµkmŸîrƒùš}\fľý¨ú•Û½·AüÍ>.3b_~ÕIâÊã]~á¶û¦µZ©Ö5¨¥—¼æð÷d€ruåõzùêÓ´ƒMÐôªP !í’™ýHö޲Ûç{Gí•SÒÇm+J]°~¶ +ʨç¡ÕWGkhÁÀ«_²¸âÒ­[smÖn}‡j¦ãÞ¶×ÜÒzè*)bš8çÁ¨ ¨ ½<ñÓ[±¥ôÆ”V/peC¢$»õ#áO÷±Ûßа~†š=ÑÁ4ջNJ?R>ÿ{½ý èi¡£ÝM[¼x£õ#áO÷±Ûßа~†š=ÑÁ4ջNJ?R>ÿ{½ý èi¡£ÝM[¼x­¶ÞðöÍ]ÊϰìÔ•0¶b¨¦µÃ¡Æ ªèO–¤R¤Ó!£‚ƒV«„)îáýïÿÚ®¥ý• í&VþÉüÿ6ªÌÕŸ’.×mÃõB–K-!ý‚Ó¼•rºõç Ldçðj\çߺ5­»%f‡7íÙú±š_aþ·~®å§½!<@ œŽ™&YsñýŽŸ«¹OéoC ›ãæš_oO±öcOÕÜ£ô÷¦v+6ù°ZÙZ¥îÚFÒJ¹,å±€?„Gâ«[UŒœêntâž§Õñ9šGŸØÍ/—_àþ [õw*þžõˆýPOíÙº}¬Ó}‡OÕܧô·¥cÄ?[ŠÏÔŸ…4¾ÞŸcìÓõw(ý-èo«ð2‘ÙóÓáK6<ºú½¿Õ§êîOÓÞ•FûÈï#µu ·,²ûNqÓÙ?Wr~žõŠž œ÷YüºrÏ7ŸÍòÓõw)ý-ë.mþ?&|ûÙ¹±ó|ôý]Ê?OzBw÷(+ ·O9fÇ—_W·ËâÓõw'éï@ú¿º³óc˽›Ïàö^Ÿ«¹?OzE^ yã´êÄÓ{?·OÕÜŸ¥½(;ü>;‹?&~í76>ožŸ«:“ô÷¦”Ö­ýKyªºÇïCzT0£#É/„ `H<½sÍýZ¨C‰ÁXšE bžg~ ”ŠÑž¸Ì’ûzz½™ÏÇ«~®å_ÓÞ„;û\†Ñçê–_,àûqø´ý]Éú[Ò)ßç&XméŽI¥öŒý³:~®äý=é½]ßyÚ«hm%²H*«R ŒHñ(aƒ‚OŒû5ÕD°m7œnµêâ‡ç:?4fK}ˆl—ømÐzújÌ쪿´¨¶›n–ÏuDY×&Q/…Kf%«Èy/¨sÔœ¿5Ð\ÈÌ{òRTVûœ¸¦Û÷Xæjg 4Ò;*aù£V_I$°°9#WGßš¡p:Ç¿$ÆÑAº"º%]}šäÈdiØ4N* åýÖʤù ©óõj­Ä~jÎ,Œ÷ä·m]›º¹©Ü2TSÆ%_¬T „¦@©À9ÆO—CÓ®¥”Þî×ßÕCê5½Ÿ·¢’«ØÊš©úŸŸ<“»-WŠ%‘W†3yºdt±¤â"~¾ª¢«AËéè´ÑpÎ÷KÍ4›† 'DSJÇÒʬŠá”²µA £¦N2qÓAEÃ_×ÕI¬Ó«éè³·ðÚécTÜoñJ¤³‰êІëÊrÕ 1œdc h(ºq?_U«côôM*8Y¹ªjº}ÕFeg,ÅiêÂó_(ªÂúú TÑy3?_UaY€D}=­¯d\mWÈ*a¹ÀÖøÙ)œNÒ¡h“ÎÓ2ž£8+€<ºõ:6›šùœ<ýUP9±ùz'—Ÿß7þ"þmÚFvTƒ÷¼¿>®ÎÊ£ûIªZà®ÆãUŽ;÷·Èë½å5E4Æ9 b0J°öŽ„ƒ¬kÙéÚ[Q¯RÎébÃ~í^íHv~Í·z5.φ»»±Ë;1øL}gV¥I”Yu¹*ÕªúϼìÔìpÄ™dŒ|ùF2}ºÑf¨¼Eà.Èâeâ+Õñj¡¨Ž1KG?!•’°ÁòÉëæ3®jÖju%tR´Ô¢Ø áf´ÒÙmZ¨!X©é¢XéâQÑUF×CZ ,KŒ”÷R¡3¼MW ºv·Fq)òæ=?''âÔ80RÐ Å@%ÇwÅ …™ˆî°ŠWAbsð `çÕŒzõ”ÔZÃ!8Ž·qÔR˜Ä\µHcWÊFSáf :Ì1ìÆ¦^FõÀV4RÞ¤®š²cÏ å’>RB…S…û#–óuºBØVEæê[,–‹‹ÕEC,´±†”FÆ5èrØðޏõê Æ DN*¸*÷$µ)eªiÜ#ËñKŒà<”ôå$~¬¥ó‚Ö­m_»šB¯§vŒ«vG;s(1Œ‘’?5QLS[`ŸxK˜fŠH£0ïŠÙæ9 ©åæò$d©¢‚š•Ûqhç÷ÁÜ‘Pâ>q×”1ùÔ ôÏž®ËØÊ£ãR•ž®¨¢÷ÝQUm@ó†< ±ÆsêóÕ{R»nëQ1VnIËT× ©¢ÕUK'Ã0\uëÐçT—œJ¹ ¨ÖoŽexãqõΪȸt>^jHÎ[ÚqDÕH¦§vä—)¨Kª”Ï'*°• xGÇŸYZ°¸ŒVo€pRZ²ªG€þ-p>×)ºn5´{vªHã°½«ïý)•j"|·x²)Á!‘W”õ%ùº kÍ·_$7Vkѱ\»Z³mž îVìñG½ªjé'¬dë;3eýg=‹KCå÷u •ó]+s>(n=Áý×AM°¾:ÄÒš¸®¬V—¼E›˜Èç![ÔÀœØÏgº“ÅÍ{r]TZÚ¬7õlÍGZ{BîÊÚ;mMõTÉU[bç’(šd‘„®U’1Ý«3âB|†M[jy>jî²°.|Óšž<ï›Uæu»p.ö-Ý0¤ª§úä²I#aà EEÃO¬<âM¦«]3*‹577‰Å_¶^åmݶ©w–zªRšJÄ+$xf 猈uS~‘Ñ ž£.<¶eKjêˆÑ¢#DFˆ"4DhˆÑ¢#DLwîý¢ê쫳´˜Ø?|À?æÕYš³ò[ áà—'÷¤Œd}Ô~?ójÕòUÿOÍ0»Û¡¼q ÚŠ¡ ÙäEd‘)nù1äa“Ž|>ÝUÀ:¬ŠÍqm)W.œ{âÞÔâVø¬¼ðæz͉¶wH±E^× š3 Ò% ‚v˜ÊåéÔÔNg”Æ5yKž`<ÇW­N«Él°ÌšçŽ/I´)T¤À"rº£†)¥wmiîuÔT{[÷ªÜìÆ½÷&à«V‚±ù^E0ó¬r+UIJ³RUQÕµ^ž Â2Ìœ½jÝ€eàç„ïkvÙ³o Zº«w5kÛ©'«¯¢ ÝRËU1[¢®hš sé\’¤fŸ£s‚ gVe¸?*gލž:£j«ìE™¼p×1Ã\¨*ÎØ|@¼^-·m©ÁÚïz®4¥ ’ž÷5mή¹VvÑfV†•Ñ#䌮î²$|«Í‘·=Ä98êÌÏ·êÖµ&¶C–¼„pÏvµ-ÂþÓµ·­ýc°îËýª¯nVÞš†«wQVVSÓ5G½F©èi™cž Ý1-ט#0ÕéZœjµ¯"é9â?ŒÆyƒîU*Ù@¦\Ào–ùDå‘ázCÞŠkùµEm¨¬ÔQU™c–¾YUÊ÷$ˆÈÉÁøÎ½[¡µoû/.ñu3;•§[,‘¢#DFˆŒhŠˆROO°¯SÔI‹l˜¤‘HUò¡‡PG¨ŽºÎ®à´¥@…ØvAõˇÿÎÕ§¦‰žÉM#ý€¼yí—º!´ÍQoÛ<·9îñSÅc§‚ç]Qm€Ý‰ÖuŽ¡Z ¨$îBGð¼-"‚úñ]nt`1Ù‰ŒcsÝ‚öblâpÛ€ à üVŠÜÛªçq°Ûí|;²Î÷nšùf}árŠŠ-×%3ÕSZÚ´ÆbŠŠ99Ýñ*1Œwg'Wm½ŽpNyÄÌ 5sÁQÖµ¤Î îË)ˆÛ¯–*k…ý¬ïûÛ}lû ÛkÉOk¿ÜdµVÖ#V ¨îi<Ѽ L*˜Ã•ˆj)åÃdP¬ÓNÖ]Q#c^|OG‚T²µ´ÞàrÇV\9`W¤÷¶Ð´Û¶mÚ¾Š¦ãðÛg’ïQ”eBA?Q^JmÉ–Ò¼Æ=Åà V¨:‡øókq’Äæ¡w»’Í]òåñ>³©ü|V”ÿ—‚Ïp~îOäGç:‡æ¥™-ö2}9ÇÉ«3²ªþÒ¤WUï,К‹íÆ)ÎXÓ”Î$^h•˜Ò Áˆ^eÅÔ뜚¹Ÿ~Kp)—eïŠßl¯ÝW:[k{ýp‰jjf<ñ¡ær@Gç¤^T˜ƒ…9eÎ¥¦£€Çß!€œ=ñMj¯;Á¬k_Þ¿0WIÈàwA—ÐÉðÿy|G©:©uK³>ø) eè|VÊ‹Æñ¹¥,±ÕVSÉ33SÅÊ¡Ñ3Þ/I”+Ê9Tã›™±žš’êŽ÷øPLO¿ºoE{Þw«5º™›”Hȳ.T(%³-Rܹ8%A=:jª8À'ß’’Úmïê»/wX­ô7‹™ª~Xd‘©êc*ÅÉ Ñòó ± *©$c+î"3çè— 9z¬«7ò¡¤5u5å_F§X ® ÆÅ]Ïì3ÊI Qƒ¸:Ô|2™>ýSj­Ó¼¨Ú––á[rÔªÍD-<²ª”e Áhp0«a³ƒå€j_PD“ïÉHe31üԖʺo¸· ➪X*¨ÞPòÊò( ddŠH·B0̤±9½3Vø÷È*Ôî’ß|Õ¢óûæÿÄ_Í­_ÚY³²¤l½ãøíùõvvUÚOuuDhˆÑ¢$dVê}¾`è‰p?ú:"4E¦µ¥Ž’Y©ãV‘c%U›œtû5aHÍT$Ý\D÷¼Ô-‚Ò$Uè‰uçëˑО½<þ=a~¬d8­®RœÏ¿ê~šH¶õ´À©Î%À)Èåæ ?0æè<#§]Mú»)í)ÕïtÍvX%µ[Ҙ̓/¾Aß»ó 3êû«Ô.ÈGŠ‚Öš²kU’ÜUµt6™g¶Åµ?ž:™û´g'õ~.º«É ÁY b FäÞŠÍ·­Š…¼ßyŽ3Ž‹ÔùúñÓãÖWêlV—)í<âƒ#kÚÃsžp·>p:d0:“‘êéâöEú±â¦í)Ìð[çßyµo¬ýÜf{  㛀äc¨õ‘ìÔß©9*.SÛÉ>±^÷5MÅéîöÛ|ò3G,Ýã;åË€qŒõõc»\òq ®kÁLW=TT²IE’`„Ålltú†q«™ŒN*¹ûˆ²:j­»oäçåÒà2:7.< ‘äIóÛ¬¯Uœ@âµ»J3XC¸wš?-}–Ô¨[öÃuã© .:•Û×PSXRå=DðXQîMë$’/¼Öp§ö–÷Óá8ÂõèTú±×Ï¡Ð>¦ÁÅIe=§‚ßIâ³ßn[,yyn™$ äô^¿ëÇ]HuS¨qP[Hk<§[,Q¢.]Ú—hnã±é(6•¢¢¶¡+Ý¤Ž˜€ÁM-Bää€G; ü$kŽÛMõ)€Ñ?à®»ØÊ„¸Çù ïCjz}©)9YmІ€a»° ãËÏ==ºè)ÆåÎLÔé6}¦[m˜ÒTQ˜]f|FÆ:cÙ¥6Ýl)¨érç¼Ø›¦ÃÆ-×|¾í¹éék$™¨*¤*ÊáªåaÊA$eN«ä×5 omw’=Êé¯QŽ Ð¸]s”džŸ»WSå¢*·«ñÿŸ\ë¡kâÅ= U)ê`¨iL¡©Œ ÅUרç A(|ˆõôöjkÁj­C•< ç¶÷"Šh¢^yšA@|F£ÁÌ[%‡*®U°zäk Hÿ+|øE¾ÔÌV*¾³:»5Ii)`cð²G„c ø†‚ñ8ýÐÝ}–Úzš<³LkÞ4–.tc3†…èT’ 矂1 $+MúãŽDž¾¢˜Ô!‚)©`2Ê’8`¥TÌÀõ‚:ué­Ü@jÅ¢\¸÷fþÍU[vÛ½j7·áq^éÞÞû‘\KM<1«?¢²Ç;É0‘Ȇ8Ђ¬½ruÇg³|’dá>ž?e×h´ d c¾uÒƒ’úLw:=Ú`¸,Še«ôÏ$ *÷DÆ9RÞyno05ÑÑñq\ú|"0MS€Vx¨¥£¦ÜSFÓÓwu†HC¬ìT!fRç” ¤ ŒœóÇFl`UºC¦aLÛ¸9³ ³­¦¹d¨/M ÍòS–Š2¥™yTŸ\““­ž˜l™®òé öÕá¾ÉØOÕ´¥3ÇË4"i\ 9YˆõŸ,yãVet‡TB«ªÔ¨zÆT5ëspÇ|Yjk·b¨¦µÊ!™%‘³ 8æ6W `“Ð}Y:ÍÏ£Q¤» ®ÖU¦à­aáçÛòz&áyíö®`æžéP‰é×Âá™z ÌÎ=zÐ{sÀo*YŽË¸-´Û†Þòï UR”ªìÑWÕ h˜ B¸ dõ8>¼êC(ÔwùP_V›·RÑÐYèÄ4õÜjª£¼™˜ œ–>Óׯ–·4`±$¸¬ï½¹¤ Õ?áÔ¿²¡¤ÎÉûçñ[ók6v–ì©Ýl±Fˆ"®oˎ祚ÍjÚ×:ZI®WCµ”m8HÄJyP:x‰E'ÓYU/˜“öZÓ Ä¸LºÑïÿÊ=ŸüZoûF¢í~ðáùSz‡tñü Xx¼-ÄkAòúšoûF—k÷‡Ê^¡Ý< ;jðûŠ[NÅÝ¡â}²H©ù»·›l±l33`⠜ث)Vcn‡•gÕ¢÷^-< ‰ÐG¬¨cÜú¯Ç<Çä¨{ÆÝÙÀWK®Å§’±¯›b¹­<jŠhÁŠ| 4]AŽ™èàtVèu12Ü¼Ö ¨bˆ÷’ƒÞ¼V½l]£s©Ýºz ¥5¯oªr^‚®USÊò ±o÷6åc䥼õJΦÃxAä´§Eµ.™ÔŒV./,Ùé-–ªVž¶ mi UÅ’N²uWT£L½Ï ß•zM§Uáa“¿ð«tü_â<Öøo\‚G5ô«pÛ(ë)šxcnWJ¶(ܳ)Ëëk!^¬Ož#1>;Ö¦),ò1à»6»× 1Ý"4DgDFˆ1ܸ<ÿݨþÊ»;I‹÷ÉˆßæÕÚWel)ú%ëûÐWàŸº_–­þ¯’§ú~iϽị}Ti’ôP 9_½R ‚22G«¡Õ\KjÌjVh§­oú¹Ümû˽ßüÚ¶“qQ£Þî­•ú¾àü/ö7Ïþ–šMÇ‚h÷…³ Ù\>§ª¥Ù<'¸Zã­©5kEf ßJ@܃–l2}@V³§£¤c"w-¤«ΘަøUø;2ú?³ÿ›WÒî<z=áEØŽÐÛ7;ßoð®ãESy«7Yilá \Ü¡{ÇÁÃ6¼ÎuFèØI "sÁ]×Þ.eŠwOq«¿ïKmjmë•44´•Bi«i„kÌýÐUNIåo“ðjÀ—TµÓ"F¥iÖËhˆÑ¢#:"†ßôÕ5»íGELóK-¾eŠ(†YØ©Âë'YÕÓ +Ó T¤]éMÊÔõç˽R}iÃÁNŒíSc¸,½ûT›sïÕžOy[™Šü'$z˜Ô_löO7Ž+yÛɧM“pTiL­ØØä`±Á$g¯ž¢ó2ºx%×OhqK êÁNðËO²®(Ôñ”’ÈÀƧÍT…ðˆ`jo4Á \â›ï Ê÷]©s¶Pí«ËOSnž(“ÞÇvF 2z§U¨ûÌ –Å,eׂHâ­0 D€ô<ƒ#ñkp±9¨]æÊ²Z;Ìu½@W=pÿOìêjñZS×à³Ü»“ùùΡù©fK}—öÈIs¶OâÕ™ÙUiQ ÛÛFºE{úÁ,¬Å“ºO1Á9O×6s‘ПV¹ƒ)œœ=ù®‚÷ŒÚ}ù'm_ke¸A¿l³‰™ZNXUÙ™°ªK,ýy›ëÐ Icfð÷æ =ítûòO]vÂO}n÷³°Z°Ñ3P^8Â:†|!áÏ­ps«É’àª/Ä”æšßÂ1H”tÕö¶†¦ È¨—nöXÔóyÉb œåœH"0âªMyœx$Œðr¦Õ- =êÒôQuVè ¯3ƒâ!úe•qŸ204ÿ§-‰⟮0gÁj–‹‚6ú†Š¦ëg†XŽ^9nÀ2`†ê 1€uY‚G3h##Á=–>ÓUEY=ÂÞ’­[ˆÝ«qõ÷Ã2ü,s`y|ðz XèÌ(hZ¥·ð–†µhj«m°Ô½1¤Hd¹r»ÇÕ -–ë̾³œŒê.Ð NY¥êÄOžK+? g¸ÓÜvÝÆÙ5LhÔôÍK_Þ"Že1 UHÏB@ KEéiãZ!ÒŸ^|ßø‹ù´iÙR6Þñüs«³²¨þÒ{«ª#DFˆ"4DŒÜªHëVwËwÔ=M® ‹ mÈÑåîJ…Æ<ÃpëŸ\cX¼Ô2.ÈñZ´SÞƒà¡évŒ±U—„¶Õ…ÈI$JáÕ ><ÁÉõuÇ]PS3Ø CPGl¢=¯W2Ëð¶ÜŠñ‡hÞ¼0’@püEòzü!æs¨¸OðRøÉ-¾Ïzµæ áe •-2ò]ëðCcµ$ãÕƒ k›“9¡s]›¹+6Ú¼_îsÕSß,ˆ@PBëQÞ r $ƒ øó­Øç¸™±{Zƒ+=Ïaµ_-æ+µ©k$É yC6sÓ>ßWžk\1Œsšp*¡G·.°Q¨NÛݳ÷Q­Ìr·1å$téáÏ òu€c€ì+rö“Ú䲇lOMµSð¦ŒÀÊ­,‰_Ê¥°[Â2Xወœù.…ÅÁÆò×õ/qžŠ(*8Gmb±r*5(U+Ñq’sÐsñê.8ŒXßlöÊžÚÛ^š:UU´iíòÒ?ìCO{•*Aø”Œàùþ=jÆ ›± '¼ÄLʳ²å9ÇLke’Š¨Ù»v¦­«¦¶Äfi„Í!ÎyÀ 1ë×8C'T4ØL¸¨à"Ufñ±í´÷ã¢á½5T%eëy ²N\øqð³ëòÖ.¦Á«VÔ$bå·nìšIªÞ–ïÃú8_š“»ª™xyˆþ*ޤô5-¤ Ű:¡ISÖݶ­t¶Z¡†uB‚D_%>`uéž™üÔSc] ,ÍG¸A*gWTFˆ"4DhˆÑ#¢*¿«ñÿŸ\ë¡4âü4EBj)„®'“º¹E&2 o¬Ê<¼²_YòÒÑ=ýŠŠ'ßÜ* ®ß:PTÓfJvhaæ€IÈŒrÁXR(›1öG>CX‡¿¢ÚI3ïêšÏvêúIá Ž9êcQ?%:âgQÈç˜Ñ’‡Âl€Ùòê{û+ ûû­T–«zRËb¤¤†‘ä {ˆíÈ#vêËá4x8lt9 õ:€Ñ—Ûð¤’Lœ}ø®ƒzÚÖ×kÛÜ.𠜩;'‰y°r¤ŒçÏÏ]Ncj6 æ,2'Þ”¢~"VíÊ:ÃJA•¿aH‘ÉSpÍ+еv`¼½]W¦:€3®*‚j–ƒïŠìaŠAÞþ‹&»:=ƒS»a£¡ˆ#%lµHÝú,1rHÍ`”s?3³ †Våå= ^€N÷ʈ’_}î…zá5ª¢y®ôæZËzˆ…e,Å`›¼Uw~EžEbÙ €`¬£'©×M’dæ=í+ž³ a‘÷°(}÷ƽݷ7»m*Ý© í Õß'*±«r4ÊÜÌH—˜„JU´TeK¢8ý–”ììu;Øðû«O ¸ƒO½¨ÜI²UUÅ5E5žà'090b¬À€pƒ×Ù­©UÒ Ç‘XÕ¤iœŒo WzÐG6Ú¯0C3ʰ‰{ªl—”ÆCª¯+)-•ÀÃÏÙ«Ô©LõÂç´›[{[nÔõöm¿[³]ÞxÖ°Jjf^fG+U…ei Y³áÀ\¡•_.+¤¾™iêçÁh»X÷ªœÒí­ÃW«,–ú8çäš‹šNP'™ëʤ~@H\ƒÓàêÚšôñ2¥®¦s#×ÃháÞÆj‚»³tS×=y’Nákù’XTà8e ÜûõÀp=öß¶UU‘·¹á»Yž¨4”Ùb9y×£y àŒdk{½&Ív£bF!c{£Z/S3¼xa.ÏÙ²§x×\EºßMn¡†ªUb„ÕSIE íõµb}~ÝeR‰§Jfb0´§VýHˆœyÕ‡—ã×jãFˆ"4DhˆÑ¢&;ƒ÷Ÿû¢ê쫳´˜Ø?|À?æÕYš³òXÝ–ûC»#»Û¬O[ [š)TˆUÆ Fr=cËtuáR@œ6éd (ïûª^°ê¨êÕð__&>Z›Ïîýë;É>¨÷÷»©þ‘§ý-EúÞa.³¼–KþêSõ½‡;u=E|§¨õo^¤¹ýߢ]gyÿº‚¡O¯ƒÖ:ý—«ËKïîýë;Ë¿n§>=ƒ:ù`šúsž¿~?Å¥ç÷~‰uä£pî¢H;  `|)úû>Ë×¥÷÷~‰uïªpnÄr±ðþ¡‡©ýð§ÿ¥¥÷÷~‰uä¾ÿî®^eØUà_Oƒ×œ…êÿ>—ßÝæë;Èú ÝF ÿP“†ÁðûáÅŽ¼Øë×äÒûû¼Â]gy Ü[°¶‡õ+Ðõ7 ÒÒûû¼Â]g{ꆿîÎ÷l*‚¹/|)ð>øAêÆ>Ë××äÒûû¿DºÎ÷Õ_÷[u}‡P¾^w~>ÿÖtwè—YÞH7î$Ãڡש÷ÆŸ§ý-/Ôîó uïª$Ü®3àØ5 çåp€zϵ¿ãÒûû¿DºÎòW¿î±ð6CuÆÂÓ¯Âöä~-/¿»Ì%Öw’ÇÝmûfĨ^ u¸@|üÏFõiyýߢ]gyb»ƒvœól•Àè}ð§ê}Ÿ Kïîýë;ßTÎæÛžýp·SM´%§ŠšçòT½|%UT7^PK7R0<ýXÕM÷ÕÖ¤\h8êO÷îäþD~s©~hÌ–ûr[¥p…ˆbp<ÏO-Y•Wö—/pÝíIUu„¨Ve®©¨2Dàõ¿ nlr‚Ùéžšã¾æÌý×]Öº#ì¥í[—iY_Ón5÷®ð–Žh‹Â²*¯0E À ƒÓô뫵ôÛ‰•BÊŽÀBÝG¹x{Ê“nK´Bj~`•\îºä:á•°¹ÏBsH}!¬¨-«°'qϰ­RÔO.ï¹Xf#$> ¬Ê;¿ +0ê:ŒjÀÒʯêI¤[›…´qÅ#îêÒ‘Ò˜¹åŽnYd‰÷8f¦>]5[ô@Ïßk•ޝ|RÛ®\3™Þ¢çs©E§nó¿ï™pì9æ‹©†>?!¨œo~Jª5~km~ãá¼Id«ÞWž5H¥*&3s)>"ÝÑ%›ÈŸ²P=@jK¨t¸ mRd4-t[‹…ôÑ)mÛpœÛyä’J¤Ü†< ±1e¹Ktàž§Û }¬áãè…µ‰Ë5¿gÓìµ½SUYw…æ®I£y)à­’S/UcÊÑÍŸQ!¼–54ôw…רj]2Ÿ¼þù¿ñójïí*3²’ ŠÃF)¾¼¤1<иÉøô[&V^ùÊ«(¿F¦ò‹¨÷ËþU[ùEú4¼—Qï—üª·ò‹ôiy.£ß/ùUoåèÒò]G¾_òªßÊ/Ñ¥äº|¿åU¿”_£KÉuùÊ«(¿F—’êC^¸Ç¤Õãøëôiy.¥÷ÇþWYó×èÒò]H.djk3ü¢ý^K¨÷Ç#¦³ò‹ôiy. \ò¨¬‚Eú4¼—Qïüª·ò‹ôiy.£ßœúMf}¼ëôiy.£ßœúMf}¼ëôiy.£ß •UŸƒ¼_£KÉu㎞•Yó×èÒò]Kï—üª·ò‹ôiy.¤÷ÇþU[ùEú4¼—Rûãÿ+¬ùëôiy.¤½V¢°†¿F—’ê_|¿åU¿”_£KÉuùÊ«(¿F—’ê=òÿ•VþQ~/%Ô{åÿ*­ü¢ý^K¨÷ËþU[ùEú4¼—Qï—üª·ò‹ôiy.£ß/ùUoåèÒò]G¾_òªßÊ/ѥ亖+§u7xj*Ücª;.õix%Ò™z¿ùõEtÛ‹×™­–Ê:?N†«'h§I» ²¯.ys'AׯN½4´:Õ.'b¦K¶{ZÖNiÐ%g~µª™T§/‰™Aå`XuÎ~ a -ŸE¼cÕkK•šíU;L–ö ↨§enñÏ7ˆ7šô$œè=}"ZïaL8{+q¬µ-LÓÏ_FÅàÇ+MOÌÊ“ñ:–@¸-Ó9öL¶qû(ƒ}Ô®òâFƺRZŽÓ¯­ZšC)©¦§‘–6„ånUlt%½¸_/3«Ô¬i"UHTÌ*­NöÛw»ÍeÎýÃ}ËK%uÅ5EUG$߉W•Bò³P/PpOR5‰¨Ç8’ÓŠØ1ÍhÃZ÷.Þ¬ÝËÂðÊü••ròªº¦ E¼ª;¶ ¥ÂyrãàhÒðn™óBÇxBì”PÓÀ hB„Pª|£”r€òé/V»Ä.*«º¸?lÞ¸ï×Ï{§™ RŠ­bDå9—ädœóg>¿!Œ_gx’µesM°N¶–ÁmŸ.)îkQCÉ™éf#›˜u 0¯ÁÉ>¼tÔÓ¥£Ö¡õoêN8‘$‘l›‹¨å ·<¯`ds++)#Ȇ^¸Õ«aL¨¥ûs{¼÷Šù-ðÜ®Z¶ý—QèW:˜ã'Î8 1È3.AR »…Ãg®¸Ü\bsñ<½æº›tL}5&.÷ 7UÒÙr¬¸RÒÊ*4’¼…—™$qÈ€:†vaâPsœô½ã|d{öUn‹€3²mKåÒ*«"ï«4ï5h¨RnâUrÜêÑRį1pò®TŒ]CXç/~ª\ö‚ ÓËÑtÊ;uM«jAmª¬z‰!§rIcŸkÇÖ%¬““®¸-§rÈuI ;/6¡¥/ì©íl±Fˆ"¦ñktXveVÛÜ[žä)ha¾²ËPÑ;*¤¨UÏ $d2zdëÖÞÚe®vSö+z,u@æ·8û„×õÎp#ûâÒþBoÐÕze›½õVè–ŽêO×;Àï‰KüÞoÐÓ¦Y»ßTè–Žê_×9À“çÄJ_ÈMútË7{êÑÝGëàAÿð‰KüÞoÐÓ¦Y»ßT薎ꎣâ~Äâ?¶ä"þ·GGp’§¸§,JR%˜¨' ë×ÕäuAZZí¸f%I£R•_’éºì\ª­ÆžcÂMÊDr1J“Ëlìq=A$ü@¬m°ïµŸ÷Ûâ¢aí5À•…ñ—¢÷ ½ŸÄÕ²ÍÞú«›%£º³ýsœþø´¿›ô4é–n÷Õ:%£º×;Àƒÿá—ù¼ß¡§L³w¾©Ñ-ÔÓœ?TZ_æó~†2ÍÞú§D´wT8ñÂ]ÛµdÛ›syCW]YYI544³‘L]ƒÿጞ€ë*Öš)Ýk±Ãê´¥f®ÇÞpâëCËñë¹q#DFˆÑ¢#DFˆ˜îÞÿý¢þ}Qý•vv“ïøüÚ«3V~JsZ¬‘¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆBîßþH~s¬ŸšÕ™';|BÃ?î§?&¬Ì•_š×pÙ[NéQ5UËoQÏ%G ™å§ däø<ÞÜz½štÜd„9´Y-V%¶ÙmñRÓ£XiבA'$à{N¥­kDªç9ÆJtW#¡?)Õ”#»xI"^_á—DHŸ2~Sôè‰y„~]!ŒŸYéåÔý:"^@GR~]A^|ßø‹ùµ‹ûKfvS]UY"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DHޯâ'[ú¦®‚Á%}-@ŽHÊ„gê£$Xs§0Ç«˜ùkJ¤†ÈYÒºF—{ÍUQȵÔÂ'»C(HÏ)"¬å° sФŸ~«sLïÑkªÞ×*èÒÓȦNê.ç³Ó§¥ä‚<½õù B=þTèÁ÷øIý¬3"¥ÊŒÉàH…XÌqû/ |ü· U;}ñM÷þÊ %…‘T‚ÊFFG^¾Áo©a­R¯|%Ýu _E»’I;Á3%Ò¸'+Iœ„W ÍÊ:žž,,ƒƒ¨<™™[¶³‚9¢¾Ñv–³¼»q:…11î9á&<Œù€2Pó á1øµR×N.æT‡4 É9ÚÏ¿ìÔÔô2nm±V%‰Ukjkæj‰Ñ[9°¯7/\ógRÃU¸Hç*£q˜<•ºŸ|ìóI.ìµÉ•AÞ¥lXvaáÀÏNlÑ®Vœf›ç" ÷5Víšïé;~ëj–½Uhª.†<.U(&^o„|ðAÆu›ÍBéGŠÑ°Aà™ ÊšúT¬½ÑY¢…'f˜µÂYJE‘Œ0b¥¼C#ªä¯·T’D˜â­˜ÓØï&¥`§–Á HÂÒÓS¤’´$uåMŽ^n£<¤ dÝtê•kÍjVã··};Ô϶,´Ff—’ª3#9¹Ù%¹¹(è@õ9ÕË* - Ì=¢´Òí]ãn™*b¶Ú`)6fh¨çRé‘¥FU°>1ëÆ 2 Ô9©/aÖTÍ¥·'×ýþ¨D¸ŠžWV\‚®ÆD^VÆF‘×Z ÿÉPÝÔŸSÏ-4ÂxH ##R A„ëßÛ—Ý#üŸúõ7Ü¢ãQïíËî‘þOýz_r\j öáêtùš_r\j=ý¹}Ò?Éÿ¯KîKA¾Ü}NŸ3KîKIïíÇïæi}Éq©}ý¹}Ñ>f—Ü—n_tO™¥÷%Æ£ßÛ—Ýæi}Éq¨÷öãöéó4¾ä¸Ô{ûrû¤“ÿ^—Ü—n?nŸ3KîKG¿·/º'ÌÒû’ãQïíËî‰ó4¾ä¸Ô{ûrû¢|Í/¹.5þܾèŸ3KîKG¿··O™¥÷%Æ£ßÛ—Ý#üŸúô¾ä¸Ô{ûrû¤“ÿ^—Ü—n_tòëÒû’ãQïíËî‘þOýz_r\j=ý¹}Ò?Éÿ¯KîKG¿·/ºGù?õé}Éq¨÷öå÷Hÿ'þ½/¹.5þܾéäÿ×¥÷%Æ­U7:ºÈ„3²ã ô\u4¶Ø?|À?æÔ³5ÉNkU’4Dƒ:"å÷>?\,»³qÚëöäBÙa½ÒÛ½6Ã<Ï543ÊYyX ãË¢NHn´–½ÀŒˆu‹0sAÄ‚xL-ݰv]Ö–ß[A·êæ[œÐÇAÝVS°¥8VR3‘Ÿ>ž]qª‹u7?ca¨ÒA9x©ˆ{AØ®û"“{ÙÚ†ž:ËêÛi ½W­1©“œ#"¸q–ð0 0#׫ô¦º˜xÛ˜TèÎ ÉÀ&;ë´Å.Ы°#í׆†ñeºÝ*ouNd¤£J.ë0€?<ò÷…‘$¬R‘’œ¥RÔŒ ™ððJvbòF±Š¢Þûu\­wýÃ`‹hZù¬Õ8fª¸Ï ÔfªŠËÏïZ¶w I»PÀs‚9]ñ5Î0õfÿ%Ô߇‚Ö™8ú·wš”£í­ƒ™xOQÞÉ\t8«ÝuE=DÑŽÁDi"Ä%…ä ²«€~žþîß8>âsT6å³Ê}5ÆK¦íÎ,Z÷é7Å-ºµä«´Í] ¹(¥IäXÁ-IJ¹#”+`äôÈë®¶W¤ºar>‰mRÝð¹å—µ½mìm&‡oÛQ÷ MÝ¢’ªqï*UÑÔTF%sFpð,L¼Ë†b¹[n.¹€Æ'<$]N±ßÇ)ð@ûÊ”°öš—;Òm×µÑcÚ;¢‚ÎæÓ3Lî*)if3::©EF©*@æ<¨[Ö@Ѷ¸.’ãÕfë.-º{@žè¢¶åй[¹®Ü7¹Ãµi𹢬Ä¡çXƒÊA=ÃstÂó/]gó†œ#f¹ôZ|½Åá¡Ãå©åöVߦ§jMƒtšÜ¹¥©’x‘×ÑZqÝ’XiÁܹE.2¤XÛÛcQêª,.& ±Ãœú-RvߨXaÝ5>íè3\(h’h¤Ï}T‹"¨PüÇ•˜1€zê>cJíè1€Õ­OËê^»"q<{Ïl¡hØ[[t¾ÉVîV«žZV!YLOÉ)\»ór¼£ÂI$`jo»I®»‰à¥¶ÕÙÀ-4½¾øqS]Ien×µu]} jÕ4ñÄòÔBdÜså|§ÂÂ娤LŽ5©?ªÎò[ê{uljl†¯d^R[¶ÛÊDgƒŒÒF‰ÎÁðŒýç0 €ÞÍIø1ÓˆY(¨gy«Çx÷¶¸ÿ·kwܵWQ 妞 îNl´1̬ 3 ‘}y ùk¢Íie©…ÍåsÚlγ85Æe_5ҹѢ(]Áûà¿ÉÎu“óZ³$ïo~ãoåæ³2U~iþ®¨"4DhˆÑ¢#DFˆ o?¾oüEüÚÅý¥³;)®ª¬"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢$oWáÑíÝW|¥¤Qdµ­\Œ¤xƒ…9\¥×#áyÍ­*€•›IĪù­ß+Lj!Øô©.@rhTœ‚ð‰rF<Žse5c³ïŠÒ)Ì^XÕ\8…"3Ñìh#&3ݤ”q± …ó"`ø]F4&®¦ûâ€RÖåœïJŠõŽ=ŸCÈ¥Z¢¢Ü¼±°ÆKrËÌÊÞC”z΃HOg’ó[¨.•qFˆÏÆcƬ >÷ÖyT¬°ÄA\)ÐÁ©¼T] Þ3¨.A CH2 ×lô EVûuŽ’(bÇv¢<ãלž¤çÖzê ’ Œ’·5ÁBÉk¤`$.DNy¿Ç穽¹EÝë7¼;F#j rƒ)Ðä@öêoîQszÁîÉûm¦‘²Å¼Pƒâ>gðŸn¢öå7w¬ÍÝ›áPS/XþÇíÅ©¿¹EÍë4¿Ô¢ò-Ý/nK»Ñï± ÿ±Ô½|þ·çÓ›§àÒö份 ¸Æ£”Z©Pp!~YÒö份dn¬cX½î¦åPBŽï ÏÕ©½¹EÝê'qmÝ£»ž’MͲíUƆ~ú“ÒiˆŸ§ˆg×Ð|ƒY½´êEæƒ í/dÝq¥ZäŽ0öºVXhé«ÞÜ«wzÊžðô¹Ôуæ9r¤<…€­ŸTuß{ÅýN—Ê\ ~¨«>ãÈ~/”¸:Ú¹k¦ï¥@¤(\ãU&J°¶PÝ*(b1EXœ¶s© (-­ßT5Çο¯S¤*4aTUÿq‹úôÒÑ„}QWýÆ/ëÓHSFõE_÷¿¯M!MGÕÜbþ½4…4aTUÿq‹úôÒÑ„}QWýÆ/ëÓHSFõE_÷¿¯M!MGÕÜbþ½4…4a4ª©’²sQ"¨%@ÂùtÕI’¬†¡J4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ>ú «>tÑÿ_Ó«ß*—=ÿ©š/ħéÒùK'¿õŸ{Ãò4…4aT™Ï£Cò4…4ayã†ý«*8‹º·жlzº)ì÷~‘rP±Õf\§+T[kÌ¥m5^æµzUlb›âsWª(]ª©»×µ%+’W’¥q‚:u*Ì0O¯]±#%ÎisL«8÷5ç·mG³žáÐÒÈÑ#)#ÇLtó骛L<63VyatäQqšZØæSF=0œz<ƒ•”àŒ6Ô|ˆÎ¤W•SFª8½LÔ0ÏE½k6#X_* à6IÆ=¾ÏP-Ôš+uwj(%¹F–‘T(©ÒhÍ"3Xx‘³Ì¾g0uc^ Ã%ŒÆ+oê³p“h{_„S …H…Š‘ÍËËŽlƒŸnšcz!4"ìÊvÜH«ûÙ›·éjtʺ5‹q&´tôXº}´-úZiJ‘H%ýRë¾åJ:yßéÔéSD—õK®û'ͧM*h’~©UßiKóM*h’þ©ußs¤ù¯ôé¥MÄñ"çæ#¤Çñ$útÒ”Ñ%ýR«¾Ò—æ>šTÑ%ýRë¾çIó_éÓJš$ïooZ»ÅÚ: D0b{µpz úÎ5-©yЪæ]¬àägZ¬Ñ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆœZè’¾v†G*seqíøõf€J«‰ ÿÔå1ÿ|Éò£W¸/”}NÓ}ñ/È>.¾Qõ7M÷Ì¿Õôip%ò©Êo¾dþ¯£K/”}MÓýõ/õ}\ |£êv›ï‰~Aôip%ò©Êo¾dþ¯£K/”}NÓ}ñ/È>.¾Qõ;M÷Ä¿ ú4¸ùGÔí7ßüƒèÒàKåS´ß|Kò£K/”}NSzê$þ¯£K/”}NÓ}ñ/È>.¾Qõ9M÷ÌŸÕôip%ò©Úo¾%ùÑ¥À—Ê>§i¾ø—äF—_(;r—ï‰?«èÒàKåS´ß|Kò£K/”}NÓ}ñ/È>.¾Qõ;M÷Ä¿ ú4¸ùGÔí7ßüƒèÒàKåS´ß|Kò£K/”}NÓ}ñ/È>.¾S;­¶:£‘›œy±êü«š¬×*ÎþÝ©²6Ì»ŠJxåÏ2Ë7vª¬H.[cQú6^[Se÷ÝTkwi* µ$5vÚ;MDuýý;ÓÞƒ,‘äu!z®Hê:kœZĈâ·6bÓx-Ðö‰¦¨j)íöé#vUŽT»ó#18½NzcSÒ„d8¨6b'’ÑAÚV‚çF— +TôòžX§Šö$lã yzõcÚÔ Xp‘T›) ðY[;IQÞ¨#¹Z-öªºy†ažšö†ÃÁÆÐZÄ€8¨6bÓž Õ7jjË5.Ý¢”+”fŠè\jJ¡Áøµai\Ô§i¾ø—äF—_(ú¦ûâ_}\ |£êr›ï™?«èÒàKåS´ß|Kò£K/”}NÓ}ó'È>.¾Qõ;M÷Ä¿ ú4¸ùGÔå7—¤Éò£K/”ÂçEër1 œÝqíøµGÕv’äßUVFˆ"4DhˆÑ¢#DFˆ"óýªÍ+V®5ljà Êø «“Ž_˜Éë¯4•Þ]– åŠÐa·½¾æ­Séü©|su†UR3ëCVk`AP㌅h†WÈ•=¢ƒº ý“¸ Ž£›¯™ÖÚlæ±Ò¶säšQð³tñÖìŠ`ðLW†bG°‚ÃU_Ýæ¬j·QäŸSðæýJa‘v¬(Ñ‚šõ<¼Þ~m×ñ꓆¥]#N´Ú»†[†A#Slªydb#ÝŠ+£ÅÊÝ:|ZƒEÝÞjEV|“»gï´•‘UOµV>X–'îëý:[©øüõfÒp9sPj4ŒÔÐÙµ#¡´Nr~GÅŽ1­.‹;ãjC²jXø­uGâÅ‘ø¹ôÑîKáeõ2ž–éþ"ÿçi£KéfÔm›Ë9Ì?¥¦/ûÅ/ÔlÙǽ³ãÛ˜zÿÒÒàKé>£ª3{gÐ;œÿ—¥Ä¼—ê6p2-³~>çô´Ñ¥ùöR}FÎG[lÙû^hsþ^š4¿ WfKÔûÝ8éÿüí4a Ó«&Û–ÝrJ¶£•9CÌGðXK[C!Xµ¢¢4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFG´hˆÈ>GDFˆ"4DhˆÑ¢#DFˆ"4E!·v?òGó^žj•2SÕdrmÿÚé²÷åVÊjGR`hMéWž¤*уá?¶J&F?cÝ‚3“®*¶§SªYÎ_uÙNÌÚ”ƒçØÏ†NÓVš{-,÷-¯WÆ¢ZÒ£åV0‰–æÏ#å@leIÁN˜Û¢F)Ñ ã8xÕm¦Ü´{vák–7®žž(¥Y’š•UÉoË çZtFqÌ,ú9,./²‡¨ãNð]ÏxÛ´[f—»£JÖ¦šu™Ši!FÁ‰™„¹åL NI›EKå må AgeÀâvs•ÒlÕÕvêj›•¢ÔÉLQMÞ,¼ÃÏ#>¿=v4’ÐJäpÆÍJ„˜onˆ—DFˆ"L7·DK¢#DFˆ"4DhˆÑ¢(½Ëðaü-þmgS%¥<×4í-ÂÊÑ|Š7¡ô˜}5eÎ Yn`q×àçËÏ\–›º9.«<é„f¼ŸG`ì/ 54ríHiÄA`hkY`Šò®ø=1Ô`kÆ»ðóŽW¯6ñ†<úM½Ø×fVù(à°PÔ$ËUOV’H 22“9À Ⱦ~Ðüz°m†™À(.·<]ĬÙûÒßßpšÝº·¥Y&›ÒÜ:0C0æéŒŒg¡Ï·OúûØJúâØÆ½·³_g;¬T×›'mmK%?ìsI#¬MÁåV€`z²O¯Z -•ý`ÕCj´·ª\U×jlí±²-Þòí+%=/9oG¦Rª…\à“êQøq­ØÆSÑs¾£êq•+œü5uš4Dd|&Ša(QwÍ©hÜ÷÷¦vîÄxŽ¥Ðr‚N|$uÉÕÆ»5£^æä™ÔðúÇ5¼ÐS ˆya) ž•#'>,–É#'Ìê4Mˆ £¦TLÜ$šnõNèý²FsÞÛU‰l¬I|ž\ùy~ PÐßÉ_L®jÕaµ›%š–βÔëxü¾¼g§õëV¶ë@X¹×œJzCy9ü'VUXH’ýÑÙ·]…éÕø#^ÂòRèˆÑ¢$Ã{tDº"4D˜onˆ—DPû‹÷b$?9ÖU3ZÓÉGêŠèÑ¢#DFˆ"4DhˆÑ¢#D^~ÒüL¡Ž)jêc‹¿‹ëfIÑUÈ#<¥‡‹×åå寜éuFkèz%#’ßúæ8¦ÑF ?\b~º‡§¨ùzþ×ãÔôºÊ:-!IÚxGNªw=8c–eh9Š“Ô¨'Ô:ãâÕ…¥ñš©³Sœ“Û7·ÍMâŽ8w3N§ªQËJªìOØ€¬O1è=z³m5 †*®³Sºp]Îñ¾·}º¹ÎÞ¶ÒÖS´ä•\¡Q½C”¡õøzëÐuGƒÕ^{iÓ#¢e·ÒÒÆ’íÊT…ù•¤7È åg`Ny:àdùôÆ5Z‘—0­¢§9òMx‹Å}Ûµ ¥M©5s¼Xh¥ž4ðüpÇ9Ç–G¬êµk=‘w4¨±äÞÁU_œd‚Ú]¯kŽ jæåò\ü¿ ñçXôšñZôj™à–¯ŽœY¦ ôzÛ qKî™îQ/zA*ÅTŸÃñhm5€‚‹=p<“šŽ9ñzîª6Õ GÄ ¨òôÁËйö~=XÚ+ëEQg¡·ê£w7hþ)YÖžIâ·Q4ôÂC´é&2ÌtoV1íÕj¬ÝÊì²ÑtëPµEu¦ÑoX2È&tŒª¾ƒ›Ë$`ùôÖ]6Ó-:šsXÒö§ã”)Ku²ÝGM2•†­Ö6È\Œ·ÁÆptË@‰!±ÙõWZáo÷éÚþúî+•*TzK*¯p‘’˜O)êA ù®Ú5œöK—Z,càîmç¼( ”V«4u”ñiªZå 3)æfs̤¯+`ú½€cVÒ<`ªÜ¦q%6^!qZÒðm*G^PÖ÷9O‹<œ‡Åœüž~­F–¬åÌ+héF|•‡†»¯vÞ÷œ1\¬‘ÅŽD’hîÈ YATæÏŸ³ZR{ÜüBΫÖ`WV¦© ¤”TÝ%Ž8xÞC€3Ðgñ‘®À@8®C$`¶Ýîõ©ýü·™™Z5N`uÈ=­~ŒÄ…[•s„´»£`VH°Qݨ%vpª‘°-Í1<õ5!ôލ,ª3 cÞ»wÞqüÝ^¤”{ÙoûÎ?›¤’“Þëx8ô8þnJ¯Ý»:‹uRlæ@õÕ`•)‰Tè̼íŽUæ Ø©å>ÍfjS Ö´ ¨X]©NGl¡fŽ<㯇Z] ;Ågïe¿ï8þnJ=ì·ýçÍÒIXGGk•Ý#¥Œ”`ryùˆÒ’埽–ÿ¼ãùº@I)…ûo¥ÎÍYo¶Ì)'ž™ã†ª4ë ²|`ªæ4€¬×–¸¹ß8ÄîpžÛ±ø™Çû¦í¾QÍ3VnYèÒ9+äçUd<ܼ‹à>]uÏFÏQ”Ã\ù;ÊÞ­¡¨\ÖÀ÷±[aØ×Ù Nã~Ör³ówEb½<=Wèzã>/‹ZhœGkè©¥öTÕ¢À”‚ž¾¨Õ¸v"i¢Pܤ’åt3ñkF°›žIÁ<÷²ß÷œ7V€«%a-®ç––09€ø²p4†„—Ÿ½–ÿ¼ãùº@I(÷²ß÷œ7H %ö[ÇûÎ?›¤’°z+Zʰµ$|Ì QÉêÏçÒ’埽–ÿ¼ãùº@I(÷²ß÷œ7H %ö[þóæé$¬#£µÊïRÆJ7+O^ÿ8Ò’å™¶PŸDæé$¦7Ú:jzxÚ>*ã#Tx+°’V½º?f9ÏûŸùÆ¢žjjd¦uªÉ"o% Ò™%¦ä%If@O„å|Ǩ’G³'ˆ d­m»TêõV:9Y?k2R¡)åå‘ÓÈ|š‚Æ›ïÑŠgµÒ™)ÏÖÂ¥¢ðòøN2¾OWM.¶rKÎŒÖçµÛdñKE Í–deðºãןn¦‰)À*>=J„¹ã#DFˆŒnˆ‘XÙøôDRHR2<ñ¢ ²6ñè‰r‘Ñ¢#DFˆ"2‘Ñ¢$æ_¶.ˆ—#Û¢(ÍËð!þ1üÚΦKJy®sÇLJÌ2ךÉÇ4ܧ¡óè|½ºå´~ט]4?wÈ®}·6ÆÛjáë¼ÒÒQ3K‰(-Õfneb¸hä¥g'?/C®f±“Ö8xEÐ÷>:£/UmÚ\)á.ó–J-³».RHÞa- ÁÌ x‰ï"PrOãÖôèP©ƒIáøX¾µfbà8þTnìá†Ü±^¥´¥î&e ¥QÉÌ|<ÄH}˜ÿ^¨ú,k¢}ðWeW9³ø¬mû7nµlTn"”²HëÏ5A`uð´AÈõ«: lœðóôCQÑ–>^©ü{c„rÊðÁ¾îîêʬ‹j|‚ßgºÇ\yþhÕ®P?Èðü*߯­£ŠÊ«ipš‘cô­ówŒÍŽèµ©‡73r¨ý«Ï˜?n…”ò¯.ÈŠü­ÞZd\äbòÀ'›Ëöê.P‰¼x~—מÈâ¶E³¸Q$Š‘ïkÃ*¡U´>C 3ˆº ‘×Ù×Ë®§GC¼x~i+lUJx=mE*Ê]b©–4b¸%UÊ‚~< sœ i‘(ltP°l !ÿ|EþZê ‘šôö½•å#DFˆ&Û¢%Ñ¢#DFˆ¡÷îÈÿ’ÿ>²©šÖžIµ²¦¶6’O cÆÄuÇàÔ’¤¸»ê~á嘾yú57 ‹áð\3ŒÅóÏѥ—Â_©û‡¶/ž~.¾¿qõ¾yú4¸RøA°W6‹çŸ£K…/„¿S÷l_<ý\)|$úŸ¸zš/œ~.¾ýOÜ=±|óôip¥ð“ê~¼úãùçèÒáKáSõþØþyú4¸RøAÛõãì£ùçèÒáKá|›ß\mÚWXmÐÍâU£i==’VA<¼Ñ7/_`øê•šøÜ¾¹”œÙÞ›ÐVÙœj/ª#§>µÈ:Ž€õƒ®z ,ê4êt+mhëM¨XÞêy˜ö©ÀÎz¬ôê5"¼(4eYö÷h½³Kx¤©¹ÙnPM*-iŽß4¦H¹Ô¼f>PX0È ô:»m-0T}™Å†+ªYûPör¡¦¾P|X*ª˜ÓR}CÔ÷ežA€ùÍŒ§îm¦ÌÐáî\N³ZIy¦;kµßdUY¯[[p·#Èi }“3*9Ry”-:ª’Nz©üz«m6{…®‚—Y«éš„Ý}£x_h·MźTÔP[–*QY9Él7tÏ™Âã>­fûEœ†[–Œ¡hã½G?pb¯bÉh—fÝ)s$T‘mYœ1ƒ/ŠPÇ>Áªièq•ôÅIžk¯h^Ý6U*×Û÷ •”a}K¶%fT-ðCUǨ.zá´R,ƒ3à‚…V¼‘w§›Óœ!¾Úi¤©¢Ü3ÖQÕ6×™¤·V‰°rF:KëÑp×#r†P¬Ârƒ½W8‘ÇNWÐú¾Ów–žšÝIMQ·¦UNVl¥¦òÆAòòÖUkÒp³bÒ•­2víPv¾.ðö§a‹MЏC<«FöYJ@ KŽì(o—ñk1VžŽé SJ¥ûÀ­5ücÙ5ü7¥³×Û®³z*f’),2°ˆ–ëÈL\«Ó¦Byhj°Ò :Rp©x.¥ÃnÑœ§Øó¾øÚ×Jû•2òP¼›:¦r‰Ü¢ª9ÀÇOg]uÑ´Yô}q'ÁrU¡hÒuL3ÃŽÔœíé5}ÓfÞ ­ V9WdT—‘‚¡–êÆ}§ZÓ´Ù›‰ø,êYíÀ›³lpÇߣsÒTŒƒÌ0ÃÃæ>^½xÄ=MD«qšê?ÞPŸý±ú5¾+ ÞÝ~ò‡òçôtÅ0PÛæû|³íZÛ¾š¨ŽØù°Ìr03Ôùk:ŽsXHW¦Ö¹àÌ8}KWl²“µRÙ7tÿK¨œ´èì)ävb‡íOç9ø¿ƒ¨ÆTá xšì@>‡ éêœýœT`—½ºýååÏèéŠ`—½º}çåѦ)‚mI-ËÒjJÑÓ(Ï×Ú‹P&J“ƒ-×8PþüýœT`šßÌG”Ýï=<Žªü•™šÕ·v?òGóVžjÕ2SÕdS÷— ¯;–áC¾î4²T×ÓURåJ&‡ÕyO+– [$Ÿ!ÓXT¢çÌ;g’ÞV²%»|Õz q ×AMi‹‹õ^ƒIA«åÑU@,yóœ¯^¸êOS¬º=P"þ C^‘3s_v.ì»ßncŽsE òHih4AHŒ@(X9Ç)Á>`ùèêosê#j1­EŽÈÚ›¢Ñv¡|eP”ì·i—šnUe„òÿ±8Àðòõé…&=®yJc†FÄÊ“mïÛÍÉ©i;G÷³Šj(טr*†Â’}¡˜`ä¿«Â5@Ê®8TV.¦Ñ4æé±÷-ežÛg´ñ¶*jº“ҧYŒŽÌqÏ’@p¸~lrŽ™:±¦òÐñ FY[©ö~ô¡¢¯·~­Š²ÔÛ…=#99‚q)fŸ«ç›¯(À±ÓR)Ô‹ú”Ó$šÓK†ÌÝõ~ŠbãðaüòÄò¨ï¦ÎU €¼Áp8ê:‚FªiÔ1úŠÁìÔNi¶f÷·_ië¯\m içŠjº9›EÂ÷¨rÕY³€0Fså« u/U5)–ÀbÓxØ·ÝÈõ6ú®9âJ¦–8)æ*Ñ£H^8ÉW”€F‡¦u¦çÈ/RÚlŲ-ƒÄ¸úGë…šJdšI^1œ\†Ç„7Pp}z Ug÷0M%8ýµmØ&ݲ‹]ÿ}Gx©YžV¬še ÈîyGŸ>øõkz]FÃ%aS®ékaL¶å±#aîô ã8(zd ùûHZ_nÕK®Ø·[®tw8E¾¥&Œç–HÜ2ŸÆ Ô‚$( ƒŠs©P5¼\©¬öª›½gX©`y¤ :áT±ÇǨq i%HÄçh½Ô>Ï2@'ŽÇº l2Þ‘ÔcÏáëÊùÅ—aà½?”ZvŽ)º‡ÙÔþÄn‚sä-ôôùÅ“aàŸ(µmQý”.Ï v}Ð߂п§©ùÅ—aàŸ(´íR7º‰Ùß8ÐÇÏо_;Qó‹.ÃÁOÊ-;GÚ­[ÆÓÄ•eß'¡ÝhÒª”Lœ®Ð2äuÁÁò×x¨Ú´Úñ‘\%ާP°æCŽ`7°À7»Ooì¬-µæô?wÈý»ó‹‰*^¶´VËÞŽì¢1Í€êµ9ÏUñ©å𑎽Zñÿùü¨ÑПÿ×áusÔIL‚ªU’NE,ñ®ŽH8ëêλ[1ŠãtN ™ñJ’¹÷=t´––”´0«8Û«T*|É9ˆÀòuÇXæ)û®º$\ó²in³ÕÔÑÓUÏcªj—Q%K.Þ!É Þié”ô^O«ì²*H9~U‹€9óü+O ÍîšJ›EMô´0DK –3H¡›%ùOxÜÝOUéÊ}g[м ‡„,+]0gW}t,¢#DU~+ñÉÂí²›Ÿqî[}¢„VÇ MÂæs|…Î9fåQ×͵j­¢ËÎ07­hÒuWÝh“¹FËÅí­KKÍÅÝ¢‰GÉRZ@JÀ²“õ~MSNÁüÆö«è^ÇÞÄ£‹{nJxj`â¾Ö*QÚN ¦@ˆÒ7*¬Ä¶Yº%>Í4ìï~i¡tÁi÷ä±£âþÚ¸QÁ[IÅ]²éS KªvURìy{Þa…Ž@ -v!Ãßš.Ÿ~J¢œ%¶^o•4ÜVµÉ[,ÒLÔÓ«J¹<Ì w¼Ã”:úº5†€9Ä_ïzßLZÙºa?ým·'˽¢üvÃúz¿D=îJ,lIúÛnŠU“{BY]\fÚ|Õƒ}¿ÅǨèŽï'JFo ?}m¾gýá'úMuÅM£ßšæš{¿%—£ï/íµ³ù„ŸétŠ›G¿4š{¿$z>òþÛ[?˜Iþ—H©´{óI§°ûòXH»®‡yµ‚pÔ.:~WOÔÚ=ù§Sa÷䓼Üät¾Ú¼³Ö‰ÿÒê:ûG¿5=M‡ß’…¿q6ÍzÛo»¶×O<‘ó¢{Õ;s.qЫŸ#çìÈöꎫpÁ#Wm+â@5ö¡ã§ *7GkŽÎ°ðÇvSݤ§fˆªŒZ9Œ€y‰a€zr몕JµÒ#t}W-Zt©‘pç¾~‹ºíÏܲ+þa®¦d¹ŸšÕÕåßÝ­q·Ûk­õò5ÆWŽ)©¨d–y¹i¤U+ à`#$€2N³}@Â×ï‹FS/^ðÚ¡ªxïµc­zjzJ©ãŒáçEP?äfm,• ³¾%%W6ûÑI%º–rÊW¨@?›ƒid`‚ÎéÅ4µq>ïŒ%º•ûærº„”N‡•KÉé×È`ûu ¬çä¤Ñks[ìW^ÅÂ’õsº¤ôž/I¦­fˆŽ^l'„uü “އRÙtÌàŽ†Äª6*N(îäô›}Ú¾JebDµlˆØóÇ\’=ƒ>Ís´W©‘[8ѧ˜]Olš{~߀T]Þr©‰*j™”³3ãÁ]Ì€Ü×仪{ÓŽ›/`Z®û‘宼S[iÍEZÛ'*–åAÇœgÔu…KM:@»8ض§g©T†å;Wß¾é‡f¡~„ÒïºÉ’ vk%-¶Yåy4 ÍܧFnc’Ç Zá©ñ[+!ܽ…ÝOáv—´Ë}ýWâçºç¼oQÒTðglÑ[Ë@¢®®¶Zœ71îyU|€`_ÅÊØ!uç×øÝC1 ¾‡Á©‰Ò\OxíMûMè¾ùqvGÉb¯% áðøŠçúõçTeAåßMÔÌÃSöÎò£ˆË'šEžšŸ.­œ²ýwÓÛëÕn¼×¾*רOe½¾®SÇ䨉h¡¦Ž}}\ž]:‡'{↥1‰o¾ û¶¸yÅ$¸[mVŽ2ILþ™ S˪6(ÆEÃá³’¨œt²•i?’ç}JPIg5Õ,$ãýEnâJÖ2+ÇPÆ´{ÅHÍ#a°ç”á21áÿ>»FÒK¢¯ ¸ÝZÎf—2šl®ñæMr{wjŠ˜(üm" %çÃ’Ks0\ŽHÇž¢ MÃpð Õ+Y‰Q»…Ü{£Û‘TTv•ª­‰¬AÕÏH½Ü|Äçø'¦|\Çðê¥i ýÉÃ`Ve[9| qŽÒ£ á*öFSŽõs@Ô¹ŽˆÚi¼qá<ÙÀé×á~=g¢´}¾Ai¦³Šª¹ðÓ‹°ðæ šÎ:NÔÇ‘Ö#o¦ÖKrÉÏÌ'Ô¹õüZ©¥_E%ÿEfÕ¢jÀf>iöéáwFÛˆVñÖ¦¢±wT¦ÕN½×OæÈÉÌç9ë«>{½¾AU•¨_ÁœÊ¯ñdqb×é+_ÆiådµÄX{×N¥ à,HY'¯Ç¬ªÓ¬Üß«`ZR©EÃsP´[_‰²ìÕ¨^.HÐú#*Çï|¥9ËŒ‘޹ù5@ʦœÞä´.¤S_©-úü>Px¡RÔÆ0¦/B§ÉN~‡˜°õã9ÕnTÑö°S~ž“²ºÿ¸aÇ»×*ªl]¦f³R÷„KOï <¸Å:ó?9Â>!®ë=+K©È©ÁqZ*ÙÛPNOŽõ;Ã~vƒ¬±4öNÖ³Ä AïbŽÅI7+r6àõòδ¥BÒ[…^AgVµ˜;\ÊÂqøq-©$íePÕÆ“ñ°Róå—“>.šNš4¸ø:k6‹ö°ñ+£öá¯öç©®»ÏSîhí­E –h †æy“ļ„åâÏŸMuY©We¢^ùÃbå´Õ úÖF;Jôe\0ÔÒ<3Û¥¬Fåæ§…°Ïâ¡Èòóü^¦z—›–µ]aÛï-Cž^$̲ÉVA|ÈO0ñùâÙòj…­Ç¨Uƒß }ºÛm¤©ôˆ8gs¢e©CéRUsÜî9Ï„úý^YZÐ{$!$ÿ U÷Ó*óûÛ/ŸÛ¯Ó®©;4 ©¶¬ ûÛ(ÿ ~$ìHUˆ•SUY©¨$¡”zMÚŽ5!—' ÄyûYU=P7ªÒ¦uÓˆêi¶}|´Ö†Nê7«å@£.’$¤ô=I+ÔúõZØS8{ÍZ—lb­WÔ6mò°aÁ—¨öùëi;P6­ž™Uý¬—ç/Ó©“±D ©}2«ûY/Ï_§I;ÔÚ†ª¤TÕ{eÉ•OV_´_P “‚’ SŸLªþÖKó×éÔÉØ¢ÔzeWö²_ž¿N’v$ ¨ôʯíd¿9~$ìHS{eURÐD¶^ˆ>É~CIŒ”¸ Íoôʯíd¿9~LŠ mKé•_ÚÉ~zý:IØ6¦÷º£Mƒm—öÅòuûañê 1’æ·úeWö¶_œ¿N¦NÅ6¥ôʯíd¿=~$ìHQé•_ÚÉ~zý:IØ6¦ÒÖTûå÷¶_ÚŸ>%þǨ“9)§²¬ÿæÉGøkôêdìQj=2«ÙOøkôé'b@ÚLªþÖKó—éÒNĵh¤«©U8¶K“(û%ûUøõ™8) @ÅojÚµ÷²Ož¿N¦NÅ6¦·çi(âvB¿]ø'ðUù+3´µmßÝü‘üãU§šµL”ƵY#DTýßÄá´ã«š}³q’**êhfœSø^9z™bêyÂ}——P}šÂ¥k“†P¶§FücœªÔ}¢,Õö¨¢¹ì›°«¨Œ,ôo•Fe‘˜‘êcæyIò#8ô¶–âÓ+^Šàì…½·ªnÕÿT{çp–†¶Xç4ñ´«ÌŒQŠ¢··$¨Á[˜Œê•g.7šL+Óm 4]p´åˆ䥹íÞß%¨¡hd€>U<ÒnvòPÌØÆO@:‘¤£ µ†B›•±pÅ>kß,Þºh¸}QQ+\d¥·Ô f’V‰DÙ™³‚IõÎ:œjר6¯kºZ]©C¶áà?¾õ·¸gqvi•æ©Bß\‘gÂãÇÐålúÁÕ/Ù¤›§ÙW»h€/•ÃtðN+rß.<.¯iæ«YÖ ˜­DÔ‘Ïž¥€bSž™è_gKP2¹0þëåWÒév¡¨áµtA)޲ZUÄ`Ã"‚<î9AÁèO–¬ãg’.åöUh¯tÙ¦÷MóÀ­ËESºnÜ?»Õ«TÓA<­wŽã¤~|–Paæ3†é¨5,ÏŧR‘NÐÓt8-­]Áêj%~ÞP$–³£—œù¬„0%˜€¹?–¦lãø\ÿ0¶Ú®­Ø©xqp§˜Ùj™àœ2w°¨I>3ss.‚9IcF›9ÂéȨp®1½¬&sîÞ5¦­åá¥ÈRÔKu,±•ä‰(æçp¼ÃÈ7AÕŽ5ök§ªaZå¢ðë…ãsöw¢¸ÂÕ*½S;³ÆŒ¨Y#Væa‚ÁUóeÀË5}”Ê5–’;K£ðvM§6Öj“·ª-ôOW7ÖjU•‹«r³ÌÄF|ÿs®º2Π€¹kßë™*ß­Ö(ÑFý ì{Æýë¨ÿªmR§íŸz¸›*v‚»j=™T‹6ªWŽ;~ᨂš9‹ú2QÂTäu²“æÉêã‘[t“¬$ƒ€´0+Ãêªȱ£¢‡%S—ÃÍË‘’:ãÕ¨P0”6’u+>ÆÚìë7¼¢àõMß¼Ï3ĨIcœaz/êÖôéèÛ²¨óQÒ¦ÄH¸^§×­hX£O%ÑV¬ºîx¸?êõÎ{enÞÈS{s÷,?ÝÌ5«2Y¿5 s꺢it³P_)M Þf€ZAÈ>ÝUÍTµÅ¦B¦ñžÝb¶mxb¦¥¥§‘êTGVeÁÎ05Ïh [Ð./ÅrÄhò½Al‘íò×ìVj+æñ´XŸgÒ憹yahFJóuusŽ£#®5°uF¶àÖ²-auã©^¸_fܶ:^âé3ËM4 ð‡R¦;¾V9=ƒ<õÕE¯hÅsÖs\pVØ)ᦌC (ˆ<•(€ o,$•Ì»BÕïÈ£¦ú›µ[*èãe54Õï 4œÙ^tIñ©ååèAælù qÚL. ®Ì)ɼL®û'wÐìË…šªË³Qn‘˜îöêE¡bÅ9zV1ÉUnf$kÎÑÔÈŽÌ9…èij' ¸ò+ÅvþÇ{Ò»›N\­”wjj™#¸ÔXÃÃÞF]–Ÿ¿ Ñ$¥ñ3 (f^+lU]Ré½—Zé w¤j‡²N̵[ihXÞaª–Y§5ecç*z÷LUzd!ëŸ3ÔêæÈȃš µ:dd¦÷d³¤ÉÞ,¤¹ˆ2‚0=ޏü:µI€¡ƒ,ÕR³…–PêB¤fW,å‰QÞç ó&¨dûü«G¿aV¸xZ’z¤BªÍß:9= Y¼¿_V“³ß4¾ù+om5ño M{Þ£ž¹SówuÒ8Ïx¸È,Tþ­é4é•W „BôЦ¥ë÷Aåï\ÆC0ò·‘ç?ÕËz­&\¼§D54ÙÕM²î|ó<¥CÍ#epƒ®LŒ~þ}VœèʵH¾ò©x,tu 3}O‡Œ:–æ ·ðO𿳨z£Á]˜¸ø¨{ue|»5kçDYý › §^bHÿ ¯·Y‚nJ¹I †à–i¸sEDü®iâ9‰Š ’½GŒü\ß.ªïÚWoî§û§6àh tx1¹Î9—Ör?]Yý•VvÕ3ŒrNÕõ’Ӹɶ ãá?ÁÁéña_3à·¡õ/:ÕaïZµð¦¢Y¶Ó,Ó+1,ZBÅY•I'sçñþ-mG°±«ÛZ–¢«õQ#¾!;¦Œ¨fåÇ #§yŒü|ŸN¢N™N%láøeâª(ò›Q$sž\ó?\s`ŸðGáõkz_½ä±©ûK§ÖÉO½MMDH¡y¤¥Ⱦ!Œ×ÏÏâκÎrĪý}Ënz\ñɺ7ZžòNeŽ 9u äAüùë2Y'´Ð0 uª¿o™¹©wà‘…RZØ»'˜x:Œuõ>‡ÏRÒÝDªí`+ÿ¾Ô§Õ7ŸÞÏôkªB悵›+¿"‰z¸ëÜ7·ðj/7JæÛ_}]·Žâ´Z7,ŠÉW[u¦’’zD‘£ƒ8{Å §°V\Œ¨êhvóå©u>›i´–îzÕòó%Ù}íš) TSËŠ`a̤#Ëã×K¡Ø.vËqLøwZÝ™lš¬ÌÓ¥"ÅPâ€/ccŒx”ê):i‰SU±PÂ÷Ú†@›ù»ýÒBÎ Þ“Ö&þnÿF’ oCq§Zš¢R^³)…Ø/ŨIRA€œ›­/¨MüÙþL…Qï­/²o/½ßèÒBAJ·*wè±Íùú4S{e·BYeêƒýůðjEÕ.òßï­.|¦þlÿF¦Bˆ(÷Ö—>S6£I h¸Ü z`%ý±sõ–±ñjD)h2·ûçJ:boæïôjd(‚}iså7ógú4P.t¹ê&óûÝþ$$Þk„ã1ÉûKÿ¸·Åñj$J˜0œ­(Ã7â§sþmL…Qï­/²oæÏôi! £ßZOP›ù³ýHH+E-Æ©©fI@2Œ}a¾Ô|Z€D•$ yºÒã¢ÍüÝþL…SKü¢j8¤P@2tæõUý•fv–½»û±ÿ’?œj´óV©’˜Ö«$h‰•T´Ô᦬‘QWÍå~U_Æp1¨03R$ä’ UzÁ¨3)ÂUVâx½l¹9°Ú¬•t“ÔLë•zêªyËbÇ¡zÅÚpî¨ a #Qd¬ãJÜ ƒoYÚ“Ä*d‚àÂUé•*9pÃ8: úôi´OXPágŒ •¡.¼k!'M¯·vUdCscË–#9åé…Æ¯'Ë×­Àâ­vÏ”ž EÂáÚ)$&Ý´vÓ$|Øç¯p¯‚¥[<¹^œý0pqª“kœR—Y)åæåƤ l[VÀѬP5MsY—ë¸c ß$sf¬ãhÔ«E d¬êæâÕ=udV=¯býñhf–­ÃKœÌ y’ã¼ IÓ‚`’˜Úê8Ó 4pÓl½µC)šh–­Y sÊ2Ý|@’^¾Z«M È H Nd§Iqã‚E •[Go†u/4ktqݸø+ÌWÄ õ€1Ÿ.š™´ëŠˆ³ê'‚ÄEÅ™.T7yv®Þ5²5S–Š>ôa•¹CÉÌJyscðéúò ý"JÑvŸ‹·h'¦ƒbmééEK4®ª-ÌŠIŽf*~G#ÕÓ¸vD)n§´e-qãÙ"» oÏTs÷UÅÁ œÈàòá[¼ëÐtÁ·¤;6„ä⬻*«xT­T[ÆÙMO,5 ´òSHXM Aø>xǬ‚uµ3PÍð²¨)ˆº§µ¢Í"ˆß¹ú‡¼gÏÞºú¦Õ*~ÙðW§ûƒÅ|¥ØWþZöô ¼6ÄÕ“­JIÂÁCEÝ*÷ly†Fy.y²#_IôƒzÁ}…FÕsº¥?‚÷ÂxmÔòɶ*'«Wš9Q34D¹G#›!u_<š°u ¹b«v´æ›ÁzáÔV‹mAÙóµ}#¯¾Ôƒèç9#9ob©Ç›dj©]c­MÚ·Ž8-;šóÃz­¶)6ÞÙž’äÓ£´ó»0XÕ4jň`XóŽ‹Ô‚uu"ØhÅKT:\p_Gø¸ìݰÎ|öÕ'ýRëê¬ßÑÓð æ-ÕÔñ)§ÃÃYääGÅÆrH2­— ‚=yõê-?²|Bš»äW—†¼!–Jš «VØ/)W¬§“ov( s²‘âåæ>/VO]yæ• A‚ïkç'Š‘Ûýœ6&á£÷ßiì]¯YLr‹QG·U”*Hó鎞ÌjͲSp–´pTuª£L9ÇŠµÔðÇ~ÐÛ_ÞëbÈÐÂ{ŠaBèá\󾡜tÖæP0 Z™v%@Ï·xñS ¦‘{Æ\ ÄŽ€> ÀR zÉuu‘e§¸µ½f?ÍKmí‡Å¥!’ñ´žÙ"¶)Ôd{yÕ€ÿ>´m*Äb!fê”AÀÊ‘ýL7ÏÜWú:OÒÕ´5=…]-4à îcóû|€ÿ•¦†¢ii¨KÖÙ⺴ÒÚ¶y­OIX(12³(eÈs×99Áé^³s+€•£_DŒJkA]ĽŸ»­w9¶á¥£j§ q¾ #‘YBIŒ70Ç_03ñj Ö¦ðcb)=„N*ÙîU4ïY ¸¨Þ&g&ýEв“èÒým¿Ehìú¨ źxôµ µ¸le–XÑ㯪ƒ˜g˜\€=}=zÍÏ´ÏTŽKF2ÍàSI7h%¯ô¸ïÛ}íë†cé0‰‘•l•$œæÇ–«¤µNb<•®Y£#+EÿмaÙïu¼îkíµíVÑE î^¥ÁVfO…˜P1æsŸf¡ÕëÓ’â xJ–Ñ ø ž ™{íÃR(,UwU¨//¥Ùc1òõæ|±¬ñÁn߇‰Æ8­;g·=àÛ?ðºJå¬ç8Km¤4J½1Ö@Ÿ<œ¨gÄ]l÷/ø{g«—ŠîÜâJñSa®îF«(÷ ≪éÄO„n^ª:yçôlµtÔ¯/:ÓKCRê¾k¥s£DUJ¿ö×tü0Õëœöϒݽ¦¶çîi?”ÿ0Ö¬ÉfüÔŽ®¨s.ÑôµtÛ~ ÑEj©­4BE’ U ÅJódnW\v°n^%Õe2ë¤æ¨¼/²Vqgo͵¤Hé{ƉڥÊ28Ç2€È|º=sQa®ÛÍ]5œ(ºë—Wá~äÛVñs©c-dé‡f_Ú€'À¾¿Â}zî¡H1²s\Uª˜Ô­ê¡}.·X¦·tº½®¥l“Ãc@Â’Z˜™ãIH<¥ÕH,¡°H:dyêzéŒÔ¶ì‰Éyã|ݸ­¸x³ï FË­ÛÖj.U«Ž‚y'¨¸1ÁdI\¤QļØó³³„Ëùu]QÕzÀ7k^•6Óm.© Ÿ¢[=¢Ùhº”w úf©– +i­vú ª ÜÊ­?0åËלõSƒ¨?HôRâç6#Œú­pß…ûR5®ážÙžÁg?4,• ªÀ—(îÊ[OU-€0}zcLG5&­gáPÊÑqážï§½}[_÷}mu5’Z°mT’C4¸fDæU#ÌäcÈA£P:ûŒ¸)X[tåxosSñž–ž #³NWœ™i“á>""|Ä5óîÄ^^ø4u&r¯ÕÉAc2xZõß_\±eHöyùj™LÒYÑ[8Ýv䥣µíÓ b •L¥—ÖšŸ{5!µ]±Au6íV­`íi¿ÐIfk'|+àh –¨ˆ™ù× ü¨<9ó:»i 7ºÎ晕جu=¶mñà²ðöBò7|“UV*( ü!ÞdcÅåëνôé=žkÝ k’o³ª»mE³kâ¤ÛÜ=h_™œOQVŽ  Ï*÷ ÂAÏõjÓC ]æ¥ý ø™ä£·öεRR×Y6¼–5XLu•JJ–a“˜Ç)ëö¿‹TwM w-êíè`’ Ïr¤›µ„;gÑͱp”ETšÚ‚ܼ§`:ãâüZ¯ý`luy«Ò^™3ä™ßÇjfÙkKSeÙ‰Š;ŠŠ‚ãaþaUÝ.æ®jÍèšI“>Iöᓵ,¶.âªÏ²Ly‹¬u Ýqáå`~>š—t²ÜCyª·¢`O%Yâ=GhikjçmÚ¢O{~Å©¼#Ÿðž¿‹YUé3Œ-©t`0• @xçÓîR—n÷B‡áwÓsuËÁÐüEu˜éc¡Ð_Ö£æ^54OEcäîú0’n÷á¸1ùÿƒø5S§ÑjV&¹]ƒ5=­ÆÀ®¦Ú6]†Ô›žJêÊ…˜IÜ&p2<±Ž‡®zkº¶hˆhly®ýH/L©®UvÜ‚ÄþcáԦ˺ڴ“8îS ^κ֙¶†õnóYÔèEØÞò…©$í¦x’ÕMgØb Áû_¤Õ9¹>ØÃ×§ðóñj¿õÚ_ã>p§þ‹Gü¹.‘Ùþ£´üÜt§ýTm6I´Ê'kÕ(n¼œ¥Ð/ÂÎzùc]Vn•Ò?R"5Jæ´t]RfuÂô„ÕMN—X¨Y@ÅTÈ ¡ÈA=sðÂש1®›ªT]Vã™j¥GãE¢0¯(îš’2#Öûƒ×Ìüš©yžØR;…-öz¦ 7­·é šxéÑI†W ôaþ/-Éþ`¡h4…w7;jŒµÆʧ]2<[ß¼D±mºeµÒÞ©Mê½lÔM(-Q7@0¹êªHfø>£¬ªÕk‰ÉkN“œdŒjKl[¬›rÇGh§¸@þ‹N±,½èæqæNsë=uf± J«Ëžâa9žãoôØYk¡ý­ÿÝGÅñêÄ‹ÁTVvÜÖ]«¹·, qHé]¢¹õ%Ò>te—”yh‹\ ±>dëÓ{±Ã5«ÃžÆáŽK ¸£{Š×âmœß#FÅæºD²¤.Ê;ÆŒg̘·¨ã®wEèÃÅN…³‚¸%ÖÝäkáóè{Ñ×úõ¼…„¦‚ão5@×ÃûrãëËö‹ñêT`'^ù[¾ÿƒò£éÔÈQù[¾ÿƒò£éÒBAG¾Vï¿àü¨útSk]ÆÞ(!Ít?µýÕ~CHº¥ÀÊsï•»ïø?*>L…Qï•»ïø?*>$$Öãt¶µ?Jøm_÷aí ‘ @2œ ­­²ÂÁÞ§S!D¾ù[¾ÿ‡ò«ôé! ¥÷ÊÝ÷ü•N’ k-ÆÛïŒ?섵?ûªÿãÔH•0a9;n:\ ü¨úu2AKï•»ïø?*>$${ånûþʧI 6¤¹[Å]Nk Çx0{åûQñêT`' r¶yîc×™GÓ©¢ g¸7£‰ã`TÉЃÐô:«òVfkNÝ?³cýÏüãU§šµL”εY#DUMÅÃzKÛWÍÎ¥e®¬‚¤¥Y5#D¸ !sʪÃÍFož±}éÇ?>KfÕ-Œ2òU«·$ªË§/t±$[šuål;9cÔð±ÓÓ¦±uš‘ QiâŠ~m·§¬ÛŸª¤æk}É*\Š¥CËMÊŒøpŽ[¨ ƒ@¢È-¿‘á‚“Uâw>x¦ÿ©]¶¡E®›Žu‡¼¤jCUQ³º³1!T6sÕ€ödþ F…¹_S¦#‹e&Áضy`ˆqTÇE_¥Í 9jZ'Œ’z*žEåó TÛt5*âµn^m›‘©šíÆŠ•[•dÍ¥0ŽpCÃ…`xÃã åTù4}—極^"’‘ÜûsnÞçjÚž)VÃO<ÍOH($ÊA8Uæ%—#˜8 …›¡ÕžÆ8ÍõF=Íu1£á=Î)­4üp¨‘g­2C%Róö‡ÄKy1!qâô¨¢…õcTŒn$Ü{/gîKµFᛋ“Q%Lü²C'ÖË…/# •œ€0êFt}:oquø”kê1·n)±ìÇlÓÙë8»TÉMqžv«‚µÊÆ!bXøU€` ‘9¶·/Ö«¤uù¸¢j¶EŒEO·ªøçZØ”ˆù J²ó/6Hè£'ɘçT4ÛƒtŠâ£³¸–~mY)`¶1‘ $ÑK"š”úòGª«áðF$Œžºh•õgÌÜYŽí¸è'²¿n+WîÓÏÈù ‚B“ÊìÇeð’€tÁh™Ò¾fæ ªYÞ h!zjÁP rÔ”cá:ùôé×]͈\n™Nõ*¢(}üÊ»òÄôªœçù&Õ*~Û¼ ½?Ü+ä~Ó³G¸QÙd¼RÐ¤ÑªŠšÙJÃ$» Ÿi×Ä1·ˆ ìÞë ˜•fªá=šž‚œVÛ²´1Èés“ÞV<ªXÊêN5±¢ÑüÂÈVqþ%-¯…ºët7x­µéÚNíE<³•š6t ÊÃËÃ’¥³Œ©‘7ÂĺU{tØivíZÑÒ_è®Qµ2Èg¡bÊ®ÊAŒœü%ÆáÖOha€ehÇ "ÓŸþÍû qÔmªLþEuõ–oé)øòÖêêx”Ëœ‹ÃIä“%ÊŒ©åÎ{ç_–«iý“â¬ÿ»äW7³Ûotµt¯h¸Û¥’6 <ÓÊ%ñ1'¼\–Ì zµÊÐàDG5ÒâÓš¶G¸8°‹ËÛÛ`gÕ·%˜kpúû‰m§ŠÓwÞ|aµÚæ¹&̳ԴIÌ £Úò¼¯ÔtE8æ>¼gÕ¨5+7G"bO_ƒŒü^‘ež~ UF±GÌÀìwæpO¨säœdòþ eÒ+÷?µi £ßþå+câï0¾Ä¶Ð½#ÍvÓ•`ÀcaÃ~Ï#«¶­wÈJާE£´LïRŸTÜ[þçöçø»/ѫ߯°p*—hí¾ k7Tq =¸x`´ hi,v>*é¶aÚ©¸"©ÚÛ:€]éà=)ûäG‡›àã8Æ™ÎuÐË—¥£5ƒËîÃŽ Øk÷ñÎ6ÍP$ýí?Ó­æ¦ÅŒSÚ˜î ÷-¶É'°ðî²çSÌ¡iƒÉ Ÿç”`{|õG:¸6UšÚ$âèQož?2f«5ðá—˜  l)l0zàx±ìתi-:é«èìúŸÉIØ7noT·¾×Ûšž¥£ˆ–yR¥J¥ ‘ÊÀ0 ôÆ »_\ÍæÂ«›DD:T‰®ß¾­³Yù þ[õ6*þžÔ¢·~çSUŽ þLÔÙõQöýá¿ñV–¸› ꮬ²Æó¨¨xŠ8\«vÁ|ˆë':°82V­m1t&µ‹ŠB¡ˆàäóÛ»¹W-c†™›½ ‡ Œ±'=|µRêÝÌ=Ê›´{ø¦Û§ê–ïKs´q„¡l• UÕ:Ö©Êa‘O2€€ >l|z‡ß ‡³ª–\?ÉRî¼(àu-©³p2ÛU8uÅ>jâ,¿e†$€GN‡‡\æ˜ ×@­h& Ï%£mpÇ‚÷o¤î>P[* ”ÒµTÍËêbÈÜ ž½³ãÔ2•œŽµ8⎭\kç‚ï]ž-JͰÚÛ³¬°Ûèéî•+èð 9C–ˆx†IϳٯNÊÚPÑJó­N{ªKŒ˜  ë¥s#DU:¿ö×tü0Õëœöϒݽ¦öá‹ ÿÿ0Ö¬ÉfüÔ‡(-Í뺢]3¼Úh/¶º›=Ò•¥§ª§’ÐHT²0å`H+OPA­Cš ©k‹L…ÂøyÃí‰Áz³ná½—}ÓZÞçé"Õw‚ªZYUBJÙsò¼Ç® óiR§@âr3ù/B­Z•ļ¶c1®vŽÑ\$¬Ý·-©`»Šš»lŠ+c¢)eVÈ­ž_ØÆA­t6×@Ô-iÉbë-pÀâ3]†ãAr€TÐUG4gÉã|u¹H Á[¤8L©P¼×¹o·M»¼[oÜxkºciîRAIW¯¾§¨`’:°xÙðŒã™Aêê@×÷ÔºZsؽV4:œ‡*Ù£ŽÃ[LníÅÀ­É±à3bŽ-Èñ¨ r³ѹÑsYW˜aÓÎGÔ[ü–•©¶™€gßšê4t±A%žå)‘g`ýâ‚ͧ@UIÈÈÏ@Gà×@ + È]geí %Ÿnˆ`¡oÙ±)©J¥^g~(Êãøzާ]Ô鵬ñ\Uç;Á|¥ÞYÙ-LË=LÜ¥!··Q‘öÈ«øÊ•é˜_`Ê5a]Åm‘!5í[årÊ–Ðy@åf<1ü?תšÔÎ*E*ƒ%³xݱmõMI5J®Ê ÍFW ×Ì*n¾­]•é´Â«èT"UÂÏÇNÛot ŠÊ±5ð<®-ó’¨$RN9zôõkfÚ)V.¡T´EÔvÿl.Ñ×ßœÜ.Èõs;ÄÇmNLªU±ðb'ádõ×cmÖp]‰ÇräuŠÐ@ÀqLö'knÛö}ÊÛ<—hj%çæ„m™yO€ å! ­;m´ÈÇ‚š–;Cžßò£·k ÔZiMMÔ=5‘bH›oÔ( K`~×ËŽ£®0=z«­” xlVe’µìvíLmªxHû] µ÷nùi]EŠ *à |½¬ j¢×Fî|•’µý\SMÃÚW…7]›èF[„’˜ n鬶O[DP dõ^¾­UÖª.gáY¶Z¤ýÓë÷iÞ­ŒÁo»]Có‹ Øåæl…@ÀõÁ×V6º7p'‚«l•¯IŠªq/œ5ºÖÕWPÕWÎ=íUD{\êÌþ0=‡'¦¯XÕ´Ò$Áä¶¥gªÑBÓñŸ`¾ÓÂWÕ‚) …®Q’r˜ÿ£SONäJÓCP»%?6T¼741ËVÏÝ(hÒÚÇͼ‰1òãüPÖ§¢…aEúI]“‚½ª¸+´xy[k½×ÜÄ­+L)¡±T°e4ñ¨RBrƒ‘ÔV»¨[(2™òܸkÙ+¾ #ê§xsÛ VËCSWt¤nýŠÆ6äà@Á"8UG–=½5¥;u­Æx~*X­v_R´¯l>Ž&5ϼ¹ú9ƒ÷XÛÓd·vqÝsü^‹QÓ¬úYÕà Ñ¢ºèÜí%ÂŽ&qÒŸlí;|µsZehý"Í4 Bs΋ê#׃ê×UšÕFµ¢ëN­‹šÑe­J…ç {W£Hªhˆ¡¡‚¦R<0Ô6ºŒäŸ‹$|`kÕ©y†5¦“Óîñ<‚-¶ÎZNS$à1<¥¼Ë§ØuTžÈN¤vŠZx7‰Rã´¬pEé’hææn^a‡”u~?fí`)êê%[¤†5ëÝ/ž~é­à,$®wÁú]ɸ/÷ýß»©‹Ç%pKC Á£<μ£ø<åsçuË@=îsÝåàºk–µ­k|üWFŽž! ‹W€k­r­‹[ò r>O øµS˜VOâ~Õ¾WÜ(jöí<ηm·U@¼©Jùc+ƒƒá*À×ÇŒô³H»¯ඤö€ojÄx«EæÉE|±UØê!䊪  . «21ë‹[¹¡Í-Ú±k‹\ ‚Ú[Ê›í]ËUMK|‚_GššIš¡•AÆ:s+¨æΣÍN²§Pv]Ÿ¿ªÕôÏi¹+% FõUkȤ —ìÚ.µ%dfuÜF}Cæ£VUGqÚ/Í";ˆýh¿4h‰½¶j‰@<ìGǪ·%gfœò¯Í²ªF§ 3üQôhН¹wÜ]Sní›M-ULh“Öš‰4…°£™U¼lÀòŒ`b}YÅïuë­ f5±yÅbÛ¯sÙ\ͺvC%(R}&×)«)“Ì€ÆpT7‘™‹ïoi¸nÅ.1Ý—c¿=h¸Ú¯t r¶UѤ²¬ÍôàoM‘Eµ`¸AÂJÔ§º$µRÛÍ"£s£wyuåO_X_<êt”Ã&æj4u âöI”w½Ÿ Õn¶þ\R©ê©êc‰cbPàøpž§$zµ[ÔÁ‘L«]¨D„·Õ°nÕî8#[SRôê“ÕM@crpÌ"'ác<ù`9T·_= é8Þ¹Š€Ê€]¾¬›mpçzmš;­?ᤂžªV‚ž¢‘(ŽÃ 2AêW#¡Ú“)T`!°²¨ú´ÞEå>œ:Ù)Dm©¶h„8NäxrÜÝšõÁéŒ`{µÑSˆ…ž–¤Ì¦á\ôµ‘ìº8WY䥋»v970ëÌ0:ç:¡³Ñ".« E`fSš®l:ú‘[_¶ášefe’NbÀ°Á ç¦zä™$úάhÒ&HP+TS{5¶Án‚Ïh¤ô´Ñ ‚<ò¢Ñ@9è5£Z d³s‹Œ”óâÔ¨Fˆ›]()îÖéíuˆZ¨Z)T V=G—Bu*A È\A}ÎnÊê‚3³k¹G7Y‰ׯ;åV=œ×Í-›y ûœ½•¹yFήÆ1Òé7Ä=¿Ÿ*±ìÝSõØàN#Çì®4iá÷V‹>ô¼UÜ©âŠÓèòN‹ÖT[%U9øoËáQ_Û lÚŽ$aÉdæ4 Õœ&ìÇûe°ÿ:ý¶ýM¡eÔØTvç¤â¼öâ»;xm*ûÐYîoÞÄɃ‘„ ÙÎ1×5WŠäuHêÌ4Aë”U%³´:Ö»{ðê^YŸºŽEúß^ldœ,z½¹ÕmC75XºÍ©®RZ‡ŒQ¤¿VÛÇfÎy—Ñ}ìc †æçæÏ‹¨ÆÎ:ùêÌÚ!Uæ‡ñÍKònÿî’Åüî?ÐÕÿShâ©4öìeÃnK²*£ý ?ShSÔØT凋ÒÕ©mÍ´bc<+'¦ —™XuaÉÊG.<òzfý<õHWa£`SWýY…bÉàÚ nĆZi!úð*q„aáñ § Õ^s­ú‘•ªÿwâ…®W;ÕU’åm¤0´TVÚ!%DÁƒ³ªƒá“§*ŒsœçPçVd“nÍK[IЂªn6]æ¶”°p¾žñH5[QY9Fy••'?ý{uƒ­ŒÉlÚ œ]ÍkÛ|qÝQ[¹w‡ ª¦«2Û´ŠF¦$ËgÏ'8Ѷ‡ÇY¸îû; ê» åw~îjÕ±½øžÅ5´=Âq4ô+NÜ¡€ T_ž|ν++¯Ò˜ŒWiheH™Wít®thŠ©WþÚú½sžÙò[·²ÖÜýË'ò¿æÕ™,ßš‘ÕÕ¢*7øë²x9?Õ4•STUó4”ÆY ©±ò  2HÉ8ç¯i§B/k[ѳԯ7T†Àâ.ÑâöÖí¹9¨¥•žਇ•ãaÐÇ"7‘ÁÎB# êÔªÓ®ÉnJµi>ƒáÙ¯.q«„•›Cs\긱éh&¨Åæ¦Ö‹•)ÍÌ¢¨,!²½O.01xöŠ&›Éccl/bÏXT`¾éÙ*™Ã¾ÓœbáÎ䨣³¥M\5QSr <•\ aÄŠs•×Û®zVÊôŸ [U²PªÙ<—¹¶¥ÂówÚt7-Ãhô êšXä«¢ïyÄ '7¯ó×Ѱ¹Ì ù÷†µä!|¶í)¿ïÛÇWíËľٛ“iÕ[/ÕtqXl7ižÑ3€%2¸,¥’I˜ À8-h«UõÉsâ ³búz©²€ dÈ{W¯¸[{ÝÛ³ƒOqïÓêïr³¤µwšP«ÍP²%R€(™dè9|guê±Ï}&—œJòÞÖ2«šÑ€\ïlpw;çÝzo¡C6ϱ킛RãnÜ•hÈf§Ž®8ùšYÕ•Þ1LÀëÑ«RØFm~ WV¥NÆZ$쟯×5é.×û’»nvbÝÛ’×z¬·Á¯ž¾ëiwZª:u50•ß½Ž#¡U'™F=ºôíŽp²¸·Ø×ÉyÖF´ÚZìêWÏýð‘¬È"ŒÊG*û3ökŸ?ŒëåêÀ…ôÔó*¹áyáÍ$TÀH¢D Œ 7×Ǭg׬ÌO¿Uq1ïÑLìZyÞ½¦þeäp²,€„,3‰[ÌtzÒ3—¾*•2÷è®Ûv–¹-JbBMÒ˜r”g½\g:èglx®w“pø.éµÒš¢é¹¡Š™*Ù„Œ±¼ÀŒa\ž˜Ï^Q×Õ¯AK—žù jáõpöå*A,ò¿:” a<ɰ‡œ|xÕi¢*ÕI5¿²ƒÞ4tvŒKmô˜Í…s²«0çf8~r—Ÿ1éëÖu, ì$<ø¨zKM²}Ža[2”z2 ço²nn™#? 8Î5œ ™- Ž“5¹­ö˜xq8é$r…ÀÌz匀„qâ?›Uxn‰Y…ƶÕ'¹mVÚ¯5CB#‡¹1¿?*ž|à åIÆOŸ^§Wx˜ª0õJã% ;TR¥24PÙã>Áæ$ :’3íë®zàb7.Šœwªå¶–šM‘–¥^G¢fdðã’z‡=3ü.žÝdÑ­I:EQKB8h*cŠ YHææÆIï9écój„ ¸'J½ ÙžšŸ…7Zh˜%D˜f@F<^²Ï^¥–ïRómXÖ ÏŸF«Û’HÑS2Š¦Â¤qž^‹ðŠ»‚Ö´`µcW&œ°0Ò Sû¡\!lrð{ÌÿÐü~½GúêØè}ûæ¯ ‡ŠËC+lÈ*«Ó«QÈù1ñúµÑJ4ÞKž§ì®W 3R¶ÌÒ¶sª ÀêNLçZUÀCF%gLÉ—˜³m›=ªÓMk¤¦Q4 C-ðT¿`ÖcZУžâe;÷šßë§)úu7Z¢ó–‰mñ]ËÖ7ÁÉþǨºÙSyзûÍoûÜ|§éÔÝj‹ÎHlÔýο)útºÔ¼å¸66ÛÜvém—[bI ؇epAʲ²ÊÊz© ùcUu6qÊí…8ÁQ’ÚÇGQ¸ƒ;½ë[iìþõ){Né±UúZ^-Ú¤¡…gnl‰ˆX6%æWeåʰ=rëæ3v½†dDmT-pˆ3;¥Ž«mî*ºY*)êéäfUž K!*pFAó=]·$*:ûL m6õÇì_?ãóê×Z«yËM²Õnz[Ñ@Ì`ü#ôêZB—9À­²Yèèëñu?N¦ëT^r®î‹íºÍŽÁ 5Mêp«KB] cŽö@§ÁŒ±' ’F²¨æŽ«{KV]’sjÙ­·ihI53ÏP²ÖUÌÇž¢RT8òè :*€£ Õ›M¬j©¨ç¹KÉh #Á ƒž[éÕîµRó•z»ƒ{²Vž L”ùï ®®ZNrIÉa¨läõ#=|õ‘³Ò:£Ã ¯PkŸT}ÃiÚøa‹ÞܵƖ¨ÑMÒØ…‚DªpjaPNGW^€æøKâ©`£ÖhÃXûú«‡š¸8ã«ÑZ"¢µT×A$0Æá b¬¬H*ypAÏP}ºÚHXË §¾ó[¾ö8ý:›­QyÈ÷šÝ÷°ùÇéÒëRó‘ï5¿ïqòŸ§K­KÎMé-6öª©_EQ‰GÙ7گǨ l•%΀œ{Ën#˜Æ~MÖ¨¼äÚÿCGF0¢^ƒÙÐê’–v–­»û±ÿ’?œj´óV©’˜Ö«$h‰uÆÛm…ªn©)¥™Â ž€dàj IR9-fçMYO(µWBÎá¹ù•XŽ…°|½ƒ:‹Àä¦ÍU¯òqbIÒ·mÐíª˜âiZ šú‡æ ²ò”(‡”rsƒÔ’q×ÏX;O2Ø[4PÉÒ´[*¸ÙI4)s]¿PÓÔPôÒ00ÆU¹Y¼‹y*ôôÐ@8Â’,äa+\ V¾8}îÛR£wb¢DªG1Î:bH9P}p1¨›Tä,Ñ­IT¿Ñ«&£Wf¸"QÅ,Ò(J`[™˜’禖S«ž‘ŒGáTh0™M>ÐYR!;qW»ý‹'<‡,¾E†:sdƒŒòã§ž«ÿU'%?ôÑ­<äãQ·I,Tû}jÅZ„M/+AÊ9²Tt~lãÌcZ·ýEÝR£þžuÂk ö„‘‚UÑmˆÃ3s´uS¶ ®QÔž‡ÔÏ_-Wþ«r“Ñv•aÙt[šŠÚStŠ›¼&4¡Bªªz…#Ë ’2<õ­0ð޲ΡawUMkEšù…ÿtÄ;ì}ïÂÔƒŽ[“iAQn¼ûáOa¹ÍL*Ýf¢1»÷n¼Ü‹Þ(ÎzHØÁë¯â•M77Ö±ðÊB«]?Eâm§ÅÙ7†HÛ¶.ý3¸ëÏÿ§óþ­xO¶ÔÅ{L±Ó:‡zÛö¾××\;sq s(QË{¬ÈêNGìŒg¯æÔ¶ÙYÚφËEº‡¯v^ ö­ºûõùñ!K”<¦óUŒdÙG×ëöc[6¥¡Ã´xŸU“©ÐiìŽÑXíýš{RÕ9ö÷âGŒ€P^*¹qœœ~Èή¤ÿ3ÏÕP›8þ—¢cWØ«¶ ŒõÝ8ãDjå˜,W? äç$œVI?µ›Dgÿ×ü–1@œ¿ùÿЇ»ö=í}oÓÝAãA` ø®þßÀu¥vëúú« tN¯þ}RýÙû¶=¤¾éc'7Â?Ϭi¬ßò}V³QwøŠ¡5Ÿ¶>̼ÒÞª}Ð,]a¢©If¶Ön9’*¤V¢ÆêÁeIRpAÁÖ·Õ#™õ[²ÁL™žCÑTëxãÛ#f_=ù›µþý¹E‹(·×îJÑ „v#rN«#'9(ªsÍ–2-u"O ÙXÃ08÷²mÒ÷~ì}ÂËææºÏ]q­ØöÙë«*fiiZ–6vgrY‰$õ$“ë'_Og$ÙXIÔ¾j¸Òñ½W»pñ†¿€ý›îüLµl‹ná©¥¹ÛiéíwiÞ:yz´…YÙeå2sd嬭•t6rø•­’žšÐ1šðÌžêÇ¡D’NÇ|:SÞ…îŸvË—èrÊL`‘x¿4döÊö>Zð1yãø[¨½Ô½ë-I7~Ǽ7 ˆ®}&]Í.ÎÇwÔQÔ|Ñš˜8~T†XÜ)²I»à¥ÃŸéJ¿ô:|Ñ¿í~iòÃþáGöI7i8•8t?Ö¬ú>hßöÇ¿4ùaï”ƒÝ Ý$”xu‚FG¾•}÷:|жå®ÿp®ƒÙkµæâíÆû ‡ ¶öÅ©«¶ÕÕRn-³Q4õ0^zé²ZúU`ÀÐÓ´.{U“£Q/$»qÉzÒM™ÅÉR&‡´mBO:¹úš§ä!¹yKGŒ3/+×ìüMzú:ßîr Ê¿Gý¾kl›KŒ•5I-7hWR´t6¤ N`{Ö¶§(èòõênZ § «~€Óæ¥íV¾'Snš;­_bª³ªºÕÚßorÉ/Â*â`I PF1„é×:»[X<é#î¨ãD°‹¸íŸ²¹¥/‘wÈÿ“?Oê×D…„ …#x€ÿø«ýHH)=.í$þm'Ѥ„‚K£ûI?›Iôi! ¥5ôÌ|JçÿÅ_èÒBAA®¥>©?+ýHH+= ÉÓÖ)ŸèÒBAYûáN~¹üÙþ$$¾ùAÿüÙþ$$‚VR!.‹&O¯Ñ_èÒBAYûåüoógú4VïHOFþ^4¼éU‡¨;¢êñ¸+ÏõR". ƒ¬ —•°Ь;p~ÇãýÓüÃZ³%›óR:º¢1¢.CÚ„œIÞ5Ô{—†w*Q,U4—P8̬Œ2 ©nF0xmT*Ô!ÔÊí²×¤À[P+x}»¶6Ú•·åÖž²ñ[?{Y-$xP©lr>,PƵ³R©Ms‰YZ*²£úƒ©]¯øƒmÙöª9m6ùî‰TV¦‰ê¾Xš2U™TóæÆ ëñëžßQ¬"WE†“ª8ÎK…pkƒ»÷Œ|I’è¶š)¬”òCW_XÕo ³³+w\¢&^v±Pp<¹†¼ë= µêÌaïrô+×§B”N+܈‘w|ˆN<†¾‰|úæüHì‡Ù‹Û¥w¿8¶o×…ECp¹Úc–GUø*ä  œ s¾Ëg¨ëÎh%t2Õh¦Û­qsŽÞwØ=”vÅ›n‹uL±Üê’Ïl·Û Bf¨å,ˆ9°‘ªÆ®I$U p-¾£,Í!tØiºÒâÀUƒ³-íø­ÁÄšù5ºÝ¹n4Ù¹Û©¨#2È ~R£3p<µ6C¦¡Ž<‚‹P4kaæ»ZQÓ¥·wC¹òÈrc#ÙŽšô D. 3+ä^êâ…Îw¤z~nÌfFXƒÑqðXäëâ_X˜ê•öŒ¤;Á0ýS.¤Ío®+Š…óž<œùêšC=’§D#0·Ú¸‘s‰ezînâ ÞP!'9éÓ›c¬Ú‡[J‡Sà­[_ŒµÔuV길M»åh.:Ç52w²‘HXdœ`kfW Ž©X¾ˆ õ‚ë»s´õÞšçzŸõ·ñC=[7v”Q¿tp|%L‡“Ìykµ¶¢ ý7.'YAõ´mnÔWضeM$½›øƒ!8gŽ–&Eðc«™Kg䯡¶²)ÅÇ)u”Íö¨ÅÚ*ñp·Ó%_g½ù-™Pw”‘ŽqÌÞ.nó8þž¨ûKˆì;%vY€=±šŽ£í vu)Ó€ûàƒF›Ñ¢f>>nó¯áóÕE Ý‹…XÙÅé¾=ÅÇëãì夋{ÍOs2ÕQÆB½IdŸ×ñãU} Ü‹…Y¶vß›á>¼ö„¸›Q޳€ûÙ:Ç—‘'ˆ2ÿ§àÔ›IŒXU[f!áUø“Æ:»½uQ—„Û¶“–Ü‘é‘X€\ƒ•~ƒ$|šÊ­y'ªVÔ¨] T4PÍוΠg§R5Óf´–ˆ¸F×5¢Î)Лàã©z.¶H‰Ú¦ª¦À^ihÁ2/‰qËŒúðÄN½MKĮ́7©°Õ\f¤;Çuw”XØ"ç _ z/ð|ºuËK¢ñV‡0ÛUM–i”Òî]Ç,VŠ¢±DX‘à9\}Gâè|õ--ÔJí`'ÖûUËqq.{éÜ n²ÆôqP¨^Yj$Dg˜¶9U!UAlj‰ë«†¹õ‹§‡š¡pe(ŒN*Ú–ü ›PsæDºÚêÊòËÞïùeGåΗRòÑ-¼ŠèA­¨ê¯~‹B:É=U¿Þá÷íWå´º—‘ï~?ß•?–Òê^Iïsg÷uOå¿Õ¥Ô¼›Ò[Õ§ªŒUÔt”™¿€¿€f„ä›]¶>ß½ÔÅYv·-T´ÿ´4ç<½AÇ—QF@8ÈÕ]MŽ2qR*9¢ewá^ʽֵÂågNî$iVfF.!¶Þ}^ƒUu n2B°­Q¢Mׄ=ƒ¢¸;ã $·š‡déÈÅò¸õcCÙ¨ÐSöJ;ý€µ[xwq¤§ŠªÅÄ í;´|¯é5¢©s‘á˜R2z©úóˆˆ~ª]T‹GÑm;vVËÜ^ø‡_5.cJÅub ÿO¨XTläxª–‘ÁO%:È9£­¨a€AyƒëÖ°³•³Þæûò£òçèÒê^Zih3QP¢¶§¤£'¾þ üZ‰Bp y·g§¦Ôý®—Ròm¸»£‰ gyŸ?#¨~JYšÑ·séüŸùÆ«O5j™)j²Fˆ«7¾m[åET×(j$ôë…5eJ5S•2Að9W8AÐd.9½zÅÔXâg\ VÖ{@R8¨ZNím·v¨ÜÑ߫½ DUBiT¡Isðúéø¨,Ìc¯JÐÚñvb‡nð7gWËl~$KH(¨&¡¨ «©ÂC¡W~B¡I#ÄHð±Ù¬lÌ1{,¥Ö‡‰»ž+Rì.Ú.r®ãPyê’vW¸,qœ¨UQ…ÀRN¿dGÙ4VvºKÔé+¹°´^ì¼ ú™ ¶ÛøÅ º†[œµ’Í;æWW R*†`p¬G¯PæÐ¸| •-u{ä–I…cáõG 8eHóIÅT¬Kƒ³RÍ[0’2à ”+)cö+€5­- ÛÍePUªbîJÃøm-eÎÙK4t(^­ òF …æ*pI8êÖ½"Œ9,´dÍZhêc­¤Ž² “F dp~,k`dJȈ0·jT#DFˆ¾bÝSúFöá:àèœtþ.¾ãFÏ5ïüKâ‘øieOäõt鯛í9}ê±w~íÄ*€¦»)1rTt.ϲöâPà*ªå˜ :ç^…6.PW}ÑÄ­û~¦Ú\$§05ÀT{Þñª¤’CNÊ“ÕK3X YF «;±*‹…f¹Õj›´ýÆgpV ¥H^©ï`ñ\¾}ÿ¸-Í#Wv“¾ÑWs¸HàÛ²Ë ²1R>»6]yÃr€}šã5KN5 ø~WX¤0¦#Çðº/8«¹x„¢Ã½{H&Š‚ýn‚HDóªÒSTA'Zy°p> ¡æ]uѪê˜;^¿ Gzå«I´ño˜ñ֟ウ݉ŒesꚬJo\?ˆFîÀÁökΪÕßMËÏÜM´$b¡GHÛÈ|GYR0Vµ¯·]‘G/c~¯³aZÿøHµö¶oé)øñ¶êêx•]í¿Ãª>.ðõ4¯¸TÒGzݶ:cQEÉß!5Ñ•(]YC Àœã¦²¶³Ig¸u9­¬oÑ׿°ÉBmÛpUÀ÷_¶E=4ôFd°U:R®±‡$°PXøC>²F±§ðên8¶ï«þ!Q£ÅKs‹„qÛd¡¤ºÉO3ܪ*Ò²šÑH²ªÌüæœsFWº^Š«Œ€\õÖŸ*¡:ö ?šV™Že0¹ö(ánÙ»ÞŸ„Õ÷³u¹¥Ékíôôz'-*SúJꈘûÒOy+6@Àu‚‹I'\ˆà¥¶êÎßXÏZâ×¹ÝÃN*íª+½%“sízËSÀ(mtöó=ØÈQ„’°‰Ô”Ã*BÙÎAÖU¾F³&éxbµ¥ñ*ÔŸÇ l÷ø__o‚¶£Ž»ê–IaW’©m™‰˜Pæ—=N¾ÍU¿³–ƒ%Yß® æ÷øT:ŽÐ[àãÙIl?ÿ««|ŽÏÞ*¿;´wBɽÅ^¨Éí ¾›[?ìš|ŽÏÞ)óªýбâÏ ÈÈí ¾>?ØÖÏû.Ÿ#³÷Š|êÑÝ ÉÁŸs?†Ýœx»dâe·‰»šý;‹i¡¼EF°÷SÂÅÉ0Cgëkޏøµ­†Q²Õi'W"³­ñ*ÖšE¤¯šè—ÕÜt×zŠ{%’iÒcNñϰkj ±) aÒqÍŒ. §§]lëáÐöŸU‹nâ¸z)ËŸdï…£ÛûÆu²TÓÈÌõSmêŠZa/( èÎÄ®@©9ÀÖm:Ü| 7:¥9-w0J¸íl½4Õ;SnÁ@Õ ~è·CÉ>¶cøNºF3Õ°}Z•8ʨûÄ +jb¶Ü`©‚ži<{R¦Q€ì¡9’l—¯™Á<£:çÒÕ“‘õ[èéÀ‘Ì+=?aHj¶Õó˜S#É(³HªX€ëÍÓËÕ‘×[ Â1‚ÄÒ3V4ÜR¡ª¸Ú[ˆ‘!^V²J§#óc¯žqÐúúh+¨ðRh‘¬qYMÄëu5T4³í‹øiäUFiYrÃ=X ™>^Z0 ðP)&GšqšxešŸißÛºNb­itgê:(ldàçÀtÒƒ¨ðMœÇƒ‰Te™FÕÜLŸy¤òa‘n=~ÌõÓL6 ¢;GUñ&ššuv–á”1ž,Œ©ŸY=:~ èk¨ðAHcŠÊ>"S4“#íkú[šÐþ1תã<Ã×ÓýZiFÃÁ4Ghâ´§h–J¿©]« †²L° <«Œœ?Œ€3F˜DÁàš1#ŠÙú§ÛO0M³¸¨ÉÅ’n£ÈÈê4Ó ‡‚hŽÑÅeú¢AΑ¶Õ¿isCà ŸgO?VFu:Q°ðQ¢;GÙ[–ì*ªv}ØTT·#ÔTÛê!LòãÄrF3ô꟦÷Iiæ´ýF6‘O TÛŽïMN9cŽhú€…@zùj2yòLÚ=ëV]¹û–OåÌ5³2Y?5#«ª#DFˆq>Ú{ –ïÂZÝÛkÛÑÍt·:Ê&Šº`©V~^nN£=zc>­p|Buà1 ¾ÁT¶°i8œ*àý¢ªÍoµÝ8[x°AJ*¢Þ.­4„’VD¥”g%ØŒä1Ój(P çè•«âCòõ ´ÁuŒŠ9éz lÑJ¸­Uœ¾™<½ÓåDœ­ÊØÆF|«PnœÔ‹Ã%œfŠ&&%ŒYs¦ ŠÌÕÂ)uëìaôé! ¯–[Ý&1Qˆ™ÄŒC4a‚|½cqŸ“_Vp_\Íj#ÑÚk‹Í9›‘D²´òócá‚=Ù곉>ý“ߪucšZBË-Ò¾ŽCIMÍÌÀ‘†^à`cÖufá¯ßWA÷ùW¾³¥îÑ;×ÍR$¹S‘Q:…lW¡Wƒë¦—h.z½“æ½¶–ç¸ËË;ZÁ•Ñ€fÁ!ºFœÝ\‚àëzLÍËÍ~MLöj6 ÁGnð•îÊóeFÒãð•?U§ûgßÙKÿp{ûªÖú†¶}±G+¬&À¼Š’å!‰8&?fsàüZʤ–­8>*†–õ.ÀHigUIF;€e È èwxPÕÉåÓ½f´kBZ*îL7 ¸øw3ÌÏ*²×½]2@u^Aó骸;GïÑY…ºTïzQÝdÙÑA ò4±´]ówÀ€OÖÛ›Å%Ü-Yá×i–éS‹IQÊ•.ŽÖhƒº8fæRá¾Äç=~ÄçÙׯ´ò[P[UrŒ<»G-]GŽ•&8«‚|Š`åŽ_W–²¶¶?¸£¥¡šN/Œ‡=J,Dó/?—/vN1×¹üz¤´þªôf~x8UX2îcªsÈ|œ÷ æpóö~-zvIO½K͵ãX{Ö­œ-im42!QéLÁ\Ç uÁDÀÿñžšÚacW¶µ#0â¼­,L£ÐFÝÓ`ôõ±ˆ`|BN¿k§úÞýóSþ—¿_²¶ì ¿U™["Ö@f_ ÏÐ6?«?=zÚ—ïy,j~ÒéÕµ5;MÕ(ˆÆ*¥ªe€êžsÇ®¹p¹buJŠ“s˜k¤Jž4[Â}2˜r1“ö¿ûN«~l)¹‡a0»n{Ì6:Ù,|B‚ùYKm£¥žWUɰ<§©ê3ÓUsÜaÒv+5.ØU·eìÙö•m±]ª'‘æyêj*Û½w™Û™Ï1>\ÄòR€<€Öôé–6%búî˜Sbš½FxüˆúuxvÕInĽÅÃïñùôéڒ݉¼ÔõþŸû ?k|}d|_¢ æ¦Dd·Š{®ãÿ¹N¦µD·b^âá÷øüˆút‡mInÄw¿ÇäGÓ¤;jKv&´Pךš¬W`÷«Ÿ¬¯Ú/ǨÒqRK``œú5ÃÕ^? >L;j‰nÄz5öÀ~@}:C¶¤·b=ÀçýÈút‡mInÄÞÛ ÅËpµŒbôê f¥ÄNIÇ£Wã÷xü€úu0íª%»z-~wÿîGÓ¤;jKv-7+Å8Íxý±ÜGÛPAŒÔ‚'%¿Ñîʼ~D}:˜vÕ݉{‹‡ßãò#éÒµ%»z=Ã9÷Ãÿr>!ÛR[±7– €¸Ãû8u‰ò;‘Ôø~= Îi"2EežJÚy)«&ŽXä\I”êUÇÆ Áüz’1@à ¸wWn=¯»®6¨–Ž–—»x“œ•[•sö*T{1¬ôDv\BÓJhJ×5û|mŒ}TÓ ºQÑ®vªRÜ‹×Å,$–Qíd.=d¨.ªÎÖ[G§¢ÚnìóõR{~÷E}iê,»––©  –§(Øð0GãÆ®ÇÌG4·0¤Ù+Âó{áà ý:´;j¬·bm}æ4QsK’%Á`¸Ï„ê’–v–w÷cÿ$8Õiæ­S%1­VHÑ¢#Œº"‹ªÚv 鞢®ÁE4•y&¦RYNzŽ£©è}º¡c ’ƒÜ2+QØ›Eê'«—mÑ»T:4¬ð+d¢ò§B09@ÀÆ£ENfé¥ú‚Ùù$m›x ð‡¡§‹®zôÔè©ìM%M¨ú‰Ú¢d™6õd£Nju!Q‰gc˜’O·'M6&‘ûVè6¶ß¥çî,´‹Þs`ƒ×¯ù¦ã¥î:Ô„Q¤Q¬Q¨ <µeU–ˆ"ù¡îûmñÂ¥öÐÝÿË¥×Îüs´Ï¾ƒà½—ø…åžÓ!XÀõ|ó¹{ïÁ«¿ðÚž¡$yŸ^…!pU%w-‹n§š!‹•‘yXX=½bWT™T;;)oh¯‡7-Ùµ)éê(à­²Ò÷ó% µ¡c‘.²Å#Ɇ UÐÅH\ím{I ¼Ü°Ù3Ét=Ômtâõ×gŽØŽk†Y¸“¼vƒî¡°*%J‹•¶3p£šÉ-A©§yªBó:ÂË gg,ÊH'^{*T`uÍ{¼x.÷S¦òÛÚ·®×ØÿkÚ/;MÁI´éIy™îTÕ,ü—!@X"±SˆÁfg ÎØò>…ÔçgÖ>‹‚ÖòÚ‘·é?Ueâ $ŸÅŒ©?×­*JGÁx•q‰ê3ê×›X/F‘^yâ¤jDÃîGóq·´ºØ_h;& v<áHÜ-³ÿ…‹_ofþŽŸ€ú/´ÿWSĬ{B”]¡ew/Ê7Ý‹›»'<¾š¼Åqט ãsRÓûcÿ&ýU¬ÿ¸ñwÑ;µ¦Æ»\(öý·ˆ\A4M íj¢È½J;˜ùP€|ÜŒôÁÕÛ£q w5C¤¸µ¼•ïl졵å’dÜ÷ºàéÊVériÂø³Ì Ž‡Õø:k¥”îÉñ+õ/êÁR¸™SzMß4T{¢ª›–ž)"†žó–2ÂU“$d¹ó×5bí&ëö[Ò ¹ˆú&ûbË¿w$^™gÜÕM3ó_SpËUWUæPÀ•Ç\ãPÆÕx~ªÏu6`GÑOÙ¸s¸™*Nëß÷“,®Vm»Ìª±–È8aãË#¡ÈdëVÑ~7œ|ŠÉÕY…ÖŽ N£‡TõÔæ¼7âFu™.îy”.Oƒœyd“«š ŽÑâª*rpðê8&ŠoªíÅ QDR^X«#« u=:ûz顿x¨ÒΡÁd8sHŽ=rß¡D”ºÅÝÕ<¾>×âöêtCiâšS°pL+ö{Y.»zeÜwбØ)Júó*°0OÕO_?ˆj†×7qû`ûÁØ ½SêßuO¼+ìöÍß[Rô÷9– q»Z˜,£0¨½_FP:’NuŽ‘æ¡ëÊ[þVÚ6F­Žÿ ÛY½xHc’.Üê£%a¹ÒsÄÙ`s¸ N9±­ÍJ£ø!b)Ó?Ìp*÷+î—;BU]¬Û*˜5󤌀-+ÔpLëVɲpØ\²õ¿mšÚ¸6üÏBò×M$°ÃtµÄ&ËŒLÊàcž\ÀÏ]q9îa!¸yµv5­x‘NäÝÞŒÕ鿪D3,O﬩*@ä F ñ’sáøúÍú‘7¹…[ŒÊïÕcOº·´”B¥·}dÊjÚ5u¹ZÀtõæ—Þ|.™é×@ú‘7¹µMÊs—"žÚ׋·A¿ÅëGSl‘fVe_!ŒùŒç׫7Nìqäªt 9­±ÛøÈ•k¹n‰äQ#4–Ð"R€–_X$zäg˘´Ng’‚hF®jÁæß …“…µX st¦'ÄsÙâÀë×Öý^ç0³¹O½È©³]vº[E]ÿmIk¨.G¢ËR“6=MÌ„Ž¹==Z» œ%Âo i€eH,q!ʨºª^ê#׊G)¼ãDB¤kÔ("RAéŸëÑ1\¶î½¯ÚÔBäW\ÇŽ÷©tÀV=·ûš_åÌ5³2Y?5#«ª#DFˆ±’X£’UOabçÑ:ú»IÑë«)Ö9TäJëÊãÈŒ‡U%ºÔ€íJ2-÷-7*]±ožš5‘1 DÀ(#É.FHÉÇÅñê·Ø×…rǸa£Z,ÔeËwm›EA¥¹ß©`•FLrÌø5CQ0J¸¦÷ R.–ŽÜ$š¶§w‚e‘¥‘u!™ŽO‡—¯ç×;›g8ÊÜ:¸ÂFºðJÖ“ÞúŠâ0¤ÆÇËÈž«Ì~0?«zÌ0‰V»h8Ì'·.ÐSˆM½ççºCÞ3FcÌ8óÕ‹¬ÁT A3+çžüjc5“ÑÉÈyæhÆÖÄyû¾b¬H_MNqQuMDåj»Ø%XãDi³ qÐc›#8òøµ™p®'ܧ¶ëd% ºCmï#æ^Q…zÓä§Ë׫4¶pÁUÀÆ"UëfRWSnKcÖ^Ö¤•(É€FOד© õ×E0CÄasÔ °ÀÚ½µ2Üww<@µ|â«G"|—¯Ë¯M‘.^kæ˜l™©?SÚׂH–1Þ¨Àˆ‚:xO(‡T§"­RtŠ úôÒÙíÌdC°øº¡^^fó+á#â5GÅÑà®Ù¼|S LTñmúxâå 5å^a€¼½03åñj‚.«:o•¼ 7Ô# LEF HÈäŒg› ê:zµZ‘£W§:DërIB›i½÷©ˆ H¹ÙðA`ÊGLûF¥ÑwVMü3‹êÍwª1S—-iP ²ø/œáÀóÖó> ¢‡dxªµ4³E±¹LJ’-b3*aÊy³€ àû:¬Gí­Œit³Sž¨îa0Á%ãQÊdóëáëçêá¡VõW¡;4¤rð²µ]â™Á 1èñž¸ò×§dý“ïRóm_º£„ËAÖv¡–G¬.€žS‚~?=kF.`²«7ñZc’x¸ë߯Žh‹˜³ŽU¾|ÿ|½Z®Ÿè«vÀZXøº;¾ìÍïV ¥Šs9ÇN¾‹[R?’Ƥè|×U䬑;»|K3c–:¯€ÝFAüYÇÇv‰Ô¹ kM*m{ô¼­ÜÚÅK±ŒÉÎ[ÄŽo™^§ãÔÕØ[Jg[û¶Â¥¶Eš¥;Îô-½ˆ”ÁÄæóõþ=TéGñ ÃFOh«]ªå¸+¨c«©·SSI"å –VæOˆøãÖí."abàÀbS=Á¸÷]Ç¡mT¯LM<äœ":ã~#ª½õ•f¶›³0¤iª¯s@“4‘³(&6™²¹GÃæ<µp\B¡ D^·î·Ý¢H6‡¥F¡¨†sÊ¡”b ç—#=.³sêd´ki–榄÷Ξ/Ê·Ñ­:Ë>ª‡ú­ÝÂûïCl·î»Î_OïOuŒã›Ë8õë;õ/EÕ{”îÌ©w¨½ª"£b ›¯Åðu§YSª ¶þåÝ•·yè궤Wfc4òœ¡T€ç8ÈÖL}Bè-Z9Œ TÍ]uö–‘ê#¥¤™‘IX’Vælz†Gž´%À*ÒTuƒtnËÌÒG]´M¸,a•êåèä’9G(=F3øõV½î8ˆVsÑ”úésÜVú)*é­´õNƒ+2·3õòÕœ^€ªÐÂ`”Ëi^·5Έ¥vÝ[{CÊ;º©Xž˜éœU¦ç‘ˆ…gµ€àeo¿_w5š„×QØc¯`ØôjYO;~`¥î{D*Ö8Á0–ÁzÜw‹p¯¬³C@åØz=D§˜z޾z1Ïp’!Ö4À2´n›Öè¶SFivǧóH -$§+†yÿ¡¨{žÑ€”cX㉄öÝqÜÔUÏo§§y™¡’fæOˆáuf—0 †ƒ˜n Õº¬Õ .ÔôÕeÏyM)!N|Lõê¯{Úp¬Ö1Ã8RtÕ—¹¡Y hXPÊÙRFpzyêสС®»ŸvP_#¥‡g5JäPÍàÃc,sÔcò=}ƒ®³sêEÕ c fTÙ¨½òtZ"q×·Ñ­:Ë>ª†‡tîó{[T›1„-+Nï~¶ zÏLõóü&³¿Rô]Z\§veKÊ׃—îè‰U8úë}Ó¬³êªt4sn é¯|)¦Œ·nS€2@Ç/:ŽlŒXƹÀ¾ò <ÖäÜh!ÉíÇcûÕC5]¶k‚²!a&àªËŸ` [V4®‰ÄªŠ—Œ YZ.—JËDt ¿q¤0…nöá8¹<כ͈ÆrG¯@â[â„é)­¼BÖ9'Zÿ8ÕÙš­L”ÎG·Z¬‘¢#DFˆ"4DhˆÑ¢#DFˆ|Í÷~äî÷¿ r@ÍãÏøôºùߎv™àW¿ð^Ëü—•8mrŽ4BIg_:Ó_@üZ»¿÷E¤ÔÜ` ÅBƒ*õ>Áש×}·jâªÇ.Û°÷æÚNHZýGÌ RQ ëœ`d~3zê³jóêÓ~ÅÕ¶—ö¹‰R—qÑ–8È §£×ÌÇ®ÆUf¢¹IúÂi³öÿgî-Ý6UšÉk{èÞ{š°}/Þ 9ØãïÓ§Ã>ÝCšˆ7š—ºÓT‹Ä˜ÉT-o|+†ºÚív‘[ÍWèÕd£ÇäW%™†½0F@òÖ¶zSs [W«ñ…Cß{ÆËPXî´Î c™'R3×ãøŽ¹êTnÕÓMŽ— ââ¶Õ,‰lÜÄr¬ŠOõyµ\KЦÒâµhU—­Ÿ²øŽ¹Ø%Ë¡ý˜_i{%ÝŽøRßþÂÚÿøXµöÖoèéø¢øÛOõuX›U©›|~Å^žNðû…K-5UbÞ›…ÑÁ<‘÷íQ-0™X€Hbžlô=²7~‹R{êœÝ8¸íôkWMÃ[½cI1AMLiûÅ9æ˜Rzyç#ËV5^Ý'‡ª¨¤Âbð}KÄ]ÃUp[kðÒ÷¼Ê†²U§îTeÉg”dç=‚«É‹§—ªMo~‹]ë„;^ù_5Æ®÷\;e–Àµr ×ç-C¨1ÆIRÚïh€ªÞ í;„Ò=î²8`Œ„‚*„X€ ²òXàF:õõê ž™ ®ñ©n^í˜Ö(á¹L‰)îE·.1̸Á'Ìž™$êt Ú£LýŠÏN‰M ÓÓÕS¤hª* nšØ`G¶ó·ß|ßþm1Ú˜lG;}ùÍÿæÓ©†Ä½ôŸ~Áóù´Çja±ôŸ~Áóùµ2¢ßI÷ì7ÿ›QŽÕ8lG}'ß°|ßþmL¨„ìßAóù´”… 6¢Jo©ëŒ‚7`%Jd(àds+:ƒø=zÏHg/|V—f£i™Ÿr^%~NcQ ‘Œw+/‹Yÿ7-?ˆSV»¬t´o 1-AÌkFºèY¹·ŠuõIÞ¯òN(Ñ”}RC÷«ü£M MAÜPƒLþ_l4ÒÑ•NÜ›&ß¹+\÷)á#îP®Hþ-×ÁôÚóšÙ¯sFJ9¸IiaÊ÷úöx1&3ø3ªhµ[Lí‰Ý›a&Ý”ÍgÜÕ±9$ÒDßåg³i†dT9åÙ…!_j¼\RHæÞUª³*«¬t±®Bùc¯Oz¹ÿ%P@Ô äá%¦G2=þ¹˜œ’bBOÊu–»Uô®’žÙqÒù[ù$útÐ3ji_±!á ùß+"ŸNšm)¥~Ä7l§ÎùZ?ö1ý:h´¦™ûÍm×ÁƒtÐÇO\ ³Ívœ5öÊŸ/]|³èÓõ ªò£*¸Q°èÝ1[É$d;{ñ;ÀàäzGOQø³çªšlVzqaà祬×È«áURUš÷ë'WªÖ“ö]ŽÃØ·€•×”’ßz>VËÍV9.pq1Éü<¿ƒ]í°ÙÉ8s+…ÖÛ@J7ev;àEÇfVÜjhnò¼O(Fš­Ta9‚Ô0?8~-Q–;;˜Iÿ*Õ-v€ðåøQ÷^É\‚‚†xí—”ï,ÝããrÔ¿+eº®gOáÕ]c¡–Õak¯'{ì»Áè6ø¸Ce¾TDWŸg.ä®zfLg? Õçª-³ЏµV½8(»çfžDZÒá–ûŒ‘–IoÓ‹‘â`fQÊÃË Oˆj®²Ñ ˜úÌGVóÇ{Ž¿ÇüÍTѧ£¼¬*ÔÒBìÜ ì›Á]Û°ê/›]áæ8W‹qÕÆ9{„aÑ$ǯýzï³Øìï§$s\6‹]vT€y)Îv4à=ónŠÚëeåäô™™7=ZŒ:Y߯™ø^DtÖ”ìVw¶H泩l´5Ð/ÂÁ{p ñÚÝxîÖˆ·uõSUœò޹ïËÑÇǧB³é.Ç4é–Ï%Ðû?öjá? ¸åO¹v•¶áe=¦Eª¯•€™[Á#‘Ôö?]6k-V‰hÆ6®{E¦µZãÉzH kÓ^j4D`|.ˆŒåÑñüº"4D`|.ˆË¢#DFÇòèˆÑñüº"0>?—DFÇòèˆÀøþ]Ë¢#ãùtD`|.ˆŒåÑ`ôtD¸Ë¢#ãùtDœ£9ÿ>ˆŒ|gDKñüº"B:ùŸ—DK¢*ïxöx²ë8‹»i+'¢¦h£’:CÉ—p‹€Hg¯]R­vY©—»%zth¨ÜÕe{£ßºhY¶Ö㎢±¤XÞ¢…W’'çHÊ£cãÇ·\Ôþ+g¨ðÐ è©ðºôØ\HSô¹xOY$PÅg¾•”ôh1Ì@ñ{HÖƒâ4N¢³?¬5…IÞëg=“»î›*ë¶wkUÚnQÔ½=²&BèØb§½ê¹õãXTøÕ–›Ë2=í[³àöšŒcïbí¼2ãvÇâ·¬E±U½%&å¡vº{‰HçxÉ>j€zuœdkÐ¥h§V›^0œ—ŸVƒéTsN0¬I¸-µ-þŸ~ñRõKÎ rç8ÏLë[í˜YÜtJÜ/åvŽZè“á#L ®OLŒôÔÞnÕJÝMWRóFÊ~4`Ãå(D-º•Ñ¢#DFˆ|½ÿºªômëÂoVho'?ûJMxæøï|°ï¼sÃÀ¼¨„’CŒc_4ñt¯¡a‘ ·l)lÈÑŸ{ %`{Ÿ,Œ~=oNîÅK˰mJ­»Q0Oe¤eˆôàòå²~Sƒø†»ØY”.'‡ k¢X'Ú$£¾ß¢ Œ¥¥G«ÚüZêmÍ‹•ÁûT¥c쪄 .Û¡%d/“JI9õ ùž¾ß^¬nJƒH5ªÞåªÛoXví^W^QHŽXžD€qñ dû›¬ÖW.ÞRí¸àjxm‘ª¸!BŒdycã?.¹*’ì§zs\g}×ÚiÉxi¡‘¹²ˆçÿáyõÔ»i‚¸ooñԬ­¸`Hèpz|šµ&⢣¥}Èì‚ÜýŒøLùóØ6¿þ-}›úJ~|}£úºž%BöË¢Ý÷N ÃnØ7¨m÷™÷•Š;}eM¤Ç_ËE‘Þ.  ‚AèGž²¶‡h!¹Ë~«[%Ý4»(wÑr‹Gg^Û–œwË'v”50Je‚eá}WÖÛªƒX@ó=1ާ\ͳZšoÉtºÑep‚9§›NufíTðî.+Úm ªÇ½›‡ 2;dxG%_7–H$ KÅzÆ<‚‡†4uDù•§qð·Ý¨»Ã}»qjÖÊÌ‚Zé8_(d*Ø‹+é^,l`t>z>•¶õâgÉVÄtk͇î—m+Œ5S‰ûr¨ËЦ¦†Ì ð.%ªËñç>ÝAgÄ)ž©äÿxëkKV{­±Ì o*¶Oê}@~ýõçði{â¾ÀSwá~ÉSs[=Óºf¡y¸û`TŸ !~6!• ¬Wˆä‘‘ÐrœùiÿäDK¹,ÿüqž¯4n+?ºn´½m·Ž–”¨Ê} Ÿ† Žëž¼¥êB’<ðHÏ´jó ÙŸ$aøqtÇšXm~ê4ÖºÉÇ+U&!'½ÏÃ"$RHÊ3 ¢¹'¡#§™ÎŸþJäÞäŸþ:ô]æ n–OurQs]8ÍeZjgަš®>a[Âù=j@0#¯?O‚AÍÃâ/žKFŸ‡0àÞj6ß´=Ô9c yâ•5 Åi§}GåÕ‡,ÅŽ:œcÄ:fñMf<‚лá£!>e'£öÓiýûnm12—Â2¯1Sõî=½:êfÓ?»Ëð¢,Ñû\ÿ*»ì÷BE¢¼ñª‚‚¤:%Lm´ieòl÷ÊY9pÝ1SÊ#X ŸÉÎäÅ– ÚÞeYjm¹dœR[;aíÊú¥,ÆŽ—`‘QsÎåZl²®:¨Á>£Ó[l&V|– Ù&œy•ßn{¢–šêj:ÑVkŒ5;ʨ¶l%1$ƒÌ¯QÌ@è|9>¬zôxøƒHò<–›%‘æSX,¾é9¨4Sñr‘O8Tª]©KÜá›—œƒQÏ…9Êã$‡:¬|Jb÷ ­?ŽÏ2º÷dZ^5\÷~éÙ|zâ<;‚¦ÝIAUA5¶ß"GÍP‡! ssyÆ[ `1N»,zgTsjºb9Êä¶-¦×RlLò…ÞÿSû7Ý«£^–‰«ÎÒ9©õ—îõ¿ÎOѦ‰©¤rÅøuh“à×צ>Ö uùAÔh›´¦¬SkGöÒãüä~Žš!´©Ò»`Gêkh==ô¸ÿ9£¦ˆm)¥vųõ>³ýiǯÒÕ©Ñ5F‘Èú€²}Þ»ùÉú4Ñ54ŽAáõÈf¨­é’ ©òÏŸ«MSJäÖm¿A`¨aBÒ±œ+HÓIÌIQÊ1媈)u Q¢#DFˆ"4DhˆÑ¢#DFˆ¼{'gmÜ+Ôí=Ú92dÛr)9ó>׉ÑC³‚özS›‘VKÙzÊW2m]ÖT//)Ûr1ë§CiÔx(énǃ³&ß–@òíèJ¯/3m©OLcäÔô6ì<¥»hâžZøCe’)íûOwG42«Ç4{BE`ÊC/õ©`Ü@<IvdqVh¬;úšJ‰¢Óš¥‹ÊÏ´œåˆÆGNšÚå]ü7©Æ®)lûzÅl–ÝK&îH'rgIöɨòóƒñ^‚K°'‚”æLqLîÜ=ܕѭ%E&ò+hö¤ƒÀG‰pIë窚O;x+6£F8qZÿR›òZ½Ro>ä' ÆÝHù€qF…ñx&™·§)¼ü(ºUP TöÝîЀ×’Î:ããÔ"!Ü…` õx­µ|)½]ißUC½;´Aú™‘Y¹zÍö^ÝI¢çƒÁ@¬Ö™Åh¸ð$^%ï/6]ÝR¦%ŠNm»2³F ðäyùœþA³^Ì E¢îDqZlŸ­Ö­½Žá²7-qŒ25Lû~¥]$Œ„p:ËÓÔ¡¶PÖÝ-'È©u¤—HpamnÏÛeíÂÒÜ1ÜâǼu˜n¹åøYÔôVÝ‹§QÒ_3xq ŵvÅÛfZÚÉ·v6থi9™Ý©nfå Í–b|€‹Z±Žca­< Íï ¹ÃˆNmT¢ÓNhhvŽáŽ2åºíº‚KÔ“Íæu!¯h€ªKd‘Ä,}tÃx7‘´·œÇÝs.Ô¨oáÏM" tÁàRX[8…dá€Ü2oÚZšûê0H²MYašÀ H݈OOié­hÞÒb[º8‘ÅuÅòƒ]‹‘"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ"4Dh‹™vµá¶íâ×®{'dPAQsžª–H"ª©¡ 2³bÈPH×-¶‹ëÙËž ¦ÇU”mïËç ö%í ²ø«gÝ[’ÁmJ:jgŠôŒ|TÓF0²uùIõkʳü>ÕN°s€¿q^{}š¥Ö“'vð®¶þÊ\g†áM4–«rªK³›ª–P®¤Œ~®c®ÀqXeû.+ůs§µVìâææÞ6=³c–†ç~¨ª¤y7 #4Nä©+ÈyN=Y× …ÚßYÎbNµÛGâvVQkI8©zÿ€Ü¯Û½›ö7x‰Y ãoíèè®´µõ9pä•%yC§A"3‘‚5îP³Å™ŒyÄâÖ´M¡Ï`À•Ъ8]ÃY™&4*³ÄÊÉSS«CdûF<°ÄzκM+ŸMYDTð‡—¢¹ÍÁ•@˜¡‚ ó~nfb0|‡àÏ£Q#~‘T£‡ûWipÞÈvæÜî©é{÷˜$dò«?.q’qÔyykjL§I·Z±¨ú•]yÊß{oß±üºÒóU.¹ûÛ~ýåÒóRë‘ï½·ïØþ]/5.¹ûÛ~ýåÒóRë‘ï½·ïØþ]/5.¹û[Oûö?—Syª.¹xóÝ=÷77º ¸¶eãmö†ƒfŵh.PKNö/L5’T˜ ?0t(#n~¾Zà¶YE¤ƒ#Ýd´›0"+Ëö?ûî2Z®TõuèjÍhË-2챘œà–Y¼Èø yk‰ß c†®k±¿sN òBÜúö£§P”êeTÂì•?Ö'°ø]!¨sP~'PíäAî vɤ8§÷Zn1ôÀäÙ þŸSòÊcg«ó*‡o/Dæ/p³¶ä1{¯—p=XÙÃý>§åÍÚ8ŸU0vÃÀz,¿°gÛ—ÿêÿxÿWý>Ÿ.nÑħ̳ôZå÷ ûlL1/ºõvlùçfôú|µ‡gŸ0~þÑhop;µì²óÖû¬7 F ì¥ÿ<äVª~Lìæ¬>%S/E®oûŸžÑµ145Þé|•P¢I6P$Ù-û~2G„ :Œº©øM9ÕÍ\|R ù'›‹ÜãÆí¶¥ ÷Ý´4Ô¶ø¨¨j)øka›“˜w罫ÎÇ.pO–4ùSo G54tdy/¡ÜáÔüà.Èàí~èKÍVÖÛtvº›¤tâVÐ@‘™¹!9ÊórƒÓ8×¨Æ tZÍ‹Ì{J®~Õ Úû÷À¦§Ø»dÝî{žÓpô¹%#K i$¼²± b¾Ó‘œŒm-{éCD™[ÙÜÖÕëG«SÞø»WJôÕ˜÷L¡¥x©eaœa(+Ð@8:ĺ¹Ò?û­Chƒ…Aÿª!¼qZžHNË[•°T„n(FÈHåêW¾ê|#9óëŸ3 u`hÿíùK´ˆýÑÿ¯áX.|hí _FÔéÙN©K:73ox]OÛ|ZÕÖ‹Q¢æBÏf÷y¿õtíÌOëNª9'ÿ¾¥©éV¯ö¹…Íþï"²ý\ûAÿÁ6³üq ý-:M§ý®a:5›ýÞE5¹ñŸ´5ÁaXû)Ô¯uU§›xPõ Ù#áyêhµô¹…-³Ù‡ú¼Šr8çÚ?Z…_—÷gCúZž“jÿk˜QѬßîò)Ž] Ê•ýiõ]Aí·ô´é6¯ö¿¸'F³»È¨H¸ƒÇ¨ W—²åɪØ)ü¥îHå·wÏËŸác:ÏKiÚÕ ´ÑYÿÜþÒïž7GYQwƒ²•ÏÒêéZ)TïêS`‘IÈÆtÒÚ$Çþàš*F”êU.×MÚšš¢Ijø $«?†¡[vF EÞäCéXæpòÈ×;E²q§Ïò·=ÿ>_…jž÷ÅJ—æ¨ì›z$Lâ=8ëì?]ê>/!êÖ׫ôþÃÕerˆÿTêS¸7Ï­öË… ¯²Ã5ñ8f«ßrò3)ÎJ޾C§M[K\,ÿî º*‚jåÿiXÍÄ9c…j» ÓÊÔàwM&å¶±Sœädù“×ðê/Õÿc˜SrŸûÜŠ ¹qÂŽ¡çnÎ7™¹—Mºí~ÞÔã8öõÕA´ûg‹U‹lçýAÀ©¾Í{o~Y¸‰¹÷ŽøÙ3Ø`®µÛi)#®ºSTËPð=KI!4à*ƒß/«Ôu¥‘µUÎx‰˜9NÏ­ÔÝI­a˜$äFq·Áw}­¿~§Ë¯BóW×#ß{oß±üº^j]r=÷¶ýûË¥æ¥×#ß{oß±üº^j]r=÷¶ýûË¥æ¥×#ß{oß±üº^j]r=÷¶ýûË¥æ¥×#ß{oß±üº^j]r‹¾TÁSR¡ÔG‚Tç®N¨ò W` &z¢º4DhˆÑ¢#DFˆ"4DhˆÑ*k]Å@̓:˜*$-í”ÀzJ÷@¼`3ø2t‚A[ᤪš0ð@Î=¨AÔtºJ^dôuh’‘À>²º])x RUt"–C‘Ÿ/V—J^ M jü*I~M.¹/5/½÷çE'â].¹/5'½õßÐdù4ºä¼Ô¾öWýé/É¥×%æ¤ô ÒqÉótºä¼Ô¾öVýå'É¥×%æ ÛkŸ&—\—š—ÞÚÿ¼åù4ºä¼ÔžöÖýã/ÍÒë’óQïuyëèRüÝ.¹/5c裠¤—æéuÉy©}ï®ûÎNŸÁÒë’óV^÷Wýç'ÍÒë’óQï}Çï)>M.¹/5÷Ü~ò“äÒë’óQï}Çï)>M.¹/5'½—¼äù?×¥×%æ¤’Š¶$2KJêË1ÒéKÁh–háŒË,Šª½Y™°ãÔd¥aéÔŸ}Gó‡Ó¨¦ _M¥ûê/ž>$$žI÷Ô8}:HH(5Ô£ýõÏN’ Cr·ÎkáÆ3žôc.’ =ñ -ËéÑgÏàútQéô@sȱŸ>ð}:HH([…ùWD}]$N’ Sp¢$¯¦EÓÌsŽŸ×¤„‚|hp§EŒd}p}:HH([… -dG¦lHH(#åYå’ _M¥ûê/ž>$$zmßqüñ¤„‚“Ó©>úç§I I÷Ô8}:HH)}6—慨xútQéÔ}GóÆ’ ON¤ûê?œ>$$¾G÷Ô$$†¾ºâü ÒBA[As^¥Bå—Û}ìé—NÒ{.™g2ˆ{ähÆÜ²r“ð¹[£cÈù럥ÙOó ~‹iÀ­·c 3žÔ› ŠÎNà‹Â¤àìùiÒì½ðÓÜ(=¼ûš ö§Ø½Ú·+?Õ8 Ó¡9óê:|zž•fï„è¶žáXÅÛ×±dìÂÕбVäÜPœæ<üǯ٨éVnøN‹iî#ií‰Ù^ýM=U“´.Ñ¬Ž–xá¨jkÒ8ŽIE±Ðzôévh›á:-§¸TuÏ·¯b›%Â{=çµ^䬥ÇSKS¹aI"q欬r§â:ž“gï¸þ%7_tC°£õNל;?ƒtÁôêzMòtzýÒ—û!}…ÿáyÃÏñ¦§QÒlýà¿t¥þÈWaø^ðïühƒéÓ¤ÙûÁ:=~éH=ЮÂägõÞðóñî˜>:MŸ¼£×î”d+°Àÿù¼áçøÓÓ§I³÷‚tzýÒƒî„öQÎݯ¸yiÝ0}:t›?x'G¯Ý+!îƒö 8ísÃÌ"7L¯N“gïèõû¥!÷B; ’Tv»áîGŸþÁôéÒlýà¿t {¡]…ó×wñÿïLN&ÏÞ Ñë÷J?²Ø_þ\;ÿ`úté6~ðN_ºQý®ÂÿðºáßøÓÓ§I³÷‚tzýÒ·CÛç±=DK<«öˆóˆUãܲ™’V>¥óÐÚ¬Àö 5 ŽÉO.µû#Ú'ôk·iŸK/t$îª/)ráðØ<§Èàê:e”ÿ0§¢Z{…kŸ·d ;} ⯴¶ÌŠ’è@¶UÉ|b«?ñNp²‚N*Í=°ÑÜ+yí—ÙKÑ–¬ö‡ÚB&¬4‹!¼&p¼æ qÕù<\¾xë¨é–X›áODµL\)œý¼;ÀÁj;SlT$€¡· “×§ŸÄ~CìÔô»7|(è¶žáD}»ûÌí=¨ö+ºSpÄH$dy|Zt»0þa:-§¸UŸ†<àªë(xKÅ{åšßS×Ef¸¤íO…„nÁ|•Ê8SëälyiNµ*³qÒ¨úU)Eñ æHN´Y¤ç_nˆŽuöèˆç_nˆŽeöèˆæ_nˆŽuöèˆç_nˆŒ¯ÅÓDG2ûtDs/·DG2ûtDs¯·DG:ûtDs(õèˆæ\g:"9—Û¢#}º"9×Û¢#˜{|ôDs¯·DG:ûtD ƒÔhˆÑ¢#DFˆ"4DhˆÑ¢#DFˆ¸§ºÚþïÙÔ÷‡·éîûÓs\’Ó³­•òÄjœg—{¨” ’-sÛmBÍJFgß½ë{˜Ú*ÁÈ{÷¹x‡‡û/´Ÿ7µè·îýåÄêµ2ɽ/òß®‚Üà/t–øã"6†BDZ•lyàÖµºóeÄgÞ}ì Ý.£em×CAË·¿º§eŽÜüPáGmí!b«Ûuwx¢Š‚²ç_Ôþ˜îÈ´ñJ0j¢ð¨gÀ(\ô uYm•hTÑÔ˜ÛïWšåµY)V¦j3€÷šöÕÿ}líÝÂC¹î÷&¢·ÔÕAOPÊä54â­ah˜£Ì9X‚2s{o«N¥ ÄÀüÇÕxͦöWº?‰ú*5›cnZ…¶ÔñÞ¦c-ÖzzjJ»£'¤MLýTúæ\)B åÍìÖ´ÞcI¯nŹuF ¹«fÕ³†W­‘òKœ¥Þñw·RÐTܹ«¨îQùc<ؘªÈ¸+Ѓ“©¢êb¤é'WŠŠ­©£k]õeá\­CÄ{šªãGOÝÝ#c%@ — ÕeéñnººEðÙšæÐVî¹,©ø¹°eÛöíÑS¹é)(®²­òWÊ iä,T"«`–%OMzE¡Ó¨4*Þ-ŒBc{ã÷,Ž)â¾Çq©7#@Ô¶™¢H§äwäp<¨çÄGÁÇžªëU&ëœcvÙª»Œ'º£Ÿ¤Ú) “þ =B Ÿò˜~¸¾E¹ë6½}óÑ$¡ëª×»¤ÄPÅ;‘1<¸Xç²|>.„F«Ò¨ß-&#†ÜüÕº-kÀLñÙöSÜ_áµµ+ž·Ya÷¶8Þà%¸Æ¾Œ…ò|ÙÏžF®kÑ.oYŠLuN)+¸ÉÃqªôýýf„Ðw^›ÞÜ£Á“Øn½9²9}¹ÐÚ(‰— 7©+†œVÆâ®ÅZɨsÐË5-BÃXU£f(Î;Σ“À¬Ç>@jtÔ¦%F†¤L-Qq›†uiDöíïj«k“H-‘SWÆïXÈHe‰y¼lL¹é¨éLC†9oS ¬&ZDg¹4ÛÜsØ{†Ý Îjém)Ss–‚Ž;ì>‰%Lñ¹–4r áÁ^žd|cUe¦“„åŒc‚—Yê4ÆzðÅ=´qk‡—Û½6Þ²nú ÚºØêž*:•”8‘eÃ.FTÈ™íµvפ烉û*º…V´¸ŒÝZuªÉ"0=š"4Dh‰½Û÷¶oâUÝ•fö•n£W›¯×ü¡¬VÊÒ"N¾çìè\é{¤ûQò Ò}¨ùˆ‘àFR¡G_às3Uq;mo+~Ϭ¸Ïl¼ÅQfžŠŠŽ)†¶`šàÄ©eHùdVÉ)—BW\vƒY•[‘ÃÀœ’ë )>›ƒ³ø˜óP Çž#Ãv]»AÃS9•¶»˜•Z6Z§€¼ü‘‘™Utå9_ W9ôš×®†ëŒ|cÂÓ£R"ñv©ÃÂpðȦ2v â+[(.pp¢ _,ÓzJÔ‡9#y *±'‰™‘–Aƒæ ²¬sëÃ,°²R’/}8ç‘S–7îÝϼ­–¹8QKE=í –©Eó%j´3+'WF§‰‰T¬èAÏFѶ‡¾ pŸ_Nj޳±”ɽŒzzòTíÇÅ2Y}âó%&ð¼SOd–Ö8­0Ñ4‘ÏËde™QQ‡?xÒåo5Áõ«´›¤˜'Ԇܳ•»hÐp HιÙ;3ʽÃÚ÷tmû…m®‡PIèÕCKWs’zt•Ù'æWf‹¦%æp9UeG(ÙÖç´ÆwîUm‰Ž—}7-û‡µNöÛ´þ–Ü4¤©I. Ž•+šfxÖFoGåñ²«¹Ê¸ ‘Ôm¨ÌníÛ«ÉCltÜböÍšüÕ£ƒ¼aÞÛïz6ÜÜû’†1EQ,U”ù^xd…J·y¨æYÁ\Ovþ¡ÓzŠ•*]scލõXסN;Ítð×>‹«÷Iö£äí\hî“íGÈ4DwQý¨ùˆŽê?µ ÑÝ'Úhˆî“íGÈ4DwIö£ä";¤ûQò Ò}¨ùˆŽé>Ô|ƒDGtŸj>A¢&÷X£÷®§À?s¿¨}©Ô;%#5\ˆL¹ûAùµ‚Ý~w÷'h›5e\ ùº¢©´^otèˆã§U¸H¸F)–ŒF‡Âą€1¯Ð½Ñd>‹ëf ’s?TöƒŠH¼nÑĪ9¤IC%Þš­*)9¬ÏÊ‘¹‹t©QÓ©é]ÝÇò§Hwð>‹]gxOe¸½q‡ˆñOPÂi±´§„MÀi¼EH89*G«:¶…Ųåê Õ`0Iç袨{Cð–ÙQY ׌›ªˆHï1h-äÌ[[~Bäœà<ñ³Õ'„6Š@v“ˆ{Hð‚c5‡û¸UTÔFÕUµ6—BQqÌ@ç%œò®§Áêu&Í[;¾ø¨ŠY^÷ÁB×q׳ÅóuÏrÜ|NÜUPÔD’ËZ¶ìUK31çæGl*…ÁSë=:jÂÏ\jPmvªÇü=ZéRÍ|2Ь¬)Þª¥ã‘—'”²ýƒrà•õ\YêF!PÚ)ÎilÙçÊãóçÓ£½F›y¬¿V½Ÿ÷üÏŸNŽõ:vm@ãfÎ#÷t'ÿÇŸNQ:C8Õ³Éåôè‡à¬~}4NÅmàå>çãî÷‹bpŸiVn ñK%uM¾»”ÇEÅé3–‘ÑB¢J¬pKu𫚃ïQôM;'ÞоƒÑûž=•¦¦Š¬mËØïbY¨YA?eŒuÖÂ…2?Ç¢ÃMPóêŸÐû›—êmèÚ{™é­tÂz¶ƒsWNü¤à**9,Þg:unŒÂÒc/{ ¡áÀmñõVxýÈþÍÏ3Ä,÷öe@Å^íw ¥³œcÈ#çëÖݾÇáeÓ_ìþRŸrC³Z+¸³_!‚].ÙòóN‚Ïcð9þÏå>µûŽ=ž¯2É ¢è;£‡3ßîqçåÌ7—«VoÚì½òU6÷7?|Õf·Üòìï³çm¿Wc¾Óú׿ZtÞ~¤YF[ à "=Zçu•t|–í´½Ã|ÓÍÅÙCƒÛ®â×kõFéªé’™™÷}BýisʘF“ä™óÕMš‘ÎJ¸´UBÓ_Ù‚·]»dÚ9wTÖÍ·*Ëa¢“yT” aäcßèr0q«,9’ VxÈ Íû²×÷5KÕ^Æã‘ÚäµäEºfŒ-JD"YF@SÈ0¬zI'U6zg5:zª.‡±gÛ|1ÓRA¹Ò(Yž$ʧÂÏœ‘–øÏâ$zôèÔv}=ôš¾çÕ}ˆ»?ÑJd¡]ÑTÞ•C ¹åû>¤gÌúºiÑ©lúz(é5½Ïªî¾ç×6?ø©»éö=UØÅ_¶-¦¢+öjÐŒ•U!J Xòtr1?k»áìm:® Ø>«ŠÞ÷T¦Òí§èº?l­ó¼v6ܱUìýÇWn’¢ã2Nô’2 „° ô®··Ô©M­-0±±SeG¸8N Ïÿ®¿ßJóüá?C^gI¯Þ+Ñèô;¡/ë‚ão÷м9OÑÓ¤Z;Å:=èIúá8à<ø£yþpŸ¡§I¯Þ)ÑèwBOׯÜgõP¼:OÐÓ¤×ïèô;¡'ë…ãg÷ϼÿ8_ÐÓ¤×ïèô;¡)í ÆõMz¿ {êµ×Ìä¼Ïˆ±”ÜÛ‚ =ë·÷œ7^œæÉG½–ÿ¼ãùº@I)•òŠ–žŒI ­ÞHé×Ux+0’T^²Z£DFˆ"4DhˆÑ¢/#{ªÜ›ˆRì]ËpzäµZë&‚ºJš7…gR†@ê2„0Æ2:ëÈø½':ãµêü* möë)¦ßÞ¼Vµp*ÝÙï²mößì–ûÍϹb§·ÓtW«ªx£"J†r Ni Å™ÄRªñHQ¢qÛ³ÇùSR› SV°Ãfß Ãð »NöØ»'³…£kY¸‘v¦¯µ]b­÷öž¿Ók*+j%/P¨Ó—hcšgv)*¨ ª0+j²S§@cˆúûÇ™V²ÚŸR¹Ãïñá’î=–(h8£ÙÎçKºn0AOrÞ••tñW¨ㆭ ±G ”i fÁèÁ¨ç]–0+YHqÍÄóü.;Y4m@´dä¬÷.Î;Z¶óGu‹|ÛéE}E\TQı &fip åCu‘юIÀ#Sdap7†x¬Å©á¤]Ø8,i{8mz`ž“Å(ê¦V«jé(°ÉÊãÀ¾9yO„äžc ²0?xz!µ¼äßxú­t½š6í=‚¦›ŠŠa£NF€²âhBÄ‘ÀìsD‹ €£©ÇV:d`#¯ïb“kq«ïÙO³Å²²ÙM¶Ÿ‰ÏQOL³ÅM›Ñ¦ ËL0Ùsö^†Õº( 6ÿø:•zQõß{Vk³…¿n_e¸Þ·å¾áËWÔ”W z44uDTi3Ê¡ð88#PË cäº||ýQö¢öÀl{‹~èìõµ·LU1Ý7•zUAÙ!CÈæy&,¡ÜŒ™Æ#{¬û+ »Þu ´½‡ï$þ‡‚R×j¸Yè¯VK££WIïz÷¬!EU~÷*aŒrùt>ÝXYØ@#Þ÷*›CË áùõM.]žhï7*ÝÁþ1K5g¤Ó½IËo™dw‹,F]”˜{몛(q.½øV’Ðwò£.–6Es]ž]çL­yuz–X!,¬bÊÌÄå™UŽIÁ^SPØ©™ëf®-•urOS³¾Ú û”»ò÷ÁÕêUÑpYa–.a‰1+3‚ÍÌÇ Î [¢²I½š¯Jtw%omÓA¹ìüH¥¤J[„uÐÓ©Z©!“ž0àÉŽUlà Iês —®‚Ó --N/}výÊ{MMãrPG5žº¢²”KJ9‹ÏP*]X;Ÿ •U†0×ãRë#Irlj• µ8<8N¸iÁ[ ¯ðÞè7Ì2$sU3A”Vq:( …Ñ+d ’œ–'V£gm^ÛÍV­wUlì亿–_?~)œ/Ó®»ÍÚ¹n»bÊ;¾XÞhkádŒ}qÖU! ÏOÇ©¢ Äßl€dÞiqíô…úu›µM×lG¿vQÿéGLþè_§KÍÚ—]±÷eïJ1ÐþÈ_§Sy»T]vŅ¢ ‹TÒSL²!ŒáÑËÖ¡Ä©h!ʵty¢¢i)ÂVR‚F!Iæ\d€H€`r[ŒÓó|ß*å¢Òzœb¶n£ÛûV´½W`÷ä³»OiQÛ‹ˆ·M«Dkw5nÚ¶ÄL•÷–…~?„ƒTug0K y«6y†ÉòPû3Õ\@´DzgÛ—k[T<4× ¼’CPÈܯÊËV ¿…N¨ËA¨/6Û?…wÙÅ3|ÇÕÞöþÑÚ?¤&ÿE«é*ì š:{JFßÕ†Çh?þP›ýšJ»Âhéí+Þ{¿'KG\çý’œÿú-4•6)£§´ð\ûŽ]®jxSi¡»m›E]]ß½ôZ8or$…cU.Øhz¨æ>Ó®kM¸Ùˆ ;ÿ ¦Ïb€H' Ê“º7^W#ƒÐzŒßÛý¹‡Å]Üçø]ámïòü¥>èÍÅñàì>@_ŸýŸ5qþÿ ò¶÷ù~TfâíÛkÝ‹N7gúÑG?{Kß_IîßI_­tÈ$Q:£þ"Ú§1¿ð®ß‡–eR<¿)äþé5‘c Áˆ€$G.à>¿.×ÇâÕ¾láü9þ~Vóåù[Gº9s 4|€ó÷ý‡«ùj~jîç?•·¿Ëò­Ü>홹wí¢{¼6¡¦T´%òìrNzCÓÏ[Ò·¾«fï?ÂÆ¥…”ݹ~U_>èÝw¤´Ãuá,7.†^Héoe a9zžhzç˜ciø©³D²gákgøX´L:#wåGíÿtâ}Çj‚íoá-;¤Ë¢üy”5 CЃªÏŒ‰ çøVwÂn.åùNk}ÒšÛ} —ŽÄc†wî¯NíÊN`%°§V? MÎ…á@˜¿Ëò§¸_ÛŸtñWvÐíK' …ê 3Í<÷–姉W˜»Žäæ£óa­(üEõžÏð³«ðöQaq~[—Z@ßÖ88ê=ñ›ý»tµ6?…Å£§´¥<@Þ䀛vÒÙl\¥ÿÝi¥©°qü)ÑÓÚW–w»»SuÝ6¼< ôåµÜg¤5î0«3E##2†‹ eOŸ³^=OŽhÞ[s-ÿ…ë3à·Ø=ɇöhßþrÿŒéþ‹TùÿÿÇÏð¯ò/ÿ“’Çû4RÁÒOñ?ÑióÿÿŸáGÈÇûœ“›o»r¼W-¶ÛÙºifƒÜŠI’è>3«Ž—ùþ‚‰59/@p[´øã®Ì¹îH¸}CjŠšf¦Tšêów­ÝnR±áæå?×¥gµU´S.»…çW³S³Ô ½>JñîeöòÍ­Ö+òÅÄ«>ò¾qGpmͽµ¥šZ­Õ{X)yYÛÓêÉ»ª…c“áõäóÔËLCè¾ð÷T!£Yú•kôžÐ•–šx ìøð,CIKq–&dŽ=#—–OfÈèž°‹0$ß÷ÁmÿRD\çùUú;‡w.ꬬ‚ÔÕÓÛé’ž¦ÙQS$« dÃ1yƒ;3ó) Jž@:g:Њ,`ó×ì*YÏ&äǽ«=ѵ8ªöZç®ìÇi£1ÄòOt¦¥Q%*¢åq3r…-œl`c>z1ôo¨NïaÊ×Oéer¥9nñê¹zÇž»"Ù ÎÄdä­ÜÏÕ‹yùüz"^öAäçQL”3¹8ç:@I);Çûc¤’¶Ó2]˜ùy“¨0¤JöW¸‘ªíwˆXð‡v*ŸáwTXüú4gà~ŽPìÇ—Õ«éMƒÝuì1`Ùë|ºîMõïlñÓÃAR8+tjjvaäŽu¤ä›š@@<ÄÀ “®–Zhâ~˜s\¯³Ö.À}qä‡÷h» Ún5”óî"Sûá"­¾™xEuŒ U<È«è㜂sø4ÊùõCc­€#“½‚{¸„bªŠÖ×^!µCG˜â~]LËŽvåî2që#˦­ÓèDÏ6úªô*óÉÞ‹$÷r;ÔT½,wn ¼‘0yb^ÝK*°!y‡s ê=§SÓèFOTèUör>‰!÷q{UÓ)îÛþeçd2G£…u8e8‡¡u¨Î†ß@fùõAb¯œõèµfÃÜó­«q$ÊI“J’pjàÒÙ ÐÃÌAå>^ÍA¶ÙsÃû}T‹£!ÿöôZ›Ý¥÷;§i}›{†¦pjUx/peE# 0ô|¦|úŸ-A¶Ùwoª %§÷z&Rû¹总۾åˆ8¿Qêÿ ÇÇun•@êÿçÕW£WÿúôHÞî_¹–üîCá8ÿÅqõtÿqÓ¥PÙÿϪž[oÿ^ŠNƒÝ™÷>®T±\¨-»Þ¦™Ée–Ÿ‚w'GP1Ñ…9¨>GU6Û(0cû}U…ŽÔD‰þïD”>ë7bmÇW´Yªwõ=DVI«¤H¸1_Öút@¡VJr+ÀòÕM®ÎAƒžË¸sR,µÁ«lãÉw¾î‹úâ$;ómN“ÑÞ¸Yf®§ª[w¢™ÒZ‰Ýdh³˜Ù•ƒ=W8õkj®­xkhú•`[F§ P]¾?Ú¦ÝÿÖ³ÿðçY|G°ßô[|?÷à¼Åö^Bõh‰½dµ(Ê §f$ã/Ñu• k zúŠ‰Ú’TEåÊyh *H,"¹\'§yÅ:ˆãÏRz?¢\B›¢a,—I!·GYd¹!>Ó=' Qw­7:èf‰j¡åY[ ŽºIStF tîRPãÉ9¹ÏÑ©ºc XÓVK-ELI-Èä±öh $©-À-57 êxÄÕp€9°ŸÄ? ’¤4‚ÊrÆùN3ÓºÈÐö”î¢VŠ‘|À'ðãV9*¦”· „°úA„$<…ƒŸ/Vª …rXIu¬zt‘)ˆžVê3ñixÄ¥Ñ0³©¯‘jRh¹ûÕæBÍŸP:’qÁ@l…œõ>™èuФg“>$Ì D…‰¸\fï$§¢£¼,OV‰%L5,—^ZYÀà¡>¿fu3„¨ ƪº›¤´O+ Dl`ç® ’B ujyä¦G™0q޾±íÔŒ•]‚Þùñ~ J…ê¯sƒ÷ŸuÿÏ)êÛ^×»/ò^GÅ;Mð+Ó:õ—”0Ü_¸WùQùލþÊ»;J¼~R…†<9ÖKU’Å ŽhÐ0ûdrGÊ:jÐd Ó¨óŒùgá#rNô$) WHË2s¨R‘`…òc\ò’§–BpG˜=|ôE—£¹”è‰ 0Ïí,?ÓÉ<Òú:ýžVÓÉ<Òz0û“|§O$óM·¾È´o½·-†óI°MCñs#dc =`ü¾±×J”ÛQ—JS¨i¾ð^}Û.\#Üô³xj ¢X÷° „ H9Ió0Àsª°œkÌe•Ô@¢ëP®ÐIïÞ ^é³w„ô˜µY+©ª9—–_{¨`X`©TøúuÕœÇÆ’¨{Ĩ{nÊã“ÖÂ×Ëm³¸ï1P”ö)ÃweNpÇ>.l|XΨÚv‰ëÀ«—Ùã âz}“Çèa¥ŽX-ÒAé²IcŸžVæ#”*¯¯Ž<ñ@§iÃÑI}˜Î|Vê}‘DZp§’jW£wˆÕIŠ ¸PÃQ›Ú¼ØæÉ‘NÓ#. ~Ï>!oÛ›‹”·Z™·5*TÑÈè´ô–GI"n|ó3r€G'‡dæ}RÚuÁ7²ðUuJEÜüUÃfí{Ü[ÊÛ3íÊÔT¬V.ôlª ä’½5½6;H0XÔ{nWF¬¦Xî•Í%!æzÇ`ÍHÍÌ\yOMu+”Zá¢ÝmZeÚÕô!Š8Úš¶Î~dPÙ#•@Î:7N£Y¸>z¿E£K#¬9§›zžç ¦÷/£OZ«û"ZKc$e³œ"²’gufÍÞ¶~ ®‹Ý\”¥y-W¦ |:ÓÍ;(fK`c¨Æ5hêŸ%RzÁi¨Š'àŠD½B@Ü ç?kÓðj d¤*Ý‚×Äêk4û’ñh¨£ŠV¥)ìÎ%w<Üì”ÉÇ@:Ÿ²hª/ WE¦è½Yã¬eQ§«‚­îÚç<°ýDÕÚéq¾•öy¼r# r…<Ä‚1aåePT=ˆàµa`íOïkSß"²D›²J*›‡;™¦ ·:BW˜ò…V3Ÿ^¥×zÙ¨yiwW%#èRÍjºhÜ£ÃÂS2†e“Ó›¦3åíÕâAÊ“ ÇHK3Ñ(rEd~]GWbœUWÞ®,Óžî–óa™¾‘ScLÏÊ P*ò–裡¼ev¶¢8-fŽÃÅY(â•(¡ð@ÕÊúDP·#?(æå3Œç5¨Àb²9à¦ì1IÜ© D¦iT¡\Œ®<õ£GP¬ÜzásþÓ›þëÂŽÏÛ‰öšhkvîØ¬¹RË[<+$(dV‘y—™^£####XWs©Ðs›˜ z-kë5§"WÊ^!û¤³¸œ\8õ]o¢ž,Šm±K eO\sïò8 |ÅOˆZêLº9}!}%;–žMžY\ 6öâî졵Üg¸î[Õ¤AA ÒºZÙeç ™™ÊŒŽJ¬OÁ×4Ôªü䮘§Mº€_Yûmôà_ì<Ü׈¥¬´Ò4‚²8ù"•¤»¢Ÿ!ÈÏÊ2|Kƒí×ÓX¢!MÙçÅ|å²kU5’íüÀ·,L×áö~=wJâ…¥nVópK@¯€U´ 0¤3¯{Ý«räÎJ†è[Ȍ禢ð˜Ö¦ N¥£vn­½±öÅvòÝ(©-¶Ê7©­¨•ùy"Uæ'ãéåí$^¡ïm6; ¥ŒsÜ3+å§xë»8ãź¾'Ý$–•’a–”¶M*6bCŽ…ˆñ><Ëz¯Ž´Ú_h®j-Á}mšÎË=óÞ¯{+vA¼,qÜâ MåS?ÀˈzÇ·ñk¦›ô•ÏQ…Ž„þâ·&£z&†:¡ƒ Ô#2ƒ‘œ… ùdyêÆô`¨ØœVÜè ž½3ç©P´'¹.H˜ÿŽõòê3r¶M[È%p|õ*«²vx|lêÀWÿ;Éýh§üúî²öŠã´þàð\#·ÝÌ×qRÇiç<”VwP~ÎYäMyßtÕ`]ÿi‰Þ¹o÷Üû6æ}:Vk|î=%@ý¬ýºYÌ{?¸éT4Î9.Ê”ÃÛ†k²ÓTÅU uÈfPñÈ…ÔõæÙƒ®ðd.!z±¯ô*8…q¦"²öãÑY— ´ŠO/ŸÛ¶\ü\ºõ쮲ùÌý•n«y÷¯ªëv*+¥¾Ï æñï…LQ‘5X§X»Ó’AäRBôÀÀö|zîhpl%q8´º@…Žä»¥‚Á_|™Â¥Õ‰Æ9›ÿÍÔ=×ZNÄco8ò®/xw¼J=lRüÞ|Ò1sŸ-¯ˆ$“%}  EUe- }õdé G €£>²Nõê©Ý£°¯›Ú¬¥-,mËQZëàCëQöÍñÇiN›ª2Y¾£iŒs]coí}»°¬Í¾ŸÔ¢z†ýºf$asñžGA®Ö±”›‚ãsÝQدrv7Z&ìÕG%<}ÜÆJïN^lžøHüÙ?ƒ—×ÐØ#¢5à[¤Z’é°þæNŸ`?6º—2ü·nnYw‡®6{Õ]zÃ]¼ïqN”rÓ+* êÆ^F™ÂæUøx¯25ó‚£™FF 6ì¾i‡Öƒ¬Ÿ©SC³^Ù6qU.áÝRI,ÒG4öåñF9€ Íã%I?ÇLçYt§Ì@çè¶è­ŒÏ/UTØœ&°î}ÁsZúë©¥µ;e¡­¢Z¦Nõв÷®sY>`©ÖÕ+9­øÂƹÆgeºöÙ{vÇQ¸wêÞÅM4hÖâñÒ•'½(&=à="õ$žšÉ¶—½Ðæµ6v5²Iä¹mö—fÓIÚu÷YÃïÎN\7„(_3ާÌÓ:ìa¨{P¹\;3æšWàÕÕRhˆÑL„õÏDN"¤^O®7]P•pÊëC¦}zoMËÙ>ááh»cÝ™O‰xI» Ÿý•5fæ|ÑÊŽÌx«WÕŠOsÃÜðƒoA´w‘­´4vú«Vé¬ŽŽžYó$n4áÌŠ_ ‡ Œ·–âÉcH9 2uù¬ ªØD„˜5y,.¾ç§¹fô1n+§éjšiÅ#Év¯‘ãG+ª)”•qÕ[88ê4è¿kp‰õQÒmîtÈz)m›îd{›CW¥a°Ôd´ñ>ªµ-¶Ö>DøE³uû˜~çÌ“êŽõÙÝ–Jù«ik®SI!PYFŽBÅG\è é‚t}‚ÅM¢ZcÅÞªm¶½Æ'À([G¹÷î^Û૚ÓÙÖ¾™#"Z“WxÕšWnf#˜s»%ˆã¼Æ©Ñ¾á‹Nù-:M½§ ñD^çǹwv» `ìñU%gp‰ßˆµ@ró¤ zúõãé>ð_£'ÿÛò½mÄCt€úþgào`/s»{#õZ°öu¨£7(jí5M_¹+$©–™_»–™äYÏ<.W¬eŠF»ìÖ[z!ìivœÇ\6›M²bǸà5ù.ÁÂý§·vªöFÒ¶¥®ÏÃk=¶Š&<°AMB$`±$€ªSžuÓI¡–’Ñhú•ÏQÅöpã™qúVíñþÔö÷þµ›ÿ‡:çøa¾?e¿Ãûnð^a×’½E’/¬þ-EÜë!yãc)’(Ï,‘!êNªH%hÐak¢ž«y GFysf~=@8¡ÑÍÛ¦†ITž§:‚o-nñL¬‹Î%G˜óÓø©Þ%o¹Ë²ÓZ´‹Ên”©V¢3ÌŽº’D*€e6¦–›ÞGiÐ9T'P"ê¹ô¦ÑÏGÜ­$M&F]¤ÈÔ) ¬ëjé#ºS$uœ&B+èH@éYÃQ ew¦L! )|ó|zL™B±§¯6ô–в÷ŽJ9“¢ÿ«@`B’/b°‘)ÒÌÑŠ˜ÞF1(ÞDéüPMäêã5$´=Ǥ£?v§½z“ªÐoJÙn¸Ã%:G4a9[¡øµ à ´ÊxÃÝu*«Õ^çï>ëÿžRÿÕ¶½¯…v_伊v›àW¦uë/)tDÃq~á_åGæ:£û*ìí.cÇÝŵv×÷VðâM·hQÔÛÚn ÅÀRÓÒË79å,¼˜„ʰo„çå¯'bp•ÓFt Äƥ«{QðÖ[eÙ¬x?´éiÇ×-Ön&S"”:óL誫SÞB ®wÑò[ËŒ¼H¸àѰÆ20ܺà Í.ÞGç8ïKfí3ÀKMM%n½u·G÷ÐÕqj%‘gzX¦fÎgA*T¸˜:S]Pÿ–áÇÃz9·"™ÿ熬w&5]¦øTv‰Ú6îÜÜ/(èt5|Q§‰¦pÔ챸èRJ‡•ò?…”’uR÷\º*>•ƒ[~ñaÇw5Wiž‹¬µÞß|/¦IfžXž›‰$t¦C)u0õ—æˆ+³sEÝsÅŽEΜ*>çì­Œiž}_uÐ8uÛ'²FдÕZ/½¶¸qCpy-ÒÔñ –¢T€Ç…ÝäæcÞ Xg8VP:U*Ô˜Ò çÍsU¥Qî2<•ƒõøv'ÿ…ß?ÇZ/ôºÓ¤Ðï+>[ºx#õùv)ÿ…Ï¿ÇZ/ôštšáÅ:=néàžíÎÙ½’÷ö—kíÓ[ís®”EEo¶îºiçÈ$"FŽYÎ8ùjzEppâš ÀIià˜qï6ÎîË=®·fÏ_åÂËW ô§%Ò5fÃ732¨Uù“Ð0´×^+k=Y„ƒ©‰Û¯ÐÆí[Â’Hæ’7Š]¹p, ¼¨r©Ê·rì§Ö¥O“.pù…¹ý ØX+œ¾¡8¡í½ÂZŠÙèj(®pÕ\1”JVV- 潕­Ë"ós&TXr·A×ËÚ5ÙGØ*Ý·²û?i‹|§’¦ÑE4ÑÇSONÜ´u1•i‹*žWeb ©€z KmtÜ0ûªºÉQ¦Ù7¬íešJ9kê+b‹á»PVŒ~?=A¶Ñ}U…ޱÃÑ$­xW$RL¢eX˜†æµÖœ€@/Ó>Ÿ=¶°Tt*Óþû‡iM£o©©£;r¦W¦ªŽ#§”™—˜æd:“ޤyàIµ°…Êò&VÊþÒ[.ËMNâ´ÔPzLŒ´ÑMGQ#8VU,;¦p3’G‘ö ®›GXGZŽ&éž ¥gkPÓš’%åˆÙ’ÙXB“ÊO_.ŠêOÄ}zƒm¤à« b!\,Ü@¦¾Zà»[­p´)Ï9™K)'®9µ»jÞl…ƒ©˜%9ú§qåh§ùòþ–­r‹›ÒýTIý©§ùòþ–—Ê\Þ¹Ÿ©zlÿ+/éér\Þîy3“i¦Ï·ž_ÓÒþä¹½!Üò1ËZiú_ÓÒþä¹½s6rlôǧ­åý-/îK›ÖCuL=ê¦ùòþž—Ê\Þ§¶e\WZJºÆ¢D’Tw=Èf#ZS7+'‚Ò¡vÔçýhœL ?Q‡Èýe¼õ…¯úWø-ì¿Ô³Ä/ˆ“Ô5Ÿ„›j.(ï«drn‹Å04«!Ú¨Ü±ŽŸ¶·Bäyd($(:ö,–aM¡ç2¼›] ÔuÁæ½;³ª– ÝBeUhêé¤R£(?2ŽŸ½gõóê¡]PÜmg–É:˜A¨j%%ø‡©Œü]Wâë‚ÓÕ\ÒÅl¦­µ×\y¦ ZzñFÆVBrUX|5ÈÏ„‘ž¤©¤ïPC€Ü¼aî–v•mÍ{^Ï›>¼ d©.çš7ý¾ x’Ÿ>´NŽßÂ*<×ñk]÷h[ÏÑ{Ÿ ²Ün™Ùœ½W“ÁVË©èqåäuâ¯eXx[~¹Ø÷e-=ºÝ=X¸Ô¥$””«Ìò3¸T*=m“ÀNµ¢ç6 k*Ík˜gRôm_øÁ@äÍÃØUøGйÀù¤ëÕ6zãø•åŠôò :£aoº"Z«aÞ—Ï ´ÌÙø¼(puCN Í§‚¸©Lÿ!Å@[•»–©™1,Ò37ħàÄ1øó¬Û’ÑÛ7~M'%ŠJQPf‹¥b9NïL˜äëÎS˜/«›—=3¡Jk]wƒT2pþ¹v´ôPÖûø¤ ¢;EÝf3'HÈnc`p‚rí³ßÑ›¹ÎµÉ^î”^Ê›{k^®ý î0ÛiÖXèÖŠ‘Ì’rò FgÇCÌAqÓüÚòíî›IÝ Ò°ˆ³ ò¹å¦Ûs¾Ü¢´Ú){ú‰›¨8UÁêÄú€ó'Õñë‘­sŒÖâ$¯dö/ìç±wžÝ¼YweÆ­íëNbzjæŒ+Jœ(å8_ÇàøõîØ,”ê4‡j^%ºÕR›nµê‹u%nØ¢‚Ö)="†š%Šic!ãEPÑ0øJO—Áö@,©y‡™ÖŸÒ×RV@µÕ èÀáÃ0pGáήT …Í{dîµÚ]˜7­Ê •f–É%%;+Œ«MˆÔÆÚä·¼2Èóº8®« íl×ÌB‹ÖW§( ³Ô5ò ë'Z¹lžϸ’*ýãD# æ”n¾*ŒuWlüž£¦OÅ®ŠT ±vKž¥`Üšé6je³ÃC,¨ÉN˜b‘,jØó<«Ð~-u4]l.WΕ$SUÈ.5*@RM2ðF1ÍøNz{‚I’‡ õo`ÍÁé\8ÜÛM¤9 ®ôˆÔý¬Ðžcø)ö¾餿ìû¯#â-Š­vß²îÐþæ_âͯAp/ÌÎý௠/ÛãsÝn׉–ót¨’ÞÎA!¸Ôd:ºs(ëÕz×_.ÚÕšÐÙ¨ì éNq$íÖ6•_©à‡hèÙå¸Òš¨Ô<çDS…t@\ŒŽR\‡¦5a^ÐN_ÚU4ϘUnpócn¨*%ÞRˆÒ8VNᦥ™d#,ѤŠC¡ «â#«g[V«QŸ¡+*Té¿}@RópÓ‚ÕÛ‡ê:ÂõÑW5$’QÜ*÷=·‰@ð—”…sËâ }Z «h ¼rð2®iP.º&|D'ûƒ¼>¬j«&ò¸|b®HTÛ7• ¡ué"••pѹÏ,€ä{:EJõ-Šštiœy… ¼á<âVÞ*Ïwqe/K¼­Ï#Ss`VN^dÃÀ=<õCh­³‘VÐÒžaV·VÐáŒ×Š­²j'†º&VŽárÜ4Ò[¥Œr©$`“#+× `ÃÉu«X6óòð2³s)]n~"cÀýÏxcÝÛ1¹aó¶ìˆ+‚ åCˇl cÌuÔô†l<h5Ž*¯2u#>c[³dcy8còê¡b Ù>cD^Ç÷×ÿ¶5ßŃú‘îßúªY¹Ÿôr£³#êÕ÷îDZ¬7‹ž¶óf·ÔO¦#–¢Y€©ÆHê9ò'¦½–Ókš ‚ñQÍqƒ­a¹8A´7E55¾¾×s©"G„VåPÜ£¨¨ö €t}€B6»Ù$)«fС³ÄñÚ¨héRI9äðòlc›¦p´ÃrT5/fšî³¸nTB–Ç»åµJ®¤SÒ¤¥‡Ú•pAÁõ~CØò Rǰ"Tpáîü䉌×nò>ô´ÞƒO™y)ÞOV'×SEW¾y+ii÷5‹pûˆ=ç8ãx06è 8ÇRy=}N1æ|ýZhª÷ù:Z]Å']¶÷Ô±Gó–)–WiT™3Ð1R0zôÕËGiP=³’Äm=ȱˆþ®&gTÁý‰Ž„‘—Q£y4Œî¡6nàk|Ô· Û%L“cNƒº^½ã Ð㯫Mâ M#&@Uìµ°ú±åVú™¤òéÓàyyŒ{ë…LjÛ¦TÚx•oÚ‡eÙÅŠË ,êìë=@˜äáP2zçÌúõ³) m€±}]#¤®·”ÇÚcp#`•ØöÅ,=¢®«:åoõnÿÄ}Jêwô­ÿÈý¢öøÿj{{ÿZÍÿÃs|G°ß²èømÞ ÌJ Œ“¯%zˆÀxÈ`GMR¯ÿU¦ä œEÜ9.Ã\îÒN ¡·#… n”©g¼´]ÊÆÄñÌyyhÛóŠ—Æ ¦[mœ¹TÃ3Ö¤­PÊZz²©Ff r©lùuÈë¬60¹êí¬j¡á ³wõuŽÑr¯Öy”;æ:`ƒëo?,¡Ð)ºƒ®Ÿi@ovØË‰FÕ4œÆE!×r|ºs ‘Ô fK1É\˜Ÿ5 ª-“ë"íÆÛt¥Å¢c÷µc,??MKnÿ.J/þ1æ¤jO Z4k¹ÄÀ}m¦ZNP…Ès[ô·òTiÆ9­ûtðݬîw4•­RRFæ‚R<À"` Œž½3ç©fŠï[5ÒÞꩊûO­“ '¹ÌÊʲóÓÎÒ:ŽW` äyGNlkBÚ 1+0êçNü3¥Ü¶æ hãæpæV¯)äõe¹‡LçƒSôCÄe­\é‹ æªõm•2ÍNˆ"y\¢ÆO(ǯ_,¾Íds[ ±Mž’9gJ1" cÓñê*Ó‚Ï–ñŒóÑŸâ³ê:ê:ª_j.ØJ‰óy‚‰#)ÉpŸ2B®H³­rzë7ß#¨­>óp‚:&¹C[QèÍQ$1£T——ɼAòÀ\3`’uµÚ+Õæ5¨‹ì|3‚ÙSŠª´Õô4å™ùs•Êø—ØXäõÈÀÕ)]1šÑºi²L·¶îô’X e}!Tiáhãï†CVëצ~<꯻x]VmàÓy;“¢øu*‹Õ>çï>ëÿžRÿÕ¶½¯…v_伊v›àW¦uë/)"a¸¿p¯ò£óQý•vv•nçc²n*7µî=-u+^š¶eˆ9« ¨>­bZ×p•°sšdQGƒ|n­Âí·øìTß¡ªè(wG­¦¯Þ±ŒiúEOꜧ‡tˇ¦® 0CM'UÏÄ<½ˆû5'D )YɆ¼ÃTbV ¡apÌK8\аÏÅ×âÓô€”ýL–¸ áu4òÉR4³Å ™wU¯‡ÄqŒåGèÊ) À¼<ÛÒ cÌP ‡ËÙå­tMYé\±NmXªª:"²ËŽöE 3ãË'8õ{4вfJø„Cà ­KÏèÔO’S#ˆÜ/3Ÿ68Iõ4,&•ë`áÆÛ° ~cæÝáÏËêÔè›±F•ÛR? vÜ©É%4Œ¤x‘¤Èaì=:F‰¥N•È7ÛŠ¸ZWör‰01ìòòø´Ñ14®BðßnƒHàg=$ÆO—^tÑ3b+’ŽíÜr˜f#Ëcͦ‰ªt®BpßnÆ-€@ï=~ß-N…»i]µ$|7Û°¢Ç<¡Fp¢c×85“Bi\²ú€±g/åOÑ©Ñ54®Aáí„ô4ò ÿÇ£MSJåZÞwl)ârzLÎ%e•I`‹©bÀu', (ùŸ uCJ™ë-X*Ôì¨Xx­À‰Ôkd‹”X©vUP9z–ãÏYéìÇZÓCh”¦Ú¾pãvÕ\èl´µìö¢ECɪ·‰€eû`y y‚ÕØêO$ JmVNµ UÅÞ[ÄR\nP#rwŒc,UfL¯\ùƒŽ¤j†½œf´m%¹8§Á èê+)+k¦Æ>ò4¥—Ÿ•ÜFê%˜‚ªÌz 4Öx•DÁWýŽÖJÍ«ïÖß k…"TBf'›•¼ºãË]4î–Ku®z—ƒàê\綘ÿìijœgd\GþåµÏlþ•þtYªgˆ_öÍ^ÝmÅk—qOÍl÷Ê™®H½óz2L¯)~åR1æI×È4ìr_Tânྲí×µ·¦×¤Ý;ïOq´ÔÀŠª‰¹’D Ðê#Ë”õú6=¯l·%óîkšèvk}†þ×+EèŠÙ[E'‚¥)nwsCÊÙ*ê Àë>cÛ£]y¡Ñ Ø%¹®Íq†ïq’Š[Æ:hÒ±%©G¤zDNcRHä,ÅO0ÎòëÓÐ!Æ.®!tL­÷+lW*oC©§VÏ–N©Õ¼ÁÖ:ê\ÛÂAƒ+ä&áYÎá»%et•5 x«Žyä~vwZ‰™›=X‘“¯ˆx!ä«íA`…Kk¥£¯«¯„IÏXÈe 32ŽT9Tœ'@:.=|òuUeéssƒ?WüdŸ‰*~{~ÐA$LÃ(× T¬@ƒÐ”™ñíd:õ>gÒW¾roÕyŸ¯££pfï¢ú ¤¨$!ÀÉ${s澟%ókòF^hÜ«y¯ˆôÓ0™å~М¾[8™=^Ç´úE Ö?Lîc•RÈÌC®ƒÊÍ—\æ~-x¶«3›[¨08¯^Íhk©uÎ!Sâàw*_”Z)—>·¯?ëTê[šôFµ}áfÛ¾ðöÍWnÜJï5W|²QIÞ„^P§˜`7«Ôº(±ÔšA\õžÚŽ/q¦¶§qq»tÕ,rHõ7Ù¤R¬0¨Š ž\xVƒ~ÐïíYÅÚ ðW~ì(v}°½\j÷”i@ý­}q¡ø¼Éõœë¢•-Þ°«RùÃ%é^›¶‰í›šóMgºIÔÐ@° {÷à™¥‡™ø‚ñò âòׯðê€:—•ñh«ºq‡‹['|6ºñcˆ7AMk´@]ü^)ÜžT…Ù»¹TUIaø5éVªÚ4ËÝ^u*N­P1¹•ñ×¥¸±ÆÎ$]x‰¸·ÎîS–ŽÕn»ÔA rÇ ¤n”s’ìY²|•kEJÕ ÉÍ}UèÓ %I¹o Ù-²Õn›­@…L©MÚ¢Tf@XGr¬ r<¼°pu•âì Öq Ô»…ÖZ::-É%{ÖTMJ’Fg… DåAæUÇž}¤ãÕ­éQhË•%ªâ°V)æ7Î1ÍÜ®N·ƒµa#bÓ]ª°ÉUVfƒ¿Äд`gÀr=@ê©RÆÊêºúzêH©­’Ï òª©Y‘ƒX0€œ°>Y:“2 D.çØ~ÿ]jÝûƒ45PÏa Y41ó,rs³F×Ô3yG¯¦½‡<µîÙ ÏøƒAcvÊõ|?¹—øƒókØ^JüÈqið¿|njËÍ]+þª® w»ª¦ 0nó–ˆÅ…ÁæÉÉ>xòù†¾¸ìÄ C`Þ¾‘Ì I.‰“¯z盯lpá7tíµu²ÓÛ!Ì«¸¥ª[»Â󊋹Ӈ´›Úx,=žž¢ÃuzˆçCHÉ$ˆ¥•Ç…s€¸Ï³],Òšxœ|ÑŠ˜ üTÞÒ—cì)^¶¿‹[žêµ.¥#¼dX˜6y”ò¹$ƒž‡:ц3%丬ߤ©€` çhâ^н™…®æeôx»Ù¹i¦^UòωG·Õ®†Ö¦ìŠÁÔ^ÜÂp›ël=jЭÇ3;*ª_ͺ/ØôãÔéY1*4o‰….cÊ22|ó­kØQS´îäÀêû6ÜÄçÛYUôkÏoõnÿÄ}Jôý#|OÐ*'oö§·¿õ¬ßü9×/Ä{ ñû.‡öÝà¼ÄŒÈêÈŠÄ8!XdˆüZòW¨¥k/–Ih¥‰,H’I°~EP¤’F1×åé­ ›*†ºs]ÁÁ^\,”•Õ62ON+úC)f qê×ChR-3­Cˆ”ìð#†Ùvü¤"ÕmÓVèôv*ôšÛR~¡7p9öô„ùcéÑèìN“[jVà? \œØg9ÆsVÞ¯-GF£±:Mm©øn¹äÛòuöÖ6u=ŽÄé5¶£õá¶qõ:ÿÎßNGbtšÛQúƒpÌùØ&Ïðjßtj[¤ÖÚ”ð'†¿ca”ÿ©´èôv'I­µ¨WKkƒðV>ŽÄé5¶¤á¢xb°J°Ö>4èôv'I­µ/êÃ^ß“È ŠÇÏM:=-‰ÒjíAàG s”°JIóæ«}:=‰ÒkmXþ ü7Ï]½'Çû1ôèôv'I­µeú‚ðÇûG?ó·Ôtz;ôšÛPœẞdÛò|DÕ¾u=ŽÅ&¶ÔŸ¨_ y™NÞ|àgö[äãNGbtŠÛV?¨o Tø¬“<ñXäŧG£±:MmªŸÅJ>𮓚ïOP— ˆ˜ÑSSHÎùÁòç¢gOLô×=af¢1ÍoDÚk2T[ öݸ¨=:×?x áèÈÞÆ£¬àñ!t9¥¦ õ¿¹Áá²î¿ùå/ý[kÛøWeþKÆø§i¾zg^²ò‘¢&‹÷ ÿ*?1ÕÙWgiVoÔ×JËTôÖJñKTÈ;™È>Ì òPFpqœëF­ã’¬ñŸ‰pðò’×´÷…¾†ìµµeÞº F¢8¹¦p9”ósòÛ !]›¦5•QWDL¼ÿ JZ-!.6rMnz‹dÜ*i.65»TÕSÉlïš0”ñ¼Ì$‰[\„äägøNX˜Ä“£1©Hèæ ™j>íní)[IT”¶ÖY˜ŽêŽ(¢x ÊÄ„vVñXú70ÌŒ#—Tpµ`…`l ‰4«ƒµ}Ú†ço{Ö߉™ãJwµ:+Â¥9‹py[<¼àq“ ‹k<½ñä¬ Œ`ùûáÍav¥íNÕ3[¨ïV˜šã=[%tJñD)•ÑÔ&T,Ä8$±ÃxÇ\ê¶L1Ÿ¦¯?Êl‘$#ë¯Ëð¦vÝhºmÍoŸpWÚÚÒõ|×E.2±ª…Â…Uc†f)ÓŸ¨zkF Px½¯ß¢ÍæÌXnÌêLì[‡Œû’ª½-›²Ã<0Ë1¦¬ ¨¦GLʘ< AÍʘ³fð°QVºÐò`Ž^òVsh0 Ÿ¼ÓxiûLWVÔRS]éÒ‚š­}¥%‡š¶&@ÊQ™YŠ’çœž^Š`Œ˜,’Ãëïü)&ÊXý=ÿ•pÜ;úõlâÝ“‡4\/¾\(îöªŠª½ÏB"V£ ¢¤u î®ZNrQQ_ö·Î03Òç‘T44ã¯bçk¦\N\Ô‰ÞUXɶ.üŠØ©Hñ_”üZiš1´+pD›˜©’0y[<ËñžºÚ2²4äùȯéшèÌäõ?Nˆƒ Ÿ³þ³ôèˆîW9çþ³ôê!L Â‡ìÿ¬ý:BJ;•û¡ùOÓ©PŽå~è~qútD‚ó/ŸÆ~D)”½Òý¿ý#ôé (î—íÿé§HIGt¿oÿHý:BJNãéùOÓ©PŽãþ8ü§éÑÜté1Ï·'éÑO~ïŠ}ŸUN•»V¢å ‚bÒÒCÞ2rª°^VnbQÑO_V°©P0â%mNñ…[£ã~ݬ‰‡…·ÇŒ÷b6–БªóõÁåä< uóÖBÐÓO© á›‡9´7Ü{Š{œ1ì:Û|t„÷rTFª*Ô;ª2í gË›:Ñ•ç« 7Ó¹iPüt°Qˆå­áeÖXJ(žJ[h‘#f0T°C cÈô'#hh͇‚ÐYÜrpN6*Šª-¼.½÷ð÷\°KlD.¯ Vä$àò¯3Ÿ‰p2H·HlHià£@àqp⯻jæ/[F;Ñ¡z?I¢GôWÇ49Ï€tùuÒÃzœÄ.w ¯…¹!Š{L3B²#  ޹ .AuÍý’®Ü×Éu"ŠÅg훸mû~ÓKCvKbË ³²LÌÄ $Éõàg_1ñ Ñj!£Üôß.6PI÷%s¾Íý¨7÷gÂ׫$õV¹êH»íê¦a aÏ(hÔRSœ+ <ù Á²ç¡^¥a’Úµ uÛŽkè··v‡g›¨xu]K:Ù£¬z Œ‘,”=à3*³dF3ÏÁökÚ®ê´ìÆ n¥ãÑm7Ú2íkÇ—NÖ\£¤‡ßNлŽL«8jäŒs“…O€1Ÿ!òkÃé–²;e{]Ê`'cŒíÏ#Ë]F”õ¬}2”a'É‘ëæu»è±ù¬YUìÉ8ì+Å.,KWS³7 ­-ô,©-]Ù^"îA!W•HcŒF1Ì4¥ðêÕä°ˆÞ•~!FˆàÉØ½‹ÙS…ÖîÏ&‡‡—¯Ý"¬–kõm5,† jœ† ¬,Š¥s×”š÷lt[e£pç¯Åx–º®´Ö¿«W‚¿]êvÝò®†®«qÔR›mjÕÆ°Ö½2LÁYBH(‘,é­±¸KW3pâÃKt†H+–Ñ©¦¨^VFåë‘ëÂ5ÛL‹€.:’\J³`4éГþºjë4ÒÛCY®:;ÕØVKÝ•š¨B"ïrOPƒàôÀüZ€l¬H.vqUZRÝMNÕqJ X ñ³¿ØžG_Ätn8 ÑØb½mÁá°¸SõÛkWQ-}Do=ÎsC T0ëâ)ðTŠ=ƒ>½{T4T)]×­xÕô•ªÞÔ»T_¹“¯ØÍ®õÄ¿4»Ãnp"é½w]uÖšÕ-Rß.‘KréP.‚¼ªH‘òÇ+žRFW_*h–2€¾˜¶&sÇnÕ&ÁàÍ=¦=×õ;lñBï-ÄÐ\Úp̹.«€r‹* ƒ‘×:‘R¹uÙ3ä§G@ чš¯pƒ†»f÷E=ËqÛbº#wíÚëeš {±3a 9‰°á_¦yT0åõé^«š`óÖTiµÂ]JwuìžÐŽåÃxm´¾ˆÁo~ó\Ö:y±fò•¹NAòvn_25›*V9:NÉ G²Í±¾ ¬íÍŸt¡§«=Ÿj7L¾í-Z#4^2™œø‘±ä@ζsÁ‰}ÝØ,šØ˜eî)Û[…}²š®ËÙI H)m=Et½äÈJ¿U\ùôîÎ+Ó¦F¢`ãWè¦$aKê©×Þo›5KÔݶÖÝO5_-9š‰ÄjdªDŒsàå'›#¨Öí«LŒ ÅÔÞ-!?…y×%׌ÿwªé¼Ã‰íôRí·w4Aâ¤[¹–fäY¥¢º¼Ñ ó.y¼Ç?ò8=u{¯Õ?Ýê©yšã’‡¡Û¥zþ‘¿ù TNÞÿíOouÿγÿðç\ßì7Çìº>Ûw‚óåÀHöüZòW¨¥«®ûrKt±Åa1ÌUÂ:cÃç_Æ>LkBæÆJ¡®œ×hÚÐÊvݼ ¹h£Ç—OøµÜÎÈ\í•!ÜÍ÷ì¿"ý¶;UQÜMê®—ä_£Lv¢;™¾ý—ä_£Lv¢;™¾ý—ä_£Lv¢^æ_¿eùѧš$̓û6O‘~1Úˆîfûö_‘~1Ú‰;‰¾ý“ä_£LQÔ¾ºù>Eú4Çj Ã0ó®“ä_£Lv¢­ñŠ[3†4ñToÌÔæp{ˆ¢¼’LyáUsíÖukS£Ú+JTjV=P³ÚœMÙÞÈoÛxDÔèü“†Xš6ÆpÊÀ8Ñ•©Ômæ»}*”Ý&·®5ð²ÆZ;‡(ð‚A+ÀIÕ]h¢ÜܬÛ=gdÕQ¼ö¿á}+k–ëq`qË2Æà/bëu”•³lUŽp=Giýû¸1ÇáÂ`NRJŽñ‡ÅÕSôµ™µÕwa…_¢Somë(®ý±÷bòÓZé,ñŸƒÞGX…‹êÔ‡[ߪ¶ÂÍr©»ï†œhÙû†ŸˆÎ×êg’ +´âÊÀGEÎT…À>zç©JÑM÷Þ/-éÕ öÜiº¢xmb¸ÐÃUt¯€À•`‡——$ƒWŸÈ5J-"IWªà`íOs„æÍºÎß”¿õm¯ øWeþKÂø§i¾kÓõ—”0Ü?¸WùQùލþÊ»;J²ûlk1šÐä©] h6vÑ£]äòCN·îj"†);§jiј‰wnã˜x”à^°´† þð[Y‹ÃÍßx®Yr‡€t÷õ»Eº7+ÒZ)Dô”)b2SGËP•1ƣ뒊ñèÁ‰FÏAÆîŒ2`nÃ9ÿ ¬t‹±Nüv•f«ßœ¶qçºçâp¬&{mÂÒh]ÊËTË„e\*Ø ËŒ?9<¾MK0ª]{£Åd)ÚM Û¸g> ½OAÀz }Óun+±„ÃKÓ"ÀªÜ¥—‘9X*…™•KgÄu˜`’|½ù­I´H{÷ kfvÚ^š‘V˜Pi½l}ï³#åw‚e' P0ÏÅÔi¤¦š:›VôÜVJ„Y¡¶VÏÙ-®BãåÕƒÚurU,p×Ím÷æÕý¥®þŠÑÒðØx%Ó´qG¿6¯?yk¿¢Ÿôt¼6 tíQïÍ«ûK]ýÿ£¥á°ðK§hâ—ß{_ö’¿ú*OÑÒðØx%Ó´qG¾ö¿í%ôTŸ£¥á°ðK§hâƒx¶üÉ]ýÿ£¥á°ðK§hâ}íÚJÿè©?GKÃaà—NÑÅa%öÑm$–ŠÕ 2ÌÖ·iðéy»9%×mæ¥#£¤e i£ëìA^¤•— ÑýëÌ@I(ôNŸ±£ùƒH %ƒG÷¬0i$¤ô O½Óæ£H %`-´½ „e}a@Éöé$¬½˜ w_øÎJO{(~öZ] x¬.<0¨'̤’±6ú^^P `ÆJÕp¥§‚Ù?uÅçC€ R .UMÁ“gœÁä?uÎîÊÜf¾={¤—1zíÿ¹f¦žŠ”k-*6å5ò¿'¥»Þ ¾žÁý+}ë+·{—=ˆ£Üµ]©x³k@¥rû>×T˜Z© VȤx£=Ðòb{Ï´ÇgÃlSúµ—'Ä-4TÎ:×».u ¹v­ú“píI©aª“¸¸wN+á# *ò3íù¼*Øaëã^ÉëÓppÚkÛ;jmþ ðþ•‘ˆ­TMQs˜8æ•ð]ä#ÌdŒ.z`¯ ¤ÆYé]Ùšðj=ÕêNÜ—ìçÇK…o.”ûšvnêÖš‘ÈN£( Ñ€¸õ2n¸,¶‚k›ßÉwÚ¬àPŠï×kíUºñMKWhOz-D×Ìõq¬t-)EdosÇ|+Èy¼Æ½'8‡FÉØ¼àÐZ`ã¨m^Ví Æê~+ß=ìÛð¬J)XRƒ ©­.ù±â €§Õâ=HÇj´ Άä9¯^Íg4[.ÌòQ<ݰímÈ,µr¤6û“ˆÜã ܤ#œyø$ücT³¾ãàäU«²ûgX]­pÄdã>}:|£^‚áH­ÍÐ ã—IDÞ .W¿T è>ù€==¤)Ïáo‹UÍÞ roŠx‚D€`Œä€qYBÅ,{ªª›nTRÇ,W Ö) /BŒ7Æ(làôÔ]†íQx³­±p>?{Ž»_pï|;?ïÈöí5\RM5ŽõK%U=9RªÑÃÆ‡›à1e\\šæ¯ð¦¹óLÆåÕCâŽk?PNõÄ7Ÿ¹-ÛksËf°mýÁ–«èIcîsF¸>ÁθŸð»S>ÂëgĬ®8˜ñöUK‡}“8“µ¸•'vÂÀ–ØVµ-×jÇË‘ÜR 'Ȱ\‡\âÏR›îÔº4ì{/0Êïu”õ1-$ôËʽUGR§ÕƒÐ—]N` \xAÃûôzúkýÒ½å¢(ñGª÷‘Œ“‚X†g[ФڒN õN Fk£ÛxEÃlííúydUœÖHe~¾D«ŒàõÀ5ÔÚZr\¦½b3OªöÞß´ËGx´múx&†VE50çhÜÀ'6:œ)òÕ‹ *‡¸È%;’ño‘Í-½C‘âZhË„ëöMðGË«€UºW¢¡ý̿ě^šó—åÛrp3|Lâæó¦áÎͯ¯ômÑqiÒ*ø)™D—¦FÄÓGÁIsðsÓ¦¾u•h²›oCè¾êu\÷gêT~ñµqs„¶ºŽoÎÑQTAD*j暬K<0»7,ŽÔõ/ÊÃÄ9°:"d O}àï|šŒeÒß|TfõãÌÛ—`l“aÚ–ý½.Ó³UP×]ì•RES}yª»ñQRW”™#_­/‰ü'Ìyk]d“ôñõä²Ò0úøzsUFÝWú¨½¯tÜ%±Ï× _+•g#§«§OV­qƒ _q̧·p[ ôk~íºSÅœ´p]'E>¼•G9ÁÏ™ dê N )pÈ¥§ÝÛŽ’1&î¹ÀùÔAs>d€®$õÎ3œût,i9ᯚÙ6ê¿Vózné¸Ì­/xV{ŒÌ “’Ø.G1?d:‹¦ûŽed7]ø빂>.³Ž_/côòõ^—³KîÚx”µ—Ú‹‹®·ªª¹Y*êžVU¹‘˜ ld—NeN^8]Ä eÊï´êi©èia¨«žib(‘JÅb|«œ† Œ.Yq– Öm­MÄsWu*‘’¯=DÆÎõ()c×Ô<ý¾®ºÒ ÎBö׸ѳ7>Íí™UM¸ì“SK[ Öôñ—FfS à,`ƒ×Ûê=5ª5äÝÇ?£’«Ƚ†_V¯»Vú> ÒTR_i/ûr“o£ Fõvçô¸ªÂ©ï^p½Ç'NLNuíTà@llÆ}ŒM#" 3å«e¦^)Ü¥3Ú÷ŽÌ¬‚)˜ÒPLÌË‘•%e![—›¯\tѺbp-PíÀ‚¯ž,d®=2uÔ¹•7‹•z[T7Ír¼@²6b´É"ʇ”uÂ2ógËúµÏ^èóIð[мOTÇŠæ·mïÃz*—¢—€{úd„´QTRÃ9NF<щÁêzàõƹRˆÃFî~«­´ê‘7ÛËÑ8¸ïý¡_m5÷>o6jktf `$0(ܱa%Ál¤±À$xˆÉÔš´È“MÙ{Ö S¨ „´»—‡wÈàf÷ œ’¦Z˜ÃU[ijÄœg”=è»ý7sõBÊ­þc—¢’]˰/Vøíóð‡y¥=?±ûúJ¥=XAÊüÌrs“Ð`õé«_¤á‡[•føä±ú¢ÙvÙéëix'½ádhá¨=ÑVð©LO/\úýš^¦ Üw4»Pˆ¾9+ï«è.V¯O ÛWKRVHó¼8Ùe.[º³„ô ycË]Tˆ"@"v®j ƒƒŒžíp :Ùb¸ÆÜrݨw)æ'ÿ-ã䮪ó™ýc¿ñR½HßüÐ*Goö§·¿õ¬ßü9×7Ä{ ñû.‡öÝà¼ÄŃdzµä¯QI-VØ[ Š¢ß1®2¼Üž~lƒžogÅêÕå—7ªÃïn]·j _lÐH?¸£èzxG·]ììÀþÙOðß|ŸÉ®¬ª“ ß'òk¢%)(ó™¿&º”G$¸æï›É®ˆ 9 ùå%»µÀÔ"0àgÒzc=Nˆ±˜—žjÎí~ÙÑ@ùN™"­î/ð×k9‚ñÄ“îQ2ÈçâÂsñk'Ö¤Ìܵm ¯Éª‘~í±èæôK-Âã/ØÄð!É®w[©Œ+¡¶*‡<Rñ×´.ò~çbð¤Á)+-U±ð¹Uüú ´Zªv¯ÑìÌí¹T7þÒã}¿tÛ¸›Åmž/±!T–†Æ‘€| ±©ä9õ‚q“¬*2Ð*Tl­©¾ÎXiÓ0𫳔¼P«¸îíáj¬°[%¨g  …U¹˜ä`HEàç Z—LKœ (­jÑÖ™+¨Ùû+pŽÔžÙQVÃ×Y1e?àŒê×[lt¥Æëegk…l²ð×eíä˵-ÔÄ}”6øóò‘nÚTÛä±uZŽÌ©„…¢^í%åìVäÕÕ%6»Ü¨lvç¸Ýï M Q$ª õ(õ’Ou†¶IRÐ\`TÞT;ÿˆ›~¦‹mw–Ú`¦@Õ:ÏZIäîãexÕºu,ý¨Æ «U¤7ºÚ™§IÒì~Ë‘ÒROm¦J™ey`A2ò±`0y‡Øœç§«\@!v’ ½]îp~óî¿ùå/ý[kÚøWeþKÇø§i¾zg^²ò‘¢&‹÷ ÿ*?1ÕÙWgiCÆ‚OYÖc5¡ÉkºYí7˜žëg¦©$çD¨Œ:«`ŒàúðHÏÆt-Bœ ƒ²p‡‡ Zº+~Τ1×Ï$õ~½é•Ÿ!²[>ŒÍ´)4š»«Tqœ“¯Ôßa0pvU·2:¼®´ª™\º±a×!Ù›9ób}gS¢§ÝQ¥©ÞMé¸MÃÊ]Ã.é‹hRz\Ô«NÌGQI8Tø*O1Ë“ž§P(R½w&µBÛ³‚™µY-V:OB´Z)éb2<yÙ¹™°$äûO_^´ kpP¹ÎÄ”ëî+òÿ¯S”Nô˜_¹/ÎÒ7$ïFîKó´É;×3íC³&.8q§  J𥬒¡‘Ò¤¤ê¤0V …f<Ý0@:äµ ÌÀÃŽ+ªÌ_üœx`¹%£fölÛ.ËCÆúƒ8ƒ—îÉ'v â ”†p6 èÙõëˆS²3'ó]Ž©jvl䦨ìèMD—.4Á_ORâJXkw cM'vËÏr瘬ÄõòÊàtÔܲë|ùûÚ¢ý«S#ËÞÅÐxwƾ ðkfÑìz^'Ú^š$TÞïò<¬¡¹™Ýrܼé=|³ÕJÑg³Ó ¼0ÚW5K=zï.ºqت—´æÈ©’(`ÝiÐI ~™';¡† S<¸Rså­Å²™Ö&Èñ¨©}ÆkWe– —t³\$§)é"ž½Ÿ1*¤…CЕaŸˆêôí©†Ug4±x!YÖ£x0ævÌ{}._ÐÖß©¹cú{Ö&£yÊhíƒÙû*_ÐÓõ7'éïY 7‰9Ö¿ç2þ†Ÿ©¹?Oz='w÷µ³ùÌ¿¡§ênOÓÞQ¼_¨¢µçþw/ú=?Sr~žôÚç>ì6ʃ-¸ CÏËS.qëÆSPí$jRÝëSÈ0¸Ö‹4º"4DhˆÑ¢#DFˆ&[Ù¢&÷b=î›§ØUÝ•fö•Gp ’Ñ4~@ªõÏð—\îì­ÆkçFÜìiqíWÛû‰{ë{ZÝ6“yÊ.IÓßi’Qh£#Í<$ÊÞ  ó7/„Û)µ[^ãÙï’÷jèÖ64vˆ_@V+m’Ò.â–ŠŽ±ÅhòTPÁ{Ö·p^..;Êó÷;[M_#펰¬ã¿½IDÌŒ,HÃàåFXQƒy–‹tõiñ^•žÄZ§¯„}±w^úÜmÔÙì·‰á’hªk©'hž™ÐÁÑC‚TêÃÙ¨£n©Q×H+X™M·!=ãÝäâÝž›•¨¢«¶HÒÑÓ,d C¨ ŒìÇÏ Au:µ¤>»FЫf,¢ã°¦8KToµ|JÜ´†ÞïGl§¨R&À>Ú Ÿ^I5[xÔv¬µº°ºÝx•9Ûãµ¶­•;ÏI ÿvE Òå !j'·S;È"wøL¤`«ä â:ÖÞö±‘­ßE•…®sääߪó=šõ®–H¿=]m<…ÖâÑ$MÞ 9‘‚¯E僧_Sy ¼xí^³®“– ¨qs´Åï‹;zjRÀöúT§_~‡Á5•*pêÎ!ŃՎ2=•ín®Ð܆½ÿ…ÉFÈÚ/.Ïg½«—P[Þ‚9Ä—*ºžþ¥åU nï›Dè0‹€søuÆ.²f`ì«ÁÅß»•·•úŒ=¢Ó/Öc‘C%]A•pzAâoQb¨ëºÇCJûÇ!Íq[+è™tfy.û½6nŶm»žå’Дbކj™$¥•¢Ç"3’BžSåëôêS¦ÖD/9¨^+æÝWjn?^`ÜK¸@³F®½Ìq#r°È<³Å¯”6ËIþKéÅ’Ì?Šî=‹xí]½)k8q½o Uw¦‘ªèjêˆ2UB[2s6.­ÿD®½  Ô8® uœS!í.øÂ6RÁœ¯Myês‚»Z×n¹­-¦Ý -¾Í@"¤¦…ycˆ¿EUÇ–XãøCW³±¡ØdUÞâ$œJ±š"Co’‡ê¢ÕQ¸ØËÊkS-/3NJ–_˜Š€Ù$g¦q­b¬D‹ÑœažÅœÒ™ƒ8ñVInt6ùU+jcVdÀ…–cñ“ظ ÖA¤ä¾mvÐÞ›ñûT^w-Š®ÖQ †Èµ0O@‰à`¹Ã+3HÄg ‘œ|¥¾¥^˜\pÙྞÃNŸD íñZ¶§>ªm -´p5ÚV’‚J¡°Eb:¨\žrÔ2µöáš—Ò¸ìr]'…Û‚µ¾hªžFôy‰¥¨ÉÇ…Ï…¿…ùÇ]t\PËU·é»¬vŠ$¿¥-–&º\‘)¢x"S5O!r‘ƒæÊ¥Üä¼Ìzu×£ôÆ%yònÄàeá· ©67«¨Š{¬ËÊïÎ9)Wíc?å7›z°5ßJˆ§‰Ïè¸jÕ/Àd¼²»\ìž6vžÞÜáÆÔ˜ÐÛçž[EÂP•‚Ò*· ØäQ3å@Ï8$úƼ‘hm[K˜Á†¯Eê:ÎêVv½çìøs/ñæ×²¼•ù¯»ÐÐÓnkìMAkç}×u ɺ`Vgkœøb¡ü'ÅÔ6 óc̯““<†­Ëê@œg^ôÎßOn©Gžk¤Êõú<5›¶žžD"N픎|–æËÝò:“;O¡Å$•{Wßi¶ýVÕ¶SUÑTw£xÆ‹Q/"·,LN$ÀpNØ)Çõé¡riBÄñ*Æã Ö¡TϦ‰É¤jêýŒ¶Öÿã÷cðkxÕmû¼ û¤Õæá5(jZ^é§‹žç<âDŸÀ!ò OŒ=àSJÉÇÞ!~‘í•vxv FàâˆÚ¢ôƒX»b\óståö禾¡¥º!{(_2ëÆ©»œ­»^ —¿Òöe-µ)&‡lnÊq惃ÓâÆ5f `K"7(y©0å*íΘQŸ‹WTT~3ßVÏAB&šcž³‘šW§Ø^a…•_¯°çâ×5¡×@ü}×M·‰üý—0‹t–¹TRÖYžŽž:¦IRJ 1‰Ê†eRÂ~`[TÍ×Ï\wñ‚#ÿ_U×s ÿ¯E+Mv·Üª—º´Dõ¥Žßkï@ä=Ò¯žn`¤(ÉzãW—ÿ>ª—Hö}ͺ>$YžzëfɽSºÄ%%®Úÿ3Èq>9‡(bzdyhÑU²COê³:'`Hâ}½ û‰ÉKW5fÛÜnù"¤OE¢ ˆÙÌ  yX.0UŽ|Cõ\:´’¡mG5² ËÄW«ôÙ6®ã0¥B¤j* ]0bMåÐ|úôΦýY˜<½T\¥Ž~ŠÅbÜ׫­q£¯Ø÷J直ÃÉáòaÊìpÞC¦}¸Ö­{œ`´…›˜Ö‰N¶9öœkU’âÛk®{rtëõAŸçõzó›ýc¼Ô¯AßÒ7Äý¤vøÿj{{ÿZÍÿÃs|G°ß²èømÞ ÌEI(êF¼•ê&Û¿ym]¿·!¡¤£yï•¿"Ȅƛ Ý?ùu*1¬ÚV¦Ç¹Ó©Y8wÚšdSmž*[šÕ=H°5%#8eÀÀeêCràû:Ö•²:µ0…•[ãzž*ÁSÚß…0dEv¯”ÎXÿÍͪôá©¥OA:Ü/Ú¯xÔŒ[x7r‚Z9 ÿ£ÏâÔôʇ&èl½Qø³Åm÷¿¯v{ü£«Ú‰'Ì̱̜êN ¼Ü£§/ÎqÓ\õëTªàÕ ¢tÚK:ÅcÃ8¹]}½l. ïéê-°MÞ5mT¼¡£$*º– Tž¾ÆqžšQÓ—9”‚UІ‡Õn*íf 빤i¸‡ÅÚÙÔ4¬î¤úÆd<¿ôu¿D¨þÛ×9µÓ`ê1X¬=”xIf_Ù4•W`ÖJãÙÊAÕ¶*zÉÖÊÇr»X¶>ÑÛˆ6þÞ·Ò*ùw4 ‘øñŸë×Ci±ƒ°uW¿2¥c5,yV}B4ˆ|˜ÕñTžÃf²½Æ°S/)ðÌY²: !ñMݪ'b$¥µÃ+"ßdp½wHü³×ðêa³šIذW³¶ÔUIË×Ä‘¯Ó¨Á1Y=u‚ž.úz&ð‚ÆIj9@̱?«BZrPSoº«ôž°vÕ$Èt¸+µ:ãí!¦#øák3P»°<ýæ´Ñ†öÏ—¼–Ë>ÞŽÝ^/—¨î¥+*iÕ»¬ú¢Sá$àd“×RÖÁ“‰PçÈ€R7‹íÚ–×YST-ËG+Ú‘9[Âz`Ÿ—VsœUkZ\óÅÒãYw¸Ow¸¸iêd2Là`>}=ZóKŒ•逽Iîp~óî¿ùå/ý[kÙøWeþKÉø§i¾zg^²ò‘¢&‹÷ ÿ*?1ÕÙWgiU÷EÞŽÏSQ`¢JŠÅAèð¸ÈcÌ3Ó™sÓ'Ã8ÆF±qpn­š8ä¡÷>öÝ;Oj[/slé«ëj«`†²Ž’6fˆ?0gT@Äàã¡`bK½húc»%]ŒcÞD¦\ûM_hjj`^ÜTRPzTÞ“ÆÀuRØî]YK¯¾¹ÝkpþOz–âÊÒ&ðÇÞßzÔ”øZ¿WŽ!%–Žï/î?³*iàŽ q4¯ãVg“È ¨9~2y”ò tš·A,8Ǽ”ôzWˆ¿”ûÍ:¾ñ«wí´¦£“‡5W Ï©˜®5©GüÉ3«å9V6”Žn°VÔºÐöÂu¨m?ù@˜MªxñÄ:jZ¹8 ws^ó¥ŒJe€$*ä¹îùT´Êœ•RÀ–šŽ“TAÑœ}‹=2H¾0õVn#Û¯gšj~Uß#•©PRË”H¯&e`ËëÏOYÖÕƒœ{3’Æ‘k”(Ý¥Âí»_LÒn {Ó$/ÉOÑSL:œ‚¤àu=S窲‹Hë28+¾³ÁóÅLþ£<2,ñyÔ•É÷–Põ|CäÍ_£ÑîòYéê÷¹¥—ƒ\0„“ðá$eB¡¤²@Ç”€9z,*Œ{5&ÏG»Éz½îkCð3„íQOXü:=å)fÖÓ*X>_QѨgw’ž‘[+ÜÔ¥“díýš’K³¶”Ô2Lñ÷Þ‰kŠ3"«‘ŒùŸ—Vm6SìòTuGTíóZ!ÝœUš·ÑçáýÊ($%{òÔÌ#¹ Ê'©Áõ‹P\žÏÑMÊ1Úú¤¸îÎ+RÌ”´\=¹ÕªÄœõ+è¨Êå°Á7O.¿ƒ®†¥q“O$ ¢spæ± ÝÜ\¬ _ëèYé‹4ŒôÒ,RdaY2Ùê4+œÛ²€ÉÀñX˾8¼•/\&¹2,²*H*(ðê…lw€Že±æ3ƒÔ4•ç°y)èGhsO¬[§ˆw ·Žõ±î–عAYH¦—'#+„rz õø¿¬×Õ'‘ÁṲŠÎÛ|Þ÷„­¦½m; `rÓ3G†n¬ ð9åéÊn|sàùáx'\–šʦÃÞk®Í^ÉHI8ûÉs);vt؈Xùs‹'ñ“®Njîó]]:ËÞW‹×cËîÜáͶ±¶75n䧸Çq­K-Ò t5ó(ðÁ<ŒÁÌz…B °Ëó ©è62º vx@ö8¶µõMârǸvço_H?R½•l œµÏ}"ì<±ÄÀ“×=}š¸ÿ§Ì)¿aêrW>Íw¶WkÝxaaÛ¶Ù»‰­Ïg¸›ƒ¼½DŠÊJrøBÇÖ<µ½™–ÀH¨Ø÷¬-/² 7I÷¹\·çe݇ÄÛ¸¿ïCºªjã§Dðΰƨ 8½Rr|ϯ[T±Ó¬ëÏ™YÓµÔ¤ØlBç{‹°õ² Ó®Ù´n h 1ò´÷W-–,= Ÿ‡\¯øp½ÕK~ nõˆ•UÞˆ¸“GP•<Û2DìE=ursÇÃV'Èý¯«Õ¬*|>°=@¶e¾‘í•OØÏ´TÓê6Dp)Ç4¦ãàdd…Ä@êèN©Ð-]Õsn²ä½A²8~ÛjPíKÙ­Šš’D s1ÆY˜†êÌÙ$úÉ×±N–‰ /&¥]#ˉUN9mN4ï®o}—³¸y$Uõ´E`žJø•kXÔ<­åÜr’ËÊy‹rëÆ°´2½J/c[žÞ¥­ЧYs·•â•÷4;e…/ ­àGÑÙø|¾.žXÇõëÀùM»»Í{ß5±w¹'û_Üýíͱ7%ðÛ5·ŠëuBÍNNã…rÀa‘º`«e?øµz ø…7‡â7ª?âV-.Àî^·´p¿Š÷l—}ƒ-T±†¨¤J¨b|`¨ul0öf½¦Ñ¬[‹`¯Õ¨ƒÒ®Ü;Ù»lØäŽå·*ÅME[K2*¡•FC}¨ŒtR¦ö7Šç«Q¯vK[öÕʶ±î·ËuÒd%0RH.ÊrX’r€:yùêá„™p*¥à)z *KdO³iÖÁçâJeNž³ÌXþ=\2 2IÌ®GǾʖ^ÐÜ2ƒin­»YIu¡§Ów‚ ´U¸=y¼q±èÈN ž˜ qZlbÕFë†#"»löÃf«y§ axÊÜÊíb»O[kÙÔÒHµ†Jj…Üq*¦^dR2ˆØÏ!ÏÂ9×…ò›x87šöþib#r]—±ÿl´Ú•§„öÿ~ ½ %þ†i1á$õ)×ô#Ùì×Kl6븳ÌëmŠöÃÁr›·¹ëî§î ãIÄ åtÕº „Ô7%ß)¥gÇG¢y‘€¸`Hn`HÕMƒâ%÷õûÞ®-ß »«Þåé=Ùh÷N·çfšÝ—yØöþ!‹|öÚkÕ£sÓÇn­‚¡Uªtå.•¨nNO33g”zoÄjQºæ›ÙLŒAÛŽk§áì­y®œAÀ›¼Wì…îröÎàn›*‚žJ{p£¤§£¾Ç:˜Ý—¿WWÂV4åó9\ç:â³ü>ÛF¥à>‹²½ºÅU—g꾊Ʒ¡°×õçŒ}¶½øvÅàÈÚ¾=îr'Ý/«ÞUÕ6ÞYM¦KåMU4KÄ:xËFòÉ"s fRK#™ˆòÏÎü²ÑŒ|¿åö_Có*ÚÃÏþ?uY¶{^êý¥ç’›aXD rZŠK|[þ‘DQ3—š2æÚKcœý€ÀP1«Ÿ†Õ#±ôòþJƒâ4íëßçüu§w?qËÝJ{¥EÞÉÃkU¯¬\¢N$RÉ߯sÛÏw€ œ œñj£áµî€Y1¸ÉIø ćĸÿÅPï~ýÓk]ñnû#†{JΔ‰ËH¾!À ÅšŒç˜Žb=@ü:éè¶—6ÂxÉs›Uœ:Xà8ÿÅHß=Ä_v*÷o©²Þ¬»f¾–®Š¥%ÝÔ€HŠU”t¢ T ç˧¯TµÒ)ž_òWu¹ŽjñMvǸaî¼ì¥©M›´6Í­jÌf©i·•”$©<ÔM‚2|±ñçRûZªdðÿ’†[)³³P?ñP·ûžÏuóp–çvávÒ©¨¨™¥žGÞðîÄ–b ’I==zÐYí yÉPÚ(8Éxçÿ€ÿ¹â÷NQB' 6¢R¦üŒÿøÚh-=ÃËþIÒ,ýñÏþ+rÜõû§¨1ú•mSÿïêÙµÓÜ<¿ä§¤ÐïŽñAÿ¹ï÷O|ÿR½¨?ýþþ˧G´÷/ù'I¡ßÿâÿsÛî  Ô«jÿ±ÿÙ´èöžáåÿ$é4;ãŸüW~÷7=Ç^Ýý˜{FTñ7Šü<²ÓÚäØ÷»\fÙ¹ã«ÔUGŒîÓ ˜H''ÃVmšÐO`òØFÓµTÚlùÞöƒ°l_]¨Rs´)l5–»ŒR%¾(¥hiÔ²0Œ)Á$© ƒæ×®ц‘©y&/—™ÒYk©³W]Α÷lª‹  ¶<@óözÏžªF³ÉIp:‚‘³¥M¥\K=ú»œäØ•ŠþPº»e»J£¡Û‰â-çvGIO.Öá1Ü.%nö ù"‡º^C†S&A%°—BO_-R«ŸVJÒ“Y=g«>äã$ÕP,½–èž7ËTË%Ö””a€¼£n„õõc ÁÖ7ëÏís k”#÷~«:ÅÅÚxYí]—èD«I’éL€Î#%T•¿ƒ›ÌN=ZWRú(  s«õKnâwiT4±Töb‚$+ªhwD$FHñ¾ =@àžš Ö¼?Kš6LS’Ý{âghú+ÍM=‹³tu´K0ôJ§Ü±BÒGÓ<ÈAåo<`‘å©ukXqœ £e-R‚m´øÚ¢»uÁE¼{;Ú¨,òHÂzêMÇßÏëÊL| 7«8o^¡•­¥à:˜ÅKéXÃ%µ > ¥ÓÞæh”Ïb®I ŽuùúÆs×]aÇbå-šÙïÓÿiëÿšÿójonQwzæ–»©8ãzß3íª¡m¬Ût”tò€…šdª¨‘^lË"uò9#Õ®6Ó¨-|`@ÊëuF8dã$ò ±Ú¯„ÜFâÕ‚ÍoÙ›by¤£¯–ZQ"ÂLEA‰ÉÉòÖ6Êk4µŽ½*.%Åq6ìgÚÃc¡ÿòœZóú«»Íwôë/y4Ýýxù,1ÔSm c¼ÀÜ<—HÄa² Œ©Ï«×¨©ðÚïf,ø:'»†žçß­u•‰ûn+Õ¢0¢ ¤IbË$’À»`<€J_ ¬Ò]PIQWâTH»LÀWênÉwº=¿ªâHÉY šŽCqæÉ±×Ÿp¥¬áÛämPJ¶ñ2ík££á𭡨75u9Xù!îß®HbÀ?vJâ®TuVÖ `´¤ê@›øª…÷cö£·¼Ö}áq¸Ì´YšÉ UKÎÅ£™9`+Ë!f(¨W‘¹¹õ‹©Ú€ÀϾKfÔ²“ˆ|Ò…ÚfzKc"UÅ9IÝŒ!º²Dy9A\d?OI棵:Þ)¤²Iêø'G‡xr‘ÉÅKïvž.dHĬÅ× ·&9B+3$äbtVžñQ¥³÷BisØ£èm55öÍã]UYÝt·ÒÄ,äžfîrìùñœ…^u¬4qÙï%"¥”ºÁ_¶ÔÆš‚”î:*éjE®+Tõ*zØIAÁÇÁÉé`©öÎkÆœ›»y)0ÕàçÞjìû{‘×þ–­VB— t²×`ùýgýzœv(Ãjó½WižÔTÑ[jéø f[ˆå¦Z Ѭz##·xAyg’ˆúèÑÌO‰Aטmv°¹ž¬|>°|%zBËd$‹ùxxý0ñ„ëˆÝ«8—¶÷Ä{SiÐÐÖTº,T–‰l&j÷53I:È{¥Y äXYK:Œ«t`«m¬Ê—[Žè8à~ã%¬”Nó¸ÈÇšÐݦ{AÓOQ$;2*ø)eoz¤m¯WF·úqÎd¨g‘ùm¢£Á.{Üs.®#¦Z„õgfNÿûc~jz%˜Æ1·cvùÝ’†µ_.ñÏ{Ùt´×ÊzZ‡¡ž¾ ½S4y†šq+Ss¼ŒáÝ ­ŽVæÇLë>›iv-ÇTÁG.KN‡fnÃ^buŒòÞ¯{—´iê­©bÙÍß½‘f–ÜÛz®q]q‰hÖpÊ´ªž8!ÃôÏ# t¾Õ\VPq;'WŠçeš‰N½£¶5ø(k_;Jߪ U½)#žÚ³eÖ@kóÁÅiäZGLı!û Þæ'1iµ¸á–Ý8É„áø«›=‘£øHÂ'\k[‹¼~»MiÜ´¶ééj&Hm54rÚæ4pÍϨ®h9ƒVð † ’gOiqa¼Ç¼”h,;yã®ý|T6ðíIǾíã]»ÖÍHM±ë ­m¯Qݼê’⋺–Œjænl `¥|JÚÎ¥²ÓI²èËaáŸ5£,–jކÎq˜ã—$îãÚ#µUºï ±-“ÁS DÔØ±ÖxTMR‹ò3žhÒ(%cáïDøP05cj¶vG¿éß*¢Íc-›ÇˆÝõËt-ñqûÂÍhÞp½Ð\RŽâk-´ôÒSRM7:'$<¥šJ†–&GvVœ”E,ÀÈ«h{C䃎 7oû`£Ggc‹0# s8ú}ñEã¦võ^äžÃh©¤‚‘gZ°Ï@íZ¥^c>t°@ìyG?~WÀNŽ´ÚÚ ˆ£\ž ]›µ¯îJé­6a\^–Íp¡ÚµÅVb©d˜ÈœÏÜ”ø˜s•ÎyA¶ÚŦìÀãŽ> MŽˆp“qaÍXvÇø÷mi©/ûT^¤¨¨…ªk©éÞ’Pô”ìë lÌÁUÚNŒÌy•²}CVV´ƒˆžZ†K'ѳ‘ Ç=g5M®âjÊM¥CI&å–*ȶë<•t»2Y¤¨©z(eTqÞ®£,ËÍ€Û”¯7*žsZÚ1Æ;ºàsÍn)XÍC†·TýöÄí?īɹ^.” _o£š³»[vά¹à¯šžUfvYšxÑ\Ê $%O0èÓ¶Vt“ˆÇ uó䳩d¤Ø†±¬LîŽi+xƒÚ6ÅK$¶:嫨¦·ËžùÚeªŽ¦¢š8ÞFDFBôõF¬K}j‘yAÉ:ƒVÖч19z“++Ž8yÆ~€q)jøÅÚ…ëj)hém1¥lôfy6¥CúXH«dZ•ø ¬ÐS _ÌäóTjM{dá2;ñÏpâš gˆÝ†[ÏÖ«´/o;~RUmšº ÄIdÚs[6åVR§»™–"_¬Ž¡ùbÀ+u½*Ðêoc@*z5œTdŒ·ÅÚk0 ë{lÙkÝê!oÜ£Ú5ÐÇ^ë‰å’³S„P `XŽeæ OK¯ˆ‰Ø`ã· IÑh`f6‰lÇZieãßi[å°V÷b¦«s4òÕmʓƪdU†#"²´Ž±GÎØ'?<º«m6· Œ|©ËÇ%.³YZèœP\Õ$wKME:U;ÅLæ™O3÷;Ù—¼s†1`òáµCj¶‚Ùò;°Ý­XY¬dz<Æüw¦4}¡;BÁQu¼GE]qWZhè¤m›YMOLï )•}Ü»r»Ì¦Nb2C†ÕEªÕ$ç–¢­JÆÍf02óõ­íÆ.2oXvæçzÍÏ·jïfã·Ág(h "Hž­Z—Ç,“Ç Ê³2„槯P5؉Õ‰' Î`(ÐP¦\Üñ3”c$§Û7}q¶ëKé2îmÑ£Þ,/tŠálPÍ;ÕºÜic/+J±wMÏT ò¹µju-LœÛ8oëU©NÎÓÉÑŽì¸Pw)q×Ñ«èç½îæD©«–+­¶ÏSúiŽ ÒPe‰ŠÂ®°†–<ÄüÈ€-œÍkL'^ ñ–Y`V‚žA«FXI¹ášÊåÅ5 ÕÂ*«þüŽÎÊ_SIhqUIZ"­Ä¢À@ˆÎ)Tw=ìf5FvG$kZ/. AÇ ²˜ÊDgš 6{£Ïކ9ìœàÎY&q7´Ân3M¼®Û¢ J£Ïp²ÑJÒÁPVV¦JH„Ɯ܈ýÛL¬³ Ù®šÖ×&5Ç(ÃŒJ¶†ËwªêžsÖˇ;M½:Ö^7%d²òï66™ÚžÙ{pÔ}Äe˜²swÉvÌ[“”bMkdbLëò#œrAFÉ&Xç¶g”ó[+xµÚ5èªUŸr¥El&­^Šª?x¢ˆIÎñÂV£½SRÍ-2™£Ëx)åö¸9ãpËv3Ž#±@£eXNÌsß„aÀ«^ÓÞ¼u’Ã×íÁ{’¶÷³-TÓÔPF‰l¸ÉU,SÖs,jåÄ$LÂO‚#AÈ…˜ÙVÐX/$#8ž¬NÎ`ùˆÀqÁG[{@ö¥¸‹”ìŠAd±«%TîÝÂJRžeòrD{å-“#¤òê‚Õl3„Dê:µyíZ5ŒF31¬k×å±oÝ|JíSp²îM¹o¿ÓZëîuÓÃG <oGS54ÐɉR8¹!©aïyy‚©G»«Ú° 3å³ Ùø•Fѳb #Ïo¼¯CÅÎÑTõÖ¿CMÇq¤¤Œ­ÃCU—é»Ð²ÊëQ, ¨r#©(­ÊÜŒK+.½¨xãÇ/?%±¡f ÌpÏËÍIp·tñïvYmVÝÅ»÷MXÜ Ó]—¼HšŽ*'‘ T@¬åêËA‡Tå 0Œ•Em^‹í/hq™Ït¬mÃŒ*Ve™Ž% e–ùÜvcÂS ©Ä®Ñ÷§y¶Ý/†ÜÔ1ÇWîZ êew0E ˆ±÷Hê*y»”RPDY†«+ZœÂ "1œvFÁ¯V}++^ά=N¨¤ïAí ½ö8±lÓ¸l÷¥Š; “»’2d–yn…«"`ŸXŽŒJ¤‡¨t ‘_Mi{h å÷œw@*š+3.ˆÏío“ä îÜUíe¹MàZ›qÚûWh¬¥hí‘·ÔúÑ%#Üè£,™u«=ähøc–™‘‡*b½&Öâp8Ç” xêVÐYŒ'ÎN5«ç ¸¡p¶î®ßû¿vS×5=pܱ_ ³ÓTzHéHŠªy2!3Œ3K—åmoF±ë“8ÌåžöY¬kQ½@#ŒòÆ~ó¯%.çí.ã¾oÍŸ¹‘­ÃrOªú¹ë`«£•©â…Ö‘"ˆ´³w©1gpòç~ÕyÏiÂp׆†ÁœÊ½Û-ÐÇ cÃuí9D(ÝÏÚ³ûNßSQ¸(¨-Ðĵ¦éS´ªù-õ­S-"ÅßX$DÝôMÊ‹!' ©}¶ÐÀg ðpÏ ñ˜Ì+²ÇgyÃÒ1˰‰È§WŽÒÝ¢mT¶»Òlø+"¹W3Š:M³TÝÕ š°Ò«·×d–`ܪ¼Š<ùX™u®ÔÐî9aþU[e³8‘9oãþº>4v¦`K…ºÐíYSKMÍÕ¨U¤ï¡¤•ç`g<ËMÒ[‚kŠÒìÈéŠ kaôí©TP‰‘F”¶Wœ#íI×3mv·Ì ±Èðñ[ºËehsÃ1ÇÁX8SÆÞ$Þ¸‡tn Ã[ ½4éOn‡kÕAg¤ÖˆÌüËPÂâÌÉʧ+öè5­EWT7öl8JЧã·k 8³IWkÞ7zõ-uÒJ{|¥î4í)Q@Šð« C$®V:ÀÒ:"­E¢Ø&N2p8å#/ÆÅcBÈIˆF¬3ƒŸ†ýªÛKÇ^ÒÛvùryM]ñÃ̶ûdÛ2¦(ªT\«B„_’'£7;ç½@‰ÖÝ&Ô×{ í:õa+.esF­ò6 ZñŸ7[ÆîÐVšÓMv¡@±rES}£ÚõsAïxšz©Ug¬&^蕎5e‡+Ñd©!—GT´âöÌá:ó>Z¸¬…;> tF8Ƭ‡¯¢éÇî2_Vkum-ꆆTrõ–½§YI=NèÓÉ,„JÍC;‰i` S¸©´×v¸6ç®1 ÂÍA¸ˆ'yvìËTàT$=¦xår¦¥ØŒ”wtµ,—J8¬Ó-û(i½" ëÎ'™J,%á7.TƒŸK´N1ŽáŽù:°Zt[;Mð$NáŒêÝ^)åO{Yßøj6U5e¦÷5ºš¶‹t‘Ñ^­"ŠžRB‡™B—œ”\ÀÜܪÄòÛMmu+¹çÏë· •tV6Õ½˜Ê<³ðÙŽiÝ/ûBÔY÷Ö蝫еæeÚ6,lòZ#ôF…”4a¹]&ªœ•vduDRܠߤZKè"r—¼Î{•t`æ6AŒÌçï!–ôÇdö–í »F×hm©v–ñl´Ü=øMÁµj¤7Iáy#¦zzˆÊ/,à,È®;ÁªÉË4¼©VÚ­-`™¸áþõ.³YÜòrˆ‚0Æ>Îå)úå;C¬õ)I´¶($u³Ëõ!Y¿ðâNj‚Ͻý×*}jL´ÞiŽuÄô»T˜wî‡5ËOŽ# Ûçn¥;dã'hú ¬Ô×½·o½Æe…hl³Qe‘hÙ\»Ìà†ïçP½?säy†´m¢ÔXO”lß¼ðTu ) yÎÝÛ‡ø‰ÆÊ{]ÏqZ^ëM5nÄu¦³ÒR,‘ZîF®8ÄáÑYcv‘s7$MÈ…UZ¶€ÒDâܶÏnÿ¢ŠT¨˜ÁÙí–Ïxª=“´Wiz­d¢JýÖß5<3ÓÜlIQ~’*ÉÒy=%JZwŠ8dC"ó¼U ÏÉ'2¦&ÔБŽ;qÂÕoÑì¥î&3¬a³ gè¬öÞÑ7v•Ž¿rÑXvõTÕsÌ×e–×QÒ¨¢¦ue¸aãîÚ <,¡×¼wÁä#Pm«Îå`5垤P³]iŸ9Ï«<±Lïý©xßq©úOG³Þªà–&µÓíꆩ‰’ŽJ‰%Š`ΫË"4;·, N¡ƒ*꯶ZI»‘: ÎSøËz³lvp/f¹cóžäÚ×ÅîÓv›bÇUlÜu1WŠ»ÅCR½SQR[êeT£‘ŠDîõq½U(¬êµÂ@ÈVµµ’goœ5g‡44¬…ñ†Ï3ëËKm´?jK½Ò¾ZkÉ©£¥¶Újv¥\tÕ¬ÕÈÕkPä%>#ZYY|…R9Æ!¶«c‰Ãc^3«QÞ¥Ö[#@“†Ù«׬nX^¸ƒÅÞÒ›3toú›+½¿êЦýO[ ñÖ4U&dV‚§D$DdXÄŽ#U*†¡Õkapº0™œñœ„øÀŒ”¶•oÎ1–™ 3šq¶»EqþݵíÔâ×S «OOd· LÐLÊDkÚ¯+4Ó9„Rò¬ 0,ƒ.¬ËU¤0óÎó„fªû-˜¼–~8Fx g$òçÇŽÑÕ´SlÛ^Õ®ŽºáLÖúY ´MÖÖxà\^²bÐ>KÎJ&69Ãciµt N2ÆrÛàª,öPo€Ç1ŽxF{JZóÚ[‰9»ËEn¸VMa©½Çõ56ì²Ï5}Ê©¢‚Jo…¦£že%° åT±µÕ¤èN œ@[à•Qe¥Q²F1ŒιÞ­ÚøÙÚ¾k-ÞÞònXjÒ÷[Y óíÙ&Y(æ ­ôj›•9`©Jq#…dçe–Fβ‹]Ç fN­Æ‘ç– æ…’ûrˆ÷‰>c–õ|´ñ¿´ö£Ñ-0Ð%$54p¥Þ»eÕÂÕË<ñG,‚Zà4…¹²7…I×Cm·aÓŒ“„sXºÏeh“ž8HÂ7Æ3ÉK/xårÚð=g ¤¦™è©$–®—½V2—‹¼QK¨9pW$…ëÕúE¡ÌÅ»}΃¶ªÝ£´h[Ä2Ñ^vÁ¡”$ ªM›Xëp˜…ÄàÓ÷aÙ»ÙTÊ•¹›&Ú­NÀˆò8îÝJÕÖ[3r3æ0õð yñõ.Ùm¢µ6‹åÑm7 ïómÛ#Ä÷Ši ¤ïaä~ñ{ÈZIžBΪѤœŠÓ*&ªêö°Z ቀqÀa¯^jí¡d!ÄF9IbqÕ‡?%fÜ=¢ûKѤ^ôpƘˆ®²ÐM$ÖùÊÕÉSÞF»$ó¨Ix{·æÉ髾Õk7\d}ÁY¶Ëd9»Tê÷#ZËfñë´fâ¹Ü*ö\÷÷²ˆA³ÔPCm¨2Õ÷ñ $$U2ªÂ¦TÂ0å`a©§iµ¬à0‚ ã>:±GÙ¬Á£Äã ÎQáà£kx—ÆjÁ"^®›Æ–Ú÷‡Á-ôþÇRzk a@ÉfWƒLÑuBíàq‘CZ¹~$Äã¸N†ÌáXR¡w&0ÞcóÊVßøßr§Ü÷½µ¸7½Öݦ_nÕdÐWM9ZÞFZxâå¨cˆ0&Äœ¡ /19Z ç4˜ Ï^­z³Å.ÙÅÐà$œc-ZõkËÊõÅmã`ÛÞ75÷‰"ÝMa¨–‰¶ξ­î §(tž˜M DÃ$E L¼ÜìDij‰tF9ï‘øÎU´TçÙq—‘üäºØ’Aå#|ºì\{×lv[ëÛ 5Ȇ$¬0¯z±çàÆBüYƢ虌TIËRNòI–Iƒ¯ŒžoÃíÔ©Kºßc€PY(a£VX„h c’àuÐܬ—(MÝ‘ß7Q×ÄtV€Ï1931ñzØèg›ù¾qÑ !ívËÉ x·AV hå€T²woöëÌãu­vaEâÜŠÈÏ>ëÏ×ÏÄu*`,{ùšFÌÌ|^¶:(BI?dFÐOãGæWGêrù|Æ™¦E*QÑÙ¡ŠÛg¥Ž’#ðSÓF#Eñ%\ ¢Iv%)w= Ÿ—E04ó€H™þÛY?bòÅKõµæ>ú%¼½§©öé’¨Ç4ôÁŽ&o/¶:+@CO?O¯?—Û Dù_ƒöÇD€²iæÁúóu|GD€Ï9ó™Ï‹ÖÇD€“Ò*®'qÓ펉/>ןàý±Ñ $Yææ¾oœtH {ùþìýW¯ˆèÓÏâúóú¾Èè&›#ë­ð~ÛD€‘g›•‡|ÝG_Ñ !ªj9¿t?Ï:$zE@-‰ßçS4Ä Êßí´H þn|÷Íû^>Ñ !§œÄÏÑpìrçäÐa’¨Ç5‹TTdý}üþØè­/?)úóü¶:$†y°>¼Þc쎉y‡”Ì<>¦:$4½>ºÞ_m¢@Y ¦ + ޾-;ù‹ÌÇü#¢@XÇQQ×ëïð>Øèj*9qß¿Î:$½üâL‰œuûc¢@J$“˜žñ¾]Ež|¯?ÂÏÂ:$½üᘉŸ¨ëâ:$‚ÙmµÈkí¶ø)ç¬`õsA£ÎØ=\–?Ô@…Nd’IõÆòöêP€°Z‰ð¿^~ÓÄtSd¶»e:›í=ºëfŽ4š±!Q+¯N…ÀÉ:€ÇZ‚I1© 4¼£ë­óµ*`%Y¦Àúëy}¶‰a5MG+~È/·:$“TOâúûõóñS,‡ÎFùtH 4¡F%a×í´H•ë3õ=|GD€—¿›-õæê:øŽ‰#O131þ¶:$©4Êǰü ¢@G>[ëÏåöÇD€–X¢­cMYËÂîå^eæ\2œX }Dh@*£!cé59oÙð~Üè­i¹TwÍÐôñHQ.©+ÐO•çŽaÌ­ÔyƒÐéàTe’Ͻ—î­ó´S <ø^/¶:$Œ“LÃÅ3¾¶:$¢yù@ïŸÏ펉õ[3ï÷½°zwvbôÞå{ÞLü|g—âÎ5DÌb¢OgR Óg=óg›íŽ¥L†¢ ¦ îzúØè*j;Ñõ÷ø?ltH ãJÀ°U •3ÞrH9‡:U°}`õÕ¨8¦Y,Äóò‘ß?Î:”€ˆæ›º]nž^-˼“îòè4Ód}u¼þÛD€TÔÔ Ütõ1ÒJ@JmvËŸw]r·AQ=+»ÓM<*ï cá)#*~1¨º ’I="£¼ý½þqÔ©€‘g›-3žž¶:$½ä™Ï9Ï·:$†¢£Åõ÷øltHIæÏíÍåöÇD€Žþo»7Áûc¢@Hf™‚†™‡ÖÇD€²Íáúót Picasa ÿípPhotoshop 3.08BIM7Z%GPPicasa< 200532-07007201505078BIM%ÊoT•™SÌ—%<œ’ëA~–ÿâDICC_PROFILE4applmntrRGB XYZ ß acspAPPLöÖÓ-appldescPbdscm´cprtÐ#wtptôrXYZgXYZbXYZ0rTRCD aargP vcgtp0ndin >chadà,mmod (bTRCD gTRCD aabgP aaggP descDisplaymluc" hrHR¨koKR ¼nbNOÈidÚhuHUìcsCZdaDKukUA2arNitITbroROvesESvheILˆnlNLžfiFI´zhTW ÄviVNÐskSKÞzhCN ÄruRU$ôfrFRms.caES@thTH XesXLvdeDEdenUStptBR†plPLželGR"°svSEÒtrTRâjaJPöptPTLCD u bojiÎì·ì LCDFarge-LCDLCD WarnaSzínes LCDBarevný LCDLCD-farveskærm>;L>@>289 LCD LCD EDHF)LCD coloriLCD color LCD æÑâÕàÙKleuren-LCDVäri-LCD_i‚r LCDLCD MàuFarebné LCD&25B=>9 -48A?;59LCD couleurWarna LCDLCD en colorLCD *5Farb-LCDColor LCDLCD ColoridoKolor LCDˆ³ÇÁɼ· ¿¸Ì½· LCDFärg-LCDRenkli LCD0«0é0ü LCDLCD a CorestextCopyright Apple Inc., 2015XYZ óÊXYZ qÀ9ŠgXYZ a#¹æöXYZ #ò ½Ðcurv #(-26;@EJOTY^chmrw|†‹•šŸ£¨­²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿparaffò§ YÐ vcgtndin6§@U€LÀžÀ%€ ÀPT@333333sf32 røÿÿóºýrÿÿûÿÿý¤ÙÀqmmod Ì×ÿÀbÈÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÛC     ÿÛC  ÿÝÿÚ ?ýúÇoé@Ó×úP´ãÿ­@Üv ÿõPŽßÒ€ §ð i?þª6_Ò€§Óô iÿ"€ {P´žÿ¥qÛô ǵ'¯òqÖ€ ¾Ôcü†cÿÕ@Ó×úPÿUN:~”m=¥çúb€?ÿÐýù?tP îŠS×ó þ!øPü4È ·ã@ ŸjUþ¢€€ßñ Ï=;PŒü_ýµüð¿â6£ð‡CøaãoøI²µ»Ô,ü7á÷x ŽçÌòw\ÈVÇÊrSvà0H— µÏímûSøc?ÿcVÓ‘úÏão[[ï²×ÏoÌ £swû{xñÞ-oã7‚|k3Üø_òßÜÆ3È[‹—TϹˆý(¯üËãGÅêž:øwñGâÿЦðÇŽ5-6ÓZÔí Šy ŽO0>\ã…žy ª Ïùö þUéøÐvü?­ ßé@ð~4g­(ûÇë@ÿÑýú'Ïë@Æzþ´`súÐǯ¯z3Ï_Ö€1×õ Ž9ýhãZN=_þµ(ǯZN=_þµ/ëßÖ€=hçÿ²gÇ]sã»ñÇö~ý åðíþ¿¤ØÙÞhš‡íïlZKA(Ž^vÊ v°Œ"ã$€gþÎ_|OñCá”Z׎ôH4ïéúæ“â;W-_ZNÐJc'Ÿ-™7.yà СÛKó¯?Ä(Ãÿà™Ž.üñGPýoÄÍlä{]0þ”ögäÐÆ:þ´¯ë@sÛÖ€Žyýhão^þ´dóúÐ߯ë@ÿÒýùùq@Çz08æ€êq@Ú9Ïè–÷6—Q mnc•OFÃÌPþP2O© ‰aa•ØŽ”ì Ð…•#ß«˜΀9­sáŸÄ¸øáûNxïĶë'œúm¦¦ºM˜ÀÉP–a¯±s@Yÿøý¯þ1ÿÂÿ…Oû4x]µ&°Öu;I¼gâ¹f}/G {2yI¼ù·Ó mS´!œ(Önþê¾>¼]wã¯ÆÿøÃPù‹'öüÚm”y9+µ›F¡GmÅÎ;šŠoÙªÓÃÒÿnüø±ã/k0¯ú5ÕŸ‰n/m‰ KmtòG"œ`€ÁàƒÍt¿ ¿à§°ü8·Õ>~Öºg“ñE‘"°Ò|5nÓ¿Šã“>EÍ„_{kà‡VâVÜÛ@rísŵí!Ô>!øö†^—˜<àë„}Iã ñw~A Ä”€ ¤;u  äý‘~ ½¨ŽåÜùüuª5Ç×Ú84BûÅ´'ìUl>!xÆúç¾ià?ˆü%â ƒw©é¶£ïÜÙ\c|áY “s2ƒµ²°Ù? þ'xWâ÷ôÿx;T†òÃQµŽâÖâ]Cõ€:1Ó§~Ôò'ìæûu_‰ŠãâηÎéµz„M–Sß>´ãðI쵿ŽäÏ_ˆZç?öý-zŸÅ¿Ú‡ã¦Ÿñ›\ø)ð/àf™¬Üx{M°»ÔuÏø”Z[fïÍ)q¢<ŒTDKù† çW÷íùâù#’óâgÃß[°ÄÐhÚÆ¥:ý$Ñsÿ  û/ë5(>6~ÒüZ¾xÙ.´4»CÏÝòì„lWر ý™>6^~Î3ø•ðà§…©­ë¿u+øUîähPƱ‰®®$bÍ´GsÈç’HQ–uÞÓöD›Çã\øùñßÇ>$ñêZâ÷Jñ$úM³’–¶ÖΫjN~÷À˜Ð>,üWýžh¸¿eÿ‹Þ6»ñN‡®é’j^ñ>¤«öÃn©=Ó( $‘Œ¬€èã#*Y€>¯G u 3Ö€¾qúÐÿÔýú'×ó úôõ Ÿ?i¯ø'çÿh_‰/ñ‚ˆ-ð߈¥Ñ Ó%»ðî¿-²IRHñnŒŽU¥~Hþ,Ðü½ñ®Ÿ§ëÿ>#xŒk:ׂüSw¡]êþJÆ×ÉÖŠgUC´n›°Ü gÞÆâB"=øÁé@ð»âí9ûNÞ^i²ÏÃýÂ>Óõ+«(µ¿Û™î^š)+XY$.†g$ŽJŠíõ=;ö³ýšüCáïøhmGAñ?…üIª¦”5íL{+*ö_õd.ë$27î÷ ¥Y—‚ Ô£“œÈã 4ý¥>/øcà<'"øX|IâÍcPþÂðÌ6«s4²)•‘§õ0팳“òð À ð‡Âø)gÄË8üUÿ §<+ƒ|:<>šùvW™æC'¹UO¥u_~"xëħ_ð'ÅïZi>1ð~®4í~ÛN˜½´Û£Ya¹€·Ì#’7SƒÊ¶åÉÛ’ßí†t0Ì’@UцC)à¦(€ÿ‚Uk²xNïÇßb‘þÃàß_YiQ³äEhì'†1è% ¢Šû?·Ëë@þÎîµ>%¾:üY×?Iñ@¡¿0ÆzúÐÿÁ&>m;Çž~!k¿ú]-zïǯØWáÿƯˆW_­|eâïxŠûN·±¾¿ðß‹.ì’x`2·EˆÙ—͘®NprÀ û.k>Óbñ—Á߉>*¸×õx¶M"-vñTO}hðÇqË´dʪÌÜW=èÖaŸB |wð¿DøMÿóø‡ã¿‹ß´Ž¥×|{ñ;Å÷×~ðî‡h÷·–ÚYu)mm .à¬G›,Œ1¾LÚ«€{ø;ûhü øÅ©7†-µ«¿x†8¼Ù<7âû6Ó¯ óÒ5›dçï¡eÏÍy_Åhß´íéà_ü*½MZßᾟ'‰uk DAwvaXí7¯ÊÒ””ÏQ@viñ´61FýV0 MžhÿÕýù?tP (è?Ïzø¬GÇqwâ•É¥± ÂÞm²®}Fh/ø#u´Cà}Ìʃ÷šî¨Û±ë9 Gÿ‚£[ïý’/µÉ§ø£C¼‰‡PÑê004ÉG6[q=èÄlÖx·àºGü-$ãþá÷Túà¨Ñ<-f@ÿG^ƒÚ€>Sñ•ši··Ä˜`ùRÿÁ¾¾ò/b'ò‰Gá@T2|Þôæ_ðNG2þÓßåX~Vvâ€>äçô Ž¿g— yñžÿuÿý*4éq7Îõ )ÿ‚Kgì7õPuÏý.–€>Ï+@+|+˜Ú㫯OøOìÇâ4›A@€°¡ ΀>gý‡¾xkâWí[ñ{âg-Ž£«GãËÍ> ËÆó+;}‹ º÷#_˜…\ ³¤šúÏâ¿ì¹ðãv†žøŸðÇFÖm¢9…u åòϪ–Sô ø?û3|ødºoÃ_éúU¼dùvö6Ë&záT@ùúö }ã@ÿÖýù `s@ëÖ€tÐÀžÿ’ûñ³þÊŒÿúGm@d‡h-è ý(_ø#_?7ãïjšÿÉÙ¨Ñÿà¨?òfÞ!ÿ°Ž™ÿ¥°Ð œOé@%ûb¾|cðXÕR_ý7ÝP诃?äW²ÿ¯uþTò¿ÄæöøñÀÿªqáßý*Ôhzqë¸PœÁ3?û@üg¹?Åñà~PB?¥}ËØ}hã_€²÷â!ƒñgÄ?ööÔéPK–^sÍyoü{0¯mTø‰®3Óý6Oñ ´†{úÐÉå|tøåp§!¾%Æ¡½v鶠ЧÁ/Î2yÜ?x¿üˆçã7ÅÓù©º¿þ†´öhúö þ½è=O4¿ÅÖ€?ÿ×ýù àqúPÖ€`‰¹ˆu$ñ@|5ÔtÏü@ø§ãí õ.týo↤ö7r²¤+¹`{ñ8ϵv.¥ÆÁÕ†â(ÿ‚4^Z¿ÀYmugµÖµ8&ò®—Ó†SèA Dÿ‚¥^¬²eΊŒ<ýcÅz…¬Yù¤y5FïÆOÐâðÄ{ЊþØçÊñ7ÁÝEÆ"·ø¥œç¢ï³¸sõfñ ÑȲxVÌ¡Ïú:ôúPÉ^6ÕbÖ¿oO‰—VŽ=7žÓ%`xY”ÝNPûí?ÚÓE .?ÞçŸðLyc±øùñ›G¼`—QüC¹’H›¨Y!…ÐãУ@ojúΕ ésë:Ρ ­¥¬M-ÅÍÄ¡4Q’ÌIÀ´ñ‡ì§©ÍâO†7Ÿ‘x¯ÅÚιfqö×W²É ý2¤{ôø&é=˜:òßø&^±e¤ü^ø¹à+©R+­3â.£$–ÎÀ8Žá…Ämޏe{ÐÚν£xsGºñ½©ÁiaeÏwwq(XáFæf'€òGì¥w'‰ü¯|b–ÉíǼc¨ëÖi/Þ6RK²ÕŽy Dlµ@¯òЃ@ûjqxSö­øÑðç]¸Žäñ´š½¼Ž½­ÜQË u*Nñž™R;PÛJê~éZR0¼zÐrhpw~4ÿÐýú9ÀäþTcÜô Ïø(Ö¥®[~Ö—V¿ôŸ‹‡‚dð6ý‘eൽþÏ’óí7?i›\eÊy9q·ï@‡„ÿh]7ÃÚ¯†¾þÉ_bÓl¡YÚÚx^8c‰@’®(NoÚk_¶ï¿e_а¨ÁÝý ãðI‰ 8ð¿Œ-ü;ûExCų·Ã¿ŠÞÕµ¥Ç‹të&ò×G»¶ky„ÒO ’ÞYÜ0ÅÂõÉ  ÷.´ÏŠ:¯Š¾?ü<øÃâé~4ÕäÐá¹Ñîî´ëæAo%¢`B?pT+Œ°ó’hºµý¨|At¾e—ì§ñVTÆwa@¿£Lé@_~2x⟃çð/ÅÿÙgâ˜Óf–9°|0æHeÃÇ4onìÑÈŒ+)È @¾øûIÙ§âv—àÏ‹Ø6¾;Óχ^ê“®&‘¾ßíK˜žq_õØà¶:v áçÇχ¿ m¯4O‡¿³·ÅË÷½¾{­FþóÓÉu{;`fšåÃHØ  “ÀPÕ§ía­¢‰%ý“þ,*xhVçôæ€<§ã‡~x¢mkâf•ðWãg„üq6‰$úχt[ÛI®¤T>JÌm‹,»OMàã&€2¼5âÔüM¬k¿¶gÂÏŠ^'¿º´Ò†Ÿhšv¡w¦Í Ù 4QŸ!›Í߸0É={P¸éŸ¶]€·Š×Ãÿ²ßÅY!‰BøZ8U ʸv  ­ûc^À7ÜþÊ?£^ì|?è3“@cñ·â?ìÏñ;ûKÅþ+ýš¾*é~(“H’ÞoLðµý¥ä›Q¼´i­æ'ñ@ׄµë«»6ãöÊø}ñWÄvÑü<ðäzv“ge¨]i³N‘Kö•¸Š#åÉ.ý›Ä™ÏËš÷Í3öÚÓç‚; þÊÿî!BD±xf(T ’®(Cþ/X·]ÓþÈ?Ôz"Í¿•É >ø³ñkösø·¬Ûø§âwì›ñsOÖ¬áòm¼A¦øv{kèbÎ|±=¤›Êg¹"€:ïØÇúÝÏíâÝáÙø†Þ—NÒšÐ|@ûa•/‚Î.DFïçÙ·ÉÎ>\çæ€>ñþI ŽO&€ü“@ÿÑýú'€yüèúôõ 5 /NÕ%ýªÊ¾Œ2(¼1áøxJ„À<è)ùN™ࢀ"o xuØHÚL9 ìûŸhwŒs¦ÆåFrç€ðî…á4¸¿ï‘@žÐe}.#ÿ¶žÑ,‹M:8ËðÅT ÐcÂÞV.ºLY'9Ø(Q h£¦Å×û‚€#—×ýf“ÿ€ G𷇤„BúTEî®Ñ@O x~,yzT#þ(ÿØZ.1ý™ýó@ËáoKÄšTG<ýÁ@ðÆ€ÖâÙ´ÈŒ`ä&ÁøPÅá­!û½.ÿ(Ñ4ŒÈ:/ûàPrxsB|údGþ(²ðæ‡c?Ú-4Ø‘ñ÷‚€hñ?/ãë@y=:3ówëë@ÿÒýù8ÀäþTcäþT1Ôñí@ F:“ùPqž§ò u?•(ã'jL8'ò n{ŸÊ€S×Ò€ ÜþT¼g©ëé@WœP€SùPÀOå@Ëê*^:äôô Éü¨1òç'JP0:ŸÊ€Éü¨ç§¥êzúPã99?•dœùPÿÓýù?tP:Ð~è ïøšOâ…îÐ:Š;~4”«ýh(ÝÿàT‡­îÐÛñ  £é@:~t»@ ½?ð íøZ¿Ò€àüh=M(ûÇë@ÿÙmiller-5.6.2/doc/pix/omd.png000066400000000000000000002311621354153536500156610ustar00rootroot00000000000000‰PNG  IHDRøè‰öP pHYs%%IR$ð ÅiCCPPhotoshop ICC profilexÚ­–gTSyÆß{o: -!RBo‚éÒk(‚t°’B)(Ø•Á "" Žèˆ‚cd,ˆÛ Øû€ ê:X°¡²XÂîÙÝ{ξçÜs~ç9ïÿ¹ÏÿÞ/uˆ#•ŠQM€‰BÈJIMcÿ0€ n ÍáÊ¥±±Qð_çÃ@nÚs¤R1üo£Åã˹H,dðäÜäÒÍ•ÊX˜-VHX=0d)©iØI`&¸ü'0d qAØ'•Ñ ¨8`ås ª98Jx" 5|¹B€Z3rrryÔ°Îø'Á¿xf¨<9Š'î¤`‘\*æÀÿ{rÄÊÉw˜U( K¤>;7RÅ’Œ91“,âL²Pž8É\yPÚ$ó8Á‘“¬ÌN ˜dŽlê¬HÁN˜dYnœÊŸ/‰WùóÙQª â9*Î…²'¹P˜<Éù¢¤9“,ÏŽœÚ Ré2eœ*s¦,TuÇùT6.g*ƒB˜>•-E•ÇQé’DÕ¾T¨ò”ŠcUû|q˜J—çÇ«Î*d *=‹;å«ú>BP‚xÀd@.ˆA,ÈA bà@€‚¿D”+-‰B+@*óYl ×aËÙÑÉ %55ñËß1„yeJËëð,@SÇ àÄ3ú‡)Íì-u3À©®R–?¡áð@ `€Xƒ=8ƒxƒ?„@Ä@¤ÂBà‚r@‹a¬†b(…Ͱ ª`7ì…z8G NÂY¸W¡nÃCèƒAx #ðÆ!"4„Žè!ƈb‡8#ˆ/‚D!qH*’Ž ¢D–!k‘R¤ ©Bö È¯È ä,réEî#ýÈ0òù‚b(e †¨%:õ@ÐH4]€ Ð<´-B7¢•h-zmAÏ¢WÑÛhúÅSؘ fy`AX –†eb2lV‚U`µXÖŽua7±>ìöGÀÑq,œ=ÎŽKÄqqy¸¸ ¸*\=®ww×Á}ÇÓðx;¼žOÁ ð‹ñÅø ü~üqüümü þ@`¬î„pB*!‹°”°°“ÐLè ô£D"QhGô!Æ9D±˜¸ƒxx†xƒ8HüDR#“œI¡¤4’„´†TA:@:MºAzN#k’-È^ä2\@ÞDÞGn'_'’Ç(Z+Š%’EYM©¤4Q.PQÞ©©©™ªyªÍU©­R«T;¬vI­_í3U›jK ¢Î§*©©uÔê}ê;fIó§¥Ñ´´Ú9ÚÚ'uººƒ:[§¾R½Z½Eý†úk ²†…F€ÆBB £×5^i’5-5ƒ49š+4«5OhÞÕÕ¢k9iÅhåhmÐ: uYkH›¨m©¢ÍÓ.ÒÞ«}N{€ŽÑÍèAt.}-}ý}A`X1ØŒ,F)㣛1¢£­3K'Ig‰NµÎ)>&Æ´d²™bæ&æææ—i†Ó¦ñ§­ŸÖ4íÆ´ºÓuýuùº%ºÍº·u¿è±ôBô²õ¶èµê=ÖÇéÛêÏÕ_¬¿Kÿ‚þ«éŒéÞÓ¹ÓK¦™þÀ5°5ˆ3Xj°×àšÁ¨¡‘a˜¡Ôp‡á9ÃWFL#£,£r£ÓFÃÆtc_c‘q¹ñã,VK̪dg˜˜„›(Mö˜t›Œ™Z™&š®1m6}lF1ó0Ë4+7ë41766_fÞhþÀ‚láa!´ØnÑeñÑÒÊ2Ùre«å•®۪ЪÑê‘5ÍÚÏ:ϺÖú– ÁÆÃ&Ûf§M-jëj+´­¶½n‡Ú¹Ù‰ìvÚõÎÀÏðœ!™Q;ã®=Õ>À>߾Ѿßéå°Æ¡ÕáõLó™i3·ÌìšùÝÑÕQì¸Ïñ¡“¶S„Ó§v§·Î¶Î\çjç[.4—P—•.m.ofÙÍâÏÚ5ëž+Ý5Úuk§ë77w7™[“Û°»¹{º{û]†G¬ÇKžxÏ@Ï•ž'=?{¹y)¼Žxýåmïí}À{h¶Õlþì}³|L}8>{|ú|Y¾é¾?ûöù™øqüjýžú›ùóü÷û?° È 8ð:Ð1Px<ðcWÐò Ž`,8,¸$¸;D;$1¤*äI¨i¨ ´1t$Ì5liXG8><2|Kø]¶!›Ën`D¸G,8IŒ¬Š|e%‹jF£#¢·F?šc1G2§5bØ1[cÇZÅæÅþ6—07vnõÜgqNqËâºâéñ‹âÄHLØ”ð0Ñ:Q™Ø™¤‘4?©!écrprYr_ÊÌ”å)WSõSE©miÄ´¤´ýi£óBæm›78ßu~ñü; ¬,Ypy¡þBñÂS‹4qMǧ'§HÿʉáÔrF3Ø5#Ü îvîKž?¯œ7Ì÷á—ñŸgúd–e |[ÃB?a…ð•(HT%z“žµ;ëcvLv]ö¸8YÜœCÊIÏ9!Ñ–dKÎçå.Éí•ÚI‹¥}y^yÛòFd‘²ýrD¾@Þ¦`(¤ŠkJkåÊþ|ßüêüO‹“]¢µD²äZmÁú‚ç…¡…¿,Å-å.í\f²lõ²þåË÷¬@Vd¬è\i¶²håરUõ«)«³Wÿ¾ÆqMÙš÷k“×¶­*ø!ì‡ÆbõbYñÝuÞëvÿˆûQôc÷z—õ;Ö/á•\)u,­(ýº»áÊON?Uþ4¾1sc÷&·M»66K6ßÙâ·¥¾L«¬°l`kôÖ–rVyIùûm‹¶]®˜U±{;e»r{_eTeÛó›w|­VÝ®¬n®1¨Y_óq'oç]þ»švî.ÝýågÑÏ÷ö„íi©µ¬­ØKØ›¿÷Ù¾¤}]¿xüÒ°_éþou’º¾ú¸úó î  ljD•Ãçì9|¨­É¾iO3³¹ô0V~ñkú¯wŽDé<êq´é˜Å±šãôã%-HKAËH«°µ¯-µ­÷DĉÎvïöã¿9üVwÒädõ)S›NSN?Sxf´CÚñê¬àì@ç¢Î‡çRÎÝ:?÷|÷…È —.†^<×Ðuæ’Ï¥“—½.Ÿ¸âq¥õªÛÕ–k®×Žÿîúûñn·î–ëî×Ûz<{Ú{g÷ž¾áwãìÍà›o±o]½=çvïÄ;÷îοÛwwoè¾øþ›ùÆ®z„TòXóqŃ'µØüÑÜçÖwª?¸ÿÚÓø§¸/ÿ”ÿùu°èíYÅsãç CÎC'‡C‡{^Ì{1øRúrìUñß´þVóÚúõ±¿üÿº6’22øFöfüí†wzïêÞÏzß9;úäC·±%Ÿô>ÕöøÜõ%ùËó±Å_‰_+¿Ù|kÿùýÑxÎø¸”#ãhf&ÀÛ:Z*½€¢>Ñ™™èùä?óD¯7€:€ÄUQ»:,VMtëXHðÔÅEõücä™.Î^TþÓøø;Cb;À7ÙøøØÎññoû°ûy]€  Pf¥«GÚxýâºëÌ’å ×”¶wl8›iTXtXML:com.adobe.xmp 2016-06-30T21:55:40-04:00 2016-06-30T21:58:54-04:00 2016-06-30T21:58:54-04:00 Adobe Photoshop CC 2014 (Macintosh) image/png 3 Display xmp.iid:9ef4a3b4-6d0d-4460-b350-d8f59f147bf5 xmp.did:9ef4a3b4-6d0d-4460-b350-d8f59f147bf5 xmp.did:9ef4a3b4-6d0d-4460-b350-d8f59f147bf5 saved xmp.iid:9ef4a3b4-6d0d-4460-b350-d8f59f147bf5 2016-06-30T21:58:54-04:00 Adobe Photoshop CC 2014 (Macintosh) / 1 1440000/10000 1440000/10000 2 65535 504 232 ÷š¥˜ cHRMmus ü݃dpèìh0>äì™êî€IDATxÚìexUG׆Ÿ£q÷â„@ÜÝ‹÷ÅKi-´x[ŠŠ»»{p÷@\‰'GŸïÇ  }Û¾oòíûºò#{öÞgfÍZ³fmÉDÆøXÈ‘¤  1€\A ¹bAg/ 8xÁÁ ^@@@@@@à¿Gúgo$ ­VûñôlÄbÄDzKðC*H$‚H$ú¨ôEà#Žr>²¶@àã×W‘Hô¿sð$µZ ±XúÞ5Z­R©NNNÊÉKÿìKÕj5ììì “É> A%&&ÂÔÔÆÆÇ!~©©©‹Å°¶¶~ïyÉÈÈ(ÑC[`ll SSSA4*• )))ÐjµH$ÿÿjX@OOïO½ô߀D"\.ÿh:,R©‰äƒ(Ï«<|,²ø¸ye7‚¾ |èˆÅâ¿4Šþ—ÆÛ?¶9Õ©<Ò¢0Ÿ)ðo´Íg êcÄ/ˆ@@@@@@@pð‚ƒ¼€€€€€€€àà/ 8xÁÁ þcFÍ«æ¡gïØáæ¿*ç—nG—ŽñËö#B5 ^àuØ‚Õ+—âØå[ÿª|?ºq ë7mÀŽc'…Jø—#ý2£ÈËFzVdzú°µ±ú—ŠT +[R¸¹8ãã`hésCéó&=†ãJ°²w,ã¡°°™riù¾¸Z©€J­…¡ $­Z ˆE‹ßü µ*¨µ"ȤRAPÿß"xun æNŒêÕ#P=* ‘5¢Q§i;l?~ã_+XS+{Ü<ðZ7ŒFhx$êÔ©‹9¿ý ó|÷Ì! <ö,ãáì¶Å¨ìíŠM»# rï¢MÍPxGaï¥'‚€>^>:f5B^÷\‹ËhÒ Wë¨Tµ1NÜO„ôÿÑÁÿôewŒüv!òô\0rÔ(tªŽ›û·aøøïWðבּ [·ì…ÆÊmšD!îá%|1¤/6Ÿ»óÁæ9õùCœ>—î>,ã¡FÃð´–áÌþ_ñõ“1vÜì8} .AuP?ÊOÀƒ…«ôÕ¹¸||3ö:ˆ9u ëvžAÄ~®v‚þ?:øà:0~ü4¬Z¹ Ã?ŠöMkÃÎFm™š¥`ÓR’P£ý@ì^ÿ -߀í[9±Ø°íÀ›g¹äÌŒËø@гñIJu«P3È;V/Ä/ë£JƒÎXÿË ˜Ë„%431´CïŸBàü¹3€ËgÏAztë† &AHÿ|ýfh%ßôEÕˆptüb`ís=d¢£X5P©äèСuÉ•M¢`&^Æç@øò´À_Á®bMŒêÑTj Uë£ßg_ÂÉD$Fàƒ£^³V¨ìnŽׯãÖý›¸~ç& +¡Ióú‚pþ_:xuuh€¦{#Vi†^‡cö¸a0-HG¾€èß*VÒ2²J®¼Ì̆B Èô$šf¿„2/Ä€"$bíߥ C×0Ô¯¼”˜:i2.ÞETýˆp7„óÿÒÁç'àò‹зòÄ—3á³^]PÁX…ÔìH$bˆÅÿÆaHŒŒõ°~é/xš–‡Üô'øeÛ!äS·J®‚Ö ü%–NƒE›Ï"¤FMT ÷ÁÎ¥Ó1aþnA0dÛתE#˜(Rp)æ6^˜¡y‹&çßïÏ‚QTõvÁ•[ç1²sCL37DüÓ{HWj¡zöÙE… ÿUBÍHID~^î_Ú…ºQW`È<Ü{üN!MпsË6ß¹Y™PHNÏ,ãƒ@‹+¿Ã€©«CwL_¼  Gá}¨ f m w—³زš &Šð&mQ3hŽß‹G¯p4¯!åÿ­ƒ—šcÚœ…°õ\‰ÇqI Ü}|†¼äÇx” €™\ù/sð´ló)dvµP':oÂõÇé¨Õ¬3z*®lÎýªÖA煮ª_C°ŒÒ²‰Ž{ ~›N¨â`8´Æ²¥³pàx rR’ |xè9¢’³~;v ºÖ‡‡¹¿¿/D$s˜üÑMñññptt„L&û( 333˜˜˜|åINN†D"Í{ÏKzz:T* øW´&&&033„ñ_²{ÕXºá0R^ÜÁ•jlXúg 222>'¯V«‘›› ¥òãøð¦R©„Z­FVVÖ{ÏKQQ4Í‘?ÓäååA­V Âøàuµ¬OþŸ:øüüüÆÁkµZ(ŠÆ¨5 ´Z-òóó?%$ùAäE@àÏ´J¥F†Àÿ?¯Õj...ÍÐkBBÌÍÍaddôQ”'%%‰ÖÖÖï=/™™™P*•°·N´øw´¦¦¦͇§>^HâÅ‹ÐjµjZé/MÚ~LCX$K:.KyH~0ч’ÿomÀÇÁÿY„Uô!‚ƒ¼€€€€€€€àà/ 8xÁÁ ^@@@@@@@pð‚ƒø Q*UD>Š ÿô½•ê?q”¸Z©„æ­‡ìiPX¤øûyýÃgµâÝZ¨þCÔJ´ü£<(ç·ÿ¨>‰Â¢?øà5(RüþóZe”šßÏ”¢¨ü¯ë˜P(?ôS4µ(Rüï>\UPXô‡é……ÿ!½èë´ðêTUTˆ?¨R(Šþ8oŠ¢Bü~miP¨øÔ¥F Õ[NTþ}+mãø«gmR£‚Rõû6ªVý¡Ü/ðÞùylw ˜ôÓ{ÍÃÕýëÑ¢^ ÔkØ5ëÔÇ‚ÍG~ßAd<ǘÞQ£V]Ô®…žC& >ûí Ю¥Q»ý<Ê,c…ZO…訨[»ÚtŠ;‰y€Ýó¿Cí¨(´iÛmÛ¶EÛvгg7tûlb‹¿£³iÁ¨S3 ë×Eݦí°óôƒ²M%ÖÍ™„Z‘ÕQ¿^4nÝÇnǽ™±üghU»6{ø»å\7}$µé4åÛÍq}›¡Ç× J-ª±üû/^õë×F£V]püÆórϬž9QáÕР~4hÞ‡bž”Ézæó9ªU‹FƒzµÑ¤Cœ{TÚ@fÅáË~]Y«jGWCa‘TXÚpÇÝ8ŠO[5FzõU_ÌX‚2É8´q>ÖªŽú ê£výX³çÂ[ËŸt ëEcþŽK¦ÁP‰Õ³& Vd$ê×­&m»âä½Ä·ÞzbÍO¨VmŠõ©m;ôìÕû|†):‡{jÛ24¨S ÔGº±|ûÉrïxpv7Z5¨ƒzõë!<º.–l>^®N·ü2u£ª¡Aýú¨Ó°6¿QF× 1oòpT‹ˆBýº5ѬS?Üx‘Y’œ »¶@Í:õ]-ƒÇÍA¶¢Ô‰>‹9€NÍ N½ú¨U _Í]2ÉH{tÝZ5AíºuQ½z4¾[¸±ÔÑ«ó1oÊT‹¬úuk¡eÇÞ¸p?rõ>©…Æ­ŠåÒ¦ ºõ`Ý¡+oÈñþɨQ½ÎÞ‰/¹íº¶j„:õ FZ÷ÃÒrúVVFß ê„^æ•ÉÛKÌýf05mvíÚ¡]«Æ¨Õ´;ÎÞI׉­(ßìȨZ¨[»&Úu‚ÛqÙ¥:úâuiuê¡ftŒùH‡”dÿjµš±±±T*•üXˆ‹‹cNNÎGSž¤¤$¦¦¦þ­gó³Òyõâi®š?‰–[ ™ø_å%--‰‰‰ëÙç×ÓQViÜ‘›¶náðNµ©9—¸óæÍšl~Ö>’KþôËo\öãTVÐëvÁUù[®î§“4 hÀÛi¯®j¹è‹O)‚ ÇO_ÈkÐÏ ¬Ñ‚ZžÙ²œ}{÷æ¨Q£8jÔœ1}"ý]õ¨çÓIòÈ’‰”ì÷ÕTnÛºŽÍ"½“J<û8ƒ$¹cÁD`ï±ßqë†U¬UÉŠF^µx/Q¡«³OxúÔQëÙœ€9Ùqë­2yxn :ú7aRÑ›é»çM¬Ûç›’k›~I@Æ¡“çrû†•¬YÑžža¼ž˜O’ܹä+?›;6­a='š:ñJBIrÑØN„ȀæýÌ-ë–³š—}ë26[C’ü¼M¡gÎYKVqå¼ïh!kõ˜L’T$\c¤»1+7äÊM[9süJÿa I2fßbжøt,·mÛÈîC)6´æš£¯×±š#ÛD'¯:ò¶YYYëÙÍ?~Eì÷Õ÷ܲ~£},hæ[ÞRQ÷üÆ~=»sä+}šù«ù›–A¼—£å³s›h°Þ§Ã¸}Çföj[ƒ€ —ï¼L’Œ¿q”.&"VmÑ“Ûvíä. €‹öêôfÿò(Øqà8îØ±‘QlY‘‡ï¥“$WNêI@ÂϧÎã¦_—ÐÇVŸ¡-ù’$ÕIlPÅ™F¶•¹líVþv´ö¨É‡©Ì~£öâ£8jÔ(Nùö;voI@Ä{.—“¡6ó)ëX°ã¾óOH’¹‰÷XÛÍŒ^aõ¹vÓV~?®/Å"‡L[ûFYý=°Vë¡T_+xxš~vÖlÖk4gΜÎï¾È1_}Ï[O²Hªøýðv„Ì–ßý´œë~ù‰~Öô«Ûij’šLv‰ð •K—­ÝÄù3ÆÑH ¶4ª@W•J%ccc©V«ÿÌí9ÿ¸ƒ×(rs%†‰©i¼rê Ì›Ï-{޲PSþ¾ÔØ»ümõr.]¾œûŽž¥¢8==á/^½Ï¼œlÚú+.^Æ“1÷ߣƒ×ðö+|—ÄG·c¸dá®Y¿I™…åîRd'sç¦u\¼t 7íÜÏôì¢âëép{LIï—+¦ö¡ÔЗé$c÷Σ©¾!/¥—¾~\›7ï¡ëP~û)eÖÁÌ,“·i»òË9ë©ÎM¤ƒØþ‹e¥vvkmÌdüfÝé·H&‹MÃ+±çÄo¤LÔšÎî¬Éý—buº·`!±áùøR›Ô©.C¢:–—÷£SŒð÷¢»§?é>ªÄÁ_Û»˜ž•0û-9)x~‘?ûq{ɵLJ—PßÚ׳ÈÌ+« ˆ¹îÜ‹’ô_Ç÷b—¦þºúWü?þqwMn,F 芄, ŒôádoçFà»ݰå·eð4ãü®åèÚw4ôœ*ÁÃV޳'/¢A¿ XÿóWˆ9€6=¿ƒSE'H%È™³ÃÇ`ÊÒø²[Ã÷0æ¡ÀSGcß…8˜šÁÁÑI÷.aÌd_¬Ý¼õãºÚ Œè†Ë'NÁ¦JsìÙóìóžbP§NÐZYÁD.‚‘‘Ξ†–æcí̼‡y×lŠM‡B o ‡éÃÚ!>%ó='©qýÊCÔ©ÝÎz¯®¡e“ê˜}á124€UÚûbΜ¥h[7¸d®öê{°µu„¥~é}³†÷BšMæĘï7âÕ‡îÎß©omtm‚Óû·àIº•£àèŽvoÎK¦ÜA“æ½Ðxôj4 ¶†6!ÙÙèÔ¨^éMf^¨ŠS÷žC™•ˆøçùh?¼yI²©OêT«€k·o¨®ƒ' Á§_@“z­:MFÞ[æE¿ìÙE±rˆÆOßuÙiGf Gçžh9jl²Ocí•ôâ>›4~ Z–Üsõ2Äúæp´Ð@ô›0µš”¤_»z”™ÂÉÚàâ[çîÜDž0gÏœƒÔÂ~öb<9r2=g´¨]ò|díp²^‚KwsÑÁÝfzˆ9w5ÛG…)¸ú8îUì¼ëadíe b+K(”¥S+I7÷`ø´u˜¹úWìZ:/s >¸Ñùüħˆ{Q€ž_7+¹fá_ µÂpãÁ#õÿàá84­Û m¿GŸz¾4põ¯‚±Ýº•ù†·\¬L%ÓX„ãç1rÊH}z{^†•k%,Üy äng7g(Ï?ÆÃd%*ÚËñðÌ9Ê àä æÜÆs±97mTr¿Gµ²µÄóçàéeƒö­>Gƒ*¥Ÿ›®à쨡€…›ÌŒ¥¸tî2ª¶¨ æ%àÆÓ Tlرç z ½´§X³óôm\0jÑZÈÆ_CÖ­ÑýÓR[°²¯K¹ä­óñ_wi†kE^x:¹W¹ëG–MÆŠKZ¬]ñ#¾6ù*!W¬Ò‹VÕDhYñüQîÄ¥ÁÖ-¼ÌÓyèÛuªtý‘â«Xu*½d:ëųǰ3cÇÚÕxúà!*T Aûvm`a(…ÄÐßÌ^€ºKí<æúu˜YØA_èÙâçe«Ñ¨ªsIvíþSXºzÀàÿý:ëkW g$ߊ'IÞ8ömDà§Å=´nf¬Tg`É3ÛA™iSHÆßBkذëH&e+IU‡7¡W–ÌÒ¼¾Ÿwo@èWà’ºÈ/õÉ%Öð´`¥z½¨%ù}Ú›„0¡ xØùÜêIm¹åJ6©zÆjN¦ô¬Ú„1ORIj¹æ›^4¶wçÅW¼ã¾,ºD±~Ÿ/ÞSŸÃ6¡lßÿÛòàóGÐ)¬9ãþ@<‹¦aˆê›rÅîó¥£»ÐÔÒ•wÓ•|t|‚ëðnq²í§±¬Âz5£Y¹r«Wö£‘§­ÙûÆû§lD‹Šµ˜¡-*Ìcƒ Fw+W¦ÜaM;6ì6žÏ^c U.ØR6BѲÿ'‘¬Ûë»ò/y—¾ö>\´ãF¹ËgûÆF.|VH^ß0•~>åd0wp Ú…ê"á9£[3´õ›£§v,gãº4’=ÇÌ|#ýüÞ5lZ¯:Mä"vZš¯ô'génoÊ€ªuرCsŠõ8äÛm$É}‹&ÓÖÂ7Ë C¥\¥¿¿'§­¿¢‰™Ô}S¶ëØ‘5«xÒÔ>‚Wbo­»¿L¡zœ³þB±˜2ØÐß‘]'­'IÖ‹òç˜ù{>¸>éÖ1ºÛsÉŽóå¦ú´«Î†¦ÿá³+'~J©U%>Ïûý{Înøb€ öÝ$µé¬Κõë±J•`Ö¬U“Vf† kÔ‡ÏS‹‡urŸ±…Ÿ=m=ª°cÇŽ´3Ñc³_éêóü::89ò×3ÏÊEÊíÝÙëËo¶rIwXÍÕ˜Uš|^2º8s\wJ ÌÙ¡cGF»Ò¢B4f‘¤ŠíëÔdDtm†W fdZt±· {h^¹Ÿò6¯À)ýQnæÍsÓÊOG_C¹X¿ž~Z¾exv‰næ¦\qê™y•œ¸õܳò¯Í{ÁqC>e· ÜÂxìYép×ò =Y¡b}‘\óeÖlÔ½$‚ŸÚ»9 #ê4fëV­hk¨G¿èV|”V¾r6/™ÆúѡԗÊ8eñ¶×ʔǙã?c•ÂÌ…k.Äý#ºúW#ø~‘F…ÔzžˆÚAu:cêè¶Ø»y=RÀü=ptó <pöîÂÅ»Oaoo •2b#g|ýí·°7•R4ëØyy ¼,z?¢ŒÌlÔé<ý[FêâªøiÆ×xzåN<ÌDÏo–ááÃ0ÊyŽÃû`ωó0±°†‘DhÈÌ‘bÐQÅÀ;´ƒ‘¡R’sÞ{‡¯P©†Dü¾Ö^Š ‰@mù•ª2=ˆE€èV0Û8ºÂ£b(*¹Z`ÏöÍÈ É}‚þã~Äø%[PÉJ†ÜÜ@"ƒMq¢ol‚‡Wo@æT{Žlj'ñU÷p|5hŽßN-y{ö“3øyÍI ó,‹3!2tBÿî=qæ×Éh;`ÏŸ‹Öm?ÁÕ¸®8wøWÄæ)ain m™z’É •éÁÜÌqäd Ü}*ÃÕÉÁU`ʬߴвU[…é#»¢q߉è2|&†vŠ@üüõ0¤84ÀÚo:Ð@¥ ͬ>¸þíu,T®9µ:ý.~øy3zŒø.FoöĬ±}P£Ó—h3b4 ³_B¢NÂõg‰?çWœ«ìF8:¹À?$ ^ÖìZ»Êÿ¼2õƒªpÑ¡{å®ïYû õ¬#™«á£+‡Ù®QFFÕd›V­Ù°FúUiÇ ’OŽ.¦‹s4o$kKçæ¥køGtÿdß±y5öþ~}¹«/nï ±¹'÷œOaAæîÚ–ÕªE±YË6lÙ¸+¸Tå¡›¹dþ zÛWâê#K{­ç7бbÜøûøÿ*‚Ý>‚ú}ùž"ø|¶«êÇŽËG¸›f¢KxSÆ¿¶PA™ŸÍ´´tjË\{rj=­ øËÁ œ?¼3E6Þ\·ç8÷íÞÉ)£û²bh§/ZÇ´ì|^þ5íüy%®Lo8ý,õ8iÕþ’Kk&õ¦‰}d¾9dtbí<Ö­ͨu9qæ"íÞ–»ÿÀ—I÷èoeËEÛÏ•‹\ú· e½þÓÊ÷ýŸ¥½ï¼ùªdÕ>„£nÛw’{÷íæ„äW™‹¶泇XßÍ”^õ;óøé3ܳk+?mU›AµÛpóî£Ì/*bvF:‹Ê®òÉyÎHgcÖîý 5$3ÓRX¨,#¹‚Öõ0gãá?3=þ+˜HøÙÌ-¥ó—OÎÓÙPÆÉ«ñÚ‘Ut²öåÔÒö èÅEVrçú“÷¸cîg”Øñzriľ|RoJ ]xþ™n‘ߣ3;^ÑÆVΜ¹rWÉ}÷n¢`÷ syüÈAn^»ÕÃٺ×hž¾týƒŠàÓî§§™ Ù}©¬V²O³6<ówŸÛ·`,e<›ÿæ:+GåSr'N^´¹tIÜu˜ò³™ëÊÝÿíg èZgss2Y×Íœu{~UÆœØÀך ‡Îcâƒst÷pãÚS±ežÎdSowö»¨X28¾WsJD¶è5œñY¥v1í³&”;Tá½ôR¥š?¶ mCyÿùsö¬^‰Mú~óÚÄA”;GñU ½ã—Yt0Ò£KP]î<ÿæz“”›‡h«/åëÏ–»¾kÑrÎX°™‡íãÒ™ãYÙ»"‡MšË›±)T0=³ü ú¶ŸFSßÌŸ§¯\eß^tõoÉ#'ŽsçŽmØ®«G6àêí˜ö;>d\·& ŽêÍ"E!3ÒÒY6^~ùø4Ý%0s=‹ ˜––YîÙKÛçQC.Ù{ããàE Ô9Ùˆ‹/w=íþXx{"íÉe|úIkh¼aÝÆ­Ø¶c;|3™‰) m™ÉGòýn6”@‹Ož•»–ýì9hdc½TŒí݇⠱tõ:ìÙ¹ ;7.‚¼(j‘$Ê•$À>®F¸ûâE¹«w®Ü‚¹‰),õÊß}xý D4èŒ2¢ô¨ÑþnFxðèŒ+ ^  ~[ð=.^Š#îÂøué|$dæ ‚« DZ@*—”UX@,‚øUP£ÉÄÎ#§P¹VKT´—ÛwêäTh2GOœÆ™SG1yô@ä%<€ÌÎæ¶`k¡Àõg©ežÉĽëáæl÷äPÓ ¾¨^Í ¿üô-^Šã·žA,*Ä’Å«p'!5ê7GEƒ|ÿíwXºd)ž$çA•rvÂÓû'P·NCì¹Tf»–‰ Fy!·PƒÂܨ_«¶ž.Í8¢QM_¤¥¥!;-"c+4iQ:·léQ 5*¹ þy\*8B£JÄã”ü’ô”Ï’˜' ¤Ä=‡GD-ÛÉKÒ[·i+UdFrd?<ƒÆõ;Ã<ì†ïgý„¥+6C©ãÖÉØyðø¥­V6ö°3/Âçie“ÒqïÆ£?¨cv8¯ˆf¨êjX.åŵhÔ¼5´þ­ð4á9&l_k›[ÁÜT‚"–o²E$dr)H%’Ó4hÖ¤YsrD³ÆU‘C['Èóóÿ¢Ì6ÍÌ8ÜHË„cÅP oÛ?ïz„'¯a׊¹¨`Vj™I‰ðЬ_«ÒmÚ´„IaÔ"}X[BñÚ›˜Zˆ$RXëç7LGÇÏ'Ⓣ‹ñüÆQ´¬Vñ É?¼ y&~hV·Jy‰i ]»Îî[^ˆõ{O@dd€}[ÖáòýX9ñ3t:©Ü3 š6ƒ…XƒgOžÁ­J4¼œÅ˜9õ{,]¶7²P˜õ¿l=ŠçOîb°~Øw-éµç"ØØÙàþÕ}ˆ¬ÝwË$›{F£Z=ŠTZ\>Í?é]n”¢jÓfpÖ“"-9åÿÉ|¨3í<ªóøõøâ^ê~:ëƒÝØÌ¤GÇè þ´O×ÛÉLzÈ®u‚hæQŸ/I>>²„NÕy5®´ç¸uÑtkÆùïi¾gCŠõ¹t»®§™—ú€M‚X©é`¦¤¾`=w°ó¤åÅ¡M§~Öž:ñÐí<2ï&=m|¸bÿ½2Û ÖÓÁ+û¯§||8ôóÞVÑï_þ  쾨‹ôÎm ¹ì7iµîÿëÇ9åÛÙL.$ïžYO8u-•$©Êáâ ½(–sÓÙź«*éíúõ;:U®ËëI:]Êyq~–z¬×ks$Uœ: aæÅÓuË…sa >ǯ<ôZNUØ4û >L× -ì]4†€ŒëÏ<×ɲs4Ŷ~¼§‹.6LïO@O<*ÁÇž¥·­7n»^2W¯Qk¨Ñh¨Réò¾sîHúù„óIviÏ]¥RQ­Ö*Œë׈•Û ×©\Æ#ú™‹X©^&çiŠ·h-¦À‘ówP«ÎcU;9=£>e|ñ~Â+WÐL ýq+ÕE© °—0²ãp¦åélþøšï)8mm ©Éb°ƒœa­?c¡–dáKöièCc÷ÚT‘<¼ü †\¼ç\± $²_ãZx7bF†cÛ…Ó;ª3 IªŠ˜™‘ÁÔÔæææ—ìTQ©TÔhIMîÖ¨æÏ?ïü·É©8¬Cuʃy31—$¹vjo†ÜvA§û7-眅¿ñUÉÔi÷XÍQf”Ä©-âÐæ•iÐ’ÉùZR«dffSSR˜•« g kN˜ºðämÝ»ïœÛL3€ƒæn%©eÇð ´j»ñ/I’w/좽ì0N·z½oMWšûÖçãŒ"’JÎÑŽÚñ^>yÿðrJaȵ'uv“ý2“ééiÌÈÐE§k§÷'Ä&\qX·m­0ó»Õö¦¹W}iÈ«Çb}þz\·£%ùÁyúX‰ØjÌ|R‘̪&lÿù<>ä2##)©éÌ/fÒrx“@†µèË×½ŒF­¡Z£¡Z­»7þòWpæ¦Ó:;Z;¥9Ù«[ ‘û2‘ZDÐÀ%’7âtóèºÄ–f jÍš ºê¢òüŒv’Ð6° Ÿ¤ëüÁÉ‹(ßþzYq7h °ùÀ˜«&Iw.úŠb€¿»Ï»G–'.Ù¡ÓˆÂlNКÐwáþÉÿ69Uæ=¶¨Á  V®ÂFMÐÉ€޵:ò~If³_óH[²QãÆ gš5XÁÌ~Xʳ{WÐÒ¨"/Ä–:ø_g  ¡WãŠÞƒѧ5}ü‚º 2ÀÝŽæn•¹óJ‚nѸ¾”K ]§#«G02ºýœmÑfoß8EO3þ¼ãfÉï_N©¥÷\ÿCô}j{²Z§áïÍÁkòS8º]4õL-Y¿Q#:0¤A>y©Ó½µ?"î¾¢ë ­˜ÖŸúúF¬Z«k‡ûÓÀÈŒCçü¦s<¯/æZùõ\Cù¨LÇðàæ´64d@•hÖŠ¦‰‘%g¯ÛQ¦nÖpù¾«oêPÌ!FW´£­§?›6¨E}=öþfIÉ6§ä›§XÓÛ–6~lX'šú"1{MœÿF–ýð8-¥–üiÇïéíø¾mmüù{]À¡Ÿ„ӽ᠒ÿ/ï_J' ºù‡³e£Z4Ó—²zçÑ|¦k¥xýÈ*ºZÒÙ· [6©C C)ÃÚ}ÎÇ9êb‡þ# etcÓ5i(•³Í  Ì..Üñµ?ÒÚ@Ê€j5äK¹ W7°šÜŽiS“r}SÖnÜŒ•}ÜiléÂMgî“…/è_Á¶îY!ÁÁ  ¤…µ#GMßð…ˆ£Ÿ·-‡ÎÛû:x2áÚqF{ÚÐÖ+€ kGQ_$e¿É‹Kt e5B?ˆi%:q€ÓV•ßF§I¼Åj¶†´pögTDCB‚LsSŽ˜© ‰wØ¡ª ì\ؤICÚ™±JóÏøõÂdŽlYRcK6hܘž–t«Ú†Osµ|qp% úUgµð03Ðߎî¹ñôí’…•U­X·Ó¸ÿ(óô˜­t’sË¥$ÉKæÐ¶õh`lÉúM[0ÈצÖ.\½óØ[ŸŸÖµ6«—n¡»zh+U0g…ŠþlÒ°ÍMLÙ´ë$‹•»V|C3#„×f£Za4Ô×gû1?² xJfú®ÔÓ3`úMâK¹¡9g,ÛôA,²‘Ì`ò‡ëä4ÄÇÇÃÑÑ2™ì/¨Òo!¢qWô¿µŠpäÜuXW¨ˆ­šÁLïÕ¡Y8|è0âS3`ï†æu«âÔîÈ2tAíÊ^¸uë!"¢a¡¯Jxz“ Y²¿9r333˜˜˜üÅ'‹Ð¥e=Tí‹o:Vƾƒ'!1²Eý¦Íán_ü.­ găØ8È-оMS¼¸~ çžd¡e£šxrël}*ÃÍVw^f<.Ü|‚Ðð(Xþ½‹ÉÉÉH$°±±ù¯Ftn]:¥¡#ªxüíw¤§§C¥RÁÁÁáo¾A…#»vâî³X:x¢yËæ0/Þö–ÿ—¯?GDtlÍuCœ·/ÃÙ˜;ÐÈŒR½"=ßúÖÔ¸¸óâ%ªW¯ý2#q÷bpàä(¡ðÚ PÕ×µ$-'=g.?B•j‘°³ÐsQbV2ví9€´œBxøWEÓZaåÓ3±s÷>¤fÂ3 Íꆿ¹è*/g/Ý‚whÍõß^¿Oná~|!"k†Cþ–Õ†w®GŽÈÕC|K§Ábï`ÿ‘SxY …›e´¬Yn5#î>ö:Ì|5\*… Eƒh”Õ¾ä‡7qäÌEd©áæŠfu#Êýfì>&&&033û{ÛåÒ°{ï~¤æÁ;°šÔ.Õ›WÎ"%WŽÚµumUaN2Nœ¹…€*ÕàlWÚöh ²qéÂUäP E¯–”æçÃ+¸ B+yWgcûŽˆMÌ@@´iU¿\X‡=Ž!5+¶N^hѲ ÊTzvÂCì;|yEZ¸UCƒÈ@ÀÃ[1xš˜ ª•Pi 1µª'Ô«[†Ý°S{wãÎóÈŒ,Q«A3x;š•Ûæzh×6Ü{šK{O4oÕ@Æó§¸q÷Ô2-Š T‹EÐj •F‹ªÑµábc°gNœƒ‘­*û»üñFå¬D\ˆyˆJáQ°5••œPwòÀÜ~ô¦–¨Q¯!¼ÞÞ>¹q ©JcT¯êWºø/å<ÌÜ"¸úTF³úÕÊ=óìöE?ƒ|­ •B«£~µÀré1§áÒÍûÈQ«.B|Üþ]U©THLL„““$’ÿ¸©:÷Ÿwði×áÖ½¿Û‰Iݪ0ógÿƒoY'ŠJýppሦ<ÿ+ÿ¿à¿wðï¶-øo¼€À»â¯:øü ‘H OwoØüNdòïƒptp+ØÚ& ðÁò;x‰EEl󼮾‰Èô0}þ:ÈŒLíøÿëàE9,¬ä‘ÈÄ0³´4G@@@@à÷V‚ƒ¼€€€€€€€àà/ 8xÁÁ¿©TúÑ\$ý™“€þUå‹?ŒþšX,~ãÓB[ ðßñW}ðŸ:ªV«Õ"..b±ø£1…B©TúÑ”G©TB$ý壄ÿ Ôj5´Z-är¹`‘B[ ð?B£Ñ@«ÕÂÙÙùÏtî¨ÚWјD"L&{ïßcÿ_ôØ•J%Äb1är9´Zí¿º<‰jµ §§Fó^ó¢Ñh ‰Þ{^þb±¸¤-ôUàC÷[¯î?;Bú§ü+‡nii ==½½C‹ÅP(022‚¹¹ù¿Þ¨% ”J%$ ¬¬¬Þ»ƒ×jµP©Tï=/F_‹ŠŠ`hh A_>x¿•’’’ÊÉÿ¥}µZ]Ò€ÿÛEZ­jµú_oÔ"‘¨¤<¯Êô>Ñjµ FóÞó" 🂗W¶#è«À‡î·þª~ «è>ÆN ÁÁ ^@@@@@@@pð‚ƒ¼€€€€€€ààþ½¼×¯Ç„¾¾>@¥(‚†>RòžêAO_e%¯Õ¨ TiÞy}„T®i¹®§EEÊry! ‰\2ñïåO÷Ì+ýz¢¢"€H,ž¼üùýJE´A‚"1ôõÊŸ©¯(*!‚¾¾Þï–CwÞø}µRµ¶ø¨g‘úz²·¾[¾õy]ÞÊØ Y./Š¢¢·æùme½Î¡Õ H©‚xkù^Ù¨.ëRèɤo¾W$‚ˆ!†¾¾ü­2yûo«Q¤T—Ú$‘éA&)sµ(R(?¸ö¡lö J •æÍãDßvïëu"ÓÓGÙbƒ)T‰òM}Ш•P©ËþËÝ÷ªNð6™¾V¯¯d/–êA.T£H¡~ÃîäúúШPiXòÜ›y/­³·•]«VA©Öü®¾²€€Xýß±S€Kå—o4Jõ±4Cåd£{ÿ›zúgl]¥T@£%dr}H~/L.©»÷§³ïÏÁ‹DI¥xxýî§jP§v$ ÅšÒÆOà5P¯^…‹§O")=®¾Á¨\É úbñ;UP’éëCàþµ xð<–Žn¨ }}=)Jò"‹¡Ìy‰§ñ PK¤?/K!•H`acS#}äåf"!>Jµ®³¢Rk`n〠6æ€H¹L‚¬¤g¸xõ6´rcTŽˆ„½©>”J)ôåR¤'àôÅ+PˆõQ-º6lMô¡TâEìcdåA&•è)C,ÃÐÈ6ÖæÐ—Ë‚Lœ”JeñokpåÌ)ÄeæÁÉÍaAÞÐ×£¨HYâ@Þ¼„;ãaéè…ZÕ‚ ¯/££÷AØŽ¦çNEj®^þ•àYb‘ uù²X,ANz“S *>jT¥RÁÖ¡l,Í!“Ë!pëò ¶.^ˆ¬}}yqÞõm!Î<ƒ´<Ü}ƒäí = Òr¹ Ù OqîÚm@ÏU£`k¦³@¹\†œäXœ»r ”¡rÕê°·0Ð¥‹u’¸G·pãÞS˜Û¡Zd5éëC©xÕIÈbÙ<¹'©¹¨V2¨ûìró–³c ŒŒÍace}¹š¼4œ:{ yjüC#àá`‘R‰¼œ4$$¦÷£‰T‘D66¶0Ò—¾ßo·Ìá@£Ñ066–¹¹¹T*•,**ú[*µšµšŠ¢")T$ɺÐ̯!ã HR£»WQþ9¥JMFC¥Bñ·»Üû”J¾xñ‚T©TãÅùP(¨Öh¨þw(U*j4ª~Gf ¥òÓÿìŸF£aBB“’’¨Ñhþôs……EÔhɬÔgìÒ¸*­l*°jX0ÍŒ-8pòbT«Õ)/jµšÉÉÉŒÿËϪ4R•Ç9úÐÂÜŒ¡áUioiÊÆ½Ç2©€Ô¨Õ,,¾—$ŸœÜÎ{:xT¤··7}}ýAK+Ž™¿•$¹eî:ØÚ0(¤2ƒƒƒhgçÀ£æ—èö™í XÑÉŽžþ!ôóraß0î9w¤–$y÷Ô&ú¹ØÓÛ?˜Ý+Ð%°&OÜM!©äÀNui`bÍŠ½é]±"CBÃéãdÇКݨ!™pï #ýÝéäU‰•+yÑÜÜ… ·-ùí³ÒÃÁ†>Á¡¬èfG{ïˆyQòÛ wO1ÂDžΞ~ ðq¥•³?7ŸºG’T*tõG’ŠŒÇŒð0f•ct/.Lb×(?šØ:ÒÛÛ›ÞÞ>¬R-‚n&¬ÕyIRñœÛÕ¦¥… #ÂÃheaÆ.£gò¥Z÷ë÷Nîdeºú0¨’Íí½¹bÏÍ’¼ï]=NÖ–ô­J;[zÔfÌãx’’äÃs»ìjK7ß úy8Ò±bU¾ú@—߬$hU›fŒˆ¨B S ö3ƒÙ Õj IÕ–Ö¬F[s3¶ûìfj¨ù‹:õuN¥â‹/˜žžþ—ôµ°°j-™õü?©HGg†Uö§……5Ç/Û©“±ªÔ® :¹ÌŸ0˜–¦–  epp0m-ÌùÅÜ•Åõ– }šÒÔÊŽUÃÃhaaÊ=¿br¦š-™w­jÐÖÞ•a¡þ45±æè9k©"©V«Ê´Ø/Ù2Ä û­ûW¥ I>>½‰ÁnVôð dHp0½ÜìZ¯ã²µåÚûk»~¦••%7^x¤ËVa!ªÒ{–NèA »HÞKÒ•I­ÑE/ùmßÖ473gXxUÚš³õÉÌP“–©O¯²]Í@ZØ»1¼J0Í-m8zæ*Ôºw^س†¶V¬J_w'Vðã¾ ·KláÊ¡ ¬è`C/ÿÊôót¦ƒGeî8u½8]ËmsÇÑÞÊ‚ÁUÂéZÁ†Q­yùQ2©Ñ°°¸¾H’9±làgÏðF½Y@’LgÖÑ42³ÕÙ±+W‰ —ƒ-«7ìG’|zã0«ú¸Ð¥¢?ƒ}âÕ+så ”$5…ÜþËO< +½-iáâ˃·ž—´ÿù/8Ö·ìÑ©-­-äôŽìʧ©¥íõþåS€—nevnw-úŠ8é—c$ÉÉ]£)³óæÎó÷˜™ÂŸ¿èE¹Ì‚ûîdQ“ý„•lD nùŸ%¿ä‹—Ù4È‘Ñmù’¤&ó+;ÉY©Q>IÈ`ü£klæF—ðfÌ#™³F»™Å´—Ù¼}v7}lMYïÓñT“Ô(‹J:(ßöoAlÓãK’¤º€WÏŸæþ‡xôè1^¼z“ûVΦ$œ¸xY˜ÎÆ-èÝ–7Ÿ'3-ö!ûÔ¢Ô!€7ârX˜‘ÀÃû÷óè±c<~üïÞ½Ã!ͪÑÌ*ˆgo'Ôü¥öó_åà_õrI-×/úž-›7eÓf-ùÃÂ%ï^2µ?Ý«·e|q+åîiöêØš‹6î×5øÛa§mزeKö4’Ä霎âÝ;x…JMµ:—«—þÈ¥«~ãÏ3&±yÓ&lÓ¡+Wn?©ë,«tüÔ®_Ù½S;¶lÕ’ºõå¶#ºÆ+ûÅ~7e&wí;Àicú³a£Æì>h />L#©ý[Êðw¢ À–Cæ•©ñ\†:X±óà™º~‹âŸwð:Ôrb—(ºÕìÀ²Ý¨!ƒÚ° óu™)Ñ-Uùþ cϲ¢“3çl¾TÜŒc£ZU8gûÕ·êuâåÝt5½_ríð¼á´óöa.Éã FÐÚ%”ÙežÉ~t•Ë—­áKå›=µ­#Y£Íç$ÉØK©/5çÚãKÒµ©·èehÀÙ[Ïóìo?ÐÜÁ·2KŸtb) Œ-¹ÿ^>“N/¥±‰=o—ýñŒX.ýy ³Tkt…ß;ï úE°y³zlÜëëb¹½nüZ¶«æÃ¦f–\Ö­&-«õ.sO½­,9ö—K|ymM ¸ófZIjÁÓc´³4æÊ#·¹wé—Ô·®ÂxeéÓç7̦‘ž odñÚ–40¯Èø2oW¥ÞâÏ«·SAûFù°YßoʶC ñ°b¿9H’-ªx²Å°ùåJpxçZn=~jµêƒpðZ’ªÔ»Œö4e×o×” žï3ÀBÊa³~-žKmM•t‘Þ¾\.á-Ú˜Çú•LèZop¹«Cšz2¢ï÷Tæ§Ò`ïÉʤ&ÑËĘƒ&,ÓEÞ»×°V•6kÕ†AÙwâìWÕO’üªOc68ý_Öj5Ô*s9mp7†V¯ÅæMëÑ78˜û®Ç–<^˜zŸ½Û5bÍ: Ø ÚŸ‘]ø¸ÄÁ«8¼E½÷.÷Þî‘î¬ñÉp’dŸ06ì_¦Î³îÑÃ\Ëô˜]t0²æ‘‡Y%É'WŽ¡Ü%œ Z2íÜz:[rÏ­”’ôK¾¡Ü)”Iòäʱ4óªÁØ2ú8«g#úWi©‹ÒÕº„#k§±R@¶mÚ€­>¤kOToÚñÀ&UÙ°ë—$Éû'VR_nÃm_”b/.ÑÍÀ€ã—ì|ãÙ”+;ébåÀõ§ïÿåàèŸpðÿè*z©L‰Hƒ¹Ãº ó )°t €§_Öý¦¬ÈŠe¨ dß?…èÊ5°ëR"B‚üqy÷<´êö9 \ 6-Dtµ¸ü,½dñ.H ‘¨qpÇôïÙ?­?ÿ°È^ÞA¯6õðíêÃJ%8°t2j·ì†'9r„‡‡"íÎItêÔâ a$ÉÅŠãѺmgœyZ€ja8ñëLôè÷Ò”º¹¨w…Z£†ZlŒ¯g/ÄØžÍK¿˜ñÉÙù0³±Õ-†ySH‰Ðäà¨âë99)¬z 2³³‘’@"-^Â!‚F©€B¡€F @…-ÚÂ"¢#F´¯ ȉ} äfãàÊïѸAMT®ƒ¯f,@¶J÷›Vž¨×0¿Ìú×<ÃÝKÇ0gÍIÔmÖÆŽœ~€°j5pnßFtÿ¤ Úu肊лo7˜‹µ(,*‚B©{Ù¶YŸcîÁ8ü86 -+ *Xš™”ê‘Í%HÍMEúË<˜›ÀÔ¨TV¶Q‚œ´Dœy¿ÐÚˆ»´>í€V­Ûá§½7Ñoh8˜Š!‹ùàzŒéËV£mm¤däèf©…B¡€ªxîtþ°VØñPŠ¥sG—üV³f­`wsWîG\\–Nýj7´nˆÌÄdÈeú°4/Í»¥ Œõ ‘þ<9TAÏÜfeTÕÚÂÆâ"¤Ä'áêÍÛ©_wïD¯ÎíЦ]Gürò%†vo 9D±p+L uQâã—é/«€ö ª‚Y÷¨–"ÂßKgNFË–­ÐsÐp‹ê‚¶µƒ¡Q_~HMJDJº QþÅË:˜Ù"¸Š=O)^ŠWìEÓÆaÀܯ.öž9‡Z^VÈÎHÁÝ+'1kév4lÐFª4€ó{WÁAB¤&'áÌþ ø-&u:´×µ# â.¢ßY5g%zÔóEÖËì’Ÿ … ¥®4¿Nîƒeç³1÷Çïuvœµ),MŒKêQÏØö&"¤çe–,œÕ@Î 4kÑ~G£S´´j%´ï¡È?Áëb‰{G×ÒBªÏ•Gž–¼ïºÉ46´æÝ´\î]6–-úó™3¬ëfÅZ­†0C×áå·}¢ “ Þyå¼|¾;ñÀ•GÔjùÎ#x¥†$³Øï“š´ôªÍ›I…¯& 8¶]uZxE3¥HÍGvg³.J{|OŽÐL¿×J"ó0ÄÆ˜Íú|ÍW}ÇKgÐÜÞ…{n¦ü­!È¿?_ÈBeùž`aúc6 s£Ì"€e‘Ô¾“9xµ–¤2mBÙ¶®§¯QêzÞŒ¡KXs>~YfFɟ‹¿¦ÄÀ–Ç–†Ä¶-¦ ÀªÍ;óÇŸæqtÿ.ÀOFNcnñ=Ç·Ì%:ºyÓÕÎÙsËIÝÐääÁÝé`oC7¯Šì5ès~Ú¶>pèäe%s¬Z’EÉ·ék&c·‰ËK”§Wèo)a#u‘ÉÅߣTÌ!s·óÉÕý4ƒŸMûµØÈ29¦gŠ`Ì Îrçš¹t²µ¥“›»ôÄ~Ÿ¶Õ -ö›R±Ue'Öî§‹Ò&lÌÐ6#ŠcwUÉü|ÚÝ´ƒ_,=P2ÅQRó“Gzôóó#Öë=V7~óè$ ÁÆý¾+~Ÿ–sÇö "þ°rï]ØNÀñ Š#˜¼önUƒ"s7n8zÛ~ú‚ŽŽ6tvõg÷~CÙ³mC`Ïo—™9·k½íM €õ;ÓÉôùy6‹ò¡­ƒ+WoÊ‘£†±Š“õl+rßո⩬÷Á“äó+‡èiâÀù›u£w:SR°Ï'5Ù ïÔbQ”Üä×i”¬ßº3úy>?ïÕ”Øcâr¾Gª28ºC!²äŽSwÞh“³âo³VEšVˆâíøÝèŸRY2b3¸y(›žXÚ%Ýd˜ƒ1-|Â8aÆ\ÎùökZ‹A—ªMø4«€Ôj¨*žZ|q~;+Utå–KË´G qï¢ñtv­Ãû¯"ø¼x6¨èÅnÃfÛ­nJ`ùôAt‰h­›¶)zÂ7BfJÿJžºrYR<‚P:r8ºG3ê‰AÀˆ›OÜ,#W’,äWýÚÐP ú\{ðr¹ñ*uÊ-vlP™(r¨ÌSOóKÚçžµƒX«½N¿~Þ–5u×åK¥dQa!µ$óžÇÐÝXÊ3Ö—È-õþz›ˆØ°ÇøÝýiü êËeì1qiqëjoÝ”~„‘o¦)KÖ.½çþŸ[E/Ò \¿u3{\Þ¿×wäA+7ÒŸ ¯ Ç.?F˜½; ì@ë–œ©ÅñC“`©§[¢Ú¨]O¬Þ5u‚|Q¿q}Ô¨UÓW¯‡¥ T*ß[§(;·õÛõF ½>´jÄR9ú ˆy-¾ÂÉ+É6{5Ú>º‰åógáÚíGxúð ÄÖ°4’êBä«ÍѲ]{HŠßgãå C3 (ó‹ÞñF¨Q2ݶ‘c›¡ïÀ!HÐ÷Ç®ý»îe•Rñ3DhÈñÚ*i­V·½ê-# R¹ (JƼE+Ùvêx[@£RB Ü«ÔÆ¯;÷!ºqXÉ`*ÙéaÀÏkðåȱpVŸÅ°qsPï“Aør@'H4øñ»É9¬?ªÞ[c²Tr,_¶ kû뢤áí0añOèÒ½#ª¹é"Ü-Kâ©ÖëuÖE<*5ÌÜCñìïо÷8„U>{s)â’2áêî­2•[cÚŽøü«nˆ9°zÊ4¤å*àâ乑 dª|$fæcÖ¼ ñI@íÀ¡è:e.‚Ôíq]‚Ø¥#uÛ¥ ‚X®_r°…Dª ¯×.šû îÚèÕ° -ĬŸáhŠ>f-[‰ê~.¸vl &þ°£‚B1{Ø'˜;q4:}9A7ÃVV„ø´,8;y#7[ßˆæø²os|;¸Nm©e~&2sU¨èi S#=hŠ’)Á’-kѧY ü«Î:ý{ôîÚ 5¼ÍžUêaźm¸wõ¦ý°ßüÒ;ø 75Žmq`×/°Õ”cú ²J4~œ³™P}›mB @òÚª~Ñ[VM«TjTŠhŽm»BP¯y‰`0åÍ1uùŒØÁºáœ['w¢wïþˆIPaéîýhUÃ*¥²âQ˽+g¢ßÐ/o[ {l†ÝîjR(¡-^¥¯‹¨Õ ‘=¾]²NÕঋø†{¡r£X½é&õ«­ZHô zë7Ç •R==Ôš7·Ïjˆ_­V/c·r}SåçbÒHÓ÷ÇÒ_'" ‚!o^ŽYK¿†_€3¾èÞ¤xHQŒÞ#§¢vÛ>زdÆ §í[QÍ˯†»}þ ¢ZôÄŽå³0qØ`¸lߎ¾ŽºÇ 0èÚÿ~š>ÃŽÀÑ‹q~éXœMqÀ•ã?gK±T=ÐJ!ðÛ¢HÕ÷Åç½Û ”* l|"1mÆDt4U‘ñÉYpus†™‘¬ØÖ$Pf=ÃÜÑvÀZË U»=þ¹!úⲩ)‚X&•EPª¼ÌÈý±pÕF4 uCzVRÒ^¢Ë€ÏÑ&Òû G–F÷|Õ&}ðàÞMŒÐYO®aüàž ‹ÆÎ ÞË}‰ª‹D0*²ÑkK –ÁP¤Ä™ ]«9~Û†Vö¨S»lõePh5€V‘9¤¢ÒüççåAè¶[½ã=¼2¹> ÉÇ”^ÍP¯ãgn3OîÅ q„kñ^Ïw·åb=é© ‘°x[‘N‰©©J4Êu*«§§‰X¤Ûü%î^8ŠÓ÷²ÑµsÛâ©B£Ñ@nî„V-uν¨°ÐêÓn°Wå!35·ŽïÃÓ"k,øe!ê×­‰: Ú`õâÙÐ<ŒÁùÛPXPˆJAuðImÿW°èÚ»+DExô0Q—ñÂ4lÞ±U[tD¨½´´5 y¯/ñøæ)thRQõÛãàÞM¨l+EQ~`èOpnïÔ «„Ö½ÇbûêùГi+(Ó“àà‚nÅÎ:öø®lqhÝÌš½ u.FŽ}{áÌLÜ?„îƒÆ >K™T MîSü¶õšwì C@«VB&C‘ù ¿¬Þ‹¶ÇcTßΈŒŒÂàñs1¨U 6mÜ‚|ŸŒ‰{ç¢eÍPÔlÑûvn„‹µ>^æ)H1eÙnݾU‚ñéÐo°eÙw0ÌI‚‰…)r²Ó`XÝ‹;|Ò©7<ŒRðàÉ5œ8r×¥ÀÖÑÑuë¡ßè©Ò¶*V¯Û„')(¤š·ï[}@£ävèÖ´’âc@,û0Îç2ГBOZMñ´‘n¶EiÉÐ3Ò+nüåÐÓÓƒF£‚¡ƒZ¶Ð9÷WûÞ;wîC¼Ä‹t]Gzù´¡ªÝR¿Æ¸zÿú5‹€Z©€H* _bt‡ZhÞû Ôé5ïžGt€”¯†ˆ׸´(Òè¡q‹–p³R¡ûmÿ†éáˆîÿwÎ@.‡‘žšâæK\¼1¼0%&VæHyú;^@ÿ ?¢_Ç&¨] ZƒÆÞ–8}ì bobûîÃ(¢RP0šµlƒåKçA“x{NßBfÜmlÜyùZø£i‹–XúËÈ_ÞÅŽc—qÿÒì?zzÆV­†í»aÑÌñxqñ$íߎy«~EFA&ކ¾}zbçÍDäÅ]BÛ_âf¢zr)›€-» ªu'øYI¡UëìXIÚœ„‡W¢uý(ÔlÒ‡vÿ† B$-¯îß‚›/%ø´C+]‡Nóal÷þç,¥Øñ¹Û˜£0'ý'ýŒ…‹bÅÊU˜ýý%Ü…‘± ²SaäY³§}‹¥óÇãÁɵ;}ÖΜ€ 1ù9~*ö;‹ä‡ç!N¹†ÅË·ÿÙÿ†-ãÒ‰Sºƒ)ä:C¾uü$Df–0‘%aúø1í>G÷nÇŒ©“1fÐ'ÈÌʆ‘± C«Ñ@£R¿÷Ê—Heˆeãá‡M÷°ëücl_>Nfò2e{7ŠªÕj± ‚üpòÂ9¼Ä«ùv-9 'ØШ V© Ñb±ÎÀÎÙ©KjUõ@ˆ$bèëëcÙø®ð‰n‹ú€›—Ï ]$†¥¥)DZ — l¿J&A¤QC"±„_€ž>¿ƒØ‚Rm»{å24-l­±wcpñn&Z5¯§ë\¨5ÐÓÓ‡6ùF÷è‚GÆÁ˜¬­-!)îÝ?³÷²ÄhZ¿®®ÑQk‹ûÞbHHHDå×{HôDÐ7³BaV † ˆ<÷ú˜6c&}1fY÷péÖ#4j[7£oïA¨Þº'æÌ‹ÁŸ¶Â“óûq'Óþލàà„Ìû1xð²ôÝîß@ªÈN†jŒî÷)~øeùú§bUl\áh,Ãk—uy*6òówbahê #T¿ÿÆS À¦‚DØ}òRIL£Œ¿SžÀÏÛ]wŸZ•Ð××Ã7½š" Fo¥‡­\¸pÙúô±DÌæŸ0dÚZü´õ Îï^ÊnVÅ£TzŠ”˜9¬'–ÏÀñÛIX7o2lô_ùW½âòïÄZR9î^k[G{¹žîÁüØë¸KG‡Ò5™%üpèÌY‰Å pàð8Ú»ÂÁÎEZí3©X[K œ?¾m[öElv™­ ‰ÎŽ6¸uf;:µîGée+@ ‰D { #ì^6 ݇~…²cºjµ *‰9†~õ=÷jhE°¶±\Hå°¶²„¼ødžû7.âú“|´l^§$HÐÓׇ"öFôøÉöQøöû˜<ö3X<ÅÞ«ð+íÀî>pöÞUêößHòßµ^CR“ýŒÍ+9ÐÚ#‚ÛàÕK'Ù*Òƒº21[ÁMsúÓ2¨)_Mçüôy+z<|õ—ŒlBünÉÞ½w—»û™ÆF&ìÿ݆ÿj…â;?º_Kb¶ìù%/Ä\㎕3h*›|þ‹ ÒÙ¸’ ƒwç™Ë×xh×Öôw%`ʹëO33ö,ô9KéÊîG¡­+·ž{ñNçàI2çE ]ôÁˆ6ýxâÔinZ¿Ž«V­ä¼KxþÚ#ª_[ð޶É]?ò+å›õÇ‹—c8wŒnÞü‡_OëæÚ7ÌfEßjEwÎ3—b¸cíÏ´‹Ýn 5$o죋!Ò ÷Ÿ:Ïû¶³¦ͽ¢øä¥†ŠäËô6Ctä±ó—¸wÓ"Z€ÑGï¡%­ü’г箋 %u§Ö’ÌOeÓ3ÂЃöžäÙ“ìdL§Êm™GRx‰6+TiÌã®ðÈæE´MzOÑÍ;¾¼Çê.¬P‹ûOãñ}ée£G×jm˜ö–é·±=¢éÑdË.›^6®¥z6¼”XP’7•FCj 9¹_C&œòÓ:Þ¼Ã9úÇ-¡lÐ}Ož:Å¿­åêU+9oá2ÆÜŽ-É»ªx}F÷šî¬ÙstédìÓËô5m*Eq÷ÑÓw•'÷mdê»Tá£Ü"æÄ^¢§1è]£žŽáéƒ[Ø(Ô™² A|”•ÃûGWR°eŸ±¼xõ&·oXJO ½ku⋼7menŸF¬\£cÉ’ܹðsÂØ‡o¤•³cmNk{þÜzà4OÛÍJ¶úôŠü”i¯–<(“Ù Š-ƒÚèÎЪ•ÿÓ¹÷w¼B×h§>¸Æ6µÃèV±ƒü}PµßÒm¢ÙøÓ oÖ‹‰:eÑä>g›076ì5yŠ,NÒ†.®¬^•îîÞì=b&“²”ÿÕv™ÿÖÁ÷ï܈ Úta—6MHwg6ï1†±Yêâ…[ËYÙÛƒA! çð¯'²W›º kÚ™—¯žeëšõ¸úàmjµZjµZÞ=³‰¡5êòØídjµÚwçàµZ>¿v€uk„²zT$«V cåÊ•HK[~_|Pƒât£P©Iª¹{ÑTúzº30(ˆnÎ^ùà ‘ÔjµÜºr MÝxàÒ“â=¾iìÒ¸.»ERKuÉ»t†»gÕ\øz20¤2½=½Ø¦Û8Æ¥(I®®®íù•Q•èB/†ÖhÉÓwŸ•èþƒëY5Ї>þôró`Ó.#ø,µˆ¤†Z­–»æfH¼žXXRw…ÅÛÔ÷ؽy zzWb@%/†ÖhÁ˜É%øáÙ=¬QÅŸ‚XÑÓM>ÎÄ\µÅyK¸r„u«Ðݧ}<ÜÕ¸o>Ï*Þ&ª R©,Ù ?exG60I·à¨X¯æO€ªíŸ«-Í[¡®á*ÌMå¸èâêʰ°ÊtssçðIË™W¼’(áîE¶¬U•n>~ôóñdµFy/9»dIÓÕ£Y-°"+ÓÓÓúOdf®–šâWîß耊ô®@oww6ìПÏÓ^êϬçü¢Okººx0,4˜nžÞòý ¾ÔèV¢¦sÇ  »“ ƒ‚ééÀé+·oCU~ÛäŠ ©R“š¬dNìÿ Ý<<äïK/ßpþvôZñâ1u®EÏÐÖÌPkIª¹yáúz¸0($”žnîì6l sIªÒ°St5V¬ÁªaÅvJk+N]µ‡IO.³NT£¢"ö*=Ø–ö>œ¿é\‰ª´Zjµ…ݹûLø™Z­–šb[xxåëV¤§ý}¼Y%²%Ï\O(·íX«Õòéù¬Y‡nÅ¿Ö)©Õj¹wÉ·Œ¨Ñ‘Ïr4Ôj5TªÔ$Ü4çkz¹»20(®ÎÞÿóÝ!<2;ö>´¬KWwo†…ÓÝ3?¬ÜYròÉ•£¿2"È—¾!ô¯èÁʵšóÀÒ­i7Om`te?úø‡ÐßÇ“Áѹûò³'½}Éô¯èÉ ÊUèåîÎúízòa\J9[Q/†[0¦ÛvME±3ÖjµÜb§Ú•8xÖ:ÝùJÅãàE$s˜ü§áÓ¸¸8XYYAOO¯t;ÕŸZ†Rz.v‹X(4"8¹¹B. ¨%´ÔB,‘@@OOÐj˜œ[G{Hd$' »@ }#s8ÚY`¹cKÿò¼„XŒäädÁÔÔÍŸÛz#–éA&ÎF‡¦ `5Ë¿îŒçOƒR¸¹è‚( èééA‘—”´LÈŒ-à`c*r›œ;ˆ©š¢’Å9¤VwÄ¡äïk(“Éœœ ±X [[[¨Tª??‚£ÕBKÝ1•š’Å3)‚T.+>êô/l”J‘žžµZ {{{¨Õê¿2š‰L2 P•†øÔ—0±°ƒƒ@5J H-4B"Ñ j¡Òh!•Ê!†ÚW»‚Êœ½­ÌÏBbr¤¦prÔ-0***‚X"…\&Tx‘˜-dpvu‚¤xkEèÉ¥Ð*óð46R}S¸¹Øëê¹øœkµJ‰T©T M™  ¯§›¾Iˆ‹…R#‚‹›+$Å:‘Xwö¶¶Ïž'@,7‚k…2ï.9›[‰'žR#xº;o[*‚¢rK5 $qñ)ö¯¶Aª É!“Ú2{uG¬êò–ž’ˆì¼B˜XØÀÖÒ€ …Fg‡ÐâEl,Ôb9<\œJô»$ïÊ<db /#‰éY0³v„•  Q¡H¥-Ñ·”„8ä)Ô°°q„¥‰¨VB©éò¦Ò¥K™Ü\  R( }¥oêB<‹M€VªW7gH‹íR=È%€"ï%â’Ò!70†‹“C9;-çÏ4@,…DÄR[ù];•ø¯øÏ ÒJàêæq±"@«…J­ž¾¼œýÏçÓÅb( dddÀÙÙâÿÜ6çþþÌ: =½r Ò+ÁKezˆQ² A¯X  …©Ò2_0ÐjÔ%û{ÿAý-/׃L”…úá(¬4gW/ã(5PÏ«‹Äãxµ‚¶Ì X•J™L¦››+V$±D ™TµJY²Çõ]9ø×óZÞþº¬ÿÿ{yÒ¨UPËJ*•C"•‘Õ+}! å[ws”ýˆ5ê’\à5}{eÒåßS>½l=¿š•ˆPÜ ¿¹rP¦§Ò¶·ü»ËvŠ®s`oqįK½Úwÿ::§Yþý2¹Ä¢²¶õæ i™/e”Ó?rý²6«EQ‘ªL[ùš\^“kÙ†ñme{Ý®uë*JÛ•W6Q’®TBóœéýß8ø’wÈä–q°euáUgæU¼®ÛZJ·6â5=-ïPÕPiø»gd”¼ãu}x‹¾è•Õ·ß±‘D ù´G¯Êûº^½^¶×Ÿe+eÛEmIþ5;|=ýõß~ÝN˵—zz¿ê¬þ);~ÝE‘²´Gôªî¨)ÙOÿ¡8øwö±¥âµíVÅ-…Z¥€ú5i–¼F­„æý¯G+64Ý×ÅZ¶é±{$HB¥R¾±¾…Z Šòޱl™¯ÉB·êúýòmy}ïrþƒ<©ÕJ”oƒù†<__Aü‡éÿéùÿ®V¾®¿åuü¶ŠÞ¢ ¢×Läó†ßÕ©WŽæÐ¨U¿o[¢7m¶| ôÇr½%½ÜˆÃ°ë÷iJ ÍŸ¬—ßÕíÿ¨§^þèÞ?óþÙÿ^yÿS[ò‡¶ò_Úá_iÇToyÏÛñÛü×_«»÷…ÁÁ+¡¤>÷]‰±ðµºü¿ ÖhJŽ“œ»€€€€€àà?4jµ ± ÁÁ ^@@@@@@@pðÿþÒ";©Tª;¤E«ýWZ,C$A"Ñ\$‹?ŠòˆÅbˆÅbÈd²÷š—²òý>™( ðgÚA_>t]ý³‡²½âOdG/^¼€H$‚L&û[Ç©~HˆD"A"‘|å‹Å(**‚H$úÛ' þ/ó¢P(JŽñü·w>nʶr¹\ÐWZWU*HÂÅÅåÏtFÿÜIv¯ L&ƒD"ùh„%•J?Šò,‰D^•ë}w8´ZmI4/ ð¡·‰DÐWJ¥$ÿÔhÓ_rð`aaƒâï„ÿÛIMM…D"••Õ{ÏKff&T*lmmkøW´fff066„!ðÁóüùó?=êü—º«å#&ÿ†¨WýX£Õj?˜áÅ)/¦-ø«s›ꃅñ(ÁÁ ^@@@@@@@pð‚ƒ¼€€€€€€€àà/ 8x © W$=ŠŒ|%œÝ+ÂÌàýöý 2Sð,)f¶Np²1û÷?}x*èÁ§¢Ç[R•xtÿ (7BE—?x‹Ïž%ÀÎɆ²òçƒÌÐ žoä €"÷¿€ÜÄž.Žo$g$¾@rV>ìœ<`mª÷Fzj|,ÒrŠàèæ Ã׿¡Áã¡• ¢§Û`;O™¯‚‹—Lä|F¸*7^$ÃØÂ.Ž6o¤g&Ç!1=¶ÜakaøV¹¤¾,€£›,Mäo¤'Ä>ÆË \=}`¢÷ö<ä¤$¡@j{+Ó7làñ½‡ÐH áãýº\‰‚üh´ZˆD"hèB^æüþÌäHLÏ…³'lÌôË¿Y­DQ¡‰É`¤¯WÒRBQ|¢ V«…\Oúzo 3=j©1lÍß´µ¸§‘]DxûùàÍ'5xüàTbTòvÿÝúÉ™Œô"9\,jQTX D(¶$ˆ ‚¤Ø–@ ò ŠJmŠÄbˆ¥rèËÊëì³G÷‘¯ïRÅwY“Ìá@­V366–J¥’ qqqÌÉÉùhÊ“””ÄÔÔÔ¿õ¬&?“£º6§£ƒ+C‚ýéäêËŸ7ùÛyIKKcbbâß~~óœ¯èéäÀÀ`º:9qÀ¤Ìÿ{ãŸ\f³è`zzû±’—Ãñøíç%éO¯d_zúÐËÝÕštᣄ—o}×Ò‰=hã_‹1 ¥zžúä†ÒËןžîNŒhÜ•÷³_Y—OE— Î  ¢}7Žü~9ÕÅ©9ɱìÚ0’ÎnèW‘ž~áÜzòf©Æ` ozU ¤§3CkµæÕ§¥uøðÄ6†ûºÓÛ?žÎö¬Ñº7Ÿ½,*ùí™#»ÐÅÓ‡ÕªUcÕ*´®À5Gž‘$ûÕ«B[7/3$¸2#kÕfXÛ žTòþS›ç±¢‹3‚‚hïàÈ^_ÌfŽêUª–K& ¤s… ô§cwN[¾»äÙ;'¶3ÔË>ÁôtvbTÓî|œ˜Y’~ùÀzºÒ' ˆ.ÎÎlüé0¦dËUUÀï?ïÎ öN ¢““''Îß@Í«‡•/9~à't¬àÊ Vp÷åÏëKõ1îöÖ õ£—o}½ÜÝ‚—ÅÿWmAVVÖß³ìŽéÚŒÎ.. ð¥›w—¸ü»÷X5›ÞNN ¬\™ÎŽlÛ÷+¦å*Š_VÀy_ôa''V ¢c7Žžñ+Kj<7ãu ³c†ÒÉÕ“ß­ØSònUn‡¶oHGG7ùÑÙÝŸK¶Ÿz3± sóâ„ù‡Ê]~sˆ5*ûг¢}=]R³%cbKõqåÔÁtu÷bµêÕX5¬2m½9ué‘’¼ÿ0¦]+088€NNžüê§ %¶Pw…íëÓÇ¿2#"ÂàÁÀèμŸ¬%IÞ:¶•U¼¼Y9"‚ááUéíìÈvF—”½D+Ó®³š¿çn?SîzQêsöjMWOúUtg¥°º<~³´H¸{‚uBýX±R=\X£eo>IÉ{C4ùI·X¥¢={N^­“éóëlâI߀[ªQ¯ý½9eå~&<:ÇJžNôóÔ¥W cýzuèåÀ…›/$s“ï±M­*tóòeEOgF6g̳´¿¥oJ¥’±±±T«ÕæöÁÁ žóǶ'`Â…[òñ½kÞ®&¡o÷޹ƒ¿yôW`Ç‘Syïá}®˜6ˆøÝª“oi¨’Ø<‰Æ¢yäÌuÆœÞÏzþ´óoÈE$‹âY×Ç”6¡Mx"æ&OÜD'}0ºÝ¾öª»‡WÓ m导ž¤órÊܬåmCç°fz¡sT¶¬å¢e˹fÍnؼ›¿ÎÿŠØoê’䳋»¨°õçßñaìsnX88hÖ.’ä¡Ec€ÞÌØØœÖ¿.pûÝ~p‡S?ë@ˆô¹êä’äoßõ! á”å»yÿÎui_ƒÛòôãBR›Ã†!v´ lÄ“—oóâñ=¬ælBŸº˜¦x÷þç1ŸsÞ¦ý|p;†}›FÞ¼ð0ó{Ÿ]ÚFCØtÀw¼ûð ·/ýž†ûL[E’<¸d<pÂüõ|òä>gíN@‹öÜ Iþ2q)gü²•Oßá·ƒ[bkn»¨³µ™Ÿ7#DV\¾ûݹÂAÍ#“ <ùH——{WÏð§dÛ†Õ˜pÆŠÓ¥Žãå3Vw·¢sH}ž¼tƒ1§÷1ÌňëöeI²-*û²ö§_ðè‰ãÜ¿o/ׯßÄëw^$·ÌFœôãV>zx‡Ó>oK@·\,¶•´µtáöòè‘Ãܽk+·ï<Ì—y:¿üÛÞtö 㞃‡yøÐnß¼‘‡N]ä+sóÌa.øy[Õ ¡DnÄå/–P8´q õÍü¸ûØ%Þ½z’µÜ@8WaI>g¸«9½j´çù÷yæðê¬ÔpË»I ‡6 'Ÿµ^çûrR¹õ×å\¶r5׬YÃm»örÖøžDœ·óó_&sÕ²Å\µZ—¾÷à!öoNÀ†Ç¯¼ 5¹l[Õ¦^ÕxäâM^¿pŒ®ú ¡gæj?rç®Üq¬Ô=ºÍy?Îããô¼¡îݹ“K\ÄË—ñaza9oûm%×n=¡ûW‘ÎÅs¿c¿~ýøÕ¤Y|’œÿÎüý ¹`Õf‹¢(;•Ëþ‰çïÇ–F/çOpᜅüeÞ<û ¼“¼tr\¸¾$ZÙ¹vôïË¡#¾âÙ±ïÞÁ«3XÝJÌÖ#.sí)m-Œ8é·KïÜÁß§­C›”ë¹÷ªáÍð¦½ùºJßÙ·ˆ¸òxiOýÉÅÔƒ9O?ÉeÂõ­Ô“XrϵR¹\ö%¥Ö~<ÿ¤ŒîdÞc½ÐFDE³jý6¼‘¨û¥cË¿¦¡¹;ËÆ†qç÷qÂäù$É1ŸÔ¤[•åòÔ&ʃu?[@Mn }dà×+Ku_qe&¶<§eÞ „Ø„»î”êàñ…ciiâM ÉûÛgRjdÆ£Kó¹~j[x0YCªcÓÿ*üI§6¢]«µ[¢wcÚV¦KdÏ×FN¾åŠí'Iuk¸[°ÃWkÊ¥O›4–ÇåòÑîŸ)œSJÓ¶~ßú¾t6¿z!uæÍôÒôEã:ÐØ§ ­éÎjíG”¿XÙÊÖɪ~€3ö˜R&ù9}-8ê—³,xrŠf7Å”ê×õÍßQîT™72Þ±ƒÏ‹cm3¶ürq鵌›t׿\°íÛkKëJåܱÃèÝê+’dŸÆ¾ti0¤Ü3Q–ðÎÙôiJ÷¦cʤ¦ÓAß”W^!©f¨1ØeâŠÒäÜ[435â¬]÷H’ë~ü’öάH{/ÎYs¶Ô<>F‘ Wœ*•ë™_ÇzÁL%Iå}ñàcÕ›rÐæ0Ü j2²\Û]ËËM»M&I®ÚŸUZý]QoÅ“×ünú’¯ÑÅÙ•ÕÂééëÍU‡JÛ¦gg6ÐDnÆ=÷ËÃË›þõT¾$yvùÙø³ì¸Ý£ãÛ8yê<–õh›gޤO¥Ê¬Áß­þœ¨ØªZ%výjÅÛ“S¯3ÀÞŽóvè¢÷;{¢\nΫet3çÞYŽ3™™ê¿®rœƒÿ~@]î|–«ûõºˆlRq爿BWksvè>€®¦"vÿv]iîbÏQàð¥GIõK¶ ö¤±­7{öéI_{ÚTªÁëq¹ïÔÁŸ\­‹t¶^ˆÓõ,­ 6<«øŽB6«ì¨&Y3À>—1„lVs3°ýx’ä·½šS$2aûn½Y3Ä0°æ†÷ß­ƒ×ñÌá|ŸIRKµ:—Å þl3ziy}Ü‘þa˜[TȳGN1%«ˆ¤†êüTÎõ ½Bëóa––ªÜ;yŽyR£Ñ2=þ?mÁêm†‘$×LìKOŸh–È{xäÚ;9ò\™vvCü8bÔh¶oÝœÝú áÑËwÞ*Õ­?ô#¤|øJNñ¬áîÁñ‹¶ñÂÁ :h¿þv3‹#Š´ë;èæíÃߎÆpËŠyülðÎX´¾ä}ÉOîóøÑ‹º—VÅÔç·Ø>º"›öÿ®Ø™·¡Sô§Å‘ŸŽ³ÛçÓÒȇ—Ÿfóþ•Þy”HRKZÁ#ëgÐÝÍ“/¦’Š8úù8óë_N”õ ìV§›÷˜BeAO>Ë<%I­šÙ©O8´}$«·ìÏÌ¢wë೜¦™9í,M2—]j»³å¨ŸÞ¸ÿé­k稱ó¤üyâµÝ´1³ãÑ9nH;¶5ÿ­uþ]Z4õ¨UN·Ke.W²fÕŽ_•\šóYGVoØ›wÜàw_Žà°cxèòÿÈ}p>áòÚ™šrÕIC×­>°ûȺˆvÃ,ZÚ0SK.Õ’‚›— ]l™=”–.T“\;¾mÜ£ËVÁ¦þ6lØýkjß¡ƒ×æ>g¤‡N߬NüásÊF4ÖECêçgéhnÏñù¼».õŒ]x9N…=;½Žf†Ö¼ž®áÃ#‹i(³ä©2=âo>¢s@=¦+ß¡ƒ/Ñ ?ÓÛÉŠØã‹Ùïa>‡mBپ߷åÔ¢1t kθ‚?~:åÉ%†Ø2°þ@ª´ä®™ýèÞˆOÊTsÖ½c wrâòƒ·uQú/_ÑÈÖŸÉ*òù™åt ¨Á›Åýš)CzÐÃÓ^^lÔ²ëT $ ÇÙ¿ž"©dë7vžX¾'¿f|o††5,-¬™=–nv¦À)Kv¾–ëBNÔŽfR\wE×Ïþ¼=*Ögj;N¸¹‹¼“ªá‘ŸG£[täÈQ£Y½¢#néæ1zÙsñŽóå®÷ý¤öÿáwŸ+L¼Í¶uB)VîU™üÚ(Ìó[X5Àèß®LÄ®Lb³Š„ž5ëV%¶ÿbæïß·z&=+X~³è-ú$FxøòëùË]¾µu.Å]ýÃèçfGHM¹çv’nZåçqÀІ­8bä(6¨Z‰¸`ÛÑ·y NîÛŒ€÷Ĥ’Ú"¶ q%ŒlÙ±ïç5l -D {Õ¦LÑ̹Eo[)­\*qȰáü¬{+`íß–YòJå²Vˆ+go+ƒß0{+ù¹ÓÛ£"kÖkÎu#uÓQÓV’$'êLOOz{{±Iëö¬æKÀ˜?­*.¿&‹õ*Ùñ“‰ºNl·UÙñ‹Åo”*þòNˆÀŸ÷½]×-Gˆ¬x)©´§ùóWƒéîêAOOwÖoÖšj…¿˜¾î8ø|1ŸcXº˜ãÌ©srp' Ò­’n]À¥óÇáQ " MûNxyÿ^Ëü¶õjuì €GïÀËÇW,Áô¦cÙŠu06’áÔÙ#x^ðîVËŠŒ]P;: —Žœ½‹Î:Á´ WÒ‡×NBää…*®†¨T·\õ_bÝö3€­›6ªr[‰±kûXºùàæñ_1kúX´d9 ´zˆ»}§îf¾—•ÀÞ•kcì¸ÉÕ» Ž®_\|çy¯Ö-·—S,¨$ííìXü-ü‘n_›—O‡Tä¨A-Á2¯‹DH K+ä$ÝÄg?lÀŠ=Ç`' J@"Mñbr™¶±)iúýJعÇÎ_Ã]ªaÊSŸký7¾{/•ˆ e×φÕm/¾þ}[ÕªÙßàЕGeR%hþIoLù~êU«€ïGÂK`oaY®Ì"±‰™’ÇÐzøyéFœÞµ³gÍĹ«×ÐÐßã'-‚²Ì3ëOG¼ž¾ü¬m™Ÿ”yIÈ–YaÍö#ؼ~=n\¿‚`ƒ'øzÎd‰-—÷š8pö$~Û´×Îl@ÂÉ͘ñó¶2+t ЮÇg˜üÝ Ôñ3ƸÑ_@©ÑÂÒÌÔjËÕ¢D,‚XLˆÄ¥w+†aäØñ˜0¬[Å{.&Ö‚oÊU,Ò­¾.³ƒ a»žøzâh]ÓÓ¿ù wSrÞ­®Št:)âkú*’üásSô2Ó§N€_`Ô˜©P”I·v ¨Ñc1é‹È<½“W¬ün"®äšáËI0lØ0ŒìÙÇVÎÇÂí'˽ß7¼ÆŽ›‚aÝšaÏŠÙØtüÚkËÄóÁ’Å«êŸ]Á—S#¸Fc|ýÅ0ŒþrjT²Æ—ÃF"!«#ê`ö¼8upæÌž…C—bЫ®/&Lø©eÚ߸›çѲš¾ùå4æþºͪØP¡Ýgc°sï!lXöfý¸—ŽmDjÌü¸ò, ·Ç¨¯fàÀ‘“˜÷ã\,X½»ŒÅ©µßcÿ•Çåw ï)£ zzx|?ÍúNÀÉ#»±ëèY¬šÒ ¿LžŒkOáhm€¸ŒŒ™³û¶oÆ©Ë×0´?¾™>ÙJ5VO‚L·æØ8¹“N­Ebè™X¼±ƒ`á¬é0 j¾MÞ²Q'ßÿ° ûDUûÒõûúâÙ‹8tÿòGÞ³N\ÆCZcÆÔ¯qþyÞDZŠ~Þð¶¬Òá Þ8¶• u棧wÙ¨F ºqŸÝEð‹yÅ+AµylìÈž?l¢&ÿ]¬í¸åF.I[׉`pX$Ûwø„-š7g³f-8lÔœ³b “ ßí"» ë§Ó¥r^¿z‰mê5àÙûÏ8¤mþ¼ó<çŒëÎFŸŽ/¹wrïúôk<€¤’ *UàyºU§>ëDgw?vìЖ­Z¶d³fÍØ÷³aœüãrÞ|‘ûÎ"xmQ/^8Ï´Üò]ånÕ\èÓ¤?Uï4‚/dÇ_vX>‚ß0µ]#š2ñ-ê§ÉHàÀá„È€½¿ø¾œ2oš3˜•›°¬8¯í§—™OÞ|ÎYýšRNžñ¿ÿn ûwoOÿÊáìÚo ÄÅqZŸ6 ªÑ¹ü(Á­4tæ“1Ú)‚Ÿ|Y>‚ÿqXWWù„)Y錉¹Â¼rLg”‹![™Ï´Äx^½R>È}xŒÆqÍÉ{Ü»ä+úøÕbÙiåç'×ÑÑÅ™ëϾ}­ÆÎù_Ò¬jéH‡:ƒµ=LÙxàôò7æ>a¸¥ü°¶Üåµ3ûÒ&¼//ØOwG.Ùó \úçu½Ø ×p&%Äòú­òi ç7ÒP®Ï]1O¹yfº×îYnÅ•ÝKèhì˳wyïöƧ—_?3¾CÝë÷cjj,£CÜùͪò«¤4ˆbËO'2'3—¯Þ*]qORõâ]LäµxÏ;à3œdEsK.Ûs¹Ü4S¯•Øìó7GÀݺÌÛʯÉ9ºd%&xüA ]‹áó”òù˜Ü³ƒÚ3>ñ C, Øwjù¹á.‘n i;šZuc.]df¦\z»;·^N^ÌyÌpwŽ_PºŠ~󬑬“T&Çl§±¾go»òÖò_Ù³€Æ^KÔ½}çÏãi$}ÃòÄg¥þCóvùuŽªÌ&Ÿ|MåÛÒ‹âUÑŠc—•eP&\çÿ±w–áU[ÿ?qW’@B„„à îîܵP¤´@Ñ⮥h‹–"¥¥¸(nÅŠ  "ÄõøÿýpNN ÷¶Ü[Êí»Ï“Ù³ÏìÙkÖÌ[k׫TšËТ߱ð#ÚùÕãËâv í!«zØpí‘ãœ3°3k´ü¨äöÞ•mt mȵ_oeY °N·!\±l)gNŸÈ†uÂV¿%¿Z·Õ¼GŸŸx›þv2ŽY¾ÿ­ïuteb+þxñy‰ë‹†v¢wPã^@š¸s´²s窽wþ÷gðкsWàáYŒ›³.¡ð÷ F€§ VÌ›„Z{´oÓÐ4$¶Â°>qçÈL™µ ž¡CEkXdÁ£Jkìúi':„Çbbÿ–(íb 7åûe†5o‡iÆ}±ùv^¨TÕÊàðÆÙØs1­""Ì÷8¢Øß0cá|¤)}1¬k#€ƒH ‘U)üøÓì?p‡Ɔù£à"Gië÷ö.¹ 7РV=l>r¯Äõ2>öÐiT¯Í¥ÿj”¨PΗïÜAñùÛÅóWáäà gÙë~ÖYÓ§Þ“âúÓ8lZ4 6Å’½ýÊ!ëÁ-<Ž/šÙ=¾±R%lœP­E†ök‡§‘—ý‰¯2 éû, ùƒ¼’ž€Ìby¾|ñ Z ¥ËÂÝÖ÷.–œ=]½w ž5ê!ûÉ%Ô¬Ù çdKu‚—» ììqyÏz4nÕ)ÅR­½|`+•#;W„ å|—øãõæôÈ›× 28¡V€Fw­QËö”xö“èû9ØÀÂ$§Ø«?ãz¼­›—”›¥+¼|ìñðiL‰Ë±O¢ai-E™rå` ^$$”˜Áî„J kK'”u/Z}p „£›¬¥Z¬Û Ýǯ,{âÑ=èllàë&ÆýÃß ×§_aÜê=ˆºú T,ò¡O¼uáU*áx‰¶…ç‰/T%wNlBÅ*m‘Z,µ 11Iy°·ý÷}¡»GièÒ^âeVÉø ‰9€‹siø»àå«—ÂËçO¡×À±Œ/>›8¡Ä¥k7ñôÉsht¨²R÷ÒÜ]?µ tGÛ&uÞ¾‚¸ÿ8ùWEýê%c”õó@fn"’‹©fRÜshôØ9ÛþCüà ìQ7€ˆóL{kÛ6î½õ_r4þ*Š BKbÎßZäûzrÓ Š!çœu?1#'—÷®¥“¬Ýc"õïqÞ|˜jD£;×8ãéó{Ç7Ó  Oåf|Qbr¢â°ÎF£Þã—íç\ÛO€]FÍcÜ«t&<¿ÇFÁöT”®ËÕŸ?Uð®3x]Þ+v¬äN…GUž¼ͬ´n[bty™ôõ®÷~Šþê!ãÉø‘ 73)9…‡7]‡¦¬=F’üíäv¶ëЇ±9Z>½¸ƒ€s¾=Ì—±ÏùÛµ+¼|é/üzYdAr4ÃKÉа/ï<ŠáÝÛ§âª`¥VCÞªô‘ÇVÑ>°&Ÿ˜¦žñ‘?ÓE¶2•Ï_&óÁS,ïaÁÐF7¹«;æǯØÍØ„8n[9øÍ‰(êòRYÅYÌÒ5:óÆ£8¦&<æ’Ï:pßÍ|õø,•[ú‚1/SùìámölT° àíd=©yJ?k°R«|šÂ‡WÓǬÙÓx*yÁ€¤üöàY¦¥§qÿÖ%Àçíííœ?’VÖôæ:ÌuƲ.زŸ¯ÒÓxd»ñ÷Ÿ­4îÕÏîÓ€°òáî3·˜–’ÀczòÈýt&\ßKìúùJƦdòé_Ù¡Fiʽ*3^Gjâ¯Ó] Öí9‰Ñ/âùÛ™]´Øqô ’zŽmW™°,ÍŸÎF23#™‡6Í£`ÿéÆ}Ïo'w'`Ëõû/36îgìHÀ†âò˜ñü"6è=‰â^1îÑMïht;}?îýž¢'9D{vüéÜm&ÇÅpRïڄ̃ç]Ó¾Y0ŽýFëlÿŠ1F]þf?_edñö…½¬à¡d`³ÔèTœÓ¯!váÎט••ÁCÛVÑ `—)›Iê9¢uÅN!eÖ«8nš;”8ë»C¯Í볂›Ç/û¹ÈûäâÚˆÀ¦½&òÑ‹—Œ{É^M+¶!ŒËÈá¡%Ƽ–lÙÇWéé_ðá‹D>¿í«{ÑÖ§6'—\éÑÄßbõ .ÜUt3?ñü¬Ô¨ïFÇ2æámF„yÓ&¨!3´dÖ£#´ƒ]?›Ç‰É¼{õýe¬ÖaØ[W(»µ¨ÄÎ_|W²ž4§wùºL|kלËõ˲rÄoÄŒ½B_°v§áŒŽKä“{×X+ÀÕÚ2åÜ:?X?ø 3‡Ö¥x&Êh„îžØA+‰„³7ŸxÓdbgJœƒy?E[ÂíbÝäattrdÕêÕYÚÃõ»Œæó ý;7êÿÄÀ_;ø -Ä®ØmT´ü„»¬ìaÃŽŸ-}Óhí^L@Ì­g—<‘ÿýz»:0¨R–óófÙ*-y1êÝÊý'‡ìRžüÊæat.U–µÂ*ÒÁÁ‘ý¦¯eÖ{?dg\âÜ4íc:99±rÕªtµq`·QsÍJúÓÚq”¼›Çs{—ÑÙ݃իWehùò,Ì ?Oz6à¥ÇÆuù›gw3ÔǃþAè_ÚƒÕ[óæÃ·{\Ü»Œ>UðA1æ‹[—ÒË͉A+³¬—+ÖëÂO3Ì[ KǤ³½3«V©DG'öÿ| WI^ÛÏ*^ô*ÊðŠAtp-ÅÉë™…Û¼Œ^®Ž ®Ære½éîÂ=§¯˜Ÿ}ýÀF–õtf@heúº83¤vÞ3éQ½Šãð.iïâÊêÕ«ÑÅÉ™=†Éâ;-_M@Ÿ†L|Ûér}—ŒèFkG'V­V•®Nì¬L‡R\¶³èàY¯!TzÖc®é„ýÒ =iïà°µèíæÀüõ±q#&7ñ)û·¬EGWOÖ¬YŽŽölÛo4SL•šüâ.;Ô¯D'7/Ö¬Q•Nööì=j³L†">ê,Tò¥«wkV ¥ƒƒ?š·™o„sÉzÂêþå8kó™—í\M„V1ÊÕ§<¼óâm[¡*voÎÞÓ6–¸:¼SVmøßjVócت¢3{ÍÜüV¹uhËz8Ó/¤"}>žžžÉdï´R Ñæ#9)ÞÞî¦32Z$''ÃÎÍ Ê×6 ÆDÔÀ eCœÿaÑ[BB>Áóø$(­]PµRÐ;¯\ÄÇÇÃÎÎ666qqÉpsw‡\f|ôäˆmÝ`oQ2ðž%#0f[4nÝ: §×Îßäg$ãîç0ˆ-V£ dïXš¤¤$H$¸¸¸¼óûܹ~ y:xú‡  ”Ó;Ë655Z­ïúóÙC<ŽK†«*…•,ÈË«ô‰ÂËÔ,Ø8{"Äÿµ¥Ym.n܈DžN ßJðv´|-$o"nß È,P±Z8¬e¯ïB$ãzdÄJ{Ô¨^ù—ÜArZœ<Ë"¸lÉp°™é)ÈÕHáåîø»r~þè.bRáRÊ¡AÞo¤ß¿u)Yjø…TFi×’KŠYÉ1¸û(b {T ¯ ‹7¡ÆáÑóH,lPµRù7òŽŠ¼Ž”̸ø”Eˆï›¡lß‹DF® Î>þðó,©ªÌ$ܾÿz©‚+Wƒ£Bôõ666°³³{ç<îß¼†´\5Ê”« W›baU“Q •ÀÍÃÙüå³x— w„W,÷F^ïÞBRZ6\K•FHÀ›axܹ…ôì|¸xú"ÈÏó°Ì·»Ì|=¼ƒÊ£¬»Ã[Âë’’ KGgXË¥¯É5w>…^$GH¥0¼m/?@|Rl½PÁÔ.õª\¤fdA£3@§ÕšOÀiu88»ÁÅÁº0.2n^¿ •^„€òUàb+{íÙ‰¸õ ”Y¡rXe¼-Ê.uj¤¼Ê€­£ ,¯u¦™¸róôKT®«×KfJ,î>|…µ3ªW-ÿ{kÚx•’™¥ì­‹Úê«”DÄÖps~‹½Ðk”˜KGØZZ¼5WuN ~»±ÂÕkT}çñZ­/_¾„——$É¿»=ç½ø?ÂÝË¿`ß¾˜¿â6ÿr =úþeÏúÏ ü¿çeôu>rS¿X€ž³ö`ÅøöÙ³þsÿßã¿aàÞÿ / ð>ø³þƒúšÜåc»0ã«=ø|Áê¿Ô¸¿/^ܽˆ‰_,@žã0kt{A;ÞÔ×äNYƒž¾†•ü!ÜG!&iìl­MøÿkàerdòŽpʼn`Üþ$ˆ@@@@@@@0ð‚ ¼€€€€€€€`àþ ^$ý£^þŸö>ÿ\þ¬Íú=ƒ')hŒ€€€€À?s@ðGBÕ’Dll, ¤Ré?âÅu:Äb1Äbñ?æ}D"Ñ _ø—£×ëAò£+ÿlþi}À?_W}||þÈl>çõÀ…3](  †ÿi!‰Åbddd@¡PÀÒÒòþ}¤R)222 ‰`ooN÷·•E"‘ ;;z½ÐëõB«øàû¹\kkkA_>h]U«ÕÈËËÉ?´\ÿ§¦XVVVÿŸ™™ …BñhÔR©ÙÙًŰ²²ú[ ¼T*E~~>ÀÚÚúo-‹€Àï }øí–T*E^^ÞïÿÌôz=ôzýÿ¼/\‘0 æwú_¯x’ i~§¿ ‘Hd.Ë?A¶ÿ?ø§ôÿ\ ûÔ?e± ügý‚/ xÁÀ ^@@@@@@@0ð‚_ˆD"á£/Æ:ù@Êñ_Ò£?¢gÿî÷ÿâ—ÿѳÿXú»=ÿ…öõïêáßçÿûeøWyÿOõ ïPÖß¿ÿåõ/õBôodþ¶•wmÿ¶ zgÙþ'íøßêì)û{VË¿=X¸\.è4jè cÿ·Ab©r©qܧR«ß»B’„R©|ãºZ¥zC7^/o!z­Z½1˜‘D¦„ìµðü::CQv$ U(  j€è÷Ë¢V” Åëo•JmjÐb(ò’©z-ÔZc° ±T¹Tô–²Ë.W*ß«Õ*ÐÔ½ùìB9ý^Ù•Jˆ$P*d¿[j• „Èø†b)är©éÙê7ä_$_=ÔjݲDfèÔ*èh*»òwÊo‘ Z¨4zH•ÊÙi©Tª÷8((|¿×Þ…z¨ÔÚß-È ˆthMÊHà_Ô©è5¹+ “ˆÞ¬ûP…©_U™ÒDäïÈU•FgÒÇ7ÛR¡>¾­e¡†FGs«â:£R«"‘Š×uÎT§ ’È x­¡ê´jèôFM„X …¼dÍS§…Z§CÎ…õa0õüWú&Ä[Ó_×%’)”0‰Ý$÷ßÑbrU(•oô£Ævü×ü¿ÏÀ‹ÄI%¸zbÎ?Ö`ÈG=a+Ó•]àï°îJeJ½›7@^¦"Z5‡A«…á=v—J¥,ÈÀþ={qÿy"œ½üÐ>"žöotd©2©w.lj_¯C'³F­úÍP?<„Ë!“×Nƹkw ²°Cí&-Q»BY@«Î`lb ¥¢‚T|¿í*5k‡ÒÐhuƲäg`ÿž=¸›gw?´ißÞ.VP«5P*äÈNŽÁž}‡šƒÒÁUÑ¡¬•rh´zÈe2Ä?¸†ýGO#S#E¥õÑ®qu(è(L*ÂóGqòâ ˆ•v¨Ý¸%êTµHerˆ¨Æ‰ý»píî3X9{£uûzÙC£Ñ@.—C“ŒÝ»÷àI|<}Cоc{¸Ú(¡Ñh Ë‘óêöî9ˆÉY𠪀ˆN`§T@§ÊÁÅ£Gð"K ¹Ì(y‘ 21áä凰JÁБD‰X„£?|Q©Šh^·<´Z­y¶#W* F.vlûåj·Ae_·béD(ä2<úíNÞÏCÏîa''$) ù騷{/¼H‚«·?:tŠ€»­r¹ ñÑ·±ÿç“ÈVVí›Õ†R.BZÜ3üúëe¨dŠŒ®T¦€D"AÙŠðv…^ÿ¾4Öh0_ÅDaÿ¡£HÊV£\åèØ¦1” @­Ö¾9a‰ ”Ë¡IÁöƒgѤ]WxÛ+¡Õé T( Êx‰]{öáùËtxù‡¢CÇöp²Té> ©L©Dƒ7| ÇòµÐ´fEè´ZÐd¤eR1nœÝG9¶èÖ¦! Ó ’@.—!.ê78r™¢|X=´oV ¡3H “ŠqóÂ1œºxz‰ê4m…zUƒ÷#/ãÆÝg°¶´0# ä¨V=¶J =$R)dR)Žý°yö¥Ñ±E=P¯‡T&Ë¿áÀÑÓÈÕŠQ!¼Ú6© ¥ ÐÄË$¸{õŽŸ¹ ĵµ@ý°r‹4ÐQ ¹LŠÇ‘—pôäEäiĨ\»Z5‡B¨µF#_8@zùè2öž†Ž]ºÀÓV ±D ]Î+ìß³^Áµ”?Ú¶ïOG£\•JT‰Ø·ïž¾Lƒ»_":µ‡“RiÌ.2¹U:¶lþõ[¢Fˆ/´Z 92_Fc×ÞÃHHËGHX}tnSr A™ "]ŽìÙ›caçâVm;¿”=4j5ø×÷ëÌæ¿A¯×3&&†999Ôh4T©TúO­Ñ˜óÓjÔT©µ$ÉU_t£Ò¿!ãòHÒ@•ZM­V[ôµ††Ârètïôì×ÿ4 ccc™––F­Vû§ßC«ÕRm¾f*¯Z]"­VûÆõ¢´"j´Z³\4êw{½^Ï„„&&&R¯×¿›\Lõqýð×ÀÁ“V“$u²L:ŽIIIŒ§îOÖ—Î` &#ŽC[T£•½Ûtì@?+ú×íÀÈ„<ôz˜ëÁXÞýëçÑFnÉšZ²QŠTZ8rñwL “Ïs†ÑÚÊ–µš¶f½jåii_ŠkwŸ!i FU¤“?.ÿœ€'w}n|o½žÚìlS—–v¥Ø¾SGú¹ØÓ¯rc^}Oƒ|våkù¹Ò«\EFthI[+9ëuÈä|cžg÷¯§»ƒ Ck6d놵(‡œŸ.Ú`Öç=K>§µBÎ:MÛ°^x0eV®üò‡SÆDu ÇôiN¥­+[Gtb°»3½+ñÜý’d~Ü}v©îG;_vŠè@w ×ïÁ»q94Ș[çY7؃®¥üѱ-Ýì¬ÕyT:RŸÍ!ÍÂèTª4CC˳BheÖ­_‹vr0´õækûQ—öÒ2Žœõ“±XF/äçµS(“ɸåÜ=’4×eAÊøR4k—VÒ9,‚q¦WK{ÁAM*ÑÊÞ™í:v ¯³ƒtæ½$ão.íÝL?G+†„×a›æõ(—+Ù’Qn‰W1ÌÇ™¾Á¡,_¾<«T c­Z• €Ÿ-ß]¢ äO«Õ266–©©©J_ T4|rå8«–²¡WP%¶oݘ6r1»Œû’yR¯{­oÑèLRSñ«Ï:Òµ4/Ç»_½ÁÀœç‘ìPŇ^ìÑŽ®öJVlÖQIy4ô%ôþìŽÀ± ·šûŽB½Ê|q“ÕܤlüÑdS;ÐÒ@òÊáôv´¢oåÚl×¢•rM^E$õܺh<­•2ÖlØœkU ÂÚ‰_î:C’ܸp­lÊÐÐPÖ¨]—ÁÞN”Yòrt¦ñ­ÔF½xta•; mÖ“[‡¿c;ƒÃë±M³ºT*”4u-óLÝßÎu³i+W²Fý–lX£vœûíAHHþòýJzØ[²Bx]¶nR‹V–6ülé6ªIê4jª ¨#ɼdv¯íKi™Z¼o,*=†=›„ÑÚ±4;Dt`iG[–«Ñš·ž%Ñ`00çå}v¨Bk_¶ïІζ– k1€ñéZôºrÿaé'À¯¶Ÿ0¿[Ìõ“¬âéDßòálߪ!­å2žºÂX†lŽíÝŠr '¶‰èÄr¥œèêW§o?! †bväÙ­œœÆÄÄP¯×óý—øÂ†N’ù9YÌÌÎ-‘÷ÆÓ·vg¾Ì+ùÌœ¬L“â‘ZU322Í ¬1åû¾ |JEÖT ƒŽ*‹ËÙh|4…£syr(0Qêµ,PÉ%+3¹ù…¦Îxï{4ðæÎ8!’a~Nl8ãËíFÙ¿/¯6ÊmßꉔÜpôIòùoû骳߄¯Mº`¼Ÿ$S£ÏÓG ¶¹Ðظu9œÜ³]B0Á@ªŸa€ˆæl ž$ÕÖ¼*j´aŠÁØøVÌÇujÑÕÉŠ.xâj¼¹^vÌBÀ‚ߟH’L¸w–!n–ì5s I‡´®D§À:|˜œcìtw~ED\¼ï7êóSYÃÝ’Õºf¦ÁX¯k&ô!,\yæq.U)Wi°û¸¯LJÁám«Ó3¨ $O~=•€œ+]7vÚOn±º¯«DŒ%I®×…€OÝ‹#IF_ÜMg±”c¾ÚO’œ7¼ÅÎåùÛ³d’äí_6R!¶äüÍçI’I/ãóâã☕§æ©ÑÎÙ“ë\§ä±ß°QÃFôñt¢ÈÒ“K6ž2 | 4èò¹aö86®_ƒ®ö6tó¯ÈŸo=.2®ÔšlÙ”>Í €Mza²IÅw-Kˆ,¹ùÄM’ä“Ë»è$‡/ØMêÓX?ÀUZ`†©¹lš;‚¹=w^Ž&õjÆÆÆ066– /_R•ŸÁ)CZÓ§Z+ÞŽI7wȵ×è ¤!—Ã;„ÑÚ7œQIFøñËO Xqû‰;ÆÁŒé~ƒÁ@mZ<ç|ÒŸukW¥­RÆòõ[ñNRQÇ7{h+BêÆ‹’H’NO{H9yÍs^$™ùø"CJÙR'.Yg¬oƒÁÀÈã{Ùµy}†”¢~¶puQç¤Jc·ªn hÚ‹‰¦zØ6g$•Vμ¯&sÒÛÁ’?]dl+ÌçØîµèàל ™dAV:Ÿ?{ÎØØ8¦¤e2%êWVõpdÿñ+™§ÒSk2îÌxÊ&•¼ XpÌtc›5䯱–Ÿ-ê÷d¦©{Ü4k(•Þ¼œ §6å6}íÁÖƒPK’º,NPŸJ—J¼™ %™Æ¡> o?œYãDðë©}háX—jÓDiͤ”¬Öª/ï'•pã”^„Ôž{¯=3äÇèïbÉ󌃣uûPléÎ=¿Óoü¼‘6bǯ>`<ßíÉÅôrTÒ¡,¿ÛwÑ4ZMeYºrÆç˜ä:«'!³çÍtòþîùÀåŒýYÆó[¬îcÍ&¦ÁA«ùK ¼ø¯^rU(Ðf&bʈި׸š6¬‡>ç"UeÜ{1Ò‘i{æêþõ¨U¥6¹ó±~þÔkØíÛ¶F½Æ-±ýØeH H$ï¯^.—ãÒÞ•hÑyî½TC.—#ùé tjÑ«vŸB.‡B!úå³Ð·÷0|Ô= ¶Ÿ€B¡€T*‡B.ÅšÙ#ÑéãÙ*È~q º¶FÓ­P¯vŒŸ¿H IÍÄy{Þ2¹€Ç‡Gx[ôjV©™¹ïU¶b‰€—NžBå¶}ñQËp@™°Q ·®ŸF¦ÊŠT6ýå+”.WSÇ~ H¬Ñ¬Y äåäCM:4z5jlÜË–Û£NõrШ_A­ ’ÂÊÊå*Ö@ß®­`ePCk(’{J²ú@¯zAÏò ä‰Ì<yɈ¼!“¦#ÈÕРÛhôi[gŽ]Äã¨+xïˆc>‡$1mªZäáܯ¿";KÀÚÍ0泑ƇÉìÑ´v5è³2g®_ƒ>ø´m5€]Ùʘ6êÄ^:Šd•±í?Æå½uZ#ÐQ‰¬ô @jnœüÃæë ¨Ô¨1­äHNϸy”Bix•ò„-1aÒ—èGàüµkF½6uSH`eï‚ÐêÍЫK ˆµ9Й·´ÈÑŠÑuÌLÔ t7j ;2ÓŒ:!S(ä⣡Ÿ!´I7t®í‡Ôœ‚¢2)pñ*‹ö=¡Ne/ddåÛÐ"#=UÂëÀÝ´ ߸qXˆ3‘¯1:R 2ÔjÐÚtîÃõj†!+#¹z@ië€2¾eàííG;¬œ3ª²Í±fñ(X*Š•5nä0ˆÊÔÃ൑–aÔ5]v ,¼B1fâ°3õó­š5†•* "©Ïo_Cb¦&ñ©qÏXb‹Ã?ƒ85ñ/ÓˆñJ£C…Ía+3n5¬WZUrLç>äR)"÷¯Àúc1bìHP• ÂOM%z úá¾€ÒU›#ÈÏ)éFÙŸüí>vŠNaÆôª­£SËj8{ì´dr9˜‹!c E÷Áhh‹ÌãsŸ];O‰õ»v ”5 Ö}¦oÕ_O¢´p?:ÍÚ ÀˆöÆþ̾LeT«ä‹ääìÂêÿÝ=x™\‘6£{wÀ÷Wr1Ù,Ø<Ãô©SÑ#8¹u.¬”bH•Öp—·÷­EóNÃÖeº¶j„£›f`øœ-˜¶t%jz)°iñ ômÕîw#Ñ4ÔëC?¹‰àho‰{7ã\¿áíŽèk'±ïø)¤;WǨ.€¼8l^¶•N…âñ>,[²÷lG©ª´X¶ôkÔûâ'HuIèÔ´5âlª`æôiH¾}Sf} µØ+'õ†Œèô|/†U"v/ùûïIpÿÎz|Ù½&ÒÔÚ÷+[±ÐåàI¼ þUK™Ñè ’JT©²÷&!=°·•0@£Õ§z <× V–2Ü¿qwïÞšå»Ñ·Ïgð²2aèÞ³–M ù˜á@ê,ýá6úŒš/) ÕH1xôt ù3öîŸiWL«ÕbМ•,‘£ 3W®]Ç•3ûq/Y‰[’|ˆ$@nvñO7j¡Uêœäj ‹ôÈ-(ꀑ§$<{ÿaøõ—½Y·¯]Àí›7±lÛ)´="½jUtÅ©Z¥†F“‹»/²1rö&|d!;5—»…3û·!Æ£fwo0ðcœ8#&/Gû†Á8üÝWp «ƒ!=ê4@­ÑB"•C*aêG½£Å©i½ ÖhШÃ4ê0@Îì=ƒì|•éà’:‘}ÆLAOÎáØ/¿ ÀtXŠr)^EÆ ©°þäuØÆìÂáß®C,€P©ÕÓ–mƒTi‰¬”8\¾~'woF’_ôìÖÌtêØðÅP\LóƃÃk0®Y%³Üµ5ÊÕk5õZ>¿w3sL£ = wÅÇ'aìòõXêk‹ î2¬š·ÕÛŽCÍ2Jø¢gCl™9 κq°ÖÄaÑÆCølÚLø;z:ƒ ¹ ¿n_€¹?ÜÀ¡ÛOa@­1@!—áÌæ™Øp"7îÀ®1mpÝtØTâ‚ýŽ@am…çoãÆíH|÷Í*÷Ž g$•šâð±PTp-:xáèÏ ½;Ü­Xaü€NX²y6V¹iQÖI‹•‹× Ëðþ¨QÎ({mJúšƒÁË¢¹ç3<³¤€ #–¬ƒX¢@nÚK\»~ïÂó\¬ÔЦ"+/^åLõ`€L&F€giÜ»÷ùìÌ9éÍpxÉçèQ½&4¦z{ý®þepïÈzlU€¹é¸põ n^ú§îåዯ{Ÿ÷Ÿ9û ¼‘×þÛOFcë¥GèPÍ82­âe‰º]¿À•9£áìä E ¾ßüæŽý=¦®Ãº9Càö-¤n¨[·šVrAËv-±~ÅzØ)øÒ;M BƒŽh[cNž¾Œ‘Âq3ò!|lQðòRH¢®à™Ê+G~ ÿXl©? §®Ñubd tF¥ŠAørÃBÌH‰H•„§É[ÖÛôLÔj5 2³²! §õz=¬ml ðâñÌü9.Ý{ ïÐz(íj (­Q+¼2VÍþ­j–GÃü°r&ˆš]sQƯj{i0eÂxTÞ½žVÌš8‘ijåOÖÖ2±sãR¬ùþr ÖèoœE´¨ßK¶LÃäÅ0ó“x|åænÜ­ÒÓò r€Ø—0mìÜy˜¯}PÖÇ4û ª7¥뾞ËÇJáþíÛ¨Óg J¹Øç“¤b®ìÇò/aú®K°ZÓéïB¹0+Ò83æôÔŒl 6ÛUãjPF†J=¦¢]Xvœ}H¤PjÅæö[XÇJd½B`åp”÷qÀœ ãP3p+üí´XüÅDÜ|ò åZ¾D"DÀŽ• ðÈàƒ-ã tú÷ë„#" ¦:Ó'<õ$"kÈm`Ðj_;['ô:¨õ:( ddçA$’˜[–^OØØ;ž\>)c&à^ôKø5„2¥ŒuúôÒNLùú46¿K9Órl:-/µÚ¸º ÔzH$b“Œ A‚ŠÕªBŸ< gÌ€·“·ï=ÅÈ#a)K„…V¼µ³1sf:ù©xüJ…å  52¹ ÈMÂŒ9_¢~¿Ñh[Ñ ¹ Ù1×0tâL[uþ.ˆ{™i9™ù°¥½àüám¿`^eäaÀŒ‘° uõE“¾æAò·K¿ÀG3¿Åðé›PÍÏÊh3B+#+v5æÍŸ™÷ŸÄabß@ØÉŒœ¶ÆÕÆç÷°tÖd¿¯ò ð1Vükþ…§äàqÜKXØÙcË¢QèÔ±=:tî‚éköA'ãî£Dعx!3ò8>û)žh­Ð¢MCóiÑÎC& u°ÝW@­ú1dÜBTïØáÞÐëuïÝÀk5:@á‚&ukãÑí+P«3pûQ"†ŽÿÞ’t\½››7¯Á%°B\Ep¬Ôae”عÿ$ààþƒ(×°=Ü•Ào_ÂZIŒÜíÛ¶A§®Ýñãé;ÈÓ©pÿYúûYf”ˠΎŰ~ÃQµý8 häÒA‘ƒî/W‘’ÃAc篥qÉgR­†|£1È¥“GŠcç®ÅÍ[·0TGÌúôc\xšŒè+?aÔ´õ2} N<“'Oah?Œ6磒ÌÀÛ TÔùºTÇ®_.àÚ¹#ðÕ>AŸÞã³ÄŒ¹+ÑÞèÝ¡9êÖk„õGo#´j5hs5prõÄâ[`•t -ÖEÃfíp=Aƒê•ËÂʲÈH¯UbÒ’-¸{7ÓÔÅäÁ}pâNš š€Åãûcݬ¡¨S§LX wÿ (ë&‡£ƒµù÷ÞUZâØù8ælžÁàQK Q«0îãþ¸#.‹£¿œÂ‰ãÇñó«µ{5†O_m:Qm|÷íëVBQ®)ú·¯€øO¿†.ë§|Š ¹ظz< We€H¨€èAHÅ%]¢ j5T¹P:¹aÑ—kQ*ç6Z5®[ãÌ£,TªXb©iZ"….-¿ß‡V½†¡‚‹:æ½{Øêa€€Ì¤¯Æ1ü³>ñ’¢¹VÙêíqüâ œ=¹’{1|Âjäd%áÓ!ãÑ|Àl´«è ¨b‘Ô›(óµ¼eH»…=‡À³îœ¼pÇOžÁÚÙ#±~þgØzú^EÄà ‹Ðuüœ?u§ÏƘŽU1¶/»“™\1€ ?ïÀÙh>ñ‘±ÞDè ^aôà!ð¨9㺇Ð@1h0¹ƒN zt2‘·ocÛò‰Ø½h|wªhK,ú º5ªŽ!S¿Æg ¾ÃêYƒ tï,‡ò]?Ù3'qòÔi,×+'~‚=×ãÊî•Øv3ß|ó¥Ñ˜æh!Ó «°&¼Ê×Ǿ“—pùô!8gDbÀ°ÈUË`)A$‘˜$gr.ÐÃÂÚqÏ#ñɘ¥E¥š-` 2'ôéÖó~ùÏâàÚƒDt]ÔPP †ÒÖ-Û´‚6'*.nâà‚Êeí`Ðýõ‰H„'7Nàtäs*Ï¡k—«ÈÏÉAªÈ{¾B]Ö.{ÑÛ|œÿë^z€Ä.Ö¼Ô©MÛÆF—¥B¥E¡k’€7Ïþ„WÓ1vÌ0ØÙ+`go‡qó`÷ª8~îªe]‚¼t8æÎ'ãÎ3–,š‹_*·GTt ê»ÿþy ™ W-¼tcôk_–Vptn†Y>B‹‰;pýY…aï…8sòâ³Ehß±–}Ú G’ÅÐ(W³ ®GÞÄÑ“`°ò@ûèÖ œÜ¼ðèÚ)ì;…O'|;;%ììì1kÉ"lßZ§ÎüŠf;cüâïжçG¸ùU´‚:ò'ôž¸V:l]4vµ;¢C½Š°´²Aõ†í1é“>ûÍqDÇ´Â…+/0tÁ4¯YЬû'øôÔ>l¸|*–bÔ©÷±ëè5´´nr@¯Õüçk5ªTü´ó8ô{ŒíÕ Zu>ÒRÓ`›ŽÍ»cË· äcƒÇú’uœ K ò´„WÍV¸pã6Nœ:ƒ™3:4­Š¾Z @ja~Ìõ ¿àN¢£"Z÷y ï?„†­¥lùÈ65 ©€>Ù ñ°õ·4¶1©) U« ç撚ª^aÙÌ(×¶Z× †¥• j5éŒqÿ‚E.âÌq)nļDÙÛÑ¥ËQäeg#ÍÒ Ç7MÇ ü,¬™1Ôá÷ZéË;Wñø•[ö,Få²ö€§}…ß@ô½ßp%>*y/žc«pÅÒ¯cOåf¸~ç9ZV,@C»~B©MÑ4Ì€R‰/\ÀÑËwàâ‚n];"?7i9bœÛŠžSì1¡[œ;xíFŒGY';ØØÙ¡Ï§s±Û.œ;vÓ5ÁÝŸ·¡M×~°ªÜG/ìDóð@sÙܽ…')Vøzþ<{gôc.Á‘S¿âÊÅË_9Žü¬t,Ýzµ ™™p0äc@Dk,_9 ÉïBçŽ-«ÂÒÊ N.­0mttûê^¤ …“=ò3 W‡Œ&1!=Jë üvî0nÅ¿‚å±uˆ¸¸yY™P;¸`ãì0ˆ¿A}{{À¾4Ö®i.¯GÅ:¨`‹uïÛ†—* íÙJ KØ;ÖÅü£Q¥ç,\y”‚.ažÿ£3x—àBÊú@—ÿZ1ôã¡ølÌôn„C?l…†P{ßjܧæ5Vñ—0ꋯ«ÆöÁè»Ð¨MÌýr .ß:_›|Ô8+Mx§Ïã …ñïR¬ÏÃÖU 1gõ¶×oÝŽB¾XŒrá-±c÷O9´;Ú¶ë„ÞÝ:ÀB[ß* Ñ¡Quˆõzè ¿ßN-ííäâÑ£ûækº”{xž’™… \ì-QýQŠôñQÔ}¤æ©amk¬¨Ó¢ñË¥§hÒ¸lÅ€^«…No€U©ÊØüãNL7-[E WïpUŽ¥+¢OÇF`Â-Lž>;O\7ç­y…¨øtx…V†>'C>ú 5-AÔ¥£%Œ;ØZÛ@¢KǃûÏÌײž=Blr rŒ˜»–/@Û֭еg/Ô®â•Ø}¡¬§6}¹Óæ¯+1¼yç”2¼<<àê„‹‡B²HCzŽ]ú¶~ި߬~øi+ô툎º {û¦¨òQ¹~kÔ­ä_¿`ØdÇàà鋿¼Ÿ_=…sωðÐ ¸th >°™ÅŸ}û$rÜí-þzEý+Ýätz©Mç¨Öµ(µpã”˸ñ›e,ïeG‡àVÌVé¹u^?*ý0Îäe±oùçF·‚gypõh`—á_pûö­üâ³þ´´óàÌ 'þ´¿ë˾ÐÕí멃€ý§o0¹)í¢`隘ª3ú•ªM.u‹Æô0úé.Ünri!ó^>`?wº–­Ê/¿ÞȯL¥µ¬Ñi su¤A¯ýËÝä XèõW„Í=-ØmÜ7ƺWü)—ÄÿÄÞ@2æÖqúY!õÛsý¦o9°U8aáÄ­'£Œ.Vk'pàÉéÔf¿`«Jn´ñ©ÌE«¿åšÅÓänE¯íŸ¯f^ÂMÖð±c©à\²f¿š;…^Öb†·̸L-õ&“ä½ã©„;8ÿÜ,‰³ß/¦¬ßy·l߯ñƒÚS$’ð£9ßÝaf%öút ·l\ÃÚANt iÂ'©F·¸O»Ö&`ˉs—sõŠtVˆX/b $U wYË×…N¾•¹|íf.[0žÖR†ÔëÌT™õ å oõvܰy ‡õjAÀ‚ݯö¬šBŒ4š;~øžƒºÝѦm:J’Ü0û#Rö:Û·mbï65Øñë]—Ìï·vÒ¶¼ŸûÖöD’†ŒGô³¶ç iß—pû*L~q'lÄÜpêŽÉUTóFÿ±afÊ›±0%úêaú(ÀÐFܰé[ökV…°táŒ>þ“º7 áçs—pÃÊEôu”°Z›áLWÓäzšÍVAî¬Ð´É­êÝ]fßÕM®ÐvϪ)ì>j*7~½‚U½-é^¹%£St$õÔ¾ý›ñ¥ÊØ'Êíĺ)´vqã¥Ùæv·céx`·¡ã¹cÇ6öëØ˜€ˆ37zK¯œÅ¶à°…»Lî£Ævª5ùÙwwgÍÞcÌwë R8¼u5ŠŽ7{ ¿[·’uÜhíÊßb hÈ|ÌÚÁî´ó¬È…+×rõ’é,e§``ŒI3vÎ1¿n#NÞhtµTûÍ[<¶zWpc³~3M.zÉÒ¦¡pâô+¸iírVò¢­g(ï%çñ—o§‡ŒŸÎsgqܸq;z??—OS´ÔæÄ±WóʔٖáÔù˸aõbVñw£S™z¼òƳOm™BQ©ÊŒ5¹jY?ƒ–°iÏO¹uûV~Ö·!–sÔ£›\Ô©mt´°F«þ\óÍ*¶­_+?»þô-b¿Ï ¸d×u“wg kOHùùÌ¥\¿r1ƒô¯ÁtùâÜV:+ÀÊ-úpóöœ6ª'¥#Æ,¦úm±þËnr’™3gN ø7ƒdggÃÒÒRéwáÒôȭѬm[ 'g.^Æý{áÖ?ìø¶2$ƾ€Né†ÖÍÀB,Bpx8 ñQ¸Ÿ&Ƙ©3æ.Â…³yï^$`Øç30f@k@¯}gW2‘H„ÜÜ\ÈårãA¢?“ ‹%p°Wàyl&úè‹/WØXZ"3áêF @˰ è´èõzH¥RÈs^àÇ‘˜.2ûRhÚ¸ä0ÀÙ+j„âîõK¸vý&rDΘ¾t5ú4«Î€F­;Â^ªÆ©3gqïÑ”oÐk×̇‡µ:½"]î=ŠEù°&hR+:á·êÄb1rss!“É T*ÿ„¾@Š^.¸xî"ï>€sPC¬þz*ùØÂ`Ðàáƒ;Ú–F§M `0b±9éÉÈ¥ Z·n ;…:½•j5D9w+\¾p×oÜF¶Þ“®Äç}ZC¯ÕB£ÓA¯×ë%/ O^$£\õ†¨ìe,·‰ÅQØg1(Zõª…@¯ÕB¢°Eó–í ÏKÂ…KWp7ê!¬}«ãëõP+À "¥#Ú¶l‚ÔØ{¸rí:¢=C•†]°qÝ—(ãbƒÁ€Ì¤$eæ¢C·ðs³…Á`0ö!Åêœ"1D(Àó§/àRõƒ!’Y£I«æ¥àôù ¸ÿ!\«aõ†õóuAôÃû(Ø€Ù)xŸˆŒŒ ¤§$"%O†ÂÃÅÍ[¶³_à×K×ðàa4<ƒêà›u_#<È Zµ :½z½b±I/ã –Ø¡q½F°‘auQÙÏ7.ÇÍ›‘HÌ—bØ”…˜2²;DZ-\ý« vyoD^»ˆû÷AkéE+¿F»:ÁÐj5Г»*#1‰Ù¨\· Êù8Á ‘£~³6°Õ¥àô™³¸û õ#°ñ›¯PÊZ »ÒQ?¬,î_½ˆk¿Ýij¤<ô5K§~+‘íïçE"ôz= `gg÷GB2kD$³ØüKU6'''(Š?Õi—ˆóKô™—ªT*•9ƱF­‚€T¡4îeA­^bŽ#®Óé!5ª*Œaü®1§Åb1’’’`ee[[[èõú?»êQ"¾°J¥‚D&‡ÌtjÕËæw›Ü§1Ž&•Æå“›aaÐC­Õ–ˆNƒIÌ>³6ž¶L&CRRÄb1\]]K† ý“ቡ4Å«~—¸ÞR©©©©Ðétpww‡îÏœ% KĜ֨՛dT_¾Pî½­Á¬[z­K!-ŒÏ­R•x—×e\<¾·1Ü©R ^‹Í­DaøëâeôP©´ÅtÐéõšö“Õj•Iï•fc 7”Ô{ˆŠê_§ÕbY‰²®Ói!•ÊL q¿¥r% Æ«U(”òÂS{Piõ%âØët:H¥Ò¿G1ýÔk5Ðê oÔµ1®¸1ÜìÛô¡DLt“ÜÞ–GásŒûÐF?ùUÇ%äF£7ŽY.XLvÆz~÷˜Þ‰‰‰‰°´´„½½ýŸÒW’Åbã Ñè̇:PÝØ¿÷àIB¦4n•Ê@É8ç*5¦ß~¿@TL_‹O D½°dìu•éÛ`ñxìèt€Ô¤@¯—•= "I±˜ëF}.ŠoÔÿ·÷ ,‘—Je õjÎ[¯ƒÖÈeRsÞ2…òw÷Š:ñº ù ®ÚtKT¬N u¿PŸŠB£Ö@^Ÿ:¨ÔºqðõzƒÙû@kú>Jq¹Ýk€J¥)ÑŽ z-tz1ärI‘¾Ë[£VC¦P˜«Tê?Õ¿ŠÅb¨Õj¤¥¥ÁÛÛ»„×Ïï󗲉Œ• ‰!‘H Z­“à4Mág- zSƒ5PµN‰T±D½^gž}ü_™‰DШ5‹EF‘ƒ¸ÄÇnØŽI3çáBd –ÿ°€qÄfúÈ€Z­†Hl’ õÐju0~oGôw½D )Xß9D"€z¨Õzˆ%RÈŠ7ê\«Ñåm0é–X ©T 1 ­F ƒ© ݹÄ&ƒzhµzsz‰‘±Nƒ`ñ­WC­7¼‘)äo”E¯QC¤R Ä"tZ­i†+ú·z/» "åNsÙLe—H K¡×éÌîX"‘z­ñÙ© ¥ìt­Z ˜Ò%b±yR¼íhL'Ï‹—éu= ¦•Ž7ï)Ò{h0ünÆßµñ7êøµ²¿!7Qn…u&2•½Hgÿ¾~@¯.Ô)d2Ù:ðzÿVø;F}¡Ñ0%è4jèÌu*‡^§5½¦¯…± À×än’G¡|Ìif}AbŠ}ñV}‹!5÷G¦¶bJ7è´Ðþ‹º.|Pá{~aJ¥RȤ„V«1Ö)D&QÉ•T‘"…ÕnÖ ©Ñ»ÅØ– oœÅ*”­Ñ~ê¨j]a;~³­À ƒZ­ƒD"X,~3½¸Ü :h´†r/”«T*ƒLVìÝŠå-–H SÈÞ8(yýë{ûØ i€î-‡µH¾±¼Vò¡×é Ç‡M Z|õ¾äûI¤°vÄÒõË0¤]Ñ!^ÿÎða}`‡üûËcÐë y‹+$É7¶Th0@[ØáÿÎ Ô¿_u"~ïµõz~‘‡ÿrÖ÷{zÿ‡Ë®× þγõ:~ßcô_·¾Åõð÷îû×rã;ýþ÷êøÉü úNûû2þ½Õ²wªÓßïoþˆ|Èß/«Y7ß7û¼?ó|Ò­Vó‡Ú4Þj Ði èÙüÓíæm†w‘;É·¾[ñv¬Ñ¿+&…À_‚Z­Fh£ÎØÓ¨³i5HcÜ?>‡+ øÿ]ŒË¤c¼ÓLI0î‚ÿGðû˾%bA‚ ¼€€€€€€€`àþ+ü©Cv‰Ä|âû4¸X,†H$* €ò¿>J3½Ï‡ðN…úa ¨!ùÀü•Þ®¯…íFÐW¹Ÿÿ³}ûŸ2ð¹¹¹Ðh4ÿó 0¦¯J¥‚X,þS¡w?ÈQšT NgŽ«­{ŸšýWfa”©œœœ?X@à}wšz½jµZÐWÞniþEP¬w6ð…3ö¼¼ht:`0þÐrýÿëCvÿ´ý¶å}„}L¡íüýˆ…F ðψ nrÿßgð‚ ¼€€€€€€€`à/ xÁÀ ^@@@@@@à/F*ˆ@†<¬_¸>…\&ƒ^£‚Ff/æ,Fh)»÷^œ7Ïbî’•xžš+{W 5õ+½õÞ”Çw°ìË5HÒé ¹©ð­Ö ¿‡W`ú²í°³³‡H$‚„££´Z%z…êåÜ J|ŒÙóæãÚÃxÈ•ÖhÑŸîlÎÿåÃK˜·ð+DÇg@ií‚nƒF¡oûÚæôûç`Ѫ KGO =ík…šÓþa-6m߇l•eCñùÔé¨ìã`L,HÅ‚Ùspú·ûKe¨Ñ¼;¦ðF£Ìyz#ælÄÄEß ÔÍÂ|ýîÙCX¸z#’3raíâƒác§¢Eõ²æô‹G¾ÇªµÛ‘š«…“§>™4 õC½Íé‘'÷`áêMHÎÑÀÉßLžŽå Ó Øºb.¶ÿ|zŠ\­¦L› +ÓœÀƒU³gáЯ·A‘áM;cê„aiúu~òcÌž9×£ã RÚ¢cŸ0²gó³Ÿ]?…yKVãEZ.¬Ý0è³Ih_§Hn‰.bÆüexò2–ö¥0bü´®Uîƒl>Çw¬ÅÚï÷![m€WPL˜>!nVo½77å1æÍY€ëQqHhÒm Æ î ó§Cò1{Ú œ»ý„: …Ïz·2ÿþয°þÇŸQ1|ª`â´é(çQô¬Œg·1eÆ|D%¤@ní‚ac¦ ¢QeSªß~9?þr zƒ¡5š`ê´ pQ¾ùá’?oÆœg°tãzø;)ßHß±|=wÂú“aS˜{ÚsL›2 ¿E¿€Hi‹ÞCÆ``DCóo¾_½ÛŸ†^øU®©S§Â«°{Q¥béì™8ùÛCÄJÔnÙSÇô/Öôؾb~8z=\£)¾˜:åÄÞǬù‹ù$rK[´ê:ŸômWÔ§Ü=‹ù‹WâYR,mÝÐkÈhto@ fàÜÍX8Ùå(‘+a%ÃÍ·&|Ú°sÃlßs *½þ•êcÒ”‰(í 3fžˆ9sæáüíGKä¨Û¶7¦~Ò ÄGÕIfóß ÓéCFà qqqÌÎÎþǼObb"SRRÞé·yqWYÖÍ‚uÛtáèÏFqÈàì3xo½H§ü^½zÅ—/_¾Óo“_eˆ½ˆÞëpÙÊåì\7°*Å=—cßzÿϧÓÂÒŠƒF|ÂOF g¿žÝ8iþ ’ä½Ó?²eÓfìÞ£»wïÎGfý`/J½žLê2ا¦/mÜý9wé ~6¸ Ç.ý‘$™{!žv,ЀKW¬dïU ±‚Ëw]$I>9·ƒ^¶b–«Áå«–³MÍJ,|øóµ$ɽ«gQ °]Ÿá\õÕ+¸° æÝ„‚7Þãñ™)è×t ³L×4éql[µ­¼+rÑòÕÚ½)pÑWI’ËGõi踩\G?'+ú†6ã—+V°k£ „Ü–ëÝ#©ç‚IÃÙ¤y[öèу½ú à°}(XµÕX’äw‹GsÀ'S¸xÎD–²CšôfІ¤ö{Ö  Ò±g.^Æñ#{‡ÌØò—èªF£aLL u:ݹ=û/7ð/ŸE369Õü¿6/‡=b¾H©’_&òîõÛ|üä µ¯ÿ>îF=3ÿÿ,ê&÷ïÛÏ_»÷7xãcc˜] aFR,ØÏ“ç.óMÉhxíâ:|˜¯Ý¦¾ðj^6?M I&<¼Á½{÷óêÝ'«¿{xƒËU17Öÿ”ÿÄÀ¯ÿ¢E®¼—fR`]ë”¶c˾“ßzÿ¢Û°í ©,óœ¬[¶',ßC’¼øã\bh¾evŸ¦,A’üfTBîͨW…©*voÄòõ’$7î@÷ p™†LÖõQràÂïI’=šV`hûqEüÓ´ÛsוL¾º¾•b©œ[Ï<4§o›7˜2Þx¥%™Ï¡-kÒÁÕ™6ÖV ­×‚wRòM*¨â€&ôªÕµHïòcYÛׂM†.$I~Ñ¿ªv-6Š‹¢»… '¬@“ÀêžVlûÑ’䬞õèÔœE]XÛÔ¯ÀÉù° ¼6ƒkx±|»áæK±¿þ@K€Ëvžãö‡g¿#äNÜ[Lßf nJ÷àn$ÉË[g°å¥˜¢ÞdÎGMØæóÕ¤6ŸÕmÀð^_µ³ë{©´²ã†³ÆÑ—Ÿ´¢Ä%ŒÅߤ}ÕPÎÙ|’êì§´øÑ¼Ìi—~ZB‘LÉ-ž•èß>ïÞ€öŽ ¯Ýš^ª^3±lVÉŸvNlѼÑ@“ܵôcBQšŠu©ÃZÕã'ó¿§:ã1}íD¶h‡9íþ‰´²sçí—Œ½´“2(¸él´9ýûÃ(·óãõ$=©‰eEoKv÷•9ýôÖÙTˆíy;)·-& 籨 súøµY¹A?’ä’ )±-Ççæ.‡íªû2¬ùps¿\œ_VOd¿pF%«©I}Do ØeLÑÀûî©õ”Â’~Kâ³së)QXq÷•çE}ØÔ^TºòF|Îßnàÿò=ø-_~†*"]gZÎÚ½AU±íø=Ó’T,zwï€É3ç¡SËÆXüïÅÖ&Ÿ¡]ÝJXrà`í„A¯×óÎC‡ÆÕ1l:rßûš‡ ¦Œ@ÝÚõШE{̘·;7G¥zq+>Û¸LsÝUG›n±téthRͺ‚W:€Я}4nÞ]zÄÂùÓѨfUŒZ´ýo[Åyð(J;\>{֮őӿý]{¸yù.š¶ì„òަO!JÜУc]<q™†×ï×ãI’v8~x/ÖmÜŠ›^þÞZ†vl,ÿ¶XôY'€g0¾X¸Í«¹›ïJËʃ•“Qý4èÝo$Ê™¿À«@…ÐP䥧œ\]mÒóMOx‡,­ÎÆuG{G[d¤¡ðóñq/+k¸zX úêuøVBë†Aæg÷è× ú\½ü€æ-ÆO?íÇ׳†A›“µÖ”“:/=CD¯þØÂ½z´ÄÍKwNÐçdše–ðj© n~¥·¯?F·î½aÚ,€Äµ*º¶*;î 39 Õ×ÅGý:™ËVµJ¸Y*ƒÉwnA¬ð@¯ÎÌé­;t—C&îD%á~tœ+¶F‡:>æôÎ=º!÷ñSĦæâîÇhѦ mM‹˜2OôèXñI/•†s1~Á\ 7¿üò î<ÎÁásw0póji^õò1ž?ËDß>}Ì×¼k·DÓ*θ~ïþ÷[ÚÙÃÚB„ÄøÔ¢- ”L8—)e\>p m>™Z¥¥8wê8Î_¹ƒ/6œÄá¥#}:ˆÅã‡éjf $r x¸ÛÈÃÁcw0iÑbØiÒpâèQܸÿnÜÅÔMöø*Ö­‹A}Šê¬fµªpVꑚ•o¾öÓâÑ8ðÒ?®›YÖKèK¾ÃÄþ°ªÞ‹çŽ@âË$Óº{vÀɳhS€3¿Åå›QøæÈy¬šÜ Ï~=Ø ]»E˜ó iªž¸}æ&%>†Ì·º40§Gtêuž¥¥#?æ²s•èÓ£›9½a³-mÀ©ËwáèS S—~åìÍéé9°¶w4n‹è]0`Àp”1 Ø僃‘—‘Š×»”ćÑ}ÌrLüú;”s•#;)^þu0l@Q[ ¯G™yyÙˆ¾seCÃТFsz¯þ½ ÍÏAä—ÿü%úk{–ÓJnÏ£ŒÃ§E#ÛGÌÚh\î9¹•Î¥yùi GwªÊ ­F˜GU—w/¥…•'ç‘7÷,¦…ԉ߹ežÛÉRvJŽ^¼ã=Ïà 8ªo6œ±v³óU|pù$ ë8š$¹ o]n¼ö$É8û9ô Åbgî‹Ì&5ÏX£”ʆóçË÷©ÊKãÒáíhåáÏ[ɪ¿e?ë «U‡ujÕ ¥Bº]Æ3)ï}Ïàsرjv:·ÄÕ]+?£WXƽ¶ZhÈy†UKÓÒÑ 7dxhYÊ,ì9qÕ¡7r¾¸}>EžŠ~ËLMûŠ_Îþœ-ê…ÓÒ«÷Ü1NÙ z=YlõòÕ£s,m%c÷ÑkÌ3Ë.Í«±tH Ž1’ÕƒJ±bý!Ì5)pvô9Ö(åÈj"8räÇôq±eß)_’$¯nŸF™•#¹_TžK;S&Rò«í§K/öÜVñJœi¾¤Ïf×Z¬ÐaL‰£ÍBèÚ†$©zÁVÁî ¬Öœ#FŽd¹RŽl>ȸäHu«¹ypìÂm%WCÆvd`ÓÁTéß\^^ðq+Jl¯6ðêÎetuáÝ$µ9]•xƒ*ñ»£7¹cfoµhžÝ‘佣߲œg¯D=á ÆµÙsäÂùïør8˵ÆÇ"Ùµye¶ëÚ•á«°r•Jt´°eÏ1 Jä÷!Ìà“¯µ;׸R\™8¸Su6ÿxÑ[óí¤>t°õä a#عU]:ûð²IŽGÔfývíÙ¤VmV¨\…¥ìlY¡~W>J.ÙOýúó6öëÑ–îvJ·Ô¤ŠذJ8ÛvîÊ:5*²r•*´·µf›þS˜žGô: %ëuFÿÆ”;3Ò´õóêÁqÚ‰<ô ‡Y·ö0Èß7ã‹ú¤³ßN§ÔΟiZòȺÑô­ÛÓ´‚”ÆNõë²Ië6ª]•+U¡«“kµÂä<2ûÙYºZ‹8}KѪFFÔ)–¶±à+÷òúé­TJxü^Ñ–à…ï¿¢¥ÜŠ[.?fÜÕCô´ñåÉ;Åúu,›Ö á°…»Ší$pá´ÏØ´vZûVãÑh£ÍÑëJÎÓã#ÒC!ã€/6¿¾‰Âna>¬ØîÓ¢>Æ` þµÉòW£;SlÀ‡©Þüi:åöž<ÿ´¨³<½e6¥bk®ÝsùŸ?ƒoÞîRœ=s pûEêUFL¤q–xãÒ X„¡¦_i|Ô« ž\<ŒßâÓývìEh«¾ð·V¯ÚŠ*m{¢Y¸¢EÃ=´ºÖöÅŽmß"Uó~E™¹¨Õ}f~Ü 6 ×lï–Odzûqéy&:~¶‘Ñw^Ö£!!=NNé P‡Ìl)ÆÌ\ŒÖ5C °tÄ€‘ÃJ!A\Bæß0ÄÓA!µD×!ã°çàQ\¼tû7ÍÆÅÝK°xÓž÷^™HƒAWâšÜÊb‘¢×¾”Xž oï |1o%~9y—~½€É=«cѸ!8q¿ØèY•‰ùóW ~ÿÏÐ8à-‡u:¨ór ‚–†<ܼp:"±…'eNïúÁUCØK¦<¹‰„äLH$2de¦C¬´Bvò=\¹óÔ¸2yiZ@.×#ýU,2Dݾ¨¤Th3Õl еM3lÛs[¿Y€¾cçA¢°ƒ%§M©Ù€XQᩱ ôûw|…î£çáÈáƒø´WKì8…R®vPˆ¹ Ù:(- ÈLO‡R!GÌÃG¸“ˆ­!‰ Ó—”³ÌÒ bqÑñ ]ê3 k_“×Å‚µëPJ.BffÄd‰ßË-­ UX@ B 1¨Õ•˜ÙXÉ`m%‚˜bÈD€^_òeV¶É•ægà—S·1xÚJœ9u[–Áί&cÆW?¨¼X$†€®Ä»H!UÚ@Ä7–› IGä£È­¥ÈÊÌ‚F'4ù8uæ2ÀÍÑçG@‹A8qê ~9¸ù‘»Ðëã¹ÐÏG£CòËlØYÛàÙ£[x‘®,a¯ÈısçÐmÔBœ9s?nX€_¶ÌÃÄe[ K 2)*鵬ŠY[ÎbÉúõ¨èi ¨_ahßè4c3Ú[#ûÕ+@$†£³Â¸Zðâ*>š¶_ïýŽR %- b¹Ò´‚$‡£§ÎGícpêìúa=Ý€aÓÖÀÆ·ú7®†Ù:âËowbߛЦë@ÄæZµ•ª·F--:·lŽvíÃwë£ïع0ع ÕC"C –Ô¹%¤JKˆE†íX•›­D¥& 7.^…€XRdæŽíø å«·†CXw,˜Ø»DýDîߌý‘é˜>s’ùšH$‚XRØñÇ`T¯æ³|æ-[† '‚jF DšŠN­[`ÇÞŸ±yõL žô%ä–v4ÿüÃÃÂX£f 6­_‹­ŽçÓÜ÷;ƒïÞ¶/ú±ä¨ðÁAZÙùòÀ¥d’¹\fŽéá9‰÷YÝÓ’†-%©gÝÒ¿øûù-ù´š4Ÿƒ9ùÓ7,m+§W%î8uÛ|ßþofÐÝ)„Q)E'f4 ×Y14€[¹Íçôe`óA,^]w|Ë@—ò¼öè95«Á>£JÎp\<ŒåZåÓ‡wX/ЉCæì,‘þyÛª¬Ò¬ÕÐ >ùÁiúÙºòÛC×JÌà?jÆæÃ¿qÿwÓS"sæ‘[Eûµ«>ïN™[y>|žÀ©=ÃÜlD‰ß^1†¶Ž¾¼›¦& %[cÆÓ« ´±ßü4PÍšn¶ì=eM‰{fÜ˜Ž•:™ëâØ÷+éi%¡]™jÜ}á®ù¾Ó{pçÁ3wyçÞmnZð9C|ËqÓ¡KLNMáðÆ¡t¨ÜŒ·ž¾àí×8iX'ÖiÇÓ×î3¿ ‘ýبï¤ÏÞ6¿?åÞµ˜œo<¿2mpW±rXNœ9—-ëÔeß1ëŒRË|Î^­ë²\pk5nÍ9óç°Axºñ‚ñ7³”]ž½—Tl²Çf5ƒ8ò˽&U²o˜1ˆ _ž¼k\Ó¥>æõˆØëÓ™L{Ôé8¢m5ú×íÿÆ90’¼tp\mèàÄÍGJ¶O]l$;7®Å r!¬ß¤ çÎÁ`¿jÜpèî?í;·GÖíó˜¿d+¬]Ë nãvps`ã¦åˆÊ”£Uk“ˆ]iôíпÙ‰ƒ»¶Cì€>­êW¯Ò°3ŽŸ<}{÷âÀÁ#Ø´~¾ÞÞVïyäNR’JÎ&“a°°‚" Sú5Á’ƒÑ˜¶`Žžüçn¶jA‘]Ñt”Ó(ôoð«(H{Œ)“§áAl^ÉýB[Khµà{-5ʺËðìUJ‰«OïFÁÆZ {EÉ»ožÛ‹és¿.yÑÂR¥*MÑhÿÎ}p©PMªy—¸uÝÄÁèññä×zþî†*ÇœfïWÝZTÀ{ƒ¶JÀÊÁ¹d¡ÑŠ pö»9hÙûS´õ%Rž_GçºÅÜ3Õð öÁŠYŸ`ô˜Ï±nß9È­¥˜3mNߌ†“gÊ*s1v`?Œ7§®ÇBžõã&LGJ¦žN–°²/ùÎNÎN HËÉÇã牘½ñ'<º{—¯^Ä‘“× _èssñ<ـタ›¿]Æ¥S?cê€Æxþ4¶Ž®pw±…Bš†çª¢>3ý^Æ$¡bˆ7vÌ‹~cæ–xvÿÁƒá Î@¶FhÑ¡n#üüHã·Ÿáû3à({Íõy$N_ŽB‡o¸©žÝ¼ÍÚFõ¾ðüÅC hUÍœ–•ƒ‡ôÀîS—pëÚ%œ;yc»ÔAJN ÜJ¹þ?q“Ëx̶Uü k'N\¹ß8r<ˆ ™ˆ:bV±iÊc¬ä_–.^¥9lÞ&óÉÎÕ£»ÐÆ­2ï$䘯õiÂ&½>§Yæ2ƒÿ¤oÊíyð’i®Kcßú,]¿cž°‘78pI±ÆsF2žb U÷èçÄoF™Ó£/ý@€ŠMOØóóÕÆz‹¾ÎM›¾gº–¼uôฯ˜¿nzBäÈ#7_g“°@¶ùhÁ›3ª©½ H¹óüÓ=~Ò…° áÃ4òв‘´s á½M±Y¿Þ¸7¯Ïa¿Át®Ô‚OÒŒóJÕˇlèÀZݦ1ûUnM82NC^ùn:Kî¸`òªÉM`‹ ®¬Ôq<_ÆFÑK Öï3ÓÜßE_ú‰NpðÜïH’ ‡7!œƒx'Á¸÷œúü ËX}ü@æÅÑßVÁçüP¢Nuzõz2/;“iiiLIIffNOlžÇ ï@þrëõR«Êã«”&§¤0'+ƒK'ö¢½®|šjì5¶Ï@X8ñø}ã*™:í)k–V°v¿éT«sX××’õûylú¢%2wF呚ØK´8fíólºã:—ïhôÐ%±~9G†¶þÈì5²zB'BYšÏÓ ¸w^V<ôÛ³·ËôA­)v©Æ˜lòÇYèä]O3ùZ;.š_=´Š ëÒüù·’«|Ù wXÁÙš½'¯-Yõ¦ßÆüöEgo;Uè®Âž5¼éÖ‘9®~pnr…|Ñ»>pǯƎûÜ_ýgn~ãÞ™5!Äî<ñ ­èOz »T ¢ÔÆ…º÷`XùÒ”»Uäî‹OÞ¹Q¿«7´½¼Ê°l@¶ïÔ…ÕC¼ëRüöŒÑàÏÚ€‚-ÚE°iÃz ¦›%ëõÍwÎÒUdÃe»‹–<ï\GÈm¹ÿFÒß²Dq÷JÚHÁÒj°[§6´—µ">æ«ý{7ðªŒì]ÛŸbkgFtéB_=+6fäK£%Û²ô#à›É$õ\<Öx@°nóölQ?Œ2©”¿Ú^tçÅEºËÁžszãYêìöo\"…-ÛwíÅ:aå È9wÃ’¶¬ìAXº²i‹¦¬Y=œááá,SÚ›=>1.¿>»¸Ÿ´ób÷Þ=àfG{¯þit[:²c-D ¥ìÙµ” žŒÉÐË><‚ظmV $,œ¸íԛn›M™• +:È“xë$ÃÜ-iëSŽ=ºu¢“¬ÜnÓL†æÊñ­t¶Ð£lEöêÕ…^öR:—mÂkQF—Õ̧7Ø Œ=•n~ìÚ¹†¶èÏ<’·¶Ì!V¨Öˆ ÔaXX8«T eÙ a؈èY¾:;·mI)À¶#f›u-«ØdIæ'²Oë¬ØºS76&`ÉY+ö›”?•ÛÕ `Çv]º±Š¯­œ}øó-£ûÑo§S0¤FSöîÜ’6пé>ze”[ÖóëlTÆž 7_vëÞ•Þöt­ÐŽIyäõog+…5bÃúµÎJ¡!ô¯\“g½ÙoÜØ>‹rXòîï„ÂXüi J[럟²gxiÂÚ…ºucˆ·#-½kðô=cÞWM§`¥ºMÙ¡y=à„U»Í‡ÛæïC@ÆÆ­#X·z0!váŽ#E}äùïWÒ^–¯Ó˜í×5Æ`XºÕhŸ2Ÿ³k­ò”X:2¢{oÖ¨Dˆ-ùå÷'HCë:Rlçɦ-š°f¸±—öñá€q+ÍùoAX–ⵄ’}Þ™ €Uj×eÃzõÎðªåéé_ƒ?_O!YÀ¹ƒZ²Yûά_ɰñàO¢ÿ]ý³^D20#z+z½ñññðôô„L&{§•‚˜Ç7pâÂ#tíÙö¨Sã°ûÐqTnÖå½lKÜ»rT;¬‰´Æ½ó? ÄÓtÙØ¶y+>O€¥;ºô€ ïw‹´;;;ØØØüYçôéØ òJ}ðIs_ì=tK7´éÒÕC¼ŒÎ^ùYØ÷ÓNÜ ¹“úõéŠØ›'pæQ&úwk‹È‹—Pºz„x”2“ãðùÛhÒ²IIIH$pqqy·èq÷~ÅON -GÿŠ51 Wûws˜šš ­V wÜ7ÈÀ¶-[qïY<üѳo?”v6®Ç<ºŽ£g mD¼]uwîðœ½öz‰ušu@‹ÚŠ$e&âàá#ð¯Õ•˾¥<ú<ìÞ¾7£žBae‡F-Û£~xy8uôâRr¡)ȃA$‚@~^¼‚k¡k«ZÆ%ºØGøqÏ~ĦfÁÖÅ{ö…±(fO"žŸO##W /ÿPôí×6Å{êà8sõDJ{´îÔµÊ{½­ïÙœ½ñÍÛG”ئÈ{‹ÍÛv .%¥ªà£ÝaYlÓ-éémü°çg¤dæÁÕ˽úô‡›­¤HÌ©±ønË÷xž”ϲ•Ño@o8*˜ÈøõÆè¤äçi!‹ ×i¡KÑ®KOøºÛÜõ3‡qàøèŨתZÕ­XÂåñç7ãÆƒXÚ¢UçÞ¨PLþyiزe+Ä$±T zõíoÇ"ÝÏK|‚ÍßÿˆÉ9ð)W}ûõ„½ì¯YÅŒ‡ ììÞ­/IzrÛwîÅ«5+ÕEÿžmÌmçÜñ}x‘¡D·î­`Ôà|ìù~nG=‡Xn…†-:¢QbbËî-ßáÚƒg°qöA×>ý\ªhÙ>êêIì=rY*¯buôíÝÅw(Õé Ø´ež%¤Â£t(úW+àÙÍk¸të>tR òMuªÕ@/U¢c·^ðv,¹Ï™òäN_{Ž:ÁáÍ@v¸{õ$¦KÐ¥U£¢EU¾ûî;Ü’G÷²èѯ?|]-Í¿¹õ4ö=ƒ½5¶EÇ&a%ò<ÿó8y9…-Zvê…åK—Hxýv<Ž<UëµB×Vµ‹<ÌÂÛw 2ú,lѤMGÔ©èspüØq¼LÍ/ÑŽóróà[±"š…ó¾v·ãóЮCX5¼|‰s×î@£Ö¢@­†H$ dk-Ѷc'›¢Rþ²w;Î߸‰¥#Úw郰 ¿DWµZ-^¾| ///H$’w{Î{3ð„œÌTÄ<¼ˆ–ÍûbÈ—1sH£¿ìYÿ‰ïØ4ºqxå'Ì~àjàÿ›üÇ^@à=òŸx÷ÅŸ5ðÔÇf¶/‹Šµ"à߸'>Ðè±VÖ°¶VÚ& ðÁòA}l¦EÏϰ³jw´h×v²Ud ,Zµ2[A{ÿGð+_ ~å?t‘IàUÆWÐá{ð‚ ¼€€€€€€€`à/ xÁÀ¿•¿2ŠÝûF$A*•þs*R,†X,Ê" ð}Áˆ & ð·ógm°ô6­V‹øøøŒQÌÏχ^¯‡\.ÿG¼O^^ž¹žþn  ×ëARh‘ÿ}N§Cnn® N­V ‘è}[üÅ¢€¬¬,¨Tª?œñÿÂHH¯×ÃPø-öÿq ^:îƒ(ˇ2Øø#}Á`€^¯„!ðACJ¥ò~7!çxÿr„R ‚ ¼€€€€€€€`à/ ðßADÁYY@@@@@à‡@"kAÿrÿoÞœR™¬«\IEND®B`‚miller-5.6.2/doc/pix/sepia-overlay.jpg000066400000000000000000015554601354153536500176710ustar00rootroot00000000000000ÿØÿàJFIFÿázExifII*1>2E;Yi‡`Picasa2015:04:29 09:37:12Picasa0220® œ p ä ¤!Â1903:12:31 16:00:00c4298880fbfb7f7fd0f7ec7d7d360cb20100œp\d(lHHÿØÿàJFIFÿÛC  !"$"$ÿÛCÿÀX "ÿÄÿÄ8!1AQaq"2‘Rð#ST¡B‚’34br±áñÿÄÿÄ!1ÿÚ ?úò`J\`ê˜v‹ *Ùt)Wu6o`<Ì%MâðI…u\^ž½E:Û(p;æˆæð·ù½—õ¿¼,…I$ZÍ>”o *±1ÑN½޶V8òi:œr\â¤8Å ójj4µÝB©„úŒahsÀ»‰0™¨ÖÓs΃šó¾(Ae,c:.¥ì;@Þ-ÊÎúÖxëeJoò¹§±”ðàF—›ðÂÐÒM·O,®­š¸{ß%eØ–aW£µ4P¬ƒý¸øêY÷è·ÚžêmÑsäýQ zd–ZZHÓ’œaʹ¥Ìc[QÄ¿‰ Ìiw²Ò¬ï0$Æ‹7—‡@hÓþ¥Pv¦Ý‚èÿjÖÃ9tððªc«ÄY§E£ëeâ vtäv¨ú-1÷Í ‚t:+‰¬ÚKH=ŒÖ¥ÝP=Sh–÷WKwø‘&!IfO²§ j `FX`¸‰' _Sv|Žv8d ½hÓdk´±­4jzµ¶á<ú+px¦ ‚'HRÛË[0=íP6–ƒŠ´úÒ¯a3J»§›WP#Ž è™M޾ƒ]O2‡¶àÌœK;° kÉMG5–Ü@ôU5h¶¨Óƒ:­FçßÑüÆ£Gó¦Ã)ÔSèQÝ…ú_XKGól^Ö䜞þæw‹.DÑÎï¼õCqì–³¯¢b/Ϊ† ‰1ææˆÐªz)iÒ÷DSø‚3öVx´N³ÍYðÔ -ÄΡ¸ÜpTÝdÌ]è¢ ˆ‘„E8È‚•-&ÖÉ †‘LI'(Œ6*§'²‡j%„8É'Q Oጔñ`.÷AiÝS™A³E7`1 öI­É–7Ù^8 ‚ yk©ŒhcS$]M£Ñ6‚Shƒ(­¿ÊÈíÅ1á2­c3**æ Y§@ÂU ´ÀѫϢÇ·5FÛN¾ëé¾.ñZ™ öZ´·ƒsÙyt­ë¯5ÜÂý—Y³K ò‰ì•Ìúe“q:*1gý­#IoÓû 8E°;(o%ÌP]´úaHΠ"!Ý–&-AÔÖÒAlªœÛì¹@š  USsEC/oºÓ "Ñ`^àâ6‘1+Š‹j|À7»ëêºÉ2ìñÒwZÌi¼Ð:­Q£Z;¡Ï|D˜ì©¦À*£p:¤qÄ,^÷F=•±,,mÜã*¢Ò ªkâ ÷æ±®ZûXÒm"qŽ*^‰Û†‡˜ù´MÞSæ] /ƒ{[ÒÕX‚ß+}BÌùn×-.Ï]óʘñ7ÂÕ`¶î>ËRc6è]Qüº›«SeQL“s´%Z¨¦'SŒ&˜Ù§ÆÜ v Ú[x$tUF³*Kš×@ ¦UÞÖÝs€$q*|.` ÌõYRÚ)Õ6†; Picasa ÿâ øICC_PROFILE èapplmntrRGB XYZ ß acspAPPLöÖÓ-appldescPbdscm´Îcprt„#wtpt¨rXYZ¼gXYZÐbXYZärTRCø aarg  vcgt $0ndin T>chad ”,mmod À(bTRCø gTRCø aabg  aagg  descDisplaymluc" hrHR&¨koKR&¨nbNO&¨id&¨huHU&¨csCZ&¨daDK&¨ukUA&¨ar&¨itIT&¨roRO&¨esES&¨heIL&¨nlNL&¨fiFI&¨zhTW&¨viVN&¨skSK&¨zhCN&¨ruRU&¨frFR&¨ms&¨caES&¨thTH&¨esXL&¨deDE&¨enUS&¨ptBR&¨plPL&¨elGR&¨svSE&¨trTR&¨jaJP&¨ptPT&¨Thunderbolt DisplaytextCopyright Apple Inc., 2015XYZ óÊXYZ qÀ9ŠgXYZ a#¹æöXYZ #ò ½Ðcurv #(-26;@EJOTY^chmrw|†‹•šŸ£¨­²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿparaffò§ YÐ vcgtndin6§@U€LÀžÀ%€ ÀPT@333333sf32 røÿÿóºýrÿÿûÿÿý¤ÙÀqmmod’'?ÏýæÿívPhotoshop 3.08BIM>Z%G719031231< 160000+0000PPicasa8BIM%·õy%A£8Áq* Ì;sÿÛC     ÿÛC  ÿÀpœÿÄ ÿÄK !1A"Q2aq‘#RB¡$3S’±4TbÁÑCUr‚ð%5Dc“áñEƒ¢s²ÿÄÿÄ2!1A"Q2aBq¡ð#3‘±ñÁÑáRCÿÚ ?ýÐÍø‹/%,“DälØî`*ì’¶¸)6ŽÍS5E¼É4k0=8Àô0Hýk.lª#í!ÿÔÎCv” w«› ´¾ÏZfɉ?Ŧÿˆ4ÍŒH;¼ _©zfËŠâÓWûÝ3d 7i¼zšfË‚Dÿ›þ Ó61D—Ç«ãE61AüV_ÆŽlR$ny 9+ô ¦l˜¡y[ãá'©$–‚5&=š\m™×âøË$ƒö:ÏüDM¾ "ð|L'—ÒF ýõW+2øèÐwyG~¥ k6gAݤ«æ™±Š$n²ƒBM3cÅf÷—LØÅݦ?ûÁ¦lbƒø´Çÿy¦l`ÀnóWûÏßLØÁ‡ñi}¤fÉ?Ŧÿˆ4ÍŒv—Ç©ZfÆ(í0ïÔþÚfÆ(í5ÿ¼¢tÍ“‡ñij¹<ŽÆ(?‹L<ËýôÍŒX Þcÿ½ñçLÙ¬ø¬ßñ¾™²bƒø´Þ}M3cŦÿ‰ýôsdÀѶç>L¥]ìWj2²J4nÖÎFM×&lxùBhýõ™6‘ÒLÁüO?þ&¹ç#xD?‰çWr~úg!„CøžgüUÓ&Y¾¨È>U>çAx:”˜ÈŸ@QÒÈ=ýGJC ôõ) ˆ8È}õFAò©÷: ƒåSîtʧÜè2•O¹Ðd*Ÿs È>U>çA|ª}΃ ùTûAò©÷: ƒåSîtʧÜè2•O¹Ðd*Ÿs È¬Š¨k Q¤ôWP­Ph@Ю½„ h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@$Î…JÙRÔ×ùjú-lŽm÷Õ¥D¯‘6yt;­OB·D†¶ªÒµaÒ %€нŠc=$o&µ¤‘€Çˆÿ‹KC`Øè¿}Pº ÀžÊt‰ô"Ch4Ðz0ÿâÐS^äè6„_Ôt~ÍþZ”†ÉôÓúÏí¥!²=ø¿ËTl=¿¨è6„_ÔtB/ê: ‚ j΂˜"÷'A²=üôÉô"û6‚ߨzQÐl=¿¨è6G¢Ÿž‚˜z)ùè)“èEýGA°ô"þ£ ÙŒ_ž‚˜z)ùè)“èEýGB|ƒÐ‹úŽƒäO¦ŸÖmJEØziýgöÒÙ_F3çTSE?=2}¿¨è6„_Ôt#ÑÚôÃÑOÏALŸB/ê: ‡¡õÂêR²‘"…[[ýu"+öT5“O°Ð… 5×j•À‚kY-2t X>­2Ó#šýõ0æ¿}0æ¿}0${Ÿ: aÉO¾‚˜Ñе ä·W Ä9 ³¡ V±ß¶«T@Oãì¨@Ѐ4  h@Ѐ4  h@Ѐ4  hCü?…61‘ÝŠtzb£bˆìw®x$vsoD.Ï2É„/€,ŸúèøÓÛ Mù OQœŠèg¢å"϶à,2®H>ÃUÂ))2°`íù$””‚¾u#•ÊAÕ'ÕóH±Dêã±”ƒä¶òÀ#¿ßS2™2`mÑ/©ê1Ø8Çì)H´vÛ,##Ö*¾ÖuTcöG)6íªÊ®Y¿×W}Œ¤/'oÆ$<¦¾ãßYiJEàÀÁɆ"Ńz(§ì9H\°mñÉès6ÞÃF¢½•6ƮɷM Ë) ¾¯ŽìÏ’I‹þ ³ ,04ÏSÇÄŠù9 dm;f;#(—ƒ©ã‚}—É6‹6Ù¶Æ?Ú2¨Õ¨¿miÂfs—Ð.ß·LÁSGßLbýŒ¤Bíø? ’]YÓýŒ¤Xí›J±+µ=Ûj㱜þ‰M§k™Â¦Y?a¦0èe:,6< ,'ü>{ñ«„~Ç’bÿ†m¡‚‰'¡GXñ@g"Í´mhx¶EÔê¸Cìg? gÁ•K$Æ—Ïç«ã¡œ…¦ÜÙ>‚ÊI÷7ãYÆ7Ùr•&ÝÍŽE{ÙïGßdR|¶ÔÍÄHE}Øè£HcmX‘Byø#ÛZÂ6G9v±S‘d–£„²©È¬n×:±L’8žûñ¢„ìg/¢ jwôýr·ç¢Œ[ì9I&Ü“ˆ‡¿}GÙr• ;fÖŽUò;AÖ±…U“9ý¶ý»œŒy¹>úÔa휤ôÍkïúëFfëýÖ±?Äé®FÈf#ÀЩ&G3ö¤ÏØh)3ö AÌý†‚s?a ¤ÏØh)3ö AÌý†‚s?a ¤ÉöÐ"m¿§üô~ÅfSCß]xÎs;øuýõÜóë"Sðû'B€4  h@Ѐ4  h@Ѐ4  h@*oŬK³k¢š†åØ"—룪•™'Òpy_öÕ¥Bì x¯ßL@Eÿç¦"ì mâÆ˜‚V7:b ô_òÓZ BãÉb-‰ŠýôÄ¡é5Õ1zQÓГúŽ˜ [ÑËLIhFAÙa¦"ÐzOW×ï¦"Ðp?q¦%#Гú½ôÅ0¸"Ïùéˆ'Óo¸Ó‹Ÿûé‰-è¿å¦"Ðz/ùiˆ´‹þZb-¢ÿ–˜‹Aè¿å¦"Ðz/ùiˆ´‹þZb-¢ÿ–˜‹Aè¿å¦"Ðz/ùiˆ´‹þZb-¢ÿ–˜‹Aè¿å¦"Ðz/ùiˆ´‹þZb-¢ÿ–˜‹Aè¿å¦"Ðz/ùiˆ´‹þZb-¢ÿ–˜‹Aè¿å¦"Ðz/ùiˆ´‹þZb-¢ÿ–˜‹Aè¿å¦"Ðz/ùiˆ´‹þZb-hZ¨‘¥VÊp·OŒ°6¬ÖÃɈØ÷× sÆ.Žñᔕ“µüeƒ»eŒ8Ùå¤y”¥E—¢¬íðb¼¯±®ílál¯ÒO^ú›/ì À“×Ü.ÈÛ}ù¨G^²þ}ëYEôLZì‘“P™}-ŇÌDz2¯ï¦HÌ£ú^ø‹ûêe8þƒæ!ýòþ]êÚ4¢ÀäD|Ê¿¾¦Q5‹™‚¨Ì¿¾­¢bÀåc^ªéh¸²FN9ñ"þÚZ°ùˆ?â.¦HbÉùŒø©¦H”Ãæ1ÿ⦙!L¯Ì@<È¿¾­¡‹›ÆÿŠ¿¶–‹‹˜Çå~ºþúZ3€Œi—÷ÒÑi‡ÌÃÿæÒÑI1Wûáùw©”F|ÌFeýõm “Ž ™W÷ÒÐÅ2 ¿÷ËûéhbØ|Ì¿Y}- d®DÔ‹¥¡‹'æ ºõS$1d|Ô#¯Yzüõm X¨Oþù}-"?ïL¢LY?1üEÔÉGÍãÅ_ÛVÐŇ¯ÿx_ßKD¦3ÿ}- aó8ßñW÷ÒЦOÌâÝúËûéh˜³ãÝ™÷Ó$ƒ‹aó/北X°¯ï©’%0õáÿˆ¿¾­¡L˜ƒþ2þúZ 0õá&„«ù÷¥£¢$i즙¢£ÇòÖK²%b©Èhd#r@Æü_z!¥>"RÝö~Ú ÿ„'ŸÏUß³?–þ¨ºž¯È\z »òâ#Üê[‘ Ì 4¯z[câ ò-òŒ÷ÒÚ&)‡ó‰± Èélº@Zo-ùè¯Ðx%un,€}ïQ¶RêŸý×êoΪmŠH J ³G_cz6ý„“è¬y À² 5çS+.(lr+¨uSÞ†wÑ}Ѐ4  h@Ѐ4  h@Ѐ4  h@p÷¤Î‚4Üñ•xDª$I\€$X£CÈåb¨#Un&ž¤jÄÈ|¦)š!l,€´ YëûŸÔë7«6»*H õAÝûûë÷C¥/ò@ä´ÿ¢*˱Ž[‘|_N‡F¼f?ز¡lêÀ®FÞÀßL:Íþ5û.ŒÁcZi?Ñ+öZf¼^±Í{þzJ«¢G²¸í À­&3¾’ôU]wAëB2Am¹ƒ{}´Tý ý†cÈ[à céÛRN½q˜E½*x¸Šì#Z‹×D—÷;ÈÙ ‰‡Õþ-fO}Wf°ê°–’Mì£[þèçÛ젒ܕ®üfåôj¿de×%1DI?ˆjʈ»#&HP(þÒìmIRôT›öL23ÏŠŸí«~ˆô¾dóŤó¥|ŠúìY|E•‚à³szޝ “û,Žò¯«ˆñQèÞŠ¯ î»4–‡ƒ)ºð>úÞŒïìIuæ?Ù {Ÿ¶³ñ.Éi"0IçUµ]ŸÙ0(Á *}‡ßU;D§bD•–å_v÷×;ùôoøö^V"BW7æF«ï¢GûŠõä¶þ‡¸—O£U³H$ºˆqÈ¡õÞ·þ}®ÅM?'?/†HñgßYouF–½•ˆ©nâ”SÙ¯}T¾Ð}h»O?(öòÊžRÔ^‘ZmvlÇ‹65™±Â’=ƺ(©læäã¢ÿÂqX²|Ÿ}W³9´Lx«‹Š!Ðñz´’&M²Ç u’®Ì×p¬Oñ:dz®Fˆab´*ì‹ä:÷:= ±hs'’Oùjl¶Ã’Oùi±l9/ºéL[Iý?å¥1l9'ôÿ–”ŰäŸÓþZSÃ’OùiL[Bì×M‹Õ!vIü†›û ¹üõ׎ÌOñ:áÉz4{.¢º½ìЀ4  h@Ѐ4  h@Ѐ4  ©¿±.Í®Šj—eáüÛZ‰‡ÐÂhYÖŒû3¾\hå65›Ùºt5fV@C h•»+,ÑÇõ1 }õ-¦Yf@B‚;¢hËM–2 ò?}¢$-æU^NÚ7EJ‰Šda`÷öÓ%aİ‘;$‹{Õ3‹$H½v?}KEÅ‘êËòÒÐŇ«ù- Y>¢PÒÐÅ•õUOGކ–‹HŽ›»ñ¥¢–<:¦Z#˜o¨7éÞ¢¤è‰%Dë³Wz–‘Rd‰“Åõ^uL¸–?¦¥¡[#Õä~ºZ- æHT˜¢A7Øó ¥E´2Ѐ4  h@Ѐ4  h@Ѐ4  I¿…]žâM¾LÝöY€¬ç_7š76}>)%ÆOÂØ ‰ñjä}cª4âr"rÍ>3Ýž”€o_Hùßt*ƒ{ëGM=·feÛä(Ħˆ:Ç/áeãܨñG?0?6þOe޾~r«=øÅæÞ³’_I&v#Í1Ó9ý—“ý–®#šg^Fb{Ó9ý‡Œ]Ï1æ1|ÛX>£ãO$ËŒ~‹Í¾qÿæ:g?²c~{:ëæÛÇŽGLßØÆ 3³OŒ¦¿µ3c3ó‹PÊcùò:fþÆ1$gf“ÿlcÿÔtÍýŒb@ÏÍ¿ûcîtÍýŒbOÏæþ#–õíõ3c‡Îç_6Ãÿ¨é›ûÄvh¾m¿s¦oìcùüË¡–ßó3cƒgfÿVß¹Ó7ö1ˆüÕe±û}ZfþËŒ~ƒç³˜ÐËbG‘Èé›û%"¯¹g!£çòätÍýŒc}3óOŒ–ýΙ¿°ã~{6ÇûS€|:fþÆ1š¦ŽSxþ£¦oìR)&ë—Ùl,ÐŽ™¿±Œ[ÚóÙ£Î[øþ£¦oìcvae¹ëú´ÍýŒb;4Žó~VtÍýŒb=›fò\½3c¹ÙÇÆcÌtÍýŒb70ûk~çO$Æ1ŸÎóóoßþ#¦sûÄ>6èe¹üìé›ûÄ“š½6[_ß‘Ó7öLaôOñ Á_íoûžôÍý–‘I7,ÄRí”À?QÓ7ö1_D&é˜àqÉj>÷¦oìcãpÎ=üËvÓ9ýŠD Ç0‚Fcû3bÇ4ÿú¦ýΙ¿±H~g¶[þçLߨÆ$ŒüÂÝe7üÇS9}—ýO„²²eÜÊË;0ãtMë¿r–ΩF:=UØ,~Õ¯mn²“µÅw]èÕØ+4Š©ëÜ評롲B¾ƒEìo¾«¢'Lóeø¦,ù27”A‰Düµæpä]3ЧÇí“ýf–>aÀ µÝ}ô®j+|_Dàáo°â¹Ê“œÌOûa­ãÈ‘‹I—âhã2I èt’u‡æF—…±™X{ÖnÒ‘¼¤JOeMÕqäq"”в|O A#6|Ÿ:Ÿó’/ü¦ö\ßO2<¤ C¾|­ì’\^†æâædd²ÆXFÁ­nQèÊ”Id߆E@õ ó©\¥o•“âX£IH|õÙÔ®VTø—C¶X2 õ`hv|ë|q’»19Gѳ£ÈtO¾´º2Õ±œã"ù_÷ÕÀ2\Çz ä?âßB¥Aê(Ü~Z2)4þƒÔ^ˆ{þúˆVè8´É çâûé¡LŠ |w£¯B™"E«çz+Q<—ÅʤÑ#C-PÎ45H€èEzƒ¯ÏBS²C«Y ÐWÙ _ßWD¦T+aµ ˆ =¸­W^†$s`ÿž¡iê#v¿¶®Ó"AÈľ ÿ«¨°Ðcú H¯Ps¥ÄbÉõ¯ýô%0õõ R2œÈ#€bI”‚W_¡Iìùÿ­ûѯU^$š"¤\%`MöÚÆñ7«APVõ-•ÕŽ]¶ð¾°øµ]àe%˜œ5ž˜>B½Ž‡ÛY…Ó7*ú*‰¸(&)ÒD³`ŽÆ‹?Dn¾ÁB,וÓßaþËdôóGä>ú®èЬ1F[b…GR×þðŽ†¤S¡«,qõ‚™c?v¡«ó²üDçG?"FX ïùjJ½²Æ†à‡& kÇßVFeVgfùÇ, ?‡XmÙ¨ôm…'ôŠQdÙc®«­}ì§ Ôù+碳ýÙ¯ìFjµ iö;ûé:¡ËN›ƒ(ò¢ ðGùêË/Acì®2ä)§ÉVa憑‹¾É'®o›ä³7ø~ÚÊ_>Ãk"JîM)*Ѩ¾¬õ§…ã­’‰¸zÀÈé'}€Z,ïcãZ47ÌñoÃ~Çí­Õ™Êå‰ù£Ï¾°ïÙ­uÏõEJ‚‡B†µò­âDbt¹I÷ûh¯Ù-^Œè™8 ÈZ®“ÜëŸóìÞ±”“ düµ©-‘v(G“깫WãR¥öTéth"oR34ª u_âÖéÞÙ•OÑI¢Ìy õÖ1ì¿mJ›e¸Ä©‡'–yr•”~^u\vØRŒQw9ò)–9PøyÕyÕ¡qº6íþ …}R ×­Á·ÙÎIº²Gl粓vj>‹màþšÁµÙƒ{ÿ³×ÿMb‰Ö=œír4Cx¯¹Ð-ß^£è¶ÍÛvFX £ˆ¾ºó®‘ƒ‘—:4‚cߨoó¾)ò ÿWåÿ‰§ŠDÍð }äÓÅ!ä_Aþ¯Ëÿü´ñHyЫòÿÄÿ-M¾o"ÿšÙô¸·OÈÔò$*Ð4hk\Vù Í^3Ü¡]} Ñóé6P~«Æ°o¦eÞü¾oþ]c—ð5Çù£Â¹Å}õó½#èaeƒ1ï¯ùȲcÀZö wz<´²¨G qѱހjŽGÔ¼†¯mÉÌ‘c3)úÀò|h1ÌŠ$ËõA}B´z¹Y&(/oí /ÍÏ!…d‡“^ui‚+"XÒQaàê¢L¥™TLÅÐ4¡ù¹Çªe³]h Í4±J¼e |0­aóSÌñ¬UEßç )™¹3z•韷‘ -ëO;ÇN0<‰Ðc0Êðz€qðÕç@JåN ääSW÷Ы²eäzŽ$'Zµ«—#D£ÃDê-œFÈ9/’Ô4³/èýCB®ÊdNñÊf¾ëˆÚ³6D™"8d ¥lØ÷Ð'P«öÁ¨0ñ¡i”y²a†˜0+b´ ÷yHÔ|èk™r²€í=‡¹ÐÉ_›•Ö0 Y¢ÄhZe2\pT·.ét!hòr„ÈäÏ^4¬‰LQ™°]h “Ç—.)œKV|~ZÉ”ð¨B,Õ} »,å̆fš¬ëBÛ"•K—{£Þ…}šô h OÄ4càßÿ4?ü§]ÿ§ÿ¨qçüZ½/-{Ÿg„V@¸ˆÕ‘¨‚$H•WÁD’{.P]"¼hËè†P«Êïí¬Ó¦[VŠÈñÇ’GòÔ´‘{e‘¡‘m\v:³¥±L£IjyÈŸËWLm°È·ÀèœXiÇe”#÷–}ûÒâF¤ÃŠ…¤#ûh©ìªŽÉïWL-š'ò¥0T0V.í@{Þ IôÜXaGóÖ]"¦Ø–ÇÃU ·Ÿ RÈ&è#K)%ÿ}>%¹˜ÀØskÒ¢ÅÏ蓇v ?¡ÕÁQŒÙ?%t ëóÔÆ»5pà¢}\PÊE[1 E¿{Ôø–Ú*±áÉ/¡ÎÈ?}JˆÉ—l\aß;>Öuq‰¥e}&·äO$7g\˜pÁ /GÇzÖ1C&JÁˆÀ ’ëÏzTEÈŸ”Åÿ‰ýïW2dü–= ?¦˜#²PW³ìuR4¤ÙY#ÄŒ„‘È¿Y¤_‘a‰ˆGãöûëU-¢~Sçþzµ“#åq|zž=Lb2dŒEsÎø•ˆü¯½fN)•d; Ñ1Ž(W®å­Eª3+³6IÃ)q±kèÙ­aµfÖ‘µ~XÀLŒU:ñäë§ÄûjFf÷æõ>(®ÉÍôÇ ¶Ãí¤«DŠer—*üÎCWª'¡ªñ~ʲ¢qŽ醠:bN¢Ä<‚?–ùÊRÁ¯¶>úŸ/ÊŠºáz­ëfµß€OZ­Gì,«¢`L?]N>[ýÉïOöO•tieˆ+…œ·¢l@¦D +_¶³q±L™Õú²—½ZŸËZø¦e[B2% ÌÌ úØ^³ñÈÒ¿eò›c-a÷ï½Y(´O•„‰ˆ`FžvUöQzTk²[±ÛZã.Kg$Ÿð“ã[ãI=33Ž’’E©ýuÔåw謤0°}õ™tUÑFðMdÒìÁ½/û:b‰Ö=œír4C{~ºv†IUO¹±Û¨ôXшâUU®µêI$yäÛc€lS/¢CW^t&$†êϾ„Å•,×Wýô5H9P?Wz7·zÖ$ó!~çA["Á<˜Öƒø– ò l8-Þ‚ØqQí ¶‰Ð  h@Ѐ4  h@Ѐ4  h@ЀTß‹X—f×E5 ˲ðþ?í­DÃèiôu£p] l8-Q ex€,õùh#ÙRÀ­ l•Ù4HžOŽô3{²J)öÐdʼ)"ñ#­JLªMÆ‘€£JBÛ$*UãT™0豿›6 ĤÑ_§°ËCB‚¢“ÚÝûèFè±¶†m’(âZ Ý”,/CZH8)¯éZïE½$aL£BÚˆ<^´&D'ÛªÐÑ+×~Ú{è‘cË~šD*>çBé€sî4¶ìž‚•‡+ìí Ä°7ØÐ”Ã@«ÙÀìè5`XõCÎ…Å%#B:¢t h@×g@T·Ù¿ËCIcDè)&Eþ_¯Z»¢kèÿq¨_ˆ+$è$¡’t   ¡Åšm£"OVluf>äkgUÊÒ¢aÚp1ÛÔ†S÷E§d|’j†H+í÷Ö̤(:~õ„¬éû2ï?‡Jð“¬r^%ãü ÆÀoÌ|ÓéS3´¦Až~ú d LŒ‰O(* Ö„ !œMëc°-¡i„x’¢—i.F>kÀÐ…³Žþªï@%aÊš4‰Øq¡íç@9 h§2/CV€†Ç•'õ±r輈L4²žO'CòÐÇ/ŽÁ,¿@ý´˜¡ã ˆƒfÍè>ß’À"¸ùІ‰™˜ß!G@V,sn—ø»££ƒøtÖ'i½ˆªÐ 8ŒTŽUg@^ jÂÉåþZ6L‘ XÏÔMÝhVìn¦ ~Yã싽È3"0£ÙÐ lŠñVÊÁ#BÛ.“‰™¼-¡d ‰YnËøVËl¤K±dCõÅ~4!”Ëáè´ƒˆ>kü´5ò%°¥f.Œâ¾ô%1RE,j¸‡³wu¡ F‚`qš:e@68² äRþZÒ u1·`è ß+–À²£½ãI%»±U¡m„1åÂDE¾ùhBaÇž †‡ìu«L ý5hÁìhÇÁßþjAûk¿ùœyÿØ/úkÚû<^…dŽ1uªÝ–%ãjU7äjÝ"U¶I‘}ÍjÚ²$è‡ue%[S"¤èLð|Ôh¥ªfQMM§³<›\í#:ÏB¨}õ‡Ö™¥$›tÈ®%–ù ìøÑE¤’bNϘ¶‘äUö+Yñ´û5œeÚ-&͚р™$sza/²fº6àÆø¸Ë ŽY‡½ë´SKg9v?˜ ßW«¬Œ‡$¿:ì´ÅH¢HP÷¦Û*´aÊÀÍœª‰Š‘ö>uÊPoÙÑJ(¾Û,!šI X¯ÓWÞÙþ„¾Ï’¡„S‘ɬ|j8?LբͲ抮Y }ïL]5fͺ 1qÄHX$n)£¦<ºƒE¼ky¦ÐyaãL…2¼”ÉÈmM¶]£ íÓI+²5'°uÍÅ·ÙÓ4…˳æØXòM~u— V™Tãí ÇÛò"ÆhZKg=ŸËZ\n»2毡/³e† óàƒ¬á/³Jjº!vlµCyã½ÚÄ“ôm33mYr=´äo£çYÂ_f”’E?†gúì«1ã]Öp—ÙsÑ1myQ)‘òI?ᢄ½‘Ê>øAâÇg%žõÖç?ì4:ßzÛta«ku祡L‡Þ¥ì©:•Žr X‰êÁ:Ä•£i¤bm‘â$ãNVÍùó¬.6º7ä¾Ávœ€-² žõ0—ÙrEò7„ÂdÁ’ ˆf`dŠ›j«5àOuàrÖE–W›%Œ#+H bó¬«Ç£Z±dËÀòˆ~zÖw‰­d6A2à OZÝKu¬vÈ{ùˆô‘ZÌT©Ù¦Õè£<ª¤d`†ø—í¬í~H«ô˯Ì2å€=µm¢R²fiþ^„@~‡z7,BQ¾Êã³z œPÒMõ¢kƒNû$¼Ã&ÛnïØUùt?É¿:2B¶|)¡¨ÜïH%±¸ž¨Œ¿ö:Òrö‰&¬Ï1Ëõ€X!>z±¬7+Ò4š£R™ w »ÿ„®—# o²·–±ÇP~Ú/¢µû+”e!Q‹ÿ£vôû&y%@‡H+ÉûèÛú¾Â#”(ÉŽ WáÚ,ƒQ ƒ“ÊH€Oéz¶ï¡QDz¢W1n}É÷Ñ÷ÑW]’®Ï:‰öþî¾ÚŸàž»ì8–8äÿOç­_Ò2’ûZBVñ€ÿúj\ŠXÉ*?òðAüÈÕÝt*?dÂÎbc4@5õ^4½X­™ùd¯¯B}ÅYÖnwÖTqý’ç'×>” VººÔnWÐIÍêØÊG¿Ž´nE¨Žf‘™8Fˆ}mߣ *ìIõÂk÷Ôv½r¸Ù9b&C£Hó©vºÿ9# 0Ý:Ѧ«EM67Þó¼6çðÖŠÖè’Iè²nвÄ Ç¿ËZR—³8Å#sÙQ~ã[—G?d7ƒúk&—fëþÌ5‰þ'XösuÈÑãûèTè¶ þ|uýZ±ìIèô •£t5êM$yZnAêrü$û- ag©¿ÏT»y¶÷Ô´n™5g#ó­-3ž,‚\ßuù-%KÏïzZ#VAu¿6>ãT¥´"è²²GB4ì#÷ÐH¶†C@Ѐ4  h@Ѐ4  h@Ѐ4  hMøÿ¶³#k¢šÉ¹v^Å­DÃèn´`4 (Ì >ÚJ˜—Í…‹õß°Ör4¢Æ‡‰“’ëDÝ– ØuZYšX–Р •>}´.ÑGš8ÁøN£ti*36ï…ÀÈeî5Ÿ$N˜Hï‚ôÃÆžH™peŸrà #ßLâgL[Ž®#IA>˦q+ãhÕ­œÈvâ·¡Wf„r¶£ãƳ’7R%s`è>-2F±`3á'‹i’%2;éN—L•Í‚CÁYü´ÈŽ; ~šÑ=“`𝓕2ú“5 eÉ$tQoB—vÂqôÎöÔòE—Ç$UwŒej>ÿ–žH—C¢Üq2Ó†POÚõT“2âÐèìžÅkF^ôY®ºÐнЗ$F,šúѵ‹ r¿òÖr–˜ÈfYÏ$n½ÅkIÙ™- Õ0ÐÀ:vVV!fñzòÛ„6ŸÓYÈÞ-tXnø&‰ü´É dAÏ‹ÇCûjÚ.,˜ò¢‘¸¯dû©‘–‡¯ÿ-kFdè@Ѐ4  I<ŸÓQômt!ˆª¾õ•Ù¿âbøÚ-¦y• „…OZ̾Q,]Hùœ[þá4AŽÑ0²z(lw¯žáL÷©Z-üo<ý&n¿ðf‹hãyÞ…L/ÿ Ò…°þ9žÿ•K_ü‡J€oyþ?„Íùý'JP6ñšÀ©Ú%#íÄéL¹€Þ³èá3PñôJdÉüs>ÿü¦k÷ú”˘ ï< LÝÿà:S•“zÌaÅöyÿIëUÄÎDʃÌH÷âMjcEÍ—æáÐþ7ëÀêÓ þ9¸ŽÕ7åô)ŒÎ —¿üJe̟㛇ÿ ›þC¨âL‘{Ͼ_Áæý ZLd€oyÂÇð™¼IÔ¦2@7Ìòm3ÈuiŒ ó8‚?„Íç¿ êS.dI¼æÈA}¢n¼'V™2ESxÊV%6Yû•'VÉ;ÖuùTµÿÊu)—2Žg_¦¯þC¦$ÉÞsÿÒfþètÑs*Û¾[ý/³Íù}Y²dwl´!†Ï5þhOþZÕ,†H“¾g“ÞÓ7ü§Oˆ´OñÌðüªoùN”Å¢vË‘m¢[üN”ÆH„Ýr£üDÝù%N˜ÐS,w¼ÿÂ¥ñýJc$Æs¿øLßò)Œè?çDßòG¡’½ç_{T·ÿÊui—2?gÿåÈt¦3'øÖußð™¿ä:”Æ`Ûæy6‰¿å?úi²&Èþ5ÿÁæÿéLÖL‘½ç‚Ú&ÿ굉œ´vÿÑîë•™¾´mòDXfRüµèàÌãÌþ÷Ö.µë<ŸÄV_û­J´°Â#YOâ ç«/A]±Þ”TùëM&a9!˜xó Y\+·j§ßYrŠ–&ÔfÕ¡9SY“çóÕ¤-²NjluöïYqeR†=ÿ뫊3h…ÄŒ/wûéˆr¦*t#²­Ðè^¤šHélËñމÆpK/ÛÛ\óEÁ²’ïp+©‰ ÷¦hÒƒ:0¢L‚dºazê©£“rL¹Ç¼ß磌Ñ7`"P:Ròñß.üw¥"ÛŒ„t4¤c'e^(ЃF€ìê4’6›fC¹à²¹£hj†¹çiÁ±3ïxÑ©xTØZŽhÒƒe$ÞP 0ÆA+mÞ³ä.dão˜Þ™“&øñVªäK²¸?CÆí„ÑúŠ ï÷Ö¼œf1˜¹7ìÁ— :’%P“ì¼;ÆÝ+,liÛÆªœY%i†2 ÇÝ~zéñìÅÊÌ™{Ž>HF$ƒøˆ×9I#iH‡Ýp•‡LoÇå«ä‹ì˜N´L¦R²cYA»FiÝPk³<;Þ2©lÂGt5•Ƚ•Ãè¸Þ°Œêˆ§êñ¦q´Ž‚@¬.º=öuÖ“G&ÝŒ8‘ûiŠ3’*øÊ£ÀÕ¤‹•³&ç;bD¦jû:ç'H陑·9„¢;ïòÆ{6ãô>LÄzhH¯:¹¢S)µbî[iIÙK­‘—R ø¿¨H½tþ&%Ù8ð´[Tp6Qr´9›²¹'÷$þgYôhYR!-ë]ƱZìÕìlÔvðZb {ëUðìÊ!X@Óò9Xª?mf £R²Š' ~[8„éðJ( “ß¿^4ïÙ¢Ó¯û8 ‘WøkF¾&UXc.A€"d€¾îtMЗe¸äúãŽz•üõ~WÙ5] Í@òýyduÙÔ—}šMý À *Ïf¼ýõaÑ™=™ò%IÌ6OáÖ$©›OFØùn,Ž"û?mt¯ÙÌ[)g!ó/¿#Sü‚2Éä‚Y~ÜOßI^Š©É'‚ÖrÇôô¿ç£»ì/ìV‚™œœyüô_V%ýˆ‰@Ë,¹6÷Ø>‰\» ë¢Y3}V-š©„PÕ§{a5ôJ µ•xe«€{j,¬¿ädaë)¿éÖ­œÕ/BG?Q@ʃöó©ò7ªè»®G/û`øm¿a%ôV'¦àL}Λ®ÃìBFß:§æí½—X¯Ÿf¯ãÑ3"¶KË*kði­öeuT,(õp?˜>úϾÍtº58"H̳ ÿ {ë{o³¢Ò.J’í˜;ðñ£· ©.…b¬þœ…2Õ‰=~ZÌn»4ÿ±QŠî“púïJ¾Ø¶½¿ìŽqÓ'“8êôë¦M>Ëzyp¼å&þ«¯®ÓVÆŽ‰•AF}ƺz92Áý5 »0oT!küN±ìç ÷×#D?áñ¡We±Oó~z‘üÃüMÿdM²³ãÉÁ¸ôk]ù[Œ-¸ã”èç#n;TXÙß4dY+ÔSÿ–¹·8¥+:,%h×/Å$œRPvÌió¯F|f<ÏrËßx +ÆW½ërr¤n0Žœˆ~[cU2;±ûj®j]\VÉ›ùœFFc‘H±~;ÖŸ.HÊâ§±)¾n¹IˆÑÿ)c5þZÎrÊ8G ñËà @e•ØÒߨëK–Œø”˜Áñ5Êuìé 9±Hç5„ŽŸ×+ôtjUÙ»4³¾!Cö¿:ëÅú9¹IâÛ± R(èýõµŒdÙ¥ u£È ǷئDy8¸¿ËX«fí‡ËÅT¡ùkT…±Ä‘‚TUꘓ/¡Ð€4%PVˆèùÐÒlXƉ~®"ïí©HÞL |éH[$ãÆMðô¤2`"D`Bv>ÚR&còk­S-h±$x¡Ð€4  I<ŸÓQômt&ò=õ‹¢ƒ"8àê>FªVVÙÂpjÆ2÷ÿ„i„Hù’vœ ÿ³'üº¸¢y$Gð¬?,Ÿò1C6O𬯖OùF˜¡›á8>>Y?åb‡’Aü'¿ìÉÿ(ÔÂ#É þƒçå“þQ«ŠIðŒûºË©„G’D Áþ™å¸¢ù Áþ•åb†oì?…àŽ2ÿÊ4Å)ðÌû²È4Å ¤Âð:'åb†Rµà8«ßþ¦(g&OðŒûº˦(žFG𜿕_ùF˜ÃèžIðœû²ÿÊ4ÅÈÉþÿwOùtÅÉ"×€<ã'ü£LQ¬¤Âð?îÉÿ(Ó2 §û:Ê4ÅÈÉþÿwOùtÅÉ þÿwOùtÅ$€í8?÷dÿ”iŠIü+þê¿ò1C6HÚ°A±Š¿ò1C6°?îÉÿ.˜¡›á÷tÿ—LP͇ðŒûº˦(y$Â0?îéÿ.˜¡ä‘°î«ÿ(Ó3aü'þì¿ò1EÍý€ÚpkþÌŸò1CÈÃøNýÙåb‡‘Úp}±Wö˜DfþÀíx£Œ¿ò0‰r Áÿ»/ü£WO#á8?÷eÿ”iŠF°Gÿ¥_ùF˜¢fÈ88¸ÃÔŠS÷E™rrE”x?–²ûòÿÝ^£¿F£¢²ÀóE$ ¢,ê–û%²0íÞ­´ÉVŒ9xø¹™‹™;È>žük””\²gH¹(ÒtªE°IÒhÍ;"iöÙ(N‰dôlw£pl%$^ ñ1 (掬ZKA¦ÇK®¿^CZÉ™ÇdOêdÆ$ÍOvâÑH8Ýî:üõ2ØÃDÍ(Yÿ=\˜À¬›†1åë0áZËkÙp~„ãÏ´²“Vï³`ê|ªš.Ö¤P*Ò¢_Øóñã”à^·’ôspÝ–„D_1ûé“üF0{iš üF?øƒLÐıÜcðdÿ=2c¯¸Bz ?}G!ˆ•m¼v{6=Oƒfª@FÚ×h–EiðcæC Ç‚‹oF >bŒ»4J1§e6lk?_*ÛU~•ZöÖ–F^dÉÒìYã[ö7¨ÔÌ„]¨ë†£¢P²·&laãìÒRD#mŠ”ª§íl4ø™UŸhÅ'Š*3yïΉÁ¦û!¡ÚY@x×ÍŽõqã+|ˆ¸þXM>ŸjT_DncÿˆÁ×èxï[NŒâOñïýàýôÍ @n1“ø‡¾™XÄFNá€R²Yhž‰:Ë”Qc›)ÿÞ/üÞu•.6Í8ò$hlͽiO×^5¼¸Æ<†ÇuŸmÔLØì 0HùI7Ë»Pz€A$ƒ]j­£ Ô0MF×ÑÄBµ0ŸÌö$kÄÖìWòŒt!!‰­gÓ5ü‡dRíãùåoZu†Éüô'ÀÅŠÀPdýõ˜ÖèÔ®ÕŠ'ob}Xý®Ž²ð¢|†GÀ-|¹ãì~ú©¦´‹²f zô ¯?–«ID‘ì®0Äù`]½£ïHÕyiÈæ!{÷ê\r Jƒ9¡R+˜†½ô•7Ñct7 "ÜA~ÚÔ:2û3d4+’¡q‰ðÝë›ìÙ´z>i!"ˆúG¾ºühç»§7ò±Ø:ÊÆÍ; ÌxŒ¸¿mY]¢.ÈÍx ë£ÇÚúü´x…~‹c¸Ä-}$ý´ÕUÝ‘ ÙEL÷Ñbä‹a¶‰Ÿ˜‘ϹÖ§Ã-…h´_ fQºo:,rÐyVÍ,¸ÅÙ€ˆ}õ½S3r+:‚„~zÏÇT[eœ`ú½£ò{Ñ×°¯ÑhV#qEô>úÒª&ìÊ3f„\fÝûë\¾9›Þ=–•¡,§±õýõ^)‘]åŠdï ¾Î¢ÆÊò5/¤Žœ"$$ÿ‡[Uz2Óh¬ƒ]‡?sß_Ь_1ÊV6C}ùïX‹…3MNÕ²"|A2«ã’áóª±ÑiÌ6ªqˆÿÅöÑÒ}x“:``Ñ»;`OZÁ=„Ÿ£nÞ±. ±)÷:ê±ÇG7v=¼ÓB.Ì;ßû¡úküN±ìæs_¾¹1d3r_ï ªÙ|NçAùè¿2?Äêï[kî›kbÂåXŽxצqs#,%f‡÷ÏÊ´„ ZóC\W¤ÒoGIrÆ+]‹“áI†cIŸËsØ#Æ£àjf—<\M‹±ºå´ÊýÂZè¸êVrò,hN?ÃrA,nÓt’=}õ…ÄÕ—*dä|;,²HâZG·ŠÕ|M¶<ª>Á™†he¥( ü´ñIJÐòÅÆŠ7Ãy1AãÍRÆI‹ó©â’Z{/š)þ>Èh¦šå‘f¯±Õ\?ö<«-tieq¹E™êý1­n~E*³Ü¸xÜz=¯Âù¹ûDy9oõŸ:öqIËŽÏ',q#¦¦ý®õÔåü‹èd4 ²Œo¢ljt#‘ñnnNØÓb° ¢uÇžXÂÎü )Ñæ×ââá"p R=‰ï^HóO$T¸¢¢ÏiŽ9Â’²‹*/­}­éUSÐ h…‡`(КHƒ@Ñ#B•qjXB{<^ëñFùç.63Z¥Ð×ÏäæäR{=Ð⃊7|¿n»ÃÌ7&ü6×n Îog.xB G¨lyרòõ²QlÞ…n‹è`‡ü'@-¼ûi«6ú<·ÇÛÎçµäD6÷ƈ?mxùç(=®©-˜~ß÷|Ýõ1³xÑò×>.YÏ“g^^8GG·P¢¨yû }Á»/kLj:-i°,¥Ð´ïd'¢…¤, ›¯7ÿ–±Ê8%½lÃvM‹«Ð”Ã@Ѐ4|u  rãß « «'BÚD?^„]ì×Añä;@«Ù:4  h Iäþš£k¡ZÁ¸öñ×V=˜}Àý5³°Ð€4  h@Ðmý?ç¡tN„Hð/@‘à^€4  h@Ѐ4  h@Ѐ4  hþZ-¿§üô/Ä+ëí¡tRÀ/ûê>.…¯úk²ŠÉ ž›FMÃ#¨•«#Øk2mŠUG?7+#?$ãÃ)UQõ7ß\¥')"©YÃÿïØõßz˜Zì¹×¢$Ú‡Q¨Ÿ¹ëSÆþËŸèKl!È-3§®ÏZx‡–ÆE´›¼–ïóÓ Œít4ín †ýuqý“$½ðÂ>“;þúcû&kèl5þý¿¶Š°ùÑS€Wÿ|ÿÜê8~Ëäý lr·r7üÚ˜¿²çú>2²yIȽGvU'ôeL(±H¦qýõŒMæþ‰hÙ "v>Þt¦Ëqú+9~Fgèéµìoèw¬ßñX}]ý™؆™‡þù¿}-ýð )¿÷­ûèÛû5¿¢áì¿?¾ªß³?à†$ õIþú?î?Á™£—•Ç3v~ç­aïÙ¤ÿDúRWs1ýô¯Ø¿Ñþ©òìêëì_è«À²8vf$~zç_³wú-ÅÐX™ºö½mEý™É}ã%Y™»üô«öDëÑ&ûæó÷:S^ÃkèoÌ8^>»t>ú¿äÏø# ##_½eÚömWÑORD^1Êõ}w¦þÍ|>‰Büƒ;±'Þô3 vž¥a×õ7ö>?Cqg•Tƒ#W몿¹UÐñ3·ö:Õß³?àSTÇ÷ÕKö?Á`ÌßûæÕþÌȬœXrhI#üÏZŽ-û4¥^… ¾bØùózÎ*ÍfÚØP½™®«Î·‹3“=$.^ØÑN€ƒUÙATAX#°F½Šñ$§Í* `ûuÖµòÓŸ—µ ~¾ú* ÆÊâ>HÇ ! 'ßí¨² ñ²á÷‘ű׸#Wçd¨ÐeüåÜ%yŸcT4•І6LG'å rÑk°Gª²Hެ¦'Ï™ž èäë)Jöiâùß;¢QBýìu­»F~§ì¯\†ƧȺ"ÊH§wåÑ'£¢Êˆñº!~~f©ý‰ê|ßex¤‡)ÑV¨«'*"¦8¾O¦‡dêü¨*l$3*“2Ùó~çFša%öT ä™ZxPð=µv]/bó>`ØD  ô~ÚI´0ÌТ©â@ó©&è*±j»ˆµëÇcSeøŽO›10‘@' ÀøÖ–TK“)ÊôÖ8cSýNhi¼‰ðFr’Ï"~z½fäkâ>IóJư@‡ú‰ëZwz%/cp$È’W& ˆ{ëP·Ù™¥™¤AJÛ[¤s¶OÊ@ëEí¥ ä쑎ŠEF:ñÖ”†V$sLƒJBé1` AAßå¥"dÊ4 Œ>Õ£è©Û!¼ÓX4»0¾úÄÿ¬{9.BYby7®GDÙ÷®2UòÔ~ãY½ lœmói\…o›ZÜXÎ6e‰Þâm—‚žN¿ñ zW$Z<ïŽV[ýfÙoþÜŸó 2€ÂVGú˲ß“þa«ä‰|sõ—e»ùèÿq¦q9úͳßÓþa¦q9ø—e"ŽzÌ4òDxæâ}—ß=}O$ŽD¬Û/_íÉûéä€ñÈŸõ›e&Æzͧ’ "Ö}“þúŸóiä€ÂD‰vP+ç“þa«äˆÂDÿ¬û7ýú?ÜiäˆñÈ?Ö}›þýî4òDxäë>Íÿ~÷y"Íÿ~÷y 0¬û'ýõ?æÕòDž9°ÿYöoûô¸ÓÉã™ë>Ì:ùôýÆžHÃýgÙïÉûêy _‰l·<Ÿó_$H¸äƒýeÙGœôÿ˜iä‰p‘ë.ÍÿOù†žH“ Ylˆvœ‰D0æ«1ö±Þ™Ä®FàlXÖÎjý—RCC.ý“¡@Ð ›ñkìÚ覡¹v^ì~ZÔLÖŽa èh »Œ >¦¹)ýµ™FÑÒ2Iž0£|¨¡xWuæ9kêÅ›­y_lõ®f‘ê6 !´íÉ…$¼ÊôXù:íÅÑÕ¹;7zñU)~zëhæÓì²Î¬ßKw¥«% õ@ú ²u[ÑÞÉ6½#Ž,‘®…kŸ`?ýucÙ—Ñ¡|Ó[0û h@Ѐ4  Ë@ž€4  h@Ѐ4  h@Ѐ4  h@Ѐ4z@»1´ê>!IøF²û4/$$þm¬K£qèϸd|¾:!ªÉöÒm(–*ÙËÁàsät{×í^‘u2+9âKÙà=«ÛZÚ"¦"LýÕ9\6@Ôr‘µ”ƒ3võT„¾G꾫YRì­AtiËõ}N]ò Wë­Êì¯bFfêòˆÚ*U÷ûëòÇ’™{œ‘¼m_CZ¹Ñš‚`¹{¼ Eéƒ_âûê_!å³îRJ­0à·Ýhœïa¨V†äÊ…j‘vdšFÑÖGD¬Ë6KFn¼ýµÍ»6“¢©’ÏÿòÕRlcCƒ7±ûi‘)$“gRÙR BÖè4Ë$•Ó mW£-2ìV‰=-"mˆ9¦ý5Y´¬†Êåìm2cŠI“#”êdÑqDG•"ƒkûi–ÊdœÉ.Àÿ-\™0DŒ®GµÔ¶‹‰xòK·{hF˜ÖU+`Öôf¤cÊy­F¹·GEБ™"ìäÍSe—6[°5T“!tË‘úþÚ¶ˆ•ëʾùêdR#Êœ¿ç©“ \ÙAâSûÞµh”‡cd€å1ºê½µZŽ=„ÝôF:^ ã™Æ0|Ÿ'Q/a½ôHLô»‘ =«Vö-WAœ¸Ì8¼ì Œ:IF„[²ØžÈ·£9)îOUJ$“v+qþsŒy,^¼¬ÅE=3Rnº"CêQËcѵ­i¤e?ÐqO–`’¾àùÒ•v2ßEqÑ‚d”_¹Þ‰k°Þú«Š¯õæ³·µ D•öi¿Ñ|õƒÓC4‡ÏÓCÛVQ^Ù"ß¡¬ŠQ/,¯B€Õ®¶K{'! 3ˆ®µZ_fU²±"¬ª©”Xý΢I>Êú)ž©ÏëŸÁð5™ÕšÐf*z+ê9"…V¬ª‰ƒ€Sß·žµŠ‰­"ìNIe÷­$«³-»èœ„œ‚ªJ=õ¦—ØWôPâa°$e9¡u¬(Å•¹ eÃ1•ÍŠ½i$úa§±»t±ÃÉ&apÇéZ'Ù™-i4%¬ìu׳‹×D­ß·º-¡’×u¡WdèAs ~N£èÒßbÿ]`ч|¿—R>úÄú:ñþG’øÚløvv;x<¿ÄGš÷× :Gx­ìð Töò?#Ù¶7¬G¢½²9cŸýã~¡Zµ¡lWþðÿþðÿë¬_ì´¾ˆaŸÿïþº¿/±Kè9â9ýä?úé—츠å‡ÿxoÿztÏö)êa©ÿ´8ÿû§ÿ]2ýŠLƒ.ó’ÿþôÿë¦_±I²aø/ÿïOþºeû™<±?ã¿ÿ½ÿøé—ìTCžñ’ÿþðé—씾ƒÔÃÿ¼?ÿ½?úêdÿþ…/ õ0Ïÿ¨ÿzõÓ'ÿô)}2a_y2ûÓÿ®®_²è‘&42ÿÞÿütËö)Ëþ;ÿûßÿŽ™/±Hƒ&ùÊaÿ÷N¦±Q'ÕÁÿ¼¿ÿ¾?úé“û=L&ïæ\ÿýÓÿ®®_±I,/ûÃÿûÓ©Ÿìh‘&èd?ÿ½?úé“ÿú#JúSþðÿþôÿë¦OÿèRúSþðÿþôÿë¦OÿèRúSþðÿþôÿë¦OÿèRú*eÿ«!ÿýéÖïö+éêàÿßÿÞ¶¡iý«ƒÿ|ÿzÚ AêàÿßÿÞ¶‚ŸÑ+&ÿõÿïþº¿²RúWþðßþôÿë©“ÿú%/ å‡àd?ÿ½?úëYOìÕ?£¯ðF¿b¬yAŒÝÈMö5¨M¾ŒN(ûRxÞÃ^åÑã—è¸P SÉР hMøµ‰vmtSPÜ»¾µ¢ån¿-hͲt hMEMGѶèçI4qw#g«×'VuI´@È€ŠõÇžôÉ.Ãæ ÿŠ?}KŠ-62&*÷~|kIÙ“d‹ô#»ó®žŽe‡"€ª©™éèå|Y“.ÒòBiªÚáÏ'híÁ)lù÷ûâfžFf&Ë{×Í”ŸEEWD†è«~·©œ‹Š'†?ô¿üÚ·ÉöZDp‡ú[þm/“ìRü«šeeíHcÖª“L’ŠhúÂ9³çlñËÖÀõô¸Äù¼«tiœ—rXßz¶û"Z¢¾u7‘]6E5’IüµS°H$0`|jƒ¡ŽÌÑY>ÚÚèå%EÍ•ëTÊ¿Bì’A44úÙå?Ò.啌±âãÈT9¦ ûkÅýLŸG¯úx£ÈñPmù=y2ö{*öG§Ý`:dÇÄ=àÿ‘$ë9²THôx¿"s¦l«N\˜9‘ËŽä}^/ÏzÜ%%$fQ‹‰ís$šhb™$e$h^½Íº¬cûûêÔ™z!¢Ï=z-\f. aܯ–ïïZ•!q Ǹ1¯–¿ÏLf‡ÙVÇÜ1úÖ1ä-ÄL˜;“ cÈi8 m§tož²øæû5œ¶Ø7&ó§ŠEòBˆ_‡÷ñ_®§Žeò@˺_/þz.9“8v]ÖºƒOþ‹äÁ7vÀ?}£â›H~ξྯŽcÉm‹pªßSÅ1ä‰?êþã\~\iâ™|#ý_Ü?îºx¦LÐ/Ãû‚§OÇ’>ËÜ*4\sDsƒ@v]Ô€8Ö°˜ËŒ£ü=¹8¦Çó¬¾9²ùb½‹? n4?§ŠEóñý‡úµ¸ ¯—ÓÅ1ç#áíËÈÆñ§ŠEòăðöæMœqûéâŸÑ|±û$|;¹ƒ.?}ˆõ˜½ôiÕiŽ–E.bQ®š½µ·ýŒk€ŸKöÇYÕù…Ð@Æ|bMö€hšKhŽÛÓ+ ±—?/·•ö;Ô[ôW¯eòÙ½51AgÞý´“Z.Ò@Ù‹ëNŒ«-øÁAùrÆ»óÖšú-Kì¤MÌqÌcEWÑ7E3$@ä,±Ô—eQ9-q§¥-WZOB5b„²q¶þïYËôn£ö6TÄJb•kèçZUFd2(_䔎Åt4–ºVHÛ-‹%Äå0¨Ù#ί®‰» ¡þk¨¾”:ÍohÖýɈrbVÄ(Oá"ôM9tF¤¢v\|WZô-Z²ÊA5_¦„vXzC$Q»¿í¡}’I½TVõÔ}"›Áý5ƒk³ù^ˆ¿¿ZÄÿ¤SÆ“!Y]‚<ë‹In´s¥øOb‘Œ‚¶|õ©ˆÉ¢q¾ øyåTl¢{ª£ò¡)”ÿFßqþÕŸ¤k¼xaôp|²¾È?èÓáÿò¨ÿå¾}4¾ÃÿfŸ{mQÿÊ5ÿá1~Ú¾(}4þÃÿfŸð˜¿mÿá1~Úx¡ô<Óûýšü!ÿÂbÿ—SÁ¡æŸØì×áþüºx!ô<Óûýš|!ÿÂbý´ðCèy§öû4øCÿ„Åûjø¡ô<Óûýšü!ÿÂbÿ—SÁ¡æŸØì×áþüºx!ô<Óûýšü!ÿÂbÿ—O>‡šaÿ³_„?øL_òéà‡ÐóOì?ömð‡ÿ‹þM_>‡šaÿ³o„?øD_òiâ‡ÐóOì?ömð‡ÿ‹þMO>‡šaÿ³o„?øD_òià‡ÐóOì?ömð‡ÿ‹þM_>ˆù¥öýü!äí1˧ŠCÍ/°ÿÙ·Â lm1þ‘«âŠô<³ûƒð'Ãx9K›‰·¢È¢•€¢‹Š+¤GË'ìëñªúk©4]Të½ ·dè@Ѐ4¦üZÄ»6º)¨n]—‡«?–µ#|ëG7Øh@*pž#Àñ¡µ~ÎFᨡs²zÚóÊ6ÎéèÂØ€š=‹:ç_£¦_²Þ‘ ±ŸÈ}µ7ôK_gK± %]k¼NFùô?a®Ç%ÑuEê.ƒèâ|sggq®ÔÓ;ÿN–gƒ¯å©×Ìj¤Fµ{ R¥ Iÿtÿ¦§ò3Ú=ßÀvv%ý5ô¸?ç󯑣9¥Tn G—‘­NýW³¯œÝ‰‰ò×,¤t¨šðfy«¿&ηÌJèdèc"òÖ£ÑÊVËý\¿-hiÐi£Æ¤±þÑ^ÿùkÃýIìþ›Gš ’›ðuå=MÙÒBÀø‹uãZOD}|emVßÑŸòdÝ z˜Âý'YwôoÑ’?ªXé÷ƒþº‹òE—àÏSñ.ó—³m6*,¾úõòO£É[g7oø³xËÈá.2*ð$»×?+^Íø¼‹wÈ”ºc£Qè’5<Í•q#Õí2åí‘dÌ>¶PHöõq»GšJ™ªÇßZ‘‘ø^äw­Ç³±ð XÖ—FZ²ìªžµBèɘà0×é¬I›Š+B¯Ò{üõ ÕIC([êüëIìÃE§"æÍýõ[¢E Iʲ¯fÏzÁ¼MB”Y÷×CŸ½’½t^ÚöN„ h@RO'ôÔ}] Ö >À~!úêdz/£Bø¦¶aöЀ4  h@r·O°ïGѤ×G,ggOÎD•P) )5ã\2“gu¤dæ8iHâÐoY\²{7ãŠiŸâ9"hÏTþ2=´ó5#>+]—sÉÌVɆP#À'³­g)+EÂ)ÐÉ·“ÙóŒÖþƒïªù*6eqÜè£qÊÎ ¹òœ˜œRGP3y'Û]›£"ÊÓªFÒ&ÏØê“/ÑV~$÷¨¶_Ä9“ÐÚ«6yùj>‰ȱ}}:C¶r2~,‹%°ñÐË"_0¢ë\¥Ê“ÑÙq÷»ÄeˆâH`ˆ#[Œã3‹‰°IDýý«ZÒ1Mì¿#ãïãKØÓE¿]S!  h@Ѐ4 !®m »)'û¡úê>‹ü…¯úk³BòÿÜŸ×Qôj"²&QŽ){ãöÕoEUgž…]ó&`?[ב7™éz‚=<ž–ج|…ï^¥j6yŸÊte¶C›Q×Ü™¥™»oWÔcã÷×hÊÕ³“_-ƒwÂÚ0Ák¯«®õÕšpu¡ß9‰ïÓô±«’3Œ„äï{v3¬o8äç ³œMbÇ®V+¯4‘h =ëjQf\d…&ï€å«!i<’EkH|r-ã‡,bXçN>Ç®õ¥(²8²»à,ãæ±ðA™ÆèxÝXÓ›‡ÈÞJ~ãUN=‡‡pÃÈ éL¤!úˆ>4Ê-Yd´.}ßoÇÔ|…6h®õœÒ.†®nPí¢ÅÑ#UN$p’ÍÁv¤åÈiœF2»¶Þe0ü¨֪œYqt0ga^ºYüÆ™Cì˜Ézœ$­ìG¾´Fè·¤?/ÛBdü¿mAéËöÐdü¿mAéËöÐdü¿mAéËöÐdü¿mAéËöÐdü¿mDz_ж‰ô‡åûhLƒÒ—í È=!ù~Ú €F ÙöÐd5öQ ÈH_·í ÈŸH~_¶ƒ ô‡åûh28{¶Ó‘™ˆ31²&Œ/Q0À&Á³F%Aª&ìYÖ#¨›{c1!v˜’v©(¶'º÷$›?Üþ§Î²Ö{*}A ¨«ö:ÂOw±² ‡'7­ ZžÅâüÇe¦W÷ñùêE‘ZÎPLr$Š‚{ý5.h©'Ð(˜­´Àu½vJH´Â—Öì/Ϋʈ”lŒc–¸à'^ì| #mQ^6XËÖÈGÞôù‘âFhÈ K’ªÕßb†¤› ¬´q†CL®®õ¨§DmYLA•óÙ*äxKÂRO³Mªèt£3—#2…®Åö¶Ô¾Ì¬~ˆ©[‚àƒþ#í§ÈjÈÇù¥Ç" ˆ=1:%$ŠÜoeTç‡#!W®‚u—¶[¤‚MIÈ ßT|é$ÝÖÇ·Í”@¥W¡ßßZߣ7f”=.+ù“äê<‡À¢ £2™™I¯ÂGEÕ ÎY<]Uo¿¾³;5ƒ$7+ ^…u_J„i ã”*³’|XÒ§]‹ô5$ÀCʾ>4§ˆþZ/ÍBT íÏ“­<«F^Å©Ü~s©P­v¾çR§wf®)tFHËi9É2¯Ø^£S¾Äi•„J³«É:¹öPF¢NöˬFLÛŸ"é*Šÿ:Ósû"Pú7`I+@ ŽDwZé­œ¦£z4R“`ëFÕ¡úµK/Egð?]eôXŠoôÖ ®Ì;çû‘¬Oñ:@æ(¡G\޲ kQôY Ä¡”¿®µÉHôQ WÛ^¥ÑåidZØw_åª)+þZ DòOéÿ-[bZ}Ž¡1Aô]q: Q Að4 $__ôÐb¯¸Ð´‰äŸÓþZ¶Å äŸÓþZ[&(9'ôÿ––Æ(9'ôÿ––Æ(9'ôÿ––Æ(9'ôÿ––Æ(›Ðm-ŒQ–ëùilb‚Öëùilb‰±ýöÒØÅj|/ùilb‚Ôø_òÒØÅ­_òÒØÅk~:ÒÙi¿ùjAOq«l´‚Öëùil˜ äŸÓþZ[ äŸÓþZ[ ^<:ƒCPö£«l´‰ ž¡*Ùm †€4  ©¿±.Í®Šj—c"ðMj&F/úkG7Øh@.`d‰Ô}ösì‚H=ßÛ\ýBëígTŸËöÔØ%l¸#Íêƒl„ˆAõ­Ò9—CJÑtGÑÄøì³?è5Ãúúg§úú‡‚cì÷D_äh5  I¯EÿMOhϦ{¿€ÅìˆÛ_Oƒþ™àçüÍsª³•u¾ýõ¦¬ÁQB1çY¦ H£ŒÚ }6™[²Ö Õþ$7D”£ò×Hôaö9|ÓZ1ü…èUÑâÿÒgýªûÿå¯õ'·úSÍ+0<ѨƒÑ×”õb\æeß&˜õãDÙ)’r²¬;ÎÇL¤\ •‘5¬²’=ÑÉ´D’ec³€¨ ¢?]©"Ë£Öïÿ å|G¶ÁSø‹µ:öˉÉ#Ĺ[1࣬Ü9ŒÏšÌ ‘GÛ\ÿáäoÎ…·ú7Ü$ £9‡#vúiÏÒm;lÛv x.KP9}õéŒ1GžSRf£—E|kFmąГ÷Ö’2ÝŒ„X×UÑ—ÑvâAaçTlË”ŽH ±.ÍÄZDì™Kújq§LÖ>àê®É.‹d°Xt>‘÷Õ‘•Ùž!‘3G*€ žÿMdÙ¸X×]Wl²ýÁëí¡—Ù:4  I<ŸÓQômt+X4ûø‡ë«̾ à~šÙ‡Øh@Ѐ4  hÈ=Û»¦Í§HÁ&$²’"ú¨ë#®ZØ6&"¡O—Z?ž”’ÐnOm‡ÈãzeMêb¾‚›û*¸ *%w^5TW å°f*Šh…ð“ÖŽ)—&˜Ü,X`r!@>àjÆ*,ħ&‹Ï™42qX‹b5\šôD“(7ª¯CYÎ_F°DÿÊÿþgLÙ0‰Ÿ’T±Ç=:®m.‹‚¾Ì7Ćnã.,ؤ*µ#­r‡,œ©£¤¸ÒÙÞô¯}zO=£>xa‹'¤{àxÖ³.‹Éÿ£v‚3S:–s;çä‹ëιCÙÕåF­é3²òã? ̪«'ó¸ø=÷¬I6Þââ—ȾFÄÇvÆ‘'¨À ¿:̣͚aJ4z4VáDø{7±«à~š}†€4  h@ЀÁý4 ±rº®£è×ò¾é¬>Í ÉÿuýõF¢-â‚@í~ÚÓªìóðùÙºûëÊ’Éž™~(î$/6Ü#¨²Ö½4å <ö£;1aí{ž=£*°7Ù×8ñJ=›|Š]\S7 OžõÕ&Õ›Wg'søNlÌ•š,¶Z6Ê‘®2à·ghò¤ˆ óòwízŸðß²ùŸÑoõ2 2*YYŠ [÷Óþ'v;j¨~ÝðücKÒžRFü ng)Y”üŒÊªùJü÷©ÿ ì¿ñ.ª†IðjK!i2Ü`ZæîÊ¿¨iU _"†Fš ÙUš:Êþ›}ø‡ôSà(±ÞI>rBÒ$žõWôÉ>Êÿ¨oÐèþ $õ[-ɪó§ü*Nìú–õGk ‹@Mñg^ˆªÑç›Ëcì}Æ´s¦>ãAL,}Æ‚˜Xû0±÷ acî4ÂÇÜh)…¸ÐS q ¦ƒ  h@Ѐ,@ÐI·lLB¸2F@‘äX »ð ¶ª³^ù×5Xæ]$Ç“$…ƒFÆÔƒcõk?5o#)ÍÁ`d,Ôd…5}(ÿ1¬Ôq5o"!Ýp2pŽ9GVHpj!XŽQ5F±ßZuncpF) c,¦¬ßÛY‹‰§lS¾ÙM3e4@5A I«?—~|'­gâއʋA>À˜ìñb¥€=‘æ¿}uïcÛUWÐØgeàãD«9~o|B!cCÉ  ¡c¿Ì}õZ´gjB†RB`Æ?£+Òó‰¦ W’~ŸÈv;>4J.=•þF€˜m(+”Õö:Wö>Bò³¶Ùäh-Ø)!˜!¢GDª$¨óö:³Q¢E»#gÜ036ð ä§ÓVxŠ‘@b@ ±cü¯V’BÛeðÆ Ì""ÁýÜøÖ#‹f¥•l|ã—.MËíìu¦ e6ÀŽ32±ªíN¯ÄnÊÄ1Î!c#"ßkשּׁR+¶Å¨ÛѾ–y:òGD¢Vä38bÇm(/dqëÆ¬”h‘ÊÆ¸ƒŠz³°°8í­|ivÉÊ8üG­;UuZ­GìÊ¿e XÊ!‘_ˆê*¾Í4è¦ËúØ–«Øë2ÆÂº ¯CŠ, °#ªY×°¯Ð‚Ûy!B¸£ßGYxù$>5ÄìQØåkδªŒnÆJ4jÒLÊ?£ÛWXR. g¸’º'ư”2ì×Ï•0ZbÓHÎGâ:¿ ØùQY#ÁÇ+‘rOƒZT´L»¦!Q,ù ¾ÞÚ°”‘·mÈÆtùt›‘_7®Ð’zG9'Û5¨×zÙ†è·`Ðh`Ÿþ­RËÑYü×Y}"›Áý5ƒk³ùþäküNÐüŽiôuÈ·D7·ë¨úñÿí+«ó£ÐÇj£ô×±tyd¾E•Øô ·¹:4'›‹¡÷Ð‘ìƒ QæþÚ#Õö7¡°>þt$Ég‰ßB-vA“®$xо´J‘wWz‚Ôj´% .HäÃöФó`/Üûh›£~úyÝ ¢¡È$_Z 4XHú÷ÐÍWdr$ök½ W²KÙèž´¢¾«ÙëBÕ"KÝOí¡IäA?ç¡4ôC³ÂnÆ„üH GÐÇÎ…oa̓Q?¦„ºÑ!˜¯G¿×A¦ArÝ#怜»'œ•©jÅkd[qûR*@KW@hZL›êÔ~úH …}έ1q²=Fä ê]ÈÝ_ùèE®Ë§á'@&süÍfF£Ñ]dé.ÆEàþšÔLŒ_ôÖŽo°Ð€Tö4:Ô}] ³zÁÔŸms®€˜Å0ï©ì£t zõÑô`ƒªGÑÆøì³9¿a¯?õ?éþŸþ¡à‡û¡¯ž{×DhPóÖ²ìj´È›$ÿ¹ÓWØ}ïà?ÿ$A÷ú\ó9ßÈêËŠ²5÷}uq9æAÂ^%65—JDEŠ®¼‹UZ,0€~Í\FL€(ÖŒ—!Šù£¡ˆöSBǣƤ¿ûDüÚðUÙîþ—ÙæV#+ñAßÛ^_G©¶9vüÖ„øÕH–Èl<’¤•ªÀÓc-ØY –UëGˆ.÷Ñ‚{õ~ú‹rE—âϦá]± @áÐ:ú©üQóù1˜méþÔ ö:±l’ª+ü>5³5ª"@ÅH¦¯¤êJ«ƒR†ù·ûQñ¬í•z4)!x“­™­ÙX‹Äýõz ˜¸Š®º'ÛGÐ_‘…¦›‹ÈèrÈëT^&`üžUá_}i4F˜ïWÉpßZ¸£4Àåâ0¦™zñÞŽQ 2&,œY¤+ªHòÔ¸ú%Øð¶º=³ L²›ñûêöN„ h@RO'ôÔ}] Ö >À~!úêdz/£Bø¦¶aöЀ4  h@rƒF¼‘£èÒ«G#lÜà¦îOÁgƸB3W³¼å ÇÚ³¾V8ò2 dbIú(N•‘Ê-²ߺ.á&Cd)’•~Çï«S̹G{Fó Øï–LŽÄ£ _eBx=•Ê-ŸmÝÝ1êsÊ3üÂ=ôÂm"çÞ‡áàfù¾TÒ’„t ñ­Æ2S3)Ç¢¨“Gò:êqODˆÁ×í¡2Ú¿m@bÇZ ‘DÅŽ"̈&Í:”‘\­PÅ$)ãTËTUÏÐ~›´qò>ÃÌÌlŸ…_}p|i³²äiöŸh‰¢„~"Kru¸C›Z+¢šèsTO ¶•d´‹è@Ѐ4  h@Ðx?¦v.O÷CõÔ}þB“ðeöh^Y¨ïY}DËÿcüš×¢#Ïã­æÎ=y—äÏL¿z Tb üµéƒøžY+˜ß]oƶeFƒÔÚÿ¾¥«-Y+8oßFÑZ—»ãÖ–ŠGªKZ6‹L“'÷:)ÅÓQñí¢vh¶.µr¢5d™=¸÷©h%@d²mtÉ!Hƒ%võÒФ¥ø^- Ó wd~šZ Q&e¾Çíª)¬*ÀëB‘êy:–‰HAä)ïF蘢ީþ‘¥¢ãûSÿºÔÈR'ÕÒ?m2ˆæ>ÇL… õGÛüµ2bz£íþZdÅ õGÛü´ÉŠAê·ùi“€ËßdÅ õ+° ëV‰ƒ äyÑ;+ˆ|Ïçª+T3ùèLCæ= H>góÐR™üô€dWW ¤3ùè)Ìþz G3?jƒsÛJÉóZ(]y ƒàýû¨H½a:‰¹VH ŽX6¸ã–dr$Ù¯~É?¹'îOfþ=Ò‘Ž\ ©2ÆbúH[Œ†påDwtG·÷ÖoãFŸä0íÓ& ,¤r‹*Ixñèòçןn_å«oŒ¨¬û4±¼Y˜ˆQ–ˆ"ÁüˆûjE¿¢É/³$¸0¦4˜Ðí‘À$ sfF‘qbÇÑŽ2¶I·d+ÍßöÖ¤ÚB5díû|¸ð@ò SzkãÙ7×áñùþ]ÛµÑ*ŸcñÞZåÄQÝGdë ¶é£M$´ÇLò?Ùôšñ­Hʲ-Î9 ä? ¿¾žº/²±;ˆ8ËŠÏØu¨œ«¡$¯²±<æB#ÂXÔ{W._Eø—Ê3•Q:ÝýE¿òÕ‘¡ŒàªðÄäkê${êú!È(Ãä@ïF×Ð")¥Uln öQ5}ß±ye•ÈX{Ò]…ÙiÞZVHØo¾²ÿH¿ÜY9€YÅJýu[uѪÙhä•¡#åB½ôkV-¿F¡“0UPØÁš¾¢CWÖÈ)&#,+á/é€ìk)Ôº+ZÛ"i%õùE„ ~ývumôZT7 æ4*cÃP=ºð5[uÑ}ò¨>D3‘ßZi+¡Rû¶2—+é·»W­Eܺ$—dz¡³`k©Æ]±uz yÿêÕ,½ŸÀýu—Ñb)¼ÓX6»0ïŸîF±?ÄíÈæë‘@øþúÃô Çï%´¿ê ú=~×þzöžY^@ƨúÑm̼­Ê,åÇWƒ:âÛ³ªQ ƒ|_Q¡Êq?Šº½UÉAÂÇãï™3úžï¯¶´¹2øéXùçX"yÜÐZ›¤f Ýü]êiàyWš·€}¯\—#kGGƯd ùÌì¥A\XûEÈî>5EâY¾VD©Xý?jÔòÛ¦WÆ’´u£2,`½ròk^„ôyßtg—sÇêøÿ×XÌÞ_ã®Ðzª”o }ưù `Hß™Y¥†ì‘í§`m‹6 ¤ vEþšéY‡+œ¸…K’5e%äFãs”Šìñ HÍHN%ó³#ËՖè}µe%æƒ 6Ø}x‰"ü¾‘’˜”p2î»ô¢ LlÖ99c‡žý _‰1bH¾hqiªÊælÛâ›nˆƒâh¦iZHˆH»ºó¢åNÈøž»fëºÂ'ÆkÑ¿c®°äR…œçнÇ|ÃÛ$XçnØÐ÷Ö99!¬°„ä›E%ø Vòqh+ί’7¢ø¥ìÏÅPú’ á*ôkιǙ6;&é>"ĉ‘dyøëZ|н˜\r¢ÒoøÜÚ4F~"É­<°½¨Ë‹ñ(Í*Å )&ùuãSÊ­ñéšSâL‘Ø¡Ñ"Õ\ªÌø‹àïø™Ó|¼vØV5cȧ øÜQ£+)q!i¦&—³ZÜÚŠ1äb`>9šÍ\@îõÏÍ:øedÉñ&ã|©'ÙïöÑrÇÇ+¦;dܤܠy(]Õâ›äD䂽?×S‹Û'B ›ýïöÖeѨôWY:K±‘x?¦µ#Àý5£›ì4 7àbuF×G<–.~ÚÁÔg d OÆ>ú¾ÃèÛ7û•×OG2c'€ê™—Gã’?ƒ¿é¯?õôÏWôÿõŠ äA¯›#è£/øOödKDpè?¶ša;%”ô÷5§ñ(5zOÕÓùô{¿€Íì‰m}.Äùœÿ‘ÚØžõè8´‘-àþš£I¦ÅãKØ®õ#bT†{UkFb”0öн¢I š:¥ðb„];ý&Ú ™ÿ¦¼?ÔžßéŸg›¸Ì*Ñ?myG«¢@˜@ýu´Ñ’Hþ×ÑòoJý“/ÐɘFg.ßÛRZöTôeˆT±…쇟×Y]£rè÷cpËÆÂ„D¡¾‘`}ÜR£çb›-ºeÊäÊc¾õ+añÄ“»e»ð «–Æ #OÍ’:ž¿¾µ’3вËǤ—õ£«•¢R4bJìx±°5¸™j†@ÔXßZ!\•i1Aò(f]-drðð~«/²uÊ1Öέý¢ÀÃo_÷ÕÅ&D›L2‚ž§G£Þ«„_dÎHC|9Š+ù¬Þõ—òùd½ ÃØ±1rLr±#ÚüêÇG¢K•Éléþ§Û]Ž+nË)²N²t2Ѐ¤žOé¨ú6º¬}€üCõÕf_F…ð?MlÃì4  h@Ѐ4äêèÖ†•"k³çAïd€Ñ HâA£Ø÷Ð6xÕ÷÷Оƒêïü´5ì¤÷÷öÑhR$)>4‘k*(ÛC5ºÀš£ j‰Ð  ’MqëÞôG¿ÈƒÄ ß@÷Ñt‰~€4'²t h@Ѐ4  h@ àþšع?Ý×Qôkù OÂ5—Ù¡yѸôL¿öAÿË­ÿ#ŒÛgïÞ¼«òg¦_Š;0J°b,Ž:×tÒç«‘1nX¦2ÌÜ+ÙzZÊË ¬v^Be¯Î­Æ…H#ÍÅ”IÔ×z™DT€æã‰”“à¦Q \Ìf«­x6un"¤XdÀÿJʤû –…"'•–‘|Ð:­ª"TÎze8¥Ë ßÓzäÝ{;oèr,î,füw­%û3¢LY$r`÷ýCL[öf÷вò¬¾ˆÍú½€m7ufµ]$•ä1.a$y³¨ÿ¹*#8dƒ8(}ÛV¿cI”i'yœ®‡D†÷Ô×ÙÁhZiW’f ÿæñª·ì®‰):pïÀå©Rû$Ûþ–ëóÖ©×dC7þòæÔ©ý}¡›ÿy?óiSû/Çè= ßûÉÿ›LY~AèfÿÞOüÚbÉñú—Íÿ½ÿž˜È×Ãè>_7þ÷þzc!q—Íÿ½ÿž˜È\@cæþdßë«R'Ä= ÕïæMþM©Sû&ˆhòx3-€º'M¢ªcöÙ$š ‘¾¡ÕëIÙ‰hz¨ðýR[Hž öЖÊý´É¡ö aCì4‡Øh-…°Ð[ a ¶s³÷H¶Ý¹}E‘˺¨)-€$]€{5C³¢¼ ë$YI€®²`° ÑûƒØý³¼M?ÈåË»Oß/è)ŒÉÄ?­Fƒ*“Uì\u}€|t ¯‰«Ù¦›ÖÈÇ—=š1n«é$¸ ¯¤y½âD¾Ev‰²òšFëÒVuÉmjÄx¯¾÷ù{è´´Ê龋I$¸ØæDÌfPݪ©cçì¶ËYJ^™[_EWpÇ Œ³MÒX>|qºüêµq_d¿Ñ\­ÊSqb£3ÈŒàHLtª@=vIöl{ÜuÙ”ö.=ç!qLF(ñÖy%2ÁX·@Q²“V?]TvVÕÝ mÃ53žêÑ$éKêwl¨WbØoóïY©}‹ûEçÊÈ—*\e*‰ …yÌ´I*¡]ùÙßÀ²ë±Ûè®>lðíy²´†AŒÄƒÌ 4*ﻺ7Ùª•®ÈÝ>Œç?pÇL¹RDõà„Ȩeä¥H$¯"^,y£z‘[ì²zèé§Í²‡ÊÈEr>¤I ýÈôѯÙB7 Âl(R1"É|¥w*‘€’¢}¬WG¿cRUؽ”ùÁ2¢ÃÂxÌRDîd’R¢£Øºûßµvã¦$þ[E27 1ó×\QEBñ¹%Xø±Æ‡‘äÝÔK횺Õ99ù9SC–ñÇ2…B’›6ªj¨]Ý“}]Õ”Ò¥lÌ[¾‡agæî²«ÇŽÊ¶‘ÈÇŸve ãØ{£ÕëMSÛ ÷¢ût™óᑜ¥’iÉAo‹ È Y]‘W¢òå|œ‹$Ò¼–hzQ3Ÿî¨¯Ù[TbÞw&XVxIúìúrFèöBñ'ûc¾Æ³%olGKF—r0a›Ô*’F¬¬}Á‹ÒYVʪôa›q0f$$²3ªÉ*MP#Ø÷º7Z˜ë²Þú4ãî&@19ÅäÝ¢©WŽîÖ‡Ùö:Õ:ìÍ«èŒmË'?„r ‚'e‰½[,¤ô¡F¨‘ØïÉѪö¿DgL¸xòd¦CJª5ì’HÀšf4GƲ•¾Í=.†ÆyâÄ>´J%•£>”¼€!Xù Oá¢(Q?–·WìÊuè¦6ûš²ÿ/gV¥<Ühú¾˜=)°Iý‡Üõ« ^É6¾ŽÖß:ç`Ûé2¯Ä÷ÆÀ5~õ®†¦lòîcbá+$.«<¯/ ¾ºdyêëC2)òóf$m‡Æ§’(eõ>¢éÊíhP1ÈnM–Of#Úüך«£`£>æØÐe¤ÓzÄÑ¡4’~üA¯ï¬8Û6¥HæîØy“ɉ†¡cÊ”ýlÅ[ð3QM ýïªu—Æ.GÑ»cùL‘!`U{w¬Ç‹\¹Dœ¤Ÿ;:}¶RUÝiÀš A°G’(ѽtš³Ñìby1~¦1ÿ»-@:F¬ûÖ¹ø¨Ûå´dÚpàݰLpÂ%¦F#“ø¯®û ×TMñ,hywcóð Ç‘f•:–UOVëÓ$ ýMÔWÄžÂåf½¢y36èòP“d¡'‹~V(×µÖ¶“Q99\ŒðG–ÐÊg*ÀåâÈã÷U#û^¹øíÙ×:Z$³Š‘r2ÉL¨`B׊ ]ƒgÅ Ô|H.M›ÿƒÕïˆìiâ™>ÈgÏ’££"au'‰P@4HùŃ~u¾8Sdä•£WÄðJpVH¸ž% cêå"­Yñ`ÕêÎ9„è§ÃøÒ¤Ó¾Bpx¤1ÈŠÜ…ñ 4,ÃØwcXããÁöj|¹ ø åJ«‰ƒy 2J“*P4hÙ¶ 6Ekr†fa' yø2ñ TIJÏÅ›’)÷ ¤Ñò@4kƧpEäy²¹Ûf~oÄEƱˆ‹z†é‹Wjz¿î†gĤîÍÇ•¥^Œmµ|Æí½¯6HäBÄ[$P/£Ð$‚(Ö¹¿éÓ«f—;]"ù{fGËnXÙ,L×âuRX¸‡êÒàHžfÍß áä퉑·œp&E_ZÕƒrÈ;RFº"õ¾>5Ç3ÉÈæì˸àÓoÏŽÞl•P«+gbXC¥ök¡íž^/#²ñò਼?Þ+R\ ÊËt£C øzLY*9¿”Ez«‰©ÈQ~f`$“è[¡}GÂîÇšˆO…¹=K5ªßz«‡e|Ê› x¹qä«w"«ÍêÇŠ™—&¨~ë€ûŽ$*O¸×IÇ$bÄçbü*¸àšèݾ¸®ޝ™´_#á²îÓC-94¶ÍöoÙvÆÛ¡ug±²u׎#—$œÙ¹?×C‰:S~?í¬ÈÚ覲n]—‡ÍkQ0ú­ h NŒ¯ßQôimœ¹ýe Ä.c\_gu^ÅsÎ#—¦/í©rú4”XÈvÎJ:·'èËT5.¶´º#èÛ'Õmtôs3edäÃx’Í_q¬Þ¨Ò[9ÿ&ÈZADÖ¹QÿHëÀ¿æ/mnKÀGËíc_>4{M‹).¸öO‹Ý X)玽øüµ7ôˆÔ€wã­?À2îkňø’<†X¸M_¸ÖmѬRfg.0¥r(€j½õ—x•:‘âŽ÷¼¤²#JÊ¡Í îµá—$Óì÷GŽ--oÛô™øñÇ”Åþ¾û­!É6öÉ>8¤ÚGºÈÌÅÇÅçrV;_,@³¯¡q]ž”¶ƒsÛ$Ej; $S¢JfâÂ…ù:èsßE“Íè%Ñm †€4 )'“új>®…kŸ`?ýucÙ—Ñ¡|Ó[0û h@Ѐ4   ¡…: #BÛ!€âzÐ%f|œ˜ LÔ=µÄÝdZ)£ÚÈ~Z'b¨j×DžõLlšwCôÐ{'B€‚kê$þš},Ùç¡uìŽUõý´*TA‘Qm˜mFÒ&ÛЗÎÄŒ3!Gèu2F±“]þ)·ò£’¢ýùh§¸I \Ìg#„ÊO°½2‡Ù1˜àÃ+»ûh}‡&®@èLPs&Åè:eô2Ѐ4  h¼Ó@»'û¡úê>!IøF²û4S#ýÈýF²ú7ˆ“¬@ðëoñ"üŽ7Õ›1}yWäÏL¿v&›P>ÚíÄá—ÈÉ•°I“LòѪ4u‡ÆÙ¥È‘ ðë5qœŠtu û5å‰'á¾QªzÄQ³§ý“ÊL.>Jä K=δ¸ÒäÑ\½Žy$å ÐÏç¨ø›zb<‰-ŒÇØÌ3 \’<‚zÖ”í™s³^o/•n=оµ·J&SvyL¥ù§24„:ñ4Û=б!_)!²>ÆõkÙ]_@íœT*ç0¯ÏK•vOÑ04‰’2dÉ%‡±:$Ó»šª-$ÓÉ#˜òJò7`êÉÉ‘(ûE%|¶‹‚æ÷âﳩòk²¬SèwÌËò.d³îoU:fZ¹ ?2‰qå2ßšñ¬ü«³oè"9K:Ï&a`¾=jü“ìFº:ÆúŸ·zíäGeNø@é¬þºy?ePD훲Ýj¾D‹ã'ø×¿©¬yIã#øåøc­y?aq°þ8¨éäý—ÄÇõ<£ÄÇõ<Ÿ±âãƒÁßO'ì‡ñÚëΞOØñ™¤Ê‹æ~xe?Šãí¬g³jŽîÍ#> –¿¾½ä]kRÅ$‰¬ºmûf=È}VwP yYˆú“C³âµ[Z²,­‚mûn 2ÂÓíd4¬ÔI$žÉ¢I$ýýõ$âU’Žq½E†Q_ˆè”l;£.ó‡• lˆ$‘” ¹  `Ðèë2’B*ÆÉ8øqFˆYXÍž VUа»Ñ°¶‰$õß BÅÃæ5rjêúëS(Õfœl]¶&—2–@Øü@xýþ_aªš¢;LF.Õ ÿ1“ gd ‘Ƭ$Ð ÍC¾€ ;þÖN$Šeðv½¶´`¬r?¦´î¤©bM’6;öòÒÓm—i$íÛdØæ9â•R',£Õ`ÜÙåw}žïÇ^5‹Û+‹éÛ±¶|i„Qã¸@XôCÿÔÕRM‘ÇGHìøç/ %XªáFË bÏO}E{ßå®Çèkí˜ReŒî’Xäc™”5xä«Ç`õ×숶¬rþu!"Kb‘Š©o$)4 ÷ Ùû›Ÿm1+ªc=I BÀÌäÏ•“Ä}€ªö­ &h8xï4³<@´±ˆä²He@â?¾‚FMÃdÆÈÚNвH±1^\¤g4bH°+ÏWÖ£tTìdø˜Ù êK²ñ£dx`ÃÁö í¬]œíëkÃ8ð¯ãYÜPèÝ/Í{ë3m#¤R³ŹZ_'ÝŸÄ*ö¡®VÍ‹L(ÒyçbO®T0ð€ÿ©¿ÏòÒú v[æàÑXu*ýžÁçìþÚ‘o0ÒÅÈv-±cu0;zÅ ¦I™‹ñ6,’Iìz#£c­{9¢ú«QöÌ˺aÅš3Wš ä9Í}$Õ $ ¡}V‹5^džú3áæHfÁ4LyÚIMIo#£c _mcÍ'èÓáŠé“uÂx21`Ç0Œˆ83ªý#é* x°(~`zµæÚ~ŒømNᓃà ÇdX˺ò<ªŠ= &ꮵ¥Ìœ©ÃJÏE*€(趻ݜ)Ó}ÉÀÝãÃX¿”ÊK7ÚµÂ|˜ËgXÃ(Ú06v6FÌ#\H +Ä)Ÿ«‰>ׯè~úždÍxšfÃñ(–_K`J<ê>mÃò4ln>:fÅ ^˜-+0 `…’¨ïi3ŒÒM¡9»l_ÃñmQHæÜВܹ(Øú»èõãY›q5™M«pá0Bä—f,XŸrI$šY>¹Ç‘û:>8ú+¹çbn|¢ÈÇfeF RFRTÕ‚T‚A¡`ôhhùwH.-lØ›>猓gc±-£*ÌêA$Ñ$‹¯] Õlã$ïCóâÅ"<é½EúU–F^¼Ñ€ÃÞˆ hÚ]ˆ«èç;íx¹?73—GvBebªZù¤<’hy×7È“:xÛÜp"ÛÆÐ"2Db+/"m1$Q²I$ôo½O*E\A6ßÇ(&U˜Ò‡.@ðÈÝhYûUÊœ¨VkŸbˆ`¦Üþš£†C+Èå@Jy†^ºèÕ+½u´aªó ðöX+L"@¤Wý‰$îSç\§É¸AHß2dÀ³­€Úë’9µ‰LìÄË—ÌGCY”šEŒm˜bÞ§HÞIÐuþË\—#Kg_{·çžE•#¨È6N¯•¶Oì=ê‰9‰SÓkQåMìBów¦W)Š–öÚ̹–0U²ù$¿PˆcÛΞB`^ˆq BMQ¯cöÓˉW—eÄhËIŽyßBµ<ÖUÄ‘»oÌùäætÃí®Ñ•œelý5£°Ð‚füzÌ®Šë&åÙxµ¡ºÑ€Ð€\Çè#ª÷Ô}g<ÝŸ×\¿‘Ø '³«L”€Þ©IK Öw‘FÙ ô‡_muô`ˆ$W§¢&ò8ßÙÜWC\?¨ÿ¦vþžó<,K ƒ¯Ï_;IA+üK.ÅHu¬´\X|þIì¹=ë96J_Dü£õ÷Òåe÷Ñ\‰åš&25ÐûøÑîCøžçà"ÈŸ¦¾â|þwò;”XëÒëÑçùî´TΡUÙLu4Xs¬ª+´_Z3òh1D¸®ÁïAþHaȃöÐ+ظ¾©ã>ÜÇŸ×HöYôz/‹±w ­»äqù5í¯W$[G—Ži6aØ6ÍÚ=ò<Œœ©Æ‹UkQj]ä’hö„W‘¯iäua÷±©°|èïÐ4aÝŠïZfd2*£c«ïZöb‘2(1B.º>‚¬Ž{G‘"IR.À½q©4ÎÖ“8ð†dŒìôKí¯?ü<¤z<ê:#଼yÒ@Öï½#ý<“L’çRTiøçàçø§QÑúdVóZíË N¨ãÅ8žÿF°n1ç¶k¹Qá˜b2É›Ÿ,Z£Ùe÷þÇ^½3ËìbUtuL¾ÉР h Iäþš£k¡ZÁ§ØÄ?]Xöeôh_ôÖÌ>Ã@Ћ«Ð€4  h@ÐÕ]èUvcÝ!Y!ä|ƒ¬É`öghN4K—ŽHƒ/±×4š+Û£|.²Ä|®©Ú1Tƨv5LtÈ®:tG²tXƒ×ç¡We]¨t…‰ÅÞþ*ƒ½)?/^n^e#ÑÅÃ)mž;âéÚ¦É*[Â)ìëË.nIvz£ÇôcLÕwa&[òQe÷ZÊn­›ÕèF&âï$ùÔ4×Ð;’ÑìÒ¹¯ #Åšä°µâ|.q FFý·âì¸$ôZ^e{ecÝk¬9¦ŽRá‹=6Ͼbo-©‡âCç^Î>U3ËËÄànUãﮇ?[/ßC  h@ЀÁý4 ±rº®£è×òŸ„k/³E2Ý}eôn=ÐÅÿÖåÑ?‘ÁÄ›8ך?“=_v°ïåÔzïQ8=HœŒ¸°ÇólßÛIIžÅ¥¨øÞ¦IŒ2æb¢òiE`t´‰‹ÉÇâL´ [‹E© \ÈÊ$à‘æ´R‹#‹D>^:)c*€¥¢¨²LÆJÊ>¡U¦Q$qó½iÈùËbšµÂzz;BÚeÁ‚Rû 1“žc|# ›#Y‚Œ¥TY9%vO,²Ú0A[úOˆÕø§Ðù5vZI¶¨W“m÷F€ ªÜ¢%/²©•µ<«Û«ããE>;ª r%v_')‹úŠ‹ ùi$“èFMˆLí±‹ÈÛi  õÇ»ÖT¡ôk}†6fÚѤÛ×éîµSã~ƒS^Ëœý£’ÖÛø½ÂøÑK¾ˆã?³¥Ó·IuÅQÈ]V»(Aú8¹ÍvË “n÷Ç_ÛWÇ¡ä—ØÛ¿îËûiã‡ÐÍý‡ðM»þì¿¶ž8} ߨÛ¿îËûiã‡ÐÍý‡ðM»þì¿¶ž8} ߨÛ¿îËûj>8ý 佇ðMµ»ôÈjxãô3d “nãõc¥ÇZ®ú rû#X lhSˆCB´Nº+MíVÛ~ú­4fÓ赸ÔÂÇÜh)…¸ÐS q ¦>ãAL,}Æ‚˜Xû3¾nRàâEfúñ»‚Ì¡[}?R±$’( £Ø­XÞ%•d?ir¶xrePEV x?þ:Í`@C¢‡¾xÔWE}“2¤EŽ(5õ=hïÐUì0Æo¦ÑÐPó÷Ò9ìKÓ+ec#œ¨Ã1üø$×câú"9rtÀ„{öÕ¹eÐ¥gU[‰õ×ß]­QÇvJ9b,õí¡%ÐÍ †€4f=ÙÖeѵÑ]d§â¬Ìlyq\¸Ôú„´nWÁV¦ï±Ø«Èîõ$›‹:E¬¶+\†82L¹.²å…q#(Æèt.bÍŠ7ußV«ÐObq· ³¼9¤ƒ¤e ?• -÷'£géÖ±JHÊoweÞ¤Êi×jÎBˆØ¨’Æd”«Qðz¡ù÷פäû+žù²m¹1I¹Jta²RÚ;G%€Zè1ºø÷Ñ ŒtÍ0myÍY1éܤƒÈ}ú~Ýk›ãŽÎžGKôq÷ÝŸoÛw(¢f”ؕԥZ›¾ÅWuÝk…(4ŽžVä™Ô‹á¼Qˆ#’bÒPþeö4Q¢>fåhæm˜3.éêe3 ž@ˆ›«úôÅwînìV¼pLËä›T&ß,{¼¸»ŒRÉ´‘…u$›¡äH¿Ê‰½WÆ› ‘Åp¶UL¬¯"v‘R(äV*â, @©#ß¿zÖeƨ«‘Ù>Ï;²ÈZ¡Ca}µÇÅ/&º;yWŒôJXÐÚµìTßF<í¢ ü…ÈrAP@¯{×9ñ©3¬9b*/†qBÒ³2Õ*ŸôÖ|Q‰|²g?oÚŽÏ·Æ9Ò_M ŠX5¿%Ù #È¿ÏOhy[g[0I·ìòG‹!R‹HÕd@º6Ÿ}tФs“¶r¤ËÌ8™qî9îË*¤„"ð¹ž0Iª•I$ìT4i0¤ÓИ¦žm¡„¬ò®qŠ$ 5(äö<çÇ^Fû^É؉’2Ì…Ôòb¼hÙ±^AÅÅQîõSl×—Ó:xøÿ/ƒ‘4:']’Iäé‘›ˆ™qz.Ì;èeÇ!âÌŸÀaô &f6{b{×? :ùdIø{ñ(Çé« yÕñ!å‘-±ãœ¤È2O 5WÊÑŸ+™¸¯Øûk¥³š¯F=Çf‡:_Uܸ½sŸléLQ“7.}»)0±²*92på‡*~;ìQ°+‘="±TŽmäìéfc&\~œÄûäk2ŽHÔfâôyÈ£\­á0S82É,±¼f@^> ö@€JõdØ7CÛ/Š,éå‘|||¹°²}ܶ;,‹À‘$âúäPW‘ ÷x ´O,žÍ?aâ>NW¥¸ ¸ãe ¢;PH°=ý¼]{jÇŠ ™—$š7ϲãÊåÄ…TžÕN£ã¶irº.»\ ÅõãW‘Ÿ#l§ð<4W@¿ï ›ö:‹Pò;9‹Œ1÷¯–Yÿ®¡çà)$"ÄW㾟^XQqªÙ_-½ÜuÛŽkkýݹ%4Ý?÷V9N°£'ÄÚ_ïfœ£ä[õÿÑ H‰ù°ÏÿMZIt“ÿÇÿfr•÷Ûg½ø†È—¯gâxùõ#´Ù ®Bλ6‘É&Êœ˜Š’+ƦIèª4Înéºäàú_Ãß›·.qz|©h[õGé5Ð=ÝÈ » lèãd@ð¡L*•I×Ô¿]w箵¤ì˜èäägì#lŽ>—¦´–$««¢‰7vPf•½Í.þ¸Éš)$–7…ÝKEÀÈ ‚W«c`ÝhÝC¶-Ë35ÊfOÐŒœrc óÝ è(PdS(«£þ’ûLûÿå¯õ'³úcÌ©ù·€uå=r6×UcÕ~ZÕª3M”}Î'vd€v´§á?ÏôüµÒ 6ýçšt½”ÌÊ‹$J>5ùy×Õ’y÷áÇýu߯”.¾ŽFåWö{}¿sΓkžX ¶ÃÄde1ß©?dWW@@DƒÜkÝñI“lÓðÞd{‹d/Μ•GQŒŠµ‹PﻯzöÓVTuLq’®µªFm‘$h¨XGd ¡¨õÑcýÄâJrƒ3ÁƸó©ú+ìÍ6^zn£jŠÁ•ÖT” !!sSÕÈ~@ãZÒFm³£²Äèº YÄÆÝó$Ûó•w‘“3H‘âV¦ ¼@ ØðÖzžÎXÑI7)ó²ž ·t 0,TÔX·*°Aèà×~úËTo#OÃ99™¯6vI’„X¹FŒGCÀ,kÞªï΋°íE”a|{kVŒ4ÙS:1 ´=ΖŠZ2®ý†–ƒEºåמ©²ñƒVt2û-¡ [Æd»l ¸}(¤%BÙáD:ö$1¯`G¾€fØs$Ü:™ÁgZ…’Bõçˆ _½^€Ç¹g˜wQ“»Œ8„ãrz®X‚¶ÀŠ…ËÏZv#3uÊux8+Œ¤Ž<. L±RÒxåÕ±°hp¢.ô4º+½4™à|Ê™Ndë4}rT_P­kH>ãïÞ±L¡´dn3œdÉÜÎfª"ƒ ñ¡FùƒÝö>Æ´d}¾¾Ño¸´òFг+²ÜLME|Ùüõ³/±ûÆd»l ¸}(¤%BÙáD:ö$1¯`G¾„¶ÆÁI7¦pYÖ€ád½yâïW 9[övé“+aîƤ)Dò]‘îT> ð{ê9;ŽcãK¸@ cº˜21dâò zºÚv!ÉlêÃÍ|kÄ(x”‹«¢‰7vP’«¾†à|FÙ›ÌqÁž¤•Z'u&0 ÔŽ­ƒt=ªvƒÐͧ~šY çet±Ï¾ºÙ©"@…wTÀ Êqf£Ѷ|ÜibhÏÖ:¯:’”ZŒ®Ð­µñàSˆùÃ{1ìjFº5$êÉÆ’|lãŠúG°O¶‘µ*D¤ã³D¹9‘ÉÆ(ù(ðkZrvED|ÞŸCQ¹ú ùüïø#S.O¢Ô É—œP‘·Z­Ì(Äãâo{äã*)ñHT$+W¶¸.NEz:ÊÑçÞF’fw6]"Oƒ¯#+=ž¨È³ãд®9F´;Õ»ì‰P¼¼isel¸c* Þäý´nÑM13mëÂùŠaùê_Ð, ›ÄµzqÐý´ÊÙ¢øéêg¶à©Äâ:ó­¬ê|=,îˆÐn{WŠN<¦9PÙîT±[aÙÞ¾–»>v®†~º¦@Ѐ4sc¡qaÌ}ŽƒKx?¦„]‹“ýÐýuF¿¤ü#Y}š)—þäþºËèÜz&Ax€áÖ¿‰?‘ÁÃíÓkÏÉž‰?Š;X„ uÜ v¸œ%¦/?äq áH=ÙÒp´!#|=#Ì'3’Gb޹øš:.K*~˜<™}ؽÉ,0’¹_Jœ[¦eLŒ©£¢êjÅ}fäi(Ø¥ÉÜÁ?R5‡)>ÍcÐ w29Úz¿"< Ï›—‹Ž&W^V®RŠQ“ |ÍÂh×Èò|hÜš±ŒS+Û”LS¯:‰Ì5V<ü£a!zðGßRåeÂ-’}ÎG䮤äùÖ\Œ˜ñ­2²ÍW~ŸY¹%²¨ÅôbM÷4Š)x kšågGƘÎSK–ªäcÅëñF새•Gåz¾^Bx¢XüS¼^°ïóÓÍÈOýiÝȳ0ýôór ­[·üqûêy¹‚þµnßñÇï§›x ëVíÿ~úy¹‚þµnßñÇï§›x GúÓ»xõ€‘Õòòðq~&Ýþøw÷ÑsNöO+GkáÉdÉ¥sõ7žõèây+gŸ•b΢ý_ÿu9K²xþŸ¶„¶G¸¶‚Ùòèl¾úüûÐÊ×dÒÕÐЛ:úGí _²Rl·ùè\˜˜ÂŒKÛ{éÀ?Í!>EBÉkËÍùÖWâiÖBXF $d ñzÏð5ü†È1ÿ†Žr±[ö:¯ñ òããC&AË!R2Ïvi@²hyèjE6&þÈD^'å·WøX÷¢OÓ+þÅDV½«ßQRz#±yùXx¨±ääIÍÁ(#˜õ@Ÿ¤:ÓWžÄH»b2,û¬è^¿òŠ€ iA=jÍùïHÞ$•dh\¬8³Æ î§‘ l‹¢@-T š&Θû²ß茬ݿ"sŒ3YIÂb: (|€IèýŽ’Zì‰Ó¶O³ªL˜ùrò‘²9‚¨ ìsß5ùu¥x™½Ðݪ\,©½\\ÉŸi—ª»×ç¬%RìÛvº¸dbá,ùì-‚„’ÄøI?ôÖêý™M$.mà e’Y=7‰¹ ,šŸz÷ûD­4-'e~{ D'1ãW"ŸÒb¢Í `~äiÇAº{E~smL±‹.|Œ÷Ä} Äšº E^׬â×nÊÝú¢Óæíù[³Fh²£q±V9U,X»ØêÏ¡˜Ülü\êŽÆRª•7DÇG±cZªD½Ï‘q¡õò2ÙPš–&Í Éìý´«ö-¯FIgÛ2c)÷ Ùy•QʬZ详'£ÕX¢|^‰S Ú²™9TÑ0ܘ¤ÄA‘œµ‘Ý’MY|_u¬É6´X´óâcGËÉ*•÷Ù=Ö’M¤"Ìí—µ‰¾WçåZ…£ºº Uuíz˜êËtúŸƒ#6*e³&š6^@tHÑ#Á>uªj=‘»}MÇ+äC•*B‰ÊÚ[}Xº×í÷Õ­Õ’õШ· +å.æàGA£xØ5š¡Ä‹$Ø wÖ²“RÓ+iÇ¢gÎÛd_›“2V¶+Á!bA*ƒçÈÑÆÞØMWEsÚq½<•Î%]K! [ ,’$<’:÷­wEoF©HK¶ä¦èjÑ¥öDÝtiÃÝpbxöés9JH„‘dj H²6GuÞºÇHå%l|¾ùEʼ¬q4J"‰,×¾´b™\}ïlËõ °D)ÍÙ”¨ágë€ ô{:ó¡)‘÷µË‹&jä‘$ç+hÄ‹îÅuÝŠ½ L¬»ÆÜqjÌÜS›rä ã\¬Q±VŸQôit3" ¸'@ñÈ¡•Ç‚°Sÿ‘>³4Ú7Î3 ¼eˆZyD…¼ äâ Ñ«¡uöö×=âtÕLìifùusÊÍB.°£ö½e¦¶TՌ۲±²å (`²Sâè>ýØÒš–Êšižƒ 75dùYƒúRä¡Ð`,άx×±Ylk0¾‡u¨ú º9Rï²ÅžÐº€ƒíï®>F¥Go\Ee|Jq*òzâ¼I MMPô.¯ºñ£”±´1LD„  ÌÙÜóÿµÈn¨5WåU§’hªijüBr3†"LKå@€ÕVTH¾À=jJSjÄaÃâŸT»C 1ļžÁ¶E‚|ŽcW9ÐÆ×âµqó*àD¤VRfìUï«Ó9'L˜Å«: ¼à|—ÎŒ‚T¹@¹‚¼k•Š6*Àø×oGùlå¿ÄÑáâ¬Ë’H -I²h  <“ãß\\¥g|Pè·ṳ̈õáAÀ~"}õ•Ë'²¾4´]·ì†_^5EO_+{'Ž+Edø—ppć“+ Ëã£L+±~ÆÁý5·ÈêÌ®8Ù‡nßp žIbšsÅ .D¬¡M÷LH#¯#XÎf°ˆÿõº£s#V¸ØuBˆ¾ìW]éœÖ†jÍ»wÄXÙ_5[¹8*¬LÌXY (ÝjºŸë 7ÙÊq^ƒsø)ãšÖuç*ôв@±wâûÒ_¡Š ç*F*Œ„"Ù`oüµÏÉG_bÅ,rb‡ÕTPÕÑ5u@ «ºÓ98Ù0IÐCñ:ää>7¨hQU`¢EöëE9WCeaø¦9¢Ž`S—& ï°O‘ÑìuÖ£œÓ¡Œ*Åã|H«Žù&rŨ©]P¢/»×wÖ‰Î%Ʊ£âÑéP’YŠ‚#byAjìz«èê©Í:dÂhèl»“î8þ©t ‹V_kpyvbiG¢›Æ÷Ý,X­(Yˆ°Hš:ô «£öÒnK¡ÅösŒg/vŽ¥È_¯”œr¤¢nú¨È ×,ÞIVw;rÿ‡úàÍè™8w|AÏ·“_ŸöסüN ÙÈÇø§3)ñžSè”%¤’–°= {ô:åŸÊŽ® ^&nχ‰>F4³}%}_˜ ã‘¿DÝwzé'Hç¯f$øÁ–bI2EXÚì]‚*ÅQöö×/$®¨íãXdüG'ÊŒ©¤¢°,̧Áüªïò«ÔÊR• cgyl¨b?îîêÎ:º8Ù?´YO‹uMÄM€&®ƒU]wW}k”¥-³ª„t/ávÛäÉ*ù¹ 8$¢¶D¥MP#³Åˆ±c²=õ®6ßf9)tu±·­¯,ÈÐåŽ1'7vR£‘È+ÑìXëκŸØÜ,ülø½|bü>ï%ô 0Š#¿^>v.㎹˜R‰#rB¸°  _æ~úÄ»6º›¹bmÀ¹XX$š€«4 ‹'¡cPÜ»,»¦Y+†L#ª°ôáv1 IP@ƒäëQ25w,'ÜØ™ gTæÑ‹$^}ìuç°u£™»ž.fCãã Fef08[SD AtOƒ ' tÃÜy6Œê¦½OI‚·dZ±0°{ß@L9Ø™Ë(Åœ?¥1ŽJ #¿5cÆ£èÒ[0Ï,p#O+U³Ð²uƒ±‹;#jx¢ÍÊʘ$‘òŒÅ,«j–*¤P‹$ubÏ ¡­Ÿ……Ãåp)x±VqDж g®Î…n#gü‚Î Áy˜Å’^}ìuæèGѺLì_šo¬=KÔôèØP@³öì×ÿËZþ& þëûëFdq>9ÿòvןúŸÀôð+™à¼D ×ÏÅÉÒ=ò’aÑú¯ö:¹J¯þ1Œ÷ÿË ª£)m(ÇAbëQÂXÙsŠ•0ôGž:a%R}Î-Ò=¿À¹øk³´o0S|¤æ Ò÷Ýšt{u¯¡Ã¢x9šnÑ®-Ã4¼ÌHV‡B¤XX`°Av´ú!›†\~¶6J²›‹DƒçóS$´Å6W+sÛðÀl™ªÁ4ªXÐMHÜøú&Øz 6ìl™@šqÊòòÝGŽºVm[h¢ÝpRtÛšvõ,(´b¼¸ßÕW]Ñ6¾·ŽREàݰ'Ë8QÎÆAÊ®6 ÅH DƒÑ£×öÕ}"˜ûæÙ“U,QúŒÏ(áßÔ ’õäXüõJº<ú@ÍÆÎš'›èr^6R Ø`èmx¿¨‹“I¿éÚŠmž|X²|k̓nVj¬åïÖ°Ó‹¦TÔ•¢,)uÒ*nº$œ•öH7Ø$}LÝV¿ìˆ¢®ÿùdÂnxϸqß÷ÓleZG»Äøƒn“ã<¦„_Y’”‚9×^{ÛξŠx¥g¤Û¢0wÝ›Yñ}J ­+9bhø¬øª÷×gLéôL]íÿ.2-¸–⌒H»ßGÛÛO#èx‘oõ›@™E˜¤ŠYxFÌHf€$bÉXÖ²lÎ lÕptÀÀ‚ ûƒ©“."q³¶±º±rã&R#äêül ¤Ž ,€E‘Ý‘­&d¦ì¿ÄŽ6>^I™©_*b¤­±*ÄX±ÙàV´M—ÌÞ±%Úòs6쵓аX_‚(ƒc­bm¨èÔÏgŸã‰äB±µš?mxÔù.½ž·U§£/úÿñ3H±ˆc|×§’i쫊2VñÅpŽMvEÐ'Æ‘œæô%Çöf‹ý!üM+4KÒhÛ?§U9²8A=O†>2ß³·¸±3"EþÞoV›’¾¿¹'¤þÏcºàO–pcȹ.¸ ‘D‚@ ]{ëØÝÈñ%H1·»$ÉÂfCbGõ¢héMý_P:=øëTž†àçcîzøÆN'ÞH™ ° €À¢;ñ¡ îPá͈Nàj¾··!z¿ÅDXûƒ`û“rÊØäŠÇ/3!Rh¹Äaše´®EŠ¡"ÉXøÐ»ÛžÙ·2bI<€q^.Ë#­1¥·¢;?s ¦Ë6å„ùͶ.B´ëcì€+Éðc£ÝuF—EFf0Ìþê[Óõ=0á ûÍüµƒO±Ãñ×V=™}Àý5³³îvåÆEÜË2€±§"\÷ôñNØy$Q,Ž´6.óg¦D쎀ÆÐåH€ƒØ4¬÷î/Bí0—qÛ6¦l‡‡ÜÜ‹æíü²Ï¯6 ,Ul:6E »BDZÞÍãŒòÇ$ŤÊ)*”5xûÿ¾³5qÑÒ¥³„»kãÈ6ŸùlB²ð4Ž\nªÈî®èþzò.J¦z|¼mÙ}¿=v\—ÆõÀ ªMX4@$Q£Ñ¢hëIK…l7V7kÎÇÍŠ\œ‚Á£S!.¥þ O‘ÑìXÖ”eí”—Hd9$rÜ›µ‚²4LT8 &ÅuÝõza$Éœjˆ-Z_âó/êúb1äZÿZ»÷ªºïÆŠs²¹G;PdÉ“ÆQŽÀ0R˜ #®É»9I*5(¡ýµ³‹ª}4IЖÐû “(Àö ±öÐbÊ|´AY aد:”©3Ìo_ äÁÓá§$bIQìuãäà§hõñ󦩜ÛSowõÐ3³õÿMpzìô&ŸEÄ€Š4°¡©h¥¢aÏÍuïàih ‹ UݘžuþZ7E¦i‡+)„XØå¾Õàj(¹˜””{=Ã_ I„Ã33·®†½œ<8ížNnlDï °·¯Nìóé …j˜ h@аÐ[ a ¶ àþšع?Ý×Qôkù OÂ5—Ù¢™îO묾Ǡ“¼@/ü×ñ'ò8›zÞtä÷@ëÏÉž™~ìáý8 v]gYw”–1`k3ÈÜq3Ç•º†)è£ðÖ³—'³UÇé‘»¬ò¿¬…E}5©|žÅCШŸyƘpŒ²“þ/¶Ÿ;Ñ~va/Ĭ¾»E¼N-&ìe;5úi¶KH¬‘«Æc'¢4{*i ’Ä™‘¹‚×^wJTzN&ƒ¶ ìÔEØ>u¶ bäHj¾rš½+Œ·1pcíÙ¹&VIñ¬Ô$è7(«%ñ!Ž_D$»öÕj+BäÐÜ<\¹]IÑ#ßV1‹dsilQÂÛñ§fÉbÐ$öu—¦\¥%¢ëÒ-–vû“çZX •¸»fJ2G!n"êüj%‰rFvÚö˜WžJP®¿MeqÁmšShØ–!1SDÒZâ.|¥ÿ†l*¡Ü‘cÅé &|¬´[NÁ“(†6|h¸ø¤'*5ª[qÿoþŒÃþ¢lŸõCnÿ†}_ çªwü3ûéà€óÈ?Õ »þýôð@yäá »ÝžÏ0ÿSöÚü'SþóÈõCl¢xŸúx"<òdíŒYdÇO¦µxÒWE³¢Å[ß[1{ ¥üÿ}°à§ïûèL˜Rþ¾ƒ&•w ·aô•¢tÈ›`èOdåß×Cg#> ÙBåm-4$OÈ‹!O%P?2Xì û UX™w‘#’MïQÛz,z+¼c¬¸ÊÑ`O#„`²Å77^~¡`ƒãƪjŒÖèÁ•¶åå'ó!i¸ËÈH ú˜X$D€²ŠŒ’މ%lnF“oM+a¸FÈŽXÈ4¼¬]’xÐê€$ßdi”KL³`åA˜³I+(šVF‘šnQ²1bRMH³C°{7Ý›µ¢E4Ío®ù •ºmÒ¬¬´¶ÊQ”I$ù$g쮨.öiݤhpÝðpÌÒ…ú˜gïuÐó]]UO‡²íçÁñ ØÙ "dœ³ ’@T†*CP4Ô;^:MYmØ“bíbE¶3?¬$àŒµõ9ñ²EÐêÇšûk2j݈§E÷|즋+/ˆê"³8fì0À±îîõm(Šm‘1ËÈÜQfÙäðµÆ3Wâk €/ žû ÒEÝ—Ã\‰³Ú|²DTä¸À(»ì“T: :÷'EU¢;oeqà›GhvÜ…q€Li²[ƒ×ɸŠëÈò:ëVÓ{ô* vçmÙ+’Î’3ÇéƒÈ@[$(y=ö|Md?€Ø"|h'|Œ,‰^|‚Ô®¡ÕhØ {{WVh>6Zb2vÜåÄÄa€ÌhÕ€f‚ ’@ÿ EÝšz­Ð¦lŠ?‘ƒä ÇÒã<Á¨¡U=›?¶³ñjÚ*É:·ådîÅ;úc.)£bÀ,|Br$]–<ލ&û#]"ãèç$Ñ« dÏMåfÉ…¸Ã‘4‘Lqüˆ@&É{$ø@îÖïg?â'á½ÐãML<%kâú²?Òä€-B€£²%‰ lhE×fÝåÄËÉHZ<™VVi$ù– Än‚“@(àÛ|XLh%Œœó+Eêƒ(CŒž\€æ{bo¢ÄÙ"Œ}tt6,GÀÚãÆx‚Y½563 ~ôùk²œïŠ6üÙ2¡ž2±´DñÃ1ó@‘]…QÔ“U³qNÎ\¸92nÌd£N’#†-d‹²OT=öF¹ä”N|†Çórî\¬GUBVe*»îÍWއêN³*QÓ²ø‘æK“ž|Çô!/ Ð*.§ -LÖA $ ${P½b—DÉÈÝ—ˆÙ{’À¸À@°ò9AÛ]qãçÇwãÛYpR4¦Ñ‡ ᬡ¹¯ÌÀxE<®“ó}6åJ’I-dÒºZ¤Œ9>Å`ü/òÒÁ‘ÂS€ðz®ãŒŒh/ !@Qْǯ:RBÛ¿ יּëŽk•de%ÝX1j @ÐûHë.$iMbÍ#fÎLq¡’3óæW‡ÕS/"Àr=µß\®Éwk£ª7Ã1ãc2`P²úøÑH ŽLS‘ P  `t&¥&Ëm-m»jÇÛ¶è±f •‰QØt€?Üê4’*“oB›`2eúâZK¾ù×?rý#Qý™aøm›uR°Î°E,®LÌ…X°  f­‰³TQ¾ºasSb#øfB²$‘N‘¦CLÑsbHñÄР²{'À¢IÆ>Š¥/a‡ðÔë••¸Ç9ghÌh­’ÔÝÿH²|zî‹$ÛfœM§* 1”#É2œãTRDé1™ÄE[ê)K|€ ] öAuÙŸZ1c|3‘éÌa‚E €ð@¹m.Ät~‹Éîü ³•vŠå*¦hjÉ8Ùm>6Z†hZ.rÆÓ–B Ù%x‚Ÿ%V5«L‰P¼}Š!†ù{vFD’åcVDx‚He° «®êõ0³Y´//á­ÊM‘Q§ÕLyŠEäKBý\€)ãfÅ’Mõ©QˆMÈô=õ$ÀL¢5æ‰4/ÚÏêu­ÙÉÈÃÈÊß›lãFÊcdt*ÌGlÀ° -ô6Eý†¦15“¥böÝ‹6 ádšá ó:MÌpôÛ• vKÙ$ôÝ«ŒÉج†÷FÄš ˆ}9FØø¾«8+%€( (ì€IbhÕ#£l[fã—“‹Ê\h%à<É ÌhŸRÈrB°¡\¾ävDÑlh·¯i—–,y&VŽ"0ÊÒvI£c¾ö 8—f—Do8Ù2:daÅÒ¬R 0²Qú‹ø° z>4]›—beÚs ǃnƒ#æ£ÇŠ%Ì ,c‰ÿò€ìÑS`×ébdÝ”3ù4[l¯E"<ÊÈ,PƒE q7×Ú¯Z9‰ÇÂÊMÜ>&F<<¥9\É)bH*¡Xòº^¬{Ö€FÓ´îøØß#“b…ÂôžIgõTËÐò<@ºú|ŽºèVÑ£fÛòöÕʇ#Ò™—Ñô£*8ˆÑn‹ÒìdQômhÍ»ÆÒF„dǤ¼˜I`ÄvŸ k›i)³˜¸ÙsàáF‘úþŽ1Šxb`¥ B’ZªÔA6.…Ši²8´3cîE‹µ¶Ë(&xnFZHb^¬ù&ÀûÛA«5Ió?Æ`š<5•äVQEŠh°$&úûUêê‡ò´îX»ºfÉ‘ ‘²ÌeqúŠqRK  T{ ¾Œu'€7çU#28¿õ´8 ¯?õôÏGôö¦x"O¦ yõáãi7g²q”’¢@¾ÿ¶¬œg7+ÿô±R„RKÿÂË]y®œsŒcýŒòBR–½’AfïÜLâ¸ÿÅ 9ÿ›!”úm}U›ÿËGÉuî¿Ð‹ŽJVÿg¨øWiÉÎÚg’8¸™0$…]Û§-T(@¹bkνÜrO£ÃÈšì|›^á.>L’#Dù¾¨ d"ˈòâ=újIÑb…ààçA \…^^£P¢Äsæïòmq•7£´t¶ø{Œ’Ç,­*zl’Ƭ`H4I"*ûލ‚u¨33[:Xc3<Œ$QY¦Àª€:=›"ºñ®‰Ù“íysç*ã.BÄÙqO3³Gé’¡zlIât/»®ŽãÑÇùוüZ"«˜øóÍ/óš2¬\0¥ mVÄÛU¨ßZ4'cÉuxr#Êé·¶,qÊñzŒ 8õ`(Ov, $‰èóŸعc'4H •UYŠr g‡BÉ=|_WCÉýC©*tz¸¦r"Çžu+ ]莵Á®9OoÿÖw¾E´lÂÆšD¸ü»ñöÖ$›“}šŠJ4ï$xý:€=¨÷Ùü…Ý}õÛŽj1þÇ.H6õìKíÙe‹,_OÃÆ¸b±¿gl×£ßoËXi¦kX…w Ý| V£t¦züL ß@ؾè uŠ9˲›fÏœ›ÂÏ‘ qƒ&i#›˜ãÁ¹} M’öIðÝ­{2[/6x·(¦À’¹E#:\jƒ âH±UäƒÖ³È® ãu#Çc|-»r2hЍÙÖÚ½ÁÑêû®Ïyc¤›~«ý(ô¹É¦’÷ëb%ø tf\ÏœeéPHäOÞ‡Gïà}õ©''¶H¼S¤i“á]ÒQš&$×ÒÀqýlŽ¿Kñ¬GÚ59Û"/ôy»Å”Ó@ÆQ'e׈Qdû“}~@뢃vÌ9Ò£¥³ü¼aoÐä§#n HxÑõÝ’G^<›Ôãâ”{äRz;¸6|{ÊO“ qƒ&i#›˜ãé·"nÉrI ¤èzÏ1y6íÃq|☒À20Z 2¦VúÉ4‰n+Ù¿¿T::lײÙ³4±O,Ò‹'#Õ~BùäÔ ¨üƒÐ¾Ä}ŽÝ02s–$ƒ%#á(vYb.ŽÀ 0è>|ív!É›fÝ“nÛÒLc9‡ ¡Ê‚& X¤)%ª­@b ±t(šÉŸuŠ =™ð$›tù‡…Òåu ™…/V|“ã¡v&9ß7üj áÛ¤x’æVJŠQ¢À›ëíW¡¥Ñ—kܱ÷•Ì|ˆf2°„«[ O#t@ ƒÙcâSª?ýtd}Àý5³³™ñf\P>rbÈäëå ²·HMÑ$W‘dEUì¶ ý§kÆÅÇÛU‹dR!0ÙÙ¼ŸÅÄ¡æºÐi³'Ä;6á¸fÈ"…¤‡#cú\(I53Y€6@ñBÁ4[.á>øÒ¼,ð¶\SÅ p>!C.ËE ‰¾Í jƒdÏMáfɸC‘;Ç71ǃò!@›%É$ø@-b/hØs`V]Ïß†ÞØÒT£ùÀñPúT*ù$\š´nÛ!ÜñS.eÆŸâãdä‡rÁ{ú¹0šj‰êô#ìٵᜠñ¤““€L¯ýNI,ßÜ’¾„0|G·fääC‘3MŠHæ†7 \1R’RTäѪ šW±øiŸ·Ãƒµ®/¬‰LŒ 2ª ÍG^=ô6eÌÚ³&ܸã$ëeÅ<®Í¦J…ð±'ˆл7]›Hªl“6íhg\xg–Cëø±~]([b-‰¶ª¨ßQ¤Ê›ô/aÉu’9¢É\tÛÛ8åh½F GŽ=döO`U•"dµnÙeÏ*ÏÎfQÐIÆ6²ARI³]ô@6,MÚ3[d“rpiŒKfR…{u` õõ~’+@u6˜ó"ÀŽ<ÒÆAÈÓ7"‘â ÷!hfÈ&Ï’ÎêÂ÷¡Ì°Ô¤-€v©m†‚ضJ$`ûiVjÞ&L›,ŸW{÷X—Y¨ÎKÙŽoƒ¶É\•B?CZæÿ§â}|ü‰ íå»v ~zÊþš¿ñ2fŒo„ö¸O&B~×Þ´¸8Ñ™sÍ›±ðq±HÀ£ó­uPŠôsro±üMU–´b•–T ÙB6‹h@Ѐ4  h@W°H'ÛCZedÿt?]GÐþB“ðeöh¦Gû‘úeôn=‡ý”uÕkoñ"üŽ. ì€Hü>úòÁü™ÞŠ:Ø–°)÷×¢‰ÂZc†8—ëf#¿©Xm"F ðþÚbÇÄ>NÏÇLY 5'§:bË|¡690þúbÆL„Ô~£«Š%²ªr.ÀkÔj‹w£ ÿänƒÛsøYÑ9QcÎOÓ*ô:[ñ¥q¾DDPlùüº,÷Ñ.9 š v‚bæ0„˜ýµR„XnmÍ´Ê­’Ó}Åßý5ƒvT¦•„û\H'Šz¿6|ê¬#ìËSh™cÚ2¤§•Y˜ô/V¡&.hðŒ0¼Z1CƯŽ/£F™h¶Ì\nF8»n‰¸"æT츲©I?ßQÁ5ArQVØpÝD~ŸCÇ~5Iÿ¬þúb…°ù7ã?¾˜¡l>MÈüg÷Ó-pèöÆÿ]1$IÅC›ýu)‹fLÌåÄa }MWZÌŒ\ŒÑüO‹EdYX†ï®~Ttñ³DÙðaáÖD‡›©â©15äÒ‚hX³àXï±®É7‹ÔŒ’î‘¢˜e‘Jã‘%V¾|‹¿Ãb®õ”¾%odÄ2üšÊY‡ž1± ÕÑ`(÷Æ?wò5J²Õ|ê¼°3ñÈɸ‚eW”TiÉÄ‘²ñ^þ¢Xº=þZEH­ÆÅǹ?¢ò‰UÒ29‰•…š‰›= ‘BÎ¥M~Ëqc1g9‘z°Ì‡B¤?˜ {ˆðGßO’câ/vܦÂÀZ+·)§ôÇÓÄUѲyxëÁÖ©´KI”Êß&Û#´(Bid-Dr$ y‰Pú ¤Ð“Iš~ss]Ø`Éc,²Øú«€;ÿì×úS šè¬™yÙ“b½&U•Ù‡Ô at<¤ù7ß©5,{ÆÌø[ü¯ƒ+dĬÏÎ'äTwj‡ëÅ›£ßGZQiQ-Xí—+/0‰^lw\!˜H k ‹ñ¬¤Ó-Å¡û¶ffŒÜGÔpƒ›ñU$Ù£^(uÙ {êÔ‰ªÛžsìã>,u(Í#<Üxö4l$@Š>úªú"k²±ï,’ǃŽÐ‘ÃäLÓ¨ –=W]÷©Ä®®‹M™ºãf"fGŽIDjÉ%±$|kÅŠ=ØóU¬Ô¾Ëi“—žr£ÄÉ"W éºKȤvE °Aèžè#Z’mU—Ú7iwx}H>\(€³†p × Òhx³î=µ§iWf¼ù3’øØ˜ô‚&þ䀿þºÏÈ$Œqn™¯$뉒eéÆÏ@Z–6@>>šÕù^ËjŒù»®fT(Øp(gŽGhÚ@8”!XFÍž¼WcRHE““½«Í$IêB’ršPœƒtK]{wÞŽ/¤¬#ܲeÜÛoL˜CGœÀ3<¾•¢H;${ýµš–7e¸·CS7sL±·äcÄEf¤¤•U YEY#ßïöÖ’x‘ÖDao™9©Â D?ÉNPƬŽ-`kD‘`÷ÑÕvÓeSxÎ æÇO÷Þ—¢X~.|:Ù4kóÖjJ]•´ãÑ>¾í˜¯‘P#Á)I#yˆQ@)¾ˆ>ŸËUŶKIÌÞ3ÛkÇÊh<4Æ?R©AP5ÛʮɫÕÁý’ÑÐ…òòq¡› AF9A?Èê5*-ÆÌØûäø[·Éæ@œ[ B\?ÕȨ ]©A6(°ëZŠ•ìÌš}ñ¾#IwUÛß*ÈÒ,Oê[ƒjÒ V£}ñ=k¡ÍíÄø¶ –gÈÅà#Âù¤ bÉWDP ÔTÕž˜w¡)–‡âVh²VL%ùŒycÒŽ~JÌä*ŽT<1 ôh©óZEÄñäíã"(#ær^ õ⥋s¯ÃÄX5ÝŽµAk³Nןé·ÅžˆTH £yR Ђ?¶°hÃñ.lØ‹ôchØ€.jrIª Th|:Ì•ÄéLæ¾{&GDzk2ÄÒsØì »ïÇZçŽÞ舷#6XÇô–¹2‚$¶OdŠèc~ãï¨ã« ì!Ýe|˜VàŒÈÂ)yø»À£×ÿu­F)5A½nΟ"YpòñÖ9¡ J¤¼ÁVÐï¢*½¾Äkк<ïò5?kÇ£èŸÈàî;–ZfÇ$h.¼Ò”ÓÑêŒlNfã–ï—1§pà4Hy'¯Èv;Ö¶ãdÒt922¬<ˆB>§÷Ê”—ö+Q{öf‡}ÉÉÜoª1q†²J’ Šèjïº:ÛRhÍÆÄ¯Å3»ú“!õx«Ù+WG ¢ YèŽõ• œi|o‰\|…“ |Æ<‘ÇéÇ7%fr~¢:¦$>jµè8RLæþW’L¨+“Lc£7òÅK®Ô¨°k°GZàÔ”™Ù5ЇñL±áŒ„Äõ‰¤+$¼h)¨4IbÄ(Ù>F·ïfgLèîrÅ—´Ç•ŸN@®th€GùNVñuf3·”ÃðæõÅÎTuQˆí—zÉ‘£‹* ŽW’8eY,—`Šè¬A³ãº±¯GÖÎÖÑŸrßešËÈÅô”ã ˜KȲtH= "Ç]Žüôu™¯£PzÙ’m÷pç*<@8*¡BAä@èWwííï®o/Lè±]öOúøc`™U$'ç/_¤µÝ}«ÛßUedt6}ßt‹nYÃÂÉÀ±c?âÀ¨ßuuãHÛ‘ÚÙ§š|NR±ý]üõ׎ÚÙÏ’‘Íßþ!x2ŽqÒ‰DEýNù Ò×`rPMŽÍW¹Ï%Ö‹ 1cüK“,Ã$ð7¥ ~ÉRnÅt 5²«6êôQ~*É–ÝÔƒ>¨ì•«£Ð£D³äw§Ì,hbo¹³zªb§ŠER‰%‚Ì@è{Ø=uGέH·Ĺ2ã¦@*H™£#Ô¤èO*ñÄX5î4ù)QgWá\¿Ç9@·ó<þ ýˆ#ZŠjTÌNªÅ|W¼ @qÄ]F¨Ò¿©Ä€ÄÐQD±¥b|Pß¶¦›Z$Ob±ó3ß%CJB…ª>ýkÏ+ÙÞJ-hKnÙyyòíòòàªJÈ Yl~}0ÿïÆ¥“F(!ø–xñZIá |¿­e” ô(ö>ã¿=kiÖ‘—½±So»ªé$ :²©E‘õº݃׷¾°Ûo³j¨éâoÍ·/,eõ—!¢uyé…æXµt8‹º»5^ã¼nŽ2«2îÿ‰¶¨÷á #b"º!…ò×UFÏå÷ k¶èÜZH$ÍËH£Ž92õ߸×)Tb(î™xùMŠb°¸¢E×~Mxñï«mFìÍEº6ìæLÎeÀK#¤R‰,–[4E "‰ñÝX×n7jŽ\”¶lÛ÷ɲø¬›./Ìc,s2']+v½Yùë[]Ÿd>ý$[3n²á¤n“úM“€ú¼ ,$ÑèjŠcñrÎn*ä–„ó¾ñæõÑ#¦¡~;ë£cÛY‘¥Ñ—wÞSl’s膔1 ‘"@®É’Iûž«R™©v3?qÏÛÂËÈΈ9d•bÌÁ@‰v ØêúëV$/“ºdâîq`ÉG3…R¹%'‘B¾,`Ÿ½}´a+‹ñÍ»&ÜØÀ,­*Ââ[bPy-} •j6o‰èh+V?sŸ12Œ»t‘¾<¼}QK7Ò¬<ò¬ÏAL0sdÎÂ9ã˜HèÑóåEX©ì >/ÿ]GѥчqgŽ"þŒ,}^¼¥½Ñ÷¡Uï®m[:Ý#ÜDpÃ&Ü¥æ¥(òñ è$–àÝRI–ÈßÒ#ÁuxR_ªN,ÊÆ€U£ÈqcÈúi’ÐöÜ%ÆÜ¢Åh#)+…R³\ž ¾5âÁ ûè—°ú4C½I<é áªE,²Ç ž­±d$V…ň ŸÕë£èæº:1þZ¤—Gãhä—g &‡t5çþ¡\üþaàÃÄó÷ë^Ç&{å,*PÁ‡èu' 4jÎ6 Bš¿×½nnhÄùpd çÄךÔ\mÂ×Õ‡ÉS¯ðê¨ÜD;÷ÓÅQ¿÷²y•½ËàÍÓ¶åÆ 2ãz±(’ƒûQ5ôžÔûôÀëèqGx9^NÍœ¥2+,±Jˆ9mY˜€¿Q»=ذ;®Åš°œ‘M­ Ý±ZU°RROÈXìhX ‚ Ž£…ɲs³ÿƒÇÂ(=F(ÎCIÇ¥ PèÙ%€»'ÈÕQDrfÜyÓ+2a6² e?‘?ëª .õ$YÅSä¬/«õeR×bÙEÝÙ=P½mi¥¶[|’lÄŽL0±K,±Ã(–ز+BâÄOŽêô}L_“ŽùYXb58G*¼‹Æ$@âE¯]ŽüôuAç>;Ÿ+"eL¼eŽHXÈ]xH Ð>A^ÞúòQ ¤‘éàž)œòe€\D uæ\k5ìô>JƒuÑeÜ2¾™OžÍë•´uøƒîégýŽºBäWg)Ê1`w Λãã,‘ÉsrñvW5H´y0êÅ ]1¹›¤ø»ŒxRcÄRg⌹Ì®$ò(@èA¢~õ憗B±·——-!|`±K,±Ã –Éd$V…ň ŸÕëÊt⮑ì£Bø¦¶aöbÝw#·G¬hÍ$…WÔ—‚­)bÌÔhR|}´öÆ=×m‹>4)ê)´o*A ƒúGöЭQ“yøv‰Ê68xãTiœËDbG‘Yˆ±@_è XdüH¸û¢à¶0àrSÕú¹• akðŽJ $Q`+îÃâE—u]½±‚¬­*à ’Ø”$ÊÒ V£føž†‚µbñ>,†a4™…x4$æY*èŠZŠš³ÓôÇmûÖNÌãŇÊÆu Ì’„ýAnÁ £EH¿}1ûFtÛ–)ÈŸb"g@^a‚±RA¡Ñ ×^;÷Ђ·Íí¶ž",a+zO!/ÅJŠX–PvO‘î*VlÆÉ/,¸M¤¨ Ñò:Å.õ$Y­ bd®;Ìeúƒ²‚)k±l¢î잨^†©21÷Ç›1"—Ve–8dÛBAµ¡Céb'ÇuzµbâøœœgÊÊÂôÓäŽ\%ä^0‚XZõØïÏZ c“tÌuÉÇ“ÈÇ ÅIôʵžE¸Øªnˆöûп²1÷Å—mlé „¦5Š)C‰7ŨX&»ê»º£¡)šv챸`AœcãëB¯Æï€j뺿:¨Ó¡@Ѐ©+d±ñ¡¿EC º‹»|NØ’F‰Ž ³oÊ/ß (ÙûêT# Üä†ÿ ÃÏBrÀûãZq„Ì©N• `˜„›ˆüôðª¡ç}’ÿ a²úv‡]éá‹i"ØßâcȲ†6;uWcÑ#—gF¿/è•ÛM†¨¤YdÏBÒH‰ë@ú §ßBdˆäh[A ´4&ÃA¤‰Öƒ´U˜ŸØèSØëósÅï®Pü™¹¯‚:)*U^ºZ9$ÑoQ?¨ih»Q?¨ihl=Dþ¡¥¡²¦E°AÒÑ*öVGSÚŸ}-*8ûîÕ—“2åa?Ö¾ß}pä‹“´wã’J™Ëƒà¼ÉyÏ“—Nò"þúãàoguΣ£«Ÿ´Ç™yHÑÜQ²ÿ>QHb X ÚŠ7àž»ëÔ¿Ê×ÈË6DZǙÜ$Ž$ŽXë’@¿û ¾ú‰¬ O"²íåòZä"(`dTˆ†p[•fèýu‹XѪùäôŽØ $€|_z­¯7‘ÍÛ6µllœ|Œðÿ0Œ$eˆ«y$ƒC (PŠJËщ,Àr VgSü¼~ ñ6ÆÅûXêþú™+.2®[~48Ððb‹“pÅÁ|سg¯7¦Ÿ±´[q†I±=ò‘y©Ê"ÆÚ˜ïäjÒV)·F_àx³Æ’&yHý òRÄ 'Á° I£Õwh¿‘ÅÝ|E}Î<œ}ÑUJ˜Ìd’ ÷ÈW]uùéñª+Êì3pÊç6\¹«é2(±Ô #êåæÉ¾¼{{êKI±x;$-%åÇ0N.$©÷bI²+£ÐzïZMU‘ªtË`b…ɘ®ãþÑ$|VTŠ–:l‚Iì×Ö±E½’—lv~ O#ø€iá¦/$V²0R *«²EkV“"N„¾Ï)Û¢‚ ÀâbÒDð’²l (t,Ž…ÝkWÙ+dɶ|Þ4ŽùË ËÇ VH~žþ“õ7íöîE¬MK²©€ã󫸉P"Jp ?z>ÃÛYN R I켸–Ù™Yé0”иHe_e•<øìÙ=YÕ)ØÌM¬b4‘¸rH¡ô U‰ H?Q³g¡Ø¡ç®úÓi‘*f¼õ  à­Çé$êû{eVú1cm/ò‘`üæ<¦"84¸¤¨Pë—ŸÌæ«OvGÕܶLh0¢ÃY£0Âß1¶6J€@[$š¢< ¡¬É¤ìª-ô3?hAŒ±Ã’91Ö§#Án¨Ø£DöAöë®ë’¡VÅÉ·cI]rÈ…¦Y]=;nJS]бDùì_YÊÅ›1±`ˆÏ—óùñ^$Q  >ý“ßç^Úªªýw±lé‚b’\Ô¤€GÇEØ-Ùä}ý¼ž»Õ“DŽ„®ly2"™¤rÊ9â bÆÁcbÏ]Н}c(7hÕ:vlXð>V\à‚y Ké¥t}XvO¹³çm«»3Z£GðuÎË\œÀ$°òàd˜€.¬v]€}UxûdåèéC·ÍŒpãÄÍ1ããFQà(Ê€¶Ç±U}y×S›èKü:¯»6pÊ%’9%ŒÆK€q®€°¤Š²Gš ½ÃÃq9_4/^I–/L†æÀŽØžÀ Àâ÷=‘/T/ á8±ñŸ l²ñg‚ ©Å•[ñI<˜Ò´h->móaäæò¬j¯eBªQø‰$±$›³g±Ö‚÷däü8eÅU“) Ã,N[Ñ"2Bñ Ä0úB€*û«7dú4špq"ã™LŒ93¹‰˜–c^ÖI5íãX)ƒâ|LŒ¸•B,F¬‰pA²C]âº4Eë2tŽ‘VŽlÛjϘ2Ó]Z–b@êÚþÿ5ÕמyjÖì¬{kE') #0?¨–»¯±ßŠÛG+ÐKeñpfl³.DÑ9xÊP†”ƒ}°$òý,tOßQ5•!Zmí—glõr ŒÉ0@þŒ>š€ €*É÷=’OuÐYçn‘µ¹ùó jÄ’õÊðRàY:Æ›7òHɺá4ÓA“•^“—&Lrü¾’´i‡TO^lõ~(|‹ ŠmÇ”y«òæ?/éÇwË—ŸW}fàÆ2[‡ðüyæq’¦!;Ê‘pú¹°#¶³`À›6{;Ó2ò‡ðž40¾ ¹BHþ]¡‡‚S*±²Ä’y7J t5©¦Æè³|6¿Ã¦ÆÊÍé«ÇP¢3j+‘$–$“vlö::ºH‰ØIðä9ê$ÊŒä|ϯËÑ"2@âˆaô…WÙI² ´ôZiÙgøh¬xÍ‹œ|Pú¯%fslÜAAìHc@%LÍÞ‡Å>Ý m(y,¨Àÿa®nJè鶬|GXE"p¿¶µñdy&d‡c‚=ÑsÙ±Á¢Hq¸5·D³Yäh‘ОÈ4*êÌ»¢¸¿ ÁÉ4±â–hLQ¬xcömyÖk«‡@Y%vÅTHƒáìlx2×¥Ÿ€7‹Q€¾V}Í“vG°R•—t_g|Hxþ]ሬ|YU’I'“t W@ZÒŠ2äÂO‡qÆß>6fròuVHã*!µÈ’I$žÁ6{KYª“d·Ãdb/<ÈŒÃ$NÑ"2@âˆ`x…UöE›² $J’fí³ E‰fæÖL’И’IëÀ$“^Þ5uÙFmÓb‡rÌ9Ÿ:¨%„C0)È”²O`) ‘dªîͪ5LÐ0ÁÜŽXÊ_@CÇåý1ø®ùróãªñï©Q'Ìλ&Ù‡¹E› ¸dþY•˜b 4XØ=UAòšeJHŒ?† †I2%³@bE*M›^DµšêÀ¡@ $ÚLËt& £>)8­<Üy^-F¡|<¬û›&ì`±k*7OçáÌc†±&LbEËùŽb*Fjª*Dãì¦æ»™lp#gx– ~&ØQ,ÖlÑ>ìƒBª¯Fú-¶lK”ùÀ㉠^œCÓURlØäI$׸ºÍÓ/²Ø{~é…‹4q™åg¾T€¼˜³=NÇt;ïz ;Nf>ðãnB<Œ‰Œ­°‚‰JI¡B»$öMÞ±.Í.‰ÎÀ›&xò±2R96Žä‡š•b êÇv¢×žôN˲ø»REòq‰˜Ç„•0³â‘^n«²oªÕ‰‡Ñl½·+36)dÊbŠe‘qêACÇ2ÄMÝ`‘îN´`NÃãq9c.â¼ËË› ±=€€Åݞȷª…·çâåääË®Cs ¸åJ·QÙcb”X¡g¾¼hBv̼¤‡+.9ƒÊÎ8BS‰f,A¶6,õâ€÷ÐÚè30'ž01&‰û2Ä\ß]0îë»öñ¬âSÿ ¢mÑb¶D'ÓV ,Ø¡ˆå爰E(×f’ Ú ¾%@ÅÊDˆÀ‘ÐòeU$‚­c‰ïɰ¶‰&hÓ‘³M>dr¶\b(¥YRêX9–  ó@X${ÞŠ)º"?‡n£q@8;´k7l(–k<àI² «è.Ž‹ˆê‹LTñE’†9à "µ´TéÚ8ú<ÀËc.<Þ“×DЀGù®K‚1º:yœ†ÿF8…#UÍ!F£Lõ~ëóÖ|nÙ¥Ï$©›ý`œ…†ò½Û!’/ØõGõ½Ф#“¶]ÿÑŽ)œ2f‘¡RMþFèìOžþÚñ,hÏ›åc0ÿÑÆ>o­6O©¦>&ï¯&è×~ÃÛí§‰)ÐÛ~“l‰’ ñiEŠâÓ‘³vy ö´]RG&äÈ_†e“j}³'26äC RV,%˜–%‰ Y4GT¤SVݳ (›Õ^I$.ì©Åo hò|_¾²ã²åB·O‡›6h²qòÖ)! ²rPóV;»ìz«ÑÐȶI1¤ÅLLÂc¡Wˆ¥™P³Øª¾¼è¢3#'`'rLÉ~\*J²Rc1™GVä›×€ .¬}“Àƒuœ†é³´bn É…Íg‘¢|dÙB~%0þ‹IgeÅ.ðQ"à SÙyÖ@±`Pè $…hDÿcω42ËË3!å?P¾$6I³u`$¬Ü^'9ÿѬ/ –¬O×éž#ò•þä÷ûkŸ†9'ôtó:qû-ú5ÁXÇ­8f÷*¿±&¿}sÒÆÍÿÄIv++ýaDQ†w¦¤€Á”’{ö6(þ·­®5HËärv1Ѷ'®$$ÄR‚Q»¿7~+ª­gþ%ÿˆ’‘«nømÁÍL°ä•Skd‚Iûz¯Ë]W©œß.íÇøK'99KœcX1ý5QvlY$“^ô+ ,ÞœSTf3i—Äøk.;!È“+Ç`±6M:³à¼^¦ ì®z'dÎÅÛ£ÂLø£C¾)  üßwuù{ëX™Ì†øs"=¹6ì|ب# ØÜ¿° ÈØ‡·lI’6A¶G Cê³P¡¬šdûLY¬¯¡2íy§q‹: ÈÑ#FSBI`Åo¾@ôŠë®îõ¤¨•ƒáø×s”†ÁÐCÁ¹0¢Y¬–5~› *P|.#±gËR‡ 㯣Tÿ‰žL+£@X×z0þ̉Ì{‚z¬ªªÆÅUn¬’KI»?–±‹l¹$Z-‹;TÆÝ}<‰d24ë 1"éI"¨Wdù»½\E²›†Ý•¹Î7(Äq·'‚HK+‘âÀ`hêèš±ÐÔ]–F|ýœî,$EEBÊÇÙ€6@%}…,o½eº-&hÅÛóyþ!óq”*G,˜×®AHjû’ ð< Õ‹Dhؘ9‰»¾às"ôž5C A¥,GÕÊ®Øß]T<롇У±då‰3³£->+AxðÅú±,G·` ?} !û^Ù& ÒÏ4±3J‚M[Vl›¢oÀºÐØìȳ%ˆ.,°¡¿¨Í pGÚƒ/½{èC¿óÛ¡À@Þ’²™fÄG/<;G°@ ¡¡ovF_Ã+ bä*EòÑÁO7EBH(Ö8·~H=€}´ÇgmÙY™I,™q¢”:ªãÔ‚½¹–4 » ,=ÉÐÒèD[$ct‹úƒ»F±c6ÝÍg‘¢| 6A¡X½QNˆüCõÒ=‘ôh_ôÖÌ>Ì;ÆÕüV”JàœJœÔ²’ÀH¢z±ùõ`ŠÙ•‰‹‹¹”dŸÔɬ ,ëGðÙ>}´Ån¿.åšsPŒI£:”,JY'‰°Hº4UÝ‚tD¿‡Ý_=r©&–9&ŒÆKJâ_Ò,)"¬‘æºl0þ»‹e|×(ýy&X½2›;kìÌ~.ìöBõBð¾‹ð¦Ë/Æx" œYU¿$“É(ð @Ö‚Øì –| y•s—Ö’Š9R‰¢Ä“lÄ’{½vmÃÆ‡ <8’$€öh É»lòîÙ’"šáã. 5Y«A‚l±ê…N†Ç·MŠØ‘aæ´xØÑ”xJ2 -±ìWž¼è-ˆÊØ£ÌÜ—>_CŠJ²}ÀHÌ£«rO@×€ º°EVM–w?Ⳝu³²±‚aD³YähŸMH%²í½qbÚñçšW—³@ЪNJ0¤ÙyÖ@±`Pè $ó\:xä³áíÉ4ec¬¹AtǨÕW 8†³Ñ=“}ý€yb_™³iÃÊÆ\–•½v˜4ñfx…k‰¾Í’O¹ÖâÔ–ŽrŒ¢ÍÛN í›d8 #8†0¼˜›$=“Cì.€ :Z2Õš(õ7Z zÀ¾´&Lž@ø#ûêR/È¥žõJ¯Ù6jµ4¶6VÔù={èû°¯ÙÍÌø£iÁ˜Á>Rò~5Ê\Ñ‹:G‰¸ž{#3L‰eƒ=U&'ü޼²”»=K4’£‡¸C-bäsSÙ7ï®KÑ茟ôu"¦\¬ÃÂûk¿ô®¤Îöâ{(2£˜Ò¸óؽ{“G…¦™§ôÖŽa  h@Ѐ4 *ƱöÐÔz+1´ê>‡òŸ„k/³E2Ý}eôn=¿ö@ðëÄ‹ò<ÆOý¹õá—æÏTz-²¾M/ì5êG v2Y£ˆ$€}ÖÛ˜Wè°(À?!UÙ½.ºl¬RÃ#RÈ @ÒÓèQkì‚ßO{}‡Di¢íú«¯óÔ&ˆ`Uxûê®Ë‰qHh™ÙW¶±4™¤Ú0ÁPÌ&TbGÜë’I;:[j‡e \¥k…‡*³zÔ’’è‘m>ËíÒ÷)á|YÕƒQ]iËÙ¨oIïk^Eôc@Þ“þiä_COñ¤ÿ‚ÚyÑ|l?'üÓȾ‰ããIÿ´ò/¢øØOø-§‘}Æ“þ iä_Eñ°þ4Ÿð[O"ú& ?'üÓȾ‡Œ?'üÓȾ‡Œ?'üÓȾ‹ãaüi?à¶žEô!ÝŽ£$R´lÊÒW@}òI ù“Ý­%}¢=t+3rÈÇC•¸HáY"Xá ’’O M`Š»ïHõÑeÙ|œü¨7nOŒêLq¬>ˆàÊÀ åWvOw]]éþ¾Ê ãpŸpµOR&žXZ"Š6RÅ@5dñRMšú…W&´f=ö.矜¥BV|Rñ8E\(°9Ý›SçUªBíš6<œ¦ÉŸ26!WªŠ®¯ˆ‰{í¬¥¾:¡»Ö^L~„PBÈe”/8‘KWhö’<ïZÓï¢kìÃ6é¸Ëƒ‹ HVyc¯^Lê@ A*É`\H{©È'Ýsg‘"•ŽdŽ8y$–IecF¨à‚.û­¥²·½—q΃p±Žñ¡ÈŽ5„Ãô²µ -Wäžîº¬è›­"º½É“6Í JÉ n¦ƒÑHØÑ»ŸmIt#ùQ;>VR2ând6A„;,Ë¥‹#¢o±ùëRýþÍ™ÁÚ\XBÈ|3'.=÷Õ‹5ãóûøÖoô;ö`Lܹp0eR10Q<ÐÄ P›ˆ@TÛU-±t‘Ÿ+rܲp¡‘ªJJeƲ̬X Õ€I ôZ’ߢ.‹ån9Æ(7.2ÇŽØÑ;ˆ–2¡‰%¯-TWǵ꾊´Å˺g®äcŽ0VÑ%‡‚ÐV &®Ë7Tj”õ÷”ñr4mùù2ÎÍ‘«êM"c¨DÚ’*ŵҒI¡æ‡Z¤/e¢;€Îȉsqj ËRËVŠ+׿{ëªßZ"Y&7³²ö™Ëz«$‹ëdž<\@‚¡]ýuý_f\|‰ßo“#;2HL0gôÓvA›PìUyÔ¥} uÙ?5½ãEDäGp³dhãäOTHp@êì~´‡d}Yéq§‡"ɆNJè U‚,ýº§g7ÑÆÉÞ·ß%fޏ¢–‹Ä#…‰"ù~€ RzJT;æá6ò Ê^Éš Š…—‘PO$ß_Xªð­XŒ‰7S‰.kÊ%GÛ_"&tP«*W%Z¢PÉ»Sޅĺo¹Ðae™³O¦­A™,k~”À½(‡acÁ~4¢zÜ“C—$‘ÉóæaÊTÆdQUÄ9µSÕY?®£è«£¡²eeeíqËš L ¤¼|V*H¯¹ýõƒK³Å’dãÇLY…°B)@,YbEGÈ=UêKhÚm©ó2aÍ¢òù„EÒúYXw^A'Þºªï\é·dG™¹‰ÒIüÉdSEJ YR °>æïòÑ¥Z*nËlÙY™(So52Æ uj½‚lÝßzRR"m£Ól3dÍ·Þ^G¨ë4¨dâÂÈÀt:¯IÁÕ $Þ£èi#‰–¹Eæ Ͻp–W£ºª9ùCtEŽ8òß”„,xåAFÚú°=@y$mM.XØ7&êTXïY\r²¹Å#‹Ÿ»änÊ ÌÊf’"Œ¶@Ù4¤›þ¡®Ž-# JíÙwÊ,lŒçoP6“ÄÎD« %A`;7j{×H*1'hvNñœ›^b˖Έ`l|™A1»q-J«V#«¢.üjÉY"èÆ¹{¤XêóË,rüç¥`)siÍ@\â¬ÿ}sQ©Y¶í 7â\,LeŸÓË–9”ˆÕIyc`€}@€¾X.—ª÷ìr´F4y„nk^%ÈXµæqy6wRX “9Jß%[ú@:Î2³W.&^ëõ s4ÄÉ3£DѪ‘F…Øù7dûk¢M3 ª6âîû¸ŽE 4¹ ¶´â)qŠúr­Š‚ÂØ 6z›×s‹èÅ.vâ_&8¦È–D1™ !‚±¢x…@u÷±Ö¸É;:¦¨vÝ—œ˜ÜFA‘·A"¡^¬+«$UGdkPM-™“±™[–ó‘µc0žT/¦Y"ÇäK©+$)«°ìZÔº3L^¹â¦\XíRĨø$Ö¼ø¿G¡5ValíÁ3ÈäÌ!ÈD’>©U€“æÉn€ê”ëJ/ drùÙw=É÷àÌÌмÒDëÕ+ÄîM)&þãZŒ]˜”•0~!Ýl¶J·<ñ³"…Y¹*D¨,’M©ï]_G5HçÃ51²DÓ3Gq²dHðfãÊ… è‘ùzâãgU*,r÷H±ydŽC“è‹¢Ä.¢ª¹Q⬟×UÅö\™¯k›t›k 21kezû© ŸÜk 4ôi4û1çæn‘;À³=×ÓÚÙäI=€¡]Û X&ã³2•=s‹™ Ey=Ÿ7í¬Ô‹q³FáÛ‹d#¸ƒNbˆãßf¼þZÚ¼ta½Ûþ!ݹ(™myâgU $Jä  %A`,’mO~úìº97F3›6;åeO;H FÐÍ!T2$h*H5Ð Ÿã(7+GhÍ(ì¶Ù9›ÌM»”†)XI Ï›(S2zù F€¹úX…PÖ,X#¿îù زr²öÈçÎâ' ÑÍÆ¨²±RE}È'ûèhæ|C¹åànòLycã,Þ˜U!ד-bÀ@FØlâ2c2·­Å7Ɔ KG\QKEâ#p 1>y~€ R}0w¼ù·•S!’Éš Šñ—‘Pìž(I³_Xªð½Yï;¦á( 8dÉÃ2Å#Ƭ €Ê Q* Ù²T÷ï©HlÝ·>啵ºå3¬ò ¢ôÈË|AèußžÍûÒ:4l“Í•´båN夗Ú€²TÐèw¡m¾"Üw2aÀÛò rÍUR]ÁPò‹WKÕ{‰ñ:nQÏÛñóBúÐ+ñÅ€küô—G77sÎÅÝMÍ0A›IËÚ:8P[—3Á¯¤ ³zÈŒmÏp]Þ(r%˜úÙD`|~(yen"ì(òMò$Uh5ˆœMãwôO.Cm8Šlb¾œ«VŠ‚Ãꞇfô413wIÓ/ '"gˆÀñÊð$rfú€ ª¤€¬l&¼º™¢]­ç—wÉÆùiYr^Xã2XºR•7jGIèÉÐl×µ>d»t/¸ ˜Æ ‚´¸ö5V<cB;8ÿî™Pf<òqñÖaU!ד,H°PQ¶}£HÒmxñOâô­Q·g+ /6 ͱ÷GÉg”c«,^‘‰P Ž@ññWƒïZ¡ß£Ä{™Æ—5äõUö×ȉT(‘k’¨J‚Ál’mO~úälÚs7 ÔËÆlɈUŽ\\‘‰Å\h”$Xºa}è]4_3&]š|Œ½Ï"‹,†IH$ ¶@`T­Õ€±Dy­ ¤óhÞlð&D2®%%‹H ¨# $XšG¸¶Ž±R;#@œÌ¹3aÞ!ƒrw2Hñ}5à‘Abk6:³Ù4@¦\ïp›wT2ò&‚D*¡ceäTß$Ù¯¬UxgÃø—sùYs^Q,o·4ñ3¢…­rU‰PX/d›Sß¾€B|K½¼SãÁ4’SFÐÎU”&‰‚öˆ±à‹ï\Ÿ%3xY·lø‹.X å‘‘ŠÈÓ žø€<Uí©ä•ôkÑ]Ó3rLgÉÃ3ÆÁX•‚4nF¬B¼ ½#)7Ñ%B32·ËšKÍÇÒ†0 ¿`±$‚j@¼“F''讽”nçÀ²äʱË(VWÓ‚$@’Y ’´­öI4ކfúdáää‰#Xc’$ \mœUÙ$ý"É? è•Û°gæçÀ;#&9r±½XùGU^¬ÇVhr_ÇdôkÈÕ3#FÄù’6L™„“Ä2 @Ò"ƒJ)¿õrû÷гFä™ ŽLÎŒ­gåÕ 0ìWÖüþýhC–Û–ç6߉+eÍ|YI ÅæL«ÄeâBŸÅc£j@"´.Šgﻂâ.ä¯4H0bÈH“šJÆË+7@ EÙ±©è´®†fn{‚o/ sÈ#L¸â#Ó_K‹ '“~ Öz¢•ÉÕ*èv$¹£xÈÆÈÉ…$‰V0¡AgvI4¢Íùð±üJoˆ~ºG²> à~šÙ‡ÙÌø‹p—tŠwÖŸÓ-+?ábC,X#¿î]Ørò²ö¸¥Ü‰Ád—‰YX©"ºì‚zûèg?â-ëpÂÎ’,X|eœÄª¤H¼›™bA   £l<•‘•½g®øÐÁ)1ÙRÂx„p 1?‹‘gè!¿Ì+V;æá6ò Ê^Éš Š…—‘PO$ß_Xªðµb¶½ç{Üa“ИÊÙsKŒÌˆÌ´ ¯]¨.¢ÚûSf´+HÖ™[Œ¸Y˜’æÈ¥Œ²L°‡ÄYZúҬ݃~ÚFÍŸ+æ±YL“³Å+G/Ì*‡VÑáôžˆ¢:ª÷½ìÉñãD8vAIfŠFŒ*©.ਠyXâ=]/D{‚ìèm¹=·cæ²…3B®VüX¿ÏB>Îff矋ºÒÌfÅAòö…¹q°C1÷¯¤ ³züŒ¹ÛŽäeôešnRÍ4fÇ⨑VV¡vªdƒdŠ­c‘,MÁ¼¨ñøÓ?)Û#—"„‹±G®«õ:ñcÿ?g³)(ÿ‚`Y!i¢ŽV` „ï²€}ûÕÁ6¯÷þƒ9$ëôzo‡%ÍÇÚ¢‰fž;Êôò$Ž íàXP¢(’¢èŠ>ÇÇ«Š)+<¼²mý‡2lí®<‰É/l¬Å8ÙV+d{VGµÖºœªÙ¦L¨cú$~ú–Š Ê®v(èºéh˜2~ú—KEÆE[;²²©”h¸ÈF6ùƒ•;cG(榫Y,e*7.9(ØÍÎS, ÑHëòÖ¦ê,Ïä‘ó<‰i%™»f{$û |‰IÊgÔJ1C1¶mË61.>+ì}޵â‘%Éì`øoz²~R¯óÕñò}/vw¾Ù2v˜_#-€gðƒí¯OŠ<ÜœŠLìb1\€Ð'½u¦ŽM*gf?À?Mz3ìЀ4  h@U¿öÐÔz+'û¡úê>‡òŸ„k/³E2Ý}eôn=/ýŒòkÄ‹óg—É5šúðOsg®ôÑèváþĆý†½°g–[‘Íø‹oÜreVĘ®<°”žŽ¼RŠ[:8˜ò¦ßéLÖÁhד®‘µ g94ç£Û7U§ŠN'ü#Û\Ô'›Ê L£`oì…~dQóѽ1æoe¾*ÑÕÀŽX Xä¾@vI×hÚ3”©ôhÐʯa¡ :#y@¶†µö ^x~:Ò¬]hGïÿ—A ã= ýµZ ˜ã#ûil¹ %ÑŒild‹zqÿÃ_ÛKdÈŽ ÿ~ÃKc ôâÿ†?m-Œƒ‚Â°ÒØÈ8'ü!û -Œ‰ôãÿ†¿¶–ÆDpOøCö[ÿ„?a¥±‘>œð×öÒØÈN/øcöÒØÈ8'ü!û -Œ‰ôãÿ†¿¶–ÆDpOøCö[Ž!åí¬é‹o Ql?MQM½–ýt#v4*¯a¡BªöŠSÖ…¶í ¶`ŸlÅÏÅI²yúÙŽD™”©"‰úHö뿹ûTš[YŠÈÛñ¦ÇI¹¿1J]%e,$DXjïÉûfÚ‰­9 8>ee`lã+O‹   z{ e7Fšùò"_&êìµêºÃ³*òèŵíxøÑIN^'B7‘™hÝôIìßÞõ¯vV«ÑíŒ1ÞÈicr-d™˜‚ вH ö®Åéþˤº/‹òÉÂ<—?UÓÈXßêI:¾ÉþfÂ2pÛy¥Jö:"ˆëòÕy%ÙU_BÓn1#Í!~5õ-ƒÑ+tH=ööÑeDxÙ/#ç®CÌ”‚¥¤b ø°¤Ð4O`_gï§Êû C茳<ƒ• œ%k¶äHöH@šì€ þçIJ•Yb—damX¸Ø²I<׋H$kUï¡ßÒ;= ÿ-TÞ=‘¥}ÂÚaW–ŸÕ¡YÝ‹0"¨’IðO¿VkQ=é–T—F‰öèÛ,OV£„¤Œ P¡DQ<ö ½W’2”h\»F$¸+ŽÉôGaYd €$H'² 6{6tNEJ ›l90ƒÈ•Ä€£bÔ4{öÒ)Ö˜“W´oY2ÆNnW)Ú\Ä*ÂÝGÈÙÔMõe¥ô[f2ʹO+‡•/+0ïÍH[ü€ë¯K*ì‹¡Øûzâ6;Ì s–Fr@îbHn… iÝXØìÈòeˆÄÓq *ÕŠ“ù‚#ûhܯAbÌÐm1Á bG$œ‚ª™.+ª CX•×娜›+Æ…î[dc®0s(8ˆÑÙEUQ€Gëç©'$X¨¾Ã?nÇÊúìßJ€ HÁHŨ4¸ûj¶ñ[ ²è©Úñþar›$ ò4H DÕ‘~>ÃYÝv]7ÐØ¶È#'(› ’2UIòB“@Ÿr›?svþ;dþZCN ô}v 1fk6Ä’Ow~Oööñ«$þÈ18;D0E.ÍH†øŒ‡»²l±dÙª¿{Ñ9?aâ½ —eÆ”˜–"Q*‘+ ØäX'¿$ý¾ÃRä™j,³mã$Å6KÉó ¿ ÖÃõ¿¶ŠR˰ã:o‹¶6T2¢ 1Hj ÈExªv:ö×\‘Ê¥z-ü/oŸ1w È`C¥€ ÅA¢@4 ]ô5¢7E¢Úp!Ì9ñc‘)ä{v* Qbè@²'¿ÏC6Êãì{^(E‰Ô±ðtw,8wô€I ½ž€òÐ["“l‹\E™e È^Wf$ÔI"«ª=Å ÙlÛzâ E…‚‰Lœ½VçÈÙ-ÊùYº»º5ã­GЉl|x11Ó8ÇÒ­ÝùžÏê{:ÁµÙƒâl•Ì)ê°R±j þãY›i “g=± y†K«Ô4 U€M^õ®VêV씆9N@F.o¶rh HŠñ©o¢¤‰ÀÁÆÇÈV‰ZÊñ³#}"ü = ð>Ú±“s”NþÛ¶bm±·Ê‰¨Ü˜<îý’I#‘4I$šóï¯Yæn,Þç@Õ™Ìøk7L9ûbÕìÕI!9[^Ó“’3å²,‡CÄké"Å›Ó4)ôHAÏþ%ô‰Ì^—>GðÝÕ]yîêõT¢Jš!qv|lÏDW$æ ’ !n5ÙÝù:dTˆÇÁÙ1^H¡…nHø:3;ú@$…^Ï@ùu¦Q²c.ƒnÙÎ<ØP!uƒ!yY˜ÐD’*…Qèö(èš”ˆÔ¢¶·ìÑãŒR)Ì€ú¬1$–å|¬ÙwDhåè%&¬DXû6ãÀ¤GŠœ¤Œ§‰E‚ ìn¬Ù‘š”©QqŠføò°¸ðŒ§Àö'G"3 ¨oQ{?OZeX³4çhÀËùÖ,Ò± 3ÌÌ â !A¡Ð¯G(ǰ£) ÇÂÛàW’&{•8´;3qö‰$dÐ"‰½\¢¶e¦ô-`Ú ‚Hb/r0õ×P‘@÷Ë óã¯e\dJâlޏJÅÔ¬Ì1»n@†$Ù³vlÞŠiº-l>GfÉ…võWà€ƒNêß*#•›»»³~N‰««#NŠJûLû”nøãÔÄ é0$ä(ŠUäöÖTÕѼ[V1ñ¶WÉ]ÅÔsä!ÈRÀ¨4M‹;èj§bÊÅÇY΄'wõ’$B“@šì€ îü-dLdL8;&!b§OL«¹aÇ¿¤HUìô(~]jä†23¨ø'Àô‰0æ^Vf$P‘$Š¡Tz"ÅgÉ 7„Í ƒ³úÃÕ(2·0ÆÉnWÊÍ‘wucƵqû1Œ‘|Iöø8m˜ˆ@O5_™ïûžÎ¦QnÅã²2±6l¼®yQ‚ñÕ€åCl€ÀÀ6Ÿ¹Ó41‘&=«çNîUL¾—¥Ï‘ü7uW^{º½2N#™A‰³Å0ζ.Iâd•˜-›4 !oò®µ[Šì•'ÑO–ØvÕ‘„B¥Ódf,8Ùú@$…^ÏB‡å£š[ePmÐݽv¬5+‹w)ó‘lI ] ¢Ã„‘iöm³&Ç–â“™$¬¥\’KX ùb|о½µ£ ±ÃnÆô≕ŸÐ~q™$f!¨‹$’ODÕß·Øh?Þˆ•óÐ&dþ ·œ×Ü=9iK•Àz-A¢öªÐ¶‹Á³àcæ豈ƒåت“VBÝhYßÜèFÈÇØö¼Q ‹©càèîXpïé’{=å¡-„6Ý4رBå'/9Y™…q®DÝWB^Ú a¹íø{†Àʇ”,(Ñ D eéš]ÌÛñó”&H€â“2‚B{ÿ=dÜ»%ö}¿.š|bB¯*ìªÊJÀú ŽÏ]j&F>Õ….RæÌ²3«sUiÜ `<…¾ þuç¿:цìscBrW)ÒÝ•Zü*HþåGíùèB‰ƒ2cÆ…RRÌü\‚KI°lüÕC@FÝ‹ƒÌã#r‘‘ä‘›ílÄ“CÇÛ@N^9‘¬s´Š¿åÌènºk¿ º3ϳ`>azN±F ˆÒfPAò9_½ÝÙ¿'Qômt^m· $ÆùÄ%qA+èØµ‰®`øa¢h­›VÝ&_μL_˜zõ[‰` VøØQ"ŰÒÑœI]·sÎä¢_TŠ'æŠî‡ªzªØïKCI•¡ª¢¡ÓÜèhVf&6tb<•'‹òR®U”pA$t|<K@[m;[cãâ¶8á‹"Ɇ#‹/ƒÑ²{?{¾ïT›#3lÛórÖl˜‹2ß2l€ÀÀ ŽÏÜë»5è–ÚöésFàñ\¡ƒXr°+tH"À®ükMÑ•ÐEµíðæø "CÈöì@,Abšв'»òt´PÅÚ¶Ü"ω BëÄŸQ«géOB‡ì4Õ’™ÛV$RA˜,¤—ÿj›$’A,H&É$O¾©F`aaí L0â1øUåf¯D:ð:ÐÎ!Ÿ·àîj2"ÜA–VSDQ¤¸ðhXèjZƒà`K“[ãŽx¡†; '!DP5àWc¯m-˜>¹‹›*»º›Ns1U5Vž Ñ"À¾ÏßKDĈöü(²ÎpWiH4Ï+0PH'ˆ$…º<^¨°id?6"€<ï—@çÇ^4´R’l[T¸Éˆð7›ÕR&pÞ§Q`lžÏdŸòZ¬x¢ÇˆC9 tdrÇÍùbIþçKD­Ù›?kÀÍ•r2!·Z9€6@``¿¹Ñº(ÕÃÁùïâ~—óýKŸ#ø.ꮼ÷uz¤wèˆvÜrþx#´¢ø´“;¾ÏÄ…¿Èºñ©hS+³mXÂOK©côÝËý B¯g ü´´)‘Ñ·cÃ&Ý’lŸÌ›:Z™ÎÑ· ÷ÜQ%Y¤*]“!Ô1QBÔ5±ûéh´É‹mÛaÌ9ñã•ò=»¨± MH@³ßÜ馂èD»Vׇ3ããæEÄ«1`³ÄHUìô(~Z’uQW#æû†õ—døsN-@ò$šë²Mû}õóå6ågº1ЉâLÜ%;0;R%»èƒv ÝÖ´§%+LËŒq¦}·ec|I·&TæEVSô¬Ì¶ X!H¿úï ÚÙÆP£gð]²yVqÈ:Æ#VŠfJPl R^º&º0ÓìÔ6Œ93*OQ™X2«JÅ¢š±÷¯=ùïTÏ÷4&Õ†¹çrQ/¬EóAÐãuBÍ  MŽõÐÂ{'iÛð%2âBT•â.F`‚ïŠÙ!E×B‡C®††]û‹:ccÅÁBª‚MWëçÿ=F^9±ˆåyEœÍ¾ýÔƒïã@%ö]ºLDÁ0¸†5*#IÝCçr¿{»³~N€´û^[£Ï0ޏ •‚tlZÄÑï°|°ÐŸhÀ“$æ¼ _˜zõX)` Vø’H¾‡ØhmtQvÜEÍ;ˆõD§¢LîA×ÓuBÍ  Mù×2šG⮬{#èоé­˜}™ó0±óG’„€á••ʲ‘î ƒÙƒö'@-ö}µñàÆlaÃE’äG_ÍŸ'ÍÝ÷zÙ9{NtË‘•ŽY”ô»À€ 0°5ßÜè- “iÀ“4g¼Ê5‡`¥€ ÅGD€h,}ú aÓaÏ‹‰O#Û±PZ‹·@’=þz eqöM»Ôùh}DàH•¾•²x¯@ï ´?m°gÀŠ)!eQ+’O™“›ãëå˪ñ¹Ðƒ°ð±ð!ôqc*¤–$±bÄ›$’I'ó&ô7 ³sP™‘3qYMˆµ }ǃBÇC@m¸sdÁ–øãÔÅ 1Èb5àWå¡SÙ ¶âɘ¹²£³¡JÅÕX[â , ìýô+ejÃ3¶OiXr’V`¶A!A$(5ì¨Õª*x´yÏõ5±òep¥ãk>OCõó¯#„“=yÅ£…·b¬ŸI‰Á™+Á&îþþoóó®*R|‡V¢ {}³eH°¾V_Q·2cÕ‰ª²À‚zë³à°×¾ Ñá›GGH0‰ ª£¥[ K…„»­e¡‘_áØÇ³½1‡ðÜoéÓ™SƒÁ‡o¶˜¢äìÃ…ðÞ&kn* sþZç©Y·Íq£fáÉÂ’üL„Ï]&®4bgÍf‚LmÍp²"e&j=#_/ŸIJ2îqÀƒ8ãP£€ð5î_‰â$o"ÿ:и¢®ÌÍmßKt5c°"y2(éMX§ìÌš£¯qí®çö[B€4  h@Ðx?¦v.O÷CõÔ}þB“ðeöh¦_û“úë/£qè%ÿ²/ÿ.´ßÄŸÈòùö×þúñKþ¡êàz=º¾Mµk×Äó;ÉagÇkÑ"C–ã`÷'P"ˆòÈ)ÏB¾‹q˜4÷ïUß²|AL¤•ËP»DðÈûZdÈ8d}Î¥1p›úGí«L¹ )9ò4¦2@Rsäj @qàÛV™2s©L¶ƒŽGÿcAh8d}΂ÐpÈû á‘÷: AÃ#îtƒ†GÜéLZs¥1h8d}ΔŠá‘÷:Sƒ†GÜéLZs ´2>çJbÐpÈû)‹AÃ#ît¦- ¿¤~ÚS€¤çÈÒ˜´2>çJdÈ8d}ΔËh8O«L™Â¸ÿ=)Œˆá>”ÆAÇ#ÿ±¨[AÃ#ît¦- ¹Ò˜´rwÍÆ<=¾(!Ï0I;ŽÊ… ,ÅèaD’½‹Ä’¼Œ›†v\nA› ("VŒÍ Q+A©$@‚9y6+1ÿ¦j_™Iò²?ˆ¼'&•eUX^@ Š@$Ä’l X¢:7šJ=þGUÄGm«è¦° ò8Û>æ§ò1¥ÿaigâ«q°ª€‚z7ø~ת¢®¨»ìTÆHæríÖXDr«†ÌvBý½üêTMe*:[l¼„¸ù ÎÑLTJhC bë¡í©ð°œ„|Kê6ØÐÅ#D"v•Õ€¢@Ù¯³_`;ëQ£2¶fÜҌ͇Ôxåa’_æÆá‰°7v,ƒ_M»ÔâY]†@Ãþ>_’‚2£lú¼x‹¯ü6{`ÝÝjënÆ‹¹4pœ|€ï+HaŒ c¶,M‹5Do¶“§ˆéè¦J¸û‹I‹4nØ*Íõ/›(’(_á$Ñ"êÆµÑVìfÁ6ßÙS±cD Òc»¶h 7ÕžÏUïzΜ‘«fß7a8qåäB&F“¥bGDß@Q$“à~}jûÑ ™ŸÁáÙq±æxfšDd‚GqÁz˜1=@ 6h »"®‰®‡fâmypãE,+#;)iJ‚ÞšÑ$ìM¿¨HÒ‰]¶¶ÍûG7Õ$.¤<½Ù)ÄQ=]ɽHÖ%mÙD\,]ËÓÆ8ÙFW‘¥1GRÅmtÌ ° ª xm'øˆö_b\ YFcOKdbÇÇꀂA$Y»]ës2¾‘ÓÝn8åsf`•ly•¡~ä×ßYµeW[96Û‘³`˜Çhâ*2"`„q$‚, ¶µüɼQŸ,D›n+î ªÉ)‹lY¥xˆ÷ëQ÷ º5æaA‘·ãæâ+Ï"!šB ²ª€X_Ø’ÿQÔn¢]¶fÈ8¿Æ1 ¬¤â,ú¼x€xÿá³dWŽ]ÝSX—yÀ8뺉‡/^pè‡ù¼l×?ü=uâ‰Z¾õuDWݱö,™fÈÃ’8!1pXa’™€$` ¯š÷]Ÿ *µdŽ[£0m®\ 1±2VÆAƒUŒÌlµHãdö,_~úμ›4­ÀdÃk›cyq!ɤ“ÒþL£‰ð¼€±ðOjOäR'h¦L˜“bãeL¸²ÀábÈ‹’?Š* ] «4Õß½_•ulé¶fØ­ Y|Òl„µŒÙ € V/òÖ\UY¤Ù•;òœ,É™rIU «Ý„Ô$ÕGvºÆ«G9]ìvÖeo‰© 8ÉrvïäC1» ?”ª {‘ÑÖ¬çüLûOÍœL™0‰Y›iq‘ —Y…g ›‘‰×XÐH¼ iÏ› $|F|wl|vê¤v å…än¬’z½ò!ƒÅ³ª‚l_â„+PáLgº&½5”šßdj>o†Õ×d…V(aŒ(´aˆS_šÑþúËìÿŒ0É,I ÉRŽ 3—`z¨–$Õ¨ÿjìää;Áª,ñ˜Ï–t Ù@äO±5î¹ëÈŒ^MºŠ¡ –Q*ùfSdöéÔtt—à#Ù«o!ÊŸ3oÁBÊ p¢¡ˆ»ï -þ]DÛ’LU&ÎßÂË4c:`™Xd«;ÌÊK1‰ ?K;î‡@0ÁÒq:‡À7Z¢{8>NT¸ñÄÀ’O©ö׫‘èºVs÷ÈV#S=xø•² Î9t»²lbO~úÔc.™—(½šå1ãîi¶Ç4¦?Q“¾–êïÇeÂHÒ”[9˜XY½”^§Ê%K¸vC7vðëÉ®ˆÖÜ]Q…%bvì]ÆDðy ~I½t·Y_UæO#^@z®; ª/·Á,x9YpF$ÇVˆÉ.8Xs[¿ r7BÍõzF-26š/6,«ƒÈ¤ÆlÒPÂgÍpMwÝ,‘ªÓ¶ÐI‹èm˜ËšÃåäŠ`“ÍÒŠ#‹€H¶(æÍÑÕI«#vΖم—¶ÃÎ&Fâ=K=“]ß÷×%.޹¨öl—nš¡!,¡ßƒ¦ ™#„›lçuqú2Ì%Ï,Rr`¦è0ª4(›ë®®´àÚ"’²0°ò%I±päÇP¸%gɆkBãÃ1k‘'²ïÛZiÙ•^€Ã$˜9M‹)ÊÊ'¸¹XäI ¢.º lÝÓe´Xmñ õ}\q g0%å ‹ÄÐRE ºña¨ô5_ù/ð"ðÚ1sà„I"'×øœŠäh•±™¼– GKVÈðuc[¦g#I-peWiŒBC}­Õß>Úóã$ŽùG#>ÇÞk ÈiZS"D©wõOVjw_mtÅ´s´Œ»fL¸ù/´¿"æX“¶Yr«<ÉækÈ_zÖÙœµ¡»nÏëäFÑ®( _Ó“Œqš6¼¢@ fêÉûÖ¦2´k%Fñ>>oÃ{b|Î8†7DÉi¾¸–£$‡\¸ôHE߃Ö>ÎMݦ‹+fG 8Í Ñ‰ ÔQ@Yä¨b€Y¬XêƒÑíG$í¸íš¬`OT0ì7wùÝèe³•—.Ï/Ä邨åWÈœ+±+Kßm`‹¯sЛ£.Ùë7ġ֖uÉÈ\„dxÉb»°£ùJ·^ätFš²ÿŸ É—“…’o##H¿XÈIülL„Ù45íix{ž>ñTHÒ>¬æ8Ͱ Gâ×€â€Ñm«?lÙ%ËÈ•r\ !Rb¢ÂŠgš¡`k 5‡¶EÑ_‹þnM®X#Å• ùyg”vñÈ5}š³ôD4]š—e÷\¿pÛó³r }ck4àpSÝ‹#É‘ïBükK¢Ë1ÿ¬ÅÙ¡.|"5¿ö‚…<ýöEU7uTð¥Û1¾(ÊÇ‹1=Y`Œ²´ü˜°i H¡]ºCŒÛ .Ü%ÂÙcÃÍ1á+,Øqˆù8$sÈ‚OfìG®ÆöjøYe³¡žÕ†XgyŠÛ1‰ ?K;î‡@0Á?‰§{ùÇÆH11e•dzœÂÊ'd×&Ÿ €I¡?˜É6ɵGœ‚(oei& ¬l)À‹ Äy¶ºè„o0´ ™ôd¾äí½`M¤bÿ1@H”ò5+TKG_/jÛòþ Ç …©ù‰¦9EQIòo³ÿöƨ´'rßât—/u2A:¥ºT œj˜ŸÌ’.ÜÀ°Ž×Ë'Øè-ò©÷:#‘ñbÆÇ/4g$ }v˜Xö@*© žÈvF…NÃfÉÅÛ¶L5ÎÉr%›ÑƑۂÌ#4V =h-~*Gþ*È)c#a»v}@ÍôF?©˜Æ Kæ¬j5atˆçâ†PBN™‘IîI"*¡•{°€z„š¢HîÁÑôA¶G#üF ³®Dë<ãxþ¢¬ÇÈQü¥PkÜ‹j‹¤fÚW%±r¤Âä&;SŒˆ¢ºÌ(+1ŸQ‰×XЦ݆¾XsšI£Ö6+ ¼c‰¨Úr‰ #åF‰'îF€è|.Ø™;+A:ÉÂGà×Å‚‹¼×Zº1|_¶ã^iq»»üž˜Í$Ö„Á³lÒàÍ“•œJvPH Y®ÀýAöÖ_—&žÍG‘¨mhݸlÑíðÅòÃéߌrÉǺTI"«®ûëηbsäš“è}ãm’móîfR=A$ž5uä Ö£{2ýY®\¶mó|O@ÌrÔëZ»µ‚A@Ÿ5®‘•£TÇìò¬;Ó¬ƒIçÉf2&‰b¬Ígé!T@S-ïÐÆ’-ðûly™3mRC9ƒÓÃ(W` VŠù z5ÙòF¿…r6÷À“oÉÄY2ý) bªdb¤öz#°Oû½üãã$˜²Ê²=Nae ²k“Ï‹À$ŽÀЇ1£—dÚS9DXï·²´“V6â”â*ˆómuÑkùòsœÂ3>Œ¯áð¾<’~/XJ ¿ÄÌP¥üò:»†ß—ñHvF…]†ÉŸ¶ìxi›–Åd›Ðő܀³ÍÕ¨ühÙƒâÑ#n¬–¨ã Fí½@íôÆ/ñ3Á Qß‘¡b¢Fø¨€á'LèŒ%»’HЍe^ì ¡&¨’;°tè³Öo‰C­,듹(Èñ’Ä3waGò•n½Èè5cø™öŸ›8™2a³6Òã"(A.³ ÎA7#!¯ ± ‘|~Âó›  ÒIŽDi^ŒLXV ÑB Ѷñ}ò; ˆÆËŽÈcoé˜?ÝQ¢8~]ÑÿÅʺг'Æ>“Ok"c¼3–oÃ}$0Ëñ  6n¨ìè`î+;”Œ32qÁàÊm™Tºüô læg©Mü>Z\—Ή‘–[š8¸¨e*KAf+ó@‹0ã)ñpÀqž_^vÊš y9ŒÙP⺢TMŽ=ut÷cµF}¾ )ñp¦ÄQü)“++~HÒô³5ȓٛö¸Õ•;+³ìÛSdfnYøç$V¸˜:,  ñcûØñü¬éäÕÎײâ¶\8°ÆÙFlœl™FK+‚ [bmt9#£ðÊä.É®¼zn*I4œ,\j¬^EèGEn¼Þ]“¾ìQÉåUÖ£Vm*!TŸ+ï­^¨•»!—ë±ØÔKE´fÈÚ°2%õeÇR×wBõ—¶o&Œ™ G7¦¢‡¶¹>ͤÙX¥*ÜŸ'Ql­3F(S1Ž@BkqHÄ­ …þÃ]RHæÛªhfÙ:4  h@ЀÁý4 ±rº®£è×òŸ„k/³BòÿÝV²ú7‹Iÿe_þ]kø‘~G–Êë9μrüTwÑíµòqþšõGñ<Òü™ ÈQ…̾¬mƒØñªÖˆ´ösÓmÜÐ3ÆôO€N¹a/GLãì‡Û÷©PÈ÷ì:˜òûqÖøØ’E*ÈIªÙ×X£œ¤¦º4N„}P þz~‡±:4% С¡)‚h)‚h)‚h)‚h)‚h)‚h)‚h)‚h)‚h)… hBR  ÐR1ÇÏäMì5Í~Úy!ê .£•÷¬«ÄÕ¬„³Î +醣ÑÖw‰§V5̧mV¿mk~3*¼†} Öb‡¥é/¢hþç¿·EvÊëÑdM/&V2²-“'B€ì“©rö‹J´Æ#N£Ž¢È|Jçå M½²g+ ¶,<Ù¡ãó:ÕI­â™EÝ`ÃE†h¿šjþ‚B‚h@  èEÖ‘¼t6Knª›€Ä—z¥‚ô¦¹`]P5Ý]×ë§Ëº/™˜NWÉÆÊÓ˜ýAx[þÞN*q²±n1,YNàÍŽ¡¥ Ò'ØvH¡ßî5UãÐu‘ft™s±XÇjd(Uè‹: øÖciì²Å­Ü3dÅ ÓÅAâ…˜š' $Ð'¡àkägâ…K¼bE‚²ÌìVE.Ž‘3£É4 cÍ–"ÜQWÝ1öüö¨ÙɪB̦ÍÀ"É¡Wî>ú‘Í- 8¶@ÜÏÎ|œŠ±9 q H² (4M‘¢É‡Š—–!0 uY½?QŽÊ‚þ]šÒWA4_uÇÌ<0Hȶĩ 0$ ßbÇ^u­ÑØÌÜÏ•€Îq¯À4…‰$ÐO“ì4ÙU{3®óŒcLɈÙÊT%‹A^ ]Š6*ú½DåuDu]ŠÜ·ŒhñÓ"Ó”F I*“@Y= ZM6XÒ‘¸"O*N‚YVÖ1Ù"‰öð(ÏšÔy5¢ª½”þ!7Íü˜¦‘h²¬d…°H@.‰ÇÜj50±¹E™êâÄÈeˆŽ|{âI"‰ñv¯b5]¥Ñ-“ñL¿)¼ªœI !¯ý@uwû¶´òј¨ØµÞ1ýyguÑ…Ìr¿Ž,*ÅûžÀëÜ×f¤å´iã]“>ñÇ\Q\r€a %ìX ž»ªð5ry4øÑÛ².y¢Är)bé 0y²ã_U±ÒJ~ˆœô•¤ÆŒcc ò"¬~þ?MO•tW^‹mûÄ+š6¼‚ïŠÒõd P$@&ÈöÖ å[1%6A»íó圲.Eåc‰£Ä€À1H$ëß]Nx¢1·½¯'ÕhrÇ“›³)QÂÈä èö,uç@֊Ží’bɘ¹$D 9FÊÀH³v+®ìUèh‰7¸á®`œ”2Õ}&äXX+ƹ_FÅXŸ¢.‹Á<9xë“ xäPÊÃÁk—f?ˆ2!ÆŠ34yÈzòÇÆ³5q:AÓ9mŠ™¥§4+‰« ªÕÕÞ¹S«5jȸ²Nq’Kqv8š$U€j‰Ø­)öTÑ8{–,™!Ôä‹Í”ÂÀÕù‹? ìêÆ-JÉj¨ôv牸—œ´D ád*H°)€öïô#î5é]wѦ[-ÇÛT‰h€ˆ ñZ'ßR‘¡Y9˜˜+Ê•SÕ•cŽì–bhZ aŒzœÀ^kBlD;®FkmñÏr/!\H­‘D‹€Iõ ]‹½my~¡‡)jæîÀ¨ãdr€ ô{:ó¡ÑX·­¶LY3A NQ²°$$تØ«ÐÑoã;wÊŒÁ1àÒú`zLX½Wr±FÅXŸ@V}ój‹<¹rn)”¼l¨ÌJe¨@É bë@jP 1ѰG‚42í–ãÿ‡ü´*ý™¡Ýp'Ë8QLLƒî6• 0 E ¢5ï¡7‰X7­³%$’,šX£õž6Qÿ¨¯G±cóЯ¢WzÛßòVW ‘^VÕ$fÅPîú½ Wø¶⌤iYÊLgf TEQòùJD] ]ãg‡7a•K Íäš_¤~f¾ú$‘[7«+(t¢z#ïªM$%·\Î|™)` q$r ¥ª XÝw]èO‘î˜æ6ß ÷*–ÀÑ*@` H$5ïZ HÅÞ6Ì‘!‡,‰9»:•{¬€ ô{:ó¡¢±ï;dزfŒ‚"œ¢e`H$IUìUèM’7¸b Á;piLa}&.\ ñ®V(õV>ÃA»4Y¸É•'4‘y#èVVé·àθÙY]« „€  X‹ 4 uàè;fHJm”uâõ)دÆãnõǬb2zuß@¿°ì×ÿËTl^6ï·å‰ ¸ Jn™AP4h‹¿o:äR=ûlh§ÈõÙ„Þ¬…lXÀ6(I±÷/6ñ·bàÿ˘Å$6&V$]ý$ìMW~43óq6üFÎ͘GQg š¡ã¿$xЋZ4ª…ÐËvf]Ë ÷¶&B™Õ9´bÉWŸ`{yìV-Û|³…äÈ9yF ÅH DƒÑšÐ…»`n.ÑâLIU õFËÉI 0$@ÑìXüôÛÌRÌ™Ö ½)}8Ùˆ~‡$žÇ€ËBÓ&ì|ø†F4…“‘SÉJA ‚}ˆ½b]š] Ìܱ6ðS¸, "g4*Í($bÏcï¨n]—]×£Æ3yW’,Q³ý$€•O¹¡ç¾Žµ¢ëºb>s`/¨eFê*§ˆj-\nˆ>}Æ´`ˆ·}¿#,áÇ+‰>ª (n&›‰ ¢{¢t-21w³%]£È*#ŒHþ´M!ðßP:=ŽºÐ;ö3> Â/˜ÆæWØÉ%ØÀ` QŽ´ÆM:cÂù4RÎÄôIþÚ^ŒÓï{^>$YsdŸNtçXÙ‰@-@É bô-“»í¸“$9TÎZBÀ@PI M|h)„ûÆ>Zad4Ë$Ž Ç“‹1n<|~}Qûï œ6îR¬Ì[о<Š’ PwuØû³@>fv6b\— 3q@³3 >  @|\¨31Ó+PñÈ¡‘‡‚œ½×oÂÈ\|¼Ž.ô@OOÈ€B‚MH¾þÇAMÛ®Þ™Ãn|Š™˜-p$A!KUE.ëºÐ»¢`Ýð'Íl².Uå×D©€b(‘}€z÷ДÊão{f_¨Ð劉9»2•;úÁ ½Å޼è)‘÷µÉ‹&jä‘$ç+@ q"ÍØ®»±W¡v?7>/˜Æ²ò*y)R$A‚Ü /?tÀÚÑNlÅCGf4’Bƒ@{“б «4««¨uktA±Z3nØ š0cê þí¸†#RÕ@‘Ý]Õu "-Û|³…äÈ9yF ÅH DƒÑšÐûµd¬U,qúŽÏ(áßÔ ’ô{4-0Mëo|y2„Ì& "¼,¬ ªH“bºîúÐS½mß,2ÖG Èc!bü…’¼k•€.«Ç~;ÐS“d • du ¬=Áýt œ­× !q²²x»Ñ÷¶åóô&vôãæG¢à²÷õ("Øòß‘÷]ÁÝ0·$LV´$ ²$t)€>;þÿž†GÏk`E‘r¯.¸%H D‹ì×¾‚™\mïkËõL9cŒIÍÝ”¨ãdr€ ô{:ó¡i–‹vŸø†<¯$\ˆ8Y‰¢A¥Ÿ û~~4!l-Çr¦ÃfeY 7(ÙHaç¦ôzñçCX‘™¹a`vA^5Êú=U€ ÐlÑ‹•f:ecJ920ðAñ¡è@ЂÙAöжʕ#²45hDøQÎÜœw÷Ö\MFT+øD_ˆCØg¹Ðè1£€Ýûi*2ä˜ó@ý_ÿ-h‹¢Ú}†€4  h@ЀÁý4 ±rº®£è×òŸ„k/³E2Ý}eôn=Ÿö!ÿË­¿Ä‹óg˜Èÿ·ÉúkÅ?ÈõÃð=ßÈá%ðz¡ø£Í*ÉŽæ«çδû$z$8ü_çz„Å·\õ­.‰L’\7âþúm—âßÖ56>!M÷ý{ÒØø Yü´¶> AòIþÚ[²¹}6ÇÄ-ýœi±ñ r6CjÛöM-E=ýµ°•€/uZƒAo^4¶4O×ùh4B—¿} ñ&Û—¾„ÐçÜh4O&åøh4C3WW¡~$ÛYК"ßì4\{‰äߟï ÐroÏ÷Ðh-¿¬è4G'ï³ùh_‰<›óýô&‚Ûú΃AmýgA äÜ¿­ƒ“~¾ƒDwäh4O&üÿ}‚Ûú΃AmýgA£½âÍ— · „.}Y@BѨ…äEhX= >kV.¢%ùw¶L–Iý9ž?IV/E£¸˜I¶íIh©¿§¿YT¢iÞBåÛ‹î“(™•Z9c1€ŠI?P ÑîN²«Tò:ì±ÿÈjü::ð¿>Ž>×·dâcÿ°Ä†FÛÊÌŒE4€/{ï˵{øÕM7ÙkмM¦Yñ31#œR¯ò¢›‡â£f—¡F»óÐ>Ý/zb›OGG(—Uaùr?÷T Ïé$k>öÍ;þF^%E˜¤¬N&Žù1 € 6;:ÒÅveí‹ËÛrò hñg”úð¬sJ¥P'² ,*ÏBîÀ±ä#J%—dÍ·eͺƒ"AÈŽW‘Ù8’ xXŸ¤ uÑi.Éï¢&ÛràÜ„ïŸVIL’¬DIZˆÝ@€:^û7¤œh±NËí˜9Û|Y9ËBu Ux™$ ä‚K6l’(òTnÜZì4Êìÿ5MÑHÙlœŒnÊ ( šÀ&¼ß¹ÖV9*fžU´jÏŠiâÇÊoTL„;C !*ÅH"Ø€@‹¨Õ÷ÙžýN6鋲Dž o"H\åº:ò@IÜÛh'‡Œ£m|oUÜ…’ ,MÆ©?ƒfÝäÃÊËHZ,©ZVVg’7.Zƒº M €µe_dÜ"ÁWÆ‚XÉÎ2˜}PecôÉåÈG¶&ú,M’(ÇÑ£¡²b>×3Ä# ³z`Ø@ÌX-ûÐ _å¬>ÁÏø§oÍžEʇ!ÆÑT ÄCÍEvG½I5[:E;9“`dɸ(JÒD`À ,‘vIâê€'¾È×<–&©Ùmù+ž¯,f£–FY9 âÖBwd±$<Ý£’¢¤ìÙ¶Å"æ>L™ޔy¥ýÍŸï^ډܒ-|[;Û.4Ðb²–§Ì²‹¾$РךP«cÍ_¾½GœÙØ Кhµ¨4|þšJÎNõ´îyy ™‰“(ñŽHI)R«3Èè*ÈPÞ…þFá6_ñ—8?ìþ/˜õã¿ÃÇÏŽïǶƒ½œ->=åfÉ…¸C‘;Ç1qǃò!@²l—$’áºAüLøngh2!ã(Û_Õ‘Ç /$…GdK@ØÐz±‹³nòâee$ L­U•šI#bå¨1âš@$ñ±îa q`–2sÌ­˜xÌly™í®ú-}‘D?"%Ø·0ñ,H±Ì³âE(,ŽcäHAM`PAù½³ðvÜ|'`Ƈ¹ËB>Í:âõåÚ"!q±ò&—ùÍV.R…¶«bmª‡To¡¤„âly+Å“PÇm|X£•âõ$~= “Ù«jÜ'L¼ÌÄÊç)‡Ñ@Ñz ÆÜëèO‚O@÷ØfëCqp·l}¯-£2²ò '6^QC:$Ê…ý¬žÈ6_tÃdÛ×…ƒ”è"(Ÿ-2¡@K0±ýŽÆ…n¶ãbb¶:˜ÈÉš7 ±0QT§² °+Àó¡9¹[.á>úÒ´ ñ6dSÅ'0>!C.ËE ‰¾Íñ# dÏMäK‘ pƒ&wŽbã¦üˆP,›%É$ø@îÐK¡8? n‹.>L<%kâú®à¬—AB€I ŽÈ–&½Hºl»¼˜¹YK G•#@ÿÍef’Hܹj @éTš@$’±n1a,˜¸òÆ~|ÊÑ ”ËÀÆccȰÏmwÑk²EÉ]ƒM¿kHDd3·¤ „ ł߽_ÛB>ÎwÄ[.៛/¥IF2ÅJáBH S5HÉdر:Þ¾YÜ=…þÏèòùP~;®<|øîü{h:èÁ‹´nXÛÚæË‘Æé1™Ä[ê1ñRy  ¤È ?EvM¯3:9¤L…‡Ð…rZ2Ä^Š@²lß]‰üI—kÍŸfu–6ù™²W"xÒZnH@À€U #° ‹½ øƒãnm°æã|”îf¸ÐÉ2´ˆ¬ LXƒõYüD€@ö 2F÷¶n{ÆÜ^²ãÊ£d K²•’½D€{Q$}…Õh½_MDÌ ñ™T€MvjÍÊ΄1e Á¾cÍÛ+Æ‘H2²  Ñ`HMõö«Ð Ú²ÿ‹DUry¥þsFU‹†¡mªØ›j¡Õè_Bð6mÌIü¹ò1֌ٛ0²)€CF‚ŽÉ²HèQ°¶3zÙ°³F&,39‘>R$_MH¢Y·=< *{ìPh¼+´´˜ûlÒä 4sÉ´¬H¶µ%@¢h_@öÖ%٥Эû +*h¤Š)ÙVQ¾ZEG¶â– @šï° Ñvn]‰—jÝ„˜Ð?®p¢Š7ÅÈáR)k,¶9(,(St®ûÒèÃèÙ•…–wuŸoÄȉŽB¶FAÉ”Š8r숢¾µLŽ7,éò7²eH‹&)WŒ¢¯»Ÿ«‘fª¨^äè_FeÄÝ·L|Ó¸íòA“‘ŒñDYÐÇž‚‚¬I$›$uìIöh³a’c,SÅ "‹+#Õ~BùäÔ ¨ü‚h_aHné…“ž‘,(%VX‹‡®À 04~|ív'ø9RlÛºíÛrKŒgôpÚ œx™T°!HRKUZ€ÄbèQ4Ȧáðææñ¦Æf°"™(YÖA*Iê…‡ÄìÍ‘“»Å4«PcÆY;TkuäRØû–„ø‘6D›´ÙÙ–8ÄXÀlfoÊÏG¿¢ýôm·ôÿžƒâßÓþz‰Íø‹3. wÂçqdru€r…YX)$iº$ŠóäC§²6Ø3ö¯mV-}H„À#gfòj‡šëA¦ÌŸìۆᛠŠ’Œeép¡$ ÔÍdr@ÙÅ Ñ9[.ã>øÒ< ð¶dSÅ p>!C.ËE ‰¾Í ’#dÏMáfɸC‘;Ç71ǃò!@›%É$ø@-b#á­Ñ±eÇɇ„£m|_UÜ’è(P !@QÙ’ÄÐ7¡rEÓeÝäÅÊÊXZ<©þk+4’FåËPb7J¤Ð  x ‘Ñø{o—np´Bl‚뎀â«lA ’W‘¢{o:ö'â=»7+& ññšx–)"žÜ)pÜH’RTVhÕMìÓ†™Û|XZâ‰Q!äN$FU@Ù²ëÆödÍÚ³'Üøã.BÄùqdLìÑúgˆ_[“ô] ³uÑØAµeÿˆªä&6<óKü挫 )BÛU±6ÕCª7Ðz‰±äȘò†<{sâů¨À‘øxô((Od‹‰!ljÝr`Ìžeœ¼íŽãñ¬T…Rl×}v<ÐÈvìÈñ}s‡’².{M £ÄÒÑR§™cÄù Q$"ú:ݰàämûdxùNZKfrH$bÄXùó@uàhWÙÎø‡fÜ7 ÙP´äc,K… f¦k ’È(X&Ž·­—üGå¾GýŸÑåó> üwøxùñÝøöІ M£qÆÞ×6\ˆ¤‰Òc+ˆxµ±Ž”žGÀPÂE@¶±#eÛ3qóãžEÈXq°Ì¦IŒ±² Oª@²lý…CÐÄÀ‘¶©?ˆaK4Ù ¦†B²· Tä*‹_îô ¦ÄÝ¿ÕÜÌGÆšY&õW™YãVLÍFŸ$€@³ZÞöÍÏxÛ‹À¢\yTb̉vR òW hcê$°º³­«é¨™~#“* ®ÍY¡ùYІ,¡˜7Ìy¢ÛexÒ)æV@b„, ‰¾¾Õz4V_ñhˆL„ÆÇžiGªñ•bá…([b-‰úª‡To¡S¢›nÙ&h2},l LÑsnÁ뉡ҎÉïì;&R4ºû&t¸¹dbd ’hš4–e2¤!ƒ:M›ÏV51ÙGcmÙØ{fDÐí,¯9h±äC°$©…‹‘Ùèw¦%ʆo{vTÒBÐA’è°Jò³*8-Ä ,@"5ß`5«I¶Ååí™Þ”# Xò×$ùœyÂB…O‚¼‡%hq6 ~†´R¹;.|ûÛ;@Ï fErbÈäëå ²·HMÑ$W‘dEUì¶ ý§kÆÅÇÛU‹dR!0ÙÙ¼ŸÅÄ¡æºÐi³'Ä;6á¸fÈ"…¤‡#cú\(I53Y€6@ñBÁ4[.á>øÒ¼,ð¶\SÅ p>!C.ËE ‰¾Í jƒdÏMáfɸC‘;Ç71ǃò!@›%É$ø@-bìû†Jdgc780Ì üÔ‰h¨P JûÑ%‰ w¡[F½©÷| €ûL© šYbG‘?™ÉÙ€°ÄØèwÕèd׵ᜠñ¤““€L¯ýNI,ßÜ’¾€Fü¹Rá¬x¸2Nþ¼mHÊ(,ŠÝò#È ¾ÿ} »Ù9ß1Œ‘í§Ò”;´Š &€O"O]lèC••³nïm+BÏ fEeh„Êeàc1±äXg¶»èµÙ"ˆdŽ®Á‡&ߵNj$"2ÛÒÂbÁoÞ¯í¡fíЀ4rZ™&ý´!B=Ÿï¡«T ¿UúèV¬ X;òt3"ß®†C@Ѐ4  h@ àþšع?Ý×Qôkù OÂ5—Ù¢™?²ú7‚OûÿåÖßâEù³ÌdÛäý5âŸäz£øn$aÅ_Ó¯TÍ/ȱOçþ5Lú$FʃãU¦'bÉ$ñZ¯Ë¿E!¤Í6¶=Oø–|”®“UãOølò¼Š÷ì>ú,‡À€ÙÅKß°Óä>Q³€² ÿËO‘¯ˆÄ9"w¦Ÿ#ŸÄƒ.qAÅ ýôùø™a€”U~Èê´j @±ª`h@І¾! ø†ƒâˆh>! ø†ƒâˆh>! ø†ƒâˆh>!¡Ð€45ñ Ä4 ¹Ø˜XwÀŽCîÒôJŸA»Û–ÐQåš)#e`Õ@»ûjTn¨Öêìv&^.Dá„ T‚=‚×R’ìôWtÜ Û¶Ó*ã ²©tMO~ÀMÿæ@Ö’RTFÚbdÝcÆR¿%qŠó\…HRH°(ÙA#Ú¯R4â$Ý—Ÿ9aÜâ…vå),lLCD’Gê¿Ûï«ðeù™Ÿ2æ®$ûdf6Ft)=ž"€$dެû÷Ö’QÆÉ®ƒyÆùl§l‰¾bØÔT‹¾ÿNÍIQvF͹cæeK¸"'ˆ!I ÿ:àƒ×DJI•¶×fÊxñÔK,lªYJ({÷t*½ôj-—x™§Þ6„Ü#ÃC!fäqöh†¾èؾµŠz3u²™{î>$agÁ%B«KÊN$$ y,PO´Š‹A·eÆãÉ‹‘¸©õ‰ß<蟾¤qjèÔ²ZÞlÁ‹‘ê:Š–Ùxš%–¾|ƒgÈûY+FcvL{„älìT Š¡œÉÙ$QèEx£úõ©*H±nLnT¸)´82;WJ ™ ?ûóãQâi©"cÜàaÉ(i2€) RÆØzއgí®”’£›rfy7…’4|m»œ³£MAx³f‡€jìk.1²Û¢Ï¾mÆx1¡‰–%rÓOÀÓEÇ£×CÀ¾ôÅP½‹.#¹&àqÅ8`€îªÂ[`TÑ,µôplù}I%VX¶¶T>²Oû>0””È-wt¦ÔQ¡~þß}V• ›¶V=Þ&Ã3Œ\™G#’’HB»"ú=j:n¨mnË>÷>7&ÃŽ9~`Äâ\Ž(´¥å]‚¡C³ùj¨¤FØÍÓx‡fl4•Þ#! 5(QC¢äI`BïÛV•–ØØ²“#f‡ •‘C#~DXÿ®°lÏ‘¼ãG˜˜³âr_TDXÉõ –»R‚Iš¯}j´sOä;hÞ±[zù1ŠPJ\FÞ¥›RA±]MFÍñ= j)&I6ÍŸC*Ìóâ”áüÒp1)戠¨©«=0ï] ‹âS$Y(øj21åŽ?N9¹+3ž*9PðăѢ§ÍhgP|N™#&8#2–„ƒ=F8©bÜÈü%Eƒ]ØëQôT¨ÓµçǺmñg¢ £yR Ђ?¶°Sę늰Â#.ÎàuÅKä¹¼›ü‰’¸"霩·U‹0c˜¾“ Œ·.ùB¼ PMŽÈë\ñÕ›n ‹-Ÿ*\wÇ(¬X@’.‡¯~ÚÌ—L^èF>ö¥¤™ 9™Ie” ¢k£Ø5Ý5µ’#•£ÓíçqÄ3sÇjr ãdz«à4;ü«^…ÑÁþFÄ®µI"Ú9¹[×Ëo ´Œ9"7)ò½6nL•xžDqû#B¥gKB¬‰]ÕvöÆ ²´« ‚KbPK(H%Z›âzµbñ>,†a4™…x4$æY*èŠZŠš³ÓôËCñ+<9)&üÆ<±ÇéG?%fr~ªz4Tù­2"øž9ðFLpFdù–„†ž£T±nd~#5ÝŽ½ôÊÍñXl;†>&–‘£’^B¥A¢K!@¡dûh)\\˜ó1¢Ë€ÚKu$WD?ÈèAº›¾<Ùi¸a–Yc†Q-±d$Z ‚|wW¡iЇâR1Ÿ+/ÓS„rà /"ñ€,@âE¯]Žüôt˶ù‘OV .DRD¢4˜²·¨ÁTò*`õ}{Þ‚˜.÷ñ¬)„Ÿ2rÌ ž0R÷È)$Ž®È;ÐS+•ñ"A²Ôc3HCV8a|’ù‹ª¡Å»÷¡]4º:ÚådüH¸û¢à¶0àrSÕú¹• akðŽJ $Q`+î-0Çø‘eÝWol`«+J°È$¶% ²ô‚U¨Ù¾'¡ ­X¼O‹!˜M&F!AÍ I9–Jº"€V¢¦¬ôý2ÐüJÏJI†¿1,qúQÏÉYœ…_ª‡†$>kALˆ¾(IðFLXñ™>e¡ ÏQ‚ªX¿2?ÈîÇ^ú fí£quÛbÏ zŠmÊH þ„ý´ Q“yøv‰Ê68xãTiœËDbG‘Yˆ±@_è YÕЇ7lÞÿˆfÍ‹XÊ!y‚år—ér¶Sˆ jîÏ‘÷дÅmŸ¶å3ãG†«!ÅÀžµòSà1èj*H\‡1¸›ÆV^>C¦>?©k•q5€IæÅlì=è)‰‰–-¹3d†y2Œ*[(¬Kz„~SÝ]ЫÐS-¸üBØÑM4S3ÀÓ9GÄRµD–P¢…ß¶…ÄèãdE—TÒX᪰@#üކL¹;Žn&tpË‚¾„³£‘fúÉ+wƼX ÷t.ªô-18¿¬Û²mÍŒÊÒ¬.%¶% ’×Ò V£føž†‚µc Þf“7'#nxŽ70ÌÀ qã H5V]207|½Æ9—,ExðÊ-†ôá|ÝQò;£z díÙóî8ç##b"W@^a‚±RA¡Ñ ×^(ûë24º+ºffaBgÇÄŽTHÙå2O€£C£d‹ó@WgQvj]œ‹~/ÏÚr"2âY>¯ÅM~AñUßÛ\¹¥8ÆÓÿC¯THç¯Æ_4bE ÛñE'» óøì}õÍ>W ³mq)ãE“⿌\Tp©j%‘` ³W~ãÛQË‘Ç$Æ:G"¥s¦£Û oº?¶µ'Éßú* tDüg•K²Æ>°z ùªý?ë©—#V™¬xîš3ô‡ñGÝhIòòÂTË.9ÆÒ,?Òüz4uÖµ òÍ]™”8àú"ô¿äH!§ tÊ@ìÐïîuråq»ý“5*¢_ý ïñ»FE” 7^ÿ—ßG>U°£ÄåTAÿH[誣f®®¿?ÓRS劻‡»@ßé}÷bùëEÉÈ¥W¯ÿ,¾>K¤ý×DP㫯V@ÿH[éltz"_–§“‘µO_ظq¤ítý"oÊ££âÀ oGÉ5-¿ô Ž iøÿâ|ƒýµ‰srAÕ›ãtHøû~#¶¶·NY®ÌNp}ÿ´ ÿì5Ëþ#—ìéà?ëþýà8ëò×IrrE'÷ú18Iµÿȯûùÿ=kN\ª©û£*±^ýøÓ.KTûý xÒvºþ7ÿ<Çå¬ù¥SèipÅÆÒÿRö¿?PüŽ´¹'ž-ÿ¡Î¾}|@Oâ_ϽirÉÇOØæø¢žÑãíøØ^´çÊ£i‘Cʨƒñþÿ]0=÷«)òE]þº$a :¢×ýþºaÿ¦³.Y*ߣK…;×_²ö¿ÿP=k3æœ]'þ…‡ d®ˆÿÚýFÜ~úÔ99&›ÿà“ããƒJ¿Ô?×ýþûqùh¹92ÿà>>5<ùþ7óþ (jG–n §þñAI*ÿPÿÚÿ_ˆuí«æž6Ÿúr¦‰ÿ_÷êüwìt—,’M=`¸¢ÝVÿ¹ëþþ{ä?ôÔŸ/$kèXqBW ïÌjÇ÷ÖcÍÉ'ÙeîƒýøƒÝ…}ïκ)ò95~룛‡ŠuêÀü}¿ùæ?O¾³åäIÛÚ5ããµ®ÍWÇ{¾Në&Oà‘€j yüÉ×N9rI]˜œaTzm·xùüÉqB㯦ò/Éå'ÒÅl¯@ÕÝŸ#ï¯C¿g˜èÄ?]#ÙF…ð?MlÃìźîGnŽ7XÑšI ¯©/ZRÅ™¨Ð ¤øûh íŒ{®Û|hSÔShÞT‚Aô í¡Z£&óñí”lpñƨÓ9–ˆ Ä""³b€¿Ð°Éø‘q÷EÁlaÀä,§«õs*Â×á”H¢ÀWÜ)†?Ä‹.ê»{cYZU†A%±(H%”¤­FÍñ= jÅâ|Y Âi21 ðþiI̲Uѵ5g¦è)Áø‚)Ó/çbX_ XG'5¢/£@’e  Žô Q§iÍmÇeɌб‘Õ¢f©W*l޽¿þ'@Õ ß7¶Úô±–F1<„<¼*($±,  ìŸ#ܳf6DYxñe@m%Œ:«?ÈèCÛÜç4')1ÞS/Ô”K^-”]Ý“Õ Ð´Ã{’\´Š\@°Í,±Ã –غ ­ ‹A>;«ÐSÄ­òÏ•—ƒé©Â9p—‘tX Å…¯]Žüõ ¦?qϧÅ8Q ¨8Oæ FVº<¸Øð«ÈûЂâ‘‚¹RàÄ®ù/`äÿ.1g,T)ø>ßBÓ6íŒ{®Û|hSÔShÞT‚Aô í jZ4  h@Ѐ(]Ö‚Øh@Ѐ4  h@oôÐ.ÅÉþè~º£_ÈR~¬¾ÍÉÿuýõ—Ѹôÿd_ÓZŸD_‘åòAùç:ñËò=QüG·ŠÁ@¤kÕÅwnL—ÌŠ"b:·²c¢ÑeG .(çAH˜ò!–ý7îu- e“ò y:ÕÚ3ìšB,OÞüjù×»Cï«èžÀ•—ÏP²ਦ{ДÉúâüôvG ½9Q_ž…¯hч%`GßWTK}É|–}Ž ¦@’7==ׂ™!‘W‘aCɽÀHŽ¡ƒŠ?ž¥¡LËñrýu¯‰~E”’,B:Dè@Ѐ4  h@Ѐ4  h@Ѐægm'>òÁ„Ï.᎑Ë$pÌñr¨7AÉëû‚nÈ7Þ¤[ÄI+5|ÆÜÆ\ЬV"ˆ:¥² ?õúWç§Êô_‰âN™3d‰’P«^8(ºƒ÷$ß^GÛVN^‚ÇØŒm"ÅÈ_VN3c@õX„—‹$x ]Q¯'U7[2Òº#kÛ·,c"¦RzP}F‰6A$›=“Þ²½–©2"Þ>^8¾f&p I$Øb@Š³ßžµ_{ ‡Û3“i\燀VÒÁÈï ` Ú·ì }‚iמ<ü¯A!”%A$Gªîä\¨IFöÆÏ…ºeå$™SÅÄáÑR?ªÀñÊú»¡Ø${ê&ÊÒ(ûNL$ã"5Y$ZŠ˜–$ZÍŽüPð<Ö¬ž·¢F;ò[Œy+›9‰ÜÄâ໳d–?og®Î’n´Y£ îM ãŒ=r/ó‹ýõ•tZ¦& §9v¨p\bÈb¢.1 (uÊïÏ`ŽV¶e¥T"}†EÃoˆc°å&8b $ l“ÕàU Ky“Eò6\‡Ç0âºÇ⬫/"Un¸›iˆ²±®»l”†ËºI¹Á˜ÒD5+阉$ ì0£ôŠë¯{ÒåE&Ï‘“ó *qY]Ôz`=±$‚רâ‡öÔ›uЊòóC ð f¹‘—« «ðÏtOW©'¢ÅlÎÛ^iõ¤Ÿ" ^~<¹CiKâԞϞïíöÒö…1Ø[vn$‘bË4’™$s ©$Q WÝŸÙ$ë[od¤…ͰOèâ&@Ž®®– cdÐ X=ØcÑ b‘£ r‹ÑƇ0G TÄP â²{W×E•Š3ɲäAŸ&l³­I*;¡[$­ºÀ$U𫝠•¢Ù\-³#q\*²4í(P; ÀƒfÍ€€7ÙïQM¶Šà˜? A&ÙÜ£8Ï\S‹*±‰$žLiEÐZíhâÓ,Ÿ ,»tØ™ ´‹«ÇP¢3j+‘&É$›³g±ÑÕýOæLUe!˜e|ÁoD„°¼Bñ   ¾êÍÙ>‰{~)ÂÄX ¥ÚË;‘ø™‰f5íd“^Þ5ƒG;â=§%FO'Y @Ì%aaZÀ @÷4jÁ7çY“i"­œÆÛf6H˜qwWu"É+TºÀ$Ušó^9åª7[²ã fœ£:e PFA Iß›'Ûÿ]eµI yÛ6·Â™Ds‹D+ 1Ÿ¦Í’ÝýG¡âºV·•È•Hô{fß.,Ófd䬓dq c‚€ €$›ìÙ'¾¼V½'ù“Ç÷ÐÌ»'B7m·+t°ÎZ.4€ SÑ%Í4Ü€@x5 èeÿùŸþG£Çå½1øîùróãªñï 1áü<1wÊù®QúòL±zd76vר˜ü]Ùì‹z¡x_ ÅŒøSe—ˆã<N,ªßˆ’I䯔x ëAlÂâM¾l,ŒËi5GŽ2¡U ¨üD’X’MÙ¿#£ ½Ùi~3ã*K”†eËõùz$FH^!xˆZ}ÕŸ$¶ü8å1›p ‘ê+ÃÈ39¶n €.À6ØÐ ¶tqqbÂÅ‹ áj‰}š‡ÛB=ŽÐÈv×vœ¦é»´k7ä‰f³ÈÕøɲ …½QL?‡"Ç–\‡\RÏ…,N1…&ͯ"ZÍX°(PÍ…êƒáă!b´™!9^%Dø9Y®Í“ä`‚Ù1ü>àœXŽ3Hùgi1-9‘Vªq ²|Ý’N‚ÙY>Á}¨mË,Šë‘¤Èì sí­TD×Óâ€4»6¶&RÏŒÐg²C °–&^f^€[blR}ô!’_‡C¹T“K“Fc%‹%q¯é‘VHó]oT ]Ų¾k”~¼“,^™ ͵öf?v{!z¡x_ ÅŒøSe—ˆã<N,ªßˆ’I䯔x ëAlÂâM¾l,ŒËi5GŽ2¡U ¨üD’X’MÙ¿#£ ½Ùi~3ã*K”†eËõùz$FH^!xˆZ}ÕŸ$¶nÛpþG qL¥ÚÙÈ®Lij,’-dÝ~]Ë4æ ¡’Fu(X”²O`) ‘th«»:6zÄ~gç¡èñùL~;¾|¼øê¼{èC;m¹3nqfçf#¤Ì1ÇSõ ú‰ct>ÀYïÚ´-1WÃÒm+Pf« hñ®ô† ’ßU±4£ØRÐô5±¸Ûfn0ÈœfCëd²1H@ø9Y$X&ü< îŠG±Ï(Ëš‚tÊiÃzË T­ `Q'ÍÙ&û#@ú/ÃRzp>>xYņ̃Ôhy)2ÌB‚(ƒØ=Á Žž&4XX‘aÁÒE¢Y³@P³ú í³!Úó›z;«gÄèXâ““×ÕĆîH'Àð+Az¡x_ŒMÄ医ˆNó,\.l6Äöf?v{!z¢ßÁ³%ÑäîS9H"ÊËÏÆ› >.+óäѓ̕#î(Q:B_ØäŽ2IvŒ —‚Xã™Áu IO@ .‰d5ÐÖn1Z3Š“nÊíìÒnùx†Eo–V*ÀÛ;>ô=¾ýûiX/îÍšþ ÁÁÃÀaB´Ór2Y ëLÄ!‹ ¯Ë’”í£J5 ö¿í¨šÏ)l­|1ŽƒV ES$“nÐ{PÖ—#»kÝ™|z¥õAãÁöûêFJ15(¹0Õ”ââ’DQjMÙ¯>ÚNQkýüŒ£{&ÏßX›RI/F¢±m¿a©(ô$£.ÂÈìkªäÛµÙ•>ˆðy^²¦•Ú»5ƒuO£gÃʲïøè×Ñ `û‚ÿ1®¼SÕ¹!»=øÛr%ÜbÎÌÊFXKR8JŸ¨Wg‘º`;ï^ÛÕ7Ù¸~!úé̾ à~šÙ‡Ù‡xÚ¿ŠÃ‰B¼‰Sš–R@"˜ OV?>¬S¢#Û2±ñ1ñqw2Œ“ú™2Aõ%hþ'϶‚Ø­×áåܳN`ʉ ôgR…‰K$ñ6’ Fê»°Nˆ—áÐû«ç®U$ÒÇ$јÉbÉ\@kúE…$U’<×@-†ÃÃql¯šå¯$˦Cs`Gm}€€ÅÝžÈ^¨^Âqcã>Ùeâ8ÏAS‹*·â$’y1¥h:Ð[‡ðäQÂÑgÍê–…ôyDFIZ¦$žD±7dŸË@Ýšv­¹6¬fÆIÃLò[»1˜š²Iè/ÜÙ=“ nÅnÛ<»„ðæcdˆ¦€8Fx˨ VjÅ@ ›ìz N†Ç·ÍŠØ‘af˜ñ±ã(ð” e@_¨ö+Ï^tÄel1åî‹/ eI)1ªFe[’l^4º°BØC°F»°Üå0MÝ£Xq¸7&K5žF¯ÀMHª)‡ðäXòËëŠYà0¢E‰Æ0¤ÙµäKY« Y°½Q| °"ÉhgŽ9ò(’pª”Z[7D“Ù7uжNfÁ‘·ã`ã8AˆêÐóRÊxЦ‚AرgÍ‹/viÛpþG qL¥ÚÙÈ®Lij,’-iЀ4  h@Ѐ4  h@Ѐ4  7ƒúhbäÿt?]Gѯä)?Ö_f…ä»þúËèÜz û ÿåÖßâEùc$ÿ·8׊_‘ëàz=º¾M wJ5ê‡â4µ&.H•²ŒŽ„öÔiØL²Â$GDÈP½ZBèÅ&ÍšE9ÚµÊP‘µ$_nÎ áyO3îN´¡:#”,XÛ7nÓÈ#¾Æ¦3Q4ϘüDmàwàê¸Î‰”lÌûVå*·,‚;>Ú˜ÌÞ\e%Ú÷vp˜…ë­L'ö2¢, Æ,ÎFrR¾þ¬c5"JPh‰ðwTb.ìÞ’SdRŠ6íØF¸þ©¡å¾ú˜ò}šÊ3mÏËK15ãôÕp›2å³íy剂r ›#G JßmÝ‹³ž$Qž9—(¢"Ù÷1Óe¡§Žc(¾Ž–ÛF>7 ‡¶¿:ëÎm«4òî«ÈÕ1Z°ä§ÿå ¦×ï ¦×ï ¦×ï ¦×ï ¦¿ðŸÛAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßAL9¯ßALçgç>ÕêEHñâÒ•f'ÀPÙ=ù ²h%ð+#fíòè0àÃ’R¨$“€bE’¤Ñò@ñÙî²—ÅlÕÔº.è¢vÅ\WhÖ@’H¡¬°ÕE’AóÑ¡yÅcÙoät%0 °39 V¾jg+u|Œ<©±áxÊ<ÉDއ@ØÁ:=õÝŒRua¹V‹G¸Dø³fáz„Fà*wÉÍ€MHïÜÐ&¼^qWVk'ôiÂȃ"ìÊÈ&7,¶ Hß¡GQ¨®ÉmìVòÙ1$rC,Æ!™L2Akñ{W/øÖ’vdÌÝfŽ>;~SLu˜%æ),X’{Uaý¬b«bRy€eÞ’%Üñ1 ƈ ¯žû&ÏÛ¯ßR£Z++;²îææƒ>)Lj¶vI4›óà $£J‹MˆÛ÷GÊÇ΋.3þÌ ËÉI,,ߓҒCîuŠHÃm±Û¸òd>D‘/ËG/@Tb2A!k»Ðcì4IU¶Ùi2¤‹uá\d$vPp*Tf¬5šÕ•çYJ4[•Žy¦L±ë&MI#ü¸"3‰Z+õÆž’ÇÊÆD³É™$SïR4ª¨æ«|ȲP:¯î~Ú²ªÐä;2(}v1P¾t:ÙóÐêû>5)}ع}ŸrÍ‹nÇysdþvC$r,j$t¦+JEb<h×D‘Œ™š}Ë=ñá…²¸eH’†ò‘(ò()í ¡×犉nTiËÊÈ;n.晲¨’8Ù‘QJ($X‘È '°z«ÕÕQ­ö-÷ˆ÷ŸK-™#ÊŽ6JB0P“Ý–n€ê”ßæJ4e¶70N7Dîr:*‘V&”û1ì“Ðûë3ÆFìÆ»Žá.79Y abY#î¸q•ñäÝûY(è‘rØ6`O[ ©äâÑ•¡¦ Æš€èA¯z Ö³Q²Ü¨jçÎ1L)™3·z%–0$eâX«jˆŽÈÖÒJÈÛ%ó³æÅÂC, ¼R4¿.¨Õ‚‹@¾À±C­WÑ.FüfÂÊž<ˆ³˜—@Ñš"Á s¨©wœíÃ>uÝÚ3αd¤rFãÁ‚€Äù²ÍÐR›üôÔkfSvWt˜ï RbÈóI­‚J€|“KfÍ}B´¤º-ËÙHwŒ¹"“.\²ü°ZhÉ"€J€;* dÝ©ïßVQMöe7FÜ=ó;oÊ2fˆÐ²äU±Àµ]qf<`ø×Eщ1½n)·¬Yo$r|ù„¿2•1™UqmTõVOë£èžÍû&VV^Ù¹  ƒ2Kƨ²±RE}ȿ﬽Q‡â·ÉÇDÉ‹"P ¨d ¥±e‰ õW©*hÜ[G.l̨³ É%|Â"Çé},¬»¯ “ï]Uw®t·RròFrG,’}rȆ6Š‚eH5Ý€=Íßå©$¨–ì²äeâ>VBe4«*%U ˆú@4ÜꤲA·Lîü7Ÿ™•$øÙ2´¨‹˜ó:¨gF ,ñQ*Hêè‹×¤óÿ#ª¾ÿ¦ªìK¢ú†N6éºeãî̧\\XYÚB(³_.Fø€§¥Ùï 4*Vvl_ïB óp›yPe/ä͉ÅBÆËȨ 'Šo¯¬UxÖ¬FÄ›©Ä—5å£í¯‘:(U•+’­Q( dÝ©ïBâ]7Üè0²ÌÙ§ÓV Ì–5¿JFà^”C‹0±à‹¿ PïsbÊ–X¤;‡˜D2•1™j¸ó6ªz«'õÐbD»Öõ6&:ÏéåËÊDH¤É*0@>«Òõ^bŽæÙ”söÜ|ÒLÐ,„À?ùèeöhÐ<}Ïp]Þ(r&˜úÙÆÐ>?Œ/"Œ­Ä]…I‘#Æ…Õ ÅÞ7JD<³¾ÚÓúRâ•1Ê´ -(,-€£g¡Ù½‹®íž+ ¬‰½&–wŧTv¦!B€hA£ä‚ ‰;wÌÅh±%ÉÁžÑË,qƲ´| Nƒl¢À: Nï›”˜Qí²e•’fŠ8½o ªCҎɺÈÑÐS:ø¹1eãÇ• òIPÀžï©+hÖ)é ÄøŸ=a•¤ÞC·´ÄMQ ‹@@X³àÙäÞ¦dÀ#ø‡vM¿%ži‹«Ä"õbQ(äEÐ)÷ÁìzÖEÅ‹~Èm¾Q•Ÿ<ö¬øù²øô!>*ؼÑñl,q22~¨¡2º­_Wèÿ0=õ¨qòWÈÄçÇz"x¾+’vÄ“*ÚT’ª”±oõºþÇí¢ãäÃ}×ú—><¿E"Áø&p‰7&4\ï ê‘û)?¡}f\2qýëÿÒ®h)o¢q¤ø•qZh2.&…åäh‚¹WèH­ë~9j¾ÿÐÇ’>þ¿Ô¼ ñqÇt†Vd ®J­Ú± 0A¢NôÂv™sãÚñ†~<˜ÑÌJ£ð~JTÝî.¨sœ9ŸFã>bæÛ¾-ÞGÉ>¤€ú(d ¿Øü€'WŠÈrrCø—ÃÙ>.›21g%Q"Ùì‚<þÇX||ÉèÚäá«b£Áø§l•¢Gt/"¡þY*ňƒUVkÏžµÑC“÷ÙÏÉÇ—ûè¯ðïŠ ã¼ŠòÈÊ9FG`vEQÅÆ’ãäkþßþˆòqä_Óø¿%–1$¼£„Ê#1hP ›#®üþcWKÿ?èeNþ?Ô/‹²ØÍ#z*¥€ˆƒLHº« Q¾¾ÿmGÇÊÚ¿÷ôiO'Enø•£&#!Xæ1“é±âÄdUDwUØûéâô<°êÈ‹á=÷t<%–$Ö ‚AÇ`ë”øy2×GHóqã³>WÛžÏ*ŽqÂepaÙýWê@÷ÖáÁ¯’3>uz4ÿ¨»õ×ÿ›\|§O?¦øK{!1¦ÇàÒ#$‚f¨šêÏuã]eÁ&•/ü˜<-ÛÿÀˆö,ù±þeôP×ÑU®UúêÛZÓ§U÷þ†WõÛýú.Ÿ n’†’(K*¢¿Ò %Xdމýèø6Ω«%~ÜØý&H/ n<F«¿Ó½O»¯Eóƪÿô.m“+%šyc@Ñ»…w£ôš"vUæÁûUý?ÏkAÿP°×f´ø|•±up ²µØò#È×)ÓÏÄQþÝÓ%p©•n › =ÏØ_BüŸúê¸dãM|ÐÊÓÛ”òˆ£PœÑ à1#õ¥¿Ð¾´ø>5["çYo¯÷AƒðÞç¸8è’2È×Ó@þÅ«õ¿¶’॥ì‘ç^ßþÁþܳKÆ!d-JÄ:'¢,ÕøèŸY|mj¾Í.x«÷ô3áMÏpˆäa¼N¡Ê® kÈþÄ~D}f|ËKE<+äö_#à½û#+cs¡d $Ðû}õaÃ+ÚæƒZø)/Â{´˘QZ"õTØ j˜Ÿ·wnõcÂöš$¹ãÚe[áÙ'8æ?Ã"ÆÒ€@'Øöê@÷Õ\¶GÏ»þÝe˜B±›ièñf[°¹èõù¶ã¥ô º•æ«BÊŽaE’ISÞ…h˜~ Ï›lÍ’,È¥ÈqGÇeMd(vY€'¢TÝ@1:»FAÈÆxåyÌÈRa«Ìˆ‡Òz Øö«îô#ìÇñãD8vAIfŠFŒ*©.ਠyXâ=]/D{‚ìèm¹=·cæ²…3B®VüX¿ÏB>Îff鋺žsLfÅ AòöŽŽåÆÁ ÇÞ¾*Î…Ñûžà»¼PäM1õ²' |~)^E[ˆ» <’"G¨V.ñ»úR yåöÖŸÒ—©ŽU QiAal=Íè4]wlð™X°edMé4 ³¾-:£µ1 @ $hè43pš| ‡ÈÞ&12™$¡ä^ €C)Û(wB‡zß´É›.Ý›€©Šãî=y± 5è@Ѐ4  h@Ѐ4  h@ЀÁý4 ±rº®£èè-|ÓXòA1"ûïCK}„‚à <…Ö¿ˆ_™ç&ÂÊ9ŽÂDôuãq–G¥J8ìeÆDq؃¯TDóÏòéþzDÊjô*I–[®ô2û'B…]nº^Éï ö a ¦4]Øa¡}èBÀïB̃Dhk[C$ÙÿÓBÓ&Ççûh)…ÏöÐS Ÿí ¦??ÛAL,~¶‚˜Xüÿm0±ùþÚ acóý´ÂÇçûh)…ÏöÐS Ÿí ¦??ÛAL,~¶‚˜Xüÿm2¬M‚ý´,KXüÿm L,~¶‚˜Xüÿm0±ùþÚ acóý´Ìfv"K‘ó„I™¾á#Èë¿kûâæ„Ï·ãOŒ“4+Š[ŽVR@=]È 5wV~çYM¨›Ó“& þc夿H$,¬¡ˆèšY >ÃRÞ=–F· vðî¸áÐWŸfL=»c’ÄuI#(PÊÄQ@ÐÝUiï ×¢’cc9vÈÛʼ”ãvàôEkó@a¬ßÚ5OÓ‹bÃèCˆxÙ ±$’M’I²¹ÕNý«Ù9ØQæcøï@U%eü‚ïǽêÝ-"U¾Å®ß*$™$²Ð¬@4l€{Ø~çE-tV•„ظ2î •&ž¢×2°tjñо»®ô¿M ý–ÌÁ‰rzb;H@fj÷¡WT,õ]zIÚèA$û42cI$¸…%‘0W •@ˆä{÷ù ãÑvgÄÀÄLwÛ›Ò•H•™Ø³*¬’|~}{jF[Ú+ZÓ6+AÛØ$jE]P Ø5ÕÝ‘}iËôe"²mxá wÃ+ÀO‹°$ A6{6MžÍ/ô ¾Û…,\òð˜°P¥ÙAPI€@#³Ñvu—Ekd&,¹&=µ ‚íÆÀ·DŠH¾‡ÛQIúAÇí—Ÿo‚9S& gi 6d•˜-›4 `>Þ5¦Ýi•ö^hp1âTLBYœ»ͱ6MŸÌÿé©*öXåö/2,ÜvÇÈÛ¦k•D ƒäjd—HUû›~ÜØ‹ŽÑJÊ’³NåÕXblu~蟹×EF6##lÛä…qÓo<"R©ÅÙMD4}Á=ûë-¡™tÊ6µ=1+èØEýÁÒÿA¦ý€ÀÀ—92Û•ƒHv¢@«"è:²/ö'êƒ_°Ë‚æ’Hpí¤`Y¬› óù×f{,m }³âcHO§ÄܬJ/Ùlž#ÇB¼°Ö¤úЊ(0’Þ€üd ³‰›‘=ŠïØ>:ÔÊ_Fª?cnÂ|_—N¥[œl²0nFìòìÙ³}ÙÕ^Ì4^}³nñA& €…ôäe"Í› ‚lölö{6u[×B¿e.΂S¶ÿ¹DÂÀ@EC£×߯³{ª-jÊäbaœß›o%”ƒ|È@‘u`²/ÇÛS/I—¶]öø#ŸÆÛøÊ×Y MYš×dO÷:ÓºÒ"[ìªmÛf,So.Ò' Ä€;èH³Ð¡©zëa-Úð¶ñ›iÃeI{rò1$Š£È›B¨Š"Åj ¿FdrlÛrâ. ‰¸‰ œ½fæ›-ÊùY².îxë]ÑÍ]—ÅÆ‹Æ‚>(€Qìæ{?©ìë¿‰Ïøƒ%DÒ«± ‰X)õj î5™¶‘Ò 6sÛŸæ7,Ò ªÀº½ëß\·Tn•‚áÄ“MË›¢ÎM_$Ðñ^4mÐÕØÌ\XKz W$º‘a¬›»óvé¤SsLŽªŽîÛ‰·Æß* »<ŒìH;bM( ¡¯Yæi¶iVAÙa vËz‰ýCBS2eí{vt¢l¸‹!X QÝ0OFÇg®Î‚™’Âùï⾟ûG£ésäÝUמï΂™H¶½ºßeÍ´â X¢¥ƒ#±aÿ¤HUìô–…ù͵E.(€²ÊA¼¬ÌH"IB¨ôEŽô"ƒí£pÄLHd ê·0ä’[•ò³uwu׎´"²ì›\¸±á>9Ä¥SÓ‘”…=`‚A÷›®ìè*F´Æ¡  Uà¡)—õú†‚™–=» ,³œ¡ÚR $¬ÜA6x‚H[¡ÐALˆ6¬Q£2–•x»¼îÍǺ‰$Éz»ÐS¶Ì`’½Aê°28ÈQˆ¡eï—€Ÿ¼h)‘ü+q†$fD@å®<‡V,l’XI6|“z a&϶I0…‘!R±úR²=Å©Eö@&ÈÐS,ví½§ÇÉ8ê YqŠ’`€uT+±×¶‚™m{t™«¸<$Ê+0RÀPb Ñ ²,~†ƒm{t9‡>8 Êyäb ±ˆ[ IÈžÿ=,Œ}›iıEKGbÇH«Ùè?- ò"-›j‹\Qe”ƒ!yY˜D’*…Qè‹è>DÿÛF"መ(ÈÕnaÉ$·+åfêîë¯h*C± ÇÃÇL\dˆ *Ù4?Sß÷>t%19›VtË>T\™hXrl€ÀÀ gît4´‹6߈ÙßÄš+ŸÑôŒœà»ªºóÝÕêi„š íøM8È0Ža ƒg H$Wêíù)É‹‡cÚàIcLrÂdã!’Rå—¾­‰ vzw¥!l#ØvÔ†HD.D…K³ÌÌö¦Å1$ô{E#ΔŒîÁ6=­!0®=«?7,ìŘA$’O`y>xëJF­;~!xÜ㋎NhlôÔEþ}ÿ_ j(Ó#“h}‚,ŸÓZnÙ*‘žm³ |ÄÜ%2ú±þ\‡ ²(4/®ë»ÐÍ2cÛ°¢Ë9Ê¥ €ÒJÍÄgˆ$…º4ÃV–åœÒK+HÔ Ä$×2eÀÁ•&ŠHA[b `w`Ž"ª¨€G}è)ˆŸdÛ$Ûßk|rðHÜZF%ò$±6M€lŸËƲôÍ.‹fíøÛŒb, åC¤™—°lÄ‹¢à‹ÖMK±O²àK:e?¬$X„bEÉu%A° ï»6O¾«v¢Íµ`ɘ3šd•ó €ÅA¢@4 ]ô4¶_ˆ&Û‹I˧2›¦y‚‚A!A$(4:àjÞÉè\Û‹ŒøP$‚'Œ£Dr$+Äù _}Š=Ÿ¾¥îÇ¡¸Xmѱ}@´Wœ:r&‡é_å«jÍ–ÊÄ-r5ƒ̆èû©»ûÖ¦‘‹}ŸñSÂë)fPAò9_½ÝÙ¿'Keø“‘·bd:4è̸ ‘‚tlZŽ"Áð>ÃM²hjãÂ2[+ÓþcF’OáöìŸ×«ð5 ‹ÕQÍŠ²7#|É’ !I I=ß“«l”Í@ŠtÍG¢8¾™3+±Yx0f"Ç:š J±VR=ÁÑ"ÁðH÷ÑW²ÛeiÀx ÅlqéãH²B¡ˆâËtl'³æîû½-‡®ƒ'lÁÍgÉŠÙ@ªrQ°{‚Ÿ¹Ô&,$ÚðäÌÏ õ°ç‰ P%n‰Ð$XwÐÕÕ ¦mXåœèà"KnËšÑ$)4 ®ÈžïÉÒØ¦ÈÇÙöÌc'§Œ*TàêÌXïé’÷àPü´ÛL˜¶¬#ØG·âÇ–sB³HA¤•˜($BƒC ¨-•ƒlÄ€ÈÑ 9H¼]Þff®è$;$Ez­ØôíxqÁ$ •‘ÄÏÍTK_.€Ï޼jû‡ð¼ELj²*,Ls:±$’I`A$’I²oVبŽÇ‚,hWÂFŠ*Ž€¡qB²¶¼ÙW#&Ì9€69@`€l üίğß!‰óÿĽ/çú^—>Gð]Õ]yîêõr±í˜qeÀŽÒwFI™¸Ù³@’ÿ :ëÆ¥±ñ+Ͷãz‚,^¤N ¬å€^þ /g¡CòÕÈ|I‡iÃÇàˆH†Ý„ïÌÐ}WÈýN§Ä|H;Fq„Nd.e`ÁÛrÉ6lÝ›7«ø—nà¶Ü þK!V[6A»³vI²I»$“w¦CâhÔø‰“øFÌmÅE–B¦B¹(Xö"´ø‰1mXåœèà>¡åß2@&‰!I Mv@÷~N®CâV=lŽ9£…š3Qˆoé[?Hìô(~ÃL‡ÄfÝ·Çéb‰8Ðd™œCô­2CâW#iÛòpŸmŸ”29gNDY-È›Çfüþ^:Ó!ñ-›·ãg¨\†–€"£Ðò/ǽê|GĬûFIEš6*ŠD²°Œ€l …?¡®¼iñm«L¯›x˜¹päz­Ä° ­ñ$*ÅŠa¥±ñöŒ²~m"n|™…ÊÅTµÙ MlÙÏÜél|B § »Æ²r‘8³¼î̾ƒHßDwÞ–Çľ&.eÇVÚÝÞBÌÆ€–$šÏ@il|IÊÅ‹21Í Ø1LÉÝåH$wãÆŸñû>ÞøÉ„aq)4™”0>yG+÷»»7äêä>%²6ìL©æF!+ŒbV ѱjF`øa©B¢Æ xFAË üÆŒ)bO€Iªð;'õëì4÷²^ô*-¯£›5!³Û’4I MHì€ îü@û5¯‘úê®È4:¨¶¶a§bs0ñs‘cÈRiƒ++•e#ÜAº°|±: bŸiÛ SŒ=ÿ{¾ïBÔ‰ËÚöüù—#*L´:‘€` €ÀÈØçîtÐIµíÒf®àð“(<¬HÁKAŠƒD€jȰ=úm{t9‡>8 Êyäb ±ˆ[ IÈžÿ=,0¶­»o•¥Ä‡e ÜŒB­’A$(³àPý´²Ò``̳$ŠÃÉLA,‚;UUc¾ôÉÃÄÅÁŒÅŒ¤rbÌYË3rI²M;'  ¦W?nÁÜÕS.2ÜA¬Œ¦ˆ¢-H4}ǃBÇCAL—ÛðeɃ-ñÇœYÑCèzkEYc“W`½Š>Ôl¡‘ÑÉYŸDÆ—„…¦ä¥ˆèÑèÑïB6ÑËÃÞs··ô°ñÎ=â´Šò(6M$Ðä¯p ø#Wâ-û®~VÝ>é“”q¢J p!€‘É£TIAÓº ‘«ú!³dš|ŒFyó ÈBHd 8Ð4H # W½ê>Á—âã—&×,1ãHÐ ygFQT¿H6A«ìÕŸ¤ ‘¢ì¾"RÙ&uŽ‘&<)²,R&Ôl’@$ú{5ÞŸÄÍNè1|¼™-›#$·*EÅC)P:Z { WæzŒ9vø>%ÊLJ&3,°¡(ÓrbÀÈH’E èxпÄý¶I¢Úr1ñDRd>ÞÒM&4dJ’ðÈl’ä’Eѵ4>Ïä û&V&.J¡Å8ÐF®ÙqCѰ@-l‚M’C xû*ìѹO´åí‘äåÉŠb“‹@ÙŠ8EƒF»¢=ú³ÆÅÍøc\T’Y”AÉ"—`º“Ýè÷§² øŠ8 ÎôTBž–$BsüËz‡ìÔ+Á³ÆúócÐ:›~WÄqˆIõæ”F]@O“fÏÿ@Ôô~ÙÍþ!ä8¬£"u*Ýã%ˆf7aGòƒ^ätF¬Š»7ìû~ n9ø˜1F€ˆ#ô£ K5 òÄþ÷Ô}…Ù»66^ o4ìÑbó‘YHR GéGS¦@ø‡@í®~‹„ùœß!¢Þ}@ª 6xïó¾µ6>a”üNh…™3"0–îI#(¡•{°€z„š¢H÷Wø‚»q•¾"æ¬uÈgO.ñ’Ä3°£ùaA¯r:#Z}¬å6.L˜d¬§lq!õá|9æŸ!CCéZ c H`Id:$_cO@®Ñ ‡x`ÿ.óÍ“0˜Ï­J–bOÒ@PEhŸsìÝ@•ñSqŃš#Dr@—Ö FV½ †*hù Ù«°6l;~ˈ™™LÂI}yM¸,D}Õ¨Îl>*õrd,ƒ Û³êcÆ1‰H(ïÈÕ@œÁ!ø €UfLÈŒ$÷$‘”PʽØ@=BMQ${ƒ§ñm¾«|EÉJ¬Ë‘:΃¹2X†cä(þXPkÜŽˆÑÐðûAüÙ³ ˆŽÞFáÀ×) ’]®BG^’Œ<­vŒ½ÂdƒåÖC…Vµƒ1‘àP¿™»CáÑÛÉÇšV•›ÓÇ2Efø:èùY4¡¨ _z-$e²,¡¦—µ¾’ í¸† ›6:Uv øyë8{Œ¥r²!¬¦Ë*‚Ö@ Gç¨~rqßG¢qäÈlÈ™e¹c‹Š†R tµÈöhò¿4 ô á§ ù#€ã¼¾¼ç&X$äæ3|CŠê‰P6+®®¶mð»G6>ø©ÿጙ0NJ´¾³(×"OdoÚÀ×µ½£Ï’\LQ·ªFÜ""H¹KЀècï`cv;~>ÏŒÙ1bÄ”fÈÇÈp‘’ÊÄ'`Ù[Õ7Ö°nøs×]š]Jšn Ù¤äxÕ€kU€kȽGØ9_z¹2AކíÙõ1ã¿ÄÇ€$”wäkQèߟÅùÿឯóýWøn¯Åyê®õrð>_{h0ß!æ’c+ÃÅl[ê`M‹ cã›ÌÙ²"¬ŸLE*Xhõâ˜î«iÏÆÛ6¬œì¢‘b&KLVÊñMH,O]õÕa­ßbbfa iqc’Y›Ò([ñ0'Á míøt]ƒ/Ä1íxþ’Gò«4åvâFV \X¸Äl|Š Ø=v55|&PÉ’øÆ1Žâ6X࢑± ’:$GØ6ïCol:Ü_cÓùÀ r£ìH³Wï¢ìyÖ³áI™òïâÊ‹L¥y7Ò£K ¨r¦ÙÒ=‚r¤ÈÇȃ+r¼ñmð˜ Ê“I-’Á(€  íz¯/@Ó1q>!õá|9æŸ!CCéZ c H`Id:$_cO@®Ñ ‡x`ÿ.óÍ“0˜Ï­J–bOÒ@PEhŸsìÝ@ÏøŽ€äüT츰ThÎMKëé€U€/d¡Šš>HvFªìÏ›ݳb&fS$¾Ž;º÷ ,D}Õ¨ΛнVÜŠO—FѼú˜ñ¿ÄOH(ïÈÕ@œÃ)øœÑ 2fDa-Ü’FQC*÷aõ 5D‘îŸÄÛŒ­ñ5`³®Dë:ywŒ–!˜Ý…Ë {‘ÑÐ#ᣠJï’è±¶ „mG‹>© 'êk{|k.Á«jWËî *âɈŒ²1‚0aéA Ç!V@ë°|“¦ò߇ðFØ©òëJÆY#Uü,ÆøÐûöÔo`Ãñq¥Ç‹-‘`x¥ ,¿†6úH` í¸† ›6:V ߇¸`ÁÃÜ%#+"JÊl²¨-d _¾¦ÁÎÎB›ð1¶<™ ™#,·,qqPÊT–ƒÍWæ¿Äß’Ç¢ø[–&{É3?(ˆ,²$XÀ{wýÇßP† l4ÌÙ[¦ ‰J±’#b@±…в@èýŽ‚Ù§AlÍëƒ6[aG=ȶÒh@ (HH÷Ð[+»í¹BCP¨—›³)QDZÊȯG±c¯: aõ·I&ZÎBD@~q²°$$تØ«Ð[âûÊŒÁ1(ÒÀôØ· H+ƹX£b¬O ¶o[d8Ñå¾M¤ÊZ2¨ÌJŽËP€Y"…÷Z f•e`M‚,» e´ÌÐî˜3e8æ> ä1°©€$Q š Z¬ÖÙŽñäÒǨÌèÊ8wõ@±ÑìXüõi€Mãà|ŸUÂÄÁdV‰•5C‰’lUï«Ò™vAÞvñ޹>£•’SªÀåùI@°@ÈöÔ-“»`aB“äÊê$RÊ LZ€²J`VHXºÐ[4++Êl`ÝØÐ[Û¦ f ½§©I$€H$)5@ ›#ºÐ[w\²Û 9îE°~“D‚‘D‚@ G¾‚Ù\}ßmÊr…D¼Ý™JŽ=ŽV@z=‹yÐ[÷­ºLi2Ör"ó• 8 &ÅPîÅ^‚ØÛþTf ‰FƦŹA^5ÊÅ`| ±øùeÀ™8ÒŽE ®<tÅen˜8S¤3ñg¢B@Ð$€B‚MhuãAlÓ ¶'çqFhÛýaëzFN _Øvkÿå ¶* ãmÈY<šXãæìèÊ8wõ@±ÑìXüô!w­¼Ã&A–@±º««@ábý$r6H‡ØèBϺb¤ ’ë7bª£Ë;ü!ltdWï &MÓ-¿ø¤™J1ø†Q6 WUwØWzÙ§AlÊÛ¦f ‘×â.& Z¹Pb(šî®ô!1n˜3e¶ SÜ‹}q ‰H$${è ãïnH‘¡ËòvpTq²9@z=‹yÐnØ2bðÒ^Rnª›$Ug¡«L©±¸™PgEëc1+È©´*Aˆ €AØBÎܰöÔ ™)^@‘HXÐMHy'¡bÏz2w\ Y9ç ²†µ˜(&$è’_‘ÐÛž yƒoiªR@‰"È$)5@ ›#ºÐá‹“ø°;3Fiȸ‚*Ç*¢Eö±ßØèÇÝ6ü¸eÉÇÊGŽ©$ºQ@lôEluùè áæÁŸ­Œ$+íêDÉ} "‘Ö€¼ÒÇO3DRÎÇÀY'ûh Óon>,Yrä“GÎ2‰+@–   $,]^€¶F냋2Ã4¬9!„LT4-€ YèYWsÄlÆÀOPȤ¨ªž!¨µqˆ>}Æ­0Bn¸m˜»}Ê%n\㺆ãä‚@»»q¨ ZÐ ËÌÇÁŒIär`ªª…™°IèšÀ'ÀÐÆÈ‡*ÊÆpÉ"†V>úY[žéDüY¨ŠB@Ð$€B‚Mhuã@Cî˜æ ½ç©I$€H$j 6Gu«Lé6[`Å‘r¯.¸ Š$’=õ)‚¸ûÎÛ”$hrÁ'7,¥G #$W£Ø±×Z`ˆ÷œ 1ß%$ª8V_Eùj‡änÁv êØ™Xù°úøÎYy6¤A ‚G‚43÷<-µAÌ”¯ H¤,h $€ $ô,Yï@=J°¬"Á»÷ÐmÏ rþE¥"BÁqäE…-T Ñ7U×z‹sŸ(áÅ)2ÀZ0©€$Q š _Û@VçlÈW’<’(ýGg”pïêc£Ø±ùêÓ›ÆÞðI’%`±0YDÊàš¡Ä€I6*‡wÕéLñ¼ãŒ‘+d1ð·>BÉ^5ÊèUã¿éLÆž¸W#ƒFê °ÇþŸ¦ •º`áN˜Ù9Yª‡@Ð$€B‚zÐ&ëÆ€Óbêô¦œÌoœ«üïKÔáFø‚ý‡f¿þZPovJHñä±Ç͙єpþ H:=‹ž€…Þ° 2}IÆê®­†ˆ ô‘ÈÙ »þÇ@]÷tÇ\³üXÐBÀ÷åBØy"¼}Æ€[oÛZâGœrO¥*–Œˆ˜’£ËP÷$P±ßc@lRy)ÑÐÛsÂLÁ‚Ò8¿q0RÕʃD×uw w<²Î SÜ‹ÈW €@$Q ‘ï #wÛòÜy™ý5ä@‰‰e²Q_P$°k­X÷ͲHæ”Lê1èJ%…Ô©>0“b€›q«LÅ˃6/[É^E{R A#Á€¦n剷råa`6j¬Ò‚@,ž…>çTXm’¾¬ââ@nÅ}x'£F´¦ Í»acå®Í*»¸D¼wâÌE€¨õ~ýQûZ`´;žùM‡ÄÈ hÀ¤‘D‚h€Mm@[ø†!šxVRÏŒ¡§URJ‚ Ù …Ÿv4‡œã³‘^6V[‹ >;Ð šXñâiæ`¨ŠYØø $ÿmšmçmÇÆ‹.\ŠŽhùÆB1%hÔ A$€‹«ÐÈÝpqfXf•‡ ¤0‰Š€Æ…° = #@HÜq_1°Ô2!ª*¤¨j-\A¢Ÿq !wl3˜»}Ê%bÜñÝCW’ :ìïóV€4-´'/. Ĺ.@f ¡P±'Ø$ôMààh-–Çȇ*ÉÆ†$D€M‹÷­]$CcîqaÀØQËêG‘Ò4v˜ªú,h@6l÷}órvoE›=!ƒ )FLpGäÇ‘ÅSÐeä9Ù¢ ÝjE¶V’)›¶ov&U!&ŽOPR‚H»$…uÐ'¾ÈÕmÐIY8›^óóùP’‘M#¤œ‡-ÈÝ’ÖIÀÐ:e"Rc¾Ç›oÌŽLØXèø™Y) G‘#@ÃÕe-#ÆÜ‹W"7An€P Ķø|Xañ¡–2sŒx1±äXG¶»êɲE:{#àmqãmé¥0–‰²¢š)€±ñ ÅÙb(¡@17Ùz iƆNîÙûtª‘3.1…×n~®EP@÷'P³bdceG#` !ÈœHyÑ_©¸€,U‹±×Z¯°iڱ僥ËJšy ’‹¾$ôÇF”±Ñ«÷Ô½h6÷·fåæJðcÈâH#+"ˆù$ú€Y{z,:½Òõ²ÿˆ|¿Éÿ#ÐåëóŠë>;¿Ú•‡²ç®ì³dDxÅ‘4‘ÍÌqà܈P.ì—²H„èk #áÝÈãKD|esãz¯ *ä€( /’%‰ oL€ÅÙ÷GÄÊÉHZ<‰«)i6äZ¹º t€H%°Àóâà ±“œdhÄ€ËÀ¡"Àr=µßVM’(ÜY6LèpñV<2ѪL³bÇ +°pœ‰ˆ A6A4È­»°öø1Ã4Pª3€?å¬ú‘דüN"©:ãÁ4²ÿ5« )BÛU±6H¡ÕêÛñ¶\‰âž<‘xJñs`kÇ@²{'°(“eÛs¦\¬¼µÉ/!‡ÑNQz€ÆÜë蟞ïº@˜¶ÙWåÎÂÉšIrÌÊ‘N©$Oõ+(ñ}j뺽=9[^ðø¸‘ä†Hò"Y@g Tª–$>öO}$@èâG›ܸÂTXBO8pP¯&È#¯ú€Á“³gͽ4¦Ñ6TSE p>!CX»,B(&û [ÕÃÙs×vY²"×3Ä‚Íé©°˜°[÷ @¿ËY}ƒŸñÏŸ™'§ x§ÇXè8¦k È(]NÕõ²ÿˆ|¿Éÿ#ÐåëóŠë>;¿ڀôîo+™$ñI¬ÆV•kb”¤ò7A@ H=E¶ Ñlû‹C*F’ªG·>6I•1䙨ñZ,@Õk'½)">"Û³2r!ÈÇÆiâIðFáYÁ*@²@ J€|š5DTdŒ™{ä±&4pI)\aVIF]I$È‚Ëã  ¢Â:”†C2¶<ù·¶‘ g…³"ž9€‘ñ È‘vX„ (P Mö@£$7nÛ7MÈŠeA‘3Í+d\NŒX¨T³L [4<Í÷Ld‡¸fGºá¶ß$#-[Ð’GB§ùj€,H² ñãóëV•‹Ðý›6)&i ž(HQYY£òÈß& m@äBû¹íù9ÉpdGIDŒ$ˆ¸r;€Ã hùò÷”È—fÝcÛ¶ô—ÌaÃhrqáeRÖ…$µU¨ A=] &¨>ëX{;`É6,0GóBérºÐ C0!z²{&ë®îR&ÆäàåYvüLˆ‰ÈVŸ äJE 9$â(ß]´6i‹GÝfÏi#ŒEŒ ]ƒLÍ׋ônŠsþ ‰òâÇ| 0ÏÉÄn”*Êx’@›¢H¯"È­™MºI¶¯ 4rÙÕˆN™gñq k­4Å3/Ä8gåÈ!Hr1’?¡À f¦k ’È(YÉ&FV ³oM!NP¶\SÅ p>!C.ËGT}‘©’5‹#TÝÒ\€JÑ4‘ÍÈq¿" »%ì’áºLňÂÚrÎ,°Î¼ekâú®à¬„ÐP´I ù XšôÍ!‹4`ɸ`E™¸Ã‚_*d@YäpIg4ÄõPP|(,S$LZ:4Ðãa•–9VFrÒ4üyHDzßI `/ ð™"âÌßE&VD3ãÄfˆE$sBޏb¤I)*òhÕM[CjÖm¾,µbY‘`äd ôʨ£Ù²ëǾ¥¦‰‹F\Ì'›rãŠò¬M™ò»<~™* ±'ˆh]›®‹$)†>ŸÅ¢*ó.<Í(õš2¬\0¥ãlE±6ÕCª7Õµb˜¼MšiVHr(c¦Þø±¤²EÍ#Á^@²{¾À¢KD%ö­Ó&¼‰Vbó4 ±»Æ$ãY ©â¤Ù®ú Ah”†E¶åÇ‹ëœL‘"ç4Ъ|w~=µh–Ž~.ϸco‹—$ñI¬ÆV•kbœWñ  ¤dBèÏɹ4R¤qÌ«ÚøØÑå´Q5_‚Å Y6oÀ¢L¤L†ãm’ˆ²›+mË’9 Ž¡…Q˜{'üµ) ŒY)¸åoJ“í²œHYLOÇNävÍl } ‘}ÐHdeÂØ³ÓxYranäM$ssx?"I²^É ~Ð:¢ÕðæÍ¸ae$ÙÐx1 -!pD¨P JûÑ%‰¡Þ¥!’>׸ɱÈѨ\Ùr!”Ѧ¬È•BŽÀ$yN¨»ÑL\í§oÈ“lf–IùÇ‹$ã‘J’ÍdY¢Ç³Ù«½fF†oXÙ.鑇CJ"’0ahÀ¦â~¢þ;° z>5`‡ÅËÃÆÛq À—'åL¯ °#dë“d~Õ}ëK l—\Þ9?“dì}R5‹ûô·çÏ?ËTÂtb‡iÍþ+‹×H žiTÎc*Yù P¿QÄýDë»±)"ÛVÕ¹íYsË+¦BTÇW•ÃHÆíȲX’MXUQµ&2²âeÅ>TÒãËJêQr$%FÈ$qñBÉÏ‚”†C·L Œå‰`ÉHøJ–X‹‡#° GÏ=®Ô†G&]“vM»oYqLÆ6‡'&U,R’ÕV 1غMQ’>éX{3`I6,8è2$Òåe ™ ÕŸsu딆C²°rNî³íø™­>CdIÔ(pälˆ¢¾´¤24Á‹3îógd%$qˆ±Åƒ`ýLß•ž"EûéHdlà>çJC à>çJC#™ñfTX§å"Æ@vB¬­Ä’Óy$WžÍ¤2 »?iÚñq Ûœú±,À#ff=ŸÅÄ(y®´¤22|E²gî’`g‡#cú\(G ÔÍdb@ÙÅ £$NVɸM½´ <-™ñHˆ^D‹²Ä QB€bo²¤2Ep¶,ôÞ\˜[„9IÜÇÈ…l—²H„t¨µA°mŽß:äæa±“ ÂÄH¿Î ¯ƒ•|š$±&»Ô¤2F­º ü_Ê\ ‡*h"È™ZF`´G H РOFÉè) ;~ÀÛãÅy9¸[•ÿ©É%›û’O÷Õ*èçoøyYÏŒÓF±È“C…. R$€•ù4jˆ&°£N$y¸ámËŒ%E„$ó‡!Uòl‚:ñï¨ ¹{nT»Ÿubl¨ç•™£àJ…èlIâfë£}ƒkÉþ'TqàšYšÈU‹†¡mªØ›$Pêô¶ãl¹+ÅçJDÈ8¹ÒÈ8¹ÒÈÂgÀI›øóU ¼Hþ þߦ£T§lSo:c¼ë2ðŽ!#?ÂnŽï‰ñöÓâ6,ïÛLRü»¬HFjÏ€MP'ªÙ±÷—\[5A„GdYðF¢i°âÑ“â\ ¸oM•š‘ÐÆÝ,Ñ rر}iº"ŽE¥ø—mL)²ÐHÞŠ’ј˜7]Dû‘^MÐÒÕ†šF…ÜpgE0æh,‘•?±ÿ–£q°”™ÏÞ7,M«*ZYDi"ÏlOl­x°AìÕ^¦Lyðc>Û‘Í7“æj X’¼j…~úñzµœº±‰ºC.ìvˆ±ÉT‰˜Ët9)[Z®È >×féH—ôW*i3;mŽ)+(ôææ(’(ž"Ìèôu1E¹§gÆ…¤ÆÄ27\cF±'îH{“ö ëU*#tbmÞYp°òqðÔɘ„o-% `  ð;5ãY}”_ñÙe†&ÃÁW‘â‘Þ7›ˆ_L…`ÈÐð ])‚Ù[Ù†(3!‚7‚p…KOÆFä@¥Rb¬ãõSOñcîK„ðu‡Ô2}\ʆ°µÚŽJ ±E€¯º˜™ùi¸.^ ”Hbd›‘¥#¶(A°H€{#P¹f6D˜¹{xYV*¤3°II!@6:¾}ôjÓãgæåíÇ*-¼ „­¢ót ¹SlöôÛóÒ·@Ï7ÄB 1‘64i!Ê0SäqŒ0²Izñ@û]õWt¦änó¢B11"šI1Úb"—Šñºn&ì°®€>ISÌYÓ/<¨{Ic ¤Š°@#üŽ 0doñãnK‚Ð}q Éõs* ñ®ÔrPMŠ,}í0L?Ç.æ¸ U‘¤X_Ô¶% Ö¾Jµ7Äô4¦c|S«,“ã ‰ó*© rR®ˆ ¨©«=0ïJ`¼_"ÈY1×Ç’8ÌQËÉYœ…QÈTăѢ§ÍiLâD›dE eÎKDAš£T±nuøx‹»±×¾”Á·kÏMÓo‹>8ÙCƒj|©‚èAÛP Ý7)öé#?/Fì«Üüd$°ŠCP Õ‚|~µ+eÞd‹0Ãò À¹ Ëê}AÙAµØ¶QwvOT/J`0w¸÷ é±SÑ ²×Ì!*h’€t.è“uF»Ò˜)ñ g`M¸¤qŠ#"Çáäª$P)IÅžì{i[ ;kÜÛq2£E1ñúá—Ô)¨v=Åt>ãPt 9ûŽó& Ò*b‡Ž’L—2QUbEFÈ Ij²uiƒ¡¨lG.æ¸ U‘¤Xœ=±(H6µô‚U¨Ù¾'¡«L Æø¦ }W›¨LO™EIžhŠZŠš³Óô¦ Åñ’,…“}|y#ŒÅ¼•™ÈUˆLH=*|Ö”ÁXþ$I°†DPÆ\ä4$ª1ÅKç_‡ˆ°k»{éL/Å ü>ì|>FHžFŽI8ñ B•‰,X……“äiL.ÈzSîéÂÆŠdÇŽV’”ñŸéâ8ŠV£È’Ê¡wí¥0oÆž<¼xò¡6’ d$yXÿ#©Lr> L}ÍpžÀÎ 2>®eCXZíG%Ø¢ÀWÞÓÄ˹®@di'lJ ­} •j6o‰èiL Æø¦ D¯>7'̨I•tE­Ez³Óô¦ Eñx²LEõñåŽ3srVg!Tr U1 ôh©óZSGñ*M„2"†2ç%¢77òÁU,[~"Á®ìuï¥0lÚóÓtÛâÏŽ6PàÚŸ*A ƒúGöÔmÛâÚg(ðHÕf2Q˜ÄQä@V$u@]ŸkL-@söÝëç³%ƬuôžE(¹\¤X­”â(»³ä}õißA(–IñŠñ>eU$JUѵq5g¦éLâ0`É3c"Ë‹",ˆ³ÚDKP  ‚h׿´¦E»dO‚ÙqãB9ŠHdÉ">¿Ä‰±t<ì{i[ $"n§™Þ"ë!f”±ïÅ ¿UY nÑÔCŸ(Ý†ÚØL¨Ñ3¬Å…1A 5õÍvGέjÀ¬}åæËHŸ,RË$pÈ%²Ì„‚ Рx±㺽 ¶+âhæ†YæÆ#Æ3ÜRó!EÚ° ºñg°Eôt¦ ;f哟†Ù8ÑbÉ `G™É| ‚š ànûÖ—D}Ú3§Ü±|ŒeЦtP’ó Š’ ‰ºñGßT™ Þ÷¦Ú@ô ±‰ä!æà8©Q@Ñ%‰eWdùà‰Ìø™ 1¶68’7‚9¾¹¸»+µ‹G›¬XòÙÐÐéw©"ÍhN(0&Rã¼¾µ76PE-v-”]Ý“Õ Ð ÅÜ%ŸrÈÀ— ¢ôQYœ %…õt-O“t{@doˆf…3>o/SÊV®`Ðo¤ž ©±ö?ät%#FݼǗ•¤Ç'™ìÙªøOG¿öûë.ID®~õ&,¦4ä7Öf”¢÷°½ ¯}L™¬L§â<ù¡…ðvÕg–›ƒË@*Ð4@ Ùn@Žìil`Š?ÄsÏ•,-¢I¦ÈJ±!BŠ%G®½»ïM±ñZ+.û4{«í†Xî2®p’¼¾•’#²G¿šÔ“iYU7¡Kñm– Èb™ÕxKn š%–¾}Ÿ#®õ–×vUlØröåÇ9/œÜTÑ÷©qk²Ô—¢ðdm9J[×= ×Z«G—ÑŸ/xÚáŒ|¤+#;•Vy8 Ij4À=×ê*Ň’´î{Nçñã²—R·øO‚/Þˆ:|nˆ²¢›Þùƒ±å$ÂU¥&J 1 qy‰(&úÓŒS&Rer¾"Ûñw‚pOTFÏÏê T–»ÔHìÕ{ê'ò±˜›îNä˜' U%."~vÄ¡ òZúA!¨Ù¾'¡­$ˆÛ)‹ñ&ß2Ìóà„XðþeHš:º"€V¢¦¬ôý1C&; s9¿3'Ô40xÔìÀŠ4TÏV‘“±îx»²È%ÃŽ'ŽV^)' @5`ÐèÑöñ_}actiåVSwÝq6ûX0–g´Ž^ *($±,  ìŸ#ÞÔYfÈ"Û²ñS.*)*Rz°@¯úêÔE³•»àâîƒo|c3¬&Q'ÕȨ …ª#êîû=u¬54œ¨˜÷cœ°KŠ#ŽY$޶ÅmhUÑ¢ ð.¯U¨‘J]ˆÆß ž9f’6@˜3Iy@,ƒ`q=Ž»ùëQE?erhÕgLgÇ*‹“ÃæIFVº<¸Ø=0ªò>Ä\Ui‘ɲ°n9Í·6tÈùÍQ¤¼½F TQ¡äƒV³BéRN¬·£Vß“Ÿ—ƒj*Ô°¬Kx° _½^•2|Y—sø›'j›„تU™O©D$#¾DbGT7ªœ¨|N‚îFøÉ Šü´ÊÆ3mŸ&nd¸î˜ñˆÙÅ žR},VÊñ›³ä}õ«F±xŸãÎ&–|^*XñräÉÆD—ÑZ4È cCë X&ºâ|Ö©)Ž—}1íðå"ãHóHUJeƒ32qèRO^züôÊ>ÿ‘&Æ»îl‚&yc–rŒ¥z*)M›w]÷è+tt¡i$‰^dåAe aO¸¿zІŸ™w¶¶ *4,é9qõ+`f¾¡Ù¯¯}œmîI³pÂÅ4ÒÅ ‚[bÈH ­ ‹A>;«Ð´Ìøÿ±§Él%"<6ÈQü ú_éÇŽü±ÐS7ßÿ “s+‰' C3š [7Æ®ÏF€¾üh+t_oÜãÊЪ2JÑ·ä­Gʵ ×ÕG¶³#bwàí`pÇ1¤`òqTѮؖPvO‘ï°S#âdÇ1¶>:¼m s}RñvVj&âÇ.δº#èlûóC»¿å¨™bb&þe²ò »Qà›L}Ž©í?ñoá“AÔ®ÊÑdreŠ,¥APAA"ú÷ý:œ¤ÊÄNx¸æV\lRêíM¨!ºèWwùhí;±ÜšT’$"¿\z‘°abš‡cÜ{ ö4%!Ùù9°zÐ$&˜r3ÎcU¨SïCÇ¿#ß§— 0öàòOŒÓ˜Þp *ñ° %…Þ…!þ$ÇlÜ|\oF§†9CddˆÉW4¡EMÑ5Ð ï@17Ô“ym¢1ôØ+2B»¼¾”¢XE’G½]hg1wó“º|ˆÆ^%äE+7'R†‰e¯¤cgÊõØÐ´Ž—üÚ,}Û@cÝw#·G¬jí$…TÉ'_¤±,Ôh¤ø>ߨÛNåë·EžˆÈ$Ѽ©‚èlm L˼|F›FG¦ÐsŽ03™(€Ì@â(ò +1( ¿°¡“ñ"cøÿAa2~®eCXZü#’‚IX û€c|F³nË·ÉTʰÈ$¶&2A,µô‚U¨Ù¾'@/âØ&õš|R‚o\s¢ÍhUÍ,@  ÝŽ€'¾´¦ ýŽÍòчl£Õ=G`aøö WÄkJ`Ù·fÃ<ÁNkeI±ä‹Ü°}ÁßP4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ´d‹£­G 7þ#ûëF-€ jôl›}E¨¡i²t h,DèZg'xØÆí$rŒ¶‹ÓFŠØ,h©=ÂÀ=Ï^.æÍˆ“aO›ÃLJ„è=I p(ª‘vHeStX¾ÈÔ­ØÖر›r|´̲H®ë.7'>–ä(P°hÙ÷ tg@E¢GÛD¶FÙÍ›á÷8°bÇ–G£‚Øæ@”{ ú#ÕûùÒIÙS¡ü/4rd+¼šõ`@û’ ð< cF”ÕØü?‡1°óS:6qÁd}F!‹I«¡àõTIÈÚ_f[^‰Û6lÌ™fΆi%²dlb¿µýdA@¦±#»/³MŠ2§ˆ22,pÒ¡€B’l‚I6{èuZ$ƒµìlø3ãã·)ÈÇ`ÂgŠÕÛ‰RJØè‚M(×Ú]ô)v,ˆc‰±3QeeWy ä¬$`íJW`Wf‡Füꔬÿ àI1Í:4K z‚w–6è>ÄØìhgùmÈg¼—ÆI]-›c~÷KúQûè[B!Øq1÷ÏÆ–eà’ÙK9š,@D|¡HÙö¼Í¸ÈÙyñd4§”’|¹Gfö$ò"€è«ólÂVŒ®<ˆ®GÒÌ¥…þ– ýÆ„jÎbì¹)µÅ¶K‘1€¯¦òb‡\ÿæèÕk-Ó)Y>A·E·ÀqÀX%Åm’¢À[6jˆð*…j^ìÈÙeÉÄnÇÉŽÙ|ã8ï\#âʬAbI'“QtãЭ …D›|Øy9`´‹«ÇP«µÈ’KI»6{h2//Ã^®*¬™Ië ¿_Ÿ¢Dd…â€aô…U÷]Ø$h26íØ?!ˆ¸ÆBì 4’®lij$šöñ¡2bw]¯'s.2£Ž+€—ì•n@)èQ¢A¡r)•°G—¹.l¢‹*ÉKŒŒÊ:·³Ð €4º°DÉ„;Å–’6XhašIbˆELùX-fÀäÔÅ“]…±qü4â‹>hd\&Ń„\YQ¨ÆÏ#ô=wÐ[4m{SàÍ4óK4¡G`ôÐqVl›¢oÀºÐ¹½4þ‘¡2aé§ôLæîû[¼£ÕùqP’ÊB Ýºþ„‹$h€Éš¾['øÌ|éô=?-éÇwË—ŸW} ‘áÕÅÜ[+æCEëÉ2ÇÀ†æÀŽÚû3lÙì‰lV'Âqbã>Ù|â8Ï\S‹*±‰$žLiEÐ@´.@>móaäå‚Ò,j¯eB¬fÔW"I,I&ìÙìu È´ÿ óÃ\¤õW(dôHBBñ Ä09”‰Kny1 bÉÜ ¿ACöj‰¥ÆlHpÞTÇÆŒ£Âb ꀠ-±ìU_^u\­ Rvg›æû.YRIc1Ä¥q®€°¤Š²E]P*±ûnËæøòBg’eŒ¥0vk6f<Ù³ÙÒvŒµLŒ/„âÆÆ|9³9Çòï\‹*±‰$žLi{ €kF[ð¨“o› +0‘cTxã*c6¢¹I$’nÍžýô—á¯WVL¤õ†_¯ÏÑ"2Bñ À0úB€*û®ì4v샆¸ÆBì 3¹ɘ–cCÀ$“^Ú&dÝ>]Ç1²×$F$€C:”,JY'‰°H&ÕwbälùlŸâ?1ó§Ðôxü·¦?ß.^|u^=ôþ“>åfn\l°0¤p•®]}D±º`;ïB[2â|'.3áM—Î#ŒðEÅ8²«X’I䯔]8ôëBäZ/†Ypä‚\¸ÚFô‚°„„ r©bZÉbI6y ‡Aµeâã(Wz]ô>M¾Hö¥ÛvœÃŒÈŠ‘J9P+Øôl?½ê™ö/vÙåÜ'‡3$E4Â3Æ]@j³V,‚ØcÕ³>WÃ+(ãdªF1£€‡‡›ª¡$k[¿4{×ZšHÒvSqÂÆ—s\·0ž,cÆþc2Ž­ìØ@]X1ÊÍ(–LMæ}É÷od©Š b‰êÇíÖ¤>]W'o±Ø8[–Û›¶Ìí 4ÌPwG±GÅ÷ù©éY¸í›~$Û3…¦—‚KŽKkfÀï¢A"û«×^I¥4™În £^Ý—»dÏ0'œ‚D¤6Åh¨ú=wC½frùtj1µ¶SmÛ7IsbyyDC1älwâ‰<Ÿ~õœæëF°‚½™$Çσ,íøË)‰y@O <É$“g¡ßC¡@xÕœåäTHÆ.Í#)EÅËs“ËÓ^ iT]X$ßdžÏw¬ù–`±Ù|m¯qŬŒw–#Wà€(k5ò7ñ’Qú#+vÈr•Y·*MäÕ‹"…_þšÔe(úìÌ£{ènã6N>6.Ý.A‰P«(@}€ûU}jMàë³1Œ\•™öì\üÍÏ#?Ș37§LJÕo¿ÛÚµ8¥-&^HÁ]=ëk—y‡uhb1‰Yª8~K6~æ…žë]¹$Õ3Œ"šg>-« ®Vd1¤bHŠ'x©Ùg£C«­rR”®Ž®*5b1ãÞqð̘‘ŽiËB?Rà¡bRÉ:¯úÌͳË>à™¹³ÆÉ J8á*G!_Q,n‡Ø =ý†³Š#7Á°Ãã>ihÌ-|R˜+%‰'‘4¢è]£‰¥%ì„øk;Q–®äÅé°Œ€87%Iú‰$“fÏcΦÑS‹!¶ã<|sg ‘óƒ ¹ˆúe‚…¢¡#ˆì_g³bƧ’Ý|[@l1,²¤þ´ÍÄU¹=_Ò9k¿ùëiÙͪgEúj‡öbÈÀΗt‡p‹6%Ž$d14’©o«£ôôk¯{ÐȨöÆê7)L ÁãX1¸7&K5’ƯÀ“d z¢»nÁ>ÚCG™(ñ½JcqÑ ÿQæAÄyo¿Al`—"<—ÊÌF›!âbË ôÈ* –$‚nìö {h-6œÈ0çÇÆÜ–)æ—ÔõcÇP’,*Y @7döI÷ÖditFé´¾|ðåã䈥€0FxË 5bÈ M€}U¢”›á••Xù(‘ü´ppóuU$‚­c‹wæ`ëZ]ù{Òf¾jd  :LA‡ë ªï¥ v*è·}èïÑ4„¾öù©™,Ñ~"*Ä©˜“b½€°×7Ÿ£¢ÄT›Fñ•ë>VD|¦Æ0ŸF>Ù=’H¾¾Ö~çUf*#ð¶íÏä^.rq ±EÁP@5fÍ&ü=µ^~ˆ°e²eÞOòcšoQ XûP#òïY¹{5Œ_FIv¬‰0"ÁŽÍ °/.8b!A4 { "€@ÕÉ“S3o•Ðãad"E&*ãʬ,úk`Q¾1ìƒí×]ç)"â‹äãeÏ’d‹-8I‘ò!K>¢…ô>•±DùハR ã m»: ÅÉD8K$ƒŒtĹ$†k6;ñCÂýµnLTMÃ708ç"P=‚{ÖnhT9ùm-ó@žÂûÕÉ—w8r·LM,h"”I`H$(€EŠ'«‹›#ŒH7Lx"ÇÄÜ‘JJd‘Šê’K0£âÉ'¯9JÆ1¡Y[Vãºe´²0F’JKK;$Ѱ ‘dUÝÛjd›.èÛ‹æòP²ËʼI6•@ ,)"¬‘Ùªüè•Ç}„[勘r`ed3¼Ê„wÍÍö)˜PÍ›=˜ÜÅq‰Æøwrƒ°ÙCŽð ˆV#‘$“dÒ‹è´¹ú-D݉ðôÇo’ ¬„õ_Ò Q¡cnJ$–²X’M›>5µg6ÛfàC*É*³Ë1‘¸GÁA4(-šYìÙ$û꾈º2î›CçÍ^>PŠX„fŒ°€³V,‚ØØõYN>ÆÇ>1Ň0¤Ñ”xJd@['±U}yÔ œ­’<½ÅseYJ\aê3(êÞÏ@×€ .®íê€E± Ýã €pghÄ8ÁM·D³Y,hŸMhRõ@¦/ÃñcÉ$î¸Üš ¬Xœc MW‘-fº°(t’VÁTøn5Ç™9Ä$™£$ÇÆ0# ¨+d‘wvlƒV-‚ßÀdö¨½Q”gïùvT­å`w~o•ŸzÒØ5í¸_!„˜¾§.K¡d“@]ìڀѠ h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4£÷Ö¢Ocµ£0>@ïB§EMJ4m—EÛxÐ_й3`ŠCŽ9u~ÚË’F”[wŒ<ÚaÛPÞ§’&Ÿ™/¼b+S¿zy!öO…en¸Ø9ƒ0ˆÕÕ}7'ñ±n$ùZßÿ7µ­+¢ÿXc¬ÿ&n\d— w)fâë£e,ø¿#£èÉÍ•·WǃVD•c’D x±ßJEÂÉ }‰DÜdj1,2©|Ãc¾Ïg§Ù­³ [ì¹Ê³J«Ž¯ŒfOçØâ*ÃOÔ>ý_Š­Vöghˆ÷™åÄ”ˆˆ’)"N!ØÁA¶P|Ýõ]yÕj×bÝôjÂÜ™•—%¸I …$@ü…Ð ‚@°AÀó^ÚËi{-[èÍñFú¸Ð‘ÎHå13+1Ð>I4üÉîˆÖ–öFèVç¼fb4™ùîcŽ’/N.K1$Ø& ®ÁwÞ¢è?ìNNå¸Ì•ÉD¹)!¥L MXk=Q«*=έk²#\y¹8¹¹Ù¹êÈ!â(-—]’MÙþÀijƒ‹g7kÝwL²&q)61’9E,€€ÀD¨,fÉSß¾³-{*èèí3eÀ#ÊÜÊ’È¥… ȇ^ÕuzeKF‰ç?,c‡:Ud`I€!fT9‚=Áûõª¤¬YΗ~ÜfÅÄÆÅÍ+“.;Ÿ¢5¶”À…ذŽ&ßI¦f™_åÊ#Ÿgޱb—ŠÆ¥1ìHH$-WkDÇØi‘qgJLüˆw¸ã—1;㻄}‚ I²I6|Pªèžõ•EÝ MÖX7¤…ó&xeH–4 D*°/£v>Ú)Xªe~Ü÷ Ü”\™de›ÕhÕG.TLt+Dy$€Tûl‡O9\â·ÁŽ™¦OÉúA«½ ë#6éß’eIüü¶H¦(–HéŠÒf bˆ Ð'¬K³B¤Þwyq1qľžT‰2‘©2JŒÁ|± ]ˆ÷¸ƒ¡~ávÌØò!Ê*$„F,“7â'À¡@|Ù7Z«¢>†gË›‡ºc´ysúSNªêñ§¤ ‚*Àä(›=ú¤L˜þywÿB=ÒY"HZIãtJRÆ‘A ³$ý"üö%ê… ýËoÝ'ÊÉY¥Ä,b">+þéX šŸ$ŸÏA£>.á½åcåcãO,̦1¦ ‘âf¦ XV"Ç‚/½ Š6ë˜øPcáI”Ó>i‚r鬴¬Ä t}Š>çBS“›–ûf6nk*®BG8–]ª¨À‘Ð òD!«:Ö¢|øÐ‡+yÏMñ¡‚Rc‡2(¥„"ñá@b"ÏÐ C˜©h0wÍÂmåA”¼“4' /" ,ž(I¾¾±UàjÄ`üIºœIs^Q*>Úù3¢…YR¹*Õ€°MÚžô.%Ó}΃ ,Íš}5h Éc[ô¤né@8³ »ñ ÅÞ÷8ðV,©eŠC¸y„C)S‘«3j§ª²]'[`ÊËÌÚ£›8(K¤Üj¹«$~¤ýô#ìÇ¿|B¸‘aÇ %e‰² ® ”g Ä_åÈ“ìóV'+zÏ]ñ¡‚Rc‡2(¥„"ñá@b"ÏÐ C˜V¬ß‰6rï98ùyJñˆc’$X„¶Q7dÒ‹$ÕøAª9x{öê¸sfM+±þÙ(¹ª©q}§ OÙ° ý΃âmø{?7*|Œl‰žTUŽLy¤U èÜ…  BGWD^…zèëqÿÄ} l¯s ¶`Ü&σsÃôò•`’b’D#ßËvüDôT½“ã@«Ø4¹ñoñÀùJ`—FX–0*cdÙ?QñB½‰ïAª7³ «¡ØÐ‡šÁø“u8’æ¼¢T}µò"gE ²¥rUª%`,›µ=èké¾çA…–fÍ>š´ d±­úR7ô  Y…]øÐbŠË½îI·s$’9>|Â_‚z¥JzŠ*¸ó6ª}¬ŸÔGÐþB¢ÝwVÛñq"—ÓÉ•&FŠL’£êì± ]/D{È£rc3þ#Ï)N!âËQUHe6\± PQ¶Gôœ"û dÎ.>圻´PäK1õ²& |~(yen"ì(òH<‰Z¶#vÝDR 3KûcOéKŠWÓ•hPÀQ³ÐìÞ‚ÐÄÜó}<¼x2r&ôš¾%H¨íLB…ЃGÉÐ[÷,é ôFF@X÷†L¥Æ§§é–¯eVøÑõz a.~~OÃk¹Å,S¯(”,KüÙ9”RÁ”‘d@ª³öÔ½X§¼ Û?pÍl%”¹#É t/ÏZó)JS¤z%Â6Ä˼n¸Ûóaúüã"8戠¬$‹²[  R›~ÔÑÊÓ³îùÇt Á&LÑH¥T,l¡Š€@²i 6kêZÔQ–Êà|Gº6,¹Ï •n|ˆ™ÑB¬«\•@¢P d“j{÷ÖŒâ†&ûY›4újÐ4’Æ·éHÜ Ò€(qf<wãAŠ$ï{”x+TÒÇ'ñ p¨f*c2"ÕqæmWÅ]þº:›VVfÕÙô&£›‰ë’±RGêEÿ} ¶s¾"Þw ,Ù!•¯g1R$^M̱6@@FØyo³¿bøßz8¸¿.wÄ_'t&ª‡RÌèÊ9qvÀp·Ýô-jÄbï¿¥"žYßmiý)qJ˜åZ”ÀQ³ÐìÞƒC!ßÛ 3N[̰ˆŒ2d ˆ³I`)<@Çâ®7àèl¤;Æ^FÕŽcÜŒÒÉŸ$2ˈ¨X€d ¨6AOwôÙìH |­Öo‡cÜbÊÉõ’7ä¸ð£3049+ˆª!k²@öÐÏò:ز ñ£œH­ÍrCjl`ý¾Ú½˜2äÌ‹y† }ÍÜÉ''ÅôׂETX9ÇDžÏUV@.ÌX»Ö|ûÀS)x"hd^*6RÅ@ Y©–.¨Ìe‚1ÙUÕÑFÍ‹:l¨ry]Î>KF%’> ƒEÕV¯TËìˆ%ÈÇÅùˆ79 ` ÅQ+d5Åi>o¡]It ³ñ÷ºáÌÐÃ0I!ÅIžÔÖ[Ô²E…@D–~Ñôit?åò#ܱr™˜¼Ñ˜Ð¨Gtxض*<ûšñÖU3Rm‹¹gÚ,|‰æþ~LÑ´ ÅP/"¬­Ä]…I‘#ƶgDÉ™¸àÉ]ÊLˆ±1¾‘b(¤™ý8žfTöK# 5bÍ 4 œÉw½Ç#nÛ— ;ùùXlá¢T&I@QÄØ K¡`)ªª![6¦vã’v¼äR¾>¤;$˜™¿=@ >nühMY›37-·£71&\Qb_K‹ $3W Öz¢•ÉÔjͧ­ÀÝ3'ÞQ çdÍ(E /"¡HO$Ù#ë^’è–ÙÜ8ÐöL@ýìyÔjÃt Q©Hâ"µiös·ì·EÆ&#<ü¢E.~–`ªÅ’‹wý¶؜=ê¦,ÍÞ5I‹´r²ÕV+b¾ä__}a¸ñ›JS1|K¹>Lü±ÚÌéˆú–رb{Uaäx5Ea9AÒ›¼Ê›èÄõƒ¬yQÄð•^>›‰#‘bÏЩM½øÝåÙ|ß*]åT¸xZy¡tâ¡beäT)“Å 6Hú…W¤•Ñ—µb6ÍòieeÍG>–9dB¤ ŽJ Q* Ù²T÷ï¬Ë«fá›t†l™˜;~Ë&ï'‘æeWzNl\…³à{YöOHÆ=–RQÐø-3vïW#2)Ýf‘HÀ£N@ [LÂ|‰¢ly1ø¢äQ•¸‹°£ÜƒÈ‘UªÕ‘6º‹¸îCà ,³>ÚÓˆeÅãéÊ´ ( `(ÙèvoJC&É“rʇ/Yfelq ³cqê·!A#² Y£àéH6ì{n˜ø{pŽLƒAœÃy¾š˜ØŽD·R›hô,¥!hß°æíŸ5åò@¦GSå«êñÕƒv=ˆ#TŸŸñõ¸agI ¬>2ÎbUR$^M̱ PQ¶G³¸ÄWßÛ@´ÎN&f|;›cî²dƒ,’ŒueˆÄT1*QÈ «ì}ëBª£6ûn›«ˆß1¸dá#›ÓP# * €9Yµ=‘¡¢Ï»ecm™9csçäDzƠñ,ªì0H5Dp,HæÞ÷¼ÆÑÏÎâ“pX„¾‘’ØjPÀ²_cZ޽‘_²£p—øpŸvÈŒ+z(Ï$§ ¤lØ Cɰë+³rVŽþ9”À2¨r£˜S`ìö½lçüLRæE¼Á>äîe““âúkÁ"âAb@ä Ž‰=žª¬=6ýïqÈÞ• ¥à|™ ‘x¨XÙy¨ž(I³_Xªñ ­Y»mmÆc›‹™ŸÉã˜*KAxÜjÝ~ »üïA¡8'>llÉeÞä,üaÈxãU(9ü ~ ÂÈè=†m3ääáúÙ2³ƒ#zRÈYÒÏ"€È_F…ÐÃìÙ“âmé¶ÌF‹*8§xѤ# ¢úÉ&€™=Ñ%`fnv^6@ÜFGðñldÆ2ÙcÈ·+b(©µö²5¥Ð/.N~.ò[:L•Æ’uŠÄb6€Þ^ËX¿^Ú¤M%ÎÆß£Å“*gŠdzÆœ,Q €l èÝ€O¶; !¹Ë…wY%ŽÖ43Ä”%#‘ü!Iêû¿=t(ý’\©°IÌŸÕužT2 a]”t:¡-ßfÅÁT–IãŽYŸÓç`z$±$@kÜ€,^²à™TÚèåË›“‘€0³.|¼&~HªKÊŽ&Å bÔ, WƒIâ„›5õ ¯„H¤ÎÃíø\wïó÷ÓšÊD¯üML"Ær0|Cxqc¨™×ÖŸ( ±úX…Pz²@úïû‹ãŠ3älfÇ·®fÛFl`L®É'Ñeb¦¿R þúž5eò:¿îÙÛ~kÃ!fô‚©æ¼˜¹bA   £l<JŒ'e²·­Á7Ɔ Iޏ¢š«Ä#…‰=ò,ý ØûÒ‘ƒ½îï †Bð>LкqP±²ò*“Å 6HúÅW€­™ÈƒuÝw'¶[ÉÂ2E7¦ G 0Pj €9Yµ>F…}ƒy|L,¼É³>b”&,ÓqOQˆ‹<⪫=dSGÃÙÒgmž¤¹Ñä:M"<±P€ªð Ñ‘ÏGÑ=™7üüè'‡ s“G#FT—pTy8€Ä“æ—£÷ÊViöoÛò¾w ¶^&hUÈ¿¯óÔ!ÎËÜsq÷BZYB|ÜQ$>…Æñ°P[•tCï_HgWÐ }Ë=w8¢žI<ј_Š ^EX5 °£É ò$UjX۶챺ršYßniÄRãôåZT…°Ùèvo@KîÙpÁ— ySÊc0˜äxÈDĨ@'£DгGÁÕöî{™ÅLt’V‘óÚ ›€R݃J QªâA«:SSoÉL¬4™YÚ­\ÈnJH Õ‚5×]u¨ Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Y<ÿmj v´s*äÝ_¶†£Ð¹ä1Äf ØÐ÷Ôn‘R¾Ì ñL¤´ ð×?-vtñý “xÛ¥K63s"ª»#YÊ25Œ‘2­Ý]ñz wZ?²ÔжnÌÆÚ¿ÓRà\fiܰpsJ>n(“Š:f°¦V:¿#]›£€¹bÆÈÍÇÊ2Géá©1D#ì1Y$øøÍêµ2HÖ,¹ÆÀÉÊùȃ†$ôæeV -AšY °ÑI2bÑ3ɶʤÊGÒ|fXY£ݱìx˜KŸÌ-¥#Hìy £@“ÄÝ öû jàÈÔÍ8›>Њã`ìŒÅæf,TÚ›$žþ‡­XÓ3%$=vÌ’ID 4­Éü›4÷ã ?mbý)‘€ø¯‘ún¥_²,G±ØëR¢‹rlAÛö|ù´lx„ÊÁM¨4{ï°|¶¤q4ò+>Ëëz¡yIÌ7Q¸–JÝ‘}°ÑÊ(˜É“ü/j›0åɆR´Ü¦r*$Õ =WG½.2$WdÇ• ÇÇ ¸£r1M 'ˆ²z?mTãÐjDŲìñÍd¬ÊV@ó3X7tI$fÈ¢tøÅØùI}§g‹1ʺ"€Ó™”€H ž¾çQbžÃrè¡Ù¶ Œq¡I HÊhŽÁ ‚A÷³ÙìÞ‰ÆíÛT;fË’Løv…¤‘”2ƒ` =Gg煮E>†¯mÜ2pxßÔN”¬Ì_@€A¡b»®ïU8IQ”XÈö=±2~lBÅ$&f Iî$·@u×1Dr-‡´íû|¾®,$œ¼¬ÜW£Åyt::a­Èf~.çŠØY±ó‰È䡈º ŽÁÈ d"M§ ¡Î%eÍYò²µU†'êÇDtOÜë³E%ÙvÙ±“  !"R¨FRŠ A õ`“t ³¨O´`戌ë ôMÄ"™ã h‹úH ¡#[]‘y6¬)rÆl«#:·%Vʬ-ñ¿Î¼÷çTÈØq¡†ifŠ.-+#]’@ßÇù“ Ë “J¨ìr,³»«ƒ@Ú±#ÀÇC¯h‹eÁ‚1âITJÀ»Œ‰9š«—*ÿÏBÛ'ø6Ü1F"ÄÁD†NBVÈÝ· yY² » ‘ãB6Ë·Mˆ˜ ˆc`BÇ;§wvH “}Ù$ß~{Ðm³Iñ²¤‰šLUa´ŒJ‚7gê$&Ï¿m8fŒ÷€™C°ì°¨è E¿CBÛ¶œs|XäJyÝŠ‚ÔX…º,€ ïóÐ[+±íx¢A'RÇÁÑܰáßÒ$*özËAl"Ù6ȱåÄ\ve”ƒ!y]˜}D’*…Qè‹è-‡ðm¼b.¢ÁD†@Þ«I%¹_+6EÝ×^:Ð[‰‹:bãÅÁ@Uš©ìÿç¡ Éǃ&0“§%¬Ÿ*Á‡±@!ö¾LÕÜe5‡`¥€ 1Ph EïÐжÉ^Ï;ú§¦cåHî[ªH@›ó¡ cì{f8a1!â1’Fpÿ„'ŠøèPèh[c0vì=¸8ÅB9›rò3± í‰=„»5h@eÎÚ±7ŽL‘-Än?NwJ>/é#º±~h‘ "]¯#57 =_V1HFC€DŠ 4,UîôáÛ±1²§Î‚.2äqõ›‘ú¸ŠB‡Ú´±ö=¯H"ÄêXø:;–;ú@$…^Ï@ùh[aɶE."ã³,¤ ÊìÄ€+ê$‘T*DXïAl¤û>Þ›yÄXXæ@Þ«sl–å|¬ÙwF¼u¨ú,{Ͷ϶ÇÐÔq)Uá#) z A õ`š4 ½f/Fæèt¸;>w ™#€*ñr €l€=€A¿¹ÕMQ’‘¬Í´<›ÕRDjF2»N._μ¤ÈAžf`¶A!A$(4:x’œS*‹h §2Y?˜œZGÈwn=ô’@M(›óªä–ÂŒ›¢0£Ú%Æ’:a”•b@@XòdKÙ¾, }Í’Iûè qĢDžU*@{PÚ(Ù°{îH’¤Ò2—)‘"†â(ZƒDW± +ü+ÆÎŠ$bÇñ’ µB“@’,;îüfF×BàÙöÜoPGŒ*DàêÌXïé’öz?-d£1vœ(âxcR¹Éó\àr¾@è]Ÿ¹½D¢eÙ6ÉöæÚeÆ-†ÝKµ±åÊË]’OdÝhÁ|ݧq–,Œ•“Ô„0‰ã­tT`42v]»-Ѳ`f1¨PL­õlïê÷õ_dýÍÇ´m*òàe6f0æYB›²@šnïÿ°5Šhéi†7È&QÍš9ÆÀief ³ÄBƒCÀ™“ðãíÞ„˜ñª²JÎÒ# X’×~nÏ_mm;#T[nÄÀ ØêÖçêw•t±&…šBÏÜꙤh$Ýÿs¡1FI¶=³#,) !!Ó„Œ¤%VÁ²Á$u¡Ù9›FiˆÊ$q§xš"Ç‚EýhTìgÁ—3ç^/Ì=z­Ä°+|I $X¡öÑ1m8åœøñÈ–=»qˆ,BÝhYÝù:¶lР3eácç ! âÜ••ʲŸb ƒÙ‚Gƒ¡µÑÂø×gÇÄÇÀgX¥_Mþ:³ß}]ß›¿:çÉu£§ÞÌ;¶Û—¹gÄðóD\¨(«#°Üfß\›ÔNÉA~BÆÝ9Ü`ÎÊŠBÁX þtûk)Ϧi¨;h®.>è7)2LnŽ®ÅA&¨ù xû‘çQË–êÊ—Yhþ–m¯"y}NEø¤`ô€óÐÖ¤§.>ÌÅÂ3Ñ9XóíXi‹·A“‘!ÉùHfëΜŽX¡²c¶Óœ Iš²G¾‚{rI$þ¤“¨¥6þA¨%ñ3çãî¹û‰L…D ˆ˜-OD ÑcÞµ2åS£Xñ¾;:yxñ>û€èƒÕ‰Cçô¿Ÿèú\ùÁwUu绫Ҭ~%"Úð¢Ëùà’4¿W’v`·Ùâ·ù×^4ˆ¥ÙvlxåˆAK#`Æ$xØé¼îôŽ6IZ UUP>ÃYrH¸±k· Œq‡Ä$.XNáÙÙ-vI¿r}¾ÃYù2üPÕøojá ˜\4úMÌ…lQíH'Çw­¥DnÍñ(/#Á@˜’kîM“ÿ]SèÎ6lžû’$©4Œ¥ÊdH¡¸Š ÑìEhd´[NY‡>,r$2}Gѵї7mÃÜW*"x‚IM"Ô‚AêǃBü `¤¾ß‡.DM׌@A4 Š hô+±×¶€$Û±_(fH®Î„ +SUaI hžÀ¾ÏßBû"< XòNb‡i(€ÒJÍÄ BƒC  ¦D;n9vŒHZEâÎó³5w@1$Ù"ˆ¢oA²Ï·ŒwÇô˜¬ŒÙ¦bÅ…QäO+(ßT+VئhÀÿ,"`9úœÄ­Ï•W.WÊë«¿xëPS$+ŽA¡ÙòlÙ=Ù$’Od’N‚˜Í0Р L,}Æ‚˜h@Ѐ4 @òt  hBú >¿ËBè>¿ËBüIÐÈhBÛ °Ð  h¿¸ý´7Š#ëü´'Ä>¿ËBh+î´'B€;ûÛCx¢+î´2ëÑ:4 h^€Ž_øOí¡i“¡@дÃAL4 h@Ѐ4-0ÐS@òt°Ð ,ž¶µ;Z9”{¿} $èŽÍ7_–ƒy8°î'óÎ(fÊ Bþ§ ·ãðéŠ5“¢ÿ/ L@€[¬lbÁ‰ ƒ1 wbI!{?J ›#ªÐk³LÒâɾcOŒqLÿ0¢EŒ\Ú‘}wÄ U|¢n„ªÉÛ=I># ¬Ë“™ æGŒ–!˜Ý…ÊU½ÈèoÙƒ~Ë·à&å—¸á`Å òñúQ…‰%›ªòįÿ@Õ­öm·k—#wˆ>:Qt+aˆ"…x6kÏ_~´3üŽA†=—ÆØ²Bù¬e‰e <ƒV €UX©# O@ YþF„e"¯:pqÌ3ªäN:Ppp Æ0x6nº:Ð6æË·2àân&·ljæÊ‚´ ¤A>X›Ìž…º#è¶YOõ˜»¼"EÏ„"ßûASÿ³¾Èª æîª’= ÛLßë/¨  Ó'!gŒw$‘žD3éGò•A¯sàè?‰h›uS»4˜y1åK¶¬„óSÅ®Pñb|PÌŸWŽBØ¿6†2ªÕó ¡Á2 ‚MÑš=^v'p^Cå¤É|è™e¹£‹Š†R t´öhò¿40SÓø†8àùg”dNræ‚^Nc$•WÕ lqë« ô[m—qËo‡¡Åœ0b…NA Ðc}‰¯ÀпÄÓð²ËgC<3« °Îó¶c~– wÝ€`‚ŸÄìh@Ð}öm³vÛó2ò’9r?™5žœ€š&‡dkì/Æ…]‰Ë—g—âtÇ€ÁTr«äNÎØ•¥o¶°EW¹è7GV-Ã#+# 9MŒÖ^$qä,vz6¶„<ÆÓóg&L"VfÚ\dE%ÖaAYÈ&äbd5ä45"в¦ÓŸ>Hø¬øîØøäQÈz‘òòÂò7VI=^ƒù‚H¶0¼¡›ø›ô¦3Ý^šÊM 4*[/³ácçJ>]¢yÇҴÃQ"Ø !@³fÀèë)hÓ{¸an(âæ“|¤mŽdü^¥›Dø‹wäk*:4ålí&͹.R¨ÈnHbOW®/ŠVvòDäAðþDÛÇÊ.\ÈeÌÑKÉ•E×t(›¿­¾7%³šäIؽ·fÈÈõñ¡ÉÇTL3ëO֜ǂÌäŸ$>Ú¾97·ìŽi-}‡hYqr›lhñÅoóÊf°\ ;:Y÷`_¾Éš®…¾Õ’v‰²DI$+’W5‘¬€ Ø »êÅbPžJ™¸N8»FŒíŠ-¯as3V'IGÊN"Ë­šº°,ûг÷Ö±›OöL¢šCÿ…T˜ØrîÄË”±ÊYEŠ¢ ß~Úæ¸$•Ù·Ï’),C¾ˆÔdE• ‰›¹%Œª†UîÂêj‰#»^Ѝž{¶NÆe?ÕfYçYÐQwŒÙ ÆúPDaA¯$ŽŽ¬hL^Ñó)•&+1ÚœdE<ÖaAYˆ$™™ yER>‹BÊ›N|øQ#â³ã»cãG!êGÈ?Ë ÈÝY$õzù<âÙ‘KA6/ñ6ˆ)CÙצ²“]÷ÄÙävþG±@’HÎ0‰ÜQhÆ¿5⾄}œŸ‹Dº²Z£Œdl)¶õ·Ó¿ÄÌc€iG~F…‰Þþ!‰óÿ½_çú>¯'ð]]ÕyëΆN^3n ñJM›…£õsß~ÖþE6íSMNÅ<¼}>àF¨¶ÖÓ1”{=Ø&®ˆú²çâm¾FjK0ḑÔúˆVñ$’ ¢~àžÅL·añ‘Ì—k–ñ¥x>^G™ãeBž ÛWõ³ôD4 ±;ãcÁ¸¦êò}‚`äÄcNHC$± Ý OF´Êç!Mü~ZL–Ή‘–[š8¸¨e+Vƒ4y_š‘&FÖ"Máã1¥žl©ÄËéŸ^$г5Ÿ¤€  ™hŸxÕ•:3àâí;Œy³lyb¡Åd‰P§«Vµh.»>@¹4jøv,>Sm¢Çþ_òT@šãu×÷°&25ñ4ïr(ÃvLB¡Ç– §*û,Õê'$*'&\ˆ?„aìxž%Å’4‹"R91ãÅ’Á&€ Ø +³­&Éñ Ë"c >RÂù‡„K%KÀ›e$‹ ôÑêÈ]¡ŽÍÛŽVÕüs#±½q¢oLTôT7Ú€A Š OšÕ´f™8™s7Äë“™*™ T—B¨£ãTÞôI$]°ah˜3º¹¹¥q¥¡‹,$B,0ýõINÎ7ůÇšFÑ %õˆ€U‚—²PÜIÉÈÐÓ»#gÈÄÁÙ0Ópœ¸–oGäBLƒ“ú¯uÞ£I¡lÃñZ¹´hªòѶŒ™·Ó¿ÄÄ $J ÕZT6¨Íñ9ŒqY“6# €^HʨeQvP“TMw`êR²6èÝþ#ä¡VeÉgŽ‘ã%ˆvï¥ÊU½È°F”ŸcЗráž)r—ldÍ ŠA@<†ÿ&BA €4F‰QMð§2 X°Z懎F<˜$УäjÝ¢b‘Ùþ0dÎþ«Sz^§ẻªóÖ¥ÈÝDçÀ»Äÿ,™¸²ÆÒA*¡,¥U%P OžÏWl`X­6fÒ0áâ2C’1Þ){[üĸ3rç(ü$äG#î{ïÚæ6ö\™¯k‰âƒ0mÁ3ŸH+à•ô”‘LW‘°¢H&ˆã~N´•n†à&i؆&Û’#ùÉ’P%Nb1#-Ù'é&ìvA4 ¤m8¸ÛÂ[|à#M6£õ{“ß~×WfÆì¯”¸ù­±Â¬’úF8ñ¸ñˆ!€$…fUOt[õ5 È~Ñ‹µl/>drcÃLªL§‘£+|I&‰£ù‚{N%Ù¢>&LnQɘqž/BUäJT–¤µ,sIe$‹ ô÷×c7hµLnkb ê ¡š‘ë¨%zý©`ß$UP'Ík7£T¬•lÙ>!óa¡•U¹¯“SÝIl`X®¨‰3­<êÀ”Ž»£çYuìÑG•Ä^¯¨õà÷Þ–…#ÿ”‹‡ŒŽ«$g$z¢süº*À²PÅIÉy­j,Ë[6l¹ðm»ge1Ëèc;!%ÁfÝuÙëZ]Ú¶sþ-2¶èÈ)$ѶÛzØñŒ_âf1‚@4£¿#T%DæóoŠM0IÓ:#.ä’"ªW»¨Iª$Žìz#lõ[âPêÁg\œ…ÈAEÞ2X†nì(þR¨5îGDi«ħÃ2eÅ#äáB$›äÈÅR/Ö2!6AEº6lé.çó†æ(ò™-QƒI¬G‘ʼ@>Í¿à ¿jUùe‰ås,‘( ŒÖx€>—ûj>œß‹o,f2¤¡¦—µ¾“È í¸† ›6:Y]ƒvà!‡ q®VD‘”ÙePZÍP#óÑ+-3t&=ü›L–͉‘–[–8¸¨e*KAf+ó@Ö´B0 1ïñÅã<¾¼ç*h%äþ™²¡Å ¢TMŠêÅÑÐVgÀÆfŽl\<ŒD­­—'* ‚ÊÒøVvQüDžÈßµèn†Crâç c… xUž¡b¨ÀPhnvŒ˜¿Àò¦ŸhW)¾F ŒM `t\ Wf¬QÓù¯µí˶mðàG"&ªÏ¹þæÏ÷ÔÐ4q?ÖºhÀŸýàÔÁ¿â ]â í×O‰vGÿu~#d×ÿ´]M a_þÑtЦOõ®Ÿ ,4­X &½A¦%Aò릋²8ûQûé¡l8ûQûé¡lžÿ©}>$ÿ©}>%Ù?ý¨ýôж?ý¨ýôжOÔ¿¾ŸL;þ¥ýôøŠaGÙ×÷ÓDÿ©}>%¦¿Ö4¦@Ä?} @R|Iþz¿슣øôÅ ’Ô{õÔÐÚÿÎ?¾Ÿ_þÑtÐ ÿö‹¦€wýKûéñG_tø‚8ûQûé¢Û´ÞßM d×ÿ´]4@"ÇûÅýôÐ#‡ÿµ¾š-°ã]ú€ÿ}>"Ù6>ãLd µˆiñ[PÕÅÄ1¬5> ;a£HCúÇï¨ZdWÿ´]] a_þÑtЦÿíM ađӮš `/Ôhÿuq?ñW@OüUÐÄÅM L€¤ÿut@ú übý´¦]I’+F¨ÊvN¡KGï­DžÇBδavdËù 9@@¯7¬É¿GE^Ä|æJ‹fZûmc)Æ,fR¡oQ,žµmŒR,3¦+õ:‚G[b‘/-2²Õ÷©nÅ!©–Yl²ÿm-“3] …h #¯@û#Û¾õ¤gmìÀ7'ÍÇ .b–;¤©âE‚¢ ÈsÊwÑ×ÖÈ‹)öì@±búpĤÛÐI$ö}É'³Ù:¹Hcn‚Gd "Ñ#Æ´›fIŠÍÜq0]!Èõ È¢GÈH ¥€±çï«Úó2ö¼7\L™x—¢!!A4 ¥ô cØêTq+*¹›|9‡nwpÌÁ10RÕÈÄq&»èÞ³ŽŠÝˆõñ&ÉoáðÈZ&`ÄÀÁmM€ Ñ>£…RL©Þp²#l¨Y”Å’_RR‰ä‘Ñì_V¤Éi i›q`ØØÒp DÉ !? ` ~~5$¤ÙSK¢¹ÎØmÍ1¯ >ˆYϲ‚G>4qbÑwL21ò½E ’õ (G"Mtº²;ªì}õ”¦™«‹7çgí›{ž$²ã»(³@XM &ûq®´š9\“ë`adŇό¹„IFØgÇŠçD’ ¶n˜åœ(¦&AÈ ‚’¦˜"‰ÈÕ±Ö8{¶ã#LJ“̪†?I©&˜`H"ÅŽ¼èJC2r¢Ã„äN[ˆ¡ô¡cd€ =‘àhS;o{cŒÅ™Š3”FŹA^5ÊÅ`| aö ɼm‘Š͘œrHô²\’ ù íbëR™WcßrÃÆÈL)$c+€B$LÔ.ë·¦hÛ¤ž¦,@b Z¨,€M×¶‚˜A»àOšØd\«Ë®‰RÄQ"ûõï ¦W{Û2ýF‡,TIÍÙ”¨áßÖ èö,uçALˆ·½²Li3W „ˆ'8ÙX‰›±T;±W¡i’w­»å`œðiLa}&-ÎÈ+ƹX£b¬O ¦hÅʃ32±¥Šx øÐ…2ó±pD70OVQ`ÄÄдbßuÀLá·I‘S Ç  Z¨;›#ºÐS-烗‘6..B¼W¬È[$Uø&ÁºðGz˜»ÖÛ”®S$¨Ž1#ú±´t†é¾ ,t{ñÖ…¦;;qÇxr󉨋 z«ò„  –]Ë ÈöérO-˜ã¢I MþC£ÙóG@Cî¸qæ. ¼‹#¸U- -\¨1I«êﯾ€× 1co{f_¨Ð劉9»2•;úÁ ½Å޼è)‘÷¶I&jä‘$ç+@ q v*‡v*ô-2³îûsmç1'n æ5_M¹s ñ®V+±V'ÛQôX«bqw­·o&lŸ¢U,…QšÖ¬µHy'ÇWZÌ5¤šr4Ï»í¸“$4\´„€  I…š ñ­œ¶m¡wZÙŽ-Û|³…äÈ9yF ÅH DƒÑšÐ»" ókÈY^,¯¦8ýFg”pïêÉz=‹žƒ`›ÞÜøÒe X,LExY\T8 &ÅuÝõzó·U̹V¢¨‰Ëòôñ•Š$а>4.È›~Ú±ñcÌ“+è”B±³ì€=ɽô³bºº‡V°GD¡ “î¸ •ü:LŠ™ˆZâH‚B–ª‹ dwZ£Q»´nx2d>MüÛb¢.‰è‘bÀ$‹ïR=%ØìmïlÊ´`ˆ“›³£‡X$W£Ø±×håLˆ·½²Li3W „ˆ'8ÙX‰›±T;±W ¦I޶sÁ¥1…ô˜·; ¯åbа>‚™£* ÌtÊÆ” ,;F•4ÔÄQ š ¿¶³#k¡po[fB;Ç“K~£3£(áßÔ ÇG±cóÔ¦RØûÎC.G9xÆá]N;óÕ5ÈÝŠ¡­.ˆú5açcçÃó²NEM©R4A>ǽS3÷L=²Žc¸µ,JBÌвJƒC¿&´r7¿u†YØâCˆ˜  im€*,ø²4-0}×3†Ý&ELX/€H$)j HìlŽëBS-‹¹âfä>>9²3+±ÂÚš 1H?cì~Ú1÷}¿2 rq2}Xá$HÑ©=€ ªWFÅ]ßZp÷ MÀ9Æf¸Û‹¤‘²2’,= |†Ï,ð¶DÒqHÔ³±=’¶„É™gÞ¶¨1"Ì›#ùsGÎ2±±%(ÄHI bêô4­—;kL¸°$™=iÅă¾B‰¾¼ ‰ hÖ¥!”…É—³üçðöd/Ä\ ·TŽ7]ÕÞ³‚.ea;NnL¸˜³x(J«d)$>.ÁÑ邚?…ÆÒÌ?¾§ò?¢ŸÃˆ=NÃûêáû¿¡9±C·Æ%ÉËp¸ Uf,ÇÀIëÀ O¶³ƒ¢ø±œ¬tÊÄÌõ#‘C#hƒãL%ök1Yy‹ƒ:cäg*»Ñ!AÉ=@>Ó\Èd—; ,œ<…`êXx ÿÓWäfãb37’ÈH23¨ÐR@²$€B‚zÐ&ëÁÖjE¸³Hݰ“-vég©‰¸’HRÕ@‘dlŽë½tß³ŸE Ýð23)îUå×D©€b(‘` } ´ÈÆÞöÌ‘)ÆÈgô“›TMelŽK×Ô +`×Z añ.<™´¤BádO—pêO¦¹vöðoB ÅÎÆÜ 3âÉÉ9<”© Ñz#QômtgÍܰ¶ä™)PÀ É @Éð,YïX4û§ŸF}U4Z‘Äø«tH²× –¦š”Ð$XUtA«º#\yœªÑÓ…G¦r—vå1.[Ø¿cFº4|üµÉçVÙ×át‘TÝåu,¹¯J,žÀ¯¸¿#¯#Jš}ƒôJnÓ2üä€)†5Bˆ¾ìWßQù«*ºâÓú^¨Ê”‹ª ăúcûé|—V>t3?/%e9R,Y"Ç÷ѾDöÂÁ«¢ç'p½wýõ2ŸÙkè=}Á—˜Èzû†Ó)ýŠãú*ró”òl‡ïóÓ)¯b¸þˆùÌÁ×Í?üÚe?±Œ~ƒç³?ï/ÿ6™Oìc¢~3þòÿ¾™Kìc ùüÏûËþúe/²c¢vgcæ^ÏBŽŽR®Í(ÇèÕ^NN)ˆÎÂDwç[R–5f*)ôgù¬Û*rWç¬e%ìÕ/¢Na6rŸóïLåö)}óY÷–Ó)}–—Ð|Ö_ýåµ2b—Ñ'.ÿíOûêç/±K蟛Êÿ½7ï«rû¾ƒæ²ÿï-©”¾Å/ ù¬¿ûËi”¾Å/¢Fa¿ö–ÿ›W)ý™ÆDüÖ_ýåµ2ŸÙkè›Ëÿ¼ŸßK—ØÆ?DüÖgýá¿}2kØÆ?@2ó úr˜ý…ûè¥;.1K¢ìwUPí#ÑñÞ´ÜÌëè[q$ÔÏ×Uz—Éeø2ZmÅ@/;àÕ”¦" AŸ<-+Yì ÖräÀ«dç§™‡÷Ó9}Œ`5—ÿymLŸÙi}ÌåÿÞ[W)}Š_AóY÷–Ó)}Š_AóY÷–Ó)}Š_AóY÷–ÔÉýŠ_Aó9÷–ÕÊ_b—Ñ3™ÿxoù´Ê_dÆ?@2r®þeÿs¦Rû-/¢~k/þòÚe/±Kè>k/þòÚe/±Kè>k/þòÚe/±Kè>k*Åä·ï¦Rû%/£FfL±¤œýBÔÞµ:«3%èÌùYй²QîβÜ׳U胙–Eœ–ÿ›SÉ?²ã¢FfgŸ›où´Î_c}2³˜Ú乡÷ñ«”þÉQ^ƒæ³ÿµ7~>­2ŸØ¥ô ‘¸U™ß÷Ó)ýŠãú$Ož~¯]ÿ}2ŸØ®?¢>c›¿“ךëήTLL»“çCÝ…€ÍOR …FSåˆöZýu.F±CsdÍËx׌bA+†a`¨T€MžD¦¯½\Q1Môe›w]Ò,æÉ…ªpÍq›D°]¨û]µök9}ŒW ÆÇÉLåÈe¢yäwyTÇʼn® !¼Y ynÍëNHÊ‹ðÆÕ›‘VdL­'¢dgIÚ… 4 /½XšëIÙg[s›;IvÌA4àe€’;$(êÅÕX»Õ%#“>ÙœÛ|&2TÊ2dhIJVVe*üA¦¡Ø¡ãÀì¡ò9x{XPmÌÎ'Y=(Ýj5õDœmˆ‡]]‘öïKÝ•v3pÁܧÊ|Ü › “%ÖBŽI¢X€&Á"ÏNÙ¸mPæG$TiTA"„%Dh¤ŽNjª» Ú“fÅ ¢‹‡¸¯Ã¹˜£W’s(†6•L€0 sbÔh“à’È:Ѻìª1Ñ1—Öš"ñÚ…ucUvª'ȺïBû4¶NwÌc${iô¥Îí"ƒ  @ È“×F‡›:åelÛ„ûÛJгÂÙ‘O¼ÀHø… H»,B(&û4-¬CdÏMáfɸC‘;Ç71ǃò!@›%É$ø@µˆŒ†·FÅ—&µñ}WpVK ¡@$…GdK@Þ…ÉM—w“+)ahò¤hù¬¬ÒI—-AˆÝ*“@(à2@6-Æ,%“XÏÏ™Z!2™xÌly™í®ú-vH¢#«°aÉ·íqâÉŒ†vô°˜°[÷ kûhGÙ›|Ú7<Ì•ÌÃɈðx‚G$$”Uf`yÝEY ›Ð'F|­—pŸ|i^x[.)â8 ¡‰eˆ@¢…Äßf…µFèŽjüA,Çl”Døé›šU©rMrº<€]ùw¡= Úå.LÛ†í¶KÌ…PsBˆ€ØE¦$“ä’${„±Œ¸á–<½¾H?ÚduæÈC‘˜~>ãÏW¡_gCB€ço3æ1%ÅÛ¥œE9’C ¡Á–¾¦mûUèUؽÆÌ­ËМfV2¼«è•£d¨bIìÑ¡Dt;Ù²)s&ÊŸl"‘ Q Þ >­‹=Å»ó¡Ã[£bË“ FÚø¾«¸+%ÐP B€£²%‰ oCY"é²îòbåe,-Tÿ5•šI#rå¨1¥Rh<H‰6Â-¸>6<±“žehL¡¥àc1“Ë•r=±7×"l‘F>Š©³ ÂÈÆÅÆ‡äÙ‘e›7Ó°p–HA.ÇTA5¸†vÝ‘$i„–6ÀŠU€DäµH‹$â…ÌÕ Yè¿‹C÷?¾¦c“ ²î‘2 …Ç‚y¦©J%à ^=Õ±6H¡Õêæˆ¡bqñ¹+E2†:mÍr4|È$xãÐ (Od‹‰Ó4 D[)r²ò%šC¤‹Ô6,_Hìø$ô}€¦W2V!<¢vgÜNCªH¢@¾™P(= ø$YòY¡‹$+‰ˆŸ,Ò,qKÐ+¨i˜2†kž#‘dšC41gK p›o‡m\U“Î%T@=› ËLÑp‘ÏË‚y÷w•¢f²£ž& KP¡‰eˆ@£ª‰¾ÈÑÍQc6mŸ4îi•<)å‘&,8ð`Ô Y6KÙ$Ât¬]£2VÊà|7º6,°dEÂQ¶¾7ªî ÈM $( ä€IbhÕÑ) MŸv“/)!hò¥h¥`Ìò#—-Aˆ|UI @ì"î1a+âÁ,dç™Z/YL¼ f6<‹Ìö×}»$QùMƒM¿kXDdoH5ˆÃ1`·ï@~:гñ͸n²¡i!ÈÆXþ— @ÍLÖA $ ̹C0o˜óE¶Êñ¤R#̬€Å4X}}ªô4ÚòÆëÈLx'š_ç4|X¿.—µ[mD¨ßY‘µÐœm—"Ex§$AãF’¼\ØñÇ @P,žÉì $䣱bÞñW7sƒI²%HÒgxÁ|9™ÒI´Î«$‚Hmãúê5^"˜Ñ%IB¼‘ã@&.TSåM6<±¤®¦5É<– ‘ÇÅ °lø#BÛº`dç$IDq„”;,°—GbÀaÐ4|ùÚì-œ™vmÝ6í½$Æ3z8mL°RÀ…!lµU¨ A6.…BäRâgácí˜Ð`É’q}W‰¢dë“d°?¿z ‘|…ܲ·¥L¶S‰)‰£t!Üÿ‰­o ì_tC#k¿Í1ÛeIF&æ•j\“A® Ww`ô/hè×/64- â£ÛB6s~!ÃÌË‹ðÃG)2”*ÊÜI Mä‘^E ŠíØùÛN׋‹¶-9õb ™›Éü\A‡Û­F_ˆ¶MÇpÌE xr1–:W Ã53Y€6@ñBÃ$[.á6øÒ4%¡lȧŠ@à,|B†$]–!Š}šÑ[&ãî²äÀÜaÈžHæ.8„~D(“d¹$?Ð:âsáÌ×A—ŒɈa»¬Ôx€I ò@$±4 s’VŽ‘n™ÒÄÙ²Ì9Y98y ,¦¤t2<‘·"âØ¨@ OAkí­®Œ ‹/æÌ,#%¥+#)eÇ«¥ºÕš½S9!mÙ¹YdAŒÓÆ"’9¡G \1R$€•Õš5DÄÑ„™û|Xbc cHdäz•é•P£Ù²+¯F\Ý«.}ÏŽ2ä,O™DÎͦx…ð¹?Hл7]ÉVXÝ¢(™ <Òÿ9£*Åà ^6Þ\›j#Åè ÄØ²%W‹&,¡ÞøÑG+Åê0$~=döH°(’4Kí¦D™ ùÌØáÞ1(XÚÉO&ÍwÑØð'°?sƒiÊL|wI§Œ>£©‘CP,ÄX$v@ý!GS9,lh°ñ£ÆÇR©E¿ý†…´q¾"Ùw Ã2A ðäc,K…áš™¬‚@H x¡bio[,n/ò#åý1êÇuÇŸßm èÁ‰´n8ÛÚæË‘‘:Leq¶1Ò“Èø xR² X™¢Ù7# ±¤s*Ƕ>.4ym,MWà±@(M›ð(’Í{>6Ved¶A ±ˆÓ"Tyœ¨£õ"¼ òXõzÙL=·sÈÙpð¤Qˆø¼ÇB/&HãÊ Æ0-‡“dÆÁòI<¬ìhC”3ù4[l¯E"<ÊÈ,PƒE q7×Ú¯@fƒjËþ-UÈLlyæ—ùÍV.R…¶«bmª‡To¡}‹dÜŒ2Ƒ̫Øø¸Ñå´d±5_‚Å Y6oÀ¢H['ø6t¸¹5’< «‘¦gôØÔš°v)‹è\‡ÁüW ybÁ’Wõo|\! C9$]ò#³Ñý†%Ù¢ûâäɆ±âá¼ÍëÆÔŒ¢‚º±¾Dy^õúè»}ÃrŸ)ópñòIq‘adÈâ!7 L!Ð :"»ïK _?mÊŸuáŽ'XŸ2,‰]Þ?L• Ðê³Ä 4.Í×F‘tÛf~>ö3$Ë…ãt›ÕBU­Œ|W¶7Ò€{ …¤ÅjŒûv×”˜M¶d$ëðó êrƒú¯@,BŠ WÄv,uÔ´j™·dÆÌ\¼¬üÆ“ùË"ÌP° “áeV|]÷B’µ³F烑ž±$ ŽPì²Ä]\ŽÀ 0è>|íäT»6ì»vÞ²ã½6‡' XR¤–ªµˆ&ÅТhGѪ\\ì,}³2N!S+ÄȨ™:äÀÙ$ÒûÐ{/’»ŽVò«‘·Jq!ehž7ŽÈíšØúÅ÷@2/Í®ý,ͶÊ!x17$ãj\“A® Ww`ô hÞGØèJe•ò<è]âs~!ÂÌÊŠÃäÆŽR,d(U•¸’@›É"¼‹ "ý‘·AŸ´íXظûj±læÄ&A37“ø¸ƒT<×ZÑ“â›pÏÍE <9ËN#‚ÔÍØ$D€²ŠìDÑ9;.|ÛÛHð—…³"ž)C€±ñ È‘vX„ (P Mö@Ä0¶LôÞV\˜Or'xææ8úoÈ…l—$’áºAüHØ6­Ënr³0ÜÉ„a,$SëQ^!* ù4IrHè*öiÀ‡3ç'| ®32úq<êÓTi¹Pª¬GÜ #¶Ll¬lI"'NyȲ¸i“Q‚nꉡ@’AÔ}tcßöü¼™áÈÇÇi£Éð£…. R$€•ù4jˆ&²~yØ …·.0™“Î$!UfÈ®¼{ꦃ¾Î/ÅØRÇùk0IgY˜§BÕ}^ 4,>Ç—3Ix¢ÎRcKó+Ä8Dvo«oÅwîOÿ.._ÙÕ/—è¬x®ÊUÄ«² x®¼çÿç\þˆ—ßÐl‡Y]¹’Å(P6H# {5ß÷û2Šhµ&›.‘ä.<«;}<ˆ$] $tk³ú5ŽH«,]ðÕ#ŒÄq-ûPÖ.ݳ]*4G4QϳTNµq!BVŒjÿI7©k NL‘Ê”¢¸øüôm16uðkü“רþú‚ïì]“ Óc"G}V£«-¶†íñ¹É ‡ðöIûkqüŒÉè2JÉ;:Ž®ˆ}eµ‘UÑO¥OZi¡ò?§íª2?§í È ¨ìÈšZ h(}†„¶GU¡raIu ùB#Bì“ÃíãòП ¡ì<è>C1¤D™^AÐ=ÞŠì’Tމ‘Q%¥ ŒÝ(öëlçL©““ÕHl~Z–¬S+‘òù1õ(´`Mý´t)ŠÜBóL˜¥éªÔoèÔQ•ä.y‘ÙÖ.FñEzºã¡v.¸è6M°ÐŸ")~ÃBì(Fƒ`@ñÇA°à¿m ò öÐ|‰¡ö‘@64.ÀE€4#l†à<ȼ*Ï2ªy°Gé¢_"7ñ/¹º¾E-}=5{'YhFèϬÿ‚åû ÀÕÓEWì~4ÅSåº?Ö•{2ïÙfôÆRKYÀLdr ‘ÐÕø‚YÐÇCÜøÔuèž'7!¾¯Ä›²ªJÏêèûj*öRAÙ[ðŸßG^™ÅHk±}k4^ƒ¯±ýô¦Kd ÷ÔÞEmQh¬L€ñúè–Ãz=zöt„kÞºGùÔ2Z0MÐ֣з]ëFd?PÐ*eD€«{éVjÚp` ûw¬`ä̳)GààuÐ:ËHÑVd"ù-×¾¨ؼ&¡-”Ý'ÉWæåpÍe4fb“J ¡}š¡büW*F8÷ iÞ&Ë1,«$;mùIϹ ;¥O]výƤTL·5±{ÞV>Õ€g|v•Ô1ŽÔZ‡"oºIü¨Y cˆ¥$ÅîYë‚òB¸¼áljeÈs/ªÌE¨£È€¤Hö«'SÉÝ•9Qcn £âL•ÇyL¿PvPE-QÊ.îÉê…è ‰“danøçuxÇgi7õ-‰BAµ¯¤­FÍñ= \RM‰ÂÜqrö™÷6H@Š1Ž ¿Q…‚i‡ÄõUß`ýµ0EÈèaO&[Ë·f@±ÍRÊ’—Zè‚@÷^ߘÕHØ­ælMª(¥eRÏ(H̳„@h’Yˆ4À’hWzŠ922³œˆ~[9¤“¥¥É¤â¼n›‰»,*ÀvHÕÅ&Cæcú¸o¼9`œ¶¬ÀWdšøÇgƳŒS°›—¸â&è¸Rc} °}_«™PÖ¿ä ’E¾÷öLšK•¸Í€øM…•Ú@K‚X] ¡jjÍ×"™3áÊ@[BÆØhGC³^5‡ØüvYa‰°ðUäx¤wæâÓ!Xò4<WcJ`¸ø“³1ñ ãÍ`ÀBÇÕˆ&G/r¹ãQµø?c ¦[øÞDQN™ '†xâ“F.T/ÕÄ,,UÝË.ï“&“ hRX'1γeqE¡`†âlVº{ÐS(ÛöD¸¸òáíÁä›§1¼á@UãÐ`$–z{è) \¨ó1¢Ë‡ðJÔ‘Fˆ‘Ї?'âEÇݱ‡°zž¯Ǫ̃k _„rPI"‹_qi†?Ä‹.ê»{cYZU†A%±(H%”¤­FÍñ= jÅâ|Y Âi21 ðþiI̲Uѵ5g¦è)–‡âVxrRL5ùŒycÒŽ~JÌä*ýT<1 ôh©óZ dEñBO‚2bÇŒÉó- zŒRÅù‘øxŽ@×v:÷ÐS7mŒ{®Û|hSÔShÞT‚Aô í j…mÒÃ¥y¦E* pRꥉûÀ}É?`H¬FOÄ‹º. c!`õ=_«™PÖ¿ä ’E¾áL1þ$YwUÛÛ*ÊÒ¬2 -‰BA, } •j6o‰èh+V&‹VX²°Â˜°N\J&²ÉWLj‘¨©#º 3~Õ¸ÇÎ_Óñ¼lŸU|‰¡G¿úè£f„ ‹/r›pÇÃLÉ;•3—§‹0y&—ò®ý´dnëë×C3#Ýþ–eöìž'¡à >EŠ•›‰YöЇâÈfI‘ˆPG‡óHNe’®ˆ ¨©«=0ïBÓ-Ĭð䤘kóòÇ¥ü•™ÈUú¨xbAèÑSæ´ÈâˆçÁ1cÇê|ËBAž£T±nuøxŽ@׸ëßA´ÅMñ,n‡pƒnViay$—¤)Ph’ňP(Y>F¥#vÑ9ßab*d&"¼(¥’Fp¤+“\V"³b€»>ÊDɳ±òØÿкh|¾Îl¢I”‘I€‹ ÒË2 -‹!7kBâÄOuzRl©±#|ŒâI“—¶ª+`œ˜8IÈ´` 8‘k×c¾GR“ì¦çébÍÛzzÑɪ,–­ê0U<¨.ÁêÅ_v5˜U›}ì]öؾdå3/Ð){ä’ €|_uC½n‘‹¬ˆa‹<¨¶Õgxäyå ƒeÉ‹ Ù>F”[:Xß'™T J”‘ÙXÿ#ªc$`ÈÞñ±÷EÁlôÌëÉõs*¥®ÔrPI"‹_xÒ*“'âßs]¸ãY ‹ m­ Ô¤­FÍñ=k[è•{)‹ñd‰Þ|^¢¥l,×Ô;5àõï 2¦ôóe¬râ†Ye޶ÅÐmhPG¸%er·¼ˆ±ãÜ`ÂY1#c!šœó » jÅÝ : a6üÑn¿ÃÆ*0õ–&"oæ[-† ]¨÷6*˜û2¸ß‰·eÛŸ*ÊÒ¬/êÛ„ƒk_H%Z›âzÐV¬nç–ùo‡¹a¤° m'æ¼l‚ QùƒÝŽ‚™m§t²M"ã´kÜP±üjUX5WVt{ôzÕÎË\ s9…Ž5òìM™$úMzÁ—ñ)ÇÛ±³S3Oˆr 4ÜB¨ Ð4m‰eP²| [¢¹ÿAˆ©€Å’;KÄ…rkŠÑä@Vb: .ϰS“ñ"ãî‹‚ØÃÈX=OWêæT5…¯Â9($‘E€¯¸S/µïgqÍ› e<ŠrùKô¹[)ÄP>nÏ‘÷ÐS:Z4-×r;tqºÆŒÒHU}Ix*Ò–,ÍF€U'ÇÛ@_hÜcÝvسãBž¢›Fò¤?¡m Õ7Ÿˆ×hœ£c‡Ž5F™Ì´@f qy˜‹þ€•†OÄ‹º. c!`õ=_«™PÖ¿ä ’E¾áLˆ>$I·A¶¾8U”ʱ8’Ø”$ÊÒ V£føž†…F ¾(Šy}iñx,p „ bc=€E­EMYé‡zç5mbþ,émûÖNà2qâÈd⺇æþ ¾A £EH½t8˱ûFtÛ–)ÈŸb"g@^a‚±RA¡Ñ ×^;÷Ђ·Íí¶€=,e‘ŒO!/ÅJЉ,K(»'È÷+6cdE—TÒX᪰@#üŽ„1M½ÉsBq2“å2ýAÙAµâÙEÝÙ=P½ L1÷¹%ËH¥Ä ÒË2 m‹¡ ÚРx±㺽1Q|Jß,ùYx>šœ#—Iy@‚XZõØïÏZ eÛ|ȉ'‡+")"QLY[Ô`ªy °z¾½ïAL¼žã• Œm¾#4xj²Q>:ú÷ÉO€Ä¡¨© ]½1¸›ÆV^6CÇ©ôå\M`y…±@›{cz bÿÖ8å h¹É”a²@ŠÇ/«˜Áªy Uè)“.û˜6EÞñöøÙLò¤“•"¿¤…!®V>ýnŽŒ-$‘+̨,¡¬)÷ïZÉ“¸æâgG ¸+èK0Š9o¬’·|kÅ‚wBê¯BÓ‹ñÍ»&ÜØÀ,­*Ââ[bPy-} •j6o‰èh+V?rÊÌ$»Ò– ¬RJ>¢QXY|€5uùè)”ÁÝróâœA‹K@\®Qµ€[ÅyØÞ‚˜m¹óî04ù©º(Iy† ÅnètH5׊>úÌ.…î;Œø²®>&"Ë#DòÒðT€hѲK ‡›#R™JIñ†#‘Š$qãžgi8•îˆl€¤HöÉÖ¯VgùÏÍȇt‡âˆ,® ä\„'‘B@‚ ýëÍI&ͧLÌFÝÎß‘ÀVeh²y2€EZAQ‹ëÜk;ök?нž·œy2q$†Â†Ž1–€7AÀ5ãºì{iã¯c6Í› ™L˜2`T0ȲN\1*Õ¨"õ¿¶·×Fe+FÜìÈð±ŒÌ › ‘¯—bh(ýIü&€:їу/âSÝ›³Oˆr m7ªý7FØ–P ¿#Bo"3¾+ÇÄäGxL1HîÒq!\šâ´y˜‹Ùö“ñã𠰙 ó*¥®ÔrPI"‹^äMÛ7¯ŸÎ›±—ÒyŠåò—éb¶Sˆ kÍŸ#ï }¿¦?¡½ äÉå}ÿ= ™7MËø|q•Y¤ªú’pUKÍF€ Oƒíú€/´î1n»|[„hSÕShÞT‚Aô"¿¶€Ë¼üD›Læ6€-e 6(Q:ìwç­?áÿcÏ¢r13°ãœæ"#ÁÃôÓšRIª`“â‰ÓÀþÉçÐO‰“9>7 ¥(²üÇòì?‹ÇøHñç­<ì¾xý øwpš%™e25‚*îýÇçï©à—¡æƒ-þ­näO‹åˆ†·Ç_–ž ÏÃ[ôGí­x&<ð'ýZÜj¬~ÚÏ‚CÍ¢?ÕÇú‡í­x¤<Ðú-þ­î?q¬ø$_?Ы{Üiàóñýþ­nÕùhø$UÏé±gAéÇ\›ñ5kK†TaòÆÄŸ†÷Ð#ûÜD~Ú¾), ÿVóÿ¬~Úž“Ï î5e‡í§†cÍ¢ÃYö~¡ßå£á˜\Ñ`ß îÛEÃ1ç?êÖà?Æ?m<3'š õwsQÄKôŸ"´ñL×–þ­gŽƒÛÆž,Cý[ÜeÀü€ÓÃ!怫{ß!ûiáó@?Õ¼óþ/òÓÃ1怫yÿÕ§†dóÀ?Õ¼ÿêÿ-<3/š†·ëÕñHy OúµŸýå©á˜òÄ?Õ¬ÿ¿ËO Çšþ­îø´ðÌy`Oúµ¸]úƒöÓÃ2.XЫ{ë˜ý´ðȾhÿV·øš¾)4 ? îÍþZž4ü5¸q«¶ž4ý\Ü@?ÛSÁ"yà;aÎÇœÑr(~šÚâ|°±á­ÄýE$ÙëY|f—4|5¸V?mO‡šD«[—±O‡ž~܉üCöÓÁ"ùbOúµ¹ñÛO‡– ~Ý05íZx$_4IÿV÷;¾C¿jÓÁ">hÿV·/ü:¾ÍÆX|9¹\‡^5ŸÇžþ­î^y÷ï§‚cÏ?Õ­ÃòÕðHyàOú·¸ýÆž ÏÇôGúµ¸Ý’4ðH.xÃ[ˆ‘YÈ oUpJÈùcTzÁHUÙ{צ©fÓdê¼D‹#Z‰Cu£ !”ãB§BåY*”ÑÔ}UèÎøÙ›,œÐÎñ™BÄEð>u„¤Ÿf›Lç¦Úø˜’á$8à69‰%\`$€-šÏ#Ð&€³Þ«“^‰ŠcãÛ"\LuÒÅÉQ½èX°|Õôlßt-û%"ûBdà—•Yر%…€,’’vOþZ‰ï£Mk±»®Ö›¼2†õž‹G¤¬(0XƒÑ¡zݳ Dæfן˜ù˜‘úElí) ƒuÈ’{û› ’A¾Ç,æžÑ×5išópdܳ¾s(i$Wä¸àHYGVÖnØ@ «£“}Ôb»+‹„ØY£%¥zï0‡Ô$`A¶¾À ÔlÙì²dů?ÏÉ&á,R»ãR±é8“g,Kw]XcÜêK’™T Û1Û-±åŽ,‰”(’(ª€Z[7D“Ù7ãÀXÎÀÙ#Ýó1±¤I.lv&hì3q*IPGI EÔR›aÆ ò6}Á±WE •2$˜Áˆ.In Ÿ¤YðlU]×l§í …vmÉÚ²_,<ˆ¡\@ ¬—$…*†Q?×zÞñÙŸå O‡ÖLó¸&Oòå’9%ŒÆK@8€×J,)"¬‘æ¨ º$Ío̬™Ï›ŠH–6‰a!‚‚ÄSrèý]šðQïT‰Qvǵæ6N#ÊÀ‘,O30P¥\˜õØWTkÉЦ¹Vc.<ˆ®|3¡`æþãBi£š»6D{\[dÙÒ˜8ˆÞ\B@PëŸâóØ#£U¬½2”‡cþßÇ5`d—9’¢À[$š¢< ¡Z—»føwÖ„ãbeá“1æF™1­×c‰¦"È#Á®»Òè¡Ól’gŸÇ$¨é“ëHïNxñʇUØG¢uLÛ)±Iž¹2…YdUX)É› רСá{ëAl®Ãù8}øÕÓÐãÅã]‚Ç#Íìx·]è-“‰±ÏÖûlòâÌß91I ×eœ%‰ ±GAl¶&Í6cádÀ²K1’f|SÀ’*‚†Ðäõfɽ±rü;Ïn‡MzJÊe›9¼ðìÀE*†‚÷f´ÛæÇ|H°³ xøñ”x8õê=Š«ë΂ٚ_‡C¹T“K“Fc%‹%q¯é‘VHó]½Paü<1wÊù®QúòL±zd76vר˜ü]Ùì…ê…á|'>3áM–^#ŒðD8²«~"I'“Qà€­° ‰6ù°²3-¤XÕ8Ê…T6£ñIbI7füŽŽ‚÷e¥ølÏŒ©.R—/×åè‘!x…à!hU÷V|BÙ»mÃù5Å2—kfw"¹3Ìhx²Iü´!ŸtØ17)=v’Xä/wIœZ£ƒ÷£äc±¡S¡rü:u|õʤšXäš3,Y+ˆ H°¤Š²Gšè°Ãøxbî-•ó\£õä™bôÈnlí¯°0ø»³Ù Õµ|9.ÕÜ9ÊÞ” 7(OÓÈ‚K}VÄÒŽˆ-/@Ýšvýºl\™órrVI² ‡1ÅÁ@^…I¾Í’O·ŠÐ†Ýh ;žv\ØóbæÅ¡'0öÜY}˜P¦?ß@RmƒLø·ä•2}iéϾ9Pê»°(ôN…¶h‡-2ç–lßR8ú0zuéõG±Ù³ß~4!ÏÂøN,|g›,¼Gàˆ*qeVüD’O&4£À-ZØ…Ä›|ØY–Ò,jeBªQø‰$±$›³~GGA{²Òü6gÅùI댱9oDˆËâ€aô…U÷]Ø$h\ŠËðÓ´XÏž#Ô>¬‘r Îm›ˆ ˰ }TW‘JÑü¶G¦ƒqdGBÄÄ…6±‚H=«» ÙÙÐ|Nd{ kºÒC£»F!ÆàܘQ,Öy¿Y6A SÝÕ™×dÇÁYò¥ù^MŽÐƱb@¤Ùy×CÜ dœÉ¤¶X¦Äl›\‰‘ùs,ü+âÜt§¡ÆìÕ“dÝ‘ìÖa+,áL«`¶;h\f2dzÌï‹jа¡…P]“æÉ$G:‘¥ÑYpqa\h0²ý'ÃYÈІR\Ùn €=Øn…WÈÁš[8b>&6c$DTÂP( Ù=Š«ëΣåT:¯ú3ðbâîqîï*ðYG¦gv'¶#È$Š¢H>@жÄGð´Ag2K 4ØÍü®7¦Ù5d“u³al·ú½+Á:M•yš"X¼cþY±kÈÝÕÅ€U ¶áù„ Yqz£,äwü®EJÐNVwæùY÷­²¯ðã®<Å— h£•¯‹Í‚iC Udk½³¥‰Ž11bÅYÄQªósÛP«'îk½gÈÁÍ—t‡p‹2%H‘ÄÐX1RßW!Gék¯{Ы³?ð(ãÝFå €qwhÖnØQ,Öy'À“dfF—Bð¶!‡3æFqÖS Ž/G‚ &É#‘'°:°:ꬓ-”°ØdÉ äæFÓdI3)Œ‚RÄhƒß`×U«>‡G´çA·Ï‹¹¬3Í1“ÖqK"ø¡$@îÉì“ï­¶Ní³Ë¸Of6HŠh„gŒº€Õf¬Y °>Ǫ b¦Ø²Dø§>1*Á<@uÎÃ-µPuÙtËM°¼»‹f „Ù)3Bä  ßJk±WÛ ïAlŒ?‡†&àr×(ÄòL‘zg—6X“``ñY³Ù ÕÃ4Päcå.P>»ˆZ9ž»`ç :_½…³FÛµG¶M‘$sJß1 j’Wb´¡jØ›ìb€4ÆfíØÛ‡™õ?”ÜÇ3!RAjAðHþúÀß 2bàlj¸q— K,eÁ°\]Á²¾fâõÞe‹Ó!¹° Û_`jÅÝžÍ/£ü2˜Š¸2e–ˆÄÐÅÅ)•XöI³ÉºQt¡@µÎN¤Ž‘Zlémû6F<Ê3—Ö’Š9aAâh±$Û1$žÉÖí³n4XX±áÀ´‘ D³f€¡¥¢S2nÛ<»„ðæcdˆf€8Fxù¨ VjÇ`€A6ØõKEI¡±íÓb¶$Xy¦ÀYïí 3í_É´äæ«zP4xÜ¡?@b -õ[J: Ðô+v;lÍÇ9.l>´ån±ˆŒ+ðòì‘Ñ7ìZPø~o—Uù¸Ì‹–ÓýX÷"¥h'!C»óø¬ûè[caÙ=< }½²-!˜I zbÁGJ†ªÐZüô»::ç¯9·£º¶|N€Ž)1É1-}\H`>ä‚|´-ê…á|>17–2î!;̱p<¹° ÛØ˜ü]Ùì…ê‡bíûž>FTç>ó ÉTcÁ‚ªƒ|ÍŠQc«>ãÆ„+µåã®TÍŸ%@V‹Š! @`¥žû$ö ##o’-¹vÝ«+åÊF©¼•½FÀ#ûÞ³#¡MÛkmÉUAÇ—H@ ÆÈõî=XëQ:ò¾Lj,^0ˆ‰‹ãò 7AÉèbA$‚cKhžËn˜yæÅ<Ùqˆ£™]a"@G·.Dvnè ru$j(Tø/¸¦nNbq^\8J"©˜±°°ÈÚµ“TŠáíríþ“Kša€Ã¸¤‚y6~‘Øy뾄ý¶ÁÄ4Ìíe™ê¹1$“^ÖI5í ¤mÑe¢Ë‘+‘B’²H"ÁR‚G÷:+±£!Ø=<ŽQì˺mŸ49xùB)`š2ÀÍX²`cÕe::>ÆÃƒ64¸‘be”ƒ2 @L€( dö*¯¯:z!\Š<½Éseô¬«%.03(êÜ“`=hu`ìÁîƒs—ÐÚ5‡#rn‰f³ÈÑ>› (KH¦'ÑcË,θ¥Ÿ‹'“fבå}_`Pè $…¢!øf8 ˜ bI¥’' ?SG$‹ìÙ !ÐíÛ†,R4ÐúóOêK#c§é PÀŽ€ì“ÝýúÐí³vÌð•‹p»b<’I&‡dÐöhSAÉÑ`šó nˆâ§Øõ ´‚Ð'³Ö‚Ñ<Üè-÷: D+dhDÅÈF¬ê>Šº qôKE!×é<ùïJ`šn7ÈéHV+aŽ”‰hê²{Ò‘I@å~4¤{)0J+‹,ÇòÒ‘-¡‹• ýô¤PìéH­DWì¡cÖ‰"•£WZ ’[Úõ) ÁU˜ßÛT–ŠÓwöСÙï@XÐ ùÔ­Ø Žôid¯"…¯Æ”†ÂÜ ïöÒØ3Õ¥!o ³Î¯JCd[Yô¤6 ßZ£d†j²¥!°æ@jb†À³5iªë»Õ«14u)ô ÌZ‰?ž”‚¿eëº.…¢Q}ÏöÕ  áfÉЙ§ùè2!W»>Úº$D× ˆqÕWZ }xÐP-¡›l(±º­ÖˆÚª´4[€û h‚•ØÐŽ™HFº+0§ñí¬È©ÙMd¥â^V?-j$n†ëF±o·AC3ô$–‹L·Í¨\°¡Õý´´eÅÙ?5\ý¼Þ–† T!lH*ëG$Uƒæb^½A©’-3Ÿ¸fgãçC:ÍËWhšN •)Fè›ì€i†ô+â}âMžÇÞ8¦’6uit_@ôI$?2hÑÕ4a´ÌûædðÎùXí'£:ËG$—²H,¡@v o±¬ãkf­' LÍÆ-Õ±ÓÔH†RDÿ@ôé” « dU,¨>N‘D7¾ÊC6cîÁBHÈÓÌ€2âM YjÁ4i«ÀÑÇØŒ†»6&LßÄä™’,a%ΊD‚T¨°Hûê¸)*tØÍƒ*Lè2›œRÈ“ŠH\ŠQH<Ñ,/܃â¨1QZ»¦;7vÈÛ T‘£€Ìü"yXSÙ,l€@k« ïV9{ؤÝ÷LŒÂι²±K«"©/( ›%‹P°ÕxÕù6sÒ—ºgzxûŒï‘,˜‘HÞˆŒª“e¹r¨¾=¯ßG¾'F¯˜ÏÂÝ«6L•Çy–| Õv Ë?6rå•r2q½h±'¥]v¡ 9/LA#¿½3nÉ6TØ$ædz²$óFdâÂÈÊ:< ìÛ¡@s÷ ³àÜðý<¥X$˜¤‘Å·òÝ¿=ÄUïdøÐª½‹Îùá¼cCºL®^Xx!AŠ4xò±Qæû5ã¡›0šºæ°~$ÝN$¹¯(•m|ˆ™ÑB¬©\•j‰@X &íOzĺo¹Ðae™³O¦­A™,k~”À½(‡acÁ~4 ;Þç Å•,±Hw0ˆe*c2"ÕqæmTõVOë Ä‰w­êl@•â@ìªÝQõzÞ ™É’£##gƒ>9B’±OÊ i¬#ð ‹$U‚@ZaLävÓ…ÉYã 0ˆò³‹›“'ñ—LJꊸ¢– ªQ€Ğù~€5Hl}ØD)²ÛvlònÉs²&׊…—‘Pìž(I²GÖ*¼ ‚²äÌØ»–T¸såÉR,›kϲ€‹\•k² °[$›SÞ£„YÚ&8›n\3Mü Ð4YR ¿IÜ©zWÒÌ/؋ƋŽ4#±‰‘&6Þ¸óÆñIóæAÊTÆdPqmTõVOë¢ãŠrgo`Ÿ'+jŠ\Õe-¼<V*H¯Ìýõº£ œÿˆ7­Ã 6H°¥`qñ–sU!דs,H$Tm‡‘à)Yß±|o½ œŒ<Ìø73»I” ÒJ1•–#(bVŠŽWÄ‹ì}ëBú0`üIºœIs^Q*>Úù3¢…YR¹*Õ€°MÚžô.#ð¾!› ¹3§3Gñ&˜ªCÚ‹ ”k¥ ÕÄAvT’mÛò$Ê’È,«!š˜‹ €@¾ì ²ªâ®VÓƒ¹ãÏñœ2ÙraˆKs¥ò®ˆp@ªÐjÎÎ4ÑeATÉ$@ÈßpEƒûsóeÌ‹x†}ÅÜÉ''ÅôׂEÄ‚Ä×!Øè“Ùè$ Dýçϼ2—²&‚Eâ¼ce,T O$Ù#ê^jʺ·ï›¾DM3z¸ 4?@¯Uk’¨•€îÉ*{:ÏÄ£Æñ™‘C•<¦#§+ã…‰‰UR Ñ«fƒ­.ÒØ²rgÇ™räbÑd2*…/UÈ4lP¢>IÕ0û#lèp['#%ˆLxÑËêÃHìA7¡ ;¦ñ¸¤¢L<“Å1"›”1©‹êceÉ„¡v½€ŸCT¬ñL¿ãs ÞuÅ‹! _N41òeR9Y/e˜@ÕûèJdáegŹœmÒLfy~YYbôˆ J€Tr¾ ª¼zÐz2âï¿¥"žYßmiý)qJ˜åZ”ÀQ³ÐìÞƒFÝ“:ió2pŸ&i’!¤³Ãé± TA¤Ý{‘í }Þ·HöÌu3rLÂ8žf¥_rÆèPšêÈÁ#B¹·½Ã'mÛ—?ùùXlü£T&I@QÄØ K¡`)ªñ¡ªÙµ3÷“µçG©_RŽÉ&6oÄO€@¡@ù»ñ¡4Wø¦_ñ¹„ï:âÅ/§ù2©¬—²Ì êýôÍrçç'+)^1o¬|x‚Î*îÉ¥Ióà ¨èh@ýt/âÂ\±Öš?[#hÐ?Kªd€£¢;þàkä7bËÊÌÚ¢“;ˆ™KG/¢ÊÅIÝ‘ßBÓ9ÿo{Žt‘áJAÆÆIýªC¯&.XH- £l<û ˆeo[€ÞÚe-9qE,!WŠ£…‰#—"ÏÐ Ccî*èŒ-ïp›x dgòf‚E*¡ceäT“Å 6HúÅW üNyß·"ù÷—ÕVÂi£.€(‘h²¨J‚Ál’mO~úæÕ´tOGWgÌÜ3ÆV¹ò„UŽL|®‡dk\J€J,]7ß] {5|<ù“mË“•”òú®Ï:(>™'…YZ'ó:–†Ìÿn„0àmÓ˜åš).¤»‚ )ä LXõt½½)ÐÛ³;oÇÍ(Í ÉÄ{¯óÐÍ~Înf矋ºRÌfÅAè}‹q°C1îëé¬Þ†ˆÅÝ3×vŠæ˜úÙDÐ<R0¼Š2·vy$Dí ÅÞ7JD<³¾ÚÓúRâ•1Ê´ -(,-€£g¡Ù½ ¢ë»g„ÊŃ+"oI eñiÕ©ˆP hù ƒGA¢vÎ|A2gf‘ƒÖXJéé—+¶,Yª ‘ ¦tvœŒÍªŒ§¹<þš6 EtÞÄë@û9ÿo[†t‘`ÊÀãã,æ%U"EäÜË Uaäx¬ïX¾7Þ„8¸¿.wÄ_'t&ª‡RÌèÊ9qvÀp·Ýô-jÊìÛŽã—’¸Y9yçÁ2¹“!‚@@*¶ õ{ƒ\EÝèz!³wh6ü¼¨såžòÒ Vx“—âTcÐPO"À]¤_DØhÓù9;s,yY«6<Üf"2“@…=ªe6=«»±¡ guÝr1°#ŠI‹ÉŽòd64q‰ R«_ÌúT‚ÆÀ‚(uzâv±r#ËÇ.ä’ d4E‚ät!•¥Ï‹ŽÊS¸ò2ı€AS»&ÉúŠìOzTcÇÜ÷Ýâ‡"i­‘H¶ðlŠ›Ð|FÁ™¾O‹•d™cxZ14q,ÁX‚ôz û†ÀÐh׶匘3ÌÒE#G(ÈU¬ ÷Àq=AQ÷¬>Í.„orn0¼râœÇ!˜âˆ¹XâW©<Šåã»­f—a¸Ï“48Óí[´¨rdbU °?S1ä¤þÇÈð:ï½.Œ¾Œ{žóœ»ÓCÿD9QÇ$\ˆFU¦$‹äYj”Ø¿2FãØanYí¹Åù.ÂYåF‰±éP/"¬…ØQînÉZš&LÏû¸yrŸ$µ`™‚ϸ¿ÁÄWõ7E~çNÙbtö<—Ÿž<ù´‘…gÆ @#…Š$¬‘]ûjn[ª`ÂTfÄ­+úq4´MX“B€×¹X±ª»$¬çI¾gM·á®6x3db–ä‘©-( 8› bÔ,5^ ^ÆÍI¸fg ºx2ÕzõbY³5Ù>÷ìøÓMi”–yÝ%2äJ1¢b hc,Êådµ’Àt(u~úU!{4âMŸ6á‘ç#F±Fè ¡Ag±ä’iE›¯°Ëè¾ö;ÖKï!+ÜñÕ(Æž9Qb‚qÊú<|èéª"´Ìæ^FŠ(²Ê4³q&4¯‹‰$/®ÿ¾„l¾Û¸dfí‘¶[¢ä)d˜vÊÅI÷"ÿ¾¤«£KhýïYعoHþL )PS‹nE‰ *¨ÛíRTFÝ–—y·veŠ~PÅ’‘ËEâ¨Á@bjùn€5Jl}ïñ#nÊãoòn\Û$4<°¸(ÆËȨ 'ŠÙ³_P¯°h&ÅíÛöäÐM•ꬫò:sŒ@,  %A`,›µ?®ªJÃn{6nVdÙ8m¹Hx2F”Ø&¸••$Xº#ßEÙtt¶ 2§ÚÆN^SM껊}:üõHú!‰¡Ö¥¢ƒ=°'ToÔ°u-Ž©A‹ý4¬xN„]YŠÝt|h43Ø O%å}êl*ZÅé°jKÕ"èhAÿ- õ¢t h@C »(Xò²}´5ªgñ_¶ƒT í}xФ‚¢/BS'Ôü´&%±z h@*oŬÈÚ覲Rñ7?–µ5cu£e±±íÞ£èê»9ë .¬ÁH ëÆ/Œ'ˆðu4 • |aÈ2°RÀPb·Ä¢EŠa£hµeaÛ¶Øòþr%ù3 •Š©k²šRlÙÏÜéi†™8˜~­<%ÚB¼KÍ;9 X’÷B®‡Øi¡N‹6& ±d@Ê å_®ªÔ)÷ë Uâüèšl›¡¸ñA‰,#ŠFQlô t,ùè:ZE«2äm{LÐEƒ4$$1ðŒ¬¤-VÁ²ìz»­- “e²vÝ·2D’E-À±‰X%`)£÷o¶šei®ÆIµáÉ–3%WwV ¡æbªÀP!Iâ {~þuL¾‚-«o‹/çR#êY` ÅIòB“@›=€ ³÷:¦FÕ·àIêbÄá¸p^r³[¾*£¡Ð¡Ðû ‹Ÿ…‰¹â¶dEâr9(r.ˆ#±Dv†ÄIµa´#ýfPüÕŸ!Ë+x°ÄòX莉ûaö K²í³c&@BD¥P$Œ¤)A ‚AêÁ&ègP—gÁÌâg‰Ê¨ 鉘%À(SýÇåã[]‘y6¬)rÆl«#:·%Vʬ-ñ¿Î¼÷çTÈE´àÅ—ó« çlÂݸ©>HRhfÈö~ç@R‹k4Æ%^#Y%f=Ôr'ˆñСãì4-²Ñìø1$‘"Ì=R=IL…Íxú‹rwÐ5Ùû°6Ü1F"ÄÜD†NBVÈÝ· yY² » ‘ã­RMƒk˜B§×åùz&9JòüFÔ‚I÷$’oó:Ø×Û0åÈÇË’&i1C¤bT¾û${›ûèB$Úp$Íï2† aØ)`(1QÑ ‹~†…¶D[VßiωO"-ب-EˆRh]=ý΃hŒm—jÅ2¬8 ‰càÈìXpìñšUìô(~Z °‹dÛ"Ç—qÙ–R …åvb@õHªG¢,w ¶eÛ†(ðQ!7ªÁÃ’InWÊÍ‘wucÇZ ŽÅÇÇÂÇLlxøFŠW³ãÿ?úè)““1ˆ§NJX ¯©[=}ˆALKí[|™Ë¸à“~÷ ¶['fÛräI'Æ@b €l€=€lþú fÍdM·,³œÚZ4Ï+0PH$($…º=´5…6ÏS:#–xø´’LÌÀ   @ODvu$´X¶˜ŸiÂ\YDƒ›Î&nDP<½€óã­bÜÞ_Âp×aÆ$D [ùsº±$’I`A$Ù&ɽt0•>Ï·O‹ Bë DpŽ)Y®Çá"è€Eû‹ó n‹>݇$Øù2DÍ&*°ÚF%ll“Ù y6}ô&@ÛN¹£px •X5‡`¥€ 1Ph A5]ô4-Ó¶Œ³>zF€Å6ǶO‹ °ÇÂ>²”[Á4h]Ö…¶N^Ñ…šc3$ƒÑÿt"ã h‹úHö$zÐ[&M§\Á$$¿ ÄzŒ°1Px’(Q ‘Cì4 .ׄ™çr_TŠ'æ‚;¡Æê…žª6;Ðô 9{Ž;î Šß…O%eb¬¤]A$]މçXnGd•m”<8ø­úxβB ‘Å–èô{=Ÿ7wÝêü‡Ä®åƒ H¹[‹‚V» @` €ÀØÀ$ýβÛ]…L¢ãaååY”º°~\@ 1[¢@4 ô5ïÙ¬ |$ÊmÂT?&7È Qbšв'»òtR¿cý|=ŽxÕx2ñ*IJñïé’öz?-W“v>+Ecƒ |R£˜™žFbª‹MÐï¯mg?ØÆ?Fˆ³P"Í@£¥?A¦_±Es0¢ÝXA“0vP@(åHQ¤=Xðh_k'tJUc$ÚžL˜2Ü/©Œ@A ("ˆuã®ük_"\l¤¸N›„YY»rµ #SUaO@Ñ"À¾ÏßY¶ZLÙÙŠ™‡<#´¤©åfãdÄBƒC ­®ŽRì Ú0±Ì†!/)W‹»Îìü{è1$Ý€«½S!Õ… AȬGͪ€<ï—€Ÿ¼h ÿÛŽ2bˆ\*9ue™ƒ7mÈVlÙ¾ìÞ…¶? (8¢øžÉ²IòI$’O›Ð‚²öœé—#+³(év€6@``k¿¹Ð¶ÑáøŸ?üWÑÿhô}.|໪ºóÝùÐ…Û’¹N–茪×à1RG÷*?oÏ@+mÄÕ¦…\»€器@‰ OC­?Ã0Æí¢䪀‘Q°oÈ €nîÅÝ÷ 6|!òÈ&U2sfL™3VX0fëîO@}†€†Øö×Ç‹ÑdX éÊÈÀ ²MÐ&Ïdlè QC.ÊBÐX @ £BüjÝ”®fÛ7¦Ó+/§Ü~”¬M`)è‘ú5Äšc#Û°ò2L‘Ûò 9 X T$uD‚EúoAײ!ÛñáÍléK‰XQþsÑÐ+uBì  MŽôº &>?LÈRD^'Çæt(qHgº€‘Z;'h¬Ðcç1!­CFV(ÀûA$t|<ª»°Ö„6׊ÑÅŽq׆4Šñ ?I[¢H6|Ÿ7wÝê+²Ò/¶àäÊ™Ä:tÄ£`5ØÙûd¤,`á¾jæH†!I*  H°+¾†‰¶…!·à¦à2q£šÏLj&‰!I M {¿'T%BÓlÁÄ’TÅ…jDàêÖÃHg¡CòÔ·‘iQl · c—‰+2•—”ŒYø‰'ÇC¾½µbí’KZ:¡U#àŠP)@ñùko£šèÇ›¶áî «•÷®yËѼ"»-ð¥„y1ØûŸ¾JtÆѵð¾ø#]³S.¼‚“îtI£-¢ªùê†Ó,\Þ†€r†€– 8'í¡AÉ8…!9¡÷½eµÉÑËËø–X‰ȃ_Û\¥ÍGhñXÜ÷-ÄeH'Üø½Xò©33ãhèrR¤žÿ1®©¦r§,R5FìÊ^øõ^4¢,Oå ] Ç¡If, 5ý´&ÂÀ{ûyÐi"¯B-ö @h_`+Ð{'#±Ñ=jzò2À¾qÂ(¹©|¨éÄÔò¾ûñ®š9««G©Þ¨»DƒR“ZÐß: hÅÕè ÊÜ@ýt*V*V Pï鶴›7¢öÔlò0 ½Ut «<÷¢vGhbxþú¦_`¤Ÿ#A¢t h@*oŬÈÚ覲Qy?¦µ>†X«½hÅ1Y”‘ßå¨ú5Žx.ÈH€‹?}sJŽÅÄaâ,ÊC/z¤´F8¶.ñj¼ê%El± ä'¤Jû÷ãTúÅ¿—CÇzÄ f>4û°ÄŽHes!ãÛ)JÀrkÞµ¶‘Í3›¹ä¶4L_ÑœbÇ4˜ò8^E®Ô)RÄ‚ B¬ý±ãÎFÉqæ‹6l„ÈngE‡€¢®¨ 'Í‚ö(ÝôÆ95Û1TWÕýήŽlãí{±}¿ÔmÄä Ûšl‘)0H!z‰ºk²¶(^®(™21r%x²#ƒ9£ŸcÈGYI R,*ƒBü®¬×SeÉ}¥åhçÄȘÊqò bFP ªÂÀXå]uz¸«3“9ßâdœ9½YZ—‘¦xÝERý ‚A«ìÕž€¢ Š*.Ë“jŒ;Ï,¹¤Éx¡Bƒ%©QÃÕ@7dŽÁ¯§³]ë1Ú³RtèŒû;ÑXãæl¤e+%È‘…”а(1ì×Õ÷«’è»LѶ¶ÔûþÚb‰âõEõyœHã䨢lûøèÒëdöd†,9å̇ àH_ò|r8Æ;í¨ÕѱâÀ7àk;Ðû6ì2ãcC—’‚=1—2‡"6EwDùÖ”FH¾á>n<{†gˈޚ–BH°{#º¾¼ë)Êú+JŒ¹“m'áì8³ ²%…£ÇyÚ•@ \1ì-G¹ä‘Ó# Y¤+‰1Þ¦|hÆ9¿š1!ÔnÉÁ®úïYQeÙÒÊÃÅÌø‚6è„´K0Œr$¨ «ìÙÿèÕè4¬ÏN2üJ’aCΤŒjõ$^bÁòŠòu-ŠVjøk#m™Ø˜™*Ädáërb8 $’I?U‚O¿ZÙ“fù6ÛµË>íx™‘–ù(ôlמ¾ý^†7g $D›>9ñd…óXÉÊy!X‚Ub¤Ž=, ‰ÊE;^>tàã˜gUÈœt 0àà-Œ`ñlÝtt÷VÍArÈLŸáð´ ¶õ$¢ üLÜ,€iAº±¨º'³§º MÿLvÅ9#%}e‹þÐmHìƒ|@ EP&üj™]™öÒ?ÖÈa3œëþw<}_üuâ­+ÞÅþ"v¹&hÈÆÄI’ûk¼òcFÂhåðÈl’ä³W‚ š`Ý•ò—5¶8U’_HÇ7010¬Ê¡ î‹~¦‚D¤ûVÃküWmµLù£Æ‡-”†QÀ²IH,~Ä‹êÃy ÊÀÀÈøs½ ¹d/? RÖ©6iT;¿¤oB{:§/o›iåÁ¥R¸ñ…4Bc¯>ú ¶p³½CñI‚N™±Kw$‘PʽØ@=BMQ$w`è_â/$Á¿—eIS"u<»ÆKf7aGò‚ƒ]YfOi&Ù“kÌÈù†Ye}µ–uˆâQáØƒeÉ.~àPò4oeQzG·fœXãI$,Øð@aÍ,í†7VI=^¥îË‹ f4[RÂ˸ßÄ‹Z€)Cä]zk!$ î€Ö™¢c£¯ðöäøû4ÉÎ@–9Qd BŸùkQΊ žìÍñå•,бÁ˜Ã ðºpeŸÔ_6Aèt‚ZÍP"©¦Li™²ó™þ"õB…™2âh‰ï £»¨OTIàèæªÆè6üéÄuP²¬ó‰Ô wBX†cvTaA¯r:#G$•…Ñ^s®Û> Mšl&3ä¢xäÿö¬I$Ùcfˆâzû2_C£oÃûŒqäe6$IŒÞŸ¦˜ÍÉ9Ñ A ®7]u÷½G4ŸEQ´tâÝâ’qŽT«7ÜiŸÈxþ&ä÷×K³“TŽNû6Ù‰»mù™yI‹9Ìš€ON@MC²5öã@»1å”ÿY‹»Â$\øB-ÿ´1€xÿû;슪nê…Gn-Ã#+# 9MŒÖ^$qä,vz6¶†O+·Ï4y3ã9I[ldÈŽ?Ƴ ÎG~£!û€4F²ÝS"ÕnÍlHAÅ‘ácZaÍ,íò7D’OW¦E¦ ˜bÚ–&KüAˆµ¨”=tcY }кÔËe¯ÙYA¶¬,L×-†dIç(ä88‹oL¾ölx:'CÝó²ç0üÐ+’0a0É ¶‚I/¦fà ‘¢j†-ŸøÀÿ†ß¶³hל,LÁô†‰¤ÎrfŠKrŒOa]Q*'®=uurögÕ™ðç" ±ðÄ {cG‘‘¤«Ëà;k‘'³Ù¿ÎMFÊãæÛsS$Çw‡Š£\\ƒD*GÀtEö è™Z³`˶„–lXâ‹=Þ1,A±ÚÔ€ª ¾¢|ôÀ×Z¹;èb¨vFí·äíXO›cIÑ9HÀ-¤\A#Í{òtR·CIÖÝp#æ|µcÄXp$‚:ðAóß¶¶sÄáæzñA•'LèŒ$÷$‘Pʾáõ 5D‘݃¡ Û=fø”:Òι9 ‚Œ,C7v)VëÜŽˆÓVgø™¶£”qrdÃ%fm©ÆDQ]f˜‚I‘‰×(cD9‹–1WÚ@׃_€(cudßW¬¹$èµ{ edG´ª41KŠ7# žˆº($$thÝje/¡Lëü=Ÿ™Ï F‘TŒ;dñ?òÖ£›O£U³›ñ.nTÛ‰¸Drzq¿15'ñÀGÈÕɵÑVv¿Ÿžù–>·¥êp£ø.¯ÅyëS9WE¨ýœ½»4aس¼²LÒ¼Q,vÅ©˜`T@ð>Ú™?¢WìÏðæLþ»7¤@l.ŠŽC}nÀØrK’l+ÁÓ“^‚KÙ«mÝvÓ²M†cÇ’çr}Y"ƒ#åg±uV{­G)_C]™5“i,O޹ÏÊúÇ †âhšàƒWVÚ¹7è˜þËK“ú·>rã;,R.4Ù YŽÈ{ãØïÆ™;踪ìíàï.ÞŒÒ!xÁ¯âð<þÏYÏhc¦fÊ—f—âhñ 0E•ªóÎÎG%ic[í¬cÀîzêsÚFLY¾"ä¥RuÉÈYÓ¢ï,C1» ?”êÈèG^ʺ2mM(ÅÉ–+ vÇ1B~µ”t“ê12ûERšbE;nt8³c™ñýFÄå–ì€KQü$YEÑGSmÝp6ý¢\¬ƒccNQfĈˆÜú•EÐäÔh‘`›öËì_Å fâü䨩Å+›hŒŸHŽ@¢ÕwÕÐûìɽ¼™3TØpœLy%"heäIâ¼lÙ ×áî‡b>„{5nš~$Ú|½4Ê)ŽÊéăòb9]“ìGA:ìh]†3î℟/ty1çXÉt*±‡‰1?™$]¸`=Í æ\™p‰YŽÒã"(lºÌ(+9ŸQ‰×(cBÈì|3&:,ØxC¡‹áFUˆ ©í­€“dÂÀ÷öiÞþqñ’ LYeY§0²† Ù5ɇgŃ`G`hC˜Ñ˲m)œ¢,wÛÙZIÈ+qJqF‹ Äy¶ºè€5üƒy9ÎaŸFWðø_I?¬ %_âf( Òƒ~Fƒù$—åþ%“"_—’fÊŠ8!’2f”PZ3}(%‰¥£Md{ñ áñqÁòÏ(Ÿ åÍÜœÆI*®+ª%@Øã×WBz=„ çþ(n ’8Ú#8‰ÈôÅ«^ÈC$$;#X_‘Ûøš6Lì}·bÃLì–"YŒ8²2’d˜GíÕ¨Í kÙŽÑËøÙ™ÒE?'3¹¿¨3Z ¿ÄIK QÝXÒUF—g«$Q¢'Y†cnÈTXïˆ!‰5D׸:á\vήüš4»BÒs‚È’Ê$UíÝ $3èé€ {ŸiÉC/&Í{RG‹$±Ì«ê`ÈD4C†3o™%Íùk¤¥ŒLF7"Ñ.ÿd¤9QI‰qêþê,‹«ù½+ã~ÈåR££š¿ «a©WùªÆ"Ȫø_/üº×U%×g~†7ÍùT‹X† ×Ç“šÍ'*I‰»=›öÔöYt ‡‹Á•¸bcC fdÆÈ¼8 ˆ:ª–¾’b>ÌGçª?‘Goo„÷šxÄ+$Þ†R°±+jˆYñØä x5üE6É´‰›+ofxŸåäÊ`Aê ƒ`v,‚<^¢è¾Î® ™0ᬊZ5$Kø…Ó~ÏT>ÎvD»f/Å3å¢Í.4ˆÊówdÆOWF€Íù:FL$)ñ qãü»Ëëä¹ —“úd’¡ÅuD¨¢oéë« ôSblœiŸø^64ïÝS¶,á–iKýD’Iìßµ‹.Š„É]£rÆ’)Sýº#‘.AÂ/P°F4*É€¨D£f烃µM“)1±å*³bDDr_R¨¾¹1‰ ¿a‰v|Wé<¦Cc*&ï3ýß*P+ÿž9PÑv »›«úo3(qD2í¹D]u'Tz6xÝ ÖÌÿ#Vú6ÿã¸ïŽØ§#×Q2Ç^¹úH»ñ‚A@›ºÖ'øš;|›lec.Js–%ZnD°i I"º­=þB6©1±³²Ÿf‡ZÅ$Å`°cAÍÐ&ú=ü =ì{Ðh¤ËŠhdæA‘æe¶%ŸÂH÷C Á6¬mwhfuøXrH’0C¢Mr#³Ð°lHì U^ÄŽ&Pm;jæÀ"ðJú³UO¦,T7æÍ×DiL–Ãv‰0Gœœ2>F&ž¹z ›Tø‹€hü±lÚIÆßdãÇlƒ‘C‘“/¦UmßJ bhWMd{+V-v/ Fú±ÁL'œäɼ›$€à¨•}uÕÑ«*gv,rT´nÔÞ”Ëhªã<“ž^æõ0ŽwıHvFªTFì«(í»N*O#2Ï/£+©¹bªêÔÞ£NôTcøž<ƒ¸Y?Ë¡Äw “ vúcø‰( CÍXÕôVFDYë¦P$땈o"…aõ 5D×v¥hZ°Û—-¾!U'œJž]’C7v}A¯r::®ý—$gÚãÍ||‡ÅB%;s Ò.ÜJ:ˆ$ú„ó5ä5jÙ›¤6ÐàæOˆ ìÐR©(˜° ¬A €¼KhÙñ}?¶w>ôþJu… ËOÑÿtA¢=?˺>G ÕÖ«è†/‹o,f2¤¡¦—µ¾“È í¸† ›6:Y]ƒ~x‚, MÆR¹YŠF^Ë*‚Ö@ Gç¢ìsS†þ?-&SgDÈë-Í\T2•ÂÐcÙò¿4Èú $)ñ qãü»Ëëä¹ —“úd’¡ÅuD¨¢oéë«¡ŸB6è]£ŸlD­¥“'+#’4¾Ù¨Q®Fû ý¬\€² ÀáÁ!“(†NPrä9’@­qå] n††&Fˉ²HùØøù Á—1Br:âH¥P ²lʽ††~G_bD‡iÇŠ<ÄV0‘¿%5ÕfÀð/º÷ {FâÃÇ“$W¶„ h@Ð4+v*rܺ]ÁÈÓAH’†ÍìFôÙÊã&çù.¥’/Ÿr5Áµ6wü Á›š1®Sʸ¶µ”«¢8ņG­—8Æ—eíDZ­G”0±ŠÐͪY ™öùœžƒôÕ„©âÉ8®Ñº2Ölk­3™!š»öÖq`…/Ìë`”¿PØ:›UK‘z¤],4'ò9ßHcÁহc®<­bvâIÈà.ã‹}üÞ¼´ÙéÊ14fH!†8bZãÛ0òNµ&¢´b)Éìôt‹.0kÜëÕÀó¿ÌÐ Pÿa­é˜v‰ZVìZ W"§ßTŸx³ ùUx‚N†‚–í +<±cÆe‘è(ïôÖdãl+“¤`_‰¶›%r?¾¹ùxÙÓÇÈü Ï<‰(b<ëqš™™AÇfRˆ¯}kIjÈãÉ õ×Ó¨ÝôT©œ¸6|Ø÷–Óý7àëŠãjvusN޲€½“ú®úhám*‹Î¯ÏR®‰UZÐ!€/•вt h…ÝhÌ,÷êô5ŒÙRœ8F{ÐÖ%,N‘Yi3²¦nm)àa¯<§&ôwÁvÍÒeœA3r u¸Íû38¤Ž²¡ålz#­w] '½Rt‹Ð»­ €4 7âÖdmtSY(È<ŸÓZ‰Eà®´Oä/"½&¿øÔ}0…ð ƒ@ç\é FUЫŠ#À¿}P, £kΦˡªB)O*è_S;ôPË#~(ÿ-g$jÙ¦h#.2Õ –4eCg H$WŽÊÛ[mœÕ{&Vq@VòÔr•hÒŒl„›te·ˆBüê'?¢µù­ÅM.ÿ?—?¡Qû#ecĸ‘cñŽ8ÂÆ,šUYóÖµ”™‰æn¥< hýƲœ¯¢ãhIr›;CNOcí­[&(Ï™»ŒX²"rΤ¢Ç9 UšPh ~ú©È”—²_yÇÆe‹0ð‘û À Äh@ž½´W[#Iȳîxß2vøäVÈ ÈÄ; uäø±Ñîˆ:¯] Wب÷øäÍùÇq ¾š6PÔ@$5׋ó¬dþ‹ŒY+¿âJŒøìHHýCÊ&½ýKcêy<}Æ«» " Þ[,9ÇÇ$Æá] °4`€GD9Hµóo8ø0Ì,(<3I4M“@šÀê§#-"3w¬|nñ¶æÄß/”Ž™™Ô¨+Øä èö,uçY—gXi Þ6—Ã|±-$4$ç+@ q v+®ìUè‘'ø¶×òƒ4Kô4†0¾‹æ x×+z«a«H–È›zÙáÅ‹1òŽd/HÙ‰Z²Ô€’zú˜“6_'uÚ±&މÔ3€T„$MH($Ð&>4Ĺ6jôâ¾<þšb[te‡rÛ²2ÎMrC¸ˆV*@`Š4M_ÛU*ý•ÇÞ6œ„’H¦bÔfhÙþ H½ÅÏJLÑÌÞ¾+‹‰ÖùÄÊÊh °°~ÝßZãË*¤ŽÜqRMÈknŠ›jîk“|œ Q ,X]¯»MW€Okç>9 ŸyÁY±óåðx‹H˜€’h¯{ª£öÔw’|Nê2¸¤@¢ ‚>úêú9+ögmÛo4mÏ=JMPR@$µP4 ìù­VÌÓdÁ»íùEʼ…p ´"‰‹Ø÷ÐS)÷µå‰Z±Q'7fR£Ÿ¨+ÑìXëÎ…Þ&w}ºlŸL‚2œãe`H$IW]Ø«×)~gUø›¿ŒmŸ(3=o ÊcÒbÜ ¯åbа>5ÔÁ£|\È+•£‘C#ÑB;Br÷=·!q²§ ïD„…ñˆ($к¿±Ð[5ˆ‹ã ¶eÅÜprò9(̬Í…µ4G"(Að}ÛAl®>ó´å •¨“›³)QñÈ+Ñìu×¢#Þ¶¹1dÌYÈHˆs‰• ô &ÅPîÅ^º9ß|G>Ï·µ‰ %`ÀARFÁ®<’’èëÅ¾Ê â0!É|ç/:ŒEŽÎHd…€$ëΉMÃer†zF†’I~ZY{b;üûÖ]è·¶o;¾åŒ•„¥‚‚bn%¸ò®Dq&»«½z3L Ýp23N SܪX~D­ž‰‹È>kY—F—BàÞ6ì¡#E”*$æìÊTq²9@z=‹yÖJ_x›L˜ZFXØQŽü Ã\»¯[]ô?pÅÜâiðÙ™RBÎ6RyÀ?ýõª`ŒíÏmâr‡ HTœÐ«4 š,øh O¼í˜²ÇÙ`²RÀ H($Ð&öñ¡i–mÛsFL}BÁÝ·Är Z¨;«º®´!8û–^L¸¸¹ $P™TXRIö=‚}Wz1·}».)'ÇœúQZVF Bû @ :=‚F€¶~6áÌcz…}Œ‘2]€A€$QøÐ žx±ál‰Ü*F¥‰ð›þÚ4ûæ×‰\ÙGÓš?R2±±%(Ä`A$€‹Ð´ÉÉÞ6ÜY’Œ À+HXH’ 4 ãÆ‚™/ºíéš6é'©‹ãÄ‚B–ª‹ uí¡)„;¾Ù#Ìd€¸Ø+4À1H>@$ùû¯@•—ƒ’%Évž* 3à$ù4è_¶¹ÿ3·Q5âdãæc¦V,¡ÒE Œ<|k£[³œLù»–Ý‹(ÃÍ›‹8O@ñˆ° “@’7öÔ}weNÑ@ÚÀbBðàHäA!KU@$lÔk8ª¦k)]‹Ç; ¹2m°ÑrJ P` H$$:(E9v*5ø5$L|€õ°*¥lŽ@^bÇ^uŸY¥ÈÒ4GºlòmÒLf"@‰#e+`8`Šë»zÝjŒ[ÊÆÁV2¨)ú",U@×uwD}õ™-£Qzfˆwl ²Ž3ŸPr«F ÅH LE= ¯}hæÓ" ókÉI^<¢(ýGg”pïêÉz=‹ `›ÞÜøÒe X,LExY\T8 &ÅuÝõz aükoùeËY$ei Lwf .ÁP9 £v?ë ¦hÅʃ32±¥Šx øÐ‚r÷]¿ !qòò8»Ñ!k`E=ʼºàh• 0 E.ˆ=ô%2¸ûÞÙ—ê4`ˆS›³)QÂÏÖ èö,uçAL¾凸£¶$¬B:2•°°À ƒTF‚š+›¸@¹˜s‰¬+‹£DƒWùƒ¬>΂ò÷ LEÈvå!>šG;5 $Ð÷5C¯¸ÔÎé‰ ãŒ¦FUn)°’$$'Øëk£?Ȥù»|ù¿ÃZFiW¶ ŒBX$`)I« ž¾ãF“ìÒm1qdlò䜔™ -X)*h€ÄQ ù’(ýަ(¹2"ÌÙò•ÐLÊ!@ïë£FBŸñ}@Xè÷ã­1LdÐÌ%ÚóñÆN¼£$€ÝŽÁ ôhùQF+°å!­¶SÈcRÎż,“ª’#m­ŠÈßv¸qcÌ—'è™9ÆU’´ b$&Å W­™|ßoÄ•!Ÿ,rp8Ò’$I…š ñ©hSÝöõÎ’=RÀ‘dµP$Y›#ºïKB˜CºàÏ—òI;-€›b¦ˆ E=À$Š?c¦‚¿fÊMöÕÈ 9öß¹ÔuìlV^~.bl™Hø€ªY˜û$Ÿ&€=|i¡L¾6V>T “Á£‘C+46'+vÛðg\|Œž,õ@)4  I¢h@&þÇM „›¾Ü™£òjb@‰ $)j H²7]×z£vîØåœòyH¼…p "‰€@$}Mì®>ùµÎ“H\KÇ/‘Ás.+qš6úMXuçz=:{@°¾c€öˆ Ù÷Ž.ENº/™ñ a¸ÇÇ`T-5©rÒ¤Hñ[¶/nß·$h¢·cØ:Äy%'¢ÏŽ+³¹µnK”œ'p%SEuéãšj<àÒ6*Ü”º˜'ÒAm ›BZZ7í¡mY“|ZÛå%¿Ã®|«þY¾'ó<®ÛŒ²cLÅAãgô׆M3Ù95$Ž—Á,¥¥¡úvþ•<™Ëú–©‡^µÑäkH:â:ÒÑDn™' äñ¯ ö:çÉ*š‚ÊT'áì§ÌÃ$¡™OâÔâ•ﱩO¬ÞuØÁ*ê†~%×ïÊô#ìîÿ*Д]t5ñ IˆxY¯5®|ŠÑ×ÓÙÅ4 rþúó%GÈvßɘ¡À6OÛZŠm’}…Ž»êµêJ‘åoäYA¿5Cj‹è`4  ©Èγ#Q覲h¼$lûkQ#è±#ˆЭÙI…¡úný¾ú º0´~¡‹ïâõΟÑÒÐzRHÔqïÍé´[E†;Ÿ¤ãýtØ´U£˜¸cŒmEyѦßA?¶O I¿“#ûéHZ¼A½E–™›2)-ò#°§’¨îK}¿a­¶Žg6hs’H6€êÏ‘Œ±æ/+bŠI-^@6ÊO]°ï­eJFœS&Wñs—9c242Äc ’ßP†°:!¹:¹:#«–cËÛ¥ŠJ©£¨=Eò'KaÄãDÛ¾S±ø…‘b΋P^T`û&Ï‚ä™SÐÇ옓rܶÉrç7&G¦ B©0°Cd_D8­\ŒY¯jl¿Ã$¨­!eI¸6ÐO¤ Ð÷$ûêg+.®ærs@dÛçyUc—'Ó)uäòð|xÑ6û#ŒVŒ›¦Ù¼gÊb™=o[#‘£pª$Rß[v ‘ l׊Òm‘ª:r|ÓïÓÅ·É$i ‰$ªé@±B<°$¦úûUêÚ}¦žÈ’,§ÞãÍsD‘‡YyT£(PÄ‚HÈdi ­ô`Ù¾gm•XâHò&„Ó) ðRl®‚õÖ¦I›Å›ö´ÜbÅÉÌÉÛä9Ž9²»FØH¥XÒŠ OÜ“fõ{FFnƒ7/a–?c<ØÅL êx3)H{#íÐÑ$Ðen[|xß&Ñ ¤ ŽËi²Àñ$º$ŽWÕ$»»¦~F\xk·Hø`™¡t؆aKÕ“Ù=…Ùº"vX9 »$¸8sÄ[!Z|ƒ8ô¤^ Ѳ@"ˆúÕÅíÛn~&äÇ2¨È™æ‘².7F,T*i*I¡àöo¸ú(Í—'0ú8“ãâ,9CÌŠÓ7бv:ëF¬–›œ™°a<»n"Í=Th\O‹$‘ÐìÕ‹ª±z´’&[ÙÉÈÛ3Û  ,yFL‚Í–@ÊÊÌ¥[ˆ4Ô;^9lÚV&M“:øÒ4%álȧ†@à,|Bò$]–!Š}) ¹;6t9‚L˜X¬YR¼SB9cÄI²\’H„ÀY›Ñxé°ÛþܥĖ9â+!Û_Jò²AB€I ù Xšꮌµes¡ÊÛ¶ü­Ç%LHð5ÌÊÅäù Än‚ßA@$ fSP³Q‹œ© ÈÛ\0ʯžf1zÀËÀÇé’9Úï¢ÄÙ"‰N]— ÅÑÐÚ6Ͳ ±#ÉŠ4`ÌÅ“ýè/Þµ ÙVkF}ßi\œ.Tš ±I%@30<€ìH«!hQ7§Á“çÙŸ/fÇ]Ý‹D¾ÈŽHä±€•‹²O ‰¾Èà‘R›'fÚÖ Üe0cÈ•Örã‰F wdµ’@Hú:ªPOAÆmlÉ/ÙÙpAž _L3H¤Iì¡@&”÷¢KC½g‘eI}—¸¦tv|ë)Õð}U@y=€Aìôø ä±÷Õy5Cãvn–6‹+÷bÆ£O$UN,êŠ ß¾»+g/x]Ç'.<4Û¥“ƒÎÑ:añ3dì¹óo!…ž™ñȈ^D‹²Ä QB€bo³CGZ)s&ÊŸl"‘ Q Þ >­‹=Å»ó¡Ìó'`Ü£Åh²á)*aoUä\š HPv@$±4 ëuGhök‹fݤÂÉÉŠ‹"S/ªÊÌïs-Aˆß¤Ð  xÒèÃ蓱îa+ãcËûy”Åë)—ŒÆÇ‘`9žÚï¢ÄÙ"'äeÊÆl(1qÛR$ë6$rôÈáÖ>DÄ‘vA5‡ÉömBLÃn• Õõ"l ,²Eä·`•‹$uBÙÆ†=nxq¡Xöu$PÂMœ, ¬|½æ8áÈ”C<Ò••’‰~]/d[dŠQ¾‘区e—‘|M¼LÛ#å×nlh£’H½FÃÇ @P,Ÿ>@¢N²DňÝ>Ýw—ruœ½§§:^ïéX'E\rjÑÔ? ÜW å G~¸qÓ]qª¿Þ®ql¸HÏ n¼ñ#ŸÒœŸW$2HXØâ¼Æî—«õª¥³.£•+A‹,ŒQ¶¾1•žÕÉ(P !@_$K@ØÔ|°^ÍxäZ)¤ÈÂÉÏÇb³ÊÐ7)îŽX·D€ Ð[ @ð\°k²>)'ÑYvØ2°H¢™\å™cdVzâ–,@$XÑ&ÛõÖfã$j Qc¾C* ¢f‚Y& I ÉP» žKbëØŽ¼jÛ'³  ›q Èpò*Žl<îGåw©%Ti6ì|ë¸åoH¹l§V‰ãt§r;fo ³ßtìyßf,}—>=ádȉ¸Ã“4‘ÍÌqüˆP,›%É$ø@îÔn-£>û‘Å– ˆøÊ6çÆ»‚®HB€I ù Xšõ2)¿cÃÜ1>sq“ ÌòÄŸÊyW”®¡‰6 ` _AFªè£ZC›´lª˜˜¿7€OP'¨ìÖÍg¡d“þZ¦}‰øƒ'*x¥†‡E‚To”™Qí¸eˆtMwØhfËáýÓ$,]%ÀŠX*G*–¦ J¯"@Ù¡BÅɳv¬É÷>8˱>\Y;4~™âÀäý WBìÝtDN(3Fý4‡m•a“#sJK›®WG«¿"»Ðz9Ø›.ê6Év¥ŽX—øk@þ¾O4yhdJ¨¯¥èŽt.Hèl°æE,Í,SÅ ô¢ÉÈõ_¾Fù5j¿ ô/±c·L œå‰ ÉHøJ–X‹‡#° :Ÿ {]ˆrfÙ·dÛ¶ô“ÎaÃhr ‰‚–) Ij«P‚l] &†²E7‡7&‰0• Ѷß ÈáBÈœ€v² P°HT,2C²v}Âmí¤hKDÙqOÀXø… H»,B(&û H¶ÛŸî³É‹/ÈžFy$SW&¸($†ñdåüÞ‚‘ÝÐÀhÄxùrOã+ŸNRÏé‰VR’4ÆŠóÙ^ìíV‰Û§ÊÚv¼|X6Ð×9õ#!FfcDþ. CÍu«‘0Fmÿ /qÌ”ÅL<%kâú®à¬—AB€I ŽÈ–&½ d‹¦Ë»É‹•”°´yR4üÖVi$Ë– Än•I @ð!±myxÿçc÷ËÏ)¤ôài•œZäÌZ‰$r4Ä|û¹âåæ>6ðü¯¢  ‹$FêÄ©•púM‹>G]‹¡lé`¦ZaÃlæX”Lëþ&¡dt:'ò¤0ä®ã•½ªdíÒœHZ&ÒÈíšØú"û ¾Œ¸[&à›ÂÍ“ áDòG71ÇÓ~D(“d¹$?Ð:S3à|9¹Y È‹„£m|_UÜš HPÉ’ÄÐ64+èч²n9e™ïò„K1šœÊT’ä…j Cq ¾Ýhe´7=ãmÚå<Œ‘#GL2´„Ý’@è’ô°IÄ»6F÷…4ùPåE<«R!\|M­Šo’ØúM‹òGGØ»rð7'Š&† Îw¡¾lYb ¤’Yy@Ƹ›¿M.€¼ý·2Ò\ˆ¢˜rRA0ž£T ¡”­öÄ)Ñò;Ô“ØŒl±¸$’C0 <ÎÌÒ&¸($†ñdå»7¨ÝšI£FÛCîRe¶$ñ¡„“J¬KY (€(›²/ªðuÑ;IÈ1È™8RCsÈã“©°ÎÌÒO`wý¯FÕ•t;pÛ#6B¨YCºÉ`Äv…Q£çÈ×eH5g,후xX"Lf›ÓÅh² ‚–°¤)%¨ P غz©ì0ËØsåÇ\T¥°£…Š0d[ÚÈ$Ä€$uBÉѦ2]—2mÕ§ô™¡91ÍœÀTâ‘"ì±â¡@17Ù¤ŠîËaâå&ê“>4µDÎÌV$ŽCx³CËy½cuË©o˜ò/Ρi –e’OP©²| ÔjÊ´cÞpçÌÇ‹#Å=º¡Š•eDÓ£¤žúìs&2À4+å«@Yy?ž€Hè Ýè…V¢IÐ|H ’:ëB¿ÑIñà”T‘)¿ËQÅ2©É3›ñ°cáz—møJŠ­qå¨ÄëÄܤyw‡%û²kƼM6´{T’:8“ »½$gŸ¶ºE¨Dã$å"›Q‹qå&>ß}8äÔ‹È“‰ë-L£Î½ë£ÄX1Õ ¥ï !Çw 3o<Ø2$KlW­c‘75ÄêvÏ1…¹aÁ,g “%x£$Ñì”àäŽÁ¸™8ë ʇ…ø×oéá(»gê'-à¬é×¢éžrl2ÐëZ|ì\]Æ3‹;‹>VõÎIIQ¨·evݪ± ct¤êÆ8¡)dj– šÙ’ÈÔ$èf] ±uz h@VP þ~Úv-‡%àËb»ÔjÍ^èãn8)ÄÂö>ÚóÎ ÏDhÛ´áÇ !І?Õ®°Š£”äÍѨRH×t9â‹!>4-¡Ð€4ru‰vt]@Z KPûkQ#¯e‹¨jbxüõ¡°æ—\‡Ÿ ¤ÔÄ;üôPˆ~šŽý[ RbJ¯/}M2é" (5×íª-ssñöèýl²á(–e‰˜(É%A¡ùšÔÓ)\ÓoÄ`“ÌAe HˆU&b }š±ªGh^vá€&\9&<ÃHІ#¥,ltM›v/2³Q¡sG$Nä¢"fìГZç‹7hTÙxøJ2§k!KAð;&¾À¨­0Lû†ÊódIÄÀŠÌ€ƒW’H fë®Æ´¾jÉøèˆ³Ûv*˜ ª#kR4: €nˆ4}«Yw'F’QV#rÈ}¯"ñ,yoÄSd¬)–›ÔeR׋ewdõBõ%ÑcJG2,i²7—ÛãfZVbàõÉJÚî@pIñÝyºåâgeÈ‹âÜùòq1í„(¦7f ä–tH©FêÀ"‰x¥ö3B227àš\¬x•q&H‹|ÏÓlVì•!f¾ÿmWÆþÆjˆy7(£‹=g…—"OMYrn0{òÕùãÉYñÎû/’4V5ÏÑͶFL™¼ÌŒô©Ñ®Á±G A¾µWO²>DΞÔï‘, =«ÆwæÀ#­#•ì²Æ­ Èø1÷UÁ|a霅ƒÔõ~®eCXZü#’‚IX û÷<ï}7ˆS' `68UyDâKbQŠ›ZúA*ÔlßÐÖ&âìnÅP<2üÆ/Í(IÍ€V¢¦¬ôýitC6ë–›îF^2¬ØóGGÜ•™ÈUúˆÁë¢§Î±ËÆ¹cLßür´sãÅ‚LXò1çãÇ!¡ãëÔ`ª–,Z¿`×v:÷×ý:Š¤Î¯ú‡-´kÚ¾®Ü¹ÐfJ‰3r(ǵ Gö í§ßc̾†n;cmª„l¬Ê¡ÎG , µMVO×^—f<Öú3eí.Û¼§ÑŽuÆvõ;æÁHÑ a„’B8óoZšÉ¢×·G².èk-¤UFÄC;sl\`¸Óe5¾€Öcº»ö'Ú´‹´$½RàízÑŒYçr>(‹.'3bðãŒ2P$‰B.ˆ ¨©«=0ï\æ¬éàø¾<èøkóÒG¤“rVg!Wê U5ƒÑ¢§Íkk£/ âtÈÀcÇê–„ƒ=F ©büÈü– ‚|wV4ð¯±çtS¢‰3²EXðŽ\Aeäd@ Š{v;óÑÔ_Ó¤Ó²¾tÓTw›zÉ…%ƒ' DOˆÒ~JÞ¡ §—@»«ըץtyŸE2>#ùlNsãD“Œ³ŽÊù!cF®V\hø» Uéh¢7-ÊHs1r“dú|š)AU @°hz¡ØÚæÕÌÚÿ¦wƒ릚9~'pø­0w/‘8À ”DÎdú¹ Ò×j9($‘Ùª÷2NE:'âxò÷ÂluU”È!q-’P›µ¯¤j6o‰èj§`®/ÅJ³>F1AÌ Ž@ÄÇWDP ÔTÕ‘L;Õ3#<›ó>T‚\EÁ*ÇéG7%fbˆÑèÑιÊ7#¢•@ÏPx3Æ ™-)–RŹ‘øxŽ@×`޽õŸrìÒä¨ÂØ“zŃtÆžH•Áåò?¡mb\Í.T½7,8öŒ‡¹d@3—¢1(«b±#ª›Óþöióߣ­Ób¸0äµ^¯†½™òªèÁÒ$ø†LC<ަ&g{úy)[P=È >;¯ ÓÁnÛmUF˜%ÊÉFD“åBND Á°(ö½v;òhê/é×Ùâü=‡!#ÈÄ~ 4Y‘¦ú µÑ-Ǫ¦±^ßczGúuØ—;“±°bE&×óŽIã!‰c‰Ã X7… ®ÍWwTu¥ÃJŒ¾K0îBHcÀž9ãˆeD%|€ª½)#‘ò~ :sí¬>9]›\ÉF¨ïç™8èMërÓF#´ÍCp•weÛ •uœS*__Pì×w×¾»žz¶fy’|ĉñÅ4²Å ‚[bÑ’+BâÄOŽêõ™]áø˜M6IÃB#Ä9 #›‘¡Kô85Š®ü±Ô¦kÐåßÒªmÑÆ4$£,2Y X€²/£C¾ükK£/£~Ý–Ù¸«”L'‘=ãÍê'Døjãíѱª`Nç¹db̘øxk4 ’ópT¨ =Û¹6_ÄɦøøË$rAܼ]•ÍR-L:±cÈgBÓ÷êïrm c/¦á~¬º•¾€Öcº»ö'Ú´«‰¸Í>呃.E袲;8&@K êèZšîèö„‡ºædäM„ذ ¡ˆ2ˆ²¹­’Gô*½ô3¿Ï6.<¸›hy&ÇiŒo8Pª¼lr‚IaG Gv4-2s7œ¸ñ`Ü0pbšÄ~Ÿ<‚ŒÅȇ=Å÷âôÉMí%ÞŸhŒ@=2Ì™ ;œ¾”ì°¬Ø÷«­0Û·´Üw ±aºW̃)*x“éÒÝÑ¿нìéè@Ð7\ÿáñFË;I!Uõ$¢”±,ÔhR|oÔ D¾Õ›ë·Å¸$<=E<•‡jÀAý#ûiª3.ñ¿E´OÅñU£EFÌ”@f qy˜Ž¨ ïØTì2> ‡t\Å_M²!“êæT5…¯Â9(&Ūû‚vDÅ.è»{b…YU†A%±(H$¨H%Z›âzóæGÅ_âæE9‰¢g†-†SØ @úM$wA‡g\eštt‹M§nÜ2ò±%Hpá’xSèʸÚÀ$òã`v*úpuÕ*9·³N×–sàw—c’9š7¹-©¢A¡cû ‚TË{¾në´€"ÃYXÄòy8*TPè’IJ€+²|qmqdÇÌÆ*%Œ:¢A?ÈèFÌRï q‹ä×ÑL•Çy½O«›("–»Ê.îÉê…êR-¢1·§“1"“ $2Ë,PÊ%¶fŒmhPúX‚°º½R‘|Jß,ùYx>šœ#—Iy@‚XZõØïÏZ™vß2"IáÊÁEÈŠH”F“Võ*žEA쯯{ÐSÞò5…0“æNY¢3Ò ^ù$‚ ÕÙ‡z f­³5wÊñ-a”›âÀÂÇš ‹ü¯A´Ì{ÏÄ)´NQñƒÆŠ3™h€Ì@â(ò +1( ýM³«ÅGu¡-³ ï)&îÛZBHH™škë’•µÜ€à“ãÛÈ4«·ï™9¥Wä‘l_˜ÅrC¯]1ãô‘ktï¢hè¢ñ^>.VFVq§ŽC,”bÅl–*³Gßí ¦i]ÕFØ7=) 1¦,þ¢È×AU¨]ž¼;¾…èC6_ħnÆÍLÍ>!È(Óq  /@Ѷ%”BÉò4-nŽ–6DYxñe@m%Œ:«?ÈèA?2ïmlThYÒrãê*VÀÍ}C³^^úÛÔ“e¤b*Å4²Ç‚[bèH ­ ‹A>;«Ð»L…Þ3¡›&,ݱÊ≘Á‘êO*P ¯d)?·ßBÛb¿ÖfL9òŸ …â“*â!ÈúœEUÙhQ÷ДÍx™G7rKBy_xóz‰Ñ#¦¡~;ë£cX}š] Ü÷ p&\6•^UG`à ÁA7Ù6z{#D¬¥7ù¶Ü–\Up¨®Á¦âÌŠÒ-dرäwÞ´º'l^ã¼È™¦?J¡!ay}O«›("–¨¨ »²z¡©#QDcî™0mùXÁ^f)NF”ŽÈ¡V=Fò5“_ÈÏñ͵M›/¥ü¸=N0dsa`šaÄq=W¿wöÕÕ‹ÕÂËši¥Å˨¥Œ)*ŒX`hƒ@ùQßž³[²—Ë“"ÌKâ~¯ZRŠ£ït}èU{ꑺ»ÜòaÄ1pùË.;JVIx€«V‚I"@Žìj›ÆTE›‡ÏÂ0æ(ıuÄp|ýþÚŠˆú/ð¿Æ$ÚÖX©H ^`’¼¾”’"É#ßÍh- ÀÞ7>\hæ@±³(þh2 TxtI¿w¨Õ„ìè$ˆ’Ò³|•ìj”¬Y1ÆO)XØ¡ôêZ}×*]¶8äõ\… ÜTP,I4h ð}¿])Ñ}¯q‹/-Ä»*Q—µ`H#ûGöÓ®ÂveÝw£¶ep—@¥bÔT1 qy‰PN¨nˆÉß~WsL;"?\D_—eˆ¥®ÔrPMŽØu凞ìdG‘¹ ‹‚Ê]b“•’TIZèj6o‰èj”ÍÄqËê™Õ&7®1)WDP¨©«#êê5~ÈšvÝ×/"I±ã["U1 ¾ƒ~O.>Ä0"jF‰PnΖۚùø²<Þ9Z97%µ4H4,~Ôl×N‘ƒ.ñ¼¶Ô£Ó€HÞ›¹ 'ÅH bY@Ù>G¾R°lÅÈ*ò¡kI2õä#üŽ‹°!÷·‡0ÄqrSåõiƒ²‚)k±õ(»»'ª­™{è1÷¹%ËX¥Ä ²Ë m‹! ‚´(,Aøî¯AŒ²|O,x-•‘„#‰óq——$êìPâE¯]Žú=fMú,R½˜°þ0ÍQ)ÊÇŒ4l€†–”` –®€²O^ÚåÇ<™Úq¥GVMèÇ·A–©Œí<Ü“*â¾Ëñü«Ç“_ž»{8¥A†˜›¾{Œ˜ÜL‚Êù Xñ`Õƒî>úÊlÚ“Hv^d;\gJQÐVRPDŒ\ä6 …Ê…fA@ûjÆY Geß0$ÏÆôânÇu÷Ö9`æ´kŽX½˜6M—*Ï^qÄ(ð5ËŽQ–ÎÜœ‘’ÑÜÿþºõZûŽÐR,­zj‰Ð…ý^45Ò šZ ’W¿¶„ôA@RØyò¾„¶ÄɶaOr>8ÖgLŸØ¼Ÿ lf„@(ޝÛQñÅÆ¨‘ä’—gYö ÇÐpx1ÿ-yâün™ê’\ŠÑè¡q"_ /½zÓ³ÈÑxØ€@: Hk­ öˆV$øñ¡¢MßzËø{ñ¡‰vWCT€‹tý7ìvÈÃ&(¹0ñÖ¸òÆâuâ•3Ì»LéÈoq¯-bz¿-‡© eÖ[/­~‘ó„Ï ¯Üë¯[•œù$”i™(>ݯiã´0Äߟ} üŠ0$PÐÑ`¼º:º!]ôI#92¡k¡ßå©HÕ¼AcU¿¤ ûjõÐíl ~ú~È4m‡°ó¨ú ;8¸»‚6öjúYº×Oþe‡Û Vèþ`kОvè.Ø5j””,Øõ¡–‹×Õ|¾„ôN„ ÔûèZd1PöЩQR@èú1çmxyîd=ms”2Ó:)¸¡ðC4^Œ`€@ëQЉ–Ü»¥GéZÑœIR£ÁÐ;eƆC@Ð ÈÐÖdtŽŠë ¼UÝýµ¨‚“ÂÒ0âÔAýôv Ù[nLÙ>¤yeoÈX”dú6¤¹vœéãœExëS ýšÎ?@v¬âoçšôÂ_c8ý1b–rÈ\¯¹è“G7Llw]µ_å­ªÙuk'7vÛ²w#Á˜‘¤rr’)!.²ølí¡}”ÎØ†fgÍ7Ë34J’ŒŒOPP$‚¿PâO#ww×Û¸Ý @Ûþ$ùê1˜<«#úØÁœZÅ PGFŸ~‰Ø¤oâ® 8x ø#Ti£“‡ðÈÛKd>T¹, *Q”[“V{5ØTP ³Ù:”ŠšE1>‘¶S‡“)Y%‘]½@Š‘Ä5th*ƒGº=÷zÎ.ô\•S5cìòãÁé !B_‘ùx=5&€º³Ý7öÔqÉ•ID¾å—ƒ5"VB²r„½ƒ×_PßÈ>uªý™oô`ÌøN7teÏâ£@êÉÈ”Ð6&È$ƒçªîóUì×ä[+oÍŸs9ãpŒ¨cà7×Ô†ÉòH'Àð+I;EJ™\Mˆ6jJs¾ˆ¥i#OO¾LI6×D}F€øì×yÆ-•É£[ì°˜rcÊÊ$å°@Ž >ù‘~úÛINÊãìÙA²2Ææ¾¼ñ„Y#‚•hÇIøjR-¡MðìrîC:cÌȰãñ$·D³YäjüdÙªŽ6ФalEšÙÙY¨ìS€X (*îͱ$ý»êÏßYÀª[7|»G.+ªÉ]3§ Ü€A?¥j*‰'hÀ».L{l;d¹³ ˆÞ\B@WŽ‹Ï`ŽV«tT¬¤Ÿ'ðè¶ø8«Žr↠±²TX d“TGT+Y½ÙOðÒÌXÙ(‘œhà!áæÊŠIÇïɰ u­.ˆú•°Ç—º.t¾€U•$¤Æ©”unI° xÐêÁ¦m“ÃØxû‚fÁ$ËÅ%?˜‚\‚H¶¡Ø$€;$ h-–Û¶]¯1òqP†‰"i‚…,zäÇ®ÀÚy: eñ¶üœ-¹q1r—Ö²í4‘Ù¹1*òI¡}XóZ Ý™ÕùVÃ.6›ç!‹ãÜeŠ•ü<ˆ#»±w¡bW+á×m¶<¥Çc¸ç.(b9vB @¾±@uÜ}o³ Ûò"Ðmò´F*èc˜ ³Øª¾¼ëz]®¶ú.~Ï|ÖÎùÀ=WŽIT­’ËUFè H«$yªiN©˜¸7¡?æá¹È9A£9 /òk“}€ Py'³Þ³É•†6lÛ¾H°›l²Ñ¶3ÃDâʯE‰$žLiEÐM]kªèäÑuø\É·M‡‘›m"ƨñÆT(ŒòQ\‰$’I7fͪM÷¿‡f}³€È 9Éõ‹$eT¼@â@(¯ÚÍÙç7,tn Y›m‡â,(W“³~ä’I?•’}p¾VÎéqÑ\è¾$ÎÇ0KLJ!c…°£v ôzjÁ­'4e¨2Ù»^å>Zg>4@úŠÿL#™eñm~Ä{hUÕݹãD¨6jÛq·„Ý3/¿UU[¯ .‡îIþúÔý’j£L_  bäæó0›‘qe¨ÆÏ&¥€ž»×U~Î4ãdK™—’’Ë*"“<*ÝtI7llßÛ¡]ÒuÑŸyY›:SróýµÆw’£¿X»q÷NVfþÚ©røÃoÏmÑrròã*‚Õ%„ºƒ‹¦k¡öïï¬ÉãÚ6©ô9öܽÇ5dÅW9VDAñÙ'ß¾€ë­Xí|LºOäm{\‰d“q-ñôãâ {òl÷ßj§Bàsጌ¬ò Îm›ˆ ˰ } ¶ÇÄŒ¯…"‘ãùš EÆ‘Y >Ý+H$ƒÑ껸] Š9±l1®ê79}黼bn ɺ%šÉcWàI² ƒâ/áÈq¥–w\RÏ…,@‘…&ͯ"ZÍX°(P͇Ä1þH1ò†+I’•âT@/ÕšìÙ>Höh>$ÁðñÅ>W"4È\£‘ÏÐú9*GA®&‡wbÉ'È|Nvå³å£A‰–¡Ä†IÇÑc'3@C‘èY¡ÕŸ:å+ò¢—ŒÞø{ãKÈ@}TX…9"…IP~OÛV¦OË“hh·GÉÏœ’TyA^ÛPè ‘VkÍxÆUùQËñ…³Ê7ÊÛ縭*©RfvoÀ ÀžìömÉþ$j1ü‹c|+›;b4÷ÇxP(¢ˆ,I$Ù4½ôkw#-ðîIc…™-Ñ5 (Sc«$öI&ìÙìyÖ-ù¯Ž éÉðç­Š«&R†XŸ—¢Dd…â€`x…U÷]Ø$Ç-¶oÛp¾G 1½BílÒ9ɘ–c^ÖI5íãC8³&ëðòî9Ç0eÄz3©BÄÇdž&ÀRA"èÐ=Wv³_ËdÿùŸ>‡£Çå½1øîùróãªñï¡q3Áðþ.ç~;ʼKŒÌì 9š,@ìUÙ ùAN…aü9<²äH¸¥Ÿ‰ T {6¼‰k5bÀ¡@ 6è¾É.Ü“¾<Ð,óñ—ˆÂ¨ 8†³ÕöZûû л>€CÃ6Vwù†˜4 Єfx…k]öl’}Άqe#ØgÄÆÅƒ< 1±šRxŒ•¸’h° ڊUT/äS'<ÄÁ‰‰XcXÔ·v^ýkŒï$uF©ðs¥Ü Ü#̉R(ÊÚI W—ÔQúE뻽v8DZbwA¹Iè.͇ƒ[tK5’Ɖð$ÙY‘cЭ»c›2¢-7£\~ ‹3ýVÄW±[ïÔ¶hd{²Œ‰r3Ï4‘?4†” ¯ÒI$_žìƒ@ŠÒè¡ËµgÇ…‘>è"ÊɘHÙ Ž8©¥ŸTÉì“ùj˜-¼m-º"¢œuâr—HÀÓdz÷¬u 3eü2².B¤_-ðstT$‚c‹wäƒØÛBÛ4fí¹yÙq¼ù‘úL²¤K×kàäE_šíz´xË»¾áó±¤PÅòäRÄ}\ªíõØê‡{f\;ƒnYq;˜¸qƒÆ»¶¶bÆüv*ÏÜèí˜!†˜æBíÈ´’®nijö²I­lس%‹Ž$Ñ!åõzЗR(û_z÷öÐù>/·C€’À}5e2ψŽ_Ð,À@ ¡Øèjþ>G!a©ôâ#ÉãÅI7쥅{“~ÚVö*m™åËiW,,2dÇ<‘˜­‹¨Z¦¾â¶(Ÿ4Eô ƒehs#‘²Á†äš(„T៕Û_cêj‹&»‘ÓÐÍ0ÐS0îûWñh¢Q(G‚q,e”²ØSA"‹ŸV»DG¶ecâcââîe'õ2d0ƒëK:Ñü6OŸm+uøyw,Ó˜2„bH=Ô¡bRÉJDDŠåž"ß…ƒa]~zýôNŠ+7a›=Œ¯—i`H¦cdq$òŒ–ú ’{º #Z]Ù]ÛeLŒõ̘Àª$Y)qþ²ËâÚÍ×€ Pº»’èÜ{‡·åß.lûŠ?2{0ʾÊ*yñÙ²{:Å®“jÈ2¾^á»ÀbP1éJ“fÁb[¿k¯ï­>Á}·oƒnH³ÇêÍÄ1†Š‚ÏÜöI=×€£8+•‘LL¨Ã]·­qTz Ã»®ïÛÆª¦%iôbþ &À‹oLˆ]‘Xz“b 7½€£Ø ;.ÃTüxƒ$W½ß¶›LwèVfØã)¸æÔo:M*­¹¨P)®€úEŠ'Ï}õ¶R-¶q—\¡é¤ÒK©ƒ7+¶¾ÇÔhPöì×y»Ñ­#\Ÿ5àÓŸÌV£OìºIŽCå›SàÖ´•{#w£.ï„»Š§ûWNQ$|•°¢Š'«‹iv*Ñ1íù¸°÷N*³z“7¤ª ,¿ÃdžÅÖµ¾ÁMÇj‡sÎ91æpõ`ôdVŒµ¥’x›I‹ ôz®í”LÔˆ‡ä“r|¡š?™"I*$’´@è ‘VHóTÞÇh®Ó&sdÉ•ÉÏ*Çé÷Í–¾À¨<ٳٗ°Ó¡x ÅO‚sË)¢ˆ誱I³g .€Ð4»e­PÌ]›&8åÇxôç’5eŽô*“Љ$Ûnìß°Ðhëm¸’`á.+´D'H!ˆ¢ö¢ÌIüïß[}ödÝ6‡Ïš¼|¡°Í`f¬Y °±ê²}‹lwÄ‹,Çc§…‡Bü(ó^uÞ1Hã)9 U¬ýõ£7¡ŸJš¯:l8/ÛAlž€Ð…ICÙI‚𺠠v[C$5Wz:)Ç’›èk]‹\XAç骵Œ#v\¤0a­™‘ Ñ]°yxëBî‹è`45×ZU”f Ñ?¦†­dv4ëÍjZ Pp®Ï¾¨´Kè üïALV®¿¾•¢6A_H]÷ È°p~ǯê&™R¢SÏöÕ$º-¡Ð€Tß‹X—f×E5 ^>»¯}j N{º âüXøjJìÔU!"IݤÝÅ©l´Š®DŒy ºÒؤY<,äýô¶)M“ÈT~Ú[‹$²ñ¯VÈO奱H£K‘ö2—ؤ'xÜóð3 L,q(h%f‰Ÿˆ°cî螬ŠüûñªÚ2•™åø²Hy<-»O%SàÐx¿$z‰¶V’/&ùº®ñ&cFaHÕ,AX]WwUWíwÝ )ºÑTS{6M¹dF¤dØìýŽ™¿£X#•ƒñvà1bùÜE³Š$óü@dôöAêÇzJtéBÃ/ãá‡?¥·qš$¾ùTH=¨'Áꫯ>úŽU$—±Å·èêíÙ9°‰²¡Xßú÷ ÓZŒ²$£‰›âðí¸.dQdvå.Ã~Fäðd¯©Ž•½iƒnÊ“Bº$ØÀ^μ(þ’<ѪÈT |ì~—©®Ëièãeo9é¾<0JLpåÅЄ^!( Iï‘gè!±÷¤ÄD»žåÂ9KÄÙ2ÂèUBÆÊX¨ 'Šl‘õ ¯3V¨Ô‹Ø»â}Ý1dÊcê«`´ÑP]kD¨,d›SÞ´]>Æ'Ä›œ8y&l’ULM\¨ ˆÝ¸– öb,x"ïÆ±“3Š%¾!Ý× `Êõ#“çLEý52Pº¨Ä1µ_dþºdÍRGCgÝ3òvèäËÆ *–IJÕV*H®» G&™qM7߉ß&,XåŠ"$FŸ™İ@?qdŸ`?0EÉ×CRˆw?ã8lÇDqËU₀đ|‹7@)Msrud¤™·?t]Û"†F#G0¼-œUöI .ÏŸjdè¿&Ûñf oôùªc‰$,a@ˆ¯,Y‰¿ï¦M½ì~ÿe猟VX¦d˜±0"5*¤-4y ÷ øª I–1F‡\œ¼èåôøª:ÎäÑt“G@It® ×®–Žtû9_Ç#Iƒ=Œ’2¬8‡!­‰4HÈ IÉ%%²¦âS:l}ÖXäy—„ I“*‘È’^Ë0€…ûꤒÑr:ã& C—[VLeG˜æé‘„ùo'ª€Ù̪]k’¨J‚ÀY$Úžõ‰,Å×eãø‹sÆÁÈNJ©„Å•"-ˆÝ¸– ®˜‹»ñ«{™cñïÃÒÇ!Í1zÊT¡uZ®<ªžªÉýu2eø‘/Ä;츸ØË!&D•–ŠL’#q®Á|±¡t:#Ý“&0#;â­ÙÂdbÚÃ$Àª¤2’K$Tm‡ŸfLc»óù_ð™2á•÷».ésú§ÕšXÎ;ÁÅ-•*ÜA$…IÉZ¹2cXÛþø©"•šYߦËÇ„ƒ¢ª‚E(ÙèvoS&gY7ÍÙbÉÆ†\‰x4,&lp$Uf¦¥ ª$5tnµrf±€.ýº>8ÇYg,3Œ>ªB¢V^…)±f¨€HF¦LcRänÙ›|{‘ÊxæQ ¢‚òâ¡Ê€7ì5)åf­(Qèâú"XæÈæÁ@.jØ×}»û tº9µgtÏ—#zxrލâ’>*cp 1$YnOÐRç.)•I¥¢ÛVë˜7D†7/ŽÙA"qP±²ò*“Å 6HúÅWR®ˆÝö/â]ÍñeÍy=Umµò#gU ²-U‰PX-’M©ïT¦|½ërÆõfl–tSC—$j¦ä¯* µb,x"ïÆ¹É|“6ŸÄ¹ø§u\1A•$ù³ª#_P©RÊ®<¨=Wg¯}\™œ»jøƒ:lÛ/VÖF¢ÊJŸr/YsiÕqÅ™7ŠwHrÙqm}–SEúÇ#ȱ £mïí¥&ýÁ#©ür{¯”?¶±ä—ѯNtË“½z1"FÊC²Å•z ,‚MøÐ¸“—ºgcn‡”³ùÈ¡H>_èt` ·.6f>õôVuCx;Þᑽ,fRð¾LÐH¼T,l¼Š€GdñBM’>±UàQZ5` ÷Ü2ñÎï<ÅÇÍ㌔ÛP )_ ŽÍÝh1/±É—#dÉ>|™ Êc´‘¨4½1ú@¿«ñà~z Ko[šm˜Ê>b8¤ý8žVTöK# 5Õ‹ÐVÎñ½ß/ 13Ï­‘ŠY j¤É(â6(KBÀSUãYWfÝz7&Ví9Ûs,,Y|yÅÀI›É>€ýŸoñ²e—vÄÝÎϸï:Ç*Æc$ ñ‚ZÅøºöÔÙmX¬MêlÝôaùÃéð•V êX²•G‘Up¤öUØ´uŒ9ƒüÿŽŸ"Ü@A˜÷ƒSbâ`ßró°#FK!žoNãPXý,B¨6,±]ÿq~F[CviwLͺ9²åQ(fŽJªä¬T‘úN¦Êš0o۶탛$8¹&àÇYš%U¦[nE‰ìTm‡öbÇÄ27mÝw–LJ ²C•SFxª¸P“ß"ÍЩM»KYí»Ïºª|Ã<-‘,/ Œ¼Š€@²x¡&Í}B¾ÚbËñ´än»Üè5ªlS,RðPÁPÁ@€XìÚŸ:’W°Ÿ£nîYX¹2å¾]zY¬ˆ Pb * 5WŸ nÇÄ~ÎÛ¦NšiÙ•½)³¥ý$€?!b ­6F}û+vÆÈ‡,¬³G#DT—`TyX OšSGïU‘´mÛæÌÎÀƒ4¸_Z“ÚÀ5þz›.Hçågn¸Û‰Y2e 2â‰#ù¡Ñ‚Ž\«¢Ÿzè ³¦Ék ÇÎÝFéäLLÓÍ…à⪑V Bì(÷7dŠ­_M ÇÜ·ßIÔK<“6ÞÓˆ¤Æ*RE P …°ÙèvoMä-b]w Ó†TeäKé[ÕljuWjb(º›£î ÑÓä-bLS﹘ïùsLr:Æ‹#'@Ô€,¢èX<éò/Äèm²OT9.ÀŠ-"€Ö @  ƒ]_Ž´ùâs7ÝÛwÁÌxqr Á޳•Vm¹'°PQ¶Úb̶ŽÏ£—tdý«Wäjârð7Ùr¾"ù4Ü"hxH«`YJ‹>âþªáIì‹]™¢17ÜDèyg}±§ËŒWÓ•H…°lô;7­t6<ýÒxòð°2²'’#Ç+‘ÈQš˜ÊªH ÆÈ÷¯#AŠ#'z–<c/%$9† Œ‘Æf ˜(p²B€hŠo¿`1ñ6d —*sŒròve b%IôK0 Þè€F‚¶zåŽxÖhY]AVS`6>àè19ÙSfE¼Ã>äîd““â˜×„qq ± rÇDžÏ@y 12ào›„ÛÈ !x&h$N &^E@#²x¡&ÉXªð´'jÞw¼ødô&26FÜÒã1Tf ¯ÝAuÄö¦Íh1:;|óåC‘…&v\Y2—iÒj§°GTƒDwg£ùhF¨’L¹¶ñ•—–Òú¬ÏHª§Ó$ð¾ +Dõäë24º3|AŸ›ðààNRY£‘£ ªK¸*<@bIóKÑûĬ¢rwÍÅã'äŒ|”3•HÕ£RÌoÔ$»µ¢b| kÑ=Ý7Õmò ¾ÈoNtfŠ1Øé<–¯b šÑbíˆÅÞ—+z8É•‹Ó‘R.@±e*,û‹¶{…'°zβ#oÜ7L͹Ìï/ÍOˆeÄY>]q«èQLlØ?}WØ·FÍ®f™%Å•¦90æ¹"0@#¢ bˆèþv ûj4Tì¶é¸&ׄ·fÛw¥HÓ)WÔ‹€6LlÞIè Í“u¨»(rr ÝÙ·&<ʘͨ¹‚ZÅøºöÕoCyÁÞfþ¸ÐåBbá"¬AbÊËdû,÷ O`õ*vuÜ#JXª›Õ¦û^IW‹„5âÏg¶Sõ›.$PÆÀK7h–?KHX#¿ï¦7Ù£NÍ“>VٹʀŽI(EÕŠ’?R/ûêµè‘9ÛÞí›…žé… þD+7¦ëlX±#¡Jª6ÃûT—aÉô7'yÏMùÖ)AŠ,˜â•ZÁ@bH»,Ýj”ØûÂ[…¼eɼӰxybuâ¡ceäT M-›5õ ¯üK“²î{®|¡>`ÈÆ/¼TÜ(° WvmOgQªè©Øø³wÓE”ó'®‹Pˆ*YC° )€hƒG¢š–ÈÞŽ¦Ç›6^>DSJò2Z5’Hø³ ,PÓU€}kÑ…Ñ“Ï΂xp°'1É4r4aUIw@#ˆ I>iz?|¥fŸfý»+çp`Ídâf…¨?p ž‹²ò·Lü]Ôó–`Ÿ;IËÜnŒåÇ¢½} Ul̈ÆÜ·Ý£‚yg>¶DÑŠ ^E[ˆ» <’"EVƒø‰ÅÞ7Iã-<Ù ¶´þ”¸¥Lr­Š8‚ÂØ 6z›Ð¶‹Ó<&^49SÊ"hg|ZuGjb(€$>H ÑÐZ8»¾^FD³ŒÉJÁ3(•£âÌX xè}yy-Ψôñ㓲Œ‘‘v&N‹¼û޵Î5äøôtøþ]žÍyú½{UÖÏ «ÑËÜvŒ™ò½Do>l댸ÛvŽñšKfìLf‚ˆ’hy:ëâŽrjLÁ¥ÙnêºÔŸEŽÙç&˜Ù÷$ø×šéž”•䓜Ÿ¤õzïÆôyù:=UÞºœ“.¾é¡—Ù^'•¶†®‘'‰è}âÆ‚ÙRñÕÖ…V Q…ÖƒäA yÐk´Iâ•èU~Ã’ñ Gç Ý{^ú Eø/ÛC6Èà³ãBÞ‰$(³¡+tÀ5Z¬¯«ù ‰!ÁîÅ}´[* Ñ7z‘—ï I¦4§½"lW½ ¿@>†‹©±gÛC Q:†4/B­²9)ì ´€Š â¢Ý7Z+#˜p@öи­îöо´ŽÉ÷Ð[İ žGÛBMýt4HP;CÀšöë@•’ ‹†eÙЩYŸ:G\WhÖÐÖetn YÃØòw&ÜJÊÌTþ/°×ŸÉÉž‰¨á£Ð†<û¯QæjÌÙ*¿Ñ×é¬ÊÍ*±ØìåaÞªº$ÊnJ1]àÀu¬ÎñÑaMœ]‡/q—9„ÌJß`ëÏÇ)¹Qß’1Q=nFÇß^ÇÙåT2ÅÖ¡’ãBµDèAS~-fF×E5’–AÝëQsÕ™AZ'ìÇRVX½Tt_À x&õ•~Íë¨ «ßžõ@àk‚ƒúè'’’È¡ƒtoγùñÐRÄ{UÐ)ƺµ—-)–Ù¥±±åg’;d•Mž ‘_™QûkmYÊèÍ?Û<ȱ¶+,|DÌUð]Ñ6{ÕJ‹l^f pŽfçê( Uˆy£Fˆü등`¹™Âr |Ö¹¯É›þ$em˜qáÅ ÄJˆL M!«!ßžµ~$¦Èþ‡ R6293$.ì倰,IðHÕ“~ˆ¢‰Ç‰ñ±c‚‘{"ÙÙˆ©$Ö³vZHyÙL°¼y9 ë*u²Q~ZÜ`ã²Ji¢s0±²"HŽüjÊÁIÁ* vAð>Ú·Q%\Œ‹‹‰$—&-°pkÕ`¥€·DŠ‘}¶°¥ñ4ã³~.Õ·¤£68~³d#RGd)4 ³dOs®©üNm5 Û6Ü<7yâW.À)y%g t @¾èi‰$ì™ðvøöã¶×ÒàP§#e|ww^÷z³I:1¶à|„ÐŽ¨e`h A"¿>ýõ =™_áì<„Il wÁ½v°žîÏ÷:攓4Úü&FÁÊ ¹.¶ ßd}÷ÝÞ´"5l·ðÈ>qgLu» ^©âHðJÝ:¢E޾ÃQ7ÐiÆÙq1²šA ^n]ÇÌ1RO’Tš¿í­zÙ 8;^˃0› iøð[•š—ÍI¡ã¡C¡öÚÄÃr4ç`âîX…x¤¢Ê‹¢ì|€|ëD.Õ†a®%eÍYò$,­âÃXuc¢:'îu‡ÙE%Ù¶Ù±£ÄlzH—Œa$e4EH ›êÁ&êÍêcl{vFBæ´r,«Z‡ŽwÆ”Wí­®ŒÈl›V¹c6U‘[’«NåVøßç^{óªd"Úp!Ì9ñc‘)ä{v* Qbè@²'¿ÏBÛ.»~ Æ—å×Ó™œÈ„“Ë‘<¯ß»þß \N:H‘ G«^£œ‡.kÀäO šÕŸ¹ÐM‹n p)=4pÑƒå£ PâÄÚõÕgîl[dK°mr t0:ŒU+ŠwB Ð=©“BÉìÿs ¶5öÌ9r1ò䉚LPÂi•o¾Éæþú¬»V™«¸<7(`Ö‚–€ÅA¢@4 wÐЫ²"Ú°"Í9ñc•ò&ÝŠ‚Ä!n$ }ü ¯²1ö]¯Ôô±YcàèÌXïé’{=å¡m[&Ù4¸ƒ²JnBò³1 ú‰$U £Ñ(èAün£Ð`¢Bá½Væ’Kr¾Vl‹»«:У±±qñ1— © «æ‡÷òÌè¨Ë³6órˆ–HÁUaú‚=~`ktn]¶œÌ]ÂHI”Ö‚–€ÅA¢@4 ]ô5¥´e·d¦Õ„™§sQ/ªÂ‰ù‡ªî‡ªH@›óÞ¨n…ÆÇ'#Ÿ«T^YšCCº¶$Ðu¬I}‹k±»sBZV–Gå/~HP·ùtëí«kd’}£K`xöÖª‘¾Î3`î2ä1ŠG»×©]“TgÈÙråÊ,‚^=D™”•š4E‹ïOùƒàTíY¾²Êa$— Öì#Á+tH¡D‹>ÃQù:5Pc#Øò#Í}Å™èÉÙúˆ?a«„Ú&PB¢Úóaõ–,@ÓVbÃ…Ÿ¤H³Ð¡ùj_-† up6l%ÛÛlr}R ¥äfbEyHªDQ(ë¼n¶q“CFË· Q†!`¢C a+ I%¹_+7WwDkFnº v®lXñ„‰JÇÂFSÄŠ A û‚MÕ›:&NF϶åH’OŠ>€ ÅAØ{‚s©H[6Ðû ) ™’=³<³š¨í)êy™‚‚A!A$-Ðð¨¶D;F1‘£Y J¼]Þwf®ú I wbˆ¯: aÓ…;ãIJ##üÃób(^ùt| ñ©H[#ø6Úq—@ÁRBêË+ nÛ<¬Ù³vlÞ¨¶HÛ0bŠ(£€qËÆ,ôÄI³Ù6M›ìßžõѨ½œ=Ç*lÔÊ‹Âíé7v Š?­¾¸K;¤wŽ1öÙr'\ǽ@A°Ä@ Hº$¬‹è}†Ÿó1Ñ`äAs`Ç"QÈÙbE’ ¡t ®ÈžïÉÓ) ”JìÐÄ3dÆl Hø:3P¶~ /g¡CòÕS“”#‰ÕdÛ#Æ“qË$¬ †I˜‘$Š¡Tz=Š:ôhóü‰þ ¶ŒQ‰è7!7ªÁÃm¹_+6EÝÑ#ÇZÍ"ì~.66:ccÂ@UÕ~½ßù)VVÓ·æÌ³åc–d¡Ó‘È`0ö ?s¥ _ø~Ïÿùçú>—©Èþº«¯=ýõAvÆÇl•Êh­Ñ¬ô ׎ÊþÎ¥ "=›mŒH¦Z>eg%?¦Ø’g¡×z¤¤íë"F’ÿ7©ä9rÈž@ 5DUŸ¹ÐR*›Ùà¤RzhÁ£ÿh~Hj‡åj*ú 'ît(>ɵÉp,`„1JÊÀ6À‚löl›=›=èFèÓ1@‹Qªª€ªŠ*‡€ö‹¢5fàØ+šÛЬ«4Œ¥ÙrCP¡j  PÉÊ¢FØd?3@õ_ P5ûmtGÑ2ì›Síòm²ã–†Få*´É̓e‰²lÉñCÇZ= º–¸ûšÔñÌTZÔsºX>A E޽ïüõ›fñEr0°rJúØ-J«2«(6€ 0Ð ŽÏ]2c1àÇ—0fË"žHV(¦ªÂ“ı`_gï¦L`ŠÇ‰‰QÏ‹ „¤·|˜€X‚Ä)4 #²'»òtÉŒÌi(1ÁŒÊ¬ìíäÛ1$’OÜŸíàt4ÉŒ8¥11תF¡Qlš¯×²^ôÉ“—9’âa>>Ú¹1‚F´a¼+‹6ãN…‘”…ª+`‚AX'ºu¬&ìÓIŽÌÄÅÍ4ØÒHÿ,E3ÆÑ ]/ícZÉ™QD¾>4¹c6\yYÕƒ(yœª($ñ½Àüüé“.qdl‘”ØäÈ‘²«wàHûvT~ß®®L˜"ß=9ó ýµ2eÂ$ŒÙ \¿ËW&0ˆœÅ‹>?O#ÈV ¬¬U”‹ìA‰é“&Sba>>>)À>ž,‹$ dquðnû÷ów}Þ¦L¸¢Ùx˜™Ó¤ù8LÌ xf€6@``ÏÜé“ |LGÍï†ÆU`Àò`¼€ 1QÑ ‚@®údÆ(!ÃÇ0îâ), È…&$ {¿'L˜ÁkÛ¡I£Lá4F7S#Nþ•³ôŽÏB‡ì4ÉŒQC¶`Û_f…‚ƒäHÂ”Š–$C¡^®L`8Åq#ôâŽb »–fƒú±&¿+­2c”Ü1ñ·åâ3q° ;)¢(‹R U‹£BÇCS&0DÉ4Ùf>ó1C°0¢½µ2c.jæË#:ÊV*¦ªÂ“Ä$XÙûêäÉ‚+0ŘsF4)° ÈÌ !A¡ÐÀÓ&1ˆC‡wŠyJœ^G™Ù¸÷@1$€,‘DUÞ™1ŒA11à†Lx ˜ X4Ž'~lE /|º>xÓ&1‰Q‰òã qæD X˜çubÄ›%’I&ɳ«“.~!L8„h)TÐÿÏõòu2cŠËÅÄÍ™gÉÂfe¡a˜rØ …ö° ?s¦M‘E1@sÿŠCó/KŸ‚îªëÏwW¢“.¬ŠNà™¿.K*Sß@HýÀýµ-Ù¬U&<&Cr•8»¼ÎÏ]Ð I vHŠ&õrf0@˜XÑã¼1Á0°iNþ£@}wËÀÏŽ¼i“.©Áÿ$0Ü ¸a# nÛ<¬ÙwDi“¡‹8ÛŽ×òu‹Ó(/µ"ˆ»» ýïÞïL˜Â#Æd€"=\™0FUÂănKË,Œ¥Ù'‘C-A∯ßS&\1áâA˜Ùña0‘™ªÝŠ‚Ä!I M {¿'L›¢‘aá`¬­§©"Vµ['Š›ú³ÒÐØj¹61Cðví½ñ%!r¹ DåæffU&üt;ëÚµS³IÜvüMöü¨CBÀZ P `‚(¨õÑJgí¸›ŠËŒž €RFSDQ¤V<àk —ÙvÜÂ|sÒ„(²2«($…eÏDÙ×B7E·ú;è©¡-06¸Ê>ý1—Ѭ£ömqæ'§—‹@0*QÊG¸ ‚ Xèø±ï¢L–…K´E$â¶Ü†nýïJ‘.%¤Ù`ÊdËÂP$; Ø{Ø~çD˜mNÏ f •à Düư Ph:‹»èj´Âiû(›*C”s#ÂÚëù„€MYš×dOs¬Óú5h˜¾ÂTùT(Ëê±Mý"ÏÒ;= ¶µLͤÃg\tùV†U€2ä%@ð-kýˆÔVßA´—gCåñ”…²ÆØ’I$’I$’I²I$ëo£ £>nÛ‡¸*®TDñ’2š>E©ƒÕ…øÁK6$¹XùMçŒÐ ]wãÛUv6Û‹&`Í•]ÝH+ÎV(¦ªÂßh‘`_gï­™‘1협eœà®Òö9<¬ÁA  ’42DF9Ä%å*ñwyÝŸ}$;°w !6œ(a“! µÈÿ0þ£BËß.€Ï^45„ä|=¶O‹ò† Pü,I&ì’I²Iì’Mûë2…šS­ɇ·È4 ~õ¬Ç#Rålßã (Þº×dƒv¬M @Þ¿¡r(eâËj|ê5h©ÔŒ2ì8òJXGÈ×?g\Íp@1£Æ:úÚŠG7$ÇSëZ0». ‹Ð (lyòt7¦.y D[ßÛQº*B}vhšû¬Û4’,'úY‡Ï¬”¡gXƒ)7}Þ­³t²$àx/uÞ¥±HP„PÄ‹[b‘/’ÉâMƒíî5-“Æä*êÔìjÛ%2`rì{'¾ºÑ]†¨x­™n‹qxéч°o/B®ÊK`£titgy 0ý;½fÙ´‘ +9JcÙ7Z‚’,C²— E{jÛ%,Š|ø,Mà CT‚<‡½oìt¶1C± 4[v~úÚva¡ÂËtn¼ê˜ÕР,V€[eî¼ht9{Öl±Î V(í½¿MqœšTuãK³ŸfbÉë$¿‹\Sq:µjŽö<ŽqG6JÙש?‰åz•37_FOMÔÐòkÀ×)KghÅQ³$ä'0Ö‹Öàìç.Ì{Æl©‘è#”çï®|’wFáG>9³1%æ$é·sÚg]I‹™#G'²:õÇhòËN†-ÑÕ2ª‹€CC! 7âÖdmtSY)hú<µ¨yÅWê* }Î’, ÖÍAÕ(ŸêÖû6D©üÀc8÷÷ÕËÆN%#Fb;ïQô á¨VñuAjQ骿7í ,ðã%¢Roú´]ó8áæãÀûÊáÆðÊÆB¶R”-äדZÚvs2n»þn4Ìgôg‘Ë&4…T9bmB•,H ‚$ý‹HÌÈÏlÉeLÓéÅ"‹EYc“W`½Žý«¿lµF“£~>,ñÊÊæÔûë)4i´q±sgÊÇÌÌÛ·?š#!b¥ÉýET"€=/Ü\,Ê•‰‘¸bàdϺãd€Ñ$sôƒ0 ÌB€‚Aª$ت£‰²TΦÅ<Ùlù°d! ,2µ«¢@Iðª÷½lÍ#7Æ.M²XbÆ• ò<ï¨ …úA² _f¬ý QKA_³Ähß0ìaƒ×“>R9eXœ16 dšƒ_Of»Ôþ&»fI‘Wy ¼<ÆRÿ6¸€xÿá³ßä»­sÞ&ßät6c‹º˜`|Lƒ1”ÌðƱyS0&Åý4@î¾Ç[M¨˜tÙ£bÚöé2ró#ÛáH™~]Qc áIäHðm‰S×ø?=itI~Šmø8»vF÷:C¬eU(”RÜÞ?ÅZËVËF}ô ¿%]<’«•I‰RAac¢k¢@ºý5„©³nI™³}Ùq²òY!U™D*ª$ÑE4Ÿ}*VŪ½<ã댎†ÆÝ"•÷$}®ÏmÑ]Y·bAñ´ê’I/%îÉP z¾è&ôŠtFÖCq0±!ß Óãd´Ï3L`Œ !ú¹}FÍ‹VW‰Ú 0ä– v¡C¢I'­L÷EÃV:,´;hÅõ –ÜI<ÀXZ3ä]zk!° ­)¦è˃JÎÿüáØ!2JΈ¬#‘ÅŒ1kóZ?ßUº&š8¿ggæäG$xò"š2ž›-3—» ô:Ö{ª\¯.޵ES"lˆW‘ ™qÉ[ÆB†QßH¨Çª&½ÁÖàí’¦?l·ÄЪι9 ‚Œ,C1» ?”÷#¢5³ŒûHÌ8¹2a³©ÆDQYu˜PVb &F&C^@cBšþ€™rr¶ÓŠ£eŽÑƒh$$$bKÚ,YÞÆÉ\˜Áˆ~!î´š%;|Mqÿ-Ri£‡ñ›;nQbJÐG–áåJáL(­`©>X›Ìž…]ÏŽÿP|´™/#,·4qqPÊT–ƒÍWæ¡èìGŸ‹““>\¸Ü}eâGBÇdQ°=µkfrg™ÚNYÄÉ“ ‘3mN2"ˆ[¬Â‚³I212ò‹/ *m9óáÄŠÏŽí9ê¤v å…än¬’z½ H‘Ιž±Š0 À p¥d¦²“Bûâì ùËUþŸ=ãr2rJ¡‡¦ôjÜÆæÍ×GAü‰ÞNs˜FgÑ•ü>Ç’OÅëIDø™Š@4 ß‘ þG®ÐÉç0§Ä1Çòï/¯ræ‚^Oé’J‡Õ¢‰¿§®®…ô#n…Ú9ñpfÄJÚY2r±ò9#Ká]š…äo²ïÚÅȼ+ø™Ç0¡Ãc·Ȩ†EåÄÀPhl_d€4;å¿eM>Ù4 –ç!ã$€-ÉÕw×U¡b··nÃÂÚÝñDqa̼óEFÏKF¯ñIH«½ ‘ÕÄÏÆ L–‘gɇùI:’íÅAnF¨w]êR*{9¢SñEZ¤é›„žä’"ªW»¨Iª$ŽìPº#m·Äœ‡rrxú2#>;´ì ä=Hì?@^FêÉ'«Õ) <[2)xfÅþ(À1c…1Ÿ š1¬¤Ð¾ø€,‘ ;Ÿ MŠ–F(aŽ(´aˆC_šñ?ßR‘–ÑÉø´HÛ«%ª8ÆF‘»oP;}1‹üLÆ0H”wäj•tw¿ˆbüÿð¿Wùþ«Ã‰üWu^zûêl—ú9;wÊàïÍáä¼òNÓ<,6ž¶ lYãDëìuEèçm'1±2_•™¶§D-Öa\Yˆ$™ú†¼€"Æ¥"¾›íÇ>Y¢° G+Bˆ(˜JõaˆP„‘vÄê†è³mÛ0Î|<;Ë9T@ÇÉ•¿–A` QÿëBd+:H2v¼<¼ül4ŒâJ‹+˜Áo¤+Æ´IèX *ô³»µ®IÛq¾výoA=nG¾\Eßçw É¼Évy>'L|s9QL¯“;8Y•¥o¶°EW¹èUÑÕoˆù/™rrtèÈñ’Ä3°£ùaA¯r:#Q×°ºðÏ¢Ò»ä´k`‘ŸQâÀ×),Ÿ©®K°ƤŠ\<1m»ˆÃŠ) \ˆ]× ñ‰’×’ù h]ÕO¾ªè6lÌ}§bÊËÊÊCKzrćӣÆÂHrÀW°þú5dNÃM±ö¶L¹0RnèÀ>Ýñìn»G]jGì²b·7Ń" Øœi2~Z˜Y†œÓô›µbZ‰¢_ËWÑ=ŠÌ›ŸÄÅÖEY“6#$’2ªW»¨OTIàêZ«5‹†È›ôkÇi=|ƒ•42òs²¡Å ¢TI"ºêêÚìbÅmƒºd|©ÇM´®á.<¥ÖW}L@‘Ìûžûö³tf™»áŒºHò2pš£š@Ë‹©ô‡Ò±« t(È$­¦iÞòd|eÇÃäY§ô]C„¢Hˆìô,v$vŠI¢8´ÎTÐO³mPæ…ŽÛÙIˆã@PÜ}Ák®ˆÒÑ)‘»Ï—(…r˜.HÛáh$’‹zà’Uþ&n‘áA¿#KF©Ì›ŸÄÅ•Õ%LØŒ,h¼‘Pʽô€z„õD‘î¡L®b~$sD•r2qåÞ2X†cvTAA¯r:#KD§G£9ÿøËS"âÃæq’ºd®ˆ¢Ú³“ñVLGã9CÕéÑF½ †*H>HwZ¶‹‹/²gâíÛ&y¹ ÂYŒÎèI’Ù‚]­@=èº2Õ˜>-Õ£°òÈØR0¶õ±ã¿ÄÍÂÈ(î¬j…ÐfúñI «:fÄaåÛÉU ª.Âêj‰#Üè6ßYþ%äœVuÉÈ\„ÈñžD3waGò•n½Èè üLûOÍœ\™0‰YŽÔã"(.³ ˜‚I‘¨kÈ,hWÐìâ“9ñ¤ÅLV|y=3 XPò¢,,T cØ%ßA¤Ž§Âà¶$ì‘Fœ§ùeˆÚ¡|l¹rð+íbŽ„ø™~04Øñfº$ ¡¦—ðÆßM0ïÄ0P,Ù°::7án ~âårò`!SlÊ µ‘Ð"ýô7:>ø|´™/#¬·4qqPÊT–ƒÍWæ Q˜þ Ž,–yDù*heäþ™$¨q]Q*&ÅuÕÕ"v#n‚G#lTjdÉÊÇÈä-Ò»5 5ȓٛö±M\›X\÷ÉÄÅ„qñ–#  -ЫÞÀÓ¢U¢¥vM£`‰·=ºig2.3e{!MôƒVzl ¡¥¢âÑÓÙ £ÍŽnרk×°>àxÝ}êd‹‹8ÿKêîLˆê®¸Ñ¶D‰1ã¿ÄÇ€$”wäjÚ3LîÛþ{øw¬=oKÔáÄþ«ñ^}®ô´\_G+o—{hñ$ÂÈi䙦’(€–+bÔÌ ±g=¾ÇKH´ÎvÕ$ÿ)‘&œem©ÄÑÅÛ‰…ÍD’ì}C÷{ZLÊM¢ðÏ{ft˜ˆŒÏŽíŽ@E¿™ƒGè ÈÝY$õz¦©“ê¶•Œ¾<ØÿÄÚ‰P c=Mzk)4 Դf˜Ù‡7ÂÑC“ˆÒ¬r®,¹ËÙŽÈR´A¨Cc±×W¥ Óìïíù1O‹úƒÔñ–¹‹£ùýÿ=L•ÑiœÌ¹vi~%Lh<91J¯‘;8WbV–5¾ÚÁ<ùž´ »a”üHY×'!rw#ÆyÌnÂå*ƒ^äX:jÉè˶ £‡“&!+#mL2bŒ[¬£ ÎA³#P×XÔ}ô[ ømÓaƯŒdÇf‚êã°kðän»$õz.ŠnÙ³qö£#+3)4y'Ó’$<(ñ°€Yâ°ì5Øñ9Â)ó'É“”ÅAþb’jÀ$Mh_Žõ`Nõ“±Ï›®:äJ©"æ<}(ƒØ*ÄöI°èöOB޽™aWâ9eÉ0<­•pÃ"/¦QAd7Ò‚XšÓYÉ$ÉDàã`âogLL“3Ìfh#©aú‹S7#}ž4@î¾ÇSË“ôaÛ’!…;ÄÈÏü)™Æ!úƒ‹¡!ÿ‰DQóaºñ«Še¶t¾ÆÃ|Œ¡c:ýÍñ ÿŠÅŸ=÷½F¶jß1§šL|I%àLbe ©D9ÙèX6$v˜¢e#‡—2mXË_F0Y^Y¨¬mÅ)€¶*ˆÙºòVÙÄY.Ќϣ$íð´/%rõÁ6ˆ/ñ( ÐüZD·fœ”)ñ1DeI£ÌˆÂOrIU «Ý„Ô$ÕG¸:i"퓵3·Ä¡Õ•&\œ„È^½I#%ˆf7aGò•A¯r:#T‡¤2-Pa_˜Ð›J;$h6r¾-~8ØÂHãhŽH‰ÍFV ^ÈC$ÙÈÔ´Rv\ü]·dÃ7-ˆ’c<Œ¦Üa xµÙÕ&ìçüTÒ>èÈRAŒ…#Q> v潬ÙþúFž,E`žØè2,@= ”e#ôÐÚvAïòý4 Y+@ÙÐhšÓô)oÓC˜h 1ØõEdN}“ø}µEWì¡„æ…iH¤ e\ù>ÚR`ält-)æ#@·gÛJ@¨‡‹¿>tJ…Ù1Æn¿Âu Øâ€ëFdèB àh¶WØ©Q_é#¯¾…L_ˆ4ËãÆ£VjèºÃb™¼v”O——%cgS§D˜ÅŽBëÅ1%葌ªMüˆñ«H"à ï¥"Zã(h7“gJÝ„ìbªw]ê‡Ñbê=ô3LãAL£/0@ i"í<ƒ©H·ERN‚4¤‹Xëî¦(À½ÒùÕ¤ ùt"¿òÒ/\|>tJt²O]j™h¶†C@X­VJìhjïF ß 2qÿøMsä8峕"É<«=‚:× ÉÒ;=+;¸è錑áhëÒ•*<íîÎ^~&]˜¸Ùop5ÆpvuŒ•öüs !ê¨t‚£Ûнë'„Jýp=Ÿ¾§$mYxäú9a$ʘ$?—r¬WÅYè Ch¦¬zôÆèóIÜ‹žšÁ¤JÑ} †€Tß‹Y‘µÑMd¥¢·öÖ¢çøÜ¨ÍêK²ÃF+ŽNÒ%¯czʯFÆU„HQ÷'­PLÂP°­]w b$“"©$÷õjVì 1CÀ `X³ï£èÅ ‹Î`¡J½ƒA‚92(¯ÖˆÊ­g H$WŽÊÛ]?™v¡>zóãF‚g;=$Åæ~Ç‘®RËÑÒ-“.Nq°w«®Ž™H¸ÆÊ†‘§µÊp º½M}—_Fœ©ø:Ƴ05ì:ÖÜ™…VIš88K;r»}¢¤Œ™;‡ðóüC3!Äiíä}†³&Í4’6åîx R™Y]€#ùlB‚h  ›’/ûk¥Z9tÄ6ˆó¾NDþo ¶¸ò"–ªŽêî«­g}/ØØ3q2ó?‡Å(IúB RE €Iú´¨¶†ãï;t‚N2z1‡MFBwõSHèö:ë[]‡¹bç‡ùwkB¬‘²0±`À#Áª:Z&ÉÊÏňI‘%`ªK3à$ôMzø¥ûÖܱC/¨ò м>”'%f”±æ¼ê:ö en»~â ‰Š±FÄ(&b ±dÑû4 à ÷áË:™Õ ²M^O€{èƒãD¨>é…••.&>J¼P•Wü6H«ðM‚ïTžˆÃݰ7 x³!CQ²†[ ÊH…"ǸÐZ••‡ÉÉ‘Q[3uWй{èS<»®ËÅ›ê³G8.³3رJ,ž5]oưûæÞ¶è`)² IPº˜ñH‹$ ¾õù7lWH²$`$ãÆA ` ‹=v}Çß[]h´»¶ y¿ óP°_÷mÄ1µqŠ ~>ãTÈA»àOšØOr¯.¸%H D‹¢}21÷|ÈäŸä‘#ìº@ä0ì}&©üÃæ4â ±ã–oR@ tYU±¤ ˆ 8•’Hëó˜×ÜñS3'àíÅ@ŵ÷åBò£äWï¡ >÷¶Ç90]rÂ"œU’A4“]X½´E÷\Íl“ÔÌB×@$µP$@&ëºÔ}Vd¶œœ×‡ ™­®€J"‰€@$}gfÔäÊc‡ó&“"<€ÆæîêTq²9‚@z=‹yÔ\jì¯‘Õ L­ŠlYs”‘²s‰•–À q MŠ¡ÝŠ½\dÍô“ì¸PÇ”ñyLaDM̸$ã\¬Q±V'ÀÕQH97£t3cîË>4œã•AV>ÿÿ V¬ÊTrw<ˆö9„PòR&&*,жªýzå$ã´uNôÍ™v.bã<ßÏf ÇÓn<ˆä•P$wWu]w­Æ ³“nXû¶Fa†Væ9 l¸šjb(Ñ4@&µ³ h17œÜgËÆõLk>G×’H+j9t=¯Ûî42[pÅÏòÌßËn2#ÆÈÊHX`°AñÞ…Ú3î'äeãõ~Sï®s¨ìí˜÷¼¦”\“¬.IñÄnWÄ8g–YályÛky¦ŒáAÄ;dÙ*™Ô)Ȩ²@ëÉöò:óÝëYª²8; ‡Ä›%±À#’F¹®H¦kÆè!ø“fÉ/èæ Œrv ¨ ßÔ ÑìXëκg7±‘ï{\¸²fŒ’"œãe`H°8 &ÅuÝŠ½jìÊMþ7·|˜Ëž !Œ(‰‹ó‚¼k•Š6*ÀøÐl¬ÛöÕ‹l¹WËÎ6Df%@²Ô äšÞ´Ëäïn,ÉFP à¤,$I…š ñãALÙ¡ qnØ3åœ(§&AËÊ0V*@`Š$ˆÖ€ˆ7ͯ%%xòˆX£õž6Qÿ¨%èö,hZ`›ÞÜøÒe X,LExY\T8 &ÅuÝõz eâÜð¥Ä|嚢Œ76u*WÝ‚wѤûÞ݈™òI)†X½E‘1€J»4§ˆ£}׿Øè 0̳ijFIWPÊH Eø>?¾€Cî»zfºIêbÁxñ$ ¥ª"ÈÝ{h)„¾ù­Eʼºàh• 0 E/°^ú eq·½³/ÔhrÅDœÝ™JŽý`^bÇ^tÈ‹{Û$Æ“5rHˆs• 8 »C»z™'zÛ¾Pf Ï”ÆÒbÜ삼k•Š6*Àø fŒ\¨31Ó+PñÈ¡‘‡‚'/uÛð²/#‹½ÄÄr  “@’/¿±ÐSf½Ÿçñwðó0õ½#/§]„ ü»5ÿòÐ ƒ|Úò–G+éŠ?QÙÑ”pïêkבc¯:™ ½mÏ™ $•ªºy9‚Õ_Iˆ7Ñc ¦HÞp¤Å‘4®…ʘîÌ*"ˆ£cÿ-U¾ ÚW<ÓÆ9Q™ Àä•Z€°‹$Øû LÚ¬²(u`AlV„3ÿÂló¶&J™Õ94bɯ'À==ö†¢+ø® ùG 9‰€«IWÁ¸ò"–ªŽè›¯mH¥Fäé˜7Íÿ ñƒ·¼lÊüd7Òžú¿`‚=ˆï\y›‹I#§RM²v¿‰¶üœG—%8Ø€]о«Ï_o¾ŠI:švâÍ)ñÃòÇÌ1WŒ¥H4 @?mmÏŽ&cF#'⌠mÉ1 Ê8²È…ì:ŠqÊ‘§ clküQðìj¬I(ëjÁ °;&€±^÷ãZÊ7F1•Y-ñ'ÃÉ/¦ìlWa Í PûšÓ8¾†2HNoÅ{DqIòP<“'EV6>׿«Ç笹EÆÑ¥–,ωñ>73€Z‰ôÊt@è¢Gƒ¬)¼lÖrÄhÝgÂhåÎÇON[*G·ÛQòN-7Ó5„%Ofí‹)76˜M£ùk§³nÑË’>4©š·ÀÁÆõ2ºÕlæ¤Ù;4°Ï„³cÉÊ6«}ÁÒ=[e²÷]¿ !qòò8»Ñ!…lXÞ¶ÌȦù|°DQóf`TìrôW£Ø±×GøšŽ¤SuÁm·ø‡¯q 0Sdòã@U’O@døÒ*‘¹v;/=~cÉ[+L¥H A#ÁHȼÝÇoQ&Qp¤Y!f ²Jƒ@_“_嬂ÒnØ8®±dHãŸ2˜ äh[TYû‘í÷Ö×D} Ü·\%Ê\&•ý@áy,mAˆ°¥¼E ¾ÇÜjIY¸ö-·,|©RÊ’S~(™y@4HªÇ‚|ë%Õ‰‹vÁ-&8ÉLqúŽe…’—îy×Gö?mJhhÑlŠ1¦‘J”l¬,X°À#Áðu]…^‰Ë˜aB²I$ì PÄÌI¢ öó Ð¬­çoù8²ŽLœ ¯¦ŒÄ¨Ú€$bÉ /½·ŒIrÌì[‰ h@ lH½DØuì—Ü1²2[^~qš`!b Ð4Z¨ ö}ƨI»c|ÏÊ«KêSR¼L¡¨€h« ó©HRll’3v ý†”‹H´q²2?©#Ý¥ Fvd êÎïRªKMô“äÐ>ÚR%²˜yp´k‘+ɨ*ÃÁÁÔM¦R¯ºaaÉéÏáäª^ñÐ$J è@Ÿï­[%"º`¦WɶTž©5\I› T À&ÈïS½•ëD¦ï…•6õ™ù¡?á4H @$Q"Å€l{ê4&ï+»Å—#ב! ²,uõ`×Zm0©¡Ø[Î+%S; :ü»Rh¤ ðAñã½UvMðw mÊ—Ù•d(Ü£e¦E0£×뮣Ÿ±9»–Üó%*¡c@Y$Hy>‹=ëŸf„uje ‚,W`cÑOâØ+˜6ö”ú…‚þâ‹ Z¨®µÐÄ‚-Û|³…äÈ9yF ÅH DƒÑšÐÉo›^JJñå±Gê;4t  ‹âF€ )жÊm°à¿m²t h µûèkñ)3zhdaßÛBªôfMÏ‘ãéŸ5Ð×<èÛ…¢p* T=y±¦aqÐIžP)Ho45sDÁ7AÂϸÔÌ`‹>r+ñ lm踲Øù>«ñ€>ãUNÈÕµ³h ;¡ï¡¯ÈF^HÆ[(I'ØxÖ[vm+(w&„mUì5œÇŒ¸"ŽB6ü¬i™|lpF$´mâû)‡Mij»5tljæ‚€6àŠÜB߀53‚î!›€ŒÝjçcþ"«Ñ¨žúÓ&1F”v*ZÝÙ’Ý])ó¡Ÿî+&c¥ózËmJÄÉjÂ5à g2âJgrC!SgòÕÏCà£édk>53?ÙašŠóÖ®z&û(7zàÔ|õÞ¦eñþ˶qc:f<²£röÕí×3.˜%p¡O~äkJVÌ8R4ëG0Ѐ‡ñýô*ìÏŸÿc{p:ÌÞC³‹´‹ÍN'Û\!Y‰ê'  ùkÒy½3.OF¯ÀÖ%ÙÒ=ÇPcQ~úÒèÈ­Ò¾BKþf‰aY½™—çhaÑ×?Èí?Äî¨÷¯Iæzè±@MèL˜qÇNˆöN€Tß‹X—f×E5 ^/üõ¨‘ôW"8ä‘ÈâGßI.Ù…TDÆ0‚‡Š>u“¡y´b&ŒOáÐ dlF {V£t_DÙrJ³ãDì„ÊZ¨±öÑô!F@Å{#½P+vÇÝãË\Í¡–ˆ‰ùŸ<%PŽD²“ì û k$s9y¹øm´Ïšƒ×ÇXsí»eË·+u&ïêÛS4»5…ôhËÅ ¼ù`šDi‘á–#" ¡$rÖD7Ü•gZLœHã4@†è5£EÅÙÆÁÁ|¼lçmùL‰£aRªˆ(…©$žì’.Ï]«qd©!)Œ¸3cããdDÒ4ËH ÖÁB6VÁ¾@õ©”I#vÙ 3bÌ ÈYR`–¢¼Ò‚h{’}ôr‰Td+~Ç—sÁ3b4j2*ÂñY™HBˆ€H r$ƒÕ¢J“ì®÷“DÉÌ+bšHø,}I¦%…rn…Ø X=‹œhbÛ)4¿5¸ÿ ä">dSËȧT/޹ât/»®Œò&úäåLè–‡nx›†~.N(t’2h’AÉAR)$ EØûŽèv´OîŒàI‹†¾,Í/ (' XßC ×±O¼RI»a§ZC7-¿p–ŸœÎø± t‘DeÃy‚A+uТ…êé!M±ùYY-»Ã“#F#di(‘StH$&úûUêek²Öú4íñåǽÉ3aJÑÉ  ™™(Xžƒ]u~lÞ´ºFeØ¿‡v¬ü<„lœy& ‰ÚinWQ€IUó`×AEtu³HëÌÏEÒ¯a€[ò@ýÈДÑǃ1vŒ(åÁÊŽ|2 ,O$„*OlAR A¿mb]š6¬üM¾Mg|‘ÁŒOlò,ƒ]¨ö=vžÀü¼ åÚñ¶œ\i¤xbŒ,ë*¬E̯V@Á w­.ˆÞÃ'kÏ}é§Ò²¶lR2¯£ÅTYI²Þhä)°©ŸE0vMÁ7…Ÿ"&ãDÒG?1Ä#ò!T]Ù/d?Ð: XŽøwnÜvöŠ bš8¢Å /«‘ê,’ ¦AgŠ€ª_#®ºìb`HÛTŸÄ0¥šl‰„ÓC ¡Y[*rE‚/÷zŒX·,}®H²qräõ'oJ4ÉS,QŸ¹afïÃÍh ¿Â7ÆÃ’lL‡hq壯ÊôÜe*Yƒ(cKõh±°ð-³§›¬#|e˜´Deä,€`£°(fÇ@VƒG7+eÜ&ÞÚG…žÌŠx¤ÇÄ(bEÙb(¡@17ÙTÊàì¹é»¬Ù·r&’9¹Ž"7äB€ 6K’IðÝ¢ØzBp>ÜÛX2!á(Û_Jò²Xx€I ù IbhÐÑuÙ·wÃËÊHZ<™^VVi™n˜€ ÐRh< ì?î1a+âÁ,gçÌ­™L¼ f6¦,3Û]ôX›$Qêì8O·íQâÉŒ‚ì"V°˜°[÷ jüu¡Ÿ‘‹âÈòr"L|lI‰ d(Œ0&È ]ë3tÅ6È—lÊŸ9F2Î"|¨²%vhý3Ä/€-ÉHßGHKìÌðçIE8 ’Gsù5FÓ˜7m§/sÊ ’ŠÁ£Q ‘€u,Aä,Pв…zÒJ©‘ë£T›<±o4|²@¨ÊÒ+ ±Z=°$ õ~*õ¥Ç2ùcShyr²al3`(Šq >¯Dž‡b]ùÔñD¯’IœOƒw‚HgÓ‘q!#È ÈÆ‚Р$KC±­cL™Z5¦Ë»6VDp´Y24 =VVi6,ZƒPè)4€H6b÷DÿÜ"ÁWÆÇ–2sÌ­¬¦^3Ü€ælµßE®ÉE 6<ø0ñV,è±Ì³bE"ƒÆG±ò$"‚š&À &€®áðæâÑ& ¡š6Ûâ™(YÖA*Iê…él}Ɔ)œXv¼±»DTd.6<óL=fŒ« Ò…¶«bmª‡To¡ˆœ]&@ñdÅ”1ãÛ›8åx½B 8ô $öH°(’h¼{^|É—™˜¹\äh} ª mÈ7_@ìø$ô}€‹cìÛœ¸îòå,o.wÌ4y‰: Á”tT7DÑY¢L]h¼;vä~ÃÙçE¶HãÊ*@ãÃɲ@âH>X‘CÅ$»7Ï6bfA8^¤/ËÖ›ÔÒ¡c£Ù³×^4!ÉÊÙ· ÷¶•¡g…³"ž)y€‘ñ ‘vX„ (P Möh[X†Éž›ÂÍ“p‡"wŽncäB€ 6K’IðßGAk? n‹.>L<%kâú®à¬—AB€I ŽÈ–&½ ’.›.ï&.VRÂÑåHÐ?óYY¤’7.ZƒºU&€P Àd€l[ŒXK&.<±ŸŸ2´Be2ð1˜Øò,3Û]ôZì‘D2GW`ÓoÚãÅ’ íéa1`·ï@×öгñ͸n²¡i!ÈÆXþ— @ÍLÖA $ Údn{l°ÅÚ Éå3Ã…ã) A½K>Tv?p|hCvÙˆØ;tLüŒ0¬eª®€ùhfl¥Ìæ4ÑmÒ¼Iˆó@b”h°$&ú¿zvcM¯(nÑÒd&<Í/óš2¬_—KÆÚ­‰¶¢To¬Ë£K£4{á42À=hÑ6çÅrž2I5Gùw@É$ßVgĦ­pÄùÍÆL73Ëÿ*I”²(bM‚B‚X(ÐQ­.ˆú5úY{FÄ#ÅÇY uæÔv6Íg¡d“_ÛGÖÉüŠåcÏŸ‚0aO¢iBä7 *?,>æÀã×c•ûk0èé.Ä|A´îYS Ì\˜ÏHÞJ"³yÝEY ¢oZu‰…y]³3#,.:α6dsÊìÉéž tlIâ°¾î…KL^í°enߦT¸2 xÕG¨ÌœI‰4èØ«¿`;Ö'ƦѨOÅäl9ÒîeãmRDNpt¦jƒ ‘t+É­Iñ]QaÉWf|oƒw£˜ÍŽb,ã•Ã05Ùñ]Ýßå¬KÊ'Hó(ÈÓ›ðÎt ‘$“5qMÔ0üÁ$×ßQpÍ;°ùbÕc´îâH0âÁ´aņ[lOV(YÝÕêUÊ…´­)~Í àB’³Ë#ʬž˜¢{6yXô»¯#´aG)M6F?»¦b\gR²ó4£ƒ(Úò$’:ð;îõˆpÊ1£säRvL_ fäî¦i°ÚÉnn]xž¨q“æ`u~äiᵱ妨±ÆÜ[tnÝ!>„`ˆÝ}ÿ]siÚ‹èÚ”qmvt6½§uÛ2¥1²´R5ÑòºqÃ’ØÄåÇ?îhø3+ô3ruŒÓ(Êx’@›¢H¯"È÷}¡[$yÛnÑ·‡åD¨%A1$Ùü\A‡ŸmDì²í ø‡fÜ7 ÙP´äc,K… f¦k ’È(^Œ&ƒ+eÜ'ßW…žËŠx¤GÄ(bEÙb(¡@17Ù¡mP`ì™é¼,Ù07r'xææ8ð~D(“d¹$?ôt%¬D`ü5º6,¸ù0ð”m¯‹ê»‚²] $( ; Xšô.Hv.јÐåeåâä,²˜Z–HÌ$lX¸¶*“ÐZûhFÑÐØ°ó1¢žlÎAò2Z^.ÊYEñêéAêÀº³W }™þ#Û³r²`Ÿ§‰b’)ᗠĀI %@5fQÐ.Í8i·Åµ®(•Dâ@eT@=› ޼h4dÍÚ³'Üøã.BÄùqdLìÑúgˆ_[“ô] ³uÑÙm9cu‰‚θØóÍ/óš2¬\0¥ lE¹6ÕCª7Ð.Åbl™2,äG”1ãÛ›8åx½B ‡@€ Y=š°(“)¡{fé;Í4Ë?9š¨Ï“Š5’ ž*Mšï¢±t#üú7ãbnmYQcã¼sO;}WRè‡& Jö@ž!GkvcLÕ—µA6×ü.%â‹HëØÐÿ-bqÊ4nÆV-Ÿð¦û4ÃEÍ a9«¨š&Í@Hö¡®q„ÔRú:JQm¿±²|'º¶á$‹®Äž ¢ÀÇŸßr|³¢ç]z*~Ýw,æg‚Lxv%¥MÚ‹5d“à:Ûã”×ÈÊ䌊áü1»z|s0lÇ ]œ]Šâ4]Ybkη(¶¨Ìd¢ÉO‡·£±6ß.sW #)'꾩t;…Ÿ>ú(Wc5GKáíŸwÚ¶ ˆc22$>˜fÆ /"l‚@¨~<ëPRJ™‰´Þ›´Ðaãí[V ^<.¼Ñ*òaÙñwÐù އ?‰¢ “,šˆ€šú|uÑ#¯5Š©?ˆŒ¸eoh¹l§V…ÑÒÈíšØ[èl÷Ý­œ«VeÃÙ7ÝÖ\˜›„9IÜÇÈ…P <‰{$ø@@èl¦Í³îl'Í€‡‡ÂÎ\- i@_z$±4;Ô}© Ûñ²çÙæÇ›oɆW­ˆ±þiqVÄX¡`Ðû^‹¡1˜Ñn»vVXÄlŒ‰ò ‹ʪÔx¨€âèXö³äÉ»âO>cE‡“!‘rÆ™P©ªY‡FþÇÇcQvgãn9|8QáHÒª§ó"•VÀŽ™KTWŠ6 ülÏò¸`få²~^FVËŠUnkéqUÚÝ–èÑÈS}k2kÙ¨ì–3ɼ.RãO(uv–E+DP* ’  u`özÅ£I;*ÛnnV&|ÜÈ–dd‰‚8JµIü¹QñªWÑmª#–i$ŽtW…9+HH Ÿ§Á›²Ç«Ôn‚TjÎw›GD†ûHªÀy»,>ÕѾõ¦ìŽ‘°saÚ±ŠÃ‘ó ‘ÿ)Ò‚±-ïв ö ¢[%19Û&L8‰‡ ³“&$pI"”ÒØ² -Ð$ÐØ<ŒÚ4×Ñ«/ywÌÀƒ" fVÈ”Î=9(qälHì]õ«ª'òäo1å$ÇWidR¤ª‚H$€lÕßgFÓ.ìÞ¸í ó,E]¶¢H'er'Y˜4r2õT=õO¢¤×f ç/"(›iXÇ7'T 1R¬§‰$i¼’+Ï«LXÌ(²öÝŸ BIÈþb,€zHÌÌ{>x‚>Úi™¾$Û2³³aÚ)ñ–:V+‚ßSY€6@ñBõl˜„»>aÞÉufŒäÇdY;4~™*Àäý Q¡vnº;2Ú6¬¿âÑ\„ÆÇžiœÑ•bá…([j¶&Ú¨uFúМM&@ðäÇ”1ãÛŸ(åx½FÃÇ¡A@²{$XI eãÚ· Ó//-2¹Èaô4^¨1· Þxy> ö=÷@A¸˜™ø˜Y ‘•$™yFB‘J‹$k@Ã(ð£ M]wDè {$8›TÙIÅÕH+`‘Ù«#¢ÕVGDÙhWÙ·B€4WÞ…Ñ?¦„ h@­`X>þÚ dÊ©²’+ÛQºD‚¶c‘‹"+¿Æ_£¦ì—ÈÔ?¥çì4Ëô0`2"SF2~Ýu¦_¢bËK‘cˆˆ“æ«L¿C26`Ëó)&1c"‘]Ê"U{ëI¢;öjæºÑн‡!u¡’¬{:JŒ“f «BHí®nHÚLˆ²¢rn¡öÓ/ÐqkÙ ’Œ¥„V/í«’ú./ì"ˆV¥„ù£Ö¦_¢8µì™r`ˆc=v:ÒÿB¿d,°%È"=÷ØÓ/ÑpaóЯÔаöèjdþ‰‹-ó1•åéb5n#;s4„Žýõ´ÓZ2ô<Ù}µL{(ñ¡4ÃÛ­ .ŒæXD¾Ÿ¥×¹­a»6­„scðn1q¥±‹s ýýºÔËô\VÜtaïòÓ2(—L„nL!ª®ëήIú./쑘Œ¼Œýõ3&%[2Dnè}:¹/¢âþÍp„4Á±­.ŽmPÝS   ,hUÙI"Y#(í`Š:YT±Ó‰#Qȵ•>FÍH €A¢ : ø#QÀ)•ܧcÀ9BguV)jå@“ß°Oå]’Ò‰‰Ý3âÃÈ‘NÞ’GËí%V$ZŠ<ˆ Ij²uqC&D»†<;¯È.ßQ2ÄÄKüËeä%v£Üتc]Š3r/‰¾·‘¨É"²Û©CD²×Ò±³v½ ´…ÙXþ!â2—?1òÐ[åò=N…Ú› M׃ѿ=ô í{„[”™ÓaF’ã8±ÉÍMcBÈ ‚+¢ÔÅØÍ×!¶Ì 3¡À2˜Ô–Ep  $“íBºÙ}Ÿ‰r¾Ên2Ç‚°ÉÝꬒ¢»†GÉ‚‚o²mº{#LWt\Õ‘ºæ6‘óĆH™•EäT„–…Rj°OÔÐMŠ“r‚ ÓänŒ…™b5/ó-—`•Úsb©ttÅPÉLÌØ÷TÛeÛâ "»‰#È$ª©•*(›>ýšÕ¤ˆWhß_uŸÒ8È¡¡«$ÜÊ‚Hââ‡ü¬ø=ôuIHÛ•$ÐÂÒCŒfq\cV’OÜÐßôþ4)„îòˇ‰•"™3ðå -¡cl4#¡Ù¯Ä»gø&$YãÆD²ÍTÆi”57uÐlV”Àóñk ÇbIæ§0äH ªA,Ýоõ¥Ñ±“orCœÐœ@`L¤ÇyL¿PvPE-x¶QwvOT/TÍ1‹»Ç&ðv¨á$,NÍ=ôJÚ]ÐpIð.¼ÝjÌÛ_ÄßÄfx>L†ùa<*’ògSà+QSVE0ïALjïR¤ç¾ Y=s ÁêùSÓ·ëDš4/΂˜¬oˆÛ;wËxÈŽÕKr Ä’¥@ î4ÊÏñLqcãH#…$Èrù¬¡!B‡*6y;úALì)°?1÷Ї++â4ÇÜ×ñǦrSÕú¹• akµ”OE€¯¸©YEø>áò'*¿ª!RؘÉ•é«Q³|OCQÚ4·F,_Šs2YeE@˜‡$nD ߀Šš³Óõ„¤t¸Œ~ÜÙr¡C6<±ÆcIœ…Qʇ†°zèƒæµjD¸QüG6ž/H·®Ñe0UKäGáâ,ìV•+^×™¹n˜ç¡UÁúXQR ЊþÚTÇü³>ù6ë"H!(î \ÔìKx­}DXêìÞ£ŒÚ*pLqÝ1¥ùs £ÈLv“Ôì;E ñõ(»¾üPÑ)$FàÙ8ûÆé‘¸Œ‘Ùy•픡¢Y@úAö7ݸҤTàLž÷$Óâ˜`2Åb"œ0²HâÆ‡׸ÿ¡ÑÆMÝ’ÿDáî™óK6<ÍrDÀ79)°£C¿¸ ױɚ×Ðù³7s„£+5öÔ¶I`È}Å‘®Ëöq£õ—$œs$²ÊŠxŸ÷jYW‘?‘`òIûFZMNŒÇxÌÛ³ƒžè¸-Œ8…ƒÔõ~®eCXZü#’‚IX û‹L1þ$YwUÛÛ*ÊÒ¬2 -‰BA, } •j6o‰èh+V/âÈfI‘ˆPG‡óHNe’®ˆ ¨©«=0ïAL´?³Ã’’a¯ÌcË~”sòVg!Wê¡á‰£EOšÐS"/Š|“ŽÍе«3Åñ+|³åeàújpŽ\%ä] qak×c¿=h)ÇÜsçiñNC*Óù‚Q•®.6<0ªò>Æô!\MÏuÎÃùˆvÈyüç–xñRA`ÜlÙ:ñÝè_ˆ‰~)Ž<\I„1FùHÎ>k$FНê£vHªEž€ÐS; lÌ}ô!ŒçÌ7¶6 *4Lë;8¦*Tf¾¡Ù®ÁëßB®ÌɽI6ZÇ& He–XáKl] ¡@ñb'ÇuzÌ-!0üD¾ƒdæbzhpŽL\$äZ07`S YùèêS(Gñ? l©&ƉeÅš4‘NGÑõ°[/Ç  7×EHÕHhèâeݼd–„ó'¸&õÑ#¦¡~;ë£cÛUôOäbÎÞ_g„zx«+ÞB¯/ÅJŽX–PvO‘ï˜tn]†gÄbi±q„.4sÍ#IĬnM(ÙA#Ú¬iôD¾V* ý`ÌùA}uŒŸ[ù–Ëa‚Wj=ÍŠ¢k­H»E–Ù·v3îáKŠÑ,*¬’4€ú€–Bè}=Yº=ãWD©öï‰Æá+c&*#œq<Ï|”ø @úZŠ’Ða¦‰±ûní.d¹eâÇ‚@£Ÿ˜bTV Š°<}þÚZ-Hf~{ãÀ%€@ßU1žsG» }èU{ùÒÑ*F&ß=H ÈÂÛU¥›¦hÞ` â(0K =;±¦Š_Á ñàIàI­åâì¬hZ<˜{‹@¾ônÑ1IÈÞ›q á…£–@¨Ë‘r~yãàA Ÿ½yªPMÞq¸¦Vh’ó1Iü)°¡V6 Ð=‘©h´ÍŒøÒ5¹Sö?m4ÉsDŒˆ'zZ#Lɼn±àã©@ŽÒ9U')bI£@'ß¿ÜM2«]‡Ã¹Ñî;bfÆ…yƒj|‚ Ђ4Тɶ/yøv‰Ê68xãTiœËDbG‘Yˆ±@_飚V?.>è¸-Œ8…ƒÔõ~®eCXZü#’‚IX û…0Çø‘eÝWol`«+J°È$¶% ²ô‚U¨Ù¾'¡ ­X¼O‹!˜M&F!AÍ I9–Jº"€V¢¦¬ôý1Û~õ“Ÿó8ñaÄ2±CGó$¡P[°C(ÑR/ßAL~Ñ6åŠr'ÆXˆ™Ð—˜`¬ThtH5׎ýô ­ó{m KdcÈCËÀqR¢¢KÊ®Éò=ÅJ͘ÙeãÅ•´–0èj¬ÿ#¡ SorCœÐœ@`L¤ÇyL¿PvPE-x¶QwvOT/BÓ }ñæËH¥Ä ²Ë2‰m‹! ÚРx±㺽1Xÿ»Àr2p †Â9X뼋 ¢A)»^»ôzЭÛâ•ýcH’"'£“Î72ëâ*‰(Ð ÷cXkäoÑ¡þ#1ãøÑ‰ÆCBèÓÔjB—,^¿wWf¨w[3Ó5í{¤;®ßr!OQM£Áº þ„ýµ- fMßâHö©ÊC¤j3™(€Ì@â(ò4¬H±@_~Ô§Hú¤iˆÅø·U™ò1¸ðþj0’-]@+QSVzaÞ¦‹±Ø;äùË“$#'Ô2|ÁàAÌìÀŠè©異“‹ºîY¸1Ý?]ã¦Ê!J© · ¶lŽº÷»ÒÑb&øR I’(åDîNVXT©^ CÊÁ`^–…#s2¶â§•ž¶§ò7ü@çÊ7q¶6 hYÖb☩[vkêšìh昘7¹$ÊH¥Ä ²Ë2 m‹! ‚´(},AøW¡=”ÄÞß5xäb¬"lQ< %åqؾ]$ZØìw磬ˣkò §y†| ó'CXòɬ–^ Á¨ Póãß­"$íÛóŸqÅRc4,]Õ¢f©W*A#«ëÛ÷>t¼o µðTŠ6,Ž×4þšÒ€H“vxßZ‰X+•ñÅ(ÃC¬²IÂJf®*´K0>EŽÈgZ]Ù9»¶GÎ}(òV”Ëõ`¤R×bÙEÝÙ=P½$‹“¸¾á›6$_/Q;)S „©¢Jл¢MÕïYÅšÉ;¦Tm”™8ñ•Óa'‹µ=®…w÷èéL6™m³+'qiP¤_Ë*yÃ/¨ŒX¦¡d"ºq¨âýI2þ{4I9§ôÔû&½ ¯}i&e´e¶l¸I„®óã´ü$˜-*ñˆK =;±©‹J‰Éø†(ÄL˜i*< 7×'ec@"ÑäÃÜXòÙÕH—ôhÈÏ—q‹LXLSH8ä\Ÿ„žE My¯5tJý’™“®â¸Y{j"ÊÂé7"B‘Û"ú$höF”‹¿³iOøA¯¾©÷B Ë}«R·öeÝr¢Ûc’Ù¤ªó“‚€±,ÔhR|oÔ)¶[j˃uۢώ¢E6å?¡mT•·f]ç|ÇÚ²xˈ®‘ªœÉDbG‘Yˆê€»>ÃWa‘¿Aº.Ä_Lä,_SêæT7K]¨ä ’EªûÏe¶F6ù.ì¸ ˆª%i)–Ä¡ –P>Jµ7Äô4¤ˆÛh§~ÇÜršÄX‰ÇÆÞ¨o ×MÐ À$Y Ã½R[ö3rùÜLŒ¬LC ¡S×—€u*¬š%AVº ž»£â%²¶hÛ7¹b–P‰ ©¢E«,óCÜô}*2ï;ÉÚUBc‰ÆòÒqTÑ£lK(»'È÷ÊVSf4ñåcÇ•%$@ÊHò¿ú`L›ÛŘМAè&Jc¼¾­0vPE-v-”]ÝŸ/[0Õ>÷$¹i¸ašYc†A-±t$Z ‚|wW ¦*/‰[åŸ+/ÓS„rà /"è°A‹ ^»ùëAL™÷÷ÂÇÉlìDI±ŒBäŒ$4¤±…Ø$Ž€'¾´Ëɾ4{|9Š˜ÎÓÍé©L»ˆÍóãùW$ÏALÓµæÿÀ7Ò1ú‹|I°;=ƒî}ÁB´  h@ÐÐÐÍÄhT¬Ï“–°žÔ“ùk2iQb›qŒ¯B}È#S8¾Í8ItCfÀ(z:™ŒQ1f@Ôž‘þÚ¹2`AË‚ˆ1ší©œ~‹‹'æ”F$)ïâ´Î?CUs`õHÍi”H•ΙuCûj匙c¹BR¦Ï‹glŠVC:Ù&Eò÷ñ §b¦H¡R¶?Me´iXˆ³a7q07W^uœãôn˜>d1}‘ïÚ´É}OÌC¶ŒG€<êæ†,>wÔ·¥`{‘¨ä†!lD[Ç×µ Ù¬çqØ€`êþÚfLh¼Y1I'¦cóùjüLÓC‚ñêªU­%F[Øà(V©‚® Ú¡~˜åaE&´i3I°ô–¾•{õ©H¢rfÇÇ`­’zëÆ²ëÑvÈ9Á¸A5öÖm¦Ê&lR8‰b «i±M–5+A'[Irv‚TXöÒMÑhÔƒDÿm]Q–˜ÍЀ4  h@Ѐ4  ©¿³#k¢šÉKÅ]ßÛZd} ÍD)ÉÁèØ ¬Ì°³zr7&ŠñZÍ^΃”L0,k®ýõiªxÎ:bﯠ£€¬UJ'½eÐLŸS Ðûèӭߨãô:˜°+t|Y )bt*žEMßåÇÇçùkR•(æå|9Ë8—8:|ºÄKãò)^Ym€Rz¿'¡Þ–‘vôuZh×pþ!Z­ÄhÞ;,$QQ±»ñÖ«š£+šqó±òòÍ÷Wª¤¥Ñ%³ž›kcâean»ŒrœÀÁåHJ¹-bÉ,APUÉG°¢Ùl‚\9qe‹Í‘ƒÁ‡ÁIVä9G¿"ÇDŽ®õ2eÅ›6x㇤bÜ–8Ðzj|wVlõæþßmX¼ˆÕ ÝvLmâY$t”Àñ¤‰+!€»€ÂÀ$ ÖžŒ![ÃÑnE#s ŒFC$%æeèH[«ûH$lØ®ÂmäÜN_ÍF²f…¸eú»tX_z1ö'‹4dœ¨Ê¬²È`§%ɰÍfÀ¾… öÔ}Ù™þÍ–i[/*6Y 17£’l›#Ûíg®Î³M3v¨?…fíÊÉâ‚gˆ$n‘(5Ñ$“d’I6N¤¬FŠN›ŽNà͸!gˆÇ$Œ—v(OŸ=~zÊ“NÍ8¦¨Ó—Ÿ¸à&M¡yq¤•çõY¥Ä´(QÅC}4 lø?}²áæÄÇ6ܤàŠHËIe`ä3 ­Š4ŠñAlÑÝ>'ÉÁ‹žË‹G‰£Ê€¤žªˆ¾‡z fy~õ7WÏ@$²Ç$±”¶,€q®€°¤Š²Gš ÙDøxbdÉ’2CGëI2Çéž\Øm‰6fþ.ìöcèÚô'gøj5À|yò‹FØÏ a‹"±‰$žLiEÐBµ"íXš¦0|/êmóadå‚Ò,heBªQ\‰$±$›³~GZÑœ‘y~õ±dÊC:å‰ùz$!!x…à!@}×wdÉvìOÃ\S)v™ÜŠäÌK1¡àN‹a¤'uÛr·1òã.8á5Èz¤%[ zhEè5¼­…3w%ΗР²¬”¸Õ#2Ž­É6¯]X"ÒDbì/ž¹_4…yd@°S’äØf³È ñCÂßÑÎøqÂÆ“=óã2´>˜ô ôÁv~¦,oÇ` =vuÇšN1³¯ St_ᬠ£žS£ú…%5›²I&ÉëºF§ ,®¡àV ¨cBRÖiU‹yQ×…m¾Àë¼z8Ë]·?‡±w)=f–Xäg“¤ÎT`ÀP`>ô|‚lv5IitW/`3q\ÙF8D•d¤Æ©”unI° €4º°Bý’ÛNJeÏ—m£…ôaJlŽÚÏ}øÖ~©kg/cøt+äíù3?,Ð'D+U’MÙèwÐЮµ#-²É*FÑðÇ=¾l<œÀ^EU㌨UCj+‘$–$“voÈë]v¬¼ßqTK”†a—ëòôHBBñ À0K nmŒÑ"E‰Â0¤Ùl–³]X:É1ô#NTq>ÛnNT299š J¯¤uÝw×_myøäç:~Dà¡ 6ñYñclvræVi1­x°¡ Ù>nÉ'].¤Îuq4m›^RìãmÁËŠ$âË)|~E¹y w}Q޵¨=Y™öüŒgÄ‹9“ <,Œ£ˆ l{úó­œí™¥øt>êùë•I4±É4f2X²Wþ‘aId5Ð ÕÃÃql¯šå¯$˦Cs`Gm}€€ÅÝžÈ^¨^Âqcã>Ùeâ8ÏAS‹*·â$’y1¥h:Ð[ð¸“o› #2ÚEQ㌨UCj?$–$“voÈèè/vZ_†ÌøÊ’å!™rý~^‰’ˆ^â…_ugÉ-›¶Ü?‘Ã\S)v¶gr+“1,Ƈ‹$ŸËB7_‡—rÍ9ƒ(F$ƒÑJ%,“ÄØ H$]ªîÅN~†_ñ/™ùßäz<~[ÓŽï—/>:¯úÏÁ‹‹¹Ç¸c¼«Áe™ØvžØ ’*‰ ùBÛ‡ðäXòËëŠYà0¢E‰Æ0¤ÙµäKY« Y°½Q| °"ÉhgŽ9ò(’pª”Z[7D“Ù7uжNvÊómQm‚£â®9sŒ àhƒGÜ‚ =ô»&m«1Ä3C™sÅÄHÅþYV£Òò°G]‘ç®ú f¬DÁ‹6%a‰cRDz×­##:]ÒÂÈ•#FOM $°b¥¾ Ã¿¤W]ww¡WfàH›¨Ü¤íÃÀÛ %šÏ#Døl‚@¬Ë£K¡ü3Ž=o[ÑS63@, ŠÆÉòlÝy4+¡Ù¹l£ö½£/)L9±ú̈ˆæÅUl€W•’IbIk$þZÒè¢ÇiÊÇÛr"ÇÜý<‰æ2¾BÀ H°“B…vI»7z>‰Åålï¸<9˜¹b)`æž2ëLš±d&À>Ç¢$˲s~Ç̆,Aèc…"<ñÃJUO€äÐ}‰’4EôgÝ”—áq&yÉ*±´ë)_GëµPkèìUÑ"ûÔKF¯v56)Ææù›¤ñ„1H4,«—›c}xê‡ZEÉ‹Úþ]±ÁlÏQ#BL‚ žFÏ"iEŠ€Ò‘•$;$X˜ËL]»i$ªäÄ’M{Y$×·LQrhœ­ªYb ‰ȃq“2lô”J|rWÙCr Ÿ›'³£‚¡lÜvè˜þ"+Lr`6øÏÔþš`ˆ¦Ì{§Ãñn1"¤Ü)C¡e,¤€E$|Xöò,¢mŒƒiËÄÄÇÃÄÜLf9„“¿¤ª %–¯é›¾ëU$FÛ)ºü>7,Ó–¹\gSbc²O`) I¯ÝÒ.‚_‡ƒîž™U²Ç$јÉbÉ\@k¥‘VHóTz O‡—pl±“qzòL±zd76kìÍ@ø»³ÙV±ãâ¾ ¹…â8Ï\‹*±‰$žLi{ €heØìŸ#e\åõžŠ9aAâh±$Û1$›$èú7aãÃ…‰è‰ òh ôЕº2n»<»ŽD9˜Ù" ž2êUš±dP ›¯±èR¸­‰kGG„ oT~£Øª¾¼è1Brö(ó7DΗР’¬”¸ÀHÌ£«rM€hô Õ‚„;ct¤†ÁÝ£Xq¸7&K5žF¯ÀM› P*Bbø^ ¹£Â.+@Ÿ+Œ#¬lš²Iº÷¡]fÆ€ü6Ò$Ç"\bòðW¢|¼Ÿk±á~ÚXL¡øF•¦PŒŸ\¿¥HZªŠØ5]UÙ«$Ù¹‰m›06uÃÅX!,îErbI&½$šöÔqØÊ‘›qøY3òþf<î"H½)•“‘)dž=€¤‚Ez=WwTtG4iþ7Ï|ÀÏ>‡¥ÇåøÅwË—ŸW}L=‰þ,Ùé——š¥b,aHáâEŠì–7Cì}þZb¨[b1~ŠwÆ—4¼f†. LªÆÉ$“Èô¾À ñ]jÖű¸_M‰£ø€õž ‘ȱP@£E‰&É$“Ù:b†Z'7á¶›nmÂÎôQ8† nhq4A£Õ›²,{éŠ[ÉŸdΓ q#Ü!KB’ŠH øâ9uC®ìÓSaÉ´jÂÚñð8ãb}4 ¥š…UŒ›[)“›&ét9±*DŒž›@I!Š–úƒ ?H£]ww­I ‡bwAºH`Ú10FäÝÍg‘¢}€$ÙCBá¬h’i2–Lh=%M‘ÓI5î*º›« º'mØ0Ì3¤ÒLë<é%‡J€W`‹¾½‡°Ô‹´&YviðöùpvýÉã‘åiwBœœµS}tMölù'Iw]©÷ #ž9b ‘¼egƒÔR¬ÕŠ=U÷Ñ"»ÔN€©~9#Làå’yaç I ­c‹nèö®µ²>‹n»A›qLæà –N±éË(êÞÍÑÀ€VdÝ) ƒnÌ%%L”háåS~Wm}©¨‹&»–Í8¦Vm³;!¦|¬ÈÉ›ÀÍ&0»&ØÙÝ€,õÙÓ&RµcM‰<³Ë4%¥ 8CAÕžû¢oÀÛL˜ÅÍlö€.<Ф„ýBX¹>Ô÷÷½\˜ÁeÙd—mƒ)qÝ£FåÇ W—¢ÀQìPˆ²dÅËÙ&uC,HŸ/<\™M‚¤‘Ä÷wG°‘©mÙ§3?7.d<"•dUXO¨9r=w@X${2laaîx»œÙ­› Í3õÂC**yñÙ²{7£“ôbnŠ|›+)‡÷Ó) P œ„R$e }¢r8·L\­Õ"VxÃC0’;‚@"ˆ'«‹\‹Š'r‡,\}ÄG$s™%<2‚K0£øl“Øñ«“%$WvÙ%ÏÈ9‘ä…2cú ËE’x› Aèõ]ÚÙ4U¶”—qlÏP&–9%Œ¡$”ª®€°¤Š²Gf¨N‹Š²°í{™dCæD*yskÍöfvlöM°¢¸vÁ‹äåÈY"4H¡âÄäA$“J,PPu£“½X˜2áÉ03l‰‰šP´ E¬Ýì vÕM‘ÅQ³lÛßnÇ‘$œ;I3HÜ#â Ÿe[4:³Ù²I÷ÕôC6é´>|Ðåã奀8FhË 5bÈ M€}U”诱±aMŒø‘bå˜àÇB ŽÌ€( dö*¯¯:.ÅjÊålpånI1€*J’Rã#2Ž­ÉìG  .¬˜þAÇîÃsãMÝ£Xq‚7&K5žF‰ö“dKBÃøz,ieדÀaD‹,aI³kÈ–³V, ²JЧDCðÚEÀMÍ,‘0hqø¢˜È*8Ù$XîÍh¥¢Ó%ö9š?Q³"iÎYÈbØ×n++ (þ"l_奢bkÛ0ÿ‡a&«Ë‰$°P¢É&€ºØPöÒÐiš¹±ÒÑ1aÌ}Ž–†,9±ÒÐŇ1ö:Z°æ>ÇKCÇØéhbØû- YÉ=´´\A˜CKA!eQšÊ‹®Î޽–šèƒ86PYüµ)1r$CCˆ#O‰@C6Wö|C²{µo¾ª¯E¶HHØqâ(~Ziä‡|ûO‰m‘éBµh:Ò“ʼ3 XÓlb•}C÷ÖŒÒ$•ò®¥ ïÑVUaWû4R¦Wü=é¢Û$C[:‚}´Ð¶ $ê Ô¨¾‰r <(ü‡1E¶(G@µi•Š+<mO‰m€Ž?ÅBÇÛD’dmÑ`@6?¾«hÊEù±ÒÑ1dsõihbÈgßüô´1dQô†hÖʼHÿ‰A¯O‰U¢ qäUtÅ ,pƒh‹¦­$.EÔú¯½-¾Ëñ¥¡L€À5éhSh·1ö:Z3‹cìt´1aÌ}Ž–†,9±ÒÐŇ1ö:Z°æ>ÇKCÇØéhbØû- Xsc¥¡‹cìt´1aÌ}Ž–†,9±ÒÐŇ1ö:Z°æ>ÇKC@• «Õ±s^ÇÛY‘¥¤WY)hÍ_^ÚÔA\Èu\Šû:I2Ť̌ΊÈÁëX]*ÎcPYÛô>Ú{f@ÖÄ^¨)2;8˜ ï½eÝ•vYÈ•Ø#WMQE·PN휸³EX&ydV`)¨*Ð?…XÝ‘]W›#«Ó˜M£á½I‹›4Q²zøñ4PJ¡x³¾F¾’ŽÍŠbQѨ½” Û™Åtˆ/U$ŒAbEý=SWƒØ"]wŠ¸Ù«Ý›¢ã„©ºÑbXTœFÛ9ûv㛕Œ¸z6pÄÈîâ˜9Ð ÙÜQüµjØR¥°]ï502À†5ž‹pÁH¢A Ÿª×žìUÝoG{_åեǎ&"ÊÄå‡î@ÿ¦¶•nÎÄy»®Ñ>#dUÊqÄdßU|Áê¹xïÆ£“öUŽfáñ^á$Í.Û)á /¦}kÙbÄ‹*¨Ûí˜ÊË5LÐ>!ÝtþK“y1Ç,!WˆV 9Eò,Ý@¥6>úRmqHêaËš›¾N6NJ¼bä‰0¡gvI4¢É5~Öš²Ü=÷sL9²æwoÿ l„Yâ ¥Á=§ OÙ° ýΕlž†í™Ù3K2fNeŠ1Á<ª ¼mbé@J’=è‹ÖeÙ¸–Î¥s.>C¨ò ¥ˆñ@5Ïûk ü>Œ ¸nÏë,¦?EŽOʤaà è‡èM`x=iɉ~)ŽÜ²%õ#ËÚ·Y¸ˆ`*AvI±`QìØ®½ÈE¶'+rh3‰ ÉDXÄ «#*‚ܪÁ O½tw¬ë»Ù«2?|¼9ß1iÔÆŠÏÒwùl 5Õê*Ñ$éè×´Å’›–Lp’lxVž4Ì#‘¢ª: Wû“öëiQÎìÝš¥±X¦iÆ™§OÉú¡VGçª<û®|;tM“ õòÙ"œD¢Y#¦+J@˜€Š ƒ@ž²÷Ð&ó»Ë‰‹Ž%ôò¤I”ˆÕI’T`€v å‰ètG»97ÜÉd‡(™ãÆL(²'0"9'‘c|@SÒ‹ì›èkD}%ÊÎÄÞY³dÊ\i'XñʬF#h(7\Á-bü]{h`´2ç&ùò‰¸¾BfÉ£P°Ù ub‰$ŽÍubú'ÞR|;,©¤”a–Å9Æ¥œXµâ+|lÑ"ú: QY·™°¶Ü…Ÿ/"9â–!#æ$dÄŽÀräEß`ß]h)–ÀÊÝsvÙ†DÙ1Í’VâHÌ®¼C( ‚ Ó ¡äÐ:ô"}ßt“nÃ1Ï7©&,¯!ÅZBé@¬’ò ¯Añ;XS4øpä;£4‘+Î>Vóž›ãC¤ÇdQKEâ€Äþ.EŸ †ÿ1Rиw½Â}Ì©¼<Ð:pP±²ò*Éâ„›5õН>.„lÿnQ`M‘ÏÔC·É!Í“nù½Í”µ~#»RAè}Ƚsάí…Ñ“wøíBF6ÙQdyKÕ²ò ¸²O°ˆ¹\¡iÄ£:lDîe¤Ò9⳪ÉUâ€,õ|¬õD Scî-Å6YqTš:»>ý.nó‘‰>@xÌjРŒ/ÚÅÙ$ÐoÏ€5¨òFF%Æâ©‘–ù·Oâ3$ïˆIŒˆ¸¨þR° 5dù$þzÜ¢¥¦f2pè®Ë·ÉéÉ$ù),`3$á<0 À‘D«udŠ7í¬aZFóOlÕ›Š˜˜ÑÅ'ë»?}bQÆ(±y3¥ŽÕþ®èå/³™»eç`çüÜÒe&F…šˆª·&äX0-UÇ𿾆Wa.V~ò[:L•Æ’uŽ«ˆÚŒÖ/Çm Ž£0 Mö…]Siøƒp3ž\IËoyв€¡ÔTD¨,fíO~úÂJÙ©7Fµßs ÂÊõ³Iƒ2XÔJFâ^”C‹0±à‹ƶ@;ÞçÅ•$±JsÌ%ø'ªT¡‘ ãÌÚ©ê¬ŸÔ èɼ|W»âm¸ŠfôòJ²²*žR#pA 4/¡Dk•ŒS';ã ĪdbHTŒXç1*‚Kò$…Q¶O³&\š°>0‘åeÀUPõC\>ÎσBp~+ž]ΖiJÏ$Š`x€T’„’»$5UZì¹8¾=ÇÝ÷f‚H‹M4ï¶<þ”¸¥}9VEAal=Íë¡…Ñ™`’)r¾K#!ÌfõN1؆!B‹  °>àƒG\ðJVùlÑ…Dø™s&nQ||‚Ö%:ñPüCØ]Xó¦42µDaeo ¶cåÃ&IŒC!É8‹.`­X“¡@5Ø"µ¨Uh“ýžƒxrqãɉí$@ÈÞ,cÏäu£‘ÅÊÞsÓ|h`”˜áÌŠ)a¼B8PŸÅȳôßæ*Z óp›yPe/ä͉ÅBÆËȨ 'Šo¯¬UxZ±?n§\×”J¶¾DLè¡VT®JµD ,“v§½ ‰tßs ÂË3fŸMZƒ2XÖý)zP,ÂÇ‚.üh1@w½Î<‹*YbîaÊTÆdEªãÌک꬟×A‰ÖØ2²ó6¨æÎ 'Ré7®jÅI©ÿ}û9ßo[†t‘`ÊÀãã,æ%U"EäÜË Uaäx¬ïX¾7Þ„9y™ðngv“(¤”c+,F&PÄ­¯ˆÿØûÖ…ô`Áø“u8’æ¼¢T}µò"gE ²¥rUª%`,›µ=è\M›>néóX‹šM,rbåK’ÈÖ â´(•b/Ø‚oÆ„u蟞Ü%Ù6ì†È•N@O™žC2ƒ7\HÀ{P¿m¬É›ñ>D_#®\qe¼s$À)þY"øšú˜€ýØš5Z Ý‚)cš5–'VW¬¦Á»ìG¾„9Ù’æÅ¼Ã>âò4’r|_MxG X¿žÉ <56÷Ÿ>ðÊ^ÉšŠ…—‘P Y„m›ìòîù:¤³K ?Ké&¨‹{¥$“BìãKC¨sàð[ƦHÖ,|'¾Zd†,ÿoG(R ‡OVn Ѩ-øX€¡HX#³ú‹hÎ4_eÞdÉÛc“>„À²JTôYX©"ºò?ÏS$‹˜·ïˆs1s0f#ÑÇI½ ªCŽL\± ¨¨Û#Ã$Ñœh2¾"Ìzh¡œ˜¢ÉŽ9a ¼B0QÈš¾E› ¦ÇÞ¹jÅ"0~"Í—v Óæš)ª…Œ¯" ,ž(I²GÔ*¼ ’ %v=û;:@³f1'ºJG§ #Pj99Yµ>G“•4íû†FBebO¸N…$_NI#ŒJ€I  H û"ôÌ`;aÏ–M¼deæ4¾¤Œñ³ª©Iã|@E×’tÍXÇB>!Þrâš,=¿%£yb‘“Š©,ãˆPy8öI5t½ïrLV͸¼y¸0ä¸ e‰­ø$Yç©’5‹9ù[Þ\‘c4¡\q,>‡Ðñ°PXµX!‰÷¯¤ îõmÀŒ}÷0nq¬óJDÓM@ðqXÂò(Á¨HQäy*´´c|A¹¤2RYfm½¦ËÇÓ”P* X[Fȡٽ-‘q¾e¬y8ÐæO/„¬ïŒŠ®ÔÔ¡@4 ÑóDÔȸ ÇÞm¿%§Ý2åg`gXT; PÂÃ) Xè}[AÇÙ»jÍÉMº¹LdÈ1ƒ3Ô|Š®ºûjd’5‹9»÷ÄYx¹®¸3‘è@³zAT‰&.XH(¨Û#Ã+FNÊîY`ÝýµѬYËÆøž<½ûåâÌ‹Ðô¤T„0,Î¥~£î.ØîžìV›£5f|oˆ³£†C>T#mÍ9ÁÀC*Õ¨  |"‡fõ2è¼[Îâ¸Ù)ëÎJI4 ë"±@A£Ø ØdÄd;ÃÍ·d¾Fé‘ÊNÀα(wN!…†R<è  }ôËt1ÑIw-Ö,í¼f.òðG)hàÉŽ)!¼B2¨ IȳtªScÜÉ,n^l{œðK'$ôÑ£AA,+É$Пk)èÛVglÍÃçÌsdÆÆ4²¢æñ,l¨€8þçí«¦FÚ4|=)›&xf™¤I3ª‚èÖ,ñJ’=è‹ÕÅ ‘¯}ÏÄÂÇPù¤’¿§ÊÀ*’ ,lø]]bô¤Ì¦ÑËmË&\¿ø~gûFV8h•Iy@QÄØ Y‹P°^4ÅÉ›L¹YO¶ç‰ÕbÌãêÂ#’bfüDô¨ç³ãLSC'cW#âãÃ.<Œ±è‚¥;&É'ê>(Uuï¦*…³>Û“.NêÓgzê²dK8 ¤x×JI'«°=¬Ò"lêœx}Q1ìéŠ-°“_›“ž˜¦-œíùÆÜ1Úž3,þ™hÔ?K0U bÉEƒçû‰„I”‡ìM.V y™À €Z9J‘E•Š’+îEÿ}0Eɘ>!ܳ0²å‡ f¸q–cU§^L\±6@@FØy4â†L^FLÑo†(²C—RÄⱸP“ß"ÏÐñJl}æ ›‡ºåäoIÊC$'"h]iBÆËȨ,ž(I³_Pªð«3l¦Í“—¼ÌFKÉÃ2$ÁppT0Pj € Yµ>F˜¦ÍdÒ/â!Ê‹ç3Å4^˜‘#úd©b/é €ÔO¸#ÈÔÅXÉÑÔÚrþk ƒÉ3õôVu¦è…qóòÆé3Ë1õ²'ŒÂðqT È£¡d…I‘"«K@V6çºyÍ,ï¶´â)qŠúr­Š…µQ³ÐìÞ–€ÅÊÜfL¬<,¬‰ž# Ç+B±¿j`¤€¬A#ɯ#K@¼ù™/ðþLøYÒÇ>7©êœ˜¸* ªZ[=Q(ýü/tªFŒ.lz™öO§õ2 zqQÓ œ_Ôtȧõ2éÅýGL€zqQÓ œ_Ôtȧõ2éÅýGL€zqQÓ œ_Ôtȧõ2éÅýGLœgÃé'ÓOë?¶™ ?ŒéM?«ü´È ¾gL€zqQÓ šYý´È¦ŸÖm2éÅýGL€zqQÓ œ_Ôtȧõ2é§õŸÛL€ziýgöÓ œ_Ôtȧõ2éÅýGL€zqQÓ œ_ÔtȦŸÖm2éÅýGL€ziýgöÓ šWùiM?¬þÚdÓ‹úŽ™ôâþ£¦@=8¿¨éN/ê:dÓ‹úŽ™ôâþ£¦@=8¿¨éN/ê:dÓ‹úŽ™ôâþ£¦@=8¿¨éN/ê:dÓ‹úŽ™ôâþ£¦@=8¿¨éN/ê:dôÔx}2@±*@ nµ`@Z:åßÛZ‰BwpŸKñ¿$i=г7+—><ýõ…ѲÒ[²~ãT›'§ŠÏžµ4Pˆ‡Ã_:  Y(ÄÄ16>Õ©¤ ^D4ƒ¥ iËÀÅÍâÓ‡ €ñxåd` Xµ Ñ¡bèÐû nÝœÌ{¾ßŠc-$!ƒF±·&$•RHîîÁ$ß›îúÇ#k£pVfÇÂÃSüBfäA¸ÇªÜAð«£æ¿=e:[4öÍ3ÈV%æ·ŸV¬º1ã`cÏ!N+B“ø>àϯ:Ì[“I#n.ɳ˜-¥¡1–Frà%‰'¢G鮆Fìr»pPAQ3( ù)Èßùë3m-‚^ÎzãC“*‰âŠÖ€T%AØ{‚}qRgVщ+æŒñ òV°ˆ[ƒ‰Ð$Xëì5¥)™q‰ÑÇÛq†PÝKë8¦þ{•ª4 “T,*$ù×TÛ9I"aÙvÌueјÊÉ#8|¨ HPz°(xû _`TÛVÓ‰&ˆÜ'êNr³3 ‹M( ëÛY—eŽÉ| ©q£Â`ñ$jb9™Mе6E}ÉÓâ‹ò06‰pšª¼RwPAò Êÿ;ò~çQJ%jT_#eÙEÉehÛ‡ÑLÉj J@«Õ×DY5e“jÙçÊù£g^Ô¨5ä)4 {}êTRÐNO²»v.É…”òá™ÙË:úïıòJÝýºÔÉdíølÐF¼ ;;’nØ’I³ùŸíàuZÓ’DPc30°÷lC‹•8d«PÄ]G`ƒä}i;2Ö"¤Ú°Ú/•q+(~JÏ啼tÄ–X莉ûIm—fÛfƱé"^1„‘”ÑA ‚o«›«7¬ÒìûvWŸø¨R«#*²ƒaXö ŽÏ]mtfL»íXseŒÙF‘\2†™Š) |A¯°Õ2WeÛñ2_+$F’F’@2«3y%KUŸÓþš‡eÀ€»"Ê]ãàd“%Ù‚ù Å‰_¿UÝa¡m‚l»rA.9…™f ÈÏ+31G‘$õB»èö+B»> âŒHμËò%Õ™öX0&ÿ2}¾ÃBÛ!ö=²HcÇ:$*V3Ά R ²6Mžüè-—m¯äcd|¨ ˆ¬¸ÅIëÀ¿Ú‡Úvù3W=à&UnWÍ‚–ƒº$@‘`~ƒBÛûNSIŸ9²±îF*¥¨± MHì€ ÷òuFס{6ѶÌÅqõ£àáØ°ãßÒ$ÙèPüµ í ­èt[&Ù<¸‹ŽÌ²d/+³¯¨’EPª=c½hÏÈɶœ1…è·!“—¨Üù¶å|¬ÙwF¼u Y"±l;|0|´pÒAlšýüþºÃ‚³¢“H?€mžˆÇ8ËǘjñØ ƒ×æŠDÎO²ðÎÏ&HÉl@Tä]@4Mud}¾ÃLPr•Ù8ÿm°gÿ…KâýVªìU]W~+Ï~uTRzM¢ñl»|M Gc8"e’wu`z6‘àã¡×޵£*ëc16ÜLG“×6yYØà[hY¡t,ýΦîÊ#xécþ-räéãÑ·T`_øFº®ŽrèN^Õ…(›.9«è30CFŨäMŸ¹µ!“4Xˆ¿Moß­) ‘?-צ+ôÒ͉ËÛ0³£dÃÒ°e(ÅJŸ¸ Ø=‘Ññ×¾”†L[ì;KÁ3aŽî¯ ò#‹-Ñ4lù>nýïJC&[&Û™*Ï“‹l”9€6~ `ÏÜéHd‰—dÛ$Ì\׏aÈR@  Ñ ‹~†”†H!ÙvزŽtxÜdkÿÕ·@šì€ îü) ™\}ƒkÇæ!Ç*$^&¥o¥{é{úGg¡_ä4¤3aöE°¬ Ë8©L’³3uUÈ’@¯z³^t¤2F¥ÆT*D *‡CôÒÉó¶m¿qr ¾ €QÙ ˆµ }Çm) ‘/´`K“[b¯-²W‡ 0À` 0º7äýΔ†H¸ÚpoñŽ=oKÒçỪºóÝÖ”†H±ÀÅi× Â ˆŒª×à ¸·æt¤2bbØvÈÖEùfoY8Èe•œ•ï«bHž‡ZR0‹bÛ¢ŽH’9«\ÜÎåÍxú¯ì v~çJC6Jì›jc ?•ú‡¢Ä’ÁƒY$Ù6,ÙïÞô¤2'3hÁÎP™1¹Z ªÊÊbÈØÒɰ â±*€¡¥!“2ƒl¸evÊÎà1…¨4@ÄV”†E¢Ùvèr›><~25ÿŒñÑ$)è]=ß“¥"å²1v-³ݱ±Š—OóñM/HïÀ¡ûiH™>É·ãcK‰rzSƒê«ÎíwwVz&ÍÕ^¨È7¿pÆl ¸CBÀ\aˆ X Š#YzèÑLí·qrâ'ˆ vSDQ¤V<ãY¥Ú0rø¶DnU@˜™‚;¨!Op~Þ5µÑDdì»|ùƒ=áoP5ß2 P%n‰«"èú5eZ1öƻƒçp”IT ™ˆ#ºuBɺ&õÍÚѽ7§¶!++1pE‚X’nüÝŸúxÖwe‰²GPVr ³¹f=P²I4¶·VL’›tìV¦ f™šO† ’Ç64àd`BÐX¢AX& ñ­c!’‘°Ç”Ö•ÿ’”#/DX @º$_Ø‘¢‹D¸–“dYócΖi  ¥+3;²((бTh]éL¹!i°òþi_°Å–ܤù!I M› lýΕ!’ü?(޲Og社þÆQú#ä3OG(×äu0—Ø´V] ä§§—#5HUÊ•"ûA¢GGÁ#ÁÖ±—Ù’*Û;âAˆÊ8ãH²B?K £ÑïÉów}錋’)“ðÿ͸›%퀇  €@4ÀÀ6Ÿ¹ÔÆD¸’ÿ£N3É7/Æh(º$@‘`W} 1•ãdãlãä¶PcêÔy’$@&$v@ûù:(ºÛ#q²¸ŸEŠÎcv×F½ô§ü#³ÐªþÚc!qô2‚ €K5LAvù‡ækÀå|¨}¯Üýή,–Íx˜xØq£*¥¹1,IbM’I$’~ä“­>Œû3æí¸{‚ªåDO@)#)£äZH=Xðh_¬—Ûðåȃ) úñƒ&”D …v:öÐûv,™C.Evu6œ¥bªj¬)4  _gï¡~$Ç·bÇ”s;IØ ò³q‚@ Ðð¡‡lÄ€Èщ9HœZG™«º‰$dôEz#Ú°£àdF #úïͪ¨–¾^| ñ«lÛFÂm¼ÄÂ'$Ȭ æØ7ïdß@?Æ…`ˆ·t]Ë7Ù$“ý΀f€4  h@Ѐ4@>F€4  ÀЀ(}†…¶(}†…¶(}†…¶>ÃAl4€ð4 h[a ¶4¡m†‚Øh@ажÃAl4 G@¡t.ëB€4  h@Ѐ4  h@ #@àhVì4 h Ä@»ûkQì¡9‘< ÜùêN6j DJãΤr(ÀyëXÅ´0ÄÇé(ûV´Q^ŽAj }ëQ§dNÁq§Ó¥"¼èº ÑfŠe@AìþZµbÑY1åg,¬”-0#Ÿºïª™0Ä7?”FŽRÏÅI, ÐúÉ?žŠwÑS2n_d,1»7¥*㤒ã¹P®ÆìT±ª €EußÚ¶¤ÄÐÙ¥§–xò‚È£þšÑVT“W`±"µ¾¥ª-;³¢™8«: !¿¾¥¢¸Èácî™{n_­“ 0d2D¬ DÅ|A$Øù½*O£-6™Ó]Çr89f|¨±rb+Å% G)ƒy_bÈ EWFöGÙ·eÌ\Ü™'’@—Õr¤±‹R=xï»ÐËèÁñ”YsàH©+B¸ò<¯(¢Ò$¾ÉzJERtbßöèRV’(âõåÆå`’`%ŽNG€nì ¾“f»ÖT)Q\ö[/ão1$Ç“!²ã1Ô·*GÄ@°(1ìÑï@”t[Ù»nÄmýò¢Ã‰2ãŒÒ=uä…{ÿxu¤¨Ëf?†V›‹K`´g!”òìÊGbJ=ÃøëT Û³öì}ª_”ȉâÇȘ¸WäU}F õfˆ¾¹ÎìÔzºÊ™ØXÙSIÀó†/:^ G!bÁ4’b-íꦆ žIw˜Ä-B¶‚(Qóf¼õ÷ëZ™–Î>@Š=–‰±d…³XËÊy!X‚Ub¤Ž=, ?‘e"¯:pqÌ3ªäN:Ppp Æ0x6nº:Ð5dË<Á›¹, <[|->TešYm¹,}€  íz¯1Uô?p^Cå¤É|è™e¹£‹Š†R t´öhò¿4 $Kíòì³üJÿÃL´Dšœ 2$$|•R ³ïã lMÐ…ùt}É>h6ÜÆ#·xV«•9›èŠ&ØhlF?áy͆Рi$Ç"4¯F&,+h€¡ hÛx¾†‘i4Ú”F>0Ý1¿ön%äL1RG‚Àí þC_äàøgmÃ7¸r“åä–R¼ã,E€–ìt ñÞƒùÇÝ0S#ä‚ùjLj°àIuàƒç½ œ,ïTüRB“¦lFÝÉ$ET2¯vP“TIØ:B±D§}i…gÈ\„òïäC1ò((5îGDj>Ù>kär_ È‘¶ÇGãYAYˆìÈIs÷V4Uè;CauM«>l8ÑñYñÝ Ç`-‡8ì?Ë ÈÝY$õz¤Ù4Ðìè†H&Åþ(À1cñ({ š1¬¤×}ñwZíü2¬›ó³…ä"‘‡mcÀ׿´¾¦Œ¶ÌŸ6qÉ…¾Jg‚àe1:Îe^ˆ,C *‰k5@ê•6eÍ.~*4ʳ&lFhÉ$ET2¯vP“TIØ: fì)v¬oŠ2à‹1=Y`Œ”iù1`Ò$ž…t< è nŽ~L-»3nÙeÅÈ+¶’¹[|\[˜Ä1¶=Azìh[GGá™1£Y°°¾QáŒ!áGÅmOfØ 6M0°=ÂØý経Øü}÷®\”t…³lÅkúë¢èå.=ñQOânexC.4F'ûÒÞ£èýž…x6xßWª"hÝNÚ»þ,¸Í‹ó#%DËý Ú‘dƒ|@ EP'Èôt¢ÏÅÈÊŸ .lp¾ªñ#!cº£`{h?‰å6_œhó²ÌvÇ¢\J±ù“ÌבÐ=b=?‰¢TÚsçßۀDú‡©ƒGùay«$ž¯[0ïÑ'”[:'©Ø¿Å41ø”=MÖRk¾ø€;­ S-WøN>vEãgTÉÈ*ò›Õ‹s<}ìØ há³ \Æ •ü>‚I(°˜J ¿ÄÍÀ¥üOCÙëi>çKD¶yìý?ˆ#‹ã¼¢|ƒ•4rLÙPâ…Q*$Ÿ§®®©m™öø\¤ø¸3â¥mL™9Xù•¦ë‹³(þ"OdY¿k xŒ‰b›8ã&bLv “Àȼ¸Ø  ‹îÀžÆè©Xßi2J1 wh¡’j‰ãàE)"ˆæKU×F¨é.˜]£*¯-«<ß•Eô28üñ>˜ìèò¢(‘uË«ñ˜öjVzL=Ëp0çyVl˜G¢“).ÜTä@ @=ÝwzÙÍöqóDñQÂN™ÑKw$‘PʽØ@=BMQ$w`èXôFÙë7ġ֖uÉÈ\„dxÉb»°£ùJ·^ätFš±üLûOÍœL™0‰Y›iq‘ —Y…g ›‘‰×XÐH´,©´çÏ…>+>;¶>9r¤|£ü°¼Õ’OW þE8¶dRÐM‹üM€bÇ PöA5鬤×}ñvFƒù¿…Ä‘ìP$’3… "wZ0Ä!¯ÍxŸï¡g'âÑ#n¬–¨ã Fí½@íôÆ/ñ3Á Qß‘¡bw¿ˆb|ÿð¯Wùþ«Ã‰üWu^zó¡“—ŒÛƒ|R“fáOIꄲXÃGÆ€b3bíÀì ú1mлG>. ؉[K&NV>G$i|+³P£\ö@=ûX¹ »p— /“çŽLX’ƒ}_ͨ +@‘Õ]›°‚%Hö¨ãš|gÆþ*JÉ*Ö?,uÄ9`½Õ…óî2DO´`C“&* ÆÈ³IôIãàþj|…¿'½év¶gÛ±ÙĶ`B}oÇà~/ÏïùÞ†g'.]ž_‰Ó9Qʯ‘;8WbV–5¾ÚÁ<^ç Ýð½Vø‡’•Y—'!gNŒ,C1» ?”÷#¢5{4ºðÛåÆï>!åù'ÇR/Õ”ÈIüLL„ß`±©"›¶HỎ6è%Š1’­4³JÉ ²¬jȲª`>à?‘F›yÚð¾ÇΛ-}(1ãI]-¸µ(¢lŽ¿=hË»‹Wm|¹’a,¦7ôe}»ãØ Ýv,ŽºÐ+ôswÇYfYfò0¼K“þÿ—2H‹ìýQèÙã}^…þFÁx|@=–“%ó¢de–æŽ.*JÒÐcÙ£ÊüÐ"±¾ßÄèÛpÅwe—ÖLJrè“!ˆ°|Õ?=¢6eÉ;žhÝ1f†Iñ#iÙ¤PêR•b@Ð"ÒI¢{FŸ…r6÷À“oÉÄY2ý) bªdb¤öz#°Oìv÷óŒbbË*Èõ9…”0NÉ®L;>,’;B ÆŽ]“iLåc¾ÞÊÒNAXÛŠSŠ4X¨n#͵×D¯äoÊ›ölíç)bÊ}Q4õÄzOÈM¨€M}…øÐ Èù\?‰Lðɇ‘‘>J‡Òx@¤† HFÀè‘~4'¢»<‚탌y'Ÿ*u™Dg׉b¬Ígé!T@S-î/ñ=†C@qþ-b¸ØÆHãhŽPúÄ€*ÁKÙˆn$ƒä€dhUØl™øûndž™¹lVI½ Y È 0ŒÐZ€oÆí˜>-6êÉjŽ1‘°¤nÛÔßLbÿ1Œ¥ù!š$oŠˆtΈÂ[¹$ˆª†UîÂêj‰#»AˆÛ=fø”:Òι9 ‚Œ,C7v)VëÜŽˆÓV?‰Ÿiù³‰“&+3m.2"„ë0 ¬är12ò‹ D›^p–Å–LrËqClŠJ‘`GımØî‚GoáÙ£|7ŽÇô¢™’)1cã‚,¢è $'°{öгÆ>“Ok"c¼3–oÃ}$0Ëñ  6n¨ìè`î+;”Œ32qÁàÊm™Tºüô læî Ãâè|´™/#,·4qqPÊT–ƒÍWæâFø†8ñþ]åõò\ÐKÉý2IP⺢TQ7ôõÕÐz·Bíø¸3b%m,™9Xù‘¥ð®ÍBr7Ù÷íbä03Æ Xðá³ãƒòïÊ!õ)$±Æ¹U È7¡£C.ß™µ"O“¶Ã>qô¤hËÏô¥,–#¢{R Sc²vŒy_a´úQ– @ö@ö¡‡ÙÆø´HÛ«%ª8ÆF‘»oP;}1‹üLÆ0H”wähXïâŸ?ü+Õþ£êðâÕÝWž¼èdåã6àߤٸSÆÒA:¡,…V0Ññ ŸÌØ»p;À¾„|9 o›ò©$± ¯'5šNT ’9v{7í©ì²è¼;fÖû&Vgû.™)"™"0ŠËÀ`Ál‹Œê‘VÏÙâØ¹î[~$‘G–Ñâ,q„†V7L°£¶²I‰°4È^dñâíÑänXrcÇ/órA’¨@ä’@¢lèhôI“‡LØæ7’%g‰¼¡#°zÓC›ìçdK¶büY>Z,ÒãHŒ¯7vLa@õth,ß“¡}0§Ä1Çòï/¯ræ‚^Oé’J‡Õ¢‰¿§®®ƒÑCæüªE‰,C†kãÉÍf“•Æ€$ŽDÝžÍûj{,ºÃŇ`ÊÜ11¡…32cd^PDUK_I±f#óÕÈfÕŸƒ¶my9sÏãÇ”Ü^& é€TË0ŸZ$¸³1'é (€¦Z'ÜÒF­«iÛ772º„–UH€W O2@èÛ§ÿ“óÐÎL¿ÃxX±A6勈‘&\¥ãDN Tõ÷—ÿQЮÇoc1±—IGs (p”I®Dvh À$ŽÀÐ;89¬’l›TyÈ!Ç}½•¥ž¸ÆÁRœh±PÜ}Ák®ˆÐ¾ÍÙ3bâ¶Ï›¼e,YCˆ—Ö›é?"A4>¢5æ…øÐtôNBâá|IëÁ&FDù*Hâ0¤†Ðr6D‹ìhDÊm ß$òdO•2Ì=3ëÄ€±Vf$ý$*€( e¢}Ã#Ððs¡2dÁýô*g#âÂWšDÑ %õˆôÀ*ÁKÙ¨b¤ƒä€dhTì“7nØðãÎÊb²Íèâ»!¹f“CÝ@ï¡ ¶sþ-6èP®1£l)ñzÛéŒ_âf1‚@éG~F„NÃ4H~* 2¤é›„žä’"ªW»¨Iª$Žì º ³Õo‰)Urg\„ï3Ȇcv)T÷#¢4'ñ+ðªz¹ ^OL>äF!‘Á3°6‰ù/±¡[£^Õ§cŸáùY#Ê•Ua‘¢´­MõÓØ³DízÉš~6†„cÉL™•VWЕ¼M‘t{ìƒäQ1ôlÃñ`å‚,ÆTâ”4Òö±·Òy}·Á@³fÇ@ë+°nÃÏX ÁÃÜe+•‘¥e6YT²?=@só“Žú=&CfDÈË-Ë\T2•¥®G³G•ù o W 8oÉåõç92Á''1›âWTJ€ ±]uu°#o…Ú9±ðçÅOÿ dÈÉ‚rU¥ð˜F¹{ ~Ö!‡'9aãa••ƒÃÌ0,áPh×~nƳüi&Š]³,43Ùy˜øãÈXò š¢MÈä³ãYKáËþ ’M» ¿ð×áÿÃZ¯°oÔ  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ”óýµ¨€‘@V,zÎ’èRy@`Ò!¿kÒšKú¤BIèV¨¤L“J«È• jëAH…Éué¥J®¨h°2’•H÷¡¡j‰±²²?m#lØ šˆÒ0”£²ÿ+ËòòWÿ»Ö|z–—?›)ñÙ:˜ÅäÅÆ›[3"e€@”c`ò?¶¦0-ÈpÛp£NBzVûkWfr•”+·`–Ù%V5,‰ð =:F1²ÊNŽ‚eC$a‘ùË[´ú0âÐÅ?Hµý5³"r·5‰lÚ¢™™PÊ­–<‚…U$±>ÀI>OCÀ'ÛQ«(µÜ¶è±Òyg>”Š^2±³H‹&€¾õ~Ãiû†&4õ4Ö[‰! h@ z iOØn#›+lß“3ƒ’¨[ÒPOן`{èÞµ²^è\[©“3å£,³  ñ²†€h¢G‚|ê|¬¿^&ãFD¸†pd„)‘Úò²,þ€ÿöu»~Ìâ‡äfãaÀr2eTEòÄøî‡÷$€¹ÖŽX±î˜KwªÍàJFÌÏbÅ(“@ŸoưöΉÑI·½¶xò›$”‘ ¡HÙ‰P$€ X²@«ïJdûÖß‹"Á4¬9q*â&([` ‹=vF´´ˆÕŒ}×<ÅÁw‘dw ¥¡`…«•#‰5}]õ÷Õ3L1wLL̇ƒÈJ3fÂÚš 1H ø'Çå ¦WzÛ2ôY_Lqóf‘þ XW£Ø±ùè)‘ù·KŠÙQK!XØ+¯ ü4GÓ\‚ôÆC¹àφùé‘Q'.lÊA^$Ý‚Q°Eè)‹—|ÛaƇ-ævI£õ#) 1+@–  ,‘Õ÷çALב̂HØ0``l{ý´ÌÍ»`Gš6é2*V!k"È$)j H7]èeFå·æNûdY7-0üT"‰,H÷Ô}Zg+G(•1wqÂ$æÌÀ¨ádr€ ô{:ó®KŽUÙÛÉQ.,™‹º‘D 9ÆêÀMH"¨wb¯SÇ?²ç¢Kÿ² Áº!@nX¸$ã\¬Q±V'ÀÓÇ?±œ>‡c`åæ@™XÛˆtu Œ<|jøçö3‡Ð¬´› e‡+pu,TsôX ³BØž»#Èûéã—ØÎD:ºf|ƒnGÕ.ð7DXRÕ@‘Ýu]v4ñÏìg F‘óFÜ3¥YX·|y7$ uØ5ØûYÂs&AÈ F Jš¨M&½üiãŸØÎE`d,ìBŨìñ²‚ý@šµèö,~zxçö3‡ÐFå±ß$nl'êð²°&¨q MŠ¡Ýõzxçö3‡Ño‰óÄœ«Èc !bå…Úñ•Š$Šè|h¸çöLãôoÃÜ6í»ŽKH'ÊÆÎβB¨&€ó×V.µ¸Gr›Éèé‚{ëf)™vÛÓ8mÒd4°P¼Iˆ$)j H²7]Ö‚™0nøæ¶Y*òë¢T€À1H¾À={è)•ÆÞöÌ¿Q¡Ësve*8wõ‚@z=‹yÐS"-ól“LÑ‘INq²°$7bºîÅ^‚™?ƶӊ3ìQ¥1ªˆ˜¿0H+ƹ_FÅXûh)š1² ÍÇL¬iÇ"òG: br÷m¿ !q²²8»ÕÐ'ˆ,@¥šm3^„¦gùüQü;Ö·¤dôèß@¿Ë³ÿÝhZb Þö¼¤‘âÊúbÔvxÙGþ H½ÅÏAL{Ûž 'IQ2«¡Çpâê¾’9o£]÷ö: `7ŒÅ±´®…ÊRc;0`H ¨Š ƒcÿ-2‡â ­0“qõ%0È¥–DÆ‘€QäšSÄ~fºÐS5Ã2OÍ%]C) ‚Aà÷ûè)Š]Ë ³ÎØ™ gT,юȼŸö?:#ALOñl Œ¿”ŠcêøØ*@` Ä Z̺,z÷·Í#ÅêÈfI°<|TugtcöÖM ÆÞ0d†IãiO¤À:|»óÕ}5ȃ~@¯?c­D£Fn6ᯊå1RJ• ‚A#ìu£sw<<d»rˆ‘³»P²B¨&€òk«q +—»møS.6LüYÀ=! @ˆ “@š³m Ld¹Ø°eC‡4Áeœ°…;%¨Yý‡¾„+ºaåÎðc™ Œ°v08[SDr AÑ>41w­·)\¦IQbGõché Ó}@Xè÷ã­ Lfá¸cŒ¬I9£G`z  è¢róaÂŒK2ÈAj(YÍÕøPO±ü´."eß¶¸q£Ìl–h挼f8Ù,@€,Y4è1Dæox6KÈ€"DÙMšR‚,š~ãî4'ėݰ4mÒdTÅ‚×@$µP$@&Èî´Æ|ö(Íþ&¹‹Ô×|AþÞMüµ-Ü€±ÇVÉKyŽ´÷Bµf|ÌülÖ\™ üT*f'ÀIêèŸBâ†ceÁ™dãH920ðAñ¡>"2·m¿!qògâïD¤ÕšPI Moìt*V»`&pÛŸ"¥$(P¦¬‚B–ª`ußÛ@C»àOšp"ȹW•ý$VƒÄQ"À ú™ÛÞÙ–$0å ‰9»2•lý@‘Ez=‹yÐV¬wÛ¤Á;¢e¯  FxÇS"â…Ã¾í™ +Á’XBœØˆÛµ²9/_PèÑ uªJd¦ù·Ys ª@@—Ô•”HÍŠë»êô.$¾í‡:e8œ,ŽUWådäH»µ Èx=Õ~ú+ 7º·ø¼¹@cñ $¢A« .ûUßZk f«B5FeܰŸp;bd)S›F,yö±×žÁÐ…bݰgË8QNLƒ—”`¬T€À1H= ­X·í®h¥™2aõ]š&•|…Èt{4-2çwÂ\7Ü$wŽ(Í3M ¡¾¼›°É¡gBy1寯p Ð’6B(×a€#ûfF×B²÷ <2²Wã÷lI ;«"Ïbõ’–›uÛð\A•1V DlB‚h  ‘VH±Ö×@gñ,OžþŽÍ(R¬lÁl0¤Ð$×Üj™È¬;®NYÁŠRd¼ÆÀ1RÄQ š _Û@›]†6í·eÄóÃLQZV•ØbaÑìXÐd3 ;qÇX’󉪻Däz ¬¸p£L%!›E ¹º'‚k£í ÈD»ÞÕ4y’Z9£/HÙ­@±±d€÷¡2e³7­»oäÉ V‡\weìÐú”d×½ö>ãA¶Kî¸ œ6é2*bÁxð$A!KUG`dwZ˜Á›Š3¿‡zã×ôŒ‚:7Ä/òì×ÿË@hÐù>fn6bl—#“q@¨Y˜Ÿ >  @Ÿm ¶_* ÌtÊÆ”ÇQôit#7rÂÛ>d¥C@T,h $€ 'À±g½`Óìz²° ¦Á Ý!·LË-)ãøˆb,)j kº&êºï@î˜3e8æ> ä1°©€$Q š Z°o[fB;Ç“K~£3£(áßÔ ÇG±cóÕ¦=ßXdž?Tˆ˜ c¿0H}5˰AºªÔS|Û_æRY ú¦ =ä\H VH£t:£ö:´Á§"¨'ÃFê ·Üú~š€f€4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@ЈÕõí­D(8¯ÛUôD¨Äpò’¡}ÿîmYÒÐ.>Ynõj…¡C ¥7æ×BdRLIÙh(û5í¡rDIãZGçcSè™"¦ µèFºT‹h^çµE¹æÂr±XSU`ÄŒuÑ÷ hûWÞµÔÁËÜvó.Cíåç\HøÊ¦;YGâ²ÆÀ°+›6~Øôk!òìS®ñói¶# Gªÿ,‹ìÙ°GbÏUöÖkãF­]›Ž.H¨„v£Áû1C3‘‰ðötX™1Ƀ7¬ØfhÂJäy±Ù$Ýìo³­VÑ›ÑuÙ÷H12±f‚I}R§ÕŒ¨i?„‚hDTAû“¬ü“ѧ‰¿hþ'C.@¡˜,q ^"Í äÑ«?ÛWådøÐÍçæ‰Lx9RαºÇ&>O¤c&¼žKbÀ>}«ösuìŻ컶kñ•LÂl4ŽW‚¨•K1 ñ‹²ŠIñ5nk˜wˆ%o•ãH]ZEer*A¢À8›ëíW¬Éº70`ánî‹<Øn&•™@š*.Áñ}-æõ›f©ðþã‡8È› ™áÄ0ò ?™Ex…Ð/½YbHumŒQ¯lMÏç'8}@4QÏ(.ÌÇ H HMO‚5"H^ë¼n8Øó¦+#£†’8Ür©V’ŽD]¸î&Ë¡+´nX¸xÿ+"ÈUôáxÀ@íˉ-} À>G¡¦ì5dçl™ëí¸~±aGÒ©@”¶,ƒmà“@w`X=+fŒ·ÜÿŒÃ$;{´k)r*n‰®=õú^£z4WÒÝfÝÓ$bÉEu/+‚„* ’ 뫳«ò¢jÉÙví×nΕ²LrFÐ(æ©Ä»rIúvÄž¨òTlÛ"HÚdËtnXnüE€¤!d ýHЯ£8¹©³a$¸YQφT¢'¤*OlAR A¿mkM˜6¬ü]¾d>HŽ`Æ'އ6 CÁ®Ô{»R÷`¼ØÛ”1bìÿ%$¸±@‚g‰h!˜}=Y«'¡Ð»^¨Ï‹;+qÇhqf•Œ­*úEhÙ*’{ t(€n†®E¦W.=ØI‹ðCÎS‘êÎ%,l^F‰cwC«õ¦B™š=“pš `d6×ÅÇM?UQþ]Ð@²I7àWl…jËàãï80æn0à³åL‘NYäpI.iˆr ·á@êÆ™ c¡Û³'ÁŽ%f…ÆO«?ÍÄ®fo @D ëˆC¹lS3IµîƒnÁ‚hæf‡ ¢bH¨ÊHP,Ô@Ý ×°¹èã¾ãŠ˜x)_GŽCÄÁV"P EM^Ó"Ó0emŒûÓHñ–‰²âž'ÆT(bEÙb(ê€bo²"Ñž›ºÍ‘ãDÒG1qÄ#ò!@ì—$’áºL…hFÁ¹œYa Ê6çÅ»‚²P B€¾H–&½2×iÝŸ+!#hòehXz¬¬Ò:7"Ô€ Ð@(á'ø6á|X¦Œüñ•£/¾¢Àr6Zï¢ÄÙ"‹ t¶UÉËË%¤0úiqz€ÆÅ¯¯¤v|z¾À»#Aß'2TÉiÛ8΋D]AN×JE_C±c³Dél þŸ¯$y4qÌ$\|ŽG-P@¢µÑírJ·x~ShD¥£¬¼…p0QØ Øê«L‹Lçåm;„ûËHÑ–‰²ãž)€‘• ‘vX„ : ›ì€ÈS =£pMÝfÈCPäM$s8?"nÉrI ~; tÈ‚0þÜÎ<°d'‡>/ªî É`â$( ä€IbhÓ ]váñ2²R6&V…‡ªUšGG,Zƒºè<2-0þ ¸E„c?[ù—/_ÔŠë>;¿Ú™1LÁµîxûÒæ>Lr#¬Þ«ˆJµ±JRy  ´{ ‹¦g‹gÜŒR",¡cÛ_<£$š¯Áb€P,›7àQ%¦7-ã ¼¬<d•Ò1 eL­#(ÛG dòñcL…1ÐC¸E³É4r¦L®y<årbñ$P»ü(xÓ!Z±™¸>ßш• +þ€ìvlØzïê¿m2 Q·ëþ½L™¬Q‡%³Á4x¼K£È¬€E4XS}}ªõoFC¶åÿ€qàžYGªÑ•büºP¶ÕlMš¡Õê7e]Œ—2|MÂFEd£G ±°j$³~\¨øÓÙÚñ²ñ.‘Êa"ƪ²L†f O.Tfï‘÷±#èn n»vÓ<í­,§!š%ÈQ!RÃñ5‘bÉž€zѶNõ‘>d9qcÏ2Ç ˆS'ÒpX©ù-¤Ø¿$t}„0î»óšDs¯®gÁŽ)š7 «2–þcv-G"ÀlЮƲFÌ­§s;Ô;”Y:üÈg äˆ#uUVÇÀ»kì ПÇÃʇyYpðò ‡”­‘êä†IKW‘âKº^¬{Ö„'iþ%.LÙû¶Ù,SºEçD@l"Ä’nÉ G°h_z3Á¹æmq˜2¶é!õr¤e22› ìÃð±ì¿ízçÉnþÅTº>\SÂáÀXÊ…äH»,BP MöF´¥Ñd‡&.ç·oË™,‰,n%28„†úŠP'‘ðj€Z=›ÔsIÕFÑÖÐÉ LH \’%5Ù—ymÆ3•Ž—Ð?}eO"¸¦s~#ܲäš(bFS ¥˜Æ@n%YHRH£Lhß^|€5Ÿ.éšñÚÑ;¶^Ó·âábíÁ„®ÍÀ=zjÌZ¬ù @¯zÑòl(w̹7‰ÈF1ÉÄê. S7`Ð`luBÞUÓ‰ö_9å;§ÌH¥¢|¸§Ã¨@PÄ‹²Ä ª“}‘£äJ6ǹR5í[^l»”y3DJE<ÒG1qǃò!›%É$ø@î×DòVsjÛ1rvÜ78H8øfrà‰h¨P JûÑ%‰¡Þ¤å‚²Áe*4lÙù˃$²m’€Ó<±©d· ìÀ«¢,y¯ï¨äé2㺆w™6´Â|bŒ‹åFÈX¢uÜ›¢ÊÑ“wÉÍÎÞ“<)%TÖX‘™Ф’¨É"Å:Fw*bPøÙЇq“g‹kôD«8\™½@8qQDÙ²=¼y:Ô§£* ìÁ‘”¹Y ÂgŽ9s#žBÍP/E‰<®…÷uÑ‹’ öiñÉYh%ˆîÐ…–T‚‰¥©Z2 p×ÇÕ割E¨ßGÉêÉ㓈¤X‘$\‡Êùx¶æÆHähùÄx+Ð (Ov:I¹Æ‚ãd¦@‘rr÷ 2yJ`0¨1ú€ÆÅ¡J,Ÿô}€#äˆ\r¡‰Þ7g*<¹¿0É<Ž©í@ òl@›¢{àIr*ÑW¯f]þ ŒòÙ†2`ÉÅT à¦k"À H ]P'Y¬m™qùàø¢isŒ‡Æ.6%æ?ÕWŸÞ°¹Q·ÆÐ¬|ÈSx¼EšƒJÙ"\ŽI!bH*¼Æî‡V=ëZòBû3ã•¶<–À?;,EåÇÃ0Y“©H+ÅW³Å@_&‰,Mõ<‘û.Ù^¶Û#çE"äÏA±]Sª" «3ø´L£!1ñçšPfhø±p”-µ[mT:£} øoܶÿN ™c‹G2Ë“ÍePcÅh7GâuÐ7f­ŒeÇ ±åíòAþÓ#¯6B4ŒÃð±ð¿z½ìväÒŒN4üÄ,ž¦C:‰X3ѯÄTM‚f”(¾µF—FMÿoËÉžŒ|vš1‘Ï 8Rà• HIP“F¨‚k)ÑM‘æàC…·.0•“Î…TkɲëǾ 2åí¹Rî|qÖu‰²£žVf* ±'ˆh]›®ô ¯'øœERuÇ‚ieþk!V.R…¶«bl‘Cª7ÒØ²äH¯ñäˆ#À|hÒW‹›^8ô “Ù=D˜ ~>çåîRÃ+ÈñªÃ̘¨b,¯Ò,µy>,‘t.€I¶I·ã",ÒOž¡lr€³°`ÌC(–n¼‹ãK`~ɇ>Û>K’öÌäh³"À‘ut¯Qö šÐ€4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Y<ÿmj$}žCY5¤¥EHÎ3e yÈ>Ö3f±,r墑ÕÌbUsÜu#Ù#£Z)1ˆ|ÜÅ»“ÛÉÑÉ•Dˆræïœ ÷ÐE&ʲ¯›’¬Gª?mD2÷h0³ã™8úŠrÀÉlÕY¯‚|ëzhÁ²9cš%šFàpe`AÆÇ‘ªÝX3͸úl#ƒ¿msnFÒ‰ .è =v~ÚÏÏèWØÎbÄdu·#¡­ ‚]ÁجÐÓ~ÉñÙ;²Ié,Wß=µŸùŸFª¤—sYÀH­kÏÛVù \c Ù–¿É»óùjåÈ*<ÙŠ®=ŠÑ¹ý Ç&@LÐñ h}ôY•âUÎcã}dø’8·ƒ¡äé¶\Pühä6ÒôoƪOÙ—Š,Rü®µHÍ¢BuØ?¾”™3`È/°m)Ñ "ˆ:Rˆh¬ŠöÒ‘«`J© uša»'P  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  P»Ð€,]hZe¢$7CÛZ‰–¬pºìkF@Ѐ‡¾:vs÷=¾L܈¤¬‚<ëœá›GhO¹mó1õ¢+k3ƒr²ÂJ¨É·í9nê¸&ìñ¬Æ ܧ>=Ž›< ¯¸­iq´gȨnÛµMƒ”Ìò[µ±ØÒ«Î@U¥ý=f\2o²Ç–)tIØwh]²Ä´¯ŽN¿D\‘WûÂ$‘‹iZ߯'Z\Ud|¶B|;éÂÐ ®|ëôÔðüh¾_•šð6Ó‡‡òáØbM‘®Š FŽnIÊÃ7jLì‡)$ÑÒqÎ4É (ÊÌ˲喊6È!":±¬xåkfü‹±˜;DØ:H HÖAóÞ¬xÜ[¡)ä‘H¶iãÞÎãêýB…­Ly Ö“›±6^KN¯Ç’Ñ}Iqå;šŒh\_Ê™1Êò)XÍÕyÔ\TÓ4ùtÑ\¯†f“7æ#”*ÚÖ£ânVUÍQ¡‘ìG‹&8*ß„Ÿ ëKŠ¢Ñ—ÉrLV_ÃSä*2L_ó­IpÙ¨òÐÜM’X%iepmh üµcÄÓ²K’Ñ‘~ÈW’O˜¬¶±àm·fŸ7Å#vFË$ûtx¾¥2x?}u|iÆŽY¥+2¿ÃY%ÿMsð4t|ɱS|5•6X3q  ~Z̸¤–<±k[V˸äcœl¥ }@Ü€òÔŒ%-2Ë’)èÛ»|4û“GÆP‹€òFºO‰Ê¨Ì9q±Y äLÖ³ —ÛY| ˆó(ú6l{D»Y~r_6¾‡uããÀÇ'&k£¦‹ÄÕûk©ÂõE´ h@++Dë³i¨DO‡¾¶º#èe‹«Õ0­“äV…}“¡@Ѐ4  h@Ѐ4 (à÷¨ú6º¾ÿ®°iöN„ h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ´uÝýºÖ¢GÑ/±ï¿µëUa_²‡"+€ýµ)¶_ÐB´PU}´¤fÙEÅ‹ú/ûiH¥¾Z:®å¥"[û âÄG_¦”ФÀãGìŸÿަ(™Húmpn°úrª—Qy ƒâÇŸˆ4H½DèÕjÇâE.6,xï9¢€]‰úˆ{$þ䟹>t¶Aœˆÿ -›Å¾ãû-™iäâþÚdËñÌÝŽ¾­´J‰ ýý'S&*$ñùjü‹ñ'™±GÏ>DøýÏåùéò/Ä=J^Ÿ"THiZþÿm>AÓ-gǰÔÉŠŠ ;yQþz­²üCÔ<¸Ùýõ2dÆ$éldx:[I&ÉÒØ ?}-‚K(-‚ $Ù:€4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@vÊWUvBD’‘øµr½güµ-€õŸòÒØYÿ--‚¾¤¿×þZ¹ç'õé ÈÿŒ6™+ݯ¶“$±Š‰ÑZdz®Øj¶\YG³ßm2²DŒ(ïôÓ!‹#‹øü´ÈbÀÈä_1úéҨÌ?2°25råþZd1d‡po–™ Y£ò=ù÷­2²yÈjÛL‰L=Gö5¦B™F«'«Ó"âÃÔbza¦C£ûž½…iÅ‘À¾_å¦CI’J°}¼iÅ‘ëHM)Ó!‹+ƒÿ–™ X\v[Ïå¦CV$Zd1dòê¶™ YV¾6tÈbÃÕùcûi‘1¢9±»ÛLF6 ä}B€Ó-Ä‘#‘a¿ËL‹‹%er?£vF¨Y,V‰Ñ õúŽ®B¨ŸYÿ-K`=gü´¶ÖËK`©–Eï•êÝèI$ØÖKL‡ü'@»$<€PÕN…0gm¢9~ÃW$ÈþË©l´Ãœ¿a«’!<Ÿú‡í¦@Žrý†™ åû 2@9Ëöd€s—ì4Éç/Øi’òê¶™¼¥ÿìé’¹·ßRØ#œ¿a«’òê¶™äÿÔ?m2yËU¦HäÿÔ?m2rr#çL€] d¶ÃB€4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Hb¾ªt æ~ÃK`ŽOýCöÕÈõŸòÔ¶ “Ø\¥ÿìé’ú³ 2òê¶™“ºîùfdLUš!|’AåFÅô‚IºÔ¦Vìß:eÀ™)a]Áè‹ò û5 øŒ=té [ìMö4-  hƒªëÑ`T´¶\PqDwí¥±Š 5cöÓVFÙMÑ=é¡“-`’¤j TlÑÐ|@Q4Aß‹ïôКÇz¶Æƒ±ÙoòÔ'Bf뎅¦N‚˜h)†ƒa¡@дÃAL4 h@дÃAL,]^„o±¡i†„ h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4 èè[dqëÏ}vIÑÐ[ l4Â…Þ‚Øh@ Ž…¶ £ý´ÉСm€(h@Ð…¶.ôÂ…Ýh@Ѐ4-°Ð¡mEtÉ¡w ¶ a¡Bè4 h[a¡@Ѐ4  h@Ѐ4  h@Ѐ4  hZÕ€7¡š "ÏBÓnGÆ«T@&…Ö¡ªØÈÕ¦JÕ`éLS'P "Í_×@M÷ZøX'BSUø…h)’ ö5iŠa¥1L4¦) y:SÃJb˜iLS ¸´¦)‡5ûéLSÀô j‰Ð  ÕzдÃ@•‘ÈU0æ¿}Zb™:‚™jµ« ryC_Ém LЀ4  h@Ð…¦4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@rŽRîX|ˆåQ H¢ ‚(‚l¬)6ŽÎËâå$q.4$¨PSdÿŸgõ=U"8ù‰H%cÛL‘²ª—vªúd0)º™ùpOÛQNÙ\(¸Í˜X-ØöÕÈ„üÛåÌþ„é",ùdb €¾ŠVŠâg37ný´RMŠdäfMØàz7£’DH&Ü¢’ÃêñCL‚‰ç< ÚǵhäkZ<Æ Å¾ŠVeÅ"ÿ2ÿÖ5m E~eÇ™t´)ÌglóS^–#&Oy?ËTÙ3„ŸÛ@Wæ¦þ½|Ôß× 'ær>çöÔ´ær>çöÒÐ#æ¦þ½PHɘŸÇþZFAÿýµ-~c wËK@>g#îm-ùœ¹ý´´ù©¿¯Tɘÿ@IȘ ,?mKB‘¦&%cÙÕ2Ñm †€4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@4ˆÕ»:ÚèôWú‡ï¦&rAòé÷¾•!’'Ðú†˜ŒzÿPÓ’E?¯LFH:ù½)Ðz'óÒ´‰üô¤-¢Ÿ×¦$É¡õ 1 ô#þ¡¦#$.£ÁÒ‘m¢=) Aè_) AèGýCLI’B?êb2AèGýCLFH=þ½1 ô#þ¡¦#$Š^˜ŒzÿPÓ’ò”‹h=ùéHZ@ÙÒ´„Ô4Ä™ 0}Ž”‹h=ùéHZ@:RƒÑOëÓdƒÐú†˜Œz)ýzb2AèGýCLFH à“¥"ÚBüéHZB?êbLz)ýzb2AèGýCLFH=ÿ¨iˆÉ¡õ 1 ô#þ¡¦#$„Ô4ÄdƒÑOëÓ’E?¯LFH=þ½1 ô#þ¡¦#$A…TéH¶™FQàøÔh Hºûë%õb²§ùh=e[‹³'ñ9b!ØÖ<†ðDÿ“Ï¥þz¹Ëècþ''Ÿ@uùê)ÈŽAüI‡ˆGïãO#üIÅÜ ×O$‹‚$nn þH?ßUÍ…‡ñ9*½óÔò²>4Àn²Õú_ç§‘ý P“þÓÈ\ ÒCâ/óÕò~‰€ Ò_>ùèçú& Ÿâ²ÿ¾§‘}ŇñI‡fóÕÍWCGñIO^ù覾†,Ÿâ“]z?穚ú°þ+/ü!ûéä_CÅ&ÿ¦qú°þ)7ü 3ÐŇñYáßO"ú3ŽÃø¬§ÿt÷ÓÈWÄ›þ þúy €oø+ûéäwI î!ûêæ×¢ãþ%/_Ë¡ú霾†VføpqŸ*HmPYïQòH«Ž'›ôÝðò;FÀ¤ƒßÛXóÍz7àƒ]–‡ý5ì38H”OßQóÉv‚á‹éš_ý'`¬fS ,›ñ¬¿ê’ôiLþÌgý7|>,1¿s­®yWFo³Ã_éCeø›rfˆºÛZ,›è̸â—g¬Hƒ~ßmw¤pn‰uãJBÑ>Š^˜“$„Ô4ÄdƒÐú†˜ŒzÿPÓ’E?¯LFH:Ÿ})Ðz'óÒ´Ž”… ôSúôÄ™ ô#þ­1 ô—î?}Lɤ?¨~ú¸ŒzÿPÓ’ ñiˆÉè¨ðÃ÷Ó’^ô¤T죪­¨ÑCY  h@Ѐ4  h@Ѐ4  h@ЀòÙpdàÅv#©X‚óæÄ "ú=yb¨ÅkU;M¶ì݉›ñG3n€ØZGÚÏýOêuXÞ&yóåÇÞ ˜ ±8"e'µ»`G!÷èÕU7¿ãd]ŠÂ’uuå3çÊ E@ y;X ]Ø#³]øëQ´ÐV™¯c“9=˜€"h×ìuÎ)E›“´gÊŸ68dÊ’4…Åz~›™9›éH*<šwß¶´«#-´‡àäÉ>1i¬Ỉ‡òÏôõæ…÷»}„„n™b"·Î,)õÔ;Pè/ A÷±Ññß±A!§o9qÃ+GK…q<¬Æ¡¬Q?â&Àó¾…Ò3&ŽŽF\Mš6÷sêýBœÃuwUçR[ÙWtd‡4˸¾$Ù>£Ec‰”ª("¬W {®Éߎ€Kq²®èªLˆñ±q¤™¤Ž\ ê¥@àWˆ @²aæü~z²h‘tu!@Ñ) @{ EA».Q+¡úêÓ zjO^>úS4cïûjâÓÐÔjŸç«ˆ$FÇüzP'ÒëÓÓaÿ¼Sq?ÖuqQ®ƒ^˜€ôßîu O¦âß@ óÊõŠeNƒÑëÔ!øc«LF'ñê⤃Éÿ=1˜˜v_Q+zGú½ô­Ñm› ê%–¶bEô2Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h[caèeº-Á~Ú¶H BÁ~ÚØqQÝh-ÿŒWÛBâ€Èo¡Ö„JÈõG:ŸTP yÐÓI’5 Ä‚àV%d)þ¥Ð»¢KªxèEmêñ¡=’H ï ªaÁ~Ú aÁ~Ú aÁ~Ú aÁ~Ú aÁ~Ú aÁ~Ú aÁ~Ú `Am“¡j¯«J±tí¡m€P< ¶N„!ª¾­*ÅÐp_¶…¶í ¶í ¶ ƾ*‰vN€Ž öжÂý´Âý´Âý´Âý´Âý´Âý´Âý´Âý´Âý´Âý´Âý´À°F‚ع¿öÖdlX=›öÖM½#6ãÈb>ú³èC³Ì¶ã¼AšÜ±ËC_MkÄå$ôz”bÖËǽn˜¶¢Ê˼îh}EÄ%§ï§““è¾8UYãƒÒü‘[:Òä›ôf\q^ÆfdçA/­.œAྒsAFL¢îÙò2¯Ê¿=k+“‘¾ƒããBæÏÝàÌg\{ˆU¾ŽSLªoYnB¢*Y3T•YÁëÍj|Í%ðÆ3pÌY_XaL>ãZÛ2ÒG0ÿ£¯… ü1;$’WÜéŠoaM¥¢Wý|+6ÈÁàj>4ÉäcGÁ{£ QöÓÅÙ|²ÿ³Ï…ñmqŸÔjà‰›³VÇðwÃû>乘)øä£ºÖ⩉;G®ŒXþÚôW®‹GB^ì8/ÛAl8/ÛAl8/ÛAl8/ÛAl8/ÛAl8¯ÛAl8/ÛBÛ öÐ[ öÐ[ öÐ[ öÐ[ Al8/ÛAl Š¡ ¶.oÇýµ™)Bîµ’Þ¨4 h@Ѐ4  h@Ѐ4  h@Ѐ4$"„â‹×ë®glŠ,5%Å}ïYHÐá#Lj5âõ£L¤YË.D˜ësˆà¡¢ A¯#í«MLo7V?¦›ÚLµkXa¬åú5ñ¯1ÑQûÖ­Ëèšò‘F>þõª» r–ûüµ°¤:çrú.ŠI.Jc„›ó¥Ëè¿ä”™Ü•ôšÔÑH³WÑ>|ù˜öÕÙ4\L#O“ô*),[€,TßÑ€—È)ïVÐ&ôTPGþ“ûhÉ®'öÐü“!‹ƒØ“ÄÕGš¢zñäu÷ÑãcBùÚ¢)f4M,øa¥X´><4Òž(ªY˜Ž€É:S)`#5Ñ£ùhK@V0|ÛBÚ*ÏŽ²KS2’«]ÿk¾‚Ño£îu)¨øÒ;¢=˜Ø+äö ÿ}PL­ M4¼¸"’ljºÏ@Yý”À¼L¼,Ðǘ˜ÚZ2¬¦°Añï£L‰Øàýõ)‚¨<©ýµE  öÿ- h_Ìc|ßÈ‚âB…À1š"À=Õ$XßAh¸hŒ¦ À’¦¨ßƒàŸ=y}Æ¥"š£H?–©†ì¶„ h@emÓ 3 HáËñ-\¨1MwWzV€4  h@Ѐ YÐ Ã̃?dãs1°´fŒ­Š°@ =ÚЀ4  h Ù»žÝ_6îRÖ±3Y%A :ìÐÐVV”Ø"Á»± - 2úáO”pÒG9Ph™yq4hQ#Á:V€VNLXp™ç-Ä>”,I$ |× #36_NKȯjA €Ax#@;@Ѐ^Lñbã¾TïIsÙè &‡ž†€f€4àž,˜Äб Ýðhõú£YVse,ªOd?ÚÇï  &D1̘ìôòYEÉÉëÀ;=YÉÆž,¬tÊí$@È{`ÑñÑЂ@X‘’z$#±ö>ìu / ),‹‡`ǰ()&Ét5ßgØvz'ž(+°úO°?––™H€–à,ù5«H–‰ ÒÐwèÔoUl242öЀ4  h »}*Í&Tª€ëôÔ¤2&…xó¥"äŠÉ¼|(QÔh¢›KZÊGè5œ dÈþµÄL{÷#UÀdÇA¡¦ þgV(Ä™oÅýµ}Dj˜ h ÀÚ­fßGn/Û^ƒÍ"Ú h@Ð(è úž†²”nôE´2ÐÄWÂџ硬‰ FïB7dè@Ð ›ñÿmfF×E5’†€4  h@Ѐ4  h@Ѐ4  h@ÏçãÈU`ÎhøÈŒ@ T{ØǵÕõ®jIZf¨Œjn]YªÏæh –S9¹q;ÊXTŸ_‘k@xÈ>}”0ý ýï#.΄[ƒE¼I0Ç,²ÁrR•.{ß|…P?iš àì6Ï—Ä2dIˆ‚wšSêäU¤$ öF¼_µÞžD04äg¢1Å;DlTˆ‘ÿ0#üµ3‰0bCd:Ží?.WêqŠêª«…W¿‹üõ¥ÈŠáB·ýV ­™xåÍ‹¹ÁÖñ  í ´`1…®˜Ñ, º®ì›ÕøŒYyö¨ü8qãX21×ÒRz´ÖÕæúCq~oE-‡nÙ$i†¢=½q—þÒ(ûŸ¤‘ß辰ˆf´ÒSG¸É؉c7úòSþU¨1(ñdÌ“wž0¥b<ˆòM¡ìþT>Àhšeqb¥ÇÇ“ylÜœTuD!f¢ƒ9$b-{¯ÐùÓ%Ñ1a ¹ïsÌ6ÇDš$_W’Qe-õÍ‚5}w@h19x øùX¸Xñ™_lô¥’9•„ÒSD‚{&͵}øÕ¶EÙ¿#iŽHs°qñ¢H21Ô"ÐãêÓßpzCq~oQK{+FݾHâÄToÀyˆqèûŸ¤‘Þ¥¢âþŒ»ôG1"’3;ƬDFÑ’@¢Êä_äA±ßßU4F™9øñ¾v6ç6Ûíl’•$© 9`kÜrèyÒÕ mˆÌƒ6}å3!ÂâW! Ξ˜!\'ê'¶(Uy>W¡‹4aãA…»äλtcÖpë¡E} óvH' A»&ïKM˜­¥2väÈù}²ÀŽÕ¥à%™ìšfRA; ÍßzZl$ÐÝž\˜£—'pÅužBVr´z «Å(ð/³döIѲ¥Fœ‡|¸”Öðí£ ¡ä¤~Ú&)7œ\¬ˆbÅ0¶P äÊË0Ƹþ v@¾‡çu:&,݃“4P&X¹DJ$îÉ`÷ïÝë6ŠÕ”Éy—tÇÌLs"ž6àÀäÈA6EÄÝYñ@ê’¶&)¦|šoᎱÍ)—’Qe-õûjú-†Ç´É·6+¦0KÁ –A´ƒ]È·ï±]}µ[³-QTØš‡SaíC$'R ²’lG $w^4½ÙO‡ß·Eó8ì¸ÿ8ZLl¹!^@¡T¹SUŽÁ>kWä n\¸;6Úá9,j‚Kâ¤Zû°'óÏz˜°hÎÚÓ?r²qHc‚PÁÀ#‘1Õƒùö WÞ´¦‘瑼"O¶Èq!u14n”Í_‰`@[è{Ý*Zœ\Érs²q)UÇeQ)kJò"«ª{Ÿ:”ÁƒjÍ]²ldÛŒ9ŽÊÙ¼×ù®E°Kv{x¿Èí™gp‹k8©61Hq‹¨þg©IQv£ÏølÖ˜ƒVvËð󅃈ª­‘H©JH)bM‚MfìþgS`¶C.Ñ6.Þ¥eȬqÒ…Z€®€&º¿¾”À­ÃY7ÈŸj9qzAcPËü§’ÔÄÁ‹#ç¦, ÈÛ3_ti—³œ˜Þ,Îjq¡“Ï.é…Aådù«ˆ/‹¶çǺ°?Ù`w“ò²Ìþl{q·؆mV¬ c™ã(²2X ëVÜX#÷S mnÐÉvK夀} øUÝy¿µ5`—¶ý§ã¬n°¨•Tõñ’GDØóï¥0+{Û· Ù")Á1yL…mHÇѱˮýªÇ`j¤œ¹1ò°öè¶ò¢hذETX=:5ö½J`É,‘¿¶ 2«B22P5•u*šñtŒ÷ÀôAÕÄq²æÈÍÊÅ„.;(r¾d¯"¡T÷>}µ)ƒÕ4ó®éHdÇ`¬e$˜û=P òuF‚­ÜA;dÙQm™æ¨y"~’@hãˆëÃL x`;¡¦ ¾í‘4{\“Ä"ÈVGŠ~ÝÈ Ä:ìX h×Zb å`|^.4’¬œ¾vxCY튆 Äžï¡t.ªW°j9o‹•‰·C€BË,ET  ²G߫ҵ`ååfÁÄW) Š9\Œ jë®…Í_•PsœS¦oVxòfO»™óðdDBËŠC¡@¤v曑cTt {“­h˜—p†ZÉÉUä‰"2çÑ6hMŽþÞtöF¨F4{¾×·ÎD •—Å}9ZZ`I €½õÕù»cMkÙ‘¡ÅôäŠE‘Ü´3/)ö[é$W°ÐxSV+C²1rrzYóC@؉PƒúòSþU­bdãüCEœ°åÉ•£„c––0ñ°Û°lØü ÙZ Ò=ÐQûJ`ââí»šï©˜p CÖ”M"úa]<|LM)7àøâ´Ï&^ó³çÁVþt‚ãù„¶ 6;ûyÑ-‚v\ ñ§šUÛN$NˆêIa|š”‘ݨ»³Ç¿m7œ)ò’ ÂõãI¹MŽ ýkŨS 1‰ö¿ iU°sçÙ³ŸjÅÂ;9`¸(¦6hšÇnH‰²,ø­hm¦v—;3l\‰bÇôç$!`Ä) õ7‚OÕbìë5 S7mÜæÞ—*¼Ž1ñ=0 @VIæOl(Pªò|«@Ý4ù“n92’LP+Š*ŠH&ŽMgó~Ú”Á‡`Úó0DNÛ3@bÂá:‰ç’Ô‚(j›²Er¡ÕÕÄ0dcìSA•€q¢'Ÿ¥U£2òàb©ãF$ ­+`VfFdìP¤$åJˆy+,Q1ì€ RAP@‹±âõ i›t;T"]­¥Èl¡;„t>‘õP,ð¶ ‹ºöYÄݶ̼Ü]¶†›œqz<Ç`ä±6Ýü7|hõZÐ&m›%·³™6>CÜÈÐ͈Р’ßP†°½ßrtfØëÀQû)€£ö:bÀQû)€£ö:SGìt¦ØéLAC½@°Œ¾º‘} †€4 ]œýÏlÎŽ‚Œ üÇÛ\ç ÙÚp±_ÀÂä´Áþ’¤¬®=Ù¬ôL›\¦¸=¿¾C=Š‹iÊFäHógóÔ\mÍ4iÈÁy¤/µZÓƒfc* · |fg•º7J=µc%$ÊɳG'¨X[±°~Úž;.cW¿”$ímGTaËlÔÀ®†´a½–Š¡²t h@Ѐ4  º#BèЀ4  h@Ѐ4  h@Ѐ4  ™…>³#kh£¬?‘Ÿt'å|jOñü¨àɵæ4¦XsYCyQ¯6½3Ò§®‰m¯(×öa/²e¢cÛò£ üác}ÞŠ2ûIú!ö¹˜’Ùdâ½´pmvÕô@Úò¸sˆ#ÁÓ]‡È¾ˆN_Ë9‰Ó }šÎ?FŒ,Yñõr ßßZQhæÝšAÅuöÖí­ÙõÓBuWz¤h.ûÐ|CBâ€U÷ Åô÷þZ Q;¿: A¡2a¡4¯­ bƒAŠ&ÍV£è¤x:¤J‰ Ý€4 Ù΃Mýõ)ž¿_¾©–ˆÓ¦Fì’(÷Ð5Dh@³U /Œ/%ûé—ÈÓvŽÜ`qò× ó7e´ h@Ѐ4  h@Ѐ4  ©úk?mfF×E5“MS Ѐ4  h@Ѐ4  h@Ѐ4  âÆ\õ@>ç^,ÙïpD®dá¸ßS&kQ·'Y½&b,ôH>_×ʬÅFéš#šG‹›ûß¶¢l4‰2H;õ=þú¹0’“–øÑz­! 2çz±¹:3*Š…–&ÉŒÅ1¢ÔT‚?bcûꬓ¦5£³þšz‹õÐ×vôrÅÆnKþÎGçzçlÖ0%s25Ž|ýüëY?¢b‰L©™‚<4žµ/ô1E£ÍÆÉ@1ç Jrв;ûQ£`õÑ­»HÇlÕ¸äc7§ ?RMó#\r•è늭•vÊ•™cŽøaö4 ~Äi”ýŒxß²“os@Á&ŒÛxI÷¡à$€>çE›Z qÇÙtÜòd‰^8í\R=Áì2hc».ÙÙf®3ûi›.“—Tg¯ï©‘1*û”ð¡•¡?H³ÕÿÓUI¶\RD.âÙ1—†SÑ]bÇ~TB¸ÑÊK²(ÆÅKŸ<`\¦ØÒ¹ì×ì³n¬Õ+¡KºeI¨ŒM?bAÿ1¨ç$Ë„ZÑI7¹ã”Ç!  tH¢Hïì:ò~ú«7D¨'L¿ñ<ß¹ý/YS™¼#CbÌÉ•mœ©¿ªRF7mù%"yerUT– @ž‡g]`Û9OF¨r ËfXfÄkØìXïÁê}ˆ>ã]z"ßbeÎhrã 1!MÈ×ì þږФŠÅ¹…å vbÇ‚Aÿ0u2}““¼¶4‚9ànL EU$*èOV4¶ý¢½•“wÏŠtI¶ð#‘Â+ -¬‚|WŽ¿µøÑ;Z“ræ?‹Ýù­E'aÅQÓIÒ,1“5…D,Ô¤$õÙ? ×e³›è¶>^>S2ãL$ ,½ŽÅŽüˆ4‚¸±Í<0˜â™Öåb¨» _°'ûki Ù8ùq™ ”2òeäT|ýˆóàê’ÙL­ÏE‚Y[Ôaa6rù!A¡~æ‡ç¡œ™»mñåŒ'ž¤-ǤÃAlÏ“Ÿ‡‡"¦\ë%fRý Qg¿uæûeãaç®,Mô›Ühxîùüw M–žxa ò(¿mG$‹±0ï£Ç1Ä¥šF‚PèÄ@÷ šÕ(A¼`d!tœŽ.¨Ë$LŒ Ã@$Š$Qûè äÃ;H‘ÈÅ'¡øZ¯Ï¢?顆ìu°Ð–̹–,†‰Â² ~¤*l €AAÚ~†] F¬Õî/º|/µæüH›‹î ³C"§¢.í…Ž«±@› 6z5Â\9rdw\ª0£·Ëo™bV˜+´QŠ6]yr:®'³×î5ÛQË+'' çÈ~ –fó@ '¯ËS‹“•Hψ«,ñª?š5Ð&€'¯0D̶ÔcˇÔh=9!™£p%M ØQ°@ è¡°Ý—ÏÝ Û2âÇÈGã,.ÁÒ6b •J ªboÚ¿=l†¸ž)‘f‰ƒ#€Q”ƒbº#îÐôÅ6〙§©І>&Éacª²(c¡G¾É†#´afË+Çâl²òä<{q=žºý4ËädC‰åä?Ñy3M ²zЯz>cÜ`F“dF¨Æ7r +-GØ@׎ô2FלÙð;Éé¼r´r*¿%µ4H4,`A°@ èW~Ëggâ`"¾\…y¿ …‹5];$€t3gîÙ8ˆ¹i·‡Æ">R4…_êj …l‘c¢A$С•°Ð[2ǹàÉ(‚)ù?7^M‚¿ŠÇŽÏ]Šò,]„;†CD°ä3DeˆQú“®üuø‡çÞ…V3#'ÌüAu[6E±îHßA3fÌå¢Ú ŽgŠ_NQ$¥>ž^B›4G@{ùt2[kÍ]Ç,áA"ÀhþDtGØŽˆìyЮý†Nå…‰*Á4ê8°‘ÄÌ@º²îh~z ‘&這ƒå© ü",)j Hìo¿Ìh6sÂ|ÆÛ£viP€ábbñä,BÁêÈ¿½ÉÇÜðræ||iÚ6ev0PTш«Úî»ñÞƒeò²¡Â„Ï“(Db Y¯¾ÉèÍ ¬ªçâHâ5Ÿ¶”㉢à@5]+yCEñ²`˄͔;/ •b¤b½ [)>á…Š&9…GêK`ý*n_ü§Åž´Ädn¸yÑÅ. úÎ"IV{rJÝñ¯òHê®…üö°û6»2źàÍê4sý1©-#! C¢CÜ‚kPƒ1·| cæ“ÆEFW•ƒ1A$Q"޶º3#D90Ìò¤r†1IÁÀ¯Ï¢?éäS#´\Ï CùX n4I ž"‡øÐ¡g±÷²wÌLèá—} fG"ÍnI[¾5âÁ»¡uW¡WfÀ}†…‘•7L|¨ÉÛÜO!„ºF P{ ké$‚(÷`õÑ¡Z°Ûó¦Êš||¼Q°8éËÍM¨"‰ÝÁøö#B4[;sÂÛcY3¥(ôB3xO@ÐvOCï¡)—Åʃ6“„‘õ!S`A"ˆ#ÛCIP߇z¬ÎÛŽOò­=A"¡‰»"Å ²*ÍŽ…=L{Žjîi…™·¢,ÂC ¤ü‰ Gl(U‚ ‚@4dhGѲy“&žBBÆ¥˜…$€}Ά>åëDÿ–<‡^z…Wêì}@àÝ 4G] L¯9³ày$ƒÓxåhäUnKj{ бýÁƒ¡ nÆ>Û™>J7b‘ùG1JõJ ªboÚ´*VjŽXçe‰Ã+((ÊlE‚>àèAM¹`¤ç²*A"¡Ž’ÂÇ^H«6:~Æ€Jn9‹¹¦^Ʋú†IùZí… °Aè öt-3Tó$4ò3E,Ä)$;èvt ІÜ=h\í>žL‰Ã¯SŠýTx7BÍ×c@ûÙ;^sgÀï$›Ç+G"«ò[SDƒBÇöƒi–ÍÏÄÀE|© úÁ¡bÍD×]“@õï ¦gÏݲ±#\¸ðã)R¯õ0¯‘c¢A$Õ^+::Ëç…,Ã)¹H]—…|ØöÇf‡b‰±`+rÌ—5°7 †A ʾœüÅEÄQëóº= LÑ“•''*^©˜Ý ¯¾ý€ìÐЂ¦ÍžTåµCåf(þ¤…kÉ)º=tv:£ -µç Ç,删‘àZëô#¢>ÄtGc΀œ­Ï U‚i[Ôqa6bՠпsCóÐ&ë‚™ƒIÈ‘˜/áGH'ˆ¡þ#t(Yì}Å€¬Ç7:8eÁ_BY„Qȳ}d•»ã^,{ºUz™¿B"Ýð'4Y„jYåd`”:$1kÜ‚k@D;ÆÝ<|Òf"£,‘20f (!€ z5GBÓL3<©¡ŒRpp† kóèúyBЀ4§óýõ‰vj= =õ®¡Ò]™·[L|ŸmIþ¡ù˜Si#OE–ϱ5®xÚ7iÄÃf“Ž_¸mj03&i8{zŸÆ ûw­ãf.U¢ÃnÅÿ,ƒú1€Êh‰¶Ø E£÷'G#fS„õJÊO¿Õ¬b¬é“$aÉÄVýÅùÖœu£*E£Â&@$*Þ˜^¢‰\´8áax,¿ÜëXÀÏ’dœ<*í×òüôƹý0°E0€¹ýòX’]Eþzc܈ù (²ÿs¦03s²~G‚C£ÉÓçôšµúéŒ ä˜,":e﫱¦0Ïèÿþúce<ˆùLh¸¿µé„FS`pðÓH;ñÞ˜À¹LŸÂ¯Æ4Æ)‚áà–ãê-m1€ÎD@{eïÚôÆ9ý0°AÇ÷:a\þ€aa¹­ŸkÓ)˜'AìŠz­s–­öT i"ÌÀŽŽÑ] ’Eùè_E±¿í)úê$_âw#üôפò¾ÉЀ4  h‹t}?ÏCYJ7z ‹hd4  h@Ð ŸÏ÷Ö%ÙЦ¡_`ªÄ’„'‹ÿHýõi€àßm)€àßm)€£ö:SÁÏ…Ò˜'Óé:bÀzoý'LX"ØéLG>ÚSQÇ•:SAN˜°O¦ÿÒt¦àßm1`=7?á:bÀzrÿGùêâ ôßúN¦,ÁǕҘ'û)€à~ãJ`8¸Ò˜#ƒŸ ¥0í¥0x7õÖb« ¾¾sìúk«‰h “½kâ`Cà£äz¿4´0,Š®¾‡Wãß]ÒQÍÂåf"cK(üõÄèJDêN¿-n‘-ÉÂy£â’ñ!­Ñ>Ú°töf[Zƒˆ!ħg»ª@Pûï­vÌô¶t'9b•ýÅëW+0ÔFä6P¡A^ÿ–¶í+ S'!Ù’bƒíGYM²ºA<¹èK P=‰ÒNH‘Řàƒ7YЙZCÊE}N|°$Šëªû]ÝêÜ–ÉJ,Ï,Û–N;Å6ÞÂÔŠä¶oìnoXV¤mÓ‰| 3±#XäÃinËÊ‚ZìžÈòI=jîLj(¦ZfM ™¢1‹_¡ˆ$Sö${j98è(ÆFÌNà¤(C:FëÍ4nÝ™ªÐ”ÈÉYxÌ⯿ÓYmÙÕ¤‘ªv/ôE·>úÓz9®Ìo›˜Èѯ’=ýëßYRÙ§ 詉¶ì! Q³‚GêÔ›³d‹÷^A'Ú€Ôž[fb«£kæJ”¸ì‡*X­©ßDŠÖUBWz7¹Æ’Ù£ vÆAà;ª­/½WCÉÊ©m–W #6RfI#°4•2°п± {?}\Ô}t½dŽ\SÐç]VбLÊfÈIDr(óþZ曳i|léDÙ"&m)VEѯ5ï®ñlã$™LdÜ6œ_JvxËZ "Öì“d‹÷ù}¨ e&öb¢–ŠåänÛ†/£ ,Á‹-¡ÃtOB»H±]ê§R#V,ùxxÑbâí’8HÀhÐØkò÷Ö•µdÒbýLÿœ.h‚‰—ƒQ#‘R|:ãþz町7K²Wq“4î'"2(ãx‰(=è‚'ÜOàk¥·ŒÒ˳^$™6~oˆ$ý5¬FÛ5*Hè••ñ A(IHG+ˉ®Xºû^»Ó87f|\6ØñŒ8pË‘ `V%+ÍI±%˜ zê€m°»¸Åºn8íóÅ)‘}ÏÆÀØrC@Š Y ‘FôJÃhŸ–Ü6ècÁÃÁžT‰V’€y07@{{êc"ä‘fÚ÷9f†4â $ˆ$±Ì¨H¢¬(‚O¹ÇÛV˜ÉYS°f¼ìÇ8¤fxý;bÊ©®€µREמúS.HÛ¶b>,ÙI'&ž`篊¿ßðß÷üµU˜•5¡ØXŸ% Cêrå,’]Urvjóíu~õzÑÌÑ  ‡uÚFìÑŒŒ–Hâ%ÕP æ? Yûvj¨š¾…Wd>f~1§# ª‹šU 4€wÑýÏ 7F êâÍ“ÑB ËO%Q&³udа/X”ª‘¸ÆöTÍ“™!’]«!{Ìñ¿­1?°:æãnìÝÖ8;LòlíµOœ­ŒØæ(ÂÂCª‘BÛ‘×z윚/ülˆ²ˆe¬’dıóŠ.ÙR$Ø,Mßš +T¶¼?Ã\f”Èü‹I!P »ÌÔÐï¹ÿù²%*H‹ÝH¾É=òòP ‚±x{|±n™[«aȈ‚"ËlH™hÐ Å*Èì@³ É LÉçgŽ}!G¦~—hˆn¿ã=ŸÐû‘©»*JŒø;.|[áÅšøù3›iˆÈ((X@|‚A¾õJhÇL­£h·y>NHã’6"!!Š›ú^‡jìþc@Ú6`b¦X11+ k–"ÈuïÖ„nÌϳ»î¿Å¾p‰V–1áº}’lò»º A b±6ù¡Ýs7VÅ‚ËlHØw@7« Ø$Õt4åä䣤ÛB/jFˆ‡ÿÃAÏgÇ}}ÈÔn.ŒØ&t[áE›&>DæÚb²”ˆ$ o½S2ìÓŽ¹{Fx‘íç )!F,j€UîɳÕß¿æl¹ŠMÀãeM ˜íæOJ^$Ÿ¡–¾– ~+÷ñã½Ó¸íYÙ›ŒY±gD´‚lrêÏ×Ó/uл®ë³ ¶t´!ÏÆÚ$ÆÜsùÂÒÌÄOôPd(ú+÷îìØìP¶ÄmSíñågœ KÉ'ò±¹§$ŽÉ ä(ú™Í_‚µhit["\Œüœyv\‘Í)Sœ@±=tyófªº³ÖôVM2]Ž-­sÄN_ž[Ë ‰%œ*@,O‚:ëÁПÈÑóØ1¦?ð¹2HAoŠ© ­%Š÷Ÿ°™‰›>Rîx“ w’I¢ž ýH®,#‘÷ Øë­V]šYsÆ`I’“Ë¥l]B€]h¤Š'£Ø¾…¶jÆÄÓäÊ$åëÌ$ª®4еç¿ÃwךЅ‰òP´>§.RÉ%ÕW'f¯>×WïW ¹âÉ™ŽqRoL8âìÏÑü,_uwGQômm3v¬ˆváÛxwd•~M׈ùz ©$žÀªèAƒÙ4ìÐ$}®(°pvŒ‰¢Š5Thž: £É¾‡uýô%1˜3n{–$͇,Hƒ–AvZ`%B$Ê­cª±fÈЩ m¯4ï'ulø™(,qIŽI‰ÅĆÉòH'Àð+@™1îRÎ#“fÉŒ.ï úÓ“û¬5FÓ£<[4Ë·I´M˜¯Œ`1F*uR([Y×~t½ÙdzK“IÜrÕäɉcå\Dal©“Ø,Mßš +[2ÝöÌ!†˜í)‘¬´’®nij5IëûhdÓ 9ùÛCçfÇ›óe¼PÂ5ýD÷õ(WT.@©ÑkÎmèî§>'@ǘ䘖¾ ¤0“äÑ>ZÙUÞe9+‹&Óœ‘ V'’ÕŽ,GWãG5ÐÁ­šñò1°#x á«$‡Ûñ9jóíuýµrHŠ.‹>ï›Ï¸ñ©š5ƒf7H¤ÝWv\ÓΧÐ8ˆ¼•«òMž]kªiŒ-‹“‹‘º¾lyB~ŸBœ(¬jÅè!d’M›µVe¦XïRärųbHPðšn ×F•É?§g8šÅ™×•h‹\@º4À‘}]‚@ßd‹ü‡6Fv&7ðÇÈ*”dÅƃ² Ïcªûú)ø™“d®ç‹0Æ’HU%Šx½N$WÈ÷dm ‰YvieÌg€A&JO,^•±u t¢’(žbúÙ«cO“(“—¯0’ª¸Ò*מÿ ß^kB'ÉBÐúœ¹K$—U\š¼û]_½^€ŒügÍÄ|DÈ1úƒ‹°[Gz¸"9´Å¾É¥+Fêõ¶$õpAÍ—l|x³š>;Ó\ä,ìð©å̃úêxâ3tKíÈyz„~wãGƘÎAü""oÔ û›ó«‚&LŸáP© ‘ùé‚ü!€û뜶mR)gשּׂ#ZaªLCRÐÅ–†,¾7ý¥;÷ÑSbšGmª$t5é<í±÷¦>ãAL,}Æ‚˜Xû2 b?} L,×Uz ` ‹jÐ5DØû L‹ûùw¡iÌA¡ýô'šÞƒâ–¿òд¨©ž€ýuZa$FåØëP´ƒÔ&ÅhLIç^Š…2y}7bô¡Sµµ×ZYS²‚ÍØÖ :eñÔ}C[]} U#ßTËvN„! ­RÖoC_‰e$ÝèÐrìQ¡+VG!ËÀ¯ÓVÙqD–ìì5 L©ŽÍh\QK»=~GA"(¼·GQ´‹M”ùøÁ  ¯}L‘p+üJ)ˆ:d‹…û¤ (Ò´ÉcÜásÄß~:Ó à‡¤ŒâÀÖŒâ¥UË ªÙ *0%¥¢µ`Óqõ_è‰}•\žDÕy$j7F°-ë-t<ûS8¡o7ŒØüµ-t|þ|üa/³ìµ?^õó’M6Ϧíiû¤(TRú©Ò‡þšÔc—³2–ˆ\ø½VSp <ß–£ÅA;/Ë:3q †Fäͧê’}R,€ˆ³Øè×ÛÅ{ë›P»ýWì¸ÜK"p–@ЧŸ§Ç‘=Uد¿#Šm:¿ò$›I¯þ n±¼jØùf˜@ #É&Åø¿¶²šÞK¢´ÕSì~6~"ƨ£ò½eKFåf3¸òÍäÒ¥˜h¢j½ý¬þºé(Å@ç K#©‹¼ãbãdMÊdH‰Eo€jÿ+ÕâjÒ3ÈŸbæø‰ý)¢l¾`2z3Hª©4MTHëÁ®­§£šM"1>!)ŽòLlg ÈŠ¥Êñ,(W&–ê»?®‹Ðyùêm‹‘6çèä"2²DŠÞ¤€Ð=ƒÑ«¡^|€5rŽTL^6'pÞCÊ®¹€8â= Ro»$]Uöª÷=yE1’4¾ñʀŻ0F{’.(T(€jìš}ÏÛ[ŒÖ\%ù÷­¸Ì¤Î¦ß\óW£X:7K¾Dv©²°ÖRñc´ŠeÆuR@$v@ºèó¯L{8H6 ü¼™§ƒ"w–5T’ TFY •${Ñ£ìÉ;þã›… K­špãPXý,@PlY ÑóýÁvWVf]Ï}¯)¦XÝr,€dJ×°¿ÜUi»e¨±›®fõ…•ó’I:b$hY¢ñ‘ [•µWצÚÄK½îé»´1HJÅ“rÄq ü@bH¾E› ¦Ç¹¿"ZÈÙŠû‘ß}¸ÊѬM$ñ2%Æf>IúEùî«öz4m3îM.\Ù++EY#1«PODŸ$ŸÏT†œŒ¿•ˆÍ*9QÑôãg=þJ ?¶¦ÁÏÝwÇLh_IâäúEŽ9YÐ̉’‚AŸ~Ãd§ôhÙ3s²¶ÈåÍUõƒ4r•"‹+$~¤֨уâ ïsÂÍxq% ãã¬æ%U<ד.H$Tm‡ŸaL[Žçšw©[’cΈñÐ¥V $÷e› :¥7ùòkVt‹Ý¶¹sŽFTN®¾ŠäŸ¾‹ !7mÈE•ND¾“@Ë;ãSª»S¡@4 ÑòAºÓv Oˆ¥ƒ X§ÎA–`†|#±Ä7&Ð'Ø¡UcMƒ¡±æÍŸ³ãe´¢F’.àŽÚ‡/vö 6Mïˆ7½Ï 6H°ä ãã¬æ ªC¯&.XH(¨Û>Ô§h´€Õwö½#sÆN.FJ¼bä‰0Î+É$Ò‹$ÕøBhFÛ.äÙ¹鸜•Ž>&ibP[6U õvMb]”nÚûŽ^ÖË>{ VySæ#E–BD:Ø?¿zØ0¶ë¸Á´ãO.á3|ÞQJ"OPÆCÕEäÁTv?Ä|uS`vß21ðà"Q)IŽIÄXË5Ì…’I O€(^­2hícdüÜåBÅ’HãV>::›8ù[Þä›ÛC ¤ÇTQKUâ€đ|‹?@) rØÑÙç1°=½µJr_7xÄ—3fžw¼"$ ì 9Ã`‹¾£èž…I¾æbãå¡Ï¬F¹SÁÅ‘dn$× H5äѺ:.Š^ ïˆò°¸(ÈCšRR‚!)ŒÇÉo ä ×ØÖ¨—¹dK³Å¸bnÓÄJ}/,¾E …¡äØôs·]Î ÿç™R|d—$ã*0–²Å»âš /²~Ú°dš¨.„Ð,’ß`êlhϺædámy9± - ,ã—‚@$k¥1|;¸gäddC<­*"¤M"¨.ÈY •$utEèoy»Œ 8B@Óäp&%RüB³<ˆP~š³t êë@#3?%¶¨óq÷Yâ`5OEå˜!H£dA @ölz»¿Ä3`Í#fÁŠÑ6W)ág T_·â$ûö°DÝDå6æyK2¨ÌŠ$‡Ð¸Þ6 rã`†'»¯¤ ³¦Æ‡C“¸&öqp|…UvÈFB  u}IõÕÒŒÚ'Üš\¸3rV‹ *² @Z€²h|’=­šBÂõ™ÄŽNP,s4~´á9F ¿ábC,°GÜhžÆìy¹¹{\ræ…d”©YX©#Û²/ûêl§?â ïsÃÎx°ä`qñ–cEúד,H$Tm‡Ÿjdoãý`ÇÛcÏ…gôçBëÊF1±Øñ<–¯nÀlf®ñ•“’®‚$’%XøñœUÙ$Ò‹7çÀË@æ`oûœ¸òå<áÑö÷ž)@U‘k’€•€³fÔöu> ݶegdA•“¹MŽ"¸—&$YQH¶5\xô@4h†¿[3#fÇ6^N›&Vu2·£#Æž;4!ÁÊÞ³Ó|h ”˜áËŠ)¡ ¼U( MräYúHzû$„âî›âJÿÌŒäM ý*&^E@ Y4™¯#£µ·íÿÄ0ñwb‘+ñÅ€küôÁYTì^fTßF’dƒ HÊ(‚¥“}Ÿ¨ý…Wë«(Y˜ÌÓ6ÏFV7"‡u©â²çGŸÄË̯’¯ê!Àl„fP‘h²Š¢TÉ»SÞž4Æl¿­4xÙ/>[”ÂÑdÈŠ.7b¥è+¦aׂ/í§‰ ØØ³3q6ã‹;É6q„ž*d ÆdUð†6ªz Iýu¥‘—6)›q8˜¸Ë7 ™VuâO9#`µØ ½–$wJkóŠ Í9º ÜÌ…‰eÄ,ÈG”aP*l¹b{Uaýž8“ÈÎàø~5NÊ|ûë>2ù ÑôÙÉ?®‰Pòš"àÅ0ãÈ‚ý%”± bý¬~ºéâaÉ2›&NT¸%³'õdIåF“ˆ[ã#(èt:Z3´'âÆ\(qÖ)š34ü Fœý,B¨kHX#¿îùéwÍæL,LU›ÓË–9Ôˆ•I’T`€v å‰éz¯hŒÿ‰wHòpÜ«.YF C)$ÈXH(¨Û>Â{•½n ¾4HLPåŰ…^!( IȳôØû‰Z óp›yPe/ä͉ÅBÆËȨ 'Šo¯¬UxV¬Ÿ†wÇpÊæf2Å‘‰ê«PE+ÍV»*9Ý›SÞª;Úæ|EŸ.8ë Ï­‘é–ÂÄ*†êÉE‚;þàUØÍ‹+//kŽ|î"p^9xž‹+$W]O÷Ñh²9?üM•µî->A_J$‘b µ%±äHTTm½ÇŒ¹$mE´*ŒIÝ.<Çô–t_OÓ_L¡PMšåÊî¨×áÉÖ|±«5ã’añ;Ÿ)sÆd•Y5¤©‘5WfÕ^’!qÈ®×ñŒ³ÈÉ™œÅ&Åä$·¶,(µ€¬ÚŸ é.HDZ9>†áüSÎ,ˆs`üÇ£,ð©e °´»£×~A®ãå‚*â›f·âì3·ÀÙ“–”ĦV -¨_C¡Þš Ð\SjÇ­›Qeÿ-O< àŸÐ­›PKãSÏø&hÛ÷ÌÅÌPIdyÜy#'£ã”{5KÄ5}Yve+¢ÿ}YFìȵrŸân‘Ž cæ^2°÷«Uì]ú Yœõ¥W±{è<„_®t¯Ø¥ôA‰À%²ï¥~Í_èuúrI—Kfi}¡ ÎoV¿c/ІÚUØÊe&þÚÇ}šÍP¢?ø­Þ«â±äHʉï©âˆÍ‡ð_üm§Š#6OðTóëRoøÇLeö2‹ô-?üvÓK‰Qÿ¾:Wì·N4ãÌí¦,¹ 8Ó¨³;~úbÆh£ÆÉø²¿¾¥K쉧肄²Á¯=êÿ’ëè°†Gíg'­Zý‘´y¯ô¿ïÿ aÇ‘³Á$ìíEWÛ\'•öu‚‹GOô¥þymŠ`,Yüµÿý¨û‰Ø?|EéG#G5¸úÇæù9GEÇÄÖÑ-ñÖü©ÏÓ›Á¯£Yòs2á—G"ô¥ñâÌV Šr¾ ÷®©ÍÇò9Ë®ÜP‚ß§z–’¢Õ»+ò{/#¯kÔøšvU0° Ï‘®Íù?}n\¹JÎqãIPül ¸‚I¡`ù>ÇW&ýŒkÐè¶ý¥ç $ nÍêbŸl7%Ò6Ù°¤áÔƒäßiÆ+Ù§ô^]“áмýq~zoþï])iœîR–Ј6͉ò(¸×t°±kômåyVÇ˲ü;—I'Ø¿_¶µ,q«1,®…—áÓL?áæzÿ=--…’} ŸjØãƒé”ÿÍßýu™+Ýš¦Õ×±˜€ih“}9¿úêÚnÛÿÁZ’U_ù+“¶lª€FàïÈÞ¥Ó» 7¢øÛ~ÌéõH:Æ0f²šZBgÀÚV{ÐùÖ²QXÙ[vÑ¥6Íñú «ú´i4•ôK’m¥¶f| ©&à;ä±7û·ÙRïEçÛ6tAéËä÷nIÒO§dŠõB206°VïÞ£“[³Xꋦ۵˜€ijü}U¨¤îÆ:ª+™…·"’|Uê=#^ú&=°ÅÓ‹>u‹ ±rám±Î°£ç½YJÕ6RwFÝ¿hØä‰å~|뢩So£›¸§K±™;'Ñ-¬÷g«sõÖ]Ù…•UÆÙ~—éyª‡_]úèšnì<’ªÛÃ<¬T*´òj69i÷d}ïG&)°Íš3äÂ>ª°kæÔH* F +¾†™2b½ðaˆI.JÇÅå`dì’H>:¡×Ÿ¹Ö“$•"Ø»fL™˜þ¯9{“œîÁ]Ñ$_@V¡×ZÑÈÔ= ™…œ‚<”$ ¬®U”pAȰ|±:M³m+c}²,(b8²Ý6|Ÿ7wÞ†¢F^Óƒ›0ÈÉ€³¨§aÈ`0÷D;ûGп‘‹ø.&àÒd"BÖr€@%A¢@4 è5ŠÊ'VêH~>É‹(Ë¡—…1õÞˆõÆê»$ è›ó­(Ò£7»²m8¸òA•‚¼KÐÍ]ÌQïΤ[bI“eÛ—LEØHÁÚfg$UD–Pª={kftì|h±•€g,Åܳ}É6I gÀÛBH®á¶aîj2&n €Ë#)£Ñ¤¸ðhXèhdm—* §ÆñC v @NBˆ kÀ÷ñí¡m•}£l¿’2s^«q,¦+|I $uCí¡v¬rŽrÂ}Kf›R|¤Ð&û lýÍÇ´i2˜{F9šx}`ó‚%'&CvtZP#° ÕÓ‡;ãÆ²++Œ‡æÕ@wË óàWÝŒÅÃÆÁƒÐÆŠÙ&ÚÉ$Ù$’I$›$žô!l\xpñãÅJ¤h5²h@}ô36œ Ù—#.Ì ¥ØØ €=€A®þçAt3ø~'ÏÿôÚ=KŸ#ø.ꮼ÷~tÊ&Ó„3Îä¾±OÌ=Wt*ê…’P&ü÷¡mŠÁÙ°6Ãèá$¨œJ„ù™MšˆýÅOf»E Ù6ü|iqcI}9ìJ¯‘#]Ý‘dM›"‰Õ3“•‹— ãÍâ„ø9R†¨QRè‘Ñðt §Ù6é1¢Å2¤*V?NWB‹R …‚M ìh[f˜¡5‚¢¨UU>ÃB“iÀ“4g¼Ê5‡`¥€ ÅGD€h,}úÙh¶ìLl¹ó „‰rxúÍÈý\EB‡Ú´-èT{>+<‘¬¥ž>GÈv`¿`X’¢ûê»ì5E]Ï·.4˜Þ‹2ÌAÉ#31D±$Ø¡FìPª­R7²WgÁ\a‹•™{L—Vf7d°`O÷'Ûí¡-”“`Úå\t0:|ª‘ŠgB Õö¤MvO~~çBÈÙvü¢§"'rˆÿ5¾µÀnþ±ç¦¿'îtÍC@*hâž7†XÃ#‚¬¬.Áè‚=ÅhXöeÆÙ¶ø Ÿ ac㌼åf. ×lI5]úöÐÓt1¶¬'ËÄÂ8@q‘•’…ºêï°H÷:nÅͰíRCc:Œ~^‹G;©^_ˆÚI>ä’Mþg@¯Ðù11¥qäFeFVPÌnÔ‚ $Ù äþº e_nÄ—1s¥WwShV(¦ªÂßh‘`_žƒi”ÆÙp0ò/$F’FwwâÌÞIRjÿ¶„-‹´áádI—Ž²ó—¹ Nì ëº$‹5` u 1§ÔjÙµÑL¬|è–,„brR®U”ø°A5ÑðH÷Õ3Óû>Úøðc60á‹"Éò#‹/ƒæÏ“æîû½°ÌÚp3f\Œ¸ 2€>—``0ö»û t>\hfxä•,Äåã$Õ%èHïï¡Wf3¶b¦àÛ‚ú¾©IÈ®èqº¡Ù¨c½fFÖú)ɶ@$Hñ~™c1²³±{úE’vz?a©l×6¸³c¼‹1_X¼îÌÜM¨’hÀ¿s÷:Ù™±q"ÄˆÇ HE“rÌîv$×åãC%7 »sˆE–$*¬’fNÇ`ž$]tEø#@ ¶aÉ>6T‘3IЬ v‘‰P@ìýDäÙ÷ó +&շ˘¹ï 2†åaØ)`(1Ph E_a¡SdCµ`C˜s¢Ç"CÈ­Š‚ÔX…&$v@÷ùê5e¾ÈÇÙvÌ_PEŠ8ÈœY‹ýB¯g¡COcø‘ͶÅ."Â̲d/#3È’EPª=bŽ©vCìØ_*¸‰q™9z­Ì9$–å|¬ÙwF¼u¬¶i+°"L\8Ф`QØ~gÏëäë ³I#.N,ÙÓ¬Ù8|™@‡ 0À ØÀ³÷:Æ\†±€ÃŠã-wU„úþŸ¤^ÏỪºóÝÕëMÉ#5'4™ÿ,Dƒ‘“ I MH²@÷~NªmÄ4¢Ìñí'?ËcZÌœX–{ú@$€;= Ÿ#_NÙxsbÉŠXHArîÌÄ€(ò$‘UÕˆ±ZÔ\šÙ–¢™”aÈ"KŠÜ=RêÂFä“mÊù_d]Ýñ¬9NÍThjíäF¸Sá0Š+e ˆ°A õ`“t.ε”Œµñäfˆý1½(¨ Fæj¢$aäfe&t‘ʲÅÒ0ÀÁ"¬ Ý ½W)²TDÅø¹³fEI‘ÇÖpOÕÄPèô(m—A(Ù.DÑ>Ñ*zd5°áßÒ$ìô(~ZEɽ†¢Cí‰K‡3ä »I#3ª<‰$U £ÕX­¥Ò"ŒX´ÛÝ 8‡¤†E>£sälòå|¬ÙwD™NÍcmùˆ£Æ— „QFQ;-(‹H4,ÝY½‘*%ò°†AI¥Â²@ ÅAØ{‚s£”è%_Ìg†^qØb<m3’ D™òsÛ#ŠFx‘ÑÕr’t‹"9³d‘’D >,˜Ñ6ÃŒLxØ8r0×OJnBEyݹwVz&û"‰»Ó)¶*$´ø‘áÉŽËD\]ƒ- 0 ƒ]X7DýΦSE¨‹Ÿoõ±cÅ8L5"0ŽÊB‘D$¬ÝY½˜¨ö¼=ÄG>f%4` V*À Ø;ë³®‘ºÙÊT‡¾Õ·Ëš¹í 2«°ì°+tM‹ôÑ—iÓaÏ‹‰O#Û±PZ‹·@’=þzØam;~ß+K‰Ve Û± ¶O¢ÏCöÐ[5èC>n6tb<„'‹R®U”pAȰ|÷:øŠm›m|l|gÆž4‹$ ÈŽ,·Fï¿'Íß½è[öyŸŽ1ã}Ñ׿kÀ?ÿ‰×šn/G³‚)öq\Ä'¥ŽÏ“Ùö÷««×›7Tz0‹v¤LÆDR>,Ð>ô< 3rTÆNË,0%ý$(ýG¡öoíªæßaB+¢Q€ÁA£ä–$þþtré…‘1¬qÅü»¡àM~çRRÉÛ*ŠŠ¤Hu*/ƧĤ‚¨U“ؽM0uþ _ÿr?§^Žó8sþ'ª”…ý¼ëÛ#ÇL¨ 7/mdÖš3îÝà°ºÔšø~FH=a²c«W~u„ôiÕŒõ¥••>Ï¿¶­»èR®Æ,ÛŽ9á2ñöÖ“št‘—‹VÙÐì½×Ôº+g9Q\’LM@ö:>‰Î}ä¨Ð õÊÿGòYS)¼XÉõÓCFœH‹ÅË"¼­¤Ù͸¢ë‹Œ~“þbµqDReâTéHé~ÚÒÑžßcy¯ßBSk÷Ѐç­ ñ'AL©rU Ðs?a¡~%Kw罎?ÄØ9ùÒF¸•`AnýµæåŒåÑèâ”#ÙžL_‰=$y?}f¹¨ÕñYg‡âY"ôŒ”@ózµÊÐÿ”™X!øž*d è“Ýé\Âø™§s”Êsä?RÒ­(ò>Ì7ƺ¸{î9+‹-§#äê5Ⱥ5|m ŃyÊÙ,K_Ò/U.FKãEr$ßÌbLt—°N³)r–+Œ×°M—>!lÕ!¿ñk¯›[9ò(®ŽŒ`Ø×SŽÓ,8“\Ë@û öйA]èK`mÄ8é:£/ÐPþ_ ¡ý ¿ACú4~€Šî…j4'!Ý#&5ЎѤ“2I™œ‰ÈÁß¿Zæå#X¢#Üge&P¢‡BôÍ•Â$ÊN%ÔƒCïï¦l`„ääI–DlÁoÁ¿ËvkiŠ’% c]βՖïFÝ£‘Œ€n¼w®¼nŽ|‰3D˜e3ƶÒ}™MÅhYÚ¶ûÿ±&³„Kœ¾É;FÞý‘;üµpÐòHáyëåöÓý æÂvñÿèÓû0CÈ×±qãÁÑÃAùk $í#M¹GcÕxëMÙ”–#1ÿkK£/¡¿®©€Ðà‘Ö…]™ó0 ËˆÅ:¾'Y”mlÜ^=WgþLhŠûkŽûÛ$…KƒU£3+¨-Äûk Ùh߇WíãB@›­·‹Y#ïã]"•“i”›!b“Ñ^×ï£k¢¤û† e´ìß“«ÌÊÃ3d²¸j¯'UÆØN†Ãh¨±çD¨Ž@ð#°.?¾«VDÒ)<†5¨˜ö jõÅ-6s³fÝ TrÆ:îÛ\¦çZ;EAvSrÆ3I‘ÄÙòe'[Ñæ7Üœ¬l¹2ÔOZòr:z=|qN;91œ© l$rÓ:âAYâ~FÏæ;Ñ;#¿cRBËÉ¢rM)„èvN<9dœ !’<Šûþºï4Óu}§6šÝv.x"AkW1†e=v}€«>?*ÖãÃF%Ë$6L›ëbUJØÿ®³„j½|’ÊïØÆÚc(]ƒ«ö:ç«ÙÑÍ´èN6"ÎÅcVPPX`{ý¿=t|Q‡nÎk–RëCF!|VÉŒ[˜Õv}¨’<{_UÃèËæ›V?oÙáÌ!uu,@1¿.¨y4;ó¨ø£–´UË,~ÍY ˜æbÆÿyJ×ì«àãöEÏ7è˹ìK‹7¢ìÌ ÑžWÉìŽ à’I^ë¡Ù«ï(Æ5èã.G)Y¢=‹n“;äD®$)Ψþó~<ëÏÿ¬ïç•Ñž-’3LˆešEtÛˆ²÷Ðü _›'±ZôO‰8SýcË%;ÙöçÇÌô2ÃÉ ”E4‚Í_ÜÕýúÖ_n-ÿ½—ËI¥ïÿ¡qmxœ$w™‰2DßGc¿î↓Î/Mwþ¥„Öþ‚-· ] åœôÄÆ+Ÿ¯>oÛóÕ3±)§Ã_¢Û–Ùx¾¾%ɘɡçÅÝ×Úµ8ø£߲ϑÊ5èÕ‹ðüÇÍË/WDøýµÆ$wæa9 AÔD ¾Å¯Ï]ä¨d‚‹¢x{>;ÔËm }š÷†Û·yñâþ++zü"%!±$†'L•™ò²üoÔ†8_!³"eq%Ë\T2‘]-=šú¯Í[+D¦™£|É>'\Œœ)‘¤‚eRYJª‰5þdÕÛW`XÕ¯DiÖÈødú{‚¦2c²¦\¹qeæ%”0¦c@r#‘÷=÷ítYÛÈÉÉHKaÀ®÷ÒÈüAûöÿ¦¦Å#“ñù¯…ŽÛ† ¿6ŠÒ—ŠŠ0VrBŠ A ù l- C6]·dÄ7!È’_GFCn 0À÷P šZŒ»¶äÊiå£l9²$ ÇŒ`ŸÄÇ€$J;ò4}HiâÀªN¹±´DöòF@ «Ý„Ô$Õï`ë1¬K-Héb϶Áñ6Tå'©,YkbÁ¤$Q$Št< è i·D3|.11æ›m‚Lia£ÔËÄ_LØê™=IEﬦÊÕÂÜ>‡áÜÑOL…¢VÑ•ŠX¾ìÕÑòMYÖ¯tCÃf(öâqä…”ÊÌ#Ç2E}ðuÕþ–M(ih”Œ_´H *Y‰?I@¢}ÍÐIÇÛ6écÜò!†,Hd±–EŒ(ÍÈ? ÿòô]¡'"/àÙ˜¸Ña˜Rxk#.=²ò  €ÔAíMuÞ—ºã²8ÉÆ8ãunßþËǃ¡Æý®¹ß°­=ƒ¯ðÔœvHêèÈ)$ùhÎÛ ·Ó¿ÄÍé‚@éG~Fž…#¼7<ŸþÌúþ«Ã‰ü7Wu^z«½- G? #mÇøŸ*²Ë41–F›“ ! IèxÐZŒø´ÉïµA¸F«'.NÓs* J¬ä“dvIóÕØ] l¸ÓẽH"ž&gÀŒGªYK©ìŽ€ ›ª=ÕQ[±h¤í1ÂùPOâdú8ü}2H ÀXš°<û…"wl˜òðp—2¡Æh'ŒHV¢B …‘A>J†(‘ÊÅ€N…=×.QÛqŽb·­è'«ËÏ."ïó»Ö2d¤p³^Gø¤Ι±4%»y"*¡•{°€z„š¢H÷Z} Gu7Li²'€——)–0¦Ç!`Y l~­hŠG ttyp²#Ê—oW$2ž-rÐ^,M@UÄ“Dö´+T_a8O›ÊHÓA†N1ÄÝÚò‰â#åF‰'îF›¢!ÊÁÉøkmvŸH`(¹äL1‘Ä’°H4G·éª)ÈùGø^÷?“ŽoN_–ùË !'ˆRi ˆ:êõB½þi§ÈŽÕ£áDøm¨% OøË @è‘§¡Hõ>«}í¬äÅ õ[ìm2b‘“z“$ìùCIêü»ú~ŸâåÄÕWw~+»Ö­ G/ጬ|5ÎÌFEÄTY ÀHˆSÉAd(BHòIÔÈ£þ!È‹;u–1,êï&BŒT°µ°O‰êþÚ¶‰HϸämÙ_FrãÛâG"ã…¥* X в}R“¾M·¾><î°®XH™RaþÔ@`@Svìx “G«ÔÝDfÚïàÄ1äÉ|èe¹£‹Š†R XZ { Wæ>…#T8R|E&f6qœhÊ´‰¥’‰$вßüC¥¡HËðÉôóÒ¡ vÄt®ÉE±dÛ`ø£/´õ%†2ÈÓrbÁ¤$I"…t< è fEZ#kÛ6ÆÍË˃ˆ—UX€V O"EQ¶%O_àüõûm¸Òãm9;†É·…|Ù‰aU^1ŠPÀ1šÀ5e¨ûlÌ_ (]¨Â1å‰S&uU•$ [Üdx&û ûQ">Ê|RØ NlëG•œ¥Aþb’jèв Ð.ͯº`¦F>)ÉòÕŽ7aÀ’ëÁÏzágs?Rt͈ÂOrIU «ßH¨Iª$Žì DVîŸi&3¬Ë@¼‘’ÅYØQQ…ÚÈèFèÒ‹hÇ·gO >ƒåmµ–dñ‰GA˜ƒ~¡%ÏÜ ±¬¹$öUEñ³£mÌlxÔã»Àç  0—uÚän‰&ú½ÕÐqd¦Y]¹1‹Ã.9Ü €X”>A5Ád$€O|@Ö™+ âèëü?¸¦>Ó3HÎ’Ç#Ù§û­j9Å:*‹jÎoÄÙÉ>âáiqѱ$adHÑcÀ=ÈÕÍQ0iÃñÚrÆsêù×\n¼øóí©äUaAÙÂÚóK|F$Ž•Äó è}O,Ac~FÌŽŽ®iÅm3dœL¹0íø[ Ö/ÇꊘƒeÉ.~àcU=‘¢aÏHöüÇ8Îð³cÂ@D‡4°k´ ÈÝI=^¦JÊâGά[Zã“ °b-j¥‘ué‰ _|@Ö™+.2¢¹YQ³.NP¬3"Ï0éG!ÁÀ>[Ó/¸&ýŽ™+¡‹=Ù¹·ãüà&Q ú¦»åBïûÞ¦eP~̇rÛ⨥YÕdxI)ì“=]toßZR³.4l_ˆp$È›—€€ã‰H±Ùèë9nËŽ;·fI6D1I_me•#übaTÌA$ÈIýÀ {®IÑx3b]»7å"VÇwÎ<$PK»@¼Õ’OW¦JÆ.ˆÉØ1¹E4+¸P!âPžÅö‚BHÝ;­2WCDdäÄÛ^&\¥ Ì‹4Ã¥‡ûoL¾à›ö:).†/²w\쉽‘ôä L2H-„À’UôÌÜA#Ø|3M™é†ñЛ4@£œB9ñã¸äºÕsŠdŒ ›tÖ&IKe<™X©ŽÈ ‚?QØÔ\‘+„Œõ´cm³$S¯§³1âÜŠ¡v õdõãï«•:&7ŸnØ™8“"¤<Á˜H*2 7ÀÕ€ÅIÉy­3Ýs²ò!;fl… Ϋ<ëÒŽCƒ}·¦_pMûU%Ñ_e÷I2²0ür-$·® %cø™¸@4~FªvˆÓLÕ˜doŠH «:fÄa'¹$ˆª†UîÂêj‰#»TÙë7ġ֖uÉÈ\„dxÉb»°£ùJ·^ätFš³?ÄŸƒ¹¶h‘ ©8U™öÂ@ÀÙ·bd=ö‹ tz} œ‹˜®69xãhÎPú梫/d¡¸’’‘¡Wa²çA¶ìxI’äI7£‹#)·˜G`}ÔöÖ‘^Ö7ñï3¾‘D%LdýÁ6æM_å_–¹J¿Ç³ÑŽC­æ_*<ÀÞ«Ûòÿøë̯Åþ?Çù;¿ú¿çüÿè1ÀH¾L ~*ö¿Ëÿá«-qÿÛûúŸ÷ÿl¤\UHW´·5Ø?ŸÜöc§&NI¯½ø8ÜR§õ¿ÿF@çåÝ –"•HúGý/òÔ’ù%?^þËqn>ÿÐ1£cŒÄ'¢|öuÏ™\ïûàßcÿrʪ¨ ×uÕk–ε{-‘ ,;¯¦NïÁ¦÷6ÿäñûëÑý?æpþ£þ™ê¤óßÛ^é5ÙR~›Ƚٛr°ˆ'ÉÓ“£QüŒ+,ËDr P­rOGF~a‹›^ÿ]KiŠ´jÄ éö×O#F0VOñ©‡þçSÈþ‹‚).í,‰ÃÓ®¼éåaAõåªbMxûë9²â‡Á¹Ípábu¯!0²Ãy˜÷:¾BxЛþžWôF„ °Ð.Ìmÿk?¦¹¾ÎßÄfƒø—ÇüM­®Œ>†²GÛTËT H ¯eit5¯D¦¬xÐR-Ti@¡tS'¸ Ðúu™tX–O~úäû:•*z€ºFÒô”ózÑ)$¸Ä}ëM´@Š34X‘z”ÙoTkÅ…±¥ôÍGö×D¬Ãf°>k[0Ý$Ž hJ^ÉbW¿'@¨äî±fJÅâSjmH×LÎðÅé ÍÊeŠüU®N2gE(¡§-h§`€t­÷ÕJQ&¤ÎVûò¹(×ìÊ/\9/Ùߎ«G$Y÷a‚ÎT{ùkŒb¬êÝ#°›DX³ŽHOØç]œ)œó`‚ÿ–”ŒäÌ’B¦_P ¢€jÿè5–ýUeÁ ¥ k>çP>Ê…nD—~½´Á_ÔaùiLhºL€uo¨c¢?¸ñªi2DðãÅKTQ}ûroþº¶äÿe¬WèÓ·J’e PG~Nµ³LèeD[ l(ù5Õªg$Ëeçáâ4Ä3@ zÐ$Ž€' MY×Jf/äS„Asß`ëœ{:7dϸaË+bE?Ö,t¦¬P4j‰‹š÷Öåuf"銋qÅŸEŠVcò?A²;޾ hÑu©‹­–Ób%ÌÅŸäõ ¬dä„M(€{±]w}k./£JIl˜òñ“JŒì¥Šý11`{°@*‘¦/¢6™çâ® ˜;zlœ„‰0®Í_޴Ž$¶;ÇV ôë³ýŽ¢´YS2eäã ÕÇõ[•@‹¢j®ëΣŒžÍFIhÛÆÕGùj˜36V*å:4´aPd¿ $_öS´i5Bó3q¤ÔVo¡€u1µ‚kØ‹÷Ú’‹èBHÉ™‘IJ,EŠ€ªnÅØª»è뛄º:FqìjO¾¼ÏŲX¿· ›•!6ªÅîÅòÝÈ5àhV~ßßí¦.KAI!øÝÄ<ÿ}e_¢ºög›*ÊôUÉ HðHò/Á¯òÕq•Yc(·Hêí,‘s–F ª¶Ìz…›>Ã]¸þŽèfFá…>3d$ì"Z @=ß]w}k¤¢b-"0³ðÓæŸ!Š—â¡,ZÈ  Y=ªú'R1vYI%ݶøqãÉl€RTä…Tµ¨MHy'¡ïZÚLÅ£6㛉J¤“Zˆ HšР èW®N-HÑᆒ.#H}Bxö†ƒ`T wWzè“ÄÃ{&f *rþšÄû5I#¤$H±}iœ**’ÌMd“ö­v9=2¸Yø™áŽ+“Å©ƒ!R ‹ `ƒ]Þ†C/rÂÂNY6-‚€±b|$šî€ñgÛU:.ÌòüC³CSÉü¹²2©$€;4 䞇¾–²-5ì¼ûöÙ ICUN"b½šÀP³÷>ú|I_°þ=µ ¡†ÍüÂ@®®‰š hDÝw¥¬K_±¸®FaÃ…Ø?Ô@12†âhÑ ¢G‚uUv3 vÛ÷ 8“`¡‡(ÙC-Ðe° ÷<~ZÑŒ™¬ñèhTÝ™ó3±pb䱛Ѐ…™‰ð’z&€=| N6^:åÁ*´r/$qî-$f›3n{¾ùýl) Y I”Ð&¬øñ©.´j7dbîxL›t“Ô¬@ À‘dµP$@&ÈïÜjGHÔ».›®¹­ƒ÷"–é 4TH$$5ªú2¬É½mÇ"l+*$>£™!e!(ž@ À>5•©{FåÜñ$Æ|Ñá€AÅ“—t:^6Gc°ý޶rc0³1³áõñœ²ò*y!R$A‚ðF…m”ÏÝ06´6R¼#ŒedР<“бzlЬ²(t ƒDØþÚÚ3I»`G›ü=å>¡`ƒùmÄ1µqŠ }¸Ð–È]Ûl“ƒ¤È9q°V*i€b(|€I~ÇCK¢˜[Îß’’4³zQú„z-e{¦PE°èö.ÿ¸Ô]Ñx÷²LyrÚ~ —ÕFB¤€@!€=Ø®»¾µI´o;^6Þ»¬ùJ°H¡‘È6A(y&¬×žŽ„¶lÝí`Ö‚Ù“/uÛðg\\©¸»Q„Õž ’('¡tu¡~F°ö¶„¶fÇܰs2%ÄÅd’ ª‚B’H¯·Aï¯}±Po[^SÈÐå±'7gR£c•^bÇ^u=š]‹vÛ³£YŒ`€ÊÉÈÝQ ÆÈìv¶©?‘Cñи-¸¾_’B„É©ä<€¤Y"@{±Ðmt7?tÄÛ£e‰8–.˜îá@Iâ ûþzØè¤IáY£²®¡”A"¬t|~‡AlKî»zfºIêbÁk‰ 1…-T @&Èî´ÍE{°Z f9·<ù0úà¶*‡I($x’4,ÿ–†—DC¼`ËŒóÄe>“‘>]ù©4{ZåØ7u㽿E[â0[q“/„I!F2Dêy )’(ô±û äÆçn¸Z,™²• Q˜ÐI÷'¡Õžô2¹;¾Ù‡"Ç<ärPÜ–6ePMÄèš~ÇBü‡ˆò?Ë@­‡Óý?å¡2bå’8"i¦uU@K3€«$ý…h\Œûnᇸ|I àÀ0de °À`‚ v4433;!6[• ÁT*,ÇÀY>ýààheÚ)>ñƒŒ"õ×:SFbY )"¬y΄Øen˜8S,9NéÈ­?¢ÅEš°,õÙGßA“%w<7ÎlQ€zÇrªx†¢ÕÆèƒçÜh-„{¦ÙŸ ă•+ÀÊ‰ï‰ « óz aƒºbniêa™ q;ÀèXµè-T£õÔ}]ËÍÅÀŒK’Än( 3`“Ñ4µûS>Æbäãæc¦V4ã‘C# ˆÌÝ6ì)×*r®õ@!4 â R‚M u¡SldÙ¸˜Ù0âK0ÎÌ"NÏ*|}‡¹Ðm™“uÂÈËl4‘„–Ô&^\H‰5<¬ÉS4WyÛò•̳úh„, )º*¶w©LÇß6ç‚WG—ù «*œiÕC‰[7cÀ=u³25açcçÃó²NEM©R4A>ǽ ”Íܰp^$ÌÉUiœ,JA¶$ãõ#¿­Y«@cmÛ3FÝ&ELX-q$ ¥ª"ÈÝhT˜µÜ6¼¬ó†’ x R,"‰ö`ù­F“6›HBä웓É2eå'7fGþ H¯G±c¯:ÂlÒ“H¤rlrãɘ¹ ±D@4l¬ Ä€I6*‡v*ôñÄfÑxfÚ!Ç\øçn&C_I‹Šñ®V(õV'ÀÑB(9¶[ 5Zd‰P2T{¦£…»*›¡yñìxÓ¦>dÄ;Q¤…€  ž4 ¿¶¯Ž$S‘§øV‡_POHù”}£')¶ø'þhåáH‚ÄQ ô@$ƒæµ\ ‘Ñ9[<±Ì1³NR3)QÆÈä èö,uçLRT›ÙH$Ù›\¥É*‘$ç+@ q 6*‡v*õQ\Ù üq`Èb'=6,\ ñ®V(Ø«àjxâ<Œ&›b‚ó¥Ë¸æBÑðVbTvZ€$<’(XºÕñĹÈÚ»n; (ö¬«ï«‚#›f|hö¸76‡$6O¦Y£Hy¯A£Ýue—#hl;T\‹KÝŸÀÔñ!žŒ¾®Í¸‰^ µþRsbઅìrÐ+ÑìXëά¸Óäiß&Ò˜Ræ¾Q¨È—• 8‘fìUìV¢‚l´M³Cñ™ˆy `ع`H+ƹX£ÕXŸUB6G9=.NÅDŒ~(,ÇÀ '¢hÐ'ÀÑñ ¹lG=ª Hòós9$¨Z&Df%@²h@É"…‹­EÆŠæýÛsÛ6ö‹L9€E) @PI In¼k®‘ÊVÆ6퀙ÃoyêV.îðë€÷Ù½G³JP*q÷ÆgPG‚e._Bøû%q÷ À¼êzûë_ó|FÌEÉTãAo¸Öãk³›«Ðß'®¿]lÍ^ê}JEÒ@@º¿ïªIt驲ä‹]š >úh¤^ÇüõLS¯óÐlšz­ ‹#‘ûŸßBlI$’t,@–ñ ïÑæÀ:‰²–ƒ%š,†ÖªŠ“2ÛˆèölXä ó$`[Wý™ò2°á;ù–ÿâÑñÇìÒäD¶Ç†ÕY,óGWÇ»'–_EâÚqcu#$ž=‚ŠO°å'èÞ&„PõG] uôq§ôKäÃïý¯Mý–¬>f ?Þÿ=-Á'OêSýô´n˜¤« ž–ŒÓú$eFrŠýtNÉŠ-ó)ýk¥¢àÃæSú×KCAÉŒyuýô´LQ?2ŸÖºZ¢>n+¢ã÷ÒÑiÙQÔƒ÷ÒÑJ‰ãìúƒô½-˜ ˜¼—úéhS'æ! FKþþ4NÌÓöx›ÌƒòïKE§èÐ^¨ýô´Z`r!ãØéhÆ? BŒ‚ÿ3¥£tËzñ)'šéh„+#ýJÀöÑ;ã ÷ûj™—Eô2Ð…]˜ŸéÊ$k³¯ñ¨?‰|ÄÚÚèÃèn©€ÐôtØÐ¶Àƒ|‡ ŸÙt™Ñx~µ‰¶‘Ò 3žl7^uÈÛì(X hZ^‰Vàü‡¿¾ªtM¶>|·â|{TœˆécÆŠ5Hûù×ZG;mU¾‡R7EÒ½hgl©b|u¡i" (Ï~úbìÁ¹M›ð‚¬ýιM¿GH%ìÎñåÇr $wgγR7qbñçV×/!C_ÓÄùÔ¿±UÐÀe…S…ê«vXÄ›ôA/lLXÙ¬ÓíÁ%Nùïúê$ÛÚ4å­3lñâH²Ê^uѨ³ ɧJxÌ¿¾¸¸«:):8¹ƒ OêclDŸ5ØÞÈ¿kÖbáU#mNî"Ý Çõ9# 0¾èw•ö/ómiJÓ—×Fj£ÿrÒc²äú®$6À«)  =Žîë®ÿ3©’¿ûÿѬ^vi @þºçléLË:FÈ1ϪP‚ä‚þ·}þzè䜓½àçÔ^¶Zºw†hL\REñóGºëöÖÜ–IßF)â×ÙÐÙãhäOäz}Ÿ£®¿kÊO-»5'®¨éäšlšüµ·ÙÌżíÙ™r¹H‹E, „+Åjf² 1 lâ…õN‘Í«cà’qŸéO§ÂýRãñ_á¯>;½rJ΂lË4<Ñž1Í+,¼þ­È…²X’H„èu“øœÒù Úð2±“æ'‹EŽc$°<üPQ}Þ¬±4;Ô“N%I¦''-±')¡2# •ƒ7DØ$WB>oÀ:ÎI2Ó}Ûà– )qæ>¬„ðI`( $,‘f¾¥äû-R-.6Oð˜°Ýh’J`H[$‚}ÉG¹'ÆŽI6ÂMª5ã_¤ÙÕë&åÙÍÌÁÈmÓ‘RQ¦I´6.ÉKÍ$mEP=9 ƒÊÇ}Å¿=M ÙÎ|ñÏ,9sG€)hÓ‹1%‰=’.É=ôI(ê¹&ÐQtÂxó#Y²½7i\*Æ’2ƒÕöxô<ž¯û‹¡%‹¤ú,2VÌÓÀD+êC1nd’CGfÁ ;ª¿Ã{íŠ×@12çÛÀ3Áad“`wcº±™:±œ´ŒÊ2qØnpNÏÈ©kVÔ€¤‚I°M‘Øë¾¯R2ŒWûÿBÉ6͸ßî³ýõÉvt—F••3‡¨§é‘˜0=Q$ô.ï¾ÍÞºÎkᕳ«Nv^+E鳯É&°lP&¼]øöÖøñRљێÅäíùç|ƒ $ÒÖA,ÊÜ‹P$Ý}¡®ŽKG8¦Â ³,còÇŠ@~h»GÌ8”(H$¨Ù7}]öE¥l’T†¾Õ—6:džYU%ãÇ ™ƒ²@ @‹°(Zµd¤fÏÚréqH2/ÊÇ*ÀË`1ì$€²=¨kžI¦m| ™²³Û!%‘“*,Iât/»®Oâ%Ù·#©£»½b}›6çbÉ™³Ï‰¥ÇdRƇ`—zìp’ÙhÄÜ0×+q|63KÔrH¼¥‘ylÁ@³AF«ì…·ˆ2spñfHZ9c>D1¸æ£+*’@±È€lUXî'E¦såÛZ,\A$U˜M‹€v©È(‘vAê©+º4æc²íØûdòI,1FË*¬E…È ^¬Š6 õ4Z‘I¶çŸygô¹BÙqM€Xø…åbì±àu@17ÙÚ¢S³fßó“o >f‹lˈC¡Ev曑cTt {“ªªÈÓ­”øwoÊÃÈò`•Dx~“´Ò«Á¨À$ªù°k ¢ºÕ&ÎÉ’/fÐnÎÄùYpÁ&bbŸ”‹å ²·HÓtIäYL¯^Ùðü8XøjI$Й¼ÿ‹ˆ Pó]kœÿP_+9ûÆn~AÇ(̳c$dRÔÍdb@ÙÅ ™RH®6Û6Í´fI¼–h‹Brâš'æGÄ(bEÙb(¡@17Ù§£aí9±ï .Ld¬93IÜÇM¹ ]Ù/d?Ð:7@¯§™—$¹[ÖÙ*¼±²zBD*#î‘Hk$ƒdš³ök-Q¨ªF¼›SI”br¾†4™!åSňù—TH«­lÃèѰÇ6.4‹”¬œ§gE•ÃH›úˆ$wTM ’„hGÄXyYYäcÀg‰b’9¡Ž@¥Ã HIP“F¨‚h£FÍíðàm‹Ž%E€G‘$!U<› ޼{èhÅ‘·å¾òù Œ­™ŠÞªú<@%”›-Ñ¢¦úЉ·æGº d‚N)‘;»É"˜‚¹5ÁA$7‹$/Ù½ HŸ/%rš<ƒ6†¦x¹5zâhPP,žþ‰1tCöµÉÆl¼™0æã#+EÓ+JH÷È€;¿Ú4rdÿšC·Ê!“#sJK’k•ÑäêïȽ ‹98_î'l|ˆ¸Ê6ׯ;‚®Hx€I ŽÈ–&±©ìÙÓÛ†~4yS&,á=58øùY"G.³È³P?Hžˆ&…ê“ØeaÏÃ2m±!ÈžHX£(äì'<ˆ6^¾ÚØÌÑ‘¹mÑâ|»Ä'p¹+#­¬`’ÀÑ òFÇ+ê ½X‡‡?¾€âem9³ïm+!x›2)â8 ¡‰eˆ@¢…Äßd:±åeÉ“‘ ˜Â8Ð/¡97¨H³j;hwçC-Ü ÓiŸ"Rñd”PœƒK gcd±’Ä“Ty ª ‹HvÒÙÐbdeäàJs$Ø; Àt‹Å(ª^I=“¨º 0ÊÄ›á‰vØb9É«qe¤py1äE[O~ý}µHÓ±¾>vwËe&¬¢#ÈÅõ3T€O* J‹¢MuFÍ ËÙ³–ñ£å+ *É*ˆË)$™Y|t5ÈP'@z$GË ²}h¿¨þúÅ™·x;jÉÂ…Ô4Ð:)cîAëÛ½ R9Û6>~!ÍÜdÃZX–£’U ,Š“` – š =µBíÎ,Ãyq¤ ‚I ‚~.-HVE»ìXØÑHFF.Kmñ ñ2¥ÊXåXž Àcj¬Ü‡"OÕÚ“ß’Æn±n98pâz2Ë:¬dÎ’ªÄ\O%$½Y…"ÙXÓÙfÛñò"c­‘Ù#Ò‘B€GFÉxŠ ëCE¸å;ǘ¸³GbE‘§™J0 QC ¡Ù¢Aì]“|\Â!ÇÈÆÄ\p¢ Œ‘!ä\~¦â±ä]ŽºÐ$S õ¨ú"Taø‡'.wÃ,Z)ù:ÆÀ9B¬­Ä’4ÝEy@’¶FÚ¹›NÕ‹·«–œú± €FÌÌ{?‹ˆ Póí «Ù“â-«7qÌ”EIF2ÇK PŽ©šÈ$Ä€²Š ]š2v­Å÷¨w(rbu9Aœ4'’F#uTE±ð.Úû´*èˆWpÉÞ¤›pÛ¤DŒ²cèP)¹¦äXÕ]^äë2 ¡[>Û—jM"αcâ˜"\†Œ±ƒc‡TdÙ¿¬Ç^ŠjÇMÓe—+K›;™ LàD€6  ˆ¾=ï[3!û,cá‘43$Œååiør‘e¾‚E{}€4#ì®ü¹Rá¬x¸2Nþ¼mHÊ(,ŠÝò#È ¾ÿ}ìsdç|Æ2G¶ŸJPLîÒ(0š<‰=thy³¡VVɸO½´ 'ÛããÉ ±qq‚ØüÝÁ@’@$±5dèò²üKdzoï“0ˆ¤Ò4MüÆ»£r-Ñ y   @ÓåcâTì{ÜxW!ùÃ)OP(¡Bnë‘I¾®ì‘ÜyXø‘ü {‡L"Ñ„‘dÆŽ@V`Á $ °«°*ˆ:,¬¯;ø»ž,a#‚±@¨Ì< ÿ-F¤&u‹wMöeÄ‘ãXÙLŠÊäW² @®è_ÚôŠn&…mê\Éâx8ƵéIÌv;ëÈ£×~t©âÑÆ‡áíí1Ý&€¬ƒ ±Ã³‚À !@QäKWz­É2$š.»7Ä/>RÂÉ<‘#ÎÈܹP$ÍOA@44M“âIØ·¨pƒâÃ"1Ë2˜½Pd¡By]r “wÕÝØÖ¾CãA.Á¼ÁƒŒ!Ä,%Yq£qa]ƒ²@ @‰°*ˆ'SåcâW7áíêH£ÄXŒ‘¶p±W[šÈ$D€²Šl|NÜñn0o¨y£¬µ"§Ñ åÞcmþz,’ÅÜÚ"ÎMaGŸÓR¦Í\m]ÿfm¹ÕÃÉ$q»­9ffÁ4{ß]û꼬Ÿ#tÄßs°`—Òe•$ ñ£Ž@*@$c‘cî; jÈŒ’l{ÄxXè˜e£HåY1ãpÁ‚Ù P EØDWvO‰yv ÚxHŒˆØqÁjáBº’µH‹$â…¢ÙfÜ­—p›{gh¡lȧŠ@à,|Bò$]–!Š}6cø†Éž›ÂÍ“p‡"wŽncäB€ 6K’IðßGBZÄŸ‡v}Ã*9³á*ða˜Bà‰;^<@&”÷¢KC½hïhC™ñf\P>2bŸ”‚&Êen$.›£b¼‹ /ñ#nÇÏÚ6¼l\}´1|æÄ%@ŒÌdzø¸‚5Ö…‘æ¾<Æ•÷’àZ¼Az>¾ÏåÝþºórN0i³ÓÇ%£ s“êG'ÕWá@ly'Íò}k”g¬¸å,ܲØ?Ó+µ@$‘CÈ>>ÞOßVS‹D¬ƒcÅÁ¹c.À‹?ÓWC³×]×ZÓåŠwû"â—_¢W7"'yà…C‚K'"¹²O^:¿câõɸ9«fÔf¢éL¸¾T/¢ÅËv b|ž‰ÛØ Ó’I½E¡‘nŠŸL‰jE~šÎFÜ ÝÂ,ŒqŽ–(ötrM0išþ ø™?øu¯éÿ6gú„°=T¿ùkÝ#Æ»ØoÐiüG±¯ýŒ×ùëü Ãó0@ŠÑÛO_®¹$¨Õ»/è3‚>÷­*.ÉÊ߆o>5) `1ƒüËÕÀŠAòŒMs?žŠ.ƒv ˆÁK$×G2³æ)¡$Ÿ>ÃXy>%d|øØ†„|§Ì|IY3™¨ã•zÕYâKŠÌ¡‹›:Ò‹1‘c†GøÎ®$GÊ¿õ0"F?ûæ ù7þ£ûé€È¦F; 9îGTÑÛ27ôÌF‚³³J½“(ÉUú,°ò+Æ£MŒ7•²KÌ„uãH¹'²Êš5|Ü,åj¸‹£®™E˜¦‰ùØT•e¡V ÷Ó(ÜfáN½õb¬ÉsÃ¥‹¯ÓZ¤/@ ˜QXµ0bМŒ ©EÄ eÂViJ"cÛ70¬$`oÅk>BçÄPm;Èýý´ñòÏŒv&áÜÇûkq„ŒJq4ˆ'¾£5¶™•$„ÿÒu7ôПúN›úqæ'ýÙ»€Á8ZéH–…O’Ä'§DûeÅšM¿†îBjWè7¬a#YƉŸ:TåT÷öÑÆERŠ-.tJ ßUž«UFF\—¢³ág •XÚ‡“£ŒÛÑ«Il™òSob2Aï¡¥áÙ1rè Þ°Á®£ä‹/™r7ÌÍ ¤_í¬Jq}Eð·Xⳓ'"G‹ÕŒë²JÑ£øÖ=ßC½WË(3~Ç—LM$wÇÛ]¸Ýœf¨è%zêríÐÈh@=˜¤ÿµÓX_‘×ø_ôÔ}â_ñ6¶º0úª`4    ~ú+2n1óÇ,ÈìkÙÒ4Ž;g¢Méº+ÍkÎåLî£hÕd¯8k箑Vszü=ÁÏGɸ´Å£t0G…@^uÖ)$r“lmÇTº-@x!« oCJŠQ ºñ¡%Ùƒ'oÉ3¶Jf0~Ýk“L욣Œ¸Û¼û™ÊÈË>’E³úë<ìíñÄèõHõ,Ï[Û1¤M`°·Ç^C¡×]'²[4EJ±ˆh]Pñ­)kFZb²eV”© ò5L«B[n†Eæ—ä=µZ5“]þŒ{0–³â/’GÈɇdþÔIÿ/ó×ÅÍèô¹`¶CdÂ+“`š¿¹¯ï­(¶KHŸ™…f´ ›ñF®®¯ÅÖ³ŒªÆJ转„¬oý½µ“àLqÏ`Á[#`ûkÿmnPqfc(É‚GKê±â,­cß÷ÑBM¤fRŠM›öì¨r2¡7~ þÇV:tf[Z:3È‹8RàŸÌë«vs¹ï+€ ~*ª¦FçT8Š<ˆ ÄŽ¨ tJцÒeñLàè¹.Î:&ô’ä 3ª¹qú–OA°@ÔlßÐ×Y-×b`ߣ“E–:ãë/äJý@¢ YèŽôÃB÷bt ªð¨’'Uâ²Z’ÄÝÁë¢aÀÚeÓqtÛŸ!1nH˜‡EqÕ òkª¯kïÆŠ*êÄ¥«¸äÉX¡‰]™è¿ {£ßcíúê$šCpäYqRHÛ¦PA?˜±¨VìÅ™¸„ÜV BÜ»²°+Ç`]ù:®¬)VŽ¢«Ýÿ}BØweȈ濤"R)y0MB^5e¤RøYîã‘õ"uR«%‚MÝÁë¢% öXÊŒÒîK,ª…åê?_B7uâ…Ý{ëtÍ©¤­‡2Cˆ2aÇR–~OÄŠò<>~Þ4PJX¶%&ãi–Ñ¢1EàÕå©»öÏ諸Œš­1Æ Šüµ…FåÑŠ\ßS8FÝÌòîÁ£cÚÈ5ßu­¾6£fcÈ›ª;~Lx°Ï•)%b‹‘ æ€&…ûë§f9-"'ÞyÇ*ɉauR‰/%%ˆê¡àØ=tAó­Ê;9Å•ÁÞ‡ÖŽ4,e1ÒÒ ‹¯ÃÄ]׸ÑF™ÐÙ>!_“‹2^Eãgd’NF¦¹2Ùûî݈dÇ E’9“‰ äÄQä@ H±@y:b™-Ž;„æ4# °¼¾¯Ô”BÕlÝÙ=P½*%ÉŽÄÌÈqL ¬T˜9…ÒnD…#¶(QÁ4H²5RF[¶f¶sN³ííC0BŽáVÕ€i‡‚|yÖ‰hÖÑ­tÔ¤-÷LõÛb’f’B«êHE)bY¨ÐIº>ߨ5bÑ3àݰ1³!ˆ©’ùFÞT‚Aô í¬IttB7­ÇmÍI&Ç !XÚV/D$¢"±#ªìû\SvLÝPüú}Ñpl…€Èdú¹• |kµ”H¢ÀWßfDC¿Å>ì›{â…Wi[‚Jô‚U¨Ù¾'¡¬µE÷üX¶ZE@È35É(…“ußÛºšhÌ“Léíù ˆ¹DÀyÞ<Þ¢Èé¨_·FÆ­"Z3ï[ÀÚúX«+žF 'ÅhP4IbY@Ù>F”†Íx²ãæcÇ— ÚJО¬ÿ#ªS»ÊúÿˆËë$MS0–^A‚Wj=ÍŠ¦5ÑмG¸gM‰À«:ó ÊJš$  º$ÝQ¡zX#`Þ#Ýñ)Æ2€ŠåbÊæÈ=0â8‘_ŸƒöÑ*#èfç.é<ØX+Ê)‚F³HTH¥Uƒ•°ÀDýèøR„®û(Á\©p"W|—Š0r~Š@Åœ±QB‘‚z~”…£fÑ™ë·G¸GOQM£yR Ђ?¶©£&ñ¾Ã´OÁñƒ¢*4ìd¢1ˆ£È€¬Äu@_è*vu>]>ÃöЙ13¤ŸqÈÁ—£¢²;0&@K ¡àZŸ&èö¥!‘˜o|¦v\ÛsDØA®'ÀF]Xˆ]~zVìÑdÞM¹³Vè¸/Œ=6ÈX ž§Ǫ̃k _„rPMôX Ò‘m6…„Õ Ùχv3#*0Ý—‘-–zè¡“GÏŠ&5eL¾å»cn9¸þ€‰¤Y—"¼X©ìɯïBôJˆÝŸ—™¶ŒØ6ØÖORE’)çâ‹2ß ¦Í]žúî‹Fy>!’=¿1ð"ò`ixM•ÅT âmˆ C {ëR´]÷ÅŒ8"cõaŠOö¬ŸMÏ2È^&ØWbÇd 4-oM?¤iH™ô"þQœü˜°0¥Î‘IHcg` x’ûõ©H¶Œ›6æ7²1¦ÇHåÆ`$Xäæ½cBÈ ‚+¢Ñ*)}çr‡gÇŽG K(D2Ì#@H$–b ð,ô+½RZ)¸îðíûPÜŽ:ÌïtŽl5/#M]€7]€:²‚÷C7-Ê-ºX`iQH¸)u^D×€X¹¿°$JA=ˆÉߢÇÝñ‡¦Ù “Ôú¹• akµ”H¢ÀQ÷R†Å¸Êwoá“ãB-Y•¢ÈäÀ(²ñA¾ˆ$_^ãJBõbö}èn³z'4"U1Ę̈$Ž/Ðâ×ígÁ Ý Q….X]·\ÅÛâÒ$v’B«ÎN )Kf£@*“û~¢‹E¶œÈ7]º,øàdõÚ0ü$?¡m£.ó¾Å´NQñƒFŠ3™(€Ì@â(ò +1Púv>}Õ1÷H6´Ç.eb$~T#úY”»'‰èx«>E‰ù ùk¹Œ<¼E—™‰Ònd…#¶(A°H€{#Y‘¢ïøÙsä`(GÝ×m8”®Î±ÉêY%I‘] V£fž†²ÛLÚŠ£46CË$‘Ö<_˜UȲyŠ55gñõú4ª‹'Æ$Ã1“ zÐȨQ%µbƇÕB»°zê2¡Š |h%ÆCŒž¡•†–P,[•xâ,÷i›±Š«5í?Gº@’¬E9¯j|©ˆþĨ§ºc³þ.m¶fIqC*q.åèÑ$ y: <è¥&›Žö‚0å|ôu!_Ì+ñx—9qW‘œFþ¥·ÒH$Šè›£ÐÕrtU‹ÁøÈK$²dcñHñ½u܉Zº=ˆ5gÈïKc;âÉfñI ¢Ò[RÌB¨@1 šêTöJTQ>4Y1=DÆC/¬Ñe¤ å_‡ˆ$îÇ^údò¡Š«+'Ænø±eãáƒÎ6vG“q ’HWdûh¤ò â¨é®ó.RVD —Ñ¢,×G: 6fÿX¤“ •Le–R‰ÐºïÉ®ý½õœõepMÑ¢Ú6²ýÕÏc 0b|iÓ4ø…VIÓ<&(ä‘ÚN$+“\V"³b€»>Û2÷¡Ù.>è¸/Ž=3° ¿W2¡¬-~ÉA6(°÷´ÿ,»ªííŒeiV–Ä¡ –P>Jµ7Äô4%jÉÙþ"]×,â>8Œ´ 4U/"P‘A¨}-EMYé‡z gSB·mÈíÉ,jí#•S$œiKÍF€ ~ÿú üKí;Šn»l[‚FPH;Fò¬ Ђ?¶…kG“øë,E»ˆŠß‰>Ä({ø$ëÉËÆæÏ_ðG%²*oIWÁÏvEØãÿCö×ws©Q 1g ÑtX…kîÅß_Øê8kL)ïeW00fôÇIÌ »kò>5§Âõ¿tEËiëÕ–“””=jö=¼šëÏz˜|¨¹üoÿ’ðÈî¤ ô>úÌ£‹£Q–Hµ^²Ú4A+ï¢HƒüÍÿù5߃ó8óþ©˜ÑþÚöK£Ä» ùk7¡ìË»òl°ó©?ÀÜÌç(æ«Rly㶨èLq„aeõWª£öFÙ©6{oUrº×EŒ¹>«*…ú:÷ÖˆF­3?âÝ÷åÖ”Éi>=>üiLÙŽQŸ·ZS²SJf[D…pzôÇÚ†”Ʊ-÷M)ˆqoü¶”Éq-^JcAžé¥2üJd£R=?:2 •IáÐÐÑTB'wEjb×¢¦‡âáÉ1á™ÐëZŒ~Ñ«£dX±ã‚±ZËZJŒ7e¸?}RgoßC?àé¿}]—$G½÷Ó2@OÙŸJhd‰¯ÿhÚ;öO‰õøžÿ]ao²m­õ ¿ µþ·Ðoè9ÿâ“÷Р?âît¦ H.P5Wgí¡D*¸ýF«£¥1hª#b¼ø'ΛöP)! mº>ÔÙÑ’¶Hd ƼèÓnª£½aæÏ F[»7ö×HJ]¸ä—fµîd‘òÚåãŸÑ×8}6½ÈyÅ¿í«ã•tg(ý‡ðÄô1‡~õ¦ŸESØ ܼ6/÷­0—ÐÊ)övþ‚|lB“ÇÄ‚zûëÑš[<üÍ^ެg»úîpªEô2Ð…f)?íGôÖäuþ#uñ/ø›[]} ›j™}ÌÀùЩ&J’Eû'Bõ]躆P¾AÞ£èèyïŠ1ò¢•[ |³¯/*}£ÕÄÓÓ4lÄgƒÂÊè k‘$säãmöu#f’ å@'º:ï¶r¨¢é+PFZ Än¿ë¡²Å²ŸÛBbˆ z7¡z$(ìŹ³*QÑó¬Mèéb ôÑ]rªG]=€úH*}¼iL*)ÀRöO¾ƒûù«Blk'ÌAê(¦_:èB‘Hñ“éõ~F²­Vk‚'xù:÷®ŠèÄ›³ç²áf»Ÿæ‹Žþßý|è<{=òŽ[LáÙ¬¥–EìQý;ëüõT«²8_°l\Ó)Uj¹r±W_­ê¦°ßuDi篲ÿ)|FJ‚=õËu´BíYîG2ý+@·ÿc]mÝ×»94’KõCÍ—Á­”@÷ÿ×IIê½%¿ØØ6ÝÇÕP’ýg߯¹âÛÑ·4–ÇË´ïBoæfƒ¾´øù>Éäãú þÞ¥&gË4|M÷ô÷×ùŸß]¢¹#8ÉÂR)´ïm(dÎö×<%^þÎŽJïÑi>Þ ÎZ×"÷ÝÙÏÿs®“Sq1"‘ü9»./’8ñ+Bü±ýè~Ú­Ï´…Ó(Ûééq3©°Xè’™'ûë&ÓEJ)0bÝD/ΠI|‚ŽŠ=~š«,ÓúZû-“²î² 3N¬VÀ%nóWãQ)Eßÿ%•Iø^§wH•*€PöÖ1änìÚ—UB'ÙwÈæÓ‚\‚~ö*¿é­7,kÙšƒ•ú4®Õ½öFa¢:Ôq*Ø™¶Íå"|€Y©¯±öÖ¾J¨•vV}“sHêIìWàæIþú9II?÷²%šbr6ÜÞ?\ÀÛY¾…ÕÓ­eJIþªc¿}—þžÑ,k8ãvG±7}ÿ}šmµÿà’T•†^yŒ¹¿QßÿÃYÅÙ§òÕ–ÇÃÜ XÈíZÊŒ¨ÞQB_nÊŠqüÁdßçߟúnR”•ã§f¼}£yÊW…rþ’oÌmi)dœHÚŦNOÃ[ÂARå)Ø®$™'ûë£sRLæ”Z ‹áÍÞ`2—ñ†u`Wý:Ñ)_z Çü? ï¡‘ÆX´,A£îlŸî{Ñ)Û&P¥FyþÜUø6JŠ@”oðmfçO³OÆú5.Ç¿»¬É˜@èø$ÿA«K œrº"]£}õP¾xò5Éñò)m$tL˜G'h8nÕ$E”÷DH¿~õy$“e0¶yðñåUÍ´ˆã•"¡Pxš$’m‰²{'CLœÝˆçâB“fƒ<,®dhþ—`$¨#£dÐ#û‹X Û/ªbÇ0n!fƒÊñò Ìm›ˆ"ö; }D1DÌ2¾Æ‘“åó8'ˬ¬œ‰Œ}€ ‚H=«»WìÖKèdß A>zäÉ,!E’„!e[z¾€4*êî%L­ŒÚö¬¼MÊ\És£”HO UöPܨ.͓ٽi*#Ù£77#&|è'~|¥HUQÙcb—±^MõãTÏø6¹Ð˜³õ·Ç¹E™Ö7†a,eÔ²’ÀH¢z±ùõ`æÔQ´›èɇ¶ä±‰1÷¾”ÜæÆ«lYÅôÙ$ØñãY[•›oÐíÓáá¹fµËôÄfR…‰ŽÉD¦I8'‚€’(òI»>ô+“ôHÅ>Ìû¦~dÐgFê“@FY ¨ 5bÈ vö=T¹¨³NÛH‹<|³8ÈRH ê /g±U}yÕ‹o²4—DM±<›‹f|Òl„™¿‘r ßJ@ìQ4X_zÑ e–,”åƒ 3I41ˆ©ƒ?+¶²š€ø²k±)‡el©$ÈݲV_SÐá f1À›6yI¡î(_]V7gù%ÌùLÙUò[’<ŽÏéžAú˜Ù]õÕhgFfÁF߃(Œb:´<Ô²ž Š`$M‹|ذEÞF·äp×Î]f‘È®Lijö²I¯k­Èɺ|:»Žke®W¦$ƒÑJ&;$…6’ h«»‘³ÑÊþ%ó?<}CËðŽïŸ/Óªñï ÿS5wwÜ[:#ƨbÔ¥ˆú¹UÛ5DuC΃E1°72ògløXäÊ1(POÖlR‹Y÷5Ù¢«²Êë•&TÐM6Wüñ‰Œð8ò²|›åæ¾Ú¤¤-¾ˆá¬):,«—󽞫µ ¡Wf¬“fÃh¿ð)áŽÄÏQ4qȲI4<•ýF ÇŠ<…ŽÈÅ ò7`âǃ‰nÅa‰cRÄYå ÿ>n¯ž¹uÒÇ$Ñ”%‹%q¦ºÂ’*Éj€‘ª<|¥ÉÈyó‹Ã(Q!úT4ÀÙ¿>Õí¡iñ6,}·.LŒ)d qÒ$åw±XõÝÕQ¯'QôÑ›#ŒY0·<¥š6œÌžŠ4EX¹sØ{èGНbv²cØ’=ª]¥3¤ò»HîʼnVrYE“V¤‹¿$Ÿ$ê“yÝ6—Ζ9a–R7„øþ¢ÓUõÈQê½Å4•ËÙò2pSi€Â$ŽNqr•Âù<¹ ¡Ý6@Äé$ß/óÐ|‚‡õŸßA¿¡رçaMƒ#0Ycdb¤X°A#÷дÌ;fÏ‘… ê™Ê&’!r¤T# D’M±$“Ù:|û~TÐc·‘ŠÁ„Ï«7¤•tA&kô#;¾Œóü/‹‘·I2_Õ1J¢dvP „³}*@"Íñ7ГçAòŸðîpSëN’.2^ÙQƒi…Ÿ4O`›ó ù“áÑ&êùë—QÍ,rMBX²Wk ,)"¬‘æ¨ù þ•&ä™ùY‘•‹Ÿ¦‘@UˆaTÍÈØØ ûVƒä/hØ›m•²‘ÄxâÄPpä·vÝžG®@[ïAò7JV£tT´fÝö±ºÅ‰B¼3‰c.¥”¦‚AõcÚìX4VìˆöÌœlL|l]Ѥþ¦D† }`Ig “wí¡>B·O‡WqÍlµÊôÄgR…‰ŽÉ!M€¤‚A$ªîÃä2m‡\Ø÷å•2=iéϾ9PèŽë°(ôNƒ!X»fn>ç6tÙÑËê±üXä2§øPTóã³döoX}šü#*Q›Fró‚#„«!*K ý~údÇÏiñ¥€ a‘Â*b@ìIP š³öÐeøt>èùë•QË*I,f;bÈk¥‘VHóT©ÑLO‡cÅÜ[0är‹Ö’dÓ<ƒ°7mfÀ€6löM3I¡8ßA 6axý†> Å•XÙ,I<›¥@ èÖ²Ò³VÈÿT’\q22wTThã*!°(±$’I&ìÙìtui e¤øJ91Àl”3.Gª\BBBñ |BŠ«ì‹7dŠÍ{v׷Ʊúœäì»0®LI$×µ’HûxÑF9X·‰›rø^üÃ’¹!‘zS+GÈ•²O`) ‘dUݱDɦhmœœá0É€‹¡éÅwË—ŸW}L"o9q¾ƒ8ä6W(ýF‘#àAäÀùk6-@æÍ‘f¸¦aI•ÅøKLYó9F`h¢âœYUd’O&éEкF—e¶Z?…";|Øræò¬je„6¢¹I$’l~GGLQdIðœG2S×bþ‘’¼C¤-u}‘fÁ ±EÉ’ÿ (I‰¸ždÊñrRÌl·ì`} Û£l;f41Ä;H£¼Ð…ÿa¦)…&„dmRfnQgA™HÔ©ŒÀI OaÀ¡]ufÁÔÆ4\–ÇÙL9sË._©ñôáà§BwfÏ}øÓ—9q>ÆÄÇ’ó FØí |S‹*·’I'“t; tj’vc&ôB|'øA6pguEY#Œ¨P†À¢Ä›$’n͞ƥ+-²Ïð”âˆÎZzË‘ë!x†‚õWäY» ̶Z_…j uƒ8,Ð .I"ä¬\Û7@Å“_cÑIQ›y•ð~,¯ÇÉ1 ÇX$VND >ÆÀ‚A$UÝÅѬ™¸áa ¦èxýõ—•JD®ß‰Ý-ûÞŠ&r$íØíX ºä,ú^®ÈÇ‹ðüøØscÉ3—h¤Lr lÄ’h±° :ñÙ7£„B›¢rvóða€æ+M«™Œv®Àõ(#£dÐ#ÛȰjQDr•Š? I‹œ"dÊñrVf6[ˆ bÉìz!U²¶Ú/“ð´S¼c'„c qdVBÄÆ…6b z=Ww£/¡²|:u|á•QË,rMŒ–,•ĺQaId5@VfõA‡ððÅÜ[+æ¹GëÉ2ÅéÜØÛ_``ñwg³êƒfø{øC¯ûW¨Æc€¢k%‰'‘4¢ú4 ÙÕІ ãj¬Q*«Ã0• )e$)€ ‘DõcÚú°E]‘Û—‡‹¹dÈõ2$ôAõ­‹8¯ðÙ7× j5ñÆ “w,•Ê> ÕŠ²zûÈד—“‘ëâ†Hä.7)ù3ƒã°GØß_·¹×–4vpiÙ½~*ã äG]•{³÷7ßùk§p£ÔîŠÃðáéK`#ÅŸ'¾ü·'R¸‹!y䯒p£Ë…»¯¿ßSIª.ÝÙ¢‡(½I2”‚I°(_ä/ÿ³zJ*B3Å]”A”¯XÁ#y³‰éHÊ[Á¡¬KôtWìë|ÞæÕýëý5¹œ¹ÿÔMøµí—GŽ=‚ô²Ofmز6¤ÿqüÎ|0´‘†Y(~¾5É&Î…Ž3ýï{Ó_d´ ‡ÿ¨?¾«LZD²ÿ´W÷:˜1’$E8äŸóÕù šEeEIëšmG’*hÊ72M#¿ç¬¹4\l²f±C v¯{ÔÌ`L™ÜJ$~ßí«“h¸¡ñ¬’§ª™$<^´“f‰")ÇŒƒªÓ^Åþ‰ôçÿ¼-ý‹ýŠ0t¦2AèÍ_ïΘÈZ*ñȪ/ ’OCFšA4ĢÐËé<ŽOµkÑ¥ ‘2Í,*%õü>F™>ÅS ¿1›+ýá EÙ:±š±4tv$Ôß箪KìçL±™Ïa‰ûw¥ßD ;Ý:Ðïä1ÑXî–6}õŸ3æåçÄá1ã,5†æ¥(nŸ¼öÖ2ä-@°ÍÜy(hH ï^5¼¤1ã%sóÆP‚X˜¥tãÛQ9Ù*&¥y»?ß]mâ`’ùê€/'·-z¯÷ÐR$;O-¹§™@T¾Gï¬7$iQ™s·1/¦Ñ7ìûk9LÕF‹Ï•¸åŽ9çFäÉQ& ÜÉ(J…û•‘¨•“+rI‚G*OŸËG)Ý(Ðèò$æ}I*½½ïZrh˜¦\eSæûÞ–ÉKèÍ‘Ÿ›±Jeö­fRhÒI–ÂÎÈ›êÈ%G¶‘›öRr÷ߦ¶¤™Š³FÙ)•Xr¿ÏZãv‰4¬Ø”¤uÐâû/¡@бìÅ'ý¨þšÂüŽ¿Än þ%ñÿkk£¡ ƒýµLùЀ‡én¼xЫ²…‰ø¿7¡±YY1c§óSé&»ÌšKa)7£™{X`ËYò¹å N˜ÎÇáäˆÈ *>þúÜe­™”7¢#Ýà•‹ ëÅEÈ›+ƒHÑROe }nÑšc¹ ½S¬•6,èF¨ðìû;Eª#/Çü y×>F’:Á6ÎAÞ±Ô,,¶@ïÀ×4vQm߉¾0þ • iŽdYºE÷í¬Ï’ªÃŽîΆϹen0 ²qZ2E€ÚÜ[}˜–Å<~Ž´bÙe”ÂÂ1à?}kâCFË´´‘’OdëKdn‘°)¡®‡<‘ó켉Ìq*³&‰®…Ÿc_>1MÛ=òt´e¼(¨!P4„Ÿc~¿ƒöÕÅ?dΈ9 &àJ‡ Ï˱ÕÝ}»ú˜¦¯Ù\¾Z‡—º“÷\Ϊ'0˜ÃI xLŠÜú#«¾ºò>úìáOOÝTï´Jî.UÃcêÊ8Ùò  ÿ—¶ŽìŠKèÓ¶LÓd$aY\«Ö EÑûè•=í ‹9ìÖäö`˽ny˜ó<8ò›†—Ó )…žE‰ìTm‡ŸnÔŽm´Çã–õ‚óZü‡zà¶Î®¨Ê7<Ùòøz¼¢iå‰Ç6Š€GdÒ’l×Ô*µÖIbrO`¹™aå•ÊõÒ/› H,ÅUn…ö@•ié³2îi7ó™‚úf) ¯&V4HU’ ÷¦+EÉ’¹™Š±G#³œ“ª¨(»”^|QΔ®ÃlÇumàC‘ÆVF¦–z6<HªvH°4Pùl9R:12¼jѰ`ÀAèƒàƒ®fÛLåfgd®êQTs"2Pè(Ÿ{%º®¨ï¬URvuyq^Eª–É'¡¬•£˜›°™²&Lˆq$+Ñãø¼×wÒ’=¬ÌíÅ&ˆ›iì¦N^X‚Ey%%Z>"TQ ^}ÀüÁÆ£Šm6“.[¦9H9z¥È5ç°(xïó÷ÖèÞT¶A̱1Ö ©ä„V‰,(W}P²O¿ZÒ„rwöG&Ò¢ròXaÉIŠ´Š¥a A¾É&®»ó}V±I6«¯f­Òi›1™J}$Wå®i3rèçüÜÒg×;GR(´MW½Ð³úu”ïG8Mßèìâäɉ‡““3E2ß‹£_Úõ®/ÈÏ#6ç˜1gõr­ˆÅ‘"­”vâZ€¬:ðE뫊g%*DcîY±â…–GF9^Ÿ5U2P²€+#Òø«'õÔQWh®LnNû—̼ò"‹,¤œ™ˆ c$è’@~dѪ֔vLµ¡[ÎåÂtüóáE ‹!“æ&àLj ¥ˆ VH_]ÿqqEÉ™϶ƙ™“Ã:—ˆÅ+e TîÊž…tI°‰‹‹Þ²·,<‡Š)©"Nð 0¶.I=€€*‰,?³ lggDcfÁ½Ç&eÃ,2GéÑJ »$þ#ö÷󩎆["ÎÄÞ“L¹^)UÈõQB’!T€ }° öÖ’û#h>Ü2³?ˆI%È€LŠëŒ­‹áÆÍJ>£d~ôćJU#HÎh =ê¿ÙUú8æ™ CªI7ŒäñbƒÑ$€õß÷×=M›ÜQÐøy²%Ú¢lšYT²KGË+$~¤­(¤srLÅñퟅ™$Xs5ÁŒ³˜UVy1rÖ, PQ¶G5a6˜enÙé½4ÎÍ9qE,AWˆG Eò,ýjØû’¡vmÇlѼdcä凌B,|x‚Î*ì’iE›ýñ¨ÐZ3ly™¹Ð(ÎÉÉIr±Ä±H€jøUš”}vOF¼êÒFa•ŸŠ2f\é¥FÉXã”Ä¥‚† #«DƒÊº?„>ùéš»‰³áùdΛ!æ™ä0LQdxø³ (Ñ«W諸œ†O#â¼è2!ÀÀÈd’h¤1U%ÜO @P±>iz?}¥£7±›OÍÀ“9âf‰d ö° ž±LÓÚ3ägî ¼´I<ž’eǘô©”«k=Q«*“®†-R<åß>]7Y¤‰ i'‰Ñ)K@P}˜ù'éç¸ÖŠSo;ñ öçÍ•¿ÙÃDù1(¶² ^ÉGV c¾ô]ô>ñ6Èæ,™%ÉL¦Nqª+YŠš ôßjÿë¥!h•Ëío<›ÆV7ËJW&IcŒÈÿ 7jEO@vN”†Í{PÍ—n†MÂÄÆ0dê»üDZª±àRÎgľმ$XSµÁŒ³ú )¼˜¹bl€€*°ò<A6vý6ÿ‹ßÚô¤-˜°ÎxÞ2qrsÆ!G‰V0¼AgvI4¢Íùð”…¢›bîI™‹™ŸÊH¦ ’G^6ŠÝ~ »üïQ­”ÆÛ†édc"f™2"Ž4iê€åVÀ)MBÁÁÖªÁ®)2r¶öæf¬°JVQÂ#)=§¢„ScÚ»»”‰lHËÝ$Ù°÷ÏUc,K #“"©Í)AH"¥"s^¡Ò‘-L­ßpMé ‚vd‡.(¥ˆ*ñ¸P“ß"ÏЩ º´vdU[c%>£}Ìè•èäm[Ä›¾nTxû„$t“0C¸%€ “Ò’:®@t{&‘I9¹Ñ|?&Cå4“®SD#˜zÜ>•ñʺõu~ú{%¢‰¸nC"l©ùÅ¡ú#_[ˆRÂÔŽ ô Õq£äéHZ.Ù¬ÿ&â™y"tíqáBÅ rVEQ»$JBÑ}Ã#5S'u&IÂq¢Ud—°Y‰ ´{ €²@*E:¢6?ûο])Øpoø‡JE3îÒË…µdfÄÀ´0;¨o"ûñcJD´bø{//+###%åET“i‚èÁ…´%IôEè’‡o“æã¦<8-!|ŒŽÄ·¬Ç2¦¬Ø¢z&´¤6bÝþ ù]™~S3nO•Hªòº*ñ–ͨ* ±ÝI ) f÷F"{ûèÒ £Ä’àEޱÎñúóð-‚ÇébCX²@Q`Žÿ¸µ¢!»ùY{\sg& ÑËÄŠ,¬T‘úO÷Ô¤[g;â-×? :H°ækƒgô@Ry1rÄ‚@@FØy(Wì~Fú©ñ>Û|H‹?¥:3¯'bŒ@ö!E%«Ø‚ ¢ÆlÌ}ùqß*gŠUrÑ [B©Z6ônÅ›ëY‘LعۼsA—ó œ¸FTŽdŒ«0>˜ìr Q7â½õ4 ÛºO^FDÏã•¡D“‹50€R@V ‘ï^F¶eÑÒÙò¾k”É;&RÆ£"%•}0K†‘V&€ìßDø¢4 ½›ìDùñ¡^óž›ãC¥£‡.(¥„*ñá@bHåȳôßæ4’#{Ï›yUõYál™à‘8(XÙyŽÉâ„›$}b«ÀUÄNÄ{¡Å—5¥£íÏ‘:(Q*ÑeZ¢TÉ&Ô÷ï©Û+º,»îv>Q›8”V Ì–5Ò‘¸—¥PâÌ,x"ïÆ¨Ù ½nk€±eI,RÀÂ\"J˜Ë¨ªãÌک꬟×SÙGmëºçâG›4€N¥£”Ñeb§òìƒû듌”­#(ã³6ÿºîØ™f 2ÎѪƒÉm¹'°PQ¶}·‹öfÕèèˆ7R2Ñ&Ïzæ”ÍÜNnçºË¸z~¹’7žXÆëȨ¬ž(I³_P­t¦sÉXœ=ãt›YÞc$m€óÄîÒ¹(ª%Ap;7j{ÓË‘Äwlh'y7ô“Ò1äÈ«~›±^tWD‹¿¶³‹²©E¡‰ºnÑaú9ÓHŒÙž„S!3"¨Ä1µ_dþºÖ,™"‡;|ôqñ“ ¦LË2…Œ)/$l»Ëî¯Ì¢ìdš;;#dd`G“mg‰\µ€küõ1“emP†ÇÜ¡ÞcÅ\"–PGD(.ì’~£ö÷󣋢)&Ç|¾âŽj[Z>ýë5#W“·o»£àÏ4íëFÛ|“ÄÎÒ¹(ª%A`;7j{×J½™È«n[®6<ç爅=&L‰Aôän<¨*ÃcÁ~5—è¶€îÄ¢9¥–7ùÏDž*\Ü|ÔUqäAUñVOë¦/²d‹¶é¾662ä”Ê•f"©/$l»í˜.‡Uïi“$Êeï;Ág‚rp“(Ä Êl±$ö ª6ÃûD©mz;£nžHT<•]’u[Š\ô ‘ÉïæúÔjK¢§ƒx*×:† ñ$¿k,q¥H\El³îSE"åÌ]–IÔâ<\ôÕ§øÐò|ìa0JÑz³zvª ň¬¿¿÷ÑEصFGÜ·öƒ9Ìy V”^HØ-v( ¶4.¯Î¤ìËiÏø—q)NqeÀ‹(ÀŠ´Êl¹bA   £l<ût2hÉÞ·ßyKE\QKEâ€Ğù~€ Rp óp›yPe/ä͉ÅBÆËȨ 'Šo¯¬Ux«'áçqÜ2£ù™Œ±dbzªÅT‘JóU®ÊŽ`wfÔ÷ jŽö„9nàÃŽ±Lñúù FŠÎ~–!T5‹$ïûWcv¼¬½ª9sÂúÁš98ž‹+$WÜ‚¾†µÑåþ7|“¼4p©>œ"B,Ù? ?S¯<øÔžÎðäqZ9¯‹¸®IA2ªÇé²,Yö=Šý@÷×Åqº;¾_Ÿc×y9F’CÅy:(Hß‘ý´qxu±qϲ©¼Œ†Çc(b–¥Ô î¬W°êþÖ>úŽ:N‚’¶¬SÅ1Ÿ-¤c`樂@$Yó«ãnKDÍ$ö;-âhÞ7I>‡¢ïÀ"ëÁ¢5'ž‹¶;ä÷b(Å&±‹7—C¶n-çÿmL$kɧðž^>â^hHuzíÃ)YÚQq¤zi‡ò/^¹ty#eZÁÛQ+.û2î¤F»ñ¬Ïð7ÌçÂñÅÇ™ëí®I¤tÝ’²”˜?”¾Ç¸Ó#8šÿˆ`?—þZè§LdÉþ!ÿ S8Œ$Aܰ/ýÉ?}3ˆÅ¤CnLÔ°“~zÑÎ$Q|ÞÚXÀsZÖ|EÆ_d|æÞE `üµœøþ†2û'æ¶Öò¢¿ML 1‘#;oE¥†€Ö“‰Xª᧒ÂL·ñøgYÊ üCþ®q¸aU¬:g„ŠI‡!BGwúé”F2ÌÛœ÷d{è¥ã/²«™€%$ÁcŦqú-Hª®&^Ah€A^*µ”£'ÐvæÁ‰£à²€G†Ö°ˆÉÃDǃ°nýõ´Œ½õaþ¤ýµm€õaþ¤ý´¶ÕŽÿÃûiñ3‹$ϰ¬€ûꑺ°¢TÖ¥¡Š ʾò'í­|IˆzÐõlêd™¢}xûP‡å«¶ÌâÉõ"û§í«’&Ãԋ™!²}X?¥5>&©2Ä<üúÓâLJ;EϯŽìhÝ•*,fBR„~CY´0ea’ (>@­[ Ód»£X ý´» 2ß1 šëBcìÍ&ÚíK8ÊtAV”1®¶ŸG7k²ü¬ti¢*“‘4M.AVÏ~5™4–ÍF-Èñû¯Ç›KLÐÇ€YU¿^‰òO–Hõlj¾Í[FïðçÅ,«&0Y¢J°ìëq”&fQœÖ(ª´>ÚÞ—G=²‰éÿý4]áÏñ\{÷ðÈ`õ¬ZàùTBãX[=Fج`4|Z»^®>¬òͤk”W-t9â|ã##VúûóØb >=µò×&/GÓ|iöIŸwS"ô@ x¾Çë÷Õ\­tÈøÓbß&Ér­tj»î¿½]u«äJOÊÇÏÈÖ-1DaË„‘\–> Kb»îûËí®™ÉÙËÂ’£Bɶ!4ç¶RÅœ“ѱÙû<’cÆ—¡¸›†9~¡Íllöhú¤f>‘®ˆ6ÿ\2Ȥ{Ÿ¶¶ùafþßõÕ|É« ‰§B¦ÌÚ¡‰‰.AbÒMUvMõB»ëY|«³K‰ô[7g8ÂH!¹$!¹U_+»®¼øëÆ‹•Y ’-6åµ.b! Ñ[=ƒwß›6lù³©äÙWª†&õ…éS~àè¹"ŒÙ»[æ®H ›žF‰¢G‚kßÏí£å]q¾Í1îL3I‘§š½Fä{¡C£Ðëí«å‹TeqLTÛŽÕ.K4œ[š{ð@öÿ3©å£^){“>ÓéÉ,A%¤bƼvI={wÖ’åVEÄ"\ÜÔBc(P7±Eùþþu¯4lž)WF-ÇsÚrr„¬¡|ˆ° €@4@=Ñ¿?ž°ùUšñIšcÜöI$\©e%ÔØ+Ršó[,jŒ¾)v^_ˆvÏUxN Ÿ?mf\È«Žtw åá…e ˆC+ ¢+ÜkÒš«Gä™H¶¶iqV"RqR󕙘TX’jºúöÕÙ’²m1ÉŠ˜F""ˆ`R… `Aº»² çE~‹¡|< c*qÔˆLr²•íH&ë²|ÿ}O™~%ò6?™t’aÈ¢eÛêØ ßÔîöOÜéRY¶wŸ-s'’OV1HVwv  hX®è]ê¥"ÜFàíx©”s¥¸—™›ù I ~:®¼u«.½ÄÚp0%3bÀÊJñ¤f·|TB‹ö:t+D ÐòÅhÇø‡U¬Mè°Û9ûVÛT,ÈÚ‘í\«)Ø ‚ ,XâMvo•ßFçÙ¶×ǃâÿ/U’ G[£`Ù=Ÿ7wÝë±ÉmËÚ03¥\œ¨ 2€:rlÓ{Øìý΄·`ûN™«¸>9õC°ä)` T$@‘`W} m³7â*%·DüÃ@ºIªH@›ê>ˆº'jÛð$2ãBCâ9;0U»â ’]t(t:èj”Få¶ãö.6<,0B9‡Š7w÷7g»×>DëF¸Þö3gÄ‹ $q,I ’I$Ù$žÉ'»:Ô.¶fm7HfvÛƒº(L¸˜ñŽÊhôE©ƒÕ‹£Õކ´eë£6~Ý äÁ¹Å/ŒެQèuã¯ËX•®Ž‹}—~Û•2ç˜Ï2áÈõ[‰` Vø’(Q"úaª¥èŽ&˜ñqá2ÍTÒÒ5’IçÀ¡àuçZ3HVÓ…ŠÍ4I+HÉÀ¼“»°[º‰ _Ú½¾ÃQ;$ˆ‡eÁÆ‚Lh}uY[“ÿµËwd’+Ù&ˆ¿{Õ4ðþ×.2b>;qŽ_UHÃzýE²{òOý41lÕ4xÑc.Un‹ÈXýû-dÿs ÉˆËÙðs¦å@Y”ô¹€6@`tAÏßA“.vìAŸüOÐ>¿¥ézœà»ªºóù^…L¢m8kžw &õˆ¢NC‘]ÐãuC²P&Çz ­ hÂÇÈšH½`gJNK÷` Ý(€(¨öʺ,›.ÚËØJÀÈÒLÌ䊣ȒEUŠ=ÅR|‰. @1Lªd.Y2\;1eƒr=uÙ=öØI±m²âG·´.°ÆÀ¢G3/`Ý’$ßvlß~{Ð[4G‰%$„Z˜’GŽÉ6OççBä"M£o“1sÞe•‡`¥€ 1Ph Y¿C@›&-¿+#:(¸ËÖ~Gêâ(tM jÔn‘R¹%C•”óâ G’Èä$=QcØï¿ÈkÙÒ’›ƒñ9I3؆— K ÷bþš|ÇÂÉ\ßᬠRpV^r33µE‰&«¡ß^Ú} m« ðâÁ12ÇQY(P¦]Ùs¡2d·`6Ø ¨2Œ–{îÍÝ›$›²I7z&]±!|”Êhþ¸Õ•“Ð5}~t;ÿøè2bæÚpçÌLù=_V1HW!Àî¨(о»®ïA“,Ë,ÑÇM3‘¬Ù4ý:?¿“ ¶#nÙ°v¥ ‚’ª€@§vQ}ô ûî~ú´iqLç¬K²‹ËÁÇψE‘®Y\«)à‚=×GÁ#ÁÖ̽1o³m­)Æþ^,‹$ Ž ·G£dö|Ýßw Lœ­§:a‘•fJ9€6@``@³÷Ð7C¤ÆŠy"’Täb´fÈ¢T­þÄŽþú ^Œ¿Ã1#Ì9œdi-Š—™˜)>x‚H[ñÐuãX}š+Õ‡Ž]ãY9HœZGÙ‚÷ÐbI»èŽûÔ`Úp£Äx#Y@•ÃHã!ñ/•òè<ûWt3!ØxXøú8±•RKX±bM’I$“ù“z)¸mØ»œB,±!U`Ô“2v;ñ"ë¢/Ám³Iñ²¤‰šLUa´ŒJ‚7gê$&Ï¿´íòæ®{ÀL †±#,ŠƒD€h,~†…NŒ§vYáÂc#r%¹’ªX‚Ä)4 YÝù:Ãm3¢J„Kµcáå:cÂrGÅÑØ° ßÓD³ÐëòÔ›iè±I¢&8òàɆÌ% ±y˜‘$Š¡Tz«u#5€!ÛÛä_ÇL„­Ì1$–å|¬ÙwF¼uª¹Œlè°qÓ ~ª…@Šüÿó=\éÊÏ}fect¡aÈ °ˆ ì`Yû\ÓCŠÌ4Ïþ"q¯#Ñô‹ÙüuW^{º½eò—d`GžÙa°ò"Üñ¨± MH@Íù:y,¸!ظ»lÒËûÄàÈîYBH³Ð¡ùky´cؘ[l\IqãÆfY3•™¬äI"¨Uˆ±GYÍšpHg µ±(‹—Õna‰$·+å}‘wtHñÖ™)•ØpÓL6À¼cÈÊ@=H hX$ÝwgQÍ¢`¬Ü¹ê˜K*D @ Úµ¥'DqM˜ç—]Â<Ùc›ÕŒ}%r@ hX®è]ëFk`ʇ2}Æ,2¯?Y¬ž\E‰¡@û _ \bñ†0‘—•82³{ú@$…^üå©åcÆ‹ÛR0 ÅwYH2—•™º"IPª=bµ¥2b‘Gù!Ž¸ÉŒÆ1!·ªÜÃe¹_+ì‹»¢G޵Ú5‚5ŵí{Ž p¶)X¢B±„‘”…ª"Á² v ÝY³®‘vrj˜üŸmÊt’|k( (W*À س÷:Ð5hgît/ªE`c$ø®Üv4&&HvMº y±)Z9Á«ä;]Ýþ"H&͑ٻÐÑgÚp¤Ã‹¢"8BúA]•’…¬]Ùƒäè ˱mscG†ØäGñ@’2§¢ Íû‚MÕžô3ò-‘³íÙ’$³â‚P¼X¨ €@`<€l ?s¡mÛNß&pÏxI•HkæÁK@b·D€h ôm“ÓaÏ‹‰O#Û±PZ‹·@’=þz a…´íû|­.$Y”/nÄ*ÙÛAlס ù¸Xù±ˆ²P¬\«)à‚>GGÁ>Äèj= m›ml||fÆþ^,‹$ ý,·FîÏŸ{»îô/°ÊÚp3¦\œ¼~L v€Ôl£Lìc³÷:U†è«ì»kåüãã’üÃ$n%€‘[âH¡D‹è}†•bÐèð±!–Y¢„•s䞀þÝ×ê|“¥}‹BaÚ‘%V…ßÖˆÆæYÝÏvbHò#Ûì5) AŵŌØk ´N qyÝøã‰$•®¨Šªaª- ÃÛððbô1¡¥äXòbÄ’l’M’2u)hŠ1ÿ»¶”‰h·¥Q?m) DÔUQ÷ jÒì–Û+(·#üõ™NŠ1‹Ô]—ø™·CË w©/ÀÔ3@¨HÉo$qMiŒc)íhŸ­¢bƤªòÿ=j“Ý´½’pŸÀÅÕÇôKýÃl]1ý$¼Œ ‰"ô჋}bPuÑrF_á{ÅþûkLÖ\eÆÛ¹ú|DcñZÒ„ÐÊ&Ûº±æª÷8LghÇÁÈH@žM÷ZP’F•ù7þ›Wô5ö''ý×L_еöOÉ·ýÓüõqýÿd)ÿ³iè_ì¤˜Ž±ÑÇ=Ÿ}eŲ©#4Ûvåêñ… ìG¶³‹7œKK”ëéE0ìØÓ Q2W±PE™‹’_!GCÀÔYÅìÓÁ­W)YK-ß¹Ö­¤^3¸‰ÙòuSÙFÇÿzºÖ(ÎHƒ0ÿÞ 0eÎ?Dœüz êÒ#fL¿‡²rd2&Wî­b\R~ÍG’1ôQ~ÊOÿ\ÝâÔ\2û+åôXlK!a–O·Ÿ:׊_dò«èª|7•꬇0ž'¡ËY\mòEú6üŒãéõA­mA˜rLŸ›þ*þڸȹÇè>Boø«ûiŒ†qú1ñ*ê`Æh‘›þ ýµqÙ36ßìÔèôN²àX͆Á8Ê$dµÀ¾µœ¬Õ›gŸ)KúÅxšhàš }«+@l‚Ü’uT’ ¶™NR9lÖ£âé•MP¼¼ƒ¶1æ ³^52qÓ*űi½!!½3ûj9šÅ™²2Öf.¬ÊOµëW¤iF¶Ëbg0y3¹>çV2£2ô†?ýZÑ™z'P  ãûèUÙ—/2 4õ'p°ûë2–(Ücf%ø› Ÿ‰o Os\¨ÛâlèÅ*ÊÑSØ#ß]SLÃXè^lm$$ãRWZ,hân1dËKµ>~úòÍ6ÏL)%¯ÇuÊÑÑ#8Μ0_AºY¶™¬U}Š|á–±«³)üWÝkÑÅ)6päQ=5çÜkÖ£ÉTÎ'Æ—ü,£HU «Î¼ÿÔ^~ó<Úí[r…°×‘Â4š=i½ÂÀÛ_:,ý©‚°4EûkqÏF›†ÏM 8CÕÕëÔé#ΛlÍ6F#Á •fRýk WF­{<çÂ[>ÿ…¼I–y YÜ^¸qÂy§8`{œu™!U™ù8ò@×¹]lñ:oCzè~úÑ—v|ã3fTi=5!"GdUÿS¯4íÕô}ò4Öë²’¤q b¸@ÅdûA'ÇåZÔx`f\²E›}G t²ªÐ¨ÿ™ÖpƒW£NrR»ö8møäÓGÑó®xÙ×*‡ •ÜÈïÆ‰R+¯ïßGí¯CáÕVÏ:å•wz-èádVàñ€êC©€"ÀÖ£ã‚k_arI§¿£VÙNCcÊl$œy"î¿ZþÚÏŽ**ä–&ù¾ÛÖq ÇÑu_l‹–taÞv|l|¦‚% ÊhYâ{#ŠrI[óBî¬k¼!Œ§'#D;NÙ&à0™~¿OŸ?†êïÇp\J­ß+NŒÑm0>¡é€É4«$}*,‡=ô?Wdø:ï8G ôp$³±X[T90;EeÄoP^›‚-æ‰<‰@Æ’Œuý”½—o‰¡–X?LÇ8ܲƒQº"ë¯ÎÉ7Ù¬:è¼[v+cŒ‰‹/ÌüQÇà›ãîzŠ'Ýÿ©\íV¨®VÛ"mi(Å$znÌÊG@Çͪ>/¡×dj¨Er_²9ÉñÑÐÅÙ1¦Œ à@I«‘­q\qGWÊÎvV&æØêH•x)òÊ@º`9~ÿ¦ºâ”+×ûÿSžRs¿gJ ³jšWÇSrDQbÇg£×Û\üQK£~iYË1–_Nn²B½Øh›'Ïö:é(å4å÷ìÄdÔZ_^‹Á·âH’N]} ý,©ì•°h8Ùº²u9#´ý–[^…œ|'ÁŽOR#j,ƒW>-bP’åm_ø5Eñ¤ëü0ñ¾U'ybFàÜVQaüv;Û¯=m'“Jöýmb›úöNáŒ#‚¢ÈÊ ŒŸ¯¿aùùÄ"Õ­×úœ“¦ûÿSV6ÛÑø×%tr0®2¶o QÃ/½Y¢~ÃÀï4°¯íþÿóg7ÿ÷ÿÑуlÃÍÃË“ ̪ö_â,Ñ’ˆ‹,ÊÄÍÔeJ7à‘ô‚TÑò@kUXÑÊËõŽÕƒ|—Ža™Riü(±Á€>[…ñ÷³`ttV4?rþ!Â'ÊX[1ðâ,’T©(6J­d‘dPú{è©¶4nŸs7È\àÂ&‡ùóL"‰ªGfÍŸþ©r­—áèÍ´úïñqK0È2S˼fÈfîÂå…½ÈèëI™:6߉㕸a`Å 1ãô£ RK«Ë?ú®ì:F¬×yrc{£g\äÛ7þ(&8hc1 %#«^ÈC$$;#]V`¶Ëœ›n͆™Ù,VY}iI. 0 :µÙÓÖ‡â³;î…-VAaHý·¨Åþ&< _>F›öJDf4ÇâsD.BfDa'¹$Œª†UîÂêj‰#»MŠA¶™Ïļ––eÉgAÛ¼d’»°£ùaA¯r:#REZ'á…¥£$CÔÀÿh8ÎC)¾Ì¤v$£Ñ°l?ŽªÛô Y±føg#.#y¤IÆBÁ"3›-D%l“bÅ÷]ꃧðüÜðÞ8cÇô㘤rb§ä e@H4H°{öß aøÀ+Ës"@ñJi oôÀÛñ  6IÕWì±sÌ8ø8;›‘•“¤e$³*Ö@ Eûêmƒ—ŠŸÇØŒJ¹‘ˆÔç•(,¨þ‹=ûPswZR4žËíYI·ïŒƒW‘åõ¥Š0%BXµ3z¾¨íöÔ·[ /BvÌÙ Úò0ñO‘&<²ãÆD«(…Í’ÌI$ˆ Ðï­^Èã£^Æ0:Y£Çl +B¨(ØJаHP„‘ä“¥» äÀÇÛþå•´ÂìÎe¯#Õsô¨( ý†®ì-« øVÝßá†0¶:³îkó6¾¦Ñ4Î'ÅFwÝ 1Uc#aÈÝ·¨Åþ&oLJ;ò5oV)ßâPüÿð¿Sùþ«Ã‰üW~<û]ê;Ž~Û~?ÄÙxðåGêÍeѧäŃHH’E:tŸ"ꌛDûß7•ˆqâÃÅ^"ÝžNÊ;,ƒßÝÛ;ìÓíÙ™^ž/Ê9¶"ñe‰BŠ,¢ÀcV@ñCÉ—È‹nÁØR=Æ (=iŒ¢<µF³Æ‰À%E{ >@Ï,˜iðÖß‘™8C ±Œ“ H °ŽCˆ$ o«:|ÞŽc4k42+£­£)°A>?}]Ñ){,ä7ÅÚ¦BæDb'·’2ªW»¨OUdw`èÝ GW#vm˜d¼ÑWª®6, 4 ÏYm³i$r MÎ÷$8y “&Þ®Ä2’ä/'ÇB€'‰&‰¤¨È¼~RmyÇ â\Y²D.(­€u%H°)bÏcº ~DÐK·AcÇžTJ#ã"ðf$‹"¬;#ý´,ŒP6üA,øë‚j9gùD‚ãuçÊŸ@ì;KÈuï¤ŽgÅrH¸øþ¤Q´G( äÀ*À²PÅM$;#Wњ݆͟Û²áÇ™”Åe—ÑÆ‘ÔÜ€³ú«P šŸ"˜>+iÛt)j’|²6ÛzØñŒ_âcé‚@4£º±«º%#fkç·ÄXsdáMÁrŠcéăòb9]“ìGA:ìh] ×g›âIÚ`‰¡i^,äHH,+É‹³ïã o2)“áé$„™°¢ŠiŽ´xì2ДŸñ›òH=?^4‰¿Â÷rÇÇ:'™³eTY>˜‹)*XhõUN÷F^º:? ’q'hâDƒæœã,LJp¡øM¹rð+íbŽ„}•ø¥° œÙÖ6*#9JƒüÅ$ÕÑ d ]›_tÁLŒ|S’ å«n"À$ׂžô!ÂÎ2ŠMIÓ6#nÞHЍe^ì ¡&¨’;°t5Ší¢GøÔ^+2dä,éæGŒ–!˜ßJ?”ª {‘Ñj˳6Ö™2cdÉŠ›ø[‰âˆ\‹0 ’dcêòö5°Ý…#nnV$)&7,v0c‘Á!êGÊèýy«$ž¯JLÕ°ô©ˆ&Ç;™FAÄ¡óÝÖRh_|@‘¥.ų±ðþ*K°E’ŽFY§û­ï¬É&š9b |ׯ(sމ+öL›èŒ_â'€$J ÕT¢–ƒrlíá2nŸ"²ÿ;Ñõxq?‚êî«ÏµÞ¦1.Lãí°òø„2ñYW'!g¢íÔC7}(þXPkÜ‹V¢L˜³ÖlL†Åj‘¶§Å·Š ÌE“#!¯ cV‘ C#mÍÊÅ$ÆåŽÆQËë4iò7VI=^”‹lqA¶/ÕÐ 9AÄÆ{¢kÓY  O|@‘©JÉnˆÉ‚Ûpa͘|»E:®L₀ÃՋcñlÝP:´‹lô[tDíxÐç À†P|ò¡çzŸÜŒS®Í‹ñ<ò£É"²¼ÝÙ1…Õ÷@ÍùÓDÊFè²6윩°!`Òã…õSyGdQ±öÕIäy½®)¤ÃÈln¥;[‰âˆ[¬¢‚³gÔcêò‹4½–Ùh ¶gdbDŽ[Œ00 £õ#ä  /#ud“ÕêbˆM©iá—î$ (,Lg¾Ízk!4/ºY#FM“’ˆ»N6tãåŒS¢äN>•‡Ź@x6lŽª¯Dwè¶ðs \ÊLŸáð´H>¯XJ'‰›€$J ùzG® ½S-ÙŽCBÄà|mñf/Âø"\˜de™¸SYë¢;¿#½sœœz:B)½žmÿI¸›V:à.ß(¹Y£ Å€³ö°°ùdšUٵƚ» Ïý%cnЏ§°ŽBÏ‹É^Ô ×½×EÍm¯h>I™$øÆ œ(v¹¢y†¡'¶$–³ö {^“æQáÈÞ?Ó!jùIö×?ø”tÿ†2î¿é;t‰"8%–6æÑ:RQø€$÷¯Êõ¸sef%ÉWúYÄÛñFÔÑK3bÆÅ˜Õ…«û>Ú¯‘ۥѤï³.áþ’°·ÉNl0hˆä*I€©,X{-ž Ÿp¤wícÉq²>:a'úKÀÉÎÒá?bQ?¦y UâP7€ ‡ß‘ûŠy>6_èˆҎ݉:ní‚ñܲ'1Ó+’U{PWš *®´òjÇ‹u¡˜¿é{lÚ}ÕËHÙ`-²š ¼Uteêü’t|«["â{+‹þ—6í·TŽg/–æQ;!$–ª mI¨t( Õ|›Aq:/‰þ™v]‹vá#(-"·f•ذ²{&˜vu%ÈÓ5+Vt¦ÿL¸ñÇ$˜N«(ú õÍÿQ‹Ú5áO¡Qÿ¦¬ Óè4zÑÿP’ ús¹ðïÆ«¾å –e´ gÜk›9QžN5veè‚mvlâ¶ŠÑfïÛS¤]±Y´øÆ4 èFN¤bþ•UÈ÷×%o$˜6ّеþú`ÆHbcn¯äíÞ·SK³-ÅöIu[å8ýõ>f¾$ˆ÷Aâq«ó±ðú¿ütý´¾F>@uî§TØø‚Ǻ×s‚u*câ7`{u~Fj$z{«}eÑæ5ôO§ºÇ—Èkâžéÿx_ ø“én¿ñ†•ÈJ‰7AÑœió%D‡‹uzå2Ð64®C_L[¡!„Ëu^t®Añ!`Ý‹ú«d{êÔþÈÜE³ŒI¹îD=X=k;OäZÉhtslÎ>‰A¿jÖ®jdE—´1$H‰¢oVøÉRó;qŒÈ¹=Ù½\¡ö*ES7m•}EÉ¡uçL¡ö*C ˜\KÈY$êÜ}’¤º-ÃÉÅ€û#Mé’Y.ÆœÈíˆþúÕ#9‡É¨L‡÷ÔÅ08Цùžÿ=ZAI°a}Ïï¥#9 ùaým©Š4,?­´ÅÙ‡oßV‘r`qnß¾”†L“ƒ2vÏGf$ƒoàL£²~rJFæu6Ue€ {QøI>5èãhóò#q ¥7Û]L%FÜeˆTùö×)E¦tR´swâhû ÕÖ¸É#¬lçQ³`uç\)YÚôv¾„ˆÚB¾}Èׯ…R<ÜÎÎÀóãûk¹Æ‘ŸrÁƒqÅlyņúbqÊ4jÂGŒÎÿG›ÚNF6y1ßÒ>Ã^Oøyt_ž/³©ð¯ÁmY7>~lGОºñp¸vsåçË£©¤äçß­ji¶a5Eo‹Z¿_btN†Û4âc‚ç ‘ÐÖ¢½™“]2ør¼²³·€hkIÛ#Ò4ñ_¹ÖÌlð9 3Îö±zù®éýIUþÆåJ#¯}O‰¡¸q7@Ÿ«ØÝÐéZ²ÞêÉË_¦hþz…wC°JœuT ©ü«¯òÖÝäìæš­vXã2¹dŸ`=ôJäFê%ñEå ßZƒù ~ܦ"pë$Pèë£ìäº/™‰Ž&^,àR…&¬Ð$@hVuÒ›ŽŒtÅâ!Yùp"½É»×5ÙѽŸpÅžFÃŽRdRAHŠE,X‘ï­ÉR0±0î8sâ8Šj༜¸ q³Ø$GG±c¯:•ñ¡i»&áÊüÒXŒU³©_>*À»±ãβâú4¤»&,ØþU2)Š=qàŒÆˆ±ÐøÔI–MvW/qÇ‹fI ²”Rl,ô,bÉñz¸ÈŠK±ðÈÏ ³ ±ì|êÒ2äÏŠÙ«ŽXóåF Hº'À5Ýy­GÙc-ѳmS&eËÅÉošÛÓ |Þ6QUv Å}µ\ZtXÉQL¬ì9`2«± à0ôØMÑÝmfq—E‹Wf<¼ØD¸¢ÈìAE8IºFã8­±ƒ"(D ‚×ÅB–&»=N‹hM¥Ù¹#¬$Ä~к³^æu1mYSŠt7$ýõ"$f’X$ÌôÐ’AïÍuä_ƒWý´q’VÍFQèëìÒGÉ,®ªÛ14’N»qöqä/•ºaËŠÙ))*„ …H$v+®ï«×I'ÑÎ-Q\,ì(à9Lç‰~%‹Y ¾UìN¤Sº+hÑ.í·Åd¼ã„‹ÉT›P,šòOCÞµ´™‹TdÜrñãœ,…©ˆ§ Jöh[BÏÜë›M›N0çâ$‹‰$Œ¿€• E€Z¨<o±÷Ôn‰.ÆdØ _?omgù: $qcz³HUIgc@Ù$Ÿk±Æ]•ÃÜ0÷gÆrÜH H$,°Av5v…^Ã+u\-…N*X¹>ODô<}މ°Òfy>'ÆŽòî9²RĨMH¡äž…÷Z™Jú.1^ËK¿$sŒr»¨eXзDÕš>懟±Ó&LRdŽ£æAT³Fyûyy£«–¬¸¡øû†4¹Ÿ#êTæ#!Žñ ¿h~ÿmX˜hˆ÷¬IÕÆ9~q¨b’ÂÈh’¦‘`‹m$éжN2Êç2jŽ€³½dõC²óq°#Yr\€ÍÅB©fb|$ž‰¡}| t9颸¹ù˜é•(tu Œ<|ÛBr·M¿!q²² ;Q‰¾,…“‘[e ‚ @ ƒìtÑLýÏkElÙŠ†²¡c@Y$($<“бz lr²• ¬ Gb¾ú3ɺà¦`À’b$,ýÛq E…-\A"ˆÙ±×cRÑ)“6 ¹_Ã$ŒFOL‚ßÙ¯ÿ–£•J†;t©6ÿ7U¦TRÌ ‚Gd< >:ìj8%ÑTÛìDãÅ ÅÃÖ5 H™*ü ` &Å ³cî5’Ñ\bÝšãÞq_rÌsÑn%WÙïÊ€HȯßZ‹³2T†ân{†:eãOÊ9;BT‹WFùiu¢ÓhŒ­×tÇÉŸ‹½WÒH[ H($Ð&7^´e«5"ûr:Fx7,¬™qq²CÉzª Ò’H«ð{À=WzâS vÁÜ'dÅ‘ù*+$,‡‰º 0ƒßc®´4HÞ6óÓ¤ìËÞ”žœlÄ=Ä '±àòÐÎ$çn8ƒ5r£Jc é±n`Wr±FÅXŸmBMïmŽ(eY^A…áôaw,Y¥€,y¯:wF‚Ô(ßBSf,Ýï L‚g$¡IA T è›®ëY“³qThÃÃ0ijvÄéHIìRï[|é):zIÎA4-U7õSc£Øë­hÊè´;¾Øï+˜+¨Ç“˜$øk—c»ª®þú~‰ƒuÛò±$͆r"ˆ°‘¤“‰_6׿^ÇB|ŠM½mØØ±çK$†bõDÇvh4Fû¯ò:,ۮܲE‘Ùæ@è©1 H˜x‹5f‡Ÿ± 4” ,­Øñ¡)çðäõá$!?Rk“NÑÑ5$ilˆ’‘$ª±ª–f&€Y$û ×Dí¥Ð­»pÄÜU¤Æž,FR ,0X ƒ]ƒ©üŠú·Ä&Ër¡˜*…RŘøI÷èпmhŠ…ånøXp.NG¬иa!⢉-@•èû׿ç ÅNï·bLÏ“Là¥$MH($Ð&>4›? ˜på” g,!Ní¨YñↃâSrÄ̱ñÚRcf Æ jh€ÄH Šø?m •ÄÝðs²[˜J¨¤¸ò! Mõ(÷±ýØèËþô~º£k¢™y¸ø1 r¤!Yø"ªfcà'ÅÐ>©6™|Iñó`L¼YyÇ"òF:Øœ½×oÁÉ\l¬‚®ÕT¤gˆ,@!A&4 ñàèû6n$9PáÍ0Yg,"Ní¨Yñã¯}³4{®ù‡¬$¶ ñ2†â@4H¨‘àfFŠC½í“«ºdõ~£3ÆÊ wõ@ :ò,xûJ`v>ó·¶#ä ˜,LEh\Uô ›C»êõ³2‰™Ÿ¯Šä¨b§’• ƒD@ Ìhd¦n僂ñ&fJ«LábR ±$©øh*ÍZ#î¸ š6é2*bÁk‰ 1…-T @&ëB¤ÊÅ»`O˜Û|9¥ú A€$Q ×½hj·dco{^W¨aÊR"NnÎ¥G#•^bÇ^u Õ‘÷¶K&`È!" H6V‰’lUìUéhR+.í¶Éй‚vàe1…±bÀWˆ¬lU€ ñ£VU¢¨ëad†ŠUäŽ=Á÷Ö1f²F<Î8y “¹qg‡@Ð$€B‚Mh`xÖ$mN&¨öœˆ”òŸ¿ «ƒEÎ"12.gÛW2¦€h•  Q ‘`G½iƒ3’±QdA\mÀE9»0* Ù ½Å޼êa+5œKàfCèKŸ.yôâ :¼l¬¤€@â@6lUìUëQŒ“2ä‹ãäâ$ÄäË,!PFŹAPµÊÅ`| “%E$ÍÅ‚%ÍÈÜyE2ˆ¢3Ze¨@É"‡WZ˜Hªq6̶>²e¸Ñ°AÓÇ+칡ebmÇä!Î!P³Ä,:òG@ö 胣„™3‰¯% —šÁkj.ŒçÁ’%l}Ðsf`T²9@z=‹yÖf”âD3ÆøRåÈ…ˆ'8ÙYIÄ€I6*‡v*ïL$k8—ã 5Ë9ÌÊòøˆØ·0H*¹X£b¬O¢ƒ3”GŹm»vySfòŠe/Tf%@²Ô ä¾ë]0Úf¬ßmÄ™!ÈÊ¢à¤,$I…šÐ'ÇhÃM›42C‹R4*ìñé‡2ö¸‘¡*‘^|õ¯?3—£Ó£ìð‘íÑ+ñpA¯¾¼²sޤz’Œ•£D{^=ßw÷½e9KHÓQŠÙ¥6Œ%Pd6°uämª#pI1ßÁ6Ä`Uý‡ý~Ú±S’²ÉÁ:ɵ DLŸQ5àù««ñuí­c'&QN‡Ã²lòJ`Dú»ëº5æƒWßÛW %lÎjèf6ód°¯âªÅ¿#£ØëIqµÙ"}á}ªò=µKœŠÏðÎÇa§„X$“öY'ôûkKŽú2ù옾Øff‹YYmHt|U¡›hTß ü; ŽLp×øOVh@  êÍj®=#L¬Ÿ ü>&ô 1jü®®®ªýêïS•—ɺ¿ lHÑG ±Cõ?û£¨ã%°¥Äÿ«û,‘™!Ç%@»(EÊÇÛIFIÓ5A«ûÑÅœB_ ©b5äN¾:oèKü?µ×ÓŽ?•kœ¥4ΑŒ$º•·Ã"„”R‹ñ¨¦Ã‚³#í˜ñUóçóÖò³8¤zoôOöfy  fë]x7ÈÎ<ëà¡LÝñûëÝ[³ÆA¯ØϳrèæüW—>Å.F9¦ H?ž±ÈÜQxҔϿ|V¨2Áåã^Í/g³Ã&Mûâ.`²|YÓË"ø’ñÅtdõ|¬ž$Ùx7ïŠX•›,WßSË#K‰þ7ñóâôòÉñD÷ñïçÇ÷ÔòL¾87½þ¿üÀ^§–cÅû¿øùá­ydOøƒÿˆßWË!â‡Aükâþ ?}<²/Žükâþ ?}gÌÇŽükâþ ?}<Ìxàƾ ÿ¿ÿž¯–DñÄùñýüiåñÄùñŸÏ–cÃ{ßúÿo×–eð@û¿Ý|ðýkEË5ìxàw~ Ê—vŽA¹?¨"ν-ϳÏ̱èîG³íÑ¿$B+Æ»x q\’¢dÛß³WgZñÀya´mü}0´¿kó£ã•É"«²íª¡õAÎ/¹ÒÐù8¾çKCä“úí¥¡òq}Ζ‡È9Å÷:Z ç祢ì=H«Tl=H¨è6¤?Ôtq}Î¥¢|ƒœ_s¥¡òq}Ζ‡È9Å÷:Z çÜéh»q}Ζ‰ò ¼`X'KEØ¢É:¥YOE´%#2‹Ëf¯¶¹= ÜùÐËì¼ —5­®Œ¾‡j˜ h@VJ"ˆÐªý·=©7è¬;R¹òBμ|”r£øk0ÉÅå}ë\Tv°pãÂcOo7¯LcŠ<ò•½ñ­ÓFS³öÜpXò¸ò5GN8ž|I$ÍÅœ’G_–¼­³ÕIÕŸ•™é¤Àªù:F ±)¤O¶â¾>”´kÜ { ¨òMÙ«ó^Þu³žîа]yöзZ"ÍVƒ ¯òÔWì:9îXû4?;’hïîuÇ•âwâY{~ÊÞ³£™-!º+î=y¼Žn‘è—ŒOe ÂÐ…Wöï½{SøÒy‘޳ä$a—‹gïUÿC¯Ÿb~t£“‘L±©0’â5¦ ½?½“ßÛÆ·A>õþLJ3k¡ß*>hÌq®ÔB­H¿7ß`×ÛXɸU›Ççt:øª ­s:HD1Ë‹ˆ±@cŽUÇTÌ«ûû뻚“ÛöpQiiz-‹$°äAépIpV @Ñî”Pî¿mW%’fqtÑ¿lP'Œ oHYú:ëö5¬§òîÍz£¡”Jäªð¿ÐënìÁ—yÛróf~3G.:¥+ÔÍdb@ÙÅ ëR9É[4b™—?Ó8ÇÒá~©qø®¸×Ÿ޹ƎŽìÉü3-3CMŠy^9CŽý ÁèÞ­¦ÉN˜1z80Â{ôã My ënÍUìÌ ¤ÜË%T‘X0zØ»$ñ¡Õ|öFµ’¢SléG$í3£ÁÅMùÎÇ}yzïΦ¨lç¶ î$Ç‚ !‰±Ê*M/!ÊDЯ?Û­iµi„´ÊI—RåŒcê¸QÅØ[0²XÑ è ð jIÆM'ÑcjÚ‘Ÿ"ñˆ$æ×eŠÛîhÕå®v³OÑÓƒ^ËÌ_cfeÅ&91OÊAå ²¤¦è’+Ȳ6Ñ í‹µmxؘûXbÓŸR!(Ù™º'ñq k­¢R2üC´î;†l¾” $9Ë+€@Z™¬‚@H x¡kBfmYòïM+ÀÍfE›r!@»²\’H„èRŽÛ£ÎÛå‘ðvìˆñÓŒx™A‹8'Y‚Šèöc®´%"qfÞ1ð2s„ÈùòH•£ O€˜Ò¨ö$÷²H›{0“ ¬¸ó,Œå¥i¸òv=–úIìôÕŒ¿âæeäÁ>>+ÍŠHç…)pÜH’RTäѪ š FŒ3›·Ã…¶.'ª‹Iò€p* ìÙuãßS¤SFsï-:âÊU³"•XȾ—P e&Ëthä)°–h6ÍÓy­“£Ç1’O@†¶)įº —¾È"“I±í¹ûnt­“4rFØè¾¢DUÃHÄ›cîÄ“Ty ª74Ðnˆ“mËŸg“Õ¾bl•ždY)ºu<!T( `z7¡H¤X›Ü8Y †’#JäB’ÊâR²lÙ“Už¨_¶°oøšàÚ ƒaÙJ( Ù  ?ËE‹’9›îÓ½gd:¬H¦c!yX»,xñ(&û m%F[ÙÙƒ/-²ç†l‘GÇÑ›ÔÔ±g¯"]ùÖˆsŸ#;#.Ið2cŠ|C¤³#1bI¨éˆQ^l€Oº: 3nrÇ“3r–^I"E†)š>LT1WéZ¼ŸHºÐ,v¼¯áØØqå häÌd„²Êý±$ñ^|íÖ¨+yøsgž1Ȥqå 0-‡“dÄ|’E`¦ï…Ÿ&á&^ S™$ÇHà’)ø,N¬ÆÜX ¿P5MàŠïºJG_Ö_è?¶¦ÊRN r/Ÿ¾ ´ìçæÅ+àåm€3@é1   ?k֩Ѧ¯b¶h3ðþsp|'3ËÔrH¡¥‘ClÁ@³AF·®ÌÝ!ÊÏÅÃð¥å¢I ‡#‹‚Q”€ÀŽÁafÅ€~ôfHcBçMÉöEÁÈÄË’GY(Á’ªÈ ñVbÂÈR=ÙoÉ·ôJF]ÛhÝ3dôšë6q8‰‚¢J¥‡" ¨äHHT-èR5ämû“oQnQϯ̆nPžQ ÔyU[í¯°+TR' ˜·…›"CJÙ®G$”±°Uy$±»¡ÕzÐR4à,é•“Ÿ—,QnøÆ–u×d³}Ç*>4 /' Äë2*Fˆ ËË‹ð•É‹#”‚2”*ÊÁI MÑ$W‘ØèžÃo\í£jÆÅƒm[ ú± €FÌÌhŸÅÄ¡æºÔNÅ#'Ä[Vá¸fÉé@ÒC‘Œ±Ò¸$©šÈ$Ä€²Š´)gÚ·7Þ¡Ü£É‰×æC8hO(㺀*"Øøm}Z¤üJÄ7 åò3öé#fLR ]¹¦äX×Bº½ÉÖ%٣߲e vƒ3p§o0IÎT$µÝED…z4:^º:€ÑÙ4YY™K•ÊC¢¢õn6,_@|z¾À ÈݱaæcE<Ùœƒäd´¼]”²Š ãÕÒƒÕuf¯B>Ã~\©pÖ<\'^6¤eEnùä_¾v9²s¾c#ÛO¥(&wiMžDžº4<ÙЇ/+eÜ&ÞÚV…šËŠx¤GÄ/"EÙb(¡@17Ù¡¤ÌøÛ^çú’MŽÌ‘dÊñËÈqå»%ì’á°ÖdÚfÒN&9¦iÊÀšL¢!Y4«#1+ÄÐ=ûª®¾÷ìjd§•É(Ïvùf È=­X$ø»®Àñ¬Ró{Rfh±å…ÉH#GpMÙ®ºò5&Ô—{,->´f“WG<À€Î 5Dö^:ïÍé”S_丶Ÿøb`„°"Û M+ïûë‡%^ŽÜnIlÏ<}Ýyë—âu1ʺÜ{0û;ßè©@Þ§¿èïÁÿTóÿQ¨#è/çûkÝ#Ä-—¢ò5fåÑËøÊÏó:âoXåü®5óG”ÙvS»a •r¼ F¼âržÙMEÒvaôÈÌöïεã¢>BÙ®#Ä«1"C^ýj> ¹tNWÃQcšbTø=õ­>*"åer~‡çá•ö|<.\Ë£DßÉ1¼®O¨/¡ãUð8‘s&„!ý5‘®Žžog/:ƒ›& &?'‰ï\%EÑÖ3MX“*)ì5{}'R¤VâÈ9‰oùN­Kè·1°r?ùt¦M?aó_|‡ÿIÕ©}Ù&hÇTßòJbרzñýŸþC¥1kìƒÍãúN›®…ÓìôèóÔu›ÓSÊÉ+^¿éìós´ÙéÈÊ)Lê}úפóhedúfK¦ôJ,ìÁ‹‚‘«‹&HC¦ê²ž ŸÇüÂü(…]àlv~Ú«È_ƒ7Ã(®@9Wzè¯ÙÎ_ /&ÈÜj7A'@=&0ëȽ[D¦YHhÞšceŠ =(üƨ´@ àúè6X"¸×RÙ^*[ðmQ°‚:Alž V+öÔ¤6AUö_o¶¨ÙÛRÙb±ÿOŸzÕ‘Ž~Ú Q ?]JBØPû ) ‡bô¤6IU¯Â,yëT[(¾ÿž¥!²V%TiHl†Tý´¤6r®¾Õª-Ék¿ fYXsé ¯nµÎYY´‘d\€uëÜè› GÑH¨e8ðFš²Ë¡ãÇ›ÐÁ|ÄÚÚ衊I$S-Q:4 !”0£¡S   Uh@U (hVØp_¶:*à #ÜhTÎ6ïµÌªÙK”Ä{¯¶¼üg£ŽHäcÃ,²…… 7Þ¸E6Îòi#±Ž™ÛZqƒ€MkвK£ƒ¦öÍØ9S’r1ÌcØç]"äû9J1]Çb¼ lÇL´*ô%°àµZ e'Çíª9ÛïÃø_ã <ää¼…‹ûkœà§ÙÚ3pÚƒð~Ѷ§§$}b<0FåÍÉ#v.ß%´lOÞκ(¤sr³BähÄ€ÆdŸßA‘ó3¸ÌÎÄFA‘¯’å.èúØÆêÀîÏøj¼ŸËZùÝQŸ…]€ÜçO£³Õý¿-E›WAâY#pÈK¸O–³“7‚-úëåŽI µÖJQtr‹„•–IL~T€¢ÏZEO$¾É,1oèl{Ôé*ʘŒ@=u©“NŠá´>O‰sPÃüõ¯4¯¢.öZŒ²£ $×Fü ïÁýµÚ”¢q”#Sâ<Ä{l"ú⹚ôu|J»-'Æ9R¿¤pH»®û¾îÅuàþÚë)K9F1r¢ƒâœ¿–~x$=›ñÐ?ÛΣ“´—³XÇmúÿOé08”TÑ!¬}¼×ßþš|W°±VߢSâLÆ…YpC~aúýÀÖ3§Nÿìk VŠËñ>G¦Âò/³Õuãïí­«r£SÄY FQû s|’NŽª’³6GÄ3´ãýœ€ =ß]˜ýõ¤¤ãf~*TiÿXrxÐÃj–¹ùeôkÇoñDå‰8f•nïõÿÓ]>V¿f*;ýÉø‡%ÁYq8•«Õë­ɪ£wÚ>õ#DËmD–ë÷­L[•~¯­ÿØÕÒÿ4\ïS¬A×g‘ûuÞ¤Z”«ÿ‚ÍTr_ù)“»LáWåïïWÖ²ÝŲ¥M*ìd;žJÆ€ë oèÓ‚û¼¯8.{&…÷ÿßG]e£—шÊ.TmÄø‹#¼ƒ˜ú«Ø 8ùiQ'•–“âì©#xÎ4i‰Mëï×ö×YJN¾™ÉF?䌋ò£ƒšáÙºíºë¿5öïVä¥B¢Õÿ\²™‰·± @=õwUã¾ôs’“OÐÅb˜œ‰³¥Xà°³àõÝÿ–¹æÜ[ú:`“Hr|Yš®";s‰üÍíýõW+PÈž4çL™>(ËiT¶Žêõ‡Ë)HÒâŠg¥Lô‡h;”èÜc„ÈÊ<в@ñßZöGhòJ‘M«vþ!$ø²Â‘ËŽÀHNkØö4,‚"º V‰ùÝ7x¶øÔ,îÎTz’qP–%šžöýuWfL¿ë4/ƒ›ØÌ³:¬€¸2X)û$hÝjÍbËnßãí³…l0芭+*ƒ_QX‘ÕäûUO¢nËCñ Rn²mË8Tp¶Ù#}ºN=ŽêïØŸm-PJËm;ÈÏËžLu3€‹“r}-ÆÊq›³ä}õmØ­ºi3÷G‹pÂT‘#¢9y€ "‰¡FÇÚtz:Š”¬Ó•hìñ£ZèbÞF]×pþ e"Vi\ªú’pAJX–j4©7_o×B&_hÏvÛ¢Ü#ˆ ‘M«yR Ђ?¶…nŒ›ÏÄK´NU *4Îd¢1ˆ£È€¬ÄX /¿iH'a“ñ cî‹‚øàÆr!“êæT7K]¨ä ’EµBvD?¤ÛªmíŒHÒ,/ê[„ƒk_H%Z› zl¥pþ%ù˜¥™ðAXñ ê!›™_Ò‡êªÏ`‹èê’ÐÜò)àÈ›*8ÑqÀf’ L¨À­Š`uä}64Vcî8c*LS 2:´lÀ•*ÅH$uííûŸ: B7Íäí ñV1<„<¼G*:4IbY@Ù>G¸Z6âÍf,yxý¤¨ A?ÈèK­&ß [¯ðÿ•FQ2ÄÄMüËeä%v£Üتc]h[DàïQî9³âF°*Äî•ó ÊJš$ÆKwD›ª4/B‹‡~hÓ$gcF¿)ê¿ËÎ$è]©°´ÝtFüôt#è¾ó‘ŸóXÑaEó8®¡£ù‹Ccú‚ù0"#óÐ¥œ`®D¸1#¾L‘F'ùd bÎX­HÇÁð>ýÝöŒôÝvø³Ò"¾¢’Q‡jE‚èAÛA_f]ãâ%Úr oxÑQ¦c%ˆEDf#ªïì)Óek(¯µhgñ2âçÍ‘¸ä`Ë„ÑzH¬ŽÌ pK ¡àZšîûì Mšîï^FFÜñ6!7`ÌÀ aã H5@žýô­ØZE1w÷(§mðI,e8˜òyFÁ€ïŸ Hõ_q¨ÔEÈ3öÙ'Ÿ„‰3CèÆÜ¹¸n4­Õ‚k²wuF˜ÅšÉˆÄXXøS,8Èsq̼²³=5Z xƒÄÙú¾ÃÁÑFˆäv‚“øHÜjÒ3læä|B˜Ûšà¶0ôÛ!`2zŸW2¡¬-v£’‚IX ÷&¬Z:‚.¿þú¡º9ño ™‘•ŠÌ¸è¬Œ¹l° UEš>|Q º(wÇemÒ\DÒI¢’pO«é’XI£Ðþú Cë+âcKXòË“)Hý,žQØ Iæü)ð<õùè-mç)öÅÜñ6ØÙ9q&H^M‰°Âͼ÷ ´ïð¦ãE™bG?1"4Ä€H%›£×UоôΑŽ@h/VG} ]w_B ³2T²Á9â; HŸZŽ)…&™ÏÚ7<ÉçŸÑ^x숒rƒá¨YEtAçN,éiŽÝ¾ m²’LU¤Ë/I&èP>ÆÍ}iIßF\Ù9câm_Ä%–Ce†'°Ô¼‰ ^(uݬ€j•‘¦‡î[¼{|°ÂiQH¸!`¥‰¯°Ü“öbæÞ^,Óɯ ™)Žóz”ÜÙAµØ¶QwvOT/@º.›Žbî)…—€‘¬¾¡…ÒnF”ŽØP AÁ G²4 ¿tŸ+2Lœh•ã@ÄÁ‘êd‚§é^+¿ìt5È0:üµÙVÑŸuÜ?‡G,hÍ$…WÔ“‚€±fj4Rn·ê)¢ÛN|{¶ÝáE}E6Œ{R Ђ?¶º2o?Ç´NQñCFŠ38ˆEDf"Å —z4dn©ºAµÇs+$¨Gô³(ñÙ"ŽmÕvöÇ ²4« ‚KbPm@úA*ÔlßÐÔ}] Äø§Q<™œx21hêèŠZŠš³ÓõH­"cߣ–˜åÛÓæ1æŽ3ròVg!Wê¡TăѢ§Ík8£y2#øŽ vá‘4eÎKBTÏQŽ*X·:üaDr,•tE­EMYý*%Ú+…»áÇJ>üÄ2¤~šMÉX¹}D ¬Qó¬¨År“-‹¿á®ÊÇÅÔl–ˆ†ž£AbÜÈükBS"/Š|“ FX^GŽIxpB•[‘  'ÈÐVèœÿ‹ ÄTÈHÀbŠI¥âB¹5Åhò +1PgØ)C vxÿô¬ àGgÿxyªü_ôÚlñ‘ £`øë^I¬]¨;VjŽ£^Mvh~úÌ!›7)` 8T±Ù¢{5U@ÖÈ®«‡äÓgËñN8°€áA^ ’M$×_ $øèkQâoD—*F•ËHòŒQ“‡.]Ùâ¼vß“­(uq8¡”t,xÖ"äûGF‘)“›Õà…$Õí¦Mz+Œz²Ù›~ˆÊØÊd"É­V²WFbêUböí³xØÏ† ƒÐ㩯h³“ôh&Ù]â-ÿòoÙ3‘?À¶Á_ì©ÿ(ÓÇ9ÈǶgåaœ‰ØEüªÿÊ4ñÃèg ;ÖœTÿ—O>g"?‚mŸ÷dÿ—L"L˜Û?îÉÿ.ž8Œ˜Û QÄOì£G‘NvR ™¹TßFõÑtsé–€þº¤þD€CBm“¡ µÝƒí¡¨ôG•³ähLX?Ò4.!;ú~Th¢5- Ÿ=ËÅŽY9zü*è÷ö?؋ׂ3ÇÑï”2Ý•›#$K ž¢Ûª U¹6ýþú)ü]öÆ6Õt‹ D3™!Ùå‘@x7×Lþ4_ÊÆ¯¤½ôëÝ”ôàô’äÇ1† Ý>¯>Õþzëš»ýÙÉÁÕ~¨¶>$ÕBÊ}U BGÄDuÙÕÎéý×Ù·§ŒLUšü„ µHâÞmÖÍù1ã €Ü^z×I%g2™û$Yrœ˜˜ hDr)Kµ²Mv$,ƒ×ŠîúiDÇl®6!;ª&>ézcñ_›óãª×5Q²c‹fœÊ¾Ÿªò*pì3;7ØÏv{;•Q˜Ý•M­Û!gž6  R@dŸaöóß奤“ú/ɶŒ’m‹ŒRYAfâÕ((Sc¢I=’I&ÍûkEQ%6ï[ ¡L•VyCJÞ—L:@û³ßßDãwEjIvN~ z±¬‘†–#ÆwÆú"…Y#òñL”INFœ8±þ]"Ž!H¡{kÀÖtÙ]­²° ;‰™”º³§$Š  Ð=Y¯5â¹$¨ª.ìÛ1iW4réÆ(ö;6{ü´×Ñ6™ˆàbcå7¤‡‰Œ ÉaÕûØì ëÁûIJèª: ¦8á6ÈFSi(Ød×›³fÿJÔ¥ìÌcº3Ï˧"rgäO¦huTþWä÷}r“‹vÎÐRK±˜Ø‘>4q+tމµ¯È]íZ¹[lË$ŠîQrhÂH«ÄßhOtGÜ}õŒS´j¤ÚØìtFŽ…÷Öe–™“å,¢êö¡Ë+ÝŸÎü 4(yÖå;THCÙÕÚ0S'#.^B`À€R*‡æ>ç]8Ürèå;®ËM°Æ¸G4À³UdŒ¨P¦ÇVI$’I»7äk¬mÒl1¶8ò1À2¯¨³‰yÏ@  ‚ Uu~Ýß`ÈÈ­3D›+$Ň!,ÞG†ù7.D€ O·}üõU]“t#tÀ’Iá+<ª¹‹ëIŽ9*…‰¢I$$’{'KdJÃ7k;¦Ì|vW2´v²0y(#£dÐ xò,’-HT»j¶,|ôV‰$•à-̓ó$Bk뺿=>"¤Fá³A2Ÿ5P¶8‡ ‰ ¶I*9}$‚E› ½ìÚHT‡dbG›“>dbæY5€†°:‹WÙ  uzÊq°ã*— ±e®d¹1Éè—8ñG R ì–7Cìžý«Fé/±¿íù›|O6VTr)Ð*寫<ˆ :ýuŒÉ5obum#-Y›wÛWu†$xgÇÉK) L‚ êÇçbÁZÈoÉÇÄÇÆÅÝ ŸÔÉĬ ,âá²I±uãS$) ÝvÜsNZåÄ'R…‰ŽÉ!M€¤‚A$ªîÙ •.Àº¾zå²Ç$Ñ”%‹%q¦ºÂ’*Éj€¶…"l+‰¸•˸½w™#áMÍ–³`ÔvlöY+ˆÇøhÅŽø²æ§„ØÈaƒ*ÄÆÏ&`ô,·]êdƒV6 Š"²ÿ‘ÕhÏ ThJv¤S~;¿ð¨êµm F¯=«±VgpÓ<–îÌG&&¬’z}Í“Ù:Z X­Ûj}Âxs1²„3AÌ#4£pc 2"XELH‚I*³V~Ú,¿‡Ý_=r©&–9&ŒÆKJâ_Ò,)"¬‘溧Da|:¸»Êù ÑzòL±<¹°#¶$ؘü]Ùì…±x ÇŽøræˆã¼N,ªÇê$’y1¥@´h-€ø`K6Fm´‹£ÇPª†Ô~"I,I&ìÙìtt-Ö‹MðÉŸ,™I댡??DˆÉ Ä/Àñ «î¬ÝENËA°$xëd38%¤~5ɉ²kÚÉ&½¼k›…»6§ª3g|¹™>ºæ”å§(*M­’hØ›"È=«»(ÒVÍ2í9O¹úÃ(ü¸‹‰‹ˆí®ù_ŸV£ŽŠ¤f‡àõ‡5²>vã24‹a˜l߀ <÷g³\[&Bñ¾ c¾4™Å£ôš$(ª±’I6z^èUt5Zv> ¿†Å’³ÁgU ÉP¡M\‰ód›³g±çSŒ´Z…LÇ9jfbþ™ H^ qè(¯ÚÍö5qd¶üpÁèç…šd»ÆX1cdÐ"ö; }D1eÈ׉°A†‘ÅÅ*÷ì ÔÃv\ô;6T»´[ŒYQ*F¥Lm $‚A=ò…ëìu¥Œ91ñ²ãÉžYó=H¤ "ƒÓÓ¡G±Ù³ß~5£?‘ÏÂøN,|y0åÌ/Æx" œYU¿$“É(ºq ëB[$|.$ÛæÂÈ̶‘cTxã*PÚÄI%‰$Ý›ò:: Ý–—á³>2¤¹Hf\¿_—¢Dd…â€`x…¡WÝYòA a/ÃŽS±÷¹þ¡2¼<ƒ3›fâòì`} de|'¯ÇÉôÐb.4ŠÈX˜ð¦éX‚A$UÝ…³±¡acQôXöyô®Ûãï5åþ«ñ=ŸÒöxØ{"…Pýu圢䍯J-Y®8ùª­ø6,u©ã&ÒìJQWÚ4&3}%ê[ì‹|õ}t\»zчÇÕ3GÈ+²…’Œ#.×òï£D‹ï[#1(/F¤ÛÁÉ3,”¬Ê̤Y±UFúñf¼ëJ2ãò±ø{X‹#Ö3¾£:¯ùGfû@çÜënVŒ8¤dÜ6÷ÚÖ"Ò†¥ €H$“füút¹óI´o†*Ͱy·˜db8ñ™ö»Ô…y NüE¾3€I]Ñ c«ã¿¿tä–;f8Ò—G'lÄÄ•ÈÌÊ…(%ì‘ç«ûûkŒ|smÉeä‚Iݰñìø$p#ˆúj©Æ?ýɃ–Ù«j—ä¡w‘yV ÆKXPkñ׊÷=÷­©|(Ã_6o]°._͸ŒX¨H¸›"‰&Íš¿wgÚ·z£²±/è™;wrÄ‘ý€¯È?:Ö%³qTcùiâѧRI%YPŠ$’|“îu™8¶Ši5bž5‰Dká@ô×·-¢’TŒ³-c\ßF—f…âN‹£Z;èÈqÞf#ú5éþ—|ŒòÿQÿL÷Òt{ûkÝ#Æ»(ž_–²=˜>"ïm"«½c—ð:qêt[rš(’#ŒJˆú#UM¥TeÁ=ØÏâÒ &#ªùÐP_d æR@ù6ïQò?¢øþ8¹G%K4EkØëi¶aª,cæÀñ­7FVÙ‘·2•þÏfýޱ“6â˜>çØ ïì|i˜Ä³n êÄ+É:f1H‡ÜÄf½Èð4κ/ŽÐ.êíaŒzÑò>èÏ}’79ùsdÕ}µ3—Ѭ w¢ƒŽH¯mW7ôØG»JÑó8ç­LåôGJîrH@ùfûé›D†Ëž'ú¡$Ö®c‡ñ)9ðùc_}\™qÙ)¹;±SŽEjfLtRƒ‘œAB´¾N‰ÜÆ?™9¸pËèÎo¹[Õ“Q{$c&ˆLì‚ 6h}:eôZñDÙ…{ñÖµ£.Ë"F‡¥=†¦H¥º÷ÉÖŒä‰`<»­ º9ΩcLdµTq÷³¨áŸ‚kéÿ-mÊ(ÍI²á†R(ÿòøÓ(ŒY-¸`ßc¿Ìj)Dbȸ’ª/ßéÕÊ#Xgá‚T ôÓ(Œ[¸aUà{G(… Lì9"ùÖŠQ2â[xn$Qö¥Ó8—]Ã Ï ÏV5T¢Ìµ$hàŒíÖµHÅ °£öÒ FŒmy÷R"lŸI”¥!lƒ$ƒöÕËz•¢£òÒ‘2 B‰ØŒÓSVÿdc ‹ÑÓeû,°ÄÆÌc¯ËJEm¢J|(Òn‰ôÏ¥!h<~è?M)&H‚ +€ý´¤2dpU4«_Õ*èÈ´2kŸ¶t]º¶_ñ6¶º2ú S  h@ÐÖ;å_ÛB®Ê³_Z}$×Z2 '×€'È­aF™¬­SÞõ³Þ‹ÇDØÐÉ`¡|hVì>yç@• ¶?„u øˆÎyWGôÖ[fâ£ìÈÙA@þfµ‹‘Ò‘M˜Ç‰>|ÒäJCwïúoäKŠ3Ç@‹üµš™nX.u}LoòÕ¦fâxŒ©eùJMC¢?#÷׆1M[g¹É­$D¹ê‘+Æ,ä|ØÞ€#÷#Uq·¦G4·@2e ~‘Å\+5÷d:¯¹­]‡*} ¶cô½ŸÓXø›nÊân«•åé ~z}uí÷󮲂½}œã-mz.3šLYäŽY"KÍU}€}UíçE¤•é‘ÍÓu³nJÙ™T}…bGïCH×¢;­›³ó!ÆÊT¿Ô: 7ý×F­œíw}ß&Y1$aé㬢#”’[—!`Q¶ùuJÑÎÚf¼V©yîþÚâ»:˜—tÌŸ7ˆ—’¥‰×ˆ …yÕ“JI³_Pªñ®²Kœ_Ȧ׸gd§&ä²ã—Gd® JŽ@vnÔ÷¨ÒQ*m°ã“>ÚÌùº»‚ê ˜@õàV¹Ê¬Ü[b!ÊËù8Õ]˾IF*«Ì U$Ùê×cZQD“mÍžybˆãË*)ù?£ÈóRÝø k£©ŠööÆy0ãšB>´ öº5¬Õ3WjÎvf^@ÝZ5–ÕfUe :R|ß}{P:Ó‚qÙ݈Àâ6@ñ¬†Î9Ÿ;7ù×N°zdU¢@7E}¯ïßYE9*è)5ö¹#OR{U1˜åuU‰ÐU‚GäEëN)Ñ#*$ùrAõòä’Æ—‘R,]õ}€kó×6 ŸþΑs}ð0dJðÆa’ESâ+<…¢¿Ú룤b“vIIÒ¢2&–hñå.e’…³eIóý†²Ò¦¾¿û5î/ìÕ‰Ô^uˆ£R0 ™;‰{S#!P-Uït,þ£]g¨þÌBo#±‹‘&FD`,Êy /òÕâ_#÷²|iñ&LœÏö=ËÇ•)ŠYBº2!‰AR*Àä Wd@÷éQ¡r±;|™i¿}ÈÌäcòc @EƒÄ_c©VÍ7Hwû†nnRüÔ’2MŠ%XÕAnTLt­{$€Tûm*9¶Î®L°bEëJŽW«ÄÎ{ü”þZ4™nŽ~í¼Å…±x„¹>‘cŽVBx³PàIA ŽÏ¿aH]šv)ò2ö¸æÏEÑÊTùeb¤ŠûO÷ÔÄ™#Ÿñ›$XRqñ–sU>¢rb割 ª6ÃÈñi A™»ç.öÐB壇.(¥‡Šñ¸P“ß"ÏÐ CcîJ…¢¸[¶vFö¨Î^Éš‚…—‘PO$Ù#ê^‘MÛaÜdùÜ|Œ¨ä–)ÂÅ'¥J·°úAº½Í‘ï¥"Z ¼fäíëfIë$ò¯­jñ‘€@$ ì{ýûÒ‘s-±O>N#üÓ3<i]’M(²Oè­#9"›hÏš\ÌLÌÞOÜRX¢ ÄÕºÇE]þw¥+5z„™’ãfK.õ(‰'+C¤`ª¥?„Ø8²:ÏV¨Ñ8‡?/iõÎVM‰XÅ$Q ’Xì…%XPè߀HõdjR±• 9[œ›6ze c,K‘ü‘ÉÉ‘Tƒf”‹ Š$¥"æv}!ý÷ÔÅÉ­ß=7dž ޏ¢šªFá@bH¾EŸ †Ç¹´ÏMI®"Çç¢Iº8Òdfb¤ÓÎñá™1ÆDJÜ ^r†Á }A;" ða&`ÉÈy–‰¡“%EšKIâ‹å]oÆ¥+)H·\ì«q²ÄóKŸ$2Kб–*¦FC •UìßFû$Z@ã⋳(ÃÌä42ùj8õ|xÙ¡È~#~ßFë°•¥hžŒn–™hÅñcáEŽ‘LñúóˆËF€¹úX…^V,X#¿î6gcv,ŒŒ½®9sÑDÀ²JTùeb¤ŠûO÷ÖqErhçüC»çagI„1–sU"EäÅË  Tm‡‘âÒc²wØÇÄ8ût9ð¤k?¥:3¯)ÆÄ`_¹jö£@Ø&Í]ç+'!dAI¬|B‚Î*ì’iE’|øYhí£â‚^ã?,wÃ3z…Te#š¨È€d•=J`׳nsîxYž¦ófà da eˆ² C‘òA=U ™‘·c›/'M“+:™[Ñ‘ã Ïž,@Gä,Q¡t}‘½ËŸSâe,j2"YWÓ¸ihhÍôOŠ#@«Ù¾À4OŸàåo9é¾40JLpæE°„^!( OâäYúHoó-ù¸M¼¨2—òf‚Dâ¡ceäT“Å 7×Ö*¼­XŒ‰7VÅ—5äõQö×È*Ê•ÉV¨•‚Ù$Úžô.%Ó}σ /ÖÎ>š´ d±¨>”À½(‡acÁ~4 l÷¹Ç€±åK,rÿ0ó†b¦3"-WfÕOUdþº ÙÓØr²óv¸åÏU‚É)_•Š’+îA?ßBèçüC¼î8YÒE‡1ÿgÆYÌ!T‰“s,H$Tm‡‘àLQÜ?StÀuãAÒ8xæá6ð¨d/dMˆUBÆËȨ 'Šl‘õНhFÄ[£bKšÒ Q¶çÈ*ʵÉT %A`¶I6§¿} â†.ùY›4”V Ì–5¿IßzP,ÂǸ»ñ¥èR²÷¹G€±æK$rÀÂ_‚J˜ÌŠ WæÕ|U“úèh‰wæL @_,HKÑÍ·$çíØù̼LЫñ¾…€küô2èÎÒç&ÿ/”¦ qäe…c‚¥Ý’OÔ|Pªèžô-$o, =ÐÐÁæ°~#ÜÛ\×J¶¾DLè¡VU®JµD¨,“v§½ z¡‰¾çA…–fÍ>š´ d±­úR7ô  Y…]øÐb€ï{œx+T²Å!Ü <Â!”©ŒÈ‹UÇ™µSÕY?®ƒ%Þ·©°ñ1ÖO.XæR"E&IQ‚õX ø˜.—ªðCFáñ.âR<œ7*Ë·Å–qÕT†SeË UaçØ1G¥ÐÈ7ƒúj>‹Ïþ•+ä#¿øÖ¼¿ÔÕlõÿMvxè*ú8ÝkËÈ’–¿_ø=œm¸oök,P*‹ìÐàø½8¢¤Û~‰Ë'¨h–vTPÔä( ׿·’MwP‚oëÿ³ƒœé/cß6aRFÔV“€ˆì›'ØB½ÈÖ£Ý?ìfSohÔs§Lî±*’ª:(+PŸ7gªêÕŒryÃÏÉ“9G©q´®Œ´R,€=É¥$Ù¯¨V·Š£ìœ ¦ÝÀƒ%Œ‘ÍŽ]X¨ÀŽ@Wd@Y³`êOŽ2q•™²víËm`3"/jÀö5åpœ6Jœ&é‰ÜwÙó H%VV D•ìô|_½€5¨7É’èÌ’ã•ÅögÆ›~k™1WAÐQî<ëQŒšGHIÊ6Ä&T˜¹?2€’(ñ#Úû°}¿õ×N(G¶s场Gs#&LÅÈgjõ‘( ôÀe « gªêÊs®ÐŠÃ#ŒÛʆǙ•.xF•Œm,‹L ! zâ@²zîÍtÕàkRHÊnÄO‘‘ŒÙ $Žü ä†U^È»#ˆ<_¸±÷ÖqR£VÕ™çžHñØI#‡R¼Œª €H8õ]¿ç¬âœ)51¼’FË5Ú±óWTºêèräŠOGn96¶&bI$ëÏ¤Ž«³O“©gsýùÌßüšõKÿQžNÄ÷3yþÚ÷K£Æ» d‡?âK;a÷çXåüÜõân8‘bÄ’øuùkQ”RVbQ”ž‹®ë…ëH6|º¹Å“ $jà”P ïÆ·¦sùP/Jþš¦Šdzf"I Wdj>‚»9Á0‘MLÄ~ž5Á¤ÙÑ7@§½3ðJꤋ±é·sŒ2ÎM{Ö¶ eÍ–;Z³«úÆÇ¾˜3QTUð¶5´©mY5`jºûj¤GÑ0;awùh4H@Ƹ(þÚ  Uï¾´QÑþÚ D„ˆ/ï Ð[¾?®¥!¶ŒÜ@ϰ  öÖn¦nž·Xdÿ.a]Ùë2ɲÊ„Èd+È{XëJ’z-†,›ƒ#rލ}?®®\†qãb¾gwSÇåÁ>Æõ/ÖÖÄõßFåhÒI"™x8ñc˜£CNÙg$’(ɾ¨W}V¤¤Ë¦fÊÄ…1„KÈ}DôæÉ>I7gûënì鮋¦$ޱ!EŽ*ä÷±}ÿ}E9]‰B5E3áŠURÖ8¤«_Ø2qèbŸc±ú‹³~{­HÙeÑšlx“+ÕŒQ³}šïÉÀ½¤ôWgSdÃÇA4b V[2+äHîÁö?mw„›{8Î)-ÊÛpáÆx‘ 9Ë»1$’Hªß^ÚÜ›£H®Ûˆðz¬T7 DŒ7¹ä ßd]Ýñ©ïa¥CäÚ°%1š5*¡de D$pOug[MÙ“6჉6HwŒ€ UØøÀï\ÛhÚI¡ñm¸^±Î@âW »,Ì9P¡`"½ˆÖÓx™iYyƒ´Éź÷×9vitt„0ÍŒa–0êÊC)=G¸×tÙÉÓÑ·Å‹.*ÂÅ'R&ç+30ª¢I&«¡ß^ھ̃ì{|¸©‰éÔq# ä¡@‚ Ýuwذ|>%¶RO†¶¹`LfO¢5*¡d*@"ˆ°A û‚{÷Óâ-†OÃûvQBìãÓ?Ëá3/ªÀR=‰¡ÑE"¶Oð ¹æ33 ¡¦b Vš±÷¯=ùÓ2c0¶¼H2ŽQÒ âd•˜(>hjÿ :ëÆ´•»…´íØ1c ðà¼åfà·|W‘!GC¡C¡ö¤5Z©6„ÓBs0ñ³£d!![’²9VSß`‚=‘ÑðHðN‚¶ÙöæÇÇÆlaÃE’äG[£Ñìö|ÝûÞ„V›^tË>L%™hXv¨Ø €>°;û ‹%ö­¾LÕÏxI•O+æÁKAŠÝ H$ ï¡¡U¢«µàÛóÑÀD„±?Y D·@’,=ß“©£DãíX8“Ë‘¬aüÒÙ.ÀÝwDG`t(j™hˆ6m»Lhp²·'ÿk›²lV $’AïÞô&,n&6Fe ,رb|’I$ŸÌû _ew · rUp– @)#)£Ñ¤ò<ãBÒ&M¿L˜2Ûz˜¡†;@NBˆ=íí ¦RM«o“3ç^'/Ì9þk,ŠßE $X¡ö'@»^Y'7Œ'ÕÄÉ37óÄ1!°uãSE¤/fÛ±˜brˆÆ ÉE?áROÒ:-xaªQ‘m8PE$1‰˜ƒ#üÃúŒG®ùuTýÿ= þCqq1ð 0b§²M±$’l’M’I6I$}–Ç‚Lxñq׊DQnè@YïÀОÄåmxÓ¬ùp–e¡bF€6@`tA¿¹ÐÕ?EþGçÿŠÚ=KŸ#ø.ꮼ÷~t%VŠ.Ù†™ÇrQ1OÌ9R;¡Äš¡dT ±Þ…¤WlÃÃË“+¥7l[!Ø1è]EÐè jvÊL»NÝ>Ú6‰±ï*O›v ùÝ÷ïªGl“µâqŒeÉâoœ—•×õrºü®½ëRÑœYY6m¶\4ÛÚ&Xc ¢G3¯`Ø$‚ 7Ý›7ßžõJõѦ5XPD¥©EÌXô+²{¿ÌötàÎû^™«¸<$Ê0>£,ŠƒD€h »èhh¼xùSçAK“ÇÖ~Gêâ(tM jԽњt*=£¼‘,¥ä’L‡f ö‰*=ú#ºüµBln& 0ÇV·`Ò3ÈÌÍÐ’Ä“@P³ÐÐÑY6¼'‡åŒD ™¤R²2²¹$’A%ƒà‘ãBh°Ûð¾A¶Ñ4lŒ–{Í›²M’MÙ$›½ ‰L½¯ 6@ùK#CÓõœ#lZƒÄÿpoôÐ7F¢À›-Z™<Çßÿã¡q)4qdFðÊŠÈÊC+ ˆ#Ü¡R£.>Ï·Ãøbcœ—œ¬ÌÀŽ4X’jºõí¡K¶Ù&X‘Â¥ÂF ”(S`×WvE} Ó±rì;L« ´¿.BcЯ/ÄmH$ŸrI&ÏÜè7‘9;6Û’êù¹ú0õžA$£N,ŸÅ~Oç¡ þ€3ŸqE•evS#&C¨j-A¢ö#þºÑmåœøà+!,{v* X…&5ÙÝù:eqvm¿Ù €Ù^“³[¾* !E×B‡C®…GO²‘&Ýaé¹C~AÖ\o£JE2öÙr‘bšRÁX2•b¬¤_`‚4H°|=õ*h'ûhô1ñ¤ÁS,‹$ $?K-ÑèÙ=Ÿ7wÞ—/¢ÔIËŃ6uŸ3ofeX€À€ 0° gîur—ÐÅ#Ëx垪/g£E}¼ôHïU6Ì8¤ í¸«¸6侨”Ð'×z#ºIªH@›é"Dzpö¼iqaâYBöä…PIHQdô(~]k$6Ñ·æãK‹“ŽJd8y€v˜Ø¢:Qâ¼~g] È~6,X‘âi²›3¹ýØ“_— ‹Ü6ì]Î!Xª°jI™;‚x‘uÑà6Ù‡$øÙRDÍ&*°ÚF%A³õ“gß΀‰6œ 3F{ÀL¡ƒXv X TtH"Çß¡¡m„[N9‡>,r%ecú»òÖ5d  Mv@ï[¶Ñ—¶?‹Ã?Q IH¿†µn]™I#l@2ñd¯ZßF^™Ïßö#¸*ŒDUaÝŽµ‰Å½Äé %©Øþƒ¹î±z”á’‰è¡ëSŽVåìrN.±]ß>|œ¯_@Sån¿MIñÉ~%Œâÿ"v‘ñób¬G3VD‹¢E $_Cí§Q1ÉŒ¡ç9½dCÈh¹ v@&6{Üýõ\›2¢ŒÒaã#1 ÌYx“$…‰nÉ¡ùjJLÒŠFiq`“ʬ³Mxì’zöûk›”›³j1ª3ÉÄœ6MÙ$“ä“ç\å&ݳ¬RKFY¨ß\“³k³ÿˆÏQ#O£µþŒüê_þMz¿¥ÿ¨Ï/?â{©®úûkÝ.ìŠ$<ë#Ùƒâ;i7ïçXæÿ¦tãÿ¨P.Y‚%\@êPvGD Y³^i+#/)µ¸§ôf_ÜÖ¶ý½µÔåŠ$‰>þÚ ­”œñSï¨Ö‡ò9ò̱’c…MžÆ¸¹Sèî••ù¿,°%Ÿ}U+ô)ŒMÂa²ÑT3—Ñœd ×# bû_äËãH¸Íp98 k)$JBÓpË•ø¤B‰ö:Ê”›+ŠHèD[Ó¼×zìr­Ùp/ü>Þt@W@ëØ¥½´ 7à'B–Øx­fFkϪöÖ?™×øÌÛ.Q3NWªèêJ)šŒÚÒ#m\Wä³gï¤bƒ—èÙ` ']-Uq` wzn‰&ÍêZ&$róÄŽôuìуqõØBA÷æÕ›Fb’ÉQˆÝëΖè#“>b˜ò/ZHÀ†õ‹ð`oìu`tPI ’ÝÑѪ¤rM/*?])ƒ|+è @÷_s®Ë£›ØÂê « Sº ]þú–R yëóÒÑ1 7gKE¤Hk?PZ& Z6òÚ£1ÐöÔ´) çÜjs‹î4"AAãRÑi°õú†©1 ¼gË M‘+È:˜z£òýô.%YÔ‡ùè]€d&‹hR9)÷Ðc ónA×/f®äü:Ó싱Ÿ$mX™} Sì|ëFZ¢t h@Ð ™˜¾£tmW£NLñW±úk ´Ž”„üî@[½g&)fÌâ‰?¶¦M–‘_˜È®œém E£’7£‘ŸZ«}ƒl9xáB©4Û[NŒâÈùôÙ#í©™1³<»”§ð/QÉšIÙ™6&õ›e"Éï½6[aýï¦È}q?ßP©ÐXþÚ a`Š¢?¶„Uþûh-”™DHnÜבT,ô/¿Û^x«MÕž¹:¥tS/'ÒP"˜ª ;'ÇDŸìE^·ߣœåOLµª\š-šÃ ¡ã½bÙÓgÄc㧪啱¹µ ‡Þïßí®Í)Iÿs‚”£ý‰Œ¾F6LI0b¨ ‰øñŒ‘Êc‰gú[ƒQ–®éhù»X'ò×5àÖ¨~WÈ®çŽÐs8™}EŒXÚ‘vá‚A@Ÿ5­FñÙ%Vo›é™G_¾¹Ë³qèÓ¸úÃdɼ½O–~;å|MW½ßŠîõÝtŽ/³Ãyø©™š’F¸ª‰!X@) K("ì…Idd/ñ,ø¹‘2¾<ó)c)¨Â²7pké©£ä€<Ö‰X0Oßˉ4o,ÂDÄ“$…Q&¤$Õ!H®Í€=ÈS³V¨û×1c\°ìq#|9Ø‚^@Æ–>ûf<,ãÍXÑF‘-ŒÌÆïÍüøýÜF¿û⥕ÿÁg¿j nëL]Qm7evßš‚”³,ó,ê;wBI ÝØQü° ×¹)£F„ÑZúrÄY°˜c›!ƒïý¥FÃõãZI³•£Ðz/ýz¥9 RU•#8z½F-Xö@*$;#XÅ•W²»qÁÛ1#ÎÊnÊ!ÇvRK‚Ä'Õ¨ÏZ›²º£7Å)/ñ&˜WÈØr7gÔßLbÿ:Qß‘®†C1&o‰È3"ôIÿy$eT0^&¨’=ÁÔ}ÇE.>?Ä90cå£M,HZ37&, „€ $P®‡]¬»ömW¢ví¿kOŸÜ¦ÃŠ,uˆÂÁ" UA.H¾É/éüõU™uèÏÅÊØò²6éàŠ§ˆ¾¼h•,I'‰@«÷Ìì±tÉL›¦ÓåFüŒŒÓr* J‰&ͲO‘V5>ZeÖ&·øcafÁ48RaÀC´ØÐý6AA"…O‘àm_³"Ûj‡fÅl¥Ä‰$Í‘‘ HÉeb°A*H E7Ö¨±6â»T(È@ú¸Í/#Ä ×«×‘®nìÚªÙÎø€åK¸2ÌÁ%#a»ö}@ÇéŒ_âcÀ@wäkQèËìô?3üCøWÌ_Ñõxq?†êïÇžªïZ3£+íøßeããæ¡–X#% ü˜°i H¡]ºY’f£G: ½87\-§/”ƒ›*Ç1i ôÔ ’Mõ~¼ë.òEøâÊb¯-«6Lg„c»ã«^”LXV ÑB ѳãÛk£&ÌòŸl“o…¥…³]\ẄÐ'Óä@£|M‰bCT²U?€í³å¬?*°dÊ-Åi”lÐ5]€ÃÜ‘¬»*¯gWm}Ùñq×00D¾¡>yP»üïXYY¿ì¸åo‰Š‡ :fDa'¹$Œª† Ý„Ô$Õ^àë©ÌíÕ>LøXó——‰™(‚9@Ð6ßõ­ ¤Ž6Ü?ˆæ üi£’lhÚviqî@*Ä€@Š?I&‰ï¿Fã^ÊíãoÍØgÂþ'ŒÅ”K4¬zÅ”0±`ÕvEƒ¦ì:/“òy å‰ÌŪ°4ǤĨˆ$‘VA"Ƕ¶“1hgÄ9;øpz’ãO&B²cK,ƒ‚¹7+¡DÉ ì‰èÓìɺM$;‚dË43˜ñc8‚uäfk$úfÀ i{žÇ·œî‹¬GŽ"\¬AüõU‘ÕŒôžë˜Õ¤C&û\{>IÃgõ}ãéß+£U]ßÚµØ8ßå UËÊãL@«#@)âK(«… M]’u—f¾&Ýõ£ÍÛð²~j%Æ–ug“!§ÄÆÅK  ã@‘Ý_Û[KD}™7gÍËøf¢Áo—\iLŽUP…°„À„ êúv Õ Ïˆßri`œàN"ŽX]B²w!‘z?W:`–»èg}4W!àm÷ÁÇù˜Q*Æ®AR,oˆªù­eY]Û#‘¾$Ô 2ää.Bù‘ã¶!˜Ý…Ë {‘ÑèbÑ«do3¦Õ&3DqÔƒ„¦4‰ˆ=ÙØèhSvCf-˜ì|~Zå,—GHÕ> iŽ;dF†3’Þ±0 °ì€T7GÉëZŽMlÃJÆìùíÛ.æf5M7£Œì„™fš«Pu­çüX³ ÌÇÈ+üº>#µ_0íôÆ/ñÂÈð~F£è Ê—uÞ,óáJBd€†^$ß‘"îÿQÐ^»$©6b_}¦múGÛ½ž"ʪàI䂉€A6}üPï}‰mž<‰wL¸÷< O‹N%(ËÛH8€õF‡]ñ$€Oy23lÂÚ"Úrsò1ñaƒ.Pʲ ðhQ 5uÛk¡—fŸ…жE‡EÉ#C~™ßò쟧º¯‚@hGÙ_Š[1 ÉÍchò¢1ó”¨?ÌRM]öA¡zÙµ÷LÈÇÅ9 ¾Z±Æâ,8Ax ùïB,Ñ#|T@p“¦tFÝÉ$ET2¯vP“TIØ:Dmž³|Jig\œ…ÈAFGŒ–!›» ?”«uîGDi«ÄÏ´üÙÄÉ“•™¶—B u˜PVr ¹™ yE‹BÊ›N|øQ#â³ã»cãG!êGÈ?Ë ÈÝY$õzäXó‹fE-Ø¿ÄØ p¥d^šÊMwßdh?‘Ûø\IÅI#8PÂ'qE£ Bü׉þúör~-6êÉjŽ1‘°¤nÛÔßLbÿ1Œ¥ù'{ø†'Ïÿ õŸèú¼8ŸÁuwUç¯:8g¬ß‡ZY×'!rQ‘ã%ˆfîÂå*Ý{‘ÑjÍ>Óóg&L"VfÚ\dE%ÖaAYÈ&äbd5ä4- *m9óáDŠÏŽíŽ@E‡© hÿ,/#ud“Õè?‘cÎ-™´bÿ`€1”=Mzk)5ß|@‘ þE2Õ„`cgÏxÆ„LœÒ¨aé½·1ƒÄy³uÑÐ#ÓmG%¶¼fÍL`OT7ž\Eßçw¡f ‰vÌ_‹ gËEš\i•æîÉŒ(ž®›òtñnÙY0IÊl`¾²ñ#!c³Ñ°=´!æ6Ÿ›8™2a³6Òã"(A.³ ÎA7#!¯ ±¡©…•6œùð¢GÅgÇvÇÇ "ŽCÔ4–‘º²IêôȱçÌŠZ ±‰° @áJÈ&½5”šï¾ ÈÐ"™j¿Â01³ç¼cB&N@éT0ôÞ[˜Áâ<Ùºèè?‘;ÉÎsÌú2¿‡ÂøòIø½`I(‚ÿ1@H”ò4ÈõÚ!îºÐ«³È¥CÿáÑPZñÿS~_ôÿ‘ãc%O#öîõÖ2sV¶ëÿ£ŠQP«ÿË4†%Ð=ûøð|éÄšœ—¿õ/+R‚~†tcHäaÇ‹Màv;ýkÆ»Åüä×zÿ÷8?Å_[ÿö+ÈÜyD¥Iþ¡}Ìš¿ËV;®­’y^û¤h/{† âe*I¶e ØÈŸký5S^24óƒ(;’È+‰d,ËÙŸ`>ëí­6±ÿ±šyøzJÉÍG,zàŠ,o¶$±û@êɤ‰Û;‰Ü»ñ¬ßĸü…¡îKé<-'«/­$olT’@a]Q¡DûuÕÔ“Õ³QO#& 'Ôóã‘’žMƒå¾ì~£÷ª“oI}è°EcM‹#G$Q£²°K-V Mv?þ:Äœ”Ö¶tŠ‹‹ÙXÝL$(Uˆ>àk‡.¤uã2÷×ÑÚ&,ƒd÷¢èÑÛÿF$âaÿ€kÕý*ÿ˜Ïõ‚=ìß‹ÿ§^Ùtye}¿·d{0|B¼¶Ã?mc›þ™×þ¡0î²cÁmŒH(Öª›JŒ¸Û±ï¸Èªaj>-_#^ŒøÓ…˜s”(ùëq–[#U£@$PkD?á, ˆ“³œì¬ §‚:ù×+ý–—e#ã$Ö!cÞ§~…¯±ÒGÈÄ:½_ð-}•hb½_—&»š^…§ì²È™hÒKŠljÚk¢U{+¿.=XñMކ‹^‹I‡rÉ•¸615¥7ôaÅ2ògΕü‹îºe"`‰L饵We"áøyO“bHŠk½X»dj= 5ZÙÎ=“Ù?•hz1JHÏ5öÖ?™×ÿò*’eº“è‹ûù»*Q¢ÈÙIhÿJ:¶ÅD\§p¦:_s~5._C}ˆ›+qŽCx¼…ôoQÊkÑT`ý’ù›‚P¶=ûÕÊDÆ?eàÈËš@“cÒû›ÑJOÐqŠöl¨ï²ØV·Hçm /ß­) Ryjí¥"\€*ãûiH¶È ŠÇÇz­#92x©êR5l ­÷¢è¡Â?¿z¤]ûhPà¿mp_¶€8/Û@M°Ô¤à¿mPí©h”ƒ‚ý´´Rh}†”íª‚ýµ-p_¶–… à>çKE!£P¶§ºÒÐ3Œ©âqÉ­`Þ(ºK+†:{Ö¢e¤QENàë ò/ñ‚…Þ´û2YY‡~4NŠû-ê?õ2dQÿ¨é“-0õúŽ™1L=Gþ£¦LSQÿ¨é“ÃÔê:dÅ2­#w«wئP¬wÜ`ßM~‰ô¢÷‹Y¤-‡¥ߤ4¤-‘é ÿÜkâ-ƒGƒùk4‹“c¡´«Ù-cˆwé~š´˜¶Oÿ‚5>"Ù&(¼zcY¤-‡¥ôÛT[I?á®®‹r D‡ÌcM"lŸJ/è¶™~†ÃÒ‹úí¦_¡°ô¢þûi—è[>s'ñ' d öÿ¨×ÌÆUgÒµt7N ú`×S4O-ÆK ‹ÈÕû{ÓV¤-]£sO_®Ÿ"–X÷qЈö½LXm‰÷°( ¯µë_:1ð²èÛÈ4ZúïÆ‹ÉvV¡C¥?zÀ°úëmr˜O‰û†ÿŒÞŒÎ¡˜bh@’@ž5g[®vŒß eqŸâ!/òÂÝö/Y®S_ò¨–Ü7ùäloUK‹ö  uD‹€zÕ”y±³*\6S3{“ÞVD4Å =€_~ˆñ¥s(Ñrâ½lýá yÀT#Ÿ+U`ÑîÅ}ïYÇ›¡—`s·h1FSº¬D¬O›×ß­Ufé¾*¶[#7yÇPf X'Áº³Ðð=Ϩ—,ºñ"ñË¿²Æïíï©ÿ4¸ñˆŸ/ulµ…œs±C¾‰î¯Å×u¦<­X¾$èÓËâ £Où£30ÈÝòÌ©a.ã¾KŽÓ3Ž(G;H "û±]w}kn<×L— ùûÜxþ¬N(¿6[¾€«¾U}y“¢åÃ[û¦ü'3ÆÆ¢îËÙPýHý/WreÁBsò÷Ìy+%H=Q HìÐîªïSi.Øè÷ˆEÇåMˈä¤jêꉮêõk"7ÃeåÿYÚUä‘Ýë-räWâ­« _Koe¸^K±=’O°×±'[<“kÑl=ÃpFlY à@`ÈP‚@"ÃV ×wª`¾Vt‰2€ÍÅB©bÄû$ôMzûjÛ[yÛ£Š ›5xä!«%ì€(Uù í}Ö™0_+uÅÄ™aÉwRÜ@EŠ‹4`(Yë²<¾–Á+¹b>qÛW$Âh…’¯'Øö:=ÑK`¬[¶ ¹‡ ,‹‘l~¢Õ €Iúl‡¹cnެê¿ãôØ+vE© `‘«m ³GÕýGS&åçA…—&B90U …™‰ð’z&€=| 2`¶>T9P.V4£uXx ûél ÉÝppæL|Œ‚¬õþ@Ð$€B‚MhuãK`vÃLÁ€Ù) Ä €[À$@&Èî»ÒØ«-ºaådË‹¯$4%QØRI~.Á_Dw¦À¸7½» HÐåŽ1'7b¤=ý@ÅŽ¼él›Æ$°¼ñÉ+Ø,‹è?0MWÓ\»°|xÓ&âfÛ¯)eäT†B#¢ AÓ& gn˜{j‡Ì› H …d äøYïK`z¸aÉ_¢,|2b¨Cî¸i–0žvÈ/àn!ˆ°¥ª"ˆÙ±÷dÁ0îx¹Y/ ³´d‡aqUŽUÄ‘î.Çc¥°ݽYáù•¼T 8"‚ Ÿ?¦›@¢oXC$í’Qa¡'«![ª°ÀìW]ž…2`–Ý1†$yÁ¤xå£G1 ö H÷[lÇɇ.ÊÇ”Hw‚½P¢Â’H«ñäGµw¦L”Šcï{~Z»&AQ Ö£¥?âú€±ÑìuÖ›E·œ)±ß&¬dQòMrì|x7¥°zÃ8«”&b!EQä,â+lU€ ñ¥»Ë»à&ßüR\ 1ƒê|UUw}U]õW«nÉIX±÷ÔNŠf}Û 3Þù)  …-T ²;­2`Ódx:[X·¬ Ä„JËéGêIëDÈB÷õSHèö>Ú[›Ö ãÉ•ë²$F¤õ"e`Hèq MŠ¡Ýн-ؽa uÉYdew(ÀìÁ…Ø* Š7`Ui“% “{ÀŽgù‚Ë8¸Dq³³ ²B¨&€òk«çKl£2s±±3“(_VUŽ;Ù‰ Z[ˆ¾´¶ÏßKa쬲¬HÓM UE%™²I>™1T'pÄÜ›Bx2 š"ÃEƒ`×w¥´ fgcàÄ%ɨf  )bÄølþ@>Ú[²7Œ<8–\‡•Uи"$(«,<@±w_å¦L ÈÏÅÅX›"uQ,Š‘¾LÆ€÷ÿøémrïxÙK‡;J®îË¿b,SU¿>¨ýޖɦ[rÃÊÈ—$NGz q$MH($Ð&7^4É‚òæãA‘$Ó$䈒ÕBϰ÷:dÁH·Ló 9îQ`ý$AѪ$’=õ\mÛ3²awÃ$‰£^$`°ŠcWÙ{C"ÝöÖÛNè2‡Ë­P‚;‚‹&Åfªìkf7ø2&4aÂ’hc`E‘r¯.¸%H D‹€Iõ¡1A½í™~¡‹,q‰9»²•lŽ@^bÇ^tDE¾m’âɘ2Hˆs• ô »C»z ØÛ¾Pf,ä¡” Qsä x×+lUôO¡Z±ø¹påã&N4Ò@x7¡1•»`aN¸ùY!]耠ž ’ 4,€MãAü@пÏAJÌØû¾ß‘˜Ødò”r€€J˜Š$’=ô#TW{Û2½F‡,TIÍÙ”¨ádr€ ô{uçB¥¢"ß6É1¤Ì\‚"œãe`H$nÅPîÅ^„¦I޶sÁ¥1…ô˜·; ¯åbа>‚™Y·í«<Ùr®9—œlˆÌJe¨@É4½h)›UÕÔ:µ‚: Ø­g]Ë ÷¶&B™Õ9´bÉWŸ`{yì«@bÆÞöÌ¿Q¡Ësve*8wõ‚@z=‹yÐS"-ïl“LÕÈ!" IÎ6V€@â@&ìUìUèZdënùA˜'<S_I‹s² ñ®V(Ø«àh)•›~Ú±ñcÍ—*ã™yÆÈŒÄ¨Z€$<“@{Ö‚™|ãmÅ™!ÈÊœ´…€€  “@’>Qá’mf:©2d‹L#ÆÆþ~AÀ RI'ØdŸ>=ÕI³-¤Bã¦D ,e•” ôAÕj)&*C–)òÊ»@@Ð$@Ð&¯QAö×DK.:æþe¹ŠSôš¬j‡^Äß¾£„š°¥£4‚ rLK’ܬÐâ@$À$Q#ìý5‡ %f”ãbšX‘'µBy2ƒB…ÿ~¾Ú8I:7Æ›3Ì£2zŽ4y)ÿB,ùÖ%to(Õ™Ø+'$r{ìAý޹ÉJ.™bÓÚ#qRIÖ³¢èÅ+YóÖ´»2û;¿è³½ê`Oø5éþžüŒóÿQ¨#ßH-¬ýµílñ®Ê±¡zÉu‰ÏøžD‹ii$éW³¬rÓgHÕ9±üEŒ F‡9zQÑ®µÍr4»7㱉ñ“pN Û»Õ\¶GÆ×FáñvÆ€”>Æ«]/L>)·¢Ãâíˆ?4£ó½<ðO¢“|]²H¦4ËPkï¨ù¡D\RLÉþ°`…Áz'°u…Ê›:>7CÄÛh £95]ëO•"xä2Š6˜ÓŒù Ÿíª¹bgÅ!‡â݈€§%+ß±«çã)€ø¿a³þÒ´~Ú¾^1âäñvÅtrÖþÝjy`GÅ0ÿ[¶"I\„¶‹–5ÚYˆ9Cõ:žxÃ? ÿ]6×̃ýõW?‚h‘ñ–Öþ`u÷ÓÏÆý ë¢?×-¬›õÁ¯±Óϲøgôëž×øŽ@¯m<ðû†E¡ø³mžU†<‹fü {ê®tÈøVt–IÛ궺]œé õ²¿=)“â¶Wç¥1ñ[+óÒ˜ø“Ï/ï ø‡©’¢¸ßé¬ßè|HùŒ þšÕþ‡Ä¯©“ý ûjÛ.(‘6Uö­ûj Q?17ôóտШ‡­“`aýµ(=\¢<(™@UÛAŠ[+óÒ™>$òÉ÷ ø_ ¯þš@#«_òП!I}s#-¡mU£z­Ù‚uh[h4ÃAl4ÃAl4À€|°Ð[ u ¶4-´àh-†„èè[a ¶.ëAl4Ðh-†‚Øh-†‚Øh-ž &‘=HC(V~äWý¼q–+_£Û(äÅMT‘ªúâ1L Øo{'¿·n2‚½èÄ£6ºÙq®_¨ØÊy(úºè‹ï¿¸#ÇÛ\òøUjwCd„:˜ÌC‹ 嬧NÍÉZ¢¸ÑäHçÝUD Q5}þ@Ÿå®¹A~' “ü‰D›+ ægI ¤j}wÙﯪZÕÆ2¤fœ£f½žªn ½€åzèx Ðõù-Ê]—ñGG: fÉVL§ˆè oþ`u¯‰“6ïµfåHÀ+Ê’cª,«N S5`$ 4€3ˆîÉv@(_›ûFì«L¢G“üâ&õ=y/gX7Uþ–—ó» |(¦è™“ˆ§LG #,±› ‹£TJ‹¢z5]š'Z°ÕôkÛQãÂŽ ˆ# ÷ ë ¶ÍRJŽ~^SnfC*fY#`À .ÅÙ'ˆ®óÙÖœ©gN òWY ª¦áÁçc¾½¨õßKÕ­œ¶ƒ6¥Å‡âá1¬rËËîšuÑûuÖµ–ÐQ´Ã#%¢y剕ähËã“6H .è èãQºh(º)*ΘÄI …Kž d”PòIûß¹èíÍÓ}£ª¼H ˜¸qã&;S$eaÈ`,súŸ¶ªÃ6Û2ÔÔR+¸A+·$„€bUPH'¦Øð:¿¾‘”RÙ\dÞ‘³²ÅØþÃ\ÒLé+F–’<àÒ%…‘™ZÅQ$ø»»6Mܦ±ÑˆAݳ­Nvf)ˆFÏ$dµØ €Mxü{k§&¶sžÓÑIvÜöÄÈÈ1šC©%™X±n‰_A@èk£iÒdcm™ƒ >K¯P æC°Á‰‘µä‰7H¥Œ7@}@†¬W*Õ}ƒNÏF6Ù HÑM‹²š²:-UdtM‘¨Tèçoû>v~d‚(™âŸc¥p8-LÖA $ _äÿ‘èrõùÅuÇŸßmBÛ3Çók¾Ë)ÛåôžŒKÉ*Ô¹&¹]@¼ù¡Þ¯¡lÉ&ç¹ãæ6~ Ñ‘ŒñÄ]ÐÆŠlI$›²H_`›L[/µáæâŒ¬Ùðg2N¨®‚Eõ…òaõRª€¾‚ËP[6ìñ‡ãMIžÓY—ÖàU€¶$lÑïðš²ní²ÈØ·Iv%ÆãVŽ BãÉbÌÀ€K?A=‹b{ëKYµ¨DÎ 92©ë²'¯ÊÏë¨[g+gΛyi&h›*9â8 ¡‰eˆ@¢…Äßd z¢HfË|¹â›„IÇÑ—ÔÔêÏC±G®üêÙ€àÏ›>Sä`äGø†7YfFbI=GLBŠ&ì€Oº:¶ÆÛ&Ù¼dA•”¬âg0z+9BßËn]…¥ìÝ ò;  eàÅݶͶEÛpdderâҫű›ž>^v.$òbIÎ9Í3ñqhÊ@`@$ذèK±lL龺 +‰ Œ‡ŽTõ#ŽÏˆˆ ³TOdƒ¦…²w§qÈ1dáE¢Ÿ“ˆØ*U”ñ$Š4ÝE{Y» Ù|›VÙÞ´ÿÌŒJ…™gñq k­6Ù ¿lùÙù’zp—Š|uŽƒ€Ájf² 1 lâ…“ ?'kÜÎïáDL¿0„òD²|»ÇÚí¯°+Oˆƒ³çÅ»¬ù±äLé71ǃr<@ì—²H„è°;iÄÉÅÉcD«ŽcÏ$%ëÔÁhX«Øë«Óm–Ú9[®é—‹‚ÛnF‘rË2÷"‚Gª^V4j…Ø£àûëåP{:C‰Í·üa“ÆÑHT½Ä%³*‘à’I=Ùìšj×)P“ÑÒ?Óßcåø‡+sÀc;$ñ·ÒTPWV>HûW^úÜ9²ìÄø±fƒñnQ’ ˜Cd,à¡Ð¯{=tzÔó­˜lœÝãÕh‰VËŽxÈjT*{²H@]{ìis&Œ¾&™Š]òM¿y´Ež ™Z6ÐW,JÕù%ìŸü xëŸÔÆHNäe‹~h±ž9c%Û±‹’h© }û–'ÉÔÕGTôÒiÍ¿qÜ6¬Òá<Í ©‚dxܹo4ºP ±è„”•œ' t9vŒÅÂaÅ$g猭ª¦^3E€æ{k¾‹dŠ:M>ŒµGWcÆ;nÕı}LÂ0lF‹¿z ñÖ£f’lçüA´gîY’zP™!ÈÆXþ—$𙬂@ H x¡u;%QÖÄ>Xá@ÃËæ=Qøïðñóã»ñí¥¢R98{6ro .DgŒ97ªÒ²P B€¾H–&½Oe.›6ï.&VRDcÊ‘àqê²–‘ãrå¨1¥Rh DÄPSDØÐdŽæÙŠø[n>Œ¡cfä/ü´2û3e Á¾cÍÛ+Æ‘H2²  Ñ`HMõö«Ð"—2l©ñæÂ)ÍêêØ³ÐìQë¿:…ƒðÖèØ²ãäÃÂQ¶¾/ªî Ét( (ì€IbhÐÖHºl»¼˜¹YK G•#@ÿÍef’Hܹj @éTš@$’±n1a,˜¸òÆ~|ÊÑ ”ËÀÆccȰÏmwÑk²EÉ&ÅŸ"Å€]9–lH¥U!dpë"@â()¢l ‚h2DnnMa*£m¾(‘Â…‘9íd 1`$.¨XdK¡’ð »o¯>zÖ¢Ò1(²q~c (#Åä<“˜þZ³{÷«‡Rm’šF}×|™ÛŠ–I" Ó VÑ6A $ E=ÚìÍ*ÊQÔ H*¬ÖEUѳý»ÖsŠ’5Œ©Š²ªÄù,H‚½÷U®<²Mª:q¦‘žyhÐ=kœN]'r;ç[Š2wÿÑAÿñ©¯ú½ÓÿÕgê7}üÿm{dx×bØÐþú/°þŽwÅ’mFE†uË—|gN=rYÍÅø?gldcˆoŸ=õ®qãX%=ŒÿS¶rhb—kľ‰äf,¿‚à–ÆÄµ# o\¥Å&ΑåJ;‡ðnÊÁïÛε/³2å~ÙÉ¿“ñùoĨÎb$ø7nI ü¯ÓúeñÑ|ŽOƒ6b¼Ž'ù_¢y™dø*ç-'$>½añ3K”«ü‚ÈÁ Oµë>)ó&WýNŠœ>ǽÛÊ´aS~„ë¤x´b\¬ƒðvÛ„ɇô“Э<{/‘ÐÑð^ÑÝâþ'Zñ#I Íø/F_ÚzĸǔŒ/ƒ°äï+‰¾€Þ‘â±.V:o‚öÁò𻿱ñ«.".VeƒpÙ ‹“ö³¬øÝÊÆ©¸!Al2þº¾!åbàÕBLx–.Á:ÇŠFüª‡'ÁøÕÎlJâßZ\?£>Wé— ü> í«‡òLÃ:°H×ZaÆg>Da_†£ŠË*Xð$ø×ǽ—.‹Çðþ$¸‹Àù'δ eν›Âÿ{Ây±®®g<æQþÚ‹GŽ cí¬®8²ùv2_„v–ƒù8À1֥ī¢.I_fhþ…ŸŒøÀ/Üι®'gGÉ¢á(â~Pã=ÁÓÃú'–‹Çð¤Èlp®†‹‹ô<¶ì8›^LSÇHW¤‚är‹=lJJ)¯a¯jI:ÏAL8Ä}«A°ôÓî4(Ôø#öÐÑQ£©H A)Ò )H7øm)Ðq¡õmQ{¡r÷ÑÖZ)QDXÉ_dè@Ѐ4  h@Ѐ4  h@Ѐ4  h“XÊZQF‰M' h»ñÞ¼kÉž÷È¢™bâen$¨'¢@ I€üÍx:ž9>‰ä^ÀÇc–ú‹Uq5d]]P5Ý_0•Y|‰:q¥hÂð451eÌDL’3"Ÿ¥S‘r~A"ˆèö:ÖŸ’3äM–‰qŠ3‰q4À©°OŽˆ¾ï®»öÓÆîƒäð$ŒºË,¡ˆ6¤A£`‹Ò‹‹3–JÍóf#ÎÓ?®·ñ1LNáñxéü¸eU_Q‹Ñ’ 6@Ÿ¶–HÃtËA’‘ä_¤hŸ5®jŽŽÚ'Ä1ädŒCAËØ=›RA±]A£fèøÖäµf·Dãî->$ÈqŒrFô¨Ì;úA@5çó­GèªÙw)ò!u‹ £¥–ÔØÍyدúê:Oe‹l¶>çþÈZH%bvÀÐûÙý»º£«[¢7«“½Æ„h">Í*@‘dv{û}ôÆïôE.QÏÊ0¦3Ö±hÝ^Ìy{ «¡ô‰r'¾DЯwä\[VL«Fñ::‚ÊA¯¡qf7@gše€ð9?Ä;‡ê¿}vˆ¤©†Ná,ŠÑËŒTuUìDn…w`õíaJŒÙ™Oò÷,j¬³zd)n¯É+¿ÝV³â¶kÉ¡ñ6QÁpÂ…V2ÎL´úë»ï³C­! tØ”µerCÉ’˜¥¢^h¬¢Yx± H+³×ÌiáøØ\ÔèÕÙ2ÇDŽ¿=eE£NjÌ 4û‚ãж,ò²J’ `H5ßtu©pº²G›tuñ?ü* rò{TŒ± ä€ ëóÖá’ì[obhgñ”KŠžšIjKÕCÁ°zèƒç]NjM2¸[Ú&'«!s3GFJA@±nUøx‹»±úê(Ó åhzo¾¦‘b3,®«%°°R öH'Ø{µ¶‚n…ïÃ"Í2:–U1RI î ßßY¤Ù«hiÞ SzK޾’L±4…û @"–»@»¾ÏT5½$e·f‰YdHH×=6lÝ&\X{sçH X¢g`½’$ùõ®«£Œ…m[·ÏË>4°ªKŽÀ:Ç'5ì{A]F«FKî[ÛãFXÕšG*¼ä࢔±,Ôh¤ø>ߨ ¿™6ümÆ ežEY-Àô‰p„ìItnµi›žç6Ý$gåâhÙ•{ŸŒ„–…Z!¨jÁ>?U0LûœØ»”XrcÄRW Œ¹'á&ÊàA Ÿ½y¥jÁH7–—)"“,RË$qH%²Y,V…ň ŸÕéLÚ¾ MË(â˜fФäJ Ý­EIzaÞ”ÁÓÔMËp;|h˳HåWœœR–%šŸÛõ[kÏtÛâÏD*$Ѽ©‚èAÛ@eݾ!jœ£À#Ti˜ÉD$""±#ªìûZ`2> r\€p3ˆy™>®eA°µÚŽJ ±E€­)ƒF6á,ùóaIˆÑúJ¬ŽÎ pK ¡t-MYº=¥0WsÉÊ‹&¶ó9U‰äLjadX`uuùéLíK“üB%„â׫ÁË©AÐ$ÑñWãÍ‹SvÌÙ7 Q’øæ&.êÑ–¯*l޽½¿sçP ÞwƒµÃHÆ6‘ƒÉÄRF»bY@Ù>G½JÁ¯"<¼hòa$¤ˆ U‚,‘Ô)·Ãéü?啇¬±’&þe²Ø`•Úsb©u«Z°17T—u;dp’&fšèrR¶ Wt| ®ÍÒ˜+¸îRæM….ßh ™E$Ú‚.‰=ѽ@F&ë“—â8^X¤TžUÆÖ'—lUô>ãV˜&Ã?+ž.vŽUl‚q$)$XÀ6H4AÔöìÁ¸`Ř#+ê(< ð}莈ûÑ}ôMÛâö©Ê<’5F™Œ”@b@â(ò +: .ϵ¦ž 2cnÏŸ6˜¤ªÈìà—°ºBÔÕ›£Ø´À¸w‡|l¹ò03ˆMÅÈ30xè P'õÒ˜+‹¼Ï— í<áãL™$ÄÀ€o˜^ˆH£Õ}ô¦ ‡wŸ#mùè €++—ʨÀŽA›ì r\€p3ˆy™>®eA°µÚŽJ ±E€­Z`éê›÷*œ”ÊÄNXÐz¬1çõ.®ÔØ7] îüôui‚±üEx“ä< %4Yâ!¨^…UÙèУÝ)€û5›å£ÙFªzŽÀ&Ãñ쯈֔Ác¼å¾Ø›¦6ÞŒž“¼¢Iø… öߨÛ^|{¦ßz!Q 6åH$BþÚ.íñ {TåÉ£LÆJ 1 qy‰PgÚÓò7U‡sƒlHK™X‰ ô³ û“Äô<gȵjÀˆ>!I·EÛÚ«#H±8’ÚÐmké«Q³|OCJ`¯{mÛLŒHabª(“(3›º¤&‡VjÏÛF¨·»8çÎù óXé‘0VU—’›ŽÈÁìþDkÍÍ ¦‘éᓌ[9ÑËê€Â»÷V±ûëÍ%ŽD^JΆә&6#²ãJªÌ 7ÙìøØö5߆-¦qæu$8gÀ©L´²)¹,;œxFX7`¡öì ¿']#s“WG#xÉîÒñ^¹°sDƒþ`ë‡/¶ÎÜ\Š’fC xØ_EÓÿºÔ— U_tis'v½Yë>ÞU~–‡”¼h7L\€½‘×vF¨ù×¶ á£Å7óÙh7ç—e[ÖhÈ2Ô})bňüF‚·GW",¼x² 6’Æ U‚ät Ÿ™w¶¶ *4,é9qõ+`f¾¡Ù¯¯}°ŸmÆÄø²„ÒdbáüÒ“™d«¢(j*jÏL;дËCñ+<9)&üÆ<±ÇéG?%fr~ªz4Tù­2"ø¡'Á1cÆdù–„ƒ=F ©büÈüÌÊPH3?Ò–.Cãd µuØ €AØGDèª\m ÄÿHÑn §+æX/^àlû ~¤ UÇÈÑ$¿é" OÅ J„ ÿ#ûjxå_²ù!a7ÇÑŒgËdúcXhŠ>ä/ícGÃ$й£b“ãÜ\€’FAY&ô ¨Ñý»§¿‘¨øeé…Íh¤ßcÄcIG§êr¡"E6*û>?;ûf\;Û4¹oЩþ,ÆÉŽk”d†þÚç.Q¸ò¦¬6߉öIå/¸MÆ2:?s¢ãwEÌ^Fï·J^H”Sôšò4Çc$zô=¹áîîBc;±÷c]øa(ÊÙÚq”iI”ѳö×®G–;(㻽KÕ-˜~$íŒ߯±ÈŸŒß^Bø³g.$BþúÝ3%G¨/#¬âË’^ËZ|uâ|›ÕpÙ34I‰>)XT ÖÚ¥£–ÊÇ·&b ÿ-gtÍþ"žg šï½\(™Ø–™‚²”=ýu›vB*H#Æ´fèIô[‰¯Tyž¸rm£¯´zch¢ý†½g“¦?C!  h@Ðôtp_¶…¶@6‚Ù:4  h*‘¡S¡s¯±í¬ÈÒ覲PЀ4  h@Ѐ4  h@Ѐ4  h@y¼Ü<œ–Y±DÞ›!åaMVjÇ`GÇžµÉ:ôwi?e'Û'—”q¡D’Š[ŽÉQ~ Š$,ƒíöíuè/²’ãfüÿ(pŸÒ3 $&0A!@èò°:UÝ÷Z·ñè#q•ÿÉ?Me[ôkf8vÌcN¥ãz**´E’I³UÝ×jÿFkUa.YI&›É++éD-c¢ÝöI=‹ Ñ;Õ ýŒÛFdp7Íáï#7àªô(]uùIwÑW]ŒŸ ’NÐÄP/5úXÑ9.†™›/i3MÎ( jЈdŽ “KØHº4:¯žªoìV6Ðøùg'‰)ê´ªœ †`Gfû@ç»=ê¶ÚèÊU옱·gšRˆÞ±,£åÈàÔ?ˆØ¡ØêϸÔn×A'ö)¶üãüXÇ,üG8á (XM‘`›¿T5o} ¯c"ÛCc¤¿î‰(` QUìÆÏg»÷ѹ_B¿eÙ“ Œ>¸a1ò’2Á«5b]ÐUU-ûB«Ù£34xlDh;4+¿ÏX¹ýE}™ÛkvÍl¥‰‚<ˆî†2I+àà ‘VkÍt5”ª¨˜¤û±åzò¼±³FõéÇé× {›=þZtº5¿±píIŽò4®Uàˆ¤,ê¿ žÇ`WUF¼WoÑœWÙí>œR”ˆ¼ÜAÿf<³îl›²=€6®Áv© ‰D1(˜ËÈÃô– ©AQûÝ€I=ÚïÐI}”}§0ÅTvyá%dbI$dx»­.½ ýÌÅÎÍå¥ # z• äH6h–¡¡¯¾¢mz+J»53L ÅoÛMý ý˜àÚ¤ƒ,ÏÅŠz­ NÃ0#Íö&€Ïv{5ɵÑkØÏ•Ë›#/›¬¥‚J)ê…y#îtM§i­v lò¾$˜ó+uEVHÈ ØêÉ=’I»7äyÒÝÝ]’ûTÏåÊ'õyzD) qˆ7@*ý»¾Á¹Kèb¾Ë¾_É&$F˜8y$xIäܹ@гíß]~z—»¡J»ðÏ$°Ë<½ OB5UöM ë¿>zÖoôj£ö*lÉÍ\—Ã@«"½,4ÄÕµø¿°…]]é6•QœUök.̆ðÏ}Çβ­>T~ÍPl[[àÉX@ÓÂÑ»ÃVŠ=ÿÝk²“8É ÂÙ¦ÂÇ™W5DÏŽ9.£ ‰$›bI'²um™-³¾~<3e—ÕýWŽÕØ *èÙ4<‹l—gÈ;lxùª¬%É#Â[“õ  [ºï£_ž–Á|ý»7p…qä͉câ¾§sË6J’Ô§¡]»:€¶VÝ•——’eÆ"ŠE‘Ua!ÁÜ‹7t‚G¹:qlQ ÈnvA8RK %šÉcDølƒB­°Fϰ¥ÔüÏ5Š# !A%žDÒ‹è:Fì²1±òâ0e@’£Q)"‚,xèêgÃøSc¤8PÅéN%@‘%€#êPE‚ÜxbÁ¶ÁxöÜœ|Hqñ·¬“z“¹ˆXY‡gé’lxñ¥°/rØpÌ9K‘ÀI£2˜Ë–I l$ ôz®ílŸ¬››ç.H ,±¼±”%‰J è H«$yªl LÕÝŸp9qxÕ B±W*»c}xCΗªbÛ·(¥Ên1˜¶R¸ÄÛˆP{bDv~í-‚¸{¥‚vüé–Uæ:¯ú€J`æ®ìûˈ£Æ¨b@ˆú¹UÛëÀªuoTÊ”fÇ‘œ†<Å ˆá*ÈJ…ÆèÙûxÒØ-µåb‰¥‹&,¡@áŒDjÇá dH&ü+®ÖÁ0m™˜¸¯ú’LdrØÄÇGÈU (t“fÉó¨ ÿÉM±6Ø2áâ–C670lßCâ°ní°mÆ„cãÇŽ$w PÎlšdû“îu†O‡ÖMÍó—$–XÞXÊÄ¥P t…$U’<Õmƒ\0e&TÓK™Î)8úPúUéõG±Ù³ß~5‘¶IòL…¦Å0\˜Å²m"=»Yû[`¯ðxfYra +D@ŒcZò7uG±`ÕilüAÿj‹ÕF~ñÿ—eJÐNVwæùY÷­-‚%Ø2øø@ìϘ䤄›ƒ U$ÒÙ º[¹0åž|yç˜BÛŠ­r(7d-×~G}jN€4sqcÎ× V!e‘ŠžÀ ‚GçÞ‹@É…³M…2®j‰žr$]F=I6Ä’OdêÛgÀÉ›ý°Œv &x­Y¸•$­Žˆ$Ð"}¨Àf›`È|h1£Ï@‘ÈÒM˜å–Vf-Ø ›ÈñwZ¶ÀýÃnÌÜ"Ï›ÆU}B1ÉkÉSÊ”ô+¢AgP•·dæeFÓe'£Ë"ÆÖ@±b*ûè]^€¤;+Ç”’>P0Å4’ÅŠ˜3ò»k6>¦ >,šîÛv}„m.§æy¬Qá  ,lò&”_@Ð7`éjí¶.çJ$ ÐÌ$BÊYl(€A"‰êǵذm°D{nN>$8øÛVI½IÜĬ ,óô‚I6,1>\Ú~Îg‰þt úЧ5Ñ›çßO ¦O&ÊÇð|‹ŸóM’Vtãd•ªßBÀ'«5çí¨ÁÕY™IvcÊø&|é2.‘ܲŠìl÷™öÖgÄåfãÈ¢…/ú:̧,QèPªŸ}ê>6Ýþì«‘%_£­ƒð‡h›oÌË·—€VE (BYGFÏd’ltèë¼uŒ­±ò|6“c*Ë’ž°Éõ¹ú$! q T0,è•"FC@I!Š–úƒ ?H£]ww¥¡Hl)’™sË6w© œ}=0=.»ìvl÷ß- G; áˆ1±¤Â›0¼Gà„*qeV?Q$“É(ºèÖ–…"Õµ}¾l,œÐZEQ㌨UCj?$–$“vlö:ÒÑKK°,øª²e¡rþc—¢Dd…â€`x…U÷Vl Ñ)¿±ñ÷¹þ¥Êñr ÒfâòìHc@…¡H®WÃ0Jñü¾O‹‹"²& |)°ˆ$Aèõ]ÚÑNϪ?/ßKFq*ÓFE_ìuE5чxÙvÝî!|K Ô:Øc¬¸ÆFÔ¥‘ú<ڌǓòò;!‘qk7V źIÖ#f”åZ%ÿÑæËòѬKÎyJaú\ݨ#¢{ z5ätjŒWDs“쉿ÑÞØøÑ¤3"ȪC³ÃÉX‘Ùãb¨ø@Qö(¤Ã“a?ú;ØÚTùvTZ@Ñò&’ €ø$ƒì@«Ldþ޶#–k‚Ðú]ô n€7dQ'¾èôÇT¶ÿ£r‹È¨ðY+Šˆº MѺk$‹Ñ¥öDèœ_ôu±£·Î"L½ÁŠ“Û6{òØw£Š~•ÿÙïÂCÎÙüš˜/²ù¼ŸôyðóÆ×æØ¯±–ú+ú9ÙK<ž›ÁÙXŒ]‹ª³t@®€ÚÉ"ôi&SýmqÂ`É|y>’DÅ*ÊÄØ#ê#¯°ÛR¢\™tÿGÛ? B㼄ùb<÷\‰$“ßcÀñ]°Le$Ëa£íŽxæÁÒFD‡‰"‡I³ç¾¿MG¶U6• o€>aõm‘ýÿÑqľIYeøá(mèóJ+SÅy$hÚ~ØöiŒûn"FÌ)Ѝkj4Èääov ßMÖ¬Œ¤Cy¡ïçQvUÙ{›qÛ›€càýޱ4äš7¢ìÁݱ •úÞ¹(s.™ÕË‹Ùs‹ñ=u¿Üê×7ؾ/¢'Ääw’¿Øé\ßd¾+è7ÄõÞ@'ò:%Íö[â‹ñ?‘¿óhãÊýŒ¸ˆl?‰˜õÇ÷:˜rý‘K‰“ò€eöïWeì9q}ò¿ÿÞWþm+›ì¹qòÿÞS÷Ò¹¾Æ\Dü§Äÿ÷…ýô®o²eÆGÊ|QßûBÿÍ¥s}—."¯ƒñ4œIÈ>çS_±|E¾Sâ0¿ój×7ØËˆ“‰ñ9ó’?}+›ì™ñÉüMÿy_ßJæû-ñ}òÞGï¥s}‹âú*¸Çã wß+›ìÎ|_D¶Ĭ+æWíçL9º²çÅôJá|LƒþÐ?±Ô®zì'ÁôCa|PãþÒµúê×7ÙoƒèAÙw²Öf_=u!|%6]ê2f[Á½UÅÈ$|§Äý=}j¹¾É|Dü§Å_0¾>úW7ؾ¢N'ÄÔÌßJæû&\=QGÁø™×‹d¯ï¦<ÏÙrá^‰Ÿ€̯åÞ˜ó/bø™'âŠÿ´/éËJæûÄTá|KãÖOÖõqæBøƒäþ$ðrôÑG™‘ˉ}§|Êž?š•LhàÐüµ&[cÉÅZGyUP|Þ½gžKzê'Øjäg¢}†™ Pz‰öd1Aê'ØiŨŸa¦C¢}†™ Pz‰öd1Aê'ØiŨŸa¦C¢}†™ Pz‰öd1Aê'ØiŨŸa¦C¢}†™ Pz‰öd1Aê©èéh´…ÈÁÛ•"5’Û Ð€4  h@Ѐ4  h@Ѐ4  Š}Û (c呲¯§!?‰‹q"«ª%lÿâö­Z`Iø…F0œâžR㬸È[¹K7·])gÛû)‚[zq¸œ8¶ù$D•c’DV°Ä`"€ad°#¾ …½ÙÑä¡I®‡å wìäþdžyÙ8Á1†¯«†.;=‚5WVG~N®Š˜æÞf„IV¤ñ˜¸Æ’òVõŠžT=t‹ëJdnÍv\¹³äcˆ¤IYUù ¬GÀó¨CMuZÙÄß÷Œì<Ù"ÄÜë?¤Hu¶.XH(¨Û>Ö˜ÚgjÅñÿ-A³‹…½çK»ª—/äM ‹ÅBÆËȨ 'Šl‘õ ¯X‡vÜ79BM’Å21 ¤zrlàÖmO‘¨û*lÕ¶®nLyFMÖS¬R Lqòh1éhÛÇ›Ñö-³2fî+µãJsfs—”DlÇêzD1ZÆèI}ÀÓÙ |ÌÙv8säÜžвªG ––K!T©êA¨ß` ÕüJïÙׄÈbV™9_¬/€k°?+Ömœlã97¶† .8²£ŠX‚¨PŽ$‹äYºÕ)±îuüHvšEU.ÄPnª¾úÉvqqwùóÎt¸YJˈ%ÄÇŽ™·Ù&”‘íÈ=~#lÑ·däeÉ“üFzctÈxÅ€T÷^äy¬™Žç¸A´ãäK#¼–ôä'¨c!Š(/&GcË×â61²÷yþ\ï^uȉdI4nN¤­Ã±jM ¿Ò•º!l¼ì¸gMÂI¥^„nÒbˆ™9yÈ+E{_k÷Õ½¯¬–™ÄÀÞs§ÝÖ3!x"XdN*6^E@ Y›·Ô)˜XðEƒã[!?Æ·ÂX²d’)q‡˜ ¥LfEWfÕOUdþ Mçw“ eåIÊDh§Ô–6`€¾XкïŸä˹çƒwœäG†Ø±HÞ‚ÄUX’[— Z€+ø}¯ßYåî9Ðn„<²„ù¸¢H~^ãxØ(-ËD1>õôVu}gb«Æ¡vfÝ2›lÈÌ„ÐÂΡ‡D€H¿ÊÆ®Û!“`ÎËÉ–x2&ycUGÇšEPÎbÈP©#«¢/GØ/¿çË… Ï­?ñ¨-øX€¡¬Y `Žÿ¸.ÁÏ—yÝåÄÅÆY}<¹e¨ÕI’XØ ‚ùb@ºïq¬œœì¼,<Ü=ÂXdˉQEýLO%'¥ ïì>ýäüO$o2¤Ï:ãÅ:B¾šFc,ʤr$–²X@ÕûêÖ¬ Aš7ßA7)^$„ÉkÑY ̱q4i¸˜Ç‹#¢në£ì´Î™ y:‚™Îßó䂊wOZ~£P[ð±CX²@ÁÿqWd²edåí±ËÄL $¤Wl¬T‘_r þú°`ß·œì<Ù"ÔÜë7¤O5äÅË UaçÚÓ“¼g&ôÐÃ!hâÊŽ)a ¼B8P’/‘fèT¦Ç¹V¬õ›6î¨e/dM ‹ÁBÆËȨ 'Šl‘õ ¯e03cÏËÎW2l„—+Õˆ²FA«)Vhr^šÉè×eô3\é×/L¼…hLLÑÆ% @ðâA €kî<‹Ô í“'#'þiÙ&t>¢…qG ÀutAë£`ûèZfoˆ3ó ž, ÊK4r4aUIw@ ( I>iz?z•ß·å|îl¼LЫ‘~,_ç¨vF垻ɉ&“ÒL¨â#Ó_K‹($3W Öz£VT{_@z Ѿú ¹Jñ$&IãtJ (>Ì|“п=½17 ±"ΗvÌY[.‘…x+PO’jÉ'ï¥0eÆÞ²òðr¥1$‘2£ìÀ9Š6M*¶A²¤Õ `²o¦)R|Å ³3ä¨Oð†äÀàì¡UcJÝ~Ë–s¶Œ\·˜;I—eª-C—Ž®ììEj>ÁÏß÷œì,É"ÂÜë1ˆ*ëÉ‹–$ ª6Ãϵ¦Ý‹«ÔYs†ñ‘“’¯‰$XÂ…¶qWd“J,ߟjꀼMÂlH³¥Ý³EŖˤa@^ Ô“äš²IûéL] Ú7 ×-Nà¦Hæ>U‘ŒjUX(${ä¶Gd@û_7to‡ò²#Í)>3Km,*\²€$Qº ‚ wÑUV;yÉÌF Èš$hdc,8þ¡æ8ñSÑ Ac]TÑvWÙ³nÊlÜ3Yx™¡W*@ ž¡^Vóœ›ÓC„ÇTqËâ€đ|‹7@¥6=Í­X;,ÊŠ]˜’O÷Ô+ìâAñ+ΙùPf@â<1>4!*0yQ²M)#ªäžÍ¦BØ{ô¸°å>dþª ±e›Š’¢ÈYIºR ñ¥0N>þfYfÝqÞy2d…g䪀†jb/ ÷оÁÒ·@™332¾ƒrÇÜÝglu é,d<­Jµ5õ Uw~:{wy3ð!&,éB#Œ¡‡&{Ù€]v]•öu5>ë–ø[fFd@rŠuä< ùXÑlö ì¼™gƒ"g–5T|y¤U èÖ,…J’:º"õ_`fù•—xðá 9͘•K Ìxò!Gá«7@ž®´]Y™YrìÃ;+,:#)T†6fq`òQ¢!jﮫO`ŒÌìÈep’y¾OÐÚLoM’É<‰ä ¢½¯µûê¹{Žn>çõI(A—IËÜnŒåÇ¢½} U_@0÷,ùwe¦sÍψ¶v¹ ã}ê gyΟwTõ9ÀùC"ñP±²ò*Éâ„›$}B«ÀÓH‚0¾"Ü›\ÇJ­·¼ñ3  $Z,  %A`,’mO~ú”Áa½æA‰”eÌ<¡0åÊŠ§#q-@B™…X>5°IÞ·ð„Yo$nsŒEø!”©Œº€?cj§ª²Q‰m‘.ñ»Ë‰‹Œ%åH“)¢“$±°@;òÆ…Ðê½î([;-›cÆË ½À5þzŸäÄ™s#ßcòÐ’ Ä ”M›?QñB«¢{ÕõdÉ›X"‚kÀñz–Çø<öĈƗ1ÜJ­·¼ñ3¨ $Zä  µÀ²Iµ=ûêþBÚ.›æ\8y&lÃÁZƒ.DP}7n%¨(S0±à‹Ƙ—&Æ·ð–,©$ŽOž0ó¦R¥ ¨¸‡6ªz«'õ Q-‘.ñ»K‡‹Ž²úyr$ËQª’òÆÁìËÐèv(dÈÎø‡8¤yÅ—,“ ªÓ)²å‰€€*°óìÅ&z öÖFL8/ÛA“+ ”ÆÂPÄ%"ë¢@"ÇåcõÐdÌ»4ù2à–Ì›ÔužT2 |d`:€Õ­ÐMŠßw 0¢…b‘ÓÖŸhÔ?K5‹$,ß÷6Ìï´¸x¸ë/§—"L¿ËU%储 /–$ ¡ÑìE²3¾!Ï)Nqe‹$Àª¤2›/ÈH(¨Û>ÌE±Ù[Ærom 29QÅ,\WˆG Eò,Ýj”Ø÷*жFõ6î¨d/O42/ /" ,ž(I²GÔ*¼([-ðîï¸d žVxçÅ2+•PÁPÊ´,¨ä›6§½F¨&ÎÞ³H¹3¿î`ÅŠfA4ü F ±úX€¡¬Y `Žÿ¸ÒH±»&NN^Ù¹ÜDÀ²KDQeb¤ŠûO÷ѪbÿG?Ýó°ó^<9(1ÖH*Ó¯&/ÈH(¨Û>Ö• eò7,ÕÞ QÌþ’eGšú\YA!š¹³Õ²£ÜêS0ÃÜsåÝÖ7–CÍ<|^5ôÈRxð YjÁ4i«ÀÓж6w–ÆÜaù•—&&#•€Æ%`$Šû“ù4-‹þ!”0¦…$Êùˆ¥ŒIêÅ:#  €9Ñ ƒb†¶6Í;dÙQOÒ4† †E’Hø³ éªÀÕûë½~Ö ¯ßPSâW¯×å¡)8öEèl%CWF6Hₘr~z `½õ_b˜XÒÙR¾È*k¶Ñ:#[%GBÀ½Kaé“¡@жÃAl4 h@Ѐ4-°Al4 h‡Øil€4  l4‡Øil„p_¶­°N  h[aBª´ Pû l(}†‚ØPû °¡ö aCì4‡Øh-…°Ð[ a ¶>ÃAl(}†‚ØPû °Ð[ a ¶>ÃAl(}†‚Øh@Ѐ4  h@Ѐ4  h@Ѐ4  h@вö¼-Á”æc QÕI°@aLV:¿:´Ñm”›kõ³ñò û Awàà 굉 ¾ÝˆÙ_69¬– ™•X@•hd€ÃShQ掔ËlÍDž걉Eé²¼ŒÃ‡Hg¡C½i«!WØâù9qñ–žR¥¤™ÞCÑvX7UÕG±ùÏä m[{m¸ß.Òsf‘›º$’Oâ$ÿrI&Ïå¦ Õmý?ç¦ Ë•µcf̹ü™h~6€6A€=€AÏÜêÒNÝŽ3¿‰ú?Îô½>|ỪºóÝÕë4Ë{²‘mXpeœèñÈ–7͈Ñ$)4 ®ÈžïÉÒ™~$âmx4¸¸üK(^Üž @’Yð(~]iLÉ#op¿‡,`ôÌ|lß(÷wuïwïzbËkÉÛáÉc–2dÊ9B¤:*Aàø5¦,[ûß*Â3¯Ë†4sº•åø‚ 'Ü’I³÷:bųdp˜ÐFªÄ(bM¹&ÉüΔÆLCí8rf çÇc `Ý9T$@‘`W} )˜p1±òfÍŠ—#¬ü‰åÄPèš>Õ¦,¶Ë6$/$’úd4±„vV •,ˆä{{óÐÓ-‹hÅ\eÊÌ*ViY™ÛIë¡ß^ÚbÉz/“·ãå°MÒ„(ÅJ‘Т#¢GDtHðt¦[bäÙ0¤ÆLC‹hUR9ÝA¬$_{÷û)™¶|<‚ž¬,UBIJ°JÀ*S_˜>ÛJ`ÕGìt¦k&fić(çÇŽD„·|Éš$…&5ÙÝù:S2íxxÑÏxŸND$ÊÄ̉6OGíãòÓ &˃4˜£ŠÊArò31ª£È’EPª=b´Å‚ƒa|¨Äô(s a+ d–å|¯².îxëLX"mo—NƒVM«o“1Jȱ  ,y¶fø‘È“Ù&É$Ÿs¡1d͵íù¨Åc !+è¨!M~`øm ‹/&æ É3©µ +SUaI hžÀ¾ÏßA‹)Û·Å“óIæ˜+R×d)4 ³d{?s Å‘·m˜b„Á*ÑC²€Mš û}Ÿ¾ƒjõSï Å‰ËÇÆÍŒG¦•ƒ!W*ÊGØ‚4H°|<,£m{sA3cÿ/U’äG[£`Ùò|Ýßw Å†VÝ›*Í“&P‡ 5ú€ 0@6Ÿ¹ÐbÆÉ2´rJ–brÑ›ðH+ŸDŽþú X¥Ûð—8î Iê‘E½v Žèqº¡dT ¿: YXv}³Ö8l4f2²HÎ*=t(t>ÃA‹ ì{KbÉ„ñ3G)NS±f"ªØ›¡B…ÖƒhÆÇ‡3r9ÝË39¿Õ‰5ù]h1e3°q7ÄYEŠ«&eìñ"è€Eø"ô°l9'ÇÉt,øÀˆ¤$¨ džÉɳïçA‹!öí½ósDLƒ_2`­Ñ ‹»èh1dǵàÔs£€‰ ›.HD¤Ð&» {¿'C%#Ú¶¼•Æ?ÐèQÃ1`³ÄHUìô(~Z¯F²~X^Q¹£<¬ÌH"Iê…QëÈ­g˧ŽdøPc O™¥d &nA‰6ܯ•›"îè׎´òÀc1¸ûÿÃØ$ùHˆŠ-û~§»üÏgO$3•¹ü/—2Í•:–P?÷„`0ÈÀ³÷:y`ñð´Ùi¸K¸7©ú ä°X$U€A¡b»¡w«äŠ&-ûð¤SfØ¢\Ž>«s'—C¢hPûjy+åðv1‘b‘824…‡þ /g¡CòÓȆ2Aåð|xòc.H+)ùÌÌÆ€£È’EPª=bµ<ÈŸâü°Å_HP7¬ÜƒInWÊû"îè׎µsØÆEeÜ> ›GYÉû3ØÆDÿ­_øùäÿ˜iœ~ÅH«|Sðó§=;i»ýÇLâ*Fhw/„!Ç—3 ŽpDªù ×wudÑ6n¨\ãö1‘gÝþ|HðNRˆá 锆ZèÀ‚ uwd“¦qûΊK¹|.4x:‰J IJ¤Q‚ «›«6tÎ?c ÈÝ>Ê‘dšt%,…AØ{‚Ÿ¹ÕÎ?aÂl–ݾ|±œÙ*d ÊýR`¨4H"Ç]ô53Ùp™o C”sS!C’ÆýR@$‚HRhGdOwäê¹Çì˜ÈœMÛá,\\•RʹI $ !E“Сùt5œâ1’4ÿ­_ÿßSþa«œ~ÅHFVÿðÎb§Ì_¥ƒ)I ²‘î ƒDŽ‚Gƒ©œCŒŠ6éð{Ã3Nœ1¤Y!PõÅ–èô{ò|Ýßw§’Níð–d«>FR³-¤ 5€ ÀyØ~çO$2Ý~“+æß$æ½fâXº$(‘b‡ØiœF2÷O…"Éù¸òÀ~LÀ˜ª–»!I M› ÙûiNåðÄ ,ñæ¸õ±Êsv±mÑ "ˆ…j>HBEáÎøqaxàÉú¤$ \‘Uõ_.ª¼ÿ×O,Ž~†coaGòðdªŽD°äI$›$’I$žÉ&ôò@a"ãâ]•ß‚f©?e"ôò@c2eø“g„T¹AIöb§’Â`>%Ù‚«ßÙ†«ä…è³|A´F¡Ÿ,Þ ùÑò@˜Ì©ø›f6ZþVF§’|sDŠv0,æ§gî4ò@˜ÌÅÎzõù_$3ñFÊTš´1§’’~&ÙƒRç/çØëO,(«Š]špó±÷õðææŸ{ëZR‹FqcÅ×zöN„ h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@Ѐ4  h@sw­îM“-^Ui"–+ 8›v'ÿ•Ü­ζéh$Ùær¿Òé•üŒ,Æ0ªŠW¢Iwì?µýõç|®W^ŽËýŠ‹~ø‚L $ÌUb@ôØ€ ýº³çØûk Rp:¸Ç#¯ñQñÚn!d« ÄtH>h÷©gtÉ>$•£fÄy»Ãz8¨`$‘A²h) øúƒõî^¼3MŒmçrÉÛ'Ý ’Ž8Ö@?—õ#’Aª$‹ Âè‚F´Bø™9Óâ;„) ,2h$‚O€W½ëœÛ5ö\îYŠÞŸkòÖäoœ/ˆò3'ÜjI qY¼ó M ?â'ˆ${ünÛ3Ivø–X²~GˆõD|øÑín®üyÖäãf”ÑÏØ§ÈÈør›Ö˜NŸãt6C1¾”¨5ï]uNÑͪc~Œde‘RŸŽtD€BI·bd$ÀcZ3h»ac®Ã•…pG™“©J ª ¤¨,EŽ˜Ùtº »T»;Ö6ÕŠ,’¸ò¼Aqä5|•I¯vØ&ý´h˜ٓ|âÌØë…!–HÝGjZäCp'êY A²4'ò=NÒF¬bd$ÁèkÁ¢E×BîÏ;ê7Å T3b0–£$‘PʽØ@=BMQ$w`裻ã‰6NFZ\`¦Xè‚9@³@Øüú÷­ ¼N&2nK¹Ç•˜ÓÏ·«<³H¡#oæÚ±¥€ _ÒIžÅjʉ>.qÅpá‡Ç`«=@Ä02)n vƒ@ƒ}öHI 47 ø{m3|úàÇŽsXàŒ‚(~«Ϋ®ÍX¢iJJØ)ðÖß‘™Å4B/Rb*‚À9 H$)¾¬èEvGIJãÍœfY aò‘6;3[±21¸H¿¨ä]’¾ÞCÙé øñ ÝžklõÄ¡Á :ää&JäxÉb»°£ùJ ×¹Ð7GS?=7 Ÿpþ#´°$°ŸMHe/`t žˆ÷ñ¡>G ´ç͇>#>;¶>;ˆ91,?Ë ÈÝY$õz®™š ±‰°@áLg² ¯Me&…÷Äd ²¹j¿Âpqóò/¡' t 0ôÜE¹Œ#Í›ÐlÕ™þÎØ»–câKœ1 ".R³$ð7jIb.ˆ°¶§ º ²‡âBÌÐú‹E¿ö‚¦0ÿgg±UAÍÝU$z=‚þ&]èäʼý_–KÓ•ñ5UÝߊÐÑÍøg#3³cx— Q%+!!Ie`¡ "ì“¡—c~$Ê‹#mÂËQñ¥™YŒâ£âÈÜYî¾ÅM$äèÙÊÌUþŸ=ã49 ™3­‡¦à-Ì`ñlÝtt4t²¶èw,m·qÀFÌ•§’HÇ4T›¿"Ø…"ÿÆt3¼ƒ bá|GëÁ&Dóä¨h} gˆ H`l"‰ØÐ`Cñ²´>©ÊÉ#ÿ}ÆÏ/Ý:ëÅ.¯½ñ/ðÂÜDXß,ʘ!ræÅ—šÉ(aLÆ€ä~£î~þÖ£ÑhfÙÇø´”ÅÆçMÊ_XH¬½8†âH>HwZ+ —?nØðÓ;)ˆ–oGFBK‚Ì#=­@=õ¡]¶`ø·ÔmÕ£$Ÿ,…#v}@ìxÆ/ñ3p€iG~F‚%3}Fø¥‚°Y×2# =¼‘•PʽØ@=BMQ${ƒ¬ÈÑ]°Ì߆R«2Ï:ΞdxÉbØQü° ×¹£ [áçÁH³Æ<ˆØFLù22+’Êl–cl}Òh}ŸÈ.VÇ—‘·<C6DE±âpË E”áH«PK@ÅÝ“¢lêü>Ð͆ñÅ>œsŽLXøÇ  K(²²A¢Eƒß°”…¿³Åñã™ñâËeHCM)úco¤†£åø† ›6¥!lß…™`anlË—“ðe첨-uÕ‹÷Ò¹_g3-bÿY±„H3¢¿þ ©ŒÇÿÙÙ²*¨9»ªRËmœ[Ã$‹$ÓdÎ&_Lúñ ,U™‰?I@2Ñ>ô¢öøöÊ,ã¶dãâã¾D\YÁ•–Á_WÙŸ 6^ —lÍùÜ|9pñÝÕăŒr±£Æ¬‚AuغïAhÏ‹¸m#o“ L|‚¤‚!ãWcKžÇ’ެõB†¹åó£¥T,ëì±caâGµC.:i Äy?ÜÙþú©Û&-#•ñAWÜÙcdV¨ø’7gÔ ÇŒbÿL¥êÆ®±2²³¸3ößži”zÆ/W‰qº»ªóíw§Å›0âÉ´c|I•fGêKd©›“ ! I+¡àW@j´½…t#øYÆÝ¶í»r‰\–1³äEÄ£‘$“A®ÏtoG^ÂlDYV4¹XPþWànq´ƒÈdðº±Ù»¨ûÑcu±yÓcA²ã”—¡læycFõ!ˆÄ!€@%MXT*†¤ž%K- Ü7 |Ü|Hs ‹&‚UR£Z U'ÉPÜ@² ° ²WDÆUg¡Údy6È=xÊ"_T·_U ¿ÎïEØÙÆÍ*~&$2¤©›ˆžÞHЍe^ì ¡&¨’;°u¥TMÙÜ?o—"|Xd .8S"UW!b‰ l¿^úŸìåìÁ›sÌ]ÏXž|HÚfiTú¤¥X4£ô’h‘z!m¶ ¶yñNt^Œyóã‘\TÈÅI ݓؿ7¡6!›jÊø2ã",*úf $ô¦ˆîÈèû×^4 ±ûómy1Aœe›±åTIg®NxÓ-XŠ"‡búï­ÐØd¶lù[ÆJÇ”8‰½Yª¿”üCê _a~5+T-äw}þƒûiQ%Ëì=þƒûiQ/³&õ ƒfË8Šþ¯Ë¿§éß.\MUwjÒ‘mýœÏ†æÅÇLìÔx× cIJÂ-"!Ie°H$(BkÉ'ôÒ¶;llÜ,ˆæ‰q¥]äÈBcàQŠ—:¾=Õý´¤7ìÇ»>VgÃÊÛ˜cü´¦GÇ*ªB‚€X†ƒõf€‚t¤-›7™v¼}ÇnÎÍ”A!”ÚO0TÆ÷bÈò@$_°¿µ¡o!yGd“âTÅ€ADR«äLÎØ•¥Aí¬~ÀW¹èû'rÄë.néêA2©,…UÇÄŠb~䨻zì o>;.^tÙG£>˜Hà‰Àg MÈÊ;šÙŸ ¡´w=þƒûiQ%Ëìä|Vª˜Ø÷ 4G$ DÇù`` Ù¨b¤Ùì€dj–ÛöNË—‰·ì˜k’äK7£Œì†ä˜FhxµÙëR¹~+¿Š4j?Ë#a»vLÛéA‰˜Æ J;ò4¤fœá”~"Ä–m¾oMr¸@UÓ‰',Är»¿b: ×d‚¤-ý‘€Û&GÄŒ»h‚&€È’…p!ɾŸ%T‚lûøè£i Ùƒzû–ߘ…DÜ’[¦›•ßFÁ7Ñ÷JØ·‰M™ö 6L˜]à›yšTä* ©#¾ˆ óäi[#³oÃÛd8bÅ<¬e’5±¾ °!¶¦‹oìÏñBm°âÁ‘™(Œ¦LF>r•ﱫ£BÏ`пê‹fÆÍÛS#ײÃ~ à $ÕQÏ~Ú”…¼Žà¬>$e^1Ì™‘‰ÿy$eTQvP“TO½ƒ£¯eVY•¾" ¥VeÈgO2ÙeÎA$ÈÄÈhöö5{5Ï3c˜%„BB³t@èïúyšùE>÷þÿú= ü_Ö„Ç:¢…l~ÇÕãϵ~¾4¤çû¯óÿº.ÔWþ?õeNOóŒ@Åjýθr+›híÆÞ¹Éõ;ô³U^+ß]x’QÿÏÿ§.Vó“29š~ÿ˜Ò“Ÿî¿Ïþè›ÇõãÿV ;"€I…ò~âþß}Uù¶»×ûÿ¸Š¿÷þÐEjUyÀx"¼ŸÈ Ô‚Šºêßý‹+÷Ý#?ËÅý#÷×—Ó ùx®¸ZEjmP_°=꤬*>7© 2ÇÛ,õì5Òq“šýÑ΂‹¯VBFP´ÁHú|ù_iÄ©µìœ4Ÿ£F6!–W’>)õ[hXEÿåïZè’͵޿ßýÎoñIþÇÿÌÆq±…çڡ赚r>ÞÖ?:“ãÊm¢ÂxÅ&_ý\ÌÂ" Um!G\î€îG}{X:éÇ£ÿ“’nD«Ùqÿ±ž§àß’hÝy4Ÿjüµ_Ž¿_ãÿaÉ9ßì°øSw™$ÅR‰&‡]×Áýµ†¥ã¦i8ù- âøßR¯òÛê‘T÷ÙüìùkMÏâžý“á¿^‡áâOˆËE+r³¤‚ Ð>Àþº¿%$÷ÿȸ´Ö…ón,ùÁ)bQѯ·ÜkŸ$GHMcE°þݱwž`F¡ÚÑÖTôW(ËØïˆ6m×| W8Ê›ž_ ¥ì¾>É–›qÇ“z•@û^˜ÙsH¦~Ë»æâÅ…CÆA³u¨âØÍò>Þä•À¿H£ÑïL ™/ðîèì/:7à÷¦2áÕ˜±ÆJ=U0 h˜~Þ8œTóÕÞ˜ȉmƒw<™qP ùÕ\msG¬ÿGÑMÌ!º“a|õêàUË͹ֳUïí®Ë³Žú9ûžôÛ|âþzå>LY׎#1ø©ÿàÛXòš\!þµ?üûiå/…þ´¿üûiæCƒýiøöÓ̇…þµ?üûiåëSÀ?¶žRø‰ÿZ_þý´ó"xP­/ÿþÚyð ÿZ_þý´ó!áAþ´¿üûiæCƒýiøöÓ̇ˆ?Ö—ÿ€m<Ⱦ ÿZ_þý´ó"xP­/ÿþÚyð¢?Ö§ÿ€m<£ÂƒýjøöÓÊ<(Ågþýµ|ƒÂ€üTãÌöÔò 'ýiøöÓ̇…úÒÿðí§™ üTþ=ûiåëSýÁý´ò 'ýiøöÓ̇…úÒÿðí§™ õ¥ÿàÛO2ëKÿÀ?¶žd<(?Ö—ÿ€m<ÈxP­/ÿþÚyð ÿZ_þýµ<ÃýiøöÓÌ<(?Ö—ÿ€m<ÃýiøöÓÌ<(õ©ÿàÛWÊ_­OÿþÚyIâ'ýiøöÓ̇…úÒÿðí§™ #ýjøöÓÊ<(Ÿõ¥ÿàÛO2 ÿZ_þý´ó"øƒýiøöÓ̉áD­OÿþÚyG…ø¥‰ÿrm<£ÄiÚ÷¦Ü§0zd~zéÇ<äc’£©é3~Ö»R³…êÃГï¥!h=¯Å¥!h= >úRƒÑaå´¤-2Ùñ¥"‘¬Ð€4  h@Ѐ4  h@Ðý$ïYyÙ«±áÈUI¹H>ÞúósM·Š=|PI[3m£ kXãÃÆçôñ'²A>Mx¿Ïι)8,N®*NÍ›W¸–L÷É HIUo*5¥ÃÉ/’1å‚Ó0ålûæÎ&tÍ͉ý5‰ÆQèÜevt>ø€9þ›9¹¥Èãcº#»üÇzß$£¦cš:ÑêvIbŠ?áÑ­z„]õ~I=›òIòuë„îÏ$ãC· ØñæŽ)@!Ú¯ØkR’rlXÍÆlÃŒOÙÚ™G*5Œ±+.õ±Å0‚L…H¶@PI ITâÌÉIhqÛ[11c ÷d‘ÝkQr£j3«-‹½må¶6J™TM«Õ,X‘ﮉ£-“¿ìùi#Áž…b'Ô{ (Y6z"ØëóÒÒ•VR?‰¶‰ay¢É$GøƒFÀÙª@$›×wÖ™+º²øæn™¢NÅ~¡u®5æÁ:ûébQ¦TüE³ ‡ý¹ŸÇÒ°m¹UuV<>/ºÑMC¿‰b,†¥ý…êg´\%ŽÌ#âX›pþµÏŸjh’ ê¡`gYS“fœ"¢j›rôÖÊݵhçL(h¤mY W!•x†-,L€‚.Á`ÝiÍ]PufY>,€—8ªìˆ{‰Á+é"ü|xïÆ³)¸ÊÆ ÆÍ|I¶I„™ŒïLåx¬LÌ]Ø‘àùÚ’}œñk¡’üE³Cˆ3¤Í2ÃQì~þ*ôÉeB¥†^ýµáe.&FIÕGƒhY‡r4´ÂR¡Í¸â¬ž‹J¡µêeì¸J„Å¿mSg¾< eô€H @5D‹ì×¾«’LŠ-¡¯¹aBY!G%Ëd“ì52Ùqtg‡â=²LY3$*Fiƒ£: Á×wÕêäˆâý?ígüÕÆX¨—+ Ž5wÑöºãLÅô+/â\1¢Éƒ%MB%K@è~¤ö±zŽI«F£i20þ%Ç’Dƒ-ÄRK|Ýž‰³^G³WGSŽnJÙgž‡ˆ6Ÿ_åÎYåayzlT:ª#Ø›ñ÷ªJ¬Í6èdÛ¾,0‰½@ÂÀèýõ"Jʸ¶ãAñ-¹âfNðAê1™Y¾]ÂÚš 1hß‚|%wý±Úe2J†L²‰qdB]šeàøìÑûhkâ1wG`çìt+èäÞ6æ.ÆCQr°M©Z°E_ZáÉ ~HíÇ5Ó4Ò¾Ûf)ä“ÎT{'’Š¢ÅÅÉÙ‡?4cHqÚwUz4$w@’ =jÍÖ±Œ«]N7¾Í%&ŠQ…ý6ˆ5ï£4DìÌÙ.vÅ,Í@†ë²(Ÿ`Šö#Q©{*kÑ|mÚ fõùÁî@€ ߸¢ ë_%I‹Ú"=Í„BS,¥bœ¦& ñôžÈ6*‡}ýŽ˜ËD¸Ó5oûŽ6NÝN2É"™JÒÆÖ"¬Aò·ÉmQŽ:NÌ»Î凖˜sG-'þ¢¡'ˆM ä‘CÞµ‰''Itn-Gmö5r'\>›Y4ÀØ#Øë9M-šxÞŒÅxÓÎÞ§" ÑèMT wWuÞ¥6¬¯£g¤XcÆ2$`I,TøüŽŠú#HÍ‘º£d7 ÒªÆœŸÔB§}Ñ×G½i©)8¸‘ZM¯êd},‹é· MÕ_‚=µœf[‰·dÞ°11²2²²™ ŽN!¤Vš6"ÉzØýµÚ ¦Ó9M¦´uów<=´+d»JJˆãg4(“J ¾Éèu÷×c†ŠÏ¼í¸²ÇÙ€Y ©`$h@>Þ4.(ÙõþZAõþZ –T‚&šgUDRÌÌh’~´¸âî(ï‡!< ¬Œ¬ ,0X6 v‚’'7;o„M–üC8UK31ð’|ôèàh4S+wÃÂ2r}PŽœÒ*’Ô§ï^ÿmÄ2w}»d‡#(´…€€  “@šþš »à®`ÀiYd/Ä\Lµr Äq&»«½(!Ýðr3r0r ñ2†âi¸’j$] Å‡ºáçHÐÁ$ÕC–CÄ’€$X"ühO‰«ëü´™›—%È üT,ÌO€“Ñ4èí Ñl\¨³1Ó+ExäPÈãÁƃBr÷]¿ !qòòx»ÕR1â â9aA&$ý´˜É³q Ê‡ i‚Ë9a Q%¨Yý‡¾ƒâ. ß|ÖÛ⟔«Ë® *@`Š$Xú‰›Æf;ecz¦5Ÿ#"òR mG.‡µû}ƃâBïx&@y*' "wÕ5Ë»×¾…Å÷>˜Å“’ò*mJA¢"Á؋К+›¸á`4I™’¨Ó8XÔÙ,I ;«#¿Æ‚“4’ÃÉ r·\Ë{ÏüâÀqàH² Z¨;›#ÛQôitR Ïl£…÷"ò뉑@Ñ"‰’=õƒO³6fí·æmù# 7yT€TØ `ö,uçRI¸´jŸ-‡rÊÆ’lC!#’„AƒßTnüV¼>'¤{|«lºäúâ?—ÏU÷¿ØïWÄî‹æA~vce6)`Ýq=G ];V‘ª=û!îC´ “ߟìŸíª Ú´GÈ“¦Ro‹„ ø_ÒzäWßQD®i~!•#3¶Ü¸]‘~ Eþz¯‰­‘rűM»¼ \@9µ-MõÑûÇGGÂÐòÁŽ?˜Þá’¬³/%1©?O’hh{ŸmiA©Q—4ÖÎü¹Ø°È¨óÑj"è@’O@š½n›0Ú°9Ð&@Æ3ýdö8“Ù5@к»ÓÕ‹WC0ò ËÌ8b@XzRªº5Dެ(º³2’½Ûó±³ç’Á! €G!dgÈëÈëEžÅÚÑ¥b‹°!{kTþ‰“+’p°—–B¸€^*Ib~ÀY'Ï`~Ú˜þ…´L#*ŸY•”oj:´—¡“6V3ˆ²YÕ8’&$ ž5gÆŠ62eÑöé2Æ!wW.ZäEʨ;«¿ËZPC&S%°=VÆÄÈ&E°G €@5D‚@ Aó©($‚•™Ž^:´Šg[ÿ ‘ØsƨÑQ¹c´m/®B¡ƒ©ã¢,Ýõ×~Ú´ì&‹C™ú‘IbÈ6 ƒD{õ£I'Ñk`)Zµû- ¶öoÓTRíçŸéÞ‚o,Ú Dó~í´#@€°Ú @³&ô€$ŸÅúhJ`Ñú¼ ‰·á_û#µûŸúë\_‹1Ë‘Ôj®«^ˆœ›´p>&åóª:òòþG~Œ>ã\oèë_a©“.(Žcìu­ŒPsc¦Æ(Ž_øÿËMý_`Yþßå¦T~Ñ÷òÓB£öOÖ5?À¨ý•æß®´*?a;ú›ú²y?ÛüµEGì‚Íúh*?a;ú—¡Qû'“}µEGì’~Ì5Ÿðg_`݆Ÿàkì‚Ì j®‹Š%‰âÿ-ö-Gì¯&uEGìžOý?å ¨ý‘êÙ:B|"y?ôÿ–¥"Ô~Ùû )רs?aªj£öžüÛAQû$¸AÖ~B£öG1öÓäg_aɾÇVÿ$so¾¨×ÙnGú¥!þH,ÞË¥!þHæß}) }’¬×GG¤\Q<¿ðŸÛYÅ–£öW›kT…Gì²–>F¤…Gì€íuZШýƒr'Çùj.…Gì‰4N¦Ñ);úÐŤòîõ{´u>çûk·äpå¶H Kãß^³Éª-¡@Xñ !È ÇòÐÒûŸ„k³DêЀ4  h@Ѐ4  h@æÛÄ9ï3²AÍÏBǶ¼jU>ëgµÆãÕèÛ³m¹9(þ®zÅÅ `l úÍk°zš"µ×ŠŸg>TïGOÜðv­Ñ²2"G‘2D”H·z`p"ìY³U_UÝë´§Œlãç*3mPîû̳gJãå2ŠÇT@ ‚uç†Ry‰¨¥G uÅÌÚ²Õ¤ÁúåÌ)áAè÷þßòÔ•Eü~ÿßûý-Í\¾ŽîÜ3wY˜´“„¨E´jE}C‘ôyQë]c/ùØ£”£ÿ/&u—jHâŽ?Fx£õ‹æ(8‚@Gô`šäŸ}o–6ÑŽ7V[yL¶›6XÁ^ø7ÿ0:ÂK&oøörr6¬¹²%ˆE#¤ñ…$)4íØ°,6@ñCN6’V΄+<»‚Ä0ÂF‘’g°-¯ÅyñÝë){5lǃµfÈz‘²å‘„Ä€8·*P.É%‰$àèkwñÑΖE— .eÌÆlFŒÈÂW+Gè F‰"È'ÇÏ­4¨×i¡8›nlðNã•ßÓäKÌU¬n£C¾¸ŽôNÝF¼\ãŠØ†¡5êÔÉ̵AаðhŽÏAG±Ö”½«Ø±‡œ›F>Á-4f2Ì…Eq ‘dÑ *Áìý†³’rhµñF/)Ñ[ƒÈÄGäH$~Äë•Ë.ޏ¢ƒh–M妒61œ¤•$ä¥Qb{²Çˆ…ÄßdkÑ£Ïü—’ùS¤˜übWSœæ7בG®üëv§³“&Ï‘+ÉX²ÅÇ)M(jj Q¨ן·]hÿ$ØOLÕ¶í³G,ùÙxÓñª²,‹ÎCݵò ; / £òÖ´ÞÉm- ‡ H`âøS2˜¢$«êªÝ‚ÌX »ðMttj9&DÝ3VÓ¸¶ãðRë…G^FÈ [*4ObÉ?mL–EÅâh͇;æãÇŸ 狈2<\Ará¦"–ÅžÉ>.®âIr·cŸ Žw' ×áǶ¹âìéjŒxÛ^dÒÎÑšŽie$q*Ö@îí‰$àú:èÙÉ+>6fcdÆqDFE‘™ì0 €Ýx»ñäjUL×p»Ná6<ózEe‘£4äì¬Xšw@T$ m½¤f™Y¶¬œlA$Q:™.aæ ñ+Ä›ºä{7}YòGqËa+ñl¯‹–iÕÄhÊ':¶"è êûm"îÃ]7$Ë›mņ)\¤¦GâÈ8Ž,+¶m½¬yïJø4/æb]«!¦vòÓ«‚]}> le¼ÑÈS}j-BŠÿ#v>;ü£ÁÃé 8‚;ýuÍ^;4ÿ-Î×——´On’ÊfÆxÑ&T  ªƒùy>|kÒ$yÚÙ>ã‡ó›”¸Ng–%¨å•CM"†$Ø$(%‚f‚jÑ–ÍçrÎÂÄÈŠIc<ðÅ æ¡‘••X,r4lx±ØÑŠò˜Ã…ØÍ ÉY=¤Z‰}a'b¡×Wd}»Ðн÷iÜwL¦hñ\Å“ŠˆPH£Ò¦s˰¼ÉnÈö HÊ×c26¼÷ÞšuÆ••³b9•}ª ÊM–óD!{jZ4^áî“K/ÈžFy%Sºà ’Å’—ìÞ–€ýºÆÝåΓhcxB‘“*±åÈ‘À+"‰°OMŽ–ˆÒ7äÃ.DF8òÞ>$Œ) ~Œÿ-S-#›»m[“ãBqó'Èhòy¹>šÉÀ£) AEÓX$‚,›$ Ñ}¶ ý£kÆÅƒl Ë ú±, #ffò@¡æºÐºf_ˆ¶mÃp̓҅¤‡#c<\Ž©šÈ$䀲Л´gM½¼xÛ.9£8 ¡‰eˆ@¢…Äßd¢0¶lè÷e›&&+DÒ$¥Ç È…l—$’á®èa»¶,¬|¥È™'X±ñ G;FY¬ƒ×º “ÝøIªŠÓ£NÑ>V>Ë‘µÊ¬'’DC$d¸gfLh€EÙü«hÍ2ÿ™àÚ ÄËÆhd†%•ÙM°T‘Ùû÷×Rm3?ÄXyYYäcÀÓÄ"’9¡I— T€I %@>MuD Hшröèp6Å€MÃÂ| ™UfÈ#¯ú™R-#NcïM8†FVÌŠUc"úJždÍ$ssx?#Á@7d¹$Òt†ˆýª œÝñ°²bÆLn)‹>H³-Ø(¯ kÐÓ_H®9Ýð¡ÎÊÂÛäi$e8ñed+=Ð’€£¢݃ؾ€×²§¡†Vd•di ÊÓ”å#Ë$ŠöúhOewæÈ—bÅÅi›×ˆFQÄ,ŠÝ–#È ¾ëõÐS&fW¯Œ±`ŸJ@ÆwiTH€@¾Džº$ ¾õ/t*–ÎN~Õ›6òò´e¢l¸æŠ@à,d H»,BP Mö@7B*ÈÂÙs—vYr"n1dLñÌ\q܈P&ÉrI ~; u2-QvMºo›„¬‘íÍ‘œTž…šPÞ‰,Mz’’JÍE[£çSe@2š9fRÜ?@PEâÉêÉüÏyÔ£¥èîã-¿bÿˆcœŽʬ= ¡‚¼ƒrUÐñãÛZm#t®’ œžÞþõ¯7'Êvw†£EcÌÿÝÉ:rG=ù±öžºBJ1þÆ'äcÜäE…ò•‰p Ð÷Öb®6jM·FŸö7€£e*«"†Ù"»¿Ð×]%ȒшÃ{L)¥æT˜Jö"É$û’Oì™&«ì‘âµ³.LØ8ÒE0Ñ(u!lV‹>,Ÿ=“Þ´¤™‡¬WÏc<äI"0áCñ!yäUÐèUw_c­d¬˜Ò,¹øï4¥§‹¡ŽWRA*8– tIïö­2Y t`ÊM’ó"×7,/ÍzÃvìÚI!°˜F‘¾B‡fR†'«ë¡]ß]þÚª±ì…1Ò4‘$äÄŸQ8×=wïcST‹ÙºmÇÔW‰C’%âªGÙ$’’Oµ€­¹+1‹*spÖX¢, J$¨ *° ;“×f½Ï2V+Düö3ÌVWF€Pü^A¹Ut:]×ÛL–B« \ìwžVi€bÈRVBl€Tµ{¢HßôÓ%cÇܱƒ´Ìx0Èg¤Úš4(P&€$‘@Ÿ¾ŠH8œþ xç®gL¿ùoA úÇt/É¿ßBä9犲T¯GeVúhM/߯´êû"ºè×°I [ÌXêìË!)/WL=ø°?}DÒl’MÑôÚ²RLx¾LÈ«—‚7Ó7 ¶H:‹° zëk#:ÐÖÙ22”bG:œ8á,(YÇ6² 1 I x¡v-=™’hÑ‘²M.ï#ŒbÑ|Är¤€XÀ Êû²O(&û ]$7vVÙ‘üPNð±M+¬¼‡Œ” »%¬’áºRЦ3áݳ/12,c? Cþâ4_z$±4;Õ´ú'ÈíJÈâQ¡£û‹>\0Ɇ˜¦å Œ€åJ²¤¦èš¯"ÍS£2+NÕµcÁÞ¬ZsêF%¡ 3ò@¡çÛM3oûNVncˆb2E>:Çô°¦k È(Y5Fªú—·Ï6áXë:ÄùqÍ+1Ó%Bô¶$ñÝ×EªìF&јw@ùž1O3Ç1`T#r!@É%ì’áºUÓ%4B|9•åÄdŠ`ø|ba^rä“l}Íž¨òTAËQl×ÉûSâä64FäÄÐŒ—VrT‚{‚( ù&èÒ¢K‘«hÙáÄÇ‘çÆ‘=I‹¬nÁ˜ É‚Iš'ÎE½•9#jíÛy^\?}g\¤Tmûy5Àêãç/²†à]ð:˜¡”ˆþʸ1C)ÀÂïéñ÷ÕÂ#)p°®½#ûêxàL¦DøXQ!OÀñZ8Á §7"°âaÉqñâµtVÞT/0rÖEhJ”¢<ê$š+uÐ|4Š°È õÏ¡©Ã¤Ç.Ú:j>š:ìû9ýœ‰Me§ÿ~Úóó~G~Ž~¸=tu[ì5-–hÛ°’ Ô¶ZEmüzÝ£4™˜y>u-"AÁÿ-2¢ «hRjó©¤Hsï£b>ú~B’K~kM¡¦ 4LR ?!@ÿ–­Ó€±¾Ž£l$‹lMŠEX÷ªÞÂZ$ ×Võd«`%££t1#“y½L‹H†4§I £Þ¢nÈú.Bß¶­¶)"9P+£¾Å" ”>£¢lRäûêÚ€ÉÇ®Z'bAëKB‘%/56…&G"-¢yáum¥>/RßeKÑ¥Û½hR,I u„è5`XZ»b’#’øöÔÉ“D@ò5¤ìbUØ—°?MfÙ¤‹±ç½Ub‘}TìÃTËnÍ$¨«ùþÚØGSá_ûsþšëÃùyÿzQøŽ½göN„ h@VoÁýõF£Ø’=À¬ “tÐîÇBè-þzS Ù È{ÿžªV4ƒ«ü_ç¥1lêÁïï©T4ËwöиÝß_®†@Ï@Q÷­ bßÕþZS|¿ËB:Drý“«LÉöoóÒ˜-Ëôýô¦º?‹üô¦—þ?òÒ˜<~ùŽ6ýÔd°4çÀ’}úxçÆòÑí„Ö4j‡wÆÅIK@ ˆÉÜCûÖµ¯Ù‰&f|?Š·Qïë* VETj6M@ :òzöòªƒä܃äPuÓãááâb.>;)Ð^„”UrgžÞwL§ôà€PÆB¤ $ö Ñ6 ãËQÛŠTGÃùÎLɘ¤q(²ÊnÏ@WdôI¡zœQjvÇ,“#ÓcçíÛ”>¼ÉC!© ‚¸×«Vy•— Œ ž>ÚŸ²ü®Žví¾âíSðlDtEF•Ëј€Qä@V$X .Ï´Q Ü¬éñÄ¡Ëþš¿|În>ý…6ê0Udi)=KbPm@úA!¨Ù¾'¡§Ä+·îf¬ç+ @a—WAPÀšëÁð ñçJT[•‹ÃÜ¢ÍÄÈŸ Ã/Y¥âJ«4 PC]O]Ѻ,PnL1óåÎÃYñ6øýVG#è Hä), `{7Ttø¤_‘_ã>¾,ámŠòKŽò´o0P¡H’Â@Žìh”lÍ»6ã ¿"ó!QÆXá"ÿ#¥E•9çß1q÷5Âl5ôÌë©ÏêæTâj9($‘E€­*$ÛgG†/¥ªêƚȻ£™·ïø™{d»œñcñŠ+GO¨àQ%XOUV{¿£H[/ƒºœåÉÆLF;¨hÎA(ACò`EÔ‹÷ÓâO™C¼H›4»¡ÙÃ4rH=8çBAnDV¦€øë¾®‹l~íš6Ü›‹Ð).fÈôü ZIïÉ<ý¢I‡’¹ïøÛd€¾(#æ.üYC G‘X‘b€ò}˜¢[gL¦:¶}ëOˆYYÍÇß1gݱURF‘bpöÄ¡ ’ } ÔlßÐÓâTÙ·6|<,I³&ŽÒÙÏÙÉýúҢų[üMBIÈ‚XÓÒŽ^JÌä9+ê$:|E²«¿aäàŒ„ÄˆÉó 5F ©bÜëðñ wc¯}LŠM2ɺ´»Bn˜\l†&y–Y½3^Š¤Ù°EšvEê(¤iɳD™ñ¦V$ncOþõÈ^6¬ÀòM/v;'­V‘”Ùc™ÝFÜØÊ?pš|ùð¤ÃhÄH¬¬Î pK ] SVn`iL«³>.NVDòâäa*N!õcUÈ,¦ÉOTß½EÕÑÑ++t%·oO#%â”Ç)•qEE—ãÕrìÕ~`êâ†LÝ·ªåâ&I’3ÊèÁ75è‘ÓP¿õѱí¨ãûÑ—{Ü"Ú("z¬cii¸€«B‡D–%€»'ÈÓØRl‡ÝöOE$Lâ}U5äXëû뛜S¦mFObF䩞0ørªÆO­õÛ-† ]¨÷6*]kWf\šuF„ÉŠM×ødHä,lÍ/*[P+º >×fêâ¾Ë˜¸fÜ$ÉŸLAéå $€¤•tM÷B¾úb¾É›& ò$Yã“ Œøì£ÓŠ`Á¬)ˆWØ"Àï»Å}“"ñåFûL[™WXÔ¤*l–`)AëÜ}äÐLWÙ¬Æàṗ0ò_Z%“+««êüùÓÙŒ›®ëÙ9FŒ²"£JÆZ 1 qy‰PgÙìgú:>Dúãï¦+ì9?£»îÒE¸> #*>’e¸$‹®èuÕ›£Ø5çåu[;qü½ÓsÜÙš&v2%ƒç¢hWþëY~šz4–é­ƒo9±G#M+ŒBKš®È羺ó«RmS Å'hºî™_/뜒Ě&èhü5—žUeXãtQ·mÀã.DNH1ònRÕ ¼wïöñ­$ò¦Ãk¡Ã71Ô0ÈDÑþúÔ—³XÅú&ó—@ˆÌÔ\-óîÈÇÛ°.üm)¸Ý˜oJ¨wÎgxù§ýõË)ý1‡Ñœîû‚—LI,„“—ߣУֺ5-SìÇÇv‰Mç=£bg$«($%M<×çß^?]Z’}’ãôKo¢:iˆpåH2PI&¼P¿T²ì\~ˆxÍFð»1u,U¤¯Xº=Ù­T¤¤í‘¸â©òwÅÆD™Yš3;±’ˆ MP£dIPNº¨Éû9¹E3 yff¯×Yù}š<æå»ng·ë¥GìËtyÇ~ËÈ™_wJ‹B{S⿱ë^>iN«=œQ„£tf“|Ýc=æ?U}ýÿû:CÉ8鉸B]w½Ô8Œæ¿~÷ã£ÿ¦°¥ÈàåfšãSQ¢WzÝ™Šœ×ø¼ùÿÓG)¨¦ØQƒ“MM÷usÄeµ•±õ÷ZÜ”â¯'ÝŒ¡'X–ÖðÀ›kø¼ê6â×ÉìªüIÖêêIÌaÝmbrœ_e‚„—E×sÞ‹Œ™(¸¹t,ÿž· åì“Â>ŽÞÊ2ò3V7ÉvP>®õ׋&öÎ\¸®‘·/uƒrL)ó ¨eú¹• akµ”H¢ÀW¹õcG™I1¸ßÇ6ä›{Bd2ŸÔ¶ú Ô¤­FÍñ= )™2Oñy¸9QÉ韒õãã'"P‹ŠZŠ’,ôýI+Tj.Ÿ(ÎÚd|·Z–Wf$¯jßWßBÇ‹±ã^xÅ$Žò“m•_‡§v¥Èâ¼A³Ôlx«èßçí­5Nˆ¶¬ƒðæà¤Æ2ÑúX ¿¶¹ÎJ2£q„¤­O†·„>o£ÄóCÜß_ç­F¦I'³àOëˆK}EªÉêõ2ZÉÈØÿ fÁ\•gkác}ŸÞúºQ°“Ê‚O†rÇX'ÃZИìß¿ÛÆ´ëýhÏvÿVS#b—E2dòFV%ÊQP' Mô:ïöÔ«¯¡µþ ¶ØÑÎbyˆˆ=úvÆÈUù³U~ÚÖ&J¬•ÚO̾<“ñ êªÊ·d‚A«(Mõùé†è¹V̲ÄÑHÑH%b~àÖ°Tþ† hÎÌ Å‡£ z¿ŸíãVµd·bêú¯:€Õ&ÔéÀG0nSzD• ÅŽÍ‹_^ZÛƒ3‘¶…xÊÍü¹›“%²k¿j#¾ìxÔ͉m­’sHÁDaÅ%±³@Uù³Uz¸l™h”Ú‰Éx$š‚¸PÊ·d‚GV(P$›ëóÓ ÐȈ6§”´o/äÊ«ÆÁ*Ù±BÈÏgQA°ä‘—Y4¦€C0 ÁA n‡ækCI1™P&<Ü^jT0n5`€|×Uªe‹Ñ¯áØŒ›®,ÁÔX±äkÞªÿZþר£l’t}tø¹vÓ‰¸ÃŠÍë Sò¤ õìAïì5ѧ™‹¸?ÒLÈ@]™”l’?z©·Ñ–’{úVy“Ô‡jb¼ wÑè‘U^z>údñ*ŠÈ£¥)qby[j` )ëÏ~ÕïWßë©“JËŠn¨»¥,”CµñúE“^ÿ§µêNrŽìF*Z¡/þ˜)6Ó%·ZÇŸökþ†ô­’P³¸ ]WàPüûÕ‡#“$¸ñôUÿÒÌÉ;c©Ù—ñq;Ñþú²åÅÐ’²éþ•2eâjaÈ9uT<øðlùëQ›’³.*/d/úWÈu »Q ÆXuÝou3ÑpVC¥|ˆÓÔ[z /`Ð=ô>ú>UIÙW¾Š§ú\¢õFÖk‘P(Ý€,øñÞ–5vEÇn¨™?ÒÎRF²6ÒÿP'¡íuß_–’*¶Ý"ö³”À/ð—aÄBêÅ×ë¬Ë•EÑcÆÚ±oþ˜ŒLKíO~ÿN§•¾Šø—²¿ûjŒŽ¶Çÿ“WË!ã‰?ûi¼m²þ<²8•é¦"×ü6Où4òÈxâZ?ôÈ%q{[’O@.žjìx¯¡Çý+e“gd—¯ü:Ï›ö_èúUÊ*IØä"»™9=%7Ñö×V¨Âöyÿ‰¿í‰ÿß¶¼üߑۃñf p‘Ö!¬š WÙA¨R²3€ÕJÁFV-dþú€‡P;cÖº@« zßSeô[Óà/¾´JÈI»ïEÙZ¢$³AMw£ì‹d„$U…¶@$I@xÐ5E§-]hBbO/:Ú袲Xn#Y}šŽÑ?Y‹£ßå­R3ì…ŽúcZËì¤Qƒ~š…KD·izÔˆN?í¨»#èŸñÿ}lz!Ócí¬>ÊW‰u±äyÑvWÙ4UÑö@ôÁ=BµDYVóäêí1Z²däË`Ñ>5["Ex(·cD¬­Qb¤tÀ~ºPN,²8 gKÕkbÂ3½÷ùê’„v_}V¨Ýuª– õ}@øÔ}–µd¬E»'P„U§ÛÆ…OE¢C|޵jˆì¸â ­U~̺¢u—ÙWEOãþúØ_‰ÔøWþÜÿ¦ºp~GÅ—üß^ÓÇ/Dê4  ~új>‹ÄkÈ #@ @^Í UØ+Áá­Z¨`Þ4jÁ6.µš` ª­`CJ€ô,õ¡6î=ô ht ëì4Ð|B‡Øjì|B‡Øi±ñ a¦ÇÄ(}†›•¾ì͸:MªŒ” Õ‚ì 7ì|Þ³8ªÙ¨Iú<öáðþh˜¬’œ@çÂëÏc¾¿þZà›‡£³©û:ØøÌfPL "²`E{>Æõ¸·idi¶âW‘¯qz¾í’G5¶Á_-•?©cú„ŽŠŠòI&ÍW°xÔrØIÕ•!H¥šL€ó3FTCâÖ:-ßd“رЭ¡Ò+„ÞÇí3· âyO¨Ò3@tO^ ¯Ìþú7ûÉz-#í¹àI™…$)‘¯½XÔSK¢¸KèÏ“‹…•?(2’50úNœ/èØ^ÀRA"èÐ=WwW*#ã‘©²Šf ›?ù^øÅwÊüþU©œ(a+3áãb¦yx²ù/ªÒªï™7صžìöuä‹6Š—D—&<ì…x²Ö‹Sà-XcÕúîý¼jy ¸ÛFœ\6‚9fÄÊkÈ`ÀÌYÀD³à÷cÈÕÍ2bÑIv¼¦ÂlDÏ ÎbòÔD+å@WÝžþçVÙ+Ѧ-ª}Â4Ç‘ñTeæØœ¸‚+é©zûØ4,WZÔ É(±bÇâEb8£€› üµBèÇ'Ãèû“fŒŠŽI#’TàKµ@5БVHóT½Q=èt‹6ódO’dŽB¢xéP£ØìÙï¿Ëi›1ɉ’Ò˹ç«4˜Æ!ˆÇÅO“Ùk7UÝ·z™¡ƒµíÅ1&ô³TÈñã‘! Pxš$’l’I=“­&¤F¨Ñ“´«íjÃF†H3¡jZ¯ŽëÞüýôéÈ®F~F2ãÌ{te”¾!ekè¥ú¡æÉòñ«ì=¡9ÿ ¤¹+Ç5€ùU‚S*–fAäƒ` IÏUÝ›²%gLÄ”>Ú…[ìåž³1³^~QúÏ*ÇÀ† ÀƒmfÀ€6löMè©X;DøY™ùÍ ÉgàU˜Ñ…w]ö|Þ³œQq‘X>‹'n—ó93„Ttˆ¨P†ÔW"{$’l~GGZM3-I—áßS#䩘d‰ËzDG`q Ä5ñ «î»» ë[ v‡=Á8¤Œó$°YœžV@a@5,‹«ºÔf¥Ñ£sÃÏÊÊÇ1æB s%±Ën%O\… '«'Çu²% ŸnÊ“q‹:,¨•#B¾›@I Oa…¤W]{ÞšýÈllXL³þÏÞõŠ #˜ß¦<‘Ç‹>¼,ŒñF¨Š4@ýöÖ3‰¬XͳjtÄ•£Î_RH‚E*EB0 ñ4I$Ù$’{'[»#t_7h9¸pE&Hi eQ’ÕØ *èÙ4þâÁ«²;«*v|ƒŠ›v6z« ²Hð–äáÓA…ÞÖz5ùè»#Tƒ;b‡p˜Ë“3¬×9"‘Ô0V ACP÷®ÉÝ’4NƪËåm’ædFÓd †9VEa!¬bÄU÷Ðuzbű)…“·îçÏ’“ ˜pʾÊ*yñÙ²{7¨é#JåÐÜFÛñÚV“ ´’ÌdrEW@_’€?:¿}c8— –M³<|¶Di"±DŠ5㣭)'Ñeì^gø2ã¤XPŧ0•BÅô–ƒÈ,~ãÀ»­˜%v©ñña‡<«$Üæsú¶IaWôÙ$غñ¨j!›°ÈùµÊú°z3+!bc²O`) I€z®ïQ#쉶Û¤™ß3I,¨òÇé’Ä¥Pè H«$yª7°¶†&bîožs")$a ^‰°">®^mõØCίòŽ:op|8Óãån°Ë‘ ,Òr›ØŸ¨‚èÅk”¹£³¤x¥%£š~>|Y'›‹É1[) T*øò$“à›î€ð¹?êcý;ö`_Œw”œr©êÊd’Å[²·®Rþ¡É#ýI.8Ù¸EÍž/''#'1³^@I= ð;ÿ×^N3]ØF\lÓ·ú­‘:ó`m½>Áö&Í>Ô5ÑòF^Ž~9FíL7H=™Iä2¡ƒvl÷dwãZ|ŠîŒ¨:¢FÿåhJѪêøs著ÐÃì\˜l˜ñD'a®AÔÄx'¿÷W^>Ú¾EmµØñ¶’³DrzŠ•õÙß\Û³iP¦Ã¹Ìþ âÌ ©’ÆÅ Aèõ]ß|´q¤Ù¶SQ±ü޲ú/ò<ŽS™²åjÿ­|ù~g¹tQû{O¿zÔeŒ¬If¨Û€¬ð» €r¼Aãø@º$ßdžüÞ»ùš8ààŸØù!‘Õ˜z‰G‘^‰¢ æÏ¾ª’MëDi´…¾´h‹)X–R–“~OWöóZ¹«z3ƒ¥±“cÏ’V*Ž]P»»èß_—šÔŒ•éqmlô›~Ô¸³&S5ñ„ª „’ ÷ºQùQûëÓŒhá7nÉÛÙ%ÏÈÉ$—`¨TïÙc˜ÚªVèŽ+²ØXY˜ùSäM—¬ÍÈ¢ÀT©(ì±±C¾¼÷×iöek³KUõ¨"eÞvõÜ1ѽ@­ ¢D,¤© D Õk±`®‚VϘŽ2Þå²—jQ$’kÚÉ'ò×ϔԤíøBJ)&)á Å®¨ŠöÔ‡+Œi‰qÛ°1)pâüþýV‹‘㉧Ɯ¬¬¸aTZïßóÔrŽ8ÖÆ-I¶Ê¤\(ÝСÿß¾µÉË’$8ñöIFôý8Ûê>ãQM9äÖ¾‹…CÍx;qd‘AG€:Õk)Y”ñTj›ž!*€AíoÁ{¶ºE¨öŒI9†0²šdÌa z±ˆÁX¯$Ø£ßW~5ß‚™ÃšìÙ>Är|åÉ%–9%Œ¡$”ª®€°¤Š²Gš ;Ë£Šìœ?‡×5²~bãõÞeåͬk6,y³g³-Ìÿ.Õ ü´É Aêñ‚d‹“z¦E¦ ýÅÑ«5sc3kÒ(“÷д€U‚A"ûïBŽŸ'Ycc0ei/غ֛M™JKÙ³áù¸ïXë J«4…Bžø‹~µ@~zÎU"chú÷ð«o/·G’C*–w"¹nDÐð '¯±­nM¹Q¨Ù_ýŸîíôüúP^=ƒãí¨¡5ß÷#区_¡Qÿ¢üÜxÄi¸/~G¹$“£ã›rE;+?ú,ÎÊÑ“=h€:z ÿÔ ÜB劕ÑsþŒ÷¨õ»ûxëÆ§'æ^>Xñö*ôE‘’ë#çTõZçàäû7ç‹ô8£ ÁˆÜØ«¯Ü8göf\ÐhZ¢¬È¥iãÏ^N øwùj¾6Û$y’J‰oô_œáTçŠVåàù?Q}êÊp6IòÆNɃýn'¦¹à¨ØÓÅ5L¾X¹]ÿÙ¦+9«^j¿-gþáH«ebŸý嚬ð(Uã²oGÁ7[抲íþ‹óÜ9êV€"WÛΆNvÂæJ4ˆýgÆ[Žâ)‰'¯ru—Á&îÍ.h¥I ŸýäÌO«¸?m×L>h>Пýˆ+øƒ~¼µ¯þÌyxþ€ÿ¡&ÿˆ1¿ÏO%vkÉÇôOþÄGÿoÜè¸y~Èùxþ‹âÿ¡™pæG¸CÅGÁ6»*æ‚zFïýœnU_ÄÏå¬/édý•ÿSè©ÿFÛ°CÏJ>zïOøWöWýLZè³ýîDòdbîÒþ ÝþÚÓàRf|Ñ“èé|-ð|¿ œ©æÊõ¨þG]!Æâöb|ŠKGCá®à–¿¬ë\FyWGSõÖßF#ÑÀø›þÖ?Oüµçæü‘߇£®/³ªè5 ÕJÈÝ &Íë]"•2sjùÖi‚8Π&1äÖ´˜øÆ²WÙf²¤ëv‘޽ÿ¾¢«èF‡ÿÃQöjWúz©åÙ@@z®ïY7è´Äµ#1蘮º#Æ¢t²e¸èû)bi@ßKe]‘Åœžÿ}@û—{@ü„4F«ìÁ0.ΔÁ)ø†¶GÑ Öe!>F‹³Rì  ñöÑöd€Ýj»$ åÛw¡ u*¾tc¶jüµ¥¤j]“)êÇw¨û2´B/V}ôô6%ˆ>4]š—e¥p¢Éý4}™+g7Uª©È[²Þ¨r‚@ êÖŒ7±L1#Y:ªAý††Cêåùj·dJ‰ÑvEOãþúØ_‰ÔøWþÜÿ¦ºp~GÅ—üß^ÓÇ/Dê4  ~új>‹Ììhu¬°øª[±'g1¹î;«ãÍ1DEéA£®[œÙÕÔb‰ÉÊÉÂ``È ÿS›¡£“‹Å“Û(w¬ÜŽãF¼ùÄŽºÔ\“—EñÅ»¾dˆ*Uœ‚HèVµä“Z3ãŠa™•“‘Jãòƒ©)I=„é7IÓ(¯‘ÐPVfMÛ&X$ù– Á¿Ý¯5•6Í8"Fï›"–Ç Æ*;?¦žGè˜GØ6õŸKᨿŠÇï¦môkÆ—gG'æq’zü^o]¢ÛG(¡¼è]¢kÑ^m÷Öˆ[>?é¬ü€r?ÐtߨUÙ½]‚A±¬ÓÓ+?p† <¬ñ£YAó~Õ×gÃ^I6üF‘¤fÄË…$UkÐ"V ø¸%èg&FN,8DØÓV@HÿÿÏQqÙ#³›¹sÆÈo“‰fôÊYm‹ä,¨Û üµ5[’VuÿƒF§£×Øë+Íýœ½¹g;¢úHYya`y¹4¤›5õ Ö¼q£>G}ÄÚåÉÊŸ×yÑP+LQ~‰lØ(ТAû8/¢©×²#mÊ,|ˆTLLRÆ”@ȨÄÀ( ŠäA£Ø ƒZÖ)òoØÌc¸eâÌ©&I0NWšD¡ÜP ‡â€.¬yÓY:/›£l«¸Ã>@•bkñ!%Åþ%`|Aƒv5¨Æ™‰KGfd qq$a¹FmM‹°}ÇÛUö"rr7|á¼4P¹1Å“RÄx„`´Ä‘|‹7@)M»i™:ÒzWˆ=¿=G³k£‘µÃ<œ±7!0Ìh:¡KðJúu`, ùèâ†ÁüOø#ÇŠîó&K!xÕЬ¤ ô¤¿ÏE¢?‘LâH°¢DÈÉW9f ZHÐÊ+0PâI!@4E7ß±vÙ6„ɼo9¸˜ÂOO)Òeš©õ%‚×b‚ùcBèu^ö©†ôiÎÎÎ|fWWwE,xø$Yòß}kÇÏ­ž¾Ú£5( (¡®j0|Ÿª¿ô³yKÇûºÿPc}ëI3¤é’ wùoŠ1’m˜å“N“=»$cqÉPK @~Çß[‡LÄùT’£§íºˆg „ŽŠO‰PH&¬5ž¨Õ•É×¥=f­›°s²—p0n2ä,’ŒpËŒ€Ä¨G xÑî¼zÖŒâ/Ÿ6NF${£MDä4KqËÝ@B‰4,Ùè%±K›¸|”óA—$Ñ ÑbÉ‚ÅIPäÀY Õ=,Áø‹¼ò¨ÃL¹ÚEÎ1sHTJÉİ!HÁ T@$ #VØÄél¹Såí‘O’A‚ª6 Et¨Øhû Û9ûöñ™‰™$xr›ƒf1Ry1rÄ‚@@FÛÜxS#{8ßn͹åc“ùQýN¾4ót{ø¡ŒNH,\Û}¨Wëÿ¦±%/÷£qmɦËâLð¹ !ª«¡Ñÿ¦¶ÜRN«ÿ£+&Ú¿ý›NAÆs…Á‘V7*,Ù×€h“Gÿ.õÙF-«8¹:tL™zKfBÆ^-ay‰¡íâ»û¾Š*Ûüÿì9:IÌÌUÄã´åOrU‚:"¼}uú‹­#ÇrÚЗ%G]šc¨uƺ#Á×4¨é¦ŒÒdÎ2Ê#XY]@TIóvzöèë®+žo3]ù×tu2£äEꪳ9–@ê,‘ö¯#Ç^{}tJ.™É¹+/²Hd‡×sÄ)W(îú¢>>Þÿ–«ŠM:mÚ²‚YÚ%ßýéW` ²Š$X€|wUFýõZ…)QYwLEu”,´Ä3ÒOt}ɯÏòÑAgú3›Ãöu·Ã"lˆeqB²GéÇÉe$›Ñê€ìW}ëªéî™»1øc;áÖ&ê'D®G‘sf¯-Þ¼¶{*‘0T, ­qÇ)$ÌÊXÅ´F,“TGéÿØ×ND “F`Ü›LèK”òÅÇÝèñÇVjúö÷Ö¸ÒvÙ‰¶©"gŽ2ËK© p³¨Šó`ø¡çÛ[IeMmãiš±q²æ–bÈhäy*©å`øPÇû kŠ)Û£<­¤uÆã”7yDÍ2ãG2B¼ eR9KY, êýõé«G Ý…‘‘‰¸:nO2z¯/£ÈEé‘E~ x÷õWƒï¥$ÇÉ˼Ë7!FdMŠ9 ‰ –ë» ) øäækßDNŽ ûk/LÒz9ßçɃ€‚9Jz²ñfü,@Õ’ïîPkAtx¸Ùä òžìßæuóyr:>‡›‚²%••ØPkïÙ»ý¿Ï]8øã(ïÙÏ’rR×¢AêˆÃì{žÿÃ÷Ô\oÆäÑ_'üÄ“*'þoÝ’AnúÖ¥¨Ø‘œœÿ[/šv¥–e³ô×ÿÙÔ”#Ý{ûìBRºý`…ãÇy‘¹’ê±½É .óÑñ–º.8ä­Q‰rJ3n3†Ž.HÄ0z°|÷]x#Ƥ•2§e3¤‘ ,2õ®Á UûyÔ;LJÒTz„d"Áë¿:ëÀrçüŠfîùãyh¡˜˜áËŽ)a¼B0ZbH¾E› †ÇßÓüO8`ïYÓnªž¡x"hd^*6^E@¡dñBM’>¡Uà1UÞ·ºy¥”É»sJŒÊ +­rU² °I6§½e¤Õ‹¦|êLx[-ŒJ³8uÑ`, ?q@×çZó¨&ÑÝÉÓ·ªÅ|¬È-ñî®È$_u`é(E˯EŒÚCcõH‘ÉbÇ`õÃ’1Œéàå(ì¨ 4cÔ•+Ⱥ¯ÎÿË]8øâã¿g>IÉ:G2ei@^fÉûê:Q´Ey²}8¦NÀì‹°M.ÅkOŽ ?°¹%À $râ j; Ž¿¿GIqÁºýÐ$é¿ÑŸ+*xeHQÌíWî _çÐ:Òã‹h–I=™eeÈ%Ô@’H[åÄ›óB‰ûÐÖ—nчÉ6©‰L4šY}>Q+¡ÉU…“×døó=ëxÅ3-·F,˜†>C !¨?¡­sj™¥´]VÁw":‚åîÁ¾€öñùêë{&VzÖJt'Û±D‰^d` ²¦è›èDõÕÖº8«0›¢ 4\!ˆpð«Ä¢ÂÙ7îüÁ­1YÝÀÅ9£Uu¢Ä-òâMÝТ|Þ˜«è•ÂÃY¥“Ó¸•ÐŽdý*Âï®Éðæ{ӨɆ>ÛŽ£”Z™Ú0äEPD’lßTŠ+Ø·ÙÏ×3°h8†@Jذ ?# ™K0ùxø«¢¶Mò|ùÕ—dFφâºA'ÔLd²…«»ßò'ûÖ‰&ÌIÒ>‰üCtšLdŽR™-Šj¿\ˆÜk±A|“ï@Öº¨¬ìӇfüM¸äÿ;Êñ#ÈôUE0 –,O`(Uaý´­³Š‘ñd[›,yâ‡!X¯ŒäIȳuئÇÞäèS²q~#ËmÅ^IYài¥‰“Š…Œ‹*É¥³d¨Ux&D¬VÏñ.vFj>TÅã–wÄW%Z@äd›½fSq6¢™è1òD~¡R/ƶ›fHË¿æË…)Ú34ü F ±úX€¡¬Y `Žÿ¸¶Å2¸–sm1åeÄefŽPµ\•Š’?R þúÌ­4Îvññ6å[ NKé@²˜‚‚YäX‘`FÛÉöÊvV¨»oû¡ÜØ!‘"L”ƾ™A š°Öz¢•çE/ÐqÙ|C¹Ç¸*L³$²!…¡P *A I wdƒdŠ­‚ŠÇø£tÇŠG›Ô‘ÎKÆx„u«€$v:$‘C¾õnÙ1T_âŒÜ8§l¶3 ÐK/.ÀºJ’ x Ÿ^ËŠ5lÛæF^9$ºI"»Æc^‚‚~ΞSf§7Œ¥}Xìbh’ZÝ#S)!1­Õ×笺ôi;AÉóí¦¨vÏ7ñ÷¸bnF%qº×——‘ÆT™êâãR± ¼î’c™×$rWYòN»5„/¢0> ÜåÍŠ)'µfï­HsMJ™gÅ lõhy(cä{v¯E&$BöGƒÿMa-˜>¯BR:úÏýuˇÙ×™íO:ÛèçU³ÏüMÿlþßùk‡7hôðôsõÁöt]¡C@ßHÇl£ÈW¬H£(»uS£Xûcßµê™(â;å¡÷D}ô4Ö‰.¥8'C%GÓwãUvWÙ ‚Ö>Ú²è.ÉWQÙûk$h©èòöÕöj´YÜH(j(ªó«´j¯d¨°zÑöEÙ<•Ô'¸Ñöe{Ã}B ·cCIh=KN>ú¯³ Œ_ßEÙd‹Œûž–ÈUÜ2uí¨û>•ïUvV¨ ?ÿ Y‚  ûdÖ  m¡)’ò(ŒWØJÈFV§Úµ ÖÈãMlÝÕæ¼BƒçB4lß^Ú8rYдËUGï­%d!h›'ßQöZÕ’d_a­–ì×3X’quWfZ/†5‘E´UdwEOãþúÑWâu>ÿ·?鮜‘ÇŸñG¥ÿ÷×´ñËÑ:„ h@DŸ€þš¢Ç³;E evtJÊÉ"¨,|(³©´¬ª™ÄÎß~› ¼»ˆIW¦*k\ÛŒ½#’.÷𬨠îcš÷Ë—gQøÙR—‹â„á*ñî È{ß¾ª|vF¹講ßÂR- È «ãQ®>¬«?¢ÍñÂÆ½MÈ1_üê·ÇöegôR-ãáH¤õFæ ÆÛ¡z™qšù¯@›ÇÂHï$›’–cäãaæßA&ñð›È î\Gø€j½?å¿cþbô4|Eðš+*g(ä>úªPDjll?|3‹Ãâ€/ç­)Ä˃eÇÆŸ]üújy#ö\%éúëðïÿOßO$>Æ<„®{g¦®qûòúíðçÿOßLãö1ŸÐ®Ÿ Ÿ;‚þ]éäŠöL$Ù_õÏáÃßñ•êç²á/£kE “.CIõ¢²+Yè ëó*?mS-Љ6-¢dX¤ QbX‚‰X«|AÑ«4Mžô#C¥ÅÅ—)2ÚF  Ë!/Á£ØüÖªª!ÁÔÿïE~š…jÌ8;Û‡…ò!”œq³»R(€ Ó‡Ÿ*äN¼™9€6@``ÏÜê®Ä‹Éµà¶`Îx 0kæBòƒ‰Ð$XßCW¶EÙ\}Ÿ wÉÆY¤vw0åK'‰5Ûþš‹²?øª1wÉ ª‹Uìùì>ÃÀö׃šRr=ü1Š…œò|ºüµ‡É&ìé„R×@Çü^@ËnOeIG£³ð×˸¶f)ô…²/ö×n%(³3‰é!–)Ì#”ˆˆ&”DPèõ÷×¢-Ñ—`¸8g5r"_j.x–JÝ(wWÐû -äLM£iÆLœ„·©ÙIY‚ßf$í_mu1ìV6×·ác¶ †AˆQä9^'È’6{{?}#DV§˜#ù§µÀµ¯ö#U»%VÊÚã„l ±`ë+³vyvlÙ¾ìêS²äX¸ÑbB°@Qn…’{6I'²I6Iì’IП£ñ¦^Š—1Xb,` <€n¬ýõß—£¿Ogš¯3#cÑ7¯Rƽvzê9d‘z7âìÿÓZÎN8ú Êý!W…ª¢N’mß².8%^;¥GPH5@¹öñ]õýµ¥É&í™|j©N$"?L!«åË‘»ûÝÝ×^|u®™Jìç„j‰Cér¿I~ÇÏ~¾¦R»¢Ä ¥ÒþÍ‹ùxL¾«!ä ŽÍ]U‘àš÷Ö²uFqÝÑE­"/×/â6{®‡ùk.MÒú*ŠNɘñ lµeÉ }&ÇöÓ&ÉŠ@¸ðªÀagê<Í“úÝû}õr}‘EQY*FeR×aÈ$Ÿ¹»?¾¦n츪¡‰2"ã„›-tz¯ÛE)]Œb¢ÑÔË Šdf± ´20RA±j:=ýǰף,QÁ,™´ÁvçpÝûë`n æyRÀ v~úñžâO;ÕQÑ6˜«DÐ!St|’I½WÉ&Óú2¡¯±øqM%Gž ‚$|tGc[„žMý’QŽ5ôv‡Â³Ïr$dP؈ÎT‘.'%?Uߟ®T¨Š6íŸnßDCH]@€5t « _‚u—Ë£KŽ]“6/Äq>¡!H=?r@ìþgWËañOЬ±»A*dd’ ß P*üôw}õÞªš}Á®ËâúåäŠq¢£}ªª¿*ÑΙT[.˜[úM$‚"X›n@Hì"ßmEȯ²¾6)6­Ã%Z`–Aú=Þ³œFïé4 Ž¢6üD¢ßù‹÷ëí«äIR7{+.Ù»4i[Ž+)ÐêÍŸÏΞXµL¾6¡eå»ñy~¨ÚÅ ýɳã³Þ·“f0¢nKÊ“(.ï +»ï糧±$æäú¦^bøð#€ªûUU~U¦NÅ*¢S7)di„¶îÀ·%<"…{}´ÉØÅ0‹/&˧ê³õ Õ  ãDÚ4Òbµ Rl2`õbô[3%Ý%fPÈAR¨Нj‡\Ù1UF½Ši¤ß1¤7,ÇÔ ÕßgÇçßê5—'•‘%‰õeÚ°gˇ à"5€( 즈¢ ¸'¿}vNùm,†fÁ¶æL³IZ¤€@6€@=€lk¥oG<•~Úþdez° ‘ÌÕVEÑ4jȽL h¤ûÈÙXðÔ†è%EÕ  Mv@ÿs¤£¡²›oø8¼™¢6Àˆôš’ïÀ¡¬¨·Ù\‘ÑÇŠŠŸMêïØÐ—µ<ÛÀÔ}šJÅŒ´äVºû^³h¸ÍUê‡ï¥¢ÒË0$¡ô=pò]C |kJ-˜ÌG"¤{jàÆe¾QÊšGå¦ Îd<޼óùiƒ.l¤ØòÂA’…øÔ¬Yo"gÇ@®­ÈŸm­‘JôWY:%A¡J`x“Þµñ3m\Yš™b'í©M™Ê¶&Wwþú¸±”~È8ùtñ?=LYT—ØEÏ/<Þ‰6I:c#ô;èkxQœÀaL?~` L_%ƒbOf‡CÇ~u0aLƒ©ÌÕU‘ïªàÒ±“‹ªL‡°:ü´K"9SAX=×ZËìèƒruÃDMuëBªôV%ôÁk@Ó²yß1ûèf˜}î4Ë MÙн!˃”Ô</[P9ù)‘ò3-‚˜1’p¥â(v}õph9ú!p粤 çßS_!OHÇ'§(®üêcº«-‘Á ãøHèèãE‹¶V:V¯ÏH‰*C4‰™?ÛZ,z:Ÿ ÿÛŸô×NÈãÏø£ÒÿûëÚxåèB€4 "OÀMGÑcÙ…ŠÖ.Ž‹²Za`Š:©Ynº9Ïð–Å#™ InÛ¡Ù×7Åf¼’ôAø?`>pùjxaô_/!àí‡Û–§‡èyy ÿS¶û’þÚxxþ‡—ÁûýɸÓÃÇô_,ÀüðøÿôK«á‡ÐòÏØ©ûñ„¿¶ž},Èl u‚?a©â€òò}“þ¨|<xCüµ|0úIý€ø;`0ì4ðÃèy'öê‡Ãß÷%Óã>Iý‡ú¡ðõßÊ/ì4ðÃèygöê‡ÃçÆý†ž}òOì?Ôï‡ÿî_ä4ðÃèÏ’`>Ø ï mO yy>ÃýPØGœ5ý†¯†CË?³…¸gî¹ÃÕÌ0ÄÌ~°UT,‚Ùò=µÍ6Û­T¬®áñ>v6HKAc +Rw樓uìGë®möŽrI{,ßdEº™ØÌHÔ,'ˆ‹±Ø¿{èßçT?+Âè߉gV;+~ÜdŒú8¬œ”…Na¨ŽA œfad8b@Q÷$¨${ýµÖµg)Ƥt×}++A"•c.#â{[«º¯:Û«£xFêÎV&ç ÝÆBÃR %€-I$7à}ì tu·:F-Ñ6z¦OadÇá“]°#ê6Ä–»î¨œ“ÄF<>,Ùr`¢âÎâB‚1EA:ñÝö¶ïVRnT†)FÙÛ¤Ÿ"pq æ¯).˜îD$ž*l~–*¬‘T53Þˆ´*}×¶lX2ðËòÜ"iˆG }xU¯me,!ŠÅ~Φ.ó$¢(‚5P£w˯7ùù×%Èþ¸*ìÁ›<Ãâô"dFÑØ¶dâQöP9“ìOæºåñ³Ž?*7§Ä),ÒcÇ޹/ÚÅ:Æn“hë‚Ú9grÉWÌC$räcÎÌ)ÖQ4 þOg».Jª2 Ý—ÂÜñ‚åÂÇ\VãI@ÅÈy5@øøû}ïG7­0¡w²Ø›”Çä±ðØÆó0f€€¼I$„²(‰4z¹ìañÑVeí8˜sa!/EH€•µ°=Õ[Èð<Lš“"Šq#?&HwëE`…F42¡$OIßMÒ‹ŸÝ嵋³²¹yPÄÓN¼€¾±m“g q—øÐ"ã ’_TlêI ±»¡ô?#]t”ê=BÙ»+~|¼¨ð£~HŒ¥”U€#¯{í¨¥MZ+ŠiÓ9±n%1rV qòòŒ¿Ã±!Ì” RªÏ0é@aÁ€'¶(æÍ×GWÙ?‰·#,èp±ó±²$D3Hñ‚ê«LÝùHZ¿ñKÑi È—oÇø†"Ù ²É©W—¿)ÄOWF€ÏßJt=™ñ—ÓÞ X^A4Ç!á–Ü¡²ªÂ€J€ êºêèì‘ìnÎrFç’Ù¸Ò$²AHY”€y8Q=WC®ø’hžÅ]>F¸èSñV<<‘@ òÀ*À²PÔhù Ýj®Èú'iˇjÆL©ÉIé@ì¦Ü!<­@6uèÍ¿zœÈ ¤Ÿ.‡# oP3±‹üLx@4£¿#V]Ï7ÄÅy3"0“ÛÉU «Ý„Ô$ÕG¸:ÙÚËŸˆƒT™rg\„è»ÆyÌnÂå…½Èèf@òÄcçz8ù1̨D‘(¦¡W@žþæõäåüÔŸßG«‹ði}›•?ÏX–V¶ïýN‘ÇzÑ·áý°îÙþ„‚ãB9~zçÉe_QßÞà‚G@©ŽE.ÿ…ÓD í¨0öoØëÕKG–]ìÛ–"‹5ÈÈš1JA²ÁAköëóÔf“û1NTo%‹Fr£â/ù¥x‹ãÿ†Ïcí˻ֿ‰—Ù³gG¹“þÏ$óÍ0Ï­‚J–bOÒ@PÚÑ>ûôséˆÛ‹¦Ó‘Ž"“!öö’Y Œ‰RP? ›$±$‘tmM³Ù‰%BíY˜c4 Ñ›2†`51ºP wà÷^uj†ŒŒY°#Y—cÖAR}8fR§° Ž™¼Y©6‹{°Ñ¯9¶ß‡#ÈÉúXôÖÉ¥äx`ãU`óÞ±9(«5¹:V¯ýì¨âUÕ_uߎ‡zÓÊã)/÷lÊqÆI?÷Dx³"€)èýÿËZ¯œmï}ÿ¡ŸàÚZ×ÿ§_ lžM•²¤dŒKP©@C1 ÿê$ vÆNV´qÊ)4ö[?cmº†LøêR6à“€yž‰¡`“`x¿:%6ßì7UèÕÛžñ+61^J Sä<qpšg\àÎ|ø¹Kºz&*”J…üL¤ yâ"O‹üƺ¥,?Á͸ç±Æ†SÀÀ‰"#’‘âÅò× FJ›;©EôfUˆ´Ë†ñ€aé¢è)ï²G¿}Èý†»6ôßúœun¾Š×(&ôU"P}•ýGªêªëÛó½:’¾ö;NºÑzÄ›„æE¡ÇHM]™|ƒ¬5,í_ÿ&“Ž;¯þSaãI4xÈœmȘv/ÈêÁ>ÚÚËÈëöG^5þžìûNTðÁ#D%‘„ìÀqŒäžÀõ=ú$èåk"ÿ¸‹mô“Á¡ýµÃ—ã¿çgš’ì®XŽ>Úò>Wò--…`¾xŸ¦·ÇNjÌÊün‰ÄˆÈYËc]<øüµÛ’9R}œ`Ômú7N hDl¢6g­Qò,uuçÞµ®5‹fyI}|œ®],ÜlZU’úõÁR<¯}ߢN\£›"Wňa—›ù¡Ã©@îÁ°@ë¾»Ñ-Ùi£ƒnß½LwÄÈšYÔ4F0gŒll‰ï½:F½—‚Lõåù2È&1¢L„"ÁÑŠòu/DþE¶gÛâÝæM½ñŒMޤJ cA¨‘ȃÑ ø¯±üŽ©hîýQù÷¨Ú¢ÖìóßÏþËHà©’Ø_UF¯òº?¨Ç#ôÁ|¶y¸ØEò>OkÏÛüµâ䋟#¯ïÿÙë„”`“ÿE'íÀ_$?­ž‡ùk¯ aÿŸÿN|ןûÿCDX’¶LRK qg lW‚oÏåþZŒ|m¾Ë&×"mÆB¹ÁVƒpãܯdù~?¾ºÊ”?ìrW)ÿÜœ%@åIˆ €‰ÙZÁ ù&«ÅþýûjNÿÍèF¿ÓeO2BÉÄȽÆ>€ Šì ÑðGç«ü•ýŸ÷ô;NBB¯bÆ)Oƒ`~¤~Á×)§gX»Dî>ŠD’Jà*‘oCñ ë߯۽kŽÝ¥ôft¶Í[ndPnXéêæ~ì{–O+iª6g³Éñ6©2åÄa'·’2«ÉW»à¨Iª$Žì{_GŒ6Ã+|CÉYVeÈgN‹ºD3°£ùaA¯r:#QÐ2azÇoÉ“‚¹ÛXdƲÊœƒ~£æt=G^Ëg¢(t/®5_–»IÓKöqЏ¿ìLظ‡*#$Çš‚œÛ|þÄšþÕ¨ÛÉ/{-F›þÅ2±°ã™¤‚fõ„ }6d U׿"_žïU6çþâ”Ȩ«æ§xRŸÔŒ²!òk±nU¦¶»tGÒ°Äô—Ÿ¤.?˜pê¾8(“öëó:‘ªÐ•ÙÉ×#°h FY\nÀ"Åþžú.ÃèÓŸT¹IêFÁ¥E°«4¾µ$ÜŒE¥OÃѬ[¬pÏÀ:Øþea¯W•êE|™âvè$Ó Ç‘Vy‡H ý,òÜâvA®Ž»/ÈæÿfõóŒÐ.` ’vø^[zÀ’Qþ"Ü"è~Fº%G3F`vøœ…*³¦lF{’HЍe^ì ¡&¨’=ÁÕ"è´HßrR«:ää$è?Þpe*¤áÖ\KÛ,€å!³õ±2`±ªSÑúIöЯ‹>Œ\~QÆÑ %ÐŒ¬½ †*H>HvF„ö>^6ß²a¦vK0–c;º÷ ,Â3@uj³©HÕ³Å*çrdP±¿Ë#a»‹> vúcø˜ð€i|Õ) eòý?õ”’ЉtAÿžT ÿ³³dUPswT¤fÑm­Ä»†Ž g—&q",dOÅK1côª >¥£÷RÒn7º02#É“nW4Êx½Ê^,OB€  âI¢{¢ÙL |<¬ ÕX°a»ÀâÔ418k1žÀb@Œ1‰cújhlëü=$s`²Ç+R²ÄøÑñŽ@ òQf$$ ½4jÙ¸üE{'JF]ú&•IwúiHŸ"$»+ß¾”™rkEš1wU¥#VÊ„äm‡ùiHËtIO°~ZR&l8E/ë¥"Úv|~zR(œ°©׸ÿËYjDçü6.ÿÆë®<=3§.š:iøFº>Œ>ŽÄßöÏíÿ–¸svGG?\gEÐkZFvÈÈýµ—^.‰Ö—F_bf^v=¾°t]™Æ²Kîu)´$/‰aûiHZ?. ±ªI¢Îd š±÷×L©ðmŽ;Ô—ëjR=õTìË‹EeÏ åb[q©™¬Y¸°QHÍé˜P““ó¥WwzÌ•,H’s$KWïKµEQ§` ÖN (½GV’F6ÆÇ›’‹Æ3×ç«“F\"Ëüÿø‹ûi“$Uó²e+uù 2eQŠDA;FI_'óÔN˜hoñà¨:Þfqcd̉b oî5\Ò2¢˜¿â-å’ÛLÑp+&|¬(­X¯:Žièª8‘“è##!<½Ç¶¤e‰e¢Ï!}Þ°û6‘$•zÉQC½Vì«¢$Šoú„‘Q@è2ˆOÒº ‰rWuªmš“qt–Ý,@^´§HÃã±e$¶fj®ÀÖÔÓ3Ž"ÿˆñè'Vu2c Ù ¸?|c¡¨¦kÆ)§Ëê²u×Zü¬©j‰Ÿ#æ( /%+,cLˆè’/Y]‰2ú¿ÄÏò!‡`ê.Í>ŽŸÂ¿öçý5߃ò8sþ(ô¿ãþúöž9z'P  h“ðÓQôXö ß¶°l…%»öÐÖ?Ok~Èé…7õ–™K`‹oéÿ=\¿`‹yÒ@žþãöÓ E7õ–™+}tȺ‹Lˆ Èötl7õ–™³÷]hßÜ~ÚÎ@‹oéÿ=2ý€ ŸñV™,Dér`ÀØ ¤¨;+2‚=”€Oö,?}b‘Ðc`ÿÝ©¦¦(fPbBÒ´!‘T1Zì îAý´Å Ëÿ_øb¿O`‰’ÛÔÂÀ`A"Á£ö"ˆýui ­\ ]»ˆãQ),O°É$ö}É'V­‹EÆß.»ðtQ+‘Iv¸¤”Hê x:˜/¡˜¼©¶ü,„ƒ*`®ÀU! h@!A&4 ºñ¢‰ ×ȯÓJE3E&Fc`G(2/.¸ RÕ €IúR”FÚó¡—2)–HñÉæÈ¤€@Õú õw}hà†e“/à“$HÊ!`®­+j‡³b…wÕ^˜$Q_lH¿ˆ+ŸªCE¹ò÷^5Êú=U×~;ÓeÌ´ÙX0ã&{–h$˜–<O×JC2pÆ&/—ÿÝše’&F,Dx5G¿¶”†a˜98GrŠd0ÇÕª-‚@o½\a,»|8všeX‰ š Õ«îÇU}ë8¢dˆÉ› !qò«0^ý*9ÀP³×djáìd'R8ðöÒ‘m¢| ²ÎJUäà@$ ¢A  ù­) ͇´²•TU%Ùˆ;6| LPÌÊ™;\¸²e‰€Hˆs‰• 8 EPîÅ^µ2E†^Ã\¿\”2ÕDlX°$â+lU€ ð5œPÉfíÉ6jÉ Aä—² ù íbë[¦-žl\|„Â’V2¸°‰1êÍÄ_Vht~ÇJbÑiŽ<bK8NXB”m¨Yý¿?üô¦- ù3÷?¶”Å¢²@°ÆÒK*ª(%™@d’|4¦- “pFlII(ÔÊñ²HX `‚ v²ÖÅ ÌxpPK‘!ÁT*–f'ÀIòhýµpŠ>fß0LÙ©Y$z$YçdB¯ÉŸkZ A“—‰‡8‚yYKqú½*9ÀP³×di€´Käáǘ0dœ‡,ýÛ E€Z¨;›6:ìiZ‚,œ9òÛ,‹•y_Ð@$P (HH>kJ¡’' \MÅ]ðr–Qñ, ÕÐ=Q‹4-ù7"ÉïD…¡9f 8Ĺ2‚¨U,Ì}€O“@xûiLZ/ޱåã®N<¡ÑÀ(ÂèƒãJ ’wºTÇÊÉâÍG¤$($X€B‚zÐ'ǃ­EQ™;è™wL³¾A¦þi5\ HÕ@$n»®õ²ª'qÃÊË—pï BÙãv*ü`‚=ˆïF¨}Ÿ>øªxrw¹&ÃFGMì0}Çæ::ðsB^K=œ2Ž?Áý.»Ö0’jý|‘vz?±Dx¯{,|Þ»ñÁdz‡$Óª;9y¸ØJ&R,X 4“@CÜøì‘É×±¡ƒJlÅ:”½‡~„Iˆ&­)äH€Ð$XÕG±7ãï£mý¶ÝÇ+–4NÌÑ~&·EXåTH±ÕßìuÒ)щW¢¯¿íæ6–1!(¡Š´,¤©º  ÅøÕz"èn>í…>;dFÒ$bä¦M_‚ ÕV®Û(wm¦|c’%z˜ÀôX1qåBÕ’;ð>ÿc¨Ó"gŸø³9æXV ÃA"òFÑƼ_Ô¶_UœBʦ‰£í®*”m‰J)Ó%Õš&ÔÄP?mBÄ ©ÂI2ù:J2ŠM®Ê¥é„¯új¸MI&Lâãišv˜âŸ(I*õí¤ydö3+rÄÙaÉg^UMè±Qf…°/Çd{}ô3¶Àî˜i›ò=HH„Ð$š HÑ6Gu¡~G›ø»â¥YÒäH¬C·«•÷î5çç“HôpÅ]¾ïMç;öá,ãÿäí$è¡Þ÷’,çöïYSgGRMÃ>iɜȣ³ÝiR™Œ®(æG ë84é•I5hÓ XؤŽÜ×]/¡nþúé9=™œÒtjl„WH…¹þ–ºS«9Üz)È@jdØY1õ!?Yâ Qïì@ìÇG½Zh©¦IÁÊIV#—¾4Àƒ÷ìêý«JwBâöJád L|ñäO!Uæîê»ózbî‹i"É…”ò4K2“UdÑ'Ûï¦-º.IDªÌ‘‘Ùš@²@6ƒ’LN¡C@YUœ„U$“ÐÉ?mi¡“SÉL$X>E5NˆškF¿‡ÕÎó… RBÊY¨]¿_¨Í7- IWM×*,Ù'þ[ÀYP·@Y$Hy'¡ïZî•r¤Öé÷XðóÖ,ŒÆ@ ¤€  I…šÐ'Æ·óÏôsÖ$äîá7€$ˉ H$)5@ ›®ëU¹^‚ƶ? wÃÉÉ8^µÌ9<©€$Q ‘`E÷ª¬Ë¯Eð·]¿p‘ãß›*†?A¤`H"ÅŽ¼ëD_f '771.K‚¨U,ÌO€Ÿs@>ÐŽìË“““•ˆ¹{lœÕ×’8ðAï\¦åèéÙÎÉß3ñ¤Xr%UcF¸Øš(zÐ'\ÓåGJã%7œÏùl™‚’Á ÄXª"ˆßcî5¿ù„ÿ–2 ï"\£‡œ˜r¯¤Ñ Ñ‘D‚h€Mj_!ã²1÷é²a|¨ÜˆÕyx™G»¶Bìi—"%A’Ÿ3Äòú¼*©[ñÓ{¾ºìô5räÀ•Ü7LÅ' ê”2š«°hÿç¬å?£J0®Ë>NüzôGG®´ËªÚ ÷ÐjÃ@ÿA éóí¡`øN°û7›ðب$øýuŽ™¾oÈëxÕ}óÿÛ?·þZáÍÚ;ðôsI±÷×¶t]ÄX¿Þ²Q¢(œ¯v;?muIQ†Ý’`Œ)®ºÑÄ[)€r…‡èL,9Ðßá2V¯ŒyYÁåÿˆtÁ+àò|ôÁ+'øL¿Öm0CÊÈþ)èɦy,g—˜+Ù¥5õŽŽ˜ ¢Cå´ÀyX ÛL•“ü&_ë?¶®yX —úÏí¦yYh”tê`<¬?„Kìãû 0B„ËýgöÕÁ+#ø<ßñí¦¾Pþ7üC¦ž@D¿ñ˜!åd š`o˜Ó<¬·ð™¬þÚ`‡•viHÌÓ<€vyn„º`‡Ñ/üM0CÊÉþ/õŸÛLò²?„Kÿé‚VhÿŒé‚VOð™¬þÚÎ ¾R?„ÍÿüµpP;<‡ËžµpDò°þ5W?ïZ`‹ä³K}ɦž@;DÃÿyãòÓ<ü"ðÉûé‚VÂ&>dý´Á!fðŸÓ­L 䢓à¾2†o¶˜âU+¼xžõ—vl<?=?‘=O…íMúk¿ýFqçüQéÇýõìÍ>9z-û‰('ï­.UèËãh\;á©9Åõ·ÙÖW%ök è”ß#Lt–t¢æ¿M_,WcÆßD®õüé§Ð£é{ÓÈ®‡¥`7ØÕÔÌ}½†žH§Lž94hËÜaÆ…&`Hr+[rŒQ…ÙS¹£¸EŽém»ñ¬®DiÁ‹}åOÖŠƒÝûêf™T+²Wx‡&ˆþ]ûjùGŒäaœÏˆ·"7]¤x£•¹Åh×ö4}¿ZÔ„í’Jn[ÖL13àžkÐa&C•"vû“vA=ö]jÞì%¡x{VLØ™ûs`˜âž IV0Ñ©|Mùè¿ ݆´t°å8ø‘¤gËvCB׿~’Gz²¥CÎdႈOc½/A$q·¼ ÃpË”.;4SÀ¨@`¸-LÖA $ ”LÅŠÝ÷Ñá×Þü L:šÐ8Ù[.|Ûáv„´M—ñHˆPÄ‹²Ä QB€boºô¤RæÉ‘><˜‚(Ð/¡?0ÂBA'éExì÷©ÖÁËcÝqÓ6V}\þRBd$›cݱ$ÕBªˆ5t c왳C•ó!YÄKË2¥‘‚‚IVü$P«»,z±©-³î‚¸óå@Œ™²LTã’¬ ³-€÷VCúèôäl¾GÃÐb™aõ`Ádô V ”â(ò>›ìY&¼-N曤ùáÉ‚ócVÈx #øi˜^¬öI.®ÞÔ±ÎLL-—>=åfÈ…¸Ã“4‘Ì\qà܈P&ÉrI ~; u¤ì2¡ÏܶÜì9q âH -(`êE+ð øò+EÐ9˳nÒbedÇ G“#BÀJÊYÝ‘j @è)4€H('øá|\yPüñ•¢(C"Àr=µßE‰²Eh”‡ËÄØ!Ãmgq²£‘j5õDœmˆ‡]]‘öïT¡¹íûœùm›‡:É.2$L™D2Çù€50‡@0èŠï¸Ú26ËøÄ;„y2üÈf äˆ#uTE±ð.Úû´Ó@é€O¦‘6#u×7kÈÀ€òÂÈ ä‚×·z&™NV$[–ÛVäq\O* +#©i%º$(<‚f‚ËX“4¢'vÏÎÊÆÅ+ ¤‘¸iV29Q•‚›éˆÅyŠÖ"³N…¤ùPlñmÐí¬Jä 8# @%ÆÉC®¾Ú«‘X|mÏÝ7,÷\s·KòÜCJªRÙ†ØPêÍ]øñvSL8 ‚=Ë3y26<„¨ä$¸ôéTJ“e¨ y n†¬ebQ¢ãpÃÝ“"xÚ¡É•â—*‹R€ 6KIðÝ«)R3ØÌ]×-2ò›ädU’PêÄ©U®‰ š'ÇÛXsTmCf˜þ!•”ÿ!º"µ•ÈkÄŒ»¦ffà°bpa›“p 1R¬¤)$içÈíLÃ]¯3qÛq Á‹oèÎAŒ84f$Ñ÷ j‡šÓ4Ùq¤?~Ù³÷ Ù(ZHr1V?¥Â„pZ™»€6@ñ]ôOG&¶F^Ñ6öò4,Ñ6TSÅ p>!C.ËGT}諳\c(o’ÈÛ|‚'ÇXÄÜÒ­K’h5ÑäêïØômzÙóíï'0cå«sl t<Øû.µãþ¢_Äõð/lÊÆÇGcÉâÚs×Hê“Qý³·ð¿Ä0aáÙ M«]uò+ÑËÇ*ÙØÜñ¦Éx§‚#4adàñ5d€*òkª6k¼£Œ“²U7L6ÄÄ…ı…šKPèönµ‰mÙ¥­› )·#(…È9ዯ§Ä(ÅÙo4kÈ^ú×_âbšv\LØ3ÂF’…õ¤i˜Ïqº±b[4l©&‡ƒÙ¾êi™jHÑ€™òË.néµJ²˜ê4æ…UA°ŠCY'É&?`Ñ«$KmÐfã ¼‘… äAÒ«;0Z"Á ) èÙè­S%±y»VRm¸°ã»<Ê^vFŸ’°r¤%‰E]±LáüG†vý¿A Íé©°˜°[h¿kÉýJ³×ý=ãG"egb‚  ?¯g÷Ö8çE}£§$%)rÖ×Ħ¼þmq¥ÞÎß,ª´ ýv??ýu§^5½ÿèÇË7­ká d 7¹¯°ÖQ‹‹¾¿û3R’’®ÿú;¿ìRmse´L ¼E?`®Aè‘Ðìvcνœi$%Ý9öýÚ\HÙ`#Ë,‘4Á¥XŠ 1jåeˆ%;°º|NBßdÏ‹ÒÁ-¤Ë6,r@vÉH»€ š[-3«·ã>&8’8c*…‡‚@ŸòÔ5èçdí³ï,íh›*9ãpà,|Bò$]–!8ލ&û [Õ:<²f—#\@‘*Jna„„‚OC±G®üêU£IÓ<æ?ÃùPäH[!]=1ER‹5±=Y£ÝŸc~ÔuÂQR;BM6×:ãÈf˜0rUC%°,OD5îÈü¯UÂäê4|?<Ó8Ц,QÌ‘ì .û螀}WvLmŠtÆÇY`‘™`+ ÕHbɪ › Õ¤›d¶Ò>Ù¹¢x刴kúb2BÓ)b ެ]Wa@¢i Ó2üNÒ¼ˆLDäëÉÍtz¸Nb/6à½ßŠ×vt6¦9#P9º ö±®ðJ2Lç7”\C9£õg0žeGÒÌ-ˆ»€ ÐÐé&¥JÎQN6ÊJÙ¹¢ËŽÁT†¤z7DP6>ÿ}H¼[F¤›Iœ·zËØ¡H]„RIÅŸªÂýV §›I³ç^¤ìò´ìènðçåB˜‘cK$ +z¨ê±s°O%-ez²(ôhïZôLN7ųɵåM4 ù .1V  ’.Ë ¨{ìc–j³|ps•VYežVšg·sdÿ寜\4ÿ¹ëŒe–×EOåýõÎMRHÜSMÉ‚ÕÑÃèÝÞˆbGŸ¿ßÛ]¸¤¢Ýœ¹"ÝQÞÛDÁ‰c€5½1äI>þkí­Üg&Û0Ô£¨31ežV–² _ A4O~Ý ì{VºBQŒ±ÎQ”™gǘå¤ë"‘êGÀ E]÷äûy7àV¥Ç¨Ö2ÊÉOZL³$ÐÄdU÷=ÝŸÓ¡ýõŠ!òr¶ˆÇI¡vh`p‚:XžK²&-×7nÉ~pÊ\ؾÏt*ëYy96ZŽ#6ÍÏm‚ö— êÄ­‚I‡_¦·Ò0Õ±’n»BÆ'kº+ß¿Û\0–?³¾Jê†ÙÌ$®êÔy±÷?Øk³mÇþÇY²·\f™9y \*ƒjÙ$d“àX ;ÖòVcÖÈùüd’(½[ˆ À‘@Y“Õ“^Ió¥«A'AüJ&˜«ÎôBòâBò ÈuWCÇŽëóÓ%eŤJîq<²‡Ê£hc•Ô‘`Q4ìÙ }ÿM2VtŒY9o“<Œ®B;’ý‰°5ÍíÙµ¥E¡1 9#l•XB“@õ`Wv+¿ÛZÖ=‘ÝôU–Ž9RnNIæœHãG®ýìji fÙ·,Q"¼n üÀ“ˆSj;$’@²Iö°õ·%f1tAÍÃYb…œ4J~iU…Ø»êɯ$ùÓ%eQmYoÇyˆ‘ÔD(n' Ü€ªºd¬¸´sñÚiKL,…%u$@èØÿøi’±‹¢q÷ `Í30V³€A6§² Ðj?}—aÅôsuÌèW¶•wçí 4d®<“ÇÇ%Yx¢³*Ÿ¦€ÑýükN¯³*ÒèÕ°I [´8á™–G+(¢i¿ïZÊiM¢4ÚGÑcÚ²£|hSºúN$ÆŽ@ Ü‚H‘vA×tÖg)/‰lý§xi“kô ‘8¡gV AH‰» {«“ºdÅQ§pÛ÷wÞ^UÅ/ÊŽxŸ …Bƒbì’ÕO}‘£oÑR´m;›n©6n; †ydIKŽ<_‘â7d½’@ü wCZM‘¤;á½›? -&Î…•áÄôBà‰¨P JûÑ%‰ oZ!ÛÐÿˆpó2¢ðy“ü¤0T«)âIn¬Šò,€žÄãG›³ìøø±mÁ‹NL‰@£37Gü\A‡šëY“¢ÆŽv÷¶egdÉéã»Å6:  ÀpZ™¬‚@ H x¡yËVÍ´½.4í¹<©‡+)ÊÔó˜P [²Þhä)º™*ò…,{„s¤3¤1K,•+! XJulMš¡×wÑÕ Ø¨ð¦1Ï °ÆØF8áȘ8çD;jtE€luÖ­«4m°>+Ï$˜ ¬©Áf•ZV ä¯YòXõz š¶™ÅÛ¡‹# ãx£TefÈ(ž¿^úñ«k"S£cgõèÝé• >È—re &¼Ö¦t0 n¶ùcãí©ä/Œf.aÈbDEh{ëJF\ |Ù«(~Ÿp5r %~|×! >Äêdˉ¡ e Gi;0ÕhP®Äf›YþfFàs~?ÈqÿŒÿ×\x{g^nήº¿‰çþ&ÿ¶oüµçæíŽŽhª7÷×vu][ªñ©l¤¤Ž¢ªÖ·è”ˆ2¹èŸ×T$Û]´FºïZ…œæ‘¯æu¶¶sNÉÒÙH¦»-¦À>Ìt¶<›Ó`@@]SWùjìüG÷ÒØ?øï¦ÀqÿÄ}6ˆN”À//ñiL7õ––Àcþ--€ ^ ÒØ$ ¥°ý´¶«él÷:€8lß@Hüõm‚8ÿâ?¾–Àq?Öt¶W¾–Á:€å "‰ócûêìt4¶ @ÙÒØ,G*£Ö–Á Æè-€æG‘¦Ø¸Gƒ)Õþ÷Öe*úøòÇŠ9¹+3ª9<1 ôh©óZUlÄâ|‘Q—ù†„ƒ5F ©bÜëðñ wc¯}Z@²üA$»v6ã ²Nê²[é[„ ßd‚H ;£uª åo/».Ö>\rDnSäðfäÌ)W‰äG<©  ½z»ÃmHa™ æL€‰^_JQ$E’G½]i¤ Ä17ËEЙ”˜8RæKÉ–ÙØÙýúÔ½ƒ6׺.æóãOG&;"¤œÔØö4,‚"º GÙUú'uȃ8ÊãFí$…Wœ¥Éf£@'ÁöýCC)! ½E6߸Aµ³,î«%¸‘.ƒ}’ =Ý­0EÉܲeÛ[Ö]½ÄHþµ5–ª FêÁ«Ý :%FÙ2nãnmðAÈÌjI¯OéfýÉâz³äZ¢…±po1äî?%&2q2H ‰m”¡£ÉkéØÙ»^… Ú÷Œ}Ï,â¾Æ^š*pÄ©"ƒP[µ$Yé‡zTE³¡ò˜áº‰n¿.ôÆ4\™ŸsɇoŠ6èÌò^rQJX–j4R|üôÁ ™m«/s‹pŠÇjÞT‚AØ‚?¶”½‡m Ý~!]«$¬˜á‘f2Q˜ÄQä@Vb: .϶ª‘’¹{òcîã ±×a2>®eCXZíG%Ø¢ÀV§ññ³ä›>l)0ÌbVWg¸%…кI«7G°5)šLåA—ƒ¼É,Rm©ê67­2_%>>“EIè0=ë. šRHñ›„j›”¢0€ÐGäèh_í¯¸¾I¸òµ؃ÙîÿmršÆTu‹Ê'Ogø“7jOJUÇJ– ïG]¸žGT“=^6\9¸ë“Žö籮ɦéœZiZ.êcÌù_EH*ê}VEØZìs}Që­n’VLŸF þ,ÈÇË’<8…+²öM&½‡Ÿ}qä›ãèëÇ7±gã]ÞBU¢Ð7©.WI§¢®5tÑFøÇv ÌЫ—šÓ9¾LSÿue &¿ßEâÍá‚•[Øÿï­eÎy;z_¢á WìpžMÏM˜y ßÜ?æ5%•Ób8¥hÃXò#À’j¼Cû~Àj.öió`ż2ÄßZââÑ×$ʼnb¥O^?ÏÿMi¤¢‘9dÐÜgÌË\t€;yáÊûk®õ¸ñFMbôs—#…ÚÙëñ÷)q0åÄ“ VHdŽ0‹-«*ê G‘b¬èØ¿tcJ»/6õ<[lùK·—Ùe‰%(r'• |]š¯:Ò«¡.Šoùyø‘&V+ÄAi’…ºè‚OoË‹“/H褅ãG E¨4EUq÷Õˆr\6€ÌâP¿Ǫ̃=-v£’‚lQ`+V™2FÉÜÇ}µ—ÐþG =Ñã"ŒŒ"——ÞÁ°(õýïò:ÂFî´ZMÙñ¢™²qÕd‹Ò²‚¤1 K(]ÝŽ€¾õR±t†¦^TØ©>4pHÌÄ3’´/°ÁI=€*½ÿ-4»-¶… Òg‚)1ñ´±4…N"–ÑÉzwzS3A.ðLÐÃÊ%…%‘‹Ñ ÄÑ‘DHü¯JeÈÓ“‹TFÐExÖ$­Rqg¶¸ðrTuv¿×™Ãz3M’Uljæn©${Э%“¤e¼U±x¹^±’9+ÆG ÇcïCÞÇê5e i¯dŒ²Ñ9™ ‹ô¤³P,Ôìö}…«ä%,Yè"ÎÍÇÚ#̃)Qa2HÇ#ˆh&ì{šv{ת+Ty¤é‘ñ a+J˜‘!ŽIZGâʬH(ÙIÊΫÑGˆßwY7¬Ã“#ŠO¦¿nüëÇÉrÿëþ糎£*ÿçfCõ ÇrpXÚfòyS@EY¿Üi(%ÐŒœ›Euƒ@EÝõú nÉ’rÅÝ•‹aö5zéŽhÆJQ±¹9£Š´v%¨€I…wÐ$øèkqƒ‘ÎSI—“!W"8 ä~£à‰­Ñÿî®(¼[4ä²¢ƒ=NG¤Ñôy7g¢A±]]ïºÕ|oFTíи7OUW€§˨ì?ßÇ﨣ºOÝÉU¿«g‘ÕÐÂ=DñV±GÁ²ØþÚ’Šµ½·µ[/7­Ž²UPO~,j8Ôšú4ÆÈžf€«¹À`U?¿ÿÃV);$›Tv6 ½™ÎdéÐ?OZéÅ ÙË–fŒ½ñ!Ü ñ€O˜XKúŸW" ØZíG%Øí€­ziœ±˜ÿÅ.ä»{Bd2\=µ¡ Ú×Ò V£føž†”Ì™gøŽ,ì,˜¥ÇáX~¼|däJtE­EMYé‡z’VEÓ³å¹{ åI)œÿ1Ë7^+Ïù×^d±¯£ÒÞWöPü7‹<²ƒÝqûš¿]WyQ8Ùü?‹ 5=›ûk”£*5'õH¹Ã9æAâ ôHçÛíýõ¸e"J sà†)úý]xÔmÅ…l韆°ÜsŠr k›î?}J6.tKü=„GÓ9•G“ÿÝþÚ58Õ`œwô#+b‹&I*À’Ü|Ù5ï×i+¢ZAÍËôf”ñ1†²½öhuìo­qÑTh“áÜ>`&I|UöEýþÖu–M2·L‡Ø6èf‚O¿ØýµÉÎiÕ ÕØ™ölHái3‘SDâïÿMm6ãfi)R9ël({ô5¥³-äÚ ååÊoH’´x±æÅ‚/¯­mÀʟرU£+9ôÝYù²Q &¬ûQ{5MdËI·2Mé4ŒÓ )-«ófªôp¦eÉ4Jílr& Ž2­Ý‚oÈ¡@’}¿=\7EÍ$D;kÌJz”üÙTU‹Z»7вóÙÔP°æ‘Y6Èp¥€€IºŸZ™p&<œNcˆ!ª¬P>?¾«TÈ£Oñ³nØÓ+(±bXÐ=WíÙÚõš¹ºGÓÓâ¡Ü Å N9fäã\M±bÙ>Úì—Ìå'pñ³bæ§ .P2«™I¢¬‚4 ¯°:Õü¨˜üMY¿¶â0¾Lõ„EùöX¨=-v%Øí‡_}93J¶œÉ0$Ã$g°“²TlW@•j6o‰ñ¦L5ÛGÄKºeœWÇ–ÇY¢©9„Š Ð ÔT‘g¦ëfR£§¡L»®âvè£dY¤ªó“‚€±,ÔhR|oÔ »26ä»®Ñá´> íXYR Ђ5ÎgH#—¸o|¼^~Hª¦F1 P£dÄŽ¨'XJOÙ¦Òí Ÿyhò× ñY¹}d‘v»Qà›]jî®Æ¯¢ø[ÃæåKdD2ÀTD•¡wFïÇ]êWì–ƒ vÉÈ¢ñª™1ýlqê_!Тké=‹«õu«µìZbß}ÈÙò<`Àê£Ó—’±jê UÝŽ€¾úÔ©}–õÐÌ=ÒI‘rpCdòô›’ù® ýµ2§¶i+]¤È)„Ñd¡F×ΫwÓ2“Z¢“N®>Œª wôûé&þËèºHÿ*׺¾:©ë²4Ó-y™QÞ6M ìÕj¤ýàx‘M÷޼ëQM-™“O¡¤7÷ßZÑ’£éûjŽÙ>4(ŒÎã{óGX—f£ÙÍøgýÄŸÿ°ÿ×\xzgNnÑÔ'Çë®§5ìóÿÿÛ_ß^noÉŽŽzûþºâû:®n†®‘Žj$ù󭤨Ù/‹^]]hÕ cöÂDF†¬z13U½_oÙ…Ðréÿ-vPäÿÓþZ[Éÿ§ü´¶“ÿOùil'þŸòÒØOý?奰ŸúËK`9?ôÿ––Àréÿ--€äÿÓþZ[Éÿ§ü´¶“ÿOùil'þŸòÒØOý?奰ŸúËP'þŸòÐ'þŸòÕÉ€äÿÓþZ[Éÿ§ü´¶“ÿOùil'þŸòÓ&F“Oý?å¨Päõ|um ÏÛK`95þ-€äßÓ¦ì'þŸòÕù T‰ñCõÔ¯²Z*Ù–Y‡_ž²Ý¦ÄɹbÅe¥˜½Í(Ɉ—â eéeò£KŽO±/ñ1"(ÿNõ-#K‹ìçææÍ› ià{kŒ¥“:F*#Jb0A·÷Öê*6K–BqEJx÷Ö"éš}Mk®Ìo…ío®Ü?‘çåüOK¯Yäþ!¡@Ð'à?¦£è±ìF°l4}T{¿¶µñwLøo ‹$t/γ4Ú5³˜»|²?4Œ©U /É×,mš Ò\„®~F¤”ò*q£fß,8B#!‰$Y»×H&¢bObè³ceBÂþ®ükË;4ÜqºÇ”3R\e-×búÕÙ8ÚKb¾G6f"@ÀyÔÆL¹EtS* ÌLp~² DÙÔ’”Qbã)ÉîqÆBñú÷£Sl\(nÖ™x·&M±&ŠëPÉ=’n-hnûl¢6Æ$(üCViÈÌQ›øT“ò©nº7¬>93y¤XáeÂR3éÄ“­(4G+ ¬lù|5âµ÷ìF¥èªHˆ1³Ö% +»{錋” ÛÃÿ´ódäîiexãå ¨ÔM Øl~G[‚š{9Ψח²fÊ^(r‚Ç6:Ã8)d¢ÝQ±D†"È>ÝuÞÙˆ©°woâ`Ä ³JÌ«D„£ÊÀèuÆìy­7EøÙÛ‹’¥=ZÚèÁ‹j̇o}¬nKé Xì‘$b¨Á¨>À]^³.Á\O‡ÒòãžhˆË„F˦ª`H{<¼“çöyv*O2çŽGsŽ2 ÒÏßöÔØ)•¶í¹Î­ƒ ¥E)–0Ä_š±Ö®ñ=Ãá¸2²°N°£cŒy#ué‚I D$,ƒ@õ]ÙX6úy?Ä>gç¿‘èñùL~+¾\¼øê¼{éN“aL=Àå|×(ýw™#ôÏ ì$±&À À›6{'l‡oÜ!“.Oâq“l…qˆ1¿ öÄìûÖŸ vÝ›¶á64yÐ$'Ë5’M³5¹,OÞÅ–¦, z Œ¸Ìß6Ù _ã,T¯áäÁÝ‹³«òM°ÎؘØqn1ˆàvi"|rRBMA…*’ilŽ…Ý >@é£0@%`Í_QU îh“Cò³úêbÁÏ—aGÝ=r€IeI%Œ¡äYâ]aId5@_5ÁLysÍ.o8Ÿ£¦¥Bc³g¾üjbÁ‘öWÌy¥ÜóÚ\VÇ}0ªM“Ùk7UÝ ñÙÕÚ`\VK–…ÛÒ V,mÈ¥‰k%‰$Ùä|iòÏ7ð¬¬Í_)˜ÈÄPÀyuоÉì’|Ö›»åÁŸ+rò‘Œr«ÊR"¡ø’TQ$Š!IìÝÕõWuÛòw5ùq—B@ä= l•n@)èQ£D^€ÛÍ~ú´ÁÍÃØS<å  cõÞeÓ<¹° ÛlÌy³g³]°8àK‘…•…ŸžÒ®C8B±…1£ *ìŽû>oMä ƒá•| °ò3i5WŽ2¡V3j+‘$’I&ìÙìttùÓ|;ëb*I”†q”'ä""2Bñ Ä0PÊ«"Ë$€,TÿY$†k6ø¡à}µ©7Z3³6Í‚ËÂRV(ÊB8ÑI&Í“J=€®€×99¾Ž‰D|‹¸fEò¹,ªH $–ídžÇO“{%*ѳqØrÌ9i•ÀIŽ!™J%,’Ø MI껾ÉhæD»“u“pD²£ËK% ®€°¤Š²Gš #`jàe®èùí•ãcôH4 õr«¶7×T<ê[*ìÅ·ìm¶Då2Õ½8Y1î3ô‚A%»¶&”uB…/PÕ#Âî23îS«HnÊŠûY­xe:k_g¶0ø¿ñþ†i™ø,v5‰<ÅbY_PóäjÂx¦‰8æÓG{à|-Ó+$Í¥1Á$©ì7_ŸŽõÛŠçvqåJ)QÝËønY¥’hòÕC:É^•¸ kèuâ¼/½zj:8'ò<®F<˜Ùo’J9=ŽìßþºðÎ{j¶{# IÞ·s‹•ÞýÉãßýtœ£.•¿ì!¶“4> `A6:¯{ÑÎ9Z_î¨(3ÞW;5`ŒDÆ8¼‰Gt $fÀ³_}yù9Ý´Žü|­œ0Bþ¬Wyã%Õlô8¹KoE9Hd® ytµç­9EÁ$Œ¨ÉI»/}q/ßY”“$XÅ©[#X6þÉåÄYõ@ nÆÿfg ’;T9Pâ Y8à‘Wcíß‹û뢚m¶Žn4’³D؃"C šƒ'nÅö}$_zÔy)Q‰BÝ——#*Î¥r 1£Ñ.‡·ö¢œª™pÙXðýýC%¯2Ák» ŽÍøìÐyÕsÉQ)ØE„ŠZFÙR ,t&ÍöoÛßÿ=%; ÃŒ Q;бޝó>ú’š—ö ‹c ¸`… PßgY”®VAcp²sHŽ ¡%”‘Ñ{q­qÕÛ3;j‘ÚŽlèŸÓœ*D¤MÆ*RE]’JÑïßí®êJ:8µb͹œ¶––iRIS…’V¨t€H«$yªY“7b|>¸Ù§'æn?YæXøÜØm¬Ø˜ófÏgvÎFi>]¿iž&Êõ#\WŠ ˆV ’ēȚQt Z’•+5n˜6ò‹“,+Šn9 ’ÞO¹ü¿þòeµ$zš¤Ñ2ï1€â“Ñåõwûè?ÕQZµûì‘’¹Ø÷8£àìV±''+7 Æ…åîg1ŽØ]ÚSõcÁ?~èÿmuƒiùìVß$2KéŒP]h³ö¯úëqQ¯f ¾Fã<ïÿez¹}¿*ý4—"j„`Ó²™G>VA"‚®Ëy#ÿ/?¾¯š-ÙŸ’û»C?£&ä,°, ÿ§éí­eµ%þì˜é¦W3,¶n4Ë1øs€&Ƀݒn½ÿ¾žUxÛ!°óáYfŸzOÆÑe¢Š«£Õt|÷Ô\Ñe— Œí´gçÆÙ±°%Ø’¼ª‰7×ÛQòFöUÇ!˜Û>gÊÉ Çb\‚XJ]QþýþÚ¾X%CÅ6ÊK±å£8ð¨)eäçe»±×µžžX´ÆFù9Ù?ʇƒ¬Ü–°H(Pïó=ù֥ʻ37t8cfüÊËQKÁ$°£ù@*†³çÚ/†UÙQ‡¸$¼£Ç´1z|Lƒ•]Ý‘æìÝ{è¹ãcÂÅä<ØE×/q—вQzèØ®‹Ö—*vGÆâ%77N^¤|‰”È´Ô9¸÷Ñ«5¥7DpF=dØh Zr/ÀЛ#Icc° A”½ò€+¡­6›2“HÕ°ÎzÇXcUHT)ì(ò?Z ?Mg*“%Z>ŸÊ훎¸ù&Š6a,‘r˜’[ˆ ]›HcÖ»)<ÎrÀœÝ¾ŸR3ЏÏÉK$uàA ’ £ÕwgÉRƈ¸î7f¬¬Óx“/Ô<%’9&C$”€k ,)"¬‘æ¨ 9ì­2ÛFÓÜ%g¸„ÒL±˜Ènl6Ä›*ì÷Ùªi‡F›`K)ù¯Q"ˆÇAIbIäM(¾€ ÐÙ•ÑÒЦ=ßk]Ö€‘Qá˜J…—’’ÀH¢z±í}X"R3äíyíðcaåýI7<‡1æÙ,Âá’zñãX’7F=Ã`ÈÍÉ9ªœàJ¤]­’k° ‘tz={Þv‘tÞÙlY’å6B¬aZu”¯^ÔkèìW‚E÷©ò®‹«‰²æE’HTǯ,hräÜ®Íö>£@|vk»Oèš²¸»N­•XË!‹ÓAUA6IIìp:ꬓvÆ‘ °f••ÞXýYùqñU*A‰$’Hìß`Õ M¶= ÅÙf‚6,ä–Bò2Ž ,Р<“ÝŸzÂÞÊš5´ÇŽ#‡K{÷«-í‹’ŠUŠ ?WzÍ6jØÓ ¨€Ç‹òºÖ:%Û øcP¤x¿:,ƒ¯e¢—tâL±C£z\‰P²øÒnM 3¯_{ÕNdj•v$Ž>5µ~ÌjôJ’GcT¢s{‡äu‰vj=œï†‡òdÿç?õ×™×›³©®§5ìóßÿÛ†¼ÜÝøz9ëï_}q—gUÑP]_ˆöIyôuWA¤4„Ð~´ôFí§¸ýõ¸ôsŸäkÖßg5Ðik"†Ÿ[§Ä–Àiñ§ÄŸ|@i—èŸ|@il–ÀjЮ€iñ§Ä¯øòfŽŒ’€ÒR ¢™ÊŸâWçPCbèp|´w\N~ûKzs'óÖáË‘‰q³[çâF>©‡öÖÜÑ…"]ó>ƒ^±åTiq1üF€_ÜeóQ¿šOˆrdê4èë>Y2ø¢„¾~|ÇévþZœ٬`ˆ0n3øR;Õ©²ÜPÈö\Éh›ßWÅ6O"Fˆ~’Ǩõª¸L¾dhO‡±n,ë¢â£•²36Li"¨E0ðF¤¸“è.JìåͶeã0W^uÅÁ¦vS‹C±ñL}Ÿ:±TÉ)hcù¯Û[öf=o…Oû[ váüŽ¿‰éO‘úëØy%è5Ѐ‰?ý5Eb5ƒaBï@@GZúóY¢ÆyU¨ûk2tA[9ñï¯ÐªÈò|kŸ’ŽŽ ¢‹¼å¼ÜâˆoQNl®Zõ”$’WŒzkï~4\–í˜`D|qêXžˆÔÎL˜Dë¨%µ] ­vNÎU«,@>F®(lb5I–['°@¦ªêÈïÉ­ hsnóÂ%‹+&DmDI¹+úÅ~ªv=t‹ëSCf·.\è]²1½'IZ6U“è×F…ØïÀ=éHlÓé~GJBÑÃø‡wÏÂÍ’)|eœÂH‘y1rÄ‚@@FØy…£¹Ärã]ý«JBÑÄÛ÷Œüåc2òf׊ñ—‘P|P“d¨Ux BÑ·l}ÉÎn6NR<±OÆ'ôiVãVH6@$ù6G¾”…¢6ã¹emN˜§!g–1;B¥‘–ø‚Ðë¿5wî¤- ›'r„Wrƒ-Rq†%y A‰! 4,f»¢}}­+‹ïSæÅ$ióÂŒe‡Ô%Ç*G@‚ƺ&¨©H^èÙ¶äí»5¢âÓB®T@ ž”Šrrw|äßdfޏ¢–‹Ä#…‰"ù~€ Ru"Z;5]:RŽŽá·ä92,0L…* •1ùV º"½õE¡»FNçš2±0šHäÅÊ–%%‘¬ÅhQ*Ä~D~54RÃ3>M›nÈiåSæg†̶„ØHí€T/ÛJD´g]ÏqÊÀÇ”O<@Å79¢Ä,ZHÛŠ‚¥O‰ ŠV”[+¼ç®*îjÓD£,„1ˤ¬I,ŒÜMEÙºÒ—d·twÂøF”‰hâmûÆ~Nô±™ Âù3A"ñP±²ò*Éâ„›$}b«ÀR«:›¶C`íY9Ðñ- êX° ß‹R&Gw¬Ø0òÌÙ„ÆA—*(>”À½(‡acÁ)ÐçqbË’Xäùó p‰ê•1™\C›U=U“úéHZ™›¼»6.cä$r¦JÅ–a¹‘0Œ×tìš⪴¤-Þ›3xŽäâYVE‰JÉMlI °O@<’R"bÎã”7¹„í:ãE¯¦‘˜ù2©‰%ì³  êü);:Þ—þóÒ´gÝò$ÁÛ2sbP^YÔ5‘`/¿¥!hŰfeäÍ‘‘3JŠ©&<ò*†tnBÈP©#«¢/JBÑ}ÿ5ð ÇX¦hÌÓ„-+9úX…PÖ,X#¿î…£:fnòl¸Ù‘ȹ+RˆÃz„L#4|{=qU]© VkÏ9ÐnXb<•X$˜Ç$B!lx;_"zˆ ÷²|iHZ–s Þ`ƒpg2ÉÉñLkÁ" Ab@°lto²h …!hnÍÎN.^J¼b(ä…V>!-œUÙ$ý"É? R…m­•ï.NLÒ(„2ˆÑKÄ¥@|X"Á#ïª-K‘ëþš”…£Ÿñl˜ã¤R´fiý2È€¹úX…PÀ‹$ïû…!lnÇ>NfÙ¹áDÁ™%ãTYX©"ºò ëï¥"˜7ýß?oÎ’,8øË9‰UH‘y72Ä‚@@FØyö¤´S/yÏMñá†KŽ,¸â–.*#…‰"ùn€5Jl{œ´ŠFñ>î¨$2DÓÍ ¯ /" ,ž(I³_Pªð#T…¸çL&yyÍ„da$ N-¨±màÝPìÞ²ú6¶Ï—g.F$±.lšìþzñMEI:=°ri«GŠ÷Ö9RѾ97Ûð27 ¥ÇÇNLß„_’;?·“ö®œqš¶sæäp¤¡lQcųã¶[Áë¼a£hËê¨P5úë¬K†•Gìéeü¾ŠDä!Dö`)èuý¾úÄ¡IZÕ{¾÷ÿá¨ÉÊ.žÿÇè×·FdV‘Z@T×Ò'òìV‘ŠËi¯þË'”tßúèÛ#>*K3vê5_­c÷}jIEº1æ¶#'>NdãHiP7bÍÝøîu¸F2[398:GWiÂ9yJÙüõ˜,äY¼QÖÃ|´Ý20¦ÉVbF‰U 8¯$“J,ߟkÙI$y¯&sw,ìÈÚlÝ!B2´j ÉfÀ*4*ÁV{Ÿ,”Q¾$Û±¿ æefâÏ…6|ˆÑ²•r‹ÍGWäA ѯ¸ö½X5Ff—LÍÀm¸óɤù¬¢#d‰=OH†+B¸ÝI# O¸Ñ›t*]Ó>\`%”ÊðJÎ1áS'% Á…4@Ê€êõid.TuqäŠLòf1’Ñ+3FOhöGÛòÔë³]ôy­ßyÉŸtt…ÈŠ9U Ddù²O^Ô?~3I£qnÈ`¤,Mx7¯;µÑèOì¶ù,eJ³£±„Ç×UËÍv|-ý¬Ìú£¤y[»ctÉ‹s&I*¦#DŠ ðfâZ€Ø‘cÁöÖ±Eɇñ,ÅÅ ÎóF2ÜT¹K(ªãÈØ*ÉýuiY2tCî;Œ˜ð@$áë <<¤Vã]ŠÉ5Ý¿5+.L¹Ý2$týT…q£š_IT¨’yrî€_ŸËR´KgR뱬i#MX¨À’C#x†²»+èŒùß l„U-LË~,{ÖÒM‘º‰ŸiÊšy%Šg2*…xdu²›@D©#Þˆ½V’$]—Ý$š5Š,UnRÍÄúj¥¨)&¹/¯'ÚýëQE;l6Ьǒm´O‰6@eV ¨‹É˜X<Ñ«ööÒ•Ó%¾ÑÉß>x,¼)ÖS’-c[%º²EyQ¿>ã\ß k£ªå•èáÈäF <Š=­q\MA¶¶v|‘sI=Cðø¡Ý'–¿_Ü‘›o²H±Cò½^XF+_cŠr“Ùí®g~Ç`ãú’‰¤'*JÉ¢h_VH¯ï®ÜpR9rMÆŽögÆ_TBÕ€ñ`é­M(Ê‘ˆ¶Õ³>|ò$Ì b ~ Å›»öW^ç[„#%oÙ™M§¢ç5ß>$j1¥È°,|tOµøñ¤,›7ØðN´kî9K»úq¹)Di"(+“æË7@¥=kX£ ³v÷6êªd/Ï,2/ /" ,ž(I²GÔ*¼˜œŒ‹¾n9;lóM!’)væ••@WZäªeA`,’mOzËŠjE´|×'3‹B¼™ýHÕ3(°,ýÁ×½Ö¸Æ*–Ž®M¶,ãDr ÆU—åÃÑb\I»¾"‰ózÖ*Æn†#í¸³4^³ 4ËçÁþzáÉ–ŽÜrÖË´H®%.²9A!$bäÙ¾ý×N8kg>IlÜd‡à•ˉ”f÷ß¾¹UѽÛ9“É2àu7Q¸=’ÀÐ$mCߣ®ÏŽ4arK!“z¢XâYÙrB2‚I*n‰¾¬€O]Qj¾(Y•É*$ >DNëa ’%cE”X[=û€0kL#hdñ-x¦'aÃÐÑ.$ßž"‰ózxáeÎI23I3É1xƒ!!ÉU…ûvO€?3Þ¢ããMý$Ú0K•™‰‘&$Y$*9¯=‘¬8Á3JM«å•ò.ÑÈÁÕÔ3°núÛÀûéŒz.rO³:ççƒéŒ£L|¢„K›åÇU™cŒl28RI*n®ú³DõÕÖº>8]ÔçVIõ¤–. Ù$…X×%žýÀ?˜5©ãô<“ûÓzå¢È ¢áI!AåÄ›»¡Dù½ÎqVCØóí¬4È>|hRÊT8æ ¬DË@71"Y“UhÔ…²hÐ÷?®’ïFSû5ü7mÒ rÑÊ®ìÈŸï«§Ù&Ú£èÑî;¤Œ‘IéåIâ„›ëêùU}Œ†mqgä1ÁÝ32¢Ê8áÈ‘b#ìÅJX :nûyÑÇäŠFòaaeî[£KOécz¥S‘)²s±dtøÓ c3FÉî[w¬wD™’iž:£N@4V´GäAîïS ö<Ÿ£t;d‘°“æ‹}ýôP¯aËôZl•¹‰ÈëÀÒP¿aH¢í…G#’ÇíÖ¦ìy?D±ÿ«o¾˜;ì®v2\V•=bù?}og44ª{uª“FdÔ™` xՉЦ|óü¦øOý5‰vUÙÍødŸ–“ÿœÿ×\¸}y–ÑÖ×CŸñ<ÿÄßöÏíÿ–¼üÝ£ÑÃÑÏ×'ѵÙ~ËYßfËCžNÐÔU™m¢ç=ø:Ô£H‰ìѶ±Xôbf®mßÓ­¾Ì.‰ä ê9è:ä è‘þƒ Gú€9è:ä è‘þƒ #™ö^½ôÌ+ gì4ÌÿN€9Ÿq möÕÛ`9‘åtÉŠDoÓKd¤O©ùh¤R­:¯–FÑi‹}ÇyÊ:ûk.Hª2fywüEé:•#^&̦îù¨#io±zã9äu‡$mXø“† ìt„cBnIèÍ2„'É¥Ô’W£Iè|[N|ª¯žîõWf\ÒÃ’às45¥ÄŒ¾T>†ÿxoZ\HÇ•ØøvŒ8ûô®µp‰ØôÇÇŒR¿¶¶c&˯ø´—û¯z¶Às>ïK`‚Ä­=‚%"ROùûèél+n™ÇÍÍ–w$–éT¯G\%''³Ñ¤´M•ùÒ$jÉâA ûéw¡èê|+ÿnÓ]¸?#?âKþ?ï¯iã—¢uЀ‰?ý5Eb5ƒa +Å?«]IȆ6ü'ÈÖjÑS£.NÕÑájCÕUvu@מ»Óä>$Ë´Ç62aʲ´hâr¤úòݰö£bºñ§È|M*2TTâè§È|LïµÃ&`Ïlpe Ä„/  T$@‘`W} >CâZ —>t0—#¬ÜÕÄPèš>Õ§È|JC³Á3òæC,|$3Ìò½ý6Ä;=ŽŸ!ñ'j ‚'R Œr± ú‰ä(½´ù‰X¶ˆàÃ0 ’$`@\¹,P  `W°5ùiòfÚ¡›<3ŽÂЪÅΪTŠ … 0¯c~ÿs§È|KdmñdL• µH%n­A hÑìì4MÙToPÕÑÖŒ:2ôàC˜sÓ‰O#Û±PZ‹¤Ð$ŽÈžþçB>ËAµíø±O xÀ&L$êİvaLH7ÑÇR-“l‹\EÇfYH2•Ù‰õHªG¢,w¡m‡ðm¼b.¢ÁD†@Þ«I%¹_+6EÝ×^:Ð[ v]ºl8¶÷Ä1Wã™—Á°IR ѳ}÷çA{²%ضù²-ÖQ" *Eb£° /¿sdûèBÒm8eüôžaƒ‘ê0RÃÉ#ª$(}†…¶kà¿m±rÁñ43F\taÑD|³<.ß,Øk ÈR³s•™˜Æ‹OŽ€¾½´ Ù-µ`ɇ‰„pô‚ÈÁ“ˆ¡L ƒ]]Ùƒäè\ŠÍ²mòáÅ·¼N!ˆ‚‰̵DQ%H$ƒFÍ÷ßžô"r¶Œ,ÏHOëÿ L®TŠGUd†š$Y³Ùﳡ 6ÜrU•&©r™åE PÔEuدßAz¢ÃjÃ\ó¹WÕaDüÃGt8ÝP³ÕP&Çz Õ&Õ…‡3OH]—‰yfy[º‰¡jð>ÃAlÔh5 ]ˆÌÃÇÏŒE¤ñ`ÊÊåYH÷Q²,èZv)¶}µñàÅ8×,‹$‘Y|6|Ÿ½ßw ÞDæmXÓ.FThXv€6@`tAßÜè"*m«óþyà&@Á@,•ðHE]ô5‹fëDGµáC—ó±@D„·|ÍH$…&5ÙÝù:vcÈÀÄÅÃÉxÃòtâÎò»5w@II GI]HùÑrÒÈO³ž¾{œ›=Ñ„TFâadî+‹Š–ÌEõà{éòä–ÊñãŽu¶ü)·ãmëÑpkØìkÉõLo÷¬ʱò Ž€ñÿ™Õq‹èdÑÂÜöl\ –…S²‚OænÿÏ^~Fá#Ñ hB"$BAÄ k›¶Í*]01QévH@4l_}÷úêŸé %-ž‹eÙñ±+=¢©Œ| ÙéIº«¯>õ¯L#Œ4唆Á‹¶>cn8ò;H9±/ªº¡d]~u»µf*{/Î>u…A ž³,ßVMmy§7&za¢[`Å•£pJL¼eÉ$Uwc£÷ëR3yPXžŽ\L\ÈSšCÉ89R¦ˆè©tHèø:õgôÌgáܘJd‘QTŽ +)£æÈ ö{6{=g–F²‹X™7mÈJá`/Ò(uÐ}µÇ—’ô޼|XíœÖÇ„Ëê•$ÝÝ.ªÈº&½üë’›Q££ŠÊÑ1à ÊòÆ¿S×#gº4vÕ0ÒNÑx}8§2´a–Eã >ýõc&I5gF<D‘’²\´„’Gƒd’*…wÕu¯FMìãIž€ƒÓn!˹7ß+»ì÷~ xսؤD›f°¤ª…rQ$pO~ú™4)6߇Á¥ŠéBÐbÝyèØìýΦm“;Z²kRF—dƼ)ó¢Z2ÞÉxÒU1H¡ƒH°Aò´¬¢cÛñ#‚\q)("NR1,ª²oÇ^zÕ·d¤XWéˆ\‚´(QÁ®®ü÷ÔMÛ%¢ÚpçtÅ+ EI™l6AO¹7äýô‹y’I§ÙvéfF7FH„hb™Ò” J@«ö×G£¿á~Wó'ÆVerAñÝýú'YÆ,Ý´fÉø'aÉfãvÞ{5û] GÆš¡›NÌ9èçÁô%`Iëõ×9ðÊ^ΑæŒ}Ìÿ€rð"i~t•ýUã\eÁŽÎ±æ²øø˜ë†°ÕØ*H ýÁò5 ñz55’q`1Ǩ؞ˆ÷üõ«’mý˜ÅROÐI ®E²+°Hº6öûè¤Ò¤YE=Œ`¾ªOÿ ¬± ‹ý‰Ô¹&*Ñ҇傗20ŸU¨Žú«ªìõ]zô©A¯qZÚž¨Ã†ìQ›$Aò£—§Ï—÷ª¿¿\Q)7d¾N[ bJô+/« _@ž´soL˜«&L¼ù úŽ~–äP õÙ yëÉïUÊÊ’^²óZE˜š)|8 _žª»¾úïS-Š_DŒ¬ßWÕ&ÉN$_jª®¼VŽ[±Kè39%yCÎAnH±àÑöûjæ—EÅP¢³1äU‰=’A»Ö- HbdåÇ PoÄ @ß÷"ýþýkJJ¨˜¦Èi²¤!‘ID¾U›:6𢤓.ùy²2´n@…¾»$Ï^Oz9Y)zDœÌÆ•d‚—Ä óÐÝ›û链ˋšÍõLµlW‰´_jª¯í¦nì‰zÎÎYPij›bÈëÞˆ G·ÛL•¥Cöã—‘7Ëú¥CvX¨$£Ù ãX”œF*lhØ ÊùfɛՃ>L8¯ôÖ G#)Š lƒî ïß^˜·‘Â]L­ƒiÊž<‰ðÁd/  €@ €Aÿ=vÅvq¹t++cþ 2ç‡ù Ùú@ JƒD€h,uùk.KÙRh¾׳œ“ŸüÃ}ò$jÈRh]=ýΟ’³mûl­6K€ÖHYHQgÀ¡ûkJ½vÍe(]ê‘?B2ð±ócd)![’²ÈU”DêÁðHðtïFLýŸL81¢Ç1^ÈŽ,.Ý“Ùów}Þ±,½Š0åm²åÈdÉ °èä°ö° ?s®ó(éQø¬“ ¶˜³#¼¥bªj¬)4 ØÙûë-óti.6»V`Ìù¦aËê5ÈÐ&‰ ]k²'ßΟó[ì?Ì< ŒIhä,ääò³ ÝÄ?!«ÿ6û'Ä1q·L5A*¬j) ?3çõÖæÙkŒv>ç4"¸±f v$“ýÉ'ûëKʽ‘à0E½F8#X;Õk‘‘8…7t%¤ú‰ ÷ÑgE¸#Ýùr~ö/!.%>ô_—*_az5ÈÅÁ“[ϪÒ}÷Þ¬W%†øèèÇÍälk­4ör´úªEt¬ÍžO¦Çò:Ä»7ŽÃ&á“ÿŸÿ=qàé9=]t}âyÿ‰¿íŸÛÿ-pæížŽ~¹>.À‹uƒdh¨¡£­'NÈÕ–|™JýMçUɵDQ£^Óþèþºé36kO³’èŽk÷Ô(s_¾€;=†ÿ-Z`;OùiL–‰ÔþãöС¡6¦”ÆÈÅøÐ¤X×êq™Ð’68?¦€“a=)‚,‘e€Ðl¨cÿy ˜‰÷Œ8‡RYü†‘"®7FY>#_ÃYüõÍò«:.#4ûÞTŸ„Uý»Ö<·Ñ¥ÅB}|ì›âϘÖnLÕEM¯p˜SÇ™Õ\m‘Î(Ñò°«×ÞµµÂO34‡q„fšÛï­x´sò»9óm9ðÈDk`žë“ã’:©Åš6ÍšS ›(ô< j<{3>EZ;@ˆC^ŠI}4Od}µchkPZ'ZM”;ûÛG`5ƒàè –Ì+îu«Tf™åÎ.þž*#ßYnÙÓcÂi©”Ößom]ØmŸ„Ϙ?}ICØŒšts›ÏsJŽ©Ù$PËR=ÑÔøWþÜÿ¦»p~GÅ—üß^ÓÇ/Dê4  ~új>‹ÄkÃB®ÈµQW­Uì'Dê5AöG5Ó@êô¦Š«Ù=]^”Ëñ /JdÑ€è)‹aH{¯:¿"i…_–‰P-¬—Ds_¾µ‰šýôÄ%=yþÚbšýôÄ_è9¯ßL@s_¾˜ƒÎüDñ®v9;’ã«Bä;-”­Å{ŸÖµË·GTñÑÊÌ}Ï>y¥%0,¦'~$ò¿¤ $oÅuzÊãÙ·É£o¥ºÁ$ŒÙ…„YIBÁ{º¾‹çÛETG%f¬œ-Ò3Î9KäãXÆmšÊ>›%fÍ4͸!Ú%Ñ»%hwv*}wç]\/Fëf«/3%“s"´CæT† É€~ü«ß} Ö¯\LͦvöÄebI$›€É ;¬sP”í`Q«×M&sjMhÝó0ƒ|Æ­¢(ÈóŸÊÒêŽ1£l9²$ ÇŠ üLx@éGucKMáº`œïáž·ó½Wø.¼Õyö»ÒõaŶpvÉüF$ä©*ää,ê;y#%ˆf(5îGDhÚ /¡ÐäáC‡¼ám|¤úž%I˹>’ö ’O+~zó¥¢S+±¶ÙègI:@ØS hã` +Õ‚B„$$“¥«5L³m»|;2eˇˆNQÈxòc 6Wú, ÀÿÂ:Ñ4Æ,^~~Ó“²âG¸`â¦DÑ4xÞ ãC d×@}€’ŒÓ;ØÓÀ¸Ñ“êÿ,Tœä+Íø7çûèš.28r³|NY]RdÍˆÂÆ‹¼ET2¯vPž¨’=ÁÑ´JgvÛ|©°ãžäÇãêŽ$qä,vEm-¦pp^<»/mÚ$Æœ¸•ÊÁ‡‹ó€‚y1»l»ZËìͶœ|Ó3b®‚&0Ÿ±Ä÷D€#$ƒD“¥¡Lf ›IØÞÆÁôÓ1ýo’I>(‘@ôA®€ÒЦfv†\ ´eOŽÇ/yÈ^pT-Âìr*Mž$õ~ŒÓ6nûsem[žt©+Z9& F¦6°A &‰ |ì4M2ÓGywªfGšÚÌ­ñ0`U'\œ…ÈAÜ,C7v)T÷#¢4Äêçg¦á²îj•ÞXRX¦¤0/à’ è} LáÂÊ›N|øQ#â³ã»cãG!êGÈ?Ë ÈÝY$õzù<âÙ‘KA6/ñ6ˆ)CÙצ²“]÷ÄÙä9þN†pfÜ3{‡)>^Ie+Î10âÄXù`Ç@Ÿè?‘·yÉÚ!ÜöÝÆlø”™IV|Š^7ú€&¨’×} ñ¡ú¸>iø“iðfôÓ(¦;+§ OɈåvO±ë²AÙÝІ=ïæ?ƒeü§©êü´œ=?Å|MUwo{Я†²1qS;:9#L1HRi %”`¡ }“¡©ø“*,· *0,ÊÌgê>,ŤºúC4|“¡Ù‘þN†pfÜ3{‡)>^Ie+Î10âÄXù`Ç@Ÿè_äSâ™=}Ô2¥¾,o5†%ñ ‰‰K"éG} ˆù%ù‰dÈ—å䙲¢ŽdŒ™„eŒßJ bihÓYÁüMpmØ|I&n6QœXÈy0 É%dy!@6oýáО„|*10òÛ‚øy®2—ËÈ)ä ä #°lx=v4³½¡?ŬWÉmÊ_XH¬½8†âH>HwZv&~>Û±aÇ›”ÄK/¡Œî„—˜FH«P ž´+»0|Yê6êÊ £ŒTl)³êcÆ>ÿ7¦ ÒŽüJgú­ñCQ 2fDa-ÛÉU «Ý„Ô$ÕG¸:Ë£Ev¿Q¾!䬫0ÈgP.GŒ–!˜Ý…Ë {‘ÑH€xp²Ð!6ò¹ãIËÔ”DÔG#î{ïÚó/Ùµ~*lšU6XÐ?kìþšòO'%]ž¨b¢ï£Ý|!ðê혋—:+¨'—•¿mwŒmÙÁÉUø¯ƒËYŒ‹E(2IÚÆßI öÜC«6lx:ê»9U3vxLJ qr¹9¤©²ÁAk P«÷Ô*ßguʇz’gh¹¦T|?ãqôÀª-’-‰6´€ì|>JVÍxíѦö¼¸d`,Åà0ÂÊ@’ÄQ«¯ µœ[HÎWEQ°gÇÌŒ6.>!hYJÓÄ\Xô‚ (4kó»·N‰Z2çK&VÞ?M%e-Œ’îÔÕ“]Ý|k—"YYÖT#ÈÄëb£øöuÂn¦ÎÐWRXžl²C…qlb{- &•EöIâ x~Úí®6rætèö ™ˆsÒd©L> @§ðÝ]Õyö»×cŒ{8¬û^Ϲeãáä§9!KORÏ.NH«°@£^µ™Übn5)2•rðø«%pRÕÑ#Û¾»öóùpžI¥/û£NÜGAó DqDåýAÛ» _½Xó^;ô²ÆÓlŠé¤uv<¼™6Q·caÌ@ļCË@%‡gðÝØ²G}£$ÞÙÆQF]ÃqÅÉØpñž(VDÅU 8¤A« lwã«ëYsyÒEŒV6ÅHrÙ#8à‚ÔX?‘׿ç¯,•3×HÏ vÜ($)[ì²ìäOµë²¯êŽüŸäÔ³#»ÂŒL‘þ ÜXóÖ¹Ö­ôζ·]‹ÃÄÌÉlº‚OPbò5WÊš€¢A_o¹ï²Iµ]èâÛW}›±11æÂÊ–qÓ”/ÄÈ%7ma`’¡A=‚XýõßqȲá£`|ÃËŒ˜«œÞœrÌnœHè‘Gê$ThѪ:•EÉŒÝÆQ x“Ä *0PÄ Ÿ¤‹£az‹o:åŸÉ¤tÂâ›#'}Ξ8RP”Q®êØoóð.ÿ!®k’-ºfß’V¾x;þKf)Ì#‰èwï®1å¶v|I#¾2òSäu¯M·ÍU!;Ÿ¨6éĹú-Ä­ÝѪ®ïZ䄺1lÒÁ åe#"ã…Y Ä>˜ÈÇWd(RHòIÖŸ£1}†|8­D2Æ"š`ò<ÊJ*H,,uuÑ ]~šÌcM–RÉ É9y?»G†Þ€‚S#ÀUT…)BšåÕô쮑JÌ6è7Ì×ÍÏu)éJ°!Æ2Qq bx r$ $X lö‘’’dq—±Ùy»D;Â*ãžCÏ5€íkA»X«ö½ÏQ¼!ÑTmÒ4c>ÚßE.Ë“"H%\p9‚h“%"Á€A"¼jõFkthÙp0S?'?8B?N0 …$±ëîÄþ£ì'F?³„Xƒ Íýµæþ¢u¤zx"äìòç!£UG’û ,‘î.ö׋híÍ´Ø90Å‹Ë-ÛðC^lõãÇU®’NStsO«¹1õÈ4acç'¡ù“V~ÃôÖáJ?ù9Î܆Më6lm$-ÄIIت*lù»þÞ^kYŠ^7LÛ¼Õšö‰g}ÑX^ýYZUHêþ÷}]°]#J:g9&ä#ÈÆ™‘mþIŒ±§l$ l±ß™îõÞMaú×ûÿÉÆ)çÿrÒÁpæÖ€¯/ö•Vµ*m'öf)Ó¯¯÷þH0+J…Þœ¦aÙ>Ç÷ºÑ¿’O½–¾-úÑ?,ž©e†ôÀ4{óçõ#«ÖnçÖëüÿºñý_øÿУ;ÄG"À°_'î?O¿éªŸÉ×zÿ÷_}lÉ“QHZ6Z³×] qÓ“£²MÅY1¬’a0 xRþ¶oßÛ[ù8uþös¤§ßûж„ª¬Œ¿KFþÆŽ±M$ÚìÝí«è×9Œ2,€%Kx¯°ü‡ZôOW÷þÿÁÆ7‹¯ qsÆÓÛyºè×ët5%ù+ïbþ/ëEE4äÑVô vÖýH¯ßWù~ëüãþÁ(šGi¹-ªûõØ¿µùý4_“ ÿdã„^^˜µõH`½ ö$ý€ºüΤjµÖįßz1ò”÷Ìþ ëÏg ©ä;"ÿ]hRÜâ ¿_ùk*ïDiPܘæ3©e<@²*ÏWþzéÉ9-}àÄ%íe±£Õ‰.Šj…žˆ°?2,jÁSd›´™ßøw5óç“rÊQ ¡Q$½¬Gˆ²=°‚ÕHûuãÜÙÊj I¼Ç0®gÑ•ü>äí½`I)¿ÄÍÀ.€7äkÐp] Ï€Kñ;! “.lF+í匪† /ð$$Õ]Ø#Q¤Âl¥~"™r2xÇãxÏ"»éGò‚ƒ^äX#D’Ë|çJRpë.%ò²3›6ìL„ƒØØÕ £ÒO“¡NWÅŒWÉmÍ7­B0 °Rö@*© ù Ù[vt[nÁˆ¹Y ÂI XÎÊn@Y„vêÔÞ±.˳•ñ#<™åLaÐCŠíÙæ¾”ø‰( ÐùµLœ™TïeŒsqñQþû_ü{ã—wUò…ü­Þ3 (–c’ðÈY¸!XWTJ€ ¾ºêè_böIq!ÄxráÇ‘N!|Ée#ÊÈl’M±ö=jû  WÄÈÚ2fÁHR)fˆ˜c`V(ù(%‚‘V,bîΞÉÚ:{c|»|¶4&8ä*Žœcq@’šH4O`þ€+GA³¥Qb!~údÙ0I—‚i%·dªð4RtGØ ¹YKzý~z[.(¨Ì”L'í¥±Š4+>Oi;0ÓZD©P6}µF‰ÓeנУ>wá?¡Ö%ÙÒ‘Îøg¬yGþ3ÿ]rãèéÉùUð?Mmô`óÿÛ?·þZáÍÚ;ðôs—ßõ×­›NrúyV¥nffôõÑ+2ôËO Ä…änýµ$”D[l¶ÝºbF¼»'­!ÈœÐY¹§4k«vpÆ™!ú¢º‚“ê~Z¹Aê~Z–ƀȺÒÙiä.ìjõÕĺ¶Á.%4R²­™<½QûêfZe&Ýq"BUÁ t4sŠF”g|ÌÌìƒÆCæ‚myœœ™ÝEE¹Øs‚ò^ÇßRÜQ’5¿Ä3ºŠç®™´gĉ7 éûWoÐ g9B(ªâîy'°Ä~}jT™n(t{\„,Šüµ¥Ç#/‘#L_ƤzÍíí­®$aòšaÚðáñþºÒŠF\۱Ÿ‚?Mn’2Ûe¹×AuO&>W­Yª+Ö€€¬ËÚŠ¿}T™-duÃF¨Z'ë#é]TŠHYøu)‚'è~ú¸°[Ñ÷b,û^˜€ªØçª•È8¢‚Ìú¿Øù—7-cœô+ƹ¹c£J7±K ¹-Ï$¾B6ÍZF˜Ä0(Xâž·¤a»$Í×Q{ùÔËbµBó3R$ Wº#Ƥ¤‹rÚÝ˃VnµÂNÎÉ":ñ¢×e}O…íÏúk·äqçüQéÇýõíb.a«®Ÿ_DŒˆ‰ J &üiq&2)üG ÍèúÀ‘Þ±’º5‹¡‰,2Û¡Û[¸Ö™šw²D\K‰‰¾†Ÿv ‘¢@~çWâ)‡ÌB)L‚Ï€N¥¤Æ.ˆ98÷fQ@ÑïÁÑ=Ŷ@ʉç©ì‹{êeè¸2Þ¼!ý1"òEøÕ¸²bÀOX3 _#K^‰Mv5³ƒùꪠӳ™¸dãadÅ!Ç%–2¡=A?æí®2ž:Æ[*wÜE–#ùŠ:žXšñ²«ñ#±Š8ÉeEñÿC§’4LÑdøƒ¨cìý´òÄxä€ïøžGÏTžX—ÆÊånør@ÂueB,²»)wv#Ư‘'H˜:¾í˜ñŠâ’X–$“Ù$’O÷Ö_4 ¸¦M P²jÍkJv¬Ë1‹¿b—®ÈèEËWÄÒ5ãgí™9_)— ‘À€H«‘D‹${ë¬iœ¤Úè¶.å³å¬Œ’ñôãþ¬M!ºo¨ Ç]kTŒ\‚-Ëe—LÁ7â HdFB¶Ø"ºîÅ^”‹r,Ù›`Ä‹8#¼Sc1@ìH"ÇJ ‡¸Ò‘‘Iw]– Xó$žã•KÆQ‰P,µ ä¾ëJC)ÒvPê ‚:#±_})äg|í©3FÞò)` p$r ¥ª 6GuÞ”…ÈÓòÐÿ@Ò‘-™þojäBfPqP6EÝF$|xÿüô¤LÙH÷¥±¥ÊæU! H$‰‘”‘`q MŠ¡Ý€/R¢jäOñ  â.Z3i j¢/È]¯9X£b¬N­!r+.é´A‹k³dBë"@ì€ &âû׿ØéH™H2w³ .8ä–‹q!• 1 I…ô Ò‘nGE( ôÒÑ–›3A»`OšØOr¯+ ¤ˆ¢EöëßKD¦>Yc‚&šWˆ¥™˜Ð 'òZ%3,[ÞÙ&4™«BD@“œl¬ Ä€MتØ«Õ-2Nõ·| Ìž )Œ/¤Å¹Ùx×+lU€ ð4ËI»í°í¿Æ%Ë q)ˆ5]wã¯7Ö‚˜eîØ9 •UÞªšñˆ¢ÍH¿¶‚˜K»`Ç›ò1õ ÿvÜCaKWH¢7ãî4Íz˜¹eŽši\""–fc@,ŸÈjZÄàî8›’;âHÍÀÓ+#+@"ÃE‚5DRÓ-™›ƒ—%ˆ ÜT,Ì}€|@:–…13oÛ\G–ÙÑIuxágEY`Iô‹³ß±¯×Ïï¦2R¢\jÉÿ(‚hdd jŠIûQþZT›¤Vã_".4¦¿¨>‚M{’±¢‹oD´‘rÁÓ’QtuŸäX”ùˆQÏê&¼ºº¿×uçZÆUdrYPÈÑ¥qbØê~Z4þ;;[6FÝŠè%dhã/«%/U0:=Žº×®ÅQ䜲z5âçâf8ò7Ð@et*A a€"Áë½n™- “zÛ~Iscœ¼r±Hš8Ù‹0»OøOu]jIRìñ[„â|¹²I M‹ØëçI9òÒ=Ñj0¶(ºŠRhþšÊƒ’´iÍEÑ,ß’=õžº7ÞAðöä2 ò©¯_í^X4ΓºD†I\–bh òN»º[)™˜¬`rxš`ÈT‚E‹Ø êµE»#+* h¹ÌõliI$ŸdŸÈ}µ–›Ñ4ƒrÁÀÄGÉ2(xË‚ s@Wfâ÷uþZëKG9»e²÷=·„–JfPÖ‘–@’ ° t~ÚV…¢"ËÀ›'øa•ZUBÆ.Í^Oät{ìH¯ŽÅ¢É¹àœƒ‚Žêà7Òñ2ƒDD€¬x'ΨNÃuÆÏW;{ ‹2øº£àôA±ÖCGâ­«73ýµ-¸ù_Ë^Nn7-žž)¨èóÌá Uªï^h§'Hô6¢_ À}H̓äjü¢éŠMZ5¾NGy6(Hè_]w÷×XÆRVŽnJ.™¡¦$XÙ€f°£ïBÿé­$ÜlÃ*¶æã®w¢¯eº=ê¬_‹ýµ¨©%d“MÑÑ‹rÛòÕÜD‰Ì»DÊ¢lXÐö½v¦´q´ÃpÂÊF•g`‘”l ’U’I;&µ¹ºG_oŸ"xNJ†*Á”©tAä@ûû뺨£‹v†ç¶q|Ì€†CQ©²XØ·bÏbôéXJÝ;øzÈÝwi2’CÆ}:=|îI¹JϡǞ—`Ü È‹gÊ>«*jè ª²4M×¶½Ôo¾«]ÍÍv3ýoB» È’Àµæî«Çw«†è¹è-ÅÝ¡ L†˜“@Y4Iöú˜;¢9®Áp• "Ÿ§Í Yɺah9!c&sþ=1Eº— ¦(Ï‘! ¤’z 'UE"Ó6N<†9‰ C®‘~Ú8Ó V‡í\Ó6¹2€/éÿýôÆØÎ¨ú†Öû&Í4YqRG$!¹F…¬d 䞇¾·Ç¤rœ®' ÊÝöìIR òiœ´„€  I…š ñ¯QçVô&oˆp!Ìù %oRÀ®€H° ª…Ñ7^ÚÎF±T;wÀÉÊ8QL  ¸ P (‘` #ÞµSMj‰ÁݶýÂGLIù2¨&Ô‹X ‹:óª?N…´'33?W%È ÁUUK3à$ôMzøB™²ò±2p#ÊŠkŽE ޾àø:ç3\iû9ù›Ž*…‚LçVj¯ š€ #À' MuÏ—gFÒ}ùôŠa n2r ýÙ Hº-T €Mö>ãDšÝš¸ý]Ë'(Át „#ÈŠ${€o£ö:µ®Ì龋Aºcf±X2eV@ Wˆ©£Ð4@$X=Z¯dÛc#h¥Ë]ÉÙb—Ò$lÄ7]$ö<þGUÆ^™›´7o„æ@Óãg3!%~¥*T‚E@ ‚<ª£%ìgèºíY| œÆ"õ0—ØòDgÈdú‡Ì›Ã:ªˆæ¯¢§oÍ Ë=jbß²å¢N[DSæMß1c(ý˜…Œ¦»ìýôÂ_c8¯CaÄd$ä€<}i)"JQ4kfA }³¿ ýý5‰vn?áû<—ýgþºåÇÑ×—òGQ?ÖßFÄ¿ö±úë‡7hïÃÑÍQNuÌ×¢KUßßYjÙ¥Ð+´'’y­[Ä•“1äæÍ‘!RzºÖ%<ŽŠ)› á‡ÖªûV²ãJË’º‹¼dãÆùWç­G’‘HcoùUUûkË*ÑJë1‡’/òÖ|²/Ž[tÎc×/ÛL¦\ 7q~¹¿öÔÊfª7#þ7?ý'Où­“þX·9–þÃY®Ap$anN;³{Öñ˜ÉÛwjýu|sc8–m“4©bŽüêxÚDÍñ²+›ÇõÞ¢’ƒ4ãš-¸fœéƒ¨ß@i))2F8£§³@𬒯Ô{7®Ñ‚£”æì×<}$ mj‘Œ˜Ð/µ_a­äŒ;d–>À~údR<·ŸßQ+Ëÿý´¦É~‰,ÃÈ… Dwùh Øõª¯Ñ¢Á8÷#kU» Ù"h€âGCí¥¢Ó³¤u£‘)‘ë¯o¶™hR(ÒÈ|fÙA¤±Ñ:[òuTR#•ä~ÇVë£;kèžõR±höç©L>Œ»¯à_×X—GXyoÏXKFït ǯ¾¦ò£§ð·ýµµßƒó8óþ(ô‹¯Yä{Dèf˜h)†‚˜h)‘'à?¦£èÔ{¬ÙR@>?] ‘›ø{½@扺ԥf†æEêc4*,•ªÕ”]‹¦sbÛ÷H¡ $¥-qÂG\¢$`çüÙGˆ±"ìøŠ4ÜKE·æI3Dƒí!=%ìŽQ»Fi¸ÏFû{üZÖdsHd»SÇ(hàDûޮɚc6¬,¼x$†qJo€Vi;$ä›Tdm§qhdiW•ŽüëžfòŠ,6œÏ—S•{j÷Ö¼SC8».PÉ1*GDŸYñÏ!œq->×–˜†(W“1ï¿óÖ¥Ç4‰«µmÙxÒ¬“µ¤üjÂ-vIÊÄ>\ÙrpˆÊù“©‹r-¥‰´nM3<¤Obüë1㛓,§GÍš¤,‚¡G“­ø§ög8‹ÞpÆL¸ó˃óª°’J &©©ˆ¨Š'Üã] lÅ»mä8;ob0²˜ÁG³a‹è\|›³ö$ƒlÚv¢ÞZí‹"I¯¨¡mdÙ°@±gªûjãñ¡–ìÝüòsÂ#6s169áÁ’/àŸíKYÙJÎà6 Ñ=ö]kn(ŠM"˜ß Í.6v,˜ rÂ:Ì#éè‚j>‡|Oß nü\wc'Tt06|o”¶¯—ûÄÜz?¤‘¬8&ö\ÚèjìøÄäŠý4|q³‘ºü-—.TŸ/Š^)á8¸95H¬ $/QŠ]ɶtWoeÜ=ácÑô¹|Ç1øî¸ñóã»ñí©ãŠè¹¶eÀÙ÷7”šxH'–Hää8ðnD(M’öIðÝ­ÝhÍ6AMËrƒ7ø†E‘‘ŒÑGÉÐÇ›ARI²l’×°i’.,nÏ^!ÊܧÃs$ªÑKHã‘-ÓäÐQùi’&,¾ Ù˜ÿA‰>Û’ceŠd ÐP<€«äÊ´½™¤b› pù,0ØÞ¢Å ‘OH¡X©PÌHø€Ä]Ù A4ÈÓ‰ØÛ[ä¶è0ÝÕÌ0¢DÿzÔÍròöüÙw“+Ä^&ËŠx\0ãP¡‰eˆ@£ª‰¾È#ެyùO“h‰‚ôÊx·á"…]ÙcÕkH6kÚV|,G9·¯+‹@äƒV|Ýùè`“–Ñ´¬âüGŸ6nBü¢ªŒ’( ©«$uj/î:®õÏË«7ã}™bY`X`§pÀU]y6uŸÊÝ’”RBž)~h¸SFU`y4$ù®¼ßZÕ¬(ÃŒ²‡‘‘š#ÆÕIbážÔÙòšï¿oóÔu%]±´ï£Høwz‚°;¿ÚÛº3tÎCü9»MºÈï‹'PÜ–¼“ã•×t:óùw®Râm#Ê”„aü9¼9lŒÌI#n=[!Ð1&ü’@°Ò\Z¤XònÌË´nbÉb²/ ¨,9ßDF¾äv|ûë8Ôûÿt\¾5þû%¶ ÁñÖFŽBRV?Ts Dyº»7çÁþÚ´‘2lÏ6.R„IÒK ÃépY &>{£Þ³”bÝ©4>R‰è ¾^ß–¹6›´uZFy1¤|²H%LŠÊlRÐbì“T:èßuÍ(ÜgsáÜ)Úi2218¢é? yX7ב]yóz×SVg’NÚØY“d´ø9Å6!FI%Vk$ôŸQ (›²5×G]íœ6ʮۛ:dË™’ÐŒ‘´ª±à¶H!5‘@“VlX6¢r•>6Æÿ? ‘—*Y#lgôøÌC_/1êú ‚u%%šŒ^G‘<äN^ -GÏdŸ¾¼qŸy÷=npKÝr4¬m‡dUë¬Âq~¿ïÿÑg>½—,l{×í[±ØYc !2ú õwí­A¸²Id¨ô“:î›\‹ŒêL±2ŽüöÂIž)'mÛñòñþc1±˜Ë"/Ðî.F’l$ÐÐ[mi&¶7'#9q±d-‡–¥¦¤:${‹þš‘}¢KhÑ<{àÛàÁÒ¸¸Èt•}Hã³ÅAbb¬Õ٠몤smŠÞ6ì™f)‰%>,ii"…Rš_ÔBú,žá³SÁ¸×A#F±2<ˆè,TÝÄß_j½UÉYhðreÞ£ÈS,hHÓÊ¥*¡‰ :°{#F¨–Çm©—á˜eÛdŠ9eŒÈAjƒ,‚G^<ÑëWXdJ6%yH:Ê®™·khóü/"^á·ÆM‘ÍW‘®ãPmcÉ)$9éÌ…xš¯Šï^i¸Îm¶zc”b’EäV JøqFƒÝíwýµ®>HÆ=ôc’”°;de$ñʤú€°+ØH«¾üŸo&ý«ZŒàáBP’•Åðgù‰@œŒÊÜ…Qº]Ù&É¡àõ¹Mc£œ`ܺ9ónùrÀ`‡ ¤TÓõ ;èY5úµ‰ò'[ÙÒM]­ÇÎÈÄnI”A$¦¢H ‚±X#±¤yc·þšŽROý³Ù|ñ&~ð¤ÀLò³)slIÉ÷ ôØí¯LyÖ-ìóKÅä–Œ?o“âmÃmÌ•}GqõuDþ`kœ¤×ųq‚$&8…ùxï¾õä¥Mßÿ§®Ý­“bÇœK,€²‰ã‘•#’.É!@tžÎ½œ|‹'$“;¸[.rn‹.DmÆ,‰dŽbÈFäB€ 7od?Ð:ôdỷ±níÓüäE^=¹ õYÁx HPÜKC½FÒF’mÑáŸ1c£2§â<»¾ßÿ×^\¡izÙêÆTß½H{s4Gé¯Å]ùý¿ôÓ(¹„”L‡uuÏ8±Ø5[±¯üµ‰ÔäÙ¨9A$iÅÏVs²ÇɲȯoÎõ¨Ê1™’”¤Ð¹‰%²Ó*2æ‡z­sJ8$ä§¢'ÌLÌF‹ÕE, =ƒïùWÚ¾úë”Tuú9c'-™³³q1%@²!_˜¾G’I>ä“û®™¦Ì`Ò·Ì\i#…eFAÈZô€ìYñd×¹ó¦›_äŠý—]þ&˜©’>¢IØ^Wk¯oÚŽ¯f·ZÛ¶FDŽeE<”Å!‹‚hÝEÿ媚¶ìËOFeÜ—=³1¸ýLHR}zå$¤ìéŠ5¬ 6<†IáW$R$Žï°*ÏUßí¢ãŠ‹Ø|Ë£Ÿ"ãpIW! K ±Ç¾»÷½m$‘nͲî"ExæR¿2$ wIFehÔ:ž6VbÉêɯ$é’ºñ$ç♈“"6þ@PÜH^A¹Ut:]Ö™+ªÜ1YIÊPK!IX, &€=ù#óý4ÉX­Q0n8AŒ¢eV3€{,O !¼Y Û³cKˆ©ŽÈËÈ–“ KÄ6C¬…d²A@¬@`‘gËŠ%I•›/gÇ΃qæ—Ô_•…B4[6Ç¡^ ñ=ö)”lÖ7lùx¸ø…&2$†BÒ´å9HÞK}$Šöúi”o³*ú6¶f8ŒËÉBýÁÕrUÙœ]ôPnXUËæTŠûE8š|r"]Û0 ä-{w©œ°¡6V=ãm•ý4È^Dô/EÉÊøä*êÝ)½nѮˋ:¦1aký?ç¡m ëì}]&fή'Íq:ç.Α¶sþî+úÏ×\¸]E¹UQÓä9q×ZÕœmœ‰m²”ãÁ×›•ìôñœÊ*nƹi£°>õ¦þÁhÑån*A½²i#>fÞñ³H^«¾µ™FÆVg3Ï‚0KáG¾¹Ûz-%³£·mQ˜}L´óØí4ŽsäfµÀÀ_þã[Åó‘eÄÃò"ýÆ­"dˬËØ…m) ™"£­*Øô- TÈXöí¨Ý‚9WøOí¨ õìm LÌ=ôÁœU•$þZº¢’DˆìÞú–—e¦ÄœŒƒÇi}ÉÖ[o£J1]Œ#<ÞݾçU%ìË“½ Ö¸Ðûj½ hÈñ U×ßVØhɺ5ª‚Mb] d$ضÅ#¡SX#ÏßO@êü)_8À}µÓƒò8sþ'£@ ï^Ö‘äÝÔ¤KiH\ƒJBäC"ôI!¶D„#òÕ*± u‡Ù½¢u² ×Z«²Ü…eÌØØ2‹ XÔœ¨°Vs†é¸!@¿a‡®YÉ0‰i7,èd%€" output_handle.puts "" # Template directive: For navbar. elsif template_line =~ /POKI_PUT_NAVBAR_HERE/ output_handle.puts(template_line.sub('POKI_PUT_NAVBAR_HERE', '')) generate_navbar(overall_config, section_config, page_config, output_html_name, output_handle) # Template directive: Page titles in browser window title, as well as page-content title. elsif template_line =~ /POKI_PUT_TITLE_HERE/ output_handle.puts(template_line.sub('POKI_PUT_TITLE_HERE', page_title)) # Template directive: Page body. elsif template_line =~ /POKI_PUT_BODY_HERE/ output_handle.puts(template_line.sub('POKI_PUT_BODY_HERE', '')) generate_page_body(overall_config, section_config, page_config, input_html_path, output_handle) # Absent any other directives, copy the template file to the output file. else output_handle.write(template_line) end end FileUtils.chmod($output_file_mode_after_edit, output_html_name) puts "Generated #{output_html_name}" end end # ---------------------------------------------------------------- def generate_navbar(overall_config, section_config, page_config, output_html_name, output_handle) template_file_name = overall_config.fetch('template_file_name') output_handle.puts "" for other_section_config in overall_config.fetch('sections') other_section_internal_name = other_section_config.fetch('internal_name') other_section_external_name = other_section_config.fetch('external_name') font_weight = 'normal' if (other_section_internal_name == section_config.fetch('internal_name')) font_weight = 'bold' end output_handle.puts(""); output_handle.puts(" #{other_section_external_name}"); output_handle.puts(""); end for other_section_config in overall_config.fetch('sections') other_section_internal_name = other_section_config.fetch('internal_name') other_section_external_name = other_section_config.fetch('external_name') display = 'none' if (other_section_internal_name == section_config.fetch('internal_name')) display = 'block' end output_handle.puts("

") end end # ---------------------------------------------------------------- def generate_page_body(overall_config, section_config, page_config, input_html_path, output_handle) output_handle.puts "" File.readlines(input_html_path).each do |content_line| # Page-content directive: table of contents. if content_line =~ /POKI_PUT_TOC_HERE/ generate_toc(overall_config, section_config, page_config, input_html_path, output_handle) # Page-content directive: include other file (do HTML escapes) elsif content_line =~ /POKI_INCLUDE_ESCAPED\(([^)]+)\)HERE/ included_file_name = $1 include_escaped(included_file_name, output_handle) # Page-content directive: include other file (do HTML escapes) and print its output elsif content_line =~ /POKI_INCLUDE_AND_RUN_ESCAPED\(([^)]+)\)HERE/ included_file_name = $1 cmd = File.readlines(included_file_name).join('') run_command(cmd, output_handle, true) # Page-content directive: run a script which generates HTML and print its output elsif content_line =~ /POKI_RUN_UNESCAPED\(([^)]+)\)HERE/ included_file_name = $1 cmd = File.readlines(included_file_name).join('') run_command(cmd, output_handle, false) # Page-content directive: include other file (do HTML escapes) and print its output elsif content_line =~ /POKI_RUN_CONTENT_GENERATOR\(([^)]+)\)HERE/ cmd = $1 run_content_generator(cmd, output_handle) # Page-content directive: format as if included from a file. elsif content_line =~ /POKI_CARDIFY\(([^)]+)\)HERE/ content_line = $1 cardify(content_line, output_handle, true) elsif content_line =~ /POKI_CARDIFY{{([^)]+)}}HERE/ content_line = $1 cardify(content_line, output_handle, true) elsif content_line =~ /POKI_CARDIFY{{(.+)}}HERE/ content_line = $1 cardify(content_line, output_handle, true) # Page-content directive: include other file (do HTML escapes) elsif content_line =~ /POKI_RUN_COMMAND{{(.+)}}HERE/ cmd = $1 run_command(cmd, output_handle, true) # Page-content directive: include other file (do HTML escapes) elsif content_line =~ /POKI_RUN_COMMAND_TOLERATING_ERROR{{(.+)}}HERE/ cmd = $1 run_command_tolerating_error(cmd, output_handle) # Page-content directive: link to sibling in pageset. elsif content_line =~ /POKI_PUT_LINK_FOR_PAGE\(([^)]+)\)HERE/ other_page_link = $1 other_page_name = other_page_link.sub(/#.*/, '') other_page_title = nil for loop_section_config in overall_config.fetch('sections') for loop_page_config in loop_section_config.fetch('pages') loop_page_file_name = loop_page_config['file_name'] # nullable loop_page_external_name = loop_page_config.fetch('external_name') if other_page_name == loop_page_file_name other_page_title = loop_page_external_name end end end if other_page_title.nil? raise "Couldn't find page title for \"#{other_page_name}\"." end href = "#{other_page_title}" content_line.sub!(/POKI_PUT_LINK_FOR_PAGE\([^)]+\)HERE/, href) output_handle.puts(content_line) # Page-content directive: automark

,

, etc. with jump-to tags so they can be found by the # table of contents. Example:

Title

becomes

Title

elsif content_line =~ /(.*)<\/h[1-9]>/ tag = $2.strip # If there's a section with a space in it (e.g. "Naming conventions") then # make the href text the same but underscorify the link itself (e.g. # "Naming_conventions"). output_handle.print("") output_handle.write(content_line) else output_handle.write(content_line) end end end # ---------------------------------------------------------------- def generate_toc(overall_config, section_config, page_config, input_html_path, output_handle) # Read all the

,

,

, etc. from the current file and create internal links tags = [] depths = {} File.readlines(input_html_path).each do |scan_line| if scan_line =~ /^(.*)<\/h[1-9]>/ depth = $1 tag = $2.strip tags << tag depths[tag] = depth.to_i - 1 end end page_title = page_config.fetch('external_name') page_subtitle = page_config['external_subname'] # nullable output_handle.puts('") output_handle.puts("

") end # ---------------------------------------------------------------- def include_escaped(included_file_name, output_handle) write_card(File.readlines(included_file_name), output_handle, true) end # ---------------------------------------------------------------- def run_command(cmd, output_handle, do_escape) cmd_output = `#{cmd} 2>&1` status = $?.to_i if status != 0 raise "\"#{cmd}\" exited with non-zero code #{status}." end write_card(['$ '+cmd] + cmd_output.split(/\n/), output_handle, do_escape) end # ---------------------------------------------------------------- def run_command_tolerating_error(cmd, output_handle) cmd_output = `#{cmd} 2>&1` write_card(['$ '+cmd] + cmd_output.split(/\n/), output_handle, true) end # ---------------------------------------------------------------- def run_content_generator(cmd, output_handle) cmd_output = `#{cmd} 2>&1` status = $?.to_i if status != 0 raise "\"#{cmd}\" exited with non-zero code #{status}." end output_handle.puts(cmd_output) end # ---------------------------------------------------------------- def cardify(content_line, output_handle, do_escape) write_card([content_line], output_handle, do_escape) end # ---------------------------------------------------------------- def write_card(content_lines, output_handle, do_escape) output_handle.puts('

') output_handle.puts('

') output_handle.puts('
')
  content_lines.each do |content_line|
    if do_escape
      output_handle.puts(html_escape_line(content_line))
    else
      output_handle.puts(content_line)
    end
  end
  output_handle.puts('
') output_handle.puts('
') output_handle.puts('

') end # ---------------------------------------------------------------- def html_escape_line(line) line.gsub("&", "&").gsub("<", "<").gsub(">", ">").rstrip end # ================================================================ # Top-down programming style, please. main() miller-5.6.2/doc/poki-cfg.json000066400000000000000000000071261354153536500161670ustar00rootroot00000000000000{ "template_file_name": "template.html", "content_file_prefix": "content-for-", "main_title": "Miller", "sections": [ { "external_name": "Overview", "internal_name": "overview", "pages": [ { "external_name": "About", "file_name": "index.html" }, { "external_name": "10-minute intro", "file_name": "10-min.html" }, { "external_name": "File formats", "file_name": "file-formats.html" }, { "external_name": "Unix-toolkit context", "file_name": "feature-comparison.html" }, { "external_name": "Record-hetrogeneity", "file_name": "record-heterogeneity.html" }, { "external_name": "Internationalization", "file_name": "internationalization.html" } ] }, { "external_name": "Using", "internal_name": "using", "pages": [ { "external_name": "FAQ", "file_name": "faq.html" }, { "external_name": "Mixing with other languages", "file_name": "data-sharing.html" }, { "external_name": "Cookbook part 1", "external_subname": "Common patterns", "file_name": "cookbook.html" }, { "external_name": "Cookbook part 2", "external_subname": "Random things, and some math", "file_name": "cookbook2.html" }, { "external_name": "Cookbook part 3", "external_subname": "Stats with and without out-of-stream variables", "file_name": "cookbook3.html" }, { "external_name": "Data-diving examples", "file_name": "data-examples.html" } ] }, { "external_name": "Reference", "internal_name": "reference", "pages": [ { "external_name": "Main reference", "file_name": "reference.html" }, { "external_name": "Verbs reference", "file_name": "reference-verbs.html" }, { "external_name": "DSL reference", "file_name": "reference-dsl.html" }, { "external_name": "Manpage", "file_name": "manpage.html" }, { "external_name": "Documents by release", "file_name": "release-docs.html" }, { "external_name": "Installation", "file_name": "build.html" } ] }, { "external_name": "Background", "internal_name": "background", "pages": [ { "external_name": "Why?", "file_name": "why.html" }, { "external_name": "Why C?", "file_name": "whyc.html" }, { "external_name": "Why C: details", "file_name": "whyc-details.html" }, { "external_name": "Why call it Miller?", "file_name": "etymology.html" }, { "external_name": "How original is Miller?", "file_name": "originality.html" }, { "external_name": "Performance", "file_name": "performance.html" } ] }, { "external_name": "Repository", "internal_name": "repository", "pages": [ { "external_name": "Contact information", "file_name": "contact.html" }, { "external_name": "Github repo", "link": "https://github.com/johnkerl/miller" } ] } ] } miller-5.6.2/doc/poki.cfg000066400000000000000000000031501354153536500152110ustar00rootroot00000000000000sep:overview Overview index.html About Miller 10-min.html Miller in 10 minutes file-formats.html File formats feature-comparison.html Miller features in the context of the Unix toolkit record-heterogeneity.html Record-heterogeneity internationalization.html Internationalization sep:howto Using Miller faq.html FAQ data-sharing.html Sharing data with other languages cookbook.html Cookbook part 1 cookbook2.html Cookbook part 2 cookbook3.html Cookbook part 3 data-examples.html Data-diving examples sep:details Reference manpage.html Manpage reference.html Reference reference-verbs.html Reference: Verbs reference-dsl.html Reference: DSL release-docs.html Documents by release build.html Installation, portability, dependencies, and testing sep:background Background why.html Why? whyc.html Why C? etymology.html Why call it Miller? originality.html How original is Miller? performance.html Performance sep:tbc Repository to-do.html Things to do contact.html Contact information ext:https://github.com/johnkerl/miller GitHub repo miller-5.6.2/doc/polyglot-dkvp-io/000077500000000000000000000000001354153536500170075ustar00rootroot00000000000000miller-5.6.2/doc/polyglot-dkvp-io/dkvp_io.py000066400000000000000000000027001354153536500210130ustar00rootroot00000000000000#!/usr/bin/env python # ================================================================ # Example of DKVP I/O using Python. # # Key point: Use Miller for what it's good at; pass data into/out of tools in # other languages to do what they're good at. # # bash$ python -i dkvp_io.py # # # READ # >>> map = dkvpline2map('x=1,y=2', '=', ',') # >>> map # OrderedDict([('x', '1'), ('y', '2')]) # # # MODIFY # >>> map['z'] = map['x'] + map['y'] # >>> map # OrderedDict([('x', '1'), ('y', '2'), ('z', 3)]) # # # WRITE # >>> line = map2dkvpline(map, '=', ',') # >>> line # 'x=1,y=2,z=3' # # ================================================================ import re import collections # ---------------------------------------------------------------- # ips and ifs (input pair separator and input field separator) are nominally '=' and ','. def dkvpline2map(line, ips, ifs): pairs = re.split(ifs, line) map = collections.OrderedDict() for pair in pairs: key, value = re.split(ips, pair, 1) # Type inference: try: value = int(value) except: try: value = float(value) except: pass map[key] = value return map # ---------------------------------------------------------------- # ops and ofs (output pair separator and output field separator) are nominally '=' and ','. def map2dkvpline(map , ops, ofs): line = '' pairs = [] for key in map: pairs.append(str(key) + ops + str(map[key])) return str.join(ofs, pairs) miller-5.6.2/doc/polyglot-dkvp-io/dkvp_io.rb000066400000000000000000000025071354153536500207730ustar00rootroot00000000000000#!/usr/bin/env ruby # ================================================================ # Example of DKVP I/O using Ruby. # # Key point: Use Miller for what it's good at; pass data into/out of tools in # other languages to do what they're good at. # # bash$ irb -I. -r dkvp_io.rb # # # READ # irb(main):001:0> map = dkvpline2map('x=1,y=2', '=', ',') # => {"x"=>"1", "y"=>"2"} # # # MODIFY # irb(main):001:0> map['z'] = map['x'] + map['y'] # => 3 # # # WRITE # irb(main):002:0> line = map2dkvpline(map, '=', ',') # => "x=1,y=2,z=3" # # ================================================================ # ---------------------------------------------------------------- # ips and ifs (input pair separator and input field separator) are nominally '=' and ','. def dkvpline2map(line, ips, ifs) map = {} line.split(ifs).each do |pair| (k, v) = pair.split(ips, 2) # Type inference: begin v = Integer(v) rescue ArgumentError begin v = Float(v) rescue ArgumentError # Leave as string end end map[k] = v end map end # ---------------------------------------------------------------- # ops and ofs (output pair separator and output field separator) are nominally '=' and ','. def map2dkvpline(map, ops, ofs) map.collect{|k,v| k.to_s + ops + v.to_s}.join(ofs) end miller-5.6.2/doc/polyglot-dkvp-io/example.py000066400000000000000000000016001354153536500210110ustar00rootroot00000000000000#!/usr/bin/env python import sys import re import copy import dkvp_io while True: # Read the original record: line = sys.stdin.readline().strip() if line == '': break map = dkvp_io.dkvpline2map(line, '=', ',') # Drop a field: map.pop('x') # Compute some new fields: map['ab'] = map['a'] + map['b'] map['iy'] = map['i'] + map['y'] # Add new fields which show type of each already-existing field: omap = copy.copy(map) # since otherwise the for-loop will modify what it loops over keys = omap.keys() for key in keys: # Convert "" to just "int", etc.: type_string = str(map[key].__class__) type_string = re.sub("", "", type_string) map['t'+key] = type_string # Write the modified record: print(dkvp_io.map2dkvpline(map, '=', ',')) miller-5.6.2/doc/polyglot-dkvp-io/example.rb000066400000000000000000000007461354153536500207760ustar00rootroot00000000000000#!/usr/bin/env ruby require 'dkvp_io' ARGF.each do |line| # Read the original record: map = dkvpline2map(line.chomp, '=', ',') # Drop a field: map.delete('x') # Compute some new fields: map['ab'] = map['a'] + map['b'] map['iy'] = map['i'] + map['y'] # Add new fields which show type of each already-existing field: keys = map.keys keys.each do |key| map['t'+key] = map[key].class end # Write the modified record: puts map2dkvpline(map, '=', ',') end miller-5.6.2/doc/programs/000077500000000000000000000000001354153536500154215ustar00rootroot00000000000000miller-5.6.2/doc/programs/mand.mlr000066400000000000000000000051131354153536500170540ustar00rootroot00000000000000# Mandelbrot set generator: simple example of Miller DSL as programming language. begin { # Set defaults @rcorn = -2.0; @icorn = -2.0; @side = 4.0; @iheight = 50; @iwidth = 100; @maxits = 100; @levelstep = 5; @chars = "@X*o-."; # Palette of characters to print to the screen. @verbose = false; @do_julia = false; @jr = 0.0; # Real part of Julia point, if any @ji = 0.0; # Imaginary part of Julia point, if any } # Here, we can override defaults from an input file (if any). In Miller's # put/filter DSL, absent-null right-hand sides result in no assignment so we # can simply put @rcorn = $rcorn: if there is a field in the input like # 'rcorn = -1.847' we'll read and use it, else we'll keep the default. @rcorn = $rcorn; @icorn = $icorn; @side = $side; @iheight = $iheight; @iwidth = $iwidth; @maxits = $maxits; @levelstep = $levelstep; @chars = $chars; @verbose = $verbose; @do_julia = $do_julia; @jr = $jr; @ji = $ji; end { if (@verbose) { print "RCORN = ".@rcorn; print "ICORN = ".@icorn; print "SIDE = ".@side; print "IHEIGHT = ".@iheight; print "IWIDTH = ".@iwidth; print "MAXITS = ".@maxits; print "LEVELSTEP = ".@levelstep; print "CHARS = ".@chars; } # Iterate over a matrix of rows and columns, printing one character for each cell. for (int ii = @iheight-1; ii >= 0; ii -= 1) { num pi = @icorn + (ii/@iheight) * @side; for (int ir = 0; ir < @iwidth; ir += 1) { num pr = @rcorn + (ir/@iwidth) * @side; printn get_point_plot(pr, pi, @maxits, @do_julia, @jr, @ji); } print; } } # This is a function to approximate membership in the Mandelbrot set (or Julia # set for a given Julia point if do_julia == true) for a given point in the # complex plane. func get_point_plot(pr, pi, maxits, do_julia, jr, ji) { num zr = 0.0; num zi = 0.0; num cr = 0.0; num ci = 0.0; if (!do_julia) { zr = 0.0; zi = 0.0; cr = pr; ci = pi; } else { zr = pr; zi = pi; cr = jr; ci = ji; } int iti = 0; bool escaped = false; num zt = 0; for (iti = 0; iti < maxits; iti += 1) { num mag = zr*zr + zi+zi; if (mag > 4.0) { escaped = true; break; } # z := z^2 + c zt = zr*zr - zi*zi + cr; zi = 2*zr*zi + ci; zr = zt; } if (!escaped) { return "."; } else { # The // operator is Miller's (pythonic) integer-division operator int level = (iti // @levelstep) % strlen(@chars); return substr(@chars, level, level); } } miller-5.6.2/doc/programs/mand.sh000066400000000000000000000033201354153536500166720ustar00rootroot00000000000000#!/bin/bash iheight=$(stty size | mlr --nidx --fs space cut -f 1) iwidth=$(stty size | mlr --nidx --fs space cut -f 2) if [ "$1" = "1" ]; then echo "rcorn=-1.787582,icorn=-0.000002,side=0.000004,maxits=1000,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = "2" ]; then echo "rcorn=-0.162950,icorn=+1.026100,side=0.000200,maxits=100000,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = "3" ]; then echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 4 ]; then echo "do_julia=true,jr= 0.35,ji=0.35,maxits=1000,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 5 ]; then echo "do_julia=true,jr= 0.0,ji=0.63567,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 6 ]; then echo "do_julia=true,jr= 0.4,ji=0.34745,maxits=1000,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 7 ]; then echo "do_julia=true,jr= 0.36,ji=0.36,maxits=80,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 8 ]; then echo "do_julia=true,jr=-0.55,ji=0.55,maxits=100,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 9 ]; then echo "do_julia=true,jr=-0.51,ji=0.51,maxits=1000,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 10 ]; then echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.3,icorn=-0.3,side=0.6,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 11 ]; then echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.6,icorn=-0.6,side=.2,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 12 ]; then echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.75,icorn=-0.03125,side=.0625,iheight=$iheight,iwidth=$iwidth" elif [ "$1" = 13 ]; then echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.75,icorn=-0.01,side=.02,iheight=$iheight,iwidth=$iwidth" else echo "iheight=$iheight,iwidth=$iwidth" fi | mlr put -f programs/mand.mlr miller-5.6.2/doc/programs/sieve.mlr000066400000000000000000000015501354153536500172510ustar00rootroot00000000000000# ================================================================ # Sieve of Eratosthenes: simple example of Miller DSL as programming language. # ================================================================ # Put this in a begin-block so we can do either # mlr -n put -q -f name-of-this-file.mlr # or # mlr -n put -q -f name-of-this-file.mlr -e '@n = 200' # i.e. 100 is the default upper limit, and another can be specified using -e. begin { @n = 100; } end { for (int i = 0; i <= @n; i += 1) { @s[i] = true; } @s[0] = false; # 0 is neither prime nor composite @s[1] = false; # 1 is neither prime nor composite # Strike out multiples for (int i = 2; i <= @n; i += 1) { for (int j = i+i; j <= @n; j += i) { @s[j] = false; } } # Print survivors for (int i = 0; i <= @n; i += 1) { if (@s[i]) { print i; } } } miller-5.6.2/doc/record-heterogeneity.html000066400000000000000000000306311354153536500206070ustar00rootroot00000000000000 Record-hetrogeneity

We think of CSV tables as rectangular: if there are 17 columns in the header then there are 17 columns for every row, else the data have a formatting error.

But heterogeneous data abound (today’s no-SQL databases for example). Miller handles this.

For I/O

CSV and pretty-print

Miller simply prints a newline and a new header when there is a schema change. When there is no schema change, you get CSV per se as a special case. Likewise, Miller reads heterogeneous CSV or pretty-print input the same way. The difference between CSV and CSV-lite is that the former is RFC4180-compliant, while the latter readily handles heterogeneous data (which is non-compliant). For example:

$ cat data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false

$ mlr --ocsvlite cat data/het.dkvp
resource,loadsec,ok
/path/to/file,0.45,true

record_count,resource
100,/path/to/file

resource,loadsec,ok
/path/to/second/file,0.32,true

record_count,resource
150,/path/to/second/file

resource,loadsec,ok
/some/other/path,0.97,false

$ mlr --opprint cat data/het.dkvp
resource      loadsec ok
/path/to/file 0.45    true

record_count resource
100          /path/to/file

resource             loadsec ok
/path/to/second/file 0.32    true

record_count resource
150          /path/to/second/file

resource         loadsec ok
/some/other/path 0.97    false

Miller handles explicit header changes as just shown. If your CSV input contains ragged data — if there are implicit header changes — you can use --allow-ragged-csv-input (or keystroke-saver --ragged). For too-short data lines, values are filled with empty string; for too-long data lines, missing field names are replaced with positional indices (counting up from 1, not 0), as follows:

$ cat data/ragged.csv
a,b,c
1,2,3
4,5
6,7,8,9

$ mlr --icsv --oxtab --allow-ragged-csv-input cat data/ragged.csv
a 1
b 2
c 3

a 4
b 5
c

a 6
b 7
c 8
4 9

You may also find Miller’s group-like feature handy (see also Main reference):

$ mlr --ocsvlite group-like data/het.dkvp
resource,loadsec,ok
/path/to/file,0.45,true
/path/to/second/file,0.32,true
/some/other/path,0.97,false

record_count,resource
100,/path/to/file
150,/path/to/second/file

$ mlr --opprint group-like data/het.dkvp
resource             loadsec ok
/path/to/file        0.45    true
/path/to/second/file 0.32    true
/some/other/path     0.97    false

record_count resource
100          /path/to/file
150          /path/to/second/file

Key-value-pair, vertical-tabular, and index-numbered formats

For these formats, record-heterogeneity comes naturally:

$ cat data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false

$ mlr --onidx --ofs ' ' cat data/het.dkvp
/path/to/file 0.45 true
100 /path/to/file
/path/to/second/file 0.32 true
150 /path/to/second/file
/some/other/path 0.97 false

$ mlr --oxtab cat data/het.dkvp
resource /path/to/file
loadsec  0.45
ok       true

record_count 100
resource     /path/to/file

resource /path/to/second/file
loadsec  0.32
ok       true

record_count 150
resource     /path/to/second/file

resource /some/other/path
loadsec  0.97
ok       false

$ mlr --oxtab group-like data/het.dkvp
resource /path/to/file
loadsec  0.45
ok       true

resource /path/to/second/file
loadsec  0.32
ok       true

resource /some/other/path
loadsec  0.97
ok       false

record_count 100
resource     /path/to/file

record_count 150
resource     /path/to/second/file

For processing

Miller operates on specified fields and takes the rest along: for example, if you are sorting on the count field then all records in the input stream must have a count field but the other fields can vary, and moreover the sorted-on field name(s) don’t need to be in the same position on each line:

$ cat data/sort-het.dkvp
count=500,color=green
count=600
status=ok,count=250,hours=0.22
status=ok,count=200,hours=3.4
count=300,color=blue
count=100,color=green
count=450

$ mlr sort -n count data/sort-het.dkvp
count=100,color=green
status=ok,count=200,hours=3.4
status=ok,count=250,hours=0.22
count=300,color=blue
count=450
count=500,color=green
count=600

miller-5.6.2/doc/reference-dsl.html000066400000000000000000005115471354153536500172100ustar00rootroot00000000000000 DSL reference

DSL reference
• Overview
• Syntax
    • Expression formatting
    • Expressions from files
    • Semicolons, commas, newlines, and curly braces
• Variables
    • Built-in variables
    • Field names
    • Positional field names
    • Out-of-stream variables
    • Indexed out-of-stream variables
    • Local variables
    • Map literals
    • Type-checking
        • Type-test and type-assertion expressions
        • Type-declarations for local variables, function parameter, and function return values
    • Null data: empty and absent
    • Aggregate variable assignments
    • Keywords for filter and put
• Operator precedence
• Operator and function semantics
• Control structures
    • Pattern-action blocks
    • If-statements
    • While and do-while loops
    • For-loops
        • Key-only for-loops
        • Key-value for-loops
        • C-style triple-for loops
    • Begin/end blocks
• Output statements
    • Print statements
    • Dump statements
    • Tee statements
    • Redirected-output statements
    • Emit statements
    • Multi-emit statements
    • Emit-all statements
• Unset statements
• Filter statements
• Built-in functions for filter and put
• User-defined functions and subroutines
    • User-defined functions
    • User-defined subroutines
• Errors and transparency
• A note on the complexity of Miller’s expression language

Overview

Here’s comparison of verbs and put/filter DSL expressions:
Example:

$ mlr stats1 -a sum -f x -g a data/small
a=pan,x_sum=0.346790
a=eks,x_sum=1.140079
a=wye,x_sum=0.777892

  • Verbs are coded in C
  • They run a bit faster
  • They take fewer keystrokes
  • There is less to learn
  • Their customization is limited to each verb’s options
Example:

$ mlr  put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small
a=pan,x_sum=0.346790
a=eks,x_sum=1.140079
a=wye,x_sum=0.777892

  • You get to write your own DSL expressions
  • They run a bit slower
  • They take more keystrokes
  • There is more to learn
  • They are highly customizable

Please see here for information on verbs other than put and filter.

The essential usages of mlr filter and mlr put are for record-selection and record-updating expressions, respectively. For example, given the following input data:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

you might retain only the records whose a field has value eks:

$ mlr filter '$a == "eks"' data/small
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463

or you might add a new field which is a function of existing fields:

$ mlr put '$ab = $a . "_" . $b ' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ab=pan_pan
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ab=eks_pan
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ab=wye_wye
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ab=eks_wye
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,ab=wye_pan

The two verbs mlr filter and mlr put are essentially the same. The only differences are:

  • Expressions sent to mlr filter must end with a boolean expression, which is the filtering criterion;
  • mlr filter expressions may not reference the filter keyword within them; and
  • mlr filter expressions may not use tee, emit, emitp, or emitf.

All the rest is the same: in particular, you can define and invoke functions and subroutines to help produce the final boolean statement, and record fields may be assigned to in the statements preceding the final boolean statement.

There are more details and more choices, of course, as detailed in the following sections.

Syntax

Expression formatting

Multiple expressions may be given, separated by semicolons, and each may refer to the ones before:

$ ruby -e '10.times{|i|puts "i=#{i}"}' | mlr --opprint put '$j = $i + 1; $k = $i +$j'
i j  k
0 1  1
1 2  3
2 3  5
3 4  7
4 5  9
5 6  11
6 7  13
7 8  15
8 9  17
9 10 19

Newlines within the expression are ignored, which can help increase legibility of complex expressions:

$ mlr --opprint put '
  $nf       = NF;
  $nr       = NR;
  $fnr      = FNR;
  $filenum  = FILENUM;
  $filename = FILENAME
' data/small data/small2
a   b   i     x                    y                    nf nr fnr filenum filename
pan pan 1     0.3467901443380824   0.7268028627434533   5  1  1   1       data/small
eks pan 2     0.7586799647899636   0.5221511083334797   5  2  2   1       data/small
wye wye 3     0.20460330576630303  0.33831852551664776  5  3  3   1       data/small
eks wye 4     0.38139939387114097  0.13418874328430463  5  4  4   1       data/small
wye pan 5     0.5732889198020006   0.8636244699032729   5  5  5   1       data/small
pan eks 9999  0.267481232652199086 0.557077185510228001 5  6  1   2       data/small2
wye eks 10000 0.734806020620654365 0.884788571337605134 5  7  2   2       data/small2
pan wye 10001 0.870530722602517626 0.009854780514656930 5  8  3   2       data/small2
hat wye 10002 0.321507044286237609 0.568893318795083758 5  9  4   2       data/small2
pan zee 10003 0.272054845593895200 0.425789896597056627 5  10 5   2       data/small2

$ mlr --opprint filter '($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5)' then stats2 -a corr -f x,y data/medium
x_y_corr
-0.747994

Expressions from files

The simplest way to enter expressions for put and filter is between single quotes on the command line, e.g.

$ mlr --from data/small put '$xy = sqrt($x**2 + $y**2)'
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584

$ mlr --from data/small put 'func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y)'
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584

You may, though, find it convenient to put expressions into files for reuse, and read them using the -f option. For example:

$ cat data/fe-example-3.mlr
func f(a, b) {
  return sqrt(a**2 + b**2)
}
$xy = f($x, $y)

$ mlr --from data/small put -f data/fe-example-3.mlr
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584

If you have some of the logic in a file and you want to write the rest on the command line, you can use the -f and -e options together:

$ cat data/fe-example-4.mlr
func f(a, b) {
  return sqrt(a**2 + b**2)
}

$ mlr --from data/small put -f data/fe-example-4.mlr -e '$xy = f($x, $y)'
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584

A suggested use-case here is defining functions in files, and calling them from command-line expressions.

Another suggested use-case is putting default parameter values in files, e.g. using begin{@count=is_present(@count)?@count:10} in the file, where you can precede that using begin{@count=40} using -e.

Moreover, you can have one or more -f expressions (maybe one function per file, for example) and one or more -e expressions on the command line. If you mix -f and -e then the expressions are evaluated in the order encountered. (Since the expressions are all simply concatenated together in order, don’t forget intervening semicolons: e.g. not mlr put -e '$x=1' -e '$y=2 ...' but rather mlr put -e '$x=1;' -e '$y=2' ....)

Semicolons, commas, newlines, and curly braces

Miller uses semicolons as statement separators, not statement terminators. This means you can write:

mlr put 'x=1'
mlr put 'x=1;$y=2'
mlr put 'x=1;$y=2;'
mlr put 'x=1;;;;$y=2;'

Semicolons are optional after closing curly braces (which close conditionals and loops as discussed below).

$ echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}  $foo = "bar"'
x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar

$ echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}; $foo = "bar"'
x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar

Semicolons are required between statements even if those statements are on separate lines. Newlines are for your convenience but have no syntactic meaning: line endings do not terminate statements. For example, adjacent assignment statements must be separated by semicolons even if those statements are on separate lines:

mlr put '
  $x = 1
  $y = 2 # Syntax error
'

mlr put '
  $x = 1;
  $y = 2 # This is OK
'

Trailing commas are allowed in function/subroutine definitions, function/subroutine callsites, and map literals. This is intended for (although not restricted to) the multi-line case:

$ mlr --csvlite --from data/a.csv put '
  func f(
    num a,
    num b,
  ): num {
    return a**2 + b**2;
  }
  $* = {
    "s": $a + $b,
    "t": $a - $b,
    "u": f(
      $a,
      $b,
    ),
    "v": NR,
  }
'
s,t,u,v
3,-1,5.000000,1
9,-1,41.000000,2

Bodies for all compound statements must be enclosed in curly braces, even if the body is a single statement:

mlr put 'if ($x == 1) $y = 2' # Syntax error

mlr put 'if ($x == 1) { $y = 2 }' # This is OK

Bodies for compound statements may be empty:

mlr put 'if ($x == 1) { }' # This no-op is syntactically acceptable

Variables

Miller has the following kinds of variables:

Built-in variables such as NF, NF, FILENAME, M_PI, and M_E. These are all capital letters and are read-only (although some of them change value from one record to another).

Fields of stream records, accessed using the $ prefix. These refer to fields of the current data-stream record. For example, in echo x=1,y=2 | mlr put '$z = $x + $y', $x and $y refer to input fields, and $z refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as $*.

Out-of-stream variables accessed using the @ prefix. These refer to data which persist from one record to the next, including in begin and end blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as @*.

Local variables are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and explicitly declared local variables.

Keywords are not variables, but since their names are reserved, you cannot use these names for local variables.

Built-in variables

These are written all in capital letters, such as NR, NF, FILENAME, and only a small, specific set of them is defined by Miller.

Namely, Miller supports the following five built-in variables for filter and put, all awk-inspired: NF, NR, FNR, FILENUM, and FILENAME, as well as the mathematical constants M_PI and M_E. Lastly, the ENV hashmap allows read access to environment variables, e.g. ENV["HOME"] or ENV["foo_".$hostname].

$ mlr filter 'FNR == 2' data/small*
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533
a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134

$ mlr put '$fnr = FNR' data/small*
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,fnr=1
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,fnr=2
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,fnr=3
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,fnr=4
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,fnr=5
1=a,2=b,3=i,4=x,5=y,fnr=1
1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533,fnr=2
1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797,fnr=3
1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776,fnr=4
1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463,fnr=5
1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729,fnr=6
a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001,fnr=1
a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134,fnr=2
a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930,fnr=3
a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758,fnr=4
a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627,fnr=5

Their values of NF, NR, FNR, FILENUM, and FILENAME change from one record to the next as Miller scans through your input data stream. The mathematical constants, of course, do not change; ENV is populated from the system environment variables at the time Miller starts and is read-only for the remainder of program execution.

Their scope is global: you can refer to them in any filter or put statement. Their values are assigned by the input-record reader:

$ mlr --csv put '$nr = NR' data/a.csv
a,b,c,nr
1,2,3,1
4,5,6,2

$ mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv
a,b,c,nr
1,2,3,1
1,2,3,1
1,2,3,1
4,5,6,2
4,5,6,2
4,5,6,2

The extent is for the duration of the put/filter: in a begin statement (which executes before the first input record is consumed) you will find NR=1 and in an end statement (which is executed after the last input record is consumed) you will find NR to be the total number of records ingested.

These are all read-only for the mlr put and mlr filter DSLs: they may be assigned from, e.g. $nr=NR, but they may not be assigned to: NR=100 is a syntax error.

Field names

Names of fields within stream records must be specified using a $ in filter and put expressions, even though the dollar signs don’t appear in the data stream itself. For integer-indexed data, this looks like awk’s $1,$2,$3, except that Miller allows non-numeric names such as $quantity or $hostname. Likewise, enclose string literals in double quotes in filter expressions even though they don’t appear in file data. In particular, mlr filter '$x=="abc"' passes through the record x=abc.

If field names have special characters such as . then you can use braces, e.g. '${field.name}'.

You may also use a computed field name in square brackets, e.g.

$ echo a=3,b=4 | mlr filter '$["x"] < 0.5'

$ echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b'
s=green,t=blue,a=3,b=4,green_blue=12

Notes:

The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream.

Their extent is limited to the current record; their scope is the filter or put command in which they appear.

These are read-write: you can do $y=2*$x, $x=$x+1, etc.

Records are Miller’s output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with cut, or records are excluded with filter or put -q, etc. Simply assign a value to a field and it will be output.

Positional field names

Even though Miller’s main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1).

Use $[[3]] to access the name of field 3. More generally, any expression evaluating to an integer can go between $[[ and ]]. Then using a computed field name, $[ $[[3]] ] is the value in the third field. This has the shorter equivalent notation $[[[3]]].

$ mlr cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '$[[3]] = "NEW"' data/small
a=pan,b=pan,NEW=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,NEW=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,NEW=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,NEW=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,NEW=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '$[[[3]]] = "NEW"' data/small
a=pan,b=pan,i=NEW,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=NEW,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=NEW,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=NEW,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '$NEW = $[[NR]]' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=a
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=b
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=i
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=x
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=y

$ mlr put '$NEW = $[[[NR]]]' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=pan
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=pan
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=3
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=0.381399
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=0.863624

$ mlr put '$[[[NR]]] = "NEW"' data/small
a=NEW,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=NEW,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=NEW,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=NEW

Right-hand side accesses to non-existent fields — i.e. with index less than 1 or greater than NF -- return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op.

$ mlr put '$[[6]] = "NEW"' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '$[[[6]]] = "NEW"' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

Out-of-stream variables

These are prefixed with an at-sign, e.g. @sum. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested hashmap: you can do @sum += $quanity, or @sum[$color] += $quanity, or @sum[$color][$shape] += $quanity. The keys for the multi-level hashmap can be any expression which evaluates to string or integer: e.g. @sum[NR] = $a + $b, @sum[$a."-".$b] = $x, etc.

Their names and their values are entirely under your control; they change only when you assign to them.

Just as for field names in stream records, if you want to define out-of-stream variables with special characters such as . then you can use braces, e.g. '@{variable.name}["index"]'.

You may use a computed key in square brackets, e.g.

$ echo s=green,t=blue,a=3,b=4 | mlr put -q '@[$s."_".$t] = $a * $b; emit all'
green_blue=12

Out-of-stream variables are scoped to the put command in which they appear. In particular, if you have two or more put commands separated by then, each put will have its own set of out-of-stream variables:

$ cat data/a.dkvp
a=1,b=2,c=3
a=4,b=5,c=6

$ mlr put '@sum += $a; end {emit @sum}' then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' data/a.dkvp
a=10,b=2,c=3
a=40,b=5,c=6
sum=5
sum=50

Out-of-stream variables’ extent is from the start to the end of the record stream, i.e. every time the put or filter statement referring to them is executed.

Out-of-stream variables are read-write: you can do $sum=@sum, @sum=$sum, etc.

Indexed out-of-stream variables

Using an index on the @count and @sum variables, we get the benefit of the -g (group-by) option which mlr stats1 and various other Miller commands have:

$ mlr put -q '
  @x_count[$a] += 1;
  @x_sum[$a] += $x;
  end {
    emit @x_count, "a";
    emit @x_sum, "a";
  }
' ../data/small
a=pan,x_count=2
a=eks,x_count=3
a=wye,x_count=2
a=zee,x_count=2
a=hat,x_count=1
a=pan,x_sum=0.849416
a=eks,x_sum=1.751863
a=wye,x_sum=0.777892
a=zee,x_sum=1.125680
a=hat,x_sum=0.031442

$ mlr stats1 -a count,sum -f x -g a ../data/small
a=pan,x_count=2,x_sum=0.849416
a=eks,x_count=3,x_sum=1.751863
a=wye,x_count=2,x_sum=0.777892
a=zee,x_count=2,x_sum=1.125680
a=hat,x_count=1,x_sum=0.031442

Indices can be arbitrarily deep — here there are two or more of them:

$ mlr --from data/medium put -q '
  @x_count[$a][$b] += 1;
  @x_sum[$a][$b] += $x;
  end {
    emit (@x_count, @x_sum), "a", "b";
  }
'
a=pan,b=pan,x_count=427,x_sum=219.185129
a=pan,b=wye,x_count=395,x_sum=198.432931
a=pan,b=eks,x_count=429,x_sum=216.075228
a=pan,b=hat,x_count=417,x_sum=205.222776
a=pan,b=zee,x_count=413,x_sum=205.097518
a=eks,b=pan,x_count=371,x_sum=179.963030
a=eks,b=wye,x_count=407,x_sum=196.945286
a=eks,b=zee,x_count=357,x_sum=176.880365
a=eks,b=eks,x_count=413,x_sum=215.916097
a=eks,b=hat,x_count=417,x_sum=208.783171
a=wye,b=wye,x_count=377,x_sum=185.295850
a=wye,b=pan,x_count=392,x_sum=195.847900
a=wye,b=hat,x_count=426,x_sum=212.033183
a=wye,b=zee,x_count=385,x_sum=194.774048
a=wye,b=eks,x_count=386,x_sum=204.812961
a=zee,b=pan,x_count=389,x_sum=202.213804
a=zee,b=wye,x_count=455,x_sum=233.991394
a=zee,b=eks,x_count=391,x_sum=190.961778
a=zee,b=zee,x_count=403,x_sum=206.640635
a=zee,b=hat,x_count=409,x_sum=191.300006
a=hat,b=wye,x_count=423,x_sum=208.883010
a=hat,b=zee,x_count=385,x_sum=196.349450
a=hat,b=eks,x_count=389,x_sum=189.006793
a=hat,b=hat,x_count=381,x_sum=182.853532
a=hat,b=pan,x_count=363,x_sum=168.553807

The idea is that stats1, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do.

Begin/end blocks can be mixed with pattern/action blocks. For example:

$ mlr put '
  begin {
    @num_total = 0;
    @num_positive = 0;
  };
  @num_total += 1;
  $x > 0.0 {
    @num_positive += 1;
    $y = log10($x); $z = sqrt($y)
  };
  end {
    emitf @num_total, @num_positive
  }
' data/put-gating-example-1.dkvp
x=-1
x=0
x=1,y=0.000000,z=0.000000
x=2,y=0.301030,z=0.548662
x=3,y=0.477121,z=0.690740
num_total=5,num_positive=3

Local variables

Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can’t be computed using square brackets). There are three kinds of local variables: arguments to functions/subroutines, variables bound within for-loops, and locals defined within control blocks. They may be untyped using var, or typed using num, int, float, str, bool, and map.

For example:

$ # Here I'm using a specified random-number seed so this example always
# produces the same output for this web document: in everyday practice we
# would leave off the --seed 12345 part.
mlr --seed 12345 seqgen --start 1 --stop 10 then put '
  func f(a, b) {                          # function arguments a and b
      r = 0.0;                            # local r scoped to the function
      for (int i = 0; i < 6; i += 1) {    # local i scoped to the for-loop
          num u = urand();                # local u scoped to the for-loop
          r += u;                         # updates r from the enclosing scope
      }
      r /= 6;
      return a + (b - a) * r;
  }
  num o = f(10, 20);                      # local to the top-level scope
  $o = o;
'
i=1,o=14.662901
i=2,o=17.881983
i=3,o=14.586560
i=4,o=16.402409
i=5,o=16.336598
i=6,o=14.622701
i=7,o=15.983753
i=8,o=13.852177
i=9,o=15.472899
i=10,o=15.643912

Things which are completely unsurprising, resembling many other languages:

Things which are perhaps surprising compared to other languages:

  • Type declarations using var, or typed using num, int, float, str, and bool are necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are implicitly declared using var. (Some examples are shown below.)
  • Type-checking is done at assignment time. For example, float f = 0 is an error (since 0 is an integer), as is float f = 0.0; f = 1. For this reason I prefer to use num over float in most contexts since num encompasses integer and floating-point values. More information about type-checking is here.
  • Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in for (k, v in $*) { ... } for ((k1, k2), v in @*) { ... } if there are k, v, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop.
  • For C-style triple-for loops, if a for-loop variable is defined using var, int, etc. then it is scoped to that for-loop. E.g. for (i = 0; i < 10; i += 1) { ... } and for (int i = 0; i < 10; i += 1) { ... }. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But of there is no outer-scope variable of that name then the variable is scoped to the for-loop only.

The following example demonstrates the scope rules:

$ cat data/scope-example.mlr
func f(a) {      # argument is local to the function
  var b = 100;   # local to the function
  c = 100;       # local to the function; does not overwrite outer c
  return a + 1;
}
var a = 10;      # local at top level
var b = 20;      # local at top level
c = 30;          # local at top level; there is no more-outer-scope c
if (NR == 3) {
  var a = 40;    # scoped to the if-statement; doesn't overwrite outer a
  b = 50;        # not scoped to the if-statement; overwrites outer b
  c = 60;        # not scoped to the if-statement; overwrites outer c
  d = 70;        # there is no outer d so a local d is created here

  $inner_a = a;
  $inner_b = b;
  $inner_c = c;
  $inner_d = d;
}
$outer_a = a;
$outer_b = b;
$outer_c = c;
$outer_d = d;    # there is no outer d defined so no assignment happens

$ cat data/scope-example.dat
n=1,x=123
n=2,x=456
n=3,x=789

$ mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr
n       1
x       123
outer_a 10
outer_b 20
outer_c 30

n       2
x       456
outer_a 10
outer_b 20
outer_c 30

n       3
x       789
inner_a 40
inner_b 50
inner_c 60
inner_d 70
outer_a 10
outer_b 50
outer_c 60

And this example demonstrates the type-declaration rules:

$ cat data/type-decl-example.mlr
subr s(a, str b, int c) {                         # a is implicitly var (untyped).
                                                  # b is explicitly str.
                                                  # c is explicitly int.
                                                  # The type-checking is done at the callsite
                                                  # when arguments are bound to parameters.
                                                  #
    var b = 100;     # error                      # Re-declaration in the same scope is disallowed.
    int n = 10;                                   # Declaration of variable local to the subroutine.
    n = 20;                                       # Assignment is OK.
    int n = 30;      # error                      # Re-declaration in the same scope is disallowed.
    str n = "abc";   # error                      # Re-declaration in the same scope is disallowed.
                                                  #
    float f1 = 1;    # error                      # 1 is an int, not a float.
    float f2 = 2.0;                               # 2.0 is a float.
    num f3 = 3;                                   # 3 is a num.
    num f4 = 4.0;                                 # 4.0 is a num.
}                                                 #
                                                  #
call s(1, 2, 3);                                  # Type-assertion '3 is int' is done here at the callsite.
                                                  #
k = "def";                                        # Top-level variable k.
                                                  #
for (str k, v in $*) {                            # k and v are bound here, masking outer k.
  print k . ":" . v;                              # k is explicitly str; v is implicitly var.
}                                                 #
                                                  #
print "k is".k;                                   # k at this scope level is still "def".
print "v is".v;                                   # v is undefined in this scope.
                                                  #
i = -1;                                           #
for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, unless
                                                  # declared local: i is outer, j is local to the loop.
  print "inner i =" . i;                          #
  print "inner j =" . j;                          #
}                                                 #
print "outer i =" . i;                            # i has been modified by the loop.
print "outer j =" . j;                            # j is undefined in this scope.

Map literals

Miller’s put/filter DSL has four kinds of hashmaps. Stream records are (single-level) maps from name to value. Out-of-stream variables and local variables can also be maps, although they can be multi-level hashmaps (e.g. @sum[$x][$y]). The fourth kind is map literals. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. "3" rather than 3).

For example, the following swaps the input stream’s a and i fields, modifies y, and drops the rest:

$ mlr --opprint put '
  $* = {
    "a": $i,
    "i": $a,
    "y": $y * 10,
  }
' data/small
a i   y
1 pan 7.268029
2 eks 5.221511
3 wye 3.383185
4 eks 1.341887
5 wye 8.636245

Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on:

$ mlr --from data/small put '
  func f(map m): map {
    m["x"] *= 200;
    return m;
  }
  $* = f({"a": $a, "x": $x});
'
a=pan,x=69.358029
a=eks,x=151.735993
a=wye,x=40.920661
a=eks,x=76.279879
a=wye,x=114.657784

Like out-of-stream and local variables, map literals can be multi-level:

$ mlr --from data/small put -q '
  begin {
    @o = {
      "nrec": 0,
      "nkey": {"numeric":0, "non-numeric":0},
    };
  }
  @o["nrec"] += 1;
  for (k, v in $*) {
    if (is_numeric(v)) {
      @o["nkey"]["numeric"] += 1;
    } else {
      @o["nkey"]["non-numeric"] += 1;
    }
  }
  end {
    dump @o;
  }
'
{
  "nrec": 5,
  "nkey": {
    "numeric": 15,
    "non-numeric": 10
  }
}

By default, map-valued expressions are dumped using JSON formatting. If you use dump to print a hashmap with integer keys and you don’t want them double-quoted (JSON-style) then you can use mlr put --jknquoteint. See also mlr put --help.

Type-checking

Miller’s put/filter DSLs support two optional kinds of type-checking. One is inline type-tests and type-assertions within expressions. The other is type declarations for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections.

Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data.

Type-test and type-assertion expressions

The following is... functions take a value and return a boolean indicating whether the argument is of the indicated type. The assert_... functions return their argument if it is of the specified type, and cause a fatal error otherwise:

$ mlr -F | grep ^is
is_absent
is_bool
is_boolean
is_empty
is_empty_map
is_float
is_int
is_map
is_nonempty_map
is_not_empty
is_not_map
is_not_null
is_null
is_numeric
is_present
is_string

$ mlr -F | grep ^assert
asserting_absent
asserting_bool
asserting_boolean
asserting_empty
asserting_empty_map
asserting_float
asserting_int
asserting_map
asserting_nonempty_map
asserting_not_empty
asserting_not_map
asserting_not_null
asserting_null
asserting_numeric
asserting_present
asserting_string

Please see the Cookbook part 1 for examples of how to use these.

Type-declarations for local variables, function parameter, and function return values

Local variables can be defined either untyped as in x = 1, or typed as in int x = 1. Types include var (explicitly untyped), int, float, num (int or float), str, bool, and map. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in int x = 1 or in any subsequent assignments to the same variable farther down in the scope.

The reason for num is that int and float typedecls are very precise:

  float a = 0;   # Runtime error since 0 is int not float
  int   b = 1.0; # Runtime error since 1.0 is float not int
  num   c = 0;   # OK
  num   d = 1.0; # OK

A suggestion is to use num for general use when you want numeric content, and use int when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints).

The var type declaration indicates no type restrictions, e.g. var x = 1 has the same type restrictions on x as x = 1. The difference is in intentional shadowing: if you have x = 1 in outer scope and x = 2 in inner scope (e.g. within a for-loop or an if-statement) then outer-scope x has value 2 after the second assignment. But if you have var x = 2 in the inner scope, then you are declaring a variable scoped to the inner block.) For example:

  x = 1;
  if (NR == 4) {
    x = 2; # Refers to outer-scope x: value changes from 1 to 2.
  }
  print x; # Value of x is now two
  x = 1;
  if (NR == 4) {
    var x = 2; # Defines a new inner-scope x with value 2
  }
  print x;     # Value of this x is still 1

Likewise function arguments can optionally be typed, with type enforced when the function is called:

  func f(map m, int i) {
    ...
  }
  $a = f({1:2, 3:4}, 5);     # OK
  $b = f({1:2, 3:4}, "abc"); # Runtime error
  $c = f({1:2, 3:4}, $x);    # Runtime error for records with non-integer field named x
  if (NR == 4) {
    var x = 2; # Defines a new inner-scope x with value 2
  }
  print x;     # Value of this x is still 1

Thirdly, function return values can be type-checked at the point of return using : and a typedecl after the parameter list:

  func f(map m, int i): bool {
    ...
    ...
    if (...) {
      return "false"; # Runtime error if this branch is taken
    }
    ...
    ...
    if (...) {
      return retval; # Runtime error if this function doesn't have an in-scope
                     # boolean-valued variable named retval
    }
    ...
    ...
    # In Miller if your functions don't explicitly return a value, they return absent-null.
    # So it would also be a runtime error on reaching the end of this function without
    # an explicit return statement.
  }

Null data: empty and absent

Please see here.

Aggregate variable assignments

There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the $* syntax:

  • Recursive copy of out-of-stream variables
  • Out-of-stream variable assigned to full stream record
  • Full stream record assigned to an out-of-stream variable

Example recursive copy of out-of-stream variables:

$ mlr --opprint put -q '@v["sum"] += $x; @v["count"] += 1; end{dump; @w = @v; dump}' data/small
{
  "v": {
    "sum": 2.264762,
    "count": 5
  }
}
{
  "v": {
    "sum": 2.264762,
    "count": 5
  },
  "w": {
    "sum": 2.264762,
    "count": 5
  }
}

Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that:

$ mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

Example of full stream record assigned to an out-of-stream variable, finding the record for which the x field has the largest value in the input stream:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr --opprint put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' data/small
a   b   i x                  y
eks pan 2 0.7586799647899636 0.5221511083334797

Keywords for filter and put

$ mlr --help-all-keywords
all: used in "emit", "emitp", and "unset" as a synonym for @*

begin: defines a block of statements to be executed before input records
are ingested. The body statements must be wrapped in curly braces.
Example: 'begin { @count = 0 }'

bool: declares a boolean local variable in the current curly-braced scope.
Type-checking happens at assignment: 'bool b = 1' is an error.

break: causes execution to continue after the body of the current
for/while/do-while loop.

call: used for invoking a user-defined subroutine.
Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'

continue: causes execution to skip the remaining statements in the body of
the current for/while/do-while loop. For-loop increments are still applied.

do: with "while", introduces a do-while loop. The body statements must be wrapped
in curly braces.

dump: prints all currently defined out-of-stream variables immediately
  to stdout as JSON.

  With >, >>, or |, the data do not become part of the output record stream but
  are instead redirected.

  The > and >> are for write and append, as in the shell, but (as with awk) the
  file-overwrite for > is on first write, not per record. The | is for piping to
  a process which will process the data. There will be one open file for each
  distinct file name (for > and >>) or one subordinate process for each distinct
  value of the piped-to command (for |). Output-formatting flags are taken from
  the main command line.

  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'
  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >  "mytap.dat"}'
  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}'
  Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}'

edump: prints all currently defined out-of-stream variables immediately
  to stderr as JSON.

  Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }'

elif: the way Miller spells "else if". The body statements must be wrapped
in curly braces.

else: terminates an if/elif/elif chain. The body statements must be wrapped
in curly braces.

emit: inserts an out-of-stream variable into the output record stream. Hashmap
  indices present in the data but not slotted by emit arguments are not output.

  With >, >>, or |, the data do not become part of the output record stream but
  are instead redirected.

  The > and >> are for write and append, as in the shell, but (as with awk) the
  file-overwrite for > is on first write, not per record. The | is for piping to
  a process which will process the data. There will be one open file for each
  distinct file name (for > and >>) or one subordinate process for each distinct
  value of the piped-to command (for |). Output-formatting flags are taken from
  the main command line.

  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
  etc., to control the format of the output if the output is redirected. See also mlr -h.

  Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, $*'
  Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, mapexcept($*, "a")'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'
  Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >  "mytap.dat", @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"'

  Please see http://johnkerl.org/miller/doc for more information.

emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the
  output record stream.

  With >, >>, or |, the data do not become part of the output record stream but
  are instead redirected.

  The > and >> are for write and append, as in the shell, but (as with awk) the
  file-overwrite for > is on first write, not per record. The | is for piping to
  a process which will process the data. There will be one open file for each
  distinct file name (for > and >>) or one subordinate process for each distinct
  value of the piped-to command (for |). Output-formatting flags are taken from
  the main command line.

  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
  etc., to control the format of the output if the output is redirected. See also mlr -h.

  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'
  Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a'
  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'
  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c'
  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c'
  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'
  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c'
  Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c'

  Please see http://johnkerl.org/miller/doc for more information.

emitp: inserts an out-of-stream variable into the output record stream.
  Hashmap indices present in the data but not slotted by emitp arguments are
  output concatenated with ":".

  With >, >>, or |, the data do not become part of the output record stream but
  are instead redirected.

  The > and >> are for write and append, as in the shell, but (as with awk) the
  file-overwrite for > is on first write, not per record. The | is for piping to
  a process which will process the data. There will be one open file for each
  distinct file name (for > and >>) or one subordinate process for each distinct
  value of the piped-to command (for |). Output-formatting flags are taken from
  the main command line.

  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
  etc., to control the format of the output if the output is redirected. See also mlr -h.

  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'
  Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >  "mytap.dat", @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"'
  Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"'

  Please see http://johnkerl.org/miller/doc for more information.

end: defines a block of statements to be executed after input records
are ingested. The body statements must be wrapped in curly braces.
Example: 'end { emit @count }'
Example: 'end { eprint "Final count is " . @count }'

eprint: prints expression immediately to stderr.
  Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)'
  Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }'
  Example: mlr --from f.dat put  '(NR % 1000 == 0) { eprint "Checkpoint ".NR}'

eprintn: prints expression immediately to stderr, without trailing newline.
  Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""'

false: the boolean literal value.

filter: includes/excludes the record in the output record stream.

  Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)'

  Instead of put with 'filter false' you can simply use put -q.  The following
  uses the input record to accumulate data but only prints the running sum
  without printing the input record:

  Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum'

float: declares a floating-point local variable in the current curly-braced scope.
Type-checking happens at assignment: 'float x = 0' is an error.

for: defines a for-loop using one of three styles. The body statements must
be wrapped in curly braces.
For-loop over stream record:
  Example:  'for (k, v in $*) { ... }'
For-loop over out-of-stream variables:
  Example: 'for (k, v in @counts) { ... }'
  Example: 'for ((k1, k2), v in @counts) { ... }'
  Example: 'for ((k1, k2, k3), v in @*) { ... }'
C-style for-loop:
  Example:  'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }'

func: used for defining a user-defined function.
Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)'

if: starts an if/elif/elif chain. The body statements must be wrapped
in curly braces.

in: used in for-loops over stream records or out-of-stream variables.

int: declares an integer local variable in the current curly-braced scope.
Type-checking happens at assignment: 'int x = 0.0' is an error.

map: declares an map-valued local variable in the current curly-braced scope.
Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is
always OK. map b = a is OK or not depending on whether a is a map.

num: declares an int/float local variable in the current curly-braced scope.
Type-checking happens at assignment: 'num b = true' is an error.

print: prints expression immediately to stdout.
  Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)'
  Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }'
  Example: mlr --from f.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'

printn: prints expression immediately to stdout, without trailing newline.
  Example: mlr --from f.dat put -q 'printn "."; end { print "" }'

return: specifies the return value from a user-defined function.
Omitted return statements (including via if-branches) result in an absent-null
return value, which in turns results in a skipped assignment to an LHS.

stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename
  to print to standard error.

stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename
  to print to standard output.

str: declares a string local variable in the current curly-braced scope.
Type-checking happens at assignment.

subr: used for defining a subroutine.
Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)'

tee: prints the current record to specified file.
  This is an immediate print to the specified file (except for pprint format
  which of course waits until the end of the input stream to format all output).

  The > and >> are for write and append, as in the shell, but (as with awk) the
  file-overwrite for > is on first write, not per record. The | is for piping to
  a process which will process the data. There will be one open file for each
  distinct file name (for > and >>) or one subordinate process for each distinct
  value of the piped-to command (for |). Output-formatting flags are taken from
  the main command line.

  You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
  etc., to control the format of the output. See also mlr -h.

  emit with redirect and tee with redirect are identical, except tee can only
  output $*.

  Example: mlr --from f.dat put 'tee >  "/tmp/data-".$a, $*'
  Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*'
  Example: mlr --from f.dat put 'tee >  stderr, $*'
  Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*'
  Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*'
  Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*'
  Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*'

true: the boolean literal value.

unset: clears field(s) from the current record, or an out-of-stream or local variable.

  Example: mlr --from f.dat put 'unset $x'
  Example: mlr --from f.dat put 'unset $*'
  Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }'
  Example: mlr --from f.dat put '...; unset @sums'
  Example: mlr --from f.dat put '...; unset @sums["green"]'
  Example: mlr --from f.dat put '...; unset @*'

var: declares an untyped local variable in the current curly-braced scope.
Examples: 'var a=1', 'var xyz=""'

while: introduces a while loop, or with "do", introduces a do-while loop.
The body statements must be wrapped in curly braces.

ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]'

FILENAME: evaluates to the name of the current file being processed.

FILENUM: evaluates to the number of the current file being processed,
starting with 1.

FNR: evaluates to the number of the current record within the current file
being processed, starting with 1. Resets at the start of each file.

IFS: evaluates to the input field separator from the command line.

IPS: evaluates to the input pair separator from the command line.

IRS: evaluates to the input record separator from the command line,
or to LF or CRLF from the input data if in autodetect mode (which is
the default).

M_E: the mathematical constant e.

M_PI: the mathematical constant pi.

NF: evaluates to the number of fields in the current record.

NR: evaluates to the number of the current record over all files
being processed, starting with 1. Does not reset at the start of each file.

OFS: evaluates to the output field separator from the command line.

OPS: evaluates to the output pair separator from the command line.

ORS: evaluates to the output record separator from the command line,
or to LF or CRLF from the input data if in autodetect mode (which is
the default).

Operator precedence

Operators are listed in order of decreasing precedence, highest first.

Operators              Associativity
---------              -------------
()                     left to right
**                     right to left
! ~ unary+ unary- &    right to left
binary* / // %         left to right
binary+ binary- .      left to right
<< >>                  left to right
&                      left to right
^                      left to right
|                      left to right
< <= > >=              left to right
== != =~ !=~           left to right
&&                     left to right
^^                     left to right
||                     left to right
? :                    right to left
=                      N/A for Miller (there is no $a=$b=$c)

Operator and function semantics

  • Functions are in general pass-throughs straight to the system-standard C library.
  • The min and max functions are different from other multi-argument functions which return null if any of their inputs are null: for min and max, by contrast, if one argument is absent-null, the other is returned. Empty-null loses min or max against numeric or boolean; empty-null is less than any other string.
  • Symmetrically with respect to the bitwise OR, XOR, and AND operators |, ^, &, Miller has logical operators ||, ^^, &&: the logical XOR not existing in C.
  • The exponentiation operator ** is familiar from many languages.
  • The regex-match and regex-not-match operators =~ and !=~ are similar to those in Ruby and Perl.

Control structures

Pattern-action blocks

These are reminiscent of awk syntax. They can be used to allow assignments to be done only when appropriate — e.g. for math-function domain restrictions, regex-matching, and so on:

$ mlr cat data/put-gating-example-1.dkvp
x=-1
x=0
x=1
x=2
x=3

$ mlr put '$x > 0.0 { $y = log10($x); $z = sqrt($y) }' data/put-gating-example-1.dkvp
x=-1
x=0
x=1,y=0.000000,z=0.000000
x=2,y=0.301030,z=0.548662
x=3,y=0.477121,z=0.690740

$ mlr cat data/put-gating-example-2.dkvp
a=abc_123
a=some other name
a=xyz_789

$ mlr put '$a =~ "([a-z]+)_([0-9]+)" { $b = "left_\1"; $c = "right_\2" }' data/put-gating-example-2.dkvp
a=abc_123,b=left_abc,c=right_123
a=some other name
a=xyz_789,b=left_xyz,c=right_789

This produces heteregenous output which Miller, of course, has no problems with (see Record-hetrogeneity). But if you want homogeneous output, the curly braces can be replaced with a semicolon between the expression and the body statements. This causes put to evaluate the boolean expression (along with any side effects, namely, regex-captures \1, \2, etc.) but doesn’t use it as a criterion for whether subsequent assignments should be executed. Instead, subsequent assignments are done unconditionally:

$ mlr put '$x > 0.0; $y = log10($x); $z = sqrt($y)' data/put-gating-example-1.dkvp
x=-1,y=nan,z=nan
x=0,y=-inf,z=-nan
x=1,y=0.000000,z=0.000000
x=2,y=0.301030,z=0.548662
x=3,y=0.477121,z=0.690740

$ mlr put '$a =~ "([a-z]+)_([0-9]+)"; $b = "left_\1"; $c = "right_\2"' data/put-gating-example-2.dkvp
a=abc_123,b=left_abc,c=right_123
a=some other name,b=left_,c=right_
a=xyz_789,b=left_xyz,c=right_789

If-statements

These are again reminiscent of awk. Pattern-action blocks are a special case of if with no elif or else blocks, no if keyword, and parentheses optional around the boolean expression:

mlr put 'NR == 4 {$foo = "bar"}'

mlr put 'if (NR == 4) {$foo = "bar"}'

Compound statements use elif (rather than elsif or else if):

mlr put '
  if (NR == 2) {
    ...
  } elif (NR ==4) {
    ...
  } elif (NR ==6) {
    ...
  } else {
    ...
  }
'

While and do-while loops

Miller’s while and do-while are unsurprising in comparison to various languages, as are break and continue:

$ echo x=1,y=2 | mlr put '
  while (NF < 10) {
    $[NF+1] = ""
  }
  $foo = "bar"
'
x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar

$ echo x=1,y=2 | mlr put '
  do {
    $[NF+1] = "";
    if (NF == 5) {
      break
    }
  } while (NF < 10);
  $foo = "bar"
'
x=1,y=2,3=,4=,5=,foo=bar

A break or continue within nested conditional blocks or if-statements will, of course, propagate to the innermost loop enclosing them, if any. A break or continue outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested.

The existence of while, do-while, and for loops in Miller’s DSL means that you can create infinite-loop scenarios inadvertently. In particular, please recall that DSL statements are executed once if in begin or end blocks, and once per record otherwise. For example, while (NR < 10) will never terminate as NR is only incremented between records.

For-loops

While Miller’s while and do-while statements are much as in many other languages, for loops are more idiosyncratic to Miller. They are loops over key-value pairs, whether in stream records, out-of-stream variables, local variables, or map-literals: more reminiscent of foreach, as in (for example) PHP. There are for-loops over map keys and for-loops over key-value tuples. Additionally, Miller has a C-style triple-for loop with initialize, test, and update statements.

As with while and do-while, a break or continue within nested control structures will propagate to the innermost loop enclosing them, if any, and a break or continue outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested.

Key-only for-loops

The key variable is always bound to the key of key-value pairs:

$ mlr --from data/small put '
  print "NR = ".NR;
  for (key in $*) {
    value = $[key];
    print "  key:" . key . "  value:".value;
  }

'
NR = 1
  key:a  value:pan
  key:b  value:pan
  key:i  value:1
  key:x  value:0.346790
  key:y  value:0.726803
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
NR = 2
  key:a  value:eks
  key:b  value:pan
  key:i  value:2
  key:x  value:0.758680
  key:y  value:0.522151
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
NR = 3
  key:a  value:wye
  key:b  value:wye
  key:i  value:3
  key:x  value:0.204603
  key:y  value:0.338319
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
NR = 4
  key:a  value:eks
  key:b  value:wye
  key:i  value:4
  key:x  value:0.381399
  key:y  value:0.134189
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
NR = 5
  key:a  value:wye
  key:b  value:pan
  key:i  value:5
  key:x  value:0.573289
  key:y  value:0.863624
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr -n put '
  end {
    o = {1:2, 3:{4:5}};
    for (key in o) {
      print "  key:" . key . "  valuetype:" . typeof(o[key]);
    }
  }
'
  key:1  valuetype:int
  key:3  valuetype:map

Note that the value corresponding to a given key may be gotten as through a computed field name using square brackets as in $[key] for stream records, or by indexing the looped-over variable using square brackets.

Key-value for-loops

Single-level keys may be gotten at using either for(k,v) or for((k),v); multi-level keys may be gotten at using for((k1,k2,k3),v) and so on. The v variable will be bound to to a scalar value (a string or a number) if the map stops at that level, or to a map-valued variable if the map goes deeper. If the map isn’t deep enough then the loop body won’t be executed.

$ cat data/for-srec-example.tbl
label1 label2 f1  f2  f3
blue   green  100 240 350
red    green  120 11  195
yellow blue   140 0   240

$ mlr --pprint --from data/for-srec-example.tbl put '
  $sum1 = $f1 + $f2 + $f3;
  $sum2 = 0;
  $sum3 = 0;
  for (key, value in $*) {
    if (key =~ "^f[0-9]+") {
      $sum2 += value;
      $sum3 += $[key];
    }
  }
'
label1 label2 f1  f2  f3  sum1 sum2 sum3
blue   green  100 240 350 690  690  690
red    green  120 11  195 326  326  326
yellow blue   140 0   240 380  380  380

$ mlr --from data/small --opprint put 'for (k,v in $*) { $[k."_type"] = typeof(v) }'
a   b   i x                   y                   a_type b_type i_type x_type y_type
pan pan 1 0.3467901443380824  0.7268028627434533  string string int    float  float
eks pan 2 0.7586799647899636  0.5221511083334797  string string int    float  float
wye wye 3 0.20460330576630303 0.33831852551664776 string string int    float  float
eks wye 4 0.38139939387114097 0.13418874328430463 string string int    float  float
wye pan 5 0.5732889198020006  0.8636244699032729  string string int    float  float

Note that the value of the current field in the for-loop can be gotten either using the bound variable value, or through a computed field name using square brackets as in $[key].

Important note: to avoid inconsistent looping behavior in case you’re setting new fields (and/or unsetting existing ones) while looping over the record, Miller makes a copy of the record before the loop: loop variables are bound from the copy and all other reads/writes involve the record itself:

$ mlr --from data/small --opprint put '
  $sum1 = 0;
  $sum2 = 0;
  for (k,v in $*) {
    if (is_numeric(v)) {
      $sum1 +=v;
      $sum2 += $[k];
    }
  }
'
a   b   i x                   y                   sum1     sum2
pan pan 1 0.3467901443380824  0.7268028627434533  2.073593 8.294372
eks pan 2 0.7586799647899636  0.5221511083334797  3.280831 13.123324
wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 14.171687
eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 18.062353
wye pan 5 0.5732889198020006  0.8636244699032729  6.436913 25.747654

It can be confusing to modify the stream record while iterating over a copy of it, so instead you might find it simpler to use a local variable in the loop and only update the stream record after the loop:

$ mlr --from data/small --opprint put '
  sum = 0;
  for (k,v in $*) {
    if (is_numeric(v)) {
      sum += $[k];
    }
  }
  $sum = sum
'
a   b   i x                   y                   sum
pan pan 1 0.3467901443380824  0.7268028627434533  2.073593
eks pan 2 0.7586799647899636  0.5221511083334797  3.280831
wye wye 3 0.20460330576630303 0.33831852551664776 3.542922
eks wye 4 0.38139939387114097 0.13418874328430463 4.515588
wye pan 5 0.5732889198020006  0.8636244699032729  6.436913

You can also start iterating on sub-hashmaps of an out-of-stream or local variable; you can loop over nested keys; you can loop over all out-of-stream variables. The bound variables are bound to a copy of the sub-hashmap as it was before the loop started. The sub-hashmap is specified by square-bracketed indices after in, and additional deeper indices are bound to loop key-variables. The terminal values are bound to the loop value-variable whenever the keys are not too shallow. The value-variable may refer to a terminal (string, number) or it may be map-valued if the map goes deeper. Example indexing is as follows:

# Parentheses are optional for single key:
for (k1,           v in @a["b"]["c"]) { ... }
for ((k1),         v in @a["b"]["c"]) { ... }
# Parentheses are required for multiple keys:
for ((k1, k2),     v in @a["b"]["c"]) { ... } # Loop over subhashmap of a variable
for ((k1, k2, k3), v in @a["b"]["c"]) { ... } # Ditto
for ((k1, k2, k3), v in @a { ... }            # Loop over variable starting from basename
for ((k1, k2, k3), v in @* { ... }            # Loop over all variables (k1 is bound to basename)

That’s confusing in the abstract, so a concrete example is in order. Suppose the out-of-stream variable @myvar is populated as follows:

$ mlr -n put --jknquoteint -q '
  begin {
    @myvar = {
      1: 2,
      3: { 4 : 5 },
      6: { 7: { 8: 9 } }
    }
  }
  end { dump }
'
{
  "myvar": {
    1: 2,
    3: {
      4: 5
    },
    6: {
      7: {
        8: 9
      }
    }
  }
}

Then we can get at various values as follows:

$ mlr -n put --jknquoteint -q '
  begin {
    @myvar = {
      1: 2,
      3: { 4 : 5 },
      6: { 7: { 8: 9 } }
    }
  }
  end {
    for (k, v in @myvar) {
      print
        "key=" . k .
        ",valuetype=" . typeof(v);
    }
  }
'
key=1,valuetype=int
key=3,valuetype=map
key=6,valuetype=map

$ mlr -n put --jknquoteint -q '
  begin {
    @myvar = {
      1: 2,
      3: { 4 : 5 },
      6: { 7: { 8: 9 } }
    }
  }
  end {
    for ((k1, k2), v in @myvar) {
      print
        "key1=" . k1 .
        ",key2=" . k2 .
        ",valuetype=" . typeof(v);
    }
  }
'
key1=3,key2=4,valuetype=int
key1=6,key2=7,valuetype=map

$ mlr -n put --jknquoteint -q '
  begin {
    @myvar = {
      1: 2,
      3: { 4 : 5 },
      6: { 7: { 8: 9 } }
    }
  }
  end {
    for ((k1, k2), v in @myvar[6]) {
      print
        "key1=" . k1 .
        ",key2=" . k2 .
        ",valuetype=" . typeof(v);
    }
  }
'
key1=7,key2=8,valuetype=int

C-style triple-for loops

These are supported as follows:

$ mlr --from data/small --opprint put '
  num suma = 0;
  for (a = 1; a <= NR; a += 1) {
    suma += a;
  }
  $suma = suma;
'
a   b   i x                   y                   suma
pan pan 1 0.3467901443380824  0.7268028627434533  1
eks pan 2 0.7586799647899636  0.5221511083334797  3
wye wye 3 0.20460330576630303 0.33831852551664776 6
eks wye 4 0.38139939387114097 0.13418874328430463 10
wye pan 5 0.5732889198020006  0.8636244699032729  15

$ mlr --from data/small --opprint put '
  num suma = 0;
  num sumb = 0;
  for (num a = 1, num b = 1; a <= NR; a += 1, b *= 2) {
    suma += a;
    sumb += b;
  }
  $suma = suma;
  $sumb = sumb;
'
a   b   i x                   y                   suma sumb
pan pan 1 0.3467901443380824  0.7268028627434533  1    1
eks pan 2 0.7586799647899636  0.5221511083334797  3    3
wye wye 3 0.20460330576630303 0.33831852551664776 6    7
eks wye 4 0.38139939387114097 0.13418874328430463 10   15
wye pan 5 0.5732889198020006  0.8636244699032729  15   31

Notes:

  • In for (start; continuation; update) { body }, the start, continuation, and update statements may be empty, single statements, or multiple comma-separated statements. If the continuation is empty (e.g. for(i=1;;i+=1)) it defaults to true.
  • In particular, you may use $-variables and/or @-variables in the start, continuation, and/or update steps (as well as the body, of course).
  • The typedecls such as int or num are optional. If a typedecl is provided (for a local variable), it binds a variable scoped to the for-loop regardless of whether a same-name variable is present in outer scope. If a typedecl is not provided, then the variable is scoped to the for-loop if no same-name variable is present in outer scope, or if a same-name variable is present in outer scope then it is modified.
  • Miller has no ++ or -- operators.
  • As with all for/if/while statements in Miller, the curly braces are required even if the body is a single statement, or empty.

Begin/end blocks

Miller supports an awk-like begin/end syntax. The statements in the begin block are executed before any input records are read; the statements in the end block are executed after the last input record is read. (If you want to execute some statement at the start of each file, not at the start of the first file as with begin, you might use a pattern/action block of the form FNR == 1 { ... }.) All statements outside of begin or end are, of course, executed on every input record. Semicolons separate statements inside or outside of begin/end blocks; semicolons are required between begin/end block bodies and any subsequent statement. For example:

$ mlr put '
  begin { @sum = 0 };
  @x_sum += $x;
  end { emit @x_sum }
' ../data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697
a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694
a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006
a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059
a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864
x_sum=4.536294

Since uninitialized out-of-stream variables default to 0 for addition/substraction and 1 for multiplication when they appear on expression right-hand sides (as in awk), the above can be written more succinctly as

$ mlr put '
  @x_sum += $x;
  end { emit @x_sum }
' ../data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697
a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694
a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006
a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059
a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864
x_sum=4.536294

The put -q option is a shorthand which suppresses printing of each output record, with only emit statements being output. So to get only summary outputs, one could write

$ mlr put -q '
  @x_sum += $x;
  end { emit @x_sum }
' ../data/small
x_sum=4.536294

We can do similarly with multiple out-of-stream variables:

$ mlr put -q '
  @x_count += 1;
  @x_sum += $x;
  end {
    emit @x_count;
    emit @x_sum;
  }
' ../data/small
x_count=10
x_sum=4.536294

This is of course not much different than

$ mlr stats1 -a count,sum -f x ../data/small
x_count=10,x_sum=4.536294

Note that it’s a syntax error for begin/end blocks to refer to field names (beginning with $), since these execute outside the context of input records.

Output statements

You can output variable-values or expressions in five ways:

  • Assign them to stream-record fields. For example, $cumulative_sum = @sum. For another example, $nr = NR adds a field named nr to each output record, containing the value of the built-in variable NR as of when that record was ingested.
  • Use the print or eprint keywords which immediately print an expression directly to standard output or standard error, respectively. Note that dump, edump, print, and eprint don’t output records which participate in then-chaining; rather, they’re just immediate prints to stdout/stderr. The printn and eprintn keywords are the same except that they don’t print final newlines. Additionally, you can print to a specified file instead of stdout/stderr.
  • Use the dump or edump keywords, which immediately print all out-of-stream variables as a JSON data structure to the standard output or standard error (respectively).
  • Use tee which formats the current stream record (not just an arbitrary string as with print) to a specific file.
  • Use emit/emitp/emitf to send out-of-stream variables’ current values to the output record stream, e.g. @sum += $x; emit @sum which produces an extra output record such as sum=3.1648382.

For the first two options you are populating the output-records stream which feeds into the next verb in a then-chain (if any), or which otherwise is formatted for output using --o... flags.

For the last three options you are sending output directly to standard output, standard error, or a file.

Print statements

The print statement is perhaps self-explanatory, but with a few light caveats:

Dump statements

The dump statement is for printing expressions, including maps, directly to stdout/stderr, respectively:

Tee statements

Records produced by a mlr put go downstream to the next verb in your then-chain, if any, or otherwise to standard output. If you want to additionally copy out records to files, you can do that using tee.

The syntax is, by example, mlr --from myfile.dat put 'tee > "tap.dat", $*' then sort -n index. First is tee >, then the filename expression (which can be an expression such as "tap.".$a.".dat"), then a comma, then $*. (Nothing else but $* is teeable.)

See also the section on redirected output for examples.

Redirected-output statements

The print, dump tee, emitf, emit, and emitp keywords all allow you to redirect output to one or more files or pipe-to commands. The filenames/commands are strings which can be constructed using record-dependent values, so you can do things like splitting a table into multiple files, one for each account ID, and so on.

Details:

  • The print and dump keywords produce output immediately to standard output, or to specified file(s) or pipe-to command if present.

    $ mlr --help-keyword print
    print: prints expression immediately to stdout.
      Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)'
      Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }'
      Example: mlr --from f.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'
    

    $ mlr --help-keyword dump
    dump: prints all currently defined out-of-stream variables immediately
      to stdout as JSON.
    
      With >, >>, or |, the data do not become part of the output record stream but
      are instead redirected.
    
      The > and >> are for write and append, as in the shell, but (as with awk) the
      file-overwrite for > is on first write, not per record. The | is for piping to
      a process which will process the data. There will be one open file for each
      distinct file name (for > and >>) or one subordinate process for each distinct
      value of the piped-to command (for |). Output-formatting flags are taken from
      the main command line.
    
      Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'
      Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >  "mytap.dat"}'
      Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}'
      Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}'
    

  • mlr put sends the current record (possibly modified by the put expression) to the output record stream. Records are then input to the following verb in a then-chain (if any), else printed to standard output (unless put -q). The tee keyword additionally writes the output record to specified file(s) or pipe-to command, or immediately to stdout/stderr.

    $ mlr --help-keyword tee
    tee: prints the current record to specified file.
      This is an immediate print to the specified file (except for pprint format
      which of course waits until the end of the input stream to format all output).
    
      The > and >> are for write and append, as in the shell, but (as with awk) the
      file-overwrite for > is on first write, not per record. The | is for piping to
      a process which will process the data. There will be one open file for each
      distinct file name (for > and >>) or one subordinate process for each distinct
      value of the piped-to command (for |). Output-formatting flags are taken from
      the main command line.
    
      You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
      etc., to control the format of the output. See also mlr -h.
    
      emit with redirect and tee with redirect are identical, except tee can only
      output $*.
    
      Example: mlr --from f.dat put 'tee >  "/tmp/data-".$a, $*'
      Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*'
      Example: mlr --from f.dat put 'tee >  stderr, $*'
      Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*'
      Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*'
      Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*'
      Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*'
    

  • mlr put’s emitf, emitp, and emit send out-of-stream variables to the output record stream. These are then input to the following verb in a then-chain (if any), else printed to standard output. When redirected with >, >>, or |, they instead write the out-of-stream variable(s) to specified file(s) or pipe-to command, or immediately to stdout/stderr.

    $ mlr --help-keyword emitf
    emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the
      output record stream.
    
      With >, >>, or |, the data do not become part of the output record stream but
      are instead redirected.
    
      The > and >> are for write and append, as in the shell, but (as with awk) the
      file-overwrite for > is on first write, not per record. The | is for piping to
      a process which will process the data. There will be one open file for each
      distinct file name (for > and >>) or one subordinate process for each distinct
      value of the piped-to command (for |). Output-formatting flags are taken from
      the main command line.
    
      You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
      etc., to control the format of the output if the output is redirected. See also mlr -h.
    
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'
      Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a'
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c'
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c'
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c'
      Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c'
    
      Please see http://johnkerl.org/miller/doc for more information.
    

    $ mlr --help-keyword emitp
    emitp: inserts an out-of-stream variable into the output record stream.
      Hashmap indices present in the data but not slotted by emitp arguments are
      output concatenated with ":".
    
      With >, >>, or |, the data do not become part of the output record stream but
      are instead redirected.
    
      The > and >> are for write and append, as in the shell, but (as with awk) the
      file-overwrite for > is on first write, not per record. The | is for piping to
      a process which will process the data. There will be one open file for each
      distinct file name (for > and >>) or one subordinate process for each distinct
      value of the piped-to command (for |). Output-formatting flags are taken from
      the main command line.
    
      You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
      etc., to control the format of the output if the output is redirected. See also mlr -h.
    
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'
      Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >  "mytap.dat", @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"'
    
      Please see http://johnkerl.org/miller/doc for more information.
    

    $ mlr --help-keyword emit
    emit: inserts an out-of-stream variable into the output record stream. Hashmap
      indices present in the data but not slotted by emit arguments are not output.
    
      With >, >>, or |, the data do not become part of the output record stream but
      are instead redirected.
    
      The > and >> are for write and append, as in the shell, but (as with awk) the
      file-overwrite for > is on first write, not per record. The | is for piping to
      a process which will process the data. There will be one open file for each
      distinct file name (for > and >>) or one subordinate process for each distinct
      value of the piped-to command (for |). Output-formatting flags are taken from
      the main command line.
    
      You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,
      etc., to control the format of the output if the output is redirected. See also mlr -h.
    
      Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, $*'
      Example: mlr --from f.dat put 'emit >  "/tmp/data-".$a, mapexcept($*, "a")'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'
      Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >  "mytap.dat", @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"'
      Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"'
    
      Please see http://johnkerl.org/miller/doc for more information.
    

Emit statements

There are three variants: emitf, emit, and emitp. Keep in mind that out-of-stream variables are a nested, multi-level hashmap (directly viewable as JSON using dump), whereas Miller output records are lists of single-level key-value pairs. The three emit variants allow you to control how the multilevel hashmaps are flatten down to output records. You can emit any map-valued expression, including $*, map-valued out-of-stream variables, the entire out-of-stream-variable collection @*, map-valued local variables, map literals, or map-valued function return values.

Use emitf to output several out-of-stream variables side-by-side in the same output record. For emitf these mustn’t have indexing using @name[...]. Example:

$ mlr put -q '@count += 1; @x_sum += $x; @y_sum += $y; end { emitf @count, @x_sum, @y_sum}' data/small
count=5,x_sum=2.264762,y_sum=2.585086

Use emit to output an out-of-stream variable. If it’s non-indexed you’ll get a simple key-value pair:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put -q '@sum += $x; end { dump }' data/small
{
  "sum": 2.264762
}

$ mlr put -q '@sum += $x; end { emit @sum }' data/small
sum=2.264762

If it’s indexed then use as many names after emit as there are indices:

$ mlr put -q '@sum[$a] += $x; end { dump }' data/small
{
  "sum": {
    "pan": 0.346790,
    "eks": 1.140079,
    "wye": 0.777892
  }
}

$ mlr put -q '@sum[$a] += $x; end { emit @sum, "a" }' data/small
a=pan,sum=0.346790
a=eks,sum=1.140079
a=wye,sum=0.777892

$ mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small
{
  "sum": {
    "pan": {
      "pan": 0.346790
    },
    "eks": {
      "pan": 0.758680,
      "wye": 0.381399
    },
    "wye": {
      "wye": 0.204603,
      "pan": 0.573289
    }
  }
}

$ mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' data/small
a=pan,b=pan,sum=0.346790
a=eks,b=pan,sum=0.758680
a=eks,b=wye,sum=0.381399
a=wye,b=wye,sum=0.204603
a=wye,b=pan,sum=0.573289

$ mlr put -q '@sum[$a][$b][$i] += $x; end { dump }' data/small
{
  "sum": {
    "pan": {
      "pan": {
        "1": 0.346790
      }
    },
    "eks": {
      "pan": {
        "2": 0.758680
      },
      "wye": {
        "4": 0.381399
      }
    },
    "wye": {
      "wye": {
        "3": 0.204603
      },
      "pan": {
        "5": 0.573289
      }
    }
  }
}

$ mlr put -q '@sum[$a][$b][$i] += $x; end { emit @sum, "a", "b", "i" }' data/small
a=pan,b=pan,i=1,sum=0.346790
a=eks,b=pan,i=2,sum=0.758680
a=eks,b=wye,i=4,sum=0.381399
a=wye,b=wye,i=3,sum=0.204603
a=wye,b=pan,i=5,sum=0.573289

Now for emitp: if you have as many names following emit as there are levels in the out-of-stream variable’s hashmap, then emit and emitp do the same thing. Where they differ is when you don’t specify as many names as there are hashmap levels. In this case, Miller needs to flatten multiple map indices down to output-record keys: emitp includes full prefixing (hence the p in emitp) while emit takes the deepest hashmap key as the output-record key:

$ mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small
{
  "sum": {
    "pan": {
      "pan": 0.346790
    },
    "eks": {
      "pan": 0.758680,
      "wye": 0.381399
    },
    "wye": {
      "wye": 0.204603,
      "pan": 0.573289
    }
  }
}

$ mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' data/small
a=pan,pan=0.346790
a=eks,pan=0.758680,wye=0.381399
a=wye,wye=0.204603,pan=0.573289

$ mlr put -q '@sum[$a][$b] += $x; end { emit @sum }' data/small
pan=0.346790
pan=0.758680,wye=0.381399
wye=0.204603,pan=0.573289

$ mlr put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small
a=pan,sum:pan=0.346790
a=eks,sum:pan=0.758680,sum:wye=0.381399
a=wye,sum:wye=0.204603,sum:pan=0.573289

$ mlr put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small
sum:pan:pan=0.346790,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:wye:wye=0.204603,sum:wye:pan=0.573289

$ mlr --oxtab put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small
sum:pan:pan 0.346790
sum:eks:pan 0.758680
sum:eks:wye 0.381399
sum:wye:wye 0.204603
sum:wye:pan 0.573289

Use --oflatsep to specify the character which joins multilevel keys for emitp (it defaults to a colon):

$ mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small
a=pan,sum/pan=0.346790
a=eks,sum/pan=0.758680,sum/wye=0.381399
a=wye,sum/wye=0.204603,sum/pan=0.573289

$ mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small
sum/pan/pan=0.346790,sum/eks/pan=0.758680,sum/eks/wye=0.381399,sum/wye/wye=0.204603,sum/wye/pan=0.573289

$ mlr --oxtab put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small
sum/pan/pan 0.346790
sum/eks/pan 0.758680
sum/eks/wye 0.381399
sum/wye/wye 0.204603
sum/wye/pan 0.573289

Multi-emit statements

You can emit multiple map-valued expressions side-by-side by including their names in parentheses:

$ mlr --from data/medium --opprint put -q '
  @x_count[$a][$b] += 1;
  @x_sum[$a][$b] += $x;
  end {
      for ((a, b), _ in @x_count) {
          @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b]
      }
      emit (@x_sum, @x_count, @x_mean), "a", "b"
  }
'
a   b   x_sum      x_count x_mean
pan pan 219.185129 427     0.513314
pan wye 198.432931 395     0.502362
pan eks 216.075228 429     0.503672
pan hat 205.222776 417     0.492141
pan zee 205.097518 413     0.496604
eks pan 179.963030 371     0.485076
eks wye 196.945286 407     0.483895
eks zee 176.880365 357     0.495463
eks eks 215.916097 413     0.522799
eks hat 208.783171 417     0.500679
wye wye 185.295850 377     0.491501
wye pan 195.847900 392     0.499612
wye hat 212.033183 426     0.497730
wye zee 194.774048 385     0.505907
wye eks 204.812961 386     0.530604
zee pan 202.213804 389     0.519830
zee wye 233.991394 455     0.514267
zee eks 190.961778 391     0.488393
zee zee 206.640635 403     0.512756
zee hat 191.300006 409     0.467726
hat wye 208.883010 423     0.493813
hat zee 196.349450 385     0.509999
hat eks 189.006793 389     0.485879
hat hat 182.853532 381     0.479931
hat pan 168.553807 363     0.464336

What this does is walk through the first out-of-stream variable (@x_sum in this example) as usual, then for each keylist found (e.g. pan,wye), include the values for the remaining out-of-stream variables (here, @x_count and @x_mean). You should use this when all out-of-stream variables in the emit statement have the same shape and the same keylists.

Emit-all statements

Use emit all (or emit @* which is synonymous) to output all out-of-stream variables. You can use the following idiom to get various accumulators output side-by-side (reminiscent of mlr stats1):

$ mlr --from data/small --opprint put -q '@v[$a][$b]["sum"] += $x; @v[$a][$b]["count"] += 1; end{emit @*,"a","b"}'
a   b   sum      count
pan pan 0.346790 1
eks pan 0.758680 1
eks wye 0.381399 1
wye wye 0.204603 1
wye pan 0.573289 1

$ mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit @*,"a","b"}'
a   b   sum
pan pan 0.346790
eks pan 0.758680
eks wye 0.381399
wye wye 0.204603
wye pan 0.573289

a   b   count
pan pan 1
eks pan 1
eks wye 1
wye wye 1
wye pan 1

$ mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit (@sum, @count),"a","b"}'
a   b   sum      count
pan pan 0.346790 1
eks pan 0.758680 1
eks wye 0.381399 1
wye wye 0.204603 1
wye pan 0.573289 1

Unset statements

You can clear a map key by assigning the empty string as its value: $x="" or @x="". Using unset you can remove the key entirely. Examples:

$ cat data/small
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put 'unset $x, $a' data/small
b=pan,i=1,y=0.7268028627434533
b=pan,i=2,y=0.5221511083334797
b=wye,i=3,y=0.33831852551664776
b=wye,i=4,y=0.13418874328430463
b=pan,i=5,y=0.8636244699032729

This can also be done, of course, using mlr cut -x. You can also clear out-of-stream or local variables, at the base name level, or at an indexed sublevel:

$ mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum; dump }' data/small
{
  "sum": {
    "pan": {
      "pan": 0.346790
    },
    "eks": {
      "pan": 0.758680,
      "wye": 0.381399
    },
    "wye": {
      "wye": 0.204603,
      "pan": 0.573289
    }
  }
}
{
}

$ mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum["eks"]; dump }' data/small
{
  "sum": {
    "pan": {
      "pan": 0.346790
    },
    "eks": {
      "pan": 0.758680,
      "wye": 0.381399
    },
    "wye": {
      "wye": 0.204603,
      "pan": 0.573289
    }
  }
}
{
  "sum": {
    "pan": {
      "pan": 0.346790
    },
    "wye": {
      "wye": 0.204603,
      "pan": 0.573289
    }
  }
}

If you use unset all (or unset @* which is synonymous), that will unset all out-of-stream variables which have been defined up to that point.

Filter statements

You can use filter within put. In fact, the following two are synonymous:

$ mlr filter 'NR==2 || NR==3' data/small
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776

$ mlr put 'filter NR==2 || NR==3' data/small
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776

The former, of course, is much easier to type. But the latter allows you to define more complex expressions for the filter, and/or do other things in addition to the filter:

$ mlr put '@running_sum += $x; filter @running_sum > 1.3' data/small
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729

$ mlr put '$z = $x * $y; filter $z > 0.3' data/small
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,z=0.396146
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,z=0.495106

Built-in functions for filter and put

Each function takes a specific number of arguments, as shown below, except for functions marked as variadic such as min and max. (The latter compute min and max of any number of numerical arguments.) There is no notion of optional or default-on-absent arguments. All argument-passing is positional rather than by name; arguments are passed by value, not by reference.

You can get a list of all functions using mlr -F.

+

+ (class=arithmetic #args=2): Addition.

+ (class=arithmetic #args=1): Unary plus.

-

- (class=arithmetic #args=2): Subtraction.

- (class=arithmetic #args=1): Unary minus.

*

* (class=arithmetic #args=2): Multiplication.

/

/ (class=arithmetic #args=2): Division.

//

// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic).

.+

.+ (class=arithmetic #args=2): Addition, with integer-to-integer overflow

.+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow.

.-

.- (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow.

.- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow.

.*

.* (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow.

./

./ (class=arithmetic #args=2): Division, with integer-to-integer overflow.

.//

.// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow.

%

% (class=arithmetic #args=2): Remainder; never negative-valued (pythonic).

**

** (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix
operator.

|

| (class=arithmetic #args=2): Bitwise OR.

^

^ (class=arithmetic #args=2): Bitwise XOR.

&

& (class=arithmetic #args=2): Bitwise AND.

~

~ (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the
regex-match operator: try '$y = ~$x'.

<<

<< (class=arithmetic #args=2): Bitwise left-shift.

>>

>> (class=arithmetic #args=2): Bitwise right-shift.

==

== (class=boolean #args=2): String/numeric equality. Mixing number and string
results in string compare.

!=

!= (class=boolean #args=2): String/numeric inequality. Mixing number and string
results in string compare.

=~

=~ (class=boolean #args=2): String (left-hand side) matches regex (right-hand
side), e.g. '$name =~ "^a.*b$"'.

!=~

!=~ (class=boolean #args=2): String (left-hand side) does not match regex
(right-hand side), e.g. '$name !=~ "^a.*b$"'.

>

> (class=boolean #args=2): String/numeric greater-than. Mixing number and string
results in string compare.

>=

>= (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number
and string results in string compare.

<

< (class=boolean #args=2): String/numeric less-than. Mixing number and string
results in string compare.

<=

<= (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number
and string results in string compare.

&&

&& (class=boolean #args=2): Logical AND.

||

|| (class=boolean #args=2): Logical OR.

^^

^^ (class=boolean #args=2): Logical XOR.

!

! (class=boolean #args=1): Logical negation.

? :

? : (class=boolean #args=3): Ternary operator.

.

. (class=string #args=2): String concatenation.

abs

abs (class=math #args=1): Absolute value.

acos

acos (class=math #args=1): Inverse trigonometric cosine.

acosh

acosh (class=math #args=1): Inverse hyperbolic cosine.

asin

asin (class=math #args=1): Inverse trigonometric sine.

asinh

asinh (class=math #args=1): Inverse hyperbolic sine.

asserting_absent

asserting_absent (class=typing #args=1): Returns argument if it is absent in the input data, else
throws an error.

asserting_bool

asserting_bool (class=typing #args=1): Returns argument if it is present with boolean value, else
throws an error.

asserting_boolean

asserting_boolean (class=typing #args=1): Returns argument if it is present with boolean value, else
throws an error.

asserting_empty

asserting_empty (class=typing #args=1): Returns argument if it is present in input with empty value,
else throws an error.

asserting_empty_map

asserting_empty_map (class=typing #args=1): Returns argument if it is a map with empty value, else
throws an error.

asserting_float

asserting_float (class=typing #args=1): Returns argument if it is present with float value, else
throws an error.

asserting_int

asserting_int (class=typing #args=1): Returns argument if it is present with int value, else
throws an error.

asserting_map

asserting_map (class=typing #args=1): Returns argument if it is a map, else throws an error.

asserting_nonempty_map

asserting_nonempty_map (class=typing #args=1): Returns argument if it is a non-empty map, else throws
an error.

asserting_not_empty

asserting_not_empty (class=typing #args=1): Returns argument if it is present in input with non-empty
value, else throws an error.

asserting_not_map

asserting_not_map (class=typing #args=1): Returns argument if it is not a map, else throws an error.

asserting_not_null

asserting_not_null (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent),
else throws an error.

asserting_null

asserting_null (class=typing #args=1): Returns argument if it is null (empty or absent), else throws
an error.

asserting_numeric

asserting_numeric (class=typing #args=1): Returns argument if it is present with int or float value,
else throws an error.

asserting_present

asserting_present (class=typing #args=1): Returns argument if it is present in input, else throws
an error.

asserting_string

asserting_string (class=typing #args=1): Returns argument if it is present with string (including
empty-string) value, else throws an error.

atan

atan (class=math #args=1): One-argument arctangent.

atan2

atan2 (class=math #args=2): Two-argument arctangent.

atanh

atanh (class=math #args=1): Inverse hyperbolic tangent.

bitcount

bitcount (class=arithmetic #args=1): Count of 1-bits

boolean

boolean (class=conversion #args=1): Convert int/float/bool/string to boolean.

capitalize

capitalize (class=string #args=1): Convert string's first character to uppercase.

cbrt

cbrt (class=math #args=1): Cube root.

ceil

ceil (class=math #args=1): Ceiling: nearest integer at or above.

clean_whitespace

clean_whitespace (class=string #args=1): Same as collapse_whitespace and strip.

collapse_whitespace

collapse_whitespace (class=string #args=1): Strip repeated whitespace from string.

cos

cos (class=math #args=1): Trigonometric cosine.

cosh

cosh (class=math #args=1): Hyperbolic cosine.

depth

depth (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0.

dhms2fsec

dhms2fsec (class=time #args=1): Recovers floating-point seconds as in
dhms2fsec("5d18h53m20.250000s") = 500000.250000

dhms2sec

dhms2sec (class=time #args=1): Recovers integer seconds as in
dhms2sec("5d18h53m20s") = 500000

erf

erf (class=math #args=1): Error function.

erfc

erfc (class=math #args=1): Complementary error function.

exp

exp (class=math #args=1): Exponential function e**x.

expm1

expm1 (class=math #args=1): e**x - 1.

float

float (class=conversion #args=1): Convert int/float/bool/string to float.

floor

floor (class=math #args=1): Floor: nearest integer at or below.

fmtnum

fmtnum (class=conversion #args=2): Convert int/float/bool to string using
printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers
are all long long or double. If you use formats like %d or %f, behavior is undefined.

fsec2dhms

fsec2dhms (class=time #args=1): Formats floating-point seconds as in
fsec2dhms(500000.25) = "5d18h53m20.250000s"

fsec2hms

fsec2hms (class=time #args=1): Formats floating-point seconds as in
fsec2hms(5000.25) = "01:23:20.250000"

gmt2sec

gmt2sec (class=time #args=1): Parses GMT timestamp as integer seconds since
the epoch.

gsub

gsub (class=string #args=3): Example: '$name=gsub($name, "old", "new")'
(replace all).

haskey

haskey (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or
'haskey(mymap, mykey)'. Error if 1st argument is not a map.

hexfmt

hexfmt (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff".

hms2fsec

hms2fsec (class=time #args=1): Recovers floating-point seconds as in
hms2fsec("01:23:20.250000") = 5000.250000

hms2sec

hms2sec (class=time #args=1): Recovers integer seconds as in
hms2sec("01:23:20") = 5000

int

int (class=conversion #args=1): Convert int/float/bool/string to int.

invqnorm

invqnorm (class=math #args=1): Inverse of normal cumulative distribution
function. Note that invqorm(urand()) is normally distributed.

is_absent

is_absent (class=typing #args=1): False if field is present in input, false otherwise

is_bool

is_bool (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean.

is_boolean

is_boolean (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool.

is_empty

is_empty (class=typing #args=1): True if field is present in input with empty string value, false otherwise.

is_empty_map

is_empty_map (class=typing #args=1): True if argument is a map which is empty.

is_float

is_float (class=typing #args=1): True if field is present with value inferred to be float

is_int

is_int (class=typing #args=1): True if field is present with value inferred to be int 

is_map

is_map (class=typing #args=1): True if argument is a map.

is_nonempty_map

is_nonempty_map (class=typing #args=1): True if argument is a map which is non-empty.

is_not_empty

is_not_empty (class=typing #args=1): False if field is present in input with empty value, true otherwise

is_not_map

is_not_map (class=typing #args=1): True if argument is not a map.

is_not_null

is_not_null (class=typing #args=1): False if argument is null (empty or absent), true otherwise.

is_null

is_null (class=typing #args=1): True if argument is null (empty or absent), false otherwise.

is_numeric

is_numeric (class=typing #args=1): True if field is present with value inferred to be int or float

is_present

is_present (class=typing #args=1): True if field is present in input, false otherwise.

is_string

is_string (class=typing #args=1): True if field is present with string (including empty-string) value

joink

joink (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'.

joinkv

joinkv (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")'

joinv

joinv (class=maps #args=2): Makes string from map keys. E.g. 'joinv(mymap, ",")'.

leafcount

leafcount (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps,
same as length.

length

length (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1.

localtime2sec

localtime2sec (class=time #args=1): Parses local timestamp as integer seconds since
the epoch. Consults $TZ environment variable.

log

log (class=math #args=1): Natural (base-e) logarithm.

log10

log10 (class=math #args=1): Base-10 logarithm.

log1p

log1p (class=math #args=1): log(1-x).

logifit

logifit (class=math #args=3): Given m and b from logistic regression, compute
fit: $yhat=logifit($x,$m,$b).

lstrip

lstrip (class=string #args=1): Strip leading whitespace from string.

madd

madd (class=math #args=3): a + b mod m (integers)

mapdiff

mapdiff (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg.
With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed.

mapexcept

mapexcept (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset.
E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'.

mapselect

mapselect (class=maps variadic): Returns a map with only keys from remaining arguments set.
E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'.

mapsum

mapsum (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with
key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'.

max

max (class=math variadic): max of n numbers; null loses

mexp

mexp (class=math #args=3): a ** b mod m (integers)

min

min (class=math variadic): Min of n numbers; null loses

mmul

mmul (class=math #args=3): a * b mod m (integers)

msub

msub (class=math #args=3): a - b mod m (integers)

pow

pow (class=math #args=2): Exponentiation; same as **.

qnorm

qnorm (class=math #args=1): Normal cumulative distribution function.

regextract

regextract (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")'
.

regextract_or_else

regextract_or_else (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")'
.

round

round (class=math #args=1): Round to nearest integer.

roundm

roundm (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is
the same as round($x/$m)*$m

rstrip

rstrip (class=string #args=1): Strip trailing whitespace from string.

sec2dhms

sec2dhms (class=time #args=1): Formats integer seconds as in sec2dhms(500000)
= "5d18h53m20s"

sec2gmt

sec2gmt (class=time #args=1): Formats seconds since epoch (integer part)
as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z".
Leaves non-numbers as-is.

sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n
decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
Leaves non-numbers as-is.

sec2gmtdate

sec2gmtdate (class=time #args=1): Formats seconds since epoch (integer part)
as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28".
Leaves non-numbers as-is.

sec2hms

sec2hms (class=time #args=1): Formats integer seconds as in
sec2hms(5000) = "01:23:20"

sec2localdate

sec2localdate (class=time #args=1): Formats seconds since epoch (integer part)
as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28".
Consults $TZ environment variable. Leaves non-numbers as-is.

sec2localtime

sec2localtime (class=time #args=1): Formats seconds since epoch (integer part)
as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z".
Consults $TZ environment variable. Leaves non-numbers as-is.

sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n
decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z".
Consults $TZ environment variable. Leaves non-numbers as-is.

sgn

sgn (class=math #args=1): +1 for positive input, 0 for zero input, -1 for
negative input.

sin

sin (class=math #args=1): Trigonometric sine.

sinh

sinh (class=math #args=1): Hyperbolic sine.

splitkv

splitkv (class=maps #args=3): Splits string by separators into map with type inference.
E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'.

splitkvx

splitkvx (class=maps #args=3): Splits string by separators into map without type inference (keys and
values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives
'{"a" : "1", "b" : "2", "c" : "3"}'.

splitnv

splitnv (class=maps #args=2): Splits string by separator into integer-indexed map with type inference.
E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'.

splitnvx

splitnvx (class=maps #args=2): Splits string by separator into integer-indexed map without type
inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'.

sqrt

sqrt (class=math #args=1): Square root.

ssub

ssub (class=string #args=3): Like sub but does no regexing. No characters are special.

strftime

strftime (class=time #args=2): Formats seconds since the epoch as timestamp, e.g.
strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and
strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z".
Format strings are as in the C library (please see "man strftime" on your system),
with the Miller-specific addition of "%1S" through "%9S" which format the seconds
with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.)
See also strftime_local.

strftime_local

strftime_local (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone.

string

string (class=conversion #args=1): Convert int/float/bool/string to string.

strip

strip (class=string #args=1): Strip leading and trailing whitespace from string.

strlen

strlen (class=string #args=1): String length.

strptime

strptime (class=time #args=2): Parses timestamp as floating-point seconds since the epoch,
e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000,
and  strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000.
See also strptime_local.

strptime_local

strptime_local (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone.

sub

sub (class=string #args=3): Example: '$name=sub($name, "old", "new")'
(replace once).

substr

substr (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n 
inclusive. Negative indices -len .. -1 alias to 0 .. len-1.

system

system (class=string #args=1): Run command string, yielding its stdout minus final carriage return.

systime

systime (class=time #args=0): Floating-point seconds since the epoch,
e.g. 1440768801.748936.

tan

tan (class=math #args=1): Trigonometric tangent.

tanh

tanh (class=math #args=1): Hyperbolic tangent.

tolower

tolower (class=string #args=1): Convert string to lowercase.

toupper

toupper (class=string #args=1): Convert string to uppercase.

typeof

typeof (class=conversion #args=1): Convert argument to type of argument (e.g.
MT_STRING). For debug.

urand

urand (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval.
Int-valued example: '$n=floor(20+urand()*11)'.

urand32

urand32 (class=math #args=0): Integer uniformly distributed 0 and 2**32-1
inclusive.

urandint

urandint (class=math #args=2): Integer uniformly distributed between inclusive
integer endpoints.

urandrange

urandrange (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b).

User-defined functions and subroutines

As of Miller 5.0.0 you can define your own functions, as well as subroutines.

User-defined functions

Here’s the obligatory example of a recursive function to compute the factorial function:

$ mlr --opprint --from data/small put '
    func f(n) {
        if (is_numeric(n)) {
            if (n > 0) {
                return n * f(n-1);
            } else {
                return 1;
            }
        }
        # implicitly return absent-null if non-numeric
    }
    $ox = f($x + NR);
    $oi = f($i);
'
a   b   i x                   y                   ox         oi
pan pan 1 0.3467901443380824  0.7268028627434533  0.467054   1
eks pan 2 0.7586799647899636  0.5221511083334797  3.680838   2
wye wye 3 0.20460330576630303 0.33831852551664776 1.741251   6
eks wye 4 0.38139939387114097 0.13418874328430463 18.588349  24
wye pan 5 0.5732889198020006  0.8636244699032729  211.387310 120

Properties of user-defined functions:

User-defined subroutines

Example:

$ mlr --opprint --from data/small put -q '
  begin {
    @call_count = 0;
  }
  subr s(n) {
    @call_count += 1;
    if (is_numeric(n)) {
      if (n > 1) {
        call s(n-1);
      } else {
        print "numcalls=" . @call_count;
      }
    }
  }
  print "NR=" . NR;
  call s(NR);
'
NR=1
numcalls=1
NR=2
numcalls=3
NR=3
numcalls=6
NR=4
numcalls=10
NR=5
numcalls=15

Properties of user-defined subroutines:

Errors and transparency

As soon as you have a programming language, you start having the problem What is my code doing, and why? This includes getting syntax errors — which are always annoying — as well as the even more annoying problem of a program which parses without syntax error but doesn’t do what you expect.

The syntax error message is cryptic: it says syntax error at followed by the next symbol it couldn’t parse. This is good, but (as of 5.0.0) it doesn’t say things like syntax error at line 17, character 22. Here are some common causes of syntax errors:

  • Don’t forget ; at end of line, before another statement on the next line.
  • Miller’s DSL lacks the ++ and -- operators.
  • Curly braces are required for the bodies of if/while/for blocks, even when the body is a single statement.

Now for transparency:

  • As in any language, you can do print (or eprint to print to stderr). See also dump and emit.
  • The -v option to mlr put and mlr filter prints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous.
  • The -T option prints a trace of each statement executed.
  • The -t and -a options show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience.
  • Please see the type-checking section for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller’s important use-cases is being able to say simple things like mlr put '$y = $x + 1' myfile.dat with a minimum of punctuational bric-a-brac — but for programs over a few lines I generally find that the more type-specification, the better.

A note on the complexity of Miller’s expression language

One of Miller’s strengths is its brevity: it’s much quicker — and less error-prone — to type mlr stats1 -a sum -f x,y -g a,b than having to track summation variables as in awk, or using Miller’s out-of-stream variables. And the more language features Miller’s put-DSL has (for-loops, if-statements, nested control structures, user-defined functions, etc.) then the less powerful it begins to seem: because of the other programming-language features it doesn’t have (classes, execptions, and so on).

When I was originally prototyping Miller in 2015, the decision I had was whether to hand-code in a low-level language like C or Rust, with my own hand-rolled DSL, or whether to use a higher-level language (like Python or Lua or Nim) and let the put statements be handled by the implementation language’s own eval: the implementation language would take the place of a DSL. Multiple performance experiments showed me I could get better throughput using the former, and using C in particular — by a wide margin. So Miller is C under the hood with a hand-rolled DSL.

I do want to keep focusing on what Miller is good at — concise notation, low latency, and high throughput — and not add too much in terms of high-level-language features to the DSL. That said, some sort of customizability is a basic thing to want. As of 4.1.0 we have recursive for/while/if structures on about the same complexity level as awk; as of 5.0.0 we have user-defined functions and map-valued variables, again on about the same complexity level as awk along with optional type-declaration syntax. While I’m excited by these powerful language features, I hope to keep new features beyond 5.0.0 focused on Miller’s sweet spot which is speed plus simplicity.

miller-5.6.2/doc/reference-verbs.html000066400000000000000000004363441354153536500175500ustar00rootroot00000000000000 Verbs reference

Verbs reference
• Overview
• altkv
• bar
• bootstrap
• cat
• check
• clean-whitespace
• count-distinct
• count-similar
• cut
• decimate
• fill-down
• filter
    • Features which filter shares with put
• format-values
• fraction
• grep
• group-by
• group-like
• having-fields
• head
• histogram
• join
• label
• least-frequent
• merge-fields
• most-frequent
• nest
• nothing
• put
    • Features which put shares with filter
• regularize
• remove-empty-columns
• rename
• reorder
• repeat
• reshape
• sample
• sec2gmt
• sec2gmtdate
• seqgen
• shuffle
• skip-trivial-records
• sort
• stats1
• stats2
• step
• tac
• tail
• tee
• top
• uniq
• unsparsify

Overview

When you type mlr {something} myfile.dat, the {something} part is called a verb. It specifies how you want to transform your data. (See also here for a breakdown.) The following is an alphabetical list of verbs with their descriptions.

The verbs put and filter are special in that they have a rich expression language (domain-specific language, or “DSL”). More information about them can be found here.

Here’s a comparison of verbs and put/filter DSL expressions:
Example:

$ mlr stats1 -a sum -f x -g a data/small
a=pan,x_sum=0.346790
a=eks,x_sum=1.140079
a=wye,x_sum=0.777892

  • Verbs are coded in C
  • They run a bit faster
  • They take fewer keystrokes
  • There is less to learn
  • Their customization is limited to each verb’s options
Example:

$ mlr  put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small
a=pan,x_sum=0.346790
a=eks,x_sum=1.140079
a=wye,x_sum=0.777892

  • You get to write your own DSL expressions
  • They run a bit slower
  • They take more keystrokes
  • There is more to learn
  • They are highly customizable

altkv

Map list of values to alternating key/value pairs.

$ mlr altkv -h
Usage: mlr altkv [no options]
Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs.

$ echo 'a,b,c,d,e,f' | mlr altkv
a=b,c=d,e=f

$ echo 'a,b,c,d,e,f,g' | mlr altkv
a=b,c=d,e=f,4=g

bar

Cheesy bar-charting.

$ mlr bar -h
Usage: mlr bar [options]
Replaces a numeric field with a number of asterisks, allowing for cheesy
bar plots. These align best with --opprint or --oxtab output format.
Options:
-f   {a,b,c}      Field names to convert to bars.
-c   {character}  Fill character: default '*'.
-x   {character}  Out-of-bounds character: default '#'.
-b   {character}  Blank character: default '.'.
--lo {lo}         Lower-limit value for min-width bar: default '0.000000'.
--hi {hi}         Upper-limit value for max-width bar: default '100.000000'.
-w   {n}          Bar-field width: default '40'.
--auto            Automatically computes limits, ignoring --lo and --hi.
                  Holds all records in memory before producing any output.

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint bar --lo 0 --hi 1 -f x,y data/small
a   b   i x                                        y
pan pan 1 *************........................... *****************************...........
eks pan 2 ******************************.......... ********************....................
wye wye 3 ********................................ *************...........................
eks wye 4 ***************......................... *****...................................
wye pan 5 **********************.................. **********************************......

$ mlr --opprint bar --lo 0.4 --hi 0.6 -f x,y data/small
a   b   i x                                        y
pan pan 1 #....................................... ***************************************#
eks pan 2 ***************************************# ************************................
wye wye 3 #....................................... #.......................................
eks wye 4 #....................................... #.......................................
wye pan 5 **********************************...... ***************************************#

$ mlr --opprint bar --auto -f x,y data/small
a   b   i x                                                           y
pan pan 1 [0.204603]**********..............................[0.75868] [0.134189]********************************........[0.863624]
eks pan 2 [0.204603]***************************************#[0.75868] [0.134189]*********************...................[0.863624]
wye wye 3 [0.204603]#.......................................[0.75868] [0.134189]***********.............................[0.863624]
eks wye 4 [0.204603]************............................[0.75868] [0.134189]#.......................................[0.863624]
wye pan 5 [0.204603]**************************..............[0.75868] [0.134189]***************************************#[0.863624]

bootstrap

$ mlr bootstrap --help
Usage: mlr bootstrap [options]
Emits an n-sample, with replacement, of the input records.
Options:
-n {number} Number of samples to output. Defaults to number of input records.
            Must be non-negative.
See also mlr sample and mlr shuffle.

The canonical use for bootstrap sampling is to put error bars on statistical quantities, such as mean. For example:

$ mlr --opprint stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
yellow 0.497129 1413
red    0.492560 4641
purple 0.494005 1142
green  0.504861 1109
blue   0.517717 1470
orange 0.490532 303

$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
yellow 0.500651 1380
purple 0.501556 1111
green  0.503272 1068
red    0.493895 4702
blue   0.512529 1496
orange 0.521030 321

$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
yellow 0.498046 1485
blue   0.513576 1417
red    0.492870 4595
orange 0.507697 307
green  0.496803 1075
purple 0.486337 1199

$ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp
color  u_mean   u_count
blue   0.522921 1447
red    0.490717 4617
yellow 0.496450 1419
purple 0.496523 1192
green  0.507569 1111
orange 0.468014 292

cat

Most useful for format conversions (see File formats), and concatenating multiple same-schema CSV files to have the same header:

$ mlr cat -h
Usage: mlr cat [options]
Passes input records directly to output. Most useful for format conversion.
Options:
-n        Prepend field "n" to each record with record-counter starting at 1
-g {comma-separated field name(s)} When used with -n/-N, writes record-counters
          keyed by specified field name(s).
-v        Write a low-level record-structure dump to stderr.
-N {name} Prepend field {name} to each record with record-counter starting at 1

$ cat data/a.csv
a,b,c
1,2,3
4,5,6

$ cat data/b.csv
a,b,c
7,8,9

$ mlr --csv cat data/a.csv data/b.csv
a,b,c
1,2,3
4,5,6
7,8,9

$ mlr --icsv --oxtab cat data/a.csv data/b.csv
a 1
b 2
c 3

a 4
b 5
c 6

a 7
b 8
c 9

$ mlr --csv cat -n data/a.csv data/b.csv
n,a,b,c
1,1,2,3
2,4,5,6
3,7,8,9

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint cat -n -g a data/small
n a   b   i x                   y
1 pan pan 1 0.3467901443380824  0.7268028627434533
1 eks pan 2 0.7586799647899636  0.5221511083334797
1 wye wye 3 0.20460330576630303 0.33831852551664776
2 eks wye 4 0.38139939387114097 0.13418874328430463
2 wye pan 5 0.5732889198020006  0.8636244699032729

check

$ mlr check --help
Usage: mlr check
Consumes records without printing any output.
Useful for doing a well-formatted check on input data.

clean-whitespace

count-distinct

$ mlr count-distinct --help
Usage: mlr count-distinct [options]
Prints number of records having distinct values for specified field names.
Same as uniq -c.

Options:
-f {a,b,c}    Field names for distinct count.
-n            Show only the number of distinct values. Not compatible with -u.
-o {name}     Field name for output count. Default "count".
              Ignored with -u.
-u            Do unlashed counts for multiple field names. With -f a,b and
              without -u, computes counts for distinct combinations of a
              and b field values. With -f a,b and with -u, computes counts
              for distinct a field values and counts for distinct b field
              values separately.

$ mlr count-distinct -f a,b then sort -nr count data/medium
a=zee,b=wye,count=455
a=pan,b=eks,count=429
a=pan,b=pan,count=427
a=wye,b=hat,count=426
a=hat,b=wye,count=423
a=pan,b=hat,count=417
a=eks,b=hat,count=417
a=eks,b=eks,count=413
a=pan,b=zee,count=413
a=zee,b=hat,count=409
a=eks,b=wye,count=407
a=zee,b=zee,count=403
a=pan,b=wye,count=395
a=wye,b=pan,count=392
a=zee,b=eks,count=391
a=zee,b=pan,count=389
a=hat,b=eks,count=389
a=wye,b=eks,count=386
a=hat,b=zee,count=385
a=wye,b=zee,count=385
a=hat,b=hat,count=381
a=wye,b=wye,count=377
a=eks,b=pan,count=371
a=hat,b=pan,count=363
a=eks,b=zee,count=357

$ mlr count-distinct -u -f a,b data/medium
field=a,value=pan,count=2081
field=a,value=eks,count=1965
field=a,value=wye,count=1966
field=a,value=zee,count=2047
field=a,value=hat,count=1941
field=b,value=pan,count=1942
field=b,value=wye,count=2057
field=b,value=zee,count=1943
field=b,value=eks,count=2008
field=b,value=hat,count=2050

$ mlr count-distinct -f a,b -o someothername then sort -nr someothername data/medium
a=zee,b=wye,someothername=455
a=pan,b=eks,someothername=429
a=pan,b=pan,someothername=427
a=wye,b=hat,someothername=426
a=hat,b=wye,someothername=423
a=pan,b=hat,someothername=417
a=eks,b=hat,someothername=417
a=eks,b=eks,someothername=413
a=pan,b=zee,someothername=413
a=zee,b=hat,someothername=409
a=eks,b=wye,someothername=407
a=zee,b=zee,someothername=403
a=pan,b=wye,someothername=395
a=wye,b=pan,someothername=392
a=zee,b=eks,someothername=391
a=zee,b=pan,someothername=389
a=hat,b=eks,someothername=389
a=wye,b=eks,someothername=386
a=hat,b=zee,someothername=385
a=wye,b=zee,someothername=385
a=hat,b=hat,someothername=381
a=wye,b=wye,someothername=377
a=eks,b=pan,someothername=371
a=hat,b=pan,someothername=363
a=eks,b=zee,someothername=357

$ mlr count-distinct -n -f a,b data/medium
count=25

count-similar

$ mlr count-similar --help
Usage: mlr count-similar [options]
Ingests all records, then emits each record augmented by a count of
the number of other records having the same group-by field values.
Options:
-g {d,e,f} Group-by-field names for counts.
-o {name}  Field name for output count. Default "count".

$ mlr --opprint head -n 20 data/medium
a   b   i  x                   y
pan pan 1  0.3467901443380824  0.7268028627434533
eks pan 2  0.7586799647899636  0.5221511083334797
wye wye 3  0.20460330576630303 0.33831852551664776
eks wye 4  0.38139939387114097 0.13418874328430463
wye pan 5  0.5732889198020006  0.8636244699032729
zee pan 6  0.5271261600918548  0.49322128674835697
eks zee 7  0.6117840605678454  0.1878849191181694
zee wye 8  0.5985540091064224  0.976181385699006
hat wye 9  0.03144187646093577 0.7495507603507059
pan wye 10 0.5026260055412137  0.9526183602969864
pan pan 11 0.7930488423451967  0.6505816637259333
zee pan 12 0.3676141320555616  0.23614420670296965
eks pan 13 0.4915175580479536  0.7709126592971468
eks zee 14 0.5207382318405251  0.34141681118811673
eks pan 15 0.07155556372719507 0.3596137145616235
pan pan 16 0.5736853980681922  0.7554169353781729
zee eks 17 0.29081949506712723 0.054478717073354166
hat zee 18 0.05727869223575699 0.13343527626645157
zee pan 19 0.43144132839222604 0.8442204830496998
eks wye 20 0.38245149780530685 0.4730652428100751

$ mlr --opprint head -n 20 then count-similar -g a data/medium
a   b   i  x                   y                    count
pan pan 1  0.3467901443380824  0.7268028627434533   4
pan wye 10 0.5026260055412137  0.9526183602969864   4
pan pan 11 0.7930488423451967  0.6505816637259333   4
pan pan 16 0.5736853980681922  0.7554169353781729   4
eks pan 2  0.7586799647899636  0.5221511083334797   7
eks wye 4  0.38139939387114097 0.13418874328430463  7
eks zee 7  0.6117840605678454  0.1878849191181694   7
eks pan 13 0.4915175580479536  0.7709126592971468   7
eks zee 14 0.5207382318405251  0.34141681118811673  7
eks pan 15 0.07155556372719507 0.3596137145616235   7
eks wye 20 0.38245149780530685 0.4730652428100751   7
wye wye 3  0.20460330576630303 0.33831852551664776  2
wye pan 5  0.5732889198020006  0.8636244699032729   2
zee pan 6  0.5271261600918548  0.49322128674835697  5
zee wye 8  0.5985540091064224  0.976181385699006    5
zee pan 12 0.3676141320555616  0.23614420670296965  5
zee eks 17 0.29081949506712723 0.054478717073354166 5
zee pan 19 0.43144132839222604 0.8442204830496998   5
hat wye 9  0.03144187646093577 0.7495507603507059   2
hat zee 18 0.05727869223575699 0.13343527626645157  2

$ mlr --opprint head -n 20 then count-similar -g a then sort -f a data/medium
a   b   i  x                   y                    count
eks pan 2  0.7586799647899636  0.5221511083334797   7
eks wye 4  0.38139939387114097 0.13418874328430463  7
eks zee 7  0.6117840605678454  0.1878849191181694   7
eks pan 13 0.4915175580479536  0.7709126592971468   7
eks zee 14 0.5207382318405251  0.34141681118811673  7
eks pan 15 0.07155556372719507 0.3596137145616235   7
eks wye 20 0.38245149780530685 0.4730652428100751   7
hat wye 9  0.03144187646093577 0.7495507603507059   2
hat zee 18 0.05727869223575699 0.13343527626645157  2
pan pan 1  0.3467901443380824  0.7268028627434533   4
pan wye 10 0.5026260055412137  0.9526183602969864   4
pan pan 11 0.7930488423451967  0.6505816637259333   4
pan pan 16 0.5736853980681922  0.7554169353781729   4
wye wye 3  0.20460330576630303 0.33831852551664776  2
wye pan 5  0.5732889198020006  0.8636244699032729   2
zee pan 6  0.5271261600918548  0.49322128674835697  5
zee wye 8  0.5985540091064224  0.976181385699006    5
zee pan 12 0.3676141320555616  0.23614420670296965  5
zee eks 17 0.29081949506712723 0.054478717073354166 5
zee pan 19 0.43144132839222604 0.8442204830496998   5

cut

$ mlr cut --help
Usage: mlr cut [options]
Passes through input records with specified fields included/excluded.
-f {a,b,c}       Field names to include for cut.
-o               Retain fields in the order specified here in the argument list.
                 Default is to retain them in the order found in the input data.
-x|--complement  Exclude, rather than include, field names specified by -f.
-r               Treat field names as regular expressions. "ab", "a.*b" will
                 match any field name containing the substring "ab" or matching
                 "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may
                 be used. The -o flag is ignored when -r is present.
Examples:
  mlr cut -f hostname,status
  mlr cut -x -f hostname,status
  mlr cut -r -f '^status$,sda[0-9]'
  mlr cut -r -f '^status$,"sda[0-9]"'
  mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive)

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint cut -f y,x,i data/small
i x                   y
1 0.3467901443380824  0.7268028627434533
2 0.7586799647899636  0.5221511083334797
3 0.20460330576630303 0.33831852551664776
4 0.38139939387114097 0.13418874328430463
5 0.5732889198020006  0.8636244699032729

$ echo 'a=1,b=2,c=3' | mlr cut -f b,c,a
a=1,b=2,c=3

$ echo 'a=1,b=2,c=3' | mlr cut -o -f b,c,a
b=2,c=3,a=1

decimate

$ mlr decimate --help
Usage: mlr decimate [options]
-n {count}    Decimation factor; default 10
-b            Decimate by printing first of every n.
-e            Decimate by printing last of every n (default).
-g {a,b,c}    Optional group-by-field names for decimate counts
Passes through one of every n records, optionally by category.

fill-down

$ mlr fill-down --help
Usage: mlr fill-down [options]
-f {a,b,c}          Field names for fill-down
-a|--only-if-absent Field names for fill-down
If a given record has a missing value for a given field, fill that from
the corresponding value from a previous record, if any.
By default, a 'missing' field either is absent, or has the empty-string value.
With -a, a field is 'missing' only if it is absent.

$ cat data/fill-down.csv
a,b,c
1,,3
4,5,6
7,,9

$ mlr --csv fill-down -f b data/fill-down.csv
a,b,c
1,,3
4,5,6
7,5,9

$ mlr --csv fill-down -a -f b data/fill-down.csv
a,b,c
1,,3
4,5,6
7,,9

filter

$ mlr filter --help
Usage: mlr filter [options] {expression}
Prints records for which {expression} evaluates to true.
If there are multiple semicolon-delimited expressions, all of them are
evaluated and the last one is used as the filter criterion.

Conversion options:
-S: Keeps field values as strings with no type inference to int or float.
-F: Keeps field values as strings or floats with no inference to int.
All field values are type-inferred to int/float/string unless this behavior is
suppressed with -S or -F.

Output/formatting options:
--oflatsep {string}: Separator to use when flattening multi-level @-variables
    to output records for emit. Default ":".
--jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
--jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
Any of the output-format command-line flags (see mlr -h). Example: using
  mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
the input is CSV, the output is pretty-print tabular, but the tee-file output
is written in JSON format.
--no-fflush: for emit, tee, print, and dump, don't call fflush() after every
    record.

Expression-specification options:
-f {filename}: the DSL expression is taken from the specified file rather
    than from the command line. Outer single quotes wrapping the expression
    should not be placed in the file. If -f is specified more than once,
    all input files specified using -f are concatenated to produce the expression.
    (For example, you can define functions in one file and call them from another.)
-e {expression}: You can use this after -f to add an expression. Example use
    case: define functions/subroutines in a file you specify with -f, then call
    them with an expression you specify with -e.
(If you mix -e and -f then the expressions are evaluated in the order encountered.
Since the expression pieces are simply concatenated, please be sure to use intervening
semicolons to separate expressions.)

Tracing options:
-v: Prints the expressions's AST (abstract syntax tree), which gives
    full transparency on the precedence and associativity rules of
    Miller's grammar, to stdout.
-a: Prints a low-level stack-allocation trace to stdout.
-t: Prints a low-level parser trace to stderr.
-T: Prints a every statement to stderr as it is executed.

Other options:
-x: Prints records for which {expression} evaluates to false.

Please use a dollar sign for field names and double-quotes for string
literals. If field names have special characters such as "." then you might
use braces, e.g. '${field.name}'. Miller built-in variables are
NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
variables. The environment-variable name may be an expression, e.g. a field
value.

Use # to comment to end of line.

Examples:
  mlr filter 'log10($count) > 4.0'
  mlr filter 'FNR == 2          (second record in each file)'
  mlr filter 'urand() < 0.001'  (subsampling)
  mlr filter '$color != "blue" && $value > 4.2'
  mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)'
  mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)'
  mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd'
  mlr filter '
    NR == 1 ||
   #NR == 2 ||
    NR == 3
  '

Please see http://johnkerl.org/miller/doc/reference.html for more information
including function list. Or "mlr -f". Please also also "mlr grep" which is
useful when you don't yet know which field name(s) you're looking for.

Features which filter shares with put

Please see Expression language for filter and put for more information about the expression language for mlr filter.

format-values

$ mlr format-values --help
Usage: mlr format-values [options]
Applies format strings to all field values, depending on autodetected type.
* If a field value is detected to be integer, applies integer format.
* Else, if a field value is detected to be float, applies float format.
* Else, applies string format.

Note: this is a low-keystroke way to apply formatting to many fields. To get
finer control, please see the fmtnum function within the mlr put DSL.

Note: this verb lets you apply arbitrary format strings, which can produce
undefined behavior and/or program crashes.  See your system's "man printf".

Options:
-i {integer format} Defaults to "%lld".
                    Examples: "%06lld", "%08llx".
                    Note that Miller integers are long long so you must use
                    formats which apply to long long, e.g. with ll in them.
                    Undefined behavior results otherwise.
-f {float format}   Defaults to "%lf".
                    Examples: "%8.3lf", "%.6le".
                    Note that Miller floats are double-precision so you must
                    use formats which apply to double, e.g. with l[efg] in them.
                    Undefined behavior results otherwise.
-s {string format}  Defaults to "%s".
                    Examples: "_%s", "%08s".
                    Note that you must use formats which apply to string, e.g.
                    with s in them. Undefined behavior results otherwise.
-n                  Coerce field values autodetected as int to float, and then
                    apply the float format.

$ mlr --opprint format-values data/small
a   b   i x        y
pan pan 1 0.346790 0.726803
eks pan 2 0.758680 0.522151
wye wye 3 0.204603 0.338319
eks wye 4 0.381399 0.134189
wye pan 5 0.573289 0.863624

$ mlr --opprint format-values -n data/small
a   b   i        x        y
pan pan 1.000000 0.346790 0.726803
eks pan 2.000000 0.758680 0.522151
wye wye 3.000000 0.204603 0.338319
eks wye 4.000000 0.381399 0.134189
wye pan 5.000000 0.573289 0.863624

$ mlr --opprint format-values -i %08llx -f %.6le -s X%sX data/small
a     b     i        x            y
XpanX XpanX 00000001 3.467901e-01 7.268029e-01
XeksX XpanX 00000002 7.586800e-01 5.221511e-01
XwyeX XwyeX 00000003 2.046033e-01 3.383185e-01
XeksX XwyeX 00000004 3.813994e-01 1.341887e-01
XwyeX XpanX 00000005 5.732889e-01 8.636245e-01

$ mlr --opprint format-values -i %08llx -f %.6le -s X%sX -n data/small
a     b     i            x            y
XpanX XpanX 1.000000e+00 3.467901e-01 7.268029e-01
XeksX XpanX 2.000000e+00 7.586800e-01 5.221511e-01
XwyeX XwyeX 3.000000e+00 2.046033e-01 3.383185e-01
XeksX XwyeX 4.000000e+00 3.813994e-01 1.341887e-01
XwyeX XpanX 5.000000e+00 5.732889e-01 8.636245e-01

fraction

$ mlr fraction --help
Usage: mlr fraction [options]
For each record's value in specified fields, computes the ratio of that
value to the sum of values in that field over all input records.
E.g. with input records  x=1  x=2  x=3  and  x=4, emits output records
x=1,x_fraction=0.1  x=2,x_fraction=0.2  x=3,x_fraction=0.3  and  x=4,x_fraction=0.4

Note: this is internally a two-pass algorithm: on the first pass it retains
input records and accumulates sums; on the second pass it computes quotients
and emits output records. This means it produces no output until all input is read.

Options:
-f {a,b,c}    Field name(s) for fraction calculation
-g {d,e,f}    Optional group-by-field name(s) for fraction counts
-p            Produce percents [0..100], not fractions [0..1]. Output field names
              end with "_percent" rather than "_fraction"
-c            Produce cumulative distributions, i.e. running sums: each output
              value folds in the sum of the previous for the specified group
              E.g. with input records  x=1  x=2  x=3  and  x=4, emits output records
              x=1,x_cumulative_fraction=0.1  x=2,x_cumulative_fraction=0.3
              x=3,x_cumulative_fraction=0.6  and  x=4,x_cumulative_fraction=1.0

For example, suppose you have the following CSV file:

u=female,v=red,n=2458
u=female,v=green,n=192
u=female,v=blue,n=337
u=female,v=purple,n=468
u=female,v=yellow,n=3
u=female,v=orange,n=17
u=male,v=red,n=143
u=male,v=green,n=227
u=male,v=blue,n=2034
u=male,v=purple,n=12
u=male,v=yellow,n=1192
u=male,v=orange,n=448

Then we can see what each record’s n contributes to the total n:

$ mlr --opprint fraction -f n data/fraction-example.csv
u      v      n    n_fraction
female red    2458 0.326384
female green  192  0.025495
female blue   337  0.044748
female purple 468  0.062143
female yellow 3    0.000398
female orange 17   0.002257
male   red    143  0.018988
male   green  227  0.030142
male   blue   2034 0.270084
male   purple 12   0.001593
male   yellow 1192 0.158279
male   orange 448  0.059487

Using -g we can split those out by gender, or by color:

$ mlr --opprint fraction -f n -g u data/fraction-example.csv
u      v      n    n_fraction
female red    2458 0.707338
female green  192  0.055252
female blue   337  0.096978
female purple 468  0.134676
female yellow 3    0.000863
female orange 17   0.004892
male   red    143  0.035256
male   green  227  0.055966
male   blue   2034 0.501479
male   purple 12   0.002959
male   yellow 1192 0.293886
male   orange 448  0.110454

$ mlr --opprint fraction -f n -g v data/fraction-example.csv
u      v      n    n_fraction
female red    2458 0.945021
female green  192  0.458234
female blue   337  0.142134
female purple 468  0.975000
female yellow 3    0.002510
female orange 17   0.036559
male   red    143  0.054979
male   green  227  0.541766
male   blue   2034 0.857866
male   purple 12   0.025000
male   yellow 1192 0.997490
male   orange 448  0.963441

We can see, for example, that 70.9% of females have red (on the left) while 94.5% of reds are for females.

To convert fractions to percents, you may use -p:

$ mlr --opprint fraction -f n -p data/fraction-example.csv
u      v      n    n_percent
female red    2458 32.638428
female green  192  2.549462
female blue   337  4.474837
female purple 468  6.214314
female yellow 3    0.039835
female orange 17   0.225734
male   red    143  1.898818
male   green  227  3.014208
male   blue   2034 27.008365
male   purple 12   0.159341
male   yellow 1192 15.827911
male   orange 448  5.948745

Another often-used idiom is to convert from a point distribution to a cumulative distribution, also known as “running sums”. Here, you can use -c:

$ mlr --opprint fraction -f n -p -c data/fraction-example.csv
u      v      n    n_cumulative_percent
female red    2458 32.638428
female green  192  35.187890
female blue   337  39.662727
female purple 468  45.877042
female yellow 3    45.916877
female orange 17   46.142611
male   red    143  48.041429
male   green  227  51.055637
male   blue   2034 78.064002
male   purple 12   78.223344
male   yellow 1192 94.051255
male   orange 448  100

$ mlr --opprint fraction -f n -g u -p -c data/fraction-example.csv
u      v      n    n_cumulative_percent
female red    2458 70.733813
female green  192  76.258993
female blue   337  85.956835
female purple 468  99.424460
female yellow 3    99.510791
female orange 17   100
male   red    143  3.525641
male   green  227  9.122288
male   blue   2034 59.270217
male   purple 12   59.566075
male   yellow 1192 88.954635
male   orange 448  100

grep

$ mlr grep -h
Usage: mlr grep [options] {regular expression}
Passes through records which match {regex}.
Options:
-i    Use case-insensitive search.
-v    Invert: pass through records which do not match the regex.
Note that "mlr filter" is more powerful, but requires you to know field names.
By contrast, "mlr grep" allows you to regex-match the entire record. It does
this by formatting each record in memory as DKVP, using command-line-specified
ORS/OFS/OPS, and matching the resulting line against the regex specified
here. In particular, the regex is not applied to the input stream: if you
have CSV with header line "x,y,z" and data line "1,2,3" then the regex will
be matched, not against either of these lines, but against the DKVP line
"x=1,y=2,z=3".  Furthermore, not all the options to system grep are supported,
and this command is intended to be merely a keystroke-saver. To get all the
features of system grep, you can do
  "mlr --odkvp ... | grep ... | mlr --idkvp ..."

group-by

$ mlr group-by --help
Usage: mlr group-by {comma-separated field names}
Outputs records in batches having identical values at specified field names.

This is similar to sort but with less work. Namely, Miller’s sort has three steps: read through the data and append linked lists of records, one for each unique combination of the key-field values; after all records are read, sort the key-field values; then print each record-list. The group-by operation simply omits the middle sort. An example should make this more clear.

$ mlr --opprint group-by a data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
eks wye 4 0.38139939387114097 0.13418874328430463
wye wye 3 0.20460330576630303 0.33831852551664776
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint sort -f a data/small
a   b   i x                   y
eks pan 2 0.7586799647899636  0.5221511083334797
eks wye 4 0.38139939387114097 0.13418874328430463
pan pan 1 0.3467901443380824  0.7268028627434533
wye wye 3 0.20460330576630303 0.33831852551664776
wye pan 5 0.5732889198020006  0.8636244699032729

In this example, since the sort is on field a, the first step is to group together all records having the same value for field a; the second step is to sort the distinct a-field values pan, eks, and wye into eks, pan, and wye; the third step is to print out the record-list for a=eks, then the record-list for a=pan, then the record-list for a=wye. The group-by operation omits the middle sort and just puts like records together, for those times when a sort isn’t desired. In particular, the ordering of group-by fields for group-by is the order in which they were encountered in the data stream, which in some cases may be more interesting to you.

group-like

$ mlr group-like --help
Usage: mlr group-like
Outputs records in batches having identical field names.

This groups together records having the same schema (i.e. same ordered list of field names) which is useful for making sense of time-ordered output as described in Record-hetrogeneity — in particular, in preparation for CSV or pretty-print output.

$ mlr cat data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false

$ mlr --opprint group-like data/het.dkvp
resource             loadsec ok
/path/to/file        0.45    true
/path/to/second/file 0.32    true
/some/other/path     0.97    false

record_count resource
100          /path/to/file
150          /path/to/second/file

having-fields

$ mlr having-fields --help
Usage: mlr having-fields [options]
Conditionally passes through records depending on each record's field names.
Options:
  --at-least      {comma-separated names}
  --which-are     {comma-separated names}
  --at-most       {comma-separated names}
  --all-matching  {regular expression}
  --any-matching  {regular expression}
  --none-matching {regular expression}
Examples:
  mlr having-fields --which-are amount,status,owner
  mlr having-fields --any-matching 'sda[0-9]'
  mlr having-fields --any-matching '"sda[0-9]"'
  mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive)

Similar to group-like, this retains records with specified schema.

$ mlr cat data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false

$ mlr having-fields --at-least resource data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false

$ mlr having-fields --which-are resource,ok,loadsec data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
resource=/path/to/second/file,loadsec=0.32,ok=true
resource=/some/other/path,loadsec=0.97,ok=false

head

$ mlr head --help
Usage: mlr head [options]
-n {count}    Head count to print; default 10
-g {a,b,c}    Optional group-by-field names for head counts
Passes through the first n records, optionally by category.
Without -g, ceases consuming more input (i.e. is fast) when n
records have been read.

Note that head is distinct from tophead shows fields which appear first in the data stream; top shows fields which are numerically largest (or smallest).

$ mlr --opprint head -n 4 data/medium
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463

$ mlr --opprint head -n 1 -g b data/medium
a   b   i  x                   y
pan pan 1  0.3467901443380824  0.7268028627434533
wye wye 3  0.20460330576630303 0.33831852551664776
eks zee 7  0.6117840605678454  0.1878849191181694
zee eks 17 0.29081949506712723 0.054478717073354166
wye hat 24 0.7286126830627567  0.19441962592638418

histogram

$ mlr histogram --help
Usage: mlr histogram [options]
-f {a,b,c}    Value-field names for histogram counts
--lo {lo}     Histogram low value
--hi {hi}     Histogram high value
--nbins {n}   Number of histogram bins
--auto        Automatically computes limits, ignoring --lo and --hi.
              Holds all values in memory before producing any output.
-o {prefix}   Prefix for output field name. Default: no prefix.
Just a histogram. Input values < lo or > hi are not counted.

This is just a histogram; there’s not too much to say here. A note about binning, by example: Suppose you use --lo 0.0 --hi 1.0 --nbins 10 -f x. The input numbers less than 0 or greater than 1 aren’t counted in any bin. Input numbers equal to 1 are counted in the last bin. That is, bin 0 has 0.0 ≤ x < 0.1, bin 1 has 0.1 ≤ x < 0.2, etc., but bin 9 has 0.9 ≤ x ≤ 1.0.

$ mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 data/medium
bin_lo   bin_hi   x_count x2_count x3_count
0.000000 0.100000 1072    3231     4661
0.100000 0.200000 938     1254     1184
0.200000 0.300000 1037    988      845
0.300000 0.400000 988     832      676
0.400000 0.500000 950     774      576
0.500000 0.600000 1002    692      476
0.600000 0.700000 1007    591      438
0.700000 0.800000 1007    560      420
0.800000 0.900000 986     571      383
0.900000 1.000000 1013    507      341

$ mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 -o my_ data/medium
my_bin_lo my_bin_hi my_x_count my_x2_count my_x3_count
0.000000  0.100000  1072       3231        4661
0.100000  0.200000  938        1254        1184
0.200000  0.300000  1037       988         845
0.300000  0.400000  988        832         676
0.400000  0.500000  950        774         576
0.500000  0.600000  1002       692         476
0.600000  0.700000  1007       591         438
0.700000  0.800000  1007       560         420
0.800000  0.900000  986        571         383
0.900000  1.000000  1013       507         341

join

$ mlr join --help
Usage: mlr join [options]
Joins records from specified left file name with records from all file names
at the end of the Miller argument list.
Functionality is essentially the same as the system "join" command, but for
record streams.
Options:
  -f {left file name}
  -j {a,b,c}   Comma-separated join-field names for output
  -l {a,b,c}   Comma-separated join-field names for left input file;
               defaults to -j values if omitted.
  -r {a,b,c}   Comma-separated join-field names for right input file(s);
               defaults to -j values if omitted.
  --lp {text}  Additional prefix for non-join output field names from
               the left file
  --rp {text}  Additional prefix for non-join output field names from
               the right file(s)
  --np         Do not emit paired records
  --ul         Emit unpaired records from the left file
  --ur         Emit unpaired records from the right file(s)
  -s|--sorted-input  Require sorted input: records must be sorted
               lexically by their join-field names, else not all records will
               be paired. The only likely use case for this is with a left
               file which is too big to fit into system memory otherwise.
  -u           Enable unsorted input. (This is the default even without -u.)
               In this case, the entire left file will be loaded into memory.
  --prepipe {command} As in main input options; see mlr --help for details.
               If you wish to use a prepipe command for the main input as well
               as here, it must be specified there as well as here.
File-format options default to those for the right file names on the Miller
argument list, but may be overridden for the left file as follows. Please see
the main "mlr --help" for more information on syntax for these arguments.
  -i {one of csv,dkvp,nidx,pprint,xtab}
  --irs {record-separator character}
  --ifs {field-separator character}
  --ips {pair-separator character}
  --repifs
  --repips
  --mmap
  --no-mmap
Please use "mlr --usage-separator-options" for information on specifying separators.
Please see http://johnkerl.org/miller/doc/reference.html for more information
including examples.

Examples:

Join larger table with IDs with smaller ID-to-name lookup table, showing only paired records:

$ mlr --icsvlite --opprint cat data/join-left-example.csv
id  name
100 alice
200 bob
300 carol
400 david
500 edgar

$ mlr --icsvlite --opprint cat data/join-right-example.csv
status  idcode
present 400
present 100
missing 200
present 100
present 200
missing 100
missing 200
present 300
missing 600
present 400
present 400
present 300
present 100
missing 400
present 200
present 200
present 200
present 200
present 400
present 300

$ mlr --icsvlite --opprint join -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv
id  name  status
400 david present
100 alice present
200 bob   missing
100 alice present
200 bob   present
100 alice missing
200 bob   missing
300 carol present
400 david present
400 david present
300 carol present
100 alice present
400 david missing
200 bob   present
200 bob   present
200 bob   present
200 bob   present
400 david present
300 carol present

Same, but with sorting the input first:

$ mlr --icsvlite --opprint sort -f idcode then join -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv
id  name  status
100 alice present
100 alice present
100 alice missing
100 alice present
200 bob   missing
200 bob   present
200 bob   missing
200 bob   present
200 bob   present
200 bob   present
200 bob   present
300 carol present
300 carol present
300 carol present
400 david present
400 david present
400 david present
400 david missing
400 david present

Same, but showing only unpaired records:

$ mlr --icsvlite --opprint join --np --ul --ur -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv
status  idcode
missing 600

id  name
500 edgar

Use prefixing options to disambiguate between otherwise identical non-join field names:

$ mlr --csvlite --opprint cat data/self-join.csv data/self-join.csv
a b c
1 2 3
1 4 5
1 2 3
1 4 5

$ mlr --csvlite --opprint join -j a --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv
a left_b left_c right_b right_c
1 2      3      2       3
1 4      5      2       3
1 2      3      4       5
1 4      5      4       5

Use zero join columns:

$ mlr --csvlite --opprint join -j "" --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv
left_a left_b left_c right_a right_b right_c
1      2      3      1       2       3
1      4      5      1       2       3
1      2      3      1       4       5
1      4      5      1       4       5

label

$ mlr label --help
Usage: mlr label {new1,new2,new3,...}
Given n comma-separated names, renames the first n fields of each record to
have the respective name. (Fields past the nth are left with their original
names.) Particularly useful with --inidx or --implicit-csv-header, to give
useful names to otherwise integer-indexed fields.
Examples:
  "echo 'a b c d' | mlr --inidx --odkvp cat"       gives "1=a,2=b,3=c,4=d"
  "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d"

See also rename.

Example: Files such as /etc/passwd, /etc/group, and so on have implicit field names which are found in section-5 manpages. These field names may be made explicit as follows:

% grep -v '^#' /etc/passwd | mlr --nidx --fs : --opprint label name,password,uid,gid,gecos,home_dir,shell | head
name                  password uid gid gecos                         home_dir           shell
nobody                *        -2  -2  Unprivileged User             /var/empty         /usr/bin/false
root                  *        0   0   System Administrator          /var/root          /bin/sh
daemon                *        1   1   System Services               /var/root          /usr/bin/false
_uucp                 *        4   4   Unix to Unix Copy Protocol    /var/spool/uucp    /usr/sbin/uucico
_taskgated            *        13  13  Task Gate Daemon              /var/empty         /usr/bin/false
_networkd             *        24  24  Network Services              /var/networkd      /usr/bin/false
_installassistant     *        25  25  Install Assistant             /var/empty         /usr/bin/false
_lp                   *        26  26  Printing Services             /var/spool/cups    /usr/bin/false
_postfix              *        27  27  Postfix Mail Server           /var/spool/postfix /usr/bin/false

Likewise, if you have CSV/CSV-lite input data which has somehow been bereft of its header line, you can re-add a header line using --implicit-csv-header and label:

$ cat data/headerless.csv
John,23,present
Fred,34,present
Alice,56,missing
Carol,45,present

$ mlr  --csv --implicit-csv-header cat data/headerless.csv
1,2,3
John,23,present
Fred,34,present
Alice,56,missing
Carol,45,present

$ mlr  --csv --implicit-csv-header label name,age,status data/headerless.csv
name,age,status
John,23,present
Fred,34,present
Alice,56,missing
Carol,45,present

$ mlr --icsv --implicit-csv-header --opprint label name,age,status data/headerless.csv
name  age status
John  23  present
Fred  34  present
Alice 56  missing
Carol 45  present

least-frequent

merge-fields

$ mlr merge-fields --help
Usage: mlr merge-fields [options]
Computes univariate statistics for each input record, accumulated across
specified fields.
Options:
-a {sum,count,...}  Names of accumulators. One or more of:
  count     Count instances of fields
  mode      Find most-frequently-occurring values for fields; first-found wins tie
  antimode  Find least-frequently-occurring values for fields; first-found wins tie
  sum       Compute sums of specified fields
  mean      Compute averages (sample means) of specified fields
  stddev    Compute sample standard deviation of specified fields
  var       Compute sample variance of specified fields
  meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
  skewness  Compute sample skewness of specified fields
  kurtosis  Compute sample kurtosis of specified fields
  min       Compute minimum values of specified fields
  max       Compute maximum values of specified fields
-f {a,b,c}  Value-field names on which to compute statistics. Requires -o.
-r {a,b,c}  Regular expressions for value-field names on which to compute
            statistics. Requires -o.
-c {a,b,c}  Substrings for collapse mode. All fields which have the same names
            after removing substrings will be accumulated together. Please see
            examples below.
-i          Use interpolated percentiles, like R's type=7; default like type=1.
            Not sensical for string-valued fields.
-o {name}   Output field basename for -f/-r.
-k          Keep the input fields which contributed to the output statistics;
            the default is to omit them.
-F          Computes integerable things (e.g. count) in floating point.

String-valued data make sense unless arithmetic on them is required,
e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
numbers are less than strings.

Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8".
Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo
  produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are
  summed over.
Example: mlr merge-fields -a sum,count -r in_,out_ -o bar
  produces "bar_sum=15,bar_count=4" since all four fields are summed over.
Example: mlr merge-fields -a sum,count -c in_,out_
  produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1"
  since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to
  "b_y", and "b_out_x" collapses to "b_x".

This is like mlr stats1 but all accumulation is done across fields within each given record: horizontal rather than vertical statistics, if you will.

Examples:

$ mlr --csvlite --opprint cat data/inout.csv
a_in a_out b_in b_out
436  490   446  195
526  320   963  780
220  888   705  831

$ mlr --csvlite --opprint merge-fields -a min,max,sum -c _in,_out data/inout.csv
a_min a_max a_sum b_min b_max b_sum
436   490   926   195   446   641
320   526   846   780   963   1743
220   888   1108  705   831   1536

$ mlr --csvlite --opprint merge-fields -k -a sum -c _in,_out data/inout.csv
a_in a_out b_in b_out a_sum b_sum
436  490   446  195   926   641
526  320   963  780   846   1743
220  888   705  831   1108  1536

most-frequent

nest

$ mlr nest -h
Usage: mlr nest [options]
Explodes specified field values into separate fields/records, or reverses this.
Options:
  --explode,--implode   One is required.
  --values,--pairs      One is required.
  --across-records,--across-fields One is required.
  -f {field name}       Required.
  --nested-fs {string}  Defaults to ";". Field separator for nested values.
  --nested-ps {string}  Defaults to ":". Pair separator for nested key-value pairs.
  --evar {string}       Shorthand for --explode --values ---across-records --nested-fs {string}
  --ivar {string}       Shorthand for --implode --values ---across-records --nested-fs {string}
Please use "mlr --usage-separator-options" for information on specifying separators.

Examples:

  mlr nest --explode --values --across-records -f x
  with input record "x=a;b;c,y=d" produces output records
    "x=a,y=d"
    "x=b,y=d"
    "x=c,y=d"
  Use --implode to do the reverse.

  mlr nest --explode --values --across-fields -f x
  with input record "x=a;b;c,y=d" produces output records
    "x_1=a,x_2=b,x_3=c,y=d"
  Use --implode to do the reverse.

  mlr nest --explode --pairs --across-records -f x
  with input record "x=a:1;b:2;c:3,y=d" produces output records
    "a=1,y=d"
    "b=2,y=d"
    "c=3,y=d"

  mlr nest --explode --pairs --across-fields -f x
  with input record "x=a:1;b:2;c:3,y=d" produces output records
    "a=1,b=2,c=3,y=d"

Notes:
* With --pairs, --implode doesn't make sense since the original field name has
  been lost.
* The combination "--implode --values --across-records" is non-streaming:
  no output records are produced until all input records have been read. In
  particular, this means it won't work in tail -f contexts. But all other flag
  combinations result in streaming (tail -f friendly) data processing.
* It's up to you to ensure that the nested-fs is distinct from your data's IFS:
  e.g. by default the former is semicolon and the latter is comma.
See also mlr reshape.

nothing

$ mlr nothing -h
Usage: mlr nothing [options]
Drops all input records. Useful for testing, or after tee/print/etc. have
produced other output.

put

$ mlr put --help
Usage: mlr put [options] {expression}
Adds/updates specified field(s). Expressions are semicolon-separated and must
either be assignments, or evaluate to boolean.  Booleans with following
statements in curly braces control whether those statements are executed;
booleans without following curly braces do nothing except side effects (e.g.
regex-captures into \1, \2, etc.).

Conversion options:
-S: Keeps field values as strings with no type inference to int or float.
-F: Keeps field values as strings or floats with no inference to int.
All field values are type-inferred to int/float/string unless this behavior is
suppressed with -S or -F.

Output/formatting options:
--oflatsep {string}: Separator to use when flattening multi-level @-variables
    to output records for emit. Default ":".
--jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.
--jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.
Any of the output-format command-line flags (see mlr -h). Example: using
  mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ...
the input is CSV, the output is pretty-print tabular, but the tee-file output
is written in JSON format.
--no-fflush: for emit, tee, print, and dump, don't call fflush() after every
    record.

Expression-specification options:
-f {filename}: the DSL expression is taken from the specified file rather
    than from the command line. Outer single quotes wrapping the expression
    should not be placed in the file. If -f is specified more than once,
    all input files specified using -f are concatenated to produce the expression.
    (For example, you can define functions in one file and call them from another.)
-e {expression}: You can use this after -f to add an expression. Example use
    case: define functions/subroutines in a file you specify with -f, then call
    them with an expression you specify with -e.
(If you mix -e and -f then the expressions are evaluated in the order encountered.
Since the expression pieces are simply concatenated, please be sure to use intervening
semicolons to separate expressions.)

Tracing options:
-v: Prints the expressions's AST (abstract syntax tree), which gives
    full transparency on the precedence and associativity rules of
    Miller's grammar, to stdout.
-a: Prints a low-level stack-allocation trace to stdout.
-t: Prints a low-level parser trace to stderr.
-T: Prints a every statement to stderr as it is executed.

Other options:
-q: Does not include the modified record in the output stream. Useful for when
    all desired output is in begin and/or end blocks.

Please use a dollar sign for field names and double-quotes for string
literals. If field names have special characters such as "." then you might
use braces, e.g. '${field.name}'. Miller built-in variables are
NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment
variables. The environment-variable name may be an expression, e.g. a field
value.

Use # to comment to end of line.

Examples:
  mlr put '$y = log10($x); $z = sqrt($y)'
  mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0
  mlr put '$x>0.0;  $y=log10($x); $z=sqrt($y)'   # does all three statements
  mlr put '$a =~ "([a-z]+)_([0-9]+);  $b = "left_\1"; $c = "right_\2"'
  mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }'
  mlr put '$filename = FILENAME'
  mlr put '$colored_shape = $color . "_" . $shape'
  mlr put '$y = cos($theta); $z = atan2($y, $x)'
  mlr put '$name = sub($name, "http.*com"i, "")'
  mlr put -q '@sum += $x; end {emit @sum}'
  mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}'
  mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}'
  mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}'
  mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}'
  mlr put '
    $x = 1;
   #$y = 2;
    $z = 3
  '

Please see also 'mlr -k' for examples using redirected output.

Please see http://johnkerl.org/miller/doc/reference.html for more information
including function list. Or "mlr -f".
Please see in particular:
  http://www.johnkerl.org/miller/doc/reference.html#put

Features which put shares with filter

Please see Expression language for filter and put for more information about the expression language for mlr put.

regularize

remove-empty-columns

$ mlr remove-empty-columns --help
Usage: mlr remove-empty-columns
Omits fields which are empty on every input row. Non-streaming.

$ cat data/remove-empty-columns.csv
a,b,c,d,e
1,,3,,5
2,,4,,5
3,,5,,7

$ mlr --csv remove-empty-columns data/remove-empty-columns.csv
a,c,e
1,3,5
2,4,5
3,5,7

Since this verb needs to read all records to see if any of them has a non-empty value for a given field name, it is non-streaming: it will ingest all records before writing any.

rename

$ mlr rename --help
Usage: mlr rename [options] {old1,new1,old2,new2,...}
Renames specified fields.
Options:
-r         Treat old field  names as regular expressions. "ab", "a.*b"
           will match any field name containing the substring "ab" or
           matching "a.*b", respectively; anchors of the form "^ab$",
           "^a.*b$" may be used. New field names may be plain strings,
           or may contain capture groups of the form "\1" through
           "\9". Wrapping the regex in double quotes is optional, but
           is required if you wish to follow it with 'i' to indicate
           case-insensitivity.
-g         Do global replacement within each field name rather than
           first-match replacement.
Examples:
mlr rename old_name,new_name'
mlr rename old_name_1,new_name_1,old_name_2,new_name_2'
mlr rename -r 'Date_[0-9]+,Date,'  Rename all such fields to be "Date"
mlr rename -r '"Date_[0-9]+",Date' Same
mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015
mlr rename -r '"name"i,Name'       Rename "name", "Name", "NAME", etc. to "Name"

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint rename i,INDEX,b,COLUMN2 data/small
a   COLUMN2 INDEX x                   y
pan pan     1     0.3467901443380824  0.7268028627434533
eks pan     2     0.7586799647899636  0.5221511083334797
wye wye     3     0.20460330576630303 0.33831852551664776
eks wye     4     0.38139939387114097 0.13418874328430463
wye pan     5     0.5732889198020006  0.8636244699032729

As discussed in Performance, sed is significantly faster than Miller at doing this. However, Miller is format-aware, so it knows to do renames only within specified field keys and not any others, nor in field values which may happen to contain the same pattern. Example:

$ sed 's/y/COLUMN5/g' data/small
a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797
a=wCOLUMN5e,b=wCOLUMN5e,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776
a=eks,b=wCOLUMN5e,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463
a=wCOLUMN5e,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729

$ mlr rename y,COLUMN5 data/small
a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729

See also label.

reorder

$ mlr reorder --help
Usage: mlr reorder [options]
-f {a,b,c}   Field names to reorder.
-e           Put specified field names at record end: default is to put
             them at record start.
Examples:
mlr reorder    -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3".
mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2".

This pivots specified field names to the start or end of the record — for example when you have highly multi-column data and you want to bring a field or two to the front of line where you can give a quick visual scan.

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint reorder -f i,b data/small
i b   a   x                   y
1 pan pan 0.3467901443380824  0.7268028627434533
2 pan eks 0.7586799647899636  0.5221511083334797
3 wye wye 0.20460330576630303 0.33831852551664776
4 wye eks 0.38139939387114097 0.13418874328430463
5 pan wye 0.5732889198020006  0.8636244699032729

$ mlr --opprint reorder -e -f i,b data/small
a   x                   y                   i b
pan 0.3467901443380824  0.7268028627434533  1 pan
eks 0.7586799647899636  0.5221511083334797  2 pan
wye 0.20460330576630303 0.33831852551664776 3 wye
eks 0.38139939387114097 0.13418874328430463 4 wye
wye 0.5732889198020006  0.8636244699032729  5 pan

repeat

$ mlr repeat --help
Usage: mlr repeat [options]
Copies input records to output records multiple times.
Options must be exactly one of the following:
  -n {repeat count}  Repeat each input record this many times.
  -f {field name}    Same, but take the repeat count from the specified
                     field name of each input record.
Example:
  echo x=0 | mlr repeat -n 4 then put '$x=urand()'
produces:
 x=0.488189
 x=0.484973
 x=0.704983
 x=0.147311
Example:
  echo a=1,b=2,c=3 | mlr repeat -f b
produces:
  a=1,b=2,c=3
  a=1,b=2,c=3
Example:
  echo a=1,b=2,c=3 | mlr repeat -f c
produces:
  a=1,b=2,c=3
  a=1,b=2,c=3
  a=1,b=2,c=3

This is useful in at least two ways: one, as a data-generator as in the above example using urand(); two, for reconstructing individual samples from data which has been count-aggregated:

$ cat data/repeat-example.dat
color=blue,count=5
color=red,count=4
color=green,count=3

$ mlr repeat -f count then cut -x -f count data/repeat-example.dat
color=blue
color=blue
color=blue
color=blue
color=blue
color=red
color=red
color=red
color=red
color=green
color=green
color=green

After expansion with repeat, such data can then be sent on to stats1 -a mode, or (if the data are numeric) to stats1 -a p10,p50,p90, etc.

reshape

$ mlr reshape --help
Usage: mlr reshape [options]
Wide-to-long options:
  -i {input field names}   -o {key-field name,value-field name}
  -r {input field regexes} -o {key-field name,value-field name}
  These pivot/reshape the input data such that the input fields are removed
  and separate records are emitted for each key/value pair.
  Note: this works with tail -f and produces output records for each input
  record seen.
Long-to-wide options:
  -s {key-field name,value-field name}
  These pivot/reshape the input data to undo the wide-to-long operation.
  Note: this does not work with tail -f; it produces output records only after
  all input records have been read.

Examples:

  Input file "wide.txt":
    time       X           Y
    2009-01-01 0.65473572  2.4520609
    2009-01-02 -0.89248112 0.2154713
    2009-01-03 0.98012375  1.3179287

  mlr --pprint reshape -i X,Y -o item,value wide.txt
    time       item value
    2009-01-01 X    0.65473572
    2009-01-01 Y    2.4520609
    2009-01-02 X    -0.89248112
    2009-01-02 Y    0.2154713
    2009-01-03 X    0.98012375
    2009-01-03 Y    1.3179287

  mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt
    time       item value
    2009-01-01 X    0.65473572
    2009-01-01 Y    2.4520609
    2009-01-02 X    -0.89248112
    2009-01-02 Y    0.2154713
    2009-01-03 X    0.98012375
    2009-01-03 Y    1.3179287

  Input file "long.txt":
    time       item value
    2009-01-01 X    0.65473572
    2009-01-01 Y    2.4520609
    2009-01-02 X    -0.89248112
    2009-01-02 Y    0.2154713
    2009-01-03 X    0.98012375
    2009-01-03 Y    1.3179287

  mlr --pprint reshape -s item,value long.txt
    time       X           Y
    2009-01-01 0.65473572  2.4520609
    2009-01-02 -0.89248112 0.2154713
    2009-01-03 0.98012375  1.3179287
See also mlr nest.

sample

$ mlr sample --help
Usage: mlr sample [options]
Reservoir sampling (subsampling without replacement), optionally by category.
-k {count}    Required: number of records to output, total, or by group if using -g.
-g {a,b,c}    Optional: group-by-field names for samples.
See also mlr bootstrap and mlr shuffle.

This is reservoir-sampling: select k items from n with uniform probability and no repeats in the sample. (If n is less than k, then of course only n samples are produced.) With -g {field names}, produce a k-sample for each distinct value of the specified field names.

$ mlr --opprint sample -k 4 data/colored-shapes.dkvp
color  shape    flag i     u                   v                    w                   x
purple triangle 0    90122 0.9986871176198068  0.3037738877233719   0.5154934457238382  5.365962021016529
red    circle   0    3139  0.04835898233323954 -0.03964684310055758 0.5263660881848111  5.3758779366493625
orange triangle 0    67847 0.36746306902109926 0.5161574810505635   0.5176199566173642  3.1748088656576567
yellow square   1    33576 0.3098376725521097  0.8525628505287842   0.49774122460981685 4.494754378604669

$ mlr --opprint sample -k 4 data/colored-shapes.dkvp
color  shape  flag i     u                     v                   w                   x
blue   square 1    16783 0.09974385090654347   0.7243899920872646  0.5353718443278438  4.431057737383438
orange square 1    93291 0.5944176543007182    0.17744449786454086 0.49262281749172077 3.1548117990710653
yellow square 1    54436 0.5268161165014636    0.8785588662666121  0.5058773791931063  7.019185838783636
yellow square 1    55491 0.0025440267883102274 0.05474106287787284 0.5102729153751984  3.526301273728043

$ mlr --opprint sample -k 2 -g color data/colored-shapes.dkvp
color  shape    flag i     u                    v                   w                    x
yellow triangle 1    11    0.6321695890307647   0.9887207810889004  0.4364983936735774   5.7981881667050565
yellow square   1    917   0.8547010348386344   0.7356782810796262  0.4531511689924275   5.774541777078352
red    circle   1    4000  0.05490416175132373  0.07392337815122155 0.49416101516594396  5.355725080701707
red    square   0    87506 0.6357719216821314   0.6970867759393995  0.4940826462055272   6.351579417310387
purple triangle 0    14898 0.7800986870203719   0.23998073813992293 0.5014775988383656   3.141006771777843
purple triangle 0    151   0.032614487569017414 0.7346633365041219  0.7812143304483805   2.6831992610568047
green  triangle 1    126   0.1513010528347546   0.40346767294704544 0.051213231883952326 5.955109300797182
green  circle   0    17635 0.029856606049114442 0.4724542934246524  0.49529606749929744  5.239153910272168
blue   circle   1    1020  0.414263129226617    0.8304946402876182  0.13151094520189244  4.397873687920433
blue   triangle 0    220   0.441773289968473    0.44597731903759075 0.6329360666849821   4.3064608776550894
orange square   0    1885  0.8079311983747106   0.8685956833908394  0.3116410800256374   4.390864584500387
orange triangle 0    1533  0.32904497195507487  0.23168161807490417 0.8722623057355134   5.164071635714438

$ mlr --opprint sample -k 2 -g color then sort -f color data/colored-shapes.dkvp
color  shape    flag i     u                   v                    w                   x
blue   circle   0    215   0.7803586969333292  0.33146680638888126  0.04289047852629113 5.725365736377487
blue   circle   1    3616  0.8548431579124808  0.4989623130006362   0.3339426415875795  3.696785877560498
green  square   0    356   0.7674272008085286  0.341578843118008    0.4570224877870851  4.830320062215299
green  square   0    152   0.6684429446914862  0.016056003736548696 0.4656148241291592  5.434588759225423
orange triangle 0    587   0.5175826237797857  0.08989091493635304  0.9011709461770973  4.265854207755811
orange triangle 0    1533  0.32904497195507487 0.23168161807490417  0.8722623057355134  5.164071635714438
purple triangle 0    14192 0.5196327866973567  0.7860928603468063   0.4964368415453642  4.899167143824484
purple triangle 0    65    0.6842806710360729  0.5823723856331258   0.8014053396013747  5.805148213865135
red    square   1    2431  0.38378504852300466 0.11445015005595527  0.49355539228753786 5.146756570128739
red    triangle 0    57097 0.43763430414406546 0.3355450325004481   0.5322349637512487  4.144267240289442
yellow triangle 1    11    0.6321695890307647  0.9887207810889004   0.4364983936735774  5.7981881667050565
yellow square   1    158   0.41527900739142165 0.7118027080775757   0.4200799665161291  5.33279067554884

Note that no output is produced until all inputs are in. Another way to do sampling, which works in the streaming case, is mlr filter 'urand() & 0.001' where you tune the 0.001 to meet your needs.

sec2gmt

$ mlr sec2gmt -h
Usage: mlr sec2gmt [options] {comma-separated list of field names}
Replaces a numeric field representing seconds since the epoch with the
corresponding GMT timestamp; leaves non-numbers as-is. This is nothing
more than a keystroke-saver for the sec2gmt function:
  mlr sec2gmt time1,time2
is the same as
  mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)'
Options:
-1 through -9: format the seconds using 1..9 decimal places, respectively.

sec2gmtdate

$ mlr sec2gmtdate -h
Usage: mlr sec2gmtdate {comma-separated list of field names}
Replaces a numeric field representing seconds since the epoch with the
corresponding GMT year-month-day timestamp; leaves non-numbers as-is.
This is nothing more than a keystroke-saver for the sec2gmtdate function:
  mlr sec2gmtdate time1,time2
is the same as
  mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)'

seqgen

$ mlr seqgen -h
Usage: mlr seqgen [options]
Produces a sequence of counters.  Discards the input record stream. Produces
output as specified by the following options:
-f {name} Field name for counters; default "i".
--start {number} Inclusive start value; default "1".
--stop  {number} Inclusive stop value; default "100".
--step  {number} Step value; default "1".
Start, stop, and/or step may be floating-point. Output is integer if start,
stop, and step are all integers. Step may be negative. It may not be zero
unless start == stop.

$ mlr seqgen --stop 10
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10

$ mlr seqgen --start 20 --stop 40 --step 4
i=20
i=24
i=28
i=32
i=36
i=40

$ mlr seqgen --start 40 --stop 20 --step -4
i=40
i=36
i=32
i=28
i=24
i=20

shuffle

$ mlr shuffle -h
Usage: mlr shuffle {no options}
Outputs records randomly permuted. No output records are produced until
all input records are read.
See also mlr bootstrap and mlr sample.

skip-trivial-records

$ mlr skip-trivial-records -h
Usage: mlr skip-trivial-records [options]
Passes through all records except:
* those with zero fields;
* those for which all fields have empty value.

$ cat data/trivial-records.csv
a,b,c
1,2,3
4,,6
,,
,8,9

$ mlr --csv skip-trivial-records data/trivial-records.csv
a,b,c
1,2,3
4,,6
,8,9

sort

$ mlr sort --help
Usage: mlr sort {flags}
Flags:
  -f  {comma-separated field names}  Lexical ascending
  -n  {comma-separated field names}  Numerical ascending; nulls sort last
  -nf {comma-separated field names}  Same as -n
  -r  {comma-separated field names}  Lexical descending
  -nr {comma-separated field names}  Numerical descending; nulls sort first
Sorts records primarily by the first specified field, secondarily by the second
field, and so on.  (Any records not having all specified sort keys will appear
at the end of the output, in the order they were encountered, regardless of the
specified sort order.) The sort is stable: records that compare equal will sort
in the order they were encountered in the input record stream.

Example:
  mlr sort -f a,b -nr x,y,z
which is the same as:
  mlr sort -f a -f b -nr x -nr y -nr z

Example:

$ mlr --opprint sort -f a -nr x data/small
a   b   i x                   y
eks pan 2 0.7586799647899636  0.5221511083334797
eks wye 4 0.38139939387114097 0.13418874328430463
pan pan 1 0.3467901443380824  0.7268028627434533
wye pan 5 0.5732889198020006  0.8636244699032729
wye wye 3 0.20460330576630303 0.33831852551664776

Here’s an example filtering log data: suppose multiple threads (labeled here by color) are all logging progress counts to a single log file. The log file is (by nature) chronological, so the progress of various threads is interleaved:

$ head -n 10 data/multicountdown.dat
upsec=0.002,color=green,count=1203
upsec=0.083,color=red,count=3817
upsec=0.188,color=red,count=3801
upsec=0.395,color=blue,count=2697
upsec=0.526,color=purple,count=953
upsec=0.671,color=blue,count=2684
upsec=0.899,color=purple,count=926
upsec=0.912,color=red,count=3798
upsec=1.093,color=blue,count=2662
upsec=1.327,color=purple,count=917

We can group these by thread by sorting on the thread ID (here, color). Since Miller’s sort is stable, this means that timestamps within each thread’s log data are still chronological:

$ head -n 20 data/multicountdown.dat | mlr --opprint sort -f color
upsec              color  count
0.395              blue   2697
0.671              blue   2684
1.093              blue   2662
2.064              blue   2659
2.2880000000000003 blue   2647
0.002              green  1203
1.407              green  1187
1.448              green  1177
2.313              green  1161
0.526              purple 953
0.899              purple 926
1.327              purple 917
1.703              purple 908
0.083              red    3817
0.188              red    3801
0.912              red    3798
1.416              red    3788
1.587              red    3782
1.601              red    3755
1.832              red    3717

Any records not having all specified sort keys will appear at the end of the output, in the order they were encountered, regardless of the specified sort order:

$ mlr sort -n  x data/sort-missing.dkvp
x=1
x=2
x=4
a=3

$ mlr sort -nr x data/sort-missing.dkvp
x=4
x=2
x=1
a=3

stats1

$ mlr stats1 --help
Usage: mlr stats1 [options]
Computes univariate statistics for one or more given fields, accumulated across
the input record stream.
Options:
-a {sum,count,...}  Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or
                    one or more of:
   count     Count instances of fields
   mode      Find most-frequently-occurring values for fields; first-found wins tie
   antimode  Find least-frequently-occurring values for fields; first-found wins tie
   sum       Compute sums of specified fields
   mean      Compute averages (sample means) of specified fields
   stddev    Compute sample standard deviation of specified fields
   var       Compute sample variance of specified fields
   meaneb    Estimate error bars for averages (assuming no sample autocorrelation)
   skewness  Compute sample skewness of specified fields
   kurtosis  Compute sample kurtosis of specified fields
   min       Compute minimum values of specified fields
   max       Compute maximum values of specified fields
-f {a,b,c}   Value-field names on which to compute statistics
--fr {regex} Regex for value-field names on which to compute statistics
             (compute statsitics on values in all field names matching regex)
--fx {regex} Inverted regex for value-field names on which to compute statistics
             (compute statsitics on values in all field names not matching regex)
-g {d,e,f}   Optional group-by-field names
--gr {regex} Regex for optional group-by-field names
             (group by values in field names matching regex)
--gx {regex} Inverted regex for optional group-by-field names
             (group by values in field names not matching regex)
--grfx {regex} Shorthand for --gr {regex} --fx {that same regex}
-i           Use interpolated percentiles, like R's type=7; default like type=1.
             Not sensical for string-valued fields.
-s           Print iterative stats. Useful in tail -f contexts (in which
             case please avoid pprint-format output since end of input
             stream will never be seen).
-F           Computes integerable things (e.g. count) in floating point.
Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape
Example: mlr stats1 -a count,mode -f size
Example: mlr stats1 -a count,mode -f size -g shape
Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$'
         This computes count and mode statistics on all field names beginning
         with a through h, grouped by all field names starting with k.
Notes:
* p50 and median are synonymous.
* min and max output the same results as p0 and p100, respectively, but use
  less memory.
* String-valued data make sense unless arithmetic on them is required,
  e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,
  numbers are less than strings.
* count and mode allow text input; the rest require numeric input.
  In particular, 1 and 1.0 are distinct text for count and mode.
* When there are mode ties, the first-encountered datum wins.

These are simple univariate statistics on one or more number-valued fields (count and mode apply to non-numeric fields as well), optionally categorized by one or more other fields.

$ mlr --oxtab stats1 -a count,sum,min,p10,p50,mean,p90,max -f x,y data/medium
x_count 10000
x_sum   4986.019682
x_min   0.000045
x_p10   0.093322
x_p50   0.501159
x_mean  0.498602
x_p90   0.900794
x_max   0.999953
y_count 10000
y_sum   5062.057445
y_min   0.000088
y_p10   0.102132
y_p50   0.506021
y_mean  0.506206
y_p90   0.905366
y_max   0.999965

$ mlr --opprint stats1 -a mean -f x,y -g b then sort -f b data/medium
b   x_mean   y_mean
eks 0.506361 0.510293
hat 0.487899 0.513118
pan 0.497304 0.499599
wye 0.497593 0.504596
zee 0.504242 0.502997

$ mlr --opprint stats1 -a p50,p99 -f u,v -g color then put '$ur=$u_p99/$u_p50;$vr=$v_p99/$v_p50' data/colored-shapes.dkvp
color  u_p50    u_p99    v_p50    v_p99    ur       vr
yellow 0.501019 0.989046 0.520630 0.987034 1.974069 1.895845
red    0.485038 0.990054 0.492586 0.994444 2.041189 2.018823
purple 0.501319 0.988893 0.504571 0.988287 1.972582 1.958668
green  0.502015 0.990764 0.505359 0.990175 1.973574 1.959350
blue   0.525226 0.992655 0.485170 0.993873 1.889958 2.048505
orange 0.483548 0.993635 0.480913 0.989102 2.054884 2.056717

$ mlr --opprint count-distinct -f shape then sort -nr count data/colored-shapes.dkvp
shape    count
square   4115
triangle 3372
circle   2591

$ mlr --opprint stats1 -a mode -f color -g shape data/colored-shapes.dkvp
shape    color_mode
triangle red
square   red
circle   red

stats2

$ mlr stats2 --help
Usage: mlr stats2 [options]
Computes bivariate statistics for one or more given field-name pairs,
accumulated across the input record stream.
-a {linreg-ols,corr,...}  Names of accumulators: one or more of:
  linreg-pca   Linear regression using principal component analysis
  linreg-ols   Linear regression using ordinary least squares
  r2           Quality metric for linreg-ols (linreg-pca emits its own)
  logireg      Logistic regression
  corr         Sample correlation
  cov          Sample covariance
  covx         Sample-covariance matrix
-f {a,b,c,d}   Value-field name-pairs on which to compute statistics.
               There must be an even number of names.
-g {e,f,g}     Optional group-by-field names.
-v             Print additional output for linreg-pca.
-s             Print iterative stats. Useful in tail -f contexts (in which
               case please avoid pprint-format output since end of input
               stream will never be seen).
--fit          Rather than printing regression parameters, applies them to
               the input data to compute new fit fields. All input records are
               held in memory until end of input stream. Has effect only for
               linreg-ols, linreg-pca, and logireg.
Only one of -s or --fit may be used.
Example: mlr stats2 -a linreg-pca -f x,y
Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape
Example: mlr stats2 -a corr -f x,y

These are simple bivariate statistics on one or more pairs of number-valued fields, optionally categorized by one or more fields.

$ mlr --oxtab put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a cov,corr -f x,y,y,y,x2,xy,x2,y2 data/medium
x_y_cov    0.000043
x_y_corr   0.000504
y_y_cov    0.084611
y_y_corr   1.000000
x2_xy_cov  0.041884
x2_xy_corr 0.630174
x2_y2_cov  -0.000310
x2_y2_corr -0.003425

$ mlr --opprint put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a linreg-ols,r2 -f x,y,y,y,xy,y2 -g a data/medium
a   x_y_ols_m x_y_ols_b x_y_ols_n x_y_r2   y_y_ols_m y_y_ols_b y_y_ols_n y_y_r2   xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_r2
pan 0.017026  0.500403  2081      0.000287 1.000000  0.000000  2081      1.000000 0.878132    0.119082    2081        0.417498
eks 0.040780  0.481402  1965      0.001646 1.000000  0.000000  1965      1.000000 0.897873    0.107341    1965        0.455632
wye -0.039153 0.525510  1966      0.001505 1.000000  0.000000  1966      1.000000 0.853832    0.126745    1966        0.389917
zee 0.002781  0.504307  2047      0.000008 1.000000  0.000000  2047      1.000000 0.852444    0.124017    2047        0.393566
hat -0.018621 0.517901  1941      0.000352 1.000000  0.000000  1941      1.000000 0.841230    0.135573    1941        0.368794

Here’s an example simple line-fit. The x and y fields of the data/medium dataset are just independent uniformly distributed on the unit interval. Here we remove half the data and fit a line to it.


# Prepare input data:
mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' data/medium > data/medium-squares

# Do a linear regression and examine coefficients:
mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares
x_y_pca_m=1.014419
x_y_pca_b=0.000308
x_y_pca_quality=0.861354

# Option 1 to apply the regression coefficients and produce a linear fit:
#   Set x_y_pca_m and x_y_pca_b as shell variables:
eval $(mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares)
#   In addition to x and y, make a new yfit which is the line fit, then plot
#   using your favorite tool:
mlr --onidx put '$yfit='$x_y_pca_m'*$x+'$x_y_pca_b then cut -x -f a,b,i data/medium-squares \
  | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1

# Option 2 to apply the regression coefficients and produce a linear fit: use --fit option
mlr --onidx stats2 -a linreg-pca --fit -f x,y then cut -f a,b,i data/medium-squares \
  | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1

I use pgr for plotting; here’s a screenshot.

(Thanks Drew Kunas for a good conversation about PCA!)

Here’s an example estimating time-to-completion for a set of jobs. Input data comes from a log file, with number of work units left to do in the count field and accumulated seconds in the upsec field, labeled by the color field:

$ head -n 10 data/multicountdown.dat
upsec=0.002,color=green,count=1203
upsec=0.083,color=red,count=3817
upsec=0.188,color=red,count=3801
upsec=0.395,color=blue,count=2697
upsec=0.526,color=purple,count=953
upsec=0.671,color=blue,count=2684
upsec=0.899,color=purple,count=926
upsec=0.912,color=red,count=3798
upsec=1.093,color=blue,count=2662
upsec=1.327,color=purple,count=917

We can do a linear regression on count remaining as a function of time: with c = m*u+b we want to find the time when the count goes to zero, i.e. u=-b/m.

$ mlr --oxtab stats2 -a linreg-pca -f upsec,count -g color then put '$donesec = -$upsec_count_pca_b/$upsec_count_pca_m' data/multicountdown.dat
color                   green
upsec_count_pca_m       -32.756917
upsec_count_pca_b       1213.722730
upsec_count_pca_n       24
upsec_count_pca_quality 0.999984
donesec                 37.052410

color                   red
upsec_count_pca_m       -37.367646
upsec_count_pca_b       3810.133400
upsec_count_pca_n       30
upsec_count_pca_quality 0.999989
donesec                 101.963431

color                   blue
upsec_count_pca_m       -29.231212
upsec_count_pca_b       2698.932820
upsec_count_pca_n       25
upsec_count_pca_quality 0.999959
donesec                 92.330514

color                   purple
upsec_count_pca_m       -39.030097
upsec_count_pca_b       979.988341
upsec_count_pca_n       21
upsec_count_pca_quality 0.999991
donesec                 25.108529

step

$ mlr step --help
Usage: mlr step [options]
Computes values dependent on the previous record, optionally grouped
by category.

Options:
-a {delta,rsum,...}   Names of steppers: comma-separated, one or more of:
  delta    Compute differences in field(s) between successive records
  shift    Include value(s) in field(s) from previous record, if any
  from-first Compute differences in field(s) from first record
  ratio    Compute ratios in field(s) between successive records
  rsum     Compute running sums of field(s) between successive records
  counter  Count instances of field(s) between successive records
  ewma     Exponentially weighted moving average over successive records
-f {a,b,c} Value-field names on which to compute statistics
-g {d,e,f} Optional group-by-field names
-F         Computes integerable things (e.g. counter) in floating point.
-d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no
           smoothing), near under under 1 is light smoothing, near over 0 is
           heavy smoothing. Multiple weights may be specified, e.g.
           "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted
           is "-d 0.5".
-o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to
           the -d values. If supplied, the number of -o values must be the same
           as the number of -d values.

Examples:
  mlr step -a rsum -f request_size
  mlr step -a delta -f request_size -g hostname
  mlr step -a ewma -d 0.1,0.9 -f x,y
  mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y
  mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name

Please see http://johnkerl.org/miller/doc/reference.html#filter or
https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
for more information on EWMA.

Most Miller commands are record-at-a-time, with the exception of stats1, stats2, and histogram which compute aggregate output. The step command is intermediate: it allows the option of adding fields which are functions of fields from previous records. Rsum is short for running sum.

$ mlr --opprint step -a shift,delta,rsum,counter -f x data/medium | head -15
a   b   i     x                      y                      x_shift                x_delta   x_rsum      x_counter
pan pan 1     0.3467901443380824     0.7268028627434533     -                      0         0.346790    1
eks pan 2     0.7586799647899636     0.5221511083334797     0.3467901443380824     0.411890  1.105470    2
wye wye 3     0.20460330576630303    0.33831852551664776    0.7586799647899636     -0.554077 1.310073    3
eks wye 4     0.38139939387114097    0.13418874328430463    0.20460330576630303    0.176796  1.691473    4
wye pan 5     0.5732889198020006     0.8636244699032729     0.38139939387114097    0.191890  2.264762    5
zee pan 6     0.5271261600918548     0.49322128674835697    0.5732889198020006     -0.046163 2.791888    6
eks zee 7     0.6117840605678454     0.1878849191181694     0.5271261600918548     0.084658  3.403672    7
zee wye 8     0.5985540091064224     0.976181385699006      0.6117840605678454     -0.013230 4.002226    8
hat wye 9     0.03144187646093577    0.7495507603507059     0.5985540091064224     -0.567112 4.033668    9
pan wye 10    0.5026260055412137     0.9526183602969864     0.03144187646093577    0.471184  4.536294    10
pan pan 11    0.7930488423451967     0.6505816637259333     0.5026260055412137     0.290423  5.329343    11
zee pan 12    0.3676141320555616     0.23614420670296965    0.7930488423451967     -0.425435 5.696957    12
eks pan 13    0.4915175580479536     0.7709126592971468     0.3676141320555616     0.123903  6.188474    13
eks zee 14    0.5207382318405251     0.34141681118811673    0.4915175580479536     0.029221  6.709213    14

$ mlr --opprint step -a shift,delta,rsum,counter -f x -g a data/medium | head -15
a   b   i     x                      y                      x_shift                x_delta   x_rsum      x_counter
pan pan 1     0.3467901443380824     0.7268028627434533     -                      0         0.346790    1
eks pan 2     0.7586799647899636     0.5221511083334797     -                      0         0.758680    1
wye wye 3     0.20460330576630303    0.33831852551664776    -                      0         0.204603    1
eks wye 4     0.38139939387114097    0.13418874328430463    0.7586799647899636     -0.377281 1.140079    2
wye pan 5     0.5732889198020006     0.8636244699032729     0.20460330576630303    0.368686  0.777892    2
zee pan 6     0.5271261600918548     0.49322128674835697    -                      0         0.527126    1
eks zee 7     0.6117840605678454     0.1878849191181694     0.38139939387114097    0.230385  1.751863    3
zee wye 8     0.5985540091064224     0.976181385699006      0.5271261600918548     0.071428  1.125680    2
hat wye 9     0.03144187646093577    0.7495507603507059     -                      0         0.031442    1
pan wye 10    0.5026260055412137     0.9526183602969864     0.3467901443380824     0.155836  0.849416    2
pan pan 11    0.7930488423451967     0.6505816637259333     0.5026260055412137     0.290423  1.642465    3
zee pan 12    0.3676141320555616     0.23614420670296965    0.5985540091064224     -0.230940 1.493294    3
eks pan 13    0.4915175580479536     0.7709126592971468     0.6117840605678454     -0.120267 2.243381    4
eks zee 14    0.5207382318405251     0.34141681118811673    0.4915175580479536     0.029221  2.764119    5

$ mlr --opprint step -a ewma -f x -d 0.1,0.9 ../doc/data/medium | head -15
a   b   i     x                      y                      x_ewma_0.1 x_ewma_0.9
pan pan 1     0.3467901443380824     0.7268028627434533     0.346790   0.346790
eks pan 2     0.7586799647899636     0.5221511083334797     0.387979   0.717491
wye wye 3     0.20460330576630303    0.33831852551664776    0.369642   0.255892
eks wye 4     0.38139939387114097    0.13418874328430463    0.370817   0.368849
wye pan 5     0.5732889198020006     0.8636244699032729     0.391064   0.552845
zee pan 6     0.5271261600918548     0.49322128674835697    0.404671   0.529698
eks zee 7     0.6117840605678454     0.1878849191181694     0.425382   0.603575
zee wye 8     0.5985540091064224     0.976181385699006      0.442699   0.599056
hat wye 9     0.03144187646093577    0.7495507603507059     0.401573   0.088203
pan wye 10    0.5026260055412137     0.9526183602969864     0.411679   0.461184
pan pan 11    0.7930488423451967     0.6505816637259333     0.449816   0.759862
zee pan 12    0.3676141320555616     0.23614420670296965    0.441596   0.406839
eks pan 13    0.4915175580479536     0.7709126592971468     0.446588   0.483050
eks zee 14    0.5207382318405251     0.34141681118811673    0.454003   0.516969

$ mlr --opprint step -a ewma -f x -d 0.1,0.9 -o smooth,rough ../doc/data/medium | head -15
a   b   i     x                      y                      x_ewma_smooth x_ewma_rough
pan pan 1     0.3467901443380824     0.7268028627434533     0.346790      0.346790
eks pan 2     0.7586799647899636     0.5221511083334797     0.387979      0.717491
wye wye 3     0.20460330576630303    0.33831852551664776    0.369642      0.255892
eks wye 4     0.38139939387114097    0.13418874328430463    0.370817      0.368849
wye pan 5     0.5732889198020006     0.8636244699032729     0.391064      0.552845
zee pan 6     0.5271261600918548     0.49322128674835697    0.404671      0.529698
eks zee 7     0.6117840605678454     0.1878849191181694     0.425382      0.603575
zee wye 8     0.5985540091064224     0.976181385699006      0.442699      0.599056
hat wye 9     0.03144187646093577    0.7495507603507059     0.401573      0.088203
pan wye 10    0.5026260055412137     0.9526183602969864     0.411679      0.461184
pan pan 11    0.7930488423451967     0.6505816637259333     0.449816      0.759862
zee pan 12    0.3676141320555616     0.23614420670296965    0.441596      0.406839
eks pan 13    0.4915175580479536     0.7709126592971468     0.446588      0.483050
eks zee 14    0.5207382318405251     0.34141681118811673    0.454003      0.516969

Example deriving uptime-delta from system uptime:

$ each 10 uptime | mlr -p step -a delta -f 11
...
20:08 up 36 days, 10:38, 5 users, load averages: 1.42 1.62 1.73 0.000000
20:08 up 36 days, 10:38, 5 users, load averages: 1.55 1.64 1.74 0.020000
20:08 up 36 days, 10:38, 7 users, load averages: 1.58 1.65 1.74 0.010000
20:08 up 36 days, 10:38, 9 users, load averages: 1.78 1.69 1.76 0.040000
20:08 up 36 days, 10:39, 9 users, load averages: 2.12 1.76 1.78 0.070000
20:08 up 36 days, 10:39, 9 users, load averages: 2.51 1.85 1.81 0.090000
20:08 up 36 days, 10:39, 8 users, load averages: 2.79 1.92 1.83 0.070000
20:08 up 36 days, 10:39, 4 users, load averages: 2.64 1.90 1.83 -0.020000

tac

$ mlr tac --help
Usage: mlr tac
Prints records in reverse order from the order in which they were encountered.

Prints the records in the input stream in reverse order. Note: this requires Miller to retain all input records in memory before any output records are produced.

$ mlr --icsv --opprint cat data/a.csv
a b c
1 2 3
4 5 6

$ mlr --icsv --opprint cat data/b.csv
a b c
7 8 9

$ mlr --icsv --opprint tac data/a.csv data/b.csv
a b c
7 8 9
4 5 6
1 2 3

$ mlr --icsv --opprint put '$filename=FILENAME' then tac data/a.csv data/b.csv
a b c filename
7 8 9 data/b.csv
4 5 6 data/a.csv
1 2 3 data/a.csv

tail

$ mlr tail --help
Usage: mlr tail [options]
-n {count}    Tail count to print; default 10
-g {a,b,c}    Optional group-by-field names for tail counts
Passes through the last n records, optionally by category.

Prints the last n records in the input stream, optionally by category.

$ mlr --opprint tail -n 4 data/colored-shapes.dkvp
color  shape    flag i     u                    v                   w                   x
blue   square   1    99974 0.6189062525431605   0.2637962404841453  0.5311465405784674  6.210738209085753
blue   triangle 0    99976 0.008110504040268474 0.8267274952432482  0.4732962944898885  6.146956761817328
yellow triangle 0    99990 0.3839424618160777   0.55952913620132    0.5113763011485609  4.307973891915119
yellow circle   1    99994 0.764950884927175    0.25284227383991364 0.49969878539567425 5.013809741826425

$ mlr --opprint tail -n 1 -g shape data/colored-shapes.dkvp
color  shape    flag i     u                  v                   w                   x
yellow triangle 0    99990 0.3839424618160777 0.55952913620132    0.5113763011485609  4.307973891915119
blue   square   1    99974 0.6189062525431605 0.2637962404841453  0.5311465405784674  6.210738209085753
yellow circle   1    99994 0.764950884927175  0.25284227383991364 0.49969878539567425 5.013809741826425

tee

$ mlr tee --help
Usage: mlr tee [options] {filename}
Passes through input records (like mlr cat) but also writes to specified output
file, using output-format flags from the command line (e.g. --ocsv). See also
the "tee" keyword within mlr put, which allows data-dependent filenames.
Options:
-a:          append to existing file, if any, rather than overwriting.
--no-fflush: don't call fflush() after every record.
Any of the output-format command-line flags (see mlr -h). Example: using
  mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ...
the input is CSV, the output is pretty-print tabular, but the tee-file output
is written in JSON format.

top

$ mlr top --help
Usage: mlr top [options]
-f {a,b,c}    Value-field names for top counts.
-g {d,e,f}    Optional group-by-field names for top counts.
-n {count}    How many records to print per category; default 1.
-a            Print all fields for top-value records; default is
              to print only value and group-by fields. Requires a single
              value-field name only.
--min         Print top smallest values; default is top largest values.
-F            Keep top values as floats even if they look like integers.
-o {name}     Field name for output indices. Default "top_idx".
Prints the n records with smallest/largest values at specified fields,
optionally by category.

Note that top is distinct from headhead shows fields which appear first in the data stream; top shows fields which are numerically largest (or smallest).

$ mlr --opprint top -n 4 -f x data/medium
top_idx x_top
1       0.999953
2       0.999823
3       0.999733
4       0.999563

$ mlr --opprint top -n 4 -f x -o someothername data/medium
someothername x_top
1             0.999953
2             0.999823
3             0.999733
4             0.999563

$ mlr --opprint top -n 2 -f x -g a then sort -f a data/medium
a   top_idx x_top
eks 1       0.998811
eks 2       0.998534
hat 1       0.999953
hat 2       0.999733
pan 1       0.999403
pan 2       0.999044
wye 1       0.999823
wye 2       0.999264
zee 1       0.999490
zee 2       0.999438

uniq

$ mlr uniq --help
Usage: mlr uniq [options]
Prints distinct values for specified field names. With -c, same as
count-distinct. For uniq, -f is a synonym for -g.

Options:
-g {d,e,f}    Group-by-field names for uniq counts.
-c            Show repeat counts in addition to unique values.
-n            Show only the number of distinct values.
-o {name}     Field name for output count. Default "count".
-a            Output each unique record only once. Incompatible with -g.
              With -c, produces unique records, with repeat counts for each.
              With -n, produces only one record which is the unique-record count.
              With neither -c nor -n, produces unique records.

There are two main ways to use mlr uniq: the first way is with -g to specify group-by columns.

$ wc -l data/colored-shapes.dkvp
10078 data/colored-shapes.dkvp

$ mlr uniq -g color,shape data/colored-shapes.dkvp
color=yellow,shape=triangle
color=red,shape=square
color=red,shape=circle
color=purple,shape=triangle
color=yellow,shape=circle
color=purple,shape=square
color=yellow,shape=square
color=red,shape=triangle
color=green,shape=triangle
color=green,shape=square
color=blue,shape=circle
color=blue,shape=triangle
color=purple,shape=circle
color=blue,shape=square
color=green,shape=circle
color=orange,shape=triangle
color=orange,shape=square
color=orange,shape=circle

$ mlr --opprint uniq -g color,shape -c then sort -f color,shape data/colored-shapes.dkvp
color  shape    count
blue   circle   384
blue   square   589
blue   triangle 497
green  circle   287
green  square   454
green  triangle 368
orange circle   68
orange square   128
orange triangle 107
purple circle   289
purple square   481
purple triangle 372
red    circle   1207
red    square   1874
red    triangle 1560
yellow circle   356
yellow square   589
yellow triangle 468

$ mlr --opprint uniq -g color,shape -c -o someothername then sort -nr someothername data/colored-shapes.dkvp
color  shape    someothername
red    square   1874
red    triangle 1560
red    circle   1207
yellow square   589
blue   square   589
blue   triangle 497
purple square   481
yellow triangle 468
green  square   454
blue   circle   384
purple triangle 372
green  triangle 368
yellow circle   356
purple circle   289
green  circle   287
orange square   128
orange triangle 107
orange circle   68

$ mlr --opprint uniq -n -g color,shape data/colored-shapes.dkvp
count
18

The second main way to use mlr uniq is without group-by columns, using -a instead:

$ cat data/repeats.dkvp
color=red,shape=square,flag=0
color=purple,shape=triangle,flag=0
color=yellow,shape=circle,flag=1
color=red,shape=circle,flag=1
color=red,shape=square,flag=0
color=yellow,shape=circle,flag=1
color=red,shape=square,flag=0
color=red,shape=square,flag=0
color=yellow,shape=circle,flag=1
color=red,shape=circle,flag=1
color=yellow,shape=circle,flag=1
color=yellow,shape=circle,flag=1
color=purple,shape=triangle,flag=0
color=yellow,shape=circle,flag=1
color=yellow,shape=circle,flag=1
color=red,shape=circle,flag=1
color=red,shape=square,flag=0
color=purple,shape=triangle,flag=0
color=yellow,shape=circle,flag=1
color=red,shape=square,flag=0
color=purple,shape=square,flag=0
color=red,shape=square,flag=0
color=red,shape=square,flag=1
color=red,shape=square,flag=0
color=red,shape=square,flag=0
color=purple,shape=triangle,flag=0
color=red,shape=square,flag=0
color=purple,shape=triangle,flag=0
color=red,shape=square,flag=0
color=red,shape=square,flag=0
color=purple,shape=square,flag=0
color=red,shape=square,flag=0
color=red,shape=square,flag=0
color=purple,shape=triangle,flag=0
color=yellow,shape=triangle,flag=1
color=purple,shape=square,flag=0
color=yellow,shape=circle,flag=1
color=purple,shape=triangle,flag=0
color=red,shape=circle,flag=1
color=purple,shape=triangle,flag=0
color=purple,shape=triangle,flag=0
color=red,shape=square,flag=0
color=red,shape=circle,flag=1
color=red,shape=square,flag=1
color=red,shape=square,flag=0
color=red,shape=circle,flag=1
color=purple,shape=square,flag=0
color=purple,shape=square,flag=0
color=red,shape=square,flag=1
color=purple,shape=triangle,flag=0
color=purple,shape=triangle,flag=0
color=purple,shape=square,flag=0
color=yellow,shape=circle,flag=1
color=red,shape=square,flag=0
color=yellow,shape=triangle,flag=1
color=yellow,shape=circle,flag=1
color=purple,shape=square,flag=0

$ wc -l data/repeats.dkvp
57 data/repeats.dkvp

$ mlr --opprint uniq -a data/repeats.dkvp
color  shape    flag
red    square   0
purple triangle 0
yellow circle   1
red    circle   1
purple square   0
red    square   1
yellow triangle 1

$ mlr --opprint uniq -a -n data/repeats.dkvp
count
7

$ mlr --opprint uniq -a -c data/repeats.dkvp
count color  shape    flag
17    red    square   0
11    purple triangle 0
11    yellow circle   1
6     red    circle   1
7     purple square   0
3     red    square   1
2     yellow triangle 1

unsparsify

$ mlr unsparsify --help
Usage: mlr unsparsify [options]
Prints records with the union of field names over all input records.
For field names absent in a given record but present in others, fills in
a value. This verb retains all input before producing any output.

Options:
--fill-with {filler string}  What to fill absent fields with. Defaults to
                             the empty string.

Example: if the input is two records, one being 'a=1,b=2' and the other
being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and
'a=,b=3,c=4'.

Examples:

$ cat data/sparse.json
{"a":1,"b":2,"v":3}
{"u":1,"b":2}
{"a":1,"v":2,"x":3}
{"v":1,"w":2}

$ mlr --json unsparsify data/sparse.json
{ "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" }
{ "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" }
{ "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" }
{ "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 }

$ mlr --ijson --opprint unsparsify data/sparse.json
a b v u x w
1 2 3 - - -
- 2 - 1 - -
1 - 2 - 3 -
- - 1 - - 2

$ mlr --ijson --opprint unsparsify --fill-with missing data/sparse.json
a       b       v       u       x       w
1       2       3       missing missing missing
missing 2       missing 1       missing missing
1       missing 2       missing 3       missing
missing missing 1       missing missing 2

miller-5.6.2/doc/reference.html000066400000000000000000002204121354153536500164140ustar00rootroot00000000000000 Main reference

Command overview

Whereas the Unix toolkit is made of the separate executables cat, tail, cut, sort, etc., Miller has subcommands, invoked as follows:

mlr tac *.dat
mlr cut --complement -f os_version *.dat
mlr sort -f hostname,uptime *.dat

These fall into categories as follows:
Commands Description
cat, cut, grep, head, join, sort, tac, tail, top, uniq Analogs of their Unix-toolkit namesakes, discussed below as well as in Unix-toolkit context
filter, put, sec2gmt, sec2gmtdate, step, tee awk-like functionality
bar, bootstrap, decimate, histogram, least-frequent, most-frequent, sample, shuffle, stats1, stats2 Statistically oriented
group-by, group-like, having-fields Particularly oriented toward Record-hetrogeneity, although all Miller commands can handle heterogeneous records
check, count-distinct, label, merge-fields, nest, nothing, rename, rename, reorder, reshape, seqgen These draw from other sources (see also How original is Miller?): count-distinct is SQL-ish, and rename can be done by sed (which does it faster: see Performance).

I/O options

Formats

Options:

  --dkvp    --idkvp    --odkvp
  --nidx    --inidx    --onidx
  --csv     --icsv     --ocsv
  --csvlite --icsvlite --ocsvlite
  --pprint  --ipprint  --opprint  --right
  --xtab    --ixtab    --oxtab
  --json    --ijson    --ojson

These are as discussed in File formats, with the exception of --right which makes pretty-printed output right-aligned:

$ mlr --opprint cat data/small
a   b   i x                   y
pan pan 1 0.3467901443380824  0.7268028627434533
eks pan 2 0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5 0.5732889198020006  0.8636244699032729

$ mlr --opprint --right cat data/small
  a   b i                   x                   y
pan pan 1  0.3467901443380824  0.7268028627434533
eks pan 2  0.7586799647899636  0.5221511083334797
wye wye 3 0.20460330576630303 0.33831852551664776
eks wye 4 0.38139939387114097 0.13418874328430463
wye pan 5  0.5732889198020006  0.8636244699032729

Additional notes:

  • Use --csv, --pprint, etc. when the input and output formats are the same.
  • Use --icsv --opprint, etc. when you want format conversion as part of what Miller does to your data.
  • DKVP (key-value-pair) format is the default for input and output. So, --oxtab is the same as --idkvp --oxtab.
Pro-tip: Please use either --format1, or --iformat1 --oformat2. If you use --format1 --oformat2 then what happens is that flags are set up for input and output for format1, some of which are overwritten for output in format2. For technical reasons, having --oformat2 clobber all the output-related effects of --format1 also removes some flexibility from the command-line interface. See also https://github.com/johnkerl/miller/issues/180 and https://github.com/johnkerl/miller/issues/199.

In-place mode

Use the mlr -I flag to process files in-place. For example, mlr -I --csv cut -x -f unwanted_column_name mydata/*.csv will remove unwanted_column_name from all your *.csv files in your mydata/ subdirectory.

By default, Miller output goes to the screen (or you can redirect a file using > or to another process using |). With -I, for each file name on the command line, output is written to a temporary file in the same directory. Miller writes its output into that temp file, which is then renamed over the original. Then, processing continues on the next file. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on.

Please see here for examples.

Compression

Options:

  --prepipe {command}

The prepipe command is anything which reads from standard input and produces data acceptable to Miller. Nominally this allows you to use whichever decompression utilities you have installed on your system, on a per-file basis. If the command has flags, quote them: e.g. mlr --prepipe 'zcat -cf'. Examples:

# These two produce the same output:
$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz
# With multiple input files you need --prepipe:
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz
$ mlr --prepipe gunzip --idkvp --oxtab cut -f hostname,uptime myfile1.dat.gz myfile2.dat.gz

# Similar to the above, but with compressed output as well as input:
$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | gzip > outfile.csv.gz
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz | gzip > outfile.csv.gz
$ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz | gzip > outfile.csv.gz

# Similar to the above, but with different compression tools for input and output:
$ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | xz -z > outfile.csv.xz
$ xz -cd < myfile1.csv.xz | mlr cut -f hostname,uptime | gzip > outfile.csv.xz
$ mlr --prepipe 'xz -cd' cut -f hostname,uptime myfile1.csv.xz myfile2.csv.xz | xz -z > outfile.csv.xz

... etc.

Record/field/pair separators

Miller has record separators IRS and ORS, field separators IFS and OFS, and pair separators IPS and OPS. For example, in the DKVP line a=1,b=2,c=3, the record separator is newline, field separator is comma, and pair separator is the equals sign. These are the default values.

Options:

  --rs --irs --ors
  --fs --ifs --ofs --repifs
  --ps --ips --ops
  • You can change a separator from input to output via e.g. --ifs = --ofs :. Or, you can specify that the same separator is to be used for input and output via e.g. --fs :.
  • The pair separator is only relevant to DKVP format.
  • Pretty-print and xtab formats ignore the separator arguments altogether.
  • The --repifs means that multiple successive occurrences of the field separator count as one. For example, in CSV data we often signify nulls by empty strings, e.g. 2,9,,,,,6,5,4. On the other hand, if the field separator is a space, it might be more natural to parse 2 4 5 the same as 2 4 5: --repifs --ifs ' ' lets this happen. In fact, the --ipprint option above is internally implemented in terms of --repifs.
  • Just write out the desired separator, e.g. --ofs '|'. But you may use the symbolic names newline, space, tab, pipe, or semicolon if you like.

Number formatting

The command-line option --ofmt {format string} is the global number format for commands which generate numeric output, e.g. stats1, stats2, histogram, and step, as well as mlr put. Examples:

--ofmt %.9le  --ofmt %.6lf  --ofmt %.0lf

These are just C printf formats applied to double-precision numbers. Please don’t use %s or %d. Additionally, if you use leading width (e.g. %18.12lf) then the output will contain embedded whitespace, which may not be what you want if you pipe the output to something else, particularly CSV. I use Miller’s pretty-print format (mlr --opprint) to column-align numerical data.

To apply formatting to a single field, overriding the global ofmt, use fmtnum function within mlr put. For example:

$ echo 'x=3.1,y=4.3' | mlr put '$z=fmtnum($x*$y,"%08lf")'
x=3.1,y=4.3,z=13.330000

$ echo 'x=0xffff,y=0xff' | mlr put '$z=fmtnum(int($x*$y),"%08llx")'
x=0xffff,y=0xff,z=00feff01

Input conversion from hexadecimal is done automatically on fields handled by mlr put and mlr filter as long as the field value begins with "0x". To apply output conversion to hexadecimal on a single column, you may use fmtnum, or the keystroke-saving hexfmt function. Example:

$ echo 'x=0xffff,y=0xff' | mlr put '$z=hexfmt($x*$y)'
x=0xffff,y=0xff,z=0xfeff01

Data transformations (verbs)

Expression language for filter and put

then-chaining

In accord with the Unix philosophy, you can pipe data into or out of Miller. For example:

mlr cut --complement -f os_version *.dat | mlr sort -f hostname,uptime

You can, if you like, instead simply chain commands together using the then keyword:

mlr cut --complement -f os_version then sort -f hostname,uptime *.dat

(You can precede the very first verb with then, if you like, for symmetry.) Here’s a performance comparison:

% cat piped.sh
mlr cut -x -f i,y data/big | mlr sort -n y > /dev/null

% time sh piped.sh
real 0m2.828s
user 0m3.183s
sys  0m0.137s


% cat chained.sh
mlr cut -x -f i,y then sort -n y data/big > /dev/null

% time sh chained.sh
real 0m2.082s
user 0m1.933s
sys  0m0.137s

There are two reasons to use then-chaining: one is for performance, although I don’t expect this to be a win in all cases. Using then-chaining avoids redundant string-parsing and string-formatting at each pipeline step: instead input records are parsed once, they are fed through each pipeline stage in memory, and then output records are formatted once. On the other hand, Miller is single-threaded, while modern systems are usually multi-processor, and when streaming-data programs operate through pipes, each one can use a CPU. Rest assured you get the same results either way.

The other reason to use then-chaining is for simplicity: you don’t have re-type formatting flags (e.g. --csv --fs tab) at every pipeline stage.

Auxiliary commands

There are a few nearly-standalone programs which have nothing to do with the rest of Miller, do not participate in record streams, and do not deal with file formats. They might as well be little standalone executables but they’re delivered within the main Miller executable for convenience.

$ mlr aux-list
Available subcommands:
  aux-list
  lecat
  termcvt
  hex
  unhex
  netbsd-strptime
For more information, please invoke mlr {subcommand} --help

$ mlr lecat --help
Usage: mlr lecat [options] {zero or more file names}
Simply echoes input, but flags CR characters in red and LF characters in green.
If zero file names are supplied, standard input is read.
Options:
--mono: don't try to colorize the output
-h or --help: print this message

$ mlr termcvt --help
Usage: mlr termcvt [option] {zero or more file names}
Option (exactly one is required):
--cr2crlf
--lf2crlf
--crlf2cr
--crlf2lf
--cr2lf
--lf2cr
-I in-place processing (default is to write to stdout)
-h or --help: print this message
Zero file names means read from standard input.
Output is always to standard output; files are not written in-place.

$ mlr hex --help
Usage: mlr hex [options] {zero or more file names}
Simple hex-dump.
If zero file names are supplied, standard input is read.
Options:
-r: print only raw hex without leading offset indicators or trailing ASCII dump.
-h or --help: print this message

$ mlr unhex --help
Usage: mlr unhex [option] {zero or more file names}
Options:
-h or --help: print this message
Zero file names means read from standard input.
Output is always to standard output; files are not written in-place.

Examples:

$ echo 'Hello, world!' | mlr lecat --mono
Hello, world![LF]

$ echo 'Hello, world!' | mlr termcvt --lf2crlf | mlr lecat --mono
Hello, world![CR][LF]

$ mlr hex data/budget.csv
00000000: 23 20 41 73  61 6e 61 20  2d 2d 20 68  65 72 65 20 |# Asana -- here |
00000010: 61 72 65 20  74 68 65 20  62 75 64 67  65 74 20 66 |are the budget f|
00000020: 69 67 75 72  65 73 20 79  6f 75 20 61  73 6b 65 64 |igures you asked|
00000030: 20 66 6f 72  21 0a 74 79  70 65 2c 71  75 61 6e 74 | for!.type,quant|
00000040: 69 74 79 0a  70 75 72 70  6c 65 2c 34  35 36 2e 37 |ity.purple,456.7|
00000050: 38 0a 67 72  65 65 6e 2c  36 37 38 2e  31 32 0a 6f |8.green,678.12.o|
00000060: 72 61 6e 67  65 2c 31 32  33 2e 34 35  0a          |range,123.45.|

$ mlr hex -r data/budget.csv
23 20 41 73  61 6e 61 20  2d 2d 20 68  65 72 65 20
61 72 65 20  74 68 65 20  62 75 64 67  65 74 20 66
69 67 75 72  65 73 20 79  6f 75 20 61  73 6b 65 64
20 66 6f 72  21 0a 74 79  70 65 2c 71  75 61 6e 74
69 74 79 0a  70 75 72 70  6c 65 2c 34  35 36 2e 37
38 0a 67 72  65 65 6e 2c  36 37 38 2e  31 32 0a 6f
72 61 6e 67  65 2c 31 32  33 2e 34 35  0a

$ mlr hex -r data/budget.csv | sed 's/20/2a/g' | mlr unhex
#*Asana*--*here*are*the*budget*figures*you*asked*for!
type,quantity
purple,456.78
green,678.12
orange,123.45

Data types

Miller’s input and output are all string-oriented: there is (as of August 2015 anyway) no support for binary record packing. In this sense, everything is a string in and out of Miller. During processing, field names are always strings, even if they have names like "3"; field values are usually strings. Field values’ ability to be interpreted as a non-string type only has meaning when comparison or function operations are done on them. And it is an error condition if Miller encounters non-numeric (or otherwise mistyped) data in a field in which it has been asked to do numeric (or otherwise type-specific) operations.

Field values are treated as numeric for the following:

  • Numeric sort: mlr sort -n, mlr sort -nr.
  • Statistics: mlr histogram, mlr stats1, mlr stats2.
  • Cross-record arithmetic: mlr step.

For mlr put and mlr filter:

  • Miller’s types for function processing are empty-null (empty string), absent-null (reads of unset right-hand sides, or fall-through non-explicit return values from user-defined functions), error, string, float (double-precision), int (64-bit signed), and boolean.
  • On input, string values representable as numbers, e.g. "3" or "3.1", are treated as int or float, respectively. If a record has x=1,y=2 then mlr put '$z=$x+$y' will produce x=1,y=2,z=3, and mlr put '$z=$x.$y' does not give an error simply because the dot operator has been generalized to stringify non-strings. To coerce back to string for processing, use the string function: mlr put '$z=string($x).string($y)' will produce x=1,y=2,z=12.
  • On input, string values representable as boolean (e.g. "true", "false") are not automatically treated as boolean. (This is because "true" and "false" are ordinary words, and auto string-to-boolean on a column consisting of words would result in some strings mixed with some booleans.) Use the boolean function to coerce: e.g. giving the record x=1,y=2,w=false to mlr put '$z=($x<$y) || boolean($w)'.
  • Functions take types as described in mlr --help-all-functions: for example, log10 takes float input and produces float output, gmt2sec maps string to int, and sec2gmt maps int to string.
  • All math functions described in mlr --help-all-functions take integer as well as float input.

Null data: empty and absent

One of Miller’s key features is its support for heterogeneous data. For example, take mlr sort: if you try to sort on field hostname when not all records in the data stream have a field named hostname, it is not an error (although you could pre-filter the data stream using mlr having-fields --at-least hostname then sort ...). Rather, records lacking one or more sort keys are simply output contiguously by mlr sort.

Miller has two kinds of null data:

  • Empty (key present, value empty): a field name is present in a record (or in an out-of-stream variable) with empty value: e.g. x=,y=2 in the data input stream, or assignment $x="" or @x="" in mlr put.
  • Absent (key not present): a field name is not present, e.g. input record is x=1,y=2 and a put or filter expression refers to $z. Or, reading an out-of-stream variable which hasn’t been assigned a value yet, e.g. mlr put -q '@sum += $x; end{emit @sum}' or mlr put -q '@sum[$a][$b] += $x; end{emit @sum, "a", "b"}'.

You can test these programatically using the functions is_empty/is_not_empty, is_absent/is_present, and is_null/is_not_null. For the last pair, note that null means either empty or absent.

Rules for null-handling:

  • Records with one or more empty sort-field values sort after records with all sort-field values present:

    $ mlr cat data/sort-null.dat
    a=3,b=2
    a=1,b=8
    a=,b=4
    x=9,b=10
    a=5,b=7
    

    $ mlr sort -n  a data/sort-null.dat
    a=1,b=8
    a=3,b=2
    a=5,b=7
    a=,b=4
    x=9,b=10
    

    $ mlr sort -nr a data/sort-null.dat
    a=,b=4
    a=5,b=7
    a=3,b=2
    a=1,b=8
    x=9,b=10
    

  • Functions/operators which have one or more empty arguments produce empty output: e.g.

    $ echo 'x=2,y=3' | mlr put '$a=$x+$y'
    x=2,y=3,a=5
    

    $ echo 'x=,y=3' | mlr put '$a=$x+$y'
    x=,y=3,a=
    

    $ echo 'x=,y=3' | mlr put '$a=log($x);$b=log($y)'
    x=,y=3,a=,b=1.098612
    

    with the exception that the min and max functions are special: if one argument is non-null, it wins:

    $ echo 'x=,y=3' | mlr put '$a=min($x,$y);$b=max($x,$y)'
    x=,y=3,a=3,b=3
    

  • Functions of absent variables (e.g. mlr put '$y = log10($nonesuch)') evaluate to absent, and arithmetic/bitwise/boolean operators with both operands being absent evaluate to absent. Arithmetic operators with one absent operand return the other operand. More specifically, absent values act like zero for addition/subtraction, and one for multiplication: Furthermore, any expression which evaluates to absent is not stored in the left-hand side of an assignment statement :

    $ echo 'x=2,y=3' | mlr put '$a=$u+$v; $b=$u+$y; $c=$x+$y'
    x=2,y=3,b=3,c=5
    

    $ echo 'x=2,y=3' | mlr put '$a=min($x,$v);$b=max($u,$y);$c=min($u,$v)'
    x=2,y=3,a=2,b=3
    

  • Likewise, for assignment to maps, absent-valued keys or values result in a skipped assignment.
The reasoning is as follows:

Since absent plus absent is absent (and likewise for other operators), accumulations such as @sum += $x work correctly on heterogenous data, as do within-record formulas if both operands are absent. If one operand is present, you may get behavior you don’t desire. To work around this — namely, to set an output field only for records which have all the inputs present — you can use a pattern-action block with is_present:

$ mlr cat data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false

$ mlr put 'is_present($loadsec) { $loadmillis = $loadsec * 1000 }' data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000
record_count=100,resource=/path/to/file
resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000
record_count=150,resource=/path/to/second/file
resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000

$ mlr put '$loadmillis = (is_present($loadsec) ? $loadsec : 0.0) * 1000' data/het.dkvp
resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000
record_count=100,resource=/path/to/file,loadmillis=0.000000
resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000
record_count=150,resource=/path/to/second/file,loadmillis=0.000000
resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000

If you’re interested in a formal description of how empty and absent fields participate in arithmetic, here’s a table for plus (other arithmetic/boolean/bitwise operators are similar):

$ mlr --print-type-arithmetic-info
(+)    | error  absent empty  string int    float  bool
------ + ------ ------ ------ ------ ------ ------ ------
error  | error  error  error  error  error  error  error
absent | error  absent absent error  int    float  error
empty  | error  absent empty  error  empty  empty  error
string | error  error  error  error  error  error  error
int    | error  int    empty  error  int    float  error
float  | error  float  empty  error  float  float  error
bool   | error  error  error  error  error  error  error

String literals

You can use the following backslash escapes for strings such as between the double quotes in contexts such as mlr filter '$name =~ "..."', mlr put '$name = $othername . "..."', mlr put '$name = sub($name, "...", "..."), etc.:

  • \a: ASCII code 0x07 (alarm/bell)
  • \b: ASCII code 0x08 (backspace)
  • \f: ASCII code 0x0c (formfeed)
  • \n: ASCII code 0x0a (LF/linefeed/newline)
  • \r: ASCII code 0x0d (CR/carriage return)
  • \t: ASCII code 0x09 (tab)
  • \v: ASCII code 0x0b (vertical tab)
  • \\: backslash
  • \": double quote
  • \123: Octal 123, etc. for \000 up to \377
  • \x7f: Hexadecimal 7f, etc. for \x00 up to \xff

See also https://en.wikipedia.org/wiki/Escape_sequences_in_C.

These replacements apply only to strings you key in for the DSL expressions for filter and put: that is, if you type \t in a string literal for a filter/put expression, it will be turned into a tab character. If you want a backslash followed by a t, then please type \\t.

However, these replacements are not done automatically within your data stream. If you wish to make these replacements, you can do, for example, for a field named field, mlr put '$field = gsub($field, "\\t", "\t")'. If you need to make such a replacement for all fields in your data, you should probably simply use the system sed command.

Regular expressions

Miller lets you use regular expressions (of type POSIX.2) in the following contexts:

  • In mlr filter with =~ or !=~, e.g. mlr filter '$url =~ "http.*com"'
  • In mlr put with sub or gsub, e.g. mlr put '$url = sub($url, "http.*com", "")'
  • In mlr having-fields, e.g. mlr having-fields --any-matching '^sda[0-9]'
  • In mlr cut, e.g. mlr cut -r -f '^status$,^sda[0-9]'
  • In mlr rename, e.g. mlr rename -r '^(sda[0-9]).*$,dev/\1'
  • In mlr grep, e.g. mlr --csv grep 00188555487 myfiles*.csv

Points demonstrated by the above examples:

  • There are no implicit start-of-string or end-of-string anchors; please use ^ and/or $ explicitly.
  • Miller regexes are wrapped with double quotes rather than slashes.
  • The i after the ending double quote indicates a case-insensitive regex.
  • Capture groups are wrapped with (...) rather than \(...\); use \( and \) to match against parentheses.

For filter and put, if the regular expression is a string literal (the normal case), it is precompiled at process start and reused thereafter, which is efficient. If the regular expression is a more complex expression, including string concatenation using ., or a column name (in which case you can take regular expressions from input data!), then regexes are compiled on each record which works but is less efficient. As well, in this case there is no way to specify case-insensitive matching.

Example:

$ cat data/regex-in-data.dat
name=jane,regex=^j.*e$
name=bill,regex=^b[ou]ll$
name=bull,regex=^b[ou]ll$

$ mlr filter '$name =~ $regex' data/regex-in-data.dat
name=jane,regex=^j.*e$
name=bull,regex=^b[ou]ll$

Regex captures

Regex captures of the form \0 through \9 are supported as follows:

  • Captures have in-function context for sub and gsub. For example, the first \1,\2 pair belong to the first sub and the second \1,\2 pair belong to the second sub:

    mlr put '$b = sub($a, "(..)_(...)", "\2-\1"); $c = sub($a, "(..)_(.)(..)", ":\1:\2:\3")'
    
  • Captures endure for the entirety of a put for the =~ and !=~ operators. For example, here the \1,\2 are set by the =~ operator and are used by both subsequent assignment statements:

    mlr put '$a =~ "(..)_(....); $b = "left_\1"; $c = "right_\2"'
    
  • The captures are not retained across multiple puts. For example, here the \1,\2 won’t be expanded from the regex capture:

    mlr put '$a =~ "(..)_(....)' then {... something else ...} then put '$b = "left_\1"; $c = "right_\2"'
    
  • Captures are ignored in filter for the =~ and !=~ operators. For example, there is no mechanism provided to refer to the first (..) as \1 or to the second (....) as \2 in the following filter statement:

    mlr filter '$a =~ "(..)_(....)'
    
  • Up to nine matches are supported: \1 through \9, while \0 is the entire match string; \15 is treated as \1 followed by an unrelated 5.

Arithmetic

Input scanning

Numbers in Miller are double-precision float or 64-bit signed integers. Anything scannable as int, e.g 123 or 0xabcd, is treated as an integer; otherwise, input scannable as float (4.56 or 8e9) is treated as float; everything else is a string.

If you want all numbers to be treated as floats, then you may use float() in your filter/put expressions (e.g. replacing $c = $a * $b with $c = float($a) * float($b)) — or, more simply, use mlr filter -F and mlr put -F which forces all numeric input, whether from expression literals or field values, to float. Likewise mlr stats1 -F and mlr step -F force integerable accumulators (such as count) to be done in floating-point.

Conversion by math routines

For most math functions, integers are cast to float on input, and produce float output: e.g. exp(0) = 1.0 rather than 1. The following, however, produce integer output if their inputs are integers: + - * / // % abs ceil floor max min round roundm sgn. As well, stats1 -a min, stats1 -a max, stats1 -a sum, step -a delta, and step -a rsum produce integer output if their inputs are integers.

Conversion by arithmetic operators

The sum, difference, and product of integers is again integer, except for when that would overflow a 64-bit integer at which point Miller converts the result to float.

The short of it is that Miller does this transparently for you so you needn’t think about it.

Implementation details of this, for the interested: integer adds and subtracts overflow by at most one bit so it suffices to check sign-changes. Thus, Miller allows you to add and subtract arbitrary 64-bit signed integers, converting only to float precisely when the result is less than -263 or greater than 263-1. Multiplies, on the other hand, can overflow by a word size and a sign-change technique does not suffice to detect overflow. Instead Miller tests whether the floating-point product exceeds the representable integer range. Now, 64-bit integers have 64-bit precision while IEEE-doubles have only 52-bit mantissas — so, there are 53 bits including implicit leading one. The following experiment explicitly demonstrates the resolution at this range:

   64-bit integer     64-bit integer     Casted to double           Back to 64-bit
       in hex           in decimal                                    integer
0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800
0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800
0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00
0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00
0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00
0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000
0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000
0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000

That is, one cannot check an integer product to see if it is precisely greater than 263-1 or less than -263 using either integer arithmetic (it may have already overflowed) or using double-precision (due to granularity). Instead Miller checks for overflow in 64-bit integer multiplication by seeing whether the absolute value of the double-precision product exceeds the largest representable IEEE double less than 263, which we see from the listing above is 9223372036854774784. (An alternative would be to do all integer multiplies using handcrafted multi-word 128-bit arithmetic. This approach is not taken.)

Pythonic division

Division and remainder are pythonic:

  • Quotient of integers is floating-point: 7/2 is 3.5.
  • Integer division is done with //: 7//2 is 3. This rounds toward the negative.
  • Remainders are non-negative.

On-line help

Examples:

$ mlr --help
Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names}

Command-line-syntax examples:
  mlr --csv cut -f hostname,uptime mydata.csv
  mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv
  mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat
  grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group
  mlr join -j account_id -f accounts.dat then group-by account_name balances.dat
  mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json
  mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*
  mlr stats2 -a linreg-pca -f u,v -g shape data/*
  mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/*
  mlr --from estimates.tbl put '
  for (k,v in $*) {
    if (is_numeric(v) && k =~ "^[t-z].*$") {
      $sum += v; $count += 1
    }
  }
  $mean = $sum / $count # no assignment if count unset'
  mlr --from infile.dat put -f analyze.mlr
  mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*'
  mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*'
  mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"'
  mlr --from infile.dat put  '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}'

Data-format examples:
  DKVP: delimited key-value pairs (Miller default format)
  +---------------------+
  | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
  | dish=7,egg=8,flint  | Record 2: "dish" => "7", "egg" => "8", "3" => "flint"
  +---------------------+

  NIDX: implicitly numerically indexed (Unix-toolkit style)
  +---------------------+
  | the quick brown     | Record 1: "1" => "the", "2" => "quick", "3" => "brown"
  | fox jumped          | Record 2: "1" => "fox", "2" => "jumped"
  +---------------------+

  CSV/CSV-lite: comma-separated values with separate header line
  +---------------------+
  | apple,bat,cog       |
  | 1,2,3               | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
  | 4,5,6               | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
  +---------------------+

  Tabular JSON: nested objects are supported, although arrays within them are not:
  +---------------------+
  | {                   |
  |  "apple": 1,        | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
  |  "bat": 2,          |
  |  "cog": 3           |
  | }                   |
  | {                   |
  |   "dish": {         | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => ""
  |     "egg": 7,       |
  |     "flint": 8      |
  |   },                |
  |   "garlic": ""      |
  | }                   |
  +---------------------+

  PPRINT: pretty-printed tabular
  +---------------------+
  | apple bat cog       |
  | 1     2   3         | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
  | 4     5   6         | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
  +---------------------+

  XTAB: pretty-printed transposed tabular
  +---------------------+
  | apple 1             | Record 1: "apple" => "1", "bat" => "2", "cog" => "3"
  | bat   2             |
  | cog   3             |
  |                     |
  | dish 7              | Record 2: "dish" => "7", "egg" => "8"
  | egg  8              |
  +---------------------+

  Markdown tabular (supported for output only):
  +-----------------------+
  | | apple | bat | cog | |
  | | ---   | --- | --- | |
  | | 1     | 2   | 3   | | Record 1: "apple => "1", "bat" => "2", "cog" => "3"
  | | 4     | 5   | 6   | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6"
  +-----------------------+

Help options:
  -h or --help                 Show this message.
  --version                    Show the software version.
  {verb name} --help           Show verb-specific help.
  --help-all-verbs             Show help on all verbs.
  -l or --list-all-verbs       List only verb names.
  -L                           List only verb names, one per line.
  -f or --help-all-functions   Show help on all built-in functions.
  -F                           Show a bare listing of built-in functions by name.
  -k or --help-all-keywords    Show help on all keywords.
  -K                           Show a bare listing of keywords by name.

Verbs:
   altkv bar bootstrap cat check clean-whitespace count-distinct count-similar
   cut decimate fill-down filter format-values fraction grep group-by
   group-like having-fields head histogram join label least-frequent
   merge-fields most-frequent nest nothing put regularize remove-empty-columns
   rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle
   skip-trivial-records sort stats1 stats2 step tac tail tee top uniq
   unsparsify

Functions for the filter and put verbs:
   + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~
   !=~ > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub
   ssub substr tolower toupper capitalize lstrip rstrip strip
   collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan
   atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10
   log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin
   sinh sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec
   fsec2dhms fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt
   sec2gmt sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms
   strftime strftime_local strptime strptime_local systime is_absent is_bool
   is_boolean is_empty is_empty_map is_float is_int is_map is_nonempty_map
   is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string
   asserting_absent asserting_bool asserting_boolean asserting_empty
   asserting_empty_map asserting_float asserting_int asserting_map
   asserting_nonempty_map asserting_not_empty asserting_not_map
   asserting_not_null asserting_null asserting_numeric asserting_present
   asserting_string boolean float fmtnum hexfmt int string typeof depth haskey
   joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum
   splitkv splitkvx splitnv splitnvx

Please use "mlr --help-function {function name}" for function-specific help.

Data-format options, for input, output, or both:
  --idkvp   --odkvp   --dkvp      Delimited key-value pairs, e.g "a=1,b=2"
                                  (this is Miller's default format).

  --inidx   --onidx   --nidx      Implicitly-integer-indexed fields
                                  (Unix-toolkit style).
  -T                              Synonymous with "--nidx --fs tab".

  --icsv    --ocsv    --csv       Comma-separated value (or tab-separated
                                  with --fs tab, etc.)

  --itsv    --otsv    --tsv       Keystroke-savers for "--icsv --ifs tab",
                                  "--ocsv --ofs tab", "--csv --fs tab".
  --iasv    --oasv    --asv       Similar but using ASCII FS 0x1f and RS 0x1e
  --iusv    --ousv    --usv       Similar but using Unicode FS U+241F (UTF-8 0xe2909f)
                                  and RS U+241E (UTF-8 0xe2909e)

  --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated
                                  with --fs tab, etc.). The 'lite' CSV does not handle
                                  RFC-CSV double-quoting rules; is slightly faster;
                                  and handles heterogeneity in the input stream via
                                  empty newline followed by new header line. See also
                                  http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc.

  --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab",
                                  "--ocsvlite --ofs tab", "--csvlite --fs tab".
  -t                              Synonymous with --tsvlite.
  --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e
  --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f)
                                  and RS U+241E (UTF-8 0xe2909e)

  --ipprint --opprint --pprint    Pretty-printed tabular (produces no
                                  output until all input is in).
                      --right     Right-justifies all fields for PPRINT output.
                      --barred    Prints a border around PPRINT output
                                  (only available for output).

            --omd                 Markdown-tabular (only available for output).

  --ixtab   --oxtab   --xtab      Pretty-printed vertical-tabular.
                      --xvright   Right-justifies values for XTAB format.

  --ijson   --ojson   --json      JSON tabular: sequence or list of one-level
                                  maps: {...}{...} or [{...},{...}].
    --json-map-arrays-on-input    JSON arrays are unmillerable. --json-map-arrays-on-input
    --json-skip-arrays-on-input   is the default: arrays are converted to integer-indexed
    --json-fatal-arrays-on-input  maps. The other two options cause them to be skipped, or
                                  to be treated as errors.  Please use the jq tool for full
                                  JSON (pre)processing.
                      --jvstack   Put one key-value pair per line for JSON
                                  output.
                      --jlistwrap Wrap JSON output in outermost [ ].
                    --jknquoteint Do not quote non-string map keys in JSON output.
                     --jvquoteall Quote map values in JSON output, even if they're
                                  numeric.
              --jflatsep {string} Separator for flattening multi-level JSON keys,
                                  e.g. '{"a":{"b":3}}' becomes a:b => 3 for
                                  non-JSON formats. Defaults to :.

  -p is a keystroke-saver for --nidx --fs space --repifs

  --mmap --no-mmap --mmap-below {n} Use mmap for files whenever possible, never, or
                                  for files less than n bytes in size. Default is for
                                  files less than 4294967296 bytes in size.
                                  'Whenever possible' means always except for when reading
                                  standard input which is not mmappable. If you don't know
                                  what this means, don't worry about it -- it's a minor
                                  performance optimization.

  Examples: --csv for CSV-formatted input and output; --idkvp --opprint for
  DKVP-formatted input and pretty-printed output.

  Please use --iformat1 --oformat2 rather than --format1 --oformat2.
  The latter sets up input and output flags for format1, not all of which
  are overridden in all cases by setting output format to format2.

Comments in data:
  --skip-comments                 Ignore commented lines (prefixed by "#")
                                  within the input.
  --skip-comments-with {string}   Ignore commented lines within input, with
                                  specified prefix.
  --pass-comments                 Immediately print commented lines (prefixed by "#")
                                  within the input.
  --pass-comments-with {string}   Immediately print commented lines within input, with
                                  specified prefix.
Notes:
* Comments are only honored at the start of a line.
* In the absence of any of the above four options, comments are data like
  any other text.
* When pass-comments is used, comment lines are written to standard output
  immediately upon being read; they are not part of the record stream.
  Results may be counterintuitive. A suggestion is to place comments at the
  start of data files.

Format-conversion keystroke-saver options, for input, output, or both:
As keystroke-savers for format-conversion you may use the following:
        --c2t --c2d --c2n --c2j --c2x --c2p --c2m
  --t2c       --t2d --t2n --t2j --t2x --t2p --t2m
  --d2c --d2t       --d2n --d2j --d2x --d2p --d2m
  --n2c --n2t --n2d       --n2j --n2x --n2p --n2m
  --j2c --j2t --j2d --j2n       --j2x --j2p --j2m
  --x2c --x2t --x2d --x2n --x2j       --x2p --x2m
  --p2c --p2t --p2d --p2n --p2j --p2x       --p2m
The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,
PPRINT, and markdown, respectively. Note that markdown format is available for
output only.

Compressed-data options:
  --prepipe {command} This allows Miller to handle compressed inputs. You can do
  without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...".
  However, when multiple input files are present, between-file separations are
  lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can
  specify an action to be taken on each input file. This pre-pipe command must
  be able to read from standard input; it will be invoked with
    {command} < {filename}.
  Examples:
    mlr --prepipe 'gunzip'
    mlr --prepipe 'zcat -cf'
    mlr --prepipe 'xz -cd'
    mlr --prepipe cat
  Note that this feature is quite general and is not limited to decompression
  utilities. You can use it to apply per-file filters of your choice.
  For output compression (or other) utilities, simply pipe the output:
    mlr ... | {your compression command}

Separator options, for input, output, or both:
  --rs     --irs     --ors              Record separators, e.g. 'lf' or '\r\n'
  --fs     --ifs     --ofs  --repifs    Field separators, e.g. comma
  --ps     --ips     --ops              Pair separators, e.g. equals sign

  Notes about line endings:
  * Default line endings (--irs and --ors) are "auto" which means autodetect from
    the input file format, as long as the input file(s) have lines ending in either
    LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as
    carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style).
  * If both irs and ors are auto (which is the default) then LF input will lead to LF
    output and CRLF input will lead to CRLF output, regardless of the platform you're
    running on.
  * The line-ending autodetector triggers on the first line ending detected in the input
    stream. E.g. if you specify a CRLF-terminated file on the command line followed by an
    LF-terminated file then autodetected line endings will be CRLF.
  * If you use --ors {something else} with (default or explicitly specified) --irs auto
    then line endings are autodetected on input and set to what you specify on output.
  * If you use --irs {something else} with (default or explicitly specified) --ors auto
    then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.

  Notes about all other separators:
  * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats
    do key-value pairs appear juxtaposed.
  * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines;
    XTAB records are separated by two or more consecutive IFS/OFS -- i.e.
    a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs
    auto for XTAB format. (XTAB's default IFS/OFS are "auto".)
  * OFS must be single-character for PPRINT format. This is because it is used
    with repetition for alignment; multi-character separators would make
    alignment impossible.
  * OPS may be multi-character for XTAB format, in which case alignment is
    disabled.
  * TSV is simply CSV using tab as field separator ("--fs tab").
  * FS/PS are ignored for markdown format; RS is used.
  * All FS and PS options are ignored for JSON format, since they are not relevant
    to the JSON format.
  * You can specify separators in any of the following ways, shown by example:
    - Type them out, quoting as necessary for shell escapes, e.g.
      "--fs '|' --ips :"
    - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'".
    - To avoid backslashing, you can use any of the following names:
      cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals
  * Default separators by format:
      File format  RS       FS       PS
      gen          N/A      (N/A)    (N/A)
      dkvp         auto     ,        =
      json         auto     (N/A)    (N/A)
      nidx         auto     space    (N/A)
      csv          auto     ,        (N/A)
      csvlite      auto     ,        (N/A)
      markdown     auto     (N/A)    (N/A)
      pprint       auto     space    (N/A)
      xtab         (N/A)    auto     space

Relevant to CSV/CSV-lite input only:
  --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1
                     of input files. Tip: combine with "label" to recreate
                     missing headers.
  --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line,
                     fill remaining keys with empty string. If a data line has more
                     fields than the header line, use integer field labels as in
                     the implicit-header case.
  --headerless-csv-output   Print only CSV data lines.
  -N                 Keystroke-saver for --implicit-csv-header --headerless-csv-output.

Double-quoting for CSV output:
  --quote-all        Wrap all fields in double quotes
  --quote-none       Do not wrap any fields in double quotes, even if they have
                     OFS or ORS in them
  --quote-minimal    Wrap fields in double quotes only if they have OFS or ORS
                     in them (default)
  --quote-numeric    Wrap fields in double quotes only if they have numbers
                     in them
  --quote-original   Wrap fields in double quotes if and only if they were
                     quoted on input. This isn't sticky for computed fields:
                     e.g. if fields a and b were quoted on input and you do
                     "put '$c = $a . $b'" then field c won't inherit a or b's
                     was-quoted-on-input flag.

Numerical formatting:
  --ofmt {format}    E.g. %.18lf, %.0lf. Please use sprintf-style codes for
                     double-precision. Applies to verbs which compute new
                     values, e.g. put, stats1, stats2. See also the fmtnum
                     function within mlr put (mlr --help-all-functions).
                     Defaults to %lf.

Other options:
  --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter
                     urand()/urandint()/urand32().
  --nr-progress-mod {m}, with m a positive integer: print filename and record
                     count to stderr every m input records.
  --from {filename}  Use this to specify an input file before the verb(s),
                     rather than after. May be used more than once. Example:
                     "mlr --from a.dat --from b.dat cat" is the same as
                     "mlr cat a.dat b.dat".
  -n                 Process no input files, nor standard input either. Useful
                     for mlr put with begin/end statements only. (Same as --from
                     /dev/null.) Also useful in "mlr -n put -v '...'" for
                     analyzing abstract syntax trees (if that's your thing).
  -I                 Process files in-place. For each file name on the command
                     line, output is written to a temp file in the same
                     directory, which is then renamed over the original. Each
                     file is processed in isolation: if the output format is
                     CSV, CSV headers will be present in each output file;
                     statistics are only over each file's own records; and so on.

Then-chaining:
Output of one verb may be chained as input to another using "then", e.g.
  mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color

Auxiliary commands:
Miller has a few otherwise-standalone executables packaged within it.
They do not participate in any other parts of Miller.
Available subcommands:
  aux-list
  lecat
  termcvt
  hex
  unhex
  netbsd-strptime
For more information, please invoke mlr {subcommand} --help

For more information please see http://johnkerl.org/miller/doc and/or
http://github.com/johnkerl/miller. This is Miller version v5.6.1-dev.

$ mlr sort --help
Usage: mlr sort {flags}
Flags:
  -f  {comma-separated field names}  Lexical ascending
  -n  {comma-separated field names}  Numerical ascending; nulls sort last
  -nf {comma-separated field names}  Same as -n
  -r  {comma-separated field names}  Lexical descending
  -nr {comma-separated field names}  Numerical descending; nulls sort first
Sorts records primarily by the first specified field, secondarily by the second
field, and so on.  (Any records not having all specified sort keys will appear
at the end of the output, in the order they were encountered, regardless of the
specified sort order.) The sort is stable: records that compare equal will sort
in the order they were encountered in the input record stream.

Example:
  mlr sort -f a,b -nr x,y,z
which is the same as:
  mlr sort -f a -f b -nr x -nr y -nr z

miller-5.6.2/doc/release-docs.html000066400000000000000000000241161354153536500170270ustar00rootroot00000000000000 Documents by release

Documents by release

For release notes per se — what changed from one release to the next — please see the following:

https://github.com/johnkerl/miller/tags

Note:

The following are full docsets as of the specified release:

miller-5.6.2/doc/square.csv000066400000000000000000000002441354153536500156040ustar00rootroot00000000000000color,shape,flag,index,quantity,rate red,square,1,15,79.2778,0.0130 red,square,0,48,77.5542,7.4670 red,square,0,64,77.1991,9.5310 purple,square,0,91,72.3735,8.2430 miller-5.6.2/doc/template.html000066400000000000000000000063501354153536500162740ustar00rootroot00000000000000 POKI_PUT_AUTOGEN_DISCLAIMER_HERE POKI_PUT_TITLE_HERE
Miller
POKI_PUT_NAVBAR_HERE

POKI_PUT_BODY_HERE miller-5.6.2/doc/triangle.csv000066400000000000000000000002211354153536500161040ustar00rootroot00000000000000color,shape,flag,index,quantity,rate yellow,triangle,1,11,43.6498,9.8870 purple,triangle,0,51,81.2290,8.5910 purple,triangle,0,65,80.1405,5.8240 miller-5.6.2/doc/variance.mlr000066400000000000000000000003161354153536500160730ustar00rootroot00000000000000@n += 1; @sumx += $x; @sumx2 += $x**2; end { @mean = @sumx / @n; @var = (@sumx2 - @mean * (2 * @sumx - @n * @mean)) / (@n - 1); @stddev = sqrt(@var); emitf @n, @sumx, @sumx2, @mean, @var, @stddev } miller-5.6.2/doc/verb-example-ewma.sh000066400000000000000000000000621354153536500174370ustar00rootroot00000000000000mlr --opprint step -a ewma -d 0.1 -f x data/small miller-5.6.2/doc/why.html000066400000000000000000000446131354153536500152740ustar00rootroot00000000000000 Why?

Someone asked me the other day about design, tradeoffs, thought process, why I felt it necessary to build Miller, etc. Here are some answers.

Who is Miller for?

For background, I’m a software engineer, with a heavy devops bent and a non-trivial amount of data-engineering in my career. Initially I wrote Miller mainly for myself: I’m coder-friendly (being a coder); I’m Github-friendly; most of my data are well-structured or easily structurable (TSV-formatted SQL-query output, CSV files, log files, JSON data structures); I care about interoperability between all the various formats Miller supports (I’ve encountered them all); I do all my work on Linux or OSX.

But now there’s this neat little tool which seems to be useful for people in various disciplines. I don’t even know entirely who. I can click through Github starrers and read a bit about what they seem to do, but not everyone’s on Github (or stars things). I’ve gotten a lot of feature requests through Github — but only from people who are Github users. Not everyone’s a coder (it seems like a lot of Miller’s Github starrers are devops folks like myself, or data-science-ish people, or biology/genomics folks.) A lot of people care 100% about CSV. And so on.

So I wonder (please drop a note at https://github.com/johnkerl/miller/issues) does Miller do what you need? Do you use it for all sorts of things, or just one or two nice things? Are there things you wish it did but it doesn’t? Is it almost there, or just nowhere near what you want? Are there not enough features or way too many? Are the docs too complicated; do you have a hard time finding out how to do what you want? Should I think differently about what this tool even is in the first place? Should I think differently about who it’s for?

What was Miller created to do?

First: there are tools like xsv which handles CSV marvelously and jq which handles JSON marvelously, and so on — but I over the years of my career in the software industry I’ve found myself, and others, doing a lot of ad-hoc things which really were fundamentally the same except for format. So the number one thing about Miller is doing common things while supporting multiple formats: (a) ingest a list of records where a record is a list of key-value pairs (however represented in the input files); (b) transform that stream of records; (c) emit the transformed stream — either in the same format as input, or in a different format.

Second thing, a lot like the first: just as I didn’t want to build something only for a single file format, I didn’t want to build something only for one problem domain. In my work doing software engineering, devops, data engineering, etc. I saw a lot of commonalities and I wanted to solve as many problems simultaneously as possible.

Third: it had to be streaming. As time goes by and we (some of us, sometimes) have machines with tens or hundreds of GB of RAM, it’s maybe less important, but I’m unhappy with tools which ingest all data, then do stuff, then emit all data. One reason is to be able to handle files bigger than available RAM. Another reason is to be able to handle input which trickles in, e.g. you have some process emitting data now and then and you can pipe it to Miller and it will emit transformed records one at a time.

Fourth: it had to be fast. This precludes all sorts of very nice things written in Ruby, for example. I love Ruby as a very expressive language, and I have several very useful little utility scripts written in Ruby. But a few years ago I ported over some of my old tried-and-true C programs and the lines-of-code count was a lot lower — it was great! Until I ran them on multi-GB files and realized they took 60x as long to complete. So I couldn’t write Miller in Ruby, or in languages like it. I was going to have to do something in a low-level language in order to make it performant. I did simple experiments in several languages, and nothing was as fast as C, so I used C: see also here.

Fifth thing: I wanted Miller to be pipe-friendly and interoperate with other command-line tools. Since the basic paradigm is ingest records, transform records, emit records — where the input and output formats can be the same or different, and the transform can be complex, or just pass-through — this means you can use it to transform data, or re-format it, or both. So if you just want to do data-cleaning/prep/formatting and do all the "real" work in R, you can. If you just want a little glue script between other tools you can get that. And if you want to do non-trivial data-reduction in Miller you can.

Sixth thing: Must have comprehensive documentation and unit-test. Since Miller handles a lot of formats and solves a lot of problems, there’s a lot to test and a lot to keep working correctly as I add features or optimize. And I wanted it to be able to explain itself — not only through web docs like the one you’re reading but also through man mlr and mlr --help, mlr sort --help, etc.

Seventh thing: Must have a domain-specific language (DSL) but also must let you do common things without it. All those little verbs Miller has to help you avoid having to write for-loops are great. I use them for keystroke-saving: mlr stats1 -a mean,stddev,min,max -f quantity, for example, without you having to write for-loops or define accumulator variables. But you also have to be able to break out of that and write arbitrary code when you want to: mlr put '$distance = $rate * $time' or anything else you can think up. In Perl/AWK/etc. it’s all DSL. In xsv et al. it’s all verbs. In Miller I like having the combination.

Eighth thing: It’s an awful lot of fun to write. In my experience I didn’t find any tools which do multi-format, streaming, efficient, multi-purpose, with DSL and non-DSL, so I wrote one. But I don’t guarantee it’s unique in the world. It fills a niche in the world (people use it) but it also fills a niche in my life.

Tradeoffs

Miller is command-line-only by design. People who want a graphical user interface won’t find it here. This is in part (a) accommodating my personal preferences, and in part (b) guided by my experience/belief that the command line is very expressive. Steep learning curve, yes. I consider that price worth paying.

Another tradeoff: supporting lists of records — each with only one depth — keeps me supporting only what can be expressed in all of those formats. E.g. in JSON you can have lists of lists of lists which Miller just doesn’t handle. So Miller can’t (and won’t) handle arbitrary JSON because it only handles tabular data which can be expressed in a variety of formats.

A third tradeoff is doing build-from-scratch in a low-level language. It’d be quicker to write (but slower to run) if written in a high-level language. If Miller were written in Python, it would be implemented in significantly fewer lines of code than its current C implementation. The DSL would just be an eval of Python code. And it would run slower, but maybe not enough slower to be a problem for most folks. Later I found out about the rows tool — if you find Miller useful, you should check out rows as well.

A fourth tradeoff is in the DSL (more visibly so in 5.0.0 but already in pre-5.0.0): how much to make it dynamically typed — so you can just say y=x+1 with a minimum number of keystrokes — vs. having it do a good job of telling you when you’ve made a typo. This is a common paradigm across all languages. Some like Ruby you don’t declare anything and they’re quick to code little stuff in but programs of even a few thousand lines (which isn’t large in the software world) become insanely unmanageable. Then Java at the other extreme which is very typesafe but you have to type in a lot of punctuation, angle brackets, datatypes, repetition, etc. just to be able to get anything done. And some in the middle like Go which are typesafe but with type inference which aim to do the best of both. In the Miller (5.0.0) DSL you get y=x+1 by default but you can have things like int y = x+1 etc. so the typesafety is opt-in. See also here for more information on type-checking.

Related tools

Moving forward

I originally aimed Miller at people who already know what sed/awk/cut/sort/join are and wanted some options. But as time goes by I realize that tools like this can be useful to folks who don’t know what those things are; people who aren’t primarily coders; people who are scientists, or data scientists. These days some journalists do data analysis. So moving forward in terms of docs, I am working on having more cookbook, follow-by-example stuff in addition to the existing language-reference kinds of stuff. And continuing to seek out input from people who use Miller on where to go next.

miller-5.6.2/doc/whyc-details.html000066400000000000000000000637321354153536500170650ustar00rootroot00000000000000 Why C: details

Why C: details
• Overview
• Timings
• Discussion
• Source code
    • C cat using fgets
    • C cat using getdelim
    • C cat using mmap
    • D cat
    • Rust cat
    • Go cat
    • Nim cat
    • D cut
    • Go cut
    • Nim cut
• Makefile
• Compiler versions
• Hardware

Overview

This section contains details substantiating the discussion at Why C?.

I did simple experiments in several languages. In one experiment (cat tests) I just read lines and printed them back out — a line-oriented cat. In another (cut tests) I consumed input lines like x=1,y=2,z=3 one at a time, split them on commas and equals signs to populate hash maps, transformed them (e.g. remove the y field), and emitted them. Basically mlr cut -x -f y with DKVP format. I didn’t do anything fancy — just using each language’s getline, string-split, hashmap-put, etc. (For C, the hashmap logic was my own and has turned into Miller per se.) And nothing was as fast as C, so I used C. Here are the experiments I kept (I failed to keep the Lua code, for example). Note that I re-ran the timings in 2019 using code written in 2015, for purposes of creating this page.

Timings

----------------------------------------------------------------
$ wc -l ../data/bigger
1000000 ../data/bigger

$ ls -lh ../data/bigger
-rw----r-- 1 kerl kerl 59M Sep 18 21:47 ../data/bigger

$ head ../data/bigger
a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533
a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776
a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463
a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729
a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697
a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694
a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006
a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059
a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864

----------------------------------------------------------------
$ cat timings.sh

time /bin/cat ../data/bigger > /dev/null
time catc < ../data/bigger  > /dev/null
time catc0 < ../data/bigger  > /dev/null
time catm ../data/bigger  > /dev/null
time catd < ../data/bigger  > /dev/null
time catgo < ../data/bigger  > /dev/null
time catrust < ../data/bigger  > /dev/null
time catnim < ../data/bigger  > /dev/null

time cutgo < ../data/bigger  > /dev/null
time cutd < ../data/bigger  > /dev/null
time cutnim < ../data/bigger  > /dev/null

----------------------------------------------------------------
$ bash -x timings.sh

+ /bin/cat ../data/bigger
real    0m0.026s
user    0m0.000s
sys     0m0.026s

+ catc
real    0m0.097s
user    0m0.076s
sys     0m0.021s

+ catc0
real    0m0.057s
user    0m0.028s
sys     0m0.028s

+ catm ../data/bigger
real    0m0.197s
user    0m0.177s
sys     0m0.020s

+ catd
real    0m0.258s
user    0m0.213s
sys     0m0.054s

+ catgo
real    0m0.121s
user    0m0.111s
sys     0m0.024s

+ catrust
real    0m1.055s
user    0m1.035s
sys     0m0.020s

+ catnim
real    0m0.624s
user    0m0.432s
sys     0m0.192s

+ cutgo
real    0m1.073s
user    0m1.079s
sys     0m0.041s

+ cutd
real    0m4.233s
user    0m4.462s
sys     0m0.113s

+ cutnim
real    0m21.380s
user    0m21.350s
sys     0m0.024s

Discussion

  • /bin/cat is quite a bit faster than my line-oriented C code. This shows that my simple experiments here don’t exhaust the possibilities of clever programming. Rather, they serve to compare and contrast the performance of straightforward coding in various languages.
  • I didn’t get any of the other languages to do line-oriented cat as fast as C. But Go was in the ballpark and was worth a further look.
  • The cut experiments separated it out. I iteratively commented out/in various steps of the cut steps and found (as noted in the source code below) big chunks of cutgo.go’s time in the simple map and write-to-stdout library-code operations. I failed to retain cutc.c as I originally implemented it in 2015 (it morphed gradually into Miller per se) but it was sufficiently faster than cutgo.go that I stuck with C for implementing Miller.
  • The full Miller executable running mlr cat or mlr cut is slower than these bare-bones C executables — I fully implemented Miller only in one language so there’s no apples-to-apples comparison with other languages.
  • While C was the clear winner in these very simple tests, it’s quite possible that had I committed to another language for full-featured Miller, it would have been faster in that language. That was a gamble I did not take.

Source code

C cat using fgets

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// ----------------------------------------------------------------
static int do_stream(char* file_name) {
	FILE* input_stream  = stdin;
	FILE* output_stream = stdout;

	if (strcmp(file_name, "-")) {
		input_stream = fopen(file_name, "r");
		if (input_stream == NULL) {
			perror(file_name);
			return 0;
		}
	}

	while (1) {
		char* line = NULL;
		size_t linecap = 0;
		ssize_t linelen = getdelim(&line, &linecap, '\n', input_stream);
		if (linelen <= 0) {
			break;
		}
		fputs(line, output_stream);
		free(line);
	}
	if (input_stream != stdin)
		fclose(input_stream);

	return 1;
}

// ================================================================
int main(int argc, char** argv) {
	int ok = 1;
	if (argc == 1) {
		ok = ok && do_stream("-");
	} else {
		for (int argi = 1; argi < argc; argi++) {
		    ok = do_stream(argv[argi]);
		}
	}
	return ok ? 0 : 1;
}

C cat using getdelim

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MYBUFSIZ 8192
static char iobuf[MYBUFSIZ];

// ----------------------------------------------------------------
static int do_stream(char* file_name) {
	FILE* input_stream  = stdin;
	FILE* output_stream = stdout;

	if (strcmp(file_name, "-")) {
		input_stream = fopen(file_name, "r");
		if (input_stream == NULL) {
			perror(file_name);
			return 0;
		}
	}

	while (1) {
		char* line = fgets(iobuf, BUFSIZ, input_stream);
		if (line == NULL)
			break;
		fputs(line, output_stream);
	}
	if (input_stream != stdin)
		fclose(input_stream);

	return 1;
}

// ================================================================
int main(int argc, char** argv) {
	int ok = 1;
	if (argc == 1) {
		ok = ok && do_stream("-");
	} else {
		for (int argi = 1; argi < argc; argi++) {
		    ok = do_stream(argv[argi]);
		}
	}
	return ok ? 0 : 1;
}

C cat using mmap

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/mman.h>

// ----------------------------------------------------------------
static void emit(char* sol, char* eol, FILE* output_stream) {
	 size_t ntowrite = eol - sol;
     size_t nwritten = fwrite(sol, 1, ntowrite, output_stream);
	 if (nwritten != ntowrite) {
		perror("fwrite");
		exit(1);
	 }
}

// ----------------------------------------------------------------
static int do_stream(char* file_name) {
	FILE* output_stream = stdout;
	int fd = open(file_name, O_RDONLY);
	if (fd < 0) {
		perror("open");
		exit(1);
	}
	struct stat stat;
	if (fstat(fd, &stat) < 0) {
		perror("fstat");
		exit(1);
	}
	char* sof = mmap(NULL, (size_t)stat.st_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, fd, (off_t)0);
	if (sof == MAP_FAILED) {
		perror("mmap");
		exit(1);
	}
	char* eof = sof + stat.st_size;
	char* sol = sof;
	char* eol;
	char* p = sof;

	while (p < eof) {
		if (*p == '\n') {
			*p = 0;
			eol = p;
			emit(sol, eol, output_stream);
			p++;
			sol = p;
		} else {
			p++;
		}
	}

	if (close(fd) < 0) {
		perror("close");
		exit(1);
	}

	return 1;
}

// ================================================================
int main(int argc, char** argv) {
	int ok = 1;
	for (int argi = 1; argi < argc; argi++) {
	    ok = do_stream(argv[argi]);
	}
	return ok ? 0 : 1;
}

D cat

// Reads $(D stdin) and writes it to $(D stdout).
import std.stdio;

void main()
{
	string line;
	while ((line = stdin.readln()) !is null)
		write(line);
}

Rust cat

use std::io;
use std::io::BufRead;

fn main() {
    for line in io::stdin().lock().lines() {
        print!("{}", line.unwrap());
    }
}

Go cat

package main

import (
	"bufio"
	"io"
	"log"
	"os"
)

// ----------------------------------------------------------------
func main() {
	args := os.Args[1:]
	includeFields := []string {"a", "x"};

	ok := true
	if len(args) == 0 {
		ok = handle("-", includeFields) && ok
	} else {
		for _, arg := range args {
			ok = handle(arg, includeFields) && ok
		}
	}
	if ok {
		os.Exit(0)
	} else {
		os.Exit(1)
	}
}

// ----------------------------------------------------------------
func handle(fileName string, includeFields []string) (ok bool) {
	inputStream := os.Stdin
	if fileName != "-" {
		var err error
		if inputStream, err = os.Open(fileName); err != nil {
			log.Println(err)
			return false
		}
	}

	reader := bufio.NewReader(inputStream)
	writer := bufio.NewWriter(os.Stdout)
	eof := false

	for !eof {
		line, err := reader.ReadString('\n')
		if err == io.EOF {
			err = nil
			eof = true
		} else if err != nil {
			log.Println(err)
			if fileName != "-" {
				inputStream.Close()
			}
			return false
		} else {
			writer.WriteString(line)
		}
	}
	if fileName != "-" {
		inputStream.Close()
	}
	writer.Flush()

	return true
}

Nim cat

for line in stdin.lines:
  echo(line)

D cut

// Reads $(D stdin) and writes it to $(D stdout).
// http://dlang.org/hash-map.html
import std.stdio;
import std.string;
import std.array;

void main() {
	string[] includeFields = ["a", "x"];
	string line;
	while ((line = stdin.readln()) !is null) {
		// Input string to hashmap.
		string[string] oldmap;
		string[] fields = split(line, ',');
		foreach (field; fields) {
			string[] kvps = split(field, '='); // really want splitN with max #parts = 2
			oldmap[kvps[0]] = kvps[1];
		}

		// Hashmap-to-hashmap transform.
		// Note: unordered hashmap here.
		string[string] newmap;
		foreach (includeField; includeFields) {
			if (includeField in oldmap) {
				newmap[includeField] = oldmap[includeField];
			}
		}

		// Hashmap to output strings.
		int i = 0;
		foreach (key; newmap.keys) {
			if (i > 0)
				write(',');
			write(key);
			write('=');
			write(newmap[key]);
			i++;
		}
		write('\n');
	}
}

Go cut

package main

import (
	"bufio"
	"io"
	"log"
	"os"
	"strings"
)

// ----------------------------------------------------------------
func main() {
	args := os.Args[1:]
	includeFields := []string {"a", "x"};

	ok := true
	if len(args) == 0 {
		ok = handle("-", includeFields) && ok
	} else {
		for _, arg := range args {
			ok = handle(arg, includeFields) && ok
		}
	}
	if ok {
		os.Exit(0)
	} else {
		os.Exit(1)
	}
}

// ----------------------------------------------------------------
func handle(fileName string, includeFields []string) (ok bool) {
	inputStream := os.Stdin
	if fileName != "-" {
		var err error
		if inputStream, err = os.Open(fileName); err != nil {
			log.Println(err)
			return false
		}
	}

	reader := bufio.NewReader(inputStream)
	writer := bufio.NewWriter(os.Stdout)
	eof := false

	for !eof {
		line, err := reader.ReadString('\n')
		if err == io.EOF {
			err = nil
			eof = true
		} else if err != nil {
			log.Println(err)
			if fileName != "-" {
				inputStream.Close()
			}
			return false
		} else {

			// 0.030s

			// Line to map
			mymap := make(map[string]string)
			fields := strings.Split(line, ",");
			for _, field := range(fields) {
				kvps := strings.SplitN(field, "=", 2)
				mymap[kvps[0]] = kvps[1]
			}
			// 0.220s
			// delta 0.190s
			// 27%

			// Map-to-map transform
			newmap := make(map[string]string)
			for _, includeField := range(includeFields) {
				value, present := mymap[includeField]
				if present {
					newmap[includeField] = value
				}
			}
			// 0.280s
			// delta 0.060s
			// 9%

			// Map to string
			outs := make([]string, len(newmap))
			i := 0
			for k, v := range(newmap) {
				outs[i] = k + "=" + v
				i++
			}
			// 0.320s
			// delta 0.040s
			// 6%

			out := strings.Join(outs, ",")
			// 0.330s
			// delta 0.010s
			// 2%

			// Write to output stream
			//fmt.Println("")
			writer.WriteString(out)
			// delta 0.390s
			// 56%

		}
	}
	if fileName != "-" {
		inputStream.Close()
	}
	writer.Flush()

	return true
}

Nim cut

import strutils, tables

for line in stdin.lines:
  #var map: OrderedTable[string,string]
  var map = {"":""}.newOrderedTable
  #var map = initTable[string, string]
  #var map: OrderedTable[string, string]
  #var map: newOrderedTable[string, string](16)
  for word in line.split(","):
      var pair = word.split("=")
      #echo(pair[0])
      #echo(pair[1])
      #echo()
      #map[pair[0]] = pair[1]
      map.add(pair[0], pair[1])

Makefile

all: catc catc0 catm catd catrust catgo catnim cutd cutgo cutnim
allc: catc catc0 catm

catc: catc.c
	gcc -Wall catc.c -o catc
catc0: catc0.c
	gcc -Wall catc0.c -o catc0
catm: catm.c
	gcc -Wall catm.c -o catm
catd: catd.d
	dmd -O catd.d
catrust: catrust.rs
	rustc catrust.rs
catgo: catgo.go
	go build catgo.go
catnim: catnim.nim
	nim compile catnim.nim
cutd: cutd.d
	dmd -O cutd.d
cutgo: cutgo.go
	go build cutgo.go
cutnim: cutnim.nim
	nim compile cutnim.nim

Compiler versions

$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ dmd --version
DMD64 D Compiler v2.088.0
Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved written by Walter Bright

$ rustc --version
rustc 1.36.0

$ go version
go version go1.10.4 linux/amd64

$ nim --version
Nim Compiler Version 0.17.2 (2018-02-05) [Linux: amd64]
Copyright (c) 2006-2018 by Andreas Rumpf

active boot switches: -d:release

Hardware

$ uname -a
Linux sprax 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 142
model name	: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping	: 10
microcode	: 0x96
cpu MHz		: 796.615
cache size	: 8192 KB
physical id	: 0
siblings	: 8
core id		: 0
cpu cores	: 4
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp
lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc
cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2
ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt
tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch
cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority ept vpid
fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap
clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves ibpb ibrs stibp dtherm ida
arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs		: cpu_meltdown spectre_v1 spectre_v2
bogomips	: 3984.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

... (8 CPUs total)

miller-5.6.2/doc/whyc.html000066400000000000000000000403321354153536500154310ustar00rootroot00000000000000 Why C?

Why not C?

C vs. Go, D, Rust, etc.; C is fast

I love Go (https://golang.org): I think it’s one of the best things ever to happen to our craft, and I use it often. The D language (http://dolang.org) is an exciting and elegant successor to C++ (more about which below) — D has many of Go’s strengths, with a tighter stylistic similarity to C. And initial experiments with Rust are intriguing. Yet with none of them could I obtain the throughput I get in C.

Details are written up at Why C: details.

One of Go’s most powerful features is the ease with which it allows quick-to-code, error-free concurrency. Yet Miller, like most high-volume text-processing tools, spends most of its time obtaining and parsing input strings and negligible time doing all subsequent processing. Thus the absence of in-process multiprocessing is only a slight penalty in this particular application domain — parallelism here is more easily achieved by running multiple single-threaded processes, each handling its own input files, either on a single host or split across multiple hosts.

C is ubiquitous

Every Unix-like system has a C compiler (or is an apt-get or yum install away from it). This, I hope, bodes well for uptake of Miller.

C is old-school

This alone is not enough reason to program in C, but since I find myself coding in C due to the other reasons on this page, it’s happy enough to use a throwback language for a throwback tool (see Why call it Miller?). That said, Miller is coded in GNU C99, it uses getopt-style command-line parsing, and for development work I make use of modern tools such as valgrind. K&R was a long, long time ago. (I’m writing plain C with // comments; enough said.)

C vs. C++

I have a strong personal distaste for C++: its syntax is an ugly layer over the simplicity of C; templates and STL are even more awkward and even less elegant. (Meanwhile I find Java, Go, and D to be both elegant and modern; I ruled them out not for aesthetics but for performance as described above.) Meanwhile all the positive features I would want from C++ are easily implementable in C as follows:

this pointers and attributes

The C++ compiler implictly inserts this pointers into method calls: for example
  class MyClass {
    private:
      char* a;
    public:
    MyClass(char* a) {
      this->a = strdup(a);
    }
    ~MyClass() {
      free(a);
    }
    int myMethod(char* b) {
      return strlen(a) + strlen(b);
    }
  };
  ...
  MyClass* myObj = new MyClass("hello");
  int x = myObj->myMethod("world");
results in something like
  void MyClass$constructorcharptr(MyClass* this, char* a) {
    this->a = strdup(a);
  }
  void MyClass$destructor(MyClass* this) {
    free(this->a);
  }
  int MyClass$myMethod(MyClass* this, char* b) {
    return strlen(this->a) + strlen(b);
  }
  MyClass* myObj = MyClass$constructorcharptr("hello");
  int x = MyClass$myMethod(myObj, "world");
It’s easy enough to imitate this: simply use the coding convention of prepending the class name to all methods, and placing this-pointers as the first arguments to methods. Miller uses precisely this approach. For example:
typedef struct _lrec_t {
  ...
} lrec_t;
// Constructors
lrec_t* lrec_csv_alloc(...) {
  lrec_t* prec = malloc(sizeof(lrec_t);
  ...
  prec->attribute = ...;
  return prec;
}
lrec_t* lrec_dkvp_alloc(...) {
  ...
}
// Destructor
void lrec_free(lrec_t* prec) {
  ...
  free(prec->attribute);
  ...
  free(prec);
}
// Methods
int lrec_foo(lrec_t* prec, ...) {
  return prec->...;
}
void lrec_bar(lrec_t* prec, ...) {
  prec->...;
}

This implements the object-oriented principle of encapsulation.

Interfaces and virtual-function pointers

Coding conventions again do most of the work, here accompanied by typdeffed function pointers. For example, here is Miller’s record-reader interface:
#include <stdio.h>
#include <containers/lrec.h>
typedef lrec_t* reader_func_t(FILE* fp, void* pvstate, context_t* pctx);
typedef void    reset_func_t(void* pvstate);
typedef void    reader_free_func_t(void* pvstate);

typedef struct _reader_t {
    void*               pvstate;
    reader_func_t*      preader_func; // Interface method
    reset_func_t*       preset_func;  // Interface method
    reader_free_func_t* pfree_func;   // Interface method
} reader_t;

A class implementing this interface might look like

// Attributes are private to this file
typedef struct _reader_csv_state_t {
  ...
} reader_csv_state_t;

// Implementation of interface methods. Marked static (file-scope) to not
// pollute the global namespace; exposed only via function pointers.
static lrec_t* reader_csv_func(FILE* input_stream, void* pvstate, context_t* pctx) {
  reader_csv_state_t* pstate = pvstate;
  ...  use various pstate->attributes ...
}
static void reset_csv_func(void* pvstate) {
  reader_csv_state_t* pstate = pvstate;
  ...  use various pstate->attributes ...
}
static void reader_csv_free(void* pvstate) {
  ...  use various pstate->attributes ...
}

// Constructor
reader_t* reader_csv_alloc(...) {
  reader_t* preader = mlr_malloc_or_die(sizeof(reader_t));

  reader_csv_state_t* pstate = mlr_malloc_or_die(sizeof(reader_csv_state_t));
  ... set various pstate->attributes ...

  preader->pvstate      = (void*)pstate;
  preader->preader_func = &reader_csv_func;
  preader->preset_func  = &reset_csv_func;
  preader->pfree_func   = &reader_csv_free;

  return preader;
}

// Factory method
  ...
  reader_t* preader = reader_csv_alloc(...);
  ...
// Method call
  ...
  lrec_t* pinrec = preader->preader_func(input_stream, preader->pvstate, pctx);
  ...

This implements the object-oriented principles of polymorphism and runtime binding.

More details are at https://github.com/johnkerl/miller/tree/master/c/containers.

miller-5.6.2/index.html000066400000000000000000000003571354153536500150240ustar00rootroot00000000000000 johnkerl.org webmaster redirect Documentation redirect miller-5.6.2/m4/000077500000000000000000000000001354153536500133425ustar00rootroot00000000000000miller-5.6.2/m4/libtool.m4000066400000000000000000011261711354153536500152610ustar00rootroot00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool 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 . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi 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 _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS miller-5.6.2/m4/ltoptions.m4000066400000000000000000000342621354153536500156460ustar00rootroot00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) miller-5.6.2/m4/ltsugar.m4000066400000000000000000000104401354153536500152640ustar00rootroot00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) miller-5.6.2/m4/ltversion.m4000066400000000000000000000012731354153536500156340ustar00rootroot00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) miller-5.6.2/m4/lt~obsolete.m4000066400000000000000000000137741354153536500161720ustar00rootroot00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) miller-5.6.2/miller.spec000066400000000000000000000042341354153536500151650ustar00rootroot00000000000000Summary: Name-indexed data processing tool Name: miller Version: 5.6.1 Release: 1%{?dist} License: BSD Source: https://github.com/johnkerl/miller/releases/download/%{version}/mlr-%{version}.tar.gz URL: http://johnkerl.org/miller/doc BuildRequires: gcc BuildRequires: flex >= 2.5.35 %description Miller (mlr) allows name-indexed data such as CSV and JSON files to be processed with functions equivalent to sed, awk, cut, join, sort etc. It can convert between formats, preserves headers when sorting or reversing, and streams data where possible so its memory requirements stay small. It works well with pipes and can feed "tail -f". %prep %setup -q -n mlr-%{version} %build %configure %make_build %check make check %install %make_install %files %license LICENSE.txt %doc README.md %{_bindir}/mlr %{_mandir}/man1/mlr.1* %changelog * Sat Sep 21 2019 John Kerl - 5.6.2-1 - 5.6.2 release * Mon Sep 16 2019 John Kerl - 5.6.1-1 - 5.6.1 release * Thu Sep 12 2019 John Kerl - 5.6.0-1 - 5.6.0 release * Sat Aug 31 2019 John Kerl - 5.5.0-1 - 5.5.0 release * Tue May 28 2019 Stephen Kitt - 5.4.0-1 - Fix up for Fedora * Sun Oct 14 2018 John Kerl - 5.4.0-1 - 5.4.0 release * Sat Jan 06 2018 John Kerl - 5.3.0-1 - 5.3.0 release * Thu Jul 20 2017 John Kerl - 5.2.2-1 - 5.2.2 release * Mon Jun 19 2017 John Kerl - 5.2.1-1 - 5.2.1 release * Sun Jun 11 2017 John Kerl - 5.2.0-1 - 5.2.0 release * Thu Apr 13 2017 John Kerl - 5.1.0-1 - 5.1.0 release * Sat Mar 11 2017 John Kerl - 5.0.1-1 - 5.0.1 release * Mon Feb 27 2017 John Kerl - 5.0.0-1 - 5.0.0 release * Sun Aug 21 2016 John Kerl - 4.5.0-1 - 4.5.0 release * Mon Apr 04 2016 John Kerl - 3.5.0-1 - 3.5.0 release * Sun Feb 14 2016 John Kerl - 3.4.0-1 - 3.4.0 release * Sun Feb 07 2016 John Kerl - 3.3.2-1 - Initial spec-file submission for Miller miller-5.6.2/msys2-build.sh000077500000000000000000000010621354153536500155320ustar00rootroot00000000000000#!/bin/bash echo ================================================================ # Note: I need this on my Windows machine with MSYS2 but it causes an # error on Appveyor. # sed 's/-lm/-lm -lpcreposix/' c/Makefile.am > temp; mv temp c/Makefile.am # sed 's/-lm/-lm -lpcreposix/' c/unit_test/Makefile.am > temp; mv temp c/unit_test/Makefile.am sed 's/#undef MLR_ON_MSYS2/#define MLR_ON_MSYS2/' c/lib/mlr_arch.h > temp; mv temp c/lib/mlr_arch.h echo ================================================================ ./configure make -C c/parsing lemon.exe make miller-5.6.2/name-ideas.txt000066400000000000000000000005761354153536500155760ustar00rootroot00000000000000package name: * mohawk (more than awk ... but in some ways it's also less than awk) * mohoc * seneca (sibling tribe of the mohawk) * qoppa (key-value-pair) * qipper (key-value-pair) * miller (glenn or steve -- old-school-throwback style) * thomp (tool for ordered hash-maps) * thump (tool for ordered hash-maps) * prefer an invented name to make it more easily searchable miller-5.6.2/perf/000077500000000000000000000000001354153536500137565ustar00rootroot00000000000000miller-5.6.2/perf/Makefile.no-autoconfig000066400000000000000000000007131354153536500201660ustar00rootroot00000000000000all: catc catc0 catm catd catrust catgo catnim cutd cutgo cutnim allc: catc catc0 catm catc: catc.c gcc -Wall catc.c -o catc catc0: catc0.c gcc -Wall catc0.c -o catc0 catm: catm.c gcc -Wall catm.c -o catm catd: catd.d dmd -O catd.d catrust: catrust.rs rustc catrust.rs catgo: catgo.go go build catgo.go catnim: catnim.nim nim compile catnim.nim cutd: cutd.d dmd -O cutd.d cutgo: cutgo.go go build cutgo.go cutnim: cutnim.nim nim compile cutnim.nim miller-5.6.2/perf/catc.c000066400000000000000000000016361354153536500150420ustar00rootroot00000000000000#include #include #include // ---------------------------------------------------------------- static int do_stream(char* file_name) { FILE* input_stream = stdin; FILE* output_stream = stdout; if (strcmp(file_name, "-")) { input_stream = fopen(file_name, "r"); if (input_stream == NULL) { perror(file_name); return 0; } } while (1) { char* line = NULL; size_t linecap = 0; ssize_t linelen = getdelim(&line, &linecap, '\n', input_stream); if (linelen <= 0) { break; } fputs(line, output_stream); free(line); } if (input_stream != stdin) fclose(input_stream); return 1; } // ================================================================ int main(int argc, char** argv) { int ok = 1; if (argc == 1) { ok = ok && do_stream("-"); } else { for (int argi = 1; argi < argc; argi++) { ok = do_stream(argv[argi]); } } return ok ? 0 : 1; } miller-5.6.2/perf/catc.c.txt000066400000000000000000000016361354153536500156600ustar00rootroot00000000000000#include #include #include // ---------------------------------------------------------------- static int do_stream(char* file_name) { FILE* input_stream = stdin; FILE* output_stream = stdout; if (strcmp(file_name, "-")) { input_stream = fopen(file_name, "r"); if (input_stream == NULL) { perror(file_name); return 0; } } while (1) { char* line = NULL; size_t linecap = 0; ssize_t linelen = getdelim(&line, &linecap, '\n', input_stream); if (linelen <= 0) { break; } fputs(line, output_stream); free(line); } if (input_stream != stdin) fclose(input_stream); return 1; } // ================================================================ int main(int argc, char** argv) { int ok = 1; if (argc == 1) { ok = ok && do_stream("-"); } else { for (int argi = 1; argi < argc; argi++) { ok = do_stream(argv[argi]); } } return ok ? 0 : 1; } miller-5.6.2/perf/catc0.c000066400000000000000000000016031354153536500151140ustar00rootroot00000000000000#include #include #include #define MYBUFSIZ 8192 static char iobuf[MYBUFSIZ]; // ---------------------------------------------------------------- static int do_stream(char* file_name) { FILE* input_stream = stdin; FILE* output_stream = stdout; if (strcmp(file_name, "-")) { input_stream = fopen(file_name, "r"); if (input_stream == NULL) { perror(file_name); return 0; } } while (1) { char* line = fgets(iobuf, BUFSIZ, input_stream); if (line == NULL) break; fputs(line, output_stream); } if (input_stream != stdin) fclose(input_stream); return 1; } // ================================================================ int main(int argc, char** argv) { int ok = 1; if (argc == 1) { ok = ok && do_stream("-"); } else { for (int argi = 1; argi < argc; argi++) { ok = do_stream(argv[argi]); } } return ok ? 0 : 1; } miller-5.6.2/perf/catc0.c.txt000066400000000000000000000016031354153536500157320ustar00rootroot00000000000000#include #include #include #define MYBUFSIZ 8192 static char iobuf[MYBUFSIZ]; // ---------------------------------------------------------------- static int do_stream(char* file_name) { FILE* input_stream = stdin; FILE* output_stream = stdout; if (strcmp(file_name, "-")) { input_stream = fopen(file_name, "r"); if (input_stream == NULL) { perror(file_name); return 0; } } while (1) { char* line = fgets(iobuf, BUFSIZ, input_stream); if (line == NULL) break; fputs(line, output_stream); } if (input_stream != stdin) fclose(input_stream); return 1; } // ================================================================ int main(int argc, char** argv) { int ok = 1; if (argc == 1) { ok = ok && do_stream("-"); } else { for (int argi = 1; argi < argc; argi++) { ok = do_stream(argv[argi]); } } return ok ? 0 : 1; } miller-5.6.2/perf/catd.d000066400000000000000000000002341354153536500150350ustar00rootroot00000000000000// Reads $(D stdin) and writes it to $(D stdout). import std.stdio; void main() { string line; while ((line = stdin.readln()) !is null) write(line); } miller-5.6.2/perf/catd.d.txt000066400000000000000000000002341354153536500156530ustar00rootroot00000000000000// Reads $(D stdin) and writes it to $(D stdout). import std.stdio; void main() { string line; while ((line = stdin.readln()) !is null) write(line); } miller-5.6.2/perf/catgo.go000066400000000000000000000021571354153536500154070ustar00rootroot00000000000000package main import ( "bufio" "io" "log" "os" ) // ---------------------------------------------------------------- func main() { args := os.Args[1:] includeFields := []string {"a", "x"}; ok := true if len(args) == 0 { ok = handle("-", includeFields) && ok } else { for _, arg := range args { ok = handle(arg, includeFields) && ok } } if ok { os.Exit(0) } else { os.Exit(1) } } // ---------------------------------------------------------------- func handle(fileName string, includeFields []string) (ok bool) { inputStream := os.Stdin if fileName != "-" { var err error if inputStream, err = os.Open(fileName); err != nil { log.Println(err) return false } } reader := bufio.NewReader(inputStream) writer := bufio.NewWriter(os.Stdout) eof := false for !eof { line, err := reader.ReadString('\n') if err == io.EOF { err = nil eof = true } else if err != nil { log.Println(err) if fileName != "-" { inputStream.Close() } return false } else { writer.WriteString(line) } } if fileName != "-" { inputStream.Close() } writer.Flush() return true } miller-5.6.2/perf/catgo.go.txt000066400000000000000000000021571354153536500162250ustar00rootroot00000000000000package main import ( "bufio" "io" "log" "os" ) // ---------------------------------------------------------------- func main() { args := os.Args[1:] includeFields := []string {"a", "x"}; ok := true if len(args) == 0 { ok = handle("-", includeFields) && ok } else { for _, arg := range args { ok = handle(arg, includeFields) && ok } } if ok { os.Exit(0) } else { os.Exit(1) } } // ---------------------------------------------------------------- func handle(fileName string, includeFields []string) (ok bool) { inputStream := os.Stdin if fileName != "-" { var err error if inputStream, err = os.Open(fileName); err != nil { log.Println(err) return false } } reader := bufio.NewReader(inputStream) writer := bufio.NewWriter(os.Stdout) eof := false for !eof { line, err := reader.ReadString('\n') if err == io.EOF { err = nil eof = true } else if err != nil { log.Println(err) if fileName != "-" { inputStream.Close() } return false } else { writer.WriteString(line) } } if fileName != "-" { inputStream.Close() } writer.Flush() return true } miller-5.6.2/perf/catgo2.go000066400000000000000000000017251354153536500154710ustar00rootroot00000000000000package main import ( "bufio" "fmt" "log" "os" ) // ---------------------------------------------------------------- func main() { args := os.Args[1:] includeFields := []string {"a", "x"}; ok := true if len(args) == 0 { ok = handle("-", includeFields) && ok } else { for _, arg := range args { ok = handle(arg, includeFields) && ok } } if ok { os.Exit(0) } else { os.Exit(1) } } // ---------------------------------------------------------------- func handle(fileName string, includeFields []string) (ok bool) { inputStream := os.Stdin if fileName != "-" { var err error if inputStream, err = os.Open(fileName); err != nil { log.Println(err) return false } } scanner := bufio.NewScanner(inputStream) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "reading standard input:", err) } if fileName != "-" { inputStream.Close() } return true } miller-5.6.2/perf/catgo2.go.txt000066400000000000000000000017251354153536500163070ustar00rootroot00000000000000package main import ( "bufio" "fmt" "log" "os" ) // ---------------------------------------------------------------- func main() { args := os.Args[1:] includeFields := []string {"a", "x"}; ok := true if len(args) == 0 { ok = handle("-", includeFields) && ok } else { for _, arg := range args { ok = handle(arg, includeFields) && ok } } if ok { os.Exit(0) } else { os.Exit(1) } } // ---------------------------------------------------------------- func handle(fileName string, includeFields []string) (ok bool) { inputStream := os.Stdin if fileName != "-" { var err error if inputStream, err = os.Open(fileName); err != nil { log.Println(err) return false } } scanner := bufio.NewScanner(inputStream) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "reading standard input:", err) } if fileName != "-" { inputStream.Close() } return true } miller-5.6.2/perf/catm.c000066400000000000000000000026041354153536500150500ustar00rootroot00000000000000#include #include #include #include #include #include #include // ---------------------------------------------------------------- static void emit(char* sol, char* eol, FILE* output_stream) { size_t ntowrite = eol - sol; size_t nwritten = fwrite(sol, 1, ntowrite, output_stream); if (nwritten != ntowrite) { perror("fwrite"); exit(1); } } // ---------------------------------------------------------------- static int do_stream(char* file_name) { FILE* output_stream = stdout; int fd = open(file_name, O_RDONLY); if (fd < 0) { perror("open"); exit(1); } struct stat stat; if (fstat(fd, &stat) < 0) { perror("fstat"); exit(1); } char* sof = mmap(NULL, (size_t)stat.st_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, fd, (off_t)0); if (sof == MAP_FAILED) { perror("mmap"); exit(1); } char* eof = sof + stat.st_size; char* sol = sof; char* eol; char* p = sof; while (p < eof) { if (*p == '\n') { *p = 0; eol = p; emit(sol, eol, output_stream); p++; sol = p; } else { p++; } } if (close(fd) < 0) { perror("close"); exit(1); } return 1; } // ================================================================ int main(int argc, char** argv) { int ok = 1; for (int argi = 1; argi < argc; argi++) { ok = do_stream(argv[argi]); } return ok ? 0 : 1; } miller-5.6.2/perf/catm2.c000066400000000000000000000036711354153536500151370ustar00rootroot00000000000000#include #include #include #include #include #include #include typedef struct _file_reader_mmap_state_t { char* sol; char* eof; int fd; } file_reader_mmap_state_t; file_reader_mmap_state_t file_reader_mmap_open(char* file_name) { file_reader_mmap_state_t state; state.fd = open(file_name, O_RDONLY); if (state.fd < 0) { perror("open"); exit(1); } struct stat stat; if (fstat(state.fd, &stat) < 0) { perror("fstat"); exit(1); } state.sol = mmap(NULL, (size_t)stat.st_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, state.fd, (off_t)0); if (state.sol == MAP_FAILED) { perror("mmap"); exit(1); } state.eof = state.sol + stat.st_size; return state; } void file_reader_mmap_close(file_reader_mmap_state_t* pstate) { if (close(pstate->fd) < 0) { perror("close"); exit(1); } } // ---------------------------------------------------------------- static void emit(char* sol, char* eol, FILE* output_stream) { size_t ntowrite = eol - sol; size_t nwritten = fwrite(sol, 1, ntowrite, output_stream); if (nwritten != ntowrite) { perror("fwrite"); exit(1); } fputc('\n', output_stream); } // ---------------------------------------------------------------- // xxx params/state: // * ctor: char*file_name // * reads: currptr, eofptr // * dtor: int fd static int do_stream(char* file_name) { FILE* output_stream = stdout; file_reader_mmap_state_t state = file_reader_mmap_open(file_name); char* eol; char* p = state.sol; while (p < state.eof) { if (*p == '\n') { *p = 0; eol = p; emit(state.sol, eol, output_stream); p++; state.sol = p; } else { p++; } } file_reader_mmap_close(&state); return 1; } // ================================================================ int main(int argc, char** argv) { int ok = 1; for (int argi = 1; argi < argc; argi++) { ok = do_stream(argv[argi]); } return ok ? 0 : 1; } miller-5.6.2/perf/catnim.nim000066400000000000000000000000461354153536500157360ustar00rootroot00000000000000for line in stdin.lines: echo(line) miller-5.6.2/perf/catrust.rs000066400000000000000000000002121354153536500160040ustar00rootroot00000000000000use std::io; use std::io::BufRead; fn main() { for line in io::stdin().lock().lines() { print!("{}", line.unwrap()); } } miller-5.6.2/perf/catrust.rs.txt000066400000000000000000000004311354153536500166250ustar00rootroot00000000000000use std::io; fn main() { for line in io::stdin().lock().lines() { print!("{}", line.unwrap()); } } //fn main() { // let mut reader = io::stdin(); // let mut line; // loop { // line = reader.read_line(); // print!("{}\n", line); // } //} miller-5.6.2/perf/cutd.d000066400000000000000000000016121354153536500150620ustar00rootroot00000000000000// Reads $(D stdin) and writes it to $(D stdout). // http://dlang.org/hash-map.html import std.stdio; import std.string; import std.array; void main() { string[] includeFields = ["a", "x"]; string line; while ((line = stdin.readln()) !is null) { // Input string to hashmap. string[string] oldmap; string[] fields = split(line, ','); foreach (field; fields) { string[] kvps = split(field, '='); // really want splitN with max #parts = 2 oldmap[kvps[0]] = kvps[1]; } // Hashmap-to-hashmap transform. // Note: unordered hashmap here. string[string] newmap; foreach (includeField; includeFields) { if (includeField in oldmap) { newmap[includeField] = oldmap[includeField]; } } // Hashmap to output strings. int i = 0; foreach (key; newmap.keys) { if (i > 0) write(','); write(key); write('='); write(newmap[key]); i++; } write('\n'); } } miller-5.6.2/perf/cutd.d.txt000066400000000000000000000016121354153536500157000ustar00rootroot00000000000000// Reads $(D stdin) and writes it to $(D stdout). // http://dlang.org/hash-map.html import std.stdio; import std.string; import std.array; void main() { string[] includeFields = ["a", "x"]; string line; while ((line = stdin.readln()) !is null) { // Input string to hashmap. string[string] oldmap; string[] fields = split(line, ','); foreach (field; fields) { string[] kvps = split(field, '='); // really want splitN with max #parts = 2 oldmap[kvps[0]] = kvps[1]; } // Hashmap-to-hashmap transform. // Note: unordered hashmap here. string[string] newmap; foreach (includeField; includeFields) { if (includeField in oldmap) { newmap[includeField] = oldmap[includeField]; } } // Hashmap to output strings. int i = 0; foreach (key; newmap.keys) { if (i > 0) write(','); write(key); write('='); write(newmap[key]); i++; } write('\n'); } } miller-5.6.2/perf/cutgo.go000066400000000000000000000037231354153536500154330ustar00rootroot00000000000000package main import ( "bufio" "io" "log" "os" "strings" ) // ---------------------------------------------------------------- func main() { args := os.Args[1:] includeFields := []string {"a", "x"}; ok := true if len(args) == 0 { ok = handle("-", includeFields) && ok } else { for _, arg := range args { ok = handle(arg, includeFields) && ok } } if ok { os.Exit(0) } else { os.Exit(1) } } // ---------------------------------------------------------------- func handle(fileName string, includeFields []string) (ok bool) { inputStream := os.Stdin if fileName != "-" { var err error if inputStream, err = os.Open(fileName); err != nil { log.Println(err) return false } } reader := bufio.NewReader(inputStream) writer := bufio.NewWriter(os.Stdout) eof := false for !eof { line, err := reader.ReadString('\n') if err == io.EOF { err = nil eof = true } else if err != nil { log.Println(err) if fileName != "-" { inputStream.Close() } return false } else { // 0.030s // Line to map mymap := make(map[string]string) fields := strings.Split(line, ","); for _, field := range(fields) { kvps := strings.SplitN(field, "=", 2) mymap[kvps[0]] = kvps[1] } // 0.220s // delta 0.190s // 27% // Map-to-map transform newmap := make(map[string]string) for _, includeField := range(includeFields) { value, present := mymap[includeField] if present { newmap[includeField] = value } } // 0.280s // delta 0.060s // 9% // Map to string outs := make([]string, len(newmap)) i := 0 for k, v := range(newmap) { outs[i] = k + "=" + v i++ } // 0.320s // delta 0.040s // 6% out := strings.Join(outs, ",") // 0.330s // delta 0.010s // 2% // Write to output stream //fmt.Println("") writer.WriteString(out) // delta 0.390s // 56% } } if fileName != "-" { inputStream.Close() } writer.Flush() return true } miller-5.6.2/perf/cutgo.go.txt000066400000000000000000000037231354153536500162510ustar00rootroot00000000000000package main import ( "bufio" "io" "log" "os" "strings" ) // ---------------------------------------------------------------- func main() { args := os.Args[1:] includeFields := []string {"a", "x"}; ok := true if len(args) == 0 { ok = handle("-", includeFields) && ok } else { for _, arg := range args { ok = handle(arg, includeFields) && ok } } if ok { os.Exit(0) } else { os.Exit(1) } } // ---------------------------------------------------------------- func handle(fileName string, includeFields []string) (ok bool) { inputStream := os.Stdin if fileName != "-" { var err error if inputStream, err = os.Open(fileName); err != nil { log.Println(err) return false } } reader := bufio.NewReader(inputStream) writer := bufio.NewWriter(os.Stdout) eof := false for !eof { line, err := reader.ReadString('\n') if err == io.EOF { err = nil eof = true } else if err != nil { log.Println(err) if fileName != "-" { inputStream.Close() } return false } else { // 0.030s // Line to map mymap := make(map[string]string) fields := strings.Split(line, ","); for _, field := range(fields) { kvps := strings.SplitN(field, "=", 2) mymap[kvps[0]] = kvps[1] } // 0.220s // delta 0.190s // 27% // Map-to-map transform newmap := make(map[string]string) for _, includeField := range(includeFields) { value, present := mymap[includeField] if present { newmap[includeField] = value } } // 0.280s // delta 0.060s // 9% // Map to string outs := make([]string, len(newmap)) i := 0 for k, v := range(newmap) { outs[i] = k + "=" + v i++ } // 0.320s // delta 0.040s // 6% out := strings.Join(outs, ",") // 0.330s // delta 0.010s // 2% // Write to output stream //fmt.Println("") writer.WriteString(out) // delta 0.390s // 56% } } if fileName != "-" { inputStream.Close() } writer.Flush() return true } miller-5.6.2/perf/cutnim.nim000066400000000000000000000006641354153536500157700ustar00rootroot00000000000000import strutils, tables for line in stdin.lines: #var map: OrderedTable[string,string] var map = {"":""}.newOrderedTable #var map = initTable[string, string] #var map: OrderedTable[string, string] #var map: newOrderedTable[string, string](16) for word in line.split(","): var pair = word.split("=") #echo(pair[0]) #echo(pair[1]) #echo() #map[pair[0]] = pair[1] map.add(pair[0], pair[1]) miller-5.6.2/perf/do-timings.rb000077500000000000000000000215421354153536500163640ustar00rootroot00000000000000#!/usr/bin/ruby require 'time' # ---------------------------------------------------------------- def run(desc, cmd) t1 = Time.new system(cmd) status = $? t2 = Time.new secs = t2.to_f - t1.to_f if status.to_i == 0 puts("%-12s %6.3f %s" % [desc, secs, cmd]) else puts("%-12s %6s %s" % [desc, "ERROR", cmd]) end end # cutcut real 0.38 # cutmlr real 3.23 # cat real 0.09 # catc real 0.55 # ---------------------------------------------------------------- run("(cat)", "cat < ../data/big.dkvp > /dev/null") run("catc0", "catc0 < ../data/big.dkvp > /dev/null") run("catc0", "catc0 ../data/big.dkvp > /dev/null") run("catc", "catc < ../data/big.dkvp > /dev/null") run("catc", "catc ../data/big.dkvp > /dev/null") run("catm", "catm ../data/big.dkvp > /dev/null") run("catawk", "awk -F, '{print}' ../data/big.dkvp > /dev/null") run("catmawk", "mawk -F, '{print}' ../data/big.dkvp > /dev/null") run("CATMLR", "mlr --no-mmap cat ../data/big.dkvp > /dev/null") run("CATMLRM", "mlr --mmap cat ../data/big.dkvp > /dev/null") puts run("(catv)", "cat < ../data/big.csv > /dev/null") run("catc0v", "catc0 < ../data/big.csv > /dev/null") run("catc0v", "catc0 ../data/big.csv > /dev/null") run("catcv", "catc < ../data/big.csv > /dev/null") run("catcv", "catc ../data/big.csv > /dev/null") run("catmv", "catm ../data/big.csv > /dev/null") run("catawkv", "awk -F, '{print}' ../data/big.csv > /dev/null") run("catmawkv", "mawk -F, '{print}' ../data/big.csv > /dev/null") run("CATMLRV", "mlr --no-mmap --csv --rs lf cat ../data/big.csv > /dev/null") run("CATMLRVM", "mlr --mmap --csv --rs lf cat ../data/big.csv > /dev/null") run("CATMLRV", "mlr --no-mmap --csvlite cat ../data/big.csv > /dev/null") run("CATMLRVM", "mlr --mmap --csvlite cat ../data/big.csv > /dev/null") puts puts run("cutcut", "cut -d , -f 1,4 ../data/big.dkvp > /dev/null") run("cutawk", "awk -F, '{print $1,$4}' ../data/big.dkvp > /dev/null") run("cutmawk", "mawk -F, '{print $1,$4}' ../data/big.dkvp > /dev/null") run("CUTMLR", "mlr --no-mmap cut -f a,x ../data/big.dkvp > /dev/null") run("CUTMLRM", "mlr --mmap cut -f a,x ../data/big.dkvp > /dev/null") run("CUTMLRX", "mlr --no-mmap cut -x -f a,x ../data/big.dkvp > /dev/null") run("CUTMLRXM", "mlr --mmap cut -x -f a,x ../data/big.dkvp > /dev/null") puts run("cutcutv", "cut -d , -f 1,4 ../data/big.csv > /dev/null") run("cutawkv", "awk -F, '{print $1,$4}' ../data/big.csv > /dev/null") run("cutmawkv", "mawk -F, '{print $1,$4}' ../data/big.csv > /dev/null") run("CUTMLRV", "mlr --no-mmap --csv --rs lf cut -f a,x ../data/big.csv > /dev/null") run("CUTMLRVM", "mlr --mmap --csv --rs lf cut -f a,x ../data/big.csv > /dev/null") run("CUTMLRXV", "mlr --no-mmap --csv --rs lf cut -x -f a,x ../data/big.csv > /dev/null") run("CUTMLRXVM", "mlr --mmap --csv --rs lf cut -x -f a,x ../data/big.csv > /dev/null") run("CUTMLRV", "mlr --no-mmap --csvlite cut -f a,x ../data/big.csv > /dev/null") run("CUTMLRVM", "mlr --mmap --csvlite cut -f a,x ../data/big.csv > /dev/null") run("CUTMLRXV", "mlr --no-mmap --csvlite cut -x -f a,x ../data/big.csv > /dev/null") run("CUTMLRXVM", "mlr --mmap --csvlite cut -x -f a,x ../data/big.csv > /dev/null") puts puts run("rensed", "sed -e 's/x=/EKS=/' -e 's/b=/BEE=/' ../data/big.dkvp > /dev/null") run("RENMLR", "mlr --no-mmap rename x,EKS,b,BEE ../data/big.dkvp > /dev/null") run("RENMLRM", "mlr --mmap rename x,EKS,b,BEE ../data/big.dkvp > /dev/null") puts run("rensedv", "sed -e 's/x=/EKS=/' -e 's/b=/BEE=/' ../data/big.csv > /dev/null") run("RENMLRV", "mlr --no-mmap --csv --rs lf rename x,EKS,b,BEE ../data/big.csv > /dev/null") run("RENMLRVM", "mlr --mmap --csv --rs lf rename x,EKS,b,BEE ../data/big.csv > /dev/null") run("RENMLRV", "mlr --no-mmap --csvlite rename x,EKS,b,BEE ../data/big.csv > /dev/null") run("RENMLRVM", "mlr --mmap --csvlite rename x,EKS,b,BEE ../data/big.csv > /dev/null") puts puts run("addawk", "awk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}' ../data/big.dkvp > /dev/null") run("addmawk", "mawk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}' ../data/big.dkvp > /dev/null") run("ADDMLR", "mlr --no-mmap put '$z=$x+$y' ../data/big.dkvp > /dev/null") run("ADDMLRM", "mlr --mmap put '$z=$x+$y' ../data/big.dkvp > /dev/null") puts run("addawkv", "awk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}' ../data/big.csv > /dev/null") run("addmawkv", "mawk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}' ../data/big.csv > /dev/null") run("ADDMLRV", "mlr --no-mmap --csv --rs lf put '$z=$x+$y' ../data/big.csv > /dev/null") run("ADDMLRVM", "mlr --mmap --csv --rs lf put '$z=$x+$y' ../data/big.csv > /dev/null") run("ADDMLRV", "mlr --no-mmap --csvlite put '$z=$x+$y' ../data/big.csv > /dev/null") run("ADDMLRVM", "mlr --mmap --csvlite put '$z=$x+$y' ../data/big.csv > /dev/null") puts puts run("MEANMLR", "mlr --no-mmap stats1 -a mean -f x,y -g a,b ../data/big.dkvp > /dev/null") run("MEANMLRM", "mlr --mmap stats1 -a mean -f x,y -g a,b ../data/big.dkvp > /dev/null") run('CORRMLR', "mlr --no-mmap stats2 -a corr -f x,y -g a,b ../data/big.dkvp > /dev/null") run('CORRMLRM', "mlr --mmap stats2 -a corr -f x,y -g a,b ../data/big.dkvp > /dev/null") run('LINREGMLR', "mlr --no-mmap stats2 -a linreg-ols,linreg-pca -f x,y -g a,b ../data/big.dkvp > /dev/null") run('LINREGMLRM', "mlr --mmap stats2 -a linreg-ols,linreg-pca -f x,y -g a,b ../data/big.dkvp > /dev/null") puts run("MEANMLRV", "mlr --no-mmap --csv --rs lf stats1 -a mean -f x,y -g a,b ../data/big.csv > /dev/null") run("MEANMLRVM", "mlr --mmap --csv --rs lf stats1 -a mean -f x,y -g a,b ../data/big.csv > /dev/null") run('CORRMLRV', "mlr --no-mmap --csv --rs lf stats2 -a corr -f x,y -g a,b ../data/big.csv > /dev/null") run('CORRMLRVM', "mlr --mmap --csv --rs lf stats2 -a corr -f x,y -g a,b ../data/big.csv > /dev/null") run('LINREGMLRV', "mlr --no-mmap --csv --rs lf stats2 -a linreg-ols,linreg-pca -f x,y -g a,b ../data/big.csv > /dev/null") run('LINREGMLRVM', "mlr --mmap --csv --rs lf stats2 -a linreg-ols,linreg-pca -f x,y -g a,b ../data/big.csv > /dev/null") run("MEANMLRV", "mlr --no-mmap --csvlite stats1 -a mean -f x,y -g a,b ../data/big.csv > /dev/null") run("MEANMLRVM", "mlr --mmap --csvlite stats1 -a mean -f x,y -g a,b ../data/big.csv > /dev/null") run('CORRMLRV', "mlr --no-mmap --csvlite stats2 -a corr -f x,y -g a,b ../data/big.csv > /dev/null") run('CORRMLRVM', "mlr --mmap --csvlite stats2 -a corr -f x,y -g a,b ../data/big.csv > /dev/null") run('LINREGMLRV', "mlr --no-mmap --csvlite stats2 -a linreg-ols,linreg-pca -f x,y -g a,b ../data/big.csv > /dev/null") run('LINREGMLRVM', "mlr --mmap --csvlite stats2 -a linreg-ols,linreg-pca -f x,y -g a,b ../data/big.csv > /dev/null") puts puts puts run("sortsort1", "sort -t= -k 1,2 ../data/big.dkvp > /dev/null") run("SORTMLR1", "mlr --no-mmap sort -f a,b ../data/big.dkvp > /dev/null") run("SORTMLR1M", "mlr --mmap sort -f a,b ../data/big.dkvp > /dev/null") puts run("sortsort2", "sort -t, -k 4,5 ../data/big.dkvp > /dev/null") run("SORTMLR2", "mlr --no-mmap sort -n x,y ../data/big.dkvp > /dev/null") run("SORTMLR2M", "mlr --mmap sort -n x,y ../data/big.dkvp > /dev/null") puts puts run("sortsort1v", "sort -t, -k 1,4 ../data/big.csv > /dev/null") run("SORTMLR1V", "mlr --no-mmap --csv --rs lf sort -f a,x ../data/big.csv > /dev/null") run("SORTMLR1VM", "mlr --mmap --csv --rs lf sort -f a,x ../data/big.csv > /dev/null") run("SORTMLR1V", "mlr --no-mmap --csvlite sort -f a,x ../data/big.csv > /dev/null") run("SORTMLR1VM", "mlr --mmap --csvlite sort -f a,x ../data/big.csv > /dev/null") puts run("sortsort2v", "sort -t, -n -k 4,5 ../data/big.csv > /dev/null") run("SORTMLR2V", "mlr --no-mmap --csv --rs lf sort -n x,y ../data/big.csv > /dev/null") run("SORTMLR2VM", "mlr --mmap --csv --rs lf sort -n x,y ../data/big.csv > /dev/null") run("SORTMLR2V", "mlr --no-mmap --csvlite sort -n x,y ../data/big.csv > /dev/null") run("SORTMLR2VM", "mlr --mmap --csvlite sort -n x,y ../data/big.csv > /dev/null") miller-5.6.2/perf/mand/000077500000000000000000000000001354153536500146755ustar00rootroot00000000000000miller-5.6.2/perf/mand/mand.c000066400000000000000000000041761354153536500157700ustar00rootroot00000000000000#include #include #include int main(int argc, char** argv) { double rcorn = -2.0; double icorn = -2.0; double side = 4.0; int iheight = 500; int iwidth = 1000; int maxits = 100; int levelstep = 100; double jr = 0.0; double ji = 0.0; int do_julia = 0; char* chars = "@X*o-."; int nchars = strlen(chars); for (int argi = 1; argi < argc; argi++) { if (sscanf(argv[argi], "rcorn=%lf", &rcorn)) { } else if (sscanf(argv[argi], "icorn=%lf", &icorn)) { } else if (sscanf(argv[argi], "side=%lf", &side)) { } else if (sscanf(argv[argi], "iheight=%d", &iheight)) { } else if (sscanf(argv[argi], "iwidth=%d", &iwidth)) { } else if (sscanf(argv[argi], "dims=%d %d", &iheight, &iwidth)) { } else if (sscanf(argv[argi], "maxits=%d", &maxits)) { } else if (sscanf(argv[argi], "levelstep=%d", &levelstep)) { } else if (sscanf(argv[argi], "julia=%lf,%lf", &jr,&ji)) { do_julia = 1; } else { fprintf(stderr, "b04k!\n"); exit(1); } } putchar('+'); for (int ir = 1; ir < iwidth-1; ir += 1) { putchar('-'); } putchar('+'); putchar('\n'); for (int ii = iheight-1; ii > 0; ii -= 1) { double pi = icorn + ((double)ii/(double)iheight) * side; putchar('|'); for (int ir = 1; ir < iwidth-1; ir += 1) { double pr = rcorn + ((double)ir/(double)iwidth) * side; double zr = 0.0; double zi = 0.0; double cr = 0.0; double ci = 0.0; if (!do_julia) { zr = 0.0; zi = 0.0; cr = pr; ci = pi; } else { zr = pr; zi = pi; cr = jr; ci = ji; } // z := z^2 + c int iti = 0; int escaped = 0; for (iti = 0; iti < maxits; iti += 1) { double mag = zr*zr + zi+zi; if (mag > 4.0) { escaped = 1; break; } double zt = zr*zr - zi*zi + cr; zi = 2*zr*zi + ci; zr = zt; } if (!escaped) { putchar(' '); } else { int level = (iti / levelstep) % nchars; putchar(chars[level]); } } putchar('|'); putchar('\n'); } putchar('+'); for (int ir = 1; ir < iwidth-1; ir += 1) { putchar('-'); } putchar('+'); putchar('\n'); return 0; } miller-5.6.2/perf/mand/mand.mlr000066400000000000000000000026161354153536500163350ustar00rootroot00000000000000# Mandelbrot set generator: simple example of Miller DSL as programming language. begin { # Set defaults @rcorn = -2.0; @icorn = -2.0; @side = 4.0; @iheight = 500; @iwidth = 1000; @maxits = 100; @levelstep = 5; @chars = "@X*o-."; } # Override defaults @rcorn = $rcorn; @icorn = $icorn; @side = $side; @iheight = $iheight; @iwidth = $iwidth; @maxits = $maxits; @levelstep = $levelstep; @chars = $chars; end { print "RCORN = ".@rcorn; print "ICORN = ".@icorn; print "SIDE = ".@side; print "IHEIGHT = ".@iheight; print "IWIDTH = ".@iwidth; print "MAXITS = ".@maxits; print "LEVELSTEP = ".@levelstep; print "CHARS = ".@chars; for (int ii = @iheight-1; ii >= 0; ii -= 1) { num ci = @icorn + (ii/@iheight) * @side; for (int ir = 0; ir < @iwidth; ir += 1) { num cr = @rcorn + (ir/@iwidth) * @side; printn get_point_plot(cr, ci, @maxits); } print; } } func get_point_plot(cr, ci, maxits) { num zr = 0.0; num zi = 0.0; int iti = 0; bool escaped = false; num zt = 0; for (iti = 0; iti < maxits; iti += 1) { num mag = zr*zr + zi+zi; if (mag > 4.0) { escaped = true; break; } # z := z^2 + c zt = zr*zr - zi*zi + cr; zi = 2*zr*zi + ci; zr = zt; } if (!escaped) { return "."; } else { int level = (iti // @levelstep) % strlen(@chars); return substr(@chars, level, level); } } miller-5.6.2/perf/mand/mand.py000066400000000000000000000011751354153536500161720ustar00rootroot00000000000000#/usr/bin/python from __future__ import division; import sys rcorn = -2.0; icorn = -2.0; side = 4.0; iheight = 500; iwidth = 1000; maxits = 100; for ii in xrange(0, iheight+1): for ir in xrange(0, iwidth+1): cr = rcorn + (ir/iwidth) * side; ci = icorn + (ii/iheight) * side; zr = 0.0; zi = 0.0; # z := z^2 + c iti = 0; escaped = False; for iti in xrange(0, maxits): mag = zr*zr + zi+zi; if mag > 4.0: escaped = True; break; zt = zr*zr - zi*zi + cr; zi = 2*zr*zi + ci; zr = zt; if (escaped): sys.stdout.write("o"); else: sys.stdout.write("."); sys.stdout.write("\n"); miller-5.6.2/perf/mand/mand.rb000066400000000000000000000010441354153536500161400ustar00rootroot00000000000000#/usr/bin/ruby rcorn = -2.0 icorn = -2.0 side = 4.0 iheight = 500 iwidth = 1000 maxits = 100 for ii in 0..iheight ci = icorn + ((ii*1.0)/iheight) * side for ir in 0..iwidth cr = rcorn + ((ir*1.0)/iwidth) * side zr = 0.0 zi = 0.0 # z := z^2 + c iti = 0 escaped = false for iti in 0..maxits mag = zr*zr + zi+zi if mag > 4.0 escaped = true break end zt = zr*zr - zi*zi + cr zi = 2.0*zr*zi + ci zr = zt end if escaped print("o") else print(".") end end puts end miller-5.6.2/perf/mkplots.sh000077500000000000000000000004561354153536500160130ustar00rootroot00000000000000#!/bin/sh experiments=`mlr cut -f experiment < tn.out|sort -u|sed 's/experiment=//'` for experiment in $experiments; do mlr --onidx --ofs ' ' filter '$experiment=="'$experiment'"' then cut -x -f experiment tn.out | pgr -nc -title $experiment -xlabel nlines -ylabel seconds -legend 'a b' -lop & done miller-5.6.2/perf/nimcat.nim.txt000066400000000000000000000000461354153536500165540ustar00rootroot00000000000000for line in stdin.lines: echo(line) miller-5.6.2/perf/nimcut.nim.txt000066400000000000000000000006641354153536500166060ustar00rootroot00000000000000import strutils, tables for line in stdin.lines: #var map: OrderedTable[string,string] var map = {"":""}.newOrderedTable #var map = initTable[string, string] #var map: OrderedTable[string, string] #var map: newOrderedTable[string, string](16) for word in line.split(","): var pair = word.split("=") #echo(pair[0]) #echo(pair[1]) #echo() #map[pair[0]] = pair[1] map.add(pair[0], pair[1]) miller-5.6.2/perf/nimlc.nim000066400000000000000000000001201354153536500155560ustar00rootroot00000000000000var line_count = 0 for line in stdin.lines: line_count += 1 echo (line_count) miller-5.6.2/perf/nimwc.nim000066400000000000000000000002041354153536500155740ustar00rootroot00000000000000import strutils var word_count = 0 for line in stdin.lines: for word in line.split(","): word_count += 1 echo (word_count) miller-5.6.2/perf/t1s.rb000077500000000000000000000025261354153536500150220ustar00rootroot00000000000000#!/usr/bin/ruby require 'time' # ---------------------------------------------------------------- def run(desc, cmd) t1 = Time.new system(cmd) status = $? t2 = Time.new secs = t2.to_f - t1.to_f if status.to_i == 0 puts("%-12s %6.3f %s" % [desc, secs, cmd]) else puts("%-12s %6s %s" % [desc, "ERROR", cmd]) end end # cutcut real 0.38 # cutmlr real 3.23 # cat real 0.09 # catc real 0.55 # ---------------------------------------------------------------- run("sortsort1", "sort -t, -k 1,2 < data/big > /dev/null") #run("OSORTMLR1", "../c/mlr sort a,b < data/big > /dev/null") run("SORTMLR1", "mlr sort a,b < data/big > /dev/null") puts run("sortsort1v", "sort -t, -k 1,4 < data/big.csv > /dev/null") #run("OSORTMLR1V", "../c/mlr --csv sort a,x < data/big.csv > /dev/null") run("SORTMLR1V", "mlr --csv sort a,x < data/big.csv > /dev/null") puts run("sortsort2", "sort -t, -k 4,5 < data/big > /dev/null") #run("OSORTMLR2", "../c/mlr sort x,y < data/big > /dev/null") run("SORTMLR2", "mlr sort x,y < data/big > /dev/null") puts puts run("sortsort2v", "sort -t, -k 4,5 < data/big.csv > /dev/null") #run("OSORTMLR2V", "../c/mlr --csv sort x,y < data/big.csv > /dev/null") run("SORTMLR2V", "mlr --csv sort x,y < data/big.csv > /dev/null") miller-5.6.2/perf/timings.txt000066400000000000000000000041051354153536500161710ustar00rootroot00000000000000---------------------------------------------------------------- $ wc -l ../data/bigger 1000000 ../data/bigger $ ls -lh ../data/bigger -rw----r-- 1 kerl kerl 59M Sep 18 21:47 ../data/bigger $ head ../data/bigger a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 ---------------------------------------------------------------- $ cat timings.sh time /bin/cat ../data/bigger > /dev/null time catc < ../data/bigger > /dev/null time catc0 < ../data/bigger > /dev/null time catm ../data/bigger > /dev/null time catd < ../data/bigger > /dev/null time catgo < ../data/bigger > /dev/null time catrust < ../data/bigger > /dev/null time catnim < ../data/bigger > /dev/null time cutgo < ../data/bigger > /dev/null time cutd < ../data/bigger > /dev/null time cutnim < ../data/bigger > /dev/null ---------------------------------------------------------------- $ bash -x timings.sh + /bin/cat ../data/bigger real 0m0.026s user 0m0.000s sys 0m0.026s + catc real 0m0.097s user 0m0.076s sys 0m0.021s + catc0 real 0m0.057s user 0m0.028s sys 0m0.028s + catm ../data/bigger real 0m0.197s user 0m0.177s sys 0m0.020s + catd real 0m0.258s user 0m0.213s sys 0m0.054s + catgo real 0m0.121s user 0m0.111s sys 0m0.024s + catrust real 0m1.055s user 0m1.035s sys 0m0.020s + catnim real 0m0.624s user 0m0.432s sys 0m0.192s + cutgo real 0m1.073s user 0m1.079s sys 0m0.041s + cutd real 0m4.233s user 0m4.462s sys 0m0.113s + cutnim real 0m21.380s user 0m21.350s sys 0m0.024s miller-5.6.2/perf/tn.rb000077500000000000000000000052041354153536500147300ustar00rootroot00000000000000#!/usr/bin/ruby require 'time' # ================================================================ # Notes: # * mlr --onidx --ofs ' ' filter '$experiment=="sort1b"' then cut -x -f experiment tn.out |pgr -nc -title cut -xlabel nlines -ylabel seconds -legend 'a b' -lop # # ... # experiment=cat,nlines=100,mlrcat_seconds=3,awkcat_seconds=4 # experiment=cat,nlines=200,mlrcat_seconds=3,awkcat_seconds=4 # experiment=cat,nlines=300,mlrcat_seconds=3,awkcat_seconds=4 # experiment=cat,nlines=400,mlrcat_seconds=3,awkcat_seconds=4 # experiment=cut,nlines=100,mlrcut_seconds=3,awkcut_seconds=4 # experiment=cut,nlines=200,mlrcut_seconds=3,awkcut_seconds=4 # experiment=cut,nlines=300,mlrcut_seconds=3,awkcut_seconds=4 # experiment=cut,nlines=400,mlrcut_seconds=3,awkcut_seconds=4 # ... # ================================================================ def run_progs_for_linecounts(experiment, linecounts, progdesc_map) linecounts.each do |linecount| run_progs_for_linecount(experiment, linecount, progdesc_map) end end def run_progs_for_linecount(experiment, linecount, progdesc_map) timing_fields = progdesc_map.collect do |progdesc, prog| seconds = run_prog(experiment, linecount, progdesc, prog) "#{progdesc}=#{seconds}" end puts "experiment=#{experiment},linecount=#{linecount},#{timing_fields.join(',')}" end def run_prog(experiment, linecount, progdesc, prog) filename = "data/nlines/#{linecount}" cmd = "#{prog} < #{filename} > /dev/null" seconds = run_cmd(progdesc, cmd) seconds end def run_cmd(desc, cmd) t1 = Time.new system(cmd) status = $? t2 = Time.new secs = t2.to_f - t1.to_f if status.to_i == 0 secs else 'error' end end # ---------------------------------------------------------------- linecounts = [1, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000] run_progs_for_linecounts('cat', linecounts, { "cat" => "cat", "catc0" => "catc0", "catc" => "catc", "awkcat" => "awk -F , '{print}'", "mlrcat" => "mlr cat" }) run_progs_for_linecounts('cut', linecounts, { "cut" => "cut -d , -f 1,4", "awkcut" => "awk -F , '{print $1,$4}'", "mlrcat" => "mlr cut -f a,x" }) run_progs_for_linecounts('add', linecounts, { "awkadd" => "awk -F, '{gsub(\"x=\",\"\",$4);gsub(\"y=\",\"\",$5);print $4+$5}'", "mlradd" => "mlr put '$z=$x+$y'" }) run_progs_for_linecounts('sort2', linecounts, { "sort" => "sort -t, -k 1,4", "mlrsort" => "mlr sort a,x" }) run_progs_for_linecounts('sort1s', linecounts, { "sort" => "sort -t, -k 1", "mlrsort" => "mlr sort a" }) run_progs_for_linecounts('sort1b', linecounts, { "sort" => "sort -t, -k 4", "mlrsort" => "mlr sort x" }) miller-5.6.2/python/000077500000000000000000000000001354153536500143435ustar00rootroot00000000000000miller-5.6.2/python/sketch.py000077500000000000000000000424471354153536500162140ustar00rootroot00000000000000#!/usr/bin/python import os, sys import getopt import string, re import collections # ================================================================ # o inclflds a,x,b # o newflds '{$y:$x*$x, $z:$x/2, $n:-$z}' # o greprecs '$x <= 2 && $y eq "zebra"' # # o tabular pretty-print # o mean # o sort # absolute essentials: # * RECORD-LEVEL: # k include/exclude fields # o new field as function of old # o vertical pretty-print # * STREAM-LEVEL: # o include/exclude records # o sort # o summarizations: min, max, mean, count, sum, first, last # o tabular pretty-print # ================================================================ def usage(): print >> sys.stderr, "Usage: %s [options] {modulator-spec} {zero or more filenames}" % os.path.basename(sys.argv[0]) print >> sys.stderr, "Options:" print >> sys.stderr, " -R {rs} Input/output record separator" print >> sys.stderr, " -F {fs} Input/output field separator" print >> sys.stderr, " -P {ps} Input/output key-value-pair separator" print >> sys.stderr, " -v {name=value} xxx needs more doc" print >> sys.stderr, "" print >> sys.stderr, " --idkvp Input format is delimited by IRS,IFS,IPS" print >> sys.stderr, " --odkvp Output format is delimited by IRS,IFS,IPS" print >> sys.stderr, " --icsv Input format is delimited by IRS,IFS,IPS, with header line followed by data lines (e.g. CSV)" print >> sys.stderr, " --ocsv Output format is delimited by IRS,IFS,IPS, with header line followed by data lines (e.g. CSV)" print >> sys.stderr, " --inidx Input format is implicitly integer-indexed (awk-style)" print >> sys.stderr, " --onidx Output format is implicitly integer-indexed (awk-style)" print >> sys.stderr, " --ixtab Input format is transposed-tabular-pretty-print" print >> sys.stderr, " --oxtab Output format is transposed-tabular-pretty-print" print >> sys.stderr, "Modulator specs:" print >> sys.stderr, '--cat' print >> sys.stderr, '--tac' print >> sys.stderr, '--cut' print >> sys.stderr, '--cutx' print >> sys.stderr, '--sortfields' print >> sys.stderr, '--sortfieldsup' print >> sys.stderr, '--sortfieldsdown' sys.exit(1) # ---------------------------------------------------------------- def parse_command_line(): namespace = set_up_namespace() rreader = None rwriter = None rmodulator = None try: optargs, non_option_args = getopt.getopt(sys.argv[1:], "R:F:P:v:h", [ 'help', 'idkvp', 'odkvp', 'icsv', 'ocsv', 'inidx', 'onidx', 'ixtab', 'oxtab', 'cat', 'tac', 'cut=', 'cutx=', 'sortfields', 'sortfieldsup', 'sortfieldsdown']) except getopt.GetoptError, err: print str(err) usage() sys.exit(1) for opt, arg in optargs: if opt == '-R': rs = arg namespace.put("ORS", namespace.put("IRS", rs)) elif opt == '-F': fs = arg namespace.put("OFS", namespace.put("IFS", fs)) elif opt == '-P': ps = arg namespace.put("OPS", namespace.put("IPS", ps)) elif opt == '-v': kv = string.split(arg, "=", 1) namespace.put(kv[0], kv[1]) elif opt == '--idkvp': rreader = RecordReaderDefault(istream=sys.stdin, namespace=namespace, irs=namespace.get("IRS"), ifs=namespace.get("IFS"), ips=namespace.get("IPS")) elif opt == '--odkvp': rwriter = RecordWriterDefault(ostream=sys.stdout, ors=namespace.get("ORS"), ofs=namespace.get("OFS"), ops=namespace.get("OPS")) elif opt == '--icsv': rreader = RecordReaderHeaderFirst(istream=sys.stdin, namespace=namespace, irs=namespace.get("IRS"), ifs=namespace.get("IFS")) elif opt == '--ocsv': rwriter = RecordWriterHeaderFirst(ostream=sys.stdout, ors=namespace.get("ORS"), ofs=namespace.get("OFS")) elif opt == '--inidx': rreader = RecordReaderIntegerIndexed(istream=sys.stdin, namespace=namespace, irs=namespace.get("IRS"), ifs=namespace.get("IFS")) elif opt == '--onidx': rwriter = RecordWriterIntegerIndexed(ostream=sys.stdout, ors=namespace.get("ORS"), ofs=namespace.get("OFS")) #elif opt == '--ixtab': # pass elif opt == '--oxtab': rwriter = RecordWriterVerticallyTabulated(ostream=sys.stdout) # xxx args w/r/t/ RS/FS/PS?!? elif opt == '--cat': rmodulator = CatModulator() elif opt == '--tac': rmodulator = TacModulator() elif opt == '--cut': rmodulator = SelectFieldsModulator(string.split(arg, namespace.get("IFS"))) elif opt == '--cutx': rmodulator = DeselectFieldsModulator(string.split(arg, namespace.get("IFS"))) elif opt == '--cutx': rmodulator = DeselectFieldsModulator(string.split(arg, namespace.get("IFS"))) elif opt == '--sortfields': rmodulator = SortFieldsInRecordModulator(True) elif opt == '--sortfieldsup': rmodulator = SortFieldsInRecordModulator(True) elif opt == '--sortfieldsdown': rmodulator = SortFieldsInRecordModulator(False) elif opt == '--help': usage() else: print >> sys.stderr, "Unhandled option \"%s\"." % opt sys.exit(1) #xxx non_option_arg_count = len(non_option_args) if rreader == None: rreader = RecordReaderDefault(istream=sys.stdin, namespace=namespace, irs=namespace.get("IRS"), ifs=namespace.get("IFS"), ips=namespace.get("IPS")) if rwriter == None: rwriter = RecordWriterDefault(ostream=sys.stdout, ors=namespace.get("ORS"), ofs=namespace.get("OFS"), ops=namespace.get("OPS")) if rmodulator == None: rmodulator = CatModulator() return {'namespace':namespace, 'rreader':rreader, 'rwriter':rwriter, 'rmodulator':rmodulator} def main(): options = parse_command_line() # parse ARGV: # * --ifmt: dkvp,hdr1st,iidxed,align,xposealign # * --ofmt: dkvp,hdr1st,iidxed,align,xposealign # * which-control-language spec?!? # * modulators/script ... this is the key decision area for language(s) design. # * filenames namespace = options['namespace'] rreader = options['rreader'] rmodulator = options['rmodulator'] rwriter = options['rwriter'] smodulator = StreamModulator() smodulator.modulate(rreader, rmodulator, rwriter) # ================================================================ class MillerNamespace: def __init__(self): self.mapping = {} self.imapping = {} def get(self, name): return self.mapping[name] def iget(self, name): return self.imapping[name] def put(self, name, value): self.mapping[name] = value return value def iput(self, name, ivalue): self.imapping[name] = ivalue return ivalue # ================================================================ class Record: # kvs is list of pair-lists. (xxx: do tuples work too?) def __init__(self, kvs=[]): self.fields = collections.OrderedDict() self.mput(kvs) def put(self, k, v): self.fields[k] = v def mput(self, kvs): for [k,v] in kvs: self.fields[k] = v def get(self, k): return self.fields[k] def has_key(self, k): return self.fields.has_key(k) def get_field_names(self): return self.fields.keys() def get_pairs(self): return self.fields.items() def num_pairs(self): return len(self.fields.items()) # xxx xref to record-formatter classes def __str__(self): return self.fields.__repr__ def __repr__(self): return self.fields.__repr__ # ================================================================ # Each record is a sequence of fields delimited by FS, each of which is a # key-value pair separated by PS. class RecordReader: def __init__(self, istream, namespace, irs, ifs, ips): self.istream = istream self.namespace = namespace self.irs = irs self.ifs = ifs self.ips = ips class RecordReaderDefault(RecordReader): def __init__(self, istream, namespace, irs, ifs, ips): RecordReader.__init__(self, istream, namespace, irs, ifs, ips) def read(self): line = self.istream.readline() # xxx use self.irs if line == '': return None line = line.strip() # Remove leading/trailing whitespace including carriage return from readline(). fields = string.split(line, self.ifs) kvs = [string.split(field, self.ips, 1) for field in fields] record = Record(kvs) self.namespace.iput("NF", record.num_pairs) self.namespace.iput("NR", self.namespace.iget("NR") + 1) # xxx stub self.namespace.put("FILENAME", None) self.namespace.iput("FNR", self.namespace.iget("FNR") + 1) return record # ---------------------------------------------------------------- # awk-style class RecordReaderIntegerIndexed(RecordReader): # xxx ctor with istream context?!? or independent of that?!? for cskv, no matter. # csv reader of course needs context. def __init__(self, istream, namespace, irs, ifs): RecordReader.__init__(self, istream, namespace, irs, ifs, None) def read(self): # xxx use self.irs line = self.istream.readline() if line == '': return None line = line.strip() # Remove leading/trailing whitespace including carriage return from readline(). fields = re.split(self.ifs, line) kvs = [] i = 1 for field in fields: kvs.append([i, field]) i += 1 return Record(kvs) # ---------------------------------------------------------------- # csv-style class RecordReaderHeaderFirst(RecordReader): def __init__(self, istream, namespace, irs, ifs): RecordReader.__init__(self, istream, namespace, irs, ifs, None) self.field_names = None self.header_line = None def read(self): if self.field_names == None: header_line = self.istream.readline() if header_line == '': return None # Remove leading/trailing whitespace including carriage return from readline(). header_line = header_line.strip() self.field_names = string.split(header_line, self.ifs, -1) self.header_line = header_line data_line = self.istream.readline() if data_line == '': return None # Remove leading/trailing whitespace including carriage return from readline(). data_line = data_line.strip() field_values = string.split(data_line, self.ifs, -1) if len(self.field_names) != len(field_values): raise Exception("Header/data length mismatch: %d != %d in \"%s\" and \"%s\"" % \ (len(field_names), len(field_values), self.header_line, data_line)) return Record(zip(self.field_names, field_values)) # ================================================================ # xxx ostream at ctor?? needs drain-at-end logic for prettyprint. class RecordWriter: def __init__(self, ostream, ors, ofs, ops): self.ostream = ostream self.ors = ors self.ofs = ofs self.ops = ops class RecordWriterDefault(RecordWriter): def __init__(self, ostream, ors, ofs, ops): RecordWriter.__init__(self, ostream, ors, ofs, ops) def write(self, record): self.ostream.write(self.ofs.join([str(k)+self.ops+str(v) for [k,v] in record.get_pairs()])) self.ostream.write("\n") # ---------------------------------------------------------------- class RecordWriterHeaderFirst(RecordWriter): def __init__(self, ostream, ors, ofs): RecordWriter.__init__(self, ostream, ors, ofs, None) self.field_names = None def write(self, record): data_string = self.ofs.join([str(v) for [k,v] in record.get_pairs()]) if self.field_names == None: self.field_names = record.get_field_names() header_string = self.ofs.join([str(k) for [k,v] in record.get_pairs()]) self.ostream.write(header_string) self.ostream.write("\n") self.ostream.write(data_string) self.ostream.write("\n") # ---------------------------------------------------------------- # xxx rename class RecordWriterVerticallyTabulated(RecordWriter): def __init__(self, ostream): RecordWriter.__init__(self, ostream, None, None, None) def write(self, record): max_field_name_width = 1 field_names = record.get_field_names() for field_name in field_names: field_name_width = len(field_name) if field_name_width > max_field_name_width: max_field_name_width = field_name_width lines = [] for field_name in field_names: lines.append("%-*s %s" % (max_field_name_width, field_name, record.get(field_name))) self.ostream.write("\n".join(lines)) self.ostream.write("\n\n") # ---------------------------------------------------------------- class RecordWriterIntegerIndexed: def __init__(self, ostream, ors, ofs): self.ostream = ostream self.ors = ors self.ofs = ofs def write(self, record): self.ostream.write(self.ofs.join([str(v) for [k,v] in record.get_pairs()])) self.ostream.write("\n") # ================================================================ class CatModulator: def __init__(self): pass def modulate(self, record): if record == None: # drain at end return [] return [record] class TacModulator: def __init__(self): self.records = [] def modulate(self, record): if record == None: # drain at end self.records.reverse() rv = self.records self.records = [] return rv else: self.records.append(record) return [] class SelectFieldsModulator: def __init__(self, field_names): self.field_names = field_names def modulate(self, record): if record == None: # drain at end return [] kvs = [] for field_name in self.field_names: if record.has_key(field_name): kvs.append((field_name, record.get(field_name))) new_record = Record() new_record.mput(kvs) return [new_record] # The field_names argument may be a list or hash-set -- as long as it supports # the "in" operator as in "name in field_names". # xxx to do: use a hash-set internally. class DeselectFieldsModulator: def __init__(self, field_names): self.field_names = field_names def modulate(self, record): if record == None: # drain at end return [] kvs = [] for field_name in record.get_field_names(): if not field_name in self.field_names: kvs.append((field_name, record.get(field_name))) new_record = Record() new_record.mput(kvs) return [new_record] class SortFieldsInRecordModulator: def __init__(self, do_ascending_sort=True): self.do_ascending_sort = do_ascending_sort def modulate(self, record): if record == None: # drain at end return [] kvs = [] sorted_field_names = sorted(record.get_field_names()) if not self.do_ascending_sort: sorted_field_names.reverse() # xxx optimize for field_name in sorted_field_names: kvs.append((field_name, record.get(field_name))) new_record = Record() new_record.mput(kvs) return [new_record] class MeanKeeper: def __init__(self): self.sum = 0.0 self.count = 0 def put(x): self.sum += x self.count += 1 def get_sum(): return self.sum def get_count(): return self.count def get_mean(): # In IEEE-standard floating-point this would give NaN in the empty case. # But Python throws an exception on divide by zero instead. if self.count == 0: return None else: return self.sum / self.count class MeanModulator: def __init__(self, collate_field_names, key_field_names=[]): self.collate_field_names = collate_field_names self.key_field_names = key_field_names # map from key-field values to (map from collate-field names to MSCKeeper objects). self.collate_outputs = {} def modulate(self, record): if record != None: # drain at end # xxx optimize for value_field_name in self.collate_field_names: if not record.has_key(value_field_name): return [] for key_field_name in self.key_field_names: if not record.has_key(key_field_name): return [] collate_field_values = [float(record.get(k)) for k in self.collate_field_names] key_string = ",".join([record.get(k) for k in self.key_field_names]) return [] else: # xxx stub output_record = Record() output_record.put("foo", "bar") return [output_record] # ================================================================ class StreamModulator: def __init__(self): pass def modulate(self, rreader, rmodulator, rwriter): while True: in_record = rreader.read() out_records = rmodulator.modulate(in_record) for out_record in out_records: rwriter.write(out_record) if in_record == None: break # ================================================================ def set_up_namespace(): namespace = MillerNamespace() namespace.put("ORS", namespace.put("IRS", "\n")) namespace.put("OFS", namespace.put("IFS", ",")) namespace.put("OPS", namespace.put("IPS", "=")) # xxx CONVFMT namespace.put("FILENAME", None) namespace.iput("NF", None) namespace.iput("NR", 0) namespace.iput("FNR", 0) return namespace # ================================================================ main()